summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
authorai4rei <ai4rei@54d463be-8e91-2dee-dedb-b68131a5f0ec>2010-12-22 23:05:50 +0000
committerai4rei <ai4rei@54d463be-8e91-2dee-dedb-b68131a5f0ec>2010-12-22 23:05:50 +0000
commit4b60855ad391b0b827d76773dcacb69f8baa8729 (patch)
tree94b6241e7608abfa0751f0a430ee4081fd5f4a1a /src/map
parent7e475e75934820e41b9cdff14d69ef75ad446da5 (diff)
downloadhercules-4b60855ad391b0b827d76773dcacb69f8baa8729.tar.gz
hercules-4b60855ad391b0b827d76773dcacb69f8baa8729.tar.bz2
hercules-4b60855ad391b0b827d76773dcacb69f8baa8729.tar.xz
hercules-4b60855ad391b0b827d76773dcacb69f8baa8729.zip
* NPC shop buy list received from the client is now validated for scripted shops (OnBuyItem), before the control is transfered to the script, as well (bugreport:3680, since r5841, related r8525).
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@14616 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map')
-rw-r--r--src/map/npc.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/map/npc.c b/src/map/npc.c
index 545ec9add..ca49c084f 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -1261,8 +1261,6 @@ int npc_buylist(struct map_session_data* sd, int n, unsigned short* item_list)
nd = npc_checknear(sd,map_id2bl(sd->npc_shopid));
if( nd == NULL )
return 3;
- if( nd->master_nd != NULL ) //Script-based shops.
- return npc_buylist_sub(sd,n,item_list,nd->master_nd);
if( nd->subtype != SHOP )
return 3;
@@ -1297,6 +1295,11 @@ int npc_buylist(struct map_session_data* sd, int n, unsigned short* item_list)
amount = item_list[i*2+0] = 1;
}
+ if( nd->master_nd )
+ {// Script-controlled shops decide by themselves, what can be bought and for what price.
+ continue;
+ }
+
switch( pc_checkadditem(sd,nameid,amount) )
{
case ADDITEM_EXIST:
@@ -1316,6 +1319,9 @@ int npc_buylist(struct map_session_data* sd, int n, unsigned short* item_list)
w += itemdb_weight(nameid) * amount;
}
+ if( nd->master_nd != NULL ) //Script-based shops.
+ return npc_buylist_sub(sd,n,item_list,nd->master_nd);
+
if( z > (double)sd->status.zeny )
return 1; // Not enough Zeny
if( w + sd->weight > sd->max_weight )