|
Administrator of Awesome
Rank: Alpha Member
|
|
Join Date: May 2006
Location: Earth
Posts: 3,423
|
08-14-2007, 10:18 PM
|
The Information Thread
Topic Created By Nuklear and Content Pooped By KingIzu
Links[Only Registered and Activated Users Can See Links. Click Here To Register...] ([Only Registered and Activated Users Can See Links. Click Here To Register...])
Myths and Facts
Myth: Dungeons are placed in very high/low places where we can't see them.
Fact: They're really on a separate map. Somewhat. It's very hard to explain.
Myth: Nuklear is homosexual.
Fact: Nuklear may have sometimes gone too far on his gay jokes. But, Nuklear is not, and will never be homosexual nor bisexual.
Packets
[Server] Init
Header: 18 00 2a
Body:
PHP Code:
(byte)0x47 (byte)0xa7 (byte)0xf6 (byte)0x16 (byte)first Key // for packet encryption (byte)0xd4 (byte)0x4c (byte)0x7e (byte)0x44 (byte)0x4c (byte)0x0d (byte)0x2d (byte)0x45 (byte)0x61 (byte)0x1e (byte)0x00 (byte)0x00 (byte)0x?? //I really don't know what it is. (byte)0x00 (byte)0x00 (byte)0x00 (byte)0x01 (byte)0x12 (byte)0xfc
[Client] Init
Header: 07 00 a3
Body:
PHP Code:
(byte)?? (byte)?? (byte)?? (byte)??
[Client] Login
Header: ?? ?? 02
Body:
PHP Code:
(Char Array)Username (byte)0x00 (Char Array) Password (byte)0x00
[Server] Login Error
Header: 04 00 2b
Body: Errors:
PHP Code:
UNDEFINED = 0x01, WRONGID = 0x02, WRONG_PASS = 0x03, CONNECT_LATER = 0x04, BLOCKED = 0x05, ID_EXPIRED = 0x06, TOO_YOUNG = 0x07, NOT_ALLOWED = 0x08,
[Server] Character List
Header: ?? ?? 11
Body:
PHP Code:
(int) 0x00 (byte)0x00 (byte) Number of players
[Player Data]
(int)0x03
For each player:
Player Data:
PHP Code:
(int)Player ID (Char Array) Player Name (byte)0x00 (byte)Class (byte)Level (byte)0x00 // Don't know, could be meant like that. (byte)Strength (byte)Health (byte)Intelligence (byte)Wisdom (byte)Agility (byte)Face (byte)Hair (byte)Equipment count.
[Equipment]
For each equipment:
Player Data:
[Server] Deleted Character List
Header: ?? ?? 19
Body:
PHP Code:
(byte)Number of deleted characters
[Deleted Character Data]
For each deleted character:
Deleted Character Data:
PHP Code:
(int)Player ID (Char Array)Name (byte)0x00 (byte)Level? //Could be class.. (byte)Class? //Could be level.. (byte)Days remaining
I'll add more, but right now I'm hungry.
If you actually know something:
Note: I made this months ago, so all of these below may not be correct.
PHP Code:
namespace KalServer.Connections.Packets { internal enum LoginError { Undefined = 0x01, WrongID = 0x02, WrongPassword = 0x03, TryAgain = 0x04, Blocked = 0x05, Expired = 0x06, Young = 0x07, NotAllowed = 0x08, NoError = 0x09, }
internal enum Effects { TakeMedicine = 0x01, LevelUp = 0x03, Rebirth = 0x04, PowerImpr = 0x05, DamageRed = 0x06, EBImpr = 0x07, AccuImpr = 0x08, EvaImpr = 0x09, PerfectDefense = 0x0A, HPAbsorb = 0x0B, TigerClaws = 0x0C, BearSkin = 0x0D, Wisdom = 0x0E, Foresight = 0x0F, EagleWings = 0x10, FishingStone = 0x12, EXPStone = 0x13, WealthStone = 0x14, LuckyKey = 0x15, LuckyStone = 0x16, LightningBlow = 0x21 }
internal enum Animation {
}
internal enum HitType { Normal = 0x01, Critical = 0x02, Miss = 0x00, }
sealed class InitPacket : Packet { public InitPacket(byte FirstKey, byte Unknown) : base(0x2A, 0x00, 24) { WriteData((byte)0x47); WriteData((byte)0xa7); WriteData((byte)0xf6); WriteData((byte)0x16); WriteData(FirstKey); WriteData((byte)0xd4); WriteData((byte)0x4c); WriteData((byte)0x7e); WriteData((byte)0x44); WriteData((byte)0x4c); WriteData((byte)0x0d); WriteData((byte)0x2d); WriteData((byte)0x45); WriteData((byte)0x61); WriteData((byte)0x1e); WriteData((byte)0x00); WriteData((byte)0x00); WriteData(Unknown); WriteData((byte)0x00); WriteData((byte)0x00); WriteData((byte)0x00); WriteData((byte)0x01); WriteData((byte)0x12); WriteData((byte)0xfc); } }
sealed class ConfirmSelectPacket : Packet { public ConfirmSelectPacket() : base(0x04, 1) { WriteData((byte)0x00); } }
sealed class ELoginPacket : Packet { public ELoginPacket(LoginError Error) : base(0x2B, 1) { WriteData((byte)Error); } }
sealed class CharacterDeletedListPacket : Packet { public CharacterDeletedListPacket(List<Character> Chars) : base(0x19) { short PacketSize = 1;
foreach ( Character Char in Chars ) { PacketSize += 8; PacketSize += Char.Name.Length; }
WriteData( (byte) Chars.Count );
foreach ( Character Char in Chars ) { WriteData( (int)Char.ID ); WriteData( Char.Name.ToCharArray( ) ); WriteData( (byte) 0x00 ); WriteData( (byte)Char.Level ); WriteData( (byte)Char.Class ); WriteData( (byte)Char.DaysRemaining ); } } }
sealed class ECreateCharacterPacket : Packet { public ECreateCharacterPacket() : base(0x2C, 1) { WriteData((byte)0x04); } }
sealed class Check : Packet { public Check() : base(0x1E, 0) {
} }
sealed class UnknownPacket : Packet { public UnknownPacket( ) : base( 0x16, 1 ) { WriteData( 0x00 ); } }
sealed class UnknownPacket2 : Packet { public UnknownPacket2( ) : base( 0x1C, 1 ) { WriteData( (byte) 0x0b ); } }
sealed class CharacterListPacket : Packet { public CharacterListPacket(List<Character> Characters) : base(0x11) { short PacketSize = 10; for (byte i = 0; i < Characters.Count; i++) { //Saftey Measure if (i > 2) break;
PacketSize += (short)Characters[i].Name.Length; PacketSize += 19; PacketSize += (short)(Characters[i].Equipment.Count * 2);
}
Reset(PacketSize);
WriteData((int)0x00); WriteData((byte)0x00); WriteData((byte)Characters.Count);
for (byte i = 0; i < Characters.Count; i++) { WriteData(Characters[i].ID); WriteData(Characters[i].Name.ToCharArray()); WriteData((byte)0x00); WriteData((byte)Characters[i].Class); WriteData(Characters[i].Level); WriteData((byte)0x00); WriteData(Characters[i].Strength); WriteData(Characters[i].Health); WriteData(Characters[i].Intelligence); WriteData(Characters[i].Wisdom); WriteData(Characters[i].Agility); WriteData((byte)Characters[i].Face); WriteData((byte)Characters[i].Hair);
WriteData((byte)Characters[i].Equipment.Count); for (byte j = 0; j < Characters[i].Equipment.Count; j++) { //Safety Measure if (j > 4) break;
WriteData(Characters[i].Equipment[j]); } }
WriteData((int)0x03); Characters.Clear(); } }
sealed class PlayerInfoPacket : Packet { public PlayerInfoPacket(Character Player ) : base( 0x42, 54 ) { WriteData( Player.Job ); WriteData( (short) 0x00 ); WriteData( Player.Contribution ); WriteData( Player.Strength ); WriteData( Player.Health ); WriteData( Player.Intelligence ); WriteData( Player.Wisdom ); WriteData( Player.Agility ); WriteData( (short) Player.HP[0] ); WriteData( (short) Player.HP[1] ); WriteData( (short) Player.MP[0] ); WriteData( (short) Player.MP[1] ); WriteData( Player.OTP ); WriteData( Player.Evasion ); WriteData( Player.Defense ); WriteData( Player.Absorption ); WriteData( (int) Player.Exp ); WriteData( (int) 0x00 ); WriteData( (short) Player.PhysicalDamage[0] ); WriteData( (short) Player.PhysicalDamage[1] ); WriteData( (short) Player.MagicalDamage[0] ); WriteData( (short) Player.MagicalDamage[1] ); WriteData( Player.StatPoints ); WriteData( Player.SkillPoints ); WriteData( Player.FireResist ); WriteData( Player.IceResist ); WriteData( Player.LightningResist ); WriteData( Player.CurseResist ); WriteData( Player.NonElementResist ); WriteData( Player.Rage );
} }
sealed class SendSkillsPacket : Packet { public SendSkillsPacket( Skills Skills ) : base( 0x10) { Reset( 3 );
WriteData( (byte) 1 ); // Skill Count
WriteData( (byte) 0 ); // Skill ID WriteData( (byte) 1 ); // Skill Level }
}
sealed class PlayerSpawnPacket : Packet { public PlayerSpawnPacket( Character Char, bool IsPlayerChar ) : base(0x32) { Reset((short) (59 + Char.Name.Length));
WriteData( Char.ID ); WriteData( Char.Name.ToCharArray( ) ); WriteData( (byte) 0x00 );
if ( IsPlayerChar ) WriteData( (byte) 0x80 | (byte) Char.Class ); else WriteData( (byte) Char.Class );
WriteData( Char.Position.PositionX ); WriteData( Char.Position.PositionY ); WriteData( Char.Position.PositionZ ); WriteData( (short) 0x02 );
if ( Char.IsAlive ) WriteData( (byte) 0x00 ); else WriteData( (byte) 0x02 );
WriteData( (byte) 0x00 ); WriteData( (short) 0x00 );
if ( Char.Inventory.Weapon != null ) WriteData( Char.Inventory.Weapon.Index ); else WriteData( (ushort) 0 );
if ( Char.Inventory.Shield != null ) WriteData( Char.Inventory.Shield.Index ); else WriteData( (ushort) 0 );
if ( Char.Inventory.Helmet != null ) WriteData( Char.Inventory.Helmet.Index ); else WriteData( (ushort) 0 );
if ( Char.Inventory.Armor != null ) WriteData( Char.Inventory.Armor.Index ); else WriteData( (ushort) 0 );
if ( Char.Inventory.Shorts != null ) WriteData( Char.Inventory.Shorts.Index ); else WriteData( (ushort) 0 );
if ( Char.Inventory.Gloves != null ) WriteData( Char.Inventory.Gloves.Index ); else WriteData( (ushort) 0 );
if ( Char.Inventory.Boots != null ) WriteData( Char.Inventory.Boots.Index ); else WriteData( (ushort) 0 );
WriteData( (byte) Char.Face ); WriteData( (byte) Char.Hair );
for ( int i = 0; i < 19; i++ ) WriteData( (byte) 0x00 ); } }
sealed class DespawnObjectPacket : Packet { public DespawnObjectPacket( int ID ) : base( 0x38, 4 ) { WriteData( ID ); }
internal sealed class DespawnPlayerPacket : Packet { public DespawnPlayerPacket( int ID ) : base( 0x37, 4 ) { WriteData( ID ); } }
internal sealed class RemoveDropPacket : Packet { public RemoveDropPacket( int ID ) : base( 0x3b, 4 ) { WriteData( ID ); } } }
sealed class Camera : Packet { public Camera( Character Player, ushort ID ) : base( 0x1b, 10 ) { WriteData( ID ); WriteData( Player.Position.PositionX ); WriteData( Player.Position.PositionY ); } }
sealed class SendInventoryPacket : Packet { public SendInventoryPacket( Inventory PlayerInventory ) : base( 0x04) { List<Item> Inventory = PlayerInventory.GetAllItems(); Reset( (short) ((Inventory.Count * 26) + 1) ); WriteData((byte)Inventory.Count));
foreach ( Item Slot in Inventory ) { WriteData( Slot.ID ); WriteData( Slot.Index ); WriteData( Slot.Prefix ); WriteData( Slot.Info ); WriteData( Slot.Count ); WriteData( Slot.MaxEndurance ); WriteData( Slot.CurrentEndurance ); WriteData( Slot.SetGem ); WriteData( Slot.AttackUP ); WriteData( Slot.MagicUP ); WriteData( Slot.DefenseUP ); WriteData( Slot.OTPUP ); WriteData( Slot.EvasionUP ); WriteData( Slot.Polished ); WriteData( Slot.EBLevel ); WriteData( Slot.EBRate ); } } }
abstract class EditValuePacket : Packet { private EditValuePacket( short Size, byte ValueID ) : base( 0x45) { Reset((short)(Size + 1)); WriteData( ValueID ); }
sealed internal class ChangeLevelPacket : EditValuePacket &nb |