- r101 fixed error for friend memo (SQL).

- Fixed Awakening social action.
 - Implemented configs for awakening to skip or not Seize of Destiny quest and Scroll of Afterlife item.
 - Fixed mentee getting 2 letters with 2 headphones and fixed skill error, when adding mentee.
 - Implemented Change Attribute stone engine.
This commit is contained in:
erlandys56 2015-01-25 11:52:47 +00:00
parent effe7c4033
commit c38b542dda
19 changed files with 573 additions and 29 deletions

View File

@ -218,6 +218,14 @@ FeeDeleteTransferSkills = 10000000
# Default: 10000000
FeeDeleteSubClassSkills = 10000000
# Need Seize your destiny quest, to awaken
# Default: true
NeedSeizeYourDestinyForAwaken = false
# Need Scroll of Afterlife item to awaken
# Default: true
NeedScrollOfAfterlifeForAwaken = false
# ---------------------------------------------------------------------------
# Summons configuration
# ---------------------------------------------------------------------------
@ -389,6 +397,11 @@ EnchantChanceElementCrystal = 30
EnchantChanceElementJewel = 20
EnchantChanceElementEnergy = 10
# This controls the chance of an change element stone chance.
# This chance is in %, so if you set this to 100%, enchants will always succeed.
# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
ChangeChanceElement = 60
# List of non-enchantable items.
# Currently apprentice, travelers weapons and Pailaka items
# Default: 7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,13293,13294,13296

View File

@ -21,6 +21,7 @@ package ai.npc.AwakeningMaster;
import quests.Q10338_SeizeYourDestiny.Q10338_SeizeYourDestiny;
import ai.npc.AbstractNpcAI;
import com.l2jserver.Config;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.data.xml.impl.SkillTreesData;
import com.l2jserver.gameserver.enums.CategoryType;
@ -85,13 +86,14 @@ public final class AwakeningMaster extends AbstractNpcAI
{
return null;
}
String htmltext = null;
switch (event)
{
case "awakening":
{
final QuestState st2 = player.getQuestState(Q10338_SeizeYourDestiny.class.getSimpleName());
if (st.hasQuestItems(SCROLL_OF_AFTERLIFE) && (player.getLevel() > 84) && (!player.isSubClassActive() || player.isDualClassActive()) && player.isInCategory(CategoryType.FOURTH_CLASS_GROUP) && (st2 != null) && st2.isCompleted())
if ((!Config.NEED_SCROLL_OF_AFTERLIFE_FOR_AWAKEN || st.hasQuestItems(SCROLL_OF_AFTERLIFE)) && (player.getLevel() > 84) && (!player.isSubClassActive() || player.isDualClassActive()) && player.isInCategory(CategoryType.FOURTH_CLASS_GROUP) && (!Config.NEED_SEIZE_YOUR_DESTINY_FOR_AWAKEN || ((st2 != null) && st2.isCompleted())))
{
switch (npc.getId())
{
@ -192,11 +194,14 @@ public final class AwakeningMaster extends AbstractNpcAI
return;
}
final QuestState st = player.getQuestState(Q10338_SeizeYourDestiny.class.getSimpleName());
if ((st == null) || !st.isCompleted())
if (Config.NEED_SEIZE_YOUR_DESTINY_FOR_AWAKEN)
{
return;
final QuestState st = player.getQuestState(Q10338_SeizeYourDestiny.class.getSimpleName());
if ((st == null) || !st.isCompleted())
{
return;
}
}
if (player.isHero() || Hero.getInstance().isUnclaimedHero(player.getObjectId()))
@ -217,15 +222,18 @@ public final class AwakeningMaster extends AbstractNpcAI
return;
}
final L2ItemInstance item = player.getInventory().getItemByItemId(SCROLL_OF_AFTERLIFE);
if (item == null)
if (Config.NEED_SCROLL_OF_AFTERLIFE_FOR_AWAKEN)
{
return;
}
final L2ItemInstance item = player.getInventory().getItemByItemId(SCROLL_OF_AFTERLIFE);
if (item == null)
{
return;
}
if (!player.destroyItem("Awakening", item, player, true))
{
return;
if (!player.destroyItem("Awakening", item, player, true))
{
return;
}
}
for (ClassId newClass : player.getClassId().getNextClassIds())
@ -238,44 +246,36 @@ public final class AwakeningMaster extends AbstractNpcAI
player.sendPacket(ui);
player.broadcastInfo();
int socialId = 21; // Sigel
int itemId = ABELIUS_POWER; // Sigel
if (player.isInCategory(CategoryType.TYRR_GROUP))
{
socialId = 22;
itemId = SAPYROS_POWER;
}
else if (player.isInCategory(CategoryType.OTHELL_GROUP))
{
socialId = 23;
itemId = ASHAGEN_POWER;
}
else if (player.isInCategory(CategoryType.YUL_GROUP))
{
socialId = 24;
itemId = CRANIGG_POWER;
}
else if (player.isInCategory(CategoryType.FEOH_GROUP))
{
socialId = 25;
itemId = SOLTKREIG_POWER;
}
else if (player.isInCategory(CategoryType.ISS_GROUP))
{
socialId = 26;
itemId = NAVIAROPE_POWER;
}
else if (player.isInCategory(CategoryType.WYNN_GROUP))
{
socialId = 27;
itemId = LEISTER_POWER;
}
else if (player.isInCategory(CategoryType.AEORE_GROUP))
{
socialId = 28;
itemId = LAKCIS_POWER;
}
player.broadcastPacket(new SocialAction(player.getObjectId(), socialId));
player.broadcastPacket(new SocialAction(player.getObjectId(), 20));
giveItems(player, itemId, 1);
SkillTreesData.getInstance().cleanSkillUponAwakening(player);

View File

@ -197,7 +197,7 @@ public class MentorGuide extends AbstractNpcAI implements IXmlReader
event.getMentor().sendPacket(new ExMentorList(event.getMentor()));
// Add the mentee skill
event.getMentee().addSkill(MENTEE_MENTOR_SUMMON.getSkill(), true);
event.getMentee().addSkill(MENTEE_MENTOR_SUMMON.getSkill(), false);
// Send mail with the headphone
sendMail(event.getMentee(), MENTEE_ADDED_TITLE, MENTEE_ADDED_BODY, MENTEE_HEADPHONE, 1);

View File

@ -161,6 +161,7 @@ import handlers.itemhandlers.BlessedSpiritShot;
import handlers.itemhandlers.Book;
import handlers.itemhandlers.Bypass;
import handlers.itemhandlers.Calculator;
import handlers.itemhandlers.ChangeAttribute;
import handlers.itemhandlers.CharmOfCourage;
import handlers.itemhandlers.Elixir;
import handlers.itemhandlers.EnchantAttribute;
@ -464,6 +465,7 @@ public class MasterHandler
Book.class,
Bypass.class,
Calculator.class,
ChangeAttribute.class,
CharmOfCourage.class,
Elixir.class,
EnchantAttribute.class,

View File

@ -0,0 +1,55 @@
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package handlers.itemhandlers;
import com.l2jserver.gameserver.handler.IItemHandler;
import com.l2jserver.gameserver.model.actor.L2Playable;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.ExChangeAttributeItemList;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
/**
* @author Erlandys
*/
public class ChangeAttribute implements IItemHandler
{
@Override
public boolean useItem(L2Playable playable, L2ItemInstance item, boolean forceUse)
{
if (!(playable instanceof L2PcInstance))
{
return false;
}
final L2PcInstance activeChar = (L2PcInstance) playable;
if (activeChar.isCastingNow())
{
return false;
}
if (activeChar.isEnchanting())
{
activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CHANGING_ATTRIBUTES_IS_IN_PROGRESS_PLEASE_TRY_AGAIN_AFTER_ENDING_THE_PREVIOUS_TASK));
return false;
}
activeChar.setActiveEnchantAttrItemId(item.getId());
activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CHANGING_ATTRIBUTES_IS_IN_PROGRESS_PLEASE_TRY_AGAIN_AFTER_ENDING_THE_PREVIOUS_TASK));
activeChar.sendPacket(new ExChangeAttributeItemList(activeChar, item.getObjectId()));
return true;
}
}

View File

@ -16,6 +16,7 @@
<!-- Double-click to change the attribute of an S(S80) grade weapon that cannot be bound. Can be used when an S-grade weapon with a bestowed attribute exists in the inventory. Cannot be exchanged, dropped, sold in shops, or used in a private store. -->
<set name="icon" val="icon.change_elemental_crystal" />
<set name="is_stackable" val="true" />
<set name="handler" val="ChangeAttribute" />
</item>
<item id="33503" name="Hero's Blessed Buff Scroll" additionalName="" type="EtcItem">
<!-- When used, HP Recovery Bonus, Max MP, and Critical Atk. Rate + 20%, and you can feel the effects of Prophecy of Water, Might, Haste, Empower, Acumen, Wind Walk, Vampiric Rage, Berserker Spirit, Shield, Focus, Death Whisper, Guidance, Clarity, Wild Magic, and Concentration for 1 hour. -->

View File

@ -2,5 +2,6 @@ CREATE TABLE IF NOT EXISTS `character_friends` (
`charId` INT UNSIGNED NOT NULL DEFAULT 0,
`friendId` INT UNSIGNED NOT NULL DEFAULT 0,
`relation` INT UNSIGNED NOT NULL DEFAULT 0,
`memo` text,
PRIMARY KEY (`charId`,`friendId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@ -665,6 +665,8 @@ public final class Config
public static String[] BOTREPORT_RESETPOINT_HOUR;
public static long BOTREPORT_REPORT_DELAY;
public static boolean BOTREPORT_ALLOW_REPORTS_FROM_SAME_CLAN_MEMBERS;
public static boolean NEED_SEIZE_YOUR_DESTINY_FOR_AWAKEN;
public static boolean NEED_SCROLL_OF_AFTERLIFE_FOR_AWAKEN;
// --------------------------------------------------
// FloodProtector Settings
@ -1080,6 +1082,7 @@ public final class Config
public static double ENCHANT_CHANCE_ELEMENT_CRYSTAL;
public static double ENCHANT_CHANCE_ELEMENT_JEWEL;
public static double ENCHANT_CHANCE_ELEMENT_ENERGY;
public static int CHANGE_CHANCE_ELEMENT;
public static int[] ENCHANT_BLACKLIST;
public static int AUGMENTATION_NG_SKILL_CHANCE;
public static int AUGMENTATION_NG_GLOW_CHANCE;
@ -1629,6 +1632,7 @@ public final class Config
ENCHANT_CHANCE_ELEMENT_CRYSTAL = Character.getDouble("EnchantChanceElementCrystal", 30);
ENCHANT_CHANCE_ELEMENT_JEWEL = Character.getDouble("EnchantChanceElementJewel", 20);
ENCHANT_CHANCE_ELEMENT_ENERGY = Character.getDouble("EnchantChanceElementEnergy", 10);
CHANGE_CHANCE_ELEMENT = Character.getInt("ChangeChanceElement", 60);
String[] notenchantable = Character.getString("EnchantBlackList", "7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,13293,13294,13296").split(",");
ENCHANT_BLACKLIST = new int[notenchantable.length];
for (int i = 0; i < notenchantable.length; i++)
@ -1807,6 +1811,8 @@ public final class Config
PLAYER_MOVEMENT_BLOCK_TIME = Character.getInt("NpcTalkBlockingTime", 0) * 1000;
ABILITY_MAX_POINTS = Character.getInt("AbilityMaxPoints", 16);
ABILITY_POINTS_RESET_ADENA = Character.getLong("AbilityPointsResetAdena", 10_000_000);
NEED_SEIZE_YOUR_DESTINY_FOR_AWAKEN = Character.getBoolean("NeedSeizeYourDestinyForAwaken", true);
NEED_SCROLL_OF_AFTERLIFE_FOR_AWAKEN = Character.getBoolean("NeedScrollOfAfterlifeForAwaken", true);
// Load Telnet L2Properties file (if exists)
final PropertiesParser telnetSettings = new PropertiesParser(TELNET_FILE);

View File

@ -15044,7 +15044,11 @@ public final class L2PcInstance extends L2Playable
{
return _vitPoints;
}
return getSubClasses().get(getClassIndex()).getVitalityPoints();
if (getSubClasses().containsKey(getClassIndex()))
{
return getSubClasses().get(getClassIndex()).getVitalityPoints();
}
return _vitPoints;
}
public void setVitalityPoints(int points)
@ -15054,6 +15058,10 @@ public final class L2PcInstance extends L2Playable
_vitPoints = points;
return;
}
getSubClasses().get(getClassIndex()).setVitalityPoints(points);
if (getSubClasses().containsKey(getClassIndex()))
{
getSubClasses().get(getClassIndex()).setVitalityPoints(points);
}
_vitPoints = points;
}
}

View File

@ -1153,6 +1153,36 @@ public final class L2ItemInstance extends L2Object
}
}
public void changeAttribute(byte element, int value)
{
if (_elementals == null)
{
_elementals = new Elementals[1];
_elementals[0] = new Elementals(element, value);
}
else
{
Elementals elm = getElemental(element);
if (elm != null)
{
elm.setValue(value);
}
else
{
_elementals = new Elementals[1];
_elementals[0] = new Elementals(element, value);
}
}
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
updateItemElements(con);
}
catch (SQLException e)
{
_log.log(Level.SEVERE, "Could not update elementals for item: " + this + " from DB:", e);
}
}
/**
* Add elemental attribute to item and save to db
* @param element

View File

@ -1401,13 +1401,13 @@ public final class L2GamePacketHandler implements IPacketHandler<L2GameClient>,
// msg = new RequestHardWareInfo(); (SddddddSddddddddddSS)
break;
case 0xB0:
// msg = new SendChangeAttributeTargetItem();
msg = new SendChangeAttributeTargetItem();
break;
case 0xB1:
// msg = new RequestChangeAttributeItem();
msg = new RequestChangeAttributeItem();
break;
case 0xB2:
// msg = new RequestChangeAttributeCancel();
msg = new RequestChangeAttributeCancel();
break;
case 0xB3:
// msg = new RequestBR_PresentBuyProduct();

View File

@ -0,0 +1,48 @@
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.clientpackets;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
/**
* @author Erlandys
*/
public class RequestChangeAttributeCancel extends L2GameClientPacket
{
private static final String _C__D0_B7_SENDCHANGEATTRIBUTETARGETITEM = "[C] D0:B7 RequestChangeAttributeCancel";
@Override
protected void readImpl()
{
}
@Override
protected void runImpl()
{
L2PcInstance player = getClient().getActiveChar();
if (player == null)
{
return;
}
player.setActiveEnchantAttrItemId(0);
}
@Override
public String getType()
{
return _C__D0_B7_SENDCHANGEATTRIBUTETARGETITEM;
}
}

View File

@ -0,0 +1,133 @@
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.clientpackets;
import com.l2jserver.Config;
import com.l2jserver.gameserver.enums.PrivateStoreType;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.ExChangeAttributeFail;
import com.l2jserver.gameserver.network.serverpackets.ExChangeAttributeItemList;
import com.l2jserver.gameserver.network.serverpackets.ExChangeAttributeOk;
import com.l2jserver.gameserver.network.serverpackets.ExStorageMaxCount;
import com.l2jserver.gameserver.network.serverpackets.InventoryUpdate;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.gameserver.network.serverpackets.UserInfo;
import com.l2jserver.util.Rnd;
/**
* @author Erlandys
*/
public class RequestChangeAttributeItem extends L2GameClientPacket
{
private static final String _C__D0_B7_SENDCHANGEATTRIBUTETARGETITEM = "[C] D0:B7 SendChangeAttributeTargetItem";
private int _attributeOID, _itemOID, _newAttributeID;
@Override
protected void readImpl()
{
_attributeOID = readD();
_itemOID = readD();
_newAttributeID = readD();
}
@Override
protected void runImpl()
{
L2PcInstance player = getClient().getActiveChar();
if (player == null)
{
return;
}
L2ItemInstance item = player.getInventory().getItemByObjectId(_itemOID);
if (player.getPrivateStoreType() != PrivateStoreType.NONE)
{
player.sendPacket(SystemMessageId.YOU_CANNOT_CHANGE_AN_ATTRIBUTE_WHILE_USING_A_PRIVATE_STORE_OR_WORKSHOP);
return;
}
if (player.getActiveTradeList() != null)
{
player.sendPacket(SystemMessageId.YOU_CANNOT_CHANGE_ATTRIBUTES_WHILE_EXCHANGING);
return;
}
if (!item.isWeapon())
{
player.setActiveEnchantAttrItemId(0);
player.sendPacket(new ExChangeAttributeItemList(player, _attributeOID));
return;
}
if (_newAttributeID == -1)
{
player.setActiveEnchantAttrItemId(0);
player.sendPacket(new ExChangeAttributeItemList(player, _attributeOID));
return;
}
L2ItemInstance attribute = player.getInventory().getItemByObjectId(_attributeOID);
player.getInventory().destroyItem("ChangingAttribute", _attributeOID, 1, player, null);
if (Rnd.get(100) < Config.CHANGE_CHANCE_ELEMENT)
{
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_S_S2_ATTRIBUTE_HAS_SUCCESSFULLY_CHANGED_TO_S3_ATTRIBUTE);
sm.addItemName(item);
sm.addElemental(item.getAttackElementType());
sm.addElemental(_newAttributeID);
item.changeAttribute((byte) _newAttributeID, item.getAttackElementPower());
if (item.isEquipped())
{
item.updateElementAttrBonus(player);
}
player.sendPacket(sm);
player.sendPacket(new ExChangeAttributeOk());
player.sendPacket(new UserInfo(player));
}
else
{
player.sendPacket(new ExChangeAttributeFail());
player.sendPacket(SystemMessageId.CHANGING_ATTRIBUTES_HAS_BEEN_FAILED);
}
// send packets
player.sendPacket(new ExStorageMaxCount(player));
InventoryUpdate iu = new InventoryUpdate();
iu.addModifiedItem(item);
if (player.getInventory().getItemByObjectId(_attributeOID) == null)
{
iu.addRemovedItem(attribute);
}
else
{
iu.addModifiedItem(attribute);
}
player.sendPacket(iu);
player.setActiveEnchantAttrItemId(0);
}
@Override
public String getType()
{
return _C__D0_B7_SENDCHANGEATTRIBUTETARGETITEM;
}
}

View File

@ -0,0 +1,59 @@
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.clientpackets;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.network.serverpackets.ExChangeAttributeInfo;
/**
* @author Erlandys
*/
public class SendChangeAttributeTargetItem extends L2GameClientPacket
{
private static final String _C__D0_B0_SENDCHANGEATTRIBUTETARGETITEM = "[C] D0:B0 SendChangeAttributeTargetItem";
int _elementOID;
int _itemOID;
@Override
protected void readImpl()
{
_elementOID = readD();
_itemOID = readD();
}
@Override
protected void runImpl()
{
L2PcInstance player = getClient().getActiveChar();
if (player == null)
{
return;
}
L2ItemInstance item = player.getInventory().getItemByObjectId(_itemOID);
if (item == null)
{
return;
}
player.sendPacket(new ExChangeAttributeInfo(_elementOID, _itemOID, item.getAttackElementType()));
}
@Override
public String getType()
{
return _C__D0_B0_SENDCHANGEATTRIBUTETARGETITEM;
}
}

View File

@ -85,7 +85,7 @@ public class ConfirmMenteeAdd extends L2GameClientPacket
MentorManager.getInstance().addMentor(mentor.getObjectId(), mentee.getObjectId());
// Notify to scripts
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeAdd(mentor, mentee), mentor, mentee);
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerMenteeAdd(mentor, mentee), mentee);
mentor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.FROM_NOW_ON_S1_WILL_BE_YOUR_MENTEE).addCharName(mentee));
mentor.sendPacket(new ExMentorList(mentor));

View File

@ -0,0 +1,32 @@
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.serverpackets;
/**
* @author Erlandys
*/
public class ExChangeAttributeFail extends L2GameServerPacket
{
public ExChangeAttributeFail()
{
}
@Override
protected void writeImpl()
{
writeC(0xFE);
writeH(0x116);
}
}

View File

@ -0,0 +1,62 @@
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.serverpackets;
/**
* @author Erlandys
*/
public class ExChangeAttributeInfo extends L2GameServerPacket
{
private final int itemOID;
private final int attributeOID;
private final int attributes;
public ExChangeAttributeInfo(int _attributeOID, int _itemOID, int _attribute)
{
itemOID = _itemOID;
attributeOID = _attributeOID;
switch (_attribute)
{
case 0:
attributes = -2;
break;
case 1:
attributes = -3;
break;
case 2:
attributes = -5;
break;
case 3:
attributes = -9;
break;
case 4:
attributes = -17;
break;
default:
attributes = -33;
break;
}
}
@Override
protected void writeImpl()
{
writeC(0xFE);
writeH(0x114);
writeD(attributeOID);
writeD(attributes);
}
}

View File

@ -0,0 +1,62 @@
/*
* Copyright (C) 2004-2015 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.serverpackets;
import java.util.ArrayList;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
/**
* @author Erlandys
*/
public class ExChangeAttributeItemList extends AbstractItemPacket
{
private final ArrayList<L2ItemInstance> _itemsList;
private final int _itemOID;
public ExChangeAttributeItemList(L2PcInstance player, int itemOID)
{
_itemsList = new ArrayList<>();
for (L2ItemInstance item : player.getInventory().getItems())
{
if (item.isWeapon())
{
if (item.getAttackElementPower() > 0)
{
_itemsList.add(item);
}
}
}
_itemOID = itemOID;
}
@Override
protected void writeImpl()
{
writeC(0xFE);
writeH(0x113);
writeD(_itemOID);
writeD(_itemsList.size());
for (L2ItemInstance item : _itemsList)
{
writeItem(item);
}
}
}

View File

@ -0,0 +1,32 @@
/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.serverpackets;
/**
* @author Erlandys
*/
public class ExChangeAttributeOk extends L2GameServerPacket
{
public ExChangeAttributeOk()
{
}
@Override
protected void writeImpl()
{
writeC(0xFE);
writeH(0x115);
}
}