summaryrefslogtreecommitdiff
path: root/world/map/npc
diff options
context:
space:
mode:
Diffstat (limited to 'world/map/npc')
-rw-r--r--world/map/npc/012-1/amrak.txt2
-rw-r--r--world/map/npc/012-1/injured-mouboo.txt2
-rw-r--r--world/map/npc/012-3/mana-seed.txt2
-rw-r--r--world/map/npc/013-1/sagatha.txt2
-rw-r--r--world/map/npc/014-1/wedding-officiator.txt2
-rw-r--r--world/map/npc/015-1/sword.txt2
-rw-r--r--world/map/npc/020-1/well.txt2
-rw-r--r--world/map/npc/021-1/north_shops.txt2
-rw-r--r--world/map/npc/021-2/bakery.txt2
-rw-r--r--world/map/npc/026-1/munro.txt3
-rw-r--r--world/map/npc/027-1/golbenez.txt16
-rw-r--r--world/map/npc/027-3/entrance.txt2
-rw-r--r--world/map/npc/042-2/sorfina.txt2
-rw-r--r--world/map/npc/042-2/tanisha.txt12
-rw-r--r--world/map/npc/functions/strangerquiz.txt2
-rw-r--r--world/map/npc/items/launcher_ammo.txt32
-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
-rw-r--r--world/map/npc/scripts.conf2
21 files changed, 119 insertions, 22 deletions
diff --git a/world/map/npc/012-1/amrak.txt b/world/map/npc/012-1/amrak.txt
index 74e6cd88..8997631f 100644
--- a/world/map/npc/012-1/amrak.txt
+++ b/world/map/npc/012-1/amrak.txt
@@ -8,4 +8,4 @@
mes "[Amrak]";
mes "\"Unfortunately, I've had trouble getting up there. The monsters in these caves scare me.\"";
close;
-} \ No newline at end of file
+}
diff --git a/world/map/npc/012-1/injured-mouboo.txt b/world/map/npc/012-1/injured-mouboo.txt
index 91042c13..5f629cbe 100644
--- a/world/map/npc/012-1/injured-mouboo.txt
+++ b/world/map/npc/012-1/injured-mouboo.txt
@@ -217,4 +217,4 @@ S_update_var:
(QUEST_MAGIC & ~(@Q_MASK)
| (@Q_wr_status << @Q_SHIFT));
return;
-} \ No newline at end of file
+}
diff --git a/world/map/npc/012-3/mana-seed.txt b/world/map/npc/012-3/mana-seed.txt
index 05e27697..b6c806d2 100644
--- a/world/map/npc/012-3/mana-seed.txt
+++ b/world/map/npc/012-3/mana-seed.txt
@@ -238,4 +238,4 @@ L_magic_destroy:
L_end:
close;
-} \ No newline at end of file
+}
diff --git a/world/map/npc/013-1/sagatha.txt b/world/map/npc/013-1/sagatha.txt
index a25db145..8f975af3 100644
--- a/world/map/npc/013-1/sagatha.txt
+++ b/world/map/npc/013-1/sagatha.txt
@@ -448,4 +448,4 @@ S_update_var:
(QUEST_MAGIC & ~(@Q_MASK)
| (@Q_status << @Q_SHIFT));
return;
-} \ No newline at end of file
+}
diff --git a/world/map/npc/014-1/wedding-officiator.txt b/world/map/npc/014-1/wedding-officiator.txt
index a576fae9..cb8249c0 100644
--- a/world/map/npc/014-1/wedding-officiator.txt
+++ b/world/map/npc/014-1/wedding-officiator.txt
@@ -245,4 +245,4 @@ L_No_Room_For_Rings:
mes "[Wedding Officiator]";
mes "\"You don't have room to carry the rings.\"";
close;
-} \ No newline at end of file
+}
diff --git a/world/map/npc/015-1/sword.txt b/world/map/npc/015-1/sword.txt
index e68d54ef..a20d9ef2 100644
--- a/world/map/npc/015-1/sword.txt
+++ b/world/map/npc/015-1/sword.txt
@@ -325,4 +325,4 @@ S_update_var:
(QUEST_MAGIC & ~(@Q_MASK)
| (@Q_status << @Q_SHIFT));
return;
-} \ No newline at end of file
+}
diff --git a/world/map/npc/020-1/well.txt b/world/map/npc/020-1/well.txt
index 17b63c5c..1bd1fafb 100644
--- a/world/map/npc/020-1/well.txt
+++ b/world/map/npc/020-1/well.txt
@@ -128,4 +128,4 @@ S_Update_Var:
(QUEST_Nivalis_state & ~(@Q_MASK)
| (@Q_status << @Q_SHIFT));
return;
-} \ No newline at end of file
+}
diff --git a/world/map/npc/021-1/north_shops.txt b/world/map/npc/021-1/north_shops.txt
index b4e03d28..b7c2b65a 100644
--- a/world/map/npc/021-1/north_shops.txt
+++ b/world/map/npc/021-1/north_shops.txt
@@ -3,7 +3,7 @@
// More high-end stuff to satisfy the richer people in Royal Tulimshar
// Some clothing
-021-1.gat,135,38,0|shop|Inar|108,CottonShirt :-1,CottonShorts :-1,CottonBoots :-1,DesertShirt :-1,SilkRobe :-5,DesertHat :-4
+021-1.gat,135,38,0|shop|Inar|108,SlingShot :-1,SlingBullet :-1,CottonShirt :-1,CottonShorts :-1,CottonBoots :-1,DesertShirt :-1,SilkRobe :-5,DesertHat :-4
021-1.gat,129,40,0|script|Well|400,
{
diff --git a/world/map/npc/021-2/bakery.txt b/world/map/npc/021-2/bakery.txt
index 5239c498..738c90c2 100644
--- a/world/map/npc/021-2/bakery.txt
+++ b/world/map/npc/021-2/bakery.txt
@@ -236,4 +236,4 @@ L_SeeBunny:
mes "";
mes "\"We come here every week. This place has some of the best bread I've ever eaten!\"";
close;
-} \ No newline at end of file
+}
diff --git a/world/map/npc/026-1/munro.txt b/world/map/npc/026-1/munro.txt
index 1151e3b8..ab304091 100644
--- a/world/map/npc/026-1/munro.txt
+++ b/world/map/npc/026-1/munro.txt
@@ -69,6 +69,7 @@ L_disablemunro:
disablenpc "Munro";
L_End:
+ setnpctimer 0;
end;
}
@@ -81,7 +82,7 @@ function|script|CheckMunro|,
if ((gettime(6) == 12 && gettime(5) >= 23) || (gettime(6) == 12 && gettime(5) <= 26))
goto L_Return;
- // unequipbyid @slotId;
+ callfunc "UnequipLater";
L_Return:
return;
diff --git a/world/map/npc/027-1/golbenez.txt b/world/map/npc/027-1/golbenez.txt
index d560f953..34885a34 100644
--- a/world/map/npc/027-1/golbenez.txt
+++ b/world/map/npc/027-1/golbenez.txt
@@ -34,4 +34,20 @@ L_Weak:
next;
mes "\"Come back when you're a bit more experienced.\"";
close;
+
+// Golbenez resets the graveyard monsters when no players are present
+// He's such an evil guy!
+OnInit:
+ initnpctimer;
+ end;
+
+OnTimer10000:
+ if (getareausers("027-1.gat", 21, 30, 112, 105) == 0)
+ killmonsterall "027-1.gat";
+
+ setnpctimer 0;
+ end;
}
+
+
+
diff --git a/world/map/npc/027-3/entrance.txt b/world/map/npc/027-3/entrance.txt
index 5449a12c..01ee28ce 100644
--- a/world/map/npc/027-3/entrance.txt
+++ b/world/map/npc/027-3/entrance.txt
@@ -42,4 +42,4 @@ OnTimer2000:
+ "The only way to get out is to defeat the reaper"
+ "or die...";
close;
-} \ No newline at end of file
+}
diff --git a/world/map/npc/042-2/sorfina.txt b/world/map/npc/042-2/sorfina.txt
index b01a83c7..20c04adf 100644
--- a/world/map/npc/042-2/sorfina.txt
+++ b/world/map/npc/042-2/sorfina.txt
@@ -231,6 +231,8 @@ L_SkipTut:
mes "\"Alright, if you say so. But take at least this.";
callfunc "TutorialCompleted";
getitem "Knife", 1;
+ getitem "SlingShot", 1;
+ getitem "SlingBullet", 100;
getitem "CottonShirt", 1;
getitem "RaggedShorts", 1;
set Zeny, Zeny + 50;
diff --git a/world/map/npc/042-2/tanisha.txt b/world/map/npc/042-2/tanisha.txt
index 437099dd..de93b8d5 100644
--- a/world/map/npc/042-2/tanisha.txt
+++ b/world/map/npc/042-2/tanisha.txt
@@ -50,7 +50,7 @@ L_Maggots:
L_Fight_Again:
mes "\"Ok, listen what to do.";
- mes "Equip the knife and kill the maggots.\"";
+ mes "Equip a weapon and kill the maggots.\"";
next;
mes "\"Press A to focus on a monster. With X you can focus and start attacking the same time.";
mes "But it also works to click on the monster with your mouse.\"";
@@ -64,7 +64,15 @@ L_Fight_Again:
// The getitem must be in the same place as set tanisha, 2;
// since it was moved to after L_Fight_Again, add it conditionally
if (tanisha == 1)
- getitem "Knife", 1;
+ goto L_GetFightItems;
+ goto L_ContinueFight;
+
+L_GetFightItems:
+ getitem "Knife", 1;
+ getitem "SlingShot", 1;
+ getitem "SlingBullet", 100;
+
+L_ContinueFight:
set tanisha, 2;
set @Maggot_Kills, 0;
set @time, 0;
diff --git a/world/map/npc/functions/strangerquiz.txt b/world/map/npc/functions/strangerquiz.txt
index 211e7e4b..b3488649 100644
--- a/world/map/npc/functions/strangerquiz.txt
+++ b/world/map/npc/functions/strangerquiz.txt
@@ -5,4 +5,4 @@ function|script|StrangerQuiz|,
// return in @quizanswer$
set @quizanswer$, getspellinvocation(@quizparam$);
return;
-} \ No newline at end of file
+}
diff --git a/world/map/npc/items/launcher_ammo.txt b/world/map/npc/items/launcher_ammo.txt
new file mode 100644
index 00000000..79cf057b
--- /dev/null
+++ b/world/map/npc/items/launcher_ammo.txt
@@ -0,0 +1,32 @@
+// ------------------------------------------------------------
+// Ammo Needs to know Launcher and vice versa.
+//
+// Behavior:
+// - If only one is equipped, do nothing
+// - If incompatible launcher and ammo are equipped, unequip the ammo
+//
+// Variables passed to these scripts:
+//
+// @LauncherType, @AmmoType
+//
+// ------------------------------------------------------------
+
+function|script|CheckLauncher|,
+{
+ if (getequipid(equip_arrow) == -1)
+ set @LauncherType, 0;
+ return;
+}
+
+function|script|CheckAmmo|,
+{
+ if ((@LauncherType == @AmmoType) || (!@LauncherType))
+ goto L_Return;
+
+ callfunc "UnequipLater";
+
+L_Return:
+ set @LauncherType, 0;
+ set @AmmoType, 0;
+ 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..62dc7715
--- /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 there are multiple items that want to be removed,
+ // only schedule one timer - scripts will be called again
+ if (@unequip_slot)
+ goto L_Return;
+
+ 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..2fff74b8 100644
--- a/world/map/npc/scripts.conf
+++ b/world/map/npc/scripts.conf
@@ -29,6 +29,8 @@ 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
+npc: npc/items/launcher_ammo.txt
import: npc/_import.txt