summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
authorLance <Lance@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-04-01 09:37:50 +0000
committerLance <Lance@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-04-01 09:37:50 +0000
commit74a30ea8d414cec9fba211298c72b2a686b0582a (patch)
treec8c111060aad9e80949fd07d77104c1c6747a299 /src/map
parenta41884fbb032359e4f0bfcdaee50acb749ed8862 (diff)
downloadhercules-74a30ea8d414cec9fba211298c72b2a686b0582a.tar.gz
hercules-74a30ea8d414cec9fba211298c72b2a686b0582a.tar.bz2
hercules-74a30ea8d414cec9fba211298c72b2a686b0582a.tar.xz
hercules-74a30ea8d414cec9fba211298c72b2a686b0582a.zip
Fixed the dynamic shop system memory allocation and id_db problem. Added sample script.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@5842 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map')
-rw-r--r--src/map/clif.c9
-rw-r--r--src/map/npc.c4
-rw-r--r--src/map/script.c4
3 files changed, 9 insertions, 8 deletions
diff --git a/src/map/clif.c b/src/map/clif.c
index 9ce77129d..1f51506b1 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -8974,7 +8974,6 @@ void clif_parse_NpcBuyListSend(int fd,struct map_session_data *sd)
n = (RFIFOW(fd,2)-4) /4;
item_list = (unsigned short*)RFIFOP(fd,4);
-
if (sd->trade_partner || !sd->npc_shopid){
fail = 1;
}else{
@@ -8983,8 +8982,8 @@ void clif_parse_NpcBuyListSend(int fd,struct map_session_data *sd)
for(i=0;i<n;i++){
setd_sub(sd, "@bought_nameid", i, (void *)item_list[i*2+1]);
setd_sub(sd, "@bought_quantity", i, (void *)item_list[i*2]);
- npc_event(sd, npc_ev, 0);
}
+ npc_event(sd, npc_ev, 0);
fail = 0;
}else{
fail = npc_buylist(sd,n,item_list);
@@ -9019,10 +9018,10 @@ void clif_parse_NpcSellListSend(int fd,struct map_session_data *sd)
if((nd = ((struct npc_data *)map_id2bl(sd->npc_shopid))->master_nd)){
sprintf(npc_ev, "%s::OnSellItem", nd->exname);
for(i=0;i<n;i++){
- setd_sub(sd, "@sold_nameid", i, (void *)item_list[i*2+1]);
- setd_sub(sd, "@sold_quantity", i, (void *)item_list[i*2]);
- npc_event(sd, npc_ev, 0);
+ setd_sub(sd, "@sold_nameid", i, (void *)sd->status.inventory[item_list[i*2]-2].nameid);
+ setd_sub(sd, "@sold_quantity", i, (void *)item_list[i*2+1]);
}
+ npc_event(sd, npc_ev, 0);
fail = 0;
}else{
fail = npc_selllist(sd,n,item_list);
diff --git a/src/map/npc.c b/src/map/npc.c
index d1a35ff61..eaed2bdee 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -2766,14 +2766,14 @@ int do_init_npc(void)
return 0;
}
// [Lance]
- int npc_changename(const char *name, const char *newname, short look){
+int npc_changename(const char *name, const char *newname, short look){
struct npc_data *nd= (struct npc_data *) strdb_remove(npcname_db,(unsigned char*)name);
if (nd==NULL)
return 0;
npc_enable(name,0);
strcpy(nd->name,newname);
nd->class_ = look;
- strdb_put(npcname_db,nd->name,nd);
npc_enable(newname,1);
return 0;
}
+
diff --git a/src/map/script.c b/src/map/script.c
index fdae52784..204922fa5 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -9871,7 +9871,9 @@ int buildin_npcshopitem(struct script_state *st)
}
nd = (struct npc_data *)aRealloc(nd,sizeof(struct npc_data) +
- sizeof(nd->u.shop_item[0]) * n);
+ sizeof(nd->u.shop_item[0]) * (n+1));
+
+ map_addiddb(&nd->bl);
nd->master_nd = ((struct npc_data *)map_id2bl(st->oid));
} else {