Jump to content
Returning Members: Password Reset Required ×

MapItemIcon - Icons on ground not showing


Recommended Posts

Posted

Hello everyone,

I’m having an issue and I’m hoping someone can guide me or provide advice on how to fix it.

Here’s the problem:
Items such as HeadGear, Armor, and Shield — basically any item that involves ItemColor — do not show their icon on the ground when dropped.

Has anyone encountered this before or know where I should look to resolve it? Any suggestions or guidance would be greatly appreciated.

Here is the result of debug.txt which I noticed that before <itemid> there is a value of 40.

Quote

Ani Index [40130005] Not Found In [ani/MapItemIcon.Ani] -- Mon Nov 17 18:15:27 2025
AniIndexInfo [40130005] Not Found in [ani/MapItemIcon.Ani] -- Mon Nov 17 18:15:27 2025



I'm running a client version 6609.

Posted

I couldn't find what you called in my 6609 version ANI file
Any data related to 40130005

So the question is whether you have used clients that have been modified by others, and whether you have aligned the data on the server with the file configuration on the client?

Posted
4 hours ago, kennylovecode said:

I couldn't find what you called in my 6609 version ANI file
Any data related to 40130005

So the question is whether you have used clients that have been modified by others, and whether you have aligned the data on the server with the file configuration on the client?

It should suppose to read in client as 130005 which is the itemid and this is also the result in my source when I tried to call the ItemID when it drop, I don't know why it added 40before the itemid. 

Posted
3 hours ago, soulfly said:

It should suppose to read in client as 130005 which is the itemid and this is also the result in my source when I tried to call the ItemID when it drop, I don't know why it added 40before the itemid. 

You can write an absolute value of 130005 at the packet when debugging and building it, and see if the client displays it.

Posted

Bro, I found the source on why it gives 40 before the itemid it was in the packet which I highlight below. Not sure how this gonna work with 🙂 As I'm not really don't know about packets and still learning with basics 🙂

What else could you suggest bro to fix the issue?

 

Quote

    public static unsafe ServerSockets.Packet ItemPacketCreate(this ServerSockets.Packet stream, MsgItemPacket Item)
    {
        stream.InitWriter();

        stream.Write(Extensions.Time32.Now.Value);
        stream.Write(Item.m_UID);//8
        stream.Write(Item.m_ID);//12
        stream.Write(Item.m_X);//16
        stream.Write(Item.m_Y);//18
        if (Item.MaxLife != 0)
            stream.Write(Item.MaxLife);//20
        else
            stream.Write((ushort)40);//Item.m_Color); - This is the one that triggered on adding the 40 value before the itemID.
        stream.Write((byte)Item.DropType);//22
        stream.Write(Item.Life);//23
        if (Item.DropType == MsgDropID.Effect)
            stream.Write((byte)Item.m_Color);//aici = 27 plus.
        else
            stream.Write((byte)Item.Plus);
        stream.Write(Item.ItemOwnerUID);//28

        if (Item.DontShow == 1)
        {
            stream.Write(2);//??
            stream.Write(3);//??
        }
        else
            stream.ZeroFill(8);//32
        stream.Write(Item.GuildID);//40
        stream.Write(Item.FlowerType);//44
        stream.Write(Item.Timer);//45
        stream.Write(Item.UnKnow);//53 uint
        stream.Write((uint)0);//57


        stream.Write(Item.OwnerX);
        stream.Write(Item.OwnerY);
        //  stream.Write(30933348);

        stream.ZeroFill(28);//??
        if (Item.Name != null)
            stream.Write(Item.Name, 16);
        stream.Write((uint)0);
        stream.Write((uint)0);
        stream.Write((uint)0);
        stream.Finalize(GamePackets.FloorMap);
        return stream;
    }
}

 

Posted (edited)

I found the error and fixed.

I just change the value 40:  stream.Write((ushort)40);//Item.m_Color);  to stream.Write((ushort)Item.m_Colo);//Item.m_Color); 

Edited by soulfly
Posted (edited)

I see that your version is close to mine according to your structure. I'm on 6609 and this is my packet 

writer.Write((ushort)PacketType.MsgMapItem);
writer.Write(Timestamp); // 4
writer.Write(Identity); // 8
writer.Write(Itemtype); // 12
writer.Write(MapX); // 16
writer.Write(MapY); // 18
writer.Write(Color); // 20
writer.Write((byte)Action); // 22
writer.Write(Data); // 23
writer.Write((byte)Composition); // 27
writer.Write(OwnerIdentity); // 28
writer.Write(SyndicateId); // 32
writer.Write(IsTrapNpcCanPk); // 36 !is trap friendly?
writer.Write(LeagueId); // 37
writer.Write(ServerId); // 41
writer.Write(EndTime); // 45
writer.Write(0); // 49
writer.Write(0); // 53
writer.Write(0); // 57
writer.Write(PosX); // 61
writer.Write(PosY); // 63
writer.Write(0UL); // 65
writer.Write(0UL); // 73
writer.Write(0UL); // 81
writer.Write(0); // 89
writer.Write(Name, 16); // 93

Names are from reverse. There are a few offsets that are also used, but I could'nt get their real function yet. LeagueID is the Union/Kingdom ID.

49, 53 and 57 are used on the trap types, but they don't have named functions and I still didn't test them.

The offsets 65, 73 and 81 are ulong (QWORD) and judging by the size of 28 bytes I'm starting to think that this may be related to Status flags.

Also, the field IsTrapNpcCanPk is a byte, the client do some validation and Idk what for. You can probably just send it as a boolean since you will handle the attack server side.

/// <summary>
/// Gets or sets a value indicating whether trap NPCs can participate in player killing (PK) interactions.
/// </summary>
/// <remarks>
/// 0,3,8,10: Trap NPCs cannot engage in PK interactions.
/// 1: Trap NPCs can engage in PK interactions.
/// 2: Trap NPCs can engage Non Team members in PK interactions.
/// 4: Trap NPCs can only engage enemies in PK interactions. (Probably anyone not friend, idk)
/// 5,6,7: Trap NPCs can only engage other Guild's members in PK interactions.
/// 9,11: Trap NPCs can only members of Leagues (Unions) from different Servers in PK interactions.
/// </remarks>
public byte IsTrapNpcCanPk { get; set; }

 

Edited by Konichu

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...