3013 Packet - Items part

02/21/2014 23:42 tarek1500#1
iSro
Hi , i wanna know some details about items parse here code

Code:
07                         //slot
00 00 00 00                //unknown
AB 8C 00 00                //Item ID
00                         //Plus
E0 B4 D9 0E 00 00 00 00    //White stat
0F 01 00 00                //Durab.
04                         //Blue Number
0C 02 00 00 C8 00 00 00    //Blue
0B 02 00 00 08 00 00 00    //Blue
0A 02 00 00 06 00 00 00    //Blue
0F 02 00 00 64 00 00 00    //Blue
01 00                      //For Socket
02 00                      //For Adv Elixir
03 01                      //??
000000000000000000         //??
04 01                      //??
000000000000000000         //??
what these "??" for?
02/22/2014 00:02 DaxterSoul#2
I can only provide the 4 bytes you marked as "unknown", im sorry but im not into iSRO
Code:
        4   uint    Item.RentType
        switch(Item.RentType)
        {
            case 1:
                2   ushort  Item.Rent.CanDelete (adds "Will be deleted when time period is over" to item)
                4   uint    Item.Rent.PeriodBeginTime
                4   uint    Item.Rent.PeriodEndTime
            break;
 
            case 2:
                2   ushort  Item.Rent.CanDelete (adds "Will be deleted when time period is over" to item)
                2   ushort  Item.Rent.CanRecharge (adds "Able to extend" to item)
                4   uint    Item.Rent.MeterRateTime
            break;
 
            case 3:
                2   ushort  Item.Rent.CanDelete (adds "Will be deleted when time period is over" to item)
                4   uint    Item.Rent.PeriodBeginTime
                4   uint    Item.Rent.PeriodEndTime
                2   ushort  Item.Rent.CanRecharge (adds "Able to extend" to item)
                4   uint    Item.Rent.PackingTime
            break;
        }
02/22/2014 13:01 tarek1500#3
Quote:
Originally Posted by DaxterSoul View Post
I can only provide the 4 bytes you marked as "unknown", im sorry but im not into iSRO
Code:
        4   uint    Item.RentType
        switch(Item.RentType)
        {
            case 1:
                2   ushort  Item.Rent.CanDelete (adds "Will be deleted when time period is over" to item)
                4   uint    Item.Rent.PeriodBeginTime
                4   uint    Item.Rent.PeriodEndTime
            break;
 
            case 2:
                2   ushort  Item.Rent.CanDelete (adds "Will be deleted when time period is over" to item)
                2   ushort  Item.Rent.CanRecharge (adds "Able to extend" to item)
                4   uint    Item.Rent.MeterRateTime
            break;
 
            case 3:
                2   ushort  Item.Rent.CanDelete (adds "Will be deleted when time period is over" to item)
                4   uint    Item.Rent.PeriodBeginTime
                4   uint    Item.Rent.PeriodEndTime
                2   ushort  Item.Rent.CanRecharge (adds "Able to extend" to item)
                4   uint    Item.Rent.PackingTime
            break;
        }
Problem in 0301 & 0401 , but thx anyway
02/22/2014 14:33 qkuh#4
Just look for an item where the zero bytes are not zero and post the screenshot here. Must be something new. Could be socket related.
02/22/2014 15:02 tarek1500#5
[Only registered and activated users can see links. Click Here To Register...]

Look normal
02/22/2014 15:27 qkuh#6
And the zero bytes are not zero? :'o Post the packet part.
02/22/2014 20:32 DaxterSoul#7
If you don't know what those bytes change on the item I guess you can ignore them as long as you parse the structure correctly
This should still work there:
Code:
                1   byte    OptType (3 => ?)
                1   byte    OptCount
                ForEach(Option)
                {
                    1   byte    Option.Slot
                    4   uint    Option.ID
                    4   uint    Option.OptValue (=> "?")
                }
                1   byte    OptType (4=> ?)
                1   byte    OptCount
                ForEach(Option)
                {
                    1   byte    Option.Slot
                    4   uint    Option.ID
                    4   uint    Option.OptValue (=> "?")
                }
02/22/2014 21:32 tarek1500#8
I think 0401 stand for "Lock" but i don't know the full struct
anyway i ll just ignore them :D

thx all
02/23/2014 01:17 qkuh#9
Quote:
Originally Posted by DaxterSoul View Post
If you don't know what those bytes change on the item I guess you can ignore them as long as you parse the structure correctly
This should still work there:
Code:
                1   byte    OptType (3 => ?)
                1   byte    OptCount
                ForEach(Option)
                {
                    1   byte    Option.Slot
                    4   uint    Option.ID
                    4   uint    Option.OptValue (=> "?")
                }
                1   byte    OptType (4=> ?)
                1   byte    OptCount
                ForEach(Option)
                {
                    1   byte    Option.Slot
                    4   uint    Option.ID
                    4   uint    Option.OptValue (=> "?")
                }
Did you reverse it? If not I would not rely on that. Just watch for differences. Easiest way to get packet structures.
02/26/2014 06:45 Demonsc#10
Sorry to hijack this post buts it hard finding experience members in what you guys are able to do with ur coding abilties lol.
Someone please tell me how you guys started learning all this lol... I know basic coding, how do i learn about packets, and what you guys can do when it comes to modifying other game clients? Any help would be greatly appreciated, i love coding.
02/26/2014 12:17 DaxterSoul#11
Quote:
Originally Posted by qkuh View Post
Did you reverse it? If not I would not rely on that. Just watch for differences. Easiest way to get packet structures.
Not reversed but based on database structure. We all know how lazy joymax is...
I wouldn't rely on that either but it would be the best method for him to use since it changes the packet length.
Monitoring is the key here.
02/26/2014 12:47 qkuh#12
Okay, fine! :)
02/26/2014 16:11 Royalblade*#13
Just saw this post. This stuff below is taken from somewhere else.. don't remember where but LastThief sent it to me before.

Quote:
//Opcode: 0x3013
//Name: SERVER_AGENT_CHARACTER_DATA
//Description:
//Encryption: false
//Massive: false
public const ushort SERVER_AGENT_CHARACTER_DATA = 0x3013;
// 4 uint *unk00
// 4 uint RefObjID
// 1 byte Scale
// 1 byte Level
// 1 byte MaxLevel
// 8 ulong ExpOffset
// 4 uint SExpOffset
// 8 ulong RemainGold
// 4 uint RemainSkillPoint
// 2 ushort RemainStatPoint
// 1 byte RemainHwanCount
// 4 uint GatheredExpPoint (Use?)
// 4 uint HP
// 4 uint MP
// 1 byte AutoInverstExp(1 = Beginner Icon, 2 = Helpful, 3 = Beginner&Helpful)
// 1 byte DailyPK
// 2 ushort TotalPK
// 4 uint PKPenaltyPoint
// 1 byte HwanLevel
// 1 byte *unk01 -> Check for != 0
// 1 byte Inventory.Size
// 1 byte Inventory.Items.Count
// foreach(InventoryItem)
// {
// *** VISIT PRIVAT_INVENTORY ***
// }
//
// 1 byte Character.AvatarInventory.Size
// 1 byte Character.AvatarInventory.Items.Count
// foreach(AvatarItem)
// {
// *** VISIT PRIVAT_INVENTORY ***
// }
//
// 1 byte unk03 -> Check for != 0 (MaskFlag?)
//
// 1 byte MasteryFlag [0 = done, 1 = Mastery]
// while(MasteryFlag = 1)
// {
// 4 uint Mastery.ID
// 1 byte Mastery.Level
//
// 1 byte MasterFlag (0 = done, 1 = Mastery)
// }
//
// 1 byte SkillFlag [0 = done, 1 = Skill]
// while(SkillFlag = 1)
// {
// 4 uint Skill.ID
// 1 byte Skill.Enable
//
// 1 byte SkillFlag (0 = done, 1 = Skill)
// }
//
// 2 ushort CompletedQuestCount
// foreach(CompletedQuet)
// {
// 4 uint RefQuestID
// }
// 1 byte ActiveQuestCount
// foreach(ActiveQuest)
// {
// 4 uint Quest.ID
// 1 byte Quest.AchievementCount (Repetition Amount = Bit && Completetion Amount = Bit)
// 1 byte Quest.*unk04 -> Check for != 0
// 1 byte Quest.Type (8 = , 24 = , 88 = )
// 1 byte Quest.Status (1 = Untouched, 7 = Started, 8 = Complete)
// 1 byte Quest.ObjectiveCount
// foreach(Objective)
// {
// 1 byte Objective.ID
// 1 byte Objective.Status (00 = done, 01 = incomplete)
// 2 ushort Objective.Name.Length
// * string Objective.Name
// 1 byte Objective.TaskCount
// foreach(ObjectiveTask)
// {
// 4 uint Task.Value (=> Killed monsters; Collected items)
// }
// }
// if(Quest.Type == 88)
// {
// 1 byte Quest.TaskCount
// foreach(QuestTask)
// {
// 4 uint RefObjID (=> NPCs to deliver to, when complete you get reward)
// }
// }
// }
//
// 1 byte *unk05 -> Check for != 0
// 4 ushort *unk06 -> Check for != 0
//
// 4 uint UniqueID
// 4 ushort RegionID (=> XSec; YSec)
// 4 float XOffset
// 4 float ZOffset
// 4 float YOffset
// 1 byte DestinationFlag
// 1 byte MovementType(0 = Walking, 1 = Running)
// if(DestinationFlag)
// {
// 1 byte DestXSec
// 1 byte DestYSec
// 2 ushort DestX
// 2 ushort DestZ
// 2 ushort DestY
// }
// else
// {
// 1 byte SourceFlag (1 = Sky-/ArrowKey-walking)
// 2 ushort Angle
// }
// 1 byte StateFlag(1 = Alive, 2 = Dead)
// 1 byte *unk07 -> Check for != 0
// 1 byte Action (0 = None, 2 = Walking, 3 = Running, 4 = Sitting)
// 1 byte Status(0 = None,2 = ??*@GrowthPet*, 3 = Invincible, 4 = Invisible)
// 4 float WalkSpeed
// 4 float RunSpeed
// 4 float HwanSpeed
// 1 byte ActiveBuffCount
// foreach(ActiveBuff)
// {
// RefSkillID
// TimedJobID
// if(RefSkill.Param2 is 1701213281 -> atfe -> "auto transfer effect" like Recovery Division)
// {
// 1 byte Creator
// }
// }
//
// 2 ushort Name.Length
// * string Name
// 2 ushort JobName.Length
// * string JobName
// 1 byte JobType (0 = None, 1 = Trader, 2 = Tief, 3 = Hunter)
// 1 byte JobLevel
// 4 uint JobExp
// 4 uint JobContribution
// 4 uint JobReward
// 1 byte *unk08 -> Check for != 0 (According to Spawn structure => MurderFlag?)
// 1 byte *unk09 -> Check for != 0 (According to Spawn structure => RideFlag or AttackFlag?)
// 1 byte *unk10 -> Check for != 0 (According to Spawn structure => EquipmentCountdown?)
// 1 byte PK Flag(255 = Disable, 34 = Enable)
// 8 ulong *unk11
// 4 uint JID (=> GameAccountID)
// 1 byte GMFlag
// 1 byte *unk12
// 1 byte HotkeyCount
// foreach(Hotkey)
// {
// 1 byte SlotSeq
// 1 byte SlotType(37 = COS Command, 70 = InventoryItem, 71 = EquipedItem, 73 = Skill, 74 = Action, 78 = EquipedAvatar)
// 4 uint Data
// }
// 1 byte HP Slot (FValue * 10 + Slot)
// 1 byte HP Value (Enabled = 128 + Value)
// 1 byte MP Slot(FValue * 10 + Slot)
// 1 byte MP Value(Enabled = 128 + Value)
// 1 byte Universal Slot (Enabled = 128 + Value)
// 1 byte Universal Value(Enabled = 128,0 = Disabled)
// 1 byte Potion Delay(Enabled = 128 + Value)
//
// 1 byte BlockedPlayCount
//
// foreach(BlockedPlayer)
// {
// 2 ushort TargetName.Length
// * string TargetName
// }
// 4 uint *unk13
// 1 byte *unk14
02/26/2014 17:58 DaxterSoul#14
Well you can just view the original from my wiki
[Only registered and activated users can see links. Click Here To Register...]
02/27/2014 02:41 Demonsc#15
Quote:
Originally Posted by Demonsc View Post
Sorry to hijack this post buts it hard finding experience members in what you guys are able to do with ur coding abilties lol.
Someone please tell me how you guys started learning all this lol... I know basic coding, how do i learn about packets, and what you guys can do when it comes to modifying other game clients? Any help would be greatly appreciated, i love coding.
bump?