- Joined
- May 18, 2006
- Messages
- 2,065
- Reaction score
- 14
The Information Thread
Topic Created By Nuklear and Content Pooped By KingIzu
LinksMyths and Facts
If you actually know something:
Note: I made this months ago, so all of these below may not be correct.
Topic Created By Nuklear and Content Pooped By KingIzu
LinksMyths 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.
PacketsFact: 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.
[Server] Init
Header: 18 00 2a
Body:
[Client] Init
Header: 07 00 a3
Body:
[Client] Login
Header: ?? ?? 02
Body:
[Server] Login Error
Header: 04 00 2b
Body:
Errors:
[Server] Character List
Header: ?? ?? 11
Body:
For each player:
Player Data:
For each equipment:
Player Data:
[Server] Deleted Character List
Header: ?? ?? 19
Body:
For each deleted character:
Deleted Character Data:
I'll add more, but right now I'm hungry.Header: 18 00 2a
Body:
PHP:
(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
Header: 07 00 a3
Body:
PHP:
(byte)??
(byte)??
(byte)??
(byte)??
Header: ?? ?? 02
Body:
PHP:
(Char Array)Username
(byte)0x00
(Char Array) Password
(byte)0x00
Header: 04 00 2b
Body:
PHP:
(byte) Error
PHP:
UNDEFINED = 0x01,
WRONGID = 0x02,
WRONG_PASS = 0x03,
CONNECT_LATER = 0x04,
BLOCKED = 0x05,
ID_EXPIRED = 0x06,
TOO_YOUNG = 0x07,
NOT_ALLOWED = 0x08,
Header: ?? ?? 11
Body:
PHP:
(int) 0x00
(byte)0x00
(byte) Number of players
[Player Data]
(int)0x03
Player Data:
PHP:
(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]
Player Data:
PHP:
(short)Index
Header: ?? ?? 19
Body:
PHP:
(byte)Number of deleted characters
[Deleted Character Data]
Deleted Character Data:
PHP:
(int)Player ID
(Char Array)Name
(byte)0x00
(byte)Level? //Could be class..
(byte)Class? //Could be level..
(byte)Days remaining
If you actually know something:
Note: I made this months ago, so all of these below may not be correct.
PHP:
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
{
public ChangeLevelPacket( byte NewLevel )
: base( 1, 0x1a )
{
WriteData( NewLevel );
}
}
sealed internal class ChangeRageExpPacket : EditValuePacket
{
public ChangeRageExpPacket( int RageIncrease, int ExpIncrease )
: base( 16, 0x19 )
{
WriteData( RageIncrease );
WriteData( (int) 0x00 );
WriteData( ExpIncrease );
WriteData( (int) 0x00 );
}
}
sealed internal class ChangeHealthPacket : EditValuePacket
{
public ChangeHealthPacket( short CurrentHealth, short MaxHealth )
: base( 4, 0x05 )
{
WriteData( CurrentHealth );
WriteData( MaxHealth );
}
}
sealed internal class ChangeManaPacket : EditValuePacket
{
public ChangeManaPacket( short CurrentMana, short MaxMana )
: base( 4, 0x06 )
{
WriteData( CurrentMana );
WriteData( MaxMana );
}
}
sealed internal class ChangePhysicalAttackPacket : EditValuePacket
{
public ChangePhysicalAttackPacket( short Min, short Max )
:base( 4, 0x1b )
{
WriteData( Min );
WriteData( Max );
}
}
sealed internal class ChangeStatPointsPacket : EditValuePacket
{
public ChangeStatPointsPacket( short StatPoints )
: base( 2, 0x17 )
{
WriteData( StatPoints );
}
}
sealed internal class ChangeSkillPointsPacket : EditValuePacket
{
public ChangeSkillPointsPacket( short SkillPoints )
: base( 2, 0x18 )
{
WriteData( SkillPoints );
}
}
abstract internal class ChangeStatsPacket : EditValuePacket
{
private ChangeStatsPacket( short Size, byte ValueID ) : base( Size, ValueID ) { }
sealed internal class StrengthPacket : ChangeStatsPacket
{
public StrengthPacket( byte Strength, short OTP, short MinPhys, short MaxPhys )
: base( 7, 0x00 )
{
WriteData( Strength );
WriteData( OTP );
WriteData( MinPhys );
WriteData( MaxPhys );
}
}
sealed internal class HealthPacket : ChangeStatsPacket
{
public HealthPacket( byte Health, short CurrentHP, short MaxHP, short NonElementalResistance )
: base( 7, 0x01 )
{
WriteData( Health );
WriteData( CurrentHP );
WriteData( MaxHP );
WriteData( NonElementalResistance );
}
}
sealed internal class IntPacket : ChangeStatsPacket
{
public IntPacket( byte Int, short MinMagic, short MaxMagic, short FireResistance, short IceResistance, short LightningResistance )
: base( 11, 0x02 )
{
WriteData( Int );
WriteData( MinMagic );
WriteData( MaxMagic );
WriteData( FireResistance );
WriteData( IceResistance );
WriteData( LightningResistance );
}
}
sealed internal class WisdomPacket : ChangeStatsPacket
{
public WisdomPacket( byte Wisdom, short CurrentMP, short MaxMP, short CurseResistance )
: base( 7, 0x03 )
{
WriteData( Wisdom );
WriteData( CurrentMP );
WriteData( MaxMP );
WriteData( CurseResistance );
}
}
sealed internal class AgilityPacket : ChangeStatsPacket
{
public AgilityPacket( byte Agility, short OTP, short Evasion, short MinPhys, short MaxPhys )
: base( 7, 0x03 )
{
WriteData( Agility );
WriteData( OTP );
WriteData( Evasion );
WriteData( MinPhys );
WriteData( MaxPhys );
}
}
}
sealed internal class ChangeCurrentHPPacket : EditValuePacket
{
public ChangeCurrentHPPacket( short CurrentHP )
: base( 2, 0x07 )
{
WriteData( CurrentHP );
}
}
sealed internal class ChangeCurrentMPPacket : EditValuePacket
{
public ChangeCurrentMPPacket( short CurrentMP )
: base( 2, 0x08 )
{
WriteData( CurrentMP );
}
}
sealed internal class ChangeOTPPacket : EditValuePacket
{
public ChangeOTPPacket( short OTP )
: base( 2, 0x09 )
{
WriteData( OTP );
}
}
sealed internal class ChangeMinPhysAttackPacket : EditValuePacket
{
public ChangeMinPhysAttackPacket( short MinAttack )
: base( 2, 0x0b )
{
WriteData( MinAttack );
}
}
sealed internal class ChangeMaxPhysAttackPacket : EditValuePacket
{
public ChangeMaxPhysAttackPacket( short MaxAttack )
: base( 2, 0x0c )
{
WriteData( MaxAttack );
}
}
}
sealed class ShowEffectPacket : Packet
{
public ShowEffectPacket( int PlayerID, Effects Effect )
: base( 0x49, 5 )
{
WriteData( PlayerID );
WriteData( (byte) Effect );
}
}
abstract class ShowAnimationPacket : Packet
{
private ShowAnimationPacket( short Size ) : base( 0x3d) { Reset(Size); }
sealed internal class ShowMonsterAnimationPacket : ShowAnimationPacket
{
public ShowMonsterAnimationPacket( int MonsterID, Animation Anim )
: base(5)
{
WriteData( MonsterID );
WriteData( (byte) Anim );
}
}
sealed internal class ShowPlayerSitAnimationPacket : ShowAnimationPacket
{
public ShowPlayerSitAnimationPacket( int PlayerID, bool Sitting )
: base( 5 )
{
WriteData( PlayerID );
WriteData( (byte) 0x03 );
WriteData( Sitting );
}
}
}
sealed class DressPacket : Packet
{
public DressPacket( int PlayerID, uint ItemID, ushort ItemIndex )
: base( 0x05, 10 )
{
WriteData( PlayerID );
WriteData( ItemID );
WriteData( ItemIndex );
}
}
sealed class UndressPacket : Packet
{
public UndressPacket( int PlayerID, uint ItemID, ushort ItemIndex )
: base( 0x06, 10 )
{
WriteData( PlayerID );
WriteData( ItemID );
WriteData( ItemIndex );
}
}
sealed class ChatPacket : Packet
{
public ChatPacket( string Name, string Message )
: base( 0x3c)
{
Reset( (short) (Name.Length + Message.Length + 2) );
WriteData( Name.ToCharArray( ) );
WriteData( (byte) 0x00 );
WriteData( Message.ToCharArray( ) );
WriteData( (byte) 0x00 );
}
}
sealed class UnavailablePlayerPacket : Packet
{
public UnavailablePlayerPacket( )
: base( 0x43, 1 )
{
WriteData( (byte) 0x19 );
}
}
sealed class NoticePacket : Packet
{
public NoticePacket( string Notice )
:base(0x0f)
{
WriteData( Notice.ToCharArray( ) );
WriteData( (byte) 0x00 );
}
}
sealed class PlayerMovePacket : Packet
{
public PlayerMovePacket( int PlayerID, sbyte X, sbyte Y, sbyte Z )
: base( 0x23, 7 )
{
WriteData( (uint) PlayerID );
WriteData( X );
WriteData( Y );
WriteData( Z );
}
}
sealed class MonsterSpawnPacket : Packet
{
public MonsterSpawnPacket( Monster Monster )
: base(0x33, 41)
{
WriteData( Monster.Index );
WriteData( Monster.ID );
WriteData( Monster.Position.PositionX );
WriteData( Monster.Position.PositionY );
WriteData((short) 0x02);
WriteData( Monster.HP[0] );
WriteData( Monster.HP[1] );
WriteData( (int) 0x00 );
WriteData( (int) 0x00 );
WriteData( (int) 0x00 );
WriteData( (int) 0x00 );
WriteData( (byte) 0x00 );
}
}
sealed class DeleteItemPacket : Packet
{
public DeleteItemPacket( uint ItemID )
: base( 0x08, 5 )
{
WriteData( ItemID );
WriteData( (byte) 0x04 );
}
}
sealed class EnchantItemPacket : Packet
{
public EnchantItemPacket( uint ItemID, ushort ItemIndex, byte Prefix, byte CurrentEndruance, byte MaximumEndurance )
: base( 0x5c, 26 )
{
WriteData( ItemID );
WriteData( ItemIndex );
WriteData( Prefix );
WriteData( (int) 0x00 );
WriteData( (int) 0x01 );
WriteData( CurrentEndruance );
WriteData( MaximumEndurance );
WriteData( (long) 0x00 );
WriteData( (byte) 0x00 );
}
}
sealed class FailEnchantItemPacket : Packet
{
public FailEnchantItemPacket( )
: base( 0x43, 1 )
{
WriteData( (byte) 0x36 );
}
}
abstract internal class ItemAlterPacket : Packet
{
private ItemAlterPacket( ) : base( 0x09, 9 ) { }
internal sealed class EnchanterItemAlterPacket : ItemAlterPacket
{
public EnchanterItemAlterPacket( uint ItemID, int Amount )
{
WriteData( ItemID );
WriteData( Amount );
WriteData( (byte) 0x15 );
}
}
internal sealed class GeonAlterPacket : ItemAlterPacket
{
public GeonAlterPacket( uint ItemID, int Amount )
{
WriteData( ItemID );
WriteData( Amount );
WriteData( (byte) 0x0b );
}
}
}
sealed class EditSkillPacket : Packet
{
public EditSkillPacket( byte SkillID, byte Level )
: base( 0x51, 2 )
{
WriteData( SkillID );
WriteData( Level );
}
}
sealed class SpawnDropPacket : Packet
{
public SpawnDropPacket( ushort Index, int DropID, int PositionX, int PositionY, int Amount )
: base( 0x36, 18 )
{
WriteData( Index );
WriteData( DropID );
WriteData( PositionX );
WriteData( PositionY );
WriteData( Amount );
}
}
}
Last edited by a moderator: