Перейти к содержанию
Авторизация  
CalypsoToolz

Баф В Зоне При Наличии Предмета

Рекомендуемые сообщения

Всем привет. Нуждаюсь в вашей помощи. Я хочу сделать так: если чар находится, например в гиране, и у него в инвентаре есть определенный итем, то он получает баф. Сначала решил сделать через зоны, например как в стакато, но там нет проверки на итем. Решил сделать через скрипт, но что то не выходит)

 

Вот собственно код(если его вообще можно так назвать :D )

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

Изменено пользователем BymerOK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык элементарно же. Стакато отличный вариант, просто допиши проверку на итем и всё.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык элементарно же. Стакато отличный вариант, просто допиши проверку на итем и всё.

 

Дописать я так понимаю в ZoneManager?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вот для себя щас набросал быстренько:

 

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) {
    }
   }
}

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если хотите через скрипт то:

Сделайте сначала просто проверку на зону, убедитесь что скрипт работает послав к примеру сообщение персонажу если он в зоне.

Дополните скрипт проверкой на Item, опять таки отправляя сообщения типа "итем найден" и "итем не найден".

Далее по 1 добавляйте баф, снова таки отправляя сообщение "держи баф дружище" что бы знать что код отработал.

После удовлетворяющего результате просто уберите отправку сообщений персонажу и скрипт готов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

зачем определенную зону ? если можно сделать что бы проверка шла , сразу только в городах и требование итема так же + при этом не забыв что перс должен быть не в режиме боя , ну и трансформации и флаг . или же это все вывести в конфиг авто бафа ,

 

там делов 2 строчки кода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да кстати ТС у вас все готовое почти есть в Alt+B

 

# Разрешить функцию автобафа

BufferAllowAutoBuff = false

# Автобаф происходит в следующих ситуациях

# После смерти игрока

BufferAllowAutoBuffAfterDeath = false

# После окончании эффекта/бафа

BufferAllowAutoBuffEffectExit = false

# После выхода из состояния боя

BufferAllowAutoBuffAttackStop = false

# Какой Требовать итем для бафа

BufferAllowAutoBuffItem = 57

# Количество итемов для автобафа

BufferAllowAutoBuffItem = 1000

# Настройка зон для Автобафа , Указываем тип зоны или зон через запятую

# пример Добавления зон для автобафа ZoneBufferAllowAutoBuffItem = Town,battle_zone

ZoneBufferAllowAutoBuffItem = Town

Изменено пользователем Расторгуев
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

зачем определенную зону ? если можно сделать что бы проверка шла , сразу только в городах и требование итема так же + при этом не забыв что перс должен быть не в режиме боя , ну и трансформации и флаг . или же это все вывести в конфиг авто бафа ,

 

там делов 2 строчки кода

 

Мне нужно именно в определенной зоне.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...