• 0
Sign in to follow this  
Followers 0
leertaste

[Solved] Can't increase max. item_db

Question

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:

[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
Edited by leertaste

Share this post


Link to post
Share on other sites

4 answers to this question

  • 0

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

MYSQL_TYPE_SHORT

 

Edited by andybe

Share this post


Link to post
Share on other sites
  • 0

and how/where i need to change this?
 

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

Edited by leertaste

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

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.

19 hours ago, andybe said:

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':

-		|| 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)

 

Edited by leertaste
could fix it at /src/char/char.c

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0