Initial Grand Crusade changes.

This commit is contained in:
MobiusDev
2017-11-10 00:34:51 +00:00
parent b14755d840
commit 407edebc0e
111 changed files with 4960 additions and 1990 deletions

View File

@@ -71,6 +71,7 @@ import com.l2jmobius.gameserver.data.xml.impl.InitialShortcutData;
import com.l2jmobius.gameserver.data.xml.impl.ItemCrystalizationData;
import com.l2jmobius.gameserver.data.xml.impl.KarmaData;
import com.l2jmobius.gameserver.data.xml.impl.LuckyGameData;
import com.l2jmobius.gameserver.data.xml.impl.MonsterBookData;
import com.l2jmobius.gameserver.data.xml.impl.MultisellData;
import com.l2jmobius.gameserver.data.xml.impl.NpcData;
import com.l2jmobius.gameserver.data.xml.impl.OptionData;
@@ -292,6 +293,7 @@ public class GameServer
NpcData.getInstance();
ExtendDropData.getInstance();
SpawnsData.getInstance();
MonsterBookData.getInstance();
WalkingManager.getInstance();
StaticObjectData.getInstance();
ItemAuctionManager.getInstance();

View File

@@ -0,0 +1,138 @@
/*
* 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 com.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.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import com.l2jmobius.commons.util.IGameXmlReader;
import com.l2jmobius.gameserver.enums.Faction;
import com.l2jmobius.gameserver.model.holders.MonsterBookCardHolder;
import com.l2jmobius.gameserver.model.holders.MonsterBookRewardHolder;
/**
* @author Mobius
*/
public class MonsterBookData implements IGameXmlReader
{
private static final Logger LOGGER = Logger.getLogger(MonsterBookData.class.getName());
private final List<MonsterBookCardHolder> _monsterBook = new ArrayList<>();
protected MonsterBookData()
{
load();
}
@Override
public void load()
{
_monsterBook.clear();
parseDatapackFile("data/MonsterBook.xml");
LOGGER.info(getClass().getSimpleName() + ": Loaded: " + _monsterBook.size() + " monster data.");
}
@Override
public void parseDocument(Document doc, File f)
{
for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
{
if ("list".equalsIgnoreCase(n.getNodeName()))
{
for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
{
if ("card".equalsIgnoreCase(d.getNodeName()))
{
final NamedNodeMap attrs = d.getAttributes();
final int itemId = parseInteger(attrs, "id");
final int monster = parseInteger(attrs, "monster");
final String faction = parseString(attrs, "faction");
final MonsterBookCardHolder card = new MonsterBookCardHolder(itemId, monster, Faction.valueOf(faction));
if (NpcData.getInstance().getTemplate(monster) == null)
{
LOGGER.severe(getClass().getSimpleName() + ": Could not find NPC template with id " + monster + ".");
}
for (Node b = d.getFirstChild(); b != null; b = b.getNextSibling())
{
if ("rewards".equalsIgnoreCase(b.getNodeName()))
{
final NamedNodeMap rewardAttrs = b.getAttributes();
final int kills = parseInteger(rewardAttrs, "kills");
final Long exp = parseLong(rewardAttrs, "exp");
final int sp = parseInteger(rewardAttrs, "sp");
final int points = parseInteger(rewardAttrs, "points");
card.addReward(new MonsterBookRewardHolder(kills, exp, sp, points));
}
}
_monsterBook.add(card);
}
}
}
}
}
public List<MonsterBookCardHolder> getMonsterBookCards()
{
return _monsterBook;
}
public MonsterBookCardHolder getMonsterBookCardByMonsterId(int monsterId)
{
for (MonsterBookCardHolder card : _monsterBook)
{
if (card.getMonsterId() == monsterId)
{
return card;
}
}
return null;
}
public MonsterBookCardHolder getMonsterBookCardById(int cardId)
{
for (MonsterBookCardHolder card : _monsterBook)
{
if (card.getId() == cardId)
{
return card;
}
}
return null;
}
public static MonsterBookData getInstance()
{
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder
{
protected static final MonsterBookData INSTANCE = new MonsterBookData();
}
}

View File

@@ -26,7 +26,8 @@ public enum Faction
GIANT_TRACKERS(3, 200, 1350, 3650, 7100, 12850, 22050, 34700),
UNWORLDLY_VISITORS(4, 100, 1200, 3400, 6700, 12200, 21000, 33100),
KINGDOM_ROYAL_GUARDS(5, 100, 900, 2500, 4900, 8100, 12100, 16900, 22500, 29700, 38500, 48900),
FISHING_GUILD(6, 100, 7300, 18100, 32500, 53500, 78700, 106700);
FISHING_GUILD(6, 100, 7300, 18100, 32500, 53500, 78700, 106700),
HUNTERS_GUILD(7, 200, 4000, 9600, 19900, 32500, 47200, 64000);
private int _id;
private int[] _points;

View File

@@ -69,6 +69,12 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
return entry != null ? entry.getProgress() : 0;
}
public boolean getRecentlyCompleted(L2PcInstance player)
{
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), false);
return (entry != null) && entry.getRecentlyCompleted();
}
public synchronized void reset()
{
try (Connection con = DatabaseFactory.getInstance().getConnection();
@@ -97,6 +103,7 @@ public abstract class AbstractDailyMissionHandler extends ListenersContainer
final DailyMissionPlayerEntry entry = getPlayerEntry(player.getObjectId(), true);
entry.setStatus(DailyMissionStatus.COMPLETED);
entry.setLastCompleted(System.currentTimeMillis());
entry.setRecentlyCompleted(true);
storePlayerEntry(entry);
return true;

View File

@@ -109,6 +109,10 @@ public final class GrandBossManager implements IStorable
public int getBossStatus(int bossId)
{
if (!_bossStatus.containsKey(bossId))
{
return -1;
}
return _bossStatus.get(bossId);
}

View File

@@ -91,7 +91,7 @@ public class DailyMissionDataHolder
public boolean isDisplayable(L2PcInstance player)
{
return (!_isOneTime || (getStatus(player) != DailyMissionStatus.COMPLETED.getClientId())) && (_classRestriction.isEmpty() || _classRestriction.contains(player.getClassId()));
return (!_isOneTime || getRecentlyCompleted(player) || (getStatus(player) != DailyMissionStatus.COMPLETED.getClientId())) && (_classRestriction.isEmpty() || _classRestriction.contains(player.getClassId()));
}
public void requestReward(L2PcInstance player)
@@ -112,6 +112,11 @@ public class DailyMissionDataHolder
return _handler != null ? _handler.getProgress(player) : DailyMissionStatus.NOT_AVAILABLE.getClientId();
}
public boolean getRecentlyCompleted(L2PcInstance player)
{
return (_handler != null) && _handler.getRecentlyCompleted(player);
}
public void reset()
{
if (_handler != null)

View File

@@ -28,6 +28,7 @@ public class DailyMissionPlayerEntry
private DailyMissionStatus _status = DailyMissionStatus.NOT_AVAILABLE;
private int _progress;
private long _lastCompleted;
private boolean _recentlyCompleted;
public DailyMissionPlayerEntry(int objectId, int rewardId)
{
@@ -88,4 +89,14 @@ public class DailyMissionPlayerEntry
{
_lastCompleted = lastCompleted;
}
public boolean getRecentlyCompleted()
{
return _recentlyCompleted;
}
public void setRecentlyCompleted(boolean recentlyCompleted)
{
_recentlyCompleted = recentlyCompleted;
}
}

View File

@@ -33,6 +33,8 @@ import com.l2jmobius.gameserver.model.itemcontainer.PcInventory;
import com.l2jmobius.gameserver.model.items.L2Item;
import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.ExPrivateStoreBuyingResult;
import com.l2jmobius.gameserver.network.serverpackets.ExPrivateStoreSellingResult;
import com.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
import com.l2jmobius.gameserver.util.Util;
@@ -866,6 +868,8 @@ public class TradeList
msg.addItemName(newItem);
player.sendPacket(msg);
}
_owner.sendPacket(new ExPrivateStoreSellingResult(item.getObjectId(), item.getCount(), player.getAppearance().getVisibleName()));
}
// Send inventory update packet
@@ -1044,6 +1048,8 @@ public class TradeList
msg.addItemName(newItem);
player.sendPacket(msg);
}
_owner.sendPacket(new ExPrivateStoreBuyingResult(item.getObjectId(), item.getCount(), player.getAppearance().getVisibleName()));
}
if (totalPrice > 0)

View File

@@ -66,6 +66,7 @@ import com.l2jmobius.gameserver.data.xml.impl.AdminData;
import com.l2jmobius.gameserver.data.xml.impl.ClassListData;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.data.xml.impl.HennaData;
import com.l2jmobius.gameserver.data.xml.impl.MonsterBookData;
import com.l2jmobius.gameserver.data.xml.impl.NpcData;
import com.l2jmobius.gameserver.data.xml.impl.PetDataTable;
import com.l2jmobius.gameserver.data.xml.impl.PlayerTemplateData;
@@ -211,6 +212,8 @@ import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerPvPKi
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerReputationChanged;
import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerSubChange;
import com.l2jmobius.gameserver.model.holders.ItemHolder;
import com.l2jmobius.gameserver.model.holders.MonsterBookCardHolder;
import com.l2jmobius.gameserver.model.holders.MonsterBookRewardHolder;
import com.l2jmobius.gameserver.model.holders.MovieHolder;
import com.l2jmobius.gameserver.model.holders.PlayerEventHolder;
import com.l2jmobius.gameserver.model.holders.SellBuffHolder;
@@ -335,6 +338,9 @@ import com.l2jmobius.gameserver.network.serverpackets.ValidateLocation;
import com.l2jmobius.gameserver.network.serverpackets.ability.ExAcquireAPSkillList;
import com.l2jmobius.gameserver.network.serverpackets.commission.ExResponseCommissionInfo;
import com.l2jmobius.gameserver.network.serverpackets.friend.L2FriendStatus;
import com.l2jmobius.gameserver.network.serverpackets.monsterbook.ExMonsterBook;
import com.l2jmobius.gameserver.network.serverpackets.monsterbook.ExMonsterBookCloseForce;
import com.l2jmobius.gameserver.network.serverpackets.monsterbook.ExMonsterBookRewardIcon;
import com.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager;
import com.l2jmobius.gameserver.util.Broadcast;
import com.l2jmobius.gameserver.util.EnumIntBitmask;
@@ -850,6 +856,10 @@ public final class L2PcInstance extends L2Playable
// Character UI
private UIKeysSettings _uiKeySettings;
// Monster Book variables
private final static String MONSTER_BOOK_KILLS_VAR = "MONSTER_BOOK_KILLS_";
private final static String MONSTER_BOOK_LEVEL_VAR = "MONSTER_BOOK_LEVEL_";
// Save responder name for log it
private String _lastPetitionGmName = null;
@@ -14015,7 +14025,7 @@ public final class L2PcInstance extends L2Playable
if ((currentPoints + count) < faction.getPointsOfLevel(faction.getLevelCount() - 1))
{
getVariables().set(faction.toString(), currentPoints + count);
sendMessage("You obtained " + count + " Faction Points for " + faction.toString().toLowerCase().replace("_", " ") + ".");
sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_OBTAINED_S1_FACTION_POINTS_FOR_S2).addInt(count).addFactionName(faction.getId()));
}
else
{
@@ -14024,7 +14034,46 @@ public final class L2PcInstance extends L2Playable
}
if (oldLevel < getFactionLevel(faction))
{
sendMessage("The Faction Level of " + faction.toString().toLowerCase().replace("_", " ") + " has increased. Open the Factions window to check.");
sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_FACTION_LEVEL_OF_S1_HAS_INCREASED_OPEN_THE_FACTIONS_WINDOW_TO_CHECK).addFactionName(faction.getId()));
}
}
public int getMonsterBookKillCount(int cardId)
{
return getVariables().getInt(MONSTER_BOOK_KILLS_VAR + cardId, 0);
}
public int getMonsterBookRewardLevel(int cardId)
{
return getVariables().getInt(MONSTER_BOOK_LEVEL_VAR + cardId, 0);
}
public void updateMonsterBook(MonsterBookCardHolder card)
{
final int killCount = getMonsterBookKillCount(card.getId());
if (killCount < card.getReward(3).getKills()) // no point adding kills when player has reached max
{
getVariables().set(MONSTER_BOOK_KILLS_VAR + card.getId(), killCount + 1);
sendPacket(new ExMonsterBookCloseForce()); // in case it is open
final int rewardLevel = getMonsterBookRewardLevel(card.getId());
if ((getMonsterBookKillCount(card.getId()) >= card.getReward(rewardLevel).getKills()) && (rewardLevel < 4)) // make sure player can be rewarded
{
sendPacket(new ExMonsterBookRewardIcon());
}
}
}
public void rewardMonsterBook(int cardId)
{
final int rewardLevel = getMonsterBookRewardLevel(cardId);
final MonsterBookCardHolder card = MonsterBookData.getInstance().getMonsterBookCardById(cardId);
final MonsterBookRewardHolder reward = card.getReward(rewardLevel);
if ((getMonsterBookKillCount(cardId) >= reward.getKills()) && (rewardLevel < 4)) // make sure player can be rewarded
{
getVariables().set(MONSTER_BOOK_LEVEL_VAR + cardId, rewardLevel + 1);
addExpAndSp(reward.getExp(), reward.getSp());
addFactionPoints(card.getFaction(), reward.getPoints());
sendPacket(new ExMonsterBook(this));
}
}

View File

@@ -298,7 +298,7 @@ public class PcStat extends PlayableStat
{
getActiveChar().sendPacket(new ExAcquireAPSkillList(getActiveChar()));
}
getActiveChar().sendPacket(new ExOneDayReceiveRewardList(getActiveChar()));
getActiveChar().sendPacket(new ExOneDayReceiveRewardList(getActiveChar(), true));
return levelIncreased;
}

View File

@@ -0,0 +1,65 @@
/*
* 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 com.l2jmobius.gameserver.model.holders;
import java.util.ArrayList;
import java.util.List;
import com.l2jmobius.gameserver.enums.Faction;
/**
* @author Mobius
*/
public class MonsterBookCardHolder
{
private final int _id;
private final int _monsterId;
private final Faction _faction;
private final List<MonsterBookRewardHolder> _rewards = new ArrayList<>(4);
public MonsterBookCardHolder(int id, int monsterId, Faction faction)
{
_id = id;
_monsterId = monsterId;
_faction = faction;
}
public int getId()
{
return _id;
}
public int getMonsterId()
{
return _monsterId;
}
public Faction getFaction()
{
return _faction;
}
public MonsterBookRewardHolder getReward(int level)
{
return _rewards.get(level);
}
public void addReward(MonsterBookRewardHolder reward)
{
_rewards.add(reward);
}
}

View File

@@ -0,0 +1,56 @@
/*
* 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 com.l2jmobius.gameserver.model.holders;
/**
* @author Mobius
*/
public class MonsterBookRewardHolder
{
private final int _kills;
private final long _exp;
private final int _sp;
private final int _points;
public MonsterBookRewardHolder(int kills, long exp, int sp, int points)
{
_kills = kills;
_exp = exp;
_sp = sp;
_points = points;
}
public int getKills()
{
return _kills;
}
public long getExp()
{
return _exp;
}
public int getSp()
{
return _sp;
}
public int getPoints()
{
return _points;
}
}

View File

@@ -74,6 +74,9 @@ import com.l2jmobius.gameserver.network.clientpackets.mentoring.RequestMenteeAdd
import com.l2jmobius.gameserver.network.clientpackets.mentoring.RequestMenteeWaitingList;
import com.l2jmobius.gameserver.network.clientpackets.mentoring.RequestMentorCancel;
import com.l2jmobius.gameserver.network.clientpackets.mentoring.RequestMentorList;
import com.l2jmobius.gameserver.network.clientpackets.monsterbook.RequestMonsterBookClose;
import com.l2jmobius.gameserver.network.clientpackets.monsterbook.RequestMonsterBookOpen;
import com.l2jmobius.gameserver.network.clientpackets.monsterbook.RequestMonsterBookReward;
import com.l2jmobius.gameserver.network.clientpackets.pledgebonus.RequestPledgeBonusOpen;
import com.l2jmobius.gameserver.network.clientpackets.pledgebonus.RequestPledgeBonusReward;
import com.l2jmobius.gameserver.network.clientpackets.pledgebonus.RequestPledgeBonusRewardList;
@@ -82,6 +85,8 @@ import com.l2jmobius.gameserver.network.clientpackets.primeshop.RequestBRGamePoi
import com.l2jmobius.gameserver.network.clientpackets.primeshop.RequestBRProductInfo;
import com.l2jmobius.gameserver.network.clientpackets.primeshop.RequestBRProductList;
import com.l2jmobius.gameserver.network.clientpackets.primeshop.RequestBRRecentProductList;
import com.l2jmobius.gameserver.network.clientpackets.raidbossinfo.RequestRaidBossSpawnInfo;
import com.l2jmobius.gameserver.network.clientpackets.raidbossinfo.RequestRaidServerInfo;
import com.l2jmobius.gameserver.network.clientpackets.sayune.RequestFlyMove;
import com.l2jmobius.gameserver.network.clientpackets.sayune.RequestFlyMoveStart;
import com.l2jmobius.gameserver.network.clientpackets.shuttle.CannotMoveAnymoreInShuttle;
@@ -362,22 +367,31 @@ public enum ExIncomingPackets implements IIncomingPackets<L2GameClient>
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),
// TODO: Check Helios updates
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),
REQUEST_TODO_LIST(0x11D, RequestTodoList::new, ConnectionState.IN_GAME),
REQUEST_TODO_LIST_HTML(0x11E, null, ConnectionState.IN_GAME),
REQUEST_ONE_DAY_REWARD_RECEIVE(0x11F, RequestOneDayRewardReceive::new, 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, null, ConnectionState.IN_GAME);
EX_ARENA_CUSTOM_NOTIFICATION(0x11D, null, ConnectionState.IN_GAME),
REQUEST_TODO_LIST(0x11E, RequestTodoList::new, ConnectionState.IN_GAME),
REQUEST_TODO_LIST_HTML(0x11F, null, ConnectionState.IN_GAME),
REQUEST_ONE_DAY_REWARD_RECEIVE(0x120, RequestOneDayRewardReceive::new, 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, null, 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);
public static final ExIncomingPackets[] PACKET_ARRAY;

View File

@@ -692,28 +692,42 @@ public enum OutgoingPackets
EX_CLOSING_ARENA(0xFE, 0x19B),
EX_CLOSED_ARENA(0xFE, 0x19C),
EX_DIE_IN_ARENA(0xFE, 0x19D),
EX_ARENA_DASHBOARD(0xFE, 0x19E),
EX_ARENA_UPDATE_EQUIP_SLOT(0xFE, 0x19F),
EX_ARENA_KILL_INFO(0xFE, 0x1A0),
EX_EXIT_ARENA(0xFE, 0x1A1),
EX_BALTHUS_EVENT(0xFE, 0x1A2),
EX_BALTHUS_EVENT_JACKPOT_USER(0xFE, 0x1A3),
EX_PARTY_MATCHING_ROOM_HISTORY(0xFE, 0x1A4),
EX_AI_CONTENT_UI_EVENT(0xFE, 0x1A5),
EX_ONE_DAY_RECEIVE_REWARD_LIST(0xFE, 0x1A7),
EX_CONNECTED_TIME_AND_GETTABLE_REWARD(0xFE, 0x1A8),
EX_TODO_LIST_RECOMMAND(0xFE, 0x1A9),
EX_TODO_LIST_INZONE(0xFE, 0x1AA),
EX_TODO_LIST_HTML(0xFE, 0x1AB),
EX_QUEUE_TICKET(0xFE, 0x1AC),
EX_PLEDGE_BONUS_OPEN(0xFE, 0x1AD),
EX_PLEDGE_BONUS_LIST(0xFE, 0x1AE),
EX_PLEDGE_BONUS_MARK_RESET(0xFE, 0x1AF),
EX_PLEDGE_BONUS_UPDATE(0xFE, 0x1B0),
EX_SSO_AUTH_TOKEN(0xFE, 0x1B1),
EX_QUEUE_TICKET_LOGIN(0xFE, 0x1B2),
EX_ENSOUL_EXTRACTION_SHOW(0xFE, 0x1B3),
EX_ENSOUL_EXTRACTION_RESULT(0xFE, 0x1B4);
EX_ARENA_DASHBOARD(0xFE, 0x19F),
EX_ARENA_UPDATE_EQUIP_SLOT(0xFE, 0x1A0),
EX_ARENA_KILL_INFO(0xFE, 0x1A1),
EX_EXIT_ARENA(0xFE, 0x1A2),
EX_BALTHUS_EVENT(0xFE, 0x1A3),
EX_BALTHUS_EVENT_JACKPOT_USER(0xFE, 0x1A4),
EX_PARTY_MATCHING_ROOM_HISTORY(0xFE, 0x1A5),
EX_AI_CONTENT_UI_EVENT(0xFE, 0x1A6),
EX_ONE_DAY_RECEIVE_REWARD_LIST(0xFE, 0x1A8),
EX_CONNECTED_TIME_AND_GETTABLE_REWARD(0xFE, 0x1A9),
EX_TODO_LIST_RECOMMAND(0xFE, 0x1AA),
EX_TODO_LIST_INZONE(0xFE, 0x1AB),
EX_TODO_LIST_HTML(0xFE, 0x1AC),
EX_QUEUE_TICKET(0xFE, 0x1AD),
EX_PLEDGE_BONUS_OPEN(0xFE, 0x1AE),
EX_PLEDGE_BONUS_LIST(0xFE, 0x1AF),
EX_PLEDGE_BONUS_MARK_RESET(0xFE, 0x1B0),
EX_PLEDGE_BONUS_UPDATE(0xFE, 0x1B1),
EX_SSO_AUTH_TOKEN(0xFE, 0x1B2),
EX_QUEUE_TICKET_LOGIN(0xFE, 0x1B3),
EX_ENSOUL_EXTRACTION_SHOW(0xFE, 0x1B4),
EX_ENSOUL_EXTRACTION_RESULT(0xFE, 0x1B5),
EX_FIELD_EVENT_STEP(0xFE, 0x1B6),
EX_FIELD_EVENT_POINT(0xFE, 0x1B7),
EX_FIELD_EVENT_EFFECT(0xFE, 0x1B8),
EX_RAID_BOSS_SPAWN_INFO(0xFE, 0x1B9),
EX_RAID_SERVER_INFO(0xFE, 0x1BA),
EX_SHOW_AGIT_SIEGE_INFO(0xFE, 0x1BB),
EX_ITEM_ACTION_STATUS(0xFE, 0x1BC),
EX_MONSTER_BOOK(0xFE, 0x1BD),
EX_MONSTER_BOOK_REWARD_ICON(0xFE, 0x1BE),
EX_MONSTER_BOOK_REWARD_FACTION_UI(0xFE, 0x1BF),
EX_MONSTER_BOOK_OPEN_RESULT(0xFE, 0x1C0),
EX_MONSTER_BOOK_CLOSE_FORCE(0xFE, 0x1C1),
EX_PRIVATE_STORE_BUYING_RESULT(0xFE, 0x1C5),
EX_PRIVATE_STORE_SELLING_RESULT(0xFE, 0x1C6);
private final int _id1;
private final int _id2;

View File

@@ -12373,7 +12373,7 @@ public final class SystemMessageId
@ClientString(id = 4355, message = "Failed to apply the Soul Crystal effect because of abnormal circumstances.")
public static SystemMessageId FAILED_TO_APPLY_THE_SOUL_CRYSTAL_EFFECT_BECAUSE_OF_ABNORMAL_CIRCUMSTANCES;
@ClientString(id = 4356, message = "There are no items that can be searched byn($s1).")
@ClientString(id = 4356, message = "There are no items that can be searched byn<$s1>.")
public static SystemMessageId THERE_ARE_NO_ITEMS_THAT_CAN_BE_SEARCHED_BY_N_S1;
@ClientString(id = 4357, message = "There are no items that can be traded.")
@@ -12541,6 +12541,201 @@ public final class SystemMessageId
@ClientString(id = 4411, message = "Macros consisting of chat messages only cannot be used automatically.")
public static SystemMessageId MACROS_CONSISTING_OF_CHAT_MESSAGES_ONLY_CANNOT_BE_USED_AUTOMATICALLY;
@ClientString(id = 4412, message = "Send $s1")
public static SystemMessageId SEND_S1;
@ClientString(id = 4413, message = "Congratulations. Compounding was successful and you obtained $s2 of $s1.")
public static SystemMessageId CONGRATULATIONS_COMPOUNDING_WAS_SUCCESSFUL_AND_YOU_OBTAINED_S2_OF_S1;
@ClientString(id = 4414, message = "Compounding failed and you obtained $s2 of $s1.")
public static SystemMessageId COMPOUNDING_FAILED_AND_YOU_OBTAINED_S2_OF_S1;
@ClientString(id = 4415, message = "A remote control program has been detected. Please keep in mind that your game data may be compromised while using the program.")
public static SystemMessageId A_REMOTE_CONTROL_PROGRAM_HAS_BEEN_DETECTED_PLEASE_KEEP_IN_MIND_THAT_YOUR_GAME_DATA_MAY_BE_COMPROMISED_WHILE_USING_THE_PROGRAM;
@ClientString(id = 4416, message = "You have to register the items in order.")
public static SystemMessageId YOU_HAVE_TO_REGISTER_THE_ITEMS_IN_ORDER;
@ClientString(id = 4417, message = "You obtained $s2 of $s1 after compounding.")
public static SystemMessageId YOU_OBTAINED_S2_OF_S1_AFTER_COMPOUNDING;
@ClientString(id = 4418, message = "You don't have enough space in your inventory to continue with compounding. You need more than 2 empty slots.")
public static SystemMessageId YOU_DON_T_HAVE_ENOUGH_SPACE_IN_YOUR_INVENTORY_TO_CONTINUE_WITH_COMPOUNDING_YOU_NEED_MORE_THAN_2_EMPTY_SLOTS;
@ClientString(id = 4419, message = "The auction for $s1 will begin in 24 hours.")
public static SystemMessageId THE_AUCTION_FOR_S1_WILL_BEGIN_IN_24_HOURS;
@ClientString(id = 4420, message = "The auction for $s1 is in progress.")
public static SystemMessageId THE_AUCTION_FOR_S1_IS_IN_PROGRESS;
@ClientString(id = 4421, message = "$s1 is sold for $s2 Adena.")
public static SystemMessageId S1_IS_SOLD_FOR_S2_ADENA;
@ClientString(id = 4422, message = "Processing failed due to death of a character. Resurrect first and try again.")
public static SystemMessageId PROCESSING_FAILED_DUE_TO_DEATH_OF_A_CHARACTER_RESURRECT_FIRST_AND_TRY_AGAIN;
@ClientString(id = 4423, message = "The Faction Level of $s1 has increased. Open the Factions window to check.")
public static SystemMessageId THE_FACTION_LEVEL_OF_S1_HAS_INCREASED_OPEN_THE_FACTIONS_WINDOW_TO_CHECK;
@ClientString(id = 4424, message = "When you compound, you may lose some or all of the ingredients. Continue?")
public static SystemMessageId WHEN_YOU_COMPOUND_YOU_MAY_LOSE_SOME_OR_ALL_OF_THE_INGREDIENTS_CONTINUE;
@ClientString(id = 4425, message = "$s1 Raid Monster")
public static SystemMessageId S1_RAID_MONSTER;
@ClientString(id = 4426, message = "Completed all objectives of the $s2 Monster Collection level $s1.")
public static SystemMessageId COMPLETED_ALL_OBJECTIVES_OF_THE_S2_MONSTER_COLLECTION_LEVEL_S1;
@ClientString(id = 4427, message = "Completed all levels of the $s1 Monster Collection.")
public static SystemMessageId COMPLETED_ALL_LEVELS_OF_THE_S1_MONSTER_COLLECTION;
@ClientString(id = 4428, message = "Only characters of level $s1 or higher are eligible for rewards.")
public static SystemMessageId ONLY_CHARACTERS_OF_LEVEL_S1_OR_HIGHER_ARE_ELIGIBLE_FOR_REWARDS;
@ClientString(id = 4429, message = "No rewards can be obtained while changing class.")
public static SystemMessageId NO_REWARDS_CAN_BE_OBTAINED_WHILE_CHANGING_CLASS;
@ClientString(id = 4430, message = "You cannot abandon missions in the area while defending the Keucereus Alliance Base.")
public static SystemMessageId YOU_CANNOT_ABANDON_MISSIONS_IN_THE_AREA_WHILE_DEFENDING_THE_KEUCEREUS_ALLIANCE_BASE;
@ClientString(id = 4431, message = "Location information is needed to show this.")
public static SystemMessageId LOCATION_INFORMATION_IS_NEEDED_TO_SHOW_THIS;
@ClientString(id = 4432, message = "Keucereus Defense - In progress")
public static SystemMessageId KEUCEREUS_DEFENSE_IN_PROGRESS;
@ClientString(id = 4433, message = "Keucereus Defense - Won")
public static SystemMessageId KEUCEREUS_DEFENSE_WON;
@ClientString(id = 4434, message = "Keucereus Defense - Lost")
public static SystemMessageId KEUCEREUS_DEFENSE_LOST;
@ClientString(id = 4435, message = "Keucereus Defense - Invasion declared")
public static SystemMessageId KEUCEREUS_DEFENSE_INVASION_DECLARED;
@ClientString(id = 4436, message = "$s1 Territory")
public static SystemMessageId S1_TERRITORY;
@ClientString(id = 4437, message = "$s1 appeared - Click it to track down.")
public static SystemMessageId S1_APPEARED_CLICK_IT_TO_TRACK_DOWN;
@ClientString(id = 4438, message = "Nothing has been recorded in the Monster Collection.")
public static SystemMessageId NOTHING_HAS_BEEN_RECORDED_IN_THE_MONSTER_COLLECTION;
@ClientString(id = 4439, message = "Ka...Kain?")
public static SystemMessageId KA_KAIN;
@ClientString(id = 4440, message = "We could defeat Kain van Halter...ntogether.")
public static SystemMessageId WE_COULD_DEFEAT_KAIN_VAN_HALTER_NTOGETHER;
@ClientString(id = 4441, message = "Now it's time to show our strength.nLet's go to the Messiah Castle.")
public static SystemMessageId NOW_IT_S_TIME_TO_SHOW_OUR_STRENGTH_NLET_S_GO_TO_THE_MESSIAH_CASTLE;
@ClientString(id = 4442, message = "We had to retreat... to live to fight another day.")
public static SystemMessageId WE_HAD_TO_RETREAT_TO_LIVE_TO_FIGHT_ANOTHER_DAY;
@ClientString(id = 4443, message = "Let's sharpen our blades until we return to Gracia.")
public static SystemMessageId LET_S_SHARPEN_OUR_BLADES_UNTIL_WE_RETURN_TO_GRACIA;
@ClientString(id = 4444, message = "The mission is a success. Fall back!")
public static SystemMessageId THE_MISSION_IS_A_SUCCESS_FALL_BACK;
@ClientString(id = 4445, message = "Where in the world was the castle-guarding apostle?")
public static SystemMessageId WHERE_IN_THE_WORLD_WAS_THE_CASTLE_GUARDING_APOSTLE;
@ClientString(id = 4446, message = "Leona Blackbird...Your days are numbered...")
public static SystemMessageId LEONA_BLACKBIRD_YOUR_DAYS_ARE_NUMBERED;
@ClientString(id = 4447, message = "Now is the time! Charge into the courtyard!")
public static SystemMessageId NOW_IS_THE_TIME_CHARGE_INTO_THE_COURTYARD;
@ClientString(id = 4448, message = "Why is there no one here?")
public static SystemMessageId WHY_IS_THERE_NO_ONE_HERE;
@ClientString(id = 4449, message = "Gis...Giselle?")
public static SystemMessageId GIS_GISELLE;
@ClientString(id = 4450, message = "All stages are completed.")
public static SystemMessageId ALL_STAGES_ARE_COMPLETED;
@ClientString(id = 4451, message = "You obtained $s1 Faction Points for $s2")
public static SystemMessageId YOU_OBTAINED_S1_FACTION_POINTS_FOR_S2;
@ClientString(id = 4452, message = "Current location: $s1/$s2/$s3 (Messiah Castle)")
public static SystemMessageId CURRENT_LOCATION_S1_S2_S3_MESSIAH_CASTLE;
@ClientString(id = 4453, message = "$c1 cannot perform the Couple Action as the person is using a skill.")
public static SystemMessageId C1_CANNOT_PERFORM_THE_COUPLE_ACTION_AS_THE_PERSON_IS_USING_A_SKILL;
@ClientString(id = 4454, message = "$c1 cannot perform the Couple Action as the person is using Sayunes.")
public static SystemMessageId C1_CANNOT_PERFORM_THE_COUPLE_ACTION_AS_THE_PERSON_IS_USING_SAYUNES;
@ClientString(id = 4455, message = "You cannot attack other players in this area.")
public static SystemMessageId YOU_CANNOT_ATTACK_OTHER_PLAYERS_IN_THIS_AREA;
@ClientString(id = 4456, message = "You cannot attack players who are in a non-combat area.")
public static SystemMessageId YOU_CANNOT_ATTACK_PLAYERS_WHO_ARE_IN_A_NON_COMBAT_AREA;
@ClientString(id = 4457, message = "The items sent can be retrieved only through an Alchemist or Dimensional Merchant on the same server. Are you sure you want to continue?")
public static SystemMessageId THE_ITEMS_SENT_CAN_BE_RETRIEVED_ONLY_THROUGH_AN_ALCHEMIST_OR_DIMENSIONAL_MERCHANT_ON_THE_SAME_SERVER_ARE_YOU_SURE_YOU_WANT_TO_CONTINUE;
@ClientString(id = 4458, message = "Pull yourself together, Kain! Are you trying to get us killed?")
public static SystemMessageId PULL_YOURSELF_TOGETHER_KAIN_ARE_YOU_TRYING_TO_GET_US_KILLED;
@ClientString(id = 4459, message = "You have reputations to keep, Karla. What a shame.")
public static SystemMessageId YOU_HAVE_REPUTATIONS_TO_KEEP_KARLA_WHAT_A_SHAME;
@ClientString(id = 4460, message = "This man is no longer our ally.")
public static SystemMessageId THIS_MAN_IS_NO_LONGER_OUR_ALLY;
@ClientString(id = 4461, message = "Get back, everyone! You might all get killed the next time!")
public static SystemMessageId GET_BACK_EVERYONE_YOU_MIGHT_ALL_GET_KILLED_THE_NEXT_TIME;
@ClientString(id = 4462, message = "You exceeded the limit and cannot complete the task.")
public static SystemMessageId YOU_EXCEEDED_THE_LIMIT_AND_CANNOT_COMPLETE_THE_TASK;
@ClientString(id = 4463, message = "Before the scheduled maintenance on $s1.$s2.$s3")
public static SystemMessageId BEFORE_THE_SCHEDULED_MAINTENANCE_ON_S1_S2_S3;
@ClientString(id = 4464, message = "After the scheduled maintenance on $s1.$s2.$s3")
public static SystemMessageId AFTER_THE_SCHEDULED_MAINTENANCE_ON_S1_S2_S3;
@ClientString(id = 4465, message = "From $s1 $s2 to $s3")
public static SystemMessageId FROM_S1_S2_TO_S3;
@ClientString(id = 4466, message = "$s1 day(s) $s2 hour(s) $s3 minute(s)")
public static SystemMessageId S1_DAY_S_S2_HOUR_S_S3_MINUTE_S;
@ClientString(id = 4467, message = "$s1.$s2.$s3")
public static SystemMessageId S1_S2_S3;
@ClientString(id = 4468, message = "Task cannot be completed: Your selling price exceeds the Adena limit.")
public static SystemMessageId TASK_CANNOT_BE_COMPLETED_YOUR_SELLING_PRICE_EXCEEDS_THE_ADENA_LIMIT;
@ClientString(id = 4469, message = "Task cannot be completed: Your balance exceeds the Adena limit.")
public static SystemMessageId TASK_CANNOT_BE_COMPLETED_YOUR_BALANCE_EXCEEDS_THE_ADENA_LIMIT;
@ClientString(id = 4470, message = "Task cannot be completed: Your balance after the transaction exceeds the Adena limit.")
public static SystemMessageId TASK_CANNOT_BE_COMPLETED_YOUR_BALANCE_AFTER_THE_TRANSACTION_EXCEEDS_THE_ADENA_LIMIT;
@ClientString(id = 4471, message = "The item was upgraded successfully and you obtained a $s1.")
public static SystemMessageId THE_ITEM_WAS_UPGRADED_SUCCESSFULLY_AND_YOU_OBTAINED_A_S1;
@ClientString(id = 4472, message = "$c1 has succeeded in upgrading equipment and obtained a $s2.")
public static SystemMessageId C1_HAS_SUCCEEDED_IN_UPGRADING_EQUIPMENT_AND_OBTAINED_A_S2;
@ClientString(id = 4473, message = "Failed the operation.")
public static SystemMessageId FAILED_THE_OPERATION;
@ClientString(id = 4474, message = "Failed because the target item does not exist.")
public static SystemMessageId FAILED_BECAUSE_THE_TARGET_ITEM_DOES_NOT_EXIST;
@ClientString(id = 4475, message = "Failed because there are not enough ingredients.")
public static SystemMessageId FAILED_BECAUSE_THERE_ARE_NOT_ENOUGH_INGREDIENTS;
@ClientString(id = 4476, message = "Failed because there's not enough Adena.")
public static SystemMessageId FAILED_BECAUSE_THERE_S_NOT_ENOUGH_ADENA;
@ClientString(id = 4601, message = "- Great P. Def. and skillful Shield Defense(br)- Increased P. Def. for the whole party(br)- Protect party members")
public static SystemMessageId GREAT_P_DEF_AND_SKILLFUL_SHIELD_DEFENSE_BR_INCREASED_P_DEF_FOR_THE_WHOLE_PARTY_BR_PROTECT_PARTY_MEMBERS;
@@ -13636,8 +13831,11 @@ public final class SystemMessageId
@ClientString(id = 5331, message = "Your account has been restricted for violating the EULA, RoC and/or the User Agreement. When a user violates the terms of the User Agreement, the company can impose a restriction on their account. For more information, please visit the Support Center on the NCSOFT website (https://support.lineage2.com).")
public static SystemMessageId YOUR_ACCOUNT_HAS_BEEN_RESTRICTED_FOR_VIOLATING_THE_EULA_ROC_AND_OR_THE_USER_AGREEMENT_WHEN_A_USER_VIOLATES_THE_TERMS_OF_THE_USER_AGREEMENT_THE_COMPANY_CAN_IMPOSE_A_RESTRICTION_ON_THEIR_ACCOUNT_FOR_MORE_INFORMATION_PLEASE_VISIT_THE_SUPPORT_CENTER_ON_THE_NCSOFT_WEBSITE_HTTPS_SUPPORT_LINEAGE2_COM122;
@ClientString(id = 5332, message = "Your account has been idle for a long time. If you do not play the game for a certain period, your account will become idle. You can reactivate your account at the (font color='FFDF4C')plaync webpage ((/font)(font color='6699FF')(a action='url https://id.plaync.com/account/dormant/index')id.plaync.com/account/dormant/index(/a)(/font)(font color='FFDF4C'))(/font).")
public static SystemMessageId YOUR_ACCOUNT_HAS_BEEN_IDLE_FOR_A_LONG_TIME_IF_YOU_DO_NOT_PLAY_THE_GAME_FOR_A_CERTAIN_PERIOD_YOUR_ACCOUNT_WILL_BECOME_IDLE_YOU_CAN_REACTIVATE_YOUR_ACCOUNT_AT_THE_FONT_COLOR_FFDF4C_PLAYNC_WEBPAGE_FONT_COLOR_6699FF_A_ACTION_URL_HTTPS_ID_PLAYNC_COM_ACCOUNT_DORMANT_INDEX_ID_PLAYNC_COM_ACCOUNT_DORMANT_INDEX_FONT_COLOR_FFDF4C;
@ClientString(id = 5332, message = "Your account has been idle for a long time. If you do not play the game for a certain period, your account will become idle. You can reactivate your account at the <font color=FFDF4C>plaync webpage (</font><font color=6699FF><a action=url https://id.plaync.com/account/dormant/index>id.plaync.com/account/dormant/index</a></font><font color=FFDF4C>)</font>.")
public static SystemMessageId YOUR_ACCOUNT_HAS_BEEN_IDLE_FOR_A_LONG_TIME_IF_YOU_DO_NOT_PLAY_THE_GAME_FOR_A_CERTAIN_PERIOD_YOUR_ACCOUNT_WILL_BECOME_IDLE_YOU_CAN_REACTIVATE_YOUR_ACCOUNT_AT_THE_FONT_COLOR_FFDF4C_PLAYNC_WEBPAGE_FONT_FONT_COLOR_6699FF_A_ACTION_URL_HTTPS_ID_PLAYNC_COM_ACCOUNT_DORMANT_INDEX_ID_PLAYNC_COM_ACCOUNT_DORMANT_INDEX_A_FONT_FONT_COLOR_FFDF4C_FONT;
@ClientString(id = 5333, message = "Your account has been completely blocked due to account theft. For more information, go to the <font color=FFDF4C>plaync Homepage (</font><font color=6699FF><a action=url http://www.plaync.com>www.plaync.com</a></font><font color=FFDF4C>) and contact us via the Support Center</font>.")
public static SystemMessageId YOUR_ACCOUNT_HAS_BEEN_COMPLETELY_BLOCKED_DUE_TO_ACCOUNT_THEFT_FOR_MORE_INFORMATION_GO_TO_THE_FONT_COLOR_FFDF4C_PLAYNC_HOMEPAGE_FONT_FONT_COLOR_6699FF_A_ACTION_URL_HTTP_WWW_PLAYNC_COM_WWW_PLAYNC_COM_A_FONT_FONT_COLOR_FFDF4C_AND_CONTACT_US_VIA_THE_SUPPORT_CENTER_FONT;
@ClientString(id = 5501, message = "$s1 has been killed by $s2.")
public static SystemMessageId S1_HAS_BEEN_KILLED_BY_S2;
@@ -13672,7 +13870,7 @@ public final class SystemMessageId
@ClientString(id = 5511, message = "Standing by...")
public static SystemMessageId STANDING_BY;
@ClientString(id = 5512, message = "$s1 has chosen a class.")
@ClientString(id = 5512, message = "$s1 has chosen a class. ")
public static SystemMessageId S1_HAS_CHOSEN_A_CLASS;
@ClientString(id = 5513, message = "The battle will soon begin.")
@@ -13681,6 +13879,78 @@ public final class SystemMessageId
@ClientString(id = 5514, message = "Skill enhancement complete.")
public static SystemMessageId SKILL_ENHANCEMENT_COMPLETE;
@ClientString(id = 5515, message = "The selected player is in the Arena lobby and cannot be invited to the party.")
public static SystemMessageId THE_SELECTED_PLAYER_IS_IN_THE_ARENA_LOBBY_AND_CANNOT_BE_INVITED_TO_THE_PARTY;
@ClientString(id = 5516, message = "Users participating in Arena cannot be invited to a party.")
public static SystemMessageId USERS_PARTICIPATING_IN_ARENA_CANNOT_BE_INVITED_TO_A_PARTY;
@ClientString(id = 5517, message = "This function is unavailable to use in Arena.")
public static SystemMessageId THIS_FUNCTION_IS_UNAVAILABLE_TO_USE_IN_ARENA;
@ClientString(id = 5518, message = "User preparing for Arena battle cannot join a party.")
public static SystemMessageId USER_PREPARING_FOR_ARENA_BATTLE_CANNOT_JOIN_A_PARTY;
@ClientString(id = 5519, message = "The user invited to the party is preparing for Arena battle, and the invitation failed.")
public static SystemMessageId THE_USER_INVITED_TO_THE_PARTY_IS_PREPARING_FOR_ARENA_BATTLE_AND_THE_INVITATION_FAILED;
@ClientString(id = 5520, message = "You can no longer queue with that class.")
public static SystemMessageId YOU_CAN_NO_LONGER_QUEUE_WITH_THAT_CLASS;
@ClientString(id = 5521, message = "Begin matchmaking.")
public static SystemMessageId BEGIN_MATCHMAKING;
@ClientString(id = 5522, message = "Matchmaking has been canceled.")
public static SystemMessageId MATCHMAKING_HAS_BEEN_CANCELED;
@ClientString(id = 5523, message = "A match was found.")
public static SystemMessageId A_MATCH_WAS_FOUND;
@ClientString(id = 5524, message = "You are already in the queue.")
public static SystemMessageId YOU_ARE_ALREADY_IN_THE_QUEUE;
@ClientString(id = 5525, message = "Up to 2 players per class can queue.")
public static SystemMessageId UP_TO_2_PLAYERS_PER_CLASS_CAN_QUEUE;
@ClientString(id = 5526, message = "Matching will be canceled unless all the classes are confirmed within the set time.")
public static SystemMessageId MATCHING_WILL_BE_CANCELED_UNLESS_ALL_THE_CLASSES_ARE_CONFIRMED_WITHIN_THE_SET_TIME;
@ClientString(id = 5527, message = "$s1 has confirmed the class.")
public static SystemMessageId S1_HAS_CONFIRMED_THE_CLASS;
@ClientString(id = 5528, message = "Click here to enchant your skill!")
public static SystemMessageId CLICK_HERE_TO_ENCHANT_YOUR_SKILL;
@ClientString(id = 5529, message = "Enhanced the $s1 skill.")
public static SystemMessageId ENHANCED_THE_S1_SKILL;
@ClientString(id = 5530, message = "Reached the consecutive notifications limit.")
public static SystemMessageId REACHED_THE_CONSECUTIVE_NOTIFICATIONS_LIMIT;
@ClientString(id = 5531, message = "$s1 is under attack.")
public static SystemMessageId S1_IS_UNDER_ATTACK;
@ClientString(id = 5532, message = "$s1: Attacking $s2.")
public static SystemMessageId S1_ATTACKING_S2;
@ClientString(id = 5533, message = "$s1: Watch out for $s2!")
public static SystemMessageId S1_WATCH_OUT_FOR_S2;
@ClientString(id = 5534, message = "$s1: Protecting $s2.")
public static SystemMessageId S1_PROTECTING_S2;
@ClientString(id = 5535, message = "$s1: Abandoning $s2.")
public static SystemMessageId S1_ABANDONING_S2;
@ClientString(id = 5536, message = "$s1: Moving.")
public static SystemMessageId S1_MOVING;
@ClientString(id = 5537, message = "$s1: Be careful!")
public static SystemMessageId S1_BE_CAREFUL;
@ClientString(id = 5538, message = "You must be in a group to access the Group channel.")
public static SystemMessageId YOU_MUST_BE_IN_A_GROUP_TO_ACCESS_THE_GROUP_CHANNEL;
@ClientString(id = 6001, message = "The item has been successfully purchased.")
public static SystemMessageId THE_ITEM_HAS_BEEN_SUCCESSFULLY_PURCHASED2;
@@ -14296,9 +14566,6 @@ public final class SystemMessageId
@ClientString(id = 6205, message = "We're upgrading our systems, and you must migrate your account to continue playing. Click (BLUE02)(u)(a href='event:here')here(/a)(/u)(/BLUE02) to log into your NC Account")
public static SystemMessageId WE_RE_UPGRADING_OUR_SYSTEMS_AND_YOU_MUST_MIGRATE_YOUR_ACCOUNT_TO_CONTINUE_PLAYING_CLICK_BLUE02_U_U_BLUE02_TO_LOG_INTO_YOUR_NC_ACCOUNT;
@ClientString(id = 6206, message = "When you add offerings, the success rate can be increased up to 100%%. Your current success rate is $s1%%. Continue?")
public static SystemMessageId WHEN_YOU_ADD_OFFERINGS_THE_SUCCESS_RATE_CAN_BE_INCREASED_UP_TO_100_YOUR_CURRENT_SUCCESS_RATE_IS_S1_CONTINUE;
@ClientString(id = 6501, message = "You cannot bookmark this location because you do not have a My Teleport Flag.")
public static SystemMessageId YOU_CANNOT_BOOKMARK_THIS_LOCATION_BECAUSE_YOU_DO_NOT_HAVE_A_MY_TELEPORT_FLAG;
@@ -14419,6 +14686,9 @@ public final class SystemMessageId
@ClientString(id = 6832, message = "You cannot drop any more items in this zone. Please try again after picking up the item on the ground.")
public static SystemMessageId YOU_CANNOT_DROP_ANY_MORE_ITEMS_IN_THIS_ZONE_PLEASE_TRY_AGAIN_AFTER_PICKING_UP_THE_ITEM_ON_THE_GROUND;
@ClientString(id = 6833, message = "The character has already been blocked.")
public static SystemMessageId THE_CHARACTER_HAS_ALREADY_BEEN_BLOCKED;
@ClientString(id = 7001, message = "Cannot proceed until the current dice roll is over.")
public static SystemMessageId CANNOT_PROCEED_UNTIL_THE_CURRENT_DICE_ROLL_IS_OVER;
@@ -14434,7 +14704,7 @@ public final class SystemMessageId
@ClientString(id = 7005, message = "$c1 rolled the dice and got $s2 points.")
public static SystemMessageId C1_ROLLED_THE_DICE_AND_GOT_S2_POINTS;
@ClientString(id = 7006, message = "$c1 rolled the highest with $s2 points and acquired the $s3%.")
@ClientString(id = 7006, message = "$c1 rolled the highest with $s2 points and acquired the $s3.")
public static SystemMessageId C1_ROLLED_THE_HIGHEST_WITH_S2_POINTS_AND_ACQUIRED_THE_S3;
@ClientString(id = 7007, message = "A party member is rolling the dice, so the party cannot be disbanded.")
@@ -15425,7 +15695,7 @@ public final class SystemMessageId
public static SystemMessageId S1_HAS_BECOME_YOUR_STUDENT;
@ClientString(id = 7354, message = "$s1 day(s), $s2 hour(s), $s3 minute(s)")
public static SystemMessageId S1_DAY_S_S2_HOUR_S_S3_MINUTE_S;
public static SystemMessageId S1_DAY_S_S2_HOUR_S_S3_MINUTE_S_2;
@ClientString(id = 7355, message = "Your student has achieved a goal so you are sending a reward.")
public static SystemMessageId YOUR_STUDENT_HAS_ACHIEVED_A_GOAL_SO_YOU_ARE_SENDING_A_REWARD;

View File

@@ -641,7 +641,7 @@ public class EnterWorld implements IClientIncomingPacket
{
activeChar.sendPacket(new ExWorldChatCnt(activeChar));
}
activeChar.sendPacket(new ExOneDayReceiveRewardList(activeChar));
activeChar.sendPacket(new ExOneDayReceiveRewardList(activeChar, true));
activeChar.sendPacket(ExConnectedTimeAndGettableReward.STATIC_PACKET);
// Handle soulshots, disable all on EnterWorld

View File

@@ -24,6 +24,7 @@ import com.l2jmobius.gameserver.model.DailyMissionDataHolder;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
import com.l2jmobius.gameserver.network.serverpackets.ExConnectedTimeAndGettableReward;
import com.l2jmobius.gameserver.network.serverpackets.dailymission.ExOneDayReceiveRewardList;
/**
@@ -36,7 +37,7 @@ public class RequestOneDayRewardReceive implements IClientIncomingPacket
@Override
public boolean read(L2GameClient client, PacketReader packet)
{
_reward = packet.readC();
_reward = packet.readH();
return true;
}
@@ -50,12 +51,13 @@ public class RequestOneDayRewardReceive implements IClientIncomingPacket
}
final Collection<DailyMissionDataHolder> reward = DailyMissionData.getInstance().getDailyMissionData(_reward);
if (reward.isEmpty())
if ((reward == null) || reward.isEmpty())
{
return;
}
reward.stream().filter(o -> o.isDisplayable(player)).forEach(r -> r.requestReward(player));
player.sendPacket(new ExOneDayReceiveRewardList(player));
player.sendPacket(new ExConnectedTimeAndGettableReward());
player.sendPacket(new ExOneDayReceiveRewardList(player, true));
}
}

View File

@@ -28,14 +28,13 @@ import com.l2jmobius.gameserver.network.serverpackets.dailymission.ExOneDayRecei
public class RequestTodoList implements IClientIncomingPacket
{
private int _tab;
@SuppressWarnings("unused")
private int _showAllLevels;
private boolean _showAllLevels;
@Override
public boolean read(L2GameClient client, PacketReader packet)
{
_tab = packet.readC(); // Daily Reward = 9, Event = 1, Instance Zone = 2
_showAllLevels = packet.readC(); // Disabled = 0, Enabled = 1
_showAllLevels = packet.readC() == 1; // Disabled = 0, Enabled = 1
return true;
}
@@ -62,7 +61,7 @@ public class RequestTodoList implements IClientIncomingPacket
// }
case 9:
{
player.sendPacket(new ExOneDayReceiveRewardList(player));
player.sendPacket(new ExOneDayReceiveRewardList(player, _showAllLevels));
break;
}
}

View File

@@ -0,0 +1,40 @@
/*
* 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 com.l2jmobius.gameserver.network.clientpackets.monsterbook;
import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
import com.l2jmobius.gameserver.network.serverpackets.monsterbook.ExMonsterBookCloseForce;
/**
* @author Mobius
*/
public class RequestMonsterBookClose implements IClientIncomingPacket
{
@Override
public boolean read(L2GameClient client, PacketReader packet)
{
return true;
}
@Override
public void run(L2GameClient client)
{
client.sendPacket(new ExMonsterBookCloseForce());
}
}

View File

@@ -0,0 +1,42 @@
/*
* 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 com.l2jmobius.gameserver.network.clientpackets.monsterbook;
import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
import com.l2jmobius.gameserver.network.serverpackets.monsterbook.ExMonsterBook;
import com.l2jmobius.gameserver.network.serverpackets.monsterbook.ExMonsterBookOpenResult;
/**
* @author Mobius
*/
public class RequestMonsterBookOpen implements IClientIncomingPacket
{
@Override
public boolean read(L2GameClient client, PacketReader packet)
{
return true;
}
@Override
public void run(L2GameClient client)
{
client.sendPacket(new ExMonsterBookOpenResult(true));
client.sendPacket(new ExMonsterBook(client.getActiveChar()));
}
}

View File

@@ -0,0 +1,42 @@
/*
* 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 com.l2jmobius.gameserver.network.clientpackets.monsterbook;
import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
/**
* @author Mobius
*/
public class RequestMonsterBookReward implements IClientIncomingPacket
{
private int _id;
@Override
public boolean read(L2GameClient client, PacketReader packet)
{
_id = packet.readH();
return true;
}
@Override
public void run(L2GameClient client)
{
client.getActiveChar().rewardMonsterBook(_id);
}
}

View File

@@ -0,0 +1,65 @@
/*
* 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 com.l2jmobius.gameserver.network.clientpackets.raidbossinfo;
import java.util.ArrayList;
import java.util.List;
import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.gameserver.instancemanager.DBSpawnManager;
import com.l2jmobius.gameserver.instancemanager.DBSpawnManager.DBStatusType;
import com.l2jmobius.gameserver.instancemanager.GrandBossManager;
import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
import com.l2jmobius.gameserver.network.serverpackets.raidbossinfo.ExRaidBossSpawnInfo;
/**
* @author Mobius
*/
public class RequestRaidBossSpawnInfo implements IClientIncomingPacket
{
private final List<Integer> _bossIds = new ArrayList<>();
@Override
public boolean read(L2GameClient client, PacketReader packet)
{
final int count = packet.readD();
for (int i = 0; i < count; i++)
{
final int bossId = packet.readD();
if (DBSpawnManager.getInstance().getNpcStatusId(bossId).equals(DBStatusType.ALIVE))
{
_bossIds.add(bossId);
}
else if (GrandBossManager.getInstance().getBossStatus(bossId) == 0)
{
_bossIds.add(bossId);
}
/*
* else { String message = "Could not find spawn info for boss " + bossId; final L2NpcTemplate template = NpcData.getInstance().getTemplate(bossId); if (template != null) { message += " - " + template.getName() + "."; } else { message += " - NPC template not found."; }
* System.out.println(message); }
*/
}
return true;
}
@Override
public void run(L2GameClient client)
{
client.sendPacket(new ExRaidBossSpawnInfo(_bossIds));
}
}

View File

@@ -0,0 +1,39 @@
/*
* 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 com.l2jmobius.gameserver.network.clientpackets.raidbossinfo;
import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
/**
* @author Mobius
*/
public class RequestRaidServerInfo implements IClientIncomingPacket
{
@Override
public boolean read(L2GameClient client, PacketReader packet)
{
// System.out.println("RequestRaidServerInfo");
return true;
}
@Override
public void run(L2GameClient client)
{
}
}

View File

@@ -78,6 +78,7 @@ public abstract class AbstractMessagePacket<T extends AbstractMessagePacket<?>>
}
}
private static final byte TYPE_FACTION_NAME = 24; // c(short), faction id.
// id 22 d (shared with 1-3,17,22
// id 21 h
// id 20 c
@@ -346,6 +347,12 @@ public abstract class AbstractMessagePacket<T extends AbstractMessagePacket<?>>
return (T) this;
}
public final T addFactionName(int factionId)
{
append(new SMParam(TYPE_FACTION_NAME, factionId));
return (T) this;
}
public final T addPopup(int target, int attacker, int damage)
{
append(new SMParam(TYPE_POPUP_ID, new int[]
@@ -397,6 +404,7 @@ public abstract class AbstractMessagePacket<T extends AbstractMessagePacket<?>>
{
case TYPE_ELEMENT_NAME:
case TYPE_BYTE:
case TYPE_FACTION_NAME:
{
packet.writeC(param.getIntValue());
break;

View File

@@ -115,6 +115,7 @@ public class CharInfo implements IClientOutgoingPacket
OutgoingPackets.CHAR_INFO.writeId(packet);
final CeremonyOfChaosEvent event = _activeChar.getEvent(CeremonyOfChaosEvent.class);
final CeremonyOfChaosMember cocPlayer = event != null ? event.getMember(_activeChar.getObjectId()) : null;
packet.writeC(0x00); // Grand Crusade
packet.writeD(_x); // Confirmed
packet.writeD(_y); // Confirmed
packet.writeD(_z); // Confirmed

View File

@@ -54,6 +54,10 @@ public class DropItem implements IClientOutgoingPacket
packet.writeC(0x00);
// packet.writeD(0x01); if above C == true (1) then packet.readD()
packet.writeC(_item.getEnchantLevel()); // Grand Crusade
packet.writeC(_item.getAugmentation() != null ? 1 : 0); // Grand Crusade
packet.writeC(_item.getSpecialAbilities().size()); // Grand Crusade
return true;
}
}

View File

@@ -36,5 +36,4 @@ public class ExConnectedTimeAndGettableReward implements IClientOutgoingPacket
}
return true;
}
}

View File

@@ -46,6 +46,7 @@ public class ExInzoneWaiting implements IClientOutgoingPacket
{
OutgoingPackets.EX_INZONE_WAITING_INFO.writeId(packet);
packet.writeC(0x00); // identify if this is a response to a passive request
packet.writeD(_currentTemplateId);
packet.writeD(_instanceTimes.size());
for (Entry<Integer, Long> entry : _instanceTimes.entrySet())

View File

@@ -0,0 +1,44 @@
/*
* 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 com.l2jmobius.gameserver.network.serverpackets;
import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.network.OutgoingPackets;
public class ExPrivateStoreBuyingResult implements IClientOutgoingPacket
{
private final int _objectId;
private final long _count;
private final String _seller;
public ExPrivateStoreBuyingResult(int objectId, long count, String seller)
{
_objectId = objectId;
_count = count;
_seller = seller;
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_PRIVATE_STORE_BUYING_RESULT.writeId(packet);
packet.writeD(_objectId);
packet.writeQ(_count);
packet.writeS(_seller);
return true;
}
}

View File

@@ -0,0 +1,44 @@
/*
* 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 com.l2jmobius.gameserver.network.serverpackets;
import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.network.OutgoingPackets;
public class ExPrivateStoreSellingResult implements IClientOutgoingPacket
{
private final int _objectId;
private final long _count;
private final String _buyer;
public ExPrivateStoreSellingResult(int objectId, long count, String buyer)
{
_objectId = objectId;
_count = count;
_buyer = buyer;
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_PRIVATE_STORE_SELLING_RESULT.writeId(packet);
packet.writeD(_objectId);
packet.writeQ(_count);
packet.writeS(_buyer);
return true;
}
}

View File

@@ -34,7 +34,6 @@ public class ExShowCastleInfo implements IClientOutgoingPacket
private ExShowCastleInfo()
{
}
@Override
@@ -65,6 +64,9 @@ public class ExShowCastleInfo implements IClientOutgoingPacket
}
packet.writeD(castle.getTaxPercent(TaxType.BUY));
packet.writeD((int) (castle.getSiege().getSiegeDate().getTimeInMillis() / 1000));
packet.writeC(castle.getSiege().isInProgress() ? 0x01 : 0x00); // Grand Crusade
packet.writeC(castle.getSide().ordinal()); // Grand Crusade
}
return true;
}

View File

@@ -36,15 +36,11 @@ public class ExShowSeedMapInfo implements IClientOutgoingPacket
packet.writeD(2); // seed count
// Seed of Destruction
packet.writeD(-246857); // x coord
packet.writeD(251960); // y coord
packet.writeD(4331); // z coord
packet.writeD(1); // id 1? Grand Crusade
packet.writeD(2770 + GraciaSeedsManager.getInstance().getSoDState()); // sys msg id
// Seed of Infinity
packet.writeD(-213770); // x coord
packet.writeD(210760); // y coord
packet.writeD(4400); // z coord
packet.writeD(2); // id 2? Grand Crusade
// Manager not implemented yet
packet.writeD(2766); // sys msg id
return true;

View File

@@ -61,6 +61,7 @@ public final class MultiSellList implements IClientOutgoingPacket
packet.writeD(_finished ? 0x01 : 0x00); // finished
packet.writeD(PAGE_SIZE); // size of pages
packet.writeD(_size); // list length
packet.writeC(0x00); // Grand Crusade
packet.writeC(_list.isNewMultisell() ? 0x01 : 0x00); // new multisell window
packet.writeD(0x20); // Always 32 oO

View File

@@ -46,6 +46,7 @@ public class MyTargetSelected implements IClientOutgoingPacket
{
OutgoingPackets.MY_TARGET_SELECTED.writeId(packet);
packet.writeD(0x01); // Grand Crusade
packet.writeD(_objectId);
packet.writeH(_color);
packet.writeD(0x00);

View File

@@ -28,6 +28,9 @@ public final class SpawnItem implements IClientOutgoingPacket
private final int _x, _y, _z;
private int _stackable;
private long _count;
private int _enchantLevl;
private int _isAugmented;
private int _saCount;
public SpawnItem(L2Object obj)
{
@@ -42,12 +45,18 @@ public final class SpawnItem implements IClientOutgoingPacket
_itemId = item.getDisplayId();
_stackable = item.isStackable() ? 0x01 : 0x00;
_count = item.getCount();
_enchantLevl = item.getEnchantLevel();
_isAugmented = item.getAugmentation() != null ? 1 : 0;
_saCount = item.getSpecialAbilities().size();
}
else
{
_itemId = obj.getPoly().getPolyId();
_stackable = 0;
_count = 1;
_enchantLevl = 0;
_isAugmented = 0;
_saCount = 0;
}
}
@@ -66,6 +75,10 @@ public final class SpawnItem implements IClientOutgoingPacket
packet.writeD(_stackable);
packet.writeQ(_count);
packet.writeD(0x00); // c2
packet.writeC(_enchantLevl); // Grand Crusade
packet.writeC(_isAugmented); // Grand Crusade
packet.writeC(_saCount); // Grand Crusade
return true;
}
}

View File

@@ -21,7 +21,6 @@ import java.util.List;
import com.l2jmobius.Config;
import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.data.xml.impl.AbilityPointsData;
import com.l2jmobius.gameserver.data.xml.impl.SkillTreesData;
import com.l2jmobius.gameserver.model.L2SkillLearn;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
@@ -35,7 +34,7 @@ import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
public class ExAcquireAPSkillList implements IClientOutgoingPacket
{
private final int _abilityPoints, _usedAbilityPoints;
private final long _price;
// private final long _price; Removed on Grand Crusade
private final boolean _enable;
private final List<Skill> _skills = new ArrayList<>();
@@ -43,7 +42,7 @@ public class ExAcquireAPSkillList implements IClientOutgoingPacket
{
_abilityPoints = activeChar.getAbilityPoints();
_usedAbilityPoints = activeChar.getAbilityPointsUsed();
_price = AbilityPointsData.getInstance().getPrice(_abilityPoints);
// _price = AbilityPointsData.getInstance().getPrice(_abilityPoints); Removed on Grand Crusade
for (L2SkillLearn sk : SkillTreesData.getInstance().getAbilitySkillTree().values())
{
final Skill knownSkill = activeChar.getKnownSkill(sk.getSkillId());
@@ -65,8 +64,8 @@ public class ExAcquireAPSkillList implements IClientOutgoingPacket
packet.writeD(_enable ? 1 : 0);
packet.writeQ(Config.ABILITY_POINTS_RESET_ADENA);
packet.writeQ(_price);
packet.writeD(Config.ABILITY_MAX_POINTS);
// packet.writeQ(_price); Removed on Grand Crusade
// packet.writeD(Config.ABILITY_MAX_POINTS); Removed on Grand Crusade
packet.writeD(_abilityPoints);
packet.writeD(_usedAbilityPoints);
packet.writeD(_skills.size());

View File

@@ -17,6 +17,7 @@
package com.l2jmobius.gameserver.network.serverpackets.dailymission;
import java.time.LocalDate;
import java.util.Calendar;
import java.util.Collection;
import com.l2jmobius.commons.network.PacketWriter;
@@ -34,7 +35,7 @@ public class ExOneDayReceiveRewardList implements IClientOutgoingPacket
final L2PcInstance _player;
private final Collection<DailyMissionDataHolder> _rewards;
public ExOneDayReceiveRewardList(L2PcInstance player)
public ExOneDayReceiveRewardList(L2PcInstance player, boolean showAllLevels)
{
_player = player;
_rewards = DailyMissionData.getInstance().getDailyMissionData(player);
@@ -45,7 +46,27 @@ public class ExOneDayReceiveRewardList implements IClientOutgoingPacket
{
OutgoingPackets.EX_ONE_DAY_RECEIVE_REWARD_LIST.writeId(packet);
packet.writeC(0x23);
Calendar calendar = Calendar.getInstance();
long currentTimeMillis = calendar.getTimeInMillis();
int timeRemaining = 0;
calendar.add(Calendar.HOUR, 24);
calendar.set(Calendar.HOUR, 6);
calendar.set(Calendar.MINUTE, 30);
timeRemaining = (int) (((calendar.getTimeInMillis() - currentTimeMillis) / 1000) / 60); // minutes
packet.writeD(timeRemaining); // Until 06:30 UTC
calendar.add(Calendar.WEEK_OF_MONTH, 1);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
timeRemaining = (int) (((calendar.getTimeInMillis() - currentTimeMillis) / 1000) / 60); // minutes
packet.writeD(timeRemaining); // Until Monday 06:30 UTC
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 1);
timeRemaining = (int) (((calendar.getTimeInMillis() - currentTimeMillis) / 1000) / 60); // minutes
packet.writeD(timeRemaining); // Until 1st of month 06:30 UTC
packet.writeC(0x17);
packet.writeD(_player.getClassId().getId());
packet.writeD(LocalDate.now().getDayOfWeek().ordinal()); // Day of week
packet.writeD(_rewards.size());
@@ -53,8 +74,8 @@ public class ExOneDayReceiveRewardList implements IClientOutgoingPacket
{
packet.writeH(reward.getId());
packet.writeC(reward.getStatus(_player));
packet.writeC(reward.getRequiredCompletions() > 0 ? 0x01 : 0x00);
packet.writeD(reward.getProgress(_player));
packet.writeC(reward.getRequiredCompletions() > 1 ? 0x01 : 0x00);
packet.writeD(Math.min(reward.getProgress(_player), _player.getLevel()));
packet.writeD(reward.getRequiredCompletions());
}
return true;

View File

@@ -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 com.l2jmobius.gameserver.network.serverpackets.monsterbook;
import java.util.ArrayList;
import java.util.List;
import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.data.xml.impl.MonsterBookData;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.holders.MonsterBookCardHolder;
import com.l2jmobius.gameserver.network.OutgoingPackets;
import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
/**
* @author Mobius
*/
public class ExMonsterBook implements IClientOutgoingPacket
{
final L2PcInstance _player;
final List<Integer> _cardIds = new ArrayList<>();
public ExMonsterBook(L2PcInstance player)
{
_player = player;
for (MonsterBookCardHolder card : MonsterBookData.getInstance().getMonsterBookCards())
{
if (player.getMonsterBookKillCount(card.getId()) > 0)
{
_cardIds.add(card.getId());
}
}
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_MONSTER_BOOK.writeId(packet);
packet.writeH(_cardIds.size()); // loop count
for (int cardId : _cardIds)
{
packet.writeH(cardId); // card id
packet.writeC(_player.getMonsterBookRewardLevel(cardId)); // player reward level
packet.writeD(_player.getMonsterBookKillCount(cardId)); // player kills
}
return true;
}
}

View File

@@ -0,0 +1,38 @@
/*
* 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 com.l2jmobius.gameserver.network.serverpackets.monsterbook;
import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.network.OutgoingPackets;
import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
/**
* @author Mobius
*/
public class ExMonsterBookCloseForce implements IClientOutgoingPacket
{
public ExMonsterBookCloseForce()
{
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_MONSTER_BOOK_CLOSE_FORCE.writeId(packet);
return true;
}
}

View File

@@ -0,0 +1,38 @@
/*
* 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 com.l2jmobius.gameserver.network.serverpackets.monsterbook;
import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.network.OutgoingPackets;
import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
/**
* @author Mobius
*/
public class ExMonsterBookFactionUI implements IClientOutgoingPacket
{
public ExMonsterBookFactionUI()
{
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_MONSTER_BOOK_REWARD_FACTION_UI.writeId(packet);
return true;
}
}

View File

@@ -0,0 +1,42 @@
/*
* 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 com.l2jmobius.gameserver.network.serverpackets.monsterbook;
import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.network.OutgoingPackets;
import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
/**
* @author Mobius
*/
public class ExMonsterBookOpenResult implements IClientOutgoingPacket
{
private final boolean _isOpen;
public ExMonsterBookOpenResult(boolean isOpen)
{
_isOpen = isOpen;
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_MONSTER_BOOK_OPEN_RESULT.writeId(packet);
packet.writeC(_isOpen ? 1 : 0);
return true;
}
}

View File

@@ -0,0 +1,38 @@
/*
* 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 com.l2jmobius.gameserver.network.serverpackets.monsterbook;
import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.network.OutgoingPackets;
import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
/**
* @author Mobius
*/
public class ExMonsterBookRewardIcon implements IClientOutgoingPacket
{
public ExMonsterBookRewardIcon()
{
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_MONSTER_BOOK_REWARD_ICON.writeId(packet);
return true;
}
}

View File

@@ -0,0 +1,50 @@
/*
* 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 com.l2jmobius.gameserver.network.serverpackets.raidbossinfo;
import java.util.List;
import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.network.OutgoingPackets;
import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
/**
* @author Mobius
*/
public class ExRaidBossSpawnInfo implements IClientOutgoingPacket
{
private final List<Integer> _bossIds;
public ExRaidBossSpawnInfo(List<Integer> bossIds)
{
_bossIds = bossIds;
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_RAID_BOSS_SPAWN_INFO.writeId(packet);
packet.writeD(_bossIds.size()); // alive count
for (int id : _bossIds) // alive ids
{
packet.writeD(id);
}
return true;
}
}

View File

@@ -0,0 +1,38 @@
/*
* 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 com.l2jmobius.gameserver.network.serverpackets.raidbossinfo;
import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.network.OutgoingPackets;
import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
/**
* @author Mobius
*/
public class ExRaidServerInfo implements IClientOutgoingPacket
{
public ExRaidServerInfo()
{
}
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_RAID_SERVER_INFO.writeId(packet);
return true;
}
}