[Solved] Can't increase max. item_db

leertaste

New member
Messages
25
Points
0
Hey guys, I've read any topic about this out there, but I am still not able to make it work.

This is what I've done:

/src/map/itemdb.h:

-#define MAX_ITEMDB 0x8000 // 32k array entries in array (the rest goes to the db)
+#define MAX_ITEMDB 0x10000 // 64k array entries in array (the rest goes to the db)


/src/common/mmo.h:

- short nameid;
+ unsigned short nameid;


/sql-files/main.sql:

card0~ card3 from smallint to mediumint


(at multiple places)

BUT still: when i logout with an itemID over 32k, it gets deleted with following error:

Code:
[SQL]: DB error - data of field 'nameid' was truncated
[Debug]: column - 1
[Debug]: data   - type=UNSIGNED MYSQL_TYPE_LONG, le
[Debug]: buffer - type=MYSQL_TYPE_SHORT, length=2
 
Last edited by a moderator:
did you change the sql database entry to support the new datatype?

edit: nevermind you havent:

your data is of type

UNSIGNED MYSQL_TYPE_LONG


yet your db is configured to store

Code:
MYSQL_TYPE_SHORT
 
Last edited by a moderator:
and how/where i need to change this?
 

edit: what I've found so far is "src/char/char.c"
u meant that?

 
Last edited by a moderator:
nein - bei deinem Nam egeh ich mal davon aus, dass du deutsch bist.
ich glaube im code hast du soweit alles richtig gemacht.

das Problem kommt beim Abspeichern der der Daten in der Datenbank auf.

Du kennst dich wohl nicht sehr gut mit sql aus.

In sql werden datensätze in SPalten abgespeichert, wobei jede Spalte insbesondere nicht nur einen Namen trägt um die dort gespeicherten daten wieder zu finden sondern auch einen datentyp.

Sprich wenn du eine Tabelle anlegts und dort eine Spalte mit "name" anlegst dann wirst du dieser Spalte vorzugsweise auch den datentyp CHAR(character) oder sogar STRING geben wollen. eine SPalte mit ID wird in der regel mit einem INT belegt. das Bedeutet jedoch, das die ID natürlich nurnoch aus ziffern bestehen kann.

was dir also passiert: die Tabelle sieht für die itemid nur SHORT vor du willst dort nun aber einen LONG abspeichern. Der passt da natürlich nicht rein :P

was du  nun machen kannst ist die Tabelle editieren und die Spalte für die Itemid raussuchen dort wirst du das SHORT Tag sicherlich irgendwo finden (genau kann ich dir das nicht sagen, denn jede sql software sieht natürlich anders aus) und änderst es in deinen UNSIGNED_LONG um.

 
Erstmal danke, dass du dir Zeit genommen hast so ausführlich zu antworten.
Mit SQL kenne ich mich tatsächlich noch so gut wie gar nicht aus.

was du  nun machen kannst ist die Tabelle editieren und die Spalte für die Itemid raussuchen dort wirst du das SHORT Tag sicherlich irgendwo finden (genau kann ich dir das nicht sagen, denn jede sql software sieht natürlich anders aus) und änderst es in deinen UNSIGNED_LONG um.
ich kann nirgends den SHORT Tag finden..

EDIT:
hab das Problem gelöst. In '/src/char/char.c' folgende Zeile:
i fixed it changing this at '/src/char/char.c':

Code:
-		|| SQL_ERROR == SQL->StmtBindColumn(stmt, 1, SQLDT_SHORT,     &item.nameid,      0, NULL, NULL)
+		|| SQL_ERROR == SQL->StmtBindColumn(stmt, 1, SQLDT_USHORT,     &item.nameid,      0, NULL, NULL)
 
Last edited by a moderator:
Back
Top