Сообщений: 2,267
Тем: 6
Зарегистрирован: Aug 2009
Репутация:
8,698
06-28-2013, 10:39 AM
(Сообщение последний раз редактировалось: 06-28-2013, 10:41 AM darkevil.)
Ashe Написал:darkevil, я так понимаю из-за некоторых изменений в пакетке?
Если бы только в пакете дело было, функция AddNetworkQueue претерпела сильные изменения.
Добавлено через 2 минуты
Krasavella Написал:LameGuard тоже получается не работает с Lindvior'ом?
Нет. Во всяком случае нам ЛГ так и не сделали, хотя просим Гитао уже больше полу года.
Сообщений: 794
Тем: 31
Зарегистрирован: Dec 2012
Репутация:
2,838
darkevil Написал:нам ЛГ так и не сделали, хотя просим Гитао уже больше полу года.
А как от hLaPEx и школьников защищаетесь? =)
Сообщений: 102
Тем: 8
Зарегистрирован: Jun 2013
Репутация:
156
Krasavella Написал:P.S. Как там писать в чат? Нужно 20 сообщений, для использования чата
Сообщений: 2,267
Тем: 6
Зарегистрирован: Aug 2009
Репутация:
8,698
Krasavella Написал:А как от hLaPEx и школьников защищаетесь? =)
Пишем грамотно ;-)
Сообщений: 794
Тем: 31
Зарегистрирован: Dec 2012
Репутация:
2,838
darkevil Написал:Пишем грамотно ;-)
Писать одно, а вот использовать баффера с подменой на Super Haste другое =)
Значит выход один - smeli OFF!!!))
meX Написал:Нужно 20 сообщений, для использования чата
Странно, после вопроса здесь, я сразу смогла там написать в чат, хотя сообщений всего 5 =)
Сообщений: 102
Тем: 8
Зарегистрирован: Jun 2013
Репутация:
156
Krasavella Написал:Странно, после вопроса здесь, я сразу смогла там написать в чат, хотя сообщений всего 5 =) Действительно)
Сообщений: 2,267
Тем: 6
Зарегистрирован: Aug 2009
Репутация:
8,698
Krasavella Написал:Писать одно, а вот использовать баффера с подменой на Super Haste другое =)
Если такое возможно значит так написан код что игрок может делать что хочет.
Сообщений: 794
Тем: 31
Зарегистрирован: Dec 2012
Репутация:
2,838
К примеру вот этот самый баффер:
[SRC="java"]
package services;
import l2ee.play.Config;
import l2ee.play.ThreadPoolManager;
import l2ee.play.scripts.Functions;
import l2ee.play.scripts.ScriptFile;
import l2ee.play.cache.Msg;
import l2ee.play.model.Creature;
import l2ee.play.model.Player;
import l2ee.play.model.Skill;
import l2ee.play.model.Summon;
import l2ee.play.model.instances.NpcInstance;
import l2ee.play.network.serverpackets.MagicSkillLaunched;
import l2ee.play.network.serverpackets.MagicSkillUse;
import l2ee.play.tables.SkillTable;
public class Buffer1 extends Functions implements ScriptFile
{
/** Количество бафов в группах */
private static int grpCount1, grpCount2, grpCount3, grpCount4, grpCount5;
// Количество бафов в 1 и второй группах должно быть одинаковое
private static int buffs[][] = { // id, lvl, group
// Группа для воинов 1
{ 23283, 1, 1 }, // Chant of Fury
{ 23241, 1, 1 }, // Chant of Evasion
{ 23280, 1, 1 }, // Chant of Revenge
{ 23277, 1, 1 }, // Chant of Eagle
{ 23284, 1, 1 }, // Chant of Vampire
{ 23282, 1, 1 }, // Chant of Spirit
{ 23278, 1, 1 }, // War Chant
{ 23281, 1, 1 }, // Chant of Fury
{ 7060, 1, 1 }, // Chant of Evasion
{ 23279, 1, 1 }, // Chant of Rage
{ 80029, 1, 1 }, // Chant of Revenge
{ 80030, 1, 1 }, // Chant of Predator
{ 4553, 4, 1 }, // Chant of Eagle
{ 4554, 4, 1 }, // Chant of Vampire
// Группа для магов 2
{ 23241, 1, 2 }, // Chant of Evasion
{ 23242, 1, 2 }, // Chant of Rage
{ 23280, 1, 2 }, // Chant of Revenge
{ 23277, 1, 2 }, // Chant of Eagle
{ 23282, 1, 2 }, // Chant of Spirit
{ 23278, 1, 2 }, // War Chant
{ 23245, 1, 2 }, // Earth Chant
{ 23281, 1, 2 }, // Chant of Fury
{ 7060, 1, 2 }, // Chant of Evasion
{ 23279, 1, 2 }, // Chant of Rage
{ 80029, 1, 2 }, // Chant of Revenge
{ 80030, 1, 2 }, // Chant of Predator
{ 4553, 4, 2 }, // Chant of Eagle
{ 4554, 4, 2 }, // Chant of Vampire
// Группа для камаелей 3
{ 23283, 1, 3 }, // Chant of Fury
{ 23241, 1, 3 }, // Chant of Evasion
{ 23280, 1, 3 }, // Chant of Revenge
{ 23277, 1, 3 }, // Chant of Eagle
{ 23244, 1, 3 }, // Chant of Vampire
{ 23282, 1, 3 }, // Chant of Spirit
{ 23278, 1, 3 }, // War Chant
{ 23281, 1, 3 }, // Chant of Fury
{ 7060, 1, 3 }, // Chant of Evasion
{ 23279, 1, 3 }, // Chant of Rage
{ 80029, 1, 3 }, // Chant of Revenge
{ 80030, 1, 3 }, // Chant of Predator
{ 4553, 4, 3 }, // Chant of Eagle
{ 4554, 4, 3 }, // Chant of Vampire
// Группа для лучников 4
{ 23243, 1, 4 }, // Chant of Fury
{ 23241, 1, 4 }, // Chant of Evasion
{ 23280, 1, 4 }, // Chant of Revenge
{ 23277, 1, 4 }, // Chant of Eagle
{ 23244, 1, 4 }, // Chant of Vampire
{ 23282, 1, 4 }, // Chant of Spirit
{ 23278, 1, 4 }, // War Chant
{ 23281, 1, 4 }, // Chant of Fury
{ 7060, 1, 4 }, // Chant of Evasion
{ 23279, 1, 4 }, // Chant of Rage
{ 80029, 1, 4 }, // Chant of Revenge
{ 80030, 1, 4 }, // Chant of Predator
{ 4553, 4, 4 }, // Chant of Eagle
{ 4554, 4, 4 }, // Chant of Vampire
// Группа для камаелей воинов 5
{ 23283, 1, 5 }, // Chant of Fury
{ 23241, 1, 5 }, // Chant of Evasion
{ 23280, 1, 5 }, // Chant of Revenge
{ 23277, 1, 5 }, // Chant of Eagle
{ 23244, 1, 5 }, // Chant of Vampire
{ 23282, 1, 5 }, // Chant of Spirit
{ 23278, 1, 5 }, // War Chant
{ 23281, 1, 5 }, // Chant of Fury
{ 7060, 1, 5 }, // Chant of Evasion
{ 23279, 1, 5 }, // Chant of Rage
{ 80029, 1, 5 }, // Chant of Revenge
{ 80030, 1, 5 }, // Chant of Predator
{ 4553, 4, 5 }, // Chant of Eagle
{ 4554, 4, 5 }, // Chant of Vampire
// Группа для воинов 1
{ 23246, 1, 1 }, // Chant of Rage
{ 80031, 1, 1 }, // Chant of Revenge
{ 80024, 1, 1 }, // Chant of Predator
{ 80025, 1, 1 }, // Chant of Eagle
{ 80026, 1, 1 }, // Chant of Vampire
{ 80033, 1, 1 }, // Chant of Spirit
{ 80027, 1, 1 }, // Chant of Victory
{ 80028, 1, 1 }, // War Chant
// Группа для магов 2
{ 23246, 1, 2 }, // Chant of Rage
{ 80031, 1, 2 }, // Chant of Revenge
{ 80024, 1, 2 }, // Chant of Predator
{ 80025, 1, 2 }, // Chant of Eagle
{ 80026, 1, 2 }, // Chant of Vampire
{ 80033, 1, 2 }, // Chant of Spirit
{ 80027, 1, 2 }, // Chant of Victory
{ 80028, 1, 2 }, // War Chant
// Группа для камаелей 3
{ 23246, 1, 3 }, // Chant of Rage
{ 80031, 1, 3 }, // Chant of Revenge
{ 80024, 1, 3 }, // Chant of Predator
{ 80025, 1, 3 }, // Chant of Eagle
{ 80026, 1, 3 }, // Chant of Vampire
{ 80033, 1, 3 }, // Chant of Spirit
{ 80027, 1, 3 }, // Chant of Victory
{ 80028, 1, 3 }, // War Chant
// Группа для лучников 4
{ 23246, 1, 4 }, // Chant of Rage
{ 80031, 1, 4 }, // Chant of Revenge
{ 80024, 1, 4 }, // Chant of Predator
{ 80025, 1, 4 }, // Chant of Eagle
{ 80026, 1, 4 }, // Chant of Vampire
{ 80033, 1, 4 }, // Chant of Spirit
{ 80027, 1, 4 }, // Chant of Victory
{ 80028, 1, 4 }, // War Chant
// Группа для камаелей воинов 5
{ 23246, 1, 5 }, // Chant of Rage
{ 80031, 1, 5 }, // Chant of Revenge
{ 80024, 1, 5 }, // Chant of Predator
{ 80025, 1, 5 }, // Chant of Eagle
{ 80026, 1, 5 }, // Chant of Vampire
{ 80033, 1, 5 }, // Chant of Spirit
{ 80027, 1, 5 }, // Chant of Victory
{ 80028, 1, 5 }, // War Chant
// Группа для воинов 1
{ 7064, 1, 1 }, // Mental Shield
{ 7056, 1, 1 }, // Wind Walk
{ 23247, 1, 1 }, // Bless the Body
{ 7057, 1, 1 }, // Bless the Soul
{ 7058, 1, 1 }, // Shield
{ 80020, 1, 1 }, // Clarity
{ 80021, 1, 1 }, // Resist Shock
{ 80022, 1, 1 }, // Greater Might
{ 80023, 1, 1 }, // Might
{ 23238, 1, 1 }, // Chant of Spirit
{ 7053, 1, 1 }, // Shield
{ 7052, 1, 1 }, // Magic Barrier
{ 7045, 1, 1 }, // Wind Walk
{ 7046, 1, 1 }, // Bless the Body
// Группа для магов 2
{ 7059, 1, 2 }, // Berserker Spirit
{ 23240, 1, 2 }, // Concentration
{ 7056, 1, 2 }, // Wind Walk
{ 23247, 1, 2 }, // Bless the Body
{ 7057, 1, 2 }, // Bless the Soul
{ 7058, 1, 2 }, // Shield
{ 80020, 1, 2 }, // Clarity
{ 80021, 1, 2 }, // Resist Shock
{ 80022, 1, 2 }, // Greater Might
{ 80023, 1, 2 }, // Might
{ 23238, 1, 2 }, // Chant of Spirit
{ 7052, 1, 2 }, // Magic Barrier
{ 7045, 1, 2 }, // Wind Walk
{ 7046, 1, 2 }, // Bless the Body
// Группа для камаелей 3
{ 23240, 1, 3 }, // Mental Shield
{ 7056, 1, 3 }, // Wind Walk
{ 23247, 1, 3 }, // Bless the Body
{ 7057, 1, 3 }, // Bless the Soul
{ 7058, 1, 3 }, // Shield
{ 80020, 1, 3 }, // Clarity
{ 80021, 1, 3 }, // Resist Shock
{ 80022, 1, 3 }, // Greater Might
{ 80023, 1, 3 }, // Might
{ 23238, 1, 3 }, // Chant of Spirit
{ 7053, 1, 3 }, // Shield
{ 7052, 1, 3 }, // Magic Barrier
{ 7045, 1, 3 }, // Wind Walk
{ 7046, 1, 3 }, // Bless the Body
// Группа для лучников 4
{ 7064, 1, 4 }, // Mental Shield
{ 7056, 1, 4 }, // Wind Walk
{ 23247, 1, 4 }, // Bless the Body
{ 7057, 1, 4 }, // Bless the Soul
{ 7058, 1, 4 }, // Shield
{ 80020, 1, 4 }, // Clarity
{ 80021, 1, 4 }, // Resist Shock
{ 80022, 1, 4 }, // Greater Might
{ 80023, 1, 4 }, // Might
{ 23238, 1, 4 }, // Chant of Spirit
{ 7053, 1, 4 }, // Shield
{ 7052, 1, 4 }, // Magic Barrier
{ 7045, 1, 4 }, // Wind Walk
{ 7046, 1, 4 }, // Bless the Body
// Группа для камаелей воинов 5
{ 7064, 1, 5 }, // Mental Shield
{ 7056, 1, 5 }, // Wind Walk
{ 23247, 1, 5 }, // Bless the Body
{ 7057, 1, 5 }, // Bless the Soul
{ 7058, 1, 5 }, // Shield
{ 80020, 1, 5 }, // Clarity
{ 80021, 1, 5 }, // Resist Shock
{ 80022, 1, 5 }, // Greater Might
{ 80023, 1, 5 }, // Might
{ 23238, 1, 5 }, // Chant of Spirit
{ 7053, 1, 5 }, // Shield
{ 7052, 1, 5 }, // Magic Barrier
{ 7045, 1, 5 }, // Wind Walk
{ 7046, 1, 5 }, // Bless the Body
// Группа для воинов 1
{ 80000, 1, 1 }, // Dance of Fury
{ 80001, 1, 1 }, // Dance of Fire
{ 80002, 1, 1 }, // Dance of the Warrior
{ 80003, 1, 1 }, // Dance of the Vampire
{ 80004, 1, 1 }, // Dance of Inspiration
{ 80005, 1, 1 }, // Dance of Concentration
{ 80006, 1, 1 }, // Dance of the Mystic
{ 80007, 1, 1 }, // Siren's Dance
{ 80008, 1, 1 }, // Song of Meditation
{ 80009, 1, 1 }, // Song of Renewal
{ 80010, 1, 1 }, // Song of Warding
{ 80011, 1, 1 }, // Song of Earth
{ 80012, 1, 1 }, // Song of Hunter
{ 80013, 1, 1 }, // Song of Vitality
{ 80014, 1, 1 }, // Song of Champion
{ 80015, 1, 1 }, // Song of Wind
{ 80016, 1, 1 }, // Song of Water
{ 80019, 1, 1 }, // Song of Elemental
// Группа для магов 2
{ 80000, 1, 2 }, // Dance of Fury
{ 80001, 1, 2 }, // Dance of Fire
{ 80002, 1, 2 }, // Dance of the Warrior
{ 80003, 1, 2 }, // Dance of the Vampire
{ 80004, 1, 2 }, // Dance of Inspiration
{ 80005, 1, 2 }, // Dance of Concentration
{ 80006, 1, 2 }, // Dance of the Mystic
{ 80007, 1, 2 }, // Siren's Dance
{ 80008, 1, 2 }, // Song of Meditation
{ 80009, 1, 2 }, // Song of Renewal
{ 80010, 1, 2 }, // Song of Warding
{ 80011, 1, 2 }, // Song of Earth
{ 80012, 1, 2 }, // Song of Hunter
{ 80013, 1, 2 }, // Song of Vitality
{ 80014, 1, 2 }, // Song of Champion
{ 80015, 1, 2 }, // Song of Wind
{ 80016, 1, 2 }, // Song of Water
{ 80019, 1, 2 }, // Song of Elemental
// Группа для камаелей магов 3
{ 80000, 1, 3 }, // Dance of Fury
{ 80001, 1, 3 }, // Dance of Fire
{ 80002, 1, 3 }, // Dance of the Warrior
{ 80003, 1, 3 }, // Dance of the Vampire
{ 80004, 1, 3 }, // Dance of Inspiration
{ 80005, 1, 3 }, // Dance of Concentration
{ 80006, 1, 3 }, // Dance of the Mystic
{ 80007, 1, 3 }, // Siren's Dance
{ 80008, 1, 3 }, // Song of Meditation
{ 80009, 1, 3 }, // Song of Renewal
{ 80010, 1, 3 }, // Song of Warding
{ 80011, 1, 3 }, // Song of Earth
{ 80012, 1, 3 }, // Song of Hunter
{ 80013, 1, 3 }, // Song of Vitality
{ 80014, 1, 3 }, // Song of Champion
{ 80015, 1, 3 }, // Song of Wind
{ 80016, 1, 3 }, // Song of Water
{ 80019, 1, 3 }, // Song of Elemental
// Группа для лучников 4
{ 80000, 1, 4 }, // Dance of Fury
{ 80001, 1, 4 }, // Dance of Fire
{ 80002, 1, 4 }, // Dance of the Warrior
{ 80003, 1, 4 }, // Dance of the Vampire
{ 80004, 1, 4 }, // Dance of Inspiration
{ 80005, 1, 4 }, // Dance of Concentration
{ 80006, 1, 4 }, // Dance of the Mystic
{ 80007, 1, 4 }, // Siren's Dance
{ 80008, 1, 4 }, // Song of Meditation
{ 80009, 1, 4 }, // Song of Renewal
{ 80010, 1, 4 }, // Song of Warding
{ 80011, 1, 4 }, // Song of Earth
{ 80012, 1, 4 }, // Song of Hunter
{ 80013, 1, 4 }, // Song of Vitality
{ 80014, 1, 4 }, // Song of Champion
{ 80015, 1, 4 }, // Song of Wind
{ 80016, 1, 4 }, // Song of Water
{ 80019, 1, 4 }, // Song of Elemental
// Группа для камаелей воинов 5
{ 80000, 1, 5 }, // Dance of Fury
{ 80001, 1, 5 }, // Dance of Fire
{ 80002, 1, 5 }, // Dance of the Warrior
{ 80003, 1, 5 }, // Dance of the Vampire
{ 80004, 1, 5 }, // Dance of Inspiration
{ 80005, 1, 5 }, // Dance of Concentration
{ 80006, 1, 5 }, // Dance of the Mystic
{ 80007, 1, 5 }, // Siren's Dance
{ 80008, 1, 5 }, // Song of Meditation
{ 80009, 1, 5 }, // Song of Renewal
{ 80010, 1, 5 }, // Song of Warding
{ 80011, 1, 5 }, // Song of Earth
{ 80012, 1, 5 }, // Song of Hunter
{ 80013, 1, 5 }, // Song of Vitality
{ 80014, 1, 5 }, // Song of Champion
{ 80015, 1, 5 }, // Song of Wind
{ 80016, 1, 5 }, // Song of Water
{ 80019, 1, 5 } // Song of Elemental
};
private String html;
public void onLoad()
{
if(Config.SERVICES_BUFFER_ENABLED)
System.out.println("Buffer1: Loading...");
else
System.out.println("Buffer1: No Loading...");
for(int buff[] : buffs)
switch(buff[2])
{
case 1:
grpCount1++;
break;
case 2:
grpCount2++;
break;
case 3:
grpCount3++;
break;
case 4:
grpCount4++;
break;
case 5:
grpCount5++;
break;
}
}
public void onReload()
{}
public void onShutdown()
{}
/**
* Бафает группу баффов, снимает плату за бафф, отображает диалог с кнопкой возврата к списку бафов
* @param args массив строк, где элемент 0 - id группы бафов
*/
public void doBuffGroup(String[] args)
{
Player player = (Player) getSelf();
Summon pet = player.getSummonList().getPet();
NpcInstance npc = getNpc();
if(!checkCondition(player, npc))
return;
if(player.getAdena() < Config.SERVICES_BUFFER_PRICE * (Integer.valueOf(args[1]) + 2))
{
player.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
return;
}
player.reduceAdena(Config.SERVICES_BUFFER_PRICE * (Integer.valueOf(args[1]) + 2), true);
int time = 0;
int id_groups = Integer.valueOf(args[0]);
int select_id = Integer.valueOf(args[1]);
Skill skill;
for(int buff[] : buffs)
if(buff[2] == id_groups)
{
if(select_id == 0)
{
skill = SkillTable.getInstance().getInfo(buff[0], buff[1]);
//time += skill.getHitTime();
ThreadPoolManager.getInstance().schedule(new BeginBuff(getNpc(), skill, player), time);
time += 0;
}
if(select_id == 1)
{
if(pet == null)
return;
skill = SkillTable.getInstance().getInfo(buff[0], buff[1]);
//time += skill.getHitTime();
ThreadPoolManager.getInstance().schedule(new BeginPetBuff(getNpc(), skill, pet), time);
time += 0;
}
}
}
/**
* Бафает один бафф, снимает плату за бафф, отображает диалог с кнопкой возврата к списку бафов
* @param args массив строк: элемент 0 - id скида, элемент 1 - уровень скила
*/
public void doBuff(String[] args)
{
Player player = (Player) getSelf();
Summon pet = player.getSummonList().getPet();
NpcInstance npc = getNpc();
if(!checkCondition(player, npc))
return;
if(player.getAdena() < Config.SERVICES_BUFFER_PRICE)
{
player.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
return;
}
try
{
int skill_id = Integer.valueOf(args[0]);
int skill_lvl = Integer.valueOf(args[1]);
int select_id = Integer.valueOf(args[2]);
Skill skill = SkillTable.getInstance().getInfo(skill_id, skill_lvl);
if(select_id == 0)
ThreadPoolManager.getInstance().schedule(new BeginBuff(getNpc(), skill, player), 0);
if(select_id == 1)
{
if(pet == null)
return;
ThreadPoolManager.getInstance().schedule(new BeginPetBuff(getNpc(), skill, pet), 0);
}
player.reduceAdena(Config.SERVICES_BUFFER_PRICE, true);
}
catch(Exception e)
{
player.sendMessage("Такого баффа у меня нет!");
}
show("scripts/services/Buffer/buffschar1.htm", player);
}
/**
* Проверяет возможность бафа персонажа.<BR>
* В случае невозможности бафа показывает игроку html с ошибкой и возвращает false.
* @param player персонаж
* @return true, если можно бафать персонажа
*/
public boolean checkCondition(Player player, NpcInstance npc)
{
if(!Config.SERVICES_BUFFER_ENABLED || player == null || npc == null)
return false;
if(!NpcInstance.canBypassCheck(player, npc))
return false;
return true;
}
/* Выбор меню */
public void SelectMenu(String[] args)
{
int select_menu = Integer.valueOf(args[0]);
Player player = (Player) getSelf();
NpcInstance npc = getNpc();
if(select_menu == 0)
show("scripts/services/Buffer/buffschar.htm", player);
if(select_menu == 1)
{
if(Config.SERVICES_BUFFER_PET_ENABLED != true)
return;
if(player.getPet() == null)
return;
show("scripts/services/Buffer/buffspet.htm", player);
}
if(select_menu == 2)
show("scripts/services/Buffer/buffschar1.htm", player);
if(select_menu == 3)
show("scripts/services/Buffer/buffschar2.htm", player);
if(select_menu == 4)
show("scripts/services/Buffer/buffschar3.htm", player);
if(select_menu == 5)
show("scripts/services/Buffer/buffschar4.htm", player);
if(select_menu == 6)
show("scripts/services/Buffer/buffschar5.htm", player);
if(select_menu == 7)
show("scripts/services/Buffer/buffspet1.htm", player);
if(select_menu == 8)
show("scripts/services/Buffer/buffspet2.htm", player);
if(select_menu == 9)
show("scripts/services/Buffer/buffspet3.htm", player);
if(select_menu == 10)
show("scripts/services/Buffer/buffspet4.htm", player);
if(select_menu == 11)
show("scripts/services/Buffer/buffspet5.htm", player);
}
/* Показывает страницу с выбором кого бафать. */
public void SelectBuffs()
{
Player player = (Player) getSelf();
NpcInstance lastNpc = player.getLastNpc();
if(!checkCondition(player, lastNpc))
return;
show("scripts/services/Buffer/buffs.htm", player, lastNpc);
}
public class BeginBuff implements Runnable
{
Creature _buffer;
Skill _skill;
Player _target;
public BeginBuff(Creature buffer, Skill skill, Player target)
{
_buffer = buffer;
_skill = skill;
_target = target;
}
public void run()
{
if(_target.isInOlympiadMode())
return;
_buffer.broadcastPacket(new MagicSkillUse(_buffer, _target, _skill.getDisplayId(), _skill.getLevel(), 0, 0));
ThreadPoolManager.getInstance().schedule(new EndBuff(_buffer, _skill, _target), 0);
}
}
public class EndBuff implements Runnable
{
Creature _buffer;
Skill _skill;
Player _target;
public EndBuff(Creature buffer, Skill skill, Player target)
{
_buffer = buffer;
_skill = skill;
_target = target;
}
public void run()
{
_skill.getEffects(_buffer, _target, false, false);
_buffer.broadcastPacket(new MagicSkillLaunched(_buffer.getObjectId(), _skill.getId(), _skill.getLevel(), _target));
}
}
public class BeginPetBuff implements Runnable
{
Creature _buffer;
Skill _skill;
Summon _target;
public BeginPetBuff(Creature buffer, Skill skill, Summon target)
{
_buffer = buffer;
_skill = skill;
_target = target;
}
public void run()
{
_buffer.broadcastPacket(new MagicSkillUse(_buffer, _target, _skill.getDisplayId(), _skill.getLevel(), _skill.getHitTime(), 0));
ThreadPoolManager.getInstance().schedule(new EndPetBuff(_buffer, _skill, _target), _skill.getHitTime());
}
}
public class EndPetBuff implements Runnable
{
Creature _buffer;
Skill _skill;
Summon _target;
public EndPetBuff(Creature buffer, Skill skill, Summon target)
{
_buffer = buffer;
_skill = skill;
_target = target;
}
public void run()
{
_skill.getEffects(_buffer, _target, false, false);
_buffer.broadcastPacket(new MagicSkillLaunched(_buffer.getObjectId(), _skill.getId(), _skill.getLevel(), _target));
}
}
}
[/SRC]
Что тут дает возможность подменить баф на Super Haste?
[SRC="html"]
<html><head><title>l2.ee Support Buff</title></head>
<body>
<center>
<br>
<table>
<tr>
<td><img src=icon.skill0168 width=32 height=32 align=left></td>
<td><button value="Flu" action="bypass -h scripts_services.Buffer1:doBuff 4553 4 0" width=94 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
<td><img src=icon.skill1527 width=32 height=32 align=left></td>
<td><button value="Malaria" action="bypass -h scripts_services.Buffer1:doBuff 4554 4 0" width=94 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
</tr>
</table>
<br>
<br>
<button action="bypass -h scripts_services.Buffer1:SelectMenu 0" value="Категории" width=200 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
<br>
</center>
</body>
</html>
[/SRC]
Сообщений: 4,694
Тем: 85
Зарегистрирован: Mar 2009
Репутация:
23,364
код
Krasavella Написал:К примеру вот этот самый баффер:
[SRC="java"]
package services;
import l2ee.play.Config;
import l2ee.play.ThreadPoolManager;
import l2ee.play.scripts.Functions;
import l2ee.play.scripts.ScriptFile;
import l2ee.play.cache.Msg;
import l2ee.play.model.Creature;
import l2ee.play.model.Player;
import l2ee.play.model.Skill;
import l2ee.play.model.Summon;
import l2ee.play.model.instances.NpcInstance;
import l2ee.play.network.serverpackets.MagicSkillLaunched;
import l2ee.play.network.serverpackets.MagicSkillUse;
import l2ee.play.tables.SkillTable;
public class Buffer1 extends Functions implements ScriptFile
{
/** Количество бафов в группах */
private static int grpCount1, grpCount2, grpCount3, grpCount4, grpCount5;
// Количество бафов в 1 и второй группах должно быть одинаковое
private static int buffs[][] = { // id, lvl, group
// Группа для воинов 1
{ 23283, 1, 1 }, // Chant of Fury
{ 23241, 1, 1 }, // Chant of Evasion
{ 23280, 1, 1 }, // Chant of Revenge
{ 23277, 1, 1 }, // Chant of Eagle
{ 23284, 1, 1 }, // Chant of Vampire
{ 23282, 1, 1 }, // Chant of Spirit
{ 23278, 1, 1 }, // War Chant
{ 23281, 1, 1 }, // Chant of Fury
{ 7060, 1, 1 }, // Chant of Evasion
{ 23279, 1, 1 }, // Chant of Rage
{ 80029, 1, 1 }, // Chant of Revenge
{ 80030, 1, 1 }, // Chant of Predator
{ 4553, 4, 1 }, // Chant of Eagle
{ 4554, 4, 1 }, // Chant of Vampire
// Группа для магов 2
{ 23241, 1, 2 }, // Chant of Evasion
{ 23242, 1, 2 }, // Chant of Rage
{ 23280, 1, 2 }, // Chant of Revenge
{ 23277, 1, 2 }, // Chant of Eagle
{ 23282, 1, 2 }, // Chant of Spirit
{ 23278, 1, 2 }, // War Chant
{ 23245, 1, 2 }, // Earth Chant
{ 23281, 1, 2 }, // Chant of Fury
{ 7060, 1, 2 }, // Chant of Evasion
{ 23279, 1, 2 }, // Chant of Rage
{ 80029, 1, 2 }, // Chant of Revenge
{ 80030, 1, 2 }, // Chant of Predator
{ 4553, 4, 2 }, // Chant of Eagle
{ 4554, 4, 2 }, // Chant of Vampire
// Группа для камаелей 3
{ 23283, 1, 3 }, // Chant of Fury
{ 23241, 1, 3 }, // Chant of Evasion
{ 23280, 1, 3 }, // Chant of Revenge
{ 23277, 1, 3 }, // Chant of Eagle
{ 23244, 1, 3 }, // Chant of Vampire
{ 23282, 1, 3 }, // Chant of Spirit
{ 23278, 1, 3 }, // War Chant
{ 23281, 1, 3 }, // Chant of Fury
{ 7060, 1, 3 }, // Chant of Evasion
{ 23279, 1, 3 }, // Chant of Rage
{ 80029, 1, 3 }, // Chant of Revenge
{ 80030, 1, 3 }, // Chant of Predator
{ 4553, 4, 3 }, // Chant of Eagle
{ 4554, 4, 3 }, // Chant of Vampire
// Группа для лучников 4
{ 23243, 1, 4 }, // Chant of Fury
{ 23241, 1, 4 }, // Chant of Evasion
{ 23280, 1, 4 }, // Chant of Revenge
{ 23277, 1, 4 }, // Chant of Eagle
{ 23244, 1, 4 }, // Chant of Vampire
{ 23282, 1, 4 }, // Chant of Spirit
{ 23278, 1, 4 }, // War Chant
{ 23281, 1, 4 }, // Chant of Fury
{ 7060, 1, 4 }, // Chant of Evasion
{ 23279, 1, 4 }, // Chant of Rage
{ 80029, 1, 4 }, // Chant of Revenge
{ 80030, 1, 4 }, // Chant of Predator
{ 4553, 4, 4 }, // Chant of Eagle
{ 4554, 4, 4 }, // Chant of Vampire
// Группа для камаелей воинов 5
{ 23283, 1, 5 }, // Chant of Fury
{ 23241, 1, 5 }, // Chant of Evasion
{ 23280, 1, 5 }, // Chant of Revenge
{ 23277, 1, 5 }, // Chant of Eagle
{ 23244, 1, 5 }, // Chant of Vampire
{ 23282, 1, 5 }, // Chant of Spirit
{ 23278, 1, 5 }, // War Chant
{ 23281, 1, 5 }, // Chant of Fury
{ 7060, 1, 5 }, // Chant of Evasion
{ 23279, 1, 5 }, // Chant of Rage
{ 80029, 1, 5 }, // Chant of Revenge
{ 80030, 1, 5 }, // Chant of Predator
{ 4553, 4, 5 }, // Chant of Eagle
{ 4554, 4, 5 }, // Chant of Vampire
// Группа для воинов 1
{ 23246, 1, 1 }, // Chant of Rage
{ 80031, 1, 1 }, // Chant of Revenge
{ 80024, 1, 1 }, // Chant of Predator
{ 80025, 1, 1 }, // Chant of Eagle
{ 80026, 1, 1 }, // Chant of Vampire
{ 80033, 1, 1 }, // Chant of Spirit
{ 80027, 1, 1 }, // Chant of Victory
{ 80028, 1, 1 }, // War Chant
// Группа для магов 2
{ 23246, 1, 2 }, // Chant of Rage
{ 80031, 1, 2 }, // Chant of Revenge
{ 80024, 1, 2 }, // Chant of Predator
{ 80025, 1, 2 }, // Chant of Eagle
{ 80026, 1, 2 }, // Chant of Vampire
{ 80033, 1, 2 }, // Chant of Spirit
{ 80027, 1, 2 }, // Chant of Victory
{ 80028, 1, 2 }, // War Chant
// Группа для камаелей 3
{ 23246, 1, 3 }, // Chant of Rage
{ 80031, 1, 3 }, // Chant of Revenge
{ 80024, 1, 3 }, // Chant of Predator
{ 80025, 1, 3 }, // Chant of Eagle
{ 80026, 1, 3 }, // Chant of Vampire
{ 80033, 1, 3 }, // Chant of Spirit
{ 80027, 1, 3 }, // Chant of Victory
{ 80028, 1, 3 }, // War Chant
// Группа для лучников 4
{ 23246, 1, 4 }, // Chant of Rage
{ 80031, 1, 4 }, // Chant of Revenge
{ 80024, 1, 4 }, // Chant of Predator
{ 80025, 1, 4 }, // Chant of Eagle
{ 80026, 1, 4 }, // Chant of Vampire
{ 80033, 1, 4 }, // Chant of Spirit
{ 80027, 1, 4 }, // Chant of Victory
{ 80028, 1, 4 }, // War Chant
// Группа для камаелей воинов 5
{ 23246, 1, 5 }, // Chant of Rage
{ 80031, 1, 5 }, // Chant of Revenge
{ 80024, 1, 5 }, // Chant of Predator
{ 80025, 1, 5 }, // Chant of Eagle
{ 80026, 1, 5 }, // Chant of Vampire
{ 80033, 1, 5 }, // Chant of Spirit
{ 80027, 1, 5 }, // Chant of Victory
{ 80028, 1, 5 }, // War Chant
// Группа для воинов 1
{ 7064, 1, 1 }, // Mental Shield
{ 7056, 1, 1 }, // Wind Walk
{ 23247, 1, 1 }, // Bless the Body
{ 7057, 1, 1 }, // Bless the Soul
{ 7058, 1, 1 }, // Shield
{ 80020, 1, 1 }, // Clarity
{ 80021, 1, 1 }, // Resist Shock
{ 80022, 1, 1 }, // Greater Might
{ 80023, 1, 1 }, // Might
{ 23238, 1, 1 }, // Chant of Spirit
{ 7053, 1, 1 }, // Shield
{ 7052, 1, 1 }, // Magic Barrier
{ 7045, 1, 1 }, // Wind Walk
{ 7046, 1, 1 }, // Bless the Body
// Группа для магов 2
{ 7059, 1, 2 }, // Berserker Spirit
{ 23240, 1, 2 }, // Concentration
{ 7056, 1, 2 }, // Wind Walk
{ 23247, 1, 2 }, // Bless the Body
{ 7057, 1, 2 }, // Bless the Soul
{ 7058, 1, 2 }, // Shield
{ 80020, 1, 2 }, // Clarity
{ 80021, 1, 2 }, // Resist Shock
{ 80022, 1, 2 }, // Greater Might
{ 80023, 1, 2 }, // Might
{ 23238, 1, 2 }, // Chant of Spirit
{ 7052, 1, 2 }, // Magic Barrier
{ 7045, 1, 2 }, // Wind Walk
{ 7046, 1, 2 }, // Bless the Body
// Группа для камаелей 3
{ 23240, 1, 3 }, // Mental Shield
{ 7056, 1, 3 }, // Wind Walk
{ 23247, 1, 3 }, // Bless the Body
{ 7057, 1, 3 }, // Bless the Soul
{ 7058, 1, 3 }, // Shield
{ 80020, 1, 3 }, // Clarity
{ 80021, 1, 3 }, // Resist Shock
{ 80022, 1, 3 }, // Greater Might
{ 80023, 1, 3 }, // Might
{ 23238, 1, 3 }, // Chant of Spirit
{ 7053, 1, 3 }, // Shield
{ 7052, 1, 3 }, // Magic Barrier
{ 7045, 1, 3 }, // Wind Walk
{ 7046, 1, 3 }, // Bless the Body
// Группа для лучников 4
{ 7064, 1, 4 }, // Mental Shield
{ 7056, 1, 4 }, // Wind Walk
{ 23247, 1, 4 }, // Bless the Body
{ 7057, 1, 4 }, // Bless the Soul
{ 7058, 1, 4 }, // Shield
{ 80020, 1, 4 }, // Clarity
{ 80021, 1, 4 }, // Resist Shock
{ 80022, 1, 4 }, // Greater Might
{ 80023, 1, 4 }, // Might
{ 23238, 1, 4 }, // Chant of Spirit
{ 7053, 1, 4 }, // Shield
{ 7052, 1, 4 }, // Magic Barrier
{ 7045, 1, 4 }, // Wind Walk
{ 7046, 1, 4 }, // Bless the Body
// Группа для камаелей воинов 5
{ 7064, 1, 5 }, // Mental Shield
{ 7056, 1, 5 }, // Wind Walk
{ 23247, 1, 5 }, // Bless the Body
{ 7057, 1, 5 }, // Bless the Soul
{ 7058, 1, 5 }, // Shield
{ 80020, 1, 5 }, // Clarity
{ 80021, 1, 5 }, // Resist Shock
{ 80022, 1, 5 }, // Greater Might
{ 80023, 1, 5 }, // Might
{ 23238, 1, 5 }, // Chant of Spirit
{ 7053, 1, 5 }, // Shield
{ 7052, 1, 5 }, // Magic Barrier
{ 7045, 1, 5 }, // Wind Walk
{ 7046, 1, 5 }, // Bless the Body
// Группа для воинов 1
{ 80000, 1, 1 }, // Dance of Fury
{ 80001, 1, 1 }, // Dance of Fire
{ 80002, 1, 1 }, // Dance of the Warrior
{ 80003, 1, 1 }, // Dance of the Vampire
{ 80004, 1, 1 }, // Dance of Inspiration
{ 80005, 1, 1 }, // Dance of Concentration
{ 80006, 1, 1 }, // Dance of the Mystic
{ 80007, 1, 1 }, // Siren's Dance
{ 80008, 1, 1 }, // Song of Meditation
{ 80009, 1, 1 }, // Song of Renewal
{ 80010, 1, 1 }, // Song of Warding
{ 80011, 1, 1 }, // Song of Earth
{ 80012, 1, 1 }, // Song of Hunter
{ 80013, 1, 1 }, // Song of Vitality
{ 80014, 1, 1 }, // Song of Champion
{ 80015, 1, 1 }, // Song of Wind
{ 80016, 1, 1 }, // Song of Water
{ 80019, 1, 1 }, // Song of Elemental
// Группа для магов 2
{ 80000, 1, 2 }, // Dance of Fury
{ 80001, 1, 2 }, // Dance of Fire
{ 80002, 1, 2 }, // Dance of the Warrior
{ 80003, 1, 2 }, // Dance of the Vampire
{ 80004, 1, 2 }, // Dance of Inspiration
{ 80005, 1, 2 }, // Dance of Concentration
{ 80006, 1, 2 }, // Dance of the Mystic
{ 80007, 1, 2 }, // Siren's Dance
{ 80008, 1, 2 }, // Song of Meditation
{ 80009, 1, 2 }, // Song of Renewal
{ 80010, 1, 2 }, // Song of Warding
{ 80011, 1, 2 }, // Song of Earth
{ 80012, 1, 2 }, // Song of Hunter
{ 80013, 1, 2 }, // Song of Vitality
{ 80014, 1, 2 }, // Song of Champion
{ 80015, 1, 2 }, // Song of Wind
{ 80016, 1, 2 }, // Song of Water
{ 80019, 1, 2 }, // Song of Elemental
// Группа для камаелей магов 3
{ 80000, 1, 3 }, // Dance of Fury
{ 80001, 1, 3 }, // Dance of Fire
{ 80002, 1, 3 }, // Dance of the Warrior
{ 80003, 1, 3 }, // Dance of the Vampire
{ 80004, 1, 3 }, // Dance of Inspiration
{ 80005, 1, 3 }, // Dance of Concentration
{ 80006, 1, 3 }, // Dance of the Mystic
{ 80007, 1, 3 }, // Siren's Dance
{ 80008, 1, 3 }, // Song of Meditation
{ 80009, 1, 3 }, // Song of Renewal
{ 80010, 1, 3 }, // Song of Warding
{ 80011, 1, 3 }, // Song of Earth
{ 80012, 1, 3 }, // Song of Hunter
{ 80013, 1, 3 }, // Song of Vitality
{ 80014, 1, 3 }, // Song of Champion
{ 80015, 1, 3 }, // Song of Wind
{ 80016, 1, 3 }, // Song of Water
{ 80019, 1, 3 }, // Song of Elemental
// Группа для лучников 4
{ 80000, 1, 4 }, // Dance of Fury
{ 80001, 1, 4 }, // Dance of Fire
{ 80002, 1, 4 }, // Dance of the Warrior
{ 80003, 1, 4 }, // Dance of the Vampire
{ 80004, 1, 4 }, // Dance of Inspiration
{ 80005, 1, 4 }, // Dance of Concentration
{ 80006, 1, 4 }, // Dance of the Mystic
{ 80007, 1, 4 }, // Siren's Dance
{ 80008, 1, 4 }, // Song of Meditation
{ 80009, 1, 4 }, // Song of Renewal
{ 80010, 1, 4 }, // Song of Warding
{ 80011, 1, 4 }, // Song of Earth
{ 80012, 1, 4 }, // Song of Hunter
{ 80013, 1, 4 }, // Song of Vitality
{ 80014, 1, 4 }, // Song of Champion
{ 80015, 1, 4 }, // Song of Wind
{ 80016, 1, 4 }, // Song of Water
{ 80019, 1, 4 }, // Song of Elemental
// Группа для камаелей воинов 5
{ 80000, 1, 5 }, // Dance of Fury
{ 80001, 1, 5 }, // Dance of Fire
{ 80002, 1, 5 }, // Dance of the Warrior
{ 80003, 1, 5 }, // Dance of the Vampire
{ 80004, 1, 5 }, // Dance of Inspiration
{ 80005, 1, 5 }, // Dance of Concentration
{ 80006, 1, 5 }, // Dance of the Mystic
{ 80007, 1, 5 }, // Siren's Dance
{ 80008, 1, 5 }, // Song of Meditation
{ 80009, 1, 5 }, // Song of Renewal
{ 80010, 1, 5 }, // Song of Warding
{ 80011, 1, 5 }, // Song of Earth
{ 80012, 1, 5 }, // Song of Hunter
{ 80013, 1, 5 }, // Song of Vitality
{ 80014, 1, 5 }, // Song of Champion
{ 80015, 1, 5 }, // Song of Wind
{ 80016, 1, 5 }, // Song of Water
{ 80019, 1, 5 } // Song of Elemental
};
private String html;
public void onLoad()
{
if(Config.SERVICES_BUFFER_ENABLED)
System.out.println("Buffer1: Loading...");
else
System.out.println("Buffer1: No Loading...");
for(int buff[] : buffs)
switch(buff[2])
{
case 1:
grpCount1++;
break;
case 2:
grpCount2++;
break;
case 3:
grpCount3++;
break;
case 4:
grpCount4++;
break;
case 5:
grpCount5++;
break;
}
}
public void onReload()
{}
public void onShutdown()
{}
/**
* Бафает группу баффов, снимает плату за бафф, отображает диалог с кнопкой возврата к списку бафов
* @param args массив строк, где элемент 0 - id группы бафов
*/
public void doBuffGroup(String[] args)
{
Player player = (Player) getSelf();
Summon pet = player.getSummonList().getPet();
NpcInstance npc = getNpc();
if(!checkCondition(player, npc))
return;
if(player.getAdena() < Config.SERVICES_BUFFER_PRICE * (Integer.valueOf(args[1]) + 2))
{
player.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
return;
}
player.reduceAdena(Config.SERVICES_BUFFER_PRICE * (Integer.valueOf(args[1]) + 2), true);
int time = 0;
int id_groups = Integer.valueOf(args[0]);
int select_id = Integer.valueOf(args[1]);
Skill skill;
for(int buff[] : buffs)
if(buff[2] == id_groups)
{
if(select_id == 0)
{
skill = SkillTable.getInstance().getInfo(buff[0], buff[1]);
//time += skill.getHitTime();
ThreadPoolManager.getInstance().schedule(new BeginBuff(getNpc(), skill, player), time);
time += 0;
}
if(select_id == 1)
{
if(pet == null)
return;
skill = SkillTable.getInstance().getInfo(buff[0], buff[1]);
//time += skill.getHitTime();
ThreadPoolManager.getInstance().schedule(new BeginPetBuff(getNpc(), skill, pet), time);
time += 0;
}
}
}
/**
* Бафает один бафф, снимает плату за бафф, отображает диалог с кнопкой возврата к списку бафов
* @param args массив строк: элемент 0 - id скида, элемент 1 - уровень скила
*/
public void doBuff(String[] args)
{
Player player = (Player) getSelf();
Summon pet = player.getSummonList().getPet();
NpcInstance npc = getNpc();
if(!checkCondition(player, npc))
return;
if(player.getAdena() < Config.SERVICES_BUFFER_PRICE)
{
player.sendPacket(Msg.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
return;
}
try
{
int skill_id = Integer.valueOf(args[0]);
int skill_lvl = Integer.valueOf(args[1]);
int select_id = Integer.valueOf(args[2]);
Skill skill = SkillTable.getInstance().getInfo(skill_id, skill_lvl);
if(select_id == 0)
ThreadPoolManager.getInstance().schedule(new BeginBuff(getNpc(), skill, player), 0);
if(select_id == 1)
{
if(pet == null)
return;
ThreadPoolManager.getInstance().schedule(new BeginPetBuff(getNpc(), skill, pet), 0);
}
player.reduceAdena(Config.SERVICES_BUFFER_PRICE, true);
}
catch(Exception e)
{
player.sendMessage("Такого баффа у меня нет!");
}
show("scripts/services/Buffer/buffschar1.htm", player);
}
/**
* Проверяет возможность бафа персонажа.<BR>
* В случае невозможности бафа показывает игроку html с ошибкой и возвращает false.
* @param player персонаж
* @return true, если можно бафать персонажа
*/
public boolean checkCondition(Player player, NpcInstance npc)
{
if(!Config.SERVICES_BUFFER_ENABLED || player == null || npc == null)
return false;
if(!NpcInstance.canBypassCheck(player, npc))
return false;
return true;
}
/* Выбор меню */
public void SelectMenu(String[] args)
{
int select_menu = Integer.valueOf(args[0]);
Player player = (Player) getSelf();
NpcInstance npc = getNpc();
if(select_menu == 0)
show("scripts/services/Buffer/buffschar.htm", player);
if(select_menu == 1)
{
if(Config.SERVICES_BUFFER_PET_ENABLED != true)
return;
if(player.getPet() == null)
return;
show("scripts/services/Buffer/buffspet.htm", player);
}
if(select_menu == 2)
show("scripts/services/Buffer/buffschar1.htm", player);
if(select_menu == 3)
show("scripts/services/Buffer/buffschar2.htm", player);
if(select_menu == 4)
show("scripts/services/Buffer/buffschar3.htm", player);
if(select_menu == 5)
show("scripts/services/Buffer/buffschar4.htm", player);
if(select_menu == 6)
show("scripts/services/Buffer/buffschar5.htm", player);
if(select_menu == 7)
show("scripts/services/Buffer/buffspet1.htm", player);
if(select_menu == 8)
show("scripts/services/Buffer/buffspet2.htm", player);
if(select_menu == 9)
show("scripts/services/Buffer/buffspet3.htm", player);
if(select_menu == 10)
show("scripts/services/Buffer/buffspet4.htm", player);
if(select_menu == 11)
show("scripts/services/Buffer/buffspet5.htm", player);
}
/* Показывает страницу с выбором кого бафать. */
public void SelectBuffs()
{
Player player = (Player) getSelf();
NpcInstance lastNpc = player.getLastNpc();
if(!checkCondition(player, lastNpc))
return;
show("scripts/services/Buffer/buffs.htm", player, lastNpc);
}
public class BeginBuff implements Runnable
{
Creature _buffer;
Skill _skill;
Player _target;
public BeginBuff(Creature buffer, Skill skill, Player target)
{
_buffer = buffer;
_skill = skill;
_target = target;
}
public void run()
{
if(_target.isInOlympiadMode())
return;
_buffer.broadcastPacket(new MagicSkillUse(_buffer, _target, _skill.getDisplayId(), _skill.getLevel(), 0, 0));
ThreadPoolManager.getInstance().schedule(new EndBuff(_buffer, _skill, _target), 0);
}
}
public class EndBuff implements Runnable
{
Creature _buffer;
Skill _skill;
Player _target;
public EndBuff(Creature buffer, Skill skill, Player target)
{
_buffer = buffer;
_skill = skill;
_target = target;
}
public void run()
{
_skill.getEffects(_buffer, _target, false, false);
_buffer.broadcastPacket(new MagicSkillLaunched(_buffer.getObjectId(), _skill.getId(), _skill.getLevel(), _target));
}
}
public class BeginPetBuff implements Runnable
{
Creature _buffer;
Skill _skill;
Summon _target;
public BeginPetBuff(Creature buffer, Skill skill, Summon target)
{
_buffer = buffer;
_skill = skill;
_target = target;
}
public void run()
{
_buffer.broadcastPacket(new MagicSkillUse(_buffer, _target, _skill.getDisplayId(), _skill.getLevel(), _skill.getHitTime(), 0));
ThreadPoolManager.getInstance().schedule(new EndPetBuff(_buffer, _skill, _target), _skill.getHitTime());
}
}
public class EndPetBuff implements Runnable
{
Creature _buffer;
Skill _skill;
Summon _target;
public EndPetBuff(Creature buffer, Skill skill, Summon target)
{
_buffer = buffer;
_skill = skill;
_target = target;
}
public void run()
{
_skill.getEffects(_buffer, _target, false, false);
_buffer.broadcastPacket(new MagicSkillLaunched(_buffer.getObjectId(), _skill.getId(), _skill.getLevel(), _target));
}
}
}
[/SRC]
Что тут дает возможность подменить баф на Super Haste?
[SRC="html"]
<html><head><title>l2.ee Support Buff</title></head>
<body>
<center>
<br>
<table>
<tr>
<td><img src=icon.skill0168 width=32 height=32 align=left></td>
<td><button value="Flu" action="bypass -h scripts_services.Buffer1:doBuff 4553 4 0" width=94 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
<td><img src=icon.skill1527 width=32 height=32 align=left></td>
<td><button value="Malaria" action="bypass -h scripts_services.Buffer1:doBuff 4554 4 0" width=94 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
</tr>
</table>
<br>
<br>
<button action="bypass -h scripts_services.Buffer1:SelectMenu 0" value="Категории" width=200 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
<br>
</center>
</body>
</html>
[/SRC]
Думается мне, что это плохо:
[src="html"]
<td><button value="Malaria" action="bypass -h scripts_services.Buffer1:doBuff 4554 4 0" width=94 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
[/src]
а именно - в открытом виде передавать данные. Отловят пакет, заменят id и отправят обратно.
Fortuna - non penis, in manus non recipe.
Сообщений: 794
Тем: 31
Зарегистрирован: Dec 2012
Репутация:
2,838
Именно так и делают) Как можно добавить проверку на возможность бафнуться только skill_id, которые указаны в скрипте?
|