AI Хиро РБ

еще и Ит клиент) привет криты и сопли
это бутоны, ягоды в том что зоны А не работают в инстанце нормально, это уже не инстанц, а рефлекшен.
Вот так и появляются асиксы, и остальные l2j yo best choice ever code core
Да. Незнаю вообще не одного языка программирования. Ну понимаете есть, как работают операторы иф, елсе, цикл фор. И переменные. Вот потихоньку читаю и смотрю примеры как сделаны другие скрипты в сборке.
То что ты стремишься кодить - невероятно похвально, но при этом постарайся нормально называть классы, понимать почему и для чего ты используешь листы или коллекции, не забывай про Camel case, НИКОГДА не делать в коде прямых запросов в базу и тем более как в примере выше, так же хоть почитай что такое ООП и как оно работает! что это за бред с if(killer instanceof Player) ты шутишь что ли вообще ?
Ты подвергаешь не только себя опасности но и людей которые захотят взять этот код в работу на проекте. Пиши для себя, ты берешь тогда ответственность только за себя.
Так застригаю тебя, проект с таким кодом упадет на онлайне до 100.
Сделал при входе в зону. Одевает шмот. После релога удаляется. Ну или если после кванта одеть свою, тоже исчезает .
Не знаю, буду ли я выкладывать это в шару. Много времени потратил…
Молодчина, еще не много и сможешь написать твт эвент с выдачей шмоток))
Нет не сможет, в ближайшие пару месяцев даже с большим желанием. Визуально оно то может и будет работать, а зайдет 2-3 человека или ява упадет или дюп или база уйдет под ноль с итемами.

Абсолютно верно - не выкладывай, это прямой путь к эксплоитам и дюпам

Код с ПА!!! Внимание! НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ ОТ СЛОВА АБСОЛЮТНО СОВСЕМ!
 
Last edited:
это бутоны, ягоды в том что зоны А не работают в инстанце нормально, это уже не инстанц, а рефлекшен.
Вот так и появляются асиксы, и остальные l2j yo best choice ever code core

То что ты стремишься кодить - невероятно похвально, но при этом постарайся нормально называть классы, понимать почему и для чего ты используешь листы или коллекции, не забывай про Camel case, НИКОГДА не делать в коде прямых запросов в базу и тем более как в примере выше, так же хоть почитай что такое ООП и как оно работает! что это за бред с if(killer instanceof Player) ты шутишь что ли вообще ?
Ты подвергаешь не только себя опасности но и людей которые захотят взять этот код в работу на проекте. Пиши для себя, ты берешь тогда ответственность только за себя.
Так застригаю тебя, проект с таким кодом упадет на онлайне до 100.


Нет не сможет, в ближайшие пару месяцев даже с большим желанием. Визуально оно то может и будет работать, а зайдет 2-3 человека или ява упадет или дюп или база уйдет под ноль с итемами.

Абсолютно верно - не выкладывай, это прямой путь к эксплоитам и дюпам

Код с ПА!!! Внимание! НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ ОТ СЛОВА АБСОЛЮТНО СОВСЕМ!
Спасибо за конструктивную критику!
С па сделаю нормальный код чуть позже. Это все наброски на коленке . Понятно , что человек без знания языка не может написать правильный код. Но буду стремится. Самое главное, меня заводит это.

Вот сейчас полностью переделал еквип шмота . Шмот с таким же ид, удаляется при входе в зону если заточен на 0. Что бы человек зашедший уже не первый раз не задолбался потом удалять все шмотки. Мне подходит такой вариант так как в магазине продаётся +15 все. Поэтому тот который удаляется явно был выдан скриптом.
 
И плюс лочит шмот который одел. То есть нельзя никак переодеть пока не выйдешь с зоны.

Но вот вопрос теперь возник. На твт зонах не работает почему то) из за того что инстанс зона?
 
Я выше ответил, в предыдущем посте
Тогда вопрос, могу ли я использовать допустим вот такую проверку( взято из пвпевентов)
Java:
        public void onZoneEnter(Zone var1, Creature var2) {
            try {
                if (PvPEvent.getInstance().Z() != PvPEvent.PvPEventState.COMPETITION || !var2.isPlayer()) {
                    return;
                }

                PvPEvent.getInstance().getRule().getParticipantController().OnEnter(var2.getPlayer(), var1);
            } catch (Exception var4) {
                PvPEvent._log.warn("PVPEvent.onZoneEnter :", var4);
            }

        }

Что бы использовать в своем "скрипте" ? не могу пока найти от куда берется название зоны для var1


Java:
package zones;

import java.util.Collection;
import java.util.Iterator;
import l2.gameserver.instancemanager.ReflectionManager;
import l2.gameserver.listener.zone.OnZoneEnterLeaveListener;
import l2.gameserver.model.Creature;
import l2.gameserver.model.Player;
import l2.gameserver.model.Zone;
import l2.gameserver.model.items.ItemInstance;
import l2.gameserver.model.items.LockType;
import l2.gameserver.scripts.ScriptFile;
import l2.gameserver.utils.ItemFunctions;
import org.apache.commons.lang3.ArrayUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class itemFighterBow implements OnZoneEnterLeaveListener, ScriptFile {
    private static final Logger LOGGER = LoggerFactory.getLogger(zones.itemFighterBow.class);
    private static final String ZONE_PARAM = "zoneAddItemsFighterBow";

    public itemFighterBow() {
    }

    public void onZoneEnter(Zone zone, Creature creature) {
        if (creature != null && creature.isPlayer()) {
            int[] itemIds = zone.getParams().getIntegerArray(ZONE_PARAM);
            Player player = creature.getPlayer();
            int[] classIds = new int[]{102, 92, 9, 24, 102, 37, 109}; // список классов, которые соответствуют условию

            if (itemIds != null && itemIds.length != 0 && ArrayUtils.contains(classIds, player.getActiveClassId())) {
                // снимаем все предметы с игрока
                for (ItemInstance equippedItem : player.getInventory().getItems()) {
                    player.getInventory().unEquipItem(equippedItem);
                }
                player.getInventory().unlock();
                for (ItemInstance item : player.getInventory().getItems()) {
                    if (ArrayUtils.contains(itemIds, item.getItemId()) && item.getEnchantLevel() == 6) {
                        player.getInventory().unEquipItem(item);
                        player.getInventory().destroyItem(item);
                    }
                }

                // добавляем и одеваем новые предметы
                for (int itemId : itemIds) {
                    try {
                        ItemInstance newItem = ItemFunctions.createItem(itemId);
                        newItem.setEnchantLevel(6);
                        player.getInventory().addItem(newItem);
                        player.getInventory().equipItem(newItem);
                    } catch (IllegalArgumentException e) {
                        LOGGER.warn("Failed to create and add item with ID {}: {}", itemId, e.getMessage());
                    }
                }

                player.getInventory().lockItems(LockType.INCLUDE, itemIds);
            }
        }
    }


    public void onZoneLeave(Zone zone, Creature creature) {
        Player player = creature.getPlayer();
        int[] itemIds = zone.getParams().getIntegerArray(ZONE_PARAM);
        if (itemIds != null && itemIds.length != 0 && player != null) {
            player.getInventory().unlock();
        }
    }

    public void onLoad() {
        int zonesCount = 0;
        Collection<Zone> zones = ReflectionManager.DEFAULT.getZones();
        Iterator<Zone> iter = zones.iterator();

        while (iter.hasNext()) {
            Zone zone = iter.next();
            int[] itemIds = zone.getParams().getIntegerArray(ZONE_PARAM, ArrayUtils.EMPTY_INT_ARRAY);
            if (itemIds != null && itemIds.length != 0) {
                zone.addListener(this);
                zonesCount++;
            }
        }

        if (zonesCount > 0) {
            LOGGER.info("zoneAddItemsFighterBow: Added {} item(s) for prohibited zone(s).", zonesCount);
        }
    }

    public void onReload() {
        this.onShutdown();
        this.onLoad();
    }

    public void onShutdown() {
        Iterator<Zone> iter = ReflectionManager.DEFAULT.getZones().iterator();

        while (iter.hasNext()) {
            Zone zone = iter.next();
            zone.removeListener(this);
        }
    }
}
 
Уважаемый Дизер возможно ли вам, написать нам как раз пару скриптов. На дроп по пати, выдачу ПА при убийстве РБ (По пати)
На грамотно написанном коде ?
 
ПА по пати.
p.s никому не навязываю.
Как сказал великий мыслитель localhost - твой гавнокод нах никому не нужен.

Java:
package ai;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import l2.gameserver.Announcements;
import l2.gameserver.Config;
import l2.gameserver.ai.Fighter;
import l2.gameserver.dao.AccountBonusDAO;
import l2.gameserver.model.Creature;
import l2.gameserver.model.Player;
import l2.gameserver.model.instances.NpcInstance;



public class setPaParty extends Fighter {
    private static final Map<Integer, Integer> bV = new HashMap<>();

    public setPaParty(NpcInstance paramNpcInstance) {
        super(paramNpcInstance);
    }

    @Override
    protected void onEvtDead(Creature killer) {
        if (killer.isPlayer()) {
            Player player = (Player) killer;
            List<Player> list = player.getParty().getPartyMembers();
            Config.RateBonusInfo bonusInfo = null;
            for (Config.RateBonusInfo info : Config.SERVICES_RATE_BONUS_INFO) {
                if (info.id == 1) {
                    bonusInfo = info;
                    break;
                }
            }
            List<String> playerNames = new ArrayList<>();

            for (Player player2 : list) {
                if (player2.hasBonus()) {
                    continue; // переходим к следующей итерации, если у игрока есть бонус
                }
                playerNames.add(player2.getName());
            }
            String joinedPlayerNames = String.join(", ", playerNames);
            if (bonusInfo != null) {
                for (Player player1 : list) {
                    if (!player1.hasBonus()) {
                        AccountBonusDAO.getInstance().store(player1.getAccountName(), bonusInfo.makeBonus());
                        player1.stopBonusTask();
                        player1.startBonusTask();
                        player.sendMessage("Поздравляю с получением премиума! Перезайдите(.relog)");
                    } else if (player1.hasBonus()){
                        player1.sendMessage("У вас уже есть премиум, поэтому хрен Вам");



                    }
                }
            }

            Announcements.getInstance().announceToAll("Поздравляем с получением Премиума за убийство Премиум РБ:");
            Announcements.getInstance().announceToAll(joinedPlayerNames);
        }
        super.onEvtDead(killer);
    }

}
 
ПА по пати.
p.s никому не навязываю.
Как сказал великий мыслитель localhost - твой гавнокод нах никому не нужен.

Java:
package ai;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import l2.gameserver.Announcements;
import l2.gameserver.Config;
import l2.gameserver.ai.Fighter;
import l2.gameserver.dao.AccountBonusDAO;
import l2.gameserver.model.Creature;
import l2.gameserver.model.Player;
import l2.gameserver.model.instances.NpcInstance;



public class setPaParty extends Fighter {
    private static final Map<Integer, Integer> bV = new HashMap<>();

    public setPaParty(NpcInstance paramNpcInstance) {
        super(paramNpcInstance);
    }

    @Override
    protected void onEvtDead(Creature killer) {
        if (killer.isPlayer()) {
            Player player = (Player) killer;
            List<Player> list = player.getParty().getPartyMembers();
            Config.RateBonusInfo bonusInfo = null;
            for (Config.RateBonusInfo info : Config.SERVICES_RATE_BONUS_INFO) {
                if (info.id == 1) {
                    bonusInfo = info;
                    break;
                }
            }
            List<String> playerNames = new ArrayList<>();

            for (Player player2 : list) {
                if (player2.hasBonus()) {
                    continue; // переходим к следующей итерации, если у игрока есть бонус
                }
                playerNames.add(player2.getName());
            }
            String joinedPlayerNames = String.join(", ", playerNames);
            if (bonusInfo != null) {
                for (Player player1 : list) {
                    if (!player1.hasBonus()) {
                        AccountBonusDAO.getInstance().store(player1.getAccountName(), bonusInfo.makeBonus());
                        player1.stopBonusTask();
                        player1.startBonusTask();
                        player.sendMessage("Поздравляю с получением премиума! Перезайдите(.relog)");
                    } else if (player1.hasBonus()){
                        player1.sendMessage("У вас уже есть премиум, поэтому хрен Вам");



                    }
                }
            }

            Announcements.getInstance().announceToAll("Поздравляем с получением Премиума за убийство Премиум РБ:");
            Announcements.getInstance().announceToAll(joinedPlayerNames);
        }
        super.onEvtDead(killer);
    }

}
Всё что даром всё пойдет
 
Всё что даром всё пойдет
Тоже верно.
Единственное может надо еще проверок добавить. к примеру на дистанцию от рб до пати мемберов. надо глянуть будет как
 
Добавить проверку на присутствие игрока рядом -
Code:
player1.isInRange(npcInstance,1000L)
 
Back
Top