www.pudn.com > ro4fserver.rar > itemdb.c
#include#include #include #include "mmo.h" #include "grfio.h" #include "itemdb.h" #define ITEMDB_HASH_SIZE 64 static int itemdb_hash[ITEMDB_HASH_SIZE]; static int itemdb_size,itemdb_num; static struct { // for hash int nameid; int next; // data int value; int type; int class; int equip; int weight; int atk; int def; int slot; int look; } *itemdb; static int search_itemdb_index(int nameid) { int i; for(i=itemdb_hash[nameid%ITEMDB_HASH_SIZE];i>=0;i=itemdb[i].next) if(itemdb[i].nameid==nameid) return i; if(itemdb_size<=itemdb_num){ itemdb_size+=ITEMDB_HASH_SIZE; itemdb=realloc(itemdb,sizeof(itemdb[0])*itemdb_size); } i=itemdb_num; itemdb_num++; itemdb[i].nameid=nameid; itemdb[i].next=itemdb_hash[nameid%ITEMDB_HASH_SIZE]; itemdb_hash[nameid%ITEMDB_HASH_SIZE]=i; itemdb[i].value=10; itemdb[i].type=0; itemdb[i].class=0; itemdb[i].equip=0; itemdb[i].weight=10; itemdb[i].atk=0; itemdb[i].def=0; itemdb[i].slot=0; itemdb[i].look=0; return i; } int itemdb_type(int nameid) { if(nameid>500 && nameid<600) return 0; //heal item if(nameid>600 && nameid<700) return 2; //use item if((nameid>700 && nameid<1100) || (nameid>7000 && nameid<8000)) return 3; //correction if(nameid>=1750 && nameid<1760) return 10; //arrow if(nameid>1100 && nameid<2000) return 4; //weapon if((nameid>2100 && nameid<3000) || (nameid>5000 && nameid<6000)) return 5; //armor if(nameid>4000 && nameid<5000) return 6; //card return 0; } int itemdb_sellvalue(int nameid) { return itemdb[search_itemdb_index(nameid)].value; } int itemdb_weight(int nameid) { return itemdb[search_itemdb_index(nameid)].weight; } int itemdb_isequip(int nameid) { return itemdb[search_itemdb_index(nameid)].equip!=0; } int itemdb_equip_point(int nameid,struct map_session_data *sd) { return itemdb[search_itemdb_index(nameid)].equip; } static int itemdb_read_itemslottable(void) { char *buf,*p; int s; buf=grfio_read("data\\itemslottable.txt"); if(buf==NULL) return -1; s=grfio_size("data\\itemslottable.txt"); buf[s]=0; for(p=buf;p-buf =0;j=itemdb[j].next,c++); printf("%4d",c); if(i%16==15) printf("\n"); } exit(1); #endif return 0; }