summaryrefslogtreecommitdiff
path: root/world/map/npc/items
diff options
context:
space:
mode:
Diffstat (limited to 'world/map/npc/items')
-rw-r--r--world/map/npc/items/launcher_ammo.txt36
-rw-r--r--world/map/npc/items/require_stat.txt12
-rw-r--r--world/map/npc/items/restricted_item.txt3
-rw-r--r--world/map/npc/items/unequipcb.txt27
-rw-r--r--world/map/npc/items/unreleased_item.txt10
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;
}