HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 07.08.2015, 11:26
kick
Флудер
Регистрация: 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 купонов и не только нужна верная, ведь и так мы можем заявить типо у нас эмулятор реализован согласно официальному серверу
 
Ответить с цитированием

  #12  
Старый 07.08.2015, 11:41
kick
Флудер
Регистрация: 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

}

}
Опять нету важного пакета для официального сервера.

Вот так вот у нас реализован официальный контент.
 
Ответить с цитированием

  #13  
Старый 07.08.2015, 12:00
kick
Флудер
Регистрация: 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 там их больше ещё пакетов для реализации надо. Но при этом заявление, реализация согласно официальному контенту.

И вообще данную вещь можно было переписать по нормальному.
 
Ответить с цитированием

  #14  
Старый 07.08.2015, 12:16
kick
Флудер
Регистрация: 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 есть эти пакеты
 
Ответить с цитированием

  #15  
Старый 07.08.2015, 12:18
kick
Флудер
Регистрация: 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;

}

}

}
Как так то, у нас же всё согласно официальному серверу .
 
Ответить с цитированием

  #16  
Старый 07.08.2015, 12:20
kick
Флудер
Регистрация: 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]

}

}
Так вот покажи мне официальную механику даже такой вещи
 
Ответить с цитированием

  #17  
Старый 07.08.2015, 12:25
kick
Флудер
Регистрация: 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
 
Ответить с цитированием

  #18  
Старый 07.08.2015, 12:39
kick
Флудер
Регистрация: 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;

}

}

}
 
Ответить с цитированием

  #19  
Старый 07.08.2015, 12:48
kick
Флудер
Регистрация: 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
 
Ответить с цитированием

  #20  
Старый 07.08.2015, 12:51
kick
Флудер
Регистрация: 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)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...
×

ESCROW ADMIN PANEL

Загрузка...
Загрузка...