Кастомный клан бонус

Вообщем по просьбе Project-X чуть переделал клановый бонус.
Выкладываю сюда, может кому будет нужен.
Что изменил и добавил:?
- Сделал запись в отдельную таблицу игроков которые уже получили бонус ( лидера и сокланов) по HWID
- Сделал, что бы можно получить было только один бонус из 3х. Раньше можно было получить 1. 2 . 3 по очереди ( если условия соблюдены)
- Сделал награду лидеру отдельно итемов.
- Возможность выдавать Хиро лидеру и или игрокам
- Возможность выдавать ПА лидеру и или игрокам
- Вообщем смотрите конфиг.
-Вариации работает 3

Конфиг создать в папке с конфигами. название ai2 (можете в классе конфига изменить на свое)
# Сервис по выдаче бонусов кланам, проверка игроков происходит если они онлайн и у них не совпадает HWID
# Команда в чат .clanbonus .clanhelp или вызывать у Service NPC
ClanHelperEnableCustom = True
# Параметры награды за каждый из menuId.
# Формат строки: <menuId>=<player amount>:<clan_level>,[<item_id1>-<item_count1>,<item_id2>-<item_count2>]
# id клановой репутации -200
ClanHelperRewardParametersCustom = 1=1:8,[-200-3000];2=1:7,[-200-5000];3=1:8,[-200-10000]
ClanHelperAddFullSkillsCustom = true
#Ид Па бонуса
idPaBonusClan = 1
#Давать лидеру ПА? если всем отключено
ClanHelperAddPaBonusLeader = true
#Давать лидеру хиро? если всем отключено
ClanHelperAddHeroBonusLeader = true
#Давать лидеру отдельно бонус итемы?
ClanHelperAddLeaderReward = true
#Время на которое даем ПА всем в секундах!
TimeBonusSecondClan = 86400
#Время на которое даем ХИро ЛИДЕРУ в милисекундах!
durationHeroBonusClanLeader = 86400000

#Вариации бонуса
#MenuID - 1
#Давать всем членам клана ПА
ClanHelperAddPaBonusAll = true
#Давать всем членам клана Хиро
ClanHelperAddHeroBonusAll = false
#Итемы которые даем лидеру
ClanHelperAddLeaderRewardItems = 9509,500;9508,100
#Время на которое даем Хиро
durationHeroBonusClan = 86400000

#MenuID - 2
#Давать всем членам клана ПА
ClanHelperAddPaBonusAll2 = true
#Давать всем членам клана Хиро
ClanHelperAddHeroBonusAll2 = true
#Итемы которые даем лидеру
ClanHelperAddLeaderRewardItems2 = 9509,1000;9508,200
#Время на которое даем Хиро
durationHeroBonusClan2 = 86400000

#MenuID - 3
#Давать всем членам клана ПА
ClanHelperAddPaBonusAll3 = true
#Давать всем членам клана Хиро
ClanHelperAddHeroBonusAll3 = true
#Итемы которые даем лидеру
ClanHelperAddLeaderRewardItems3 = 9509,2000;9508,300
#Время на которое даем Хиро
durationHeroBonusClan3 = 86400000

Java:
package ai;

import l2.commons.configuration.ExProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static l2.commons.threading.RunnableImpl._log;
import static l2.gameserver.Config.load;

public class configAi {
    private static final Logger log = LoggerFactory.getLogger(configAi.class);
    public static final String CONFINGAI = "config/ai2.properties";

    public static boolean SERVICES_CLANHELPER_ENABLED_CUSTOM;
    public static String SERVICES_CLANHELPER_CONFIG_CUSTOM;
    public static boolean SERVICES_CLANHELPER_ADD_FULL_CLAN_SKILLS_CUSTOM;
    public static boolean SERVICES_CLANHELPER_ENABLED_PABONUS_ALL;
    public static boolean SERVICES_CLANHELPER_ENABLED_HEROBONUS_ALL;
    public static boolean SERVICES_CLANHELPER_ENABLED_PABONUS_ALL2;
    public static boolean SERVICES_CLANHELPER_ENABLED_HEROBONUS_ALL2;
    public static boolean SERVICES_CLANHELPER_ENABLED_PABONUS_ALL3;
    public static boolean SERVICES_CLANHELPER_ENABLED_HEROBONUS_ALL3;
    public static boolean SERVICES_CLANHELPER_ENABLED_PABONUS_LEADER;
    public static boolean SERVICES_CLANHELPER_ENABLED_HEROBONUS_LEADER;
    public static boolean CLAN_LEADER_REWARD;
    public static String CLAN_LEADER_REWARD_ITEMS;
    public static String CLAN_LEADER_REWARD_ITEMS2;
    public static String CLAN_LEADER_REWARD_ITEMS3;
    public static int ID_PA_BONUS;
    public static int ID_HERO_DURATION;
    public static int ID_HERO_DURATION_LEADER;
    public static int ID_HERO_DURATION2;
    public static int ID_HERO_DURATION3;
    public static long TIME_BONUS_MAKE2;


    public static void loadAISettings() {
        ExProperties var0 = load("config/ai2.properties");
        SERVICES_CLANHELPER_CONFIG_CUSTOM = var0.getProperty("ClanHelperRewardParametersCustom", "1=1:2;2=2:3,[-200-10000,57-100500];3=2:4,[-200-20000]");
        SERVICES_CLANHELPER_ENABLED_CUSTOM = var0.getProperty("ClanHelperEnableCustom", true);
        SERVICES_CLANHELPER_ADD_FULL_CLAN_SKILLS_CUSTOM = var0.getProperty("ClanHelperAddFullSkillsCustom", true);
        SERVICES_CLANHELPER_ENABLED_PABONUS_ALL = var0.getProperty("ClanHelperAddPaBonusAll", true);
        SERVICES_CLANHELPER_ENABLED_HEROBONUS_ALL = var0.getProperty("ClanHelperAddHeroBonusAll", true);
        SERVICES_CLANHELPER_ENABLED_PABONUS_ALL2 = var0.getProperty("ClanHelperAddPaBonusAll2", true);
        SERVICES_CLANHELPER_ENABLED_HEROBONUS_ALL2 = var0.getProperty("ClanHelperAddHeroBonusAll2", true);
        SERVICES_CLANHELPER_ENABLED_PABONUS_ALL3 = var0.getProperty("ClanHelperAddPaBonusAll3", true);
        SERVICES_CLANHELPER_ENABLED_HEROBONUS_ALL3 = var0.getProperty("ClanHelperAddHeroBonusAll3", true);
        SERVICES_CLANHELPER_ENABLED_PABONUS_LEADER = var0.getProperty("ClanHelperAddPaBonusLeader", true);
        SERVICES_CLANHELPER_ENABLED_HEROBONUS_LEADER = var0.getProperty("ClanHelperAddHeroBonusLeader", true);
        CLAN_LEADER_REWARD = var0.getProperty("ClanHelperAddLeaderReward", true);
        TIME_BONUS_MAKE2 = var0.getProperty("TimeBonusSecondClan", 1L);
        CLAN_LEADER_REWARD_ITEMS = var0.getProperty("ClanHelperAddLeaderRewardItems", "57,1;57,2");
        CLAN_LEADER_REWARD_ITEMS2 = var0.getProperty("ClanHelperAddLeaderRewardItems2", "57,1;57,2");
        CLAN_LEADER_REWARD_ITEMS3 = var0.getProperty("ClanHelperAddLeaderRewardItems3", "57,1;57,2");
        ID_PA_BONUS = var0.getProperty("idPaBonusClan", 0);
        ID_HERO_DURATION = var0.getProperty("durationHeroBonusClan", 0);
        ID_HERO_DURATION2 = var0.getProperty("durationHeroBonusClan2", 0);
        ID_HERO_DURATION3 = var0.getProperty("durationHeroBonusClan3", 0);
        ID_HERO_DURATION_LEADER = var0.getProperty("durationHeroBonusClanLeader", 0);

        log.info("Download okei ebat ai2.properties");

    }


    public void onReload() {
    }

    public void onShutdown() {
    }
}




Java:
package services;

import l2.gameserver.Announcements;
import l2.gameserver.Config;
import l2.gameserver.dao.AccountBonusDAO;
import l2.gameserver.model.Player;


import static ai.configAi.TIME_BONUS_MAKE2;

public class addHeroAndPa {

    public static void addPaCustom(Player player, int Id) {

        Config.RateBonusInfo bonusInfo = null;
        for (Config.RateBonusInfo info : Config.SERVICES_RATE_BONUS_INFO) {
            if (info.id == Id) {
                bonusInfo = info;
                bonusInfo.bonusTimeSeconds = TIME_BONUS_MAKE2;
                break;
            }
        }
        AccountBonusDAO.getInstance().store(player.getAccountName(), bonusInfo.makeBonus());
        player.stopBonusTask();
        player.startBonusTask();
        player.sendMessage("Поздравляю с получением премиума! Перезайдите(.relog)");
    }


    public static void addHeroCustom(Player killer, int duration) {
        if (killer.isPlayer()) {
            Player player = (Player) killer;
            if (!player.isHero()) {
                makeCustomHero(player, duration / 1000L);
                Announcements.getInstance().announceToAll("Поздравляем с получением статуса Героя, игрока - " + player.getName());
            }
        }
    }

    private static void makeCustomHero(Player player, long duration) {
        if (player.isHero()) {
            return;
        }

        player.setCustomHero(true, duration, Config.ALT_ALLOW_CUSTOM_HERO_SKILLS);
        player.broadcastUserInfo(true);
    }
}
 
Java:
package services;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

import ai.configAi;
import l2.gameserver.Config;
import l2.gameserver.cache.Msg;
import l2.gameserver.dao.CharacterVariablesDAO;
import l2.gameserver.handler.voicecommands.IVoicedCommandHandler;
import l2.gameserver.handler.voicecommands.VoicedCommandHandler;
import l2.gameserver.model.Player;
import l2.gameserver.model.Skill;
import l2.gameserver.model.instances.NpcInstance;
import l2.gameserver.model.items.ItemInstance;
import l2.gameserver.model.pledge.Clan;
import l2.gameserver.model.pledge.UnitMember;
import l2.gameserver.network.l2.GameClient;
import l2.gameserver.network.l2.components.CustomMessage;
import l2.gameserver.network.l2.components.SystemMsg;
import l2.gameserver.network.l2.s2c.L2GameServerPacket;
import l2.gameserver.network.l2.s2c.NpcHtmlMessage;
import l2.gameserver.network.l2.s2c.SystemMessage;
import l2.gameserver.network.l2.s2c.SystemMessage2;
import l2.gameserver.scripts.Functions;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.tables.SkillTable;
import l2.gameserver.utils.Log;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import util.ClanBonusCheck;

import static ai.configAi.*;



public class ClanBonusCustom extends Functions implements IVoicedCommandHandler, ScriptFile {

    private static final Logger log = LoggerFactory.getLogger(ClanHelperService.class);
    private static final String bXP = "@clanhelper.used";
    private String[] zT = new String[]{"clanbonusdem", "clandemonik"};
    private static final List<Skill> bXQ = Arrays.asList(SkillTable.getInstance().getInfo(370, 3), SkillTable.getInstance().getInfo(373, 3), SkillTable.getInstance().getInfo(379, 3), SkillTable.getInstance().getInfo(391, 1), SkillTable.getInstance().getInfo(371, 3), SkillTable.getInstance().getInfo(374, 3), SkillTable.getInstance().getInfo(376, 3), SkillTable.getInstance().getInfo(377, 3), SkillTable.getInstance().getInfo(383, 3), SkillTable.getInstance().getInfo(380, 3), SkillTable.getInstance().getInfo(382, 3), SkillTable.getInstance().getInfo(384, 3), SkillTable.getInstance().getInfo(385, 3), SkillTable.getInstance().getInfo(386, 3), SkillTable.getInstance().getInfo(387, 3), SkillTable.getInstance().getInfo(388, 3), SkillTable.getInstance().getInfo(390, 3), SkillTable.getInstance().getInfo(372, 3), SkillTable.getInstance().getInfo(375, 3), SkillTable.getInstance().getInfo(378, 3), SkillTable.getInstance().getInfo(381, 3), SkillTable.getInstance().getInfo(389, 3));
    static boolean SERVICES_CLANHELPER_ENABLED_CUSTOM = true;

    static String SERVICES_CLANHELPER_CONFIG_CUSTOM = "1=2:2;2=2:3,[-200-10000,57-100500];3=2:4,[-200-20000]";
    private static boolean bXR = false;
    private static Map<Integer, ClanHelperEntry> bXS = Collections.emptyMap();

    public ClanBonusCustom(){
    }

    public boolean useVoicedCommand(String var1, Player var2, String var3) {
        if (!configAi.SERVICES_CLANHELPER_ENABLED_CUSTOM) {
            return false;
        } else if (!this.zT[0].equalsIgnoreCase(var1) && !this.zT[1].equalsIgnoreCase(var1)) {
            return false;
        } else {
            NpcHtmlMessage var4 = new NpcHtmlMessage(var2, (NpcInstance)null);
            var4.setFile("scripts/services/command_clanhelper.htm");
            var2.sendPacket(var4);
            return true;
        }
    }

    public String[] getVoicedCommandList() {
        return !configAi.SERVICES_CLANHELPER_ENABLED_CUSTOM ? ArrayUtils.EMPTY_STRING_ARRAY : this.zT;
    }

    public void onLoad() {
        configAi.loadAISettings();
        if (configAi.SERVICES_CLANHELPER_ENABLED_CUSTOM) {
            StringTokenizer var1 = new StringTokenizer(configAi.SERVICES_CLANHELPER_CONFIG_CUSTOM, ";");
            LinkedHashMap var2 = new LinkedHashMap();

            while(var1.hasMoreTokens()) {
                String var3 = var1.nextToken();
                int var4 = var3.indexOf(61);
                int var5 = Integer.parseInt(var3.substring(0, var4));
                var2.put(var5, ClanBonusCustom.ClanHelperEntry.parse(var3.substring(var4 + 1)));
            }

            bXR = true;
            bXS = var2;
            VoicedCommandHandler.getInstance().registerVoicedCommandHandler(this);
            log.info("ClanHelperServiceDemonik: Loaded {} entry(s).", var2.size());
        } else {
            bXR = false;
            bXS = Collections.emptyMap();
            log.info("ClanHelperServiceDemonik: Disabled");
        }

    }

    private boolean a(Clan var1, int var2) {
        String var3 = CharacterVariablesDAO.getInstance().getVar(var1.getClanId(), "@clanhelper.used", "clan-var");
        if (var3 != null && !var3.isEmpty()) {
            String[] var4 = var3.split(";");
            int var5 = var4.length;

            for(int var6 = 0; var6 < var5; ++var6) {
                String var7 = var4[var6];
                if (!var7.isEmpty() && var2 == Integer.parseInt(var7)) {
                    return true;
                }
            }

            return false;
        } else {
            return false;
        }
    }

    private void b(Clan var1, int var2) {
        String var3 = StringUtils.defaultString(CharacterVariablesDAO.getInstance().getVar(var1.getClanId(), "@clanhelper.used", "clan-var"), "");
        CharacterVariablesDAO.getInstance().setVar(var1.getClanId(), "@clanhelper.used", "clan-var", String.format("%s;%d", var3, var2), -1L);
    }

    public void get_clan_help(String[] var1) {
        Player playerSelf = this.getSelf();
        if (playerSelf != null && CheckPlayerConditions(playerSelf)) {
            if (var1 != null && var1.length >= 1) {
                int var3 = Integer.parseInt(var1[0]);
                if (bXS.containsKey(var3)) {
                    ClanHelperEntry var4 = (ClanHelperEntry)bXS.get(var3);
                    if (bXR && configAi.SERVICES_CLANHELPER_ENABLED_CUSTOM) {
                        if (!playerSelf.isInPeaceZone()) {
                            playerSelf.sendPacket((new NpcHtmlMessage(5)).setFile("scripts/services/service_peace_zone.htm"));
                        } else {
                            Clan clan = playerSelf.getClan();
                            if (clan == null) {
                                playerSelf.sendPacket(Msg.YOU_ARE_NOT_A_CLAN_MEMBER);
                            } else if (clan.getLeaderId() != playerSelf.getObjectId()) {
                                playerSelf.sendPacket(Msg.ONLY_THE_CLAN_LEADER_IS_ENABLED);
                            } else if (this.a(clan, var3)) {
                                playerSelf.sendMessage(new CustomMessage("services.ClanHelper.Already", playerSelf, new Object[0]));
                            } else {
                                HashMap var6 = new HashMap();
                                List var7 = clan.getOnlineMembers(0);
                                Iterator allclanMemberOnline = var7.iterator();

                                while(allclanMemberOnline.hasNext()) {
                                    Player clanMember = (Player)allclanMemberOnline.next();
                                    if (clanMember.isConnected() && !clanMember.isLogoutStarted()) {
                                        GameClient var10 = clanMember.getNetConnection();
                                        if (var10 != null && var10.getHwid() != null && !var10.getHwid().isEmpty()) {
                                            var6.put(var10.getHwid(), clanMember);
                                        }
                                    }
                                }



                                if (var6.size() < var4.getRequiredClanSize()) {
                                    playerSelf.sendMessage(new CustomMessage("services.ClanHelper.ClanToSmall", playerSelf, new Object[0]));
                                } else {
                                    this.b(clan, 1);
                                    this.b(clan, 2);
                                    this.b(clan, 3);
                                    boolean var13 = false;
                                    if (var4.getRewardLevel() > 0 && var4.getRewardLevel() >= clan.getLevel()) {
                                        clan.setLevel(var4.getRewardLevel());
                                        var13 = true;
                                    }

                                    Iterator var14;
                                    if (configAi.SERVICES_CLANHELPER_ADD_FULL_CLAN_SKILLS_CUSTOM) {
                                        for(var14 = bXQ.iterator(); var14.hasNext(); var13 = true) {
                                            Skill var15 = (Skill)var14.next();
                                            clan.addSkill(var15, true);
                                            clan.broadcastToOnlineMembers(new L2GameServerPacket[]{(new SystemMessage2(SystemMsg.THE_CLAN_SKILL_S1_HAS_BEEN_ADDED)).addSkillName(var15)});
                                        }
                                    }
//Perv metod
                                    //List<Player> clanMembersList = new ArrayList<>();
//
                                    //while (allclanMemberOnline.hasNext()) {
                                    //    Player clanMember = (Player) allclanMemberOnline.next();
                                    //    clanMembersList.add(clanMember);
                                    //}
                                    //for (Player clanMember : clanMembersList) {
                                    //    Player mamber = clanMember.getPlayer();
                                    //    // Выдаем бонусы каждому члену клана
                                    //    if (SERVICES_CLANHELPER_ENABLED_PABONUS_ALL){
                                    //        addHeroAndPa.addPaCustom(mamber,ID_PA_BONUS);
                                    //        mamber.sendMessage("Заработал первыйметод");
                                    //    }
                                    //    if (SERVICES_CLANHELPER_ENABLED_HEROBONUS_ALL){
                                    //        addHeroAndPa.addHeroCustom(mamber,ID_HERO_DURATION);
                                    //    }
                                    //}
                                    //Vtoroi metod
                                    if (clan == null) {
                                        playerSelf.sendPacket(Msg.YOU_ARE_NOT_A_CLAN_MEMBER);
                                    } else {
                                        List<Player> clanMembers = clan.getOnlineMembers(0);
                                        clanMembers.removeIf(Player::isClanLeader);

                                        for (Player clanMember : clanMembers) {
                                            // Выполняем действия над каждым членом клана кроме лидера
                                            GameClient hwidClient = clanMember.getNetConnection();
                                            String hwid = hwidClient.getHwid();
                                            if (ClanBonusCheck.isHwidRegistered(hwid)) {
                                                UnitMember leaderClan = clan.getLeader();
                                                Player leader = leaderClan.getPlayer();
                                                leader.sendMessage("Член клана " + clanMember +  " уже получал бонус!");
                                                clanMember.sendMessage("Ты получал уже бонус! обмануть решил?!");
                                                log.info("Player with hwid " + hwid + " is already registered in the database");

                                            } else {
                                                if (var3 == 1) {
                                                    if (SERVICES_CLANHELPER_ENABLED_PABONUS_ALL) {
                                                        addHeroAndPa.addPaCustom(clanMember.getPlayer(), ID_PA_BONUS);

                                                    }
                                                    if (SERVICES_CLANHELPER_ENABLED_HEROBONUS_ALL) {
                                                        addHeroAndPa.addHeroCustom(clanMember.getPlayer(), ID_HERO_DURATION);

                                                    }
                                                }
                                                if (var3 == 2) {
                                                    if (SERVICES_CLANHELPER_ENABLED_PABONUS_ALL2) {
                                                        addHeroAndPa.addPaCustom(clanMember.getPlayer(), ID_PA_BONUS);

                                                    }
                                                    if (SERVICES_CLANHELPER_ENABLED_HEROBONUS_ALL2) {
                                                        addHeroAndPa.addHeroCustom(clanMember.getPlayer(), ID_HERO_DURATION2);

                                                    }
                                                }
                                                if (var3 == 3) {
                                                    if (SERVICES_CLANHELPER_ENABLED_PABONUS_ALL3) {
                                                        addHeroAndPa.addPaCustom(clanMember.getPlayer(), ID_PA_BONUS);

                                                    }
                                                    if (SERVICES_CLANHELPER_ENABLED_HEROBONUS_ALL3) {
                                                        addHeroAndPa.addHeroCustom(clanMember.getPlayer(), ID_HERO_DURATION3);

                                                    }
                                                }

                                                log.info("Player with hwid " + hwid + " is not registered in the database");
                                                ClanBonusCheck.insertPlayer(clanMember.getObjectId(), hwid);
                                                log.info("Player with hwid " + hwid + " has been added to the database");
                                                // выдаем бонус
                                            }

                                        }
                                    }

                                    UnitMember leaderClan = clan.getLeader();
                                    Player leader = leaderClan.getPlayer();
                                    if (playerSelf == leader) {
                                        if (CLAN_LEADER_REWARD) {
                                            GameClient hwidClient = leader.getNetConnection();
                                            String hwid = hwidClient.getHwid();
                                            if (ClanBonusCheck.isHwidRegistered(hwid)) {
                                                log.info("Player with hwid " + hwid + " is already registered in the database");

                                            } else {
                                                if (SERVICES_CLANHELPER_ENABLED_PABONUS_ALL) {
                                                    String weapon2lvlDrops = null;
                                                    if (var3 ==1){
                                                        weapon2lvlDrops = CLAN_LEADER_REWARD_ITEMS;
                                                    }
                                                    if (var3 == 2){
                                                        weapon2lvlDrops = CLAN_LEADER_REWARD_ITEMS2;
                                                    }
                                                    if (var3 == 3){
                                                        weapon2lvlDrops = CLAN_LEADER_REWARD_ITEMS3;
                                                    }

                                                    String[] dropParts = weapon2lvlDrops.split(";");
                                                    for (String drop : dropParts) {
                                                        String[] parts = drop.split(",");
                                                        int id = Integer.parseInt(parts[0]);
                                                        int count = Integer.parseInt(parts[1]);

                                                        leader.getInventory().addItem(id, count);
                                                        leader.sendMessage("Вам были выданы " +id + " В количестве " +count + " шт.");

                                                    }
                                                    if (SERVICES_CLANHELPER_ENABLED_PABONUS_LEADER){
                                                        addHeroAndPa.addPaCustom(leader,ID_PA_BONUS);
                                                    }
                                                    if (SERVICES_CLANHELPER_ENABLED_HEROBONUS_LEADER){
                                                        addHeroAndPa.addHeroCustom(leader,ID_HERO_DURATION_LEADER);
                                                    }
                                                    log.info("Player with hwid " + hwid + " is not registered in the database");
                                                    ClanBonusCheck.insertPlayer(leader.getObjectId(), hwid);
                                                    log.info("Player with hwid " + hwid + " has been added to the database");
                                                }
                                            }

                                        }

                                    }
                                    var14 = var4.getRewardItems().iterator();
 
Java:
                                    while(true) {

                                        while(true) {

                                            while(var14.hasNext()) {

                                                Pair var16 = (Pair)var14.next();

                                                Iterator var11;

                                                Player var12;

                                                if ((Integer)var16.getKey() < 0) {

                                                    switch ((Integer)var16.getKey()) {

                                                        case -200:

                                                            int var17 = ((Long)var16.getValue()).intValue();

                                                            clan.incReputation(var17, false, "ClanHelperService");

                                                            playerSelf.sendPacket((new SystemMessage(1777)).addNumber(var17));

                                                            var13 = true;

                                                            break;

                                                        case -100:

                                                            var11 = var6.values().iterator();



                                                            while(var11.hasNext()) {

                                                                var12 = (Player)var11.next();

                                                                var12.addPcBangPoints(((Long)var16.getValue()).intValue(), false);

                                                            }

                                                    }

                                                } else {

                                                    var11 = var6.values().iterator();



                                                    while(var11.hasNext()) {

                                                        var12 = (Player)var11.next();

                                                        addItem(var12, (Integer)var16.getKey(), (Long)var16.getValue());

                                                    }

                                                }

                                            }



                                            if (var13) {

                                                clan.updateClanInDB();

                                                clan.broadcastClanStatus(true, true, true);

                                            }



                                            playerSelf.sendMessage(new CustomMessage("services.ClanHelper.Success", playerSelf, new Object[0]));

                                            Log.service("ClanHelperService", playerSelf, "received a clan reward  for Clan " + playerSelf.getClan().getName());

                                            return;

                                        }

                                    }

                                }

                            }

                        }

                    } else {

                        playerSelf.sendPacket((new NpcHtmlMessage(5)).setFile("scripts/services/service_disabled.htm"));

                    }

                }

            }

        }

    }



    public void onReload() {

        this.onShutdown();

        this.onLoad();

    }



    public void onShutdown() {

    }



    private static class ClanHelperEntry {

        private final int bXT;

        private final int bXU;

        private final List<Pair<Integer, Long>> bXV;



        private ClanHelperEntry(int var1, int var2, List<Pair<Integer, Long>> var3) {

            this.bXT = var1;

            this.bXU = var2;

            this.bXV = var3;

        }



        public ClanHelperEntry(int var1, int var2) {

            this.bXT = var1;

            this.bXU = var2;

            this.bXV = Collections.emptyList();

        }



        public int getRequiredClanSize() {

            return this.bXT;

        }



        public int getRewardLevel() {

            return this.bXU;

        }



        public List<Pair<Integer, Long>> getRewardItems() {

            return this.bXV;

        }



        public static ClanHelperEntry parse(String var0) {

            int var1 = var0.indexOf(58);

            if (var1 <= 0) {

                throw new RuntimeException("Can't parse requirements of \"" + var0 + "\"");

            } else {

                String var2 = var0.substring(0, var1).trim();

                String var3 = var0.substring(var1 + 1).trim();

                int var4 = var2.indexOf(44);

                int var5 = Integer.parseInt(var4 > 0 ? var2.substring(0, var4).trim() : var2);

                int var6 = var3.indexOf(44, 0);

                int var7;

                if (var6 <= 0) {

                    var7 = Integer.parseInt(var3);

                    return new ClanHelperEntry(var5, var7);

                } else {

                    var7 = Integer.parseInt(var3.substring(0, var6));

                    String var8 = var3.substring(var6 + 1).trim();

                    if (var8.isEmpty()) {

                        return new ClanHelperEntry(var5, var7);

                    } else {

                        ArrayList var9 = new ArrayList();

                        if (!var8.startsWith(",")) {

                            if (!var8.startsWith("[") || !var8.endsWith("]")) {

                                throw new RuntimeException("Can't parse reward of \"" + var0 + "\"");

                            }



                            var8 = var8.substring(1, var8.length() - 1).trim();

                            String[] var10 = var8.split(",");

                            int var11 = var10.length;



                            for(int var12 = 0; var12 < var11; ++var12) {

                                String var13 = var10[var12];

                                var13 = var13.trim();

                                if (!var13.isEmpty()) {

                                    int var14 = var13.indexOf(45, 1);

                                    var9.add(Pair.of(Integer.parseInt(var13.substring(0, var14).trim()), Long.parseLong(var13.substring(var14 + 1).trim())));

                                }

                            }

                        }



                        return new ClanHelperEntry(var5, var7, var9);

                    }

                }

            }

        }

    }

}
 
Создать таблицу в бд
Code:
CREATE TABLE IF NOT EXISTS player_hwid (
  object_id INT UNSIGNED NOT NULL,
  hwid VARCHAR(64) NOT NULL,
  PRIMARY KEY (object_id)
);


Java:
package util;


import l2.commons.dbutils.DbUtils;
import l2.gameserver.database.DatabaseFactory;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import static l2.commons.threading.RunnableImpl._log;

public class ClanBonusCheck {
    private static final String INSERT_PLAYER_SQL = "INSERT INTO player_hwid (object_id, hwid) VALUES (?, ?)";
    private static final String SELECT_PLAYER_SQL = "SELECT COUNT(*) AS count FROM player_hwid WHERE hwid = ?";

    public static void insertPlayer(int objectId, String hwid) {
        Connection conn = null;
        PreparedStatement stmt = null;
        try {
            conn = DatabaseFactory.getInstance().getConnection();
            stmt = conn.prepareStatement(INSERT_PLAYER_SQL);
            stmt.setInt(1, objectId);
            stmt.setString(2, hwid);
            stmt.executeUpdate();
        } catch (Exception e) {
            _log.warn("Error while inserting player with objectId=" + objectId + " and hwid=" + hwid + " into database");
            _log.error("", e);
        } finally {
            DbUtils.closeQuietly(conn, stmt);
        }
    }

    public static boolean isHwidRegistered(String hwid) {
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rset = null;
        boolean isRegistered = false;
        try {
            conn = DatabaseFactory.getInstance().getConnection();
            stmt = conn.prepareStatement(SELECT_PLAYER_SQL);
            stmt.setString(1, hwid);
            rset = stmt.executeQuery();
            if (rset.next()) {
                int count = rset.getInt("count");
                isRegistered = (count > 0);
            }
        } catch (Exception e) {
            _log.warn("Error while checking if hwid=" + hwid + " is registered in database");
            _log.error("", e);
        } finally {
            DbUtils.closeQuietly(conn, stmt, rset);
        }
        return isRegistered;
    }
}
 
Last edited:
Ряд вопросов
1) если создавать ai2 то, что делать с настройками до этого (в сервере, если не ошибаюсь)? Удалить или оставить или все таки туда добавить
2) параметры награды за каждый мультиайди эти награды выдаются типо каждому? Или как? Так как дальше идет строка итемы которые даем лидеру! Или там только репутацию можно выдавать?
3) выриации бонусов менюайди это теперь вставляется выше? Или это отдельно.
4) в бонусах написано - давать ли награду, если всем - отключено. Т.е. если вкл то КЛу, если откл - то всем? А я никому не хочу давать хиро, что мне писать?!
5) там есть айди ПА бонуса, а ниже время. Т.е. оно выберет нужный, а время возьмет ниже из настроек? Или он время возьмет из выбранного? Тогда зачем ниже время?!)
 
Ряд вопросов
1) если создавать ai2 то, что делать с настройками до этого (в сервере, если не ошибаюсь)? Удалить или оставить или все таки туда добавить
2) параметры награды за каждый мультиайди эти награды выдаются типо каждому? Или как? Так как дальше идет строка итемы которые даем лидеру! Или там только репутацию можно выдавать?
3) выриации бонусов менюайди это теперь вставляется выше? Или это отдельно.
4) в бонусах написано - давать ли награду, если всем - отключено. Т.е. если вкл то КЛу, если откл - то всем? А я никому не хочу давать хиро, что мне писать?!
5) там есть айди ПА бонуса, а ниже время. Т.е. оно выберет нужный, а время возьмет ниже из настроек? Или он время возьмет из выбранного? Тогда зачем ниже время?!)
1- не нужно стандартный изменять. Этот бонус работает как о дельный. Байпас другой.
2- на сколько я помню, выдается только лидеру в стандартной настройке.
3- вариации настраиваются как и в стандартном конфиге. Вверху.
4- ставьте везде фолс
5-да возьмет из настроек ниже.
 
подскажите плиз куда это все пихать
Скомпилить и залить в папку со сборкой . Если кратко. А если подробно , то начни с Гауда дизера. На форуме есть где то.
 
Back
Top