Initial changes.
This commit is contained in:
@@ -300,7 +300,6 @@ public class Config
|
||||
public static int[][] PARTY_XP_CUTOFF_GAPS;
|
||||
public static int[] PARTY_XP_CUTOFF_GAP_PERCENTS;
|
||||
public static boolean DISABLE_TUTORIAL;
|
||||
public static boolean EXPERTISE_PENALTY;
|
||||
public static boolean STORE_RECIPE_SHOPLIST;
|
||||
public static boolean STORE_UI_SETTINGS;
|
||||
public static String[] FORBIDDEN_NAMES;
|
||||
@@ -1905,7 +1904,6 @@ public class Config
|
||||
PARTY_XP_CUTOFF_GAP_PERCENTS[i] = Integer.parseInt(percents[i]);
|
||||
}
|
||||
DISABLE_TUTORIAL = Character.getBoolean("DisableTutorial", false);
|
||||
EXPERTISE_PENALTY = Character.getBoolean("ExpertisePenalty", true);
|
||||
STORE_RECIPE_SHOPLIST = Character.getBoolean("StoreRecipeShopList", false);
|
||||
STORE_UI_SETTINGS = Character.getBoolean("StoreCharUiSettings", true);
|
||||
FORBIDDEN_NAMES = Character.getString("ForbiddenNames", "").split(",");
|
||||
|
@@ -99,6 +99,7 @@ import org.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SkillTreesData;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SpawnsData;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.StaticObjectData;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.TeleportListData;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.TeleportersData;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.TransformData;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.VariationData;
|
||||
@@ -345,6 +346,7 @@ public class GameServer
|
||||
printSection("Cache");
|
||||
HtmCache.getInstance();
|
||||
CrestTable.getInstance();
|
||||
TeleportListData.getInstance();
|
||||
TeleportersData.getInstance();
|
||||
MatchingRoomManager.getInstance();
|
||||
PetitionManager.getInstance();
|
||||
|
@@ -0,0 +1,87 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* 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 org.l2jmobius.gameserver.data.xml.impl;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.gameserver.model.StatsSet;
|
||||
import org.l2jmobius.gameserver.model.holders.TeleportListHolder;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
*/
|
||||
public class TeleportListData implements IXmlReader
|
||||
{
|
||||
private static Logger LOGGER = Logger.getLogger(TeleportListData.class.getName());
|
||||
private final List<TeleportListHolder> _teleports = new ArrayList<>();
|
||||
private int _teleportsCount = 0;
|
||||
|
||||
protected TeleportListData()
|
||||
{
|
||||
load();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load()
|
||||
{
|
||||
_teleports.clear();
|
||||
parseDatapackFile("data/TeleportListData.xml");
|
||||
_teleportsCount = _teleports.size();
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _teleportsCount + " teleports.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseDocument(Document doc, File f)
|
||||
{
|
||||
forEach(doc, "list", listNode -> forEach(listNode, "teleport", teleportNode ->
|
||||
{
|
||||
final StatsSet set = new StatsSet(parseAttributes(teleportNode));
|
||||
final int tpId = set.getInt("id");
|
||||
final int x = set.getInt("x");
|
||||
final int y = set.getInt("y");
|
||||
final int z = set.getInt("z");
|
||||
final int tpPrice = set.getInt("price");
|
||||
_teleports.add(new TeleportListHolder(tpId, x, y, z, tpPrice));
|
||||
}));
|
||||
}
|
||||
|
||||
public List<TeleportListHolder> getTeleports()
|
||||
{
|
||||
return _teleports;
|
||||
}
|
||||
|
||||
public int getTeleportsCount()
|
||||
{
|
||||
return _teleportsCount;
|
||||
}
|
||||
|
||||
public static TeleportListData getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final TeleportListData INSTANCE = new TeleportListData();
|
||||
}
|
||||
}
|
@@ -41,15 +41,17 @@ public enum UserInfoType implements IUpdateTypeComponent
|
||||
ATK_ELEMENTAL(0x0E, 5),
|
||||
CLAN(0x0F, 32),
|
||||
|
||||
SOCIAL(0x10, 22),
|
||||
VITA_FAME(0x11, 15),
|
||||
SLOTS(0x12, 9),
|
||||
SOCIAL(0x10, 30),
|
||||
VITA_FAME(0x11, 19),
|
||||
SLOTS(0x12, 12),
|
||||
MOVEMENTS(0x13, 4),
|
||||
COLOR(0x14, 10),
|
||||
INVENTORY_LIMIT(0x15, 9),
|
||||
INVENTORY_LIMIT(0x15, 13),
|
||||
TRUE_HERO(0x16, 9),
|
||||
|
||||
ATT_SPIRITS(0x17, 26);
|
||||
ATT_SPIRITS(0x17, 26),
|
||||
|
||||
UNKNOWN_196(0x18, 6);
|
||||
|
||||
/** Int mask. */
|
||||
private final int _mask;
|
||||
|
@@ -2700,7 +2700,6 @@ public abstract class Creature extends WorldObject implements ISkillsHolder, IDe
|
||||
{
|
||||
final PlayerInstance player = getActingPlayer();
|
||||
player.refreshOverloaded(true);
|
||||
player.refreshExpertisePenalty();
|
||||
sendPacket(info);
|
||||
|
||||
if (broadcastFull)
|
||||
|
@@ -46,7 +46,6 @@ import java.util.stream.Collectors;
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.concurrent.ThreadPool;
|
||||
import org.l2jmobius.commons.database.DatabaseFactory;
|
||||
import org.l2jmobius.commons.util.CommonUtil;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.GameTimeController;
|
||||
import org.l2jmobius.gameserver.ItemsAutoDestroy;
|
||||
@@ -238,7 +237,6 @@ import org.l2jmobius.gameserver.model.items.Weapon;
|
||||
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import org.l2jmobius.gameserver.model.items.type.ActionType;
|
||||
import org.l2jmobius.gameserver.model.items.type.ArmorType;
|
||||
import org.l2jmobius.gameserver.model.items.type.CrystalType;
|
||||
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
|
||||
import org.l2jmobius.gameserver.model.items.type.WeaponType;
|
||||
import org.l2jmobius.gameserver.model.matching.MatchingRoom;
|
||||
@@ -696,10 +694,6 @@ public class PlayerInstance extends Playable
|
||||
private int _createItemLevel;
|
||||
private int _createCommonItemLevel;
|
||||
private ItemGrade _crystallizeGrade = ItemGrade.NONE;
|
||||
private CrystalType _expertiseLevel = CrystalType.NONE;
|
||||
private int _expertiseArmorPenalty = 0;
|
||||
private int _expertiseWeaponPenalty = 0;
|
||||
private int _expertisePenaltyBonus = 0;
|
||||
|
||||
private final Map<Class<? extends AbstractRequest>, AbstractRequest> _requests = new ConcurrentHashMap<>();
|
||||
|
||||
@@ -2029,26 +2023,6 @@ public class PlayerInstance extends Playable
|
||||
broadcastReputation();
|
||||
}
|
||||
|
||||
public int getExpertiseArmorPenalty()
|
||||
{
|
||||
return _expertiseArmorPenalty;
|
||||
}
|
||||
|
||||
public int getExpertiseWeaponPenalty()
|
||||
{
|
||||
return _expertiseWeaponPenalty;
|
||||
}
|
||||
|
||||
public int getExpertisePenaltyBonus()
|
||||
{
|
||||
return _expertisePenaltyBonus;
|
||||
}
|
||||
|
||||
public void setExpertisePenaltyBonus(int bonus)
|
||||
{
|
||||
_expertisePenaltyBonus = bonus;
|
||||
}
|
||||
|
||||
public int getWeightPenalty()
|
||||
{
|
||||
return _dietMode ? 0 : _curWeightPenalty;
|
||||
@@ -2108,69 +2082,6 @@ public class PlayerInstance extends Playable
|
||||
}
|
||||
}
|
||||
|
||||
public void refreshExpertisePenalty()
|
||||
{
|
||||
if (!Config.EXPERTISE_PENALTY)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final CrystalType expertiseLevel = _expertiseLevel.plusLevel(_expertisePenaltyBonus);
|
||||
|
||||
int armorPenalty = 0;
|
||||
int weaponPenalty = 0;
|
||||
|
||||
for (ItemInstance item : _inventory.getPaperdollItems(item -> (item != null) && ((item.getItemType() != EtcItemType.ARROW) && (item.getItemType() != EtcItemType.BOLT)) && item.getItem().getCrystalType().isGreater(expertiseLevel)))
|
||||
{
|
||||
if (item.isArmor())
|
||||
{
|
||||
// Armor penalty level increases depending on amount of penalty armors equipped, not grade level difference.
|
||||
armorPenalty = CommonUtil.constrain(armorPenalty + 1, 0, 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Weapon penalty level increases based on grade difference.
|
||||
weaponPenalty = CommonUtil.constrain(item.getItem().getCrystalType().getLevel() - expertiseLevel.getLevel(), 0, 4);
|
||||
}
|
||||
}
|
||||
|
||||
boolean changed = false;
|
||||
|
||||
if ((_expertiseWeaponPenalty != weaponPenalty) || (getSkillLevel(CommonSkill.WEAPON_GRADE_PENALTY.getId()) != weaponPenalty))
|
||||
{
|
||||
_expertiseWeaponPenalty = weaponPenalty;
|
||||
if (_expertiseWeaponPenalty > 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(CommonSkill.WEAPON_GRADE_PENALTY.getId(), _expertiseWeaponPenalty));
|
||||
}
|
||||
else
|
||||
{
|
||||
removeSkill(CommonSkill.WEAPON_GRADE_PENALTY.getId(), true);
|
||||
}
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if ((_expertiseArmorPenalty != armorPenalty) || (getSkillLevel(CommonSkill.ARMOR_GRADE_PENALTY.getId()) != armorPenalty))
|
||||
{
|
||||
_expertiseArmorPenalty = armorPenalty;
|
||||
if (_expertiseArmorPenalty > 0)
|
||||
{
|
||||
addSkill(SkillData.getInstance().getSkill(CommonSkill.ARMOR_GRADE_PENALTY.getId(), _expertiseArmorPenalty));
|
||||
}
|
||||
else
|
||||
{
|
||||
removeSkill(CommonSkill.ARMOR_GRADE_PENALTY.getId(), true);
|
||||
}
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (changed)
|
||||
{
|
||||
sendSkillList(); // Update expertise penalty icon in skill list.
|
||||
sendPacket(new EtcStatusUpdate(this));
|
||||
}
|
||||
}
|
||||
|
||||
public void useEquippableItem(ItemInstance item, boolean abortAttack)
|
||||
{
|
||||
// Equip or unEquip
|
||||
@@ -2238,8 +2149,6 @@ public class PlayerInstance extends Playable
|
||||
}
|
||||
}
|
||||
|
||||
refreshExpertisePenalty();
|
||||
|
||||
broadcastUserInfo();
|
||||
|
||||
final InventoryUpdate iu = new InventoryUpdate();
|
||||
@@ -6372,7 +6281,6 @@ public class PlayerInstance extends Playable
|
||||
public void updateAndBroadcastStatus(int broadcastType)
|
||||
{
|
||||
refreshOverloaded(true);
|
||||
refreshExpertisePenalty();
|
||||
// Send a Server->Client packet UserInfo to this PlayerInstance and CharInfo to all PlayerInstance in its _KnownPlayers (broadcast)
|
||||
if (broadcastType == 1)
|
||||
{
|
||||
@@ -6810,9 +6718,6 @@ public class PlayerInstance extends Playable
|
||||
// Update the overloaded status of the PlayerInstance
|
||||
player.refreshOverloaded(false);
|
||||
|
||||
// Update the expertise status of the PlayerInstance
|
||||
player.refreshExpertisePenalty();
|
||||
|
||||
player.restoreFriendList();
|
||||
|
||||
player.loadRecommendations();
|
||||
@@ -9998,7 +9903,6 @@ public class PlayerInstance extends Playable
|
||||
}
|
||||
|
||||
refreshOverloaded(true);
|
||||
refreshExpertisePenalty();
|
||||
broadcastUserInfo();
|
||||
|
||||
// Clear resurrect xp calculation
|
||||
@@ -10368,20 +10272,6 @@ public class PlayerInstance extends Playable
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Expertise of the PlayerInstance (None=0, D=1, C=2, B=3, A=4, S=5, S80=6, S84=7, R=8, R95=9, R99=10)
|
||||
* @return CrystalTyperepresenting expertise level..
|
||||
*/
|
||||
public CrystalType getExpertiseLevel()
|
||||
{
|
||||
return _expertiseLevel;
|
||||
}
|
||||
|
||||
public void setExpertiseLevel(CrystalType crystalType)
|
||||
{
|
||||
_expertiseLevel = crystalType != null ? crystalType : CrystalType.NONE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void teleToLocation(ILocational loc, boolean allowRandomOffset)
|
||||
{
|
||||
|
@@ -287,8 +287,6 @@ public class PlayerStat extends PlayableStat
|
||||
getActiveChar().broadcastStatusUpdate();
|
||||
// Update the overloaded status of the PlayerInstance
|
||||
getActiveChar().refreshOverloaded(true);
|
||||
// Update the expertise status of the PlayerInstance
|
||||
getActiveChar().refreshExpertisePenalty();
|
||||
// Send a Server->Client packet UserInfo to the PlayerInstance
|
||||
getActiveChar().sendPacket(new UserInfo(getActiveChar()));
|
||||
// Send acquirable skill list
|
||||
|
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* 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 org.l2jmobius.gameserver.model.holders;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
*/
|
||||
public class TeleportListHolder
|
||||
{
|
||||
private final int _locId;
|
||||
private final int _x;
|
||||
private final int _y;
|
||||
private final int _z;
|
||||
private final int _price;
|
||||
|
||||
public TeleportListHolder(int locId, int x, int y, int z, int price)
|
||||
{
|
||||
_locId = locId;
|
||||
_x = x;
|
||||
_y = y;
|
||||
_z = z;
|
||||
_price = price;
|
||||
}
|
||||
|
||||
public int getLocId()
|
||||
{
|
||||
return _locId;
|
||||
}
|
||||
|
||||
public int getX()
|
||||
{
|
||||
return _x;
|
||||
}
|
||||
|
||||
public int getY()
|
||||
{
|
||||
return _y;
|
||||
}
|
||||
|
||||
public int getZ()
|
||||
{
|
||||
return _z;
|
||||
}
|
||||
|
||||
public int getPrice()
|
||||
{
|
||||
return _price;
|
||||
}
|
||||
}
|
@@ -462,13 +462,6 @@ public abstract class Inventory extends ItemContainer
|
||||
}
|
||||
|
||||
final PlayerInstance player = (PlayerInstance) inventory.getOwner();
|
||||
|
||||
// Any items equipped that result in expertise penalty do not give any skills at all.
|
||||
if (item.getItem().getCrystalType().isGreater(player.getExpertiseLevel()))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final AtomicBoolean update = new AtomicBoolean();
|
||||
final AtomicBoolean updateTimestamp = new AtomicBoolean();
|
||||
|
||||
@@ -1549,10 +1542,6 @@ public abstract class Inventory extends ItemContainer
|
||||
try
|
||||
{
|
||||
unEquipItemInSlot(slot);
|
||||
if (getOwner().isPlayer())
|
||||
{
|
||||
((PlayerInstance) getOwner()).refreshExpertisePenalty();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -1682,15 +1671,7 @@ public abstract class Inventory extends ItemContainer
|
||||
}
|
||||
if (pdollSlot >= 0)
|
||||
{
|
||||
final ItemInstance old = setPaperdollItem(pdollSlot, null);
|
||||
if (old != null)
|
||||
{
|
||||
if (getOwner().isPlayer())
|
||||
{
|
||||
((PlayerInstance) getOwner()).refreshExpertisePenalty();
|
||||
}
|
||||
}
|
||||
return old;
|
||||
return setPaperdollItem(pdollSlot, null);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -2123,7 +2104,7 @@ public abstract class Inventory extends ItemContainer
|
||||
case 1:
|
||||
{
|
||||
// 4 Balance Artifact Equip
|
||||
if ((item.getId() >= 48969) && (item.getId() <= 48985))
|
||||
if (((item.getId() >= 48969) && (item.getId() <= 48985)) || ((item.getId() >= 80656) && (item.getId() <= 80662)))
|
||||
{
|
||||
for (int i = PAPERDOLL_ARTIFACT1; i < (PAPERDOLL_ARTIFACT1 + 4); i++)
|
||||
{
|
||||
@@ -2136,7 +2117,7 @@ public abstract class Inventory extends ItemContainer
|
||||
}
|
||||
|
||||
// 1 Spirit Artifact Equip
|
||||
if ((item.getId() >= 48957) && (item.getId() <= 48960))
|
||||
if (((item.getId() >= 48957) && (item.getId() <= 48960)) || ((item.getId() >= 80647) && (item.getId() <= 80649)))
|
||||
{
|
||||
for (int i = PAPERDOLL_ARTIFACT13; i < (PAPERDOLL_ARTIFACT13 + 1); i++)
|
||||
{
|
||||
@@ -2149,7 +2130,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
}
|
||||
// 1 Protection Artifact Equip
|
||||
if ((item.getId() >= 48961) && (item.getId() <= 48964))
|
||||
if (((item.getId() >= 48961) && (item.getId() <= 48964)) || ((item.getId() >= 80650) && (item.getId() <= 80652)))
|
||||
{
|
||||
for (int i = PAPERDOLL_ARTIFACT16; i < (PAPERDOLL_ARTIFACT16 + 1); i++)
|
||||
{
|
||||
@@ -2162,7 +2143,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
}
|
||||
// 1 Support Artifact Equip
|
||||
if ((item.getId() >= 48965) && (item.getId() <= 48968))
|
||||
if (((item.getId() >= 48965) && (item.getId() <= 48968)) || ((item.getId() >= 80653) && (item.getId() <= 80655)))
|
||||
{
|
||||
for (int i = PAPERDOLL_ARTIFACT19; i < (PAPERDOLL_ARTIFACT19 + 1); i++)
|
||||
{
|
||||
@@ -2179,7 +2160,7 @@ public abstract class Inventory extends ItemContainer
|
||||
case 2:
|
||||
{
|
||||
// 8 Balance Artifact Equip
|
||||
if ((item.getId() >= 48969) && (item.getId() <= 48985))
|
||||
if (((item.getId() >= 48969) && (item.getId() <= 48985)) || ((item.getId() >= 80656) && (item.getId() <= 80662)))
|
||||
{
|
||||
for (int i = PAPERDOLL_ARTIFACT1; i < (PAPERDOLL_ARTIFACT1 + 8); i++)
|
||||
{
|
||||
@@ -2192,7 +2173,7 @@ public abstract class Inventory extends ItemContainer
|
||||
}
|
||||
|
||||
// 2 Spirit Artifact Equip
|
||||
if ((item.getId() >= 48957) && (item.getId() <= 48960))
|
||||
if (((item.getId() >= 48957) && (item.getId() <= 48960)) || ((item.getId() >= 80647) && (item.getId() <= 80649)))
|
||||
{
|
||||
for (int i = PAPERDOLL_ARTIFACT13; i < (PAPERDOLL_ARTIFACT13 + 2); i++)
|
||||
{
|
||||
@@ -2205,7 +2186,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
}
|
||||
// 2 Protection Artifact Equip
|
||||
if ((item.getId() >= 48961) && (item.getId() <= 48964))
|
||||
if (((item.getId() >= 48961) && (item.getId() <= 48964)) || ((item.getId() >= 80650) && (item.getId() <= 80652)))
|
||||
{
|
||||
for (int i = PAPERDOLL_ARTIFACT16; i < (PAPERDOLL_ARTIFACT16 + 2); i++)
|
||||
{
|
||||
@@ -2218,7 +2199,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
}
|
||||
// 2 Support Artifact Equip
|
||||
if ((item.getId() >= 48965) && (item.getId() <= 48968))
|
||||
if (((item.getId() >= 48965) && (item.getId() <= 48968)) || ((item.getId() >= 80653) && (item.getId() <= 80655)))
|
||||
{
|
||||
for (int i = PAPERDOLL_ARTIFACT19; i < (PAPERDOLL_ARTIFACT19 + 2); i++)
|
||||
{
|
||||
@@ -2235,7 +2216,7 @@ public abstract class Inventory extends ItemContainer
|
||||
case 3:
|
||||
{
|
||||
// 12 Balance Artifact Equip
|
||||
if ((item.getId() >= 48969) && (item.getId() <= 48985))
|
||||
if (((item.getId() >= 48969) && (item.getId() <= 48985)) || ((item.getId() >= 80656) && (item.getId() <= 80662)))
|
||||
{
|
||||
for (int i = PAPERDOLL_ARTIFACT1; i < (PAPERDOLL_ARTIFACT1 + 12); i++)
|
||||
{
|
||||
@@ -2248,7 +2229,7 @@ public abstract class Inventory extends ItemContainer
|
||||
}
|
||||
|
||||
// 3 Spirit Artifact Equip
|
||||
if ((item.getId() >= 48957) && (item.getId() <= 48960))
|
||||
if (((item.getId() >= 48957) && (item.getId() <= 48960)) || ((item.getId() >= 80647) && (item.getId() <= 80649)))
|
||||
{
|
||||
for (int i = PAPERDOLL_ARTIFACT13; i < (PAPERDOLL_ARTIFACT13 + 3); i++)
|
||||
{
|
||||
@@ -2261,7 +2242,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
}
|
||||
// 3 Protection Artifact Equip
|
||||
if ((item.getId() >= 48961) && (item.getId() <= 48964))
|
||||
if (((item.getId() >= 48961) && (item.getId() <= 48964)) || ((item.getId() >= 80650) && (item.getId() <= 80652)))
|
||||
{
|
||||
for (int i = PAPERDOLL_ARTIFACT16; i < (PAPERDOLL_ARTIFACT16 + 3); i++)
|
||||
{
|
||||
@@ -2274,7 +2255,7 @@ public abstract class Inventory extends ItemContainer
|
||||
|
||||
}
|
||||
// 3 Support Artifact Equip
|
||||
if ((item.getId() >= 48965) && (item.getId() <= 48968))
|
||||
if (((item.getId() >= 48965) && (item.getId() <= 48968)) || ((item.getId() >= 80653) && (item.getId() <= 80655)))
|
||||
{
|
||||
for (int i = PAPERDOLL_ARTIFACT19; i < (PAPERDOLL_ARTIFACT19 + 3); i++)
|
||||
{
|
||||
|
@@ -349,118 +349,134 @@ public enum ExIncomingPackets implements IIncomingPackets<GameClient>
|
||||
REQUEST_STOP_MOVE(0xED, RequestStopMove::new, ConnectionState.IN_GAME),
|
||||
REQUEST_ABILITY_WND_OPEN(0xEE, RequestAbilityWndOpen::new, ConnectionState.IN_GAME),
|
||||
REQUEST_ABILITY_WND_CLOSE(0xEF, RequestAbilityWndClose::new, ConnectionState.IN_GAME),
|
||||
EX_PC_CAFE_REQUEST_OPEN_WINDOW_WITHOUT_NPC(0xF0, ExPCCafeRequestOpenWindowWithoutNPC::new, ConnectionState.IN_GAME),
|
||||
REQUEST_LUCKY_GAME_START_INFO(0xF1, RequestLuckyGameStartInfo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_LUCKY_GAME_PLAY(0xF2, RequestLuckyGamePlay::new, ConnectionState.IN_GAME),
|
||||
NOTIFY_TRAINING_ROOM_END(0xF3, NotifyTrainingRoomEnd::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_PUSH_ONE(0xF4, RequestNewEnchantPushOne::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_REMOVE_ONE(0xF5, RequestNewEnchantRemoveOne::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_PUSH_TWO(0xF6, RequestNewEnchantPushTwo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_REMOVE_TWO(0xF7, RequestNewEnchantRemoveTwo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_CLOSE(0xF8, RequestNewEnchantClose::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_TRY(0xF9, RequestNewEnchantTry::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_RETRY_TO_PUT_ITEMS(0xFA, RequestNewEnchantRetryToPutItems::new, ConnectionState.IN_GAME),
|
||||
REQUEST_TARGET_ACTION_MENU(0xFE, RequestTargetActionMenu::new, ConnectionState.IN_GAME),
|
||||
EX_SEND_SELECTED_QUEST_ZONE_ID(0xFF, ExSendSelectedQuestZoneID::new, ConnectionState.IN_GAME),
|
||||
REQUEST_ALCHEMY_SKILL_LIST(0x100, RequestAlchemySkillList::new, ConnectionState.IN_GAME),
|
||||
REQUEST_ALCHEMY_TRY_MIX_CUBE(0x101, RequestAlchemyTryMixCube::new, ConnectionState.IN_GAME),
|
||||
REQUEST_ALCHEMY_CONVERSION(0x102, RequestAlchemyConversion::new, ConnectionState.IN_GAME),
|
||||
SEND_EXECUTED_UI_EVENTS_COUNT(0x103, null, ConnectionState.IN_GAME),
|
||||
EX_SEND_CLIENT_INI(0x104, null, ConnectionState.AUTHENTICATED),
|
||||
REQUEST_EX_AUTO_FISH(0x105, ExRequestAutoFish::new, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_ATTENDANCE_ITEM_LIST(0x106, RequestVipAttendanceItemList::new, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_ATTENDANCE_CHECK(0x107, RequestVipAttendanceCheck::new, ConnectionState.IN_GAME),
|
||||
REQUEST_ITEM_ENSOUL(0x108, RequestItemEnsoul::new, ConnectionState.IN_GAME),
|
||||
REQUEST_CASTLE_WAR_SEASON_REWARD(0x109, null, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_PRODUCT_LIST(0x10A, null, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_LUCKY_GAME_INFO(0x10B, null, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_LUCKY_GAME_ITEM_LIST(0x10C, null, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_LUCKY_GAME_BONUS(0x10D, null, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_VIP_INFO(0x10E, null, ConnectionState.IN_GAME),
|
||||
REQUEST_CAPTCHA_ANSWER(0x10F, null, ConnectionState.IN_GAME),
|
||||
REQUEST_REFRESH_CAPTCHA_IMAGE(0x110, null, ConnectionState.IN_GAME),
|
||||
REQUEST_PLEDGE_SIGN_IN_FOR_OPEN_JOINING_METHOD(0x111, RequestPledgeSignInForOpenJoiningMethod::new, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_MATCH_ARENA(0x112, null, ConnectionState.IN_GAME),
|
||||
EX_CONFIRM_MATCH_ARENA(0x113, null, ConnectionState.IN_GAME),
|
||||
EX_CANCEL_MATCH_ARENA(0x114, null, ConnectionState.IN_GAME),
|
||||
EX_CHANGE_CLASS_ARENA(0x115, null, ConnectionState.IN_GAME),
|
||||
EX_CONFIRM_CLASS_ARENA(0x116, null, ConnectionState.IN_GAME),
|
||||
REQUEST_OPEN_DECO_NPCUI(0x117, null, ConnectionState.IN_GAME),
|
||||
REQUEST_CHECK_AGIT_DECO_AVAILABILITY(0x118, null, ConnectionState.IN_GAME),
|
||||
REQUEST_USER_FACTION_INFO(0x119, RequestUserFactionInfo::new, ConnectionState.IN_GAME),
|
||||
EX_EXIT_ARENA(0x11A, null, ConnectionState.IN_GAME),
|
||||
REQUEST_EVENT_BALTHUS_TOKEN(0x11B, null, ConnectionState.IN_GAME),
|
||||
REQUEST_PARTY_MATCHING_HISTORY(0x11C, null, ConnectionState.IN_GAME),
|
||||
EX_ARENA_CUSTOM_NOTIFICATION(0x11D, null, ConnectionState.IN_GAME),
|
||||
REQUEST_TODO_LIST(0x11E, null, ConnectionState.IN_GAME),
|
||||
REQUEST_TODO_LIST_HTML(0x11F, null, ConnectionState.IN_GAME),
|
||||
REQUEST_ONE_DAY_REWARD_RECEIVE(0x120, null, ConnectionState.IN_GAME),
|
||||
REQUEST_QUEUE_TICKET(0x121, null, ConnectionState.IN_GAME),
|
||||
REQUEST_PLEDGE_BONUS_OPEN(0x122, RequestPledgeBonusOpen::new, ConnectionState.IN_GAME),
|
||||
REQUEST_PLEDGE_BONUS_REWARD_LIST(0x123, RequestPledgeBonusRewardList::new, ConnectionState.IN_GAME),
|
||||
REQUEST_PLEDGE_BONUS_REWARD(0x124, RequestPledgeBonusReward::new, ConnectionState.IN_GAME),
|
||||
REQUEST_SSO_AUTHN_TOKEN(0x125, null, ConnectionState.IN_GAME),
|
||||
REQUEST_QUEUE_TICKET_LOGIN(0x126, null, ConnectionState.IN_GAME),
|
||||
REQUEST_BLOCK_MEMO_INFO(0x127, null, ConnectionState.IN_GAME),
|
||||
REQUEST_TRY_EN_SOUL_EXTRACTION(0x128, RequestTryEnSoulExtraction::new, ConnectionState.IN_GAME),
|
||||
REQUEST_RAIDBOSS_SPAWN_INFO(0x129, RequestRaidBossSpawnInfo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_RAID_SERVER_INFO(0x12A, RequestRaidServerInfo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_SHOW_AGIT_SIEGE_INFO(0x12B, null, ConnectionState.IN_GAME),
|
||||
REQUEST_ITEM_AUCTION_STATUS(0x12C, null, ConnectionState.IN_GAME),
|
||||
REQUEST_MONSTER_BOOK_OPEN(0x12D, RequestMonsterBookOpen::new, ConnectionState.IN_GAME),
|
||||
REQUEST_MONSTER_BOOK_CLOSE(0x12E, RequestMonsterBookClose::new, ConnectionState.IN_GAME),
|
||||
REQUEST_MONSTER_BOOK_REWARD(0x12F, RequestMonsterBookReward::new, ConnectionState.IN_GAME),
|
||||
EXREQUEST_MATCH_GROUP(0x130, null, ConnectionState.IN_GAME),
|
||||
EXREQUEST_MATCH_GROUP_ASK(0x131, null, ConnectionState.IN_GAME),
|
||||
EXREQUEST_MATCH_GROUP_ANSWER(0x132, null, ConnectionState.IN_GAME),
|
||||
EXREQUEST_MATCH_GROUP_WITHDRAW(0x133, null, ConnectionState.IN_GAME),
|
||||
EXREQUEST_MATCH_GROUP_OUST(0x134, null, ConnectionState.IN_GAME),
|
||||
EXREQUEST_MATCH_GROUP_CHANGE_MASTER(0x135, null, ConnectionState.IN_GAME),
|
||||
REQUEST_UPGRADE_SYSTEM_RESULT(0x136, RequestUpgradeSystemResult::new, ConnectionState.IN_GAME),
|
||||
EX_CARD_UPDOWN_PICK_NUMB(0x137, null, ConnectionState.IN_GAME),
|
||||
EX_CARD_UPDOWN_GAME_REWARD_REQUEST(0x138, null, ConnectionState.IN_GAME),
|
||||
EX_CARD_UPDOWN_GAME_RETRY(0x139, null, ConnectionState.IN_GAME),
|
||||
EX_CARD_UPDOWN_GAME_QUIT(0x13A, null, ConnectionState.IN_GAME),
|
||||
EX_ARENA_RANK_ALL(0x13B, null, ConnectionState.IN_GAME),
|
||||
EX_ARENA_MYRANK(0x13C, null, ConnectionState.IN_GAME),
|
||||
EX_SWAP_AGATHION_SLOT_ITEMS(0x13D, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_CONTRIBUTION_RANK(0x13E, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_CONTRIBUTION_INFO(0x13F, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_CONTRIBUTION_REWARD(0x140, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_LEVEL_UP(0x141, RequestExPledgeLevelUp::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_INFO(0x142, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_REWARD(0x143, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_INFO(0x144, RequestExPledgeMasteryInfo::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_SET(0x145, RequestExPledgeMasterySet::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_RESET(0x146, RequestExPledgeMasteryReset::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_SKILL_INFO(0x147, RequestExPledgeSkillInfo::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_SKILL_ACTIVATE(0x148, RequestExPledgeSkillActivate::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_ITEM_LIST(0x149, RequestExPledgeItemList::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_ITEM_ACTIVATE(0x14A, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_ANNOUNCE(0x14B, RequestExPledgeAnnounce::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_ANNOUNCE_SET(0x14C, null, ConnectionState.IN_GAME),
|
||||
EX_CREATE_PLEDGE(0x14D, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_ITEM_INFO(0x14E, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_ITEM_BUY(0x14F, RequestExPledgeItemBuy::new, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_INFO(0x150, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_EXTRACT_INFO(0x151, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_EXTRACT(0x152, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_EVOLUTION_INFO(0x153, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_EVOLUTION(0x154, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_SET_TALENT(0x155, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_INIT_TALENT(0x156, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_ABSORB_INFO(0x157, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_ABSORB(0x158, null, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_LOCKED_ITEM(0x159, null, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_UNLOCKED_ITEM(0x15A, null, ConnectionState.IN_GAME),
|
||||
EX_LOCKED_ITEM_CANCEL(0x15B, null, ConnectionState.IN_GAME),
|
||||
EX_UNLOCKED_ITEM_CANCEL(0x15C, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_CHANGE_TYPE(0x15D, null, ConnectionState.IN_GAME), // 152
|
||||
REQUEST_BLOCK_LIST_FOR_AD(0x15E, null, ConnectionState.IN_GAME),
|
||||
REQUEST_USER_BAN_INFO(0x15F, null, ConnectionState.IN_GAME),
|
||||
EX_INTERACT_MODIFY(0x160, null, ConnectionState.IN_GAME), // 152
|
||||
EX_TRY_ENCHANT_ARTIFACT(0x161, null, ConnectionState.IN_GAME), // 152
|
||||
EX_XIGN_CODE(0x162, null, ConnectionState.IN_GAME); // 152
|
||||
REQUEST_LUCKY_GAME_START_INFO(0xF0, RequestLuckyGameStartInfo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_LUCKY_GAME_PLAY(0xF1, RequestLuckyGamePlay::new, ConnectionState.IN_GAME),
|
||||
NOTIFY_TRAINING_ROOM_END(0xF2, NotifyTrainingRoomEnd::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_PUSH_ONE(0xF3, RequestNewEnchantPushOne::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_REMOVE_ONE(0xF4, RequestNewEnchantRemoveOne::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_PUSH_TWO(0xF5, RequestNewEnchantPushTwo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_REMOVE_TWO(0xF6, RequestNewEnchantRemoveTwo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_CLOSE(0xF7, RequestNewEnchantClose::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_TRY(0xF8, RequestNewEnchantTry::new, ConnectionState.IN_GAME),
|
||||
REQUEST_NEW_ENCHANT_RETRY_TO_PUT_ITEMS(0xF9, RequestNewEnchantRetryToPutItems::new, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_CARD_REWARD_LIST(0xFA, null, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_ACCOUNT_ATTENDANCE_INFO(0xFB, null, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_ACCOUNT_ATTENDANCE_REWARD(0xFC, null, ConnectionState.IN_GAME),
|
||||
REQUEST_TARGET_ACTION_MENU(0xFD, RequestTargetActionMenu::new, ConnectionState.IN_GAME),
|
||||
EX_SEND_SELECTED_QUEST_ZONE_ID(0xFE, ExSendSelectedQuestZoneID::new, ConnectionState.IN_GAME),
|
||||
REQUEST_ALCHEMY_SKILL_LIST(0xFF, RequestAlchemySkillList::new, ConnectionState.IN_GAME),
|
||||
REQUEST_ALCHEMY_TRY_MIX_CUBE(0x100, RequestAlchemyTryMixCube::new, ConnectionState.IN_GAME),
|
||||
REQUEST_ALCHEMY_CONVERSION(0x101, RequestAlchemyConversion::new, ConnectionState.IN_GAME),
|
||||
SEND_EXECUTED_UI_EVENTS_COUNT(0x102, null, ConnectionState.IN_GAME),
|
||||
EX_SEND_CLIENT_INI(0x103, null, ConnectionState.AUTHENTICATED),
|
||||
REQUEST_EX_AUTO_FISH(0x104, ExRequestAutoFish::new, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_ATTENDANCE_ITEM_LIST(0x105, RequestVipAttendanceItemList::new, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_ATTENDANCE_CHECK(0x106, RequestVipAttendanceCheck::new, ConnectionState.IN_GAME),
|
||||
REQUEST_ITEM_ENSOUL(0x107, RequestItemEnsoul::new, ConnectionState.IN_GAME),
|
||||
REQUEST_CASTLE_WAR_SEASON_REWARD(0x108, null, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_PRODUCT_LIST(0x109, null, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_LUCKY_GAME_INFO(0x10A, null, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_LUCKY_GAME_ITEM_LIST(0x10B, null, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_LUCKY_GAME_BONUS(0x10C, null, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_VIP_INFO(0x10D, null, ConnectionState.IN_GAME),
|
||||
REQUEST_CAPTCHA_ANSWER(0x10E, null, ConnectionState.IN_GAME),
|
||||
REQUEST_REFRESH_CAPTCHA_IMAGE(0x10F, null, ConnectionState.IN_GAME),
|
||||
REQUEST_PLEDGE_SIGN_IN_FOR_OPEN_JOINING_METHOD(0x110, RequestPledgeSignInForOpenJoiningMethod::new, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_MATCH_ARENA(0x111, null, ConnectionState.IN_GAME),
|
||||
EX_CONFIRM_MATCH_ARENA(0x112, null, ConnectionState.IN_GAME),
|
||||
EX_CANCEL_MATCH_ARENA(0x113, null, ConnectionState.IN_GAME),
|
||||
EX_CHANGE_CLASS_ARENA(0x114, null, ConnectionState.IN_GAME),
|
||||
EX_CONFIRM_CLASS_ARENA(0x115, null, ConnectionState.IN_GAME),
|
||||
REQUEST_OPEN_DECO_NPCUI(0x116, null, ConnectionState.IN_GAME),
|
||||
REQUEST_CHECK_AGIT_DECO_AVAILABILITY(0x117, null, ConnectionState.IN_GAME),
|
||||
REQUEST_USER_FACTION_INFO(0x118, RequestUserFactionInfo::new, ConnectionState.IN_GAME),
|
||||
EX_EXIT_ARENA(0x119, null, ConnectionState.IN_GAME),
|
||||
REQUEST_EVENT_BALTHUS_TOKEN(0x11A, null, ConnectionState.IN_GAME),
|
||||
REQUEST_PARTY_MATCHING_HISTORY(0x11B, null, ConnectionState.IN_GAME),
|
||||
EX_ARENA_CUSTOM_NOTIFICATION(0x11C, null, ConnectionState.IN_GAME),
|
||||
REQUEST_TODO_LIST(0x11D, null, ConnectionState.IN_GAME),
|
||||
REQUEST_TODO_LIST_HTML(0x11E, null, ConnectionState.IN_GAME),
|
||||
REQUEST_ONE_DAY_REWARD_RECEIVE(0x11F, null, ConnectionState.IN_GAME),
|
||||
REQUEST_QUEUE_TICKET(0x120, null, ConnectionState.IN_GAME),
|
||||
REQUEST_PLEDGE_BONUS_OPEN(0x121, RequestPledgeBonusOpen::new, ConnectionState.IN_GAME),
|
||||
REQUEST_PLEDGE_BONUS_REWARD_LIST(0x122, RequestPledgeBonusRewardList::new, ConnectionState.IN_GAME),
|
||||
REQUEST_PLEDGE_BONUS_REWARD(0x123, RequestPledgeBonusReward::new, ConnectionState.IN_GAME),
|
||||
REQUEST_SSO_AUTHN_TOKEN(0x124, null, ConnectionState.IN_GAME),
|
||||
REQUEST_QUEUE_TICKET_LOGIN(0x125, null, ConnectionState.IN_GAME),
|
||||
REQUEST_BLOCK_MEMO_INFO(0x126, null, ConnectionState.IN_GAME),
|
||||
REQUEST_TRY_EN_SOUL_EXTRACTION(0x127, RequestTryEnSoulExtraction::new, ConnectionState.IN_GAME),
|
||||
REQUEST_RAIDBOSS_SPAWN_INFO(0x128, RequestRaidBossSpawnInfo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_RAID_SERVER_INFO(0x129, RequestRaidServerInfo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_SHOW_AGIT_SIEGE_INFO(0x12A, null, ConnectionState.IN_GAME),
|
||||
REQUEST_ITEM_AUCTION_STATUS(0x12B, null, ConnectionState.IN_GAME),
|
||||
REQUEST_MONSTER_BOOK_OPEN(0x12C, RequestMonsterBookOpen::new, ConnectionState.IN_GAME),
|
||||
REQUEST_MONSTER_BOOK_CLOSE(0x12D, RequestMonsterBookClose::new, ConnectionState.IN_GAME),
|
||||
REQUEST_MONSTER_BOOK_REWARD(0x12E, RequestMonsterBookReward::new, ConnectionState.IN_GAME),
|
||||
EXREQUEST_MATCH_GROUP(0x12F, null, ConnectionState.IN_GAME),
|
||||
EXREQUEST_MATCH_GROUP_ASK(0x130, null, ConnectionState.IN_GAME),
|
||||
EXREQUEST_MATCH_GROUP_ANSWER(0x131, null, ConnectionState.IN_GAME),
|
||||
EXREQUEST_MATCH_GROUP_WITHDRAW(0x132, null, ConnectionState.IN_GAME),
|
||||
EXREQUEST_MATCH_GROUP_OUST(0x133, null, ConnectionState.IN_GAME),
|
||||
EXREQUEST_MATCH_GROUP_CHANGE_MASTER(0x134, null, ConnectionState.IN_GAME),
|
||||
REQUEST_UPGRADE_SYSTEM_RESULT(0x135, RequestUpgradeSystemResult::new, ConnectionState.IN_GAME),
|
||||
EX_CARD_UPDOWN_PICK_NUMB(0x136, null, ConnectionState.IN_GAME),
|
||||
EX_CARD_UPDOWN_GAME_REWARD_REQUEST(0x137, null, ConnectionState.IN_GAME),
|
||||
EX_CARD_UPDOWN_GAME_RETRY(0x138, null, ConnectionState.IN_GAME),
|
||||
EX_CARD_UPDOWN_GAME_QUIT(0x139, null, ConnectionState.IN_GAME),
|
||||
EX_ARENA_RANK_ALL(0x13A, null, ConnectionState.IN_GAME),
|
||||
EX_ARENA_MYRANK(0x13B, null, ConnectionState.IN_GAME),
|
||||
EX_SWAP_AGATHION_SLOT_ITEMS(0x13C, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_CONTRIBUTION_RANK(0x13D, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_CONTRIBUTION_INFO(0x13E, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_CONTRIBUTION_REWARD(0x13F, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_LEVEL_UP(0x140, RequestExPledgeLevelUp::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_INFO(0x141, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MISSION_REWARD(0x142, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_INFO(0x143, RequestExPledgeMasteryInfo::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_SET(0x144, RequestExPledgeMasterySet::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_MASTERY_RESET(0x145, RequestExPledgeMasteryReset::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_SKILL_INFO(0x146, RequestExPledgeSkillInfo::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_SKILL_ACTIVATE(0x147, RequestExPledgeSkillActivate::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_ITEM_LIST(0x148, RequestExPledgeItemList::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_ITEM_ACTIVATE(0x149, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_ANNOUNCE(0x14A, RequestExPledgeAnnounce::new, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_ANNOUNCE_SET(0x14B, null, ConnectionState.IN_GAME),
|
||||
EX_CREATE_PLEDGE(0x14C, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_ITEM_INFO(0x14D, null, ConnectionState.IN_GAME),
|
||||
EX_PLEDGE_ITEM_BUY(0x14E, RequestExPledgeItemBuy::new, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_INFO(0x14F, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_EXTRACT_INFO(0x150, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_EXTRACT(0x151, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_EVOLUTION_INFO(0x152, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_EVOLUTION(0x153, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_SET_TALENT(0x154, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_INIT_TALENT(0x155, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_ABSORB_INFO(0x156, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_ABSORB(0x157, null, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_LOCKED_ITEM(0x158, null, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_UNLOCKED_ITEM(0x159, null, ConnectionState.IN_GAME),
|
||||
EX_LOCKED_ITEM_CANCEL(0x15A, null, ConnectionState.IN_GAME),
|
||||
EX_UNLOCKED_ITEM_CANCEL(0x15B, null, ConnectionState.IN_GAME),
|
||||
EX_ELEMENTAL_SPIRIT_CHANGE_TYPE(0x15C, null, ConnectionState.IN_GAME), // 152
|
||||
REQUEST_BLOCK_LIST_FOR_AD(0x15D, null, ConnectionState.IN_GAME),
|
||||
REQUEST_USER_BAN_INFO(0x15E, null, ConnectionState.IN_GAME),
|
||||
EX_INTERACT_MODIFY(0x15F, null, ConnectionState.IN_GAME), // 152
|
||||
EX_TRY_ENCHANT_ARTIFACT(0x160, null, ConnectionState.IN_GAME), // 152
|
||||
EX_XIGN_CODE(0x161, null, ConnectionState.IN_GAME), // 152
|
||||
EX_OPEN_HTML(0x164, null, ConnectionState.IN_GAME), // 228
|
||||
EX_REQUEST_CLASS_CHANGE(0x165, null, ConnectionState.IN_GAME), // 228
|
||||
EX_REQUEST_CLASS_CHANGE_VERIFYING(0x166, null, ConnectionState.IN_GAME), // 228
|
||||
EX_REQUEST_TELEPORT(0x167, ExRequestTeleport::new, ConnectionState.IN_GAME), // 228
|
||||
EX_COSTUME_COLLECTION_SKILL_ACTIVE(0x16B, null, ConnectionState.IN_GAME), // 228
|
||||
REQUEST_AUTO_USE_POTION(0x171, null, ConnectionState.IN_GAME), // 228
|
||||
REQUEST_AUTO_USE(0x177, null, ConnectionState.IN_GAME), // 228
|
||||
EX_TIME_RESTRICT_FIELD_LIST(0x17F, null, ConnectionState.IN_GAME), // 228
|
||||
EX_TIME_RESTRICT_FIELD_USER_ENTER(0x180, null, ConnectionState.IN_GAME), // 228
|
||||
EX_RANKING_CHAR_INFO(0x181, null, ConnectionState.IN_GAME), // 228
|
||||
EX_RANKING_CHAR_HISTORY(0x182, null, ConnectionState.IN_GAME), // 228
|
||||
EX_RANKING_CHAR_RANKERS(0x183, null, ConnectionState.IN_GAME), // 228
|
||||
EX_MERCENARY_CASTLEWAR_CASTLE_SIEGE_ATTACKER_LIST(0x186, null, ConnectionState.IN_GAME), // 228
|
||||
EX_LETTER_COLLECTOR_TAKE_REWARD(0x18D, null, ConnectionState.IN_GAME); // 228
|
||||
|
||||
public static final ExIncomingPackets[] PACKET_ARRAY;
|
||||
|
||||
|
@@ -796,7 +796,13 @@ public enum OutgoingPackets
|
||||
EX_USER_BAN_INFO(0xFE, 0x201),
|
||||
EX_TRY_ENCHANT_ARTIFACT_RESULT(0xFE, 0x202), // 152
|
||||
EX_XIGN_CODE(0xFE, 0x203), // 152
|
||||
EX_MAX(0xFE, 0x204); // 152
|
||||
EX_MAX(0xFE, 0x204), // 152
|
||||
EX_COIN_COUNT(0xFE, 0x209), // 228
|
||||
EX_SEND_COSTUME_LIST(0xFE, 0x20F), // 228
|
||||
EX_COSTUME_SHORTCUT_LIST(0xFE, 0x215), // 228
|
||||
EX_AUTOPLAY_SETTING(0xFE, 0x221), // 228
|
||||
EX_UNK_225(0xFE, 0x225), // 228
|
||||
EX_MERCENARY_CASTLEWAR_CASTLE_SIEGE_HUD_INFO(0xFE, 0x235); // 228
|
||||
|
||||
private final int _id1;
|
||||
private final int _id2;
|
||||
|
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.TeleportListData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.holders.TeleportListHolder;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
*/
|
||||
public class ExRequestTeleport implements IClientIncomingPacket
|
||||
{
|
||||
private int _locId;
|
||||
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
_locId = packet.readD();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
final PlayerInstance player = client.getPlayer();
|
||||
if (player == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
boolean success = false;
|
||||
|
||||
for (TeleportListHolder teleport : TeleportListData.getInstance().getTeleports())
|
||||
{
|
||||
if (teleport.getLocId() == _locId)
|
||||
{
|
||||
if (player.getAdena() < teleport.getPrice())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_ENOUGH_ADENA);
|
||||
return;
|
||||
}
|
||||
|
||||
player.reduceAdena("teleport", teleport.getPrice(), player, true);
|
||||
player.teleToLocation(teleport.getX(), teleport.getY(), teleport.getZ());
|
||||
success = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!success)
|
||||
{
|
||||
LOGGER.info("No registered teleport location for id: " + _locId);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
*/
|
||||
public class RequestAutoUse implements IClientIncomingPacket
|
||||
{
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
int unk1 = packet.readC(); // C - true. This is summary amount of next data received.
|
||||
LOGGER.info("received packet RequestAutoUse with unk1:" + unk1);
|
||||
int unk2 = packet.readC();
|
||||
LOGGER.info("and unk2: " + unk2);
|
||||
int unk3 = packet.readC(); // Can target mobs, that attacked by other players?
|
||||
LOGGER.info("and unk3: " + unk3);
|
||||
int unk4 = packet.readC(); // Auto pickup?
|
||||
LOGGER.info("and unk4: " + unk4);
|
||||
int unk5 = packet.readC();
|
||||
LOGGER.info("and unk5: " + unk5);
|
||||
int unk6 = packet.readC();
|
||||
LOGGER.info("and unk6: " + unk6);
|
||||
int unk7 = packet.readC(); // short range :1; long: 0
|
||||
LOGGER.info("and unk7: " + unk7);
|
||||
int unk8 = packet.readC(); // received 51 when logged in game...
|
||||
LOGGER.info("and unk8: " + unk8);
|
||||
int unk9 = packet.readC();
|
||||
LOGGER.info("and unk9: " + unk9);
|
||||
int unk10 = packet.readC();
|
||||
LOGGER.info("and unk10: " + unk10);
|
||||
int unk11 = packet.readC();
|
||||
LOGGER.info("and unk11: " + unk11);
|
||||
int unk12 = packet.readC(); // enable/ disable?
|
||||
LOGGER.info("and unk12: " + unk12);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
}
|
||||
}
|
@@ -37,6 +37,7 @@ import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.EnchantResult;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExItemAnnounce;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
||||
@@ -230,13 +231,14 @@ public class RequestEnchantItem implements IClientIncomingPacket
|
||||
// announce the success
|
||||
final int minEnchantAnnounce = item.isArmor() ? 6 : 7;
|
||||
final int maxEnchantAnnounce = item.isArmor() ? 0 : 15;
|
||||
if ((item.getEnchantLevel() == minEnchantAnnounce) || (item.getEnchantLevel() == maxEnchantAnnounce))
|
||||
if ((item.getEnchantLevel() >= minEnchantAnnounce) || (item.getEnchantLevel() == maxEnchantAnnounce))
|
||||
{
|
||||
final SystemMessage sm = new SystemMessage(SystemMessageId.C1_HAS_SUCCESSFULLY_ENCHANTED_A_S2_S3);
|
||||
sm.addString(player.getName());
|
||||
sm.addInt(item.getEnchantLevel());
|
||||
sm.addItemName(item);
|
||||
player.broadcastPacket(sm);
|
||||
player.broadcastPacket(new ExItemAnnounce(item));
|
||||
|
||||
final Skill skill = CommonSkill.FIREWORK.getSkill();
|
||||
if (skill != null)
|
||||
|
@@ -46,7 +46,7 @@ public class RequestShortCutDel implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
|
||||
if ((_page > 19) || (_page < 0))
|
||||
if ((_page > 23) || (_page < 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@@ -40,6 +40,7 @@ public class RequestShortCutReg implements IClientIncomingPacket
|
||||
final int slot = packet.readD();
|
||||
_slot = slot % 12;
|
||||
_page = slot / 12;
|
||||
packet.readC(); // 228
|
||||
_id = packet.readD();
|
||||
_lvl = packet.readH();
|
||||
_subLvl = packet.readH(); // Sublevel
|
||||
@@ -50,7 +51,7 @@ public class RequestShortCutReg implements IClientIncomingPacket
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
if ((client.getPlayer() == null) || (_page > 19) || (_page < 0))
|
||||
if ((client.getPlayer() == null) || (_page > 23) || (_page < 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@@ -16,10 +16,6 @@
|
||||
*/
|
||||
package org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.instancemanager.CastleManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.FortManager;
|
||||
@@ -31,25 +27,18 @@ import org.l2jmobius.gameserver.model.entity.Fort;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
|
||||
/**
|
||||
* @author UnAfraid, Nos
|
||||
* @author Mobius
|
||||
*/
|
||||
public class Die implements IClientOutgoingPacket
|
||||
{
|
||||
private final int _objectId;
|
||||
private boolean _toVillage;
|
||||
private boolean _toClanHall;
|
||||
private boolean _toCastle;
|
||||
private boolean _toOutpost;
|
||||
private final boolean _isSweepable;
|
||||
private boolean _useFeather;
|
||||
private boolean _toFortress;
|
||||
private boolean _hideAnimation;
|
||||
private List<Integer> _items = null;
|
||||
private boolean _itemsEnabled;
|
||||
private int _flags = 0;
|
||||
|
||||
public Die(Creature creature)
|
||||
{
|
||||
_objectId = creature.getObjectId();
|
||||
_isSweepable = creature.isAttackable() && creature.isSweepActive();
|
||||
if (creature.isPlayer())
|
||||
{
|
||||
final Clan clan = creature.getActingPlayer().getClan();
|
||||
@@ -70,47 +59,32 @@ public class Die implements IClientOutgoingPacket
|
||||
isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan);
|
||||
}
|
||||
|
||||
_toVillage = creature.canRevive() && !creature.isPendingRevive();
|
||||
_toClanHall = (clan != null) && (clan.getHideoutId() > 0);
|
||||
_toCastle = ((clan != null) && (clan.getCastleId() > 0)) || isInCastleDefense;
|
||||
_toOutpost = ((siegeClan != null) && !isInCastleDefense && !isInFortDefense && !siegeClan.getFlag().isEmpty());
|
||||
_useFeather = creature.getAccessLevel().allowFixedRes() || creature.getInventory().haveItemForSelfResurrection();
|
||||
_toFortress = ((clan != null) && (clan.getFortId() > 0)) || isInFortDefense;
|
||||
// ClanHall check.
|
||||
if ((clan != null) && (clan.getHideoutId() > 0))
|
||||
{
|
||||
_flags += 2;
|
||||
}
|
||||
// Castle check.
|
||||
if (((clan != null) && (clan.getCastleId() > 0)) || isInCastleDefense)
|
||||
{
|
||||
_flags += 4;
|
||||
}
|
||||
// Fortress check.
|
||||
if (((clan != null) && (clan.getFortId() > 0)) || isInFortDefense)
|
||||
{
|
||||
_flags += 8;
|
||||
}
|
||||
// Outpost check.
|
||||
if (((siegeClan != null) && !isInCastleDefense && !isInFortDefense && !siegeClan.getFlag().isEmpty()))
|
||||
{
|
||||
_flags += 16;
|
||||
}
|
||||
// Feather check.
|
||||
if (creature.getAccessLevel().allowFixedRes() || creature.getInventory().haveItemForSelfResurrection())
|
||||
{
|
||||
_flags += 32;
|
||||
}
|
||||
}
|
||||
|
||||
_isSweepable = creature.isAttackable() && creature.isSweepActive();
|
||||
}
|
||||
|
||||
public void setHideAnimation(boolean val)
|
||||
{
|
||||
_hideAnimation = val;
|
||||
}
|
||||
|
||||
public void addItem(int itemId)
|
||||
{
|
||||
if (_items == null)
|
||||
{
|
||||
_items = new ArrayList<>(8);
|
||||
}
|
||||
|
||||
if (_items.size() < 8)
|
||||
{
|
||||
_items.add(itemId);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new IndexOutOfBoundsException("Die packet doesn't support more then 8 items!");
|
||||
}
|
||||
}
|
||||
|
||||
public List<Integer> getItems()
|
||||
{
|
||||
return _items != null ? _items : Collections.emptyList();
|
||||
}
|
||||
|
||||
public void setItemsEnabled(boolean val)
|
||||
{
|
||||
_itemsEnabled = val;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -119,20 +93,10 @@ public class Die implements IClientOutgoingPacket
|
||||
OutgoingPackets.DIE.writeId(packet);
|
||||
|
||||
packet.writeD(_objectId);
|
||||
packet.writeD(_toVillage ? 0x01 : 0x00);
|
||||
packet.writeD(_toClanHall ? 0x01 : 0x00);
|
||||
packet.writeD(_toCastle ? 0x01 : 0x00);
|
||||
packet.writeD(_toOutpost ? 0x01 : 0x00);
|
||||
packet.writeD(_isSweepable ? 0x01 : 0x00);
|
||||
packet.writeD(_useFeather ? 0x01 : 0x00);
|
||||
packet.writeD(_toFortress ? 0x01 : 0x00);
|
||||
packet.writeD(0x00); // Disables use Feather button for X seconds
|
||||
packet.writeD(0x00); // Adventure's Song
|
||||
packet.writeC(_hideAnimation ? 0x01 : 0x00);
|
||||
|
||||
packet.writeD(_itemsEnabled ? 0x01 : 0x00);
|
||||
packet.writeD(getItems().size());
|
||||
getItems().forEach(packet::writeD);
|
||||
packet.writeC(_flags);
|
||||
packet.writeC(0);
|
||||
packet.writeC(_isSweepable ? 1 : 0);
|
||||
packet.writeC(0); // 1: Resurrection during siege.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@@ -44,8 +44,8 @@ public class EtcStatusUpdate implements IClientOutgoingPacket
|
||||
|
||||
packet.writeC(_player.getCharges()); // 1-7 increase force, lvl
|
||||
packet.writeD(_player.getWeightPenalty()); // 1-4 weight penalty, lvl (1=50%, 2=66.6%, 3=80%, 4=100%)
|
||||
packet.writeC(_player.getExpertiseWeaponPenalty()); // Weapon Grade Penalty [1-4]
|
||||
packet.writeC(_player.getExpertiseArmorPenalty()); // Armor Grade Penalty [1-4]
|
||||
packet.writeC(0); // Weapon Grade Penalty [1-4]
|
||||
packet.writeC(0); // Armor Grade Penalty [1-4]
|
||||
packet.writeC(0); // Death Penalty [1-15, 0 = disabled)], not used anymore in Ertheia
|
||||
packet.writeC(_player.getChargedSouls());
|
||||
packet.writeC(_mask);
|
||||
|
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
|
||||
/**
|
||||
* @author NviX
|
||||
*/
|
||||
public class ExItemAnnounce implements IClientOutgoingPacket
|
||||
{
|
||||
private final ItemInstance _item;
|
||||
|
||||
public ExItemAnnounce(ItemInstance item)
|
||||
{
|
||||
_item = item;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_ITEM_ANNOUNCE.writeId(packet);
|
||||
packet.writeC(0x00);
|
||||
packet.writeString(_item.getName()); // name of item
|
||||
packet.writeD(_item.getId()); // item id
|
||||
packet.writeD(_item.getEnchantLevel()); // enchant level
|
||||
packet.writeC(0x00);
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -23,7 +23,6 @@ import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.buylist.Product;
|
||||
import org.l2jmobius.gameserver.model.buylist.ProductList;
|
||||
import org.l2jmobius.gameserver.model.items.Item;
|
||||
import org.l2jmobius.gameserver.model.items.type.CrystalType;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
|
||||
public class ShopPreviewList implements IClientOutgoingPacket
|
||||
@@ -31,14 +30,12 @@ public class ShopPreviewList implements IClientOutgoingPacket
|
||||
private final int _listId;
|
||||
private final Collection<Product> _list;
|
||||
private final long _money;
|
||||
private CrystalType _expertise;
|
||||
|
||||
public ShopPreviewList(ProductList list, long currentMoney, CrystalType expertise)
|
||||
public ShopPreviewList(ProductList list, long currentMoney)
|
||||
{
|
||||
_listId = list.getListId();
|
||||
_list = list.getProducts();
|
||||
_money = currentMoney;
|
||||
_expertise = expertise;
|
||||
}
|
||||
|
||||
public ShopPreviewList(Collection<Product> lst, int listId, long currentMoney)
|
||||
@@ -60,7 +57,7 @@ public class ShopPreviewList implements IClientOutgoingPacket
|
||||
int newlength = 0;
|
||||
for (Product product : _list)
|
||||
{
|
||||
if (!product.getItem().getCrystalType().isGreater(_expertise) && product.getItem().isEquipable())
|
||||
if (product.getItem().isEquipable())
|
||||
{
|
||||
newlength++;
|
||||
}
|
||||
@@ -69,7 +66,7 @@ public class ShopPreviewList implements IClientOutgoingPacket
|
||||
|
||||
for (Product product : _list)
|
||||
{
|
||||
if (!product.getItem().getCrystalType().isGreater(_expertise) && product.getItem().isEquipable())
|
||||
if (product.getItem().isEquipable())
|
||||
{
|
||||
packet.writeD(product.getItemId());
|
||||
packet.writeH(product.getItem().getType2()); // item type2
|
||||
|
@@ -46,6 +46,8 @@ public class ShortCutInit implements IClientOutgoingPacket
|
||||
packet.writeD(sc.getType().ordinal());
|
||||
packet.writeD(sc.getSlot() + (sc.getPage() * 12));
|
||||
|
||||
packet.writeC(0x00); // 228
|
||||
|
||||
switch (sc.getType())
|
||||
{
|
||||
case ITEM:
|
||||
|
@@ -40,6 +40,9 @@ public class ShortCutRegister implements IClientOutgoingPacket
|
||||
|
||||
packet.writeD(_shortcut.getType().ordinal());
|
||||
packet.writeD(_shortcut.getSlot() + (_shortcut.getPage() * 12)); // C4 Client
|
||||
|
||||
packet.writeC(0x00); // 228
|
||||
|
||||
switch (_shortcut.getType())
|
||||
{
|
||||
case ITEM:
|
||||
@@ -72,6 +75,7 @@ public class ShortCutRegister implements IClientOutgoingPacket
|
||||
{
|
||||
packet.writeD(_shortcut.getId());
|
||||
packet.writeD(_shortcut.getCharacterType());
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@@ -53,6 +53,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
|
||||
private final byte[] _masks = new byte[]
|
||||
{
|
||||
(byte) 0x00,
|
||||
(byte) 0x00,
|
||||
(byte) 0x00,
|
||||
(byte) 0x00
|
||||
@@ -133,7 +134,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
|
||||
packet.writeD(_player.getObjectId());
|
||||
packet.writeD(_initSize);
|
||||
packet.writeH(24);
|
||||
packet.writeH(25); // 196
|
||||
packet.writeB(_masks);
|
||||
|
||||
if (containsMask(UserInfoType.RELATION))
|
||||
@@ -301,7 +302,7 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
|
||||
if (containsMask(UserInfoType.SOCIAL))
|
||||
{
|
||||
packet.writeH(22);
|
||||
packet.writeH(30); // 228
|
||||
packet.writeC(_player.getPvpFlag());
|
||||
packet.writeD(_player.getReputation()); // Reputation
|
||||
packet.writeC(_player.getNobleLevel());
|
||||
@@ -311,15 +312,21 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
packet.writeD(_player.getPvpKills());
|
||||
packet.writeH(_player.getRecomLeft());
|
||||
packet.writeH(_player.getRecomHave());
|
||||
packet.writeD(0x00); // 196
|
||||
packet.writeD(0x00); // 228
|
||||
}
|
||||
|
||||
if (containsMask(UserInfoType.VITA_FAME))
|
||||
{
|
||||
packet.writeH(15);
|
||||
packet.writeH(19); // 196
|
||||
packet.writeD(_player.getVitalityPoints());
|
||||
packet.writeC(0x00); // Vita Bonus
|
||||
packet.writeD(_player.getFame());
|
||||
packet.writeD(_player.getRaidbossPoints());
|
||||
packet.writeC(0x00); // 196
|
||||
packet.writeC(0x00); // 196
|
||||
packet.writeC(0x00); // 196
|
||||
packet.writeC(0x00); // 196
|
||||
}
|
||||
|
||||
if (containsMask(UserInfoType.SLOTS))
|
||||
@@ -360,11 +367,17 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
|
||||
if (containsMask(UserInfoType.INVENTORY_LIMIT))
|
||||
{
|
||||
packet.writeH(9);
|
||||
packet.writeH(13);
|
||||
packet.writeH(0x00);
|
||||
packet.writeH(0x00);
|
||||
packet.writeH(_player.getInventoryLimit());
|
||||
|
||||
packet.writeC(_player.isCursedWeaponEquipped() ? CursedWeaponsManager.getInstance().getLevel(_player.getCursedWeaponEquippedId()) : 0);
|
||||
|
||||
packet.writeC(0x00); // 196
|
||||
packet.writeC(0x00); // 196
|
||||
packet.writeC(0x00); // 196
|
||||
packet.writeC(0x00); // 196
|
||||
}
|
||||
|
||||
if (containsMask(UserInfoType.TRUE_HERO))
|
||||
@@ -386,6 +399,12 @@ public class UserInfo extends AbstractMaskPacket<UserInfoType>
|
||||
packet.writeD(0x00);
|
||||
}
|
||||
|
||||
if (containsMask(UserInfoType.UNKNOWN_196)) // 196
|
||||
{
|
||||
packet.writeH(6); // 196
|
||||
packet.writeD(0x00); // 196
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user