summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2019-08-29 00:25:49 -0300
committerJesusaves <cpntb1@ymail.com>2019-08-29 00:25:49 -0300
commit8dc80ccdb7b0916aab47f8d24306c6c865ad4dfc (patch)
treeec33ef42c2a3125a3e875864b43ad1a7c65bef51
parent8071ddde86666c1495c5119b3927f5718b690f60 (diff)
parentd6358d0d127ffac94f243d29eccc6793567e9c60 (diff)
downloadserverdata-8dc80ccdb7b0916aab47f8d24306c6c865ad4dfc.tar.gz
serverdata-8dc80ccdb7b0916aab47f8d24306c6c865ad4dfc.tar.bz2
serverdata-8dc80ccdb7b0916aab47f8d24306c6c865ad4dfc.tar.xz
serverdata-8dc80ccdb7b0916aab47f8d24306c6c865ad4dfc.zip
Merge branch 'master' into testserver
Conflicts solved with -X theirs
-rw-r--r--.tools/applicator.py20
-rw-r--r--.tools/beta.patch253
-rw-r--r--.tools/reapply.patch331
-rwxr-xr-x.tools/scripts/init.sh6
-rw-r--r--conf/map/battle/homunc.conf3
-rw-r--r--conf/map/battle/player.conf2
-rw-r--r--conf/map/battle/skill.conf2
-rw-r--r--conf/map/maps.conf2
-rw-r--r--db/craft_db.conf34
-rw-r--r--db/map_index.txt100
-rw-r--r--db/quest_db.conf4
-rw-r--r--db/re/item_db.conf263
-rw-r--r--db/re/mob_db.conf83
-rw-r--r--db/re/skill_db.conf2
-rw-r--r--db/re/skill_tree.conf2
-rw-r--r--maps/re/018-6-0.mcachebin0 -> 249 bytes
-rw-r--r--maps/re/018-6-1.mcachebin0 -> 1075 bytes
-rw-r--r--npc/002-3/nard.txt4
-rw-r--r--npc/003-0-1/professor.txt3
-rw-r--r--npc/003-1-1/_import.txt1
-rw-r--r--npc/003-1-1/downpath.txt30
-rw-r--r--npc/003-2/lua.txt16
-rw-r--r--npc/003-3/malindou.txt45
-rw-r--r--npc/003-8/intensebeard.txt2
-rw-r--r--npc/004-1/_import.txt1
-rw-r--r--npc/004-1/sign.txt19
-rw-r--r--npc/012-1/mahad.txt1
-rw-r--r--npc/012-1/shoppakep.txt7
-rw-r--r--npc/012-2/melina.txt5
-rw-r--r--npc/012-3/alan.txt7
-rw-r--r--npc/012-5/nicholas.txt5
-rw-r--r--npc/014-5-1/sagratha.txt8
-rw-r--r--npc/014-5/sagratha.txt16
-rw-r--r--npc/015-2/ben.txt20
-rw-r--r--npc/015-8-1/campaign.txt12
-rw-r--r--npc/017-1/stranger.txt2
-rw-r--r--npc/017-1/townhall.txt60
-rw-r--r--npc/017-10/_import.txt2
-rw-r--r--npc/017-10/_warps.txt2
-rw-r--r--npc/017-10/dispatcher.txt36
-rw-r--r--npc/017-4/refine.txt40
-rw-r--r--npc/017-6/azwell.txt42
-rw-r--r--npc/018-2-2/main.txt452
-rw-r--r--npc/018-6-0/_import.txt2
-rw-r--r--npc/018-6-1/_import.txt4
-rw-r--r--npc/018-6-1/_mobs.txt16
-rw-r--r--npc/018-6-1/_warps.txt3
-rw-r--r--npc/019-1/well.txt1
-rw-r--r--npc/020-3/mede.txt5
-rw-r--r--npc/020-5/bracco.txt18
-rw-r--r--npc/_import.txt2
-rw-r--r--npc/commands/debug.txt1
-rw-r--r--npc/commands/grantpower.txt4
-rw-r--r--npc/craft/recipes.txt8
-rw-r--r--npc/craft/smith.txt9
-rw-r--r--npc/functions/array.txt22
-rw-r--r--npc/functions/clientversion.txt7
-rw-r--r--npc/functions/lockpicks.txt8
-rw-r--r--npc/functions/main.txt7
-rw-r--r--npc/functions/politics.txt143
-rw-r--r--npc/functions/refine.txt22
-rw-r--r--npc/functions/resetstatus.txt46
-rw-r--r--npc/functions/siege.txt8
-rw-r--r--npc/functions/soul_menhir.txt1
-rw-r--r--npc/functions/util.txt19
-rw-r--r--npc/items/lofteleporter.txt12
-rw-r--r--npc/magic/cuteheart.txt4
-rw-r--r--npc/magic/dragokin.txt4
-rw-r--r--npc/magic/fairykingdom.txt4
-rw-r--r--npc/magic/frozenheart.txt4
-rw-r--r--npc/magic/halhiss.txt4
-rw-r--r--npc/magic/kalboo.txt4
-rw-r--r--npc/magic/kalmurk.txt4
-rw-r--r--npc/magic/kalspike.txt4
-rw-r--r--npc/magic/kalwulf.txt4
-rw-r--r--npc/magic/limerizer.txt4
-rw-r--r--npc/magic/plantkingdom.txt4
-rw-r--r--npc/magic/stoneheart.txt4
-rw-r--r--npc/magic/transmigration.txt2
-rw-r--r--npc/magic/zarkor.txt6
-rw-r--r--npc/scripts.conf1
81 files changed, 1474 insertions, 396 deletions
diff --git a/.tools/applicator.py b/.tools/applicator.py
new file mode 100644
index 000000000..e3c795aea
--- /dev/null
+++ b/.tools/applicator.py
@@ -0,0 +1,20 @@
+import subprocess
+
+# Open reapply.patch3
+f=open("./reapply.patch3", "r")
+subprocess.call("cd ../../server-code", shell=True)
+
+for line in f:
+ if line[0] == "#" or line[0] == "\r" or line[0] == "\n":
+ continue
+ print "Downloading patch "+line.replace("\n", "")
+ subprocess.call("cd ../../server-code ; wget https://gitlab.com/evol/hercules/commit/"+line.replace("\n", "")+".diff", shell=True)
+ print "Applying patch..."
+ #subprocess.call("cd ../../server-code ; ls", shell=True)
+ subprocess.call("cd ../../server-code ; git apply --ignore-whitespace --reject "+line.replace("\n", "")+".diff", shell=True)
+ print "Patch applied"
+ subprocess.call("cd ../../server-code ; rm "+line.replace("\n", "")+".diff", shell=True)
+ print "Patch deleted (success)"
+
+
+f.close()
diff --git a/.tools/beta.patch2 b/.tools/beta.patch2
index 67c10bb32..41a6417fb 100644
--- a/.tools/beta.patch2
+++ b/.tools/beta.patch2
@@ -1,3 +1,15 @@
+diff --git a/src/map/battle.c b/src/map/battle.c
+index fe7a64b51..8698cef67 100644
+--- a/src/map/battle.c
++++ b/src/map/battle.c
+@@ -7417,6 +7417,7 @@ static const struct battle_data {
+ { "features/enable_achievement_system", &battle_config.feature_enable_achievement, 1, 0, 1, },
+ { "ping_timer_inverval", &battle_config.ping_timer_interval, 30, 0, 99999999, },
+ { "ping_time", &battle_config.ping_time, 20, 0, 99999999, },
++ { "hom_bonus_exp_from_master", &battle_config.hom_bonus_exp_from_master, 10, 0, 100, },
+ };
+
+ static bool battle_set_value_sub(int index, int value)
diff --git a/src/map/rodex.c b/src/map/rodex.c
index 766fdc5ea..996576fd3 100644
--- a/src/map/rodex.c
@@ -17,8 +29,21 @@ index 766fdc5ea..996576fd3 100644
static struct rodex_interface rodex_s;
struct rodex_interface *rodex;
+diff --git a/src/map/script.c b/src/map/script.c
+index fe8638ac3..de8122ea3 100644
+--- a/src/map/script.c
++++ b/src/map/script.c
+@@ -16394,6 +16394,8 @@ static BUILDIN(summon)
+ clif->specialeffect(&md->bl,344,AREA);
+ sc_start4(NULL, &md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
+ }
++ //mob_id = mob->once_spawn(sd, m, x, y, str, class_, amount, event, size, ai);
++ script_pushint(st, (md) ? md->bl.id : 0);
+ return true;
+ }
+
diff --git a/src/map/status.c b/src/map/status.c
-index f06bb0330..2fd295dc0 100644
+index f06bb0330..1cd69ff18 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -3552,7 +3552,7 @@ static void status_calc_regen(struct block_list *bl, struct status_data *st, str
@@ -30,3 +55,29 @@ index f06bb0330..2fd295dc0 100644
if( st->int_ >= 120 )
val += ((st->int_-120)>>1) + 4;
+@@ -4468,17 +4468,23 @@ static unsigned short status_base_atk(const struct block_list *bl, const struct
+ case W_SHOTGUN:
+ case W_GRENADE:
+ flag = 1;
++ break;
++ case W_STAFF:
++ flag = 2;
+ }
+ }
+- if ( flag ) {
++ if ( flag == 1 ) {
+ str = st->dex;
+ dex = st->str;
++ } else if ( flag == 2 ) {
++ str = st->int_;
++ dex = st->dex;
+ } else {
+ str = st->str;
+ dex = st->dex;
+ }
+ #ifdef RENEWAL
+- dstr = str;
++ dstr = str*15/10;
+ #endif
+ //Normally only players have base-atk, but homunc have a different batk
+ // equation, hinting that perhaps non-players should use this for batk.
diff --git a/.tools/reapply.patch3 b/.tools/reapply.patch3
new file mode 100644
index 000000000..05bc2a1fa
--- /dev/null
+++ b/.tools/reapply.patch3
@@ -0,0 +1,31 @@
+############
+## First postponed update
+# Added support for mobs to drop items with Random Options
+#d34df93e14582b1c2ad43763666d674b7e8440ca
+# Fix inter-server deleting zeny from rodex mails when a player requests to take item
+9a651bc6c9a65c69f6afe858ec12c7aa42751340
+# Truncate too big time in guild member login time field (Millenium Bug)
+a4e2fb4431dfb4c914d0e315d1e43fb05ae489ec
+# Before correct client disconnect send disconnect packet and flush socket
+1a58bb1f11156baff437b3029feafa0d793ed803
+# Add into unit_data groupId and title. (Unsupported by clif)
+cf28f0002c46e9c23e752b7e4b351de1e947f830
+# Add commands getunittitle(GID) and setunittitle(GID, TitleID)
+8d732e3127434e576fe4a1203e609a8c6cc19cee
+
+############
+## Second postponed update
+# Adds Option DB and Option Drop Groups DB to be loaded on minimal mode
+#2b8463b7d2b64ab122e86b2f9e44cba0b680caf
+# Adds delitemidx(index, {amount, accid}), which deletes an item at the given index.
+858e732e15c495f3073c8037b9612c6c20390f76
+# getguildonline(gid)
+#d9b7fa499ab5ecae677e53d43057671e43b32248
+
+############
+## Third postponed update
+# If error happend in pc_statusup then send back to client increase value
+cdd5789d8fff14572df1e6d801ba9e2afa7b505e
+# Homunculus Exp sharing (They get a % from master as bonus - master XP unaffected)
+5ac507e88e116e6a11185beace600bde8896c534
+
diff --git a/.tools/scripts/init.sh b/.tools/scripts/init.sh
index 8fb823781..7abf5701b 100755
--- a/.tools/scripts/init.sh
+++ b/.tools/scripts/init.sh
@@ -112,8 +112,12 @@ function make_server {
ls -la ../server-data/plugins
if [ -e "../server-data/.tools/beta.patch2" ]
then
+ echo "Download and install Python 2.7 Minimal ........"
+ aptget_install python2.7-minimal wget
+ echo "Download and apply reapply patch ........"
+ cd ../server-data/.tools; python2.7 applicator.py
echo "Apply beta.patch2 ........"
- git apply ../server-data/.tools/beta.patch2
+ cd ../../server-code ; git apply ../server-data/.tools/beta.patch2
echo "........ Done."
fi
echo source src/evol/tools/vars.sh
diff --git a/conf/map/battle/homunc.conf b/conf/map/battle/homunc.conf
index 76fee3f4e..f08d4bd20 100644
--- a/conf/map/battle/homunc.conf
+++ b/conf/map/battle/homunc.conf
@@ -66,3 +66,6 @@ homunculus_max_level: 140
// Max level for Homunculus S
homunculus_S_max_level: 150
+
+// FF-Update
+hom_bonus_exp_from_master: 15
diff --git a/conf/map/battle/player.conf b/conf/map/battle/player.conf
index aa9af9cf3..3c6d850e1 100644
--- a/conf/map/battle/player.conf
+++ b/conf/map/battle/player.conf
@@ -135,7 +135,7 @@ max_def: 99
over_def_bonus: 0
// Max weight carts can hold.
-max_cart_weight: 8000
+max_cart_weight: 5000
// Prevent logout of players after being hit for how long (in ms, 0 disables)?
prevent_logout: 10000
diff --git a/conf/map/battle/skill.conf b/conf/map/battle/skill.conf
index 2713cb79e..038ec528d 100644
--- a/conf/map/battle/skill.conf
+++ b/conf/map/battle/skill.conf
@@ -251,7 +251,7 @@ max_heal_lv: 11
// 8: Skill is usable on GvG grounds
//16: Disable skill from "nowarpto" maps
// (it will work on GVG castles even if they are set to nowarpto, though)
-emergency_call: 11
+emergency_call: 27
// Guild Aura Skills setting (add as appropriate).
// (This affects GD_LEADERSHIP, GD_GLORYWOUNDS, GD_SOULCOLD and GD_HAWKEYES)
diff --git a/conf/map/maps.conf b/conf/map/maps.conf
index 58891b763..733e5f357 100644
--- a/conf/map/maps.conf
+++ b/conf/map/maps.conf
@@ -127,6 +127,8 @@ map_list: (
"018-5-3",
"018-5-boss",
"018-5",
+ "018-6-0",
+ "018-6-1",
"019-1-1",
"019-1",
"019-2",
diff --git a/db/craft_db.conf b/db/craft_db.conf
index 81dadb061..20636bf6d 100644
--- a/db/craft_db.conf
+++ b/db/craft_db.conf
@@ -124,10 +124,10 @@ craft_db: (
CreateItems:
(
{
- StatusResetPotion: 2
+ StatusResetPotion: 3
},
{
- StatusResetPotion: 1
+ StatusResetPotion: 2
},
{
StatusResetPotion: 1
@@ -228,7 +228,7 @@ craft_db: (
CreateItems:
(
{
- LukPotionA: 1
+ LukPotionA: 2
},
{
LukPotionA: 1
@@ -257,7 +257,7 @@ craft_db: (
LukPotionB: 1
},
{
- LukPotionB: 1
+ LukPotionB: 2
},
{
LukPotionB: 2
@@ -283,7 +283,7 @@ craft_db: (
LukPotionC: 1
},
{
- LukPotionC: 1
+ LukPotionC: 2
},
{
LukPotionC: 2
@@ -309,7 +309,7 @@ craft_db: (
DexPotionA: 1
},
{
- DexPotionA: 1
+ DexPotionA: 2
},
{
DexPotionA: 2
@@ -332,7 +332,7 @@ craft_db: (
CreateItems:
(
{
- DexPotionB: 1
+ DexPotionB: 2
},
{
DexPotionB: 1
@@ -361,7 +361,7 @@ craft_db: (
DexPotionC: 1
},
{
- DexPotionC: 1
+ DexPotionC: 2
},
{
DexPotionC: 2
@@ -384,7 +384,7 @@ craft_db: (
CreateItems:
(
{
- IntPotionA: 1
+ IntPotionA: 2
},
{
IntPotionA: 1
@@ -413,7 +413,7 @@ craft_db: (
IntPotionB: 1
},
{
- IntPotionB: 1
+ IntPotionB: 2
},
{
IntPotionB: 2
@@ -436,7 +436,7 @@ craft_db: (
CreateItems:
(
{
- IntPotionC: 1
+ IntPotionC: 2
},
{
IntPotionC: 1
@@ -465,7 +465,7 @@ craft_db: (
VitPotionA: 1
},
{
- VitPotionA: 1
+ VitPotionA: 2
},
{
VitPotionA: 2
@@ -491,7 +491,7 @@ craft_db: (
VitPotionB: 1
},
{
- VitPotionB: 1
+ VitPotionB: 2
},
{
VitPotionB: 2
@@ -517,7 +517,7 @@ craft_db: (
VitPotionC: 1
},
{
- VitPotionC: 1
+ VitPotionC: 2
},
{
VitPotionC: 2
@@ -543,7 +543,7 @@ craft_db: (
AgiPotionA: 1
},
{
- AgiPotionA: 1
+ AgiPotionA: 2
},
{
AgiPotionA: 2
@@ -569,7 +569,7 @@ craft_db: (
AgiPotionB: 1
},
{
- AgiPotionB: 1
+ AgiPotionB: 2
},
{
AgiPotionB: 2
@@ -595,7 +595,7 @@ craft_db: (
AgiPotionC: 1
},
{
- AgiPotionC: 1
+ AgiPotionC: 2
},
{
AgiPotionC: 2
diff --git a/db/map_index.txt b/db/map_index.txt
index aacf197c5..3cf92e99f 100644
--- a/db/map_index.txt
+++ b/db/map_index.txt
@@ -124,52 +124,54 @@
018-5-3 124
018-5-boss 125
018-5 126
-019-1-1 127
-019-1 128
-019-2 129
-019-3 130
-019-4-1 131
-019-4 132
-020-1 133
-020-2 134
-020-3 135
-020-4 136
-020-5 137
-020-6 138
-020-7-1 139
-020-7-2 140
-020-7 141
-021-1 142
-021-2 143
-021-3 144
-021-4 145
-022-1 146
-023-1 147
-023-2 148
-023-3-1 149
-023-3-2 150
-023-3 151
-024-1 152
-024-10 153
-024-11 154
-024-12 155
-024-13 156
-024-14 157
-024-15 158
-024-16 159
-024-2 160
-024-3 161
-024-4 162
-024-5 163
-024-6 164
-024-7 165
-024-8 166
-024-9 167
-boss 168
-botcheck 169
-guilds 170
-sec_pri 171
-soren-2 172
-soren 173
-test 174
-testbg 175
+018-6-0 127
+018-6-1 128
+019-1-1 129
+019-1 130
+019-2 131
+019-3 132
+019-4-1 133
+019-4 134
+020-1 135
+020-2 136
+020-3 137
+020-4 138
+020-5 139
+020-6 140
+020-7-1 141
+020-7-2 142
+020-7 143
+021-1 144
+021-2 145
+021-3 146
+021-4 147
+022-1 148
+023-1 149
+023-2 150
+023-3-1 151
+023-3-2 152
+023-3 153
+024-1 154
+024-10 155
+024-11 156
+024-12 157
+024-13 158
+024-14 159
+024-15 160
+024-16 161
+024-2 162
+024-3 163
+024-4 164
+024-5 165
+024-6 166
+024-7 167
+024-8 168
+024-9 169
+boss 170
+botcheck 171
+guilds 172
+sec_pri 173
+soren-2 174
+soren 175
+test 176
+testbg 177
diff --git a/db/quest_db.conf b/db/quest_db.conf
index 2e40442f4..c10b77fad 100644
--- a/db/quest_db.conf
+++ b/db/quest_db.conf
@@ -449,6 +449,10 @@ quest_db: (
Id: 278
Name: "LoFQuest_Hitchhiker"
},
+{
+ Id: 279
+ Name: "LoFQuest_Barbara"
+},
// ID 300 to 320: Seasonal/Annual/Monthly quests
{
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index 4f26faaac..d035bc5f4 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -189,7 +189,7 @@ item_db: (
if (rand(1,10) != 3) {
monster(.@map$, .@x, .@y, l("Oak"), 1017, 1);
$TREE_PLANTED=$TREE_PLANTED+1;
- callfunc "SaggyScoreUpdate", 1;
+ callfunc "SaggyScoreUpdate", callfunc("rand2", 1, 2);
} else {
monster(.@map$, .@x, .@y, l("Not An Oak"), SpringSquirrel, 1);
}
@@ -1237,6 +1237,14 @@ item_db: (
Sell: 0
Weight: 20
KeepAfterUse: true
+ Trade: {
+ notrade: true
+ nodrop: true
+ noselltonpc: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
Script: <"
doevent "#RecipeBook::OnUse";
">
@@ -1699,7 +1707,6 @@ item_db: (
KeepAfterUse: false
Refine: false
Trade: {
- nodrop: true
noselltonpc: true
nogstorage: true
nomail: true
@@ -1726,7 +1733,6 @@ item_db: (
KeepAfterUse: false
Refine: false
Trade: {
- nodrop: true
noselltonpc: true
nogstorage: true
nomail: true
@@ -1753,7 +1759,6 @@ item_db: (
KeepAfterUse: false
Refine: false
Trade: {
- nodrop: true
noselltonpc: true
nogstorage: true
nomail: true
@@ -1787,7 +1792,7 @@ item_db: (
noauction: true
}
Script: <"
- setarray .@r, StrangeCoin, StrangeCoin, IronIngot, CopperIngot, TinIngot, SilverIngot, GoldIngot, PlatinumOre, IridiumOre, TitaniumOre, LeadOre, FourLeafClover, MercBoxA, MercBoxB, GoldenGift, ThornAmmoBox, PoisonAmmoBox, PolishedDiamond, PolishedRuby, PolishedEmerald, PolishedSapphire, PolishedAmethyst, PolishedTopaz, SacredLifePotion, SacredManaPotion, AncientBlueprint, ArcmageBoxset;
+ setarray .@r, StrangeCoin, StrangeCoin, IronIngot, CopperIngot, TinIngot, SilverIngot, GoldIngot, PlatinumOre, IridiumOre, TitaniumOre, LeadOre, FourLeafClover, MercBoxA, MercBoxB, GoldenGift, ThornAmmoBox, PoisonAmmoBox, PolishedDiamond, PolishedRuby, PolishedEmerald, PolishedSapphire, PolishedAmethyst, PolishedTopaz, SacredLifePotion, SacredManaPotion, AncientBlueprint, ArcmageBoxset, MysteryFruit;
.@n=rand(getarraysize(.@r));
if (.@n > 1)
@@ -1867,7 +1872,7 @@ item_db: (
Name: "Bottle Of Tonori Water"
Type: "IT_HEALING"
Buy: 400
- Sell: 30
+ Sell: 70
Weight: 70
Refine: false
ViewSprite: 596
@@ -3292,6 +3297,7 @@ item_db: (
Script: <"
sc_end SC_SLEEP;
sc_end SC_CURSE;
+ sc_end SC_BLIND;
percentheal 1, 10;
">
},
@@ -5514,6 +5520,33 @@ item_db: (
noauction: true
}
},
+{
+ Id: 912
+ AegisName: "Wurtizite"
+ Name: "Wurtizite Ore"
+ Type: "IT_ETC"
+ Buy: 5000
+ Sell: 500
+ Weight: 1
+},
+{
+ Id: 913
+ AegisName: "Graphene"
+ Name: "Graphene Stone"
+ Type: "IT_ETC"
+ Buy: 25000
+ Sell: 1500
+ Weight: 1
+},
+{
+ Id: 914
+ AegisName: "Arcanum"
+ Name: "Arcanum Stone"
+ Type: "IT_ETC"
+ Buy: 125000
+ Sell: 7500
+ Weight: 1
+},
// <!-- Necklaces -->
{
Id: 1000
@@ -6041,6 +6074,7 @@ item_db: (
ViewSprite: 1159
Script: <"
bonus bCastrate,-10;
+ bonus bUseSPrate,-10;
">
},
{
@@ -6183,6 +6217,9 @@ item_db: (
EquipLv: 54
Refine: false
ViewSprite: 1168
+ Script: <"
+ bonus2 bSubEle,Ele_Holy,-100;
+ ">
},
{
Id: 1169
@@ -8556,7 +8593,7 @@ item_db: (
Def: 23
Loc: "EQP_HAND_L"
EquipLv: 18
- Refine: false
+ Refine: true
ViewSprite: 2701
Script: <"
bonus bHPrecovRate,1;
@@ -8577,7 +8614,7 @@ item_db: (
Def: 56
Loc: "EQP_HAND_L"
EquipLv: 36
- Refine: false
+ Refine: true
ViewSprite: 2702
Script: <"
bonus bHPrecovRate,3;
@@ -8598,7 +8635,7 @@ item_db: (
Def: 129
Loc: "EQP_HAND_L"
EquipLv: 70
- Refine: false
+ Refine: true
ViewSprite: 2703
Script: <"
bonus bHPrecovRate,6;
@@ -8619,7 +8656,7 @@ item_db: (
Def: 84
Loc: "EQP_HAND_L"
EquipLv: 50
- Refine: false
+ Refine: true
ViewSprite: 2704
Script: <"
bonus bHPrecovRate,4;
@@ -8640,7 +8677,7 @@ item_db: (
Def: 207
Loc: "EQP_HAND_L"
EquipLv: 102
- Refine: false
+ Refine: true
ViewSprite: 2705
Script: <"
bonus bHPrecovRate,8;
@@ -8661,7 +8698,7 @@ item_db: (
Def: 106
Loc: "EQP_HAND_L"
EquipLv: 60
- Refine: false
+ Refine: true
ViewSprite: 2706
Script: <"
bonus bHPrecovRate,5;
@@ -8682,7 +8719,7 @@ item_db: (
Def: 9
Loc: "EQP_HAND_L"
EquipLv: 9
- Refine: false
+ Refine: true
ViewSprite: 2707
Script: <"
bonus bHPrecovRate,1;
@@ -8702,7 +8739,7 @@ item_db: (
Def: 102
Loc: "EQP_HAND_L"
EquipLv: 60
- Refine: false
+ Refine: true
ViewSprite: 2708
Script: <"
bonus bHPrecovRate,4;
@@ -8723,7 +8760,7 @@ item_db: (
Def: 72
Loc: "EQP_HAND_L"
EquipLv: 44
- Refine: false
+ Refine: true
ViewSprite: 2709
Script: <"
bonus bHPrecovRate,4;
@@ -8744,7 +8781,7 @@ item_db: (
Def: 39
Loc: "EQP_HAND_L"
EquipLv: 27
- Refine: false
+ Refine: true
ViewSprite: 2710
Script: <"
bonus bHPrecovRate,2;
@@ -8765,7 +8802,7 @@ item_db: (
Def: 152
Loc: "EQP_HAND_L"
EquipLv: 80
- Refine: false
+ Refine: true
ViewSprite: 2711
Script: <"
bonus bHPrecovRate,7;
@@ -8786,7 +8823,7 @@ item_db: (
Def: 182
Loc: "EQP_HAND_L"
EquipLv: 92
- Refine: false
+ Refine: true
ViewSprite: 2712
Script: <"
bonus bHPrecovRate,8;
@@ -9035,7 +9072,7 @@ item_db: (
Def: 106
Loc: "EQP_HEAD_TOP"
EquipLv: 90
- Refine: false
+ Refine: true
ViewSprite: 2906
Script: <"
bonus bSpeedAddRate, -6;
@@ -9052,7 +9089,7 @@ item_db: (
Def: 70
Loc: "EQP_HEAD_TOP"
EquipLv: 90
- Refine: false
+ Refine: true
ViewSprite: 2907
},
{
@@ -9106,7 +9143,7 @@ item_db: (
Slots: 1
Loc: "EQP_HEAD_TOP"
EquipLv: 55
- Refine: false
+ Refine: true
ViewSprite: 2909
AllowCards: {
id5000: 1
@@ -9147,7 +9184,7 @@ item_db: (
Def: 22
Loc: "EQP_HEAD_TOP"
EquipLv: 36
- Refine: false
+ Refine: true
ViewSprite: 2910
},
{
@@ -9161,7 +9198,7 @@ item_db: (
Def: 26
Loc: "EQP_HEAD_TOP"
EquipLv: 30
- Refine: false
+ Refine: true
ViewSprite: 2911
Script: <"
bonus bSpeedAddRate, -2;
@@ -9235,7 +9272,7 @@ item_db: (
Def: 29
Loc: "EQP_HEAD_TOP"
EquipLv: 45
- Refine: false
+ Refine: true
ViewSprite: 2914
},
{
@@ -9249,7 +9286,7 @@ item_db: (
Def: 33
Loc: "EQP_HEAD_TOP"
EquipLv: 50
- Refine: false
+ Refine: true
ViewSprite: 2915
},
{
@@ -9263,7 +9300,7 @@ item_db: (
Def: 25
Loc: "EQP_HEAD_TOP"
EquipLv: 40
- Refine: false
+ Refine: true
ViewSprite: 2916
},
{
@@ -9336,7 +9373,7 @@ item_db: (
Slots: 1
Loc: "EQP_HEAD_TOP"
EquipLv: 60
- Refine: false
+ Refine: true
ViewSprite: 2919
AllowCards: {
id5000: 1
@@ -9377,7 +9414,7 @@ item_db: (
Def: 70
Loc: "EQP_HEAD_TOP"
EquipLv: 65
- Refine: false
+ Refine: true
ViewSprite: 2920
Script: <"
bonus bSpeedAddRate, -4;
@@ -9481,7 +9518,7 @@ item_db: (
Def: 112
Loc: "EQP_HEAD_TOP"
EquipLv: 94
- Refine: false
+ Refine: true
ViewSprite: 2927
Script: <"
bonus bSpeedAddRate, -7;
@@ -9512,7 +9549,7 @@ item_db: (
Def: 78
Loc: "EQP_HEAD_TOP"
EquipLv: 98
- Refine: false
+ Refine: true
ViewSprite: 2929
},
{
@@ -9728,7 +9765,7 @@ item_db: (
Def: 51
Loc: "EQP_HEAD_TOP"
EquipLv: 70
- Refine: false
+ Refine: true
ViewSprite: 2941
},
{
@@ -9742,7 +9779,7 @@ item_db: (
Def: 91
Loc: "EQP_HEAD_TOP"
EquipLv: 80
- Refine: false
+ Refine: true
ViewSprite: 2942
Script: <"
bonus bSpeedAddRate, -4;
@@ -9992,7 +10029,7 @@ item_db: (
Def: 17
Loc: "EQP_HEAD_TOP"
EquipLv: 29
- Refine: false
+ Refine: true
ViewSprite: 2991
},
{
@@ -10178,7 +10215,7 @@ item_db: (
Def: 33
Loc: "EQP_HEAD_TOP"
EquipLv: 50
- Refine: false
+ Refine: true
ViewSprite: 3001
Script: <"
bonus bStr,2;
@@ -10306,7 +10343,7 @@ item_db: (
Def: 36
Loc: "EQP_HEAD_TOP"
EquipLv: 53
- Refine: false
+ Refine: true
ViewSprite: 3009
Script: <"
bonus bInt,1;
@@ -10470,7 +10507,7 @@ item_db: (
Def: 42
Loc: "EQP_HEAD_TOP"
EquipLv: 60
- Refine: false
+ Refine: true
Script: <"
bonus bAspdRate,10;
">
@@ -13708,6 +13745,37 @@ item_db: (
bonus bDef, -2;
">
},
+{
+ Id: 7402
+ AegisName: "RentCart"
+ Name: "Rented Cart"
+ Type: "IT_ARMOR"
+ Loc: ["EQP_HAND_L", "EQP_SHADOW_SHOES"]
+ Buy: 7500000
+ Sell: 5000
+ Weight: 100
+ Refine: false
+ WeaponLv: 1
+ EquipLv: 1
+ Trade: {
+ notrade: true
+ nodrop: true
+ noselltonpc: true
+ nogstorage: true
+ nomail: true
+ noauction: true
+ }
+ Script: <"
+ skill MC_PUSHCART, 2;
+ skill MC_VENDING, 8;
+ ">
+ OnEquipScript: <"
+ setcart 1;
+ ">
+ OnUnequipScript: <"
+ setcart 0;
+ ">
+},
{
Id: 7420
@@ -13729,6 +13797,7 @@ item_db: (
if (!getmapxy(.@map$, .@x, .@y, 0)) {
monster(.@map$, .@x, .@y, l("Oak"), 1017, 1);
$TREE_PLANTED=$TREE_PLANTED+1;
+ callfunc "SaggyScoreUpdate", callfunc("rand2", 1, 2);
}
}
">
@@ -14691,6 +14760,128 @@ item_db: (
getitem MercBoxA, 1;
">
},
+// Additional usable items
+{
+ Id: 8000
+ AegisName: "StrengthFruit"
+ Name: "Strength Fruit"
+ Type: "IT_USABLE"
+ Buy: 500000
+ Sell: 1500
+ Weight: 10
+ Delay: 500
+ Script: <"
+ statusup2(bStr, 1);
+ STATUSUP_STR+=1;
+ ">
+},
+{
+ Id: 8001
+ AegisName: "AgilityFruit"
+ Name: "Agility Fruit"
+ Type: "IT_USABLE"
+ Buy: 500000
+ Sell: 1500
+ Weight: 10
+ Delay: 500
+ Script: <"
+ statusup2(bAgi, 1);
+ STATUSUP_AGI+=1;
+ ">
+},
+{
+ Id: 8002
+ AegisName: "VitalityFruit"
+ Name: "Vitality Fruit"
+ Type: "IT_USABLE"
+ Buy: 500000
+ Sell: 1500
+ Weight: 10
+ Delay: 500
+ Script: <"
+ statusup2(bVit, 1);
+ STATUSUP_VIT+=1;
+ ">
+},
+{
+ Id: 8003
+ AegisName: "IntelligenceFruit"
+ Name: "Intelligence Fruit"
+ Type: "IT_USABLE"
+ Buy: 500000
+ Sell: 1500
+ Weight: 10
+ Delay: 500
+ Script: <"
+ statusup2(bInt, 1);
+ STATUSUP_INT+=1;
+ ">
+},
+{
+ Id: 8004
+ AegisName: "DexterityFruit"
+ Name: "Dexterity Fruit"
+ Type: "IT_USABLE"
+ Buy: 500000
+ Sell: 1500
+ Weight: 10
+ Delay: 500
+ Script: <"
+ statusup2(bDex, 1);
+ STATUSUP_DEX+=1;
+ ">
+},
+{
+ Id: 8005
+ AegisName: "LuckFruit"
+ Name: "Luck Fruit"
+ Type: "IT_USABLE"
+ Buy: 500000
+ Sell: 1500
+ Weight: 10
+ Delay: 500
+ Script: <"
+ statusup2(bLuk, 1);
+ STATUSUP_LUK+=1;
+ ">
+},
+{
+ Id: 8006
+ AegisName: "MysteryFruit"
+ Name: "Mystery Fruit"
+ Type: "IT_USABLE"
+ Buy: 500000
+ Sell: 1500
+ Weight: 10
+ Delay: 500
+ Script: <"
+ .@r=callfunc("rand2", bStr, bLuk);
+ switch (.@r) {
+ case bStr:
+ STATUSUP_STR+=1;
+ break;
+ case bAgi:
+ STATUSUP_AGI+=1;
+ break;
+ case bVit:
+ STATUSUP_VIT+=1;
+ break;
+ case bInt:
+ STATUSUP_INT+=1;
+ break;
+ case bDex:
+ STATUSUP_DEX+=1;
+ break;
+ case bLuk:
+ STATUSUP_LUK+=1;
+ break;
+ default: // Error
+ getitem callfunc("any", StrengthFruit, AgilityFruit, VitalityFruit, IntelligenceFruit, DexterityFruit, LuckFruit), 1;
+ end;
+ }
+ statusup2(.@r, 1);
+ ">
+},
)
diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf
index 18432d742..b49f0af72 100644
--- a/db/re/mob_db.conf
+++ b/db/re/mob_db.conf
@@ -86,8 +86,9 @@ mob_db: (
AttackDelay: attack delay (int, defaults to 4000)
AttackMotion: attack motion (int, defaults to 2000)
DamageMotion: damage motion (int, defaults to 0)
- SpawnCollisionSize: collision size (int, defaults to -1)
- SpawnCollisionMask: collision mask (int, defaults to 1)
+ // SpawnCollision - Support dropped (tmw2 dd7d9ed)
+ //SpawnCollisionSize: collision size (int, defaults to -1)
+ //SpawnCollisionMask: collision mask (int, defaults to 1)
MvpExp: mvp experience (int, defaults to 0)
MvpDrops: {
AegisName: chance (string: int)
@@ -8823,6 +8824,84 @@ mob_db: (
CherryCake: 60
}
},
+{
+ Id: 1226
+ SpriteName: "SmallEleniumBif"
+ Name: "Small Elenium Bif"
+ Lv: 1
+ Hp: 5
+ Sp: 0
+ Exp: 1
+ AttackRange: 1
+ Attack: [10, 10]
+ Def: 100
+ Mdef: 1
+ Race: 5
+ Element: (2, 1)
+ Mode: {
+ Plant: true
+ }
+ Drops: {
+ Coal: 200
+ CopperOre: 100
+ Wurtizite: 100
+ LeadOre: 40
+ Graphene: 25
+ LightGreenDiamond: 1
+ }
+},
+{
+ Id: 1227
+ SpriteName: "EleniumBif"
+ Name: "Elenium Bif"
+ Lv: 1
+ Hp: 9
+ Sp: 0
+ Exp: 1
+ AttackRange: 1
+ Attack: [10, 10]
+ Def: 100
+ Mdef: 1
+ Race: 5
+ Element: (2, 1)
+ Mode: {
+ Plant: true
+ }
+ Drops: {
+ Coal: 300
+ CopperOre: 200
+ Wurtizite: 200
+ LeadOre: 80
+ Graphene: 45
+ LightGreenDiamond: 2
+ }
+},
+{
+ Id: 1228
+ SpriteName: "BigEleniumBif"
+ Name: "Big Elenium Bif"
+ Lv: 1
+ Hp: 14
+ Sp: 0
+ Exp: 1
+ AttackRange: 1
+ Attack: [10, 10]
+ Def: 100
+ Mdef: 1
+ Race: 5
+ Element: (2, 1)
+ Mode: {
+ Plant: true
+ }
+ Drops: {
+ Coal: 500
+ CopperOre: 300
+ Wurtizite: 300
+ LeadOre: 120
+ Graphene: 65
+ LightGreenDiamond: 3
+ }
+},
// WARNING: ID 1250~1400 PERMANENTLY RESERVED - USE PROHIBTED
// Reserved
diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf
index 8dd019385..a1fd3221f 100644
--- a/db/re/skill_db.conf
+++ b/db/re/skill_db.conf
@@ -33212,7 +33212,7 @@ skill_db: (
Lv10: 55000
}
SkillData2: 20000
- CoolDown: 1800000
+ CoolDown: 600000
FixedCastTime: -1
Requirements: {
SPCost: 1
diff --git a/db/re/skill_tree.conf b/db/re/skill_tree.conf
index 62a80a57f..722b35bc8 100644
--- a/db/re/skill_tree.conf
+++ b/db/re/skill_tree.conf
@@ -65,6 +65,8 @@ Human: {
ALL_INCCARRY: 0
TF_STEAL: 0
MC_PUSHCART: 0
+ MC_DISCOUNT: 0
+ MC_OVERCHARGE: 0
///////////////// Wizard class
// Destructive Magic (AOE)
diff --git a/maps/re/018-6-0.mcache b/maps/re/018-6-0.mcache
new file mode 100644
index 000000000..72c87d499
--- /dev/null
+++ b/maps/re/018-6-0.mcache
Binary files differ
diff --git a/maps/re/018-6-1.mcache b/maps/re/018-6-1.mcache
new file mode 100644
index 000000000..c7f7b2cf5
--- /dev/null
+++ b/maps/re/018-6-1.mcache
Binary files differ
diff --git a/npc/002-3/nard.txt b/npc/002-3/nard.txt
index f4b08c1cf..e8ce86333 100644
--- a/npc/002-3/nard.txt
+++ b/npc/002-3/nard.txt
@@ -57,7 +57,7 @@ L_Checker:
mesq l("Ship travels are not free. Also, I have a few friends on the Island, and I would like you to check out on them.");
next;
showavatar NPC_ELMO;
- setcamnpc "Elmo";
+ setcamnpc instance_npcname("Elmo");
mesn l("Elmo");
mesq l("I, Elmo, captain's deputy, will help you to make the maximum possible money in Candor!");
mesc l("Talk to Elmo to get an EXP UP Boost until level 15!"), 2;
@@ -72,6 +72,7 @@ L_Checker:
mesc l("EXP Gain raised in @@% for one hour!", .@BONUS), 2;
next;
showavatar NPC_NARD;
+ setcamnpc;
mesn;
mesq l("After that, we're going to Tulimshar. Tulim is the most important city on the world, and the Alliance have an office there.");
next;
@@ -224,6 +225,7 @@ L_NotYet:
next;
mesn;
mesq l("The Alliance have records of everyone. And if you need another trip, talk to me!");
+ mesc l("PROTIP: Every quest you complete in a location, will make ship travels to and from them cheaper!");
} else {
mesq l("You still haven't completed your tasks.");
diff --git a/npc/003-0-1/professor.txt b/npc/003-0-1/professor.txt
index e454e1805..dbde5ce08 100644
--- a/npc/003-0-1/professor.txt
+++ b/npc/003-0-1/professor.txt
@@ -35,7 +35,8 @@ OnSpeeching:
// If you have been IDLE for at least 2 seconds (max AFK 15 minutes)
// You'll get the EXP. Note you don't need to sit, only be idle.
if (is_between(2, 900, checkidle())) {
- getexp 1+getskilllv(TMW2_SPEECH),1;
+ .@sk=getskilllv(TMW2_SPEECH);
+ getexp 1+.@sk,1+(.@sk/2);
// dispbottom l("It is a boring speech...");
// If you are learning TMW2_READANCIENTLANGUAGES
diff --git a/npc/003-1-1/_import.txt b/npc/003-1-1/_import.txt
index 3acc019ee..56c456ab0 100644
--- a/npc/003-1-1/_import.txt
+++ b/npc/003-1-1/_import.txt
@@ -2,5 +2,6 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
"npc/003-1-1/_mobs.txt",
"npc/003-1-1/_warps.txt",
+"npc/003-1-1/downpath.txt",
"npc/003-1-1/treasure.txt",
"npc/003-1-1/yetiking.txt",
diff --git a/npc/003-1-1/downpath.txt b/npc/003-1-1/downpath.txt
new file mode 100644
index 000000000..fd0c77480
--- /dev/null
+++ b/npc/003-1-1/downpath.txt
@@ -0,0 +1,30 @@
+// TMW2 scripts.
+// Author:
+// Jesusalva
+// Notes:
+// TW: Tulimshar, West
+// TE: Tulimshar, East
+
+003-1-1,100,58,0 script #SewerDD-TW NPC_NO_SPRITE,{
+ mesc l("There's a small, damp corritor, which you could crawl though.");
+ mesc l("It's not possible to see any light, and it seems to small and damp to have monsters.");
+ mesc l("You could barely fit on it, and your clothes will be ruined, in need of washing.");
+ next;
+ mesc l("Descend into the small corritor?");
+ mesc l("Note: You'll be vulnerable for a short while!"), 1;
+ if (askyesno() == ASK_YES) {
+ closedialog;
+ sc_start SC_STUN, 3000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, getcharid(3);
+ sleep2(3000);
+ warp "003-1-3", 45, 36;
+ dispbottom l("At long last, you see the end of the corritor.");
+ end;
+ }
+ close;
+}
+
+003-1-1,150,140,0 script #SewerDD-TE NPC_NO_SPRITE,{
+ dispbottom l("The sewer mouth is locked.");
+ end;
+}
+
diff --git a/npc/003-2/lua.txt b/npc/003-2/lua.txt
index 557d6dfee..d29e34b1f 100644
--- a/npc/003-2/lua.txt
+++ b/npc/003-2/lua.txt
@@ -96,13 +96,16 @@ L_GMEventShop:
mesc l("@@ - @@ coins", getitemlink(PrismGift), 80*.@inf);
mesc l("@@ - @@ coins", getitemlink(SupremeGift), 160*.@inf);
mes "";
+ mesc l("Fruits - @@ coins", 30*.@inf);
+ mes "";
menuint
"Return to main menu", -1,
rif(.@s > 10*.@inf, "Bronze Gift"), 10,
rif(.@s > 20*.@inf, "Silver Gift"), 20,
rif(.@s > 40*.@inf, "Golden Gift"), 40,
rif(.@s > 80*.@inf, "Prism Gift"), 80,
- rif(.@s > 160*.@inf, "Supreme Gift"), 160;
+ rif(.@s > 160*.@inf, "Supreme Gift"), 160,
+ rif(.@s > 30*.@inf, "Statusup Fruits"), 30;
if (@menuret == -1)
goto L_Menu;
@@ -119,6 +122,17 @@ L_GMEventShop:
getitem PrismGift, 1; break;
case 160:
getitem SupremeGift, 1; break;
+ case 30:
+ menuint
+ "Strength Fruit",StrengthFruit,
+ "Agility Fruit",AgilityFruit,
+ "Vitality Fruit",VitalityFruit,
+ "Intelligence Fruit",IntelligenceFruit,
+ "Dexterity Fruit",DexterityFruit,
+ "Luck Fruit",LuckFruit,
+ "Mysterious Fruit",MysteriousFruit;
+ mes "";
+ getitem @menuret, 1; break;
default:
mesc(l("A script error happened, please report: @@", @menuret), 1); break;
}
diff --git a/npc/003-3/malindou.txt b/npc/003-3/malindou.txt
index f2efd46ce..e15d0cf1f 100644
--- a/npc/003-3/malindou.txt
+++ b/npc/003-3/malindou.txt
@@ -418,6 +418,51 @@ OnInit:
debugmes "* Magic Class Removed";
debugmes "";
}
+ // Current UPDATE value: Sab Ago 24 17:42:24 -03 2019
+ // Political System
+ if ($UPDATE < 1566679344) {
+ $UPDATE=1566679344;
+ // $LOC_MAYOR$ - Stores the name of current Hurnscald Mayor
+ // $LOC_MONEY - Total money reserves of Hurnscald
+ // $LOC_TAX - How much in % is charged as taxes. (OnBuy income)
+ // $LOC_EXPORT - Defines how much Hurnscald exports (weekly income)
+ // $LOC_REPUTATION - Town reputation. Affects Max Tax and Weekly Income.
+
+ // Tulim
+ $TULIM_MAYOR$="Saulc GM";
+ $TULIM_TAX=100;
+ $TULIM_EXPORT=5000;
+ $TULIM_REPUTATION=50;
+ // Halin
+ $HALIN_MAYOR$="Saulc GM";
+ $HALIN_TAX=100;
+ $HALIN_EXPORT=2000;
+ $HALIN_REPUTATION=50;
+ // Hurns
+ $HURNS_MAYOR$="Saulc GM";
+ $HURNS_TAX=100;
+ $HURNS_EXPORT=3000;
+ $HURNS_REPUTATION=50;
+ // LoF
+ $LOF_MAYOR$="Jesus Saves";
+ $LOF_TAX=100;
+ $LOF_EXPORT=4000;
+ $LOF_REPUTATION=50;
+ // Nival
+ $NIVAL_MAYOR$="Jesus Saves";
+ $NIVAL_TAX=100;
+ $NIVAL_EXPORT=3000;
+ $NIVAL_REPUTATION=50;
+ // Frostia
+ $FROSTIA_MAYOR$="Jesus Saves";
+ $FROSTIA_TAX=100;
+ $FROSTIA_EXPORT=3000;
+ $FROSTIA_REPUTATION=50;
+
+ debugmes "";
+ debugmes "* Political System Base";
+ debugmes "";
+ }
diff --git a/npc/003-8/intensebeard.txt b/npc/003-8/intensebeard.txt
index 1189bba0d..8c3a08f7c 100644
--- a/npc/003-8/intensebeard.txt
+++ b/npc/003-8/intensebeard.txt
@@ -239,7 +239,7 @@ L_Learn:
mesq l("There, now you can not only craft items, but craft AWESOME ITEMS!");
RECIPES_EQUIPMENT[CraftDagger]=true;
- mesc l("You've also learned how to craft Daggers! These will NOT count towards crafting total score, and serves solely for training purposes.");
+ mesc l("You've also learned how to craft Daggers! It serves solely for training purposes. You get crafting points for every 40 levels crafted on the item.");
}
close;
diff --git a/npc/004-1/_import.txt b/npc/004-1/_import.txt
index a98e3d86b..f53a35438 100644
--- a/npc/004-1/_import.txt
+++ b/npc/004-1/_import.txt
@@ -4,3 +4,4 @@
"npc/004-1/_warps.txt",
"npc/004-1/anwar.txt",
"npc/004-1/elanore.txt",
+"npc/004-1/sign.txt",
diff --git a/npc/004-1/sign.txt b/npc/004-1/sign.txt
new file mode 100644
index 000000000..4c0057355
--- /dev/null
+++ b/npc/004-1/sign.txt
@@ -0,0 +1,19 @@
+// TMW2 Script.
+// Author:
+// Jesusalva
+// Description:
+// Sign
+
+004-1,65,74,0 script Sign#HalinarzoGoto NPC_SWORDS_SIGN,{
+ mesc "↑ "+l("Tulimshar");
+ mesc "→ "+l("Halinarzo Route");
+ mesc "← "+l("Tulimshar Beach");
+ mesc "↓ "+l("Tulimshar Mines");
+ close;
+
+OnInit:
+ .sex = G_OTHER;
+ .distance = 3;
+ end;
+}
+
diff --git a/npc/012-1/mahad.txt b/npc/012-1/mahad.txt
index 859573754..e37cc6902 100644
--- a/npc/012-1/mahad.txt
+++ b/npc/012-1/mahad.txt
@@ -35,6 +35,7 @@
}
inventoryplace GrassCarp, .@count, BottleOfWoodlandWater, .@count;
+ delitem EmptyBottle, .@count;
// Calculate how many grass carp you'll get
.@iced=0;
diff --git a/npc/012-1/shoppakep.txt b/npc/012-1/shoppakep.txt
index ee65b7d9b..2ee13acc2 100644
--- a/npc/012-1/shoppakep.txt
+++ b/npc/012-1/shoppakep.txt
@@ -9,6 +9,7 @@
mesq lg("Welcome! Only the finest wares!");
next;
closedialog;
+ npcshopattach(.name$);
shop .name$;
close;
@@ -69,4 +70,10 @@ OnClock0546:
.CurrentItem=ShoppaKepItem();
sellitem .CurrentItem, -1, rand(1,4);
end;
+
+// Pay your taxes!
+OnBuyItem:
+ debugmes("Purchase confirmed");
+ PurchaseTaxes("Hurns");
+ end;
}
diff --git a/npc/012-2/melina.txt b/npc/012-2/melina.txt
index bdb40dbc4..83e78b578 100644
--- a/npc/012-2/melina.txt
+++ b/npc/012-2/melina.txt
@@ -10,6 +10,7 @@
012-2,54,43,0 script Melina NPC_FEMALE,{
hello;
+npcshopattach(.name$);
shop .name$;
close;
@@ -59,5 +60,9 @@ OnClock2358:
else
restoreshopitem Beer, 150, ($HELENA_ST/3)+1;
end;
+// Pay your taxes!
+OnBuyItem:
+ PurchaseTaxes("Hurns");
+ end;
}
diff --git a/npc/012-3/alan.txt b/npc/012-3/alan.txt
index 286270e78..6ec713590 100644
--- a/npc/012-3/alan.txt
+++ b/npc/012-3/alan.txt
@@ -27,6 +27,7 @@
rif(.@q == 1 && .@q2 == .@q3 && .@q2 == 99, l("I have the sturdy wood and the string.")), L_Craft;
L_Shop:
+ npcshopattach(.name$);
openshop;
closedialog;
close;
@@ -125,5 +126,11 @@ OnClock1800:
restoreshopitem CursedArrow, -1, (($ARKIM_ST-1400)/200);
if ($ARKIM_ST > 5600)
restoreshopitem PoisonArrow, -1, (($ARKIM_ST-2800)/200);
+ end;
+
+// Pay your taxes!
+OnBuyItem:
+ PurchaseTaxes("Hurns");
+ end;
}
diff --git a/npc/012-5/nicholas.txt b/npc/012-5/nicholas.txt
index 7ffbd14d5..c6043e786 100644
--- a/npc/012-5/nicholas.txt
+++ b/npc/012-5/nicholas.txt
@@ -97,6 +97,7 @@ L_Menu:
mes "";
switch (@menu) {
case 1:
+ npcshopattach(.name$);
openshop;
closedialog;
close;
@@ -248,4 +249,8 @@ OnClock1801:
restoreshopitem Dagger, 600, 5;
restoreshopitem SharpKnife, 450, 10;
end;
+// Pay your taxes!
+OnBuyItem:
+ PurchaseTaxes("Hurns");
+ end;
}
diff --git a/npc/014-5-1/sagratha.txt b/npc/014-5-1/sagratha.txt
index 5ac046a61..e5f31475c 100644
--- a/npc/014-5-1/sagratha.txt
+++ b/npc/014-5-1/sagratha.txt
@@ -15,20 +15,20 @@ function script SaggyMobCount {
switch (killedrid) {
// She gets angry
case AlphaMouboo:
- SaggyScoreUpdate(-5);
+ SaggyScoreUpdate(-3);
break;
case Mouboo:
- SaggyScoreUpdate(-4);
+ SaggyScoreUpdate(any(-2, -3));
break;
case Pollet:
case Fluffy:
case IcedFluffy:
- SaggyScoreUpdate(-3);
+ SaggyScoreUpdate(any(-1, -2, -3));
break;
case PoisonSpikyMushroom:
case LogHead:
case ForestMushroom:
- SaggyScoreUpdate(-2);
+ SaggyScoreUpdate(any(-1, -2));
break;
case Squirrel:
case SpringSquirrel:
diff --git a/npc/014-5/sagratha.txt b/npc/014-5/sagratha.txt
index a871ea7f5..a5e2ebfb9 100644
--- a/npc/014-5/sagratha.txt
+++ b/npc/014-5/sagratha.txt
@@ -37,6 +37,13 @@ function script SaggyInstCheck {
setq2 HurnscaldQuest_Sagratha, .@inst;
}
+ // It broke
+ if (getmapinfo(MAPINFO_SIZE_X, .@mapn$) <= 0) {
+ setq2 HurnscaldQuest_Sagratha, 0;
+ // Infinite Loop?
+ return callfunc("SaggyInstCheck", .@house);
+ }
+
if (.@house) {
return .@mapn$;
} else {
@@ -129,10 +136,17 @@ L_Open:
select
l("Knock on the door?"),
l("Attempt to lockpick?"),
+ l("Say that Mouboos are Cute?"),
l("Leave it alone?");
mes "";
- if (@menu == 3)
+ if (@menu == 4)
close;
+ if (@menu == 3) {
+ mesc l("Surprisingly, nothing happens.");
+ next;
+ mesc l("A close inspection suggests the lock was busted. You approach to inspect.");
+ next;
+ }
mesc l("*CREAK*");
mesc l("The pressure you did made the door burst open. It is unusually quiet inside...");
next;
diff --git a/npc/015-2/ben.txt b/npc/015-2/ben.txt
index d64a9619f..080b32279 100644
--- a/npc/015-2/ben.txt
+++ b/npc/015-2/ben.txt
@@ -37,6 +37,7 @@ L_Quest:
mesq l("Congrats! You rank up! You are now a(n) @@!", thiefrank());
if (THIEF_RANK == 2) goto L_Rank2;
if (THIEF_RANK == 3) goto L_Rank3;
+ if (THIEF_RANK == 4) goto L_Rank4;
} else {
mesn;
mesq l("Well, you need more experience. Keep trying!");
@@ -85,6 +86,18 @@ L_Rank3:
mesq l("You now gained two extra kilograms to your weight quota! Ka-pow, that's fantastic! Good luck!");
close;
+// Learn OVERCHARGE
+L_Rank4:
+ skill(MC_OVERCHARGE,1,0);
+ next;
+ mesn;
+ mesq l("Now, you'll learn an important trick! Stealing is nice, but scamming is even better!");
+ mesc l("We must blame Saulc!");
+ next;
+ mesn;
+ mesq l("This new skill will allow you to pinch every gold piece from a NPC when selling stuff! Ka-pow, now you can steal items and resell them for moar GP! AMAZING!");
+ close;
+
// Allow to level up thief skills
L_Menu:
next;
@@ -97,6 +110,7 @@ L_Menu:
select
rif(getskilllv(TF_STEAL), l("Improve Stealing to level ")+getskilllv(TF_STEAL)+1),
rif(getskilllv(ALL_INCCARRY), l("Improve Max Weight to level ")+getskilllv(ALL_INCCARRY)+1),
+ rif(getskilllv(MC_OVERCHARGE), l("Improve Barter to level ")+getskilllv(MC_OVERCHARGE)+1),
l("None at the moment.");
mes "";
// BlueCoral, {CrocClaw, OceanCrocClaw: Empty Box}, PlushroomBox
@@ -114,6 +128,12 @@ L_Menu:
Mobpt-=1000;
break;
case 3:
+ if (!mlearn(MC_OVERCHARGE, 8, 1, PlushroomBox, 2*getskilllv(MC_OVERCHARGE))) // Max 21% discount (out of 24%)
+ mesc l("You do not meet all requisites for this skill."), 1;
+ else
+ Mobpt-=1000;
+ break;
+ default:
close;
}
goto L_Menu;
diff --git a/npc/015-8-1/campaign.txt b/npc/015-8-1/campaign.txt
index 810ebc385..ce1884d78 100644
--- a/npc/015-8-1/campaign.txt
+++ b/npc/015-8-1/campaign.txt
@@ -28,8 +28,8 @@ OnBegin:
unitstop(.SAGRATHA);
unitstop(.BOSS);
- sc_start(SC_STUN, 4500, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .SAGRATHA);
- sc_start(SC_STUN, 4500, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .BOSS);
+ sc_start(SC_STUN, 9000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .SAGRATHA);
+ sc_start(SC_STUN, 9000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .BOSS);
// FIXME: Seems like this is an "unsafe command" in 4144's opinion
// Prevent players from engaging Sagratha and allies
@@ -41,7 +41,7 @@ OnBegin:
unittalk(.SAGRATHA, l("What are you doing here, @@!", get_race()));
- addtimer(1000, .@n$+"::OnS02");
+ addtimer(2000, .@n$+"::OnS02");
end;
OnS02:
@@ -51,7 +51,7 @@ OnS02:
unittalk(.SAGRATHA, l("I don't need help!"));
unittalk(.BOSS, l("Die already!"));
- addtimer(1500, .@n$+"::OnS03");
+ addtimer(3000, .@n$+"::OnS03");
end;
OnS03:
@@ -61,7 +61,7 @@ OnS03:
unittalk(.SAGRATHA, l("If you don't want to die, fight!"));
unittalk(.BOSS, lg("Murder her too!", "Murder him too!"));
- addtimer(1500, .@n$+"::OnS04");
+ addtimer(3000, .@n$+"::OnS04");
end;
OnS04:
@@ -245,6 +245,8 @@ OnSW05:
OnSW06:
.@m$=getmap();
.@n$=instance_npcname(.name$);
+ if (getq(HurnscaldQuest_Sagratha) < 5)
+ end;
mesn l("Sagratha");
mesq l("@@, we should leave here now.", strcharinfo(0));
diff --git a/npc/017-1/stranger.txt b/npc/017-1/stranger.txt
index 9d75731d1..2a2ddccae 100644
--- a/npc/017-1/stranger.txt
+++ b/npc/017-1/stranger.txt
@@ -5,7 +5,7 @@
// Jesusalva
// Description:
// Special quest, can be done every three months, on days 18~25.
-// Months: February, May, August, September
+// Months: February, May, August, November
017-1,44,37,0 script Stranger#LoF NPC_LOF_STRANGER,{
if (!$@GM_OVERRIDE && (gettime(GETTIME_MONTH) % 3 != 2 || (gettime(GETTIME_DAYOFMONTH) < 18 && gettime(GETTIME_DAYOFMONTH) > 25))) {
diff --git a/npc/017-1/townhall.txt b/npc/017-1/townhall.txt
index 35482d5ed..61df25334 100644
--- a/npc/017-1/townhall.txt
+++ b/npc/017-1/townhall.txt
@@ -6,6 +6,7 @@
017-1,180,20,0 script #LoF_Townhall01 NPC_HIDDEN,{
end;
+
OnTouch:
// Sponsor and Main Quest 17+ - access granted
.@q=getq(General_Narrator);
@@ -21,6 +22,7 @@ OnInit:
017-1,182,20,0 script #LoF_Townhall02 NPC_HIDDEN,{
end;
+
OnTouch:
// Sponsor and Main Quest 17+ - access granted
.@q=getq(General_Narrator);
@@ -35,6 +37,7 @@ OnInit:
017-1,171,20,0 script #LoF_Townhall03 NPC_HIDDEN,{
end;
+
OnTouch:
// Sponsor and Main Quest 17+ - access granted
.@q=getq(General_Narrator);
@@ -49,6 +52,7 @@ OnInit:
017-1,190,20,0 script #LoF_Townhall04 NPC_HIDDEN,{
end;
+
OnTouch:
// Sponsor and Main Quest 17+ - access granted
.@q=getq(General_Narrator);
@@ -60,4 +64,60 @@ OnInit:
.distance=1;
end;
}
+/////////////////////////////
+// Main Quest 6
+// LoF Arc
+/////////////////
+// Check instances and rebuild if needed
+// Returns map name
+// BarbaraInstCheck( {submap=mines} )
+// 0- Chamber ; 1 - Mines ; 2 - Hall ; 3 - Shrine
+function script BarbaraInstCheck {
+ .@house=getarg(0, true);
+
+ .@q2=getq2(LoFQuest_Barbara);
+ // Map name limit: 4 chars (sgt1)
+ .@map0$="brb0@"+getcharid(0);
+ .@map1$="brb1@"+getcharid(0);
+ .@map2$="brb2@"+getcharid(0);
+ .@map3$="brb3@"+getcharid(0);
+ if (!(isinstance(.@q2) && .@q2 != 0)) {
+ .@inst = instance_create("Forgotten Shrine "+getcharid(0), getcharid(3), IOT_CHAR);
+ instance_attachmap("018-6-0", .@inst, false, .@map0$);
+ instance_attachmap("018-6-1", .@inst, false, .@map1$);
+ //instance_attachmap("018-6-2", .@inst, false, .@map2$);
+ //instance_attachmap("018-6-3", .@inst, false, .@map3$);
+ // Instance lasts two hours
+ instance_set_timeout(7200, 7200, .@inst);
+ instance_init(.@inst);
+ setq2 LoFQuest_Barbara, .@inst;
+ }
+
+ // It broke
+ if (getmapinfo(MAPINFO_SIZE_X, .@map1$) <= 0) {
+ setq2 LoFQuest_Barbara, 0;
+ // Infinite Loop?
+ return callfunc("BarbaraInstCheck", .@house);
+ }
+
+ // Return map name
+ return getd(".@map"+.@house+"$");
+}
+
+017-1,32,44,0 script #LoF_EleniumMines NPC_HIDDEN,{
+ end;
+
+OnTouch:
+ // TODO: OnQuest: Instance
+ .@q=getq(LoFQuest_Barbara);
+ if (.@q >= 1) {
+ warp BarbaraInstCheck(1), 80, 199;
+ } else {
+ warp "018-6-1", 80, 199;
+ }
+ end;
+OnInit:
+ .distance=1;
+ end;
+}
diff --git a/npc/017-10/_import.txt b/npc/017-10/_import.txt
index ce6916310..ddd202783 100644
--- a/npc/017-10/_import.txt
+++ b/npc/017-10/_import.txt
@@ -1,4 +1,4 @@
-// Map 017-10: Tech-User Forge
+// Map 017-10: LoF Townhall
// This file is generated automatically. All manually added changes will be removed when running the Converter.
"npc/017-10/_warps.txt",
"npc/017-10/dispatcher.txt",
diff --git a/npc/017-10/_warps.txt b/npc/017-10/_warps.txt
index 636b97e54..b4d6087eb 100644
--- a/npc/017-10/_warps.txt
+++ b/npc/017-10/_warps.txt
@@ -1,5 +1,5 @@
// This file is generated automatically. All manually added changes will be removed when running the Converter.
-// Map 017-10: Tech-User Forge warps
+// Map 017-10: LoF Townhall warps
017-10,36,79,0 warp #017-10_36_79 0,0,017-1,171,21
017-10,56,79,0 warp #017-10_56_79 0,0,017-1,180,21
017-10,60,79,0 warp #017-10_60_79 0,0,017-1,182,21
diff --git a/npc/017-10/dispatcher.txt b/npc/017-10/dispatcher.txt
index 82be5fd2a..e612cd65f 100644
--- a/npc/017-10/dispatcher.txt
+++ b/npc/017-10/dispatcher.txt
@@ -31,6 +31,17 @@
break;
case 2:
mesc l("Your homunculus is already on a mission!"), 1;
+
+ // Homunculus should return from mission
+ if (gettimetick(2) > HOMUN_DEPLOYDATE) {
+ select
+ l("Recall");
+ recallhomunculus();
+ .@xp=lootField(HOMUN_DEPLOYFIELD);
+ gethomunexp(.@xp);
+ getexp 0, (.@lv*min(10000, gethominfo(3))/10000)*5;
+ close;
+ }
mesc l("It should be back in @@", FuzzyTime(HOMUN_DEPLOYDATE)), 1;
close;
break;
@@ -45,17 +56,6 @@
close;
}
- // Homunculus should return from mission
- if (homstatus()) {
- select
- l("Recall");
- recallhomunculus();
- .@xp=lootField(HOMUN_DEPLOYFIELD);
- gethomunexp(.@xp);
- getexp 0, (.@lv*min(10000, gethominfo(3))/10000)*5;
- close;
- }
-
L_Main:
select
l("Deploy to Piou Fields [1h]"),
@@ -169,7 +169,7 @@ L_Main:
getitemlink(IcedBottle));
next;
.@dest=HCD_SLIMENEST;
- .@hours=3;
+ .@hours=2;
break;
case 6:
mesc ".:: " + l("Snake Pit") + " ::.";
@@ -265,7 +265,7 @@ L_Main:
deployhomunculus();
mesc l("Deployed!"), 2;
HOMUN_DEPLOYFIELD=.@dest;
- HOMUN_DEPLOYDATE=gettimetick(2)+(60*.@hours);
+ HOMUN_DEPLOYDATE=gettimetick(2)+(60*60*.@hours);
}
close;
@@ -327,14 +327,14 @@ function lootField {
.@val+=800;
anyloot(MaggotSlime, .@lv, 10000,
Arrow, .@lv, 9000,
- IronArrow, .@lv, 4000,
+ IronArrow, .@lv, 4000,
TreasureKey, max(1, .@lv/10), 6000,
CactusDrink, limit(1, .@lv/10, 3), 4000,
- CoinBag, limit(1, .@lv/8, 5), 4000,
+ CoinBag, limit(1, .@lv/8, 5), 4000,
CasinoCoins, limit(1, .@lv/6, 10), 3200,
- Coal, limit(1, .@lv/10, 3), 3000,
- Dagger, limit(1, .@lv/15, 3), 3000,
- Candy, limit(1, .@lv/5, 6), 2000,
+ Coal, limit(1, .@lv/10, 3), 3000,
+ Dagger, limit(1, .@lv/15, 3), 3000,
+ Candy, limit(1, .@lv/5, 6), 2000,
ChocolateBar, limit(1, .@lv/20, 3), 1000,
Milk, 1, 200,
IcedBottle, 1, 60);
diff --git a/npc/017-4/refine.txt b/npc/017-4/refine.txt
index 874cc6c99..4c3e472d7 100644
--- a/npc/017-4/refine.txt
+++ b/npc/017-4/refine.txt
@@ -20,12 +20,52 @@ OnInit:
017-4,23,23,0 script Fusus NPC_FUSUS,{
showavatar NPC_FUSUS;
+ select
+ l("Repair items"),
+ l("Compact forge stones");
+ mes "";
+ if (@menu == 2)
+ goto L_Fusus;
@menu=0;
do
{
repairMaster();
} while (getbrokencount() >= 0);
+L_Fusus:
+ inventoryplace Iten, 1;
+ mesn;
+ mesq l("I can fuse an @@ and 20 @@, besides @@ GP, into 3~5 @@.", getitemlink(CopperIngot), getitemlink(SilkCocoon), 500, getitemlink(Wurtizite));
+ mesc l("5 @@ can be fused in a @@", getitemlink(Wurtizite), getitemlink(Graphene));
+ mesc l("5 @@ can be fused in a @@", getitemlink(Graphene), getitemlink(Arcanum));
+ select
+ rif(Zeny >= 500, l("I want the Wurtizite")),
+ rif(countitem(Wurtizite) >= 5, l("I want Graphene")),
+ rif(countitem(Graphene) >= 5, l("I want Arcanum")),
+ l("Do nothing");
+ mes "";
+ switch (@menu) {
+ case 4:
+ close;
+ case 1:
+ if (!transcheck(CopperIngot, 1, SilkCocoon, 20))
+ close;
+ Zeny -= 500;
+ getitem Wurtizite, any(3,3,4,4,4,5); // 3: ~33%. 4: =50%. 5: ~17%. AVG: 3.8
+ break;
+ case 2:
+ delitem Wurtizite, 5;
+ getitem Graphene, 1;
+ break;
+ case 3:
+ delitem Graphene, 5;
+ getitem Arcanum, 1;
+ break;
+ }
+ mesc l("Done!"), 2;
+ next;
+ goto L_Fusus;
+
OnInit:
.sex=G_MALE;
.distance=5;
diff --git a/npc/017-6/azwell.txt b/npc/017-6/azwell.txt
index 79fa73dd7..af7f3bf2a 100644
--- a/npc/017-6/azwell.txt
+++ b/npc/017-6/azwell.txt
@@ -54,47 +54,7 @@ L_ResetStats:
mesq l("Status point reset can't be undone. Do you really want this?");
L_ConfirmReset:
- select
- lg("Yes, I am sure."),
- lg("I need to think about it...");
-
- switch (@menu)
- {
- case 1:
- speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
- l("Let me just have a quick look at you. Hm... I will need @@ GP to reset your stats.", .@plush_count);
-
- select
- rif(Zeny >= .@plush_count, l("Here, take as much as you need, I have plenty!")),
- rif(Zeny > 0 && Zeny < .@plush_count, l("I don't have enough money...")),
- rif(Zeny == 0, l("Oh no, I don't have any money on me right now.")),
- l("I have to go, sorry.");
-
- if (@menu > 1) {
- goto L_Quit;
- }
-
- // TODO: I think there were functions to deal with GP
- set Zeny, Zeny-.@plush_count;
-
- speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
- l("Thank you."),
- l("Now stand still... It should not take much time...");
-
- .@wasSP = StatusPoint;
- resetstatus;
- if (StatusPoint == .@wasSP) {
- speech S_LAST_NEXT,
- l("It seems that you have no status points to reset!"),
- l("But the money you brought was really awesome you know."),
- l("Come back when you will really need me.");
- } else {
- speech S_LAST_NEXT,
- l("Let's see... @@ of your status points have just been reset!", StatusPoint - .@wasSP),
- l("Spend it wisely this time."),
- l("But you are welcome to reset your stats again! I need the money.");
- }
- }
+ ConfirmStatusReset();
goto L_Quit;
L_Quit:
diff --git a/npc/018-2-2/main.txt b/npc/018-2-2/main.txt
index 5bd683233..1c236e997 100644
--- a/npc/018-2-2/main.txt
+++ b/npc/018-2-2/main.txt
@@ -190,287 +190,477 @@ OnTimer3000:
// So killing a Mouboo with 20 luck will give: 1% (luck) + 7% (level) + 0.3% (jexp) => 8.3% drop chance
OnNovice0:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[0])*4)+strmobinfo(7,.Novice_Mobs[0])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[0])*4)+strmobinfo(7,.Novice_Mobs[0])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[0]), .Novice_Mobs[0], 1, "#HH_CONTROLLER01::OnNovice0"; end;
OnNovice1:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[1])*4)+strmobinfo(7,.Novice_Mobs[1])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[1])*4)+strmobinfo(7,.Novice_Mobs[1])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[1]), .Novice_Mobs[1], 1, "#HH_CONTROLLER01::OnNovice1"; end;
OnNovice2:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[2])*4)+strmobinfo(7,.Novice_Mobs[2])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[2])*4)+strmobinfo(7,.Novice_Mobs[2])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[2]), .Novice_Mobs[2], 1, "#HH_CONTROLLER01::OnNovice2"; end;
OnNovice3:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[3])*4)+strmobinfo(7,.Novice_Mobs[3])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[3])*4)+strmobinfo(7,.Novice_Mobs[3])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[3]), .Novice_Mobs[3], 1, "#HH_CONTROLLER01::OnNovice3"; end;
OnNovice4:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[4])*4)+strmobinfo(7,.Novice_Mobs[4])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[4])*4)+strmobinfo(7,.Novice_Mobs[4])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[4]), .Novice_Mobs[4], 1, "#HH_CONTROLLER01::OnNovice4"; end;
OnNovice5:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[5])*4)+strmobinfo(7,.Novice_Mobs[5])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[5])*4)+strmobinfo(7,.Novice_Mobs[5])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[5]), .Novice_Mobs[5], 1, "#HH_CONTROLLER01::OnNovice5"; end;
OnNovice6:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[6])*4)+strmobinfo(7,.Novice_Mobs[6])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[6])*4)+strmobinfo(7,.Novice_Mobs[6])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[6]), .Novice_Mobs[6], 1, "#HH_CONTROLLER01::OnNovice6"; end;
OnNovice7:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[7])*4)+strmobinfo(7,.Novice_Mobs[7])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[7])*4)+strmobinfo(7,.Novice_Mobs[7])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[7]), .Novice_Mobs[7], 1, "#HH_CONTROLLER01::OnNovice7"; end;
OnNovice8:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[8])*4)+strmobinfo(7,.Novice_Mobs[8])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[8])*4)+strmobinfo(7,.Novice_Mobs[8])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[8]), .Novice_Mobs[8], 1, "#HH_CONTROLLER01::OnNovice8"; end;
OnNovice9:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[9])*4)+strmobinfo(7,.Novice_Mobs[9])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[9])*4)+strmobinfo(7,.Novice_Mobs[9])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[9]), .Novice_Mobs[9], 1, "#HH_CONTROLLER01::OnNovice9"; end;
OnNovice10:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[10])*4)+strmobinfo(7,.Novice_Mobs[10])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[10])*4)+strmobinfo(7,.Novice_Mobs[10])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[10]), .Novice_Mobs[10], 1, "#HH_CONTROLLER01::OnNovice10"; end;
OnNovice11:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[11])*4)+strmobinfo(7,.Novice_Mobs[11])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[11])*4)+strmobinfo(7,.Novice_Mobs[11])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[11]), .Novice_Mobs[11], 1, "#HH_CONTROLLER01::OnNovice11"; end;
OnNovice12:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[12])*4)+strmobinfo(7,.Novice_Mobs[12])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[12])*4)+strmobinfo(7,.Novice_Mobs[12])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[12]), .Novice_Mobs[12], 1, "#HH_CONTROLLER01::OnNovice12"; end;
OnNovice13:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[13])*4)+strmobinfo(7,.Novice_Mobs[13])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[13])*4)+strmobinfo(7,.Novice_Mobs[13])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[13]), .Novice_Mobs[13], 1, "#HH_CONTROLLER01::OnNovice13"; end;
OnNovice14:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[14])*4)+strmobinfo(7,.Novice_Mobs[14])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[14])*4)+strmobinfo(7,.Novice_Mobs[14])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[14]), .Novice_Mobs[14], 1, "#HH_CONTROLLER01::OnNovice14"; end;
OnNovice15:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[15])*4)+strmobinfo(7,.Novice_Mobs[15])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[15])*4)+strmobinfo(7,.Novice_Mobs[15])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[15]), .Novice_Mobs[15], 1, "#HH_CONTROLLER01::OnNovice15"; end;
OnNovice16:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[16])*4)+strmobinfo(7,.Novice_Mobs[16])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[16])*4)+strmobinfo(7,.Novice_Mobs[16])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[16]), .Novice_Mobs[16], 1, "#HH_CONTROLLER01::OnNovice16"; end;
OnNovice17:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[17])*4)+strmobinfo(7,.Novice_Mobs[17])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[17])*4)+strmobinfo(7,.Novice_Mobs[17])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[17]), .Novice_Mobs[17], 1, "#HH_CONTROLLER01::OnNovice17"; end;
OnNovice18:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[18])*4)+strmobinfo(7,.Novice_Mobs[18])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[18])*4)+strmobinfo(7,.Novice_Mobs[18])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[18]), .Novice_Mobs[18], 1, "#HH_CONTROLLER01::OnNovice18"; end;
OnNovice19:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[19])*4)+strmobinfo(7,.Novice_Mobs[19])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[19])*4)+strmobinfo(7,.Novice_Mobs[19])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[19]), .Novice_Mobs[19], 1, "#HH_CONTROLLER01::OnNovice19"; end;
OnNovice20:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[20])*4)+strmobinfo(7,.Novice_Mobs[20])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Novice_Mobs[20])*4)+strmobinfo(7,.Novice_Mobs[20])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 1, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@No", 20, 20, 220, 220, strmobinfo(1, .Novice_Mobs[20]), .Novice_Mobs[20], 1, "#HH_CONTROLLER01::OnNovice20"; end;
+
+
OnInterm0:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[0])*4)+strmobinfo(7,.Interm_Mobs[0])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[0]), .Interm_Mobs[0], 1, "#HH_CONTROLLER01::OnInterm0"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[0])*4)+strmobinfo(7,.Interm_Mobs[0])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[0]), .Interm_Mobs[0], 1, "#HH_CONTROLLER01::OnInterm0"; end;
OnInterm1:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[1])*4)+strmobinfo(7,.Interm_Mobs[1])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[1]), .Interm_Mobs[1], 1, "#HH_CONTROLLER01::OnInterm1"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[1])*4)+strmobinfo(7,.Interm_Mobs[1])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[1]), .Interm_Mobs[1], 1, "#HH_CONTROLLER01::OnInterm1"; end;
OnInterm2:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[2])*4)+strmobinfo(7,.Interm_Mobs[2])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[2]), .Interm_Mobs[2], 1, "#HH_CONTROLLER01::OnInterm2"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[2])*4)+strmobinfo(7,.Interm_Mobs[2])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[2]), .Interm_Mobs[2], 1, "#HH_CONTROLLER01::OnInterm2"; end;
OnInterm3:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[3])*4)+strmobinfo(7,.Interm_Mobs[3])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[3]), .Interm_Mobs[3], 1, "#HH_CONTROLLER01::OnInterm3"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[3])*4)+strmobinfo(7,.Interm_Mobs[3])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[3]), .Interm_Mobs[3], 1, "#HH_CONTROLLER01::OnInterm3"; end;
OnInterm4:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[4])*4)+strmobinfo(7,.Interm_Mobs[4])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[4]), .Interm_Mobs[4], 1, "#HH_CONTROLLER01::OnInterm4"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[4])*4)+strmobinfo(7,.Interm_Mobs[4])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[4]), .Interm_Mobs[4], 1, "#HH_CONTROLLER01::OnInterm4"; end;
OnInterm5:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[5])*4)+strmobinfo(7,.Interm_Mobs[5])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[5]), .Interm_Mobs[5], 1, "#HH_CONTROLLER01::OnInterm5"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[5])*4)+strmobinfo(7,.Interm_Mobs[5])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[5]), .Interm_Mobs[5], 1, "#HH_CONTROLLER01::OnInterm5"; end;
OnInterm6:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[6])*4)+strmobinfo(7,.Interm_Mobs[6])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[6]), .Interm_Mobs[6], 1, "#HH_CONTROLLER01::OnInterm6"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[6])*4)+strmobinfo(7,.Interm_Mobs[6])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[6]), .Interm_Mobs[6], 1, "#HH_CONTROLLER01::OnInterm6"; end;
OnInterm7:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[7])*4)+strmobinfo(7,.Interm_Mobs[7])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[7]), .Interm_Mobs[7], 1, "#HH_CONTROLLER01::OnInterm7"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[7])*4)+strmobinfo(7,.Interm_Mobs[7])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[7]), .Interm_Mobs[7], 1, "#HH_CONTROLLER01::OnInterm7"; end;
OnInterm8:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[8])*4)+strmobinfo(7,.Interm_Mobs[8])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[8]), .Interm_Mobs[8], 1, "#HH_CONTROLLER01::OnInterm8"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[8])*4)+strmobinfo(7,.Interm_Mobs[8])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[8]), .Interm_Mobs[8], 1, "#HH_CONTROLLER01::OnInterm8"; end;
OnInterm9:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[9])*4)+strmobinfo(7,.Interm_Mobs[9])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[9]), .Interm_Mobs[9], 1, "#HH_CONTROLLER01::OnInterm9"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[9])*4)+strmobinfo(7,.Interm_Mobs[9])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[9]), .Interm_Mobs[9], 1, "#HH_CONTROLLER01::OnInterm9"; end;
OnInterm10:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[10])*4)+strmobinfo(7,.Interm_Mobs[10])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[10]), .Interm_Mobs[10], 1, "#HH_CONTROLLER01::OnInterm10"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[10])*4)+strmobinfo(7,.Interm_Mobs[10])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[10]), .Interm_Mobs[10], 1, "#HH_CONTROLLER01::OnInterm10"; end;
OnInterm11:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[11])*4)+strmobinfo(7,.Interm_Mobs[11])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[11]), .Interm_Mobs[11], 1, "#HH_CONTROLLER01::OnInterm11"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[11])*4)+strmobinfo(7,.Interm_Mobs[11])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[11]), .Interm_Mobs[11], 1, "#HH_CONTROLLER01::OnInterm11"; end;
OnInterm12:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[12])*4)+strmobinfo(7,.Interm_Mobs[12])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[12]), .Interm_Mobs[12], 1, "#HH_CONTROLLER01::OnInterm12"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[12])*4)+strmobinfo(7,.Interm_Mobs[12])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[12]), .Interm_Mobs[12], 1, "#HH_CONTROLLER01::OnInterm12"; end;
OnInterm13:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[13])*4)+strmobinfo(7,.Interm_Mobs[13])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[13]), .Interm_Mobs[13], 1, "#HH_CONTROLLER01::OnInterm13"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[13])*4)+strmobinfo(7,.Interm_Mobs[13])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[13]), .Interm_Mobs[13], 1, "#HH_CONTROLLER01::OnInterm13"; end;
OnInterm14:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[14])*4)+strmobinfo(7,.Interm_Mobs[14])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[14]), .Interm_Mobs[14], 1, "#HH_CONTROLLER01::OnInterm14"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[14])*4)+strmobinfo(7,.Interm_Mobs[14])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[14]), .Interm_Mobs[14], 1, "#HH_CONTROLLER01::OnInterm14"; end;
OnInterm15:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[15])*4)+strmobinfo(7,.Interm_Mobs[15])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[15]), .Interm_Mobs[15], 1, "#HH_CONTROLLER01::OnInterm15"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[15])*4)+strmobinfo(7,.Interm_Mobs[15])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[15]), .Interm_Mobs[15], 1, "#HH_CONTROLLER01::OnInterm15"; end;
OnInterm16:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[16])*4)+strmobinfo(7,.Interm_Mobs[16])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[16]), .Interm_Mobs[16], 1, "#HH_CONTROLLER01::OnInterm16"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[16])*4)+strmobinfo(7,.Interm_Mobs[16])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[16]), .Interm_Mobs[16], 1, "#HH_CONTROLLER01::OnInterm16"; end;
OnInterm17:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[17])*4)+strmobinfo(7,.Interm_Mobs[17])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[17]), .Interm_Mobs[17], 1, "#HH_CONTROLLER01::OnInterm17"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[17])*4)+strmobinfo(7,.Interm_Mobs[17])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[17]), .Interm_Mobs[17], 1, "#HH_CONTROLLER01::OnInterm17"; end;
OnInterm18:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[18])*4)+strmobinfo(7,.Interm_Mobs[18])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[18]), .Interm_Mobs[18], 1, "#HH_CONTROLLER01::OnInterm18"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[18])*4)+strmobinfo(7,.Interm_Mobs[18])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[18]), .Interm_Mobs[18], 1, "#HH_CONTROLLER01::OnInterm18"; end;
OnInterm19:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[19])*4)+strmobinfo(7,.Interm_Mobs[19])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
- areamonster "018-2-2@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[19]), .Interm_Mobs[19], 1, "#HH_CONTROLLER01::OnInterm19"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Interm_Mobs[19])*4)+strmobinfo(7,.Interm_Mobs[19])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 2, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@In", 20, 20, 220, 220, strmobinfo(1, .Interm_Mobs[19]), .Interm_Mobs[19], 1, "#HH_CONTROLLER01::OnInterm19"; end;
+
+
OnAdvanc0:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[0])*4)+strmobinfo(7,.Advanc_Mobs[0])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[0])*4)+strmobinfo(7,.Advanc_Mobs[0])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[0]), .Advanc_Mobs[0], 1, "#HH_CONTROLLER01::OnAdvanc0"; end;
OnAdvanc1:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[1])*4)+strmobinfo(7,.Advanc_Mobs[1])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[1])*4)+strmobinfo(7,.Advanc_Mobs[1])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[1]), .Advanc_Mobs[1], 1, "#HH_CONTROLLER01::OnAdvanc1"; end;
OnAdvanc2:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[2])*4)+strmobinfo(7,.Advanc_Mobs[2])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[2])*4)+strmobinfo(7,.Advanc_Mobs[2])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[2]), .Advanc_Mobs[2], 1, "#HH_CONTROLLER01::OnAdvanc2"; end;
OnAdvanc3:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[3])*4)+strmobinfo(7,.Advanc_Mobs[3])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[3])*4)+strmobinfo(7,.Advanc_Mobs[3])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[3]), .Advanc_Mobs[3], 1, "#HH_CONTROLLER01::OnAdvanc3"; end;
OnAdvanc4:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[4])*4)+strmobinfo(7,.Advanc_Mobs[4])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[4])*4)+strmobinfo(7,.Advanc_Mobs[4])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[4]), .Advanc_Mobs[4], 1, "#HH_CONTROLLER01::OnAdvanc4"; end;
OnAdvanc5:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[5])*4)+strmobinfo(7,.Advanc_Mobs[5])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[5])*4)+strmobinfo(7,.Advanc_Mobs[5])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[5]), .Advanc_Mobs[5], 1, "#HH_CONTROLLER01::OnAdvanc5"; end;
OnAdvanc6:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[6])*4)+strmobinfo(7,.Advanc_Mobs[6])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[6])*4)+strmobinfo(7,.Advanc_Mobs[6])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[6]), .Advanc_Mobs[6], 1, "#HH_CONTROLLER01::OnAdvanc6"; end;
OnAdvanc7:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[7])*4)+strmobinfo(7,.Advanc_Mobs[7])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[7])*4)+strmobinfo(7,.Advanc_Mobs[7])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[7]), .Advanc_Mobs[7], 1, "#HH_CONTROLLER01::OnAdvanc7"; end;
OnAdvanc8:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[8])*4)+strmobinfo(7,.Advanc_Mobs[8])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[8])*4)+strmobinfo(7,.Advanc_Mobs[8])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[8]), .Advanc_Mobs[8], 1, "#HH_CONTROLLER01::OnAdvanc8"; end;
OnAdvanc9:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[9])*4)+strmobinfo(7,.Advanc_Mobs[9])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[9])*4)+strmobinfo(7,.Advanc_Mobs[9])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[9]), .Advanc_Mobs[9], 1, "#HH_CONTROLLER01::OnAdvanc9"; end;
OnAdvanc10:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[10])*4)+strmobinfo(7,.Advanc_Mobs[10])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[10])*4)+strmobinfo(7,.Advanc_Mobs[10])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[10]), .Advanc_Mobs[10], 1, "#HH_CONTROLLER01::OnAdvanc10"; end;
OnAdvanc11:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[11])*4)+strmobinfo(7,.Advanc_Mobs[11])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[11])*4)+strmobinfo(7,.Advanc_Mobs[11])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[11]), .Advanc_Mobs[11], 1, "#HH_CONTROLLER01::OnAdvanc11"; end;
OnAdvanc12:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[12])*4)+strmobinfo(7,.Advanc_Mobs[12])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[12])*4)+strmobinfo(7,.Advanc_Mobs[12])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[12]), .Advanc_Mobs[12], 1, "#HH_CONTROLLER01::OnAdvanc12"; end;
OnAdvanc13:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[13])*4)+strmobinfo(7,.Advanc_Mobs[13])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[13])*4)+strmobinfo(7,.Advanc_Mobs[13])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[13]), .Advanc_Mobs[13], 1, "#HH_CONTROLLER01::OnAdvanc13"; end;
OnAdvanc14:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[14])*4)+strmobinfo(7,.Advanc_Mobs[14])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[14])*4)+strmobinfo(7,.Advanc_Mobs[14])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[14]), .Advanc_Mobs[14], 1, "#HH_CONTROLLER01::OnAdvanc14"; end;
OnAdvanc15:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[15])*4)+strmobinfo(7,.Advanc_Mobs[15])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[15])*4)+strmobinfo(7,.Advanc_Mobs[15])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[15]), .Advanc_Mobs[15], 1, "#HH_CONTROLLER01::OnAdvanc15"; end;
OnAdvanc16:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[16])*4)+strmobinfo(7,.Advanc_Mobs[16])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[16])*4)+strmobinfo(7,.Advanc_Mobs[16])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[16]), .Advanc_Mobs[16], 1, "#HH_CONTROLLER01::OnAdvanc16"; end;
OnAdvanc17:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[17])*4)+strmobinfo(7,.Advanc_Mobs[17])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Advanc_Mobs[17])*4)+strmobinfo(7,.Advanc_Mobs[17])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 4, .@m$, .@x, .@y);}
+ }
areamonster "018-2-2@Ad", 20, 20, 220, 220, strmobinfo(1, .Advanc_Mobs[17]), .Advanc_Mobs[17], 1, "#HH_CONTROLLER01::OnAdvanc17"; end;
+
+
OnExpert0:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[0])*4)+strmobinfo(7,.Expert_Mobs[0])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[0]), .Expert_Mobs[0], 1, "#HH_CONTROLLER01::OnExpert0"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[0])*4)+strmobinfo(7,.Expert_Mobs[0])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[0]), .Expert_Mobs[0], 1, "#HH_CONTROLLER01::OnExpert0"; end;
OnExpert1:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[1])*4)+strmobinfo(7,.Expert_Mobs[1])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[1]), .Expert_Mobs[1], 1, "#HH_CONTROLLER01::OnExpert1"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[1])*4)+strmobinfo(7,.Expert_Mobs[1])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[1]), .Expert_Mobs[1], 1, "#HH_CONTROLLER01::OnExpert1"; end;
OnExpert2:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[2])*4)+strmobinfo(7,.Expert_Mobs[2])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[2]), .Expert_Mobs[2], 1, "#HH_CONTROLLER01::OnExpert2"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[2])*4)+strmobinfo(7,.Expert_Mobs[2])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[2]), .Expert_Mobs[2], 1, "#HH_CONTROLLER01::OnExpert2"; end;
OnExpert3:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[3])*4)+strmobinfo(7,.Expert_Mobs[3])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[3]), .Expert_Mobs[3], 1, "#HH_CONTROLLER01::OnExpert3"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[3])*4)+strmobinfo(7,.Expert_Mobs[3])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[3]), .Expert_Mobs[3], 1, "#HH_CONTROLLER01::OnExpert3"; end;
OnExpert4:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[4])*4)+strmobinfo(7,.Expert_Mobs[4])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[4]), .Expert_Mobs[4], 1, "#HH_CONTROLLER01::OnExpert4"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[4])*4)+strmobinfo(7,.Expert_Mobs[4])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[4]), .Expert_Mobs[4], 1, "#HH_CONTROLLER01::OnExpert4"; end;
OnExpert5:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[5])*4)+strmobinfo(7,.Expert_Mobs[5])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[5]), .Expert_Mobs[5], 1, "#HH_CONTROLLER01::OnExpert5"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[5])*4)+strmobinfo(7,.Expert_Mobs[5])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[5]), .Expert_Mobs[5], 1, "#HH_CONTROLLER01::OnExpert5"; end;
OnExpert6:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[6])*4)+strmobinfo(7,.Expert_Mobs[6])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[6]), .Expert_Mobs[6], 1, "#HH_CONTROLLER01::OnExpert6"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[6])*4)+strmobinfo(7,.Expert_Mobs[6])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[6]), .Expert_Mobs[6], 1, "#HH_CONTROLLER01::OnExpert6"; end;
OnExpert7:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[7])*4)+strmobinfo(7,.Expert_Mobs[7])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[7]), .Expert_Mobs[7], 1, "#HH_CONTROLLER01::OnExpert7"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[7])*4)+strmobinfo(7,.Expert_Mobs[7])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[7]), .Expert_Mobs[7], 1, "#HH_CONTROLLER01::OnExpert7"; end;
OnExpert8:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[8])*4)+strmobinfo(7,.Expert_Mobs[8])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[8]), .Expert_Mobs[8], 1, "#HH_CONTROLLER01::OnExpert8"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[8])*4)+strmobinfo(7,.Expert_Mobs[8])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[8]), .Expert_Mobs[8], 1, "#HH_CONTROLLER01::OnExpert8"; end;
OnExpert9:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[9])*4)+strmobinfo(7,.Expert_Mobs[9])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[9]), .Expert_Mobs[9], 1, "#HH_CONTROLLER01::OnExpert9"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[9])*4)+strmobinfo(7,.Expert_Mobs[9])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[9]), .Expert_Mobs[9], 1, "#HH_CONTROLLER01::OnExpert9"; end;
OnExpert10:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[10])*4)+strmobinfo(7,.Expert_Mobs[10])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[10]), .Expert_Mobs[10], 1, "#HH_CONTROLLER01::OnExpert10"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[10])*4)+strmobinfo(7,.Expert_Mobs[10])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[10]), .Expert_Mobs[10], 1, "#HH_CONTROLLER01::OnExpert10"; end;
OnExpert11:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[11])*4)+strmobinfo(7,.Expert_Mobs[11])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[11]), .Expert_Mobs[11], 1, "#HH_CONTROLLER01::OnExpert11"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[11])*4)+strmobinfo(7,.Expert_Mobs[11])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[11]), .Expert_Mobs[11], 1, "#HH_CONTROLLER01::OnExpert11"; end;
OnExpert12:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[12])*4)+strmobinfo(7,.Expert_Mobs[12])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[12]), .Expert_Mobs[12], 1, "#HH_CONTROLLER01::OnExpert12"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[12])*4)+strmobinfo(7,.Expert_Mobs[12])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[12]), .Expert_Mobs[12], 1, "#HH_CONTROLLER01::OnExpert12"; end;
OnExpert13:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[13])*4)+strmobinfo(7,.Expert_Mobs[13])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[13]), .Expert_Mobs[13], 1, "#HH_CONTROLLER01::OnExpert13"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[13])*4)+strmobinfo(7,.Expert_Mobs[13])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[13]), .Expert_Mobs[13], 1, "#HH_CONTROLLER01::OnExpert13"; end;
OnExpert14:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[14])*4)+strmobinfo(7,.Expert_Mobs[14])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
- areamonster "018-2-2@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[14]), .Expert_Mobs[14], 1, "#HH_CONTROLLER01::OnExpert14"; end;
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Expert_Mobs[14])*4)+strmobinfo(7,.Expert_Mobs[14])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 8, .@m$, .@x, .@y);}
+ }
+ areamonster "018-2-3@Ex", 20, 20, 220, 220, strmobinfo(1, .Expert_Mobs[14]), .Expert_Mobs[14], 1, "#HH_CONTROLLER01::OnExpert14"; end;
+
+
OnMaster0:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[0])*4)+strmobinfo(7,.Master_Mobs[0])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[0])*4)+strmobinfo(7,.Master_Mobs[0])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[0]), .Master_Mobs[0], 1, "#HH_CONTROLLER01::OnMaster0"; end;
OnMaster1:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[1])*4)+strmobinfo(7,.Master_Mobs[1])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[1])*4)+strmobinfo(7,.Master_Mobs[1])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[1]), .Master_Mobs[1], 1, "#HH_CONTROLLER01::OnMaster1"; end;
OnMaster2:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[2])*4)+strmobinfo(7,.Master_Mobs[2])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[2])*4)+strmobinfo(7,.Master_Mobs[2])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[2]), .Master_Mobs[2], 1, "#HH_CONTROLLER01::OnMaster2"; end;
OnMaster3:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[3])*4)+strmobinfo(7,.Master_Mobs[3])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[3])*4)+strmobinfo(7,.Master_Mobs[3])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[3]), .Master_Mobs[3], 1, "#HH_CONTROLLER01::OnMaster3"; end;
OnMaster4:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[4])*4)+strmobinfo(7,.Master_Mobs[4])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[4])*4)+strmobinfo(7,.Master_Mobs[4])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[4]), .Master_Mobs[4], 1, "#HH_CONTROLLER01::OnMaster4"; end;
OnMaster5:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[5])*4)+strmobinfo(7,.Master_Mobs[5])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[5])*4)+strmobinfo(7,.Master_Mobs[5])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[5]), .Master_Mobs[5], 1, "#HH_CONTROLLER01::OnMaster5"; end;
OnMaster6:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[6])*4)+strmobinfo(7,.Master_Mobs[6])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[6])*4)+strmobinfo(7,.Master_Mobs[6])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[6]), .Master_Mobs[6], 1, "#HH_CONTROLLER01::OnMaster6"; end;
OnMaster7:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[7])*4)+strmobinfo(7,.Master_Mobs[7])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[7])*4)+strmobinfo(7,.Master_Mobs[7])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[7]), .Master_Mobs[7], 1, "#HH_CONTROLLER01::OnMaster7"; end;
OnMaster8:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[8])*4)+strmobinfo(7,.Master_Mobs[8])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[8])*4)+strmobinfo(7,.Master_Mobs[8])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[8]), .Master_Mobs[8], 1, "#HH_CONTROLLER01::OnMaster8"; end;
OnMaster9:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[9])*4)+strmobinfo(7,.Master_Mobs[9])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[9])*4)+strmobinfo(7,.Master_Mobs[9])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[9]), .Master_Mobs[9], 1, "#HH_CONTROLLER01::OnMaster9"; end;
OnMaster10:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[10])*4)+strmobinfo(7,.Master_Mobs[10])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[10])*4)+strmobinfo(7,.Master_Mobs[10])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[10]), .Master_Mobs[10], 1, "#HH_CONTROLLER01::OnMaster10"; end;
OnMaster11:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[11])*4)+strmobinfo(7,.Master_Mobs[11])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[11])*4)+strmobinfo(7,.Master_Mobs[11])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[11]), .Master_Mobs[11], 1, "#HH_CONTROLLER01::OnMaster11"; end;
OnMaster12:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[12])*4)+strmobinfo(7,.Master_Mobs[12])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[12])*4)+strmobinfo(7,.Master_Mobs[12])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[12]), .Master_Mobs[12], 1, "#HH_CONTROLLER01::OnMaster12"; end;
OnMaster13:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[13])*4)+strmobinfo(7,.Master_Mobs[13])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[13])*4)+strmobinfo(7,.Master_Mobs[13])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[13]), .Master_Mobs[13], 1, "#HH_CONTROLLER01::OnMaster13"; end;
OnMaster14:
- if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[14])*4)+strmobinfo(7,.Master_Mobs[14])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ if (playerattached()) {
+ if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.Master_Mobs[14])*4)+strmobinfo(7,.Master_Mobs[14])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, 16, .@m$, .@x, .@y);}
+ }
areamonster "018-2-5@Ma", 20, 20, 220, 220, strmobinfo(1, .Master_Mobs[14]), .Master_Mobs[14], 1, "#HH_CONTROLLER01::OnMaster14"; end;
}
/*python
-df=[('Novice', 21, 1),
- ('Interm', 20, 2),
- ('Advanc', 18, 4),
- ('Expert', 15, 8),
- ('Master', 15, 16)]
+# df (name, mobs, reward, mapid)
+df=[('Novice', 21, 1, 2),
+ ('Interm', 20, 2, 3),
+ ('Advanc', 18, 4, 2),
+ ('Expert', 15, 8, 3),
+ ('Master', 15, 16,5)]
for a in df:
+ print("\n")
i=0
while (i < a[1]):
print('On%s%d:' % (a[0], i))
- print(' if (rand(0, 2000) <= readparam(Luk)+(strmobinfo(3,.%s_Mobs[%d])*4)+strmobinfo(7,.%s_Mobs[%d])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, %s, .@m$, .@x, .@y);}' % (a[0], i, a[0], i, a[2]))
- print(' areamonster "018-2-2@%s", 20, 20, 220, 220, strmobinfo(1, .%s_Mobs[%d]), .%s_Mobs[%d], 1, "#HH_CONTROLLER01::On%s%d"; end;' % (a[0][:2],a[0],i,a[0],i,a[0],i))
+ print(' if (playerattached()) {')
+ print(' if (rand2(0, 2000) <= readparam(Luk)+(strmobinfo(3,.%s_Mobs[%d])*4)+strmobinfo(7,.%s_Mobs[%d])) {getmapxy(.@m$, .@x, .@y, 0); makeitem(HeroCoin, %s, .@m$, .@x, .@y);}' % (a[0], i, a[0], i, a[2]))
+ print(' }')
+ print(' areamonster "018-2-%d@%s", 20, 20, 220, 220, strmobinfo(1, .%s_Mobs[%d]), .%s_Mobs[%d], 1, "#HH_CONTROLLER01::On%s%d"; end;' % (a[3], a[0][:2],a[0],i,a[0],i,a[0],i))
i+=1
*/
diff --git a/npc/018-6-0/_import.txt b/npc/018-6-0/_import.txt
new file mode 100644
index 000000000..45be6bdab
--- /dev/null
+++ b/npc/018-6-0/_import.txt
@@ -0,0 +1,2 @@
+// Map 018-6-0: Sanctuary - Forgotten Chamber
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
diff --git a/npc/018-6-1/_import.txt b/npc/018-6-1/_import.txt
new file mode 100644
index 000000000..de446a263
--- /dev/null
+++ b/npc/018-6-1/_import.txt
@@ -0,0 +1,4 @@
+// Map 018-6-1: Elenium Mines
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/018-6-1/_mobs.txt",
+"npc/018-6-1/_warps.txt",
diff --git a/npc/018-6-1/_mobs.txt b/npc/018-6-1/_mobs.txt
new file mode 100644
index 000000000..fd07526ca
--- /dev/null
+++ b/npc/018-6-1/_mobs.txt
@@ -0,0 +1,16 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 018-6-1: Elenium Mines mobs
+018-6-1,40,49,7,8 monster Big Elenium Bif 1228,5,450000,45000
+018-6-1,95,51,7,8 monster Big Elenium Bif 1228,5,450000,45000
+018-6-1,145,83,6,5 monster Medium Elenium Bif 1227,5,400000,45000
+018-6-1,62,86,6,5 monster Medium Elenium Bif 1227,5,400000,45000
+018-6-1,65,130,6,5 monster Medium Elenium Bif 1227,5,400000,45000
+018-6-1,125,158,6,5 monster Small Elenium Bif 1226,4,300000,45000
+018-6-1,129,183,6,5 monster Small Elenium Bif 1226,4,300000,45000
+018-6-1,34,181,5,5 monster Small Elenium Bif 1226,4,300000,45000
+018-6-1,80,172,54,25 monster Black Slime 1178,16,30000,15000
+018-6-1,89,167,54,25 monster Dark Lizard 1051,8,30000,15000
+018-6-1,96,103,56,29 monster Black Scorpion 1074,18,30000,15000
+018-6-1,101,105,54,25 monster Mountain Snake 1123,10,30000,15000
+018-6-1,70,45,44,25 monster Wicked Mushroom 1176,14,30000,15000
+018-6-1,68,45,31,21 monster Archant 1026,7,30000,15000
diff --git a/npc/018-6-1/_warps.txt b/npc/018-6-1/_warps.txt
new file mode 100644
index 000000000..dda336877
--- /dev/null
+++ b/npc/018-6-1/_warps.txt
@@ -0,0 +1,3 @@
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+// Map 018-6-1: Elenium Mines warps
+018-6-1,80,200,0 warp #018-6-1_80_200 0,0,017-1,32,45
diff --git a/npc/019-1/well.txt b/npc/019-1/well.txt
index 6f90d5fb7..6839eae0a 100644
--- a/npc/019-1/well.txt
+++ b/npc/019-1/well.txt
@@ -144,6 +144,7 @@ L_Bottle:
}
inventoryplace IcedBottle, .@count, BottleOfWoodlandWater, .@count;
+ delitem EmptyBottle, .@count;
// Calculate how many iced bottles you'll get
.@iced=0;
diff --git a/npc/020-3/mede.txt b/npc/020-3/mede.txt
index d35e7624d..52a3c5e79 100644
--- a/npc/020-3/mede.txt
+++ b/npc/020-3/mede.txt
@@ -38,10 +38,7 @@ L_ResetStats:
mesq l("Status point reset can't be undone. Do you really want this?");
L_ConfirmReset:
- if (BaseLevel <= 10)
- ConfirmStatusReset(0);
- else
- ConfirmStatusReset();
+ ConfirmStatusReset();
goto L_Quit;
L_MonsterPot:
diff --git a/npc/020-5/bracco.txt b/npc/020-5/bracco.txt
index 9452de333..f30bc7fd9 100644
--- a/npc/020-5/bracco.txt
+++ b/npc/020-5/bracco.txt
@@ -14,26 +14,22 @@
.@index=getarg(0);
.@price=getarg(1);
+
+ // Confirmation
mesn;
mesc l("Really melt down your @@? It'll cost you @@ GP. This action cannot be undone!", getinvindexlink(.@index), .@price), 1;
next;
if (askyesno() == ASK_NO || Zeny < .@price)
return;
- //failedremovecardsindex .@index, 0; // TODO: Fix this and upgrade server
- delinventorylist();
- getinventorylist();
- .@item=@inventorylist_id[.@index];
-
- if (.@item <= 0) {
- Exception(l("Error translating item ID @@ to @@ (Bracco, idx, id)", .@index, .@item), RB_DEFAULT|RB_SPEECH|RB_ISFATAL);
- }
+ // Report it was done
+ mesc l("@@ melt down your @@...", .name$, getinvindexlink(.@index));
- delitem .@item, 1;
+ // Effective: delete item and GP
+ delitemidx .@index, 1;
Zeny-=.@price;
- mesc l("@@ melt down your @@...", .name$, getinvindexlink(.@index));
- // TODO: Inventoryplace
+ // TODO: Inventoryplace.
// Add Items (if inventory is full, your fault and not mine)
for (.@i=2;.@i < getargcount(); .@i++) {
if (getarg(.@i+1)) {// It may be zero
diff --git a/npc/_import.txt b/npc/_import.txt
index d568e0aaf..c877bae5d 100644
--- a/npc/_import.txt
+++ b/npc/_import.txt
@@ -126,6 +126,8 @@
@include "npc/018-5-3/_import.txt"
@include "npc/018-5-boss/_import.txt"
@include "npc/018-5/_import.txt"
+@include "npc/018-6-0/_import.txt"
+@include "npc/018-6-1/_import.txt"
@include "npc/019-1-1/_import.txt"
@include "npc/019-1/_import.txt"
@include "npc/019-2/_import.txt"
diff --git a/npc/commands/debug.txt b/npc/commands/debug.txt
index 70d0d8392..5ffb409bb 100644
--- a/npc/commands/debug.txt
+++ b/npc/commands/debug.txt
@@ -7,6 +7,7 @@ function script GlobalDebugMenu {
resetstatus;
resetskill;
resetlvl 1;
+ dispbottom b("ALL PERMANENT STATUS BOOSTS WERE ALSO RESET");
dispbottom l("Reset done!");
if (getarg(0,0) == 3) {
closedialog;
diff --git a/npc/commands/grantpower.txt b/npc/commands/grantpower.txt
index ac48c10b7..3ce37e47b 100644
--- a/npc/commands/grantpower.txt
+++ b/npc/commands/grantpower.txt
@@ -22,7 +22,7 @@ OnCall:
}
// Player is not attached
- .@id = getcharid(0, .@request$);
+ .@id = getcharid(3, .@request$);
if (!.@id) {
Exception("Player not found.", RB_ISFATAL|RB_DISPBOTTOM);
}
@@ -43,7 +43,7 @@ OnCall:
rif(countitem(AegisShield), l("Aegis Shield")), AegisShield,
l("Abort"), 0;
mes "";
- .@ori=getcharid(0);
+ .@ori=getcharid(3);
.@ite=@menuret;
if (!.@ite)
close;
diff --git a/npc/craft/recipes.txt b/npc/craft/recipes.txt
index 65409aee8..98c2c2849 100644
--- a/npc/craft/recipes.txt
+++ b/npc/craft/recipes.txt
@@ -276,22 +276,22 @@ function readCrafting {
40, WoodenLog,
60, ManaPiouFeathers,
8, FluoPowder,
- 2, GemPowder);
+ 1, GemPowder);
showRecipe(CraftApprenticeWand, ApprenticeWand,
60, WoodenLog,
90, ManaPiouFeathers,
12, FluoPowder,
- 3, GemPowder);
+ 1, GemPowder);
showRecipe(CraftLeaderWand, LeaderWand,
100, WoodenLog,
120, ManaPiouFeathers,
15, FluoPowder,
- 5, GemPowder);
+ 1, GemPowder);
showRecipe(CraftLegendaryWand, LegendaryWand,
110, WoodenLog,
3, GoldenApple,
20, FluoPowder,
- 7, GemPowder);
+ 1, GemPowder);
next;
// Firestaff Weapons: Lead + Titanium
mesc "----------"+l("Fire Staffs Recipes")+"----------", 2;
diff --git a/npc/craft/smith.txt b/npc/craft/smith.txt
index fa866f7eb..9d0739926 100644
--- a/npc/craft/smith.txt
+++ b/npc/craft/smith.txt
@@ -45,9 +45,12 @@ function script SmithSystem {
// Player craft item
usecraft .@craft;
.@it=getcraftcode(.@entry);
- // Mark the crafting in your score book (except dagger)
- if (.@it != Dagger)
- CRAFTING_SCORE+=1;
+
+ // Mark the crafting in your score variable
+ CRAFTING_SCORE_COMPLETE+=getiteminfo(.@it, ITEMINFO_ELV);
+ // Update your score book
+ CRAFTING_SCORE=(CRAFTING_SCORE_COMPLETE/40);
+
if (.scope == CRAFT_GUILD)
getitembound(.@it, 1, 2); // Create a guild-bound item
else
diff --git a/npc/functions/array.txt b/npc/functions/array.txt
index 1a106175e..161cedd0b 100644
--- a/npc/functions/array.txt
+++ b/npc/functions/array.txt
@@ -411,3 +411,25 @@ function script array_filter {
freeloop(false);
return .@count;
}
+
+// array_highest(<array>)
+// Returns the index of the highest value in <array>
+// NOTE: Array must be an INT array!
+
+function script array_highest {
+ .@size = getarraysize(getarg(0));
+ .@win=0;
+ .@idx=0;
+ freeloop(true);
+
+ for (.@i = getarrayindex(getarg(0)); .@i < .@size; ++.@i) {
+ if (getelementofarray(getarg(0), .@i) > .@win) {
+ .@win=getelementofarray(getarg(0), .@i);
+ .@idx=.@i;
+ }
+ }
+
+ freeloop(false);
+ return .@idx;
+}
+
diff --git a/npc/functions/clientversion.txt b/npc/functions/clientversion.txt
index 51e5eab84..94b37582f 100644
--- a/npc/functions/clientversion.txt
+++ b/npc/functions/clientversion.txt
@@ -579,6 +579,13 @@ function script clientupdater {
getitem GoldenGift, 1;
if (BaseLevel >= 75 && getq(TulimsharQuest_Eistein) >= 3)
getitem GraduationRobe, 1;
+ // Grant you Thief Skill Tier 4
+ if (THIEF_RANK >= 4) {
+ skill(MC_OVERCHARGE,1,0);
+ dispbottom l("You have learnt \"Barter\" in Thief Skills.");
+ }
+ // Update Crafting Score
+ CRAFTING_SCORE_COMPLETE=CRAFTING_SCORE*39;
}
// Test Server Updates
diff --git a/npc/functions/lockpicks.txt b/npc/functions/lockpicks.txt
index 88171c3dd..c8271ba3a 100644
--- a/npc/functions/lockpicks.txt
+++ b/npc/functions/lockpicks.txt
@@ -71,8 +71,8 @@ function script LockPicking {
l("Give up!"), 0;
if (!@menuret) {
- // 10% chance to save the lockpick
- if (rand(1,10) == 7)
+ // 25% chance to save the lockpick
+ if (rand2(1,4) == 2)
getitem Lockpicks, 1;
else
dispbottom l("The lockpick broke.");
@@ -92,8 +92,8 @@ function script LockPicking {
}
if (@pos >= .@d) {
- // 10% chance to save the lockpick
- if (rand(1,10) == 7)
+ // 20% chance to save the lockpick
+ if (rand2(1,5) == 3)
getitem Lockpicks, 1;
else
dispbottom l("The lockpick broke.");
diff --git a/npc/functions/main.txt b/npc/functions/main.txt
index e1b93fa46..b54401e02 100644
--- a/npc/functions/main.txt
+++ b/npc/functions/main.txt
@@ -330,6 +330,13 @@ function script gf_accid {
return .@value[0];
}
+// Get some char id, even if offline
+// ( Name )
+function script gf_charnameid {
+ .@nb = query_sql("SELECT char_id FROM `char` WHERE name='"+escape_sql(getarg(0))+"' LIMIT 2", .@value);
+ return .@value[0];
+}
+
// Get some char name from char ID, even if offline
// ( Name )
function script gf_charname {
diff --git a/npc/functions/politics.txt b/npc/functions/politics.txt
new file mode 100644
index 000000000..b4ddde37d
--- /dev/null
+++ b/npc/functions/politics.txt
@@ -0,0 +1,143 @@
+// TMW2 Script
+// Author:
+// Jesusalva
+// Description:
+// Central Town Political System Controller
+// Note: The office is NOT Mayor, we have from kings to mayors here and you're
+// not a citzen (yet). It'll be... I'll think in a name better than Minister.
+// Perhaps, Town Administrator.
+// NPCs:
+// Tulim -
+// Halin -
+// Hurns - Airlia
+// LoF -
+// Nival -
+// Frostia -
+// Variables:
+// $LOC_MAYOR$ - Stores the name of current Hurnscald Mayor
+// $LOC_MONEY - Total money reserves of Hurnscald
+// $LOC_TAX - How much in % is charged as taxes. (OnBuy income)
+// $LOC_EXPORT - Defines how much Hurnscald exports (weekly income)
+// $LOC_REPUTATION - Town reputation. Affects Max Tax and Weekly Income;
+// Note: Tax cannot exceed 10% ie 1000. Reputation must be between 0 and 100.
+//
+// "Temporary Arrays":
+// $LOC_CANDIDATE$ - Candidate for Office
+// $LOC_VOTES - Number of votes of Candidate
+
+// Proccess Taxes from purchases
+// PurchaseTaxes( Location )
+function script PurchaseTaxes {
+ .@tax=0;
+ for (.@i=0; .@i < getarraysize(@bought_nameid); .@i++) {
+ // Note: Some NPC might not
+ .@price=getiteminfo(@bought_nameid[.@i], ITEMINFO_BUYPRICE);
+ .@tax+=.@price*@bought_quantity[.@i];
+ }
+ .@loc$=strtoupper(getarg(0, LOCATION$));
+ .@vat=getd("$"+.@loc$+"_TAX");
+ .@tax=.@tax*.@vat/10000;
+ if (.@tax) {
+ debugmes "%s paid %d in taxes to %s prefecture!", strcharinfo(0), .@tax, .@loc$;
+ setd("$"+.@loc$+"_TAX", .@vat+.@tax);
+ }
+ return;
+}
+
+- script Politics NPC_HIDDEN,{
+
+OnSun0000:
+ // Weekly income
+ $TULIM_MONEY+=$TULIM_EXPORT*limit(0, $TULIM_REPUTATION, 100)/100;
+ $HALIN_MONEY+=$HALIN_EXPORT*limit(0, $HALIN_REPUTATION, 100)/100;
+ $HURNS_MONEY+=$HURNS_EXPORT*limit(0, $HURNS_REPUTATION, 100)/100;
+ $LOF_MONEY+=$LOF_EXPORT*limit(0, $LOF_REPUTATION, 100)/100;
+ $NIVAL_MONEY+=$NIVAL_EXPORT*limit(0, $NIVAL_REPUTATION, 100)/100;
+ $FROSTIA_MONEY+=$FROSTIA_EXPORT*limit(0, $FROSTIA_REPUTATION, 100)/100;
+
+ // Send salary to Town Administrators (20% from exports and 5GP/reputation)
+ .@tax=$TULIM_EXPORT*limit(0, $TULIM_REPUTATION, 100)/500;
+ .@tax+=$TULIM_REPUTATION*5;
+ .@tax=min($TULIM_MONEY, .@tax);
+ $TULIM_MONEY-=.@tax;
+ rodex_sendmail(gf_charnameid($TULIM_MAYOR$), "Tulimshar Townhall", "Term Income", "You've received the money for the term.", .@tax);
+
+ .@tax=$HALIN_EXPORT*limit(0, $HALIN_REPUTATION, 100)/500;
+ .@tax+=$HALIN_REPUTATION*5;
+ .@tax=min($HALIN_MONEY, .@tax);
+ $HALIN_MONEY-=.@tax;
+ rodex_sendmail(gf_charnameid($HALIN_MAYOR$), "Halinarzo Townhall", "Term Income", "You've received the money for the term.", .@tax);
+
+ .@tax=$HURNS_EXPORT*limit(0, $HURNS_REPUTATION, 100)/500;
+ .@tax+=$HURNS_REPUTATION*5;
+ .@tax=min($HURNS_MONEY, .@tax);
+ $HURNS_MONEY-=.@tax;
+ rodex_sendmail(gf_charnameid($HURNS_MAYOR$), "Hurnscald Townhall", "Term Income", "You've received the money for the term.", .@tax);
+
+ .@tax=$LOF_EXPORT*limit(0, $LOF_REPUTATION, 100)/500;
+ .@tax+=$LOF_REPUTATION*5;
+ .@tax=min($LOF_MONEY, .@tax);
+ $LOF_MONEY-=.@tax;
+ rodex_sendmail(gf_charnameid($LOF_MAYOR$), "LoF Townhall", "Term Income", "You've received the money for the term.", .@tax);
+
+ .@tax=$NIVAL_EXPORT*limit(0, $NIVAL_REPUTATION, 100)/500;
+ .@tax+=$NIVAL_REPUTATION*5;
+ .@tax=min($NIVAL_MONEY, .@tax);
+ $NIVAL_MONEY-=.@tax;
+ rodex_sendmail(gf_charnameid($NIVAL_MAYOR$), "Nivalis Townhall", "Term Income", "You've received the money for the term.", .@tax);
+
+ .@tax=$FROSTIA_EXPORT*limit(0, $FROSTIA_REPUTATION, 100)/500;
+ .@tax+=$FROSTIA_REPUTATION*5;
+ .@tax=min($FROSTIA_MONEY, .@tax);
+ $FROSTIA_MONEY-=.@tax;
+ rodex_sendmail(gf_charnameid($FROSTIA_MAYOR$), "Frostia Townhall", "Term Income", "You've received the money for the term.", .@tax);
+
+ // Conduct elections
+ .@w=array_highest($TULIM_VOTES);
+ if ($TULIM_CANDIDATE$[.@w] != "")
+ $TULIM_MAYOR$=$TULIM_CANDIDATE$[.@w];
+ deletearray($TULIM_CANDIDATE$);
+ deletearray($TULIM_VOTES);
+
+ .@w=array_highest($HALIN_VOTES);
+ if ($HALIN_CANDIDATE$[.@w] != "")
+ $HALIN_MAYOR$=$HALIN_CANDIDATE$[.@w];
+ deletearray($HALIN_CANDIDATE$);
+ deletearray($HALIN_VOTES);
+
+ .@w=array_highest($HURNS_VOTES);
+ if ($HURNS_CANDIDATE$[.@w] != "")
+ $HURNS_MAYOR$=$HURNS_CANDIDATE$[.@w];
+ deletearray($HURNS_CANDIDATE$);
+ deletearray($HURNS_VOTES);
+
+ .@w=array_highest($LOF_VOTES);
+ if ($LOF_CANDIDATE$[.@w] != "")
+ $LOF_MAYOR$=$LOF_CANDIDATE$[.@w];
+ deletearray($LOF_CANDIDATE$);
+ deletearray($LOF_VOTES);
+
+ .@w=array_highest($NIVAL_VOTES);
+ if ($NIVAL_CANDIDATE$[.@w] != "")
+ $NIVAL_MAYOR$=$NIVAL_CANDIDATE$[.@w];
+ deletearray($NIVAL_CANDIDATE$);
+ deletearray($NIVAL_VOTES);
+
+ .@w=array_highest($FROSTIA_VOTES);
+ if ($FROSTIA_CANDIDATE$[.@w] != "")
+ $FROSTIA_MAYOR$=$FROSTIA_CANDIDATE$[.@w];
+ deletearray($FROSTIA_CANDIDATE$);
+ deletearray($FROSTIA_VOTES);
+
+ // Notify new mayors of their victory
+ rodex_sendmail(gf_charnameid($TULIM_MAYOR$), "Tulimshar Townhall", "Election Victory", "You've been elected to the office!");
+ rodex_sendmail(gf_charnameid($HALIN_MAYOR$), "Halinarzo Townhall", "Election Victory", "You've been elected to the office!");
+ rodex_sendmail(gf_charnameid($HURNS_MAYOR$), "Hurnscald Townhall", "Election Victory", "You've been elected to the office!");
+ rodex_sendmail(gf_charnameid($LOF_MAYOR$), "LoF Townhall", "Election Victory", "You've been elected to the office!");
+ rodex_sendmail(gf_charnameid($NIVAL_MAYOR$), "Nivalis Townhall", "Election Victory", "You've been elected to the office!");
+ rodex_sendmail(gf_charnameid($FROSTIA_MAYOR$), "Frostia Townhall", "Election Victory", "You've been elected to the office!");
+
+ end;
+
+}
+
diff --git a/npc/functions/refine.txt b/npc/functions/refine.txt
index 1936b5542..48535f91d 100644
--- a/npc/functions/refine.txt
+++ b/npc/functions/refine.txt
@@ -24,6 +24,7 @@ function script refineMaster {
l("Nothing, thanks"), 0,
rif(getequipisequiped(EQI_HEAD_MID), l("My chestplate, @@", getequipname(EQI_HEAD_MID))), EQI_HEAD_MID,
rif(getequipisequiped(EQI_HAND_R), l("My weapon, @@", getequipname(EQI_HAND_R))), EQI_HAND_R,
+ rif(getequipisequiped(EQI_HAND_L), l("My shield, @@", getequipname(EQI_HAND_L))), EQI_HAND_L,
rif(getequipisequiped(EQI_HEAD_TOP), l("My helmet, @@", getequipname(EQI_HEAD_TOP))), EQI_HEAD_TOP,
l("Item break? Too dangerous! I don't want it!!"), 0;
@@ -53,7 +54,7 @@ function script refineMaster {
// Not all items are refinable
if (!getequipisenableref(.@it)) {
mesn;
- mesq l("Well, sorry, but only weapons and body armor can be refined.");
+ mesq l("Well, sorry, but only some items can be refined.");
mesq l("There may be some exceptions. Anyway, this item clearly cannot be refined.");
next;
return;
@@ -73,20 +74,21 @@ function script refineMaster {
switch (.@rlv) {
case 0:
case 1:
- .@rg=CopperIngot; break;
case 2:
case 3:
- .@rg=IronIngot; break;
+ .@rg=Wurtizite; break;
case 4:
case 5:
- .@rg=TitaniumIngot; break;
case 6:
case 7:
- .@rg=LeadIngot; break;
+ .@amount=((.@rlv-4)/2)+1;
+ .@rg=Graphene; break;
case 8:
- .@rg=Bloodstone; break;
+ case 9:
+ case 10:
default:
- .@rg=BlueManaPearl; break;
+ .@amount=((.@rlv-8)/2)+1;
+ .@rg=Arcanum; break;
}
mesn;
mesq l("This @@ is a nice stuff. I can refine it for @@ GP and @@ @@.", getitemlink(.@item), .@price, .@amount, getitemlink(.@rg));
@@ -151,8 +153,8 @@ function script refineMaster {
mesc l("Weapons: +8 attack, +8 magic attack");
mesc l("Armors: +3~5 defense");
next;
- // Perhaps the item has broken?
- } else if (rand2(100) < .@rlv) {
+ // Perhaps the item has broken? (~0.01% chance)
+ } else if (rand2(10000) <= 1) {
failedrefitem .@it;
mesc l("*CRASH*");
next;
@@ -162,7 +164,7 @@ function script refineMaster {
mesn;
mesq l("Well, you were warned. Do you have any other stuff for me?");
next;
- // Item is weakened.
+ // Item is weakened. (1% per refine level)
} else if (rand2(100) < .@rlv) {
downrefitem .@it, 1;
mesn;
diff --git a/npc/functions/resetstatus.txt b/npc/functions/resetstatus.txt
index c9744d901..e1d290499 100644
--- a/npc/functions/resetstatus.txt
+++ b/npc/functions/resetstatus.txt
@@ -5,6 +5,41 @@
// Description:
// Status Reset NPC utils
+// Reset status and return permanent bonuses
+// StatusResetReinvest( - )
+function script StatusResetReinvest {
+ // Compulsory check
+ inventoryplace NPCEyes, 6;
+
+ // Permanent boosts were now lost, return the fruits
+ if (STATUSUP_STR) {
+ getitem StrengthFruit, STATUSUP_STR;
+ STATUSUP_STR=0;
+ }
+ if (STATUSUP_AGI) {
+ getitem AgilityFruit, STATUSUP_AGI;
+ STATUSUP_AGI=0;
+ }
+ if (STATUSUP_VIT) {
+ getitem VitalityFruit, STATUSUP_VIT;
+ STATUSUP_VIT=0;
+ }
+ if (STATUSUP_INT) {
+ getitem IntelligenceFruit, STATUSUP_INT;
+ STATUSUP_INT=0;
+ }
+ if (STATUSUP_DEX) {
+ getitem DexterityFruit, STATUSUP_DEX;
+ STATUSUP_DEX=0;
+ }
+ if (STATUSUP_LUK) {
+ getitem LuckFruit, STATUSUP_LUK;
+ STATUSUP_LUK=0;
+ }
+ resetstatus();
+ return true;
+}
+
// Return wasSP on success, 0 on failure
// ConfirmReset( {price} )
function script ConfirmStatusReset {
@@ -16,6 +51,8 @@ function script ConfirmStatusReset {
if (getarg(0,-1) >= 0)
.@plush_count=getarg(0,-1);
+ mesc l("WARNING: Permanent boosts will return to their fruit form."), 1;
+
switch (select(lg("Yes, I am sure."),
lg("I need to think about it..."),
lg("I won't need it, thank you.")))
@@ -38,16 +75,17 @@ function script ConfirmStatusReset {
l("Thank you."),
l("Now stand still... It should not take much time...");
- // Delete the GP and THEN reset the status
- Zeny-=.@plush_count;
+ // Reset status have an inventorycheck, so we charge later.
.@wasSP = StatusPoint;
- resetstatus();
+ StatusResetReinvest();
+
+ // Nothing to do: Do not charge (eg. you just got the fruits back)
if (StatusPoint == .@wasSP) {
speech S_LAST_NEXT,
l("It seems that you have no status points to reset!"),
- l("But the money you brought was really awesome you know."),
l("Come back when you will really need me.");
} else {
+ Zeny-=.@plush_count;
speech S_LAST_NEXT,
l("Let's see... @@ of your status points have just been reset!", StatusPoint - .@wasSP),
l("Spend it wisely this time."),
diff --git a/npc/functions/siege.txt b/npc/functions/siege.txt
index e8f40b229..9be7a9e23 100644
--- a/npc/functions/siege.txt
+++ b/npc/functions/siege.txt
@@ -191,14 +191,18 @@ function script siege_check {
.@mb+=mobcount(.@m$, "#SiegeCtrl::OnColonelDeath");
.@mb+=mobcount(.@m$, "#SiegeCtrl::OnGeneralDeath");
- // Players failed, so reduce score in 1~10 (like Sergeant~General).
+ // Players failed, so reduce score in 1~5 (like Sergeant~General).
// In future, it could be inverse proportion (-9 for sergeant, -1 for general)
if (.@mb) {
if ($GAME_STORYLINE == 2)
- $MK_TEMPVAR-=rand2(1, 10);
+ $MK_TEMPVAR-=rand2(1, 5);
+
kamibroadcast("Players failed to defend the city!!");
debugmes "Number of boss grade monsters found: %d", .@mb;
$SIEGE_DIFFICULTY=max(1, ($SIEGE_DIFFICULTY/2));
+ // Lower the town reputation in 10%
+ .@var$="$"+MapToLoc(.@m$)+"_REPUTATION";
+ setd(.@var$, getd(.@var$)*9/10);
} else {
kamibroadcast("The city was defended with success! GG, everyone!");
$SIEGE_DIFFICULTY+=1;
diff --git a/npc/functions/soul_menhir.txt b/npc/functions/soul_menhir.txt
index 437e6d1e8..f44cc7b3b 100644
--- a/npc/functions/soul_menhir.txt
+++ b/npc/functions/soul_menhir.txt
@@ -102,6 +102,7 @@ L_Do_Save:
savepoint @map$, @x, @y;
specialeffect(4, SELF, getcharid(3));
} else {
+ EnterTown(MapToLoc(@map$));
dispbottom col(l("Your position is auto-saved when entering a town - use @ucp to change this behavior."), 1);
}
diff --git a/npc/functions/util.txt b/npc/functions/util.txt
index 21abcd1f2..c32a831e1 100644
--- a/npc/functions/util.txt
+++ b/npc/functions/util.txt
@@ -743,10 +743,9 @@ function script anyloot {
return Exception("Faulty anyloot skill command invoked - error");
// Get Items
- for (.@i=0;.@i < getargcount(); .@i++) {
+ for (.@i=0;.@i < getargcount(); .@i+=3) {
if (rand2(10000) < getarg(.@i+2))
getitem getarg(.@i), rand2(1, getarg(.@i+1));
- .@i++;
}
return true;
}
@@ -826,3 +825,19 @@ function script EnterTown {
return;
}
+// Convert map name to location id
+// MapToLoc( MapName )
+function script MapToLoc {
+ // Fill variable
+ .@v$=getarg(0);
+
+ // Validade variable, see npc/000-1/exit.txt first
+ setarray .@mapx$, "005-1", "003-1", "009-1", "012-1", "017-1", "018-5", "020-1", "024-1";
+ setarray .@locs$, "Candor", "Tulim", "Halin", "Hurns", "LoF", "Lilit", "Nival", "Frostia";
+ .@lx=array_find(.@locs$, .@v$);
+ if (.@lx < 0)
+ return Exception("Invalid map passed to MapToLoc: "+.@v$, RB_DEBUGMES);
+
+ return .@locs$[.@lx];
+}
+
diff --git a/npc/items/lofteleporter.txt b/npc/items/lofteleporter.txt
index 8c895387b..008bb29e6 100644
--- a/npc/items/lofteleporter.txt
+++ b/npc/items/lofteleporter.txt
@@ -51,11 +51,11 @@ OnUse:
select
l("Don't warp"),
- l("Land Of Fire Village (@@m)", 40-.@x),
- l("Tulimshar (@@m)", 40-.@x),
+ l("Land Of Fire Village (@@m)", 35-.@x),
+ l("Tulimshar (@@m)", 35-.@x),
rif(TELEPORTERS & TP_FROST, l("Frostia (@@m)", 120-.@x)),
rif(TELEPORTERS & TP_HALIN, l("Halinarzo (@@m)", 120-.@x)),
- rif(GSET_SOULMENHIR_MANUAL, l("Save Point (@@m)", 20-.@x));
+ rif(GSET_SOULMENHIR_MANUAL, l("Save Point (@@m)", 30-.@x));
if (@menu == 1)
close;
@@ -70,13 +70,13 @@ OnUse:
switch (@menu) {
case 2:
warp "017-1", 120, 89;
- TELEPORTER_TIME=loftel_time(40, .@x);
+ TELEPORTER_TIME=loftel_time(35, .@x);
LOCATION$="LoF";
@timer_navio_running=0;
break;
case 3:
warp "003-1", 41, 49;
- TELEPORTER_TIME=loftel_time(40, .@x);
+ TELEPORTER_TIME=loftel_time(35, .@x);
LOCATION$="Tulim";
@timer_navio_running=0;
break;
@@ -94,7 +94,7 @@ OnUse:
break;
case 6:
warp "Save", 0, 0;
- TELEPORTER_TIME=loftel_time(20, .@x);
+ TELEPORTER_TIME=loftel_time(30, .@x);
//LOCATION$="Save";
@timer_navio_running=0;
break;
diff --git a/npc/magic/cuteheart.txt b/npc/magic/cuteheart.txt
index d273feb31..2030b03ff 100644
--- a/npc/magic/cuteheart.txt
+++ b/npc/magic/cuteheart.txt
@@ -23,8 +23,8 @@ OnCall:
// Setup
@sk=TMW2_CUTEHEART;
- @mp=235;
- @amp=45;
+ @mp=25;
+ @amp=4;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
diff --git a/npc/magic/dragokin.txt b/npc/magic/dragokin.txt
index 2a8cb89b0..cfcc2ef44 100644
--- a/npc/magic/dragokin.txt
+++ b/npc/magic/dragokin.txt
@@ -25,8 +25,8 @@ OnCall:
// Setup
@sk=TMW2_DRAGOKIN;
- @mp=500;
- @amp=40;
+ @mp=50;
+ @amp=4;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
diff --git a/npc/magic/fairykingdom.txt b/npc/magic/fairykingdom.txt
index 3490ab823..f8f177ccb 100644
--- a/npc/magic/fairykingdom.txt
+++ b/npc/magic/fairykingdom.txt
@@ -23,8 +23,8 @@ OnCall:
// Setup
@sk=TMW2_FAIRYKINGDOM;
- @mp=400;
- @amp=42;
+ @mp=40;
+ @amp=4;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
diff --git a/npc/magic/frozenheart.txt b/npc/magic/frozenheart.txt
index 0eeec2194..1b59a53f5 100644
--- a/npc/magic/frozenheart.txt
+++ b/npc/magic/frozenheart.txt
@@ -23,8 +23,8 @@ OnCall:
// Setup
@sk=TMW2_FROZENHEART;
- @mp=375;
- @amp=55;
+ @mp=37;
+ @amp=5;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
diff --git a/npc/magic/halhiss.txt b/npc/magic/halhiss.txt
index b86840cb8..e497d8826 100644
--- a/npc/magic/halhiss.txt
+++ b/npc/magic/halhiss.txt
@@ -23,8 +23,8 @@ OnCall:
// Setup
@sk=TMW2_HALHISS;
- @mp=350;
- @amp=60;
+ @mp=35;
+ @amp=6;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
diff --git a/npc/magic/kalboo.txt b/npc/magic/kalboo.txt
index 6956cdc2a..17e2d64e6 100644
--- a/npc/magic/kalboo.txt
+++ b/npc/magic/kalboo.txt
@@ -23,8 +23,8 @@ OnCall:
// Setup
@sk=TMW2_KALBOO;
- @mp=250;
- @amp=55;
+ @mp=25;
+ @amp=5;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
diff --git a/npc/magic/kalmurk.txt b/npc/magic/kalmurk.txt
index c9ceda89f..10ba98d7c 100644
--- a/npc/magic/kalmurk.txt
+++ b/npc/magic/kalmurk.txt
@@ -30,8 +30,8 @@ OnCall:
// Setup
@sk=TMW2_KALMURK;
- @mp=200;
- @amp=50;
+ @mp=40;
+ @amp=5;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
diff --git a/npc/magic/kalspike.txt b/npc/magic/kalspike.txt
index f3d07c32c..14203821b 100644
--- a/npc/magic/kalspike.txt
+++ b/npc/magic/kalspike.txt
@@ -23,8 +23,8 @@ OnCall:
// Setup
@sk=TMW2_KALSPIKE;
- @mp=250;
- @amp=55;
+ @mp=25;
+ @amp=5;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
diff --git a/npc/magic/kalwulf.txt b/npc/magic/kalwulf.txt
index 22b27d2d5..dc5b3e0f8 100644
--- a/npc/magic/kalwulf.txt
+++ b/npc/magic/kalwulf.txt
@@ -23,8 +23,8 @@ OnCall:
// Setup
@sk=TMW2_KALWURF;
- @mp=450;
- @amp=45;
+ @mp=45;
+ @amp=5;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
diff --git a/npc/magic/limerizer.txt b/npc/magic/limerizer.txt
index a786d8eb9..cbf961387 100644
--- a/npc/magic/limerizer.txt
+++ b/npc/magic/limerizer.txt
@@ -23,8 +23,8 @@ OnCall:
// Setup
@sk=TMW2_LIMERIZER;
- @mp=300;
- @amp=30;
+ @mp=30;
+ @amp=3;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
diff --git a/npc/magic/plantkingdom.txt b/npc/magic/plantkingdom.txt
index 2788f80de..2ee9e314e 100644
--- a/npc/magic/plantkingdom.txt
+++ b/npc/magic/plantkingdom.txt
@@ -23,8 +23,8 @@ OnCall:
// Setup
@sk=TMW2_PLANTKINGDOM;
- @mp=300;
- @amp=30;
+ @mp=30;
+ @amp=3;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
diff --git a/npc/magic/stoneheart.txt b/npc/magic/stoneheart.txt
index c31f90f7d..38091a2f0 100644
--- a/npc/magic/stoneheart.txt
+++ b/npc/magic/stoneheart.txt
@@ -23,8 +23,8 @@ OnCall:
// Setup
@sk=TMW2_STONEHEART;
- @mp=475;
- @amp=55;
+ @mp=47;
+ @amp=5;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
diff --git a/npc/magic/transmigration.txt b/npc/magic/transmigration.txt
index d04dc9e85..a1cb2a958 100644
--- a/npc/magic/transmigration.txt
+++ b/npc/magic/transmigration.txt
@@ -17,7 +17,7 @@ OnCall:
}
// Check requisites
- if (!MagicCheck(TMW2_TRANSMIGRATION, 185, -5))
+ if (!MagicCheck(TMW2_TRANSMIGRATION, 215, -5))
end;
.@q=getq(General_Auldsbel);
diff --git a/npc/magic/zarkor.txt b/npc/magic/zarkor.txt
index 8fa29fe46..64d86d70c 100644
--- a/npc/magic/zarkor.txt
+++ b/npc/magic/zarkor.txt
@@ -32,8 +32,8 @@ OnCall:
// Setup
@sk=TMW2_ZARKOR;
- @mp=400;
- @amp=75;
+ @mp=40;
+ @amp=7;
// Check if you have mana to cast
// MagicCheck(SkillID, Mana{, MP per level})
@@ -48,7 +48,7 @@ OnCall:
// set cooldown
@zark_at=gettimetick(2);
- @zark_at=@zark_at+20;
+ @zark_at=@zark_at+80;
end;
OnInit:
diff --git a/npc/scripts.conf b/npc/scripts.conf
index db4c0ca55..2e55710e7 100644
--- a/npc/scripts.conf
+++ b/npc/scripts.conf
@@ -56,6 +56,7 @@
"npc/functions/npcmovegraph.txt",
"npc/functions/nurse.txt",
"npc/functions/petsales.txt",
+"npc/functions/politics.txt",
"npc/functions/refine.txt",
"npc/functions/resetstatus.txt",
"npc/functions/riddle.txt",