Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate
Debes de estar registrado para poder ver el contenido indicado. Registrate o ConectateBuenas..!!
un pequeño aporte de lo publicado con algunos retoques y mejorasIndex: java/L2jServer/gameserver/network/serverpackets/CharSelectInfo.java
===================================================================
--- java/L2jServer/gameserver/network/serverpackets/CharSelectInfo.java
+++ java/L2jServer/gameserver/network/serverpackets/CharSelectInfo.java (Working L2j)
+ private static int customClassSkin;
charInfopackage.setClassId(activeClassId);
+ charInfopackage.setCustomClassSkin(customClassSkin);
- writeD(charInfoPackage.getRace());
+ if (charInfoPackage.getCustomRaceSkin() == -1)
+ writeD(charInfoPackage.getRace());
+ else
+ writeD(charInfoPackage.getCustomRaceSkin());
+
- if (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId())
+ if ((charInfoPackage.getCustomClassSkin() == -1) && (charInfoPackage.getClassId() == charInfoPackage.getBaseClassId()))
{
writeD(charInfoPackage.getClassId());
}
else
{
- writeD(charInfoPackage.getBaseClassId());
+ // writeD(charInfoPackage.getBaseClassId());
+ writeD(charInfoPackage.getCustomClassSkin());
}
- final PreparedStatement statement = con.prepareStatement("SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, base_class FROM characters WHERE account_name=?");
+ final PreparedStatement statement = con.prepareStatement("SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, base_class, custom_race_skin, custom_class_skin FROM characters WHERE account_name=?");
- charInfopackage.setRace(chardata.getInt("race"));
+ final int customRaceSkin = chardata.getInt("custom_race_skin");
+
+ if (customRaceSkin == -1)
+ charInfopackage.setRace(chardata.getInt("race"));
+ else
+ charInfopackage.setCustomRaceSkin(customRaceSkin);
+
+ final int customClassSkin = chardata.getInt("custom_class_skin");
- if (baseClassId == 0 && activeClassId > 0)
- {
- charInfopackage.setBaseClassId(activeClassId);
- }
+ if (customClassSkin == -1)
+ if (baseClassId == 0 && activeClassId > 0)
+ charInfopackage.setBaseClassId(activeClassId);
+ else
+ charInfopackage.setBaseClassId(baseClassId);
else
{
- charInfopackage.setBaseClassId(baseClassId);
+ charInfopackage.setCustomClassSkin(customClassSkin);
}
Index: java/L2jServer/Config/actor/instance/L2ChangeSkinManagerInstance.java
===================================================================
--- java/L2jServer/Config/actor/instance/L2ChangeSkinManagerInstance.java
+++ java/L2jServer/Config/actor/instance/L2ChangeSkinManagerInstance.java (Working L2j)
+ package L2jServer.gameserver.model.actor.instance;
+
+ import L2jServer.Config;
+ import L2jServer.gameserver.model.base.ClassId;
+ import L2jServer.gameserver.model.base.Race;
+ import L2jServer.gameserver.network.L2GameClient;
+ import L2jServer.gameserver.network.serverpackets.CharInfo;
+ import L2jServer.gameserver.network.serverpackets.CharSelectInfo;
+ import L2jServer.gameserver.network.serverpackets.RestartResponse;
+ import L2jServer.gameserver.templates.L2NpcTemplate;
+ import L2jServer.gameserver.thread.ThreadPoolManager;
+
+ public class L2ChangeSkinManagerInstance extends L2NpcInstance {
+ public enum Races {
+ FIGHTER(L2jServer.gameserver.model.base.Race.human, ClassId.fighter),
+ MAGE(L2jServer.gameserver.model.base.Race.human, ClassId.mage),
+ ELVENFIGHTER(L2jServer.gameserver.model.base.Race.elf, ClassId.elvenFighter),
+ ELVENMAGE(L2jServer.gameserver.model.base.Race.elf, ClassId.elvenMage),
+ DARKFIGHTER(L2jServer.gameserver.model.base.Race.darkelf, ClassId.darkFighter),
+ DARKMAGE(L2jServer.gameserver.model.base.Race.darkelf, ClassId.darkMage),
+ ORCFIGHTER(L2jServer.gameserver.model.base.Race.orc, ClassId.orcFighter),
+ ORCMAGE(L2jServer.gameserver.model.base.Race.orc, ClassId.orcMage),
+ DWARVEN(L2jServer.gameserver.model.base.Race.dwarf, ClassId.dwarvenFighter);
+
+ private Race races;
+
+ private ClassId classId;
+
+ Races(Race races, ClassId classid) {
+ this.races = races;
+ this.classId = classid;
+ }
+
+ public int getRaceId() {
+ return this.races.ordinal();
+ }
+
+ public int getClassId() {
+ return this.classId.getId();
+ }
+ }
+
+ public L2ChangeSkinManagerInstance(int objectId, L2NpcTemplate template) {
+ super(objectId, template);
+ }
+
+ public boolean reduceItem(L2PcInstance player, int itemId, int count) {
+ if (player.getInventory().getItemByItemId(itemId) == null || player.getInventory().getItemByItemId(itemId).getCount() < count)
+ return false;
+ return true;
+ }
+
+ @Override
+ public void onBypassFeedback(L2PcInstance player, String command) {
+ Races races = null;
+ if (reduceItem(player, Config.ITEM_CHANGE_SKIN_ID, Config.ITEM_CHANGE_SKIN_COUNT)) {
+ if (command.startsWith("HumanFighter")) {
+ races = Races.FIGHTER;
+ } else if (command.startsWith("HumanMage")) {
+ races = Races.MAGE;
+ } else if (command.startsWith("ElfFighter")) {
+ races = Races.ELVENFIGHTER;
+ } else if (command.startsWith("ElfMage")) {
+ races = Races.ELVENMAGE;
+ } else if (command.startsWith("DarkElfFighter")) {
+ races = Races.DARKFIGHTER;
+ } else if (command.startsWith("DarkElfMage")) {
+ races = Races.DARKMAGE;
+ } else if (command.startsWith("OrcFighter")) {
+ races = Races.ORCFIGHTER;
+ } else if (command.startsWith("OrcMage")) {
+ races = Races.ORCMAGE;
+ } else if (command.startsWith("Dwarven")) {
+ races = Races.DWARVEN;
+ } else if (command.startsWith("BackMainSkin")) {
+ player.setCustomClassSkin(-1);
+ player.setCustomRaceSkin(-1);
+ }
+ setRaceCustomSkin(player, races);
+ player.broadcastPacket(new CharInfo(player));
+ player.broadcastUserInfo();
+ player.getInventory().destroyItemByItemId("change_skin", Config.ITEM_CHANGE_SKIN_ID, Config.ITEM_CHANGE_SKIN_COUNT, player, this);
+ player.sendMessage("Cambio realizado con exito!");
+ } else {
+ player.sendMessage("Cantidad incorrecta.");
+ }
+ }
+
+ @Override
+ public String getHtmlPath(int npcId, int val) {
+ String filename = "";
+ if (val == 0) {
+ filename = "" + npcId;
+ } else {
+ filename = "" + npcId + "-" + npcId;
+ }
+ return "data/html/mods/ChangeSkin/" + filename + ".htm";
+ }
+
+ private static void setRaceCustomSkin(final L2PcInstance player, Races valor) {
+ if (player == null || valor == null)
+ return;
+ player.setCustomRaceSkin(valor.getRaceId());
+ player.setCustomClassSkin(valor.getClassId());
+ ThreadPoolManager.getInstance().scheduleGeneral(new Runnable() {
+ @Override
+ public void run() {
+ L2ChangeSkinManagerInstance.forcedResetClient(player);
+ }
+ }, 50);
+ }
+
+ static void forcedResetClient(L2PcInstance player) {
+ if (player == null)
+ return;
+ player.store();
+ L2GameClient client = player.getClient();
+ player.setClient((L2GameClient)null);
+ player.deleteMe();
+ client.setActiveChar(null);
+ client.setState(L2GameClient.GameClientState.AUTHED);
+ client.sendPacket(RestartResponse.valueOf(true));
+ CharSelectInfo cl = new CharSelectInfo(client.getAccountName(), (client.getSessionId()).playOkID1);
+ client.sendPacket(cl);
+ client.setCharSelection(cl.getCharInfo());
+ }
+ }
Index: java/L2jServer/Config.java
===================================================================
--- java/L2jServer/Config.java
+++ java/L2jServer/Config.java (Working L2j)
+// ===================================================================================================================================//
+
+ public static int ITEM_CHANGE_SKIN_COUNT;
+ public static int ITEM_CHANGE_SKIN_ID;
+
+// ============================================================
+ /** Change Skin Race **/
+
+ ITEM_CHANGE_SKIN_ID = Integer.parseInt(ExtraSettings.getProperty("ItemChangeSkinId", "11001"));
+ ITEM_CHANGE_SKIN_COUNT = Integer.parseInt(ExtraSettings.getProperty("ItemChangeSkinCount", "10"));
+
+ // ========================================================================================================================================== //
+
Index: java/L2jServer/gameserver/network/serverpackets/UserInfo.java
===================================================================
--- java/L2jServer/gameserver/network/serverpackets/UserInfo.java
+++ java/L2jServer/gameserver/network/serverpackets/UserInfo.java (Working L2j)
@@ -109,16 +109,27 @@
writeD(_activeChar.getObjectId());
writeS(_activeChar.getName());
- writeD(_activeChar.getRace().ordinal());
+ if (_activeChar.getCustomRaceSkin() == -1)
+ writeD(_activeChar.getRace().ordinal());
+ else
+ writeD(_activeChar.getCustomRaceSkin());
+ // writeD(_activeChar.getRace().ordinal());
+
writeD(_activeChar.getAppearance().getSex() ? 1 : 0);
- if (_activeChar.getClassIndex() == 0)
- {
- writeD(_activeChar.getClassId().getId());
- }
- else
- {
- writeD(_activeChar.getBaseClass());
- }
+ if (_activeChar.getCustomClassSkin() == -1)
+ {
+ if (_activeChar.getClassIndex() == 0)
+ {
+ writeD(_activeChar.getClassId().getId());
+ }
+ else
+ {
+ writeD(_activeChar.getBaseClass());
+ }
+ }
+ else
+ {
+ writeD(_activeChar.getCustomClassSkin());
+ }
writeD(_activeChar.getLevel());
@@ -243,8 +254,17 @@
}
else
{
- writeF(_activeChar.getBaseTemplate().collisionRadius);
- writeF(_activeChar.getBaseTemplate().collisionHeight);
+ if (_activeChar.getCustomRaceSkin() == -1)
+ {
+ writeF(_activeChar.getBaseTemplate().getCollisionRadius());
+ writeF(_activeChar.getBaseTemplate().getCollisionHeight());
+ }
+ else
+ {
+ writeF(_activeChar.getCustomSkinTemplate().getCollisionRadius());
+ writeF(_activeChar.getCustomSkinTemplate().getCollisionHeight());
+ }
+
}
writeD(_activeChar.getAppearance().getHairStyle());
Index: java/L2jServer/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/L2jServer/gameserver/model/actor/instance/L2PcInstance.java
+++ java/L2jServer/gameserver/model/actor/instance/L2PcInstance.java (Working L2j)
@@ -461,7 +461,7 @@
* =?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs =?,wantspeace=?,base_class =?,onlinetime=?,in_jail=?,jail_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date =?,lvl_joined_academy
* =?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=? ,char_name=?,death_penalty_level=?,good=?,evil=?,gve_kills=? WHERE obj_id=?.
*/
- private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,pc_point=?,name_color=?,title_color=?,aio=?,aio_end=? WHERE obj_id=?";
+ private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,newbie=?,nobless=?,power_grade=?,subpledge=?,last_recom_date=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,pc_point=?,name_color=?,title_color=?,aio=?,aio_end=?,custom_race_skin=?,custom_class_skin=? WHERE obj_id=?";
/**
* SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier,
@@ -478,7 +478,7 @@
*/"newbie, nobless, power_grade, subpledge, last_recom_date, lvl_joined_academy, apprentice, sponsor, varka_ketra_ally,clan_join_expiry_time,clan_create_expiry_time,death_penalty_level,pc_point" + /*
* ,
* banchat_time
- */",name_color,title_color,first_log,aio,aio_end FROM characters WHERE obj_id=?";
+ */",name_color,title_color,first_log,aio,aio_end,custom_race_skin,custom_class_skin FROM characters WHERE obj_id=?";
/** The Constant STATUS_DATA_GET. */
private static final String STATUS_DATA_GET = "SELECT hero, noble, donator, hero_end_date FROM characters_custom_data WHERE obj_Id = ?";
@@ -10140,6 +10140,10 @@
CursedWeaponsManager.getInstance().checkPlayer(player);
+ player.setCustomRaceSkin(rset.getInt("custom_race_skin"));
+ player.setCustomClassSkin(rset.getInt("custom_class_skin"));
+
+
player.setAllianceWithVarkaKetra(rset.getInt("varka_ketra_ally"));
player.setDeathPenaltyBuffLevel(rset.getInt("death_penalty_level"));
@@ -10627,8 +10631,11 @@
statement.setInt(60, isAio() ? 1 : 0);
statement.setLong(61, getAioEndTime());
- statement.setInt(62, getObjectId());
+ statement.setInt(62, getCustomRaceSkin());
+ statement.setInt(63, getCustomClassSkin());
+ statement.setInt(64, getObjectId());
+
statement.execute();
DatabaseUtils.close(statement);
statement = null;
@@ -14519,6 +14526,32 @@
sl = null;
}
+ public void setCustomClassSkin(int valor)
+ {
+ _customClassSkin = valor;
+ }
+
+ public void setCustomRaceSkin(int valor)
+ {
+ _customRaceSkin = valor;
+ }
+
+ public int getCustomClassSkin()
+ {
+ return _customClassSkin;
+ }
+
+ public int getCustomRaceSkin()
+ {
+ return _customRaceSkin;
+ }
+
+ public L2PcTemplate getCustomSkinTemplate()
+ {
+ return CharTemplateTable.getInstance().getTemplate(getCustomClassSkin());
+ }
+
+
/**
* 1. Add the specified class ID as a subclass (up to the maximum number of <b>three</b>) for this character.<BR>
* 2. This method no longer changes the active _classIndex of the player. This is only done by the calling of setActiveClass() method as that should be the only way to do so.
@@ -18934,7 +18967,9 @@
// open/close gates
@SuppressWarnings("synthetic-access")
private final GatesRequest _gatesRequest = new GatesRequest();
-
+ private int _customClassSkin = -1;
+ private int _customRaceSkin = -1;
+
private static class GatesRequest
{
private L2DoorInstance _target = null;
+ndex: java/L2jServer/gameserver/model/CharSelectInfoPackage.java
===================================================================
--- java/L2jServer/gameserver/model/CharSelectInfoPackage.java (revision 1132)
+++ java/L2jServer/gameserver/model/CharSelectInfoPackage.java (working copy)
@@ -50,6 +50,9 @@
private int _karma = 0;
private int _augmentationId = 0;
private int _accessLevel;
+ private int _customClassSkin = -1;
+ private int _customRaceSkin = -1;
+
/**
* @param objectId
@@ -309,4 +312,24 @@
{
_accessLevel = accessLevel;
}
+ public void setCustomClassSkin(int valor)
+ {
+ _customClassSkin = valor;
+ }
+
+ public void setCustomRaceSkin(int valor)
+ {
+ _customRaceSkin = valor;
+ }
+
+ public int getCustomClassSkin()
+ {
+ return _customClassSkin;
+ }
+
+ public int getCustomRaceSkin()
+ {
+ return _customRaceSkin;
+ }
+
}
Index: java/L2jServer/gameserver/network/serverpackets/CharInfo.java
===================================================================
--- java/L2jServer/gameserver/network/serverpackets/CharInfo.java (revision 1132)
+++ java/L2jServer/gameserver/network/serverpackets/CharInfo.java (working copy)
@@ -218,16 +218,21 @@
writeD(_heading);
writeD(_activeChar.getObjectId());
writeS(_activeChar.getName());
- writeD(_activeChar.getRace().ordinal());
+
+ if (_activeChar.getCustomRaceSkin() == -1)
+ writeD(_activeChar.getRace().ordinal());
+ else
+ writeD(_activeChar.getCustomRaceSkin());
+
writeD(_activeChar.getAppearance().getSex() ? 1 : 0);
- if (_activeChar.getClassIndex() == 0)
- {
- writeD(_activeChar.getClassId().getId());
- }
- else
- {
- writeD(_activeChar.getBaseClass());
- }
+ if (_activeChar.getCustomClassSkin() == -1)
+ {
+ if (_activeChar.getClassIndex() == 0)
+ {
+ writeD(_activeChar.getClassId().getId());
+ }
+ else
+ {
+ writeD(_activeChar.getBaseClass());
+ }
+ }
+ else
+ {
+ writeD(_activeChar.getCustomClassSkin());
+ }
writeD(_inv.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
@@ -286,8 +291,18 @@
writeD(_flyWalkSpd);
writeF(_activeChar.getMovementSpeedMultiplier()); // _activeChar.getProperMultiplier()
writeF(_activeChar.getAttackSpeedMultiplier()); // _activeChar.getAttackSpeedMultiplier()
- writeF(_activeChar.getBaseTemplate().collisionRadius);
- writeF(_activeChar.getBaseTemplate().collisionHeight);
+
+ if (_activeChar.getCustomRaceSkin() == -1)
+ {
+ writeF(_activeChar.getBaseTemplate().getCollisionRadius());
+ writeF(_activeChar.getBaseTemplate().getCollisionHeight());
+ }
+ else
+ {
+ writeF(_activeChar.getCustomSkinTemplate().getCollisionRadius());
+ writeF(_activeChar.getCustomSkinTemplate().getCollisionHeight());
+ }
+
writeD(_activeChar.getAppearance().getHairStyle());
writeD(_activeChar.getAppearance().getHairColor());
Debes de estar registrado para poder ver el contenido indicado. Registrate o ConectateBuenas, yo te puedo ayudar en el tema de edición de cliente. Tema npc efectos, transformaciones, Pet, angations,de cualquier crónica a interlude. Un saludo
diff --git a/config/CustomItemHandler/ItemHandler.properties
new file mode 100644
index 0000000..0ff21e6
--- /dev/null
+++ b/config/CustomItemHandler/ItemHandler.properties
@@ -0,0 +1,11 @@
+#=============================================================
+# Item Clean Pk
+#=============================================================
+#Item Clean PK ID
+Clean Pk ItemID = 0
+
+# ID of the anime skill when using the item
+SkillIDCleanPk = 5000
+
+#Clean Pk skill animation time
+SkillEffectsTimeCleanPK = 5000
diff --git a/java/L2jServer/Config.java b/java/L2jServer/Config.java
index f2336bb..77b1b0b 100644
--- a/java/L2jServer/Config.java
+++ b/java/L2jServer/Config.java
@@ -835,6 +835,9 @@
public static int CLAN_FULL_STATUS;
public static int CLAN_QUANTIDADE_ITEMFULL;
public static int ITEM_CLASS_ID;
+ public static int SEGUNDS_SKILL_ANIMATION_PK;
+ public static int SKILL_ID_PK;
+ public static int ITEM_PK_CLEANID;
// ============================================================
public static void loadItensCoin()
{
@@ -846,6 +849,9 @@
final InputStream is = new FileInputStream(new File(ITEM_HANDLER));
item.load(is);
is.close();
+ ITEM_PK_CLEANID = Integer.parseInt(item.getProperty("CleanPkItemID", "0"));
+ SKILL_ID_PK = Integer.parseInt(item.getProperty("SkillIDCleanPk", "0"));
+ SEGUNDS_SKILL_ANIMATION_PK = Integer.parseInt(item.getProperty("SkillEffectsTimeCleanPK", "0"));
ITEM_CLASS_ID = Integer.parseInt(ItemHandler.getProperty("ItemCard", "0"));
REWARD_ITEM_D = Integer.parseInt(ItemHandler.getProperty("ItemRewardGradeDCoinID", "0"));
COIN_ITEM_LEVEL = Integer.parseInt(ItemHandler.getProperty("ItemLevelCoinID", "5557"));
diff --git a/java/L2jServer/gameserver/handler/ItemHandler.java b/java/L2jServer/gameserver/handler/ItemHandler.java
index 63c3b34..3c3027d 100644
--- a/java/L2jServer/gameserver/handler/ItemHandler.java
+++ b/java/L2jServer/gameserver/handler/ItemHandler.java
@@ -42,6 +42,7 @@
import java/L2jServer.gameserver.handler.itemhandlers.ClanLevel;
import java/L2jServer.gameserver.handler.itemhandlers.ClanReputation;
import java/L2jServer.gameserver.handler.itemhandlers.ClassItem;
+import java/L2jServer.gameserver.handler.itemhandlers.CleanPk;
import java/L2jServer.gameserver.handler.itemhandlers.CrystalCarol;
import java/L2jServer.gameserver.handler.itemhandlers.Crystals;
import java/L2jServer.gameserver.handler.itemhandlers.CustomPotions;
@@ -136,6 +137,7 @@
private ItemHandler()
{
_datatable = new TreeMap<>();
+ registerItemHandler(new CleanPk());
registerItemHandler(new Skin1());
registerItemHandler(new Skin2());
registerItemHandler(new Skin3());
diff --git a/java/L2jServer/gameserver/handler/itemhandlers/CleanPk.java b/java/L2jServer/gameserver/handler/itemhandlers/CleanPk.java
new file mode 100644
index 0000000..0c7f435
--- /dev/null
+++ b/java/L2jServer/gameserver/handler/itemhandlers/CleanPk.java
@@ -0,0 +1,67 @@
+package java/L2jServer.gameserver.handler.itemhandlers;
+
+import java/L2jServer.Config;
+import java/L2jServer.gameserver.handler.IItemHandler;
+import java/L2jServer.gameserver.model.L2Object;
+import java/L2jServer.gameserver.model.actor.instance.L2ItemInstance;
+import java/L2jServer.gameserver.model.actor.instance.L2PcInstance;
+import java/L2jServer.gameserver.model.actor.instance.L2PlayableInstance;
+import java/L2jServer.gameserver.network.serverpackets.MagicSkillUser;
+import java/L2jServer.gameserver.network.serverpackets.SetupGauge;
+import java/L2jServer.gameserver.thread.ThreadPoolManager;
+import java/L2jServer.gameserver.util.Broadcast;
+
+/**
+ *
+ * @author Dwight
+ *
+ */
+public class CleanPk implements IItemHandler
+{
+ @Override
+ public void useItem(final L2PlayableInstance playable, final L2ItemInstance item)
+ {
+
+ if (!(playable instanceof L2PcInstance))
+ return;
+
+ L2PcInstance activeChar = (L2PcInstance)playable;
+
+ if (activeChar.getPkKills() < 5)
+ {
+ activeChar.sendMessage("You do not have enough Pk kills for clean.");
+ return;
+ }
+ if (activeChar.isImmobileUntilAttacked())
+ {
+ activeChar.sendMessage("You do use Item Mod Animation.");
+ return;
+ }
+ ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ playable.setIsImmobileUntilAttacked(false);
+ activeChar.setPkKills(0);
+ activeChar.sendMessage("You have successfully clean pks!");
+ activeChar.broadcastUserInfo();
+ }
+ }, Config.SEGUNDS_SKILL_ANIMATION_PK);
+ final L2Object oldTarget = playable.getTarget();
+ playable.setTarget(playable);
+ Broadcast.toSelfAndKnownPlayers(playable, new MagicSkillUser(playable, Config.SKILL_ID_PK, 1, Config.SEGUNDS_SKILL_ANIMATION_PK, 0));
+ playable.setTarget(oldTarget);
+ playable.sendPacket(new SetupGauge(0, Config.SEGUNDS_SKILL_ANIMATION_PK));
+ playable.setIsImmobileUntilAttacked(true);
+ }
+ @Override
+ public int[] getItemIds()
+ {
+ return ITEM_IDS;
+ }
+
+ private static final int ITEM_IDS[] = {
+ Config.ITEM_PK_CLEANID
+ };
+}
\ No newline at end of file