Issue information

Issue ID
#2536
Status
Fixed
Severity
None
Started
Hercules Elf Bot
Dec 13, 2008 3:20
Last Post
Hercules Elf Bot
Dec 13, 2008 3:20
Confirmation
N/A

Hercules Elf Bot - Dec 13, 2008 3:20

Originally posted by [b]Koca[/b]
http://www.eathena.ws/board/index.php?autocom=bugtracker&showbug=2536

Hi, I found something (IMG:style_emoticons/default/smile.gif) I'll explain it on example: I create named item (through getitem2 or getnameditem) with char 182968. card[2] slot saves first 16 bits of char id, card[3] the next ones. Card number in item data structure (mmo.h) is defined as short, so -32k to +32k. It means that card[2] isn't 51896, but -13640. That's not so bad, but countitem2 and delitem2 uses int instead of short, so it is checking for 51896 (we get this integer number directly from script - the sign quest for example uses that).

To fix this, all we need is to add (short) to countitem2 and delitem2 (it already is in getitem2):

CODE
Index: script.c
===================================================================
--- script.c    (revision 13395)
+++ script.c    (working copy)
@@ -5166,10 +5166,10 @@
    iden=script_getnum(st,4);
    ref=script_getnum(st,5);
    attr=script_getnum(st,6);
-    c1=script_getnum(st,7);
-    c2=script_getnum(st,8);
-    c3=script_getnum(st,9);
-    c4=script_getnum(st,10);
+    c1=(short)script_getnum(st,7);
+    c2=(short)script_getnum(st,8);
+    c3=(short)script_getnum(st,9);
+    c4=(short)script_getnum(st,10);

    if(nameid<0) { // ƒ‰ƒ“ƒ_ƒ€
        nameid=itemdb_searchrandomid(-nameid);
@@ -5624,10 +5624,10 @@
    iden=script_getnum(st,4);
    ref=script_getnum(st,5);
    attr=script_getnum(st,6);
-    c1=script_getnum(st,7);
-    c2=script_getnum(st,8);
-    c3=script_getnum(st,9);
-    c4=script_getnum(st,10);
+    c1=(short)script_getnum(st,7);
+    c2=(short)script_getnum(st,8);
+    c3=(short)script_getnum(st,9);
+    c4=(short)script_getnum(st,10);

    if( amount <= 0 )
        return 0;// nothing to do


But i think this is ugly, I'd prefer modifying mmo.h and source code to use unsigned short and making script for correcting database: update inventory set card2 = (65536 + card2) where card2 < 0; ... the same for storage, cart_inventory, mail, auction and so on.. The point is not to worry about negative numbers in the future.

edit: (IMG:style_emoticons/default/ani_meow.gif) and thanks guys (IMG:style_emoticons/default/smile.gif)

This post has been edited by Koca: Dec 12 2008, 07:20 PM