From c3912f6f0ebdc0de532d0a5190d4c652993e054b Mon Sep 17 00:00:00 2001 From: wushin Date: Fri, 25 Oct 2013 12:20:26 -0500 Subject: Required Stats, Restricted Items, and Unreleased Items properly Unequip on condition failure Bonuses or Bonus Bugs do not appear Item stays unequipped Added unequipcb script Added Timer to RequireStat, RestrictedItem and UnreleasedItem --- world/map/npc/items/require_stat.txt | 12 +++++++++--- world/map/npc/items/restricted_item.txt | 3 +-- world/map/npc/items/unequipcb.txt | 27 +++++++++++++++++++++++++++ world/map/npc/items/unreleased_item.txt | 10 +++++++--- 4 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 world/map/npc/items/unequipcb.txt (limited to 'world/map/npc/items') diff --git a/world/map/npc/items/require_stat.txt b/world/map/npc/items/require_stat.txt index 77a518b1..8629b686 100644 --- a/world/map/npc/items/require_stat.txt +++ b/world/map/npc/items/require_stat.txt @@ -11,9 +11,15 @@ function|script|RequireStat|, { set @bStatVal, readparam(@bStat); - // If the requirement isn't met, then we end the script. - // Hence, subsequent item modifiers won't be applied. + // If the requirement isn't met, we set an unequip trigger. + // The item is now removed. if (@bStatVal < @minbStatVal) - end; + goto L_Unequip; + goto L_Return; + +L_Unequip: + callfunc "UnequipLater"; + +L_Return: return; } diff --git a/world/map/npc/items/restricted_item.txt b/world/map/npc/items/restricted_item.txt index 2aa69c7e..7e3213c0 100644 --- a/world/map/npc/items/restricted_item.txt +++ b/world/map/npc/items/restricted_item.txt @@ -11,11 +11,10 @@ function|script|RestrictedItem|, if (!@minLvl) set @minLvl, 60; if (debug || getgmlevel() >= @minLvl) goto L_Return; // If the active character is staff, do nothing. message strcharinfo(0), "This item repells you with extreme force. It does not seem to be meant for you."; - unequipbyid @slotId; + callfunc "UnequipLater"; if (getgmlevel()) goto L_Return; gmcommand "@wgm Restricted item '" + @itemId + "' used by character '" + strcharinfo(0) + "'."; gmcommand "@l Restricted item '" + @itemId + "' used by character '" + strcharinfo(0) + "'."; - end; L_Return: return; diff --git a/world/map/npc/items/unequipcb.txt b/world/map/npc/items/unequipcb.txt new file mode 100644 index 00000000..ec185f02 --- /dev/null +++ b/world/map/npc/items/unequipcb.txt @@ -0,0 +1,27 @@ +// For now this has to use a real map name, but the effect happens +// on any map because of the -1s at the end. +// Note: the client (I think) has a display bug if this is called +// during the intial connection's equip hook +botcheck.gat,0,0,0|script|UnequipCB|-1,-1,-1 +{ + +OnUnequip: + unequipbyid (@unequip_slot -1); + set @unequip_slot, 0; + end; +} + +// Paired with unequipcb +function|script|UnequipLater|, +{ + if(@unequip_slot) + goto L_Return; + goto L_ReturnTimer; + +L_ReturnTimer: + set @unequip_slot, (@slotId + 1); + addtimer 0, "UnequipCB::OnUnequip"; + +L_Return: + return; +} diff --git a/world/map/npc/items/unreleased_item.txt b/world/map/npc/items/unreleased_item.txt index 708cc1e0..457c2bcb 100644 --- a/world/map/npc/items/unreleased_item.txt +++ b/world/map/npc/items/unreleased_item.txt @@ -5,8 +5,12 @@ function|script|UnreleasedItem|, { - if (debug || getgmlevel()) end; // If the server allows equipping unreleased items or if the active character is staff, do nothing. + // If the server allows equipping unreleased items or if the active character is staff, do nothing. + if (debug || getgmlevel()) + goto L_Return; message strcharinfo(0), "You have difficulties equipping this item, as if it is not yet fully in this world."; - unequipbyid @slotId; - end; + callfunc "UnequipLater"; + +L_Return: + return; } -- cgit v1.2.3-60-g2f50