 |
|

07.08.2015, 11:26
|
|
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами:
5952720
Репутация:
6527
|
|
Продолжаем про пакеты говорить:
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class RequestTimeCheck extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeC(0xC1);
//TODO d
}
}
Сообщение от Спойлер
package core.gameserver.network.l2.c2s;
public class RequestTimeCheck extends L2GameClientPacket
{
private int unk, unk2;
/**
* format: dd
*/
@Override
protected void readImpl()
{
unk = readD();
unk2 = readD();
}
@Override
protected void runImpl()
{
//TODO not implemented
}
}
А где реализация пакета? Да нету зачем, ведь у нас реализовано согласно официальному контенту, а этот пакет наверное масоны придумали но ладно.
Сообщение от Спойлер
package core.gameserver.network.l2.c2s;
public class RequestTeleport extends L2GameClientPacket
{
private int unk, _type, unk2, unk3, unk4;
@Override
protected void readImpl()
{
unk = readD();
_type = readD();
if(_type == 2)
{
unk2 = readD();
unk3 = readD();
}
else if(_type == 3)
{
unk2 = readD();
unk3 = readD();
unk4 = readD();
}
}
@Override
protected void runImpl()
{
//TODO not implemented
}
}
Реализовано от бога просто, с унками которые так объясняют, что там сказано
Сообщение от Спойлер
package core.gameserver.network.l2.c2s;
public class RequestRemainTime extends L2GameClientPacket
{
@Override
protected void readImpl()
{
}
@Override
protected void runImpl()
{
//TODO not implemented
}
}
Чудо трава отпусти меня.
Сообщение от Спойлер
package core.gameserver.network.l2.c2s;
/**
* format: chS
*/
public class RequestPCCafeCouponUse extends L2GameClientPacket
{
// format: (ch)S
private String _unknown;
@Override
protected void readImpl()
{
_unknown = readS();
}
@Override
protected void runImpl()
{
//TODO not implemented
}
}
Опа, а как же так одна из глобальных механик официального сервера и не реализовано, ну да зачем нам работа Pc Cafe купонов и не только нужна верная, ведь и так мы можем заявить типо у нас эмулятор реализован согласно официальному серверу
|
|
|

07.08.2015, 11:41
|
|
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами:
5952720
Репутация:
6527
|
|
Немного отвлечемя от пакетов и посмотри на ивенты официального сервера, ну у гринда же типо всё по официальному серверу и смотрим:
April Fools - Happy April Fool's Day
Evas Inferno - Lineage 2 - Jagd auf Feuer-Geister - Eva´s Inferno hat begonnen - News auf PlayNation.de
Hallowen Event - Ивент - Хеллоуин
Raising Rudolph - Lineage II : The Chaotic Throne (Raising Rudolf)
Lovers Jubilee
April Fools 10
Так вот где они реализованы у человека которого всё согласно официальному серверу? Да нигде а теперь смотрим пакетку этих вещей:
Сообщение от Спойлер
public class RequestExBR_EventRankerList extends L2GameClientPacket
{
private int unk, unk2, unk3;
/**
* format: ddd
*/
@Override
protected void readImpl()
{
unk = readD();
unk2 = readD();
unk3 = readD();
}
@Override
protected void runImpl()
{
//TODO not implemented
}
}
Ну классный пакет для ивента по офф, но он не сделал.
Сообщение от Спойлер
package org.mmocore.gameserver.network.l2.s2c;
public class ExBR_BuffEventState extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0xDB);
// TODO dddd
}
}
Ну что же опять не реализовано , но у нас же всё согласно официальному серверу.
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExBR_LoadEventTopRankers extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0xBD);
// TODO ddddd
}
}
Опять нету важного пакета для официального сервера.
Вот так вот у нас реализован официальный контент.
|
|
|

07.08.2015, 12:00
|
|
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами:
5952720
Репутация:
6527
|
|
RequestEnchantItem.java - Сюда не смотреть там творится полный ад.
Сообщение от Спойлер
package core.gameserver.network.l2.c2s;
import core.gameserver.model.Player;
import core.gameserver.network.l2.s2c.ExGetBookMarkInfo;
public class RequestDeleteBookMarkSlot extends L2GameClientPacket
{
private int slot;
@Override
protected void readImpl()
{
slot = readD();
}
@Override
protected void runImpl()
{
Player activeChar = getClient().getActiveChar();
if(activeChar != null)
{
//TODO Msg.THE_SAVED_TELEPORT_LOCATION_WILL_BE_DELETED_DO _YOU_WISH_TO_CONTINUE
activeChar.bookmarks.remove(slot);
activeChar.sendPacket(new ExGetBookMarkInfo(activeChar));
}
}
}
До сих пор остался тот шлак Msg.java . И даже сообщение не нашли верное для реализации
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class PledgeExtendedInfo extends L2GameServerPacket
{
@Override
protected final void writeImpl()
{
writeC(0x8A);
//TODO SddSddddddddSd
}
}
Ну вот опять почему не реализовано? Ну наверное, что было овером реализовано так и осталось.
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class OustAllianceMemberPledge extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeC(0xAC);
//TODO d
}
}
Где реализация пакета? ГДЕ?
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
import org.apache.commons.lang3.StringUtils;
import core.gameserver.Config;
import core.gameserver.model.base.TeamType;
import core.gameserver.model.pledge.Alliance;
import core.gameserver.model.Creature;
import core.gameserver.model.pledge.Clan;
import core.gameserver.model.Summon;
import core.gameserver.model.instances.NpcInstance;
import core.gameserver.network.l2.components.NpcString;
import core.gameserver.utils.Location;
public class NpcInfo extends L2GameServerPacket
{
private boolean can_writeImpl = false;
private int _npcObjId, _npcId, running, incombat, dead, _showSpawnAnimation;
private int _runSpd, _walkSpd, _mAtkSpd, _pAtkSpd, _rhand, _lhand, _enchantEffect;
private int karma, pvp_flag, _abnormalEffect, _abnormalEffect2, clan_id, clan_crest_id, ally_id, ally_crest_id, _formId, _titleColor;
private double colHeight, colRadius, currentColHeight, currentColRadius;
private boolean _isAttackable, _isNameAbove, isFlying;
private Location _loc;
private String _name = StringUtils.EMPTY;
private String _title = StringUtils.EMPTY;
private boolean _showName;
private int _state;
private NpcString _nameNpcString = NpcString.NONE;
private NpcString _titleNpcString = NpcString.NONE;
private TeamType _team;
public NpcInfo(NpcInstance cha, Creature attacker)
{
_npcId = cha.getDisplayId() != 0 ? cha.getDisplayId() : cha.getTemplate().npcId;
_isAttackable = attacker != null && cha.isAutoAttackable(attacker);
_rhand = cha.getRightHandItem();
_lhand = cha.getLeftHandItem();
_enchantEffect = cha.getEnchantEffect();
if(Config.SERVER_SIDE_NPC_NAME || cha.getTemplate().displayId != 0 || cha.getName() != cha.getTemplate().name)
_name = cha.getName();
if(Config.SERVER_SIDE_NPC_TITLE || cha.getTemplate().displayId != 0 || cha.getTitle() != cha.getTemplate().title)
_title = cha.getTitle();
_showSpawnAnimation = cha.getSpawnAnimation();
_showName = cha.isShowName();
_state = cha.getNpcState();
_nameNpcString = cha.getNameNpcString();
_titleNpcString = cha.getTitleNpcString();
common(cha);
}
public NpcInfo(Summon cha, Creature attacker)
{
if(cha.getPlayer() != null && cha.getPlayer().isInvisible())
return;
_npcId = cha.getTemplate().npcId;
_isAttackable = cha.isAutoAttackable(attacker);
_rhand = 0;
_lhand = 0;
_enchantEffect = 0;
_showName = true;
_name = cha.getName();
_title = cha.getTitle();
_showSpawnAnimation = cha.getSpawnAnimation();
common(cha);
}
private void common(Creature cha)
{
colHeight = cha.getColHeight();
colRadius = cha.getColRadius();
currentColHeight = cha.getColHeight();
currentColRadius = cha.getColRadius();
_npcObjId = cha.getObjectId();
_loc = cha.getLoc();
_mAtkSpd = cha.getMAtkSpd();
//
Clan clan = cha.getClan();
Alliance alliance = clan == null ? null : clan.getAlliance();
//
clan_id = clan == null ? 0 : clan.getClanId();
clan_crest_id = clan == null ? 0 : clan.getCrestId();
//
ally_id = alliance == null ? 0 : alliance.getAllyId();
ally_crest_id = alliance == null ? 0 : alliance.getAllyCrestId();
_runSpd = cha.getRunSpeed();
_walkSpd = cha.getWalkSpeed();
karma = cha.getKarma();
pvp_flag = Config.RVRMODE_ENABLE ? 0 : cha.getPvpFlag();
_pAtkSpd = cha.getPAtkSpd();
running = cha.isRunning() ? 1 : 0;
incombat = cha.isInCombat() ? 1 : 0;
dead = cha.isAlikeDead() ? 1 : 0;
_abnormalEffect = cha.getAbnormalEffect();
_abnormalEffect2 = cha.getAbnormalEffect2();
isFlying = cha.isFlying();
_team = cha.getTeam();
_formId = cha.getFormId();
_isNameAbove = cha.isNameAbove();
_titleColor = (cha.isSummon() || cha.isPet()) ? 1 : 0;
can_writeImpl = true;
}
public NpcInfo update()
{
_showSpawnAnimation = 1;
return this;
}
@Override
protected final void writeImpl()
{
if(!can_writeImpl)
return;
writeC(0x0c);
//ddddddddddddddddddffffdddcccccSSddddddddccffddddcc d
writeD(_npcObjId);
writeD(_npcId + 1000000); // npctype id c4
writeD(_isAttackable ? 1 : 0);
writeD(_loc.x);
writeD(_loc.y);
writeD(_loc.z + Config.CLIENT_Z_SHIFT);
writeD(_loc.h);
writeD(0x00);
writeD(_mAtkSpd);
writeD(_pAtkSpd);
writeD(_runSpd);
writeD(_walkSpd);
writeD(_runSpd /*_swimRunSpd*//*0x32*/); // swimspeed
writeD(_walkSpd/*_swimWalkSpd*//*0x32*/); // swimspeed
writeD(_runSpd/*_flRunSpd*/);
writeD(_walkSpd/*_flWalkSpd*/);
writeD(_runSpd/*_flyRunSpd*/);
writeD(_walkSpd/*_flyWalkSpd*/);
writeF(1.100000023841858); // взято из клиента
writeF(_pAtkSpd / 277.478340719);
writeF(colRadius);
writeF(colHeight);
writeD(_rhand); // right hand weapon
writeD(0); //TODO chest
writeD(_lhand); // left hand weapon
writeC(_isNameAbove ? 1 : 0); // 2.2: name above char 1=true ... ??; 2.3: 1 - normal, 2 - dead
writeC(running);
writeC(incombat);
writeC(dead);
writeC(_showSpawnAnimation); // invisible ?? 0=false 1=true 2=summoned (only works if model has a summon animation)
writeD(_nameNpcString.getId());
writeS(_name);
writeD(_titleNpcString.getId());
writeS(_title);
writeD(_titleColor); // 0- светло зеленый титул(моб), 1 - светло синий(пет)/отображение текущего МП
writeD(pvp_flag);
writeD(karma); // hmm karma ??
writeD(_abnormalEffect); // C2
writeD(clan_id);
writeD(clan_crest_id);
writeD(ally_id);
writeD(ally_crest_id);
writeC(isFlying ? 2 : 0); // C2
writeC(_team.ordinal()); // team aura 1-blue, 2-red
writeF(currentColRadius); // тут что-то связанное с colRadius
writeF(currentColHeight); // тут что-то связанное с colHeight
writeD(_enchantEffect); // C4
writeD(0x00); // writeD(_npc.isFlying() ? 1 : 0); // C6
writeD(0x00);
writeD(_formId);// great wolf type
writeC(_showName ? 0x01 : 0x00); // show name
writeC(_showName ? 0x01 : 0x00); // show title
writeD(_abnormalEffect2);
writeD(_state);
}
}
Опа, а почему тут присутствуют нули? Ведь всё реализовано согласно официальному серверу.
Сообщение от Спойлер
package core.gameserver.network.l2.c2s;
/**
* Format: (c) ddd
* d: dx
* d: dy
* d: dz
*/
public class MoveWithDelta extends L2GameClientPacket
{
@SuppressWarnings("unused")
private int _dx, _dy, _dz;
@Override
protected void readImpl()
{
_dx = readD();
_dy = readD();
_dz = readD();
}
@Override
protected void runImpl()
{
// TODO this
}
}
А потом вылазиют такие сообщения, админ у меня косячит движение и посмотрев пакет выше Validate Position можно вешаться.
Ну давайте посмотри все пакет GamePacketHandler:
Сообщение от Спойлер
package core.gameserver.network.l2;
import java.nio.BufferUnderflowException;
import java.nio.ByteBuffer;
import core.commons.net.nio.impl.IClientFactory;
import core.commons.net.nio.impl.IMMOExecutor;
import core.commons.net.nio.impl.IPacketHandler;
import core.commons.net.nio.impl.MMOConnection;
import core.commons.net.nio.impl.ReceivablePacket;
import core.gameserver.Config;
import core.gameserver.ThreadPoolManager;
import core.gameserver.network.l2.c2s.*;
//import GameGuard.network.l2.c2s.GameGuardReply;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public final class GamePacketHandler implements IPacketHandler, IClientFactory, IMMOExecutor
{
private static final Logger _log = LoggerFactory.getLogger(GamePacketHandler.class);
@SuppressWarnings("static-access")
@Override
public ReceivablePacket handlePacket(ByteBuffer buf, GameClient client)
{
int id = buf.get() & 0xFF;
ReceivablePacket msg = null;
try
{
int id2 = 0;
switch(client.getState())
{
case CONNECTED:
switch(id)
{
case 0x00:
msg = new RequestStatus();
break;
case 0x0e:
msg = new ProtocolVersion();
break;
case 0x2b:
msg = new AuthLogin();
break;
case 0xCB:
//msg = new GameGuardReply();
break;
default:
client.onUnknownPacket();
break;
}
break;
case AUTHED:
switch(id)
{
case 0x00:
msg = new Logout();
break;
case 0x0c:
msg = new CharacterCreate(); //RequestCharacterCreate();
break;
case 0x0d:
msg = new CharacterDelete(); //RequestCharacterDelete();
break;
case 0x12:
msg = new CharacterSelected(); //CharacterSelect();
break;
case 0x13:
msg = new NewCharacter(); //RequestNewCharacter();
break;
case 0x7b:
msg = new CharacterRestore(); //RequestCharacterRestore();
break;
case 0xCB:
//msg = new GameGuardReply();
break;
case 0xd0:
int id3 = buf.getShort() & 0xffff;
switch(id3)
{
case 0x36:
msg = new GotoLobby();
break;
case 0x93:
msg = new RequestEx2ndPasswordCheck();
break;
case 0x94:
msg = new RequestEx2ndPasswordVerify();
break;
case 0x95:
msg = new RequestEx2ndPasswordReq();
break;
default:
client.onUnknownPacket();
break;
}
break;
default:
client.onUnknownPacket();
break;
}
break;
case IN_GAME:
switch(id)
{
case 0x00:
msg = new Logout();
break;
case 0x01:
msg = new AttackRequest();
break;
case 0x02:
// msg = new ?();
break;
case 0x03:
msg = new RequestStartPledgeWar();
break;
case 0x04:
// msg = new ?();
break;
case 0x05:
msg = new RequestStopPledgeWar();
break;
case 0x06:
// msg = RequestSCCheck(); // ? Format: cdx
break;
case 0x07:
// msg = new ReplyGameGuardQuery();
//здесь совсем другой пакет ResponseAuthGameGuard[cddddd] (c) Drin
break;
case 0x08:
// msg = new ?();
break;
case 0x09:
msg = new RequestSetPledgeCrest();
break;
case 0x0a:
// msg = new ?();
break;
case 0x0b:
msg = new RequestGiveNickName();
break;
case 0x0c:
// wtf???
break;
case 0x0d:
// wtf???
break;
case 0x0f:
msg = new MoveBackwardToLocation();
break;
case 0x10:
// msg = new Say(); Format: cS // старый ?
break;
case 0x11:
msg = new EnterWorld();
break;
case 0x12:
// wtf???
break;
case 0x14:
msg = new RequestItemList();
break;
case 0x15:
// msg = new RequestEquipItem(); // старый?
// Format: cdd server id = %d Slot = %d
break;
case 0x16:
//msg = new RequestUnEquipItem();
break;
case 0x17:
msg = new RequestDropItem();
break;
case 0x18:
// msg = new ?();
break;
case 0x19:
msg = new UseItem();
break;
case 0x1a:
msg = new TradeRequest();
break;
case 0x1b:
msg = new AddTradeItem();
break;
case 0x1c:
msg = new TradeDone();
break;
case 0x1d:
// msg = new ?();
break;
case 0x1e:
// msg = new ?();
break;
case 0x1f:
msg = new Action();
break;
case 0x20:
// msg = new ?();
break;
case 0x21:
// msg = new ?();
break;
case 0x22:
// msg = new RequestLinkHtml();
break;
case 0x23:
msg = new RequestBypassToServer();
break;
case 0x24:
msg = new RequestBBSwrite(); //RequestBBSWrite();
break;
case 0x25:
msg = new RequestCreatePledge();
break;
case 0x26:
msg = new RequestJoinPledge();
break;
case 0x27:
msg = new RequestAnswerJoinPledge();
break;
case 0x28:
msg = new RequestWithdrawalPledge();
break;
case 0x29:
msg = new RequestOustPledgeMember();
break;
case 0x2a:
// msg = new ?();
break;
case 0x2c:
msg = new RequestGetItemFromPet();
break;
case 0x2d:
// RequestDismissParty
break;
case 0x2e:
msg = new RequestAllyInfo();
break;
case 0x2f:
msg = new RequestCrystallizeItem();
break;
case 0x30:
// RequestPrivateStoreManage, устарел
break;
case 0x31:
msg = new SetPrivateStoreSellList();
break;
case 0x32:
// RequestPrivateStoreManageCancel, устарел
break;
case 0x33:
msg = new RequestTeleport();
break;
case 0x34:
//msg = new RequestSocialAction();
break;
case 0x35:
// ChangeMoveType, устарел
break;
case 0x36:
// ChangeWaitType, устарел
break;
case 0x37:
msg = new RequestSellItem();
break;
case 0x38:
msg = new RequestMagicSkillList();
break;
case 0x39:
msg = new RequestMagicSkillUse();
break;
case 0x3a:
msg = new Appearing(); //Appering();
break;
case 0x3b:
if(Config.ALLOW_WAREHOUSE)
msg = new SendWareHouseDepositList();
break;
case 0x3c:
msg = new SendWareHouseWithDrawList();
break;
case 0x3d:
msg = new RequestShortCutReg();
break;
case 0x3e:
// msg = new RequestShortCutUse(); // Format: cddc ?
break;
case 0x3f:
msg = new RequestShortCutDel();
break;
case 0x40:
msg = new RequestBuyItem();
break;
case 0x41:
// msg = new RequestDismissPledge(); //Format: c ?
break;
case 0x42:
msg = new RequestJoinParty();
break;
case 0x43:
msg = new RequestAnswerJoinParty();
break;
case 0x44:
msg = new RequestWithDrawalParty();
break;
case 0x45:
msg = new RequestOustPartyMember();
break;
case 0x46:
msg = new RequestDismissParty();
break;
case 0x47:
msg = new CannotMoveAnymore();
break;
case 0x48:
msg = new RequestTargetCanceld();
break;
case 0x49:
msg = new Say2C();
break;
// -- maybe GM packet's
case 0x4a:
id2 = buf.get() & 0xff;
switch(id2)
{
case 0x00:
// msg = new SendCharacterInfo(); // Format: S
break;
case 0x01:
// msg = new SendSummonCmd(); // Format: S
break;
case 0x02:
// msg = new SendServerStatus(); // Format: (noargs)
break;
case 0x03:
// msg = new SendL2ParamSetting(); // Format: dd
break;
default:
client.onUnknownPacket();
break;
}
break;
case 0x4b:
// msg = new ?();
break;
case 0x4c:
// msg = new ?();
break;
case 0x4d:
msg = new RequestPledgeMemberList();
break;
case 0x4e:
// msg = new ?();
break;
case 0x4f:
// msg = new RequestMagicItem(); // Format: c ?
break;
case 0x50:
msg = new RequestSkillList(); // trigger
break;
case 0x51:
// msg = new ?();
break;
case 0x52:
msg = new MoveWithDelta();
break;
case 0x53:
msg = new RequestGetOnVehicle();
break;
case 0x54:
msg = new RequestGetOffVehicle();
break;
case 0x55:
msg = new AnswerTradeRequest();
break;
case 0x56:
msg = new RequestActionUse();
break;
case 0x57:
msg = new RequestRestart();
break;
case 0x58:
msg = new RequestSiegeInfo();
break;
case 0x59:
msg = new ValidatePosition();
break;
case 0x5a:
msg = new RequestSEKCustom();
break;
case 0x5b:
msg = new StartRotatingC();
break;
case 0x5c:
msg = new FinishRotatingC();
break;
case 0x5d:
// msg = new ?();
break;
case 0x5e:
msg = new RequestShowBoard();
break;
case 0x5f:
msg = new RequestEnchantItem();
break;
case 0x60:
msg = new RequestDestroyItem();
break;
case 0x61:
// msg = new ?();
break;
case 0x62:
msg = new RequestQuestList();
break;
case 0x63:
msg = new RequestQuestAbort(); //RequestDestroyQuest();
break;
case 0x64:
// msg = new ?();
break;
case 0x65:
msg = new RequestPledgeInfo();
break;
case 0x66:
msg = new RequestPledgeExtendedInfo();
break;
case 0x67:
msg = new RequestPledgeCrest();
break;
case 0x68:
// msg = new ?();
break;
case 0x69:
// msg = new ?();
break;
case 0x6a:
// msg = new ?();
break;
case 0x6b:
msg = new RequestSendL2FriendSay();
break;
case 0x6c:
msg = new RequestShowMiniMap(); //RequestOpenMinimap();
break;
case 0x6d:
msg = new RequestSendMsnChatLog();
break;
case 0x6e:
msg = new RequestReload(); // record video
break;
case 0x6f:
msg = new RequestHennaEquip();
break;
case 0x70:
msg = new RequestHennaUnequipList();
break;
case 0x71:
msg = new RequestHennaUnequipInfo();
break;
case 0x72:
msg = new RequestHennaUnequip();
break;
case 0x73:
msg = new RequestAquireSkillInfo(); //RequestAcquireSkillInfo();
break;
case 0x74:
msg = new SendBypassBuildCmd();
break;
case 0x75:
msg = new RequestMoveToLocationInVehicle();
break;
case 0x76:
msg = new CannotMoveAnymoreInVehicle();
break;
case 0x77:
msg = new RequestFriendInvite();
break;
case 0x78:
msg = new RequestFriendAddReply();
break;
case 0x79:
msg = new RequestFriendList();
break;
case 0x7a:
msg = new RequestFriendDel();
break;
case 0x7c:
msg = new RequestAquireSkill();
break;
case 0x7d:
msg = new RequestRestartPoint();
break;
case 0x7e:
msg = new RequestGMCommand();
break;
case 0x7f:
msg = new RequestPartyMatchConfig();
break;
case 0x80:
msg = new RequestPartyMatchList();
break;
case 0x81:
msg = new RequestPartyMatchDetail();
break;
case 0x82:
msg = new RequestPrivateStoreList();
break;
case 0x83:
msg = new RequestPrivateStoreBuy();
break;
case 0x84:
// msg = new ReviveReply(); // format: cd ?
break;
case 0x85:
msg = new RequestTutorialLinkHtml();
break;
case 0x86:
msg = new RequestTutorialPassCmdToServer();
break;
case 0x87:
msg = new RequestTutorialQuestionMark(); //RequestTutorialQuestionMarkPressed();
break;
case 0x88:
msg = new RequestTutorialClientEvent();
break;
case 0x89:
msg = new RequestPetition();
break;
case 0x8a:
msg = new RequestPetitionCancel();
break;
case 0x8b:
msg = new RequestGmList();
break;
case 0x8c:
msg = new RequestJoinAlly();
break;
case 0x8d:
msg = new RequestAnswerJoinAlly();
break;
case 0x8e:
// Команда /allyleave - выйти из альянса
msg = new RequestWithdrawAlly();
break;
case 0x8f:
// Команда /allydismiss - выгнать клан из альянса
msg = new RequestOustAlly();
break;
case 0x90:
// Команда /allydissolve - распустить альянс
msg = new RequestDismissAlly();
break;
case 0x91:
msg = new RequestSetAllyCrest();
break;
case 0x92:
msg = new RequestAllyCrest();
break;
case 0x93:
msg = new RequestChangePetName();
break;
case 0x94:
msg = new RequestPetUseItem();
break;
case 0x95:
msg = new RequestGiveItemToPet();
break;
case 0x96:
msg = new RequestPrivateStoreQuitSell();
break;
case 0x97:
msg = new SetPrivateStoreMsgSell();
break;
case 0x98:
msg = new RequestPetGetItem();
break;
case 0x99:
msg = new RequestPrivateStoreBuyManage();
break;
case 0x9a:
msg = new SetPrivateStoreBuyList();
break;
case 0x9b:
//
break;
case 0x9c:
msg = new RequestPrivateStoreQuitBuy();
break;
case 0x9d:
msg = new SetPrivateStoreMsgBuy();
break;
case 0x9e:
//
break;
case 0x9f:
msg = new RequestPrivateStoreBuySellList();
break;
case 0xa0:
msg = new RequestTimeCheck();
break;
case 0xa1:
// msg = new ?();
break;
case 0xa2:
// msg = new ?();
break;
case 0xa3:
// msg = new ?();
break;
case 0xa4:
// msg = new ?();
break;
case 0xa5:
// msg = new ?();
break;
case 0xa6:
//msg = new RequestSkillCoolTime(); //Deprecated ?
break;
case 0xa7:
msg = new RequestPackageSendableItemList();
break;
case 0xa8:
msg = new RequestPackageSend();
break;
case 0xa9:
msg = new RequestBlock();
break;
case 0xaa:
// msg = new RequestCastleSiegeInfo(); // format: cd ?
break;
case 0xab:
msg = new RequestCastleSiegeAttackerList();
break;
case 0xac:
msg = new RequestCastleSiegeDefenderList();
break;
case 0xad:
msg = new RequestJoinCastleSiege();
break;
case 0xae:
msg = new RequestConfirmCastleSiegeWaitingList();
break;
case 0xaf:
msg = new RequestSetCastleSiegeTime();
break;
case 0xb0:
msg = new RequestMultiSellChoose();
break;
case 0xb1:
msg = new NetPing();
break;
case 0xb2:
msg = new RequestRemainTime();
break;
case 0xb3:
msg = new BypassUserCmd();
break;
case 0xb4:
msg = new SnoopQuit();
break;
case 0xb5:
msg = new RequestRecipeBookOpen();
break;
case 0xb6:
msg = new RequestRecipeItemDelete();
break;
case 0xb7:
msg = new RequestRecipeItemMakeInfo();
break;
case 0xb8:
msg = new RequestRecipeItemMakeSelf();
break;
case 0xb9:
// msg = new RequestRecipeShopManageList(); deprecated // format: c
break;
case 0xba:
msg = new RequestRecipeShopMessageSet();
break;
case 0xbb:
msg = new RequestRecipeShopListSet();
break;
case 0xbc:
msg = new RequestRecipeShopManageQuit();
break;
case 0xbd:
msg = new RequestRecipeShopManageCancel();
break;
case 0xbe:
msg = new RequestRecipeShopMakeInfo();
break;
case 0xbf:
msg = new RequestRecipeShopMakeDo();
break;
case 0xc0:
msg = new RequestRecipeShopSellList();
break;
case 0xc1:
msg = new RequestObserverEnd();
break;
case 0xc2:
//msg = new VoteSociality(); // Recommend
break;
case 0xc3:
msg = new RequestHennaList(); //RequestHennaItemList();
break;
case 0xc4:
msg = new RequestHennaItemInfo();
break;
case 0xc5:
msg = new RequestBuySeed();
break;
case 0xc6:
msg = new ConfirmDlg();
break;
case 0xc7:
msg = new RequestPreviewItem();
break;
case 0xc8:
msg = new RequestSSQStatus();
break;
case 0xc9:
msg = new PetitionVote();
break;
case 0xca:
// msg = new ?();
break;
case 0xcb:
//msg = new GameGuardReply();
break;
case 0xcc:
msg = new RequestPledgePower();
break;
case 0xcd:
msg = new RequestMakeMacro();
break;
case 0xce:
msg = new RequestDeleteMacro();
break;
case 0xcf:
msg = new RequestProcureCrop(); // ?
break;
case 0xd0:
int id3 = buf.getShort() & 0xffff;
switch(id3)
{
case 0x00:
// msg = new ?();
break;
case 0x01:
msg = new RequestManorList();
break;
case 0x02:
msg = new RequestProcureCropList();
break;
case 0x03:
msg = new RequestSetSeed();
break;
case 0x04:
msg = new RequestSetCrop();
break;
case 0x05:
msg = new RequestWriteHeroWords();
break;
case 0x06:
msg = new RequestExMPCCAskJoin(); //RequestExAskJoinMPCC();
break;
case 0x07:
msg = new RequestExMPCCAcceptJoin(); //RequestExAcceptJoinMPCC();
break;
case 0x08:
msg = new RequestExOustFromMPCC();
break;
case 0x09:
msg = new RequestOustFromPartyRoom();
break;
case 0x0a:
msg = new RequestDismissPartyRoom();
break;
case 0x0b:
msg = new RequestWithdrawPartyRoom();
break;
case 0x0c:
msg = new RequestHandOverPartyMaster();
break;
case 0x0d:
msg = new RequestAutoSoulShot();
break;
case 0x0e:
msg = new RequestExEnchantSkillInfo();
break;
case 0x0f:
msg = new RequestExEnchantSkill();
break;
case 0x10:
msg = new RequestPledgeCrestLarge();
break;
case 0x11:
msg = new RequestSetPledgeCrestLarge();
break;
case 0x12:
msg = new RequestPledgeSetAcademyMaster();
break;
case 0x13:
msg = new RequestPledgePowerGradeList();
break;
case 0x14:
msg = new RequestPledgeMemberPowerInfo();
break;
case 0x15:
msg = new RequestPledgeSetMemberPowerGrade();
break;
case 0x16:
msg = new RequestPledgeMemberInfo();
break;
case 0x17:
msg = new RequestPledgeWarList();
break;
case 0x18:
msg = new RequestExFishRanking();
break;
case 0x19:
msg = new RequestPCCafeCouponUse();
break;
case 0x1a:
// msg = new ?();
// format: (ch)b, b - array размером в 64 байта
break;
case 0x1b:
msg = new RequestDuelStart();
break;
case 0x1c:
msg = new RequestDuelAnswerStart();
break;
case 0x1d:
msg = new RequestTutorialClientEvent(); //RequestExSetTutorial();
// Format: d / требует отладки, ИМХО, это совсем другой пакет (с) Drin
break;
case 0x1e:
msg = new RequestExRqItemLink(); // chat item links
break;
case 0x1f:
// CanNotMoveAnymore(AirShip)
// format: (ch)ddddd
break;
case 0x20:
msg = new RequestExMoveToLocationInAirShip();
break;
case 0x21:
msg = new RequestKeyMapping();
break;
case 0x22:
msg = new RequestSaveKeyMapping();
break;
case 0x23:
msg = new RequestExRemoveItemAttribute();
break;
case 0x24:
msg = new RequestSaveInventoryOrder(); // сохранение порядка инвентаря
break;
case 0x25:
msg = new RequestExitPartyMatchingWaitingRoom();
break;
case 0x26:
msg = new RequestConfirmTargetItem();
break;
case 0x27:
msg = new RequestConfirmRefinerItem();
break;
case 0x28:
msg = new RequestConfirmGemStone();
break;
case 0x29:
msg = new RequestOlympiadObserverEnd();
break;
case 0x2a:
msg = new RequestCursedWeaponList();
break;
case 0x2b:
msg = new RequestCursedWeaponLocation();
break;
case 0x2c:
msg = new RequestPledgeReorganizeMember();
break;
case 0x2d:
msg = new RequestExMPCCShowPartyMembersInfo();
break;
case 0x2e:
msg = new RequestExOlympiadObserverEnd(); // не уверен (в клиенте называется RequestOlympiadMatchList)
break;
case 0x2f:
msg = new RequestAskJoinPartyRoom();
break;
case 0x30:
msg = new AnswerJoinPartyRoom();
break;
case 0x31:
msg = new RequestListPartyMatchingWaitingRoom();
break;
case 0x32:
msg = new RequestExEnchantSkillSafe();
break;
case 0x33:
msg = new RequestExEnchantSkillUntrain();
break;
case 0x34:
msg = new RequestExEnchantSkillRouteChange();
break;
case 0x35:
msg = new RequestEnchantItemAttribute();
break;
case 0x36:
//RequestGotoLobby - случается при многократном нажатии кнопки "вход"
break;
case 0x38:
msg = new RequestExMoveToLocationAirShip();
break;
case 0x39:
msg = new RequestBidItemAuction();
break;
case 0x3a:
msg = new RequestInfoItemAuction();
break;
case 0x3b:
msg = new RequestExChangeName();
break;
case 0x3c:
msg = new RequestAllCastleInfo();
break;
case 0x3d:
msg = new RequestAllFortressInfo();
break;
case 0x3e:
msg = new RequestAllAgitInfo();
break;
case 0x3f:
msg = new RequestFortressSiegeInfo();
break;
case 0x40:
msg = new RequestGetBossRecord();
break;
case 0x41:
msg = new RequestRefine();
break;
case 0x42:
msg = new RequestConfirmCancelItem();
break;
case 0x43:
msg = new RequestRefineCancel();
break;
case 0x44:
msg = new RequestExMagicSkillUseGround();
break;
case 0x45:
msg = new RequestDuelSurrender();
break;
case 0x46:
msg = new RequestExEnchantSkillInfoDetail();
break;
/*case 0x47: ?*/
case 0x48:
msg = new RequestFortressMapInfo();
break;
case 0x49:
msg = new RequestPVPMatchRecord();
break;
case 0x4a:
msg = new SetPrivateStoreWholeMsg();
break;
case 0x4b:
msg = new RequestDispel();
break;
case 0x4c:
msg = new RequestExTryToPutEnchantTargetItem();
break;
case 0x4d:
msg = new RequestExTryToPutEnchantSupportItem();
break;
case 0x4e:
msg = new RequestExCancelEnchantItem();
break;
case 0x4f:
msg = new RequestChangeNicknameColor();
break;
case 0x50:
msg = new RequestResetNickname();
break;
case 0x51:
int id4 = buf.getInt();
switch(id4)
{
case 0x00:
msg = new RequestBookMarkSlotInfo();
break;
case 0x01:
msg = new RequestSaveBookMarkSlot();
break;
case 0x02:
msg = new RequestModifyBookMarkSlot();
break;
case 0x03:
msg = new RequestDeleteBookMarkSlot();
break;
case 0x04:
msg = new RequestTeleportBookMark();
break;
case 0x05:
msg = new RequestChangeBookMarkSlot();
break;
default:
client.onUnknownPacket();
break;
}
break;
case 0x52:
msg = new RequestWithDrawPremiumItem();
break;
case 0x53:
msg = new RequestExJump();
break;
case 0x54:
msg = new RequestExStartShowCrataeCubeRank();
break;
case 0x55:
msg = new RequestExStopShowCrataeCubeRank();
break;
case 0x56:
msg = new NotifyStartMiniGame();
break;
case 0x57:
msg = new RequestExJoinDominionWar();
break;
case 0x58:
msg = new RequestExDominionInfo();
break;
case 0x59:
msg = new RequestExCleftEnter();
break;
case 0x5A:
msg = new RequestExCubeGameChangeTeam();
break;
case 0x5B:
msg = new RequestExEndScenePlayer();
break;
case 0x5C:
msg = new RequestExCubeGameReadyAnswer();
break;
case 0x5D:
msg = new RequestExListMpccWaiting();
break;
case 0x5E:
msg = new RequestExManageMpccRoom();
break;
case 0x5F:
msg = new RequestExJoinMpccRoom();
break;
case 0x60:
msg = new RequestExOustFromMpccRoom();
break;
case 0x61:
msg = new RequestExDismissMpccRoom();
break;
case 0x62:
msg = new RequestExWithdrawMpccRoom();
break;
case 0x63:
msg = new RequestExSeedPhase();
break;
case 0x64:
msg = new RequestExMpccPartymasterList();
break;
case 0x65:
msg = new RequestExPostItemList();
break;
case 0x66:
msg = new RequestExSendPost();
break;
case 0x67:
msg = new RequestExRequestReceivedPostList();
break;
case 0x68:
msg = new RequestExDeleteReceivedPost();
break;
case 0x69:
msg = new RequestExRequestReceivedPost();
break;
case 0x6A:
msg = new RequestExReceivePost();
break;
case 0x6B:
msg = new RequestExRejectPost();
break;
case 0x6C:
msg = new RequestExRequestSentPostList();
break;
case 0x6D:
msg = new RequestExDeleteSentPost();
break;
case 0x6E:
msg = new RequestExRequestSentPost();
break;
case 0x6F:
msg = new RequestExCancelSentPost();
break;
case 0x70:
msg = new RequestExShowNewUserPetition();
break;
case 0x71:
msg = new RequestExShowStepTwo();
break;
case 0x72:
msg = new RequestExShowStepThree();
break;
case 0x73:
//msg = new ExRaidReserveResult();
break;
case 0x75:
msg = new RequestExRefundItem();
break;
case 0x76:
msg = new RequestExBuySellUIClose();
break;
case 0x77:
msg = new RequestExEventMatchObserverEnd();
break;
case 0x78:
msg = new RequestPartyLootModification();
break;
case 0x79:
msg = new AnswerPartyLootModification();
break;
case 0x7A:
msg = new AnswerCoupleAction();
break;
case 0x7B:
msg = new RequestExBR_EventRankerList();
break;
case 0x7C:
//msg = new RequestAskMemberShip();
break;
case 0x7D:
msg = new RequestAddExpandQuestAlarm();
break;
case 0x7E:
msg = new RequestVoteNew();
break;
case 0x7F:
_log.info("D0:7F");
break;
case 0x80:
_log.info("D0:80");
break;
case 0x81:
_log.info("D0:81");
break;
case 0x82:
_log.info("D0:82");
break;
case 0x83:
int id5 = buf.getInt();
switch(id5)
{
/* TODO:
case 0x01:
//msg = new RequestExAgitInitialize chd 0x01
break;
case 0x02:
//msg = new RequestExAgitDetailInfo chdcd 0x02
break;
case 0x03:
//msg = new RequestExMyAgitState chd 0x03
break;
case 0x04:
//msg = new RequestExRegisterAgitForBidStep1 chd 0x04
break;
case 0x05:
//msg = new RequestExRegisterAgitForBidStep2 chddQd 0x05
//msg = new RequestExRegisterAgitForBidStep3 chddQd 0x05 -no error? 0x05
break;
case 0x07:
//msg = new RequestExConfirmCancelRegisteringAgit chd 0x07
break;
case 0x08:
//msg = new RequestExProceedCancelRegisteringAgit chd 0x08
break;
case 0x09:
//msg = new RequestExConfirmCancelAgitBid chdd 0x09
break;
case 0x10:
//msg = new RequestExReBid chdd 0x10
break;
case 0x11:
//msg = new RequestExAgitListForLot chd 0x11
break;
case 0x12:
//msg = new RequestExApplyForAgitLotStep1 chdc 0x12
break;
case 0x13:
//msg = new RequestExApplyForAgitLotStep2 chdc 0x13
break;
case 0x14:
//msg = new RequestExAgitListForBid chdd 0x14
break;
case 0x0D:
//msg = new RequestExApplyForBidStep1 chdd 0x0D
break;
case 0x0E:
//msg = new RequestExApplyForBidStep2 chddQ 0x0E
break;
case 0x0F:
//msg = new RequestExApplyForBidStep3 chddQ 0x0F
break;
case 0x09:
//msg = new RequestExConfirmCancelAgitLot chdc 0x09
break;
case 0x0A:
//msg = new RequestExProceedCancelAgitLot chdc 0x0A
break;
case 0x0A:
//msg = new RequestExProceedCancelAgitBid chdd 0x0A
break;
*/
}
break;
case 0x84:
msg = new RequestExAddPostFriendForPostBox();
break;
case 0x85:
msg = new RequestExDeletePostFriendForPostBox();
break;
case 0x86:
msg = new RequestExShowPostFriendListForPostBox();
break;
case 0x87:
msg = new RequestExFriendListForPostBox();
break;
case 0x88:
msg = new RequestOlympiadMatchList();
break;
case 0x89:
msg = new RequestExBR_GamePoint();
break;
case 0x8A:
msg = new RequestExBR_ProductList();
break;
case 0x8B:
msg = new RequestExBR_ProductInfo();
break;
case 0x8C:
msg = new RequestExBR_BuyProduct();
break;
case 0x8D:
msg = new RequestExBR_RecentProductList();
break;
case 0x8E:
msg = new RequestBR_MiniGameLoadScores();
break;
case 0x8F:
msg = new RequestBR_MiniGameInsertScore();
break;
case 0x90:
msg = new RequestExBR_LectureMark();
break;
case 0x91:
msg = new RequestGoodsInventoryInfo();
break;
case 0x92:
//msg = new RequestUseGoodsInventoryItem();
break;
default:
client.onUnknownPacket();
break;
}
break;
default:
{
client.onUnknownPacket();
break;
}
}
break;
}
}
catch(BufferUnderflowException e)
{
client.onPacketReadFail();
}
return msg;
}
@Override
public GameClient create(MMOConnection con)
{
return new GameClient(con);
}
@Override
public void execute(Runnable r)
{
ThreadPoolManager.getInstance().execute(r);
}
}
Красным выделил, зачем комментить если это и так в сборке есть
Синим выделил, какая классная реализация пакетки, что закоменчено. P.S там их больше ещё пакетов для реализации надо. Но при этом заявление, реализация согласно официальному контенту.
И вообще данную вещь можно было переписать по нормальному.
|
|
|

07.08.2015, 12:16
|
|
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами:
5952720
Репутация:
6527
|
|
Продолжаем дальше рассматривать пакетку:
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class FlySelfDestination extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x43);
// TODO dddd
}
}
И опять не реализованный пакет, мне это уже начинает надоедать.
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExTutorialList extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x6B);
// todo writeB(new byte[128]);
}
}
И опять, не доделано
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExShowTerritory extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x89);
// TODO ddd[dd]
}
}
Опять не сделано
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExShowPetitionHtml extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0xB1);
// TODO dx[dcS]
}
}
Опять не работает
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExShowLines extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0xA5);
// TODO hdcc cx[ddd]
}
}
Чёрт, да сколько то можно.
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExSetMpccRouting extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x37);
// TODO d
}
}
Когда я увижу нормальную реализацию, всё согласно официальному серверу.
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExServerPrimitive extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x11);
// TODO Sdddddd {[c(Sdddd ddd ddd|)] Sddddddd}
}
}
?
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExRaidReserveResult extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0xB6);
// TODO dx[dddd]
}
}
Боже мой, а реализации то нету.
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExPVPMatchRecord extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x7E);
// TODO ddddd d[Sdd] d[Sdd] (currentState:%d blueTeamTotalKillCnt:%d, redTeamTotalKillCnt:%d)
}
}
:ROAD SO FAR: тут уже пора плакать, один из важных моментов официального сервера, а у нас тут такое творится.
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExPartyMemberRenamed extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0xA6);
// TODO ddd
}
}
Чёрт, где пакет реализованный?
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExEventMatchUserInfo extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x02);
// TODO dSdddddddd
}
}
Сообщение от Спойлер
public class ExEventMatchTeamUnlocked extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x06);
// TODO dc
}
}
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
import java.util.ArrayList;
import java.util.List;
import core.gameserver.model.Player;
import core.gameserver.model.Summon;
public class ExEventMatchTeamInfo extends L2GameServerPacket
{
@SuppressWarnings("unused")
private int leader_id, loot;
private List members = new ArrayList();
public ExEventMatchTeamInfo(List party, Player exclude)
{
leader_id = party.get(0).getObjectId();
loot = party.get(0).getParty().getLootDistribution();
for(Player member : party)
if(!member.equals(exclude))
members.add(new EventMatchTeamInfo(member));
}
@Override
protected void writeImpl()
{
writeEx(0x1C);
// TODO dcd[dSdddddddddd]
}
public static class EventMatchTeamInfo
{
public String _name, pet_Name;
public int _id, curCp, maxCp, curHp, maxHp, curMp, maxMp, level, class_id, race_id;
public int pet_id, pet_NpcId, pet_curHp, pet_maxHp, pet_curMp, pet_maxMp, pet_level;
public EventMatchTeamInfo(Player member)
{
_name = member.getName();
_id = member.getObjectId();
curCp = (int) member.getCurrentCp();
maxCp = member.getMaxCp();
curHp = (int) member.getCurrentHp();
maxHp = member.getMaxHp();
curMp = (int) member.getCurrentMp();
maxMp = member.getMaxMp();
level = member.getLevel();
class_id = member.getClassId().getId();
race_id = member.getRace().ordinal();
Summon pet = member.getPet();
if(pet != null)
{
pet_id = pet.getObjectId();
pet_NpcId = pet.getNpcId() + 1000000;
pet_Name = pet.getName();
pet_curHp = (int) pet.getCurrentHp();
pet_maxHp = pet.getMaxHp();
pet_curMp = (int) pet.getCurrentMp();
pet_maxMp = pet.getMaxMp();
pet_level = pet.getLevel();
}
else
pet_id = 0;
}
}
}
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExEventMatchScore extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x10);
// TODO ddd
}
}
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExEventMatchObserver extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x0E);
// TODO dccSS
}
}
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExEventMatchMessage extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x0F);
// TODO cS
}
}
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExEventMatchManage extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x30);
// TODO dccScScd[ccdSdd]
}
}
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExEventMatchFirecracker extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x05);
// TODO d
}
}
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExEventMatchCreate extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x1D);
// TODO d
}
}
Вот это да супер реализация, механики официального сервера. Ну у нас же "Всё как на офф".
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExEventMatchLockResult extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x0B);
// TODO пока не реализован даже в клиенте
}
}
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExEventMatchList extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0x0D);
// TODO пока не реализован даже в коиенте
}
}
Отмазался то как он, ну вообще то HF 5 есть эти пакеты
|
|
|

07.08.2015, 12:18
|
|
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами:
5952720
Репутация:
6527
|
|
Продолжаем рассматривать пакеты:
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExCleftState extends L2GameServerPacket
{
public static final int CleftState_Total = 0;
public static final int CleftState_TowerDestroy = 1;
public static final int CleftState_CatUpdate = 2;
public static final int CleftState_Result = 3;
public static final int CleftState_PvPKill = 4;
private int CleftState = 0; //TODO
@Override
protected void writeImpl()
{
writeEx(0x95);
writeD(CleftState);
switch(CleftState)
{
case CleftState_Total:
//dddddSS - BTeam Point:%d CatID:%d CatName:%s RemainSec:%d RTeam Point:%d CatID:%d CatName:%s RemainSec:%d
//BlueTeam: d[dddd] - Total List TeamID:%d PlayerID:%d Kill:%d Death:%d Tower:%d
//RedTeam: d[dddd] - Total List TeamID:%d PlayerID:%d Kill:%d Death:%d Tower:%d
break;
case CleftState_TowerDestroy:
//ddddddddd - RemainSec:%d BlueTeamPt:%d RedTeamPt:%d TeamID:%d TowerType:%d PlayerID:%d CleftTowerCount:%d KillCount:%d DeathCount:%d
break;
case CleftState_CatUpdate:
//dddS - RemainSec:%d TeamID:%d CatID:%d CatName:%s
break;
case CleftState_Result:
//dd - WinTeamID:%d LoseTeamID:%d
break;
case CleftState_PvPKill:
//ddd - BTeamPoint:%d RTeamPoint:%d
//ddddd - PvPKill01 TeamID:%d PlayerID:%d CleftTowerCount:%d Kill:%d Death:%d RemainSec:%d
//ddddd - PvPKill02 TeamID:%d PlayerID:%d CleftTowerCount:%d Kill:%d Death:%d
break;
}
}
}
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExCleftList extends L2GameServerPacket
{
public static final int CleftType_Close = -1;
public static final int CleftType_Total = 0;
public static final int CleftType_Add = 1;
public static final int CleftType_Remove = 2;
public static final int CleftType_TeamChange = 3;
private int CleftType = 0; //TODO
@Override
protected void writeImpl()
{
writeEx(0x94);
writeD(CleftType);
switch(CleftType)
{
case CleftType_Total:
//dd (MinMemberCount:%d bBalancedMatch:%d)
// BlueTeam: d[dS] (PlayerID:%d PlayerName:%s)
// RedTeam: d[dS] (PlayerID:%d PlayerName:%s)
break;
case CleftType_Add:
//ddS - TeamID:%d PlayerID:%d PlayerName:%s
break;
case CleftType_Remove:
//dd - TeamID:%d PlayerID:%d
break;
case CleftType_TeamChange:
//ddd - PlayerID:%d From:%d To:%d
break;
case CleftType_Close:
break;
}
}
}
Как так то, у нас же всё согласно официальному серверу .
|
|
|

07.08.2015, 12:20
|
|
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами:
5952720
Репутация:
6527
|
|
Вернусь обратно на немного к Магазину(Итем-маллу) и подкину ещё один супер пакет:
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExBR_RecentProductListPacket extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeEx(0xDC);
// TODO dx[dhddddcccccdd]
}
}
Так вот покажи мне официальную механику даже такой вещи
|
|
|

07.08.2015, 12:25
|
|
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами:
5952720
Репутация:
6527
|
|
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExBlockUpSetState extends L2GameServerPacket
{
private int BlockUpStateType = 0; //TODO
@Override
protected void writeImpl()
{
writeEx(0x98);
writeD(BlockUpStateType);
switch(BlockUpStateType)
{
case 0:
//dddddd
break;
case 1:
//dd
break;
case 2:
//ddd
break;
}
}
}
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ExBlockUpSetList extends L2GameServerPacket
{
private int BlockUpType = 0; //TODO
@Override
protected void writeImpl()
{
writeEx(0x97);
writeD(BlockUpType);
switch(BlockUpType)
{
case 0:
//dd
//d[dS]
//d[dS]
break;
case 1:
//dddS
break;
case 2:
//ddd
break;
case 3:
//d
break;
case 4: //nothing
break;
case 5:
//ddd
break;
case -1: //nothing
break;
}
}
}
Вот это да, а как он будет слать таблицы правильные, но всё как на официальном сервере было заявлено, я не вижу.
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class DismissAlliance extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeC(0xAD);
//TODO d
}
}
А где реализация?
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class DeleteRadar extends L2GameServerPacket
{
@Override
protected final void writeImpl()
{
writeC(0xB8);
//TODO ddd
}
}
Опять ничего не реализовано.
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
public class ClientAction extends L2GameServerPacket
{
@Override
protected void writeImpl()
{
writeC(0x8F);
//TODO d
}
}
Круто. Молодец отлично реализовано, нет слов. Согласно официальному серверу.
Сообщение от Спойлер
package core.gameserver.network.l2.s2c;
import core.gameserver.Config;
import core.gameserver.instancemanager.CursedWeaponsManag er;
import core.gameserver.instancemanager.ReflectionManager;
import core.gameserver.model.Creature;
import core.gameserver.model.Player;
import core.gameserver.model.base.TeamType;
import core.gameserver.model.instances.DecoyInstance;
import core.gameserver.model.items.Inventory;
import core.gameserver.model.items.PcInventory;
import core.gameserver.model.matching.MatchingRoom;
import core.gameserver.model.pledge.Alliance;
import core.gameserver.model.pledge.Clan;
import core.gameserver.skills.effects.EffectCubic;
import core.gameserver.utils.Location;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class CharInfo extends L2GameServerPacket
{
private static final Logger _log = LoggerFactory.getLogger(CharInfo.class);
private int[][] _inv;
private int _mAtkSpd, _pAtkSpd;
private int _runSpd, _walkSpd, _swimSpd, _flRunSpd, _flWalkSpd, _flyRunSpd, _flyWalkSpd;
private Location _loc, _fishLoc;
private String _name, _title;
private int _objId, _race, _sex, base_class, pvp_flag, karma, rec_have;
private double speed_move, speed_atack, col_radius, col_height;
private int hair_style, hair_color, face, _abnormalEffect, _abnormalEffect2;
private int clan_id, clan_crest_id, large_clan_crest_id, ally_id, ally_crest_id, class_id;
private int _sit, _run, _combat, _dead, private_store, _enchant;
private int _noble, _hero, _fishing, mount_type;
private int plg_class, pledge_type, clan_rep_score, cw_level, mount_id;
private int _nameColor, _title_color, _transform, _agathion, _clanBoatObjectId;
private EffectCubic[] cubics;
private boolean _isPartyRoomLeader, _isFlying;
private TeamType _team;
public CharInfo(Player cha)
{
this((Creature) cha);
}
public CharInfo(DecoyInstance cha)
{
this((Creature) cha);
}
public CharInfo(Creature cha)
{
if(cha == null)
{
System.out.println("CharInfo: cha is null!");
Thread.dumpStack();
return;
}
if(cha.isInvisible())
return;
if(cha.isDeleted())
return;
Player player = cha.getPlayer();
if(player == null)
return;
if(player.isInBoat())
{
_loc = player.getInBoatPosition();
if(player.isClanAirShipDriver())
{
_clanBoatObjectId = player.getBoat().getObjectId();
}
}
if (_loc == null)
_loc = cha.getLoc();
_objId = cha.getObjectId();
// Проклятое оружие и трансформации для ТВ скрывают имя и все остальные опознавательные знаки
if(player.getTransformationName() != null || (player.getReflection() == ReflectionManager.GIRAN_HARBOR || player.getReflection() == ReflectionManager.PARNASSUS) && player.getPrivateStoreType() != Player.STORE_PRIVATE_NONE)
{
_name = player.getTransformationName() != null ? player.getTransformationName() : player.getName();
_title = "";
clan_id = 0;
clan_crest_id = 0;
ally_id = 0;
ally_crest_id = 0;
large_clan_crest_id = 0;
if(player.isCursedWeaponEquipped())
cw_level = CursedWeaponsManager.getInstance().getLevel(player .getCursedWeaponEquippedId());
}
else
{
_name = player.getName();
if(player.getPrivateStoreType() != Player.STORE_PRIVATE_NONE)
_title = "";
else if(!player.isConnected() && !player.isPhantom())
{
_title = Config.DEFAULT_LANG.equalsIgnoreCase("ru") ? "РАЗЪЕДИНЕН" : "DISCONNECTED";
_title_color = 255;
}
else
{
_title = player.getTitle();
_title_color = player.getTitleColor();
}
Clan clan = player.getClan();
Alliance alliance = clan == null ? null : clan.getAlliance();
//
clan_id = clan == null ? 0 : clan.getClanId();
clan_crest_id = clan == null ? 0 : clan.getCrestId();
large_clan_crest_id = clan == null ? 0 : clan.getCrestLargeId();
//
ally_id = alliance == null ? 0 : alliance.getAllyId();
ally_crest_id = alliance == null ? 0 : alliance.getAllyCrestId();
cw_level = 0;
}
if(player.isMounted())
{
_enchant = 0;
mount_id = player.getMountNpcId() + 1000000;
mount_type = player.getMountType();
}
else
{
_enchant = player.getEnchantEffect();
mount_id = 0;
mount_type = 0;
}
_inv = new int[PcInventory.PAPERDOLL_MAX][2];
for(int PAPERDOLL_ID : PAPERDOLL_ORDER)
{
_inv[PAPERDOLL_ID][0] = player.getInventory().getPaperdollItemId(PAPERDOLL _ID);
_inv[PAPERDOLL_ID][1] = player.getInventory().getPaperdollAugmentationId(P APERDOLL_ID);
}
_mAtkSpd = player.getMAtkSpd();
_pAtkSpd = player.getPAtkSpd();
speed_move = player.getMovementSpeedMultiplier();
_runSpd = (int) (player.getRunSpeed() / speed_move);
_walkSpd = (int) (player.getWalkSpeed() / speed_move);
_flRunSpd = 0; // TODO
_flWalkSpd = 0; // TODO
if(player.isFlying())
{
_flyRunSpd = _runSpd;
_flyWalkSpd = _walkSpd;
}
else
{
_flyRunSpd = 0;
_flyWalkSpd = 0;
}
_swimSpd = player.getSwimSpeed();
_race = player.getBaseTemplate().race.ordinal();
_sex = player.getSex();
base_class = player.getBaseClassId();
pvp_flag = Config.RVRMODE_ENABLE ? 0 : player.getPvpFlag();
karma = player.getKarma();
speed_atack = player.getAttackSpeedMultiplier();
col_radius = player.getColRadius();
col_height = player.getColHeight();
hair_style = player.getHairStyle();
hair_color = player.getHairColor();
face = player.getFace();
if(clan_id > 0 && player.getClan() != null)
clan_rep_score = player.getClan().getReputationScore();
else
clan_rep_score = 0;
_sit = player.isSitting() ? 0 : 1; // standing = 1 sitting = 0
_run = player.isRunning() ? 1 : 0; // running = 1 walking = 0
_combat = player.isInCombat() ? 1 : 0;
_dead = player.isAlikeDead() ? 1 : 0;
private_store = player.isInObserverMode() ? Player.STORE_OBSERVING_GAMES : player.getPrivateStoreType();
cubics = player.getCubics().toArray(new EffectCubic[player.getCubics().size()]);
_abnormalEffect = player.getAbnormalEffect();
_abnormalEffect2 = player.getAbnormalEffect2();
rec_have = player.isGM() ? 0 : player.getRecomHave();
class_id = player.getClassId().getId();
_team = player.getTeam();
_noble = player.isNoble() ? 1 : 0; // 0x01: symbol on char menu ctrl+I
_hero = player.isHero() || player.isFakeHero() || player.isGM() && Config.GM_HERO_AURA ? 1 : 0; // 0x01: Hero Aura
_fishing = player.isFishing() ? 1 : 0;
_fishLoc = player.getFishLoc();
_nameColor = player.getNameColor(); // New C5
plg_class = player.getPledgeClass();
pledge_type = player.getPledgeType();
_transform = player.getTransformation();
_agathion = player.getAgathionId();
_isPartyRoomLeader = player.getMatchingRoom() != null && player.getMatchingRoom().getType() == MatchingRoom.PARTY_MATCHING && player.getMatchingRoom().getLeader() == player;
_isFlying = player.isInFlyingTransform();
}
@Override
protected final void writeImpl()
{
Player activeChar = getClient().getActiveChar();
if(activeChar == null)
return;
if(_objId == 0){ return; }
if(activeChar.getObjectId() == _objId)
{
_log.error("You cant send CharInfo about his character to active user!!!");
return;
}
writeC(0x31);
writeD(_loc.x);
writeD(_loc.y);
writeD(_loc.z + Config.CLIENT_Z_SHIFT);
writeD(_clanBoatObjectId);
writeD(_objId);
writeS(_name);
writeD(_race);
writeD(_sex);
writeD(base_class);
for(int PAPERDOLL_ID : PAPERDOLL_ORDER)
writeD(_inv[PAPERDOLL_ID][0]);
for(int PAPERDOLL_ID : PAPERDOLL_ORDER)
writeD(_inv[PAPERDOLL_ID][1]);
writeD(0x01); //TODO talisman count(VISTALL)
writeD(0x00); //TODO cloak status(VISTALL)
writeD(pvp_flag);
writeD(karma);
writeD(_mAtkSpd);
writeD(_pAtkSpd);
writeD(0x00);
writeD(_runSpd);
writeD(_walkSpd);
writeD(_swimSpd);
writeD(_swimSpd);
writeD(_flRunSpd);
writeD(_flWalkSpd);
writeD(_flyRunSpd);
writeD(_flyWalkSpd);
writeF(speed_move); // _cha.getProperMultiplier()
writeF(speed_atack); // _cha.getAttackSpeedMultiplier()
writeF(col_radius);
writeF(col_height);
writeD(hair_style);
writeD(hair_color);
writeD(face);
writeS(_title);
writeD(clan_id);
writeD(clan_crest_id);
writeD(ally_id);
writeD(ally_crest_id);
writeC(_sit);
writeC(_run);
writeC(_combat);
writeC(_dead);
writeC(0x00); // is invisible
writeC(mount_type); // 1-on Strider, 2-on Wyvern, 3-on Great Wolf, 0-no mount
writeC(private_store);
writeH(cubics.length);
for(EffectCubic cubic : cubics)
writeH(cubic == null ? 0 : cubic.getId());
writeC(_isPartyRoomLeader ? 0x01 : 0x00); // find party members
writeD(_abnormalEffect);
writeC(_isFlying ? 0x02 : 0x00);
writeH(rec_have);
writeD(mount_id);
writeD(class_id);
writeD(0x00);
writeC(_enchant);
writeC(_team.ordinal()); // team circle around feet 1 = Blue, 2 = red
writeD(large_clan_crest_id);
writeC(_noble);
writeC(_hero);
writeC(_fishing);
writeD(_fishLoc.x);
writeD(_fishLoc.y);
writeD(_fishLoc.z);
writeD(_nameColor);
writeD(_loc.h);
writeD(plg_class);
writeD(pledge_type);
writeD(_title_color);
writeD(cw_level);
writeD(clan_rep_score);
writeD(_transform);
writeD(_agathion);
writeD(0x01); // T2
writeD(_abnormalEffect2);
}
public static final int[] PAPERDOLL_ORDER =
{
Inventory.PAPERDOLL_UNDER,
Inventory.PAPERDOLL_HEAD,
Inventory.PAPERDOLL_RHAND,
Inventory.PAPERDOLL_LHAND,
Inventory.PAPERDOLL_GLOVES,
Inventory.PAPERDOLL_CHEST,
Inventory.PAPERDOLL_LEGS,
Inventory.PAPERDOLL_FEET,
Inventory.PAPERDOLL_BACK,
Inventory.PAPERDOLL_LRHAND,
Inventory.PAPERDOLL_HAIR,
Inventory.PAPERDOLL_DHAIR,
Inventory.PAPERDOLL_RBRACELET,
Inventory.PAPERDOLL_LBRACELET,
Inventory.PAPERDOLL_DECO1,
Inventory.PAPERDOLL_DECO2,
Inventory.PAPERDOLL_DECO3,
Inventory.PAPERDOLL_DECO4,
Inventory.PAPERDOLL_DECO5,
Inventory.PAPERDOLL_DECO6,
Inventory.PAPERDOLL_BELT
};
}
Опять нули в пакетке, да как же так. А когда я увижу реализацию согласно официальному серверу?
[QUOTE="Спойлер"]
[COLOR="#363940"]
package core.gameserver.network.l2.s2c;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import core.commons.dbutils.DbUtils;
import core.gameserver.Config;
import core.gameserver.dao.CharacterDAO;
import core.gameserver.data.xml.holder.CharTemplateHolder ;
import core.gameserver.database.DatabaseFactory;
import core.gameserver.model.CharSelectInfoPackage;
import core.gameserver.model.base.Experience;
import core.gameserver.model.items.Inventory;
import core.gameserver.templates.PlayerTemplate;
import core.gameserver.utils.AutoBan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class CharacterSelectionInfo extends L2GameServerPacket
{
// d (SdSddddddddddffdQdddddddddddddddddddddddddddddddd dddddddffdddchhd)
private static final Logger _log = LoggerFactory.getLogger(CharacterSelectionInfo.cla ss);
private String _loginName;
private int _sessionId;
private CharSelectInfoPackage[] _characterPackages;
public CharacterSelectionInfo(String loginName, int sessionId)
{
_sessionId = sessionId;
_loginName = loginName;
_characterPackages = loadCharacterSelectInfo(loginName);
}
public CharSelectInfoPackage[] getCharInfo()
{
return _characterPackages;
}
@Override
protected final void writeImpl()
{
int size = _characterPackages != null ? _characterPackages.length : 0;
writeC(0x09);
writeD(size);
writeD(0x07); //Kamael, 0x07 ?
writeC(0); //разрешает или запрещает создание игроков
long lastAccess = -1L;
int lastUsed = -1;
for(int i = 0; i -100 ? charInfoPackage.getDeleteTimer() : -1);
writeD(charInfoPackage.getClassId());
writeD(i == lastUsed ? 1 : 0);
writeC(Math.min(charInfoPackage.getPaperdollEnchan tEffect(Inventory.PAPERDOLL_RHAND), 127));
writeD(charInfoPackage.getPaperdollAugmentationId( Inventory.PAPERDOLL_RHAND));
int weaponId = charInfoPackage.getPaperdollItemId(Inventory.PAPER DOLL_RHAND);
if(weaponId == 8190) // Transform id (на оффе отображаются только КВ трансформации или вообще не отображаются
writeD(301);
else if(weaponId == 8689)
writeD(302);
else
writeD(0x00);
//TODO: Pet info?
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeF(0x00);
writeF(0x00);
writeD(charInfoPackage.getVitalityPoints());
}
}
public static CharSelectInfoPackage[] loadCharacterSelectInfo(String loginName)
{
CharSelectInfoPackage charInfopackage;
List characterList = new ArrayList();
Connection con = null;
PreparedStatement statement = null;
ResultSet rset = null;
try
{
con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT * FROM characters AS c LEFT JOIN character_subclasses AS cs ON (c.obj_Id=cs.char_obj_id AND cs.active=1) WHERE account_name=? LIMIT 7");
statement.setString(1, loginName);
rset = statement.executeQuery();
while(rset.next()) // fills the package
{
charInfopackage = restoreChar(rset);
if(charInfopackage != null)
characterList.add(charInfopackage);
}
}
catch(Exception e)
{
_log.error("could not restore charinfo:", e);
}
finally
{
DbUtils.closeQuietly(con, statement, rset);
}
return characterList.toArray(new CharSelectInfoPackage[characterList.size()]);
}
private static int restoreBaseClassId(int objId)
{
int classId = 0;
Connection con = null;
PreparedStatement statement = null;
ResultSet rset = null;
try
{
con = DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT class_id FROM character_subclasses WHERE char_obj_id=? AND isBase=1");
statement.setInt(1, objId);
rset = statement.executeQuery();
while(rset.next())
classId = rset.getInt("class_id");
}
catch(Exception e)
{
_log.error("could not restore base class id:", e);
}
finally
{
DbUtils.closeQuietly(con, statement, rset);
}
return classId;
}
private static CharSelectInfoPackage restoreChar(ResultSet chardata)
{
CharSelectInfoPackage charInfopackage = null;
try
{
int objectId = chardata.getInt("obj_Id");
int classid = chardata.getInt("class_id");
int baseClassId = classid;
boolean useBaseClass = chardata.getInt("isBase") > 0;
if(!useBaseClass)
baseClassId = restoreBaseClassId(objectId);
boolean female = chardata.getInt("sex") == 1;
PlayerTemplate templ = CharTemplateHolder.getInstance().getTemplate(baseC lassId, female);
if(templ == null)
{
_log.error("restoreChar fail | templ == null | objectId: " + objectId + " | classid: " + baseClassId + " | female: " + female);
return null;
}
String name = chardata.getString("char_name");
charInfopackage = new CharSelectInfoPackage(objectId, name);
charInfopackage.setLevel(chardata.getInt("level")) ;
charInfopackage.setMaxHp(chardata.getInt("maxHp")) ;
charInfopackage.setCurrentHp(chardata.getDouble("c urHp"));
charInfopackage.setMaxMp(chardata.getInt("maxMp")) ;
charInfopackage.setCurrentMp(chardata.getDouble("c urMp"));
charInfopackage.setX(chardata.getInt("x"));
charInfopackage.setY(chardata.getInt("y"));
charInfopackage.setZ(chardata.getInt("z"));
charInfopackage.setPk(chardata.getInt("pkkills"));
charInfopackage.setPvP(chardata.getInt("pvpkills") );
charInfopackage.setFace(chardata.getInt("face"));
charInfopackage.setHairStyle(chardata.getInt("hair style"));
charInfopackage.setHairColor(chardata.getInt("hair color"));
charInfopackage.setSex(female ? 1 : 0);
charInfopackage.setExp(chardata.getLong("exp"));
charInfopackage.setSp(chardata.getInt("sp"));
charInfopackage.setClanId(chardata.getInt("clanid" ));
charInfopackage.setKarma(chardata.getInt("karma")) ;
charInfopackage.setRace(templ.race.ordinal());
charInfopackage.setClassId(classid);
charInfopackage.setBaseClassId(baseClassId);
long deletetime = chardata.getLong("deletetime");
int deletedays = 0;
if(Config.DELETE_DAYS > 0)
if(deletetime > 0)
{
deletetime = (int) (System.currentTimeMillis() / 1000 - deletetime);
deletedays = (int) (deletetime / 3600 / 24);
if(deletedays >= Config.DELETE_DAYS)
{
CharacterDAO.getInstance().deleteCharByObjId(objec tId);
return null;
}
deletetime = Config.DELETE_DAYS * 3600 * 24 - deletetime;
}
else
deletetime = 0;
charInfopackage.setDeleteTimer((int) deletetime);
charInfopackage.setLastAccess(chardata.getLong("la stAccess") * 1000L);
charInfopackage.setAccessLevel(chardata.getInt("ac cesslevel"));
int points = chardata.getInt("vitality") + (int) ((System.currentTimeMillis() - charInfopackage.getLastAccess()) / 15.);
if(points > 20000)
points = 20000;
else if(points
|
|
|

07.08.2015, 12:39
|
|
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами:
5952720
Репутация:
6527
|
|
Сообщение от Спойлер
package core.gameserver.utils;
import gnu.trove.map.hash.TIntIntHashMap;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
import core.gameserver.model.quest.Quest;
import core.gameserver.utils.Util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AddonsConfig
{
private static final Logger log = LoggerFactory.getLogger(AddonsConfig.class);
private static final String dir = "./config/Addons";
private static ConcurrentHashMap properties = new ConcurrentHashMap();
private static ConcurrentHashMap questRewardRates = new ConcurrentHashMap();
private static ConcurrentHashMap questDropRates = new ConcurrentHashMap();
public static void load()
{
File files = new File(dir);
if (!files.exists())
log.warn("WARNING! " + dir + " not exists! Config not loaded!");
else
parseFiles(files.listFiles());
}
public static void reload()
{
synchronized(properties)
{
synchronized(questRewardRates)
{
synchronized(questDropRates)
{
properties = new ConcurrentHashMap();
questRewardRates = new ConcurrentHashMap();
questDropRates = new ConcurrentHashMap();
load();
}
}
}
}
private static void parseFiles(File[] files)
{
for (File f : files)
{
if (f.isHidden())
continue;
if (f.isDirectory() && !f.getName().contains("defaults"))
parseFiles(f.listFiles());
if (f.getName().startsWith("quest_reward_rates"))
{
try
{
InputStream is = new FileInputStream(f);
Properties p = new Properties();
p.load(is);
loadQuestRewardRates(p);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
else if (f.getName().startsWith("quest_drop_rates"))
{
try
{
InputStream is = new FileInputStream(f);
Properties p = new Properties();
p.load(is);
loadQuestDropRates(p);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
else if (f.getName().endsWith(".ini"))
{
try
{
InputStream is = new FileInputStream(f);
Properties p = new Properties();
p.load(is);
loadProperties(p);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
private static void loadQuestRewardRates(Properties p)
{
for (String name : p.stringPropertyNames())
{
int id;
try
{
id = Integer.parseInt(name);
}
catch (NumberFormatException nfe)
{
continue;
}
if(questRewardRates.get(id) != null)
{
questRewardRates.replace(id, Double.parseDouble(p.getProperty(name).trim()));
log.info("Duplicate quest id \"" + name + "\"");
}
else if (p.getProperty(name) == null)
log.info("Null property for quest id " + name);
else
questRewardRates.put(id, Double.parseDouble(p.getProperty(name).trim()));
}
p.clear();
}
private static void loadQuestDropRates(Properties p)
{
for (String name : p.stringPropertyNames())
{
int id;
try
{
id = Integer.parseInt(name);
} catch (NumberFormatException nfe)
{
continue;
}
if (questDropRates.get(id) != null)
{
questDropRates.replace(id, Double.parseDouble(p.getProperty(name).trim()));
log.info("Duplicate quest id \"" + name + "\"");
}
else if (p.getProperty(name) == null)
log.info("Null property for quest id " + name);
else
questDropRates.put(id, Double.parseDouble(p.getProperty(name).trim()));
}
p.clear();
}
private static void loadProperties(Properties p)
{
for (String name : p.stringPropertyNames())
{
if (properties.get(name) != null)
{
properties.replace(name, p.getProperty(name).trim());
log.info("Duplicate properties name \"" + name + "\" replaced with new value.");
}
else if (p.getProperty(name) == null)
log.info("Null property for key " + name);
else
properties.put(name, p.getProperty(name).trim());
}
p.clear();
}
public static double getQuestRewardRates(Quest q)
{
return questRewardRates.containsKey(q.getQuestIntId()) ? questRewardRates.get(q.getQuestIntId()) : 1.0;
}
public static double getQuestDropRates(Quest q)
{
return questDropRates.containsKey(q.getQuestIntId()) ? questDropRates.get(q.getQuestIntId()) : 1.0;
}
public static String get(String name)
{
if(properties.get(name) == null)
log.warn("ConfigSystem: Null value for key: " + name);
return properties.get(name);
}
public static float getFloat(String name)
{
return getFloat(name, Float.MAX_VALUE);
}
public static boolean getBoolean(String name)
{
return getBoolean(name, false);
}
public static int getInt(String name)
{
return getInt(name, Integer.MAX_VALUE);
}
public static int[] getIntArray(String name)
{
return getIntArray(name, new int[0]);
}
public static int getIntHex(String name)
{
return getIntHex(name, Integer.decode("0xFFFFFF"));
}
public static byte getByte(String name)
{
return getByte(name, Byte.MAX_VALUE);
}
public static long getLong(String name)
{
return getLong(name, Long.MAX_VALUE);
}
public static double getDouble(String name)
{
return getDouble(name, Double.MAX_VALUE);
}
public static String get(String name, String def)
{
return get(name) == null ? def : get(name);
}
public static float getFloat(String name, float def)
{
return Float.parseFloat(get(name, String.valueOf(def)));
}
public static boolean getBoolean(String name, boolean def)
{
return Boolean.parseBoolean(get(name, String.valueOf(def)));
}
public static int getInt(String name, int def)
{
return Integer.parseInt(get(name, String.valueOf(def)));
}
public static int[] getIntArray(String name, int[] def)
{
return get(name, null) == null ? def : Util.parseCommaSeparatedIntegerArray(get(name, null));
}
public static int getIntHex(String name, int def)
{
if(!get(name, String.valueOf(def)).trim().startsWith("0x"))
return Integer.decode("0x"+get(name, String.valueOf(def)));
else
return Integer.decode(get(name, String.valueOf(def)));
}
public static byte getByte(String name, byte def)
{
return Byte.parseByte(get(name, String.valueOf(def)));
}
public static double getDouble(String name, double def)
{
return Double.parseDouble(get(name, String.valueOf(def)));
}
public static long getLong(String name, long def)
{
return Long.parseLong(get(name, String.valueOf(def)));
}
public static void set(String name, String param)
{
properties.replace(name, param);
}
public static void set(String name, Object obj)
{
set(name, String.valueOf(obj));
}
public static TIntIntHashMap SKILL_DURATION_LIST;
public static TIntIntHashMap SKILL_REUSE_LIST;
public static void loadSkillDurationList()
{
if(getBoolean("EnableModifySkillDuration"))
{
String[] propertySplit = get("SkillDurationList").split(";");
SKILL_DURATION_LIST = new TIntIntHashMap(propertySplit.length);
for (String skill : propertySplit)
{
String[] skillSplit = skill.split(",");
if(skillSplit.length != 2)
log.warn(concat("[SkillDurationList]: invalid config property -> SkillDurationList \"", skill, "\""));
else
{
try
{
SKILL_DURATION_LIST.put(Integer.parseInt(skillSpli t[0]), Integer.parseInt(skillSplit[1]));
}
catch (NumberFormatException nfe)
{
if (!skill.isEmpty())
{
log.warn(concat("[SkillDurationList]: invalid config property -> SkillList \"", skillSplit[0], "\"", skillSplit[1]));
}
}
}
}
}
}
public static void loadSkillReuseList()
{
if(getBoolean("EnableModifySkillReuse"))
{
String[] propertySplit = get("SkillReuseList").split(";");
SKILL_REUSE_LIST = new TIntIntHashMap(propertySplit.length);
for (String skill : propertySplit)
{
String[] skillSplit = skill.split(",");
if (skillSplit.length != 2)
log.warn(concat("[SkillReuseList]: invalid config property -> SkillReuseList \"", skill, "\""));
else
{
try
{
SKILL_REUSE_LIST.put(Integer.valueOf(skillSplit[0]), Integer.valueOf(skillSplit[1]));
}
catch (NumberFormatException nfe)
{
if (!skill.isEmpty())
log.warn(concat("[SkillReuseList]: invalid config property -> SkillList \"", skillSplit[0], "\"", skillSplit[1]));
}
}
}
}
}
public static String concat(final String... strings)
{
final StringBuilder sbString = new StringBuilder(getLength(strings));
for (final String string : strings)
{
sbString.append(string);
}
return sbString.toString();
}
private static int getLength(final String[] strings)
{
int length = 0;
for (final String string : strings)
{
length += string.length();
}
return length;
}
}
Госпади, а зачем он ещё впиливал ScriptConfig. Одно другого хуже не разобрался как наверное реализовать по нормальному решил впилить шлак. Гавнокод в работе.
Сообщение от Спойлер
package core.gameserver.utils;
import core.gameserver.Config;
import core.gameserver.model.items.ItemInstance;
import core.gameserver.model.Player;
import core.gameserver.network.l2.s2c.InventoryUpdate;
public class FixEnchantOlympiad
{
public static void storeEnchantItemsOly(Player player)
{
ItemInstance[] arr = player.getInventory().getItems();
int len = arr.length;
StringBuilder items = new StringBuilder();
for (int i = 0; i Config.OLY_ENCHANT_LIMIT_WEAPON)
|| (item.isArmor() && item.getEnchantLevel() > Config.OLY_ENCHANT_LIMIT_ARMOR)
|| (item.isAccessory() && item.getEnchantLevel() > Config.OLY_ENCHANT_LIMIT_JEWEL))
return true;
return false;
}
public static void restoreEnchantItemsOly(Player player)
{
if(player.getVar("EnItemOlyRec") == null)
return;
String var;
var = player.getVar("EnItemOlyRec");
if(var != null)
{
String[] items = var.split(":");
for(String item : items)
{
if(item.equals(""))
continue;
String[] values = item.split(";");
if(values.length 0) // если он существует
{
if (last_modif >= lastModified(name)) // и новее оригинального файла
return Strings.bbParse(read(tmp)); // то вернуть локализованный
_log.warn("Last modify of " + name + " more then " + tmp); // если он существует но устарел - выругаться в лог
}
return Strings.bbParse(read(name)); // если локализованный файл отсутствует вернуть оригинальный
}
public static String langFileName(String name, String lang) {
if (lang == null || lang.equalsIgnoreCase("en"))
lang = "";
String tmp;
tmp = name.replaceAll("(.(\\.htm)", "$1-" + lang + "$2");
if (!tmp.equals(name) && lastModified(tmp) > 0)
return tmp;
tmp = name.replaceAll("(.(/[^/].+\\.htm)", "$1/" + lang + "$2");
if (!tmp.equals(name) && lastModified(tmp) > 0)
return tmp;
tmp = name.replaceAll("(.+?/html)/", "$1-" + lang + "/");
if (!tmp.equals(name) && lastModified(tmp) > 0)
return tmp;
if (lastModified(name) > 0)
return name;
return null;
}
public static long lastModified(String name) {
if (name == null)
return 0;
return new File(name).lastModified();
}
}
Госпади упаси от этого бреда. GameStats.java аналогично
А вот дальше пойдёт полная жопа.
Сообщение от Спойлер
package core.gameserver.utils;
import java.util.Arrays;
import java.util.Collection;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.NoSuchElementException;
import core.commons.util.Rnd;
/**
* Полный аналог ArrayList, но намного быстрее удаляет.
* Вместо сдвига всего массива перемещает последний элемент списка на место удаленного.
* Побочный эффект - размер массива при удалении элемента не меняется, но можно использовать clear.
*
* Базовая версия.
*
* @see core.Util.GCArray - конкуррентнобезопасная версия
* @see core.Util.GSArray - синхронизированная версия
* @see core.Util.GCSArray - конкуррентнобезопасная синхронизированная версия
*/
public class GArray implements Collection
{
protected transient E[] elementData;
protected transient int modCount = 0;
protected int size;
@SuppressWarnings("unchecked")
public GArray(int initialCapacity)
{
if(initialCapacity oldCapacity)
{
int newCapacity = oldCapacity * 3 / 2 + 1;
if(newCapacity T[] toArray(T[] a)
{
if(a.length size)
a[size] = null;
return a;
}
public E get(int index)
{
RangeCheck(index);
return elementData[index];
}
@SuppressWarnings("unchecked")
public boolean add(E e)
{
ensureCapacity(size + 1);
elementData[size++] = e;
return true;
}
public E getRandomize()
{
if (isEmpty())
return null;
int index = Rnd.get(size);
RangeCheck(index);
return elementData[index];
}
public boolean remove(Object o)
{
if(o == null)
{
for(int index = 0; index 0 ? remove(0) : null;
}
public E removeLast()
{
if(size > 0)
{
modCount++;
size--;
E old = elementData[size];
elementData[size] = null;
return old;
}
return null;
}
public E set(int index, E element)
{
RangeCheck(index);
E oldValue = elementData[index];
elementData[index] = element;
return oldValue;
}
public int indexOf(Object o)
{
if(o == null)
{
for(int i = 0; i c)
{
if(c == null)
return false;
boolean modified = false;
Iterator e = c.iterator();
while(e.hasNext())
if(add(e.next()))
modified = true;
return modified;
}
public boolean removeAll(Collection c)
{
boolean modified = false;
for(int i = 0; i c)
{
boolean modified = false;
for(int i = 0; i c)
{
for(int i = 0; i = size)
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
@SuppressWarnings("unchecked")
public void clear()
{
modCount++;
int oldSize = size;
size = 0;
if(oldSize > 1000)
elementData = (E[]) new Object[10];
else
for(int i = 0; i iterator()
{
return new Itr();
}
private class Itr implements Iterator
{
int cursor = 0;
int lastRet = -1;
int expectedModCount = modCount;
public boolean hasNext()
{
return cursor ";
}
@SuppressWarnings("unchecked")
public void sort()
{
Object tmp[] = toArray();
Arrays.sort(tmp);
elementData = (E[]) tmp;
}
public boolean addIfNotContains(E e)
{
if (contains(e))
return false;
return add(e);
}
}[/I]
Сообщение от Спойлер
package core.gameserver.utils;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
* Аналог ArrayList, ArrayList, но намного быстрее удаляет.
* Вместо сдвига всего массива перемещает последний элемент списка на место удаленного.
* Побочный эффект - размер массива при удалении элемента не меняется, но можно использовать clear.
*
* Конкуррентнобезопасная версия, для итерации создается копия списка.
* Метод remove для итератора не работает и возвращает IllegalStateException.
*
* @see core.Util.GArray - базовая версия
* @see core.Util.GSArray - синхронизированная версия
* @see core.Util.GCSArray - конкуррентнобезопасная синхронизированная версия
*/
public class GCArray implements Collection
{
private transient E[] elementData;
private int size;
@SuppressWarnings("unchecked")
public GCArray(int initialCapacity)
{
super();
if(initialCapacity oldCapacity)
{
int newCapacity = oldCapacity * 3 / 2 + 1;
if(newCapacity T[] toArray(T[] a)
{
if(a.length size)
a[size] = null;
return a;
}
public E get(int index)
{
RangeCheck(index);
return elementData[index];
}
public boolean add(E e)
{
ensureCapacity(size + 1);
elementData[size++] = e;
return true;
}
public boolean remove(Object o)
{
if(o == null)
{
for(int index = 0; index c)
{
boolean modified = false;
Iterator e = c.iterator();
while(e.hasNext())
if(add(e.next()))
modified = true;
return modified;
}
public boolean removeAll(Collection c)
{
boolean modified = false;
for(int i = 0; i c)
{
boolean modified = false;
for(int i = 0; i c)
{
for(int i = 0; i = size)
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
@SuppressWarnings("unchecked")
public void clear()
{
int oldSize = size;
size = 0;
if(oldSize > 1000)
elementData = (E[]) new Object[10];
else
for(int i = 0; i iterator()
{
return new Itr();
}
private class Itr implements Iterator
{
E[] data = toNativeArray();
int size = data.length;
int cursor = 0;
public boolean hasNext()
{
return cursor != size;
}
public E next()
{
try
{
return data[cursor++];
}
catch(IndexOutOfBoundsException e)
{
throw new NoSuchElementException();
}
}
/**
* НЕ РАБОТАЕТ!
*/
public void remove()
{
throw new IllegalStateException();
}
}
}
Сообщение от Спойлер
package core.gameserver.utils;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
* Аналог ArrayList, но намного быстрее удаляет.
* Вместо сдвига всего массива перемещает последний элемент списка на место удаленного.
* Побочный эффект - размер массива при удалении элемента не меняется, но можно использовать clear.
*
* Конкуррентнобезопасная синхронизированная версия, для итерации создается копия списка.
* Метод remove для итератора не работает и возвращает IllegalStateException.
*
* @see core.Util.GArray - базовая версия
* @see core.Util.GCArray - конкуррентнобезопасная версия
* @see core.Util.GSArray - синхронизированная версия
*/
public class GCSArray implements Collection
{
private transient E[] elementData;
private int size;
@SuppressWarnings("unchecked")
public GCSArray(int initialCapacity)
{
super();
if(initialCapacity oldCapacity)
{
int newCapacity = oldCapacity * 3 / 2 + 1;
if(newCapacity T[] toArray(T[] a)
{
if(a.length size)
a[size] = null;
return a;
}
public synchronized E get(int index)
{
RangeCheck(index);
return elementData[index];
}
public synchronized boolean add(E e)
{
ensureCapacity(size + 1);
elementData[size++] = e;
return true;
}
public synchronized boolean remove(Object o)
{
if(o == null)
{
for(int index = 0; index c)
{
boolean modified = false;
Iterator e = c.iterator();
while(e.hasNext())
if(add(e.next()))
modified = true;
return modified;
}
public synchronized boolean removeAll(Collection c)
{
boolean modified = false;
for(int i = 0; i c)
{
boolean modified = false;
for(int i = 0; i c)
{
for(int i = 0; i = size)
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
@SuppressWarnings("unchecked")
public synchronized void clear()
{
int oldSize = size;
size = 0;
if(oldSize > 1000)
elementData = (E[]) new Object[10];
else
for(int i = 0; i iterator()
{
return new Itr();
}
private class Itr implements Iterator
{
E[] data = toNativeArray();
int size = data.length;
int cursor = 0;
public boolean hasNext()
{
return cursor != size;
}
public E next()
{
try
{
return data[cursor++];
}
catch(IndexOutOfBoundsException e)
{
throw new NoSuchElementException();
}
}
/**
* НЕ РАБОТАЕТ!
*/
public void remove()
{
throw new IllegalStateException();
}
}
}
Сообщение от Спойлер
package core.gameserver.utils;
import java.util.Arrays;
import java.util.Collection;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
* Аналог ArrayList, но намного быстрее удаляет.
* Вместо сдвига всего массива перемещает последний элемент списка на место удаленного.
* Побочный эффект - размер массива при удалении элемента не меняется, но можно использовать clear.
*
* Синхронизированная версия.
*
* @see core.Util.GArray - базовая версия
* @see core.Util.GCArray - конкуррентнобезопасная версия
* @see core.Util.GCSArray - конкуррентнобезопасная синхронизированная версия
*/
public class GSArray implements Collection
{
private transient E[] elementData;
private transient int modCount = 0;
private int size;
@SuppressWarnings("unchecked")
public GSArray(int initialCapacity)
{
super();
if(initialCapacity oldCapacity)
{
int newCapacity = oldCapacity * 3 / 2 + 1;
if(newCapacity T[] toArray(T[] a)
{
if(a.length size)
a[size] = null;
return a;
}
public synchronized E get(int index)
{
RangeCheck(index);
return elementData[index];
}
public synchronized boolean add(E e)
{
ensureCapacity(size + 1);
elementData[size++] = e;
return true;
}
public synchronized boolean remove(Object o)
{
if(o == null)
{
for(int index = 0; index c)
{
boolean modified = false;
Iterator e = c.iterator();
while(e.hasNext())
if(add(e.next()))
modified = true;
return modified;
}
public synchronized boolean removeAll(Collection c)
{
boolean modified = false;
for(int i = 0; i c)
{
boolean modified = false;
for(int i = 0; i c)
{
for(int i = 0; i = size)
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
@SuppressWarnings("unchecked")
public synchronized void clear()
{
modCount++;
int oldSize = size;
size = 0;
if(oldSize > 1000)
elementData = (E[]) new Object[10];
else
for(int i = 0; i iterator()
{
return new Itr();
}
private class Itr implements Iterator
{
int cursor = 0;
int lastRet = -1;
int expectedModCount = modCount;
public boolean hasNext()
{
return cursor != size();
}
public E next()
{
checkForComodification();
try
{
E next = get(cursor);
lastRet = cursor++;
return next;
}
catch(IndexOutOfBoundsException e)
{
checkForComodification();
throw new NoSuchElementException();
}
}
public void remove()
{
if(lastRet == -1)
throw new IllegalStateException();
checkForComodification();
try
{
GSArray.this.remove(lastRet);
if(lastRet banned_hwids = new GArray();
private static final GSArray>> bonus_hwids = new GSArray>>();
public static final HWIDComparator DefaultComparator = new HWIDComparator();
public static final HWIDComparator BAN_Comparator = new HWIDComparator();
public static final String SELECT_HWID = "SELECT HWID FROM " + GGConfig.HWID_BANS_TABLE;
public static final String REPLACE_HWID = "REPLACE INTO " + GGConfig.HWID_BANS_TABLE + " (hwid,comments) VALUES (?,?)";
public static final String DELETE_HWID = "DELETE FROM " + GGConfig.HWID_BANS_TABLE + " WHERE hwid=?";
public static void reloadBannedHWIDs()
{
synchronized (banned_hwids)
{
banned_hwids.clear();
}
Connection con = null;
PreparedStatement st = null;
ResultSet rs = null;
try
{
con = DatabaseFactory.getInstance().getConnection();
st = con.prepareStatement(SELECT_HWID);
rs = st.executeQuery();
synchronized (banned_hwids)
{
while (rs.next())
banned_hwids.add(new HardwareID(rs.getString("HWID")));
}
_log.info("Protection: Loaded " + banned_hwids.size() + " banned HWIDs");
}
catch(final Exception e)
{
_log.warn("Protection: Failed to load banned HWIDs", e);
}
finally
{
DbUtils.closeQuietly(con, st, rs);
}
}
public static boolean checkHWIDBanned(final HardwareID hwid)
{
synchronized (banned_hwids)
{
return hwid != null && BAN_Comparator.contains(hwid, banned_hwids);
}
}
public static String handleBanHWID(final String[] argv)
{
if(!GGConfig.ALLOW_GUARD_SYSTEM || !GGConfig.PROTECT_GS_ENABLE_HWID_BANS)
return "HWID bans feature disabled";
if(argv == null || argv.length 3)
{
for(int i = 3; i getPlayersByHWID(final HardwareID hwid)
{
final GArray result = new GArray();
if(hwid != null)
for(final Player cha : GameObjectsStorage.getAllPlayers())
if(!cha.isInOfflineMode() && cha.getNetConnection() != null && cha.getNetConnection().protect_used && hwid.equals(cha.getHWID()))
result.add(cha);
return result;
}
/**
* Возвращает список всех HWID, кторые попадают под условия компаратора.
*/
public static GArray>> getAllMatches(final HardwareID hwid, final HWIDComparator comparator)
{
final GArray>> ret = new GArray>>();
synchronized (bonus_hwids)
{
for(final Entry> entry : bonus_hwids)
if(comparator.compare(entry.getKey(), hwid) == HWIDComparator.EQUALS)
ret.add(entry);
}
return ret;
}
public static class HardwareID
{
public final String Full;
public HardwareID(final String s)
{
Full = s;
}
@Override
public int hashCode()
{
return Full.hashCode();
}
@Override
public boolean equals(final Object obj)
{
if(obj == null || !(obj instanceof HardwareID))
return false;
return DefaultComparator.compare(this, (HardwareID) obj) == HWIDComparator.EQUALS;
}
@Override
public String toString()
{
return String.format("%s", Full);
}
}
public static class HWIDComparator implements Comparator
{
public static final int EQUALS = 0;
public static final int NOT_EQUALS = 1;
public HWIDComparator()
{}
@Override
public int compare(final HardwareID o1, final HardwareID o2)
{
if(o1 == null || o2 == null)
return o1 == o2 ? EQUALS : NOT_EQUALS;
return EQUALS;
}
public int find(final HardwareID hwid, final List in)
{
for(int i = 0; i in)
{
return find(hwid, in) != -1;
}
public boolean remove(final HardwareID hwid, final List in)
{
final int i = find(hwid, in);
return i == -1 ? false : in.remove(i) != null;
}
public int find(final HardwareID hwid, final GArray in)
{
for(int i = 0; i in)
{
return find(hwid, in) != -1;
}
public boolean remove(final HardwareID hwid, final GArray in)
{
final int i = find(hwid, in);
return i == -1 ? false : in.remove(i) != null;
}
@Override
public String toString()
{
return "HWIDComparator";
}
}
private static final class Entry implements Map.Entry
{
private final K _key;
private V _value;
public Entry(final K key, final V value)
{
_key = key;
_value = value;
}
@Override
public K getKey()
{
return _key;
}
@Override
public V getValue()
{
return _value;
}
@Override
public V setValue(final V value)
{
return _value = value;
}
}
}
|
|
|

07.08.2015, 12:48
|
|
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами:
5952720
Репутация:
6527
|
|
ItemFunctions.java приведу маленькие вырезки из кода:
[QUOTE="Спойлер"]
[COLOR="#363940"]
public final static boolean isClanApellaItem(int itemId)
{
return itemId >= 7860 && itemId = 9830 && itemId = 7850 && itemId = 8723 && itemId = 9573 && itemId = 10483 && itemId = 14166 && itemId = 16160 && itemId = 12754 && itemId = 12840 && itemId
|
|
|

07.08.2015, 12:51
|
|
Флудер
Регистрация: 20.01.2015
Сообщений: 7,201
С нами:
5952720
Репутация:
6527
|
|
Приведу в пример ItemTemplate ещё:
[QUOTE="Спойлер"]
[COLOR="#363940"]
/** Item ID для замковых корон */
public static final int[] ITEM_ID_CASTLE_CIRCLET = { 0, // no castle - no circlet..
6838, // Circlet of Gludio
6835, // Circlet of Dion
6839, // Circlet of Giran
6837, // Circlet of Oren
6840, // Circlet of Aden
6834, // Circlet of Innadril
6836, // Circlet of Goddard
8182, // Circlet of Rune
8183, // Circlet of Schuttgart
};
public static final int[] ITEM_ID_FORMAL_WEAR = { 80026, // Steel Costume
80002, // Vampire Hunter Costume
80003, // Camouflage Suit
80004, // Maids Costume
80005, // Shadows Costume
80006, // Wanderer Costume
80007, // Chinese Dress A
80008, // Chinese Dress B
80009, // Chinese Dress C
80010, // Chinese Dress D
80001, // Christmas Wear
6408, // Wedding Wear
80011, // Swimwear A
80012, // Swimwear B
80013, // Swimwear C
80014, // Swimwear D
80015, // Swimwear E
80016, // Swimwear F
80017, // Underwear Tattoos A
80018, // Underwear Tattoos B
80019, // Underwear Tattoos C
};
/**
* Является ли вещь аденой или камнем печати
*/
public boolean isAdena()
{
return _itemId == 57 || _itemId == 6360 || _itemId == 6361 || _itemId == 6362;
}
public boolean isLifeStone()
{
return (_itemId >= 8723 && _itemId = 9573 && _itemId = 10483 && _itemId = 12754 && _itemId = 12840 && _itemId = 14166 && _itemId = 16160 && _itemId = 6569 && _itemId = 17255 && _itemId = 22314 && _itemId = 949 && _itemId = 729 && _itemId = 10549 && _itemId = 12768 && _itemId = 14170 && _itemId = 17034 && _itemId = 12811 && _itemId = 13078 || _itemId == 10119;
}
public boolean isTerritoryAccessory()
{
return _itemId >= 13740 && _itemId = 14592 && _itemId = 14664 && _itemId = 14801 && _itemId = 15282 && _itemId = 9625 && _itemId = 9546 && _itemId = 9552 && _itemId = 9558 && _itemId = 9564 && _itemId = 6611 && _itemId = 9388 && _itemId
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|