- 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:
parent
effe7c4033
commit
c38b542dda
13
trunk/dist/game/config/Character.properties
vendored
13
trunk/dist/game/config/Character.properties
vendored
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
if (!player.destroyItem("Awakening", item, player, true))
|
||||
{
|
||||
return;
|
||||
final L2ItemInstance item = player.getInventory().getItemByItemId(SCROLL_OF_AFTERLIFE);
|
||||
if (item == null)
|
||||
{
|
||||
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);
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
55
trunk/dist/game/data/scripts/handlers/itemhandlers/ChangeAttribute.java
vendored
Normal file
55
trunk/dist/game/data/scripts/handlers/itemhandlers/ChangeAttribute.java
vendored
Normal 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;
|
||||
}
|
||||
}
|
@ -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. -->
|
||||
|
@ -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;
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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));
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user