From 8643992d0b7fd0bc45654573fd864a7bf6701ab8 Mon Sep 17 00:00:00 2001 From: ai4rei Date: Sun, 19 Dec 2010 18:04:18 +0000 Subject: [PATCH] * Fixes to the dynamic shop sample script (first part of dynamic shop fixes). - Fixed wrong check in ::OnSellItem, causing not-enough-items condition not getting detected (since r11829). - Fixed an exploit in ::OnSellItem, causing Zeny to be given to the player, even if the items fail to delete (since r5842). - Fixed missing 'close' in ::OnSellItem (since r5842). - Replaced 'end' with 'close' in ::OnBuyItem (since r5842, followup to r11829). git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14609 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 5 +++++ doc/sample/npc_dynamic_shop.txt | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 3a5ca57675..3659b879f4 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -1,6 +1,11 @@ Date Added 2010/12/19 + * Fixes to the dynamic shop sample script. [Ai4rei] + - Fixed wrong check in ::OnSellItem, causing not-enough-items condition not getting detected (since r11829). + - Fixed an exploit in ::OnSellItem, causing Zeny to be given to the player, even if the items fail to delete (since r5842). + - Fixed missing 'close' in ::OnSellItem (since r5842). + - Replaced 'end' with 'close' in ::OnBuyItem (since r5842, followup to r11829). * Replaced maximum script array size literals with a define (constant). [Ai4rei] - Fixed an off-by-one mistake in copyarray, allowing to copy 1 element more into the target array, than allowed (since r10813). 2010/12/18 diff --git a/doc/sample/npc_dynamic_shop.txt b/doc/sample/npc_dynamic_shop.txt index 1a1f174c9a..79d0c4fdbe 100644 --- a/doc/sample/npc_dynamic_shop.txt +++ b/doc/sample/npc_dynamic_shop.txt @@ -7,21 +7,22 @@ end; OnSellItem: for(set @i, 0; @i < getarraysize(@sold_nameid); set @i, @i + 1){ - if(countitem(@sold_nameid[@i]) < @sold_quantity[@i] && @sold_quantity[@i] <= 0){ + if(countitem(@sold_nameid[@i]) < @sold_quantity[@i] || @sold_quantity[@i] <= 0){ mes "omgh4x!"; close; } if(@sold_nameid[@i] == 501){ + delitem 501, @sold_quantity[@i]; set $@rpotsleft, $@rpotsleft + @sold_quantity[@i]; set Zeny, Zeny + @sold_quantity[@i]*20; - delitem 501, @sold_quantity[@i]; } else { if(@sold_nameid[@i] == 502){ + delitem 502, @sold_quantity[@i]; set $@opotsleft, $@opotsleft + @sold_quantity[@i]; set Zeny, Zeny + @sold_quantity[@i]*100; - delitem 502, @sold_quantity[@i]; } else { mes "Sorry, I don't need your items."; + close; } } } @@ -34,7 +35,7 @@ OnBuyItem: for(set @i, 0; @i < getarraysize(@bought_nameid); set @i, @i + 1){ if(@bought_quantity[@i] <= 0){ mes "omgh4x!"; - end; + close; } if(@bought_nameid[@i] == 501){ if(@bought_quantity[@i] > $@rpotsleft){