summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--world/map/db/item_db_weapon.txt4
-rw-r--r--world/map/npc/012-3/beheader.txt9
-rw-r--r--world/map/npc/commands/exp.txt8
-rw-r--r--world/map/npc/items/max_stat.txt23
-rw-r--r--world/map/npc/items/nobow_item.txt29
-rw-r--r--world/map/npc/scripts.conf2
6 files changed, 69 insertions, 6 deletions
diff --git a/world/map/db/item_db_weapon.txt b/world/map/db/item_db_weapon.txt
index a9a34584..f0f37604 100644
--- a/world/map/db/item_db_weapon.txt
+++ b/world/map/db/item_db_weapon.txt
@@ -14,10 +14,10 @@
570, BoneKnife, 4, 10000, 6000, 450, 115, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {}
571, Setzer, 4, 20000, 8000, 900, 110, 0, 1, 0, 0, 2, 2, 1, 1, 3, {}, {}
572, Scimitar, 4, 8000, 4000, 200, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
-573, Falchion, 4, 8000, 4000, 300, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
+573, Falchion, 4, 8000, 4000, 300, 270, 0, 1, 0, 0, 2, 2, 1, 1, 6, {}, {callfunc "UnreleasedItem"; bonus bDoubleAddRate, 40; bonus bHit, -25; bonus bCritical, -25;}
574, Scorpion, 4, 8000, 4000, 600, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem";}
575, DesertBow, 4, 8000, 4000, 1200, 100, 0, 1, 0, 0, 2, 34, 1, 1, 11, {}, {callfunc "UnreleasedItem";set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";}
-576, Beheader, 4, 8000, 4000, 2000, 140, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {bonus bCritical, 30;}
+576, Beheader, 4, 8000, 4000, 2000, 999, 0, 1, 0, 0, 2, 2, 1, 1, 4, {}, {callfunc "NoBowItem"; set @bStat, Int; set @maxbStatVal, 1; callfunc "RequireMaxStat"; bonus bDoubleAddRate, 50; bonus bSpeedAddRate, 10; bonus bHit, -20; bonus bCritical, -25;}
577, BoneDarts, 4, 8000, 4000, 300, 100, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {callfunc "UnreleasedItem"; }
578, SandCutter, 4, 30000, 15000, 1500, 140, 0, 1, 0, 0, 2, 2, 1, 80, 10, {}, {bonus bDoubleAddRate, 5;}
579, RockKnife, 4, 15000, 7500, 500, 110, 0, 1, 0, 0, 2, 2, 1, 1, 1, {}, {bonus bVit, 3;}
diff --git a/world/map/npc/012-3/beheader.txt b/world/map/npc/012-3/beheader.txt
index 25885edb..9f95f701 100644
--- a/world/map/npc/012-3/beheader.txt
+++ b/world/map/npc/012-3/beheader.txt
@@ -91,10 +91,17 @@ L_Later:
mes "";
mes "[The Beheader]";
mes "\"Some February, I don't know. If you want to help, go to Hurnscald square, look for the noisy person with an AFK Cap which is always sitting with their kitty, and tell them to start working. That might just do the trick.\"";
+ if (!(FLAGS & FLAG_GOT_BEHEADER_SWORD)) goto L_MaybeBeheader;
// NOTE: Room for future expansion if needed.
// The "noisy person w/ an AFK Cap and a kytty" is Jesusalva (script author)
close;
+L_MaybeBeheader:
+ next;
+ menu
+ "Okay, good bye.", L_Close,
+ "Can I behead Terranites on my own?", L_Beheader;
+
L_Beheader:
if (FLAGS & FLAG_GOT_BEHEADER_SWORD) goto L_Again;
if (TERRAC == 1501) goto L_Finish;
@@ -168,7 +175,7 @@ L_Finish:
goto L_Nope;
getitem "Beheader", 1;
- getexp 400000, 0;
+ getexp 750000, 0;
set FLAGS, FLAGS | FLAG_GOT_BEHEADER_SWORD;
set TERRAC, 0;
diff --git a/world/map/npc/commands/exp.txt b/world/map/npc/commands/exp.txt
index 64530976..069f98d1 100644
--- a/world/map/npc/commands/exp.txt
+++ b/world/map/npc/commands/exp.txt
@@ -4,6 +4,7 @@
set .@n$, if_then_else(@argv$[1] != "", "char", "") + "getexp";
if (GM < CMD_ZENY && GM < G_SYSOP) goto L_GM; // check if you can use it on self
set .@target_id, BL_ID;
+ set .@caster_id, BL_ID;
if (@argv$[1] != "") set .@target_id, getcharid(3, @argv$[1]);
if (@argv$[1] != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self
if (@argv$[1] != "" && GM < CMD_CHARZENY && GM < G_SYSOP) goto L_GM; // when target is not self, use charzeny permission
@@ -12,11 +13,12 @@
if (.@delta > .max_int) goto L_OutOfBounds;
if (!(attachrid(.@target_id))) goto L_Failed;
getexp .@delta, 0;
+ if (!(attachrid(.@caster_id))) goto L_Failed;
goto L_Success;
L_OutOfBounds:
- // XXX: maybe we could also take from other chars from the same accout?
- message strcharinfo(0), .@n$+" : Impossible to proceed! This would cause the player to have less than 0 zeny or more than " + .max_int + ".";
+ // XXX: can getexp even work with a negative number?
+ message strcharinfo(0), .@n$+" : Impossible to proceed! This would cause the player to have less than 0 xp or more than " + .max_int + ".";
end;
L_Failed:
@@ -24,7 +26,7 @@ L_Failed:
end;
L_Success:
- gmlog "@getexp " + @args$;
+ gmlog "@" + .@n$ + " " + @args$;
message strcharinfo(0), .@n$+" : The operation succeeded.";
end;
diff --git a/world/map/npc/items/max_stat.txt b/world/map/npc/items/max_stat.txt
new file mode 100644
index 00000000..a8c72190
--- /dev/null
+++ b/world/map/npc/items/max_stat.txt
@@ -0,0 +1,23 @@
+// ------------------------------------------------------------
+// Variables passed to this script:
+// @slotId The slot in which the item would have been equipped in.
+// This is passed automagically when called in an equip script.
+// @bStat The stat to check against.
+// Usually one of: bStr, bAgi, bVit, bInt, bDex, bLuk;
+// but can be anything that works with .
+// @maxbStatVal The minimum stat value to accept this item.
+// ------------------------------------------------------------
+
+function|script|RequireMaxStat
+{
+ set @bStatVal, @bStat;
+ // If the requirement isn't met, we set an unequip trigger.
+ // The item is now removed.
+ if (@bStat > @maxbStatVal)
+ goto L_Unequip;
+ return;
+
+L_Unequip:
+ callfunc "UnequipLater";
+ return;
+}
diff --git a/world/map/npc/items/nobow_item.txt b/world/map/npc/items/nobow_item.txt
new file mode 100644
index 00000000..a518fdf4
--- /dev/null
+++ b/world/map/npc/items/nobow_item.txt
@@ -0,0 +1,29 @@
+// Cannot have a (power) bow in inventory to equip
+// Variables passed to this script:
+// @slotId The slot in which the item would have been equipped in. This is passed automagically when called in an equip script.
+
+function|script|NoBowItem
+{
+ // Developers are always allowed to use this item
+ if (getgmlevel() >= G_DEV)
+ goto L_Return;
+
+ // Bows which are not allowed
+ if (countitem("BansheeBow") > 0)
+ goto L_Abort;
+ if (countitem("DesertBow") > 0)
+ goto L_Abort;
+ if (countitem("ForestBow") > 0)
+ goto L_Abort;
+ // Don't care with Bow/ShortBow/slings and darts
+
+ goto L_Return;
+
+L_Abort:
+ message strcharinfo(0), "This item is too cumbersome to use and could potentially break your valuable bow by accident. So you give up.";
+ callfunc "UnequipLater";
+ goto L_Return;
+
+L_Return:
+ return;
+}
diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf
index f17cc922..fd1311fb 100644
--- a/world/map/npc/scripts.conf
+++ b/world/map/npc/scripts.conf
@@ -51,6 +51,8 @@ npc: npc/items/scentedcandle.txt
npc: npc/items/tmwgift.txt
npc: npc/items/brawling_item.txt
npc: npc/items/drugs.txt
+npc: npc/items/max_stat.txt
+npc: npc/items/nobow_item.txt
import: npc/_import.txt
// magic