diff options
Diffstat (limited to 'world/map/npc/items')
-rw-r--r-- | world/map/npc/items/launcher_ammo.txt | 36 | ||||
-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 |
5 files changed, 80 insertions, 8 deletions
diff --git a/world/map/npc/items/launcher_ammo.txt b/world/map/npc/items/launcher_ammo.txt new file mode 100644 index 00000000..3b0b21f8 --- /dev/null +++ b/world/map/npc/items/launcher_ammo.txt @@ -0,0 +1,36 @@ +// ------------------------------------------------------------ +// Ammo Needs to know Launcher and vice versa. +// +// Behavior: +// Ammo is always unequipped +// +// Variables passed to this script: +// +// @LauncherType, @AmmoType +// +// ------------------------------------------------------------ + +function|script|CheckLauncher|, +{ + set @AmmoEquip, (getequipid(equip_arrow) + 1); + if (@AmmoEquip) + goto L_Return; + +L_NoAmmoEquip: + set @LauncherType, 0; + +L_Return: + return; +} + +function|script|CheckAmmo|, +{ + if ((@LauncherType == @AmmoType) || (!@LauncherType)) + goto L_Return; + +L_Unequip: + callfunc "UnequipLater"; + +L_Return: + return; +} 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; } |