diff options
Diffstat (limited to 'world/map/npc')
-rw-r--r-- | world/map/npc/items/require_stat.txt | 12 | ||||
-rw-r--r-- | world/map/npc/items/restricted_item.txt | 3 | ||||
-rw-r--r-- | world/map/npc/items/unequipcb.txt | 27 | ||||
-rw-r--r-- | world/map/npc/items/unreleased_item.txt | 10 | ||||
-rw-r--r-- | world/map/npc/scripts.conf | 1 |
5 files changed, 45 insertions, 8 deletions
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; } diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf index 26a0b0b4..70f06098 100644 --- a/world/map/npc/scripts.conf +++ b/world/map/npc/scripts.conf @@ -29,6 +29,7 @@ npc: npc/items/unreleased_item.txt npc: npc/items/require_stat.txt npc: npc/items/restricted_item.txt npc: npc/items/warpTowels.txt +npc: npc/items/unequipcb.txt import: npc/_import.txt |