CalypsoToolz 451 Опубликовано 7 июня, 2014 (изменено) Всем привет. Нуждаюсь в вашей помощи. Я хочу сделать так: если чар находится, например в гиране, и у него в инвентаре есть определенный итем, то он получает баф. Сначала решил сделать через зоны, например как в стакато, но там нет проверки на итем. Решил сделать через скрипт, но что то не выходит) Вот собственно код(если его вообще можно так назвать ) package events.autobuff; import l2n.extensions.scripts.Functions; import l2n.extensions.scripts.ScriptFile; import l2n.game.model.actor.L2Playable; import l2n.game.model.actor.L2Player; import l2n.game.model.instances.L2ItemInstance; import l2n.game.instancemanager.ZoneManager; import l2n.game.model.EffectList; import l2n.game.model.L2Effect; import l2n.game.model.L2Skill; import l2n.game.model.L2Zone; import l2n.game.model.L2Zone.ZoneType; import l2n.game.tables.SkillTable; import l2n.game.L2GameThreadPools; import l2n.util.Rnd; public class autobuff extends Functions implements ScriptFile { private static boolean active = true; final L2Skill BuffSkill = SkillTable.getInstance().getInfo(RND_SKILL, 1); private static final int[] LIST_SKILL = { 406, 420, 1418, 446 }; private static final int RND_SKILL = LIST_SKILL[Rnd.get(LIST_SKILL.length)]; private static final int item1lvl = 10639; private static final int item2lvl = 4037; private static final int item3lvl = 2133; private static final int time1lvl = 5; private static final int time2lvl = 10; private static final int time3lvl = 15; private static L2Zone _zone; public static L2Zone getZone() { return _zone; } private static final boolean checked1(final L2Player activeChar) { if(active) { _zone = ZoneManager.getInstance().getZoneById(ZoneType.Town, 1007, true); final L2ItemInstance item1 = activeChar.getInventory().getItemByItemId(item1lvl); if(item1 != null || getZone().checkIfInZone(activeChar)) { return true; } return false; } } private static final boolean checked2(final L2Player activeChar) { if(active) { _zone = ZoneManager.getInstance().getZoneById(ZoneType.Town, 1007, true); final L2ItemInstance item2 = activeChar.getInventory().getItemByItemId(item2lvl); if(item2 != null || getZone().checkIfInZone(activeChar)) { return true; } return false; } } private static final boolean checked3(final L2Player activeChar) { if(active) { _zone = ZoneManager.getInstance().getZoneById(ZoneType.Town, 1007, true); final L2ItemInstance item3 = activeChar.getInventory().getItemByItemId(item3lvl); if(item3 != null || getZone().checkIfInZone(activeChar)) { return true; } return false; } } public void GetBuff(final L2Player activeChar, final int skillId, final int skillLvl) { if(active) { if(!checked1(activeChar)) return; if(!checked2(activeChar)) return; if(!checked3(activeChar)) return; final L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLvl); if(skill == null) return; if(checked1(activeChar)) { L2GameThreadPools.getInstance().scheduleGeneral(new Buff1(skill, activeChar), 10); } if(checked2(activeChar)) { L2GameThreadPools.getInstance().scheduleGeneral(new Buff2(skill, activeChar), 10); } if(checked3(activeChar)) { L2GameThreadPools.getInstance().scheduleGeneral(new Buff3(skill, activeChar), 10); } } } private class Buff1 implements Runnable { private final L2Skill _skill; private final L2Playable _target; public Buff1(L2Skill skill, final L2Playable target) { _skill = skill; _target = target; skill = BuffSkill; } @Override public void run() { _skill.getEffectsSelf(_target, time1lvl); } } private class Buff2 implements Runnable { private final L2Skill _skill; private final L2Playable _target; public Buff2(L2Skill skill, final L2Playable target) { _skill = skill; _target = target; skill = BuffSkill; } @Override public void run() { _skill.getEffectsSelf(_target, time2lvl); } } private class Buff3 implements Runnable { private final L2Skill _skill; private final L2Playable _target; public Buff3(L2Skill skill, final L2Playable target) { _skill = skill; _target = target; skill = BuffSkill; } @Override public void run() { _skill.getEffectsSelf(_target, time3lvl); } } @Override public void onLoad() { if(active) { _log.info("Loaded Mod: Autobuff in Town [state: activated]"); } else _log.info("Loaded Mod: Autobuff in Town [state: deactivated]"); } @Override public void onReload() {} @Override public void onShutdown() {} } ЗЫ. Сборка Nextgen Изменено 7 июня, 2014 пользователем BymerOK Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 7 июня, 2014 Дык элементарно же. Стакато отличный вариант, просто допиши проверку на итем и всё. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Demoncool 1110 Опубликовано 7 июня, 2014 Автоматическое сообщение Эта тема была перемещена из "Датапак" в "Ядро". Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CalypsoToolz 451 Опубликовано 7 июня, 2014 Дык элементарно же. Стакато отличный вариант, просто допиши проверку на итем и всё. Дописать я так понимаю в ZoneManager? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 7 июня, 2014 Ну вот для себя щас набросал быстренько: package zones; import sw.awaken.gameserver.listener.zone.OnZoneEnterLeaveListener; import sw.awaken.gameserver.model.Player; import sw.awaken.gameserver.model.Creature; import sw.awaken.gameserver.model.Zone; import sw.awaken.gameserver.scripts.ScriptFile; import sw.awaken.gameserver.utils.ReflectionUtils; import sw.awaken.gameserver.tables.SkillTable; public class BuffZone implements ScriptFile { private static ZoneListener _zoneListener; private void init() { _zoneListener = new ZoneListener(); Zone zone = ReflectionUtils.getZone(ИМЯ ЗОНЫ); zone.addListener(_zoneListener); } @Override public void onLoad() { init(); } @Override public void onReload() { } @Override public void onShutdown() { } public class ZoneListener implements OnZoneEnterLeaveListener { @Override public void onZoneEnter(Zone zone, Creature cha) { if (zone == null) { return; } if (cha == null) { return; } if (cha instanceof Player) { Player player = cha.getPlayer(); if(player.getItemCount(АЙДИ ИТЕМА) { player.altOnMagicUseTimer(player, SkillTable.getInstance().getInfo(ID баффа, лвл баффа)); } } } @Override public void onZoneLeave(Zone zone, Creature cha) { } } } 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AlexD 36 Опубликовано 7 июня, 2014 Если хотите через скрипт то: Сделайте сначала просто проверку на зону, убедитесь что скрипт работает послав к примеру сообщение персонажу если он в зоне. Дополните скрипт проверкой на Item, опять таки отправляя сообщения типа "итем найден" и "итем не найден". Далее по 1 добавляйте баф, снова таки отправляя сообщение "держи баф дружище" что бы знать что код отработал. После удовлетворяющего результате просто уберите отправку сообщений персонажу и скрипт готов. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Расторгуев 111 Опубликовано 7 июня, 2014 зачем определенную зону ? если можно сделать что бы проверка шла , сразу только в городах и требование итема так же + при этом не забыв что перс должен быть не в режиме боя , ну и трансформации и флаг . или же это все вывести в конфиг авто бафа , там делов 2 строчки кода Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Расторгуев 111 Опубликовано 7 июня, 2014 (изменено) Да кстати ТС у вас все готовое почти есть в Alt+B # Разрешить функцию автобафа BufferAllowAutoBuff = false # Автобаф происходит в следующих ситуациях # После смерти игрока BufferAllowAutoBuffAfterDeath = false # После окончании эффекта/бафа BufferAllowAutoBuffEffectExit = false # После выхода из состояния боя BufferAllowAutoBuffAttackStop = false # Какой Требовать итем для бафа BufferAllowAutoBuffItem = 57 # Количество итемов для автобафа BufferAllowAutoBuffItem = 1000 # Настройка зон для Автобафа , Указываем тип зоны или зон через запятую # пример Добавления зон для автобафа ZoneBufferAllowAutoBuffItem = Town,battle_zone ZoneBufferAllowAutoBuffItem = Town Изменено 7 июня, 2014 пользователем Расторгуев 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
CalypsoToolz 451 Опубликовано 7 июня, 2014 зачем определенную зону ? если можно сделать что бы проверка шла , сразу только в городах и требование итема так же + при этом не забыв что перс должен быть не в режиме боя , ну и трансформации и флаг . или же это все вывести в конфиг авто бафа , там делов 2 строчки кода Мне нужно именно в определенной зоне. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты