Тема: Grind Team
Показать сообщение отдельно

  #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
 
Ответить с цитированием