Сообщений: 78
Тем: 0
Зарегистрирован: May 2011
Репутация:
22
Тема обсуждалась! По созданию и входу!Мало того я писал подробное сообщение что для чего нужно и зачем! И да какие именно исходники ты брал за основу?
Сообщений: 40
Тем: 3
Зарегистрирован: Jun 2011
я работаю на фениксе уже перевёл всё на хф вот хочу посмотреть локи в годе и может делать свою игру на нём
Сообщений: 5,670
Тем: 145
Зарегистрирован: Nov 2008
Репутация:
33,771
MikYMauS, да вы сначала научитесь читать, а потом свою игру делать будете.
Web программист\разработчик
— Есть только один способ проделать большую работу — полюбить ее. Если вы к этому не пришли, подождите. Не беритесь за дело.
Сообщений: 40
Тем: 3
Зарегистрирован: Jun 2011
в 3 темах по пакету CharSelectionInfo ничё нет
Сообщений: 40
Тем: 3
Зарегистрирован: Jun 2011
07-27-2011, 03:12 PM
(Сообщение последний раз редактировалось: 07-27-2011, 03:18 PM MikYMauS.)
тут всё так же как и у меня
Добавлено через 3 минуты
вот мой
CharacterSelectionInfo
package l2open.gameserver.serverpackets;
import l2open.Config;
import l2open.database.DatabaseUtils;
import l2open.database.FiltredPreparedStatement;
import l2open.database.L2DatabaseFactory;
import l2open.database.ThreadConnection;
import l2open.gameserver.instancemanager.PlayerManager;
import l2open.gameserver.model.CharSelectInfoPackage;
import l2open.gameserver.model.base.Experience;
import l2open.gameserver.tables.CharTemplateTable;
import l2open.gameserver.templates.L2PlayerTemplate;
import l2open.util.AutoBan;
import l2open.util.GArray;
import java.sql.ResultSet;
import java.util.logging.Level;
import java.util.logging.Logger;
public class CharacterSelectionInfo extends L2GameServerPacket
{
// d (SdSddddddddddffdQdddddddddddddddddddddddddddddddddddddddffdddchhd)
private static Logger _log = Logger.getLogger(CharacterSelectionInfo.class.getName());
private String _loginName;
private int _sessionId;
private CharSelectInfoPackage[] _characterPackages;
public CharacterSelectionInfo(String loginName, int sessionId)
{
_sessionId = sessionId;
_loginName = loginName;
_characterPackages = loadCharacterSelectInfo(loginName);
if(getClient() != null)
getClient().setCharSelection(_characterPackages);
}
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(0x00); //Kamael разрешает или запрещает создание игроков
long lastAccess = 0L;
int lastUsed = -1;
for(int i = 0; i < size; i++)
if(lastAccess < _characterPackages[i].getLastAccess())
{
lastAccess = _characterPackages[i].getLastAccess();
lastUsed = i;
}
for(int i = 0; i < size; i++)
{
CharSelectInfoPackage charInfoPackage = _characterPackages[i];
writeS(charInfoPackage.getName());
writeD(charInfoPackage.getCharId()); // ?
writeS(_loginName);
writeD(_sessionId);
writeD(charInfoPackage.getClanId());
writeD(0x00); // ??
writeD(charInfoPackage.getSex());
writeD(charInfoPackage.getRace());
writeD(charInfoPackage.getClassId());
writeD(0x01); // active ??
writeD(charInfoPackage.getX());
writeD(charInfoPackage.getY());
writeD(charInfoPackage.getZ());
writeF(charInfoPackage.getCurrentHp());
writeF(charInfoPackage.getCurrentMp());
writeD(charInfoPackage.getSp());
writeQ(charInfoPackage.getExp());
writeF((float)(charInfoPackage.getExp() - Experience.LEVEL[charInfoPackage.getLevel()]) / (Experience.LEVEL[charInfoPackage.getLevel() + 1] - Experience.LEVEL[charInfoPackage.getLevel()])); // High Five exp %
writeD(charInfoPackage.getLevel());
writeD(charInfoPackage.getKarma());
writeD(charInfoPackage.getPk());
writeD(charInfoPackage.getPvP());
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
for(byte PAPERDOLL_ID : UserInfo.PAPERDOLL_ORDER)
writeD(charInfoPackage.getPaperdollItemId(PAPERDOLL_ID));
writeD(charInfoPackage.getHairStyle());
writeD(charInfoPackage.getHairColor());
writeD(charInfoPackage.getFace());
writeF(charInfoPackage.getMaxHp()); // hp max
writeF(charInfoPackage.getMaxMp()); // mp max
writeD(charInfoPackage.getAccessLevel() > -100 ? charInfoPackage.getDeleteTimer() : -1);
writeD(charInfoPackage.getClassId());
writeD(i == lastUsed ? 1 : 0);
writeC(Math.min(charInfoPackage.getEnchantEffect(), 127));
writeH(0);
writeH(0);
//writeD(charInfoPackage.getAugmentationId());
//writeD(charInfoPackage.getTransformId()); // Used to display Transformations
writeD(0x00); // Currently on retail when you are on character select you don't see your transformation.
// Freya by Vistall:
writeD(0); // npdid - 16024 Tame Tiny Baby Kookaburra A9E89C
writeD(0); // level
writeD(0); // ?
writeD(0); // food? - 1200
writeF(0); // max Hp
writeF(0); // cur Hp
writeD(charInfoPackage.getVitalityPoints()); // H5 Vitality
}
}
public static CharSelectInfoPackage[] loadCharacterSelectInfo(String loginName)
{
CharSelectInfoPackage charInfopackage;
GArray<CharSelectInfoPackage> characterList = new GArray<CharSelectInfoPackage>();
ThreadConnection con = null;
FiltredPreparedStatement statement = null;
ResultSet pl_rset = null;
try
{
con = L2DatabaseFactory.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.isBase=1) WHERE account_name=? LIMIT 7");
statement.setString(1, loginName);
pl_rset = statement.executeQuery();
while(pl_rset.next()) // fills the package
{
charInfopackage = restoreChar(pl_rset, pl_rset);
if(charInfopackage != null)
characterList.add(charInfopackage);
}
}
catch(Exception e)
{
_log.log(Level.WARNING, "could not restore charinfo:", e);
}
finally
{
DatabaseUtils.closeDatabaseCSR(con, statement, pl_rset);
}
return characterList.toArray(new CharSelectInfoPackage[characterList.size()]);
}
private static CharSelectInfoPackage restoreChar(ResultSet chardata, ResultSet charclass)
{
CharSelectInfoPackage charInfopackage = null;
try
{
int objectId = chardata.getInt("obj_Id");
int classid = charclass.getInt("class_id");
boolean female = chardata.getInt("sex") == 1;
L2PlayerTemplate templ = CharTemplateTable.getInstance().getTemplate(classid, female);
if(templ == null)
{
_log.log(Level.WARNING, "restoreChar fail | templ == null | objectId: " + objectId + " | classid: " + classid + " | female: " + female);
return null;
}
String name = chardata.getString("char_name");
charInfopackage = new CharSelectInfoPackage(objectId, name);
charInfopackage.setLevel(charclass.getInt("level"));
charInfopackage.setMaxHp(charclass.getInt("maxHp"));
charInfopackage.setCurrentHp(charclass.getDouble("curHp"));
charInfopackage.setMaxMp(charclass.getInt("maxMp"));
charInfopackage.setCurrentMp(charclass.getDouble("curMp"));
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("hairstyle"));
charInfopackage.setHairColor(chardata.getInt("haircolor"));
charInfopackage.setSex(female ? 1 : 0);
charInfopackage.setExp(charclass.getLong("exp"));
charInfopackage.setSp(charclass.getInt("sp"));
charInfopackage.setVitalityPoints(chardata.getInt("vitality_points"));
charInfopackage.setClanId(chardata.getInt("clanid"));
charInfopackage.setKarma(chardata.getInt("karma"));
charInfopackage.setRace(templ.race.ordinal());
charInfopackage.setClassId(classid);
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)
{
PlayerManager.deleteFromClan(objectId, charInfopackage.getClanId());
PlayerManager.deleteCharByObjId(objectId);
return null;
}
deletetime = Config.DELETE_DAYS * 3600 * 24 - deletetime;
}
else
deletetime = 0;
charInfopackage.setDeleteTimer((int) deletetime);
charInfopackage.setLastAccess(chardata.getLong("lastAccess") * 1000L);
charInfopackage.setAccessLevel(chardata.getInt("accesslevel"));
if(charInfopackage.getAccessLevel() < 0 && !AutoBan.isBanned(objectId))
charInfopackage.setAccessLevel(0);
}
catch(Exception e)
{
_log.log(Level.INFO, "", e);
}
return charInfopackage;
}
}
вот мой
AUTHED
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 ReplyGameGuardQuery();
break;
case 0xd0:
if(data.remaining() < 2)
{
handleIncompletePacket(client);
break;
}
id3 = data.getShort() & 0xffff;
switch(id3)
{
case 0x36:
msg = new GotoLobby();
break;
case 0x3d:
msg = new RequestAllFortressInfo();
break;
case 0x5a:
msg = new RequestExCubeGameChangeTeam();
break;
//case 0xad:
case 0x93:
// msg = new RequestEx2ndPasswordCheck();
break;
//case 0xae:
case 0x94:
// msg = new RequestEx2ndPasswordVerify();
break;
//case 0xaf:
case 0x95:
// msg = new RequestEx2ndPasswordReq();
break;
case 0xb0:
msg = new RequestCharacterNameCreatable();
break;
default:
//_log.severe("Unknown packet on state: AUTHED, id: D0:" + Integer.toHexString(id3));
break;
}
break;
default:
//_log.severe("Unknown packet on state: AUTHED, id: " + Integer.toHexString(id));
break;
}
break;
Сообщений: 5,670
Тем: 145
Зарегистрирован: Nov 2008
Репутация:
33,771
trevolta, возможны изменения в пакетах, и скорее всего актуальным будет протокол тот, который выберут корейцы =)
Web программист\разработчик
— Есть только один способ проделать большую работу — полюбить ее. Если вы к этому не пришли, подождите. Не беритесь за дело.
Сообщений: 115
Тем: 5
Зарегистрирован: May 2011
Репутация:
26
Дак а нельзя подождать пока корейцы угомонятся и пока самим заниматсья чем то другим? Они по пять раз на дню протокол меняют. Как дураки фантики.
Сообщений: 78
Тем: 0
Зарегистрирован: May 2011
Репутация:
22
Ну если ждать пользы 0 а спешить не успиваеш!Но + в том что потом когда остановится погоня за протоколом)) У тех кто работал будет намного больше реализация чем у тех кто только начал! Потому что у них уже будет всё реализовано, останится поправить и дописывать то что не успели!