summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/battle/client.conf7
-rw-r--r--conf/messages.conf5
-rw-r--r--db/const.txt2
-rw-r--r--db/pre-re/item_db.conf183
-rw-r--r--db/re/item_db.conf2385
-rw-r--r--db/re/level_penalty.txt72
-rw-r--r--db/re/mob_skill_db.txt72
-rw-r--r--db/re/skill_require_db.txt2
-rw-r--r--db/re/skill_unit_db.txt2
-rw-r--r--doc/sample/npc_dynamic_shop.txt2
-rw-r--r--doc/sample/npc_test_duplicate.txt2
-rw-r--r--doc/script_commands.txt29
-rw-r--r--doc/whisper_sys.txt4
-rw-r--r--npc/MOTD.txt2
-rw-r--r--npc/airports/airships.txt4
-rw-r--r--npc/airports/izlude.txt2
-rw-r--r--npc/battleground/flavius/flavius01.txt4
-rw-r--r--npc/battleground/flavius/flavius02.txt4
-rw-r--r--npc/battleground/kvm/kvm01.txt6
-rw-r--r--npc/battleground/kvm/kvm02.txt6
-rw-r--r--npc/battleground/kvm/kvm03.txt6
-rw-r--r--npc/battleground/tierra/tierra01.txt22
-rw-r--r--npc/battleground/tierra/tierra02.txt22
-rw-r--r--npc/cities/amatsu.txt2
-rw-r--r--npc/cities/ayothaya.txt2
-rw-r--r--npc/cities/gonryun.txt2
-rw-r--r--npc/cities/izlude.txt18
-rw-r--r--npc/cities/jawaii.txt4
-rw-r--r--npc/cities/lighthalzen.txt2
-rw-r--r--npc/cities/louyang.txt2
-rw-r--r--npc/cities/moscovia.txt2
-rw-r--r--npc/cities/splendide.txt2
-rw-r--r--npc/cities/umbala.txt4
-rw-r--r--npc/cities/yuno.txt14
-rw-r--r--npc/custom/battleground/bg_common.txt2
-rw-r--r--npc/custom/battleground/bg_flavius_01.txt2
-rw-r--r--npc/custom/battleground/bg_flavius_02.txt2
-rw-r--r--npc/custom/battleground/bg_kvm01.txt4
-rw-r--r--npc/custom/battleground/bg_kvm02.txt4
-rw-r--r--npc/custom/battleground/bg_kvm03.txt4
-rw-r--r--npc/custom/battleground/bg_tierra_01.txt6
-rw-r--r--npc/custom/battleground/bg_tierra_02.txt6
-rw-r--r--npc/custom/bgqueue/flavius.txt4
-rw-r--r--npc/custom/etc/airplane.txt2
-rw-r--r--npc/custom/etc/floating_rates.txt2
-rw-r--r--npc/custom/etc/lottery.txt2
-rw-r--r--npc/custom/etc/marriage.txt2
-rw-r--r--npc/custom/etc/monster_arena.txt44
-rw-r--r--npc/custom/etc/quest_warper.txt2
-rw-r--r--npc/custom/etc/stock_market.txt2
-rw-r--r--npc/custom/events/uneasy_cemetery.txt2
-rw-r--r--npc/custom/healer.txt2
-rw-r--r--npc/custom/quests/bandit_beard.txt2
-rw-r--r--npc/custom/quests/event_6_new_hats.txt8
-rw-r--r--npc/custom/quests/hunting_missions.txt2
-rw-r--r--npc/custom/quests/quest_shop.txt12
-rw-r--r--npc/custom/quests/thq/THQS_TTShop.txt2
-rw-r--r--npc/custom/warper.txt2
-rw-r--r--npc/custom/woe_controller.txt2
-rw-r--r--npc/dev/ci_test.txt2
-rw-r--r--npc/dev/test.txt4
-rw-r--r--npc/events/StPatrick_2008.txt2
-rw-r--r--npc/events/gdevent_aru.txt2
-rw-r--r--npc/events/gdevent_sch.txt2
-rw-r--r--npc/events/halloween_2006.txt10
-rw-r--r--npc/events/nguild/nguild_ev_agit.txt10
-rw-r--r--npc/events/nguild/nguild_guardians.txt8
-rw-r--r--npc/events/nguild/nguild_treas.txt8
-rw-r--r--npc/instances/NydhoggsNest.txt72
-rw-r--r--npc/instances/OrcsMemory.txt2
-rw-r--r--npc/instances/SealedShrine.txt42
-rw-r--r--npc/jobs/2-1/assassin.txt194
-rw-r--r--npc/jobs/2-1/hunter.txt770
-rw-r--r--npc/jobs/2-1/knight.txt6
-rw-r--r--npc/jobs/2-1/priest.txt20
-rw-r--r--npc/jobs/2-1/wizard.txt6
-rw-r--r--npc/jobs/2-2/crusader.txt24
-rw-r--r--npc/jobs/2-2/dancer.txt22
-rw-r--r--npc/jobs/2-2/monk.txt84
-rw-r--r--npc/jobs/2-2/rogue.txt42
-rw-r--r--npc/jobs/2-2/sage.txt8
-rw-r--r--npc/jobs/2-2e/SoulLinker.txt2
-rw-r--r--npc/kafras/dts_warper.txt14
-rw-r--r--npc/kafras/kafras.txt2
-rw-r--r--npc/merchants/coin_exchange.txt2
-rw-r--r--npc/merchants/hd_refine.txt4
-rw-r--r--npc/merchants/icecream.txt2
-rw-r--r--npc/merchants/shops.txt122
-rw-r--r--npc/merchants/socket_enchant.txt4
-rw-r--r--npc/merchants/socket_enchant2.txt2
-rw-r--r--npc/other/arena/arena_aco.txt90
-rw-r--r--npc/other/arena/arena_lvl50.txt60
-rw-r--r--npc/other/arena/arena_lvl60.txt58
-rw-r--r--npc/other/arena/arena_lvl70.txt60
-rw-r--r--npc/other/arena/arena_lvl80.txt60
-rw-r--r--npc/other/arena/arena_party.txt62
-rw-r--r--npc/other/arena/arena_room.txt2
-rw-r--r--npc/other/auction.txt4
-rw-r--r--npc/other/mail.txt2
-rw-r--r--npc/other/mercenary_rent.txt4
-rw-r--r--npc/other/monster_race.txt362
-rw-r--r--npc/other/msg_boards.txt2
-rw-r--r--npc/other/poring_war.txt14
-rw-r--r--npc/other/pvp.txt8
-rw-r--r--npc/other/turbo_track.txt2642
-rw-r--r--npc/pre-re/jobs/1-1/swordman.txt356
-rw-r--r--npc/pre-re/merchants/shops.txt120
-rw-r--r--npc/pre-re/mobs/dungeons/lhz_dun.txt2
-rw-r--r--npc/pre-re/mobs/fields/niflheim.txt2
-rw-r--r--npc/quests/dandelion_request.txt10
-rw-r--r--npc/quests/eye_of_hellion.txt2
-rw-r--r--npc/quests/first_class/tu_archer.txt2
-rw-r--r--npc/quests/kiel_hyre_quest.txt20
-rw-r--r--npc/quests/monstertamers.txt2
-rw-r--r--npc/quests/newgears/2004_headgears.txt2
-rw-r--r--npc/quests/okolnir.txt450
-rw-r--r--npc/quests/quests_13_1.txt34
-rw-r--r--npc/quests/quests_13_2.txt126
-rw-r--r--npc/quests/quests_airship.txt4
-rw-r--r--npc/quests/quests_alberta.txt4
-rw-r--r--npc/quests/quests_amatsu.txt12
-rw-r--r--npc/quests/quests_ayothaya.txt32
-rw-r--r--npc/quests/quests_ein.txt4
-rw-r--r--npc/quests/quests_gonryun.txt42
-rw-r--r--npc/quests/quests_hugel.txt4
-rw-r--r--npc/quests/quests_izlude.txt2
-rw-r--r--npc/quests/quests_juperos.txt84
-rw-r--r--npc/quests/quests_lighthalzen.txt60
-rw-r--r--npc/quests/quests_louyang.txt10
-rw-r--r--npc/quests/quests_morocc.txt10
-rw-r--r--npc/quests/quests_moscovia.txt32
-rw-r--r--npc/quests/quests_nameless.txt36
-rw-r--r--npc/quests/quests_prontera.txt12
-rw-r--r--npc/quests/quests_rachel.txt44
-rw-r--r--npc/quests/quests_umbala.txt4
-rw-r--r--npc/quests/quests_veins.txt30
-rw-r--r--npc/quests/seals/brisingamen_seal.txt4
-rw-r--r--npc/quests/seals/god_weapon_creation.txt14
-rw-r--r--npc/quests/skills/assassin_skills.txt10
-rw-r--r--npc/quests/skills/merchant_skills.txt2
-rw-r--r--npc/quests/skills/rogue_skills.txt8
-rw-r--r--npc/quests/thana_quest.txt2
-rw-r--r--npc/quests/the_sign_quest.txt36
-rw-r--r--npc/re/battleground/bg_common.txt36
-rw-r--r--npc/re/cities/izlude.txt2
-rw-r--r--npc/re/cities/malangdo.txt4
-rw-r--r--npc/re/cities/malaya.txt4
-rw-r--r--npc/re/cities/mora.txt2
-rw-r--r--npc/re/guides/guides_izlude.txt2
-rw-r--r--npc/re/instances/BuwayaCave.txt2
-rw-r--r--npc/re/instances/MalangdoCulvert.txt12
-rw-r--r--npc/re/instances/OctopusCave.txt10
-rw-r--r--npc/re/instances/OldGlastHeim.txt28
-rw-r--r--npc/re/instances/WolfchevLaboratory.txt34
-rw-r--r--npc/re/jobs/2e/kagerou_oboro.txt10
-rw-r--r--npc/re/jobs/3-1/archbishop.txt6
-rw-r--r--npc/re/jobs/3-1/guillotine_cross.txt2
-rw-r--r--npc/re/jobs/3-1/ranger.txt2
-rw-r--r--npc/re/jobs/3-1/warlock.txt14
-rw-r--r--npc/re/jobs/3-2/genetic.txt2
-rw-r--r--npc/re/jobs/3-2/sorcerer.txt2
-rw-r--r--npc/re/jobs/3-2/wanderer.txt4
-rw-r--r--npc/re/jobs/novice/academy.txt6
-rw-r--r--npc/re/jobs/novice/novice.txt48
-rw-r--r--npc/re/jobs/repair.txt2
-rw-r--r--npc/re/merchants/3rd_trader.txt10
-rw-r--r--npc/re/merchants/blessed_refiner.txt2
-rw-r--r--npc/re/merchants/card_separation.txt2
-rw-r--r--npc/re/merchants/flute.txt2
-rw-r--r--npc/re/merchants/hd_refiner.txt4
-rw-r--r--npc/re/merchants/refine.txt2
-rw-r--r--npc/re/merchants/renters.txt2
-rw-r--r--npc/re/merchants/shops.txt319
-rw-r--r--npc/re/mobs/dungeons/lhz_dun.txt4
-rw-r--r--npc/re/mobs/fields/niflheim.txt2
-rw-r--r--npc/re/mobs/towns.txt12
-rw-r--r--npc/re/other/bulletin_boards.txt2
-rw-r--r--npc/re/quests/eden/11-25.txt5
-rw-r--r--npc/re/quests/eden/121-130.txt2
-rw-r--r--npc/re/quests/eden/eden_common.txt2
-rw-r--r--npc/re/quests/eden/eden_iro.txt2
-rw-r--r--npc/re/quests/eden/eden_quests.txt336
-rw-r--r--npc/re/quests/eden/eden_service.txt2
-rw-r--r--npc/re/quests/mrsmile.txt6
-rw-r--r--npc/re/quests/quests_brasilis.txt2
-rw-r--r--npc/re/quests/quests_dewata.txt2
-rw-r--r--npc/re/quests/quests_dicastes.txt10
-rw-r--r--npc/re/quests/quests_malangdo.txt58
-rw-r--r--npc/re/quests/quests_malaya.txt28
-rw-r--r--npc/re/quests/quests_mora.txt12
-rw-r--r--npc/re/quests/quests_morocc.txt2
-rw-r--r--npc/re/scripts.conf3
-rw-r--r--npc/re/warps/cities/dicastes.txt2
-rw-r--r--npc/re/warps/fields/bif_fild.txt2
-rw-r--r--npc/re/woe-fe/invest_main.txt10
-rw-r--r--npc/woe-fe/agit_controller.txt2
-rw-r--r--npc/woe-fe/agit_main.txt12
-rw-r--r--npc/woe-fe/aldeg_cas01.txt6
-rw-r--r--npc/woe-fe/aldeg_cas02.txt6
-rw-r--r--npc/woe-fe/aldeg_cas03.txt6
-rw-r--r--npc/woe-fe/aldeg_cas04.txt6
-rw-r--r--npc/woe-fe/aldeg_cas05.txt6
-rw-r--r--npc/woe-fe/gefg_cas01.txt6
-rw-r--r--npc/woe-fe/gefg_cas02.txt6
-rw-r--r--npc/woe-fe/gefg_cas03.txt6
-rw-r--r--npc/woe-fe/gefg_cas04.txt6
-rw-r--r--npc/woe-fe/gefg_cas05.txt6
-rw-r--r--npc/woe-fe/payg_cas01.txt6
-rw-r--r--npc/woe-fe/payg_cas02.txt6
-rw-r--r--npc/woe-fe/payg_cas03.txt6
-rw-r--r--npc/woe-fe/payg_cas04.txt6
-rw-r--r--npc/woe-fe/payg_cas05.txt6
-rw-r--r--npc/woe-fe/prtg_cas01.txt6
-rw-r--r--npc/woe-fe/prtg_cas02.txt6
-rw-r--r--npc/woe-fe/prtg_cas03.txt6
-rw-r--r--npc/woe-fe/prtg_cas04.txt6
-rw-r--r--npc/woe-fe/prtg_cas05.txt6
-rw-r--r--npc/woe-fe/trs_rp.txt42
-rw-r--r--npc/woe-se/agit_main_se.txt22
-rw-r--r--npc/woe-se/agit_start_se.txt2
-rw-r--r--npc/woe-se/arug_cas01.txt18
-rw-r--r--npc/woe-se/arug_cas02.txt18
-rw-r--r--npc/woe-se/arug_cas03.txt18
-rw-r--r--npc/woe-se/arug_cas04.txt18
-rw-r--r--npc/woe-se/arug_cas05.txt18
-rw-r--r--npc/woe-se/schg_cas01.txt18
-rw-r--r--npc/woe-se/schg_cas02.txt18
-rw-r--r--npc/woe-se/schg_cas03.txt18
-rw-r--r--npc/woe-se/schg_cas04.txt18
-rw-r--r--npc/woe-se/schg_cas05.txt18
-rw-r--r--sql-files/item_db.sql182
-rw-r--r--sql-files/item_db2.sql2
-rw-r--r--sql-files/item_db_re.sql583
-rw-r--r--sql-files/main.sql15
-rw-r--r--sql-files/upgrades/2015-12-16--12-57.sql26
-rw-r--r--sql-files/upgrades/2015-12-17--15-58.sql22
-rw-r--r--sql-files/upgrades/index.txt3
-rw-r--r--src/char/char.c94
-rw-r--r--src/common/HPMDataCheck.h3
-rw-r--r--src/common/HPMSymbols.inc.h2
-rw-r--r--src/common/mmo.h2
-rw-r--r--src/map/atcommand.c181
-rw-r--r--src/map/battle.c501
-rw-r--r--src/map/battle.h9
-rw-r--r--src/map/battleground.c39
-rw-r--r--src/map/chat.c30
-rw-r--r--src/map/chrif.c16
-rw-r--r--src/map/chrif.h6
-rw-r--r--src/map/clif.c585
-rw-r--r--src/map/duel.c2
-rw-r--r--src/map/elemental.c3
-rw-r--r--src/map/guild.c26
-rw-r--r--src/map/guild.h6
-rw-r--r--src/map/homunculus.c13
-rw-r--r--src/map/instance.c28
-rw-r--r--src/map/intif.c12
-rw-r--r--src/map/itemdb.c2
-rw-r--r--src/map/itemdb.h11
-rw-r--r--src/map/map.c315
-rw-r--r--src/map/map.h102
-rw-r--r--src/map/mercenary.c3
-rw-r--r--src/map/mob.c160
-rw-r--r--src/map/npc.c103
-rw-r--r--src/map/npc_chat.c35
-rw-r--r--src/map/party.c30
-rw-r--r--src/map/party.h5
-rw-r--r--src/map/pc.c517
-rw-r--r--src/map/pc.h16
-rw-r--r--src/map/pc_groups.c2
-rw-r--r--src/map/pet.c30
-rw-r--r--src/map/quest.c32
-rw-r--r--src/map/quest.h19
-rw-r--r--src/map/script.c1403
-rw-r--r--src/map/script.h10
-rw-r--r--src/map/skill.c609
-rw-r--r--src/map/status.c1054
-rw-r--r--src/map/status.h18
-rw-r--r--src/map/unit.c132
-rw-r--r--src/map/unit.h3
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc2
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc2
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.Hooks.inc2
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.sources.inc2
-rw-r--r--src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc2
-rw-r--r--src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc2
-rw-r--r--src/plugins/HPMHooking/HPMHooking_login.Hooks.inc2
-rw-r--r--src/plugins/HPMHooking/HPMHooking_login.sources.inc2
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc38
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc11
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.Hooks.inc288
-rw-r--r--src/plugins/HPMHooking/HPMHooking_map.sources.inc2
291 files changed, 11038 insertions, 7359 deletions
diff --git a/conf/battle/client.conf b/conf/battle/client.conf
index e10f03d82..6ca2f67e0 100644
--- a/conf/battle/client.conf
+++ b/conf/battle/client.conf
@@ -26,6 +26,8 @@ min_hair_color: 0
max_hair_color: 8
min_cloth_color: 0
max_cloth_color: 4
+min_body_style: 0
+max_body_style: 4
// When set to yes, the damage field in packets sent from woe maps will be set
// to -1, making it impossible for GMs, Bots and Hexed clients to know the
@@ -75,6 +77,11 @@ wedding_modifydisplay: no
// Save Clothes color. (This will degrade performance) (Note 1)
save_clothcolor: yes
+// Save body styles? (Note 1)
+// Note: Don't turn this on unless you know what your doing.
+// Sprites are not released officially.
+save_body_style: no
+
// Do not display cloth colors for the wedding costume?
// Note: Both save_clothcolor and wedding_modifydisplay have to be enabled
// for this option to take effect. Set this to yes if your cloth palettes
diff --git a/conf/messages.conf b/conf/messages.conf
index d946f2c8b..6e671b83b 100644
--- a/conf/messages.conf
+++ b/conf/messages.conf
@@ -1035,7 +1035,7 @@
// @changelook
1177: Usage: @changelook {<position>} <view id>
-1178: Position: 1:Top 2:Middle 3:Bottom 4:Weapon 5:Shield 6:Shoes 7:Robe
+1178: Position: 1:Top 2:Middle 3:Bottom 4:Weapon 5:Shield 6:Shoes 7:Robe 8:Body
// @autotrade
1179: Autotrade is not allowed in this map.
@@ -1516,8 +1516,9 @@
//src/map/atcommand.c::ACMD(auction)
1484: Auction is disabled
+//1485: FREE
+
//Monster Transformation
-1485: Traaaansformation-!! %s form!!
1486: Cannot transform into monster while in disguise.
1487: Character cannot be disguised while in monster form.
1488: Transforming into monster is not allowed in Guild Wars.
diff --git a/db/const.txt b/db/const.txt
index f02a5479c..361af4972 100644
--- a/db/const.txt
+++ b/db/const.txt
@@ -633,6 +633,7 @@ LOOK_SHOES 9
LOOK_BODY 10
LOOK_FLOOR 11
LOOK_ROBE 12
+LOOK_BODY2 13
Eff_Stone 0
Eff_Freeze 1
@@ -2568,6 +2569,7 @@ EF_TIME_ACCESSORY 1095
EF_SPRITEMABLE 1096
EF_TUNAPARTY 1097
+FAKE_NPC -1
WARPNPC 45
1_ETC_01 46
1_M_01 47
diff --git a/db/pre-re/item_db.conf b/db/pre-re/item_db.conf
index 399f869eb..e2f82d34a 100644
--- a/db/pre-re/item_db.conf
+++ b/db/pre-re/item_db.conf
@@ -13649,7 +13649,7 @@ item_db: (
Range: 5
Job: 0x000A0808
Loc: 34
- WeaponLv: 4
+ WeaponLv: 3
EquipLv: 65
View: 11
Script: <" bonus2 bAddMonsterDropItem,1753,200; ">
@@ -30550,7 +30550,8 @@ item_db: (
Weight: 10
Loc: 2
Script: <"
- if(getiteminfo(getequipid(EQI_HAND_R),11)==10) {
+ .@i = getiteminfo(getequipid(EQI_HAND_R),11);
+ if (.@i == 10 || .@i == 23) {
bonus bInt,1;
bonus bIgnoreMdefRate,2;
}
@@ -30718,7 +30719,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,1; ">
},
{
@@ -30728,7 +30729,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,2; ">
},
{
@@ -30738,7 +30739,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,3; ">
},
{
@@ -30748,7 +30749,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,4; ">
},
{
@@ -30758,7 +30759,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,5; ">
},
{
@@ -30768,7 +30769,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,6; ">
},
{
@@ -30778,7 +30779,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,7; ">
},
{
@@ -30788,7 +30789,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,8; ">
},
{
@@ -30798,7 +30799,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,9; ">
},
{
@@ -30808,7 +30809,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,10; ">
},
{
@@ -30818,7 +30819,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,1; ">
},
{
@@ -30828,7 +30829,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,2; ">
},
{
@@ -30838,7 +30839,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,3; ">
},
{
@@ -30848,7 +30849,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,4; ">
},
{
@@ -30858,7 +30859,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,5; ">
},
{
@@ -30868,7 +30869,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,6; ">
},
{
@@ -30878,7 +30879,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,7; ">
},
{
@@ -30888,7 +30889,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,8; ">
},
{
@@ -30898,7 +30899,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,9; ">
},
{
@@ -30908,7 +30909,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,10; ">
},
{
@@ -30918,7 +30919,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,1; ">
},
{
@@ -30928,7 +30929,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,2; ">
},
{
@@ -30938,7 +30939,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,3; ">
},
{
@@ -30948,7 +30949,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,4; ">
},
{
@@ -30958,7 +30959,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,5; ">
},
{
@@ -30968,7 +30969,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,6; ">
},
{
@@ -30978,7 +30979,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,7; ">
},
{
@@ -30988,7 +30989,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,8; ">
},
{
@@ -30998,7 +30999,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,9; ">
},
{
@@ -31008,7 +31009,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,10; ">
},
{
@@ -31018,7 +31019,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,1; ">
},
{
@@ -31028,7 +31029,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,2; ">
},
{
@@ -31038,7 +31039,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,3; ">
},
{
@@ -31048,7 +31049,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,4; ">
},
{
@@ -31058,7 +31059,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,5; ">
},
{
@@ -31068,7 +31069,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,6; ">
},
{
@@ -31078,7 +31079,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,7; ">
},
{
@@ -31088,7 +31089,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,8; ">
},
{
@@ -31098,7 +31099,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,9; ">
},
{
@@ -31108,7 +31109,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,10; ">
},
{
@@ -31118,7 +31119,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,1; ">
},
{
@@ -31128,7 +31129,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,2; ">
},
{
@@ -31138,7 +31139,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,3; ">
},
{
@@ -31148,7 +31149,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,4; ">
},
{
@@ -31158,7 +31159,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,5; ">
},
{
@@ -31168,7 +31169,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,6; ">
},
{
@@ -31178,7 +31179,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,7; ">
},
{
@@ -31188,7 +31189,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,8; ">
},
{
@@ -31198,7 +31199,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,9; ">
},
{
@@ -31208,7 +31209,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,10; ">
},
{
@@ -31218,7 +31219,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,1; ">
},
{
@@ -31228,7 +31229,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,2; ">
},
{
@@ -31238,7 +31239,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,3; ">
},
{
@@ -31248,7 +31249,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,4; ">
},
{
@@ -31258,7 +31259,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,5; ">
},
{
@@ -31268,7 +31269,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,6; ">
},
{
@@ -31278,7 +31279,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,7; ">
},
{
@@ -31288,7 +31289,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,8; ">
},
{
@@ -31298,7 +31299,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,9; ">
},
{
@@ -31308,7 +31309,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,10; ">
},
{
@@ -31318,7 +31319,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bMatkRate,1; ">
},
{
@@ -31328,7 +31329,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bMatkRate,2; ">
},
{
@@ -31338,7 +31339,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bFlee,6; ">
},
{
@@ -31348,7 +31349,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bFlee,12; ">
},
{
@@ -31358,7 +31359,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bCritical,5; ">
},
{
@@ -31368,7 +31369,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bCritical,7; ">
},
{
@@ -31378,7 +31379,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus2 bAddRace, RC_All, 2; ">
},
{
@@ -31388,7 +31389,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus2 bAddRace, RC_All, 3; ">
},
{
@@ -31398,7 +31399,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4769
@@ -31407,7 +31408,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4770
@@ -31416,7 +31417,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4771
@@ -31425,7 +31426,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4772
@@ -31434,7 +31435,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4773
@@ -31443,7 +31444,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4774
@@ -31452,7 +31453,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4775
@@ -31461,7 +31462,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4776
@@ -31470,7 +31471,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4777
@@ -31479,7 +31480,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4778
@@ -31488,7 +31489,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4779
@@ -31497,7 +31498,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4780
@@ -31506,7 +31507,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4781
@@ -31515,7 +31516,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4782
@@ -31524,7 +31525,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4783
@@ -31533,7 +31534,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4784
@@ -31542,7 +31543,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
{
Id: 4785
@@ -31551,7 +31552,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
},
//== More Headgears ========================================
@@ -72471,6 +72472,7 @@ item_db: (
Loc: 32768
EquipLv: 1
View: 3
+ Script: <" bonus bAtkEle, Ele_Neutral; ">
},
{
Id: 13201
@@ -72498,7 +72500,10 @@ item_db: (
Loc: 32768
EquipLv: 1
View: 3
- Script: <" bonus2 bAddEff,Eff_Bleeding,100; ">
+ Script: <"
+ bonus bAtkEle, Ele_Neutral;
+ bonus2 bAddEff, Eff_Bleeding, 100;
+ ">
},
{
Id: 13203
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index 82e9a2aba..2ef5dc689 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -39064,7 +39064,8 @@ item_db: (
Weight: 10
Loc: 2
Script: <"
- if(getiteminfo(getequipid(EQI_HAND_R),11)==10) {
+ .@i = getiteminfo(getequipid(EQI_HAND_R),11);
+ if (.@i == 10 || .@i == 23) {
bonus bInt,1;
bonus bIgnoreMdefRate,2;
}
@@ -42351,7 +42352,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,1; ">
},
{
@@ -42361,7 +42362,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,2; ">
},
{
@@ -42371,7 +42372,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,3; ">
},
{
@@ -42381,7 +42382,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,4; ">
},
{
@@ -42391,7 +42392,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,5; ">
},
{
@@ -42401,7 +42402,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,6; ">
},
{
@@ -42411,7 +42412,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,7; ">
},
{
@@ -42421,7 +42422,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,8; ">
},
{
@@ -42431,7 +42432,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,9; ">
},
{
@@ -42441,7 +42442,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,10; ">
},
{
@@ -42451,7 +42452,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,1; ">
},
{
@@ -42461,7 +42462,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,2; ">
},
{
@@ -42471,7 +42472,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,3; ">
},
{
@@ -42481,7 +42482,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,4; ">
},
{
@@ -42491,7 +42492,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,5; ">
},
{
@@ -42501,7 +42502,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,6; ">
},
{
@@ -42511,7 +42512,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,7; ">
},
{
@@ -42521,7 +42522,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,8; ">
},
{
@@ -42531,7 +42532,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,9; ">
},
{
@@ -42541,7 +42542,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,10; ">
},
{
@@ -42551,7 +42552,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,1; ">
},
{
@@ -42561,7 +42562,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,2; ">
},
{
@@ -42571,7 +42572,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,3; ">
},
{
@@ -42581,7 +42582,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,4; ">
},
{
@@ -42591,7 +42592,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,5; ">
},
{
@@ -42601,7 +42602,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,6; ">
},
{
@@ -42611,7 +42612,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,7; ">
},
{
@@ -42621,7 +42622,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,8; ">
},
{
@@ -42631,7 +42632,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,9; ">
},
{
@@ -42641,7 +42642,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,10; ">
},
{
@@ -42651,7 +42652,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,1; ">
},
{
@@ -42661,7 +42662,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,2; ">
},
{
@@ -42671,7 +42672,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,3; ">
},
{
@@ -42681,7 +42682,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,4; ">
},
{
@@ -42691,7 +42692,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,5; ">
},
{
@@ -42701,7 +42702,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,6; ">
},
{
@@ -42711,7 +42712,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,7; ">
},
{
@@ -42721,7 +42722,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,8; ">
},
{
@@ -42731,7 +42732,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,9; ">
},
{
@@ -42741,7 +42742,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,10; ">
},
{
@@ -42751,7 +42752,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,1; ">
},
{
@@ -42761,7 +42762,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,2; ">
},
{
@@ -42771,7 +42772,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,3; ">
},
{
@@ -42781,7 +42782,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,4; ">
},
{
@@ -42791,7 +42792,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,5; ">
},
{
@@ -42801,7 +42802,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,6; ">
},
{
@@ -42811,7 +42812,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,7; ">
},
{
@@ -42821,7 +42822,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,8; ">
},
{
@@ -42831,7 +42832,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,9; ">
},
{
@@ -42841,7 +42842,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,10; ">
},
{
@@ -42851,7 +42852,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,1; ">
},
{
@@ -42861,7 +42862,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,2; ">
},
{
@@ -42871,7 +42872,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,3; ">
},
{
@@ -42881,7 +42882,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,4; ">
},
{
@@ -42891,7 +42892,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,5; ">
},
{
@@ -42901,7 +42902,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,6; ">
},
{
@@ -42911,7 +42912,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,7; ">
},
{
@@ -42921,7 +42922,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,8; ">
},
{
@@ -42931,7 +42932,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,9; ">
},
{
@@ -42941,7 +42942,7 @@ item_db: (
Type: 6
Buy: 20
Weight: 10
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,10; ">
},
{
@@ -42949,7 +42950,7 @@ item_db: (
AegisName: "Matk1"
Name: "MATK+1%"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatkRate,1;
bonus bFixedCastrate,-1;
@@ -42960,7 +42961,7 @@ item_db: (
AegisName: "Matk2"
Name: "MATK+2%"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatkRate,2;
bonus bFixedCastrate,-1;
@@ -42971,7 +42972,7 @@ item_db: (
AegisName: "Evasion6"
Name: "FLEE+6"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bFlee,6; ">
},
{
@@ -42979,7 +42980,7 @@ item_db: (
AegisName: "Evasion12"
Name: "FLEE+12"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bFlee,12; ">
},
{
@@ -42987,7 +42988,7 @@ item_db: (
AegisName: "Critical5"
Name: "CRI+5"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bCritical,5; ">
},
{
@@ -42995,7 +42996,7 @@ item_db: (
AegisName: "Critical7"
Name: "CRI+7"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bCritical,7; ">
},
{
@@ -43003,7 +43004,7 @@ item_db: (
AegisName: "Atk2"
Name: "ATK+2%"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bAtkRate,2; ">
},
{
@@ -43011,7 +43012,7 @@ item_db: (
AegisName: "Atk3"
Name: "ATK+3%"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bAtkRate,3; ">
},
{
@@ -43019,7 +43020,7 @@ item_db: (
AegisName: "Str1_J"
Name: "Str1 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,1; ">
},
{
@@ -43027,7 +43028,7 @@ item_db: (
AegisName: "Str2_J"
Name: "Str2 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,2; ">
},
{
@@ -43035,7 +43036,7 @@ item_db: (
AegisName: "Str3_J"
Name: "Str3 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bStr,3; ">
},
{
@@ -43043,7 +43044,7 @@ item_db: (
AegisName: "Int1_J"
Name: "Int1 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,1; ">
},
{
@@ -43051,7 +43052,7 @@ item_db: (
AegisName: "Int2_J"
Name: "Int2 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,2; ">
},
{
@@ -43059,7 +43060,7 @@ item_db: (
AegisName: "Int3_J"
Name: "Int3 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bInt,3; ">
},
{
@@ -43067,7 +43068,7 @@ item_db: (
AegisName: "Vit1_J"
Name: "Vit1 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,1; ">
},
{
@@ -43075,7 +43076,7 @@ item_db: (
AegisName: "Vit2_J"
Name: "Vit2 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,2; ">
},
{
@@ -43083,7 +43084,7 @@ item_db: (
AegisName: "Vit3_J"
Name: "Vit3 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bVit,3; ">
},
{
@@ -43091,7 +43092,7 @@ item_db: (
AegisName: "Agi1_J"
Name: "Agi1 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,1; ">
},
{
@@ -43099,7 +43100,7 @@ item_db: (
AegisName: "Agi2_J"
Name: "Agi2 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,2; ">
},
{
@@ -43107,7 +43108,7 @@ item_db: (
AegisName: "Agi3_J"
Name: "Agi3 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bAgi,3; ">
},
{
@@ -43115,7 +43116,7 @@ item_db: (
AegisName: "Dex1_J"
Name: "Dex1 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,1; ">
},
{
@@ -43123,7 +43124,7 @@ item_db: (
AegisName: "Dex2_J"
Name: "Dex2 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,2; ">
},
{
@@ -43131,7 +43132,7 @@ item_db: (
AegisName: "Dex3_J"
Name: "Dex3 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bDex,3; ">
},
{
@@ -43139,7 +43140,7 @@ item_db: (
AegisName: "Luk1_J"
Name: "Luk1 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,1; ">
},
{
@@ -43147,7 +43148,7 @@ item_db: (
AegisName: "Luk2_J"
Name: "Luk2 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,2; ">
},
{
@@ -43155,7 +43156,7 @@ item_db: (
AegisName: "Luk3_J"
Name: "Luk3 J"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bLuk,3; ">
},
{
@@ -43163,7 +43164,7 @@ item_db: (
AegisName: "Mdef2"
Name: "MDEF+2"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMdef,2; ">
},
{
@@ -43171,7 +43172,7 @@ item_db: (
AegisName: "Mdef4"
Name: "MDEF+4"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMdef,4; ">
},
{
@@ -43179,7 +43180,7 @@ item_db: (
AegisName: "Mdef6"
Name: "MDEF+6"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMdef,6; ">
},
{
@@ -43187,7 +43188,7 @@ item_db: (
AegisName: "Mdef8"
Name: "MDEF+8"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMdef,8; ">
},
{
@@ -43195,7 +43196,7 @@ item_db: (
AegisName: "Mdef10"
Name: "MDEF+10"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMdef,10; ">
},
{
@@ -43203,7 +43204,7 @@ item_db: (
AegisName: "Def3"
Name: "DEF+3"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bDef,3; ">
},
{
@@ -43211,7 +43212,7 @@ item_db: (
AegisName: "Def6"
Name: "DEF+6"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bDef,6; ">
},
{
@@ -43219,7 +43220,7 @@ item_db: (
AegisName: "Def9"
Name: "DEF+9"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bDef,9; ">
},
{
@@ -43227,7 +43228,7 @@ item_db: (
AegisName: "Def12"
Name: "DEF+12"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bDef,12; ">
},
{
@@ -43235,7 +43236,7 @@ item_db: (
AegisName: "HP100"
Name: "HP+100"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxHP,100; ">
},
{
@@ -43243,7 +43244,7 @@ item_db: (
AegisName: "HP200"
Name: "HP+200"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxHP,200; ">
},
{
@@ -43251,7 +43252,7 @@ item_db: (
AegisName: "HP300"
Name: "HP+300"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxHP,300; ">
},
{
@@ -43259,7 +43260,7 @@ item_db: (
AegisName: "HP400"
Name: "HP+400"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxHP,400; ">
},
{
@@ -43267,7 +43268,7 @@ item_db: (
AegisName: "HP500"
Name: "HP+500"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxHP,500; ">
},
{
@@ -43275,7 +43276,7 @@ item_db: (
AegisName: "SP50"
Name: "SP+50"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxSP,50; ">
},
{
@@ -43283,7 +43284,7 @@ item_db: (
AegisName: "SP100"
Name: "SP+100"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxSP,100; ">
},
{
@@ -43291,7 +43292,7 @@ item_db: (
AegisName: "SP150"
Name: "SP+150"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxSP,150; ">
},
{
@@ -43299,7 +43300,7 @@ item_db: (
AegisName: "Highness_Heal_3sec"
Name: "Cure1Lv."
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus2 bSkillCooldown,AB_HIGHNESSHEAL,-3000; ">
},
{
@@ -43307,7 +43308,7 @@ item_db: (
AegisName: "Coluceo_Heal30"
Name: "Catholic1Lv."
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus2 bSkillUseSP,AB_CHEAL,30; ">
},
{
@@ -43315,7 +43316,7 @@ item_db: (
AegisName: "Heal_Amount2"
Name: "Archbishop1Lv."
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bHealPower,3; ">
},
{
@@ -43323,7 +43324,7 @@ item_db: (
AegisName: "Matk3"
Name: "MATK+3%"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatkRate,3;
bonus bFixedCastrate,-1;
@@ -43334,7 +43335,7 @@ item_db: (
AegisName: "Atk_Speed1"
Name: "Atk Speed1"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bAspd,1; ">
},
{
@@ -43342,7 +43343,7 @@ item_db: (
AegisName: "Fighting_Spirit4"
Name: "Fighting Spirit4"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bBaseAtk,15;
bonus bHit,5;
@@ -43353,7 +43354,7 @@ item_db: (
AegisName: "Fighting_Spirit3"
Name: "Fighting Spirit3"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bBaseAtk,12;
bonus bHit,4;
@@ -43364,7 +43365,7 @@ item_db: (
AegisName: "Fighting_Spirit2"
Name: "Fighting Spirit2"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bBaseAtk,9;
bonus bHit,3;
@@ -43375,7 +43376,7 @@ item_db: (
AegisName: "Fighting_Spirit1"
Name: "Fighting Spirit1"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bBaseAtk,6;
bonus bHit,2;
@@ -43386,7 +43387,7 @@ item_db: (
AegisName: "Spell4"
Name: "Spell4"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatk,15;
bonus bVariableCastrate,-10;
@@ -43397,7 +43398,7 @@ item_db: (
AegisName: "Spell3"
Name: "Spell3"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatk,12;
bonus bVariableCastrate,-8;
@@ -43408,7 +43409,7 @@ item_db: (
AegisName: "Spell2"
Name: "Spell2"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatk,9;
bonus bVariableCastrate,-6;
@@ -43419,7 +43420,7 @@ item_db: (
AegisName: "Spell1"
Name: "Spell1"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatk,6;
bonus bVariableCastrate,-4;
@@ -43430,7 +43431,7 @@ item_db: (
AegisName: "Sharp3"
Name: "Sharp3"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bCritical,12;
bonus bHit,4;
@@ -43441,7 +43442,7 @@ item_db: (
AegisName: "Sharp2"
Name: "Sharp2"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bCritical,9;
bonus bHit,3;
@@ -43452,7 +43453,7 @@ item_db: (
AegisName: "Sharp1"
Name: "Sharp1"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bCritical,6;
bonus bHit,2;
@@ -43463,7 +43464,7 @@ item_db: (
AegisName: "Atk1"
Name: "Atk1"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bAtkRate,1; ">
},
{
@@ -43471,7 +43472,7 @@ item_db: (
AegisName: "Fighting_Spirit5"
Name: "Fighting Spirit5"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bBaseAtk,18;
bonus bHit,5;
@@ -43482,7 +43483,7 @@ item_db: (
AegisName: "Fighting_Spirit6"
Name: "Fighting Spirit6"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bBaseAtk,21;
bonus bHit,5;
@@ -43493,7 +43494,7 @@ item_db: (
AegisName: "Fighting_Spirit7"
Name: "Fighting Spirit7"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bBaseAtk,24;
bonus bHit,5;
@@ -43504,7 +43505,7 @@ item_db: (
AegisName: "Fighting_Spirit8"
Name: "Fighting Spirit8"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bBaseAtk,27;
bonus bHit,5;
@@ -43515,7 +43516,7 @@ item_db: (
AegisName: "Fighting_Spirit9"
Name: "Fighting Spirit9"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bBaseAtk,30;
bonus bHit,5;
@@ -43526,7 +43527,7 @@ item_db: (
AegisName: "Fighting_Spirit10"
Name: "Fighting Spirit10"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bBaseAtk,50;
bonus bHit,15;
@@ -43537,7 +43538,7 @@ item_db: (
AegisName: "Spell5"
Name: "Spell5"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatk,18;
bonus bVariableCastrate,-10;
@@ -43548,7 +43549,7 @@ item_db: (
AegisName: "Spell6"
Name: "Spell6"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatk,21;
bonus bVariableCastrate,-10;
@@ -43559,7 +43560,7 @@ item_db: (
AegisName: "Spell7"
Name: "Spell7"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatk,24;
bonus bVariableCastrate,-10;
@@ -43570,7 +43571,7 @@ item_db: (
AegisName: "Spell8"
Name: "Spell8"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatk,27;
bonus bVariableCastrate,-10;
@@ -43581,7 +43582,7 @@ item_db: (
AegisName: "Spell9"
Name: "Spell9"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatk,30;
bonus bVariableCastrate,-10;
@@ -43592,7 +43593,7 @@ item_db: (
AegisName: "Spell10"
Name: "Spell10"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bMatk,50;
bonus bVariableCastrate,-20;
@@ -43603,7 +43604,7 @@ item_db: (
AegisName: "Expert_Archer1"
Name: "Expert Archer1"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bLongAtkRate,2; ">
},
{
@@ -43611,7 +43612,7 @@ item_db: (
AegisName: "Expert_Archer2"
Name: "Expert Archer2"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bLongAtkRate,4; ">
},
{
@@ -43619,7 +43620,7 @@ item_db: (
AegisName: "Expert_Archer3"
Name: "Expert Archer3"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bLongAtkRate,6; ">
},
{
@@ -43627,7 +43628,7 @@ item_db: (
AegisName: "Expert_Archer4"
Name: "Expert Archer4"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bLongAtkRate,8; ">
},
{
@@ -43635,7 +43636,7 @@ item_db: (
AegisName: "Expert_Archer5"
Name: "Expert Archer5"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bLongAtkRate,10; ">
},
{
@@ -43643,7 +43644,7 @@ item_db: (
AegisName: "Expert_Archer6"
Name: "Expert Archer6"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bLongAtkRate,12; ">
},
{
@@ -43651,7 +43652,7 @@ item_db: (
AegisName: "Expert_Archer7"
Name: "Expert Archer7"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bLongAtkRate,14; ">
},
{
@@ -43659,7 +43660,7 @@ item_db: (
AegisName: "Expert_Archer8"
Name: "Expert Archer8"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bLongAtkRate,16; ">
},
{
@@ -43667,7 +43668,7 @@ item_db: (
AegisName: "Expert_Archer9"
Name: "Expert Archer9"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bLongAtkRate,18; ">
},
{
@@ -43675,7 +43676,7 @@ item_db: (
AegisName: "Expert_Archer10"
Name: "Expert Archer10"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bLongAtkRate,20;
bonus bAspd,1;
@@ -43686,7 +43687,7 @@ item_db: (
AegisName: "Atk_Speed2"
Name: "Atk Speed2"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bAspd,2; ">
},
{
@@ -43694,7 +43695,7 @@ item_db: (
AegisName: "Sharp4"
Name: "Sharp4"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bCritical,14;
bonus bHit,5;
@@ -43705,7 +43706,7 @@ item_db: (
AegisName: "Sharp5"
Name: "Sharp5"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bCritical,15;
bonus bHit,6;
@@ -43716,14 +43717,14 @@ item_db: (
AegisName: "Sea_Energy"
Name: "Strength Of Ocean"
Type: 6
- Loc: 16
+ Loc: 1023
},
{
Id: 4846
AegisName: "2011Valentin_Angel"
Name: "Fully Loved Stone"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bBaseAtk,10;
bonus bMatk,10;
@@ -43734,7 +43735,7 @@ item_db: (
AegisName: "2011Valentin_Devil"
Name: "Spelled Stone"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bBaseAtk,10;
bonus bMatk,10;
@@ -43745,7 +43746,7 @@ item_db: (
AegisName: "Immuned1"
Name: "Immune Level 1"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus2 bSubEle,Ele_Neutral,5; ">
},
{
@@ -43753,7 +43754,7 @@ item_db: (
AegisName: "Cranial1"
Name: "Cranial Level 1"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus2 bAddRaceTolerance,RC_DemiPlayer,5; ">
},
{
@@ -43761,7 +43762,7 @@ item_db: (
AegisName: "Heal_Amount3"
Name: "Heal Amount3"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bHealPower,6;
bonus bUseSPrate,5;
@@ -43772,7 +43773,7 @@ item_db: (
AegisName: "Heal_Amount4"
Name: "Heal Amount4"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bHealPower,12;
bonus bUseSPrate,10;
@@ -43783,7 +43784,7 @@ item_db: (
AegisName: "Heal_Amount5"
Name: "Heal Amount5"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bHealPower,20;
bonus bUseSPrate,15;
@@ -43794,16 +43795,16 @@ item_db: (
AegisName: "S_Str"
Name: "Special Str"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bStr,1;
- if(getrefine()>7) {
+ if (getrefine() >= 8) {
bonus bStr,3;
}
- if (getrefine() > 8) {
+ if (getrefine() >= 9) {
bonus2 bAddRace, RC_All, 1;
}
- if(getrefine()>11) {
+ if (getrefine() >= 12) {
bonus bAspd,1;
bonus bFixedCastrate,-7;
}
@@ -43814,16 +43815,16 @@ item_db: (
AegisName: "S_Agi"
Name: "Special Agi"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <"
bonus bAgi,1;
- if(getrefine()>7) {
+ if (getrefine() >= 8) {
bonus bAgi,3;
}
- if (getrefine() > 8) {
+ if (getrefine() >= 9) {
bonus2 bAddRace, RC_All, 1;
}
- if(getrefine()>11) {
+ if (getrefine() >= 12) {
bonus bAspd,1;
bonus bFixedCastrate,-7;
}
@@ -43833,17 +43834,17 @@ item_db: (
Id: 4855
AegisName: "S_Vital"
Name: "Special Vit"
- Type: 2
- Loc: 16
+ Type: 6
+ Loc: 1023
Script: <"
bonus bVit,1;
- if(getrefine()>7) {
+ if (getrefine() >= 8) {
bonus bVit,3;
}
- if(getrefine()>8) {
+ if (getrefine() >= 9) {
bonus bMaxSPrate,1;
}
- if(getrefine()>11) {
+ if (getrefine() >= 12) {
bonus bAspd,1;
bonus bFixedCastrate,-7;
}
@@ -43853,17 +43854,17 @@ item_db: (
Id: 4856
AegisName: "S_Int"
Name: "Special Int"
- Type: 2
- Loc: 16
+ Type: 6
+ Loc: 1023
Script: <"
bonus bInt,1;
- if(getrefine()>7) {
+ if (getrefine() >= 8) {
bonus bInt,3;
}
- if(getrefine()>8) {
+ if (getrefine() >= 9) {
bonus bMatkRate,1;
}
- if(getrefine()>11) {
+ if (getrefine() >= 12) {
bonus bAspd,1;
bonus bFixedCastrate,-7;
}
@@ -43873,17 +43874,17 @@ item_db: (
Id: 4857
AegisName: "S_Dex"
Name: "Special Dex"
- Type: 2
- Loc: 16
+ Type: 6
+ Loc: 1023
Script: <"
bonus bDex,1;
- if(getrefine()>7) {
+ if (getrefine() >= 8) {
bonus bDex,3;
}
- if(getrefine()>8) {
+ if (getrefine() >= 9) {
bonus bMatkRate,1;
}
- if(getrefine()>11) {
+ if (getrefine() >= 12) {
bonus bAspd,1;
bonus bFixedCastrate,-7;
}
@@ -43893,17 +43894,17 @@ item_db: (
Id: 4858
AegisName: "S_Luck"
Name: "Special Luk"
- Type: 2
- Loc: 16
+ Type: 6
+ Loc: 1023
Script: <"
bonus bLuk,1;
- if(getrefine()>7) {
+ if (getrefine() >= 8) {
bonus bLuk,3;
}
- if(getrefine()>8) {
+ if (getrefine() >= 9) {
bonus bMaxHPrate,1;
}
- if(getrefine()>11) {
+ if (getrefine() >= 12) {
bonus bAspd,1;
bonus bFixedCastrate,-7;
}
@@ -43914,7 +43915,7 @@ item_db: (
AegisName: "Evasion1"
Name: "Evasion1"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bFlee,1; ">
},
{
@@ -43922,7 +43923,7 @@ item_db: (
AegisName: "Evasion3"
Name: "Evasion3"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bFlee,3; ">
},
{
@@ -43930,7 +43931,7 @@ item_db: (
AegisName: "MHP1"
Name: "MHP+1%"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxHPrate,1; ">
},
{
@@ -43938,15 +43939,59 @@ item_db: (
AegisName: "MHP2"
Name: "MHP+2%"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxHPrate,2; ">
},
{
+ Id: 4863
+ AegisName: "Fatal1"
+ Name: "Fatal1Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bCriAtkRate, 4;
+ bonus bCritical, 1;
+ ">
+},
+{
+ Id: 4864
+ AegisName: "Fatal2"
+ Name: "Fatal2Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bCriAtkRate, 6;
+ bonus bCritical, 2;
+ ">
+},
+{
+ Id: 4865
+ AegisName: "Fatal3"
+ Name: "Fatal3Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bCriAtkRate, 8;
+ bonus bCritical, 3;
+ ">
+},
+{
+ Id: 4866
+ AegisName: "Fatal4"
+ Name: "Fatal4Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bCriAtkRate, 10;
+ bonus bCritical, 4;
+ ">
+},
+{
Id: 4867
AegisName: "MHP3"
Name: "MHP+3%"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxHPrate,3; ">
},
{
@@ -43954,15 +43999,23 @@ item_db: (
AegisName: "MHP4"
Name: "MHP+4%"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxHPrate,4; ">
},
{
+ Id: 4869
+ AegisName: "Attack_Delay_1"
+ Name: "DelayafterAttack1Lv"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bAspdRate, 4; ">
+},
+{
Id: 4870
AegisName: "SP25"
Name: "SP+25"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxSP,25; ">
},
{
@@ -43970,9 +44023,1232 @@ item_db: (
AegisName: "SP75"
Name: "SP+75"
Type: 6
- Loc: 16
+ Loc: 1023
Script: <" bonus bMaxSP,75; ">
},
+{
+ Id: 4872
+ AegisName: "Attack_Delay_2"
+ Name: "DelayafterAttack2Lv"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bAspdRate, 6; ">
+},
+{
+ Id: 4873
+ AegisName: "Attack_Delay_3"
+ Name: "DelayafterAttack3Lv"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bAspdRate, 8; ">
+},
+{
+ Id: 4875
+ AegisName: "Bear's_Power"
+ Name: "Strength of Bear"
+ Type: 6
+ Loc: 1023
+ Script: <" autobonus2 "{ bonus bStr, 200; bonus2 bHPLossRate, 500, 1000; montransform BIGFOOT, 5000; }", 20, 5000, BF_WEAPON, "{ specialeffect2 EF_POTION_BERSERK; showscript \"?!!!!\"; }"; ">
+ OnUnequipScript: <" heal 0, -300; ">
+},
+{
+ Id: 4876
+ AegisName: "Runaway_Magic"
+ Name: "Runaway Magic"
+ Type: 6
+ Loc: 1023
+ Script: <" autobonus "{ bonus bInt, 200; bonus2 bSPLossRate, 200, 1000; }", 15, 10000, BF_MAGIC, "{ specialeffect2 EF_POTION_BERSERK; showscript \"YOooooooo!!!!!\"; }"; ">
+ OnUnequipScript: <" heal 0, -2000; ">
+},
+{
+ Id: 4877
+ AegisName: "Speed_Of_Light"
+ Name: "Speed Of Light"
+ Type: 6
+ Loc: 1023
+ Script: <" autobonus "{ bonus bAspdRate, 100; bonus bFlee2, 100; bonus2 bHPLossRate, 400, 1000; bonus2 bSPLossRate, 40, 1000; }", 10, 5000, BF_WEAPON, "{ specialeffect2 EF_FLASHER; }"; ">
+ OnUnequipScript: <" heal 0, -300; ">
+},
+{
+ Id: 4878
+ AegisName: "Muscle_Fool"
+ Name: "Muscle Fool"
+ Type: 6
+ Loc: 1023
+ Script: <" autobonus2 "{ bonus bDef, 1000; bonus bMatkRate, -50; bonus bAtkRate, -50; }", 20, 5000, BF_WEAPON, "{ specialeffect2 EF_MAGNUMBREAK; }"; ">
+ OnUnequipScript: <" heal 0, -300; ">
+},
+{
+ Id: 4879
+ AegisName: "Hawkeye"
+ Name: "Hawkeye"
+ Type: 6
+ Loc: 1023
+ Script: <" autobonus "{ bonus bDex, 200; bonus2 bSPLossRate, 50, 1000; }", 30, 5000, BF_WEAPON, "{ specialeffect2 EF_FLASHER; }"; ">
+ OnUnequipScript: <" heal 0, -300; ">
+},
+{
+ Id: 4880
+ AegisName: "Lucky_Day"
+ Name: "Lucky Day"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ autobonus "{ bonus2 bAddMonsterDropItem, Treasure_Box, 10; bonus bLuk, 200; }", 15, 5000, BF_WEAPON | BF_MAGIC, "{ specialeffect2 EF_MVP; }";
+ autobonus2 "{ bonus2 bAddMonsterDropItem, Treasure_Box, 1; bonus bLuk, 200; }", 1, 5000, BF_WEAPON | BF_MAGIC, "{ specialeffect2 EF_MVP; }";
+ ">
+ OnUnequipScript: <" heal 0, -300; ">
+},
+{
+ Id: 4881
+ AegisName: "Attack_Delay_4"
+ Name: "DelayafterAttack4Lv"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bAspdRate, 10; ">
+},
+{
+ Id: 4882
+ AegisName: "ATK_1"
+ Name: "ATK + 1%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bAtkRate, 1; ">
+},
+{
+ Id: 4883
+ AegisName: "MATK_1"
+ Name: "MATK + 1%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMatkRate, 1; ">
+},
+{
+ Id: 4884
+ AegisName: "HIT_1"
+ Name: "HIT + 1"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bHit, 1; ">
+},
+{
+ Id: 4885
+ AegisName: "Spell_1"
+ Name: "Spell 1"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bMatk, 5;
+ bonus bVariableCastrate, -3;
+ ">
+},
+{
+ Id: 4886
+ AegisName: "Spell_2"
+ Name: "Spell 2"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bMatk, 10;
+ bonus bVariableCastrate, -3;
+ ">
+},
+{
+ Id: 4887
+ AegisName: "Spell_3"
+ Name: "Spell 3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bMatk, 15;
+ bonus bVariableCastrate, -3;
+ ">
+},
+{
+ Id: 4888
+ AegisName: "Spell_4"
+ Name: "Spell 4"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bMatk, 20;
+ bonus bVariableCastrate, -3;
+ ">
+},
+{
+ Id: 4889
+ AegisName: "Spell_5"
+ Name: "Spell 5"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bMatk, 30;
+ bonus bVariableCastrate, -5;
+ ">
+},
+{
+ Id: 4890
+ AegisName: "MDEF_1"
+ Name: "MDEF+1"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMdef, 1; ">
+},
+{
+ Id: 4891
+ AegisName: "MDEF_3"
+ Name: "MDEF+3"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMdef, 3; ">
+},
+{
+ Id: 4892
+ AegisName: "MDEF_5"
+ Name: "MDEF+5"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMdef, 5; ">
+},
+{
+ Id: 4893
+ AegisName: "DEF_15"
+ Name: "DEF+15"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDef, 15; ">
+},
+{
+ Id: 4894
+ AegisName: "ATK_4"
+ Name: "ATK + 4%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bAtkRate, 4; ">
+},
+{
+ Id: 4895
+ AegisName: "ATK_5"
+ Name: "ATK + 5%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bAtkRate, 5; ">
+},
+{
+ Id: 4896
+ AegisName: "MATK_2"
+ Name: "MATK + 2%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMatkRate, 2; ">
+},
+{
+ Id: 4897
+ AegisName: "MATK_3"
+ Name: "MATK + 3%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMatkRate, 3; ">
+},
+{
+ Id: 4898
+ AegisName: "MATK_4"
+ Name: "MATK + 4%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMatkRate, 4; ">
+},
+{
+ Id: 4899
+ AegisName: "MATK_5"
+ Name: "MATK + 5%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMatkRate, 5; ">
+},
+{
+ Id: 4900
+ AegisName: "MHP_5"
+ Name: "MHP+5%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMaxHPrate, 5; ">
+},
+{
+ Id: 4902
+ AegisName: "DEF_18"
+ Name: "DEF+18"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDef, 18; ">
+},
+{
+ Id: 4903
+ AegisName: "DEF_21"
+ Name: "DEF+21"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDef, 21; ">
+},
+{
+ Id: 4904
+ AegisName: "ATK_6"
+ Name: "ATK+6%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bAtkRate, 6; ">
+},
+{
+ Id: 4905
+ AegisName: "ATK_7"
+ Name: "ATK+7%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bAtkRate, 7; ">
+},
+{
+ Id: 4906
+ AegisName: "MATK_6"
+ Name: "MATK+6%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMatkRate, 6; ">
+},
+{
+ Id: 4907
+ AegisName: "MATK_7"
+ Name: "MATK+7%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bAtkRate, 7; ">
+},
+{
+ Id: 4908
+ AegisName: "Essence_Of_Evil_Str1"
+ Name: "Essence Of Evil STR 1"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bStr, 1;
+ bonus bBaseAtk, 3;
+ bonus bInt, -1;
+ ">
+},
+{
+ Id: 4909
+ AegisName: "Essence_Of_Evil_Str2"
+ Name: "Essence Of Evil STR 2"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bStr, 2;
+ bonus bBaseAtk, 6;
+ bonus bInt, -2;
+ ">
+},
+{
+ Id: 4910
+ AegisName: "Essence_Of_Evil_Str3"
+ Name: "Essence Of Evil STR 3"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bStr, 4;
+ bonus bBaseAtk, 12;
+ bonus bInt, -4;
+ ">
+},
+{
+ Id: 4911
+ AegisName: "Essence_Of_Evil_Int1"
+ Name: "Essence Of Evil INT 1"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bInt, 1;
+ bonus bMatk, 3;
+ bonus bStr, -1;
+ ">
+},
+{
+ Id: 4912
+ AegisName: "Essence_Of_Evil_Int2"
+ Name: "Essence Of Evil INT 2"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bInt, 2;
+ bonus bMatk, 6;
+ bonus bStr, -2;
+ ">
+},
+{
+ Id: 4913
+ AegisName: "Essence_Of_Evil_Int3"
+ Name: "Essence Of Evil INT 3"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bInt, 4;
+ bonus bMatk, 12;
+ bonus bStr, -4;
+ ">
+},
+{
+ Id: 4914
+ AegisName: "Essence_Of_Evil_Agi1"
+ Name: "Essence Of Evil AGI 1"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bAgi, 1;
+ bonus bFlee, 2;
+ bonus bVit, -1;
+ ">
+},
+{
+ Id: 4915
+ AegisName: "Essence_Of_Evil_Agi2"
+ Name: "Essence Of Evil AGI 2"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bAgi, 2;
+ bonus bFlee, 4;
+ bonus bVit, -2;
+ ">
+},
+{
+ Id: 4916
+ AegisName: "Essence_Of_Evil_Agi3"
+ Name: "Essence Of Evil AGI 3"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bAgi, 4;
+ bonus bFlee, 8;
+ bonus bVit, -4;
+ ">
+},
+{
+ Id: 4917
+ AegisName: "Essence_Of_Evil_Vit1"
+ Name: "Essence Of Evil VIT 1"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bVit, 1;
+ bonus bDef, 3;
+ bonus bMdef, 2;
+ bonus bAgi, -1;
+ ">
+},
+{
+ Id: 4918
+ AegisName: "Essence_Of_Evil_Vit2"
+ Name: "Essence Of Evil VIT 2"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bVit, 2;
+ bonus bDef, 6;
+ bonus bMdef, 4;
+ bonus bAgi, -2;
+ ">
+},
+{
+ Id: 4919
+ AegisName: "Essence_Of_Evil_Vit3"
+ Name: "Essence Of Evil VIT 3"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bVit, 4;
+ bonus bDef, 12;
+ bonus bMdef, 8;
+ bonus bAgi, -4;
+ ">
+},
+{
+ Id: 4920
+ AegisName: "Essence_Of_Evil_Dex1"
+ Name: "Essence Of Evil DEX 1"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bDex, 1;
+ bonus bHit, 2;
+ bonus bLuk, -1;
+ ">
+},
+{
+ Id: 4921
+ AegisName: "Essence_Of_Evil_Dex2"
+ Name: "Essence Of Evil DEX 2"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bDex, 2;
+ bonus bHit, 4;
+ bonus bLuk, -2;
+ ">
+},
+{
+ Id: 4922
+ AegisName: "Essence_Of_Evil_Dex3"
+ Name: "Essence Of Evil DEX 3"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bDex, 4;
+ bonus bHit, 8;
+ bonus bLuk, -4;
+ ">
+},
+{
+ Id: 4923
+ AegisName: "Essence_Of_Evil_Luk1"
+ Name: "Essence Of Evil LUK 1"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bLuk, 1;
+ bonus bCritical, 1;
+ bonus bDex, -1;
+ ">
+},
+{
+ Id: 4924
+ AegisName: "Essence_Of_Evil_Luk2"
+ Name: "Essence Of Evil LUK 2"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bLuk, 2;
+ bonus bCritical, 2;
+ bonus bDex, -2;
+ ">
+},
+{
+ Id: 4925
+ AegisName: "Essence_Of_Evil_Luk3"
+ Name: "Essence Of Evil LUK 3"
+ Type: 6
+ Weight: 10
+ Loc: 1023
+ Script: <"
+ bonus bLuk, 4;
+ bonus bCritical, 4;
+ bonus bDex, -4;
+ ">
+},
+{
+ Id: 4926
+ AegisName: "Critical1"
+ Name: "Critical1Lv"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bCritical, 1; ">
+},
+{
+ Id: 4927
+ AegisName: "HP50"
+ Name: "HP+50"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMaxHP, 50; ">
+},
+{
+ Id: 4928
+ AegisName: "SP10"
+ Name: "SP+10"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMaxSP, 10; ">
+},
+{
+ Id: 4929
+ AegisName: "MSP_1"
+ Name: "MSP+1%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMaxSPrate, 1; ">
+},
+{
+ Id: 4930
+ AegisName: "Inc_Recovery"
+ Name: "Increase Recovery"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bHPrecovRate, 2; ">
+},
+{
+ Id: 4931
+ AegisName: "Healing_10"
+ Name: "Healing 10"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bHPRegenRate, 10, 10000; ">
+},
+{
+ Id: 4932
+ AegisName: "SP_Recovery_1"
+ Name: "SP Recovery 1"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bSPGainValue, 1; ">
+},
+{
+ Id: 4933
+ AegisName: "Neutral1"
+ Name: "Neutral Properties Lv1"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bSubEle, Ele_Neutral, 1; ">
+},
+{
+ Id: 4934
+ AegisName: "Neutral2"
+ Name: "Neutral Properties Lv2"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bSubEle, Ele_Neutral, 2; ">
+},
+{
+ Id: 4935
+ AegisName: "Neutral3"
+ Name: "Neutral Properties Lv3"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bSubEle, Ele_Neutral, 3; ">
+},
+{
+ Id: 4936
+ AegisName: "L_Atk1"
+ Name: "Large Attack 1"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bAddSize, Size_Large, 1; ">
+},
+{
+ Id: 4937
+ AegisName: "M_Atk1"
+ Name: "Medium Attack 1"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bAddSize, Size_Medium, 1; ">
+},
+{
+ Id: 4938
+ AegisName: "S_Atk1"
+ Name: "Small Attack 1"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bAddSize, Size_Small, 1; ">
+},
+{
+ Id: 4939
+ AegisName: "Critical2"
+ Name: "Critical2Lv"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bCritical, 2; ">
+},
+{
+ Id: 4940
+ AegisName: "Critical3"
+ Name: "Critical3Lv"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bCritical, 4; ">
+},
+{
+ Id: 4941
+ AegisName: "Critical4"
+ Name: "Critical4Lv"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bCritical, 6; ">
+},
+{
+ Id: 4942
+ AegisName: "Critical_1"
+ Name: "Critical Lv1"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bCritical, 3; ">
+},
+{
+ Id: 4943
+ AegisName: "Shedding2"
+ Name: "Shedding2Lv"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bFlee2, 4; ">
+},
+{
+ Id: 4944
+ AegisName: "Shedding3"
+ Name: "Shedding3Lv"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bFlee2, 5; ">
+},
+{
+ Id: 4945
+ AegisName: "Saving1"
+ Name: "Saving Lv1"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bUseSPrate, -2; ">
+},
+{
+ Id: 4946
+ AegisName: "Saving2"
+ Name: "Saving Lv2"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bUseSPrate, -4; ">
+},
+{
+ Id: 4947
+ AegisName: "Saving3"
+ Name: "Saving Lv3"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bUseSPrate, -6; ">
+},
+{
+ Id: 4948
+ AegisName: "Delay1"
+ Name: "Delay After Skill Lv1"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDelayrate, -2; ">
+},
+{
+ Id: 4949
+ AegisName: "Delay2"
+ Name: "Delay After Skill Lv2"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDelayrate, -4; ">
+},
+{
+ Id: 4950
+ AegisName: "Delay3"
+ Name: "Delay After Skill Lv3"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDelayrate, -6; ">
+},
+{
+ Id: 4951
+ AegisName: "Darkness_Drop"
+ Name: "Darkness Drop"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus3 bAddEle, Ele_Dark, 2, BF_WEAPON | BF_MAGIC;
+ bonus2 bSubEle, Ele_Dark, 1;
+ ">
+},
+{
+ Id: 4952
+ AegisName: "Fire_Drop"
+ Name: "Fire Drop"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus3 bAddEle, Ele_Fire, 2, BF_WEAPON | BF_MAGIC;
+ bonus2 bSubEle, Ele_Fire, 1;
+ ">
+},
+{
+ Id: 4953
+ AegisName: "Water_Drop"
+ Name: "Water Drop"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus3 bAddEle, Ele_Water, 2, BF_WEAPON | BF_MAGIC;
+ bonus2 bSubEle, Ele_Water, 1;
+ ">
+},
+{
+ Id: 4954
+ AegisName: "Earth_Drop"
+ Name: "Earth Drop"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus3 bAddEle, Ele_Earth, 2, BF_WEAPON | BF_MAGIC;
+ bonus2 bSubEle, Ele_Earth, 1;
+ ">
+},
+{
+ Id: 4955
+ AegisName: "Light_Drop"
+ Name: "Light Drop"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus3 bAddEle, Ele_Holy, 2, BF_WEAPON | BF_MAGIC;
+ bonus2 bSubEle, Ele_Holy, 1;
+ ">
+},
+{
+ Id: 4956
+ AegisName: "Recovery_Drop"
+ Name: "Recovery Drop"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus2 bSkillHeal, AL_HEAL, 2;
+ bonus2 bSkillHeal, PR_SANCTUARY, 2;
+ bonus2 bSkillHeal, AM_POTIONPITCHER, 2;
+ bonus2 bSkillHeal, AB_HIGHNESS_HEAL, 2;
+ bonus2 bSkillHeal, AB_CHEAL, 2;
+ bonus2 bSkillHeal2, AL_HEAL, 2;
+ bonus2 bSkillHeal2, PR_SANCTUARY, 2;
+ bonus2 bSkillHeal2, AM_POTIONPITCHER, 2;
+ bonus2 bSkillHeal2, AB_HIGHNESS_HEAL, 2;
+ bonus2 bSkillHeal2, AB_CHEAL, 2;
+ bonus bAddItemHealRate, 2;
+ ">
+},
+{
+ Id: 4957
+ AegisName: "The_Power_Of_Famitsu"
+ Name: "The Power Of Famitsu"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMaxHP, 832; ">
+},
+{
+ Id: 4958
+ AegisName: "Double_Pediatric_Palace"
+ Name: "Double Pediatric Palace"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDelayrate, -1; ">
+},
+{
+ Id: 4959
+ AegisName: "Sagittarius"
+ Name: "Sagittarius"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bLongAtkRate, 1; ">
+},
+{
+ Id: 4960
+ AegisName: "Aquarius"
+ Name: "Aquarius"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bUseSPrate, -2; ">
+},
+{
+ Id: 4961
+ AegisName: "Aries"
+ Name: "Aries"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMatk, 10; ">
+},
+{
+ Id: 4962
+ AegisName: "Cancer"
+ Name: "Cancer"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bBaseAtk, 3; ">
+},
+{
+ Id: 4963
+ AegisName: "Taurus"
+ Name: "Taurus"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bBaseAtk, 3;
+ bonus bHit, 1;
+ ">
+},
+{
+ Id: 4964
+ AegisName: "Capricorn"
+ Name: "Capricorn"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMatkRate, 3; ">
+},
+{
+ Id: 4965
+ AegisName: "Pisces"
+ Name: "Pisces"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bVariableCastrate, -2; ">
+},
+{
+ Id: 4966
+ AegisName: "Scorpio"
+ Name: "Scorpio"
+ Type: 6
+ Loc: 1023
+},
+{
+ Id: 4967
+ AegisName: "Leo"
+ Name: "Leo"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bAtkRate, 3; ">
+},
+{
+ Id: 4968
+ AegisName: "Virgo"
+ Name: "Virgo"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus2 bSkillHeal, AL_HEAL, 1;
+ bonus2 bSkillHeal, PR_SANCTUARY, 1;
+ bonus2 bSkillHeal, AM_POTIONPITCHER, 1;
+ bonus2 bSkillHeal, AB_HIGHNESS_HEAL, 1;
+ bonus2 bSkillHeal, AB_CHEAL, 1;
+ ">
+},
+{
+ Id: 4969
+ AegisName: "Libra"
+ Name: "Libra"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus2 bSkillHeal2, AL_HEAL, 1;
+ bonus2 bSkillHeal2, PR_SANCTUARY, 1;
+ bonus2 bSkillHeal2, AM_POTIONPITCHER, 1;
+ bonus2 bSkillHeal2, AB_HIGHNESS_HEAL, 1;
+ bonus2 bSkillHeal2, AB_CHEAL, 1;
+ bonus bAddItemHealRate, 1;
+ ">
+},
+{
+ Id: 4970
+ AegisName: "Fire_Property_Reactor"
+ Name: "Fire Property Reactor"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDefEle, Ele_Fire; ">
+},
+{
+ Id: 4971
+ AegisName: "Water_Property_Reactor"
+ Name: "Water Property Reactor"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDefEle, Ele_Water; ">
+},
+{
+ Id: 4972
+ AegisName: "Earth_Property_Reactor"
+ Name: "Earth Property Reactor"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDefEle, Ele_Earth; ">
+},
+{
+ Id: 4973
+ AegisName: "Wind_Property_Reactor"
+ Name: "Wind Property Reactor"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDefEle, Ele_Wind; ">
+},
+{
+ Id: 4974
+ AegisName: "Fire_Resistance_Reactor"
+ Name: "Fire Resistance Reactor"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus2 bSubEle, Ele_Fire, 25;
+ bonus2 bSubEle, Ele_Water, -25;
+ ">
+},
+{
+ Id: 4975
+ AegisName: "Water_Resistance_Reactor"
+ Name: "Water Resistance Reactor"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus2 bSubEle, Ele_Water, 25;
+ bonus2 bSubEle, Ele_Wind, -25;
+ ">
+},
+{
+ Id: 4976
+ AegisName: "Earth_Resistance_Reactor"
+ Name: "Earth Resistance Reactor"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus2 bSubEle, Ele_Earth, 25;
+ bonus2 bSubEle, Ele_Fire, -25;
+ ">
+},
+{
+ Id: 4977
+ AegisName: "Wind_Resistance_Reactor"
+ Name: "Wind Resistance Reactor"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus2 bSubEle, Ele_Wind, 25;
+ bonus2 bSubEle, Ele_Earth, -25;
+ ">
+},
+{
+ Id: 4978
+ AegisName: "Restoration_Reactor_101"
+ Name: "Restoration Reactor 101"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bHPRegenRate, (getrefine() >= 7) ? 100 : 50, 5000; ">
+},
+{
+ Id: 4979
+ AegisName: "Restoration_Reactor_102"
+ Name: "Restoration Reactor 102"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bSPRegenRate, (getrefine() >= 7) ? 5 : 3, 500; ">
+},
+{
+ Id: 4980
+ AegisName: "Restoration_Reactor_201"
+ Name: "Restoration Reactor 201"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bHPrecovRate, (getrefine() >= 7) ? 100 : 50; ">
+},
+{
+ Id: 4981
+ AegisName: "Restoration_Reactor_202"
+ Name: "Restoration Reactor 202"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bSPrecovRate, (getrefine() >= 7) ? 100 : 50; ">
+},
+{
+ Id: 4982
+ AegisName: "Auxiliary_Reactor_STR"
+ Name: "Auxiliary Reactor STR"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (readparam(bStr) >= 10) bonus bBaseAtk, 5;
+ if (getrefine() >= 7) bonus bBaseAtk, 10;
+ ">
+},
+{
+ Id: 4983
+ AegisName: "Auxiliary_Reactor_INT"
+ Name: "Auxiliary Reactor INT"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (readparam(bInt) >= 10) bonus bMatk, 5;
+ if (getrefine() >= 7) bonus bMatk, 10;
+ ">
+},
+{
+ Id: 4984
+ AegisName: "Auxiliary_Reactor_DEF"
+ Name: "Auxiliary Reactor DEF"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDef, 100; ">
+},
+{
+ Id: 4985
+ AegisName: "Auxiliary_Reactor_Perfect"
+ Name: "Auxiliary Reactor Perfect"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bFlee2, 3; ">
+},
+{
+ Id: 4986
+ AegisName: "Auxiliary_Reactor_Attack"
+ Name: "Auxiliary Reactor Attack"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bBaseAtk, 20; ">
+},
+{
+ Id: 4987
+ AegisName: "Auxiliary_Reactor_Magic"
+ Name: "Auxiliary Reactor Magic"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMatk, 20; ">
+},
+{
+ Id: 4988
+ AegisName: "Auxiliary_Reactor_MaxHP"
+ Name: "Auxiliary Reactor MaxHP"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMaxHPrate, 5; ">
+},
+{
+ Id: 4989
+ AegisName: "Auxiliary_Reactor_MaxSP"
+ Name: "Auxiliary_Reactor_MaxHP"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bMaxSPrate, 3; ">
+},
+{
+ Id: 4990
+ AegisName: "Auxiliary_Reactor_Frozen"
+ Name: "Auxiliary Reactor Frozen"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bResEff, Eff_Freeze, 10000; ">
+},
+{
+ Id: 4991
+ AegisName: "Auxiliary_Reactor_ASPD"
+ Name: "Auxiliary Reactor ASPD"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bAspd, 1; ">
+},
+{
+ Id: 4992
+ AegisName: "HPAbsorb1"
+ Name: "HP Absorb 1"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bHPDrainRate, 1, 1; ">
+},
+{
+ Id: 4993
+ AegisName: "SPAbsorb1"
+ Name: "SP Absorb 1"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bSPDrainRate, 1, 1; ">
+},
+{
+ Id: 4994
+ AegisName: "Rune_Of_Might1"
+ Name: "Rune Of Might 1Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bStr, 5;
+ if (getrefine() >= 10) bonus bAtkRate, 10;
+ ">
+},
+{
+ Id: 4995
+ AegisName: "Rune_Of_Might2"
+ Name: "Rune Of Might 2Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bStr, 6;
+ if (getrefine() >= 11) {
+ bonus bStr, 1;
+ bonus bAtkRate, 7;
+ }
+ ">
+},
+{
+ Id: 4996
+ AegisName: "Rune_Of_Might3"
+ Name: "Rune Of Might 3Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bStr, 7;
+ if (getrefine() >= 12) {
+ bonus bStr, 1;
+ bonus bAtkRate, 8;
+ }
+ if (getrefine() >= 13) {
+ bonus bStr, 1;
+ bonus bAtkRate, 2;
+ }
+ ">
+},
+{
+ Id: 4997
+ AegisName: "Rune_Of_Agility1"
+ Name: "Rune Of Agility 1Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bAgi, 5;
+ if (getrefine() >= 10) bonus bFlee2, 5;
+ ">
+},
+{
+ Id: 4998
+ AegisName: "Rune_Of_Agility2"
+ Name: "Rune Of Agility 2Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bAgi, 6;
+ if (getrefine() >= 11) {
+ bonus bAgi, 1;
+ bonus bFlee2, 7;
+ }
+ ">
+},
+{
+ Id: 4999
+ AegisName: "Rune_Of_Agility3"
+ Name: "Rune Of Agility 3Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bAgi, 7;
+ if (getrefine() >= 12) {
+ bonus bAgi, 1;
+ bonus bFlee2, 5;
+ }
+ if (getrefine() >= 13) {
+ bonus bAgi, 1;
+ bonus bFlee2, 5;
+ }
+ ">
+},
//== More Headgears ========================================
{
@@ -69267,7 +70543,7 @@ item_db: (
Id: 7524
AegisName: "Shadow_Orb"
Name: "Shadow Orb"
- Buy: 225
+ Buy: 300
Weight: 20
BuyingStore: true
},
@@ -75299,6 +76575,8 @@ item_db: (
Weight: 30
Script: <"
itemheal rand(45,65), 0;
+ specialeffect2 EF_CLOAKING;
+ showscript "Trans-Form-!! Bloody Murderer Fo-rm!!";
montransform BLOODY_MURDERER, 600000, SC_MTF_MHP, 1000;
">
},
@@ -75310,6 +76588,8 @@ item_db: (
Weight: 30
Script: <"
itemheal rand(45,65), 0;
+ specialeffect2 EF_CLOAKING;
+ showscript "Trans-Form-!!! Bathory Fo-rm!!";
montransform BATHORY, 600000, SC_MTF_MSP, 100;
">
},
@@ -75321,6 +76601,8 @@ item_db: (
Weight: 30
Script: <"
itemheal rand(45,65),0;
+ specialeffect2 EF_CLOAKING;
+ showscript "Trans-Form-!! Jack Fo-rm!!";
montransform JAKK, 600000, SC_MTF_PUMPKIN, 2000;
">
},
@@ -75332,6 +76614,8 @@ item_db: (
Weight: 30
Script: <"
itemheal rand(45,65),0;
+ specialeffect2 EF_CLOAKING;
+ showscript "Trans-Form-!! Cube Fo-rm!!";
montransform QUVE, 600000, SC_MTF_HITFLEE, 10, 20;
">
},
@@ -77106,7 +78390,7 @@ item_db: (
Buy: 2
Weight: 350
BuyingStore: true
- Script: <" getitem 13204,500; ">
+ Script: <" getitem Lighting_Sphere, 500; ">
},
{
Id: 12145
@@ -77116,7 +78400,7 @@ item_db: (
Buy: 2
Weight: 350
BuyingStore: true
- Script: <" getitem 13206,500; ">
+ Script: <" getitem Blind_Sphere, 500; ">
},
{
Id: 12146
@@ -77126,7 +78410,7 @@ item_db: (
Buy: 2
Weight: 350
BuyingStore: true
- Script: <" getitem 13205,500; ">
+ Script: <" getitem Poison_Sphere, 500; ">
},
{
Id: 12147
@@ -77136,7 +78420,7 @@ item_db: (
Buy: 2
Weight: 350
BuyingStore: true
- Script: <" getitem 13207,500; ">
+ Script: <" getitem Freezing_Sphere, 500; ">
},
{
Id: 12148
@@ -77146,7 +78430,7 @@ item_db: (
Buy: 2
Weight: 350
BuyingStore: true
- Script: <" getitem 13203,500; ">
+ Script: <" getitem Flare_Sphere, 500; ">
},
{
Id: 12149
@@ -77156,7 +78440,7 @@ item_db: (
Buy: 2
Weight: 250
BuyingStore: true
- Script: <" getitem 13200,500; ">
+ Script: <" getitem Bullet, 500; ">
},
{
Id: 12150
@@ -77166,7 +78450,7 @@ item_db: (
Buy: 2
Weight: 250
BuyingStore: true
- Script: <" getitem 13202,500; ">
+ Script: <" getitem Shell_Of_Blood, 500; ">
},
{
Id: 12151
@@ -77176,7 +78460,7 @@ item_db: (
Buy: 2
Weight: 250
BuyingStore: true
- Script: <" getitem 13201,500; ">
+ Script: <" getitem Silver_Bullet, 500; ">
},
{
Id: 12152
@@ -83826,6 +85110,7 @@ item_db: (
}
Script: <"
specialeffect2 EF_CLOAKING;
+ showscript "Trans-Form-!! Deviling Fo-rm!!";
montransform DEVIRUCHI, 1200000, SC_MTF_ASPD, 10, 5;
">
},
@@ -83847,6 +85132,7 @@ item_db: (
}
Script: <"
specialeffect2 EF_CLOAKING;
+ showscript "Trans-Form-!! Raydric Archer Fo-rm!!";
montransform RAYDRIC_ARCHER, 1200000, SC_MTF_RANGEATK, 25;
">
},
@@ -83868,6 +85154,7 @@ item_db: (
}
Script: <"
specialeffect2 EF_CLOAKING;
+ showscript "Trans-Form-!! Mavka Fo-rm!!";
montransform MAVKA, 1200000, SC_MTF_RANGEATK, 25;
">
},
@@ -83889,6 +85176,7 @@ item_db: (
}
Script: <"
specialeffect2 EF_CLOAKING;
+ showscript "Trans-Form-!! Marduk Fo-rm!!";
montransform MARDUK, 1200000, SC_MTF_MATK, 25;
">
},
@@ -83910,6 +85198,7 @@ item_db: (
}
Script: <"
specialeffect2 EF_CLOAKING;
+ showscript "Trans-Form-!! Banshee Fo-rm!!";
montransform BANSHEE, 1200000, SC_MTF_MATK, 25;
">
},
@@ -83931,6 +85220,7 @@ item_db: (
}
Script: <"
specialeffect2 EF_CLOAKING;
+ showscript "Trans-Form-!! Poring Fo-rm!!";
montransform PORING, 1200000, SC_MTF_CRIDAMAGE, 5;
">
},
@@ -83952,6 +85242,7 @@ item_db: (
}
Script: <"
specialeffect2 EF_CLOAKING;
+ showscript "Trans-Form-!! Golem Fo-rm!!";
montransform GOLEM, 1200000, SC_MTF_MLEATKED, 2;
">
},
@@ -91073,7 +92364,7 @@ item_db: (
},
{
Id: 13198
- AegisName: "Tempest_"
+ AegisName: "Tempest"
Name: "Tempest"
Type: 5
Buy: 2200000
@@ -91093,7 +92384,7 @@ item_db: (
},
{
Id: 13199
- AegisName: "Tempest"
+ AegisName: "Tempest_"
Name: "Tempest"
Type: 5
Buy: 2200000
@@ -91125,6 +92416,7 @@ item_db: (
Job: 0x01000000
Loc: 32768
View: 3
+ Script: <" bonus bAtkEle, Ele_Neutral; ">
},
{
Id: 13201
@@ -91150,7 +92442,10 @@ item_db: (
Job: 0x01000000
Loc: 32768
View: 3
- Script: <" bonus2 bAddEff,Eff_Bleeding,100; ">
+ Script: <"
+ bonus bAtkEle, Ele_Neutral;
+ bonus2 bAddEff, Eff_Bleeding, 100;
+ ">
},
{
Id: 13203
@@ -91256,6 +92551,7 @@ item_db: (
Job: 0x41000000
Loc: 32768
View: 3
+ Script: <" bonus bAtkEle, Ele_Neutral; ">
},
{
Id: 13211
@@ -91268,6 +92564,7 @@ item_db: (
Job: 0x41000000
Loc: 32768
View: 3
+ Script: <" bonus bAtkEle, Ele_Neutral; ">
},
{
Id: 13212
@@ -91280,6 +92577,7 @@ item_db: (
Job: 0x41000000
Loc: 32768
View: 3
+ Script: <" bonus bAtkEle, Ele_Neutral; ">
},
{
Id: 13213
@@ -91292,6 +92590,7 @@ item_db: (
Job: 0x41000000
Loc: 32768
View: 3
+ Script: <" bonus bAtkEle, Ele_Neutral; ">
},
{
Id: 13214
@@ -91304,6 +92603,191 @@ item_db: (
Job: 0x41000000
Loc: 32768
View: 3
+ Script: <" bonus bAtkEle, Ele_Neutral; ">
+},
+{
+ Id: 13215
+ AegisName: "Armor_Piercing_Bullet"
+ Name: "Armor-Piercing Bullet"
+ Type: 10
+ Buy: 15
+ Weight: 2
+ Atk: 50
+ Job: 0x41000000
+ Loc: 32768
+ EquipLv: 100
+ View: 3
+ Script: <" bonus bAtkEle, Ele_Neutral; ">
+},
+{
+ Id: 13216
+ AegisName: "Blazing_Bullet"
+ Name: "Blazing Bullet"
+ Type: 10
+ Buy: 10
+ Weight: 2
+ Atk: 40
+ Job: 0x41000000
+ Loc: 32768
+ EquipLv: 100
+ View: 3
+ Script: <" bonus bAtkEle, Ele_Fire; ">
+},
+{
+ Id: 13217
+ AegisName: "Freezing_Bullet"
+ Name: "Freezing Bullet"
+ Type: 10
+ Buy: 10
+ Weight: 2
+ Atk: 40
+ Job: 0x41000000
+ Loc: 32768
+ EquipLv: 100
+ View: 3
+ Script: <" bonus bAtkEle, Ele_Water; ">
+},
+{
+ Id: 13218
+ AegisName: "Lightning_Bullet"
+ Name: "Lightning Bullet"
+ Type: 10
+ Buy: 10
+ Weight: 2
+ Atk: 40
+ Job: 0x41000000
+ Loc: 32768
+ EquipLv: 100
+ View: 3
+ Script: <" bonus bAtkEle, Ele_Wind; ">
+},
+{
+ Id: 13219
+ AegisName: "Magic_Stone_Bullet"
+ Name: "Magic Stone Bullet"
+ Type: 10
+ Buy: 10
+ Weight: 2
+ Atk: 40
+ Job: 0x41000000
+ Loc: 32768
+ EquipLv: 100
+ View: 3
+ Script: <" bonus bAtkEle, Ele_Earth; ">
+},
+{
+ Id: 13220
+ AegisName: "Purifying_Bullet"
+ Name: "Purifying Bullet"
+ Type: 10
+ Buy: 10
+ Weight: 2
+ Atk: 40
+ Job: 0x41000000
+ Loc: 32768
+ EquipLv: 100
+ View: 3
+ Script: <" bonus bAtkEle, Ele_Holy; ">
+},
+{
+ Id: 13221
+ AegisName: "Silver_Bullet_"
+ Name: "Silver Bullet"
+ Type: 10
+ Buy: 5
+ Weight: 2
+ Atk: 15
+ Job: 0x01000000
+ Loc: 32768
+ View: 3
+ Script: <" bonus bAtkEle, Ele_Holy; ">
+},
+{
+ Id: 13222
+ AegisName: "Shell_Of_Blood_"
+ Name: "Bloody Shell"
+ Type: 10
+ Buy: 10
+ Weight: 2
+ Atk: 30
+ Job: 0x01000000
+ Loc: 32768
+ View: 3
+ Script: <"
+ bonus bAtkEle, Ele_Neutral;
+ bonus2 bAddEff, Eff_Bleeding, 100;
+ ">
+},
+{
+ Id: 13223
+ AegisName: "Incendiary_Grenade"
+ Name: "Incendiary Grenade"
+ Type: 10
+ Buy: 15
+ Weight: 5
+ Atk: 50
+ Job: 0x01000000
+ Loc: 32768
+ View: 3
+ Script: <" bonus bAtkEle, Ele_Fire; ">
+},
+{
+ Id: 13224
+ AegisName: "Lightning_Grenade"
+ Name: "Lightning Grenade"
+ Type: 10
+ Buy: 15
+ Weight: 5
+ Atk: 50
+ Job: 0x01000000
+ Loc: 32768
+ View: 3
+ Script: <" bonus bAtkEle, Ele_Wind; ">
+},
+{
+ Id: 13225
+ AegisName: "Poison_Grenade"
+ Name: "Poison Grenade"
+ Type: 10
+ Buy: 15
+ Weight: 5
+ Atk: 50
+ Job: 0x01000000
+ Loc: 32768
+ View: 3
+ Script: <"
+ bonus bAtkEle, Ele_Poison;
+ bonus2 bAddEff, Eff_Poison, 500;
+ ">
+},
+{
+ Id: 13226
+ AegisName: "Flash_Grenade"
+ Name: "Flash Grenade"
+ Type: 10
+ Buy: 15
+ Weight: 5
+ Atk: 50
+ Job: 0x01000000
+ Loc: 32768
+ View: 3
+ Script: <"
+ bonus bAtkEle, Ele_Dark;
+ bonus2 bAddEff, Eff_Blind, 500;
+ ">
+},
+{
+ Id: 13227
+ AegisName: "Cyro_Grenade"
+ Name: "Cyro Grenade"
+ Type: 10
+ Buy: 15
+ Weight: 5
+ Atk: 50
+ Job: 0x01000000
+ Loc: 32768
+ View: 3
+ Script: <" bonus bAtkEle, Ele_Water; ">
},
//== Shurikens & Kunais ====================================
@@ -113182,6 +114666,56 @@ item_db: (
OnUnequipScript: <" heal -1000,0; ">
},
{
+ Id: 16030
+ AegisName: "Pilebunker_S"
+ Name: "Pile Bunker S"
+ Type: 4
+ Weight: 3000
+ Atk: 400
+ Range: 1
+ Slots: 1
+ Job: 0x00000400
+ Upper: 56
+ Loc: 2
+ WeaponLv: 4
+ EquipLv: 130
+ View: 8
+ Script: <" bonus bAspdRate, (getrefine() / 2); ">
+},
+{
+ Id: 16031
+ AegisName: "Pilebunker_P"
+ Name: "Pile Bunker P"
+ Type: 4
+ Weight: 4000
+ Atk: 450
+ Range: 1
+ Job: 0x00000400
+ Upper: 56
+ Loc: 2
+ WeaponLv: 4
+ EquipLv: 130
+ View: 8
+ Script: <" bonus bBaseAtk, (getrefine() * 5); ">
+},
+{
+ Id: 16032
+ AegisName: "Pilebunker_T"
+ Name: "Pile Bunker T"
+ Type: 4
+ Weight: 3500
+ Atk: 400
+ Range: 1
+ Slots: 1
+ Job: 0x00000400
+ Upper: 56
+ Loc: 2
+ WeaponLv: 4
+ EquipLv: 130
+ View: 8
+ Script: <" bonus bUseSPrate, - getrefine(); ">
+},
+{
Id: 16039
AegisName: "Spoon"
Name: "Spoon"
@@ -133749,6 +135283,123 @@ item_db: (
Script: <" percentheal 5,5; ">
},
{
+ Id: 22737
+ AegisName: "Bloody_Cartrige"
+ Name: "Bloody Bullet Case"
+ Type: 2
+ Buy: 2
+ Weight: 250
+ Script: <" getitem Shell_Of_Blood_, 500; ">
+},
+{
+ Id: 22738
+ AegisName: "Silver_Cartrige"
+ Name: "Silver Bullet Case"
+ Type: 2
+ Buy: 2
+ Weight: 250
+ Script: <" getitem Silver_Bullet_, 500; ">
+},
+{
+ Id: 22739
+ AegisName: "Lightning_Sphere_Pack"
+ Name: "Lightning Sphere Pack"
+ Type: 2
+ Buy: 2
+ Weight: 350
+ Script: <" getitem Lightning_Grenade, 500; ">
+},
+{
+ Id: 22740
+ AegisName: "Blind_Sphere_Pack"
+ Name: "Blind Sphere Pack"
+ Type: 2
+ Buy: 2
+ Weight: 350
+ Script: <" getitem Flash_Grenade, 500; ">
+},
+{
+ Id: 22741
+ AegisName: "Poison_Sphere_Pack"
+ Name: "Poison Sphere Pack"
+ Type: 2
+ Buy: 2
+ Weight: 350
+ Script: <" getitem Poison_Grenade, 500; ">
+},
+{
+ Id: 22742
+ AegisName: "Freezing_Sphere_Pack"
+ Name: "Freezing Sphere Pack"
+ Type: 2
+ Buy: 2
+ Weight: 350
+ Script: <" getitem Cyro_Grenade, 500; ">
+},
+{
+ Id: 22743
+ AegisName: "Flare_Sphere_Pack"
+ Name: "Flare Sphere Pack"
+ Type: 2
+ Buy: 2
+ Weight: 350
+ Script: <" getitem Incendiary_Grenade, 500; ">
+},
+{
+ Id: 22744
+ AegisName: "Armor_Piercing_Cartrige"
+ Name: "Armor-Piercing Cartrige"
+ Type: 2
+ Buy: 2
+ Weight: 250
+ Script: <" getitem Armor_Piercing_Bullet, 500; ">
+},
+{
+ Id: 22745
+ AegisName: "Incandescence_Shot_Cartridge"
+ Name: "Incandescence Shot Cartridge"
+ Type: 2
+ Buy: 2
+ Weight: 250
+ Script: <" getitem Blazing_Bullet, 500; ">
+},
+{
+ Id: 22746
+ AegisName: "Glaciation_Shot_Cartridge"
+ Name: "Glaciation Shot Cartridge"
+ Type: 2
+ Buy: 2
+ Weight: 250
+ Script: <" getitem Freezing_Bullet, 500; ">
+},
+{
+ Id: 22747
+ AegisName: "Dengeki_Shot_Cartridge"
+ Name: "Dengeki Shot Cartridge"
+ Type: 2
+ Buy: 2
+ Weight: 250
+ Script: <" getitem Lightning_Bullet, 500; ">
+},
+{
+ Id: 22748
+ AegisName: "Hearthstone_Shot_Cartridge"
+ Name: "Hearthstone Shot Cartridge"
+ Type: 2
+ Buy: 2
+ Weight: 250
+ Script: <" getitem Magic_Stone_Bullet, 500; ">
+},
+{
+ Id: 22749
+ AegisName: "Purification_Shot_Cartridge"
+ Name: "Purification Shot Cartridge"
+ Type: 2
+ Buy: 2
+ Weight: 250
+ Script: <" getitem Purifying_Bullet, 500; ">
+},
+{
Id: 22777
AegisName: "Buff_Gift_Set"
Name: "Buff Gift Set"
@@ -137502,4 +139153,334 @@ item_db: (
}
">
},
+
+//== New Enchantment Stones ================================
+{
+ Id: 29000
+ AegisName: "Rune_Of_Magic1"
+ Name: "Rune Of Magic Power 1Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bInt, 5;
+ if (getrefine() >= 10) bonus bMatkRate, 5;
+ ">
+},
+{
+ Id: 29001
+ AegisName: "Rune_Of_Magic2"
+ Name: "Rune Of Magic Power 2Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bInt, 6;
+ if (getrefine() >= 11) {
+ bonus bInt, 1;
+ bonus bMatkRate, 7;
+ }
+ ">
+},
+{
+ Id: 29002
+ AegisName: "Rune_Of_Magic3"
+ Name: "Rune Of Magic Power 3Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bInt, 7;
+ if (getrefine() >= 12) {
+ bonus bInt, 1;
+ bonus bMatkRate, 8;
+ }
+ if (getrefine() >= 13) {
+ bonus bInt, 1;
+ bonus bMatkRate, 2;
+ }
+ ">
+},
+{
+ Id: 29003
+ AegisName: "Rune_Of_Dexterity1"
+ Name: "Rune Of Dexterity 1Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bDex, 5;
+ if (getrefine() >= 10) bonus bLongAtkRate, 5;
+ ">
+},
+{
+ Id: 29004
+ AegisName: "Rune_Of_Dexterity2"
+ Name: "Rune Of Dexterity 2Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bDex, 6;
+ if (getrefine() >= 11) {
+ bonus bDex, 1;
+ bonus bLongAtkRate, 7;
+ }
+ ">
+},
+{
+ Id: 29005
+ AegisName: "Rune_Of_Dexterity3"
+ Name: "Rune Of Dexterity 3Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bDex, 7;
+ if (getrefine() >= 12) {
+ bonus bDex, 1;
+ bonus bLongAtkRate, 8;
+ }
+ if (getrefine() >= 13) {
+ bonus bDex, 1;
+ bonus bLongAtkRate, 2;
+ }
+ ">
+},
+{
+ Id: 29006
+ AegisName: "Rune_Of_Fortune1"
+ Name: "Rune Of Fortune 1Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bLuk, 5;
+ if (getrefine() >= 10) bonus bCritAtkRate, 5;
+ ">
+},
+{
+ Id: 29007
+ AegisName: "Rune_Of_Fortune2"
+ Name: "Rune Of Fortune 2Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bLuk, 6;
+ if (getrefine() >= 11) {
+ bonus bLuk, 1;
+ bonus bCritAtkRate, 7;
+ }
+ ">
+},
+{
+ Id: 29008
+ AegisName: "Rune_Of_Fortune3"
+ Name: "Rune Of Fortune 3Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bLuk, 7;
+ if (getrefine() >= 12) {
+ bonus bLuk, 1;
+ bonus bCritAtkRate, 8;
+ }
+ if (getrefine() >= 13) {
+ bonus bLuk, 1;
+ bonus bCritAtkRate, 6;
+ }
+ ">
+},
+{
+ Id: 29009
+ AegisName: "Rune_Of_Stamina1"
+ Name: "Rune Of Stamina 1Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bVit, 5;
+ if (getrefine() >= 10) bonus bMaxHPrate, 5;
+ ">
+},
+{
+ Id: 29010
+ AegisName: "Rune_Of_Stamina2"
+ Name: "Rune Of Stamina 2Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bVit, 6;
+ if (getrefine() >= 11) {
+ bonus bVit, 1;
+ bonus bMaxHPrate, 7;
+ }
+ ">
+},
+{
+ Id: 29011
+ AegisName: "Rune_Of_Stamina3"
+ Name: "Rune Of Stamina 3Lv"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ if (getrefine() >= 7) bonus bVit, 7;
+ if (getrefine() >= 12) {
+ bonus bVit, 1;
+ bonus bMaxHPrate, 8;
+ }
+ if (getrefine() >= 13) {
+ bonus bVit, 1;
+ bonus bMaxHPrate, 2;
+ }
+ ">
+},
+{
+ Id: 29013
+ AegisName: "HPAbsorb3"
+ Name: "HP Absorb 3"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bHPDrainRate, 1, 3; ">
+},
+{
+ Id: 29014
+ AegisName: "STR3_INT3"
+ Name: "STR+3 INT-3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bStr, 3;
+ bonus bInt, -3;
+ ">
+},
+{
+ Id: 29015
+ AegisName: "STR3_DEX3"
+ Name: "STR+3 DEX-3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bStr, 3;
+ bonus bDex, -3;
+ ">
+},
+{
+ Id: 29016
+ AegisName: "INT3_DEX3"
+ Name: "INT+3 DEX-3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bInt, 3;
+ bonus bDex, -3;
+ ">
+},
+{
+ Id: 29017
+ AegisName: "INT3_VIT3"
+ Name: "INT+3 VIT-3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bInt, 3;
+ bonus bVit, -3;
+ ">
+},
+{
+ Id: 29018
+ AegisName: "DEX3_VIT3"
+ Name: "DEX+3 VIT-3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bDex, 3;
+ bonus bVit, -3;
+ ">
+},
+{
+ Id: 29019
+ AegisName: "DEX3_AGI3"
+ Name: "DEX+3 AGI-3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bDex, 3;
+ bonus bAgi, -3;
+ ">
+},
+{
+ Id: 29020
+ AegisName: "VIT3_AGI3"
+ Name: "VIT+3 AGI-3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bVit, 3;
+ bonus bAgi, -3;
+ ">
+},
+{
+ Id: 29021
+ AegisName: "VIT3_LUK3"
+ Name: "VIT+3 LUK-3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bVit, 3;
+ bonus bLuk, -3;
+ ">
+},
+{
+ Id: 29022
+ AegisName: "AGI3_LUK3"
+ Name: "AGI+3 LUK-3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bAgi, 3;
+ bonus bLuk, -3;
+ ">
+},
+{
+ Id: 29023
+ AegisName: "AGI3_STR3"
+ Name: "AGI+3 STR-3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bAgi, 3;
+ bonus bStr, -3;
+ ">
+},
+{
+ Id: 29024
+ AegisName: "LUK3_STR3"
+ Name: "LUK+3 STR-3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bLuk, 3;
+ bonus bStr, -3;
+ ">
+},
+{
+ Id: 29025
+ AegisName: "LUK3_INT3"
+ Name: "LUK+3 INT-3"
+ Type: 6
+ Loc: 1023
+ Script: <"
+ bonus bLuk, 3;
+ bonus bInt, -3;
+ ">
+},
+{
+ Id: 29026
+ AegisName: "DEF20"
+ Name: "DEF+20"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus bDef, 20; ">
+},
+{
+ Id: 29027
+ AegisName: "EXP2"
+ Name: "EXP+2%"
+ Type: 6
+ Loc: 1023
+ Script: <" bonus2 bExpAddRace, RC_All, 2; ">
+},
)
diff --git a/db/re/level_penalty.txt b/db/re/level_penalty.txt
index 882aca91b..25005b1bf 100644
--- a/db/re/level_penalty.txt
+++ b/db/re/level_penalty.txt
@@ -8,49 +8,49 @@
// RACE:
// 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect,
// 5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon,
-// 10=Boss monsters, 11=Normal monsters
+// 10=Player, 11=Boss monsters, 12=Normal monsters
//
// Note: RENEWAL_DROP and/or RENEWAL_EXP must be enabled.
// EXP modifiers due to level difference
-1,11,16,40
-1,11,15,115
-1,11,14,120
-1,11,13,125
-1,11,12,130
-1,11,11,135
-1,11,10,140
-1,11,9,135
-1,11,8,130
-1,11,7,125
-1,11,6,120
-1,11,5,115
-1,11,4,110
-1,11,3,105
-1,11,0,100
-1,11,-1,100
-1,11,-6,95
-1,11,-11,90
-1,11,-16,85
-1,11,-21,60
-1,11,-26,35
-1,11,-31,10
+1,12,16,40
+1,12,15,115
+1,12,14,120
+1,12,13,125
+1,12,12,130
+1,12,11,135
+1,12,10,140
+1,12,9,135
+1,12,8,130
+1,12,7,125
+1,12,6,120
+1,12,5,115
+1,12,4,110
+1,12,3,105
+1,12,0,100
+1,12,-1,100
+1,12,-6,95
+1,12,-11,90
+1,12,-16,85
+1,12,-21,60
+1,12,-26,35
+1,12,-31,10
// Boss Type
-1,10,0,100
+1,11,0,100
// Drop rate modifiers due to level difference
-2,11,16,50
-2,11,13,60
-2,11,10,70
-2,11,7,80
-2,11,4,90
-2,11,0,100
-2,11,-4,90
-2,11,-7,80
-2,11,-10,70
-2,11,-13,60
-2,11,-16,50
+2,12,16,50
+2,12,13,60
+2,12,10,70
+2,12,7,80
+2,12,4,90
+2,12,0,100
+2,12,-4,90
+2,12,-7,80
+2,12,-10,70
+2,12,-13,60
+2,12,-16,50
// Boss Type
-2,10,0,100
+2,11,0,100
diff --git a/db/re/mob_skill_db.txt b/db/re/mob_skill_db.txt
index a521a348a..eed7b8e1d 100644
--- a/db/re/mob_skill_db.txt
+++ b/db/re/mob_skill_db.txt
@@ -2520,16 +2520,16 @@
1511,Amon Ra@NPC_BLOODDRAIN,idle,199,1,2000,0,5000,yes,target,always,,,,,,,29,
1511,Amon Ra@NPC_CRITICALWOUND,attack,673,2,500,0,5000,yes,target,always,,,,,,,,
1511,Amon Ra@NPC_DARKBLESSING,attack,203,1,5000,0,2000,no,target,always,,,,,,,,
-1511,Amon Ra@NPC_SUMMONMONSTER,attack,209,5,5000,0,10000,yes,self,casttargeted,,,,,,,9,
-1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,casttargeted,,,,,,,9,
-1511,Amon Ra@NPC_SUMMONMONSTER,attack,209,5,5000,0,10000,yes,self,longrangeattacked,,,,,,,9,
-1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,longrangeattacked,,,,,,,9,
-1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,skillused,28,,,,,,9,
-1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,skillused,18,,,,,,9,
-1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,skillused,21,,,,,,9,
-1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,skillused,79,,,,,,9,
-1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,skillused,83,,,,,,9,
-1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,skillused,89,,,,,,9,
+1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,longrangeattacked,0,1474,1477,1438,,,9,
+1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,casttargeted,0,1474,1477,1438,,,9,
+1511,Amon Ra@NPC_SUMMONMONSTER,attack,209,5,5000,0,10000,no,self,longrangeattacked,0,1474,1477,1438,,,9,
+1511,Amon Ra@NPC_SUMMONMONSTER,attack,209,5,5000,0,10000,no,self,casttargeted,0,1474,1477,1438,,,9,
+1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,skillused,18,1474,1477,1438,,,9,
+1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,skillused,89,1474,1477,1438,,,9,
+1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,skillused,21,1474,1477,1438,,,9,
+1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,skillused,28,1474,1477,1438,,,9,
+1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,skillused,79,1474,1477,1438,,,9,
+1511,Amon Ra@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,skillused,83,1474,1477,1438,,,9,
1511,Amon Ra@WZ_FIREPILLAR,attack,80,10,5000,0,2000,yes,around2,always,,,,,,,,
1511,Amon Ra@WZ_FIREPILLAR,idle,80,10,10000,0,2000,yes,around2,always,,,,,,,,
1511,Amon Ra@WZ_FIREPILLAR,idle,80,10,10000,0,2000,yes,around2,always,,,,,,,,
@@ -3020,7 +3020,7 @@
1646,Lord Knight Seyren@NPC_POWERUP,attack,349,5,2000,0,100000,yes,self,always,,,,,,,,
1646,Lord Knight Seyren@NPC_POWERUP,attack,349,5,2000,0,25000,yes,self,myhpltmaxrate,30,,,,,,,
1646,Lord Knight Seyren@NPC_STUNATTACK,attack,179,5,1000,0,5000,yes,target,always,,,,,,,,
-1646,Lord Knight Seyren@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+1646,Lord Knight Seyren@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,1641,1642,1643,1644,1645,0,
1646,Lord Knight Seyren@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,1641,1642,1643,1644,1645,,
1646,Lord Knight Seyren@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,1641,1642,1643,1644,1645,,
1646,Lord Knight Seyren@SM_BASH,attack,5,10,1000,0,5000,yes,target,always,,,,,,,,
@@ -3053,7 +3053,7 @@
1647,Assassin Cross Eremes@NPC_INVISIBLE,idle,353,1,2000,0,30000,yes,self,always,,,,,,,,
1647,Assassin Cross Eremes@NPC_POISONATTACK,attack,188,10,1000,0,5000,yes,target,always,,,,,,,,
1647,Assassin Cross Eremes@NPC_STUNATTACK,attack,179,5,1000,0,5000,yes,target,always,,,,,,,,
-1647,Assassin Cross Eremes@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+1647,Assassin Cross Eremes@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,1640,1642,1643,1644,1645,0,
1647,Assassin Cross Eremes@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,1640,1642,1643,1644,1645,,
1647,Assassin Cross Eremes@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,1640,1642,1643,1644,1645,,
1647,Assassin Cross Eremes@TF_POISON,attack,52,10,1000,0,10000,yes,target,always,,,,,,,,
@@ -3077,7 +3077,7 @@
1648,MasterSmith Howard@NPC_POWERUP,attack,349,5,2000,0,25000,yes,self,myhpltmaxrate,30,,,,,,,
1648,MasterSmith Howard@NPC_SHIELDBRAKE,attack,346,10,1000,0,5000,yes,target,always,,,,,,,19,
1648,MasterSmith Howard@NPC_SPLASHATTACK,attack,174,1,1000,0,0,yes,target,attackpcge,2,,,,,,,
-1648,MasterSmith Howard@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+1648,MasterSmith Howard@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,1640,1641,1643,1644,1645,0,
1648,MasterSmith Howard@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,1640,1641,1643,1644,1645,,
1648,MasterSmith Howard@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,1640,1641,1643,1644,1645,,
1648,MasterSmith Howard@NPC_WATERATTACK,attack,184,10,1000,0,5000,yes,target,always,,,,,,,,
@@ -3111,7 +3111,7 @@
1649,High Priest Margaretha@NPC_CRITICALSLASH,attack,170,1,1000,0,5000,yes,target,always,,,,,,,,
1649,High Priest Margaretha@NPC_HOLYATTACK,attack,189,10,1000,0,5000,yes,target,always,,,,,,,,
1649,High Priest Margaretha@NPC_STUNATTACK,attack,179,5,1000,0,5000,yes,target,always,,,,,,,,
-1649,High Priest Margaretha@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+1649,High Priest Margaretha@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,1640,1641,1642,1644,1645,0,
1649,High Priest Margaretha@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,1640,1641,1642,1644,1645,,
1649,High Priest Margaretha@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,1640,1641,1642,1644,1645,,
1649,High Priest Margaretha@PR_LEXAETERNA,attack,78,1,1000,0,5000,yes,target,always,,,,,,,29,
@@ -3143,7 +3143,7 @@
1650,Sniper Cecil@NPC_POWERUP,attack,349,5,2000,0,100000,yes,self,always,,,,,,,,
1650,Sniper Cecil@NPC_POWERUP,attack,349,5,2000,0,25000,yes,self,myhpltmaxrate,30,,,,,,,
1650,Sniper Cecil@NPC_STUNATTACK,attack,179,5,1000,0,5000,yes,target,always,,,,,,,,
-1650,Sniper Cecil@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+1650,Sniper Cecil@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,1640,1641,1642,1643,1645,0,
1650,Sniper Cecil@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,1640,1641,1642,1643,1645,,
1650,Sniper Cecil@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,1640,1641,1642,1643,1645,,
1650,Sniper Cecil@NPC_WINDATTACK,attack,187,10,1000,0,5000,yes,target,always,,,,,,,,
@@ -3159,7 +3159,7 @@
1651,High Wizard Kathryne@NPC_CALLSLAVE,idle,352,1,10000,0,10000,yes,self,always,,,,,,,,
1651,High Wizard Kathryne@NPC_CHANGEHOLY,attack,167,1,10000,500,6000000,no,self,myhpltmaxrate,40,,,,,,9,
1651,High Wizard Kathryne@NPC_CHANGETELEKINESIS,attack,169,1,10000,500,6000000,no,self,myhpltmaxrate,10,,,,,,9,
-1651,High Wizard Kathryne@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+1651,High Wizard Kathryne@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,1640,1641,1642,1643,1644,0,
1651,High Wizard Kathryne@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,1640,1641,1642,1643,1644,,
1651,High Wizard Kathryne@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,1640,1641,1642,1643,1644,,
1651,High Wizard Kathryne@WZ_FIREPILLAR,attack,80,10,2000,200,0,yes,around2,always,,,,,,,,
@@ -6029,7 +6029,7 @@
2111,MasterSmith Howard@NPC_POWERUP,attack,349,5,2000,0,25000,yes,self,myhpltmaxrate,30,,,,,,,
2111,MasterSmith Howard@NPC_SHIELDBRAKE,attack,346,10,1000,0,5000,yes,target,always,,,,,,,19,
2111,MasterSmith Howard@NPC_SPLASHATTACK,attack,174,1,1000,0,0,yes,target,attackpcge,2,,,,,,,
-2111,MasterSmith Howard@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+2111,MasterSmith Howard@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,1640,1641,1643,1644,1645,,
2111,MasterSmith Howard@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,yes,self,slavele,3,1640,1641,1643,1644,1645,,
2111,MasterSmith Howard@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,yes,self,slavele,3,1640,1641,1643,1644,1645,,
2111,MasterSmith Howard@NPC_WATERATTACK,attack,184,10,1000,0,5000,yes,target,always,,,,,,,,
@@ -6051,7 +6051,7 @@
2112,Lord Knight Seyren@NPC_POWERUP,attack,349,5,2000,0,100000,yes,self,always,,,,,,,,
2112,Lord Knight Seyren@NPC_POWERUP,attack,349,5,2000,0,25000,yes,self,myhpltmaxrate,30,,,,,,,
2112,Lord Knight Seyren@NPC_STUNATTACK,attack,179,5,1000,0,5000,yes,target,always,,,,,,,,
-2112,Lord Knight Seyren@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+2112,Lord Knight Seyren@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,1641,1642,1643,1644,1645,,
2112,Lord Knight Seyren@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,yes,self,slavele,3,1641,1642,1643,1644,1645,,
2112,Lord Knight Seyren@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,yes,self,slavele,3,1641,1642,1643,1644,1645,,
2112,Lord Knight Seyren@SM_BASH,attack,5,10,1000,0,5000,yes,target,always,,,,,,,,
@@ -6084,7 +6084,7 @@
2113,Assassin Cross Eremes@NPC_INVISIBLE,idle,353,1,2000,0,30000,yes,self,always,,,,,,,,
2113,Assassin Cross Eremes@NPC_POISONATTACK,attack,188,10,1000,0,5000,yes,target,always,,,,,,,,
2113,Assassin Cross Eremes@NPC_STUNATTACK,attack,179,5,1000,0,5000,yes,target,always,,,,,,,,
-2113,Assassin Cross Eremes@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+2113,Assassin Cross Eremes@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,1640,1642,1643,1644,1645,,
2113,Assassin Cross Eremes@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,yes,self,slavele,3,1640,1642,1643,1644,1645,,
2113,Assassin Cross Eremes@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,yes,self,slavele,3,1640,1642,1643,1644,1645,,
2113,Assassin Cross Eremes@TF_POISON,attack,52,10,1000,0,10000,yes,target,always,,,,,,,,
@@ -7301,7 +7301,7 @@
2235,Randel@NPC_POWERUP,attack,349,5,2000,0,100000,yes,self,always,,,,,,,,
2235,Randel@NPC_POWERUP,attack,349,5,2000,0,25000,yes,self,myhpltmaxrate,30,,,,,,,
2235,Randel@NPC_STUNATTACK,attack,179,5,2000,0,5000,yes,target,always,,,,,,,,
-2235,Randel@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+2235,Randel@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,2229,2230,2231,2232,2233,,
2235,Randel@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,2229,2230,2231,2232,2233,,
2235,Randel@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,2229,2230,2231,2232,2233,,
2235,Randel@PA_PRESSURE,attack,367,5,500,0,5000,no,target,always,,,,,,,,
@@ -7328,7 +7328,7 @@
2236,Flamel@NPC_CRITICALSLASH,attack,170,1,1000,0,5000,yes,target,always,,,,,,,,
2236,Flamel@NPC_FIREATTACK,attack,186,5,1000,0,5000,yes,target,always,,,,,,,,
2236,Flamel@NPC_STUNATTACK,attack,179,5,1000,0,5000,yes,target,always,,,,,,,,
-2236,Flamel@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+2236,Flamel@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,2228,2230,2231,2232,2233,,
2236,Flamel@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,2228,2230,2231,2232,2233,,
2236,Flamel@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,2228,2230,2231,2232,2233,,
2237,Celia@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,,,,,,,,
@@ -7359,7 +7359,7 @@
2237,Celia@NPC_CHANGETELEKINESIS,attack,169,1,10000,500,6000000,no,self,myhpltmaxrate,10,,,,,,9,
2237,Celia@NPC_MENTALBREAKER,attack,159,5,2000,0,5000,yes,target,always,,,,,,,7,
2237,Celia@NPC_MENTALBREAKER,chase,159,5,2000,0,5000,yes,target,always,,,,,,,7,
-2237,Celia@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+2237,Celia@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,2228,2229,2231,2232,2233,,
2237,Celia@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,2228,2229,2231,2232,2233,,
2237,Celia@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,2228,2229,2231,2232,2233,,
2237,Celia@NPC_WIDESOULDRAIN,attack,680,5,1000,500,5000,no,self,always,,,,,,,42,
@@ -7398,7 +7398,7 @@
2238,Chen@NPC_POWERUP,attack,349,1,2000,0,100000,yes,self,always,,,,,,,,
2238,Chen@NPC_POWERUP,attack,349,1,2000,0,25000,yes,self,myhpltmaxrate,30,,,,,,,
2238,Chen@NPC_STUNATTACK,attack,179,5,1000,0,5000,yes,target,always,,,,,,,,
-2238,Chen@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+2238,Chen@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,2228,2229,2230,2232,2233,,
2238,Chen@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,2228,2229,2230,2232,2233,,
2238,Chen@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,2228,2229,2230,2232,2233,,
2239,Gertie@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,,,,,,,,
@@ -7420,7 +7420,7 @@
2239,Gertie@NPC_POISONATTACK,attack,188,10,1000,0,5000,yes,target,always,,,,,,,,
2239,Gertie@NPC_SHIELDBRAKE,attack,346,5,500,0,20000,yes,target,myhpltmaxrate,70,,,,,,,
2239,Gertie@NPC_STUNATTACK,attack,179,5,1000,0,5000,yes,target,always,,,,,,,,
-2239,Gertie@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+2239,Gertie@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,2228,2229,2230,2231,2233,,
2239,Gertie@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,2228,2229,2230,2231,2233,,
2239,Gertie@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,2228,2229,2230,2231,2233,,
2239,Gertie@NPC_WEAPONBRAKER,attack,343,1,500,0,30000,yes,target,myhpltmaxrate,30,,,,,,,
@@ -7445,7 +7445,7 @@
2240,Alphoccio@NPC_SLOWCAST,attack,672,1,2000,800,30000,no,self,always,,,,,,,36,
2240,Alphoccio@NPC_SLOWCAST,chase,672,1,2000,300,30000,no,self,always,,,,,,,36,
2240,Alphoccio@NPC_STUNATTACK,attack,179,5,1000,0,5000,yes,target,always,,,,,,,,
-2240,Alphoccio@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+2240,Alphoccio@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,2228,2229,2230,2231,2232,,
2240,Alphoccio@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,2228,2229,2230,2231,2232,,
2240,Alphoccio@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,2228,2229,2230,2231,2232,,
2240,Alphoccio@NPC_WINDATTACK,attack,187,5,1000,0,5000,yes,target,always,,,,,,,,
@@ -7460,7 +7460,7 @@
2241,Trentini@NPC_SLOWCAST,attack,672,1,2000,800,30000,no,self,always,,,,,,,36,
2241,Trentini@NPC_SLOWCAST,chase,672,1,2000,300,30000,no,self,always,,,,,,,36,
2241,Trentini@NPC_STUNATTACK,attack,179,5,1000,0,5000,yes,target,always,,,,,,,,
-2241,Trentini@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,,,,,,,
+2241,Trentini@NPC_SUMMONMONSTER,attack,209,5,10000,700,60000000,yes,self,myhpltmaxrate,30,2228,2229,2230,2231,2232,,
2241,Trentini@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,2228,2229,2230,2231,2232,,
2241,Trentini@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,2228,2229,2230,2231,2232,,
2241,Trentini@NPC_UGLYDANCE,attack,2541,5,1000,1000,70000,no,target,always,,,,,,,,
@@ -7904,16 +7904,16 @@
2362,Amon Ra (Nightmare)@NPC_BLOODDRAIN,idle,199,1,2000,0,5000,yes,target,always,,,,,,,29,
2362,Amon Ra (Nightmare)@NPC_CRITICALWOUND,attack,673,2,500,0,5000,yes,target,always,,,,,,,,
2362,Amon Ra (Nightmare)@NPC_DARKBLESSING,attack,203,1,5000,0,2000,no,target,always,,,,,,,,
-2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,attack,209,5,5000,0,10000,yes,self,casttargeted,,,,,,,9,
-2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,casttargeted,,,,,,,9,
-2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,attack,209,5,5000,0,10000,yes,self,longrangeattacked,,,,,,,9,
-2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,longrangeattacked,,,,,,,9,
-2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,skillused,28,,,,,,9,
-2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,skillused,18,,,,,,9,
-2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,skillused,21,,,,,,9,
-2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,skillused,79,,,,,,9,
-2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,skillused,83,,,,,,9,
-2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,yes,self,skillused,89,,,,,,9,
+2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,longrangeattacked,0,2359,2357,,,,9,
+2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,casttargeted,0,2359,2357,,,,9,
+2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,attack,209,5,5000,0,10000,no,self,longrangeattacked,0,2359,2357,,,,9,
+2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,attack,209,5,5000,0,10000,no,self,casttargeted,0,2359,2357,,,,9,
+2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,skillused,18,2359,2357,,,,9,
+2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,skillused,89,2359,2357,,,,9,
+2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,skillused,21,2359,2357,,,,9,
+2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,skillused,28,2359,2357,,,,9,
+2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,skillused,79,2359,2357,,,,9,
+2362,Amon Ra (Nightmare)@NPC_SUMMONMONSTER,idle,209,5,5000,0,10000,no,self,skillused,83,2359,2357,,,,9,
2362,Amon Ra (Nightmare)@WZ_FIREPILLAR,attack,80,10,5000,0,2000,yes,around2,always,,,,,,,,
2362,Amon Ra (Nightmare)@WZ_FIREPILLAR,idle,80,10,10000,0,2000,yes,around2,always,,,,,,,,
2362,Amon Ra (Nightmare)@WZ_FIREPILLAR,idle,80,10,10000,0,2000,yes,around2,always,,,,,,,,
diff --git a/db/re/skill_require_db.txt b/db/re/skill_require_db.txt
index 11b345e68..1e7cd23d2 100644
--- a/db/re/skill_require_db.txt
+++ b/db/re/skill_require_db.txt
@@ -616,7 +616,7 @@
//****
// NC Mechanic
2256,0,0,3:6:9:12:15,0,0,0,99,0,0,mado,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE#Boost Knuckle#
-2257,0,0,50,0,0,0,99,0,0,mado,0,1549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_PILEBUNKER#Pile Bunker#
+2257,0,0,50,0,0,0,99,0,0,mado,0,1549:16030:16031:16032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_PILEBUNKER#Pile Bunker#
2258,0,0,2:4:6,0,0,0,99,0,0,mado,0,6145,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_VULCANARM#Vulcan Arm#
2259,0,0,20,0,0,0,99,0,0,mado,0,2139,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER#Flame Launcher#
2260,0,0,20,0,0,0,99,0,0,mado,0,6146,1,6147,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_COLDSLOWER#Cold Slower#
diff --git a/db/re/skill_unit_db.txt b/db/re/skill_unit_db.txt
index fc74dcbce..ba9b3841a 100644
--- a/db/re/skill_unit_db.txt
+++ b/db/re/skill_unit_db.txt
@@ -30,7 +30,7 @@
21,0x86, , 0, 2,1000,enemy, 0x018 //MG_THUNDERSTORM
25,0x85, , 1, 0, -1,all, 0x2003 //AL_PNEUMA
27,0x81,0x80, 0, 0, -1,all, 0x00E //AL_WARP
- 47,0x86, , 0, 2:2:2:2:2:3:3:3:3:3,1000,enemy, 0x080 //AC_SHOWER
+ 47,0x86, , 0, 1:1:1:1:1:2:2:2:2:2,1000,enemy, 0x080 //AC_SHOWER
70,0x83, , -1, 1,1000,all, 0x018 //PR_SANCTUARY
79,0x84, , -1, 1,3000,enemy, 0x018 //PR_MAGNUS
80,0x87,0x88, 0, 1,2000,enemy, 0x006 //WZ_FIREPILLAR
diff --git a/doc/sample/npc_dynamic_shop.txt b/doc/sample/npc_dynamic_shop.txt
index 1e4ac77e4..9b1315ba7 100644
--- a/doc/sample/npc_dynamic_shop.txt
+++ b/doc/sample/npc_dynamic_shop.txt
@@ -9,7 +9,7 @@
//============================================================
// Dummy shop to insert items into:
-- shop dyn_shop1 -1,501:50.
+- shop dyn_shop1 FAKE_NPC,501:50.
prontera,181,200,4 script Dynamic Shop 2_F_MAGICMASTER,{
callshop "dyn_shop1",0;
diff --git a/doc/sample/npc_test_duplicate.txt b/doc/sample/npc_test_duplicate.txt
index 55d64bc7b..4e07e38c4 100644
--- a/doc/sample/npc_test_duplicate.txt
+++ b/doc/sample/npc_test_duplicate.txt
@@ -12,7 +12,7 @@
//= 'OnInit' loads the main npc last, for some reason. (check with debugmes)
//============================================================
-- script Test Script -1,1,1,{
+- script Test Script FAKE_NPC,1,1,{
mes "Hi.";
mes "My coords are "+ .map$ +", "+ .x +"/" +.y ;
close;
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index c6ee8fc76..cb7ded9df 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -249,7 +249,7 @@ OnTouch events with a 2,2 range and with an 'end' after the header to avoid
bugs (for more info on why see npc_click@map/npc.c). It is possible to use a job
sprite as well, but you must first define it as a monster sprite in 'mob_avail.txt',
a full description on how to do this is not in the scope of this manual.
-A '-1' sprite will make the NPC invisible (and unclickable).
+A 'FAKE_NPC' sprite will make the NPC invisible (and unclickable).
A 'HIDDEN_NPC' sprite will make an NPC which does not have a sprite, but is
still clickable, which is useful if you want to make a clickable object of
the 3D terrain.
@@ -271,7 +271,7 @@ optional parameter.
** Define a 'floating' NPC object.
--%TAB%script%TAB%<NPC Name>%TAB%-1,{<code>}
+-%TAB%script%TAB%<NPC Name>%TAB%FAKE_NPC,{<code>}
This will define an NPC object not triggerable by normal means. This would
normally mean it's pointless since it can't do anything, but there are
@@ -303,7 +303,7 @@ items here. The layout used to define sale items still count, and
** Define a trader NPC
<map name>,<x>,<y>,<facing>%TAB%trader%TAB%<NPC Name>%TAB%<sprite>,{<code>}
--%TAB%trader%TAB%<NPC Name>%TAB%-1,{<code>}
+-%TAB%trader%TAB%<NPC Name>%TAB%FAKE_NPC,{<code>}
All the standards that are valid to script objects are also valid for trader objects
(see ** Define an NPC object for more information).
@@ -1922,7 +1922,7 @@ Example:
dothat;
}
- - script test -1,{
+ - script test FAKE_NPC,{
.@try = is_function("try"); // 1
.@not = is_function("not"); // 0
}
@@ -6694,7 +6694,7 @@ and source flags are ignored.
*callshop "<name>",<option>;
These are a series of commands used to create dynamic shops.
-The callshop function calls an invisible shop (view -1) as if the player
+The callshop function calls an invisible shop (FAKE_NPC) as if the player
clicked on it.
For the options on callShop:
@@ -7464,7 +7464,7 @@ Usage example:
When a user types the command "@test", an angel effect will be shown.
-- script atcmd_example -1,{
+- script atcmd_example FAKE_NPC,{
OnInit:
bindatcmd "test",strnpcinfo(3)+"::OnAtcommand";
end;
@@ -7502,7 +7502,7 @@ Parameter splitting example:
The called event label needs to take care of joining arguments together, in
case it expects spaces. For example:
-- script atcmd_example -1,{
+- script atcmd_example FAKE_NPC,{
OnInit:
bindatcmd "test",strnpcinfo(3)+"::OnAtcommand";
end;
@@ -7613,7 +7613,7 @@ configuration, it will eventually return to that cycle.
Example:
-- script DayNight -1,{
+- script DayNight FAKE_NPC,{
OnClock0600:
day;
end;
@@ -7779,6 +7779,19 @@ Example:
---------------------------------------
+*swap <variable>,<variable>;
+
+Swap the value of 2 variables. Both sides must be same integer or string type.
+
+Example:
+ .@var1 = 111;
+ .@var2 = 222;
+ swap .@var1, .@var2;
+ mes "var1 = "+ .@var1; // return 222
+ mes "var2 = "+ .@var2; // return 111
+
+---------------------------------------
+
*query_sql("your MySQL query"{, <array variable>{, <array variable>{, ...}}});
*query_logsql("your MySQL query"{, <array variable>{, <array variable>{, ...}}});
diff --git a/doc/whisper_sys.txt b/doc/whisper_sys.txt
index 39e2a54f2..ba7165b87 100644
--- a/doc/whisper_sys.txt
+++ b/doc/whisper_sys.txt
@@ -29,7 +29,7 @@ You whisper an NPC "NPCCommander" in-game with the following instructions:
The parameters are passed on to the "OnWhisperGlobal" label of the NPC, and can
be processed accordingly:
-- script NPCCommander -1,{
+- script NPCCommander FAKE_NPC,{
OnWhisperGlobal:
// Inform player "Lordalfa" that he has been reported for killstealing.
if (@whispervar0$ == "Report")
@@ -39,7 +39,7 @@ OnWhisperGlobal:
This could also be used for hidden event triggers:
-- script EventManager -1,{
+- script EventManager FAKE_NPC,{
OnWhisperGlobal:
if (getgmlevel() < 80) end;
if (@whispervar0$ == "pvp") {
diff --git a/npc/MOTD.txt b/npc/MOTD.txt
index d85c3c9ed..1e5912f4a 100644
--- a/npc/MOTD.txt
+++ b/npc/MOTD.txt
@@ -28,7 +28,7 @@
//=========================================================================
// run when any character logs in, attached to them.
-- script HerculesMOTD -1,{
+- script HerculesMOTD FAKE_NPC,{
message strcharinfo(0),"Welcome to Hercules! Enjoy! Please report any bugs you find.";
end;
}
diff --git a/npc/airports/airships.txt b/npc/airports/airships.txt
index 1535fef90..89e5cbae6 100644
--- a/npc/airports/airships.txt
+++ b/npc/airports/airships.txt
@@ -58,7 +58,7 @@ OnTouch:
airplane,243,29,0 duplicate(#AirshipWarp-1) #AirshipWarp-2 WARPNPC,1,1
-airplane,1,1,0 script Domestic_Airship -1,{
+airplane,1,1,0 script Domestic_Airship FAKE_NPC,{
end;
OnInit:
initnpctimer;
@@ -693,7 +693,7 @@ OnUnhide:
airplane_01,243,29,0 duplicate(#AirshipWarp-3) #AirshipWarp-4 WARPNPC,1,1
-airplane_01,1,1,0 script International_Airship -1,{
+airplane_01,1,1,0 script International_Airship FAKE_NPC,{
end;
OnInit:
OnEnable:
diff --git a/npc/airports/izlude.txt b/npc/airports/izlude.txt
index 69abd9cd6..7f794de1f 100644
--- a/npc/airports/izlude.txt
+++ b/npc/airports/izlude.txt
@@ -31,7 +31,7 @@
//= Official Izlude Airport NPCs
//=========================================================================
-- script ::Airship_Staff_izlude -1,{
+- script ::Airship_Staff_izlude FAKE_NPC,{
mes "[Airship Staff]";
mes "Welcome! Would you like";
mes "to board the Airship that";
diff --git a/npc/battleground/flavius/flavius01.txt b/npc/battleground/flavius/flavius01.txt
index 8b02b0469..44e084284 100644
--- a/npc/battleground/flavius/flavius01.txt
+++ b/npc/battleground/flavius/flavius01.txt
@@ -390,14 +390,14 @@ OnTouch:
end;
}
-bat_b01,87,76,0 script A_CODE#bat_b01 -1,5,5,{
+bat_b01,87,76,0 script A_CODE#bat_b01 FAKE_NPC,5,5,{
OnTouch:
if (!questprogress(2070))
setquest 2070;
end;
}
-bat_b01,312,224,0 script B_CODE#bat_b01 -1,5,5,{
+bat_b01,312,224,0 script B_CODE#bat_b01 FAKE_NPC,5,5,{
OnTouch:
if (!questprogress(2070))
setquest 2070;
diff --git a/npc/battleground/flavius/flavius02.txt b/npc/battleground/flavius/flavius02.txt
index 3d474cff5..f9e8247fe 100644
--- a/npc/battleground/flavius/flavius02.txt
+++ b/npc/battleground/flavius/flavius02.txt
@@ -390,14 +390,14 @@ OnTouch:
end;
}
-bat_b02,87,76,0 script A_CODE#bat_b02 -1,5,5,{
+bat_b02,87,76,0 script A_CODE#bat_b02 FAKE_NPC,5,5,{
OnTouch:
//if (!questprogress(2070))
// setquest 2070;
end;
}
-bat_b02,312,224,0 script B_CODE#bat_b02 -1,5,5,{
+bat_b02,312,224,0 script B_CODE#bat_b02 FAKE_NPC,5,5,{
OnTouch:
//if (!questprogress(2070))
// setquest 2070;
diff --git a/npc/battleground/kvm/kvm01.txt b/npc/battleground/kvm/kvm01.txt
index 08c92d7ba..0e737d0c0 100644
--- a/npc/battleground/kvm/kvm01.txt
+++ b/npc/battleground/kvm/kvm01.txt
@@ -64,7 +64,7 @@ OnEnterBG:
bat_room,169,211,0 warp #kvm802 2,2,bat_room,154,150
//== Starting Line =========================================
-- script KVM01::CellEffect -1,{
+- script KVM01::CellEffect FAKE_NPC,{
end;
OnKvM01One:
@@ -135,7 +135,7 @@ OnTouch:
}
//== Battleground Engine ===================================
-- script KvM01_BG -1,{
+- script KvM01_BG FAKE_NPC,{
end;
OnInit:
@@ -348,7 +348,7 @@ OnReset:
end;
}
-- script KvM01_BG_Out -1,{
+- script KvM01_BG_Out FAKE_NPC,{
end;
OnBegin:
diff --git a/npc/battleground/kvm/kvm02.txt b/npc/battleground/kvm/kvm02.txt
index ccca49656..02f684a1d 100644
--- a/npc/battleground/kvm/kvm02.txt
+++ b/npc/battleground/kvm/kvm02.txt
@@ -65,7 +65,7 @@ OnEnterBG:
bat_room,197,211,0 warp #kvm602 2,2,bat_room,154,150
//== Starting Line =========================================
-- script KVM02::CellEffect2 -1,{
+- script KVM02::CellEffect2 FAKE_NPC,{
end;
OnKvM02One:
@@ -136,7 +136,7 @@ OnTouch:
}
//== Battleground Engine ===================================
-- script KvM02_BG -1,{
+- script KvM02_BG FAKE_NPC,{
end;
OnInit:
@@ -349,7 +349,7 @@ OnReset:
end;
}
-- script KvM02_BG_Out -1,{
+- script KvM02_BG_Out FAKE_NPC,{
end;
OnBegin:
diff --git a/npc/battleground/kvm/kvm03.txt b/npc/battleground/kvm/kvm03.txt
index efbfb3984..d99f78a34 100644
--- a/npc/battleground/kvm/kvm03.txt
+++ b/npc/battleground/kvm/kvm03.txt
@@ -65,7 +65,7 @@ OnEnterBG:
bat_room,225,211,0 warp #kvm702 2,2,bat_room,154,150
//== Starting Line =========================================
-- script KVM03::CellEffect3 -1,{
+- script KVM03::CellEffect3 FAKE_NPC,{
end;
OnKvM03One:
@@ -136,7 +136,7 @@ OnTouch:
}
//== Battleground Engine ===================================
-- script KvM03_BG -1,{
+- script KvM03_BG FAKE_NPC,{
end;
OnInit:
@@ -349,7 +349,7 @@ OnReset:
end;
}
-- script KvM03_BG_Out -1,{
+- script KvM03_BG_Out FAKE_NPC,{
end;
OnBegin:
diff --git a/npc/battleground/tierra/tierra01.txt b/npc/battleground/tierra/tierra01.txt
index 3391fffc0..ec35b5cc4 100644
--- a/npc/battleground/tierra/tierra01.txt
+++ b/npc/battleground/tierra/tierra01.txt
@@ -86,7 +86,7 @@ OnTimer1000:
end;
}
-bat_a01,352,342,0 script #bat_a01_quest_a -1,5,5,{
+bat_a01,352,342,0 script #bat_a01_quest_a FAKE_NPC,5,5,{
end;
OnTouch:
@@ -95,7 +95,7 @@ OnTouch:
end;
}
-bat_a01,353,52,0 script #bat_a01_quest_b -1,5,5,{
+bat_a01,353,52,0 script #bat_a01_quest_b FAKE_NPC,5,5,{
end;
OnTouch:
@@ -519,7 +519,7 @@ OnTimer26500:
end;
}
-bat_a01,51,375,0 script bat_a01_rp1_a_warp -1,10,10,{
+bat_a01,51,375,0 script bat_a01_rp1_a_warp FAKE_NPC,10,10,{
OnInit:
disablenpc "bat_a01_rp1_a_warp";
end;
@@ -569,7 +569,7 @@ OnTimer26500:
end;
}
-bat_a01,43,17,0 script bat_a01_rp1_b_warp -1,10,10,{
+bat_a01,43,17,0 script bat_a01_rp1_b_warp FAKE_NPC,10,10,{
OnInit:
disablenpc "bat_a01_rp1_b_warp";
end;
@@ -609,7 +609,7 @@ OnTimer26500:
end;
}
-bat_a01,55,213,0 script bat_a01_rp1_n_warp -1,10,10,{
+bat_a01,55,213,0 script bat_a01_rp1_n_warp FAKE_NPC,10,10,{
OnInit:
disablenpc "bat_a01_rp1_n_warp";
end;
@@ -620,42 +620,42 @@ OnTouch:
end;
}
-bat_a01,194,267,0 script barri_warp_up#bat_a01_a -1,7,0,{
+bat_a01,194,267,0 script barri_warp_up#bat_a01_a FAKE_NPC,7,0,{
OnTouch:
if (getcharid(4) == $@TierraBG1_id1)
warp "bat_a01",194,261;
end;
}
-bat_a01,194,265,0 script barri_warp_down#bat_a01a -1,7,0,{
+bat_a01,194,265,0 script barri_warp_down#bat_a01a FAKE_NPC,7,0,{
OnTouch:
if (getcharid(4) == $@TierraBG1_id1)
warp "bat_a01",194,270;
end;
}
-bat_a01,177,130,0 script barri_warp_up#bat_a01_b -1,7,0,{
+bat_a01,177,130,0 script barri_warp_up#bat_a01_b FAKE_NPC,7,0,{
OnTouch:
if (getcharid(4) == $@TierraBG1_id2)
warp "bat_a01",178,125;
end;
}
-bat_a01,177,128,0 script barri_warp_down#bat_a01b -1,7,0,{
+bat_a01,177,128,0 script barri_warp_down#bat_a01b FAKE_NPC,7,0,{
OnTouch:
if (getcharid(4) == $@TierraBG1_id2)
warp "bat_a01",178,134;
end;
}
-bat_a01,352,342,0 script A_CODE#bat_a01 -1,5,5,{
+bat_a01,352,342,0 script A_CODE#bat_a01 FAKE_NPC,5,5,{
OnTouch:
if (questprogress(2069) == 1)
setquest 2069;
end;
}
-bat_a01,353,52,0 script B_CODE#bat_a01 -1,5,5,{
+bat_a01,353,52,0 script B_CODE#bat_a01 FAKE_NPC,5,5,{
OnTouch:
if (questprogress(2069) == 1)
setquest 2069;
diff --git a/npc/battleground/tierra/tierra02.txt b/npc/battleground/tierra/tierra02.txt
index f84f083d5..ef6b3b3ee 100644
--- a/npc/battleground/tierra/tierra02.txt
+++ b/npc/battleground/tierra/tierra02.txt
@@ -86,7 +86,7 @@ OnTimer1000:
end;
}
-bat_a02,352,342,0 script #bat_a02_quest_a -1,5,5,{
+bat_a02,352,342,0 script #bat_a02_quest_a FAKE_NPC,5,5,{
end;
OnTouch:
@@ -95,7 +95,7 @@ OnTouch:
end;
}
-bat_a02,353,52,0 script #bat_a02_quest_b -1,5,5,{
+bat_a02,353,52,0 script #bat_a02_quest_b FAKE_NPC,5,5,{
end;
OnTouch:
@@ -519,7 +519,7 @@ OnTimer26500:
end;
}
-bat_a02,51,375,0 script bat_a02_rp1_a_warp -1,10,10,{
+bat_a02,51,375,0 script bat_a02_rp1_a_warp FAKE_NPC,10,10,{
OnInit:
disablenpc "bat_a02_rp1_a_warp";
end;
@@ -569,7 +569,7 @@ OnTimer26500:
end;
}
-bat_a02,43,17,0 script bat_a02_rp1_b_warp -1,10,10,{
+bat_a02,43,17,0 script bat_a02_rp1_b_warp FAKE_NPC,10,10,{
OnInit:
disablenpc "bat_a02_rp1_b_warp";
end;
@@ -609,7 +609,7 @@ OnTimer26500:
end;
}
-bat_a02,55,213,0 script bat_a02_rp1_n_warp -1,10,10,{
+bat_a02,55,213,0 script bat_a02_rp1_n_warp FAKE_NPC,10,10,{
OnInit:
disablenpc "bat_a02_rp1_n_warp";
end;
@@ -620,42 +620,42 @@ OnTouch:
end;
}
-bat_a02,194,267,0 script barri_warp_up#bat_a02_a -1,7,0,{
+bat_a02,194,267,0 script barri_warp_up#bat_a02_a FAKE_NPC,7,0,{
OnTouch:
if (getcharid(4) == $@TierraBG2_id1)
warp "bat_a02",194,261;
end;
}
-bat_a02,194,265,0 script barri_warp_down#bat_a02a -1,7,0,{
+bat_a02,194,265,0 script barri_warp_down#bat_a02a FAKE_NPC,7,0,{
OnTouch:
if (getcharid(4) == $@TierraBG2_id1)
warp "bat_a02",194,270;
end;
}
-bat_a02,177,130,0 script barri_warp_up#bat_a02_b -1,7,0,{
+bat_a02,177,130,0 script barri_warp_up#bat_a02_b FAKE_NPC,7,0,{
OnTouch:
if (getcharid(4) == $@TierraBG2_id2)
warp "bat_a02",178,125;
end;
}
-bat_a02,177,128,0 script barri_warp_down#bat_a02b -1,7,0,{
+bat_a02,177,128,0 script barri_warp_down#bat_a02b FAKE_NPC,7,0,{
OnTouch:
if (getcharid(4) == $@TierraBG2_id2)
warp "bat_a02",178,134;
end;
}
-bat_a02,352,342,0 script A_CODE#bat_a02 -1,5,5,{
+bat_a02,352,342,0 script A_CODE#bat_a02 FAKE_NPC,5,5,{
OnTouch:
if (questprogress(2069) == 1)
setquest 2069;
end;
}
-bat_a02,353,52,0 script B_CODE#bat_a02 -1,5,5,{
+bat_a02,353,52,0 script B_CODE#bat_a02 FAKE_NPC,5,5,{
OnTouch:
if (questprogress(2069) == 1)
setquest 2069;
diff --git a/npc/cities/amatsu.txt b/npc/cities/amatsu.txt
index 4d4ab6803..3939f28f6 100644
--- a/npc/cities/amatsu.txt
+++ b/npc/cities/amatsu.txt
@@ -47,7 +47,7 @@
//=========================================================================
//= Amatsu Transportation ==================================
-- script ::Sea_Captain_amatsu -1,{
+- script ::Sea_Captain_amatsu FAKE_NPC,{
mes "[Walter Moers]";
mes "Hey, there.";
mes "Have you ever heard that there";
diff --git a/npc/cities/ayothaya.txt b/npc/cities/ayothaya.txt
index e5caf8af3..618a71413 100644
--- a/npc/cities/ayothaya.txt
+++ b/npc/cities/ayothaya.txt
@@ -39,7 +39,7 @@
//=========================================================================
//== Ayothaya Transportation ===============================
-- script ::Aibakthing_ayothaya -1,{
+- script ::Aibakthing_ayothaya FAKE_NPC,{
mes "[Aibakthing]";
mes "Hoo! Hah! Hoo! Hah!";
mes "Let me take you away to";
diff --git a/npc/cities/gonryun.txt b/npc/cities/gonryun.txt
index ddcea9935..81aebace9 100644
--- a/npc/cities/gonryun.txt
+++ b/npc/cities/gonryun.txt
@@ -40,7 +40,7 @@
//=========================================================================
//== Kunlun Transportation =================================
-- script ::Kunlun_Envoy_gonryun -1,{
+- script ::Kunlun_Envoy_gonryun FAKE_NPC,{
mes "[Wa Bai Hu]";
mes "Good day~";
mes "Let me invite you all";
diff --git a/npc/cities/izlude.txt b/npc/cities/izlude.txt
index 5db9d0988..777edaec1 100644
--- a/npc/cities/izlude.txt
+++ b/npc/cities/izlude.txt
@@ -42,7 +42,7 @@
//=========================================================================
//== Izlude ================================================
-- script ::Sailor_izlude -1,{
+- script ::Sailor_izlude FAKE_NPC,{
mes "[Sailor]";
mes "Hey everybody!";
mes "Attention, attention!";
@@ -76,7 +76,7 @@
}
}
-- script ::Bonne_izlude -1,{
+- script ::Bonne_izlude FAKE_NPC,{
mes "[Bonne]";
mes "Greetings!";
mes "Izlude welcomes you.";
@@ -100,7 +100,7 @@
close;
}
-- script ::Charfri_izlude -1,{
+- script ::Charfri_izlude FAKE_NPC,{
mes "[Charfri]";
switch(rand(2)) {
case 1:
@@ -131,7 +131,7 @@
}
}
-- script ::Cuskoal_izlude -1,{
+- script ::Cuskoal_izlude FAKE_NPC,{
mes "[Cuskoal]";
switch(rand(2)) {
case 1:
@@ -155,7 +155,7 @@
}
}
-- script ::Dega_izlude -1,{
+- script ::Dega_izlude FAKE_NPC,{
mes "[Dega]";
switch(rand(3)) {
case 1:
@@ -230,7 +230,7 @@
}
}
-- script ::Kylick_izlude -1,{
+- script ::Kylick_izlude FAKE_NPC,{
if (!RENEWAL && rand(2)) {
mes "[Kylick]";
mes "I was thinking, even though the people of Izlude live so close to the ocean...";
@@ -262,7 +262,7 @@
}
}
-- script ::Red_izlude -1,{
+- script ::Red_izlude FAKE_NPC,{
mes "[Red]";
mes "The only skill that's needed for a Swordman is ^FF2400Bash^000000! Bash, Bash and ONLY ^FF2400Bash^000000! No need to waste time and effort for smaller skills! Everything else is for cowards and wusses!";
next;
@@ -332,7 +332,7 @@
close;
}
-- script ::Cebalis_izlude -1,{
+- script ::Cebalis_izlude FAKE_NPC,{
mes "[Red]";
mes "The only skill that's needed for a Swordman is ^FF2400Bash^000000! Bash, Bash and ONLY ^FF2400Bash^000000! No need to waste time and effort on smaller skills~~ Everything else is for cowards and wusses!";
next;
@@ -409,7 +409,7 @@
close;
}
-- script ::Soldier_izlude -1,{
+- script ::Soldier_izlude FAKE_NPC,{
mes "[Soldier]";
mes "HeHeHeHe..HaHaHaHa ";
mes "Huh? Why am I so happy?";
diff --git a/npc/cities/jawaii.txt b/npc/cities/jawaii.txt
index 2ac6b57b2..0c29442c6 100644
--- a/npc/cities/jawaii.txt
+++ b/npc/cities/jawaii.txt
@@ -692,7 +692,7 @@ OnSolo:
end;
}
-jawaii_in,28,96,0 script jaw_em_order#Jawaii -1,3,3,{
+jawaii_in,28,96,0 script jaw_em_order#Jawaii FAKE_NPC,3,3,{
OnTouch:
if (getpartnerid()) {
donpcevent "Employee#jaw8::OnWelcome";
@@ -1399,7 +1399,7 @@ prt_in,170,14,0 script Customer#Bachewcca 4_M_ORIENT02,{
}
//== Izlude ================================================
-- script ::Honeymoon_Helper_Izlude -1,{
+- script ::Honeymoon_Helper_Izlude FAKE_NPC,{
mes "[Helper]";
mes "Newlyweds and";
mes "long time couples...";
diff --git a/npc/cities/lighthalzen.txt b/npc/cities/lighthalzen.txt
index e7dfb8351..f1e8996df 100644
--- a/npc/cities/lighthalzen.txt
+++ b/npc/cities/lighthalzen.txt
@@ -2998,7 +2998,7 @@ lhz_in01,139,48,7 script Leimi#mimir 1_F_MERCHANT_01,{
close;
}
-lhz_in01,138,47,0 script #mimir_camera -1,2,2,{
+lhz_in01,138,47,0 script #mimir_camera FAKE_NPC,2,2,{
OnTouch:
if (BaseJob == Job_Assassin) {
if (Sex) {
diff --git a/npc/cities/louyang.txt b/npc/cities/louyang.txt
index b0138e86f..c73c6c2df 100644
--- a/npc/cities/louyang.txt
+++ b/npc/cities/louyang.txt
@@ -46,7 +46,7 @@
//=========================================================================
//== Louyang Transportation ================================
-- script ::Girl_louyang -1,{
+- script ::Girl_louyang FAKE_NPC,{
mes "[Girl]";
mes "La la la la~";
mes "I feel so good today~";
diff --git a/npc/cities/moscovia.txt b/npc/cities/moscovia.txt
index 5531a48da..f8ff35f24 100644
--- a/npc/cities/moscovia.txt
+++ b/npc/cities/moscovia.txt
@@ -34,7 +34,7 @@
//=========================================================================
//== Moscovia Transportation :: mosk_trans =================
-- script ::PR_Officer_moscovia -1,{
+- script ::PR_Officer_moscovia FAKE_NPC,{
mes "[Moscovia P.R. Officer]";
mes "Moscovia! Do you know Moscovia?";
mes "the paradise spreading on the endless seas...";
diff --git a/npc/cities/splendide.txt b/npc/cities/splendide.txt
index 5c43f9dc5..cbd45c4c8 100644
--- a/npc/cities/splendide.txt
+++ b/npc/cities/splendide.txt
@@ -456,7 +456,7 @@ spl_in01,287,306,3 script #spl_prs HIDDEN_NPC,{
}
}
-spl_in01,265,315,0 script #spl_prs1 -1,5,5,{
+spl_in01,265,315,0 script #spl_prs1 FAKE_NPC,5,5,{
OnTouch:
if ((isequipped(2782) == 1) && (ep13_2_rhea == 100)) {
mes "[Voice from another side]";
diff --git a/npc/cities/umbala.txt b/npc/cities/umbala.txt
index 8f0c39658..26c91b37e 100644
--- a/npc/cities/umbala.txt
+++ b/npc/cities/umbala.txt
@@ -1017,7 +1017,7 @@ um_in,158,71,3 script Utan villager#um 4_M_UMKID,{
close;
}
-umbala,140,197,1 script Bungee Jump -1,0,0,{
+umbala,140,197,1 script Bungee Jump FAKE_NPC,0,0,{
OnTouch:
switch(rand(1,3)) {
case 1:
@@ -1037,7 +1037,7 @@ OnTouch:
}
}
-umbala,136,195,0 script #jump -1,1,1,{
+umbala,136,195,0 script #jump FAKE_NPC,1,1,{
OnTouch:
warp "umbala",145,166;
end;
diff --git a/npc/cities/yuno.txt b/npc/cities/yuno.txt
index 59486c8c0..ccc8a91ae 100644
--- a/npc/cities/yuno.txt
+++ b/npc/cities/yuno.txt
@@ -253,7 +253,7 @@ yuno,157,205,4 script Juno Artisan#juno 1_M_JOBGUIDER,{
}
}
-- script ::JunoSoldier1 -1,{
+- script ::JunoSoldier1 FAKE_NPC,{
mes "[Juno Soldier]";
mes "Welcome to Juno, the city of noble-mindedness.";
next;
@@ -268,7 +268,7 @@ yuno,157,205,4 script Juno Artisan#juno 1_M_JOBGUIDER,{
close;
}
-- script ::JunoSoldier2 -1,{
+- script ::JunoSoldier2 FAKE_NPC,{
mes "[Juno Soldier]";
mes "Welcome to Juno, the city of noble-mindedness.";
next;
@@ -284,7 +284,7 @@ yuno,157,205,4 script Juno Artisan#juno 1_M_JOBGUIDER,{
close;
}
-- script ::JunoSoldier3 -1,{
+- script ::JunoSoldier3 FAKE_NPC,{
mes "[Juno Soldier]";
mes "Welcome to Juno, the city of noble-mindedness.";
next;
@@ -296,7 +296,7 @@ yuno,157,205,4 script Juno Artisan#juno 1_M_JOBGUIDER,{
close;
}
-- script ::JunoSoldier4 -1,{
+- script ::JunoSoldier4 FAKE_NPC,{
mes "[Juno Soldier]";
mes "Welcome to Juno, the city of noble-mindedness.";
next;
@@ -311,7 +311,7 @@ yuno,157,205,4 script Juno Artisan#juno 1_M_JOBGUIDER,{
close;
}
-- script ::JunoSoldier5 -1,{
+- script ::JunoSoldier5 FAKE_NPC,{
mes "[Juno Soldier]";
mes "Welcome to Juno, the city of noble-mindedness.";
next;
@@ -327,7 +327,7 @@ yuno,157,205,4 script Juno Artisan#juno 1_M_JOBGUIDER,{
close;
}
-- script ::JunoSoldier6 -1,{
+- script ::JunoSoldier6 FAKE_NPC,{
mes "[Juno Soldier]";
mes "Welcome to Juno, the city of noble-mindedness.";
next;
@@ -339,7 +339,7 @@ yuno,157,205,4 script Juno Artisan#juno 1_M_JOBGUIDER,{
close;
}
-- script ::JunoSoldier7 -1,{
+- script ::JunoSoldier7 FAKE_NPC,{
mes "[Juno Soldier]";
mes "Welcome to Juno, the city of noble-mindedness.";
next;
diff --git a/npc/custom/battleground/bg_common.txt b/npc/custom/battleground/bg_common.txt
index 54b13bb28..3ece8d512 100644
--- a/npc/custom/battleground/bg_common.txt
+++ b/npc/custom/battleground/bg_common.txt
@@ -1157,7 +1157,7 @@ bat_room,161,158,3 duplicate(bat_aid) General Guillaume's Aid::bat_aid4 4_M_KY_H
// Exit from Registration
// *********************************************************************
-- script warp2bat_room -1,{
+- script warp2bat_room FAKE_NPC,{
end;
OnTouch:
diff --git a/npc/custom/battleground/bg_flavius_01.txt b/npc/custom/battleground/bg_flavius_01.txt
index 30693da21..33c662d93 100644
--- a/npc/custom/battleground/bg_flavius_01.txt
+++ b/npc/custom/battleground/bg_flavius_01.txt
@@ -28,7 +28,7 @@ OnEnterBG:
// Battleground Engine
// *********************************************************************
-- script Flavius_BG1 -1,{
+- script Flavius_BG1 FAKE_NPC,{
end;
OnInit:
diff --git a/npc/custom/battleground/bg_flavius_02.txt b/npc/custom/battleground/bg_flavius_02.txt
index c735614c1..eef7cf308 100644
--- a/npc/custom/battleground/bg_flavius_02.txt
+++ b/npc/custom/battleground/bg_flavius_02.txt
@@ -28,7 +28,7 @@ OnEnterBG:
// Battleground Engine
// *********************************************************************
-- script Flavius_BG2 -1,{
+- script Flavius_BG2 FAKE_NPC,{
end;
OnInit:
diff --git a/npc/custom/battleground/bg_kvm01.txt b/npc/custom/battleground/bg_kvm01.txt
index be826215e..a4bd65e43 100644
--- a/npc/custom/battleground/bg_kvm01.txt
+++ b/npc/custom/battleground/bg_kvm01.txt
@@ -49,7 +49,7 @@ bat_c01,145,60,0 duplicate(#bat_c01a) #bat_c01f HIDDEN_NPC
// Battleground Engine
// *********************************************************************
-- script KvM01_BG -1,{
+- script KvM01_BG FAKE_NPC,{
end;
OnInit:
@@ -258,7 +258,7 @@ OnReset:
end;
}
-- script KvM01_BG_Out -1,{
+- script KvM01_BG_Out FAKE_NPC,{
end;
OnBegin:
diff --git a/npc/custom/battleground/bg_kvm02.txt b/npc/custom/battleground/bg_kvm02.txt
index 91e594a90..833a33747 100644
--- a/npc/custom/battleground/bg_kvm02.txt
+++ b/npc/custom/battleground/bg_kvm02.txt
@@ -49,7 +49,7 @@ bat_c02,145,60,0 duplicate(#bat_c02a) #bat_c02f HIDDEN_NPC
// Battleground Engine
// *********************************************************************
-- script KvM02_BG -1,{
+- script KvM02_BG FAKE_NPC,{
end;
OnInit:
@@ -258,7 +258,7 @@ OnReset:
end;
}
-- script KvM02_BG_Out -1,{
+- script KvM02_BG_Out FAKE_NPC,{
end;
OnBegin:
diff --git a/npc/custom/battleground/bg_kvm03.txt b/npc/custom/battleground/bg_kvm03.txt
index 33edb0be7..9ca29deaf 100644
--- a/npc/custom/battleground/bg_kvm03.txt
+++ b/npc/custom/battleground/bg_kvm03.txt
@@ -49,7 +49,7 @@ bat_c03,145,60,0 duplicate(#bat_c03a) #bat_c03f HIDDEN_NPC
// Battleground Engine
// *********************************************************************
-- script KvM03_BG -1,{
+- script KvM03_BG FAKE_NPC,{
end;
OnInit:
@@ -258,7 +258,7 @@ OnReset:
end;
}
-- script KvM03_BG_Out -1,{
+- script KvM03_BG_Out FAKE_NPC,{
end;
OnBegin:
diff --git a/npc/custom/battleground/bg_tierra_01.txt b/npc/custom/battleground/bg_tierra_01.txt
index 797b3a389..05b48c63e 100644
--- a/npc/custom/battleground/bg_tierra_01.txt
+++ b/npc/custom/battleground/bg_tierra_01.txt
@@ -28,7 +28,7 @@ OnEnterBG:
// Battleground Engine
// *********************************************************************
-- script Tierra_BG1 -1,{
+- script Tierra_BG1 FAKE_NPC,{
end;
OnInit:
@@ -262,7 +262,7 @@ bat_a01,119,336,1 duplicate(Guillaume camp#bat) Guillaume camp#bat18 1_FLAG_LION
// Barricades
// *********************************************************************
-- script Guillaume_TV1B -1,{
+- script Guillaume_TV1B FAKE_NPC,{
end;
OnBuild:
@@ -288,7 +288,7 @@ OnWall:
end;
}
-- script Croix_TV1B -1,{
+- script Croix_TV1B FAKE_NPC,{
end;
OnBuild:
diff --git a/npc/custom/battleground/bg_tierra_02.txt b/npc/custom/battleground/bg_tierra_02.txt
index f18d60769..b3b6cff21 100644
--- a/npc/custom/battleground/bg_tierra_02.txt
+++ b/npc/custom/battleground/bg_tierra_02.txt
@@ -28,7 +28,7 @@ OnEnterBG:
// Battleground Engine
// *********************************************************************
-- script Tierra_BG2 -1,{
+- script Tierra_BG2 FAKE_NPC,{
end;
OnInit:
@@ -262,7 +262,7 @@ bat_a02,119,336,1 duplicate(Guillaume camp#bat) Guillaume camp#bat31 1_FLAG_LION
// Barricades
// *********************************************************************
-- script Guillaume_TV2B -1,{
+- script Guillaume_TV2B FAKE_NPC,{
end;
OnBuild:
@@ -288,7 +288,7 @@ OnWall:
end;
}
-- script Croix_TV2B -1,{
+- script Croix_TV2B FAKE_NPC,{
end;
OnBuild:
diff --git a/npc/custom/bgqueue/flavius.txt b/npc/custom/bgqueue/flavius.txt
index 01a4888df..8fac6a76b 100644
--- a/npc/custom/bgqueue/flavius.txt
+++ b/npc/custom/bgqueue/flavius.txt
@@ -422,14 +422,14 @@ OnTouch:
end;
}
-bat_b01,87,76,0 script A_CODE#bat_b01 -1,5,5,{
+bat_b01,87,76,0 script A_CODE#bat_b01 FAKE_NPC,5,5,{
OnTouch:
if (!questprogress(2070))
setquest 2070;
end;
}
-bat_b01,312,224,0 script B_CODE#bat_b01 -1,5,5,{
+bat_b01,312,224,0 script B_CODE#bat_b01 FAKE_NPC,5,5,{
OnTouch:
if (!questprogress(2070))
setquest 2070;
diff --git a/npc/custom/etc/airplane.txt b/npc/custom/etc/airplane.txt
index 544dbed61..138755f6b 100644
--- a/npc/custom/etc/airplane.txt
+++ b/npc/custom/etc/airplane.txt
@@ -13,7 +13,7 @@
//= 2.2 Added missing next;'s [Evera]
//============================================================
-payon,153,43,5 script itinsetter -1,{
+payon,153,43,5 script itinsetter FAKE_NPC,{
//This is just OnInit stuff to set the hourly intinerary.
OnInit:
deletearray $locationsname$[0],500;
diff --git a/npc/custom/etc/floating_rates.txt b/npc/custom/etc/floating_rates.txt
index c207c6275..109a5217c 100644
--- a/npc/custom/etc/floating_rates.txt
+++ b/npc/custom/etc/floating_rates.txt
@@ -13,7 +13,7 @@
//= You can make incredible scripts with 'setbattleflag'!
//============================================================
-- script FloatingRates -1,{
+- script FloatingRates FAKE_NPC,{
OnInit:
//add any other HOURS
OnHour00:
diff --git a/npc/custom/etc/lottery.txt b/npc/custom/etc/lottery.txt
index 9d4c4df38..13d60ec2f 100644
--- a/npc/custom/etc/lottery.txt
+++ b/npc/custom/etc/lottery.txt
@@ -15,7 +15,7 @@
//= 1.2.1a fix due to new script engine
//============================================================
-- script lotterygenerator -1,{
+- script lotterygenerator FAKE_NPC,{
OnInit:
set $L_TicketPrice,4750; // TICKET COST
set $L_Prize_Money,5000000; // JACKPOT AMOUNT
diff --git a/npc/custom/etc/marriage.txt b/npc/custom/etc/marriage.txt
index ab1b48c30..1d6d21c2a 100644
--- a/npc/custom/etc/marriage.txt
+++ b/npc/custom/etc/marriage.txt
@@ -13,7 +13,7 @@
//============================================================
// Configuration Variables:
-- script marriage_init -1,{
+- script marriage_init FAKE_NPC,{
OnInit:
set $@wed_allow, 0; //If 1, allows same sex marriages.
set $@wed_veil, 0; //Set to 0 to disable veil check on the bride
diff --git a/npc/custom/etc/monster_arena.txt b/npc/custom/etc/monster_arena.txt
index 9c00b67a5..3a25679aa 100644
--- a/npc/custom/etc/monster_arena.txt
+++ b/npc/custom/etc/monster_arena.txt
@@ -557,154 +557,154 @@ L_Heal:
// Kill Trigger //
// 6/Final. ---Change to Add Monsters--- //
-gon_test,56,91,6 script OnPoringKilled -1,{
+gon_test,56,91,6 script OnPoringKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+1;
announce "You killed a Poring - Gained 1 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnFaberKilled -1,{
+gon_test,56,91,6 script OnFaberKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+2;
announce "You killed a Faber - Gained 2 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnLunaticKilled -1,{
+gon_test,56,91,6 script OnLunaticKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+4;
announce "You killed a Lunatic - Gained 4 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnDropsKilled -1,{
+gon_test,56,91,6 script OnDropsKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+4;
announce "You killed a Drops - Gained 4 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnPickyKilled -1,{
+gon_test,56,91,6 script OnPickyKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+4;
announce "You killed a Picky - Gained 4 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnChonChonKilled -1,{
+gon_test,56,91,6 script OnChonChonKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+8;
announce "You killed a ChonChon - Gained 8 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnSPickyKilled -1,{
+gon_test,56,91,6 script OnSPickyKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+8;
announce "You killed a Super Picky - Gained 8 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnWillowKilled -1,{
+gon_test,56,91,6 script OnWillowKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+8;
announce "You killed a Willow - Gained 8 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnRodaKilled -1,{
+gon_test,56,91,6 script OnRodaKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+16;
announce "You killed a Roda Frog - Gained 16 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnCondorKilled -1,{
+gon_test,56,91,6 script OnCondorKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+16;
announce "You killed a Condor - Gained 16 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnThiefKilled -1,{
+gon_test,56,91,6 script OnThiefKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+32;
announce "You killed a Theif Bug Larva - Gained 32 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnSavageKilled -1,{
+gon_test,56,91,6 script OnSavageKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+64;
announce "You killed a Savage Babe - Gained 64 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnFamiliarKilled -1,{
+gon_test,56,91,6 script OnFamiliarKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+128;
announce "You killed a Familiar - Gained 128 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnHornetKilled -1,{
+gon_test,56,91,6 script OnHornetKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+128;
announce "You killed a Hornet - Gained 128 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnPuppyKilled -1,{
+gon_test,56,91,6 script OnPuppyKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+256;
announce "You killed a Desert Wolf Puppy - Gained 256 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnRockerKilled -1,{
+gon_test,56,91,6 script OnRockerKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+256;
announce "You killed a Rocker - Gained 256 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnSporeKilled -1,{
+gon_test,56,91,6 script OnSporeKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+256;
announce "You killed a Spore - Gained 256 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnSkeletonKilled -1,{
+gon_test,56,91,6 script OnSkeletonKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+512;
announce "You killed a Skeleton - Gained 512 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnPlanktonKilled -1,{
+gon_test,56,91,6 script OnPlanktonKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+512;
announce "You killed a Plankton - Gained 512 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnAntonioKilled -1,{
+gon_test,56,91,6 script OnAntonioKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+512;
announce "You killed an Antonio - Gained 512 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnThiefFemaleKilled -1,{
+gon_test,56,91,6 script OnThiefFemaleKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+512;
announce "You killed a Thief Bug Female - Gained 512 exp",19;
callfunc "duelkill";
}
-gon_test,56,91,6 script OnSpecialKilled -1,{
+gon_test,56,91,6 script OnSpecialKilled FAKE_NPC,{
if (@marena == 0) callfunc "illegalkill";
set #monpoints,#monpoints+512;
announce "You killed a Special Monster - Gained 1024 exp",19;
diff --git a/npc/custom/etc/quest_warper.txt b/npc/custom/etc/quest_warper.txt
index fd6865a54..c00559c8f 100644
--- a/npc/custom/etc/quest_warper.txt
+++ b/npc/custom/etc/quest_warper.txt
@@ -1608,7 +1608,7 @@ binget:
}
//============================Warpras==============================
-- script Warpra#0 -1,{ callfunc "Q_Warpra",1; }
+- script Warpra#0 FAKE_NPC,{ callfunc "Q_Warpra",1; }
alb2trea,73,101,4 duplicate(Warpra#0) Warpra#1 4_F_KAFRA5
ama_fild01,178,325,1 duplicate(Warpra#0) Warpra#2 4_F_KAFRA5
gef_fild10,71,339,4 duplicate(Warpra#0) Warpra#3 4_F_KAFRA5
diff --git a/npc/custom/etc/stock_market.txt b/npc/custom/etc/stock_market.txt
index 078ce5137..1d480d770 100644
--- a/npc/custom/etc/stock_market.txt
+++ b/npc/custom/etc/stock_market.txt
@@ -15,7 +15,7 @@
//= so use it on your own risk
//============================================================
-- script sharenames -1,{
+- script sharenames FAKE_NPC,{
end;
OnInit:
// Sets the names of the shares //
diff --git a/npc/custom/events/uneasy_cemetery.txt b/npc/custom/events/uneasy_cemetery.txt
index b996dc4d7..6b1351eb4 100644
--- a/npc/custom/events/uneasy_cemetery.txt
+++ b/npc/custom/events/uneasy_cemetery.txt
@@ -17,7 +17,7 @@
//= 1.2a Changed item names to item IDs. [Samuray22]
//============================================================
-prontera,3,3,3 script Uneasy_Check -1,{
+prontera,3,3,3 script Uneasy_Check FAKE_NPC,{
end;
OnHour00:
diff --git a/npc/custom/healer.txt b/npc/custom/healer.txt
index 530f5301f..b05a24487 100644
--- a/npc/custom/healer.txt
+++ b/npc/custom/healer.txt
@@ -12,7 +12,7 @@
//= 1.2 Fix variables and character stuck at healing
//============================================================
-- script Healer -1,{
+- script Healer FAKE_NPC,{
.@price = 0; // Zeny required for heal
.@Buffs = 0; // Also buff players? (1: yes / 0: no)
diff --git a/npc/custom/quests/bandit_beard.txt b/npc/custom/quests/bandit_beard.txt
index dc2d837fb..fa02843e3 100644
--- a/npc/custom/quests/bandit_beard.txt
+++ b/npc/custom/quests/bandit_beard.txt
@@ -207,7 +207,7 @@ M_NO:
}
//mobsummons -------
-alberta,1,1,1 script BRDQ_MOBS -1,{
+alberta,1,1,1 script BRDQ_MOBS FAKE_NPC,{
OnStart:
set $@beardmob,10;
set $@beardMobD,0;
diff --git a/npc/custom/quests/event_6_new_hats.txt b/npc/custom/quests/event_6_new_hats.txt
index b72d895df..d53427f14 100644
--- a/npc/custom/quests/event_6_new_hats.txt
+++ b/npc/custom/quests/event_6_new_hats.txt
@@ -324,7 +324,7 @@ L3:
//these scripts make our brothers to appear and disappear in order
-- script EDZac -1,{
+- script EDZac FAKE_NPC,{
OnInit:
OnMinute15:
disablenpc "Zac";
@@ -335,7 +335,7 @@ OnMinute01:
end;
}
-- script EDJac -1,{
+- script EDJac FAKE_NPC,{
OnInit:
OnMinute30:
disablenpc "Jac";
@@ -346,7 +346,7 @@ OnMinute16:
end;
}
-- script EDPac -1,{
+- script EDPac FAKE_NPC,{
OnInit:
OnMinute45:
disablenpc "Pac";
@@ -357,7 +357,7 @@ OnMinute31:
end;
}
-- script EDBlac -1,{
+- script EDBlac FAKE_NPC,{
OnInit:
OnMinute00:
disablenpc "Blac";
diff --git a/npc/custom/quests/hunting_missions.txt b/npc/custom/quests/hunting_missions.txt
index 2b6057a51..372c6bffe 100644
--- a/npc/custom/quests/hunting_missions.txt
+++ b/npc/custom/quests/hunting_missions.txt
@@ -317,4 +317,4 @@ OnInit:
npcshopadditem "mission_shop", .Shop[.@i], .Shop[.@i+1];
end;
}
-- shop mission_shop -1,512:-1
+- shop mission_shop FAKE_NPC,512:-1
diff --git a/npc/custom/quests/quest_shop.txt b/npc/custom/quests/quest_shop.txt
index fb5b7993d..2d1ab33a4 100644
--- a/npc/custom/quests/quest_shop.txt
+++ b/npc/custom/quests/quest_shop.txt
@@ -26,7 +26,7 @@ prontera,164,203,6 script Quest Shop#1 4_M_MOCASS2,{ callfunc "qshop"; }
// Script Core
//============================================================
-- script quest_shop -1,{
+- script quest_shop FAKE_NPC,{
function Add; function Chk; function Slot; function A_An;
OnInit:
freeloop(1);
@@ -223,8 +223,8 @@ function script qshop {
// Dummy shop data -- copy as needed.
//============================================================
-- shop qshop1 -1,909:-1
-- shop qshop2 -1,909:-1
-- shop qshop3 -1,909:-1
-- shop qshop4 -1,909:-1
-- shop qshop5 -1,909:-1
+- shop qshop1 FAKE_NPC,909:-1
+- shop qshop2 FAKE_NPC,909:-1
+- shop qshop3 FAKE_NPC,909:-1
+- shop qshop4 FAKE_NPC,909:-1
+- shop qshop5 FAKE_NPC,909:-1
diff --git a/npc/custom/quests/thq/THQS_TTShop.txt b/npc/custom/quests/thq/THQS_TTShop.txt
index c92c375ec..9883950a1 100644
--- a/npc/custom/quests/thq/THQS_TTShop.txt
+++ b/npc/custom/quests/thq/THQS_TTShop.txt
@@ -19,7 +19,7 @@
prt_in,159,172,0 warp thqwrp 3,3,yuno_in01,123,155
// Main configuration object
-- script THQS#Configuration -1,{
+- script THQS#Configuration FAKE_NPC,{
OnInit:
// Axes
setarray $THQS_menu_weapons_1[0], Sabbath, Slaughter, Tomahawk, Great_Axe, Guillotine;
diff --git a/npc/custom/warper.txt b/npc/custom/warper.txt
index 0f28ef40b..d240a2730 100644
--- a/npc/custom/warper.txt
+++ b/npc/custom/warper.txt
@@ -18,7 +18,7 @@
//= 1.4b Added Wolfchev's Laboratory warp.
//============================================================
-- script Warper -1,{
+- script Warper FAKE_NPC,{
function Go; function Disp; function Pick; function Restrict;
// --------------------------------------------------
diff --git a/npc/custom/woe_controller.txt b/npc/custom/woe_controller.txt
index 9e35d1ef7..fee4dfac5 100644
--- a/npc/custom/woe_controller.txt
+++ b/npc/custom/woe_controller.txt
@@ -30,7 +30,7 @@ OnAgitStart:
// Script Core
//============================================================
-- script WOE_CONTROL -1,{
+- script WOE_CONTROL FAKE_NPC,{
function Disp_Owner; function Add_Zero;
OnInit:
diff --git a/npc/dev/ci_test.txt b/npc/dev/ci_test.txt
index 92db23acc..c55c87e5b 100644
--- a/npc/dev/ci_test.txt
+++ b/npc/dev/ci_test.txt
@@ -37,7 +37,7 @@
//= Usage: ./map-server --load-plugin script_mapquit --load-script npc/dev/test.txt --load-script npc/dev/ci_test.txt
//=========================================================================
-- script HerculesSelfTestCI -1,{
+- script HerculesSelfTestCI FAKE_NPC,{
end;
OnInit:
diff --git a/npc/dev/test.txt b/npc/dev/test.txt
index 0f74067ac..72cf86616 100644
--- a/npc/dev/test.txt
+++ b/npc/dev/test.txt
@@ -111,7 +111,7 @@ function script F_TestVarOfAnotherNPC {
return getvariableofnpc(.x, getarg(0));
}
-- script TestVarOfAnotherNPC -1,{
+- script TestVarOfAnotherNPC FAKE_NPC,{
// Used to test getvariableofnpc()
end;
}
@@ -787,7 +787,7 @@ OnSetReference:
return getarg(0);
}
-- script HerculesSelfTest -1,{
+- script HerculesSelfTest FAKE_NPC,{
end;
OnInit:
diff --git a/npc/events/StPatrick_2008.txt b/npc/events/StPatrick_2008.txt
index 9039d0f66..9b4123345 100644
--- a/npc/events/StPatrick_2008.txt
+++ b/npc/events/StPatrick_2008.txt
@@ -215,7 +215,7 @@ prt_fild05,170,286,4 script Anxious Leprechaun#8pday 4_M_PATRICK,{
}
}
-mjolnir_01,272,363,4 script Rocks#08StPattysDay -1,1,1,{
+mjolnir_01,272,363,4 script Rocks#08StPattysDay FAKE_NPC,1,1,{
end;
OnTouch:
diff --git a/npc/events/gdevent_aru.txt b/npc/events/gdevent_aru.txt
index b917a414b..be12e50f8 100644
--- a/npc/events/gdevent_aru.txt
+++ b/npc/events/gdevent_aru.txt
@@ -1326,7 +1326,7 @@ OnBingo:
end;
}
-arug_que01,100,80,0 script removepp_aru_gd -1,5,5,{
+arug_que01,100,80,0 script removepp_aru_gd FAKE_NPC,5,5,{
end;
OnInit:
diff --git a/npc/events/gdevent_sch.txt b/npc/events/gdevent_sch.txt
index 871126098..e1901fe07 100644
--- a/npc/events/gdevent_sch.txt
+++ b/npc/events/gdevent_sch.txt
@@ -1323,7 +1323,7 @@ OnBingo:
end;
}
-schg_que01,100,80,0 script removepp_sch_gd -1,5,5,{
+schg_que01,100,80,0 script removepp_sch_gd FAKE_NPC,5,5,{
end;
OnInit:
diff --git a/npc/events/halloween_2006.txt b/npc/events/halloween_2006.txt
index 970170f5c..f6ed03906 100644
--- a/npc/events/halloween_2006.txt
+++ b/npc/events/halloween_2006.txt
@@ -661,7 +661,7 @@ nif_fild01,167,113,3 script Masta's chicken#06_hw01 4_NFCOCK,{
close;
}
-- script HwChicken::HwChicken -1,{
+- script HwChicken::HwChicken FAKE_NPC,{
if ((halloween == 102) || (halloween == 103)) {
mes "Oh, this must be Chicken Masta's chicken.";
mes "I should insert the magic word.";
@@ -690,7 +690,7 @@ nif_fild01,167,113,3 script Masta's chicken#06_hw01 4_NFCOCK,{
}
}
-- script HwChicken2::HwChicken2 -1,{
+- script HwChicken2::HwChicken2 FAKE_NPC,{
@egg_temp = rand(1,4);
if( @egg_temp == 3) {
mes "As soon as you got close to the chicken and touched it, it disappeared completely.";
@@ -706,7 +706,7 @@ nif_fild01,167,113,3 script Masta's chicken#06_hw01 4_NFCOCK,{
}
}
-- script HwChicken3::HwChicken3 -1,{
+- script HwChicken3::HwChicken3 FAKE_NPC,{
@egg_temp = rand(1,4);
if( @egg_temp == 3) {
mes "As soon as you got close to the chicken and touched it, it disappeared completely.";
@@ -739,7 +739,7 @@ nif_fild01,185,325,8 duplicate(HwChicken) Masta's chicken#06_hw07 4_NFCOCK
nif_fild01,133,105,1 duplicate(HwChicken) Masta's chicken#06_hw08 4_NFCOCK
nif_fild01,331,329,2 duplicate(HwChicken) Masta's chicken#06_hw09 4_NFCOCK
-pay_dun03,1,1,0 script #06_hw_timer01 -1,{
+pay_dun03,1,1,0 script #06_hw_timer01 FAKE_NPC,{
OnInit:
disablenpc "Chicken#06_hw_p01";
disablenpc "Chicken#06_hw_p02";
@@ -920,7 +920,7 @@ pay_dun03,157,131,3 duplicate(HwChicken2) Chicken#06_hw_p40 4_NFCOCK
pay_dun03,158,131,3 duplicate(HwChicken3) Chicken#06_hw_p41 4_NFCOCK
//== Payon Field chickens ==================================
-pay_fild08,1,1,0 script #06_hw_timer02 -1,{
+pay_fild08,1,1,0 script #06_hw_timer02 FAKE_NPC,{
OnInit:
disablenpc "Chicken#06_hw_pf01";
disablenpc "Chicken#06_hw_pf02";
diff --git a/npc/events/nguild/nguild_ev_agit.txt b/npc/events/nguild/nguild_ev_agit.txt
index c94fbc7ea..cbf6aec3c 100644
--- a/npc/events/nguild/nguild_ev_agit.txt
+++ b/npc/events/nguild/nguild_ev_agit.txt
@@ -113,7 +113,7 @@ function script F_AgitEnd {
}
//== Castle 1 ==============================================
-nguild_alde,0,0,0 script Agit_N01 -1,{
+nguild_alde,0,0,0 script Agit_N01 FAKE_NPC,{
OnInterIfInitOnce:
donpcevent "::OnRecvCastleN01";
end;
@@ -140,7 +140,7 @@ OnAgitEnd:
}
//== Castle 2 ==============================================
-nguild_gef,0,0,0 script Agit_N02 -1,{
+nguild_gef,0,0,0 script Agit_N02 FAKE_NPC,{
OnInterIfInitOnce:
donpcevent "::OnRecvCastleN02";
end;
@@ -167,7 +167,7 @@ OnAgitEnd:
}
//== Castle 3 ==============================================
-nguild_pay,0,0,0 script Agit_N03 -1,{
+nguild_pay,0,0,0 script Agit_N03 FAKE_NPC,{
OnInterIfInitOnce:
donpcevent "::OnRecvCastleN03";
end;
@@ -194,7 +194,7 @@ OnAgitEnd:
}
//== Castle 4 ==============================================
-nguild_prt,0,0,0 script Agit_N04 -1,{
+nguild_prt,0,0,0 script Agit_N04 FAKE_NPC,{
OnInterIfInitOnce:
donpcevent "::OnRecvCastleN04";
end;
@@ -221,7 +221,7 @@ OnAgitEnd:
}
//== Treasure Spawn Time ===================================
-- script TreasSpawn -1,{
+- script TreasSpawn FAKE_NPC,{
end;
OnClock0005:
diff --git a/npc/events/nguild/nguild_guardians.txt b/npc/events/nguild/nguild_guardians.txt
index e5b8bc959..2598776f3 100644
--- a/npc/events/nguild/nguild_guardians.txt
+++ b/npc/events/nguild/nguild_guardians.txt
@@ -33,7 +33,7 @@
//= 1.0
//=========================================================================
-nguild_alde,216,24,0 script Guardian_N01 -1,{
+nguild_alde,216,24,0 script Guardian_N01 FAKE_NPC,{
OnAgitInit:
if (getcastledata("nguild_alde",10) == 1) guardian "nguild_alde",18,219,"Soldier Guardian",1287,"Guardian_N01::OnGuardianDied",0;
if (getcastledata("nguild_alde",11) == 1) guardian "nguild_alde",117,42,"Soldier Guardian",1287,"Guardian_N01::OnGuardianDied",1;
@@ -51,7 +51,7 @@ OnGuardianDied:
end;
}
-nguild_gef,198,182,0 script Guardian_N02 -1,{
+nguild_gef,198,182,0 script Guardian_N02 FAKE_NPC,{
OnAgitInit:
if (getcastledata("nguild_gef",10) == 1) guardian "nguild_gef",30,178,"Soldier Guardian",1287,"Guardian_N02::OnGuardianDied",0;
if (getcastledata("nguild_gef",11) == 1) guardian "nguild_gef",64,180,"Soldier Guardian",1287,"Guardian_N02::OnGuardianDied",1;
@@ -69,7 +69,7 @@ OnGuardianDied:
end;
}
-nguild_pay,139,139,0 script Guardian_N03 -1,{
+nguild_pay,139,139,0 script Guardian_N03 FAKE_NPC,{
OnAgitInit:
if (getcastledata("nguild_pay",10) == 1) guardian "nguild_pay",210,120,"Soldier Guardian",1287,"Guardian_N03::OnGuardianDied",0;
if (getcastledata("nguild_pay",11) == 1) guardian "nguild_pay",69,26,"Soldier Guardian",1287,"Guardian_N03::OnGuardianDied",1;
@@ -87,7 +87,7 @@ OnGuardianDied:
end;
}
-nguild_prt,197,197,0 script Guardian_N04 -1,{
+nguild_prt,197,197,0 script Guardian_N04 FAKE_NPC,{
OnAgitInit:
if (getcastledata("nguild_prt",10) == 1) guardian "nguild_prt",196,92,"Soldier Guardian",1287,"Guardian_N04::OnGuardianDied",0;
if (getcastledata("nguild_prt",11) == 1) guardian "nguild_prt",113,200,"Soldier Guardian",1287,"Guardian_N04::OnGuardianDied",1;
diff --git a/npc/events/nguild/nguild_treas.txt b/npc/events/nguild/nguild_treas.txt
index c2ca26451..92cbe585a 100644
--- a/npc/events/nguild/nguild_treas.txt
+++ b/npc/events/nguild/nguild_treas.txt
@@ -82,7 +82,7 @@ function script F_GldTreasSw {
//== Castle 1 ==============================================
//- Treasure Spawn -
-nguild_alde,1,1,1 script Treasure_N01 -1,{
+nguild_alde,1,1,1 script Treasure_N01 FAKE_NPC,{
OnRecvCastleN01:
end;
@@ -108,7 +108,7 @@ nguild_alde,123,223,0 script Switch#TresN01 HIDDEN_NPC,{
//== Castle 2 ==============================================
//- Treasure Spawn -
-nguild_gef,1,1,1 script Treasure_N02 -1,{
+nguild_gef,1,1,1 script Treasure_N02 FAKE_NPC,{
OnRecvCastleN02:
end;
@@ -134,7 +134,7 @@ nguild_gef,152,117,0 script Switch#TresN02 HIDDEN_NPC,{
//== Castle 3 ==============================================
//- Treasure Spawn -
-nguild_pay,1,1,0 script Treasure_N03 -1,{
+nguild_pay,1,1,0 script Treasure_N03 FAKE_NPC,{
OnRecvCastleN03:
end;
OnInit:
@@ -159,7 +159,7 @@ nguild_pay,295,8,0 script Switch#TresN03 HIDDEN_NPC,{
//== Castle 4 ==============================================
//- Treasure Spawn -
-nguild_prt,1,1,0 script Treasure_N04 -1,{
+nguild_prt,1,1,0 script Treasure_N04 FAKE_NPC,{
OnRecvCastleN04:
end;
OnInit:
diff --git a/npc/instances/NydhoggsNest.txt b/npc/instances/NydhoggsNest.txt
index a1d9de802..87f9c7bf0 100644
--- a/npc/instances/NydhoggsNest.txt
+++ b/npc/instances/NydhoggsNest.txt
@@ -1073,7 +1073,7 @@ spl_in01,104,56,3 script Aide Arioss#edq 4_F_FAIRYKID2,3,3,{
}
}
-spl_in01,110,21,0 script trap#s_edq -1,10,10,{
+spl_in01,110,21,0 script trap#s_edq FAKE_NPC,10,10,{
OnTouch_:
if ((isequipped(2782) == 1) && (ins_nyd == 51)) {
mes "[Splendide Guard]";
@@ -1515,7 +1515,7 @@ man_in01,291,62,3 script Laphine Prisoner#edq 4_F_FAIRYKID2,3,3,{
}
}
-man_in01,282,42,0 script trap#edq2 -1,10,10,{
+man_in01,282,42,0 script trap#edq2 FAKE_NPC,10,10,{
OnTouch_:
if ((isequipped(2782) == 1) && (ins_nyd == 52)) {
mes "[Manuk Field Elite Soldier]";
@@ -1683,7 +1683,7 @@ OnInstanceInit: // Temporary fix for @reloadscript.
end;
}
-1@nyd,1,1,0 script nyd_call_mon_1 -1,{
+1@nyd,1,1,0 script nyd_call_mon_1 FAKE_NPC,{
OnInstanceInit:
enablenpc instance_npcname("nyd_call_mon_1");
end;
@@ -1722,7 +1722,7 @@ OnMyMobDead:
end;
}
-1@nyd,1,2,0 script ins_nyd_1f_timer -1,{
+1@nyd,1,2,0 script ins_nyd_1f_timer FAKE_NPC,{
OnInstanceInit:
disablenpc instance_npcname("ins_nyd_1f_timer");
end;
@@ -1782,7 +1782,7 @@ OnTouch:
end;
}
-1@nyd,1,1,0 script ins_nyd1_spawn_mobs -1,{
+1@nyd,1,1,0 script ins_nyd1_spawn_mobs FAKE_NPC,{
OnInstanceInit:
.@map$ = instance_mapname("1@nyd");
monster .@map$,0,0,"Ancient Tree",2019,40,instance_npcname("ins_nyd1_spawn_mobs")+"::OnMyTreeDead";
@@ -1814,14 +1814,14 @@ OnMyPingDead:
}
//== Second Floor ==========================================
-2@nyd,200,14,0 script nyd_2f_enter -1,6,6,{
+2@nyd,200,14,0 script nyd_2f_enter FAKE_NPC,6,6,{
OnTouch_:
donpcevent instance_npcname("nyd_2f_enter_broad")+"::OnEnable";
disablenpc instance_npcname("nyd_2f_enter");
end;
}
-2@nyd,1,1,0 script nyd_2f_enter_broad -1,{
+2@nyd,1,1,0 script nyd_2f_enter_broad FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("nyd_2f_enter_broad");
@@ -1847,7 +1847,7 @@ OnTimer18000:
end;
}
-2@nyd,199,178,0 script nyd_2f_ddr_control -1,6,6,{
+2@nyd,199,178,0 script nyd_2f_ddr_control FAKE_NPC,6,6,{
OnTouch:
specialeffect2 EF_HOLYHIT;
mes "From below the gorgeous stones, a strange breeze is forming.";
@@ -1858,7 +1858,7 @@ OnTouch:
end;
}
-2@nyd,199,268,0 script nyd_2f_boss_enter -1,8,8,{
+2@nyd,199,268,0 script nyd_2f_boss_enter FAKE_NPC,8,8,{
OnTouch_:
if (getcharid(0) == getpartyleader(getcharid(1),2)) {
donpcevent instance_npcname("nyd_2f_boss_enter_call")+"::OnEnable";
@@ -1868,7 +1868,7 @@ OnTouch_:
end;
}
-2@nyd,2,2,0 script nyd_2f_boss_enter_call -1,{
+2@nyd,2,2,0 script nyd_2f_boss_enter_call FAKE_NPC,{
OnInstanceInit:
disablenpc instance_npcname("nyd_2f_boss_enter_call");
end;
@@ -1944,7 +1944,7 @@ OnMyMobDead:
end;
}
-2@nyd,2,4,0 script nyd_2f_boss_enter_logic -1,{
+2@nyd,2,4,0 script nyd_2f_boss_enter_logic FAKE_NPC,{
OnInstanceInit:
disablenpc instance_npcname("nyd_2f_boss_enter_logic");
end;
@@ -2011,7 +2011,7 @@ OnEnable:
end;
}
-2@nyd,115,278,0 script nyd_2f_red -1,5,5,{
+2@nyd,115,278,0 script nyd_2f_red FAKE_NPC,5,5,{
OnInstanceInit:
disablenpc instance_npcname(strnpcinfo(0));
end;
@@ -2056,7 +2056,7 @@ OnTimer10000:
end;
}
-2@nyd,6,6,0 script nyd_2f_red_c -1,{
+2@nyd,6,6,0 script nyd_2f_red_c FAKE_NPC,{
OnInstanceInit:
disablenpc instance_npcname(strnpcinfo(0));
end;
@@ -2124,7 +2124,7 @@ OnTimer180000:
end;
}
-2@nyd,130,298,0 script nyd_2f_red_warp1 -1,6,6,{
+2@nyd,130,298,0 script nyd_2f_red_warp1 FAKE_NPC,6,6,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname(strnpcinfo(0));
@@ -2145,28 +2145,28 @@ OnTouch:
warp instance_mapname("2@nyd"),284,374;
end;
}
-2@nyd,142,296,0 duplicate(nyd_2f_red_warp1) nyd_2f_red_warp2 -1,6,6
-2@nyd,145,283,0 duplicate(nyd_2f_red_warp1) nyd_2f_red_warp3 -1,6,6
-
-2@nyd,115,373,0 duplicate(nyd_2f_red) nyd_2f_white -1,5,5
-2@nyd,6,7,0 duplicate(nyd_2f_red_c) nyd_2f_white_c -1
-2@nyd,127,354,0 duplicate(nyd_2f_red_warp1) nyd_2f_white_warp1 -1,6,6,
-2@nyd,140,357,0 duplicate(nyd_2f_red_warp1) nyd_2f_white_warp2 -1,6,6
-2@nyd,145,367,0 duplicate(nyd_2f_red_warp1) nyd_2f_white_warp3 -1,6,6
-
-2@nyd,284,278,0 duplicate(nyd_2f_red) nyd_2f_yellow -1,5,5
-2@nyd,6,8,0 duplicate(nyd_2f_red_c) nyd_2f_yellow_c -1
-2@nyd,255,285,0 duplicate(nyd_2f_red_warp1) nyd_2f_yellow_warp1 -1,6,6
-2@nyd,257,296,0 duplicate(nyd_2f_red_warp1) nyd_2f_yellow_warp2 -1,6,6
-2@nyd,268,300,0 duplicate(nyd_2f_red_warp1) nyd_2f_yellow_warp3 -1,6,6
-
-2@nyd,284,374,0 duplicate(nyd_2f_red) nyd_2f_green -1,5,5
-2@nyd,6,9,0 duplicate(nyd_2f_red_c) nyd_2f_green_c -1
-2@nyd,274,356,0 duplicate(nyd_2f_red_warp1) nyd_2f_green_warp1 -1,6,6
-2@nyd,260,356,0 duplicate(nyd_2f_red_warp1) nyd_2f_green_warp2 -1,6,6
-2@nyd,258,368,0 duplicate(nyd_2f_red_warp1) nyd_2f_green_warp3 -1,6,6
-
-2@nyd,1,1,0 script ins_nyd2_spawn_mobs -1,{
+2@nyd,142,296,0 duplicate(nyd_2f_red_warp1) nyd_2f_red_warp2 FAKE_NPC,6,6
+2@nyd,145,283,0 duplicate(nyd_2f_red_warp1) nyd_2f_red_warp3 FAKE_NPC,6,6
+
+2@nyd,115,373,0 duplicate(nyd_2f_red) nyd_2f_white FAKE_NPC,5,5
+2@nyd,6,7,0 duplicate(nyd_2f_red_c) nyd_2f_white_c FAKE_NPC
+2@nyd,127,354,0 duplicate(nyd_2f_red_warp1) nyd_2f_white_warp1 FAKE_NPC,6,6
+2@nyd,140,357,0 duplicate(nyd_2f_red_warp1) nyd_2f_white_warp2 FAKE_NPC,6,6
+2@nyd,145,367,0 duplicate(nyd_2f_red_warp1) nyd_2f_white_warp3 FAKE_NPC,6,6
+
+2@nyd,284,278,0 duplicate(nyd_2f_red) nyd_2f_yellow FAKE_NPC,5,5
+2@nyd,6,8,0 duplicate(nyd_2f_red_c) nyd_2f_yellow_c FAKE_NPC
+2@nyd,255,285,0 duplicate(nyd_2f_red_warp1) nyd_2f_yellow_warp1 FAKE_NPC,6,6
+2@nyd,257,296,0 duplicate(nyd_2f_red_warp1) nyd_2f_yellow_warp2 FAKE_NPC,6,6
+2@nyd,268,300,0 duplicate(nyd_2f_red_warp1) nyd_2f_yellow_warp3 FAKE_NPC,6,6
+
+2@nyd,284,374,0 duplicate(nyd_2f_red) nyd_2f_green FAKE_NPC,5,5
+2@nyd,6,9,0 duplicate(nyd_2f_red_c) nyd_2f_green_c FAKE_NPC
+2@nyd,274,356,0 duplicate(nyd_2f_red_warp1) nyd_2f_green_warp1 FAKE_NPC,6,6
+2@nyd,260,356,0 duplicate(nyd_2f_red_warp1) nyd_2f_green_warp2 FAKE_NPC,6,6
+2@nyd,258,368,0 duplicate(nyd_2f_red_warp1) nyd_2f_green_warp3 FAKE_NPC,6,6
+
+2@nyd,1,1,0 script ins_nyd2_spawn_mobs FAKE_NPC,{
OnInstanceInit:
.@map$ = instance_mapname("2@nyd");
areamonster .@map$,200,92,180,80,"Rhyncho",2020,40,instance_npcname("ins_nyd2_spawn_mobs")+"::OnMyRhynDead";
diff --git a/npc/instances/OrcsMemory.txt b/npc/instances/OrcsMemory.txt
index 41c0d5e5d..cbf7d1a56 100644
--- a/npc/instances/OrcsMemory.txt
+++ b/npc/instances/OrcsMemory.txt
@@ -499,7 +499,7 @@ OnTouch:
end;
}
-1@orcs,1,1,0 script B1 Area Mobs -1,{
+1@orcs,1,1,0 script B1 Area Mobs FAKE_NPC,{
end;
OnMyMobDead:
diff --git a/npc/instances/SealedShrine.txt b/npc/instances/SealedShrine.txt
index 4750f2105..a6cf12a33 100644
--- a/npc/instances/SealedShrine.txt
+++ b/npc/instances/SealedShrine.txt
@@ -437,7 +437,7 @@ prt_monk,261,91,3 script Rust Blackhand#edq 4_M_DWARF,{
}
//== Sealed Shrine Interior ================================
-1@cata,1,2,0 script ins_baphomet_lotto -1,{
+1@cata,1,2,0 script ins_baphomet_lotto FAKE_NPC,{
OnInstanceInit:
// Pick one "true" Gravestone and 12 "false" Gravestones.
.@true = rand(1,13);
@@ -448,14 +448,14 @@ OnInstanceInit:
end;
}
-1@cata,3,2,0 script ins_baphomet_lotto2 -1,{
+1@cata,3,2,0 script ins_baphomet_lotto2 FAKE_NPC,{
OnEnable:
for (.@i = 1; .@i <= 12; ++.@i)
enablenpc instance_npcname("Bobbing Torch#"+.@i);
end;
}
-1@cata,4,2,0 script ins_baphomet_lotto3 -1,{
+1@cata,4,2,0 script ins_baphomet_lotto3 FAKE_NPC,{
OnEnable:
.@label$ = instance_npcname("ins_baphomet_lotto3")+"::OnMyMobDead";
.@map$ = instance_mapname("1@cata");
@@ -837,7 +837,7 @@ OnInstanceInit:
}
//== Gravestones ===========================================
-- script Gravestone#SS1 -1,{
+- script Gravestone#SS1 FAKE_NPC,{
if ('ins_baphomet == 1) {
getitem Soul_Pendant,1;
'ins_baphomet = 2;
@@ -866,7 +866,7 @@ OnInstanceInit:
1@cata,127,32,0 duplicate(Gravestone#SS1) Gravestone#1F_12T CLEAR_NPC
1@cata,267,30,0 duplicate(Gravestone#SS1) Gravestone#1F_13T CLEAR_NPC
-- script Gravestone#SS2 -1,{
+- script Gravestone#SS2 FAKE_NPC,{
mes "I can only feel gloom from this Gravestone.";
close;
}
@@ -885,7 +885,7 @@ OnInstanceInit:
1@cata,267,30,0 duplicate(Gravestone#SS2) Gravestone#1F_13F CLEAR_NPC
//== Bobbing Torches =======================================
-- script Bobbing Torch#SS -1,{
+- script Bobbing Torch#SS FAKE_NPC,{
.@party_id = getcharid(1);
if (getpartyleader(.@party_id,2) == getcharid(0)) {
if (('ins_baphomet == 3) && (countitem(Essence_Of_Fire) < 11)) {
@@ -935,7 +935,7 @@ OnInstanceInit:
1@cata,71,42,0 duplicate(Bobbing Torch#SS) Bobbing Torch#11 CLEAR_NPC
1@cata,155,14,0 duplicate(Bobbing Torch#SS) Bobbing Torch#12 CLEAR_NPC
-1@cata,1,1,0 script ins_baphomet_1f_timer -1,{
+1@cata,1,1,0 script ins_baphomet_1f_timer FAKE_NPC,{
OnInstanceInit:
disablenpc instance_npcname("ins_baphomet_1f_timer");
end;
@@ -976,14 +976,14 @@ OnTimer3500000:
end;
}
-2@cata,80,144,0 script ins_2f_enter -1,3,3,{
+2@cata,80,144,0 script ins_2f_enter FAKE_NPC,3,3,{
OnTouch:
donpcevent instance_npcname("ins_2f_enter_broad")+"::OnEnable";
disablenpc instance_npcname("ins_2f_enter");
end;
}
-2@cata,1,1,0 script ins_2f_enter_broad -1,{
+2@cata,1,1,0 script ins_2f_enter_broad FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("ins_2f_enter_broad");
@@ -1013,7 +1013,7 @@ OnTimer18000:
end;
}
-2@cata,50,67,0 script slave_left -1,5,5,{
+2@cata,50,67,0 script slave_left FAKE_NPC,5,5,{
OnTouch:
.@map$ = instance_mapname("2@cata");
mapannounce .@map$, "Apostle of Baphomet : Kill the humans! Don't let them interrupt the revival of our Master!",bc_map,"0xFFFF00";
@@ -1037,7 +1037,7 @@ OnTouch:
end;
}
-2@cata,109,67,0 script slave_right -1,5,5,{
+2@cata,109,67,0 script slave_right FAKE_NPC,5,5,{
OnTouch:
.@map$ = instance_mapname("2@cata");
mapannounce .@map$, "Apostle of Baphomet : Kill the humans! Don't let them interrupt the revival of our Master!",bc_map,"0xFFFF00";
@@ -1061,7 +1061,7 @@ OnTouch:
end;
}
-2@cata,79,39,0 script slave_down -1,5,5,{
+2@cata,79,39,0 script slave_down FAKE_NPC,5,5,{
OnTouch:
.@map$ = instance_mapname("2@cata");
mapannounce .@map$, "Apostle of Baphomet : Kill the humans! Don't let them interrupt the revival of our Master!",bc_map,"0xFFFF00";
@@ -1086,7 +1086,7 @@ OnTouch:
}
//== Magical Seals =========================================
-- script Magical Seal#SS -1,{
+- script Magical Seal#SS FAKE_NPC,{
.@seal_check = questprogress(3041,PLAYTIME);
if (.@seal_check == 1) {
specialeffect2 EF_SILENCEATTACK;
@@ -1186,7 +1186,7 @@ OnInstanceInit:
end;
}
-2@cata,1,2,0 script ins_2f_hero_broad -1,{
+2@cata,1,2,0 script ins_2f_hero_broad FAKE_NPC,{
OnEnable:
enablenpc instance_npcname("ins_2f_hero_broad");
initnpctimer;
@@ -1225,7 +1225,7 @@ OnTimer17000:
end;
}
-2@cata,3,3,0 script control_baphomet -1,{
+2@cata,3,3,0 script control_baphomet FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("control_baphomet");
@@ -1260,7 +1260,7 @@ OnMyMobDead:
end;
}
-2@cata,2,2,0 script ins_2f_hero_broad2 -1,{
+2@cata,2,2,0 script ins_2f_hero_broad2 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("ins_2f_hero_broad2");
@@ -1308,7 +1308,7 @@ OnTimer26000:
end;
}
-2@cata,4,1,0 script 2f_callmon_pattern_c -1,{
+2@cata,4,1,0 script 2f_callmon_pattern_c FAKE_NPC,{
OnInstanceInit:
disablenpc instance_npcname("2f_callmon_pattern_c");
end;
@@ -1333,7 +1333,7 @@ OnTimer3600000:
end;
}
-2@cata,4,2,0 script 2f_callmon_pattern -1,{
+2@cata,4,2,0 script 2f_callmon_pattern FAKE_NPC,{
OnInstanceInit:
disablenpc instance_npcname("2f_callmon_pattern");
end;
@@ -1357,7 +1357,7 @@ OnTimer300000:
end;
}
-2@cata,3,1,0 script ins_2f_hero_pattern_c -1,{
+2@cata,3,1,0 script ins_2f_hero_pattern_c FAKE_NPC,{
OnInstanceInit:
disablenpc instance_npcname("ins_2f_hero_pattern_c");
end;
@@ -1393,7 +1393,7 @@ OnTimer3605000:
end;
}
-2@cata,3,2,0 script ins_2f_hero_pattern -1,{
+2@cata,3,2,0 script ins_2f_hero_pattern FAKE_NPC,{
OnInstanceInit:
disablenpc instance_npcname("ins_2f_hero_pattern");
end;
@@ -1455,7 +1455,7 @@ OnTimer70000:
end;
}
-1@cata,1,1,0 script ins_1f_spawn_mobs -1,{
+1@cata,1,1,0 script ins_1f_spawn_mobs FAKE_NPC,{
OnInstanceInit:
.@map$ = instance_mapname("1@cata");
monster .@map$,0,0,"Zombie Master",1298,10;
diff --git a/npc/jobs/2-1/assassin.txt b/npc/jobs/2-1/assassin.txt
index c994fe5d6..5011c6ea1 100644
--- a/npc/jobs/2-1/assassin.txt
+++ b/npc/jobs/2-1/assassin.txt
@@ -655,7 +655,7 @@ OnTouch:
}
}
-in_moc_16,19,154,0 script nameless_one -1,8,2,{
+in_moc_16,19,154,0 script nameless_one FAKE_NPC,8,2,{
OnTouch:
if (ASSIN_Q2 < 5) {
if (ASSIN_Q2 < 3) {
@@ -1194,7 +1194,7 @@ OnTouch:
}
}
-in_moc_16,1,1,0 script Beholder#ASNTEST -1,{
+in_moc_16,1,1,0 script Beholder#ASNTEST FAKE_NPC,{
end;
OnEnable:
@@ -1344,7 +1344,7 @@ OnTimer187000:
end;
}
-in_moc_16,68,158,0 script 01_1::SinTrap -1,0,0,{
+in_moc_16,68,158,0 script 01_1::SinTrap FAKE_NPC,0,0,{
OnTouch:
if (getvariableofnpc(.DisableTraps,"Beholder#ASNTEST") < 1) {
mapannounce "in_moc_16",strcharinfo(0) + ", you're trapped. You will be sent back.",bc_map;
@@ -1356,89 +1356,89 @@ OnTouch:
end;
}
-in_moc_16,69,158,0 duplicate(SinTrap) 01_2 -1,0,0
-in_moc_16,68,159,0 duplicate(SinTrap) 01_3 -1,0,0
-in_moc_16,69,159,0 duplicate(SinTrap) 01_4 -1,0,0
-in_moc_16,64,162,0 duplicate(SinTrap) 02_1 -1,0,0
-in_moc_16,65,162,0 duplicate(SinTrap) 02_2 -1,0,0
-in_moc_16,64,163,0 duplicate(SinTrap) 02_3 -1,0,0
-in_moc_16,65,163,0 duplicate(SinTrap) 02_4 -1,0,0
-in_moc_16,62,168,0 duplicate(SinTrap) 03_1 -1,0,0
-in_moc_16,63,168,0 duplicate(SinTrap) 03_2 -1,0,0
-in_moc_16,62,169,0 duplicate(SinTrap) 03_3 -1,0,0
-in_moc_16,63,169,0 duplicate(SinTrap) 03_4 -1,0,0
-in_moc_16,66,170,0 duplicate(SinTrap) 04_1 -1,0,0
-in_moc_16,67,170,0 duplicate(SinTrap) 04_2 -1,0,0
-in_moc_16,66,171,0 duplicate(SinTrap) 04_3 -1,0,0
-in_moc_16,67,171,0 duplicate(SinTrap) 04_4 -1,0,0
-in_moc_16,64,174,0 duplicate(SinTrap) 05_1 -1,0,0
-in_moc_16,64,175,0 duplicate(SinTrap) 05_2 -1,0,0
-in_moc_16,65,174,0 duplicate(SinTrap) 05_3 -1,0,0
-in_moc_16,65,175,0 duplicate(SinTrap) 05_4 -1,0,0
-in_moc_16,72,174,0 duplicate(SinTrap) 06_1 -1,0,0
-in_moc_16,72,175,0 duplicate(SinTrap) 06_2 -1,0,0
-in_moc_16,73,174,0 duplicate(SinTrap) 06_3 -1,0,0
-in_moc_16,73,175,0 duplicate(SinTrap) 06_4 -1,0,0
-in_moc_16,72,166,0 duplicate(SinTrap) 07_1 -1,0,0
-in_moc_16,72,167,0 duplicate(SinTrap) 07_2 -1,0,0
-in_moc_16,73,166,0 duplicate(SinTrap) 07_3 -1,0,0
-in_moc_16,73,167,0 duplicate(SinTrap) 07_4 -1,0,0
-in_moc_16,72,168,0 duplicate(SinTrap) 08_1 -1,0,0
-in_moc_16,72,169,0 duplicate(SinTrap) 08_2 -1,0,0
-in_moc_16,73,168,0 duplicate(SinTrap) 08_3 -1,0,0
-in_moc_16,73,169,0 duplicate(SinTrap) 08_4 -1,0,0
-in_moc_16,78,168,0 duplicate(SinTrap) 09_1 -1,0,0
-in_moc_16,78,169,0 duplicate(SinTrap) 09_2 -1,0,0
-in_moc_16,79,168,0 duplicate(SinTrap) 09_3 -1,0,0
-in_moc_16,79,169,0 duplicate(SinTrap) 09_4 -1,0,0
-in_moc_16,80,172,0 duplicate(SinTrap) 10_1 -1,0,0
-in_moc_16,81,172,0 duplicate(SinTrap) 10_2 -1,0,0
-in_moc_16,82,172,0 duplicate(SinTrap) 10_3 -1,0,0
-in_moc_16,83,172,0 duplicate(SinTrap) 10_4 -1,0,0
-in_moc_16,80,173,0 duplicate(SinTrap) 10_5 -1,0,0
-in_moc_16,81,173,0 duplicate(SinTrap) 10_6 -1,0,0
-in_moc_16,82,173,0 duplicate(SinTrap) 10_7 -1,0,0
-in_moc_16,83,173,0 duplicate(SinTrap) 10_8 -1,0,0
-in_moc_16,88,174,0 duplicate(SinTrap) 11_1 -1,0,0
-in_moc_16,88,175,0 duplicate(SinTrap) 11_2 -1,0,0
-in_moc_16,89,174,0 duplicate(SinTrap) 11_3 -1,0,0
-in_moc_16,89,175,0 duplicate(SinTrap) 11_4 -1,0,0
-in_moc_16,86,166,0 duplicate(SinTrap) 12_1 -1,0,0
-in_moc_16,86,167,0 duplicate(SinTrap) 12_2 -1,0,0
-in_moc_16,87,166,0 duplicate(SinTrap) 12_3 -1,0,0
-in_moc_16,87,167,0 duplicate(SinTrap) 12_4 -1,0,0
-in_moc_16,90,164,0 duplicate(SinTrap) 13_1 -1,0,0
-in_moc_16,90,165,0 duplicate(SinTrap) 13_2 -1,0,0
-in_moc_16,91,164,0 duplicate(SinTrap) 13_3 -1,0,0
-in_moc_16,91,165,0 duplicate(SinTrap) 13_4 -1,0,0
-in_moc_16,84,160,0 duplicate(SinTrap) 14_1 -1,0,0
-in_moc_16,85,160,0 duplicate(SinTrap) 14_2 -1,0,0
-in_moc_16,86,160,0 duplicate(SinTrap) 14_3 -1,0,0
-in_moc_16,87,160,0 duplicate(SinTrap) 14_4 -1,0,0
-in_moc_16,88,160,0 duplicate(SinTrap) 14_5 -1,0,0
-in_moc_16,89,160,0 duplicate(SinTrap) 14_6 -1,0,0
-in_moc_16,84,161,0 duplicate(SinTrap) 14_7 -1,0,0
-in_moc_16,85,161,0 duplicate(SinTrap) 14_8 -1,0,0
-in_moc_16,86,161,0 duplicate(SinTrap) 14_9 -1,0,0
-in_moc_16,87,161,0 duplicate(SinTrap) 14_10 -1,0,0
-in_moc_16,88,161,0 duplicate(SinTrap) 14_11 -1,0,0
-in_moc_16,89,161,0 duplicate(SinTrap) 14_12 -1,0,0
-in_moc_16,86,154,0 duplicate(SinTrap) 15_1 -1,0,0
-in_moc_16,86,155,0 duplicate(SinTrap) 15_2 -1,0,0
-in_moc_16,87,154,0 duplicate(SinTrap) 15_3 -1,0,0
-in_moc_16,87,155,0 duplicate(SinTrap) 15_4 -1,0,0
-in_moc_16,84,150,0 duplicate(SinTrap) 16_1 -1,0,0
-in_moc_16,84,151,0 duplicate(SinTrap) 16_2 -1,0,0
-in_moc_16,85,150,0 duplicate(SinTrap) 16_3 -1,0,0
-in_moc_16,85,151,0 duplicate(SinTrap) 16_4 -1,0,0
-in_moc_16,90,150,0 duplicate(SinTrap) 17_1 -1,0,0
-in_moc_16,90,151,0 duplicate(SinTrap) 17_2 -1,0,0
-in_moc_16,91,150,0 duplicate(SinTrap) 17_3 -1,0,0
-in_moc_16,91,151,0 duplicate(SinTrap) 17_4 -1,0,0
-in_moc_16,86,146,0 duplicate(SinTrap) 18_1 -1,0,0
-in_moc_16,86,147,0 duplicate(SinTrap) 18_2 -1,0,0
-in_moc_16,87,146,0 duplicate(SinTrap) 18_3 -1,0,0
-in_moc_16,87,147,0 duplicate(SinTrap) 18_4 -1,0,0
+in_moc_16,69,158,0 duplicate(SinTrap) 01_2 FAKE_NPC,0,0
+in_moc_16,68,159,0 duplicate(SinTrap) 01_3 FAKE_NPC,0,0
+in_moc_16,69,159,0 duplicate(SinTrap) 01_4 FAKE_NPC,0,0
+in_moc_16,64,162,0 duplicate(SinTrap) 02_1 FAKE_NPC,0,0
+in_moc_16,65,162,0 duplicate(SinTrap) 02_2 FAKE_NPC,0,0
+in_moc_16,64,163,0 duplicate(SinTrap) 02_3 FAKE_NPC,0,0
+in_moc_16,65,163,0 duplicate(SinTrap) 02_4 FAKE_NPC,0,0
+in_moc_16,62,168,0 duplicate(SinTrap) 03_1 FAKE_NPC,0,0
+in_moc_16,63,168,0 duplicate(SinTrap) 03_2 FAKE_NPC,0,0
+in_moc_16,62,169,0 duplicate(SinTrap) 03_3 FAKE_NPC,0,0
+in_moc_16,63,169,0 duplicate(SinTrap) 03_4 FAKE_NPC,0,0
+in_moc_16,66,170,0 duplicate(SinTrap) 04_1 FAKE_NPC,0,0
+in_moc_16,67,170,0 duplicate(SinTrap) 04_2 FAKE_NPC,0,0
+in_moc_16,66,171,0 duplicate(SinTrap) 04_3 FAKE_NPC,0,0
+in_moc_16,67,171,0 duplicate(SinTrap) 04_4 FAKE_NPC,0,0
+in_moc_16,64,174,0 duplicate(SinTrap) 05_1 FAKE_NPC,0,0
+in_moc_16,64,175,0 duplicate(SinTrap) 05_2 FAKE_NPC,0,0
+in_moc_16,65,174,0 duplicate(SinTrap) 05_3 FAKE_NPC,0,0
+in_moc_16,65,175,0 duplicate(SinTrap) 05_4 FAKE_NPC,0,0
+in_moc_16,72,174,0 duplicate(SinTrap) 06_1 FAKE_NPC,0,0
+in_moc_16,72,175,0 duplicate(SinTrap) 06_2 FAKE_NPC,0,0
+in_moc_16,73,174,0 duplicate(SinTrap) 06_3 FAKE_NPC,0,0
+in_moc_16,73,175,0 duplicate(SinTrap) 06_4 FAKE_NPC,0,0
+in_moc_16,72,166,0 duplicate(SinTrap) 07_1 FAKE_NPC,0,0
+in_moc_16,72,167,0 duplicate(SinTrap) 07_2 FAKE_NPC,0,0
+in_moc_16,73,166,0 duplicate(SinTrap) 07_3 FAKE_NPC,0,0
+in_moc_16,73,167,0 duplicate(SinTrap) 07_4 FAKE_NPC,0,0
+in_moc_16,72,168,0 duplicate(SinTrap) 08_1 FAKE_NPC,0,0
+in_moc_16,72,169,0 duplicate(SinTrap) 08_2 FAKE_NPC,0,0
+in_moc_16,73,168,0 duplicate(SinTrap) 08_3 FAKE_NPC,0,0
+in_moc_16,73,169,0 duplicate(SinTrap) 08_4 FAKE_NPC,0,0
+in_moc_16,78,168,0 duplicate(SinTrap) 09_1 FAKE_NPC,0,0
+in_moc_16,78,169,0 duplicate(SinTrap) 09_2 FAKE_NPC,0,0
+in_moc_16,79,168,0 duplicate(SinTrap) 09_3 FAKE_NPC,0,0
+in_moc_16,79,169,0 duplicate(SinTrap) 09_4 FAKE_NPC,0,0
+in_moc_16,80,172,0 duplicate(SinTrap) 10_1 FAKE_NPC,0,0
+in_moc_16,81,172,0 duplicate(SinTrap) 10_2 FAKE_NPC,0,0
+in_moc_16,82,172,0 duplicate(SinTrap) 10_3 FAKE_NPC,0,0
+in_moc_16,83,172,0 duplicate(SinTrap) 10_4 FAKE_NPC,0,0
+in_moc_16,80,173,0 duplicate(SinTrap) 10_5 FAKE_NPC,0,0
+in_moc_16,81,173,0 duplicate(SinTrap) 10_6 FAKE_NPC,0,0
+in_moc_16,82,173,0 duplicate(SinTrap) 10_7 FAKE_NPC,0,0
+in_moc_16,83,173,0 duplicate(SinTrap) 10_8 FAKE_NPC,0,0
+in_moc_16,88,174,0 duplicate(SinTrap) 11_1 FAKE_NPC,0,0
+in_moc_16,88,175,0 duplicate(SinTrap) 11_2 FAKE_NPC,0,0
+in_moc_16,89,174,0 duplicate(SinTrap) 11_3 FAKE_NPC,0,0
+in_moc_16,89,175,0 duplicate(SinTrap) 11_4 FAKE_NPC,0,0
+in_moc_16,86,166,0 duplicate(SinTrap) 12_1 FAKE_NPC,0,0
+in_moc_16,86,167,0 duplicate(SinTrap) 12_2 FAKE_NPC,0,0
+in_moc_16,87,166,0 duplicate(SinTrap) 12_3 FAKE_NPC,0,0
+in_moc_16,87,167,0 duplicate(SinTrap) 12_4 FAKE_NPC,0,0
+in_moc_16,90,164,0 duplicate(SinTrap) 13_1 FAKE_NPC,0,0
+in_moc_16,90,165,0 duplicate(SinTrap) 13_2 FAKE_NPC,0,0
+in_moc_16,91,164,0 duplicate(SinTrap) 13_3 FAKE_NPC,0,0
+in_moc_16,91,165,0 duplicate(SinTrap) 13_4 FAKE_NPC,0,0
+in_moc_16,84,160,0 duplicate(SinTrap) 14_1 FAKE_NPC,0,0
+in_moc_16,85,160,0 duplicate(SinTrap) 14_2 FAKE_NPC,0,0
+in_moc_16,86,160,0 duplicate(SinTrap) 14_3 FAKE_NPC,0,0
+in_moc_16,87,160,0 duplicate(SinTrap) 14_4 FAKE_NPC,0,0
+in_moc_16,88,160,0 duplicate(SinTrap) 14_5 FAKE_NPC,0,0
+in_moc_16,89,160,0 duplicate(SinTrap) 14_6 FAKE_NPC,0,0
+in_moc_16,84,161,0 duplicate(SinTrap) 14_7 FAKE_NPC,0,0
+in_moc_16,85,161,0 duplicate(SinTrap) 14_8 FAKE_NPC,0,0
+in_moc_16,86,161,0 duplicate(SinTrap) 14_9 FAKE_NPC,0,0
+in_moc_16,87,161,0 duplicate(SinTrap) 14_10 FAKE_NPC,0,0
+in_moc_16,88,161,0 duplicate(SinTrap) 14_11 FAKE_NPC,0,0
+in_moc_16,89,161,0 duplicate(SinTrap) 14_12 FAKE_NPC,0,0
+in_moc_16,86,154,0 duplicate(SinTrap) 15_1 FAKE_NPC,0,0
+in_moc_16,86,155,0 duplicate(SinTrap) 15_2 FAKE_NPC,0,0
+in_moc_16,87,154,0 duplicate(SinTrap) 15_3 FAKE_NPC,0,0
+in_moc_16,87,155,0 duplicate(SinTrap) 15_4 FAKE_NPC,0,0
+in_moc_16,84,150,0 duplicate(SinTrap) 16_1 FAKE_NPC,0,0
+in_moc_16,84,151,0 duplicate(SinTrap) 16_2 FAKE_NPC,0,0
+in_moc_16,85,150,0 duplicate(SinTrap) 16_3 FAKE_NPC,0,0
+in_moc_16,85,151,0 duplicate(SinTrap) 16_4 FAKE_NPC,0,0
+in_moc_16,90,150,0 duplicate(SinTrap) 17_1 FAKE_NPC,0,0
+in_moc_16,90,151,0 duplicate(SinTrap) 17_2 FAKE_NPC,0,0
+in_moc_16,91,150,0 duplicate(SinTrap) 17_3 FAKE_NPC,0,0
+in_moc_16,91,151,0 duplicate(SinTrap) 17_4 FAKE_NPC,0,0
+in_moc_16,86,146,0 duplicate(SinTrap) 18_1 FAKE_NPC,0,0
+in_moc_16,86,147,0 duplicate(SinTrap) 18_2 FAKE_NPC,0,0
+in_moc_16,87,146,0 duplicate(SinTrap) 18_3 FAKE_NPC,0,0
+in_moc_16,87,147,0 duplicate(SinTrap) 18_4 FAKE_NPC,0,0
in_moc_16,87,137,0 script Keeper of the Door#ASN WARPNPC,2,1,{
OnInit:
@@ -1465,7 +1465,7 @@ OnDisable:
end;
}
-in_moc_16,3,3,0 script timestopper#1 -1,{
+in_moc_16,3,3,0 script timestopper#1 FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -1608,7 +1608,7 @@ OnTouch:
}
}
-in_moc_16,167,110,0 script Guildmaster#ASN1 -1,3,1,{
+in_moc_16,167,110,0 script Guildmaster#ASN1 FAKE_NPC,3,1,{
OnTouch:
savepoint "in_moc_16",167,110;
mes "[Guildmaster]";
@@ -2174,7 +2174,7 @@ in_moc_16,186,81,1 script Master Assist 1_M_JOBTESTER,1,1,{
close;
}
-in_moc_16,170,90,0 script info 1 -1,{
+in_moc_16,170,90,0 script info 1 FAKE_NPC,{
OnTouch:
mes "[Guildmaster]";
mes "Huh.";
@@ -2182,14 +2182,14 @@ OnTouch:
close;
}
-in_moc_16,153,85,0 script info 2 -1,1,1,{
+in_moc_16,153,85,0 script info 2 FAKE_NPC,1,1,{
OnTouch:
mes "[Guildmaster]";
mes "You're getting warmer. You're almost there. Just, turn around a little bit.";
close;
}
-in_moc_16,160,85,0 script info 3 -1,1,1,{
+in_moc_16,160,85,0 script info 3 FAKE_NPC,1,1,{
OnTouch:
mes "[Guildmaster]";
mes "Hmm.";
@@ -2198,7 +2198,7 @@ OnTouch:
close;
}
-in_moc_16,175,89,0 script info 4 -1,1,1,{
+in_moc_16,175,89,0 script info 4 FAKE_NPC,1,1,{
OnTouch:
mes "[Guildmaster]";
mes "Umm...";
@@ -2206,7 +2206,7 @@ OnTouch:
close;
}
-in_moc_16,164,88,0 script info 5 -1,{
+in_moc_16,164,88,0 script info 5 FAKE_NPC,{
OnTouch:
mes "[Guildmaster]";
mes "Well done...";
@@ -2214,28 +2214,28 @@ OnTouch:
close;
}
-in_moc_16,149,95,0 script info 6 -1,1,1,{
+in_moc_16,149,95,0 script info 6 FAKE_NPC,1,1,{
OnTouch:
mes "[Guildmaster]";
mes "Hm? Not bad. You're almost here.";
close;
}
-in_moc_16,180,101,0 script info 7 -1,1,1,{
+in_moc_16,180,101,0 script info 7 FAKE_NPC,1,1,{
OnTouch:
mes "[Guildmaster]";
mes "I don't think you're going the right way.";
close;
}
-in_moc_16,186,107,0 script info 8 -1,1,1,{
+in_moc_16,186,107,0 script info 8 FAKE_NPC,1,1,{
OnTouch:
mes "[Guildmaster]";
mes "No sense of direction, eh?";
close;
}
-- script #moc_assin_dup -1,{
+- script #moc_assin_dup FAKE_NPC,{
end;
OnInit:
diff --git a/npc/jobs/2-1/hunter.txt b/npc/jobs/2-1/hunter.txt
index 53d273deb..23d970dac 100644
--- a/npc/jobs/2-1/hunter.txt
+++ b/npc/jobs/2-1/hunter.txt
@@ -1250,7 +1250,7 @@ OnTouch:
}
//== Hunter Job test traps =================================
-job_hunte,52,140,0 script 1-1::HntTrap -1,0,1,{
+job_hunte,52,140,0 script 1-1::HntTrap FAKE_NPC,0,1,{
OnTouch:
switch(rand(200)) {
default:
@@ -1393,233 +1393,233 @@ OnTouch:
end;
}
-job_hunte,53,140,0 duplicate(HntTrap) 1-2 -1,0,1
-job_hunte,54,141,0 duplicate(HntTrap) 1-3 -1,0,0
-job_hunte,55,141,0 duplicate(HntTrap) 1-4 -1,0,0
-job_hunte,55,140,0 duplicate(HntTrap) 1-5 -1,0,0
-job_hunte,54,140,0 duplicate(HntTrap) 1-6 -1,0,0
-job_hunte,52,138,0 duplicate(HntTrap) 1-7 -1,0,0
-job_hunte,53,138,0 duplicate(HntTrap) 1-8 -1,0,0
-job_hunte,62,140,0 duplicate(HntTrap) 2-1 -1,0,1
-job_hunte,63,140,0 duplicate(HntTrap) 2-2 -1,0,1
-job_hunte,64,140,0 duplicate(HntTrap) 2-3 -1,0,0
-job_hunte,64,141,0 duplicate(HntTrap) 2-4 -1,0,0
-job_hunte,65,140,0 duplicate(HntTrap) 2-5 -1,0,0
-job_hunte,65,141,0 duplicate(HntTrap) 2-6 -1,0,0
-job_hunte,62,138,0 duplicate(HntTrap) 2-7 -1,0,0
-job_hunte,63,138,0 duplicate(HntTrap) 2-8 -1,0,0
-job_hunte,72,140,0 duplicate(HntTrap) 3-1 -1,0,1
-job_hunte,73,140,0 duplicate(HntTrap) 3-2 -1,0,1
-job_hunte,72,138,0 duplicate(HntTrap) 3-3 -1,0,0
-job_hunte,72,138,0 duplicate(HntTrap) 3-4 -1,0,0
-job_hunte,78,140,0 duplicate(HntTrap) 4-1 -1,0,0
-job_hunte,78,141,0 duplicate(HntTrap) 4-2 -1,0,0
-job_hunte,79,140,0 duplicate(HntTrap) 4-3 -1,0,0
-job_hunte,79,141,0 duplicate(HntTrap) 4-4 -1,0,0
-job_hunte,82,138,0 duplicate(HntTrap) 5-1 -1,0,0
-job_hunte,82,139,0 duplicate(HntTrap) 5-2 -1,0,0
-job_hunte,83,138,0 duplicate(HntTrap) 5-3 -1,0,0
-job_hunte,83,139,0 duplicate(HntTrap) 5-4 -1,0,0
-job_hunte,99,138,0 duplicate(HntTrap) 6-1 -1,1,0
-job_hunte,99,139,0 duplicate(HntTrap) 6-2 -1,1,0
-job_hunte,101,138,0 duplicate(HntTrap) 6-3 -1,0,0
-job_hunte,101,139,0 duplicate(HntTrap) 6-4 -1,0,0
-job_hunte,106,140,0 duplicate(HntTrap) 7-1 -1,0,1
-job_hunte,107,140,0 duplicate(HntTrap) 7-2 -1,0,1
-job_hunte,106,138,0 duplicate(HntTrap) 7-3 -1,0,0
-job_hunte,107,138,0 duplicate(HntTrap) 7-4 -1,0,0
-job_hunte,112,140,0 duplicate(HntTrap) 8-1 -1,0,0
-job_hunte,112,141,0 duplicate(HntTrap) 8-2 -1,0,0
-job_hunte,113,140,0 duplicate(HntTrap) 8-3 -1,0,0
-job_hunte,113,141,0 duplicate(HntTrap) 8-4 -1,0,0
-job_hunte,116,140,0 duplicate(HntTrap) 9-1 -1,0,0
-job_hunte,116,141,0 duplicate(HntTrap) 9-2 -1,0,0
-job_hunte,117,140,0 duplicate(HntTrap) 9-3 -1,0,0
-job_hunte,117,141,0 duplicate(HntTrap) 9-4 -1,0,0
-job_hunte,120,138,0 duplicate(HntTrap) 10-1 -1,0,0
-job_hunte,120,139,0 duplicate(HntTrap) 10-2 -1,0,0
-job_hunte,121,138,0 duplicate(HntTrap) 10-3 -1,0,0
-job_hunte,121,139,0 duplicate(HntTrap) 10-4 -1,0,0
-job_hunte,126,139,0 duplicate(HntTrap) 11-1 -1,0,2
-job_hunte,127,139,0 duplicate(HntTrap) 11-2 -1,0,2
-job_hunte,126,136,0 duplicate(HntTrap) 11-3 -1,0,0
-job_hunte,127,136,0 duplicate(HntTrap) 11-4 -1,0,0
-job_hunte,52,134,0 duplicate(HntTrap) 12-1 -1,0,1
-job_hunte,53,134,0 duplicate(HntTrap) 12-2 -1,0,1
-job_hunte,52,132,0 duplicate(HntTrap) 12-3 -1,0,0
-job_hunte,53,132,0 duplicate(HntTrap) 12-4 -1,0,0
-job_hunte,124,130,0 duplicate(HntTrap) 13-1 -1,0,0
-job_hunte,124,131,0 duplicate(HntTrap) 13-2 -1,0,0
-job_hunte,125,130,0 duplicate(HntTrap) 13-3 -1,0,0
-job_hunte,125,131,0 duplicate(HntTrap) 13-4 -1,0,0
-job_hunte,64,128,0 duplicate(HntTrap) 14-1 -1,0,0
-job_hunte,64,129,0 duplicate(HntTrap) 14-2 -1,0,0
-job_hunte,65,128,0 duplicate(HntTrap) 14-3 -1,0,0
-job_hunte,65,129,0 duplicate(HntTrap) 14-4 -1,0,0
-job_hunte,68,126,0 duplicate(HntTrap) 15-1 -1,0,0
-job_hunte,68,127,0 duplicate(HntTrap) 15-2 -1,0,0
-job_hunte,69,126,0 duplicate(HntTrap) 15-3 -1,0,0
-job_hunte,69,127,0 duplicate(HntTrap) 15-4 -1,0,0
-job_hunte,75,128,0 duplicate(HntTrap) 16-1 -1,1,0
-job_hunte,75,129,0 duplicate(HntTrap) 16-2 -1,1,0
-job_hunte,77,128,0 duplicate(HntTrap) 16-3 -1,0,0
-job_hunte,77,129,0 duplicate(HntTrap) 16-4 -1,0,0
-job_hunte,82,126,0 duplicate(HntTrap) 17-1 -1,0,0
-job_hunte,82,127,0 duplicate(HntTrap) 17-2 -1,0,0
-job_hunte,83,126,0 duplicate(HntTrap) 17-3 -1,0,0
-job_hunte,83,127,0 duplicate(HntTrap) 17-4 -1,0,0
-job_hunte,96,128,0 duplicate(HntTrap) 18-1 -1,0,0
-job_hunte,96,129,0 duplicate(HntTrap) 18-2 -1,0,0
-job_hunte,97,128,0 duplicate(HntTrap) 18-3 -1,0,0
-job_hunte,97,129,0 duplicate(HntTrap) 18-4 -1,0,0
-job_hunte,100,126,0 duplicate(HntTrap) 19-1 -1,0,0
-job_hunte,100,127,0 duplicate(HntTrap) 19-2 -1,0,0
-job_hunte,101,126,0 duplicate(HntTrap) 19-3 -1,0,0
-job_hunte,101,127,0 duplicate(HntTrap) 19-4 -1,0,0
-job_hunte,106,128,0 duplicate(HntTrap) 20-1 -1,0,0
-job_hunte,106,129,0 duplicate(HntTrap) 20-2 -1,0,0
-job_hunte,107,128,0 duplicate(HntTrap) 20-3 -1,0,0
-job_hunte,107,129,0 duplicate(HntTrap) 20-4 -1,0,0
-job_hunte,112,126,0 duplicate(HntTrap) 21-1 -1,0,0
-job_hunte,112,127,0 duplicate(HntTrap) 21-2 -1,0,0
-job_hunte,113,126,0 duplicate(HntTrap) 21-3 -1,0,0
-job_hunte,113,127,0 duplicate(HntTrap) 21-4 -1,0,0
-job_hunte,126,126,0 duplicate(HntTrap) 22-1 -1,0,0
-job_hunte,126,127,0 duplicate(HntTrap) 22-2 -1,0,0
-job_hunte,127,126,0 duplicate(HntTrap) 22-3 -1,0,0
-job_hunte,127,127,0 duplicate(HntTrap) 22-4 -1,0,0
-job_hunte,52,122,0 duplicate(HntTrap) 23-1 -1,0,1
-job_hunte,52,122,0 duplicate(HntTrap) 23-2 -1,0,1
-job_hunte,53,120,0 duplicate(HntTrap) 23-3 -1,1,0
-job_hunte,54,121,0 duplicate(HntTrap) 23-4 -1,0,0
-job_hunte,55,121,0 duplicate(HntTrap) 23-5 -1,0,0
-job_hunte,55,120,0 duplicate(HntTrap) 23-6 -1,0,0
-job_hunte,66,120,0 duplicate(HntTrap) 24-1 -1,0,0
-job_hunte,66,121,0 duplicate(HntTrap) 24-2 -1,0,0
-job_hunte,67,120,0 duplicate(HntTrap) 24-3 -1,0,0
-job_hunte,67,121,0 duplicate(HntTrap) 24-4 -1,0,0
-job_hunte,114,118,0 duplicate(HntTrap) 25-1 -1,0,0
-job_hunte,114,119,0 duplicate(HntTrap) 25-2 -1,0,0
-job_hunte,115,118,0 duplicate(HntTrap) 25-3 -1,0,0
-job_hunte,115,119,0 duplicate(HntTrap) 25-4 -1,0,0
-job_hunte,124,120,0 duplicate(HntTrap) 26-1 -1,0,1
-job_hunte,125,120,0 duplicate(HntTrap) 26-2 -1,0,1
-job_hunte,124,118,0 duplicate(HntTrap) 26-3 -1,0,0
-job_hunte,125,118,0 duplicate(HntTrap) 26-4 -1,0,0
-job_hunte,66,116,0 duplicate(HntTrap) 27-1 -1,0,0
-job_hunte,66,117,0 duplicate(HntTrap) 27-2 -1,0,0
-job_hunte,67,116,0 duplicate(HntTrap) 27-3 -1,0,0
-job_hunte,67,117,0 duplicate(HntTrap) 27-4 -1,0,0
-job_hunte,76,114,0 duplicate(HntTrap) 28-1 -1,0,0
-job_hunte,76,115,0 duplicate(HntTrap) 28-2 -1,0,0
-job_hunte,77,114,0 duplicate(HntTrap) 28-3 -1,0,0
-job_hunte,77,115,0 duplicate(HntTrap) 28-4 -1,0,0
-job_hunte,82,116,0 duplicate(HntTrap) 29-1 -1,0,0
-job_hunte,82,117,0 duplicate(HntTrap) 29-2 -1,0,0
-job_hunte,83,116,0 duplicate(HntTrap) 29-3 -1,0,0
-job_hunte,83,117,0 duplicate(HntTrap) 29-4 -1,0,0
-job_hunte,86,114,0 duplicate(HntTrap) 30-1 -1,0,0
-job_hunte,86,115,0 duplicate(HntTrap) 30-2 -1,0,0
-job_hunte,87,114,0 duplicate(HntTrap) 30-3 -1,0,0
-job_hunte,87,115,0 duplicate(HntTrap) 30-4 -1,0,0
-job_hunte,92,115,0 duplicate(HntTrap) 31-1 -1,1,0
-job_hunte,92,114,0 duplicate(HntTrap) 31-2 -1,1,0
-job_hunte,90,115,0 duplicate(HntTrap) 31-3 -1,0,0
-job_hunte,102,116,0 duplicate(HntTrap) 32-1 -1,0,0
-job_hunte,102,117,0 duplicate(HntTrap) 32-2 -1,0,0
-job_hunte,103,116,0 duplicate(HntTrap) 32-3 -1,0,0
-job_hunte,103,117,0 duplicate(HntTrap) 32-4 -1,0,0
-job_hunte,114,114,0 duplicate(HntTrap) 33-1 -1,0,0
-job_hunte,114,115,0 duplicate(HntTrap) 33-2 -1,0,0
-job_hunte,115,114,0 duplicate(HntTrap) 33-3 -1,0,0
-job_hunte,115,115,0 duplicate(HntTrap) 33-4 -1,0,0
-job_hunte,54,110,0 duplicate(HntTrap) 34-1 -1,0,1
-job_hunte,55,110,0 duplicate(HntTrap) 34-2 -1,0,1
-job_hunte,54,108,0 duplicate(HntTrap) 34-3 -1,0,0
-job_hunte,55,108,0 duplicate(HntTrap) 34-4 -1,0,0
-job_hunte,64,112,0 duplicate(HntTrap) 35-1 -1,0,0
-job_hunte,64,113,0 duplicate(HntTrap) 35-2 -1,0,0
-job_hunte,65,112,0 duplicate(HntTrap) 35-3 -1,0,0
-job_hunte,65,113,0 duplicate(HntTrap) 35-4 -1,0,0
-job_hunte,80,110,0 duplicate(HntTrap) 36-1 -1,0,0
-job_hunte,80,111,0 duplicate(HntTrap) 36-2 -1,0,0
-job_hunte,81,110,0 duplicate(HntTrap) 36-3 -1,0,0
-job_hunte,81,111,0 duplicate(HntTrap) 36-4 -1,0,0
-job_hunte,90,108,0 duplicate(HntTrap) 37-1 -1,0,6
-job_hunte,91,108,0 duplicate(HntTrap) 37-2 -1,0,5
-job_hunte,91,102,0 duplicate(HntTrap) 37-3 -1,0,0
-job_hunte,98,109,0 duplicate(HntTrap) 38-1 -1,0,2
-job_hunte,99,109,0 duplicate(HntTrap) 38-2 -1,0,2
-job_hunte,103,109,0 duplicate(HntTrap) 38-3 -1,3,0
-job_hunte,103,108,0 duplicate(HntTrap) 38-4 -1,3,0
-job_hunte,97,106,0 duplicate(HntTrap) 39-1 -1,2,0
-job_hunte,96,107,0 duplicate(HntTrap) 39-2 -1,1,0
-job_hunte,94,108,0 duplicate(HntTrap) 39-3 -1,0,1
-job_hunte,95,109,0 duplicate(HntTrap) 39-4 -1,0,0
-job_hunte,95,108,0 duplicate(HntTrap) 40-1 -1,0,0
-job_hunte,94,106,0 duplicate(HntTrap) 40-2 -1,0,0
-job_hunte,96,102,0 duplicate(HntTrap) 40-3 -1,0,3
-job_hunte,97,102,0 duplicate(HntTrap) 40-4 -1,0,3
-job_hunte,95,98,0 duplicate(HntTrap) 41-1 -1,2,0
-job_hunte,94,99,0 duplicate(HntTrap) 42-1 -1,1,0
-job_hunte,92,98,0 duplicate(HntTrap) 43-1 -1,0,0
-job_hunte,112,110,0 duplicate(HntTrap) 44-1 -1,0,0
-job_hunte,112,111,0 duplicate(HntTrap) 44-2 -1,0,0
-job_hunte,113,110,0 duplicate(HntTrap) 44-3 -1,0,0
-job_hunte,113,111,0 duplicate(HntTrap) 44-4 -1,0,0
-job_hunte,126,108,0 duplicate(HntTrap) 45-1 -1,0,1
-job_hunte,127,108,0 duplicate(HntTrap) 45-2 -1,0,1
-job_hunte,126,106,0 duplicate(HntTrap) 45-3 -1,0,0
-job_hunte,126,106,0 duplicate(HntTrap) 45-4 -1,0,0
-job_hunte,53,102,0 duplicate(HntTrap) 46-1 -1,1,1
-job_hunte,55,102,0 duplicate(HntTrap) 46-2 -1,0,1
-job_hunte,53,100,0 duplicate(HntTrap) 46-3 -1,1,0
-job_hunte,55,100,0 duplicate(HntTrap) 46-4 -1,0,0
-job_hunte,64,106,0 duplicate(HntTrap) 47-1 -1,0,0
-job_hunte,64,107,0 duplicate(HntTrap) 47-2 -1,0,0
-job_hunte,65,106,0 duplicate(HntTrap) 47-3 -1,0,0
-job_hunte,65,107,0 duplicate(HntTrap) 47-4 -1,0,0
-job_hunte,66,100,0 duplicate(HntTrap) 48-1 -1,0,0
-job_hunte,66,101,0 duplicate(HntTrap) 48-2 -1,0,0
-job_hunte,67,100,0 duplicate(HntTrap) 48-3 -1,0,0
-job_hunte,67,101,0 duplicate(HntTrap) 48-4 -1,0,0
-job_hunte,86,106,0 duplicate(HntTrap) 49-1 -1,0,1
-job_hunte,87,106,0 duplicate(HntTrap) 49-2 -1,0,1
-job_hunte,82,104,0 duplicate(HntTrap) 49-3 -1,5,0
-job_hunte,81,105,0 duplicate(HntTrap) 49-4 -1,4,0
-job_hunte,76,105,0 duplicate(HntTrap) 50-1 -1,0,0
-job_hunte,76,104,0 duplicate(HntTrap) 50-2 -1,0,0
-job_hunte,78,101,0 duplicate(HntTrap) 50-3 -1,0,2
-job_hunte,79,101,0 duplicate(HntTrap) 50-4 -1,0,2
-job_hunte,76,99,0 duplicate(HntTrap) 51-1 -1,1,0
-job_hunte,77,98,0 duplicate(HntTrap) 51-2 -1,2,0
-job_hunte,74,99,0 duplicate(HntTrap) 51-3 -1,0,0
-job_hunte,74,98,0 duplicate(HntTrap) 51-4 -1,0,0
-job_hunte,82,100,0 duplicate(HntTrap) 53-1 -1,0,0
-job_hunte,82,101,0 duplicate(HntTrap) 53-2 -1,0,0
-job_hunte,83,100,0 duplicate(HntTrap) 53-3 -1,0,0
-job_hunte,83,101,0 duplicate(HntTrap) 53-4 -1,0,0
-job_hunte,106,104,0 duplicate(HntTrap) 54-1 -1,0,0
-job_hunte,106,105,0 duplicate(HntTrap) 54-2 -1,0,0
-job_hunte,107,104,0 duplicate(HntTrap) 54-3 -1,0,0
-job_hunte,107,105,0 duplicate(HntTrap) 54-4 -1,0,0
-job_hunte,112,104,0 duplicate(HntTrap) 55-1 -1,0,1
-job_hunte,113,104,0 duplicate(HntTrap) 55-2 -1,0,1
-job_hunte,112,102,0 duplicate(HntTrap) 55-3 -1,0,0
-job_hunte,113,102,0 duplicate(HntTrap) 55-4 -1,0,0
-job_hunte,54,92,0 duplicate(HntTrap) 56-1 -1,0,0
-job_hunte,54,93,0 duplicate(HntTrap) 56-2 -1,0,0
-job_hunte,55,92,0 duplicate(HntTrap) 56-3 -1,0,0
-job_hunte,55,93,0 duplicate(HntTrap) 56-4 -1,0,0
-job_hunte,52,90,0 duplicate(HntTrap) 56-5 -1,0,0
-job_hunte,52,91,0 duplicate(HntTrap) 56-6 -1,0,0
-job_hunte,53,90,0 duplicate(HntTrap) 56-7 -1,0,0
-job_hunte,53,91,0 duplicate(HntTrap) 56-8 -1,0,0
-job_hunte,64,92,0 duplicate(HntTrap) 57-1 -1,0,0
-job_hunte,64,93,0 duplicate(HntTrap) 57-2 -1,0,0
-job_hunte,65,92,0 duplicate(HntTrap) 57-3 -1,0,0
+job_hunte,53,140,0 duplicate(HntTrap) 1-2 FAKE_NPC,0,1
+job_hunte,54,141,0 duplicate(HntTrap) 1-3 FAKE_NPC,0,0
+job_hunte,55,141,0 duplicate(HntTrap) 1-4 FAKE_NPC,0,0
+job_hunte,55,140,0 duplicate(HntTrap) 1-5 FAKE_NPC,0,0
+job_hunte,54,140,0 duplicate(HntTrap) 1-6 FAKE_NPC,0,0
+job_hunte,52,138,0 duplicate(HntTrap) 1-7 FAKE_NPC,0,0
+job_hunte,53,138,0 duplicate(HntTrap) 1-8 FAKE_NPC,0,0
+job_hunte,62,140,0 duplicate(HntTrap) 2-1 FAKE_NPC,0,1
+job_hunte,63,140,0 duplicate(HntTrap) 2-2 FAKE_NPC,0,1
+job_hunte,64,140,0 duplicate(HntTrap) 2-3 FAKE_NPC,0,0
+job_hunte,64,141,0 duplicate(HntTrap) 2-4 FAKE_NPC,0,0
+job_hunte,65,140,0 duplicate(HntTrap) 2-5 FAKE_NPC,0,0
+job_hunte,65,141,0 duplicate(HntTrap) 2-6 FAKE_NPC,0,0
+job_hunte,62,138,0 duplicate(HntTrap) 2-7 FAKE_NPC,0,0
+job_hunte,63,138,0 duplicate(HntTrap) 2-8 FAKE_NPC,0,0
+job_hunte,72,140,0 duplicate(HntTrap) 3-1 FAKE_NPC,0,1
+job_hunte,73,140,0 duplicate(HntTrap) 3-2 FAKE_NPC,0,1
+job_hunte,72,138,0 duplicate(HntTrap) 3-3 FAKE_NPC,0,0
+job_hunte,72,138,0 duplicate(HntTrap) 3-4 FAKE_NPC,0,0
+job_hunte,78,140,0 duplicate(HntTrap) 4-1 FAKE_NPC,0,0
+job_hunte,78,141,0 duplicate(HntTrap) 4-2 FAKE_NPC,0,0
+job_hunte,79,140,0 duplicate(HntTrap) 4-3 FAKE_NPC,0,0
+job_hunte,79,141,0 duplicate(HntTrap) 4-4 FAKE_NPC,0,0
+job_hunte,82,138,0 duplicate(HntTrap) 5-1 FAKE_NPC,0,0
+job_hunte,82,139,0 duplicate(HntTrap) 5-2 FAKE_NPC,0,0
+job_hunte,83,138,0 duplicate(HntTrap) 5-3 FAKE_NPC,0,0
+job_hunte,83,139,0 duplicate(HntTrap) 5-4 FAKE_NPC,0,0
+job_hunte,99,138,0 duplicate(HntTrap) 6-1 FAKE_NPC,1,0
+job_hunte,99,139,0 duplicate(HntTrap) 6-2 FAKE_NPC,1,0
+job_hunte,101,138,0 duplicate(HntTrap) 6-3 FAKE_NPC,0,0
+job_hunte,101,139,0 duplicate(HntTrap) 6-4 FAKE_NPC,0,0
+job_hunte,106,140,0 duplicate(HntTrap) 7-1 FAKE_NPC,0,1
+job_hunte,107,140,0 duplicate(HntTrap) 7-2 FAKE_NPC,0,1
+job_hunte,106,138,0 duplicate(HntTrap) 7-3 FAKE_NPC,0,0
+job_hunte,107,138,0 duplicate(HntTrap) 7-4 FAKE_NPC,0,0
+job_hunte,112,140,0 duplicate(HntTrap) 8-1 FAKE_NPC,0,0
+job_hunte,112,141,0 duplicate(HntTrap) 8-2 FAKE_NPC,0,0
+job_hunte,113,140,0 duplicate(HntTrap) 8-3 FAKE_NPC,0,0
+job_hunte,113,141,0 duplicate(HntTrap) 8-4 FAKE_NPC,0,0
+job_hunte,116,140,0 duplicate(HntTrap) 9-1 FAKE_NPC,0,0
+job_hunte,116,141,0 duplicate(HntTrap) 9-2 FAKE_NPC,0,0
+job_hunte,117,140,0 duplicate(HntTrap) 9-3 FAKE_NPC,0,0
+job_hunte,117,141,0 duplicate(HntTrap) 9-4 FAKE_NPC,0,0
+job_hunte,120,138,0 duplicate(HntTrap) 10-1 FAKE_NPC,0,0
+job_hunte,120,139,0 duplicate(HntTrap) 10-2 FAKE_NPC,0,0
+job_hunte,121,138,0 duplicate(HntTrap) 10-3 FAKE_NPC,0,0
+job_hunte,121,139,0 duplicate(HntTrap) 10-4 FAKE_NPC,0,0
+job_hunte,126,139,0 duplicate(HntTrap) 11-1 FAKE_NPC,0,2
+job_hunte,127,139,0 duplicate(HntTrap) 11-2 FAKE_NPC,0,2
+job_hunte,126,136,0 duplicate(HntTrap) 11-3 FAKE_NPC,0,0
+job_hunte,127,136,0 duplicate(HntTrap) 11-4 FAKE_NPC,0,0
+job_hunte,52,134,0 duplicate(HntTrap) 12-1 FAKE_NPC,0,1
+job_hunte,53,134,0 duplicate(HntTrap) 12-2 FAKE_NPC,0,1
+job_hunte,52,132,0 duplicate(HntTrap) 12-3 FAKE_NPC,0,0
+job_hunte,53,132,0 duplicate(HntTrap) 12-4 FAKE_NPC,0,0
+job_hunte,124,130,0 duplicate(HntTrap) 13-1 FAKE_NPC,0,0
+job_hunte,124,131,0 duplicate(HntTrap) 13-2 FAKE_NPC,0,0
+job_hunte,125,130,0 duplicate(HntTrap) 13-3 FAKE_NPC,0,0
+job_hunte,125,131,0 duplicate(HntTrap) 13-4 FAKE_NPC,0,0
+job_hunte,64,128,0 duplicate(HntTrap) 14-1 FAKE_NPC,0,0
+job_hunte,64,129,0 duplicate(HntTrap) 14-2 FAKE_NPC,0,0
+job_hunte,65,128,0 duplicate(HntTrap) 14-3 FAKE_NPC,0,0
+job_hunte,65,129,0 duplicate(HntTrap) 14-4 FAKE_NPC,0,0
+job_hunte,68,126,0 duplicate(HntTrap) 15-1 FAKE_NPC,0,0
+job_hunte,68,127,0 duplicate(HntTrap) 15-2 FAKE_NPC,0,0
+job_hunte,69,126,0 duplicate(HntTrap) 15-3 FAKE_NPC,0,0
+job_hunte,69,127,0 duplicate(HntTrap) 15-4 FAKE_NPC,0,0
+job_hunte,75,128,0 duplicate(HntTrap) 16-1 FAKE_NPC,1,0
+job_hunte,75,129,0 duplicate(HntTrap) 16-2 FAKE_NPC,1,0
+job_hunte,77,128,0 duplicate(HntTrap) 16-3 FAKE_NPC,0,0
+job_hunte,77,129,0 duplicate(HntTrap) 16-4 FAKE_NPC,0,0
+job_hunte,82,126,0 duplicate(HntTrap) 17-1 FAKE_NPC,0,0
+job_hunte,82,127,0 duplicate(HntTrap) 17-2 FAKE_NPC,0,0
+job_hunte,83,126,0 duplicate(HntTrap) 17-3 FAKE_NPC,0,0
+job_hunte,83,127,0 duplicate(HntTrap) 17-4 FAKE_NPC,0,0
+job_hunte,96,128,0 duplicate(HntTrap) 18-1 FAKE_NPC,0,0
+job_hunte,96,129,0 duplicate(HntTrap) 18-2 FAKE_NPC,0,0
+job_hunte,97,128,0 duplicate(HntTrap) 18-3 FAKE_NPC,0,0
+job_hunte,97,129,0 duplicate(HntTrap) 18-4 FAKE_NPC,0,0
+job_hunte,100,126,0 duplicate(HntTrap) 19-1 FAKE_NPC,0,0
+job_hunte,100,127,0 duplicate(HntTrap) 19-2 FAKE_NPC,0,0
+job_hunte,101,126,0 duplicate(HntTrap) 19-3 FAKE_NPC,0,0
+job_hunte,101,127,0 duplicate(HntTrap) 19-4 FAKE_NPC,0,0
+job_hunte,106,128,0 duplicate(HntTrap) 20-1 FAKE_NPC,0,0
+job_hunte,106,129,0 duplicate(HntTrap) 20-2 FAKE_NPC,0,0
+job_hunte,107,128,0 duplicate(HntTrap) 20-3 FAKE_NPC,0,0
+job_hunte,107,129,0 duplicate(HntTrap) 20-4 FAKE_NPC,0,0
+job_hunte,112,126,0 duplicate(HntTrap) 21-1 FAKE_NPC,0,0
+job_hunte,112,127,0 duplicate(HntTrap) 21-2 FAKE_NPC,0,0
+job_hunte,113,126,0 duplicate(HntTrap) 21-3 FAKE_NPC,0,0
+job_hunte,113,127,0 duplicate(HntTrap) 21-4 FAKE_NPC,0,0
+job_hunte,126,126,0 duplicate(HntTrap) 22-1 FAKE_NPC,0,0
+job_hunte,126,127,0 duplicate(HntTrap) 22-2 FAKE_NPC,0,0
+job_hunte,127,126,0 duplicate(HntTrap) 22-3 FAKE_NPC,0,0
+job_hunte,127,127,0 duplicate(HntTrap) 22-4 FAKE_NPC,0,0
+job_hunte,52,122,0 duplicate(HntTrap) 23-1 FAKE_NPC,0,1
+job_hunte,52,122,0 duplicate(HntTrap) 23-2 FAKE_NPC,0,1
+job_hunte,53,120,0 duplicate(HntTrap) 23-3 FAKE_NPC,1,0
+job_hunte,54,121,0 duplicate(HntTrap) 23-4 FAKE_NPC,0,0
+job_hunte,55,121,0 duplicate(HntTrap) 23-5 FAKE_NPC,0,0
+job_hunte,55,120,0 duplicate(HntTrap) 23-6 FAKE_NPC,0,0
+job_hunte,66,120,0 duplicate(HntTrap) 24-1 FAKE_NPC,0,0
+job_hunte,66,121,0 duplicate(HntTrap) 24-2 FAKE_NPC,0,0
+job_hunte,67,120,0 duplicate(HntTrap) 24-3 FAKE_NPC,0,0
+job_hunte,67,121,0 duplicate(HntTrap) 24-4 FAKE_NPC,0,0
+job_hunte,114,118,0 duplicate(HntTrap) 25-1 FAKE_NPC,0,0
+job_hunte,114,119,0 duplicate(HntTrap) 25-2 FAKE_NPC,0,0
+job_hunte,115,118,0 duplicate(HntTrap) 25-3 FAKE_NPC,0,0
+job_hunte,115,119,0 duplicate(HntTrap) 25-4 FAKE_NPC,0,0
+job_hunte,124,120,0 duplicate(HntTrap) 26-1 FAKE_NPC,0,1
+job_hunte,125,120,0 duplicate(HntTrap) 26-2 FAKE_NPC,0,1
+job_hunte,124,118,0 duplicate(HntTrap) 26-3 FAKE_NPC,0,0
+job_hunte,125,118,0 duplicate(HntTrap) 26-4 FAKE_NPC,0,0
+job_hunte,66,116,0 duplicate(HntTrap) 27-1 FAKE_NPC,0,0
+job_hunte,66,117,0 duplicate(HntTrap) 27-2 FAKE_NPC,0,0
+job_hunte,67,116,0 duplicate(HntTrap) 27-3 FAKE_NPC,0,0
+job_hunte,67,117,0 duplicate(HntTrap) 27-4 FAKE_NPC,0,0
+job_hunte,76,114,0 duplicate(HntTrap) 28-1 FAKE_NPC,0,0
+job_hunte,76,115,0 duplicate(HntTrap) 28-2 FAKE_NPC,0,0
+job_hunte,77,114,0 duplicate(HntTrap) 28-3 FAKE_NPC,0,0
+job_hunte,77,115,0 duplicate(HntTrap) 28-4 FAKE_NPC,0,0
+job_hunte,82,116,0 duplicate(HntTrap) 29-1 FAKE_NPC,0,0
+job_hunte,82,117,0 duplicate(HntTrap) 29-2 FAKE_NPC,0,0
+job_hunte,83,116,0 duplicate(HntTrap) 29-3 FAKE_NPC,0,0
+job_hunte,83,117,0 duplicate(HntTrap) 29-4 FAKE_NPC,0,0
+job_hunte,86,114,0 duplicate(HntTrap) 30-1 FAKE_NPC,0,0
+job_hunte,86,115,0 duplicate(HntTrap) 30-2 FAKE_NPC,0,0
+job_hunte,87,114,0 duplicate(HntTrap) 30-3 FAKE_NPC,0,0
+job_hunte,87,115,0 duplicate(HntTrap) 30-4 FAKE_NPC,0,0
+job_hunte,92,115,0 duplicate(HntTrap) 31-1 FAKE_NPC,1,0
+job_hunte,92,114,0 duplicate(HntTrap) 31-2 FAKE_NPC,1,0
+job_hunte,90,115,0 duplicate(HntTrap) 31-3 FAKE_NPC,0,0
+job_hunte,102,116,0 duplicate(HntTrap) 32-1 FAKE_NPC,0,0
+job_hunte,102,117,0 duplicate(HntTrap) 32-2 FAKE_NPC,0,0
+job_hunte,103,116,0 duplicate(HntTrap) 32-3 FAKE_NPC,0,0
+job_hunte,103,117,0 duplicate(HntTrap) 32-4 FAKE_NPC,0,0
+job_hunte,114,114,0 duplicate(HntTrap) 33-1 FAKE_NPC,0,0
+job_hunte,114,115,0 duplicate(HntTrap) 33-2 FAKE_NPC,0,0
+job_hunte,115,114,0 duplicate(HntTrap) 33-3 FAKE_NPC,0,0
+job_hunte,115,115,0 duplicate(HntTrap) 33-4 FAKE_NPC,0,0
+job_hunte,54,110,0 duplicate(HntTrap) 34-1 FAKE_NPC,0,1
+job_hunte,55,110,0 duplicate(HntTrap) 34-2 FAKE_NPC,0,1
+job_hunte,54,108,0 duplicate(HntTrap) 34-3 FAKE_NPC,0,0
+job_hunte,55,108,0 duplicate(HntTrap) 34-4 FAKE_NPC,0,0
+job_hunte,64,112,0 duplicate(HntTrap) 35-1 FAKE_NPC,0,0
+job_hunte,64,113,0 duplicate(HntTrap) 35-2 FAKE_NPC,0,0
+job_hunte,65,112,0 duplicate(HntTrap) 35-3 FAKE_NPC,0,0
+job_hunte,65,113,0 duplicate(HntTrap) 35-4 FAKE_NPC,0,0
+job_hunte,80,110,0 duplicate(HntTrap) 36-1 FAKE_NPC,0,0
+job_hunte,80,111,0 duplicate(HntTrap) 36-2 FAKE_NPC,0,0
+job_hunte,81,110,0 duplicate(HntTrap) 36-3 FAKE_NPC,0,0
+job_hunte,81,111,0 duplicate(HntTrap) 36-4 FAKE_NPC,0,0
+job_hunte,90,108,0 duplicate(HntTrap) 37-1 FAKE_NPC,0,6
+job_hunte,91,108,0 duplicate(HntTrap) 37-2 FAKE_NPC,0,5
+job_hunte,91,102,0 duplicate(HntTrap) 37-3 FAKE_NPC,0,0
+job_hunte,98,109,0 duplicate(HntTrap) 38-1 FAKE_NPC,0,2
+job_hunte,99,109,0 duplicate(HntTrap) 38-2 FAKE_NPC,0,2
+job_hunte,103,109,0 duplicate(HntTrap) 38-3 FAKE_NPC,3,0
+job_hunte,103,108,0 duplicate(HntTrap) 38-4 FAKE_NPC,3,0
+job_hunte,97,106,0 duplicate(HntTrap) 39-1 FAKE_NPC,2,0
+job_hunte,96,107,0 duplicate(HntTrap) 39-2 FAKE_NPC,1,0
+job_hunte,94,108,0 duplicate(HntTrap) 39-3 FAKE_NPC,0,1
+job_hunte,95,109,0 duplicate(HntTrap) 39-4 FAKE_NPC,0,0
+job_hunte,95,108,0 duplicate(HntTrap) 40-1 FAKE_NPC,0,0
+job_hunte,94,106,0 duplicate(HntTrap) 40-2 FAKE_NPC,0,0
+job_hunte,96,102,0 duplicate(HntTrap) 40-3 FAKE_NPC,0,3
+job_hunte,97,102,0 duplicate(HntTrap) 40-4 FAKE_NPC,0,3
+job_hunte,95,98,0 duplicate(HntTrap) 41-1 FAKE_NPC,2,0
+job_hunte,94,99,0 duplicate(HntTrap) 42-1 FAKE_NPC,1,0
+job_hunte,92,98,0 duplicate(HntTrap) 43-1 FAKE_NPC,0,0
+job_hunte,112,110,0 duplicate(HntTrap) 44-1 FAKE_NPC,0,0
+job_hunte,112,111,0 duplicate(HntTrap) 44-2 FAKE_NPC,0,0
+job_hunte,113,110,0 duplicate(HntTrap) 44-3 FAKE_NPC,0,0
+job_hunte,113,111,0 duplicate(HntTrap) 44-4 FAKE_NPC,0,0
+job_hunte,126,108,0 duplicate(HntTrap) 45-1 FAKE_NPC,0,1
+job_hunte,127,108,0 duplicate(HntTrap) 45-2 FAKE_NPC,0,1
+job_hunte,126,106,0 duplicate(HntTrap) 45-3 FAKE_NPC,0,0
+job_hunte,126,106,0 duplicate(HntTrap) 45-4 FAKE_NPC,0,0
+job_hunte,53,102,0 duplicate(HntTrap) 46-1 FAKE_NPC,1,1
+job_hunte,55,102,0 duplicate(HntTrap) 46-2 FAKE_NPC,0,1
+job_hunte,53,100,0 duplicate(HntTrap) 46-3 FAKE_NPC,1,0
+job_hunte,55,100,0 duplicate(HntTrap) 46-4 FAKE_NPC,0,0
+job_hunte,64,106,0 duplicate(HntTrap) 47-1 FAKE_NPC,0,0
+job_hunte,64,107,0 duplicate(HntTrap) 47-2 FAKE_NPC,0,0
+job_hunte,65,106,0 duplicate(HntTrap) 47-3 FAKE_NPC,0,0
+job_hunte,65,107,0 duplicate(HntTrap) 47-4 FAKE_NPC,0,0
+job_hunte,66,100,0 duplicate(HntTrap) 48-1 FAKE_NPC,0,0
+job_hunte,66,101,0 duplicate(HntTrap) 48-2 FAKE_NPC,0,0
+job_hunte,67,100,0 duplicate(HntTrap) 48-3 FAKE_NPC,0,0
+job_hunte,67,101,0 duplicate(HntTrap) 48-4 FAKE_NPC,0,0
+job_hunte,86,106,0 duplicate(HntTrap) 49-1 FAKE_NPC,0,1
+job_hunte,87,106,0 duplicate(HntTrap) 49-2 FAKE_NPC,0,1
+job_hunte,82,104,0 duplicate(HntTrap) 49-3 FAKE_NPC,5,0
+job_hunte,81,105,0 duplicate(HntTrap) 49-4 FAKE_NPC,4,0
+job_hunte,76,105,0 duplicate(HntTrap) 50-1 FAKE_NPC,0,0
+job_hunte,76,104,0 duplicate(HntTrap) 50-2 FAKE_NPC,0,0
+job_hunte,78,101,0 duplicate(HntTrap) 50-3 FAKE_NPC,0,2
+job_hunte,79,101,0 duplicate(HntTrap) 50-4 FAKE_NPC,0,2
+job_hunte,76,99,0 duplicate(HntTrap) 51-1 FAKE_NPC,1,0
+job_hunte,77,98,0 duplicate(HntTrap) 51-2 FAKE_NPC,2,0
+job_hunte,74,99,0 duplicate(HntTrap) 51-3 FAKE_NPC,0,0
+job_hunte,74,98,0 duplicate(HntTrap) 51-4 FAKE_NPC,0,0
+job_hunte,82,100,0 duplicate(HntTrap) 53-1 FAKE_NPC,0,0
+job_hunte,82,101,0 duplicate(HntTrap) 53-2 FAKE_NPC,0,0
+job_hunte,83,100,0 duplicate(HntTrap) 53-3 FAKE_NPC,0,0
+job_hunte,83,101,0 duplicate(HntTrap) 53-4 FAKE_NPC,0,0
+job_hunte,106,104,0 duplicate(HntTrap) 54-1 FAKE_NPC,0,0
+job_hunte,106,105,0 duplicate(HntTrap) 54-2 FAKE_NPC,0,0
+job_hunte,107,104,0 duplicate(HntTrap) 54-3 FAKE_NPC,0,0
+job_hunte,107,105,0 duplicate(HntTrap) 54-4 FAKE_NPC,0,0
+job_hunte,112,104,0 duplicate(HntTrap) 55-1 FAKE_NPC,0,1
+job_hunte,113,104,0 duplicate(HntTrap) 55-2 FAKE_NPC,0,1
+job_hunte,112,102,0 duplicate(HntTrap) 55-3 FAKE_NPC,0,0
+job_hunte,113,102,0 duplicate(HntTrap) 55-4 FAKE_NPC,0,0
+job_hunte,54,92,0 duplicate(HntTrap) 56-1 FAKE_NPC,0,0
+job_hunte,54,93,0 duplicate(HntTrap) 56-2 FAKE_NPC,0,0
+job_hunte,55,92,0 duplicate(HntTrap) 56-3 FAKE_NPC,0,0
+job_hunte,55,93,0 duplicate(HntTrap) 56-4 FAKE_NPC,0,0
+job_hunte,52,90,0 duplicate(HntTrap) 56-5 FAKE_NPC,0,0
+job_hunte,52,91,0 duplicate(HntTrap) 56-6 FAKE_NPC,0,0
+job_hunte,53,90,0 duplicate(HntTrap) 56-7 FAKE_NPC,0,0
+job_hunte,53,91,0 duplicate(HntTrap) 56-8 FAKE_NPC,0,0
+job_hunte,64,92,0 duplicate(HntTrap) 57-1 FAKE_NPC,0,0
+job_hunte,64,93,0 duplicate(HntTrap) 57-2 FAKE_NPC,0,0
+job_hunte,65,92,0 duplicate(HntTrap) 57-3 FAKE_NPC,0,0
-job_hunte,65,93,0 script 57-4::HntTrap2 -1,{
+job_hunte,65,93,0 script 57-4::HntTrap2 FAKE_NPC,{
OnTouch:
mapannounce "job_hunte",strcharinfo(0) + ", has failed me! Go back to where you started!",bc_map;
HNTR_Q = 13;
@@ -1629,161 +1629,161 @@ OnTouch:
end;
}
-job_hunte,76,94,0 duplicate(HntTrap2) 58-1 -1,0,0
-job_hunte,76,95,0 duplicate(HntTrap2) 58-2 -1,0,0
-job_hunte,77,94,0 duplicate(HntTrap2) 58-3 -1,0,0
-job_hunte,77,95,0 duplicate(HntTrap2) 58-4 -1,0,0
-job_hunte,78,92,0 duplicate(HntTrap2) 59-1 -1,0,0
-job_hunte,78,93,0 duplicate(HntTrap2) 59-2 -1,0,0
-job_hunte,79,92,0 duplicate(HntTrap2) 59-3 -1,0,0
-job_hunte,79,93,0 duplicate(HntTrap2) 59-4 -1,0,0
-job_hunte,86,92,0 duplicate(HntTrap2) 60-1 -1,0,0
-job_hunte,86,93,0 duplicate(HntTrap2) 60-2 -1,0,0
-job_hunte,87,92,0 duplicate(HntTrap2) 60-3 -1,0,0
-job_hunte,87,93,0 duplicate(HntTrap2) 60-4 -1,0,0
-job_hunte,90,96,0 duplicate(HntTrap2) 61-1 -1,0,0
-job_hunte,90,97,0 duplicate(HntTrap2) 61-2 -1,0,0
-job_hunte,91,96,0 duplicate(HntTrap2) 61-3 -1,0,0
-job_hunte,91,97,0 duplicate(HntTrap2) 61-4 -1,0,0
-job_hunte,99,95,0 duplicate(HntTrap2) 62-1 -1,1,0
-job_hunte,99,94,0 duplicate(HntTrap2) 62-2 -1,1,0
-job_hunte,101,94,0 duplicate(HntTrap2) 62-3 -1,0,1
-job_hunte,100,93,0 duplicate(HntTrap2) 62-4 -1,0,0
-job_hunte,100,92,0 duplicate(HntTrap2) 63-1 -1,0,0
-job_hunte,101,92,0 duplicate(HntTrap2) 63-2 -1,0,0
-job_hunte,102,98,0 duplicate(HntTrap2) 64-1 -1,0,0
-job_hunte,102,99,0 duplicate(HntTrap2) 64-2 -1,0,0
-job_hunte,103,98,0 duplicate(HntTrap2) 64-3 -1,0,0
-job_hunte,103,99,0 duplicate(HntTrap2) 64-4 -1,0,0
-job_hunte,102,90,0 duplicate(HntTrap2) 65-1 -1,0,0
-job_hunte,102,91,0 duplicate(HntTrap2) 65-2 -1,0,0
-job_hunte,103,90,0 duplicate(HntTrap2) 65-3 -1,0,0
-job_hunte,103,91,0 duplicate(HntTrap2) 65-4 -1,0,0
-job_hunte,114,96,0 duplicate(HntTrap2) 66-1 -1,0,0
-job_hunte,114,97,0 duplicate(HntTrap2) 66-2 -1,0,0
-job_hunte,115,96,0 duplicate(HntTrap2) 66-3 -1,0,0
-job_hunte,115,97,0 duplicate(HntTrap2) 66-4 -1,0,0
-job_hunte,112,90,0 duplicate(HntTrap2) 67-1 -1,0,0
-job_hunte,112,91,0 duplicate(HntTrap2) 67-2 -1,0,0
-job_hunte,113,90,0 duplicate(HntTrap2) 67-3 -1,0,0
-job_hunte,113,91,0 duplicate(HntTrap2) 67-4 -1,0,0
-job_hunte,125,97,0 duplicate(HntTrap2) 68-1 -1,1,0
-job_hunte,125,96,0 duplicate(HntTrap2) 68-2 -1,1,0
-job_hunte,127,96,0 duplicate(HntTrap2) 68-3 -1,0,0
-job_hunte,127,97,0 duplicate(HntTrap2) 68-4 -1,0,0
-job_hunte,52,86,0 duplicate(HntTrap2) 69-1 -1,0,0
-job_hunte,52,87,0 duplicate(HntTrap2) 69-2 -1,0,0
-job_hunte,53,86,0 duplicate(HntTrap2) 69-3 -1,0,0
-job_hunte,53,87,0 duplicate(HntTrap2) 69-4 -1,0,0
-job_hunte,66,88,0 duplicate(HntTrap2) 70-1 -1,0,0
-job_hunte,66,89,0 duplicate(HntTrap2) 70-2 -1,0,0
-job_hunte,67,88,0 duplicate(HntTrap2) 70-3 -1,0,0
-job_hunte,67,89,0 duplicate(HntTrap2) 70-4 -1,0,0
-job_hunte,114,84,0 duplicate(HntTrap2) 71-1 -1,0,0
-job_hunte,114,85,0 duplicate(HntTrap2) 71-2 -1,0,0
-job_hunte,115,84,0 duplicate(HntTrap2) 71-3 -1,0,0
-job_hunte,115,85,0 duplicate(HntTrap2) 71-4 -1,0,0
-job_hunte,126,86,0 duplicate(HntTrap2) 72-1 -1,0,0
-job_hunte,126,87,0 duplicate(HntTrap2) 72-2 -1,0,0
-job_hunte,127,86,0 duplicate(HntTrap2) 72-3 -1,0,0
-job_hunte,127,87,0 duplicate(HntTrap2) 72-4 -1,0,0
-job_hunte,54,80,0 duplicate(HntTrap2) 73-1 -1,0,1
-job_hunte,55,80,0 duplicate(HntTrap2) 73-2 -1,0,1
-job_hunte,55,80,0 duplicate(HntTrap2) 73-3 -1,0,0
-job_hunte,55,78,0 duplicate(HntTrap2) 73-4 -1,0,0
-job_hunte,64,82,0 duplicate(HntTrap2) 74-1 -1,0,1
-job_hunte,65,82,0 duplicate(HntTrap2) 74-2 -1,0,1
-job_hunte,64,80,0 duplicate(HntTrap2) 74-3 -1,0,0
-job_hunte,65,80,0 duplicate(HntTrap2) 74-4 -1,0,0
-job_hunte,66,78,0 duplicate(HntTrap2) 75-1 -1,0,0
-job_hunte,66,79,0 duplicate(HntTrap2) 75-2 -1,0,0
-job_hunte,67,78,0 duplicate(HntTrap2) 75-3 -1,0,0
-job_hunte,67,79,0 duplicate(HntTrap2) 75-4 -1,0,0
-job_hunte,74,78,0 duplicate(HntTrap2) 76-1 -1,0,0
-job_hunte,74,79,0 duplicate(HntTrap2) 76-2 -1,0,0
-job_hunte,75,78,0 duplicate(HntTrap2) 76-3 -1,0,0
-job_hunte,75,79,0 duplicate(HntTrap2) 76-4 -1,0,0
-job_hunte,78,80,0 duplicate(HntTrap2) 77-1 -1,0,0
-job_hunte,78,81,0 duplicate(HntTrap2) 77-2 -1,0,0
-job_hunte,79,80,0 duplicate(HntTrap2) 77-3 -1,0,0
-job_hunte,79,81,0 duplicate(HntTrap2) 77-4 -1,0,0
-job_hunte,82,78,0 duplicate(HntTrap2) 78-1 -1,0,0
-job_hunte,82,79,0 duplicate(HntTrap2) 78-2 -1,0,0
-job_hunte,83,78,0 duplicate(HntTrap2) 78-3 -1,0,0
-job_hunte,83,79,0 duplicate(HntTrap2) 78-4 -1,0,0
-job_hunte,94,78,0 duplicate(HntTrap2) 79-1 -1,0,0
-job_hunte,94,79,0 duplicate(HntTrap2) 79-2 -1,0,0
-job_hunte,95,78,0 duplicate(HntTrap2) 79-3 -1,0,0
-job_hunte,95,79,0 duplicate(HntTrap2) 79-4 -1,0,0
-job_hunte,101,80,0 duplicate(HntTrap2) 80-1 -1,1,0
-job_hunte,101,81,0 duplicate(HntTrap2) 80-2 -1,1,0
-job_hunte,103,81,0 duplicate(HntTrap2) 80-3 -1,0,0
-job_hunte,103,80,0 duplicate(HntTrap2) 80-4 -1,0,0
-job_hunte,104,78,0 duplicate(HntTrap2) 81-1 -1,0,0
-job_hunte,104,79,0 duplicate(HntTrap2) 81-2 -1,0,0
-job_hunte,105,78,0 duplicate(HntTrap2) 81-3 -1,0,0
-job_hunte,105,79,0 duplicate(HntTrap2) 81-4 -1,0,0
-job_hunte,110,78,0 duplicate(HntTrap2) 82-1 -1,0,0
-job_hunte,110,79,0 duplicate(HntTrap2) 82-2 -1,0,0
-job_hunte,111,78,0 duplicate(HntTrap2) 82-3 -1,0,0
-job_hunte,111,79,0 duplicate(HntTrap2) 82-4 -1,0,0
-job_hunte,114,80,0 duplicate(HntTrap2) 83-1 -1,0,0
-job_hunte,114,81,0 duplicate(HntTrap2) 83-2 -1,0,0
-job_hunte,115,80,0 duplicate(HntTrap2) 83-3 -1,0,0
-job_hunte,115,81,0 duplicate(HntTrap2) 83-4 -1,0,0
-job_hunte,124,78,0 duplicate(HntTrap2) 84-1 -1,0,0
-job_hunte,124,79,0 duplicate(HntTrap2) 84-2 -1,0,0
-job_hunte,125,78,0 duplicate(HntTrap2) 84-3 -1,0,0
-job_hunte,125,79,0 duplicate(HntTrap2) 84-4 -1,0,0
-job_hunte,126,82,0 duplicate(HntTrap2) 85-1 -1,0,0
-job_hunte,126,83,0 duplicate(HntTrap2) 85-2 -1,0,0
-job_hunte,127,82,0 duplicate(HntTrap2) 85-3 -1,0,0
-job_hunte,127,83,0 duplicate(HntTrap2) 85-4 -1,0,0
-job_hunte,52,68,0 duplicate(HntTrap2) 86-1 -1,0,1
-job_hunte,53,68,0 duplicate(HntTrap2) 86-2 -1,0,1
-job_hunte,52,66,0 duplicate(HntTrap2) 86-3 -1,0,0
-job_hunte,53,66,0 duplicate(HntTrap2) 86-4 -1,0,0
-job_hunte,54,70,0 duplicate(HntTrap2) 87-1 -1,0,1
-job_hunte,55,70,0 duplicate(HntTrap2) 87-2 -1,0,1
-job_hunte,54,68,0 duplicate(HntTrap2) 87-3 -1,0,0
-job_hunte,55,68,0 duplicate(HntTrap2) 87-4 -1,0,0
-job_hunte,59,66,0 duplicate(HntTrap2) 88-1 -1,1,0
-job_hunte,59,67,0 duplicate(HntTrap2) 88-2 -1,1,0
-job_hunte,61,67,0 duplicate(HntTrap2) 88-3 -1,0,0
-job_hunte,61,66,0 duplicate(HntTrap2) 88-4 -1,0,0
-job_hunte,68,68,0 duplicate(HntTrap2) 89-1 -1,0,1
-job_hunte,69,68,0 duplicate(HntTrap2) 89-2 -1,0,1
-job_hunte,68,66,0 duplicate(HntTrap2) 89-3 -1,0,0
-job_hunte,69,66,0 duplicate(HntTrap2) 89-4 -1,0,0
-job_hunte,76,66,0 duplicate(HntTrap2) 90-1 -1,0,0
-job_hunte,76,67,0 duplicate(HntTrap2) 90-2 -1,0,0
-job_hunte,77,66,0 duplicate(HntTrap2) 90-3 -1,0,0
-job_hunte,77,67,0 duplicate(HntTrap2) 90-4 -1,0,0
-job_hunte,82,68,0 duplicate(HntTrap2) 91-1 -1,0,0
-job_hunte,82,69,0 duplicate(HntTrap2) 91-2 -1,0,0
-job_hunte,83,68,0 duplicate(HntTrap2) 91-3 -1,0,0
-job_hunte,83,69,0 duplicate(HntTrap2) 91-4 -1,0,0
-job_hunte,96,66,0 duplicate(HntTrap2) 92-1 -1,0,0
-job_hunte,96,67,0 duplicate(HntTrap2) 92-2 -1,0,0
-job_hunte,97,66,0 duplicate(HntTrap2) 92-3 -1,0,0
-job_hunte,97,67,0 duplicate(HntTrap2) 92-4 -1,0,0
-job_hunte,100,68,0 duplicate(HntTrap2) 93-1 -1,0,0
-job_hunte,100,69,0 duplicate(HntTrap2) 93-2 -1,0,0
-job_hunte,101,68,0 duplicate(HntTrap2) 93-3 -1,0,0
-job_hunte,101,69,0 duplicate(HntTrap2) 93-4 -1,0,0
-job_hunte,107,66,0 duplicate(HntTrap2) 94-1 -1,1,0
-job_hunte,107,67,0 duplicate(HntTrap2) 94-2 -1,1,0
-job_hunte,109,67,0 duplicate(HntTrap2) 94-3 -1,0,0
-job_hunte,109,66,0 duplicate(HntTrap2) 94-4 -1,0,0
-job_hunte,117,69,0 duplicate(HntTrap2) 95-1 -1,1,0
-job_hunte,117,68,0 duplicate(HntTrap2) 95-2 -1,1,0
-job_hunte,119,69,0 duplicate(HntTrap2) 95-3 -1,0,0
-job_hunte,119,68,0 duplicate(HntTrap2) 95-4 -1,0,0
-job_hunte,124,66,0 duplicate(HntTrap2) 96-1 -1,0,0
-job_hunte,124,67,0 duplicate(HntTrap2) 96-2 -1,0,0
-job_hunte,125,66,0 duplicate(HntTrap2) 96-3 -1,0,0
-job_hunte,125,67,0 duplicate(HntTrap2) 96-4 -1,0,0
-job_hunte,126,70,0 duplicate(HntTrap2) 97-1 -1,0,0
-job_hunte,126,71,0 duplicate(HntTrap2) 97-2 -1,0,0
-job_hunte,127,70,0 duplicate(HntTrap2) 97-3 -1,0,0
-job_hunte,127,71,0 duplicate(HntTrap2) 97-4 -1,0,0
+job_hunte,76,94,0 duplicate(HntTrap2) 58-1 FAKE_NPC,0,0
+job_hunte,76,95,0 duplicate(HntTrap2) 58-2 FAKE_NPC,0,0
+job_hunte,77,94,0 duplicate(HntTrap2) 58-3 FAKE_NPC,0,0
+job_hunte,77,95,0 duplicate(HntTrap2) 58-4 FAKE_NPC,0,0
+job_hunte,78,92,0 duplicate(HntTrap2) 59-1 FAKE_NPC,0,0
+job_hunte,78,93,0 duplicate(HntTrap2) 59-2 FAKE_NPC,0,0
+job_hunte,79,92,0 duplicate(HntTrap2) 59-3 FAKE_NPC,0,0
+job_hunte,79,93,0 duplicate(HntTrap2) 59-4 FAKE_NPC,0,0
+job_hunte,86,92,0 duplicate(HntTrap2) 60-1 FAKE_NPC,0,0
+job_hunte,86,93,0 duplicate(HntTrap2) 60-2 FAKE_NPC,0,0
+job_hunte,87,92,0 duplicate(HntTrap2) 60-3 FAKE_NPC,0,0
+job_hunte,87,93,0 duplicate(HntTrap2) 60-4 FAKE_NPC,0,0
+job_hunte,90,96,0 duplicate(HntTrap2) 61-1 FAKE_NPC,0,0
+job_hunte,90,97,0 duplicate(HntTrap2) 61-2 FAKE_NPC,0,0
+job_hunte,91,96,0 duplicate(HntTrap2) 61-3 FAKE_NPC,0,0
+job_hunte,91,97,0 duplicate(HntTrap2) 61-4 FAKE_NPC,0,0
+job_hunte,99,95,0 duplicate(HntTrap2) 62-1 FAKE_NPC,1,0
+job_hunte,99,94,0 duplicate(HntTrap2) 62-2 FAKE_NPC,1,0
+job_hunte,101,94,0 duplicate(HntTrap2) 62-3 FAKE_NPC,0,1
+job_hunte,100,93,0 duplicate(HntTrap2) 62-4 FAKE_NPC,0,0
+job_hunte,100,92,0 duplicate(HntTrap2) 63-1 FAKE_NPC,0,0
+job_hunte,101,92,0 duplicate(HntTrap2) 63-2 FAKE_NPC,0,0
+job_hunte,102,98,0 duplicate(HntTrap2) 64-1 FAKE_NPC,0,0
+job_hunte,102,99,0 duplicate(HntTrap2) 64-2 FAKE_NPC,0,0
+job_hunte,103,98,0 duplicate(HntTrap2) 64-3 FAKE_NPC,0,0
+job_hunte,103,99,0 duplicate(HntTrap2) 64-4 FAKE_NPC,0,0
+job_hunte,102,90,0 duplicate(HntTrap2) 65-1 FAKE_NPC,0,0
+job_hunte,102,91,0 duplicate(HntTrap2) 65-2 FAKE_NPC,0,0
+job_hunte,103,90,0 duplicate(HntTrap2) 65-3 FAKE_NPC,0,0
+job_hunte,103,91,0 duplicate(HntTrap2) 65-4 FAKE_NPC,0,0
+job_hunte,114,96,0 duplicate(HntTrap2) 66-1 FAKE_NPC,0,0
+job_hunte,114,97,0 duplicate(HntTrap2) 66-2 FAKE_NPC,0,0
+job_hunte,115,96,0 duplicate(HntTrap2) 66-3 FAKE_NPC,0,0
+job_hunte,115,97,0 duplicate(HntTrap2) 66-4 FAKE_NPC,0,0
+job_hunte,112,90,0 duplicate(HntTrap2) 67-1 FAKE_NPC,0,0
+job_hunte,112,91,0 duplicate(HntTrap2) 67-2 FAKE_NPC,0,0
+job_hunte,113,90,0 duplicate(HntTrap2) 67-3 FAKE_NPC,0,0
+job_hunte,113,91,0 duplicate(HntTrap2) 67-4 FAKE_NPC,0,0
+job_hunte,125,97,0 duplicate(HntTrap2) 68-1 FAKE_NPC,1,0
+job_hunte,125,96,0 duplicate(HntTrap2) 68-2 FAKE_NPC,1,0
+job_hunte,127,96,0 duplicate(HntTrap2) 68-3 FAKE_NPC,0,0
+job_hunte,127,97,0 duplicate(HntTrap2) 68-4 FAKE_NPC,0,0
+job_hunte,52,86,0 duplicate(HntTrap2) 69-1 FAKE_NPC,0,0
+job_hunte,52,87,0 duplicate(HntTrap2) 69-2 FAKE_NPC,0,0
+job_hunte,53,86,0 duplicate(HntTrap2) 69-3 FAKE_NPC,0,0
+job_hunte,53,87,0 duplicate(HntTrap2) 69-4 FAKE_NPC,0,0
+job_hunte,66,88,0 duplicate(HntTrap2) 70-1 FAKE_NPC,0,0
+job_hunte,66,89,0 duplicate(HntTrap2) 70-2 FAKE_NPC,0,0
+job_hunte,67,88,0 duplicate(HntTrap2) 70-3 FAKE_NPC,0,0
+job_hunte,67,89,0 duplicate(HntTrap2) 70-4 FAKE_NPC,0,0
+job_hunte,114,84,0 duplicate(HntTrap2) 71-1 FAKE_NPC,0,0
+job_hunte,114,85,0 duplicate(HntTrap2) 71-2 FAKE_NPC,0,0
+job_hunte,115,84,0 duplicate(HntTrap2) 71-3 FAKE_NPC,0,0
+job_hunte,115,85,0 duplicate(HntTrap2) 71-4 FAKE_NPC,0,0
+job_hunte,126,86,0 duplicate(HntTrap2) 72-1 FAKE_NPC,0,0
+job_hunte,126,87,0 duplicate(HntTrap2) 72-2 FAKE_NPC,0,0
+job_hunte,127,86,0 duplicate(HntTrap2) 72-3 FAKE_NPC,0,0
+job_hunte,127,87,0 duplicate(HntTrap2) 72-4 FAKE_NPC,0,0
+job_hunte,54,80,0 duplicate(HntTrap2) 73-1 FAKE_NPC,0,1
+job_hunte,55,80,0 duplicate(HntTrap2) 73-2 FAKE_NPC,0,1
+job_hunte,55,80,0 duplicate(HntTrap2) 73-3 FAKE_NPC,0,0
+job_hunte,55,78,0 duplicate(HntTrap2) 73-4 FAKE_NPC,0,0
+job_hunte,64,82,0 duplicate(HntTrap2) 74-1 FAKE_NPC,0,1
+job_hunte,65,82,0 duplicate(HntTrap2) 74-2 FAKE_NPC,0,1
+job_hunte,64,80,0 duplicate(HntTrap2) 74-3 FAKE_NPC,0,0
+job_hunte,65,80,0 duplicate(HntTrap2) 74-4 FAKE_NPC,0,0
+job_hunte,66,78,0 duplicate(HntTrap2) 75-1 FAKE_NPC,0,0
+job_hunte,66,79,0 duplicate(HntTrap2) 75-2 FAKE_NPC,0,0
+job_hunte,67,78,0 duplicate(HntTrap2) 75-3 FAKE_NPC,0,0
+job_hunte,67,79,0 duplicate(HntTrap2) 75-4 FAKE_NPC,0,0
+job_hunte,74,78,0 duplicate(HntTrap2) 76-1 FAKE_NPC,0,0
+job_hunte,74,79,0 duplicate(HntTrap2) 76-2 FAKE_NPC,0,0
+job_hunte,75,78,0 duplicate(HntTrap2) 76-3 FAKE_NPC,0,0
+job_hunte,75,79,0 duplicate(HntTrap2) 76-4 FAKE_NPC,0,0
+job_hunte,78,80,0 duplicate(HntTrap2) 77-1 FAKE_NPC,0,0
+job_hunte,78,81,0 duplicate(HntTrap2) 77-2 FAKE_NPC,0,0
+job_hunte,79,80,0 duplicate(HntTrap2) 77-3 FAKE_NPC,0,0
+job_hunte,79,81,0 duplicate(HntTrap2) 77-4 FAKE_NPC,0,0
+job_hunte,82,78,0 duplicate(HntTrap2) 78-1 FAKE_NPC,0,0
+job_hunte,82,79,0 duplicate(HntTrap2) 78-2 FAKE_NPC,0,0
+job_hunte,83,78,0 duplicate(HntTrap2) 78-3 FAKE_NPC,0,0
+job_hunte,83,79,0 duplicate(HntTrap2) 78-4 FAKE_NPC,0,0
+job_hunte,94,78,0 duplicate(HntTrap2) 79-1 FAKE_NPC,0,0
+job_hunte,94,79,0 duplicate(HntTrap2) 79-2 FAKE_NPC,0,0
+job_hunte,95,78,0 duplicate(HntTrap2) 79-3 FAKE_NPC,0,0
+job_hunte,95,79,0 duplicate(HntTrap2) 79-4 FAKE_NPC,0,0
+job_hunte,101,80,0 duplicate(HntTrap2) 80-1 FAKE_NPC,1,0
+job_hunte,101,81,0 duplicate(HntTrap2) 80-2 FAKE_NPC,1,0
+job_hunte,103,81,0 duplicate(HntTrap2) 80-3 FAKE_NPC,0,0
+job_hunte,103,80,0 duplicate(HntTrap2) 80-4 FAKE_NPC,0,0
+job_hunte,104,78,0 duplicate(HntTrap2) 81-1 FAKE_NPC,0,0
+job_hunte,104,79,0 duplicate(HntTrap2) 81-2 FAKE_NPC,0,0
+job_hunte,105,78,0 duplicate(HntTrap2) 81-3 FAKE_NPC,0,0
+job_hunte,105,79,0 duplicate(HntTrap2) 81-4 FAKE_NPC,0,0
+job_hunte,110,78,0 duplicate(HntTrap2) 82-1 FAKE_NPC,0,0
+job_hunte,110,79,0 duplicate(HntTrap2) 82-2 FAKE_NPC,0,0
+job_hunte,111,78,0 duplicate(HntTrap2) 82-3 FAKE_NPC,0,0
+job_hunte,111,79,0 duplicate(HntTrap2) 82-4 FAKE_NPC,0,0
+job_hunte,114,80,0 duplicate(HntTrap2) 83-1 FAKE_NPC,0,0
+job_hunte,114,81,0 duplicate(HntTrap2) 83-2 FAKE_NPC,0,0
+job_hunte,115,80,0 duplicate(HntTrap2) 83-3 FAKE_NPC,0,0
+job_hunte,115,81,0 duplicate(HntTrap2) 83-4 FAKE_NPC,0,0
+job_hunte,124,78,0 duplicate(HntTrap2) 84-1 FAKE_NPC,0,0
+job_hunte,124,79,0 duplicate(HntTrap2) 84-2 FAKE_NPC,0,0
+job_hunte,125,78,0 duplicate(HntTrap2) 84-3 FAKE_NPC,0,0
+job_hunte,125,79,0 duplicate(HntTrap2) 84-4 FAKE_NPC,0,0
+job_hunte,126,82,0 duplicate(HntTrap2) 85-1 FAKE_NPC,0,0
+job_hunte,126,83,0 duplicate(HntTrap2) 85-2 FAKE_NPC,0,0
+job_hunte,127,82,0 duplicate(HntTrap2) 85-3 FAKE_NPC,0,0
+job_hunte,127,83,0 duplicate(HntTrap2) 85-4 FAKE_NPC,0,0
+job_hunte,52,68,0 duplicate(HntTrap2) 86-1 FAKE_NPC,0,1
+job_hunte,53,68,0 duplicate(HntTrap2) 86-2 FAKE_NPC,0,1
+job_hunte,52,66,0 duplicate(HntTrap2) 86-3 FAKE_NPC,0,0
+job_hunte,53,66,0 duplicate(HntTrap2) 86-4 FAKE_NPC,0,0
+job_hunte,54,70,0 duplicate(HntTrap2) 87-1 FAKE_NPC,0,1
+job_hunte,55,70,0 duplicate(HntTrap2) 87-2 FAKE_NPC,0,1
+job_hunte,54,68,0 duplicate(HntTrap2) 87-3 FAKE_NPC,0,0
+job_hunte,55,68,0 duplicate(HntTrap2) 87-4 FAKE_NPC,0,0
+job_hunte,59,66,0 duplicate(HntTrap2) 88-1 FAKE_NPC,1,0
+job_hunte,59,67,0 duplicate(HntTrap2) 88-2 FAKE_NPC,1,0
+job_hunte,61,67,0 duplicate(HntTrap2) 88-3 FAKE_NPC,0,0
+job_hunte,61,66,0 duplicate(HntTrap2) 88-4 FAKE_NPC,0,0
+job_hunte,68,68,0 duplicate(HntTrap2) 89-1 FAKE_NPC,0,1
+job_hunte,69,68,0 duplicate(HntTrap2) 89-2 FAKE_NPC,0,1
+job_hunte,68,66,0 duplicate(HntTrap2) 89-3 FAKE_NPC,0,0
+job_hunte,69,66,0 duplicate(HntTrap2) 89-4 FAKE_NPC,0,0
+job_hunte,76,66,0 duplicate(HntTrap2) 90-1 FAKE_NPC,0,0
+job_hunte,76,67,0 duplicate(HntTrap2) 90-2 FAKE_NPC,0,0
+job_hunte,77,66,0 duplicate(HntTrap2) 90-3 FAKE_NPC,0,0
+job_hunte,77,67,0 duplicate(HntTrap2) 90-4 FAKE_NPC,0,0
+job_hunte,82,68,0 duplicate(HntTrap2) 91-1 FAKE_NPC,0,0
+job_hunte,82,69,0 duplicate(HntTrap2) 91-2 FAKE_NPC,0,0
+job_hunte,83,68,0 duplicate(HntTrap2) 91-3 FAKE_NPC,0,0
+job_hunte,83,69,0 duplicate(HntTrap2) 91-4 FAKE_NPC,0,0
+job_hunte,96,66,0 duplicate(HntTrap2) 92-1 FAKE_NPC,0,0
+job_hunte,96,67,0 duplicate(HntTrap2) 92-2 FAKE_NPC,0,0
+job_hunte,97,66,0 duplicate(HntTrap2) 92-3 FAKE_NPC,0,0
+job_hunte,97,67,0 duplicate(HntTrap2) 92-4 FAKE_NPC,0,0
+job_hunte,100,68,0 duplicate(HntTrap2) 93-1 FAKE_NPC,0,0
+job_hunte,100,69,0 duplicate(HntTrap2) 93-2 FAKE_NPC,0,0
+job_hunte,101,68,0 duplicate(HntTrap2) 93-3 FAKE_NPC,0,0
+job_hunte,101,69,0 duplicate(HntTrap2) 93-4 FAKE_NPC,0,0
+job_hunte,107,66,0 duplicate(HntTrap2) 94-1 FAKE_NPC,1,0
+job_hunte,107,67,0 duplicate(HntTrap2) 94-2 FAKE_NPC,1,0
+job_hunte,109,67,0 duplicate(HntTrap2) 94-3 FAKE_NPC,0,0
+job_hunte,109,66,0 duplicate(HntTrap2) 94-4 FAKE_NPC,0,0
+job_hunte,117,69,0 duplicate(HntTrap2) 95-1 FAKE_NPC,1,0
+job_hunte,117,68,0 duplicate(HntTrap2) 95-2 FAKE_NPC,1,0
+job_hunte,119,69,0 duplicate(HntTrap2) 95-3 FAKE_NPC,0,0
+job_hunte,119,68,0 duplicate(HntTrap2) 95-4 FAKE_NPC,0,0
+job_hunte,124,66,0 duplicate(HntTrap2) 96-1 FAKE_NPC,0,0
+job_hunte,124,67,0 duplicate(HntTrap2) 96-2 FAKE_NPC,0,0
+job_hunte,125,66,0 duplicate(HntTrap2) 96-3 FAKE_NPC,0,0
+job_hunte,125,67,0 duplicate(HntTrap2) 96-4 FAKE_NPC,0,0
+job_hunte,126,70,0 duplicate(HntTrap2) 97-1 FAKE_NPC,0,0
+job_hunte,126,71,0 duplicate(HntTrap2) 97-2 FAKE_NPC,0,0
+job_hunte,127,70,0 duplicate(HntTrap2) 97-3 FAKE_NPC,0,0
+job_hunte,127,71,0 duplicate(HntTrap2) 97-4 FAKE_NPC,0,0
diff --git a/npc/jobs/2-1/knight.txt b/npc/jobs/2-1/knight.txt
index d0308d771..462e45fc0 100644
--- a/npc/jobs/2-1/knight.txt
+++ b/npc/jobs/2-1/knight.txt
@@ -1245,7 +1245,7 @@ OnStart:
end;
}
-- script Knight1 -1,{
+- script Knight1 FAKE_NPC,{
OnInit:
disablenpc "Knight1";
end;
@@ -1309,7 +1309,7 @@ OnTimer182000:
}
//== Test 2 part 2 =========================================
-- script Knight2 -1,{
+- script Knight2 FAKE_NPC,{
OnInit:
disablenpc "Knight2";
end;
@@ -1372,7 +1372,7 @@ OnTimer182000:
}
//== Test 2 part 3 =========================================
-- script Knight3 -1,{
+- script Knight3 FAKE_NPC,{
OnInit:
disablenpc "Knight3";
end;
diff --git a/npc/jobs/2-1/priest.txt b/npc/jobs/2-1/priest.txt
index cb5cf7fe1..de36e2791 100644
--- a/npc/jobs/2-1/priest.txt
+++ b/npc/jobs/2-1/priest.txt
@@ -1166,7 +1166,7 @@ OnTimer302000:
end;
}
-- script Z_C#prst -1,{
+- script Z_C#prst FAKE_NPC,{
end;
OnMyMobDead:
@@ -1174,7 +1174,7 @@ OnMyMobDead:
end;
}
-job_prist,24,44,0 script Zombie Info -1,1,1,{
+job_prist,24,44,0 script Zombie Info FAKE_NPC,1,1,{
OnTouch:
if (BaseJob == Job_Priest) {
mes "[Father Peter]";
@@ -1201,7 +1201,7 @@ OnTouch:
end;
}
-job_prist,24,52,0 script Zombie1_1 -1,14,1,{
+job_prist,24,52,0 script Zombie1_1 FAKE_NPC,14,1,{
OnInit:
disablenpc "Zombie1_1";
end;
@@ -1222,7 +1222,7 @@ OnDisable:
end;
}
-job_prist,21,62,0 script Zombie2_1 -1,17,1,{
+job_prist,21,62,0 script Zombie2_1 FAKE_NPC,17,1,{
OnInit:
disablenpc "Zombie2_1";
end;
@@ -1243,7 +1243,7 @@ OnDisable:
end;
}
-job_prist,24,72,0 script Zombie3_1 -1,14,1,{
+job_prist,24,72,0 script Zombie3_1 FAKE_NPC,14,1,{
OnInit:
disablenpc "Zombie3_1";
end;
@@ -1264,7 +1264,7 @@ OnDisable:
end;
}
-job_prist,21,82,0 script Zombie4_1 -1,17,1,{
+job_prist,21,82,0 script Zombie4_1 FAKE_NPC,17,1,{
OnInit:
disablenpc "Zombie4_1";
end;
@@ -1284,7 +1284,7 @@ OnDisable:
disablenpc "Zombie4_1";
}
-job_prist,24,92,0 script Zombie5_1 -1,14,1,{
+job_prist,24,92,0 script Zombie5_1 FAKE_NPC,14,1,{
OnInit:
disablenpc "Zombie5_1";
end;
@@ -1651,7 +1651,7 @@ OnDisable:
end;
}
-job_prist,90,55,0 script Mummy1_1 -1,15,1,{
+job_prist,90,55,0 script Mummy1_1 FAKE_NPC,15,1,{
OnInit:
disablenpc "Mummy1_1";
end;
@@ -1672,7 +1672,7 @@ OnDisable:
end;
}
-job_prist,90,70,0 script Mummy2_1 -1,15,1,{
+job_prist,90,70,0 script Mummy2_1 FAKE_NPC,15,1,{
OnInit:
disablenpc "Mummy2_1";
end;
@@ -1693,7 +1693,7 @@ OnDisable:
end;
}
-job_prist,90,85,0 script Mummy3_1 -1,15,1,{
+job_prist,90,85,0 script Mummy3_1 FAKE_NPC,15,1,{
OnInit:
disablenpc "Mummy3_1";
end;
diff --git a/npc/jobs/2-1/wizard.txt b/npc/jobs/2-1/wizard.txt
index 59b268ec4..86f87249c 100644
--- a/npc/jobs/2-1/wizard.txt
+++ b/npc/jobs/2-1/wizard.txt
@@ -1260,7 +1260,7 @@ OnTimer63000:
end;
}
-job_wiz,114,169,0 script Room of Water#Failed -1,16,16,{
+job_wiz,114,169,0 script Room of Water#Failed FAKE_NPC,16,16,{
OnInit:
disablenpc "Room of Water#Failed";
end;
@@ -1437,7 +1437,7 @@ OnTimer63000:
end;
}
-job_wiz,116,97,0 script Room of Earth#Failed -1,16,16,{
+job_wiz,116,97,0 script Room of Earth#Failed FAKE_NPC,16,16,{
OnInit:
disablenpc "Room of Earth#Failed";
end;
@@ -1617,7 +1617,7 @@ OnTimer123000:
donpcevent "Arena Assistant::OnStart";
}
-job_wiz,46,99,0 script Room of Fire#Failed -1,16,16,{
+job_wiz,46,99,0 script Room of Fire#Failed FAKE_NPC,16,16,{
OnInit:
disablenpc "Room of Fire#Failed";
end;
diff --git a/npc/jobs/2-2/crusader.txt b/npc/jobs/2-2/crusader.txt
index fc97351d5..6097e65cd 100644
--- a/npc/jobs/2-2/crusader.txt
+++ b/npc/jobs/2-2/crusader.txt
@@ -978,7 +978,7 @@ prt_castle,35,151,5 script Patron Knight 4_M_CRU,{
//== Actual tests ==========================================
//- Endurance Test -
-job_cru,1,1,1 script Summoner#cr1 -1,{
+job_cru,1,1,1 script Summoner#cr1 FAKE_NPC,{
OnTimer300000:
donpcevent "Summoner#cr1::OnReset";
end;
@@ -1039,7 +1039,7 @@ OnDead:
end;
}
-job_cru,1,2,1 script Summoner#cr2 -1,{
+job_cru,1,2,1 script Summoner#cr2 FAKE_NPC,{
OnTimer345000:
donpcevent "Summoner#cr2::OnReset";
end;
@@ -1090,7 +1090,7 @@ OnDead:
end;
}
-job_cru,1,3,1 script Summoner#cr3 -1,{
+job_cru,1,3,1 script Summoner#cr3 FAKE_NPC,{
OnTimer345000:
donpcevent "Summoner#cr3::OnReset";
end;
@@ -1143,7 +1143,7 @@ OnDead:
end;
}
-job_cru,1,4,1 script Summoner#cr4 -1,{
+job_cru,1,4,1 script Summoner#cr4 FAKE_NPC,{
OnTimer345000:
donpcevent "Summoner#cr4::OnReset";
end;
@@ -1248,7 +1248,7 @@ OnStart:
end;
}
-job_cru,168,17,0 script Zombie Guide -1,2,2,{
+job_cru,168,17,0 script Zombie Guide FAKE_NPC,2,2,{
OnTouch:
mes "[Bliant Piyord]";
mes "Go forth and defeat all";
@@ -1263,7 +1263,7 @@ OnTouch:
close;
}
-job_cru,2,1,1 script Monster Summon#cr0 -1,{
+job_cru,2,1,1 script Monster Summon#cr0 FAKE_NPC,{
OnInit:
disablenpc "Monster Summon#cr0";
end;
@@ -1315,7 +1315,7 @@ OnReset:
end;
}
-job_cru,168,45,0 script Monster Summon#cr1 -1,15,1,{
+job_cru,168,45,0 script Monster Summon#cr1 FAKE_NPC,15,1,{
OnInit:
disablenpc "Monster Summon#cr1";
end;
@@ -1334,7 +1334,7 @@ OnEnd:
end;
}
-job_cru,168,80,0 script Monster Summon#cr2 -1,15,1,{
+job_cru,168,80,0 script Monster Summon#cr2 FAKE_NPC,15,1,{
OnInit:
disablenpc "Monster Summon#cr2";
end;
@@ -1353,7 +1353,7 @@ OnEnd:
end;
}
-job_cru,165,115,0 script Monster Summon#cr3 -1,15,1,{
+job_cru,165,115,0 script Monster Summon#cr3 FAKE_NPC,15,1,{
OnInit:
disablenpc "Monster Summon#cr3";
end;
@@ -1372,7 +1372,7 @@ OnEnd:
end;
}
-job_cru,168,150,0 script Monster Summon#cr4 -1,15,1,{
+job_cru,168,150,0 script Monster Summon#cr4 FAKE_NPC,15,1,{
OnInit:
disablenpc "Monster Summon#cr4";
end;
@@ -1400,7 +1400,7 @@ OnEnd:
}
-job_cru,168,150,0 script Monster Summon#cr4-a -1,{
+job_cru,168,150,0 script Monster Summon#cr4-a FAKE_NPC,{
OnDead:
donpcevent "Monster Summon#cr5::OnStart";
end;
@@ -1432,7 +1432,7 @@ OnEnd:
end;
}
-job_cru,2,2,1 script Monster Summon#cr6 -1,{
+job_cru,2,2,1 script Monster Summon#cr6 FAKE_NPC,{
OnTimer241000:
areawarp "job_cru",160,14,175,178,"job_cru",24,169;
donpcevent "Monster Summon#cr0::OnReset";
diff --git a/npc/jobs/2-2/dancer.txt b/npc/jobs/2-2/dancer.txt
index 4ceb4ca99..2957071bd 100644
--- a/npc/jobs/2-2/dancer.txt
+++ b/npc/jobs/2-2/dancer.txt
@@ -955,7 +955,7 @@ job_duncer,32,154,1 script Waiting Room#click 1_F_01,{
}
//== Dance Timer ===========================================
-job_duncer,69,105,0 script Bijou#dance_timer -1,{
+job_duncer,69,105,0 script Bijou#dance_timer FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -1253,7 +1253,7 @@ OnTimer89000:
end;
}
-job_duncer,69,110,0 script dance#return -1,1,4,{
+job_duncer,69,110,0 script dance#return FAKE_NPC,1,4,{
OnTouch:
mapannounce "job_duncer","Good! Well done! Go back to Bijou!",bc_map;
DANC_Q = 9;
@@ -1273,7 +1273,7 @@ OnEnable:
end;
}
-job_duncer,66,110,0 script dance#return#2 -1,1,1,{
+job_duncer,66,110,0 script dance#return#2 FAKE_NPC,1,1,{
OnTouch:
DANC_Q = 9;
warp "comodo",188,162;
@@ -1289,7 +1289,7 @@ OnEnable:
end;
}
-job_duncer,72,110,0 script dance#return#3 -1,1,1,{
+job_duncer,72,110,0 script dance#return#3 FAKE_NPC,1,1,{
OnTouch:
DANC_Q = 9;
warp "comodo",188,162;
@@ -1307,7 +1307,7 @@ OnEnable:
}
//== Dance Move Triggers ===================================
-- script dancestep::StepTrigger -1,1,1,{
+- script dancestep::StepTrigger FAKE_NPC,1,1,{
OnTouch:
donpcevent "Backdancer#1::OnOmg";
mapannounce "job_duncer"," " + strcharinfo(0) + ", you lack rhythm... Your timing was too late!",bc_map;
@@ -1318,13 +1318,13 @@ OnTouch:
end;
}
-job_duncer,69,113,0 duplicate(StepTrigger) dance#up -1,1,1
-job_duncer,69,107,0 duplicate(StepTrigger) dance#down -1,1,1
-job_duncer,66,110,0 duplicate(StepTrigger) dance#left -1,1,1
-job_duncer,72,110,0 duplicate(StepTrigger) dance#right -1,1,1
-job_duncer,69,110,0 duplicate(StepTrigger) dance#cen -1,1,1
+job_duncer,69,113,0 duplicate(StepTrigger) dance#up FAKE_NPC,1,1
+job_duncer,69,107,0 duplicate(StepTrigger) dance#down FAKE_NPC,1,1
+job_duncer,66,110,0 duplicate(StepTrigger) dance#left FAKE_NPC,1,1
+job_duncer,72,110,0 duplicate(StepTrigger) dance#right FAKE_NPC,1,1
+job_duncer,69,110,0 duplicate(StepTrigger) dance#cen FAKE_NPC,1,1
-job_duncer,10,10,0 script dance#poring -1,{
+job_duncer,10,10,0 script dance#poring FAKE_NPC,{
OnEnable:
monster "job_duncer",69,106,"Poring",1002,1,"dance#poring::OnMyMobDead";
end;
diff --git a/npc/jobs/2-2/monk.txt b/npc/jobs/2-2/monk.txt
index b7ec9ffaa..02bc712e9 100644
--- a/npc/jobs/2-2/monk.txt
+++ b/npc/jobs/2-2/monk.txt
@@ -2015,38 +2015,38 @@ OnTouch:
}
}
-monk_test,82,384,0 script Trap#t_monk1_1::MonkTrap -1,{
+monk_test,82,384,0 script Trap#t_monk1_1::MonkTrap FAKE_NPC,{
OnTouch:
mapannounce "monk_test",""+ strcharinfo(0) + ", you're trapped. You will be returned.",bc_map;
warp "monk_test",387,387;
end;
}
-monk_test,83,384,0 duplicate(MonkTrap) Trap#t_monk1_2 -1
-monk_test,82,385,0 duplicate(MonkTrap) Trap#t_monk1_3 -1
-monk_test,83,385,0 duplicate(MonkTrap) Trap#t_monk1_4 -1
-monk_test,38,388,0 duplicate(MonkTrap) Trap#t_monk2_1 -1,0,1
-monk_test,39,388,0 duplicate(MonkTrap) Trap#t_monk2_2 -1,0,1
-monk_test,38,386,0 duplicate(MonkTrap) Trap#t_monk2_3 -1
-monk_test,39,386,0 duplicate(MonkTrap) Trap#t_monk2_4 -1
-monk_test,11,158,0 duplicate(MonkTrap) Trap#t_monk3_1 -1,1,0
-monk_test,11,159,0 duplicate(MonkTrap) Trap#t_monk3_2 -1,1,0
-monk_test,13,159,0 duplicate(MonkTrap) Trap#t_monk3_3 -1
-monk_test,13,158,0 duplicate(MonkTrap) Trap#t_monk3_4 -1
-monk_test,11,30,0 duplicate(MonkTrap) Trap#t_monk4_1 -1,3,0
-monk_test,11,31,0 duplicate(MonkTrap) Trap#t_monk4_2 -1,3,0
-monk_test,15,30,0 duplicate(MonkTrap) Trap#t_monk4_3 -1
-monk_test,15,31,0 duplicate(MonkTrap) Trap#t_monk4_4 -1
-monk_test,70,12,0 duplicate(MonkTrap) Trap#t_monk5_1 -1,0,1
-monk_test,71,12,0 duplicate(MonkTrap) Trap#t_monk5_2 -1,0,1
-monk_test,70,10,0 duplicate(MonkTrap) Trap#t_monk5_3 -1
-monk_test,71,10,0 duplicate(MonkTrap) Trap#t_monk5_4 -1
-monk_test,186,11,0 duplicate(MonkTrap) Trap#t_monk6_1 -1,2,3
-monk_test,189,11,0 duplicate(MonkTrap) Trap#t_monk6_2 -1,0,3
-monk_test,387,43,0 duplicate(MonkTrap) Trap#t_monk7_1 -1,1,0
-monk_test,387,42,0 duplicate(MonkTrap) Trap#t_monk7_2 -1,1,0
-monk_test,389,43,0 duplicate(MonkTrap) Trap#t_monk7_3 -1
-monk_test,389,42,0 duplicate(MonkTrap) Trap#t_monk7_4 -1
+monk_test,83,384,0 duplicate(MonkTrap) Trap#t_monk1_2 FAKE_NPC
+monk_test,82,385,0 duplicate(MonkTrap) Trap#t_monk1_3 FAKE_NPC
+monk_test,83,385,0 duplicate(MonkTrap) Trap#t_monk1_4 FAKE_NPC
+monk_test,38,388,0 duplicate(MonkTrap) Trap#t_monk2_1 FAKE_NPC,0,1
+monk_test,39,388,0 duplicate(MonkTrap) Trap#t_monk2_2 FAKE_NPC,0,1
+monk_test,38,386,0 duplicate(MonkTrap) Trap#t_monk2_3 FAKE_NPC
+monk_test,39,386,0 duplicate(MonkTrap) Trap#t_monk2_4 FAKE_NPC
+monk_test,11,158,0 duplicate(MonkTrap) Trap#t_monk3_1 FAKE_NPC,1,0
+monk_test,11,159,0 duplicate(MonkTrap) Trap#t_monk3_2 FAKE_NPC,1,0
+monk_test,13,159,0 duplicate(MonkTrap) Trap#t_monk3_3 FAKE_NPC
+monk_test,13,158,0 duplicate(MonkTrap) Trap#t_monk3_4 FAKE_NPC
+monk_test,11,30,0 duplicate(MonkTrap) Trap#t_monk4_1 FAKE_NPC,3,0
+monk_test,11,31,0 duplicate(MonkTrap) Trap#t_monk4_2 FAKE_NPC,3,0
+monk_test,15,30,0 duplicate(MonkTrap) Trap#t_monk4_3 FAKE_NPC
+monk_test,15,31,0 duplicate(MonkTrap) Trap#t_monk4_4 FAKE_NPC
+monk_test,70,12,0 duplicate(MonkTrap) Trap#t_monk5_1 FAKE_NPC,0,1
+monk_test,71,12,0 duplicate(MonkTrap) Trap#t_monk5_2 FAKE_NPC,0,1
+monk_test,70,10,0 duplicate(MonkTrap) Trap#t_monk5_3 FAKE_NPC
+monk_test,71,10,0 duplicate(MonkTrap) Trap#t_monk5_4 FAKE_NPC
+monk_test,186,11,0 duplicate(MonkTrap) Trap#t_monk6_1 FAKE_NPC,2,3
+monk_test,189,11,0 duplicate(MonkTrap) Trap#t_monk6_2 FAKE_NPC,0,3
+monk_test,387,43,0 duplicate(MonkTrap) Trap#t_monk7_1 FAKE_NPC,1,0
+monk_test,387,42,0 duplicate(MonkTrap) Trap#t_monk7_2 FAKE_NPC,1,0
+monk_test,389,43,0 duplicate(MonkTrap) Trap#t_monk7_3 FAKE_NPC
+monk_test,389,42,0 duplicate(MonkTrap) Trap#t_monk7_4 FAKE_NPC
job_monk,225,180,1 script Hyunmoo#mk 4_M_ORIENT02,{
if ((countitem(Mushroom_Of_Thief_1) > 0 || countitem(Mushroom_Of_Thief_2) > 0) && (countitem(Mushroom_Of_Thief_1) < 30 || countitem(Mushroom_Of_Thief_2) < 30)) {
@@ -2284,7 +2284,7 @@ monk_test,82,85,1 script Proctor#mk 4_F_SISTER,{
}
}
-monk_test,144,277,0 script mob_monk#1_1 -1,1,1,{
+monk_test,144,277,0 script mob_monk#1_1 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",144,277,"Zombie",1015,1;
monster "monk_test",144,277,"Zombie",1015,1;
@@ -2297,7 +2297,7 @@ OnDisable:
end;
}
-monk_test,134,291,0 script mob_monk#1_2 -1,1,1,{
+monk_test,134,291,0 script mob_monk#1_2 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",134,291,"Zombie",1015,1;
monster "monk_test",134,291,"Zombie",1015,1;
@@ -2310,7 +2310,7 @@ OnDisable:
end;
}
-monk_test,157,284,0 script mob_monk#1_3 -1,1,1,{
+monk_test,157,284,0 script mob_monk#1_3 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",157,284,"Mummy",1041,1;
end;
@@ -2320,7 +2320,7 @@ OnDisable:
end;
}
-monk_test,156,261,0 script mob_monk#1_4 -1,1,1,{
+monk_test,156,261,0 script mob_monk#1_4 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",156,261,"Mummy",1041,1;
end;
@@ -2330,7 +2330,7 @@ OnDisable:
end;
}
-monk_test,149,268,0 script mob_monk#1_5 -1,1,1,{
+monk_test,149,268,0 script mob_monk#1_5 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",149,268,"Zombie",1015,1;
monster "monk_test",149,268,"Zombie",1015,1;
@@ -2391,7 +2391,7 @@ monk_test,88,91,1 script Proctor#mk2 1_M_HOF,{
}
}
-monk_test,140,181,0 script mob_monk#2_1 -1,1,1,{
+monk_test,140,181,0 script mob_monk#2_1 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",140,181,"Zombie",1015,1;
monster "monk_test",140,181,"Zombie",1015,1;
@@ -2404,7 +2404,7 @@ OnDisable:
end;
}
-monk_test,150,164,0 script mob_monk#2_2 -1,1,1,{
+monk_test,150,164,0 script mob_monk#2_2 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",150,164,"Zombie",1015,1;
monster "monk_test",150,164,"Zombie",1015,1;
@@ -2417,7 +2417,7 @@ OnDisable:
end;
}
-monk_test,158,192,0 script mob_monk#2_3 -1,1,1,{
+monk_test,158,192,0 script mob_monk#2_3 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",158,192,"Mummy",1041,1;
end;
@@ -2427,7 +2427,7 @@ OnDisable:
end;
}
-monk_test,165,186,0 script mob_monk#2_4 -1,1,1,{
+monk_test,165,186,0 script mob_monk#2_4 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",165,186,"Mummy",1041,1;
end;
@@ -2437,7 +2437,7 @@ OnDisable:
end;
}
-monk_test,162,182,0 script mob_monk#2_5 -1,1,1,{
+monk_test,162,182,0 script mob_monk#2_5 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",162,182,"Zombie",1015,1;
monster "monk_test",162,182,"Zombie",1015,1;
@@ -2498,7 +2498,7 @@ monk_test,95,85,1 script Proctor#btl#3 1_F_PRIEST,{
}
}
-monk_test,249,277,0 script mob_monk#3_1 -1,1,1,{
+monk_test,249,277,0 script mob_monk#3_1 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",249,277,"Zombie",1015,1;
monster "monk_test",249,277,"Zombie",1015,1;
@@ -2510,7 +2510,7 @@ OnDisable:
killmonsterall "monk_test";
}
-monk_test,231,296,0 script mob_monk#3_2 -1,1,1,{
+monk_test,231,296,0 script mob_monk#3_2 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",231,296,"Zombie",1015,1;
monster "monk_test",231,296,"Zombie",1015,1;
@@ -2523,7 +2523,7 @@ OnDisable:
end;
}
-monk_test,264,292,0 script mob_monk#3_3 -1,1,1,{
+monk_test,264,292,0 script mob_monk#3_3 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",264,292,"Mummy",1041,1;
end;
@@ -2533,7 +2533,7 @@ OnDisable:
end;
}
-monk_test,252,284,0 script mob_monk#3_4 -1,1,1,{
+monk_test,252,284,0 script mob_monk#3_4 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",252,284,"Mummy",1041,1;
end;
@@ -2543,7 +2543,7 @@ OnDisable:
end;
}
-monk_test,257,285,0 script mob_monk#3_5 -1,1,1,{
+monk_test,257,285,0 script mob_monk#3_5 FAKE_NPC,1,1,{
OnTouch:
monster "monk_test",257,285,"Zombie",1015,1;
monster "monk_test",257,285,"Zombie",1015,1;
@@ -2573,7 +2573,7 @@ OnTouch:
end;
}
-monk_test,3,3,0 script resetter#monk -1,{
+monk_test,3,3,0 script resetter#monk FAKE_NPC,{
OnTimer500000:
donpcevent "mob_monk#1_1::OnDisable";
donpcevent "mob_monk#1_2::OnDisable";
diff --git a/npc/jobs/2-2/rogue.txt b/npc/jobs/2-2/rogue.txt
index 9181492cc..deee51ab5 100644
--- a/npc/jobs/2-2/rogue.txt
+++ b/npc/jobs/2-2/rogue.txt
@@ -1325,7 +1325,7 @@ OnTouch:
}
}
-in_rogue,200,389,0 script gen_ro#1 -1,3,3,{
+in_rogue,200,389,0 script gen_ro#1 FAKE_NPC,3,3,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",200,389,"Zombie",1015,1,"gen_ro#1::OnMyMobDead";
@@ -1346,7 +1346,7 @@ OnMyMobDead:
end;
}
-in_rogue,100,389,0 script gen_ro#2 -1,3,3,{
+in_rogue,100,389,0 script gen_ro#2 FAKE_NPC,3,3,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",100,389,"Mummy",1041,1,"gen_ro#2::OnMyMobDead";
@@ -1364,7 +1364,7 @@ OnMyMobDead:
end;
}
-in_rogue,150,389,0 script gen_ro#3 -1,3,3,{
+in_rogue,150,389,0 script gen_ro#3 FAKE_NPC,3,3,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",145,389,"Zombie",1015,1,"gen_ro#3::OnMyMobDead";
@@ -1383,7 +1383,7 @@ OnMyMobDead:
end;
}
-in_rogue,250,389,0 script gen_ro#4 -1,3,3,{
+in_rogue,250,389,0 script gen_ro#4 FAKE_NPC,3,3,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",200,389,"Abysmal Knight",1219,1,"gen_ro#4::OnMyMobDead";
@@ -1673,7 +1673,7 @@ OnTouch:
end;
}
-in_rogue,15,184,0 script mob_rogue#1 -1,8,1,{
+in_rogue,15,184,0 script mob_rogue#1 FAKE_NPC,8,1,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",14,187,"Zombie",1015,1,"mob_rogue#1::OnMyMobDead";
@@ -1695,7 +1695,7 @@ OnMyMobDead:
end;
}
-in_rogue,15,273,0 script mob_rogue#2 -1,8,1,{
+in_rogue,15,273,0 script mob_rogue#2 FAKE_NPC,8,1,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",15,276,"Mummy",1041,1,"mob_rogue#2::OnMyMobDead";
@@ -1714,7 +1714,7 @@ OnMyMobDead:
end;
}
-in_rogue,15,333,0 script mob_rogue#3 -1,8,1,{
+in_rogue,15,333,0 script mob_rogue#3 FAKE_NPC,8,1,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",15,336,"Zombie",1015,1,"mob_rogue#3::OnMyMobDead";
@@ -1737,7 +1737,7 @@ OnMyMobDead:
end;
}
-in_rogue,39,341,0 script mob_rogue#4 -1,1,8,{
+in_rogue,39,341,0 script mob_rogue#4 FAKE_NPC,1,8,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",39,341,"Mummy",1041,1,"mob_rogue#4::OnMyMobDead";
@@ -1757,7 +1757,7 @@ OnMyMobDead:
end;
}
-in_rogue,102,334,0 script mob_rogue#5 -1,1,4,{
+in_rogue,102,334,0 script mob_rogue#5 FAKE_NPC,1,4,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",92,334,"Khalitzburg",1132,1,"mob_rogue#5::OnMyMobDead";
@@ -1777,7 +1777,7 @@ OnMyMobDead:
end;
}
-in_rogue,58,309,0 script mob_rogue#6 -1,4,1,{
+in_rogue,58,309,0 script mob_rogue#6 FAKE_NPC,4,1,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",57,301,"Khalitzburg",1132,1,"mob_rogue#6::OnMyMobDead";
@@ -1797,7 +1797,7 @@ OnMyMobDead:
end;
}
-in_rogue,101,264,0 script mob_rogue#7 -1,5,5,{
+in_rogue,101,264,0 script mob_rogue#7 FAKE_NPC,5,5,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",101,264,"Abysmal Knight",1219,1,"mob_rogue#7::OnMyMobDead";
@@ -1815,7 +1815,7 @@ OnMyMobDead:
end;
}
-in_rogue,140,312,0 script mob_rogue#8 -1,5,5,{
+in_rogue,140,312,0 script mob_rogue#8 FAKE_NPC,5,5,{
OnTouch:
if (BaseJob == Job_Thief)
monster "in_rogue",140,312,"Abysmal Knight",1219,1,"mob_rogue#8::OnMyMobDead";
@@ -1831,7 +1831,7 @@ OnMyMobDead:
end;
}
-in_rogue,139,246,0 script mob_rogue#9 -1,4,4,{
+in_rogue,139,246,0 script mob_rogue#9 FAKE_NPC,4,4,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",139,246,"Zombie",1015,1,"mob_rogue#9::OnMyMobDead";
@@ -1853,7 +1853,7 @@ OnMyMobDead:
end;
}
-in_rogue,197,249,0 script mob_rogue#10 -1,1,8,{
+in_rogue,197,249,0 script mob_rogue#10 FAKE_NPC,1,8,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",176,211,"Ghoul",1036,1,"mob_rogue#10::OnMyMobDead";
@@ -1888,7 +1888,7 @@ OnMyMobDead:
end;
}
-in_rogue,96,205,0 script mob_rogue#11 -1,1,8,{
+in_rogue,96,205,0 script mob_rogue#11 FAKE_NPC,1,8,{
OnTouch:
if (BaseJob == Job_Thief) {
donpcevent "mob_rogue#7::OnDisable";
@@ -1901,7 +1901,7 @@ OnTouch:
end;
}
-in_rogue,86,187,0 script mob_rogue#12 -1,1,8,{
+in_rogue,86,187,0 script mob_rogue#12 FAKE_NPC,1,8,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",90,187,"Mummy",1041,1,"mob_rogue#12::OnMyMobDead";
@@ -1920,7 +1920,7 @@ OnMyMobDead:
end;
}
-in_rogue,223,187,0 script mob_rogue#13 -1,1,8,{
+in_rogue,223,187,0 script mob_rogue#13 FAKE_NPC,1,8,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",236,186,"Abysmal Knight",1219,1,"mob_rogue#13::OnMyMobDead";
@@ -1940,7 +1940,7 @@ OnMyMobDead:
end;
}
-in_rogue,233,207,0 script mob_rogue#14 -1,8,3,{
+in_rogue,233,207,0 script mob_rogue#14 FAKE_NPC,8,3,{
OnTouch:
if (BaseJob == Job_Thief)
donpcevent "mob_rogue#13::OnDisable";
@@ -1949,7 +1949,7 @@ OnTouch:
end;
}
-in_rogue,244,319,0 script mob_rogue#15 -1,1,8,{
+in_rogue,244,319,0 script mob_rogue#15 FAKE_NPC,1,8,{
OnTouch:
if (BaseJob == Job_Thief) {
monster "in_rogue",240,319,"Mummy",1041,1,"mob_rogue#15::OnMyMobDead";
@@ -1971,7 +1971,7 @@ OnMyMobDead:
end;
}
-in_rogue,334,319,0 script mob_rogue#16 -1,8,8,{
+in_rogue,334,319,0 script mob_rogue#16 FAKE_NPC,8,8,{
OnTouch:
if (BaseJob == Job_Thief)
donpcevent "mob_rogue#15::OnDisable";
@@ -1980,7 +1980,7 @@ OnTouch:
end;
}
-in_rogue,3,3,0 script resetter#rogue -1,{
+in_rogue,3,3,0 script resetter#rogue FAKE_NPC,{
OnTimer500000:
donpcevent "mob_rogue#1::OnDisable";
donpcevent "mob_rogue#2::OnDisable";
diff --git a/npc/jobs/2-2/sage.txt b/npc/jobs/2-2/sage.txt
index b3a7ac4b7..32c4d172e 100644
--- a/npc/jobs/2-2/sage.txt
+++ b/npc/jobs/2-2/sage.txt
@@ -2686,7 +2686,7 @@ OnTimer186000:
end;
}
-- script Arena#2 -1,{
+- script Arena#2 FAKE_NPC,{
OnInit:
disablenpc "Arena#2";
end;
@@ -2789,7 +2789,7 @@ OnTimer186000:
end;
}
-- script Arena#Doorkeeper -1,{
+- script Arena#Doorkeeper FAKE_NPC,{
OnInit:
disablenpc "Arena#Doorkeeper";
end;
@@ -2855,7 +2855,7 @@ OnTimer63000:
end;
}
-- script Arena#3 -1,{
+- script Arena#3 FAKE_NPC,{
OnInit:
disablenpc "Arena#3";
end;
@@ -2872,7 +2872,7 @@ OnDisable:
end;
}
-- script Test Helper#sg -1,{
+- script Test Helper#sg FAKE_NPC,{
OnInit:
disablenpc "Test Helper#sg";
end;
diff --git a/npc/jobs/2-2e/SoulLinker.txt b/npc/jobs/2-2e/SoulLinker.txt
index 65febe33e..bc5c3c96c 100644
--- a/npc/jobs/2-2e/SoulLinker.txt
+++ b/npc/jobs/2-2e/SoulLinker.txt
@@ -349,7 +349,7 @@ OnInit:
end;
}
-job_soul,30,31,0 script Maia#link2::SLTester -1,3,3,{
+job_soul,30,31,0 script Maia#link2::SLTester FAKE_NPC,3,3,{
OnTouch:
if (Class == Job_Taekwon) {
if (JobLevel < 40) {
diff --git a/npc/kafras/dts_warper.txt b/npc/kafras/dts_warper.txt
index 69ac93228..74c2c910c 100644
--- a/npc/kafras/dts_warper.txt
+++ b/npc/kafras/dts_warper.txt
@@ -53,7 +53,7 @@
//= "Vote Globalvar Girl#yuno" NPC at the end of the file.
//=========================================================================
-einbroch,246,70,0 script Vote Timer#ein -1,{
+einbroch,246,70,0 script Vote Timer#ein FAKE_NPC,{
OnInit:
if ($dts) {
$dts = 0;
@@ -225,7 +225,7 @@ OnTimer60000:
end;
}
-einbroch,245,71,0 script Vote Timer2#ein -1,{
+einbroch,245,71,0 script Vote Timer2#ein FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -246,7 +246,7 @@ OnTimer60000:
end;
}
-einbroch,246,71,0 script Vote Timer3#ein -1,{
+einbroch,246,71,0 script Vote Timer3#ein FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -268,7 +268,7 @@ OnTimer60000:
end;
}
-einbroch,247,71,0 script Vote Timer4#ein -1,{
+einbroch,247,71,0 script Vote Timer4#ein FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -1104,7 +1104,7 @@ alberta,114,70,6 duplicate(VotingStaffCCE) Cool Event Staff#alb 4_M_ZONDAMAN
aldebaran,138,102,6 duplicate(VotingStaffCCE) Cool Event Staff#alde 4_M_ZONDAMAN
lighthalzen,154,60,6 duplicate(VotingStaffCCE) Cool Event Staff#lhz 4_M_ZONDAMAN
-yuno,103,225,0 script Scrutiny Association#5 -1,{
+yuno,103,225,0 script Scrutiny Association#5 FAKE_NPC,{
OnInit:
initnpctimer;
end;
@@ -1122,7 +1122,7 @@ OnTimer7200000:
end;
}
-einbroch,248,71,0 script Scrutiny Association#6 -1,{
+einbroch,248,71,0 script Scrutiny Association#6 FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -1145,7 +1145,7 @@ OnTimer15000:
end;
}
-einbroch,249,71,0 script Scrutiny Association#7 -1,{
+einbroch,249,71,0 script Scrutiny Association#7 FAKE_NPC,{
OnEnable:
initnpctimer;
end;
diff --git a/npc/kafras/kafras.txt b/npc/kafras/kafras.txt
index 8774f8245..adffbfb8e 100644
--- a/npc/kafras/kafras.txt
+++ b/npc/kafras/kafras.txt
@@ -410,7 +410,7 @@ cmd_fild07,136,134,4 script Kafra Employee::kaf_cmd_fild07 4_F_KAFRA7,{
}
//== Izlude ================================================
-- script ::kaf_izlude -1,{
+- script ::kaf_izlude FAKE_NPC,{
cutin "kafra_01",2;
callfunc "F_KafSet";
mes "[Kafra Employee]";
diff --git a/npc/merchants/coin_exchange.txt b/npc/merchants/coin_exchange.txt
index 57b0c4afb..392a18c0b 100644
--- a/npc/merchants/coin_exchange.txt
+++ b/npc/merchants/coin_exchange.txt
@@ -36,7 +36,7 @@
//=========================================================================
//== Manuk & Splendide =====================================
-- script ::merchant_13_2 -1,{
+- script ::merchant_13_2 FAKE_NPC,{
.@n$ = "["+strnpcinfo(1)+"]";
mes .@n$;
if (isequipped(2782) && ep13_2_rhea == 100) {
diff --git a/npc/merchants/hd_refine.txt b/npc/merchants/hd_refine.txt
index 2200f85be..e1a9bae7e 100644
--- a/npc/merchants/hd_refine.txt
+++ b/npc/merchants/hd_refine.txt
@@ -38,7 +38,7 @@
//=========================================================================
//== Blacksmith Mighty Hammer (+7~9) =======================
-- script ::MightyHammer -1,{
+- script ::MightyHammer FAKE_NPC,{
disable_items;
mes "[Blacksmith Mighty Hammer]";
mes "Unlike others, I am a blacksmith who refines a very limited number of items.";
@@ -178,7 +178,7 @@ lhz_in02,280,19,3 duplicate(MightyHammer) Mighty Hammer#lhz 4_M_DWARF
//payon,174,133,4 duplicate(MightyHammer) Mighty Hammer#im 4_M_DWARF
//== Basta (+10 and up) ====================================
-- script ::Basta -1,{
+- script ::Basta FAKE_NPC,{
disable_items;
mes "[Basta]";
mes "I'm the best Blacksmith in the whole world, Basta.";
diff --git a/npc/merchants/icecream.txt b/npc/merchants/icecream.txt
index ba05d4f94..f1ad519d9 100644
--- a/npc/merchants/icecream.txt
+++ b/npc/merchants/icecream.txt
@@ -35,7 +35,7 @@
//= 1.5
//=========================================================================
-- script Ice Cream Maker::IceCreamer -1,{
+- script Ice Cream Maker::IceCreamer FAKE_NPC,{
mes "[Ice Cream Maker]";
mes "Fresh Ice Cream made with snow from Lutie!";
mes "Enjoy it now, it won't be on sale for long!";
diff --git a/npc/merchants/shops.txt b/npc/merchants/shops.txt
index d93baa57c..d2745217d 100644
--- a/npc/merchants/shops.txt
+++ b/npc/merchants/shops.txt
@@ -46,7 +46,7 @@
//================= Description ===========================================
//= Town shop NPCs.
//================= Current Version =======================================
-//= 3.5.1
+//= 3.6
//=========================================================================
//== Alberta ===============================================
@@ -1292,39 +1292,6 @@ OnInit:
sellitem Venom_Knife;
}
-moc_ruins,91,128,4 trader Tool Dealer#moc1 4_F_04,{
-OnInit:
- sellitem Arrow;
- sellitem Spectacles;
- sellitem Red_Potion;
- sellitem Orange_Potion;
- sellitem Yellow_Potion;
- sellitem White_Potion;
- sellitem Green_Potion;
- sellitem Center_Potion;
- sellitem Awakening_Potion;
- sellitem Wing_Of_Fly;
- sellitem Wing_Of_Butterfly;
- sellitem Booby_Trap;
-}
-
-moc_ruins,114,63,6 trader Tool Dealer#moc2 4W_M_03,{
-OnInit:
- sellitem Arrow;
- sellitem Spectacles;
- sellitem Red_Potion;
- sellitem Orange_Potion;
- sellitem Yellow_Potion;
- sellitem White_Potion;
- sellitem Green_Potion;
- sellitem Center_Potion;
- sellitem Awakening_Potion;
- sellitem Wing_Of_Fly;
- sellitem Wing_Of_Butterfly;
- sellitem Booby_Trap;
- sellitem Luxury_Sunglasses;
-}
-
moc_ruins,93,53,2 trader Item Collector#moc1 4_M_03,{
OnInit:
sellitem Scell;
@@ -1386,23 +1353,6 @@ OnInit:
moc_ruins,90,149,6 trader Trader#moc5 4W_M_03,{
OnInit:
sellitem Banana;
- sellitem Banana;
- sellitem Banana;
- sellitem Banana;
- sellitem Banana;
- sellitem Banana;
-}
-
-moc_ruins,118,170,4 trader Pet Groomer#moc 4_M_TELEPORTER,{
-OnInit:
- sellitem Pet_Food;
- sellitem Pet_Incubator;
- sellitem Backpack;
- sellitem Rocker_Glasses;
- sellitem Mojji;
- sellitem Vital_Flower_;
- sellitem Flame_Gemstone;
- sellitem Bun_;
}
morocc_in,141,67,0 trader Weapon Dealer#moc1 1_M_MERCHANT,{
@@ -1699,30 +1649,6 @@ OnInit:
sellitem Glass_Bead;
}
-prontera,218,211,4 trader Pet Groomer#prt 4_M_TELEPORTER,{
-OnInit:
- sellitem Pet_Food;
- sellitem Pet_Incubator;
- sellitem Backpack;
- sellitem Rocker_Glasses;
- sellitem Mojji;
- sellitem Flame_Gemstone;
- sellitem Vital_Flower_;
- sellitem Vital_Flower;
- sellitem Bun_;
- sellitem Damp_Darkness;
- sellitem Small_Snow_Flower;
- sellitem Fresh_Plant;
- sellitem Big_Cell;
- sellitem Apple_Pudding;
- sellitem Mystic_Stone;
- sellitem Flavored_Alcohol;
- sellitem Grilled_Rice_Cake;
- sellitem Fish_With_Blue_Back;
- sellitem Pumpkin_Pie_;
- sellitem Traditional_Cookie;
-}
-
prontera,248,153,0 trader Doll Supplier#prt 4_M_03,{
OnInit:
sellitem Stuffed_Doll;
@@ -1752,18 +1678,6 @@ OnInit:
sellitem Chain;
}
-prt_fild05,290,221,2 trader Tool Dealer#prt 4_M_01,{
-OnInit:
- sellitem Arrow;
- sellitem Spectacles;
- sellitem Red_Potion;
- sellitem Orange_Potion;
- sellitem Green_Potion;
- sellitem Center_Potion;
- sellitem Wing_Of_Fly;
- sellitem Wing_Of_Butterfly;
-}
-
prt_in,211,169,0 trader Wedding Shop Dealer#prt 1_F_LIBRARYGIRL,{
OnInit:
sellitem Bunch_Of_Flowers;
@@ -1773,23 +1687,6 @@ OnInit:
sellitem Tuxedo;
}
-prt_in,126,76,0 trader Tool Dealer#prt1 1_M_INNKEEPER,{
-OnInit:
- sellitem Spectacles;
- sellitem Arrow;
- sellitem Red_Potion;
- sellitem Orange_Potion;
- sellitem Yellow_Potion;
- sellitem White_Potion;
- sellitem Green_Potion;
- sellitem Center_Potion;
- sellitem Awakening_Potion;
- sellitem Wing_Of_Fly;
- sellitem Wing_Of_Butterfly;
- sellitem Booby_Trap;
- sellitem One_Eyed_Glass;
-}
-
prt_in,172,130,0 trader Weapon Dealer#prt 1_M_JOBGUIDER,{
OnInit:
sellitem Arrow;
@@ -2041,28 +1938,11 @@ OnInit:
}
//== Cooking Addition ======================================
-prontera,156,212,1 trader Chef Assistant#prt 8_F_GIRL,{
-OnInit:
- sellitem Plain_Sauce;
- sellitem Red_Spice;
- sellitem Pot;
- sellitem Bread;
-}
-
payon,206,119,5 trader Chef Assistant#pay 4_M_ORIENT02,{
OnInit:
sellitem Hot_Sauce;
}
-moc_ruins,115,123,5 trader Chef Assistant#moc 4_M_04,{
-OnInit:
- sellitem Hot_Sauce;
- sellitem Sweet_Sauce;
- sellitem Plain_Sauce;
- sellitem Red_Spice;
- sellitem Yellow_Spice;
-}
-
geffen,196,111,3 trader Chef Assistant#gef 4_M_03,{
OnInit:
sellitem Pot;
diff --git a/npc/merchants/socket_enchant.txt b/npc/merchants/socket_enchant.txt
index aa43e2a9b..8b2a3275b 100644
--- a/npc/merchants/socket_enchant.txt
+++ b/npc/merchants/socket_enchant.txt
@@ -43,7 +43,7 @@
//= 2.0a
//=========================================================================
-- script Seiyablem#dummy::SocketEnchant -1,{
+- script Seiyablem#dummy::SocketEnchant FAKE_NPC,{
if (checkweight(Knife,1) == 0)
{
mes "- Wait a minute !! -";
@@ -354,7 +354,7 @@ lhz_in02,281,35,5 duplicate(SocketEnchant) Seiyablem#lhz 4_M_02
prt_in,33,70,5 duplicate(SocketEnchant) Seiyablem#prt 4_M_02
morocc,51,41,4 duplicate(SocketEnchant) Seiyablem#moc 4_M_02
-- script Young Man#dummy::SocketMan -1,{
+- script Young Man#dummy::SocketMan FAKE_NPC,{
mes "[Young Man]";
mes "I'm considering becoming a Slotting Engineer.";
mes "It's a new field where you can add Slots to equipment, and it'd be cool if I can work in such a lucrative career.";
diff --git a/npc/merchants/socket_enchant2.txt b/npc/merchants/socket_enchant2.txt
index 42f910477..fc2c2d636 100644
--- a/npc/merchants/socket_enchant2.txt
+++ b/npc/merchants/socket_enchant2.txt
@@ -34,7 +34,7 @@
//= 1.1a
//=========================================================================
-- script Leablem#dummy::SocketEnchant2 -1,{
+- script Leablem#dummy::SocketEnchant2 FAKE_NPC,{
if (checkweight(Knife,1) == 0)
{
mes "- Wait a minute !! -";
diff --git a/npc/other/arena/arena_aco.txt b/npc/other/arena/arena_aco.txt
index f9ed8c714..ebbfb975e 100644
--- a/npc/other/arena/arena_aco.txt
+++ b/npc/other/arena/arena_aco.txt
@@ -65,7 +65,7 @@ OnStart:
end;
}
-force_5-1,100,12,0 script arena#aco -1,5,5,{
+force_5-1,100,12,0 script arena#aco FAKE_NPC,5,5,{
OnTouch:
donpcevent "allkill#aco::OnEnable";
if (BaseJob == Job_Acolyte) {
@@ -78,7 +78,7 @@ OnTouch:
end;
}
-- script arena_aco1 -1,{
+- script arena_aco1 FAKE_NPC,{
OnStart:
donpcevent "Trocco#aco1::OnEnable";
end;
@@ -129,7 +129,7 @@ OnReset_09:
end;
}
-- script Trocco#aco1 -1,{
+- script Trocco#aco1 FAKE_NPC,{
OnEnable:
initnpctimer;
$@arn_1 = gettimetick(2);
@@ -290,14 +290,14 @@ On09_End:
end;
}
-force_5-1,40,26,0 script force_01start#aco -1,1,1,{
+force_5-1,40,26,0 script force_01start#aco FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_01mob#aco::OnEnable";
disablenpc "force_01start#aco";
end;
}
-- script force_01mob#aco -1,{
+- script force_01mob#aco FAKE_NPC,{
OnEnable:
donpcevent "Trocco#aco1::On01_Start";
monster "force_5-1",22,29,"Red Plant",1078,1,"force_01mob#aco::OnMyMobDead";
@@ -319,7 +319,7 @@ OnMyMobDead:
end;
}
-force_5-1,25,69,0 script force_02start#aco -1,1,1,{
+force_5-1,25,69,0 script force_02start#aco FAKE_NPC,1,1,{
OnTouch:
$@drop_gate = 0;
donpcevent "force_02mob#aco::OnEnable";
@@ -327,7 +327,7 @@ OnTouch:
end;
}
-- script force_02mob#aco -1,{
+- script force_02mob#aco FAKE_NPC,{
OnEnable:
donpcevent "Trocco#aco1::On02_Start";
areamonster "force_5-1",22,69,29,130,"Drops",1572,20,"force_02mob#aco::OnMyMobDead";
@@ -346,13 +346,13 @@ OnMyMobDead:
end;
}
-force_5-1,25,159,0 script force_03start#aco -1,1,1,{
+force_5-1,25,159,0 script force_03start#aco FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_03mob#aco::OnEnable";
disablenpc "force_03start#aco";
}
-- script force_03mob#aco -1,{
+- script force_03mob#aco FAKE_NPC,{
OnEnable:
donpcevent "Trocco#aco1::On03_Start";
areamonster "force_5-1",9,157,41,190,"Zombie",1394,10,"force_03mob#aco::OnMyMobDead";
@@ -370,7 +370,7 @@ OnMyMobDead:
end;
}
-force_5-1,69,174,0 script force_04start#aco -1,1,1,{
+force_5-1,69,174,0 script force_04start#aco FAKE_NPC,1,1,{
OnTouch:
donpcevent "Trocco#aco1::On04_Start";
donpcevent "arena_aco1::OnReset_04";
@@ -379,14 +379,14 @@ OnTouch:
end;
}
-force_5-1,159,174,0 script force_05start#aco -1,1,1,{
+force_5-1,159,174,0 script force_05start#aco FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_05mob#aco::OnEnable";
disablenpc "force_05start#aco";
end;
}
-- script force_05mob#aco -1,{
+- script force_05mob#aco FAKE_NPC,{
OnEnable:
donpcevent "Trocco#aco1::On05_Start";
areamonster "force_5-1",159,157,187,190,"Orc Zombie",1463,8,"force_05mob#aco::OnMyMobDead";
@@ -404,7 +404,7 @@ OnMyMobDead:
end;
}
-force_5-1,174,130,0 script force_06start#aco -1,1,1,{
+force_5-1,174,130,0 script force_06start#aco FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_06mob#aco::OnEnable";
donpcevent "arena_aco1::OnReset_06";
@@ -412,7 +412,7 @@ OnTouch:
end;
}
-- script force_06mob#aco -1,{
+- script force_06mob#aco FAKE_NPC,{
OnEnable:
donpcevent "Trocco#aco1::On06_Start";
monster "force_5-1",170,124,"Hydra",1579,1,"force_06mob#aco::OnMyMobDead";
@@ -442,13 +442,13 @@ OnMyMobDead:
end;
}
-force_5-1,174,40,0 script force_07start#aco -1,1,1,{
+force_5-1,174,40,0 script force_07start#aco FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_07mob#aco::OnEnable";
disablenpc "force_07start#aco";
}
-- script force_07mob#aco -1,{
+- script force_07mob#aco FAKE_NPC,{
OnEnable:
donpcevent "Trocco#aco1::On07_Start";
monster "force_5-1",170,32,"Archer Skeleton",1420,1,"force_07mob#aco::OnMyMobDead";
@@ -470,7 +470,7 @@ OnMyMobDead:
end;
}
-force_5-1,132,26,0 script force_08start#aco -1,1,1,{
+force_5-1,132,26,0 script force_08start#aco FAKE_NPC,1,1,{
OnTouch:
percentheal 50,50;
donpcevent "Trocco#aco1::On08_Start";
@@ -479,7 +479,7 @@ OnTouch:
end;
}
-force_5-1,99,82,0 script force_09start#aco -1,1,1,{
+force_5-1,99,82,0 script force_09start#aco FAKE_NPC,1,1,{
OnTouch:
donpcevent "Trocco#aco1::On09_Start";
donpcevent "force_09mob#aco::OnEnable";
@@ -487,7 +487,7 @@ OnTouch:
end;
}
-- script force_09mob#aco -1,{
+- script force_09mob#aco FAKE_NPC,{
OnEnable:
monster "force_5-1",rand(88,111),rand(89,110),"Zombie Prisoner",1480,1,"force_09mob#aco::OnMyMobDead";
monster "force_5-1",rand(88,111),rand(89,110),"Skel Prisoner",1479,1,"force_09mob#aco::OnMyMobDead";
@@ -507,7 +507,7 @@ OnMyMobDead:
end;
}
-- script arena_aco2 -1,{
+- script arena_aco2 FAKE_NPC,{
OnStart:
donpcevent "Trocco#aco2::OnEnable";
end;
@@ -557,7 +557,7 @@ OnReset_09:
enablenpc "force_exit#aco";
}
-- script Trocco#aco2 -1,{
+- script Trocco#aco2 FAKE_NPC,{
OnEnable:
initnpctimer;
$@arn_1 = gettimetick(2);
@@ -726,14 +726,14 @@ On09_End:
end;
}
-force_5-1,40,26,0 script force_01start#pri -1,1,1,{
+force_5-1,40,26,0 script force_01start#pri FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_01mob#pri::OnEnable";
disablenpc "force_01start#pri";
end;
}
-- script force_01mob#pri -1,{
+- script force_01mob#pri FAKE_NPC,{
OnEnable:
donpcevent "Trocco#aco2::On01_Start";
areamonster "force_5-1",13,9,38,41,"Zombie",1394,10,"force_01mob#pri::OnMyMobDead";
@@ -751,7 +751,7 @@ OnMyMobDead:
end;
}
-force_5-1,25,69,0 script force_02start#pri -1,1,1,{
+force_5-1,25,69,0 script force_02start#pri FAKE_NPC,1,1,{
OnTouch:
if (BaseLevel < 70) {
donpcevent "force_02mob#pri::OnOn1";
@@ -763,7 +763,7 @@ OnTouch:
end;
}
-- script force_02mob#pri -1,{
+- script force_02mob#pri FAKE_NPC,{
OnOn1:
donpcevent "Trocco#aco2::On02_Start";
areamonster "force_5-1",22,69,29,130,"Orc Skeleton",1462,5,"force_02mob#pri::OnMyMobDead";
@@ -786,14 +786,14 @@ OnMyMobDead:
end;
}
-force_5-1,25,159,0 script force_03start#pri -1,1,1,{
+force_5-1,25,159,0 script force_03start#pri FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_03mob#pri::OnEnable";
disablenpc "force_03start#pri";
end;
}
-- script force_03mob#pri -1,{
+- script force_03mob#pri FAKE_NPC,{
OnEnable:
donpcevent "Trocco#aco2::On03_Start";
areamonster "force_5-1",14,163,37,185,"Red Plant",1078,5,"force_03mob#pri::OnMyMobDead";
@@ -811,7 +811,7 @@ OnMyMobDead:
end;
}
-force_5-1,69,174,0 script force_04start#pri -1,1,1,{
+force_5-1,69,174,0 script force_04start#pri FAKE_NPC,1,1,{
OnTouch:
if (BaseLevel < 90) {
donpcevent "force_04mob#pri::OnOn1";
@@ -823,7 +823,7 @@ OnTouch:
end;
}
-- script force_04mob#pri -1,{
+- script force_04mob#pri FAKE_NPC,{
OnOn1:
donpcevent "Trocco#aco2::On04_Start";
monster "force_5-1",rand(71,130),rand(170,178),"Evil Druid",1435,1,"force_04mob#pri::OnMyMobDead";
@@ -852,7 +852,7 @@ OnMyMobDead:
end;
}
-force_5-1,159,174,0 script force_05start#pri -1,1,1,{
+force_5-1,159,174,0 script force_05start#pri FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_05mob#pri::OnEnable";
if (BaseLevel < 70) {
@@ -865,7 +865,7 @@ OnTouch:
end;
}
-- script force_05ex#pri -1,{
+- script force_05ex#pri FAKE_NPC,{
OnOn1:
areamonster "force_5-1",161,159,187,190,"Hydra",1579,10,"force_05ex#pri::OnMyMobDead";
end;
@@ -882,7 +882,7 @@ OnMyMobDead:
end;
}
-- script force_05mob#pri -1,{
+- script force_05mob#pri FAKE_NPC,{
OnEnable:
donpcevent "Trocco#aco2::On05_Start";
areamonster "force_5-1",161,159,187,190,"Gargoyle",1597,4,"force_05mob#pri::OnMyMobDead";
@@ -901,7 +901,7 @@ OnMyMobDead:
end;
}
-force_5-1,174,130,0 script force_06start#pri -1,1,1,{
+force_5-1,174,130,0 script force_06start#pri FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_06ex#pri::OnEnable";
if (BaseLevel < 70) {
@@ -917,7 +917,7 @@ OnTouch:
end;
}
-- script force_06ex#pri -1,{
+- script force_06ex#pri FAKE_NPC,{
OnEnable:
areamonster "force_5-1",170,67,178,131,"Permeter",1314,5,"force_06ex#pri::OnMyMobDead";
end;
@@ -930,7 +930,7 @@ OnMyMobDead:
end;
}
-- script force_06mob#pri -1,{
+- script force_06mob#pri FAKE_NPC,{
OnOn1:
donpcevent "Trocco#aco2::On06_Start";
monster "force_5-1",rand(170,178),rand(67,131),"Khalitzburg",1438,1,"force_06mob#pri::OnMyMobDead";
@@ -959,14 +959,14 @@ OnMyMobDead:
end;
}
-force_5-1,174,40,0 script force_07start#pri -1,1,1,{
+force_5-1,174,40,0 script force_07start#pri FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_07mob#pri::OnEnable";
disablenpc "force_07start#pri";
end;
}
-- script force_07mob#pri -1,{
+- script force_07mob#pri FAKE_NPC,{
OnEnable:
donpcevent "Trocco#aco2::On07_Start";
monster "force_5-1",rand(160,188),rand(9,42),"Ancient Mummy",1522,1,"force_07mob#pri::OnMyMobDead";
@@ -984,7 +984,7 @@ OnMyMobDead:
end;
}
-force_5-1,132,26,0 script force_08start#pri -1,1,1,{
+force_5-1,132,26,0 script force_08start#pri FAKE_NPC,1,1,{
OnTouch:
donpcevent "Trocco#aco2::On08_Start";
donpcevent "arena_aco2::OnReset_08";
@@ -992,7 +992,7 @@ OnTouch:
end;
}
-force_5-1,99,82,0 script force_09start#pri -1,1,1,{
+force_5-1,99,82,0 script force_09start#pri FAKE_NPC,1,1,{
OnTouch:
donpcevent "Trocco#aco2::On09_Start";
if (BaseLevel < 70) {
@@ -1011,7 +1011,7 @@ OnTouch:
end;
}
-- script force_09mob#pri -1,{
+- script force_09mob#pri FAKE_NPC,{
OnOn1:
monster "force_5-1",rand(88,111),rand(89,110),"Mimic",1474,1,"force_09mob#pri::OnMyMobDead";
end;
@@ -1461,7 +1461,7 @@ prt_are_in,25,31,3 script Staff#aco-2 1_F_02,{
}
}
-- script #arn_timer_aco -1,{
+- script #arn_timer_aco FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -1490,7 +1490,7 @@ OnStop:
end;
}
-prt_are_in,22,29,0 script arn_warp_aco -1,20,20,{
+prt_are_in,22,29,0 script arn_warp_aco FAKE_NPC,20,20,{
OnInit:
disablenpc "arn_warp_aco";
end;
@@ -1509,7 +1509,7 @@ OnTouch:
end;
}
-- script timer_aco2 -1,{
+- script timer_aco2 FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -1519,7 +1519,7 @@ OnStop:
end;
}
-- script allkill#aco -1,{
+- script allkill#aco FAKE_NPC,{
OnEnable:
donpcevent "force_01mob#aco::OnReset";
donpcevent "force_02mob#aco::OnReset";
@@ -1645,7 +1645,7 @@ OnInit:
end;
}
-- script #Vendigos -1,{
+- script #Vendigos FAKE_NPC,{
OnLineRec_aco:
mapannounce "arena_room","Vendigos: "+$arn_acotopn$+" has made a new record in the Arena Time Force Battle - Acolyte Mode. Congratulations!",bc_map,"0xFFFF00";
end;
diff --git a/npc/other/arena/arena_lvl50.txt b/npc/other/arena/arena_lvl50.txt
index d3dc54287..482e3fd58 100644
--- a/npc/other/arena/arena_lvl50.txt
+++ b/npc/other/arena/arena_lvl50.txt
@@ -206,7 +206,7 @@ On09_End:
end;
}
-- script arena#50 -1,{
+- script arena#50 FAKE_NPC,{
OnReset_01:
donpcevent "force_01ex#50::OnReset";
donpcevent "force_02start#50::OnEnable";
@@ -383,13 +383,13 @@ OnTouch:
end;
}
-- script force_01start#50 -1,{
+- script force_01start#50 FAKE_NPC,{
OnEnable:
donpcevent "force_01mob#50::OnEnable";
end;
}
-- script force_01ex#50 -1,{
+- script force_01ex#50 FAKE_NPC,{
OnReset:
killmonster "force_1-1","force_01ex#50::OnMyMobDead";
end;
@@ -425,7 +425,7 @@ OnMyMobDead:
end;
}
-- script force_01mob#50 -1,{
+- script force_01mob#50 FAKE_NPC,{
OnEnable:
donpcevent "force_01ex#50::OnSummonMob1";
monster "force_1-1",25,25,"Smokie",1561,1,"force_01mob#50::OnMyMobDead";
@@ -447,13 +447,13 @@ OnMyMobDead:
end;
}
-- script force_02start#50 -1,{
+- script force_02start#50 FAKE_NPC,{
OnEnable:
donpcevent "force_02mob#50::OnSummonMob2";
end;
}
-- script force_02mob#50 -1,{
+- script force_02mob#50 FAKE_NPC,{
OnReset:
killmonster "force_1-1","force_02mob#50::OnMyMobDead";
end;
@@ -476,13 +476,13 @@ OnMyMobDead:
end;
}
-- script force_03start#50 -1,{
+- script force_03start#50 FAKE_NPC,{
OnEnable:
donpcevent "force_03mob#50::OnEnable";
end;
}
-- script force_03ex#50 -1,{
+- script force_03ex#50 FAKE_NPC,{
OnReset:
killmonster "force_1-1","force_03ex#50::OnMyMobDead";
end;
@@ -502,7 +502,7 @@ OnMyMobDead:
end;
}
-- script force_03mob#50 -1,{
+- script force_03mob#50 FAKE_NPC,{
OnEnable:
donpcevent "force_03ex#50::OnSummonMob_03";
monster "force_1-1",23,174,"Karakasa",1544,1,"force_03mob#50::OnMyMobDead";
@@ -525,13 +525,13 @@ OnMyMobDead:
end;
}
-- script force_04start#50 -1,{
+- script force_04start#50 FAKE_NPC,{
OnEnable:
donpcevent "force_04mob#50::OnEnable";
end;
}
-- script force_04ex#50 -1,{
+- script force_04ex#50 FAKE_NPC,{
OnReset:
killmonster "force_1-1","force_04ex#50::OnMyMobDead";
end;
@@ -557,7 +557,7 @@ OnMyMobDead:
end;
}
-- script force_04mob#50 -1,{
+- script force_04mob#50 FAKE_NPC,{
OnEnable:
donpcevent "force_04ex#50::OnSummonMob_04";
monster "force_1-1",85,172,"Kobold",1547,1,"force_04mob#50::OnMyMobDead";
@@ -576,13 +576,13 @@ OnMyMobDead:
end;
}
-- script force_05start#50 -1,{
+- script force_05start#50 FAKE_NPC,{
OnEnable:
donpcevent "force_05mob#50::OnEnable";
end;
}
-- script force_05ex#50 -1,{
+- script force_05ex#50 FAKE_NPC,{
OnReset:
killmonster "force_1-1","force_05ex#50::OnMyMobDead";
end;
@@ -602,7 +602,7 @@ OnMyMobDead:
end;
}
-- script force_05mob#50 -1,{
+- script force_05mob#50 FAKE_NPC,{
OnEnable:
monster "force_1-1",173,166,"Hydra",1579,1,"force_05mob#50::OnMyMobDead";
monster "force_1-1",171,170,"Hydra",1579,1,"force_05mob#50::OnMyMobDead";
@@ -626,13 +626,13 @@ OnMyMobDead:
end;
}
-- script force_06start#50 -1,{
+- script force_06start#50 FAKE_NPC,{
OnEnable:
donpcevent "force_06mob#50::OnEnable";
end;
}
-- script force_06ex#50 -1,{
+- script force_06ex#50 FAKE_NPC,{
OnReset:
killmonster "force_1-1","force_06ex#50::OnMyMobDead";
end;
@@ -655,7 +655,7 @@ OnMyMobDead:
end;
}
-- script force_06mob#50 -1,{
+- script force_06mob#50 FAKE_NPC,{
OnEnable:
donpcevent "force_06ex#50::OnSummonMob_06";
monster "force_1-1",173,90,"Drops",1572,1,"force_06mob#50::OnMyMobDead";
@@ -677,13 +677,13 @@ OnMyMobDead:
end;
}
-- script force_07start#50 -1,{
+- script force_07start#50 FAKE_NPC,{
OnEnable:
donpcevent "force_07mob#50::OnEnable";
end;
}
-- script force_07ex#50 -1,{
+- script force_07ex#50 FAKE_NPC,{
OnReset:
killmonster "force_1-1","force_07ex#50::OnMyMobDead";
end;
@@ -717,7 +717,7 @@ OnMyMobDead:
end;
}
-- script force_07mob#50 -1,{
+- script force_07mob#50 FAKE_NPC,{
OnEnable:
donpcevent "force_07ex#50::OnSummonMob_07";
monster "force_1-1",174,25,"Red Plant",1078,1,"force_07mob#50::OnMyMobDead";
@@ -735,25 +735,25 @@ OnMyMobDead:
end;
}
-- script force_08start#50 -1,{
+- script force_08start#50 FAKE_NPC,{
OnEnable:
donpcevent "force_08ex#50::OnEnable";
end;
}
-- script force_08ex#50 -1,{
+- script force_08ex#50 FAKE_NPC,{
OnEnable:
donpcevent "arena#50::OnReset_08";
end;
}
-- script force_09start#50 -1,{
+- script force_09start#50 FAKE_NPC,{
OnEnable:
donpcevent "force_09mob#50::OnEnable";
end;
}
-- script force_09ex#50 -1,{
+- script force_09ex#50 FAKE_NPC,{
OnReset:
killmonster "force_1-1","force_09ex#50::OnMyMobDead";
end;
@@ -780,7 +780,7 @@ OnMyMobDead:
end;
}
-- script force_09mob#50 -1,{
+- script force_09mob#50 FAKE_NPC,{
OnEnable:
monster "force_1-1",99,99,"Vocal",1581,1,"force_09mob#50::OnMyMobDead";
donpcevent "force_09ex#50::OnSummonMob_09";
@@ -941,7 +941,7 @@ prt_are_in,25,188,3 script Staff#50-2 1_F_02,{
}
}
-- script #arn_timer_50 -1,{
+- script #arn_timer_50 FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -971,13 +971,13 @@ OnStop:
end;
}
-- script arn_warp_50 -1,{
+- script arn_warp_50 FAKE_NPC,{
OnOut:
areawarp "prt_are_in",14,195,29,178,"arena_room",100,75;
end;
}
-- script cast#50 -1,{
+- script cast#50 FAKE_NPC,{
OnTimeOver1:
mapannounce "force_1-1","Arena will be reactivated due to an error occurred during battle.",0,0xFFCE00;
end;
@@ -992,7 +992,7 @@ OnNomal2:
end;
}
-- script alloff#50 -1,{
+- script alloff#50 FAKE_NPC,{
OnEnable:
mapwarp "force_1-1","prt_are_in",126,190,0,0;
donpcevent "force_01mob#50::OnReset";
diff --git a/npc/other/arena/arena_lvl60.txt b/npc/other/arena/arena_lvl60.txt
index 167f42289..41c444388 100644
--- a/npc/other/arena/arena_lvl60.txt
+++ b/npc/other/arena/arena_lvl60.txt
@@ -214,7 +214,7 @@ On09_End:
end;
}
-- script arena#60 -1,{
+- script arena#60 FAKE_NPC,{
OnReset_01:
donpcevent "force_01ex#60::OnReset";
donpcevent "force_01mob#60::OnReset";
@@ -393,13 +393,13 @@ OnTouch:
end;
}
-- script force_01start#60 -1,{
+- script force_01start#60 FAKE_NPC,{
OnEnable:
donpcevent "force_01mob#60::OnEnable";
end;
}
-- script force_01ex#60 -1,{
+- script force_01ex#60 FAKE_NPC,{
OnReset:
killmonster "force_2-1","force_01ex#60::OnMyMobDead";
end;
@@ -412,7 +412,7 @@ OnMyMobDead:
end;
}
-- script force_01mob#60 -1,{
+- script force_01mob#60 FAKE_NPC,{
OnReset:
killmonster "force_2-1","force_01mob#60::OnMyMobDead";
end;
@@ -439,13 +439,13 @@ OnMyMobDead:
end;
}
-- script force_02start#60 -1,{
+- script force_02start#60 FAKE_NPC,{
OnEnable:
donpcevent "force_02mob#60::OnEnable";
end;
}
-- script force_02mob#60 -1,{
+- script force_02mob#60 FAKE_NPC,{
OnReset:
killmonster "force_2-1","force_02mob#60::OnMyMobDead";
end;
@@ -486,13 +486,13 @@ OnMyMobDead:
end;
}
-- script force_03start#60 -1,{
+- script force_03start#60 FAKE_NPC,{
OnEnable:
donpcevent "force_03mob#60::OnEnable";
end;
}
-- script force_03ex#60 -1,{
+- script force_03ex#60 FAKE_NPC,{
OnReset:
killmonster "force_2-1","force_03ex#60::OnMyMobDead";
end;
@@ -514,7 +514,7 @@ OnMyMobDead:
end;
}
-- script force_03mob#60 -1,{
+- script force_03mob#60 FAKE_NPC,{
OnEnable:
donpcevent "force_03ex#60::OnEnable";
monster "force_2-1",23,174,"Mantis",1457,1,"force_03mob#60::OnMyMobDead";
@@ -535,13 +535,13 @@ OnMyMobDead:
end;
}
-- script force_04start#60 -1,{
+- script force_04start#60 FAKE_NPC,{
OnEnable:
donpcevent "force_04mob#60::OnEnable";
end;
}
-- script force_04ex#60 -1,{
+- script force_04ex#60 FAKE_NPC,{
OnReset:
killmonster "force_2-1","force_04ex#60::OnMyMobDead";
end;
@@ -560,7 +560,7 @@ OnMyMobDead:
end;
}
-- script force_04mob#60 -1,{
+- script force_04mob#60 FAKE_NPC,{
OnReset:
killmonster "force_2-1","force_04mob#60::OnMyMobDead";
end;
@@ -580,13 +580,13 @@ OnMyMobDead:
end;
}
-- script force_05start#60 -1,{
+- script force_05start#60 FAKE_NPC,{
OnEnable:
donpcevent "force_05mob#60::OnEnable";
end;
}
-- script force_05ex#60 -1,{
+- script force_05ex#60 FAKE_NPC,{
OnReset:
killmonster "force_2-1","force_05ex#60::OnMyMobDead";
end;
@@ -610,7 +610,7 @@ OnMyMobDead:
end;
}
-- script force_05mob#60 -1,{
+- script force_05mob#60 FAKE_NPC,{
OnReset:
killmonster "force_2-1","force_05mob#60::OnMyMobDead";
end;
@@ -632,13 +632,13 @@ OnMyMobDead:
end;
}
-- script force_06start#60 -1,{
+- script force_06start#60 FAKE_NPC,{
OnEnable:
donpcevent "force_06mob#60::OnEnable";
end;
}
-- script force_06ex#60 -1,{
+- script force_06ex#60 FAKE_NPC,{
OnReset:
killmonster "force_2-1","force_06ex#60::OnMyMobDead";
end;
@@ -688,7 +688,7 @@ OnMyMobDead:
end;
}
-- script force_06mob#60 -1,{
+- script force_06mob#60 FAKE_NPC,{
OnReset:
killmonster "force_2-1","force_06mob#60::OnMyMobDead";
end;
@@ -708,13 +708,13 @@ OnMyMobDead:
end;
}
-- script force_07start#60 -1,{
+- script force_07start#60 FAKE_NPC,{
OnEnable:
donpcevent "force_07mob#60::OnEnable";
end;
}
-- script force_07mob#60 -1,{
+- script force_07mob#60 FAKE_NPC,{
OnReset:
killmonster "force_2-1","force_07mob#60::OnMyMobDead";
end;
@@ -734,25 +734,25 @@ OnMyMobDead:
end;
}
-- script force_08start#60 -1,{
+- script force_08start#60 FAKE_NPC,{
OnEnable:
donpcevent "force_08ex#60::OnEnable";
end;
}
-- script force_08ex#60 -1,{
+- script force_08ex#60 FAKE_NPC,{
OnEnable:
donpcevent "arena#60::OnReset_08";
end;
}
-- script force_09start#60 -1,{
+- script force_09start#60 FAKE_NPC,{
OnEnable:
donpcevent "force_09mob#60::OnEnable";
end;
}
-- script force_09ex#60 -1,{
+- script force_09ex#60 FAKE_NPC,{
OnReset:
killmonster "force_2-1","force_09ex#60::OnMyMobDead";
end;
@@ -790,7 +790,7 @@ OnMyMobDead:
end;
}
-- script force_09mob#60 -1,{
+- script force_09mob#60 FAKE_NPC,{
OnEnable:
donpcevent "force_09ex#60::OnSummonMob_09";
monster "force_2-1",99,99,"Goblin Leader",1539,1,"force_09mob#60::OnMyMobDead";
@@ -951,7 +951,7 @@ prt_are_in,25,135,3 script Staff#60-2 1_F_02,{
}
}
-- script #arn_timer_60 -1,{
+- script #arn_timer_60 FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -981,13 +981,13 @@ OnStop:
end;
}
-- script arn_warp_60 -1,{
+- script arn_warp_60 FAKE_NPC,{
OnOut:
areawarp "prt_are_in",14,143,29,126,"arena_room",100,75;
end;
}
-- script cast#60 -1,{
+- script cast#60 FAKE_NPC,{
OnTimeOver1:
mapannounce "force_2-1","Arena will be reactivated due to an error occurred during battle.",0,0xFFCE00;
end;
@@ -1005,7 +1005,7 @@ OnTimeOver2:
end;
}
-- script alloff#60 -1,{
+- script alloff#60 FAKE_NPC,{
OnEnable:
mapwarp "force_2-1","prt_are_in",126,139,0,0;
donpcevent "force_01mob#60::OnReset";
diff --git a/npc/other/arena/arena_lvl70.txt b/npc/other/arena/arena_lvl70.txt
index bf2ac5f92..90bc1aa69 100644
--- a/npc/other/arena/arena_lvl70.txt
+++ b/npc/other/arena/arena_lvl70.txt
@@ -220,7 +220,7 @@ On09_End:
end;
}
-- script arena#70 -1,{
+- script arena#70 FAKE_NPC,{
OnReset_01:
//donpcevent "force_01ex#70::OnReset";
donpcevent "force_02start#70::OnEnable";
@@ -400,13 +400,13 @@ OnTouch:
end;
}
-- script force_01start#70 -1,{
+- script force_01start#70 FAKE_NPC,{
OnEnable:
donpcevent "force_01mob#70::OnEnable";
end;
}
-- script force_01mob#70 -1,{
+- script force_01mob#70 FAKE_NPC,{
OnEnable:
monster "force_3-1",25,36,"Kobold",1545,1,"force_01mob#70::OnMyMobDead";
monster "force_3-1",20,36,"Kobold",1545,1,"force_01mob#70::OnMyMobDead";
@@ -427,13 +427,13 @@ OnMyMobDead:
end;
}
-- script force_02start#70 -1,{
+- script force_02start#70 FAKE_NPC,{
OnEnable:
donpcevent "force_02mob#70::OnEnable";
end;
}
-- script force_02ex#70 -1,{
+- script force_02ex#70 FAKE_NPC,{
OnReset:
killmonster "force_3-1","force_02ex#70::OnMyMobDead";
end;
@@ -457,7 +457,7 @@ OnMyMobDead:
end;
}
-- script force_02mob#70 -1,{
+- script force_02mob#70 FAKE_NPC,{
OnReset:
killmonster "force_3-1","force_02mob#70::OnMyMobDead";
end;
@@ -476,13 +476,13 @@ OnMyMobDead:
end;
}
-- script force_03start#70 -1,{
+- script force_03start#70 FAKE_NPC,{
OnEnable:
donpcevent "force_03mob#70::OnEnable";
end;
}
-- script force_03ex#70 -1,{
+- script force_03ex#70 FAKE_NPC,{
OnReset:
killmonster "force_3-1","force_03ex#70::OnMyMobDead";
end;
@@ -496,7 +496,7 @@ OnMyMobDead:
end;
}
-- script force_03mob#70 -1,{
+- script force_03mob#70 FAKE_NPC,{
OnEnable:
donpcevent "force_03ex#70::OnSummonMob_03";
monster "force_3-1",23,174,"Parasite",1555,1,"force_03mob#70::OnMyMobDead";
@@ -517,13 +517,13 @@ OnMyMobDead:
end;
}
-- script force_04start#70 -1,{
+- script force_04start#70 FAKE_NPC,{
OnEnable:
donpcevent "force_04mob#70::OnEnable";
end;
}
-- script force_04ex#70 -1,{
+- script force_04ex#70 FAKE_NPC,{
OnReset:
killmonster "force_3-1","force_04ex#70::OnMyMobDead";
end;
@@ -541,7 +541,7 @@ OnMyMobDead:
end;
}
-- script force_04mob#70 -1,{
+- script force_04mob#70 FAKE_NPC,{
OnEnable:
donpcevent "force_04ex#70::OnSummonMob_04";
monster "force_3-1",87,174,"Stem Worm",1440,1,"force_04mob#70::OnMyMobDead";
@@ -560,13 +560,13 @@ OnMyMobDead:
end;
}
-- script force_05start#70 -1,{
+- script force_05start#70 FAKE_NPC,{
OnEnable:
donpcevent "force_05mob#70::OnEnable";
end;
}
-- script force_05ex#70 -1,{
+- script force_05ex#70 FAKE_NPC,{
OnReset:
killmonster "force_3-1","force_05ex#70::OnMyMobDead";
end;
@@ -586,7 +586,7 @@ OnMyMobDead:
end;
}
-- script force_05mob#70 -1,{
+- script force_05mob#70 FAKE_NPC,{
OnEnable:
monster "force_3-1",164,183,"Argiope",1429,1,"force_05mob#70::OnMyMobDead";
monster "force_3-1",168,158,"Argiope",1429,1,"force_05mob#70::OnMyMobDead";
@@ -608,13 +608,13 @@ OnMyMobDead:
end;
}
-- script force_06start#70 -1,{
+- script force_06start#70 FAKE_NPC,{
OnEnable:
donpcevent "force_06mob#70::OnEnable";
end;
}
-- script force_06ex#70 -1,{
+- script force_06ex#70 FAKE_NPC,{
OnReset:
killmonster "force_3-1","force_06ex#70::OnMyMobDead";
end;
@@ -636,7 +636,7 @@ OnMyMobDead:
end;
}
-- script force_06mob#70 -1,{
+- script force_06mob#70 FAKE_NPC,{
OnEnable:
donpcevent "force_06ex#70::OnSummonMob_06";
monster "force_3-1",173,90,"Goblin",1537,1,"force_06mob#70::OnMyMobDead";
@@ -658,13 +658,13 @@ OnMyMobDead:
end;
}
-- script force_07start#70 -1,{
+- script force_07start#70 FAKE_NPC,{
OnEnable:
donpcevent "force_07mob#70::OnEnable";
end;
}
-- script force_07ex#70 -1,{
+- script force_07ex#70 FAKE_NPC,{
OnReset:
killmonster "force_3-1","force_07ex#70::OnMyMobDead";
end;
@@ -690,7 +690,7 @@ OnMyMobDead:
end;
}
-- script force_07mob#70 -1,{
+- script force_07mob#70 FAKE_NPC,{
OnEnable:
donpcevent "force_07ex#70::OnSummonMob_07";
monster "force_3-1",174,25,"Alice",1521,1,"force_07mob#70::OnMyMobDead";
@@ -708,25 +708,25 @@ OnMyMobDead:
end;
}
-- script force_08start#70 -1,{
+- script force_08start#70 FAKE_NPC,{
OnEnable:
donpcevent "force_08ex#70::OnEnable";
end;
}
-- script force_08ex#70 -1,{
+- script force_08ex#70 FAKE_NPC,{
OnEnable:
donpcevent "arena#70::OnReset_08";
end;
}
-- script force_09start#70 -1,{
+- script force_09start#70 FAKE_NPC,{
OnEnable:
donpcevent "force_09mob#70::OnEnable";
end;
}
-- script force_09ex#70 -1,{
+- script force_09ex#70 FAKE_NPC,{
OnReset:
killmonster "force_3-1","force_09ex#70::OnMyMobDead";
end;
@@ -752,7 +752,7 @@ OnMyMobDead:
end;
}
-- script force_09mob#70 -1,{
+- script force_09mob#70 FAKE_NPC,{
OnEnable:
monster "force_3-1",99,99,"Kobold Leader",1548,1,"force_09mob#70::OnMyMobDead";
monster "force_3-1",98,99,"Kobold",1545,1,"force_09mob#70::OnMyMobDead";
@@ -916,7 +916,7 @@ prt_are_in,25,84,3 script Staff#70-2 1_F_02,{
}
}
-- script #arn_timer_70 -1,{
+- script #arn_timer_70 FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -946,13 +946,13 @@ OnStop:
end;
}
-- script arn_warp_70 -1,{
+- script arn_warp_70 FAKE_NPC,{
OnOut:
areawarp "prt_are_in",14,91,29,74,"arena_room",100,75;
end;
}
-- script cast#70 -1,{
+- script cast#70 FAKE_NPC,{
OnTimeOver1:
mapannounce "force_3-1","Arena will be reactivated due to an error occurred during battle.",0,0xFFCE00;
end;
@@ -967,7 +967,7 @@ OnNomal2:
end;
}
-- script alloff#70 -1,{
+- script alloff#70 FAKE_NPC,{
OnEnable:
mapwarp "force_3-1","prt_are_in",126,190,0,0;
donpcevent "force_01mob#70::OnReset";
diff --git a/npc/other/arena/arena_lvl80.txt b/npc/other/arena/arena_lvl80.txt
index 184d2d61d..7bab16f4a 100644
--- a/npc/other/arena/arena_lvl80.txt
+++ b/npc/other/arena/arena_lvl80.txt
@@ -227,7 +227,7 @@ On09_End:
end;
}
-- script arena#80 -1,{
+- script arena#80 FAKE_NPC,{
OnReset_01:
donpcevent "force_01ex#80::OnReset";
donpcevent "force_02start#80::OnEnable";
@@ -404,13 +404,13 @@ OnTouch:
end;
}
-- script force_01start#80 -1,{
+- script force_01start#80 FAKE_NPC,{
OnEnable:
donpcevent "force_01mob#80::OnEnable";
end;
}
-- script force_01ex#80 -1,{
+- script force_01ex#80 FAKE_NPC,{
OnReset:
killmonster "force_4-1","force_01ex#80::OnMyMobDead";
end;
@@ -427,7 +427,7 @@ OnMyMobDead:
end;
}
-- script force_01mob#80 -1,{
+- script force_01mob#80 FAKE_NPC,{
OnEnable:
monster "force_4-1",35,13,"Nightmare",1427,1,"force_01mob#80::OnMyMobDead";
monster "force_4-1",25,36,"Nightmare",1427,1,"force_01mob#80::OnMyMobDead";
@@ -449,13 +449,13 @@ OnMyMobDead:
end;
}
-- script force_02start#80 -1,{
+- script force_02start#80 FAKE_NPC,{
OnEnable:
donpcevent "force_02mob#80::OnEnable";
end;
}
-- script force_02mob#80 -1,{
+- script force_02mob#80 FAKE_NPC,{
OnReset:
killmonster "force_4-1","force_02mob#80::OnMyMobDead";
end;
@@ -486,13 +486,13 @@ OnMyMobDead:
end;
}
-- script force_03start#80 -1,{
+- script force_03start#80 FAKE_NPC,{
OnEnable:
donpcevent "force_03mob#80::OnEnable";
end;
}
-- script force_03ex#80 -1,{
+- script force_03ex#80 FAKE_NPC,{
OnReset:
killmonster "force_4-1","force_03ex#80::OnMyMobDead";
end;
@@ -512,7 +512,7 @@ OnMyMobDead:
end;
}
-- script force_03mob#80 -1,{
+- script force_03mob#80 FAKE_NPC,{
OnEnable:
donpcevent "force_03ex#80::OnSummonMob_03";
monster "force_4-1",23,174,"Assaulter",1364,1,"force_03mob#80::OnMyMobDead";
@@ -532,13 +532,13 @@ OnMyMobDead:
end;
}
-- script force_04start#80 -1,{
+- script force_04start#80 FAKE_NPC,{
OnEnable:
donpcevent "force_04mob#80::OnEnable";
end;
}
-- script force_04ex#80 -1,{
+- script force_04ex#80 FAKE_NPC,{
OnReset:
killmonster "force_4-1","force_04ex#80::OnMyMobDead";
end;
@@ -560,7 +560,7 @@ OnMyMobDead:
}
-- script force_04mob#80 -1,{
+- script force_04mob#80 FAKE_NPC,{
OnEnable:
donpcevent "force_04ex#80::OnSummonMob_04";
monster "force_4-1",80,172,"Nine Tails",1471,1,"force_04mob#80::OnMyMobDead";
@@ -580,13 +580,13 @@ OnMyMobDead:
end;
}
-- script force_05start#80 -1,{
+- script force_05start#80 FAKE_NPC,{
OnEnable:
donpcevent "force_05mob#80::OnEnable";
end;
}
-- script force_05ex#80 -1,{
+- script force_05ex#80 FAKE_NPC,{
OnReset:
killmonster "force_4-1","force_05ex#80::OnMyMobDead";
end;
@@ -602,7 +602,7 @@ OnMyMobDead:
end;
}
-- script force_05mob#80 -1,{
+- script force_05mob#80 FAKE_NPC,{
OnEnable:
monster "force_4-1",164,174,"Petite",1465,1,"force_05mob#80::OnMyMobDead";
monster "force_4-1",169,159,"Petite",1465,1,"force_05mob#80::OnMyMobDead";
@@ -624,19 +624,19 @@ OnMyMobDead:
}
-- script force_06start#80 -1,{
+- script force_06start#80 FAKE_NPC,{
OnEnable:
donpcevent "force_06mob#80::OnEnable";
end;
}
-- script force_06ex#80 -1,{
+- script force_06ex#80 FAKE_NPC,{
OnEnable:
donpcevent "Octus#arena::On06_start";
end;
}
-- script force_06mob#80 -1,{
+- script force_06mob#80 FAKE_NPC,{
OnEnable:
monster "force_4-1",173,118,"Baphomet Jr.",1431,1,"force_06mob#80::OnMyMobDead";
monster "force_4-1",173,90,"Baphomet Jr.",1431,1,"force_06mob#80::OnMyMobDead";
@@ -660,13 +660,13 @@ OnMyMobDead:
end;
}
-- script force_07start#80 -1,{
+- script force_07start#80 FAKE_NPC,{
OnEnable:
donpcevent "force_07mob#80::OnEnable";
end;
}
-- script force_07ex#80 -1,{
+- script force_07ex#80 FAKE_NPC,{
OnReset:
killmonster "force_4-1","force_07ex#80::OnMyMobDead";
end;
@@ -681,7 +681,7 @@ OnMyMobDead:
end;
}
-- script force_07mob#80 -1,{
+- script force_07mob#80 FAKE_NPC,{
OnEnable:
donpcevent "force_07ex#80::OnSummonMob_07";
monster "force_4-1",165,27,"Fur-Seal",1533,1,"force_07mob#80::OnMyMobDead";
@@ -701,25 +701,25 @@ OnMyMobDead:
end;
}
-- script force_08start#80 -1,{
+- script force_08start#80 FAKE_NPC,{
OnEnable:
donpcevent "force_08ex#80::OnEnable";
end;
}
-- script force_08ex#80 -1,{
+- script force_08ex#80 FAKE_NPC,{
OnEnable:
donpcevent "arena#80::OnReset_08";
end;
}
-- script force_09start#80 -1,{
+- script force_09start#80 FAKE_NPC,{
OnEnable:
donpcevent "force_09mob#80::OnEnable";
end;
}
-- script force_09ex#80 -1,{
+- script force_09ex#80 FAKE_NPC,{
OnReset:
killmonster "force_4-1","force_09ex#80::OnMyMobDead";
end;
@@ -736,7 +736,7 @@ OnMyMobDead:
end;
}
-- script force_09mob#80 -1,{
+- script force_09mob#80 FAKE_NPC,{
OnEnable:
monster "force_4-1",99,99,"Ancient Mummy",1522,1,"force_09mob#80::OnMyMobDead";
donpcevent "force_09ex#80::OnSummonMob_09";
@@ -897,7 +897,7 @@ prt_are_in,77,187,3 script Staff#80-2 1_F_02,{
}
}
-- script #arn_timer_80 -1,{
+- script #arn_timer_80 FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -927,13 +927,13 @@ OnStop:
end;
}
-- script arn_warp_80 -1,{
+- script arn_warp_80 FAKE_NPC,{
OnOut:
areawarp "prt_are_in",66,195,81,178,"arena_room",100,75;
end;
}
-- script cast#80 -1,{
+- script cast#80 FAKE_NPC,{
OnTimeOver1:
mapannounce "force_4-1","Arena will be reactivated due to an error occurred during battle.",0,0xFFCE00;
end;
@@ -948,7 +948,7 @@ OnNomal2:
end;
}
-- script alloff#80 -1,{
+- script alloff#80 FAKE_NPC,{
OnEnable:
mapwarp "force_4-1","prt_are_in",126,190,0,0;
donpcevent "force_01mob#80::OnReset";
diff --git a/npc/other/arena/arena_party.txt b/npc/other/arena/arena_party.txt
index 378e6de5b..b3fb751e6 100644
--- a/npc/other/arena/arena_party.txt
+++ b/npc/other/arena/arena_party.txt
@@ -104,7 +104,7 @@ OnInit:
end;
}
-prt_are_in,73,78,0 script toarena#party -1,20,20,{
+prt_are_in,73,78,0 script toarena#party FAKE_NPC,20,20,{
OnInit:
disablenpc "toarena#party";
end;
@@ -124,7 +124,7 @@ OnEnter:
end;
}
-prt_are_in,73,79,0 script toout#party -1,20,20,{
+prt_are_in,73,79,0 script toout#party FAKE_NPC,20,20,{
OnInit:
disablenpc "toout#party";
end;
@@ -157,7 +157,7 @@ OnStop:
end;
}
-prt_are_in,73,74,0 script arena_out -1,1,1,{
+prt_are_in,73,74,0 script arena_out FAKE_NPC,1,1,{
OnTouch:
$arn_partywait = 0;
warp "arena_room",100,75;
@@ -333,7 +333,7 @@ On10_End:
end;
}
-- script arena_p -1,{
+- script arena_p FAKE_NPC,{
OnStart:
mapwarp "force_1-2","prt_are_in",177,138;
disablenpc "force_01_00";
@@ -441,14 +441,14 @@ OnTouch:
end;
}
-force_1-2,36,26,0 script force_01start#party -1,1,1,{
+force_1-2,36,26,0 script force_01start#party FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_01mob#party::OnEnable";
disablenpc "force_01start#party";
end;
}
-- script force_01mob#party -1,{
+- script force_01mob#party FAKE_NPC,{
OnEnable:
monster "force_1-2",15,35,"Penomena",1441,1,"force_01mob#party::OnMyMobDead";
monster "force_1-2",35,35,"Penomena",1441,1,"force_01mob#party::OnMyMobDead";
@@ -496,14 +496,14 @@ OnMyMobDead:
end;
}
-force_1-2,162,26,0 script force_02start#party -1,1,1,{
+force_1-2,162,26,0 script force_02start#party FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_02mob#party::OnEnable";
disablenpc "force_02start#party";
end;
}
-- script force_02mob#party -1,{
+- script force_02mob#party FAKE_NPC,{
OnEnable:
monster "force_1-2",163,36,"Penomena",1441,1,"force_02mob#party::OnMyMobDead";
monster "force_1-2",184,36,"Penomena",1441,1,"force_02mob#party::OnMyMobDead";
@@ -555,14 +555,14 @@ OnMyMobDead:
end;
}
-force_1-2,99,66,0 script force_03start#party -1,1,1,{
+force_1-2,99,66,0 script force_03start#party FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_03mob#party::OnEnable";
disablenpc "force_03start#party";
end;
}
-- script force_03mob#party -1,{
+- script force_03mob#party FAKE_NPC,{
OnEnable:
monster "force_1-2",89,81,"Merman",1451,1,"force_03mob#party::OnMyMobDead";
monster "force_1-2",90,81,"Merman",1451,1,"force_03mob#party::OnMyMobDead";
@@ -610,14 +610,14 @@ OnMyMobDead:
end;
}
-force_1-2,162,78,0 script force_04start#party -1,3,3,{
+force_1-2,162,78,0 script force_04start#party FAKE_NPC,3,3,{
OnTouch:
donpcevent "force_04mob#party::OnEnable";
disablenpc "force_04start#party";
end;
}
-- script force_04mob#party -1,{
+- script force_04mob#party FAKE_NPC,{
OnEnable:
monster "force_1-2",174,78,"Penomena",1441,1,"force_04mob#party::OnMyMobDead";
monster "force_1-2",184,78,"Penomena",1441,1,"force_04mob#party::OnMyMobDead";
@@ -657,14 +657,14 @@ OnMyMobDead:
end;
}
-force_1-2,36,77,0 script force_05start#party -1,1,1,{
+force_1-2,36,77,0 script force_05start#party FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_05mob#party::OnEnable";
disablenpc "force_05start#party";
end;
}
-- script force_05mob#party -1,{
+- script force_05mob#party FAKE_NPC,{
OnEnable:
monster "force_1-2",25,68,"Penomena",1441,1,"force_05mob#party::OnMyMobDead";
monster "force_1-2",36,68,"Penomena",1441,1,"force_05mob#party::OnMyMobDead";
@@ -704,14 +704,14 @@ OnMyMobDead:
end;
}
-force_1-2,26,118,0 script force_06start#party -1,1,1,{
+force_1-2,26,118,0 script force_06start#party FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_06mob#party::OnEnable";
disablenpc "force_06start#party";
end;
}
-- script force_06mob#party -1,{
+- script force_06mob#party FAKE_NPC,{
OnEnable:
monster "force_1-2",19,135,"Cloud Hermit",1531,1,"force_06mob#party::OnMyMobDead";
monster "force_1-2",24,135,"Cloud Hermit",1531,1,"force_06mob#party::OnMyMobDead";
@@ -750,14 +750,14 @@ OnMyMobDead:
end;
}
-force_1-2,92,124,0 script force_07start#party -1,1,1,{
+force_1-2,92,124,0 script force_07start#party FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_07mob#party::OnEnable";
disablenpc "force_07start#party";
end;
}
-- script force_07mob#party -1,{
+- script force_07mob#party FAKE_NPC,{
OnEnable:
monster "force_1-2",104,134,"Greatest General",1541,1,"force_07mob#party::OnMyMobDead";
monster "force_1-2",104,136,"Greatest General",1541,1,"force_07mob#party::OnMyMobDead";
@@ -786,14 +786,14 @@ OnMyMobDead:
end;
}
-force_1-2,173,118,0 script force_08start#party -1,1,1,{
+force_1-2,173,118,0 script force_08start#party FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_08mob#party::OnEnable";
disablenpc "force_08start#party";
end;
}
-- script force_08mob#party -1,{
+- script force_08mob#party FAKE_NPC,{
OnEnable:
monster "force_1-2",172,154,"Khalitzburg",1438,1,"force_08mob#party::OnMyMobDead";
monster "force_1-2",174,145,"Ghostring",1576,1,"force_08mob#party::OnMyMobDead";
@@ -829,14 +829,14 @@ OnMyMobDead:
end;
}
-force_1-2,133,178,0 script force_09start#party -1,1,1,{
+force_1-2,133,178,0 script force_09start#party FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_09mob#party::OnEnable";
disablenpc "force_09start#party";
end;
}
-- script force_09mob#party -1,{
+- script force_09mob#party FAKE_NPC,{
OnEnable:
monster "force_1-2",86,180,"Elder",1573,1,"force_09mob#party::OnMyMobDead";
monster "force_1-2",86,176,"Elder",1573,1,"force_09mob#party::OnMyMobDead";
@@ -869,14 +869,14 @@ OnMyMobDead:
end;
}
-force_1-2,29,178,0 script force_10start#party -1,1,1,{
+force_1-2,29,178,0 script force_10start#party FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_10mob-1#party::OnEnable";
disablenpc "force_10start#party";
end;
}
-- script force_10mob-1#party -1,{
+- script force_10mob-1#party FAKE_NPC,{
OnEnable:
switch(rand(1,2)) {
case 1:
@@ -898,7 +898,7 @@ OnMyMobDead:
end;
}
-- script force_10mob-2#party -1,{
+- script force_10mob-2#party FAKE_NPC,{
OnEnable:
monster "force_1-2",16,179,"Samurai Spector",1542,1,"force_10mob-2#party::OnMyMobDead";
monster "force_1-2",16,179,"Shinobi",1560,1,"force_10mob-2#party::OnMyMobDead";
@@ -921,14 +921,14 @@ OnMyMobDead:
end;
}
-force_1-2,59,178,0 script force_exit#party -1,1,1,{
+force_1-2,59,178,0 script force_exit#party FAKE_NPC,1,1,{
OnTouch:
donpcevent "force_exitmob#party::OnEnable";
disablenpc "force_exit#party";
end;
}
-- script force_exitmob#party -1,{
+- script force_exitmob#party FAKE_NPC,{
OnEnable:
monster "force_1-2",95,177,"Farewell",1393,1,"force_exitmob#party::OnMyMobDead";
monster "force_1-2",95,177,"I hate you",1543,1,"force_exitmob#party::OnMyMobDead";
@@ -1142,7 +1142,7 @@ prt_are_in,77,135,3 script Staff#party-2 1_F_02,{
}
}
-- script #arn_timer_pt -1,{
+- script #arn_timer_pt FAKE_NPC,{
OnEnter:
initnpctimer;
end;
@@ -1172,13 +1172,13 @@ OnStop:
end;
}
-- script arn_warp_pt -1,{
+- script arn_warp_pt FAKE_NPC,{
OnOut:
areawarp "prt_are_in",66,143,81,126,"arena_room",100,75;
end;
}
-- script cast#pt -1,{
+- script cast#pt FAKE_NPC,{
OnTimeOver1:
mapannounce "force_2-1","Arena will be reactivated due to an error occurred during battle.",0,0xFFCE00;
end;
@@ -1196,7 +1196,7 @@ OnTimeOver2:
end;
}
-- script alloff#pt -1,{
+- script alloff#pt FAKE_NPC,{
OnEnable:
mapwarp "force_1-2","prt_are_in",126,139,0,0;
donpcevent "force_01mob#party::OnReset";
diff --git a/npc/other/arena/arena_room.txt b/npc/other/arena/arena_room.txt
index 2508a1aa9..4857b5ec5 100644
--- a/npc/other/arena/arena_room.txt
+++ b/npc/other/arena/arena_room.txt
@@ -787,7 +787,7 @@ prt_are_in,1,1,5 duplicate(#arena_1039) #arena_1251 KNIGHT_OF_WINDSTORM
prt_are_in,1,1,5 duplicate(#arena_1039) #arena_1159 PHREEONI
prt_are_in,1,1,5 duplicate(#arena_1039) #arena_7777 4_F_VALKYRIE
-- script npctime#arena -1,{
+- script npctime#arena FAKE_NPC,{
OnStop:
stopnpctimer;
end;
diff --git a/npc/other/auction.txt b/npc/other/auction.txt
index 42df057f6..f4b9c41e1 100644
--- a/npc/other/auction.txt
+++ b/npc/other/auction.txt
@@ -88,7 +88,7 @@ function script F_AuctionWarper {
}
//== Sign posts ============================================
-- script Information Post#dum::AuctionSign -1,{
+- script Information Post#dum::AuctionSign FAKE_NPC,{
mes "[Information]";
mes "Auction Warp Guide";
close;
@@ -106,7 +106,7 @@ auction_02,151,17,0 warp auction_enterance_juno 1,1,yuno,132,119
auction_02,43,17,0 warp auction_enterance_lhz 1,1,lighthalzen,209,169
//== Auction House NPCs ====================================
-- script Auction Broker#dum::AuctionBroker -1,{
+- script Auction Broker#dum::AuctionBroker FAKE_NPC,{
mes "[Auction Broker]";
mes "Welcome to the Auction Hall.";
mes "Would you like to view the goods?";
diff --git a/npc/other/mail.txt b/npc/other/mail.txt
index 0276fc536..54067319e 100644
--- a/npc/other/mail.txt
+++ b/npc/other/mail.txt
@@ -37,7 +37,7 @@
//=========================================================================
//== Floating mailbox npc that all NPCs duplicate from =====
-- script Mailbox#dummy::MailBox -1,{
+- script Mailbox#dummy::MailBox FAKE_NPC,{
mes "[Mailbox]";
mes "To use the mailbox service,";
mes "you are required to pay 130 zeny.";
diff --git a/npc/other/mercenary_rent.txt b/npc/other/mercenary_rent.txt
index 47f38560a..fe982564d 100644
--- a/npc/other/mercenary_rent.txt
+++ b/npc/other/mercenary_rent.txt
@@ -35,7 +35,7 @@
//= 1.4
//=========================================================================
-- script Mercenary Manager#main -1,{
+- script Mercenary Manager#main FAKE_NPC,{
setarray .@name$, "Spear", "Sword", "Bow";
setarray .@faith$, "SPEAR_MERC_GUILD", "SWORD_MERC_GUILD", "ARCH_MERC_GUILD";
setarray .@item, 12182, 12172, 12162;
@@ -230,7 +230,7 @@ prontera,41,337,5 duplicate(Mercenary Manager#main) Mercenary Manager#Spear 8W_S
pay_arche,99,167,4 duplicate(Mercenary Manager#main) Mercenary Manager#Bow 4_M_JOB_HUNTER
//== Mercenary Merchant NPCs ===============================
-- script Mercenary Merchant#dummy::MercMerchant -1,{
+- script Mercenary Merchant#dummy::MercMerchant FAKE_NPC,{
mes "[Mercenary Goods Merchant]";
mes "Hello, I sell goods";
mes "that Mercenaries can";
diff --git a/npc/other/monster_race.txt b/npc/other/monster_race.txt
index eec6593e5..e5827c5a1 100644
--- a/npc/other/monster_race.txt
+++ b/npc/other/monster_race.txt
@@ -38,7 +38,7 @@
//=========================================================================
//== Monster Race - Single Monster Race ====================
-hugel,51,61,0 script #race_timer1-1 -1,{
+hugel,51,61,0 script #race_timer1-1 FAKE_NPC,{
OnEnable:
enablenpc "#race_timer1-1";
OnInit:
@@ -80,7 +80,7 @@ OnTimer330000:
end;
}
-p_track01,58,0,0 script Race Progress Timer -1,{
+p_track01,58,0,0 script Race Progress Timer FAKE_NPC,{
OnEnable:
initnpctimer;
enablenpc "Race Progress Timer";
@@ -233,7 +233,7 @@ OnInit:
end;
}
-- script Runner_main -1,{
+- script Runner_main FAKE_NPC,{
function F_Num;
function F_Ord;
end;
@@ -292,12 +292,12 @@ OnInit:
disablenpc strnpcinfo(0);
end;
}
-p_track01,30,38,0 duplicate(Runner_main) Runner No. 1#1 -1,1,0
-p_track01,30,36,0 duplicate(Runner_main) Runner No. 2#2 -1,1,0
-p_track01,30,34,0 duplicate(Runner_main) Runner No. 3#3 -1,1,0
-p_track01,30,32,0 duplicate(Runner_main) Runner No. 4#4 -1,1,0
-p_track01,30,30,0 duplicate(Runner_main) Runner No. 5#5 -1,1,0
-p_track01,30,28,0 duplicate(Runner_main) Runner No. 6#6 -1,1,0
+p_track01,30,38,0 duplicate(Runner_main) Runner No. 1#1 FAKE_NPC,1,0
+p_track01,30,36,0 duplicate(Runner_main) Runner No. 2#2 FAKE_NPC,1,0
+p_track01,30,34,0 duplicate(Runner_main) Runner No. 3#3 FAKE_NPC,1,0
+p_track01,30,32,0 duplicate(Runner_main) Runner No. 4#4 FAKE_NPC,1,0
+p_track01,30,30,0 duplicate(Runner_main) Runner No. 5#5 FAKE_NPC,1,0
+p_track01,30,28,0 duplicate(Runner_main) Runner No. 6#6 FAKE_NPC,1,0
p_track01,67,45,5 script Medal Distributor#single 4_F_RACING,{
if (!checkweight(Spawn,200)) {
@@ -828,7 +828,7 @@ p_track01,39,49,3 script Game Guide#single 4_F_RACING,{
close;
}
-- script starting_1 -1,{
+- script starting_1 FAKE_NPC,{
OnTouchNPC:
.@start = rand(1,100);
if (.@start < 11) .@speed = 60;
@@ -849,7 +849,7 @@ OnInit:
end;
}
-- script Luk_1 -1,{
+- script Luk_1 FAKE_NPC,{
OnTouchNPC:
.@start = rand(1,100);
if (.@start < 61) .@speed = 110;
@@ -865,7 +865,7 @@ OnInit:
end;
}
-- script Luk_2 -1,{
+- script Luk_2 FAKE_NPC,{
OnTouchNPC:
.@start = rand(1,100);
if (.@start < 61) .@time = 1000;
@@ -880,7 +880,7 @@ OnInit:
end;
}
-- script Tire_1 -1,{
+- script Tire_1 FAKE_NPC,{
OnTouchNPC:
.@start = rand(1,100);
if (.@start < 61) .@time = 1000;
@@ -895,90 +895,90 @@ OnInit:
end;
}
-p_track01,56,38,0 duplicate(starting_1) starting#1 -1,0,0
-p_track01,56,36,0 duplicate(starting_1) starting#2 -1,0,0
-p_track01,56,34,0 duplicate(starting_1) starting#3 -1,0,0
-p_track01,56,32,0 duplicate(starting_1) starting#4 -1,0,0
-p_track01,56,30,0 duplicate(starting_1) starting#5 -1,0,0
-p_track01,56,28,0 duplicate(starting_1) starting#6 -1,0,0
-
-p_track01,33,38,0 duplicate(Luk_1) Luk1#1 -1,0,0
-p_track01,37,38,0 duplicate(Luk_1) Luk1#2 -1,0,0
-p_track01,53,38,0 duplicate(Luk_1) Luk1#3 -1,0,0
-p_track01,45,38,0 duplicate(Luk_1) Luk1#4 -1,0,0
-p_track01,33,36,0 duplicate(Luk_1) Luk2#1 -1,0,0
-p_track01,37,36,0 duplicate(Luk_1) Luk2#2 -1,0,0
-p_track01,53,36,0 duplicate(Luk_1) Luk2#3 -1,0,0
-p_track01,45,36,0 duplicate(Luk_1) Luk2#4 -1,0,0
-p_track01,33,34,0 duplicate(Luk_1) Luk3#1 -1,0,0
-p_track01,37,34,0 duplicate(Luk_1) Luk3#2 -1,0,0
-p_track01,53,34,0 duplicate(Luk_1) Luk3#3 -1,0,0
-p_track01,45,34,0 duplicate(Luk_1) Luk3#4 -1,0,0
-p_track01,33,32,0 duplicate(Luk_1) Luk4#1 -1,0,0
-p_track01,37,32,0 duplicate(Luk_1) Luk4#2 -1,0,0
-p_track01,53,32,0 duplicate(Luk_1) Luk4#3 -1,0,0
-p_track01,45,32,0 duplicate(Luk_1) Luk4#4 -1,0,0
-p_track01,33,30,0 duplicate(Luk_1) Luk5#1 -1,0,0
-p_track01,37,30,0 duplicate(Luk_1) Luk5#2 -1,0,0
-p_track01,53,30,0 duplicate(Luk_1) Luk5#3 -1,0,0
-p_track01,45,30,0 duplicate(Luk_1) Luk5#4 -1,0,0
-p_track01,33,28,0 duplicate(Luk_1) Luk6#1 -1,0,0
-p_track01,37,28,0 duplicate(Luk_1) Luk6#2 -1,0,0
-p_track01,53,28,0 duplicate(Luk_1) Luk6#3 -1,0,0
-p_track01,45,28,0 duplicate(Luk_1) Luk6#4 -1,0,0
-
-p_track01,49,38,0 duplicate(Luk_2) Luk1#5 -1,0,0
-p_track01,41,38,0 duplicate(Luk_2) Luk1#6 -1,0,0
-p_track01,49,36,0 duplicate(Luk_2) Luk2#5 -1,0,0
-p_track01,41,36,0 duplicate(Luk_2) Luk2#6 -1,0,0
-p_track01,49,34,0 duplicate(Luk_2) Luk3#5 -1,0,0
-p_track01,41,34,0 duplicate(Luk_2) Luk3#6 -1,0,0
-p_track01,49,32,0 duplicate(Luk_2) Luk4#5 -1,0,0
-p_track01,41,32,0 duplicate(Luk_2) Luk4#6 -1,0,0
-p_track01,49,30,0 duplicate(Luk_2) Luk5#5 -1,0,0
-p_track01,41,30,0 duplicate(Luk_2) Luk5#6 -1,0,0
-p_track01,49,28,0 duplicate(Luk_2) Luk6#5 -1,0,0
-p_track01,41,28,0 duplicate(Luk_2) Luk6#6 -1,0,0
-
-p_track01,43,38,0 duplicate(Tire_1) Tire1#1 -1,0,0
-p_track01,39,38,0 duplicate(Tire_1) Tire1#2 -1,0,0
-p_track01,35,38,0 duplicate(Tire_1) Tire1#3 -1,0,0
-p_track01,55,38,0 duplicate(Tire_1) Tire1#4 -1,0,0
-p_track01,51,38,0 duplicate(Tire_1) Tire1#5 -1,0,0
-p_track01,47,38,0 duplicate(Tire_1) Tire1#6 -1,0,0
-p_track01,43,36,0 duplicate(Tire_1) Tire2#1 -1,0,0
-p_track01,39,36,0 duplicate(Tire_1) Tire2#2 -1,0,0
-p_track01,35,36,0 duplicate(Tire_1) Tire2#3 -1,0,0
-p_track01,55,36,0 duplicate(Tire_1) Tire2#4 -1,0,0
-p_track01,51,36,0 duplicate(Tire_1) Tire2#5 -1,0,0
-p_track01,47,36,0 duplicate(Tire_1) Tire2#6 -1,0,0
-p_track01,43,34,0 duplicate(Tire_1) Tire3#1 -1,0,0
-p_track01,39,34,0 duplicate(Tire_1) Tire3#2 -1,0,0
-p_track01,35,34,0 duplicate(Tire_1) Tire3#3 -1,0,0
-p_track01,55,34,0 duplicate(Tire_1) Tire3#4 -1,0,0
-p_track01,51,34,0 duplicate(Tire_1) Tire3#5 -1,0,0
-p_track01,47,34,0 duplicate(Tire_1) Tire3#6 -1,0,0
-p_track01,43,32,0 duplicate(Tire_1) Tire4#1 -1,0,0
-p_track01,39,32,0 duplicate(Tire_1) Tire4#2 -1,0,0
-p_track01,35,32,0 duplicate(Tire_1) Tire4#3 -1,0,0
-p_track01,55,32,0 duplicate(Tire_1) Tire4#4 -1,0,0
-p_track01,51,32,0 duplicate(Tire_1) Tire4#5 -1,0,0
-p_track01,47,32,0 duplicate(Tire_1) Tire4#6 -1,0,0
-p_track01,43,30,0 duplicate(Tire_1) Tire5#1 -1,0,0
-p_track01,39,30,0 duplicate(Tire_1) Tire5#2 -1,0,0
-p_track01,35,30,0 duplicate(Tire_1) Tire5#3 -1,0,0
-p_track01,55,30,0 duplicate(Tire_1) Tire5#4 -1,0,0
-p_track01,51,30,0 duplicate(Tire_1) Tire5#5 -1,0,0
-p_track01,47,30,0 duplicate(Tire_1) Tire5#6 -1,0,0
-p_track01,43,28,0 duplicate(Tire_1) Tire6#1 -1,0,0
-p_track01,39,28,0 duplicate(Tire_1) Tire6#2 -1,0,0
-p_track01,35,28,0 duplicate(Tire_1) Tire6#3 -1,0,0
-p_track01,55,28,0 duplicate(Tire_1) Tire6#4 -1,0,0
-p_track01,51,28,0 duplicate(Tire_1) Tire6#5 -1,0,0
-p_track01,47,28,0 duplicate(Tire_1) Tire6#6 -1,0,0
+p_track01,56,38,0 duplicate(starting_1) starting#1 FAKE_NPC,0,0
+p_track01,56,36,0 duplicate(starting_1) starting#2 FAKE_NPC,0,0
+p_track01,56,34,0 duplicate(starting_1) starting#3 FAKE_NPC,0,0
+p_track01,56,32,0 duplicate(starting_1) starting#4 FAKE_NPC,0,0
+p_track01,56,30,0 duplicate(starting_1) starting#5 FAKE_NPC,0,0
+p_track01,56,28,0 duplicate(starting_1) starting#6 FAKE_NPC,0,0
+
+p_track01,33,38,0 duplicate(Luk_1) Luk1#1 FAKE_NPC,0,0
+p_track01,37,38,0 duplicate(Luk_1) Luk1#2 FAKE_NPC,0,0
+p_track01,53,38,0 duplicate(Luk_1) Luk1#3 FAKE_NPC,0,0
+p_track01,45,38,0 duplicate(Luk_1) Luk1#4 FAKE_NPC,0,0
+p_track01,33,36,0 duplicate(Luk_1) Luk2#1 FAKE_NPC,0,0
+p_track01,37,36,0 duplicate(Luk_1) Luk2#2 FAKE_NPC,0,0
+p_track01,53,36,0 duplicate(Luk_1) Luk2#3 FAKE_NPC,0,0
+p_track01,45,36,0 duplicate(Luk_1) Luk2#4 FAKE_NPC,0,0
+p_track01,33,34,0 duplicate(Luk_1) Luk3#1 FAKE_NPC,0,0
+p_track01,37,34,0 duplicate(Luk_1) Luk3#2 FAKE_NPC,0,0
+p_track01,53,34,0 duplicate(Luk_1) Luk3#3 FAKE_NPC,0,0
+p_track01,45,34,0 duplicate(Luk_1) Luk3#4 FAKE_NPC,0,0
+p_track01,33,32,0 duplicate(Luk_1) Luk4#1 FAKE_NPC,0,0
+p_track01,37,32,0 duplicate(Luk_1) Luk4#2 FAKE_NPC,0,0
+p_track01,53,32,0 duplicate(Luk_1) Luk4#3 FAKE_NPC,0,0
+p_track01,45,32,0 duplicate(Luk_1) Luk4#4 FAKE_NPC,0,0
+p_track01,33,30,0 duplicate(Luk_1) Luk5#1 FAKE_NPC,0,0
+p_track01,37,30,0 duplicate(Luk_1) Luk5#2 FAKE_NPC,0,0
+p_track01,53,30,0 duplicate(Luk_1) Luk5#3 FAKE_NPC,0,0
+p_track01,45,30,0 duplicate(Luk_1) Luk5#4 FAKE_NPC,0,0
+p_track01,33,28,0 duplicate(Luk_1) Luk6#1 FAKE_NPC,0,0
+p_track01,37,28,0 duplicate(Luk_1) Luk6#2 FAKE_NPC,0,0
+p_track01,53,28,0 duplicate(Luk_1) Luk6#3 FAKE_NPC,0,0
+p_track01,45,28,0 duplicate(Luk_1) Luk6#4 FAKE_NPC,0,0
+
+p_track01,49,38,0 duplicate(Luk_2) Luk1#5 FAKE_NPC,0,0
+p_track01,41,38,0 duplicate(Luk_2) Luk1#6 FAKE_NPC,0,0
+p_track01,49,36,0 duplicate(Luk_2) Luk2#5 FAKE_NPC,0,0
+p_track01,41,36,0 duplicate(Luk_2) Luk2#6 FAKE_NPC,0,0
+p_track01,49,34,0 duplicate(Luk_2) Luk3#5 FAKE_NPC,0,0
+p_track01,41,34,0 duplicate(Luk_2) Luk3#6 FAKE_NPC,0,0
+p_track01,49,32,0 duplicate(Luk_2) Luk4#5 FAKE_NPC,0,0
+p_track01,41,32,0 duplicate(Luk_2) Luk4#6 FAKE_NPC,0,0
+p_track01,49,30,0 duplicate(Luk_2) Luk5#5 FAKE_NPC,0,0
+p_track01,41,30,0 duplicate(Luk_2) Luk5#6 FAKE_NPC,0,0
+p_track01,49,28,0 duplicate(Luk_2) Luk6#5 FAKE_NPC,0,0
+p_track01,41,28,0 duplicate(Luk_2) Luk6#6 FAKE_NPC,0,0
+
+p_track01,43,38,0 duplicate(Tire_1) Tire1#1 FAKE_NPC,0,0
+p_track01,39,38,0 duplicate(Tire_1) Tire1#2 FAKE_NPC,0,0
+p_track01,35,38,0 duplicate(Tire_1) Tire1#3 FAKE_NPC,0,0
+p_track01,55,38,0 duplicate(Tire_1) Tire1#4 FAKE_NPC,0,0
+p_track01,51,38,0 duplicate(Tire_1) Tire1#5 FAKE_NPC,0,0
+p_track01,47,38,0 duplicate(Tire_1) Tire1#6 FAKE_NPC,0,0
+p_track01,43,36,0 duplicate(Tire_1) Tire2#1 FAKE_NPC,0,0
+p_track01,39,36,0 duplicate(Tire_1) Tire2#2 FAKE_NPC,0,0
+p_track01,35,36,0 duplicate(Tire_1) Tire2#3 FAKE_NPC,0,0
+p_track01,55,36,0 duplicate(Tire_1) Tire2#4 FAKE_NPC,0,0
+p_track01,51,36,0 duplicate(Tire_1) Tire2#5 FAKE_NPC,0,0
+p_track01,47,36,0 duplicate(Tire_1) Tire2#6 FAKE_NPC,0,0
+p_track01,43,34,0 duplicate(Tire_1) Tire3#1 FAKE_NPC,0,0
+p_track01,39,34,0 duplicate(Tire_1) Tire3#2 FAKE_NPC,0,0
+p_track01,35,34,0 duplicate(Tire_1) Tire3#3 FAKE_NPC,0,0
+p_track01,55,34,0 duplicate(Tire_1) Tire3#4 FAKE_NPC,0,0
+p_track01,51,34,0 duplicate(Tire_1) Tire3#5 FAKE_NPC,0,0
+p_track01,47,34,0 duplicate(Tire_1) Tire3#6 FAKE_NPC,0,0
+p_track01,43,32,0 duplicate(Tire_1) Tire4#1 FAKE_NPC,0,0
+p_track01,39,32,0 duplicate(Tire_1) Tire4#2 FAKE_NPC,0,0
+p_track01,35,32,0 duplicate(Tire_1) Tire4#3 FAKE_NPC,0,0
+p_track01,55,32,0 duplicate(Tire_1) Tire4#4 FAKE_NPC,0,0
+p_track01,51,32,0 duplicate(Tire_1) Tire4#5 FAKE_NPC,0,0
+p_track01,47,32,0 duplicate(Tire_1) Tire4#6 FAKE_NPC,0,0
+p_track01,43,30,0 duplicate(Tire_1) Tire5#1 FAKE_NPC,0,0
+p_track01,39,30,0 duplicate(Tire_1) Tire5#2 FAKE_NPC,0,0
+p_track01,35,30,0 duplicate(Tire_1) Tire5#3 FAKE_NPC,0,0
+p_track01,55,30,0 duplicate(Tire_1) Tire5#4 FAKE_NPC,0,0
+p_track01,51,30,0 duplicate(Tire_1) Tire5#5 FAKE_NPC,0,0
+p_track01,47,30,0 duplicate(Tire_1) Tire5#6 FAKE_NPC,0,0
+p_track01,43,28,0 duplicate(Tire_1) Tire6#1 FAKE_NPC,0,0
+p_track01,39,28,0 duplicate(Tire_1) Tire6#2 FAKE_NPC,0,0
+p_track01,35,28,0 duplicate(Tire_1) Tire6#3 FAKE_NPC,0,0
+p_track01,55,28,0 duplicate(Tire_1) Tire6#4 FAKE_NPC,0,0
+p_track01,51,28,0 duplicate(Tire_1) Tire6#5 FAKE_NPC,0,0
+p_track01,47,28,0 duplicate(Tire_1) Tire6#6 FAKE_NPC,0,0
//== Monster Race - Dual Monster Race ======================
-hugel,47,56,0 script #race_timer2-1 -1,{
+hugel,47,56,0 script #race_timer2-1 FAKE_NPC,{
OnEnable:
enablenpc "#race_timer2-1";
OnInit:
@@ -1022,7 +1022,7 @@ OnTimer330000:
end;
}
-p_track02,42,23,0 script #race_timer2-2 -1,{
+p_track02,42,23,0 script #race_timer2-2 FAKE_NPC,{
OnEnable:
enablenpc "#race_timer2-2";
$@mon_time_2_2 = 0;
@@ -1073,7 +1073,7 @@ OnInit:
end;
}
-p_track02,80,43,0 script #race_timer2-3 -1,{
+p_track02,80,43,0 script #race_timer2-3 FAKE_NPC,{
OnEnable:
enablenpc "#race_timer2-3";
initnpctimer;
@@ -1745,7 +1745,7 @@ p_track02,76,38,1 script Exit Guide#double 4_M_NFMAN,{
end;
}
-- script mob1#main -1,{
+- script mob1#main FAKE_NPC,{
function MN;
OnEnable:
enablenpc strnpcinfo(0);
@@ -1810,7 +1810,7 @@ p_track02,30,32,0 duplicate(mob1#main) #desertwolf1 HIDDEN_WARP_NPC,0,0
p_track02,30,30,0 duplicate(mob1#main) #deviruchi1 HIDDEN_WARP_NPC,0,0
p_track02,30,28,0 duplicate(mob1#main) #baphomet1 HIDDEN_WARP_NPC,0,0
-p_track02,19,48,0 script TrapGlobal#race02 -1,{
+p_track02,19,48,0 script TrapGlobal#race02 FAKE_NPC,{
OnEnable:
enablenpc "TrapGlobal#race02";
for (.@c = 1; .@c <= 6; ++.@c) {
@@ -1876,7 +1876,7 @@ OnInit:
end;
}
-- script starting_2 -1,{
+- script starting_2 FAKE_NPC,{
OnTouchNPC:
.@start = rand(1,100);
if (.@start < 11) .@speed = 60;
@@ -1905,87 +1905,87 @@ OnInit:
end;
}
-p_track02,56,38,0 duplicate(starting_2) starting#race02_1 -1,0,0
-p_track02,56,36,0 duplicate(starting_2) starting#race02_2 -1,0,0
-p_track02,56,34,0 duplicate(starting_2) starting#race02_3 -1,0,0
-p_track02,56,32,0 duplicate(starting_2) starting#race02_4 -1,0,0
-p_track02,56,30,0 duplicate(starting_2) starting#race02_5 -1,0,0
-p_track02,56,28,0 duplicate(starting_2) starting#race02_6 -1,0,0
-
-p_track02,33,38,0 duplicate(Luk_1) Luk#race02_1_1 -1,0,0
-p_track02,37,38,0 duplicate(Luk_1) Luk#race02_1_2 -1,0,0
-p_track02,53,38,0 duplicate(Luk_1) Luk#race02_1_3 -1,0,0
-p_track02,45,38,0 duplicate(Luk_1) Luk#race02_1_4 -1,0,0
-p_track02,33,36,0 duplicate(Luk_1) Luk#race02_2_1 -1,0,0
-p_track02,37,36,0 duplicate(Luk_1) Luk#race02_2_2 -1,0,0
-p_track02,53,36,0 duplicate(Luk_1) Luk#race02_2_3 -1,0,0
-p_track02,45,36,0 duplicate(Luk_1) Luk#race02_2_4 -1,0,0
-p_track02,33,34,0 duplicate(Luk_1) Luk#race02_3_1 -1,0,0
-p_track02,37,34,0 duplicate(Luk_1) Luk#race02_3_2 -1,0,0
-p_track02,53,34,0 duplicate(Luk_1) Luk#race02_3_3 -1,0,0
-p_track02,45,34,0 duplicate(Luk_1) Luk#race02_3_4 -1,0,0
-p_track02,33,32,0 duplicate(Luk_1) Luk#race02_4_1 -1,0,0
-p_track02,37,32,0 duplicate(Luk_1) Luk#race02_4_2 -1,0,0
-p_track02,53,32,0 duplicate(Luk_1) Luk#race02_4_3 -1,0,0
-p_track02,45,32,0 duplicate(Luk_1) Luk#race02_4_4 -1,0,0
-p_track02,33,30,0 duplicate(Luk_1) Luk#race02_5_1 -1,0,0
-p_track02,37,30,0 duplicate(Luk_1) Luk#race02_5_2 -1,0,0
-p_track02,53,30,0 duplicate(Luk_1) Luk#race02_5_3 -1,0,0
-p_track02,45,30,0 duplicate(Luk_1) Luk#race02_5_4 -1,0,0
-p_track02,33,28,0 duplicate(Luk_1) Luk#race02_6_1 -1,0,0
-p_track02,37,28,0 duplicate(Luk_1) Luk#race02_6_2 -1,0,0
-p_track02,53,28,0 duplicate(Luk_1) Luk#race02_6_3 -1,0,0
-p_track02,45,28,0 duplicate(Luk_1) Luk#race02_6_4 -1,0,0
-
-p_track02,49,38,0 duplicate(Luk_2) Luk#race02_1_5 -1,0,0
-p_track02,41,38,0 duplicate(Luk_2) Luk#race02_1_6 -1,0,0
-p_track02,49,36,0 duplicate(Luk_2) Luk#race02_2_5 -1,0,0
-p_track02,41,36,0 duplicate(Luk_2) Luk#race02_2_6 -1,0,0
-p_track02,49,34,0 duplicate(Luk_2) Luk#race02_3_5 -1,0,0
-p_track02,41,34,0 duplicate(Luk_2) Luk#race02_3_6 -1,0,0
-p_track02,49,32,0 duplicate(Luk_2) Luk#race02_4_5 -1,0,0
-p_track02,41,32,0 duplicate(Luk_2) Luk#race02_4_6 -1,0,0
-p_track02,49,30,0 duplicate(Luk_2) Luk#race02_5_5 -1,0,0
-p_track02,41,30,0 duplicate(Luk_2) Luk#race02_5_6 -1,0,0
-p_track02,49,28,0 duplicate(Luk_2) Luk#race02_6_5 -1,0,0
-p_track02,41,28,0 duplicate(Luk_2) Luk#race02_6_6 -1,0,0
-
-p_track02,43,38,0 duplicate(Tire_1) Tire#race02_1_1 -1,0,0
-p_track02,39,38,0 duplicate(Tire_1) Tire#race02_1_2 -1,0,0
-p_track02,35,38,0 duplicate(Tire_1) Tire#race02_1_3 -1,0,0
-p_track02,55,38,0 duplicate(Tire_1) Tire#race02_1_4 -1,0,0
-p_track02,51,38,0 duplicate(Tire_1) Tire#race02_1_5 -1,0,0
-p_track02,47,38,0 duplicate(Tire_1) Tire#race02_1_6 -1,0,0
-p_track02,43,36,0 duplicate(Tire_1) Tire#race02_2_1 -1,0,0
-p_track02,39,36,0 duplicate(Tire_1) Tire#race02_2_2 -1,0,0
-p_track02,35,36,0 duplicate(Tire_1) Tire#race02_2_3 -1,0,0
-p_track02,55,36,0 duplicate(Tire_1) Tire#race02_2_4 -1,0,0
-p_track02,51,36,0 duplicate(Tire_1) Tire#race02_2_5 -1,0,0
-p_track02,47,36,0 duplicate(Tire_1) Tire#race02_2_6 -1,0,0
-p_track02,43,34,0 duplicate(Tire_1) Tire#race02_3_1 -1,0,0
-p_track02,39,34,0 duplicate(Tire_1) Tire#race02_3_2 -1,0,0
-p_track02,35,34,0 duplicate(Tire_1) Tire#race02_3_3 -1,0,0
-p_track02,55,34,0 duplicate(Tire_1) Tire#race02_3_4 -1,0,0
-p_track02,51,34,0 duplicate(Tire_1) Tire#race02_3_5 -1,0,0
-p_track02,47,34,0 duplicate(Tire_1) Tire#race02_3_6 -1,0,0
-p_track02,43,32,0 duplicate(Tire_1) Tire#race02_4_1 -1,0,0
-p_track02,39,32,0 duplicate(Tire_1) Tire#race02_4_2 -1,0,0
-p_track02,35,32,0 duplicate(Tire_1) Tire#race02_4_3 -1,0,0
-p_track02,55,32,0 duplicate(Tire_1) Tire#race02_4_4 -1,0,0
-p_track02,51,32,0 duplicate(Tire_1) Tire#race02_4_5 -1,0,0
-p_track02,47,32,0 duplicate(Tire_1) Tire#race02_4_6 -1,0,0
-p_track02,43,30,0 duplicate(Tire_1) Tire#race02_5_1 -1,0,0
-p_track02,39,30,0 duplicate(Tire_1) Tire#race02_5_2 -1,0,0
-p_track02,35,30,0 duplicate(Tire_1) Tire#race02_5_3 -1,0,0
-p_track02,55,30,0 duplicate(Tire_1) Tire#race02_5_4 -1,0,0
-p_track02,51,30,0 duplicate(Tire_1) Tire#race02_5_5 -1,0,0
-p_track02,47,30,0 duplicate(Tire_1) Tire#race02_5_6 -1,0,0
-p_track02,43,28,0 duplicate(Tire_1) Tire#race02_6_1 -1,0,0
-p_track02,39,28,0 duplicate(Tire_1) Tire#race02_6_2 -1,0,0
-p_track02,35,28,0 duplicate(Tire_1) Tire#race02_6_3 -1,0,0
-p_track02,55,28,0 duplicate(Tire_1) Tire#race02_6_4 -1,0,0
-p_track02,51,28,0 duplicate(Tire_1) Tire#race02_6_5 -1,0,0
-p_track02,47,28,0 duplicate(Tire_1) Tire#race02_6_6 -1,0,0
+p_track02,56,38,0 duplicate(starting_2) starting#race02_1 FAKE_NPC,0,0
+p_track02,56,36,0 duplicate(starting_2) starting#race02_2 FAKE_NPC,0,0
+p_track02,56,34,0 duplicate(starting_2) starting#race02_3 FAKE_NPC,0,0
+p_track02,56,32,0 duplicate(starting_2) starting#race02_4 FAKE_NPC,0,0
+p_track02,56,30,0 duplicate(starting_2) starting#race02_5 FAKE_NPC,0,0
+p_track02,56,28,0 duplicate(starting_2) starting#race02_6 FAKE_NPC,0,0
+
+p_track02,33,38,0 duplicate(Luk_1) Luk#race02_1_1 FAKE_NPC,0,0
+p_track02,37,38,0 duplicate(Luk_1) Luk#race02_1_2 FAKE_NPC,0,0
+p_track02,53,38,0 duplicate(Luk_1) Luk#race02_1_3 FAKE_NPC,0,0
+p_track02,45,38,0 duplicate(Luk_1) Luk#race02_1_4 FAKE_NPC,0,0
+p_track02,33,36,0 duplicate(Luk_1) Luk#race02_2_1 FAKE_NPC,0,0
+p_track02,37,36,0 duplicate(Luk_1) Luk#race02_2_2 FAKE_NPC,0,0
+p_track02,53,36,0 duplicate(Luk_1) Luk#race02_2_3 FAKE_NPC,0,0
+p_track02,45,36,0 duplicate(Luk_1) Luk#race02_2_4 FAKE_NPC,0,0
+p_track02,33,34,0 duplicate(Luk_1) Luk#race02_3_1 FAKE_NPC,0,0
+p_track02,37,34,0 duplicate(Luk_1) Luk#race02_3_2 FAKE_NPC,0,0
+p_track02,53,34,0 duplicate(Luk_1) Luk#race02_3_3 FAKE_NPC,0,0
+p_track02,45,34,0 duplicate(Luk_1) Luk#race02_3_4 FAKE_NPC,0,0
+p_track02,33,32,0 duplicate(Luk_1) Luk#race02_4_1 FAKE_NPC,0,0
+p_track02,37,32,0 duplicate(Luk_1) Luk#race02_4_2 FAKE_NPC,0,0
+p_track02,53,32,0 duplicate(Luk_1) Luk#race02_4_3 FAKE_NPC,0,0
+p_track02,45,32,0 duplicate(Luk_1) Luk#race02_4_4 FAKE_NPC,0,0
+p_track02,33,30,0 duplicate(Luk_1) Luk#race02_5_1 FAKE_NPC,0,0
+p_track02,37,30,0 duplicate(Luk_1) Luk#race02_5_2 FAKE_NPC,0,0
+p_track02,53,30,0 duplicate(Luk_1) Luk#race02_5_3 FAKE_NPC,0,0
+p_track02,45,30,0 duplicate(Luk_1) Luk#race02_5_4 FAKE_NPC,0,0
+p_track02,33,28,0 duplicate(Luk_1) Luk#race02_6_1 FAKE_NPC,0,0
+p_track02,37,28,0 duplicate(Luk_1) Luk#race02_6_2 FAKE_NPC,0,0
+p_track02,53,28,0 duplicate(Luk_1) Luk#race02_6_3 FAKE_NPC,0,0
+p_track02,45,28,0 duplicate(Luk_1) Luk#race02_6_4 FAKE_NPC,0,0
+
+p_track02,49,38,0 duplicate(Luk_2) Luk#race02_1_5 FAKE_NPC,0,0
+p_track02,41,38,0 duplicate(Luk_2) Luk#race02_1_6 FAKE_NPC,0,0
+p_track02,49,36,0 duplicate(Luk_2) Luk#race02_2_5 FAKE_NPC,0,0
+p_track02,41,36,0 duplicate(Luk_2) Luk#race02_2_6 FAKE_NPC,0,0
+p_track02,49,34,0 duplicate(Luk_2) Luk#race02_3_5 FAKE_NPC,0,0
+p_track02,41,34,0 duplicate(Luk_2) Luk#race02_3_6 FAKE_NPC,0,0
+p_track02,49,32,0 duplicate(Luk_2) Luk#race02_4_5 FAKE_NPC,0,0
+p_track02,41,32,0 duplicate(Luk_2) Luk#race02_4_6 FAKE_NPC,0,0
+p_track02,49,30,0 duplicate(Luk_2) Luk#race02_5_5 FAKE_NPC,0,0
+p_track02,41,30,0 duplicate(Luk_2) Luk#race02_5_6 FAKE_NPC,0,0
+p_track02,49,28,0 duplicate(Luk_2) Luk#race02_6_5 FAKE_NPC,0,0
+p_track02,41,28,0 duplicate(Luk_2) Luk#race02_6_6 FAKE_NPC,0,0
+
+p_track02,43,38,0 duplicate(Tire_1) Tire#race02_1_1 FAKE_NPC,0,0
+p_track02,39,38,0 duplicate(Tire_1) Tire#race02_1_2 FAKE_NPC,0,0
+p_track02,35,38,0 duplicate(Tire_1) Tire#race02_1_3 FAKE_NPC,0,0
+p_track02,55,38,0 duplicate(Tire_1) Tire#race02_1_4 FAKE_NPC,0,0
+p_track02,51,38,0 duplicate(Tire_1) Tire#race02_1_5 FAKE_NPC,0,0
+p_track02,47,38,0 duplicate(Tire_1) Tire#race02_1_6 FAKE_NPC,0,0
+p_track02,43,36,0 duplicate(Tire_1) Tire#race02_2_1 FAKE_NPC,0,0
+p_track02,39,36,0 duplicate(Tire_1) Tire#race02_2_2 FAKE_NPC,0,0
+p_track02,35,36,0 duplicate(Tire_1) Tire#race02_2_3 FAKE_NPC,0,0
+p_track02,55,36,0 duplicate(Tire_1) Tire#race02_2_4 FAKE_NPC,0,0
+p_track02,51,36,0 duplicate(Tire_1) Tire#race02_2_5 FAKE_NPC,0,0
+p_track02,47,36,0 duplicate(Tire_1) Tire#race02_2_6 FAKE_NPC,0,0
+p_track02,43,34,0 duplicate(Tire_1) Tire#race02_3_1 FAKE_NPC,0,0
+p_track02,39,34,0 duplicate(Tire_1) Tire#race02_3_2 FAKE_NPC,0,0
+p_track02,35,34,0 duplicate(Tire_1) Tire#race02_3_3 FAKE_NPC,0,0
+p_track02,55,34,0 duplicate(Tire_1) Tire#race02_3_4 FAKE_NPC,0,0
+p_track02,51,34,0 duplicate(Tire_1) Tire#race02_3_5 FAKE_NPC,0,0
+p_track02,47,34,0 duplicate(Tire_1) Tire#race02_3_6 FAKE_NPC,0,0
+p_track02,43,32,0 duplicate(Tire_1) Tire#race02_4_1 FAKE_NPC,0,0
+p_track02,39,32,0 duplicate(Tire_1) Tire#race02_4_2 FAKE_NPC,0,0
+p_track02,35,32,0 duplicate(Tire_1) Tire#race02_4_3 FAKE_NPC,0,0
+p_track02,55,32,0 duplicate(Tire_1) Tire#race02_4_4 FAKE_NPC,0,0
+p_track02,51,32,0 duplicate(Tire_1) Tire#race02_4_5 FAKE_NPC,0,0
+p_track02,47,32,0 duplicate(Tire_1) Tire#race02_4_6 FAKE_NPC,0,0
+p_track02,43,30,0 duplicate(Tire_1) Tire#race02_5_1 FAKE_NPC,0,0
+p_track02,39,30,0 duplicate(Tire_1) Tire#race02_5_2 FAKE_NPC,0,0
+p_track02,35,30,0 duplicate(Tire_1) Tire#race02_5_3 FAKE_NPC,0,0
+p_track02,55,30,0 duplicate(Tire_1) Tire#race02_5_4 FAKE_NPC,0,0
+p_track02,51,30,0 duplicate(Tire_1) Tire#race02_5_5 FAKE_NPC,0,0
+p_track02,47,30,0 duplicate(Tire_1) Tire#race02_5_6 FAKE_NPC,0,0
+p_track02,43,28,0 duplicate(Tire_1) Tire#race02_6_1 FAKE_NPC,0,0
+p_track02,39,28,0 duplicate(Tire_1) Tire#race02_6_2 FAKE_NPC,0,0
+p_track02,35,28,0 duplicate(Tire_1) Tire#race02_6_3 FAKE_NPC,0,0
+p_track02,55,28,0 duplicate(Tire_1) Tire#race02_6_4 FAKE_NPC,0,0
+p_track02,51,28,0 duplicate(Tire_1) Tire#race02_6_5 FAKE_NPC,0,0
+p_track02,47,28,0 duplicate(Tire_1) Tire#race02_6_6 FAKE_NPC,0,0
//== NPCs for Redeeming Prize Medals (Einbroch and Hugel) ==
ein_in01,85,208,5 script Ei'felle#repay01 4_M_EINMAN2,{
diff --git a/npc/other/msg_boards.txt b/npc/other/msg_boards.txt
index db94e96e7..7daad4cba 100644
--- a/npc/other/msg_boards.txt
+++ b/npc/other/msg_boards.txt
@@ -237,7 +237,7 @@ aldebaran,54,223,1 script Billboard#Alde3 HIDDEN_NPC,{
close;
}
-aldebaran,197,228,1 script #Alde4 -1,1,1,{
+aldebaran,197,228,1 script #Alde4 FAKE_NPC,1,1,{
OnTouch:
mes "[Home Owner]";
mes "Get off my roof you no good leecher!";
diff --git a/npc/other/poring_war.txt b/npc/other/poring_war.txt
index b3b6466ad..571be1955 100644
--- a/npc/other/poring_war.txt
+++ b/npc/other/poring_war.txt
@@ -892,7 +892,7 @@ OnDisable:
end;
}
-poring_w02,1,1,0 script #wop_master -1,{
+poring_w02,1,1,0 script #wop_master FAKE_NPC,{
end;
OnReset:
@@ -1088,7 +1088,7 @@ OnTouch:
}
//== Poring Spawn ==========================================
-poring_w02,80,82,0 script #wop_angellium1 -1,{
+poring_w02,80,82,0 script #wop_angellium1 FAKE_NPC,{
end;
OnReset:
@@ -1122,7 +1122,7 @@ OnTimer120000:
stopnpctimer;
}
-poring_w02,98,41,0 script #wop_angellium2 -1,{
+poring_w02,98,41,0 script #wop_angellium2 FAKE_NPC,{
end;
OnReset:
@@ -1157,7 +1157,7 @@ OnTimer120000:
end;
}
-poring_w02,116,82,0 script #wop_devillium1 -1,{
+poring_w02,116,82,0 script #wop_devillium1 FAKE_NPC,{
end;
OnReset:
@@ -1192,7 +1192,7 @@ OnTimer120000:
end;
}
-poring_w02,98,124,0 script #wop_devillium2 -1,{
+poring_w02,98,124,0 script #wop_devillium2 FAKE_NPC,{
end;
OnReset:
@@ -1656,11 +1656,11 @@ OnTouch:
}
//== Other NPCs ============================================
-- script Angeling Side Poring#wpa -1,{
+- script Angeling Side Poring#wpa FAKE_NPC,{
end;
}
-- script Deviling Side Marin#wpd -1,{
+- script Deviling Side Marin#wpd FAKE_NPC,{
end;
}
diff --git a/npc/other/pvp.txt b/npc/other/pvp.txt
index 4632a0c4b..1820bfc5c 100644
--- a/npc/other/pvp.txt
+++ b/npc/other/pvp.txt
@@ -38,7 +38,7 @@
//=========================================================================
//== Information ===========================================
-- script PVP Narrator::pvpe -1,{
+- script PVP Narrator::pvpe FAKE_NPC,{
mes "[PVP Narrator]";
mes "Hello and welcome!";
mes "I am in charge of";
@@ -192,7 +192,7 @@ payon_in01,142,50,4 duplicate(pvpe) PVP Narrator#pe5 4_M_02
geffen_in,67,63,4 duplicate(pvpe) PVP Narrator#pe6 4_M_02
//== Mode Select ===========================================
-- script Gate Keeper::gkut -1,{
+- script Gate Keeper::gkut FAKE_NPC,{
mes "[Gate Keeper]";
mes "Glad to be of service.";
mes "I will open the PVP fight";
@@ -374,7 +374,7 @@ OnInit:
}
//== Spectator Entrance ====================================
-- script Spectator's Entrance#dum::PVPSpectator -1,{
+- script Spectator's Entrance#dum::PVPSpectator FAKE_NPC,{
if (countitem(Admission_For_Duel) == 0) {
mes "[PVP Compete Square Register Staff]";
mes "This is the entrance for viewers.";
@@ -405,7 +405,7 @@ pvp_room,78,85,4 duplicate(PVPSpectator) Spectator's Entrance#3 8W_SOLDIER
pvp_room,86,85,4 duplicate(PVPSpectator) Spectator's Entrance#4 8W_SOLDIER
//== Spectator Warps =======================================
-- script Combat Square Staff#dum::PVPSpecWarp -1,{
+- script Combat Square Staff#dum::PVPSpecWarp FAKE_NPC,{
OnTouch:
mes "[Combat Square Staff]";
mes "May I help you?";
diff --git a/npc/other/turbo_track.txt b/npc/other/turbo_track.txt
index e7b55b34e..a6c2727fa 100644
--- a/npc/other/turbo_track.txt
+++ b/npc/other/turbo_track.txt
@@ -45,7 +45,7 @@ function script F_tt {
return .@w$;
}
-- script entrance#tt_main -1,{
+- script entrance#tt_main FAKE_NPC,{
end;
OnEnable:
@@ -107,7 +107,7 @@ turbo_n_8,298,167,3 duplicate(Helper#tt_main) Helper#n8_F 4_F_TELEPORTER
turbo_n_16,298,167,3 duplicate(Helper#tt_main) Helper#n16_F 4_F_TELEPORTER
turbo_n_1,298,167,3 duplicate(Helper#tt_main) Helper#n1_F 4_F_TELEPORTER
-turbo_e_4,298,167,0 script Point#tt_main -1,15,15,{
+turbo_e_4,298,167,0 script Point#tt_main FAKE_NPC,15,15,{
end;
OnTouch:
@@ -124,15 +124,15 @@ OnInit:
disablenpc "Point Give-Away Guy#"+.@w$;
end;
}
-turbo_e_4,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#e4 -1,15,15
-turbo_e_8,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#e8 -1,15,15
-turbo_e_16,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#e16 -1,15,15
-turbo_n_4,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#n4 -1,15,15
-turbo_n_8,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#n8 -1,15,15
-turbo_n_16,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#n16 -1,15,15
-turbo_n_1,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#n1 -1,15,15
-
-- script Broadcast#tt_main -1,{
+turbo_e_4,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#e4 FAKE_NPC,15,15
+turbo_e_8,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#e8 FAKE_NPC,15,15
+turbo_e_16,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#e16 FAKE_NPC,15,15
+turbo_n_4,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#n4 FAKE_NPC,15,15
+turbo_n_8,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#n8 FAKE_NPC,15,15
+turbo_n_16,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#n16 FAKE_NPC,15,15
+turbo_n_1,298,167,0 duplicate(Point#tt_main) Point Give-Away Guy#n1 FAKE_NPC,15,15
+
+- script Broadcast#tt_main FAKE_NPC,{
OnEnable:
.@w$ = callfunc("F_tt");
enablenpc "Broadcast#"+.@w$;
@@ -214,15 +214,15 @@ OnInit:
disablenpc "Broadcast#"+.@w$;
end;
}
-turbo_e_4,167,3,0 duplicate(Broadcast#tt_main) Broadcast#e4 -1
-turbo_e_8,167,3,0 duplicate(Broadcast#tt_main) Broadcast#e8 -1
-turbo_e_16,167,3,0 duplicate(Broadcast#tt_main) Broadcast#e16 -1
-turbo_n_4,167,3,0 duplicate(Broadcast#tt_main) Broadcast#n4 -1
-turbo_n_8,167,3,0 duplicate(Broadcast#tt_main) Broadcast#n8 -1
-turbo_n_16,167,3,0 duplicate(Broadcast#tt_main) Broadcast#n16 -1
-turbo_n_1,167,3,0 duplicate(Broadcast#tt_main) Broadcast#n1 -1
-
-- script Master#tt_main -1,{
+turbo_e_4,167,3,0 duplicate(Broadcast#tt_main) Broadcast#e4 FAKE_NPC
+turbo_e_8,167,3,0 duplicate(Broadcast#tt_main) Broadcast#e8 FAKE_NPC
+turbo_e_16,167,3,0 duplicate(Broadcast#tt_main) Broadcast#e16 FAKE_NPC
+turbo_n_4,167,3,0 duplicate(Broadcast#tt_main) Broadcast#n4 FAKE_NPC
+turbo_n_8,167,3,0 duplicate(Broadcast#tt_main) Broadcast#n8 FAKE_NPC
+turbo_n_16,167,3,0 duplicate(Broadcast#tt_main) Broadcast#n16 FAKE_NPC
+turbo_n_1,167,3,0 duplicate(Broadcast#tt_main) Broadcast#n1 FAKE_NPC
+
+- script Master#tt_main FAKE_NPC,{
function RName;
OnEnable:
.@w$ = callfunc("F_tt");
@@ -425,35 +425,35 @@ OnInit:
return .@rn$;
}
}
-turbo_e_4,167,3,0 duplicate(Master#tt_main) Master#e4 -1
-turbo_e_8,167,3,0 duplicate(Master#tt_main) Master#e8 -1
-turbo_e_16,167,3,0 duplicate(Master#tt_main) Master#e16 -1
-turbo_n_4,167,3,0 duplicate(Master#tt_main) Master#n4 -1
-turbo_n_8,167,3,0 duplicate(Master#tt_main) Master#n8 -1
-turbo_n_8,167,3,0 duplicate(Master#tt_main) Master#n16 -1
-turbo_n_1,167,3,0 duplicate(Master#tt_main) Master#n1 -1
-
-- script NoUnfair#tt_main -1,{
+turbo_e_4,167,3,0 duplicate(Master#tt_main) Master#e4 FAKE_NPC
+turbo_e_8,167,3,0 duplicate(Master#tt_main) Master#e8 FAKE_NPC
+turbo_e_16,167,3,0 duplicate(Master#tt_main) Master#e16 FAKE_NPC
+turbo_n_4,167,3,0 duplicate(Master#tt_main) Master#n4 FAKE_NPC
+turbo_n_8,167,3,0 duplicate(Master#tt_main) Master#n8 FAKE_NPC
+turbo_n_8,167,3,0 duplicate(Master#tt_main) Master#n16 FAKE_NPC
+turbo_n_1,167,3,0 duplicate(Master#tt_main) Master#n1 FAKE_NPC
+
+- script NoUnfair#tt_main FAKE_NPC,{
OnTouch:
warp strnpcinfo(4),59,364;
end;
}
-turbo_e_4,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#e4-1 -1,0,31
-turbo_e_4,68,379,5 duplicate(NoUnfair#tt_main) No_Unfair_Start#e4-2 -1,5,31
-turbo_e_8,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#e8-1 -1,0,31
-turbo_e_8,68,379,5 duplicate(NoUnfair#tt_main) No_Unfair_Start#e8-2 -1,5,31
-turbo_e_16,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#e16-1 -1,0,31
-turbo_e_16,68,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#e16-2 -1,5,31
-turbo_n_4,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#n4-1 -1,0,31
-turbo_n_4,68,379,5 duplicate(NoUnfair#tt_main) No_Unfair_Start#n4-2 -1,5,31
-turbo_n_8,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#n8-1 -1,0,31
-turbo_n_8,68,379,5 duplicate(NoUnfair#tt_main) No_Unfair_Start#n8-2 -1,5,31
-turbo_n_16,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#n16-1 -1,0,31
-turbo_n_16,68,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#n16-2 -1,5,31
-turbo_n_1,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#n1-1 -1,0,31
-turbo_n_1,68,379,5 duplicate(NoUnfair#tt_main) No_Unfair_Start#n1-2 -1,5,31
-
-- script LogTrap#tt_main -1,{
+turbo_e_4,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#e4-1 FAKE_NPC,0,31
+turbo_e_4,68,379,5 duplicate(NoUnfair#tt_main) No_Unfair_Start#e4-2 FAKE_NPC,5,31
+turbo_e_8,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#e8-1 FAKE_NPC,0,31
+turbo_e_8,68,379,5 duplicate(NoUnfair#tt_main) No_Unfair_Start#e8-2 FAKE_NPC,5,31
+turbo_e_16,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#e16-1 FAKE_NPC,0,31
+turbo_e_16,68,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#e16-2 FAKE_NPC,5,31
+turbo_n_4,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#n4-1 FAKE_NPC,0,31
+turbo_n_4,68,379,5 duplicate(NoUnfair#tt_main) No_Unfair_Start#n4-2 FAKE_NPC,5,31
+turbo_n_8,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#n8-1 FAKE_NPC,0,31
+turbo_n_8,68,379,5 duplicate(NoUnfair#tt_main) No_Unfair_Start#n8-2 FAKE_NPC,5,31
+turbo_n_16,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#n16-1 FAKE_NPC,0,31
+turbo_n_16,68,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#n16-2 FAKE_NPC,5,31
+turbo_n_1,62,379,0 duplicate(NoUnfair#tt_main) No_Unfair_Start#n1-1 FAKE_NPC,0,31
+turbo_n_1,68,379,5 duplicate(NoUnfair#tt_main) No_Unfair_Start#n1-2 FAKE_NPC,5,31
+
+- script LogTrap#tt_main FAKE_NPC,{
OnTouch:
switch (rand(1,3)) {
case 1: warp strnpcinfo(4),72,372; end;
@@ -461,554 +461,554 @@ OnTouch:
case 3: warp strnpcinfo(4),72,357; end;
}
}
-turbo_e_4,118,377,0 duplicate(LogTrap#tt_main) trap_a#e4-1 -1,44,1
-turbo_e_4,77,375,0 duplicate(LogTrap#tt_main) trap_a#e4-2 -1,3,1
-turbo_e_4,82,375,0 duplicate(LogTrap#tt_main) trap_a#e4-3 -1,1,1
-turbo_e_4,82,372,0 duplicate(LogTrap#tt_main) trap_a#e4-4 -1,0,2
-turbo_e_4,83,372,0 duplicate(LogTrap#tt_main) trap_a#e4-5 -1,0,2
-turbo_e_4,97,374,0 duplicate(LogTrap#tt_main) trap_a#e4-6 -1,1,2
-turbo_e_4,98,374,0 duplicate(LogTrap#tt_main) trap_a#e4-7 -1,1,2
-turbo_e_4,122,372,0 duplicate(LogTrap#tt_main) trap_a#e4-8 -1,2,4
-turbo_e_4,125,374,0 duplicate(LogTrap#tt_main) trap_a#e4-9 -1,0,4
-turbo_e_4,132,374,0 duplicate(LogTrap#tt_main) trap_a#e4-10 -1,7,2
-turbo_e_4,156,374,0 duplicate(LogTrap#tt_main) trap_a#e4-11 -1,6,2
-turbo_e_4,163,375,0 duplicate(LogTrap#tt_main) trap_a#e4-12 -1,0,3
-turbo_e_4,164,377,0 duplicate(LogTrap#tt_main) trap_a#e4-13 -1,1,1
-turbo_e_4,76,369,0 duplicate(LogTrap#tt_main) trap_b#e4-1 -1,2,2
-turbo_e_4,79,369,0 duplicate(LogTrap#tt_main) trap_b#e4-2 -1,0,2
-turbo_e_4,77,366,0 duplicate(LogTrap#tt_main) trap_b#e4-3 -1,3,0
-turbo_e_4,85,366,0 duplicate(LogTrap#tt_main) trap_b#e4-4 -1,5,1
-turbo_e_4,87,363,0 duplicate(LogTrap#tt_main) trap_b#e4-5 -1,2,1
-turbo_e_4,88,368,0 duplicate(LogTrap#tt_main) trap_b#e4-6 -1,2,5
-turbo_e_4,92,370,0 duplicate(LogTrap#tt_main) trap_b#e4-7 -1,1,3
-turbo_e_4,98,368,0 duplicate(LogTrap#tt_main) trap_b#e4-8 -1,4,1
-turbo_e_4,109,371,0 duplicate(LogTrap#tt_main) trap_b#e4-9 -1,7,2
-turbo_e_4,110,368,0 duplicate(LogTrap#tt_main) trap_b#e4-10 -1,7,0
-turbo_e_4,113,366,0 duplicate(LogTrap#tt_main) trap_b#e4-11 -1,3,2
-turbo_e_4,117,368,0 duplicate(LogTrap#tt_main) trap_b#e4-12 -1,0,5
-turbo_e_4,123,364,0 duplicate(LogTrap#tt_main) trap_b#e4-13 -1,6,1
-turbo_e_4,136,368,0 duplicate(LogTrap#tt_main) trap_b#e4-14 -1,8,1
-turbo_e_4,136,366,0 duplicate(LogTrap#tt_main) trap_b#e4-15 -1,8,0
-turbo_e_4,144,370,0 duplicate(LogTrap#tt_main) trap_b#e4-16 -1,2,3
-turbo_e_4,147,370,0 duplicate(LogTrap#tt_main) trap_b#e4-17 -1,0,3
-turbo_e_4,155,369,0 duplicate(LogTrap#tt_main) trap_b#e4-18 -1,7,0
-turbo_e_4,155,368,0 duplicate(LogTrap#tt_main) trap_b#e4-19 -1,7,0
-turbo_e_4,151,367,0 duplicate(LogTrap#tt_main) trap_b#e4-20 -1,3,0
-turbo_e_4,153,366,0 duplicate(LogTrap#tt_main) trap_b#e4-21 -1,1,0
-turbo_e_4,155,367,0 duplicate(LogTrap#tt_main) trap_b#e4-22 -1,0,1
-turbo_e_4,78,362,0 duplicate(LogTrap#tt_main) trap_c#e4-1 -1,4,1
-turbo_e_4,78,359,0 duplicate(LogTrap#tt_main) trap_c#e4-2 -1,4,1
-turbo_e_4,83,362,0 duplicate(LogTrap#tt_main) trap_c#e4-3 -1,0,1
-turbo_e_4,88,359,0 duplicate(LogTrap#tt_main) trap_c#e4-4 -1,5,1
-turbo_e_4,89,357,0 duplicate(LogTrap#tt_main) trap_c#e4-5 -1,1,1
-turbo_e_4,92,390,0 duplicate(LogTrap#tt_main) trap_c#e4-6 -1,1,1
-turbo_e_4,92,357,0 duplicate(LogTrap#tt_main) trap_c#e4-7 -1,1,1
-turbo_e_4,98,364,0 duplicate(LogTrap#tt_main) trap_c#e4-8 -1,6,1
-turbo_e_4,98,362,0 duplicate(LogTrap#tt_main) trap_c#e4-9 -1,6,0
-turbo_e_4,106,364,0 duplicate(LogTrap#tt_main) trap_c#e4-10 -1,2,2
-turbo_e_4,107,360,0 duplicate(LogTrap#tt_main) trap_c#e4-11 -1,1,2
-turbo_e_4,109,360,0 duplicate(LogTrap#tt_main) trap_c#e4-12 -1,0,2
-turbo_e_4,112,361,0 duplicate(LogTrap#tt_main) trap_c#e4-13 -1,3,1
-turbo_e_4,116,359,0 duplicate(LogTrap#tt_main) trap_c#e4-14 -1,0,2
-turbo_e_4,117,359,0 duplicate(LogTrap#tt_main) trap_c#e4-15 -1,0,2
-turbo_e_4,116,356,0 duplicate(LogTrap#tt_main) trap_c#e4-16 -1,0,2
-turbo_e_4,117,356,0 duplicate(LogTrap#tt_main) trap_c#e4-17 -1,0,2
-turbo_e_4,129,360,0 duplicate(LogTrap#tt_main) trap_c#e4-18 -1,12,1
-turbo_e_4,129,358,0 duplicate(LogTrap#tt_main) trap_c#e4-19 -1,12,0
-turbo_e_4,132,357,0 duplicate(LogTrap#tt_main) trap_c#e4-20 -1,2,1
-turbo_e_4,137,357,0 duplicate(LogTrap#tt_main) trap_c#e4-21 -1,2,1
-turbo_e_4,147,363,0 duplicate(LogTrap#tt_main) trap_c#e4-22 -1,16,1
-turbo_e_4,149,365,0 duplicate(LogTrap#tt_main) trap_c#e4-23 -1,1,0
-turbo_e_4,158,362,0 duplicate(LogTrap#tt_main) trap_c#e4-24 -1,1,4
-turbo_e_4,154,360,0 duplicate(LogTrap#tt_main) trap_c#e4-25 -1,2,2
-turbo_e_4,161,360,0 duplicate(LogTrap#tt_main) trap_c#e4-26 -1,1,2
-turbo_e_4,161,365,0 duplicate(LogTrap#tt_main) trap_c#e4-27 -1,1,0
-turbo_e_4,160,366,0 duplicate(LogTrap#tt_main) trap_c#e4-28 -1
-turbo_e_4,79,353,0 duplicate(LogTrap#tt_main) trap_d#e4-1 -1,5,2
-turbo_e_4,85,354,0 duplicate(LogTrap#tt_main) trap_d#e4-2 -1,0,1
-turbo_e_4,99,353,0 duplicate(LogTrap#tt_main) trap_d#e4-3 -1,14,0
-turbo_e_4,99,352,0 duplicate(LogTrap#tt_main) trap_d#e4-4 -1,14,0
-turbo_e_4,99,356,0 duplicate(LogTrap#tt_main) trap_d#e4-5 -1,3,3
-turbo_e_4,103,356,0 duplicate(LogTrap#tt_main) trap_d#e4-6 -1,0,3
-turbo_e_4,108,354,0 duplicate(LogTrap#tt_main) trap_d#e4-7 -1,5,1
-turbo_e_4,112,356,0 duplicate(LogTrap#tt_main) trap_d#e4-8 -1,0,1
-turbo_e_4,113,356,0 duplicate(LogTrap#tt_main) trap_d#e4-9 -1,0,1
-turbo_e_4,123,353,0 duplicate(LogTrap#tt_main) trap_d#e4-10 -1,3,2
-turbo_e_4,127,353,0 duplicate(LogTrap#tt_main) trap_d#e4-11 -1,0,2
-turbo_e_4,145,352,0 duplicate(LogTrap#tt_main) trap_d#e4-12 -1,17,1
-turbo_e_4,152,354,0 duplicate(LogTrap#tt_main) trap_d#e4-13 -1,10,1
-turbo_e_4,145,357,0 duplicate(LogTrap#tt_main) trap_d#e4-14 -1,1,2
-turbo_e_4,148,357,0 duplicate(LogTrap#tt_main) trap_d#e4-15 -1,1,2
-turbo_e_8,118,377,0 duplicate(LogTrap#tt_main) trap_a#e8-1 -1,44,1
-turbo_e_8,77,375,0 duplicate(LogTrap#tt_main) trap_a#e8-2 -1,3,1
-turbo_e_8,82,375,0 duplicate(LogTrap#tt_main) trap_a#e8-3 -1,1,1
-turbo_e_8,82,372,0 duplicate(LogTrap#tt_main) trap_a#e8-4 -1,0,2
-turbo_e_8,83,372,0 duplicate(LogTrap#tt_main) trap_a#e8-5 -1,0,2
-turbo_e_8,97,374,0 duplicate(LogTrap#tt_main) trap_a#e8-6 -1,1,2
-turbo_e_8,98,374,0 duplicate(LogTrap#tt_main) trap_a#e8-7 -1,1,2
-turbo_e_8,122,372,0 duplicate(LogTrap#tt_main) trap_a#e8-8 -1,2,4
-turbo_e_8,125,374,0 duplicate(LogTrap#tt_main) trap_a#e8-9 -1,0,4
-turbo_e_8,132,374,0 duplicate(LogTrap#tt_main) trap_a#e8-10 -1,7,2
-turbo_e_8,156,374,0 duplicate(LogTrap#tt_main) trap_a#e8-11 -1,6,2
-turbo_e_8,163,375,0 duplicate(LogTrap#tt_main) trap_a#e8-12 -1,0,3
-turbo_e_8,164,377,0 duplicate(LogTrap#tt_main) trap_a#e8-13 -1,1,1
-turbo_e_8,76,369,0 duplicate(LogTrap#tt_main) trap_b#e8-1 -1,2,2
-turbo_e_8,79,369,0 duplicate(LogTrap#tt_main) trap_b#e8-2 -1,0,2
-turbo_e_8,77,366,0 duplicate(LogTrap#tt_main) trap_b#e8-3 -1,3,0
-turbo_e_8,85,366,0 duplicate(LogTrap#tt_main) trap_b#e8-4 -1,5,1
-turbo_e_8,87,363,0 duplicate(LogTrap#tt_main) trap_b#e8-5 -1,2,1
-turbo_e_8,88,368,0 duplicate(LogTrap#tt_main) trap_b#e8-6 -1,2,5
-turbo_e_8,92,370,0 duplicate(LogTrap#tt_main) trap_b#e8-7 -1,1,3
-turbo_e_8,98,368,0 duplicate(LogTrap#tt_main) trap_b#e8-8 -1,4,1
-turbo_e_8,109,371,0 duplicate(LogTrap#tt_main) trap_b#e8-9 -1,7,2
-turbo_e_8,110,368,0 duplicate(LogTrap#tt_main) trap_b#e8-10 -1,7,0
-turbo_e_8,113,366,0 duplicate(LogTrap#tt_main) trap_b#e8-11 -1,3,2
-turbo_e_8,117,368,0 duplicate(LogTrap#tt_main) trap_b#e8-12 -1,0,5
-turbo_e_8,123,364,0 duplicate(LogTrap#tt_main) trap_b#e8-13 -1,6,1
-turbo_e_8,136,368,0 duplicate(LogTrap#tt_main) trap_b#e8-14 -1,8,1
-turbo_e_8,136,366,0 duplicate(LogTrap#tt_main) trap_b#e8-15 -1,8,0
-turbo_e_8,144,370,0 duplicate(LogTrap#tt_main) trap_b#e8-16 -1,2,3
-turbo_e_8,147,370,0 duplicate(LogTrap#tt_main) trap_b#e8-17 -1,0,3
-turbo_e_8,155,369,0 duplicate(LogTrap#tt_main) trap_b#e8-18 -1,7,0
-turbo_e_8,155,368,0 duplicate(LogTrap#tt_main) trap_b#e8-19 -1,7,0
-turbo_e_8,151,367,0 duplicate(LogTrap#tt_main) trap_b#e8-20 -1,3,0
-turbo_e_8,153,366,0 duplicate(LogTrap#tt_main) trap_b#e8-21 -1,1,0
-turbo_e_8,155,367,0 duplicate(LogTrap#tt_main) trap_b#e8-22 -1,0,1
-turbo_e_8,78,362,0 duplicate(LogTrap#tt_main) trap_c#e8-1 -1,4,1
-turbo_e_8,78,359,0 duplicate(LogTrap#tt_main) trap_c#e8-2 -1,4,1
-turbo_e_8,83,362,0 duplicate(LogTrap#tt_main) trap_c#e8-3 -1,0,1
-turbo_e_8,88,359,0 duplicate(LogTrap#tt_main) trap_c#e8-4 -1,5,1
-turbo_e_8,89,357,0 duplicate(LogTrap#tt_main) trap_c#e8-5 -1,1,1
-turbo_e_8,92,390,0 duplicate(LogTrap#tt_main) trap_c#e8-6 -1,1,1
-turbo_e_8,92,357,0 duplicate(LogTrap#tt_main) trap_c#e8-7 -1,1,1
-turbo_e_8,98,364,0 duplicate(LogTrap#tt_main) trap_c#e8-8 -1,6,1
-turbo_e_8,98,362,0 duplicate(LogTrap#tt_main) trap_c#e8-9 -1,6,0
-turbo_e_8,106,364,0 duplicate(LogTrap#tt_main) trap_c#e8-10 -1,2,2
-turbo_e_8,107,360,0 duplicate(LogTrap#tt_main) trap_c#e8-11 -1,1,2
-turbo_e_8,109,360,0 duplicate(LogTrap#tt_main) trap_c#e8-12 -1,0,2
-turbo_e_8,112,361,0 duplicate(LogTrap#tt_main) trap_c#e8-13 -1,3,1
-turbo_e_8,116,359,0 duplicate(LogTrap#tt_main) trap_c#e8-14 -1,0,2
-turbo_e_8,117,359,0 duplicate(LogTrap#tt_main) trap_c#e8-15 -1,0,2
-turbo_e_8,116,356,0 duplicate(LogTrap#tt_main) trap_c#e8-16 -1,0,2
-turbo_e_8,117,356,0 duplicate(LogTrap#tt_main) trap_c#e8-17 -1,0,2
-turbo_e_8,129,360,0 duplicate(LogTrap#tt_main) trap_c#e8-18 -1,12,1
-turbo_e_8,129,358,0 duplicate(LogTrap#tt_main) trap_c#e8-19 -1,12,0
-turbo_e_8,132,357,0 duplicate(LogTrap#tt_main) trap_c#e8-20 -1,2,1
-turbo_e_8,137,357,0 duplicate(LogTrap#tt_main) trap_c#e8-21 -1,2,1
-turbo_e_8,147,363,0 duplicate(LogTrap#tt_main) trap_c#e8-22 -1,16,1
-turbo_e_8,149,365,0 duplicate(LogTrap#tt_main) trap_c#e8-23 -1,1,0
-turbo_e_8,158,362,0 duplicate(LogTrap#tt_main) trap_c#e8-24 -1,1,4
-turbo_e_8,154,360,0 duplicate(LogTrap#tt_main) trap_c#e8-25 -1,2,2
-turbo_e_8,161,360,0 duplicate(LogTrap#tt_main) trap_c#e8-26 -1,1,2
-turbo_e_8,161,365,0 duplicate(LogTrap#tt_main) trap_c#e8-27 -1,1,0
-turbo_e_8,160,366,0 duplicate(LogTrap#tt_main) trap_c#e8-28 -1
-turbo_e_8,79,353,0 duplicate(LogTrap#tt_main) trap_d#e8-1 -1,5,2
-turbo_e_8,85,354,0 duplicate(LogTrap#tt_main) trap_d#e8-2 -1,0,1
-turbo_e_8,99,353,0 duplicate(LogTrap#tt_main) trap_d#e8-3 -1,14,0
-turbo_e_8,99,352,0 duplicate(LogTrap#tt_main) trap_d#e8-4 -1,14,0
-turbo_e_8,99,356,0 duplicate(LogTrap#tt_main) trap_d#e8-5 -1,3,3
-turbo_e_8,103,356,0 duplicate(LogTrap#tt_main) trap_d#e8-6 -1,0,3
-turbo_e_8,108,354,0 duplicate(LogTrap#tt_main) trap_d#e8-7 -1,5,1
-turbo_e_8,112,356,0 duplicate(LogTrap#tt_main) trap_d#e8-8 -1,0,1
-turbo_e_8,113,356,0 duplicate(LogTrap#tt_main) trap_d#e8-9 -1,0,1
-turbo_e_8,123,353,0 duplicate(LogTrap#tt_main) trap_d#e8-10 -1,3,2
-turbo_e_8,127,353,0 duplicate(LogTrap#tt_main) trap_d#e8-11 -1,0,2
-turbo_e_8,145,352,0 duplicate(LogTrap#tt_main) trap_d#e8-12 -1,17,1
-turbo_e_8,152,354,0 duplicate(LogTrap#tt_main) trap_d#e8-13 -1,10,1
-turbo_e_8,145,357,0 duplicate(LogTrap#tt_main) trap_d#e8-14 -1,1,2
-turbo_e_8,148,357,0 duplicate(LogTrap#tt_main) trap_d#e8-15 -1,1,2
-turbo_e_16,118,377,0 duplicate(LogTrap#tt_main) trap_a#e16-1 -1,44,1
-turbo_e_16,77,375,0 duplicate(LogTrap#tt_main) trap_a#e16-2 -1,3,1
-turbo_e_16,82,375,0 duplicate(LogTrap#tt_main) trap_a#e16-3 -1,1,1
-turbo_e_16,82,372,0 duplicate(LogTrap#tt_main) trap_a#e16-4 -1,0,2
-turbo_e_16,83,372,0 duplicate(LogTrap#tt_main) trap_a#e16-5 -1,0,2
-turbo_e_16,97,374,0 duplicate(LogTrap#tt_main) trap_a#e16-6 -1,1,2
-turbo_e_16,98,374,0 duplicate(LogTrap#tt_main) trap_a#e16-7 -1,1,2
-turbo_e_16,122,372,0 duplicate(LogTrap#tt_main) trap_a#e16-8 -1,2,4
-turbo_e_16,125,374,0 duplicate(LogTrap#tt_main) trap_a#e16-9 -1,0,4
-turbo_e_16,132,374,0 duplicate(LogTrap#tt_main) trap_a#e16-10 -1,7,2
-turbo_e_16,156,374,0 duplicate(LogTrap#tt_main) trap_a#e16-11 -1,6,2
-turbo_e_16,163,375,0 duplicate(LogTrap#tt_main) trap_a#e16-12 -1,0,3
-turbo_e_16,164,377,0 duplicate(LogTrap#tt_main) trap_a#e16-13 -1,1,1
-turbo_e_16,76,369,0 duplicate(LogTrap#tt_main) trap_b#e16-1 -1,2,2
-turbo_e_16,79,369,0 duplicate(LogTrap#tt_main) trap_b#e16-2 -1,0,2
-turbo_e_16,77,366,0 duplicate(LogTrap#tt_main) trap_b#e16-3 -1,3,0
-turbo_e_16,85,366,0 duplicate(LogTrap#tt_main) trap_b#e16-4 -1,5,1
-turbo_e_16,87,363,0 duplicate(LogTrap#tt_main) trap_b#e16-5 -1,2,1
-turbo_e_16,88,368,0 duplicate(LogTrap#tt_main) trap_b#e16-6 -1,2,5
-turbo_e_16,92,370,0 duplicate(LogTrap#tt_main) trap_b#e16-7 -1,1,3
-turbo_e_16,98,368,0 duplicate(LogTrap#tt_main) trap_b#e16-8 -1,4,1
-turbo_e_16,109,371,0 duplicate(LogTrap#tt_main) trap_b#e16-9 -1,7,2
-turbo_e_16,110,368,0 duplicate(LogTrap#tt_main) trap_b#e16-10 -1,7,0
-turbo_e_16,113,366,0 duplicate(LogTrap#tt_main) trap_b#e16-11 -1,3,2
-turbo_e_16,117,368,0 duplicate(LogTrap#tt_main) trap_b#e16-12 -1,0,5
-turbo_e_16,123,364,0 duplicate(LogTrap#tt_main) trap_b#e16-13 -1,6,1
-turbo_e_16,136,368,0 duplicate(LogTrap#tt_main) trap_b#e16-14 -1,8,1
-turbo_e_16,136,366,0 duplicate(LogTrap#tt_main) trap_b#e16-15 -1,8,0
-turbo_e_16,144,370,0 duplicate(LogTrap#tt_main) trap_b#e16-16 -1,2,3
-turbo_e_16,147,370,0 duplicate(LogTrap#tt_main) trap_b#e16-17 -1,0,3
-turbo_e_16,155,369,0 duplicate(LogTrap#tt_main) trap_b#e16-18 -1,7,0
-turbo_e_16,155,368,0 duplicate(LogTrap#tt_main) trap_b#e16-19 -1,7,0
-turbo_e_16,151,367,0 duplicate(LogTrap#tt_main) trap_b#e16-20 -1,3,0
-turbo_e_16,153,366,0 duplicate(LogTrap#tt_main) trap_b#e16-21 -1,1,0
-turbo_e_16,155,367,0 duplicate(LogTrap#tt_main) trap_b#e16-22 -1,0,1
-turbo_e_16,78,362,0 duplicate(LogTrap#tt_main) trap_c#e16-1 -1,4,1
-turbo_e_16,78,359,0 duplicate(LogTrap#tt_main) trap_c#e16-2 -1,4,1
-turbo_e_16,83,362,0 duplicate(LogTrap#tt_main) trap_c#e16-3 -1,0,1
-turbo_e_16,88,359,0 duplicate(LogTrap#tt_main) trap_c#e16-4 -1,5,1
-turbo_e_16,89,357,0 duplicate(LogTrap#tt_main) trap_c#e16-5 -1,1,1
-turbo_e_16,92,390,0 duplicate(LogTrap#tt_main) trap_c#e16-6 -1,1,1
-turbo_e_16,92,357,0 duplicate(LogTrap#tt_main) trap_c#e16-7 -1,1,1
-turbo_e_16,98,364,0 duplicate(LogTrap#tt_main) trap_c#e16-8 -1,6,1
-turbo_e_16,98,362,0 duplicate(LogTrap#tt_main) trap_c#e16-9 -1,6,0
-turbo_e_16,106,364,0 duplicate(LogTrap#tt_main) trap_c#e16-10 -1,2,2
-turbo_e_16,107,360,0 duplicate(LogTrap#tt_main) trap_c#e16-11 -1,1,2
-turbo_e_16,109,360,0 duplicate(LogTrap#tt_main) trap_c#e16-12 -1,0,2
-turbo_e_16,112,361,0 duplicate(LogTrap#tt_main) trap_c#e16-13 -1,3,1
-turbo_e_16,116,359,0 duplicate(LogTrap#tt_main) trap_c#e16-14 -1,0,2
-turbo_e_16,117,359,0 duplicate(LogTrap#tt_main) trap_c#e16-15 -1,0,2
-turbo_e_16,116,356,0 duplicate(LogTrap#tt_main) trap_c#e16-16 -1,0,2
-turbo_e_16,117,356,0 duplicate(LogTrap#tt_main) trap_c#e16-17 -1,0,2
-turbo_e_16,129,360,0 duplicate(LogTrap#tt_main) trap_c#e16-18 -1,12,1
-turbo_e_16,129,358,0 duplicate(LogTrap#tt_main) trap_c#e16-19 -1,12,0
-turbo_e_16,132,357,0 duplicate(LogTrap#tt_main) trap_c#e16-20 -1,2,1
-turbo_e_16,137,357,0 duplicate(LogTrap#tt_main) trap_c#e16-21 -1,2,1
-turbo_e_16,147,363,0 duplicate(LogTrap#tt_main) trap_c#e16-22 -1,16,1
-turbo_e_16,149,365,0 duplicate(LogTrap#tt_main) trap_c#e16-23 -1,1,0
-turbo_e_16,158,362,0 duplicate(LogTrap#tt_main) trap_c#e16-24 -1,1,4
-turbo_e_16,154,360,0 duplicate(LogTrap#tt_main) trap_c#e16-25 -1,2,2
-turbo_e_16,161,360,0 duplicate(LogTrap#tt_main) trap_c#e16-26 -1,1,2
-turbo_e_16,161,365,0 duplicate(LogTrap#tt_main) trap_c#e16-27 -1,1,0
-turbo_e_16,160,366,0 duplicate(LogTrap#tt_main) trap_c#e16-28 -1
-turbo_e_16,79,353,0 duplicate(LogTrap#tt_main) trap_d#e16-1 -1,5,2
-turbo_e_16,85,354,0 duplicate(LogTrap#tt_main) trap_d#e16-2 -1,0,1
-turbo_e_16,99,353,0 duplicate(LogTrap#tt_main) trap_d#e16-3 -1,14,0
-turbo_e_16,99,352,0 duplicate(LogTrap#tt_main) trap_d#e16-4 -1,14,0
-turbo_e_16,99,356,0 duplicate(LogTrap#tt_main) trap_d#e16-5 -1,3,3
-turbo_e_16,103,356,0 duplicate(LogTrap#tt_main) trap_d#e16-6 -1,0,3
-turbo_e_16,108,354,0 duplicate(LogTrap#tt_main) trap_d#e16-7 -1,5,1
-turbo_e_16,112,356,0 duplicate(LogTrap#tt_main) trap_d#e16-8 -1,0,1
-turbo_e_16,113,356,0 duplicate(LogTrap#tt_main) trap_d#e16-9 -1,0,1
-turbo_e_16,123,353,0 duplicate(LogTrap#tt_main) trap_d#e16-10 -1,3,2
-turbo_e_16,127,353,0 duplicate(LogTrap#tt_main) trap_d#e16-11 -1,0,2
-turbo_e_16,145,352,0 duplicate(LogTrap#tt_main) trap_d#e16-12 -1,17,1
-turbo_e_16,152,354,0 duplicate(LogTrap#tt_main) trap_d#e16-13 -1,10,1
-turbo_e_16,145,357,0 duplicate(LogTrap#tt_main) trap_d#e16-14 -1,1,2
-turbo_e_16,148,357,0 duplicate(LogTrap#tt_main) trap_d#e16-15 -1,1,2
-turbo_n_4,118,377,0 duplicate(LogTrap#tt_main) trap_a#n4-1 -1,44,1
-turbo_n_4,77,375,0 duplicate(LogTrap#tt_main) trap_a#n4-2 -1,3,1
-turbo_n_4,82,375,0 duplicate(LogTrap#tt_main) trap_a#n4-3 -1,1,1
-turbo_n_4,82,372,0 duplicate(LogTrap#tt_main) trap_a#n4-4 -1,0,2
-turbo_n_4,83,372,0 duplicate(LogTrap#tt_main) trap_a#n4-5 -1,0,2
-turbo_n_4,97,374,0 duplicate(LogTrap#tt_main) trap_a#n4-6 -1,1,2
-turbo_n_4,98,374,0 duplicate(LogTrap#tt_main) trap_a#n4-7 -1,1,2
-turbo_n_4,122,372,0 duplicate(LogTrap#tt_main) trap_a#n4-8 -1,2,4
-turbo_n_4,125,374,0 duplicate(LogTrap#tt_main) trap_a#n4-9 -1,0,4
-turbo_n_4,132,374,0 duplicate(LogTrap#tt_main) trap_a#n4-10 -1,7,2
-turbo_n_4,156,374,0 duplicate(LogTrap#tt_main) trap_a#n4-11 -1,6,2
-turbo_n_4,163,375,0 duplicate(LogTrap#tt_main) trap_a#n4-12 -1,0,3
-turbo_n_4,164,377,0 duplicate(LogTrap#tt_main) trap_a#n4-13 -1,1,1
-turbo_n_4,76,369,0 duplicate(LogTrap#tt_main) trap_b#n4-1 -1,2,2
-turbo_n_4,79,369,0 duplicate(LogTrap#tt_main) trap_b#n4-2 -1,0,2
-turbo_n_4,77,366,0 duplicate(LogTrap#tt_main) trap_b#n4-3 -1,3,0
-turbo_n_4,85,366,0 duplicate(LogTrap#tt_main) trap_b#n4-4 -1,5,1
-turbo_n_4,87,363,0 duplicate(LogTrap#tt_main) trap_b#n4-5 -1,2,1
-turbo_n_4,88,368,0 duplicate(LogTrap#tt_main) trap_b#n4-6 -1,2,5
-turbo_n_4,92,370,0 duplicate(LogTrap#tt_main) trap_b#n4-7 -1,1,3
-turbo_n_4,98,368,0 duplicate(LogTrap#tt_main) trap_b#n4-8 -1,4,1
-turbo_n_4,109,371,0 duplicate(LogTrap#tt_main) trap_b#n4-9 -1,7,2
-turbo_n_4,110,368,0 duplicate(LogTrap#tt_main) trap_b#n4-10 -1,7,0
-turbo_n_4,113,366,0 duplicate(LogTrap#tt_main) trap_b#n4-11 -1,3,2
-turbo_n_4,117,368,0 duplicate(LogTrap#tt_main) trap_b#n4-12 -1,0,5
-turbo_n_4,123,364,0 duplicate(LogTrap#tt_main) trap_b#n4-13 -1,6,1
-turbo_n_4,136,368,0 duplicate(LogTrap#tt_main) trap_b#n4-14 -1,8,1
-turbo_n_4,136,366,0 duplicate(LogTrap#tt_main) trap_b#n4-15 -1,8,0
-turbo_n_4,144,370,0 duplicate(LogTrap#tt_main) trap_b#n4-16 -1,2,3
-turbo_n_4,147,370,0 duplicate(LogTrap#tt_main) trap_b#n4-17 -1,0,3
-turbo_n_4,155,369,0 duplicate(LogTrap#tt_main) trap_b#n4-18 -1,7,0
-turbo_n_4,155,368,0 duplicate(LogTrap#tt_main) trap_b#n4-19 -1,7,0
-turbo_n_4,151,367,0 duplicate(LogTrap#tt_main) trap_b#n4-20 -1,3,0
-turbo_n_4,153,366,0 duplicate(LogTrap#tt_main) trap_b#n4-21 -1,1,0
-turbo_n_4,155,367,0 duplicate(LogTrap#tt_main) trap_b#n4-22 -1,0,1
-turbo_n_4,78,362,0 duplicate(LogTrap#tt_main) trap_c#n4-1 -1,4,1
-turbo_n_4,78,359,0 duplicate(LogTrap#tt_main) trap_c#n4-2 -1,4,1
-turbo_n_4,83,362,0 duplicate(LogTrap#tt_main) trap_c#n4-3 -1,0,1
-turbo_n_4,88,359,0 duplicate(LogTrap#tt_main) trap_c#n4-4 -1,5,1
-turbo_n_4,89,357,0 duplicate(LogTrap#tt_main) trap_c#n4-5 -1,1,1
-turbo_n_4,92,390,0 duplicate(LogTrap#tt_main) trap_c#n4-6 -1,1,1
-turbo_n_4,92,357,0 duplicate(LogTrap#tt_main) trap_c#n4-7 -1,1,1
-turbo_n_4,98,364,0 duplicate(LogTrap#tt_main) trap_c#n4-8 -1,6,1
-turbo_n_4,98,362,0 duplicate(LogTrap#tt_main) trap_c#n4-9 -1,6,0
-turbo_n_4,106,364,0 duplicate(LogTrap#tt_main) trap_c#n4-10 -1,2,2
-turbo_n_4,107,360,0 duplicate(LogTrap#tt_main) trap_c#n4-11 -1,1,2
-turbo_n_4,109,360,0 duplicate(LogTrap#tt_main) trap_c#n4-12 -1,0,2
-turbo_n_4,112,361,0 duplicate(LogTrap#tt_main) trap_c#n4-13 -1,3,1
-turbo_n_4,116,359,0 duplicate(LogTrap#tt_main) trap_c#n4-14 -1,0,2
-turbo_n_4,117,359,0 duplicate(LogTrap#tt_main) trap_c#n4-15 -1,0,2
-turbo_n_4,116,356,0 duplicate(LogTrap#tt_main) trap_c#n4-16 -1,0,2
-turbo_n_4,117,356,0 duplicate(LogTrap#tt_main) trap_c#n4-17 -1,0,2
-turbo_n_4,129,360,0 duplicate(LogTrap#tt_main) trap_c#n4-18 -1,12,1
-turbo_n_4,129,358,0 duplicate(LogTrap#tt_main) trap_c#n4-19 -1,12,0
-turbo_n_4,132,357,0 duplicate(LogTrap#tt_main) trap_c#n4-20 -1,2,1
-turbo_n_4,137,357,0 duplicate(LogTrap#tt_main) trap_c#n4-21 -1,2,1
-turbo_n_4,147,363,0 duplicate(LogTrap#tt_main) trap_c#n4-22 -1,16,1
-turbo_n_4,149,365,0 duplicate(LogTrap#tt_main) trap_c#n4-23 -1,1,0
-turbo_n_4,158,362,0 duplicate(LogTrap#tt_main) trap_c#n4-24 -1,1,4
-turbo_n_4,154,360,0 duplicate(LogTrap#tt_main) trap_c#n4-25 -1,2,2
-turbo_n_4,161,360,0 duplicate(LogTrap#tt_main) trap_c#n4-26 -1,1,2
-turbo_n_4,161,365,0 duplicate(LogTrap#tt_main) trap_c#n4-27 -1,1,0
-turbo_n_4,160,366,0 duplicate(LogTrap#tt_main) trap_c#n4-28 -1
-turbo_n_4,79,353,0 duplicate(LogTrap#tt_main) trap_d#n4-1 -1,5,2
-turbo_n_4,85,354,0 duplicate(LogTrap#tt_main) trap_d#n4-2 -1,0,1
-turbo_n_4,99,353,0 duplicate(LogTrap#tt_main) trap_d#n4-3 -1,14,0
-turbo_n_4,99,352,0 duplicate(LogTrap#tt_main) trap_d#n4-4 -1,14,0
-turbo_n_4,99,356,0 duplicate(LogTrap#tt_main) trap_d#n4-5 -1,3,3
-turbo_n_4,103,356,0 duplicate(LogTrap#tt_main) trap_d#n4-6 -1,0,3
-turbo_n_4,108,354,0 duplicate(LogTrap#tt_main) trap_d#n4-7 -1,5,1
-turbo_n_4,112,356,0 duplicate(LogTrap#tt_main) trap_d#n4-8 -1,0,1
-turbo_n_4,113,356,0 duplicate(LogTrap#tt_main) trap_d#n4-9 -1,0,1
-turbo_n_4,123,353,0 duplicate(LogTrap#tt_main) trap_d#n4-10 -1,3,2
-turbo_n_4,127,353,0 duplicate(LogTrap#tt_main) trap_d#n4-11 -1,0,2
-turbo_n_4,145,352,0 duplicate(LogTrap#tt_main) trap_d#n4-12 -1,17,1
-turbo_n_4,152,354,0 duplicate(LogTrap#tt_main) trap_d#n4-13 -1,10,1
-turbo_n_4,145,357,0 duplicate(LogTrap#tt_main) trap_d#n4-14 -1,1,2
-turbo_n_4,148,357,0 duplicate(LogTrap#tt_main) trap_d#n4-15 -1,1,2
-turbo_n_8,118,377,0 duplicate(LogTrap#tt_main) trap_a#n8-1 -1,44,1,
-turbo_n_8,77,375,0 duplicate(LogTrap#tt_main) trap_a#n8-2 -1,3,1
-turbo_n_8,82,375,0 duplicate(LogTrap#tt_main) trap_a#n8-3 -1,1,1
-turbo_n_8,82,372,0 duplicate(LogTrap#tt_main) trap_a#n8-4 -1,0,2
-turbo_n_8,83,372,0 duplicate(LogTrap#tt_main) trap_a#n8-5 -1,0,2
-turbo_n_8,97,374,0 duplicate(LogTrap#tt_main) trap_a#n8-6 -1,1,2
-turbo_n_8,98,374,0 duplicate(LogTrap#tt_main) trap_a#n8-7 -1,1,2
-turbo_n_8,122,372,0 duplicate(LogTrap#tt_main) trap_a#n8-8 -1,2,4
-turbo_n_8,125,374,0 duplicate(LogTrap#tt_main) trap_a#n8-9 -1,0,4
-turbo_n_8,132,374,0 duplicate(LogTrap#tt_main) trap_a#n8-10 -1,7,2
-turbo_n_8,156,374,0 duplicate(LogTrap#tt_main) trap_a#n8-11 -1,6,2
-turbo_n_8,163,375,0 duplicate(LogTrap#tt_main) trap_a#n8-12 -1,0,3
-turbo_n_8,164,377,0 duplicate(LogTrap#tt_main) trap_a#n8-13 -1,1,1
-turbo_n_8,76,369,0 duplicate(LogTrap#tt_main) trap_b#n8-1 -1,2,2
-turbo_n_8,79,369,0 duplicate(LogTrap#tt_main) trap_b#n8-2 -1,0,2
-turbo_n_8,77,366,0 duplicate(LogTrap#tt_main) trap_b#n8-3 -1,3,0
-turbo_n_8,85,366,0 duplicate(LogTrap#tt_main) trap_b#n8-4 -1,5,1
-turbo_n_8,87,363,0 duplicate(LogTrap#tt_main) trap_b#n8-5 -1,2,1
-turbo_n_8,88,368,0 duplicate(LogTrap#tt_main) trap_b#n8-6 -1,2,5
-turbo_n_8,92,370,0 duplicate(LogTrap#tt_main) trap_b#n8-7 -1,1,3
-turbo_n_8,98,368,0 duplicate(LogTrap#tt_main) trap_b#n8-8 -1,4,1
-turbo_n_8,109,371,0 duplicate(LogTrap#tt_main) trap_b#n8-9 -1,7,2
-turbo_n_8,110,368,0 duplicate(LogTrap#tt_main) trap_b#n8-10 -1,7,0
-turbo_n_8,113,366,0 duplicate(LogTrap#tt_main) trap_b#n8-11 -1,3,2
-turbo_n_8,117,368,0 duplicate(LogTrap#tt_main) trap_b#n8-12 -1,0,5
-turbo_n_8,123,364,0 duplicate(LogTrap#tt_main) trap_b#n8-13 -1,6,1
-turbo_n_8,136,368,0 duplicate(LogTrap#tt_main) trap_b#n8-14 -1,8,1
-turbo_n_8,136,366,0 duplicate(LogTrap#tt_main) trap_b#n8-15 -1,8,0
-turbo_n_8,144,370,0 duplicate(LogTrap#tt_main) trap_b#n8-16 -1,2,3
-turbo_n_8,147,370,0 duplicate(LogTrap#tt_main) trap_b#n8-17 -1,0,3
-turbo_n_8,155,369,0 duplicate(LogTrap#tt_main) trap_b#n8-18 -1,7,0
-turbo_n_8,155,368,0 duplicate(LogTrap#tt_main) trap_b#n8-19 -1,7,0
-turbo_n_8,151,367,0 duplicate(LogTrap#tt_main) trap_b#n8-20 -1,3,0
-turbo_n_8,153,366,0 duplicate(LogTrap#tt_main) trap_b#n8-21 -1,1,0
-turbo_n_8,155,367,0 duplicate(LogTrap#tt_main) trap_b#n8-22 -1,0,1
-turbo_n_8,78,362,0 duplicate(LogTrap#tt_main) trap_c#n8-1 -1,4,1
-turbo_n_8,78,359,0 duplicate(LogTrap#tt_main) trap_c#n8-2 -1,4,1
-turbo_n_8,83,362,0 duplicate(LogTrap#tt_main) trap_c#n8-3 -1,0,1
-turbo_n_8,88,359,0 duplicate(LogTrap#tt_main) trap_c#n8-4 -1,5,1
-turbo_n_8,89,357,0 duplicate(LogTrap#tt_main) trap_c#n8-5 -1,1,1
-turbo_n_8,92,390,0 duplicate(LogTrap#tt_main) trap_c#n8-6 -1,1,1
-turbo_n_8,92,357,0 duplicate(LogTrap#tt_main) trap_c#n8-7 -1,1,1
-turbo_n_8,98,364,0 duplicate(LogTrap#tt_main) trap_c#n8-8 -1,6,1
-turbo_n_8,98,362,0 duplicate(LogTrap#tt_main) trap_c#n8-9 -1,6,0
-turbo_n_8,106,364,0 duplicate(LogTrap#tt_main) trap_c#n8-10 -1,2,2
-turbo_n_8,107,360,0 duplicate(LogTrap#tt_main) trap_c#n8-11 -1,1,2
-turbo_n_8,109,360,0 duplicate(LogTrap#tt_main) trap_c#n8-12 -1,0,2
-turbo_n_8,112,361,0 duplicate(LogTrap#tt_main) trap_c#n8-13 -1,3,1
-turbo_n_8,116,359,0 duplicate(LogTrap#tt_main) trap_c#n8-14 -1,0,2
-turbo_n_8,117,359,0 duplicate(LogTrap#tt_main) trap_c#n8-15 -1,0,2
-turbo_n_8,116,356,0 duplicate(LogTrap#tt_main) trap_c#n8-16 -1,0,2
-turbo_n_8,117,356,0 duplicate(LogTrap#tt_main) trap_c#n8-17 -1,0,2
-turbo_n_8,129,360,0 duplicate(LogTrap#tt_main) trap_c#n8-18 -1,12,1
-turbo_n_8,129,358,0 duplicate(LogTrap#tt_main) trap_c#n8-19 -1,12,0
-turbo_n_8,132,357,0 duplicate(LogTrap#tt_main) trap_c#n8-20 -1,2,1
-turbo_n_8,137,357,0 duplicate(LogTrap#tt_main) trap_c#n8-21 -1,2,1
-turbo_n_8,147,363,0 duplicate(LogTrap#tt_main) trap_c#n8-22 -1,16,1
-turbo_n_8,149,365,0 duplicate(LogTrap#tt_main) trap_c#n8-23 -1,1,0
-turbo_n_8,158,362,0 duplicate(LogTrap#tt_main) trap_c#n8-24 -1,1,4
-turbo_n_8,154,360,0 duplicate(LogTrap#tt_main) trap_c#n8-25 -1,2,2
-turbo_n_8,161,360,0 duplicate(LogTrap#tt_main) trap_c#n8-26 -1,1,2
-turbo_n_8,161,365,0 duplicate(LogTrap#tt_main) trap_c#n8-27 -1,1,0
-turbo_n_8,160,366,0 duplicate(LogTrap#tt_main) trap_c#n8-28 -1
-turbo_n_8,79,353,0 duplicate(LogTrap#tt_main) trap_d#n8-1 -1,5,2
-turbo_n_8,85,354,0 duplicate(LogTrap#tt_main) trap_d#n8-2 -1,0,1
-turbo_n_8,99,353,0 duplicate(LogTrap#tt_main) trap_d#n8-3 -1,14,0
-turbo_n_8,99,352,0 duplicate(LogTrap#tt_main) trap_d#n8-4 -1,14,0
-turbo_n_8,99,356,0 duplicate(LogTrap#tt_main) trap_d#n8-5 -1,3,3
-turbo_n_8,103,356,0 duplicate(LogTrap#tt_main) trap_d#n8-6 -1,0,3
-turbo_n_8,108,354,0 duplicate(LogTrap#tt_main) trap_d#n8-7 -1,5,1
-turbo_n_8,112,356,0 duplicate(LogTrap#tt_main) trap_d#n8-8 -1,0,1
-turbo_n_8,113,356,0 duplicate(LogTrap#tt_main) trap_d#n8-9 -1,0,1
-turbo_n_8,123,353,0 duplicate(LogTrap#tt_main) trap_d#n8-10 -1,3,2
-turbo_n_8,127,353,0 duplicate(LogTrap#tt_main) trap_d#n8-11 -1,0,2
-turbo_n_8,145,352,0 duplicate(LogTrap#tt_main) trap_d#n8-12 -1,17,1
-turbo_n_8,152,354,0 duplicate(LogTrap#tt_main) trap_d#n8-13 -1,10,1
-turbo_n_8,145,357,0 duplicate(LogTrap#tt_main) trap_d#n8-14 -1,1,2
-turbo_n_8,148,357,0 duplicate(LogTrap#tt_main) trap_d#n8-15 -1,1,2
-turbo_n_16,118,377,0 duplicate(LogTrap#tt_main) trap_a#n16-1 -1,44,1
-turbo_n_16,77,375,0 duplicate(LogTrap#tt_main) trap_a#n16-2 -1,3,1
-turbo_n_16,82,375,0 duplicate(LogTrap#tt_main) trap_a#n16-3 -1,1,1
-turbo_n_16,82,372,0 duplicate(LogTrap#tt_main) trap_a#n16-4 -1,0,2
-turbo_n_16,83,372,0 duplicate(LogTrap#tt_main) trap_a#n16-5 -1,0,2
-turbo_n_16,97,374,0 duplicate(LogTrap#tt_main) trap_a#n16-6 -1,1,2
-turbo_n_16,98,374,0 duplicate(LogTrap#tt_main) trap_a#n16-7 -1,1,2
-turbo_n_16,122,372,0 duplicate(LogTrap#tt_main) trap_a#n16-8 -1,2,4
-turbo_n_16,125,374,0 duplicate(LogTrap#tt_main) trap_a#n16-9 -1,0,4
-turbo_n_16,132,374,0 duplicate(LogTrap#tt_main) trap_a#n16-10 -1,7,2
-turbo_n_16,156,374,0 duplicate(LogTrap#tt_main) trap_a#n16-11 -1,6,2
-turbo_n_16,163,375,0 duplicate(LogTrap#tt_main) trap_a#n16-12 -1,0,3
-turbo_n_16,164,377,0 duplicate(LogTrap#tt_main) trap_a#n16-13 -1,1,1
-turbo_n_16,76,369,0 duplicate(LogTrap#tt_main) trap_b#n16-1 -1,2,2
-turbo_n_16,79,369,0 duplicate(LogTrap#tt_main) trap_b#n16-2 -1,0,2
-turbo_n_16,77,366,0 duplicate(LogTrap#tt_main) trap_b#n16-3 -1,3,0
-turbo_n_16,85,366,0 duplicate(LogTrap#tt_main) trap_b#n16-4 -1,5,1
-turbo_n_16,87,363,0 duplicate(LogTrap#tt_main) trap_b#n16-5 -1,2,1
-turbo_n_16,88,368,0 duplicate(LogTrap#tt_main) trap_b#n16-6 -1,2,5
-turbo_n_16,92,370,0 duplicate(LogTrap#tt_main) trap_b#n16-7 -1,1,3
-turbo_n_16,98,368,0 duplicate(LogTrap#tt_main) trap_b#n16-8 -1,4,1
-turbo_n_16,109,371,0 duplicate(LogTrap#tt_main) trap_b#n16-9 -1,7,2
-turbo_n_16,110,368,0 duplicate(LogTrap#tt_main) trap_b#n16-10 -1,7,0
-turbo_n_16,113,366,0 duplicate(LogTrap#tt_main) trap_b#n16-11 -1,3,2
-turbo_n_16,117,368,0 duplicate(LogTrap#tt_main) trap_b#n16-12 -1,0,5
-turbo_n_16,123,364,0 duplicate(LogTrap#tt_main) trap_b#n16-13 -1,6,1
-turbo_n_16,136,368,0 duplicate(LogTrap#tt_main) trap_b#n16-14 -1,8,1
-turbo_n_16,136,366,0 duplicate(LogTrap#tt_main) trap_b#n16-15 -1,8,0
-turbo_n_16,144,370,0 duplicate(LogTrap#tt_main) trap_b#n16-16 -1,2,3
-turbo_n_16,147,370,0 duplicate(LogTrap#tt_main) trap_b#n16-17 -1,0,3
-turbo_n_16,155,369,0 duplicate(LogTrap#tt_main) trap_b#n16-18 -1,7,0
-turbo_n_16,155,368,0 duplicate(LogTrap#tt_main) trap_b#n16-19 -1,7,0
-turbo_n_16,151,367,0 duplicate(LogTrap#tt_main) trap_b#n16-20 -1,3,0
-turbo_n_16,153,366,0 duplicate(LogTrap#tt_main) trap_b#n16-21 -1,1,0
-turbo_n_16,155,367,0 duplicate(LogTrap#tt_main) trap_b#n16-22 -1,0,1
-turbo_n_16,78,362,0 duplicate(LogTrap#tt_main) trap_c#n16-1 -1,4,1
-turbo_n_16,78,359,0 duplicate(LogTrap#tt_main) trap_c#n16-2 -1,4,1
-turbo_n_16,83,362,0 duplicate(LogTrap#tt_main) trap_c#n16-3 -1,0,1
-turbo_n_16,88,359,0 duplicate(LogTrap#tt_main) trap_c#n16-4 -1,5,1
-turbo_n_16,89,357,0 duplicate(LogTrap#tt_main) trap_c#n16-5 -1,1,1
-turbo_n_16,92,390,0 duplicate(LogTrap#tt_main) trap_c#n16-6 -1,1,1
-turbo_n_16,92,357,0 duplicate(LogTrap#tt_main) trap_c#n16-7 -1,1,1
-turbo_n_16,98,364,0 duplicate(LogTrap#tt_main) trap_c#n16-8 -1,6,1
-turbo_n_16,98,362,0 duplicate(LogTrap#tt_main) trap_c#n16-9 -1,6,0
-turbo_n_16,106,364,0 duplicate(LogTrap#tt_main) trap_c#n16-10 -1,2,2
-turbo_n_16,107,360,0 duplicate(LogTrap#tt_main) trap_c#n16-11 -1,1,2
-turbo_n_16,109,360,0 duplicate(LogTrap#tt_main) trap_c#n16-12 -1,0,2
-turbo_n_16,112,361,0 duplicate(LogTrap#tt_main) trap_c#n16-13 -1,3,1
-turbo_n_16,116,359,0 duplicate(LogTrap#tt_main) trap_c#n16-14 -1,0,2
-turbo_n_16,117,359,0 duplicate(LogTrap#tt_main) trap_c#n16-15 -1,0,2
-turbo_n_16,116,356,0 duplicate(LogTrap#tt_main) trap_c#n16-16 -1,0,2
-turbo_n_16,117,356,0 duplicate(LogTrap#tt_main) trap_c#n16-17 -1,0,2
-turbo_n_16,129,360,0 duplicate(LogTrap#tt_main) trap_c#n16-18 -1,12,1
-turbo_n_16,129,358,0 duplicate(LogTrap#tt_main) trap_c#n16-19 -1,12,0
-turbo_n_16,132,357,0 duplicate(LogTrap#tt_main) trap_c#n16-20 -1,2,1
-turbo_n_16,137,357,0 duplicate(LogTrap#tt_main) trap_c#n16-21 -1,2,1
-turbo_n_16,147,363,0 duplicate(LogTrap#tt_main) trap_c#n16-22 -1,16,1
-turbo_n_16,149,365,0 duplicate(LogTrap#tt_main) trap_c#n16-23 -1,1,0
-turbo_n_16,158,362,0 duplicate(LogTrap#tt_main) trap_c#n16-24 -1,1,4
-turbo_n_16,154,360,0 duplicate(LogTrap#tt_main) trap_c#n16-25 -1,2,2
-turbo_n_16,161,360,0 duplicate(LogTrap#tt_main) trap_c#n16-26 -1,1,2
-turbo_n_16,161,365,0 duplicate(LogTrap#tt_main) trap_c#n16-27 -1,1,0
-turbo_n_16,160,366,0 duplicate(LogTrap#tt_main) trap_c#n16-28 -1
-turbo_n_16,79,353,0 duplicate(LogTrap#tt_main) trap_d#n16-1 -1,5,2
-turbo_n_16,85,354,0 duplicate(LogTrap#tt_main) trap_d#n16-2 -1,0,1
-turbo_n_16,99,353,0 duplicate(LogTrap#tt_main) trap_d#n16-3 -1,14,0
-turbo_n_16,99,352,0 duplicate(LogTrap#tt_main) trap_d#n16-4 -1,14,0
-turbo_n_16,99,356,0 duplicate(LogTrap#tt_main) trap_d#n16-5 -1,3,3
-turbo_n_16,103,356,0 duplicate(LogTrap#tt_main) trap_d#n16-6 -1,0,3
-turbo_n_16,108,354,0 duplicate(LogTrap#tt_main) trap_d#n16-7 -1,5,1
-turbo_n_16,112,356,0 duplicate(LogTrap#tt_main) trap_d#n16-8 -1,0,1
-turbo_n_16,113,356,0 duplicate(LogTrap#tt_main) trap_d#n16-9 -1,0,1
-turbo_n_16,123,353,0 duplicate(LogTrap#tt_main) trap_d#n16-10 -1,3,2
-turbo_n_16,127,353,0 duplicate(LogTrap#tt_main) trap_d#n16-11 -1,0,2
-turbo_n_16,145,352,0 duplicate(LogTrap#tt_main) trap_d#n16-12 -1,17,1
-turbo_n_16,152,354,0 duplicate(LogTrap#tt_main) trap_d#n16-13 -1,10,1
-turbo_n_16,145,357,0 duplicate(LogTrap#tt_main) trap_d#n16-14 -1,1,2
-turbo_n_16,148,357,0 duplicate(LogTrap#tt_main) trap_d#n16-15 -1,1,2
-turbo_n_1,118,377,0 duplicate(LogTrap#tt_main) trap_a#n1-1 -1,44,1,
-turbo_n_1,77,375,0 duplicate(LogTrap#tt_main) trap_a#n1-2 -1,3,1
-turbo_n_1,82,375,0 duplicate(LogTrap#tt_main) trap_a#n1-3 -1,1,1
-turbo_n_1,82,372,0 duplicate(LogTrap#tt_main) trap_a#n1-4 -1,0,2
-turbo_n_1,83,372,0 duplicate(LogTrap#tt_main) trap_a#n1-5 -1,0,2
-turbo_n_1,97,374,0 duplicate(LogTrap#tt_main) trap_a#n1-6 -1,1,2
-turbo_n_1,98,374,0 duplicate(LogTrap#tt_main) trap_a#n1-7 -1,1,2
-turbo_n_1,122,372,0 duplicate(LogTrap#tt_main) trap_a#n1-8 -1,2,4
-turbo_n_1,125,374,0 duplicate(LogTrap#tt_main) trap_a#n1-9 -1,0,4
-turbo_n_1,132,374,0 duplicate(LogTrap#tt_main) trap_a#n1-10 -1,7,2
-turbo_n_1,156,374,0 duplicate(LogTrap#tt_main) trap_a#n1-11 -1,6,2
-turbo_n_1,163,375,0 duplicate(LogTrap#tt_main) trap_a#n1-12 -1,0,3
-turbo_n_1,164,377,0 duplicate(LogTrap#tt_main) trap_a#n1-13 -1,1,1
-turbo_n_1,76,369,0 duplicate(LogTrap#tt_main) trap_b#n1-1 -1,2,2
-turbo_n_1,79,369,0 duplicate(LogTrap#tt_main) trap_b#n1-2 -1,0,2
-turbo_n_1,77,366,0 duplicate(LogTrap#tt_main) trap_b#n1-3 -1,3,0
-turbo_n_1,85,366,0 duplicate(LogTrap#tt_main) trap_b#n1-4 -1,5,1
-turbo_n_1,87,363,0 duplicate(LogTrap#tt_main) trap_b#n1-5 -1,2,1
-turbo_n_1,88,368,0 duplicate(LogTrap#tt_main) trap_b#n1-6 -1,2,5
-turbo_n_1,92,370,0 duplicate(LogTrap#tt_main) trap_b#n1-7 -1,1,3
-turbo_n_1,98,368,0 duplicate(LogTrap#tt_main) trap_b#n1-8 -1,4,1
-turbo_n_1,109,371,0 duplicate(LogTrap#tt_main) trap_b#n1-9 -1,7,2
-turbo_n_1,110,368,0 duplicate(LogTrap#tt_main) trap_b#n1-10 -1,7,0
-turbo_n_1,113,366,0 duplicate(LogTrap#tt_main) trap_b#n1-11 -1,3,2
-turbo_n_1,117,368,0 duplicate(LogTrap#tt_main) trap_b#n1-12 -1,0,5
-turbo_n_1,123,364,0 duplicate(LogTrap#tt_main) trap_b#n1-13 -1,6,1
-turbo_n_1,136,368,0 duplicate(LogTrap#tt_main) trap_b#n1-14 -1,8,1
-turbo_n_1,136,366,0 duplicate(LogTrap#tt_main) trap_b#n1-15 -1,8,0
-turbo_n_1,144,370,0 duplicate(LogTrap#tt_main) trap_b#n1-16 -1,2,3
-turbo_n_1,147,370,0 duplicate(LogTrap#tt_main) trap_b#n1-17 -1,0,3
-turbo_n_1,155,369,0 duplicate(LogTrap#tt_main) trap_b#n1-18 -1,7,0
-turbo_n_1,155,368,0 duplicate(LogTrap#tt_main) trap_b#n1-19 -1,7,0
-turbo_n_1,151,367,0 duplicate(LogTrap#tt_main) trap_b#n1-20 -1,3,0
-turbo_n_1,153,366,0 duplicate(LogTrap#tt_main) trap_b#n1-21 -1,1,0
-turbo_n_1,155,367,0 duplicate(LogTrap#tt_main) trap_b#n1-22 -1,0,1
-turbo_n_1,78,362,0 duplicate(LogTrap#tt_main) trap_c#n1-1 -1,4,1
-turbo_n_1,78,359,0 duplicate(LogTrap#tt_main) trap_c#n1-2 -1,4,1
-turbo_n_1,83,362,0 duplicate(LogTrap#tt_main) trap_c#n1-3 -1,0,1
-turbo_n_1,88,359,0 duplicate(LogTrap#tt_main) trap_c#n1-4 -1,5,1
-turbo_n_1,89,357,0 duplicate(LogTrap#tt_main) trap_c#n1-5 -1,1,1
-turbo_n_1,92,390,0 duplicate(LogTrap#tt_main) trap_c#n1-6 -1,1,1
-turbo_n_1,92,357,0 duplicate(LogTrap#tt_main) trap_c#n1-7 -1,1,1
-turbo_n_1,98,364,0 duplicate(LogTrap#tt_main) trap_c#n1-8 -1,6,1
-turbo_n_1,98,362,0 duplicate(LogTrap#tt_main) trap_c#n1-9 -1,6,0
-turbo_n_1,106,364,0 duplicate(LogTrap#tt_main) trap_c#n1-10 -1,2,2
-turbo_n_1,107,360,0 duplicate(LogTrap#tt_main) trap_c#n1-11 -1,1,2
-turbo_n_1,109,360,0 duplicate(LogTrap#tt_main) trap_c#n1-12 -1,0,2
-turbo_n_1,112,361,0 duplicate(LogTrap#tt_main) trap_c#n1-13 -1,3,1
-turbo_n_1,116,359,0 duplicate(LogTrap#tt_main) trap_c#n1-14 -1,0,2
-turbo_n_1,117,359,0 duplicate(LogTrap#tt_main) trap_c#n1-15 -1,0,2
-turbo_n_1,116,356,0 duplicate(LogTrap#tt_main) trap_c#n1-16 -1,0,2
-turbo_n_1,117,356,0 duplicate(LogTrap#tt_main) trap_c#n1-17 -1,0,2
-turbo_n_1,129,360,0 duplicate(LogTrap#tt_main) trap_c#n1-18 -1,12,1
-turbo_n_1,129,358,0 duplicate(LogTrap#tt_main) trap_c#n1-19 -1,12,0
-turbo_n_1,132,357,0 duplicate(LogTrap#tt_main) trap_c#n1-20 -1,2,1
-turbo_n_1,137,357,0 duplicate(LogTrap#tt_main) trap_c#n1-21 -1,2,1
-turbo_n_1,147,363,0 duplicate(LogTrap#tt_main) trap_c#n1-22 -1,16,1
-turbo_n_1,149,365,0 duplicate(LogTrap#tt_main) trap_c#n1-23 -1,1,0
-turbo_n_1,158,362,0 duplicate(LogTrap#tt_main) trap_c#n1-24 -1,1,4
-turbo_n_1,154,360,0 duplicate(LogTrap#tt_main) trap_c#n1-25 -1,2,2
-turbo_n_1,161,360,0 duplicate(LogTrap#tt_main) trap_c#n1-26 -1,1,2
-turbo_n_1,161,365,0 duplicate(LogTrap#tt_main) trap_c#n1-27 -1,1,0
-turbo_n_1,160,366,0 duplicate(LogTrap#tt_main) trap_c#n1-28 -1
-turbo_n_1,79,353,0 duplicate(LogTrap#tt_main) trap_d#n1-1 -1,5,2
-turbo_n_1,85,354,0 duplicate(LogTrap#tt_main) trap_d#n1-2 -1,0,1
-turbo_n_1,99,353,0 duplicate(LogTrap#tt_main) trap_d#n1-3 -1,14,0
-turbo_n_1,99,352,0 duplicate(LogTrap#tt_main) trap_d#n1-4 -1,14,0
-turbo_n_1,99,356,0 duplicate(LogTrap#tt_main) trap_d#n1-5 -1,3,3
-turbo_n_1,103,356,0 duplicate(LogTrap#tt_main) trap_d#n1-6 -1,0,3
-turbo_n_1,108,354,0 duplicate(LogTrap#tt_main) trap_d#n1-7 -1,5,1
-turbo_n_1,112,356,0 duplicate(LogTrap#tt_main) trap_d#n1-8 -1,0,1
-turbo_n_1,113,356,0 duplicate(LogTrap#tt_main) trap_d#n1-9 -1,0,1
-turbo_n_1,123,353,0 duplicate(LogTrap#tt_main) trap_d#n1-10 -1,3,2
-turbo_n_1,127,353,0 duplicate(LogTrap#tt_main) trap_d#n1-11 -1,0,2
-turbo_n_1,145,352,0 duplicate(LogTrap#tt_main) trap_d#n1-12 -1,17,1
-turbo_n_1,152,354,0 duplicate(LogTrap#tt_main) trap_d#n1-13 -1,10,1
-turbo_n_1,145,357,0 duplicate(LogTrap#tt_main) trap_d#n1-14 -1,1,2
-turbo_n_1,148,357,0 duplicate(LogTrap#tt_main) trap_d#n1-15 -1,1,2
-
-- script SandTrap#tt_main -1,{
+turbo_e_4,118,377,0 duplicate(LogTrap#tt_main) trap_a#e4-1 FAKE_NPC,44,1
+turbo_e_4,77,375,0 duplicate(LogTrap#tt_main) trap_a#e4-2 FAKE_NPC,3,1
+turbo_e_4,82,375,0 duplicate(LogTrap#tt_main) trap_a#e4-3 FAKE_NPC,1,1
+turbo_e_4,82,372,0 duplicate(LogTrap#tt_main) trap_a#e4-4 FAKE_NPC,0,2
+turbo_e_4,83,372,0 duplicate(LogTrap#tt_main) trap_a#e4-5 FAKE_NPC,0,2
+turbo_e_4,97,374,0 duplicate(LogTrap#tt_main) trap_a#e4-6 FAKE_NPC,1,2
+turbo_e_4,98,374,0 duplicate(LogTrap#tt_main) trap_a#e4-7 FAKE_NPC,1,2
+turbo_e_4,122,372,0 duplicate(LogTrap#tt_main) trap_a#e4-8 FAKE_NPC,2,4
+turbo_e_4,125,374,0 duplicate(LogTrap#tt_main) trap_a#e4-9 FAKE_NPC,0,4
+turbo_e_4,132,374,0 duplicate(LogTrap#tt_main) trap_a#e4-10 FAKE_NPC,7,2
+turbo_e_4,156,374,0 duplicate(LogTrap#tt_main) trap_a#e4-11 FAKE_NPC,6,2
+turbo_e_4,163,375,0 duplicate(LogTrap#tt_main) trap_a#e4-12 FAKE_NPC,0,3
+turbo_e_4,164,377,0 duplicate(LogTrap#tt_main) trap_a#e4-13 FAKE_NPC,1,1
+turbo_e_4,76,369,0 duplicate(LogTrap#tt_main) trap_b#e4-1 FAKE_NPC,2,2
+turbo_e_4,79,369,0 duplicate(LogTrap#tt_main) trap_b#e4-2 FAKE_NPC,0,2
+turbo_e_4,77,366,0 duplicate(LogTrap#tt_main) trap_b#e4-3 FAKE_NPC,3,0
+turbo_e_4,85,366,0 duplicate(LogTrap#tt_main) trap_b#e4-4 FAKE_NPC,5,1
+turbo_e_4,87,363,0 duplicate(LogTrap#tt_main) trap_b#e4-5 FAKE_NPC,2,1
+turbo_e_4,88,368,0 duplicate(LogTrap#tt_main) trap_b#e4-6 FAKE_NPC,2,5
+turbo_e_4,92,370,0 duplicate(LogTrap#tt_main) trap_b#e4-7 FAKE_NPC,1,3
+turbo_e_4,98,368,0 duplicate(LogTrap#tt_main) trap_b#e4-8 FAKE_NPC,4,1
+turbo_e_4,109,371,0 duplicate(LogTrap#tt_main) trap_b#e4-9 FAKE_NPC,7,2
+turbo_e_4,110,368,0 duplicate(LogTrap#tt_main) trap_b#e4-10 FAKE_NPC,7,0
+turbo_e_4,113,366,0 duplicate(LogTrap#tt_main) trap_b#e4-11 FAKE_NPC,3,2
+turbo_e_4,117,368,0 duplicate(LogTrap#tt_main) trap_b#e4-12 FAKE_NPC,0,5
+turbo_e_4,123,364,0 duplicate(LogTrap#tt_main) trap_b#e4-13 FAKE_NPC,6,1
+turbo_e_4,136,368,0 duplicate(LogTrap#tt_main) trap_b#e4-14 FAKE_NPC,8,1
+turbo_e_4,136,366,0 duplicate(LogTrap#tt_main) trap_b#e4-15 FAKE_NPC,8,0
+turbo_e_4,144,370,0 duplicate(LogTrap#tt_main) trap_b#e4-16 FAKE_NPC,2,3
+turbo_e_4,147,370,0 duplicate(LogTrap#tt_main) trap_b#e4-17 FAKE_NPC,0,3
+turbo_e_4,155,369,0 duplicate(LogTrap#tt_main) trap_b#e4-18 FAKE_NPC,7,0
+turbo_e_4,155,368,0 duplicate(LogTrap#tt_main) trap_b#e4-19 FAKE_NPC,7,0
+turbo_e_4,151,367,0 duplicate(LogTrap#tt_main) trap_b#e4-20 FAKE_NPC,3,0
+turbo_e_4,153,366,0 duplicate(LogTrap#tt_main) trap_b#e4-21 FAKE_NPC,1,0
+turbo_e_4,155,367,0 duplicate(LogTrap#tt_main) trap_b#e4-22 FAKE_NPC,0,1
+turbo_e_4,78,362,0 duplicate(LogTrap#tt_main) trap_c#e4-1 FAKE_NPC,4,1
+turbo_e_4,78,359,0 duplicate(LogTrap#tt_main) trap_c#e4-2 FAKE_NPC,4,1
+turbo_e_4,83,362,0 duplicate(LogTrap#tt_main) trap_c#e4-3 FAKE_NPC,0,1
+turbo_e_4,88,359,0 duplicate(LogTrap#tt_main) trap_c#e4-4 FAKE_NPC,5,1
+turbo_e_4,89,357,0 duplicate(LogTrap#tt_main) trap_c#e4-5 FAKE_NPC,1,1
+turbo_e_4,92,390,0 duplicate(LogTrap#tt_main) trap_c#e4-6 FAKE_NPC,1,1
+turbo_e_4,92,357,0 duplicate(LogTrap#tt_main) trap_c#e4-7 FAKE_NPC,1,1
+turbo_e_4,98,364,0 duplicate(LogTrap#tt_main) trap_c#e4-8 FAKE_NPC,6,1
+turbo_e_4,98,362,0 duplicate(LogTrap#tt_main) trap_c#e4-9 FAKE_NPC,6,0
+turbo_e_4,106,364,0 duplicate(LogTrap#tt_main) trap_c#e4-10 FAKE_NPC,2,2
+turbo_e_4,107,360,0 duplicate(LogTrap#tt_main) trap_c#e4-11 FAKE_NPC,1,2
+turbo_e_4,109,360,0 duplicate(LogTrap#tt_main) trap_c#e4-12 FAKE_NPC,0,2
+turbo_e_4,112,361,0 duplicate(LogTrap#tt_main) trap_c#e4-13 FAKE_NPC,3,1
+turbo_e_4,116,359,0 duplicate(LogTrap#tt_main) trap_c#e4-14 FAKE_NPC,0,2
+turbo_e_4,117,359,0 duplicate(LogTrap#tt_main) trap_c#e4-15 FAKE_NPC,0,2
+turbo_e_4,116,356,0 duplicate(LogTrap#tt_main) trap_c#e4-16 FAKE_NPC,0,2
+turbo_e_4,117,356,0 duplicate(LogTrap#tt_main) trap_c#e4-17 FAKE_NPC,0,2
+turbo_e_4,129,360,0 duplicate(LogTrap#tt_main) trap_c#e4-18 FAKE_NPC,12,1
+turbo_e_4,129,358,0 duplicate(LogTrap#tt_main) trap_c#e4-19 FAKE_NPC,12,0
+turbo_e_4,132,357,0 duplicate(LogTrap#tt_main) trap_c#e4-20 FAKE_NPC,2,1
+turbo_e_4,137,357,0 duplicate(LogTrap#tt_main) trap_c#e4-21 FAKE_NPC,2,1
+turbo_e_4,147,363,0 duplicate(LogTrap#tt_main) trap_c#e4-22 FAKE_NPC,16,1
+turbo_e_4,149,365,0 duplicate(LogTrap#tt_main) trap_c#e4-23 FAKE_NPC,1,0
+turbo_e_4,158,362,0 duplicate(LogTrap#tt_main) trap_c#e4-24 FAKE_NPC,1,4
+turbo_e_4,154,360,0 duplicate(LogTrap#tt_main) trap_c#e4-25 FAKE_NPC,2,2
+turbo_e_4,161,360,0 duplicate(LogTrap#tt_main) trap_c#e4-26 FAKE_NPC,1,2
+turbo_e_4,161,365,0 duplicate(LogTrap#tt_main) trap_c#e4-27 FAKE_NPC,1,0
+turbo_e_4,160,366,0 duplicate(LogTrap#tt_main) trap_c#e4-28 FAKE_NPC
+turbo_e_4,79,353,0 duplicate(LogTrap#tt_main) trap_d#e4-1 FAKE_NPC,5,2
+turbo_e_4,85,354,0 duplicate(LogTrap#tt_main) trap_d#e4-2 FAKE_NPC,0,1
+turbo_e_4,99,353,0 duplicate(LogTrap#tt_main) trap_d#e4-3 FAKE_NPC,14,0
+turbo_e_4,99,352,0 duplicate(LogTrap#tt_main) trap_d#e4-4 FAKE_NPC,14,0
+turbo_e_4,99,356,0 duplicate(LogTrap#tt_main) trap_d#e4-5 FAKE_NPC,3,3
+turbo_e_4,103,356,0 duplicate(LogTrap#tt_main) trap_d#e4-6 FAKE_NPC,0,3
+turbo_e_4,108,354,0 duplicate(LogTrap#tt_main) trap_d#e4-7 FAKE_NPC,5,1
+turbo_e_4,112,356,0 duplicate(LogTrap#tt_main) trap_d#e4-8 FAKE_NPC,0,1
+turbo_e_4,113,356,0 duplicate(LogTrap#tt_main) trap_d#e4-9 FAKE_NPC,0,1
+turbo_e_4,123,353,0 duplicate(LogTrap#tt_main) trap_d#e4-10 FAKE_NPC,3,2
+turbo_e_4,127,353,0 duplicate(LogTrap#tt_main) trap_d#e4-11 FAKE_NPC,0,2
+turbo_e_4,145,352,0 duplicate(LogTrap#tt_main) trap_d#e4-12 FAKE_NPC,17,1
+turbo_e_4,152,354,0 duplicate(LogTrap#tt_main) trap_d#e4-13 FAKE_NPC,10,1
+turbo_e_4,145,357,0 duplicate(LogTrap#tt_main) trap_d#e4-14 FAKE_NPC,1,2
+turbo_e_4,148,357,0 duplicate(LogTrap#tt_main) trap_d#e4-15 FAKE_NPC,1,2
+turbo_e_8,118,377,0 duplicate(LogTrap#tt_main) trap_a#e8-1 FAKE_NPC,44,1
+turbo_e_8,77,375,0 duplicate(LogTrap#tt_main) trap_a#e8-2 FAKE_NPC,3,1
+turbo_e_8,82,375,0 duplicate(LogTrap#tt_main) trap_a#e8-3 FAKE_NPC,1,1
+turbo_e_8,82,372,0 duplicate(LogTrap#tt_main) trap_a#e8-4 FAKE_NPC,0,2
+turbo_e_8,83,372,0 duplicate(LogTrap#tt_main) trap_a#e8-5 FAKE_NPC,0,2
+turbo_e_8,97,374,0 duplicate(LogTrap#tt_main) trap_a#e8-6 FAKE_NPC,1,2
+turbo_e_8,98,374,0 duplicate(LogTrap#tt_main) trap_a#e8-7 FAKE_NPC,1,2
+turbo_e_8,122,372,0 duplicate(LogTrap#tt_main) trap_a#e8-8 FAKE_NPC,2,4
+turbo_e_8,125,374,0 duplicate(LogTrap#tt_main) trap_a#e8-9 FAKE_NPC,0,4
+turbo_e_8,132,374,0 duplicate(LogTrap#tt_main) trap_a#e8-10 FAKE_NPC,7,2
+turbo_e_8,156,374,0 duplicate(LogTrap#tt_main) trap_a#e8-11 FAKE_NPC,6,2
+turbo_e_8,163,375,0 duplicate(LogTrap#tt_main) trap_a#e8-12 FAKE_NPC,0,3
+turbo_e_8,164,377,0 duplicate(LogTrap#tt_main) trap_a#e8-13 FAKE_NPC,1,1
+turbo_e_8,76,369,0 duplicate(LogTrap#tt_main) trap_b#e8-1 FAKE_NPC,2,2
+turbo_e_8,79,369,0 duplicate(LogTrap#tt_main) trap_b#e8-2 FAKE_NPC,0,2
+turbo_e_8,77,366,0 duplicate(LogTrap#tt_main) trap_b#e8-3 FAKE_NPC,3,0
+turbo_e_8,85,366,0 duplicate(LogTrap#tt_main) trap_b#e8-4 FAKE_NPC,5,1
+turbo_e_8,87,363,0 duplicate(LogTrap#tt_main) trap_b#e8-5 FAKE_NPC,2,1
+turbo_e_8,88,368,0 duplicate(LogTrap#tt_main) trap_b#e8-6 FAKE_NPC,2,5
+turbo_e_8,92,370,0 duplicate(LogTrap#tt_main) trap_b#e8-7 FAKE_NPC,1,3
+turbo_e_8,98,368,0 duplicate(LogTrap#tt_main) trap_b#e8-8 FAKE_NPC,4,1
+turbo_e_8,109,371,0 duplicate(LogTrap#tt_main) trap_b#e8-9 FAKE_NPC,7,2
+turbo_e_8,110,368,0 duplicate(LogTrap#tt_main) trap_b#e8-10 FAKE_NPC,7,0
+turbo_e_8,113,366,0 duplicate(LogTrap#tt_main) trap_b#e8-11 FAKE_NPC,3,2
+turbo_e_8,117,368,0 duplicate(LogTrap#tt_main) trap_b#e8-12 FAKE_NPC,0,5
+turbo_e_8,123,364,0 duplicate(LogTrap#tt_main) trap_b#e8-13 FAKE_NPC,6,1
+turbo_e_8,136,368,0 duplicate(LogTrap#tt_main) trap_b#e8-14 FAKE_NPC,8,1
+turbo_e_8,136,366,0 duplicate(LogTrap#tt_main) trap_b#e8-15 FAKE_NPC,8,0
+turbo_e_8,144,370,0 duplicate(LogTrap#tt_main) trap_b#e8-16 FAKE_NPC,2,3
+turbo_e_8,147,370,0 duplicate(LogTrap#tt_main) trap_b#e8-17 FAKE_NPC,0,3
+turbo_e_8,155,369,0 duplicate(LogTrap#tt_main) trap_b#e8-18 FAKE_NPC,7,0
+turbo_e_8,155,368,0 duplicate(LogTrap#tt_main) trap_b#e8-19 FAKE_NPC,7,0
+turbo_e_8,151,367,0 duplicate(LogTrap#tt_main) trap_b#e8-20 FAKE_NPC,3,0
+turbo_e_8,153,366,0 duplicate(LogTrap#tt_main) trap_b#e8-21 FAKE_NPC,1,0
+turbo_e_8,155,367,0 duplicate(LogTrap#tt_main) trap_b#e8-22 FAKE_NPC,0,1
+turbo_e_8,78,362,0 duplicate(LogTrap#tt_main) trap_c#e8-1 FAKE_NPC,4,1
+turbo_e_8,78,359,0 duplicate(LogTrap#tt_main) trap_c#e8-2 FAKE_NPC,4,1
+turbo_e_8,83,362,0 duplicate(LogTrap#tt_main) trap_c#e8-3 FAKE_NPC,0,1
+turbo_e_8,88,359,0 duplicate(LogTrap#tt_main) trap_c#e8-4 FAKE_NPC,5,1
+turbo_e_8,89,357,0 duplicate(LogTrap#tt_main) trap_c#e8-5 FAKE_NPC,1,1
+turbo_e_8,92,390,0 duplicate(LogTrap#tt_main) trap_c#e8-6 FAKE_NPC,1,1
+turbo_e_8,92,357,0 duplicate(LogTrap#tt_main) trap_c#e8-7 FAKE_NPC,1,1
+turbo_e_8,98,364,0 duplicate(LogTrap#tt_main) trap_c#e8-8 FAKE_NPC,6,1
+turbo_e_8,98,362,0 duplicate(LogTrap#tt_main) trap_c#e8-9 FAKE_NPC,6,0
+turbo_e_8,106,364,0 duplicate(LogTrap#tt_main) trap_c#e8-10 FAKE_NPC,2,2
+turbo_e_8,107,360,0 duplicate(LogTrap#tt_main) trap_c#e8-11 FAKE_NPC,1,2
+turbo_e_8,109,360,0 duplicate(LogTrap#tt_main) trap_c#e8-12 FAKE_NPC,0,2
+turbo_e_8,112,361,0 duplicate(LogTrap#tt_main) trap_c#e8-13 FAKE_NPC,3,1
+turbo_e_8,116,359,0 duplicate(LogTrap#tt_main) trap_c#e8-14 FAKE_NPC,0,2
+turbo_e_8,117,359,0 duplicate(LogTrap#tt_main) trap_c#e8-15 FAKE_NPC,0,2
+turbo_e_8,116,356,0 duplicate(LogTrap#tt_main) trap_c#e8-16 FAKE_NPC,0,2
+turbo_e_8,117,356,0 duplicate(LogTrap#tt_main) trap_c#e8-17 FAKE_NPC,0,2
+turbo_e_8,129,360,0 duplicate(LogTrap#tt_main) trap_c#e8-18 FAKE_NPC,12,1
+turbo_e_8,129,358,0 duplicate(LogTrap#tt_main) trap_c#e8-19 FAKE_NPC,12,0
+turbo_e_8,132,357,0 duplicate(LogTrap#tt_main) trap_c#e8-20 FAKE_NPC,2,1
+turbo_e_8,137,357,0 duplicate(LogTrap#tt_main) trap_c#e8-21 FAKE_NPC,2,1
+turbo_e_8,147,363,0 duplicate(LogTrap#tt_main) trap_c#e8-22 FAKE_NPC,16,1
+turbo_e_8,149,365,0 duplicate(LogTrap#tt_main) trap_c#e8-23 FAKE_NPC,1,0
+turbo_e_8,158,362,0 duplicate(LogTrap#tt_main) trap_c#e8-24 FAKE_NPC,1,4
+turbo_e_8,154,360,0 duplicate(LogTrap#tt_main) trap_c#e8-25 FAKE_NPC,2,2
+turbo_e_8,161,360,0 duplicate(LogTrap#tt_main) trap_c#e8-26 FAKE_NPC,1,2
+turbo_e_8,161,365,0 duplicate(LogTrap#tt_main) trap_c#e8-27 FAKE_NPC,1,0
+turbo_e_8,160,366,0 duplicate(LogTrap#tt_main) trap_c#e8-28 FAKE_NPC
+turbo_e_8,79,353,0 duplicate(LogTrap#tt_main) trap_d#e8-1 FAKE_NPC,5,2
+turbo_e_8,85,354,0 duplicate(LogTrap#tt_main) trap_d#e8-2 FAKE_NPC,0,1
+turbo_e_8,99,353,0 duplicate(LogTrap#tt_main) trap_d#e8-3 FAKE_NPC,14,0
+turbo_e_8,99,352,0 duplicate(LogTrap#tt_main) trap_d#e8-4 FAKE_NPC,14,0
+turbo_e_8,99,356,0 duplicate(LogTrap#tt_main) trap_d#e8-5 FAKE_NPC,3,3
+turbo_e_8,103,356,0 duplicate(LogTrap#tt_main) trap_d#e8-6 FAKE_NPC,0,3
+turbo_e_8,108,354,0 duplicate(LogTrap#tt_main) trap_d#e8-7 FAKE_NPC,5,1
+turbo_e_8,112,356,0 duplicate(LogTrap#tt_main) trap_d#e8-8 FAKE_NPC,0,1
+turbo_e_8,113,356,0 duplicate(LogTrap#tt_main) trap_d#e8-9 FAKE_NPC,0,1
+turbo_e_8,123,353,0 duplicate(LogTrap#tt_main) trap_d#e8-10 FAKE_NPC,3,2
+turbo_e_8,127,353,0 duplicate(LogTrap#tt_main) trap_d#e8-11 FAKE_NPC,0,2
+turbo_e_8,145,352,0 duplicate(LogTrap#tt_main) trap_d#e8-12 FAKE_NPC,17,1
+turbo_e_8,152,354,0 duplicate(LogTrap#tt_main) trap_d#e8-13 FAKE_NPC,10,1
+turbo_e_8,145,357,0 duplicate(LogTrap#tt_main) trap_d#e8-14 FAKE_NPC,1,2
+turbo_e_8,148,357,0 duplicate(LogTrap#tt_main) trap_d#e8-15 FAKE_NPC,1,2
+turbo_e_16,118,377,0 duplicate(LogTrap#tt_main) trap_a#e16-1 FAKE_NPC,44,1
+turbo_e_16,77,375,0 duplicate(LogTrap#tt_main) trap_a#e16-2 FAKE_NPC,3,1
+turbo_e_16,82,375,0 duplicate(LogTrap#tt_main) trap_a#e16-3 FAKE_NPC,1,1
+turbo_e_16,82,372,0 duplicate(LogTrap#tt_main) trap_a#e16-4 FAKE_NPC,0,2
+turbo_e_16,83,372,0 duplicate(LogTrap#tt_main) trap_a#e16-5 FAKE_NPC,0,2
+turbo_e_16,97,374,0 duplicate(LogTrap#tt_main) trap_a#e16-6 FAKE_NPC,1,2
+turbo_e_16,98,374,0 duplicate(LogTrap#tt_main) trap_a#e16-7 FAKE_NPC,1,2
+turbo_e_16,122,372,0 duplicate(LogTrap#tt_main) trap_a#e16-8 FAKE_NPC,2,4
+turbo_e_16,125,374,0 duplicate(LogTrap#tt_main) trap_a#e16-9 FAKE_NPC,0,4
+turbo_e_16,132,374,0 duplicate(LogTrap#tt_main) trap_a#e16-10 FAKE_NPC,7,2
+turbo_e_16,156,374,0 duplicate(LogTrap#tt_main) trap_a#e16-11 FAKE_NPC,6,2
+turbo_e_16,163,375,0 duplicate(LogTrap#tt_main) trap_a#e16-12 FAKE_NPC,0,3
+turbo_e_16,164,377,0 duplicate(LogTrap#tt_main) trap_a#e16-13 FAKE_NPC,1,1
+turbo_e_16,76,369,0 duplicate(LogTrap#tt_main) trap_b#e16-1 FAKE_NPC,2,2
+turbo_e_16,79,369,0 duplicate(LogTrap#tt_main) trap_b#e16-2 FAKE_NPC,0,2
+turbo_e_16,77,366,0 duplicate(LogTrap#tt_main) trap_b#e16-3 FAKE_NPC,3,0
+turbo_e_16,85,366,0 duplicate(LogTrap#tt_main) trap_b#e16-4 FAKE_NPC,5,1
+turbo_e_16,87,363,0 duplicate(LogTrap#tt_main) trap_b#e16-5 FAKE_NPC,2,1
+turbo_e_16,88,368,0 duplicate(LogTrap#tt_main) trap_b#e16-6 FAKE_NPC,2,5
+turbo_e_16,92,370,0 duplicate(LogTrap#tt_main) trap_b#e16-7 FAKE_NPC,1,3
+turbo_e_16,98,368,0 duplicate(LogTrap#tt_main) trap_b#e16-8 FAKE_NPC,4,1
+turbo_e_16,109,371,0 duplicate(LogTrap#tt_main) trap_b#e16-9 FAKE_NPC,7,2
+turbo_e_16,110,368,0 duplicate(LogTrap#tt_main) trap_b#e16-10 FAKE_NPC,7,0
+turbo_e_16,113,366,0 duplicate(LogTrap#tt_main) trap_b#e16-11 FAKE_NPC,3,2
+turbo_e_16,117,368,0 duplicate(LogTrap#tt_main) trap_b#e16-12 FAKE_NPC,0,5
+turbo_e_16,123,364,0 duplicate(LogTrap#tt_main) trap_b#e16-13 FAKE_NPC,6,1
+turbo_e_16,136,368,0 duplicate(LogTrap#tt_main) trap_b#e16-14 FAKE_NPC,8,1
+turbo_e_16,136,366,0 duplicate(LogTrap#tt_main) trap_b#e16-15 FAKE_NPC,8,0
+turbo_e_16,144,370,0 duplicate(LogTrap#tt_main) trap_b#e16-16 FAKE_NPC,2,3
+turbo_e_16,147,370,0 duplicate(LogTrap#tt_main) trap_b#e16-17 FAKE_NPC,0,3
+turbo_e_16,155,369,0 duplicate(LogTrap#tt_main) trap_b#e16-18 FAKE_NPC,7,0
+turbo_e_16,155,368,0 duplicate(LogTrap#tt_main) trap_b#e16-19 FAKE_NPC,7,0
+turbo_e_16,151,367,0 duplicate(LogTrap#tt_main) trap_b#e16-20 FAKE_NPC,3,0
+turbo_e_16,153,366,0 duplicate(LogTrap#tt_main) trap_b#e16-21 FAKE_NPC,1,0
+turbo_e_16,155,367,0 duplicate(LogTrap#tt_main) trap_b#e16-22 FAKE_NPC,0,1
+turbo_e_16,78,362,0 duplicate(LogTrap#tt_main) trap_c#e16-1 FAKE_NPC,4,1
+turbo_e_16,78,359,0 duplicate(LogTrap#tt_main) trap_c#e16-2 FAKE_NPC,4,1
+turbo_e_16,83,362,0 duplicate(LogTrap#tt_main) trap_c#e16-3 FAKE_NPC,0,1
+turbo_e_16,88,359,0 duplicate(LogTrap#tt_main) trap_c#e16-4 FAKE_NPC,5,1
+turbo_e_16,89,357,0 duplicate(LogTrap#tt_main) trap_c#e16-5 FAKE_NPC,1,1
+turbo_e_16,92,390,0 duplicate(LogTrap#tt_main) trap_c#e16-6 FAKE_NPC,1,1
+turbo_e_16,92,357,0 duplicate(LogTrap#tt_main) trap_c#e16-7 FAKE_NPC,1,1
+turbo_e_16,98,364,0 duplicate(LogTrap#tt_main) trap_c#e16-8 FAKE_NPC,6,1
+turbo_e_16,98,362,0 duplicate(LogTrap#tt_main) trap_c#e16-9 FAKE_NPC,6,0
+turbo_e_16,106,364,0 duplicate(LogTrap#tt_main) trap_c#e16-10 FAKE_NPC,2,2
+turbo_e_16,107,360,0 duplicate(LogTrap#tt_main) trap_c#e16-11 FAKE_NPC,1,2
+turbo_e_16,109,360,0 duplicate(LogTrap#tt_main) trap_c#e16-12 FAKE_NPC,0,2
+turbo_e_16,112,361,0 duplicate(LogTrap#tt_main) trap_c#e16-13 FAKE_NPC,3,1
+turbo_e_16,116,359,0 duplicate(LogTrap#tt_main) trap_c#e16-14 FAKE_NPC,0,2
+turbo_e_16,117,359,0 duplicate(LogTrap#tt_main) trap_c#e16-15 FAKE_NPC,0,2
+turbo_e_16,116,356,0 duplicate(LogTrap#tt_main) trap_c#e16-16 FAKE_NPC,0,2
+turbo_e_16,117,356,0 duplicate(LogTrap#tt_main) trap_c#e16-17 FAKE_NPC,0,2
+turbo_e_16,129,360,0 duplicate(LogTrap#tt_main) trap_c#e16-18 FAKE_NPC,12,1
+turbo_e_16,129,358,0 duplicate(LogTrap#tt_main) trap_c#e16-19 FAKE_NPC,12,0
+turbo_e_16,132,357,0 duplicate(LogTrap#tt_main) trap_c#e16-20 FAKE_NPC,2,1
+turbo_e_16,137,357,0 duplicate(LogTrap#tt_main) trap_c#e16-21 FAKE_NPC,2,1
+turbo_e_16,147,363,0 duplicate(LogTrap#tt_main) trap_c#e16-22 FAKE_NPC,16,1
+turbo_e_16,149,365,0 duplicate(LogTrap#tt_main) trap_c#e16-23 FAKE_NPC,1,0
+turbo_e_16,158,362,0 duplicate(LogTrap#tt_main) trap_c#e16-24 FAKE_NPC,1,4
+turbo_e_16,154,360,0 duplicate(LogTrap#tt_main) trap_c#e16-25 FAKE_NPC,2,2
+turbo_e_16,161,360,0 duplicate(LogTrap#tt_main) trap_c#e16-26 FAKE_NPC,1,2
+turbo_e_16,161,365,0 duplicate(LogTrap#tt_main) trap_c#e16-27 FAKE_NPC,1,0
+turbo_e_16,160,366,0 duplicate(LogTrap#tt_main) trap_c#e16-28 FAKE_NPC
+turbo_e_16,79,353,0 duplicate(LogTrap#tt_main) trap_d#e16-1 FAKE_NPC,5,2
+turbo_e_16,85,354,0 duplicate(LogTrap#tt_main) trap_d#e16-2 FAKE_NPC,0,1
+turbo_e_16,99,353,0 duplicate(LogTrap#tt_main) trap_d#e16-3 FAKE_NPC,14,0
+turbo_e_16,99,352,0 duplicate(LogTrap#tt_main) trap_d#e16-4 FAKE_NPC,14,0
+turbo_e_16,99,356,0 duplicate(LogTrap#tt_main) trap_d#e16-5 FAKE_NPC,3,3
+turbo_e_16,103,356,0 duplicate(LogTrap#tt_main) trap_d#e16-6 FAKE_NPC,0,3
+turbo_e_16,108,354,0 duplicate(LogTrap#tt_main) trap_d#e16-7 FAKE_NPC,5,1
+turbo_e_16,112,356,0 duplicate(LogTrap#tt_main) trap_d#e16-8 FAKE_NPC,0,1
+turbo_e_16,113,356,0 duplicate(LogTrap#tt_main) trap_d#e16-9 FAKE_NPC,0,1
+turbo_e_16,123,353,0 duplicate(LogTrap#tt_main) trap_d#e16-10 FAKE_NPC,3,2
+turbo_e_16,127,353,0 duplicate(LogTrap#tt_main) trap_d#e16-11 FAKE_NPC,0,2
+turbo_e_16,145,352,0 duplicate(LogTrap#tt_main) trap_d#e16-12 FAKE_NPC,17,1
+turbo_e_16,152,354,0 duplicate(LogTrap#tt_main) trap_d#e16-13 FAKE_NPC,10,1
+turbo_e_16,145,357,0 duplicate(LogTrap#tt_main) trap_d#e16-14 FAKE_NPC,1,2
+turbo_e_16,148,357,0 duplicate(LogTrap#tt_main) trap_d#e16-15 FAKE_NPC,1,2
+turbo_n_4,118,377,0 duplicate(LogTrap#tt_main) trap_a#n4-1 FAKE_NPC,44,1
+turbo_n_4,77,375,0 duplicate(LogTrap#tt_main) trap_a#n4-2 FAKE_NPC,3,1
+turbo_n_4,82,375,0 duplicate(LogTrap#tt_main) trap_a#n4-3 FAKE_NPC,1,1
+turbo_n_4,82,372,0 duplicate(LogTrap#tt_main) trap_a#n4-4 FAKE_NPC,0,2
+turbo_n_4,83,372,0 duplicate(LogTrap#tt_main) trap_a#n4-5 FAKE_NPC,0,2
+turbo_n_4,97,374,0 duplicate(LogTrap#tt_main) trap_a#n4-6 FAKE_NPC,1,2
+turbo_n_4,98,374,0 duplicate(LogTrap#tt_main) trap_a#n4-7 FAKE_NPC,1,2
+turbo_n_4,122,372,0 duplicate(LogTrap#tt_main) trap_a#n4-8 FAKE_NPC,2,4
+turbo_n_4,125,374,0 duplicate(LogTrap#tt_main) trap_a#n4-9 FAKE_NPC,0,4
+turbo_n_4,132,374,0 duplicate(LogTrap#tt_main) trap_a#n4-10 FAKE_NPC,7,2
+turbo_n_4,156,374,0 duplicate(LogTrap#tt_main) trap_a#n4-11 FAKE_NPC,6,2
+turbo_n_4,163,375,0 duplicate(LogTrap#tt_main) trap_a#n4-12 FAKE_NPC,0,3
+turbo_n_4,164,377,0 duplicate(LogTrap#tt_main) trap_a#n4-13 FAKE_NPC,1,1
+turbo_n_4,76,369,0 duplicate(LogTrap#tt_main) trap_b#n4-1 FAKE_NPC,2,2
+turbo_n_4,79,369,0 duplicate(LogTrap#tt_main) trap_b#n4-2 FAKE_NPC,0,2
+turbo_n_4,77,366,0 duplicate(LogTrap#tt_main) trap_b#n4-3 FAKE_NPC,3,0
+turbo_n_4,85,366,0 duplicate(LogTrap#tt_main) trap_b#n4-4 FAKE_NPC,5,1
+turbo_n_4,87,363,0 duplicate(LogTrap#tt_main) trap_b#n4-5 FAKE_NPC,2,1
+turbo_n_4,88,368,0 duplicate(LogTrap#tt_main) trap_b#n4-6 FAKE_NPC,2,5
+turbo_n_4,92,370,0 duplicate(LogTrap#tt_main) trap_b#n4-7 FAKE_NPC,1,3
+turbo_n_4,98,368,0 duplicate(LogTrap#tt_main) trap_b#n4-8 FAKE_NPC,4,1
+turbo_n_4,109,371,0 duplicate(LogTrap#tt_main) trap_b#n4-9 FAKE_NPC,7,2
+turbo_n_4,110,368,0 duplicate(LogTrap#tt_main) trap_b#n4-10 FAKE_NPC,7,0
+turbo_n_4,113,366,0 duplicate(LogTrap#tt_main) trap_b#n4-11 FAKE_NPC,3,2
+turbo_n_4,117,368,0 duplicate(LogTrap#tt_main) trap_b#n4-12 FAKE_NPC,0,5
+turbo_n_4,123,364,0 duplicate(LogTrap#tt_main) trap_b#n4-13 FAKE_NPC,6,1
+turbo_n_4,136,368,0 duplicate(LogTrap#tt_main) trap_b#n4-14 FAKE_NPC,8,1
+turbo_n_4,136,366,0 duplicate(LogTrap#tt_main) trap_b#n4-15 FAKE_NPC,8,0
+turbo_n_4,144,370,0 duplicate(LogTrap#tt_main) trap_b#n4-16 FAKE_NPC,2,3
+turbo_n_4,147,370,0 duplicate(LogTrap#tt_main) trap_b#n4-17 FAKE_NPC,0,3
+turbo_n_4,155,369,0 duplicate(LogTrap#tt_main) trap_b#n4-18 FAKE_NPC,7,0
+turbo_n_4,155,368,0 duplicate(LogTrap#tt_main) trap_b#n4-19 FAKE_NPC,7,0
+turbo_n_4,151,367,0 duplicate(LogTrap#tt_main) trap_b#n4-20 FAKE_NPC,3,0
+turbo_n_4,153,366,0 duplicate(LogTrap#tt_main) trap_b#n4-21 FAKE_NPC,1,0
+turbo_n_4,155,367,0 duplicate(LogTrap#tt_main) trap_b#n4-22 FAKE_NPC,0,1
+turbo_n_4,78,362,0 duplicate(LogTrap#tt_main) trap_c#n4-1 FAKE_NPC,4,1
+turbo_n_4,78,359,0 duplicate(LogTrap#tt_main) trap_c#n4-2 FAKE_NPC,4,1
+turbo_n_4,83,362,0 duplicate(LogTrap#tt_main) trap_c#n4-3 FAKE_NPC,0,1
+turbo_n_4,88,359,0 duplicate(LogTrap#tt_main) trap_c#n4-4 FAKE_NPC,5,1
+turbo_n_4,89,357,0 duplicate(LogTrap#tt_main) trap_c#n4-5 FAKE_NPC,1,1
+turbo_n_4,92,390,0 duplicate(LogTrap#tt_main) trap_c#n4-6 FAKE_NPC,1,1
+turbo_n_4,92,357,0 duplicate(LogTrap#tt_main) trap_c#n4-7 FAKE_NPC,1,1
+turbo_n_4,98,364,0 duplicate(LogTrap#tt_main) trap_c#n4-8 FAKE_NPC,6,1
+turbo_n_4,98,362,0 duplicate(LogTrap#tt_main) trap_c#n4-9 FAKE_NPC,6,0
+turbo_n_4,106,364,0 duplicate(LogTrap#tt_main) trap_c#n4-10 FAKE_NPC,2,2
+turbo_n_4,107,360,0 duplicate(LogTrap#tt_main) trap_c#n4-11 FAKE_NPC,1,2
+turbo_n_4,109,360,0 duplicate(LogTrap#tt_main) trap_c#n4-12 FAKE_NPC,0,2
+turbo_n_4,112,361,0 duplicate(LogTrap#tt_main) trap_c#n4-13 FAKE_NPC,3,1
+turbo_n_4,116,359,0 duplicate(LogTrap#tt_main) trap_c#n4-14 FAKE_NPC,0,2
+turbo_n_4,117,359,0 duplicate(LogTrap#tt_main) trap_c#n4-15 FAKE_NPC,0,2
+turbo_n_4,116,356,0 duplicate(LogTrap#tt_main) trap_c#n4-16 FAKE_NPC,0,2
+turbo_n_4,117,356,0 duplicate(LogTrap#tt_main) trap_c#n4-17 FAKE_NPC,0,2
+turbo_n_4,129,360,0 duplicate(LogTrap#tt_main) trap_c#n4-18 FAKE_NPC,12,1
+turbo_n_4,129,358,0 duplicate(LogTrap#tt_main) trap_c#n4-19 FAKE_NPC,12,0
+turbo_n_4,132,357,0 duplicate(LogTrap#tt_main) trap_c#n4-20 FAKE_NPC,2,1
+turbo_n_4,137,357,0 duplicate(LogTrap#tt_main) trap_c#n4-21 FAKE_NPC,2,1
+turbo_n_4,147,363,0 duplicate(LogTrap#tt_main) trap_c#n4-22 FAKE_NPC,16,1
+turbo_n_4,149,365,0 duplicate(LogTrap#tt_main) trap_c#n4-23 FAKE_NPC,1,0
+turbo_n_4,158,362,0 duplicate(LogTrap#tt_main) trap_c#n4-24 FAKE_NPC,1,4
+turbo_n_4,154,360,0 duplicate(LogTrap#tt_main) trap_c#n4-25 FAKE_NPC,2,2
+turbo_n_4,161,360,0 duplicate(LogTrap#tt_main) trap_c#n4-26 FAKE_NPC,1,2
+turbo_n_4,161,365,0 duplicate(LogTrap#tt_main) trap_c#n4-27 FAKE_NPC,1,0
+turbo_n_4,160,366,0 duplicate(LogTrap#tt_main) trap_c#n4-28 FAKE_NPC
+turbo_n_4,79,353,0 duplicate(LogTrap#tt_main) trap_d#n4-1 FAKE_NPC,5,2
+turbo_n_4,85,354,0 duplicate(LogTrap#tt_main) trap_d#n4-2 FAKE_NPC,0,1
+turbo_n_4,99,353,0 duplicate(LogTrap#tt_main) trap_d#n4-3 FAKE_NPC,14,0
+turbo_n_4,99,352,0 duplicate(LogTrap#tt_main) trap_d#n4-4 FAKE_NPC,14,0
+turbo_n_4,99,356,0 duplicate(LogTrap#tt_main) trap_d#n4-5 FAKE_NPC,3,3
+turbo_n_4,103,356,0 duplicate(LogTrap#tt_main) trap_d#n4-6 FAKE_NPC,0,3
+turbo_n_4,108,354,0 duplicate(LogTrap#tt_main) trap_d#n4-7 FAKE_NPC,5,1
+turbo_n_4,112,356,0 duplicate(LogTrap#tt_main) trap_d#n4-8 FAKE_NPC,0,1
+turbo_n_4,113,356,0 duplicate(LogTrap#tt_main) trap_d#n4-9 FAKE_NPC,0,1
+turbo_n_4,123,353,0 duplicate(LogTrap#tt_main) trap_d#n4-10 FAKE_NPC,3,2
+turbo_n_4,127,353,0 duplicate(LogTrap#tt_main) trap_d#n4-11 FAKE_NPC,0,2
+turbo_n_4,145,352,0 duplicate(LogTrap#tt_main) trap_d#n4-12 FAKE_NPC,17,1
+turbo_n_4,152,354,0 duplicate(LogTrap#tt_main) trap_d#n4-13 FAKE_NPC,10,1
+turbo_n_4,145,357,0 duplicate(LogTrap#tt_main) trap_d#n4-14 FAKE_NPC,1,2
+turbo_n_4,148,357,0 duplicate(LogTrap#tt_main) trap_d#n4-15 FAKE_NPC,1,2
+turbo_n_8,118,377,0 duplicate(LogTrap#tt_main) trap_a#n8-1 FAKE_NPC,44,1
+turbo_n_8,77,375,0 duplicate(LogTrap#tt_main) trap_a#n8-2 FAKE_NPC,3,1
+turbo_n_8,82,375,0 duplicate(LogTrap#tt_main) trap_a#n8-3 FAKE_NPC,1,1
+turbo_n_8,82,372,0 duplicate(LogTrap#tt_main) trap_a#n8-4 FAKE_NPC,0,2
+turbo_n_8,83,372,0 duplicate(LogTrap#tt_main) trap_a#n8-5 FAKE_NPC,0,2
+turbo_n_8,97,374,0 duplicate(LogTrap#tt_main) trap_a#n8-6 FAKE_NPC,1,2
+turbo_n_8,98,374,0 duplicate(LogTrap#tt_main) trap_a#n8-7 FAKE_NPC,1,2
+turbo_n_8,122,372,0 duplicate(LogTrap#tt_main) trap_a#n8-8 FAKE_NPC,2,4
+turbo_n_8,125,374,0 duplicate(LogTrap#tt_main) trap_a#n8-9 FAKE_NPC,0,4
+turbo_n_8,132,374,0 duplicate(LogTrap#tt_main) trap_a#n8-10 FAKE_NPC,7,2
+turbo_n_8,156,374,0 duplicate(LogTrap#tt_main) trap_a#n8-11 FAKE_NPC,6,2
+turbo_n_8,163,375,0 duplicate(LogTrap#tt_main) trap_a#n8-12 FAKE_NPC,0,3
+turbo_n_8,164,377,0 duplicate(LogTrap#tt_main) trap_a#n8-13 FAKE_NPC,1,1
+turbo_n_8,76,369,0 duplicate(LogTrap#tt_main) trap_b#n8-1 FAKE_NPC,2,2
+turbo_n_8,79,369,0 duplicate(LogTrap#tt_main) trap_b#n8-2 FAKE_NPC,0,2
+turbo_n_8,77,366,0 duplicate(LogTrap#tt_main) trap_b#n8-3 FAKE_NPC,3,0
+turbo_n_8,85,366,0 duplicate(LogTrap#tt_main) trap_b#n8-4 FAKE_NPC,5,1
+turbo_n_8,87,363,0 duplicate(LogTrap#tt_main) trap_b#n8-5 FAKE_NPC,2,1
+turbo_n_8,88,368,0 duplicate(LogTrap#tt_main) trap_b#n8-6 FAKE_NPC,2,5
+turbo_n_8,92,370,0 duplicate(LogTrap#tt_main) trap_b#n8-7 FAKE_NPC,1,3
+turbo_n_8,98,368,0 duplicate(LogTrap#tt_main) trap_b#n8-8 FAKE_NPC,4,1
+turbo_n_8,109,371,0 duplicate(LogTrap#tt_main) trap_b#n8-9 FAKE_NPC,7,2
+turbo_n_8,110,368,0 duplicate(LogTrap#tt_main) trap_b#n8-10 FAKE_NPC,7,0
+turbo_n_8,113,366,0 duplicate(LogTrap#tt_main) trap_b#n8-11 FAKE_NPC,3,2
+turbo_n_8,117,368,0 duplicate(LogTrap#tt_main) trap_b#n8-12 FAKE_NPC,0,5
+turbo_n_8,123,364,0 duplicate(LogTrap#tt_main) trap_b#n8-13 FAKE_NPC,6,1
+turbo_n_8,136,368,0 duplicate(LogTrap#tt_main) trap_b#n8-14 FAKE_NPC,8,1
+turbo_n_8,136,366,0 duplicate(LogTrap#tt_main) trap_b#n8-15 FAKE_NPC,8,0
+turbo_n_8,144,370,0 duplicate(LogTrap#tt_main) trap_b#n8-16 FAKE_NPC,2,3
+turbo_n_8,147,370,0 duplicate(LogTrap#tt_main) trap_b#n8-17 FAKE_NPC,0,3
+turbo_n_8,155,369,0 duplicate(LogTrap#tt_main) trap_b#n8-18 FAKE_NPC,7,0
+turbo_n_8,155,368,0 duplicate(LogTrap#tt_main) trap_b#n8-19 FAKE_NPC,7,0
+turbo_n_8,151,367,0 duplicate(LogTrap#tt_main) trap_b#n8-20 FAKE_NPC,3,0
+turbo_n_8,153,366,0 duplicate(LogTrap#tt_main) trap_b#n8-21 FAKE_NPC,1,0
+turbo_n_8,155,367,0 duplicate(LogTrap#tt_main) trap_b#n8-22 FAKE_NPC,0,1
+turbo_n_8,78,362,0 duplicate(LogTrap#tt_main) trap_c#n8-1 FAKE_NPC,4,1
+turbo_n_8,78,359,0 duplicate(LogTrap#tt_main) trap_c#n8-2 FAKE_NPC,4,1
+turbo_n_8,83,362,0 duplicate(LogTrap#tt_main) trap_c#n8-3 FAKE_NPC,0,1
+turbo_n_8,88,359,0 duplicate(LogTrap#tt_main) trap_c#n8-4 FAKE_NPC,5,1
+turbo_n_8,89,357,0 duplicate(LogTrap#tt_main) trap_c#n8-5 FAKE_NPC,1,1
+turbo_n_8,92,390,0 duplicate(LogTrap#tt_main) trap_c#n8-6 FAKE_NPC,1,1
+turbo_n_8,92,357,0 duplicate(LogTrap#tt_main) trap_c#n8-7 FAKE_NPC,1,1
+turbo_n_8,98,364,0 duplicate(LogTrap#tt_main) trap_c#n8-8 FAKE_NPC,6,1
+turbo_n_8,98,362,0 duplicate(LogTrap#tt_main) trap_c#n8-9 FAKE_NPC,6,0
+turbo_n_8,106,364,0 duplicate(LogTrap#tt_main) trap_c#n8-10 FAKE_NPC,2,2
+turbo_n_8,107,360,0 duplicate(LogTrap#tt_main) trap_c#n8-11 FAKE_NPC,1,2
+turbo_n_8,109,360,0 duplicate(LogTrap#tt_main) trap_c#n8-12 FAKE_NPC,0,2
+turbo_n_8,112,361,0 duplicate(LogTrap#tt_main) trap_c#n8-13 FAKE_NPC,3,1
+turbo_n_8,116,359,0 duplicate(LogTrap#tt_main) trap_c#n8-14 FAKE_NPC,0,2
+turbo_n_8,117,359,0 duplicate(LogTrap#tt_main) trap_c#n8-15 FAKE_NPC,0,2
+turbo_n_8,116,356,0 duplicate(LogTrap#tt_main) trap_c#n8-16 FAKE_NPC,0,2
+turbo_n_8,117,356,0 duplicate(LogTrap#tt_main) trap_c#n8-17 FAKE_NPC,0,2
+turbo_n_8,129,360,0 duplicate(LogTrap#tt_main) trap_c#n8-18 FAKE_NPC,12,1
+turbo_n_8,129,358,0 duplicate(LogTrap#tt_main) trap_c#n8-19 FAKE_NPC,12,0
+turbo_n_8,132,357,0 duplicate(LogTrap#tt_main) trap_c#n8-20 FAKE_NPC,2,1
+turbo_n_8,137,357,0 duplicate(LogTrap#tt_main) trap_c#n8-21 FAKE_NPC,2,1
+turbo_n_8,147,363,0 duplicate(LogTrap#tt_main) trap_c#n8-22 FAKE_NPC,16,1
+turbo_n_8,149,365,0 duplicate(LogTrap#tt_main) trap_c#n8-23 FAKE_NPC,1,0
+turbo_n_8,158,362,0 duplicate(LogTrap#tt_main) trap_c#n8-24 FAKE_NPC,1,4
+turbo_n_8,154,360,0 duplicate(LogTrap#tt_main) trap_c#n8-25 FAKE_NPC,2,2
+turbo_n_8,161,360,0 duplicate(LogTrap#tt_main) trap_c#n8-26 FAKE_NPC,1,2
+turbo_n_8,161,365,0 duplicate(LogTrap#tt_main) trap_c#n8-27 FAKE_NPC,1,0
+turbo_n_8,160,366,0 duplicate(LogTrap#tt_main) trap_c#n8-28 FAKE_NPC
+turbo_n_8,79,353,0 duplicate(LogTrap#tt_main) trap_d#n8-1 FAKE_NPC,5,2
+turbo_n_8,85,354,0 duplicate(LogTrap#tt_main) trap_d#n8-2 FAKE_NPC,0,1
+turbo_n_8,99,353,0 duplicate(LogTrap#tt_main) trap_d#n8-3 FAKE_NPC,14,0
+turbo_n_8,99,352,0 duplicate(LogTrap#tt_main) trap_d#n8-4 FAKE_NPC,14,0
+turbo_n_8,99,356,0 duplicate(LogTrap#tt_main) trap_d#n8-5 FAKE_NPC,3,3
+turbo_n_8,103,356,0 duplicate(LogTrap#tt_main) trap_d#n8-6 FAKE_NPC,0,3
+turbo_n_8,108,354,0 duplicate(LogTrap#tt_main) trap_d#n8-7 FAKE_NPC,5,1
+turbo_n_8,112,356,0 duplicate(LogTrap#tt_main) trap_d#n8-8 FAKE_NPC,0,1
+turbo_n_8,113,356,0 duplicate(LogTrap#tt_main) trap_d#n8-9 FAKE_NPC,0,1
+turbo_n_8,123,353,0 duplicate(LogTrap#tt_main) trap_d#n8-10 FAKE_NPC,3,2
+turbo_n_8,127,353,0 duplicate(LogTrap#tt_main) trap_d#n8-11 FAKE_NPC,0,2
+turbo_n_8,145,352,0 duplicate(LogTrap#tt_main) trap_d#n8-12 FAKE_NPC,17,1
+turbo_n_8,152,354,0 duplicate(LogTrap#tt_main) trap_d#n8-13 FAKE_NPC,10,1
+turbo_n_8,145,357,0 duplicate(LogTrap#tt_main) trap_d#n8-14 FAKE_NPC,1,2
+turbo_n_8,148,357,0 duplicate(LogTrap#tt_main) trap_d#n8-15 FAKE_NPC,1,2
+turbo_n_16,118,377,0 duplicate(LogTrap#tt_main) trap_a#n16-1 FAKE_NPC,44,1
+turbo_n_16,77,375,0 duplicate(LogTrap#tt_main) trap_a#n16-2 FAKE_NPC,3,1
+turbo_n_16,82,375,0 duplicate(LogTrap#tt_main) trap_a#n16-3 FAKE_NPC,1,1
+turbo_n_16,82,372,0 duplicate(LogTrap#tt_main) trap_a#n16-4 FAKE_NPC,0,2
+turbo_n_16,83,372,0 duplicate(LogTrap#tt_main) trap_a#n16-5 FAKE_NPC,0,2
+turbo_n_16,97,374,0 duplicate(LogTrap#tt_main) trap_a#n16-6 FAKE_NPC,1,2
+turbo_n_16,98,374,0 duplicate(LogTrap#tt_main) trap_a#n16-7 FAKE_NPC,1,2
+turbo_n_16,122,372,0 duplicate(LogTrap#tt_main) trap_a#n16-8 FAKE_NPC,2,4
+turbo_n_16,125,374,0 duplicate(LogTrap#tt_main) trap_a#n16-9 FAKE_NPC,0,4
+turbo_n_16,132,374,0 duplicate(LogTrap#tt_main) trap_a#n16-10 FAKE_NPC,7,2
+turbo_n_16,156,374,0 duplicate(LogTrap#tt_main) trap_a#n16-11 FAKE_NPC,6,2
+turbo_n_16,163,375,0 duplicate(LogTrap#tt_main) trap_a#n16-12 FAKE_NPC,0,3
+turbo_n_16,164,377,0 duplicate(LogTrap#tt_main) trap_a#n16-13 FAKE_NPC,1,1
+turbo_n_16,76,369,0 duplicate(LogTrap#tt_main) trap_b#n16-1 FAKE_NPC,2,2
+turbo_n_16,79,369,0 duplicate(LogTrap#tt_main) trap_b#n16-2 FAKE_NPC,0,2
+turbo_n_16,77,366,0 duplicate(LogTrap#tt_main) trap_b#n16-3 FAKE_NPC,3,0
+turbo_n_16,85,366,0 duplicate(LogTrap#tt_main) trap_b#n16-4 FAKE_NPC,5,1
+turbo_n_16,87,363,0 duplicate(LogTrap#tt_main) trap_b#n16-5 FAKE_NPC,2,1
+turbo_n_16,88,368,0 duplicate(LogTrap#tt_main) trap_b#n16-6 FAKE_NPC,2,5
+turbo_n_16,92,370,0 duplicate(LogTrap#tt_main) trap_b#n16-7 FAKE_NPC,1,3
+turbo_n_16,98,368,0 duplicate(LogTrap#tt_main) trap_b#n16-8 FAKE_NPC,4,1
+turbo_n_16,109,371,0 duplicate(LogTrap#tt_main) trap_b#n16-9 FAKE_NPC,7,2
+turbo_n_16,110,368,0 duplicate(LogTrap#tt_main) trap_b#n16-10 FAKE_NPC,7,0
+turbo_n_16,113,366,0 duplicate(LogTrap#tt_main) trap_b#n16-11 FAKE_NPC,3,2
+turbo_n_16,117,368,0 duplicate(LogTrap#tt_main) trap_b#n16-12 FAKE_NPC,0,5
+turbo_n_16,123,364,0 duplicate(LogTrap#tt_main) trap_b#n16-13 FAKE_NPC,6,1
+turbo_n_16,136,368,0 duplicate(LogTrap#tt_main) trap_b#n16-14 FAKE_NPC,8,1
+turbo_n_16,136,366,0 duplicate(LogTrap#tt_main) trap_b#n16-15 FAKE_NPC,8,0
+turbo_n_16,144,370,0 duplicate(LogTrap#tt_main) trap_b#n16-16 FAKE_NPC,2,3
+turbo_n_16,147,370,0 duplicate(LogTrap#tt_main) trap_b#n16-17 FAKE_NPC,0,3
+turbo_n_16,155,369,0 duplicate(LogTrap#tt_main) trap_b#n16-18 FAKE_NPC,7,0
+turbo_n_16,155,368,0 duplicate(LogTrap#tt_main) trap_b#n16-19 FAKE_NPC,7,0
+turbo_n_16,151,367,0 duplicate(LogTrap#tt_main) trap_b#n16-20 FAKE_NPC,3,0
+turbo_n_16,153,366,0 duplicate(LogTrap#tt_main) trap_b#n16-21 FAKE_NPC,1,0
+turbo_n_16,155,367,0 duplicate(LogTrap#tt_main) trap_b#n16-22 FAKE_NPC,0,1
+turbo_n_16,78,362,0 duplicate(LogTrap#tt_main) trap_c#n16-1 FAKE_NPC,4,1
+turbo_n_16,78,359,0 duplicate(LogTrap#tt_main) trap_c#n16-2 FAKE_NPC,4,1
+turbo_n_16,83,362,0 duplicate(LogTrap#tt_main) trap_c#n16-3 FAKE_NPC,0,1
+turbo_n_16,88,359,0 duplicate(LogTrap#tt_main) trap_c#n16-4 FAKE_NPC,5,1
+turbo_n_16,89,357,0 duplicate(LogTrap#tt_main) trap_c#n16-5 FAKE_NPC,1,1
+turbo_n_16,92,390,0 duplicate(LogTrap#tt_main) trap_c#n16-6 FAKE_NPC,1,1
+turbo_n_16,92,357,0 duplicate(LogTrap#tt_main) trap_c#n16-7 FAKE_NPC,1,1
+turbo_n_16,98,364,0 duplicate(LogTrap#tt_main) trap_c#n16-8 FAKE_NPC,6,1
+turbo_n_16,98,362,0 duplicate(LogTrap#tt_main) trap_c#n16-9 FAKE_NPC,6,0
+turbo_n_16,106,364,0 duplicate(LogTrap#tt_main) trap_c#n16-10 FAKE_NPC,2,2
+turbo_n_16,107,360,0 duplicate(LogTrap#tt_main) trap_c#n16-11 FAKE_NPC,1,2
+turbo_n_16,109,360,0 duplicate(LogTrap#tt_main) trap_c#n16-12 FAKE_NPC,0,2
+turbo_n_16,112,361,0 duplicate(LogTrap#tt_main) trap_c#n16-13 FAKE_NPC,3,1
+turbo_n_16,116,359,0 duplicate(LogTrap#tt_main) trap_c#n16-14 FAKE_NPC,0,2
+turbo_n_16,117,359,0 duplicate(LogTrap#tt_main) trap_c#n16-15 FAKE_NPC,0,2
+turbo_n_16,116,356,0 duplicate(LogTrap#tt_main) trap_c#n16-16 FAKE_NPC,0,2
+turbo_n_16,117,356,0 duplicate(LogTrap#tt_main) trap_c#n16-17 FAKE_NPC,0,2
+turbo_n_16,129,360,0 duplicate(LogTrap#tt_main) trap_c#n16-18 FAKE_NPC,12,1
+turbo_n_16,129,358,0 duplicate(LogTrap#tt_main) trap_c#n16-19 FAKE_NPC,12,0
+turbo_n_16,132,357,0 duplicate(LogTrap#tt_main) trap_c#n16-20 FAKE_NPC,2,1
+turbo_n_16,137,357,0 duplicate(LogTrap#tt_main) trap_c#n16-21 FAKE_NPC,2,1
+turbo_n_16,147,363,0 duplicate(LogTrap#tt_main) trap_c#n16-22 FAKE_NPC,16,1
+turbo_n_16,149,365,0 duplicate(LogTrap#tt_main) trap_c#n16-23 FAKE_NPC,1,0
+turbo_n_16,158,362,0 duplicate(LogTrap#tt_main) trap_c#n16-24 FAKE_NPC,1,4
+turbo_n_16,154,360,0 duplicate(LogTrap#tt_main) trap_c#n16-25 FAKE_NPC,2,2
+turbo_n_16,161,360,0 duplicate(LogTrap#tt_main) trap_c#n16-26 FAKE_NPC,1,2
+turbo_n_16,161,365,0 duplicate(LogTrap#tt_main) trap_c#n16-27 FAKE_NPC,1,0
+turbo_n_16,160,366,0 duplicate(LogTrap#tt_main) trap_c#n16-28 FAKE_NPC
+turbo_n_16,79,353,0 duplicate(LogTrap#tt_main) trap_d#n16-1 FAKE_NPC,5,2
+turbo_n_16,85,354,0 duplicate(LogTrap#tt_main) trap_d#n16-2 FAKE_NPC,0,1
+turbo_n_16,99,353,0 duplicate(LogTrap#tt_main) trap_d#n16-3 FAKE_NPC,14,0
+turbo_n_16,99,352,0 duplicate(LogTrap#tt_main) trap_d#n16-4 FAKE_NPC,14,0
+turbo_n_16,99,356,0 duplicate(LogTrap#tt_main) trap_d#n16-5 FAKE_NPC,3,3
+turbo_n_16,103,356,0 duplicate(LogTrap#tt_main) trap_d#n16-6 FAKE_NPC,0,3
+turbo_n_16,108,354,0 duplicate(LogTrap#tt_main) trap_d#n16-7 FAKE_NPC,5,1
+turbo_n_16,112,356,0 duplicate(LogTrap#tt_main) trap_d#n16-8 FAKE_NPC,0,1
+turbo_n_16,113,356,0 duplicate(LogTrap#tt_main) trap_d#n16-9 FAKE_NPC,0,1
+turbo_n_16,123,353,0 duplicate(LogTrap#tt_main) trap_d#n16-10 FAKE_NPC,3,2
+turbo_n_16,127,353,0 duplicate(LogTrap#tt_main) trap_d#n16-11 FAKE_NPC,0,2
+turbo_n_16,145,352,0 duplicate(LogTrap#tt_main) trap_d#n16-12 FAKE_NPC,17,1
+turbo_n_16,152,354,0 duplicate(LogTrap#tt_main) trap_d#n16-13 FAKE_NPC,10,1
+turbo_n_16,145,357,0 duplicate(LogTrap#tt_main) trap_d#n16-14 FAKE_NPC,1,2
+turbo_n_16,148,357,0 duplicate(LogTrap#tt_main) trap_d#n16-15 FAKE_NPC,1,2
+turbo_n_1,118,377,0 duplicate(LogTrap#tt_main) trap_a#n1-1 FAKE_NPC,44,1
+turbo_n_1,77,375,0 duplicate(LogTrap#tt_main) trap_a#n1-2 FAKE_NPC,3,1
+turbo_n_1,82,375,0 duplicate(LogTrap#tt_main) trap_a#n1-3 FAKE_NPC,1,1
+turbo_n_1,82,372,0 duplicate(LogTrap#tt_main) trap_a#n1-4 FAKE_NPC,0,2
+turbo_n_1,83,372,0 duplicate(LogTrap#tt_main) trap_a#n1-5 FAKE_NPC,0,2
+turbo_n_1,97,374,0 duplicate(LogTrap#tt_main) trap_a#n1-6 FAKE_NPC,1,2
+turbo_n_1,98,374,0 duplicate(LogTrap#tt_main) trap_a#n1-7 FAKE_NPC,1,2
+turbo_n_1,122,372,0 duplicate(LogTrap#tt_main) trap_a#n1-8 FAKE_NPC,2,4
+turbo_n_1,125,374,0 duplicate(LogTrap#tt_main) trap_a#n1-9 FAKE_NPC,0,4
+turbo_n_1,132,374,0 duplicate(LogTrap#tt_main) trap_a#n1-10 FAKE_NPC,7,2
+turbo_n_1,156,374,0 duplicate(LogTrap#tt_main) trap_a#n1-11 FAKE_NPC,6,2
+turbo_n_1,163,375,0 duplicate(LogTrap#tt_main) trap_a#n1-12 FAKE_NPC,0,3
+turbo_n_1,164,377,0 duplicate(LogTrap#tt_main) trap_a#n1-13 FAKE_NPC,1,1
+turbo_n_1,76,369,0 duplicate(LogTrap#tt_main) trap_b#n1-1 FAKE_NPC,2,2
+turbo_n_1,79,369,0 duplicate(LogTrap#tt_main) trap_b#n1-2 FAKE_NPC,0,2
+turbo_n_1,77,366,0 duplicate(LogTrap#tt_main) trap_b#n1-3 FAKE_NPC,3,0
+turbo_n_1,85,366,0 duplicate(LogTrap#tt_main) trap_b#n1-4 FAKE_NPC,5,1
+turbo_n_1,87,363,0 duplicate(LogTrap#tt_main) trap_b#n1-5 FAKE_NPC,2,1
+turbo_n_1,88,368,0 duplicate(LogTrap#tt_main) trap_b#n1-6 FAKE_NPC,2,5
+turbo_n_1,92,370,0 duplicate(LogTrap#tt_main) trap_b#n1-7 FAKE_NPC,1,3
+turbo_n_1,98,368,0 duplicate(LogTrap#tt_main) trap_b#n1-8 FAKE_NPC,4,1
+turbo_n_1,109,371,0 duplicate(LogTrap#tt_main) trap_b#n1-9 FAKE_NPC,7,2
+turbo_n_1,110,368,0 duplicate(LogTrap#tt_main) trap_b#n1-10 FAKE_NPC,7,0
+turbo_n_1,113,366,0 duplicate(LogTrap#tt_main) trap_b#n1-11 FAKE_NPC,3,2
+turbo_n_1,117,368,0 duplicate(LogTrap#tt_main) trap_b#n1-12 FAKE_NPC,0,5
+turbo_n_1,123,364,0 duplicate(LogTrap#tt_main) trap_b#n1-13 FAKE_NPC,6,1
+turbo_n_1,136,368,0 duplicate(LogTrap#tt_main) trap_b#n1-14 FAKE_NPC,8,1
+turbo_n_1,136,366,0 duplicate(LogTrap#tt_main) trap_b#n1-15 FAKE_NPC,8,0
+turbo_n_1,144,370,0 duplicate(LogTrap#tt_main) trap_b#n1-16 FAKE_NPC,2,3
+turbo_n_1,147,370,0 duplicate(LogTrap#tt_main) trap_b#n1-17 FAKE_NPC,0,3
+turbo_n_1,155,369,0 duplicate(LogTrap#tt_main) trap_b#n1-18 FAKE_NPC,7,0
+turbo_n_1,155,368,0 duplicate(LogTrap#tt_main) trap_b#n1-19 FAKE_NPC,7,0
+turbo_n_1,151,367,0 duplicate(LogTrap#tt_main) trap_b#n1-20 FAKE_NPC,3,0
+turbo_n_1,153,366,0 duplicate(LogTrap#tt_main) trap_b#n1-21 FAKE_NPC,1,0
+turbo_n_1,155,367,0 duplicate(LogTrap#tt_main) trap_b#n1-22 FAKE_NPC,0,1
+turbo_n_1,78,362,0 duplicate(LogTrap#tt_main) trap_c#n1-1 FAKE_NPC,4,1
+turbo_n_1,78,359,0 duplicate(LogTrap#tt_main) trap_c#n1-2 FAKE_NPC,4,1
+turbo_n_1,83,362,0 duplicate(LogTrap#tt_main) trap_c#n1-3 FAKE_NPC,0,1
+turbo_n_1,88,359,0 duplicate(LogTrap#tt_main) trap_c#n1-4 FAKE_NPC,5,1
+turbo_n_1,89,357,0 duplicate(LogTrap#tt_main) trap_c#n1-5 FAKE_NPC,1,1
+turbo_n_1,92,390,0 duplicate(LogTrap#tt_main) trap_c#n1-6 FAKE_NPC,1,1
+turbo_n_1,92,357,0 duplicate(LogTrap#tt_main) trap_c#n1-7 FAKE_NPC,1,1
+turbo_n_1,98,364,0 duplicate(LogTrap#tt_main) trap_c#n1-8 FAKE_NPC,6,1
+turbo_n_1,98,362,0 duplicate(LogTrap#tt_main) trap_c#n1-9 FAKE_NPC,6,0
+turbo_n_1,106,364,0 duplicate(LogTrap#tt_main) trap_c#n1-10 FAKE_NPC,2,2
+turbo_n_1,107,360,0 duplicate(LogTrap#tt_main) trap_c#n1-11 FAKE_NPC,1,2
+turbo_n_1,109,360,0 duplicate(LogTrap#tt_main) trap_c#n1-12 FAKE_NPC,0,2
+turbo_n_1,112,361,0 duplicate(LogTrap#tt_main) trap_c#n1-13 FAKE_NPC,3,1
+turbo_n_1,116,359,0 duplicate(LogTrap#tt_main) trap_c#n1-14 FAKE_NPC,0,2
+turbo_n_1,117,359,0 duplicate(LogTrap#tt_main) trap_c#n1-15 FAKE_NPC,0,2
+turbo_n_1,116,356,0 duplicate(LogTrap#tt_main) trap_c#n1-16 FAKE_NPC,0,2
+turbo_n_1,117,356,0 duplicate(LogTrap#tt_main) trap_c#n1-17 FAKE_NPC,0,2
+turbo_n_1,129,360,0 duplicate(LogTrap#tt_main) trap_c#n1-18 FAKE_NPC,12,1
+turbo_n_1,129,358,0 duplicate(LogTrap#tt_main) trap_c#n1-19 FAKE_NPC,12,0
+turbo_n_1,132,357,0 duplicate(LogTrap#tt_main) trap_c#n1-20 FAKE_NPC,2,1
+turbo_n_1,137,357,0 duplicate(LogTrap#tt_main) trap_c#n1-21 FAKE_NPC,2,1
+turbo_n_1,147,363,0 duplicate(LogTrap#tt_main) trap_c#n1-22 FAKE_NPC,16,1
+turbo_n_1,149,365,0 duplicate(LogTrap#tt_main) trap_c#n1-23 FAKE_NPC,1,0
+turbo_n_1,158,362,0 duplicate(LogTrap#tt_main) trap_c#n1-24 FAKE_NPC,1,4
+turbo_n_1,154,360,0 duplicate(LogTrap#tt_main) trap_c#n1-25 FAKE_NPC,2,2
+turbo_n_1,161,360,0 duplicate(LogTrap#tt_main) trap_c#n1-26 FAKE_NPC,1,2
+turbo_n_1,161,365,0 duplicate(LogTrap#tt_main) trap_c#n1-27 FAKE_NPC,1,0
+turbo_n_1,160,366,0 duplicate(LogTrap#tt_main) trap_c#n1-28 FAKE_NPC
+turbo_n_1,79,353,0 duplicate(LogTrap#tt_main) trap_d#n1-1 FAKE_NPC,5,2
+turbo_n_1,85,354,0 duplicate(LogTrap#tt_main) trap_d#n1-2 FAKE_NPC,0,1
+turbo_n_1,99,353,0 duplicate(LogTrap#tt_main) trap_d#n1-3 FAKE_NPC,14,0
+turbo_n_1,99,352,0 duplicate(LogTrap#tt_main) trap_d#n1-4 FAKE_NPC,14,0
+turbo_n_1,99,356,0 duplicate(LogTrap#tt_main) trap_d#n1-5 FAKE_NPC,3,3
+turbo_n_1,103,356,0 duplicate(LogTrap#tt_main) trap_d#n1-6 FAKE_NPC,0,3
+turbo_n_1,108,354,0 duplicate(LogTrap#tt_main) trap_d#n1-7 FAKE_NPC,5,1
+turbo_n_1,112,356,0 duplicate(LogTrap#tt_main) trap_d#n1-8 FAKE_NPC,0,1
+turbo_n_1,113,356,0 duplicate(LogTrap#tt_main) trap_d#n1-9 FAKE_NPC,0,1
+turbo_n_1,123,353,0 duplicate(LogTrap#tt_main) trap_d#n1-10 FAKE_NPC,3,2
+turbo_n_1,127,353,0 duplicate(LogTrap#tt_main) trap_d#n1-11 FAKE_NPC,0,2
+turbo_n_1,145,352,0 duplicate(LogTrap#tt_main) trap_d#n1-12 FAKE_NPC,17,1
+turbo_n_1,152,354,0 duplicate(LogTrap#tt_main) trap_d#n1-13 FAKE_NPC,10,1
+turbo_n_1,145,357,0 duplicate(LogTrap#tt_main) trap_d#n1-14 FAKE_NPC,1,2
+turbo_n_1,148,357,0 duplicate(LogTrap#tt_main) trap_d#n1-15 FAKE_NPC,1,2
+
+- script SandTrap#tt_main FAKE_NPC,{
OnTouch:
switch(rand(1,10)) {
case 1:
@@ -1034,169 +1034,169 @@ OnTouch:
end;
}
}
-turbo_e_4,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-1 -1,3,3
-turbo_e_4,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-2 -1,3,3
-turbo_e_4,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-3 -1,1,1
-turbo_e_4,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-4 -1,3,3
-turbo_e_4,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-5 -1,1,1
-turbo_e_4,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-6 -1,3,3
-turbo_e_4,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-7 -1,3,3
-turbo_e_4,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-8 -1,3,3
-turbo_e_4,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-9 -1,2,2
-turbo_e_4,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-10 -1,1,1
-turbo_e_4,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-11 -1,3,3
-turbo_e_4,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-12 -1,1,1
-turbo_e_4,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-13 -1,2,2
-turbo_e_4,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-14 -1,9,9
-turbo_e_4,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-15 -1,3,3
-turbo_e_4,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-16 -1,1,1
-turbo_e_4,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-17 -1,3,3
-turbo_e_4,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-18 -1,2,2
-turbo_e_4,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-19 -1,3,3
-turbo_e_4,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-20 -1,1,1
-turbo_e_4,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-21 -1,3,3
-turbo_e_4,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-22 -1,2,2
-turbo_e_4,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-23 -1,1,1
-turbo_e_8,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-1 -1,3,3
-turbo_e_8,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-2 -1,3,3
-turbo_e_8,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-3 -1,1,1
-turbo_e_8,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-4 -1,3,3
-turbo_e_8,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-5 -1,1,1
-turbo_e_8,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-6 -1,3,3
-turbo_e_8,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-7 -1,3,3
-turbo_e_8,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-8 -1,3,3
-turbo_e_8,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-9 -1,2,2
-turbo_e_8,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-10 -1,1,1
-turbo_e_8,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-11 -1,3,3
-turbo_e_8,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-12 -1,1,1
-turbo_e_8,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-13 -1,2,2
-turbo_e_8,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-14 -1,9,9
-turbo_e_8,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-15 -1,3,3
-turbo_e_8,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-16 -1,1,1
-turbo_e_8,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-17 -1,3,3
-turbo_e_8,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-18 -1,2,2
-turbo_e_8,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-19 -1,3,3
-turbo_e_8,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-20 -1,1,1
-turbo_e_8,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-21 -1,3,3
-turbo_e_8,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-22 -1,2,2
-turbo_e_8,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-23 -1,1,1
-turbo_e_16,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-1 -1,3,3
-turbo_e_16,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-2 -1,3,3
-turbo_e_16,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-3 -1,1,1
-turbo_e_16,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-4 -1,3,3
-turbo_e_16,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-5 -1,1,1
-turbo_e_16,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-6 -1,3,3
-turbo_e_16,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-7 -1,3,3
-turbo_e_16,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-8 -1,3,3
-turbo_e_16,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-9 -1,2,2
-turbo_e_16,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-10 -1,1,1
-turbo_e_16,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-11 -1,3,3
-turbo_e_16,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-12 -1,1,1
-turbo_e_16,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-13 -1,2,2
-turbo_e_16,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-14 -1,9,9
-turbo_e_16,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-15 -1,3,3
-turbo_e_16,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-16 -1,1,1
-turbo_e_16,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-17 -1,3,3
-turbo_e_16,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-18 -1,2,2
-turbo_e_16,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-19 -1,3,3
-turbo_e_16,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-20 -1,1,1
-turbo_e_16,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-21 -1,3,3
-turbo_e_16,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-22 -1,2,2
-turbo_e_16,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-23 -1,1,1
-turbo_n_4,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-1 -1,3,3,
-turbo_n_4,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-2 -1,3,3
-turbo_n_4,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-3 -1,1,1
-turbo_n_4,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-4 -1,3,3
-turbo_n_4,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-5 -1,1,1
-turbo_n_4,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-6 -1,3,3
-turbo_n_4,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-7 -1,3,3
-turbo_n_4,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-8 -1,3,3
-turbo_n_4,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-9 -1,2,2
-turbo_n_4,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-10 -1,1,1
-turbo_n_4,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-11 -1,3,3
-turbo_n_4,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-12 -1,1,1
-turbo_n_4,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-13 -1,2,2
-turbo_n_4,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-14 -1,9,9
-turbo_n_4,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-15 -1,3,3
-turbo_n_4,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-16 -1,1,1
-turbo_n_4,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-17 -1,3,3
-turbo_n_4,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-18 -1,2,2
-turbo_n_4,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-19 -1,3,3
-turbo_n_4,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-20 -1,1,1
-turbo_n_4,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-21 -1,3,3
-turbo_n_4,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-22 -1,2,2
-turbo_n_4,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-23 -1,1,1
-turbo_n_8,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-1 -1,3,3
-turbo_n_8,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-2 -1,3,3
-turbo_n_8,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-3 -1,1,1
-turbo_n_8,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-4 -1,3,3
-turbo_n_8,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-5 -1,1,1
-turbo_n_8,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-6 -1,3,3
-turbo_n_8,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-7 -1,3,3
-turbo_n_8,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-8 -1,3,3
-turbo_n_8,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-9 -1,2,2
-turbo_n_8,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-10 -1,1,1
-turbo_n_8,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-11 -1,3,3
-turbo_n_8,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-12 -1,1,1
-turbo_n_8,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-13 -1,2,2
-turbo_n_8,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-14 -1,9,9
-turbo_n_8,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-15 -1,3,3
-turbo_n_8,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-16 -1,1,1
-turbo_n_8,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-17 -1,3,3
-turbo_n_8,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-18 -1,2,2
-turbo_n_8,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-19 -1,3,3
-turbo_n_8,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-20 -1,1,1
-turbo_n_8,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-21 -1,3,3
-turbo_n_8,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-22 -1,2,2
-turbo_n_8,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-23 -1,1,1
-turbo_n_16,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-1 -1,3,3
-turbo_n_16,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-2 -1,3,3
-turbo_n_16,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-3 -1,1,1
-turbo_n_16,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-4 -1,3,3
-turbo_n_16,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-5 -1,1,1
-turbo_n_16,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-6 -1,3,3
-turbo_n_16,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-7 -1,3,3
-turbo_n_16,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-8 -1,3,3
-turbo_n_16,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-9 -1,2,2
-turbo_n_16,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-10 -1,1,1
-turbo_n_16,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-11 -1,3,3
-turbo_n_16,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-12 -1,1,1
-turbo_n_16,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-13 -1,2,2
-turbo_n_16,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-14 -1,9,9
-turbo_n_16,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-15 -1,3,3
-turbo_n_16,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-16 -1,1,1
-turbo_n_16,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-17 -1,3,3
-turbo_n_16,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-18 -1,2,2
-turbo_n_16,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-19 -1,3,3
-turbo_n_16,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-20 -1,1,1
-turbo_n_16,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-21 -1,3,3
-turbo_n_16,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-22 -1,2,2
-turbo_n_16,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-23 -1,1,1
-turbo_n_1,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-1 -1,3,3
-turbo_n_1,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-2 -1,3,3
-turbo_n_1,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-3 -1,1,1
-turbo_n_1,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-4 -1,3,3
-turbo_n_1,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-5 -1,1,1
-turbo_n_1,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-6 -1,3,3
-turbo_n_1,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-7 -1,3,3
-turbo_n_1,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-8 -1,3,3
-turbo_n_1,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-9 -1,2,2
-turbo_n_1,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-10 -1,1,1
-turbo_n_1,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-11 -1,3,3
-turbo_n_1,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-12 -1,1,1
-turbo_n_1,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-13 -1,2,2
-turbo_n_1,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-14 -1,9,9
-turbo_n_1,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-15 -1,3,3
-turbo_n_1,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-16 -1,1,1
-turbo_n_1,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-17 -1,3,3
-turbo_n_1,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-18 -1,2,2
-turbo_n_1,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-19 -1,3,3
-turbo_n_1,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-20 -1,1,1
-turbo_n_1,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-21 -1,3,3
-turbo_n_1,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-22 -1,2,2
-turbo_n_1,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-23 -1,1,1
-
-- script Trap#tt_main -1,{
+turbo_e_4,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-1 FAKE_NPC,3,3
+turbo_e_4,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-2 FAKE_NPC,3,3
+turbo_e_4,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-3 FAKE_NPC,1,1
+turbo_e_4,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-4 FAKE_NPC,3,3
+turbo_e_4,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-5 FAKE_NPC,1,1
+turbo_e_4,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-6 FAKE_NPC,3,3
+turbo_e_4,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-7 FAKE_NPC,3,3
+turbo_e_4,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-8 FAKE_NPC,3,3
+turbo_e_4,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-9 FAKE_NPC,2,2
+turbo_e_4,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-10 FAKE_NPC,1,1
+turbo_e_4,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-11 FAKE_NPC,3,3
+turbo_e_4,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-12 FAKE_NPC,1,1
+turbo_e_4,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-13 FAKE_NPC,2,2
+turbo_e_4,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-14 FAKE_NPC,9,9
+turbo_e_4,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-15 FAKE_NPC,3,3
+turbo_e_4,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-16 FAKE_NPC,1,1
+turbo_e_4,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-17 FAKE_NPC,3,3
+turbo_e_4,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-18 FAKE_NPC,2,2
+turbo_e_4,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-19 FAKE_NPC,3,3
+turbo_e_4,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-20 FAKE_NPC,1,1
+turbo_e_4,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-21 FAKE_NPC,3,3
+turbo_e_4,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-22 FAKE_NPC,2,2
+turbo_e_4,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_e4-23 FAKE_NPC,1,1
+turbo_e_8,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-1 FAKE_NPC,3,3
+turbo_e_8,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-2 FAKE_NPC,3,3
+turbo_e_8,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-3 FAKE_NPC,1,1
+turbo_e_8,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-4 FAKE_NPC,3,3
+turbo_e_8,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-5 FAKE_NPC,1,1
+turbo_e_8,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-6 FAKE_NPC,3,3
+turbo_e_8,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-7 FAKE_NPC,3,3
+turbo_e_8,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-8 FAKE_NPC,3,3
+turbo_e_8,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-9 FAKE_NPC,2,2
+turbo_e_8,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-10 FAKE_NPC,1,1
+turbo_e_8,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-11 FAKE_NPC,3,3
+turbo_e_8,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-12 FAKE_NPC,1,1
+turbo_e_8,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-13 FAKE_NPC,2,2
+turbo_e_8,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-14 FAKE_NPC,9,9
+turbo_e_8,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-15 FAKE_NPC,3,3
+turbo_e_8,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-16 FAKE_NPC,1,1
+turbo_e_8,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-17 FAKE_NPC,3,3
+turbo_e_8,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-18 FAKE_NPC,2,2
+turbo_e_8,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-19 FAKE_NPC,3,3
+turbo_e_8,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-20 FAKE_NPC,1,1
+turbo_e_8,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-21 FAKE_NPC,3,3
+turbo_e_8,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-22 FAKE_NPC,2,2
+turbo_e_8,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_e8-23 FAKE_NPC,1,1
+turbo_e_16,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-1 FAKE_NPC,3,3
+turbo_e_16,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-2 FAKE_NPC,3,3
+turbo_e_16,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-3 FAKE_NPC,1,1
+turbo_e_16,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-4 FAKE_NPC,3,3
+turbo_e_16,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-5 FAKE_NPC,1,1
+turbo_e_16,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-6 FAKE_NPC,3,3
+turbo_e_16,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-7 FAKE_NPC,3,3
+turbo_e_16,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-8 FAKE_NPC,3,3
+turbo_e_16,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-9 FAKE_NPC,2,2
+turbo_e_16,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-10 FAKE_NPC,1,1
+turbo_e_16,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-11 FAKE_NPC,3,3
+turbo_e_16,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-12 FAKE_NPC,1,1
+turbo_e_16,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-13 FAKE_NPC,2,2
+turbo_e_16,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-14 FAKE_NPC,9,9
+turbo_e_16,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-15 FAKE_NPC,3,3
+turbo_e_16,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-16 FAKE_NPC,1,1
+turbo_e_16,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-17 FAKE_NPC,3,3
+turbo_e_16,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-18 FAKE_NPC,2,2
+turbo_e_16,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-19 FAKE_NPC,3,3
+turbo_e_16,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-20 FAKE_NPC,1,1
+turbo_e_16,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-21 FAKE_NPC,3,3
+turbo_e_16,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-22 FAKE_NPC,2,2
+turbo_e_16,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_e16-23 FAKE_NPC,1,1
+turbo_n_4,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-1 FAKE_NPC,3,3
+turbo_n_4,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-2 FAKE_NPC,3,3
+turbo_n_4,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-3 FAKE_NPC,1,1
+turbo_n_4,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-4 FAKE_NPC,3,3
+turbo_n_4,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-5 FAKE_NPC,1,1
+turbo_n_4,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-6 FAKE_NPC,3,3
+turbo_n_4,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-7 FAKE_NPC,3,3
+turbo_n_4,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-8 FAKE_NPC,3,3
+turbo_n_4,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-9 FAKE_NPC,2,2
+turbo_n_4,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-10 FAKE_NPC,1,1
+turbo_n_4,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-11 FAKE_NPC,3,3
+turbo_n_4,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-12 FAKE_NPC,1,1
+turbo_n_4,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-13 FAKE_NPC,2,2
+turbo_n_4,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-14 FAKE_NPC,9,9
+turbo_n_4,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-15 FAKE_NPC,3,3
+turbo_n_4,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-16 FAKE_NPC,1,1
+turbo_n_4,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-17 FAKE_NPC,3,3
+turbo_n_4,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-18 FAKE_NPC,2,2
+turbo_n_4,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-19 FAKE_NPC,3,3
+turbo_n_4,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-20 FAKE_NPC,1,1
+turbo_n_4,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-21 FAKE_NPC,3,3
+turbo_n_4,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-22 FAKE_NPC,2,2
+turbo_n_4,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n4-23 FAKE_NPC,1,1
+turbo_n_8,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-1 FAKE_NPC,3,3
+turbo_n_8,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-2 FAKE_NPC,3,3
+turbo_n_8,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-3 FAKE_NPC,1,1
+turbo_n_8,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-4 FAKE_NPC,3,3
+turbo_n_8,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-5 FAKE_NPC,1,1
+turbo_n_8,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-6 FAKE_NPC,3,3
+turbo_n_8,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-7 FAKE_NPC,3,3
+turbo_n_8,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-8 FAKE_NPC,3,3
+turbo_n_8,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-9 FAKE_NPC,2,2
+turbo_n_8,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-10 FAKE_NPC,1,1
+turbo_n_8,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-11 FAKE_NPC,3,3
+turbo_n_8,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-12 FAKE_NPC,1,1
+turbo_n_8,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-13 FAKE_NPC,2,2
+turbo_n_8,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-14 FAKE_NPC,9,9
+turbo_n_8,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-15 FAKE_NPC,3,3
+turbo_n_8,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-16 FAKE_NPC,1,1
+turbo_n_8,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-17 FAKE_NPC,3,3
+turbo_n_8,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-18 FAKE_NPC,2,2
+turbo_n_8,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-19 FAKE_NPC,3,3
+turbo_n_8,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-20 FAKE_NPC,1,1
+turbo_n_8,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-21 FAKE_NPC,3,3
+turbo_n_8,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-22 FAKE_NPC,2,2
+turbo_n_8,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n8-23 FAKE_NPC,1,1
+turbo_n_16,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-1 FAKE_NPC,3,3
+turbo_n_16,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-2 FAKE_NPC,3,3
+turbo_n_16,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-3 FAKE_NPC,1,1
+turbo_n_16,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-4 FAKE_NPC,3,3
+turbo_n_16,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-5 FAKE_NPC,1,1
+turbo_n_16,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-6 FAKE_NPC,3,3
+turbo_n_16,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-7 FAKE_NPC,3,3
+turbo_n_16,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-8 FAKE_NPC,3,3
+turbo_n_16,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-9 FAKE_NPC,2,2
+turbo_n_16,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-10 FAKE_NPC,1,1
+turbo_n_16,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-11 FAKE_NPC,3,3
+turbo_n_16,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-12 FAKE_NPC,1,1
+turbo_n_16,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-13 FAKE_NPC,2,2
+turbo_n_16,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-14 FAKE_NPC,9,9
+turbo_n_16,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-15 FAKE_NPC,3,3
+turbo_n_16,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-16 FAKE_NPC,1,1
+turbo_n_16,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-17 FAKE_NPC,3,3
+turbo_n_16,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-18 FAKE_NPC,2,2
+turbo_n_16,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-19 FAKE_NPC,3,3
+turbo_n_16,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-20 FAKE_NPC,1,1
+turbo_n_16,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-21 FAKE_NPC,3,3
+turbo_n_16,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-22 FAKE_NPC,2,2
+turbo_n_16,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n16-23 FAKE_NPC,1,1
+turbo_n_1,322,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-1 FAKE_NPC,3,3
+turbo_n_1,323,360,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-2 FAKE_NPC,3,3
+turbo_n_1,324,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-3 FAKE_NPC,1,1
+turbo_n_1,325,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-4 FAKE_NPC,3,3
+turbo_n_1,325,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-5 FAKE_NPC,1,1
+turbo_n_1,329,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-6 FAKE_NPC,3,3
+turbo_n_1,338,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-7 FAKE_NPC,3,3
+turbo_n_1,341,364,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-8 FAKE_NPC,3,3
+turbo_n_1,325,359,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-9 FAKE_NPC,2,2
+turbo_n_1,341,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-10 FAKE_NPC,1,1
+turbo_n_1,350,355,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-11 FAKE_NPC,3,3
+turbo_n_1,348,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-12 FAKE_NPC,1,1
+turbo_n_1,347,370,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-13 FAKE_NPC,2,2
+turbo_n_1,349,377,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-14 FAKE_NPC,9,9
+turbo_n_1,362,372,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-15 FAKE_NPC,3,3
+turbo_n_1,364,365,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-16 FAKE_NPC,1,1
+turbo_n_1,363,357,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-17 FAKE_NPC,3,3
+turbo_n_1,374,358,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-18 FAKE_NPC,2,2
+turbo_n_1,371,367,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-19 FAKE_NPC,3,3
+turbo_n_1,371,376,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-20 FAKE_NPC,1,1
+turbo_n_1,379,375,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-21 FAKE_NPC,3,3
+turbo_n_1,382,363,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-22 FAKE_NPC,2,2
+turbo_n_1,381,354,0 duplicate(SandTrap#tt_main) #TBT_trap_n1-23 FAKE_NPC,1,1
+
+- script Trap#tt_main FAKE_NPC,{
OnTouch:
if (rand(1,3) == 1) {
.@w$ = callfunc("F_tt");
@@ -1258,378 +1258,378 @@ OnTouch:
sc_start SC_CONFUSION,4000,0;
end;
}
-turbo_e_4,355,362,0 duplicate(Trap#tt_main) #TBT_trap_e4-24 -1,3,3
-turbo_e_8,355,362,0 duplicate(Trap#tt_main) #TBT_trap_e8-24 -1,3,3
-turbo_e_16,355,362,0 duplicate(Trap#tt_main) #TBT_trap_e16-24 -1,3,3
-turbo_n_4,355,362,0 duplicate(Trap#tt_main) #TBT_trap_n4-24 -1,3,3
-turbo_n_8,355,362,0 duplicate(Trap#tt_main) #TBT_trap_n8-24 -1,3,3
-turbo_n_16,355,362,0 duplicate(Trap#tt_main) #TBT_trap_n16-24 -1,3,3
-turbo_n_1,355,362,0 duplicate(Trap#tt_main) #TBT_trap_n1-24 -1,3,3
-
-- script WaterTrap#tt_main -1,{
+turbo_e_4,355,362,0 duplicate(Trap#tt_main) #TBT_trap_e4-24 FAKE_NPC,3,3
+turbo_e_8,355,362,0 duplicate(Trap#tt_main) #TBT_trap_e8-24 FAKE_NPC,3,3
+turbo_e_16,355,362,0 duplicate(Trap#tt_main) #TBT_trap_e16-24 FAKE_NPC,3,3
+turbo_n_4,355,362,0 duplicate(Trap#tt_main) #TBT_trap_n4-24 FAKE_NPC,3,3
+turbo_n_8,355,362,0 duplicate(Trap#tt_main) #TBT_trap_n8-24 FAKE_NPC,3,3
+turbo_n_16,355,362,0 duplicate(Trap#tt_main) #TBT_trap_n16-24 FAKE_NPC,3,3
+turbo_n_1,355,362,0 duplicate(Trap#tt_main) #TBT_trap_n1-24 FAKE_NPC,3,3
+
+- script WaterTrap#tt_main FAKE_NPC,{
OnTouch:
sc_start SC_BLIND,60000,0;
end;
}
-turbo_e_4,13,266,0 duplicate(WaterTrap#tt_main) flasher#e4-01 -1,0,2
-turbo_e_4,24,268,0 duplicate(WaterTrap#tt_main) flasher#e4-02 -1,1,0
-turbo_e_4,20,258,0 duplicate(WaterTrap#tt_main) flasher#e4-03 -1,1,0
-turbo_e_4,23,251,0 duplicate(WaterTrap#tt_main) flasher#e4-04 -1,0,1
-turbo_e_4,36,270,0 duplicate(WaterTrap#tt_main) flasher#e4-05 -1,1,0
-turbo_e_4,22,239,0 duplicate(WaterTrap#tt_main) flasher#e4-06 -1,1,0
-turbo_e_4,38,239,0 duplicate(WaterTrap#tt_main) flasher#e4-07 -1,0,1
-turbo_e_4,37,237,0 duplicate(WaterTrap#tt_main) flasher#e4-08 -1,1,0
-turbo_e_4,55,247,0 duplicate(WaterTrap#tt_main) flasher#e4-09 -1,0,1
-turbo_e_4,55,246,0 duplicate(WaterTrap#tt_main) flasher#e4-10 -1,1,0
-turbo_e_4,63,253,0 duplicate(WaterTrap#tt_main) flasher#e4-11 -1,0,1
-turbo_e_4,36,216,0 duplicate(WaterTrap#tt_main) flasher#e4-12 -1,1,0
-turbo_e_4,20,209,0 duplicate(WaterTrap#tt_main) flasher#e4-13 -1,1,0
-turbo_e_4,28,195,0 duplicate(WaterTrap#tt_main) flasher#e4-14 -1,1,0
-turbo_e_4,82,264,0 duplicate(WaterTrap#tt_main) flasher#e4-15 -1,1,0
-turbo_e_4,47,185,0 duplicate(WaterTrap#tt_main) flasher#e4-16 -1,0,1
-turbo_e_4,53,207,0 duplicate(WaterTrap#tt_main) flasher#e4-17 -1,1,0
-turbo_e_4,54,208,0 duplicate(WaterTrap#tt_main) flasher#e4-18 -1,0,1
-turbo_e_4,81,247,0 duplicate(WaterTrap#tt_main) flasher#e4-19 -1,0,1
-turbo_e_4,105,257,0 duplicate(WaterTrap#tt_main) flasher#e4-20 -1,0,1
-turbo_e_4,95,242,0 duplicate(WaterTrap#tt_main) flasher#e4-21 -1,0,1
-turbo_e_4,77,232,0 duplicate(WaterTrap#tt_main) flasher#e4-22 -1,2,0
-turbo_e_4,67,222,0 duplicate(WaterTrap#tt_main) flasher#e4-23 -1,2,0
-turbo_e_4,83,206,0 duplicate(WaterTrap#tt_main) flasher#e4-24 -1,0,1
-turbo_e_4,95,224,0 duplicate(WaterTrap#tt_main) flasher#e4-25 -1,0,1
-turbo_e_4,106,220,0 duplicate(WaterTrap#tt_main) flasher#e4-26 -1,2,0
-turbo_e_4,93,191,0 duplicate(WaterTrap#tt_main) flasher#e4-27 -1,1,0
-turbo_e_4,94,192,0 duplicate(WaterTrap#tt_main) flasher#e4-28a -1,0,1
-turbo_e_4,46,214,0 duplicate(WaterTrap#tt_main) flasher#e4-28b -1,0,1
-turbo_e_4,16,247,0 duplicate(WaterTrap#tt_main) flasher#e4-29 -1,1,0
-turbo_e_4,58,268,0 duplicate(WaterTrap#tt_main) flasher#e4-30 -1,1,1
-turbo_e_4,36,253,0 duplicate(WaterTrap#tt_main) flasher#e4-31 -1,1,0
-turbo_e_4,69,238,0 duplicate(WaterTrap#tt_main) flasher#e4-32 -1,1,1
-turbo_e_4,58,268,0 duplicate(WaterTrap#tt_main) flasher#e4-33 -1,1,1
-turbo_e_4,74,188,0 duplicate(WaterTrap#tt_main) flasher#e4-34 -1,2,0
-turbo_e_4,99,207,0 duplicate(WaterTrap#tt_main) flasher#e4-35 -1,1,1
-turbo_e_4,74,188,0 duplicate(WaterTrap#tt_main) flasher#e4-36 -1,2,0
-turbo_e_4,111,188,0 duplicate(WaterTrap#tt_main) flasher#e4-37a -1,1,0
-turbo_e_4,51,232,0 duplicate(WaterTrap#tt_main) flasher#e4-37b -1,1,1
-turbo_e_4,30,232,0 duplicate(WaterTrap#tt_main) flasher#e4-38 -1,1,1
-turbo_e_4,92,256,0 duplicate(WaterTrap#tt_main) flasher#e4-39 -1,1,1
-turbo_e_4,79,220,0 duplicate(WaterTrap#tt_main) flasher#e4-40 -1,1,1
-turbo_e_4,51,192,0 duplicate(WaterTrap#tt_main) flasher#e4-41 -1,1,1
-turbo_e_4,22,227,0 duplicate(WaterTrap#tt_main) flasher#e4-42 -1,1,1
-turbo_e_4,51,232,0 duplicate(WaterTrap#tt_main) flasher#e4-43 -1,1,1
-turbo_e_4,42,258,0 duplicate(WaterTrap#tt_main) flasher#e4-44 -1,1,0
-turbo_e_4,45,271,0 duplicate(WaterTrap#tt_main) flasher#e4-45 -1,2,1
-turbo_e_4,72,207,0 duplicate(WaterTrap#tt_main) flasher#e4-46 -1,1,1
-turbo_e_4,33,192,0 duplicate(WaterTrap#tt_main) flasher#e4-47 -1,0,1
-turbo_e_4,90,241,0 duplicate(WaterTrap#tt_main) flasher#e4-48a -1,1,0
-turbo_e_4,236,3,0 duplicate(WaterTrap#tt_main) flasher#e4-48b -1,3,0
-turbo_e_8,13,266,0 duplicate(WaterTrap#tt_main) flasher#e8-01 -1,0,2
-turbo_e_8,24,268,0 duplicate(WaterTrap#tt_main) flasher#e8-02 -1,1,0
-turbo_e_8,20,258,0 duplicate(WaterTrap#tt_main) flasher#e8-03 -1,1,0
-turbo_e_8,23,251,0 duplicate(WaterTrap#tt_main) flasher#e8-04 -1,0,1
-turbo_e_8,36,270,0 duplicate(WaterTrap#tt_main) flasher#e8-05 -1,1,0
-turbo_e_8,22,239,0 duplicate(WaterTrap#tt_main) flasher#e8-06 -1,1,0
-turbo_e_8,38,239,0 duplicate(WaterTrap#tt_main) flasher#e8-07 -1,0,1
-turbo_e_8,37,237,0 duplicate(WaterTrap#tt_main) flasher#e8-08 -1,1,0
-turbo_e_8,55,247,0 duplicate(WaterTrap#tt_main) flasher#e8-09 -1,0,1
-turbo_e_8,55,246,0 duplicate(WaterTrap#tt_main) flasher#e8-10 -1,1,0
-turbo_e_8,63,253,0 duplicate(WaterTrap#tt_main) flasher#e8-11 -1,0,1
-turbo_e_8,36,216,0 duplicate(WaterTrap#tt_main) flasher#e8-12 -1,1,0
-turbo_e_8,20,209,0 duplicate(WaterTrap#tt_main) flasher#e8-13 -1,1,0
-turbo_e_8,28,195,0 duplicate(WaterTrap#tt_main) flasher#e8-14 -1,1,0
-turbo_e_8,82,264,0 duplicate(WaterTrap#tt_main) flasher#e8-15 -1,1,0
-turbo_e_8,47,185,0 duplicate(WaterTrap#tt_main) flasher#e8-16 -1,0,1
-turbo_e_8,53,207,0 duplicate(WaterTrap#tt_main) flasher#e8-17 -1,1,0
-turbo_e_8,54,208,0 duplicate(WaterTrap#tt_main) flasher#e8-18 -1,0,1
-turbo_e_8,81,247,0 duplicate(WaterTrap#tt_main) flasher#e8-19 -1,0,1
-turbo_e_8,105,257,0 duplicate(WaterTrap#tt_main) flasher#e8-20 -1,0,1
-turbo_e_8,95,242,0 duplicate(WaterTrap#tt_main) flasher#e8-21 -1,0,1
-turbo_e_8,77,232,0 duplicate(WaterTrap#tt_main) flasher#e8-22 -1,2,0
-turbo_e_8,67,222,0 duplicate(WaterTrap#tt_main) flasher#e8-23 -1,2,0
-turbo_e_8,83,206,0 duplicate(WaterTrap#tt_main) flasher#e8-24 -1,0,1
-turbo_e_8,95,224,0 duplicate(WaterTrap#tt_main) flasher#e8-25 -1,0,1
-turbo_e_8,106,220,0 duplicate(WaterTrap#tt_main) flasher#e8-26 -1,2,0
-turbo_e_8,93,191,0 duplicate(WaterTrap#tt_main) flasher#e8-27 -1,1,0
-turbo_e_8,94,192,0 duplicate(WaterTrap#tt_main) flasher#e8-28a -1,0,1
-turbo_e_8,46,214,0 duplicate(WaterTrap#tt_main) flasher#e8-28b -1,0,1
-turbo_e_8,16,247,0 duplicate(WaterTrap#tt_main) flasher#e8-29 -1,1,0
-turbo_e_8,58,268,0 duplicate(WaterTrap#tt_main) flasher#e8-30 -1,1,1
-turbo_e_8,36,253,0 duplicate(WaterTrap#tt_main) flasher#e8-31 -1,1,0
-turbo_e_8,69,238,0 duplicate(WaterTrap#tt_main) flasher#e8-32 -1,1,1
-turbo_e_8,58,268,0 duplicate(WaterTrap#tt_main) flasher#e8-33 -1,1,1
-turbo_e_8,74,188,0 duplicate(WaterTrap#tt_main) flasher#e8-34 -1,2,0
-turbo_e_8,99,207,0 duplicate(WaterTrap#tt_main) flasher#e8-35 -1,1,1
-turbo_e_8,74,188,0 duplicate(WaterTrap#tt_main) flasher#e8-36 -1,2,0
-turbo_e_8,111,188,0 duplicate(WaterTrap#tt_main) flasher#e8-37a -1,1,0
-turbo_e_8,51,232,0 duplicate(WaterTrap#tt_main) flasher#e8-37b -1,1,1
-turbo_e_8,30,232,0 duplicate(WaterTrap#tt_main) flasher#e8-38 -1,1,1
-turbo_e_8,92,256,0 duplicate(WaterTrap#tt_main) flasher#e8-39 -1,1,1
-turbo_e_8,79,220,0 duplicate(WaterTrap#tt_main) flasher#e8-40 -1,1,1
-turbo_e_8,51,192,0 duplicate(WaterTrap#tt_main) flasher#e8-41 -1,1,1
-turbo_e_8,22,227,0 duplicate(WaterTrap#tt_main) flasher#e8-42 -1,1,1
-turbo_e_8,51,232,0 duplicate(WaterTrap#tt_main) flasher#e8-43 -1,1,1
-turbo_e_8,42,258,0 duplicate(WaterTrap#tt_main) flasher#e8-44 -1,1,0
-turbo_e_8,45,271,0 duplicate(WaterTrap#tt_main) flasher#e8-45 -1,2,1
-turbo_e_8,72,207,0 duplicate(WaterTrap#tt_main) flasher#e8-46 -1,1,1
-turbo_e_8,33,192,0 duplicate(WaterTrap#tt_main) flasher#e8-47 -1,0,1
-turbo_e_8,90,241,0 duplicate(WaterTrap#tt_main) flasher#e8-48a -1,1,0
-turbo_e_8,236,3,0 duplicate(WaterTrap#tt_main) flasher#e8-48b -1,3,0
-turbo_e_16,13,266,0 duplicate(WaterTrap#tt_main) flasher#e16-01 -1,0,2
-turbo_e_16,24,268,0 duplicate(WaterTrap#tt_main) flasher#e16-02 -1,1,0
-turbo_e_16,20,258,0 duplicate(WaterTrap#tt_main) flasher#e16-03 -1,1,0
-turbo_e_16,23,251,0 duplicate(WaterTrap#tt_main) flasher#e16-04 -1,0,1
-turbo_e_16,36,270,0 duplicate(WaterTrap#tt_main) flasher#e16-05 -1,1,0
-turbo_e_16,22,239,0 duplicate(WaterTrap#tt_main) flasher#e16-06 -1,1,0
-turbo_e_16,38,239,0 duplicate(WaterTrap#tt_main) flasher#e16-07 -1,0,1
-turbo_e_16,37,237,0 duplicate(WaterTrap#tt_main) flasher#e16-08 -1,1,0
-turbo_e_16,55,247,0 duplicate(WaterTrap#tt_main) flasher#e16-09 -1,0,1
-turbo_e_16,55,246,0 duplicate(WaterTrap#tt_main) flasher#e16-10 -1,1,0
-turbo_e_16,63,253,0 duplicate(WaterTrap#tt_main) flasher#e16-11 -1,0,1
-turbo_e_16,36,216,0 duplicate(WaterTrap#tt_main) flasher#e16-12 -1,1,0
-turbo_e_16,20,209,0 duplicate(WaterTrap#tt_main) flasher#e16-13 -1,1,0
-turbo_e_16,28,195,0 duplicate(WaterTrap#tt_main) flasher#e16-14 -1,1,0
-turbo_e_16,82,264,0 duplicate(WaterTrap#tt_main) flasher#e16-15 -1,1,0
-turbo_e_16,47,185,0 duplicate(WaterTrap#tt_main) flasher#e16-16 -1,0,1
-turbo_e_16,53,207,0 duplicate(WaterTrap#tt_main) flasher#e16-17 -1,1,0
-turbo_e_16,54,208,0 duplicate(WaterTrap#tt_main) flasher#e16-18 -1,0,1
-turbo_e_16,81,247,0 duplicate(WaterTrap#tt_main) flasher#e16-19 -1,0,1
-turbo_e_16,105,257,0 duplicate(WaterTrap#tt_main) flasher#e16-20 -1,0,1
-turbo_e_16,95,242,0 duplicate(WaterTrap#tt_main) flasher#e16-21 -1,0,1
-turbo_e_16,77,232,0 duplicate(WaterTrap#tt_main) flasher#e16-22 -1,2,0
-turbo_e_16,67,222,0 duplicate(WaterTrap#tt_main) flasher#e16-23 -1,2,0
-turbo_e_16,83,206,0 duplicate(WaterTrap#tt_main) flasher#e16-24 -1,0,1
-turbo_e_16,95,224,0 duplicate(WaterTrap#tt_main) flasher#e16-25 -1,0,1
-turbo_e_16,106,220,0 duplicate(WaterTrap#tt_main) flasher#e16-26 -1,2,0
-turbo_e_16,93,191,0 duplicate(WaterTrap#tt_main) flasher#e16-27 -1,1,0
-turbo_e_16,94,192,0 duplicate(WaterTrap#tt_main) flasher#e16-28a -1,0,1
-turbo_e_16,46,214,0 duplicate(WaterTrap#tt_main) flasher#e16-28b -1,0,1
-turbo_e_16,16,247,0 duplicate(WaterTrap#tt_main) flasher#e16-29 -1,1,0
-turbo_e_16,58,268,0 duplicate(WaterTrap#tt_main) flasher#e16-30 -1,1,1
-turbo_e_16,36,253,0 duplicate(WaterTrap#tt_main) flasher#e16-31 -1,1,0
-turbo_e_16,69,238,0 duplicate(WaterTrap#tt_main) flasher#e16-32 -1,1,1
-turbo_e_16,58,268,0 duplicate(WaterTrap#tt_main) flasher#e16-33 -1,1,1
-turbo_e_16,74,188,0 duplicate(WaterTrap#tt_main) flasher#e16-34 -1,2,0
-turbo_e_16,99,207,0 duplicate(WaterTrap#tt_main) flasher#e16-35 -1,1,1
-turbo_e_16,74,188,0 duplicate(WaterTrap#tt_main) flasher#e16-36 -1,2,0
-turbo_e_16,111,188,0 duplicate(WaterTrap#tt_main) flasher#e16-37a -1,1,0
-turbo_e_16,51,232,0 duplicate(WaterTrap#tt_main) flasher#e16-37b -1,1,1
-turbo_e_16,30,232,0 duplicate(WaterTrap#tt_main) flasher#e16-38 -1,1,1
-turbo_e_16,92,256,0 duplicate(WaterTrap#tt_main) flasher#e16-39 -1,1,1
-turbo_e_16,79,220,0 duplicate(WaterTrap#tt_main) flasher#e16-40 -1,1,1
-turbo_e_16,51,192,0 duplicate(WaterTrap#tt_main) flasher#e16-41 -1,1,1
-turbo_e_16,22,227,0 duplicate(WaterTrap#tt_main) flasher#e16-42 -1,1,1
-turbo_e_16,51,232,0 duplicate(WaterTrap#tt_main) flasher#e16-43 -1,1,1
-turbo_e_16,42,258,0 duplicate(WaterTrap#tt_main) flasher#e16-44 -1,1,0
-turbo_e_16,45,271,0 duplicate(WaterTrap#tt_main) flasher#e16-45 -1,2,1
-turbo_e_16,72,207,0 duplicate(WaterTrap#tt_main) flasher#e16-46 -1,1,1
-turbo_e_16,33,192,0 duplicate(WaterTrap#tt_main) flasher#e16-47 -1,0,1
-turbo_e_16,90,241,0 duplicate(WaterTrap#tt_main) flasher#e16-48a -1,1,0
-turbo_e_16,236,3,0 duplicate(WaterTrap#tt_main) flasher#e16-48b -1,3,0
-turbo_n_4,13,266,0 duplicate(WaterTrap#tt_main) flasher#n4-01 -1,0,2
-turbo_n_4,24,268,0 duplicate(WaterTrap#tt_main) flasher#n4-02 -1,1,0
-turbo_n_4,20,258,0 duplicate(WaterTrap#tt_main) flasher#n4-03 -1,1,0
-turbo_n_4,23,251,0 duplicate(WaterTrap#tt_main) flasher#n4-04 -1,0,1
-turbo_n_4,36,270,0 duplicate(WaterTrap#tt_main) flasher#n4-05 -1,1,0
-turbo_n_4,22,239,0 duplicate(WaterTrap#tt_main) flasher#n4-06 -1,1,0
-turbo_n_4,38,239,0 duplicate(WaterTrap#tt_main) flasher#n4-07 -1,0,1
-turbo_n_4,37,237,0 duplicate(WaterTrap#tt_main) flasher#n4-08 -1,1,0
-turbo_n_4,55,247,0 duplicate(WaterTrap#tt_main) flasher#n4-09 -1,0,1
-turbo_n_4,55,246,0 duplicate(WaterTrap#tt_main) flasher#n4-10 -1,1,0
-turbo_n_4,63,253,0 duplicate(WaterTrap#tt_main) flasher#n4-11 -1,0,1
-turbo_n_4,36,216,0 duplicate(WaterTrap#tt_main) flasher#n4-12 -1,1,0
-turbo_n_4,20,209,0 duplicate(WaterTrap#tt_main) flasher#n4-13 -1,1,0
-turbo_n_4,28,195,0 duplicate(WaterTrap#tt_main) flasher#n4-14 -1,1,0
-turbo_n_4,82,264,0 duplicate(WaterTrap#tt_main) flasher#n4-15 -1,1,0
-turbo_n_4,47,185,0 duplicate(WaterTrap#tt_main) flasher#n4-16 -1,0,1
-turbo_n_4,53,207,0 duplicate(WaterTrap#tt_main) flasher#n4-17 -1,1,0
-turbo_n_4,54,208,0 duplicate(WaterTrap#tt_main) flasher#n4-18 -1,0,1
-turbo_n_4,81,247,0 duplicate(WaterTrap#tt_main) flasher#n4-19 -1,0,1
-turbo_n_4,105,257,0 duplicate(WaterTrap#tt_main) flasher#n4-20 -1,0,1
-turbo_n_4,95,242,0 duplicate(WaterTrap#tt_main) flasher#n4-21 -1,0,1
-turbo_n_4,77,232,0 duplicate(WaterTrap#tt_main) flasher#n4-22 -1,2,0
-turbo_n_4,67,222,0 duplicate(WaterTrap#tt_main) flasher#n4-23 -1,2,0
-turbo_n_4,83,206,0 duplicate(WaterTrap#tt_main) flasher#n4-24 -1,0,1
-turbo_n_4,95,224,0 duplicate(WaterTrap#tt_main) flasher#n4-25 -1,0,1
-turbo_n_4,106,220,0 duplicate(WaterTrap#tt_main) flasher#n4-26 -1,2,0
-turbo_n_4,93,191,0 duplicate(WaterTrap#tt_main) flasher#n4-27 -1,1,0
-turbo_n_4,94,192,0 duplicate(WaterTrap#tt_main) flasher#n4-28a -1,0,1
-turbo_n_4,46,214,0 duplicate(WaterTrap#tt_main) flasher#n4-28b -1,0,1
-turbo_n_4,16,247,0 duplicate(WaterTrap#tt_main) flasher#n4-29 -1,1,0
-turbo_n_4,58,268,0 duplicate(WaterTrap#tt_main) flasher#n4-30 -1,1,1
-turbo_n_4,36,253,0 duplicate(WaterTrap#tt_main) flasher#n4-31 -1,1,0
-turbo_n_4,69,238,0 duplicate(WaterTrap#tt_main) flasher#n4-32 -1,1,1
-turbo_n_4,58,268,0 duplicate(WaterTrap#tt_main) flasher#n4-33 -1,1,1
-turbo_n_4,74,188,0 duplicate(WaterTrap#tt_main) flasher#n4-34 -1,2,0
-turbo_n_4,99,207,0 duplicate(WaterTrap#tt_main) flasher#n4-35 -1,1,1
-turbo_n_4,74,188,0 duplicate(WaterTrap#tt_main) flasher#n4-36 -1,2,0
-turbo_n_4,111,188,0 duplicate(WaterTrap#tt_main) flasher#n4-37a -1,1,0
-turbo_n_4,51,232,0 duplicate(WaterTrap#tt_main) flasher#n4-37b -1,1,1
-turbo_n_4,30,232,0 duplicate(WaterTrap#tt_main) flasher#n4-38 -1,1,1
-turbo_n_4,92,256,0 duplicate(WaterTrap#tt_main) flasher#n4-39 -1,1,1
-turbo_n_4,79,220,0 duplicate(WaterTrap#tt_main) flasher#n4-40 -1,1,1
-turbo_n_4,51,192,0 duplicate(WaterTrap#tt_main) flasher#n4-41 -1,1,1
-turbo_n_4,22,227,0 duplicate(WaterTrap#tt_main) flasher#n4-42 -1,1,1
-turbo_n_4,51,232,0 duplicate(WaterTrap#tt_main) flasher#n4-43 -1,1,1
-turbo_n_4,42,258,0 duplicate(WaterTrap#tt_main) flasher#n4-44 -1,1,0
-turbo_n_4,45,271,0 duplicate(WaterTrap#tt_main) flasher#n4-45 -1,2,1
-turbo_n_4,72,207,0 duplicate(WaterTrap#tt_main) flasher#n4-46 -1,1,1
-turbo_n_4,33,192,0 duplicate(WaterTrap#tt_main) flasher#n4-47 -1,0,1
-turbo_n_4,90,241,0 duplicate(WaterTrap#tt_main) flasher#n4-48a -1,1,0
-turbo_n_4,236,3,0 duplicate(WaterTrap#tt_main) flasher#n4-48b -1,3,0
-turbo_n_8,13,266,0 duplicate(WaterTrap#tt_main) flasher#n8-01 -1,0,2
-turbo_n_8,24,268,0 duplicate(WaterTrap#tt_main) flasher#n8-02 -1,1,0
-turbo_n_8,20,258,0 duplicate(WaterTrap#tt_main) flasher#n8-03 -1,1,0
-turbo_n_8,23,251,0 duplicate(WaterTrap#tt_main) flasher#n8-04 -1,0,1
-turbo_n_8,36,270,0 duplicate(WaterTrap#tt_main) flasher#n8-05 -1,1,0
-turbo_n_8,22,239,0 duplicate(WaterTrap#tt_main) flasher#n8-06 -1,1,0
-turbo_n_8,38,239,0 duplicate(WaterTrap#tt_main) flasher#n8-07 -1,0,1
-turbo_n_8,37,237,0 duplicate(WaterTrap#tt_main) flasher#n8-08 -1,1,0
-turbo_n_8,55,247,0 duplicate(WaterTrap#tt_main) flasher#n8-09 -1,0,1
-turbo_n_8,55,246,0 duplicate(WaterTrap#tt_main) flasher#n8-10 -1,1,0
-turbo_n_8,63,253,0 duplicate(WaterTrap#tt_main) flasher#n8-11 -1,0,1
-turbo_n_8,36,216,0 duplicate(WaterTrap#tt_main) flasher#n8-12 -1,1,0
-turbo_n_8,20,209,0 duplicate(WaterTrap#tt_main) flasher#n8-13 -1,1,0
-turbo_n_8,28,195,0 duplicate(WaterTrap#tt_main) flasher#n8-14 -1,1,0
-turbo_n_8,82,264,0 duplicate(WaterTrap#tt_main) flasher#n8-15 -1,1,0
-turbo_n_8,47,185,0 duplicate(WaterTrap#tt_main) flasher#n8-16 -1,0,1
-turbo_n_8,53,207,0 duplicate(WaterTrap#tt_main) flasher#n8-17 -1,1,0
-turbo_n_8,54,208,0 duplicate(WaterTrap#tt_main) flasher#n8-18 -1,0,1
-turbo_n_8,81,247,0 duplicate(WaterTrap#tt_main) flasher#n8-19 -1,0,1
-turbo_n_8,105,257,0 duplicate(WaterTrap#tt_main) flasher#n8-20 -1,0,1
-turbo_n_8,95,242,0 duplicate(WaterTrap#tt_main) flasher#n8-21 -1,0,1
-turbo_n_8,77,232,0 duplicate(WaterTrap#tt_main) flasher#n8-22 -1,2,0
-turbo_n_8,67,222,0 duplicate(WaterTrap#tt_main) flasher#n8-23 -1,2,0
-turbo_n_8,83,206,0 duplicate(WaterTrap#tt_main) flasher#n8-24 -1,0,1
-turbo_n_8,95,224,0 duplicate(WaterTrap#tt_main) flasher#n8-25 -1,0,1
-turbo_n_8,106,220,0 duplicate(WaterTrap#tt_main) flasher#n8-26 -1,2,0
-turbo_n_8,93,191,0 duplicate(WaterTrap#tt_main) flasher#n8-27 -1,1,0
-turbo_n_8,94,192,0 duplicate(WaterTrap#tt_main) flasher#n8-28a -1,0,1
-turbo_n_8,46,214,0 duplicate(WaterTrap#tt_main) flasher#n8-28b -1,0,1
-turbo_n_8,16,247,0 duplicate(WaterTrap#tt_main) flasher#n8-29 -1,1,0
-turbo_n_8,58,268,0 duplicate(WaterTrap#tt_main) flasher#n8-30 -1,1,1
-turbo_n_8,36,253,0 duplicate(WaterTrap#tt_main) flasher#n8-31 -1,1,0
-turbo_n_8,69,238,0 duplicate(WaterTrap#tt_main) flasher#n8-32 -1,1,1
-turbo_n_8,58,268,0 duplicate(WaterTrap#tt_main) flasher#n8-33 -1,1,1
-turbo_n_8,74,188,0 duplicate(WaterTrap#tt_main) flasher#n8-34 -1,2,0
-turbo_n_8,99,207,0 duplicate(WaterTrap#tt_main) flasher#n8-35 -1,1,1
-turbo_n_8,74,188,0 duplicate(WaterTrap#tt_main) flasher#n8-36 -1,2,0
-turbo_n_8,111,188,0 duplicate(WaterTrap#tt_main) flasher#n8-37a -1,1,0
-turbo_n_8,51,232,0 duplicate(WaterTrap#tt_main) flasher#n8-37b -1,1,1
-turbo_n_8,30,232,0 duplicate(WaterTrap#tt_main) flasher#n8-38 -1,1,1
-turbo_n_8,92,256,0 duplicate(WaterTrap#tt_main) flasher#n8-39 -1,1,1
-turbo_n_8,79,220,0 duplicate(WaterTrap#tt_main) flasher#n8-40 -1,1,1
-turbo_n_8,51,192,0 duplicate(WaterTrap#tt_main) flasher#n8-41 -1,1,1
-turbo_n_8,22,227,0 duplicate(WaterTrap#tt_main) flasher#n8-42 -1,1,1
-turbo_n_8,51,232,0 duplicate(WaterTrap#tt_main) flasher#n8-43 -1,1,1
-turbo_n_8,42,258,0 duplicate(WaterTrap#tt_main) flasher#n8-44 -1,1,0
-turbo_n_8,45,271,0 duplicate(WaterTrap#tt_main) flasher#n8-45 -1,2,1
-turbo_n_8,72,207,0 duplicate(WaterTrap#tt_main) flasher#n8-46 -1,1,1
-turbo_n_8,33,192,0 duplicate(WaterTrap#tt_main) flasher#n8-47 -1,0,1
-turbo_n_8,90,241,0 duplicate(WaterTrap#tt_main) flasher#n8-48a -1,1,0
-turbo_n_8,236,3,0 duplicate(WaterTrap#tt_main) flasher#n8-48b -1,3,0
-turbo_n_16,13,266,0 duplicate(WaterTrap#tt_main) flasher#n16-01 -1,0,2
-turbo_n_16,24,268,0 duplicate(WaterTrap#tt_main) flasher#n16-02 -1,1,0
-turbo_n_16,20,258,0 duplicate(WaterTrap#tt_main) flasher#n16-03 -1,1,0
-turbo_n_16,23,251,0 duplicate(WaterTrap#tt_main) flasher#n16-04 -1,0,1
-turbo_n_16,36,270,0 duplicate(WaterTrap#tt_main) flasher#n16-05 -1,1,0
-turbo_n_16,22,239,0 duplicate(WaterTrap#tt_main) flasher#n16-06 -1,1,0
-turbo_n_16,38,239,0 duplicate(WaterTrap#tt_main) flasher#n16-07 -1,0,1
-turbo_n_16,37,237,0 duplicate(WaterTrap#tt_main) flasher#n16-08 -1,1,0
-turbo_n_16,55,247,0 duplicate(WaterTrap#tt_main) flasher#n16-09 -1,0,1
-turbo_n_16,55,246,0 duplicate(WaterTrap#tt_main) flasher#n16-10 -1,1,0
-turbo_n_16,63,253,0 duplicate(WaterTrap#tt_main) flasher#n16-11 -1,0,1
-turbo_n_16,36,216,0 duplicate(WaterTrap#tt_main) flasher#n16-12 -1,1,0
-turbo_n_16,20,209,0 duplicate(WaterTrap#tt_main) flasher#n16-13 -1,1,0
-turbo_n_16,28,195,0 duplicate(WaterTrap#tt_main) flasher#n16-14 -1,1,0
-turbo_n_16,82,264,0 duplicate(WaterTrap#tt_main) flasher#n16-15 -1,1,0
-turbo_n_16,47,185,0 duplicate(WaterTrap#tt_main) flasher#n16-16 -1,0,1
-turbo_n_16,53,207,0 duplicate(WaterTrap#tt_main) flasher#n16-17 -1,1,0
-turbo_n_16,54,208,0 duplicate(WaterTrap#tt_main) flasher#n16-18 -1,0,1
-turbo_n_16,81,247,0 duplicate(WaterTrap#tt_main) flasher#n16-19 -1,0,1
-turbo_n_16,105,257,0 duplicate(WaterTrap#tt_main) flasher#n16-20 -1,0,1
-turbo_n_16,95,242,0 duplicate(WaterTrap#tt_main) flasher#n16-21 -1,0,1
-turbo_n_16,77,232,0 duplicate(WaterTrap#tt_main) flasher#n16-22 -1,2,0
-turbo_n_16,67,222,0 duplicate(WaterTrap#tt_main) flasher#n16-23 -1,2,0
-turbo_n_16,83,206,0 duplicate(WaterTrap#tt_main) flasher#n16-24 -1,0,1
-turbo_n_16,95,224,0 duplicate(WaterTrap#tt_main) flasher#n16-25 -1,0,1
-turbo_n_16,106,220,0 duplicate(WaterTrap#tt_main) flasher#n16-26 -1,2,0
-turbo_n_16,93,191,0 duplicate(WaterTrap#tt_main) flasher#n16-27 -1,1,0
-turbo_n_16,94,192,0 duplicate(WaterTrap#tt_main) flasher#n16-28a -1,0,1
-turbo_n_16,46,214,0 duplicate(WaterTrap#tt_main) flasher#n16-28b -1,0,1
-turbo_n_16,16,247,0 duplicate(WaterTrap#tt_main) flasher#n16-29 -1,1,0
-turbo_n_16,58,268,0 duplicate(WaterTrap#tt_main) flasher#n16-30 -1,1,1
-turbo_n_16,36,253,0 duplicate(WaterTrap#tt_main) flasher#n16-31 -1,1,0
-turbo_n_16,69,238,0 duplicate(WaterTrap#tt_main) flasher#n16-32 -1,1,1
-turbo_n_16,58,268,0 duplicate(WaterTrap#tt_main) flasher#n16-33 -1,1,1
-turbo_n_16,74,188,0 duplicate(WaterTrap#tt_main) flasher#n16-34 -1,2,0
-turbo_n_16,99,207,0 duplicate(WaterTrap#tt_main) flasher#n16-35 -1,1,1
-turbo_n_16,74,188,0 duplicate(WaterTrap#tt_main) flasher#n16-36 -1,2,0
-turbo_n_16,111,188,0 duplicate(WaterTrap#tt_main) flasher#n16-37a -1,1,0
-turbo_n_16,51,232,0 duplicate(WaterTrap#tt_main) flasher#n16-37b -1,1,1
-turbo_n_16,30,232,0 duplicate(WaterTrap#tt_main) flasher#n16-38 -1,1,1
-turbo_n_16,92,256,0 duplicate(WaterTrap#tt_main) flasher#n16-39 -1,1,1
-turbo_n_16,79,220,0 duplicate(WaterTrap#tt_main) flasher#n16-40 -1,1,1
-turbo_n_16,51,192,0 duplicate(WaterTrap#tt_main) flasher#n16-41 -1,1,1
-turbo_n_16,22,227,0 duplicate(WaterTrap#tt_main) flasher#n16-42 -1,1,1
-turbo_n_16,51,232,0 duplicate(WaterTrap#tt_main) flasher#n16-43 -1,1,1
-turbo_n_16,42,258,0 duplicate(WaterTrap#tt_main) flasher#n16-44 -1,1,0
-turbo_n_16,45,271,0 duplicate(WaterTrap#tt_main) flasher#n16-45 -1,2,1
-turbo_n_16,72,207,0 duplicate(WaterTrap#tt_main) flasher#n16-46 -1,1,1
-turbo_n_16,33,192,0 duplicate(WaterTrap#tt_main) flasher#n16-47 -1,0,1
-turbo_n_16,90,241,0 duplicate(WaterTrap#tt_main) flasher#n16-48a -1,1,0
-turbo_n_16,236,3,0 duplicate(WaterTrap#tt_main) flasher#n16-48b -1,3,0
-turbo_n_1,13,266,0 duplicate(WaterTrap#tt_main) flasher#n1-01 -1,0,2
-turbo_n_1,24,268,0 duplicate(WaterTrap#tt_main) flasher#n1-02 -1,1,0
-turbo_n_1,20,258,0 duplicate(WaterTrap#tt_main) flasher#n1-03 -1,1,0
-turbo_n_1,23,251,0 duplicate(WaterTrap#tt_main) flasher#n1-04 -1,0,1
-turbo_n_1,36,270,0 duplicate(WaterTrap#tt_main) flasher#n1-05 -1,1,0
-turbo_n_1,22,239,0 duplicate(WaterTrap#tt_main) flasher#n1-06 -1,1,0
-turbo_n_1,38,239,0 duplicate(WaterTrap#tt_main) flasher#n1-07 -1,0,1
-turbo_n_1,37,237,0 duplicate(WaterTrap#tt_main) flasher#n1-08 -1,1,0
-turbo_n_1,55,247,0 duplicate(WaterTrap#tt_main) flasher#n1-09 -1,0,1
-turbo_n_1,55,246,0 duplicate(WaterTrap#tt_main) flasher#n1-10 -1,1,0
-turbo_n_1,63,253,0 duplicate(WaterTrap#tt_main) flasher#n1-11 -1,0,1
-turbo_n_1,36,216,0 duplicate(WaterTrap#tt_main) flasher#n1-12 -1,1,0
-turbo_n_1,20,209,0 duplicate(WaterTrap#tt_main) flasher#n1-13 -1,1,0
-turbo_n_1,28,195,0 duplicate(WaterTrap#tt_main) flasher#n1-14 -1,1,0
-turbo_n_1,82,264,0 duplicate(WaterTrap#tt_main) flasher#n1-15 -1,1,0
-turbo_n_1,47,185,0 duplicate(WaterTrap#tt_main) flasher#n1-16 -1,0,1
-turbo_n_1,53,207,0 duplicate(WaterTrap#tt_main) flasher#n1-17 -1,1,0
-turbo_n_1,54,208,0 duplicate(WaterTrap#tt_main) flasher#n1-18 -1,0,1
-turbo_n_1,81,247,0 duplicate(WaterTrap#tt_main) flasher#n1-19 -1,0,1
-turbo_n_1,105,257,0 duplicate(WaterTrap#tt_main) flasher#n1-20 -1,0,1
-turbo_n_1,95,242,0 duplicate(WaterTrap#tt_main) flasher#n1-21 -1,0,1
-turbo_n_1,77,232,0 duplicate(WaterTrap#tt_main) flasher#n1-22 -1,2,0
-turbo_n_1,67,222,0 duplicate(WaterTrap#tt_main) flasher#n1-23 -1,2,0
-turbo_n_1,83,206,0 duplicate(WaterTrap#tt_main) flasher#n1-24 -1,0,1
-turbo_n_1,95,224,0 duplicate(WaterTrap#tt_main) flasher#n1-25 -1,0,1
-turbo_n_1,106,220,0 duplicate(WaterTrap#tt_main) flasher#n1-26 -1,2,0
-turbo_n_1,93,191,0 duplicate(WaterTrap#tt_main) flasher#n1-27 -1,1,0
-turbo_n_1,94,192,0 duplicate(WaterTrap#tt_main) flasher#n1-28a -1,0,1
-turbo_n_1,46,214,0 duplicate(WaterTrap#tt_main) flasher#n1-28b -1,0,1
-turbo_n_1,16,247,0 duplicate(WaterTrap#tt_main) flasher#n1-29 -1,1,0
-turbo_n_1,58,268,0 duplicate(WaterTrap#tt_main) flasher#n1-30 -1,1,1
-turbo_n_1,36,253,0 duplicate(WaterTrap#tt_main) flasher#n1-31 -1,1,0
-turbo_n_1,69,238,0 duplicate(WaterTrap#tt_main) flasher#n1-32 -1,1,1
-turbo_n_1,58,268,0 duplicate(WaterTrap#tt_main) flasher#n1-33 -1,1,1
-turbo_n_1,74,188,0 duplicate(WaterTrap#tt_main) flasher#n1-34 -1,2,0
-turbo_n_1,99,207,0 duplicate(WaterTrap#tt_main) flasher#n1-35 -1,1,1
-turbo_n_1,74,188,0 duplicate(WaterTrap#tt_main) flasher#n1-36 -1,2,0
-turbo_n_1,111,188,0 duplicate(WaterTrap#tt_main) flasher#n1-37a -1,1,0
-turbo_n_1,51,232,0 duplicate(WaterTrap#tt_main) flasher#n1-37b -1,1,1
-turbo_n_1,30,232,0 duplicate(WaterTrap#tt_main) flasher#n1-38 -1,1,1
-turbo_n_1,92,256,0 duplicate(WaterTrap#tt_main) flasher#n1-39 -1,1,1
-turbo_n_1,79,220,0 duplicate(WaterTrap#tt_main) flasher#n1-40 -1,1,1
-turbo_n_1,51,192,0 duplicate(WaterTrap#tt_main) flasher#n1-41 -1,1,1
-turbo_n_1,22,227,0 duplicate(WaterTrap#tt_main) flasher#n1-42 -1,1,1
-turbo_n_1,51,232,0 duplicate(WaterTrap#tt_main) flasher#n1-43 -1,1,1
-turbo_n_1,42,258,0 duplicate(WaterTrap#tt_main) flasher#n1-44 -1,1,0
-turbo_n_1,45,271,0 duplicate(WaterTrap#tt_main) flasher#n1-45 -1,2,1
-turbo_n_1,72,207,0 duplicate(WaterTrap#tt_main) flasher#n1-46 -1,1,1
-turbo_n_1,33,192,0 duplicate(WaterTrap#tt_main) flasher#n1-47 -1,0,1
-turbo_n_1,90,241,0 duplicate(WaterTrap#tt_main) flasher#n1-48a -1,1,0
-turbo_n_1,236,3,0 duplicate(WaterTrap#tt_main) flasher#n1-48b -1,3,0
-
-- script snake01#tt_main -1,{
+turbo_e_4,13,266,0 duplicate(WaterTrap#tt_main) flasher#e4-01 FAKE_NPC,0,2
+turbo_e_4,24,268,0 duplicate(WaterTrap#tt_main) flasher#e4-02 FAKE_NPC,1,0
+turbo_e_4,20,258,0 duplicate(WaterTrap#tt_main) flasher#e4-03 FAKE_NPC,1,0
+turbo_e_4,23,251,0 duplicate(WaterTrap#tt_main) flasher#e4-04 FAKE_NPC,0,1
+turbo_e_4,36,270,0 duplicate(WaterTrap#tt_main) flasher#e4-05 FAKE_NPC,1,0
+turbo_e_4,22,239,0 duplicate(WaterTrap#tt_main) flasher#e4-06 FAKE_NPC,1,0
+turbo_e_4,38,239,0 duplicate(WaterTrap#tt_main) flasher#e4-07 FAKE_NPC,0,1
+turbo_e_4,37,237,0 duplicate(WaterTrap#tt_main) flasher#e4-08 FAKE_NPC,1,0
+turbo_e_4,55,247,0 duplicate(WaterTrap#tt_main) flasher#e4-09 FAKE_NPC,0,1
+turbo_e_4,55,246,0 duplicate(WaterTrap#tt_main) flasher#e4-10 FAKE_NPC,1,0
+turbo_e_4,63,253,0 duplicate(WaterTrap#tt_main) flasher#e4-11 FAKE_NPC,0,1
+turbo_e_4,36,216,0 duplicate(WaterTrap#tt_main) flasher#e4-12 FAKE_NPC,1,0
+turbo_e_4,20,209,0 duplicate(WaterTrap#tt_main) flasher#e4-13 FAKE_NPC,1,0
+turbo_e_4,28,195,0 duplicate(WaterTrap#tt_main) flasher#e4-14 FAKE_NPC,1,0
+turbo_e_4,82,264,0 duplicate(WaterTrap#tt_main) flasher#e4-15 FAKE_NPC,1,0
+turbo_e_4,47,185,0 duplicate(WaterTrap#tt_main) flasher#e4-16 FAKE_NPC,0,1
+turbo_e_4,53,207,0 duplicate(WaterTrap#tt_main) flasher#e4-17 FAKE_NPC,1,0
+turbo_e_4,54,208,0 duplicate(WaterTrap#tt_main) flasher#e4-18 FAKE_NPC,0,1
+turbo_e_4,81,247,0 duplicate(WaterTrap#tt_main) flasher#e4-19 FAKE_NPC,0,1
+turbo_e_4,105,257,0 duplicate(WaterTrap#tt_main) flasher#e4-20 FAKE_NPC,0,1
+turbo_e_4,95,242,0 duplicate(WaterTrap#tt_main) flasher#e4-21 FAKE_NPC,0,1
+turbo_e_4,77,232,0 duplicate(WaterTrap#tt_main) flasher#e4-22 FAKE_NPC,2,0
+turbo_e_4,67,222,0 duplicate(WaterTrap#tt_main) flasher#e4-23 FAKE_NPC,2,0
+turbo_e_4,83,206,0 duplicate(WaterTrap#tt_main) flasher#e4-24 FAKE_NPC,0,1
+turbo_e_4,95,224,0 duplicate(WaterTrap#tt_main) flasher#e4-25 FAKE_NPC,0,1
+turbo_e_4,106,220,0 duplicate(WaterTrap#tt_main) flasher#e4-26 FAKE_NPC,2,0
+turbo_e_4,93,191,0 duplicate(WaterTrap#tt_main) flasher#e4-27 FAKE_NPC,1,0
+turbo_e_4,94,192,0 duplicate(WaterTrap#tt_main) flasher#e4-28a FAKE_NPC,0,1
+turbo_e_4,46,214,0 duplicate(WaterTrap#tt_main) flasher#e4-28b FAKE_NPC,0,1
+turbo_e_4,16,247,0 duplicate(WaterTrap#tt_main) flasher#e4-29 FAKE_NPC,1,0
+turbo_e_4,58,268,0 duplicate(WaterTrap#tt_main) flasher#e4-30 FAKE_NPC,1,1
+turbo_e_4,36,253,0 duplicate(WaterTrap#tt_main) flasher#e4-31 FAKE_NPC,1,0
+turbo_e_4,69,238,0 duplicate(WaterTrap#tt_main) flasher#e4-32 FAKE_NPC,1,1
+turbo_e_4,58,268,0 duplicate(WaterTrap#tt_main) flasher#e4-33 FAKE_NPC,1,1
+turbo_e_4,74,188,0 duplicate(WaterTrap#tt_main) flasher#e4-34 FAKE_NPC,2,0
+turbo_e_4,99,207,0 duplicate(WaterTrap#tt_main) flasher#e4-35 FAKE_NPC,1,1
+turbo_e_4,74,188,0 duplicate(WaterTrap#tt_main) flasher#e4-36 FAKE_NPC,2,0
+turbo_e_4,111,188,0 duplicate(WaterTrap#tt_main) flasher#e4-37a FAKE_NPC,1,0
+turbo_e_4,51,232,0 duplicate(WaterTrap#tt_main) flasher#e4-37b FAKE_NPC,1,1
+turbo_e_4,30,232,0 duplicate(WaterTrap#tt_main) flasher#e4-38 FAKE_NPC,1,1
+turbo_e_4,92,256,0 duplicate(WaterTrap#tt_main) flasher#e4-39 FAKE_NPC,1,1
+turbo_e_4,79,220,0 duplicate(WaterTrap#tt_main) flasher#e4-40 FAKE_NPC,1,1
+turbo_e_4,51,192,0 duplicate(WaterTrap#tt_main) flasher#e4-41 FAKE_NPC,1,1
+turbo_e_4,22,227,0 duplicate(WaterTrap#tt_main) flasher#e4-42 FAKE_NPC,1,1
+turbo_e_4,51,232,0 duplicate(WaterTrap#tt_main) flasher#e4-43 FAKE_NPC,1,1
+turbo_e_4,42,258,0 duplicate(WaterTrap#tt_main) flasher#e4-44 FAKE_NPC,1,0
+turbo_e_4,45,271,0 duplicate(WaterTrap#tt_main) flasher#e4-45 FAKE_NPC,2,1
+turbo_e_4,72,207,0 duplicate(WaterTrap#tt_main) flasher#e4-46 FAKE_NPC,1,1
+turbo_e_4,33,192,0 duplicate(WaterTrap#tt_main) flasher#e4-47 FAKE_NPC,0,1
+turbo_e_4,90,241,0 duplicate(WaterTrap#tt_main) flasher#e4-48a FAKE_NPC,1,0
+turbo_e_4,236,3,0 duplicate(WaterTrap#tt_main) flasher#e4-48b FAKE_NPC,3,0
+turbo_e_8,13,266,0 duplicate(WaterTrap#tt_main) flasher#e8-01 FAKE_NPC,0,2
+turbo_e_8,24,268,0 duplicate(WaterTrap#tt_main) flasher#e8-02 FAKE_NPC,1,0
+turbo_e_8,20,258,0 duplicate(WaterTrap#tt_main) flasher#e8-03 FAKE_NPC,1,0
+turbo_e_8,23,251,0 duplicate(WaterTrap#tt_main) flasher#e8-04 FAKE_NPC,0,1
+turbo_e_8,36,270,0 duplicate(WaterTrap#tt_main) flasher#e8-05 FAKE_NPC,1,0
+turbo_e_8,22,239,0 duplicate(WaterTrap#tt_main) flasher#e8-06 FAKE_NPC,1,0
+turbo_e_8,38,239,0 duplicate(WaterTrap#tt_main) flasher#e8-07 FAKE_NPC,0,1
+turbo_e_8,37,237,0 duplicate(WaterTrap#tt_main) flasher#e8-08 FAKE_NPC,1,0
+turbo_e_8,55,247,0 duplicate(WaterTrap#tt_main) flasher#e8-09 FAKE_NPC,0,1
+turbo_e_8,55,246,0 duplicate(WaterTrap#tt_main) flasher#e8-10 FAKE_NPC,1,0
+turbo_e_8,63,253,0 duplicate(WaterTrap#tt_main) flasher#e8-11 FAKE_NPC,0,1
+turbo_e_8,36,216,0 duplicate(WaterTrap#tt_main) flasher#e8-12 FAKE_NPC,1,0
+turbo_e_8,20,209,0 duplicate(WaterTrap#tt_main) flasher#e8-13 FAKE_NPC,1,0
+turbo_e_8,28,195,0 duplicate(WaterTrap#tt_main) flasher#e8-14 FAKE_NPC,1,0
+turbo_e_8,82,264,0 duplicate(WaterTrap#tt_main) flasher#e8-15 FAKE_NPC,1,0
+turbo_e_8,47,185,0 duplicate(WaterTrap#tt_main) flasher#e8-16 FAKE_NPC,0,1
+turbo_e_8,53,207,0 duplicate(WaterTrap#tt_main) flasher#e8-17 FAKE_NPC,1,0
+turbo_e_8,54,208,0 duplicate(WaterTrap#tt_main) flasher#e8-18 FAKE_NPC,0,1
+turbo_e_8,81,247,0 duplicate(WaterTrap#tt_main) flasher#e8-19 FAKE_NPC,0,1
+turbo_e_8,105,257,0 duplicate(WaterTrap#tt_main) flasher#e8-20 FAKE_NPC,0,1
+turbo_e_8,95,242,0 duplicate(WaterTrap#tt_main) flasher#e8-21 FAKE_NPC,0,1
+turbo_e_8,77,232,0 duplicate(WaterTrap#tt_main) flasher#e8-22 FAKE_NPC,2,0
+turbo_e_8,67,222,0 duplicate(WaterTrap#tt_main) flasher#e8-23 FAKE_NPC,2,0
+turbo_e_8,83,206,0 duplicate(WaterTrap#tt_main) flasher#e8-24 FAKE_NPC,0,1
+turbo_e_8,95,224,0 duplicate(WaterTrap#tt_main) flasher#e8-25 FAKE_NPC,0,1
+turbo_e_8,106,220,0 duplicate(WaterTrap#tt_main) flasher#e8-26 FAKE_NPC,2,0
+turbo_e_8,93,191,0 duplicate(WaterTrap#tt_main) flasher#e8-27 FAKE_NPC,1,0
+turbo_e_8,94,192,0 duplicate(WaterTrap#tt_main) flasher#e8-28a FAKE_NPC,0,1
+turbo_e_8,46,214,0 duplicate(WaterTrap#tt_main) flasher#e8-28b FAKE_NPC,0,1
+turbo_e_8,16,247,0 duplicate(WaterTrap#tt_main) flasher#e8-29 FAKE_NPC,1,0
+turbo_e_8,58,268,0 duplicate(WaterTrap#tt_main) flasher#e8-30 FAKE_NPC,1,1
+turbo_e_8,36,253,0 duplicate(WaterTrap#tt_main) flasher#e8-31 FAKE_NPC,1,0
+turbo_e_8,69,238,0 duplicate(WaterTrap#tt_main) flasher#e8-32 FAKE_NPC,1,1
+turbo_e_8,58,268,0 duplicate(WaterTrap#tt_main) flasher#e8-33 FAKE_NPC,1,1
+turbo_e_8,74,188,0 duplicate(WaterTrap#tt_main) flasher#e8-34 FAKE_NPC,2,0
+turbo_e_8,99,207,0 duplicate(WaterTrap#tt_main) flasher#e8-35 FAKE_NPC,1,1
+turbo_e_8,74,188,0 duplicate(WaterTrap#tt_main) flasher#e8-36 FAKE_NPC,2,0
+turbo_e_8,111,188,0 duplicate(WaterTrap#tt_main) flasher#e8-37a FAKE_NPC,1,0
+turbo_e_8,51,232,0 duplicate(WaterTrap#tt_main) flasher#e8-37b FAKE_NPC,1,1
+turbo_e_8,30,232,0 duplicate(WaterTrap#tt_main) flasher#e8-38 FAKE_NPC,1,1
+turbo_e_8,92,256,0 duplicate(WaterTrap#tt_main) flasher#e8-39 FAKE_NPC,1,1
+turbo_e_8,79,220,0 duplicate(WaterTrap#tt_main) flasher#e8-40 FAKE_NPC,1,1
+turbo_e_8,51,192,0 duplicate(WaterTrap#tt_main) flasher#e8-41 FAKE_NPC,1,1
+turbo_e_8,22,227,0 duplicate(WaterTrap#tt_main) flasher#e8-42 FAKE_NPC,1,1
+turbo_e_8,51,232,0 duplicate(WaterTrap#tt_main) flasher#e8-43 FAKE_NPC,1,1
+turbo_e_8,42,258,0 duplicate(WaterTrap#tt_main) flasher#e8-44 FAKE_NPC,1,0
+turbo_e_8,45,271,0 duplicate(WaterTrap#tt_main) flasher#e8-45 FAKE_NPC,2,1
+turbo_e_8,72,207,0 duplicate(WaterTrap#tt_main) flasher#e8-46 FAKE_NPC,1,1
+turbo_e_8,33,192,0 duplicate(WaterTrap#tt_main) flasher#e8-47 FAKE_NPC,0,1
+turbo_e_8,90,241,0 duplicate(WaterTrap#tt_main) flasher#e8-48a FAKE_NPC,1,0
+turbo_e_8,236,3,0 duplicate(WaterTrap#tt_main) flasher#e8-48b FAKE_NPC,3,0
+turbo_e_16,13,266,0 duplicate(WaterTrap#tt_main) flasher#e16-01 FAKE_NPC,0,2
+turbo_e_16,24,268,0 duplicate(WaterTrap#tt_main) flasher#e16-02 FAKE_NPC,1,0
+turbo_e_16,20,258,0 duplicate(WaterTrap#tt_main) flasher#e16-03 FAKE_NPC,1,0
+turbo_e_16,23,251,0 duplicate(WaterTrap#tt_main) flasher#e16-04 FAKE_NPC,0,1
+turbo_e_16,36,270,0 duplicate(WaterTrap#tt_main) flasher#e16-05 FAKE_NPC,1,0
+turbo_e_16,22,239,0 duplicate(WaterTrap#tt_main) flasher#e16-06 FAKE_NPC,1,0
+turbo_e_16,38,239,0 duplicate(WaterTrap#tt_main) flasher#e16-07 FAKE_NPC,0,1
+turbo_e_16,37,237,0 duplicate(WaterTrap#tt_main) flasher#e16-08 FAKE_NPC,1,0
+turbo_e_16,55,247,0 duplicate(WaterTrap#tt_main) flasher#e16-09 FAKE_NPC,0,1
+turbo_e_16,55,246,0 duplicate(WaterTrap#tt_main) flasher#e16-10 FAKE_NPC,1,0
+turbo_e_16,63,253,0 duplicate(WaterTrap#tt_main) flasher#e16-11 FAKE_NPC,0,1
+turbo_e_16,36,216,0 duplicate(WaterTrap#tt_main) flasher#e16-12 FAKE_NPC,1,0
+turbo_e_16,20,209,0 duplicate(WaterTrap#tt_main) flasher#e16-13 FAKE_NPC,1,0
+turbo_e_16,28,195,0 duplicate(WaterTrap#tt_main) flasher#e16-14 FAKE_NPC,1,0
+turbo_e_16,82,264,0 duplicate(WaterTrap#tt_main) flasher#e16-15 FAKE_NPC,1,0
+turbo_e_16,47,185,0 duplicate(WaterTrap#tt_main) flasher#e16-16 FAKE_NPC,0,1
+turbo_e_16,53,207,0 duplicate(WaterTrap#tt_main) flasher#e16-17 FAKE_NPC,1,0
+turbo_e_16,54,208,0 duplicate(WaterTrap#tt_main) flasher#e16-18 FAKE_NPC,0,1
+turbo_e_16,81,247,0 duplicate(WaterTrap#tt_main) flasher#e16-19 FAKE_NPC,0,1
+turbo_e_16,105,257,0 duplicate(WaterTrap#tt_main) flasher#e16-20 FAKE_NPC,0,1
+turbo_e_16,95,242,0 duplicate(WaterTrap#tt_main) flasher#e16-21 FAKE_NPC,0,1
+turbo_e_16,77,232,0 duplicate(WaterTrap#tt_main) flasher#e16-22 FAKE_NPC,2,0
+turbo_e_16,67,222,0 duplicate(WaterTrap#tt_main) flasher#e16-23 FAKE_NPC,2,0
+turbo_e_16,83,206,0 duplicate(WaterTrap#tt_main) flasher#e16-24 FAKE_NPC,0,1
+turbo_e_16,95,224,0 duplicate(WaterTrap#tt_main) flasher#e16-25 FAKE_NPC,0,1
+turbo_e_16,106,220,0 duplicate(WaterTrap#tt_main) flasher#e16-26 FAKE_NPC,2,0
+turbo_e_16,93,191,0 duplicate(WaterTrap#tt_main) flasher#e16-27 FAKE_NPC,1,0
+turbo_e_16,94,192,0 duplicate(WaterTrap#tt_main) flasher#e16-28a FAKE_NPC,0,1
+turbo_e_16,46,214,0 duplicate(WaterTrap#tt_main) flasher#e16-28b FAKE_NPC,0,1
+turbo_e_16,16,247,0 duplicate(WaterTrap#tt_main) flasher#e16-29 FAKE_NPC,1,0
+turbo_e_16,58,268,0 duplicate(WaterTrap#tt_main) flasher#e16-30 FAKE_NPC,1,1
+turbo_e_16,36,253,0 duplicate(WaterTrap#tt_main) flasher#e16-31 FAKE_NPC,1,0
+turbo_e_16,69,238,0 duplicate(WaterTrap#tt_main) flasher#e16-32 FAKE_NPC,1,1
+turbo_e_16,58,268,0 duplicate(WaterTrap#tt_main) flasher#e16-33 FAKE_NPC,1,1
+turbo_e_16,74,188,0 duplicate(WaterTrap#tt_main) flasher#e16-34 FAKE_NPC,2,0
+turbo_e_16,99,207,0 duplicate(WaterTrap#tt_main) flasher#e16-35 FAKE_NPC,1,1
+turbo_e_16,74,188,0 duplicate(WaterTrap#tt_main) flasher#e16-36 FAKE_NPC,2,0
+turbo_e_16,111,188,0 duplicate(WaterTrap#tt_main) flasher#e16-37a FAKE_NPC,1,0
+turbo_e_16,51,232,0 duplicate(WaterTrap#tt_main) flasher#e16-37b FAKE_NPC,1,1
+turbo_e_16,30,232,0 duplicate(WaterTrap#tt_main) flasher#e16-38 FAKE_NPC,1,1
+turbo_e_16,92,256,0 duplicate(WaterTrap#tt_main) flasher#e16-39 FAKE_NPC,1,1
+turbo_e_16,79,220,0 duplicate(WaterTrap#tt_main) flasher#e16-40 FAKE_NPC,1,1
+turbo_e_16,51,192,0 duplicate(WaterTrap#tt_main) flasher#e16-41 FAKE_NPC,1,1
+turbo_e_16,22,227,0 duplicate(WaterTrap#tt_main) flasher#e16-42 FAKE_NPC,1,1
+turbo_e_16,51,232,0 duplicate(WaterTrap#tt_main) flasher#e16-43 FAKE_NPC,1,1
+turbo_e_16,42,258,0 duplicate(WaterTrap#tt_main) flasher#e16-44 FAKE_NPC,1,0
+turbo_e_16,45,271,0 duplicate(WaterTrap#tt_main) flasher#e16-45 FAKE_NPC,2,1
+turbo_e_16,72,207,0 duplicate(WaterTrap#tt_main) flasher#e16-46 FAKE_NPC,1,1
+turbo_e_16,33,192,0 duplicate(WaterTrap#tt_main) flasher#e16-47 FAKE_NPC,0,1
+turbo_e_16,90,241,0 duplicate(WaterTrap#tt_main) flasher#e16-48a FAKE_NPC,1,0
+turbo_e_16,236,3,0 duplicate(WaterTrap#tt_main) flasher#e16-48b FAKE_NPC,3,0
+turbo_n_4,13,266,0 duplicate(WaterTrap#tt_main) flasher#n4-01 FAKE_NPC,0,2
+turbo_n_4,24,268,0 duplicate(WaterTrap#tt_main) flasher#n4-02 FAKE_NPC,1,0
+turbo_n_4,20,258,0 duplicate(WaterTrap#tt_main) flasher#n4-03 FAKE_NPC,1,0
+turbo_n_4,23,251,0 duplicate(WaterTrap#tt_main) flasher#n4-04 FAKE_NPC,0,1
+turbo_n_4,36,270,0 duplicate(WaterTrap#tt_main) flasher#n4-05 FAKE_NPC,1,0
+turbo_n_4,22,239,0 duplicate(WaterTrap#tt_main) flasher#n4-06 FAKE_NPC,1,0
+turbo_n_4,38,239,0 duplicate(WaterTrap#tt_main) flasher#n4-07 FAKE_NPC,0,1
+turbo_n_4,37,237,0 duplicate(WaterTrap#tt_main) flasher#n4-08 FAKE_NPC,1,0
+turbo_n_4,55,247,0 duplicate(WaterTrap#tt_main) flasher#n4-09 FAKE_NPC,0,1
+turbo_n_4,55,246,0 duplicate(WaterTrap#tt_main) flasher#n4-10 FAKE_NPC,1,0
+turbo_n_4,63,253,0 duplicate(WaterTrap#tt_main) flasher#n4-11 FAKE_NPC,0,1
+turbo_n_4,36,216,0 duplicate(WaterTrap#tt_main) flasher#n4-12 FAKE_NPC,1,0
+turbo_n_4,20,209,0 duplicate(WaterTrap#tt_main) flasher#n4-13 FAKE_NPC,1,0
+turbo_n_4,28,195,0 duplicate(WaterTrap#tt_main) flasher#n4-14 FAKE_NPC,1,0
+turbo_n_4,82,264,0 duplicate(WaterTrap#tt_main) flasher#n4-15 FAKE_NPC,1,0
+turbo_n_4,47,185,0 duplicate(WaterTrap#tt_main) flasher#n4-16 FAKE_NPC,0,1
+turbo_n_4,53,207,0 duplicate(WaterTrap#tt_main) flasher#n4-17 FAKE_NPC,1,0
+turbo_n_4,54,208,0 duplicate(WaterTrap#tt_main) flasher#n4-18 FAKE_NPC,0,1
+turbo_n_4,81,247,0 duplicate(WaterTrap#tt_main) flasher#n4-19 FAKE_NPC,0,1
+turbo_n_4,105,257,0 duplicate(WaterTrap#tt_main) flasher#n4-20 FAKE_NPC,0,1
+turbo_n_4,95,242,0 duplicate(WaterTrap#tt_main) flasher#n4-21 FAKE_NPC,0,1
+turbo_n_4,77,232,0 duplicate(WaterTrap#tt_main) flasher#n4-22 FAKE_NPC,2,0
+turbo_n_4,67,222,0 duplicate(WaterTrap#tt_main) flasher#n4-23 FAKE_NPC,2,0
+turbo_n_4,83,206,0 duplicate(WaterTrap#tt_main) flasher#n4-24 FAKE_NPC,0,1
+turbo_n_4,95,224,0 duplicate(WaterTrap#tt_main) flasher#n4-25 FAKE_NPC,0,1
+turbo_n_4,106,220,0 duplicate(WaterTrap#tt_main) flasher#n4-26 FAKE_NPC,2,0
+turbo_n_4,93,191,0 duplicate(WaterTrap#tt_main) flasher#n4-27 FAKE_NPC,1,0
+turbo_n_4,94,192,0 duplicate(WaterTrap#tt_main) flasher#n4-28a FAKE_NPC,0,1
+turbo_n_4,46,214,0 duplicate(WaterTrap#tt_main) flasher#n4-28b FAKE_NPC,0,1
+turbo_n_4,16,247,0 duplicate(WaterTrap#tt_main) flasher#n4-29 FAKE_NPC,1,0
+turbo_n_4,58,268,0 duplicate(WaterTrap#tt_main) flasher#n4-30 FAKE_NPC,1,1
+turbo_n_4,36,253,0 duplicate(WaterTrap#tt_main) flasher#n4-31 FAKE_NPC,1,0
+turbo_n_4,69,238,0 duplicate(WaterTrap#tt_main) flasher#n4-32 FAKE_NPC,1,1
+turbo_n_4,58,268,0 duplicate(WaterTrap#tt_main) flasher#n4-33 FAKE_NPC,1,1
+turbo_n_4,74,188,0 duplicate(WaterTrap#tt_main) flasher#n4-34 FAKE_NPC,2,0
+turbo_n_4,99,207,0 duplicate(WaterTrap#tt_main) flasher#n4-35 FAKE_NPC,1,1
+turbo_n_4,74,188,0 duplicate(WaterTrap#tt_main) flasher#n4-36 FAKE_NPC,2,0
+turbo_n_4,111,188,0 duplicate(WaterTrap#tt_main) flasher#n4-37a FAKE_NPC,1,0
+turbo_n_4,51,232,0 duplicate(WaterTrap#tt_main) flasher#n4-37b FAKE_NPC,1,1
+turbo_n_4,30,232,0 duplicate(WaterTrap#tt_main) flasher#n4-38 FAKE_NPC,1,1
+turbo_n_4,92,256,0 duplicate(WaterTrap#tt_main) flasher#n4-39 FAKE_NPC,1,1
+turbo_n_4,79,220,0 duplicate(WaterTrap#tt_main) flasher#n4-40 FAKE_NPC,1,1
+turbo_n_4,51,192,0 duplicate(WaterTrap#tt_main) flasher#n4-41 FAKE_NPC,1,1
+turbo_n_4,22,227,0 duplicate(WaterTrap#tt_main) flasher#n4-42 FAKE_NPC,1,1
+turbo_n_4,51,232,0 duplicate(WaterTrap#tt_main) flasher#n4-43 FAKE_NPC,1,1
+turbo_n_4,42,258,0 duplicate(WaterTrap#tt_main) flasher#n4-44 FAKE_NPC,1,0
+turbo_n_4,45,271,0 duplicate(WaterTrap#tt_main) flasher#n4-45 FAKE_NPC,2,1
+turbo_n_4,72,207,0 duplicate(WaterTrap#tt_main) flasher#n4-46 FAKE_NPC,1,1
+turbo_n_4,33,192,0 duplicate(WaterTrap#tt_main) flasher#n4-47 FAKE_NPC,0,1
+turbo_n_4,90,241,0 duplicate(WaterTrap#tt_main) flasher#n4-48a FAKE_NPC,1,0
+turbo_n_4,236,3,0 duplicate(WaterTrap#tt_main) flasher#n4-48b FAKE_NPC,3,0
+turbo_n_8,13,266,0 duplicate(WaterTrap#tt_main) flasher#n8-01 FAKE_NPC,0,2
+turbo_n_8,24,268,0 duplicate(WaterTrap#tt_main) flasher#n8-02 FAKE_NPC,1,0
+turbo_n_8,20,258,0 duplicate(WaterTrap#tt_main) flasher#n8-03 FAKE_NPC,1,0
+turbo_n_8,23,251,0 duplicate(WaterTrap#tt_main) flasher#n8-04 FAKE_NPC,0,1
+turbo_n_8,36,270,0 duplicate(WaterTrap#tt_main) flasher#n8-05 FAKE_NPC,1,0
+turbo_n_8,22,239,0 duplicate(WaterTrap#tt_main) flasher#n8-06 FAKE_NPC,1,0
+turbo_n_8,38,239,0 duplicate(WaterTrap#tt_main) flasher#n8-07 FAKE_NPC,0,1
+turbo_n_8,37,237,0 duplicate(WaterTrap#tt_main) flasher#n8-08 FAKE_NPC,1,0
+turbo_n_8,55,247,0 duplicate(WaterTrap#tt_main) flasher#n8-09 FAKE_NPC,0,1
+turbo_n_8,55,246,0 duplicate(WaterTrap#tt_main) flasher#n8-10 FAKE_NPC,1,0
+turbo_n_8,63,253,0 duplicate(WaterTrap#tt_main) flasher#n8-11 FAKE_NPC,0,1
+turbo_n_8,36,216,0 duplicate(WaterTrap#tt_main) flasher#n8-12 FAKE_NPC,1,0
+turbo_n_8,20,209,0 duplicate(WaterTrap#tt_main) flasher#n8-13 FAKE_NPC,1,0
+turbo_n_8,28,195,0 duplicate(WaterTrap#tt_main) flasher#n8-14 FAKE_NPC,1,0
+turbo_n_8,82,264,0 duplicate(WaterTrap#tt_main) flasher#n8-15 FAKE_NPC,1,0
+turbo_n_8,47,185,0 duplicate(WaterTrap#tt_main) flasher#n8-16 FAKE_NPC,0,1
+turbo_n_8,53,207,0 duplicate(WaterTrap#tt_main) flasher#n8-17 FAKE_NPC,1,0
+turbo_n_8,54,208,0 duplicate(WaterTrap#tt_main) flasher#n8-18 FAKE_NPC,0,1
+turbo_n_8,81,247,0 duplicate(WaterTrap#tt_main) flasher#n8-19 FAKE_NPC,0,1
+turbo_n_8,105,257,0 duplicate(WaterTrap#tt_main) flasher#n8-20 FAKE_NPC,0,1
+turbo_n_8,95,242,0 duplicate(WaterTrap#tt_main) flasher#n8-21 FAKE_NPC,0,1
+turbo_n_8,77,232,0 duplicate(WaterTrap#tt_main) flasher#n8-22 FAKE_NPC,2,0
+turbo_n_8,67,222,0 duplicate(WaterTrap#tt_main) flasher#n8-23 FAKE_NPC,2,0
+turbo_n_8,83,206,0 duplicate(WaterTrap#tt_main) flasher#n8-24 FAKE_NPC,0,1
+turbo_n_8,95,224,0 duplicate(WaterTrap#tt_main) flasher#n8-25 FAKE_NPC,0,1
+turbo_n_8,106,220,0 duplicate(WaterTrap#tt_main) flasher#n8-26 FAKE_NPC,2,0
+turbo_n_8,93,191,0 duplicate(WaterTrap#tt_main) flasher#n8-27 FAKE_NPC,1,0
+turbo_n_8,94,192,0 duplicate(WaterTrap#tt_main) flasher#n8-28a FAKE_NPC,0,1
+turbo_n_8,46,214,0 duplicate(WaterTrap#tt_main) flasher#n8-28b FAKE_NPC,0,1
+turbo_n_8,16,247,0 duplicate(WaterTrap#tt_main) flasher#n8-29 FAKE_NPC,1,0
+turbo_n_8,58,268,0 duplicate(WaterTrap#tt_main) flasher#n8-30 FAKE_NPC,1,1
+turbo_n_8,36,253,0 duplicate(WaterTrap#tt_main) flasher#n8-31 FAKE_NPC,1,0
+turbo_n_8,69,238,0 duplicate(WaterTrap#tt_main) flasher#n8-32 FAKE_NPC,1,1
+turbo_n_8,58,268,0 duplicate(WaterTrap#tt_main) flasher#n8-33 FAKE_NPC,1,1
+turbo_n_8,74,188,0 duplicate(WaterTrap#tt_main) flasher#n8-34 FAKE_NPC,2,0
+turbo_n_8,99,207,0 duplicate(WaterTrap#tt_main) flasher#n8-35 FAKE_NPC,1,1
+turbo_n_8,74,188,0 duplicate(WaterTrap#tt_main) flasher#n8-36 FAKE_NPC,2,0
+turbo_n_8,111,188,0 duplicate(WaterTrap#tt_main) flasher#n8-37a FAKE_NPC,1,0
+turbo_n_8,51,232,0 duplicate(WaterTrap#tt_main) flasher#n8-37b FAKE_NPC,1,1
+turbo_n_8,30,232,0 duplicate(WaterTrap#tt_main) flasher#n8-38 FAKE_NPC,1,1
+turbo_n_8,92,256,0 duplicate(WaterTrap#tt_main) flasher#n8-39 FAKE_NPC,1,1
+turbo_n_8,79,220,0 duplicate(WaterTrap#tt_main) flasher#n8-40 FAKE_NPC,1,1
+turbo_n_8,51,192,0 duplicate(WaterTrap#tt_main) flasher#n8-41 FAKE_NPC,1,1
+turbo_n_8,22,227,0 duplicate(WaterTrap#tt_main) flasher#n8-42 FAKE_NPC,1,1
+turbo_n_8,51,232,0 duplicate(WaterTrap#tt_main) flasher#n8-43 FAKE_NPC,1,1
+turbo_n_8,42,258,0 duplicate(WaterTrap#tt_main) flasher#n8-44 FAKE_NPC,1,0
+turbo_n_8,45,271,0 duplicate(WaterTrap#tt_main) flasher#n8-45 FAKE_NPC,2,1
+turbo_n_8,72,207,0 duplicate(WaterTrap#tt_main) flasher#n8-46 FAKE_NPC,1,1
+turbo_n_8,33,192,0 duplicate(WaterTrap#tt_main) flasher#n8-47 FAKE_NPC,0,1
+turbo_n_8,90,241,0 duplicate(WaterTrap#tt_main) flasher#n8-48a FAKE_NPC,1,0
+turbo_n_8,236,3,0 duplicate(WaterTrap#tt_main) flasher#n8-48b FAKE_NPC,3,0
+turbo_n_16,13,266,0 duplicate(WaterTrap#tt_main) flasher#n16-01 FAKE_NPC,0,2
+turbo_n_16,24,268,0 duplicate(WaterTrap#tt_main) flasher#n16-02 FAKE_NPC,1,0
+turbo_n_16,20,258,0 duplicate(WaterTrap#tt_main) flasher#n16-03 FAKE_NPC,1,0
+turbo_n_16,23,251,0 duplicate(WaterTrap#tt_main) flasher#n16-04 FAKE_NPC,0,1
+turbo_n_16,36,270,0 duplicate(WaterTrap#tt_main) flasher#n16-05 FAKE_NPC,1,0
+turbo_n_16,22,239,0 duplicate(WaterTrap#tt_main) flasher#n16-06 FAKE_NPC,1,0
+turbo_n_16,38,239,0 duplicate(WaterTrap#tt_main) flasher#n16-07 FAKE_NPC,0,1
+turbo_n_16,37,237,0 duplicate(WaterTrap#tt_main) flasher#n16-08 FAKE_NPC,1,0
+turbo_n_16,55,247,0 duplicate(WaterTrap#tt_main) flasher#n16-09 FAKE_NPC,0,1
+turbo_n_16,55,246,0 duplicate(WaterTrap#tt_main) flasher#n16-10 FAKE_NPC,1,0
+turbo_n_16,63,253,0 duplicate(WaterTrap#tt_main) flasher#n16-11 FAKE_NPC,0,1
+turbo_n_16,36,216,0 duplicate(WaterTrap#tt_main) flasher#n16-12 FAKE_NPC,1,0
+turbo_n_16,20,209,0 duplicate(WaterTrap#tt_main) flasher#n16-13 FAKE_NPC,1,0
+turbo_n_16,28,195,0 duplicate(WaterTrap#tt_main) flasher#n16-14 FAKE_NPC,1,0
+turbo_n_16,82,264,0 duplicate(WaterTrap#tt_main) flasher#n16-15 FAKE_NPC,1,0
+turbo_n_16,47,185,0 duplicate(WaterTrap#tt_main) flasher#n16-16 FAKE_NPC,0,1
+turbo_n_16,53,207,0 duplicate(WaterTrap#tt_main) flasher#n16-17 FAKE_NPC,1,0
+turbo_n_16,54,208,0 duplicate(WaterTrap#tt_main) flasher#n16-18 FAKE_NPC,0,1
+turbo_n_16,81,247,0 duplicate(WaterTrap#tt_main) flasher#n16-19 FAKE_NPC,0,1
+turbo_n_16,105,257,0 duplicate(WaterTrap#tt_main) flasher#n16-20 FAKE_NPC,0,1
+turbo_n_16,95,242,0 duplicate(WaterTrap#tt_main) flasher#n16-21 FAKE_NPC,0,1
+turbo_n_16,77,232,0 duplicate(WaterTrap#tt_main) flasher#n16-22 FAKE_NPC,2,0
+turbo_n_16,67,222,0 duplicate(WaterTrap#tt_main) flasher#n16-23 FAKE_NPC,2,0
+turbo_n_16,83,206,0 duplicate(WaterTrap#tt_main) flasher#n16-24 FAKE_NPC,0,1
+turbo_n_16,95,224,0 duplicate(WaterTrap#tt_main) flasher#n16-25 FAKE_NPC,0,1
+turbo_n_16,106,220,0 duplicate(WaterTrap#tt_main) flasher#n16-26 FAKE_NPC,2,0
+turbo_n_16,93,191,0 duplicate(WaterTrap#tt_main) flasher#n16-27 FAKE_NPC,1,0
+turbo_n_16,94,192,0 duplicate(WaterTrap#tt_main) flasher#n16-28a FAKE_NPC,0,1
+turbo_n_16,46,214,0 duplicate(WaterTrap#tt_main) flasher#n16-28b FAKE_NPC,0,1
+turbo_n_16,16,247,0 duplicate(WaterTrap#tt_main) flasher#n16-29 FAKE_NPC,1,0
+turbo_n_16,58,268,0 duplicate(WaterTrap#tt_main) flasher#n16-30 FAKE_NPC,1,1
+turbo_n_16,36,253,0 duplicate(WaterTrap#tt_main) flasher#n16-31 FAKE_NPC,1,0
+turbo_n_16,69,238,0 duplicate(WaterTrap#tt_main) flasher#n16-32 FAKE_NPC,1,1
+turbo_n_16,58,268,0 duplicate(WaterTrap#tt_main) flasher#n16-33 FAKE_NPC,1,1
+turbo_n_16,74,188,0 duplicate(WaterTrap#tt_main) flasher#n16-34 FAKE_NPC,2,0
+turbo_n_16,99,207,0 duplicate(WaterTrap#tt_main) flasher#n16-35 FAKE_NPC,1,1
+turbo_n_16,74,188,0 duplicate(WaterTrap#tt_main) flasher#n16-36 FAKE_NPC,2,0
+turbo_n_16,111,188,0 duplicate(WaterTrap#tt_main) flasher#n16-37a FAKE_NPC,1,0
+turbo_n_16,51,232,0 duplicate(WaterTrap#tt_main) flasher#n16-37b FAKE_NPC,1,1
+turbo_n_16,30,232,0 duplicate(WaterTrap#tt_main) flasher#n16-38 FAKE_NPC,1,1
+turbo_n_16,92,256,0 duplicate(WaterTrap#tt_main) flasher#n16-39 FAKE_NPC,1,1
+turbo_n_16,79,220,0 duplicate(WaterTrap#tt_main) flasher#n16-40 FAKE_NPC,1,1
+turbo_n_16,51,192,0 duplicate(WaterTrap#tt_main) flasher#n16-41 FAKE_NPC,1,1
+turbo_n_16,22,227,0 duplicate(WaterTrap#tt_main) flasher#n16-42 FAKE_NPC,1,1
+turbo_n_16,51,232,0 duplicate(WaterTrap#tt_main) flasher#n16-43 FAKE_NPC,1,1
+turbo_n_16,42,258,0 duplicate(WaterTrap#tt_main) flasher#n16-44 FAKE_NPC,1,0
+turbo_n_16,45,271,0 duplicate(WaterTrap#tt_main) flasher#n16-45 FAKE_NPC,2,1
+turbo_n_16,72,207,0 duplicate(WaterTrap#tt_main) flasher#n16-46 FAKE_NPC,1,1
+turbo_n_16,33,192,0 duplicate(WaterTrap#tt_main) flasher#n16-47 FAKE_NPC,0,1
+turbo_n_16,90,241,0 duplicate(WaterTrap#tt_main) flasher#n16-48a FAKE_NPC,1,0
+turbo_n_16,236,3,0 duplicate(WaterTrap#tt_main) flasher#n16-48b FAKE_NPC,3,0
+turbo_n_1,13,266,0 duplicate(WaterTrap#tt_main) flasher#n1-01 FAKE_NPC,0,2
+turbo_n_1,24,268,0 duplicate(WaterTrap#tt_main) flasher#n1-02 FAKE_NPC,1,0
+turbo_n_1,20,258,0 duplicate(WaterTrap#tt_main) flasher#n1-03 FAKE_NPC,1,0
+turbo_n_1,23,251,0 duplicate(WaterTrap#tt_main) flasher#n1-04 FAKE_NPC,0,1
+turbo_n_1,36,270,0 duplicate(WaterTrap#tt_main) flasher#n1-05 FAKE_NPC,1,0
+turbo_n_1,22,239,0 duplicate(WaterTrap#tt_main) flasher#n1-06 FAKE_NPC,1,0
+turbo_n_1,38,239,0 duplicate(WaterTrap#tt_main) flasher#n1-07 FAKE_NPC,0,1
+turbo_n_1,37,237,0 duplicate(WaterTrap#tt_main) flasher#n1-08 FAKE_NPC,1,0
+turbo_n_1,55,247,0 duplicate(WaterTrap#tt_main) flasher#n1-09 FAKE_NPC,0,1
+turbo_n_1,55,246,0 duplicate(WaterTrap#tt_main) flasher#n1-10 FAKE_NPC,1,0
+turbo_n_1,63,253,0 duplicate(WaterTrap#tt_main) flasher#n1-11 FAKE_NPC,0,1
+turbo_n_1,36,216,0 duplicate(WaterTrap#tt_main) flasher#n1-12 FAKE_NPC,1,0
+turbo_n_1,20,209,0 duplicate(WaterTrap#tt_main) flasher#n1-13 FAKE_NPC,1,0
+turbo_n_1,28,195,0 duplicate(WaterTrap#tt_main) flasher#n1-14 FAKE_NPC,1,0
+turbo_n_1,82,264,0 duplicate(WaterTrap#tt_main) flasher#n1-15 FAKE_NPC,1,0
+turbo_n_1,47,185,0 duplicate(WaterTrap#tt_main) flasher#n1-16 FAKE_NPC,0,1
+turbo_n_1,53,207,0 duplicate(WaterTrap#tt_main) flasher#n1-17 FAKE_NPC,1,0
+turbo_n_1,54,208,0 duplicate(WaterTrap#tt_main) flasher#n1-18 FAKE_NPC,0,1
+turbo_n_1,81,247,0 duplicate(WaterTrap#tt_main) flasher#n1-19 FAKE_NPC,0,1
+turbo_n_1,105,257,0 duplicate(WaterTrap#tt_main) flasher#n1-20 FAKE_NPC,0,1
+turbo_n_1,95,242,0 duplicate(WaterTrap#tt_main) flasher#n1-21 FAKE_NPC,0,1
+turbo_n_1,77,232,0 duplicate(WaterTrap#tt_main) flasher#n1-22 FAKE_NPC,2,0
+turbo_n_1,67,222,0 duplicate(WaterTrap#tt_main) flasher#n1-23 FAKE_NPC,2,0
+turbo_n_1,83,206,0 duplicate(WaterTrap#tt_main) flasher#n1-24 FAKE_NPC,0,1
+turbo_n_1,95,224,0 duplicate(WaterTrap#tt_main) flasher#n1-25 FAKE_NPC,0,1
+turbo_n_1,106,220,0 duplicate(WaterTrap#tt_main) flasher#n1-26 FAKE_NPC,2,0
+turbo_n_1,93,191,0 duplicate(WaterTrap#tt_main) flasher#n1-27 FAKE_NPC,1,0
+turbo_n_1,94,192,0 duplicate(WaterTrap#tt_main) flasher#n1-28a FAKE_NPC,0,1
+turbo_n_1,46,214,0 duplicate(WaterTrap#tt_main) flasher#n1-28b FAKE_NPC,0,1
+turbo_n_1,16,247,0 duplicate(WaterTrap#tt_main) flasher#n1-29 FAKE_NPC,1,0
+turbo_n_1,58,268,0 duplicate(WaterTrap#tt_main) flasher#n1-30 FAKE_NPC,1,1
+turbo_n_1,36,253,0 duplicate(WaterTrap#tt_main) flasher#n1-31 FAKE_NPC,1,0
+turbo_n_1,69,238,0 duplicate(WaterTrap#tt_main) flasher#n1-32 FAKE_NPC,1,1
+turbo_n_1,58,268,0 duplicate(WaterTrap#tt_main) flasher#n1-33 FAKE_NPC,1,1
+turbo_n_1,74,188,0 duplicate(WaterTrap#tt_main) flasher#n1-34 FAKE_NPC,2,0
+turbo_n_1,99,207,0 duplicate(WaterTrap#tt_main) flasher#n1-35 FAKE_NPC,1,1
+turbo_n_1,74,188,0 duplicate(WaterTrap#tt_main) flasher#n1-36 FAKE_NPC,2,0
+turbo_n_1,111,188,0 duplicate(WaterTrap#tt_main) flasher#n1-37a FAKE_NPC,1,0
+turbo_n_1,51,232,0 duplicate(WaterTrap#tt_main) flasher#n1-37b FAKE_NPC,1,1
+turbo_n_1,30,232,0 duplicate(WaterTrap#tt_main) flasher#n1-38 FAKE_NPC,1,1
+turbo_n_1,92,256,0 duplicate(WaterTrap#tt_main) flasher#n1-39 FAKE_NPC,1,1
+turbo_n_1,79,220,0 duplicate(WaterTrap#tt_main) flasher#n1-40 FAKE_NPC,1,1
+turbo_n_1,51,192,0 duplicate(WaterTrap#tt_main) flasher#n1-41 FAKE_NPC,1,1
+turbo_n_1,22,227,0 duplicate(WaterTrap#tt_main) flasher#n1-42 FAKE_NPC,1,1
+turbo_n_1,51,232,0 duplicate(WaterTrap#tt_main) flasher#n1-43 FAKE_NPC,1,1
+turbo_n_1,42,258,0 duplicate(WaterTrap#tt_main) flasher#n1-44 FAKE_NPC,1,0
+turbo_n_1,45,271,0 duplicate(WaterTrap#tt_main) flasher#n1-45 FAKE_NPC,2,1
+turbo_n_1,72,207,0 duplicate(WaterTrap#tt_main) flasher#n1-46 FAKE_NPC,1,1
+turbo_n_1,33,192,0 duplicate(WaterTrap#tt_main) flasher#n1-47 FAKE_NPC,0,1
+turbo_n_1,90,241,0 duplicate(WaterTrap#tt_main) flasher#n1-48a FAKE_NPC,1,0
+turbo_n_1,236,3,0 duplicate(WaterTrap#tt_main) flasher#n1-48b FAKE_NPC,3,0
+
+- script snake01#tt_main FAKE_NPC,{
OnTouch:
.@turbo2 = rand(1,7);
if (.@turbo2 < 3) warp strnpcinfo(4),370,292;
@@ -1646,7 +1646,7 @@ turbo_n_8,324,279,0 duplicate(snake01#tt_main) snake01#n8 WARPNPC,1,1
turbo_n_16,324,279,0 duplicate(snake01#tt_main) snake01#n16 WARPNPC,1,1
turbo_n_1,324,279,0 duplicate(snake01#tt_main) snake01#n1 WARPNPC,1,1
-- script snake02#tt_main -1,{
+- script snake02#tt_main FAKE_NPC,{
OnTouch:
.@turbo2 = rand(1,8);
if (.@turbo2 < 3) warp strnpcinfo(4),287,256;
@@ -1697,7 +1697,7 @@ turbo_n_8,332,270,0 duplicate(snake04#tt_main) snake04#n8 WARPNPC,1,1
turbo_n_16,332,270,0 duplicate(snake04#tt_main) snake04#n16 WARPNPC,1,1
turbo_n_1,332,270,0 duplicate(snake04#tt_main) snake04#n1 WARPNPC,1,1
-- script SnakeHunt#tt_main -1,{
+- script SnakeHunt#tt_main FAKE_NPC,{
end;
OnReset:
@@ -1736,7 +1736,7 @@ turbo_e_16,90,46,0 duplicate(SnakeHunt#tt_main) hunting#e16 HIDDEN_NPC
turbo_n_4,90,46,0 duplicate(SnakeHunt#tt_main) hunting#n4 HIDDEN_NPC
turbo_n_1,90,46,0 duplicate(SnakeHunt#tt_main) hunting#n1 HIDDEN_NPC
-- script cos#tt_main -1,{
+- script cos#tt_main FAKE_NPC,{
OnTouch:
.@n = charat(strnpcinfo(2),getstrlen(strnpcinfo(2))-1);
switch (.@n) {
@@ -1822,123 +1822,123 @@ turbo_n_1,389,275,0 duplicate(cos#tt_main) #cos_n1_6 WARPNPC,1,1
turbo_n_1,93,19,0 duplicate(cos#tt_main) #cos_n1_7 WARPNPC,1,1
turbo_n_1,232,14,0 duplicate(cos#tt_main) #cos_n1_8 WARPNPC,1,1
-turbo_e_16,179,55,0 script TurboHint_1#tt_main -1,1,1,{
+turbo_e_16,179,55,0 script TurboHint_1#tt_main FAKE_NPC,1,1,{
OnTouch:
emotion e_what,1;
end;
}
-turbo_e_16,179,55,0 duplicate(TurboHint_1#tt_main) #e16Intersectiona -1,1,1
-turbo_e_16,184,45,0 duplicate(TurboHint_1#tt_main) #e16Intersectionb -1,1,1
-turbo_e_16,181,30,0 duplicate(TurboHint_1#tt_main) #e16Intersectionc -1,1,1
-turbo_e_16,186,28,0 duplicate(TurboHint_1#tt_main) #e16Intersectiond -1,1,1
-turbo_e_16,183,19,0 duplicate(TurboHint_1#tt_main) #e16Intersectione -1,1,1
-turbo_e_16,191,37,0 duplicate(TurboHint_1#tt_main) #e16Intersectionf -1,1,1
-turbo_e_16,173,25,0 duplicate(TurboHint_1#tt_main) #e16Intersectiong -1,1,1
-turbo_e_16,201,21,0 duplicate(TurboHint_1#tt_main) #e16Intersectionh -1,1,1
-turbo_e_16,222,21,0 duplicate(TurboHint_1#tt_main) #e16Intersectioni -1,1,1
-turbo_e_16,214,39,0 duplicate(TurboHint_1#tt_main) #e16Intersectionj -1,1,1
-turbo_e_16,222,48,0 duplicate(TurboHint_1#tt_main) #e16Intersectionk -1,1,1
-turbo_e_16,214,60,0 duplicate(TurboHint_1#tt_main) #e16Intersectionl -1,1,1
-turbo_e_16,209,61,0 duplicate(TurboHint_1#tt_main) #e16Intersectionm -1,1,1
-turbo_e_16,208,56,0 duplicate(TurboHint_1#tt_main) #e16Intersectionn -1,1,1
-turbo_n_16,179,55,0 duplicate(TurboHint_1#tt_main) #n16Intersectiona -1,1,1
-turbo_n_16,184,45,0 duplicate(TurboHint_1#tt_main) #n16Intersectionb -1,1,1
-turbo_n_16,181,30,0 duplicate(TurboHint_1#tt_main) #n16Intersectionc -1,1,1
-turbo_n_16,186,28,0 duplicate(TurboHint_1#tt_main) #n16Intersectiond -1,1,1
-turbo_n_16,183,19,0 duplicate(TurboHint_1#tt_main) #n16Intersectione -1,1,1
-turbo_n_16,191,37,0 duplicate(TurboHint_1#tt_main) #n16Intersectionf -1,1,1
-turbo_n_16,173,25,0 duplicate(TurboHint_1#tt_main) #n16Intersectiong -1,1,1
-turbo_n_16,201,21,0 duplicate(TurboHint_1#tt_main) #n16Intersectionh -1,1,1
-turbo_n_16,222,21,0 duplicate(TurboHint_1#tt_main) #n16Intersectioni -1,1,1
-turbo_n_16,214,39,0 duplicate(TurboHint_1#tt_main) #n16Intersectionj -1,1,1
-turbo_n_16,222,48,0 duplicate(TurboHint_1#tt_main) #n16Intersectionk -1,1,1
-turbo_n_16,214,60,0 duplicate(TurboHint_1#tt_main) #n16Intersectionl -1,1,1
-turbo_n_16,209,61,0 duplicate(TurboHint_1#tt_main) #n16Intersectionm -1,1,1
-turbo_n_16,208,56,0 duplicate(TurboHint_1#tt_main) #n16Intersectionn -1,1,1
-turbo_n_1,179,55,0 duplicate(TurboHint_1#tt_main) #n1Intersectiona -1,1,1
-turbo_n_1,184,45,0 duplicate(TurboHint_1#tt_main) #n1Intersectionb -1,1,1
-turbo_n_1,181,30,0 duplicate(TurboHint_1#tt_main) #n1Intersectionc -1,1,1
-turbo_n_1,186,28,0 duplicate(TurboHint_1#tt_main) #n1Intersectiond -1,1,1
-turbo_n_1,183,19,0 duplicate(TurboHint_1#tt_main) #n1Intersectione -1,1,1
-turbo_n_1,191,37,0 duplicate(TurboHint_1#tt_main) #n1Intersectionf -1,1,1
-turbo_n_1,173,25,0 duplicate(TurboHint_1#tt_main) #n1Intersectiong -1,1,1
-turbo_n_1,201,21,0 duplicate(TurboHint_1#tt_main) #n1Intersectionh -1,1,1
-turbo_n_1,222,21,0 duplicate(TurboHint_1#tt_main) #n1Intersectioni -1,1,1
-turbo_n_1,214,39,0 duplicate(TurboHint_1#tt_main) #n1Intersectionj -1,1,1
-turbo_n_1,222,48,0 duplicate(TurboHint_1#tt_main) #n1Intersectionk -1,1,1
-turbo_n_1,214,60,0 duplicate(TurboHint_1#tt_main) #n1Intersectionl -1,1,1
-turbo_n_1,209,61,0 duplicate(TurboHint_1#tt_main) #n1Intersectionm -1,1,1
-turbo_n_1,208,56,0 duplicate(TurboHint_1#tt_main) #n1Intersectionn -1,1,1
-
-- script TurboHint_2#tt_main -1,{
+turbo_e_16,179,55,0 duplicate(TurboHint_1#tt_main) #e16Intersectiona FAKE_NPC,1,1
+turbo_e_16,184,45,0 duplicate(TurboHint_1#tt_main) #e16Intersectionb FAKE_NPC,1,1
+turbo_e_16,181,30,0 duplicate(TurboHint_1#tt_main) #e16Intersectionc FAKE_NPC,1,1
+turbo_e_16,186,28,0 duplicate(TurboHint_1#tt_main) #e16Intersectiond FAKE_NPC,1,1
+turbo_e_16,183,19,0 duplicate(TurboHint_1#tt_main) #e16Intersectione FAKE_NPC,1,1
+turbo_e_16,191,37,0 duplicate(TurboHint_1#tt_main) #e16Intersectionf FAKE_NPC,1,1
+turbo_e_16,173,25,0 duplicate(TurboHint_1#tt_main) #e16Intersectiong FAKE_NPC,1,1
+turbo_e_16,201,21,0 duplicate(TurboHint_1#tt_main) #e16Intersectionh FAKE_NPC,1,1
+turbo_e_16,222,21,0 duplicate(TurboHint_1#tt_main) #e16Intersectioni FAKE_NPC,1,1
+turbo_e_16,214,39,0 duplicate(TurboHint_1#tt_main) #e16Intersectionj FAKE_NPC,1,1
+turbo_e_16,222,48,0 duplicate(TurboHint_1#tt_main) #e16Intersectionk FAKE_NPC,1,1
+turbo_e_16,214,60,0 duplicate(TurboHint_1#tt_main) #e16Intersectionl FAKE_NPC,1,1
+turbo_e_16,209,61,0 duplicate(TurboHint_1#tt_main) #e16Intersectionm FAKE_NPC,1,1
+turbo_e_16,208,56,0 duplicate(TurboHint_1#tt_main) #e16Intersectionn FAKE_NPC,1,1
+turbo_n_16,179,55,0 duplicate(TurboHint_1#tt_main) #n16Intersectiona FAKE_NPC,1,1
+turbo_n_16,184,45,0 duplicate(TurboHint_1#tt_main) #n16Intersectionb FAKE_NPC,1,1
+turbo_n_16,181,30,0 duplicate(TurboHint_1#tt_main) #n16Intersectionc FAKE_NPC,1,1
+turbo_n_16,186,28,0 duplicate(TurboHint_1#tt_main) #n16Intersectiond FAKE_NPC,1,1
+turbo_n_16,183,19,0 duplicate(TurboHint_1#tt_main) #n16Intersectione FAKE_NPC,1,1
+turbo_n_16,191,37,0 duplicate(TurboHint_1#tt_main) #n16Intersectionf FAKE_NPC,1,1
+turbo_n_16,173,25,0 duplicate(TurboHint_1#tt_main) #n16Intersectiong FAKE_NPC,1,1
+turbo_n_16,201,21,0 duplicate(TurboHint_1#tt_main) #n16Intersectionh FAKE_NPC,1,1
+turbo_n_16,222,21,0 duplicate(TurboHint_1#tt_main) #n16Intersectioni FAKE_NPC,1,1
+turbo_n_16,214,39,0 duplicate(TurboHint_1#tt_main) #n16Intersectionj FAKE_NPC,1,1
+turbo_n_16,222,48,0 duplicate(TurboHint_1#tt_main) #n16Intersectionk FAKE_NPC,1,1
+turbo_n_16,214,60,0 duplicate(TurboHint_1#tt_main) #n16Intersectionl FAKE_NPC,1,1
+turbo_n_16,209,61,0 duplicate(TurboHint_1#tt_main) #n16Intersectionm FAKE_NPC,1,1
+turbo_n_16,208,56,0 duplicate(TurboHint_1#tt_main) #n16Intersectionn FAKE_NPC,1,1
+turbo_n_1,179,55,0 duplicate(TurboHint_1#tt_main) #n1Intersectiona FAKE_NPC,1,1
+turbo_n_1,184,45,0 duplicate(TurboHint_1#tt_main) #n1Intersectionb FAKE_NPC,1,1
+turbo_n_1,181,30,0 duplicate(TurboHint_1#tt_main) #n1Intersectionc FAKE_NPC,1,1
+turbo_n_1,186,28,0 duplicate(TurboHint_1#tt_main) #n1Intersectiond FAKE_NPC,1,1
+turbo_n_1,183,19,0 duplicate(TurboHint_1#tt_main) #n1Intersectione FAKE_NPC,1,1
+turbo_n_1,191,37,0 duplicate(TurboHint_1#tt_main) #n1Intersectionf FAKE_NPC,1,1
+turbo_n_1,173,25,0 duplicate(TurboHint_1#tt_main) #n1Intersectiong FAKE_NPC,1,1
+turbo_n_1,201,21,0 duplicate(TurboHint_1#tt_main) #n1Intersectionh FAKE_NPC,1,1
+turbo_n_1,222,21,0 duplicate(TurboHint_1#tt_main) #n1Intersectioni FAKE_NPC,1,1
+turbo_n_1,214,39,0 duplicate(TurboHint_1#tt_main) #n1Intersectionj FAKE_NPC,1,1
+turbo_n_1,222,48,0 duplicate(TurboHint_1#tt_main) #n1Intersectionk FAKE_NPC,1,1
+turbo_n_1,214,60,0 duplicate(TurboHint_1#tt_main) #n1Intersectionl FAKE_NPC,1,1
+turbo_n_1,209,61,0 duplicate(TurboHint_1#tt_main) #n1Intersectionm FAKE_NPC,1,1
+turbo_n_1,208,56,0 duplicate(TurboHint_1#tt_main) #n1Intersectionn FAKE_NPC,1,1
+
+- script TurboHint_2#tt_main FAKE_NPC,{
OnTouch:
emotion e_gasp,1;
end;
}
-turbo_e_16,178,63,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath1 -1,1,1
-turbo_e_16,182,40,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath2 -1,1,1
-turbo_e_16,176,29,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath3 -1,1,1
-turbo_e_16,180,25,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath4 -1,1,1
-turbo_e_16,201,157,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath5 -1,1,1
-turbo_e_16,203,65,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath6 -1,1,1
-turbo_e_16,208,52,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath7 -1,1,1
-turbo_e_16,208,26,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath8 -1,1,1
-turbo_e_16,191,30,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath9 -1,1,1
-turbo_n_16,178,63,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath1 -1,1,1
-turbo_n_16,182,40,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath2 -1,1,1
-turbo_n_16,176,29,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath3 -1,1,1
-turbo_n_16,180,25,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath4 -1,1,1
-turbo_n_16,201,157,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath5 -1,1,1
-turbo_n_16,203,65,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath6 -1,1,1
-turbo_n_16,208,52,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath7 -1,1,1
-turbo_n_16,208,26,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath8 -1,1,1
-turbo_n_16,191,30,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath9 -1,1,1
-turbo_n_1,178,63,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath1 -1,1,1
-turbo_n_1,182,40,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath2 -1,1,1
-turbo_n_1,176,29,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath3 -1,1,1
-turbo_n_1,180,25,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath4 -1,1,1
-turbo_n_1,201,157,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath5 -1,1,1
-turbo_n_1,203,65,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath6 -1,1,1
-turbo_n_1,208,52,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath7 -1,1,1
-turbo_n_1,208,26,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath8 -1,1,1
-turbo_n_1,191,30,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath9 -1,1,1
-
-- script TurboHint_3#tt_main -1,{
+turbo_e_16,178,63,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath1 FAKE_NPC,1,1
+turbo_e_16,182,40,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath2 FAKE_NPC,1,1
+turbo_e_16,176,29,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath3 FAKE_NPC,1,1
+turbo_e_16,180,25,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath4 FAKE_NPC,1,1
+turbo_e_16,201,157,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath5 FAKE_NPC,1,1
+turbo_e_16,203,65,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath6 FAKE_NPC,1,1
+turbo_e_16,208,52,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath7 FAKE_NPC,1,1
+turbo_e_16,208,26,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath8 FAKE_NPC,1,1
+turbo_e_16,191,30,0 duplicate(TurboHint_2#tt_main) #e16CorrectPath9 FAKE_NPC,1,1
+turbo_n_16,178,63,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath1 FAKE_NPC,1,1
+turbo_n_16,182,40,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath2 FAKE_NPC,1,1
+turbo_n_16,176,29,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath3 FAKE_NPC,1,1
+turbo_n_16,180,25,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath4 FAKE_NPC,1,1
+turbo_n_16,201,157,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath5 FAKE_NPC,1,1
+turbo_n_16,203,65,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath6 FAKE_NPC,1,1
+turbo_n_16,208,52,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath7 FAKE_NPC,1,1
+turbo_n_16,208,26,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath8 FAKE_NPC,1,1
+turbo_n_16,191,30,0 duplicate(TurboHint_2#tt_main) #n16CorrectPath9 FAKE_NPC,1,1
+turbo_n_1,178,63,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath1 FAKE_NPC,1,1
+turbo_n_1,182,40,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath2 FAKE_NPC,1,1
+turbo_n_1,176,29,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath3 FAKE_NPC,1,1
+turbo_n_1,180,25,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath4 FAKE_NPC,1,1
+turbo_n_1,201,157,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath5 FAKE_NPC,1,1
+turbo_n_1,203,65,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath6 FAKE_NPC,1,1
+turbo_n_1,208,52,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath7 FAKE_NPC,1,1
+turbo_n_1,208,26,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath8 FAKE_NPC,1,1
+turbo_n_1,191,30,0 duplicate(TurboHint_2#tt_main) #n1CorrectPath9 FAKE_NPC,1,1
+
+- script TurboHint_3#tt_main FAKE_NPC,{
OnTouch:
emotion e_swt2,1;
if (rand(1,4) == 3)
emotion e_gasp;
end;
}
-turbo_e_16,187,55,0 duplicate(TurboHint_3#tt_main) #e16NoWayOut1 -1,1,1
-turbo_e_16,176,45,0 duplicate(TurboHint_3#tt_main) #e16NoWayOut2 -1,1,1
-turbo_e_16,222,26,0 duplicate(TurboHint_3#tt_main) #e16NoWayOut3 -1,1,1
-turbo_e_16,219,39,0 duplicate(TurboHint_3#tt_main) #e16NoWayOut4 -1,1,1
-turbo_n_16,187,55,0 duplicate(TurboHint_3#tt_main) #n16NoWayOut1 -1,1,1
-turbo_n_16,176,45,0 duplicate(TurboHint_3#tt_main) #n16NoWayOut2 -1,1,1
-turbo_n_16,222,26,0 duplicate(TurboHint_3#tt_main) #n16NoWayOut3 -1,1,1
-turbo_n_16,219,39,0 duplicate(TurboHint_3#tt_main) #n16NoWayOut4 -1,1,1
-turbo_n_1,187,55,0 duplicate(TurboHint_3#tt_main) #n1NoWayOut1 -1,1,1
-turbo_n_1,176,45,0 duplicate(TurboHint_3#tt_main) #n1NoWayOut2 -1,1,1
-turbo_n_1,222,26,0 duplicate(TurboHint_3#tt_main) #n1NoWayOut3 -1,1,1
-turbo_n_1,219,39,0 duplicate(TurboHint_3#tt_main) #n1NoWayOut4 -1,1,1
-
-- script TurboHint_4#tt_main -1,1,1,{
+turbo_e_16,187,55,0 duplicate(TurboHint_3#tt_main) #e16NoWayOut1 FAKE_NPC,1,1
+turbo_e_16,176,45,0 duplicate(TurboHint_3#tt_main) #e16NoWayOut2 FAKE_NPC,1,1
+turbo_e_16,222,26,0 duplicate(TurboHint_3#tt_main) #e16NoWayOut3 FAKE_NPC,1,1
+turbo_e_16,219,39,0 duplicate(TurboHint_3#tt_main) #e16NoWayOut4 FAKE_NPC,1,1
+turbo_n_16,187,55,0 duplicate(TurboHint_3#tt_main) #n16NoWayOut1 FAKE_NPC,1,1
+turbo_n_16,176,45,0 duplicate(TurboHint_3#tt_main) #n16NoWayOut2 FAKE_NPC,1,1
+turbo_n_16,222,26,0 duplicate(TurboHint_3#tt_main) #n16NoWayOut3 FAKE_NPC,1,1
+turbo_n_16,219,39,0 duplicate(TurboHint_3#tt_main) #n16NoWayOut4 FAKE_NPC,1,1
+turbo_n_1,187,55,0 duplicate(TurboHint_3#tt_main) #n1NoWayOut1 FAKE_NPC,1,1
+turbo_n_1,176,45,0 duplicate(TurboHint_3#tt_main) #n1NoWayOut2 FAKE_NPC,1,1
+turbo_n_1,222,26,0 duplicate(TurboHint_3#tt_main) #n1NoWayOut3 FAKE_NPC,1,1
+turbo_n_1,219,39,0 duplicate(TurboHint_3#tt_main) #n1NoWayOut4 FAKE_NPC,1,1
+
+- script TurboHint_4#tt_main FAKE_NPC,1,1,{
OnTouch:
emotion e_swt2,1;
end;
}
-turbo_e_16,222,45,0 duplicate(TurboHint_4#tt_main) #e16NoWayOut5 -1,1,1
-turbo_e_16,222,61,0 duplicate(TurboHint_4#tt_main) #e16NoWayOut6 -1,1,1
-turbo_e_16,222,65,0 duplicate(TurboHint_4#tt_main) #e16NoWayOut7 -1,1,1
-turbo_n_16,222,45,0 duplicate(TurboHint_4#tt_main) #n16NoWayOut5 -1,1,1
-turbo_n_16,222,61,0 duplicate(TurboHint_4#tt_main) #n16NoWayOut6 -1,1,1
-turbo_n_16,222,65,0 duplicate(TurboHint_4#tt_main) #n16NoWayOut7 -1,1,1
-turbo_n_1,222,45,0 duplicate(TurboHint_4#tt_main) #n1NoWayOut5 -1,1,1
-turbo_n_1,222,61,0 duplicate(TurboHint_4#tt_main) #n1NoWayOut6 -1,1,1
-turbo_n_1,222,65,0 duplicate(TurboHint_4#tt_main) #n1NoWayOut7 -1,1,1
-
-- script cos_end#tt_main -1,{
+turbo_e_16,222,45,0 duplicate(TurboHint_4#tt_main) #e16NoWayOut5 FAKE_NPC,1,1
+turbo_e_16,222,61,0 duplicate(TurboHint_4#tt_main) #e16NoWayOut6 FAKE_NPC,1,1
+turbo_e_16,222,65,0 duplicate(TurboHint_4#tt_main) #e16NoWayOut7 FAKE_NPC,1,1
+turbo_n_16,222,45,0 duplicate(TurboHint_4#tt_main) #n16NoWayOut5 FAKE_NPC,1,1
+turbo_n_16,222,61,0 duplicate(TurboHint_4#tt_main) #n16NoWayOut6 FAKE_NPC,1,1
+turbo_n_16,222,65,0 duplicate(TurboHint_4#tt_main) #n16NoWayOut7 FAKE_NPC,1,1
+turbo_n_1,222,45,0 duplicate(TurboHint_4#tt_main) #n1NoWayOut5 FAKE_NPC,1,1
+turbo_n_1,222,61,0 duplicate(TurboHint_4#tt_main) #n1NoWayOut6 FAKE_NPC,1,1
+turbo_n_1,222,65,0 duplicate(TurboHint_4#tt_main) #n1NoWayOut7 FAKE_NPC,1,1
+
+- script cos_end#tt_main FAKE_NPC,{
function GetNumber;
OnTouch:
.@w$ = callfunc("F_tt");
@@ -2011,7 +2011,7 @@ turbo_e_16,371,51,0 duplicate(cos_end2#tt_main) #cos_e16_end2 WARPNPC,1,1
turbo_n_8,371,51,0 duplicate(cos_end2#tt_main) #cos_n8_end2 WARPNPC,1,1
turbo_n_16,371,51,0 duplicate(cos_end2#tt_main) #cos_n16_end2 WARPNPC,1,1
-- script cos_end3#tt_main -1,{
+- script cos_end3#tt_main FAKE_NPC,{
OnTouch:
.@w$ = callfunc("F_tt");
mapannounce strnpcinfo(4),"" + strcharinfo(0) +" is third to reach the Finish Line! Congratulations!",bc_map,"0xFFFF00";
@@ -2035,7 +2035,7 @@ turbo_e_16,371,43,0 duplicate(cos_end3#tt_main) #cos_e16_end3 WARPNPC,1,1
turbo_n_8,371,43,0 duplicate(cos_end3#tt_main) #cos_n8_end3 WARPNPC,1,1
turbo_n_16,371,43,0 duplicate(cos_end3#tt_main) #cos_n16_end3 WARPNPC,1,1
-turbo_e_4,316,365,0 script DSwitch#tt_main -1,1,1,{
+turbo_e_4,316,365,0 script DSwitch#tt_main FAKE_NPC,1,1,{
OnTouch:
.@w$ = callfunc("F_tt");
if (rand(1,2) == 1)
@@ -2045,15 +2045,15 @@ OnTouch:
disablenpc "Disposable_Switch#"+.@w$;
end;
}
-turbo_e_4,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#e4 -1,1,1
-turbo_e_8,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#e8 -1,1,1
-turbo_e_16,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#e16 -1,1,1
-turbo_n_4,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#n4 -1,1,1
-turbo_n_8,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#n8 -1,1,1
-turbo_n_16,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#n16 -1,1,1
-turbo_n_1,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#n1 -1,1,1
-
-- script Flasher#tt_main -1,{
+turbo_e_4,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#e4 FAKE_NPC,1,1
+turbo_e_8,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#e8 FAKE_NPC,1,1
+turbo_e_16,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#e16 FAKE_NPC,1,1
+turbo_n_4,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#n4 FAKE_NPC,1,1
+turbo_n_8,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#n8 FAKE_NPC,1,1
+turbo_n_16,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#n16 FAKE_NPC,1,1
+turbo_n_1,316,365,0 duplicate(DSwitch#tt_main) Disposable_Switch#n1 FAKE_NPC,1,1
+
+- script Flasher#tt_main FAKE_NPC,{
OnTouch:
mapannounce strnpcinfo(4),strcharinfo(0) +" has just passed the Flasher Maze!",bc_map,"0x70DBDB";
warp strnpcinfo(4),185,227;
@@ -2079,7 +2079,7 @@ turbo_n_16,114,190,0 duplicate(Flasher#tt_main) Flasher_Exit_2#n16 WARPNPC,1,1
turbo_n_1,11,266,0 duplicate(Flasher#tt_main) Flasher_Exit_1#n1 WARPNPC,1,1
turbo_n_1,114,190,0 duplicate(Flasher#tt_main) Flasher_Exit_2#n1 WARPNPC,1,1
-- script WHelper#tt_main -1,{
+- script WHelper#tt_main FAKE_NPC,{
function RName;
if (tt_rank < 29999) {
mes "[Guide]";
@@ -2779,7 +2779,7 @@ OnInit:
end;
}
-- script NMaker1#tt_main -1,{
+- script NMaker1#tt_main FAKE_NPC,{
OnTouch:
.@w$ = callfunc("F_tt");
mapannounce strnpcinfo(4),strcharinfo(0) +" is now entering the Small Cave! " + strcharinfo(0) +" is now in the lead!",bc_map,"0xFFFF00";
@@ -2792,15 +2792,15 @@ OnInit:
enablenpc "Notice_Maker1#TBT_"+.@w$;
end;
}
-turbo_e_4,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_e4 -1,3,3
-turbo_e_8,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_e8 -1,3,3
-turbo_e_16,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_e16 -1,3,3
-turbo_n_4,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_n4 -1,3,3
-turbo_n_8,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_n8 -1,3,3
-turbo_n_16,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_n16 -1,3,3
-turbo_n_1,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_n1 -1,3,3
-
-- script NMaker3#tt_main -1,{
+turbo_e_4,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_e4 FAKE_NPC,3,3
+turbo_e_8,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_e8 FAKE_NPC,3,3
+turbo_e_16,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_e16 FAKE_NPC,3,3
+turbo_n_4,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_n4 FAKE_NPC,3,3
+turbo_n_8,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_n8 FAKE_NPC,3,3
+turbo_n_16,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_n16 FAKE_NPC,3,3
+turbo_n_1,11,91,0 duplicate(NMaker1#tt_main) Notice_Maker1#TBT_n1 FAKE_NPC,3,3
+
+- script NMaker3#tt_main FAKE_NPC,{
OnTouch:
.@w$ = callfunc("F_tt");
mapannounce strnpcinfo(4),strcharinfo(0) +" is now entering the Single Snail! " + strcharinfo(0) +" is now in the lead!",bc_map,"0xFFFF00";
@@ -2812,15 +2812,15 @@ OnInit:
enablenpc "Notice_Maker3#TBT_"+.@w$;
end;
}
-turbo_e_4,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_e4 -1,3,3
-turbo_e_8,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_e8 -1,3,3
-turbo_e_16,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_e16 -1,3,3
-turbo_n_4,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_n4 -1,3,3
-turbo_n_8,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_n8 -1,3,3
-turbo_n_16,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_n16 -1,3,3
-turbo_n_1,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_n1 -1,3,3
-
-- script NMaker4#tt_main -1,{
+turbo_e_4,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_e4 FAKE_NPC,3,3
+turbo_e_8,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_e8 FAKE_NPC,3,3
+turbo_e_16,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_e16 FAKE_NPC,3,3
+turbo_n_4,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_n4 FAKE_NPC,3,3
+turbo_n_8,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_n8 FAKE_NPC,3,3
+turbo_n_16,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_n16 FAKE_NPC,3,3
+turbo_n_1,234,223,0 duplicate(NMaker3#tt_main) Notice_Maker3#TBT_n1 FAKE_NPC,3,3
+
+- script NMaker4#tt_main FAKE_NPC,{
OnTouch:
.@w$ = callfunc("F_tt");
mapannounce strnpcinfo(4),strcharinfo(0) +" is currently in First Place!",bc_map,"0xFFFF00";
@@ -2833,15 +2833,15 @@ OnInit:
end;
}
-turbo_e_4,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_e4 -1,3,3
-turbo_e_8,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_e8 -1,3,3
-turbo_e_16,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_e16 -1,3,3
-turbo_n_4,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_n4 -1,3,3
-turbo_n_8,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_n8 -1,3,3
-turbo_n_16,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_n16 -1,3,3
-turbo_n_1,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_n1 -1,3,3
-
-- script warp#tt_main -1,{
+turbo_e_4,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_e4 FAKE_NPC,3,3
+turbo_e_8,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_e8 FAKE_NPC,3,3
+turbo_e_16,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_e16 FAKE_NPC,3,3
+turbo_n_4,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_n4 FAKE_NPC,3,3
+turbo_n_8,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_n8 FAKE_NPC,3,3
+turbo_n_16,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_n16 FAKE_NPC,3,3
+turbo_n_1,226,15,0 duplicate(NMaker4#tt_main) Notice_Maker4#TBT_n1 FAKE_NPC,3,3
+
+- script warp#tt_main FAKE_NPC,{
OnTouch:
switch (rand(1,20)) {
case 1: warp strnpcinfo(4),216,378; break;
@@ -2853,57 +2853,57 @@ OnTouch:
}
end;
}
-turbo_e_4,227,379,0 duplicate(warp#tt_main) Warp#e4_1 -1,1,1
-turbo_e_4,237,380,0 duplicate(warp#tt_main) Warp#e4_2 -1,1,1
-turbo_e_4,227,367,0 duplicate(warp#tt_main) Warp#e4_3 -1,1,1
-turbo_e_4,231,360,0 duplicate(warp#tt_main) Warp#e4_4 -1,1,1
-turbo_e_4,225,349,0 duplicate(warp#tt_main) Warp#e4_5 -1,1,1
-turbo_e_4,249,352,0 duplicate(warp#tt_main) Warp#e4_6 -1,1,1
-turbo_e_4,253,364,0 duplicate(warp#tt_main) Warp#e4_7 -1,2,2
-turbo_e_8,227,379,0 duplicate(warp#tt_main) Warp#e8_1 -1,1,1
-turbo_e_8,237,380,0 duplicate(warp#tt_main) Warp#e8_2 -1,1,1
-turbo_e_8,227,367,0 duplicate(warp#tt_main) Warp#e8_3 -1,1,1
-turbo_e_8,231,360,0 duplicate(warp#tt_main) Warp#e8_4 -1,1,1
-turbo_e_8,225,349,0 duplicate(warp#tt_main) Warp#e8_5 -1,1,1
-turbo_e_8,249,352,0 duplicate(warp#tt_main) Warp#e8_6 -1,1,1
-turbo_e_8,253,364,0 duplicate(warp#tt_main) Warp#e8_7 -1,2,2
-turbo_e_16,227,379,0 duplicate(warp#tt_main) Warp#e16_1 -1,1,1
-turbo_e_16,237,380,0 duplicate(warp#tt_main) Warp#e16_2 -1,1,1
-turbo_e_16,227,367,0 duplicate(warp#tt_main) Warp#e16_3 -1,1,1
-turbo_e_16,231,360,0 duplicate(warp#tt_main) Warp#e16_4 -1,1,1
-turbo_e_16,225,349,0 duplicate(warp#tt_main) Warp#e16_5 -1,1,1
-turbo_e_16,249,352,0 duplicate(warp#tt_main) Warp#e16_6 -1,1,1
-turbo_e_16,253,364,0 duplicate(warp#tt_main) Warp#e16_7 -1,2,2
-turbo_n_4,227,379,0 duplicate(warp#tt_main) Warp#n4_1 -1,1,1
-turbo_n_4,237,380,0 duplicate(warp#tt_main) Warp#n4_2 -1,1,1
-turbo_n_4,227,367,0 duplicate(warp#tt_main) Warp#n4_3 -1,1,1
-turbo_n_4,231,360,0 duplicate(warp#tt_main) Warp#n4_4 -1,1,1
-turbo_n_4,225,349,0 duplicate(warp#tt_main) Warp#n4_5 -1,1,1
-turbo_n_4,249,352,0 duplicate(warp#tt_main) Warp#n4_6 -1,1,1
-turbo_n_4,253,364,0 duplicate(warp#tt_main) Warp#n4_7 -1,2,2
-turbo_n_8,227,379,0 duplicate(warp#tt_main) Warp#n8_1 -1,1,1
-turbo_n_8,237,380,0 duplicate(warp#tt_main) Warp#n8_2 -1,1,1
-turbo_n_8,227,367,0 duplicate(warp#tt_main) Warp#n8_3 -1,1,1
-turbo_n_8,231,360,0 duplicate(warp#tt_main) Warp#n8_4 -1,1,1
-turbo_n_8,225,349,0 duplicate(warp#tt_main) Warp#n8_5 -1,1,1
-turbo_n_8,249,352,0 duplicate(warp#tt_main) Warp#n8_6 -1,1,1
-turbo_n_8,253,364,0 duplicate(warp#tt_main) Warp#n8_7 -1,2,2
-turbo_n_16,227,379,0 duplicate(warp#tt_main) Warp#n16_1 -1,1,1
-turbo_n_16,237,380,0 duplicate(warp#tt_main) Warp#n16_2 -1,1,1
-turbo_n_16,227,367,0 duplicate(warp#tt_main) Warp#n16_3 -1,1,1
-turbo_n_16,231,360,0 duplicate(warp#tt_main) Warp#n16_4 -1,1,1
-turbo_n_16,225,349,0 duplicate(warp#tt_main) Warp#n16_5 -1,1,1
-turbo_n_16,249,352,0 duplicate(warp#tt_main) Warp#n16_6 -1,1,1
-turbo_n_16,253,364,0 duplicate(warp#tt_main) Warp#n16_7 -1,2,2
-turbo_n_1,227,379,0 duplicate(warp#tt_main) Warp#n1_1 -1,1,1
-turbo_n_1,237,380,0 duplicate(warp#tt_main) Warp#n1_2 -1,1,1
-turbo_n_1,227,367,0 duplicate(warp#tt_main) Warp#n1_3 -1,1,1
-turbo_n_1,231,360,0 duplicate(warp#tt_main) Warp#n1_4 -1,1,1
-turbo_n_1,225,349,0 duplicate(warp#tt_main) Warp#n1_5 -1,1,1
-turbo_n_1,249,352,0 duplicate(warp#tt_main) Warp#n1_6 -1,1,1
-turbo_n_1,253,364,0 duplicate(warp#tt_main) Warp#n1_7 -1,2,2
-
-- script TurboTrap#tt_main -1,{
+turbo_e_4,227,379,0 duplicate(warp#tt_main) Warp#e4_1 FAKE_NPC,1,1
+turbo_e_4,237,380,0 duplicate(warp#tt_main) Warp#e4_2 FAKE_NPC,1,1
+turbo_e_4,227,367,0 duplicate(warp#tt_main) Warp#e4_3 FAKE_NPC,1,1
+turbo_e_4,231,360,0 duplicate(warp#tt_main) Warp#e4_4 FAKE_NPC,1,1
+turbo_e_4,225,349,0 duplicate(warp#tt_main) Warp#e4_5 FAKE_NPC,1,1
+turbo_e_4,249,352,0 duplicate(warp#tt_main) Warp#e4_6 FAKE_NPC,1,1
+turbo_e_4,253,364,0 duplicate(warp#tt_main) Warp#e4_7 FAKE_NPC,2,2
+turbo_e_8,227,379,0 duplicate(warp#tt_main) Warp#e8_1 FAKE_NPC,1,1
+turbo_e_8,237,380,0 duplicate(warp#tt_main) Warp#e8_2 FAKE_NPC,1,1
+turbo_e_8,227,367,0 duplicate(warp#tt_main) Warp#e8_3 FAKE_NPC,1,1
+turbo_e_8,231,360,0 duplicate(warp#tt_main) Warp#e8_4 FAKE_NPC,1,1
+turbo_e_8,225,349,0 duplicate(warp#tt_main) Warp#e8_5 FAKE_NPC,1,1
+turbo_e_8,249,352,0 duplicate(warp#tt_main) Warp#e8_6 FAKE_NPC,1,1
+turbo_e_8,253,364,0 duplicate(warp#tt_main) Warp#e8_7 FAKE_NPC,2,2
+turbo_e_16,227,379,0 duplicate(warp#tt_main) Warp#e16_1 FAKE_NPC,1,1
+turbo_e_16,237,380,0 duplicate(warp#tt_main) Warp#e16_2 FAKE_NPC,1,1
+turbo_e_16,227,367,0 duplicate(warp#tt_main) Warp#e16_3 FAKE_NPC,1,1
+turbo_e_16,231,360,0 duplicate(warp#tt_main) Warp#e16_4 FAKE_NPC,1,1
+turbo_e_16,225,349,0 duplicate(warp#tt_main) Warp#e16_5 FAKE_NPC,1,1
+turbo_e_16,249,352,0 duplicate(warp#tt_main) Warp#e16_6 FAKE_NPC,1,1
+turbo_e_16,253,364,0 duplicate(warp#tt_main) Warp#e16_7 FAKE_NPC,2,2
+turbo_n_4,227,379,0 duplicate(warp#tt_main) Warp#n4_1 FAKE_NPC,1,1
+turbo_n_4,237,380,0 duplicate(warp#tt_main) Warp#n4_2 FAKE_NPC,1,1
+turbo_n_4,227,367,0 duplicate(warp#tt_main) Warp#n4_3 FAKE_NPC,1,1
+turbo_n_4,231,360,0 duplicate(warp#tt_main) Warp#n4_4 FAKE_NPC,1,1
+turbo_n_4,225,349,0 duplicate(warp#tt_main) Warp#n4_5 FAKE_NPC,1,1
+turbo_n_4,249,352,0 duplicate(warp#tt_main) Warp#n4_6 FAKE_NPC,1,1
+turbo_n_4,253,364,0 duplicate(warp#tt_main) Warp#n4_7 FAKE_NPC,2,2
+turbo_n_8,227,379,0 duplicate(warp#tt_main) Warp#n8_1 FAKE_NPC,1,1
+turbo_n_8,237,380,0 duplicate(warp#tt_main) Warp#n8_2 FAKE_NPC,1,1
+turbo_n_8,227,367,0 duplicate(warp#tt_main) Warp#n8_3 FAKE_NPC,1,1
+turbo_n_8,231,360,0 duplicate(warp#tt_main) Warp#n8_4 FAKE_NPC,1,1
+turbo_n_8,225,349,0 duplicate(warp#tt_main) Warp#n8_5 FAKE_NPC,1,1
+turbo_n_8,249,352,0 duplicate(warp#tt_main) Warp#n8_6 FAKE_NPC,1,1
+turbo_n_8,253,364,0 duplicate(warp#tt_main) Warp#n8_7 FAKE_NPC,2,2
+turbo_n_16,227,379,0 duplicate(warp#tt_main) Warp#n16_1 FAKE_NPC,1,1
+turbo_n_16,237,380,0 duplicate(warp#tt_main) Warp#n16_2 FAKE_NPC,1,1
+turbo_n_16,227,367,0 duplicate(warp#tt_main) Warp#n16_3 FAKE_NPC,1,1
+turbo_n_16,231,360,0 duplicate(warp#tt_main) Warp#n16_4 FAKE_NPC,1,1
+turbo_n_16,225,349,0 duplicate(warp#tt_main) Warp#n16_5 FAKE_NPC,1,1
+turbo_n_16,249,352,0 duplicate(warp#tt_main) Warp#n16_6 FAKE_NPC,1,1
+turbo_n_16,253,364,0 duplicate(warp#tt_main) Warp#n16_7 FAKE_NPC,2,2
+turbo_n_1,227,379,0 duplicate(warp#tt_main) Warp#n1_1 FAKE_NPC,1,1
+turbo_n_1,237,380,0 duplicate(warp#tt_main) Warp#n1_2 FAKE_NPC,1,1
+turbo_n_1,227,367,0 duplicate(warp#tt_main) Warp#n1_3 FAKE_NPC,1,1
+turbo_n_1,231,360,0 duplicate(warp#tt_main) Warp#n1_4 FAKE_NPC,1,1
+turbo_n_1,225,349,0 duplicate(warp#tt_main) Warp#n1_5 FAKE_NPC,1,1
+turbo_n_1,249,352,0 duplicate(warp#tt_main) Warp#n1_6 FAKE_NPC,1,1
+turbo_n_1,253,364,0 duplicate(warp#tt_main) Warp#n1_7 FAKE_NPC,2,2
+
+- script TurboTrap#tt_main FAKE_NPC,{
end;
OnTouch:
specialeffect EF_BLASTMINEBOMB;
@@ -3540,7 +3540,7 @@ turbo_n_1,368,44,0 duplicate(TurboTrap#tt_main) trap_n1#F93 HIDDEN_WARP_NPC,1,1
turbo_n_1,368,40,0 duplicate(TurboTrap#tt_main) trap_n1#F94 HIDDEN_WARP_NPC,1,1
turbo_n_1,368,36,0 duplicate(TurboTrap#tt_main) trap_n1#F95 HIDDEN_WARP_NPC,1,1
-- script TurboTrap_2#tt_main -1,{
+- script TurboTrap_2#tt_main FAKE_NPC,{
end;
OnTouch:
specialeffect EF_FREEZING;
@@ -3606,7 +3606,7 @@ turbo_n_1,336,50,0 duplicate(TurboTrap_2#tt_main) trap_n1#F46 HIDDEN_WARP_NPC,1,
turbo_n_1,336,36,0 duplicate(TurboTrap_2#tt_main) trap_n1#F47 HIDDEN_WARP_NPC,1,1
turbo_n_1,340,55,0 duplicate(TurboTrap_2#tt_main) trap_n1#F48 HIDDEN_WARP_NPC,1,1
-- script bing_1#tt_main -1,{
+- script bing_1#tt_main FAKE_NPC,{
end;
OnTouch:
.@w$ = callfunc("F_tt");
@@ -3632,7 +3632,7 @@ turbo_n_4,217,214,0 duplicate(bing_1#tt_main) bing#n4 WARPNPC,3,3
turbo_n_8,217,214,0 duplicate(bing_1#tt_main) bing#n8 WARPNPC,3,3
turbo_n_16,217,214,0 duplicate(bing_1#tt_main) bing#n16 WARPNPC,3,3
-- script bing_2#tt_main -1,{
+- script bing_2#tt_main FAKE_NPC,{
end;
OnTouch:
switch (rand(1,10)) {
@@ -4702,7 +4702,7 @@ alde_gld,186,199,3 script Turbo Track Guide#Entran 4_F_RACING,{
close;
}
-- script ::MountManager_turbo -1,{
+- script ::MountManager_turbo FAKE_NPC,{
.@n$ = "["+strnpcinfo(1)+"]";
mes .@n$;
if (hascashmount()) {
diff --git a/npc/pre-re/jobs/1-1/swordman.txt b/npc/pre-re/jobs/1-1/swordman.txt
index 49a113d01..45da68fa8 100644
--- a/npc/pre-re/jobs/1-1/swordman.txt
+++ b/npc/pre-re/jobs/1-1/swordman.txt
@@ -407,7 +407,7 @@ job_sword1,98,27,0 warp pitfall02-01 1,1,job_sword1,11,207
job_sword1,161,27,0 warp pitfall02-02 1,1,job_sword1,11,207
job_sword1,239,117,0 warp pitfall03-01 1,1,job_sword1,11,169
-job_sword1,16,251,0 script 1_blank_1_a::SwdTrap1 -1,0,1,{
+job_sword1,16,251,0 script 1_blank_1_a::SwdTrap1 FAKE_NPC,0,1,{
OnTouch:
switch(rand(1,5)) {
case 1: warp "job_sword1",65,56; end;
@@ -417,58 +417,58 @@ OnTouch:
case 5: warp "job_sword1",58,83; end;
}
}
-job_sword1,19,251,0 duplicate(SwdTrap1) 1_blank_1_b -1,0,1
-job_sword1,17,250,0 duplicate(SwdTrap1) 1_blank_1_c -1,1,0
-job_sword1,16,238,0 duplicate(SwdTrap1) 1_blank_2_a -1,0,1
-job_sword1,19,238,0 duplicate(SwdTrap1) 1_blank_2_b -1,0,1
-job_sword1,17,239,0 duplicate(SwdTrap1) 1_blank_2_c -1,0,1
-job_sword1,28,247,0 duplicate(SwdTrap1) 1_blank_3_a -1,4,0
-job_sword1,33,245,0 duplicate(SwdTrap1) 1_blank_3_b -1,0,2
-job_sword1,29,242,0 duplicate(SwdTrap1) 1_blank_3_c -1,4,0
-job_sword1,24,244,0 duplicate(SwdTrap1) 1_blank_3_d -1,0,2
-job_sword1,38,251,0 duplicate(SwdTrap1) 1_blank_4_a -1,0,1
-job_sword1,41,251,0 duplicate(SwdTrap1) 1_blank_4_b -1,0,1
-job_sword1,39,250,0 duplicate(SwdTrap1) 1_blank_4_c -1,1,0
-job_sword1,38,238,0 duplicate(SwdTrap1) 1_blank_5_a -1,0,1
-job_sword1,41,238,0 duplicate(SwdTrap1) 1_blank_5_b -1,0,1
-job_sword1,39,239,0 duplicate(SwdTrap1) 1_blank_5_c -1,1,0
-job_sword1,54,251,0 duplicate(SwdTrap1) 1_blank_6_a -1,0,1
-job_sword1,71,251,0 duplicate(SwdTrap1) 1_blank_6_b -1,0,1
-job_sword1,62,250,0 duplicate(SwdTrap1) 1_blank_6_c -1,9,0
-job_sword1,62,247,0 duplicate(SwdTrap1) 1_blank_7_a -1,8,0
-job_sword1,71,244,0 duplicate(SwdTrap1) 1_blank_7_b -1,0,2
-job_sword1,63,242,0 duplicate(SwdTrap1) 1_blank_7_c -1,8,0
-job_sword1,54,244,0 duplicate(SwdTrap1) 1_blank_7_d -1,0,2
-job_sword1,54,238,0 duplicate(SwdTrap1) 1_blank_8_a -1,0,1
-job_sword1,71,238,0 duplicate(SwdTrap1) 1_blank_8_b -1,0,1
-job_sword1,62,239,0 duplicate(SwdTrap1) 1_blank_8_c -1,9,0
-job_sword1,102,247,0 duplicate(SwdTrap1) 1_blank_9_a -1,2,0
-job_sword1,105,245,0 duplicate(SwdTrap1) 1_blank_9_b -1,0,2
-job_sword1,103,242,0 duplicate(SwdTrap1) 1_blank_9_c -1,2,0
-job_sword1,100,244,0 duplicate(SwdTrap1) 1_blank_9_d -1,0,2
-job_sword1,156,249,0 duplicate(SwdTrap1) 1_blank_10_a -1,14,0
-job_sword1,156,248,0 duplicate(SwdTrap1) 1_blank_10_b -1,14,0
-job_sword1,170,249,0 duplicate(SwdTrap1) 1_blank_10_c -1,1,0
-job_sword1,170,248,0 duplicate(SwdTrap1) 1_blank_10_d -1,1,0
-job_sword1,156,245,0 duplicate(SwdTrap1) 1_blank_11_a -1,14,0
-job_sword1,156,244,0 duplicate(SwdTrap1) 1_blank_11_b -1,14,0
-job_sword1,170,245,0 duplicate(SwdTrap1) 1_blank_11_c -1,1,0
-job_sword1,170,244,0 duplicate(SwdTrap1) 1_blank_11_d -1,1,0
-job_sword1,156,241,0 duplicate(SwdTrap1) 1_blank_12_a -1,14,0
-job_sword1,156,240,0 duplicate(SwdTrap1) 1_blank_12_b -1,14,0
-job_sword1,170,241,0 duplicate(SwdTrap1) 1_blank_12_c -1,1,0
-job_sword1,170,240,0 duplicate(SwdTrap1) 1_blank_12_d -1,1,0
-job_sword1,180,251,0 duplicate(SwdTrap1) 1_blank_13_a -1,0,1
-job_sword1,183,251,0 duplicate(SwdTrap1) 1_blank_13_b -1,0,1
-job_sword1,181,250,0 duplicate(SwdTrap1) 1_blank_13_c -1,1,0
-job_sword1,180,238,0 duplicate(SwdTrap1) 1_blank_14_a -1,0,1
-job_sword1,183,238,0 duplicate(SwdTrap1) 1_blank_14_b -1,0,1
-job_sword1,181,239,0 duplicate(SwdTrap1) 1_blank_14_c -1,1,0
+job_sword1,19,251,0 duplicate(SwdTrap1) 1_blank_1_b FAKE_NPC,0,1
+job_sword1,17,250,0 duplicate(SwdTrap1) 1_blank_1_c FAKE_NPC,1,0
+job_sword1,16,238,0 duplicate(SwdTrap1) 1_blank_2_a FAKE_NPC,0,1
+job_sword1,19,238,0 duplicate(SwdTrap1) 1_blank_2_b FAKE_NPC,0,1
+job_sword1,17,239,0 duplicate(SwdTrap1) 1_blank_2_c FAKE_NPC,0,1
+job_sword1,28,247,0 duplicate(SwdTrap1) 1_blank_3_a FAKE_NPC,4,0
+job_sword1,33,245,0 duplicate(SwdTrap1) 1_blank_3_b FAKE_NPC,0,2
+job_sword1,29,242,0 duplicate(SwdTrap1) 1_blank_3_c FAKE_NPC,4,0
+job_sword1,24,244,0 duplicate(SwdTrap1) 1_blank_3_d FAKE_NPC,0,2
+job_sword1,38,251,0 duplicate(SwdTrap1) 1_blank_4_a FAKE_NPC,0,1
+job_sword1,41,251,0 duplicate(SwdTrap1) 1_blank_4_b FAKE_NPC,0,1
+job_sword1,39,250,0 duplicate(SwdTrap1) 1_blank_4_c FAKE_NPC,1,0
+job_sword1,38,238,0 duplicate(SwdTrap1) 1_blank_5_a FAKE_NPC,0,1
+job_sword1,41,238,0 duplicate(SwdTrap1) 1_blank_5_b FAKE_NPC,0,1
+job_sword1,39,239,0 duplicate(SwdTrap1) 1_blank_5_c FAKE_NPC,1,0
+job_sword1,54,251,0 duplicate(SwdTrap1) 1_blank_6_a FAKE_NPC,0,1
+job_sword1,71,251,0 duplicate(SwdTrap1) 1_blank_6_b FAKE_NPC,0,1
+job_sword1,62,250,0 duplicate(SwdTrap1) 1_blank_6_c FAKE_NPC,9,0
+job_sword1,62,247,0 duplicate(SwdTrap1) 1_blank_7_a FAKE_NPC,8,0
+job_sword1,71,244,0 duplicate(SwdTrap1) 1_blank_7_b FAKE_NPC,0,2
+job_sword1,63,242,0 duplicate(SwdTrap1) 1_blank_7_c FAKE_NPC,8,0
+job_sword1,54,244,0 duplicate(SwdTrap1) 1_blank_7_d FAKE_NPC,0,2
+job_sword1,54,238,0 duplicate(SwdTrap1) 1_blank_8_a FAKE_NPC,0,1
+job_sword1,71,238,0 duplicate(SwdTrap1) 1_blank_8_b FAKE_NPC,0,1
+job_sword1,62,239,0 duplicate(SwdTrap1) 1_blank_8_c FAKE_NPC,9,0
+job_sword1,102,247,0 duplicate(SwdTrap1) 1_blank_9_a FAKE_NPC,2,0
+job_sword1,105,245,0 duplicate(SwdTrap1) 1_blank_9_b FAKE_NPC,0,2
+job_sword1,103,242,0 duplicate(SwdTrap1) 1_blank_9_c FAKE_NPC,2,0
+job_sword1,100,244,0 duplicate(SwdTrap1) 1_blank_9_d FAKE_NPC,0,2
+job_sword1,156,249,0 duplicate(SwdTrap1) 1_blank_10_a FAKE_NPC,14,0
+job_sword1,156,248,0 duplicate(SwdTrap1) 1_blank_10_b FAKE_NPC,14,0
+job_sword1,170,249,0 duplicate(SwdTrap1) 1_blank_10_c FAKE_NPC,1,0
+job_sword1,170,248,0 duplicate(SwdTrap1) 1_blank_10_d FAKE_NPC,1,0
+job_sword1,156,245,0 duplicate(SwdTrap1) 1_blank_11_a FAKE_NPC,14,0
+job_sword1,156,244,0 duplicate(SwdTrap1) 1_blank_11_b FAKE_NPC,14,0
+job_sword1,170,245,0 duplicate(SwdTrap1) 1_blank_11_c FAKE_NPC,1,0
+job_sword1,170,244,0 duplicate(SwdTrap1) 1_blank_11_d FAKE_NPC,1,0
+job_sword1,156,241,0 duplicate(SwdTrap1) 1_blank_12_a FAKE_NPC,14,0
+job_sword1,156,240,0 duplicate(SwdTrap1) 1_blank_12_b FAKE_NPC,14,0
+job_sword1,170,241,0 duplicate(SwdTrap1) 1_blank_12_c FAKE_NPC,1,0
+job_sword1,170,240,0 duplicate(SwdTrap1) 1_blank_12_d FAKE_NPC,1,0
+job_sword1,180,251,0 duplicate(SwdTrap1) 1_blank_13_a FAKE_NPC,0,1
+job_sword1,183,251,0 duplicate(SwdTrap1) 1_blank_13_b FAKE_NPC,0,1
+job_sword1,181,250,0 duplicate(SwdTrap1) 1_blank_13_c FAKE_NPC,1,0
+job_sword1,180,238,0 duplicate(SwdTrap1) 1_blank_14_a FAKE_NPC,0,1
+job_sword1,183,238,0 duplicate(SwdTrap1) 1_blank_14_b FAKE_NPC,0,1
+job_sword1,181,239,0 duplicate(SwdTrap1) 1_blank_14_c FAKE_NPC,1,0
job_sword1,193,245,0 warp 1_rest 1,3,job_sword1,215,244
//== Pitfalls (Set 2) ======================================
-job_sword1,56,212,0 script 2_blank_1_a::SwdTrap2 -1,40,0,{
+job_sword1,56,212,0 script 2_blank_1_a::SwdTrap2 FAKE_NPC,40,0,{
OnTouch:
switch(rand(1,5)) {
case 1: warp "job_sword1",162,120; end;
@@ -479,40 +479,40 @@ OnTouch:
}
}
-job_sword1,95,212,0 duplicate(SwdTrap2) 2_blank_1_b -1,2,0
-job_sword1,56,210,0 duplicate(SwdTrap2) 2_blank_2_a -1,40,0
-job_sword1,95,210,0 duplicate(SwdTrap2) 2_blank_2_b -1,2,0
-job_sword1,16,206,0 duplicate(SwdTrap2) 2_blank_2_c -1,0,3
-job_sword1,97,206,0 duplicate(SwdTrap2) 2_blank_2_d -1,0,3
-job_sword1,56,203,0 duplicate(SwdTrap2) 2_blank_2_e -1,40,0
-job_sword1,95,203,0 duplicate(SwdTrap2) 2_blank_2_f -1,2,0
-job_sword1,56,201,0 duplicate(SwdTrap2) 2_blank_3_a -1,40,0
-job_sword1,95,201,0 duplicate(SwdTrap2) 2_blank_3_b -1,2,0
+job_sword1,95,212,0 duplicate(SwdTrap2) 2_blank_1_b FAKE_NPC,2,0
+job_sword1,56,210,0 duplicate(SwdTrap2) 2_blank_2_a FAKE_NPC,40,0
+job_sword1,95,210,0 duplicate(SwdTrap2) 2_blank_2_b FAKE_NPC,2,0
+job_sword1,16,206,0 duplicate(SwdTrap2) 2_blank_2_c FAKE_NPC,0,3
+job_sword1,97,206,0 duplicate(SwdTrap2) 2_blank_2_d FAKE_NPC,0,3
+job_sword1,56,203,0 duplicate(SwdTrap2) 2_blank_2_e FAKE_NPC,40,0
+job_sword1,95,203,0 duplicate(SwdTrap2) 2_blank_2_f FAKE_NPC,2,0
+job_sword1,56,201,0 duplicate(SwdTrap2) 2_blank_3_a FAKE_NPC,40,0
+job_sword1,95,201,0 duplicate(SwdTrap2) 2_blank_3_b FAKE_NPC,2,0
-job_sword1,113,212,0 duplicate(SwdTrap2) 2_blank_4_a -1,14,0
-job_sword1,125,212,0 duplicate(SwdTrap2) 2_blank_4_b -1,2,0
-job_sword1,113,210,0 duplicate(SwdTrap2) 2_blank_5_a -1,14,0
-job_sword1,125,210,0 duplicate(SwdTrap2) 2_blank_5_b -1,2,0
-job_sword1,100,206,0 duplicate(SwdTrap2) 2_blank_5_c -1,0,3
-job_sword1,127,206,0 duplicate(SwdTrap2) 2_blank_5_d -1,0,3
-job_sword1,113,203,0 duplicate(SwdTrap2) 2_blank_5_e -1,14,0
-job_sword1,125,210,0 duplicate(SwdTrap2) 2_blank_5_f -1,2,0
-job_sword1,113,201,0 duplicate(SwdTrap2) 2_blank_6_a -1,14,0
-job_sword1,113,201,0 duplicate(SwdTrap2) 2_blank_6_b -1,2,0
+job_sword1,113,212,0 duplicate(SwdTrap2) 2_blank_4_a FAKE_NPC,14,0
+job_sword1,125,212,0 duplicate(SwdTrap2) 2_blank_4_b FAKE_NPC,2,0
+job_sword1,113,210,0 duplicate(SwdTrap2) 2_blank_5_a FAKE_NPC,14,0
+job_sword1,125,210,0 duplicate(SwdTrap2) 2_blank_5_b FAKE_NPC,2,0
+job_sword1,100,206,0 duplicate(SwdTrap2) 2_blank_5_c FAKE_NPC,0,3
+job_sword1,127,206,0 duplicate(SwdTrap2) 2_blank_5_d FAKE_NPC,0,3
+job_sword1,113,203,0 duplicate(SwdTrap2) 2_blank_5_e FAKE_NPC,14,0
+job_sword1,125,210,0 duplicate(SwdTrap2) 2_blank_5_f FAKE_NPC,2,0
+job_sword1,113,201,0 duplicate(SwdTrap2) 2_blank_6_a FAKE_NPC,14,0
+job_sword1,113,201,0 duplicate(SwdTrap2) 2_blank_6_b FAKE_NPC,2,0
-job_sword1,155,212,0 duplicate(SwdTrap2) 2_blank_7_a -1,21,0
-job_sword1,181,212,0 duplicate(SwdTrap2) 2_blank_7_b -1,2,0
-job_sword1,155,210,0 duplicate(SwdTrap2) 2_blank_8_a -1,21,0
-job_sword1,181,210,0 duplicate(SwdTrap2) 2_blank_8_b -1,2,0
-job_sword1,130,206,0 duplicate(SwdTrap2) 2_blank_8_c -1,0,3
-job_sword1,183,206,0 duplicate(SwdTrap2) 2_blank_8_d -1,0,3
-job_sword1,155,203,0 duplicate(SwdTrap2) 2_blank_8_e -1,21,0
-job_sword1,181,203,0 duplicate(SwdTrap2) 2_blank_8_f -1,2,0
-job_sword1,155,201,0 duplicate(SwdTrap2) 2_blank_9_a -1,40,0
-job_sword1,181,201,0 duplicate(SwdTrap2) 2_blank_9_b -1,2,0
+job_sword1,155,212,0 duplicate(SwdTrap2) 2_blank_7_a FAKE_NPC,21,0
+job_sword1,181,212,0 duplicate(SwdTrap2) 2_blank_7_b FAKE_NPC,2,0
+job_sword1,155,210,0 duplicate(SwdTrap2) 2_blank_8_a FAKE_NPC,21,0
+job_sword1,181,210,0 duplicate(SwdTrap2) 2_blank_8_b FAKE_NPC,2,0
+job_sword1,130,206,0 duplicate(SwdTrap2) 2_blank_8_c FAKE_NPC,0,3
+job_sword1,183,206,0 duplicate(SwdTrap2) 2_blank_8_d FAKE_NPC,0,3
+job_sword1,155,203,0 duplicate(SwdTrap2) 2_blank_8_e FAKE_NPC,21,0
+job_sword1,181,203,0 duplicate(SwdTrap2) 2_blank_8_f FAKE_NPC,2,0
+job_sword1,155,201,0 duplicate(SwdTrap2) 2_blank_9_a FAKE_NPC,40,0
+job_sword1,181,201,0 duplicate(SwdTrap2) 2_blank_9_b FAKE_NPC,2,0
//== Pitfalls (Set 3) ======================================
-job_sword1,17,174,0 script 3_blank_1_a::SwdTrap3 -1,2,0,{
+job_sword1,17,174,0 script 3_blank_1_a::SwdTrap3 FAKE_NPC,2,0,{
OnTouch:
switch(rand(1,5)) {
case 1: warp "job_sword1",195,15; end;
@@ -523,105 +523,105 @@ OnTouch:
}
}
-job_sword1,17,163,0 duplicate(SwdTrap3) 3_blank_2_a -1,2,0
-job_sword1,29,171,0 duplicate(SwdTrap3) 3_blank_3_a -1,2,0
-job_sword1,31,168,0 duplicate(SwdTrap3) 3_blank_3_b -1,0,2
-job_sword1,28,166,0 duplicate(SwdTrap3) 3_blank_3_c -1,2,0
-job_sword1,26,168,0 duplicate(SwdTrap3) 3_blank_3_d -1,0,2
-job_sword1,36,169,0 duplicate(SwdTrap3) 3_blank_4_a -1,0,0
-job_sword1,37,169,0 duplicate(SwdTrap3) 3_blank_4_b -1,0,0
-job_sword1,37,168,0 duplicate(SwdTrap3) 3_blank_4_c -1,0,0
-job_sword1,36,168,0 duplicate(SwdTrap3) 3_blank_4_c2 -1,0,0
-job_sword1,40,175,0 duplicate(SwdTrap3) 3_blank_5_a -1,0,1
-job_sword1,41,175,0 duplicate(SwdTrap3) 3_blank_5_b -1,0,1
-job_sword1,41,171,0 duplicate(SwdTrap3) 3_blank_6_a -1,1,0
-job_sword1,41,170,0 duplicate(SwdTrap3) 3_blank_6_b -1,1,0
-job_sword1,41,167,0 duplicate(SwdTrap3) 3_blank_6_c -1,1,0
-job_sword1,41,166,0 duplicate(SwdTrap3) 3_blank_6_d -1,1,0
-job_sword1,42,169,0 duplicate(SwdTrap3) 3_blank_6_e -1,0,1
-job_sword1,43,170,0 duplicate(SwdTrap3) 3_blank_6_f -1,0,1
-job_sword1,43,167,0 duplicate(SwdTrap3) 3_blank_6_g -1,0,1
-job_sword1,40,162,0 duplicate(SwdTrap3) 3_blank_7_a -1,0,1
-job_sword1,41,162,0 duplicate(SwdTrap3) 3_blank_7_b -1,0,1
-job_sword1,46,175,0 duplicate(SwdTrap3) 3_blank_8_a -1,0,1
-job_sword1,51,175,0 duplicate(SwdTrap3) 3_blank_8_b -1,0,1
-job_sword1,47,174,0 duplicate(SwdTrap3) 3_blank_8_c -1,1,0
-job_sword1,50,174,0 duplicate(SwdTrap3) 3_blank_8_d -1,1,0
-job_sword1,48,173,0 duplicate(SwdTrap3) 3_blank_8_e -1,0,1
-job_sword1,49,173,0 duplicate(SwdTrap3) 3_blank_8_f -1,0,1
-job_sword1,46,162,0 duplicate(SwdTrap3) 3_blank_9_a -1,0,1
-job_sword1,51,162,0 duplicate(SwdTrap3) 3_blank_9_b -1,0,1
-job_sword1,47,163,0 duplicate(SwdTrap3) 3_blank_9_c -1,1,0
-job_sword1,50,163,0 duplicate(SwdTrap3) 3_blank_9_d -1,1,0
-job_sword1,48,164,0 duplicate(SwdTrap3) 3_blank_9_e -1,0,1
-job_sword1,49,164,0 duplicate(SwdTrap3) 3_blank_9_f -1,0,1
-job_sword1,54,170,0 duplicate(SwdTrap3) 3_blank_10_a -1,0,1
-job_sword1,55,170,0 duplicate(SwdTrap3) 3_blank_10_b -1,0,1
-job_sword1,54,167,0 duplicate(SwdTrap3) 3_blank_10_c -1,0,1
-job_sword1,55,167,0 duplicate(SwdTrap3) 3_blank_10_d -1,0,1
-job_sword1,53,169,0 duplicate(SwdTrap3) 3_blank_10_e -1,1,0
-job_sword1,53,168,0 duplicate(SwdTrap3) 3_blank_10_f -1,1,0
-job_sword1,56,169,0 duplicate(SwdTrap3) 3_blank_10_g -1,1,0
-job_sword1,56,168,0 duplicate(SwdTrap3) 3_blank_10_h -1,1,0
-job_sword1,58,175,0 duplicate(SwdTrap3) 3_blank_11_a -1,0,1
-job_sword1,59,174,0 duplicate(SwdTrap3) 3_blank_11_b -1,1,0
-job_sword1,60,173,0 duplicate(SwdTrap3) 3_blank_11_c -1,0,1
-job_sword1,61,172,0 duplicate(SwdTrap3) 3_blank_11_d -1,1,0
-job_sword1,58,162,0 duplicate(SwdTrap3) 3_blank_12_a -1,0,1
-job_sword1,59,163,0 duplicate(SwdTrap3) 3_blank_12_b -1,1,0
-job_sword1,60,164,0 duplicate(SwdTrap3) 3_blank_12_c -1,0,1
-job_sword1,61,165,0 duplicate(SwdTrap3) 3_blank_12_d -1,1,0
-job_sword1,76,172,0 duplicate(SwdTrap3) 3_blank_13_a -1,1,0
-job_sword1,77,173,0 duplicate(SwdTrap3) 3_blank_13_b -1,0,1
-job_sword1,78,174,0 duplicate(SwdTrap3) 3_blank_13_c -1,1,0
-job_sword1,79,175,0 duplicate(SwdTrap3) 3_blank_13_d -1,0,1
-job_sword1,76,165,0 duplicate(SwdTrap3) 3_blank_14_a -1,1,0
-job_sword1,77,164,0 duplicate(SwdTrap3) 3_blank_14_b -1,0,1
-job_sword1,78,163,0 duplicate(SwdTrap3) 3_blank_14_c -1,1,0
-job_sword1,79,162,0 duplicate(SwdTrap3) 3_blank_14_d -1,0,1
-job_sword1,94,175,0 duplicate(SwdTrap3) 3_blank_15_a -1,0,1
-job_sword1,95,174,0 duplicate(SwdTrap3) 3_blank_15_b -1,1,0
-job_sword1,98,174,0 duplicate(SwdTrap3) 3_blank_15_c -1,1,0
-job_sword1,99,175,0 duplicate(SwdTrap3) 3_blank_16_d -1,0,1
-job_sword1,96,169,0 duplicate(SwdTrap3) 3_blank_17_a -1,0,0
-job_sword1,97,169,0 duplicate(SwdTrap3) 3_blank_17_b -1,0,0
-job_sword1,97,168,0 duplicate(SwdTrap3) 3_blank_17_c -1,0,0
-job_sword1,96,168,0 duplicate(SwdTrap3) 3_blank_17_d -1,0,0
-job_sword1,94,162,0 duplicate(SwdTrap3) 3_blank_18_a -1,0,1
-job_sword1,95,163,0 duplicate(SwdTrap3) 3_blank_18_b -1,1,0
-job_sword1,98,163,0 duplicate(SwdTrap3) 3_blank_18_c -1,1,0
-job_sword1,99,162,0 duplicate(SwdTrap3) 3_blank_18_d -1,0,1
-job_sword1,114,175,0 duplicate(SwdTrap3) 3_blank_19_a -1,0,1
-job_sword1,115,175,0 duplicate(SwdTrap3) 3_blank_19_b -1,0,1
-job_sword1,114,162,0 duplicate(SwdTrap3) 3_blank_20_a -1,0,1
-job_sword1,115,162,0 duplicate(SwdTrap3) 3_blank_20_b -1,0,1
-job_sword1,126,175,0 duplicate(SwdTrap3) 3_blank_21_a -1,0,1
-job_sword1,127,175,0 duplicate(SwdTrap3) 3_blank_21_b -1,0,1
-job_sword1,126,162,0 duplicate(SwdTrap3) 3_blank_23_a -1,0,1
-job_sword1,127,162,0 duplicate(SwdTrap3) 3_blank_23_b -1,0,1
-job_sword1,160,174,0 duplicate(SwdTrap3) 3_blank_24_a -1,0,2
-job_sword1,161,174,0 duplicate(SwdTrap3) 3_blank_24_b -1,0,2
-job_sword1,160,163,0 duplicate(SwdTrap3) 3_blank_25_a -1,0,2
-job_sword1,161,163,0 duplicate(SwdTrap3) 3_blank_25_b -1,0,2
-job_sword1,168,175,0 duplicate(SwdTrap3) 3_blank_26_a -1,0,2
-job_sword1,169,175,0 duplicate(SwdTrap3) 3_blank_26_b -1,0,2
-job_sword1,168,162,0 duplicate(SwdTrap3) 3_blank_27_a -1,0,2
-job_sword1,169,162,0 duplicate(SwdTrap3) 3_blank_27_b -1,0,2
-job_sword1,176,174,0 duplicate(SwdTrap3) 3_blank_28_a -1,0,2
-job_sword1,177,174,0 duplicate(SwdTrap3) 3_blank_28_b -1,0,2
-job_sword1,178,173,0 duplicate(SwdTrap3) 3_blank_28_c -1,1,0
-job_sword1,178,172,0 duplicate(SwdTrap3) 3_blank_28_d -1,1,0
-job_sword1,181,174,0 duplicate(SwdTrap3) 3_blank_28_e -1,2,0
-job_sword1,179,169,0 duplicate(SwdTrap3) 3_blank_29_a -1,3,0
-job_sword1,179,168,0 duplicate(SwdTrap3) 3_blank_29_b -1,3,0
-job_sword1,182,169,0 duplicate(SwdTrap3) 3_blank_29_c -1,0,2
-job_sword1,183,169,0 duplicate(SwdTrap3) 3_blank_29_d -1,0,2
-job_sword1,181,167,0 duplicate(SwdTrap3) 3_blank_29_e -1,1,0
-job_sword1,181,166,0 duplicate(SwdTrap3) 3_blank_29_f -1,1,0
-job_sword1,183,167,0 duplicate(SwdTrap3) 3_blank_29_g -1,0,1
-job_sword1,176,163,0 duplicate(SwdTrap3) 3_blank_30_a -1,0,2
-job_sword1,177,163,0 duplicate(SwdTrap3) 3_blank_30_b -1,0,2
-job_sword1,181,163,0 duplicate(SwdTrap3) 3_blank_30_c -1,2,0
+job_sword1,17,163,0 duplicate(SwdTrap3) 3_blank_2_a FAKE_NPC,2,0
+job_sword1,29,171,0 duplicate(SwdTrap3) 3_blank_3_a FAKE_NPC,2,0
+job_sword1,31,168,0 duplicate(SwdTrap3) 3_blank_3_b FAKE_NPC,0,2
+job_sword1,28,166,0 duplicate(SwdTrap3) 3_blank_3_c FAKE_NPC,2,0
+job_sword1,26,168,0 duplicate(SwdTrap3) 3_blank_3_d FAKE_NPC,0,2
+job_sword1,36,169,0 duplicate(SwdTrap3) 3_blank_4_a FAKE_NPC,0,0
+job_sword1,37,169,0 duplicate(SwdTrap3) 3_blank_4_b FAKE_NPC,0,0
+job_sword1,37,168,0 duplicate(SwdTrap3) 3_blank_4_c FAKE_NPC,0,0
+job_sword1,36,168,0 duplicate(SwdTrap3) 3_blank_4_c2 FAKE_NPC,0,0
+job_sword1,40,175,0 duplicate(SwdTrap3) 3_blank_5_a FAKE_NPC,0,1
+job_sword1,41,175,0 duplicate(SwdTrap3) 3_blank_5_b FAKE_NPC,0,1
+job_sword1,41,171,0 duplicate(SwdTrap3) 3_blank_6_a FAKE_NPC,1,0
+job_sword1,41,170,0 duplicate(SwdTrap3) 3_blank_6_b FAKE_NPC,1,0
+job_sword1,41,167,0 duplicate(SwdTrap3) 3_blank_6_c FAKE_NPC,1,0
+job_sword1,41,166,0 duplicate(SwdTrap3) 3_blank_6_d FAKE_NPC,1,0
+job_sword1,42,169,0 duplicate(SwdTrap3) 3_blank_6_e FAKE_NPC,0,1
+job_sword1,43,170,0 duplicate(SwdTrap3) 3_blank_6_f FAKE_NPC,0,1
+job_sword1,43,167,0 duplicate(SwdTrap3) 3_blank_6_g FAKE_NPC,0,1
+job_sword1,40,162,0 duplicate(SwdTrap3) 3_blank_7_a FAKE_NPC,0,1
+job_sword1,41,162,0 duplicate(SwdTrap3) 3_blank_7_b FAKE_NPC,0,1
+job_sword1,46,175,0 duplicate(SwdTrap3) 3_blank_8_a FAKE_NPC,0,1
+job_sword1,51,175,0 duplicate(SwdTrap3) 3_blank_8_b FAKE_NPC,0,1
+job_sword1,47,174,0 duplicate(SwdTrap3) 3_blank_8_c FAKE_NPC,1,0
+job_sword1,50,174,0 duplicate(SwdTrap3) 3_blank_8_d FAKE_NPC,1,0
+job_sword1,48,173,0 duplicate(SwdTrap3) 3_blank_8_e FAKE_NPC,0,1
+job_sword1,49,173,0 duplicate(SwdTrap3) 3_blank_8_f FAKE_NPC,0,1
+job_sword1,46,162,0 duplicate(SwdTrap3) 3_blank_9_a FAKE_NPC,0,1
+job_sword1,51,162,0 duplicate(SwdTrap3) 3_blank_9_b FAKE_NPC,0,1
+job_sword1,47,163,0 duplicate(SwdTrap3) 3_blank_9_c FAKE_NPC,1,0
+job_sword1,50,163,0 duplicate(SwdTrap3) 3_blank_9_d FAKE_NPC,1,0
+job_sword1,48,164,0 duplicate(SwdTrap3) 3_blank_9_e FAKE_NPC,0,1
+job_sword1,49,164,0 duplicate(SwdTrap3) 3_blank_9_f FAKE_NPC,0,1
+job_sword1,54,170,0 duplicate(SwdTrap3) 3_blank_10_a FAKE_NPC,0,1
+job_sword1,55,170,0 duplicate(SwdTrap3) 3_blank_10_b FAKE_NPC,0,1
+job_sword1,54,167,0 duplicate(SwdTrap3) 3_blank_10_c FAKE_NPC,0,1
+job_sword1,55,167,0 duplicate(SwdTrap3) 3_blank_10_d FAKE_NPC,0,1
+job_sword1,53,169,0 duplicate(SwdTrap3) 3_blank_10_e FAKE_NPC,1,0
+job_sword1,53,168,0 duplicate(SwdTrap3) 3_blank_10_f FAKE_NPC,1,0
+job_sword1,56,169,0 duplicate(SwdTrap3) 3_blank_10_g FAKE_NPC,1,0
+job_sword1,56,168,0 duplicate(SwdTrap3) 3_blank_10_h FAKE_NPC,1,0
+job_sword1,58,175,0 duplicate(SwdTrap3) 3_blank_11_a FAKE_NPC,0,1
+job_sword1,59,174,0 duplicate(SwdTrap3) 3_blank_11_b FAKE_NPC,1,0
+job_sword1,60,173,0 duplicate(SwdTrap3) 3_blank_11_c FAKE_NPC,0,1
+job_sword1,61,172,0 duplicate(SwdTrap3) 3_blank_11_d FAKE_NPC,1,0
+job_sword1,58,162,0 duplicate(SwdTrap3) 3_blank_12_a FAKE_NPC,0,1
+job_sword1,59,163,0 duplicate(SwdTrap3) 3_blank_12_b FAKE_NPC,1,0
+job_sword1,60,164,0 duplicate(SwdTrap3) 3_blank_12_c FAKE_NPC,0,1
+job_sword1,61,165,0 duplicate(SwdTrap3) 3_blank_12_d FAKE_NPC,1,0
+job_sword1,76,172,0 duplicate(SwdTrap3) 3_blank_13_a FAKE_NPC,1,0
+job_sword1,77,173,0 duplicate(SwdTrap3) 3_blank_13_b FAKE_NPC,0,1
+job_sword1,78,174,0 duplicate(SwdTrap3) 3_blank_13_c FAKE_NPC,1,0
+job_sword1,79,175,0 duplicate(SwdTrap3) 3_blank_13_d FAKE_NPC,0,1
+job_sword1,76,165,0 duplicate(SwdTrap3) 3_blank_14_a FAKE_NPC,1,0
+job_sword1,77,164,0 duplicate(SwdTrap3) 3_blank_14_b FAKE_NPC,0,1
+job_sword1,78,163,0 duplicate(SwdTrap3) 3_blank_14_c FAKE_NPC,1,0
+job_sword1,79,162,0 duplicate(SwdTrap3) 3_blank_14_d FAKE_NPC,0,1
+job_sword1,94,175,0 duplicate(SwdTrap3) 3_blank_15_a FAKE_NPC,0,1
+job_sword1,95,174,0 duplicate(SwdTrap3) 3_blank_15_b FAKE_NPC,1,0
+job_sword1,98,174,0 duplicate(SwdTrap3) 3_blank_15_c FAKE_NPC,1,0
+job_sword1,99,175,0 duplicate(SwdTrap3) 3_blank_16_d FAKE_NPC,0,1
+job_sword1,96,169,0 duplicate(SwdTrap3) 3_blank_17_a FAKE_NPC,0,0
+job_sword1,97,169,0 duplicate(SwdTrap3) 3_blank_17_b FAKE_NPC,0,0
+job_sword1,97,168,0 duplicate(SwdTrap3) 3_blank_17_c FAKE_NPC,0,0
+job_sword1,96,168,0 duplicate(SwdTrap3) 3_blank_17_d FAKE_NPC,0,0
+job_sword1,94,162,0 duplicate(SwdTrap3) 3_blank_18_a FAKE_NPC,0,1
+job_sword1,95,163,0 duplicate(SwdTrap3) 3_blank_18_b FAKE_NPC,1,0
+job_sword1,98,163,0 duplicate(SwdTrap3) 3_blank_18_c FAKE_NPC,1,0
+job_sword1,99,162,0 duplicate(SwdTrap3) 3_blank_18_d FAKE_NPC,0,1
+job_sword1,114,175,0 duplicate(SwdTrap3) 3_blank_19_a FAKE_NPC,0,1
+job_sword1,115,175,0 duplicate(SwdTrap3) 3_blank_19_b FAKE_NPC,0,1
+job_sword1,114,162,0 duplicate(SwdTrap3) 3_blank_20_a FAKE_NPC,0,1
+job_sword1,115,162,0 duplicate(SwdTrap3) 3_blank_20_b FAKE_NPC,0,1
+job_sword1,126,175,0 duplicate(SwdTrap3) 3_blank_21_a FAKE_NPC,0,1
+job_sword1,127,175,0 duplicate(SwdTrap3) 3_blank_21_b FAKE_NPC,0,1
+job_sword1,126,162,0 duplicate(SwdTrap3) 3_blank_23_a FAKE_NPC,0,1
+job_sword1,127,162,0 duplicate(SwdTrap3) 3_blank_23_b FAKE_NPC,0,1
+job_sword1,160,174,0 duplicate(SwdTrap3) 3_blank_24_a FAKE_NPC,0,2
+job_sword1,161,174,0 duplicate(SwdTrap3) 3_blank_24_b FAKE_NPC,0,2
+job_sword1,160,163,0 duplicate(SwdTrap3) 3_blank_25_a FAKE_NPC,0,2
+job_sword1,161,163,0 duplicate(SwdTrap3) 3_blank_25_b FAKE_NPC,0,2
+job_sword1,168,175,0 duplicate(SwdTrap3) 3_blank_26_a FAKE_NPC,0,2
+job_sword1,169,175,0 duplicate(SwdTrap3) 3_blank_26_b FAKE_NPC,0,2
+job_sword1,168,162,0 duplicate(SwdTrap3) 3_blank_27_a FAKE_NPC,0,2
+job_sword1,169,162,0 duplicate(SwdTrap3) 3_blank_27_b FAKE_NPC,0,2
+job_sword1,176,174,0 duplicate(SwdTrap3) 3_blank_28_a FAKE_NPC,0,2
+job_sword1,177,174,0 duplicate(SwdTrap3) 3_blank_28_b FAKE_NPC,0,2
+job_sword1,178,173,0 duplicate(SwdTrap3) 3_blank_28_c FAKE_NPC,1,0
+job_sword1,178,172,0 duplicate(SwdTrap3) 3_blank_28_d FAKE_NPC,1,0
+job_sword1,181,174,0 duplicate(SwdTrap3) 3_blank_28_e FAKE_NPC,2,0
+job_sword1,179,169,0 duplicate(SwdTrap3) 3_blank_29_a FAKE_NPC,3,0
+job_sword1,179,168,0 duplicate(SwdTrap3) 3_blank_29_b FAKE_NPC,3,0
+job_sword1,182,169,0 duplicate(SwdTrap3) 3_blank_29_c FAKE_NPC,0,2
+job_sword1,183,169,0 duplicate(SwdTrap3) 3_blank_29_d FAKE_NPC,0,2
+job_sword1,181,167,0 duplicate(SwdTrap3) 3_blank_29_e FAKE_NPC,1,0
+job_sword1,181,166,0 duplicate(SwdTrap3) 3_blank_29_f FAKE_NPC,1,0
+job_sword1,183,167,0 duplicate(SwdTrap3) 3_blank_29_g FAKE_NPC,0,1
+job_sword1,176,163,0 duplicate(SwdTrap3) 3_blank_30_a FAKE_NPC,0,2
+job_sword1,177,163,0 duplicate(SwdTrap3) 3_blank_30_b FAKE_NPC,0,2
+job_sword1,181,163,0 duplicate(SwdTrap3) 3_blank_30_c FAKE_NPC,2,0
//== Monsters (all three courses) ==========================
job_sword1,0,0,0,0 monster Chonchon 1183,20,0,0,0
diff --git a/npc/pre-re/merchants/shops.txt b/npc/pre-re/merchants/shops.txt
index 20f0ee933..4abe887a6 100644
--- a/npc/pre-re/merchants/shops.txt
+++ b/npc/pre-re/merchants/shops.txt
@@ -31,9 +31,63 @@
//================= Description ===========================================
//= Pre-renewal-specific town shop NPCs.
//================= Current Version =======================================
-//= 1.2
+//= 1.4
//=========================================================================
+//== Prontera ==============================================
+prt_fild05,290,221,2 trader Tool Dealer#prt 4_M_01,{
+OnInit:
+ sellitem Arrow;
+ sellitem Spectacles;
+ sellitem Red_Potion;
+ sellitem Orange_Potion;
+ sellitem Green_Potion;
+ sellitem Center_Potion;
+ sellitem Wing_Of_Fly;
+ sellitem Wing_Of_Butterfly;
+}
+
+prt_in,126,76,0 trader Tool Dealer#prt1 1_M_INNKEEPER,{
+OnInit:
+ sellitem Spectacles;
+ sellitem Arrow;
+ sellitem Red_Potion;
+ sellitem Orange_Potion;
+ sellitem Yellow_Potion;
+ sellitem White_Potion;
+ sellitem Green_Potion;
+ sellitem Center_Potion;
+ sellitem Awakening_Potion;
+ sellitem Wing_Of_Fly;
+ sellitem Wing_Of_Butterfly;
+ sellitem Booby_Trap;
+ sellitem One_Eyed_Glass;
+}
+
+prontera,218,211,4 trader Pet Groomer#prt 4_M_TELEPORTER,{
+OnInit:
+ sellitem Pet_Food;
+ sellitem Pet_Incubator;
+ sellitem Backpack;
+ sellitem Rocker_Glasses;
+ sellitem Mojji;
+ sellitem Flame_Gemstone;
+ sellitem Vital_Flower_;
+ sellitem Vital_Flower;
+ sellitem Bun_;
+ sellitem Damp_Darkness;
+ sellitem Small_Snow_Flower;
+ sellitem Fresh_Plant;
+ sellitem Big_Cell;
+ sellitem Apple_Pudding;
+ sellitem Mystic_Stone;
+ sellitem Flavored_Alcohol;
+ sellitem Grilled_Rice_Cake;
+ sellitem Fish_With_Blue_Back;
+ sellitem Pumpkin_Pie_;
+ sellitem Traditional_Cookie;
+}
+
//== Izlude ================================================
izlude,105,99,0 trader Butcher#iz 1_M_JOBGUIDER,{
OnInit:
@@ -94,3 +148,67 @@ OnInit:
sellitem Jungle_Carbine;
sellitem Thunder_P;
}
+
+//== Morroc ================================================
+moc_ruins,91,128,4 trader Tool Dealer#moc1 4_F_04,{
+OnInit:
+ sellitem Arrow;
+ sellitem Spectacles;
+ sellitem Red_Potion;
+ sellitem Orange_Potion;
+ sellitem Yellow_Potion;
+ sellitem White_Potion;
+ sellitem Green_Potion;
+ sellitem Center_Potion;
+ sellitem Awakening_Potion;
+ sellitem Wing_Of_Fly;
+ sellitem Wing_Of_Butterfly;
+ sellitem Booby_Trap;
+}
+
+moc_ruins,114,63,6 trader Tool Dealer#moc2 4W_M_03,{
+OnInit:
+ sellitem Arrow;
+ sellitem Spectacles;
+ sellitem Red_Potion;
+ sellitem Orange_Potion;
+ sellitem Yellow_Potion;
+ sellitem White_Potion;
+ sellitem Green_Potion;
+ sellitem Center_Potion;
+ sellitem Awakening_Potion;
+ sellitem Wing_Of_Fly;
+ sellitem Wing_Of_Butterfly;
+ sellitem Booby_Trap;
+ sellitem Luxury_Sunglasses;
+}
+
+moc_ruins,118,170,4 trader Pet Groomer#moc 4_M_TELEPORTER,{
+OnInit:
+ sellitem Pet_Food;
+ sellitem Pet_Incubator;
+ sellitem Backpack;
+ sellitem Rocker_Glasses;
+ sellitem Mojji;
+ sellitem Vital_Flower_;
+ sellitem Flame_Gemstone;
+ sellitem Bun_;
+}
+
+//== Cooking Addition ======================================
+prontera,156,212,1 trader Chef Assistant#prt 8_F_GIRL,{
+OnInit:
+ sellitem Plain_Sauce;
+ sellitem Red_Spice;
+ sellitem Pot;
+ sellitem Bread;
+}
+
+moc_ruins,115,123,5 trader Chef Assistant#moc 4_M_04,{
+OnInit:
+ sellitem Hot_Sauce;
+ sellitem Sweet_Sauce;
+ sellitem Plain_Sauce;
+ sellitem Red_Spice;
+ sellitem Yellow_Spice;
+}
diff --git a/npc/pre-re/mobs/dungeons/lhz_dun.txt b/npc/pre-re/mobs/dungeons/lhz_dun.txt
index b75f72c5f..725fbe2fe 100644
--- a/npc/pre-re/mobs/dungeons/lhz_dun.txt
+++ b/npc/pre-re/mobs/dungeons/lhz_dun.txt
@@ -229,7 +229,7 @@ lhz_dun03,139,117,20,11 monster Sniper Cecil 1644,1,2700000,2500000,1
lhz_dun03,138,138,36,34 monster High Priest Margaretha 1643,1,3300000,3000000,1
lhz_dun03,138,138,36,34 monster High Wizard Kathryne 1645,1,2580000,2460000,1
-lhz_dun03,2,2,0 script summon_boss_lt -1,{
+lhz_dun03,2,2,0 script summon_boss_lt FAKE_NPC,{
OnInit:
initnpctimer;
end;
diff --git a/npc/pre-re/mobs/fields/niflheim.txt b/npc/pre-re/mobs/fields/niflheim.txt
index f6998af62..3c9cc5fe0 100644
--- a/npc/pre-re/mobs/fields/niflheim.txt
+++ b/npc/pre-re/mobs/fields/niflheim.txt
@@ -70,7 +70,7 @@ niflheim,0,0,0,0 monster Heirozoist 1510,10,1200000,600000,0
niflheim,0,0,0,0 monster Quve 1508,20,300000,150000,0
niflheim,0,0,0,0 monster Lude 1509,20,300000,150000,0
-niflheim,1,1,0 script NifInvasion -1,{
+niflheim,1,1,0 script NifInvasion FAKE_NPC,{
OnInit:
while(1)
diff --git a/npc/quests/dandelion_request.txt b/npc/quests/dandelion_request.txt
index 32bf2f407..20ccb9332 100644
--- a/npc/quests/dandelion_request.txt
+++ b/npc/quests/dandelion_request.txt
@@ -2794,7 +2794,7 @@ OnTouch:
end;
}
-que_job01,1,1,1 script #maobartimer1 -1,{
+que_job01,1,1,1 script #maobartimer1 FAKE_NPC,{
OnEnter:
initnpctimer;
@@ -2924,7 +2924,7 @@ OnTouch:
end;
}
-que_job01,1,2,1 script #maobartimer2 -1,{
+que_job01,1,2,1 script #maobartimer2 FAKE_NPC,{
OnEnter:
initnpctimer;
@@ -6446,7 +6446,7 @@ OnEnter:
end;
}
-yuno_in04,1,1,1 script #maobooktimer -1,{
+yuno_in04,1,1,1 script #maobooktimer FAKE_NPC,{
OnEnter:
initnpctimer;
@@ -9970,7 +9970,7 @@ OnEnter:
end;
}
-morocc,1,1,1 script #mao_timer -1,{
+morocc,1,1,1 script #mao_timer FAKE_NPC,{
OnStart:
initnpctimer;
@@ -9986,7 +9986,7 @@ OnStop:
end;
}
-morocc,1,2,1 script #mao_manager -1,{
+morocc,1,2,1 script #mao_manager FAKE_NPC,{
OnStart:
initnpctimer;
diff --git a/npc/quests/eye_of_hellion.txt b/npc/quests/eye_of_hellion.txt
index 52fb40ef2..1b3c18595 100644
--- a/npc/quests/eye_of_hellion.txt
+++ b/npc/quests/eye_of_hellion.txt
@@ -1619,7 +1619,7 @@ payon,182,132,3 script Grout'he Tuccok#hellion 1_M_02,{
}
}
-payon,101,190,0 script #paypuzz1 -1,1,1,{
+payon,101,190,0 script #paypuzz1 FAKE_NPC,1,1,{
OnTouch:
if (HELLIONQ == 48) {
mes "[" + strcharinfo(0) + "]";
diff --git a/npc/quests/first_class/tu_archer.txt b/npc/quests/first_class/tu_archer.txt
index 064f3fd9f..144bdfb2f 100644
--- a/npc/quests/first_class/tu_archer.txt
+++ b/npc/quests/first_class/tu_archer.txt
@@ -1403,7 +1403,7 @@ pay_arche,84,139,3 script Seisner 4_F_JOB_HUNTER,{
pay_arche,76,135,3 script #Target HIDDEN_NPC,{ end; }
//== Acolyte ===============================================
-- script ::Acolyte_Tu -1,{
+- script ::Acolyte_Tu FAKE_NPC,{
mes "[Acolyte]";
if(tu_archer01 == 14){
if (gettime(GETTIME_HOUR) >= 18 && gettime(GETTIME_HOUR) < 22) {
diff --git a/npc/quests/kiel_hyre_quest.txt b/npc/quests/kiel_hyre_quest.txt
index 610ad4e00..756da22a7 100644
--- a/npc/quests/kiel_hyre_quest.txt
+++ b/npc/quests/kiel_hyre_quest.txt
@@ -1986,7 +1986,7 @@ kh_vila,178,20,0 duplicate(BookKHQ1) Book#kh3 HIDDEN_NPC
kh_vila,175,19,0 duplicate(BookKHQ1) Book#kh4 HIDDEN_NPC
//- Store room interior; Letter to Elly on the floor. -
-kh_vila,179,11,0 script Letter#kh -1,1,1,{
+kh_vila,179,11,0 script Letter#kh FAKE_NPC,1,1,{
//OnTouch2:
OnTouch:
if (KielHyreQuest == 18) {
@@ -3443,19 +3443,19 @@ kh_dun01,162,206,0 duplicate(KHKeyardReader) Mechanical Device HIDDEN_NPC
//- Keep monsters out of the quest area -
// Silly really since the rest of it's a dungeon
-//kh_dun01,180,220,0 script Monster Warp#kh1::KHMobWarp -1,5,20,{
+//kh_dun01,180,220,0 script Monster Warp#kh1::KHMobWarp FAKE_NPC,5,20,{
//OnTouchNPC:
// warp "kh_dun01",178,138;
// end;
//}
-//kh_dun01,190,220,0 duplicate(KHMobWarp) Monster Warp#kh2 -1,5,20
-//kh_dun01,200,250,0 duplicate(KHMobWarp) Monster Warp#kh3 -1,5,20
-//kh_dun01,210,220,0 duplicate(KHMobWarp) Monster Warp#kh4 -1,5,20
-//kh_dun01,220,220,0 duplicate(KHMobWarp) Monster Warp#kh5 -1,5,10
+//kh_dun01,190,220,0 duplicate(KHMobWarp) Monster Warp#kh2 FAKE_NPC,5,20
+//kh_dun01,200,250,0 duplicate(KHMobWarp) Monster Warp#kh3 FAKE_NPC,5,20
+//kh_dun01,210,220,0 duplicate(KHMobWarp) Monster Warp#kh4 FAKE_NPC,5,20
+//kh_dun01,220,220,0 duplicate(KHMobWarp) Monster Warp#kh5 FAKE_NPC,5,10
//- Kiel Hyre - OnTouch -
-kh_dun01,224,233,0 script Factory B Area Door -1,5,5,{
+kh_dun01,224,233,0 script Factory B Area Door FAKE_NPC,5,5,{
//OnTouch2:
OnTouch:
if (KielHyreQuest == 40) {
@@ -4611,7 +4611,7 @@ kh_mansion,18,30,4 script Allysia 4_F_KHELLISIA,{
}
//- Abduction triggering NPC -
-lighthalzen,188,200,0 script Abduction_trigger -1,3,1,{
+lighthalzen,188,200,0 script Abduction_trigger FAKE_NPC,3,1,{
//OnTouch2:
OnTouch:
if (KielHyreQuest == 50) {
@@ -6191,7 +6191,7 @@ OnTouch:
}
//- Kiehl's Room; Kiehl_Room_Trap (Entry way trap) -
-kh_kiehl02,49,10,0 script Kiehl_Room_Trap -1,5,3,{
+kh_kiehl02,49,10,0 script Kiehl_Room_Trap FAKE_NPC,5,3,{
end;
OnTouch:
@@ -6729,7 +6729,7 @@ OnTimer1000:
}
//- Kiehl's Room; NPC for mob control, timers, and other junk. -
-kh_kiehl02,1,1,0 script KiehlRoom -1,{
+kh_kiehl02,1,1,0 script KiehlRoom FAKE_NPC,{
end;
OnKiehlMobDead:
diff --git a/npc/quests/monstertamers.txt b/npc/quests/monstertamers.txt
index d8e9e375a..5e8884b17 100644
--- a/npc/quests/monstertamers.txt
+++ b/npc/quests/monstertamers.txt
@@ -484,7 +484,7 @@ aldeba_in,168,175,4 script Monster Tamer#alde 4_M_TELEPORTER,{
}
}
-- script ::MonsterTamer_izlude -1,{
+- script ::MonsterTamer_izlude FAKE_NPC,{
mes "[Shogo]";
mes "Are you pre-occupied with";
mes "gathering items for monsters";
diff --git a/npc/quests/newgears/2004_headgears.txt b/npc/quests/newgears/2004_headgears.txt
index e9cb42069..6ad398d23 100644
--- a/npc/quests/newgears/2004_headgears.txt
+++ b/npc/quests/newgears/2004_headgears.txt
@@ -2610,7 +2610,7 @@ OnInit:
end;
}
-pay_dun03,48,84,4 script SpawnManager#Kitsune -1,{
+pay_dun03,48,84,4 script SpawnManager#Kitsune FAKE_NPC,{
OnInit:
.MyMobs1 = 1;
.MyMobs2 = 1;
diff --git a/npc/quests/okolnir.txt b/npc/quests/okolnir.txt
index d29f0d5b4..67582267e 100644
--- a/npc/quests/okolnir.txt
+++ b/npc/quests/okolnir.txt
@@ -41,7 +41,7 @@ function script F_Okolnir {
return .@sub$;
}
-- script Guide#gq_main -1,{
+- script Guide#gq_main FAKE_NPC,{
.@sub$ = callfunc("F_Okolnir");
.@GID = getcastledata(strnpcinfo(4),1);
if (getcharid(2) == .@GID) {
@@ -188,7 +188,7 @@ que_qsch03,345,23,0 warp Gate02#gq_sch03 1,1,schg_cas03,81,95
que_qsch04,345,23,0 warp Gate02#gq_sch04 1,1,schg_cas04,369,306
que_qsch05,345,23,0 warp Gate02#gq_sch05 1,1,schg_cas05,369,306
-- script Wish Maiden#gq_main -1,{
+- script Wish Maiden#gq_main FAKE_NPC,{
.@sub$ = callfunc("F_Okolnir");
.@t$ = ((compare(strnpcinfo(4),"aru"))?"arug_cas0":"schg_cas0")+(charat(strnpcinfo(4),getstrlen(strnpcinfo(4))-1));
.@GID = getcastledata(.@t$,1);
@@ -386,7 +386,7 @@ que_qsch03,345,82,3 duplicate(Wish Maiden#gq_main) Wish Maiden#gq_sch03 4_F_VALK
que_qsch04,345,82,3 duplicate(Wish Maiden#gq_main) Wish Maiden#gq_sch04 4_F_VALKYRIE2
que_qsch05,345,82,3 duplicate(Wish Maiden#gq_main) Wish Maiden#gq_sch05 4_F_VALKYRIE2
-- script Gate01#gq_main -1,{
+- script Gate01#gq_main FAKE_NPC,{
function SMonster;
.@sub$ = callfunc("F_Okolnir");
@@ -481,7 +481,7 @@ que_qsch03,346,81,0 duplicate(Gate01#gq_main) Gate01#gq_sch03 WARPNPC,1,1
que_qsch04,346,81,0 duplicate(Gate01#gq_main) Gate01#gq_sch04 WARPNPC,1,1
que_qsch05,346,81,0 duplicate(Gate01#gq_main) Gate01#gq_sch05 WARPNPC,1,1
-- script #Gate_manager_main -1,{
+- script #Gate_manager_main FAKE_NPC,{
end;
OnMyMobDead:
@@ -504,7 +504,7 @@ que_qsch03,1,4,0 duplicate(#Gate_manager_main) #Gate_manager_sch03 CLEAR_NPC
que_qsch04,1,4,0 duplicate(#Gate_manager_main) #Gate_manager_sch04 CLEAR_NPC
que_qsch05,1,4,0 duplicate(#Gate_manager_main) #Gate_manager_sch05 CLEAR_NPC
-- script #gq_miromob2_main -1,{
+- script #gq_miromob2_main FAKE_NPC,{
end;
OnEnable:
@@ -558,7 +558,7 @@ que_qsch03,1,4,0 duplicate(#gq_miromob2_main) #gq_miromob2_sch03 CLEAR_NPC
que_qsch04,1,4,0 duplicate(#gq_miromob2_main) #gq_miromob2_sch04 CLEAR_NPC
que_qsch05,1,4,0 duplicate(#gq_miromob2_main) #gq_miromob2_sch05 CLEAR_NPC
-- script #okolnir_main -1,{
+- script #okolnir_main FAKE_NPC,{
end;
OnEnable:
@@ -755,7 +755,7 @@ que_qsch03,1,1,0 duplicate(#okolnir_main) #okolnir_sch03 CLEAR_NPC
que_qsch04,1,1,0 duplicate(#okolnir_main) #okolnir_sch04 CLEAR_NPC
que_qsch05,1,1,0 duplicate(#okolnir_main) #okolnir_sch05 CLEAR_NPC
-- script #Maze_Manager_main -1,{
+- script #Maze_Manager_main FAKE_NPC,{
end;
OnEnable:
@@ -839,7 +839,7 @@ que_qsch03,1,2,0 duplicate(#Maze_Manager_main) #Maze_Manager_sch03 CLEAR_NPC
que_qsch04,1,2,0 duplicate(#Maze_Manager_main) #Maze_Manager_sch04 CLEAR_NPC
que_qsch05,1,2,0 duplicate(#Maze_Manager_main) #Maze_Manager_sch05 CLEAR_NPC
-- script #miro_bf_main -1,{
+- script #miro_bf_main FAKE_NPC,{
function Cell;
OnEnable:
.@sub$ = callfunc("F_Okolnir");
@@ -876,7 +876,7 @@ que_qsch03,2,1,0 duplicate(#miro_bf_main) #miro_bf_sch03 CLEAR_NPC
que_qsch04,2,1,0 duplicate(#miro_bf_main) #miro_bf_sch04 CLEAR_NPC
que_qsch05,2,1,0 duplicate(#miro_bf_main) #miro_bf_sch05 CLEAR_NPC
-- script #miro_rf_main -1,{
+- script #miro_rf_main FAKE_NPC,{
function Cell;
OnEnable:
.@sub$ = callfunc("F_Okolnir");
@@ -914,7 +914,7 @@ que_qsch03,2,2,0 duplicate(#miro_rf_main) #miro_rf_sch03 CLEAR_NPC
que_qsch04,2,2,0 duplicate(#miro_rf_main) #miro_rf_sch04 CLEAR_NPC
que_qsch05,2,2,0 duplicate(#miro_rf_main) #miro_rf_sch05 CLEAR_NPC
-- script #miro_yf_main -1,{
+- script #miro_yf_main FAKE_NPC,{
function Cell;
OnEnable:
.@sub$ = callfunc("F_Okolnir");
@@ -952,7 +952,7 @@ que_qsch03,2,3,0 duplicate(#miro_yf_main) #miro_yf_sch03 CLEAR_NPC
que_qsch04,2,3,0 duplicate(#miro_yf_main) #miro_yf_sch04 CLEAR_NPC
que_qsch05,2,3,0 duplicate(#miro_yf_main) #miro_yf_sch05 CLEAR_NPC
-- script windpath01_main -1,{
+- script windpath01_main FAKE_NPC,{
end;
OnTouch:
@@ -989,7 +989,7 @@ que_qsch03,113,165,0 warp windpath02_sch03 1,1,que_qsch03,139,172
que_qsch04,113,165,0 warp windpath02_sch04 1,1,que_qsch04,139,172
que_qsch05,113,165,0 warp windpath02_sch05 1,1,que_qsch05,139,172
-- script Piamette#main -1,{
+- script Piamette#main FAKE_NPC,{
end;
OnInit:
@@ -1009,7 +1009,7 @@ que_qsch03,131,136,3 duplicate(Piamette#main) Piamette#sch03 PIAMETTE
que_qsch04,131,136,3 duplicate(Piamette#main) Piamette#sch04 PIAMETTE
que_qsch05,131,136,3 duplicate(Piamette#main) Piamette#sch05 PIAMETTE
-- script #event_start01_main -1,{
+- script #event_start01_main FAKE_NPC,{
end;
OnEnable:
@@ -1056,18 +1056,18 @@ OnInit:
disablenpc "#event_start01_"+.@sub$;
end;
}
-que_qaru01,114,158,0 duplicate(#event_start01_main) #event_start01_aru01 -1,1,1
-que_qaru02,114,158,0 duplicate(#event_start01_main) #event_start01_aru02 -1,1,1
-que_qaru03,114,158,0 duplicate(#event_start01_main) #event_start01_aru03 -1,1,1
-que_qaru04,114,158,0 duplicate(#event_start01_main) #event_start01_aru04 -1,1,1
-que_qaru05,114,158,0 duplicate(#event_start01_main) #event_start01_aru05 -1,1,1
-que_qsch01,114,158,0 duplicate(#event_start01_main) #event_start01_sch01 -1,1,1
-que_qsch02,114,158,0 duplicate(#event_start01_main) #event_start01_sch02 -1,1,1
-que_qsch03,114,158,0 duplicate(#event_start01_main) #event_start01_sch03 -1,1,1
-que_qsch04,114,158,0 duplicate(#event_start01_main) #event_start01_sch04 -1,1,1
-que_qsch05,114,158,0 duplicate(#event_start01_main) #event_start01_sch05 -1,1,1
+que_qaru01,114,158,0 duplicate(#event_start01_main) #event_start01_aru01 FAKE_NPC,1,1
+que_qaru02,114,158,0 duplicate(#event_start01_main) #event_start01_aru02 FAKE_NPC,1,1
+que_qaru03,114,158,0 duplicate(#event_start01_main) #event_start01_aru03 FAKE_NPC,1,1
+que_qaru04,114,158,0 duplicate(#event_start01_main) #event_start01_aru04 FAKE_NPC,1,1
+que_qaru05,114,158,0 duplicate(#event_start01_main) #event_start01_aru05 FAKE_NPC,1,1
+que_qsch01,114,158,0 duplicate(#event_start01_main) #event_start01_sch01 FAKE_NPC,1,1
+que_qsch02,114,158,0 duplicate(#event_start01_main) #event_start01_sch02 FAKE_NPC,1,1
+que_qsch03,114,158,0 duplicate(#event_start01_main) #event_start01_sch03 FAKE_NPC,1,1
+que_qsch04,114,158,0 duplicate(#event_start01_main) #event_start01_sch04 FAKE_NPC,1,1
+que_qsch05,114,158,0 duplicate(#event_start01_main) #event_start01_sch05 FAKE_NPC,1,1
-- script #gdtimer01_main -1,{
+- script #gdtimer01_main FAKE_NPC,{
end;
OnEnable:
@@ -1161,7 +1161,7 @@ que_qsch03,2,2,0 duplicate(#gdtimer01_main) #gdtimer01_sch03 CLEAR_NPC
que_qsch04,2,2,0 duplicate(#gdtimer01_main) #gdtimer01_sch04 CLEAR_NPC
que_qsch05,2,2,0 duplicate(#gdtimer01_main) #gdtimer01_sch05 CLEAR_NPC
-- script #gdtimer02_main -1,{
+- script #gdtimer02_main FAKE_NPC,{
end;
OnEnable:
@@ -1235,7 +1235,7 @@ que_qsch03,2,3,0 duplicate(#gdtimer02_main) #gdtimer02_sch03 CLEAR_NPC
que_qsch04,2,3,0 duplicate(#gdtimer02_main) #gdtimer02_sch04 CLEAR_NPC
que_qsch05,2,3,0 duplicate(#gdtimer02_main) #gdtimer02_sch05 CLEAR_NPC
-- script #piamette_main -1,{
+- script #piamette_main FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -1278,7 +1278,7 @@ que_qsch03,1,4,0 duplicate(#piamette_main) #piamette_sch03 CLEAR_NPC
que_qsch04,1,4,0 duplicate(#piamette_main) #piamette_sch04 CLEAR_NPC
que_qsch05,1,4,0 duplicate(#piamette_main) #piamette_sch05 CLEAR_NPC
-- script #getspells_main -1,{
+- script #getspells_main FAKE_NPC,{
end;
OnEnable:
@@ -1321,88 +1321,88 @@ OnInit:
disablenpc "#getspell0"+.@i+"_"+.@sub$;
end;
}
-que_qaru01,113,135,0 duplicate(#getspells_main) #getspell01_aru01 -1,1,1
-que_qaru02,113,135,0 duplicate(#getspells_main) #getspell01_aru02 -1,1,1
-que_qaru03,113,135,0 duplicate(#getspells_main) #getspell01_aru03 -1,1,1
-que_qaru04,113,135,0 duplicate(#getspells_main) #getspell01_aru04 -1,1,1
-que_qaru05,113,135,0 duplicate(#getspells_main) #getspell01_aru05 -1,1,1
-que_qsch01,113,135,0 duplicate(#getspells_main) #getspell01_sch01 -1,1,1
-que_qsch02,113,135,0 duplicate(#getspells_main) #getspell01_sch02 -1,1,1
-que_qsch03,113,135,0 duplicate(#getspells_main) #getspell01_sch03 -1,1,1
-que_qsch04,113,135,0 duplicate(#getspells_main) #getspell01_sch04 -1,1,1
-que_qsch05,113,135,0 duplicate(#getspells_main) #getspell01_sch05 -1,1,1
-que_qaru01,146,150,0 duplicate(#getspells_main) #getspell02_aru01 -1,1,1
-que_qaru02,146,150,0 duplicate(#getspells_main) #getspell02_aru02 -1,1,1
-que_qaru03,146,150,0 duplicate(#getspells_main) #getspell02_aru03 -1,1,1
-que_qaru04,146,150,0 duplicate(#getspells_main) #getspell02_aru04 -1,1,1
-que_qaru05,146,150,0 duplicate(#getspells_main) #getspell02_aru05 -1,1,1
-que_qsch01,146,150,0 duplicate(#getspells_main) #getspell02_sch01 -1,1,1
-que_qsch02,146,150,0 duplicate(#getspells_main) #getspell02_sch02 -1,1,1
-que_qsch03,146,150,0 duplicate(#getspells_main) #getspell02_sch03 -1,1,1
-que_qsch04,146,150,0 duplicate(#getspells_main) #getspell02_sch04 -1,1,1
-que_qsch05,146,150,0 duplicate(#getspells_main) #getspell02_sch05 -1,1,1
-que_qaru01,131,117,0 duplicate(#getspells_main) #getspell03_aru01 -1,1,1
-que_qaru02,131,117,0 duplicate(#getspells_main) #getspell03_aru02 -1,1,1
-que_qaru03,131,117,0 duplicate(#getspells_main) #getspell03_aru03 -1,1,1
-que_qaru04,131,117,0 duplicate(#getspells_main) #getspell03_aru04 -1,1,1
-que_qaru05,131,117,0 duplicate(#getspells_main) #getspell03_aru05 -1,1,1
-que_qsch01,131,117,0 duplicate(#getspells_main) #getspell03_sch01 -1,1,1
-que_qsch02,131,117,0 duplicate(#getspells_main) #getspell03_sch02 -1,1,1
-que_qsch03,131,117,0 duplicate(#getspells_main) #getspell03_sch03 -1,1,1
-que_qsch04,131,117,0 duplicate(#getspells_main) #getspell03_sch04 -1,1,1
-que_qsch05,131,117,0 duplicate(#getspells_main) #getspell03_sch05 -1,1,1
-que_qaru01,117,150,0 duplicate(#getspells_main) #getspell04_aru01 -1,1,1
-que_qaru02,117,150,0 duplicate(#getspells_main) #getspell04_aru02 -1,1,1
-que_qaru03,117,150,0 duplicate(#getspells_main) #getspell04_aru03 -1,1,1
-que_qaru04,117,150,0 duplicate(#getspells_main) #getspell04_aru04 -1,1,1
-que_qaru05,117,150,0 duplicate(#getspells_main) #getspell04_aru05 -1,1,1
-que_qsch01,117,150,0 duplicate(#getspells_main) #getspell04_sch01 -1,1,1
-que_qsch02,117,150,0 duplicate(#getspells_main) #getspell04_sch02 -1,1,1
-que_qsch03,117,150,0 duplicate(#getspells_main) #getspell04_sch03 -1,1,1
-que_qsch04,117,150,0 duplicate(#getspells_main) #getspell04_sch04 -1,1,1
-que_qsch05,117,150,0 duplicate(#getspells_main) #getspell04_sch05 -1,1,1
-que_qaru01,150,135,0 duplicate(#getspells_main) #getspell05_aru01 -1,1,1
-que_qaru02,150,135,0 duplicate(#getspells_main) #getspell05_aru02 -1,1,1
-que_qaru03,150,135,0 duplicate(#getspells_main) #getspell05_aru03 -1,1,1
-que_qaru04,150,135,0 duplicate(#getspells_main) #getspell05_aru04 -1,1,1
-que_qaru05,150,135,0 duplicate(#getspells_main) #getspell05_aru05 -1,1,1
-que_qsch01,150,135,0 duplicate(#getspells_main) #getspell05_sch01 -1,1,1
-que_qsch02,150,135,0 duplicate(#getspells_main) #getspell05_sch02 -1,1,1
-que_qsch03,150,135,0 duplicate(#getspells_main) #getspell05_sch03 -1,1,1
-que_qsch04,150,135,0 duplicate(#getspells_main) #getspell05_sch04 -1,1,1
-que_qsch05,150,135,0 duplicate(#getspells_main) #getspell05_sch05 -1,1,1
-que_qaru01,117,121,0 duplicate(#getspells_main) #getspell06_aru01 -1,1,1
-que_qaru02,117,121,0 duplicate(#getspells_main) #getspell06_aru02 -1,1,1
-que_qaru03,117,121,0 duplicate(#getspells_main) #getspell06_aru03 -1,1,1
-que_qaru04,117,121,0 duplicate(#getspells_main) #getspell06_aru04 -1,1,1
-que_qaru05,117,121,0 duplicate(#getspells_main) #getspell06_aru05 -1,1,1
-que_qsch01,117,121,0 duplicate(#getspells_main) #getspell06_sch01 -1,1,1
-que_qsch02,117,121,0 duplicate(#getspells_main) #getspell06_sch02 -1,1,1
-que_qsch03,117,121,0 duplicate(#getspells_main) #getspell06_sch03 -1,1,1
-que_qsch04,117,121,0 duplicate(#getspells_main) #getspell06_sch04 -1,1,1
-que_qsch05,117,121,0 duplicate(#getspells_main) #getspell06_sch05 -1,1,1
-que_qaru01,131,154,0 duplicate(#getspells_main) #getspell07_aru01 -1,1,1
-que_qaru02,131,154,0 duplicate(#getspells_main) #getspell07_aru02 -1,1,1
-que_qaru03,131,154,0 duplicate(#getspells_main) #getspell07_aru03 -1,1,1
-que_qaru04,131,154,0 duplicate(#getspells_main) #getspell07_aru04 -1,1,1
-que_qaru05,131,154,0 duplicate(#getspells_main) #getspell07_aru05 -1,1,1
-que_qsch01,131,154,0 duplicate(#getspells_main) #getspell07_sch01 -1,1,1
-que_qsch02,131,154,0 duplicate(#getspells_main) #getspell07_sch02 -1,1,1
-que_qsch03,131,154,0 duplicate(#getspells_main) #getspell07_sch03 -1,1,1
-que_qsch04,131,154,0 duplicate(#getspells_main) #getspell07_sch04 -1,1,1
-que_qsch05,131,154,0 duplicate(#getspells_main) #getspell07_sch05 -1,1,1
-que_qaru01,146,121,0 duplicate(#getspells_main) #getspell08_aru01 -1,1,1
-que_qaru02,146,121,0 duplicate(#getspells_main) #getspell08_aru02 -1,1,1
-que_qaru03,146,121,0 duplicate(#getspells_main) #getspell08_aru03 -1,1,1
-que_qaru04,146,121,0 duplicate(#getspells_main) #getspell08_aru04 -1,1,1
-que_qaru05,146,121,0 duplicate(#getspells_main) #getspell08_aru05 -1,1,1
-que_qsch01,146,121,0 duplicate(#getspells_main) #getspell08_sch01 -1,1,1
-que_qsch02,146,121,0 duplicate(#getspells_main) #getspell08_sch02 -1,1,1
-que_qsch03,146,121,0 duplicate(#getspells_main) #getspell08_sch03 -1,1,1
-que_qsch04,146,121,0 duplicate(#getspells_main) #getspell08_sch04 -1,1,1
-que_qsch05,146,121,0 duplicate(#getspells_main) #getspell08_sch05 -1,1,1
-
-- script #main_cages -1,{
+que_qaru01,113,135,0 duplicate(#getspells_main) #getspell01_aru01 FAKE_NPC,1,1
+que_qaru02,113,135,0 duplicate(#getspells_main) #getspell01_aru02 FAKE_NPC,1,1
+que_qaru03,113,135,0 duplicate(#getspells_main) #getspell01_aru03 FAKE_NPC,1,1
+que_qaru04,113,135,0 duplicate(#getspells_main) #getspell01_aru04 FAKE_NPC,1,1
+que_qaru05,113,135,0 duplicate(#getspells_main) #getspell01_aru05 FAKE_NPC,1,1
+que_qsch01,113,135,0 duplicate(#getspells_main) #getspell01_sch01 FAKE_NPC,1,1
+que_qsch02,113,135,0 duplicate(#getspells_main) #getspell01_sch02 FAKE_NPC,1,1
+que_qsch03,113,135,0 duplicate(#getspells_main) #getspell01_sch03 FAKE_NPC,1,1
+que_qsch04,113,135,0 duplicate(#getspells_main) #getspell01_sch04 FAKE_NPC,1,1
+que_qsch05,113,135,0 duplicate(#getspells_main) #getspell01_sch05 FAKE_NPC,1,1
+que_qaru01,146,150,0 duplicate(#getspells_main) #getspell02_aru01 FAKE_NPC,1,1
+que_qaru02,146,150,0 duplicate(#getspells_main) #getspell02_aru02 FAKE_NPC,1,1
+que_qaru03,146,150,0 duplicate(#getspells_main) #getspell02_aru03 FAKE_NPC,1,1
+que_qaru04,146,150,0 duplicate(#getspells_main) #getspell02_aru04 FAKE_NPC,1,1
+que_qaru05,146,150,0 duplicate(#getspells_main) #getspell02_aru05 FAKE_NPC,1,1
+que_qsch01,146,150,0 duplicate(#getspells_main) #getspell02_sch01 FAKE_NPC,1,1
+que_qsch02,146,150,0 duplicate(#getspells_main) #getspell02_sch02 FAKE_NPC,1,1
+que_qsch03,146,150,0 duplicate(#getspells_main) #getspell02_sch03 FAKE_NPC,1,1
+que_qsch04,146,150,0 duplicate(#getspells_main) #getspell02_sch04 FAKE_NPC,1,1
+que_qsch05,146,150,0 duplicate(#getspells_main) #getspell02_sch05 FAKE_NPC,1,1
+que_qaru01,131,117,0 duplicate(#getspells_main) #getspell03_aru01 FAKE_NPC,1,1
+que_qaru02,131,117,0 duplicate(#getspells_main) #getspell03_aru02 FAKE_NPC,1,1
+que_qaru03,131,117,0 duplicate(#getspells_main) #getspell03_aru03 FAKE_NPC,1,1
+que_qaru04,131,117,0 duplicate(#getspells_main) #getspell03_aru04 FAKE_NPC,1,1
+que_qaru05,131,117,0 duplicate(#getspells_main) #getspell03_aru05 FAKE_NPC,1,1
+que_qsch01,131,117,0 duplicate(#getspells_main) #getspell03_sch01 FAKE_NPC,1,1
+que_qsch02,131,117,0 duplicate(#getspells_main) #getspell03_sch02 FAKE_NPC,1,1
+que_qsch03,131,117,0 duplicate(#getspells_main) #getspell03_sch03 FAKE_NPC,1,1
+que_qsch04,131,117,0 duplicate(#getspells_main) #getspell03_sch04 FAKE_NPC,1,1
+que_qsch05,131,117,0 duplicate(#getspells_main) #getspell03_sch05 FAKE_NPC,1,1
+que_qaru01,117,150,0 duplicate(#getspells_main) #getspell04_aru01 FAKE_NPC,1,1
+que_qaru02,117,150,0 duplicate(#getspells_main) #getspell04_aru02 FAKE_NPC,1,1
+que_qaru03,117,150,0 duplicate(#getspells_main) #getspell04_aru03 FAKE_NPC,1,1
+que_qaru04,117,150,0 duplicate(#getspells_main) #getspell04_aru04 FAKE_NPC,1,1
+que_qaru05,117,150,0 duplicate(#getspells_main) #getspell04_aru05 FAKE_NPC,1,1
+que_qsch01,117,150,0 duplicate(#getspells_main) #getspell04_sch01 FAKE_NPC,1,1
+que_qsch02,117,150,0 duplicate(#getspells_main) #getspell04_sch02 FAKE_NPC,1,1
+que_qsch03,117,150,0 duplicate(#getspells_main) #getspell04_sch03 FAKE_NPC,1,1
+que_qsch04,117,150,0 duplicate(#getspells_main) #getspell04_sch04 FAKE_NPC,1,1
+que_qsch05,117,150,0 duplicate(#getspells_main) #getspell04_sch05 FAKE_NPC,1,1
+que_qaru01,150,135,0 duplicate(#getspells_main) #getspell05_aru01 FAKE_NPC,1,1
+que_qaru02,150,135,0 duplicate(#getspells_main) #getspell05_aru02 FAKE_NPC,1,1
+que_qaru03,150,135,0 duplicate(#getspells_main) #getspell05_aru03 FAKE_NPC,1,1
+que_qaru04,150,135,0 duplicate(#getspells_main) #getspell05_aru04 FAKE_NPC,1,1
+que_qaru05,150,135,0 duplicate(#getspells_main) #getspell05_aru05 FAKE_NPC,1,1
+que_qsch01,150,135,0 duplicate(#getspells_main) #getspell05_sch01 FAKE_NPC,1,1
+que_qsch02,150,135,0 duplicate(#getspells_main) #getspell05_sch02 FAKE_NPC,1,1
+que_qsch03,150,135,0 duplicate(#getspells_main) #getspell05_sch03 FAKE_NPC,1,1
+que_qsch04,150,135,0 duplicate(#getspells_main) #getspell05_sch04 FAKE_NPC,1,1
+que_qsch05,150,135,0 duplicate(#getspells_main) #getspell05_sch05 FAKE_NPC,1,1
+que_qaru01,117,121,0 duplicate(#getspells_main) #getspell06_aru01 FAKE_NPC,1,1
+que_qaru02,117,121,0 duplicate(#getspells_main) #getspell06_aru02 FAKE_NPC,1,1
+que_qaru03,117,121,0 duplicate(#getspells_main) #getspell06_aru03 FAKE_NPC,1,1
+que_qaru04,117,121,0 duplicate(#getspells_main) #getspell06_aru04 FAKE_NPC,1,1
+que_qaru05,117,121,0 duplicate(#getspells_main) #getspell06_aru05 FAKE_NPC,1,1
+que_qsch01,117,121,0 duplicate(#getspells_main) #getspell06_sch01 FAKE_NPC,1,1
+que_qsch02,117,121,0 duplicate(#getspells_main) #getspell06_sch02 FAKE_NPC,1,1
+que_qsch03,117,121,0 duplicate(#getspells_main) #getspell06_sch03 FAKE_NPC,1,1
+que_qsch04,117,121,0 duplicate(#getspells_main) #getspell06_sch04 FAKE_NPC,1,1
+que_qsch05,117,121,0 duplicate(#getspells_main) #getspell06_sch05 FAKE_NPC,1,1
+que_qaru01,131,154,0 duplicate(#getspells_main) #getspell07_aru01 FAKE_NPC,1,1
+que_qaru02,131,154,0 duplicate(#getspells_main) #getspell07_aru02 FAKE_NPC,1,1
+que_qaru03,131,154,0 duplicate(#getspells_main) #getspell07_aru03 FAKE_NPC,1,1
+que_qaru04,131,154,0 duplicate(#getspells_main) #getspell07_aru04 FAKE_NPC,1,1
+que_qaru05,131,154,0 duplicate(#getspells_main) #getspell07_aru05 FAKE_NPC,1,1
+que_qsch01,131,154,0 duplicate(#getspells_main) #getspell07_sch01 FAKE_NPC,1,1
+que_qsch02,131,154,0 duplicate(#getspells_main) #getspell07_sch02 FAKE_NPC,1,1
+que_qsch03,131,154,0 duplicate(#getspells_main) #getspell07_sch03 FAKE_NPC,1,1
+que_qsch04,131,154,0 duplicate(#getspells_main) #getspell07_sch04 FAKE_NPC,1,1
+que_qsch05,131,154,0 duplicate(#getspells_main) #getspell07_sch05 FAKE_NPC,1,1
+que_qaru01,146,121,0 duplicate(#getspells_main) #getspell08_aru01 FAKE_NPC,1,1
+que_qaru02,146,121,0 duplicate(#getspells_main) #getspell08_aru02 FAKE_NPC,1,1
+que_qaru03,146,121,0 duplicate(#getspells_main) #getspell08_aru03 FAKE_NPC,1,1
+que_qaru04,146,121,0 duplicate(#getspells_main) #getspell08_aru04 FAKE_NPC,1,1
+que_qaru05,146,121,0 duplicate(#getspells_main) #getspell08_aru05 FAKE_NPC,1,1
+que_qsch01,146,121,0 duplicate(#getspells_main) #getspell08_sch01 FAKE_NPC,1,1
+que_qsch02,146,121,0 duplicate(#getspells_main) #getspell08_sch02 FAKE_NPC,1,1
+que_qsch03,146,121,0 duplicate(#getspells_main) #getspell08_sch03 FAKE_NPC,1,1
+que_qsch04,146,121,0 duplicate(#getspells_main) #getspell08_sch04 FAKE_NPC,1,1
+que_qsch05,146,121,0 duplicate(#getspells_main) #getspell08_sch05 FAKE_NPC,1,1
+
+- script #main_cages FAKE_NPC,{
end;
OnTouch:
@@ -1421,66 +1421,66 @@ OnInit:
disablenpc "#"+.@sub$+"_cage0"+.@i;
end;
}
-que_qaru01,103,153,0 duplicate(#main_cages) #aru01_cage01 -1,1,1
-que_qaru02,103,153,0 duplicate(#main_cages) #aru02_cage01 -1,1,1
-que_qaru03,103,153,0 duplicate(#main_cages) #aru03_cage01 -1,1,1
-que_qaru04,103,153,0 duplicate(#main_cages) #aru04_cage01 -1,1,1
-que_qaru05,103,153,0 duplicate(#main_cages) #aru05_cage01 -1,1,1
-que_qsch01,103,153,0 duplicate(#main_cages) #sch01_cage01 -1,1,1
-que_qsch02,103,153,0 duplicate(#main_cages) #sch02_cage01 -1,1,1
-que_qsch03,103,153,0 duplicate(#main_cages) #sch03_cage01 -1,1,1
-que_qsch04,103,153,0 duplicate(#main_cages) #sch04_cage01 -1,1,1
-que_qsch05,103,153,0 duplicate(#main_cages) #sch05_cage01 -1,1,1
-que_qaru01,102,135,0 duplicate(#main_cages) #aru01_cage02 -1,1,1
-que_qaru02,102,135,0 duplicate(#main_cages) #aru02_cage02 -1,1,1
-que_qaru03,102,135,0 duplicate(#main_cages) #aru03_cage02 -1,1,1
-que_qaru04,102,135,0 duplicate(#main_cages) #aru04_cage02 -1,1,1
-que_qaru05,102,135,0 duplicate(#main_cages) #aru05_cage02 -1,1,1
-que_qsch01,102,135,0 duplicate(#main_cages) #sch01_cage02 -1,1,1
-que_qsch02,102,135,0 duplicate(#main_cages) #sch02_cage02 -1,1,1
-que_qsch03,102,135,0 duplicate(#main_cages) #sch03_cage02 -1,1,1
-que_qsch04,102,135,0 duplicate(#main_cages) #sch04_cage02 -1,1,1
-que_qsch05,102,135,0 duplicate(#main_cages) #sch05_cage02 -1,1,1
-que_qaru01,113,111,0 duplicate(#main_cages) #aru01_cage03 -1,1,1
-que_qaru02,113,111,0 duplicate(#main_cages) #aru02_cage03 -1,1,1
-que_qaru03,113,111,0 duplicate(#main_cages) #aru03_cage03 -1,1,1
-que_qaru04,113,111,0 duplicate(#main_cages) #aru04_cage03 -1,1,1
-que_qaru05,113,111,0 duplicate(#main_cages) #aru05_cage03 -1,1,1
-que_qsch01,113,111,0 duplicate(#main_cages) #sch01_cage03 -1,1,1
-que_qsch02,113,111,0 duplicate(#main_cages) #sch02_cage03 -1,1,1
-que_qsch03,113,111,0 duplicate(#main_cages) #sch03_cage03 -1,1,1
-que_qsch04,113,111,0 duplicate(#main_cages) #sch04_cage03 -1,1,1
-que_qsch05,113,111,0 duplicate(#main_cages) #sch05_cage03 -1,1,1
-que_qaru01,161,105,0 duplicate(#main_cages) #aru01_cage04 -1,1,1
-que_qaru02,161,105,0 duplicate(#main_cages) #aru02_cage04 -1,1,1
-que_qaru03,161,105,0 duplicate(#main_cages) #aru03_cage04 -1,1,1
-que_qaru04,161,105,0 duplicate(#main_cages) #aru04_cage04 -1,1,1
-que_qaru05,161,105,0 duplicate(#main_cages) #aru05_cage04 -1,1,1
-que_qsch01,161,105,0 duplicate(#main_cages) #sch01_cage04 -1,1,1
-que_qsch02,161,105,0 duplicate(#main_cages) #sch02_cage04 -1,1,1
-que_qsch03,161,105,0 duplicate(#main_cages) #sch03_cage04 -1,1,1
-que_qsch04,161,105,0 duplicate(#main_cages) #sch04_cage04 -1,1,1
-que_qsch05,161,105,0 duplicate(#main_cages) #sch05_cage04 -1,1,1
-que_qaru01,168,135,0 duplicate(#main_cages) #aru01_cage05 -1,1,1
-que_qaru02,168,135,0 duplicate(#main_cages) #aru02_cage05 -1,1,1
-que_qaru03,168,135,0 duplicate(#main_cages) #aru03_cage05 -1,1,1
-que_qaru04,168,135,0 duplicate(#main_cages) #aru04_cage05 -1,1,1
-que_qaru05,168,135,0 duplicate(#main_cages) #aru05_cage05 -1,1,1
-que_qsch01,168,135,0 duplicate(#main_cages) #sch01_cage05 -1,1,1
-que_qsch02,168,135,0 duplicate(#main_cages) #sch02_cage05 -1,1,1
-que_qsch03,168,135,0 duplicate(#main_cages) #sch03_cage05 -1,1,1
-que_qsch04,168,135,0 duplicate(#main_cages) #sch04_cage05 -1,1,1
-que_qsch05,168,135,0 duplicate(#main_cages) #sch05_cage05 -1,1,1
-que_qaru01,150,159,0 duplicate(#main_cages) #aru01_cage06 -1,1,1
-que_qaru02,150,159,0 duplicate(#main_cages) #aru02_cage06 -1,1,1
-que_qaru03,150,159,0 duplicate(#main_cages) #aru03_cage06 -1,1,1
-que_qaru04,150,159,0 duplicate(#main_cages) #aru04_cage06 -1,1,1
-que_qaru05,150,159,0 duplicate(#main_cages) #aru05_cage06 -1,1,1
-que_qsch01,150,159,0 duplicate(#main_cages) #sch01_cage06 -1,1,1
-que_qsch02,150,159,0 duplicate(#main_cages) #sch02_cage06 -1,1,1
-que_qsch03,150,159,0 duplicate(#main_cages) #sch03_cage06 -1,1,1
-que_qsch04,150,159,0 duplicate(#main_cages) #sch04_cage06 -1,1,1
-que_qsch05,150,159,0 duplicate(#main_cages) #sch05_cage06 -1,1,1
+que_qaru01,103,153,0 duplicate(#main_cages) #aru01_cage01 FAKE_NPC,1,1
+que_qaru02,103,153,0 duplicate(#main_cages) #aru02_cage01 FAKE_NPC,1,1
+que_qaru03,103,153,0 duplicate(#main_cages) #aru03_cage01 FAKE_NPC,1,1
+que_qaru04,103,153,0 duplicate(#main_cages) #aru04_cage01 FAKE_NPC,1,1
+que_qaru05,103,153,0 duplicate(#main_cages) #aru05_cage01 FAKE_NPC,1,1
+que_qsch01,103,153,0 duplicate(#main_cages) #sch01_cage01 FAKE_NPC,1,1
+que_qsch02,103,153,0 duplicate(#main_cages) #sch02_cage01 FAKE_NPC,1,1
+que_qsch03,103,153,0 duplicate(#main_cages) #sch03_cage01 FAKE_NPC,1,1
+que_qsch04,103,153,0 duplicate(#main_cages) #sch04_cage01 FAKE_NPC,1,1
+que_qsch05,103,153,0 duplicate(#main_cages) #sch05_cage01 FAKE_NPC,1,1
+que_qaru01,102,135,0 duplicate(#main_cages) #aru01_cage02 FAKE_NPC,1,1
+que_qaru02,102,135,0 duplicate(#main_cages) #aru02_cage02 FAKE_NPC,1,1
+que_qaru03,102,135,0 duplicate(#main_cages) #aru03_cage02 FAKE_NPC,1,1
+que_qaru04,102,135,0 duplicate(#main_cages) #aru04_cage02 FAKE_NPC,1,1
+que_qaru05,102,135,0 duplicate(#main_cages) #aru05_cage02 FAKE_NPC,1,1
+que_qsch01,102,135,0 duplicate(#main_cages) #sch01_cage02 FAKE_NPC,1,1
+que_qsch02,102,135,0 duplicate(#main_cages) #sch02_cage02 FAKE_NPC,1,1
+que_qsch03,102,135,0 duplicate(#main_cages) #sch03_cage02 FAKE_NPC,1,1
+que_qsch04,102,135,0 duplicate(#main_cages) #sch04_cage02 FAKE_NPC,1,1
+que_qsch05,102,135,0 duplicate(#main_cages) #sch05_cage02 FAKE_NPC,1,1
+que_qaru01,113,111,0 duplicate(#main_cages) #aru01_cage03 FAKE_NPC,1,1
+que_qaru02,113,111,0 duplicate(#main_cages) #aru02_cage03 FAKE_NPC,1,1
+que_qaru03,113,111,0 duplicate(#main_cages) #aru03_cage03 FAKE_NPC,1,1
+que_qaru04,113,111,0 duplicate(#main_cages) #aru04_cage03 FAKE_NPC,1,1
+que_qaru05,113,111,0 duplicate(#main_cages) #aru05_cage03 FAKE_NPC,1,1
+que_qsch01,113,111,0 duplicate(#main_cages) #sch01_cage03 FAKE_NPC,1,1
+que_qsch02,113,111,0 duplicate(#main_cages) #sch02_cage03 FAKE_NPC,1,1
+que_qsch03,113,111,0 duplicate(#main_cages) #sch03_cage03 FAKE_NPC,1,1
+que_qsch04,113,111,0 duplicate(#main_cages) #sch04_cage03 FAKE_NPC,1,1
+que_qsch05,113,111,0 duplicate(#main_cages) #sch05_cage03 FAKE_NPC,1,1
+que_qaru01,161,105,0 duplicate(#main_cages) #aru01_cage04 FAKE_NPC,1,1
+que_qaru02,161,105,0 duplicate(#main_cages) #aru02_cage04 FAKE_NPC,1,1
+que_qaru03,161,105,0 duplicate(#main_cages) #aru03_cage04 FAKE_NPC,1,1
+que_qaru04,161,105,0 duplicate(#main_cages) #aru04_cage04 FAKE_NPC,1,1
+que_qaru05,161,105,0 duplicate(#main_cages) #aru05_cage04 FAKE_NPC,1,1
+que_qsch01,161,105,0 duplicate(#main_cages) #sch01_cage04 FAKE_NPC,1,1
+que_qsch02,161,105,0 duplicate(#main_cages) #sch02_cage04 FAKE_NPC,1,1
+que_qsch03,161,105,0 duplicate(#main_cages) #sch03_cage04 FAKE_NPC,1,1
+que_qsch04,161,105,0 duplicate(#main_cages) #sch04_cage04 FAKE_NPC,1,1
+que_qsch05,161,105,0 duplicate(#main_cages) #sch05_cage04 FAKE_NPC,1,1
+que_qaru01,168,135,0 duplicate(#main_cages) #aru01_cage05 FAKE_NPC,1,1
+que_qaru02,168,135,0 duplicate(#main_cages) #aru02_cage05 FAKE_NPC,1,1
+que_qaru03,168,135,0 duplicate(#main_cages) #aru03_cage05 FAKE_NPC,1,1
+que_qaru04,168,135,0 duplicate(#main_cages) #aru04_cage05 FAKE_NPC,1,1
+que_qaru05,168,135,0 duplicate(#main_cages) #aru05_cage05 FAKE_NPC,1,1
+que_qsch01,168,135,0 duplicate(#main_cages) #sch01_cage05 FAKE_NPC,1,1
+que_qsch02,168,135,0 duplicate(#main_cages) #sch02_cage05 FAKE_NPC,1,1
+que_qsch03,168,135,0 duplicate(#main_cages) #sch03_cage05 FAKE_NPC,1,1
+que_qsch04,168,135,0 duplicate(#main_cages) #sch04_cage05 FAKE_NPC,1,1
+que_qsch05,168,135,0 duplicate(#main_cages) #sch05_cage05 FAKE_NPC,1,1
+que_qaru01,150,159,0 duplicate(#main_cages) #aru01_cage06 FAKE_NPC,1,1
+que_qaru02,150,159,0 duplicate(#main_cages) #aru02_cage06 FAKE_NPC,1,1
+que_qaru03,150,159,0 duplicate(#main_cages) #aru03_cage06 FAKE_NPC,1,1
+que_qaru04,150,159,0 duplicate(#main_cages) #aru04_cage06 FAKE_NPC,1,1
+que_qaru05,150,159,0 duplicate(#main_cages) #aru05_cage06 FAKE_NPC,1,1
+que_qsch01,150,159,0 duplicate(#main_cages) #sch01_cage06 FAKE_NPC,1,1
+que_qsch02,150,159,0 duplicate(#main_cages) #sch02_cage06 FAKE_NPC,1,1
+que_qsch03,150,159,0 duplicate(#main_cages) #sch03_cage06 FAKE_NPC,1,1
+que_qsch04,150,159,0 duplicate(#main_cages) #sch04_cage06 FAKE_NPC,1,1
+que_qsch05,150,159,0 duplicate(#main_cages) #sch05_cage06 FAKE_NPC,1,1
que_qaru01,1,8,0 script #gd_main_mobctrl CLEAR_NPC,{
end;
@@ -1528,7 +1528,7 @@ que_qsch03,1,8,0 duplicate(#gd_main_mobctrl) #gd_sch03_mobctrl CLEAR_NPC
que_qsch04,1,8,0 duplicate(#gd_main_mobctrl) #gd_sch04_mobctrl CLEAR_NPC
que_qsch05,1,8,0 duplicate(#gd_main_mobctrl) #gd_sch05_mobctrl CLEAR_NPC
-- script windpaths_main -1,{
+- script windpaths_main FAKE_NPC,{
end;
OnTouch:
@@ -1568,7 +1568,7 @@ que_qsch03,128,104,0 duplicate(windpaths_main) windpath04_sch03 WARPNPC,1,1
que_qsch04,128,104,0 duplicate(windpaths_main) windpath04_sch04 WARPNPC,1,1
que_qsch05,128,104,0 duplicate(windpaths_main) windpath04_sch05 WARPNPC,1,1
-- script #nm_switch_main -1,{
+- script #nm_switch_main FAKE_NPC,{
end;
OnTouch:
@@ -1627,18 +1627,18 @@ OnInit:
disablenpc "#nm_switch_"+.@sub$;
end;
}
-que_qaru01,253,273,0 duplicate(#nm_switch_main) #nm_switch_aru01 -1,5,5
-que_qaru02,253,273,0 duplicate(#nm_switch_main) #nm_switch_aru02 -1,5,5
-que_qaru03,253,273,0 duplicate(#nm_switch_main) #nm_switch_aru03 -1,5,5
-que_qaru04,253,273,0 duplicate(#nm_switch_main) #nm_switch_aru04 -1,5,5
-que_qaru05,253,273,0 duplicate(#nm_switch_main) #nm_switch_aru05 -1,5,5
-que_qsch01,253,273,0 duplicate(#nm_switch_main) #nm_switch_sch01 -1,5,5
-que_qsch02,253,273,0 duplicate(#nm_switch_main) #nm_switch_sch02 -1,5,5
-que_qsch03,253,273,0 duplicate(#nm_switch_main) #nm_switch_sch03 -1,5,5
-que_qsch04,253,273,0 duplicate(#nm_switch_main) #nm_switch_sch04 -1,5,5
-que_qsch05,253,273,0 duplicate(#nm_switch_main) #nm_switch_sch05 -1,5,5
-
-- script #nmsommain_jin01 -1,{
+que_qaru01,253,273,0 duplicate(#nm_switch_main) #nm_switch_aru01 FAKE_NPC,5,5
+que_qaru02,253,273,0 duplicate(#nm_switch_main) #nm_switch_aru02 FAKE_NPC,5,5
+que_qaru03,253,273,0 duplicate(#nm_switch_main) #nm_switch_aru03 FAKE_NPC,5,5
+que_qaru04,253,273,0 duplicate(#nm_switch_main) #nm_switch_aru04 FAKE_NPC,5,5
+que_qaru05,253,273,0 duplicate(#nm_switch_main) #nm_switch_aru05 FAKE_NPC,5,5
+que_qsch01,253,273,0 duplicate(#nm_switch_main) #nm_switch_sch01 FAKE_NPC,5,5
+que_qsch02,253,273,0 duplicate(#nm_switch_main) #nm_switch_sch02 FAKE_NPC,5,5
+que_qsch03,253,273,0 duplicate(#nm_switch_main) #nm_switch_sch03 FAKE_NPC,5,5
+que_qsch04,253,273,0 duplicate(#nm_switch_main) #nm_switch_sch04 FAKE_NPC,5,5
+que_qsch05,253,273,0 duplicate(#nm_switch_main) #nm_switch_sch05 FAKE_NPC,5,5
+
+- script #nmsommain_jin01 FAKE_NPC,{
OnEnable:
.@sub$ = callfunc("F_Okolnir");
donpcevent "#"+.@sub$+"_stone01::OnEnable";
@@ -1676,18 +1676,18 @@ OnTimer180000:
OnMyMobDead:
end;
}
-que_qaru01,229,297,0 duplicate(#nmsommain_jin01) #nmsomaru01_jin01 -1
-que_qaru02,229,297,0 duplicate(#nmsommain_jin01) #nmsomaru02_jin01 -1
-que_qaru03,229,297,0 duplicate(#nmsommain_jin01) #nmsomaru03_jin01 -1
-que_qaru04,229,297,0 duplicate(#nmsommain_jin01) #nmsomaru04_jin01 -1
-que_qaru05,229,297,0 duplicate(#nmsommain_jin01) #nmsomaru05_jin01 -1
-que_qsch01,229,297,0 duplicate(#nmsommain_jin01) #nmsomsch01_jin01 -1
-que_qsch02,229,297,0 duplicate(#nmsommain_jin01) #nmsomsch02_jin01 -1
-que_qsch03,229,297,0 duplicate(#nmsommain_jin01) #nmsomsch03_jin01 -1
-que_qsch04,229,297,0 duplicate(#nmsommain_jin01) #nmsomsch04_jin01 -1
-que_qsch05,229,297,0 duplicate(#nmsommain_jin01) #nmsomsch05_jin01 -1
+que_qaru01,229,297,0 duplicate(#nmsommain_jin01) #nmsomaru01_jin01 FAKE_NPC
+que_qaru02,229,297,0 duplicate(#nmsommain_jin01) #nmsomaru02_jin01 FAKE_NPC
+que_qaru03,229,297,0 duplicate(#nmsommain_jin01) #nmsomaru03_jin01 FAKE_NPC
+que_qaru04,229,297,0 duplicate(#nmsommain_jin01) #nmsomaru04_jin01 FAKE_NPC
+que_qaru05,229,297,0 duplicate(#nmsommain_jin01) #nmsomaru05_jin01 FAKE_NPC
+que_qsch01,229,297,0 duplicate(#nmsommain_jin01) #nmsomsch01_jin01 FAKE_NPC
+que_qsch02,229,297,0 duplicate(#nmsommain_jin01) #nmsomsch02_jin01 FAKE_NPC
+que_qsch03,229,297,0 duplicate(#nmsommain_jin01) #nmsomsch03_jin01 FAKE_NPC
+que_qsch04,229,297,0 duplicate(#nmsommain_jin01) #nmsomsch04_jin01 FAKE_NPC
+que_qsch05,229,297,0 duplicate(#nmsommain_jin01) #nmsomsch05_jin01 FAKE_NPC
-- script #main_stone01 -1,{
+- script #main_stone01 FAKE_NPC,{
end;
OnEnable:
@@ -1724,7 +1724,7 @@ que_qsch03,2,8,0 duplicate(#main_stone01) #sch03_stone01 CLEAR_NPC
que_qsch04,2,8,0 duplicate(#main_stone01) #sch04_stone01 CLEAR_NPC
que_qsch05,2,8,0 duplicate(#main_stone01) #sch05_stone01 CLEAR_NPC
-- script #nmsommain_jin02 -1,{
+- script #nmsommain_jin02 FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -1760,18 +1760,18 @@ OnTimer180000:
OnMyMobDead:
end;
}
-que_qaru01,275,299,0 duplicate(#nmsommain_jin02) #nmsomaru01_jin02 -1
-que_qaru02,275,299,0 duplicate(#nmsommain_jin02) #nmsomaru02_jin02 -1
-que_qaru03,275,299,0 duplicate(#nmsommain_jin02) #nmsomaru03_jin02 -1
-que_qaru04,275,299,0 duplicate(#nmsommain_jin02) #nmsomaru04_jin02 -1
-que_qaru05,275,299,0 duplicate(#nmsommain_jin02) #nmsomaru05_jin02 -1
-que_qsch01,275,299,0 duplicate(#nmsommain_jin02) #nmsomsch01_jin02 -1
-que_qsch02,275,299,0 duplicate(#nmsommain_jin02) #nmsomsch02_jin02 -1
-que_qsch03,275,299,0 duplicate(#nmsommain_jin02) #nmsomsch03_jin02 -1
-que_qsch04,275,299,0 duplicate(#nmsommain_jin02) #nmsomsch04_jin02 -1
-que_qsch05,275,299,0 duplicate(#nmsommain_jin02) #nmsomsch05_jin02 -1
+que_qaru01,275,299,0 duplicate(#nmsommain_jin02) #nmsomaru01_jin02 FAKE_NPC
+que_qaru02,275,299,0 duplicate(#nmsommain_jin02) #nmsomaru02_jin02 FAKE_NPC
+que_qaru03,275,299,0 duplicate(#nmsommain_jin02) #nmsomaru03_jin02 FAKE_NPC
+que_qaru04,275,299,0 duplicate(#nmsommain_jin02) #nmsomaru04_jin02 FAKE_NPC
+que_qaru05,275,299,0 duplicate(#nmsommain_jin02) #nmsomaru05_jin02 FAKE_NPC
+que_qsch01,275,299,0 duplicate(#nmsommain_jin02) #nmsomsch01_jin02 FAKE_NPC
+que_qsch02,275,299,0 duplicate(#nmsommain_jin02) #nmsomsch02_jin02 FAKE_NPC
+que_qsch03,275,299,0 duplicate(#nmsommain_jin02) #nmsomsch03_jin02 FAKE_NPC
+que_qsch04,275,299,0 duplicate(#nmsommain_jin02) #nmsomsch04_jin02 FAKE_NPC
+que_qsch05,275,299,0 duplicate(#nmsommain_jin02) #nmsomsch05_jin02 FAKE_NPC
-- script #main_stone02 -1,{
+- script #main_stone02 FAKE_NPC,{
end;
OnEnable:
@@ -1808,7 +1808,7 @@ que_qsch03,2,9,0 duplicate(#main_stone02) #sch03_stone02 CLEAR_NPC
que_qsch04,2,9,0 duplicate(#main_stone02) #sch04_stone02 CLEAR_NPC
que_qsch05,2,9,0 duplicate(#main_stone02) #sch05_stone02 CLEAR_NPC
-- script #nmsommain_jin03 -1,{
+- script #nmsommain_jin03 FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -1852,18 +1852,18 @@ OnTimer360000:
OnMyMobDead:
end;
}
-que_qaru01,251,340,0 duplicate(#nmsommain_jin03) #nmsomaru01_jin03 -1
-que_qaru02,251,340,0 duplicate(#nmsommain_jin03) #nmsomaru02_jin03 -1
-que_qaru03,251,340,0 duplicate(#nmsommain_jin03) #nmsomaru03_jin03 -1
-que_qaru04,251,340,0 duplicate(#nmsommain_jin03) #nmsomaru04_jin03 -1
-que_qaru05,251,340,0 duplicate(#nmsommain_jin03) #nmsomaru05_jin03 -1
-que_qsch01,251,340,0 duplicate(#nmsommain_jin03) #nmsomsch01_jin03 -1
-que_qsch02,251,340,0 duplicate(#nmsommain_jin03) #nmsomsch02_jin03 -1
-que_qsch03,251,340,0 duplicate(#nmsommain_jin03) #nmsomsch03_jin03 -1
-que_qsch04,251,340,0 duplicate(#nmsommain_jin03) #nmsomsch04_jin03 -1
-que_qsch05,251,340,0 duplicate(#nmsommain_jin03) #nmsomsch05_jin03 -1
+que_qaru01,251,340,0 duplicate(#nmsommain_jin03) #nmsomaru01_jin03 FAKE_NPC
+que_qaru02,251,340,0 duplicate(#nmsommain_jin03) #nmsomaru02_jin03 FAKE_NPC
+que_qaru03,251,340,0 duplicate(#nmsommain_jin03) #nmsomaru03_jin03 FAKE_NPC
+que_qaru04,251,340,0 duplicate(#nmsommain_jin03) #nmsomaru04_jin03 FAKE_NPC
+que_qaru05,251,340,0 duplicate(#nmsommain_jin03) #nmsomaru05_jin03 FAKE_NPC
+que_qsch01,251,340,0 duplicate(#nmsommain_jin03) #nmsomsch01_jin03 FAKE_NPC
+que_qsch02,251,340,0 duplicate(#nmsommain_jin03) #nmsomsch02_jin03 FAKE_NPC
+que_qsch03,251,340,0 duplicate(#nmsommain_jin03) #nmsomsch03_jin03 FAKE_NPC
+que_qsch04,251,340,0 duplicate(#nmsommain_jin03) #nmsomsch04_jin03 FAKE_NPC
+que_qsch05,251,340,0 duplicate(#nmsommain_jin03) #nmsomsch05_jin03 FAKE_NPC
-- script #main_stone03 -1,{
+- script #main_stone03 FAKE_NPC,{
end;
OnEnable:
@@ -1900,7 +1900,7 @@ que_qsch03,2,10,0 duplicate(#main_stone03) #sch03_stone03 CLEAR_NPC
que_qsch04,2,10,0 duplicate(#main_stone03) #sch04_stone03 CLEAR_NPC
que_qsch05,2,10,0 duplicate(#main_stone03) #sch05_stone03 CLEAR_NPC
-- script Guard of Shadow#main_all -1,{
+- script Guard of Shadow#main_all FAKE_NPC,{
end;
OnTouch:
.@sub$ = callfunc("F_Okolnir");
@@ -1973,7 +1973,7 @@ que_qsch05,224,290,5 duplicate(Guard of Shadow#main_all) Guard of Shadow#sch05_0
que_qsch05,236,296,5 duplicate(Guard of Shadow#main_all) Guard of Shadow#sch05_03 SKOGUL,4,4
que_qsch05,225,303,5 duplicate(Guard of Shadow#main_all) Guard of Shadow#sch05_04 SKOGUL,4,4
-- script Bloody Hunter#main_all -1,{
+- script Bloody Hunter#main_all FAKE_NPC,{
end;
OnTouch:
@@ -2047,7 +2047,7 @@ que_qsch05,271,283,3 duplicate(Bloody Hunter#main_all) Bloody Hunter#sch05_ac02
que_qsch05,270,307,3 duplicate(Bloody Hunter#main_all) Bloody Hunter#sch05_ac03 FRUS,4,4
que_qsch05,279,300,3 duplicate(Bloody Hunter#main_all) Bloody Hunter#sch05_ac04 FRUS,4,4
-- script Temple Keeper#main_all -1,{
+- script Temple Keeper#main_all FAKE_NPC,{
end;
OnTouch:
@@ -2099,7 +2099,7 @@ que_qsch04,255,330,3 duplicate(Temple Keeper#main_all) Temple Keeper#sch04_ac02
que_qsch05,247,330,5 duplicate(Temple Keeper#main_all) Temple Keeper#sch05_ac01 GARDEN_WATCHER,4,4
que_qsch05,255,330,3 duplicate(Temple Keeper#main_all) Temple Keeper#sch05_ac02 GARDEN_WATCHER,4,4
-- script Wish Maiden#main_boss -1,{
+- script Wish Maiden#main_boss FAKE_NPC,{
end;
OnDisable:
@@ -2157,7 +2157,7 @@ que_qsch03,251,255,3 duplicate(Wish Maiden#main_boss) Wish Maiden#sch03_boss WIS
que_qsch04,251,255,3 duplicate(Wish Maiden#main_boss) Wish Maiden#sch04_boss WISH_MAIDEN
que_qsch05,251,255,3 duplicate(Wish Maiden#main_boss) Wish Maiden#sch05_boss WISH_MAIDEN
-- script Wish Maiden#main_gift -1,{
+- script Wish Maiden#main_gift FAKE_NPC,{
.@sub$ = callfunc("F_Okolnir");
.@t$ = ((compare(strnpcinfo(4),"aru"))?"arug_cas0":"schg_cas0")+(charat(strnpcinfo(4),getstrlen(strnpcinfo(4))-1));
.@GID = getcastledata(.@t$,1);
@@ -2286,7 +2286,7 @@ que_qsch03,252,340,3 duplicate(Wish Maiden#main_gift) Wish Maiden#sch03_gift 4_F
que_qsch04,252,340,3 duplicate(Wish Maiden#main_gift) Wish Maiden#sch04_gift 4_F_VALKYRIE2
que_qsch05,252,340,3 duplicate(Wish Maiden#main_gift) Wish Maiden#sch05_gift 4_F_VALKYRIE2
-- script #to_agit_main_gate -1,{
+- script #to_agit_main_gate FAKE_NPC,{
end;
OnTouch:
@@ -2310,7 +2310,7 @@ que_qsch03,252,339,0 duplicate(#to_agit_main_gate) #to_agit_sch03_gate WARPNPC,1
que_qsch04,252,339,0 duplicate(#to_agit_main_gate) #to_agit_sch04_gate WARPNPC,1,1
que_qsch05,252,339,0 duplicate(#to_agit_main_gate) #to_agit_sch05_gate WARPNPC,1,1
-- script #okolnir_main_time01 -1,{
+- script #okolnir_main_time01 FAKE_NPC,{
end;
OnEnable:
diff --git a/npc/quests/quests_13_1.txt b/npc/quests/quests_13_1.txt
index 8c0adc421..07bc2ff6b 100644
--- a/npc/quests/quests_13_1.txt
+++ b/npc/quests/quests_13_1.txt
@@ -586,7 +586,7 @@ geffen,90,67,3 script Promotional Staff#gef 4W_SAILOR,{
end;
}
-- script ::PromotionalStaff_izlude -1,{
+- script ::PromotionalStaff_izlude FAKE_NPC,{
if (ep13_ryu > 8) {
mes "[Promotional Staff]";
mes "I bless you for your future! May it be full of happiness!";
@@ -1814,7 +1814,7 @@ moc_fild22b,230,197,5 script Munkenro#2 4_M_RUSMAN1,{
}
}
-moc_fild22b,1,1,0 script Head of the Alliance#moo -1,{
+moc_fild22b,1,1,0 script Head of the Alliance#moo FAKE_NPC,{
OnInit:
disablenpc "Head of the Alliance#moo";
end;
@@ -4663,7 +4663,7 @@ mid_camp,336,171,1 script Camp Guard#man1 4_M_EIN_SOLDIER,{
mid_camp,13,143,5 duplicate(Camp Guard#man1) Camp Guard#man2 4_M_EIN_SOLDIER
mid_camp,9,215,5 duplicate(Camp Guard#man1) Camp Guard#man3 4_M_EIN_SOLDIER
-mid_camp,49,154,0 script #env_clear -1,3,3,{
+mid_camp,49,154,0 script #env_clear FAKE_NPC,3,3,{
OnTouch:
if (ep13_animal == 7) {
enablenpc "Botanist#ep13_1";
@@ -4755,7 +4755,7 @@ mid_camp,52,148,1 script Dirt#ep13 CLEAR_NPC,{
end;
}
-man_fild01,59,261,0 script #evt_lumis -1,5,5,{
+man_fild01,59,261,0 script #evt_lumis FAKE_NPC,5,5,{
OnTouch:
if (ep13_animal == 11) {
mes "[Rumis Block]";
@@ -8432,7 +8432,7 @@ mid_camp,88,100,7 script Cat Hand Mining Agent 4_CAT,{
}
}
-- script Mysterious Rock#0::manukrock -1,{
+- script Mysterious Rock#0::manukrock FAKE_NPC,{
if (countitem(Unidentified_Mineral) < 3 && !questprogress(12062,PLAYTIME)) {
specialeffect2 EF_REPAIRWEAPON;
progressbar "ffff00",10;
@@ -10301,7 +10301,7 @@ lhz_in01,110,174,5 script Gerhart 4_M_KHKYEL,{
}
}
-spl_fild02,1,1,0 script ep13_spl_fild02_mon_edq -1,{
+spl_fild02,1,1,0 script ep13_spl_fild02_mon_edq FAKE_NPC,{
OnInit:
enablenpc "ep13_spl_fild02_mon_edq";
donpcevent "ep13_spl_fild02_mon_edq::OnEnable";
@@ -10331,7 +10331,7 @@ OnMyMobDead:
end;
}
-spl_fild03,1,1,0 script ep13_spl_fild03_mon_edq -1,{
+spl_fild03,1,1,0 script ep13_spl_fild03_mon_edq FAKE_NPC,{
OnInit:
enablenpc "ep13_spl_fild03_mon_edq";
donpcevent "ep13_spl_fild03_mon_edq::OnEnable";
@@ -10363,7 +10363,7 @@ OnMyMobDead:
end;
}
-man_fild01,1,1,0 script ep13_man_fild01_mon_edq -1,{
+man_fild01,1,1,0 script ep13_man_fild01_mon_edq FAKE_NPC,{
OnInit:
enablenpc "ep13_man_fild01_mon_edq";
donpcevent "ep13_man_fild01_mon_edq::OnEnable";
@@ -10393,7 +10393,7 @@ OnMyMobDead:
end;
}
-man_fild03,1,1,0 script ep13_man_fild03_mon_edq -1,{
+man_fild03,1,1,0 script ep13_man_fild03_mon_edq FAKE_NPC,{
OnInit:
enablenpc "ep13_man_fild03_mon_edq";
donpcevent "ep13_man_fild03_mon_edq::OnEnable";
@@ -11527,7 +11527,7 @@ OnInit:
end;
}
-mid_camp,205,312,0 script #moc2_talkevent01 -1,1,1,{
+mid_camp,205,312,0 script #moc2_talkevent01 FAKE_NPC,1,1,{
//OnTouch2:
OnTouch:
if (mao_morocc2 == 11) {
@@ -12511,7 +12511,7 @@ OnTimer250000:
stopnpctimer;
}
-que_job01,12,13,0 script #room1_warp13 -1,15,15,{
+que_job01,12,13,0 script #room1_warp13 FAKE_NPC,15,15,{
OnInit:
OnDisable:
disablenpc "#room1_warp13";
@@ -12694,7 +12694,7 @@ OnTimer250000:
stopnpctimer;
}
-que_job01,80,17,0 script #room2_1_warp -1,15,15,{
+que_job01,80,17,0 script #room2_1_warp FAKE_NPC,15,15,{
OnInit:
OnDisable:
disablenpc "#room2_1_warp";
@@ -12709,7 +12709,7 @@ OnTouch:
end;
}
-que_job01,144,51,0 script #room2_2_warp -1,15,15,{
+que_job01,144,51,0 script #room2_2_warp FAKE_NPC,15,15,{
OnInit:
OnDisable:
disablenpc "#room2_2_warp";
@@ -13429,7 +13429,7 @@ hu_fild04,368,180,0 script Traces#mao2_object03 CLEAR_NPC,{
}
}
-que_dan01,32,27,0 script #moc2_event_on -1,1,1,{
+que_dan01,32,27,0 script #moc2_event_on FAKE_NPC,1,1,{
OnEnable:
enablenpc "#moc2_event_on";
end;
@@ -13489,7 +13489,7 @@ OnTimer308000:
stopnpctimer;
}
-que_dan01,31,27,0 script #moc2_event01 -1,2,2,{
+que_dan01,31,27,0 script #moc2_event01 FAKE_NPC,2,2,{
OnInit:
OnDisable:
disablenpc "#moc2_event01";
@@ -13705,7 +13705,7 @@ OnTimer11000:
end;
}
-- script #dandelion_duplicates -1,{
+- script #dandelion_duplicates FAKE_NPC,{
end;
OnInit:
@@ -13730,7 +13730,7 @@ que_dan01,25,32,7 duplicate(#dandelion_duplicates) Dandelion Member#moc2_5 4_M_D
yuno_fild09,234,133,0 warp #moc2_fild09-que_dan02 1,1,que_dan02,13,10
que_dan02,13,6,0 warp #moc_que_dan02-fild09 1,1,yuno_fild09,234,129
-que_dan02,21,37,0 script #moc2_b1_gate -1,1,1,{
+que_dan02,21,37,0 script #moc2_b1_gate FAKE_NPC,1,1,{
//OnTouch2:
OnTouch:
if (mao_morocc2 == 17) {
diff --git a/npc/quests/quests_13_2.txt b/npc/quests/quests_13_2.txt
index 077ae7651..5a7df3b27 100644
--- a/npc/quests/quests_13_2.txt
+++ b/npc/quests/quests_13_2.txt
@@ -413,7 +413,7 @@ function Catwarp {
}
man_fild02,132,47,4 duplicate(Cat Hand Agent#spl) Cat Hand Agent#man 4_M_BOSSCAT
-- script Mysterious Rock#30::manukrock2 -1,{
+- script Mysterious Rock#30::manukrock2 FAKE_NPC,{
if (countitem(Unidentified_Mineral) < 3 && !questprogress(12062,PLAYTIME)) {
specialeffect2 EF_REPAIRWEAPON;
progressbar "ffff00",10;
@@ -1050,7 +1050,7 @@ spl_fild01,341,109,0 script ????#ep13_mdplant05 CLEAR_NPC,{
}
}
-spl_fild01,375,109,0 script to_dun01#ep13_2 -1,2,2,{
+spl_fild01,375,109,0 script to_dun01#ep13_2 FAKE_NPC,2,2,{
OnTouch:
if (ep13_mdrama == 5) {
mes "There's a stem entangled inside an opening in the roots of a huge tree...";
@@ -2353,7 +2353,7 @@ man_in01,19,126,3 script Luik#ep13md16 4_MAN_GALTUN,{
}
}
-man_in01,71,125,0 script Terra gone -1,3,3,{
+man_in01,71,125,0 script Terra gone FAKE_NPC,3,3,{
OnTouch:
mes "There's nothing else.";
mes "Only traces of the cage with something confined.";
@@ -3262,7 +3262,7 @@ mid_camp,192,239,4 script Wanted Sign#ep13_2ect01 4_BOARD3,{
close;
}
-- script Dragon Egg#ep13_degg_0 -1,{
+- script Dragon Egg#ep13_degg_0 FAKE_NPC,{
if (checkweight(Knife,2) == 0) {
mes "- You're carrying too many items. -";
close;
@@ -3392,7 +3392,7 @@ OnTouch:
end;
}
-nyd_dun02,201,157,5 script Egg Keeper Draco#13_3 -1,{
+nyd_dun02,201,157,5 script Egg Keeper Draco#13_3 FAKE_NPC,{
end;
OnMyMobDead:
@@ -3405,7 +3405,7 @@ OnTimer180000:
end;
}
-nyd_dun02,206,157,3 script Egg Keeper Draco#13_4 -1,{
+nyd_dun02,206,157,3 script Egg Keeper Draco#13_4 FAKE_NPC,{
end;
OnMyMobDead:
@@ -3473,7 +3473,7 @@ OnTouch:
end;
}
-nyd_dun02,144,103,0 script Stranger#ep13_2_dan03 -1,{
+nyd_dun02,144,103,0 script Stranger#ep13_2_dan03 FAKE_NPC,{
end;
OnMyMobDead:
@@ -3487,7 +3487,7 @@ OnTimer300000:
end;
}
-nyd_dun02,206,114,0 script Stranger#ep13_2_dan04 -1,{
+nyd_dun02,206,114,0 script Stranger#ep13_2_dan04 FAKE_NPC,{
end;
OnMyMobDead:
@@ -4821,7 +4821,7 @@ function script find_13_2 {
}
}
-- script mjo_no_find -1,{
+- script mjo_no_find FAKE_NPC,{
end;
OnTouch:
@@ -4829,31 +4829,31 @@ OnTouch:
end;
}
-mjolnir_03,76,258,0 duplicate(mjo_no_find) #mj03_find_1 -1,5,5
-mjolnir_03,227,204,0 duplicate(mjo_no_find) #mj03_find_2 -1,5,5
-mjolnir_05,82,171,0 duplicate(mjo_no_find) #mj05_find_1 -1,5,5
-mjolnir_05,219,375,0 duplicate(mjo_no_find) #mj05_find_2 -1,5,5
-mjolnir_06,28,332,0 duplicate(mjo_no_find) #mj06_find_1 -1,5,5
-mjolnir_06,275,50,0 duplicate(mjo_no_find) #mj06_find_2 -1,5,5
-mjolnir_06,371,78,0 duplicate(mjo_no_find) #mj06_find_3 -1,5,5
-mjolnir_07,26,373,0 duplicate(mjo_no_find) #mj07_find_1 -1,5,5
-mjolnir_07,214,373,0 duplicate(mjo_no_find) #mj07_find_2 -1,5,5
-mjolnir_07,372,355,0 duplicate(mjo_no_find) #mj07_find_3 -1,5,5
-mjolnir_07,375,233,0 duplicate(mjo_no_find) #mj07_find_4 -1,5,5
-mjolnir_07,26,78,0 duplicate(mjo_no_find) #mj07_find_5 -1,5,5
-mjolnir_07,157,25,0 duplicate(mjo_no_find) #mj07_find_6 -1,5,5
-mjolnir_08,39,239,0 duplicate(mjo_no_find) #mj08_find_1 -1,5,5
-mjolnir_08,36,344,0 duplicate(mjo_no_find) #mj08_find_2 -1,5,5
-mjolnir_08,160,349,0 duplicate(mjo_no_find) #mj08_find_3 -1,5,5
-mjolnir_08,359,258,0 duplicate(mjo_no_find) #mj08_find_4 -1,5,5
-mjolnir_08,193,62,0 duplicate(mjo_no_find) #mj08_find_5 -1,5,5
-mjolnir_11,29,220,0 duplicate(mjo_no_find) #mj11_find_1 -1,5,5
-mjolnir_11,175,29,0 duplicate(mjo_no_find) #mj11_find_2 -1,5,5
-mjolnir_12,199,370,0 duplicate(mjo_no_find) #mj12_find_1 -1,5,5
-mjolnir_12,44,25,0 duplicate(mjo_no_find) #mj12_find_2 -1,5,5
-mjolnir_12,220,37,0 duplicate(mjo_no_find) #mj12_find_3 -1,5,5
-
-- script mjo_find -1,{
+mjolnir_03,76,258,0 duplicate(mjo_no_find) #mj03_find_1 FAKE_NPC,5,5
+mjolnir_03,227,204,0 duplicate(mjo_no_find) #mj03_find_2 FAKE_NPC,5,5
+mjolnir_05,82,171,0 duplicate(mjo_no_find) #mj05_find_1 FAKE_NPC,5,5
+mjolnir_05,219,375,0 duplicate(mjo_no_find) #mj05_find_2 FAKE_NPC,5,5
+mjolnir_06,28,332,0 duplicate(mjo_no_find) #mj06_find_1 FAKE_NPC,5,5
+mjolnir_06,275,50,0 duplicate(mjo_no_find) #mj06_find_2 FAKE_NPC,5,5
+mjolnir_06,371,78,0 duplicate(mjo_no_find) #mj06_find_3 FAKE_NPC,5,5
+mjolnir_07,26,373,0 duplicate(mjo_no_find) #mj07_find_1 FAKE_NPC,5,5
+mjolnir_07,214,373,0 duplicate(mjo_no_find) #mj07_find_2 FAKE_NPC,5,5
+mjolnir_07,372,355,0 duplicate(mjo_no_find) #mj07_find_3 FAKE_NPC,5,5
+mjolnir_07,375,233,0 duplicate(mjo_no_find) #mj07_find_4 FAKE_NPC,5,5
+mjolnir_07,26,78,0 duplicate(mjo_no_find) #mj07_find_5 FAKE_NPC,5,5
+mjolnir_07,157,25,0 duplicate(mjo_no_find) #mj07_find_6 FAKE_NPC,5,5
+mjolnir_08,39,239,0 duplicate(mjo_no_find) #mj08_find_1 FAKE_NPC,5,5
+mjolnir_08,36,344,0 duplicate(mjo_no_find) #mj08_find_2 FAKE_NPC,5,5
+mjolnir_08,160,349,0 duplicate(mjo_no_find) #mj08_find_3 FAKE_NPC,5,5
+mjolnir_08,359,258,0 duplicate(mjo_no_find) #mj08_find_4 FAKE_NPC,5,5
+mjolnir_08,193,62,0 duplicate(mjo_no_find) #mj08_find_5 FAKE_NPC,5,5
+mjolnir_11,29,220,0 duplicate(mjo_no_find) #mj11_find_1 FAKE_NPC,5,5
+mjolnir_11,175,29,0 duplicate(mjo_no_find) #mj11_find_2 FAKE_NPC,5,5
+mjolnir_12,199,370,0 duplicate(mjo_no_find) #mj12_find_1 FAKE_NPC,5,5
+mjolnir_12,44,25,0 duplicate(mjo_no_find) #mj12_find_2 FAKE_NPC,5,5
+mjolnir_12,220,37,0 duplicate(mjo_no_find) #mj12_find_3 FAKE_NPC,5,5
+
+- script mjo_find FAKE_NPC,{
if ((ep13_2_tre == 2) && (countitem(Portable_Toolbox) == 1)) {
if (countitem(Rough_Mineral) < 10) {
mes "- I can see some different colored minerals where the detector pointed to. This must be the mineral that Mr. Lifeguard told me about. -";
@@ -4911,7 +4911,7 @@ mjolnir_04,220,130,3 duplicate(mjo_find) #mj04_02 HIDDEN_NPC,7,7
mjolnir_09,229,214,3 duplicate(mjo_find) #mj09_01 HIDDEN_NPC,10,10
mjolnir_10,188,260,3 duplicate(mjo_find) #mj10_01 HIDDEN_NPC,10,10
-mjolnir_01,364,256,0 script #mj01_find -1,5,5,{
+mjolnir_01,364,256,0 script #mj01_find FAKE_NPC,5,5,{
end;
OnTouch:
@@ -4945,7 +4945,7 @@ OnTimer60000:
end;
}
-mjolnir_02,313,289,0 script #mj02_find_1 -1,5,5,{
+mjolnir_02,313,289,0 script #mj02_find_1 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -4955,7 +4955,7 @@ OnTouch:
close;
}
-mjolnir_02,78,258,0 script #mj02_find_2 -1,5,5,{
+mjolnir_02,78,258,0 script #mj02_find_2 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -4988,7 +4988,7 @@ OnTimer60000:
end;
}
-mjolnir_04,147,208,0 script #mj04_find_1 -1,5,5,{
+mjolnir_04,147,208,0 script #mj04_find_1 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -4998,7 +4998,7 @@ OnTouch:
close;
}
-mjolnir_04,160,77,0 script #mj04_find_2 -1,5,5,{
+mjolnir_04,160,77,0 script #mj04_find_2 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5008,7 +5008,7 @@ OnTouch:
close;
}
-mjolnir_04,361,174,0 script #mj04_find_3 -1,5,5,{
+mjolnir_04,361,174,0 script #mj04_find_3 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5040,7 +5040,7 @@ OnTimer60000:
end;
}
-mjolnir_09,201,355,0 script #mj09_find_1 -1,5,5,{
+mjolnir_09,201,355,0 script #mj09_find_1 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5049,7 +5049,7 @@ OnTouch:
close;
}
-mjolnir_09,38,243,0 script #mj09_find_2 -1,5,5,{
+mjolnir_09,38,243,0 script #mj09_find_2 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5058,7 +5058,7 @@ OnTouch:
close;
}
-mjolnir_09,106,36,0 script #mj09_find_3 -1,5,5,{
+mjolnir_09,106,36,0 script #mj09_find_3 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5067,7 +5067,7 @@ OnTouch:
close;
}
-mjolnir_09,306,36,0 script #mj09_find_4 -1,5,5,{
+mjolnir_09,306,36,0 script #mj09_find_4 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5076,7 +5076,7 @@ OnTouch:
close;
}
-mjolnir_09,369,279,0 script #mj09_find_5 -1,5,5,{
+mjolnir_09,369,279,0 script #mj09_find_5 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5096,7 +5096,7 @@ OnTimer60000:
end;
}
-mjolnir_10,201,355,0 script #mj10_find_1 -1,5,5,{
+mjolnir_10,201,355,0 script #mj10_find_1 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5105,7 +5105,7 @@ OnTouch:
close;
}
-mjolnir_10,374,215,0 script #mj10_find_2 -1,5,5,{
+mjolnir_10,374,215,0 script #mj10_find_2 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5114,7 +5114,7 @@ OnTouch:
close;
}
-mjolnir_10,272,20,0 script #mj10_find_3 -1,5,5,{
+mjolnir_10,272,20,0 script #mj10_find_3 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5123,7 +5123,7 @@ OnTouch:
close;
}
-mjolnir_10,75,22,0 script #mj10_find_4 -1,5,5,{
+mjolnir_10,75,22,0 script #mj10_find_4 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5132,7 +5132,7 @@ OnTouch:
close;
}
-mjolnir_10,27,258,0 script #mj10_find_5 -1,5,5,{
+mjolnir_10,27,258,0 script #mj10_find_5 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5152,7 +5152,7 @@ OnTimer60000:
end;
}
-hu_fild05,335,152,0 script #hu_find_1 -1,5,5,{
+hu_fild05,335,152,0 script #hu_find_1 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5165,7 +5165,7 @@ OnTouch:
close;
}
-hu_fild05,89,52,0 script #hu_find_2 -1,5,5,{
+hu_fild05,89,52,0 script #hu_find_2 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5178,7 +5178,7 @@ OnTouch:
close;
}
-hu_fild05,42,205,0 script #hu_find_3 -1,5,5,{
+hu_fild05,42,205,0 script #hu_find_3 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5191,7 +5191,7 @@ OnTouch:
close;
}
-hu_fild05,276,349,0 script #hu_find_4 -1,5,5,{
+hu_fild05,276,349,0 script #hu_find_4 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5204,7 +5204,7 @@ OnTouch:
close;
}
-- script hu_find -1,{
+- script hu_find FAKE_NPC,{
if ((ep13_2_tre == 3) && (countitem(Portable_Toolbox) == 1)) {
if (countitem(Rough_Mineral) < 5) {
mes "- I can see some different colored minerals where the detector pointed to. This must be the mineral that Mr. Lifeguard told me about. -";
@@ -5313,7 +5313,7 @@ OnTimer60000:
end;
}
-ve_fild03,351,219,0 script #ve_find_1 -1,3,3,{
+ve_fild03,351,219,0 script #ve_find_1 FAKE_NPC,3,3,{
end;
OnTouch:
@@ -5325,7 +5325,7 @@ OnTouch:
close;
}
-ve_fild03,223,51,0 script #ve_find_2 -1,5,5,{
+ve_fild03,223,51,0 script #ve_find_2 FAKE_NPC,5,5,{
end;
OnTouch:
@@ -5337,7 +5337,7 @@ OnTouch:
close;
}
-- script ve_find -1,{
+- script ve_find FAKE_NPC,{
if ((ep13_2_tre == 4) && (countitem(Portable_Toolbox) == 1)) {
if (countitem(Rough_Mineral) < 5) {
mes "- I can see some different colored minerals where the detector pointed to. This must be the mineral that Mr. Lifeguard told me about. -";
@@ -5744,7 +5744,7 @@ spl_in02,139,65,3 script Middle-Ranked Laphine#la 4_F_FAIRYKID3,{
}
}
-- script Purifier -1,{
+- script Purifier FAKE_NPC,{
if (ep13_2_tre1 == 2) {
if (countitem(Germinating_Sprout) > 0) {
mes "- You put the seed in the";
@@ -6938,7 +6938,7 @@ OnTouch:
end;
}
-- script ep13_warp_s_0 -1,{
+- script ep13_warp_s_0 FAKE_NPC,{
OnEnable:
enablenpc strnpcinfo(0);
initnpctimer;
@@ -6963,7 +6963,7 @@ OnDisable:
end;
}
-- script ep13_warp_s_1 -1,{
+- script ep13_warp_s_1 FAKE_NPC,{
OnEnable:
enablenpc strnpcinfo(0);
initnpctimer;
@@ -6989,7 +6989,7 @@ OnDisable:
end;
}
-- script ep13_warp_s_2 -1,{
+- script ep13_warp_s_2 FAKE_NPC,{
OnEnable:
enablenpc strnpcinfo(0);
initnpctimer;
@@ -7016,7 +7016,7 @@ OnDisable:
end;
}
-- script ep13_warp_w_0 -1,{
+- script ep13_warp_w_0 FAKE_NPC,{
OnTouch:
warp "nyd_dun01",214,68;
end;
diff --git a/npc/quests/quests_airship.txt b/npc/quests/quests_airship.txt
index 58051f9cb..1b4e90357 100644
--- a/npc/quests/quests_airship.txt
+++ b/npc/quests/quests_airship.txt
@@ -454,7 +454,7 @@ airplane,47,61,7 script Crewman 4_M_ZONDAOYAJI,{
}
//- Empty Room 201 -
-ein_in01,227,279,3 script #door_ein -1,5,5,{
+ein_in01,227,279,3 script #door_ein FAKE_NPC,5,5,{
OnTouch:
if (kain_ticket == 5) {
kain_ticket = 6;
@@ -1184,7 +1184,7 @@ ein_in01,117,80,5 script Unidentified Machine#as HIDDEN_NPC,{
//== "How Does The Airship Work" Quest :: lght_air & lght_ymir =
//- Monsters Attack :: lght_air -
-airplane_01,1,1,0 script Airship#airplane02 -1,{
+airplane_01,1,1,0 script Airship#airplane02 FAKE_NPC,{
end;
OnEnable:
initnpctimer;
diff --git a/npc/quests/quests_alberta.txt b/npc/quests/quests_alberta.txt
index 40a450cc2..a735a19f6 100644
--- a/npc/quests/quests_alberta.txt
+++ b/npc/quests/quests_alberta.txt
@@ -1106,7 +1106,7 @@ alberta_in,23,104,4 script Grandpa Turtle#tur 2_M_PHARMACIST,{
}
}
-- script ::Sailor_alberta -1,{
+- script ::Sailor_alberta FAKE_NPC,{
if (TURTLE || (MISC_QUEST & 65536)) {
mes "[Gotanblue]";
mes "Heh...";
@@ -1248,7 +1248,7 @@ tur_dun01,165,29,4 script Sailor#tur2 4_M_SEAMAN,{
close;
}
-- script ::Turtle_Scholar_alberta -1,{
+- script ::Turtle_Scholar_alberta FAKE_NPC,{
mes "[Jornadan Niliria]";
mes "Every single place";
mes "has its own unique";
diff --git a/npc/quests/quests_amatsu.txt b/npc/quests/quests_amatsu.txt
index 599d419eb..71fad6aa9 100644
--- a/npc/quests/quests_amatsu.txt
+++ b/npc/quests/quests_amatsu.txt
@@ -408,7 +408,7 @@ OnReset:
end;
}
-ama_test,34,25,0 script Hanako chan#ama -1,2,2,{
+ama_test,34,25,0 script Hanako chan#ama FAKE_NPC,2,2,{
OnTouch:
mes "[Hanako chan]";
mes ".......Eeeeheeheehee";
@@ -490,7 +490,7 @@ OnTouch:
end;
}
-ama_test,34,15,0 script Dokebi#ez -1,{
+ama_test,34,15,0 script Dokebi#ez FAKE_NPC,{
OnInit:
disablenpc "Dokebi#ez";
end;
@@ -538,7 +538,7 @@ OnMyMobDead:
end;
}
-ama_test,34,16,0 script Dokebi#hd -1,{
+ama_test,34,16,0 script Dokebi#hd FAKE_NPC,{
OnInit:
disablenpc "Dokebi#hd";
end;
@@ -691,7 +691,7 @@ OnTouch:
close;
}
-ama_test,34,17,0 script Am Mut#ama -1,{
+ama_test,34,17,0 script Am Mut#ama FAKE_NPC,{
OnInit:
disablenpc "Am Mut#ama";
end;
@@ -759,7 +759,7 @@ OnTouch:
end;
}
-ama_test,34,18,0 script Timer#ama -1,{
+ama_test,34,18,0 script Timer#ama FAKE_NPC,{
OnInit:
disablenpc "Timer#ama";
end;
@@ -801,7 +801,7 @@ OnTimer362500:
end;
}
-ama_test,50,100,0 script backwarp#ama -1,25,25,{
+ama_test,50,100,0 script backwarp#ama FAKE_NPC,25,25,{
OnInit:
disablenpc "backwarp#ama";
end;
diff --git a/npc/quests/quests_ayothaya.txt b/npc/quests/quests_ayothaya.txt
index e357aae3f..b79ee5022 100644
--- a/npc/quests/quests_ayothaya.txt
+++ b/npc/quests/quests_ayothaya.txt
@@ -1944,26 +1944,26 @@ ayo_dun01,273,27,0 duplicate(AyoTrap1) #th_dun1_1_2 HIDDEN_NPC
ayo_dun01,272,27,0 duplicate(AyoTrap1) #th_dun1_1_3 HIDDEN_NPC,0,4
ayo_dun01,272,26,0 duplicate(AyoTrap1) #th_dun1_1_4 HIDDEN_NPC
-ayo_dun01,26,27,0 script #th_dun1_1::AyoTrap2 -1,1,1,{
+ayo_dun01,26,27,0 script #th_dun1_1::AyoTrap2 FAKE_NPC,1,1,{
OnTouch:
percentheal -100,0;
end;
}
-ayo_dun01,28,27,0 duplicate(AyoTrap2) #th_dun1_2 -1,0,1
-ayo_dun01,27,25,0 duplicate(AyoTrap2) #th_dun1_3 -1,1,0
-ayo_dun01,25,25,0 duplicate(AyoTrap2) #th_dun1_4 -1
-ayo_dun01,272,273,0 duplicate(AyoTrap2) #th_dun1_5 -1,1,1
-ayo_dun01,274,273,0 duplicate(AyoTrap2) #th_dun1_6 -1,0,1
-ayo_dun01,273,271,0 duplicate(AyoTrap2) #th_dun1_7 -1,1,0
-ayo_dun01,271,271,0 duplicate(AyoTrap2) #th_dun1_8 -1
-ayo_dun01,26,273,0 duplicate(AyoTrap2) #th_dun1_9 -1,1,1
-ayo_dun01,28,273,0 duplicate(AyoTrap2) #th_dun1_10 -1,0,1
-ayo_dun01,27,271,0 duplicate(AyoTrap2) #th_dun1_11 -1,1,0
-ayo_dun01,25,271,0 duplicate(AyoTrap2) #th_dun1_12 -1
+ayo_dun01,28,27,0 duplicate(AyoTrap2) #th_dun1_2 FAKE_NPC,0,1
+ayo_dun01,27,25,0 duplicate(AyoTrap2) #th_dun1_3 FAKE_NPC,1,0
+ayo_dun01,25,25,0 duplicate(AyoTrap2) #th_dun1_4 FAKE_NPC
+ayo_dun01,272,273,0 duplicate(AyoTrap2) #th_dun1_5 FAKE_NPC,1,1
+ayo_dun01,274,273,0 duplicate(AyoTrap2) #th_dun1_6 FAKE_NPC,0,1
+ayo_dun01,273,271,0 duplicate(AyoTrap2) #th_dun1_7 FAKE_NPC,1,0
+ayo_dun01,271,271,0 duplicate(AyoTrap2) #th_dun1_8 FAKE_NPC
+ayo_dun01,26,273,0 duplicate(AyoTrap2) #th_dun1_9 FAKE_NPC,1,1
+ayo_dun01,28,273,0 duplicate(AyoTrap2) #th_dun1_10 FAKE_NPC,0,1
+ayo_dun01,27,271,0 duplicate(AyoTrap2) #th_dun1_11 FAKE_NPC,1,0
+ayo_dun01,25,271,0 duplicate(AyoTrap2) #th_dun1_12 FAKE_NPC
//- Hints -
-ayo_dun01,156,148,0 script #hint01::AyoHint -1,0,4,{
+ayo_dun01,156,148,0 script #hint01::AyoHint FAKE_NPC,0,4,{
OnTouch:
if (rand(1,100) > 60 && ayodunquest < 11) {
mes "^3355FFThe Holy Thread in your pocket suddenly began to glow. You feel that something is near you...^000000";
@@ -1978,9 +1978,9 @@ OnTouch:
end;
}
-ayo_dun01,259,42,0 duplicate(AyoHint) #hint02 -1,2,0
-ayo_dun01,259,44,0 duplicate(AyoHint) #hint02_2 -1,2,0
-ayo_dun01,259,46,0 duplicate(AyoHint) #hint02_3 -1,2,0
+ayo_dun01,259,42,0 duplicate(AyoHint) #hint02 FAKE_NPC,2,0
+ayo_dun01,259,44,0 duplicate(AyoHint) #hint02_2 FAKE_NPC,2,0
+ayo_dun01,259,46,0 duplicate(AyoHint) #hint02_3 FAKE_NPC,2,0
//- Puzzle pieces -
ayo_dun01,198,164,0 script #hun_thai_1 HIDDEN_NPC,{
diff --git a/npc/quests/quests_ein.txt b/npc/quests/quests_ein.txt
index cb3a9d7e3..90b32fb70 100644
--- a/npc/quests/quests_ein.txt
+++ b/npc/quests/quests_ein.txt
@@ -3211,7 +3211,7 @@ einbroch,215,180,6 script Uwe Kleine#ein 4_M_03,{
}
//== Factory Quest :: ein_factory ==========================
-einbroch,1,1,0 script Einbroch Smog Alert -1,{
+einbroch,1,1,0 script Einbroch Smog Alert FAKE_NPC,{
end;
OnEnable:
@@ -5629,7 +5629,7 @@ airplane,31,77,5 script Drunken Man#ein 4_M_YURI,{
}
}
-ein_in01,231,170,0 script #kenka -1,2,2,{
+ein_in01,231,170,0 script #kenka FAKE_NPC,2,2,{
OnTouch:
if (Shinokas_Quest > 8) {
mes "^3355FFThe open window rattles";
diff --git a/npc/quests/quests_gonryun.txt b/npc/quests/quests_gonryun.txt
index ba4b1c299..0a1310369 100644
--- a/npc/quests/quests_gonryun.txt
+++ b/npc/quests/quests_gonryun.txt
@@ -802,7 +802,7 @@ gon_in,165,16,4 script Man in hangover#gon 4_M_ALCHE_A,{
close;
}
-gon_dun01,148,156,0 script start01#gnbs -1,{
+gon_dun01,148,156,0 script start01#gnbs FAKE_NPC,{
OnInit:
sleep 10000;
OnCommandOn:
@@ -833,7 +833,7 @@ OnCommandOn:
end;
}
-gon_dun01,2,1,0 script timer1-1 -1,{
+gon_dun01,2,1,0 script timer1-1 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -901,7 +901,7 @@ OnCommandOn:
end;
}
-gon_dun01,3,1,0 script timer1-2 -1,{
+gon_dun01,3,1,0 script timer1-2 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -969,7 +969,7 @@ OnCommandOn:
end;
}
-gon_dun01,4,1,0 script timer1-3 -1,{
+gon_dun01,4,1,0 script timer1-3 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1037,7 +1037,7 @@ OnCommandOn:
end;
}
-gon_dun01,5,1,0 script timer1-4 -1,{
+gon_dun01,5,1,0 script timer1-4 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1105,7 +1105,7 @@ OnCommandOn:
end;
}
-gon_dun01,6,1,0 script timer1-5 -1,{
+gon_dun01,6,1,0 script timer1-5 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1150,7 +1150,7 @@ OnCommandOff:
end;
}
-gon_dun02,1,1,0 script start02#gnbs -1,{
+gon_dun02,1,1,0 script start02#gnbs FAKE_NPC,{
OnInit:
sleep 10000;
OnCommandOn:
@@ -1181,7 +1181,7 @@ OnCommandOn:
end;
}
-gon_dun02,2,1,0 script timer2-1 -1,{
+gon_dun02,2,1,0 script timer2-1 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1249,7 +1249,7 @@ OnCommandOn:
end;
}
-gon_dun02,3,1,0 script timer2-2 -1,{
+gon_dun02,3,1,0 script timer2-2 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1317,7 +1317,7 @@ OnCommandOn:
end;
}
-gon_dun02,4,1,0 script timer2-3 -1,{
+gon_dun02,4,1,0 script timer2-3 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1385,7 +1385,7 @@ OnCommandOn:
end;
}
-gon_dun02,5,1,0 script timer2-4 -1,{
+gon_dun02,5,1,0 script timer2-4 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1453,7 +1453,7 @@ OnCommandOn:
end;
}
-gon_dun02,6,1,0 script timer2-5 -1,{
+gon_dun02,6,1,0 script timer2-5 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1521,7 +1521,7 @@ OnCommandOn:
end;
}
-gon_dun02,7,1,0 script timer2-6 -1,{
+gon_dun02,7,1,0 script timer2-6 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1566,7 +1566,7 @@ OnCommandOff:
end;
}
-gon_dun03,1,1,0 script start03#gnbs -1,{
+gon_dun03,1,1,0 script start03#gnbs FAKE_NPC,{
OnInit:
sleep 10000;
OnCommandOn:
@@ -1597,7 +1597,7 @@ OnCommandOn:
end;
}
-gon_dun03,2,1,0 script timer3-1 -1,{
+gon_dun03,2,1,0 script timer3-1 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1669,7 +1669,7 @@ OnCommandOn:
end;
}
-gon_dun03,3,1,0 script timer3-2 -1,{
+gon_dun03,3,1,0 script timer3-2 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1741,7 +1741,7 @@ OnCommandOn:
end;
}
-gon_dun03,4,1,0 script timer3-3 -1,{
+gon_dun03,4,1,0 script timer3-3 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1813,7 +1813,7 @@ OnCommandOn:
end;
}
-gon_dun03,5,1,0 script timer3-4 -1,{
+gon_dun03,5,1,0 script timer3-4 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1885,7 +1885,7 @@ OnCommandOn:
end;
}
-gon_dun03,6,1,0 script timer3-5 -1,{
+gon_dun03,6,1,0 script timer3-5 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -1957,7 +1957,7 @@ OnCommandOn:
end;
}
-gon_dun03,7,1,0 script timer3-6 -1,{
+gon_dun03,7,1,0 script timer3-6 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
@@ -2029,7 +2029,7 @@ OnCommandOn:
end;
}
-gon_dun03,6,1,0 script timer3-7 -1,{
+gon_dun03,6,1,0 script timer3-7 FAKE_NPC,{
OnInit:
initnpctimer;
stopnpctimer;
diff --git a/npc/quests/quests_hugel.txt b/npc/quests/quests_hugel.txt
index 67c146f1e..1ef4c0db6 100644
--- a/npc/quests/quests_hugel.txt
+++ b/npc/quests/quests_hugel.txt
@@ -706,7 +706,7 @@ OnTouch:
}
}
-hu_in01,1,1,0 script #DrawerOpener -1,{
+hu_in01,1,1,0 script #DrawerOpener FAKE_NPC,{
OnInit:
disablenpc "#DrawerOpener";
end;
@@ -9539,7 +9539,7 @@ odin_tem01,93,146,4 script Boatman 4_M_SEAMAN,{
}
}
-odin_tem03,4,2,0 script OdinInit -1,{
+odin_tem03,4,2,0 script OdinInit FAKE_NPC,{
OnInit:
initnpctimer;
end;
diff --git a/npc/quests/quests_izlude.txt b/npc/quests/quests_izlude.txt
index 3e98f7781..b17354cb4 100644
--- a/npc/quests/quests_izlude.txt
+++ b/npc/quests/quests_izlude.txt
@@ -37,7 +37,7 @@
//=========================================================================
//== Edgar's Offer :: iz_npc ===============================
-- script ::Edgar_izlude -1,{
+- script ::Edgar_izlude FAKE_NPC,{
if (MISC_QUEST & 16) {
mes "[Edgar]";
mes "So are you heading to Alberta again? Let me give you the same discount and only charge 250 Zeny, just like the last time.";
diff --git a/npc/quests/quests_juperos.txt b/npc/quests/quests_juperos.txt
index 9db11716c..c9e931be3 100644
--- a/npc/quests/quests_juperos.txt
+++ b/npc/quests/quests_juperos.txt
@@ -1631,7 +1631,7 @@ juperos_01,215,127,4 script Machine Statue CLEAR_NPC,{
//== Jupers Core access Story Event ========================
//- 1rd Floor -> 2nd Floor -
-juperos_01,100,91,0 script jupe_goto#1 -1,2,2,{
+juperos_01,100,91,0 script jupe_goto#1 FAKE_NPC,2,2,{
end;
OnTouch:
@@ -1673,7 +1673,7 @@ OnTimer10000:
end;
}
-juperos_01,100,91,0 script jupe_goto#2 -1,2,2,{
+juperos_01,100,91,0 script jupe_goto#2 FAKE_NPC,2,2,{
OnInit:
disablenpc "jupe_goto#2";
end;
@@ -1695,7 +1695,7 @@ OnTimer2000:
}
//- 2nd Floor -
-juperos_02,97,70,0 script 3F Gate Switch#jupe -1,{
+juperos_02,97,70,0 script 3F Gate Switch#jupe FAKE_NPC,{
OnInit:
initnpctimer;
end;
@@ -1947,7 +1947,7 @@ OnTimer22500:
end;
}
-jupe_area1,47,259,0 script Red Alarm#1-1 -1,2,2,{
+jupe_area1,47,259,0 script Red Alarm#1-1 FAKE_NPC,2,2,{
OnInit:
disablenpc "Red Alarm#1-1";
end;
@@ -1961,7 +1961,7 @@ OnTouch:
end;
}
-- script Red Alarm On#1-1 -1,{
+- script Red Alarm On#1-1 FAKE_NPC,{
OnInit:
disablenpc "Red Alarm On#1-1";
end;
@@ -1998,7 +1998,7 @@ OnTimer8000:
end;
}
-- script Monster1#1-1 -1,{
+- script Monster1#1-1 FAKE_NPC,{
OnInit:
disablenpc "Monster1#1-1";
end;
@@ -2043,7 +2043,7 @@ OnMyMobDead:
end;
}
-- script Monster2#1-1 -1,{
+- script Monster2#1-1 FAKE_NPC,{
OnInit:
disablenpc "Monster2#1-1";
end;
@@ -2238,7 +2238,7 @@ OnTimer22500:
end;
}
-jupe_area1,21,191,0 script Red Alarm#1-2 -1,2,2,{
+jupe_area1,21,191,0 script Red Alarm#1-2 FAKE_NPC,2,2,{
OnInit:
disablenpc "Red Alarm#1-2";
end;
@@ -2251,7 +2251,7 @@ OnTouch:
end;
}
-- script Red Alarm On#1-2 -1,{
+- script Red Alarm On#1-2 FAKE_NPC,{
OnInit:
disablenpc "Red Alarm On#1-2";
end;
@@ -2284,7 +2284,7 @@ OnTimer8000:
end;
}
-- script Monster1#1-2 -1,{
+- script Monster1#1-2 FAKE_NPC,{
OnInit:
disablenpc "Monster1#1-2";
end;
@@ -2329,7 +2329,7 @@ OnMyMobDead:
end;
}
-- script Monster2#1-2 -1,{
+- script Monster2#1-2 FAKE_NPC,{
OnInit:
disablenpc "Monster2#1-2";
end;
@@ -2523,7 +2523,7 @@ OnTimer22500:
end;
}
-jupe_area1,33,105,0 script Red Alarm#1-3 -1,0,4,{
+jupe_area1,33,105,0 script Red Alarm#1-3 FAKE_NPC,0,4,{
OnInit:
disablenpc "Red Alarm#1-3";
end;
@@ -2536,7 +2536,7 @@ OnTouch:
end;
}
-- script Red Alarm On#1-3 -1,{
+- script Red Alarm On#1-3 FAKE_NPC,{
OnInit:
disablenpc "Red Alarm On#1-3";
end;
@@ -2569,7 +2569,7 @@ OnTimer8000:
end;
}
-- script Monster1#1-3 -1,{
+- script Monster1#1-3 FAKE_NPC,{
OnInit:
disablenpc "Monster1#1-3";
end;
@@ -2613,7 +2613,7 @@ OnMyMobDead:
end;
}
-- script Monster2#1-3 -1,{
+- script Monster2#1-3 FAKE_NPC,{
OnInit:
disablenpc "Monster2#1-3";
end;
@@ -2810,7 +2810,7 @@ OnTimer5000:
end;
}
-jupe_area1,83,157,0 script Red Alarm#1-4 -1,2,2,{
+jupe_area1,83,157,0 script Red Alarm#1-4 FAKE_NPC,2,2,{
OnInit:
disablenpc "Red Alarm#1-4";
end;
@@ -2827,7 +2827,7 @@ OnTouch:
end;
}
-- script Red Alarm On#1-4 -1,{
+- script Red Alarm On#1-4 FAKE_NPC,{
OnInit:
disablenpc "Red Alarm On#1-4";
end;
@@ -2860,7 +2860,7 @@ OnTimer8000:
end;
}
-- script Monster1#1-4 -1,{
+- script Monster1#1-4 FAKE_NPC,{
OnInit:
disablenpc "Monster1#1-4";
end;
@@ -2905,7 +2905,7 @@ OnMyMobDead:
end;
}
-- script Monster2#1-4 -1,{
+- script Monster2#1-4 FAKE_NPC,{
OnInit:
disablenpc "Monster2#1-4";
end;
@@ -3146,7 +3146,7 @@ OnTimer22500:
end;
}
-jupe_area2,116,259,0 script Red Alarm#2-1 -1,2,2,{
+jupe_area2,116,259,0 script Red Alarm#2-1 FAKE_NPC,2,2,{
OnInit:
disablenpc "Red Alarm#2-1";
end;
@@ -3160,7 +3160,7 @@ OnTouch:
end;
}
-- script Red Alarm On#2-1 -1,{
+- script Red Alarm On#2-1 FAKE_NPC,{
OnInit:
disablenpc "Red Alarm On#2-1";
end;
@@ -3197,7 +3197,7 @@ OnTimer8000:
end;
}
-- script Monster1#2-1 -1,{
+- script Monster1#2-1 FAKE_NPC,{
OnInit:
disablenpc "Monster1#2-1";
end;
@@ -3242,7 +3242,7 @@ OnMyMobDead:
end;
}
-- script Monster2#2-1 -1,{
+- script Monster2#2-1 FAKE_NPC,{
OnInit:
disablenpc "Monster2#2-1";
end;
@@ -3437,7 +3437,7 @@ OnTimer22500:
end;
}
-jupe_area2,142,191,0 script Red Alarm#2-2 -1,2,2,{
+jupe_area2,142,191,0 script Red Alarm#2-2 FAKE_NPC,2,2,{
OnInit:
disablenpc "Red Alarm#2-2";
end;
@@ -3450,7 +3450,7 @@ OnTouch:
end;
}
-- script Red Alarm On#2-2 -1,{
+- script Red Alarm On#2-2 FAKE_NPC,{
OnInit:
disablenpc "Red Alarm On#2-2";
end;
@@ -3483,7 +3483,7 @@ OnTimer8000:
end;
}
-- script Monster1#2-2 -1,{
+- script Monster1#2-2 FAKE_NPC,{
OnInit:
disablenpc "Monster1#2-2";
end;
@@ -3528,7 +3528,7 @@ OnMyMobDead:
end;
}
-- script Monster2#2-2 -1,{
+- script Monster2#2-2 FAKE_NPC,{
OnInit:
disablenpc "Monster2#2-2";
end;
@@ -3722,7 +3722,7 @@ OnTimer22500:
end;
}
-jupe_area2,130,105,0 script Red Alarm#2-3 -1,0,4,{
+jupe_area2,130,105,0 script Red Alarm#2-3 FAKE_NPC,0,4,{
OnInit:
disablenpc "Red Alarm#2-3";
end;
@@ -3735,7 +3735,7 @@ OnTouch:
end;
}
-- script Red Alarm On#2-3 -1,{
+- script Red Alarm On#2-3 FAKE_NPC,{
OnInit:
disablenpc "Red Alarm On#2-3";
end;
@@ -3769,7 +3769,7 @@ OnTimer8000:
end;
}
-- script Monster1#2-3 -1,{
+- script Monster1#2-3 FAKE_NPC,{
OnInit:
disablenpc "Monster1#2-3";
end;
@@ -3813,7 +3813,7 @@ OnMyMobDead:
end;
}
-- script Monster2#2-3 -1,{
+- script Monster2#2-3 FAKE_NPC,{
OnInit:
disablenpc "Monster2#2-3";
end;
@@ -4011,7 +4011,7 @@ OnTimer5000:
end;
}
-jupe_area2,80,157,0 script Red Alarm#2-4 -1,2,2,{
+jupe_area2,80,157,0 script Red Alarm#2-4 FAKE_NPC,2,2,{
OnInit:
disablenpc "Red Alarm#2-4";
end;
@@ -4028,7 +4028,7 @@ OnTouch:
end;
}
-- script Red Alarm On#2-4 -1,{
+- script Red Alarm On#2-4 FAKE_NPC,{
OnInit:
disablenpc "Red Alarm On#2-4";
end;
@@ -4061,7 +4061,7 @@ OnTimer8000:
end;
}
-- script Monster1#2-4 -1,{
+- script Monster1#2-4 FAKE_NPC,{
OnInit:
disablenpc "Monster1#2-4";
end;
@@ -4106,7 +4106,7 @@ OnMyMobDead:
end;
}
-- script Monster2#2-4 -1,{
+- script Monster2#2-4 FAKE_NPC,{
OnInit:
disablenpc "Monster2#2-4";
end;
@@ -4382,7 +4382,7 @@ OnInit:
}
//- Elevator Reception Guards -
-jupe_ele_r,10,50,0 script Elevator Guard1#ufe -1,{
+jupe_ele_r,10,50,0 script Elevator Guard1#ufe FAKE_NPC,{
OnInit:
disablenpc "Elevator Guard1#ufe";
end;
@@ -4451,7 +4451,7 @@ OnMyMobDead:
end;
}
-jupe_ele_r,10,52,0 script Elevator Safety#ufe -1,{
+jupe_ele_r,10,52,0 script Elevator Safety#ufe FAKE_NPC,{
OnInit:
disablenpc "Elevator Safety#ufe";
end;
@@ -4476,7 +4476,7 @@ OnTimer10000:
end;
}
-jupe_ele_r,50,89,0 script Annihilation#ufe -1,35,50,{
+jupe_ele_r,50,89,0 script Annihilation#ufe FAKE_NPC,35,50,{
OnInit:
disablenpc "Annihilation#ufe";
end;
@@ -4504,7 +4504,7 @@ OnTimer3000:
end;
}
-jupe_ele_r,50,89,0 script Elevator Escape#ufe -1,35,50,{
+jupe_ele_r,50,89,0 script Elevator Escape#ufe FAKE_NPC,35,50,{
OnInit:
disablenpc "Elevator Escape#ufe";
end;
@@ -4514,7 +4514,7 @@ OnTouch:
end;
}
-jupe_ele_r,10,54,0 script Elevator On#ufe -1,{
+jupe_ele_r,10,54,0 script Elevator On#ufe FAKE_NPC,{
OnInit:
disablenpc "Elevator On#ufe";
end;
@@ -4893,7 +4893,7 @@ OnTouch:
}
//- Warps -
-jupe_gate,50,173,0 script gate#start -1,2,3,{
+jupe_gate,50,173,0 script gate#start FAKE_NPC,2,3,{
end;
OnTouch:
@@ -4927,7 +4927,7 @@ OnTimer10000:
end;
}
-jupe_gate,50,171,0 script gate#start#2 -1,2,2,{
+jupe_gate,50,171,0 script gate#start#2 FAKE_NPC,2,2,{
OnInit:
disablenpc "gate#start#2";
end;
diff --git a/npc/quests/quests_lighthalzen.txt b/npc/quests/quests_lighthalzen.txt
index 4ab0e4cbb..7cb0c1c0e 100644
--- a/npc/quests/quests_lighthalzen.txt
+++ b/npc/quests/quests_lighthalzen.txt
@@ -44,7 +44,7 @@
//=========================================================================
//== Gangster Alert [Official Conversion] ==================
-lighthalzen,1,1,0 script Law Enforcement -1,{
+lighthalzen,1,1,0 script Law Enforcement FAKE_NPC,{
end;
OnEnable:
@@ -3367,7 +3367,7 @@ yuno_in04,168,117,3 script Book#lhz HIDDEN_NPC,{
}
//== Cursed Spirit Quest ===================================
-lhz_dun01,147,106,0 script #kiz01-1 -1,3,3,{
+lhz_dun01,147,106,0 script #kiz01-1 FAKE_NPC,3,3,{
OnTouch_:
if (countitem(Armlet_Of_Prisoner) > 0 ) {
if (lhz_curse == 0) {
@@ -3403,11 +3403,11 @@ OnTouch_:
end;
}
-lhz_dun01,239,135,0 duplicate(#kiz01-1) #kiz01-2 -1,3,3
-lhz_dun01,66,212,0 duplicate(#kiz01-1) #kiz01-3 -1,3,3
-lhz_dun01,225,198,0 duplicate(#kiz01-1) #kiz01-4 -1,3,3
+lhz_dun01,239,135,0 duplicate(#kiz01-1) #kiz01-2 FAKE_NPC,3,3
+lhz_dun01,66,212,0 duplicate(#kiz01-1) #kiz01-3 FAKE_NPC,3,3
+lhz_dun01,225,198,0 duplicate(#kiz01-1) #kiz01-4 FAKE_NPC,3,3
-lhz_dun02,244,229,0 script #kiz02-1 -1,3,3,{
+lhz_dun02,244,229,0 script #kiz02-1 FAKE_NPC,3,3,{
OnTouch_:
if (countitem(Armlet_Of_Prisoner) > 0 ) {
if (lhz_curse == 0) {
@@ -3443,11 +3443,11 @@ OnTouch_:
end;
}
-lhz_dun02,60,298,0 duplicate(#kiz02-1) #kiz02-2 -1,3,3
-lhz_dun02,267,278,0 duplicate(#kiz02-1) #kiz02-3 -1,3,3
-lhz_dun02,94,199,0 duplicate(#kiz02-1) #kiz02-4 -1,3,3
+lhz_dun02,60,298,0 duplicate(#kiz02-1) #kiz02-2 FAKE_NPC,3,3
+lhz_dun02,267,278,0 duplicate(#kiz02-1) #kiz02-3 FAKE_NPC,3,3
+lhz_dun02,94,199,0 duplicate(#kiz02-1) #kiz02-4 FAKE_NPC,3,3
-lhz_dun03,244,51,0 script #kiz03-1 -1,3,3,{
+lhz_dun03,244,51,0 script #kiz03-1 FAKE_NPC,3,3,{
OnTouch_:
if (countitem(Armlet_Of_Prisoner) > 0 ) {
if (lhz_curse == 0) {
@@ -3483,10 +3483,10 @@ OnTouch_:
end;
}
-lhz_dun03,123,191,0 duplicate(#kiz03-1) #kiz03-2 -1,3,3
-lhz_dun03,74,140,0 duplicate(#kiz03-1) #kiz03-3 -1,3,3
+lhz_dun03,123,191,0 duplicate(#kiz03-1) #kiz03-2 FAKE_NPC,3,3
+lhz_dun03,74,140,0 duplicate(#kiz03-1) #kiz03-3 FAKE_NPC,3,3
-lighthalzen,344,278,0 script #kiz03 -1,2,2,{
+lighthalzen,344,278,0 script #kiz03 FAKE_NPC,2,2,{
OnTouch_:
if (countitem(Armlet_Of_Prisoner) > 0 ) {
if (lhz_curse == 0) {
@@ -3537,7 +3537,7 @@ OnTouch_:
end;
}
-lhz_in03,178,22,0 script #kiz04 -1,2,2,{
+lhz_in03,178,22,0 script #kiz04 FAKE_NPC,2,2,{
OnTouch_:
if (countitem(Armlet_Of_Prisoner) > 0 ) {
if (lhz_curse == 0) {
@@ -3616,7 +3616,7 @@ OnTouch_:
end;
}
-lighthalzen,295,227,0 script #kiz05 -1,2,2,{
+lighthalzen,295,227,0 script #kiz05 FAKE_NPC,2,2,{
OnTouch_:
if (countitem(Armlet_Of_Prisoner) > 0 ) {
if (lhz_curse == 0) {
@@ -3662,7 +3662,7 @@ OnTouch_:
end;
}
-lighthalzen,364,315,0 script #kiz06 -1,3,3,{
+lighthalzen,364,315,0 script #kiz06 FAKE_NPC,3,3,{
OnTouch_:
if (countitem(Armlet_Of_Prisoner) > 0 ) {
if (lhz_curse == 0) {
@@ -3721,7 +3721,7 @@ OnTouch_:
end;
}
-lhz_in01,113,150,0 script #kiz07 -1,3,3,{
+lhz_in01,113,150,0 script #kiz07 FAKE_NPC,3,3,{
OnTouch_:
if (countitem(Armlet_Of_Prisoner) > 0 ) {
if (lhz_curse == 0) {
@@ -3775,7 +3775,7 @@ OnTouch_:
end;
}
-lhz_in01,272,227,0 script #kiz08 -1,2,2,{
+lhz_in01,272,227,0 script #kiz08 FAKE_NPC,2,2,{
OnTouch_:
if (countitem(Armlet_Of_Prisoner) > 0 ) {
if (lhz_curse == 0) {
@@ -3859,7 +3859,7 @@ OnTouch_:
end;
}
-lhz_in01,206,129,0 script #kiz09 -1,5,5,{
+lhz_in01,206,129,0 script #kiz09 FAKE_NPC,5,5,{
OnTouch_:
if (countitem(Armlet_Of_Prisoner) > 0) {
if (lhz_curse == 12) {
@@ -4149,7 +4149,7 @@ lhz_que01,29,24,3 script #li_researcher 4_M_SAGE_A,{
end;
}
-lhz_in01,282,166,0 script #kiz10 -1,3,3,{
+lhz_in01,282,166,0 script #kiz10 FAKE_NPC,3,3,{
OnTouch_:
if (countitem(Armlet_Of_Prisoner) > 0) {
if (lhz_curse == 16) {
@@ -5197,7 +5197,7 @@ OnTouch_:
lhz_in03,12,162,0 warp #to_lhz 1,1,lighthalzen,321,322
-lighthalzen,319,321,0 script #li_bother -1,2,2,{ //3,3
+lighthalzen,319,321,0 script #li_bother FAKE_NPC,2,2,{ //3,3
OnTouch_:
if ((lhz_curse == 24 ) || (lhz_curse == 25)) {
mes ".............";
@@ -6271,7 +6271,7 @@ lhz_in01,286,226,3 script Secretary Slierre#li 4_F_ZONDAGIRL,{
}
}
-lhz_que01,94,24,0 script #li_end -1,2,2,{
+lhz_que01,94,24,0 script #li_end FAKE_NPC,2,2,{
OnTouch_:
if (lhz_curse > 30) {
mes "^3131FFThere's no trace of";
@@ -7034,7 +7034,7 @@ lighthalzen,179,170,4 script Ordinary Man 4W_M_02,{
}
}
-lighthalzen,173,167,1 script Switch -1,2,4,{
+lighthalzen,173,167,1 script Switch FAKE_NPC,2,4,{
OnTouch:
if(lhz_boss == 1)
@@ -8622,7 +8622,7 @@ OnInit:
end;
}
-yuno_pre,117,60,0 script Eavesdrop -1,10,5,{
+yuno_pre,117,60,0 script Eavesdrop FAKE_NPC,10,5,{
OnTouch:
if(lhz_boss == 16)
@@ -9112,7 +9112,7 @@ OnInit:
end;
}
-lhz_fild02,224,220,0 script Wounded Man Switch -1,3,3,{
+lhz_fild02,224,220,0 script Wounded Man Switch FAKE_NPC,3,3,{
OnTouch:
if(lhz_boss == 18)
@@ -9126,7 +9126,7 @@ OnTouch:
}
}
-lhz_fild01,76,214,0 script Esuna Trigger -1,5,5,{
+lhz_fild01,76,214,0 script Esuna Trigger FAKE_NPC,5,5,{
OnTouch:
if((lhz_boss == 26) || (lhz_boss == 36) || (lhz_boss == 38) || (lhz_boss == 40))
@@ -9769,7 +9769,7 @@ L_Enter:
}
}
-lhz_in01,177,44,0 script Timer_Sneak -1,8,12,{
+lhz_in01,177,44,0 script Timer_Sneak FAKE_NPC,8,12,{
OnTouch:
warp "lhz_in01",191,49;
@@ -11639,7 +11639,7 @@ OnStop:
end;
}
-- script ::Scamp -1,{
+- script ::Scamp FAKE_NPC,{
if(lhz_rekenber > 21)
{
@@ -11822,7 +11822,7 @@ OnStop:
close;
}
-airplane_01,1,1,1 script #bully1 -1,{
+airplane_01,1,1,1 script #bully1 FAKE_NPC,{
OnInit:
disablenpc "#bully1";
@@ -11865,7 +11865,7 @@ OnTimer120000:
end;
}
-airplane_01,2,2,1 script #bully2 -1,{
+airplane_01,2,2,1 script #bully2 FAKE_NPC,{
OnInit:
disablenpc "#bully2";
diff --git a/npc/quests/quests_louyang.txt b/npc/quests/quests_louyang.txt
index 6fa9a4f30..c62c5524b 100644
--- a/npc/quests/quests_louyang.txt
+++ b/npc/quests/quests_louyang.txt
@@ -4245,7 +4245,7 @@ lou_fild01,225,350,0 script #fire HIDDEN_WARP_NPC,{
end;
}
-lou_in01,101,125,0 script Trap#lou_in1 -1,20,1,{
+lou_in01,101,125,0 script Trap#lou_in1 FAKE_NPC,20,1,{
OnTouch:
if (ch_poison == 12 || ch_poison == 16) {
mes "[Soldier]";
@@ -4259,7 +4259,7 @@ OnTouch:
end;
}
-lou_in01,101,129,0 script Trap#lou_in2 -1,20,1,{
+lou_in01,101,129,0 script Trap#lou_in2 FAKE_NPC,20,1,{
OnTouch:
if (ch_poison == 12 || ch_poison == 16) {
mes "[Soldier]";
@@ -4275,7 +4275,7 @@ OnTouch:
end;
}
-lou_in01,101,134,0 script Trap#lou_in3 -1,20,1,{
+lou_in01,101,134,0 script Trap#lou_in3 FAKE_NPC,20,1,{
OnTouch:
if (ch_poison == 12 || ch_poison == 16) {
mes "[Soldier]";
@@ -4290,7 +4290,7 @@ OnTouch:
end;
}
-lou_in01,114,163,0 script Trap#lou_in4 -1,6,1,{
+lou_in01,114,163,0 script Trap#lou_in4 FAKE_NPC,6,1,{
OnTouch:
if (ch_poison == 12 || ch_poison == 16) {
mes "[Soldier]";
@@ -4304,7 +4304,7 @@ OnTouch:
end;
}
-lou_in01,114,165,0 script Trap#lou_in5 -1,1,0,{
+lou_in01,114,165,0 script Trap#lou_in5 FAKE_NPC,1,0,{
OnTouch:
if (ch_poison == 12 || ch_poison == 16) {
mes "[Soldier]";
diff --git a/npc/quests/quests_morocc.txt b/npc/quests/quests_morocc.txt
index 077072fdc..757125618 100644
--- a/npc/quests/quests_morocc.txt
+++ b/npc/quests/quests_morocc.txt
@@ -759,7 +759,7 @@ OnTimer250000:
end;
}
-que_job01,12,13,0 script #room1_warp -1,15,15,{
+que_job01,12,13,0 script #room1_warp FAKE_NPC,15,15,{
OnInit:
disablenpc "#room1_warp";
end;
@@ -1850,7 +1850,7 @@ morocc,159,113,3 script Chief Balrog 4_M_CRU_OLD,{
}
}
-moc_fild21,38,193,0 script Morocc Timer#edq -1,6,6,{
+moc_fild21,38,193,0 script Morocc Timer#edq FAKE_NPC,6,6,{
//OnInit:
// $@re_moc = 0;
// $@re_moc_time$ = "";
@@ -3571,7 +3571,7 @@ yuno_in04,167,120,3 script Worn-out Book#garas HIDDEN_NPC,{
}
}
-que_ba,247,33,0 script #bpast_1_1 -1,1,1,{
+que_ba,247,33,0 script #bpast_1_1 FAKE_NPC,1,1,{
//OnTouch2:
OnTouch:
if (barmunt_crow < 4) {
@@ -3639,7 +3639,7 @@ que_ba,181,14,7 script Researcher#bpast_2_2 4_LGTSCIENCE,{
que_ba,183,25,0 warp #bpast_2to3_1 1,1,que_ba,72,25
que_ba,183,52,0 warp #bpast_2to3_2 1,1,que_ba,72,51
-que_ba,102,56,0 script #3room_barmunt -1,3,3,{
+que_ba,102,56,0 script #3room_barmunt FAKE_NPC,3,3,{
//OnTouch2:
OnTouch:
if (barmunt_crow < 4) {
@@ -6809,7 +6809,7 @@ prt_castle,368,312,4 script Prince#ern 4_M_2NDPRIN1,{
}
}
-prt_castle,163,319,0 script #twonoble -1,3,3,{
+prt_castle,163,319,0 script #twonoble FAKE_NPC,3,3,{
//OnTouch2:
OnTouch:
if (nkprince_eisen == 7) {
diff --git a/npc/quests/quests_moscovia.txt b/npc/quests/quests_moscovia.txt
index 82b01b4e7..5142d7e41 100644
--- a/npc/quests/quests_moscovia.txt
+++ b/npc/quests/quests_moscovia.txt
@@ -2518,7 +2518,7 @@ OnTouch:
}
//- Triggers -
-mosk_ship,1,1,4 script Baehideun#ship -1,{
+mosk_ship,1,1,4 script Baehideun#ship FAKE_NPC,{
OnInit:
$@mos1_edq = 0;
end;
@@ -2567,7 +2567,7 @@ OnTimer300000:
end;
}
-- script Baehideun#main -1,{
+- script Baehideun#main FAKE_NPC,{
OnInit:
if (compare(strnpcinfo(0),"main")) end;
disablenpc strnpcinfo(0);
@@ -2619,10 +2619,10 @@ OnTimer300000:
donpcevent strnpcinfo(0)+"::OnDisable";
end;
}
-mosk_ship,2,2,4 duplicate(Baehideun#main) Baehideun1#ship -1
-mosk_ship,3,3,4 duplicate(Baehideun#main) Baehideun2#ship -1
-mosk_ship,5,5,4 duplicate(Baehideun#main) Baehideun3#ship -1
-mosk_ship,15,15,4 duplicate(Baehideun#main) Baehideun4#ship -1
+mosk_ship,2,2,4 duplicate(Baehideun#main) Baehideun1#ship FAKE_NPC
+mosk_ship,3,3,4 duplicate(Baehideun#main) Baehideun2#ship FAKE_NPC
+mosk_ship,5,5,4 duplicate(Baehideun#main) Baehideun3#ship FAKE_NPC
+mosk_ship,15,15,4 duplicate(Baehideun#main) Baehideun4#ship FAKE_NPC
//== Help Mikhail :: mos_swan & mos_swan_pt2 ===============
@@ -3682,7 +3682,7 @@ mosk_in,147,202,3 script Victor#mos 4_M_RUSMAN2,{
close;
}
-mosk_in,215,181,0 script #swan_inn -1,1,1,{
+mosk_in,215,181,0 script #swan_inn FAKE_NPC,1,1,{
end;
OnTouch:
if (mos_swan != 4) end;
@@ -3986,7 +3986,7 @@ moscovia,208,182,7 script Acorn Dealer#mos 4_M_RUSMAN1,{
}
//- Big Squirrel - Trade Acorns for Gems -
-- script Squirrel#mos_main -1,{
+- script Squirrel#mos_main FAKE_NPC,{
if (compare(strnpcinfo(0),"mos_sq")) end;
OnTouch:
if ((MaxWeight-Weight) < 2000) {
@@ -4102,7 +4102,7 @@ mosk_fild01,113,108,5 duplicate(Squirrel#mos_main) #mos_sq COCO,2,2
//== Banish Winter :: mos_nowinter =========================
//- Baba Yaga, the Horrible - Starting Point -
-mosk_in,215,46,5 script #babayaga -1,7,7,{
+mosk_in,215,46,5 script #babayaga FAKE_NPC,7,7,{
end;
OnTouch:
if (!mos_nowinter) {
@@ -6299,7 +6299,7 @@ mosk_dun03,225,233,0 script Pile of skeletons#mosk HIDDEN_NPC,{
close;
}
-mosk_dun03,225,233,0 script #Magic_Bottle -1,5,5,{
+mosk_dun03,225,233,0 script #Magic_Bottle FAKE_NPC,5,5,{
end;
OnTouch:
if (mos_nowinter == 8) {
@@ -6350,7 +6350,7 @@ OnTouch:
}
//- Csar Alexsay III -
-mosk_in,131,92,3 script #Csar -1,7,7,{
+mosk_in,131,92,3 script #Csar FAKE_NPC,7,7,{
if (mos_nowinter == 12) {
mes "[Csar Alexsay III]";
mes "You!!!";
@@ -7328,7 +7328,7 @@ OnMyMobDead:
}
//- Koshei, The Immortal -
-mosk_dun01,5,5,0 script Koshei#rus47 -1,0,0,{
+mosk_dun01,5,5,0 script Koshei#rus47 FAKE_NPC,0,0,{
end;
OnInit:
disablenpc "Koshei#rus47";
@@ -7363,7 +7363,7 @@ OnTimer300000:
}
//- Gray Wolf & Maria Morebna -
-- script mos_rus#main -1,{
+- script mos_rus#main FAKE_NPC,{
end;
OnInit:
if (compare(strnpcinfo(0),"main")) end;
@@ -8444,7 +8444,7 @@ mosk_fild02,157,233,0 script Shepherdess#rus10 1_F_04,{
}
//- Pointed Trees (Wooden Flute) -
-- script PTree#rusmain -1,{
+- script PTree#rusmain FAKE_NPC,{
if (rhea_rus_ring == 6) {
if (countitem(Pointed_Branch) < 50) {
if (rand(1,3) == 2) {
@@ -8599,7 +8599,7 @@ mosk_fild02,101,204,0 duplicate(NoSwim) Caution#rus01 2_BULLETIN_BOARD
mosk_fild02,101,200,0 duplicate(NoSwim) Caution#rus02 2_BULLETIN_BOARD
//- Lusalka Trigger (Lusalka's Hair) -
-mosk_fild02,116,202,3 script Lusalka#07russai_22 -1,3,3,{
+mosk_fild02,116,202,3 script Lusalka#07russai_22 FAKE_NPC,3,3,{
end;
OnTouch:
if (rhea_rus_main != 8) {
@@ -9250,7 +9250,7 @@ mosk_que,0,0,0,0 monster Freezer 1887,10,20000,0,0
mosk_que,0,0,0,0 monster Hatii Baby 1888,3,300000,0,0
mosk_que,0,0,0,0 monster Sasquatch 1243,15,10000,0,0
-mosk_que,49,22,3 script #rus27 -1,3,3,{
+mosk_que,49,22,3 script #rus27 FAKE_NPC,3,3,{
end;
OnTouch:
if (rhea_rus_main == 8) {
diff --git a/npc/quests/quests_nameless.txt b/npc/quests/quests_nameless.txt
index 9ff387238..736cd6d78 100644
--- a/npc/quests/quests_nameless.txt
+++ b/npc/quests/quests_nameless.txt
@@ -62,7 +62,7 @@
//=========================================================================
//== Nameless Island and Cursed Monestary Access Quest :: aru_monas =
-airplane_01,90,63,0 script Event Switch#pc -1,3,3,{
+airplane_01,90,63,0 script Event Switch#pc FAKE_NPC,3,3,{
end;
OnTouch:
@@ -285,7 +285,7 @@ ra_in01,297,50,7 script Suspicious-Looking Man 4_M_MASK1,{
close;
}
-ra_in01,301,43,0 script MealConversation Trigger -1,3,3,{
+ra_in01,301,43,0 script MealConversation Trigger FAKE_NPC,3,3,{
end;
OnTouch:
@@ -919,7 +919,7 @@ OnInit:
end;
}
-nameless_i,212,184,0 script Outside Island#Aru -1,2,3,{
+nameless_i,212,184,0 script Outside Island#Aru FAKE_NPC,2,3,{
end;
OnTouch:
@@ -940,7 +940,7 @@ OnTouch:
end;
}
-nameless_in,21,176,0 script Inside Island#Aru -1,2,2,{
+nameless_in,21,176,0 script Inside Island#Aru FAKE_NPC,2,2,{
end;
OnTouch:
@@ -955,7 +955,7 @@ OnTouch:
end;
}
-nameless_i,129,218,0 script Grass Behind#Aru -1,4,3,{
+nameless_i,129,218,0 script Grass Behind#Aru FAKE_NPC,4,3,{
end;
OnTouch:
@@ -1017,7 +1017,7 @@ nameless_i,127,207,0 script Dead Crow#Aru HIDDEN_NPC,{
end;
}
-nameless_in,15,61,0 script Pass Out#Aru -1,2,3,{
+nameless_in,15,61,0 script Pass Out#Aru FAKE_NPC,2,3,{
end;
OnTouch:
@@ -1157,7 +1157,7 @@ OnTouch:
close;
}
-nameless_n,169,254,0 script Night#Aru2 -1,3,3,{
+nameless_n,169,254,0 script Night#Aru2 FAKE_NPC,3,3,{
end;
OnTouch:
@@ -2439,7 +2439,7 @@ OnTouch:
end;
}
-moc_ruins,86,149,0 script #ForeignMerchant1 -1,3,3,{
+moc_ruins,86,149,0 script #ForeignMerchant1 FAKE_NPC,3,3,{
OnTouch:
if (aru_em == 4) {
aru_em = 5;
@@ -2447,7 +2447,7 @@ OnTouch:
end;
}
-moc_ruins,88,136,0 script #ForeignMerchant2 -1,3,3,{
+moc_ruins,88,136,0 script #ForeignMerchant2 FAKE_NPC,3,3,{
OnTouch:
if (aru_em == 1) {
aru_em = 2;
@@ -2464,7 +2464,7 @@ OnTouch:
end;
}
-moc_ruins,106,133,0 script #ForeignMerchant3 -1,3,3,{
+moc_ruins,106,133,0 script #ForeignMerchant3 FAKE_NPC,3,3,{
OnTouch:
if (aru_em == 2) {
aru_em = 3;
@@ -2472,7 +2472,7 @@ OnTouch:
end;
}
-moc_ruins,115,147,0 script #ForeignMerchant4 -1,3,3,{
+moc_ruins,115,147,0 script #ForeignMerchant4 FAKE_NPC,3,3,{
OnTouch:
if (aru_em == 3) {
aru_em = 4;
@@ -2861,7 +2861,7 @@ que_temsky,99,100,6 script Pope#rachel2 4_F_ARUNA_POP,{
end;
}
-que_temsky,100,93,0 script #em_sky_s -1,5,2,{
+que_temsky,100,93,0 script #em_sky_s FAKE_NPC,5,2,{
//OnTouch2:
OnTouch:
if (aru_em == 21) {
@@ -3143,7 +3143,7 @@ OnTouch:
end;
}
-rachel,142,136,0 script #em_end -1,5,5,{
+rachel,142,136,0 script #em_end FAKE_NPC,5,5,{
OnInit:
stopnpctimer;
end;
@@ -3768,7 +3768,7 @@ cmd_fild01,55,160,0 script Heap of Earth CLEAR_NPC,{
close;
}
-- script ::Dorian_izlude -1,{
+- script ::Dorian_izlude FAKE_NPC,{
if (checkweight(Resin,200) == 0) {
mes "[Dorian]";
mes "Ugh, just like a member";
@@ -8716,7 +8716,7 @@ OnTouch:
end;
}
-z_agit,98,44,0 script EntranceCheck#1 -1,10,10,{
+z_agit,98,44,0 script EntranceCheck#1 FAKE_NPC,10,10,{
OnTouch:
if (((zdan_edq == 15) || (zdan_edq == 16)) && ($@monster_zgang == 0)) {
$@monster_zgang = 1;
@@ -8745,7 +8745,7 @@ OnTouch:
end;
}
-z_agit,98,92,0 script EntranceCheck#2 -1,10,10,{
+z_agit,98,92,0 script EntranceCheck#2 FAKE_NPC,10,10,{
OnTouch:
if (((zdan_edq == 15) || (zdan_edq == 16)) && ($@monster_zgang == 0)) {
$@monster_zgang = 1;
@@ -8847,7 +8847,7 @@ OnTimer350000:
end;
}
-- script #ZGuard -1,{
+- script #ZGuard FAKE_NPC,{
OnInit:
disablenpc "#ZGuard";
end;
@@ -11644,7 +11644,7 @@ OnTimer60000:
end;
}
-gef_fild08,182,182,0 script #CallGhost -1,2,2,{
+gef_fild08,182,182,0 script #CallGhost FAKE_NPC,2,2,{
end;
//OnTouch2:
diff --git a/npc/quests/quests_prontera.txt b/npc/quests/quests_prontera.txt
index a535fd212..62ac92f42 100644
--- a/npc/quests/quests_prontera.txt
+++ b/npc/quests/quests_prontera.txt
@@ -1551,7 +1551,7 @@ S_Song:
close;
}
-mjolnir_01,298,302,0 script #prt_poem01 -1,2,2,{
+mjolnir_01,298,302,0 script #prt_poem01 FAKE_NPC,2,2,{
OnTouch:
if (prt_curse == 11) {
mes "^FF0000*The great serpent*^000000";
@@ -1561,7 +1561,7 @@ OnTouch:
end;
}
-mjolnir_01,300,297,0 script #prt_poem02 -1,2,2,{
+mjolnir_01,300,297,0 script #prt_poem02 FAKE_NPC,2,2,{
OnTouch:
if (prt_curse == 11) {
mes "^FF0000*The great serpent*^000000";
@@ -1571,7 +1571,7 @@ OnTouch:
end;
}
-mjolnir_01,292,288,0 script #prt_poem03 -1,2,2,{
+mjolnir_01,292,288,0 script #prt_poem03 FAKE_NPC,2,2,{
OnTouch:
if (prt_curse == 11) {
mes "^FF0000*The eagle of the rainbow*^000000";
@@ -1581,7 +1581,7 @@ OnTouch:
end;
}
-mjolnir_01,302,286,0 script #prt_poem04 -1,2,2,{
+mjolnir_01,302,286,0 script #prt_poem04 FAKE_NPC,2,2,{
OnTouch:
if (prt_curse == 11) {
mes "^FF0000*Then snake scales*^000000";
@@ -1591,7 +1591,7 @@ OnTouch:
end;
}
-mjolnir_01,313,279,0 script #prt_poem05 -1,2,2,{
+mjolnir_01,313,279,0 script #prt_poem05 FAKE_NPC,2,2,{
OnTouch:
if (prt_curse == 11) {
mes "^FF0000*And it slowly died...*^000000";
@@ -3535,7 +3535,7 @@ OnEnable:
end;
}
-morocc,45,103,0 script #prtcurse -1,2,2,{
+morocc,45,103,0 script #prtcurse FAKE_NPC,2,2,{
OnTouch:
if (prt_curse == 25) {
mes "["+strcharinfo(0)+"]";
diff --git a/npc/quests/quests_rachel.txt b/npc/quests/quests_rachel.txt
index db6fd02a7..ce2a18859 100644
--- a/npc/quests/quests_rachel.txt
+++ b/npc/quests/quests_rachel.txt
@@ -3217,7 +3217,7 @@ OnMyMobDead:
end;
}
-ice_dun02,120,3,0 script #cave_vos -1,{
+ice_dun02,120,3,0 script #cave_vos FAKE_NPC,{
OnInit:
initnpctimer;
end;
@@ -3646,7 +3646,7 @@ ice_dun03,127,172,0 script Blazing Fire#ice4 4_NFWISP,{
close;
}
-ice_dun03,1,173,5 script ice_boss#broad -1,{
+ice_dun03,1,173,5 script ice_boss#broad FAKE_NPC,{
OnStop:
stopnpctimer;
end;
@@ -3685,7 +3685,7 @@ OnTimer21000:
end;
}
-ice_dun03,1,174,3 script ice_boss#on -1,{
+ice_dun03,1,174,3 script ice_boss#on FAKE_NPC,{
OnStart:
monster "ice_dun03",150,135,"Ktullanux",1779,1,"ice_boss#on::OnMyMobDead";
end;
@@ -3715,7 +3715,7 @@ OnTimer7200000:
end;
}
-ice_dun03,1,175,3 script #ice_sec -1,{
+ice_dun03,1,175,3 script #ice_sec FAKE_NPC,{
OnStart:
initnpctimer;
enablenpc "#ice_4f_1";
@@ -4494,7 +4494,7 @@ rachel,243,37,3 script Kid#Candy Addict 4_M_CHILD1,{
}
}
-ra_temple,67,209,0 script zawa00 -1,3,3,{
+ra_temple,67,209,0 script zawa00 FAKE_NPC,3,3,{
OnTouch:
if (ra_tem_q == 2) {
mes "^3355FFYou notice a slightly";
@@ -4547,7 +4547,7 @@ que_rachel,63,82,0 script Window#ra_temple HIDDEN_NPC,{
close;
}
-que_rachel,60,80,0 script zawa01 -1,5,5,{
+que_rachel,60,80,0 script zawa01 FAKE_NPC,5,5,{
OnTouch:
if (ra_tem_q == 2) {
mes "^3355FFIt's strangely";
@@ -4558,7 +4558,7 @@ OnTouch:
end;
}
-que_rachel,59,112,0 script zawa02 -1,10,10,{
+que_rachel,59,112,0 script zawa02 FAKE_NPC,10,10,{
OnTouch:
if (ra_tem_q == 3) {
mes "^3355FFYou hear some";
@@ -4572,7 +4572,7 @@ OnTouch:
end;
}
-que_rachel,94,139,0 script zawa03 -1,10,10,{
+que_rachel,94,139,0 script zawa03 FAKE_NPC,10,10,{
OnTouch:
if (ra_tem_q == 4) {
mes "^3355FFYou hear noises of some";
@@ -4583,7 +4583,7 @@ OnTouch:
end;
}
-que_rachel,132,70,0 script zawa04 -1,10,10,{
+que_rachel,132,70,0 script zawa04 FAKE_NPC,10,10,{
OnTouch:
if (ra_tem_q == 5) {
mes " ";
@@ -4600,7 +4600,7 @@ OnTouch:
end;
}
-que_rachel,28,315,0 script Bloody Spot -1,5,5,{
+que_rachel,28,315,0 script Bloody Spot FAKE_NPC,5,5,{
OnTouch:
if (ra_tem_q == 6) {
mes "^3355FFThere's a spot on the";
@@ -4670,7 +4670,7 @@ OnTouch:
end;
}
-que_rachel,170,37,0 script nemma01::nemma01 -1,5,5,{
+que_rachel,170,37,0 script nemma01::nemma01 FAKE_NPC,5,5,{
OnTouch:
if (ra_tem_q == 8) {
mes "[???]";
@@ -4699,10 +4699,10 @@ OnTouch:
end;
}
-que_rachel,175,37,0 duplicate(nemma01) nemma02 -1,5,5
-que_rachel,180,37,0 duplicate(nemma01) nemma03 -1,5,5
-que_rachel,165,37,0 duplicate(nemma01) nemma04 -1,5,5
-que_rachel,160,37,0 duplicate(nemma01) nemma05 -1,5,5
+que_rachel,175,37,0 duplicate(nemma01) nemma02 FAKE_NPC,5,5
+que_rachel,180,37,0 duplicate(nemma01) nemma03 FAKE_NPC,5,5
+que_rachel,165,37,0 duplicate(nemma01) nemma04 FAKE_NPC,5,5
+que_rachel,160,37,0 duplicate(nemma01) nemma05 FAKE_NPC,5,5
que_rachel,169,18,0 script Quest Temple Exit#ra_tem WARPNPC,2,2,{
mes "^3355FFThe gate is closed.^000000";
@@ -7067,7 +7067,7 @@ OnTimer120000:
end;
}
-ra_temin,293,144,0 script out1#rachel -1,3,3,{
+ra_temin,293,144,0 script out1#rachel FAKE_NPC,3,3,{
OnTouch:
if (ra_tem_q == 18) {
mes "^3355FFIt sounds like they're";
@@ -7088,7 +7088,7 @@ OnTouch:
end;
}
-ra_temin,288,151,0 script hidden1#rachel -1,1,6,{
+ra_temin,288,151,0 script hidden1#rachel FAKE_NPC,1,6,{
OnTouch:
if (ra_tem_q == 18) {
mes "^3355FFAt this distance you";
@@ -7250,7 +7250,7 @@ OnTouch:
end;
}
-ra_temin,272,143,0 script key1#rachel -1,3,3,{
+ra_temin,272,143,0 script key1#rachel FAKE_NPC,3,3,{
OnTouch:
if (ra_tem_q == 20) {
mes "^3355FFYou find a small";
@@ -7301,7 +7301,7 @@ OnTouch:
close;
}
-que_san04,119,115,0 script imir1#rachel -1,2,2,{
+que_san04,119,115,0 script imir1#rachel FAKE_NPC,2,2,{
OnTouch:
if (ra_tem_q == 21) {
mes "^3355FFThis large area looks";
@@ -7318,7 +7318,7 @@ OnTouch:
end;
}
-que_san04,119,133,0 script imir2#rachel -1,20,5,{
+que_san04,119,133,0 script imir2#rachel FAKE_NPC,20,5,{
OnTouch:
if (ra_tem_q == 21) {
mes "^3355FFThere's something here";
@@ -7329,7 +7329,7 @@ OnTouch:
end;
}
-que_san04,119,203,0 script imir3#rachel -1,7,7,{
+que_san04,119,203,0 script imir3#rachel FAKE_NPC,7,7,{
OnTouch:
if (ra_tem_q == 21) {
mes "^3355FFNo wonder this object";
@@ -7418,7 +7418,7 @@ OnTimer120000:
end;
}
-rachel,163,152,0 script imir3#rachel2 -1,3,3,{
+rachel,163,152,0 script imir3#rachel2 FAKE_NPC,3,3,{
OnTouch:
if (ra_tem_q == 22) {
mes "^3355FFYou feel a slight headache";
diff --git a/npc/quests/quests_umbala.txt b/npc/quests/quests_umbala.txt
index bf228dd16..56cddc02d 100644
--- a/npc/quests/quests_umbala.txt
+++ b/npc/quests/quests_umbala.txt
@@ -1271,7 +1271,7 @@ umbala,145,217,3 script Chabimatan 4_F_UMWOMAN,{
}
}
-um_in,141,46,0 script #!@#$% -1,8,8,{
+um_in,141,46,0 script #!@#$% FAKE_NPC,8,8,{
OnInit:
disablenpc "#!@#$%";
end;
@@ -1300,7 +1300,7 @@ OnTouch:
end;
}
-umbala,94,181,0 script #unpc -1,1,1,{
+umbala,94,181,0 script #unpc FAKE_NPC,1,1,{
OnInit:
disablenpc "#unpc";
end;
diff --git a/npc/quests/quests_veins.txt b/npc/quests/quests_veins.txt
index ca7ef541d..bca78b9da 100644
--- a/npc/quests/quests_veins.txt
+++ b/npc/quests/quests_veins.txt
@@ -52,7 +52,7 @@
//=========================================================================
//== Stone Quest :: veins_stone ============================
-- script ::WincingOldMan_veins -1,{
+- script ::WincingOldMan_veins FAKE_NPC,{
if ((MaxWeight - Weight) < 2000 || checkweight(Knife,1) == 0) {
mes "- Wait a moment! -";
mes "- Currently you are carrying -";
@@ -2022,7 +2022,7 @@ ein_in01,166,282,4 script Employee#sch 4_M_KHMAN,{
close;
}
-ein_in01,176,285,0 script Bard Trigger#sch -1,1,1,{
+ein_in01,176,285,0 script Bard Trigger#sch FAKE_NPC,1,1,{
OnTouch:
if (que_sch == 15) {
disablenpc "Corporate Figure#sch";
@@ -5271,7 +5271,7 @@ ra_temin,115,140,1 script Flower Vase#vol HIDDEN_NPC,{
close;
}
-ra_temin,85,131,0 script path_vol1 -1,5,0,{
+ra_temin,85,131,0 script path_vol1 FAKE_NPC,5,0,{
OnTouch:
if ((aru_vol != 3) && (aru_vol != 4)) {
warp "ra_temin",85,137;
@@ -5279,7 +5279,7 @@ OnTouch:
end;
}
-ra_temin,82,131,0 script path_vol1#2 -1,5,0,{
+ra_temin,82,131,0 script path_vol1#2 FAKE_NPC,5,0,{
OnTouch:
if (aru_vol != 4) {
warp "ra_temin",85,137;
@@ -5287,7 +5287,7 @@ OnTouch:
end;
}
-ra_temin,82,127,0 script path_vol1#3 -1,5,1,{
+ra_temin,82,127,0 script path_vol1#3 FAKE_NPC,5,1,{
OnTouch:
if (aru_vol == 5) {
warp "ra_temin",84,124;
@@ -5536,7 +5536,7 @@ ra_temin,73,126,1 script Ladder#vol1 HIDDEN_NPC,{
end;
}
-ve_in,280,223,0 script #volroom -1,2,2,{
+ve_in,280,223,0 script #volroom FAKE_NPC,2,2,{
OnTouch:
if (aru_vol == 6) {
mes "^3355FFThis house looks like";
@@ -6489,7 +6489,7 @@ thor_camp,250,104,3 script Sahedi#vol 4_M_RASWORD,{
}
-thor_camp,194,220,0 script #Colonel1 -1,5,5,{
+thor_camp,194,220,0 script #Colonel1 FAKE_NPC,5,5,{
OnTouch:
if (aru_vol == 13) {
enablenpc "Colonel Vito#1";
@@ -6544,7 +6544,7 @@ OnTouch:
end;
}
-thor_camp,162,182,0 script #Colonel2 -1,7,7,{
+thor_camp,162,182,0 script #Colonel2 FAKE_NPC,7,7,{
OnTouch:
if (aru_vol == 13) {
enablenpc "Colonel Vito#2";
@@ -6934,7 +6934,7 @@ thor_camp,159,74,3 script Colonel Vito#3 4_M_DST_MASTER,{
close;
}
-thor_camp,141,62,0 script #vol_study1::VeinsWarp -1,3,3,{
+thor_camp,141,62,0 script #vol_study1::VeinsWarp FAKE_NPC,3,3,{
OnTouch:
if ((aru_vol > 13 && aru_vol < 17) || (aru_vol == 19)) {
warp "thor_camp",156,67;
@@ -6942,10 +6942,10 @@ OnTouch:
end;
}
-thor_camp,172,72,0 duplicate(VeinsWarp) #vol_study2 -1,3,3
-thor_camp,172,38,0 duplicate(VeinsWarp) #vol_study3 -1,3,3
+thor_camp,172,72,0 duplicate(VeinsWarp) #vol_study2 FAKE_NPC,3,3
+thor_camp,172,38,0 duplicate(VeinsWarp) #vol_study3 FAKE_NPC,3,3
-thor_camp,172,132,0 script #sita_vol -1,3,3,{
+thor_camp,172,132,0 script #sita_vol FAKE_NPC,3,3,{
OnTouch:
if (aru_vol == 21) {
mes "^3355FFThere's a stream of";
@@ -6963,7 +6963,7 @@ OnTouch:
end;
}
-thor_camp,148,310,0 script #buki_vol -1,5,5,{
+thor_camp,148,310,0 script #buki_vol FAKE_NPC,5,5,{
OnTouch:
if (aru_vol == 22) {
mes "^3355FFPeople are carrying";
@@ -7274,7 +7274,7 @@ OnTouch_:
end;
}
-thor_camp,62,98,0 script #volbq -1,5,5,{
+thor_camp,62,98,0 script #volbq FAKE_NPC,5,5,{
OnTouch:
mes "^3355FFThere is an old man";
mes "in high priest robes";
@@ -7305,7 +7305,7 @@ thor_camp,246,191,3 script Guard#goto 4_DST_SOLDIER,{
close;
}
-veins,302,166,0 script #whoau -1,2,2,{
+veins,302,166,0 script #whoau FAKE_NPC,2,2,{
OnTouch_:
mes "[House Owner]";
mes "Wh-who the hell";
diff --git a/npc/quests/seals/brisingamen_seal.txt b/npc/quests/seals/brisingamen_seal.txt
index 02bddfb7b..d579a94f7 100644
--- a/npc/quests/seals/brisingamen_seal.txt
+++ b/npc/quests/seals/brisingamen_seal.txt
@@ -3019,7 +3019,7 @@ que_god02,55,64,4 script Soldier#2_brising 8W_SOLDIER,1,1,{
close;
}
-que_god02,1,1,1 script #brisinsold2 -1,{
+que_god02,1,1,1 script #brisinsold2 FAKE_NPC,{
OnInit:
hideonnpc "Soldier#2_brising";
areawarp "que_god02",15,125,185,131,"geffen",120,100;
@@ -3056,7 +3056,7 @@ OnTimer550500:
}
-que_god02,1,1,1 script #brisinsummon -1,{
+que_god02,1,1,1 script #brisinsummon FAKE_NPC,{
OnInit:
hideonnpc "#doppelganger1";
diff --git a/npc/quests/seals/god_weapon_creation.txt b/npc/quests/seals/god_weapon_creation.txt
index a60c6a225..70bb2c881 100644
--- a/npc/quests/seals/god_weapon_creation.txt
+++ b/npc/quests/seals/god_weapon_creation.txt
@@ -817,7 +817,7 @@ OnTimer615000:
end;
}
-que_god01,169,82,0 script god_wep_warpmaster -1,{
+que_god01,169,82,0 script god_wep_warpmaster FAKE_NPC,{
OnEnable:
for(.@i = 1; .@i<=6; ++.@i)
enablenpc "god_failwarp#"+.@i;
@@ -828,7 +828,7 @@ OnDisable:
end;
}
-que_god01,154,67,0 script god_failwarp#1 -1,4,7,{
+que_god01,154,67,0 script god_failwarp#1 FAKE_NPC,4,7,{
OnInit:
disablenpc strnpcinfo(0);
end;
@@ -836,11 +836,11 @@ OnTouch:
warp "prontera",156,324;
end;
}
-que_god01,154,82,0 duplicate(god_failwarp#1) god_failwarp#2 -1,4,7
-que_god01,145,99,0 duplicate(god_failwarp#1) god_failwarp#3 -1,9,9
-que_god01,164,99,0 duplicate(god_failwarp#1) god_failwarp#4 -1,9,9
-que_god01,145,118,0 duplicate(god_failwarp#1) god_failwarp#5 -1,9,9
-que_god01,164,118,0 duplicate(god_failwarp#1) god_failwarp#6 -1,9,9
+que_god01,154,82,0 duplicate(god_failwarp#1) god_failwarp#2 FAKE_NPC,4,7
+que_god01,145,99,0 duplicate(god_failwarp#1) god_failwarp#3 FAKE_NPC,9,9
+que_god01,164,99,0 duplicate(god_failwarp#1) god_failwarp#4 FAKE_NPC,9,9
+que_god01,145,118,0 duplicate(god_failwarp#1) god_failwarp#5 FAKE_NPC,9,9
+que_god01,164,118,0 duplicate(god_failwarp#1) god_failwarp#6 FAKE_NPC,9,9
// Original name: "Godly Item Quests Related#god"
que_god01,293,3,0 script Godly Item Quests#god 4_F_01,{
diff --git a/npc/quests/skills/assassin_skills.txt b/npc/quests/skills/assassin_skills.txt
index 7f3312a07..ecea1c3d1 100644
--- a/npc/quests/skills/assassin_skills.txt
+++ b/npc/quests/skills/assassin_skills.txt
@@ -763,7 +763,7 @@ in_moc_16,23,27,5 script Assassin#realgirl 4_F_ACROSS,{
}
}
-in_sphinx2,259,213,0 script Old Coffin#qsk_as -1,7,8,{
+in_sphinx2,259,213,0 script Old Coffin#qsk_as FAKE_NPC,7,8,{
OnTouch:
if (ASSN_SK == 2) {
mes "^3355FFIt's an ancient coffin";
@@ -827,7 +827,7 @@ OnTouch:
}
}
-in_sphinx2,212,267,0 script Old Coffin#qsk_as2 -1,5,6,{
+in_sphinx2,212,267,0 script Old Coffin#qsk_as2 FAKE_NPC,5,6,{
OnTouch:
if (ASSN_SK == 2) {
mes "^3355FFIt's an ancient coffin";
@@ -910,7 +910,7 @@ OnTouch:
}
}
-in_sphinx2,13,163,0 script Stone Statue#qsk_as -1,7,7,{
+in_sphinx2,13,163,0 script Stone Statue#qsk_as FAKE_NPC,7,7,{
OnTouch:
if (ASSN_SK == 3) {
specialeffect EF_CONE;
@@ -945,7 +945,7 @@ OnTouch:
}
}
-in_sphinx2,13,146,0 script Stone Statue#qsk_as2 -1,7,7,{
+in_sphinx2,13,146,0 script Stone Statue#qsk_as2 FAKE_NPC,7,7,{
OnTouch:
if (ASSN_SK == 3) {
specialeffect EF_CONE;
@@ -981,7 +981,7 @@ OnTouch:
// FIXME[Haru]: Why do we have a Korean name here? Can anyone translate it?
// Google translate says ¡¡ (jingjing) = Whining, but it doesn't make much sense to me.
-moc_pryd04,85,96,0 script ¡¡#crypt -1,3,3,{
+moc_pryd04,85,96,0 script ¡¡#crypt FAKE_NPC,3,3,{
OnTouch:
if (ASSN_SK == 4) {
specialeffect EF_CONE;
diff --git a/npc/quests/skills/merchant_skills.txt b/npc/quests/skills/merchant_skills.txt
index 3a4575899..f2aa46bb6 100644
--- a/npc/quests/skills/merchant_skills.txt
+++ b/npc/quests/skills/merchant_skills.txt
@@ -356,7 +356,7 @@ alberta,119,221,6 script Charlron 1_M_PAY_ELDER,{
close;
}
-- script ::Gershaun_alberta -1,{
+- script ::Gershaun_alberta FAKE_NPC,{
if (BaseClass == Job_Merchant) {
if (getskilllv("MC_CARTREVOLUTION") == 1) {
mes "[Gershaun]";
diff --git a/npc/quests/skills/rogue_skills.txt b/npc/quests/skills/rogue_skills.txt
index e1444a8b3..b51895e47 100644
--- a/npc/quests/skills/rogue_skills.txt
+++ b/npc/quests/skills/rogue_skills.txt
@@ -37,7 +37,7 @@
//= 1.8
//=========================================================================
-in_rogue,359,177,0 script #killershow01 -1,{
+in_rogue,359,177,0 script #killershow01 FAKE_NPC,{
OnInit:
disablenpc "#killershow01";
end;
@@ -1053,7 +1053,7 @@ in_rogue,181,114,3 script Jay Greg#rogueguild 4_M_03,{
close;
}
-prt_are01,150,150,0 script #1strecog -1,10,10,{
+prt_are01,150,150,0 script #1strecog FAKE_NPC,10,10,{
OnTouch:
donpcevent "#1st5min::OnEnable";
donpcevent "#1stmove::OnEnable";
@@ -1061,7 +1061,7 @@ OnTouch:
end;
}
-prt_are01,135,135,0 script #1st5min -1,{
+prt_are01,135,135,0 script #1st5min FAKE_NPC,{
OnInit:
disablenpc "#1st5min";
end;
@@ -1106,7 +1106,7 @@ OnTimer315000:
end;
}
-prt_are01,135,135,0 script #1stmove -1,{
+prt_are01,135,135,0 script #1stmove FAKE_NPC,{
OnInit:
disablenpc "#1stmove";
end;
diff --git a/npc/quests/thana_quest.txt b/npc/quests/thana_quest.txt
index b33afe9b0..49cb0c5c7 100644
--- a/npc/quests/thana_quest.txt
+++ b/npc/quests/thana_quest.txt
@@ -2235,7 +2235,7 @@ OnDisable:
end;
}
-thana_boss,141,218,0 script #sommon_thanatos -1,{
+thana_boss,141,218,0 script #sommon_thanatos FAKE_NPC,{
OnEnable:
specialeffect EF_MAPPILLAR2,AREA,"#sommon_thanatos";
specialeffect EF_SEISMICWEAPON,AREA,"#sommon_thanatos";
diff --git a/npc/quests/the_sign_quest.txt b/npc/quests/the_sign_quest.txt
index 6aad35d67..a431a4318 100644
--- a/npc/quests/the_sign_quest.txt
+++ b/npc/quests/the_sign_quest.txt
@@ -3086,7 +3086,7 @@ prt_maze02,57,151,1 script Pleur#warp 4_F_02,{
end;
}
-prt_maze02,58,150,0 script #movesign -1,5,5,{
+prt_maze02,58,150,0 script #movesign FAKE_NPC,5,5,{
OnTouch:
mes "^3355FFYou catch a glimpse";
mes "of a girl heading directly";
@@ -3101,19 +3101,19 @@ OnTouch:
end;
}
-prt_maze02,18,126,0 script #mazewarp -1,3,3,{
+prt_maze02,18,126,0 script #mazewarp FAKE_NPC,3,3,{
OnTouch:
warp "prt_maze02",90,170;
end;
}
-prt_maze02,25,161,0 script #music -1,7,7,{
+prt_maze02,25,161,0 script #music FAKE_NPC,7,7,{
OnTouch:
soundeffect "effect\\¼®¾çÀÇ ¾î½Ø½Å.wav",1;
end;
}
-prt_maze02,132,132,0 script #skill -1,{
+prt_maze02,132,132,0 script #skill FAKE_NPC,{
OnEnable:
monster "prt_maze02",14,177,"Flora",1118,1,"#skill::OnMyMobDead";
monster "prt_maze02",17,171,"Flora",1118,1,"#skill::OnMyMobDead";
@@ -5044,7 +5044,7 @@ OnReset:
end;
}
-cmd_in01,1,1,0 script s_dance_timer -1,{
+cmd_in01,1,1,0 script s_dance_timer FAKE_NPC,{
OnEnable:
initnpctimer;
end;
@@ -5481,7 +5481,7 @@ OnTouch:
end;
}
-cmd_in01,14,14,0 script Examiner#sd -1,6,6,{
+cmd_in01,14,14,0 script Examiner#sd FAKE_NPC,6,6,{
OnInit:
disablenpc "Examiner#sd";
end;
@@ -10438,7 +10438,7 @@ que_sign01,122,141,4 script Witch#s 4_F_NFDEADMGCIAN,{
}
}
-nif_in,186,168,1 script #witch -1,1,1,{
+nif_in,186,168,1 script #witch FAKE_NPC,1,1,{
OnTouch:
callfunc "F_UpdateSignVars";
if (sign_q == 83) {
@@ -11662,7 +11662,7 @@ niflheim,102,54,4 script Mad Man#s 8_DOPPEL,{
}
}
-niflheim,348,257,1 script #Cursed Soul -1,1,1,{
+niflheim,348,257,1 script #Cursed Soul FAKE_NPC,1,1,{
OnTouch:
callfunc "F_UpdateSignVars";
if ((sign_q == 83) || (sign_q == 90)) {
@@ -11777,7 +11777,7 @@ OnMyMobDead:
end;
}
-nif_in,102,81,1 script #Crayu -1,1,1,{
+nif_in,102,81,1 script #Crayu FAKE_NPC,1,1,{
OnTouch:
callfunc "F_UpdateSignVars";
if (sign_q < 75) end;
@@ -11869,7 +11869,7 @@ OnTouch:
end;
}
-nif_in,156,91,1 script #kidniff -1,1,1,{
+nif_in,156,91,1 script #kidniff FAKE_NPC,1,1,{
OnTouch:
callfunc "F_UpdateSignVars";
if (sign_q == 83) {
@@ -12313,7 +12313,7 @@ geffen,119,48,0 script Fountain#s HIDDEN_NPC,{
}
}
-que_sign01,196,44,0 script Starter#serin -1,32,32,{
+que_sign01,196,44,0 script Starter#serin FAKE_NPC,32,32,{
OnTouch:
donpcevent "Timer#serin::OnStart";
disablenpc "Starter#serin";
@@ -12324,7 +12324,7 @@ OnEnable:
end;
}
-que_sign01,196,44,0 script Warp#serin -1,35,35,{
+que_sign01,196,44,0 script Warp#serin FAKE_NPC,35,35,{
OnDisable:
OnInit:
disablenpc "Warp#serin";
@@ -12339,7 +12339,7 @@ OnEnable:
end;
}
-que_sign01,1,0,0 script Timer#serin -1,{
+que_sign01,1,0,0 script Timer#serin FAKE_NPC,{
OnStart:
initnpctimer;
end;
@@ -12360,7 +12360,7 @@ OnTimer620000:
end;
}
-que_sign01,50,1,0 script CallMonster#serin -1,{
+que_sign01,50,1,0 script CallMonster#serin FAKE_NPC,{
OnCall:
monster "que_sign01",196,44,"Dark Lord Incarnation",1605,1,"CallMonster#serin::OnMyMobDead";
end;
@@ -12374,7 +12374,7 @@ OnReset:
killmonster "que_sign01","CallMonster#serin::OnMyMobDead";
}
-que_sign01,197,195,0 script Starter#witch -1,32,32,{
+que_sign01,197,195,0 script Starter#witch FAKE_NPC,32,32,{
OnTouch:
donpcevent "Timer#witch::OnStart";
disablenpc "Starter#witch";
@@ -12385,7 +12385,7 @@ OnEnable:
end;
}
-que_sign01,1,1,0 script Timer#witch -1,{
+que_sign01,1,1,0 script Timer#witch FAKE_NPC,{
OnStart:
initnpctimer;
end;
@@ -12404,7 +12404,7 @@ OnTimer620000:
end;
}
-que_sign01,197,195,0 script Warp#witch -1,35,35,{
+que_sign01,197,195,0 script Warp#witch FAKE_NPC,35,35,{
OnDisable:
OnInit:
disablenpc "Warp#witch";
@@ -12419,7 +12419,7 @@ OnTouch:
end;
}
-que_sign01,1,2,0 script CallMonster#witch -1,{
+que_sign01,1,2,0 script CallMonster#witch FAKE_NPC,{
OnCall:
monster "que_sign01",196,195,"Dark Lord Incarnation",1605,1,"CallMonster#witch::OnMyMobDead";
monster "que_sign01",180,180,"Ancient Mummy",1522,1,"CallMonster#witch::OnMyMobDead";
diff --git a/npc/re/battleground/bg_common.txt b/npc/re/battleground/bg_common.txt
new file mode 100644
index 000000000..2c47f8ed1
--- /dev/null
+++ b/npc/re/battleground/bg_common.txt
@@ -0,0 +1,36 @@
+//================= Hercules Script =======================================
+//= _ _ _
+//= | | | | | |
+//= | |_| | ___ _ __ ___ _ _| | ___ ___
+//= | _ |/ _ \ '__/ __| | | | |/ _ \/ __|
+//= | | | | __/ | | (__| |_| | | __/\__ \
+//= \_| |_/\___|_| \___|\__,_|_|\___||___/
+//================= License ===============================================
+//= This file is part of Hercules.
+//= http://herc.ws - http://github.com/HerculesWS/Hercules
+//=
+//= Copyright (C) 2012-2016 Hercules Dev Team
+//= Copyright (C) Frost
+//=
+//= Hercules is free software: you can redistribute it and/or modify
+//= it under the terms of the GNU General Public License as published by
+//= the Free Software Foundation, either version 3 of the License, or
+//= (at your option) any later version.
+//=
+//= This program is distributed in the hope that it will be useful,
+//= but WITHOUT ANY WARRANTY; without even the implied warranty of
+//= MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//= GNU General Public License for more details.
+//=
+//= You should have received a copy of the GNU General Public License
+//= along with this program. If not, see <http://www.gnu.org/licenses/>.
+//=========================================================================
+// BattleGround System - Common NPCs
+//================= Description ===========================================
+//= Battleground NPC:
+//= - Battleground Warper
+//================= Current Version =======================================
+//= 1.0
+//=========================================================================
+
+morocc,145,82,3 duplicate(BatRecruit) Maroll Battle Recruiter::BatRecruit8 4_F_JOB_KNIGHT \ No newline at end of file
diff --git a/npc/re/cities/izlude.txt b/npc/re/cities/izlude.txt
index accae753c..29a1a9a72 100644
--- a/npc/re/cities/izlude.txt
+++ b/npc/re/cities/izlude.txt
@@ -88,7 +88,7 @@ izlude_b,165,156,2 duplicate(Soldier_izlude) Soldier#izlude_b 8W_SOLDIER
izlude_c,165,156,2 duplicate(Soldier_izlude) Soldier#izlude_c 8W_SOLDIER
izlude_d,165,156,2 duplicate(Soldier_izlude) Soldier#izlude_d 8W_SOLDIER
-- script ::Guard_izlude -1,{
+- script ::Guard_izlude FAKE_NPC,{
mes "[Izlude Guard]";
mes "Welcome to Izlude.";
close;
diff --git a/npc/re/cities/malangdo.txt b/npc/re/cities/malangdo.txt
index 98d0efd95..43e07d7f1 100644
--- a/npc/re/cities/malangdo.txt
+++ b/npc/re/cities/malangdo.txt
@@ -34,7 +34,7 @@
//=========================================================================
//== Malangdo Transportation :: malangdo_go ================
-- script Dolangmal -1,{
+- script Dolangmal FAKE_NPC,{
if (!questprogress(5091)) {
mes "[Dolangmal]";
mes "Hey~! Hi human~ This is Mr. Dolangmal. kakaka~";
@@ -173,7 +173,7 @@ rachel,121,126,4 duplicate(Dolangmal) Dolangmal#7 4_CAT_DOWN
lighthalzen,254,83,5 duplicate(Dolangmal) Dolangmal#8 4_CAT_DOWN
mora,57,150,4 duplicate(Dolangmal) Dolangmal#9 4_CAT_DOWN
-- script ::Odgnalam -1,{
+- script ::Odgnalam FAKE_NPC,{
mes "This cat is sleeping in the warm "+((strnpcinfo(2) == "albe")?"Alberta":"Izlude")+" sun.";
next;
if(select("Let him sleep:Talk to him") == 1) close;
diff --git a/npc/re/cities/malaya.txt b/npc/re/cities/malaya.txt
index 1577a7245..0c937607a 100644
--- a/npc/re/cities/malaya.txt
+++ b/npc/re/cities/malaya.txt
@@ -150,7 +150,7 @@ ma_in01,30,94,4 script Inn Keeper#ma 4_F_MALAYA,{
}
}
-- script Unidentified Creature#i -1,{
+- script Unidentified Creature#i FAKE_NPC,{
end;
OnInit:
switch(atoi(strnpcinfo(2))) {
@@ -208,7 +208,7 @@ ma_fild01,74,367,6 duplicate(Unidentified Creature#i) Unidentified Creature#01 4
ma_fild02,282,41,4 duplicate(Unidentified Creature#i) Unidentified Creature#05 4_MAL_BUDIDAI,2,2
ma_scene01,195,92,4 duplicate(Unidentified Creature#i) Unidentified Creature#09 4_MAL_BUDIDAI,2,2
-- script Unidentified Creature#j -1,{
+- script Unidentified Creature#j FAKE_NPC,{
end;
OnEnable:
enablenpc strnpcinfo(0);
diff --git a/npc/re/cities/mora.txt b/npc/re/cities/mora.txt
index 1c9049795..acfc02c13 100644
--- a/npc/re/cities/mora.txt
+++ b/npc/re/cities/mora.txt
@@ -922,7 +922,7 @@ mora,140,186,3 script Raffle Philosopher 4_M_RAFLE_OLD,{
close;
}
-- script #mora_traveler -1,{
+- script #mora_traveler FAKE_NPC,{
mes "[Upset Traveler]";
mes "You... you dare play a game with me?";
emotion e_ag,0,"Traveler#ep14_1_1";
diff --git a/npc/re/guides/guides_izlude.txt b/npc/re/guides/guides_izlude.txt
index fb2cb31cd..e625235bf 100644
--- a/npc/re/guides/guides_izlude.txt
+++ b/npc/re/guides/guides_izlude.txt
@@ -34,7 +34,7 @@
//= 1.4
//=========================================================================
-- script ::GuideIzlude -1,{
+- script ::GuideIzlude FAKE_NPC,{
cutin "prt_soldier",2;
mes "[Izlude Guide]";
mes "Welcome to ^8B4513Izlude^000000,";
diff --git a/npc/re/instances/BuwayaCave.txt b/npc/re/instances/BuwayaCave.txt
index 008529551..139d3acc3 100644
--- a/npc/re/instances/BuwayaCave.txt
+++ b/npc/re/instances/BuwayaCave.txt
@@ -459,7 +459,7 @@ OnTouch:
close;
}
-1@ma_c,1,1,0 script #buwaya_spawn_mobs -1,{
+1@ma_c,1,1,0 script #buwaya_spawn_mobs FAKE_NPC,{
OnInstanceInit:
.@map$ = instance_mapname("1@ma_c");
areamonster .@map$,73,81,93,101,"Seaweed",2331,18;
diff --git a/npc/re/instances/MalangdoCulvert.txt b/npc/re/instances/MalangdoCulvert.txt
index bdf5c6776..e72833640 100644
--- a/npc/re/instances/MalangdoCulvert.txt
+++ b/npc/re/instances/MalangdoCulvert.txt
@@ -707,7 +707,7 @@ OnTimer520000:
end;
}
-1@pump,1,1,4 script Monster Hole#n -1,{
+1@pump,1,1,4 script Monster Hole#n FAKE_NPC,{
end;
OnSpawn:
.@i$ = charat(strnpcinfo(2),0);
@@ -789,7 +789,7 @@ OnTouch:
1@pump,75,80,4 duplicate(#Culvert_n1) #Culvert_n5 CLEAR_NPC,14,14
1@pump,58,101,4 duplicate(#Culvert_n1) #Culvert_n6 CLEAR_NPC,14,14
-1@pump,1,1,4 script Boss Creation#n -1,{
+1@pump,1,1,4 script Boss Creation#n FAKE_NPC,{
end;
OnInstanceInit:
disablenpc instance_npcname(strnpcinfo(0));
@@ -909,7 +909,7 @@ OnTouch:
}
//MD_Putmob "1@pump" 0 0 0 0 20 HYDRA 0 0 2
-1@pump,1,1,4 script Hydra#n -1,{
+1@pump,1,1,4 script Hydra#n FAKE_NPC,{
OnInstanceInit:
monster strnpcinfo(4),0,0,"Hydra",1068,20;
end;
@@ -1054,10 +1054,10 @@ OnTouch:
2@pump,100,74,4 duplicate(#Culvert_h1) #Culvert_h9 CLEAR_NPC,14,14
2@pump,115,50,4 duplicate(#Culvert_h1) #Culvert_h10 CLEAR_NPC,14,14
-2@pump,1,1,4 duplicate(Monster Hole#n) Monster Hole#h -1
-2@pump,1,1,4 duplicate(Boss Creation#n) Boss Creation#h -1
+2@pump,1,1,4 duplicate(Monster Hole#n) Monster Hole#h FAKE_NPC
+2@pump,1,1,4 duplicate(Boss Creation#n) Boss Creation#h FAKE_NPC
2@pump,39,88,4 duplicate(Missing, the Cleaner#no) Missing, the Cleaner#ho 4_CAT_SAILOR2
2@pump,38,100,0 duplicate(Culvert Entrance#n) Culvert Entrance#h WARPNPC,3,3
//MD_Putmob "2@pump" 0 0 0 0 20 HYDRA 0 0 2
-2@pump,1,1,4 duplicate(Hydra#n) Hydra#h -1
+2@pump,1,1,4 duplicate(Hydra#n) Hydra#h FAKE_NPC
diff --git a/npc/re/instances/OctopusCave.txt b/npc/re/instances/OctopusCave.txt
index 61f3e408d..da0df4ac6 100644
--- a/npc/re/instances/OctopusCave.txt
+++ b/npc/re/instances/OctopusCave.txt
@@ -189,7 +189,7 @@ OnTouch:
end;
}
-1@cash,1,1,0 script oct_enter_broad -1,{
+1@cash,1,1,0 script oct_enter_broad FAKE_NPC,{
end;
OnInstanceInit:
donpcevent instance_npcname("oct_enter_broad")+"::OnDisable";
@@ -216,7 +216,7 @@ OnTimer7000:
end;
}
-1@cash,3,3,0 script oct_foot_4 -1,{
+1@cash,3,3,0 script oct_foot_4 FAKE_NPC,{
end;
OnInstanceInit:
donpcevent instance_npcname("oct_foot_4")+"::OnDisable";
@@ -389,7 +389,7 @@ OnTouch:
1@cash,312,214,0 duplicate(oct_foot_exit1) oct_foot_exit3 WARPNPC,2,2
1@cash,370,139,0 duplicate(oct_foot_exit1) oct_foot_exit4 WARPNPC,2,2
-1@cash,15,15,0 script oct_mob_con -1,{
+1@cash,15,15,0 script oct_mob_con FAKE_NPC,{
end;
OnInstanceInit:
donpcevent instance_npcname("oct_mob_con")+"::OnDisable";
@@ -579,7 +579,7 @@ OnEnable:
end;
}
-1@cash,2,2,0 script oct_boss_con -1,{
+1@cash,2,2,0 script oct_boss_con FAKE_NPC,{
end;
OnInstanceInit:
donpcevent instance_npcname("oct_boss_con")+"::OnDisable";
@@ -654,7 +654,7 @@ OnMyMobDead:
end;
}
-1@cash,4,4,0 script oct_boss_foot -1,{
+1@cash,4,4,0 script oct_boss_foot FAKE_NPC,{
end;
OnInstanceInit:
donpcevent instance_npcname("oct_boss_foot")+"::OnDisable";
diff --git a/npc/re/instances/OldGlastHeim.txt b/npc/re/instances/OldGlastHeim.txt
index b59d6ca36..1807efa4c 100644
--- a/npc/re/instances/OldGlastHeim.txt
+++ b/npc/re/instances/OldGlastHeim.txt
@@ -455,7 +455,7 @@ OnTalk8:
}
//== Control Timer =========================================
-1@gl_k,0,0,0 script #talkinstance1 -1,{
+1@gl_k,0,0,0 script #talkinstance1 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#talkinstance1");
@@ -817,7 +817,7 @@ OnTouch:
//== Sector 1 Mobs =========================================
-1@gl_k,0,0,0 script #ghmemorialmob01 -1,{
+1@gl_k,0,0,0 script #ghmemorialmob01 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#ghmemorialmob01");
@@ -948,7 +948,7 @@ OnEnable:
end;
}
-1@gl_k,0,0,0 script #ghmemorialmob02 -1,{
+1@gl_k,0,0,0 script #ghmemorialmob02 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#ghmemorialmob02");
@@ -1036,7 +1036,7 @@ OnDisable:
2@gl_k,173,258,3 duplicate(Breathless Man#GHtramp1) Breathless Man#GHtramp32 4_M_DIEMAN,4,4
//== Sector 3 Mobs =========================================
-1@gl_k,0,0,0 script #ghmemorialmob03 -1,{
+1@gl_k,0,0,0 script #ghmemorialmob03 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#ghmemorialmob03");
@@ -1074,7 +1074,7 @@ OnMyMobDead:
}
//== 1st MVP ===============================================
-1@gl_k,0,0,0 script #ghmemorialmob04 -1,{
+1@gl_k,0,0,0 script #ghmemorialmob04 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#ghmemorialmob04");
@@ -1118,7 +1118,7 @@ OnTimer2000:
end;
}
-1@gl_k,0,0,0 script #controlGH3 -1,{
+1@gl_k,0,0,0 script #controlGH3 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#controlGH3");
@@ -1385,7 +1385,7 @@ OnEnable:
end;
}
-2@gl_k,0,0,0 script #controlGH4 -1,{
+2@gl_k,0,0,0 script #controlGH4 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#controlGH4");
@@ -1476,7 +1476,7 @@ OnTimer70000:
end;
}
-2@gl_k,0,0,0 script #ghmemorialmob05 -1,{
+2@gl_k,0,0,0 script #ghmemorialmob05 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#ghmemorialmob05");
@@ -1523,7 +1523,7 @@ OnMyMobDead:
end;
}
-2@gl_k,0,0,0 script #ghmemorialmob06 -1,{
+2@gl_k,0,0,0 script #ghmemorialmob06 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#ghmemorialmob06");
@@ -1564,7 +1564,7 @@ OnTimer92000:
end;
}
-2@gl_k,0,0,0 script #ghmemorialmob07 -1,{
+2@gl_k,0,0,0 script #ghmemorialmob07 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#ghmemorialmob07");
@@ -1585,7 +1585,7 @@ OnMyMobDead:
end;
}
-2@gl_k,0,0,0 script #ghmemorialmob08 -1,{
+2@gl_k,0,0,0 script #ghmemorialmob08 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#ghmemorialmob08");
@@ -1631,7 +1631,7 @@ OnMyMobDead:
end;
}
-2@gl_k,0,0,0 script #ghmemorialmob09 -1,{
+2@gl_k,0,0,0 script #ghmemorialmob09 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#ghmemorialmob09");
@@ -1652,7 +1652,7 @@ OnMyMobDead:
end;
}
-2@gl_k,0,0,0 script #ghmemorialmob10 -1,{
+2@gl_k,0,0,0 script #ghmemorialmob10 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#ghmemorialmob10");
@@ -1835,7 +1835,7 @@ OnEffect5:
end;
}
-2@gl_k,0,0,0 script #controlGH5 -1,{
+2@gl_k,0,0,0 script #controlGH5 FAKE_NPC,{
OnInstanceInit:
OnDisable:
disablenpc instance_npcname("#controlGH5");
diff --git a/npc/re/instances/WolfchevLaboratory.txt b/npc/re/instances/WolfchevLaboratory.txt
index 7adc07995..e9ae1c0af 100644
--- a/npc/re/instances/WolfchevLaboratory.txt
+++ b/npc/re/instances/WolfchevLaboratory.txt
@@ -1372,7 +1372,7 @@ lhz_dun03,239,78,1 script lhz_dun03_lhz_dun04 WARPNPC,1,1,{
lhz_dun04,244,61,1 warp lhz_dun04_lhz_dun03 1,1,lhz_dun03,240,75
//== Inside the Lab ========================================
-que_lhz,242,50,0 script #01Startpoint -1,3,3,{
+que_lhz,242,50,0 script #01Startpoint FAKE_NPC,3,3,{
end;
OnInit:
@@ -1582,7 +1582,7 @@ que_lhz,147,224,4 script Researcher#04 4_LGTSCIENCE,{
}
//== Warp to lhz_dun04 from Wolfchev's Lab =================
-que_lhz,148,251,0 script #Move2lab -1,12,0,{
+que_lhz,148,251,0 script #Move2lab FAKE_NPC,12,0,{
end;
OnTouch:
@@ -1598,7 +1598,7 @@ que_lhz,148,251,0 script #Move2lab -1,12,0,{
}
//== Event Controller ======================================
-que_lhz,1,1,0 script #Eventctrl -1,{
+que_lhz,1,1,0 script #Eventctrl FAKE_NPC,{
end;
OnEnable:
@@ -1662,14 +1662,14 @@ que_lhz,1,1,0 script #Eventctrl -1,{
killmonster "que_lhz", "#Eventctrl::OnMyMobDead";
}
-que_lhz,139,232,0 script #01 -1,{ end; }
-que_lhz,147,232,0 script #02 -1,{ end; }
-que_lhz,156,232,0 script #03 -1,{ end; }
-que_lhz,156,224,0 script #04 -1,{ end; }
-que_lhz,156,215,0 script #05 -1,{ end; }
-que_lhz,147,215,0 script #06 -1,{ end; }
-que_lhz,139,215,0 script #07 -1,{ end; }
-que_lhz,139,224,0 script #08 -1,{ end; }
+que_lhz,139,232,0 script #01 FAKE_NPC,{ end; }
+que_lhz,147,232,0 script #02 FAKE_NPC,{ end; }
+que_lhz,156,232,0 script #03 FAKE_NPC,{ end; }
+que_lhz,156,224,0 script #04 FAKE_NPC,{ end; }
+que_lhz,156,215,0 script #05 FAKE_NPC,{ end; }
+que_lhz,147,215,0 script #06 FAKE_NPC,{ end; }
+que_lhz,139,215,0 script #07 FAKE_NPC,{ end; }
+que_lhz,139,224,0 script #08 FAKE_NPC,{ end; }
//== Human Guinea pigs =====================================
que_lhz,140,231,1 script Human Guinea pig#01 CHEN,{
@@ -2260,7 +2260,7 @@ lhz_dun04,147,279,0 script Laboratory Entrance#memo CLEAR_NPC,{
}
//== The Lab No.2 ==========================================
-1@lhz,151,29,0 script #2_0 -1,1,1,{
+1@lhz,151,29,0 script #2_0 FAKE_NPC,1,1,{
end;
OnEnable:
@@ -2465,7 +2465,7 @@ lhz_dun04,147,279,0 script Laboratory Entrance#memo CLEAR_NPC,{
}
//== The Lab No.2 2_3 System ===============================
-1@lhz,151,48,0 script #2_3 -1,20,20,{
+1@lhz,151,48,0 script #2_3 FAKE_NPC,20,20,{
end;
OnInstanceInit:
@@ -2568,7 +2568,7 @@ lhz_dun04,147,279,0 script Laboratory Entrance#memo CLEAR_NPC,{
}
//== The Lab No.2 Valves ===================================
-- script bio4FLab2Valve -1,{
+- script bio4FLab2Valve FAKE_NPC,{
if (getpartyleader(getcharid(1),2) == getcharid(0)) {
progressbar "0xffff00", 20;
stopnpctimer;
@@ -2626,7 +2626,7 @@ lhz_dun04,147,279,0 script Laboratory Entrance#memo CLEAR_NPC,{
}
//== The Lab No.3 ==========================================
-1@lhz,84,28,0 script #3_0 -1,1,1,{
+1@lhz,84,28,0 script #3_0 FAKE_NPC,1,1,{
end;
OnEnable:
@@ -2824,7 +2824,7 @@ lhz_dun04,147,279,0 script Laboratory Entrance#memo CLEAR_NPC,{
}
//== The Lab No.4 ==========================================
-1@lhz,137,100,0 script #4_0 -1,1,1,{
+1@lhz,137,100,0 script #4_0 FAKE_NPC,1,1,{
end;
OnEnable:
@@ -2989,7 +2989,7 @@ lhz_dun04,147,279,0 script Laboratory Entrance#memo CLEAR_NPC,{
1@lhz,148,156,3 script Type_**Dree#boss16 4_M_DWARF,{ end; }
//== Bosses ================================================
-- script bio4FBoss -1,{
+- script bio4FBoss FAKE_NPC,{
end;
OnEnable:
diff --git a/npc/re/jobs/2e/kagerou_oboro.txt b/npc/re/jobs/2e/kagerou_oboro.txt
index 42b9b628a..f8b7803e5 100644
--- a/npc/re/jobs/2e/kagerou_oboro.txt
+++ b/npc/re/jobs/2e/kagerou_oboro.txt
@@ -1139,7 +1139,7 @@ function script F_KO_Survival_rps {
}
//- Templates -
-- script Sight#ko_trap -1,{
+- script Sight#ko_trap FAKE_NPC,{
callfunc "F_KO_Survival_mes", atoi(substr(strnpcinfo(2),3,4));
end;
OnTouch:
@@ -1160,7 +1160,7 @@ OnTouch:
end;
}
-- script Sight#ko_trap2 -1,{
+- script Sight#ko_trap2 FAKE_NPC,{
callfunc "F_KO_Survival_mes", atoi(substr(strnpcinfo(2),3,4));
end;
OnTouch:
@@ -1205,7 +1205,7 @@ OnTouch:
end;
}
-- script Sight#ko_heal -1,{
+- script Sight#ko_heal FAKE_NPC,{
callfunc "F_KO_Survival_mes", atoi(substr(strnpcinfo(2),3,4));
end;
OnTouch:
@@ -1223,7 +1223,7 @@ OnTouch:
end;
}
-- script Sight#ko_curse -1,{
+- script Sight#ko_curse FAKE_NPC,{
callfunc "F_KO_Survival_mes", atoi(substr(strnpcinfo(2),3,4));
end;
OnTouch:
@@ -1268,7 +1268,7 @@ OnTouch:
}
}
-- script Sight#ko_gravity -1,{
+- script Sight#ko_gravity FAKE_NPC,{
callfunc "F_KO_Survival_mes", atoi(substr(strnpcinfo(2),3,4));
end;
OnTouch:
diff --git a/npc/re/jobs/3-1/archbishop.txt b/npc/re/jobs/3-1/archbishop.txt
index f803d99f8..ee8a3872f 100644
--- a/npc/re/jobs/3-1/archbishop.txt
+++ b/npc/re/jobs/3-1/archbishop.txt
@@ -1001,7 +1001,7 @@ OnTouch:
end;
}
-- script #arch_1_01_0::archbjcq -1,{
+- script #arch_1_01_0::archbjcq FAKE_NPC,{
OnTouch:
if (countitem(ValkyrieA_Scroll)) {
delitem ValkyrieA_Scroll,1;
@@ -1048,7 +1048,7 @@ OnTouch:
end;
}
-- script #arch_redcell -1,{
+- script #arch_redcell FAKE_NPC,{
OnInit:
setcell "job3_arch02",276,290,280,294,cell_walkable,0;
setcell "job3_arch02",276,290,280,294,cell_shootable,0;
@@ -1350,7 +1350,7 @@ OnTouch:
end;
}
-- script #arch_2_02_0::archbjcq2 -1,{
+- script #arch_2_02_0::archbjcq2 FAKE_NPC,{
OnTouch:
if (countitem(ValkyrieB_Scroll)) {
delitem ValkyrieB_Scroll,1;
diff --git a/npc/re/jobs/3-1/guillotine_cross.txt b/npc/re/jobs/3-1/guillotine_cross.txt
index 88d7b9f9f..a780093f1 100644
--- a/npc/re/jobs/3-1/guillotine_cross.txt
+++ b/npc/re/jobs/3-1/guillotine_cross.txt
@@ -3056,7 +3056,7 @@ OnTimer5000:
end;
}
-- script #3rdgc_guard00 -1,{
+- script #3rdgc_guard00 FAKE_NPC,{
end;
OnInit:
OnDisable:
diff --git a/npc/re/jobs/3-1/ranger.txt b/npc/re/jobs/3-1/ranger.txt
index dd26786d2..e7c9981a2 100644
--- a/npc/re/jobs/3-1/ranger.txt
+++ b/npc/re/jobs/3-1/ranger.txt
@@ -1582,7 +1582,7 @@ OnTimer133000:
end;
}
-- script Egg Bomb#0 -1,{
+- script Egg Bomb#0 FAKE_NPC,{
OnInit:
disablenpc strnpcinfo(0);
end;
diff --git a/npc/re/jobs/3-1/warlock.txt b/npc/re/jobs/3-1/warlock.txt
index 981503f84..e068a963a 100644
--- a/npc/re/jobs/3-1/warlock.txt
+++ b/npc/re/jobs/3-1/warlock.txt
@@ -36,7 +36,7 @@
//= 1.4
//=========================================================================
-- script #distorted_space_ -1,{
+- script #distorted_space_ FAKE_NPC,{
OnTouch:
if (job_wl > 1) {
mes " - There is a strange distortion here - ";
@@ -799,7 +799,7 @@ OnDisable:
end;
}
-- script The chamber of magic#2 -1,{
+- script The chamber of magic#2 FAKE_NPC,{
OnInit:
disablenpc strnpcinfo(0);
end;
@@ -877,9 +877,9 @@ OnTimer305000:
stopnpctimer;
end;
}
-- duplicate(The chamber of magic#2) The chamber of magic#3 -1
+- duplicate(The chamber of magic#2) The chamber of magic#3 FAKE_NPC
-- script The chamber of magic#4 -1,{
+- script The chamber of magic#4 FAKE_NPC,{
OnInit:
disablenpc "The chamber of magic#4";
end;
@@ -944,7 +944,7 @@ OnTimer65000:
end;
}
-- script Hollow Stone#Warlock -1,{
+- script Hollow Stone#Warlock FAKE_NPC,{
OnInit:
disablenpc "Hollow Stone#Warlock";
end;
@@ -1024,7 +1024,7 @@ OnTimer607000:
end;
}
-- script Ebein#E1 -1,{
+- script Ebein#E1 FAKE_NPC,{
OnInit:
disablenpc "Ebein#E1";
end;
@@ -1047,7 +1047,7 @@ OnTimer6000:
end;
}
-- script Ebein#E2 -1,{
+- script Ebein#E2 FAKE_NPC,{
OnInit:
disablenpc "Ebein#E2";
end;
diff --git a/npc/re/jobs/3-2/genetic.txt b/npc/re/jobs/3-2/genetic.txt
index f74bcd31a..61d59c54a 100644
--- a/npc/re/jobs/3-2/genetic.txt
+++ b/npc/re/jobs/3-2/genetic.txt
@@ -963,7 +963,7 @@ job3_gen01,91,48,3 script Demi Calberine#gen 4_F_SCIENCE,{
}
}
-- script Scattered Stuff#gen -1,{
+- script Scattered Stuff#gen FAKE_NPC,{
if (job_gen > 62 && job_gen < 74) {
mes "- There are so many scattered things on the floor that the lab is in chaos. -";
next;
diff --git a/npc/re/jobs/3-2/sorcerer.txt b/npc/re/jobs/3-2/sorcerer.txt
index ba278fbd7..0c12d82f0 100644
--- a/npc/re/jobs/3-2/sorcerer.txt
+++ b/npc/re/jobs/3-2/sorcerer.txt
@@ -390,7 +390,7 @@ gef_tower,113,161,5 script Karacas 4_M_SAGE_A,{
close;
}
}
-- script Spirit Detecting Staff#0 -1,{
+- script Spirit Detecting Staff#0 FAKE_NPC,{
if (strnpcinfo(4) == "thor_v01") setarray .@id[0],990,994,6276,6278;
else if (strnpcinfo(4) == "ice_dun01") setarray .@id[0],991,995,6278,6276;
diff --git a/npc/re/jobs/3-2/wanderer.txt b/npc/re/jobs/3-2/wanderer.txt
index 24c06ed2e..105a43fd0 100644
--- a/npc/re/jobs/3-2/wanderer.txt
+++ b/npc/re/jobs/3-2/wanderer.txt
@@ -862,7 +862,7 @@ hu_fild05,342,130,5 script Dancer Kim#fild 4_F_CAPEGIRL,{
close;
}
-- script #fildshout00::wandererjcq -1,{
+- script #fildshout00::wandererjcq FAKE_NPC,{
OnTouch:
if (job_wan == 7) {
switch(rand(3)) {
@@ -1041,7 +1041,7 @@ OnInit:
end;
}
-- script #wander_xmas -1,{
+- script #wander_xmas FAKE_NPC,{
end;
OnInit:
disablenpc strnpcinfo(0);
diff --git a/npc/re/jobs/novice/academy.txt b/npc/re/jobs/novice/academy.txt
index 280547487..f98363fee 100644
--- a/npc/re/jobs/novice/academy.txt
+++ b/npc/re/jobs/novice/academy.txt
@@ -5630,7 +5630,7 @@ izlude_c,97,138,5 duplicate(Romantic Female#iz) Romantic Female#iz_c 4_F_SITDOWN
izlude_d,97,138,5 duplicate(Romantic Female#iz) Romantic Female#iz_d 4_F_SITDOWN
//- Manufacturing Maniac -
-izlude,93,143,3 script Manufacturing Maniac#0 -1,{
+izlude,93,143,3 script Manufacturing Maniac#0 FAKE_NPC,{
mes "[Manufacturing Maniac]";
mes "Hi~! I am an Alchemist.";
mes "It's one of the second jobs after Merchant.";
@@ -6424,7 +6424,7 @@ pay_fild08,153,83,1 script Lady Harvesting Herbs#2 1_F_ORIENT_02,{
}
//- Signs -
-- script ::ac_board -1,{
+- script ::ac_board FAKE_NPC,{
end;
}
@@ -12620,7 +12620,7 @@ izlude_c,153,126,1 duplicate(Refinery Owner Han#iz) Refinery Owner Han#iz_c 4_M_
izlude_d,153,126,1 duplicate(Refinery Owner Han#iz) Refinery Owner Han#iz_d 4_M_02
//- Refining Machine Wagjak -
-- script ::izludeWagjak -1,{
+- script ::izludeWagjak FAKE_NPC,{
disable_items;
mes "[Refining Machine Wagjak]";
mes "-Ddarritt!-";
diff --git a/npc/re/jobs/novice/novice.txt b/npc/re/jobs/novice/novice.txt
index 4d8ff77f4..e98fff417 100644
--- a/npc/re/jobs/novice/novice.txt
+++ b/npc/re/jobs/novice/novice.txt
@@ -36,7 +36,7 @@
//=========================================================================
//== Main NPCs =============================================
-- script Sprakki#newbe01::NvSprakkiA -1,{
+- script Sprakki#newbe01::NvSprakkiA FAKE_NPC,{
if (job_novice_q == 0) {
mes "[Sprakki]";
mes "Hello there! Welcome to the World of Ragnarok Online. My name is Sprakki and I'm in charge of giving you basic gameplay tips.";
@@ -98,7 +98,7 @@ new_3-1,53,114,3 duplicate(NvSprakkiA) Sprakki#nv3a 4_F_01
new_4-1,53,114,3 duplicate(NvSprakkiA) Sprakki#nv4a 4_F_01
new_5-1,53,114,3 duplicate(NvSprakkiA) Sprakki#nv5a 4_F_01
-- script Sprakki#newbe05::NvSprakkiB -1,{
+- script Sprakki#newbe05::NvSprakkiB FAKE_NPC,{
if (job_novice_q == 0) {
mes "[Sprakki]";
mes "Hello there! Welcome to the World of Ragnarok Online.";
@@ -229,7 +229,7 @@ new_3-2,100,29,4 duplicate(NvSprakkiB) Sprakki#nv3b 4_F_01
new_4-2,100,29,4 duplicate(NvSprakkiB) Sprakki#nv4b 4_F_01
new_5-2,100,29,4 duplicate(NvSprakkiB) Sprakki#nv5b 4_F_01
-- script Brade#newbe02::NvBradeA -1,{
+- script Brade#newbe02::NvBradeA FAKE_NPC,{
if (job_novice_q < 2) {
mes "[Instructor Brade]";
mes "Hello there! Welcome to the World of Ragnarok Online.";
@@ -499,7 +499,7 @@ new_3-2,100,105,3 duplicate(NvBradeA) Brade#nv3a 4_M_JOB_KNIGHT1
new_4-2,100,105,3 duplicate(NvBradeA) Brade#nv4a 4_M_JOB_KNIGHT1
new_5-2,100,105,3 duplicate(NvBradeA) Brade#nv5a 4_M_JOB_KNIGHT1
-- script Jinha#newbe03::NvJinha -1,{
+- script Jinha#newbe03::NvJinha FAKE_NPC,{
if (job_novice_q < 5) {
mes "[Jinha]";
mes "What can I help you with?";
@@ -595,7 +595,7 @@ new_4-2,115,120,3 duplicate(NvJinha) Jinha#nv4 1_M_ORIENT01
new_5-2,115,120,3 duplicate(NvJinha) Jinha#nv5 1_M_ORIENT01
//== People/Services in Ragnarok ===========================
-- script Chocolat#newbe06::NvChocolat -1,{
+- script Chocolat#newbe06::NvChocolat FAKE_NPC,{
if (job_novice_q < 7) {
mes "[Chocolat]";
mes "Hmm? Strange.";
@@ -777,7 +777,7 @@ new_3-2,33,172,4 duplicate(NvChocolat) Chocolat#nv3 4W_KID
new_4-2,33,172,4 duplicate(NvChocolat) Chocolat#nv4 4W_KID
new_5-2,33,172,4 duplicate(NvChocolat) Chocolat#nv5 4W_KID
-- script Kafra Employee#newbe07::NvKafra -1,{
+- script Kafra Employee#newbe07::NvKafra FAKE_NPC,{
if (job_novice_q < 8) {
mes "[Kafra Employee]";
mes "Hello.";
@@ -1021,7 +1021,7 @@ new_3-2,30,176,4 duplicate(NvKafra) Kafra Employee#nv3 4_F_KAFRA1
new_4-2,30,176,4 duplicate(NvKafra) Kafra Employee#nv4 4_F_KAFRA1
new_5-2,30,176,4 duplicate(NvKafra) Kafra Employee#nv5 4_F_KAFRA1
-- script Cool Event Corp. Staff::NvCool -1,{
+- script Cool Event Corp. Staff::NvCool FAKE_NPC,{
if (job_novice_q < 9) {
mes "[Cool Event Corp. Staff]";
mes "This is not my turn.";
@@ -1061,7 +1061,7 @@ new_3-2,33,176,4 duplicate(NvCool) Cool Event Corp. Staff::NvCool3 4_M_ZONDAMAN
new_4-2,33,176,4 duplicate(NvCool) Cool Event Corp. Staff::NvCool4 4_M_ZONDAMAN
new_5-2,33,176,4 duplicate(NvCool) Cool Event Corp. Staff::NvCool5 4_M_ZONDAMAN
-- script Guide::NvGuide -1,{
+- script Guide::NvGuide FAKE_NPC,{
if (job_novice_q < 10) {
mes "[Guide]";
mes "It ain't my turn yet.";
@@ -1116,7 +1116,7 @@ new_4-2,36,176,4 duplicate(NvGuide) Guide#nv4 8W_SOLDIER
new_5-2,36,176,4 duplicate(NvGuide) Guide#nv5 8W_SOLDIER
//== Real Combat Training ==================================
-- script Brade#newbe04::NvBradeB -1,{
+- script Brade#newbe04::NvBradeB FAKE_NPC,{
if (job_novice_q < 12) {
if (job_novice_q < 2) {
mes "[Brade]";
@@ -1328,7 +1328,7 @@ new_3-3,96,30,4 duplicate(NvBradeB) Brade#nv3b 4_M_JOB_KNIGHT1
new_4-3,96,30,4 duplicate(NvBradeB) Brade#nv4b 4_M_JOB_KNIGHT1
new_5-3,96,30,4 duplicate(NvBradeB) Brade#nv5b 4_M_JOB_KNIGHT1
-- script Swordman Guide#newbe10::NvSwordman -1,{
+- script Swordman Guide#newbe10::NvSwordman FAKE_NPC,{
if (job_novice_q < 15) {
mes "[Swordman Guildsman]";
mes "I won't help you until you finish Brade's instructions.";
@@ -1488,7 +1488,7 @@ new_3-3,97,41,3 duplicate(NvSwordman) Swordman Guide#nv3 4_F_JOB_KNIGHT
new_4-3,97,41,3 duplicate(NvSwordman) Swordman Guide#nv4 4_F_JOB_KNIGHT
new_5-3,97,41,3 duplicate(NvSwordman) Swordman Guide#nv5 4_F_JOB_KNIGHT
-- script Acolyte Guide#newbe10::NvAcolyte -1,{
+- script Acolyte Guide#newbe10::NvAcolyte FAKE_NPC,{
if (job_novice_q < 15) {
mes "[Prontera Acolyte]";
mes "You look like you are not done with Instructor Brade's lessons.";
@@ -1578,7 +1578,7 @@ new_3-3,101,41,3 duplicate(NvAcolyte) Acolyte Guide#nv3 4_F_SISTER
new_4-3,101,41,3 duplicate(NvAcolyte) Acolyte Guide#nv4 4_F_SISTER
new_5-3,101,41,3 duplicate(NvAcolyte) Acolyte Guide#nv5 4_F_SISTER
-- script Thief Guide#newbe10::NvThief -1,{
+- script Thief Guide#newbe10::NvThief FAKE_NPC,{
if (job_novice_q < 15) {
mes "[Thief Guild Member]";
mes "You look like you are not done with Instructor Brade's lessons.";
@@ -1715,7 +1715,7 @@ new_3-3,105,41,3 duplicate(NvThief) Thief Guide#nv3 2_M_THIEFMASTER
new_4-3,105,41,3 duplicate(NvThief) Thief Guide#nv4 2_M_THIEFMASTER
new_5-3,105,41,3 duplicate(NvThief) Thief Guide#nv5 2_M_THIEFMASTER
-- script Merchant Guide#newbe10::NvMerchant -1,{
+- script Merchant Guide#newbe10::NvMerchant FAKE_NPC,{
if (job_novice_q < 15) {
mes "[Merchant Guildsman]";
mes "You are still in the process of training with sir Brad.";
@@ -1871,7 +1871,7 @@ new_3-3,109,41,3 duplicate(NvMerchant) Merchant Guide#nv3 4W_M_01
new_4-3,109,41,3 duplicate(NvMerchant) Merchant Guide#nv4 4W_M_01
new_5-3,109,41,3 duplicate(NvMerchant) Merchant Guide#nv5 4W_M_01
-- script Archer Guide#newbe10::NvArcher -1,{
+- script Archer Guide#newbe10::NvArcher FAKE_NPC,{
if (job_novice_q < 15) {
mes "[Archer Guildsman]";
mes "You are still in the process of training with sir Brade.";
@@ -1968,7 +1968,7 @@ new_3-3,113,41,3 duplicate(NvArcher) Archer Guide#nv3 4_F_JOB_HUNTER
new_4-3,113,41,3 duplicate(NvArcher) Archer Guide#nv4 4_F_JOB_HUNTER
new_5-3,113,41,3 duplicate(NvArcher) Archer Guide#nv5 4_F_JOB_HUNTER
-- script Mage Guide#newbe10::NvMage -1,{
+- script Mage Guide#newbe10::NvMage FAKE_NPC,{
if (job_novice_q < 15) {
mes "[Mage Guild Member]";
mes "You are still in the process of training with Instructor Brade.";
@@ -2118,7 +2118,7 @@ new_3-3,117,41,3 duplicate(NvMage) Mage Guide#nv3 2_F_MAGICMASTER
new_4-3,117,41,3 duplicate(NvMage) Mage Guide#nv4 2_F_MAGICMASTER
new_5-3,117,41,3 duplicate(NvMage) Mage Guide#nv5 2_F_MAGICMASTER
-- script Bruce#nv::NvBruce -1,{
+- script Bruce#nv::NvBruce FAKE_NPC,{
mes "[Bruce]";
mes "Hello?";
mes "I'm here to guide you about extra jobs and special classes.";
@@ -2183,7 +2183,7 @@ new_5-3,121,41,3 duplicate(NvBruce) Bruce#nv5 1_M_LIBRARYMASTER
//== Eden Group Officer (iRO only) =========================
/*
-- script Eden Group Officer::NvEden -1,{
+- script Eden Group Officer::NvEden FAKE_NPC,{
if (BaseLevel < 10) {
mes "[Eden Group Officer]";
mes "Hello, I am a representative of the Eden Group.";
@@ -2292,7 +2292,7 @@ new_5-3,97,50,4 duplicate(NvEden) Eden Group Officer#nv5 4_F_NOVICE,5,5
*/
//== Trainer ===============================================
-- script ::NvBrutus -1,{
+- script ::NvBrutus FAKE_NPC,{
mes "[Trainer Brutus]";
mes "These monsters are all weak and easy to kill. But be careful, a lot of them are aggressive and out for blood!";
next;
@@ -2389,7 +2389,7 @@ new_4-3,100,50,3 duplicate(NvPotato) Potato Merchant#nv4 4_F_04
new_5-3,100,50,3 duplicate(NvPotato) Potato Merchant#nv5 4_F_04
//== Random Stuff ==========================================
-- script Bulletin Board::NvBulletin -1,{
+- script Bulletin Board::NvBulletin FAKE_NPC,{
mes "^FF0000=================================";
mes " ^E40CAA[Welcome] ^CC0000to^FF9000Novice^7FFF00 Training^00FF00 Grounds^E40CAA [Welcome] ";
mes "^FF0000=================================^000000";
@@ -2401,7 +2401,7 @@ new_3-1,66,114,4 duplicate(NvBulletin) Bulletin Board#nv3 HIDDEN_NPC
new_4-1,66,114,4 duplicate(NvBulletin) Bulletin Board#nv4 HIDDEN_NPC
new_5-1,66,114,4 duplicate(NvBulletin) Bulletin Board#nv5 HIDDEN_NPC
-- script Guard::NvGuardA -1,{
+- script Guard::NvGuardA FAKE_NPC,{
mes "[Training Grounds Guard]";
mes "Welcome to the Training Grounds.";
mes "You are now in the outer court yard. Please go inside the castle to begin your training.";
@@ -2413,7 +2413,7 @@ new_3-1,144,116,2 duplicate(NvGuardA) Guard#nv3a 8W_SOLDIER
new_4-1,144,116,2 duplicate(NvGuardA) Guard#nv4a 8W_SOLDIER
new_5-1,144,116,2 duplicate(NvGuardA) Guard#nv5a 8W_SOLDIER
-- script Guard::NvGuardB -1,{
+- script Guard::NvGuardB FAKE_NPC,{
mes "[Training Grounds Guard]";
if (rand(2)) {
mes "Come in! I would like to welcome you to the Training Grounds!";
@@ -2430,7 +2430,7 @@ new_3-1,144,107,2 duplicate(NvGuardB) Guard#nv3b 8W_SOLDIER
new_4-1,144,107,2 duplicate(NvGuardB) Guard#nv4b 8W_SOLDIER
new_5-1,144,107,2 duplicate(NvGuardB) Guard#nv5b 8W_SOLDIER
-- script Instructor#Edwin::NvEdwin -1,{
+- script Instructor#Edwin::NvEdwin FAKE_NPC,{
mes "[Edwin]";
mes "Eh? Why are you still here?";
mes "There are no more courses that you need to take.";
@@ -2468,7 +2468,7 @@ function script F_NvErase {
}
//== Pre-Renewal Backwards Compatibility ===================
-- script Final Tester::NvHanson -1,{
+- script Final Tester::NvHanson FAKE_NPC,{
if (nov_3_swordman < 40) {
mes "[Hanson]";
mes "Eh? Weird?";
@@ -2667,7 +2667,7 @@ new_4-4,100,29,1 duplicate(NvHanson) Final Tester#nv4 1_ETC_01
new_5-4,100,29,1 duplicate(NvHanson) Final Tester#nv5 1_ETC_01
//== Job Test ==============================================
-- script Job Guide Lark::NvLark -1,{
+- script Job Guide Lark::NvLark FAKE_NPC,{
mes "[Lark]";
mes "Have you decided what job you're going to choose?";
next;
diff --git a/npc/re/jobs/repair.txt b/npc/re/jobs/repair.txt
index 200fbf760..fc212aef3 100644
--- a/npc/re/jobs/repair.txt
+++ b/npc/re/jobs/repair.txt
@@ -225,7 +225,7 @@ L_Third:
return;
}
-- script Valerie#sign -1,{
+- script Valerie#sign FAKE_NPC,{
mes "^ff00ffI couldn't pay the office rent so I am temporarily relocating to the building across from the Prontera Refinery.^000000";
mes " ";
mes "^ff00ffValerie^000000";
diff --git a/npc/re/merchants/3rd_trader.txt b/npc/re/merchants/3rd_trader.txt
index 83c73ad5b..a0a3bb033 100644
--- a/npc/re/merchants/3rd_trader.txt
+++ b/npc/re/merchants/3rd_trader.txt
@@ -32,11 +32,11 @@
//= Sells some 3rd Job related items:
//= - Poison Herbs, Rune Stones, Rare Herbs, Points
//================= Current Version =======================================
-//= 1.5
+//= 1.6
//=========================================================================
//== Poison Herb Merchants (Guillotine Cross) ==============
-- script ::phs -1,{
+- script ::phs FAKE_NPC,{
if (checkweight(Knife,1) == 0 || MaxWeight - Weight < 2000) {
mes "- Wait a minute !! -";
mes "- Currently you're carrying -";
@@ -97,11 +97,11 @@
close;
}
job3_guil01,79,96,3 duplicate(phs) Poison Herb Merchant 4_F_YUNYANG
-morocc,191,94,4 duplicate(phs) Poison Herb Merchant#moc 4_F_YUNYANG //Official: (190,96) -> in a wall
+morocc,193,100,4 duplicate(phs) Poison Herb Merchant#moc 4_F_YUNYANG
lhz_in02,16,205,4 duplicate(phs) Poison Herb Merchant#lhz 4_F_YUNYANG
//== Rune Stone Merchants (Rune Knight) ====================
-- script ::runesale -1,{
+- script ::runesale FAKE_NPC,{
if (checkweight(Knife,1) == 0 || MaxWeight - Weight < 2000) {
mes "- Wait a minute !! -";
mes "- Currently you're carrying -";
@@ -230,7 +230,7 @@ job3_guil01,91,93,3 script Rare Herb Collector 1_M_03,{
}
//== Point Merchants (Sorcerer) ============================
-- script ::pss -1,{
+- script ::pss FAKE_NPC,{
if (checkweight(Knife,1) == 0 || MaxWeight - Weight < 2000) {
mes "- Wait a minute !! -";
mes "- Currently you're carrying -";
diff --git a/npc/re/merchants/blessed_refiner.txt b/npc/re/merchants/blessed_refiner.txt
index 3f609f5e7..33005dca9 100644
--- a/npc/re/merchants/blessed_refiner.txt
+++ b/npc/re/merchants/blessed_refiner.txt
@@ -37,7 +37,7 @@
//= 1.0
//=========================================================================
-- script ::BlacksmithDister -1,{
+- script ::BlacksmithDister FAKE_NPC,{
disable_items;
mes "[Blacksmith Dister]";
mes "In this highly competitive society, we must be different in order to survive!";
diff --git a/npc/re/merchants/card_separation.txt b/npc/re/merchants/card_separation.txt
index ecd4f1fdd..0bf72f884 100644
--- a/npc/re/merchants/card_separation.txt
+++ b/npc/re/merchants/card_separation.txt
@@ -33,7 +33,7 @@
//= 1.1
//=========================================================================
-- script ::CardSeparation_mal -1,{
+- script ::CardSeparation_mal FAKE_NPC,{
disable_items;
if (checkweight(Knife,1) == 0) {
mes "You have too many kinds of objects. Let's try to continue after reducing those objects.";
diff --git a/npc/re/merchants/flute.txt b/npc/re/merchants/flute.txt
index 9a2736fb1..0824515f1 100644
--- a/npc/re/merchants/flute.txt
+++ b/npc/re/merchants/flute.txt
@@ -35,7 +35,7 @@
//= 1.2a
//=========================================================================
-- script Falcon Flute Trader::fflute -1,{
+- script Falcon Flute Trader::fflute FAKE_NPC,{
mes "[Falcon Flute Trader]";
if (BaseJob == Job_Hunter) {
mes "Do you need a Falcon?";
diff --git a/npc/re/merchants/hd_refiner.txt b/npc/re/merchants/hd_refiner.txt
index e1a7a8b70..261093136 100644
--- a/npc/re/merchants/hd_refiner.txt
+++ b/npc/re/merchants/hd_refiner.txt
@@ -38,7 +38,7 @@
//=========================================================================
//== Blacksmith Mighty Hammer (+7~9) =======================
-- script ::MightyHammer -1,{
+- script ::MightyHammer FAKE_NPC,{
disable_items;
mes "[Blacksmith Mighty Hammer]";
mes "Unlike others, I am a blacksmith who refines a very limited number of items.";
@@ -173,7 +173,7 @@ lhz_in02,280,19,3 duplicate(MightyHammer) Mighty Hammer#lhz 4_M_DWARF
//payon,174,133,4 duplicate(MightyHammer) Mighty Hammer#im 4_M_DWARF
//== Basta (+10 and up) ====================================
-- script ::Basta -1,{
+- script ::Basta FAKE_NPC,{
disable_items;
mes "[Basta]";
mes "I'm the best Blacksmith in the whole world, Basta.";
diff --git a/npc/re/merchants/refine.txt b/npc/re/merchants/refine.txt
index db42f01cf..6014d2a85 100644
--- a/npc/re/merchants/refine.txt
+++ b/npc/re/merchants/refine.txt
@@ -348,7 +348,7 @@ function script refinenew {
}
//== Ori/Elu to Carnium/Bradium Refiners ===================
-- script Austri#ref -1,{
+- script Austri#ref FAKE_NPC,{
if (checkweight(Knife,1) == 0) {
mes "- Wait a minute !! -";
mes "- Currently you're carrying -";
diff --git a/npc/re/merchants/renters.txt b/npc/re/merchants/renters.txt
index f0d308f1e..a8df22079 100644
--- a/npc/re/merchants/renters.txt
+++ b/npc/re/merchants/renters.txt
@@ -167,7 +167,7 @@ prontera,125,208,5 script Peco Peco Remover 8W_SOLDIER,{
}
//== Magic Gear Renter =====================================
-- script ::mgm -1,{
+- script ::mgm FAKE_NPC,{
mes "[Magic Gear Master]";
if (Class == Job_Mechanic || Class == Job_Mechanic_T || Class == Job_Baby_Mechanic) {
mes "Welcome, Mechanic.";
diff --git a/npc/re/merchants/shops.txt b/npc/re/merchants/shops.txt
index 83ae07d3e..773fddef8 100644
--- a/npc/re/merchants/shops.txt
+++ b/npc/re/merchants/shops.txt
@@ -36,7 +36,7 @@
//================= Description ===========================================
//= Renewal-specific town shop NPCs.
//================= Current Version =======================================
-//= 1.9
+//= 2.1
//=========================================================================
//== Comodo ================================================
@@ -410,6 +410,44 @@ OnInit:
}
*/
+prt_in,126,76,0 trader Tool Dealer#prt1 1_M_INNKEEPER,{
+OnInit:
+ sellitem Spectacles;
+ sellitem Arrow;
+ sellitem Red_Potion;
+ sellitem Orange_Potion;
+ sellitem Yellow_Potion;
+ sellitem White_Potion;
+ sellitem Center_Potion;
+ sellitem Awakening_Potion;
+ sellitem Empty_Bottle;
+ sellitem Wing_Of_Fly;
+ sellitem Wing_Of_Butterfly;
+ sellitem Booby_Trap;
+}
+
+prt_in,117,79,5 trader Toy Supplier#prt 4_M_PIERROT,{
+OnInit:
+ sellitem One_Eyed_Glass;
+ sellitem Sunglasses;
+ sellitem Spinning_Eyes;
+ sellitem Eye_Bandage;
+ sellitem Luxury_Sunglasses;
+ sellitem Granpa_Beard;
+}
+
+prt_fild05,290,221,2 trader Tool Dealer#prt 4_M_01,{
+OnInit:
+ sellitem Arrow;
+ sellitem Spectacles;
+ sellitem Red_Potion;
+ sellitem Orange_Potion;
+ sellitem Center_Potion;
+ sellitem Empty_Bottle;
+ sellitem Wing_Of_Fly;
+ sellitem Wing_Of_Butterfly;
+}
+
prt_in,109,68,4 trader Trap Specialist#prt 1_F_01,{
OnInit:
sellitem Special_Alloy_Trap;
@@ -471,6 +509,241 @@ OnInit:
sellitem Charm_Earth;
}
+prontera,218,211,4 trader Pet Groomer#prt 4_M_TELEPORTER,{
+OnInit:
+ sellitem Pet_Food;
+ sellitem Pet_Incubator;
+ sellitem Backpack;
+ sellitem Rocker_Glasses;
+ sellitem Vital_Flower_;
+ sellitem Flame_Gemstone;
+ sellitem Bun_;
+ sellitem Vital_Flower;
+ sellitem Damp_Darkness;
+ sellitem Small_Snow_Flower;
+ sellitem Fresh_Plant;
+ sellitem Big_Cell;
+ sellitem Apple_Pudding;
+ sellitem Mystic_Stone;
+ sellitem Flavored_Alcohol;
+ sellitem Spirit_Liquor;
+ sellitem Pumpkin_Pie_;
+ sellitem Sunset_On_The_Rock;
+ sellitem Morning_Dew;
+ sellitem Grilled_Rice_Cake;
+}
+
+prontera,92,209,4 trader Rebellion Weapon Vending 2_VENDING_MACHINE1,{
+OnInit:
+ sellitem Heaven's_Feather_and_Hell's_Fire;
+ sellitem Altea_and_Ares;
+ sellitem Color_Scope;
+ sellitem RAG203;
+ sellitem Death_Fire;
+ sellitem Rolling_Thunder;
+ sellitem Peace_Breaker;
+ sellitem Mini_Mei;
+ sellitem Tempest;
+ sellitem End_Of_The_Horizon;
+ sellitem South_Cross;
+}
+
+prontera,96,209,4 trader Rebellion Prop Vending 2_VENDING_MACHINE1,{
+OnInit:
+ sellitem Slug_Ammunition_L;
+ sellitem Slug_Ammunition_M;
+ sellitem Slug_Ammunition_H;
+ sellitem Full_Metal_Jacket;
+ sellitem Projection_Landmines;
+ sellitem Dragon_Tail_Missile;
+ sellitem Special_Alloy_Trap;
+ sellitem Bullet;
+ sellitem Silver_Bullet_;
+ sellitem Shell_Of_Blood_;
+ sellitem Armor_Piercing_Bullet;
+ sellitem Blazing_Bullet;
+ sellitem Freezing_Bullet;
+ sellitem Lightning_Bullet;
+ sellitem Magic_Stone_Bullet;
+ sellitem Purifying_Bullet;
+ sellitem Incendiary_Grenade;
+ sellitem Lightning_Grenade;
+ sellitem Poison_Grenade;
+ sellitem Flash_Grenade;
+ sellitem Cyro_Grenade;
+}
+
+//== Morroc ===============================================
+morocc,156,76,4 trader Butcher#moc1 1_M_MERCHANT,{
+OnInit:
+ sellitem Meat;
+}
+
+moc_ruins,91,128,4 trader Tool Dealer#moc1 4_F_04,{
+OnInit:
+ sellitem Arrow;
+ sellitem Spectacles;
+ sellitem Red_Potion;
+ sellitem Orange_Potion;
+ sellitem Yellow_Potion;
+ sellitem White_Potion;
+ sellitem Center_Potion;
+ sellitem Awakening_Potion;
+ sellitem Empty_Bottle;
+ sellitem Wing_Of_Fly;
+ sellitem Wing_Of_Butterfly;
+ sellitem Booby_Trap;
+}
+
+moc_ruins,114,63,6 trader Tool Dealer#moc2 4W_M_03,{
+OnInit:
+ sellitem Arrow;
+ sellitem Spectacles;
+ sellitem Red_Potion;
+ sellitem Orange_Potion;
+ sellitem Yellow_Potion;
+ sellitem White_Potion;
+ sellitem Center_Potion;
+ sellitem Awakening_Potion;
+ sellitem Empty_Bottle;
+ sellitem Wing_Of_Fly;
+ sellitem Wing_Of_Butterfly;
+ sellitem Booby_Trap;
+}
+
+morocc,147,103,6 trader Tool Dealer#moc3 4W_M_03,{
+OnInit:
+ sellitem Arrow;
+ sellitem Spectacles;
+ sellitem Red_Potion;
+ sellitem Orange_Potion;
+ sellitem Yellow_Potion;
+ sellitem White_Potion;
+ sellitem Center_Potion;
+ sellitem Awakening_Potion;
+ sellitem Empty_Bottle;
+ sellitem Wing_Of_Fly;
+ sellitem Wing_Of_Butterfly;
+ sellitem Booby_Trap;
+}
+
+morocc,151,241,4 trader Tool Dealer#moc4 4_F_04,{
+OnInit:
+ sellitem Arrow;
+ sellitem Spectacles;
+ sellitem Red_Potion;
+ sellitem Orange_Potion;
+ sellitem Yellow_Potion;
+ sellitem White_Potion;
+ sellitem Center_Potion;
+ sellitem Awakening_Potion;
+ sellitem Empty_Bottle;
+ sellitem Wing_Of_Fly;
+ sellitem Wing_Of_Butterfly;
+ sellitem Booby_Trap;
+}
+
+moc_ruins,118,170,4 trader Pet Groomer#moc 4_M_TELEPORTER,{
+OnInit:
+ sellitem Pet_Food;
+ sellitem Pet_Incubator;
+ sellitem Backpack;
+ sellitem Rocker_Glasses;
+ sellitem Vital_Flower_;
+ sellitem Flame_Gemstone;
+ sellitem Bun_;
+ sellitem Vital_Flower;
+ sellitem Damp_Darkness;
+ sellitem Small_Snow_Flower;
+ sellitem Fresh_Plant;
+ sellitem Big_Cell;
+ sellitem Apple_Pudding;
+ sellitem Mystic_Stone;
+ sellitem Flavored_Alcohol;
+ sellitem Spirit_Liquor;
+ sellitem Pumpkin_Pie_;
+ sellitem Sunset_On_The_Rock;
+ sellitem Morning_Dew;
+ sellitem Grilled_Rice_Cake;
+}
+
+morocc,203,87,4 trader Pet Groomer#moc1 4_M_TELEPORTER,{
+OnInit:
+ sellitem Pet_Food;
+ sellitem Pet_Incubator;
+ sellitem Backpack;
+ sellitem Rocker_Glasses;
+ sellitem Vital_Flower_;
+ sellitem Flame_Gemstone;
+ sellitem Bun_;
+ sellitem Vital_Flower;
+ sellitem Damp_Darkness;
+ sellitem Small_Snow_Flower;
+ sellitem Fresh_Plant;
+ sellitem Big_Cell;
+ sellitem Apple_Pudding;
+ sellitem Mystic_Stone;
+ sellitem Flavored_Alcohol;
+ sellitem Spirit_Liquor;
+ sellitem Pumpkin_Pie_;
+ sellitem Sunset_On_The_Rock;
+ sellitem Morning_Dew;
+ sellitem Grilled_Rice_Cake;
+}
+
+morocc,154,55,6 trader Jeweler#moc3 4W_M_03,{
+OnInit:
+ sellitem Crystal_Jewel;
+ sellitem Diamond_Ring;
+}
+
+morocc,171,103,4 trader Item Collector#moc3 4_M_03,{
+OnInit:
+ sellitem Scell;
+ sellitem Monster's_Feed;
+ sellitem Animal's_Skin;
+ sellitem Bill_Of_Birds;
+}
+
+morocc,205,247,2 trader Item Collector#moc4 4_M_03,{
+OnInit:
+ sellitem Scell;
+ sellitem Monster's_Feed;
+ sellitem Animal's_Skin;
+ sellitem Bill_Of_Birds;
+}
+
+morocc,140,90,6 trader Trader#moc6 4W_M_03,{
+OnInit:
+ sellitem Banana;
+}
+
+morocc,166,54,2 trader Jeweler#moc4 8_F,{
+OnInit:
+ sellitem Azure_Jewel;
+ sellitem Cardinal_Jewel;
+ sellitem Blue_Jewel;
+ sellitem Golden_Jewel;
+ sellitem Bluish_Green_Jewel;
+}
+
+morocc,34,68,0 trader Trader#moc7 4_F_04,{
+OnInit:
+ sellitem Witherless_Rose;
+}
+
+morocc,269,193,4 trader Trader#moc8 4_M_ORIENT02,{
+OnInit:
+ sellitem Skul_Ring;
+ sellitem Sword_Mace;
+ sellitem Stunner;
+}
+
+morocc,256,191,5 trader Trader#moc9 4_F_04,{
+OnInit:
+ sellitem Flower_Ring;
+}
+
//== Rachel ================================================
ra_in01,263,281,4 trader Trap Specialist#ra 1_F_01,{
OnInit:
@@ -509,3 +782,47 @@ OnInit:
sellitem Surface_Paint;
sellitem Face_Paint;
}
+
+//== Cooking Addition ======================================
+prontera,156,212,1 trader Chef Assistant#prt 8_F_GIRL,{
+OnInit:
+ sellitem Combination_Kit;
+ sellitem Mushroom;
+ sellitem Pot;
+ sellitem Bread;
+ sellitem Grain;
+ sellitem Cooking_Oil;
+ sellitem Plain_Sauce;
+ sellitem Hot_Sauce;
+ sellitem Sweet_Sauce;
+ sellitem Red_Spice;
+ sellitem Yellow_Spice;
+ sellitem Delicious_Fish;
+ sellitem Outdoor_Cooking_Kits;
+ sellitem Indoor_Cooking_Kits;
+ sellitem High_end_Cooking_Kits;
+ sellitem Cookbook01;
+ sellitem Cookbook02;
+ sellitem Cookbook03;
+ sellitem Cookbook04;
+ sellitem Cookbook05;
+}
+
+moc_ruins,115,123,5 trader Chef Assistant#moc 4_M_04,{
+OnInit:
+ sellitem Combination_Kit;
+ sellitem Mushroom;
+ sellitem Pot;
+ sellitem Bread;
+ sellitem Grain;
+ sellitem Cooking_Oil;
+ sellitem Plain_Sauce;
+ sellitem Hot_Sauce;
+ sellitem Sweet_Sauce;
+ sellitem Red_Spice;
+ sellitem Yellow_Spice;
+ sellitem Delicious_Fish;
+ sellitem Outdoor_Cooking_Kits;
+ sellitem Indoor_Cooking_Kits;
+ sellitem High_end_Cooking_Kits;
+}
diff --git a/npc/re/mobs/dungeons/lhz_dun.txt b/npc/re/mobs/dungeons/lhz_dun.txt
index 0594f1030..7ec6e6c49 100644
--- a/npc/re/mobs/dungeons/lhz_dun.txt
+++ b/npc/re/mobs/dungeons/lhz_dun.txt
@@ -79,7 +79,7 @@ lhz_dun03,139,117,20,11 monster Sniper Cecil 1644,1,2700000,2500000,1
lhz_dun03,163,138,12,16 monster Whitesmith Howard 1642,1,3000000,2700000,1
lhz_dun03,138,138,36,34 monster High Priest Margaretha 1643,1,3300000,3000000,1
-lhz_dun03,0,0,0 script mvp_lhz_dun03 -1,{
+lhz_dun03,0,0,0 script mvp_lhz_dun03 FAKE_NPC,{
OnTimer6000000: // delay1 = 6000000 ms (100 min)
stopnpctimer;
sleep rand(0,30)*60000; // 0 to 30 minutes
@@ -132,7 +132,7 @@ lhz_dun04,0,0,0,0 monster Stalker Gertie 2232,1,3300000,3000000,1
lhz_dun04,0,0,0,0 monster Clown Alphoccio 2233,1,3300000,3000000,1
lhz_dun04,0,0,0,0 monster Gypsy Trentini 2234,1,3300000,3000000,1
-lhz_dun04,0,0,0 script mvp_lhz_dun04 -1,{
+lhz_dun04,0,0,0 script mvp_lhz_dun04 FAKE_NPC,{
OnTimer6000000: // delay1 = 6000000 ms (100 min)
stopnpctimer;
sleep rand(0,30)*60000; // 0 to 30 minutes
diff --git a/npc/re/mobs/fields/niflheim.txt b/npc/re/mobs/fields/niflheim.txt
index bca2b94c1..d47248a8c 100644
--- a/npc/re/mobs/fields/niflheim.txt
+++ b/npc/re/mobs/fields/niflheim.txt
@@ -60,7 +60,7 @@ nif_fild02,0,0,0,0 monster Dullahan 1504,10,5000,0,0
nif_fild02,0,0,0,0 monster Lude 1509,10,5000,0,0
nif_fild02,0,0,0,0 monster Heirozoist 1510,10,5000,0,0
-niflheim,0,0,0 script mvp_niflheim -1,{
+niflheim,0,0,0 script mvp_niflheim FAKE_NPC,{
OnTimer7980000: // delay1 = 7980000 ms (133 min)
stopnpctimer;
OnInit:
diff --git a/npc/re/mobs/towns.txt b/npc/re/mobs/towns.txt
index efd37c492..5d341fece 100644
--- a/npc/re/mobs/towns.txt
+++ b/npc/re/mobs/towns.txt
@@ -42,9 +42,9 @@ brasilis,96,50,8,8 monster Strange Hydra 2081,5,5000,0,0
alb_ship,0,0,0,0 monster Strange Mouse 2057,25,0,0,0
//== Prontera, Training Dummy Area =========================
-prontera,251,77,0,0 monster Dummy Lv50 2409,1,5000,0,0
-prontera,259,77,0,0 monster Dummy Lv50 2409,1,5000,0,0
-prontera,251,66,0,0 monster Dummy Lv100 2410,1,5000,0,0
-prontera,259,66,0,0 monster Dummy Lv100 2410,1,5000,0,0
-prontera,251,55,0,0 monster Dummy Lv150 2411,1,5000,0,0
-prontera,259,55,0,0 monster Dummy Lv150 2411,1,5000,0,0
+prontera,251,77,0,0 monster Lv 50 2409,1,5000,0,0
+prontera,259,77,0,0 monster Lv 50 2409,1,5000,0,0
+prontera,251,66,0,0 monster Lv 100 2410,1,5000,0,0
+prontera,259,66,0,0 monster Lv 100 2410,1,5000,0,0
+prontera,251,55,0,0 monster Lv 150 2411,1,5000,0,0
+prontera,259,55,0,0 monster Lv 150 2411,1,5000,0,0
diff --git a/npc/re/other/bulletin_boards.txt b/npc/re/other/bulletin_boards.txt
index eba89e06a..78f887e8f 100644
--- a/npc/re/other/bulletin_boards.txt
+++ b/npc/re/other/bulletin_boards.txt
@@ -33,7 +33,7 @@
//=========================================================================
/*
-- script ::BulletinBoard_iz -1,{
+- script ::BulletinBoard_iz FAKE_NPC,{
mes "[Izlude: The Satellite City]";
mes "Welcome to Izlude, the satellite of Prontera. Izlude was built to support Prontera's defense and to accomodate its burgeoning population.";
next;
diff --git a/npc/re/quests/eden/11-25.txt b/npc/re/quests/eden/11-25.txt
index a4d376650..2f641b770 100644
--- a/npc/re/quests/eden/11-25.txt
+++ b/npc/re/quests/eden/11-25.txt
@@ -42,7 +42,8 @@ moc_para01,36,38,3 script Mission [11 - 25]#Tuto 4_BOARD3,{
close;
}
for(.@i = 11124; .@i<11134; ++.@i)
- if (questprogress(.@i,PLAYTIME) == 2) erasequest .@i;
+ if (questprogress(.@i,PLAYTIME) == 2)
+ erasequest .@i;
for(.@i = 11114; .@i<11123; ++.@i) {
.@state = questprogress(.@i,HUNTING);
if (.@state == 2) {
@@ -93,7 +94,7 @@ moc_para01,36,38,3 script Mission [11 - 25]#Tuto 4_BOARD3,{
}
end;
L_Quest:
- if (questprogress(getarg(0),PLAYTIME) == 1) {
+ if (questprogress(getarg(0)+10,PLAYTIME) == 1) {
mes " - Mission ^4d4dff"+getarg(1)+"^000000 - ";
mes " - is already finished for today. - ";
mes " ";
diff --git a/npc/re/quests/eden/121-130.txt b/npc/re/quests/eden/121-130.txt
index 1e98a5130..77b7c26b2 100644
--- a/npc/re/quests/eden/121-130.txt
+++ b/npc/re/quests/eden/121-130.txt
@@ -778,7 +778,7 @@ S_Erasequest2:
return;
}
-- script Trace of an adventurer -1,{
+- script Trace of an adventurer FAKE_NPC,{
.@quest = 13106 + atoi(strnpcinfo(2));
.@delay = 13110 + atoi(strnpcinfo(2));
if (questprogress(.@quest) == 1) {
diff --git a/npc/re/quests/eden/eden_common.txt b/npc/re/quests/eden/eden_common.txt
index da3974cd7..14649eea6 100644
--- a/npc/re/quests/eden/eden_common.txt
+++ b/npc/re/quests/eden/eden_common.txt
@@ -203,7 +203,7 @@ moc_para01,27,35,5 script Secretary Lime Evenor 4_F_EDEN_OFFICER,{
close;
}
-- script Eden Teleport Officer#0::eto -1,{
+- script Eden Teleport Officer#0::eto FAKE_NPC,{
mes "[Eden Teleport Officer]";
mes "Those who are wandering around this strange world with aimless eyes listen up and come to me!";
mes "Eden group is here to help you and will show you the great future.";
diff --git a/npc/re/quests/eden/eden_iro.txt b/npc/re/quests/eden/eden_iro.txt
index 062c05d9c..d54b0631b 100644
--- a/npc/re/quests/eden/eden_iro.txt
+++ b/npc/re/quests/eden/eden_iro.txt
@@ -830,7 +830,7 @@ moc_para01,26,185,4 duplicate(Suhnbi#cash) Suhnmi#eden 4_M_03
moc_para01,38,185,4 duplicate(MightyHammer) Mighty Hammer#ed 4_M_DWARF
//- Refiner Effect -
-- script #eden_refine_effect -1,{
+- script #eden_refine_effect FAKE_NPC,{
OnInit:
initnpctimer;
end;
diff --git a/npc/re/quests/eden/eden_quests.txt b/npc/re/quests/eden/eden_quests.txt
index 2d44fe685..4172f0949 100644
--- a/npc/re/quests/eden/eden_quests.txt
+++ b/npc/re/quests/eden/eden_quests.txt
@@ -1820,10 +1820,10 @@ moc_para01,112,96,5 script Administrator Michael 4_M_RUSMAN1,{
mes "A total of 4 supplies, that's all.";
para_suv01 = 12;
para_suv02 = 1;
- getitem Para_Team_Hat,1; //Para_Team_Hat1
- getitem Para_Team_Manteau,1; //Para_Team_Manteau1
- getitem Para_Team_Boots1,1; //Para_Team_Boots1
- getitem Para_Team_Uniform1,1; //Para_Team_Uniform1
+ getitem Para_Team_Hat,1;
+ getitem Para_Team_Manteau,1;
+ getitem Para_Team_Boots1,1;
+ getitem Para_Team_Uniform1,1;
next;
mes "[Michael]";
mes "Is that correct?";
@@ -1857,34 +1857,34 @@ moc_para01,112,96,5 script Administrator Michael 4_M_RUSMAN1,{
mes "[Michael]";
if (Class == Job_Swordman || Class == Job_Swordman_High || Class == Job_Knight || Class == Job_Crusader) {
callsub S_Select,"We have one and Two-handed swords",
- P_Slayer1,"Eden Slayer I","Two-handed sword","Attack 162","",//P_Slayer1
- P_Sabre1,"Eden Saber I","One-handed sword","Attack 147","This is what we strive for.";//P_Sabre1
+ P_Slayer1,"Eden Slayer I","Two-handed sword","Attack 162","",
+ P_Sabre1,"Eden Saber I","One-handed sword","Attack 147","This is what we strive for.";
}
if (Class == Job_Thief || Class == Job_Thief_High || Class == Job_Assassin || Class == Job_Rogue || Class == Job_Ninja || Class == Job_Novice || Class == Job_Novice_High) {
callsub S_Select,"",
- P_Dagger1,"Eden Dagger I","Dagger","MATK+60, attack 124","This is what we strive for.";//P_Dagger1
+ P_Dagger1,"Eden Dagger I","Dagger","MATK+60, attack 124","This is what we strive for.";
}
if (Class == Job_Merchant || Class == Job_Merchant_High || Class == Job_Blacksmith || Class == Job_Alchemist) {
callsub S_Select,"We have a mace and a One-handed sword",
- P_Sabre1,"Eden Saber I","One-handed sword","Attack 147","This is what we strive for.",// P_Sabre1
- P_Mace1,"Eden Mace I","Mace","Attack 142","";// P_Mace1
+ P_Sabre1,"Eden Saber I","One-handed sword","Attack 147","This is what we strive for.",
+ P_Mace1,"Eden Mace I","Mace","Attack 142","";
}
if (Class == Job_Archer || Class == Job_Archer_High || Class == Job_Hunter || Class == Job_Dancer || Class == Job_Bard) {
callsub S_Select,"",
- P_Bow1,"Eden Bow I","Bow","Attack 82","";//P_Bow1
+ P_Bow1,"Eden Bow I","Bow","Attack 82","";
}
if (Class == Job_Acolyte || Class == Job_Acolyte_High || Class == Job_Priest || Class == Job_Monk) {
callsub S_Select,"We have a mace and a staff",
- P_Mace1,"Eden Mace I","Mace","Attack 142","", //P_Mace1
- P_Staff1,"Eden Staff I","Staff","INT+2, MATK+125, attack 60",""; //P_Staff1
+ P_Mace1,"Eden Mace I","Mace","Attack 142","",
+ P_Staff1,"Eden Staff I","Staff","INT+2, MATK+125, attack 60","";
}
if (Class == Job_Mage || Class == Job_Mage_High || Class == Job_Wizard || Class == Job_Sage) {
callsub S_Select,"",
- P_Staff1,"Eden Staff I","Staff","INT+2, MATK+125, attack 60","";//P_Staff1
+ P_Staff1,"Eden Staff I","Staff","INT+2, MATK+125, attack 60","";
}
if (Class == Job_Gunslinger) {
callsub S_Select,"",
- P_Revolver1,"Eden Revolver I","Revolver","HIT-5, attack 44","";//P_Revolver1
+ P_Revolver1,"Eden Revolver I","Revolver","HIT-5, attack 44","";
}
mes "Let me see... you will receive..";
@@ -1892,15 +1892,15 @@ moc_para01,112,96,5 script Administrator Michael 4_M_RUSMAN1,{
next;
mes "[Michael]";
para_suv01 = 23;
- getitem P_Dagger1,1; //P_Dagger1
- getitem Para_Team_Boots2,1; //Para_Team_Boots2
- getitem Para_Team_Uniform2,1; //Para_Team_Uniform2
+ getitem P_Dagger1,1;
+ getitem Para_Team_Boots2,1;
+ getitem Para_Team_Uniform2,1;
if (para_suv02 == 0) {
mes "I don't know what weapon will suit you so, you'll get a Dagger.";
mes "You don't have a record of receiving any supplies";
mes "so, you'll receive the Eden Group Hat and Manteau aswell.";
- getitem Para_Team_Hat,1; //Para_Team_Hat
- getitem Para_Team_Manteau,1; //Para_Team_Manteau
+ getitem Para_Team_Hat,1;
+ getitem Para_Team_Manteau,1;
para_suv02 = 2;
next;
mes "[Michael]";
@@ -1935,48 +1935,48 @@ moc_para01,112,96,5 script Administrator Michael 4_M_RUSMAN1,{
mes "[Michael]";
if (Class == Job_Swordman || Class == Job_Swordman_High || Class == Job_Knight || Class == Job_Crusader) {
callsub S_Select,"We have one and Two-handed swords",
- P_Sabre2,"Eden Saber II","One-handed sword","Attack 170","",///P_Sabre2
- P_Slayer2,"Eden Slayer II","Two-handed sword","Attack 185","";//P_Slayer2
+ P_Sabre2,"Eden Saber II","One-handed sword","Attack 170","",
+ P_Slayer2,"Eden Slayer II","Two-handed sword","Attack 185","";
}
if (Class == Job_Thief || Class == Job_Thief_High || Class == Job_Assassin || Class == Job_Rogue || Class == Job_Novice || Class == Job_Novice_High || Class == Job_SuperNovice || Class == Job_Soul_Linker || Class == Job_Ninja) {
callsub S_Select,"",
- P_Dagger2,"Eden Dagger II","Dagger","MATK+70, attack 158","";//P_Dagger2
+ P_Dagger2,"Eden Dagger II","Dagger","MATK+70, attack 158","";
}
if (Class == Job_Acolyte || Class == Job_Acolyte_High || Class == Job_Priest || Class == Job_Monk) {
callsub S_Select,"We have a mace and a staff",
- P_Mace2,"Eden Mace II","Mace","Attack 163","", //P_Mace2
- P_Staff2,"Eden Staff II","Staff","INT+3, MATK+150, attack 60",""; //P_Staff2
+ P_Mace2,"Eden Mace II","Mace","Attack 163","",
+ P_Staff2,"Eden Staff II","Staff","INT+3, MATK+150, attack 60","";
}
if (Class == Job_Archer || Class == Job_Archer_High || Class == Job_Hunter || Class == Job_Dancer || Class == Job_Bard) {
callsub S_Select,"",
- P_Bow2,"Eden Bow II","Bow","Attack 82","";//P_Bow2
+ P_Bow2,"Eden Bow II","Bow","Attack 82","";
}
if (Class == Job_Mage || Class == Job_Mage_High || Class == Job_Wizard || Class == Job_Sage) {
callsub S_Select,"",
- P_Staff2,"Eden Staff II","Staff","INT+3, MATK+155, attack 60","";//P_Staff2
+ P_Staff2,"Eden Staff II","Staff","INT+3, MATK+155, attack 60","";
}
if (Class == Job_Merchant || Class == Job_Merchant_High || Class == Job_Blacksmith || Class == Job_Alchemist) {
callsub S_Select,"We have a mace and a One-handed sword",
- P_Sabre2,"Eden Saber II","One-handed sword","Attack 170","",//P_Sabre2
- P_Mace2,"Eden Mace II","Mace","Attack 163","";// P_Mace2
+ P_Sabre2,"Eden Saber II","One-handed sword","Attack 170","",
+ P_Mace2,"Eden Mace II","Mace","Attack 163","";
}
if (Class == Job_Gunslinger) {
callsub S_Select,"",
- P_Revolver2,"Eden Revolver II","Revolver","HIT-5, attack 60","";//P_Revolver2
+ P_Revolver2,"Eden Revolver II","Revolver","HIT-5, attack 60","";
}
mes "Let me see... you will receive..";
mes "the Eden Group Boots III and Uniform III.";
next;
para_suv01 = 38;
- getitem Para_Team_Boots3,1; //Para_Team_Boots3
- getitem Para_Team_Uniform3,1; //Para_Team_Uniform3
+ getitem Para_Team_Boots3,1;
+ getitem Para_Team_Uniform3,1;
mes "[Michael]";
if (para_suv02 == 0) {
mes "You don't have a record of receiving any supplies";
mes "so, you'll receive the Eden Group Hat and Manteau aswell.";
para_suv02 = 3;
- getitem Para_Team_Hat,1; //Para_Team_Hat
- getitem Para_Team_Manteau,1; //Para_Team_Manteau
+ getitem Para_Team_Hat,1;
+ getitem Para_Team_Manteau,1;
next;
mes "[Michael]";
mes "Check your supplies again and look after it.";
@@ -2122,15 +2122,15 @@ S_Select:
if (para_suv01 == 22) {
mes "Additionally you'll receive the Eden Group Boots II and Uniform II.";
next;
- getitem Para_Team_Boots2,1; // Para_Team_Boots2
- getitem Para_Team_Uniform2,1;// Para_Team_Uniform2
+ getitem Para_Team_Boots2,1;
+ getitem Para_Team_Uniform2,1;
para_suv01 = 23;
}
else {
mes "Additionally you'll receive the Eden Group Boots III and Uniform III.";
next;
- getitem Para_Team_Boots3,1;// Para_Team_Boots3
- getitem Para_Team_Uniform3,1;// Para_Team_Uniform3
+ getitem Para_Team_Boots3,1;
+ getitem Para_Team_Uniform3,1;
para_suv01 = 38;
}
getitem getarg(.@i),1;
@@ -2138,8 +2138,8 @@ S_Select:
if (para_suv02 == 0) {
mes "You don't have a record of receiving any supplies";
mes "so, you'll receive the Eden Group Hat and Manteau aswell.";
- getitem Para_Team_Hat2,1;// Para_Team_Hat2
- getitem Para_Team_Manteau2,1; // Para_Team_Manteau2
+ getitem Para_Team_Hat,1;
+ getitem Para_Team_Manteau,1;
if (para_suv01 == 22)
para_suv02 = 2;
else
@@ -2469,7 +2469,7 @@ moc_para01,179,44,3 script Chef 4_M_CHNCOOK,{
moc_para01,23,35,5 script Instructor Ur#2nd01 4_M_KNIGHT_BLACK,{
mes "[Instructor Ur]";
- if (countitem(Para_Team_Mark) < 1) {// Para_Team_Mark
+ if (countitem(Para_Team_Mark) < 1) {
mes "Hey there!";
mes "I see you're not one of our agents?";
mes "Are you interested in joining us?";
@@ -2543,7 +2543,7 @@ moc_para01,23,35,5 script Instructor Ur#2nd01 4_M_KNIGHT_BLACK,{
mes "Go there are get the mission from him.";
mes "Well, then come back here alive when you're done!";
para_2nd01 = 1;
- setquest 7214;// Advanced Training at Comodo
+ setquest 7214; // Advanced Training at Comodo
}
else if (BaseLevel < 80) {
mes "Let's see...";
@@ -2560,7 +2560,7 @@ moc_para01,23,35,5 script Instructor Ur#2nd01 4_M_KNIGHT_BLACK,{
mes "[Instructor Ur]";
mes "Please, come back alive.";
para_2nd01 = 7;
- setquest 7219;// Advanced Training at Glast Heim
+ setquest 7219; // Advanced Training at Glast Heim
}
else if (BaseLevel < 90) {
mes "Ah, ok so for you...";
@@ -2573,7 +2573,7 @@ moc_para01,23,35,5 script Instructor Ur#2nd01 4_M_KNIGHT_BLACK,{
next;
mes "[Instructor Ur]";
mes "Anyways, go to Einbroch and find the Dispatched Instructor there. He should be in the field south of the main city.";
- setquest 7223;// Advanced Training in Einbroch
+ setquest 7223; // Advanced Training in Einbroch
para_2nd01 = 12;
}
else
@@ -2597,7 +2597,7 @@ moc_para01,23,35,5 script Instructor Ur#2nd01 4_M_KNIGHT_BLACK,{
mes "Don't forget, I'll be waiting for you.";
para_2nd01 = 6;
para_2nd02 = 1;
- erasequest 7218;// Report to Instructor Ur
+ erasequest 7218; // Report to Instructor Ur
}
else if (para_2nd01 == 6) {
if (BaseLevel > 69) {
@@ -2633,7 +2633,7 @@ moc_para01,23,35,5 script Instructor Ur#2nd01 4_M_KNIGHT_BLACK,{
mes "[Instructor Ur]";
mes "Please come back alive.";
para_2nd01 = 7;
- setquest 7219;// Advanced Training at Glast Heim
+ setquest 7219; // Advanced Training at Glast Heim
}
else if (BaseLevel < 90)
callsub S_Quest7990;
@@ -2668,7 +2668,7 @@ moc_para01,23,35,5 script Instructor Ur#2nd01 4_M_KNIGHT_BLACK,{
mes "Go out through the blue door, to the end of the hallway.";
mes "BK is a great blacksmith, he'll make your weapon stronger.";
mes "What are you waiting for?";
- para_2nd01 = 11;// Report to Instructor Ur
+ para_2nd01 = 11; // Report to Instructor Ur
erasequest 7222;
}
else if (para_2nd01 == 11) {
@@ -2716,7 +2716,7 @@ moc_para01,23,35,5 script Instructor Ur#2nd01 4_M_KNIGHT_BLACK,{
mes "Go out through the blue door, to the end of the hallway.";
mes "BK is a great blacksmith, he'll make your weapon stronger.";
mes "What are you waiting for?";
- erasequest 7228;// Report to Instructor Ur
+ erasequest 7228; // Report to Instructor Ur
para_2nd01 = 16;
}
else if (para_2nd01 == 16) {
@@ -2753,7 +2753,7 @@ moc_para01,23,35,5 script Instructor Ur#2nd01 4_M_KNIGHT_BLACK,{
mes "[Instructor Ur]";
mes "Good job!";
para_2nd01 = 30;
- erasequest 7232;//Report to Instructor Ur
+ erasequest 7232; //Report to Instructor Ur
}
else if (para_2nd01 == 29) {
mes "Congratulations on completing all training stages!";
@@ -2774,7 +2774,7 @@ moc_para01,23,35,5 script Instructor Ur#2nd01 4_M_KNIGHT_BLACK,{
mes "Go talk to him, he's at the weapon storage as well.";
mes "Go ahead.";
para_2nd01 = 30;
- erasequest 7237;// Report to Instructor Ur
+ erasequest 7237; // Report to Instructor Ur
}
else if (para_2nd01 == 30) {
mes "Good job.";
@@ -2835,7 +2835,7 @@ S_Quest7990:
mes "But the surrounding fields are relatively clean...";
mes "This should be pretty easy for you.";
para_2nd01 = 12;
- setquest 7223;// Advanced Training in Einbroch
+ setquest 7223; // Advanced Training in Einbroch
return;
S_Quest89100:
@@ -2848,7 +2848,7 @@ S_Quest89100:
mes "North of the city of Rachel is a cave filled with ice.";
mes "Find the Dispatched Instructor there.";
para_2nd01 = 17;
- setquest 7229;// Advanced Training in Ice Dungeon
+ setquest 7229; // Advanced Training in Ice Dungeon
}
else {
mes "Well, well...";
@@ -2880,7 +2880,7 @@ S_Quest89100:
mes "Isn't this the easiest mission you've ever had?";
mes "Don't forget my present when you come back~!";
para_2nd01 = 22;
- setquest 7233;// Advanced Training at Ash Vacuum
+ setquest 7233; // Advanced Training at Ash Vacuum
}
return;
}
@@ -2956,8 +2956,8 @@ comodo,173,354,5 script Dispatched Instructor#02 1_M_JOBTESTER,{
mes "I'll be waiting outside.";
para_2nd01 = 3;
getexp 10000,10000;
- erasequest 7215;// Stalactic Golem Hunt
- setquest 7216;// More Golem Hunting
+ erasequest 7215; // Stalactic Golem Hunt
+ setquest 7216; // More Golem Hunting
}
else {
mes "As a test of the difficulty of this cave";
@@ -3015,8 +3015,8 @@ um_fild01,34,280,5 script Instructor Romeo#2nd02 1_M_JOBTESTER,{
mes "This is the last test.";
mes "Good luck.";
para_2nd01 = 4;
- erasequest 7216;// More Golem Hunting
- setquest 7217;// Field drops
+ erasequest 7216; // More Golem Hunting
+ setquest 7217; // Field drops
getexp 10000,10000;
}
else {
@@ -3031,7 +3031,7 @@ um_fild01,34,280,5 script Instructor Romeo#2nd02 1_M_JOBTESTER,{
}
}
else if (para_2nd01 == 4) {
- if (countitem(Shoulder_Protection) > 4 && countitem(Sharp_Leaf) > 6) {// Shoulder_Protection, Sharp_Leaf
+ if (countitem(Shoulder_Protection) > 4 && countitem(Sharp_Leaf) > 6) {
mes "You really got these by defeating the monsters?";
mes "I believe you. I want to get out of here anyways.";
next;
@@ -3041,8 +3041,8 @@ um_fild01,34,280,5 script Instructor Romeo#2nd02 1_M_JOBTESTER,{
delitem Shoulder_Protection,5;
delitem Sharp_Leaf,7;
para_2nd01 = 5;
- erasequest 7217;// Field drops
- setquest 7218;// Report to Instructor Ur
+ erasequest 7217; // Field drops
+ setquest 7218; // Report to Instructor Ur
getexp 10000,10000;
}
else {
@@ -3115,8 +3115,8 @@ glast_01,195,131,5 script Dispatched Instructor#03 4_F_SISTER,{
mes "Defeat 20 Wraiths.";
mes "I'll assist you from here!";
para_2nd01 = 8;
- erasequest 7219;// Advanced Training at Glast Heim
- setquest 7220;// Wraith Hunt
+ erasequest 7219; // Advanced Training at Glast Heim
+ setquest 7220; // Wraith Hunt
}
else if (para_2nd01 == 8) {
if (questprogress(7220,HUNTING) == 2) {
@@ -3135,8 +3135,8 @@ glast_01,195,131,5 script Dispatched Instructor#03 4_F_SISTER,{
mes "You can do it right?";
mes "I believe in you!";
para_2nd01 = 9;
- erasequest 7220;// Wraith Hunt
- setquest 7221;// Evil Druid hunt
+ erasequest 7220; // Wraith Hunt
+ setquest 7221; // Evil Druid hunt
getexp 20000,20000;
}
else {
@@ -3167,8 +3167,8 @@ glast_01,195,131,5 script Dispatched Instructor#03 4_F_SISTER,{
mes "You can go back to Eden now";
mes "I'll stay and clean up the rest, hehe";
para_2nd01 = 10;
- erasequest 7221;// Evil Druid hunt
- setquest 7222;// Report to Instructor Ur
+ erasequest 7221; // Evil Druid hunt
+ setquest 7222; // Report to Instructor Ur
getexp 20000,20000;
}
else {
@@ -3230,11 +3230,11 @@ ein_fild08,172,359,3 script Dispatched Instructor#04 4_M_4THPRIN1,{
mes "I'm not holding a grudge just because they ate my lunch.";
mes "I'll be resting here until you're done.";
para_2nd01 = 13;
- erasequest 7223;// Advanced Training in Einbroch
- setquest 7224;// Porcellio hunting
+ erasequest 7223; // Advanced Training in Einbroch
+ setquest 7224; // Porcellio hunting
}
else if (para_2nd01 == 13) {
- if (questprogress(7224,HUNTING) == 2) {// Porcellio hunting
+ if (questprogress(7224,HUNTING) == 2) { // Porcellio hunting
mes "What, You're done already?";
mes "I was just about to fall asleep... Oh well..";
mes "It can't be helped, I guess. Let's go to a different spot..";
@@ -3267,9 +3267,9 @@ ein_fild08,172,359,3 script Dispatched Instructor#04 4_M_4THPRIN1,{
mes "Okay then, be safe.";
mes "I'm going to take a nap.";
para_2nd01 = 14;
- erasequest 7224;// Porcellio hunting
- setquest 7226;// Venomous hunting
- setquest 7227;// Teddy Bear hunting
+ erasequest 7224; // Porcellio hunting
+ setquest 7226; // Venomous hunting
+ setquest 7227; // Teddy Bear hunting
getexp 30000,30000;
}
else {
@@ -3297,9 +3297,9 @@ ein_fild08,172,359,3 script Dispatched Instructor#04 4_M_4THPRIN1,{
mes "I have some things to report to Instructor Ur.";
mes "I've been watching you closely and you've done well. Go back to Ur and deliver this report.";
para_2nd01 = 15;
- erasequest 7226;// Venomous hunting
- erasequest 7227;// Teddy Bear hunting
- setquest 7228;// Report to Instructor Ur
+ erasequest 7226; // Venomous hunting
+ erasequest 7227; // Teddy Bear hunting
+ setquest 7228; // Report to Instructor Ur
getexp 30000,30000;
}
else {
@@ -3374,8 +3374,8 @@ ice_dun01,154,13,5 script Dispatched Instructor#05 4_F_JOB_BLACKSMITH,{
mes "You be careful in there.";
mes "Well, good luck~!";
para_2nd01 = 18;
- erasequest 7229;// Advanced Training in Ice Dungeon
- setquest 7230;// Siroma hunting
+ erasequest 7229; // Advanced Training in Ice Dungeon
+ setquest 7230; // Siroma hunting
}
else if (para_2nd01 == 18) {
if (questprogress(7230,HUNTING) == 2) {
@@ -3414,8 +3414,8 @@ ice_dun01,154,13,5 script Dispatched Instructor#05 4_F_JOB_BLACKSMITH,{
mes "Go now!";
mes "Those Siromas are going to just get rowdier by the minute.";
para_2nd01 = 19;
- erasequest 7230;// Siroma hunting
- setquest 7231;// Hunting and Gathering
+ erasequest 7230; // Siroma hunting
+ setquest 7231; // Hunting and Gathering
getexp 40000,40000;
npcskill "AL_HEAL",10,99,60;
percentheal 0,100;
@@ -3431,7 +3431,7 @@ ice_dun01,154,13,5 script Dispatched Instructor#05 4_F_JOB_BLACKSMITH,{
}
}
else if (para_2nd01 == 19) {
- if (questprogress(7231,HUNTING) == 2 && countitem(Ice_Piece) > 29 && countitem(Sweet_Sauce) > 0 && countitem(Milk) > 0) {// Ice_Piece, Sweet_Sauce, Milk
+ if (questprogress(7231,HUNTING) == 2 && countitem(Ice_Piece) > 29 && countitem(Sweet_Sauce) > 0 && countitem(Milk) > 0) {
mes "Ohh!";
mes "You've brought everything.";
mes "Okay, so just one last thing...!";
@@ -3458,8 +3458,8 @@ ice_dun01,154,13,5 script Dispatched Instructor#05 4_F_JOB_BLACKSMITH,{
delitem Sweet_Sauce,1;
delitem Milk,1;
para_2nd01 = 20;
- erasequest 7231;// Hunting and Gathering
- setquest 7232;// Report to Instructor Ur
+ erasequest 7231; // Hunting and Gathering
+ setquest 7232; // Report to Instructor Ur
getexp 40000,40000;
}
else {
@@ -3522,8 +3522,8 @@ mid_camp,212,229,3 script Dispatched Instructor#06 4_F_HUWOMAN,{
mes "[Margaret]";
mes "Find him and figure out what the heck he's up to please.";
para_2nd01 = 23;
- erasequest 7233;// Advanced Training at Ash Vacuum
- setquest 7234;// Margaret's favor
+ erasequest 7233; // Advanced Training at Ash Vacuum
+ setquest 7234; // Margaret's favor
}
else if (para_2nd01 < 27) {
mes "Can you find those two brothers?";
@@ -3545,8 +3545,8 @@ mid_camp,212,229,3 script Dispatched Instructor#06 4_F_HUWOMAN,{
mes "[Margaret]";
mes "Your training is done so go back and talk to Instructor Ur.";
para_2nd01 = 29;
- erasequest 7234;// Margaret's favor
- setquest 7237;// Report to Instructor Ur
+ erasequest 7234; // Margaret's favor
+ setquest 7237; // Report to Instructor Ur
}
else if (para_2nd01 == 29) {
mes "Well, whatever the Nepenthes and Pinguicula proof has been collected.";
@@ -3613,7 +3613,7 @@ man_fild01,43,234,3 script Dispatched Instructor#07 4_DST_SOLDIER,{
mes "[Meeru]";
mes "It's really not that difficult to hunt 1 so just go to the field East of here and kill one of them.";
para_2nd01 = 24;
- setquest 7235;// Nepenthes Hunt
+ setquest 7235; // Nepenthes Hunt
}
else if (para_2nd01 == 24) {
if (questprogress(7235,HUNTING) == 2) {
@@ -3629,7 +3629,7 @@ man_fild01,43,234,3 script Dispatched Instructor#07 4_DST_SOLDIER,{
mes "[Meeru]";
mes "I'll just be here making sure other people hunt the Nepenthes. I might ask them to hunt more than 1 who knows.";
para_2nd01 = 25;
- erasequest 7235;// Nepenthes Hunt
+ erasequest 7235; // Nepenthes Hunt
getexp 50000,50000;;
}
else {
@@ -3699,7 +3699,7 @@ spl_fild02,377,149,3 script Dispatched Instructor#08 4_M_DST_MASTER,{
mes "I promise you I'll give you something good.";
mes "Thanks.";
para_2nd01 = 26;
- setquest 7236;// Pinguicula Hunt
+ setquest 7236; // Pinguicula Hunt
}
else if (para_2nd01 == 26) {
if (questprogress(7236,HUNTING) == 2) {
@@ -3712,7 +3712,7 @@ spl_fild02,377,149,3 script Dispatched Instructor#08 4_M_DST_MASTER,{
mes "[Mine]";
mes "Oh don't worry she won't mind. I'll just go back to doing what I was doing. Here's your reward.";
para_2nd01 = 27;
- erasequest 7236;// Pinguicula Hunt
+ erasequest 7236; // Pinguicula Hunt
getexp 50000,50000;;
}
else {
@@ -3740,7 +3740,7 @@ moc_para01,111,83,3 script Blacksmith Thorn#2nd10 2_M_OLDBLSMITH,{
close;
}
mes "[Thorn]";
- if (countitem(Para_Team_Mark) < 1) {// Para_Team_Mark
+ if (countitem(Para_Team_Mark) < 1) {
mes "Hmm, are you a member of Eden Group?";
mes "You need to be one of our members to use my services.";
close;
@@ -3770,9 +3770,9 @@ moc_para01,111,83,3 script Blacksmith Thorn#2nd10 2_M_OLDBLSMITH,{
mes "So what equipment do you want to enhance?";
next;
switch( select( "Eden Group Manteau II", "Eden Group Armor IV", "Eden Group Boots IV" ) ) {
- case 1: callsub S_Enchant,Para_Team_Manteau2,"Manteau";// Para_Team_Manteau2
- case 2: callsub S_Enchant,Para_Team_Armor,"Armor";// Para_Team_Armor
- case 3: callsub S_Enchant,Para_Team_Boots4,"Boots";// Para_Team_Boots4
+ case 1: callsub S_Enchant,Para_Team_Manteau2,"Manteau";
+ case 2: callsub S_Enchant,Para_Team_Armor,"Armor";
+ case 3: callsub S_Enchant,Para_Team_Boots4,"Boots";
}
}
else {
@@ -3816,7 +3816,7 @@ moc_para01,111,83,3 script Blacksmith Thorn#2nd10 2_M_OLDBLSMITH,{
mes "I appreciate it.";
mes "So take your time and I'll be waiting.";
para_2nd04 = 1 + .@add;
- setquest (7238 + .@add);// Errands for Thorn (easy/hard)
+ setquest (7238 + .@add); // Errands for Thorn (easy/hard)
close;
case 2:
mes "Eh...?";
@@ -3826,7 +3826,7 @@ moc_para01,111,83,3 script Blacksmith Thorn#2nd10 2_M_OLDBLSMITH,{
}
else if (para_2nd04 == 1 || para_2nd04 == 2) {
if (para_2nd04 == 1) {
- setarray .@item[0],Iron_Ore,Iron;// Iron_Ore, Iron
+ setarray .@item[0],Iron_Ore,Iron;
setarray .@amount[0],20,10;
setarray .@countitem[0],countitem(Iron_Ore),countitem(Iron);
.@string$ = "I asked you to get 20 Iron Ore, and 10 Iron.";
@@ -3879,7 +3879,7 @@ moc_para01,111,83,3 script Blacksmith Thorn#2nd10 2_M_OLDBLSMITH,{
mes "Uh-huh...";
mes "What are we going to... oh don't worry.";
mes "Come to me later.";
- erasequest 7241;// Errands for Thorn timer
+ erasequest 7241; // Errands for Thorn timer
para_2nd04 = 0;
}
}
@@ -3915,57 +3915,57 @@ moc_para01,111,83,3 script Blacksmith Thorn#2nd10 2_M_OLDBLSMITH,{
P_Katar1,"Eden Group Katar I","Katar, ATK 155";
}
else if (BaseJob == Job_Rogue || BaseClass == Job_Novice)
- getitem P_Dagger3,1;// P.Dagger III
+ getitem P_Dagger3,1;
else if (BaseJob == Job_Alchemist || BaseJob == Job_Blacksmith) {
callsub L_Select,"Your options are Mace, Saber and Axe.",
- P_Mace3,"Eden Group Mace III","Mace, Attack 172",// P_Mace3
- P_Saber3,"Eden Group Saber III","Sword, Attack 185",//P.Saber III
- P_Two_Handed_Axe1,"Eden Group Axe I","Axe, Attack 195"; //P.Two-Handed Axe I
+ P_Mace3,"Eden Group Mace III","Mace, Attack 172",
+ P_Saber3,"Eden Group Saber III","Sword, Attack 185",
+ P_Two_Handed_Axe1,"Eden Group Axe I","Axe, Attack 195";
}
else if (BaseJob == Job_Wizard)
- getitem P_Staff3,1;// P.Staff III
+ getitem P_Staff3,1;
else if (BaseJob == Job_Sage) {
callsub L_Select,"",
- P_Staff3,"Eden Group Staff III","Staff, MATK + 170, INT +4, Attack 60", //P.Staff III
- P_Dic1,"Eden Group Dictionary I","Book, MATK +100, Attack 135"; //P.Book I
+ P_Staff3,"Eden Group Staff III","Staff, MATK + 170, INT +4, Attack 60",
+ P_Dic1,"Eden Group Dictionary I","Book, MATK +100, Attack 135";
}
else if (BaseJob == Job_Priest) {
callsub L_Select,"",
- P_Staff3,"Eden Group Staff III","Staff, MATK + 170, INT +4, Attack 60", //P.Staff III
- P_Dic1,"Eden Group Dictionary I","Book, MATK +100, Attack 135", //P.Book I
- P_Mace3,"Eden Group Mace III","Mace, Attack 172"; //P.Mace III
+ P_Staff3,"Eden Group Staff III","Staff, MATK + 170, INT +4, Attack 60",
+ P_Dic1,"Eden Group Dictionary I","Book, MATK +100, Attack 135",
+ P_Mace3,"Eden Group Mace III","Mace, Attack 172";
}
else if (BaseJob == Job_Monk) {
callsub L_Select,"",
- P_Knuckle1,"Eden Group Knuckles I","Knuckle, Attack 120", //P.Knuckle I
- P_Mace3,"Eden Group Mace III","Mace, Attack 172"; //P.Mace III
+ P_Knuckle1,"Eden Group Knuckles I","Knuckle, Attack 120",
+ P_Mace3,"Eden Group Mace III","Mace, Attack 172";
}
else if (BaseJob == Job_Hunter)
- getitem P_Bow3,1;// P.Bow III
+ getitem P_Bow3,1;
else if (BaseJob == Job_Bard) {
callsub L_Select,"",
- P_Bow3,"Eden Group Bow III","Bow, Attack 140", //P.Bow III
- P_String_Inst1,"Eden Group Guitar I","Guitar, Attack 125"; //P.Guitar I
+ P_Bow3,"Eden Group Bow III","Bow, Attack 140",
+ P_String_Inst1,"Eden Group Guitar I","Guitar, Attack 125";
}
else if (BaseJob == Job_Dancer) {
callsub L_Select,"",
- P_Bow3,"Eden Group Bow III","Bow, Attack 140", //P.Bow III
- P_Tail1,"Eden Group Whip I","Whip, Attack 125"; //P.Tail I
+ P_Bow3,"Eden Group Bow III","Bow, Attack 140",
+ P_Tail1,"Eden Group Whip I","Whip, Attack 125";
}
else if (Class == Job_Ninja) {
callsub L_Select,"",
- P_Dagger3,"Eden Group Dagger III","Dagger, MATK +80, ATK 165", //P.Dagger III
- P_Huuma_Shuriken1,"Eden Group Huuma Shuriken I","Huuma Suriken, MATK +50, ATK 170"; //P.Huuma Suriken I
+ P_Dagger3,"Eden Group Dagger III","Dagger, MATK +80, ATK 165",
+ P_Huuma_Shuriken1,"Eden Group Huuma Shuriken I","Huuma Suriken, MATK +50, ATK 170";
}
else if (Class == Job_Star_Gladiator)
- getitem P_Dic1,1; //P.Book I
+ getitem P_Dic1,1;
else if (Class == Job_Soul_Linker) {
callsub L_Select,"",
- P_Dagger3,"Eden Group Dagger III","Dagger, MATK +80, ATK 165", //P.Dagger III
- P_Staff3,"Eden Group Staff III","Staff, MATK +170, INT +4, ATK 60"; //P.Staff III
+ P_Dagger3,"Eden Group Dagger III","Dagger, MATK +80, ATK 165",
+ P_Staff3,"Eden Group Staff III","Staff, MATK +170, INT +4, ATK 60";
}
else if (Class == Job_Gunslinger)
- getitem P_Revolver3,1; //P.Revolver III
+ getitem P_Revolver3,1;
else {
mes "Hmm, you are eligible to receive equipment.";
mes "Yeah I understand that.";
@@ -3975,10 +3975,10 @@ moc_para01,111,83,3 script Blacksmith Thorn#2nd10 2_M_OLDBLSMITH,{
close;
}
para_2nd02 = 2;
- getitem Para_Team_Hat2,1;// Paradise Hat II
- getitem Para_Team_Manteau2,1;// Paradise Mantle II
- getitem Para_Team_Boots4,1;// Paradise Boots IV
- getitem Para_Team_Armor,1;// Paradise Uniform IV
+ getitem Para_Team_Hat2,1;
+ getitem Para_Team_Manteau2,1;
+ getitem Para_Team_Boots4,1;
+ getitem Para_Team_Armor,1;
mes "Here's your equipment.";
mes "I'll also give you the other gear that comes along with this set.";
}
@@ -4016,18 +4016,18 @@ S_Enchant:
mes "[Thorn]";
if (countitem(getarg(0)) > 0) {
setarray .@bonus[1],
- Luck2,// Luck2
- Mdef4,// Mdef4
- Def3,// Def3
- Strength2,// Strength2
- Mdef6,// Mdef6
- Def6,// Def6
- Agility2,// Agility2
- Mdef8,// Mdef8
- Def9,// Def9
- Dexterity2,// Dexterity2
- Inteligence2,// Inteligence2
- Vitality2;// Vitality2
+ Luck2,
+ Mdef4,
+ Def3,
+ Strength2,
+ Mdef6,
+ Def6,
+ Agility2,
+ Mdef8,
+ Def9,
+ Dexterity2,
+ Inteligence2,
+ Vitality2;
.@1st = .@bonus[ rand(1,12) ];
.@2nd = .@bonus[ rand(1,12) ];
mes "Eden Group "+ getarg(1) +"?";
@@ -4064,21 +4064,21 @@ S_Enchant:
moc_para01,112,79,3 script Weapons Expert BK#2nd11 4_M_REPAIR,{
setarray .@wplist[0],
- P_Slayer3, // P_Slayer3
- P_Saber3, // P_Saber3
- P_Dagger3, // P_Dagger3
- P_Katar1, // P_Katar1
- P_Two_Handed_Axe1, // P_Two_Handed_Axe1
- P_Sphere1, // P_Spear I
- P_Staff3, // P_Staff3
- P_Mace3, // P_Mace3
- P_Bow3, // P_Bow3
- P_Dic1, // P.Book I
- P_String_Inst1, // P_Guitar I
- P_Tail1, // P_Tail1
- P_Revolver3, // P_Revolver3
- P_Knuckle1, // P_Knuckle1
- P_Huuma_Shuriken1; // P_Huuma_Shuriken1
+ P_Slayer3,
+ P_Saber3,
+ P_Dagger3,
+ P_Katar1,
+ P_Two_Handed_Axe1,
+ P_Sphere1,
+ P_Staff3,
+ P_Mace3,
+ P_Bow3,
+ P_Dic1,
+ P_String_Inst1,
+ P_Tail1,
+ P_Revolver3,
+ P_Knuckle1,
+ P_Huuma_Shuriken1;
.@menu$ = "Eden Group Slayer III:" +
"Eden Group Saber III:" +
"Eden Group Dagger III:" +
@@ -4192,27 +4192,27 @@ moc_para01,112,79,3 script Weapons Expert BK#2nd11 4_M_REPAIR,{
next;
switch( select( "Brute Type", "Plant Type", "Insect Type", "Fish Type", "Dragon Type", "Increased Heal" ) ) {
case 1:
- setarray .@arg[0],Goblin_Card,Bradium_Goram_Card,111;// Goblin_Card, Bradium_Goram_Card
+ setarray .@arg[0],Goblin_Card,Bradium_Goram_Card,111;
.@type$ = "Brute";
break;
case 2:
- setarray .@arg[0],Scorpion_Card,Nepenthes_Card,121;// Scorpion_Card, Nepenthes_Card
+ setarray .@arg[0],Scorpion_Card,Nepenthes_Card,121;
.@type$ = "Plant";
break;
case 3:
- setarray .@arg[0],Caramel_Card,Pinguicula_Card,131;// Caramel_Card, Pinguicula_Card
+ setarray .@arg[0],Caramel_Card,Pinguicula_Card,131;
.@type$ = "Insect";
break;
case 4:
- setarray .@arg[0],Flora_Card,Naga_Card,141;// Flora_Card, Naga_Card
+ setarray .@arg[0],Flora_Card,Naga_Card,141;
.@type$ = "Fish";
break;
case 5:
- setarray .@arg[0],Petit_Card,Egg_Of_Draco_Card,151;// Petit_Card, Egg_Of_Draco_Card
+ setarray .@arg[0],Petit_Card,Egg_Of_Draco_Card,151;
.@type$ = "Dragon";
break;
case 6:
- setarray .@arg[0],Heal_Amount2,Heal_Amount2,161;// Heal_Amount2
+ setarray .@arg[0],Heal_Amount2,Heal_Amount2,161;
}
mes "[BK]";
for ( .@i = 0; .@i < 15; .@i++ ) {
@@ -4273,29 +4273,29 @@ moc_para01,112,79,3 script Weapons Expert BK#2nd11 4_M_REPAIR,{
delitem .@wplist[.@s],1;
para_2nd02 = 5;
if (para_2nd03 == 111)
- getitem2 .@wplist[.@s],1,1,0,0,0,Goblin_Card,Goblin_Card,Atk3;// Goblin_Card, Goblin_Card, Atk3
+ getitem2 .@wplist[.@s],1,1,0,0,0,Goblin_Card,Goblin_Card,Atk3;
else if (para_2nd03 == 121)
- getitem2 .@wplist[.@s],1,1,0,0,0,Scorpion_Card,Scorpion_Card,Atk3;// Scorpion_Card, Scorpion_Card, Atk3
+ getitem2 .@wplist[.@s],1,1,0,0,0,Scorpion_Card,Scorpion_Card,Atk3;
else if (para_2nd03 == 131)
- getitem2 .@wplist[.@s],1,1,0,0,0,Caramel_Card,Caramel_Card,Atk3;// Caramel_Card, Caramel_Card, Atk3
+ getitem2 .@wplist[.@s],1,1,0,0,0,Caramel_Card,Caramel_Card,Atk3;
else if (para_2nd03 == 141)
- getitem2 .@wplist[.@s],1,1,0,0,0,Flora_Card,Flora_Card,Atk3;// Flora_Card, Flora_Card, Atk3
+ getitem2 .@wplist[.@s],1,1,0,0,0,Flora_Card,Flora_Card,Atk3;
else if (para_2nd03 == 151)
- getitem2 .@wplist[.@s],1,1,0,0,0,Petit_Card,Petit_Card,Atk3;// Petit_Card, Petit_Card, Atk3
+ getitem2 .@wplist[.@s],1,1,0,0,0,Petit_Card,Petit_Card,Atk3;
else if (para_2nd03 == 161)
- getitem2 .@wplist[.@s],1,1,0,0,0,Heal_Amount2,Heal_Amount2,Atk3;// Heal_Amount2, Heal_Amount2, Atk3
+ getitem2 .@wplist[.@s],1,1,0,0,0,Heal_Amount2,Heal_Amount2,Atk3;
else if (para_2nd03 == 211)
- getitem2 .@wplist[.@s],1,1,0,0,0,Bradium_Goram_Card,Bradium_Goram_Card,Matk3;// Bradium_Goram_Card, Bradium_Goram_Card, Matk3
+ getitem2 .@wplist[.@s],1,1,0,0,0,Bradium_Goram_Card,Bradium_Goram_Card,Matk3;
else if (para_2nd03 == 221)
- getitem2 .@wplist[.@s],1,1,0,0,0,Nepenthes_Card,Nepenthes_Card,Matk3;// Nepenthes_Card, Nepenthes_Card, Matk3
+ getitem2 .@wplist[.@s],1,1,0,0,0,Nepenthes_Card,Nepenthes_Card,Matk3;
else if (para_2nd03 == 231)
- getitem2 .@wplist[.@s],1,1,0,0,0,Pinguicula_Card,Pinguicula_Card,Matk3;// Pinguicula_Card, Pinguicula_Card, Matk3
+ getitem2 .@wplist[.@s],1,1,0,0,0,Pinguicula_Card,Pinguicula_Card,Matk3;
else if (para_2nd03 == 241)
- getitem2 .@wplist[.@s],1,1,0,0,0,Naga_Card,Naga_Card,Matk3;// Naga_Card, Naga_Card, Matk3
+ getitem2 .@wplist[.@s],1,1,0,0,0,Naga_Card,Naga_Card,Matk3;
else if (para_2nd03 == 251)
- getitem2 .@wplist[.@s],1,1,0,0,0,Egg_Of_Draco_Card,Egg_Of_Draco_Card,Matk3;// Egg_Of_Draco_Card, Egg_Of_Draco_Card, Matk3
+ getitem2 .@wplist[.@s],1,1,0,0,0,Egg_Of_Draco_Card,Egg_Of_Draco_Card,Matk3;
else if (para_2nd03 == 261)
- getitem2 .@wplist[.@s],1,1,0,0,0,Heal_Amount2,Heal_Amount2,Matk3;// Heal_Amount2, Heal_Amount2, Matk3
+ getitem2 .@wplist[.@s],1,1,0,0,0,Heal_Amount2,Heal_Amount2,Matk3;
mes "[BK]";
mes "Isn't it magnificent?";
mes "I know, I know, I'm pretty amazing!";
diff --git a/npc/re/quests/eden/eden_service.txt b/npc/re/quests/eden/eden_service.txt
index a4b1a8439..c6f6c4a41 100644
--- a/npc/re/quests/eden/eden_service.txt
+++ b/npc/re/quests/eden/eden_service.txt
@@ -33,7 +33,7 @@
//= 1.1
//=========================================================================
-- script Goods Cabinet#00::pggc -1,{
+- script Goods Cabinet#00::pggc FAKE_NPC,{
mes "It is a Goods Storage Cabinet.";
mes "A message is written on a piece of paper.";
next;
diff --git a/npc/re/quests/mrsmile.txt b/npc/re/quests/mrsmile.txt
index 7cb093753..a98ac8b0e 100644
--- a/npc/re/quests/mrsmile.txt
+++ b/npc/re/quests/mrsmile.txt
@@ -31,11 +31,15 @@
//================= Description ===========================================
//= Trade Clover, Fluff and Jellopy for a Mr. Smile mask.
//================= Current Version =======================================
-//= 1.1
+//= 1.2
//=========================================================================
+//== Izlude ================================================
izlude,125,175,4 duplicate(SmileHelper) Smile Assistance#iz 4_F_03
izlude_a,125,175,4 duplicate(SmileHelper) Smile Assistance#iz_a 4_F_03
izlude_b,125,175,4 duplicate(SmileHelper) Smile Assistance#iz_b 4_F_03
izlude_c,125,175,4 duplicate(SmileHelper) Smile Assistance#iz_c 4_F_03
izlude_d,125,175,4 duplicate(SmileHelper) Smile Assistance#iz_d 4_F_03
+
+//== Morroc ================================================
+morocc,159,107,4 duplicate(SmileHelper) Smile Assistance#moc1 4_F_03
diff --git a/npc/re/quests/quests_brasilis.txt b/npc/re/quests/quests_brasilis.txt
index a8f576741..bed124f0c 100644
--- a/npc/re/quests/quests_brasilis.txt
+++ b/npc/re/quests/quests_brasilis.txt
@@ -105,7 +105,7 @@ OnGo:
end;
}
-- script Puppy#bra -1,{
+- script Puppy#bra FAKE_NPC,{
if (questprogress(9030) == 1) {
if (brazil_kid < 3) {
mes "[Puppy]";
diff --git a/npc/re/quests/quests_dewata.txt b/npc/re/quests/quests_dewata.txt
index d29a7dffa..5ec38165d 100644
--- a/npc/re/quests/quests_dewata.txt
+++ b/npc/re/quests/quests_dewata.txt
@@ -1514,7 +1514,7 @@ dew_fild01,259,48,4 script Poby#dew_drink 4_M_DEWBOY,{
close;
}
-- script ::DewataPalm -1,{
+- script ::DewataPalm FAKE_NPC,{
if (checkweight(Knife,1) == 0 || MaxWeight - Weight < 5000) {
mes "You are carrying too much.";
close;
diff --git a/npc/re/quests/quests_dicastes.txt b/npc/re/quests/quests_dicastes.txt
index 1e8811752..3c348aff0 100644
--- a/npc/re/quests/quests_dicastes.txt
+++ b/npc/re/quests/quests_dicastes.txt
@@ -203,7 +203,7 @@ sec_in02,16,43,5 script Scaraba Dungeon Entrance 4_MAN_BENKUNI,{
}
//== Vigilantes ============================================
-- script Vigilante#main -1,{
+- script Vigilante#main FAKE_NPC,{
if (compare(strnpcinfo(0),"ep133_26")) {
if (!isequipped(2782)) {
mes "[Vigilante]";
@@ -1020,7 +1020,7 @@ dic_in01,40,193,1 script Papyrus#0001 4_MAN_NITT,{
}
//== Document Packages =====================================
-- script Document Package#main -1,{
+- script Document Package#main FAKE_NPC,{
function eldicastes_dp;
if (isequipped(2782) < 1) {
mes "You can't make sense of the writing.";
@@ -4792,7 +4792,7 @@ dic_fild01,231,174,5 script BK#ep133_18 4_M_MERCAT2,{
close;
}
-- script ep133_crack#main -1,{
+- script ep133_crack#main FAKE_NPC,{
// if ((GetInventoryRemainCount 1301 3 == 2) || (GetInventoryRemainCount 1301 3 == 3)) {
if ((MaxWeight - Weight) < 1000) {
mes "- You can too many items to proceed with the quest. -";
@@ -6102,7 +6102,7 @@ dic_in01,349,129,5 script Bouy#13_3 4_MAN_BENKUNI,{
}
//== Sapha's Visit =========================================
-- script Expedition#ep133_is -1,{
+- script Expedition#ep133_is FAKE_NPC,{
if (ep13_3_invite) {
if (compare(strnpcinfo(1),"Maha")) {
mes "[Maha]";
@@ -6949,7 +6949,7 @@ dic_in01,42,264,3 script Adventurer Clerk#ep133 4_MAN_NITT,{
}
}
//== Enchantment NPCs ======================================
-- script dic_enc#main -1,{
+- script dic_enc#main FAKE_NPC,{
.@re$ = strnpcinfo(1);
.@n$ = "["+.@re$+"]";
if (!checkweight (1201,1)) {
diff --git a/npc/re/quests/quests_malangdo.txt b/npc/re/quests/quests_malangdo.txt
index 54883bed7..bd6af0bdd 100644
--- a/npc/re/quests/quests_malangdo.txt
+++ b/npc/re/quests/quests_malangdo.txt
@@ -1321,7 +1321,7 @@ mal_in02,140,94,0 script Bob#mal 4_CAT_DOWN,{
close;
}
-- script Crack#mal0 -1,{
+- script Crack#mal0 FAKE_NPC,{
if (.off) end; // Official script uses a 1-second timer to disable cracks. Added to prevent abuse.
if (ma_tomas == 15 || questprogress(11241)) {
if (countitem(Fix_Kit) < 1) {
@@ -1416,7 +1416,7 @@ malangdo,221,155,0 duplicate(Crack#mal0) Crack#mal8 4_CRACK
malangdo,217,109,0 duplicate(Crack#mal0) Crack#mal9 4_CRACK
malangdo,162,183,0 duplicate(Crack#mal0) Crack#mal10 4_CRACK
-- script Crackt0#mal -1,{
+- script Crackt0#mal FAKE_NPC,{
end;
OnInit:
disablenpc strnpcinfo(0);
@@ -1437,16 +1437,16 @@ OnTimer30000:
donpcevent strnpcinfo(0)+"::OnDisable";
end;
}
-- duplicate(Crackt0#mal) Crackt1#mal -1
-- duplicate(Crackt0#mal) Crackt2#mal -1
-- duplicate(Crackt0#mal) Crackt3#mal -1
-- duplicate(Crackt0#mal) Crackt4#mal -1
-- duplicate(Crackt0#mal) Crackt5#mal -1
-- duplicate(Crackt0#mal) Crackt6#mal -1
-- duplicate(Crackt0#mal) Crackt7#mal -1
-- duplicate(Crackt0#mal) Crackt8#mal -1
-- duplicate(Crackt0#mal) Crackt9#mal -1
-- duplicate(Crackt0#mal) Crackt10#mal -1
+- duplicate(Crackt0#mal) Crackt1#mal FAKE_NPC
+- duplicate(Crackt0#mal) Crackt2#mal FAKE_NPC
+- duplicate(Crackt0#mal) Crackt3#mal FAKE_NPC
+- duplicate(Crackt0#mal) Crackt4#mal FAKE_NPC
+- duplicate(Crackt0#mal) Crackt5#mal FAKE_NPC
+- duplicate(Crackt0#mal) Crackt6#mal FAKE_NPC
+- duplicate(Crackt0#mal) Crackt7#mal FAKE_NPC
+- duplicate(Crackt0#mal) Crackt8#mal FAKE_NPC
+- duplicate(Crackt0#mal) Crackt9#mal FAKE_NPC
+- duplicate(Crackt0#mal) Crackt10#mal FAKE_NPC
mal_in02,181,55,3 script Brie#mal 4_CAT_SAILOR2,{
if (ma_tomas < 6) {
@@ -1906,7 +1906,7 @@ mal_in01,116,168,0 script Dry Machine#mal 2_SLOT_MACHINE,{
close;
}
-- script Suspicious Sand Pile#0 -1,{
+- script Suspicious Sand Pile#0 FAKE_NPC,{
if (.off) end; // Official script uses a 1-second timer to disable sand piles. Added to prevent abuse.
if (MaxWeight - Weight < 1000) {
mes "Your inventory is too heavy to proceed. Come back after lightening your load.";
@@ -1954,7 +1954,7 @@ malangdo,136,122,0 duplicate(Suspicious Sand Pile#0) Suspicious Sand Pile#8 4_SO
malangdo,152,143,0 duplicate(Suspicious Sand Pile#0) Suspicious Sand Pile#9 4_SOIL
malangdo,242,175,0 duplicate(Suspicious Sand Pile#0) Suspicious Sand Pile#10 4_SOIL
-- script Water Sand0#mal -1,{
+- script Water Sand0#mal FAKE_NPC,{
OnInit:
disablenpc strnpcinfo(0);
end;
@@ -1974,16 +1974,16 @@ OnTimer30000:
donpcevent strnpcinfo(0)+"::OnDisable";
end;
}
-- duplicate(Water Sand0#mal) Water Sand1#mal -1
-- duplicate(Water Sand0#mal) Water Sand2#mal -1
-- duplicate(Water Sand0#mal) Water Sand3#mal -1
-- duplicate(Water Sand0#mal) Water Sand4#mal -1
-- duplicate(Water Sand0#mal) Water Sand5#mal -1
-- duplicate(Water Sand0#mal) Water Sand6#mal -1
-- duplicate(Water Sand0#mal) Water Sand7#mal -1
-- duplicate(Water Sand0#mal) Water Sand8#mal -1
-- duplicate(Water Sand0#mal) Water Sand9#mal -1
-- duplicate(Water Sand0#mal) Water Sand10#mal -1
+- duplicate(Water Sand0#mal) Water Sand1#mal FAKE_NPC
+- duplicate(Water Sand0#mal) Water Sand2#mal FAKE_NPC
+- duplicate(Water Sand0#mal) Water Sand3#mal FAKE_NPC
+- duplicate(Water Sand0#mal) Water Sand4#mal FAKE_NPC
+- duplicate(Water Sand0#mal) Water Sand5#mal FAKE_NPC
+- duplicate(Water Sand0#mal) Water Sand6#mal FAKE_NPC
+- duplicate(Water Sand0#mal) Water Sand7#mal FAKE_NPC
+- duplicate(Water Sand0#mal) Water Sand8#mal FAKE_NPC
+- duplicate(Water Sand0#mal) Water Sand9#mal FAKE_NPC
+- duplicate(Water Sand0#mal) Water Sand10#mal FAKE_NPC
mal_dun01,136,120,6 script Linguist Devore#mald 4_CAT_MERMASTER,{
end;
@@ -2602,7 +2602,7 @@ mal_dun01,133,125,5 script Star Candy#mal 4_F_STARFISHGIRL,{
close;
}
-- script #skin_mal -1,{
+- script #skin_mal FAKE_NPC,{
.@index = atoi(strnpcinfo(2));
switch(.@index) {
case 29: .@str$ = "dry"; break;
@@ -3172,7 +3172,7 @@ malangdo,197,120,5 script A Foolish Cat#ml 4_CAT_SAILOR3,{
close;
}
-malangdo,196,120,0 script #ml1 -1,2,2,{
+malangdo,196,120,0 script #ml1 FAKE_NPC,2,2,{
OnTouch:
if (malang_bad_guys == 1 || malang_bad_guys == 2) {
mes "You hear a conversation between the Suspious Dealers.";
@@ -3231,7 +3231,7 @@ OnTouch:
end;
}
-malangdo,155,179,0 script #ml2 -1,2,2,{
+malangdo,155,179,0 script #ml2 FAKE_NPC,2,2,{
OnTouch:
if (malang_bad_guys == 2 || malang_bad_guys == 3) {
mes "There's a memo.";
@@ -3388,7 +3388,7 @@ mal_in02,184,72,3 script Gozangee#ml 4_CAT_SAILOR4,{
close;
}
-mal_in02,184,77,0 script #ml3 -1,2,2,{
+mal_in02,184,77,0 script #ml3 FAKE_NPC,2,2,{
OnTouch:
if (checkweight(Knife,1) == 0) {
mes "- You have too many items. -";
@@ -5481,7 +5481,7 @@ L_Viewpoint:
return;
}
-- script #malangdo_compass -1,{
+- script #malangdo_compass FAKE_NPC,{
if (countitem(Bravery_Card_A) == 0) {
mes "There is a strange machine.";
mes "This is the Duruduru compass from the Meow Bravery Team.";
diff --git a/npc/re/quests/quests_malaya.txt b/npc/re/quests/quests_malaya.txt
index b125b4e3a..57c0eb8be 100644
--- a/npc/re/quests/quests_malaya.txt
+++ b/npc/re/quests/quests_malaya.txt
@@ -4529,7 +4529,7 @@ OnInit:
end;
}
-- script Unknown Trace#buwaya -1,{
+- script Unknown Trace#buwaya FAKE_NPC,{
if (checkweight(Knife,1) == 0 || MaxWeight - Weight < 2000) {
mes "- Wait!! -";
mes "- You have too many items on you. -";
@@ -5881,7 +5881,7 @@ malaya,283,265,4 script Village Chief#bako2 4_BARYO_CHIEF,{
}
}
-ma_fild01,1,1,0 script malaya_ma_fild01_mon -1,{
+ma_fild01,1,1,0 script malaya_ma_fild01_mon FAKE_NPC,{
OnInit:
enablenpc "malaya_ma_fild01_mon";
donpcevent "malaya_ma_fild01_mon::OnEnable";
@@ -7915,7 +7915,7 @@ malaya,53,68,4 script Bushes#ma CLEAR_NPC,{
}
}
-- script Suspicious Wooden Stick::MalayaStick -1,{
+- script Suspicious Wooden Stick::MalayaStick FAKE_NPC,{
if (checkweight(Knife,1) == 0) {
mes "- Wait !! -";
mes "- You have too many items. -";
@@ -7986,7 +7986,7 @@ malaya,48,79,4 duplicate(MalayaStick) Suspicious Wooden Stick::MalayaStick8 4_BU
malaya,50,46,4 duplicate(MalayaStick) Suspicious Wooden Stick::MalayaStick9 4_BULLETIN_BOARD2
malaya,59,84,4 duplicate(MalayaStick) Suspicious Wooden Stick::MalayaStick10 4_BULLETIN_BOARD2
-- script Tent#ma -1,{ //557
+- script Tent#ma FAKE_NPC,{ //557
end;
OnInit:
disablenpc strnpcinfo(0);
@@ -8007,16 +8007,16 @@ OnTimer30000:
donpcevent strnpcinfo(0)+"::OnDisable";
end;
}
-- duplicate(Tent#ma) Tent1#ma -1
-- duplicate(Tent#ma) Tent2#ma -1
-- duplicate(Tent#ma) Tent3#ma -1
-- duplicate(Tent#ma) Tent4#ma -1
-- duplicate(Tent#ma) Tent5#ma -1
-- duplicate(Tent#ma) Tent6#ma -1
-- duplicate(Tent#ma) Tent7#ma -1
-- duplicate(Tent#ma) Tent8#ma -1
-- duplicate(Tent#ma) Tent9#ma -1
-- duplicate(Tent#ma) Tent10#ma -1
+- duplicate(Tent#ma) Tent1#ma FAKE_NPC
+- duplicate(Tent#ma) Tent2#ma FAKE_NPC
+- duplicate(Tent#ma) Tent3#ma FAKE_NPC
+- duplicate(Tent#ma) Tent4#ma FAKE_NPC
+- duplicate(Tent#ma) Tent5#ma FAKE_NPC
+- duplicate(Tent#ma) Tent6#ma FAKE_NPC
+- duplicate(Tent#ma) Tent7#ma FAKE_NPC
+- duplicate(Tent#ma) Tent8#ma FAKE_NPC
+- duplicate(Tent#ma) Tent9#ma FAKE_NPC
+- duplicate(Tent#ma) Tent10#ma FAKE_NPC
malaya,114,183,3 script Bent Old Lady#ma 4_F_BARYO_OLD,{
if (malaya_bang == 16) {
diff --git a/npc/re/quests/quests_mora.txt b/npc/re/quests/quests_mora.txt
index d89333583..cdd405363 100644
--- a/npc/re/quests/quests_mora.txt
+++ b/npc/re/quests/quests_mora.txt
@@ -377,7 +377,7 @@ OnTouch:
end;
}
-- script #mora_bush -1,{
+- script #mora_bush FAKE_NPC,{
if (ep14_1_bs != 3 || rand(5)) {
mes "- It's just an ordinary bush. -";
close;
@@ -409,7 +409,7 @@ OnDisable:
end;
}
-- script #mora_pouch -1,{
+- script #mora_pouch FAKE_NPC,{
end;
OnTouch:
.@i = atoi(charat(strnpcinfo(2),9));
@@ -449,7 +449,7 @@ OnTouch:
end;
}
-- script #mora_fairy -1,{
+- script #mora_fairy FAKE_NPC,{
end;
OnInit:
disablenpc strnpcinfo(0);
@@ -504,7 +504,7 @@ spl_fild02,186,260,6 duplicate(#mora_fairy) Fairy#cmd61 4_F_FAIRYKID5
spl_fild02,186,260,6 duplicate(#mora_fairy) Fairy#cmd62 4_M_FAIRYKID4
spl_fild02,186,260,6 duplicate(#mora_fairy) Fairy#cmd63 4_F_FAIRYKID4
-- script #mora_bush_timer -1,{
+- script #mora_bush_timer FAKE_NPC,{
end;
OnInit:
disablenpc strnpcinfo(0);
@@ -4094,7 +4094,7 @@ OnFullon:
end;
}
-- script ???#mora -1,{
+- script ???#mora FAKE_NPC,{
if (questprogress(5019)) {
mes "You find an area emitting a distinct aura.";
mes "You may be able to collect bath water samples.";
@@ -4236,7 +4236,7 @@ mora,113,84,0 duplicate(???#mora) ???#ep14_muk03 CLEAR_NPC,2,2
mora,116,81,0 duplicate(???#mora) ???#ep14_muk04 CLEAR_NPC,2,2
mora,118,86,0 duplicate(???#mora) ???#ep14_muk05 CLEAR_NPC,2,2
-- script #mora_puddle -1,{
+- script #mora_puddle FAKE_NPC,{
.@i = atoi(charat(strnpcinfo(2),9));
// This script has a lot of checks,
diff --git a/npc/re/quests/quests_morocc.txt b/npc/re/quests/quests_morocc.txt
index 1ca46c5d9..eb5b8f27c 100644
--- a/npc/re/quests/quests_morocc.txt
+++ b/npc/re/quests/quests_morocc.txt
@@ -33,7 +33,7 @@
//=========================================================================
//== Resurrection of Satan Morroc ==========================
-- script Continental Guard#man -1,{
+- script Continental Guard#man FAKE_NPC,{
mes "[Continental Guard]";
mes "We've received orders from Headquarters to block access to this area since an unusual space-time phenomenon has been detected.";
next;
diff --git a/npc/re/scripts.conf b/npc/re/scripts.conf
index 706c4bb85..b03ebe46a 100644
--- a/npc/re/scripts.conf
+++ b/npc/re/scripts.conf
@@ -31,6 +31,9 @@
//================= Airport ===============================================
npc: npc/re/airports/izlude.txt
+//================ Battlegrounds ==========================================
+npc: npc/re/battleground/bg_common.txt
+
//================= Cities ================================================
npc: npc/re/cities/alberta.txt
npc: npc/re/cities/brasilis.txt
diff --git a/npc/re/warps/cities/dicastes.txt b/npc/re/warps/cities/dicastes.txt
index 5d0388b1c..0d8922e51 100644
--- a/npc/re/warps/cities/dicastes.txt
+++ b/npc/re/warps/cities/dicastes.txt
@@ -65,7 +65,7 @@ dic_in01,242,182,0 script #eldicastes0016 CLEAR_NPC,{
}
// Elevators
-- script Elevator#main -1,{
+- script Elevator#main FAKE_NPC,{
.@n = atoi(strnpcinfo(2));
.@eq = (isequipped(2782))?1:0;
if (.@n <= 4) {
diff --git a/npc/re/warps/fields/bif_fild.txt b/npc/re/warps/fields/bif_fild.txt
index ccf245994..581cceb62 100644
--- a/npc/re/warps/fields/bif_fild.txt
+++ b/npc/re/warps/fields/bif_fild.txt
@@ -39,7 +39,7 @@ mora,182,74,0 warp bifrost_field0003 1,1,bif_fild02,286,327
mora,20,159,0 warp bifrost_field0004 1,1,bif_fild02,99,308
mora,56,25,0 warp bifrost_field0005 1,1,bif_fild02,176,162
-- script bifrost_field0000 -1,{
+- script bifrost_field0000 FAKE_NPC,{
mes "At the end of the small path through the bright flower garden";
mes "is an entrance to something that looks like a small hill.";
next;
diff --git a/npc/re/woe-fe/invest_main.txt b/npc/re/woe-fe/invest_main.txt
index ed02b7d9a..534c3ddef 100644
--- a/npc/re/woe-fe/invest_main.txt
+++ b/npc/re/woe-fe/invest_main.txt
@@ -74,7 +74,7 @@
//== Investment Functions & Controller =====================
// Note: The times in this section are almost entirely custom.
-- script #invest_timer -1,{
+- script #invest_timer FAKE_NPC,{
OnClock0000: // Open investments on Wed (1 hour after WoE)
if (gettime(GETTIME_WEEKDAY) == WEDNESDAY && !agitcheck()) {
$2011_agit_invest = 1;
@@ -705,7 +705,7 @@ OnAgitInvest:
*/
//== Realms - Merchant Guilds, Gate Managers, Status Boards =
-- script Cat Paw Merchant Guild -1,{
+- script Cat Paw Merchant Guild FAKE_NPC,{
if (compare(strnpcinfo(4),"alde")) {
.@npc$ = "alde";
@@ -947,7 +947,7 @@ OnAgitInvest:
}
}
-- script Gate Manager#realm -1,{
+- script Gate Manager#realm FAKE_NPC,{
if (compare(strnpcinfo(4),"alde")) {
.@npc$ = "alde";
@@ -1028,7 +1028,7 @@ OnAgitInvest:
end;
}
-- script Investment Status Board -1,{
+- script Investment Status Board FAKE_NPC,{
.@invest_status = callfunc("F_Invest_Status");
if (.@invest_status == 1) {
if (compare(strnpcinfo(4),"alde")) {
@@ -1096,7 +1096,7 @@ OnAgitInvest:
}
//== Inside Castles - Gate Managers ========================
-- script Gate Manager#castle -1,{
+- script Gate Manager#castle FAKE_NPC,{
.@id = atoi(charat(strnpcinfo(2),getstrlen(strnpcinfo(2))-1));
if (compare(strnpcinfo(2),"alde")) {
diff --git a/npc/woe-fe/agit_controller.txt b/npc/woe-fe/agit_controller.txt
index 8572a268a..be7e07d14 100644
--- a/npc/woe-fe/agit_controller.txt
+++ b/npc/woe-fe/agit_controller.txt
@@ -43,7 +43,7 @@
//=========================================================================
//== WoE Start/Stop times ==================================
-- script Agit_Event -1,{
+- script Agit_Event FAKE_NPC,{
end;
OnClock2100: //start time for Tues(2), Thurs(4)
diff --git a/npc/woe-fe/agit_main.txt b/npc/woe-fe/agit_main.txt
index f7144b9b3..06a80cde3 100644
--- a/npc/woe-fe/agit_main.txt
+++ b/npc/woe-fe/agit_main.txt
@@ -58,7 +58,7 @@
//=========================================================================
//== WoE : Main Functions ==================================
-- script Gld_Agit_Manager::Gld_Agit_Manager -1,{
+- script Gld_Agit_Manager::Gld_Agit_Manager FAKE_NPC,{
end;
// War of Emperium has started.
@@ -316,7 +316,7 @@ OnRecvCastle:
}
//== WoE : Guild Kafras ====================================
-- script Kafra Staff#woe::guildkafra -1,{
+- script Kafra Staff#woe::guildkafra FAKE_NPC,{
.@GID = getcastledata(strnpcinfo(2),1);
@@ -464,7 +464,7 @@ OnRecvCastle:
}
//== WoE : Castle Managers =================================
-- script Castle Manager#cm::cm -1,{
+- script Castle Manager#cm::cm FAKE_NPC,{
.@GID = getcastledata(strnpcinfo(2),1);
@@ -915,7 +915,7 @@ OnRecvCastle:
}
//== WoE : Guild Dungeon Entrances =========================
-- script Lever#gd::gdlever -1,{
+- script Lever#gd::gdlever FAKE_NPC,{
.@GID = getcastledata(strnpcinfo(2),1);
@@ -982,7 +982,7 @@ OnRecvCastle:
}
//== Guardian Spawner Template =============================
-- script Gld_Guard_Template::Gld_Guard_Template -1,{
+- script Gld_Guard_Template::Gld_Guard_Template FAKE_NPC,{
// Spawn Guardians in castles
// When adding new castles, ensure that the coordinates coincide with the
// coordinates defined in the Guild Steward template.
@@ -1122,7 +1122,7 @@ OnGuardianDied:
}
//== Treasure Room Spawn Template ==========================
-- script Gld_Trea_Spawn::Gld_Trea_Spawn -1,{
+- script Gld_Trea_Spawn::Gld_Trea_Spawn FAKE_NPC,{
end;
OnClock0001:
diff --git a/npc/woe-fe/aldeg_cas01.txt b/npc/woe-fe/aldeg_cas01.txt
index 8b9c5c5aa..c87cd3580 100644
--- a/npc/woe-fe/aldeg_cas01.txt
+++ b/npc/woe-fe/aldeg_cas01.txt
@@ -144,10 +144,10 @@ aldeg_cas01,123,223,0 script #lever_A01 HIDDEN_NPC,{
aldeg_cas01,211,181,0 duplicate(gdlever) #aldeg_cas01 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-aldeg_cas01,118,223,0 duplicate(Gld_Trea_Spawn) Treasure#aldeg_cas01 -1
+aldeg_cas01,118,223,0 duplicate(Gld_Trea_Spawn) Treasure#aldeg_cas01 FAKE_NPC
//== AGIT Manager ==========================================
-aldeg_cas01,216,24,0 duplicate(Gld_Agit_Manager) Agit#aldeg_cas01 -1
+aldeg_cas01,216,24,0 duplicate(Gld_Agit_Manager) Agit#aldeg_cas01 FAKE_NPC
//== Guardians =============================================
-aldeg_cas01,218,175,0 duplicate(Gld_Guard_Template) Guardian#aldeg_cas01 -1
+aldeg_cas01,218,175,0 duplicate(Gld_Guard_Template) Guardian#aldeg_cas01 FAKE_NPC
diff --git a/npc/woe-fe/aldeg_cas02.txt b/npc/woe-fe/aldeg_cas02.txt
index decdc4e9a..ac475a085 100644
--- a/npc/woe-fe/aldeg_cas02.txt
+++ b/npc/woe-fe/aldeg_cas02.txt
@@ -138,10 +138,10 @@ aldeg_cas02,139,234,0 script #lever_A02 HIDDEN_NPC,{
aldeg_cas02,194,136,0 duplicate(gdlever) #aldeg_cas02 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-aldeg_cas02,135,230,0 duplicate(Gld_Trea_Spawn) Treasure#aldeg_cas02 -1
+aldeg_cas02,135,230,0 duplicate(Gld_Trea_Spawn) Treasure#aldeg_cas02 FAKE_NPC
//== AGIT Manager ==========================================
-aldeg_cas02,214,24,0 duplicate(Gld_Agit_Manager) Agit#aldeg_cas02 -1
+aldeg_cas02,214,24,0 duplicate(Gld_Agit_Manager) Agit#aldeg_cas02 FAKE_NPC
//== Guardians =============================================
-aldeg_cas02,78,74,0 duplicate(Gld_Guard_Template) Guardian#aldeg_cas02 -1
+aldeg_cas02,78,74,0 duplicate(Gld_Guard_Template) Guardian#aldeg_cas02 FAKE_NPC
diff --git a/npc/woe-fe/aldeg_cas03.txt b/npc/woe-fe/aldeg_cas03.txt
index d421efccd..1d76b5b26 100644
--- a/npc/woe-fe/aldeg_cas03.txt
+++ b/npc/woe-fe/aldeg_cas03.txt
@@ -141,10 +141,10 @@ aldeg_cas03,229,267,0 script #lever_A03 HIDDEN_NPC,{
aldeg_cas03,200,177,0 duplicate(gdlever) #aldeg_cas03 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-aldeg_cas03,225,269,0 duplicate(Gld_Trea_Spawn) Treasure#aldeg_cas03 -1
+aldeg_cas03,225,269,0 duplicate(Gld_Trea_Spawn) Treasure#aldeg_cas03 FAKE_NPC
//== AGIT Manager ==========================================
-aldeg_cas03,206,32,0 duplicate(Gld_Agit_Manager) Agit#aldeg_cas03 -1
+aldeg_cas03,206,32,0 duplicate(Gld_Agit_Manager) Agit#aldeg_cas03 FAKE_NPC
//== Guardians =============================================
-aldeg_cas03,110,118,0 duplicate(Gld_Guard_Template) Guardian#aldeg_cas03 -1
+aldeg_cas03,110,118,0 duplicate(Gld_Guard_Template) Guardian#aldeg_cas03 FAKE_NPC
diff --git a/npc/woe-fe/aldeg_cas04.txt b/npc/woe-fe/aldeg_cas04.txt
index 8c84e24fd..3485889be 100644
--- a/npc/woe-fe/aldeg_cas04.txt
+++ b/npc/woe-fe/aldeg_cas04.txt
@@ -141,10 +141,10 @@ aldeg_cas04,83,17,0 script #lever_A04 HIDDEN_NPC,{
aldeg_cas04,76,64,0 duplicate(gdlever) #aldeg_cas04 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-aldeg_cas04,84,13,0 duplicate(Gld_Trea_Spawn) Treasure#aldeg_cas04 -1
+aldeg_cas04,84,13,0 duplicate(Gld_Trea_Spawn) Treasure#aldeg_cas04 FAKE_NPC
//== AGIT Manager ==========================================
-aldeg_cas04,36,218,0 duplicate(Gld_Agit_Manager) Agit#aldeg_cas04 -1
+aldeg_cas04,36,218,0 duplicate(Gld_Agit_Manager) Agit#aldeg_cas04 FAKE_NPC
//== Guardians =============================================
-aldeg_cas04,67,116,0 duplicate(Gld_Guard_Template) Guardian#aldeg_cas04 -1
+aldeg_cas04,67,116,0 duplicate(Gld_Guard_Template) Guardian#aldeg_cas04 FAKE_NPC
diff --git a/npc/woe-fe/aldeg_cas05.txt b/npc/woe-fe/aldeg_cas05.txt
index 29f5b39fa..11e8dfb03 100644
--- a/npc/woe-fe/aldeg_cas05.txt
+++ b/npc/woe-fe/aldeg_cas05.txt
@@ -140,10 +140,10 @@ aldeg_cas05,64,8,0 script #lever_A05 HIDDEN_NPC,{
aldeg_cas05,22,205,0 duplicate(gdlever) #aldeg_cas05 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-aldeg_cas05,62,12,0 duplicate(Gld_Trea_Spawn) Treasure#aldeg_cas05 -1
+aldeg_cas05,62,12,0 duplicate(Gld_Trea_Spawn) Treasure#aldeg_cas05 FAKE_NPC
//== AGIT Manager ==========================================
-aldeg_cas05,28,102,0 duplicate(Gld_Agit_Manager) Agit#aldeg_cas05 -1
+aldeg_cas05,28,102,0 duplicate(Gld_Agit_Manager) Agit#aldeg_cas05 FAKE_NPC
//== Guardians =============================================
-aldeg_cas05,52,179,0 duplicate(Gld_Guard_Template) Guardian#aldeg_cas05 -1
+aldeg_cas05,52,179,0 duplicate(Gld_Guard_Template) Guardian#aldeg_cas05 FAKE_NPC
diff --git a/npc/woe-fe/gefg_cas01.txt b/npc/woe-fe/gefg_cas01.txt
index 9676f7288..a9f4cf64d 100644
--- a/npc/woe-fe/gefg_cas01.txt
+++ b/npc/woe-fe/gefg_cas01.txt
@@ -132,10 +132,10 @@ gefg_cas01,152,117,0 script #lever_G01 HIDDEN_NPC,{
gefg_cas01,78,84,0 duplicate(gdlever) #gefg_cas01 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-gefg_cas01,154,112,0 duplicate(Gld_Trea_Spawn) Treasure#gefg_cas01 -1
+gefg_cas01,154,112,0 duplicate(Gld_Trea_Spawn) Treasure#gefg_cas01 FAKE_NPC
//== AGIT Manager ==========================================
-gefg_cas01,198,182,0 duplicate(Gld_Agit_Manager) Agit#gefg_cas01 -1
+gefg_cas01,198,182,0 duplicate(Gld_Agit_Manager) Agit#gefg_cas01 FAKE_NPC
//== Guardians =============================================
-gefg_cas01,40,48,5 duplicate(Gld_Guard_Template) Guardian#gefg_cas01 -1
+gefg_cas01,40,48,5 duplicate(Gld_Guard_Template) Guardian#gefg_cas01 FAKE_NPC
diff --git a/npc/woe-fe/gefg_cas02.txt b/npc/woe-fe/gefg_cas02.txt
index 13ce42a8c..906a4f100 100644
--- a/npc/woe-fe/gefg_cas02.txt
+++ b/npc/woe-fe/gefg_cas02.txt
@@ -133,10 +133,10 @@ gefg_cas02,145,114,0 script #lever_G02 HIDDEN_NPC,{
gefg_cas02,167,40,0 duplicate(gdlever) #gefg_cas02 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-gefg_cas02,140,116,0 duplicate(Gld_Trea_Spawn) Treasure#gefg_cas02 -1
+gefg_cas02,140,116,0 duplicate(Gld_Trea_Spawn) Treasure#gefg_cas02 FAKE_NPC
//== AGIT Manager ==========================================
-gefg_cas02,176,178,0 duplicate(Gld_Agit_Manager) Agit#gefg_cas02 -1
+gefg_cas02,176,178,0 duplicate(Gld_Agit_Manager) Agit#gefg_cas02 FAKE_NPC
//== Guardians =============================================
-gefg_cas02,12,66,5 duplicate(Gld_Guard_Template) Guardian#gefg_cas02 -1
+gefg_cas02,12,66,5 duplicate(Gld_Guard_Template) Guardian#gefg_cas02 FAKE_NPC
diff --git a/npc/woe-fe/gefg_cas03.txt b/npc/woe-fe/gefg_cas03.txt
index 027253778..d4fd86d87 100644
--- a/npc/woe-fe/gefg_cas03.txt
+++ b/npc/woe-fe/gefg_cas03.txt
@@ -136,10 +136,10 @@ gefg_cas03,275,289,0 script #lever_G03 HIDDEN_NPC,{
gefg_cas03,221,43,0 duplicate(gdlever) #gefg_cas03 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-gefg_cas03,271,290,0 duplicate(Gld_Trea_Spawn) Treasure#gefg_cas03 -1
+gefg_cas03,271,290,0 duplicate(Gld_Trea_Spawn) Treasure#gefg_cas03 FAKE_NPC
//== AGIT Manager ==========================================
-gefg_cas03,245,167,0 duplicate(Gld_Agit_Manager) Agit#gefg_cas03 -1
+gefg_cas03,245,167,0 duplicate(Gld_Agit_Manager) Agit#gefg_cas03 FAKE_NPC
//== Guardians =============================================
-gefg_cas03,106,23,5 duplicate(Gld_Guard_Template) Guardian#gefg_cas03 -1
+gefg_cas03,106,23,5 duplicate(Gld_Guard_Template) Guardian#gefg_cas03 FAKE_NPC
diff --git a/npc/woe-fe/gefg_cas04.txt b/npc/woe-fe/gefg_cas04.txt
index 04717cace..0206f2a24 100644
--- a/npc/woe-fe/gefg_cas04.txt
+++ b/npc/woe-fe/gefg_cas04.txt
@@ -132,10 +132,10 @@ gefg_cas04,116,123,0 script #lever_G04 HIDDEN_NPC,{
gefg_cas04,58,75,0 duplicate(gdlever) #gefg_cas04 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-gefg_cas04,116,119,0 duplicate(Gld_Trea_Spawn) Treasure#gefg_cas04 -1
+gefg_cas04,116,119,0 duplicate(Gld_Trea_Spawn) Treasure#gefg_cas04 FAKE_NPC
//== AGIT Manager ==========================================
-gefg_cas04,174,178,0 duplicate(Gld_Agit_Manager) Agit#gefg_cas04 -1
+gefg_cas04,174,178,0 duplicate(Gld_Agit_Manager) Agit#gefg_cas04 FAKE_NPC
//== Guardians =============================================
-gefg_cas04,73,46,3 duplicate(Gld_Guard_Template) Guardian#gefg_cas04 -1
+gefg_cas04,73,46,3 duplicate(Gld_Guard_Template) Guardian#gefg_cas04 FAKE_NPC
diff --git a/npc/woe-fe/gefg_cas05.txt b/npc/woe-fe/gefg_cas05.txt
index 540fca802..78162b6d3 100644
--- a/npc/woe-fe/gefg_cas05.txt
+++ b/npc/woe-fe/gefg_cas05.txt
@@ -132,10 +132,10 @@ gefg_cas05,149,107,0 script #lever_G05 HIDDEN_NPC,{
gefg_cas05,65,22,0 duplicate(gdlever) #gefg_cas05 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-gefg_cas05,144,110,0 duplicate(Gld_Trea_Spawn) Treasure#gefg_cas05 -1
+gefg_cas05,144,110,0 duplicate(Gld_Trea_Spawn) Treasure#gefg_cas05 FAKE_NPC
//== AGIT Manager ==========================================
-gefg_cas05,194,184,0 duplicate(Gld_Agit_Manager) Agit#gefg_cas05 -1
+gefg_cas05,194,184,0 duplicate(Gld_Agit_Manager) Agit#gefg_cas05 FAKE_NPC
//== Guardians =============================================
-gefg_cas05,70,52,3 duplicate(Gld_Guard_Template) Guardian#gefg_cas05 -1
+gefg_cas05,70,52,3 duplicate(Gld_Guard_Template) Guardian#gefg_cas05 FAKE_NPC
diff --git a/npc/woe-fe/payg_cas01.txt b/npc/woe-fe/payg_cas01.txt
index 4ad4fba91..fa3640ea9 100644
--- a/npc/woe-fe/payg_cas01.txt
+++ b/npc/woe-fe/payg_cas01.txt
@@ -133,10 +133,10 @@ payg_cas01,295,8,0 script #lever_PA01 HIDDEN_NPC,{
payg_cas01,101,25,0 duplicate(gdlever) #payg_cas01 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-payg_cas01,291,8,0 duplicate(Gld_Trea_Spawn) Treasure#payg_cas01 -1
+payg_cas01,291,8,0 duplicate(Gld_Trea_Spawn) Treasure#payg_cas01 FAKE_NPC
//== AGIT Manager ==========================================
-payg_cas01,139,139,0 duplicate(Gld_Agit_Manager) Agit#payg_cas01 -1
+payg_cas01,139,139,0 duplicate(Gld_Agit_Manager) Agit#payg_cas01 FAKE_NPC
//== Guardians =============================================
-payg_cas01,120,58,4 duplicate(Gld_Guard_Template) Guardian#payg_cas01 -1
+payg_cas01,120,58,4 duplicate(Gld_Guard_Template) Guardian#payg_cas01 FAKE_NPC
diff --git a/npc/woe-fe/payg_cas02.txt b/npc/woe-fe/payg_cas02.txt
index fddb1e540..c60325303 100644
--- a/npc/woe-fe/payg_cas02.txt
+++ b/npc/woe-fe/payg_cas02.txt
@@ -134,10 +134,10 @@ payg_cas02,149,149,0 script #lever_PA02 HIDDEN_NPC,{
payg_cas02,278,247,0 duplicate(gdlever) #payg_cas02 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-payg_cas02,145,144,0 duplicate(Gld_Trea_Spawn) Treasure#payg_cas02 -1
+payg_cas02,145,144,0 duplicate(Gld_Trea_Spawn) Treasure#payg_cas02 FAKE_NPC
//== AGIT Manager ==========================================
-payg_cas02,39,25,0 duplicate(Gld_Agit_Manager) Agit#payg_cas02 -1
+payg_cas02,39,25,0 duplicate(Gld_Agit_Manager) Agit#payg_cas02 FAKE_NPC
//== Guardians =============================================
-payg_cas02,22,260,7 duplicate(Gld_Guard_Template) Guardian#payg_cas02 -1
+payg_cas02,22,260,7 duplicate(Gld_Guard_Template) Guardian#payg_cas02 FAKE_NPC
diff --git a/npc/woe-fe/payg_cas03.txt b/npc/woe-fe/payg_cas03.txt
index e4c31541f..ae4344eb8 100644
--- a/npc/woe-fe/payg_cas03.txt
+++ b/npc/woe-fe/payg_cas03.txt
@@ -133,10 +133,10 @@ payg_cas03,163,167,0 script #lever_PA03 HIDDEN_NPC,{
payg_cas03,38,42,0 duplicate(gdlever) #payg_cas03 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-payg_cas03,159,168,0 duplicate(Gld_Trea_Spawn) Treasure#payg_cas03 -1
+payg_cas03,159,168,0 duplicate(Gld_Trea_Spawn) Treasure#payg_cas03 FAKE_NPC
//== AGIT Manager ==========================================
-payg_cas03,269,265,0 duplicate(Gld_Agit_Manager) Agit#payg_cas03 -1
+payg_cas03,269,265,0 duplicate(Gld_Agit_Manager) Agit#payg_cas03 FAKE_NPC
//== Guardians =============================================
-payg_cas03,10,277,0 duplicate(Gld_Guard_Template) Guardian#payg_cas03 -1
+payg_cas03,10,277,0 duplicate(Gld_Guard_Template) Guardian#payg_cas03 FAKE_NPC
diff --git a/npc/woe-fe/payg_cas04.txt b/npc/woe-fe/payg_cas04.txt
index cc2080fe0..a6d0d3dbe 100644
--- a/npc/woe-fe/payg_cas04.txt
+++ b/npc/woe-fe/payg_cas04.txt
@@ -134,10 +134,10 @@ payg_cas04,151,47,0 script #lever_PA04 HIDDEN_NPC,{
payg_cas04,52,48,0 duplicate(gdlever) #payg_cas04 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-payg_cas04,147,48,0 duplicate(Gld_Trea_Spawn) Treasure#payg_cas04 -1
+payg_cas04,147,48,0 duplicate(Gld_Trea_Spawn) Treasure#payg_cas04 FAKE_NPC
//== AGIT Manager ==========================================
-payg_cas04,271,29,0 duplicate(Gld_Agit_Manager) Agit#payg_cas04 -1
+payg_cas04,271,29,0 duplicate(Gld_Agit_Manager) Agit#payg_cas04 FAKE_NPC
//== Guardians =============================================
-payg_cas04,38,284,3 duplicate(Gld_Guard_Template) Guardian#payg_cas04 -1
+payg_cas04,38,284,3 duplicate(Gld_Guard_Template) Guardian#payg_cas04 FAKE_NPC
diff --git a/npc/woe-fe/payg_cas05.txt b/npc/woe-fe/payg_cas05.txt
index 15f7d883a..849b2115b 100644
--- a/npc/woe-fe/payg_cas05.txt
+++ b/npc/woe-fe/payg_cas05.txt
@@ -133,10 +133,10 @@ payg_cas05,161,136,0 script #lever_PA05 HIDDEN_NPC,{
payg_cas05,249,15,0 duplicate(gdlever) #payg_cas05 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-payg_cas05,157,132,0 duplicate(Gld_Trea_Spawn) Treasure#payg_cas05 -1
+payg_cas05,157,132,0 duplicate(Gld_Trea_Spawn) Treasure#payg_cas05 FAKE_NPC
//== AGIT Manager ==========================================
-payg_cas05,30,30,0 duplicate(Gld_Agit_Manager) Agit#payg_cas05 -1
+payg_cas05,30,30,0 duplicate(Gld_Agit_Manager) Agit#payg_cas05 FAKE_NPC
//== Guardians =============================================
-payg_cas05,277,249,3 duplicate(Gld_Guard_Template) Guardian#payg_cas05 -1
+payg_cas05,277,249,3 duplicate(Gld_Guard_Template) Guardian#payg_cas05 FAKE_NPC
diff --git a/npc/woe-fe/prtg_cas01.txt b/npc/woe-fe/prtg_cas01.txt
index d17f94bad..b3cf8e641 100644
--- a/npc/woe-fe/prtg_cas01.txt
+++ b/npc/woe-fe/prtg_cas01.txt
@@ -136,10 +136,10 @@ prtg_cas01,15,208,0 script #Lever_PR01 HIDDEN_NPC,{
prtg_cas01,94,200,0 duplicate(gdlever) #prtg_cas01 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-prtg_cas01,11,208,0 duplicate(Gld_Trea_Spawn) Treasure#prtg_cas01 -1
+prtg_cas01,11,208,0 duplicate(Gld_Trea_Spawn) Treasure#prtg_cas01 FAKE_NPC
//== AGIT Manager ==========================================
-prtg_cas01,197,197,0 duplicate(Gld_Agit_Manager) Agit#prtg_cas01 -1
+prtg_cas01,197,197,0 duplicate(Gld_Agit_Manager) Agit#prtg_cas01 FAKE_NPC
//== Guardians =============================================
-prtg_cas01,112,181,0 duplicate(Gld_Guard_Template) Guardian#prtg_cas01 -1
+prtg_cas01,112,181,0 duplicate(Gld_Guard_Template) Guardian#prtg_cas01 FAKE_NPC
diff --git a/npc/woe-fe/prtg_cas02.txt b/npc/woe-fe/prtg_cas02.txt
index 9187461f2..798393039 100644
--- a/npc/woe-fe/prtg_cas02.txt
+++ b/npc/woe-fe/prtg_cas02.txt
@@ -138,10 +138,10 @@ prtg_cas02,207,228,0 script #Lever_PR02 HIDDEN_NPC,{
prtg_cas02,84,72,0 duplicate(gdlever) #prtg_cas02 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-prtg_cas02,202,228,0 duplicate(Gld_Trea_Spawn) Treasure#prtg_cas02 -1
+prtg_cas02,202,228,0 duplicate(Gld_Trea_Spawn) Treasure#prtg_cas02 FAKE_NPC
//== AGIT Manager ==========================================
-prtg_cas02,158,174,0 duplicate(Gld_Agit_Manager) Agit#prtg_cas02 -1
+prtg_cas02,158,174,0 duplicate(Gld_Agit_Manager) Agit#prtg_cas02 FAKE_NPC
//== Guardians =============================================
-prtg_cas02,94,61,4 duplicate(Gld_Guard_Template) Guardian#prtg_cas02 -1
+prtg_cas02,94,61,4 duplicate(Gld_Guard_Template) Guardian#prtg_cas02 FAKE_NPC
diff --git a/npc/woe-fe/prtg_cas03.txt b/npc/woe-fe/prtg_cas03.txt
index 6ff0e7841..a92edea60 100644
--- a/npc/woe-fe/prtg_cas03.txt
+++ b/npc/woe-fe/prtg_cas03.txt
@@ -136,10 +136,10 @@ prtg_cas03,193,130,0 script #Lever_PR03 HIDDEN_NPC,{
prtg_cas03,5,70,0 duplicate(gdlever) #prtg_cas03 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-prtg_cas03,189,132,0 duplicate(Gld_Trea_Spawn) Treasure#prtg_cas03 -1
+prtg_cas03,189,132,0 duplicate(Gld_Trea_Spawn) Treasure#prtg_cas03 FAKE_NPC
//== AGIT Manager ==========================================
-prtg_cas03,17,221,0 duplicate(Gld_Agit_Manager) Agit#prtg_cas03 -1
+prtg_cas03,17,221,0 duplicate(Gld_Agit_Manager) Agit#prtg_cas03 FAKE_NPC
//== Guardians =============================================
-prtg_cas03,51,100,4 duplicate(Gld_Guard_Template) Guardian#prtg_cas03 -1
+prtg_cas03,51,100,4 duplicate(Gld_Guard_Template) Guardian#prtg_cas03 FAKE_NPC
diff --git a/npc/woe-fe/prtg_cas04.txt b/npc/woe-fe/prtg_cas04.txt
index cc429db95..e9137911f 100644
--- a/npc/woe-fe/prtg_cas04.txt
+++ b/npc/woe-fe/prtg_cas04.txt
@@ -136,10 +136,10 @@ prtg_cas04,275,160,0 script #Lever_PR04 HIDDEN_NPC,{
prtg_cas04,56,283,0 duplicate(gdlever) #prtg_cas04 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-prtg_cas04,271,162,0 duplicate(Gld_Trea_Spawn) Treasure#prtg_cas04 -1
+prtg_cas04,271,162,0 duplicate(Gld_Trea_Spawn) Treasure#prtg_cas04 FAKE_NPC
//== AGIT Manager ==========================================
-prtg_cas04,292,14,0 duplicate(Gld_Agit_Manager) Agit#prtg_cas04 -1
+prtg_cas04,292,14,0 duplicate(Gld_Agit_Manager) Agit#prtg_cas04 FAKE_NPC
//== Guardians =============================================
-prtg_cas04,259,265,4 duplicate(Gld_Guard_Template) Guardian#prtg_cas04 -1
+prtg_cas04,259,265,4 duplicate(Gld_Guard_Template) Guardian#prtg_cas04 FAKE_NPC
diff --git a/npc/woe-fe/prtg_cas05.txt b/npc/woe-fe/prtg_cas05.txt
index 0c7caa200..40eb559ae 100644
--- a/npc/woe-fe/prtg_cas05.txt
+++ b/npc/woe-fe/prtg_cas05.txt
@@ -134,10 +134,10 @@ prtg_cas05,281,176,0 script #Lever_PR05 HIDDEN_NPC,{
prtg_cas05,212,95,0 duplicate(gdlever) #prtg_cas05 HIDDEN_NPC
//== Guild Treasure Spawns =================================
-prtg_cas05,276,178,0 duplicate(Gld_Trea_Spawn) Treasure#prtg_cas05 -1
+prtg_cas05,276,178,0 duplicate(Gld_Trea_Spawn) Treasure#prtg_cas05 FAKE_NPC
//== AGIT Manager ==========================================
-prtg_cas05,266,266,0 duplicate(Gld_Agit_Manager) Agit#prtg_cas05 -1
+prtg_cas05,266,266,0 duplicate(Gld_Agit_Manager) Agit#prtg_cas05 FAKE_NPC
//== Guardians =============================================
-prtg_cas05,36,37,4 duplicate(Gld_Guard_Template) Guardian#prtg_cas05 -1
+prtg_cas05,36,37,4 duplicate(Gld_Guard_Template) Guardian#prtg_cas05 FAKE_NPC
diff --git a/npc/woe-fe/trs_rp.txt b/npc/woe-fe/trs_rp.txt
index 9b74429d0..2083ec035 100644
--- a/npc/woe-fe/trs_rp.txt
+++ b/npc/woe-fe/trs_rp.txt
@@ -33,7 +33,7 @@
//= 1.1
//=========================================================================
-- script Gld_Trea_Protect::Gld_Trea_Protect -1,{
+- script Gld_Trea_Protect::Gld_Trea_Protect FAKE_NPC,{
end;
OnTouch:
@@ -52,26 +52,26 @@ OnTouch:
end;
}
-prtg_cas01,11,208,0 duplicate(Gld_Trea_Protect) ban_warp#prtg_cas01 -1,6,6
-prtg_cas02,202,228,0 duplicate(Gld_Trea_Protect) ban_warp#prtg_cas02 -1,6,6
-prtg_cas03,189,132,0 duplicate(Gld_Trea_Protect) ban_warp#prtg_cas03 -1,6,6
-prtg_cas04,271,162,0 duplicate(Gld_Trea_Protect) ban_warp#prtg_cas04 -1,6,6
-prtg_cas05,276,178,0 duplicate(Gld_Trea_Protect) ban_warp#prtg_cas05 -1,6,6
+prtg_cas01,11,208,0 duplicate(Gld_Trea_Protect) ban_warp#prtg_cas01 FAKE_NPC,6,6
+prtg_cas02,202,228,0 duplicate(Gld_Trea_Protect) ban_warp#prtg_cas02 FAKE_NPC,6,6
+prtg_cas03,189,132,0 duplicate(Gld_Trea_Protect) ban_warp#prtg_cas03 FAKE_NPC,6,6
+prtg_cas04,271,162,0 duplicate(Gld_Trea_Protect) ban_warp#prtg_cas04 FAKE_NPC,6,6
+prtg_cas05,276,178,0 duplicate(Gld_Trea_Protect) ban_warp#prtg_cas05 FAKE_NPC,6,6
-payg_cas01,291,8,0 duplicate(Gld_Trea_Protect) ban_warp#payg_cas01 -1,6,6
-payg_cas02,145,144,0 duplicate(Gld_Trea_Protect) ban_warp#payg_cas02 -1,6,6
-payg_cas03,159,168,0 duplicate(Gld_Trea_Protect) ban_warp#payg_cas03 -1,6,6
-payg_cas04,147,48,0 duplicate(Gld_Trea_Protect) ban_warp#payg_cas04 -1,6,6
-payg_cas05,157,132,0 duplicate(Gld_Trea_Protect) ban_warp#payg_cas05 -1,6,6
+payg_cas01,291,8,0 duplicate(Gld_Trea_Protect) ban_warp#payg_cas01 FAKE_NPC,6,6
+payg_cas02,145,144,0 duplicate(Gld_Trea_Protect) ban_warp#payg_cas02 FAKE_NPC,6,6
+payg_cas03,159,168,0 duplicate(Gld_Trea_Protect) ban_warp#payg_cas03 FAKE_NPC,6,6
+payg_cas04,147,48,0 duplicate(Gld_Trea_Protect) ban_warp#payg_cas04 FAKE_NPC,6,6
+payg_cas05,157,132,0 duplicate(Gld_Trea_Protect) ban_warp#payg_cas05 FAKE_NPC,6,6
-aldeg_cas01,118,223,0 duplicate(Gld_Trea_Protect) ban_warp#aldeg_cas01 -1,8,8
-aldeg_cas02,135,230,0 duplicate(Gld_Trea_Protect) ban_warp#aldeg_cas02 -1,8,8
-aldeg_cas03,225,269,0 duplicate(Gld_Trea_Protect) ban_warp#aldeg_cas03 -1,8,8
-aldeg_cas04,84,13,0 duplicate(Gld_Trea_Protect) ban_warp#aldeg_cas04 -1,8,8
-aldeg_cas05,62,12,0 duplicate(Gld_Trea_Protect) ban_warp#aldeg_cas05 -1,8,8
+aldeg_cas01,118,223,0 duplicate(Gld_Trea_Protect) ban_warp#aldeg_cas01 FAKE_NPC,8,8
+aldeg_cas02,135,230,0 duplicate(Gld_Trea_Protect) ban_warp#aldeg_cas02 FAKE_NPC,8,8
+aldeg_cas03,225,269,0 duplicate(Gld_Trea_Protect) ban_warp#aldeg_cas03 FAKE_NPC,8,8
+aldeg_cas04,84,13,0 duplicate(Gld_Trea_Protect) ban_warp#aldeg_cas04 FAKE_NPC,8,8
+aldeg_cas05,62,12,0 duplicate(Gld_Trea_Protect) ban_warp#aldeg_cas05 FAKE_NPC,8,8
-gefg_cas01,154,112,0 duplicate(Gld_Trea_Protect) ban_warp#gefg_cas01 -1,6,6
-gefg_cas02,140,116,0 duplicate(Gld_Trea_Protect) ban_warp#gefg_cas02 -1,6,6
-gefg_cas03,271,290,0 duplicate(Gld_Trea_Protect) ban_warp#gefg_cas03 -1,6,6
-gefg_cas04,116,119,0 duplicate(Gld_Trea_Protect) ban_warp#gefg_cas04 -1,6,6
-gefg_cas05,144,110,0 duplicate(Gld_Trea_Protect) ban_warp#gefg_cas05 -1,6,6
+gefg_cas01,154,112,0 duplicate(Gld_Trea_Protect) ban_warp#gefg_cas01 FAKE_NPC,6,6
+gefg_cas02,140,116,0 duplicate(Gld_Trea_Protect) ban_warp#gefg_cas02 FAKE_NPC,6,6
+gefg_cas03,271,290,0 duplicate(Gld_Trea_Protect) ban_warp#gefg_cas03 FAKE_NPC,6,6
+gefg_cas04,116,119,0 duplicate(Gld_Trea_Protect) ban_warp#gefg_cas04 FAKE_NPC,6,6
+gefg_cas05,144,110,0 duplicate(Gld_Trea_Protect) ban_warp#gefg_cas05 FAKE_NPC,6,6
diff --git a/npc/woe-se/agit_main_se.txt b/npc/woe-se/agit_main_se.txt
index 2c796355e..eb777f441 100644
--- a/npc/woe-se/agit_main_se.txt
+++ b/npc/woe-se/agit_main_se.txt
@@ -37,7 +37,7 @@
//=========================================================================
//== Core, triggers all other events =======================
-- script Manager#template -1,{
+- script Manager#template FAKE_NPC,{
OnAgitInit2:
OnRecvCastle2:
if (strnpcinfo(2) == "template") end;
@@ -219,7 +219,7 @@ OnTreasureDied:
}
//== Guild Manager =========================================
-- script Steward#template -1,{
+- script Steward#template FAKE_NPC,{
.@GID = getcastledata(strnpcinfo(4),1);
if (!.@GID) {
mes "[ Steward ]";
@@ -652,7 +652,7 @@ OnStartArena:
}
//== Castle Guardians ======================================
-- script Guardian#template -1,{
+- script Guardian#template FAKE_NPC,{
.@GID = getcastledata(strnpcinfo(4),1);
.@n$ = "["+strnpcinfo(1)+"]";
if (!.@GID) {
@@ -851,7 +851,7 @@ OnInit:
}
//== Guild Kafras ==========================================
-- script Kafra#template -1,{
+- script Kafra#template FAKE_NPC,{
cutin "kafra_01",2;
.@GID = getcastledata(strnpcinfo(4),1);
if (getcharid(2) == .@GID && getgdskilllv(.@GID,10001)) {
@@ -963,7 +963,7 @@ OnInit:
}
//== Guardian Stones (2) ===================================
-- script Guardian Stone#template -1,{
+- script Guardian Stone#template FAKE_NPC,{
.@GID = getcastledata(strnpcinfo(4),1);
.@num = atoi(charat(strnpcinfo(1),0));
.@var$ = "$agit_"+strnpcinfo(2);
@@ -1116,7 +1116,7 @@ OnEnable:
}
//== Control Devices (3) ===================================
-- script Control#template -1,{
+- script Control#template FAKE_NPC,{
.@GID = getcastledata(strnpcinfo(4),1);
.@num = atoi(charat(strnpcinfo(1),15));
.@var$ = "$agit_"+strnpcinfo(2);
@@ -1358,7 +1358,7 @@ OnEnable:
}
//== Guardian Summoners (2) ================================
-- script gard#template -1,{
+- script gard#template FAKE_NPC,{
OnEnable:
// .@x[i],.@y[i]: Normal coordinates, #0-21.
// .@w[x],.@w[y]: Special coordinates if 'defence' is under 11.
@@ -1479,7 +1479,7 @@ OnReset:
}
//== Guardian Stone Summoners (2) ==========================
-- script df#template -1,{
+- script df#template FAKE_NPC,{
OnEnable:
if (compare(strnpcinfo(2),"arug")) {
if (strnpcinfo(2) == "arug_cas01") setarray .@i[0],210,234,308,189;
@@ -1531,7 +1531,7 @@ OnTimer300000:
}
//== Barrier Summoners (4) =================================
-- script RL#template -1,{
+- script RL#template FAKE_NPC,{
OnEnable:
.@num = atoi(charat(strnpcinfo(1),2));
if (.@num == 0) {
@@ -1792,7 +1792,7 @@ function script ReturnFlag {
}
//== Treasure Room Switches ================================
-- script Switch#template -1,{
+- script Switch#template FAKE_NPC,{
mes " ";
mes "^3355FFWill you pull";
mes "this small lever?^000000";
@@ -1813,7 +1813,7 @@ function script ReturnFlag {
}
//== Guild Dungeon Warps ===================================
-- script Sunflower#template -1,{
+- script Sunflower#template FAKE_NPC,{
if (getcharid(2) == getcastledata(strnpcinfo(4),1)) {
mes "- It's an amazingly huge sunflower; as big as a human! ... You feel something mysterious emanating from the flower. -";
next;
diff --git a/npc/woe-se/agit_start_se.txt b/npc/woe-se/agit_start_se.txt
index 006d85baa..e8d5da481 100644
--- a/npc/woe-se/agit_start_se.txt
+++ b/npc/woe-se/agit_start_se.txt
@@ -35,7 +35,7 @@
//=========================================================================
//== WoE Start/Stop times ==================================
-- script Agit2_Event -1,{
+- script Agit2_Event FAKE_NPC,{
end;
OnClock1800: //start time for Tues(2), Thurs(4)
diff --git a/npc/woe-se/arug_cas01.txt b/npc/woe-se/arug_cas01.txt
index c4a0cdc43..39615cb52 100644
--- a/npc/woe-se/arug_cas01.txt
+++ b/npc/woe-se/arug_cas01.txt
@@ -32,15 +32,15 @@
//= 1.0
//=========================================================================
-- duplicate(Manager#template) Manager#arug_cas01 -1
-- duplicate(gard#template) gard1#arug_cas01 -1
-- duplicate(gard#template) gard2#arug_cas01 -1
-- duplicate(df#template) df1#arug_cas01 -1
-- duplicate(df#template) df2#arug_cas01 -1
-- duplicate(RL#template) RL0#arug_cas01 -1
-- duplicate(RL#template) RL1#arug_cas01 -1
-- duplicate(RL#template) RL2#arug_cas01 -1
-- duplicate(RL#template) RL3#arug_cas01 -1
+- duplicate(Manager#template) Manager#arug_cas01 FAKE_NPC
+- duplicate(gard#template) gard1#arug_cas01 FAKE_NPC
+- duplicate(gard#template) gard2#arug_cas01 FAKE_NPC
+- duplicate(df#template) df1#arug_cas01 FAKE_NPC
+- duplicate(df#template) df2#arug_cas01 FAKE_NPC
+- duplicate(RL#template) RL0#arug_cas01 FAKE_NPC
+- duplicate(RL#template) RL1#arug_cas01 FAKE_NPC
+- duplicate(RL#template) RL2#arug_cas01 FAKE_NPC
+- duplicate(RL#template) RL3#arug_cas01 FAKE_NPC
arug_cas01,92,380,3 duplicate(Steward#template) Steward#ar01 1_M_JOBTESTER
arug_cas01,112,193,1 duplicate(Guardian#template) Brace#ar01 4_M_LGTGUARD
diff --git a/npc/woe-se/arug_cas02.txt b/npc/woe-se/arug_cas02.txt
index e7c24bd1d..6e2de4438 100644
--- a/npc/woe-se/arug_cas02.txt
+++ b/npc/woe-se/arug_cas02.txt
@@ -32,15 +32,15 @@
//= 1.0
//=========================================================================
-- duplicate(Manager#template) Manager#arug_cas02 -1
-- duplicate(gard#template) gard1#arug_cas02 -1
-- duplicate(gard#template) gard2#arug_cas02 -1
-- duplicate(df#template) df1#arug_cas02 -1
-- duplicate(df#template) df2#arug_cas02 -1
-- duplicate(RL#template) RL0#arug_cas02 -1
-- duplicate(RL#template) RL1#arug_cas02 -1
-- duplicate(RL#template) RL2#arug_cas02 -1
-- duplicate(RL#template) RL3#arug_cas02 -1
+- duplicate(Manager#template) Manager#arug_cas02 FAKE_NPC
+- duplicate(gard#template) gard1#arug_cas02 FAKE_NPC
+- duplicate(gard#template) gard2#arug_cas02 FAKE_NPC
+- duplicate(df#template) df1#arug_cas02 FAKE_NPC
+- duplicate(df#template) df2#arug_cas02 FAKE_NPC
+- duplicate(RL#template) RL0#arug_cas02 FAKE_NPC
+- duplicate(RL#template) RL1#arug_cas02 FAKE_NPC
+- duplicate(RL#template) RL2#arug_cas02 FAKE_NPC
+- duplicate(RL#template) RL3#arug_cas02 FAKE_NPC
arug_cas02,303,341,3 duplicate(Steward#template) Steward#ar02 1_M_JOBTESTER
arug_cas02,38,259,5 duplicate(Guardian#template) Yumenes#ar02 4_M_LGTGUARD
diff --git a/npc/woe-se/arug_cas03.txt b/npc/woe-se/arug_cas03.txt
index 4df1f46cf..3ab4d87f3 100644
--- a/npc/woe-se/arug_cas03.txt
+++ b/npc/woe-se/arug_cas03.txt
@@ -32,15 +32,15 @@
//= 1.0
//=========================================================================
-- duplicate(Manager#template) Manager#arug_cas03 -1
-- duplicate(gard#template) gard1#arug_cas03 -1
-- duplicate(gard#template) gard2#arug_cas03 -1
-- duplicate(df#template) df1#arug_cas03 -1
-- duplicate(df#template) df2#arug_cas03 -1
-- duplicate(RL#template) RL0#arug_cas03 -1
-- duplicate(RL#template) RL1#arug_cas03 -1
-- duplicate(RL#template) RL2#arug_cas03 -1
-- duplicate(RL#template) RL3#arug_cas03 -1
+- duplicate(Manager#template) Manager#arug_cas03 FAKE_NPC
+- duplicate(gard#template) gard1#arug_cas03 FAKE_NPC
+- duplicate(gard#template) gard2#arug_cas03 FAKE_NPC
+- duplicate(df#template) df1#arug_cas03 FAKE_NPC
+- duplicate(df#template) df2#arug_cas03 FAKE_NPC
+- duplicate(RL#template) RL0#arug_cas03 FAKE_NPC
+- duplicate(RL#template) RL1#arug_cas03 FAKE_NPC
+- duplicate(RL#template) RL2#arug_cas03 FAKE_NPC
+- duplicate(RL#template) RL3#arug_cas03 FAKE_NPC
arug_cas03,328,98,3 duplicate(Steward#template) Steward#ar03 1_M_JOBTESTER
arug_cas03,146,315,3 duplicate(Guardian#template) Yehsus#ar03 4_M_LGTGUARD
diff --git a/npc/woe-se/arug_cas04.txt b/npc/woe-se/arug_cas04.txt
index 0e5e6d127..ae3398e06 100644
--- a/npc/woe-se/arug_cas04.txt
+++ b/npc/woe-se/arug_cas04.txt
@@ -32,15 +32,15 @@
//= 1.0
//=========================================================================
-- duplicate(Manager#template) Manager#arug_cas04 -1
-- duplicate(gard#template) gard1#arug_cas04 -1
-- duplicate(gard#template) gard2#arug_cas04 -1
-- duplicate(df#template) df1#arug_cas04 -1
-- duplicate(df#template) df2#arug_cas04 -1
-- duplicate(RL#template) RL0#arug_cas04 -1
-- duplicate(RL#template) RL1#arug_cas04 -1
-- duplicate(RL#template) RL2#arug_cas04 -1
-- duplicate(RL#template) RL3#arug_cas04 -1
+- duplicate(Manager#template) Manager#arug_cas04 FAKE_NPC
+- duplicate(gard#template) gard1#arug_cas04 FAKE_NPC
+- duplicate(gard#template) gard2#arug_cas04 FAKE_NPC
+- duplicate(df#template) df1#arug_cas04 FAKE_NPC
+- duplicate(df#template) df2#arug_cas04 FAKE_NPC
+- duplicate(RL#template) RL0#arug_cas04 FAKE_NPC
+- duplicate(RL#template) RL1#arug_cas04 FAKE_NPC
+- duplicate(RL#template) RL2#arug_cas04 FAKE_NPC
+- duplicate(RL#template) RL3#arug_cas04 FAKE_NPC
arug_cas04,328,98,3 duplicate(Steward#template) Steward#ar04 1_M_JOBTESTER
arug_cas04,146,315,3 duplicate(Guardian#template) Nios#ar04 4_M_LGTGUARD
diff --git a/npc/woe-se/arug_cas05.txt b/npc/woe-se/arug_cas05.txt
index 0f3908923..d1cf1bdc4 100644
--- a/npc/woe-se/arug_cas05.txt
+++ b/npc/woe-se/arug_cas05.txt
@@ -32,15 +32,15 @@
//= 1.4
//=========================================================================
-- duplicate(Manager#template) Manager#arug_cas05 -1
-- duplicate(gard#template) gard1#arug_cas05 -1
-- duplicate(gard#template) gard2#arug_cas05 -1
-- duplicate(df#template) df1#arug_cas05 -1
-- duplicate(df#template) df2#arug_cas05 -1
-- duplicate(RL#template) RL0#arug_cas05 -1
-- duplicate(RL#template) RL1#arug_cas05 -1
-- duplicate(RL#template) RL2#arug_cas05 -1
-- duplicate(RL#template) RL3#arug_cas05 -1
+- duplicate(Manager#template) Manager#arug_cas05 FAKE_NPC
+- duplicate(gard#template) gard1#arug_cas05 FAKE_NPC
+- duplicate(gard#template) gard2#arug_cas05 FAKE_NPC
+- duplicate(df#template) df1#arug_cas05 FAKE_NPC
+- duplicate(df#template) df2#arug_cas05 FAKE_NPC
+- duplicate(RL#template) RL0#arug_cas05 FAKE_NPC
+- duplicate(RL#template) RL1#arug_cas05 FAKE_NPC
+- duplicate(RL#template) RL2#arug_cas05 FAKE_NPC
+- duplicate(RL#template) RL3#arug_cas05 FAKE_NPC
arug_cas05,328,98,3 duplicate(Steward#template) Steward#ar05 1_M_JOBTESTER
arug_cas05,146,315,3 duplicate(Guardian#template) Eeos#ar05 4_M_LGTGUARD
diff --git a/npc/woe-se/schg_cas01.txt b/npc/woe-se/schg_cas01.txt
index b1894dc70..0c5e54386 100644
--- a/npc/woe-se/schg_cas01.txt
+++ b/npc/woe-se/schg_cas01.txt
@@ -32,15 +32,15 @@
//= 1.0
//=========================================================================
-- duplicate(Manager#template) Manager#schg_cas01 -1
-- duplicate(gard#template) gard1#schg_cas01 -1
-- duplicate(gard#template) gard2#schg_cas01 -1
-- duplicate(df#template) df1#schg_cas01 -1
-- duplicate(df#template) df2#schg_cas01 -1
-- duplicate(RL#template) RL0#schg_cas01 -1
-- duplicate(RL#template) RL1#schg_cas01 -1
-- duplicate(RL#template) RL2#schg_cas01 -1
-- duplicate(RL#template) RL3#schg_cas01 -1
+- duplicate(Manager#template) Manager#schg_cas01 FAKE_NPC
+- duplicate(gard#template) gard1#schg_cas01 FAKE_NPC
+- duplicate(gard#template) gard2#schg_cas01 FAKE_NPC
+- duplicate(df#template) df1#schg_cas01 FAKE_NPC
+- duplicate(df#template) df2#schg_cas01 FAKE_NPC
+- duplicate(RL#template) RL0#schg_cas01 FAKE_NPC
+- duplicate(RL#template) RL1#schg_cas01 FAKE_NPC
+- duplicate(RL#template) RL2#schg_cas01 FAKE_NPC
+- duplicate(RL#template) RL3#schg_cas01 FAKE_NPC
schg_cas01,247,305,3 duplicate(Steward#template) Steward#sc01 1_M_JOBTESTER
schg_cas01,123,306,3 duplicate(Guardian#template) Ef#sc01 4_M_LGTGUARD
diff --git a/npc/woe-se/schg_cas02.txt b/npc/woe-se/schg_cas02.txt
index d48cee374..c3bb89d38 100644
--- a/npc/woe-se/schg_cas02.txt
+++ b/npc/woe-se/schg_cas02.txt
@@ -32,15 +32,15 @@
//= 1.0
//=========================================================================
-- duplicate(Manager#template) Manager#schg_cas02 -1
-- duplicate(gard#template) gard1#schg_cas02 -1
-- duplicate(gard#template) gard2#schg_cas02 -1
-- duplicate(df#template) df1#schg_cas02 -1
-- duplicate(df#template) df2#schg_cas02 -1
-- duplicate(RL#template) RL0#schg_cas02 -1
-- duplicate(RL#template) RL1#schg_cas02 -1
-- duplicate(RL#template) RL2#schg_cas02 -1
-- duplicate(RL#template) RL3#schg_cas02 -1
+- duplicate(Manager#template) Manager#schg_cas02 FAKE_NPC
+- duplicate(gard#template) gard1#schg_cas02 FAKE_NPC
+- duplicate(gard#template) gard2#schg_cas02 FAKE_NPC
+- duplicate(df#template) df1#schg_cas02 FAKE_NPC
+- duplicate(df#template) df2#schg_cas02 FAKE_NPC
+- duplicate(RL#template) RL0#schg_cas02 FAKE_NPC
+- duplicate(RL#template) RL1#schg_cas02 FAKE_NPC
+- duplicate(RL#template) RL2#schg_cas02 FAKE_NPC
+- duplicate(RL#template) RL3#schg_cas02 FAKE_NPC
schg_cas02,105,378,3 duplicate(Steward#template) Steward#sc02 1_M_JOBTESTER
schg_cas02,140,184,3 duplicate(Guardian#template) Endeef#sc02 4_M_LGTGUARD
diff --git a/npc/woe-se/schg_cas03.txt b/npc/woe-se/schg_cas03.txt
index cd638b946..3bb760547 100644
--- a/npc/woe-se/schg_cas03.txt
+++ b/npc/woe-se/schg_cas03.txt
@@ -32,15 +32,15 @@
//= 1.0
//=========================================================================
-- duplicate(Manager#template) Manager#schg_cas03 -1
-- duplicate(gard#template) gard1#schg_cas03 -1
-- duplicate(gard#template) gard2#schg_cas03 -1
-- duplicate(df#template) df1#schg_cas03 -1
-- duplicate(df#template) df2#schg_cas03 -1
-- duplicate(RL#template) RL0#schg_cas03 -1
-- duplicate(RL#template) RL1#schg_cas03 -1
-- duplicate(RL#template) RL2#schg_cas03 -1
-- duplicate(RL#template) RL3#schg_cas03 -1
+- duplicate(Manager#template) Manager#schg_cas03 FAKE_NPC
+- duplicate(gard#template) gard1#schg_cas03 FAKE_NPC
+- duplicate(gard#template) gard2#schg_cas03 FAKE_NPC
+- duplicate(df#template) df1#schg_cas03 FAKE_NPC
+- duplicate(df#template) df2#schg_cas03 FAKE_NPC
+- duplicate(RL#template) RL0#schg_cas03 FAKE_NPC
+- duplicate(RL#template) RL1#schg_cas03 FAKE_NPC
+- duplicate(RL#template) RL2#schg_cas03 FAKE_NPC
+- duplicate(RL#template) RL3#schg_cas03 FAKE_NPC
schg_cas03,88,90,3 duplicate(Steward#template) Steward#sc03 1_M_JOBTESTER
schg_cas03,287,226,5 duplicate(Guardian#template) Elzee#sc03 4_M_LGTGUARD
diff --git a/npc/woe-se/schg_cas04.txt b/npc/woe-se/schg_cas04.txt
index 3ddcbf147..57744b4b7 100644
--- a/npc/woe-se/schg_cas04.txt
+++ b/npc/woe-se/schg_cas04.txt
@@ -32,15 +32,15 @@
//= 1.0
//=========================================================================
-- duplicate(Manager#template) Manager#schg_cas04 -1
-- duplicate(gard#template) gard1#schg_cas04 -1
-- duplicate(gard#template) gard2#schg_cas04 -1
-- duplicate(df#template) df1#schg_cas04 -1
-- duplicate(df#template) df2#schg_cas04 -1
-- duplicate(RL#template) RL0#schg_cas04 -1
-- duplicate(RL#template) RL1#schg_cas04 -1
-- duplicate(RL#template) RL2#schg_cas04 -1
-- duplicate(RL#template) RL3#schg_cas04 -1
+- duplicate(Manager#template) Manager#schg_cas04 FAKE_NPC
+- duplicate(gard#template) gard1#schg_cas04 FAKE_NPC
+- duplicate(gard#template) gard2#schg_cas04 FAKE_NPC
+- duplicate(df#template) df1#schg_cas04 FAKE_NPC
+- duplicate(df#template) df2#schg_cas04 FAKE_NPC
+- duplicate(RL#template) RL0#schg_cas04 FAKE_NPC
+- duplicate(RL#template) RL1#schg_cas04 FAKE_NPC
+- duplicate(RL#template) RL2#schg_cas04 FAKE_NPC
+- duplicate(RL#template) RL3#schg_cas04 FAKE_NPC
schg_cas04,247,305,3 duplicate(Steward#template) Steward#sc04 1_M_JOBTESTER
schg_cas04,123,306,3 duplicate(Guardian#template) Ef#sc04 4_M_LGTGUARD
diff --git a/npc/woe-se/schg_cas05.txt b/npc/woe-se/schg_cas05.txt
index e4ff1aa77..3cb096dc7 100644
--- a/npc/woe-se/schg_cas05.txt
+++ b/npc/woe-se/schg_cas05.txt
@@ -32,15 +32,15 @@
//= 1.0
//=========================================================================
-- duplicate(Manager#template) Manager#schg_cas05 -1
-- duplicate(gard#template) gard1#schg_cas05 -1
-- duplicate(gard#template) gard2#schg_cas05 -1
-- duplicate(df#template) df1#schg_cas05 -1
-- duplicate(df#template) df2#schg_cas05 -1
-- duplicate(RL#template) RL0#schg_cas05 -1
-- duplicate(RL#template) RL1#schg_cas05 -1
-- duplicate(RL#template) RL2#schg_cas05 -1
-- duplicate(RL#template) RL3#schg_cas05 -1
+- duplicate(Manager#template) Manager#schg_cas05 FAKE_NPC
+- duplicate(gard#template) gard1#schg_cas05 FAKE_NPC
+- duplicate(gard#template) gard2#schg_cas05 FAKE_NPC
+- duplicate(df#template) df1#schg_cas05 FAKE_NPC
+- duplicate(df#template) df2#schg_cas05 FAKE_NPC
+- duplicate(RL#template) RL0#schg_cas05 FAKE_NPC
+- duplicate(RL#template) RL1#schg_cas05 FAKE_NPC
+- duplicate(RL#template) RL2#schg_cas05 FAKE_NPC
+- duplicate(RL#template) RL3#schg_cas05 FAKE_NPC
schg_cas05,247,305,3 duplicate(Steward#template) Steward#sc05 1_M_JOBTESTER
schg_cas05,123,306,3 duplicate(Guardian#template) Ef#sc05 4_M_LGTGUARD
diff --git a/sql-files/item_db.sql b/sql-files/item_db.sql
index 0b900a271..5d9bc2c80 100644
--- a/sql-files/item_db.sql
+++ b/sql-files/item_db.sql
@@ -1,7 +1,7 @@
-- This file is part of Hercules.
-- http://herc.ws - http://github.com/HerculesWS/Hercules
--
--- Copyright (C) 2013-2015 Hercules Dev Team
+-- Copyright (C) 2013-2016 Hercules Dev Team
--
-- Hercules is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
@@ -964,7 +964,7 @@ REPLACE INTO `item_db` VALUES ('1730','Burning_Bow','Burning Bow','4','20','10',
REPLACE INTO `item_db` VALUES ('1731','Frozen_Bow','Frozen Bow','4','20','10','1400','100','0','0','5','1','657416','63','2','34','3','55',NULL,'1','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddEff,Eff_Freeze,1000;','','');
REPLACE INTO `item_db` VALUES ('1732','Earth_Bow','Earth Bow','4','20','10','1400','105','0','0','5','1','657416','63','2','34','3','55',NULL,'1','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1733','Gust_Bow','Gust Bow','4','20','10','1400','95','0','0','5','1','657416','63','2','34','3','55',NULL,'1','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('1734','Orc_Archer_Bow','Orc Archer Bow','4','20','10','1600','120','0','0','5','0','657416','63','2','34','4','65',NULL,'1','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddMonsterDropItem,1753,200;','','');
+REPLACE INTO `item_db` VALUES ('1734','Orc_Archer_Bow','Orc Archer Bow','4','20','10','1600','120','0','0','5','0','657416','63','2','34','3','65',NULL,'1','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddMonsterDropItem,1753,200;','','');
REPLACE INTO `item_db` VALUES ('1735','Kkakkung','Kkakkung','4','20','10','0','120','0','0','5','0','657480','63','2','34','1','1',NULL,'0','11','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace, RC_All, 50;','','');
REPLACE INTO `item_db` VALUES ('1736','Double_Bound','Double Bound','4','20','10','900','70','0','0','5','3','2048','2','2','34','3','70',NULL,'1','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAutoSpell,AC_DOUBLE,getskilllv(AC_DOUBLE),10;','','');
REPLACE INTO `item_db` VALUES ('1737','Ixion_Wing','Ixion Wings','4','20','10','300','135','0','0','5','1','2048','2','2','34','4','70',NULL,'1','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','autobonus \"{ bonus bAspdRate,7; }\",10+(getrefine()*2),7000,BF_WEAPON,\"{ specialeffect2 EF_HASTEUP; }\"; bonus2 bAddSkillBlow,AC_CHARGEARROW,3;','','');
@@ -2070,7 +2070,7 @@ REPLACE INTO `item_db` VALUES ('4436','Ragged_Zombie_Card','Ragged Zombie Card',
REPLACE INTO `item_db` VALUES ('4437','Hell_Poodle_Card','Hell Poodle Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','136','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,1; bonus2 bAddItemHealRate,517,100; bonus3 bAddEff,Eff_Bleeding,50,ATF_SHORT;','','');
REPLACE INTO `item_db` VALUES ('4438','Banshee_Card','Banshee Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','769','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if(BaseClass==Job_Mage) { bonus bMaxSP,100; bonus bMaxHP,-100; bonus2 bSkillAtk,MG_NAPALMBEAT,20; bonus2 bSkillAtk,MG_SOULSTRIKE,20; bonus2 bSkillAtk,HW_NAPALMVULCAN,20; }','','');
REPLACE INTO `item_db` VALUES ('4439','Flame_Skull_Card','Flame Skull Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','32','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bResEff,Eff_Blind,3000; bonus2 bResEff,Eff_Stun,3000; bonus2 bResEff,Eff_Curse,3000; bonus2 bResEff,Eff_Stone,3000; bonus2 bAddEffWhenHit,Eff_Blind,500; bonus2 bAddEffWhenHit,Eff_Stun,500; bonus2 bAddEffWhenHit,Eff_Curse,500; bonus2 bAddEffWhenHit,Eff_Stone,500;','','');
-REPLACE INTO `item_db` VALUES ('4440','Necromancer_Card','Necromancer Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','2','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if(getiteminfo(getequipid(EQI_HAND_R),11)==10) { bonus bInt,1; bonus bIgnoreMdefRate,2; }','','');
+REPLACE INTO `item_db` VALUES ('4440','Necromancer_Card','Necromancer Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','2','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','.@i = getiteminfo(getequipid(EQI_HAND_R),11); if (.@i == 10 || .@i == 23) { bonus bInt,1; bonus bIgnoreMdefRate,2; }','','');
REPLACE INTO `item_db` VALUES ('4441','Fallen_Bishop_Card','Fallen Bishop Hibram Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','64','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,10; bonus bMaxSPrate,-50; bonus2 bMagicAddRace,RC_Angel,50; bonus2 bMagicAddRace,RC_DemiPlayer,50;','','');
REPLACE INTO `item_db` VALUES ('4442','Tatacho_Card','Tatacho Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','32','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle,Ele_Neutral,20; bonus2 bAddEle,Ele_Neutral,5;','','');
REPLACE INTO `item_db` VALUES ('4443','Aqua_Elemental_Card','Aqua Elemental Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','32','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle,Ele_Water,20; bonus2 bAddEle,Ele_Water,5;','','');
@@ -2083,92 +2083,92 @@ REPLACE INTO `item_db` VALUES ('4450','Banshee_Master_Card','Banshee Master Card
REPLACE INTO `item_db` VALUES ('4451','Entweihen_Card','Entweihen Crothen Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,100;','','');
REPLACE INTO `item_db` VALUES ('4452','Centipede_Larva_Card','Centipede Larva Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','2','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1; bonus bMatk,3;','','');
REPLACE INTO `item_db` VALUES ('4453','Hilsrion_Card','Hillsrion Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','2','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,25;','','');
-REPLACE INTO `item_db` VALUES ('4700','Strength1','STR+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1;','','');
-REPLACE INTO `item_db` VALUES ('4701','Strength2','STR+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2;','','');
-REPLACE INTO `item_db` VALUES ('4702','Strength3','STR+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3;','','');
-REPLACE INTO `item_db` VALUES ('4703','Strength4','STR+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,4;','','');
-REPLACE INTO `item_db` VALUES ('4704','Strength5','STR+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,5;','','');
-REPLACE INTO `item_db` VALUES ('4705','Strength6','STR+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,6;','','');
-REPLACE INTO `item_db` VALUES ('4706','Strength7','STR+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,7;','','');
-REPLACE INTO `item_db` VALUES ('4707','Strength8','STR+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,8;','','');
-REPLACE INTO `item_db` VALUES ('4708','Strength9','STR+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,9;','','');
-REPLACE INTO `item_db` VALUES ('4709','Strength10','STR+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,10;','','');
-REPLACE INTO `item_db` VALUES ('4710','Inteligence1','INT+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
-REPLACE INTO `item_db` VALUES ('4711','Inteligence2','INT+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
-REPLACE INTO `item_db` VALUES ('4712','Inteligence3','INT+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,3;','','');
-REPLACE INTO `item_db` VALUES ('4713','Inteligence4','INT+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,4;','','');
-REPLACE INTO `item_db` VALUES ('4714','Inteligence5','INT+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,5;','','');
-REPLACE INTO `item_db` VALUES ('4715','Inteligence6','INT+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6;','','');
-REPLACE INTO `item_db` VALUES ('4716','Inteligence7','INT+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,7;','','');
-REPLACE INTO `item_db` VALUES ('4717','Inteligence8','INT+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,8;','','');
-REPLACE INTO `item_db` VALUES ('4718','Inteligence9','INT+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,9;','','');
-REPLACE INTO `item_db` VALUES ('4719','Inteligence10','INT+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,10;','','');
-REPLACE INTO `item_db` VALUES ('4720','Dexterity1','DEX+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1;','','');
-REPLACE INTO `item_db` VALUES ('4721','Dexterity2','DEX+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2;','','');
-REPLACE INTO `item_db` VALUES ('4722','Dexterity3','DEX+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,3;','','');
-REPLACE INTO `item_db` VALUES ('4723','Dexterity4','DEX+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,4;','','');
-REPLACE INTO `item_db` VALUES ('4724','Dexterity5','DEX+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,5;','','');
-REPLACE INTO `item_db` VALUES ('4725','Dexterity6','DEX+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,6;','','');
-REPLACE INTO `item_db` VALUES ('4726','Dexterity7','DEX+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,7;','','');
-REPLACE INTO `item_db` VALUES ('4727','Dexterity8','DEX+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,8;','','');
-REPLACE INTO `item_db` VALUES ('4728','Dexterity9','DEX+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,9;','','');
-REPLACE INTO `item_db` VALUES ('4729','Dexterity10','DEX+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,10;','','');
-REPLACE INTO `item_db` VALUES ('4730','Agility1','AGI+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,1;','','');
-REPLACE INTO `item_db` VALUES ('4731','Agility2','AGI+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,2;','','');
-REPLACE INTO `item_db` VALUES ('4732','Agility3','AGI+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,3;','','');
-REPLACE INTO `item_db` VALUES ('4733','Agility4','AGI+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,4;','','');
-REPLACE INTO `item_db` VALUES ('4734','Agility5','AGI+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,5;','','');
-REPLACE INTO `item_db` VALUES ('4735','Agility6','AGI+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,6;','','');
-REPLACE INTO `item_db` VALUES ('4736','Agility7','AGI+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,7;','','');
-REPLACE INTO `item_db` VALUES ('4737','Agility8','AGI+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,8;','','');
-REPLACE INTO `item_db` VALUES ('4738','Agility9','AGI+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,9;','','');
-REPLACE INTO `item_db` VALUES ('4739','Agility10','AGI+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,10;','','');
-REPLACE INTO `item_db` VALUES ('4740','Vitality1','VIT+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,1;','','');
-REPLACE INTO `item_db` VALUES ('4741','Vitality2','VIT+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,2;','','');
-REPLACE INTO `item_db` VALUES ('4742','Vitality3','VIT+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,3;','','');
-REPLACE INTO `item_db` VALUES ('4743','Vitality4','VIT+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,4;','','');
-REPLACE INTO `item_db` VALUES ('4744','Vitality5','VIT+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,5;','','');
-REPLACE INTO `item_db` VALUES ('4745','Vitality6','VIT+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,6;','','');
-REPLACE INTO `item_db` VALUES ('4746','Vitality7','VIT+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,7;','','');
-REPLACE INTO `item_db` VALUES ('4747','Vitality8','VIT+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,8;','','');
-REPLACE INTO `item_db` VALUES ('4748','Vitality9','VIT+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,9;','','');
-REPLACE INTO `item_db` VALUES ('4749','Vitality10','VIT+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,10;','','');
-REPLACE INTO `item_db` VALUES ('4750','Luck1','LUK+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,1;','','');
-REPLACE INTO `item_db` VALUES ('4751','Luck2','LUK+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,2;','','');
-REPLACE INTO `item_db` VALUES ('4752','Luck3','LUK+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,3;','','');
-REPLACE INTO `item_db` VALUES ('4753','Luck4','LUK+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,4;','','');
-REPLACE INTO `item_db` VALUES ('4754','Luck5','LUK+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,5;','','');
-REPLACE INTO `item_db` VALUES ('4755','Luck6','LUK+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,6;','','');
-REPLACE INTO `item_db` VALUES ('4756','Luck7','LUK+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,7;','','');
-REPLACE INTO `item_db` VALUES ('4757','Luck8','LUK+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,8;','','');
-REPLACE INTO `item_db` VALUES ('4758','Luck9','LUK+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,9;','','');
-REPLACE INTO `item_db` VALUES ('4759','Luck10','LUK+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,10;','','');
-REPLACE INTO `item_db` VALUES ('4760','Matk1','MATK+1%','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,1;','','');
-REPLACE INTO `item_db` VALUES ('4761','Matk2','MATK+2%','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,2;','','');
-REPLACE INTO `item_db` VALUES ('4762','Evasion6','FLEE+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,6;','','');
-REPLACE INTO `item_db` VALUES ('4763','Evasion12','FLEE+12','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,12;','','');
-REPLACE INTO `item_db` VALUES ('4764','Critical5','CRI+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,5;','','');
-REPLACE INTO `item_db` VALUES ('4765','Critical7','CRI+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,7;','','');
-REPLACE INTO `item_db` VALUES ('4766','Atk2','ATK+2%','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace, RC_All, 2;','','');
-REPLACE INTO `item_db` VALUES ('4767','Atk3','ATK+3%','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace, RC_All, 3;','','');
-REPLACE INTO `item_db` VALUES ('4768','Str1_J','STR+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4769','Str2_J','STR+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4770','Str3_J','STR+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4771','Int1_J','INT+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4772','Int2_J','INT+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4773','Int3_J','INT+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4774','Vit1_J','VIT+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4775','Vit2_J','VIT+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4776','Vit3_J','VIT+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4777','Agi1_J','AGI+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4778','Agi2_J','AGI+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4779','Agi3_J','AGI+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4780','Dex1_J','DEX+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4781','Dex2_J','DEX+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4782','Dex3_J','DEX+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4783','Luk1_J','LUK+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4784','Luk2_J','LUK+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4785','Luk3_J','LUK+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4700','Strength1','STR+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1;','','');
+REPLACE INTO `item_db` VALUES ('4701','Strength2','STR+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2;','','');
+REPLACE INTO `item_db` VALUES ('4702','Strength3','STR+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3;','','');
+REPLACE INTO `item_db` VALUES ('4703','Strength4','STR+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,4;','','');
+REPLACE INTO `item_db` VALUES ('4704','Strength5','STR+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,5;','','');
+REPLACE INTO `item_db` VALUES ('4705','Strength6','STR+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,6;','','');
+REPLACE INTO `item_db` VALUES ('4706','Strength7','STR+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,7;','','');
+REPLACE INTO `item_db` VALUES ('4707','Strength8','STR+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,8;','','');
+REPLACE INTO `item_db` VALUES ('4708','Strength9','STR+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,9;','','');
+REPLACE INTO `item_db` VALUES ('4709','Strength10','STR+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,10;','','');
+REPLACE INTO `item_db` VALUES ('4710','Inteligence1','INT+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
+REPLACE INTO `item_db` VALUES ('4711','Inteligence2','INT+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
+REPLACE INTO `item_db` VALUES ('4712','Inteligence3','INT+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,3;','','');
+REPLACE INTO `item_db` VALUES ('4713','Inteligence4','INT+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,4;','','');
+REPLACE INTO `item_db` VALUES ('4714','Inteligence5','INT+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,5;','','');
+REPLACE INTO `item_db` VALUES ('4715','Inteligence6','INT+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6;','','');
+REPLACE INTO `item_db` VALUES ('4716','Inteligence7','INT+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,7;','','');
+REPLACE INTO `item_db` VALUES ('4717','Inteligence8','INT+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,8;','','');
+REPLACE INTO `item_db` VALUES ('4718','Inteligence9','INT+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,9;','','');
+REPLACE INTO `item_db` VALUES ('4719','Inteligence10','INT+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,10;','','');
+REPLACE INTO `item_db` VALUES ('4720','Dexterity1','DEX+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1;','','');
+REPLACE INTO `item_db` VALUES ('4721','Dexterity2','DEX+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2;','','');
+REPLACE INTO `item_db` VALUES ('4722','Dexterity3','DEX+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,3;','','');
+REPLACE INTO `item_db` VALUES ('4723','Dexterity4','DEX+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,4;','','');
+REPLACE INTO `item_db` VALUES ('4724','Dexterity5','DEX+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,5;','','');
+REPLACE INTO `item_db` VALUES ('4725','Dexterity6','DEX+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,6;','','');
+REPLACE INTO `item_db` VALUES ('4726','Dexterity7','DEX+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,7;','','');
+REPLACE INTO `item_db` VALUES ('4727','Dexterity8','DEX+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,8;','','');
+REPLACE INTO `item_db` VALUES ('4728','Dexterity9','DEX+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,9;','','');
+REPLACE INTO `item_db` VALUES ('4729','Dexterity10','DEX+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,10;','','');
+REPLACE INTO `item_db` VALUES ('4730','Agility1','AGI+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,1;','','');
+REPLACE INTO `item_db` VALUES ('4731','Agility2','AGI+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,2;','','');
+REPLACE INTO `item_db` VALUES ('4732','Agility3','AGI+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,3;','','');
+REPLACE INTO `item_db` VALUES ('4733','Agility4','AGI+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,4;','','');
+REPLACE INTO `item_db` VALUES ('4734','Agility5','AGI+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,5;','','');
+REPLACE INTO `item_db` VALUES ('4735','Agility6','AGI+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,6;','','');
+REPLACE INTO `item_db` VALUES ('4736','Agility7','AGI+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,7;','','');
+REPLACE INTO `item_db` VALUES ('4737','Agility8','AGI+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,8;','','');
+REPLACE INTO `item_db` VALUES ('4738','Agility9','AGI+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,9;','','');
+REPLACE INTO `item_db` VALUES ('4739','Agility10','AGI+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,10;','','');
+REPLACE INTO `item_db` VALUES ('4740','Vitality1','VIT+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,1;','','');
+REPLACE INTO `item_db` VALUES ('4741','Vitality2','VIT+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,2;','','');
+REPLACE INTO `item_db` VALUES ('4742','Vitality3','VIT+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,3;','','');
+REPLACE INTO `item_db` VALUES ('4743','Vitality4','VIT+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,4;','','');
+REPLACE INTO `item_db` VALUES ('4744','Vitality5','VIT+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,5;','','');
+REPLACE INTO `item_db` VALUES ('4745','Vitality6','VIT+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,6;','','');
+REPLACE INTO `item_db` VALUES ('4746','Vitality7','VIT+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,7;','','');
+REPLACE INTO `item_db` VALUES ('4747','Vitality8','VIT+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,8;','','');
+REPLACE INTO `item_db` VALUES ('4748','Vitality9','VIT+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,9;','','');
+REPLACE INTO `item_db` VALUES ('4749','Vitality10','VIT+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,10;','','');
+REPLACE INTO `item_db` VALUES ('4750','Luck1','LUK+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,1;','','');
+REPLACE INTO `item_db` VALUES ('4751','Luck2','LUK+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,2;','','');
+REPLACE INTO `item_db` VALUES ('4752','Luck3','LUK+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,3;','','');
+REPLACE INTO `item_db` VALUES ('4753','Luck4','LUK+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,4;','','');
+REPLACE INTO `item_db` VALUES ('4754','Luck5','LUK+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,5;','','');
+REPLACE INTO `item_db` VALUES ('4755','Luck6','LUK+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,6;','','');
+REPLACE INTO `item_db` VALUES ('4756','Luck7','LUK+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,7;','','');
+REPLACE INTO `item_db` VALUES ('4757','Luck8','LUK+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,8;','','');
+REPLACE INTO `item_db` VALUES ('4758','Luck9','LUK+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,9;','','');
+REPLACE INTO `item_db` VALUES ('4759','Luck10','LUK+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,10;','','');
+REPLACE INTO `item_db` VALUES ('4760','Matk1','MATK+1%','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,1;','','');
+REPLACE INTO `item_db` VALUES ('4761','Matk2','MATK+2%','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,2;','','');
+REPLACE INTO `item_db` VALUES ('4762','Evasion6','FLEE+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,6;','','');
+REPLACE INTO `item_db` VALUES ('4763','Evasion12','FLEE+12','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,12;','','');
+REPLACE INTO `item_db` VALUES ('4764','Critical5','CRI+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,5;','','');
+REPLACE INTO `item_db` VALUES ('4765','Critical7','CRI+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,7;','','');
+REPLACE INTO `item_db` VALUES ('4766','Atk2','ATK+2%','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace, RC_All, 2;','','');
+REPLACE INTO `item_db` VALUES ('4767','Atk3','ATK+3%','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace, RC_All, 3;','','');
+REPLACE INTO `item_db` VALUES ('4768','Str1_J','STR+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4769','Str2_J','STR+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4770','Str3_J','STR+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4771','Int1_J','INT+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4772','Int2_J','INT+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4773','Int3_J','INT+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4774','Vit1_J','VIT+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4775','Vit2_J','VIT+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4776','Vit3_J','VIT+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4777','Agi1_J','AGI+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4778','Agi2_J','AGI+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4779','Agi3_J','AGI+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4780','Dex1_J','DEX+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4781','Dex2_J','DEX+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4782','Dex3_J','DEX+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4783','Luk1_J','LUK+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4784','Luk2_J','LUK+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4785','Luk3_J','LUK+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('5001','Headset','Headset','5','20','10','200','0','0','3','0','0','2147483646','63','2','256','0','1',NULL,'1','87','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bResEff,Eff_Curse,1000;','','');
REPLACE INTO `item_db` VALUES ('5002','Gemmed_Crown','Jewel Crown','5','20','10','600','0','0','4','0','0','414946','63','2','256','0','60',NULL,'1','88','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2; bonus bLuk,1; bonus bMdef,3;','','');
REPLACE INTO `item_db` VALUES ('5003','Joker_Jester','Joker Jester','5','20','10','100','0','0','1','0','0','2147483646','63','2','256','0','0',NULL,'1','89','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,2; bonus bMdef,5;','','');
@@ -5172,9 +5172,9 @@ REPLACE INTO `item_db` VALUES ('13176','Krieger_Rifle1','Glorious Rifle','4','0'
REPLACE INTO `item_db` VALUES ('13177','Krieger_Gatling1','Glorious Gatling Gun','4','0','0','0','90','0','0','9','0','16777216','63','2','34','4','80',NULL,'1','19','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,35; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus2 bSkillAtk,GS_TRIPLEACTION,30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if (getrefine() > 8) { bonus2 bAddRace, RC_All, getrefine(); }','','');
REPLACE INTO `item_db` VALUES ('13178','Krieger_Shotgun1','Glorious Shotgun','4','0','0','0','110','0','0','9','0','16777216','63','2','34','4','80',NULL,'1','20','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bSplashRange,1; bonus2 bSkillAtk,GS_TRIPLEACTION,30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus2 bSkillAtk,GS_SPREADATTACK,getrefine() * 2; bonus3 bAddEffOnSkill,GS_SPREADATTACK,Eff_Stun,2000; }','','');
REPLACE INTO `item_db` VALUES ('13179','Krieger_Launcher1','Glorious Grenade Launcher','4','0','0','0','330','0','0','9','0','16777216','63','2','34','4','80',NULL,'1','21','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,35; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus2 bSkillAtk,GS_TRIPLEACTION,30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus2 bSkillAtk,GS_GROUNDDRIFT,getrefine() * 2; bonus3 bAddEffOnSkill,GS_SPREADATTACK,Eff_Stun,2000; autobonus \"{ bonus bAspdRate,20; }\",200,20000,BF_WEAPON,\"{ specialeffect2 EF_POTION_BERSERK; }\"; }','','');
-REPLACE INTO `item_db` VALUES ('13200','Bullet','Bullet','10','1','0','2','10','0','0','0','0','16777216','63','2','32768','0','1',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('13200','Bullet','Bullet','10','1','0','2','10','0','0','0','0','16777216','63','2','32768','0','1',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral;','','');
REPLACE INTO `item_db` VALUES ('13201','Silver_Bullet','Silver Bullet','10','15','7','2','15','0','0','0','0','16777216','63','2','32768','0','1',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Holy;','','');
-REPLACE INTO `item_db` VALUES ('13202','Shell_Of_Blood','Bloody Shell','10','30','15','2','30','0','0','0','0','16777216','63','2','32768','0','1',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddEff,Eff_Bleeding,100;','','');
+REPLACE INTO `item_db` VALUES ('13202','Shell_Of_Blood','Bloody Shell','10','30','15','2','30','0','0','0','0','16777216','63','2','32768','0','1',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral; bonus2 bAddEff, Eff_Bleeding, 100;','','');
REPLACE INTO `item_db` VALUES ('13203','Flare_Sphere','Flare Sphere','10','80','40','5','50','0','0','0','0','16777216','63','2','32768','0','1',NULL,'0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Fire;','','');
REPLACE INTO `item_db` VALUES ('13204','Lighting_Sphere','Lightning Sphere','10','80','40','5','50','0','0','0','0','16777216','63','2','32768','0','1',NULL,'0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Wind;','','');
REPLACE INTO `item_db` VALUES ('13205','Poison_Sphere','Poison Sphere','10','80','40','5','50','0','0','0','0','16777216','63','2','32768','0','1',NULL,'0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Poison; bonus2 bAddEff,Eff_Poison,500;','','');
diff --git a/sql-files/item_db2.sql b/sql-files/item_db2.sql
index f6dcc53f4..3819d0fdf 100644
--- a/sql-files/item_db2.sql
+++ b/sql-files/item_db2.sql
@@ -1,7 +1,7 @@
-- This file is part of Hercules.
-- http://herc.ws - http://github.com/HerculesWS/Hercules
--
--- Copyright (C) 2013-2015 Hercules Dev Team
+-- Copyright (C) 2013-2016 Hercules Dev Team
--
-- Hercules is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql
index 31d9059ac..f7d056e95 100644
--- a/sql-files/item_db_re.sql
+++ b/sql-files/item_db_re.sql
@@ -1,7 +1,7 @@
-- This file is part of Hercules.
-- http://herc.ws - http://github.com/HerculesWS/Hercules
--
--- Copyright (C) 2013-2015 Hercules Dev Team
+-- Copyright (C) 2013-2016 Hercules Dev Team
--
-- Hercules is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
@@ -2530,7 +2530,7 @@ REPLACE INTO `item_db` VALUES ('4436','Ragged_Zombie_Card','Ragged Zombie Card',
REPLACE INTO `item_db` VALUES ('4437','Hell_Poodle_Card','Hell Poodle Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','136','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,1; bonus2 bAddItemHealRate,517,100; bonus3 bAddEff,Eff_Bleeding,50,ATF_SHORT;','','');
REPLACE INTO `item_db` VALUES ('4438','Banshee_Card','Banshee Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','769','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if(BaseClass==Job_Mage) { bonus bMaxSP,100; bonus bMaxHP,-100; bonus2 bSkillAtk,MG_NAPALMBEAT,20; bonus2 bSkillAtk,MG_SOULSTRIKE,20; bonus2 bSkillAtk,HW_NAPALMVULCAN,20; }','','');
REPLACE INTO `item_db` VALUES ('4439','Flame_Skull_Card','Flame Skull Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','32','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bResEff,Eff_Blind,3000; bonus2 bResEff,Eff_Stun,3000; bonus2 bResEff,Eff_Curse,3000; bonus2 bResEff,Eff_Stone,3000; bonus2 bAddEffWhenHit,Eff_Blind,500; bonus2 bAddEffWhenHit,Eff_Stun,500; bonus2 bAddEffWhenHit,Eff_Curse,500; bonus2 bAddEffWhenHit,Eff_Stone,500;','','');
-REPLACE INTO `item_db` VALUES ('4440','Necromancer_Card','Necromancer Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','2','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if(getiteminfo(getequipid(EQI_HAND_R),11)==10) { bonus bInt,1; bonus bIgnoreMdefRate,2; }','','');
+REPLACE INTO `item_db` VALUES ('4440','Necromancer_Card','Necromancer Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','2','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','.@i = getiteminfo(getequipid(EQI_HAND_R),11); if (.@i == 10 || .@i == 23) { bonus bInt,1; bonus bIgnoreMdefRate,2; }','','');
REPLACE INTO `item_db` VALUES ('4441','Fallen_Bishop_Card','Fallen Bishop Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','64','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,10; bonus bMaxSPrate,-50; bonus2 bMagicAddRace,RC_Angel,50; bonus2 bMagicAddRace,RC_DemiPlayer,50;','','');
REPLACE INTO `item_db` VALUES ('4442','Tatacho_Card','Tatacho Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','32','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle,Ele_Neutral,20; bonus2 bAddEle,Ele_Neutral,5;','','');
REPLACE INTO `item_db` VALUES ('4443','Aqua_Elemental_Card','Aqua Elemental Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','32','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle,Ele_Water,20; bonus2 bAddEle,Ele_Water,5;','','');
@@ -2773,173 +2773,304 @@ REPLACE INTO `item_db` VALUES ('4693','True_Chen_Liu_Card','True Chen Liu Card',
REPLACE INTO `item_db` VALUES ('4694','True_Gertie_Card','True Gertie Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','2','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,SC_FEINTBOMB,50; if (getequipweaponlv(EQI_HAND_R) == 4) bonus2 bSkillAtk,SC_FEINTBOMB,50; if (getrefine() >= 10) bonus2 bSkillAtk,SC_FEINTBOMB,50;','','');
REPLACE INTO `item_db` VALUES ('4695','True_Trentini_Card','True Trentini Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','2','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,WM_METALICSOUND,50; if (getequipweaponlv(EQI_HAND_R) == 4) bonus2 bSkillAtk,WM_METALICSOUND,50; if (getrefine() >= 10) bonus2 bSkillAtk,WM_METALICSOUND,50;','','');
REPLACE INTO `item_db` VALUES ('4696','True_Alphoccio_Card','True Alphoccio Card','6','20','10','10','0','0','0','0','0','4294967295','63','2','2','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,WM_REVERBERATION,50; if (getequipweaponlv(EQI_HAND_R) == 4) bonus2 bSkillAtk,WM_REVERBERATION,50; if (getrefine() >= 10) bonus2 bSkillAtk,WM_REVERBERATION,50;','','');
-REPLACE INTO `item_db` VALUES ('4700','Strength1','STR+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1;','','');
-REPLACE INTO `item_db` VALUES ('4701','Strength2','STR+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2;','','');
-REPLACE INTO `item_db` VALUES ('4702','Strength3','STR+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3;','','');
-REPLACE INTO `item_db` VALUES ('4703','Strength4','STR+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,4;','','');
-REPLACE INTO `item_db` VALUES ('4704','Strength5','STR+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,5;','','');
-REPLACE INTO `item_db` VALUES ('4705','Strength6','STR+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,6;','','');
-REPLACE INTO `item_db` VALUES ('4706','Strength7','STR+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,7;','','');
-REPLACE INTO `item_db` VALUES ('4707','Strength8','STR+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,8;','','');
-REPLACE INTO `item_db` VALUES ('4708','Strength9','STR+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,9;','','');
-REPLACE INTO `item_db` VALUES ('4709','Strength10','STR+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,10;','','');
-REPLACE INTO `item_db` VALUES ('4710','Inteligence1','INT+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
-REPLACE INTO `item_db` VALUES ('4711','Inteligence2','INT+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
-REPLACE INTO `item_db` VALUES ('4712','Inteligence3','INT+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,3;','','');
-REPLACE INTO `item_db` VALUES ('4713','Inteligence4','INT+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,4;','','');
-REPLACE INTO `item_db` VALUES ('4714','Inteligence5','INT+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,5;','','');
-REPLACE INTO `item_db` VALUES ('4715','Inteligence6','INT+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6;','','');
-REPLACE INTO `item_db` VALUES ('4716','Inteligence7','INT+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,7;','','');
-REPLACE INTO `item_db` VALUES ('4717','Inteligence8','INT+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,8;','','');
-REPLACE INTO `item_db` VALUES ('4718','Inteligence9','INT+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,9;','','');
-REPLACE INTO `item_db` VALUES ('4719','Inteligence10','INT+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,10;','','');
-REPLACE INTO `item_db` VALUES ('4720','Dexterity1','DEX+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1;','','');
-REPLACE INTO `item_db` VALUES ('4721','Dexterity2','DEX+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2;','','');
-REPLACE INTO `item_db` VALUES ('4722','Dexterity3','DEX+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,3;','','');
-REPLACE INTO `item_db` VALUES ('4723','Dexterity4','DEX+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,4;','','');
-REPLACE INTO `item_db` VALUES ('4724','Dexterity5','DEX+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,5;','','');
-REPLACE INTO `item_db` VALUES ('4725','Dexterity6','DEX+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,6;','','');
-REPLACE INTO `item_db` VALUES ('4726','Dexterity7','DEX+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,7;','','');
-REPLACE INTO `item_db` VALUES ('4727','Dexterity8','DEX+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,8;','','');
-REPLACE INTO `item_db` VALUES ('4728','Dexterity9','DEX+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,9;','','');
-REPLACE INTO `item_db` VALUES ('4729','Dexterity10','DEX+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,10;','','');
-REPLACE INTO `item_db` VALUES ('4730','Agility1','AGI+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,1;','','');
-REPLACE INTO `item_db` VALUES ('4731','Agility2','AGI+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,2;','','');
-REPLACE INTO `item_db` VALUES ('4732','Agility3','AGI+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,3;','','');
-REPLACE INTO `item_db` VALUES ('4733','Agility4','AGI+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,4;','','');
-REPLACE INTO `item_db` VALUES ('4734','Agility5','AGI+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,5;','','');
-REPLACE INTO `item_db` VALUES ('4735','Agility6','AGI+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,6;','','');
-REPLACE INTO `item_db` VALUES ('4736','Agility7','AGI+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,7;','','');
-REPLACE INTO `item_db` VALUES ('4737','Agility8','AGI+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,8;','','');
-REPLACE INTO `item_db` VALUES ('4738','Agility9','AGI+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,9;','','');
-REPLACE INTO `item_db` VALUES ('4739','Agility10','AGI+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,10;','','');
-REPLACE INTO `item_db` VALUES ('4740','Vitality1','VIT+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,1;','','');
-REPLACE INTO `item_db` VALUES ('4741','Vitality2','VIT+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,2;','','');
-REPLACE INTO `item_db` VALUES ('4742','Vitality3','VIT+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,3;','','');
-REPLACE INTO `item_db` VALUES ('4743','Vitality4','VIT+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,4;','','');
-REPLACE INTO `item_db` VALUES ('4744','Vitality5','VIT+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,5;','','');
-REPLACE INTO `item_db` VALUES ('4745','Vitality6','VIT+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,6;','','');
-REPLACE INTO `item_db` VALUES ('4746','Vitality7','VIT+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,7;','','');
-REPLACE INTO `item_db` VALUES ('4747','Vitality8','VIT+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,8;','','');
-REPLACE INTO `item_db` VALUES ('4748','Vitality9','VIT+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,9;','','');
-REPLACE INTO `item_db` VALUES ('4749','Vitality10','VIT+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,10;','','');
-REPLACE INTO `item_db` VALUES ('4750','Luck1','LUK+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,1;','','');
-REPLACE INTO `item_db` VALUES ('4751','Luck2','LUK+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,2;','','');
-REPLACE INTO `item_db` VALUES ('4752','Luck3','LUK+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,3;','','');
-REPLACE INTO `item_db` VALUES ('4753','Luck4','LUK+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,4;','','');
-REPLACE INTO `item_db` VALUES ('4754','Luck5','LUK+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,5;','','');
-REPLACE INTO `item_db` VALUES ('4755','Luck6','LUK+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,6;','','');
-REPLACE INTO `item_db` VALUES ('4756','Luck7','LUK+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,7;','','');
-REPLACE INTO `item_db` VALUES ('4757','Luck8','LUK+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,8;','','');
-REPLACE INTO `item_db` VALUES ('4758','Luck9','LUK+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,9;','','');
-REPLACE INTO `item_db` VALUES ('4759','Luck10','LUK+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,10;','','');
-REPLACE INTO `item_db` VALUES ('4760','Matk1','MATK+1%','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,1; bonus bFixedCastrate,-1;','','');
-REPLACE INTO `item_db` VALUES ('4761','Matk2','MATK+2%','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,2; bonus bFixedCastrate,-1;','','');
-REPLACE INTO `item_db` VALUES ('4762','Evasion6','FLEE+6','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,6;','','');
-REPLACE INTO `item_db` VALUES ('4763','Evasion12','FLEE+12','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,12;','','');
-REPLACE INTO `item_db` VALUES ('4764','Critical5','CRI+5','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,5;','','');
-REPLACE INTO `item_db` VALUES ('4765','Critical7','CRI+7','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,7;','','');
-REPLACE INTO `item_db` VALUES ('4766','Atk2','ATK+2%','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,2;','','');
-REPLACE INTO `item_db` VALUES ('4767','Atk3','ATK+3%','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,3;','','');
-REPLACE INTO `item_db` VALUES ('4768','Str1_J','Str1 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1;','','');
-REPLACE INTO `item_db` VALUES ('4769','Str2_J','Str2 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2;','','');
-REPLACE INTO `item_db` VALUES ('4770','Str3_J','Str3 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3;','','');
-REPLACE INTO `item_db` VALUES ('4771','Int1_J','Int1 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
-REPLACE INTO `item_db` VALUES ('4772','Int2_J','Int2 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
-REPLACE INTO `item_db` VALUES ('4773','Int3_J','Int3 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,3;','','');
-REPLACE INTO `item_db` VALUES ('4774','Vit1_J','Vit1 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,1;','','');
-REPLACE INTO `item_db` VALUES ('4775','Vit2_J','Vit2 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,2;','','');
-REPLACE INTO `item_db` VALUES ('4776','Vit3_J','Vit3 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,3;','','');
-REPLACE INTO `item_db` VALUES ('4777','Agi1_J','Agi1 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,1;','','');
-REPLACE INTO `item_db` VALUES ('4778','Agi2_J','Agi2 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,2;','','');
-REPLACE INTO `item_db` VALUES ('4779','Agi3_J','Agi3 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,3;','','');
-REPLACE INTO `item_db` VALUES ('4780','Dex1_J','Dex1 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1;','','');
-REPLACE INTO `item_db` VALUES ('4781','Dex2_J','Dex2 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2;','','');
-REPLACE INTO `item_db` VALUES ('4782','Dex3_J','Dex3 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,3;','','');
-REPLACE INTO `item_db` VALUES ('4783','Luk1_J','Luk1 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,1;','','');
-REPLACE INTO `item_db` VALUES ('4784','Luk2_J','Luk2 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,2;','','');
-REPLACE INTO `item_db` VALUES ('4785','Luk3_J','Luk3 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,3;','','');
-REPLACE INTO `item_db` VALUES ('4786','Mdef2','MDEF+2','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,2;','','');
-REPLACE INTO `item_db` VALUES ('4787','Mdef4','MDEF+4','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,4;','','');
-REPLACE INTO `item_db` VALUES ('4788','Mdef6','MDEF+6','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,6;','','');
-REPLACE INTO `item_db` VALUES ('4789','Mdef8','MDEF+8','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,8;','','');
-REPLACE INTO `item_db` VALUES ('4790','Mdef10','MDEF+10','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,10;','','');
-REPLACE INTO `item_db` VALUES ('4791','Def3','DEF+3','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef,3;','','');
-REPLACE INTO `item_db` VALUES ('4792','Def6','DEF+6','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef,6;','','');
-REPLACE INTO `item_db` VALUES ('4793','Def9','DEF+9','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef,9;','','');
-REPLACE INTO `item_db` VALUES ('4794','Def12','DEF+12','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef,12;','','');
-REPLACE INTO `item_db` VALUES ('4795','HP100','HP+100','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,100;','','');
-REPLACE INTO `item_db` VALUES ('4796','HP200','HP+200','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,200;','','');
-REPLACE INTO `item_db` VALUES ('4797','HP300','HP+300','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,300;','','');
-REPLACE INTO `item_db` VALUES ('4798','HP400','HP+400','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,400;','','');
-REPLACE INTO `item_db` VALUES ('4799','HP500','HP+500','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,500;','','');
-REPLACE INTO `item_db` VALUES ('4800','SP50','SP+50','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSP,50;','','');
-REPLACE INTO `item_db` VALUES ('4801','SP100','SP+100','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSP,100;','','');
-REPLACE INTO `item_db` VALUES ('4802','SP150','SP+150','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSP,150;','','');
-REPLACE INTO `item_db` VALUES ('4803','Highness_Heal_3sec','Cure1Lv.','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillCooldown,AB_HIGHNESSHEAL,-3000;','','');
-REPLACE INTO `item_db` VALUES ('4804','Coluceo_Heal30','Catholic1Lv.','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillUseSP,AB_CHEAL,30;','','');
-REPLACE INTO `item_db` VALUES ('4805','Heal_Amount2','Archbishop1Lv.','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHealPower,3;','','');
-REPLACE INTO `item_db` VALUES ('4806','Matk3','MATK+3%','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,3; bonus bFixedCastrate,-1;','','');
-REPLACE INTO `item_db` VALUES ('4807','Atk_Speed1','Atk Speed1','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspd,1;','','');
-REPLACE INTO `item_db` VALUES ('4808','Fighting_Spirit4','Fighting Spirit4','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,15; bonus bHit,5;','','');
-REPLACE INTO `item_db` VALUES ('4809','Fighting_Spirit3','Fighting Spirit3','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,12; bonus bHit,4;','','');
-REPLACE INTO `item_db` VALUES ('4810','Fighting_Spirit2','Fighting Spirit2','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,9; bonus bHit,3;','','');
-REPLACE INTO `item_db` VALUES ('4811','Fighting_Spirit1','Fighting Spirit1','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,6; bonus bHit,2;','','');
-REPLACE INTO `item_db` VALUES ('4812','Spell4','Spell4','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,15; bonus bVariableCastrate,-10;','','');
-REPLACE INTO `item_db` VALUES ('4813','Spell3','Spell3','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,12; bonus bVariableCastrate,-8;','','');
-REPLACE INTO `item_db` VALUES ('4814','Spell2','Spell2','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,9; bonus bVariableCastrate,-6;','','');
-REPLACE INTO `item_db` VALUES ('4815','Spell1','Spell1','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,6; bonus bVariableCastrate,-4;','','');
-REPLACE INTO `item_db` VALUES ('4816','Sharp3','Sharp3','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,12; bonus bHit,4;','','');
-REPLACE INTO `item_db` VALUES ('4817','Sharp2','Sharp2','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,9; bonus bHit,3;','','');
-REPLACE INTO `item_db` VALUES ('4818','Sharp1','Sharp1','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,6; bonus bHit,2;','','');
-REPLACE INTO `item_db` VALUES ('4819','Atk1','Atk1','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,1;','','');
-REPLACE INTO `item_db` VALUES ('4820','Fighting_Spirit5','Fighting Spirit5','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,18; bonus bHit,5;','','');
-REPLACE INTO `item_db` VALUES ('4821','Fighting_Spirit6','Fighting Spirit6','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,21; bonus bHit,5;','','');
-REPLACE INTO `item_db` VALUES ('4822','Fighting_Spirit7','Fighting Spirit7','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,24; bonus bHit,5;','','');
-REPLACE INTO `item_db` VALUES ('4823','Fighting_Spirit8','Fighting Spirit8','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,27; bonus bHit,5;','','');
-REPLACE INTO `item_db` VALUES ('4824','Fighting_Spirit9','Fighting Spirit9','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,30; bonus bHit,5;','','');
-REPLACE INTO `item_db` VALUES ('4825','Fighting_Spirit10','Fighting Spirit10','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,50; bonus bHit,15;','','');
-REPLACE INTO `item_db` VALUES ('4826','Spell5','Spell5','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,18; bonus bVariableCastrate,-10;','','');
-REPLACE INTO `item_db` VALUES ('4827','Spell6','Spell6','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,21; bonus bVariableCastrate,-10;','','');
-REPLACE INTO `item_db` VALUES ('4828','Spell7','Spell7','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,24; bonus bVariableCastrate,-10;','','');
-REPLACE INTO `item_db` VALUES ('4829','Spell8','Spell8','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,27; bonus bVariableCastrate,-10;','','');
-REPLACE INTO `item_db` VALUES ('4830','Spell9','Spell9','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,30; bonus bVariableCastrate,-10;','','');
-REPLACE INTO `item_db` VALUES ('4831','Spell10','Spell10','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,50; bonus bVariableCastrate,-20;','','');
-REPLACE INTO `item_db` VALUES ('4832','Expert_Archer1','Expert Archer1','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,2;','','');
-REPLACE INTO `item_db` VALUES ('4833','Expert_Archer2','Expert Archer2','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,4;','','');
-REPLACE INTO `item_db` VALUES ('4834','Expert_Archer3','Expert Archer3','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,6;','','');
-REPLACE INTO `item_db` VALUES ('4835','Expert_Archer4','Expert Archer4','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,8;','','');
-REPLACE INTO `item_db` VALUES ('4836','Expert_Archer5','Expert Archer5','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,10;','','');
-REPLACE INTO `item_db` VALUES ('4837','Expert_Archer6','Expert Archer6','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,12;','','');
-REPLACE INTO `item_db` VALUES ('4838','Expert_Archer7','Expert Archer7','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,14;','','');
-REPLACE INTO `item_db` VALUES ('4839','Expert_Archer8','Expert Archer8','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,16;','','');
-REPLACE INTO `item_db` VALUES ('4840','Expert_Archer9','Expert Archer9','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,18;','','');
-REPLACE INTO `item_db` VALUES ('4841','Expert_Archer10','Expert Archer10','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,20; bonus bAspd,1;','','');
-REPLACE INTO `item_db` VALUES ('4842','Atk_Speed2','Atk Speed2','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspd,2;','','');
-REPLACE INTO `item_db` VALUES ('4843','Sharp4','Sharp4','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,14; bonus bHit,5;','','');
-REPLACE INTO `item_db` VALUES ('4844','Sharp5','Sharp5','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,15; bonus bHit,6;','','');
-REPLACE INTO `item_db` VALUES ('4845','Sea_Energy','Strength Of Ocean','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('4846','2011Valentin_Angel','Fully Loved Stone','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,10; bonus bMatk,10;','','');
-REPLACE INTO `item_db` VALUES ('4847','2011Valentin_Devil','Spelled Stone','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,10; bonus bMatk,10;','','');
-REPLACE INTO `item_db` VALUES ('4848','Immuned1','Immune Level 1','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle,Ele_Neutral,5;','','');
-REPLACE INTO `item_db` VALUES ('4849','Cranial1','Cranial Level 1','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRaceTolerance,RC_DemiPlayer,5;','','');
-REPLACE INTO `item_db` VALUES ('4850','Heal_Amount3','Heal Amount3','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHealPower,6; bonus bUseSPrate,5;','','');
-REPLACE INTO `item_db` VALUES ('4851','Heal_Amount4','Heal Amount4','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHealPower,12; bonus bUseSPrate,10;','','');
-REPLACE INTO `item_db` VALUES ('4852','Heal_Amount5','Heal Amount5','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHealPower,20; bonus bUseSPrate,15;','','');
-REPLACE INTO `item_db` VALUES ('4853','S_Str','Special Str','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1; if(getrefine()>7) { bonus bStr,3; } if (getrefine() > 8) { bonus2 bAddRace, RC_All, 1; } if(getrefine()>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }','','');
-REPLACE INTO `item_db` VALUES ('4854','S_Agi','Special Agi','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,1; if(getrefine()>7) { bonus bAgi,3; } if (getrefine() > 8) { bonus2 bAddRace, RC_All, 1; } if(getrefine()>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }','','');
-REPLACE INTO `item_db` VALUES ('4855','S_Vital','Special Vit','2','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,1; if(getrefine()>7) { bonus bVit,3; } if(getrefine()>8) { bonus bMaxSPrate,1; } if(getrefine()>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }','','');
-REPLACE INTO `item_db` VALUES ('4856','S_Int','Special Int','2','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1; if(getrefine()>7) { bonus bInt,3; } if(getrefine()>8) { bonus bMatkRate,1; } if(getrefine()>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }','','');
-REPLACE INTO `item_db` VALUES ('4857','S_Dex','Special Dex','2','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1; if(getrefine()>7) { bonus bDex,3; } if(getrefine()>8) { bonus bMatkRate,1; } if(getrefine()>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }','','');
-REPLACE INTO `item_db` VALUES ('4858','S_Luck','Special Luk','2','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,1; if(getrefine()>7) { bonus bLuk,3; } if(getrefine()>8) { bonus bMaxHPrate,1; } if(getrefine()>11) { bonus bAspd,1; bonus bFixedCastrate,-7; }','','');
-REPLACE INTO `item_db` VALUES ('4859','Evasion1','Evasion1','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,1;','','');
-REPLACE INTO `item_db` VALUES ('4860','Evasion3','Evasion3','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,3;','','');
-REPLACE INTO `item_db` VALUES ('4861','MHP1','MHP+1%','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHPrate,1;','','');
-REPLACE INTO `item_db` VALUES ('4862','MHP2','MHP+2%','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHPrate,2;','','');
-REPLACE INTO `item_db` VALUES ('4867','MHP3','MHP+3%','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHPrate,3;','','');
-REPLACE INTO `item_db` VALUES ('4868','MHP4','MHP+4%','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHPrate,4;','','');
-REPLACE INTO `item_db` VALUES ('4870','SP25','SP+25','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSP,25;','','');
-REPLACE INTO `item_db` VALUES ('4871','SP75','SP+75','6','0','0','0','0','0','0','0','0','4294967295','63','2','16','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSP,75;','','');
+REPLACE INTO `item_db` VALUES ('4700','Strength1','STR+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1;','','');
+REPLACE INTO `item_db` VALUES ('4701','Strength2','STR+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2;','','');
+REPLACE INTO `item_db` VALUES ('4702','Strength3','STR+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3;','','');
+REPLACE INTO `item_db` VALUES ('4703','Strength4','STR+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,4;','','');
+REPLACE INTO `item_db` VALUES ('4704','Strength5','STR+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,5;','','');
+REPLACE INTO `item_db` VALUES ('4705','Strength6','STR+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,6;','','');
+REPLACE INTO `item_db` VALUES ('4706','Strength7','STR+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,7;','','');
+REPLACE INTO `item_db` VALUES ('4707','Strength8','STR+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,8;','','');
+REPLACE INTO `item_db` VALUES ('4708','Strength9','STR+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,9;','','');
+REPLACE INTO `item_db` VALUES ('4709','Strength10','STR+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,10;','','');
+REPLACE INTO `item_db` VALUES ('4710','Inteligence1','INT+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
+REPLACE INTO `item_db` VALUES ('4711','Inteligence2','INT+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
+REPLACE INTO `item_db` VALUES ('4712','Inteligence3','INT+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,3;','','');
+REPLACE INTO `item_db` VALUES ('4713','Inteligence4','INT+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,4;','','');
+REPLACE INTO `item_db` VALUES ('4714','Inteligence5','INT+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,5;','','');
+REPLACE INTO `item_db` VALUES ('4715','Inteligence6','INT+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6;','','');
+REPLACE INTO `item_db` VALUES ('4716','Inteligence7','INT+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,7;','','');
+REPLACE INTO `item_db` VALUES ('4717','Inteligence8','INT+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,8;','','');
+REPLACE INTO `item_db` VALUES ('4718','Inteligence9','INT+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,9;','','');
+REPLACE INTO `item_db` VALUES ('4719','Inteligence10','INT+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,10;','','');
+REPLACE INTO `item_db` VALUES ('4720','Dexterity1','DEX+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1;','','');
+REPLACE INTO `item_db` VALUES ('4721','Dexterity2','DEX+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2;','','');
+REPLACE INTO `item_db` VALUES ('4722','Dexterity3','DEX+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,3;','','');
+REPLACE INTO `item_db` VALUES ('4723','Dexterity4','DEX+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,4;','','');
+REPLACE INTO `item_db` VALUES ('4724','Dexterity5','DEX+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,5;','','');
+REPLACE INTO `item_db` VALUES ('4725','Dexterity6','DEX+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,6;','','');
+REPLACE INTO `item_db` VALUES ('4726','Dexterity7','DEX+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,7;','','');
+REPLACE INTO `item_db` VALUES ('4727','Dexterity8','DEX+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,8;','','');
+REPLACE INTO `item_db` VALUES ('4728','Dexterity9','DEX+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,9;','','');
+REPLACE INTO `item_db` VALUES ('4729','Dexterity10','DEX+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,10;','','');
+REPLACE INTO `item_db` VALUES ('4730','Agility1','AGI+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,1;','','');
+REPLACE INTO `item_db` VALUES ('4731','Agility2','AGI+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,2;','','');
+REPLACE INTO `item_db` VALUES ('4732','Agility3','AGI+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,3;','','');
+REPLACE INTO `item_db` VALUES ('4733','Agility4','AGI+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,4;','','');
+REPLACE INTO `item_db` VALUES ('4734','Agility5','AGI+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,5;','','');
+REPLACE INTO `item_db` VALUES ('4735','Agility6','AGI+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,6;','','');
+REPLACE INTO `item_db` VALUES ('4736','Agility7','AGI+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,7;','','');
+REPLACE INTO `item_db` VALUES ('4737','Agility8','AGI+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,8;','','');
+REPLACE INTO `item_db` VALUES ('4738','Agility9','AGI+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,9;','','');
+REPLACE INTO `item_db` VALUES ('4739','Agility10','AGI+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,10;','','');
+REPLACE INTO `item_db` VALUES ('4740','Vitality1','VIT+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,1;','','');
+REPLACE INTO `item_db` VALUES ('4741','Vitality2','VIT+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,2;','','');
+REPLACE INTO `item_db` VALUES ('4742','Vitality3','VIT+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,3;','','');
+REPLACE INTO `item_db` VALUES ('4743','Vitality4','VIT+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,4;','','');
+REPLACE INTO `item_db` VALUES ('4744','Vitality5','VIT+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,5;','','');
+REPLACE INTO `item_db` VALUES ('4745','Vitality6','VIT+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,6;','','');
+REPLACE INTO `item_db` VALUES ('4746','Vitality7','VIT+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,7;','','');
+REPLACE INTO `item_db` VALUES ('4747','Vitality8','VIT+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,8;','','');
+REPLACE INTO `item_db` VALUES ('4748','Vitality9','VIT+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,9;','','');
+REPLACE INTO `item_db` VALUES ('4749','Vitality10','VIT+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,10;','','');
+REPLACE INTO `item_db` VALUES ('4750','Luck1','LUK+1','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,1;','','');
+REPLACE INTO `item_db` VALUES ('4751','Luck2','LUK+2','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,2;','','');
+REPLACE INTO `item_db` VALUES ('4752','Luck3','LUK+3','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,3;','','');
+REPLACE INTO `item_db` VALUES ('4753','Luck4','LUK+4','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,4;','','');
+REPLACE INTO `item_db` VALUES ('4754','Luck5','LUK+5','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,5;','','');
+REPLACE INTO `item_db` VALUES ('4755','Luck6','LUK+6','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,6;','','');
+REPLACE INTO `item_db` VALUES ('4756','Luck7','LUK+7','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,7;','','');
+REPLACE INTO `item_db` VALUES ('4757','Luck8','LUK+8','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,8;','','');
+REPLACE INTO `item_db` VALUES ('4758','Luck9','LUK+9','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,9;','','');
+REPLACE INTO `item_db` VALUES ('4759','Luck10','LUK+10','6','20','10','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,10;','','');
+REPLACE INTO `item_db` VALUES ('4760','Matk1','MATK+1%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,1; bonus bFixedCastrate,-1;','','');
+REPLACE INTO `item_db` VALUES ('4761','Matk2','MATK+2%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,2; bonus bFixedCastrate,-1;','','');
+REPLACE INTO `item_db` VALUES ('4762','Evasion6','FLEE+6','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,6;','','');
+REPLACE INTO `item_db` VALUES ('4763','Evasion12','FLEE+12','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,12;','','');
+REPLACE INTO `item_db` VALUES ('4764','Critical5','CRI+5','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,5;','','');
+REPLACE INTO `item_db` VALUES ('4765','Critical7','CRI+7','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,7;','','');
+REPLACE INTO `item_db` VALUES ('4766','Atk2','ATK+2%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,2;','','');
+REPLACE INTO `item_db` VALUES ('4767','Atk3','ATK+3%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,3;','','');
+REPLACE INTO `item_db` VALUES ('4768','Str1_J','Str1 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1;','','');
+REPLACE INTO `item_db` VALUES ('4769','Str2_J','Str2 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2;','','');
+REPLACE INTO `item_db` VALUES ('4770','Str3_J','Str3 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3;','','');
+REPLACE INTO `item_db` VALUES ('4771','Int1_J','Int1 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1;','','');
+REPLACE INTO `item_db` VALUES ('4772','Int2_J','Int2 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2;','','');
+REPLACE INTO `item_db` VALUES ('4773','Int3_J','Int3 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,3;','','');
+REPLACE INTO `item_db` VALUES ('4774','Vit1_J','Vit1 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,1;','','');
+REPLACE INTO `item_db` VALUES ('4775','Vit2_J','Vit2 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,2;','','');
+REPLACE INTO `item_db` VALUES ('4776','Vit3_J','Vit3 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,3;','','');
+REPLACE INTO `item_db` VALUES ('4777','Agi1_J','Agi1 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,1;','','');
+REPLACE INTO `item_db` VALUES ('4778','Agi2_J','Agi2 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,2;','','');
+REPLACE INTO `item_db` VALUES ('4779','Agi3_J','Agi3 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,3;','','');
+REPLACE INTO `item_db` VALUES ('4780','Dex1_J','Dex1 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1;','','');
+REPLACE INTO `item_db` VALUES ('4781','Dex2_J','Dex2 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2;','','');
+REPLACE INTO `item_db` VALUES ('4782','Dex3_J','Dex3 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,3;','','');
+REPLACE INTO `item_db` VALUES ('4783','Luk1_J','Luk1 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,1;','','');
+REPLACE INTO `item_db` VALUES ('4784','Luk2_J','Luk2 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,2;','','');
+REPLACE INTO `item_db` VALUES ('4785','Luk3_J','Luk3 J','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,3;','','');
+REPLACE INTO `item_db` VALUES ('4786','Mdef2','MDEF+2','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,2;','','');
+REPLACE INTO `item_db` VALUES ('4787','Mdef4','MDEF+4','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,4;','','');
+REPLACE INTO `item_db` VALUES ('4788','Mdef6','MDEF+6','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,6;','','');
+REPLACE INTO `item_db` VALUES ('4789','Mdef8','MDEF+8','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,8;','','');
+REPLACE INTO `item_db` VALUES ('4790','Mdef10','MDEF+10','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef,10;','','');
+REPLACE INTO `item_db` VALUES ('4791','Def3','DEF+3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef,3;','','');
+REPLACE INTO `item_db` VALUES ('4792','Def6','DEF+6','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef,6;','','');
+REPLACE INTO `item_db` VALUES ('4793','Def9','DEF+9','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef,9;','','');
+REPLACE INTO `item_db` VALUES ('4794','Def12','DEF+12','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef,12;','','');
+REPLACE INTO `item_db` VALUES ('4795','HP100','HP+100','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,100;','','');
+REPLACE INTO `item_db` VALUES ('4796','HP200','HP+200','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,200;','','');
+REPLACE INTO `item_db` VALUES ('4797','HP300','HP+300','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,300;','','');
+REPLACE INTO `item_db` VALUES ('4798','HP400','HP+400','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,400;','','');
+REPLACE INTO `item_db` VALUES ('4799','HP500','HP+500','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,500;','','');
+REPLACE INTO `item_db` VALUES ('4800','SP50','SP+50','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSP,50;','','');
+REPLACE INTO `item_db` VALUES ('4801','SP100','SP+100','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSP,100;','','');
+REPLACE INTO `item_db` VALUES ('4802','SP150','SP+150','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSP,150;','','');
+REPLACE INTO `item_db` VALUES ('4803','Highness_Heal_3sec','Cure1Lv.','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillCooldown,AB_HIGHNESSHEAL,-3000;','','');
+REPLACE INTO `item_db` VALUES ('4804','Coluceo_Heal30','Catholic1Lv.','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillUseSP,AB_CHEAL,30;','','');
+REPLACE INTO `item_db` VALUES ('4805','Heal_Amount2','Archbishop1Lv.','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHealPower,3;','','');
+REPLACE INTO `item_db` VALUES ('4806','Matk3','MATK+3%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,3; bonus bFixedCastrate,-1;','','');
+REPLACE INTO `item_db` VALUES ('4807','Atk_Speed1','Atk Speed1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspd,1;','','');
+REPLACE INTO `item_db` VALUES ('4808','Fighting_Spirit4','Fighting Spirit4','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,15; bonus bHit,5;','','');
+REPLACE INTO `item_db` VALUES ('4809','Fighting_Spirit3','Fighting Spirit3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,12; bonus bHit,4;','','');
+REPLACE INTO `item_db` VALUES ('4810','Fighting_Spirit2','Fighting Spirit2','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,9; bonus bHit,3;','','');
+REPLACE INTO `item_db` VALUES ('4811','Fighting_Spirit1','Fighting Spirit1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,6; bonus bHit,2;','','');
+REPLACE INTO `item_db` VALUES ('4812','Spell4','Spell4','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,15; bonus bVariableCastrate,-10;','','');
+REPLACE INTO `item_db` VALUES ('4813','Spell3','Spell3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,12; bonus bVariableCastrate,-8;','','');
+REPLACE INTO `item_db` VALUES ('4814','Spell2','Spell2','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,9; bonus bVariableCastrate,-6;','','');
+REPLACE INTO `item_db` VALUES ('4815','Spell1','Spell1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,6; bonus bVariableCastrate,-4;','','');
+REPLACE INTO `item_db` VALUES ('4816','Sharp3','Sharp3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,12; bonus bHit,4;','','');
+REPLACE INTO `item_db` VALUES ('4817','Sharp2','Sharp2','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,9; bonus bHit,3;','','');
+REPLACE INTO `item_db` VALUES ('4818','Sharp1','Sharp1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,6; bonus bHit,2;','','');
+REPLACE INTO `item_db` VALUES ('4819','Atk1','Atk1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,1;','','');
+REPLACE INTO `item_db` VALUES ('4820','Fighting_Spirit5','Fighting Spirit5','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,18; bonus bHit,5;','','');
+REPLACE INTO `item_db` VALUES ('4821','Fighting_Spirit6','Fighting Spirit6','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,21; bonus bHit,5;','','');
+REPLACE INTO `item_db` VALUES ('4822','Fighting_Spirit7','Fighting Spirit7','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,24; bonus bHit,5;','','');
+REPLACE INTO `item_db` VALUES ('4823','Fighting_Spirit8','Fighting Spirit8','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,27; bonus bHit,5;','','');
+REPLACE INTO `item_db` VALUES ('4824','Fighting_Spirit9','Fighting Spirit9','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,30; bonus bHit,5;','','');
+REPLACE INTO `item_db` VALUES ('4825','Fighting_Spirit10','Fighting Spirit10','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,50; bonus bHit,15;','','');
+REPLACE INTO `item_db` VALUES ('4826','Spell5','Spell5','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,18; bonus bVariableCastrate,-10;','','');
+REPLACE INTO `item_db` VALUES ('4827','Spell6','Spell6','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,21; bonus bVariableCastrate,-10;','','');
+REPLACE INTO `item_db` VALUES ('4828','Spell7','Spell7','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,24; bonus bVariableCastrate,-10;','','');
+REPLACE INTO `item_db` VALUES ('4829','Spell8','Spell8','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,27; bonus bVariableCastrate,-10;','','');
+REPLACE INTO `item_db` VALUES ('4830','Spell9','Spell9','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,30; bonus bVariableCastrate,-10;','','');
+REPLACE INTO `item_db` VALUES ('4831','Spell10','Spell10','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,50; bonus bVariableCastrate,-20;','','');
+REPLACE INTO `item_db` VALUES ('4832','Expert_Archer1','Expert Archer1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,2;','','');
+REPLACE INTO `item_db` VALUES ('4833','Expert_Archer2','Expert Archer2','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,4;','','');
+REPLACE INTO `item_db` VALUES ('4834','Expert_Archer3','Expert Archer3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,6;','','');
+REPLACE INTO `item_db` VALUES ('4835','Expert_Archer4','Expert Archer4','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,8;','','');
+REPLACE INTO `item_db` VALUES ('4836','Expert_Archer5','Expert Archer5','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,10;','','');
+REPLACE INTO `item_db` VALUES ('4837','Expert_Archer6','Expert Archer6','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,12;','','');
+REPLACE INTO `item_db` VALUES ('4838','Expert_Archer7','Expert Archer7','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,14;','','');
+REPLACE INTO `item_db` VALUES ('4839','Expert_Archer8','Expert Archer8','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,16;','','');
+REPLACE INTO `item_db` VALUES ('4840','Expert_Archer9','Expert Archer9','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,18;','','');
+REPLACE INTO `item_db` VALUES ('4841','Expert_Archer10','Expert Archer10','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,20; bonus bAspd,1;','','');
+REPLACE INTO `item_db` VALUES ('4842','Atk_Speed2','Atk Speed2','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspd,2;','','');
+REPLACE INTO `item_db` VALUES ('4843','Sharp4','Sharp4','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,14; bonus bHit,5;','','');
+REPLACE INTO `item_db` VALUES ('4844','Sharp5','Sharp5','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,15; bonus bHit,6;','','');
+REPLACE INTO `item_db` VALUES ('4845','Sea_Energy','Strength Of Ocean','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4846','2011Valentin_Angel','Fully Loved Stone','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,10; bonus bMatk,10;','','');
+REPLACE INTO `item_db` VALUES ('4847','2011Valentin_Devil','Spelled Stone','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,10; bonus bMatk,10;','','');
+REPLACE INTO `item_db` VALUES ('4848','Immuned1','Immune Level 1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle,Ele_Neutral,5;','','');
+REPLACE INTO `item_db` VALUES ('4849','Cranial1','Cranial Level 1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRaceTolerance,RC_DemiPlayer,5;','','');
+REPLACE INTO `item_db` VALUES ('4850','Heal_Amount3','Heal Amount3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHealPower,6; bonus bUseSPrate,5;','','');
+REPLACE INTO `item_db` VALUES ('4851','Heal_Amount4','Heal Amount4','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHealPower,12; bonus bUseSPrate,10;','','');
+REPLACE INTO `item_db` VALUES ('4852','Heal_Amount5','Heal Amount5','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHealPower,20; bonus bUseSPrate,15;','','');
+REPLACE INTO `item_db` VALUES ('4853','S_Str','Special Str','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1; if (getrefine() >= 8) { bonus bStr,3; } if (getrefine() >= 9) { bonus2 bAddRace, RC_All, 1; } if (getrefine() >= 12) { bonus bAspd,1; bonus bFixedCastrate,-7; }','','');
+REPLACE INTO `item_db` VALUES ('4854','S_Agi','Special Agi','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,1; if (getrefine() >= 8) { bonus bAgi,3; } if (getrefine() >= 9) { bonus2 bAddRace, RC_All, 1; } if (getrefine() >= 12) { bonus bAspd,1; bonus bFixedCastrate,-7; }','','');
+REPLACE INTO `item_db` VALUES ('4855','S_Vital','Special Vit','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit,1; if (getrefine() >= 8) { bonus bVit,3; } if (getrefine() >= 9) { bonus bMaxSPrate,1; } if (getrefine() >= 12) { bonus bAspd,1; bonus bFixedCastrate,-7; }','','');
+REPLACE INTO `item_db` VALUES ('4856','S_Int','Special Int','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,1; if (getrefine() >= 8) { bonus bInt,3; } if (getrefine() >= 9) { bonus bMatkRate,1; } if (getrefine() >= 12) { bonus bAspd,1; bonus bFixedCastrate,-7; }','','');
+REPLACE INTO `item_db` VALUES ('4857','S_Dex','Special Dex','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,1; if (getrefine() >= 8) { bonus bDex,3; } if (getrefine() >= 9) { bonus bMatkRate,1; } if (getrefine() >= 12) { bonus bAspd,1; bonus bFixedCastrate,-7; }','','');
+REPLACE INTO `item_db` VALUES ('4858','S_Luck','Special Luk','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,1; if (getrefine() >= 8) { bonus bLuk,3; } if (getrefine() >= 9) { bonus bMaxHPrate,1; } if (getrefine() >= 12) { bonus bAspd,1; bonus bFixedCastrate,-7; }','','');
+REPLACE INTO `item_db` VALUES ('4859','Evasion1','Evasion1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,1;','','');
+REPLACE INTO `item_db` VALUES ('4860','Evasion3','Evasion3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee,3;','','');
+REPLACE INTO `item_db` VALUES ('4861','MHP1','MHP+1%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHPrate,1;','','');
+REPLACE INTO `item_db` VALUES ('4862','MHP2','MHP+2%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHPrate,2;','','');
+REPLACE INTO `item_db` VALUES ('4863','Fatal1','Fatal1Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCriAtkRate, 4; bonus bCritical, 1;','','');
+REPLACE INTO `item_db` VALUES ('4864','Fatal2','Fatal2Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCriAtkRate, 6; bonus bCritical, 2;','','');
+REPLACE INTO `item_db` VALUES ('4865','Fatal3','Fatal3Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCriAtkRate, 8; bonus bCritical, 3;','','');
+REPLACE INTO `item_db` VALUES ('4866','Fatal4','Fatal4Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCriAtkRate, 10; bonus bCritical, 4;','','');
+REPLACE INTO `item_db` VALUES ('4867','MHP3','MHP+3%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHPrate,3;','','');
+REPLACE INTO `item_db` VALUES ('4868','MHP4','MHP+4%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHPrate,4;','','');
+REPLACE INTO `item_db` VALUES ('4869','Attack_Delay_1','DelayafterAttack1Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspdRate, 4;','','');
+REPLACE INTO `item_db` VALUES ('4870','SP25','SP+25','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSP,25;','','');
+REPLACE INTO `item_db` VALUES ('4871','SP75','SP+75','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSP,75;','','');
+REPLACE INTO `item_db` VALUES ('4872','Attack_Delay_2','DelayafterAttack2Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspdRate, 6;','','');
+REPLACE INTO `item_db` VALUES ('4873','Attack_Delay_3','DelayafterAttack3Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspdRate, 8;','','');
+REPLACE INTO `item_db` VALUES ('4875','Bear\'s_Power','Strength of Bear','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','autobonus2 \"{ bonus bStr, 200; bonus2 bHPLossRate, 500, 1000; montransform BIGFOOT, 5000; }\", 20, 5000, BF_WEAPON, \"{ specialeffect2 EF_POTION_BERSERK; showscript \\\"?!!!!\\\"; }\";','','heal 0, -300;');
+REPLACE INTO `item_db` VALUES ('4876','Runaway_Magic','Runaway Magic','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','autobonus \"{ bonus bInt, 200; bonus2 bSPLossRate, 200, 1000; }\", 15, 10000, BF_MAGIC, \"{ specialeffect2 EF_POTION_BERSERK; showscript \\\"YOooooooo!!!!!\\\"; }\";','','heal 0, -2000;');
+REPLACE INTO `item_db` VALUES ('4877','Speed_Of_Light','Speed Of Light','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','autobonus \"{ bonus bAspdRate, 100; bonus bFlee2, 100; bonus2 bHPLossRate, 400, 1000; bonus2 bSPLossRate, 40, 1000; }\", 10, 5000, BF_WEAPON, \"{ specialeffect2 EF_FLASHER; }\";','','heal 0, -300;');
+REPLACE INTO `item_db` VALUES ('4878','Muscle_Fool','Muscle Fool','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','autobonus2 \"{ bonus bDef, 1000; bonus bMatkRate, -50; bonus bAtkRate, -50; }\", 20, 5000, BF_WEAPON, \"{ specialeffect2 EF_MAGNUMBREAK; }\";','','heal 0, -300;');
+REPLACE INTO `item_db` VALUES ('4879','Hawkeye','Hawkeye','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','autobonus \"{ bonus bDex, 200; bonus2 bSPLossRate, 50, 1000; }\", 30, 5000, BF_WEAPON, \"{ specialeffect2 EF_FLASHER; }\";','','heal 0, -300;');
+REPLACE INTO `item_db` VALUES ('4880','Lucky_Day','Lucky Day','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','autobonus \"{ bonus2 bAddMonsterDropItem, Treasure_Box, 10; bonus bLuk, 200; }\", 15, 5000, BF_WEAPON | BF_MAGIC, \"{ specialeffect2 EF_MVP; }\"; autobonus2 \"{ bonus2 bAddMonsterDropItem, Treasure_Box, 1; bonus bLuk, 200; }\", 1, 5000, BF_WEAPON | BF_MAGIC, \"{ specialeffect2 EF_MVP; }\";','','heal 0, -300;');
+REPLACE INTO `item_db` VALUES ('4881','Attack_Delay_4','DelayafterAttack4Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspdRate, 10;','','');
+REPLACE INTO `item_db` VALUES ('4882','ATK_1','ATK + 1%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate, 1;','','');
+REPLACE INTO `item_db` VALUES ('4883','MATK_1','MATK + 1%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate, 1;','','');
+REPLACE INTO `item_db` VALUES ('4884','HIT_1','HIT + 1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit, 1;','','');
+REPLACE INTO `item_db` VALUES ('4885','Spell_1','Spell 1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk, 5; bonus bVariableCastrate, -3;','','');
+REPLACE INTO `item_db` VALUES ('4886','Spell_2','Spell 2','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk, 10; bonus bVariableCastrate, -3;','','');
+REPLACE INTO `item_db` VALUES ('4887','Spell_3','Spell 3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk, 15; bonus bVariableCastrate, -3;','','');
+REPLACE INTO `item_db` VALUES ('4888','Spell_4','Spell 4','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk, 20; bonus bVariableCastrate, -3;','','');
+REPLACE INTO `item_db` VALUES ('4889','Spell_5','Spell 5','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk, 30; bonus bVariableCastrate, -5;','','');
+REPLACE INTO `item_db` VALUES ('4890','MDEF_1','MDEF+1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef, 1;','','');
+REPLACE INTO `item_db` VALUES ('4891','MDEF_3','MDEF+3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef, 3;','','');
+REPLACE INTO `item_db` VALUES ('4892','MDEF_5','MDEF+5','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMdef, 5;','','');
+REPLACE INTO `item_db` VALUES ('4893','DEF_15','DEF+15','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef, 15;','','');
+REPLACE INTO `item_db` VALUES ('4894','ATK_4','ATK + 4%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate, 4;','','');
+REPLACE INTO `item_db` VALUES ('4895','ATK_5','ATK + 5%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate, 5;','','');
+REPLACE INTO `item_db` VALUES ('4896','MATK_2','MATK + 2%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate, 2;','','');
+REPLACE INTO `item_db` VALUES ('4897','MATK_3','MATK + 3%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate, 3;','','');
+REPLACE INTO `item_db` VALUES ('4898','MATK_4','MATK + 4%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate, 4;','','');
+REPLACE INTO `item_db` VALUES ('4899','MATK_5','MATK + 5%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate, 5;','','');
+REPLACE INTO `item_db` VALUES ('4900','MHP_5','MHP+5%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHPrate, 5;','','');
+REPLACE INTO `item_db` VALUES ('4902','DEF_18','DEF+18','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef, 18;','','');
+REPLACE INTO `item_db` VALUES ('4903','DEF_21','DEF+21','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef, 21;','','');
+REPLACE INTO `item_db` VALUES ('4904','ATK_6','ATK+6%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate, 6;','','');
+REPLACE INTO `item_db` VALUES ('4905','ATK_7','ATK+7%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate, 7;','','');
+REPLACE INTO `item_db` VALUES ('4906','MATK_6','MATK+6%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate, 6;','','');
+REPLACE INTO `item_db` VALUES ('4907','MATK_7','MATK+7%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate, 7;','','');
+REPLACE INTO `item_db` VALUES ('4908','Essence_Of_Evil_Str1','Essence Of Evil STR 1','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr, 1; bonus bBaseAtk, 3; bonus bInt, -1;','','');
+REPLACE INTO `item_db` VALUES ('4909','Essence_Of_Evil_Str2','Essence Of Evil STR 2','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr, 2; bonus bBaseAtk, 6; bonus bInt, -2;','','');
+REPLACE INTO `item_db` VALUES ('4910','Essence_Of_Evil_Str3','Essence Of Evil STR 3','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr, 4; bonus bBaseAtk, 12; bonus bInt, -4;','','');
+REPLACE INTO `item_db` VALUES ('4911','Essence_Of_Evil_Int1','Essence Of Evil INT 1','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt, 1; bonus bMatk, 3; bonus bStr, -1;','','');
+REPLACE INTO `item_db` VALUES ('4912','Essence_Of_Evil_Int2','Essence Of Evil INT 2','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt, 2; bonus bMatk, 6; bonus bStr, -2;','','');
+REPLACE INTO `item_db` VALUES ('4913','Essence_Of_Evil_Int3','Essence Of Evil INT 3','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt, 4; bonus bMatk, 12; bonus bStr, -4;','','');
+REPLACE INTO `item_db` VALUES ('4914','Essence_Of_Evil_Agi1','Essence Of Evil AGI 1','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi, 1; bonus bFlee, 2; bonus bVit, -1;','','');
+REPLACE INTO `item_db` VALUES ('4915','Essence_Of_Evil_Agi2','Essence Of Evil AGI 2','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi, 2; bonus bFlee, 4; bonus bVit, -2;','','');
+REPLACE INTO `item_db` VALUES ('4916','Essence_Of_Evil_Agi3','Essence Of Evil AGI 3','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi, 4; bonus bFlee, 8; bonus bVit, -4;','','');
+REPLACE INTO `item_db` VALUES ('4917','Essence_Of_Evil_Vit1','Essence Of Evil VIT 1','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit, 1; bonus bDef, 3; bonus bMdef, 2; bonus bAgi, -1;','','');
+REPLACE INTO `item_db` VALUES ('4918','Essence_Of_Evil_Vit2','Essence Of Evil VIT 2','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit, 2; bonus bDef, 6; bonus bMdef, 4; bonus bAgi, -2;','','');
+REPLACE INTO `item_db` VALUES ('4919','Essence_Of_Evil_Vit3','Essence Of Evil VIT 3','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit, 4; bonus bDef, 12; bonus bMdef, 8; bonus bAgi, -4;','','');
+REPLACE INTO `item_db` VALUES ('4920','Essence_Of_Evil_Dex1','Essence Of Evil DEX 1','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex, 1; bonus bHit, 2; bonus bLuk, -1;','','');
+REPLACE INTO `item_db` VALUES ('4921','Essence_Of_Evil_Dex2','Essence Of Evil DEX 2','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex, 2; bonus bHit, 4; bonus bLuk, -2;','','');
+REPLACE INTO `item_db` VALUES ('4922','Essence_Of_Evil_Dex3','Essence Of Evil DEX 3','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex, 4; bonus bHit, 8; bonus bLuk, -4;','','');
+REPLACE INTO `item_db` VALUES ('4923','Essence_Of_Evil_Luk1','Essence Of Evil LUK 1','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk, 1; bonus bCritical, 1; bonus bDex, -1;','','');
+REPLACE INTO `item_db` VALUES ('4924','Essence_Of_Evil_Luk2','Essence Of Evil LUK 2','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk, 2; bonus bCritical, 2; bonus bDex, -2;','','');
+REPLACE INTO `item_db` VALUES ('4925','Essence_Of_Evil_Luk3','Essence Of Evil LUK 3','6','0','0','10','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk, 4; bonus bCritical, 4; bonus bDex, -4;','','');
+REPLACE INTO `item_db` VALUES ('4926','Critical1','Critical1Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical, 1;','','');
+REPLACE INTO `item_db` VALUES ('4927','HP50','HP+50','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP, 50;','','');
+REPLACE INTO `item_db` VALUES ('4928','SP10','SP+10','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSP, 10;','','');
+REPLACE INTO `item_db` VALUES ('4929','MSP_1','MSP+1%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSPrate, 1;','','');
+REPLACE INTO `item_db` VALUES ('4930','Inc_Recovery','Increase Recovery','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHPrecovRate, 2;','','');
+REPLACE INTO `item_db` VALUES ('4931','Healing_10','Healing 10','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bHPRegenRate, 10, 10000;','','');
+REPLACE INTO `item_db` VALUES ('4932','SP_Recovery_1','SP Recovery 1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bSPGainValue, 1;','','');
+REPLACE INTO `item_db` VALUES ('4933','Neutral1','Neutral Properties Lv1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle, Ele_Neutral, 1;','','');
+REPLACE INTO `item_db` VALUES ('4934','Neutral2','Neutral Properties Lv2','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle, Ele_Neutral, 2;','','');
+REPLACE INTO `item_db` VALUES ('4935','Neutral3','Neutral Properties Lv3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle, Ele_Neutral, 3;','','');
+REPLACE INTO `item_db` VALUES ('4936','L_Atk1','Large Attack 1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddSize, Size_Large, 1;','','');
+REPLACE INTO `item_db` VALUES ('4937','M_Atk1','Medium Attack 1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddSize, Size_Medium, 1;','','');
+REPLACE INTO `item_db` VALUES ('4938','S_Atk1','Small Attack 1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddSize, Size_Small, 1;','','');
+REPLACE INTO `item_db` VALUES ('4939','Critical2','Critical2Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical, 2;','','');
+REPLACE INTO `item_db` VALUES ('4940','Critical3','Critical3Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical, 4;','','');
+REPLACE INTO `item_db` VALUES ('4941','Critical4','Critical4Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical, 6;','','');
+REPLACE INTO `item_db` VALUES ('4942','Critical_1','Critical Lv1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bCritical, 3;','','');
+REPLACE INTO `item_db` VALUES ('4943','Shedding2','Shedding2Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee2, 4;','','');
+REPLACE INTO `item_db` VALUES ('4944','Shedding3','Shedding3Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee2, 5;','','');
+REPLACE INTO `item_db` VALUES ('4945','Saving1','Saving Lv1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUseSPrate, -2;','','');
+REPLACE INTO `item_db` VALUES ('4946','Saving2','Saving Lv2','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUseSPrate, -4;','','');
+REPLACE INTO `item_db` VALUES ('4947','Saving3','Saving Lv3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUseSPrate, -6;','','');
+REPLACE INTO `item_db` VALUES ('4948','Delay1','Delay After Skill Lv1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDelayrate, -2;','','');
+REPLACE INTO `item_db` VALUES ('4949','Delay2','Delay After Skill Lv2','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDelayrate, -4;','','');
+REPLACE INTO `item_db` VALUES ('4950','Delay3','Delay After Skill Lv3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDelayrate, -6;','','');
+REPLACE INTO `item_db` VALUES ('4951','Darkness_Drop','Darkness Drop','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAddEle, Ele_Dark, 2, BF_WEAPON | BF_MAGIC; bonus2 bSubEle, Ele_Dark, 1;','','');
+REPLACE INTO `item_db` VALUES ('4952','Fire_Drop','Fire Drop','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAddEle, Ele_Fire, 2, BF_WEAPON | BF_MAGIC; bonus2 bSubEle, Ele_Fire, 1;','','');
+REPLACE INTO `item_db` VALUES ('4953','Water_Drop','Water Drop','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAddEle, Ele_Water, 2, BF_WEAPON | BF_MAGIC; bonus2 bSubEle, Ele_Water, 1;','','');
+REPLACE INTO `item_db` VALUES ('4954','Earth_Drop','Earth Drop','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAddEle, Ele_Earth, 2, BF_WEAPON | BF_MAGIC; bonus2 bSubEle, Ele_Earth, 1;','','');
+REPLACE INTO `item_db` VALUES ('4955','Light_Drop','Light Drop','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAddEle, Ele_Holy, 2, BF_WEAPON | BF_MAGIC; bonus2 bSubEle, Ele_Holy, 1;','','');
+REPLACE INTO `item_db` VALUES ('4956','Recovery_Drop','Recovery Drop','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillHeal, AL_HEAL, 2; bonus2 bSkillHeal, PR_SANCTUARY, 2; bonus2 bSkillHeal, AM_POTIONPITCHER, 2; bonus2 bSkillHeal, AB_HIGHNESS_HEAL, 2; bonus2 bSkillHeal, AB_CHEAL, 2; bonus2 bSkillHeal2, AL_HEAL, 2; bonus2 bSkillHeal2, PR_SANCTUARY, 2; bonus2 bSkillHeal2, AM_POTIONPITCHER, 2; bonus2 bSkillHeal2, AB_HIGHNESS_HEAL, 2; bonus2 bSkillHeal2, AB_CHEAL, 2; bonus bAddItemHealRate, 2;','','');
+REPLACE INTO `item_db` VALUES ('4957','The_Power_Of_Famitsu','The Power Of Famitsu','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP, 832;','','');
+REPLACE INTO `item_db` VALUES ('4958','Double_Pediatric_Palace','Double Pediatric Palace','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDelayrate, -1;','','');
+REPLACE INTO `item_db` VALUES ('4959','Sagittarius','Sagittarius','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate, 1;','','');
+REPLACE INTO `item_db` VALUES ('4960','Aquarius','Aquarius','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUseSPrate, -2;','','');
+REPLACE INTO `item_db` VALUES ('4961','Aries','Aries','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk, 10;','','');
+REPLACE INTO `item_db` VALUES ('4962','Cancer','Cancer','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk, 3;','','');
+REPLACE INTO `item_db` VALUES ('4963','Taurus','Taurus','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk, 3; bonus bHit, 1;','','');
+REPLACE INTO `item_db` VALUES ('4964','Capricorn','Capricorn','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate, 3;','','');
+REPLACE INTO `item_db` VALUES ('4965','Pisces','Pisces','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVariableCastrate, -2;','','');
+REPLACE INTO `item_db` VALUES ('4966','Scorpio','Scorpio','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('4967','Leo','Leo','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate, 3;','','');
+REPLACE INTO `item_db` VALUES ('4968','Virgo','Virgo','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillHeal, AL_HEAL, 1; bonus2 bSkillHeal, PR_SANCTUARY, 1; bonus2 bSkillHeal, AM_POTIONPITCHER, 1; bonus2 bSkillHeal, AB_HIGHNESS_HEAL, 1; bonus2 bSkillHeal, AB_CHEAL, 1;','','');
+REPLACE INTO `item_db` VALUES ('4969','Libra','Libra','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillHeal2, AL_HEAL, 1; bonus2 bSkillHeal2, PR_SANCTUARY, 1; bonus2 bSkillHeal2, AM_POTIONPITCHER, 1; bonus2 bSkillHeal2, AB_HIGHNESS_HEAL, 1; bonus2 bSkillHeal2, AB_CHEAL, 1; bonus bAddItemHealRate, 1;','','');
+REPLACE INTO `item_db` VALUES ('4970','Fire_Property_Reactor','Fire Property Reactor','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDefEle, Ele_Fire;','','');
+REPLACE INTO `item_db` VALUES ('4971','Water_Property_Reactor','Water Property Reactor','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDefEle, Ele_Water;','','');
+REPLACE INTO `item_db` VALUES ('4972','Earth_Property_Reactor','Earth Property Reactor','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDefEle, Ele_Earth;','','');
+REPLACE INTO `item_db` VALUES ('4973','Wind_Property_Reactor','Wind Property Reactor','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDefEle, Ele_Wind;','','');
+REPLACE INTO `item_db` VALUES ('4974','Fire_Resistance_Reactor','Fire Resistance Reactor','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle, Ele_Fire, 25; bonus2 bSubEle, Ele_Water, -25;','','');
+REPLACE INTO `item_db` VALUES ('4975','Water_Resistance_Reactor','Water Resistance Reactor','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle, Ele_Water, 25; bonus2 bSubEle, Ele_Wind, -25;','','');
+REPLACE INTO `item_db` VALUES ('4976','Earth_Resistance_Reactor','Earth Resistance Reactor','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle, Ele_Earth, 25; bonus2 bSubEle, Ele_Fire, -25;','','');
+REPLACE INTO `item_db` VALUES ('4977','Wind_Resistance_Reactor','Wind Resistance Reactor','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSubEle, Ele_Wind, 25; bonus2 bSubEle, Ele_Earth, -25;','','');
+REPLACE INTO `item_db` VALUES ('4978','Restoration_Reactor_101','Restoration Reactor 101','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bHPRegenRate, (getrefine() >= 7) ? 100 : 50, 5000;','','');
+REPLACE INTO `item_db` VALUES ('4979','Restoration_Reactor_102','Restoration Reactor 102','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSPRegenRate, (getrefine() >= 7) ? 5 : 3, 500;','','');
+REPLACE INTO `item_db` VALUES ('4980','Restoration_Reactor_201','Restoration Reactor 201','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHPrecovRate, (getrefine() >= 7) ? 100 : 50;','','');
+REPLACE INTO `item_db` VALUES ('4981','Restoration_Reactor_202','Restoration Reactor 202','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bSPrecovRate, (getrefine() >= 7) ? 100 : 50;','','');
+REPLACE INTO `item_db` VALUES ('4982','Auxiliary_Reactor_STR','Auxiliary Reactor STR','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (readparam(bStr) >= 10) bonus bBaseAtk, 5; if (getrefine() >= 7) bonus bBaseAtk, 10;','','');
+REPLACE INTO `item_db` VALUES ('4983','Auxiliary_Reactor_INT','Auxiliary Reactor INT','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (readparam(bInt) >= 10) bonus bMatk, 5; if (getrefine() >= 7) bonus bMatk, 10;','','');
+REPLACE INTO `item_db` VALUES ('4984','Auxiliary_Reactor_DEF','Auxiliary Reactor DEF','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef, 100;','','');
+REPLACE INTO `item_db` VALUES ('4985','Auxiliary_Reactor_Perfect','Auxiliary Reactor Perfect','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bFlee2, 3;','','');
+REPLACE INTO `item_db` VALUES ('4986','Auxiliary_Reactor_Attack','Auxiliary Reactor Attack','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk, 20;','','');
+REPLACE INTO `item_db` VALUES ('4987','Auxiliary_Reactor_Magic','Auxiliary Reactor Magic','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk, 20;','','');
+REPLACE INTO `item_db` VALUES ('4988','Auxiliary_Reactor_MaxHP','Auxiliary Reactor MaxHP','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHPrate, 5;','','');
+REPLACE INTO `item_db` VALUES ('4989','Auxiliary_Reactor_MaxSP','Auxiliary_Reactor_MaxHP','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSPrate, 3;','','');
+REPLACE INTO `item_db` VALUES ('4990','Auxiliary_Reactor_Frozen','Auxiliary Reactor Frozen','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bResEff, Eff_Freeze, 10000;','','');
+REPLACE INTO `item_db` VALUES ('4991','Auxiliary_Reactor_ASPD','Auxiliary Reactor ASPD','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspd, 1;','','');
+REPLACE INTO `item_db` VALUES ('4992','HPAbsorb1','HP Absorb 1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bHPDrainRate, 1, 1;','','');
+REPLACE INTO `item_db` VALUES ('4993','SPAbsorb1','SP Absorb 1','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSPDrainRate, 1, 1;','','');
+REPLACE INTO `item_db` VALUES ('4994','Rune_Of_Might1','Rune Of Might 1Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bStr, 5; if (getrefine() >= 10) bonus bAtkRate, 10;','','');
+REPLACE INTO `item_db` VALUES ('4995','Rune_Of_Might2','Rune Of Might 2Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bStr, 6; if (getrefine() >= 11) { bonus bStr, 1; bonus bAtkRate, 7; }','','');
+REPLACE INTO `item_db` VALUES ('4996','Rune_Of_Might3','Rune Of Might 3Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bStr, 7; if (getrefine() >= 12) { bonus bStr, 1; bonus bAtkRate, 8; } if (getrefine() >= 13) { bonus bStr, 1; bonus bAtkRate, 2; }','','');
+REPLACE INTO `item_db` VALUES ('4997','Rune_Of_Agility1','Rune Of Agility 1Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bAgi, 5; if (getrefine() >= 10) bonus bFlee2, 5;','','');
+REPLACE INTO `item_db` VALUES ('4998','Rune_Of_Agility2','Rune Of Agility 2Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bAgi, 6; if (getrefine() >= 11) { bonus bAgi, 1; bonus bFlee2, 7; }','','');
+REPLACE INTO `item_db` VALUES ('4999','Rune_Of_Agility3','Rune Of Agility 3Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bAgi, 7; if (getrefine() >= 12) { bonus bAgi, 1; bonus bFlee2, 5; } if (getrefine() >= 13) { bonus bAgi, 1; bonus bFlee2, 5; }','','');
REPLACE INTO `item_db` VALUES ('5001','Headset','Headset','5','20','10','200','0','0','6','0','0','2147483646','63','2','256','0','0',NULL,'1','87','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bResEff,Eff_Curse,1000;','','');
REPLACE INTO `item_db` VALUES ('5002','Gemmed_Crown','Jewel Crown','5','20','10','600','0','0','9','0','0','414946','63','2','256','0','60',NULL,'1','88','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2; bonus bLuk,1; bonus bMdef,3;','','');
REPLACE INTO `item_db` VALUES ('5003','Joker_Jester','Joker Jester','5','20','10','100','0','0','3','0','0','2147483646','63','2','256','0','0',NULL,'1','89','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,2; bonus bMdef,5;','','');
@@ -4961,7 +5092,7 @@ REPLACE INTO `item_db` VALUES ('7520','Chinese_Scroll','Please Be Rich','3','0',
REPLACE INTO `item_db` VALUES ('7521','Flame_Stone','Flame Stone','3','112','56','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('7522','Ice_Stone','Ice Stone','3','112','56','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('7523','Wind_Stone','Wind Stone','3','112','56','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('7524','Shadow_Orb','Shadow Orb','3','225','112','20','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('7524','Shadow_Orb','Shadow Orb','3','300','150','20','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('7525','Summer_Feast_Ticket','Summer Festival Ticket','3','10','5','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('7526','Manuscript_Paper','Manuscript Paper','3','2','1','0','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('7527','Life_Book','Book About True Life','3','0','0','100','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','506',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -5601,10 +5732,10 @@ REPLACE INTO `item_db` VALUES ('11553','Casual_Stew','Anything Casserole','0','0
REPLACE INTO `item_db` VALUES ('11554','Golden_Roasted_Apple','92 Golden Apple','0','0','0','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','itemheal rand(20,30),0;','','');
REPLACE INTO `item_db` VALUES ('11557','TE_White_Potion','TE White Potion','0','200','100','300','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(325,405),0;','','');
REPLACE INTO `item_db` VALUES ('11558','TE_White_Slim_Potion','TE White Slim Potion','0','275','137','100','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(325,405),0;','','');
-REPLACE INTO `item_db` VALUES ('11592','Trance_Candy_R','Red Transform Candy','0','0','0','30','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(45,65), 0; montransform BLOODY_MURDERER, 600000, SC_MTF_MHP, 1000;','','');
-REPLACE INTO `item_db` VALUES ('11593','Trance_Candy_B','Blue Transform Candy','0','0','0','30','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(45,65), 0; montransform BATHORY, 600000, SC_MTF_MSP, 100;','','');
-REPLACE INTO `item_db` VALUES ('11594','Trance_Candy_Y','Yellow Transform Candy','0','0','0','30','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(45,65),0; montransform JAKK, 600000, SC_MTF_PUMPKIN, 2000;','','');
-REPLACE INTO `item_db` VALUES ('11595','Trance_Candy_G','Green Transform Candy','0','0','0','30','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(45,65),0; montransform QUVE, 600000, SC_MTF_HITFLEE, 10, 20;','','');
+REPLACE INTO `item_db` VALUES ('11592','Trance_Candy_R','Red Transform Candy','0','0','0','30','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(45,65), 0; specialeffect2 EF_CLOAKING; showscript \"Trans-Form-!! Bloody Murderer Fo-rm!!\"; montransform BLOODY_MURDERER, 600000, SC_MTF_MHP, 1000;','','');
+REPLACE INTO `item_db` VALUES ('11593','Trance_Candy_B','Blue Transform Candy','0','0','0','30','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(45,65), 0; specialeffect2 EF_CLOAKING; showscript \"Trans-Form-!!! Bathory Fo-rm!!\"; montransform BATHORY, 600000, SC_MTF_MSP, 100;','','');
+REPLACE INTO `item_db` VALUES ('11594','Trance_Candy_Y','Yellow Transform Candy','0','0','0','30','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(45,65),0; specialeffect2 EF_CLOAKING; showscript \"Trans-Form-!! Jack Fo-rm!!\"; montransform JAKK, 600000, SC_MTF_PUMPKIN, 2000;','','');
+REPLACE INTO `item_db` VALUES ('11595','Trance_Candy_G','Green Transform Candy','0','0','0','30','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(45,65),0; specialeffect2 EF_CLOAKING; showscript \"Trans-Form-!! Cube Fo-rm!!\"; montransform QUVE, 600000, SC_MTF_HITFLEE, 10, 20;','','');
REPLACE INTO `item_db` VALUES ('11701','Girl_Bunch_Of_Flower','Girl\'s Bouquet','0','20','10','50','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal rand(105,145),0;','','');
REPLACE INTO `item_db` VALUES ('11702','Moon_Cookie','Moon Cookie','0','0','0','300','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'1',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('11703','Mysterious_Blood','Mystery Blood','0','0','0','30','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','itemheal 0,rand(25,35);','','');
@@ -5767,14 +5898,14 @@ REPLACE INTO `item_db` VALUES ('12140','4th_Stage_Prize','Fourth Stage Prize','2
REPLACE INTO `item_db` VALUES ('12141','5th_Stage_Prize','Fifth Stage Prize','2','0','0','0','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('12142','Magic_Book','Book of Magic','2','0','0','100','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','506',NULL,'0',NULL,'0',NULL,'0','sc_start SC_FOOD_AGI,1800000,10;','','');
REPLACE INTO `item_db` VALUES ('12143','Red_Can','Red Can','2','50000','25000','300','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('12144','Sphere_Case_Wind','Lightning Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem 13204,500;','','');
-REPLACE INTO `item_db` VALUES ('12145','Sphere_Case_Darkness','Blind Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem 13206,500;','','');
-REPLACE INTO `item_db` VALUES ('12146','Sphere_Case_Poison','Poison Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem 13205,500;','','');
-REPLACE INTO `item_db` VALUES ('12147','Sphere_Case_Water','Freezing Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem 13207,500;','','');
-REPLACE INTO `item_db` VALUES ('12148','Sphere_Case_Fire','Flare Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem 13203,500;','','');
-REPLACE INTO `item_db` VALUES ('12149','Bullet_Case','Cartridge','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem 13200,500;','','');
-REPLACE INTO `item_db` VALUES ('12150','Bullet_Case_Blood','Blood Cartridge','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem 13202,500;','','');
-REPLACE INTO `item_db` VALUES ('12151','Bullet_Case_Silver','Silver Cartridge','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem 13201,500;','','');
+REPLACE INTO `item_db` VALUES ('12144','Sphere_Case_Wind','Lightning Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Lighting_Sphere, 500;','','');
+REPLACE INTO `item_db` VALUES ('12145','Sphere_Case_Darkness','Blind Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Blind_Sphere, 500;','','');
+REPLACE INTO `item_db` VALUES ('12146','Sphere_Case_Poison','Poison Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Poison_Sphere, 500;','','');
+REPLACE INTO `item_db` VALUES ('12147','Sphere_Case_Water','Freezing Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Freezing_Sphere, 500;','','');
+REPLACE INTO `item_db` VALUES ('12148','Sphere_Case_Fire','Flare Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Flare_Sphere, 500;','','');
+REPLACE INTO `item_db` VALUES ('12149','Bullet_Case','Cartridge','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Bullet, 500;','','');
+REPLACE INTO `item_db` VALUES ('12150','Bullet_Case_Blood','Blood Cartridge','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Shell_Of_Blood, 500;','','');
+REPLACE INTO `item_db` VALUES ('12151','Bullet_Case_Silver','Silver Cartridge','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','1','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Silver_Bullet, 500;','','');
REPLACE INTO `item_db` VALUES ('12152','Special_Box','Special Present','2','0','0','100','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','packageitem();','','');
REPLACE INTO `item_db` VALUES ('12153','Bow_Mercenary_Scroll1','Bowman Scroll 1','2','2','1','100','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','mercenary_create MER_ARCHER01, 1800000;','','');
REPLACE INTO `item_db` VALUES ('12154','Bow_Mercenary_Scroll2','Bowman Scroll 2','2','2','1','100','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','mercenary_create MER_ARCHER02, 1800000;','','');
@@ -6269,13 +6400,13 @@ REPLACE INTO `item_db` VALUES ('12654','Lucky_Egg_C9','Recruit\'s Mount Gift','2
REPLACE INTO `item_db` VALUES ('12655','Brain_Powder','Brain Powder','11','2000','1000','100','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('12656','Magical_Powder','Magical Powder','11','3000','1500','200','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('12657','Madness_Powder','Madness Powder','11','4000','2000','300','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('12658','Trans_Scroll_Devi','Transformation Scroll(Deviruchi)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; montransform DEVIRUCHI, 1200000, SC_MTF_ASPD, 10, 5;','','');
-REPLACE INTO `item_db` VALUES ('12659','Trans_Scroll_Ray_Arch','Transformation Scroll(Raydric)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; montransform RAYDRIC_ARCHER, 1200000, SC_MTF_RANGEATK, 25;','','');
-REPLACE INTO `item_db` VALUES ('12660','Trans_Scroll_Mavka','Transformation Scroll(Mavka)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; montransform MAVKA, 1200000, SC_MTF_RANGEATK, 25;','','');
-REPLACE INTO `item_db` VALUES ('12661','Trans_Scroll_Marduk','Transformation Scroll(Marduk)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; montransform MARDUK, 1200000, SC_MTF_MATK, 25;','','');
-REPLACE INTO `item_db` VALUES ('12662','Trans_Scroll_Banshee','Transformation Scroll(Banshee)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; montransform BANSHEE, 1200000, SC_MTF_MATK, 25;','','');
-REPLACE INTO `item_db` VALUES ('12663','Trans_Scroll_Poring','Transformation Scroll(Poring)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; montransform PORING, 1200000, SC_MTF_CRIDAMAGE, 5;','','');
-REPLACE INTO `item_db` VALUES ('12664','Trans_Scroll_Golem','Transformation Scroll(Golem)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; montransform GOLEM, 1200000, SC_MTF_MLEATKED, 2;','','');
+REPLACE INTO `item_db` VALUES ('12658','Trans_Scroll_Devi','Transformation Scroll(Deviruchi)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; showscript \"Trans-Form-!! Deviling Fo-rm!!\"; montransform DEVIRUCHI, 1200000, SC_MTF_ASPD, 10, 5;','','');
+REPLACE INTO `item_db` VALUES ('12659','Trans_Scroll_Ray_Arch','Transformation Scroll(Raydric)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; showscript \"Trans-Form-!! Raydric Archer Fo-rm!!\"; montransform RAYDRIC_ARCHER, 1200000, SC_MTF_RANGEATK, 25;','','');
+REPLACE INTO `item_db` VALUES ('12660','Trans_Scroll_Mavka','Transformation Scroll(Mavka)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; showscript \"Trans-Form-!! Mavka Fo-rm!!\"; montransform MAVKA, 1200000, SC_MTF_RANGEATK, 25;','','');
+REPLACE INTO `item_db` VALUES ('12661','Trans_Scroll_Marduk','Transformation Scroll(Marduk)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; showscript \"Trans-Form-!! Marduk Fo-rm!!\"; montransform MARDUK, 1200000, SC_MTF_MATK, 25;','','');
+REPLACE INTO `item_db` VALUES ('12662','Trans_Scroll_Banshee','Transformation Scroll(Banshee)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; showscript \"Trans-Form-!! Banshee Fo-rm!!\"; montransform BANSHEE, 1200000, SC_MTF_MATK, 25;','','');
+REPLACE INTO `item_db` VALUES ('12663','Trans_Scroll_Poring','Transformation Scroll(Poring)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; showscript \"Trans-Form-!! Poring Fo-rm!!\"; montransform PORING, 1200000, SC_MTF_CRIDAMAGE, 5;','','');
+REPLACE INTO `item_db` VALUES ('12664','Trans_Scroll_Golem','Transformation Scroll(Golem)','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','specialeffect2 EF_CLOAKING; showscript \"Trans-Form-!! Golem Fo-rm!!\"; montransform GOLEM, 1200000, SC_MTF_MLEATKED, 2;','','');
REPLACE INTO `item_db` VALUES ('12665','Grovel_Buff','Grovel Buff','2','0','0','0','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('12666','Thai_Perfume_MATK','Thai Perfume(MATK)','11','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('12667','Thai_Perfume_ATK','Thai Perfume(ATK)','11','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6707,22 +6838,35 @@ REPLACE INTO `item_db` VALUES ('13194','Peace_Breaker','Peace Breaker','5','1950
REPLACE INTO `item_db` VALUES ('13195','RAG203_','RAG203','5','1800000','900000','1300','260','0','0','9','0','1073741824','63','2','34','3','140',NULL,'1','18','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,10; bonus bCriticalRate,15; bonus4 bAutoSpell,AL_DECAGI,1,10,0;','','');
REPLACE INTO `item_db` VALUES ('13196','Peace_Breaker_','Peace Breaker','5','1950000','975000','1400','250','0','0','9','1','1090519040','63','2','34','3','120',NULL,'1','20','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,-25; bonus bAspdRate,25;','','');
REPLACE INTO `item_db` VALUES ('13197','Mini_Mei','Mini Mei','5','1600000','800000','2500','220','0','0','9','2','1090519040','63','2','34','2','106',NULL,'1','19','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('13198','Tempest_','Tempest','5','2200000','1100000','2500','250','0','0','9','0','1090519040','63','2','34','2','140',NULL,'1','19','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,-25; bonus bCritical,10; bonus bLongAtkRate,20;','','');
-REPLACE INTO `item_db` VALUES ('13199','Tempest','Tempest','5','2200000','1100000','2500','250','0','0','9','1','1090519040','63','2','34','2','140',NULL,'1','19','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,-25; bonus bCritical,10; bonus bLongAtkRate,20;','','');
-REPLACE INTO `item_db` VALUES ('13200','Bullet','Bullet','10','1','0','2','10','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('13198','Tempest','Tempest','5','2200000','1100000','2500','250','0','0','9','0','1090519040','63','2','34','2','140',NULL,'1','19','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,-25; bonus bCritical,10; bonus bLongAtkRate,20;','','');
+REPLACE INTO `item_db` VALUES ('13199','Tempest_','Tempest','5','2200000','1100000','2500','250','0','0','9','1','1090519040','63','2','34','2','140',NULL,'1','19','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,-25; bonus bCritical,10; bonus bLongAtkRate,20;','','');
+REPLACE INTO `item_db` VALUES ('13200','Bullet','Bullet','10','1','0','2','10','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral;','','');
REPLACE INTO `item_db` VALUES ('13201','Silver_Bullet','Silver Bullet','10','15','7','2','15','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Holy;','','');
-REPLACE INTO `item_db` VALUES ('13202','Shell_Of_Blood','Bloody Shell','10','30','15','2','30','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddEff,Eff_Bleeding,100;','','');
+REPLACE INTO `item_db` VALUES ('13202','Shell_Of_Blood','Bloody Shell','10','30','15','2','30','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral; bonus2 bAddEff, Eff_Bleeding, 100;','','');
REPLACE INTO `item_db` VALUES ('13203','Flare_Sphere','Flare Sphere','10','80','40','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Fire;','','');
REPLACE INTO `item_db` VALUES ('13204','Lighting_Sphere','Lightning Sphere','10','80','40','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Wind;','','');
REPLACE INTO `item_db` VALUES ('13205','Poison_Sphere','Poison Sphere','10','80','40','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Poison; bonus2 bAddEff,Eff_Poison,500;','','');
REPLACE INTO `item_db` VALUES ('13206','Blind_Sphere','Blind Sphere','10','80','40','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Dark; bonus2 bAddEff,Eff_Blind,500;','','');
REPLACE INTO `item_db` VALUES ('13207','Freezing_Sphere','Freezing Sphere','10','80','40','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Water;','','');
REPLACE INTO `item_db` VALUES ('13208','Gong_Bug','GongBug','10','0','0','20','50','0','0','0','0','16777216','63','2','32768','0','50',NULL,'0','3','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddEff,Eff_Stun,1000;','','');
-REPLACE INTO `item_db` VALUES ('13210','Slug_Ammunition_L','Slug Ammunition L','10','250','125','500','30','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('13211','Slug_Ammunition_M','Slug Ammunition M','10','500','250','500','30','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('13212','Slug_Ammunition_H','Slug Ammunition H','10','750','375','750','30','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('13213','Slug_Ammunition_SH','Slug Ammunition SH','10','1','0','1000','30','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('13214','Slug_Ammunition_XH','Slug Ammunition XH','10','1','0','1200','30','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
+REPLACE INTO `item_db` VALUES ('13210','Slug_Ammunition_L','Slug Ammunition L','10','250','125','500','30','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral;','','');
+REPLACE INTO `item_db` VALUES ('13211','Slug_Ammunition_M','Slug Ammunition M','10','500','250','500','30','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral;','','');
+REPLACE INTO `item_db` VALUES ('13212','Slug_Ammunition_H','Slug Ammunition H','10','750','375','750','30','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral;','','');
+REPLACE INTO `item_db` VALUES ('13213','Slug_Ammunition_SH','Slug Ammunition SH','10','1','0','1000','30','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral;','','');
+REPLACE INTO `item_db` VALUES ('13214','Slug_Ammunition_XH','Slug Ammunition XH','10','1','0','1200','30','0','0','0','0','1090519040','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral;','','');
+REPLACE INTO `item_db` VALUES ('13215','Armor_Piercing_Bullet','Armor-Piercing Bullet','10','15','7','2','50','0','0','0','0','1090519040','63','2','32768','0','100',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral;','','');
+REPLACE INTO `item_db` VALUES ('13216','Blazing_Bullet','Blazing Bullet','10','10','5','2','40','0','0','0','0','1090519040','63','2','32768','0','100',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Fire;','','');
+REPLACE INTO `item_db` VALUES ('13217','Freezing_Bullet','Freezing Bullet','10','10','5','2','40','0','0','0','0','1090519040','63','2','32768','0','100',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Water;','','');
+REPLACE INTO `item_db` VALUES ('13218','Lightning_Bullet','Lightning Bullet','10','10','5','2','40','0','0','0','0','1090519040','63','2','32768','0','100',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Wind;','','');
+REPLACE INTO `item_db` VALUES ('13219','Magic_Stone_Bullet','Magic Stone Bullet','10','10','5','2','40','0','0','0','0','1090519040','63','2','32768','0','100',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Earth;','','');
+REPLACE INTO `item_db` VALUES ('13220','Purifying_Bullet','Purifying Bullet','10','10','5','2','40','0','0','0','0','1090519040','63','2','32768','0','100',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Holy;','','');
+REPLACE INTO `item_db` VALUES ('13221','Silver_Bullet_','Silver Bullet','10','5','2','2','15','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Holy;','','');
+REPLACE INTO `item_db` VALUES ('13222','Shell_Of_Blood_','Bloody Shell','10','10','5','2','30','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Neutral; bonus2 bAddEff, Eff_Bleeding, 100;','','');
+REPLACE INTO `item_db` VALUES ('13223','Incendiary_Grenade','Incendiary Grenade','10','15','7','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Fire;','','');
+REPLACE INTO `item_db` VALUES ('13224','Lightning_Grenade','Lightning Grenade','10','15','7','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Wind;','','');
+REPLACE INTO `item_db` VALUES ('13225','Poison_Grenade','Poison Grenade','10','15','7','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Poison; bonus2 bAddEff, Eff_Poison, 500;','','');
+REPLACE INTO `item_db` VALUES ('13226','Flash_Grenade','Flash Grenade','10','15','7','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Dark; bonus2 bAddEff, Eff_Blind, 500;','','');
+REPLACE INTO `item_db` VALUES ('13227','Cyro_Grenade','Cyro Grenade','10','15','7','5','50','0','0','0','0','16777216','63','2','32768','0','0',NULL,'0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle, Ele_Water;','','');
REPLACE INTO `item_db` VALUES ('13250','Shuriken','Shuriken','10','4','2','5','10','0','0','0','0','33554432','63','2','32768','0','0',NULL,'0','6','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13251','Nimbus_Shuriken','Nimbus Shuriken','10','10','5','5','30','0','0','0','0','33554432','63','2','32768','0','20',NULL,'0','6','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13252','Flash_Shuriken','Flash Shuriken','10','20','10','5','45','0','0','0','0','33554432','63','2','32768','0','40',NULL,'0','6','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -7903,6 +8047,9 @@ REPLACE INTO `item_db` VALUES ('16025','TE_Woe_Mace','TE Woe Mace','4','0','0','
REPLACE INTO `item_db` VALUES ('16026','RWC_Memory_Mace','RWC Memory Mace','4','20','10','800','100','0','0','1','1','312754','63','2','2','3','0',NULL,'1','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('16027','Evil_Slayer_Destroyer_Hammer','Evil Slayer Destroyer Hammer','4','20','10','1350','120','0','0','1','1','312754','56','2','2','3','100',NULL,'1','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_Demon,10; bonus2 bAddRace,RC_Undead,10; if(getrefine()>=9) { bonus bAtkRate,5; } if(getrefine()>=12) { bonus bAtkRate,7; }','','');
REPLACE INTO `item_db` VALUES ('16028','Thanatos_Hammer','Thanatos Hammer','4','20','10','3000','180','120','0','1','1','312754','56','2','2','4','120',NULL,'1','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000;','','heal -1000,0;');
+REPLACE INTO `item_db` VALUES ('16030','Pilebunker_S','Pile Bunker S','4','0','0','3000','400','0','0','1','1','1024','56','2','2','4','130',NULL,'1','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspdRate, (getrefine() / 2);','','');
+REPLACE INTO `item_db` VALUES ('16031','Pilebunker_P','Pile Bunker P','4','0','0','4000','450','0','0','1','0','1024','56','2','2','4','130',NULL,'1','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk, (getrefine() * 5);','','');
+REPLACE INTO `item_db` VALUES ('16032','Pilebunker_T','Pile Bunker T','4','0','0','3500','400','0','0','1','1','1024','56','2','2','4','130',NULL,'1','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUseSPrate, - getrefine();','','');
REPLACE INTO `item_db` VALUES ('16039','Spoon','Spoon','4','20','10','100','80','0','0','1','1','312755','63','2','2','3','40',NULL,'1','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspd,10; bonus2 bAddEff,Eff_Curse,1000;','','');
REPLACE INTO `item_db` VALUES ('16040','Crimson_Mace','Crimson Mace','4','20','10','800','80','0','0','1','2','312755','63','2','2','3','70',NULL,'1','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
REPLACE INTO `item_db` VALUES ('16041','Mace_of_Vicious_Mind','Mace of Vicious Mind','4','20','10','1300','130','0','0','1','1','312755','63','2','2','4','160',NULL,'1','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); bonus bUnbreakableWeapon,0;','','');
@@ -9590,6 +9737,19 @@ REPLACE INTO `item_db` VALUES ('22676','Hangul_Day_Event_Box','Hangul Day Event
REPLACE INTO `item_db` VALUES ('22679','Death_Bin','Death Bin','18','10','5','0','0','0','0','0','0','4294967295','63','2','0','0','170',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22685','Solo_Christmas_Gift','Single Union Christmas Gift','2','0','0','0','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('22686','Solo_Cookie','Single Cookie','0','0','0','50','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','percentheal 5,5;','','');
+REPLACE INTO `item_db` VALUES ('22737','Bloody_Cartrige','Bloody Bullet Case','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Shell_Of_Blood_, 500;','','');
+REPLACE INTO `item_db` VALUES ('22738','Silver_Cartrige','Silver Bullet Case','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Silver_Bullet_, 500;','','');
+REPLACE INTO `item_db` VALUES ('22739','Lightning_Sphere_Pack','Lightning Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Lightning_Grenade, 500;','','');
+REPLACE INTO `item_db` VALUES ('22740','Blind_Sphere_Pack','Blind Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Flash_Grenade, 500;','','');
+REPLACE INTO `item_db` VALUES ('22741','Poison_Sphere_Pack','Poison Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Poison_Grenade, 500;','','');
+REPLACE INTO `item_db` VALUES ('22742','Freezing_Sphere_Pack','Freezing Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Cyro_Grenade, 500;','','');
+REPLACE INTO `item_db` VALUES ('22743','Flare_Sphere_Pack','Flare Sphere Pack','2','2','1','350','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Incendiary_Grenade, 500;','','');
+REPLACE INTO `item_db` VALUES ('22744','Armor_Piercing_Cartrige','Armor-Piercing Cartrige','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Armor_Piercing_Bullet, 500;','','');
+REPLACE INTO `item_db` VALUES ('22745','Incandescence_Shot_Cartridge','Incandescence Shot Cartridge','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Blazing_Bullet, 500;','','');
+REPLACE INTO `item_db` VALUES ('22746','Glaciation_Shot_Cartridge','Glaciation Shot Cartridge','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Freezing_Bullet, 500;','','');
+REPLACE INTO `item_db` VALUES ('22747','Dengeki_Shot_Cartridge','Dengeki Shot Cartridge','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Lightning_Bullet, 500;','','');
+REPLACE INTO `item_db` VALUES ('22748','Hearthstone_Shot_Cartridge','Hearthstone Shot Cartridge','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Magic_Stone_Bullet, 500;','','');
+REPLACE INTO `item_db` VALUES ('22749','Purification_Shot_Cartridge','Purification Shot Cartridge','2','2','1','250','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getitem Purifying_Bullet, 500;','','');
REPLACE INTO `item_db` VALUES ('22777','Buff_Gift_Set','Buff Gift Set','2','20','10','100','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','getitem 14534,5; getitem 12215,5; getitem 12216,5;','','');
REPLACE INTO `item_db` VALUES ('22837','Integer_Time','Integer Time','2','0','0','0','0','0','0','0','0','4294967295','63','2','0','0','50',NULL,'0','0','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','TmpRouletteBronze += 1;','','');
REPLACE INTO `item_db` VALUES ('22838','Pumpkin_Candy_Holder','Pumpkin Candy Holder','2','20','10','10','0','0','0','0','0','4294967295','63','2','0','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','getrandgroupitem 22838,1;','','');
@@ -9879,3 +10039,30 @@ REPLACE INTO `item_db` VALUES ('28706','Dagger_of_Vicious_Mind','Dagger of Vicio
REPLACE INTO `item_db` VALUES ('28900','Praetorian_Shield','Praetorian Shield','5','20','10','3000','0','0','30','0','1','4294967295','63','2','32','0','100',NULL,'1','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','skill LG_SHIELDSPELL,1; bonus3 bAutoSpellWhenHit,HP_ASSUMPTIO,3,20+(getrefine()); bonus bDef,getrefine()*10; bonus bMdef,getrefine();','','');
REPLACE INTO `item_db` VALUES ('28901','Cursed_Mad_Bunny','Cursed Mad Bunny','5','0','0','100','0','0','0','0','0','4294967295','63','2','32','0','0',NULL,'1','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspd,3; bonus bAtkRate,5; bonus bMatkRate,5; bonus bShortWeaponDamageReturn,10; autobonus \"{ bonus bMagicDamageReturn,60; }\",100,2000,BF_MAGIC,\"{ specialeffect2 EF_NONE; }\"; if(getrefine()>6) { bonus bAtk,5; bonus bMatk,5; } if(getrefine()>8) { bonus bAtk,10; bonus bMatk,10; } if(getrefine()>11) { bonus bNoCastCancel,0; bonus bCritical,10; }','','');
REPLACE INTO `item_db` VALUES ('28902','Mad_Bunny_','Mad Bunny','5','0','0','100','0','0','0','0','1','4294967295','63','2','32','0','0',NULL,'1','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,5; bonus bMatkRate,5; bonus bShortWeaponDamageReturn,10; autobonus \"{ bonus bMagicDamageReturn,60; }\",100,2000,BF_MAGIC,\"{ specialeffect2 EF_NONE; }\"; if(getrefine()>6) { bonus bAtk,5; bonus bMatk,5; } if(getrefine()>8) { bonus bAtk,10; bonus bMatk,10; } if(getrefine()>11) { bonus bNoCastCancel,0; bonus bCritical,10; }','','');
+REPLACE INTO `item_db` VALUES ('29000','Rune_Of_Magic1','Rune Of Magic Power 1Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bInt, 5; if (getrefine() >= 10) bonus bMatkRate, 5;','','');
+REPLACE INTO `item_db` VALUES ('29001','Rune_Of_Magic2','Rune Of Magic Power 2Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bInt, 6; if (getrefine() >= 11) { bonus bInt, 1; bonus bMatkRate, 7; }','','');
+REPLACE INTO `item_db` VALUES ('29002','Rune_Of_Magic3','Rune Of Magic Power 3Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bInt, 7; if (getrefine() >= 12) { bonus bInt, 1; bonus bMatkRate, 8; } if (getrefine() >= 13) { bonus bInt, 1; bonus bMatkRate, 2; }','','');
+REPLACE INTO `item_db` VALUES ('29003','Rune_Of_Dexterity1','Rune Of Dexterity 1Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bDex, 5; if (getrefine() >= 10) bonus bLongAtkRate, 5;','','');
+REPLACE INTO `item_db` VALUES ('29004','Rune_Of_Dexterity2','Rune Of Dexterity 2Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bDex, 6; if (getrefine() >= 11) { bonus bDex, 1; bonus bLongAtkRate, 7; }','','');
+REPLACE INTO `item_db` VALUES ('29005','Rune_Of_Dexterity3','Rune Of Dexterity 3Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bDex, 7; if (getrefine() >= 12) { bonus bDex, 1; bonus bLongAtkRate, 8; } if (getrefine() >= 13) { bonus bDex, 1; bonus bLongAtkRate, 2; }','','');
+REPLACE INTO `item_db` VALUES ('29006','Rune_Of_Fortune1','Rune Of Fortune 1Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bLuk, 5; if (getrefine() >= 10) bonus bCritAtkRate, 5;','','');
+REPLACE INTO `item_db` VALUES ('29007','Rune_Of_Fortune2','Rune Of Fortune 2Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bLuk, 6; if (getrefine() >= 11) { bonus bLuk, 1; bonus bCritAtkRate, 7; }','','');
+REPLACE INTO `item_db` VALUES ('29008','Rune_Of_Fortune3','Rune Of Fortune 3Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bLuk, 7; if (getrefine() >= 12) { bonus bLuk, 1; bonus bCritAtkRate, 8; } if (getrefine() >= 13) { bonus bLuk, 1; bonus bCritAtkRate, 6; }','','');
+REPLACE INTO `item_db` VALUES ('29009','Rune_Of_Stamina1','Rune Of Stamina 1Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bVit, 5; if (getrefine() >= 10) bonus bMaxHPrate, 5;','','');
+REPLACE INTO `item_db` VALUES ('29010','Rune_Of_Stamina2','Rune Of Stamina 2Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bVit, 6; if (getrefine() >= 11) { bonus bVit, 1; bonus bMaxHPrate, 7; }','','');
+REPLACE INTO `item_db` VALUES ('29011','Rune_Of_Stamina3','Rune Of Stamina 3Lv','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if (getrefine() >= 7) bonus bVit, 7; if (getrefine() >= 12) { bonus bVit, 1; bonus bMaxHPrate, 8; } if (getrefine() >= 13) { bonus bVit, 1; bonus bMaxHPrate, 2; }','','');
+REPLACE INTO `item_db` VALUES ('29013','HPAbsorb3','HP Absorb 3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bHPDrainRate, 1, 3;','','');
+REPLACE INTO `item_db` VALUES ('29014','STR3_INT3','STR+3 INT-3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr, 3; bonus bInt, -3;','','');
+REPLACE INTO `item_db` VALUES ('29015','STR3_DEX3','STR+3 DEX-3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr, 3; bonus bDex, -3;','','');
+REPLACE INTO `item_db` VALUES ('29016','INT3_DEX3','INT+3 DEX-3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt, 3; bonus bDex, -3;','','');
+REPLACE INTO `item_db` VALUES ('29017','INT3_VIT3','INT+3 VIT-3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt, 3; bonus bVit, -3;','','');
+REPLACE INTO `item_db` VALUES ('29018','DEX3_VIT3','DEX+3 VIT-3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex, 3; bonus bVit, -3;','','');
+REPLACE INTO `item_db` VALUES ('29019','DEX3_AGI3','DEX+3 AGI-3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex, 3; bonus bAgi, -3;','','');
+REPLACE INTO `item_db` VALUES ('29020','VIT3_AGI3','VIT+3 AGI-3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit, 3; bonus bAgi, -3;','','');
+REPLACE INTO `item_db` VALUES ('29021','VIT3_LUK3','VIT+3 LUK-3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bVit, 3; bonus bLuk, -3;','','');
+REPLACE INTO `item_db` VALUES ('29022','AGI3_LUK3','AGI+3 LUK-3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi, 3; bonus bLuk, -3;','','');
+REPLACE INTO `item_db` VALUES ('29023','AGI3_STR3','AGI+3 STR-3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi, 3; bonus bStr, -3;','','');
+REPLACE INTO `item_db` VALUES ('29024','LUK3_STR3','LUK+3 STR-3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk, 3; bonus bStr, -3;','','');
+REPLACE INTO `item_db` VALUES ('29025','LUK3_INT3','LUK+3 INT-3','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk, 3; bonus bInt, -3;','','');
+REPLACE INTO `item_db` VALUES ('29026','DEF20','DEF+20','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDef, 20;','','');
+REPLACE INTO `item_db` VALUES ('29027','EXP2','EXP+2%','6','0','0','0','0','0','0','0','0','4294967295','63','2','1023','0','0',NULL,'0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bExpAddRace, RC_All, 2;','','');
diff --git a/sql-files/main.sql b/sql-files/main.sql
index 864b86865..1ed751d15 100644
--- a/sql-files/main.sql
+++ b/sql-files/main.sql
@@ -1,7 +1,7 @@
-- This file is part of Hercules.
-- http://herc.ws - http://github.com/HerculesWS/Hercules
--
--- Copyright (C) 2012-2015 Hercules Dev Team
+-- Copyright (C) 2012-2016 Hercules Dev Team
-- Copyright (C) Athena Dev Teams
--
-- Hercules is free software: you can redistribute it and/or modify
@@ -149,13 +149,13 @@ CREATE TABLE IF NOT EXISTS `char` (
`str` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '0',
`agi` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '0',
`vit` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '0',
- `INT` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '0',
+ `int` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '0',
`dex` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '0',
`luk` SMALLINT(4) UNSIGNED NOT NULL DEFAULT '0',
- `max_hp` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
- `hp` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT '0',
- `max_sp` MEDIUMINT(6) UNSIGNED NOT NULL DEFAULT '0',
- `sp` MEDIUMINT(6) UNSIGNED NOT NULL DEFAULT '0',
+ `max_hp` INT(9) UNSIGNED NOT NULL DEFAULT '0',
+ `hp` INT(9) UNSIGNED NOT NULL DEFAULT '0',
+ `max_sp` INT(9) UNSIGNED NOT NULL DEFAULT '0',
+ `sp` INT(9) UNSIGNED NOT NULL DEFAULT '0',
`status_point` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`skill_point` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`option` INT(11) NOT NULL DEFAULT '0',
@@ -169,6 +169,7 @@ CREATE TABLE IF NOT EXISTS `char` (
`hair` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0',
`hair_color` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
`clothes_color` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
+ `body` SMALLINT(5) unsigned NOT NULL default '0',
`weapon` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
`shield` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
`head_top` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
@@ -821,6 +822,8 @@ INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1414975503); -- 2014-11-0
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1435860840); -- 2015-07-02--18-14.sql
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1436360978); -- 2015-07-08--13-08.sql
INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1440688342); -- 2015-08-27--20-42.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1450241859); -- 2015-12-16--12-57.sql
+INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1450367880); -- 2015-12-17--15-58.sql
--
-- Table structure for table `storage`
diff --git a/sql-files/upgrades/2015-12-16--12-57.sql b/sql-files/upgrades/2015-12-16--12-57.sql
new file mode 100644
index 000000000..cc9ce799e
--- /dev/null
+++ b/sql-files/upgrades/2015-12-16--12-57.sql
@@ -0,0 +1,26 @@
+#1450241859
+
+-- This file is part of Hercules.
+-- http://herc.ws - http://github.com/HerculesWS/Hercules
+--
+-- Copyright (C) 2015-2016 Hercules Dev Team
+--
+-- Hercules is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ALTER TABLE `char` MODIFY COLUMN `max_hp` INT(9) NOT NULL DEFAULT '0';
+ALTER TABLE `char` MODIFY COLUMN `max_sp` INT(9) NOT NULL DEFAULT '0';
+ALTER TABLE `char` MODIFY COLUMN `hp` INT(9) NOT NULL DEFAULT '0';
+ALTER TABLE `char` MODIFY COLUMN `sp` INT(9) NOT NULL DEFAULT '0';
+
+INSERT INTO `sql_updates` (`timestamp`) VALUES (1450241859);
diff --git a/sql-files/upgrades/2015-12-17--15-58.sql b/sql-files/upgrades/2015-12-17--15-58.sql
new file mode 100644
index 000000000..8d3dc51a3
--- /dev/null
+++ b/sql-files/upgrades/2015-12-17--15-58.sql
@@ -0,0 +1,22 @@
+#1450367880
+
+-- This file is part of Hercules.
+-- http://herc.ws - http://github.com/HerculesWS/Hercules
+--
+-- Copyright (C) 2015 Hercules Dev Team
+--
+-- Hercules is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ALTER TABLE `char` ADD `body` smallint(5) unsigned NOT NULL default '0' AFTER `clothes_color`;
+INSERT INTO `sql_updates` (`timestamp`) VALUES (1450367880);
diff --git a/sql-files/upgrades/index.txt b/sql-files/upgrades/index.txt
index 5f6aed963..e73a8659d 100644
--- a/sql-files/upgrades/index.txt
+++ b/sql-files/upgrades/index.txt
@@ -27,4 +27,5 @@
2014-11-03--00-45.sql
2015-07-02--18-14.sql
2015-07-08--13-08.sql
-2015-08-27--20-42.sql \ No newline at end of file
+2015-08-27--20-42.sql
+2015-12-17--15-58.sql
diff --git a/src/char/char.c b/src/char/char.c
index e991aafcc..09f74034c 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -508,7 +508,8 @@ int char_mmo_char_tosql(int char_id, struct mmo_charstatus* p)
//Values that will seldom change (to speed up saving)
if (
- (p->hair != cp->hair) || (p->hair_color != cp->hair_color) || (p->clothes_color != cp->clothes_color) ||
+ (p->hair != cp->hair) || (p->hair_color != cp->hair_color) ||
+ (p->clothes_color != cp->clothes_color) || (p->body != cp->body) ||
(p->class_ != cp->class_) ||
(p->partner_id != cp->partner_id) || (p->father != cp->father) ||
(p->mother != cp->mother) || (p->child != cp->child) ||
@@ -517,12 +518,12 @@ int char_mmo_char_tosql(int char_id, struct mmo_charstatus* p)
)
{
if( SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET `class`='%d',"
- "`hair`='%d',`hair_color`='%d',`clothes_color`='%d',"
+ "`hair`='%d', `hair_color`='%d', `clothes_color`='%d', `body`='%d',"
"`partner_id`='%d', `father`='%d', `mother`='%d', `child`='%d',"
- "`karma`='%d',`manner`='%d', `fame`='%d'"
+ "`karma`='%d', `manner`='%d', `fame`='%d'"
" WHERE `account_id`='%d' AND `char_id` = '%d'",
char_db, p->class_,
- p->hair, p->hair_color, p->clothes_color,
+ p->hair, p->hair_color, p->clothes_color, p->body,
p->partner_id, p->father, p->mother, p->child,
p->karma, p->manner, p->fame,
p->account_id, p->char_id) )
@@ -1070,7 +1071,7 @@ int char_mmo_chars_fromsql(struct char_session_data* sd, uint8* buf)
"`char_id`,`char_num`,`name`,`class`,`base_level`,`job_level`,`base_exp`,`job_exp`,`zeny`,"
"`str`,`agi`,`vit`,`int`,`dex`,`luk`,`max_hp`,`hp`,`max_sp`,`sp`,"
"`status_point`,`skill_point`,`option`,`karma`,`manner`,`hair`,`hair_color`,"
- "`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`,`last_map`,`rename`,`delete_date`,"
+ "`clothes_color`,`body`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`,`last_map`,`rename`,`delete_date`,"
"`robe`,`slotchange`,`unban_time`,`sex`"
" FROM `%s` WHERE `account_id`='%d' AND `char_num` < '%d'", char_db, sd->account_id, MAX_CHARS)
|| SQL_ERROR == SQL->StmtExecute(stmt)
@@ -1101,18 +1102,19 @@ int char_mmo_chars_fromsql(struct char_session_data* sd, uint8* buf)
|| SQL_ERROR == SQL->StmtBindColumn(stmt, 24, SQLDT_SHORT, &p.hair, 0, NULL, NULL)
|| SQL_ERROR == SQL->StmtBindColumn(stmt, 25, SQLDT_SHORT, &p.hair_color, 0, NULL, NULL)
|| SQL_ERROR == SQL->StmtBindColumn(stmt, 26, SQLDT_SHORT, &p.clothes_color, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 27, SQLDT_SHORT, &p.weapon, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 28, SQLDT_SHORT, &p.shield, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 29, SQLDT_SHORT, &p.head_top, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 30, SQLDT_SHORT, &p.head_mid, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 31, SQLDT_SHORT, &p.head_bottom, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 32, SQLDT_STRING, &last_map, sizeof(last_map), NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 33, SQLDT_USHORT, &p.rename, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 34, SQLDT_UINT32, &p.delete_date, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 35, SQLDT_SHORT, &p.robe, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 36, SQLDT_USHORT, &p.slotchange, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 37, SQLDT_LONG, &unban_time, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 38, SQLDT_ENUM, &sex, sizeof(sex), NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 27, SQLDT_SHORT, &p.body, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 28, SQLDT_SHORT, &p.weapon, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 29, SQLDT_SHORT, &p.shield, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 30, SQLDT_SHORT, &p.head_top, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 31, SQLDT_SHORT, &p.head_mid, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 32, SQLDT_SHORT, &p.head_bottom, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 33, SQLDT_STRING, &last_map, sizeof(last_map), NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 34, SQLDT_USHORT, &p.rename, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 35, SQLDT_UINT32, &p.delete_date, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 36, SQLDT_SHORT, &p.robe, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 37, SQLDT_USHORT, &p.slotchange, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 38, SQLDT_LONG, &unban_time, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 39, SQLDT_ENUM, &sex, sizeof(sex), NULL, NULL)
) {
SqlStmt_ShowDebug(stmt);
SQL->StmtFree(stmt);
@@ -1176,7 +1178,7 @@ int char_mmo_char_fromsql(int char_id, struct mmo_charstatus* p, bool load_every
"`char_id`,`account_id`,`char_num`,`name`,`class`,`base_level`,`job_level`,`base_exp`,`job_exp`,`zeny`,"
"`str`,`agi`,`vit`,`int`,`dex`,`luk`,`max_hp`,`hp`,`max_sp`,`sp`,"
"`status_point`,`skill_point`,`option`,`karma`,`manner`,`party_id`,`guild_id`,`pet_id`,`homun_id`,`elemental_id`,`hair`,"
- "`hair_color`,`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`,`last_map`,`last_x`,`last_y`,"
+ "`hair_color`,`clothes_color`,`body`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`,`last_map`,`last_x`,`last_y`,"
"`save_map`,`save_x`,`save_y`,`partner_id`,`father`,`mother`,`child`,`fame`,`rename`,`delete_date`,`robe`,`slotchange`,"
"`char_opt`,`font`,`uniqueitem_counter`,`sex`,`hotkey_rowshift`"
" FROM `%s` WHERE `char_id`=? LIMIT 1", char_db)
@@ -1215,31 +1217,32 @@ int char_mmo_char_fromsql(int char_id, struct mmo_charstatus* p, bool load_every
|| SQL_ERROR == SQL->StmtBindColumn(stmt, 30, SQLDT_SHORT, &p->hair, 0, NULL, NULL)
|| SQL_ERROR == SQL->StmtBindColumn(stmt, 31, SQLDT_SHORT, &p->hair_color, 0, NULL, NULL)
|| SQL_ERROR == SQL->StmtBindColumn(stmt, 32, SQLDT_SHORT, &p->clothes_color, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 33, SQLDT_SHORT, &p->weapon, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 34, SQLDT_SHORT, &p->shield, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 35, SQLDT_SHORT, &p->head_top, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 36, SQLDT_SHORT, &p->head_mid, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 37, SQLDT_SHORT, &p->head_bottom, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 38, SQLDT_STRING, &last_map, sizeof(last_map), NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 39, SQLDT_SHORT, &p->last_point.x, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 40, SQLDT_SHORT, &p->last_point.y, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 41, SQLDT_STRING, &save_map, sizeof(save_map), NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 42, SQLDT_SHORT, &p->save_point.x, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 43, SQLDT_SHORT, &p->save_point.y, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 44, SQLDT_INT, &p->partner_id, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 45, SQLDT_INT, &p->father, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 46, SQLDT_INT, &p->mother, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 47, SQLDT_INT, &p->child, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 48, SQLDT_INT, &p->fame, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 49, SQLDT_USHORT, &p->rename, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 50, SQLDT_UINT32, &p->delete_date, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 51, SQLDT_SHORT, &p->robe, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 52, SQLDT_USHORT, &p->slotchange, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 53, SQLDT_UINT, &opt, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 54, SQLDT_UCHAR, &p->font, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 55, SQLDT_UINT, &p->uniqueitem_counter, 0, NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 56, SQLDT_ENUM, &sex, sizeof(sex), NULL, NULL)
- || SQL_ERROR == SQL->StmtBindColumn(stmt, 57, SQLDT_UCHAR, &p->hotkey_rowshift, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 33, SQLDT_SHORT, &p->body, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 34, SQLDT_SHORT, &p->weapon, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 35, SQLDT_SHORT, &p->shield, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 36, SQLDT_SHORT, &p->head_top, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 37, SQLDT_SHORT, &p->head_mid, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 38, SQLDT_SHORT, &p->head_bottom, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 39, SQLDT_STRING, &last_map, sizeof(last_map), NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 40, SQLDT_SHORT, &p->last_point.x, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 41, SQLDT_SHORT, &p->last_point.y, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 42, SQLDT_STRING, &save_map, sizeof(save_map), NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 43, SQLDT_SHORT, &p->save_point.x, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 44, SQLDT_SHORT, &p->save_point.y, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 45, SQLDT_INT, &p->partner_id, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 46, SQLDT_INT, &p->father, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 47, SQLDT_INT, &p->mother, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 48, SQLDT_INT, &p->child, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 49, SQLDT_INT, &p->fame, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 50, SQLDT_USHORT, &p->rename, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 51, SQLDT_UINT32, &p->delete_date, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 52, SQLDT_SHORT, &p->robe, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 53, SQLDT_USHORT, &p->slotchange, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 54, SQLDT_UINT, &opt, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 55, SQLDT_UCHAR, &p->font, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 56, SQLDT_UINT, &p->uniqueitem_counter, 0, NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 57, SQLDT_ENUM, &sex, sizeof(sex), NULL, NULL)
+ || SQL_ERROR == SQL->StmtBindColumn(stmt, 58, SQLDT_UCHAR, &p->hotkey_rowshift, 0, NULL, NULL)
) {
SqlStmt_ShowDebug(stmt);
SQL->StmtFree(stmt);
@@ -1998,12 +2001,11 @@ int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p) {
WBUFW(buf,48) = min(p->max_sp, INT16_MAX);
WBUFW(buf,50) = DEFAULT_WALK_SPEED; // p->speed;
WBUFW(buf,52) = p->class_;
+ WBUFW(buf,54) = p->hair;
#if PACKETVER >= 20141022
- WBUFL(buf,54) = p->hair;
+ WBUFW(buf,56) = p->body;
offset+=2;
buf = WBUFP(buffer,offset);
-#else
- WBUFW(buf,54) = p->hair;
#endif
//When the weapon is sent and your option is riding, the client crashes on login!?
diff --git a/src/common/HPMDataCheck.h b/src/common/HPMDataCheck.h
index e849e6620..666d306db 100644
--- a/src/common/HPMDataCheck.h
+++ b/src/common/HPMDataCheck.h
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2014-2015 Hercules Dev Team
+ * Copyright (C) 2014-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -587,6 +587,7 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = {
{ "s_autospell", sizeof(struct s_autospell), SERVER_TYPE_MAP },
{ "sg_data", sizeof(struct sg_data), SERVER_TYPE_MAP },
{ "skill_tree_entry", sizeof(struct skill_tree_entry), SERVER_TYPE_MAP },
+ { "skill_tree_requirement", sizeof(struct skill_tree_requirement), SERVER_TYPE_MAP },
{ "weapon_data", sizeof(struct weapon_data), SERVER_TYPE_MAP },
#else
#define MAP_PC_H
diff --git a/src/common/HPMSymbols.inc.h b/src/common/HPMSymbols.inc.h
index db9108774..b06c43bf8 100644
--- a/src/common/HPMSymbols.inc.h
+++ b/src/common/HPMSymbols.inc.h
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2015-2015 Hercules Dev Team
+ * Copyright (C) 2015-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/common/mmo.h b/src/common/mmo.h
index 3c556636c..eb1d7cc8e 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -501,7 +501,7 @@ struct mmo_charstatus {
unsigned int option;
short manner; // Defines how many minutes a char will be muted, each negative point is equivalent to a minute.
unsigned char karma;
- short hair,hair_color,clothes_color;
+ short hair,hair_color,clothes_color,body;
int party_id,guild_id,pet_id,hom_id,mer_id,ele_id;
int fame;
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index c26daee54..9d03dd057 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2012-2015 Hercules Dev Team
+ * Copyright (C) 2012-2016 Hercules Dev Team
* Copyright (C) Athena Dev Teams
*
* Hercules is free software: you can redistribute it and/or modify
@@ -609,7 +609,7 @@ ACMD(jump)
* various info.
*------------------------------------------*/
ACMD(who) {
- struct map_session_data *pl_sd = NULL;
+ const struct map_session_data *pl_sd = NULL;
struct s_mapiterator *iter = NULL;
char player_name[NAME_LENGTH] = "";
int count = 0;
@@ -640,7 +640,7 @@ ACMD(who) {
StrBuf->Init(&buf);
iter = mapit_getallusers();
- for (pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter)) {
+ for (pl_sd = BL_UCCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCCAST(BL_PC, mapit->next(iter))) {
if (!((pc_has_permission(pl_sd, PC_PERM_HIDE_SESSION) || pc_isinvisible(pl_sd)) && pc_get_group_level(pl_sd) > level)) { // you can look only lower or same level
if (stristr(pl_sd->status.name, player_name) == NULL // search with no case sensitive
|| (map_id >= 0 && pl_sd->bl.m != map_id))
@@ -709,7 +709,7 @@ ACMD(who) {
*------------------------------------------*/
ACMD(whogm)
{
- struct map_session_data* pl_sd;
+ const struct map_session_data *pl_sd;
struct s_mapiterator* iter;
int j, count;
int level;
@@ -731,7 +731,7 @@ ACMD(whogm)
level = pc_get_group_level(sd);
iter = mapit_getallusers();
- for (pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter)) {
+ for (pl_sd = BL_UCCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCCAST(BL_PC, mapit->next(iter))) {
int pl_level = pc_get_group_level(pl_sd);
if (!pl_level)
continue;
@@ -1315,12 +1315,11 @@ ACMD(item2)
}
if (item_data->type == IT_PETARMOR)
refine = 0;
- if (refine > MAX_REFINE)
- refine = MAX_REFINE;
} else {
identify = 1;
refine = attr = 0;
}
+ refine = cap_value(refine, 0, MAX_REFINE);
for (i = 0; i < loop; i++) {
memset(&item_tmp, 0, sizeof(item_tmp));
item_tmp.nameid = item_id;
@@ -1564,8 +1563,11 @@ int atcommand_stopattack(struct block_list *bl,va_list ap)
*------------------------------------------*/
int atcommand_pvpoff_sub(struct block_list *bl,va_list ap)
{
- TBL_PC* sd = (TBL_PC*)bl;
+ struct map_session_data *sd = NULL;
nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
+
clif->pvpset(sd, 0, 0, 2);
if (sd->pvp_timer != INVALID_TIMER) {
timer->delete(sd->pvp_timer, pc->calc_pvprank_timer);
@@ -1599,8 +1601,11 @@ ACMD(pvpoff)
*------------------------------------------*/
int atcommand_pvpon_sub(struct block_list *bl,va_list ap)
{
- TBL_PC* sd = (TBL_PC*)bl;
+ struct map_session_data *sd = NULL;
nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
+
if (sd->pvp_timer == INVALID_TIMER) {
sd->pvp_timer = timer->add(timer->gettick() + 200, pc->calc_pvprank_timer, sd->bl.id, 0);
sd->pvp_rank = 0;
@@ -1704,6 +1709,32 @@ ACMD(model)
}
/*==========================================
+ * @bodystyle [Rytech]
+ *------------------------------------------*/
+ACMD(bodystyle)
+{
+ int body_style = 0;
+
+ memset(atcmd_output, '\0', sizeof(atcmd_output));
+
+ if (!*message || sscanf(message, "%d", &body_style) < 1) {
+ sprintf(atcmd_output, "Please, enter a body style (usage: @bodystyle <body ID: %d-%d>).", MIN_BODY_STYLE, MAX_BODY_STYLE);
+ clif->message(fd, atcmd_output);
+ return false;
+ }
+
+ if (body_style >= MIN_BODY_STYLE && body_style <= MAX_BODY_STYLE) {
+ pc->changelook(sd, LOOK_BODY2, body_style);
+ clif->message(fd, msg_txt(36)); // Appearence changed.
+ } else {
+ clif->message(fd, msg_txt(37)); // An invalid number was specified.
+ return false;
+ }
+
+ return true;
+}
+
+/*==========================================
* @dye && @ccolor
*------------------------------------------*/
ACMD(dye)
@@ -2016,10 +2047,12 @@ ACMD(monster)
*------------------------------------------*/
int atkillmonster_sub(struct block_list *bl, va_list ap)
{
- struct mob_data *md = (struct mob_data *)bl;
+ struct mob_data *md = NULL;
int flag = va_arg(ap, int);
-
nullpo_ret(bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
+
if (md->guardian_data)
return 0; //Do not touch WoE mobs!
@@ -2934,10 +2967,8 @@ ACMD(doom)
struct s_mapiterator* iter;
iter = mapit_getallusers();
- for( pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter) )
- {
- if (pl_sd->fd != fd && pc_get_group_level(sd) >= pc_get_group_level(pl_sd))
- {
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter))) {
+ if (pl_sd->fd != fd && pc_get_group_level(sd) >= pc_get_group_level(pl_sd)) {
status_kill(&pl_sd->bl);
clif->specialeffect(&pl_sd->bl,450,AREA);
clif->message(pl_sd->fd, msg_fd(fd,61)); // The holy messenger has given judgment.
@@ -2959,10 +2990,8 @@ ACMD(doommap)
struct s_mapiterator* iter;
iter = mapit_getallusers();
- for( pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter) )
- {
- if (pl_sd->fd != fd && sd->bl.m == pl_sd->bl.m && pc_get_group_level(sd) >= pc_get_group_level(pl_sd))
- {
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter))) {
+ if (pl_sd->fd != fd && sd->bl.m == pl_sd->bl.m && pc_get_group_level(sd) >= pc_get_group_level(pl_sd)) {
status_kill(&pl_sd->bl);
clif->specialeffect(&pl_sd->bl,450,AREA);
clif->message(pl_sd->fd, msg_fd(fd,61)); // The holy messenger has given judgment.
@@ -2996,7 +3025,7 @@ ACMD(raise)
struct s_mapiterator* iter;
iter = mapit_getallusers();
- for( pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter) )
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter)))
if( pc_isdead(pl_sd) )
atcommand->raise_sub(pl_sd);
mapit->free(iter);
@@ -3015,7 +3044,7 @@ ACMD(raisemap)
struct s_mapiterator* iter;
iter = mapit_getallusers();
- for( pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter) )
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter)))
if (sd->bl.m == pl_sd->bl.m && pc_isdead(pl_sd) )
atcommand->raise_sub(pl_sd);
mapit->free(iter);
@@ -3064,8 +3093,7 @@ ACMD(kickall)
struct s_mapiterator* iter;
iter = mapit_getallusers();
- for (pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter))
- {
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if (pc_get_group_level(sd) >= pc_get_group_level(pl_sd)) { // you can kick only lower or same gm level
if (sd->status.account_id != pl_sd->status.account_id)
clif->GM_kick(NULL, pl_sd);
@@ -3399,7 +3427,7 @@ ACMD(recallall)
count = 0;
iter = mapit_getallusers();
- for (pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter)) {
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if (sd->status.account_id != pl_sd->status.account_id && pc_get_group_level(sd) >= pc_get_group_level(pl_sd)) {
if (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y)
continue; // Don't waste time warping the character to the same place.
@@ -3459,8 +3487,7 @@ ACMD(guildrecall)
count = 0;
iter = mapit_getallusers();
- for (pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter))
- {
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if (sd->status.account_id != pl_sd->status.account_id && pl_sd->status.guild_id == g->guild_id) {
if (pc_get_group_level(pl_sd) > pc_get_group_level(sd) || (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y))
continue; // Skip GMs greater than you... or chars already on the cell
@@ -3516,7 +3543,7 @@ ACMD(partyrecall)
count = 0;
iter = mapit_getallusers();
- for( pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter) ) {
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if (sd->status.account_id != pl_sd->status.account_id && pl_sd->status.party_id == p->party.party_id) {
if (pc_get_group_level(pl_sd) > pc_get_group_level(sd) || (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y))
continue; // Skip GMs greater than you... or chars already on the cell
@@ -3679,7 +3706,7 @@ ACMD(reloadscript) {
//atcommand_broadcast( fd, sd, "@broadcast", "You will feel a bit of lag at this point !" );
iter = mapit_getallusers();
- for (pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter)) {
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if (pl_sd->npc_id || pl_sd->npc_shopid) {
if (pl_sd->state.using_fake_npc) {
clif->clearunit_single(pl_sd->npc_id, CLR_OUTSIGHT, pl_sd->fd);
@@ -3717,10 +3744,11 @@ ACMD(reloadscript) {
* 3 = Shows the chats in that map
TODO# add the missing mapflags e.g. adjust_skill_damage to display
*------------------------------------------*/
-ACMD(mapinfo) {
- struct map_session_data* pl_sd;
+ACMD(mapinfo)
+{
+ const struct map_session_data *pl_sd;
struct s_mapiterator* iter;
- struct chat_data *cd = NULL;
+ const struct chat_data *cd = NULL;
char direction[12];
int i, m_id, chat_num = 0, list = 0, vend_num = 0;
unsigned short m_index;
@@ -3755,11 +3783,11 @@ ACMD(mapinfo) {
// count chats (for initial message)
chat_num = 0;
iter = mapit_getallusers();
- for( pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter) ) {
+ for (pl_sd = BL_UCCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCCAST(BL_PC, mapit->next(iter))) {
if( pl_sd->mapindex == m_index ) {
if( pl_sd->state.vending )
vend_num++;
- else if( (cd = (struct chat_data*)map->id2bl(pl_sd->chatID)) != NULL && cd->usersd[0] == pl_sd )
+ else if ((cd = map->id2cd(pl_sd->chatID)) != NULL && cd->usersd[0] == pl_sd)
chat_num++;
}
}
@@ -3900,8 +3928,7 @@ ACMD(mapinfo) {
case 1:
clif->message(fd, msg_fd(fd,1098)); // ----- Players in Map -----
iter = mapit_getallusers();
- for (pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter))
- {
+ for (pl_sd = BL_UCCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCCAST(BL_PC, mapit->next(iter))) {
if (pl_sd->mapindex == m_index) {
safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1099), // Player '%s' (session #%d) | Location: %d,%d
pl_sd->status.name, pl_sd->fd, pl_sd->bl.x, pl_sd->bl.y);
@@ -3938,12 +3965,8 @@ ACMD(mapinfo) {
case 3:
clif->message(fd, msg_fd(fd,1113)); // ----- Chats in Map -----
iter = mapit_getallusers();
- for (pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter))
- {
- if ((cd = (struct chat_data*)map->id2bl(pl_sd->chatID)) != NULL &&
- pl_sd->mapindex == m_index &&
- cd->usersd[0] == pl_sd)
- {
+ for (pl_sd = BL_UCCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCCAST(BL_PC, mapit->next(iter))) {
+ if ((cd = map->id2cd(pl_sd->chatID)) != NULL && pl_sd->mapindex == m_index && cd->usersd[0] == pl_sd) {
safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1114), // Chat: %s | Player: %s | Location: %d %d
cd->title, pl_sd->status.name, cd->bl.x, cd->bl.y);
clif->message(fd, atcmd_output);
@@ -4724,7 +4747,7 @@ ACMD(disguiseall)
}
iter = mapit_getallusers();
- for( pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter) )
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter)))
pc->disguise(pl_sd, mob_id);
mapit->free(iter);
@@ -4804,7 +4827,7 @@ ACMD(undisguiseall) {
struct s_mapiterator* iter;
iter = mapit_getallusers();
- for( pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter) )
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter)))
if( pl_sd->disguise != -1 )
pc->disguise(pl_sd, -1);
mapit->free(iter);
@@ -5364,12 +5387,13 @@ ACMD(displayskill) {
* @skilltree by [MouseJstr]
* prints the skill tree for a player required to get to a skill
*------------------------------------------*/
-ACMD(skilltree) {
+ACMD(skilltree)
+{
struct map_session_data *pl_sd = NULL;
uint16 skill_id;
int meets, j, c=0;
char target[NAME_LENGTH];
- struct skill_tree_entry *ent;
+ struct skill_tree_entry *entry;
if(!*message || sscanf(message, "%5hu %23[^\r\n]", &skill_id, target) != 2) {
clif->message(fd, msg_fd(fd,1167)); // Usage: @skilltree <skill ID> <target>
@@ -5387,21 +5411,19 @@ ACMD(skilltree) {
safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1168), pc->job_name(c), pc->checkskill(pl_sd, NV_BASIC)); // Player is using %s skill tree (%d basic points).
clif->message(fd, atcmd_output);
- ARR_FIND( 0, MAX_SKILL_TREE, j, pc->skill_tree[c][j].id == 0 || pc->skill_tree[c][j].id == skill_id );
- if( j == MAX_SKILL_TREE || pc->skill_tree[c][j].id == 0 )
- {
+ ARR_FIND(0, MAX_SKILL_TREE, j, pc->skill_tree[c][j].id == 0 || pc->skill_tree[c][j].id == skill_id);
+ if (j == MAX_SKILL_TREE || pc->skill_tree[c][j].id == 0) {
clif->message(fd, msg_fd(fd,1169)); // The player cannot use that skill.
return false;
}
- ent = &pc->skill_tree[c][j];
+ entry = &pc->skill_tree[c][j];
meets = 1;
- for(j=0;j<MAX_PC_SKILL_REQUIRE;j++)
- {
- if( ent->need[j].id && pc->checkskill(sd,ent->need[j].id) < ent->need[j].lv)
- {
- safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1170), ent->need[j].lv, skill->dbs->db[ent->need[j].id].desc); // Player requires level %d of skill %s.
+ for (j = 0; j < VECTOR_LENGTH(entry->need); j++) {
+ struct skill_tree_requirement *req = &VECTOR_INDEX(entry->need, j);
+ if (pc->checkskill(sd, req->id) < req->lv) {
+ safesnprintf(atcmd_output, sizeof(atcmd_output), msg_fd(fd,1170), req->lv, skill->dbs->db[req->id].desc); // Player requires level %d of skill %s.
clif->message(fd, atcmd_output);
meets = 0;
}
@@ -5486,7 +5508,7 @@ ACMD(divorce)
ACMD(changelook)
{
int i, j = 0, k = 0;
- int pos[7] = { LOOK_HEAD_TOP,LOOK_HEAD_MID,LOOK_HEAD_BOTTOM,LOOK_WEAPON,LOOK_SHIELD,LOOK_SHOES,LOOK_ROBE };
+ int pos[8] = { LOOK_HEAD_TOP,LOOK_HEAD_MID,LOOK_HEAD_BOTTOM,LOOK_WEAPON,LOOK_SHIELD,LOOK_SHOES,LOOK_ROBE,LOOK_BODY2 };
if((i = sscanf(message, "%12d %12d", &j, &k)) < 1) {
clif->message(fd, msg_fd(fd,1177)); // Usage: @changelook {<position>} <view id>
@@ -6041,7 +6063,8 @@ ACMD(mobsearch)
char mob_name[100];
int mob_id;
int number = 0;
- struct s_mapiterator* it;
+ struct s_mapiterator *it;
+ const struct mob_data *md = NULL;
if (!*message || sscanf(message, "%99[^\n]", mob_name) < 1) {
clif->message(fd, msg_fd(fd,1218)); // Please enter a monster name (usage: @mobsearch <monster name>).
@@ -6063,12 +6086,7 @@ ACMD(mobsearch)
clif->message(fd, atcmd_output);
it = mapit_geteachmob();
- for(;;)
- {
- TBL_MOB* md = (TBL_MOB*)mapit->next(it);
- if( md == NULL )
- break;// no more mobs
-
+ for (md = BL_UCCAST(BL_MOB, mapit->first(it)); mapit->exists(it); md = BL_UCCAST(BL_MOB, mapit->next(it))) {
if( md->bl.m != sd->bl.m )
continue;
if( mob_id != -1 && md->class_ != mob_id )
@@ -6226,24 +6244,22 @@ ACMD(users)
char buf[CHAT_SIZE_MAX];
int users[MAX_MAPINDEX];
int users_all;
- struct s_mapiterator* iter;
+ struct s_mapiterator *iter;
+ const struct map_session_data *pl_sd = NULL;
memset(users, 0, sizeof(users));
users_all = 0;
// count users on each map
iter = mapit_getallusers();
- for(;;)
- {
- struct map_session_data* sd2 = (struct map_session_data*)mapit->next(iter);
- if( sd2 == NULL )
- break;// no more users
-
- if( sd2->mapindex >= MAX_MAPINDEX )
+ for (pl_sd = BL_UCCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCCAST(BL_PC, mapit->next(iter))) {
+ if (pl_sd->mapindex >= MAX_MAPINDEX)
continue;// invalid mapindex
- if( users[sd2->mapindex] < INT_MAX ) ++users[sd2->mapindex];
- if( users_all < INT_MAX ) ++users_all;
+ if (users[pl_sd->mapindex] < INT_MAX)
+ ++users[pl_sd->mapindex];
+ if (users_all < INT_MAX)
+ ++users_all;
}
mapit->free(iter);
@@ -6512,7 +6528,7 @@ ACMD(refreshall)
struct s_mapiterator* iter;
iter = mapit_getallusers();
- for (iter_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); iter_sd = (TBL_PC*)mapit->next(iter))
+ for (iter_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); iter_sd = BL_UCAST(BL_PC, mapit->next(iter)))
clif->refresh(iter_sd);
mapit->free(iter);
return true;
@@ -6720,7 +6736,8 @@ ACMD(showmobs)
char mob_name[100];
int mob_id;
int number = 0;
- struct s_mapiterator* it;
+ struct s_mapiterator *it;
+ const struct mob_data *md = NULL;
if (sscanf(message, "%99[^\n]", mob_name) < 0) {
clif->message(fd, msg_fd(fd,546)); // Please enter a mob name/id (usage: @showmobs <mob name/id>)
@@ -6757,12 +6774,7 @@ ACMD(showmobs)
clif->message(fd, atcmd_output);
it = mapit_geteachmob();
- for(;;)
- {
- TBL_MOB* md = (TBL_MOB*)mapit->next(it);
- if( md == NULL )
- break;// no more mobs
-
+ for (md = BL_UCCAST(BL_MOB, mapit->first(it)); mapit->next(it); md = BL_UCCAST(BL_MOB, mapit->next(it))) {
if( md->bl.m != sd->bl.m )
continue;
if( mob_id != -1 && md->class_ != mob_id )
@@ -6784,7 +6796,7 @@ ACMD(showmobs)
* homunculus level up [orn]
*------------------------------------------*/
ACMD(homlevel) {
- TBL_HOM * hd;
+ struct homun_data *hd;
int level = 0;
enum homun_type htype;
@@ -7279,7 +7291,7 @@ int atcommand_mutearea_sub(struct block_list *bl, va_list ap)
{ // As it is being used [ACMD(mutearea)] there's no need to be a bool, but if there's need to reuse it, it's better to be this way
int time, id;
- struct map_session_data *pl_sd = (struct map_session_data *)bl;
+ struct map_session_data *pl_sd = BL_CAST(BL_PC, bl);
if (pl_sd == NULL)
return 0;
@@ -7395,7 +7407,7 @@ ACMD(sizeall)
size = cap_value(size,0,2);
iter = mapit_getallusers();
- for (pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter)) {
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if (pl_sd->state.size != size) {
if (pl_sd->state.size) {
pl_sd->state.size = SZ_SMALL;
@@ -9650,6 +9662,7 @@ void atcommand_basecommands(void) {
ACMD_DEF(skdebug),
ACMD_DEF(cddebug),
ACMD_DEF(lang),
+ ACMD_DEF(bodystyle),
};
int i;
@@ -9797,7 +9810,7 @@ bool atcommand_exec(const int fd, struct map_session_data *sd, const char *messa
//Reconstructed message
char atcmd_msg[CHAT_SIZE_MAX];
- TBL_PC * ssd = NULL; //sd for target
+ struct map_session_data *ssd = NULL; //sd for target
AtCommandInfo * info;
nullpo_retr(false, sd);
diff --git a/src/map/battle.c b/src/map/battle.c
index 69d24b299..3b3ea2047 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2012-2015 Hercules Dev Team
+ * Copyright (C) 2012-2016 Hercules Dev Team
* Copyright (C) Athena Dev Teams
*
* Hercules is free software: you can redistribute it and/or modify
@@ -61,18 +61,30 @@ struct Battle_Config battle_config;
struct battle_interface battle_s;
struct battle_interface *battle;
-int battle_getcurrentskill(struct block_list *bl) { //Returns the current/last skill in use by this bl.
- struct unit_data *ud;
+/**
+ * Returns the current/last skill in use by this bl.
+ *
+ * @param bl The bl to check.
+ * @return The current/last skill ID.
+ */
+int battle_getcurrentskill(struct block_list *bl)
+{
+ const struct unit_data *ud;
nullpo_ret(bl);
if (bl->type == BL_SKILL) {
- struct skill_unit * su = (struct skill_unit*)bl;
- return su->group?su->group->skill_id:0;
+ const struct skill_unit *su = BL_UCCAST(BL_SKILL, bl);
+ if (su->group == NULL)
+ return 0;
+ return su->group->skill_id;
}
ud = unit->bl2ud(bl);
- return ud?ud->skill_id:0;
+ if (ud == NULL)
+ return 0;
+
+ return ud->skill_id;
}
/*==========================================
@@ -125,12 +137,12 @@ int battle_gettarget(struct block_list* bl) {
nullpo_ret(bl);
switch (bl->type) {
- case BL_PC: return ((struct map_session_data*)bl)->ud.target;
- case BL_MOB: return ((struct mob_data*)bl)->target_id;
- case BL_PET: return ((struct pet_data*)bl)->target_id;
- case BL_HOM: return ((struct homun_data*)bl)->ud.target;
- case BL_MER: return ((struct mercenary_data*)bl)->ud.target;
- case BL_ELEM: return ((struct elemental_data*)bl)->ud.target;
+ case BL_PC: return BL_UCCAST(BL_PC, bl)->ud.target;
+ case BL_MOB: return BL_UCCAST(BL_MOB, bl)->target_id;
+ case BL_PET: return BL_UCCAST(BL_PET, bl)->target_id;
+ case BL_HOM: return BL_UCCAST(BL_HOM, bl)->ud.target;
+ case BL_MER: return BL_UCCAST(BL_MER, bl)->ud.target;
+ case BL_ELEM: return BL_UCCAST(BL_ELEM, bl)->ud.target;
}
return 0;
@@ -230,47 +242,37 @@ int battle_delay_damage_sub(int tid, int64 tick, int id, intptr_t data) {
struct delay_damage *dat = (struct delay_damage *)data;
if ( dat ) {
- struct block_list* src = NULL;
- struct block_list* target = map->id2bl(dat->target_id);
-
- if( !target || status->isdead(target) ) {/* nothing we can do */
- if( dat->src_type == BL_PC && (src = map->id2bl(dat->src_id)) != NULL && --((TBL_PC*)src)->delayed_damage == 0 && ((TBL_PC*)src)->state.hold_recalc ) {
- ((TBL_PC*)src)->state.hold_recalc = 0;
- status_calc_pc(((TBL_PC*)src),SCO_FORCE);
+ struct block_list *src = map->id2bl(dat->src_id);
+ struct map_session_data *sd = BL_CAST(BL_PC, src);
+ struct block_list *target = map->id2bl(dat->target_id);
+
+ if (target != NULL && !status->isdead(target)) {
+ //Check to see if you haven't teleported. [Skotlex]
+ if (src != NULL && (
+ battle_config.fix_warp_hit_delay_abuse ?
+ (dat->skill_id == MO_EXTREMITYFIST || target->m != src->m || check_distance_bl(src, target, dat->distance))
+ :
+ ((target->type != BL_PC || BL_UCAST(BL_PC, target)->invincible_timer == INVALID_TIMER)
+ && (dat->skill_id == MO_EXTREMITYFIST || (target->m == src->m && check_distance_bl(src, target, dat->distance))))
+ )) {
+ map->freeblock_lock();
+ status_fix_damage(src, target, dat->damage, dat->delay);
+ if (dat->attack_type && !status->isdead(target) && dat->additional_effects)
+ skill->additional_effect(src,target,dat->skill_id,dat->skill_lv,dat->attack_type,dat->dmg_lv,tick);
+ if (dat->dmg_lv > ATK_BLOCK && dat->attack_type)
+ skill->counter_additional_effect(src,target,dat->skill_id,dat->skill_lv,dat->attack_type,tick);
+ map->freeblock_unlock();
+ } else if (src == NULL && dat->skill_id == CR_REFLECTSHIELD) {
+ // it was monster reflected damage, and the monster died, we pass the damage to the character as expected
+ map->freeblock_lock();
+ status_fix_damage(target, target, dat->damage, dat->delay);
+ map->freeblock_unlock();
}
- ers_free(battle->delay_damage_ers, dat);
- return 0;
- }
-
- src = map->id2bl(dat->src_id);
-
- //Check to see if you haven't teleported. [Skotlex]
- if (src && (
- battle_config.fix_warp_hit_delay_abuse ?
- (dat->skill_id == MO_EXTREMITYFIST || target->m != src->m || check_distance_bl(src, target, dat->distance))
- :
- ((target->type != BL_PC || ((TBL_PC*)target)->invincible_timer == INVALID_TIMER)
- && (dat->skill_id == MO_EXTREMITYFIST || (target->m == src->m && check_distance_bl(src, target, dat->distance))))
- )) {
- map->freeblock_lock();
- status_fix_damage(src, target, dat->damage, dat->delay);
- if( dat->attack_type && !status->isdead(target) && dat->additional_effects )
- skill->additional_effect(src,target,dat->skill_id,dat->skill_lv,dat->attack_type,dat->dmg_lv,tick);
- if( dat->dmg_lv > ATK_BLOCK && dat->attack_type )
- skill->counter_additional_effect(src,target,dat->skill_id,dat->skill_lv,dat->attack_type,tick);
- map->freeblock_unlock();
- } else if( !src && dat->skill_id == CR_REFLECTSHIELD ) {
- /**
- * it was monster reflected damage, and the monster died, we pass the damage to the character as expected
- **/
- map->freeblock_lock();
- status_fix_damage(target, target, dat->damage, dat->delay);
- map->freeblock_unlock();
}
- if( src && src->type == BL_PC && --((TBL_PC*)src)->delayed_damage == 0 && ((TBL_PC*)src)->state.hold_recalc ) {
- ((TBL_PC*)src)->state.hold_recalc = 0;
- status_calc_pc(((TBL_PC*)src),SCO_FORCE);
+ if (sd != NULL && --sd->delayed_damage == 0 && sd->state.hold_recalc) {
+ sd->state.hold_recalc = 0;
+ status_calc_pc(sd, SCO_FORCE);
}
}
ers_free(battle->delay_damage_ers, dat);
@@ -317,8 +319,8 @@ int battle_delay_damage(int64 tick, int amotion, struct block_list *src, struct
if (src->type != BL_PC && amotion > 1000)
amotion = 1000; //Aegis places a damage-delay cap of 1 sec to non player attacks. [Skotlex]
- if( src->type == BL_PC ) {
- ((TBL_PC*)src)->delayed_damage++;
+ if (src->type == BL_PC) {
+ BL_UCAST(BL_PC, src)->delayed_damage++;
}
timer->add(tick+amotion, battle->delay_damage_sub, 0, (intptr_t)dat);
@@ -371,7 +373,7 @@ int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 d
}
if( target && target->type == BL_SKILL ) {
if( atk_elem == ELE_FIRE && battle->get_current_skill(target) == GN_WALLOFTHORN ) {
- struct skill_unit *su = (struct skill_unit*)target;
+ struct skill_unit *su = BL_UCAST(BL_SKILL, target);
struct skill_unit_group *sg;
struct block_list *sgsrc;
@@ -526,17 +528,20 @@ int64 battle_calc_base_damage(struct block_list *src, struct block_list *bl, uin
int64 damage;
struct status_data *st = status->get_status_data(src);
struct status_change *sc = status->get_sc(src);
-
+ const struct map_session_data *sd = NULL;
nullpo_retr(0, src);
+
+ sd = BL_CCAST(BL_PC, src);
+
if ( !skill_id ) {
s_ele = st->rhw.ele;
s_ele_ = st->lhw.ele;
- if ( src->type == BL_PC ) {
- if ( ((TBL_PC*)src)->charm_type != CHARM_TYPE_NONE && ((TBL_PC*)src)->charm_count >= MAX_SPIRITCHARM ) {
- s_ele = s_ele_ = ((TBL_PC*)src)->charm_type;
+ if (sd != NULL) {
+ if (sd->charm_type != CHARM_TYPE_NONE && sd->charm_count >= MAX_SPIRITCHARM) {
+ s_ele = s_ele_ = sd->charm_type;
}
- if ( flag & 2 && ((TBL_PC*)src)->bonus.arrow_ele )
- s_ele = ((TBL_PC*)src)->bonus.arrow_ele;
+ if (flag&2 && sd->bonus.arrow_ele != 0)
+ s_ele = sd->bonus.arrow_ele;
}
}
if (src->type == BL_PC) {
@@ -550,8 +555,7 @@ int64 battle_calc_base_damage(struct block_list *src, struct block_list *bl, uin
damage = batk + 3 * battle->calc_weapon_damage(src, bl, skill_id, skill_lv, &st->lhw, nk, n_ele, s_ele, s_ele_, status_get_size(bl), type, flag, flag2) / 4;
else
damage = (batk << 1) + battle->calc_weapon_damage(src, bl, skill_id, skill_lv, &st->rhw, nk, n_ele, s_ele, s_ele_, status_get_size(bl), type, flag, flag2);
- }
- else{
+ } else {
damage = st->batk + battle->calc_weapon_damage(src, bl, skill_id, skill_lv, &st->rhw, nk, n_ele, s_ele, s_ele_, status_get_size(bl), type, flag, flag2);
}
@@ -1931,7 +1935,7 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block
skillratio += 10 * skill_lv;
break;
case KN_SPEARSTAB:
- skillratio += 15 * skill_lv;
+ skillratio += 20 * skill_lv;
break;
case KN_SPEARBOOMERANG:
skillratio += 50*skill_lv;
@@ -2720,6 +2724,8 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
nullpo_ret(bl);
nullpo_ret(d);
+
+ sd = BL_CAST(BL_PC, bl);
div_ = d->div_;
flag = d->flag;
@@ -2729,8 +2735,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
return 0;
if( battle_config.ksprotection && mob->ksprotected(src, bl) )
return 0;
- if (bl->type == BL_PC) {
- sd=(struct map_session_data *)bl;
+ if (sd != NULL) {
//Special no damage states
if(flag&BF_WEAPON && sd->special_state.no_weapon_damage)
damage -= damage * sd->special_state.no_weapon_damage / 100;
@@ -2861,9 +2866,11 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
// If the target is too far away from the devotion caster, autoguard has no effect
// Autoguard will be disabled later on
struct block_list *d_bl = map->id2bl(sce_d->val1);
- if (d_bl && check_distance_bl(bl, d_bl, sce_d->val3)
- && ((d_bl->type == BL_MER && ((TBL_MER*)d_bl)->master && ((TBL_MER*)d_bl)->master->bl.id == bl->id)
- || (d_bl->type == BL_PC && ((TBL_PC*)d_bl)->devotion[sce_d->val2] == bl->id))
+ struct mercenary_data *d_md = BL_CAST(BL_MER, d_bl);
+ struct map_session_data *d_sd = BL_CAST(BL_PC, d_bl);
+ if (d_bl != NULL && check_distance_bl(bl, d_bl, sce_d->val3)
+ && ((d_bl->type == BL_MER && d_md->master != NULL && d_md->master->bl.id == bl->id)
+ || (d_bl->type == BL_PC && d_sd->devotion[sce_d->val2] == bl->id))
) {
// if player is target of devotion, show guard effect on the devotion caster rather than the target
clif->skill_nodamage(d_bl, d_bl, CR_AUTOGUARD, sce->val1, 1);
@@ -3059,10 +3066,11 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
// Compressed code, fixed by map.h [Epoque]
if (src->type == BL_MOB) {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, src);
int i;
if (sc->data[SC_MANU_DEF] != NULL) {
for (i = 0; i < ARRAYLENGTH(mob->manuk); i++) {
- if (mob->manuk[i] == ((TBL_MOB*)src)->class_) {
+ if (mob->manuk[i] == md->class_) {
damage -= damage * sc->data[SC_MANU_DEF]->val1 / 100;
break;
}
@@ -3070,7 +3078,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
}
if (sc->data[SC_SPL_DEF] != NULL) {
for (i = 0; i < ARRAYLENGTH(mob->splendide); i++) {
- if (mob->splendide[i] == ((TBL_MOB*)src)->class_) {
+ if (mob->splendide[i] == md->class_) {
damage -= damage * sc->data[SC_SPL_DEF]->val1 / 100;
break;
}
@@ -3078,7 +3086,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
}
if (sc->data[SC_MORA_BUFF] != NULL) {
for (i = 0; i < ARRAYLENGTH(mob->mora); i++) {
- if (mob->mora[i] == ((TBL_MOB*)src)->class_) {
+ if (mob->mora[i] == md->class_) {
damage -= damage * sc->data[SC_MORA_BUFF]->val1 / 100;
break;
}
@@ -3123,7 +3131,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
if( (sce = sc->data[SC_STONEHARDSKIN]) && flag&(BF_SHORT|BF_WEAPON) && damage > 0 ) {
sce->val2 -= (int)cap_value(damage,INT_MIN,INT_MAX);
if( src->type == BL_PC ) {
- TBL_PC *ssd = BL_CAST(BL_PC, src);
+ struct map_session_data *ssd = BL_CAST(BL_PC, src);
if (ssd && ssd->status.weapon != W_BOW)
skill->break_equip(src, EQP_WEAPON, 3000, BCT_SELF);
} else
@@ -3194,7 +3202,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
clif->millenniumshield(bl, sc->fv_counter++);
if (sc->data[SC_STYLE_CHANGE] && rnd()%2) {
- TBL_HOM *hd = BL_CAST(BL_HOM,bl);
+ struct homun_data *hd = BL_CAST(BL_HOM,bl);
if (hd) homun->addspiritball(hd, 10); //add a sphere
}
@@ -3213,24 +3221,25 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
damage += damage * 75 / 100;
// [Epoque]
if (bl->type == BL_MOB) {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
int i;
- if ( ((sce=tsc->data[SC_MANU_ATK]) && (flag&BF_WEAPON)) ||
- ((sce=tsc->data[SC_MANU_MATK]) && (flag&BF_MAGIC))
- )
- for (i=0;ARRAYLENGTH(mob->manuk)>i;i++)
- if (((TBL_MOB*)bl)->class_==mob->manuk[i]) {
+ if (((sce=tsc->data[SC_MANU_ATK]) != NULL && (flag&BF_WEAPON))
+ || ((sce=tsc->data[SC_MANU_MATK]) != NULL && (flag&BF_MAGIC))) {
+ for (i = 0; i < ARRAYLENGTH(mob->manuk); i++)
+ if (md->class_ == mob->manuk[i]) {
damage += damage * sce->val1 / 100;
break;
}
- if ( ((sce=tsc->data[SC_SPL_ATK]) && (flag&BF_WEAPON)) ||
- ((sce=tsc->data[SC_SPL_MATK]) && (flag&BF_MAGIC))
- )
- for (i=0;ARRAYLENGTH(mob->splendide)>i;i++)
- if (((TBL_MOB*)bl)->class_==mob->splendide[i]) {
+ }
+ if (((sce=tsc->data[SC_SPL_ATK]) != NULL && (flag&BF_WEAPON))
+ || ((sce=tsc->data[SC_SPL_MATK]) != NULL && (flag&BF_MAGIC))) {
+ for (i = 0; i < ARRAYLENGTH(mob->splendide); i++)
+ if (md->class_ == mob->splendide[i]) {
damage += damage * sce->val1 / 100;
break;
}
+ }
}
if( tsc->data[SC_POISONINGWEAPON] ) {
struct status_data *tstatus = status->get_status_data(bl);
@@ -3246,12 +3255,12 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
if (tsc->data[SC_SHIELDSPELL_REF] && tsc->data[SC_SHIELDSPELL_REF]->val1 == 1 && damage > 0)
skill->break_equip(bl,EQP_ARMOR,10000,BCT_ENEMY );
if (tsc->data[SC_STYLE_CHANGE] && rnd()%2) {
- TBL_HOM *hd = BL_CAST(BL_HOM,bl);
+ struct homun_data *hd = BL_CAST(BL_HOM,bl);
if (hd) homun->addspiritball(hd, 10);
}
if (src->type == BL_PC && damage > 0 && (sce = tsc->data[SC_GENTLETOUCH_ENERGYGAIN]) != NULL) {
- struct map_session_data *tsd = (struct map_session_data *)src;
- if ( tsd && rnd() % 100 < sce->val2 )
+ struct map_session_data *tsd = BL_UCAST(BL_PC, src);
+ if (tsd != NULL && rnd() % 100 < sce->val2)
pc->addspiritball(tsd, skill->get_time(MO_CALLSPIRITS, 1), pc->getmaxspiritball(tsd, 0));
}
}
@@ -3292,18 +3301,20 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
}
if( bl->type == BL_MOB && !status->isdead(bl) && src != bl) {
- if ( damage > 0 )
- mob->skill_event((TBL_MOB*)bl,src,timer->gettick(),flag);
+ struct mob_data *md = BL_UCAST(BL_MOB, bl);
+ if (damage > 0)
+ mob->skill_event(md, src, timer->gettick(), flag);
if (skill_id)
- mob->skill_event((TBL_MOB*)bl,src,timer->gettick(),MSC_SKILLUSED|(skill_id<<16));
+ mob->skill_event(md, src, timer->gettick(), MSC_SKILLUSED|(skill_id<<16));
}
if (sd && pc_ismadogear(sd) && rnd()%100 < 50) {
int element = -1;
if (!skill_id || (element = skill->get_ele(skill_id, skill_lv)) == -1) {
// Take weapon's element
struct status_data *sstatus = NULL;
- if (src->type == BL_PC && ((TBL_PC*)src)->bonus.arrow_ele) {
- element = ((TBL_PC*)src)->bonus.arrow_ele;
+ struct map_session_data *ssd = BL_CAST(BL_PC, src);
+ if (src->type == BL_PC && ssd->bonus.arrow_ele != 0) {
+ element = ssd->bonus.arrow_ele;
} else if ((sstatus = status->get_status_data(src)) != NULL) {
element = sstatus->rhw.ele;
}
@@ -3371,7 +3382,13 @@ int64 battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int64
}
}
if(src->type != BL_MOB) {
- struct guild *g = src->type == BL_PC ? ((TBL_PC *)src)->guild : guild->search(status->get_guild_id(src));
+ struct guild *g = NULL;
+ if (src->type == BL_PC) {
+ struct map_session_data *sd = BL_UCAST(BL_PC, src);
+ g = sd->guild;
+ } else {
+ g = guild->search(status->get_guild_id(src));
+ }
if (class_ == MOBID_EMPELIUM && (!g || guild->checkskill(g,GD_APPROVAL) <= 0))
return 0;
@@ -3420,7 +3437,8 @@ int battle_calc_drain(int64 damage, int rate, int per) {
/*==========================================
* Consumes ammo for the given skill.
*------------------------------------------*/
-void battle_consume_ammo(TBL_PC*sd, int skill_id, int lv) {
+void battle_consume_ammo(struct map_session_data *sd, int skill_id, int lv)
+{
int qty=1;
nullpo_retv(sd);
@@ -3499,7 +3517,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
short s_ele = 0;
unsigned int skillratio = 100; //Skill dmg modifiers.
- TBL_PC *sd;
+ struct map_session_data *sd = NULL;
struct status_change *sc;
struct Damage ad;
struct status_data *sstatus = status->get_status_data(src);
@@ -3562,8 +3580,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
//Skill Range Criteria
ad.flag |= battle->range_type(src, target, skill_id, skill_lv);
flag.infdef = (tstatus->mode&MD_PLANT) ? 1 : 0;
- if( !flag.infdef && target->type == BL_SKILL && ((TBL_SKILL*)target)->group->unit_id == UNT_REVERBERATION )
- flag.infdef = 1; // Reverberation takes 1 damage
+ if (!flag.infdef && target->type == BL_SKILL) {
+ const struct skill_unit *su = BL_UCCAST(BL_SKILL, target);
+ if (su->group->unit_id == UNT_REVERBERATION)
+ flag.infdef = 1; // Reverberation takes 1 damage
+ }
switch(skill_id) {
case MG_FIREWALL:
@@ -3691,10 +3712,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
if (skill_id) {
for(i = 0; i < map->list[target->m].zone->capped_skills_count; i++) {
if( skill_id == map->list[target->m].zone->capped_skills[i]->nameid && (map->list[target->m].zone->capped_skills[i]->type & target->type) ) {
- if( target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) {
- if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
+ if (target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE) {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, target);
+ if ((md->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS))
continue;
- if( ((TBL_MOB*)target)->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) )
+ if (md->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE))
continue;
}
if( ad.damage > map->list[target->m].zone->capped_skills[i]->cap )
@@ -4165,10 +4187,11 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
if (skill_id) {
for(i = 0; i < map->list[target->m].zone->capped_skills_count; i++) {
if( skill_id == map->list[target->m].zone->capped_skills[i]->nameid && (map->list[target->m].zone->capped_skills[i]->type & target->type) ) {
- if( target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) {
- if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
+ if (target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE) {
+ const struct mob_data *t_md = BL_UCCAST(BL_MOB, target);
+ if ((t_md->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS))
continue;
- if( ((TBL_MOB*)target)->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) )
+ if (t_md->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE))
continue;
}
if( md.damage > map->list[target->m].zone->capped_skills[i]->cap )
@@ -4294,13 +4317,16 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
//Initial flag
flag.rh=1;
flag.weapon=1;
- flag.infdef=(tstatus->mode&MD_PLANT && skill_id != RA_CLUSTERBOMB
+ flag.infdef = (tstatus->mode&MD_PLANT && skill_id != RA_CLUSTERBOMB?1:0);
#ifdef RENEWAL
- && skill_id != HT_FREEZINGTRAP
+ if (skill_id == HT_FREEZINGTRAP)
+ flag.infdef = 0;
#endif
- ?1:0);
- if( !flag.infdef && target->type == BL_SKILL && ((TBL_SKILL*)target)->group->unit_id == UNT_REVERBERATION )
- flag.infdef = 1; // Reverberation takes 1 damage
+ if (!flag.infdef && target->type == BL_SKILL) {
+ const struct skill_unit *su = BL_UCCAST(BL_SKILL, target);
+ if (su->group->unit_id == UNT_REVERBERATION)
+ flag.infdef = 1; // Reverberation takes 1 damage
+ }
//Initial Values
wd.type = BDT_NORMAL;
@@ -4846,10 +4872,12 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
ATK_ADD(sstatus->rhw.atk2); //Else use Atk2
break;
case HFLI_SBR44: //[orn]
- if(src->type == BL_HOM) {
- wd.damage = ((TBL_HOM*)src)->homunculus.intimacy ;
+ if (src->type == BL_HOM) {
+ const struct homun_data *hd = BL_UCCAST(BL_HOM, src);
+ wd.damage = hd->homunculus.intimacy;
break;
}
+ break;
default:
{
i = (flag.cri
@@ -5153,8 +5181,9 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
}
#endif
if(sc->data[SC_STYLE_CHANGE]){
- TBL_HOM *hd = BL_CAST(BL_HOM,src);
- if (hd) ATK_ADD(hd->homunculus.spiritball * 3);
+ struct homun_data *hd = BL_CAST(BL_HOM, src);
+ if (hd != NULL)
+ ATK_ADD(hd->homunculus.spiritball * 3);
}
}
@@ -5384,10 +5413,11 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
if (skill_id) {
for(i = 0; i < map->list[target->m].zone->capped_skills_count; i++) {
if( skill_id == map->list[target->m].zone->capped_skills[i]->nameid && (map->list[target->m].zone->capped_skills[i]->type & target->type) ) {
- if( target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) {
- if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
+ if (target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE) {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, target);
+ if ((md->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS))
continue;
- if( ((TBL_MOB*)target)->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) )
+ if (md->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE))
continue;
}
if( wd.damage > map->list[target->m].zone->capped_skills[i]->cap )
@@ -5596,14 +5626,10 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list
}
}
//Reject Sword bugreport:4493 by Daegaladh
- if(wd.damage && tsc && tsc->data[SC_SWORDREJECT] &&
- (src->type!=BL_PC || (
- ((TBL_PC *)src)->weapontype1 == W_DAGGER ||
- ((TBL_PC *)src)->weapontype1 == W_1HSWORD ||
- ((TBL_PC *)src)->status.weapon == W_2HSWORD
- )) &&
- rnd()%100 < tsc->data[SC_SWORDREJECT]->val2
- ) {
+ if (wd.damage != 0 && tsc != NULL && tsc->data[SC_SWORDREJECT] != NULL
+ && (sd == NULL || sd->weapontype1 == W_DAGGER || sd->weapontype1 == W_1HSWORD || sd->status.weapon == W_2HSWORD)
+ && rnd()%100 < tsc->data[SC_SWORDREJECT]->val2
+ ) {
ATK_RATER(50);
status_fix_damage(target,src,wd.damage,clif->damage(target,src,0,0,wd.damage,0,BDT_NORMAL,0));
clif->skill_nodamage(target,target,ST_REJECTSWORD,tsc->data[SC_SWORDREJECT]->val1,1);
@@ -5644,10 +5670,11 @@ struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct bl
int i;
for(i = 0; i < map->list[target->m].zone->capped_skills_count; i++) {
if( skill_id == map->list[target->m].zone->capped_skills[i]->nameid && (map->list[target->m].zone->capped_skills[i]->type & target->type) ) {
- if( target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE ) {
- if( (((TBL_MOB*)target)->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS) )
+ if (target->type == BL_MOB && map->list[target->m].zone->capped_skills[i]->subtype != MZS_NONE) {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, target);
+ if ((md->status.mode&MD_BOSS) && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_BOSS))
continue;
- if( ((TBL_MOB*)target)->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE) )
+ if (md->special_state.clone && !(map->list[target->m].zone->disabled_skills[i]->subtype&MZS_CLONE))
continue;
}
if( d.damage > map->list[target->m].zone->capped_skills[i]->cap )
@@ -5893,7 +5920,7 @@ void battle_reflect_damage(struct block_list *target, struct block_list *src, st
#undef NORMALIZE_RDAMAGE
}
-void battle_drain(TBL_PC *sd, struct block_list *tbl, int64 rdamage, int64 ldamage, int race, int boss)
+void battle_drain(struct map_session_data *sd, struct block_list *tbl, int64 rdamage, int64 ldamage, int race, int boss)
{
struct weapon_data *wd;
int type, thp = 0, tsp = 0, rhp = 0, rsp = 0, hp, sp, i;
@@ -5964,19 +5991,23 @@ int battle_damage_area(struct block_list *bl, va_list ap) {
amotion=va_arg(ap,int);
dmotion=va_arg(ap,int);
damage=va_arg(ap,int);
- if (bl->type == BL_MOB && ((TBL_MOB*)bl)->class_ == MOBID_EMPELIUM)
+ if (bl->type == BL_MOB && BL_UCCAST(BL_MOB, bl)->class_ == MOBID_EMPELIUM)
return 0;
if( bl != src && battle->check_target(src,bl,BCT_ENEMY) > 0 ) {
+ struct map_session_data *sd = NULL;
nullpo_ret(src);
+
map->freeblock_lock();
- if( src->type == BL_PC )
- battle->drain((TBL_PC*)src, bl, damage, damage, status_get_race(bl), is_boss(bl));
+ sd = BL_CAST(BL_PC, src);
+
+ if (src->type == BL_PC)
+ battle->drain(sd, bl, damage, damage, status_get_race(bl), is_boss(bl));
if( amotion )
battle->delay_damage(tick, amotion,src,bl,0,CR_REFLECTSHIELD,0,damage,ATK_DEF,0,true);
else
status_fix_damage(src,bl,damage,0);
clif->damage(bl,bl,amotion,dmotion,damage,1,BDT_ENDURE,0);
- if( !(src->type == BL_PC && ((TBL_PC*)src)->state.autocast) )
+ if (src->type != BL_PC || !sd->state.autocast)
skill->additional_effect(src, bl, CR_REFLECTSHIELD, 1, BF_WEAPON|BF_SHORT|BF_NORMAL,ATK_DEF,tick);
map->freeblock_unlock();
}
@@ -6171,9 +6202,9 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
if (sd && sd->bonus.splash_range > 0 && damage > 0)
skill->castend_damage_id(src, target, 0, 1, tick, 0);
- if ( target->type == BL_SKILL && damage > 0 ){
- TBL_SKILL *su = (TBL_SKILL*)target;
- if( su->group && su->group->skill_id == HT_BLASTMINE)
+ if (target->type == BL_SKILL && damage > 0) {
+ struct skill_unit *su = BL_UCAST(BL_SKILL, target);
+ if (su->group && su->group->skill_id == HT_BLASTMINE)
skill->blown(src, target, 3, -1, 0);
}
map->freeblock_lock();
@@ -6189,20 +6220,23 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
if( tsc->data[SC_DEVOTION] ) {
struct status_change_entry *sce = tsc->data[SC_DEVOTION];
struct block_list *d_bl = map->id2bl(sce->val1);
-
- if( d_bl && (
- (d_bl->type == BL_MER && ((TBL_MER*)d_bl)->master && ((TBL_MER*)d_bl)->master->bl.id == target->id) ||
- (d_bl->type == BL_PC && ((TBL_PC*)d_bl)->devotion[sce->val2] == target->id)
- ) && check_distance_bl(target, d_bl, sce->val3) )
- {
+ struct mercenary_data *d_md = BL_CAST(BL_MER, d_bl);
+ struct map_session_data *d_sd = BL_CAST(BL_PC, d_bl);
+
+ if (d_bl != NULL
+ && ((d_bl->type == BL_MER && d_md->master != NULL && d_md->master->bl.id == target->id)
+ || (d_bl->type == BL_PC && d_sd->devotion[sce->val2] == target->id)
+ )
+ && check_distance_bl(target, d_bl, sce->val3)
+ ) {
clif->damage(d_bl, d_bl, 0, 0, damage, 0, BDT_NORMAL, 0);
status_fix_damage(NULL, d_bl, damage, 0);
- }
- else
+ } else {
status_change_end(target, SC_DEVOTION, INVALID_TIMER);
+ }
} else if( tsc->data[SC_CIRCLE_OF_FIRE_OPTION] && (wd.flag&BF_SHORT) && target->type == BL_PC ) {
- struct elemental_data *ed = ((TBL_PC*)target)->ed;
- if( ed ) {
+ struct elemental_data *ed = BL_UCAST(BL_PC, target)->ed;
+ if (ed != NULL) {
clif->skill_damage(&ed->bl, target, tick, status_get_amotion(src), 0, -30000, 1, EL_CIRCLE_OF_FIRE, tsc->data[SC_CIRCLE_OF_FIRE_OPTION]->val1, BDT_SKILL);
skill->attack(BF_MAGIC,&ed->bl,&ed->bl,src,EL_CIRCLE_OF_FIRE,tsc->data[SC_CIRCLE_OF_FIRE_OPTION]->val1,tick,wd.flag);
}
@@ -6366,35 +6400,54 @@ bool battle_check_undead(int race,int element)
}
//Returns the upmost level master starting with the given object
-struct block_list* battle_get_master(struct block_list *src) {
- struct block_list *prev; //Used for infinite loop check (master of yourself?)
+struct block_list *battle_get_master(struct block_list *src)
+{
+ struct block_list *prev = NULL; //Used for infinite loop check (master of yourself?)
nullpo_retr(NULL, src);
do {
prev = src;
switch (src->type) {
case BL_PET:
- if (((TBL_PET*)src)->msd)
- src = (struct block_list*)((TBL_PET*)src)->msd;
+ {
+ struct pet_data *pd = BL_UCAST(BL_PET, src);
+ if (pd->msd != NULL)
+ src = &pd->msd->bl;
+ }
break;
case BL_MOB:
- if (((TBL_MOB*)src)->master_id)
- src = map->id2bl(((TBL_MOB*)src)->master_id);
+ {
+ struct mob_data *md = BL_UCAST(BL_MOB, src);
+ if (md->master_id != 0)
+ src = map->id2bl(md->master_id);
+ }
break;
case BL_HOM:
- if (((TBL_HOM*)src)->master)
- src = (struct block_list*)((TBL_HOM*)src)->master;
+ {
+ struct homun_data *hd = BL_UCAST(BL_HOM, src);
+ if (hd->master != NULL)
+ src = &hd->master->bl;
+ }
break;
case BL_MER:
- if (((TBL_MER*)src)->master)
- src = (struct block_list*)((TBL_MER*)src)->master;
+ {
+ struct mercenary_data *md = BL_UCAST(BL_MER, src);
+ if (md->master != NULL)
+ src = &md->master->bl;
+ }
break;
case BL_ELEM:
- if (((TBL_ELEM*)src)->master)
- src = (struct block_list*)((TBL_ELEM*)src)->master;
+ {
+ struct elemental_data *ed = BL_UCAST(BL_ELEM, src);
+ if (ed->master != NULL)
+ src = &ed->master->bl;
+ }
break;
case BL_SKILL:
- if (((TBL_SKILL*)src)->group && ((TBL_SKILL*)src)->group->src_id)
- src = map->id2bl(((TBL_SKILL*)src)->group->src_id);
+ {
+ struct skill_unit *su = BL_UCAST(BL_SKILL, src);
+ if (su->group != NULL && su->group->src_id != 0)
+ src = map->id2bl(su->group->src_id);
+ }
break;
}
} while (src && src != prev);
@@ -6435,14 +6488,15 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
if( (s_bl = battle->get_master(src)) == NULL )
s_bl = src;
- if ( s_bl->type == BL_PC ) {
- switch( t_bl->type ) {
+ if (s_bl->type == BL_PC) {
+ const struct map_session_data *s_sd = BL_UCCAST(BL_PC, s_bl);
+ switch (t_bl->type) {
case BL_MOB: // Source => PC, Target => MOB
- if (pc_has_permission((TBL_PC*)s_bl, PC_PERM_DISABLE_PVM) )
+ if (pc_has_permission(s_sd, PC_PERM_DISABLE_PVM))
return 0;
break;
case BL_PC:
- if (pc_has_permission((TBL_PC*)s_bl, PC_PERM_DISABLE_PVP))
+ if (pc_has_permission(s_sd, PC_PERM_DISABLE_PVP))
return 0;
break;
default:/* anything else goes */
@@ -6451,29 +6505,31 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
}
switch( target->type ) { // Checks on actual target
- case BL_PC: {
- struct status_change* sc = status->get_sc(src);
- if( ((TBL_PC*)target)->invincible_timer != INVALID_TIMER ) {
- switch( battle->get_current_skill(src) ) {
- /* TODO a proper distinction should be established bugreport:8397 */
- case PR_SANCTUARY:
- case PR_MAGNIFICAT:
- break;
- default:
- return -1;
- }
- }
- if ( pc_isinvisible((TBL_PC*)target) )
- return -1; //Cannot be targeted yet.
- if( sc && sc->count ) {
- if( sc->data[SC_SIREN] && sc->data[SC_SIREN]->val2 == target->id )
+ case BL_PC:
+ {
+ const struct status_change *sc = status->get_sc(src);
+ const struct map_session_data *t_sd = BL_UCCAST(BL_PC, target);
+ if (t_sd->invincible_timer != INVALID_TIMER) {
+ switch( battle->get_current_skill(src) ) {
+ /* TODO a proper distinction should be established bugreport:8397 */
+ case PR_SANCTUARY:
+ case PR_MAGNIFICAT:
+ break;
+ default:
return -1;
}
}
+ if (pc_isinvisible(t_sd))
+ return -1; //Cannot be targeted yet.
+ if (sc && sc->count) {
+ if (sc->data[SC_SIREN] && sc->data[SC_SIREN]->val2 == target->id)
+ return -1;
+ }
+ }
break;
case BL_MOB:
{
- TBL_MOB *md = BL_CAST(BL_MOB, target);
+ const struct mob_data *md = BL_UCCAST(BL_MOB, target);
if((
(md->special_state.ai == AI_SPHERE || (md->special_state.ai == AI_FLORA && battle_config.summon_flora&1))
&& s_bl->type == BL_PC && src->type != BL_MOB
@@ -6488,7 +6544,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
}
case BL_SKILL:
{
- TBL_SKILL *su = (TBL_SKILL*)target;
+ const struct skill_unit *su = BL_UCCAST(BL_SKILL, target);
if( !su->group )
return 0;
if( skill->get_inf2(su->group->skill_id)&INF2_TRAP &&
@@ -6559,13 +6615,13 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
switch( t_bl->type ) { //Checks on target master
case BL_PC:
{
- struct map_session_data *sd;
- if( t_bl == s_bl ) break;
- sd = BL_CAST(BL_PC, t_bl);
+ const struct map_session_data *sd = BL_UCCAST(BL_PC, t_bl);
+ if (t_bl == s_bl)
+ break;
if( sd->state.monster_ignore && flag&BCT_ENEMY )
return 0; // Global immunity only to Attacks
- if( sd->status.karma && s_bl->type == BL_PC && ((TBL_PC*)s_bl)->status.karma )
+ if (sd->status.karma && s_bl->type == BL_PC && BL_UCCAST(BL_PC, s_bl)->status.karma)
state |= BCT_ENEMY; // Characters with bad karma may fight amongst them
if( sd->state.killable ) {
state |= BCT_ENEMY; // Everything can kill it
@@ -6575,7 +6631,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
}
case BL_MOB:
{
- struct mob_data *md = BL_CAST(BL_MOB, t_bl);
+ const struct mob_data *md = BL_UCCAST(BL_MOB, t_bl);
if( !((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle)
&& md->guardian_data && (md->guardian_data->g || md->guardian_data->castle->guild_id) )
@@ -6589,31 +6645,32 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
case BL_PET:
if (t_bl->type != BL_MOB && flag&BCT_ENEMY)
return 0; //Pet may not attack non-mobs.
- if (t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->guardian_data && flag&BCT_ENEMY)
+ if (t_bl->type == BL_MOB && BL_UCCAST(BL_MOB, t_bl)->guardian_data && flag&BCT_ENEMY)
return 0; //pet may not attack Guardians/Emperium
break;
- case BL_SKILL: {
- struct skill_unit *su = (struct skill_unit *)src;
- struct status_change* sc = status->get_sc(target);
- if (!su->group)
- return 0;
+ case BL_SKILL:
+ {
+ const struct skill_unit *su = BL_UCCAST(BL_SKILL, src);
+ const struct status_change *sc = status->get_sc(target);
+ if (su->group == NULL)
+ return 0;
- if (su->group->src_id == target->id) {
- int inf2 = skill->get_inf2(su->group->skill_id);
- if (inf2&INF2_NO_TARGET_SELF)
- return -1;
- if (inf2&INF2_TARGET_SELF)
- return 1;
- }
- //Status changes that prevent traps from triggering
- if (sc && sc->count && skill->get_inf2(su->group->skill_id)&INF2_TRAP) {
- if( sc->data[SC_WZ_SIGHTBLASTER] && sc->data[SC_WZ_SIGHTBLASTER]->val2 > 0 && sc->data[SC_WZ_SIGHTBLASTER]->val4%2 == 0)
- return -1;
- }
+ if (su->group->src_id == target->id) {
+ int inf2 = skill->get_inf2(su->group->skill_id);
+ if (inf2&INF2_NO_TARGET_SELF)
+ return -1;
+ if (inf2&INF2_TARGET_SELF)
+ return 1;
}
+ //Status changes that prevent traps from triggering
+ if (sc != NULL && sc->count != 0 && skill->get_inf2(su->group->skill_id)&INF2_TRAP) {
+ if (sc->data[SC_WZ_SIGHTBLASTER] != NULL && sc->data[SC_WZ_SIGHTBLASTER]->val2 > 0 && sc->data[SC_WZ_SIGHTBLASTER]->val4%2 == 0)
+ return -1;
+ }
+ }
break;
case BL_MER:
- if (t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->class_ == MOBID_EMPELIUM && flag&BCT_ENEMY)
+ if (t_bl->type == BL_MOB && BL_UCCAST(BL_MOB, t_bl)->class_ == MOBID_EMPELIUM && flag&BCT_ENEMY)
return 0; //mercenary may not attack Emperium
break;
} //end switch actual src
@@ -6621,7 +6678,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
switch( s_bl->type ) { //Checks on source master
case BL_PC:
{
- struct map_session_data *sd = BL_CAST(BL_PC, s_bl);
+ const struct map_session_data *sd = BL_UCCAST(BL_PC, s_bl);
if( s_bl != t_bl ) {
if( sd->state.killer ) {
state |= BCT_ENEMY; // Can kill anything
@@ -6629,13 +6686,13 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
} else if( sd->duel_group
&& !((!battle_config.duel_allow_pvp && map->list[m].flag.pvp) || (!battle_config.duel_allow_gvg && map_flag_gvg(m)))
) {
- if( t_bl->type == BL_PC && (sd->duel_group == ((TBL_PC*)t_bl)->duel_group) )
+ if (t_bl->type == BL_PC && sd->duel_group == BL_UCCAST(BL_PC, t_bl)->duel_group)
return (BCT_ENEMY&flag)?1:-1; // Duel targets can ONLY be your enemy, nothing else.
else if (src->type != BL_SKILL || (flag&BCT_ALL) != BCT_ALL)
return 0;
}
}
- if (map_flag_gvg(m) && !sd->status.guild_id && t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->class_ == MOBID_EMPELIUM)
+ if (map_flag_gvg(m) && !sd->status.guild_id && t_bl->type == BL_MOB && BL_UCCAST(BL_MOB, t_bl)->class_ == MOBID_EMPELIUM)
return 0; //If you don't belong to a guild, can't target emperium.
if( t_bl->type != BL_PC )
state |= BCT_ENEMY; //Natural enemy.
@@ -6643,21 +6700,21 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
}
case BL_MOB:
{
- struct mob_data *md = BL_CAST(BL_MOB, s_bl);
+ const struct mob_data *md = BL_UCCAST(BL_MOB, s_bl);
if( !((map->agit_flag || map->agit2_flag) && map->list[m].flag.gvg_castle)
&& md->guardian_data && (md->guardian_data->g || md->guardian_data->castle->guild_id) )
return 0; // Disable guardians/emperium owned by Guilds on non-woe times.
if (md->special_state.ai == AI_NONE) {
//Normal mobs
- struct mob_data *target_md = BL_CAST(BL_MOB, target);
- if( (target_md && t_bl->type == BL_PC && target_md->special_state.ai != AI_ZANZOU && target_md->special_state.ai != AI_ATTACK)
- || (t_bl->type == BL_MOB && !((TBL_MOB*)t_bl)->special_state.ai) )
+ const struct mob_data *target_md = BL_CCAST(BL_MOB, target);
+ if ((target_md != NULL && t_bl->type == BL_PC && target_md->special_state.ai != AI_ZANZOU && target_md->special_state.ai != AI_ATTACK)
+ || (t_bl->type == BL_MOB && BL_UCCAST(BL_MOB, t_bl)->special_state.ai == AI_NONE))
state |= BCT_PARTY; //Normal mobs with no ai are friends.
else
state |= BCT_ENEMY; //However, all else are enemies.
} else {
- if (t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->special_state.ai == AI_NONE)
+ if (t_bl->type == BL_MOB && BL_UCCAST(BL_MOB, t_bl)->special_state.ai == AI_NONE)
state |= BCT_ENEMY; //Natural enemy for AI mobs are normal mobs.
}
break;
@@ -6720,15 +6777,16 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
if( state&BCT_ENEMY && map->list[m].flag.battleground && sbg_id && sbg_id == tbg_id )
state &= ~BCT_ENEMY;
- if( state&BCT_ENEMY && battle_config.pk_mode && !map_flag_gvg(m) && s_bl->type == BL_PC && t_bl->type == BL_PC )
- { // Prevent novice engagement on pk_mode (feature by Valaris)
- TBL_PC *sd = (TBL_PC*)s_bl, *sd2 = (TBL_PC*)t_bl;
+ if (state&BCT_ENEMY && battle_config.pk_mode && !map_flag_gvg(m) && s_bl->type == BL_PC && t_bl->type == BL_PC) {
+ // Prevent novice engagement on pk_mode (feature by Valaris)
+ const struct map_session_data *s_sd = BL_UCCAST(BL_PC, s_bl);
+ const struct map_session_data *t_sd = BL_UCCAST(BL_PC, t_bl);
if (
- (sd->class_&MAPID_UPPERMASK) == MAPID_NOVICE ||
- (sd2->class_&MAPID_UPPERMASK) == MAPID_NOVICE ||
- (int)sd->status.base_level < battle_config.pk_min_level ||
- (int)sd2->status.base_level < battle_config.pk_min_level ||
- (battle_config.pk_level_range && abs((int)sd->status.base_level - (int)sd2->status.base_level) > battle_config.pk_level_range)
+ (s_sd->class_&MAPID_UPPERMASK) == MAPID_NOVICE ||
+ (t_sd->class_&MAPID_UPPERMASK) == MAPID_NOVICE ||
+ (int)s_sd->status.base_level < battle_config.pk_min_level ||
+ (int)t_sd->status.base_level < battle_config.pk_min_level ||
+ (battle_config.pk_level_range && abs((int)s_sd->status.base_level - (int)t_sd->status.base_level) > battle_config.pk_level_range)
)
state &= ~BCT_ENEMY;
}
@@ -6925,8 +6983,8 @@ static const struct battle_data {
{ "max_walk_speed", &battle_config.max_walk_speed, 300, 100, 100*DEFAULT_WALK_SPEED, },
{ "max_lv", &battle_config.max_lv, 99, 0, MAX_LEVEL, },
{ "aura_lv", &battle_config.aura_lv, 99, 0, INT_MAX, },
- { "max_hp", &battle_config.max_hp, 32500, 100, 1000000000, },
- { "max_sp", &battle_config.max_sp, 32500, 100, 1000000000, },
+ { "max_hp", &battle_config.max_hp, 1000000, 100, 21474836, },
+ { "max_sp", &battle_config.max_sp, 1000000, 100, 21474836, },
{ "max_cart_weight", &battle_config.max_cart_weight, 8000, 100, 1000000, },
{ "max_parameter", &battle_config.max_parameter, 99, 10, 10000, },
{ "max_baby_parameter", &battle_config.max_baby_parameter, 80, 10, 10000, },
@@ -7196,6 +7254,9 @@ static const struct battle_data {
{ "costume_refine_def", &battle_config.costume_refine_def, 1, 0, 1, },
{ "shadow_refine_def", &battle_config.shadow_refine_def, 1, 0, 1, },
{ "shadow_refine_atk", &battle_config.shadow_refine_atk, 1, 0, 1, },
+ { "min_body_style", &battle_config.min_body_style, 0, 0, SHRT_MAX, },
+ { "max_body_style", &battle_config.max_body_style, 4, 0, SHRT_MAX, },
+ { "save_body_style", &battle_config.save_body_style, 0, 0, 1, },
};
#ifndef STATS_OPT_OUT
/**
diff --git a/src/map/battle.h b/src/map/battle.h
index 37d78436c..49abdc730 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -43,6 +43,8 @@ struct status_data;
#define MAX_HAIR_COLOR (battle->bc->max_hair_color)
#define MIN_CLOTH_COLOR (battle->bc->min_cloth_color)
#define MAX_CLOTH_COLOR (battle->bc->max_cloth_color)
+#define MIN_BODY_STYLE (battle->bc->min_body_style)
+#define MAX_BODY_STYLE (battle->bc->max_body_style)
#define is_boss(bl) (status_get_mode(bl)&MD_BOSS) // Can refine later [Aru]
@@ -529,9 +531,14 @@ struct Battle_Config {
int show_monster_hp_bar; // [Frost]
int fix_warp_hit_delay_abuse;
-
+
+ // Refine Def/Atk
int costume_refine_def, shadow_refine_def;
int shadow_refine_atk;
+
+ // BodyStyle
+ int min_body_style, max_body_style;
+ int save_body_style;
};
/* criteria for battle_config.idletime_critera */
diff --git a/src/map/battleground.c b/src/map/battleground.c
index b2d6f0faf..e3fedbf34 100644
--- a/src/map/battleground.c
+++ b/src/map/battleground.c
@@ -220,29 +220,46 @@ int bg_team_get_id(struct block_list *bl) {
nullpo_ret(bl);
switch( bl->type ) {
case BL_PC:
- return ((TBL_PC*)bl)->bg_id;
+ {
+ const struct map_session_data *sd = BL_UCCAST(BL_PC, bl);
+ return sd->bg_id;
+ }
case BL_PET:
- if( ((TBL_PET*)bl)->msd )
- return ((TBL_PET*)bl)->msd->bg_id;
+ {
+ const struct pet_data *pd = BL_UCCAST(BL_PET, bl);
+ if (pd->msd != NULL)
+ return pd->msd->bg_id;
+ }
break;
case BL_MOB:
{
- struct map_session_data *msd;
- struct mob_data *md = (TBL_MOB*)bl;
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
+ const struct map_session_data *msd;
if (md->special_state.ai != AI_NONE && (msd = map->id2sd(md->master_id)) != NULL)
return msd->bg_id;
return md->bg_id;
}
case BL_HOM:
- if( ((TBL_HOM*)bl)->master )
- return ((TBL_HOM*)bl)->master->bg_id;
+ {
+ const struct homun_data *hd = BL_UCCAST(BL_HOM, bl);
+ if (hd->master != NULL)
+ return hd->master->bg_id;
+ }
break;
case BL_MER:
- if( ((TBL_MER*)bl)->master )
- return ((TBL_MER*)bl)->master->bg_id;
+ {
+ const struct mercenary_data *md = BL_UCCAST(BL_MER, bl);
+ if (md->master != NULL)
+ return md->master->bg_id;
+ }
break;
case BL_SKILL:
- return ((TBL_SKILL*)bl)->group->bg_id;
+ {
+ const struct skill_unit *su = BL_UCCAST(BL_SKILL, bl);
+ if (su->group != NULL)
+ return su->group->bg_id;
+ }
+ break;
}
return 0;
@@ -655,7 +672,7 @@ int bg_afk_timer(int tid, int64 tick, int id, intptr_t data) {
int count = 0;
iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) ) {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if( !sd->bg_queue.arena || !sd->bg_id )
continue;
if( DIFF_TICK(sockt->last_tick, sd->idletime) > bg->mafksec )
diff --git a/src/map/chat.c b/src/map/chat.c
index 45d4ea0cc..d60b9bece 100644
--- a/src/map/chat.c
+++ b/src/map/chat.c
@@ -53,7 +53,7 @@ struct chat_data* chat_createchat(struct block_list* bl, const char* title, cons
nullpo_retr(NULL, ev);
/* Given the overhead and the numerous instances (npc allocated or otherwise) wouldn't it be beneficial to have it use ERS? [Ind] */
- cd = (struct chat_data *) aMalloc(sizeof(struct chat_data));
+ CREATE(cd, struct chat_data, 1);
safestrncpy(cd->title, title, sizeof(cd->title));
safestrncpy(cd->pass, pass, sizeof(cd->pass));
@@ -140,7 +140,7 @@ bool chat_joinchat(struct map_session_data* sd, int chatid, const char* pass) {
nullpo_ret(sd);
nullpo_ret(pass);
- cd = (struct chat_data*)map->id2bl(chatid);
+ cd = map->id2cd(chatid);
if( cd == NULL || cd->bl.type != BL_CHAT || cd->bl.m != sd->bl.m || sd->state.vending || sd->state.buyingstore || sd->chatID || ((cd->owner->type == BL_NPC) ? cd->users+1 : cd->users) >= cd->limit )
{
@@ -204,7 +204,7 @@ int chat_leavechat(struct map_session_data* sd, bool kicked) {
nullpo_retr(0, sd);
- cd = (struct chat_data*)map->id2bl(sd->chatID);
+ cd = map->id2cd(sd->chatID);
if( cd == NULL ) {
pc_setchatid(sd, 0);
return 0;
@@ -247,14 +247,14 @@ int chat_leavechat(struct map_session_data* sd, bool kicked) {
if( leavechar == 0 && cd->owner->type == BL_PC ) {
// Set and announce new owner
- cd->owner = (struct block_list*) cd->usersd[0];
+ cd->owner = &cd->usersd[0]->bl;
clif->changechatowner(cd, cd->usersd[0]);
clif->clearchat(cd, 0);
//Adjust Chat location after owner has been changed.
map->delblock( &cd->bl );
- cd->bl.x=cd->usersd[0]->bl.x;
- cd->bl.y=cd->usersd[0]->bl.y;
+ cd->bl.x = cd->owner->x;
+ cd->bl.y = cd->owner->y;
map->addblock( &cd->bl );
clif->dispchat(cd,0);
@@ -279,8 +279,8 @@ bool chat_changechatowner(struct map_session_data* sd, const char* nextownername
nullpo_ret(sd);
nullpo_ret(nextownername);
- cd = (struct chat_data*)map->id2bl(sd->chatID);
- if( cd == NULL || (struct block_list*) sd != cd->owner )
+ cd = map->id2cd(sd->chatID);
+ if (cd == NULL || &sd->bl != cd->owner)
return false;
ARR_FIND( 1, cd->users, i, strncmp(cd->usersd[i]->status.name, nextownername, NAME_LENGTH) == 0 );
@@ -291,7 +291,7 @@ bool chat_changechatowner(struct map_session_data* sd, const char* nextownername
clif->clearchat(cd,0);
// set new owner
- cd->owner = (struct block_list*) cd->usersd[i];
+ cd->owner = &cd->usersd[i]->bl;
clif->changechatowner(cd,cd->usersd[i]);
// swap the old and new owners' positions
@@ -324,8 +324,8 @@ bool chat_changechatstatus(struct map_session_data* sd, const char* title, const
nullpo_ret(title);
nullpo_ret(pass);
- cd = (struct chat_data*)map->id2bl(sd->chatID);
- if( cd==NULL || (struct block_list *)sd != cd->owner )
+ cd = map->id2cd(sd->chatID);
+ if (cd == NULL || &sd->bl != cd->owner)
return false;
safestrncpy(cd->title, title, CHATROOM_TITLE_SIZE);
@@ -352,9 +352,9 @@ bool chat_kickchat(struct map_session_data* sd, const char* kickusername) {
nullpo_ret(sd);
nullpo_ret(kickusername);
- cd = (struct chat_data *)map->id2bl(sd->chatID);
+ cd = map->id2cd(sd->chatID);
- if( cd==NULL || (struct block_list *)sd != cd->owner )
+ if (cd == NULL || &sd->bl != cd->owner)
return false;
ARR_FIND( 0, cd->users, i, strncmp(cd->usersd[i]->status.name, kickusername, NAME_LENGTH) == 0 );
@@ -409,8 +409,8 @@ bool chat_deletenpcchat(struct npc_data* nd) {
struct chat_data *cd;
nullpo_ret(nd);
- cd = (struct chat_data*)map->id2bl(nd->chat_id);
- if( cd == NULL )
+ cd = map->id2cd(nd->chat_id);
+ if (cd == NULL)
return false;
chat->npc_kick_all(cd);
diff --git a/src/map/chrif.c b/src/map/chrif.c
index e9227db73..1f7fbe96e 100644
--- a/src/map/chrif.c
+++ b/src/map/chrif.c
@@ -163,7 +163,8 @@ bool chrif_auth_delete(int account_id, int char_id, enum sd_state state) {
}
//Moves the sd character to the auth_db structure.
-bool chrif_sd_to_auth(TBL_PC* sd, enum sd_state state) {
+bool chrif_sd_to_auth(struct map_session_data *sd, enum sd_state state)
+{
struct auth_node *node;
nullpo_retr(false, sd);
@@ -191,7 +192,7 @@ bool chrif_sd_to_auth(TBL_PC* sd, enum sd_state state) {
return true;
}
-bool chrif_auth_logout(TBL_PC* sd, enum sd_state state)
+bool chrif_auth_logout(struct map_session_data *sd, enum sd_state state)
{
nullpo_retr(false, sd);
if(sd->fd && state == ST_LOGOUT) { //Disassociate player, and free it after saving ack returns. [Skotlex]
@@ -204,7 +205,8 @@ bool chrif_auth_logout(TBL_PC* sd, enum sd_state state)
return chrif->sd_to_auth(sd, state);
}
-bool chrif_auth_finished(TBL_PC* sd) {
+bool chrif_auth_finished(struct map_session_data *sd)
+{
struct auth_node *node;
nullpo_retr(false, sd);
@@ -593,7 +595,7 @@ void chrif_authok(int fd) {
struct mmo_charstatus* charstatus;
struct auth_node *node;
bool changing_mapservers;
- TBL_PC* sd;
+ struct map_session_data *sd = NULL;
//Check if both servers agree on the struct's size
if( RFIFOW(fd,2) - 25 != sizeof(struct mmo_charstatus) ) {
@@ -1476,8 +1478,8 @@ int send_usercount_tochar(int tid, int64 tick, int id, intptr_t data) {
*------------------------------------------*/
bool send_users_tochar(void) {
int users = 0, i = 0;
- struct map_session_data* sd;
- struct s_mapiterator* iter;
+ const struct map_session_data *sd;
+ struct s_mapiterator *iter;
chrif_check(false);
@@ -1487,7 +1489,7 @@ bool send_users_tochar(void) {
WFIFOW(chrif->fd,0) = 0x2aff;
iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) ) {
+ for (sd = BL_UCCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCCAST(BL_PC, mapit->next(iter))) {
WFIFOL(chrif->fd,6+8*i) = sd->status.account_id;
WFIFOL(chrif->fd,6+8*i+4) = sd->status.char_id;
i++;
diff --git a/src/map/chrif.h b/src/map/chrif.h
index d57d4d42c..6a5ec36b6 100644
--- a/src/map/chrif.h
+++ b/src/map/chrif.h
@@ -21,9 +21,9 @@
#ifndef MAP_CHRIF_H
#define MAP_CHRIF_H
-#include "map/map.h" //TBL_PC
#include "common/hercules.h"
#include "common/db.h"
+#include "common/mmo.h"
struct eri;
struct map_session_data;
@@ -129,9 +129,9 @@ struct chrif_interface {
bool (*flush) (void);
void (*skillid2idx) (int fd);
- bool (*sd_to_auth) (TBL_PC* sd, enum sd_state state);
+ bool (*sd_to_auth) (struct map_session_data *sd, enum sd_state state);
int (*check_connect_char_server) (int tid, int64 tick, int id, intptr_t data);
- bool (*auth_logout) (TBL_PC* sd, enum sd_state state);
+ bool (*auth_logout) (struct map_session_data *sd, enum sd_state state);
void (*save_ack) (int fd);
int (*reconnect) (DBKey key, DBData *data, va_list ap);
int (*auth_db_cleanup_sub) (DBKey key, DBData *data, va_list ap);
diff --git a/src/map/clif.c b/src/map/clif.c
index a26fece79..827f57c45 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -190,8 +190,12 @@ static inline void RFIFOPOS2(int fd, unsigned short pos, short* x0, short* y0, s
#endif // 0
//To identify disguised characters.
-static inline bool disguised(struct block_list* bl) {
- return (bool)( bl->type == BL_PC && ((TBL_PC*)bl)->disguise != -1 );
+static inline bool disguised(struct block_list* bl)
+{
+ struct map_session_data *sd = BL_CAST(BL_PC, bl);
+ if (sd == NULL || sd->disguise == -1)
+ return false;
+ return true;
}
//Guarantees that the given string does not exceeds the allowed size, as well as making sure it's null terminated. [Skotlex]
@@ -313,7 +317,8 @@ int clif_send_sub(struct block_list *bl, va_list ap) {
int len, type, fd;
nullpo_ret(bl);
- nullpo_ret(sd = (struct map_session_data *)bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
fd = sd->fd;
if (!fd || sockt->session[fd] == NULL) //Don't send to disconnected clients.
@@ -334,15 +339,14 @@ int clif_send_sub(struct block_list *bl, va_list ap) {
return 0;
break;
case AREA_WOSC: {
- if(src_bl->type == BL_PC){
- struct map_session_data *ssd = (struct map_session_data *)src_bl;
- if (ssd && sd->chatID && (sd->chatID == ssd->chatID))
- return 0;
- }
- else if(src_bl->type == BL_NPC) {
- struct npc_data *nd = (struct npc_data *)src_bl;
- if (nd && sd->chatID && (sd->chatID == nd->chat_id))
- return 0;
+ if (src_bl->type == BL_PC) {
+ const struct map_session_data *ssd = BL_UCCAST(BL_PC, src_bl);
+ if (ssd != NULL && sd->chatID != 0 && (sd->chatID == ssd->chatID))
+ return 0;
+ } else if (src_bl->type == BL_NPC) {
+ const struct npc_data *nd = BL_UCCAST(BL_NPC, src_bl);
+ if (nd != NULL && sd->chatID != 0 && (sd->chatID == nd->chat_id))
+ return 0;
}
}
break;
@@ -404,7 +408,7 @@ bool clif_send(const void* buf, int len, struct block_list* bl, enum send_target
case ALL_CLIENT: //All player clients.
iter = mapit_getallusers();
- while( (tsd = (TBL_PC*)mapit->next(iter)) != NULL ) {
+ while ((tsd = BL_UCAST(BL_PC, mapit->next(iter))) != NULL) {
WFIFOHEAD(tsd->fd, len);
memcpy(WFIFOP(tsd->fd,0), buf, len);
WFIFOSET(tsd->fd,len);
@@ -414,7 +418,7 @@ bool clif_send(const void* buf, int len, struct block_list* bl, enum send_target
case ALL_SAMEMAP: //All players on the same map
iter = mapit_getallusers();
- while ((tsd = (TBL_PC*)mapit->next(iter)) != NULL) {
+ while ((tsd = BL_UCAST(BL_PC, mapit->next(iter))) != NULL) {
if (bl && bl->m == tsd->bl.m) {
WFIFOHEAD(tsd->fd, len);
memcpy(WFIFOP(tsd->fd,0), buf, len);
@@ -445,12 +449,12 @@ bool clif_send(const void* buf, int len, struct block_list* bl, enum send_target
case CHAT_WOS:
nullpo_retr(true, bl);
{
- struct chat_data *cd;
- if (sd) {
- cd = (struct chat_data*)map->id2bl(sd->chatID);
- } else if (bl->type == BL_CHAT) {
- cd = (struct chat_data*)bl;
- } else break;
+ const struct chat_data *cd = NULL;
+ if (sd != NULL) {
+ cd = map->id2cd(sd->chatID);
+ } else {
+ cd = BL_CCAST(BL_CHAT, bl);
+ }
if (cd == NULL)
break;
for(i = 0; i < cd->users; i++) {
@@ -505,7 +509,7 @@ bool clif_send(const void* buf, int len, struct block_list* bl, enum send_target
break;
iter = mapit_getallusers();
- while( (tsd = (TBL_PC*)mapit->next(iter)) != NULL ) {
+ while ((tsd = BL_UCAST(BL_PC, mapit->next(iter))) != NULL) {
if( tsd->partyspy == p->party.party_id ) {
WFIFOHEAD(tsd->fd, len);
memcpy(WFIFOP(tsd->fd,0), buf, len);
@@ -521,7 +525,7 @@ bool clif_send(const void* buf, int len, struct block_list* bl, enum send_target
if (!sd || !sd->duel_group) break; //Invalid usage.
iter = mapit_getallusers();
- while( (tsd = (TBL_PC*)mapit->next(iter)) != NULL ) {
+ while ((tsd = BL_UCAST(BL_PC, mapit->next(iter))) != NULL) {
if( type == DUEL_WOS && bl->id == tsd->bl.id )
continue;
if( sd->duel_group == tsd->duel_group ) {
@@ -584,7 +588,7 @@ bool clif_send(const void* buf, int len, struct block_list* bl, enum send_target
break;
iter = mapit_getallusers();
- while( (tsd = (TBL_PC*)mapit->next(iter)) != NULL ) {
+ while ((tsd = BL_UCAST(BL_PC, mapit->next(iter))) != NULL) {
if( tsd->guildspy == g->guild_id ) {
WFIFOHEAD(tsd->fd, len);
memcpy(WFIFOP(tsd->fd,0), buf, len);
@@ -946,7 +950,7 @@ void clif_set_unit_idle2(struct block_list* bl, struct map_session_data *tsd, en
p.speed = status->get_speed(bl);
p.bodyState = (sc) ? sc->opt1 : 0;
p.healthState = (sc) ? sc->opt2 : 0;
- p.effectState = (sc) ? sc->option : bl->type == BL_NPC ? ((TBL_NPC*)bl)->option : 0;
+ p.effectState = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0);
p.job = vd->class_;
p.head = vd->hair_style;
p.weapon = vd->weapon;
@@ -1013,7 +1017,7 @@ void clif_set_unit_idle(struct block_list* bl, struct map_session_data *tsd, enu
p.speed = status->get_speed(bl);
p.bodyState = (sc) ? sc->opt1 : 0;
p.healthState = (sc) ? sc->opt2 : 0;
- p.effectState = (sc) ? sc->option : bl->type == BL_NPC ? ((TBL_NPC*)bl)->option : 0;
+ p.effectState = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0);
p.job = vd->class_;
p.head = vd->hair_style;
p.weapon = vd->weapon;
@@ -1049,9 +1053,10 @@ void clif_set_unit_idle(struct block_list* bl, struct map_session_data *tsd, enu
#endif
#if PACKETVER >= 20120221
if (battle_config.show_monster_hp_bar && bl->type == BL_MOB && status_get_hp(bl) < status_get_max_hp(bl)) {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
p.maxHP = status_get_max_hp(bl);
p.HP = status_get_hp(bl);
- p.isBoss = ( ((TBL_MOB*)bl)->spawn && ((TBL_MOB*)bl)->spawn->state.boss ) ? 1 : 0;
+ p.isBoss = (md->spawn != NULL && md->spawn->state.boss) ? 1 : 0;
} else {
p.maxHP = -1;
p.HP = -1;
@@ -1059,7 +1064,7 @@ void clif_set_unit_idle(struct block_list* bl, struct map_session_data *tsd, enu
}
#endif
#if PACKETVER >= 20150513
- p.body = 0;
+ p.body = vd->body_style;
#endif
clif->send(&p,sizeof(p),tsd?&tsd->bl:bl,target);
@@ -1095,7 +1100,7 @@ void clif_spawn_unit2(struct block_list* bl, enum send_target target) {
p.speed = status->get_speed(bl);
p.bodyState = (sc) ? sc->opt1 : 0;
p.healthState = (sc) ? sc->opt2 : 0;
- p.effectState = (sc) ? sc->option : bl->type == BL_NPC ? ((TBL_NPC*)bl)->option : 0;
+ p.effectState = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0);
p.head = vd->hair_style;
p.weapon = vd->weapon;
p.accessory = vd->head_bottom;
@@ -1153,7 +1158,7 @@ void clif_spawn_unit(struct block_list* bl, enum send_target target) {
p.speed = status->get_speed(bl);
p.bodyState = (sc) ? sc->opt1 : 0;
p.healthState = (sc) ? sc->opt2 : 0;
- p.effectState = (sc) ? sc->option : bl->type == BL_NPC ? ((TBL_NPC*)bl)->option : 0;
+ p.effectState = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0);
p.job = vd->class_;
p.head = vd->hair_style;
p.weapon = vd->weapon;
@@ -1188,9 +1193,10 @@ void clif_spawn_unit(struct block_list* bl, enum send_target target) {
#endif
#if PACKETVER >= 20120221
if (battle_config.show_monster_hp_bar && bl->type == BL_MOB && status_get_hp(bl) < status_get_max_hp(bl)) {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
p.maxHP = status_get_max_hp(bl);
p.HP = status_get_hp(bl);
- p.isBoss = ( ((TBL_MOB*)bl)->spawn && ((TBL_MOB*)bl)->spawn->state.boss ) ? 1 : 0;
+ p.isBoss = (md->spawn != NULL && md->spawn->state.boss) ? 1 : 0;
} else {
p.maxHP = -1;
p.HP = -1;
@@ -1198,7 +1204,7 @@ void clif_spawn_unit(struct block_list* bl, enum send_target target) {
}
#endif
#if PACKETVER >= 20150513
- p.body = 0;
+ p.body = vd->body_style;
#endif
if( disguised(bl) ) {
nullpo_retv(sd);
@@ -1247,7 +1253,7 @@ void clif_set_unit_walking(struct block_list* bl, struct map_session_data *tsd,
p.speed = status->get_speed(bl);
p.bodyState = (sc) ? sc->opt1 : 0;
p.healthState = (sc) ? sc->opt2 : 0;
- p.effectState = (sc) ? sc->option : bl->type == BL_NPC ? ((TBL_NPC*)bl)->option : 0;
+ p.effectState = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0);
p.job = vd->class_;
p.head = vd->hair_style;
p.weapon = vd->weapon;
@@ -1278,9 +1284,10 @@ void clif_set_unit_walking(struct block_list* bl, struct map_session_data *tsd,
#endif
#if PACKETVER >= 20120221
if (battle_config.show_monster_hp_bar && bl->type == BL_MOB && status_get_hp(bl) < status_get_max_hp(bl)) {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
p.maxHP = status_get_max_hp(bl);
p.HP = status_get_hp(bl);
- p.isBoss = ( ((TBL_MOB*)bl)->spawn && ((TBL_MOB*)bl)->spawn->state.boss ) ? 1 : 0;
+ p.isBoss = (md->spawn != NULL && md->spawn->state.boss) ? 1 : 0;
} else {
p.maxHP = -1;
p.HP = -1;
@@ -1288,7 +1295,7 @@ void clif_set_unit_walking(struct block_list* bl, struct map_session_data *tsd,
}
#endif
#if PACKETVER >= 20150513
- p.body = 0;
+ p.body = vd->body_style;
#endif
clif->send(&p,sizeof(p),tsd?&tsd->bl:bl,target);
@@ -1387,8 +1394,7 @@ void clif_weather(int16 m)
struct map_session_data *sd=NULL;
iter = mapit_getallusers();
- for( sd = (struct map_session_data*)mapit->first(iter); mapit->exists(iter); sd = (struct map_session_data*)mapit->next(iter) )
- {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if( sd->bl.m == m )
clif->weather_check(sd);
}
@@ -1406,61 +1412,65 @@ bool clif_spawn(struct block_list *bl)
if( !vd )
return false;
- if( ( bl->type == BL_NPC
- && !((TBL_NPC*)bl)->chat_id
- && (((TBL_NPC*)bl)->option&OPTION_INVISIBLE) ) // Hide NPC from maya purple card.
- || ( vd->class_ == INVISIBLE_CLASS )
- )
+ if (vd->class_ == INVISIBLE_CLASS)
return true; // Doesn't need to be spawned, so everything is alright
+ if (bl->type == BL_NPC) {
+ struct npc_data *nd = BL_UCAST(BL_NPC, bl);
+ if (nd->chat_id == 0 && (nd->option&OPTION_INVISIBLE)) // Hide NPC from maya purple card.
+ return true; // Doesn't need to be spawned, so everything is alright
+ }
+
clif->spawn_unit(bl,AREA_WOS);
if (vd->cloth_color)
clif->refreshlook(bl,bl->id,LOOK_CLOTHES_COLOR,vd->cloth_color,AREA_WOS);
+ if (vd->body_style)
+ clif->refreshlook(bl,bl->id,LOOK_BODY2,vd->body_style,AREA_WOS);
switch (bl->type) {
case BL_PC:
- {
- TBL_PC *sd = ((TBL_PC*)bl);
- int i;
- if (sd->spiritball > 0)
- clif->spiritball(&sd->bl);
- if(sd->state.size==SZ_BIG) // tiny/big players [Valaris]
- clif->specialeffect(bl,423,AREA);
- else if(sd->state.size==SZ_MEDIUM)
- clif->specialeffect(bl,421,AREA);
- if( sd->bg_id && map->list[sd->bl.m].flag.battleground )
- clif->sendbgemblem_area(sd);
- for( i = 0; i < sd->sc_display_count; i++ ) {
- clif->sc_load(&sd->bl, sd->bl.id,AREA,status->dbs->IconChangeTable[sd->sc_display[i]->type],sd->sc_display[i]->val1,sd->sc_display[i]->val2,sd->sc_display[i]->val3);
- }
- if (sd->charm_type != CHARM_TYPE_NONE && sd->charm_count > 0)
- clif->spiritcharm(sd);
- if (sd->status.robe)
- clif->refreshlook(bl,bl->id,LOOK_ROBE,sd->status.robe,AREA);
+ {
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
+ int i;
+ if (sd->spiritball > 0)
+ clif->spiritball(&sd->bl);
+ if (sd->state.size == SZ_BIG) // tiny/big players [Valaris]
+ clif->specialeffect(bl,423,AREA);
+ else if (sd->state.size == SZ_MEDIUM)
+ clif->specialeffect(bl,421,AREA);
+ if (sd->bg_id != 0 && map->list[sd->bl.m].flag.battleground)
+ clif->sendbgemblem_area(sd);
+ for (i = 0; i < sd->sc_display_count; i++) {
+ clif->sc_load(&sd->bl, sd->bl.id,AREA,status->dbs->IconChangeTable[sd->sc_display[i]->type],sd->sc_display[i]->val1,sd->sc_display[i]->val2,sd->sc_display[i]->val3);
}
+ if (sd->charm_type != CHARM_TYPE_NONE && sd->charm_count > 0)
+ clif->spiritcharm(sd);
+ if (sd->status.robe)
+ clif->refreshlook(bl,bl->id,LOOK_ROBE,sd->status.robe,AREA);
+ }
break;
case BL_MOB:
- {
- TBL_MOB *md = ((TBL_MOB*)bl);
- if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris]
- clif->specialeffect(&md->bl,423,AREA);
- else if(md->special_state.size==SZ_MEDIUM)
- clif->specialeffect(&md->bl,421,AREA);
- }
+ {
+ struct mob_data *md = BL_UCAST(BL_MOB, bl);
+ if (md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris]
+ clif->specialeffect(&md->bl,423,AREA);
+ else if (md->special_state.size==SZ_MEDIUM)
+ clif->specialeffect(&md->bl,421,AREA);
+ }
break;
case BL_NPC:
- {
- TBL_NPC *nd = ((TBL_NPC*)bl);
- if( nd->size == SZ_BIG )
- clif->specialeffect(&nd->bl,423,AREA);
- else if( nd->size == SZ_MEDIUM )
- clif->specialeffect(&nd->bl,421,AREA);
- }
+ {
+ struct npc_data *nd = BL_UCAST(BL_NPC, bl);
+ if (nd->size == SZ_BIG)
+ clif->specialeffect(&nd->bl,423,AREA);
+ else if (nd->size == SZ_MEDIUM)
+ clif->specialeffect(&nd->bl,421,AREA);
+ }
break;
case BL_PET:
if (vd->head_bottom)
- clif->send_petdata(NULL, (TBL_PET*)bl, 3, vd->head_bottom); // needed to display pet equip properly
+ clif->send_petdata(NULL, BL_UCAST(BL_PET, bl), 3, vd->head_bottom); // needed to display pet equip properly
break;
}
return true;
@@ -1681,30 +1691,32 @@ void clif_move2(struct block_list *bl, struct view_data *vd, struct unit_data *u
if(vd->cloth_color)
clif->refreshlook(bl,bl->id,LOOK_CLOTHES_COLOR,vd->cloth_color,AREA_WOS);
+ if (vd->body_style)
+ clif->refreshlook(bl,bl->id,LOOK_BODY2,vd->body_style,AREA_WOS);
switch(bl->type) {
case BL_PC:
- {
- TBL_PC *sd = ((TBL_PC*)bl);
- //clif_movepc(sd);
- if(sd->state.size==SZ_BIG) // tiny/big players [Valaris]
- clif->specialeffect(&sd->bl,423,AREA);
- else if(sd->state.size==SZ_MEDIUM)
- clif->specialeffect(&sd->bl,421,AREA);
- }
+ {
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
+ //clif_movepc(sd);
+ if(sd->state.size==SZ_BIG) // tiny/big players [Valaris]
+ clif->specialeffect(&sd->bl,423,AREA);
+ else if(sd->state.size==SZ_MEDIUM)
+ clif->specialeffect(&sd->bl,421,AREA);
+ }
break;
case BL_MOB:
- {
- TBL_MOB *md = ((TBL_MOB*)bl);
- if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris]
- clif->specialeffect(&md->bl,423,AREA);
- else if(md->special_state.size==SZ_MEDIUM)
- clif->specialeffect(&md->bl,421,AREA);
- }
+ {
+ struct mob_data *md = BL_UCAST(BL_MOB, bl);
+ if (md->special_state.size == SZ_BIG) // tiny/big mobs [Valaris]
+ clif->specialeffect(&md->bl,423,AREA);
+ else if (md->special_state.size == SZ_MEDIUM)
+ clif->specialeffect(&md->bl,421,AREA);
+ }
break;
case BL_PET:
if( vd->head_bottom ) // needed to display pet equip properly
- clif->send_petdata(NULL, (TBL_PET*)bl, 3, vd->head_bottom);
+ clif->send_petdata(NULL, BL_UCAST(BL_PET, bl), 3, vd->head_bottom);
break;
}
#ifdef ANTI_MAYAP_CHEAT
@@ -1731,11 +1743,12 @@ void clif_move(struct unit_data *ud)
if (!vd || vd->class_ == INVISIBLE_CLASS)
return; //This performance check is needed to keep GM-hidden objects from being notified to bots.
- /**
- * Hide NPC from maya purple card.
- **/
- if(bl->type == BL_NPC && !((TBL_NPC*)bl)->chat_id && (((TBL_NPC*)bl)->option&OPTION_INVISIBLE))
- return;
+ if (bl->type == BL_NPC) {
+ // Hide NPC from maya purple card.
+ struct npc_data *nd = BL_UCAST(BL_NPC, bl);
+ if (nd->chat_id == 0 && (nd->option&OPTION_INVISIBLE))
+ return;
+ }
if (ud->state.speed_changed) {
// Since we don't know how to update the speed of other objects,
@@ -2761,16 +2774,15 @@ void clif_guild_xy_remove(struct map_session_data *sd)
/*==========================================
*
*------------------------------------------*/
-int clif_hpmeter_sub(struct block_list *bl, va_list ap) {
- struct map_session_data *sd, *tsd;
+int clif_hpmeter_sub(struct block_list *bl, va_list ap)
+{
#if PACKETVER < 20100126
const int cmd = 0x106;
#else
const int cmd = 0x80e;
#endif
-
- sd = va_arg(ap, struct map_session_data *);
- tsd = (TBL_PC *)bl;
+ struct map_session_data *sd = va_arg(ap, struct map_session_data *);
+ struct map_session_data *tsd = BL_CAST(BL_PC, bl);
nullpo_ret(sd);
nullpo_ret(tsd);
@@ -3120,6 +3132,11 @@ void clif_changelook(struct block_list *bl,int type,int val)
vd->cloth_color = 0;
if (sd->sc.option&OPTION_OKTOBERFEST /* TODO: config? */)
vd->cloth_color = 0;
+ if (vd->body_style && (
+ sd->sc.option&OPTION_WEDDING || sd->sc.option&OPTION_XMAS ||
+ sd->sc.option&OPTION_SUMMER || sd->sc.option&OPTION_HANBOK ||
+ sd->sc.option&OPTION_OKTOBERFEST))
+ vd->body_style = 0;
break;
case LOOK_HAIR:
vd->hair_style = val;
@@ -3177,6 +3194,14 @@ void clif_changelook(struct block_list *bl,int type,int val)
vd->robe = val;
#endif
break;
+ case LOOK_BODY2:
+ if (val && (
+ sd->sc.option&OPTION_WEDDING || sd->sc.option&OPTION_XMAS ||
+ sd->sc.option&OPTION_SUMMER || sd->sc.option&OPTION_HANBOK ||
+ sd->sc.option&OPTION_OKTOBERFEST))
+ val = 0;
+ vd->body_style = val;
+ break;
}
// prevent leaking the presence of GM-hidden objects
@@ -3474,7 +3499,7 @@ void clif_changeoption(struct block_list* bl)
WBUFL(buf,2) = bl->id;
WBUFW(buf,6) = (sc) ? sc->opt1 : 0;
WBUFW(buf,8) = (sc) ? sc->opt2 : 0;
- WBUFL(buf,10) = (sc) ? sc->option : bl->type == BL_NPC ? ((TBL_NPC*)bl)->option : 0;
+ WBUFL(buf,10) = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0);
WBUFB(buf,14) = (sd)? sd->status.karma : 0;
if(disguised(bl)) {
clif->send(buf,packet_len(0x229),bl,AREA_WOS);
@@ -3490,7 +3515,7 @@ void clif_changeoption(struct block_list* bl)
WBUFL(buf,2) = bl->id;
WBUFW(buf,6) = (sc) ? sc->opt1 : 0;
WBUFW(buf,8) = (sc) ? sc->opt2 : 0;
- WBUFL(buf,10) = (sc) ? sc->option : bl->type == BL_NPC ? ((TBL_NPC*)bl)->option : 0;
+ WBUFL(buf,10) = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0);
WBUFB(buf,12) = (sd)? sd->status.karma : 0;
if(disguised(bl)) {
clif->send(buf,packet_len(0x119),bl,AREA_WOS);
@@ -3515,7 +3540,7 @@ void clif_changeoption2(struct block_list* bl) {
WBUFW(buf,0) = 0x28a;
WBUFL(buf,2) = bl->id;
- WBUFL(buf,6) = (sc) ? sc->option : bl->type == BL_NPC ? ((TBL_NPC*)bl)->option : 0;
+ WBUFL(buf,6) = (sc != NULL) ? sc->option : ((bl->type == BL_NPC) ? BL_UCCAST(BL_NPC, bl)->option : 0);
WBUFL(buf,10) = clif_setlevel(bl);
WBUFL(buf,14) = (sc) ? sc->opt3 : 0;
if(disguised(bl)) {
@@ -3725,10 +3750,11 @@ void clif_joinchatok(struct map_session_data *sd,struct chat_data* cd)
WFIFOW(fd, 2) = 8 + (28*(cd->users+t));
WFIFOL(fd, 4) = cd->bl.id;
- if(cd->owner->type == BL_NPC){
+ if(cd->owner->type == BL_NPC) {
+ const struct npc_data *nd = BL_UCCAST(BL_NPC, cd->owner);
WFIFOL(fd, 30) = 1;
WFIFOL(fd, 8) = 0;
- memcpy(WFIFOP(fd, 12), ((struct npc_data *)cd->owner)->name, NAME_LENGTH);
+ memcpy(WFIFOP(fd, 12), nd->name, NAME_LENGTH);
for (i = 0; i < cd->users; i++) {
WFIFOL(fd, 8+(i+1)*28) = 1;
memcpy(WFIFOP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH);
@@ -4103,8 +4129,8 @@ void clif_getareachar_pc(struct map_session_data* sd,struct map_session_data* ds
nullpo_retv(sd);
nullpo_retv(dstsd);
if( dstsd->chatID ) {
- struct chat_data *cd = NULL;
- if( (cd = (struct chat_data*)map->id2bl(dstsd->chatID)) && cd->usersd[0]==dstsd)
+ struct chat_data *cd = map->id2cd(dstsd->chatID);
+ if (cd != NULL && cd->usersd[0] == dstsd)
clif->dispchat(cd,sd->fd);
} else if( dstsd->state.vending )
clif->showvendingboard(&dstsd->bl,dstsd->message,sd->fd);
@@ -4147,11 +4173,12 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl) {
if (!vd || vd->class_ == INVISIBLE_CLASS)
return;
- /**
- * Hide NPC from maya purple card.
- **/
- if(bl->type == BL_NPC && !((TBL_NPC*)bl)->chat_id && (((TBL_NPC*)bl)->option&OPTION_INVISIBLE))
- return;
+ if (bl->type == BL_NPC) {
+ // Hide NPC from maya purple card.
+ struct npc_data *nd = BL_UCAST(BL_NPC, bl);
+ if (nd->chat_id == 0 && (nd->option&OPTION_INVISIBLE))
+ return;
+ }
if ( ( ud = unit->bl2ud(bl) ) && ud->walktimer != INVALID_TIMER )
clif->set_unit_walking(bl,sd,ud,SELF);
@@ -4160,59 +4187,65 @@ void clif_getareachar_unit(struct map_session_data* sd,struct block_list *bl) {
if (vd->cloth_color)
clif->refreshlook(&sd->bl,bl->id,LOOK_CLOTHES_COLOR,vd->cloth_color,SELF);
+ if (vd->body_style)
+ clif->refreshlook(&sd->bl,bl->id,LOOK_BODY2,vd->body_style,SELF);
+
switch (bl->type) {
case BL_PC:
- {
- TBL_PC* tsd = (TBL_PC*)bl;
- clif->getareachar_pc(sd, tsd);
- if(tsd->state.size==SZ_BIG) // tiny/big players [Valaris]
- clif->specialeffect_single(bl,423,sd->fd);
- else if(tsd->state.size==SZ_MEDIUM)
- clif->specialeffect_single(bl,421,sd->fd);
- if( tsd->bg_id && map->list[tsd->bl.m].flag.battleground )
- clif->sendbgemblem_single(sd->fd,tsd);
- if ( tsd->status.robe )
- clif->refreshlook(&sd->bl,bl->id,LOOK_ROBE,tsd->status.robe,SELF);
- }
+ {
+ struct map_session_data *tsd = BL_UCAST(BL_PC, bl);
+ clif->getareachar_pc(sd, tsd);
+ if (tsd->state.size == SZ_BIG) // tiny/big players [Valaris]
+ clif->specialeffect_single(bl,423,sd->fd);
+ else if (tsd->state.size == SZ_MEDIUM)
+ clif->specialeffect_single(bl,421,sd->fd);
+ if (tsd->bg_id != 0 && map->list[tsd->bl.m].flag.battleground)
+ clif->sendbgemblem_single(sd->fd,tsd);
+ if (tsd->status.robe)
+ clif->refreshlook(&sd->bl,bl->id,LOOK_ROBE,tsd->status.robe,SELF);
+ }
break;
case BL_MER: // Devotion Effects
- if( ((TBL_MER*)bl)->devotion_flag )
+ {
+ struct mercenary_data *md = BL_UCAST(BL_MER, bl);
+ if (md->devotion_flag)
clif->devotion(bl, sd);
+ }
break;
case BL_NPC:
- {
- TBL_NPC* nd = (TBL_NPC*)bl;
- if( nd->chat_id )
- clif->dispchat((struct chat_data*)map->id2bl(nd->chat_id),sd->fd);
- if( nd->size == SZ_BIG )
- clif->specialeffect_single(bl,423,sd->fd);
- else if( nd->size == SZ_MEDIUM )
- clif->specialeffect_single(bl,421,sd->fd);
- }
+ {
+ struct npc_data *nd = BL_UCAST(BL_NPC, bl);
+ if (nd->chat_id != 0)
+ clif->dispchat(map->id2cd(nd->chat_id), sd->fd);
+ if (nd->size == SZ_BIG)
+ clif->specialeffect_single(bl,423,sd->fd);
+ else if (nd->size == SZ_MEDIUM)
+ clif->specialeffect_single(bl,421,sd->fd);
+ }
break;
case BL_MOB:
- {
- TBL_MOB* md = (TBL_MOB*)bl;
- if(md->special_state.size==SZ_BIG) // tiny/big mobs [Valaris]
- clif->specialeffect_single(bl,423,sd->fd);
- else if(md->special_state.size==SZ_MEDIUM)
- clif->specialeffect_single(bl,421,sd->fd);
+ {
+ struct mob_data *md = BL_UCAST(BL_MOB, bl);
+ if (md->special_state.size == SZ_BIG) // tiny/big mobs [Valaris]
+ clif->specialeffect_single(bl,423,sd->fd);
+ else if (md->special_state.size == SZ_MEDIUM)
+ clif->specialeffect_single(bl,421,sd->fd);
#if (PACKETVER >= 20120404 && PACKETVER < 20131223)
- if (battle_config.show_monster_hp_bar && !(md->status.mode&MD_BOSS)) {
- int i;
- for(i = 0; i < DAMAGELOG_SIZE; i++) {// must show hp bar to all char who already hit the mob.
- if (md->dmglog[i].id == sd->status.char_id) {
- clif->monster_hp_bar(md, sd);
- break;
- }
+ if (battle_config.show_monster_hp_bar && !(md->status.mode&MD_BOSS)) {
+ int i;
+ for (i = 0; i < DAMAGELOG_SIZE; i++) {// must show hp bar to all char who already hit the mob.
+ if (md->dmglog[i].id == sd->status.char_id) {
+ clif->monster_hp_bar(md, sd);
+ break;
}
}
-#endif
}
+#endif
+ }
break;
case BL_PET:
if (vd->head_bottom)
- clif->send_petdata(NULL, (TBL_PET*)bl, 3, vd->head_bottom); // needed to display pet equip properly
+ clif->send_petdata(NULL, BL_UCAST(BL_PET, bl), 3, vd->head_bottom); // needed to display pet equip properly
break;
}
}
@@ -4502,8 +4535,10 @@ void clif_getareachar_skillunit(struct block_list *bl, struct skill_unit *su, en
clif->send(&p,sizeof(p),bl,target);
- if(su->group->skill_id == WZ_ICEWALL)
- clif->changemapcell(bl->type == BL_PC ? ((TBL_PC*)bl)->fd : 0,su->bl.m,su->bl.x,su->bl.y,5,SELF);
+ if (su->group->skill_id == WZ_ICEWALL) {
+ struct map_session_data *sd = BL_CAST(BL_PC, bl);
+ clif->changemapcell(sd != NULL ? sd->fd : 0, su->bl.m, su->bl.x, su->bl.y, 5, SELF);
+ }
}
/*==========================================
@@ -4562,10 +4597,10 @@ int clif_getareachar(struct block_list* bl,va_list ap) {
switch(bl->type){
case BL_ITEM:
- clif->getareachar_item(sd,(struct flooritem_data*) bl);
+ clif->getareachar_item(sd, BL_UCAST(BL_ITEM, bl));
break;
case BL_SKILL:
- clif->getareachar_skillunit(&sd->bl,(TBL_SKILL*)bl,SELF);
+ clif->getareachar_skillunit(&sd->bl, BL_UCAST(BL_SKILL, bl), SELF);
break;
default:
if(&sd->bl == bl)
@@ -4583,7 +4618,7 @@ int clif_outsight(struct block_list *bl,va_list ap)
{
struct block_list *tbl;
struct view_data *vd;
- TBL_PC *sd, *tsd;
+ struct map_session_data *sd, *tsd;
tbl=va_arg(ap,struct block_list*);
if(bl == tbl) return 0;
// bl can be null pointer? and after if BL_PC, sd will be null pointer too
@@ -4596,9 +4631,8 @@ int clif_outsight(struct block_list *bl,va_list ap)
case BL_PC:
if (sd->vd.class_ != INVISIBLE_CLASS)
clif->clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd);
- if(sd->chatID){
- struct chat_data *cd;
- cd=(struct chat_data*)map->id2bl(sd->chatID);
+ if (sd->chatID) {
+ struct chat_data *cd = map->id2cd(sd->chatID);
if(cd->usersd[0]==sd)
clif->dispchat(cd,tsd->fd);
}
@@ -4608,13 +4642,13 @@ int clif_outsight(struct block_list *bl,va_list ap)
clif->buyingstore_disappear_entry_single(tsd, sd);
break;
case BL_ITEM:
- clif->clearflooritem((struct flooritem_data*)bl,tsd->fd);
+ clif->clearflooritem(BL_UCAST(BL_ITEM, bl), tsd->fd);
break;
case BL_SKILL:
- clif->clearchar_skillunit((struct skill_unit *)bl,tsd->fd);
+ clif->clearchar_skillunit(BL_UCAST(BL_SKILL, bl), tsd->fd);
break;
case BL_NPC:
- if( !(((TBL_NPC*)bl)->option&OPTION_INVISIBLE) )
+ if (!(BL_UCAST(BL_NPC, bl)->option&OPTION_INVISIBLE))
clif->clearunit_single(bl->id,CLR_OUTSIGHT,tsd->fd);
break;
default:
@@ -4625,10 +4659,10 @@ int clif_outsight(struct block_list *bl,va_list ap)
}
if (sd && sd->fd) { //sd is watching tbl go out of view.
nullpo_ret(tbl);
- if(tbl->type == BL_SKILL) //Trap knocked out of sight
- clif->clearchar_skillunit((struct skill_unit *)tbl,sd->fd);
- else if (((vd=status->get_viewdata(tbl)) && vd->class_ != INVISIBLE_CLASS) &&
- !(tbl->type == BL_NPC && (((TBL_NPC*)tbl)->option&OPTION_INVISIBLE)))
+ if (tbl->type == BL_SKILL) //Trap knocked out of sight
+ clif->clearchar_skillunit(BL_UCAST(BL_SKILL, tbl), sd->fd);
+ else if ((vd = status->get_viewdata(tbl)) && vd->class_ != INVISIBLE_CLASS
+ && !(tbl->type == BL_NPC && (BL_UCAST(BL_NPC, tbl)->option&OPTION_INVISIBLE)))
clif->clearunit_single(tbl->id,CLR_OUTSIGHT,sd->fd);
}
return 0;
@@ -4640,7 +4674,7 @@ int clif_outsight(struct block_list *bl,va_list ap)
int clif_insight(struct block_list *bl,va_list ap)
{
struct block_list *tbl;
- TBL_PC *sd, *tsd;
+ struct map_session_data *sd, *tsd;
tbl=va_arg(ap,struct block_list*);
if (bl == tbl) return 0;
@@ -4652,10 +4686,10 @@ int clif_insight(struct block_list *bl,va_list ap)
nullpo_ret(bl);
switch(bl->type) {
case BL_ITEM:
- clif->getareachar_item(tsd,(struct flooritem_data*)bl);
+ clif->getareachar_item(tsd, BL_UCAST(BL_ITEM, bl));
break;
case BL_SKILL:
- clif->getareachar_skillunit(&tsd->bl,(TBL_SKILL*)bl,SELF);
+ clif->getareachar_skillunit(&tsd->bl, BL_UCAST(BL_SKILL, bl), SELF);
break;
default:
clif->getareachar_unit(tsd,bl);
@@ -5649,11 +5683,13 @@ void clif_resurrection(struct block_list *bl,int type)
clif->send(buf,packet_len(0x148),bl, type == 1 ? AREA : AREA_WOS);
if (disguised(bl)) {
- if( ((TBL_PC*)bl)->fontcolor ) {
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
+ if (sd->fontcolor) {
WBUFL(buf,2)=-bl->id;
clif->send(buf,packet_len(0x148),bl, SELF);
- } else
+ } else {
clif->spawn(bl);
+ }
}
}
@@ -6993,8 +7029,8 @@ void clif_devotion(struct block_list *src, struct map_session_data *tsd)
*------------------------------------------*/
void clif_spiritball(struct block_list *bl) {
unsigned char buf[16];
- TBL_PC *sd = BL_CAST(BL_PC,bl);
- TBL_HOM *hd = BL_CAST(BL_HOM,bl);
+ struct map_session_data *sd = BL_CAST(BL_PC,bl);
+ struct homun_data *hd = BL_CAST(BL_HOM,bl);
nullpo_retv(bl);
@@ -8281,6 +8317,8 @@ void clif_refresh(struct map_session_data *sd)
if (sd->vd.cloth_color)
clif->refreshlook(&sd->bl,sd->bl.id,LOOK_CLOTHES_COLOR,sd->vd.cloth_color,SELF);
+ if (sd->vd.body_style)
+ clif->refreshlook(&sd->bl,sd->bl.id,LOOK_BODY2,sd->vd.body_style,SELF);
if(homun_alive(sd->hd))
clif->send_homdata(sd,SP_ACK,0);
if( sd->md ) {
@@ -8331,114 +8369,110 @@ void clif_charnameack (int fd, struct block_list *bl)
switch( bl->type ) {
case BL_PC:
- {
- struct map_session_data *ssd = (struct map_session_data *)bl;
- struct party_data *p = NULL;
- struct guild *g = NULL;
- int ps = -1;
-
- //Requesting your own "shadow" name. [Skotlex]
- if (ssd->fd == fd && ssd->disguise != -1)
- WBUFL(buf,2) = -bl->id;
-
- if( ssd->fakename[0] ) {
- WBUFW(buf, 0) = cmd = 0x195;
- memcpy(WBUFP(buf,6), ssd->fakename, NAME_LENGTH);
- WBUFB(buf,30) = WBUFB(buf,54) = WBUFB(buf,78) = 0;
- break;
- }
- memcpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH);
+ {
+ const struct map_session_data *ssd = BL_UCCAST(BL_PC, bl);
+ const struct party_data *p = NULL;
+ const struct guild *g = NULL;
+ int ps = -1;
- if( ssd->status.party_id ) {
- p = party->search(ssd->status.party_id);
- }
- if( ssd->status.guild_id ) {
- if ((g = ssd->guild ) != NULL) {
- int i;
- ARR_FIND(0, g->max_member, i, g->member[i].account_id == ssd->status.account_id && g->member[i].char_id == ssd->status.char_id);
- if( i < g->max_member ) ps = g->member[i].position;
- }
- }
+ //Requesting your own "shadow" name. [Skotlex]
+ if (ssd->fd == fd && ssd->disguise != -1)
+ WBUFL(buf,2) = -bl->id;
+
+ if (ssd->fakename[0] != '\0') {
+ WBUFW(buf, 0) = cmd = 0x195;
+ memcpy(WBUFP(buf,6), ssd->fakename, NAME_LENGTH);
+ WBUFB(buf,30) = WBUFB(buf,54) = WBUFB(buf,78) = 0;
+ break;
+ }
+ memcpy(WBUFP(buf,6), ssd->status.name, NAME_LENGTH);
- if( !battle_config.display_party_name && g == NULL ) {// do not display party unless the player is also in a guild
- p = NULL;
+ if (ssd->status.party_id != 0) {
+ p = party->search(ssd->status.party_id);
+ }
+ if (ssd->status.guild_id != 0) {
+ if ((g = ssd->guild) != NULL) {
+ int i;
+ ARR_FIND(0, g->max_member, i, g->member[i].account_id == ssd->status.account_id && g->member[i].char_id == ssd->status.char_id);
+ if (i < g->max_member)
+ ps = g->member[i].position;
}
+ }
- if (p == NULL && g == NULL)
- break;
+ if (!battle_config.display_party_name && g == NULL) {
+ // do not display party unless the player is also in a guild
+ p = NULL;
+ }
- WBUFW(buf, 0) = cmd = 0x195;
- if (p)
- memcpy(WBUFP(buf,30), p->party.name, NAME_LENGTH);
- else
- WBUFB(buf,30) = 0;
+ if (p == NULL && g == NULL)
+ break;
- if (g && ps >= 0 && ps < MAX_GUILDPOSITION)
- {
- memcpy(WBUFP(buf,54), g->name,NAME_LENGTH);
- memcpy(WBUFP(buf,78), g->position[ps].name, NAME_LENGTH);
- } else { //Assume no guild.
- WBUFB(buf,54) = 0;
- WBUFB(buf,78) = 0;
- }
+ WBUFW(buf, 0) = cmd = 0x195;
+ if (p != NULL)
+ memcpy(WBUFP(buf,30), p->party.name, NAME_LENGTH);
+ else
+ WBUFB(buf,30) = 0;
+
+ if (g != NULL && ps >= 0 && ps < MAX_GUILDPOSITION) {
+ memcpy(WBUFP(buf,54), g->name,NAME_LENGTH);
+ memcpy(WBUFP(buf,78), g->position[ps].name, NAME_LENGTH);
+ } else { //Assume no guild.
+ WBUFB(buf,54) = 0;
+ WBUFB(buf,78) = 0;
}
+ }
break;
//[blackhole89]
case BL_HOM:
- memcpy(WBUFP(buf,6), ((TBL_HOM*)bl)->homunculus.name, NAME_LENGTH);
+ memcpy(WBUFP(buf,6), BL_UCCAST(BL_HOM, bl)->homunculus.name, NAME_LENGTH);
break;
case BL_MER:
- memcpy(WBUFP(buf,6), ((TBL_MER*)bl)->db->name, NAME_LENGTH);
+ memcpy(WBUFP(buf,6), BL_UCCAST(BL_MER, bl)->db->name, NAME_LENGTH);
break;
case BL_PET:
- memcpy(WBUFP(buf,6), ((TBL_PET*)bl)->pet.name, NAME_LENGTH);
+ memcpy(WBUFP(buf,6), BL_UCCAST(BL_PET, bl)->pet.name, NAME_LENGTH);
break;
case BL_NPC:
- memcpy(WBUFP(buf,6), ((TBL_NPC*)bl)->name, NAME_LENGTH);
+ memcpy(WBUFP(buf,6), BL_UCCAST(BL_NPC, bl)->name, NAME_LENGTH);
break;
case BL_MOB:
- {
- struct mob_data *md = (struct mob_data *)bl;
- nullpo_retv(md);
-
- memcpy(WBUFP(buf,6), md->name, NAME_LENGTH);
- if( md->guardian_data && md->guardian_data->g )
- {
- WBUFW(buf, 0) = cmd = 0x195;
- WBUFB(buf,30) = 0;
- memcpy(WBUFP(buf,54), md->guardian_data->g->name, NAME_LENGTH);
- memcpy(WBUFP(buf,78), md->guardian_data->castle->castle_name, NAME_LENGTH);
- }
- else if( battle_config.show_mob_info )
- {
- char mobhp[50], *str_p = mobhp;
- WBUFW(buf, 0) = cmd = 0x195;
- if( battle_config.show_mob_info&4 )
- str_p += sprintf(str_p, "Lv. %d | ", md->level);
- if( battle_config.show_mob_info&1 )
- str_p += sprintf(str_p, "HP: %u/%u | ", md->status.hp, md->status.max_hp);
- if( battle_config.show_mob_info&2 )
- str_p += sprintf(str_p, "HP: %u%% | ", get_percentage(md->status.hp, md->status.max_hp));
- //Even thought mobhp ain't a name, we send it as one so the client
- //can parse it. [Skotlex]
- if( str_p != mobhp )
- {
- *(str_p-3) = '\0'; //Remove trailing space + pipe.
- memcpy(WBUFP(buf,30), mobhp, NAME_LENGTH);
- WBUFB(buf,54) = 0;
- WBUFB(buf,78) = 0;
- }
+ {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
+
+ memcpy(WBUFP(buf,6), md->name, NAME_LENGTH);
+ if (md->guardian_data && md->guardian_data->g) {
+ WBUFW(buf, 0) = cmd = 0x195;
+ WBUFB(buf,30) = 0;
+ memcpy(WBUFP(buf,54), md->guardian_data->g->name, NAME_LENGTH);
+ memcpy(WBUFP(buf,78), md->guardian_data->castle->castle_name, NAME_LENGTH);
+ } else if (battle_config.show_mob_info) {
+ char mobhp[50], *str_p = mobhp;
+ WBUFW(buf, 0) = cmd = 0x195;
+ if (battle_config.show_mob_info&4)
+ str_p += sprintf(str_p, "Lv. %d | ", md->level);
+ if (battle_config.show_mob_info&1)
+ str_p += sprintf(str_p, "HP: %u/%u | ", md->status.hp, md->status.max_hp);
+ if (battle_config.show_mob_info&2)
+ str_p += sprintf(str_p, "HP: %u%% | ", get_percentage(md->status.hp, md->status.max_hp));
+ //Even thought mobhp ain't a name, we send it as one so the client
+ //can parse it. [Skotlex]
+ if (str_p != mobhp) {
+ *(str_p-3) = '\0'; //Remove trailing space + pipe.
+ memcpy(WBUFP(buf,30), mobhp, NAME_LENGTH);
+ WBUFB(buf,54) = 0;
+ WBUFB(buf,78) = 0;
}
}
+ }
break;
case BL_CHAT:
#if 0 //FIXME: Clients DO request this... what should be done about it? The chat's title may not fit... [Skotlex]
- memcpy(WBUFP(buf,6), (struct chat*)->title, NAME_LENGTH);
+ memcpy(WBUFP(buf,6), BL_UCCAST(BL_CHAT, bl)->title, NAME_LENGTH);
break;
#endif
return;
case BL_ELEM:
- memcpy(WBUFP(buf,6), ((TBL_ELEM*)bl)->db->name, NAME_LENGTH);
+ memcpy(WBUFP(buf,6), BL_UCCAST(BL_ELEM, bl)->db->name, NAME_LENGTH);
break;
default:
ShowError("clif_charnameack: bad type %d(%d)\n", bl->type, bl->id);
@@ -8446,9 +8480,9 @@ void clif_charnameack (int fd, struct block_list *bl)
}
// if no recipient specified just update nearby clients
- if (fd == 0)
+ if (fd == 0) {
clif->send(buf, packet_len(cmd), bl, AREA);
- else {
+ } else {
WFIFOHEAD(fd, packet_len(cmd));
memcpy(WFIFOP(fd, 0), buf, packet_len(cmd));
WFIFOSET(fd, packet_len(cmd));
@@ -9065,7 +9099,7 @@ void clif_parse_WantToConnection(int fd, struct map_session_data* sd) {
return;
}
- CREATE(sd, TBL_PC, 1);
+ CREATE(sd, struct map_session_data, 1);
sd->fd = fd;
sd->cryptKey = (( ((( clif->cryptKey[0] * clif->cryptKey[1] ) + clif->cryptKey[2]) & 0xFFFFFFFF)
@@ -9124,6 +9158,8 @@ void clif_parse_LoadEndAck(int fd, struct map_session_data *sd) {
if(sd->vd.cloth_color)
clif->refreshlook(&sd->bl,sd->bl.id,LOOK_CLOTHES_COLOR,sd->vd.cloth_color,SELF);
+ if (sd->vd.body_style)
+ clif->refreshlook(&sd->bl,sd->bl.id,LOOK_BODY2,sd->vd.body_style,SELF);
// item
clif->inventorylist(sd); // inventory list first, otherwise deleted items in pc->checkitem show up as 'unknown item'
pc->checkitem(sd);
@@ -9866,7 +9902,7 @@ void clif_changed_dir(struct block_list *bl, enum send_target target)
nullpo_retv(bl);
WBUFW(buf,0) = 0x9c;
WBUFL(buf,2) = bl->id;
- WBUFW(buf,6) = bl->type==BL_PC?((TBL_PC*)bl)->head_dir:0;
+ WBUFW(buf,6) = bl->type == BL_PC ? BL_UCCAST(BL_PC, bl)->head_dir : 0;
WBUFB(buf,8) = unit->getdir(bl);
clif->send(buf, packet_len(0x9c), bl, target);
@@ -9949,9 +9985,8 @@ void clif_parse_HowManyConnections(int fd, struct map_session_data *sd) {
clif->user_count(sd, map->getusers());
}
-void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, int target_id, int64 tick) {
- struct block_list *target = NULL;
-
+void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, int target_id, int64 tick)
+{
nullpo_retv(sd);
if (pc_isdead(sd)) {
clif->clearunit_area(&sd->bl, CLR_DEAD);
@@ -9978,8 +10013,10 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type,
switch(action_type) {
case 0x00: // once attack
case 0x07: // continuous attack
- if( (target = map->id2bl(target_id)) && target->type == BL_NPC ) {
- npc->click(sd,(TBL_NPC*)target);
+ {
+ struct npc_data *nd = map->id2nd(target_id);
+ if (nd != NULL) {
+ npc->click(sd, nd);
return;
}
@@ -9999,6 +10036,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type,
pc->delinvincibletimer(sd);
pc->update_idle_time(sd, BCIDLE_ATTACK);
unit->attack(&sd->bl, target_id, action_type != 0);
+ }
break;
case 0x02: // sitdown
if (battle_config.basic_skill_check && pc->checkskill(sd, NV_BASIC) < 3) {
@@ -10256,13 +10294,10 @@ void clif_parse_TakeItem(int fd, struct map_session_data *sd) __attribute__((non
/// 009f <id>.L (CZ_ITEM_PICKUP)
/// 0362 <id>.L (CZ_ITEM_PICKUP2)
/// There are various variants of this packet, some of them have padding between fields.
-void clif_parse_TakeItem(int fd, struct map_session_data *sd) {
- struct flooritem_data *fitem;
- int map_object_id;
-
- map_object_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]);
-
- fitem = (struct flooritem_data*)map->id2bl(map_object_id);
+void clif_parse_TakeItem(int fd, struct map_session_data *sd)
+{
+ int map_object_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]);
+ struct flooritem_data *fitem = map->id2fi(map_object_id);
do {
if (pc_isdead(sd)) {
@@ -10270,7 +10305,7 @@ void clif_parse_TakeItem(int fd, struct map_session_data *sd) {
break;
}
- if (fitem == NULL || fitem->bl.type != BL_ITEM || fitem->bl.m != sd->bl.m)
+ if (fitem == NULL || fitem->bl.m != sd->bl.m)
break;
if( sd->sc.count && (
@@ -10466,7 +10501,7 @@ void clif_parse_NpcClicked(int fd,struct map_session_data *sd)
break;
}
if( bl->m != -1 )// the user can't click floating npcs directly (hack attempt)
- npc->click(sd,(TBL_NPC*)bl);
+ npc->click(sd, BL_UCAST(BL_NPC, bl));
break;
}
}
@@ -11346,7 +11381,7 @@ void clif_parse_NpcSelectMenu(int fd,struct map_session_data *sd)
#ifdef SECURE_NPCTIMEOUT
if( sd->npc_idle_timer != INVALID_TIMER ) {
#endif
- TBL_NPC* nd = map->id2nd(npc_id);
+ struct npc_data *nd = map->id2nd(npc_id);
ShowWarning("Invalid menu selection on npc %d:'%s' - got %d, valid range is [%d..%d] (player AID:%d, CID:%d, name:'%s')!\n", npc_id, (nd)?nd->name:"invalid npc id", select, 1, sd->npc_menu, sd->bl.id, sd->status.char_id, sd->status.name);
clif->GM_kick(NULL,sd);
#ifdef SECURE_NPCTIMEOUT
@@ -13196,7 +13231,7 @@ void clif_parse_GMKick(int fd, struct map_session_data *sd) {
case BL_NPC:
{
- struct npc_data* nd = (struct npc_data *)target;
+ struct npc_data *nd = BL_UCAST(BL_NPC, target);
if( !pc->can_use_command(sd, "@unloadnpc")) {
clif->GM_kickack(sd, 0);
return;
@@ -17580,7 +17615,7 @@ void clif_status_change_end(struct block_list *bl, int tid, enum send_target tar
nullpo_retv(bl);
- if( bl->type == BL_PC && !((TBL_PC*)bl)->state.active )
+ if (bl->type == BL_PC && !BL_UCAST(BL_PC, bl)->state.active)
return;
p.PacketType = status_change_endType;
@@ -18614,7 +18649,7 @@ unsigned short clif_parse_cmd_optional( int fd, struct map_session_data *sd ) {
*------------------------------------------*/
int clif_parse(int fd) {
int cmd, packet_len;
- TBL_PC* sd;
+ struct map_session_data *sd;
int pnum;
//TODO apply delays or disconnect based on packet throughput [FlavioJS]
@@ -18624,7 +18659,7 @@ int clif_parse(int fd) {
unsigned short (*parse_cmd_func)(int fd, struct map_session_data *sd);
// begin main client packet processing loop
- sd = (TBL_PC *)sockt->session[fd]->session_data;
+ sd = sockt->session[fd]->session_data;
if (sockt->session[fd]->flag.eof) {
if (sd) {
diff --git a/src/map/duel.c b/src/map/duel.c
index 8f309abe4..c658ea3e3 100644
--- a/src/map/duel.c
+++ b/src/map/duel.c
@@ -134,7 +134,7 @@ void duel_invite(const unsigned int did, struct map_session_data* sd, struct map
// "Blue -- Player %s invites you to PVP duel (@accept/@reject) --"
sprintf(output, msg_sd(target_sd,374), sd->status.name);
- clif->broadcast((struct block_list *)target_sd, output, strlen(output)+1, BC_BLUE, SELF);
+ clif->broadcast(&target_sd->bl, output, strlen(output)+1, BC_BLUE, SELF);
}
static int duel_leave_sub(struct map_session_data* sd, va_list va)
diff --git a/src/map/elemental.c b/src/map/elemental.c
index a6fe94ab2..a87deb7d7 100644
--- a/src/map/elemental.c
+++ b/src/map/elemental.c
@@ -273,9 +273,10 @@ int elemental_data_received(struct s_elemental *ele, bool flag) {
db = &elemental->db[i];
if( !sd->ed ) {
// Initialize it after first summon.
- sd->ed = ed = (struct elemental_data*)aCalloc(1,sizeof(struct elemental_data));
+ CREATE(ed, struct elemental_data, 1);
ed->bl.type = BL_ELEM;
ed->bl.id = npc->get_new_npc_id();
+ sd->ed = ed;
ed->master = sd;
ed->db = db;
memcpy(&ed->elemental, ele, sizeof(struct s_elemental));
diff --git a/src/map/guild.c b/src/map/guild.c
index 10511067a..cba05638f 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -57,8 +57,9 @@ struct guild_interface *guild;
/*==========================================
* Retrieves and validates the sd pointer for this guild member [Skotlex]
*------------------------------------------*/
-TBL_PC* guild_sd_check(int guild_id, int account_id, int char_id) {
- TBL_PC* sd = map->id2sd(account_id);
+struct map_session_data *guild_sd_check(int guild_id, int account_id, int char_id)
+{
+ struct map_session_data *sd = map->id2sd(account_id);
if (!(sd && sd->status.char_id == char_id))
return NULL;
@@ -441,8 +442,7 @@ int guild_check_member(struct guild *g)
nullpo_ret(g);
iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) )
- {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if( sd->status.guild_id != g->guild_id )
continue;
@@ -465,7 +465,7 @@ int guild_recv_noinfo(int guild_id)
struct s_mapiterator* iter;
iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) ) {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if( sd->status.guild_id == guild_id )
sd->status.guild_id = 0; // erase guild
}
@@ -505,7 +505,7 @@ int guild_recv_info(struct guild *sg) {
tg[i] = guild->search(sg->alliance[i].guild_id);
}
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) ) {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if (!sd->status.guild_id)
continue; // Not interested in guildless users
@@ -939,14 +939,14 @@ int guild_member_withdraw(int guild_id, int account_id, int char_id, int flag, c
void guild_retrieveitembound(int char_id,int aid,int guild_id) {
#ifdef GP_BOUND_ITEMS
- TBL_PC *sd = map->charid2sd(char_id);
- if(sd){ //Character is online
+ struct map_session_data *sd = map->charid2sd(char_id);
+ if (sd != NULL) { //Character is online
pc->bound_clear(sd,IBT_GUILD);
} else { //Character is offline, ask char server to do the job
struct guild_storage *gstor = idb_get(gstorage->db,guild_id);
if(gstor && gstor->storage_status == 1) { //Someone is in guild storage, close them
struct s_mapiterator* iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) ) {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if(sd->status.guild_id == guild_id && sd->state.storage_flag == STORAGE_FLAG_GUILD) {
gstorage->close(sd);
break;
@@ -1229,7 +1229,7 @@ int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data)
continue;
// update permanent guardians
for( i = 0; i < ARRAYLENGTH(gc->guardian); ++i ) {
- TBL_MOB* md = (gc->guardian[i].id ? map->id2md(gc->guardian[i].id) : NULL);
+ struct mob_data *md = gc->guardian[i].id ? map->id2md(gc->guardian[i].id) : NULL;
if( md == NULL || md->guardian_data == NULL )
continue;
@@ -1237,7 +1237,7 @@ int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data)
}
// update temporary guardians
for( i = 0; i < gc->temp_guardians_max; ++i ) {
- TBL_MOB* md = (gc->temp_guardians[i] ? map->id2md(gc->temp_guardians[i]) : NULL);
+ struct mob_data *md = gc->temp_guardians[i] ? map->id2md(gc->temp_guardians[i]) : NULL;
if( md == NULL || md->guardian_data == NULL )
continue;
@@ -1328,7 +1328,7 @@ int guild_getexp(struct map_session_data *sd,int exp)
/*====================================================
* Ask to increase guildskill skill_id
*---------------------------------------------------*/
-int guild_skillup(TBL_PC* sd, uint16 skill_id)
+int guild_skillup(struct map_session_data *sd, uint16 skill_id)
{
struct guild* g;
int idx = skill_id - GD_SKILLBASE;
@@ -2208,7 +2208,7 @@ void guild_flag_remove(struct npc_data *nd) {
continue;
if( cursor != i ) {
- memmove(&guild->flags[cursor], &guild->flags[i], sizeof(struct npc_data*));
+ memmove(&guild->flags[cursor], &guild->flags[i], sizeof(guild->flags[0]));
}
cursor++;
}
diff --git a/src/map/guild.h b/src/map/guild.h
index 4b6e860d8..10749f8ad 100644
--- a/src/map/guild.h
+++ b/src/map/guild.h
@@ -21,11 +21,13 @@
#ifndef MAP_GUILD_H
#define MAP_GUILD_H
-#include "map/map.h" // EVENT_NAME_LENGTH, TBL_PC
+#include "map/map.h" // EVENT_NAME_LENGTH
#include "common/hercules.h"
#include "common/db.h"
#include "common/mmo.h"
+struct map_session_data;
+
/**
* Defines
**/
@@ -161,7 +163,7 @@ struct guild_interface {
void (*retrieveitembound) (int char_id,int aid,int guild_id);
/* */
int (*payexp_timer) (int tid, int64 tick, int id, intptr_t data);
- TBL_PC* (*sd_check) (int guild_id, int account_id, int char_id);
+ struct map_session_data *(*sd_check) (int guild_id, int account_id, int char_id);
bool (*read_guildskill_tree_db) (char* split[], int columns, int current);
bool (*read_castledb) (char* str[], int columns, int current);
int (*payexp_timer_sub) (DBKey key, DBData *data, va_list ap);
diff --git a/src/map/homunculus.c b/src/map/homunculus.c
index ac1c4052b..b642c197f 100644
--- a/src/map/homunculus.c
+++ b/src/map/homunculus.c
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2012-2015 Hercules Dev Team
+ * Copyright (C) 2012-2016 Hercules Dev Team
* Copyright (C) Athena Dev Teams
*
* Hercules is free software: you can redistribute it and/or modify
@@ -227,7 +227,7 @@ int homunculus_calc_skilltree(struct homun_data *hd, int flag_evolve) {
if( hd->homunculus.hskill[ id - HM_SKILLBASE ].id )
continue; //Skill already known.
if(!battle_config.skillfree) {
- for( j = 0; j < MAX_PC_SKILL_REQUIRE; j++ ) {
+ for (j = 0; j < MAX_HOM_SKILL_REQUIRE; j++) {
if( homun->dbs->skill_tree[c][i].need[j].id &&
homun->checkskill(hd,homun->dbs->skill_tree[c][i].need[j].id) < homun->dbs->skill_tree[c][i].need[j].lv ) {
f = 0;
@@ -252,7 +252,7 @@ int homunculus_calc_skilltree(struct homun_data *hd, int flag_evolve) {
if( j < homun->dbs->skill_tree[c][i].intimacylv )
continue;
if(!battle_config.skillfree) {
- for( j = 0; j < MAX_PC_SKILL_REQUIRE; j++ ) {
+ for (j = 0; j < MAX_HOM_SKILL_REQUIRE; j++) {
if( homun->dbs->skill_tree[c][i].need[j].id &&
homun->checkskill(hd,homun->dbs->skill_tree[c][i].need[j].id) < homun->dbs->skill_tree[c][i].need[j].lv ) {
f = 0;
@@ -580,7 +580,7 @@ void homunculus_healed (struct homun_data *hd) {
void homunculus_save(struct homun_data *hd) {
// copy data that must be saved in homunculus struct ( hp / sp )
- TBL_PC * sd;
+ struct map_session_data *sd = NULL;
//Do not check for max_hp/max_sp caps as current could be higher to max due
//to status changes/skills (they will be capped as needed upon stat
//calculation on login)
@@ -786,9 +786,10 @@ bool homunculus_create(struct map_session_data *sd, struct s_homunculus *hom) {
intif->homunculus_requestdelete(hom->hom_id);
return false;
}
- sd->hd = hd = (struct homun_data*)aCalloc(1,sizeof(struct homun_data));
+ CREATE(hd, struct homun_data, 1);
hd->bl.type = BL_HOM;
hd->bl.id = npc->get_new_npc_id();
+ sd->hd = hd;
hd->master = sd;
hd->homunculusDB = &homun->dbs->db[i];
@@ -1234,7 +1235,7 @@ bool homunculus_read_skill_db_sub(char* split[], int columns, int current) {
if (minJobLevelPresent)
homun->dbs->skill_tree[classid][j].joblv = atoi(split[3]);
- for( k = 0; k < MAX_PC_SKILL_REQUIRE; k++ ) {
+ for (k = 0; k < MAX_HOM_SKILL_REQUIRE; k++) {
homun->dbs->skill_tree[classid][j].need[k].id = atoi(split[3+k*2+minJobLevelPresent]);
homun->dbs->skill_tree[classid][j].need[k].lv = atoi(split[3+k*2+minJobLevelPresent+1]);
}
diff --git a/src/map/instance.c b/src/map/instance.c
index ff6f8bdab..5e8256c88 100644
--- a/src/map/instance.c
+++ b/src/map/instance.c
@@ -369,21 +369,31 @@ int instance_mapid2imapid(int16 m, int instance_id) {
/*--------------------------------------
* Used on Init instance. Duplicates each script on source map
*--------------------------------------*/
-int instance_map_npcsub(struct block_list* bl, va_list args) {
- struct npc_data* nd = (struct npc_data*)bl;
+int instance_map_npcsub(struct block_list* bl, va_list args)
+{
+ struct npc_data *nd = NULL;
int16 m = va_arg(args, int); // Destination Map
- if ( npc->duplicate4instance(nd, m) )
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_NPC);
+ nd = BL_UCAST(BL_NPC, bl);
+
+ if (npc->duplicate4instance(nd, m))
ShowDebug("instance_map_npcsub:npc_duplicate4instance failed (%s/%d)\n",nd->name,m);
return 1;
}
-int instance_init_npc(struct block_list* bl, va_list args) {
- struct npc_data *nd = (struct npc_data*)bl;
+int instance_init_npc(struct block_list* bl, va_list args)
+{
+ struct npc_data *nd = NULL;
struct event_data *ev;
char evname[EVENT_NAME_LENGTH];
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_NPC);
+ nd = BL_UCAST(BL_NPC, bl);
+
snprintf(evname, EVENT_NAME_LENGTH, "%s::OnInstanceInit", nd->exname);
if( ( ev = strdb_get(npc->ev_db, evname) ) )
@@ -430,10 +440,10 @@ int instance_cleanup_sub(struct block_list *bl, va_list ap) {
switch(bl->type) {
case BL_PC:
- map->quit((struct map_session_data *) bl);
+ map->quit(BL_UCAST(BL_PC, bl));
break;
case BL_NPC:
- npc->unload((struct npc_data *)bl,true);
+ npc->unload(BL_UCAST(BL_NPC, bl), true);
break;
case BL_MOB:
unit->free(bl,CLR_OUTSIGHT);
@@ -445,7 +455,7 @@ int instance_cleanup_sub(struct block_list *bl, va_list ap) {
map->clearflooritem(bl);
break;
case BL_SKILL:
- skill->delunit((struct skill_unit *) bl);
+ skill->delunit(BL_UCAST(BL_SKILL, bl));
break;
}
@@ -724,7 +734,7 @@ void do_reload_instance(void) {
}
iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) ) {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if(sd && map->list[sd->bl.m].instance_id >= 0) {
pc->setpos(sd,instance->list[map->list[sd->bl.m].instance_id].respawn.map,instance->list[map->list[sd->bl.m].instance_id].respawn.x,instance->list[map->list[sd->bl.m].instance_id].respawn.y,CLR_TELEPORT);
}
diff --git a/src/map/intif.c b/src/map/intif.c
index 016b4f7d3..1968ebe67 100644
--- a/src/map/intif.c
+++ b/src/map/intif.c
@@ -995,7 +995,7 @@ void intif_parse_WisEnd(int fd) {
if (battle_config.etc_log)
ShowInfo("intif_parse_wisend: player: %s, flag: %d\n", RFIFOP(fd,2), RFIFOB(fd,26)); // flag: 0: success to send whisper, 1: target character is not logged in?, 2: ignored by target
- sd = (struct map_session_data *)map->nick2sd((char *) RFIFOP(fd,2));
+ sd = map->nick2sd((char *)RFIFOP(fd,2));
if (sd != NULL)
clif->wis_end(sd->fd, RFIFOB(fd,26));
@@ -1496,7 +1496,8 @@ QUESTLOG SYSTEM FUNCTIONS
*
* @param sd Character's data
*/
-void intif_request_questlog(TBL_PC *sd) {
+void intif_request_questlog(struct map_session_data *sd)
+{
nullpo_retv(sd);
WFIFOHEAD(inter_fd,6);
WFIFOW(inter_fd,0) = 0x3060;
@@ -1513,7 +1514,7 @@ void intif_request_questlog(TBL_PC *sd) {
*/
void intif_parse_QuestLog(int fd) {
int char_id = RFIFOL(fd, 4), num_received = (RFIFOW(fd, 2)-8)/sizeof(struct quest);
- TBL_PC *sd = map->charid2sd(char_id);
+ struct map_session_data *sd = map->charid2sd(char_id);
if (!sd) // User not online anymore
return;
@@ -1568,7 +1569,7 @@ void intif_parse_QuestLog(int fd) {
*/
void intif_parse_QuestSave(int fd) {
int cid = RFIFOL(fd, 2);
- TBL_PC *sd = map->id2sd(cid);
+ struct map_session_data *sd = map->id2sd(cid);
if( !RFIFOB(fd, 6) )
ShowError("intif_parse_QuestSave: Failed to save quest(s) for character %d!\n", cid);
@@ -1582,7 +1583,8 @@ void intif_parse_QuestSave(int fd) {
* @param sd Character's data
* @return 0 in case of success, nonzero otherwise
*/
-int intif_quest_save(TBL_PC *sd) {
+int intif_quest_save(struct map_session_data *sd)
+{
int len = sizeof(struct quest)*sd->num_quests + 8;
if(intif->CheckForCharServer())
diff --git a/src/map/itemdb.c b/src/map/itemdb.c
index 2894463de..048efd636 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -2123,7 +2123,7 @@ void itemdb_reload(void) {
// readjust itemdb pointer cache for each player
iter = mapit_geteachpc();
- for( sd = (struct map_session_data*)mapit->first(iter); mapit->exists(iter); sd = (struct map_session_data*)mapit->next(iter) ) {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
memset(sd->item_delay, 0, sizeof(sd->item_delay)); // reset item delays
pc->setinventorydata(sd);
if( battle_config.item_check )
diff --git a/src/map/itemdb.h b/src/map/itemdb.h
index 5ea22b190..d751451c6 100644
--- a/src/map/itemdb.h
+++ b/src/map/itemdb.h
@@ -64,6 +64,7 @@ enum item_itemid {
ITEMID_BRANCH_OF_DEAD_TREE = 604,
ITEMID_ANODYNE = 605,
ITEMID_ALOEBERA = 606,
+ ITEMID_POISON_BOTTLE = 678,
ITEMID_EMPTY_BOTTLE = 713,
ITEMID_EMPERIUM = 714,
ITEMID_YELLOW_GEMSTONE = 715,
@@ -95,6 +96,10 @@ enum item_itemid {
ITEMID_ANGRA_MANYU = 1599,
ITEMID_STRANGE_EMBRYO = 6415,
ITEMID_FACE_PAINT = 6120,
+ ITEMID_SCARLET_POINT = 6360,
+ ITEMID_INDIGO_POINT = 6361,
+ ITEMID_YELLOW_WISH_POINT = 6362,
+ ITEMID_LIME_GREEN_POINT = 6363,
ITEMID_STONE = 7049,
ITEMID_FIRE_BOTTLE = 7135,
ITEMID_ACID_BOTTLE = 7136,
@@ -149,6 +154,9 @@ enum item_itemid {
ITEMID_WOB_LOCAL = 14585,
ITEMID_SIEGE_TELEPORT_SCROLL = 14591,
ITEMID_JOB_MANUAL50 = 14592,
+ ITEMID_PILEBUNCKER_S = 16030,
+ ITEMID_PILEBUNCKER_P = 16031,
+ ITEMID_PILEBUNCKER_T = 16032,
};
enum cards_item_list {
@@ -530,13 +538,14 @@ struct item_data {
#define itemdb_canrefine(n) (!itemdb->search(n)->flag.no_refine)
#define itemdb_is_rune(n) (((n) >= ITEMID_NAUTHIZ && (n) <= ITEMID_HAGALAZ) || (n) == ITEMID_LUX_ANIMA)
-#define itemdb_is_element(n) ((n) >= ITEMID_BOODY_RED && (n) <= ITEMID_YELLOW_LIVE)
+#define itemdb_is_element(n) ((n) >= ITEMID_SCARLET_POINT && (n) <= ITEMID_LIME_GREEN_POINT)
#define itemdb_is_spellbook(n) ((n) >= ITEMID_MAGIC_BOOK_FB && (n) <= ITEMID_MAGIC_BOOK_DL)
#define itemdb_is_poison(n) ((n) >= ITEMID_POISON_PARALYSIS && (n) <= ITEMID_POISON_FATIGUE)
#define itemid_isgemstone(n) ((n) >= ITEMID_YELLOW_GEMSTONE && (n) <= ITEMID_BLUE_GEMSTONE)
#define itemdb_iscashfood(n) ((n) >= ITEMID_STR_DISH10_ && (n) <= ITEMID_VIT_DISH10_)
#define itemdb_is_GNbomb(n) ((n) >= ITEMID_APPLE_BOMB && (n) <= ITEMID_VERY_HARD_LUMP)
#define itemdb_is_GNthrowable(n) ((n) >= ITEMID_MYSTERIOUS_POWDER && (n) <= ITEMID_BLACK_THING_TO_THROW)
+#define itemid_is_pilebunker(n) ((n) == ITEMID_PILEBUNCKER || (n) == ITEMID_PILEBUNCKER_P || (n) == ITEMID_PILEBUNCKER_S || (n) == ITEMID_PILEBUNCKER_T)
#define itemdb_is_shadowequip(n) ((n) & (EQP_SHADOW_ARMOR|EQP_SHADOW_WEAPON|EQP_SHADOW_SHIELD|EQP_SHADOW_SHOES|EQP_SHADOW_ACC_R|EQP_SHADOW_ACC_L))
#define itemdb_is_costumeequip(n) ((n) & (EQP_COSTUME_HEAD_TOP|EQP_COSTUME_HEAD_MID|EQP_COSTUME_HEAD_LOW|EQP_COSTUME_GARMENT))
diff --git a/src/map/map.c b/src/map/map.c
index dcbc3f6f5..1b922148b 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -332,8 +332,9 @@ int map_moveblock(struct block_list *bl, int x1, int y1, int64 tick) {
if (sc && sc->data[SC_PROPERTYWALK] &&
sc->data[SC_PROPERTYWALK]->val3 >= skill->get_maxcount(sc->data[SC_PROPERTYWALK]->val1,sc->data[SC_PROPERTYWALK]->val2) )
status_change_end(bl,SC_PROPERTYWALK,INVALID_TIMER);
- } else if (bl->type == BL_NPC)
- npc->unsetcells((TBL_NPC*)bl);
+ } else if (bl->type == BL_NPC) {
+ npc->unsetcells(BL_UCAST(BL_NPC, bl));
+ }
if (moveblock) map->delblock(bl);
#ifdef CELL_NOSTACK
@@ -347,15 +348,17 @@ int map_moveblock(struct block_list *bl, int x1, int y1, int64 tick) {
#endif
if (bl->type&BL_CHAR) {
+ struct map_session_data *sd = BL_CAST(BL_PC, bl);
skill->unit_move(bl,tick,3);
- if( bl->type == BL_PC && ((TBL_PC*)bl)->shadowform_id ) {//Shadow Form Target Moving
+ if (sd != NULL && sd->shadowform_id != 0) {
+ //Shadow Form Target Moving
struct block_list *d_bl;
- if( (d_bl = map->id2bl(((TBL_PC*)bl)->shadowform_id)) == NULL || !check_distance_bl(bl,d_bl,10) ) {
+ if ((d_bl = map->id2bl(sd->shadowform_id)) == NULL || !check_distance_bl(bl,d_bl,10)) {
if( d_bl )
status_change_end(d_bl,SC__SHADOWFORM,INVALID_TIMER);
- ((TBL_PC*)bl)->shadowform_id = 0;
+ sd->shadowform_id = 0;
}
}
@@ -391,7 +394,7 @@ int map_moveblock(struct block_list *bl, int x1, int y1, int64 tick) {
}
}
/* Guild Aura Moving */
- if( bl->type == BL_PC && ((TBL_PC*)bl)->state.gmaster_flag ) {
+ if (sd != NULL && sd->state.gmaster_flag) {
if (sc->data[SC_LEADERSHIP])
skill->unit_move_unit_group(skill->id2group(sc->data[SC_LEADERSHIP]->val4), bl->m, x1-x0, y1-y0);
if (sc->data[SC_GLORYWOUNDS])
@@ -402,8 +405,9 @@ int map_moveblock(struct block_list *bl, int x1, int y1, int64 tick) {
skill->unit_move_unit_group(skill->id2group(sc->data[SC_HAWKEYES]->val4), bl->m, x1-x0, y1-y0);
}
}
- } else if (bl->type == BL_NPC)
- npc->setcells((TBL_NPC*)bl);
+ } else if (bl->type == BL_NPC) {
+ npc->setcells(BL_UCAST(BL_NPC, bl));
+ }
return 0;
}
@@ -484,7 +488,7 @@ struct skill_unit* map_find_skill_unit_oncell(struct block_list* target,int16 x,
if (bl->x != x || bl->y != y || bl->type != BL_SKILL)
continue;
- su = (struct skill_unit *) bl;
+ su = BL_UCAST(BL_SKILL, bl);
if( su == out_unit || !su->alive || !su->group || su->group->skill_id != skill_id )
continue;
if( !(flag&1) || battle->check_target(&su->bl,target,su->group->target_flag) > 0 )
@@ -1370,10 +1374,12 @@ int map_get_new_object_id(void)
* Timered function to clear the floor (remove remaining item)
* Called each flooritem_lifetime ms
*------------------------------------------*/
-int map_clearflooritem_timer(int tid, int64 tick, int id, intptr_t data) {
- struct flooritem_data* fitem = (struct flooritem_data*)idb_get(map->id_db, id);
+int map_clearflooritem_timer(int tid, int64 tick, int id, intptr_t data)
+{
+ struct block_list *bl = idb_get(map->id_db, id);
+ struct flooritem_data *fitem = BL_CAST(BL_ITEM, bl);
- if (fitem == NULL || fitem->bl.type != BL_ITEM || (fitem->cleartimer != tid)) {
+ if (fitem == NULL || fitem->cleartimer != tid) {
ShowError("map_clearflooritem_timer : error\n");
return 1;
}
@@ -1391,8 +1397,11 @@ int map_clearflooritem_timer(int tid, int64 tick, int id, intptr_t data) {
/*
* clears a single bl item out of the bazooonga.
*/
-void map_clearflooritem(struct block_list *bl) {
- struct flooritem_data* fitem = (struct flooritem_data*)bl;
+void map_clearflooritem(struct block_list *bl)
+{
+ struct flooritem_data *fitem = BL_CAST(BL_ITEM, bl);
+
+ nullpo_retv(fitem);
if( fitem->cleartimer != INVALID_TIMER )
timer->delete(fitem->cleartimer,map->clearflooritem_timer);
@@ -1738,15 +1747,12 @@ void map_addiddb(struct block_list *bl)
{
nullpo_retv(bl);
- if( bl->type == BL_PC )
- {
- TBL_PC* sd = (TBL_PC*)bl;
+ if (bl->type == BL_PC) {
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
idb_put(map->pc_db,sd->bl.id,sd);
idb_put(map->charid_db,sd->status.char_id,sd);
- }
- else if( bl->type == BL_MOB )
- {
- TBL_MOB* md = (TBL_MOB*)bl;
+ } else if (bl->type == BL_MOB) {
+ struct mob_data *md = BL_UCAST(BL_MOB, bl);
idb_put(map->mobid_db,bl->id,bl);
if( md->state.boss )
@@ -1766,14 +1772,11 @@ void map_deliddb(struct block_list *bl)
{
nullpo_retv(bl);
- if( bl->type == BL_PC )
- {
- TBL_PC* sd = (TBL_PC*)bl;
+ if (bl->type == BL_PC) {
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
idb_remove(map->pc_db,sd->bl.id);
idb_remove(map->charid_db,sd->status.char_id);
- }
- else if( bl->type == BL_MOB )
- {
+ } else if (bl->type == BL_MOB) {
idb_remove(map->mobid_db,bl->id);
idb_remove(map->bossid_db,bl->id);
}
@@ -1901,42 +1904,187 @@ int map_quit(struct map_session_data *sd) {
return 0;
}
-/*==========================================
- * Lookup, id to session (player,mob,npc,homon,merc..)
- *------------------------------------------*/
-struct map_session_data *map_id2sd(int id) {
- if (id <= 0) return NULL;
- return (struct map_session_data*)idb_get(map->pc_db,id);
-}
+/**
+ * Looks up a session data by ID.
+ *
+ * The search is performed using the pc_db.
+ *
+ * @param id The bl ID to search.
+ * @return The searched map_session_data, if it exists.
+ * @retval NULL if the ID is invalid or doesn't belong to a player unit.
+ */
+struct map_session_data *map_id2sd(int id)
+{
+ struct block_list *bl = NULL;
+ if (id <= 0)
+ return NULL;
+
+ bl = idb_get(map->pc_db,id);
-struct mob_data *map_id2md(int id) {
- if (id <= 0) return NULL;
- return (struct mob_data*)idb_get(map->mobid_db,id);
+ if (bl)
+ Assert_retr(NULL, bl->type == BL_PC);
+ return BL_UCAST(BL_PC, bl);
}
-struct npc_data *map_id2nd(int id) {
+/**
+ * Looks up a NPC data by ID.
+ *
+ * @param id The bl ID to search.
+ * @return The searched npc_data, if it exists.
+ * @retval NULL if the ID is invalid or doesn't belong to a NPC.
+ */
+struct npc_data *map_id2nd(int id)
+{
// just a id2bl lookup because there's no npc_db
struct block_list* bl = map->id2bl(id);
return BL_CAST(BL_NPC, bl);
}
-struct homun_data *map_id2hd(int id) {
+/**
+ * Looks up a mob data by ID.
+ *
+ * The search is performed using the mobid_db.
+ *
+ * @param id The bl ID to search.
+ * @return The searched mob_data, if it exists.
+ * @retval NULL if the ID is invalid or doesn't belong to a mob unit.
+ */
+struct mob_data *map_id2md(int id)
+{
+ struct block_list *bl = NULL;
+ if (id <= 0)
+ return NULL;
+
+ bl = idb_get(map->mobid_db,id);
+
+ if (bl)
+ Assert_retr(NULL, bl->type == BL_MOB);
+ return BL_UCAST(BL_MOB, bl);
+}
+
+/**
+ * Looks up a floor item data by ID.
+ *
+ * @param id The bl ID to search.
+ * @return The searched flooritem_data, if it exists.
+ * @retval NULL if the ID is invalid or doesn't belong to a floor item.
+ */
+struct flooritem_data *map_id2fi(int id)
+{
+ struct block_list* bl = map->id2bl(id);
+
+ return BL_CAST(BL_ITEM, bl);
+}
+
+/**
+ * Looks up a chat data by ID.
+ *
+ * @param id The bl ID to search.
+ * @return The searched chat_data, if it exists.
+ * @retval NULL if the ID is invalid or doesn't belong to a chat.
+ */
+struct chat_data *map_id2cd(int id)
+{
+ struct block_list* bl = map->id2bl(id);
+
+ return BL_CAST(BL_CHAT, bl);
+}
+
+/**
+ * Looks up a skill unit data by ID.
+ *
+ * @param id The bl ID to search.
+ * @return The searched skill_unit data, if it exists.
+ * @retval NULL if the ID is invalid or doesn't belong to a skill unit.
+ */
+struct skill_unit *map_id2su(int id)
+{
+ struct block_list* bl = map->id2bl(id);
+
+ return BL_CAST(BL_SKILL, bl);
+}
+
+/**
+ * Looks up a pet data by ID.
+ *
+ * @param id The bl ID to search.
+ * @return The searched pet_data, if it exists.
+ * @retval NULL if the ID is invalid or doesn't belong to a pet.
+ */
+struct pet_data *map_id2pd(int id)
+{
+ struct block_list* bl = map->id2bl(id);
+
+ return BL_CAST(BL_PET, bl);
+}
+
+/**
+ * Looks up a homunculus data by ID.
+ *
+ * @param id The bl ID to search.
+ * @return The searched homun_data, if it exists.
+ * @retval NULL if the ID is invalid or doesn't belong to a homunculus.
+ */
+struct homun_data *map_id2hd(int id)
+{
struct block_list* bl = map->id2bl(id);
return BL_CAST(BL_HOM, bl);
}
-struct mercenary_data *map_id2mc(int id) {
+/**
+ * Looks up a mercenary data by ID.
+ *
+ * @param id The bl ID to search.
+ * @return The searched mercenary_data, if it exists.
+ * @retval NULL if the ID is invalid or doesn't belong to a mercenary.
+ */
+struct mercenary_data *map_id2mc(int id)
+{
struct block_list* bl = map->id2bl(id);
return BL_CAST(BL_MER, bl);
}
-struct chat_data *map_id2cd(int id) {
+/**
+ * Looks up an elemental data by ID.
+ *
+ * @param id The bl ID to search.
+ * @return The searched elemental_data, if it exists.
+ * @retval NULL if the ID is invalid or doesn't belong to an elemental.
+ */
+struct elemental_data *map_id2ed(int id)
+{
struct block_list* bl = map->id2bl(id);
- return BL_CAST(BL_CHAT, bl);
+ return BL_CAST(BL_ELEM, bl);
+}
+
+/**
+ * Looks up a block_list by ID.
+ *
+ * The search is performed using the id_db.
+ *
+ * @param id The bl ID to search.
+ * @return The searched block_list, if it exists.
+ * @retval NULL if the ID is invalid.
+ */
+struct block_list *map_id2bl(int id)
+{
+ return idb_get(map->id_db, id);
+}
+
+/**
+ * Verifies whether a block list ID is valid.
+ *
+ * @param id The bl ID to search.
+ * @retval true if the ID exists and is valid.
+ * @retval false otherwise.
+ */
+bool map_blid_exists(int id)
+{
+ return (idb_exists(map->id_db,id));
}
/// Returns the nick of the target charid or NULL if unknown (requests the nick to the char server).
@@ -1959,7 +2107,10 @@ const char *map_charid2nick(int charid) {
/// Returns the struct map_session_data of the charid or NULL if the char is not online.
struct map_session_data* map_charid2sd(int charid)
{
- return (struct map_session_data*)idb_get(map->charid_db, charid);
+ struct block_list *bl = idb_get(map->charid_db, charid);
+ if (bl)
+ Assert_retr(NULL, bl->type == BL_PC);
+ return BL_UCAST(BL_PC, bl);
}
/*==========================================
@@ -1982,8 +2133,7 @@ struct map_session_data * map_nick2sd(const char *nick)
iter = mapit_getallusers();
found_sd = NULL;
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) )
- {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if( battle_config.partial_name_scan )
{// partial name search
if( strnicmp(sd->status.name, nick, nicklen) == 0 )
@@ -2014,20 +2164,6 @@ struct map_session_data * map_nick2sd(const char *nick)
}
/*==========================================
- * Looksup id_db DBMap and returns BL pointer of 'id' or NULL if not found
- *------------------------------------------*/
-struct block_list * map_id2bl(int id) {
- return (struct block_list*)idb_get(map->id_db,id);
-}
-
-/**
- * Same as map->id2bl except it only checks for its existence
- **/
-bool map_blid_exists( int id ) {
- return (idb_exists(map->id_db,id));
-}
-
-/*==========================================
* Convext Mirror
*------------------------------------------*/
struct mob_data * map_getmob_boss(int16 m)
@@ -2037,10 +2173,8 @@ struct mob_data * map_getmob_boss(int16 m)
bool found = false;
iter = db_iterator(map->bossid_db);
- for( md = (struct mob_data*)dbi_first(iter); dbi_exists(iter); md = (struct mob_data*)dbi_next(iter) )
- {
- if( md->bl.m == m )
- {
+ for (md = dbi_first(iter); dbi_exists(iter); md = dbi_next(iter)) {
+ if (md->bl.m == m) {
found = true;
break;
}
@@ -2050,10 +2184,15 @@ struct mob_data * map_getmob_boss(int16 m)
return (found)? md : NULL;
}
-struct mob_data * map_id2boss(int id)
+struct mob_data *map_id2boss(int id)
{
- if (id <= 0) return NULL;
- return (struct mob_data*)idb_get(map->bossid_db,id);
+ struct block_list *bl = NULL;
+ if (id <= 0)
+ return NULL;
+ bl = idb_get(map->bossid_db,id);
+ if (bl)
+ Assert_retr(NULL, bl->type == BL_MOB);
+ return BL_UCAST(BL_MOB, bl);
}
/**
@@ -2128,7 +2267,7 @@ void map_vforeachmob(int (*func)(struct mob_data* md, va_list args), va_list arg
struct mob_data* md;
iter = db_iterator(map->mobid_db);
- for( md = (struct mob_data*)dbi_first(iter); dbi_exists(iter); md = (struct mob_data*)dbi_next(iter) ) {
+ for (md = dbi_first(iter); dbi_exists(iter); md = dbi_next(iter)) {
va_list argscopy;
int ret;
@@ -2159,9 +2298,9 @@ void map_vforeachnpc(int (*func)(struct npc_data* nd, va_list args), va_list arg
struct block_list* bl;
iter = db_iterator(map->id_db);
- for( bl = (struct block_list*)dbi_first(iter); dbi_exists(iter); bl = (struct block_list*)dbi_next(iter) ) {
- if( bl->type == BL_NPC ) {
- struct npc_data* nd = (struct npc_data*)bl;
+ for (bl = dbi_first(iter); dbi_exists(iter); bl = dbi_next(iter)) {
+ if (bl->type == BL_NPC) {
+ struct npc_data *nd = BL_UCAST(BL_NPC, bl);
va_list argscopy;
int ret;
@@ -2193,7 +2332,7 @@ void map_vforeachregen(int (*func)(struct block_list* bl, va_list args), va_list
struct block_list* bl;
iter = db_iterator(map->regen_db);
- for( bl = (struct block_list*)dbi_first(iter); dbi_exists(iter); bl = (struct block_list*)dbi_next(iter) ) {
+ for (bl = dbi_first(iter); dbi_exists(iter); bl = dbi_next(iter)) {
va_list argscopy;
int ret;
@@ -2224,7 +2363,7 @@ void map_vforeachiddb(int (*func)(struct block_list* bl, va_list args), va_list
struct block_list* bl;
iter = db_iterator(map->id_db);
- for( bl = (struct block_list*)dbi_first(iter); dbi_exists(iter); bl = (struct block_list*)dbi_next(iter) ) {
+ for (bl = dbi_first(iter); dbi_exists(iter); bl = dbi_next(iter)) {
va_list argscopy;
int ret;
@@ -2305,7 +2444,7 @@ struct block_list* mapit_first(struct s_mapiterator* iter) {
nullpo_retr(NULL,iter);
- for( bl = (struct block_list*)dbi_first(iter->dbi); bl != NULL; bl = (struct block_list*)dbi_next(iter->dbi) ) {
+ for (bl = dbi_first(iter->dbi); bl != NULL; bl = dbi_next(iter->dbi) ) {
if( MAPIT_MATCHES(iter,bl) )
break;// found match
}
@@ -2322,7 +2461,7 @@ struct block_list* mapit_last(struct s_mapiterator* iter) {
nullpo_retr(NULL,iter);
- for( bl = (struct block_list*)dbi_last(iter->dbi); bl != NULL; bl = (struct block_list*)dbi_prev(iter->dbi) ) {
+ for (bl = dbi_last(iter->dbi); bl != NULL; bl = dbi_prev(iter->dbi)) {
if( MAPIT_MATCHES(iter,bl) )
break;// found match
}
@@ -2340,7 +2479,7 @@ struct block_list* mapit_next(struct s_mapiterator* iter) {
nullpo_retr(NULL,iter);
for( ; ; ) {
- bl = (struct block_list*)dbi_next(iter->dbi);
+ bl = dbi_next(iter->dbi);
if( bl == NULL )
break;// end
if( MAPIT_MATCHES(iter,bl) )
@@ -2361,7 +2500,7 @@ struct block_list* mapit_prev(struct s_mapiterator* iter) {
nullpo_retr(NULL,iter);
for( ; ; ) {
- bl = (struct block_list*)dbi_prev(iter->dbi);
+ bl = dbi_prev(iter->dbi);
if( bl == NULL )
break;// end
if( MAPIT_MATCHES(iter,bl) )
@@ -2437,8 +2576,10 @@ void map_spawnmobs(int16 m) {
int map_removemobs_sub(struct block_list *bl, va_list ap)
{
- struct mob_data *md = (struct mob_data *)bl;
- nullpo_ret(md);
+ struct mob_data *md = NULL;
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
//When not to remove mob:
// doesn't respawn and is not a slave
@@ -5338,10 +5479,10 @@ int cleanup_sub(struct block_list *bl, va_list ap) {
switch(bl->type) {
case BL_PC:
- map->quit((struct map_session_data *) bl);
+ map->quit(BL_UCAST(BL_PC, bl));
break;
case BL_NPC:
- npc->unload((struct npc_data *)bl,false);
+ npc->unload(BL_UCAST(BL_NPC, bl), false);
break;
case BL_MOB:
unit->free(bl,CLR_OUTSIGHT);
@@ -5353,7 +5494,7 @@ int cleanup_sub(struct block_list *bl, va_list ap) {
map->clearflooritem(bl);
break;
case BL_SKILL:
- skill->delunit((struct skill_unit *) bl);
+ skill->delunit(BL_UCAST(BL_SKILL, bl));
break;
}
@@ -5384,7 +5525,7 @@ int do_final(void) {
//Ladies and babies first.
iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) )
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter)))
map->quit(sd);
mapit->free(iter);
@@ -5528,7 +5669,7 @@ void do_shutdown(void)
{
struct map_session_data* sd;
struct s_mapiterator* iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) )
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter)))
clif->GM_kick(NULL, sd);
mapit->free(iter);
sockt->flush_fifos();
@@ -6163,11 +6304,15 @@ void map_defaults(void) {
map->foreachininstance = map_foreachininstance;
map->id2sd = map_id2sd;
- map->id2md = map_id2md;
map->id2nd = map_id2nd;
+ map->id2md = map_id2md;
+ map->id2fi = map_id2fi;
+ map->id2cd = map_id2cd;
+ map->id2su = map_id2su;
+ map->id2pd = map_id2pd;
map->id2hd = map_id2hd;
map->id2mc = map_id2mc;
- map->id2cd = map_id2cd;
+ map->id2ed = map_id2ed;
map->id2bl = map_id2bl;
map->blid_exists = map_blid_exists;
map->mapindex2mapid = map_mapindex2mapid;
diff --git a/src/map/map.h b/src/map/map.h
index 896c12f23..4c74d352c 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -486,6 +486,7 @@ enum look {
LOOK_BODY,
LOOK_FLOOR,
LOOK_ROBE,
+ LOOK_BODY2,
};
// used by map_setcell()
@@ -827,8 +828,89 @@ typedef struct homun_data TBL_HOM;
typedef struct mercenary_data TBL_MER;
typedef struct elemental_data TBL_ELEM;
+/**
+ * Casts a block list to a specific type.
+ *
+ * @remark
+ * The `bl` argument may be evaluated more than once.
+ *
+ * @param type_ The block list type (using symbols from enum bl_type).
+ * @param bl The source block list to cast.
+ * @return The block list, cast to the correct type.
+ * @retval NULL if bl is the wrong type or NULL.
+ */
#define BL_CAST(type_, bl) \
- ( ((bl) == (struct block_list*)NULL || (bl)->type != (type_)) ? (T ## type_ *)NULL : (T ## type_ *)(bl) )
+ ( ((bl) == (struct block_list *)NULL || (bl)->type != (type_)) ? (T ## type_ *)NULL : (T ## type_ *)(bl) )
+
+/**
+ * Casts a const block list to a specific type.
+ *
+ * @remark
+ * The `bl` argument may be evaluated more than once.
+ *
+ * @param type_ The block list type (using symbols from enum bl_type).
+ * @param bl The source block list to cast.
+ * @return The block list, cast to the correct type.
+ * @retval NULL if bl is the wrong type or NULL.
+ */
+#define BL_CCAST(type_, bl) \
+ ( ((bl) == (const struct block_list *)NULL || (bl)->type != (type_)) ? (const T ## type_ *)NULL : (const T ## type_ *)(bl) )
+
+/**
+ * Helper function for `BL_UCAST`.
+ *
+ * @warning
+ * This function shouldn't be called on it own.
+ *
+ * The purpose of this function is to produce a compile-timer error if a non-bl
+ * object is passed to BL_UCAST. It's declared as static inline to let the
+ * compiler optimize out the function call overhead.
+ */
+static inline struct block_list *BL_UCAST_(struct block_list *bl)
+{
+ return bl;
+}
+
+/**
+ * Casts a block list to a specific type, without performing any type checks.
+ *
+ * @remark
+ * The `bl` argument is guaranteed to be evaluated once and only once.
+ *
+ * @param type_ The block list type (using symbols from enum bl_type).
+ * @param bl The source block list to cast.
+ * @return The block list, cast to the correct type.
+ */
+#define BL_UCAST(type_, bl) \
+ ((T ## type_ *)BL_UCAST_(bl))
+
+/**
+ * Helper function for `BL_UCCAST`.
+ *
+ * @warning
+ * This function shouldn't be called on it own.
+ *
+ * The purpose of this function is to produce a compile-timer error if a non-bl
+ * object is passed to BL_UCAST. It's declared as static inline to let the
+ * compiler optimize out the function call overhead.
+ */
+static inline const struct block_list *BL_UCCAST_(const struct block_list *bl)
+{
+ return bl;
+}
+
+/**
+ * Casts a const block list to a specific type, without performing any type checks.
+ *
+ * @remark
+ * The `bl` argument is guaranteed to be evaluated once and only once.
+ *
+ * @param type_ The block list type (using symbols from enum bl_type).
+ * @param bl The source block list to cast.
+ * @return The block list, cast to the correct type.
+ */
+#define BL_UCCAST(type_, bl) \
+ ((const T ## type_ *)BL_UCCAST_(bl))
struct charid_request {
struct charid_request* next;
@@ -1028,13 +1110,17 @@ END_ZEROED_BLOCK;
int (*vforeachininstance)(int (*func)(struct block_list*,va_list), int16 instance_id, int type, va_list ap);
int (*foreachininstance)(int (*func)(struct block_list*,va_list), int16 instance_id, int type,...);
- struct map_session_data * (*id2sd) (int id);
- struct mob_data * (*id2md) (int id);
- struct npc_data * (*id2nd) (int id);
- struct homun_data* (*id2hd) (int id);
- struct mercenary_data* (*id2mc) (int id);
- struct chat_data* (*id2cd) (int id);
- struct block_list * (*id2bl) (int id);
+ struct map_session_data *(*id2sd) (int id);
+ struct npc_data *(*id2nd) (int id);
+ struct mob_data *(*id2md) (int id);
+ struct flooritem_data *(*id2fi) (int id);
+ struct chat_data *(*id2cd) (int id);
+ struct skill_unit *(*id2su) (int id);
+ struct pet_data *(*id2pd) (int id);
+ struct homun_data *(*id2hd) (int id);
+ struct mercenary_data *(*id2mc) (int id);
+ struct elemental_data *(*id2ed) (int id);
+ struct block_list *(*id2bl) (int id);
bool (*blid_exists) (int id);
int16 (*mapindex2mapid) (unsigned short map_index);
int16 (*mapname2mapid) (const char* name);
diff --git a/src/map/mercenary.c b/src/map/mercenary.c
index fb801a8da..e6c911ef6 100644
--- a/src/map/mercenary.c
+++ b/src/map/mercenary.c
@@ -317,10 +317,11 @@ int merc_data_received(struct s_mercenary *merc, bool flag) {
db = &mercenary->db[i];
if( !sd->md ) {
- sd->md = md = (struct mercenary_data*)aCalloc(1,sizeof(struct mercenary_data));
+ CREATE(md, struct mercenary_data, 1);
md->bl.type = BL_MER;
md->bl.id = npc->get_new_npc_id();
md->devotion_flag = 0;
+ sd->md = md;
md->master = sd;
md->db = db;
diff --git a/src/map/mob.c b/src/map/mob.c
index 16b5417b9..37da81a15 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -274,7 +274,8 @@ int mob_parse_dataset(struct spawn_data *data)
* Generates the basic mob data using the spawn_data provided.
*------------------------------------------*/
struct mob_data* mob_spawn_dataset(struct spawn_data *data) {
- struct mob_data *md = (struct mob_data*)aCalloc(1, sizeof(struct mob_data));
+ struct mob_data *md = NULL;
+ CREATE(md, struct mob_data, 1);
md->bl.id= npc->get_new_npc_id();
md->bl.type = BL_MOB;
md->bl.m = data->m;
@@ -591,12 +592,9 @@ int mob_spawn_guardian_sub(int tid, int64 tick, int id, intptr_t data) {
if( bl == NULL ) //It is possible mob was already removed from map when the castle has no owner. [Skotlex]
return 0;
- if( bl->type != BL_MOB ) {
- ShowError("mob_spawn_guardian_sub: Block error!\n");
- return 0;
- }
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
- md = (struct mob_data*)bl;
nullpo_ret(md->guardian_data);
g = guild->search((int)data);
@@ -684,11 +682,9 @@ int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobnam
if( has_index && gc->guardian[guardian].id ) {
//Check if guardian already exists, refuse to spawn if so.
- struct mob_data *md2 = (TBL_MOB*)map->id2bl(gc->guardian[guardian].id);
- if (md2 && md2->bl.type == BL_MOB
- && md2->guardian_data
- && md2->guardian_data->number == guardian
- ) {
+ struct block_list *bl2 = map->id2bl(gc->guardian[guardian].id); // TODO: Why does this not use map->id2md?
+ struct mob_data *md2 = BL_CAST(BL_MOB, bl2);
+ if (md2 != NULL && md2->guardian_data != NULL && md2->guardian_data->number == guardian) {
ShowError("mob_spawn_guardian: Attempted to spawn guardian in position %d which already has a guardian (castle map %s)\n", guardian, map->list[m].name);
return 0;
}
@@ -794,17 +790,16 @@ int mob_can_reach(struct mob_data *md,struct block_list *bl,int range, int state
/*==========================================
* Links nearby mobs (supportive mobs)
*------------------------------------------*/
-int mob_linksearch(struct block_list *bl,va_list ap) {
- struct mob_data *md;
- int class_;
- struct block_list *target;
- int64 tick;
+int mob_linksearch(struct block_list *bl,va_list ap)
+{
+ struct mob_data *md = NULL;
+ int class_ = va_arg(ap, int);
+ struct block_list *target = va_arg(ap, struct block_list *);
+ int64 tick = va_arg(ap, int64);
nullpo_ret(bl);
- md=(struct mob_data *)bl;
- class_ = va_arg(ap, int);
- target = va_arg(ap, struct block_list *);
- tick = va_arg(ap, int64);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
if (md->class_ == class_ && DIFF_TICK(md->last_linktime, tick) < MIN_MOBLINKTIME
&& !md->target_id)
@@ -825,7 +820,7 @@ int mob_linksearch(struct block_list *bl,va_list ap) {
* mob spawn with delay (timer function)
*------------------------------------------*/
int mob_delayspawn(int tid, int64 tick, int id, intptr_t data) {
- struct block_list* bl = map->id2bl(id);
+ struct block_list* bl = map->id2bl(id); // TODO: Why does this not use map->bl2md?
struct mob_data* md = BL_CAST(BL_MOB, bl);
if( md )
@@ -889,7 +884,7 @@ int mob_count_sub(struct block_list *bl, va_list ap) {
int mobid[10] = { 0 }, i;
ARR_FIND(0, 10, i, (mobid[i] = va_arg(ap, int)) == 0); //fetch till 0
if (mobid[0]) { //if there one let's check it otherwise go backward
- TBL_MOB *md = BL_CAST(BL_MOB, bl);
+ struct mob_data *md = BL_CAST(BL_MOB, bl);
nullpo_ret(md);
ARR_FIND(0, 10, i, md->class_ == mobid[i]);
return (i < 10) ? 1 : 0;
@@ -1073,8 +1068,7 @@ int mob_ai_sub_hard_activesearch(struct block_list *bl,va_list ap)
switch (bl->type) {
case BL_PC:
- if (((TBL_PC*)bl)->state.gangsterparadise &&
- !(status_get_mode(&md->bl)&MD_BOSS))
+ if (BL_UCCAST(BL_PC, bl)->state.gangsterparadise && !(status_get_mode(&md->bl)&MD_BOSS))
return 0; //Gangster paradise protection.
default:
if (battle_config.hom_setting&0x4 &&
@@ -1174,17 +1168,15 @@ int mob_ai_sub_hard_lootsearch(struct block_list *bl,va_list ap)
}
int mob_warpchase_sub(struct block_list *bl,va_list ap) {
- struct block_list *target;
- struct npc_data **target_nd;
- struct npc_data *nd;
- int *min_distance;
int cur_distance;
+ struct block_list *target = va_arg(ap, struct block_list *);
+ struct npc_data **target_nd = va_arg(ap, struct npc_data **);
+ int *min_distance = va_arg(ap, int *);
+ struct npc_data *nd = NULL;
- target= va_arg(ap, struct block_list*);
- target_nd= va_arg(ap, struct npc_data**);
- min_distance= va_arg(ap, int*);
-
- nd = (TBL_NPC*) bl;
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_NPC);
+ nd = BL_UCAST(BL_NPC, bl);
if(nd->subtype != WARP)
return 0; //Not a warp
@@ -1440,14 +1432,13 @@ bool mob_ai_sub_hard(struct mob_data *md, int64 tick) {
if (md->target_id) {
//Check validity of current target. [Skotlex]
+ struct map_session_data *tsd = NULL;
tbl = map->id2bl(md->target_id);
- if (!tbl || tbl->m != md->bl.m
+ tsd = BL_CAST(BL_PC, tbl);
+ if (tbl == NULL || tbl->m != md->bl.m
|| (md->ud.attacktimer == INVALID_TIMER && !status->check_skilluse(&md->bl, tbl, 0, 0))
|| (md->ud.walktimer != INVALID_TIMER && !(battle_config.mob_ai&0x1) && !check_distance_bl(&md->bl, tbl, md->min_chase))
- || ( tbl->type == BL_PC
- && ((((TBL_PC*)tbl)->state.gangsterparadise && !(mode&MD_BOSS))
- || ((TBL_PC*)tbl)->invincible_timer != INVALID_TIMER)
- )
+ || (tsd != NULL && ((tsd->state.gangsterparadise && !(mode&MD_BOSS)) || tsd->invincible_timer != INVALID_TIMER))
) {
//No valid target
if (mob->warpchase(md, tbl))
@@ -1580,7 +1571,7 @@ bool mob_ai_sub_hard(struct mob_data *md, int64 tick) {
//Target exists, attack or loot as applicable.
if (tbl->type == BL_ITEM) {
//Loot time.
- struct flooritem_data *fitem;
+ struct flooritem_data *fitem = BL_UCAST(BL_ITEM, tbl);
if (md->ud.target == tbl->id && md->ud.walktimer != INVALID_TIMER)
return true; //Already locked.
if (md->lootitem == NULL) {
@@ -1606,7 +1597,6 @@ bool mob_ai_sub_hard(struct mob_data *md, int64 tick) {
if (md->ud.attacktimer != INVALID_TIMER)
return true; //Busy attacking?
- fitem = (struct flooritem_data *)tbl;
//Logs items, taken by (L)ooter Mobs [Lupus]
logs->pick_mob(md, LOG_TYPE_LOOT, fitem->item_data.amount, &fitem->item_data, NULL);
@@ -1687,9 +1677,15 @@ bool mob_ai_sub_hard(struct mob_data *md, int64 tick) {
return true;
}
-int mob_ai_sub_hard_timer(struct block_list *bl, va_list ap) {
- struct mob_data *md = (struct mob_data*)bl;
+int mob_ai_sub_hard_timer(struct block_list *bl, va_list ap)
+{
+ struct mob_data *md = NULL;
int64 tick = va_arg(ap, int64);
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
+
if (mob->ai_sub_hard(md, tick)) {
//Hard AI triggered.
if(!md->state.spotted)
@@ -1847,7 +1843,7 @@ int mob_delay_item_drop(int tid, int64 tick, int id, intptr_t data) {
*------------------------------------------*/
void mob_item_drop(struct mob_data *md, struct item_drop_list *dlist, struct item_drop *ditem, int loot, int drop_rate, unsigned short flag)
{
- TBL_PC* sd;
+ struct map_session_data *sd = NULL;
//Logs items, dropped by mobs [Lupus]
logs->pick_mob(md, loot?LOG_TYPE_LOOT:LOG_TYPE_PICKDROP_MONSTER, -ditem->item_data.amount, &ditem->item_data, NULL);
@@ -1878,7 +1874,7 @@ void mob_item_drop(struct mob_data *md, struct item_drop_list *dlist, struct ite
}
int mob_timer_delete(int tid, int64 tick, int id, intptr_t data) {
- struct block_list* bl = map->id2bl(id);
+ struct block_list* bl = map->id2bl(id); // TODO: Why does this not use map->id2md?
struct mob_data* md = BL_CAST(BL_MOB, bl);
if( md )
@@ -1900,13 +1896,13 @@ int mob_timer_delete(int tid, int64 tick, int id, intptr_t data) {
*------------------------------------------*/
int mob_deleteslave_sub(struct block_list *bl,va_list ap)
{
- struct mob_data *md;
- int id;
+ struct mob_data *md = NULL;
+ int id = va_arg(ap, int);
nullpo_ret(bl);
- nullpo_ret(md = (struct mob_data *)bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
- id=va_arg(ap,int);
if(md->master_id > 0 && md->master_id == id )
status_kill(bl);
return 0;
@@ -1945,7 +1941,7 @@ void mob_log_damage(struct mob_data *md, struct block_list *src, int damage)
{
case BL_PC:
{
- struct map_session_data *sd = (TBL_PC*)src;
+ const struct map_session_data *sd = BL_UCCAST(BL_PC, src);
char_id = sd->status.char_id;
if( damage )
md->attacked_id = src->id;
@@ -1953,7 +1949,7 @@ void mob_log_damage(struct mob_data *md, struct block_list *src, int damage)
}
case BL_HOM:
{
- struct homun_data *hd = (TBL_HOM*)src;
+ const struct homun_data *hd = BL_UCCAST(BL_HOM, src);
flag = MDLF_HOMUN;
if( hd->master )
char_id = hd->master->status.char_id;
@@ -1963,7 +1959,7 @@ void mob_log_damage(struct mob_data *md, struct block_list *src, int damage)
}
case BL_MER:
{
- struct mercenary_data *mer = (TBL_MER*)src;
+ const struct mercenary_data *mer = BL_UCCAST(BL_MER, src);
if( mer->master )
char_id = mer->master->status.char_id;
if( damage )
@@ -1972,7 +1968,7 @@ void mob_log_damage(struct mob_data *md, struct block_list *src, int damage)
}
case BL_PET:
{
- struct pet_data *pd = (TBL_PET*)src;
+ const struct pet_data *pd = BL_UCCAST(BL_PET, src);
flag = MDLF_PET;
if( pd->msd )
{
@@ -1984,7 +1980,7 @@ void mob_log_damage(struct mob_data *md, struct block_list *src, int damage)
}
case BL_MOB:
{
- struct mob_data* md2 = (TBL_MOB*)src;
+ const struct mob_data *md2 = BL_UCCAST(BL_MOB, src);
if (md2->special_state.ai != AI_NONE && md2->master_id) {
struct map_session_data* msd = map->id2sd(md2->master_id);
if( msd )
@@ -2001,7 +1997,7 @@ void mob_log_damage(struct mob_data *md, struct block_list *src, int damage)
}
case BL_ELEM:
{
- struct elemental_data *ele = (TBL_ELEM*)src;
+ const struct elemental_data *ele = BL_UCCAST(BL_ELEM, src);
if( ele->master )
char_id = ele->master->status.char_id;
if( damage )
@@ -2098,14 +2094,15 @@ void mob_damage(struct mob_data *md, struct block_list *src, int damage) {
*------------------------------------------*/
int mob_dead(struct mob_data *md, struct block_list *src, int type) {
struct status_data *mstatus;
- struct map_session_data *sd = NULL, *tmpsd[DAMAGELOG_SIZE];
- struct map_session_data *mvp_sd = NULL, *second_sd = NULL, *third_sd = NULL;
+ struct map_session_data *sd = BL_CAST(BL_PC, src);
+ struct map_session_data *tmpsd[DAMAGELOG_SIZE] = { NULL };
+ struct map_session_data *mvp_sd = sd, *second_sd = NULL, *third_sd = NULL;
struct {
struct party_data *p;
int id,zeny;
unsigned int base_exp,job_exp;
- } pt[DAMAGELOG_SIZE];
+ } pt[DAMAGELOG_SIZE] = { { 0 } };
int i, temp, count, m = md->bl.m;
int dmgbltypes = 0; // bitfield of all bl types, that caused damage to the mob and are eligible for exp distribution
unsigned int mvp_damage;
@@ -2114,12 +2111,6 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) {
mstatus = &md->status;
- if( src && src->type == BL_PC )
- {
- sd = (struct map_session_data *)src;
- mvp_sd = sd;
- }
-
if( md->guardian_data && md->guardian_data->number >= 0 && md->guardian_data->number < MAX_GUARDIANS )
guild->castledatasave(md->guardian_data->castle->castle_id, 10+md->guardian_data->number,0);
@@ -2131,13 +2122,10 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) {
map->freeblock_lock();
- memset(pt,0,sizeof(pt));
-
- if(src && src->type == BL_MOB)
- mob->unlocktarget((struct mob_data *)src,tick);
+ if (src != NULL && src->type == BL_MOB)
+ mob->unlocktarget(BL_UCAST(BL_MOB, src), tick);
// filter out entries not eligible for exp distribution
- memset(tmpsd,0,sizeof(tmpsd));
for(i = 0, count = 0, mvp_damage = 0; i < DAMAGELOG_SIZE && md->dmglog[i].id; i++) {
struct map_session_data* tsd = map->charid2sd(md->dmglog[i].id);
@@ -2582,10 +2570,10 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) {
md->status.hp = 0; //So that npc_event invoked functions KNOW that mob is dead
if( src ) {
switch( src->type ) {
- case BL_PET: sd = ((TBL_PET*)src)->msd; break;
- case BL_HOM: sd = ((TBL_HOM*)src)->master; break;
- case BL_MER: sd = ((TBL_MER*)src)->master; break;
- case BL_ELEM: sd = ((TBL_ELEM*)src)->master; break;
+ case BL_PET: sd = BL_UCAST(BL_PET, src)->msd; break;
+ case BL_HOM: sd = BL_UCAST(BL_HOM, src)->master; break;
+ case BL_MER: sd = BL_UCAST(BL_MER, src)->master; break;
+ case BL_ELEM: sd = BL_UCAST(BL_ELEM, src)->master; break;
}
}
@@ -2843,13 +2831,18 @@ void mob_heal(struct mob_data *md, unsigned int heal)
/*==========================================
* Added by RoVeRT
*------------------------------------------*/
-int mob_warpslave_sub(struct block_list *bl,va_list ap) {
- struct mob_data *md=(struct mob_data *)bl;
+int mob_warpslave_sub(struct block_list *bl, va_list ap)
+{
+ struct mob_data *md = NULL;
struct block_list *master;
short x,y,range=0;
master = va_arg(ap, struct block_list*);
range = va_arg(ap, int);
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
+
if(md->master_id!=master->id)
return 0;
@@ -2873,14 +2866,16 @@ int mob_warpslave(struct block_list *bl, int range) {
/*==========================================
* Counts slave sub, currently checking if mob master is the given ID.
*------------------------------------------*/
-int mob_countslave_sub(struct block_list *bl,va_list ap)
+int mob_countslave_sub(struct block_list *bl, va_list ap)
{
- int id;
- struct mob_data *md;
- id=va_arg(ap,int);
+ int id = va_arg(ap, int);
+ struct mob_data *md = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
- md = (struct mob_data *)bl;
- if( md->master_id==id )
+ if (md->master_id == id)
return 1;
return 0;
}
@@ -3064,11 +3059,12 @@ struct block_list *mob_getmasterhpltmaxrate(struct mob_data *md,int rate) {
int mob_getfriendstatus_sub(struct block_list *bl,va_list ap)
{
int cond1,cond2;
- struct mob_data **fr, *md, *mmd;
+ struct mob_data **fr = NULL, *md = NULL, *mmd = NULL;
int flag=0;
nullpo_ret(bl);
- nullpo_ret(md=(struct mob_data *)bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
nullpo_ret(mmd=va_arg(ap,struct mob_data *));
if( mmd->bl.id == bl->id && !(battle_config.mob_ai&0x10) )
diff --git a/src/map/npc.c b/src/map/npc.c
index 09e5c0f46..411e52c29 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -147,8 +147,13 @@ int npc_get_new_npc_id(void) {
}
}
-int npc_isnear_sub(struct block_list* bl, va_list args) {
- struct npc_data *nd = (struct npc_data*)bl;
+int npc_isnear_sub(struct block_list *bl, va_list args)
+{
+ const struct npc_data *nd = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_NPC);
+ nd = BL_UCCAST(BL_NPC, bl);
if( nd->option & (OPTION_HIDE|OPTION_INVISIBLE) )
return 0;
@@ -212,9 +217,9 @@ int npc_enable_sub(struct block_list *bl, va_list ap)
nullpo_ret(bl);
nullpo_ret(nd=va_arg(ap,struct npc_data *));
- if(bl->type == BL_PC)
- {
- TBL_PC *sd = (TBL_PC*)bl;
+
+ if (bl->type == BL_PC) {
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
if (nd->option&OPTION_INVISIBLE)
return 1;
@@ -272,9 +277,9 @@ int npc_enable(const char* name, int flag)
/*==========================================
* NPC lookup (get npc_data through npcname)
*------------------------------------------*/
-struct npc_data* npc_name2id(const char* name)
+struct npc_data *npc_name2id(const char *name)
{
- return (struct npc_data *) strdb_get(npc->name_db, name);
+ return strdb_get(npc->name_db, name);
}
/**
* For the Secure NPC Timeout option (check config/Secure.h) [RR]
@@ -566,10 +571,11 @@ struct timer_event_data {
/*==========================================
* triger 'OnTimerXXXX' events
*------------------------------------------*/
-int npc_timerevent(int tid, int64 tick, int id, intptr_t data) {
+int npc_timerevent(int tid, int64 tick, int id, intptr_t data)
+{
int old_rid, old_timer;
int64 old_tick;
- struct npc_data* nd=(struct npc_data *)map->id2bl(id);
+ struct npc_data *nd = map->id2nd(id);
struct npc_timerevent_list *te;
struct timer_event_data *ted = (struct timer_event_data*)data;
struct map_session_data *sd=NULL;
@@ -736,14 +742,13 @@ void npc_timerevent_quit(struct map_session_data* sd)
}
// Delete timer
- nd = (struct npc_data *)map->id2bl(td->id);
+ nd = map->id2nd(td->id);
ted = (struct timer_event_data*)td->data;
timer->delete(sd->npc_timer_id, npc->timerevent);
sd->npc_timer_id = INVALID_TIMER;
// Execute OnTimerQuit
- if( nd && nd->bl.type == BL_NPC )
- {
+ if (nd != NULL) {
char buf[EVENT_NAME_LENGTH];
struct event_data *ev;
@@ -1027,15 +1032,14 @@ int npc_touch_areanpc(struct map_session_data* sd, int16 m, int16 x, int16 y)
*------------------------------------------*/
int npc_untouch_areanpc(struct map_session_data* sd, int16 m, int16 x, int16 y)
{
- struct npc_data *nd;
+ struct npc_data *nd = NULL;
nullpo_retr(1, sd);
if (!sd->areanpc_id)
return 0;
- nd = (struct npc_data *) map->id2bl(sd->areanpc_id);
- if (!nd)
- {
+ nd = map->id2nd(sd->areanpc_id);
+ if (nd == NULL) {
sd->areanpc_id = 0;
return 1;
}
@@ -1166,13 +1170,13 @@ int npc_check_areanpc(int flag, int16 m, int16 x, int16 y, int16 range) {
*------------------------------------------*/
struct npc_data* npc_checknear(struct map_session_data* sd, struct block_list* bl)
{
- struct npc_data *nd;
+ struct npc_data *nd = BL_CAST(BL_NPC, bl);
int distance = AREA_SIZE + 1;
nullpo_retr(NULL, sd);
- if (bl == NULL) return NULL;
- if (bl->type != BL_NPC) return NULL;
- nd = (TBL_NPC*)bl;
+
+ if (nd == NULL)
+ return NULL;
if (sd->npc_id == bl->id)
return nd;
@@ -1297,8 +1301,8 @@ int npc_scriptcont(struct map_session_data* sd, int id, bool closing) {
nullpo_retr(1, sd);
if( id != sd->npc_id ){
- TBL_NPC* nd_sd=(TBL_NPC*)map->id2bl(sd->npc_id);
- TBL_NPC* nd = BL_CAST(BL_NPC, target);
+ struct npc_data *nd_sd = map->id2nd(sd->npc_id);
+ struct npc_data *nd = BL_CAST(BL_NPC, target);
ShowDebug("npc_scriptcont: %s (sd->npc_id=%d) is not %s (id=%d).\n",
nd_sd?(char*)nd_sd->name:"'Unknown NPC'", (int)sd->npc_id,
nd?(char*)nd->name:"'Unknown NPC'", (int)id);
@@ -1397,7 +1401,8 @@ int npc_cashshop_buylist(struct map_session_data *sd, int points, int count, uns
if( points < 0 )
return ERROR_TYPE_MONEY;
- if( !(nd = (struct npc_data *)map->id2bl(sd->npc_shopid)) )
+ nd = map->id2nd(sd->npc_shopid);
+ if (nd == NULL)
return ERROR_TYPE_NPC;
if( nd->subtype != CASHSHOP ) {
@@ -1631,11 +1636,10 @@ void npc_trader_update(int master) {
CREATE(master_nd->u.scr.shop,struct npc_shop_data,1);
iter = db_iterator(map->id_db);
- for( bl = (struct block_list*)dbi_first(iter); dbi_exists(iter); bl = (struct block_list*)dbi_next(iter) ) {
- if( bl->type == BL_NPC ) {
- struct npc_data* nd = (struct npc_data*)bl;
-
- if( nd->src_id == master ) {
+ for (bl = dbi_first(iter); dbi_exists(iter); bl = dbi_next(iter)) {
+ if (bl->type == BL_NPC) {
+ struct npc_data *nd = BL_UCAST(BL_NPC, bl);
+ if (nd->src_id == master) {
nd->u.scr.shop = master_nd->u.scr.shop;
}
}
@@ -1720,7 +1724,8 @@ int npc_cashshop_buy(struct map_session_data *sd, int nameid, int amount, int po
if( sd->state.trading )
return ERROR_TYPE_EXCHANGE;
- if( !(nd = (struct npc_data *)map->id2bl(sd->npc_shopid)) )
+ nd = map->id2nd(sd->npc_shopid);
+ if (nd == NULL)
return ERROR_TYPE_NPC;
if( (item = itemdb->exists(nameid)) == NULL )
@@ -2283,11 +2288,12 @@ int npc_unload(struct npc_data* nd, bool single)
if( single && nd->bl.m != -1 )
map->remove_questinfo(nd->bl.m,nd);
- if( nd->src_id == 0 && ( nd->subtype == SHOP || nd->subtype == CASHSHOP ) ) //src check for duplicate shops [Orcao]
+ if (nd->src_id == 0 && ( nd->subtype == SHOP || nd->subtype == CASHSHOP)) {
+ //src check for duplicate shops [Orcao]
aFree(nd->u.shop.shop_item);
- else if( nd->subtype == SCRIPT ) {
- struct s_mapiterator* iter;
- struct block_list* bl;
+ } else if (nd->subtype == SCRIPT) {
+ struct s_mapiterator *iter;
+ struct map_session_data *sd = NULL;
if( single ) {
npc->ev_db->foreach(npc->ev_db,npc->unload_ev,nd->exname); //Clean up all events related
@@ -2295,9 +2301,8 @@ int npc_unload(struct npc_data* nd, bool single)
}
iter = mapit_geteachpc();
- for( bl = (struct block_list*)mapit->first(iter); mapit->exists(iter); bl = (struct block_list*)mapit->next(iter) ) {
- struct map_session_data *sd = ((TBL_PC*)bl);
- if( sd && sd->npc_timer_id != INVALID_TIMER ) {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
+ if (sd->npc_timer_id != INVALID_TIMER ) {
const struct TimerData *td = timer->get(sd->npc_timer_id);
if( td && td->id != nd->bl.id )
@@ -2569,8 +2574,7 @@ int npc_parseview(const char* w4, const char* start, const char* buffer, const c
} else {
// NPC has an ID specified for view id.
val = atoi(w4);
- if (val != FAKE_NPC) // TODO: Add this to the constants table and replace -1 with FAKE_NPC in the scripts, then remove this check.
- ShowWarning("npc_parseview: Use of numeric NPC view IDs is deprecated and may be removed in a future update. Please use NPC view constants instead. ID '%d' specified in file '%s', line '%d'.\n", val, filepath, strline(buffer, start-buffer));
+ ShowWarning("npc_parseview: Use of numeric NPC view IDs is deprecated and may be removed in a future update. Please use NPC view constants instead. ID '%d' specified in file '%s', line '%d'.\n", val, filepath, strline(buffer, start-buffer));
}
return val;
@@ -2947,7 +2951,7 @@ const char* npc_skip_script(const char* start, const char* buffer, const char* f
*
* Example:
* @code
- * -<TAB>script<TAB><NPC Name><TAB>-1,{
+ * -<TAB>script<TAB><NPC Name><TAB>FAKE_NPC,{
* <code>
* }
* <map name>,<x>,<y>,<facing><TAB>script<TAB><NPC Name><TAB><sprite id>,{
@@ -3431,10 +3435,17 @@ void npc_setcells(struct npc_data* nd) {
}
}
-int npc_unsetcells_sub(struct block_list* bl, va_list ap) {
- struct npc_data *nd = (struct npc_data*)bl;
- int id = va_arg(ap,int);
- if (nd->bl.id == id) return 0;
+int npc_unsetcells_sub(struct block_list *bl, va_list ap)
+{
+ struct npc_data *nd = NULL;
+ int id = va_arg(ap, int);
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_NPC);
+ nd = BL_UCAST(BL_NPC, bl);
+
+ if (nd->bl.id == id)
+ return 0;
npc->setcells(nd);
return 1;
}
@@ -4664,11 +4675,11 @@ int npc_reload(void) {
//Remove all npcs/mobs. [Skotlex]
iter = mapit_geteachiddb();
- for( bl = (struct block_list*)mapit->first(iter); mapit->exists(iter); bl = (struct block_list*)mapit->next(iter) ) {
+ for (bl = mapit->first(iter); mapit->exists(iter); bl = mapit->next(iter)) {
switch(bl->type) {
case BL_NPC:
if( bl->id != npc->fake_nd->bl.id )// don't remove fake_nd
- npc->unload((struct npc_data *)bl, false);
+ npc->unload(BL_UCAST(BL_NPC, bl), false);
break;
case BL_MOB:
unit->free(bl,CLR_OUTSIGHT);
@@ -4879,7 +4890,7 @@ int do_init_npc(bool minimal) {
}
// Init dummy NPC
- npc->fake_nd = (struct npc_data *)aCalloc(1,sizeof(struct npc_data));
+ CREATE(npc->fake_nd, struct npc_data, 1);
npc->fake_nd->bl.m = -1;
npc->fake_nd->bl.id = npc->get_new_npc_id();
npc->fake_nd->class_ = FAKE_NPC;
diff --git a/src/map/npc_chat.c b/src/map/npc_chat.c
index 8950df1ee..fef3ba99b 100644
--- a/src/map/npc_chat.c
+++ b/src/map/npc_chat.c
@@ -339,15 +339,20 @@ void npc_chat_finalize(struct npc_data* nd)
*/
int npc_chat_sub(struct block_list* bl, va_list ap)
{
- struct npc_data *nd = (struct npc_data *) bl;
- struct npc_parse *npcParse = nd->chatdb;
- char* msg;
+ struct npc_data *nd = NULL;
+ struct npc_parse *npcParse = NULL;
+ char *msg;
int len, i;
struct map_session_data* sd;
struct npc_label_list* lst;
struct pcrematch_set* pcreset;
struct pcrematch_entry* e;
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_NPC);
+ nd = BL_UCAST(BL_NPC, bl);
+ npcParse = nd->chatdb;
+
// Not interested in anything you might have to say...
if (npcParse == NULL || npcParse->active == NULL)
return 0;
@@ -395,38 +400,46 @@ int npc_chat_sub(struct block_list* bl, va_list ap)
}
// Various script built-ins used to support these functions
-BUILDIN(defpattern) {
+BUILDIN(defpattern)
+{
int setid = script_getnum(st,2);
const char* pattern = script_getstr(st,3);
const char* label = script_getstr(st,4);
- struct npc_data* nd = (struct npc_data *)map->id2bl(st->oid);
+ struct npc_data *nd = map->id2nd(st->oid);
+ nullpo_retr(false, nd);
npc_chat->def_pattern(nd, setid, pattern, label);
return true;
}
-BUILDIN(activatepset) {
+BUILDIN(activatepset)
+{
int setid = script_getnum(st,2);
- struct npc_data* nd = (struct npc_data *)map->id2bl(st->oid);
+ struct npc_data *nd = map->id2nd(st->oid);
+ nullpo_retr(false, nd);
npc_chat->activate_pcreset(nd, setid);
return true;
}
-BUILDIN(deactivatepset) {
+BUILDIN(deactivatepset)
+{
int setid = script_getnum(st,2);
- struct npc_data* nd = (struct npc_data *)map->id2bl(st->oid);
+ struct npc_data *nd = map->id2nd(st->oid);
+ nullpo_retr(false, nd);
npc_chat->deactivate_pcreset(nd, setid);
return true;
}
-BUILDIN(deletepset) {
+BUILDIN(deletepset)
+{
int setid = script_getnum(st,2);
- struct npc_data* nd = (struct npc_data *)map->id2bl(st->oid);
+ struct npc_data *nd = map->id2nd(st->oid);
+ nullpo_retr(false, nd);
npc_chat->delete_pcreset(nd, setid);
diff --git a/src/map/party.c b/src/map/party.c
index 1b5989f41..a3e59c281 100644
--- a/src/map/party.c
+++ b/src/map/party.c
@@ -96,8 +96,9 @@ struct map_session_data* party_getavailablesd(struct party_data *p)
/*==========================================
* Retrieves and validates the sd pointer for this party member [Skotlex]
*------------------------------------------*/
-TBL_PC* party_sd_check(int party_id, int account_id, int char_id) {
- TBL_PC* sd = map->id2sd(account_id);
+struct map_session_data *party_sd_check(int party_id, int account_id, int char_id)
+{
+ struct map_session_data *sd = map->id2sd(account_id);
if (!(sd && sd->status.char_id == char_id))
return NULL;
@@ -954,8 +955,8 @@ int party_exp_share(struct party_data* p, struct block_list* src, unsigned int b
for (i = 0; i < c; i++) {
#ifdef RENEWAL_EXP
- if( !(src && src->type == BL_MOB && ((TBL_MOB*)src)->db->mexp) ){
- struct mob_data *md = (TBL_MOB*)src;
+ struct mob_data *md = BL_CAST(BL_MOB, src);
+ if (md != NULL && md->db->mexp == 0) {
int rate = pc->level_penalty_mod(md->level - (sd[i])->status.base_level, md->status.race, md->status.mode, 1);
base_exp = (unsigned int)cap_value(base_exp_bonus * rate / 100, 1, UINT_MAX);
@@ -973,16 +974,16 @@ int party_exp_share(struct party_data* p, struct block_list* src, unsigned int b
//Does party loot. first_charid holds the charid of the player who has time priority to take the item.
int party_share_loot(struct party_data* p, struct map_session_data* sd, struct item* item_data, int first_charid)
{
- TBL_PC* target = NULL;
+ struct map_session_data *target = NULL;
int i;
if (p && p->party.item&2 && (first_charid || !(battle_config.party_share_type&1)))
{
//item distribution to party members.
if (battle_config.party_share_type&2) {
//Round Robin
- TBL_PC* psd;
i = p->itemc;
do {
+ struct map_session_data *psd;
i++;
if (i >= MAX_PARTY)
i = 0; // reset counter to 1st person in party so it'll stop when it reaches "itemc"
@@ -1000,7 +1001,7 @@ int party_share_loot(struct party_data* p, struct map_session_data* sd, struct i
} while (i != p->itemc);
} else {
//Random pick
- TBL_PC* psd[MAX_PARTY];
+ struct map_session_data *psd[MAX_PARTY];
int count = 0;
//Collect pick candidates
for (i = 0; i < MAX_PARTY; i++) {
@@ -1048,7 +1049,11 @@ int party_send_dot_remove(struct map_session_data *sd)
// party_foreachsamemap(party->sub_count, sd, 0, &c);
int party_sub_count(struct block_list *bl, va_list ap)
{
- struct map_session_data *sd = (TBL_PC *)bl;
+ const struct map_session_data *sd = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCCAST(BL_PC, bl);
if (sd->state.autotrade)
return 0;
@@ -1109,8 +1114,13 @@ int party_vforeachsamemap(int (*func)(struct block_list*,va_list), struct map_se
}
// Special check for Minstrel's and Wanderer's chorus skills.
-int party_sub_count_chorus(struct block_list *bl, va_list ap) {
- struct map_session_data *sd = (TBL_PC *)bl;
+int party_sub_count_chorus(struct block_list *bl, va_list ap)
+{
+ const struct map_session_data *sd = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCCAST(BL_PC, bl);
if (sd->state.autotrade)
return 0;
diff --git a/src/map/party.h b/src/map/party.h
index eb3442b92..828916b88 100644
--- a/src/map/party.h
+++ b/src/map/party.h
@@ -21,7 +21,6 @@
#ifndef MAP_PARTY_H
#define MAP_PARTY_H
-#include "map/map.h" // TBL_PC
#include "common/hercules.h"
#include "common/db.h"
#include "common/mmo.h" // struct party
@@ -31,7 +30,9 @@
#define PARTY_BOOKING_JOBS 6
#define PARTY_BOOKING_RESULTS 10
+struct block_list;
struct hplugin_data_store;
+struct map_session_data;
struct party_member_data {
struct map_session_data *sd;
@@ -141,7 +142,7 @@ struct party_interface {
int (*foreachsamemap) (int (*func)(struct block_list *,va_list),struct map_session_data *sd,int range,...);
int (*send_xy_timer) (int tid, int64 tick, int id, intptr_t data);
void (*fill_member) (struct party_member* member, struct map_session_data* sd, unsigned int leader);
- TBL_PC* (*sd_check) (int party_id, int account_id, int char_id);
+ struct map_session_data *(*sd_check) (int party_id, int account_id, int char_id);
void (*check_state) (struct party_data *p);
struct party_booking_ad_info* (*create_booking_data) (void);
int (*db_final) (DBKey key, DBData *data, va_list ap);
diff --git a/src/map/pc.c b/src/map/pc.c
index d697cd9f4..2dfd9519b 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2012-2015 Hercules Dev Team
+ * Copyright (C) 2012-2016 Hercules Dev Team
* Copyright (C) Athena Dev Teams
*
* Hercules is free software: you can redistribute it and/or modify
@@ -123,10 +123,11 @@ bool pc_should_log_commands(struct map_session_data *sd)
return pcg->should_log_commands(sd->group);
}
-int pc_invincible_timer(int tid, int64 tick, int id, intptr_t data) {
- struct map_session_data *sd;
+int pc_invincible_timer(int tid, int64 tick, int id, intptr_t data)
+{
+ struct map_session_data *sd = map->id2sd(id);
- if( (sd=(struct map_session_data *)map->id2sd(id)) == NULL || sd->bl.type!=BL_PC )
+ if (sd == NULL)
return 1;
if(sd->invincible_timer != tid){
@@ -162,10 +163,10 @@ void pc_delinvincibletimer(struct map_session_data* sd)
}
int pc_spiritball_timer(int tid, int64 tick, int id, intptr_t data) {
- struct map_session_data *sd;
+ struct map_session_data *sd = map->id2sd(id);
int i;
- if( (sd=(struct map_session_data *)map->id2sd(id)) == NULL || sd->bl.type!=BL_PC )
+ if (sd == NULL)
return 1;
if( sd->spiritball <= 0 )
@@ -286,14 +287,17 @@ int pc_delspiritball(struct map_session_data *sd,int count,int type)
}
return 0;
}
-int pc_check_banding( struct block_list *bl, va_list ap ) {
+int pc_check_banding(struct block_list *bl, va_list ap)
+{
int *c, *b_sd;
struct block_list *src;
- struct map_session_data *tsd;
+ const struct map_session_data *tsd;
struct status_change *sc;
nullpo_ret(bl);
- nullpo_ret(tsd = (struct map_session_data*)bl);
+ Assert_ret(bl->type == BL_PC);
+ tsd = BL_UCCAST(BL_PC, bl);
+
nullpo_ret(src = va_arg(ap,struct block_list *));
c = va_arg(ap,int *);
b_sd = va_arg(ap, int *);
@@ -596,6 +600,10 @@ int pc_makesavestatus(struct map_session_data *sd)
if(!battle_config.save_clothcolor)
sd->status.clothes_color=0;
+ if (!battle_config.save_body_style)
+ sd->status.body = 0;
+
+
//Only copy the Cart/Peco/Falcon options, the rest are handled via
//status change load/saving. [Skotlex]
#ifdef NEW_CARTS
@@ -1067,6 +1075,9 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim
if( sd->status.clothes_color < MIN_CLOTH_COLOR || sd->status.clothes_color > MAX_CLOTH_COLOR ) {
sd->status.clothes_color = MIN_CLOTH_COLOR;
}
+ if (sd->status.body < MIN_BODY_STYLE || sd->status.body > MAX_BODY_STYLE) {
+ sd->status.body = MIN_BODY_STYLE;
+ }
//Initializations to null/0 unneeded since map_session_data was filled with 0 upon allocation.
if(!sd->status.hp) pc_setdead(sd);
@@ -1526,43 +1537,42 @@ int pc_calc_skilltree(struct map_session_data *sd)
do {
flag = 0;
- for( i = 0; i < MAX_SKILL_TREE && (id = pc->skill_tree[c][i].id) > 0; i++ ) {
- int f, idx = pc->skill_tree[c][i].idx;
- if( sd->status.skill[idx].id )
+ for (i = 0; i < MAX_SKILL_TREE && (id = pc->skill_tree[c][i].id) > 0; i++) {
+ int idx = pc->skill_tree[c][i].idx;
+ bool satisfied = true;
+ if (sd->status.skill[idx].id > 0)
continue; //Skill already known.
- f = 1;
- if(!battle_config.skillfree) {
+ if (!battle_config.skillfree) {
int j;
- for(j = 0; j < MAX_PC_SKILL_REQUIRE; j++) {
- int k;
- if((k=pc->skill_tree[c][i].need[j].id)) {
- int idx2 = pc->skill_tree[c][i].need[j].idx;
- if (sd->status.skill[idx2].id == 0 || sd->status.skill[idx2].flag == SKILL_FLAG_TEMPORARY || sd->status.skill[idx2].flag == SKILL_FLAG_PLAGIARIZED)
- k = 0; //Not learned.
- else if (sd->status.skill[idx2].flag >= SKILL_FLAG_REPLACED_LV_0) //Real lerned level
- k = sd->status.skill[idx2].flag - SKILL_FLAG_REPLACED_LV_0;
- else
- k = pc->checkskill2(sd,idx2);
- if (k < pc->skill_tree[c][i].need[j].lv) {
- f = 0;
- break;
- }
+ for (j = 0; j < VECTOR_LENGTH(pc->skill_tree[c][i].need); j++) {
+ struct skill_tree_requirement *req = &VECTOR_INDEX(pc->skill_tree[c][i].need, j);
+ int level;
+ if (sd->status.skill[req->idx].id == 0
+ || sd->status.skill[req->idx].flag == SKILL_FLAG_TEMPORARY
+ || sd->status.skill[req->idx].flag == SKILL_FLAG_PLAGIARIZED)
+ level = 0; //Not learned.
+ else if (sd->status.skill[req->idx].flag >= SKILL_FLAG_REPLACED_LV_0) //Real learned level
+ level = sd->status.skill[req->idx].flag - SKILL_FLAG_REPLACED_LV_0;
+ else
+ level = pc->checkskill2(sd, req->idx);
+ if (level < req->lv) {
+ satisfied = false;
+ break;
}
}
- if ( sd->status.job_level < pc->skill_tree[c][i].joblv ) {
- int x = pc->mapid2jobid(sd->class_, sd->status.sex); // need to get its own skilltree
- if ( x > -1 ) {
- x = pc->class2idx(x);
- if ( !pc->skill_tree[x][i].inherited )
- f = 0; // job level requirement wasn't satisfied
- } else
- f = 0;
+ if (sd->status.job_level < pc->skill_tree[c][i].joblv) {
+ int jobid = pc->mapid2jobid(sd->class_, sd->status.sex); // need to get its own skilltree
+ if (jobid > -1) {
+ if (!pc->skill_tree[pc->class2idx(jobid)][i].inherited)
+ satisfied = false; // job level requirement wasn't satisfied
+ } else {
+ satisfied = false;
+ }
}
}
- if( f ) {
- int inf2;
- inf2 = skill->dbs->db[idx].inf2;
+ if (satisfied) {
+ int inf2 = skill->dbs->db[idx].inf2;
if(!sd->status.skill[idx].lv && (
(inf2&INF2_QUEST_SKILL && !battle_config.quest_skill_learn) ||
@@ -1628,39 +1638,40 @@ void pc_check_skilltree(struct map_session_data *sd, int skill_id)
c = pc->class2idx(c);
do {
flag = 0;
- for (i = 0; i < MAX_SKILL_TREE && (id=pc->skill_tree[c][i].id)>0; i++) {
- int j, f = 1, idx = pc->skill_tree[c][i].idx;
+ for (i = 0; i < MAX_SKILL_TREE && (id = pc->skill_tree[c][i].id) > 0; i++) {
+ int j, idx = pc->skill_tree[c][i].idx;
+ bool satisfied = true;
- if( sd->status.skill[idx].id ) //Already learned
+ if (sd->status.skill[idx].id) //Already learned
continue;
- for (j = 0; j < MAX_PC_SKILL_REQUIRE; j++) {
- int k = pc->skill_tree[c][i].need[j].id;
- if (k) {
- int idx2 = pc->skill_tree[c][i].need[j].idx;
- if (sd->status.skill[idx2].id == 0 || sd->status.skill[idx2].flag == SKILL_FLAG_TEMPORARY || sd->status.skill[idx2].flag == SKILL_FLAG_PLAGIARIZED)
- k = 0; //Not learned.
- else if (sd->status.skill[idx2].flag >= SKILL_FLAG_REPLACED_LV_0) //Real lerned level
- k = sd->status.skill[idx2].flag - SKILL_FLAG_REPLACED_LV_0;
- else
- k = pc->checkskill2(sd,idx2);
- if (k < pc->skill_tree[c][i].need[j].lv) {
- f = 0;
- break;
- }
+ for (j = 0; j < VECTOR_LENGTH(pc->skill_tree[c][i].need); j++) {
+ struct skill_tree_requirement *req = &VECTOR_INDEX(pc->skill_tree[c][i].need, j);
+ int level;
+ if (sd->status.skill[req->idx].id == 0
+ || sd->status.skill[req->idx].flag == SKILL_FLAG_TEMPORARY
+ || sd->status.skill[req->idx].flag == SKILL_FLAG_PLAGIARIZED)
+ level = 0; //Not learned.
+ else if (sd->status.skill[req->idx].flag >= SKILL_FLAG_REPLACED_LV_0) //Real lerned level
+ level = sd->status.skill[req->idx].flag - SKILL_FLAG_REPLACED_LV_0;
+ else
+ level = pc->checkskill2(sd,req->idx);
+ if (level < req->lv) {
+ satisfied = false;
+ break;
}
}
- if( !f )
+ if (!satisfied)
continue;
- if ( sd->status.job_level < pc->skill_tree[c][i].joblv ) {
- int x = pc->mapid2jobid(sd->class_, sd->status.sex); // need to get its own skilltree
- if ( x > -1 ) {
- x = pc->class2idx(x);
- if ( !pc->skill_tree[x][i].inherited )
+ if (sd->status.job_level < pc->skill_tree[c][i].joblv) {
+ int jobid = pc->mapid2jobid(sd->class_, sd->status.sex); // need to get its own skilltree
+ if (jobid > -1) {
+ if (!pc->skill_tree[pc->class2idx(jobid)][i].inherited)
continue;
- } else
+ } else {
continue;
+ }
}
j = skill->dbs->db[idx].inf2;
@@ -1851,9 +1862,9 @@ int pc_disguise(struct map_session_data *sd, int class_) {
clif->updatestatus(sd,SP_CARTINFO);
}
if (sd->chatID) {
- struct chat_data* cd;
+ struct chat_data *cd = map->id2cd(sd->chatID);
- if( (cd = (struct chat_data*)map->id2bl(sd->chatID)) )
+ if (cd != NULL)
clif->dispchat(cd,0);
}
}
@@ -3969,7 +3980,7 @@ int pc_bonus5(struct map_session_data *sd,int type,int type2,int type3,int type4
* Grants a player a given skill.
* Flag values: @see enum pc_skill_flag
*------------------------------------------*/
-int pc_skill(TBL_PC* sd, int id, int level, int flag)
+int pc_skill(struct map_session_data *sd, int id, int level, int flag)
{
uint16 index = 0;
nullpo_ret(sd);
@@ -5217,7 +5228,7 @@ void pc_bound_clear(struct map_session_data *sd, enum e_item_bound_type type) {
*------------------------------------------*/
int pc_show_steal(struct block_list *bl,va_list ap)
{
- struct map_session_data *sd;
+ struct map_session_data *sd = NULL, *tsd = NULL;
int itemid;
struct item_data *item=NULL;
@@ -5226,11 +5237,16 @@ int pc_show_steal(struct block_list *bl,va_list ap)
sd=va_arg(ap,struct map_session_data *);
itemid=va_arg(ap,int);
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ tsd = BL_UCAST(BL_PC, bl);
+ nullpo_ret(sd);
+
if((item=itemdb->exists(itemid))==NULL)
sprintf(output,"%s stole an Unknown Item (id: %i).",sd->status.name, itemid);
else
sprintf(output,"%s stole %s.",sd->status.name,item->jname);
- clif->message( ((struct map_session_data *)bl)->fd, output);
+ clif->message(tsd->fd, output);
return 0;
}
@@ -5245,15 +5261,13 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, uint16 skil
int i,itemid,flag;
double rate;
struct status_data *sd_status, *md_status;
- struct mob_data *md;
+ struct mob_data *md = BL_CAST(BL_MOB, bl);
struct item tmp_item;
struct item_data *data = NULL;
- if(!sd || !bl || bl->type!=BL_MOB)
+ if (sd == NULL || md == NULL)
return 0;
- md = (TBL_MOB *)bl;
-
if(md->state.steal_flag == UCHAR_MAX || ( md->sc.opt1 && md->sc.opt1 != OPT1_BURNING && md->sc.opt1 != OPT1_CRYSTALIZE ) ) //already stolen from / status change check
return 0;
@@ -5325,12 +5339,11 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, uint16 skil
**/
int pc_steal_coin(struct map_session_data *sd, struct block_list *target) {
int rate, skill_lv;
- struct mob_data *md;
+ struct mob_data *md = BL_CAST(BL_MOB, target);
- if (!sd || !target || target->type != BL_MOB)
+ if (sd == NULL || md == NULL)
return 0;
- md = (TBL_MOB*)target;
if (md->state.steal_coin_flag || md->sc.data[SC_STONE] || md->sc.data[SC_FREEZE] || md->status.mode&MD_BOSS)
return 0;
@@ -7590,11 +7603,11 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) {
if (sd->charm_type != CHARM_TYPE_NONE && sd->charm_count > 0)
pc->del_charm(sd, sd->charm_count, sd->charm_type);
- if (src) {
+ if (src != NULL) {
switch (src->type) {
case BL_MOB:
{
- struct mob_data *md=(struct mob_data *)src;
+ struct mob_data *md = BL_UCAST(BL_MOB, src);
if (md->target_id==sd->bl.id)
mob->unlocktarget(md,tick);
if (battle_config.mobs_level_up && md->status.hp
@@ -7616,19 +7629,19 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) {
}
break;
case BL_PET: //Pass on to master...
- src = &((TBL_PET*)src)->msd->bl;
+ src = &BL_UCAST(BL_PET, src)->msd->bl;
break;
case BL_HOM:
- src = &((TBL_HOM*)src)->master->bl;
+ src = &BL_UCAST(BL_HOM, src)->master->bl;
break;
case BL_MER:
- src = &((TBL_MER*)src)->master->bl;
+ src = &BL_UCAST(BL_MER, src)->master->bl;
break;
}
}
- if (src && src->type == BL_PC) {
- struct map_session_data *ssd = (struct map_session_data *)src;
+ if (src != NULL && src->type == BL_PC) {
+ struct map_session_data *ssd = BL_UCAST(BL_PC, src);
pc->setparam(ssd, SP_KILLEDRID, sd->bl.id);
npc->script_event(ssd, NPCE_KILLPC);
@@ -7814,9 +7827,8 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) {
if( map->list[sd->bl.m].flag.pvp && !battle_config.pk_mode && !map->list[sd->bl.m].flag.pvp_nocalcrank ) {
sd->pvp_point -= 5;
sd->pvp_lost++;
- if( src && src->type == BL_PC )
- {
- struct map_session_data *ssd = (struct map_session_data *)src;
+ if (src != NULL && src->type == BL_PC) {
+ struct map_session_data *ssd = BL_UCAST(BL_PC, src);
ssd->pvp_point++;
ssd->pvp_won++;
}
@@ -8316,11 +8328,12 @@ int pc_percentheal(struct map_session_data *sd,int hp,int sp)
int jobchange_killclone(struct block_list *bl, va_list ap)
{
- struct mob_data *md;
- int flag;
- md = (struct mob_data *)bl;
- nullpo_ret(md);
- flag = va_arg(ap, int);
+ struct mob_data *md = NULL;
+ int flag = va_arg(ap, int);
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
if (md->master_id && md->special_state.clone && md->master_id == flag)
status_kill(&md->bl);
@@ -8450,6 +8463,8 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
clif->changelook(&sd->bl,LOOK_BASE,sd->vd.class_); // move sprite update to prevent client crashes with incompatible equipment [Valaris]
if(sd->vd.cloth_color)
clif->changelook(&sd->bl,LOOK_CLOTHES_COLOR,sd->vd.cloth_color);
+ if (sd->vd.body_style)
+ clif->changelook(&sd->bl,LOOK_BODY2,sd->vd.body_style);
//Update skill tree.
pc->calc_skilltree(sd);
@@ -8546,6 +8561,8 @@ int pc_changelook(struct map_session_data *sd,int type,int val)
clif->changelook(&sd->bl,LOOK_WEAPON,sd->status.weapon);
if (sd->vd.cloth_color)
clif->changelook(&sd->bl,LOOK_CLOTHES_COLOR,sd->vd.cloth_color);
+ if (sd->vd.body_style)
+ clif->changelook(&sd->bl,LOOK_BODY2,sd->vd.body_style);
clif->skillinfoblock(sd);
return 0;
break;
@@ -8594,6 +8611,10 @@ int pc_changelook(struct map_session_data *sd,int type,int val)
case LOOK_ROBE:
sd->status.robe = val;
break;
+ case LOOK_BODY2:
+ val = cap_value(val, MIN_BODY_STYLE, MAX_BODY_STYLE);
+ sd->status.body=val;
+ break;
}
clif->changelook(&sd->bl,type,val);
return 0;
@@ -8690,6 +8711,8 @@ int pc_setoption(struct map_session_data *sd,int type)
clif->changelook(&sd->bl,LOOK_BASE,new_look);
if (sd->vd.cloth_color)
clif->changelook(&sd->bl,LOOK_CLOTHES_COLOR,sd->vd.cloth_color);
+ if( sd->vd.body_style )
+ clif->changelook(&sd->bl,LOOK_BODY2,sd->vd.body_style);
clif->skillinfoblock(sd); // Skill list needs to be updated after base change.
return 0;
@@ -8761,7 +8784,7 @@ int pc_setcart(struct map_session_data *sd,int type) {
* @param sd Target player.
* @param flag New state.
**/
-void pc_setfalcon(TBL_PC* sd, bool flag)
+void pc_setfalcon(struct map_session_data *sd, bool flag)
{
if (flag) {
if (pc->checkskill(sd,HT_FALCON) > 0) // add falcon if he have the skill
@@ -8779,7 +8802,7 @@ void pc_setfalcon(TBL_PC* sd, bool flag)
* @param sd Target player.
* @param flag New state.
**/
-void pc_setridingpeco(TBL_PC* sd, bool flag)
+void pc_setridingpeco(struct map_session_data *sd, bool flag)
{
if (flag) {
if (pc->checkskill(sd, KN_RIDING))
@@ -8815,7 +8838,7 @@ void pc_setmadogear(struct map_session_data *sd, bool flag)
* @param sd Target player.
* @param type New state. This must be a valid OPTION_DRAGON* or 0.
**/
-void pc_setridingdragon(TBL_PC* sd, unsigned int type)
+void pc_setridingdragon(struct map_session_data *sd, unsigned int type)
{
if (type&OPTION_DRAGON) {
// Ensure only one dragon is set at a time.
@@ -8847,7 +8870,7 @@ void pc_setridingdragon(TBL_PC* sd, unsigned int type)
* @param sd Target player.
* @param flag New state.
**/
-void pc_setridingwug(TBL_PC* sd, bool flag)
+void pc_setridingwug(struct map_session_data *sd, bool flag)
{
if (flag) {
if (pc->checkskill(sd, RA_WUGRIDER) > 0)
@@ -9982,12 +10005,15 @@ int pc_checkitem(struct map_session_data *sd)
/*==========================================
* Update PVP rank for sd1 in cmp to sd2
*------------------------------------------*/
-int pc_calc_pvprank_sub(struct block_list *bl,va_list ap)
+int pc_calc_pvprank_sub(struct block_list *bl, va_list ap)
{
- struct map_session_data *sd1,*sd2;
+ struct map_session_data *sd1 = NULL;
+ struct map_session_data *sd2 = va_arg(ap,struct map_session_data *);
- sd1=(struct map_session_data *)bl;
- sd2=va_arg(ap,struct map_session_data *);
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd1 = BL_UCAST(BL_PC, bl);
+ nullpo_ret(sd2);
if (pc_isinvisible(sd1) ||pc_isinvisible(sd2)) {
// cannot register pvp rank for hidden GMs
@@ -10242,8 +10268,7 @@ int pc_autosave(int tid, int64 tick, int id, intptr_t data) {
save_flag = 1; //Noone was saved, so save first found char.
iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) )
- {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if(sd->bl.id == last_save_id && save_flag != 1) {
save_flag = 1;
continue;
@@ -10386,10 +10411,10 @@ bool pc_can_use_command(struct map_session_data *sd, const char *command) {
*/
int pc_charm_timer(int tid, int64 tick, int id, intptr_t data)
{
- struct map_session_data *sd;
+ struct map_session_data *sd = map->id2sd(id);
int i;
- if( (sd=(struct map_session_data *)map->id2sd(id)) == NULL || sd->bl.type!=BL_PC )
+ if (sd == NULL)
return 1;
if (sd->charm_count <= 0) {
@@ -10592,128 +10617,203 @@ int pc_split_atoui(char* str, unsigned int* val, char sep, int max)
val[j] = 0;
return i;
}
-/* [Ind/Hercules] */
-void pc_read_skill_tree(void) {
+
+/**
+ * Parses the skill tree config file.
+ *
+ * In order to reclaim the memory allocated by this function
+ * `pc->clear_skill_tree()` should be used.
+ *
+ * @remark
+ * This function assumes that the skill tree is clear and zeroed.
+ * If it has been already loaded (ie reloading), it needs to be cleared
+ * before calling this function again.
+ *
+ * @author [Ind/Hercules]
+ */
+void pc_read_skill_tree(void)
+{
config_t skill_tree_conf;
- config_setting_t *skt = NULL, *inherit = NULL, *skills = NULL, *sk = NULL;
-#ifdef RENEWAL
- const char *config_filename = "db/re/skill_tree.conf"; // FIXME hardcoded name
-#else
- const char *config_filename = "db/pre-re/skill_tree.conf"; // FIXME hardcoded name
-#endif
+ config_setting_t *skt = NULL;
+ char config_filename[128];
int i = 0;
struct s_mapiterator *iter;
struct map_session_data *sd;
+ bool loaded[CLASS_COUNT] = { false };
+ safesnprintf(config_filename, sizeof(config_filename), "%s/"DBPATH"skill_tree.conf", map->db_path);
if (libconfig->read_file(&skill_tree_conf, config_filename)) {
ShowError("can't read %s\n", config_filename);
return;
}
- while ((skt = libconfig->setting_get_elem(skill_tree_conf.root,i++))) {
- int k;
- const char *name = config_setting_name(skt);
+ // Foreach job
+ while ((skt = libconfig->setting_get_elem(skill_tree_conf.root, i++))) {
+ config_setting_t *t = NULL;
+ int job_idx;
+ const char *job_name = config_setting_name(skt);
+ int job_id = pc->check_job_name(job_name);
- if ( (k = pc->check_job_name(name)) == -1 ) {
- ShowWarning("pc_read_skill_tree: '%s' unknown job name!\n", name);
+ if (job_id == -1) {
+ ShowWarning("pc_read_skill_tree: '%s' unknown job name!\n", job_name);
+ continue;
+ }
+ job_idx = pc->class2idx(job_id);
+ if (loaded[job_idx]) {
+ ShowWarning("pc_read_skill_tree: Duplicate entry for job '%s'. Skipping.\n", job_name);
continue;
}
+ loaded[job_idx] = true;
- if( ( skills = libconfig->setting_get_member(skt,"skills") ) ) {
- int c = 0;
- int idx = pc->class2idx(k);
+ if ((t = libconfig->setting_get_member(skt, "inherit")) != NULL) {
+ int j = 0;
+ const char *ijob_name = NULL;
+ // Foreach inherited job
+ while ((ijob_name = libconfig->setting_get_string_elem(t, j++)) != NULL) {
+ int k, ijob_idx;
+ int ijob_id = pc->check_job_name(ijob_name);
- while ((sk = libconfig->setting_get_elem(skills,c++))) {
- const char *sk_name = config_setting_name(sk);
- int skill_id;
+ if (ijob_id == -1) {
+ ShowWarning("pc_read_skill_tree: '%s' trying to inherit unknown '%s'!\n", job_name, ijob_name);
+ continue;
+ }
+ ijob_idx = pc->class2idx(ijob_id);
+ if (ijob_idx == job_idx) {
+ ShowWarning("pc_read_skill_tree: '%s' trying to inherit itself. Skipping.\n", job_name);
+ continue;
+ }
+ if (!loaded[ijob_idx]) {
+ ShowWarning("pc_read_skill_tree: '%s' trying to inherit not yet loaded '%s' (wrong order in the tree). Skipping.\n", job_name, ijob_name);
+ continue;
+ }
- if( ( skill_id = skill->name2id(sk_name) ) ) {
- int skidx, offset = 0, h = 0, rlen = 0;
+ for (k = 0; k < MAX_SKILL_TREE; k++) {
+ int cur;
+ struct skill_tree_entry *dst = NULL;
+ const struct skill_tree_entry *src = &pc->skill_tree[ijob_idx][k];
- ARR_FIND( 0, MAX_SKILL_TREE, skidx, pc->skill_tree[idx][skidx].id == 0 || pc->skill_tree[idx][skidx].id == skill_id );
- if (skidx == MAX_SKILL_TREE) {
- ShowWarning("pc_read_skill_tree: Unable to load skill %d (%s) into '%s's tree. Maximum number of skills per class has been reached.\n", skill_id, sk_name, name);
- continue;
- } else if (pc->skill_tree[idx][skidx].id) {
- ShowNotice("pc_read_skill_tree: Overwriting %d for '%s' (%d)\n", skill_id, name, k);
- }
+ if (src->id == 0)
+ break; // No more skills to copy
- pc->skill_tree[idx][skidx].id = skill_id;
- pc->skill_tree[idx][skidx].idx = skill->get_index(skill_id);
-
- if( config_setting_is_group(sk) ) {
- int max = 0, jlevel = 0;
- libconfig->setting_lookup_int(sk, "MaxLevel", &max);
- libconfig->setting_lookup_int(sk, "MinJobLevel", &jlevel);
- pc->skill_tree[idx][skidx].max = (unsigned char)max;
- pc->skill_tree[idx][skidx].joblv = (unsigned char)jlevel;
- rlen = libconfig->setting_length(sk);
- offset += jlevel ? 2 : 1;
- } else {
- pc->skill_tree[idx][skidx].max = (unsigned char)libconfig->setting_get_int(sk);
- pc->skill_tree[idx][skidx].joblv = 0;
+ ARR_FIND(0, MAX_SKILL_TREE, cur, pc->skill_tree[job_idx][cur].id == 0 || pc->skill_tree[job_idx][cur].id == src->id);
+ if (cur == MAX_SKILL_TREE) {
+ ShowWarning("pc_read_skill_tree: '%s' can't inherit '%s', skill tree is full!\n", job_name, ijob_name);
+ break;
}
-
- for (h = offset; h < rlen && h < MAX_PC_SKILL_REQUIRE; h++) {
- config_setting_t *rsk = libconfig->setting_get_elem(sk,h);
- int rskid;
- if (rsk && (rskid = skill->name2id(config_setting_name(rsk))) != 0) {
- pc->skill_tree[idx][skidx].need[h].id = rskid;
- pc->skill_tree[idx][skidx].need[h].idx = skill->get_index(rskid);
- pc->skill_tree[idx][skidx].need[h].lv = (unsigned char)libconfig->setting_get_int(rsk);
- } else if( rsk ) {
- ShowWarning("pc_read_skill_tree: unknown requirement '%s' for '%s' in '%s'\n",config_setting_name(rsk),sk_name,name);
- } else {
- ShowWarning("pc_read_skill_tree: error for '%s' in '%s'\n",sk_name,name);
+ if (src->id == NV_TRICKDEAD && ((pc->jobid2mapid(job_id)&(MAPID_BASEMASK | JOBL_2)) != MAPID_NOVICE))
+ continue; // skip trickdead for non-novices
+ dst = &pc->skill_tree[job_idx][cur];
+ dst->inherited = 1;
+ if (dst->id == 0) {
+ // Not existing yet, copy
+ dst->id = src->id;
+ dst->idx = src->idx;
+ dst->max = src->max;
+ dst->joblv = src->joblv;
+ VECTOR_INIT(dst->need);
+ if (VECTOR_LENGTH(src->need) > 0) {
+ VECTOR_ENSURE(dst->need, VECTOR_LENGTH(src->need), 1);
+ VECTOR_PUSHARRAY(dst->need, VECTOR_DATA(src->need), VECTOR_LENGTH(src->need));
+ }
+ } else {
+ int l;
+ // Already existing, merge
+ if (src->max > dst->max)
+ dst->max = src->max;
+ dst->joblv = src->joblv;
+ for (l = 0; l < VECTOR_LENGTH(src->need); l++) {
+ int m;
+ struct skill_tree_requirement *sreq = &VECTOR_INDEX(src->need, l);
+ ARR_FIND(0, VECTOR_LENGTH(dst->need), m, VECTOR_INDEX(dst->need, m).id == sreq->id);
+ if (m == VECTOR_LENGTH(dst->need)) {
+ VECTOR_ENSURE(dst->need, 1, 1);
+ VECTOR_PUSHCOPY(dst->need, sreq);
+ } else {
+ struct skill_tree_requirement *dreq = &VECTOR_INDEX(dst->need, m);
+ dreq->lv = sreq->lv;
+ }
}
}
- } else {
- ShowWarning("pc_read_skill_tree: unknown skill '%s' in '%s'\n",sk_name,name);
}
}
}
- }
-
- i = 0;
- while( (skt = libconfig->setting_get_elem(skill_tree_conf.root,i++)) ) {
- int k, idx;
- const char *name = config_setting_name(skt);
-
- if ( (k = pc->check_job_name(name)) == -1 ) {
- ShowWarning("pc_read_skill_tree: '%s' unknown job name!\n", name);
- continue;
- }
-
- idx = pc->class2idx(k);
-
- if( ( inherit = libconfig->setting_get_member(skt,"inherit") ) ) {
- const char *iname;
- int v = 0;
- while ( (iname = libconfig->setting_get_string_elem(inherit, v++)) ) {
- int b = 0, a, d, f, fidx;
+ if ((t = libconfig->setting_get_member(skt, "skills")) != NULL) {
+ int j = 0;
+ config_setting_t *sk = NULL;
+ // Foreach skill
+ while ((sk = libconfig->setting_get_elem(t, j++)) != NULL) {
+ int skill_id, sk_idx;
+ config_setting_t *rsk = NULL;
+ const char *sk_name = config_setting_name(sk);
+ struct skill_tree_entry *tree_entry = NULL;
- if ( (b = pc->check_job_name(iname)) == -1 ) {
- ShowWarning("pc_read_skill_tree: '%s' trying to inherit unknown '%s'!\n", name, iname);
+ if ((skill_id = skill->name2id(sk_name)) == 0) {
+ ShowWarning("pc_read_skill_tree: unknown skill '%s' in '%s'\n", sk_name, job_name);
continue;
}
- fidx = pc->class2idx(b);
-
- ARR_FIND(0, MAX_SKILL_TREE, d, pc->skill_tree[fidx][d].id == 0);
-
- for ( f = 0; f < d; f++ ) {
-
- ARR_FIND(0, MAX_SKILL_TREE, a, pc->skill_tree[idx][a].id == 0 || pc->skill_tree[idx][a].id == pc->skill_tree[fidx][f].id);
+ ARR_FIND(0, MAX_SKILL_TREE, sk_idx, pc->skill_tree[job_idx][sk_idx].id == 0 || pc->skill_tree[job_idx][sk_idx].id == skill_id);
+ if (sk_idx == MAX_SKILL_TREE) {
+ ShowWarning("pc_read_skill_tree: Unable to load skill %d (%s) into '%s's tree. Maximum number of skills per class has been reached.\n", skill_id, sk_name, job_name);
+ continue;
+ }
+ tree_entry = &pc->skill_tree[job_idx][sk_idx];
- if ( a == MAX_SKILL_TREE ) {
- ShowWarning("pc_read_skill_tree: '%s' can't inherit '%s', skill tree is full!\n", name, iname);
- break;
- } else if ( pc->skill_tree[idx][a].id || (pc->skill_tree[idx][a].id == NV_TRICKDEAD && ((pc->jobid2mapid(k)&(MAPID_BASEMASK | JOBL_2)) != MAPID_NOVICE)) ) /* we skip trickdead for non-novices */
- continue;/* skip */
- memcpy(&pc->skill_tree[idx][a], &pc->skill_tree[fidx][f], sizeof(pc->skill_tree[fidx][f]));
- pc->skill_tree[idx][a].inherited = 1;
+ if (tree_entry->id != 0 && !tree_entry->inherited) {
+ ShowNotice("pc_read_skill_tree: Duplicate %d for '%s' (%d). Skipping.\n", skill_id, job_name, job_id);
+ continue;
+ }
+ if (config_setting_is_group(sk)) {
+ int i32 = 0;
+ if (libconfig->setting_lookup_int(sk, "MaxLevel", &i32) && i32 > 0) {
+ tree_entry->max = (unsigned char)i32;
+ } else {
+ ShowWarning("pc_read_skill_tree: missing MaxLevel for skill %d (%s) class '%s'. Skipping.\n", skill_id, sk_name, job_name);
+ continue;
+ }
+ if (libconfig->setting_lookup_int(sk, "MinJobLevel", &i32) && i32 > 0) {
+ tree_entry->joblv = (unsigned char)i32;
+ } else if (!tree_entry->inherited) {
+ tree_entry->joblv = 0;
+ }
+ } else {
+ tree_entry->max = (unsigned char)libconfig->setting_get_int(sk);
+ if (!tree_entry->inherited)
+ tree_entry->joblv = 0;
+ }
+ if (!tree_entry->inherited) {
+ tree_entry->id = skill_id;
+ tree_entry->idx = skill->get_index(skill_id);
+ VECTOR_INIT(tree_entry->need);
}
+ if (config_setting_is_group(sk)) {
+ int k = 0;
+ // Foreach requirement
+ while ((rsk = libconfig->setting_get_elem(sk, k++)) != NULL) {
+ const char *rsk_name = config_setting_name(rsk);
+ int rsk_id = skill->name2id(rsk_name);
+ struct skill_tree_requirement *req = NULL;
+ int l;
+
+ if (rsk_id == 0) {
+ if (strcmp(rsk_name, "MaxLevel") != 0 && strcmp(rsk_name, "MinJobLevel") != 0)
+ ShowWarning("pc_read_skill_tree: unknown requirement '%s' for '%s' in '%s'\n", rsk_name, sk_name, job_name);
+ continue;
+ }
+ ARR_FIND(0, VECTOR_LENGTH(tree_entry->need), l, VECTOR_INDEX(tree_entry->need, l).id == rsk_id);
+ if (l == VECTOR_LENGTH(tree_entry->need)) {
+ VECTOR_ENSURE(tree_entry->need, 1, 1);
+ VECTOR_PUSHZEROED(tree_entry->need);
+ req = &VECTOR_LAST(tree_entry->need);
+ req->id = rsk_id;
+ req->idx = skill->get_index(rsk_id);
+ } else {
+ req = &VECTOR_INDEX(tree_entry->need, l);
+ }
+ req->lv = (unsigned char)libconfig->setting_get_int(rsk);
+ }
+ }
}
}
}
@@ -10722,10 +10822,28 @@ void pc_read_skill_tree(void) {
/* lets update all players skill tree */
iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) )
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter)))
clif->skillinfoblock(sd);
mapit->free(iter);
}
+
+/**
+ * Clears the skill tree and frees any allocated memory.
+ */
+void pc_clear_skill_tree(void)
+{
+ int i;
+ for (i = 0; i < CLASS_COUNT; i++) {
+ int j;
+ for (j = 0; j < MAX_SKILL_TREE; j++) {
+ if (pc->skill_tree[i][j].id == 0)
+ continue;
+ VECTOR_CLEAR(pc->skill_tree[i][j].need);
+ }
+ }
+ memset(pc->skill_tree, 0, sizeof(pc->skill_tree));
+}
+
bool pc_readdb_levelpenalty(char* fields[], int columns, int current) {
#if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
int type, race, diff;
@@ -10842,7 +10960,7 @@ int pc_readdb(void) {
ShowStatus("Done reading '"CL_WHITE"%u"CL_RESET"' entries in '"CL_WHITE"%s/"DBPATH"%s"CL_RESET"'.\n",count,map->db_path,"exp.txt");
count = 0;
// Reset and read skilltree
- memset(pc->skill_tree,0,sizeof(pc->skill_tree));
+ pc->clear_skill_tree();
pc->read_skill_tree();
#if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
sv->readdb(map->db_path, "re/level_penalty.txt", ',', 4, 4, -1, pc->readdb_levelpenalty);
@@ -11087,7 +11205,7 @@ int pc_global_expiration_timer(int tid, int64 tick, int id, intptr_t data) {
struct map_session_data* sd;
iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) ) {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if( sd->expiration_time )
pc->expire_check(sd);
}
@@ -11133,7 +11251,7 @@ void pc_autotrade_load(void)
SQL->GetData(map->mysql_handle, 2, &data, NULL); sex = atoi(data);
SQL->GetData(map->mysql_handle, 3, &data, NULL); safestrncpy(title, data, sizeof(title));
- CREATE(sd, TBL_PC, 1);
+ CREATE(sd, struct map_session_data, 1);
pc->setnewpc(sd, account_id, char_id, 0, 0, sex, 0);
@@ -11279,7 +11397,7 @@ void pc_autotrade_prepare(struct map_session_data *sd) {
map->quit(sd);
chrif->auth_delete(account_id, char_id, ST_LOGOUT);
- CREATE(sd, TBL_PC, 1);
+ CREATE(sd, struct map_session_data, 1);
pc->setnewpc(sd, account_id, char_id, 0, 0, sex, 0);
@@ -11367,6 +11485,8 @@ void do_final_pc(void) {
pcg->final();
+ pc->clear_skill_tree();
+
ers_destroy(pc->sc_display_ers);
ers_destroy(pc->num_reg_ers);
ers_destroy(pc->str_reg_ers);
@@ -11693,6 +11813,7 @@ void pc_defaults(void) {
pc->autosave = pc_autosave;
pc->follow_timer = pc_follow_timer;
pc->read_skill_tree = pc_read_skill_tree;
+ pc->clear_skill_tree = pc_clear_skill_tree;
pc->isUseitem = pc_isUseitem;
pc->show_steal = pc_show_steal;
pc->checkcombo = pc_checkcombo;
diff --git a/src/map/pc.h b/src/map/pc.h
index 97f339bf6..23b46a631 100644
--- a/src/map/pc.h
+++ b/src/map/pc.h
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2012-2015 Hercules Dev Team
+ * Copyright (C) 2012-2016 Hercules Dev Team
* Copyright (C) Athena Dev Teams
*
* Hercules is free software: you can redistribute it and/or modify
@@ -41,7 +41,6 @@
* Defines
**/
#define MAX_PC_BONUS 10
-#define MAX_PC_SKILL_REQUIRE 5
#define MAX_PC_FEELHATE 3
#define MAX_PC_DEVOTION 5 ///< Max amount of devotion targets
#define PVP_CALCRANK_INTERVAL 1000 ///< PVP calculation interval
@@ -714,17 +713,19 @@ END_ZEROED_BLOCK;
#define pc_can_give_items(sd) ( pc_has_permission((sd),PC_PERM_TRADE) )
#define pc_can_give_bound_items(sd) ( pc_has_permission((sd),PC_PERM_TRADE_BOUND) )
+struct skill_tree_requirement {
+ short id;
+ unsigned short idx;
+ unsigned char lv;
+};
+
struct skill_tree_entry {
short id;
unsigned short idx;
unsigned char max;
unsigned char joblv;
short inherited;
- struct {
- short id;
- unsigned short idx;
- unsigned char lv;
- } need[MAX_PC_SKILL_REQUIRE];
+ VECTOR_DECL(struct skill_tree_requirement) need;
}; // Celest
struct sg_data {
@@ -1052,6 +1053,7 @@ END_ZEROED_BLOCK; /* End */
int (*autosave) (int tid, int64 tick, int id, intptr_t data);
int (*follow_timer) (int tid, int64 tick, int id, intptr_t data);
void (*read_skill_tree) (void);
+ void (*clear_skill_tree) (void);
int (*isUseitem) (struct map_session_data *sd,int n);
int (*show_steal) (struct block_list *bl,va_list ap);
int (*checkcombo) (struct map_session_data *sd, struct item_data *data );
diff --git a/src/map/pc_groups.c b/src/map/pc_groups.c
index 675a8b62e..bd46b9616 100644
--- a/src/map/pc_groups.c
+++ b/src/map/pc_groups.c
@@ -508,7 +508,7 @@ void pc_groups_reload(void) {
/* refresh online users permissions */
iter = mapit_getallusers();
- for (sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter)) {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if (pc->set_group(sd, sd->group_id) != 0) {
ShowWarning("pc_groups_reload: %s (AID:%d) has unknown group id (%d)! kicking...\n",
sd->status.name, sd->status.account_id, pc_get_group_id(sd));
diff --git a/src/map/pet.c b/src/map/pet.c
index 18a5ba915..db8d0d1f1 100644
--- a/src/map/pet.c
+++ b/src/map/pet.c
@@ -359,9 +359,10 @@ int pet_data_init(struct map_session_data *sd, struct s_pet *petinfo)
sd->status.pet_id = 0;
return 1;
}
- sd->pd = pd = (struct pet_data *)aCalloc(1,sizeof(struct pet_data));
+ CREATE(pd, struct pet_data, 1);
pd->bl.type = BL_PET;
pd->bl.id = npc->get_new_npc_id();
+ sd->pd = pd;
pd->msd = sd;
pd->petDB = &pet->db[i];
@@ -505,13 +506,15 @@ int pet_catch_process1(struct map_session_data *sd,int target_class)
}
int pet_catch_process2(struct map_session_data* sd, int target_id) {
- struct mob_data* md;
+ struct mob_data *md = NULL;
+ struct block_list *bl = NULL;
int i = 0, pet_catch_rate = 0;
nullpo_retr(1, sd);
- md = (struct mob_data*)map->id2bl(target_id);
- if(!md || md->bl.type != BL_MOB || md->bl.prev == NULL) {
+ bl = map->id2bl(target_id); // TODO: Why does this not use map->id2md?
+ md = BL_CAST(BL_MOB, bl);
+ if (md == NULL || md->bl.prev == NULL) {
// Invalid inputs/state, abort capture.
clif->pet_roulette(sd,0);
sd->catch_target_class = -1;
@@ -937,7 +940,7 @@ int pet_ai_sub_hard(struct pet_data *pd, struct map_session_data *sd, int64 tick
pet->unlocktarget(pd);
return 0;
} else{
- struct flooritem_data *fitem = (struct flooritem_data *)target;
+ struct flooritem_data *fitem = BL_UCAST(BL_ITEM, target);
if(pd->loot->count < pd->loot->max){
memcpy(&pd->loot->item[pd->loot->count++],&fitem->item_data,sizeof(pd->loot->item[0]));
pd->loot->weight += itemdb_weight(fitem->item_data.nameid)*fitem->item_data.amount;
@@ -964,15 +967,16 @@ int pet_ai_hard(int tid, int64 tick, int id, intptr_t data) {
return 0;
}
-int pet_ai_sub_hard_lootsearch(struct block_list *bl,va_list ap)
+int pet_ai_sub_hard_lootsearch(struct block_list *bl, va_list ap)
{
- struct pet_data* pd;
- struct flooritem_data *fitem = (struct flooritem_data *)bl;
- struct block_list **target;
- int sd_charid =0;
-
- pd=va_arg(ap,struct pet_data *);
- target=va_arg(ap,struct block_list**);
+ struct pet_data *pd = va_arg(ap,struct pet_data *);
+ struct block_list **target = va_arg(ap,struct block_list**);
+ struct flooritem_data *fitem = NULL;
+ int sd_charid = 0;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_ITEM);
+ fitem = BL_UCAST(BL_ITEM, bl);
sd_charid = fitem->first_get_charid;
diff --git a/src/map/quest.c b/src/map/quest.c
index 9a6200138..0dbea56f8 100644
--- a/src/map/quest.c
+++ b/src/map/quest.c
@@ -75,7 +75,7 @@ struct quest_db *quest_db(int quest_id) {
* @param sd Player's data
* @return 0 in case of success, nonzero otherwise (i.e. the player has no quests)
*/
-int quest_pc_login(TBL_PC *sd)
+int quest_pc_login(struct map_session_data *sd)
{
#if PACKETVER < 20141022
int i;
@@ -106,7 +106,8 @@ int quest_pc_login(TBL_PC *sd)
* @param quest_id ID of the quest to add.
* @return 0 in case of success, nonzero otherwise
*/
-int quest_add(TBL_PC *sd, int quest_id) {
+int quest_add(struct map_session_data *sd, int quest_id)
+{
int n;
struct quest_db *qi = quest->db(quest_id);
@@ -157,7 +158,8 @@ int quest_add(TBL_PC *sd, int quest_id) {
* @param qid2 New quest to add
* @return 0 in case of success, nonzero otherwise
*/
-int quest_change(TBL_PC *sd, int qid1, int qid2) {
+int quest_change(struct map_session_data *sd, int qid1, int qid2)
+{
int i;
struct quest_db *qi = quest->db(qid2);
@@ -207,7 +209,8 @@ int quest_change(TBL_PC *sd, int qid1, int qid2) {
* @param quest_id ID of the quest to remove
* @return 0 in case of success, nonzero otherwise
*/
-int quest_delete(TBL_PC *sd, int quest_id) {
+int quest_delete(struct map_session_data *sd, int quest_id)
+{
int i;
//Search for quest
@@ -249,15 +252,15 @@ int quest_delete(TBL_PC *sd, int quest_id) {
* int Party ID
* int Mob ID
*/
-int quest_update_objective_sub(struct block_list *bl, va_list ap) {
- struct map_session_data *sd;
- int mob_id, party_id;
+int quest_update_objective_sub(struct block_list *bl, va_list ap)
+{
+ struct map_session_data *sd = NULL;
+ int party_id = va_arg(ap, int);
+ int mob_id = va_arg(ap, int);
nullpo_ret(bl);
- nullpo_ret(sd = (struct map_session_data *)bl);
-
- party_id = va_arg(ap,int);
- mob_id = va_arg(ap,int);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
if( !sd->avail_quests )
return 0;
@@ -276,7 +279,7 @@ int quest_update_objective_sub(struct block_list *bl, va_list ap) {
* @param sd Character's data
* @param mob_id Monster ID
*/
-void quest_update_objective(TBL_PC *sd, int mob_id)
+void quest_update_objective(struct map_session_data *sd, int mob_id)
{
int i,j;
@@ -331,7 +334,8 @@ void quest_update_objective(TBL_PC *sd, int mob_id)
* @param qs New quest state
* @return 0 in case of success, nonzero otherwise
*/
-int quest_update_status(TBL_PC *sd, int quest_id, enum quest_state qs) {
+int quest_update_status(struct map_session_data *sd, int quest_id, enum quest_state qs)
+{
int i;
ARR_FIND(0, sd->avail_quests, i, sd->quest_log[i].quest_id == quest_id);
@@ -380,7 +384,7 @@ int quest_update_status(TBL_PC *sd, int quest_id, enum quest_state qs) {
* 1 if the quest's timeout has expired
* 0 otherwise
*/
-int quest_check(TBL_PC *sd, int quest_id, enum quest_check_type type)
+int quest_check(struct map_session_data *sd, int quest_id, enum quest_check_type type)
{
int i;
diff --git a/src/map/quest.h b/src/map/quest.h
index 567f0692a..8e2cb4e23 100644
--- a/src/map/quest.h
+++ b/src/map/quest.h
@@ -21,9 +21,12 @@
#ifndef MAP_QUEST_H
#define MAP_QUEST_H
-#include "map/map.h" // TBL_PC
#include "common/hercules.h"
#include "common/conf.h"
+#include "common/mmo.h" // enum quest_state
+
+struct block_list;
+struct map_session_data;
#define MAX_QUEST_DB (60355+1) // Highest quest ID + 1
@@ -64,14 +67,14 @@ struct quest_interface {
void (*reload) (void);
/* */
struct quest_db *(*db) (int quest_id);
- int (*pc_login) (TBL_PC *sd);
- int (*add) (TBL_PC *sd, int quest_id);
- int (*change) (TBL_PC *sd, int qid1, int qid2);
- int (*delete) (TBL_PC *sd, int quest_id);
+ int (*pc_login) (struct map_session_data *sd);
+ int (*add) (struct map_session_data *sd, int quest_id);
+ int (*change) (struct map_session_data *sd, int qid1, int qid2);
+ int (*delete) (struct map_session_data *sd, int quest_id);
int (*update_objective_sub) (struct block_list *bl, va_list ap);
- void (*update_objective) (TBL_PC *sd, int mob_id);
- int (*update_status) (TBL_PC *sd, int quest_id, enum quest_state qs);
- int (*check) (TBL_PC *sd, int quest_id, enum quest_check_type type);
+ void (*update_objective) (struct map_session_data *sd, int mob_id);
+ int (*update_status) (struct map_session_data *sd, int quest_id, enum quest_state qs);
+ int (*check) (struct map_session_data *sd, int quest_id, enum quest_check_type type);
void (*clear) (void);
int (*read_db) (void);
struct quest_db *(*read_db_sub) (config_setting_t *cs, int n, const char *source);
diff --git a/src/map/script.c b/src/map/script.c
index 591bca68f..befb85304 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -226,10 +226,13 @@ void script_reportsrc(struct script_state *st) {
switch( bl->type ) {
case BL_NPC:
- if( bl->m >= 0 )
- ShowDebug("Source (NPC): %s at %s (%d,%d)\n", ((struct npc_data *)bl)->name, map->list[bl->m].name, bl->x, bl->y);
+ {
+ const struct npc_data *nd = BL_UCCAST(BL_NPC, bl);
+ if (bl->m >= 0)
+ ShowDebug("Source (NPC): %s at %s (%d,%d)\n", nd->name, map->list[bl->m].name, bl->x, bl->y);
else
- ShowDebug("Source (NPC): %s (invisible/not on a map)\n", ((struct npc_data *)bl)->name);
+ ShowDebug("Source (NPC): %s (invisible/not on a map)\n", nd->name);
+ }
break;
default:
if( bl->m >= 0 )
@@ -2633,8 +2636,9 @@ struct script_code* parse_script(const char *src,const char *file,int line,int o
/// Returns the player attached to this script, identified by the rid.
/// If there is no player attached, the script is terminated.
-TBL_PC *script_rid2sd(struct script_state *st) {
- TBL_PC *sd;
+struct map_session_data *script_rid2sd(struct script_state *st)
+{
+ struct map_session_data *sd;
if( !( sd = map->id2sd(st->rid) ) ) {
ShowError("script_rid2sd: fatal error ! player not attached!\n");
script->reportfunc(st);
@@ -2644,8 +2648,9 @@ TBL_PC *script_rid2sd(struct script_state *st) {
return sd;
}
-TBL_PC *script_id2sd(struct script_state *st, int account_id) {
- TBL_PC *sd;
+struct map_session_data *script_id2sd(struct script_state *st, int account_id)
+{
+ struct map_session_data *sd;
if ((sd = map->id2sd(account_id)) == NULL) {
ShowWarning("script_id2sd: Player with account ID '%d' not found!\n", account_id);
script->reportfunc(st);
@@ -2654,8 +2659,9 @@ TBL_PC *script_id2sd(struct script_state *st, int account_id) {
return sd;
}
-TBL_PC *script_charid2sd(struct script_state *st, int char_id) {
- TBL_PC *sd;
+struct map_session_data *script_charid2sd(struct script_state *st, int char_id)
+{
+ struct map_session_data *sd;
if ((sd = map->charid2sd(char_id)) == NULL) {
ShowWarning("script_charid2sd: Player with char ID '%d' not found!\n", char_id);
script->reportfunc(st);
@@ -2664,8 +2670,9 @@ TBL_PC *script_charid2sd(struct script_state *st, int char_id) {
return sd;
}
-TBL_PC *script_nick2sd(struct script_state *st, const char *name) {
- TBL_PC *sd;
+struct map_session_data *script_nick2sd(struct script_state *st, const char *name)
+{
+ struct map_session_data *sd;
if ((sd = map->nick2sd(name)) == NULL) {
ShowWarning("script_nick2sd: Player name '%s' not found!\n", name);
script->reportfunc(st);
@@ -2717,7 +2724,7 @@ struct script_data *get_val(struct script_state* st, struct script_data* data) {
const char* name;
char prefix;
char postfix;
- TBL_PC* sd = NULL;
+ struct map_session_data *sd = NULL;
if( !data_isreference(data) )
return data;// not a variable/constant
@@ -3146,7 +3153,8 @@ void set_reg_instance_num(struct script_state* st, int64 num, const char* name,
*
* TODO: return values are screwed up, have been for some time (reaad: years), e.g. some functions return 1 failure and success.
*------------------------------------------*/
-int set_reg(struct script_state* st, TBL_PC* sd, int64 num, const char* name, const void* value, struct reg_db *ref) {
+int set_reg(struct script_state *st, struct map_session_data *sd, int64 num, const char *name, const void *value, struct reg_db *ref)
+{
char prefix = name[0];
if (strlen(name) > SCRIPT_VARNAME_LENGTH) {
@@ -3231,11 +3239,13 @@ int set_reg(struct script_state* st, TBL_PC* sd, int64 num, const char* name, co
}
}
-int set_var(TBL_PC* sd, char* name, void* val) {
+int set_var(struct map_session_data *sd, char *name, void *val)
+{
return script->set_reg(NULL, sd, reference_uid(script->add_str(name),0), name, val, NULL);
}
-void setd_sub(struct script_state *st, TBL_PC *sd, const char *varname, int elem, void *value, struct reg_db *ref) {
+void setd_sub(struct script_state *st, struct map_session_data *sd, const char *varname, int elem, void *value, struct reg_db *ref)
+{
script->set_reg(st, sd, reference_uid(script->add_str(varname),elem), varname, value, ref);
}
@@ -4156,7 +4166,7 @@ void script_stop_instances(struct script_code *code) {
int run_script_timer(int tid, int64 tick, int id, intptr_t data) {
struct script_state *st = idb_get(script->st_db,(int)data);
if( st ) {
- TBL_PC *sd = map->id2sd(st->rid);
+ struct map_session_data *sd = map->id2sd(st->rid);
if((sd && sd->status.char_id != id) || (st->rid && !sd)) { //Character mismatch. Cancel execution.
st->rid = 0;
@@ -4241,7 +4251,7 @@ void script_attach_state(struct script_state* st) {
void run_script_main(struct script_state *st) {
int cmdcount = script->config.check_cmdcount;
int gotocount = script->config.check_gotocount;
- TBL_PC *sd;
+ struct map_session_data *sd;
struct script_stack *stack = st->stack;
struct npc_data *nd;
@@ -5158,8 +5168,9 @@ const char *script_getfuncname(struct script_state *st) {
/// If a dialog doesn't exist yet, one is created.
///
/// mes "<message>";
-BUILDIN(mes) {
- TBL_PC* sd = script->rid2sd(st);
+BUILDIN(mes)
+{
+ struct map_session_data *sd = script->rid2sd(st);
if( sd == NULL )
return true;
@@ -5183,10 +5194,8 @@ BUILDIN(mes) {
/// next;
BUILDIN(next)
{
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
#ifdef SECURE_NPCTIMEOUT
sd->npc_idle_type = NPCT_WAIT;
@@ -5200,11 +5209,10 @@ BUILDIN(next)
/// The dialog is closed when the button is pressed.
///
/// close;
-BUILDIN(close) {
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+BUILDIN(close)
+{
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
st->state = sd->state.dialog == 1 ? CLOSE : END;
@@ -5216,11 +5224,10 @@ BUILDIN(close) {
/// The dialog is closed and the script continues when the button is pressed.
///
/// close2;
-BUILDIN(close2) {
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+BUILDIN(close2)
+{
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
if( sd->state.dialog == 1 )
@@ -5290,10 +5297,8 @@ BUILDIN(menu)
{
int i;
const char* text;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
#ifdef SECURE_NPCTIMEOUT
@@ -5414,10 +5419,8 @@ BUILDIN(select)
{
int i;
const char* text;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
#ifdef SECURE_NPCTIMEOUT
@@ -5491,10 +5494,8 @@ BUILDIN(prompt)
{
int i;
const char *text;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
#ifdef SECURE_NPCTIMEOUT
@@ -5821,10 +5822,8 @@ BUILDIN(warp)
int x,y;
int warp_clean = 1;
const char* str;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
str = script_getstr(st,2);
@@ -5853,10 +5852,15 @@ BUILDIN(warp)
/*==========================================
* Warp a specified area
*------------------------------------------*/
-int buildin_areawarp_sub(struct block_list *bl,va_list ap)
+int buildin_areawarp_sub(struct block_list *bl, va_list ap)
{
int x2,y2,x3,y3;
unsigned int index;
+ struct map_session_data *sd = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
index = va_arg(ap,unsigned int);
x2 = va_arg(ap,int);
@@ -5864,9 +5868,9 @@ int buildin_areawarp_sub(struct block_list *bl,va_list ap)
x3 = va_arg(ap,int);
y3 = va_arg(ap,int);
- if(index == 0)
- pc->randomwarp((TBL_PC *)bl,CLR_TELEPORT);
- else if(x3 && y3) {
+ if (index == 0) {
+ pc->randomwarp(sd, CLR_TELEPORT);
+ } else if (x3 != 0 && y3 != 0) {
int max, tx, ty, j = 0;
// choose a suitable max number of attempts
@@ -5880,10 +5884,10 @@ int buildin_areawarp_sub(struct block_list *bl,va_list ap)
j++;
} while (map->getcell(index, bl, tx, ty, CELL_CHKNOPASS) && j < max);
- pc->setpos((TBL_PC *)bl,index,tx,ty,CLR_OUTSIGHT);
+ pc->setpos(sd, index, tx, ty, CLR_OUTSIGHT);
+ } else {
+ pc->setpos(sd, index, x2, y2, CLR_OUTSIGHT);
}
- else
- pc->setpos((TBL_PC *)bl,index,x2,y2,CLR_OUTSIGHT);
return 0;
}
BUILDIN(areawarp)
@@ -5928,14 +5932,20 @@ BUILDIN(areawarp)
/*==========================================
* areapercentheal <map>,<x1>,<y1>,<x2>,<y2>,<hp>,<sp>
*------------------------------------------*/
-int buildin_areapercentheal_sub(struct block_list *bl,va_list ap)
+int buildin_areapercentheal_sub(struct block_list *bl, va_list ap)
{
- int hp, sp;
- hp = va_arg(ap, int);
- sp = va_arg(ap, int);
- pc->percentheal((TBL_PC *)bl,hp,sp);
+ int hp = va_arg(ap, int);
+ int sp = va_arg(ap, int);
+ struct map_session_data *sd = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
+
+ pc->percentheal(sd, hp, sp);
return 0;
}
+
BUILDIN(areapercentheal) {
int hp,sp,m;
const char *mapname;
@@ -5965,7 +5975,7 @@ BUILDIN(areapercentheal) {
BUILDIN(warpchar) {
int x,y,a;
const char *str;
- TBL_PC *sd;
+ struct map_session_data *sd;
str=script_getstr(st,2);
x=script_getnum(st,3);
@@ -5993,8 +6003,8 @@ BUILDIN(warpchar) {
*------------------------------------------*/
BUILDIN(warpparty)
{
- TBL_PC *sd = NULL;
- TBL_PC *pl_sd;
+ struct map_session_data *sd = NULL;
+ struct map_session_data *pl_sd;
struct party_data* p;
int type;
int map_index;
@@ -6082,8 +6092,8 @@ BUILDIN(warpparty)
*------------------------------------------*/
BUILDIN(warpguild)
{
- TBL_PC *sd = NULL;
- TBL_PC *pl_sd;
+ struct map_session_data *sd = NULL;
+ struct map_session_data *pl_sd;
struct guild* g;
struct s_mapiterator* iter;
int type;
@@ -6108,8 +6118,7 @@ BUILDIN(warpguild)
}
iter = mapit_getallusers();
- for( pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter) )
- {
+ for (pl_sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if( pl_sd->status.guild_id != gid )
continue;
@@ -6140,12 +6149,12 @@ BUILDIN(warpguild)
/*==========================================
* Force Heal a player (hp and sp)
*------------------------------------------*/
-BUILDIN(heal) {
- TBL_PC *sd;
+BUILDIN(heal)
+{
int hp,sp;
-
- sd = script->rid2sd(st);
- if (!sd) return true;
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
+ return true;
hp=script_getnum(st,2);
sp=script_getnum(st,3);
@@ -6157,7 +6166,7 @@ BUILDIN(heal) {
*------------------------------------------*/
BUILDIN(itemheal)
{
- TBL_PC *sd;
+ struct map_session_data *sd;
int hp,sp;
hp=script_getnum(st,2);
@@ -6180,7 +6189,7 @@ BUILDIN(itemheal)
BUILDIN(percentheal)
{
int hp,sp;
- TBL_PC* sd;
+ struct map_session_data *sd;
hp=script_getnum(st,2);
sp=script_getnum(st,3);
@@ -6213,12 +6222,9 @@ BUILDIN(jobchange)
if( script_hasdata(st,3) )
upper=script_getnum(st,3);
- if (pc->db_checkid(job))
- {
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ if (pc->db_checkid(job)) {
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
pc->jobchange(sd, job, upper);
@@ -6246,15 +6252,13 @@ BUILDIN(jobname)
/// input(<var>{,<min>{,<max>}}) -> <int>
BUILDIN(input)
{
- TBL_PC* sd;
struct script_data* data;
int64 uid;
const char* name;
int min;
int max;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
data = script_getdata(st,2);
@@ -6308,8 +6312,9 @@ BUILDIN(copyarray);
/// The value is converted to the type of the variable.
///
/// set(<variable>,<value>) -> <variable>
-BUILDIN(__setr) {
- TBL_PC* sd = NULL;
+BUILDIN(__setr)
+{
+ struct map_session_data *sd = NULL;
struct script_data* data;
//struct script_data* datavalue;
int64 num;
@@ -6402,7 +6407,7 @@ BUILDIN(setarray)
uint32 end;
int32 id;
int32 i;
- TBL_PC* sd = NULL;
+ struct map_session_data *sd = NULL;
data = script_getdata(st, 2);
if( !data_isreference(data) || reference_toconstant(data) )
@@ -6453,7 +6458,7 @@ BUILDIN(cleararray)
uint32 end;
int32 id;
void* v;
- TBL_PC* sd = NULL;
+ struct map_session_data *sd = NULL;
data = script_getdata(st, 2);
if( !data_isreference(data) )
@@ -6506,7 +6511,7 @@ BUILDIN(copyarray)
void* v;
int32 i;
uint32 count;
- TBL_PC* sd = NULL;
+ struct map_session_data *sd = NULL;
data1 = script_getdata(st, 2);
data2 = script_getdata(st, 3);
@@ -6608,7 +6613,7 @@ BUILDIN(deletearray)
const char* name;
unsigned int start, end, i;
int id;
- TBL_PC *sd = NULL;
+ struct map_session_data *sd = NULL;
struct script_array *sa = NULL;
struct reg_db *src = NULL;
void *value;
@@ -6757,7 +6762,7 @@ BUILDIN(getelementofarray)
BUILDIN(setlook)
{
int type,val;
- TBL_PC* sd;
+ struct map_session_data *sd;
type=script_getnum(st,2);
val=script_getnum(st,3);
@@ -6774,7 +6779,7 @@ BUILDIN(setlook)
BUILDIN(changelook)
{ // As setlook but only client side
int type,val;
- TBL_PC* sd;
+ struct map_session_data *sd;
type=script_getnum(st,2);
val=script_getnum(st,3);
@@ -6793,10 +6798,8 @@ BUILDIN(changelook)
*------------------------------------------*/
BUILDIN(cutin)
{
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
clif->cutin(sd,script_getstr(st,2),script_getnum(st,3));
@@ -6809,7 +6812,7 @@ BUILDIN(cutin)
BUILDIN(viewpoint)
{
int type,x,y,id,color;
- TBL_PC* sd;
+ struct map_session_data *sd;
type=script_getnum(st,2);
x=script_getnum(st,3);
@@ -6834,8 +6837,8 @@ BUILDIN(countitem) {
int count = 0;
struct item_data* id = NULL;
- TBL_PC* sd = script->rid2sd(st);
- if( !sd )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
if( script_isstringtype(st, 2) ) {
@@ -6872,8 +6875,8 @@ BUILDIN(countitem2) {
int i;
struct item_data* id = NULL;
- TBL_PC* sd = script->rid2sd(st);
- if( !sd )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
if( script_isstringtype(st, 2) ) {
@@ -7017,8 +7020,7 @@ BUILDIN(checkweight2)
int32 idx_it, idx_nb;
int nb_it, nb_nb; //array size
- TBL_PC *sd = script->rid2sd(st);
-
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -7110,7 +7112,7 @@ BUILDIN(checkweight2)
BUILDIN(getitem) {
int nameid,amount,get_count,i,flag = 0, offset = 0;
struct item it;
- TBL_PC *sd;
+ struct map_session_data *sd;
struct item_data *item_data;
if( script_isstringtype(st, 2) ) {
@@ -7196,7 +7198,7 @@ BUILDIN(getitem2)
{
int nameid,amount,flag = 0, offset = 0;
int iden,ref,attr,c1,c2,c3,c4, bound = 0;
- TBL_PC *sd;
+ struct map_session_data *sd;
if( !strcmp(script->getfuncname(st),"getitembound2") ) {
bound = script_getnum(st,11);
@@ -7253,7 +7255,7 @@ BUILDIN(getitem2)
if (item_data == NULL)
return -1;
if(item_data->type==IT_WEAPON || item_data->type==IT_ARMOR) {
- if(ref > MAX_REFINE) ref = MAX_REFINE;
+ ref = cap_value(ref, 0, MAX_REFINE);
}
else if(item_data->type==IT_PETEGG) {
iden = 1;
@@ -7353,7 +7355,7 @@ BUILDIN(rentitem) {
BUILDIN(getnameditem) {
int nameid;
struct item item_tmp;
- TBL_PC *sd, *tsd;
+ struct map_session_data *sd, *tsd;
sd = script->rid2sd(st);
if (sd == NULL) // Player not attached!
@@ -7466,9 +7468,9 @@ BUILDIN(makeitem)
y = script_getnum(st,6);
if(strcmp(mapname,"this")==0) {
- TBL_PC *sd;
- sd = script->rid2sd(st);
- if (!sd) return true; //Failed...
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
+ return true; //Failed...
m=sd->bl.m;
} else
m=map->mapname2mapid(mapname);
@@ -7621,8 +7623,9 @@ bool buildin_delitem_search(struct map_session_data* sd, struct item* it, bool e
///
/// delitem <item id>,<amount>{,<account id>}
/// delitem "<item name>",<amount>{,<account id>}
-BUILDIN(delitem) {
- TBL_PC *sd;
+BUILDIN(delitem)
+{
+ struct map_session_data *sd;
struct item it;
if (script_hasdata(st,4)) {
@@ -7677,8 +7680,9 @@ BUILDIN(delitem) {
///
/// delitem2 <item id>,<amount>,<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>{,<account ID>}
/// delitem2 "<Item name>",<amount>,<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>{,<account ID>}
-BUILDIN(delitem2) {
- TBL_PC *sd;
+BUILDIN(delitem2)
+{
+ struct map_session_data *sd;
struct item it;
if (script_hasdata(st,11)) {
@@ -7741,18 +7745,16 @@ BUILDIN(delitem2) {
*------------------------------------------*/
BUILDIN(enableitemuse)
{
- TBL_PC *sd;
- sd=script->rid2sd(st);
- if (sd)
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd != NULL)
st->npc_item_flag = sd->npc_item_flag = 1;
return true;
}
BUILDIN(disableitemuse)
{
- TBL_PC *sd;
- sd=script->rid2sd(st);
- if (sd)
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd != NULL)
st->npc_item_flag = sd->npc_item_flag = 0;
return true;
}
@@ -7763,7 +7765,7 @@ BUILDIN(disableitemuse)
*------------------------------------------*/
BUILDIN(readparam) {
int type;
- TBL_PC *sd;
+ struct map_session_data *sd;
type=script_getnum(st,2);
if (script_hasdata(st,3))
@@ -7792,7 +7794,7 @@ BUILDIN(readparam) {
*------------------------------------------*/
BUILDIN(getcharid) {
int num;
- TBL_PC *sd;
+ struct map_session_data *sd;
num = script_getnum(st,2);
if( script_hasdata(st,3) )
@@ -8066,13 +8068,11 @@ BUILDIN(getguildmember)
*------------------------------------------*/
BUILDIN(strcharinfo)
{
- TBL_PC *sd;
int num;
struct guild* g;
struct party_data* p;
-
- sd=script->rid2sd(st);
- if (!sd) //Avoid crashing....
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL) //Avoid crashing....
return true;
num=script_getnum(st,2);
@@ -8115,13 +8115,12 @@ BUILDIN(strcharinfo)
* 3 : ::str
* 4 : map name
*------------------------------------------*/
-BUILDIN(strnpcinfo) {
- TBL_NPC* nd;
+BUILDIN(strnpcinfo)
+{
int num;
char *buf,*name=NULL;
-
- nd = map->id2nd(st->oid);
- if (!nd) {
+ struct npc_data *nd = map->id2nd(st->oid);
+ if (nd == NULL) {
script_pushconststr(st, "");
return true;
}
@@ -8166,7 +8165,7 @@ BUILDIN(strnpcinfo) {
BUILDIN(charid2rid)
{
int cid = script_getnum(st, 2);
- TBL_PC *sd = map->charid2sd(cid);
+ struct map_session_data *sd = map->charid2sd(cid);
if (sd == NULL) {
script_pushint(st, 0);
@@ -8183,11 +8182,9 @@ BUILDIN(charid2rid)
BUILDIN(getequipid)
{
int i, num;
- TBL_PC* sd;
struct item_data* item;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
num = script_getnum(st,2) - 1;
@@ -8221,11 +8218,9 @@ BUILDIN(getequipid)
BUILDIN(getequipname)
{
int i, num;
- TBL_PC* sd;
struct item_data* item;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
num = script_getnum(st,2) - 1;
@@ -8258,10 +8253,8 @@ BUILDIN(getequipname)
BUILDIN(getbrokenid)
{
int i,num,id=0,brokencounter=0;
- TBL_PC *sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
num=script_getnum(st,2);
@@ -8286,10 +8279,7 @@ BUILDIN(getbrokenid)
BUILDIN(getbrokencount)
{
int i, counter = 0;
- TBL_PC *sd;
-
- sd = script->rid2sd(st);
-
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -8310,10 +8300,8 @@ BUILDIN(repair)
{
int i,num;
int repaircounter=0;
- TBL_PC *sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
num=script_getnum(st,2);
@@ -8339,10 +8327,8 @@ BUILDIN(repair)
BUILDIN(repairall)
{
int i, repaircounter = 0;
- TBL_PC *sd;
-
- sd = script->rid2sd(st);
- if(sd == NULL)
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
for(i = 0; i < MAX_INVENTORY; i++)
@@ -8370,7 +8356,7 @@ BUILDIN(repairall)
BUILDIN(getequipisequiped)
{
int i = -1,num;
- TBL_PC *sd;
+ struct map_session_data *sd;
num = script_getnum(st,2);
sd = script->rid2sd(st);
@@ -8397,7 +8383,7 @@ BUILDIN(getequipisequiped)
BUILDIN(getequipisenableref)
{
int i = -1,num;
- TBL_PC *sd;
+ struct map_session_data *sd;
num = script_getnum(st,2);
sd = script->rid2sd(st);
@@ -8423,7 +8409,7 @@ BUILDIN(getequipisenableref)
BUILDIN(getequipisidentify)
{
int i = -1,num;
- TBL_PC *sd;
+ struct map_session_data *sd;
num = script_getnum(st,2);
sd = script->rid2sd(st);
@@ -8449,7 +8435,7 @@ BUILDIN(getequipisidentify)
BUILDIN(getequiprefinerycnt)
{
int i = -1,num;
- TBL_PC *sd;
+ struct map_session_data *sd;
num = script_getnum(st,2);
sd = script->rid2sd(st);
@@ -8476,7 +8462,7 @@ BUILDIN(getequiprefinerycnt)
BUILDIN(getequipweaponlv)
{
int i = -1,num;
- TBL_PC *sd;
+ struct map_session_data *sd;
num = script_getnum(st,2);
sd = script->rid2sd(st);
@@ -8501,7 +8487,7 @@ BUILDIN(getequipweaponlv)
*------------------------------------------*/
BUILDIN(getequippercentrefinery) {
int i = -1,num;
- TBL_PC *sd;
+ struct map_session_data *sd;
num = script_getnum(st,2);
sd = script->rid2sd(st);
@@ -8524,7 +8510,7 @@ BUILDIN(getequippercentrefinery) {
BUILDIN(successrefitem)
{
int i = -1 , num, up = 1;
- TBL_PC *sd;
+ struct map_session_data *sd;
num = script_getnum(st,2);
sd = script->rid2sd(st);
@@ -8585,7 +8571,7 @@ BUILDIN(successrefitem)
BUILDIN(failedrefitem)
{
int i=-1,num;
- TBL_PC *sd;
+ struct map_session_data *sd;
num = script_getnum(st,2);
sd = script->rid2sd(st);
@@ -8613,7 +8599,7 @@ BUILDIN(failedrefitem)
BUILDIN(downrefitem)
{
int i = -1, num, down = 1;
- TBL_PC *sd;
+ struct map_session_data *sd;
sd = script->rid2sd(st);
if (sd == NULL)
@@ -8654,7 +8640,7 @@ BUILDIN(downrefitem)
BUILDIN(delequip)
{
int i=-1,num;
- TBL_PC *sd;
+ struct map_session_data *sd;
num = script_getnum(st,2);
sd = script->rid2sd(st);
@@ -8681,7 +8667,7 @@ BUILDIN(delequip)
*------------------------------------------*/
BUILDIN(statusup) {
int type;
- TBL_PC *sd;
+ struct map_session_data *sd;
type=script_getnum(st,2);
sd = script->rid2sd(st);
@@ -8698,7 +8684,7 @@ BUILDIN(statusup) {
BUILDIN(statusup2)
{
int type,val;
- TBL_PC *sd;
+ struct map_session_data *sd;
type=script_getnum(st,2);
val=script_getnum(st,3);
@@ -8725,10 +8711,8 @@ BUILDIN(bonus) {
int val3 = 0;
int val4 = 0;
int val5 = 0;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true; // no player attached
type = script_getnum(st,2);
@@ -8806,11 +8790,9 @@ BUILDIN(autobonus) {
unsigned int dur;
short rate;
short atk_type = 0;
- TBL_PC* sd;
const char *bonus_script, *other_script = NULL;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true; // no player attached
if( sd->state.autobonus&sd->status.inventory[status->current_equip_item_index].equip )
@@ -8842,11 +8824,9 @@ BUILDIN(autobonus2) {
unsigned int dur;
short rate;
short atk_type = 0;
- TBL_PC* sd;
const char *bonus_script, *other_script = NULL;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true; // no player attached
if( sd->state.autobonus&sd->status.inventory[status->current_equip_item_index].equip )
@@ -8877,11 +8857,9 @@ BUILDIN(autobonus2) {
BUILDIN(autobonus3) {
unsigned int dur;
short rate,atk_type;
- TBL_PC* sd;
const char *bonus_script, *other_script = NULL;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true; // no player attached
if( sd->state.autobonus&sd->status.inventory[status->current_equip_item_index].equip )
@@ -8922,10 +8900,8 @@ BUILDIN(skill) {
int id;
int level;
int flag = SKILL_GRANT_TEMPORARY;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;// no player attached, report source
id = ( script_isstringtype(st,2) ? skill->name2id(script_getstr(st,2)) : script_getnum(st,2) );
@@ -8950,10 +8926,8 @@ BUILDIN(addtoskill) {
int id;
int level;
int flag = SKILL_GRANT_TEMPSTACK;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;// no player attached, report source
id = ( script_isstringtype(st,2) ? skill->name2id(script_getstr(st,2)) : script_getnum(st,2) );
@@ -8973,11 +8947,9 @@ BUILDIN(guildskill) {
int skill_id, id, max_points;
int level;
- TBL_PC* sd;
struct guild *gd;
struct guild_skill gd_skill;
-
- sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true; // no player attached, report source
@@ -9007,12 +8979,11 @@ BUILDIN(guildskill) {
///
/// getskilllv(<skill id>) -> <level>
/// getskilllv("<skill name>") -> <level>
-BUILDIN(getskilllv) {
+BUILDIN(getskilllv)
+{
int id;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;// no player attached, report source
id = ( script_isstringtype(st,2) ? skill->name2id(script_getstr(st,2)) : script_getnum(st,2) );
@@ -9057,10 +9028,8 @@ BUILDIN(basicskillcheck)
/// getgmlevel() -> <level>
BUILDIN(getgmlevel)
{
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;// no player attached, report source
script_pushint(st, pc_get_group_level(sd));
@@ -9097,9 +9066,7 @@ BUILDIN(setgroupid) {
/// getgroupid() -> <int>
BUILDIN(getgroupid)
{
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true; // no player attached, report source
script_pushint(st, pc_get_group_id(sd));
@@ -9133,10 +9100,8 @@ BUILDIN(end) {
BUILDIN(checkoption)
{
int option;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;// no player attached, report source
option = script_getnum(st,2);
@@ -9154,10 +9119,8 @@ BUILDIN(checkoption)
BUILDIN(checkoption1)
{
int opt1;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;// no player attached, report source
opt1 = script_getnum(st,2);
@@ -9175,10 +9138,8 @@ BUILDIN(checkoption1)
BUILDIN(checkoption2)
{
int opt2;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;// no player attached, report source
opt2 = script_getnum(st,2);
@@ -9201,10 +9162,8 @@ BUILDIN(setoption)
{
int option;
int flag = 1;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;// no player attached, report source
option = script_getnum(st,2);
@@ -9234,10 +9193,8 @@ BUILDIN(setoption)
/// @author Valaris
BUILDIN(checkcart)
{
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;// no player attached, report source
if( pc_iscarton(sd) )
@@ -9262,10 +9219,8 @@ BUILDIN(checkcart)
BUILDIN(setcart)
{
int type = 1;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;// no player attached, report source
if( script_hasdata(st,2) )
@@ -9282,9 +9237,7 @@ BUILDIN(setcart)
/// @author Valaris
BUILDIN(checkfalcon)
{
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;// no player attached, report source
@@ -9304,9 +9257,7 @@ BUILDIN(checkfalcon)
BUILDIN(setfalcon)
{
bool flag = true;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;// no player attached, report source
@@ -9342,9 +9293,7 @@ enum setmount_type {
*/
BUILDIN(checkmount)
{
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true; // no player attached, report source
@@ -9388,9 +9337,7 @@ BUILDIN(checkmount)
BUILDIN(setmount)
{
int flag = SETMOUNT_TYPE_AUTODETECT;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;// no player attached, report source
@@ -9454,10 +9401,8 @@ BUILDIN(setmount)
///
BUILDIN(checkwug)
{
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;// no player attached, report source
if( pc_iswug(sd) || pc_isridingwug(sd) )
@@ -9477,9 +9422,7 @@ BUILDIN(savepoint) {
int y;
short mapid;
const char* str;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true; // no player attached, report source
@@ -9595,23 +9538,21 @@ BUILDIN(gettimestr)
/*==========================================
* Open player storage
*------------------------------------------*/
-BUILDIN(openstorage) {
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+BUILDIN(openstorage)
+{
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
storage->open(sd);
return true;
}
-BUILDIN(guildopenstorage) {
- TBL_PC* sd;
+BUILDIN(guildopenstorage)
+{
int ret;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
ret = gstorage->open(sd);
@@ -9624,13 +9565,12 @@ BUILDIN(guildopenstorage) {
*------------------------------------------*/
/// itemskill <skill id>,<level>{,flag
/// itemskill "<skill name>",<level>{,flag
-BUILDIN(itemskill) {
+BUILDIN(itemskill)
+{
int id;
int lv;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL || sd->ud.skilltimer != INVALID_TIMER )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL || sd->ud.skilltimer != INVALID_TIMER)
return true;
id = ( script_isstringtype(st,2) ? skill->name2id(script_getstr(st,2)) : script_getnum(st,2) );
@@ -9653,10 +9593,8 @@ BUILDIN(itemskill) {
BUILDIN(produce)
{
int trigger;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
trigger=script_getnum(st,2);
@@ -9669,10 +9607,8 @@ BUILDIN(produce)
BUILDIN(cooking)
{
int trigger;
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
trigger=script_getnum(st,2);
@@ -9684,7 +9620,7 @@ BUILDIN(cooking)
*------------------------------------------*/
BUILDIN(makepet)
{
- TBL_PC* sd;
+ struct map_session_data *sd;
int id,pet_id;
id=script_getnum(st,2);
@@ -9711,12 +9647,10 @@ BUILDIN(makepet)
*------------------------------------------*/
BUILDIN(getexp)
{
- TBL_PC* sd;
int base=0,job=0;
double bonus;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
base=script_getnum(st,2);
@@ -9739,11 +9673,9 @@ BUILDIN(getexp)
*------------------------------------------*/
BUILDIN(guildgetexp)
{
- TBL_PC* sd;
int exp;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
exp = script_getnum(st,2);
@@ -9758,8 +9690,9 @@ BUILDIN(guildgetexp)
/*==========================================
* Changes the guild master of a guild [Skotlex]
*------------------------------------------*/
-BUILDIN(guildchangegm) {
- TBL_PC *sd;
+BUILDIN(guildchangegm)
+{
+ struct map_session_data *sd;
int guild_id;
const char *name;
@@ -9953,11 +9886,16 @@ BUILDIN(areamonster) {
/*==========================================
* KillMonster subcheck, verify if mob to kill ain't got an even to handle, could be force kill by allflag
*------------------------------------------*/
-int buildin_killmonster_sub_strip(struct block_list *bl,va_list ap)
-{ //same fix but with killmonster instead - stripping events from mobs.
- TBL_MOB* md = (TBL_MOB*)bl;
- char *event=va_arg(ap,char *);
- int allflag=va_arg(ap,int);
+int buildin_killmonster_sub_strip(struct block_list *bl, va_list ap)
+{
+ //same fix but with killmonster instead - stripping events from mobs.
+ struct mob_data *md = NULL;
+ char *event = va_arg(ap,char *);
+ int allflag = va_arg(ap,int);
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
md->state.npc_killmonster = 1;
@@ -9971,11 +9909,15 @@ int buildin_killmonster_sub_strip(struct block_list *bl,va_list ap)
md->state.npc_killmonster = 0;
return 0;
}
-int buildin_killmonster_sub(struct block_list *bl,va_list ap)
+int buildin_killmonster_sub(struct block_list *bl, va_list ap)
{
- TBL_MOB* md = (TBL_MOB*)bl;
- char *event=va_arg(ap,char *);
- int allflag=va_arg(ap,int);
+ struct mob_data *md = NULL;
+ char *event = va_arg(ap,char *);
+ int allflag = va_arg(ap,int);
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
if(!allflag) {
if(strcmp(event,md->npc_event)==0)
@@ -10058,7 +10000,7 @@ BUILDIN(killmonsterall) {
* clone map, x, y, event, char_id, master_id, mode, flag, duration
*------------------------------------------*/
BUILDIN(clone) {
- TBL_PC *sd, *msd=NULL;
+ struct map_session_data *sd, *msd = NULL;
int char_id,master_id=0,x,y, mode = 0, flag = 0, m;
unsigned int duration = 0;
const char *mapname, *event;
@@ -10139,7 +10081,7 @@ BUILDIN(addtimer)
{
int tick = script_getnum(st,2);
const char* event = script_getstr(st, 3);
- TBL_PC* sd;
+ struct map_session_data *sd;
script->check_event(st, event);
sd = script->rid2sd(st);
@@ -10157,7 +10099,7 @@ BUILDIN(addtimer)
BUILDIN(deltimer)
{
const char *event;
- TBL_PC* sd;
+ struct map_session_data *sd;
event=script_getstr(st, 2);
sd = script->rid2sd(st);
@@ -10174,7 +10116,7 @@ BUILDIN(addtimercount)
{
const char *event;
int tick;
- TBL_PC* sd;
+ struct map_session_data *sd;
event=script_getstr(st, 2);
tick=script_getnum(st,3);
@@ -10203,25 +10145,26 @@ BUILDIN(initnpctimer)
struct script_data *data;
data = script_getdata(st,2);
script->get_val(st,data); // dereference if it's a variable
- if( data_isstring(data) ) //NPC name
+ if (data_isstring(data)) {
+ //NPC name
nd = npc->name2id(script->conv_str(st, data));
- else if( data_isint(data) ) {
+ } else if (data_isint(data)) {
//Flag
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
flag = script->conv_num(st,data);
} else {
ShowError("initnpctimer: invalid argument type #1 (needs be int or string)).\n");
return false;
}
- } else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ } else {
+ nd = map->id2nd(st->oid);
+ }
if( !nd )
return true;
- if( flag ) //Attach
- {
- TBL_PC* sd = script->rid2sd(st);
- if( sd == NULL )
+ if (flag) { //Attach
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
nd->u.scr.rid = sd->bl.id;
}
@@ -10247,25 +10190,26 @@ BUILDIN(startnpctimer)
struct script_data *data;
data = script_getdata(st,2);
script->get_val(st,data); // dereference if it's a variable
- if( data_isstring(data) ) //NPC name
+ if (data_isstring(data)) {
+ //NPC name
nd = npc->name2id(script->conv_str(st, data));
- else if( data_isint(data) ) {
+ } else if (data_isint(data)) {
//Flag
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
flag = script->conv_num(st,data);
} else {
ShowError("initnpctimer: invalid argument type #1 (needs be int or string)).\n");
return false;
}
- } else
- nd=(struct npc_data *)map->id2bl(st->oid);
+ } else {
+ nd = map->id2nd(st->oid);
+ }
if( !nd )
return true;
- if( flag ) //Attach
- {
- TBL_PC* sd = script->rid2sd(st);
- if( sd == NULL )
+ if (flag) { //Attach
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
nd->u.scr.rid = sd->bl.id;
}
@@ -10288,18 +10232,20 @@ BUILDIN(stopnpctimer) {
struct script_data *data;
data = script_getdata(st,2);
script->get_val(st,data); // Dereference if it's a variable
- if( data_isstring(data) ) //NPC name
+ if (data_isstring(data)) {
+ //NPC name
nd = npc->name2id(script->conv_str(st, data));
- else if( data_isint(data) ) {
+ } else if (data_isint(data)) {
//Flag
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
flag = script->conv_num(st,data);
} else {
ShowError("initnpctimer: invalid argument type #1 (needs be int or string)).\n");
return false;
}
- } else
- nd=(struct npc_data *)map->id2bl(st->oid);
+ } else {
+ nd = map->id2nd(st->oid);
+ }
if( !nd )
return true;
@@ -10311,19 +10257,19 @@ BUILDIN(stopnpctimer) {
}
/*==========================================
*------------------------------------------*/
-BUILDIN(getnpctimer) {
+BUILDIN(getnpctimer)
+{
struct npc_data *nd;
- TBL_PC *sd;
+ struct map_session_data *sd;
int type = script_getnum(st,2);
int val = 0;
if( script_hasdata(st,3) )
nd = npc->name2id(script_getstr(st,3));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( !nd || nd->bl.type != BL_NPC )
- {
+ if (nd == NULL) {
script_pushint(st,0);
ShowError("getnpctimer: Invalid NPC.\n");
return false;
@@ -10358,9 +10304,9 @@ BUILDIN(setnpctimer)
if( script_hasdata(st,3) )
nd = npc->name2id(script_getstr(st,3));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( !nd || nd->bl.type != BL_NPC ) {
+ if (nd == NULL) {
script_pushint(st,1);
ShowError("setnpctimer: Invalid NPC.\n");
return false;
@@ -10374,12 +10320,12 @@ BUILDIN(setnpctimer)
/*==========================================
* attaches the player rid to the timer [Celest]
*------------------------------------------*/
-BUILDIN(attachnpctimer) {
- TBL_PC *sd;
- struct npc_data *nd = (struct npc_data *)map->id2bl(st->oid);
+BUILDIN(attachnpctimer)
+{
+ struct map_session_data *sd;
+ struct npc_data *nd = map->id2nd(st->oid);
- if( !nd || nd->bl.type != BL_NPC )
- {
+ if (nd == NULL) {
script_pushint(st,1);
ShowError("setnpctimer: Invalid NPC.\n");
return false;
@@ -10409,10 +10355,9 @@ BUILDIN(detachnpctimer) {
if( script_hasdata(st,2) )
nd = npc->name2id(script_getstr(st,2));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( !nd || nd->bl.type != BL_NPC )
- {
+ if (nd == NULL) {
script_pushint(st,1);
ShowError("detachnpctimer: Invalid NPC.\n");
return false;
@@ -10450,7 +10395,15 @@ BUILDIN(announce) {
if( flag&(BC_TARGET_MASK|BC_SOURCE_MASK) ) {
// Broadcast source or broadcast region defined
send_target target;
- struct block_list *bl = (flag&BC_NPC) ? map->id2bl(st->oid) : (struct block_list *)script->rid2sd(st); // If bc_npc flag is set, use NPC as broadcast source
+ struct block_list *bl = NULL;
+ if (flag&BC_NPC) {
+ // If bc_npc flag is set, use NPC as broadcast source
+ bl = map->id2bl(st->oid);
+ } else {
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd != NULL)
+ bl = &sd->bl;
+ }
if (bl == NULL)
return true;
@@ -10494,17 +10447,16 @@ int buildin_announce_sub(struct block_list *bl, va_list ap)
/* Runs item effect on attached character.
* itemeffect <item id>;
* itemeffect "<item name>"; */
-BUILDIN(itemeffect) {
- TBL_NPC *nd;
- TBL_PC *sd;
+BUILDIN(itemeffect)
+{
+ struct npc_data *nd;
struct item_data *item_data;
-
- sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
- nd = (TBL_NPC *)map->id2bl(sd->npc_id);
- if( nd == NULL )
+ nd = map->id2nd(sd->npc_id);
+ if (nd == NULL)
return false;
if( script_isstringtype(st, 2) ) {
@@ -10611,7 +10563,8 @@ BUILDIN(getusers) {
*------------------------------------------*/
BUILDIN(getusersname)
{
- TBL_PC *sd, *pl_sd;
+ struct map_session_data *sd;
+ const struct map_session_data *pl_sd;
int /*disp_num=1,*/ group_level = 0;
struct s_mapiterator* iter;
@@ -10620,8 +10573,7 @@ BUILDIN(getusersname)
group_level = pc_get_group_level(sd);
iter = mapit_getallusers();
- for( pl_sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); pl_sd = (TBL_PC*)mapit->next(iter) )
- {
+ for (pl_sd = BL_UCCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); pl_sd = BL_UCCAST(BL_PC, mapit->next(iter))) {
if (pc_has_permission(pl_sd, PC_PERM_HIDE_SESSION) && pc_get_group_level(pl_sd) > group_level)
continue; // skip hidden sessions
@@ -10700,7 +10652,7 @@ BUILDIN(getareausers)
}
idx = 3;
} else {
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL) {
script_pushint(st, -1);
return true;
@@ -10746,17 +10698,22 @@ BUILDIN(getareausers)
/*==========================================
*------------------------------------------*/
-int buildin_getareadropitem_sub(struct block_list *bl,va_list ap)
+int buildin_getareadropitem_sub(struct block_list *bl, va_list ap)
{
- int item=va_arg(ap,int);
- int *amount=va_arg(ap,int *);
- struct flooritem_data *drop=(struct flooritem_data *)bl;
+ int item = va_arg(ap, int);
+ int *amount = va_arg(ap, int *);
+ const struct flooritem_data *drop = NULL;
- if(drop->item_data.nameid==item)
- (*amount)+=drop->item_data.amount;
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_ITEM);
+ drop = BL_UCCAST(BL_ITEM, bl);
+
+ if (drop->item_data.nameid == item)
+ (*amount) += drop->item_data.amount;
return 0;
}
+
BUILDIN(getareadropitem) {
const char *str;
int16 m,x0,y0,x1,y1;
@@ -10832,8 +10789,9 @@ BUILDIN(hideonnpc)
* sc_start4 <effect_id>,<duration>,<val1>,<val2>,<val3>,<val4>{,<rate,<flag>,{<unit_id>}};
* <flag>: @see enum scstart_flag
*/
-BUILDIN(sc_start) {
- TBL_NPC * nd = map->id2nd(st->oid);
+BUILDIN(sc_start)
+{
+ struct npc_data *nd = map->id2nd(st->oid);
struct block_list* bl;
enum sc_type type;
int tick, val1, val2, val3, val4=0, rate, flag;
@@ -11029,7 +10987,7 @@ BUILDIN(debugmes)
BUILDIN(catchpet)
{
int pet_id;
- TBL_PC *sd;
+ struct map_session_data *sd;
pet_id= script_getnum(st,2);
sd=script->rid2sd(st);
@@ -11045,10 +11003,8 @@ BUILDIN(catchpet)
*------------------------------------------*/
BUILDIN(homunculus_evolution)
{
- TBL_PC *sd;
-
- sd=script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
if(homun_alive(sd->hd)) {
@@ -11067,11 +11023,9 @@ BUILDIN(homunculus_evolution)
*------------------------------------------*/
BUILDIN(homunculus_mutate)
{
- TBL_PC *sd;
bool success = false;
-
- sd = script->rid2sd(st);
- if( sd == NULL || sd->hd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL || sd->hd == NULL)
return true;
if (sd->hd->homunculus.vaporize == HOM_ST_MORPH) {
@@ -11110,11 +11064,9 @@ BUILDIN(homunculus_mutate)
*------------------------------------------*/
BUILDIN(homunculus_morphembryo)
{
- TBL_PC *sd;
bool success = false;
-
- sd = script->rid2sd(st);
- if( sd == NULL || sd->hd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL || sd->hd == NULL)
return true;
if (homun_alive(sd->hd)) {
@@ -11153,10 +11105,10 @@ BUILDIN(homunculus_morphembryo)
* 1 = Homunculus is vaporized (rest)
* 2 = Homunculus is in morph state
*------------------------------------------*/
-BUILDIN(homunculus_checkcall) {
- TBL_PC *sd = script->rid2sd(st);
-
- if( sd == NULL || !sd->hd )
+BUILDIN(homunculus_checkcall)
+{
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL || sd->hd == NULL)
script_pushint(st, -1);
else
script_pushint(st, sd->hd->homunculus.vaporize);
@@ -11165,11 +11117,10 @@ BUILDIN(homunculus_checkcall) {
}
// [Zephyrus]
-BUILDIN(homunculus_shuffle) {
- TBL_PC *sd;
-
- sd=script->rid2sd(st);
- if( sd == NULL )
+BUILDIN(homunculus_shuffle)
+{
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
if(homun_alive(sd->hd))
@@ -11182,12 +11133,11 @@ BUILDIN(homunculus_shuffle) {
BUILDIN(eaclass)
{
int class_;
- if( script_hasdata(st,2) )
+ if (script_hasdata(st,2)) {
class_ = script_getnum(st,2);
- else {
- TBL_PC *sd;
- sd=script->rid2sd(st);
- if( !sd )
+ } else {
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
class_ = sd->status.class_;
}
@@ -11199,10 +11149,10 @@ BUILDIN(roclass)
{
int class_ =script_getnum(st,2);
int sex;
- if( script_hasdata(st,3) )
+ if (script_hasdata(st,3)) {
sex = script_getnum(st,3);
- else {
- TBL_PC *sd;
+ } else {
+ struct map_session_data *sd;
if (st->rid && (sd=script->rid2sd(st)) != NULL)
sex = sd->status.sex;
else
@@ -11217,9 +11167,8 @@ BUILDIN(roclass)
*------------------------------------------*/
BUILDIN(birthpet)
{
- TBL_PC *sd;
- sd=script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
if( sd->status.pet_id )
@@ -11241,12 +11190,9 @@ BUILDIN(birthpet)
*------------------------------------------*/
BUILDIN(resetlvl)
{
- TBL_PC *sd;
-
int type=script_getnum(st,2);
-
- sd=script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
pc->resetlvl(sd,type);
@@ -11257,7 +11203,7 @@ BUILDIN(resetlvl)
*------------------------------------------*/
BUILDIN(resetstatus)
{
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
pc->resetstate(sd);
@@ -11269,7 +11215,7 @@ BUILDIN(resetstatus)
*------------------------------------------*/
BUILDIN(resetskill)
{
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
pc->resetskill(sd, PCRESETSKILL_RESYNC);
@@ -11281,7 +11227,7 @@ BUILDIN(resetskill)
*------------------------------------------*/
BUILDIN(skillpointcount)
{
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
script_pushint(st,sd->status.skill_point + pc->resetskill(sd, PCRESETSKILL_RECOUNT));
@@ -11291,8 +11237,9 @@ BUILDIN(skillpointcount)
/*==========================================
*
*------------------------------------------*/
-BUILDIN(changebase) {
- TBL_PC *sd=NULL;
+BUILDIN(changebase)
+{
+ struct map_session_data *sd = NULL;
int vclass;
if (script_hasdata(st,3))
@@ -11318,10 +11265,10 @@ BUILDIN(changebase) {
return true;
}
-static TBL_PC *prepareChangeSex(struct script_state* st)
+static struct map_session_data *prepareChangeSex(struct script_state *st)
{
int i;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return NULL;
@@ -11338,7 +11285,7 @@ static TBL_PC *prepareChangeSex(struct script_state* st)
*------------------------------------------*/
BUILDIN(changesex)
{
- TBL_PC *sd = prepareChangeSex(st);
+ struct map_session_data *sd = prepareChangeSex(st);
if (sd == NULL)
return true;
chrif->changesex(sd, true);
@@ -11350,7 +11297,7 @@ BUILDIN(changesex)
*------------------------------------------*/
BUILDIN(changecharsex)
{
- TBL_PC *sd = prepareChangeSex(st);
+ struct map_session_data *sd = prepareChangeSex(st);
if (sd == NULL)
return true;
chrif->changesex(sd, false);
@@ -11360,9 +11307,8 @@ BUILDIN(changecharsex)
/*==========================================
* Works like 'announce' but outputs in the common chat window
*------------------------------------------*/
-BUILDIN(globalmes) {
- struct block_list *bl = map->id2bl(st->oid);
- struct npc_data *nd = (struct npc_data *)bl;
+BUILDIN(globalmes)
+{
const char *name=NULL,*mes;
mes=script_getstr(st,2);
@@ -11372,7 +11318,9 @@ BUILDIN(globalmes) {
// npc name to display
name=script_getstr(st,3);
} else {
- name=nd->name; //use current npc name
+ const struct npc_data *nd = map->id2nd(st->oid);
+ nullpo_retr(false, nd);
+ name = nd->name; //use current npc name
}
npc->globalmessage(name,mes); // broadcast to all players connected
@@ -11398,7 +11346,7 @@ BUILDIN(waitingroom)
int minLvl = script_hasdata(st,7) ? script_getnum(st,7) : 1;
int maxLvl = script_hasdata(st,8) ? script_getnum(st,8) : MAX_LEVEL;
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
if (nd != NULL) {
int pub = 1;
chat->create_npc_chat(nd, title, limit, pub, trigger, ev, zeny, minLvl, maxLvl);
@@ -11416,8 +11364,8 @@ BUILDIN(delwaitingroom) {
if( script_hasdata(st,2) )
nd = npc->name2id(script_getstr(st, 2));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
- if( nd != NULL )
+ nd = map->id2nd(st->oid);
+ if (nd != NULL)
chat->delete_npc_chat(nd);
return true;
}
@@ -11433,9 +11381,9 @@ BUILDIN(waitingroomkickall) {
if( script_hasdata(st,2) )
nd = npc->name2id(script_getstr(st,2));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( nd != NULL && (cd=(struct chat_data *)map->id2bl(nd->chat_id)) != NULL )
+ if (nd != NULL && (cd=map->id2cd(nd->chat_id)) != NULL)
chat->npc_kick_all(cd);
return true;
}
@@ -11451,9 +11399,9 @@ BUILDIN(enablewaitingroomevent) {
if( script_hasdata(st,2) )
nd = npc->name2id(script_getstr(st, 2));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( nd != NULL && (cd=(struct chat_data *)map->id2bl(nd->chat_id)) != NULL )
+ if (nd != NULL && (cd=map->id2cd(nd->chat_id)) != NULL)
chat->enable_event(cd);
return true;
}
@@ -11469,9 +11417,9 @@ BUILDIN(disablewaitingroomevent) {
if( script_hasdata(st,2) )
nd = npc->name2id(script_getstr(st, 2));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( nd != NULL && (cd=(struct chat_data *)map->id2bl(nd->chat_id)) != NULL )
+ if (nd != NULL && (cd=map->id2cd(nd->chat_id)) != NULL)
chat->disable_event(cd);
return true;
}
@@ -11494,9 +11442,10 @@ BUILDIN(disablewaitingroomevent) {
///
/// getwaitingroomstate(<type>,"<npc_name>") -> <info>
/// getwaitingroomstate(<type>) -> <info>
-BUILDIN(getwaitingroomstate) {
- struct npc_data *nd;
- struct chat_data *cd;
+BUILDIN(getwaitingroomstate)
+{
+ const struct npc_data *nd;
+ const struct chat_data *cd;
int type;
int i;
@@ -11504,9 +11453,9 @@ BUILDIN(getwaitingroomstate) {
if( script_hasdata(st,3) )
nd = npc->name2id(script_getstr(st, 3));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( nd == NULL || (cd=(struct chat_data *)map->id2bl(nd->chat_id)) == NULL ) {
+ if (nd == NULL || (cd=map->id2cd(nd->chat_id)) == NULL) {
script_pushint(st, -1);
return true;
}
@@ -11555,8 +11504,8 @@ BUILDIN(warpwaitingpc)
struct npc_data* nd;
struct chat_data* cd;
- nd = (struct npc_data *)map->id2bl(st->oid);
- if( nd == NULL || (cd=(struct chat_data *)map->id2bl(nd->chat_id)) == NULL )
+ nd = map->id2nd(st->oid);
+ if (nd == NULL || (cd=map->id2cd(nd->chat_id)) == NULL)
return true;
map_name = script_getstr(st,2);
@@ -11568,7 +11517,7 @@ BUILDIN(warpwaitingpc)
n = script_getnum(st,5);
for (i = 0; i < n && cd->users > 0; i++) {
- TBL_PC* sd = cd->usersd[0];
+ struct map_session_data *sd = cd->usersd[0];
if (strcmp(map_name,"SavePoint") == 0 && map->list[sd->bl.m].flag.noteleport) {
// can't teleport on this map
@@ -11638,10 +11587,11 @@ BUILDIN(detachrid)
/*==========================================
* Chk if account connected, (and charid from account if specified)
*------------------------------------------*/
-BUILDIN(isloggedin) {
- TBL_PC* sd = map->id2sd(script_getnum(st,2));
- if (script_hasdata(st,3) && sd &&
- sd->status.char_id != script_getnum(st,3))
+BUILDIN(isloggedin)
+{
+ struct map_session_data *sd = map->id2sd(script_getnum(st,2));
+ if (script_hasdata(st,3) && sd != NULL
+ && sd->status.char_id != script_getnum(st,3))
sd = NULL;
script->push_val(st->stack,C_INT,sd!=NULL,NULL);
return true;
@@ -11741,8 +11691,14 @@ BUILDIN(getmapflag)
return true;
}
/* pvp timer handling */
-int script_mapflag_pvp_sub(struct block_list *bl,va_list ap) {
- TBL_PC* sd = (TBL_PC*)bl;
+int script_mapflag_pvp_sub(struct block_list *bl, va_list ap)
+{
+ struct map_session_data *sd = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
+
if (sd->pvp_timer == INVALID_TIMER) {
sd->pvp_timer = timer->add(timer->gettick() + 200, pc->calc_pvprank_timer, sd->bl.id, 0);
sd->pvp_rank = 0;
@@ -11755,6 +11711,7 @@ int script_mapflag_pvp_sub(struct block_list *bl,va_list ap) {
clif->maptypeproperty2(&sd->bl,SELF);
return 0;
}
+
BUILDIN(setmapflag) {
int16 m,i;
const char *str, *val2 = NULL;
@@ -11945,10 +11902,11 @@ BUILDIN(removemapflag) {
return true;
}
-BUILDIN(pvpon) {
+BUILDIN(pvpon)
+{
int16 m;
const char *str;
- TBL_PC* sd = NULL;
+ struct map_session_data *sd = NULL;
struct s_mapiterator* iter;
struct block_list bl;
@@ -11973,8 +11931,7 @@ BUILDIN(pvpon) {
return true;
iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) )
- {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if( sd->bl.m != m || sd->pvp_timer != INVALID_TIMER )
continue; // not applicable
@@ -11990,9 +11947,14 @@ BUILDIN(pvpon) {
return true;
}
-int buildin_pvpoff_sub(struct block_list *bl,va_list ap)
+int buildin_pvpoff_sub(struct block_list *bl, va_list ap)
{
- TBL_PC* sd = (TBL_PC*)bl;
+ struct map_session_data *sd = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
+
clif->pvpset(sd, 0, 0, 2);
if (sd->pvp_timer != INVALID_TIMER) {
timer->delete(sd->pvp_timer, pc->calc_pvprank_timer);
@@ -12084,7 +12046,7 @@ BUILDIN(emotion) {
player=script_getnum(st,3);
if (player != 0) {
- TBL_PC *sd = NULL;
+ struct map_session_data *sd = NULL;
if (script_hasdata(st,4))
sd = script->nick2sd(st, script_getstr(st,4));
else
@@ -12092,11 +12054,12 @@ BUILDIN(emotion) {
if (sd != NULL)
clif->emotion(&sd->bl,type);
} else if( script_hasdata(st,4) ) {
- TBL_NPC *nd = npc->name2id(script_getstr(st,4));
- if(nd)
+ struct npc_data *nd = npc->name2id(script_getstr(st,4));
+ if (nd == NULL)
clif->emotion(&nd->bl,type);
- } else
+ } else {
clif->emotion(map->id2bl(st->oid),type);
+ }
return true;
}
@@ -12117,9 +12080,13 @@ int buildin_maprespawnguildid_sub_pc(struct map_session_data* sd, va_list ap)
return 1;
}
-int buildin_maprespawnguildid_sub_mob(struct block_list *bl,va_list ap)
+int buildin_maprespawnguildid_sub_mob(struct block_list *bl, va_list ap)
{
- struct mob_data *md=(struct mob_data *)bl;
+ struct mob_data *md = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
if (md->guardian_data == NULL && md->class_ != MOBID_EMPELIUM)
status_kill(bl);
@@ -12191,13 +12158,14 @@ BUILDIN(agitcheck2) {
/// Sets the guild_id of this npc.
///
/// flagemblem <guild_id>;
-BUILDIN(flagemblem) {
- TBL_NPC* nd;
+BUILDIN(flagemblem)
+{
+ struct npc_data *nd;
int g_id = script_getnum(st,2);
if(g_id < 0) return true;
- nd = (TBL_NPC*)map->id2nd(st->oid);
+ nd = map->id2nd(st->oid);
if( nd == NULL ) {
ShowError("script:flagemblem: npc %d not found\n", st->oid);
} else if( nd->subtype != SCRIPT ) {
@@ -12310,7 +12278,7 @@ BUILDIN(requestguildinfo)
BUILDIN(getequipcardcnt)
{
int i=-1,j,num;
- TBL_PC *sd;
+ struct map_session_data *sd;
int count;
num=script_getnum(st,2);
@@ -12349,7 +12317,7 @@ BUILDIN(successremovecards)
{
int i=-1,c,cardflag=0;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
int num = script_getnum(st,2);
if (sd == NULL)
@@ -12420,7 +12388,7 @@ BUILDIN(failedremovecards)
{
int i=-1,c,cardflag=0;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
int num = script_getnum(st,2);
int typefail = script_getnum(st,3);
@@ -12550,9 +12518,15 @@ BUILDIN(mapwarp) {
}
// Added by RoVeRT
-int buildin_mobcount_sub(struct block_list *bl,va_list ap) {
- char *event=va_arg(ap,char *);
- struct mob_data *md = ((struct mob_data *)bl);
+int buildin_mobcount_sub(struct block_list *bl, va_list ap)
+{
+ char *event = va_arg(ap,char *);
+ const struct mob_data *md = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCCAST(BL_MOB, bl);
+
if( md->status.hp > 0 && (!event || strcmp(event,md->npc_event) == 0) )
return 1;
return 0;
@@ -12594,8 +12568,8 @@ BUILDIN(mobcount) {
BUILDIN(marriage) {
const char *partner=script_getstr(st,2);
- TBL_PC *sd=script->rid2sd(st);
- TBL_PC *p_sd = script->nick2sd(st, partner);
+ struct map_session_data *sd = script->rid2sd(st);
+ struct map_session_data *p_sd = script->nick2sd(st, partner);
if (sd == NULL || p_sd == NULL || pc->marriage(sd,p_sd) < 0) {
script_pushint(st,0);
@@ -12604,8 +12578,9 @@ BUILDIN(marriage) {
script_pushint(st,1);
return true;
}
-BUILDIN(wedding_effect) {
- TBL_PC *sd = script->rid2sd(st);
+BUILDIN(wedding_effect)
+{
+ struct map_session_data *sd = script->rid2sd(st);
struct block_list *bl;
if (sd == NULL)
@@ -12617,8 +12592,8 @@ BUILDIN(wedding_effect) {
}
BUILDIN(divorce)
{
- TBL_PC *sd=script->rid2sd(st);
- if(sd==NULL || pc->divorce(sd) < 0) {
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL || pc->divorce(sd) < 0) {
script_pushint(st,0);
return true;
}
@@ -12627,7 +12602,7 @@ BUILDIN(divorce)
}
BUILDIN(ispartneron) {
- TBL_PC *sd=script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd==NULL || !pc->ismarried(sd)
|| map->charid2sd(sd->status.partner_id) == NULL) {
@@ -12641,7 +12616,7 @@ BUILDIN(ispartneron) {
BUILDIN(getpartnerid)
{
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -12651,7 +12626,7 @@ BUILDIN(getpartnerid)
BUILDIN(getchildid)
{
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -12661,7 +12636,7 @@ BUILDIN(getchildid)
BUILDIN(getmotherid)
{
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -12670,8 +12645,8 @@ BUILDIN(getmotherid)
}
BUILDIN(getfatherid) {
- TBL_PC *sd=script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
script_pushint(st,sd->status.father);
@@ -12683,8 +12658,8 @@ BUILDIN(warppartner)
int x,y;
unsigned short map_index;
const char *str;
- TBL_PC *sd=script->rid2sd(st);
- TBL_PC *p_sd=NULL;
+ struct map_session_data *sd = script->rid2sd(st);
+ struct map_session_data *p_sd = NULL;
if (sd == NULL || !pc->ismarried(sd)
|| (p_sd = script->charid2sd(st, sd->status.partner_id)) == NULL) {
@@ -12992,7 +12967,7 @@ BUILDIN(setiteminfo)
BUILDIN(getequipcardid)
{
int i=-1,num,slot;
- TBL_PC *sd;
+ struct map_session_data *sd;
num=script_getnum(st,2);
slot=script_getnum(st,3);
@@ -13018,9 +12993,9 @@ BUILDIN(petskillbonus)
{
struct pet_data *pd;
- TBL_PC *sd=script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
- if(sd==NULL || sd->pd==NULL)
+ if (sd == NULL || sd->pd == NULL)
return true;
pd=sd->pd;
@@ -13055,9 +13030,9 @@ BUILDIN(petloot)
{
int max;
struct pet_data *pd;
- TBL_PC *sd=script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
- if(sd==NULL || sd->pd==NULL)
+ if (sd == NULL || sd->pd == NULL)
return true;
max=script_getnum(st,2);
@@ -13091,8 +13066,9 @@ BUILDIN(petloot)
* @inventorylist_card(0..3), @inventorylist_expire
* @inventorylist_count = scalar
*------------------------------------------*/
-BUILDIN(getinventorylist){
- TBL_PC *sd=script->rid2sd(st);
+BUILDIN(getinventorylist)
+{
+ struct map_session_data *sd = script->rid2sd(st);
char card_var[NAME_LENGTH];
int i,j=0,k;
@@ -13123,8 +13099,9 @@ BUILDIN(getinventorylist){
return true;
}
-BUILDIN(getcartinventorylist){
- TBL_PC *sd=script->rid2sd(st);
+BUILDIN(getcartinventorylist)
+{
+ struct map_session_data *sd = script->rid2sd(st);
char card_var[26];
int i,j=0,k;
@@ -13153,9 +13130,10 @@ BUILDIN(getcartinventorylist){
BUILDIN(getskilllist)
{
- TBL_PC *sd=script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
int i,j=0;
- if(!sd) return true;
+ if (sd == NULL)
+ return true;
for(i=0;i<MAX_SKILL;i++) {
if(sd->status.skill[i].id > 0 && sd->status.skill[i].lv > 0) {
pc->setreg(sd,reference_uid(script->add_str("@skilllist_id"), j),sd->status.skill[i].id);
@@ -13170,9 +13148,10 @@ BUILDIN(getskilllist)
BUILDIN(clearitem)
{
- TBL_PC *sd=script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
int i;
- if(sd==NULL) return true;
+ if (sd == NULL)
+ return true;
for (i=0; i<MAX_INVENTORY; i++) {
if (sd->status.inventory[i].amount) {
pc->delitem(sd, i, sd->status.inventory[i].amount, 0, DELITEM_NORMAL, LOG_TYPE_SCRIPT);
@@ -13187,8 +13166,9 @@ BUILDIN(clearitem)
BUILDIN(disguise)
{
int id;
- TBL_PC* sd = script->rid2sd(st);
- if (sd == NULL) return true;
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
+ return true;
id = script_getnum(st,2);
@@ -13206,8 +13186,9 @@ BUILDIN(disguise)
*------------------------------------------*/
BUILDIN(undisguise)
{
- TBL_PC* sd = script->rid2sd(st);
- if (sd == NULL) return true;
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
+ return true;
if (sd->disguise != -1) {
pc->disguise(sd, -1);
@@ -13247,8 +13228,8 @@ BUILDIN(misceffect)
if (bl)
clif->specialeffect(bl,type,AREA);
} else {
- TBL_PC *sd=script->rid2sd(st);
- if(sd)
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd != NULL)
clif->specialeffect(&sd->bl,type,AREA);
}
return true;
@@ -13333,23 +13314,27 @@ BUILDIN(playbgmall) {
*------------------------------------------*/
BUILDIN(soundeffect)
{
- TBL_PC* sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
const char* name = script_getstr(st,2);
int type = script_getnum(st,3);
- if(sd)
- {
+ if (sd != NULL) {
clif->soundeffect(sd,&sd->bl,name,type);
}
return true;
}
-int soundeffect_sub(struct block_list* bl,va_list ap)
+int soundeffect_sub(struct block_list *bl, va_list ap)
{
- char* name = va_arg(ap,char*);
- int type = va_arg(ap,int);
+ struct map_session_data *sd = NULL;
+ char *name = va_arg(ap, char *);
+ int type = va_arg(ap, int);
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
- clif->soundeffect((TBL_PC *)bl, bl, name, type);
+ clif->soundeffect(sd, bl, name, type);
return true;
}
@@ -13412,9 +13397,9 @@ BUILDIN(soundeffectall) {
BUILDIN(petrecovery)
{
struct pet_data *pd;
- TBL_PC *sd=script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
- if(sd==NULL || sd->pd==NULL)
+ if (sd == NULL || sd->pd == NULL)
return true;
pd=sd->pd;
@@ -13438,9 +13423,10 @@ BUILDIN(petrecovery)
*------------------------------------------*/
/// petskillattack <skill id>,<level>,<div>,<rate>,<bonusrate>
/// petskillattack "<skill name>",<level>,<div>,<rate>,<bonusrate>
-BUILDIN(petskillattack) {
+BUILDIN(petskillattack)
+{
struct pet_data *pd;
- TBL_PC *sd=script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd==NULL || sd->pd==NULL)
return true;
@@ -13463,11 +13449,12 @@ BUILDIN(petskillattack) {
*------------------------------------------*/
/// petskillsupport <skill id>,<level>,<delay>,<hp>,<sp>
/// petskillsupport "<skill name>",<level>,<delay>,<hp>,<sp>
-BUILDIN(petskillsupport) {
+BUILDIN(petskillsupport)
+{
struct pet_data *pd;
- TBL_PC *sd=script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
- if(sd==NULL || sd->pd==NULL)
+ if (sd == NULL || sd->pd == NULL)
return true;
pd=sd->pd;
@@ -13501,8 +13488,9 @@ BUILDIN(petskillsupport) {
*------------------------------------------*/
/// skilleffect <skill id>,<level>
/// skilleffect "<skill name>",<level>
-BUILDIN(skilleffect) {
- TBL_PC *sd;
+BUILDIN(skilleffect)
+{
+ struct map_session_data *sd;
uint16 skill_id=( script_isstringtype(st,2) ? skill->name2id(script_getstr(st,2)) : script_getnum(st,2) );
uint16 skill_lv=script_getnum(st,3);
@@ -13553,17 +13541,14 @@ BUILDIN(specialeffect) {
if(bl==NULL)
return true;
- if( script_hasdata(st,4) )
- {
- TBL_NPC *nd = npc->name2id(script_getstr(st,4));
- if(nd)
+ if (script_hasdata(st,4)) {
+ struct npc_data *nd = npc->name2id(script_getstr(st,4));
+ if (nd != NULL)
clif->specialeffect(&nd->bl, type, target);
- }
- else
- {
+ } else {
if (target == SELF) {
- TBL_PC *sd=script->rid2sd(st);
- if (sd)
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd != NULL)
clif->specialeffect_single(bl,type,sd->fd);
} else {
clif->specialeffect(bl, type, target);
@@ -13574,7 +13559,7 @@ BUILDIN(specialeffect) {
}
BUILDIN(specialeffect2) {
- TBL_PC *sd;
+ struct map_session_data *sd;
int type = script_getnum(st,2);
enum send_target target = script_hasdata(st,3) ? (send_target)script_getnum(st,3) : AREA;
@@ -13594,10 +13579,10 @@ BUILDIN(specialeffect2) {
*------------------------------------------*/
BUILDIN(nude)
{
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
int i, calcflag = 0;
- if( sd == NULL )
+ if (sd == NULL)
return true;
for( i = 0 ; i < EQI_MAX; i++ ) {
@@ -13617,8 +13602,9 @@ BUILDIN(nude)
/*==========================================
* gmcommand [MouseJstr]
*------------------------------------------*/
-BUILDIN(atcommand) {
- TBL_PC *sd, *dummy_sd = NULL;
+BUILDIN(atcommand)
+{
+ struct map_session_data *sd, *dummy_sd = NULL;
int fd;
const char* cmd;
bool ret = true;
@@ -13638,7 +13624,7 @@ BUILDIN(atcommand) {
struct block_list* bl = map->id2bl(st->oid);
memcpy(&sd->bl, bl, sizeof(struct block_list));
if (bl->type == BL_NPC)
- safestrncpy(sd->status.name, ((TBL_NPC*)bl)->name, NAME_LENGTH);
+ safestrncpy(sd->status.name, BL_UCAST(BL_NPC, bl)->name, NAME_LENGTH);
}
}
@@ -13660,7 +13646,7 @@ BUILDIN(atcommand) {
*/
BUILDIN(dispbottom)
{
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
const char *message = script_getstr(st,2);
if (sd == NULL)
@@ -13682,12 +13668,11 @@ BUILDIN(dispbottom)
*------------------------------------------*/
BUILDIN(recovery)
{
- TBL_PC* sd;
+ struct map_session_data *sd;
struct s_mapiterator* iter;
iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) )
- {
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter))) {
if(pc_isdead(sd))
status->revive(&sd->bl, 100, 100);
else
@@ -13704,11 +13689,11 @@ BUILDIN(recovery)
*------------------------------------------*/
BUILDIN(getpetinfo)
{
- TBL_PC *sd=script->rid2sd(st);
- TBL_PET *pd;
+ struct map_session_data *sd = script->rid2sd(st);
+ struct pet_data *pd;
int type=script_getnum(st,2);
- if(!sd || !sd->pd) {
+ if (sd == NULL || sd->pd == NULL) {
if (type == 2)
script_pushconststr(st,"null");
else
@@ -13738,10 +13723,10 @@ BUILDIN(getpetinfo)
*------------------------------------------*/
BUILDIN(gethominfo)
{
- TBL_PC *sd=script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
int type = script_getnum(st,2);
- if(!sd || !sd->hd) {
+ if (sd == NULL || sd->hd == NULL) {
if (type == 2)
script_pushconststr(st,"null");
else
@@ -13820,7 +13805,7 @@ BUILDIN(getmercinfo)
BUILDIN(checkequipedcard)
{
int n,i,c=0;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -13866,8 +13851,9 @@ BUILDIN(__jump_zero)
/*==========================================
* movenpc [MouseJstr]
*------------------------------------------*/
-BUILDIN(movenpc) {
- TBL_NPC *nd = NULL;
+BUILDIN(movenpc)
+{
+ struct npc_data *nd = NULL;
const char *npc_name;
int x,y;
@@ -13890,7 +13876,7 @@ BUILDIN(movenpc) {
BUILDIN(message)
{
const char *message;
- TBL_PC *sd = NULL;
+ struct map_session_data *sd = NULL;
if (script_isstringtype(st,2))
sd = script->nick2sd(st, script_getstr(st,2));
@@ -13917,12 +13903,11 @@ BUILDIN(npctalk)
if (script_hasdata(st, 3)) {
nd = npc->name2id(script_getstr(st, 3));
- }
- else {
- nd = (struct npc_data *)map->id2bl(st->oid);
+ } else {
+ nd = map->id2nd(st->oid);
}
- if (nd) {
+ if (nd != NULL) {
char name[NAME_LENGTH], message[256];
safestrncpy(name, nd->name, sizeof(name));
strtok(name, "#"); // discard extra name identifier if present
@@ -13939,9 +13924,9 @@ BUILDIN(npcspeed) {
int speed;
speed = script_getnum(st,2);
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( nd ) {
+ if (nd != NULL) {
unit->bl2ud2(&nd->bl); // ensure nd->ud is safe to edit
nd->speed = speed;
nd->ud->state.speed_changed = 1;
@@ -13950,14 +13935,15 @@ BUILDIN(npcspeed) {
return true;
}
// make an npc walk to a position [Valaris]
-BUILDIN(npcwalkto) {
- struct npc_data *nd=(struct npc_data *)map->id2bl(st->oid);
+BUILDIN(npcwalkto)
+{
+ struct npc_data *nd = map->id2nd(st->oid);
int x=0,y=0;
x=script_getnum(st,2);
y=script_getnum(st,3);
- if( nd ) {
+ if (nd != NULL) {
unit->bl2ud2(&nd->bl); // ensure nd->ud is safe to edit
if (!nd->status.hp) {
status_calc_npc(nd, SCO_FIRST);
@@ -13970,10 +13956,11 @@ BUILDIN(npcwalkto) {
return true;
}
// stop an npc's movement [Valaris]
-BUILDIN(npcstop) {
- struct npc_data *nd = (struct npc_data *)map->id2bl(st->oid);
+BUILDIN(npcstop)
+{
+ struct npc_data *nd = map->id2nd(st->oid);
- if( nd ) {
+ if (nd != NULL) {
unit->bl2ud2(&nd->bl); // ensure nd->ud is safe to edit
unit->stop_walking(&nd->bl, STOPWALKING_FLAG_FIXPOS|STOPWALKING_FLAG_NEXTCELL);
}
@@ -13982,9 +13969,10 @@ BUILDIN(npcstop) {
}
// set click npc distance [4144]
-BUILDIN(setnpcdistance) {
- struct npc_data *nd = (struct npc_data *) map->id2bl (st->oid);
- if (!nd)
+BUILDIN(setnpcdistance)
+{
+ struct npc_data *nd = map->id2nd(st->oid);
+ if (nd == NULL)
return false;
nd->area_size = script_getnum(st, 2);
@@ -13995,23 +13983,20 @@ BUILDIN(setnpcdistance) {
// return current npc direction [4144]
BUILDIN(getnpcdir)
{
- struct npc_data *nd = 0;
+ const struct npc_data *nd = NULL;
- if (script_hasdata(st, 2))
- {
- nd = npc->name2id (script_getstr(st, 2));
+ if (script_hasdata(st, 2)) {
+ nd = npc->name2id(script_getstr(st, 2));
}
- if (!nd && !st->oid)
- {
+ if (nd == NULL && !st->oid) {
script_pushint(st, -1);
return true;
}
- if (!nd)
- nd = (struct npc_data *) map->id2bl (st->oid);
+ if (nd == NULL)
+ nd = map->id2nd(st->oid);
- if (!nd)
- {
+ if (nd == NULL) {
script_pushint(st, -1);
return true;
}
@@ -14025,22 +14010,19 @@ BUILDIN(getnpcdir)
BUILDIN(setnpcdir)
{
int newdir;
- struct npc_data *nd = 0;
+ struct npc_data *nd = NULL;
- if (script_hasdata(st, 3))
- {
- nd = npc->name2id (script_getstr(st, 2));
+ if (script_hasdata(st, 3)) {
+ nd = npc->name2id(script_getstr(st, 2));
newdir = script_getnum(st, 3);
- }
- else if (script_hasdata(st, 2))
- {
+ } else if (script_hasdata(st, 2)) {
if (!st->oid)
return false;
- nd = (struct npc_data *) map->id2bl (st->oid);
+ nd = map->id2nd(st->oid);
newdir = script_getnum(st, 2);
}
- if (!nd)
+ if (nd == NULL)
return false;
if (newdir < 0)
@@ -14061,23 +14043,20 @@ BUILDIN(setnpcdir)
// return npc class [4144]
BUILDIN(getnpcclass)
{
- struct npc_data *nd = 0;
+ const struct npc_data *nd = NULL;
- if (script_hasdata(st, 2))
- {
- nd = npc->name2id (script_getstr(st, 2));
+ if (script_hasdata(st, 2)) {
+ nd = npc->name2id(script_getstr(st, 2));
}
- if (!nd && !st->oid)
- {
+ if (nd == NULL && !st->oid) {
script_pushint(st, -1);
return false;
}
- if (!nd)
- nd = (struct npc_data *) map->id2bl(st->oid);
+ if (nd == NULL)
+ nd = map->id2nd(st->oid);
- if (!nd)
- {
+ if (nd == NULL) {
script_pushint(st, -1);
return false;
}
@@ -14093,7 +14072,7 @@ BUILDIN(getnpcclass)
BUILDIN(getlook)
{
int type,val = -1;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -14109,6 +14088,7 @@ BUILDIN(getlook)
case LOOK_SHIELD: val = sd->status.shield; break; //8
case LOOK_SHOES: break; //9
case LOOK_ROBE: val = sd->status.robe; break; //12
+ case LOOK_BODY2: val=sd->status.body; break; //13
}
script_pushint(st,val);
@@ -14121,7 +14101,7 @@ BUILDIN(getlook)
BUILDIN(getsavepoint)
{
int type;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -14164,7 +14144,7 @@ BUILDIN(getsavepoint)
BUILDIN(getmapxy)
{
struct block_list *bl = NULL;
- TBL_PC *sd=NULL;
+ struct map_session_data *sd = NULL;
int64 num;
const char *name;
@@ -14363,7 +14343,7 @@ BUILDIN(getmapxy)
BUILDIN(logmes)
{
const char *str;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -14377,12 +14357,11 @@ BUILDIN(summon)
{
int class_, timeout=0;
const char *str,*event="";
- TBL_PC *sd;
struct mob_data *md;
int64 tick = timer->gettick();
-
- sd=script->rid2sd(st);
- if (!sd) return true;
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
+ return true;
str = script_getstr(st,2);
class_ = script_getnum(st,3);
@@ -14425,7 +14404,7 @@ BUILDIN(isequippedcnt)
{
int i, j, k, id = 1;
int ret = 0;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -14477,7 +14456,7 @@ BUILDIN(isequipped)
int ret = -1;
//Original hash to reverse it when full check fails.
unsigned int setitem_hash = 0, setitem_hash2 = 0;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -14555,7 +14534,7 @@ BUILDIN(cardscnt)
int i, k, id = 1;
int ret = 0;
int index;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -14594,7 +14573,7 @@ BUILDIN(cardscnt)
*-------------------------------------------------------*/
BUILDIN(getrefine)
{
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -14621,7 +14600,7 @@ BUILDIN(day) {
BUILDIN(unequip)
{
size_t num;
- TBL_PC *sd;
+ struct map_session_data *sd;
num = script_getnum(st,2);
sd = script->rid2sd(st);
@@ -14636,11 +14615,9 @@ BUILDIN(unequip)
BUILDIN(equip)
{
int nameid=0,i;
- TBL_PC *sd;
struct item_data *item_data;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return false;
nameid=script_getnum(st,2);
@@ -14687,7 +14664,7 @@ BUILDIN(equip2)
{
int i,nameid,ref,attr,c0,c1,c2,c3;
struct item_data *item_data;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL) {
script_pushint(st,0);
@@ -14981,7 +14958,7 @@ BUILDIN(explode)
char *temp = NULL;
const char *name;
- TBL_PC* sd = NULL;
+ struct map_session_data *sd = NULL;
if (!data_isreference(data)) {
ShowError("script:explode: not a variable\n");
@@ -15040,7 +15017,7 @@ BUILDIN(implode)
const char *name;
uint32 array_size, id;
- TBL_PC* sd = NULL;
+ struct map_session_data *sd = NULL;
char *output;
@@ -15735,11 +15712,81 @@ BUILDIN(md5)
return true;
}
+BUILDIN(swap)
+{
+ struct map_session_data *sd = NULL;
+ struct script_data *data1, *data2;
+ const char *varname1, *varname2;
+ int64 uid1, uid2;
+
+ data1 = script_getdata(st,2);
+ data2 = script_getdata(st,3);
+
+ if (!data_isreference(data1) || !data_isreference(data2) || reference_toconstant(data1) || reference_toconstant(data2)) {
+ st->state = END;
+ return true; // avoid print error message twice
+ }
+
+ if (reference_toparam(data1) || reference_toparam(data2)) {
+ ShowError("script:swap: detected parameter type constant.\n");
+ if (reference_toparam(data1))
+ script->reportdata(data1);
+ if (reference_toparam(data2))
+ script->reportdata(data2);
+ st->state = END;
+ return false;
+ }
+
+ varname1 = reference_getname(data1);
+ varname2 = reference_getname(data2);
+
+ if ((is_string_variable(varname1) && !is_string_variable(varname2)) || (!is_string_variable(varname1) && is_string_variable(varname2))) {
+ ShowError("script:swap: both sides must be same integer or string type.\n");
+ script->reportdata(data1);
+ script->reportdata(data2);
+ st->state = END;
+ return false;
+ }
+
+ if (not_server_variable(*varname1) || not_server_variable(*varname2)) {
+ sd = script->rid2sd(st);
+ if (sd == NULL)
+ return true; // avoid print error message twice
+ }
+
+ uid1 = reference_getuid(data1);
+ uid2 = reference_getuid(data2);
+
+ if (is_string_variable(varname1)) {
+ const char *value1, *value2;
+
+ value1 = script_getstr(st,2);
+ value2 = script_getstr(st,3);
+
+ if (strcmpi(value1, value2)) {
+ script->set_reg(st, sd, uid1, varname1, (void*)(value2), script_getref(st,3));
+ script->set_reg(st, sd, uid2, varname2, (void*)(value1), script_getref(st,2));
+ }
+ }
+ else {
+ int value1, value2;
+
+ value1 = script_getnum(st,2);
+ value2 = script_getnum(st,3);
+
+ if (value1 != value2) {
+ script->set_reg(st, sd, uid1, varname1, (void*)h64BPTRSIZE(value2), script_getref(st,3));
+ script->set_reg(st, sd, uid2, varname2, (void*)h64BPTRSIZE(value1), script_getref(st,2));
+ }
+ }
+ return true;
+}
+
// [zBuffer] List of dynamic var commands --->
BUILDIN(setd)
{
- TBL_PC *sd=NULL;
+ struct map_session_data *sd = NULL;
char varname[100];
const char *buffer;
int elem;
@@ -15770,7 +15817,7 @@ BUILDIN(setd)
int buildin_query_sql_sub(struct script_state* st, Sql* handle)
{
int i, j;
- TBL_PC* sd = NULL;
+ struct map_session_data *sd = NULL;
const char* query;
struct script_data* data;
const char* name;
@@ -15897,11 +15944,10 @@ BUILDIN(getd) {
// Pet stat [Lance]
BUILDIN(petstat)
{
- TBL_PC *sd = NULL;
struct pet_data *pd;
int flag = script_getnum(st,2);
- sd = script->rid2sd(st);
- if(!sd || !sd->status.pet_id || !sd->pd) {
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL || sd->status.pet_id == 0 || sd->pd == NULL) {
if(flag == 2)
script_pushconststr(st, "");
else
@@ -15927,7 +15973,7 @@ BUILDIN(callshop)
struct npc_data *nd;
const char *shopname;
int flag = 0;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -16071,7 +16117,7 @@ BUILDIN(npcshopattach) {
}
if (flag)
- nd->master_nd = ((struct npc_data *)map->id2bl(st->oid));
+ nd->master_nd = map->id2nd(st->oid);
else
nd->master_nd = NULL;
@@ -16282,7 +16328,7 @@ BUILDIN(getmonsterinfo)
BUILDIN(checkvending) // check vending [Nab4]
{
- TBL_PC *sd = NULL;
+ struct map_session_data *sd = NULL;
if (script_hasdata(st,2))
sd = script->nick2sd(st, script_getstr(st,2));
@@ -16299,7 +16345,7 @@ BUILDIN(checkvending) // check vending [Nab4]
// check chatting [Marka]
BUILDIN(checkchatting) {
- TBL_PC *sd = NULL;
+ struct map_session_data *sd = NULL;
if (script_hasdata(st,2))
sd = script->nick2sd(st, script_getstr(st,2));
@@ -16315,7 +16361,7 @@ BUILDIN(checkchatting) {
}
BUILDIN(checkidle) {
- TBL_PC *sd = NULL;
+ struct map_session_data *sd = NULL;
if (script_hasdata(st, 2))
sd = script->nick2sd(st, script_getstr(st, 2));
@@ -16341,11 +16387,11 @@ BUILDIN(searchitem)
int32 start;
int32 id;
int32 i;
- TBL_PC* sd = NULL;
+ struct map_session_data *sd = NULL;
- if ((items[0] = itemdb->exists(atoi(itemname))))
+ if ((items[0] = itemdb->exists(atoi(itemname)))) {
count = 1;
- else {
+ } else {
count = itemdb->search_name_array(items, ARRAYLENGTH(items), itemname, 0);
if (count > MAX_SEARCH) count = MAX_SEARCH;
}
@@ -16393,17 +16439,18 @@ BUILDIN(searchitem)
}
// [zBuffer] List of player cont commands --->
-BUILDIN(rid2name) {
+BUILDIN(rid2name)
+{
struct block_list *bl = NULL;
int rid = script_getnum(st,2);
if((bl = map->id2bl(rid))) {
switch(bl->type) {
- case BL_MOB: script_pushstrcopy(st,((TBL_MOB*)bl)->name); break;
- case BL_PC: script_pushstrcopy(st,((TBL_PC*)bl)->status.name); break;
- case BL_NPC: script_pushstrcopy(st,((TBL_NPC*)bl)->exname); break;
- case BL_PET: script_pushstrcopy(st,((TBL_PET*)bl)->pet.name); break;
- case BL_HOM: script_pushstrcopy(st,((TBL_HOM*)bl)->homunculus.name); break;
- case BL_MER: script_pushstrcopy(st,((TBL_MER*)bl)->db->name); break;
+ case BL_MOB: script_pushstrcopy(st, BL_UCCAST(BL_MOB, bl)->name); break;
+ case BL_PC: script_pushstrcopy(st, BL_UCCAST(BL_PC, bl)->status.name); break;
+ case BL_NPC: script_pushstrcopy(st, BL_UCCAST(BL_NPC, bl)->exname); break;
+ case BL_PET: script_pushstrcopy(st, BL_UCCAST(BL_PET, bl)->pet.name); break;
+ case BL_HOM: script_pushstrcopy(st, BL_UCCAST(BL_HOM, bl)->homunculus.name); break;
+ case BL_MER: script_pushstrcopy(st, BL_UCCAST(BL_MER, bl)->db->name); break;
default:
ShowError("buildin_rid2name: BL type unknown.\n");
script_pushconststr(st,"");
@@ -16418,7 +16465,7 @@ BUILDIN(rid2name) {
BUILDIN(pcblockmove) {
int id, flag;
- TBL_PC *sd = NULL;
+ struct map_session_data *sd = NULL;
id = script_getnum(st,2);
flag = script_getnum(st,3);
@@ -16434,9 +16481,10 @@ BUILDIN(pcblockmove) {
return true;
}
-BUILDIN(pcfollow) {
+BUILDIN(pcfollow)
+{
int id, targetid;
- TBL_PC *sd = NULL;
+ struct map_session_data *sd = NULL;
id = script_getnum(st,2);
targetid = script_getnum(st,3);
@@ -16455,7 +16503,7 @@ BUILDIN(pcfollow) {
BUILDIN(pcstopfollow)
{
int id;
- TBL_PC *sd = NULL;
+ struct map_session_data *sd = NULL;
id = script_getnum(st,2);
@@ -16515,7 +16563,7 @@ BUILDIN(unitwalk) {
}
if( bl->type == BL_NPC ) {
- unit->bl2ud2(bl); // ensure the ((TBL_NPC*)bl)->ud is safe to edit
+ unit->bl2ud2(bl); // ensure the ((struct npc_data*)bl)->ud is safe to edit
}
if( script_hasdata(st,4) ) {
int x = script_getnum(st,3);
@@ -16569,7 +16617,7 @@ BUILDIN(unitwarp) {
mapid = map->mapname2mapid(mapname);
if( mapid >= 0 && bl != NULL ) {
- unit->bl2ud2(bl); // ensure ((TBL_NPC*)bl)->ud is safe to edit
+ unit->bl2ud2(bl); // ensure ((struct npc_data *)bl)->ud is safe to edit
script_pushint(st, unit->warp(bl,mapid,x,y,CLR_OUTSIGHT));
} else {
script_pushint(st, 0);
@@ -16598,7 +16646,7 @@ BUILDIN(unitattack) {
}
if (script_isstringtype(st, 3)) {
- TBL_PC* sd = script->nick2sd(st, script_getstr(st, 3));
+ struct map_session_data *sd = script->nick2sd(st, script_getstr(st, 3));
if (sd != NULL)
target_bl = &sd->bl;
} else {
@@ -16618,14 +16666,14 @@ BUILDIN(unitattack) {
switch( unit_bl->type )
{
case BL_PC:
- clif->pActionRequest_sub(((TBL_PC *)unit_bl), actiontype > 0 ? 0x07 : 0x00, target_bl->id, timer->gettick());
+ clif->pActionRequest_sub(BL_UCAST(BL_PC, unit_bl), actiontype > 0 ? 0x07 : 0x00, target_bl->id, timer->gettick());
script_pushint(st, 1);
return true;
case BL_MOB:
- ((TBL_MOB *)unit_bl)->target_id = target_bl->id;
+ BL_UCAST(BL_MOB, unit_bl)->target_id = target_bl->id;
break;
case BL_PET:
- ((TBL_PET *)unit_bl)->target_id = target_bl->id;
+ BL_UCAST(BL_PET, unit_bl)->target_id = target_bl->id;
break;
default:
ShowError("script:unitattack: unsupported source unit type %d\n", unit_bl->type);
@@ -16647,11 +16695,11 @@ BUILDIN(unitstop) {
bl = map->id2bl(unit_id);
if( bl != NULL ) {
- unit->bl2ud2(bl); // ensure ((TBL_NPC*)bl)->ud is safe to edit
+ unit->bl2ud2(bl); // ensure ((struct npc_data *)bl)->ud is safe to edit
unit->stop_attack(bl);
unit->stop_walking(bl, STOPWALKING_FLAG_NEXTCELL);
if( bl->type == BL_MOB )
- ((TBL_MOB*)bl)->target_id = 0;
+ BL_UCAST(BL_MOB, bl)->target_id = 0;
}
return true;
@@ -16717,12 +16765,13 @@ BUILDIN(unitskilluseid) {
bl = map->id2bl(unit_id);
- if( bl != NULL ) {
- if( bl->type == BL_NPC ) {
- if (!((TBL_NPC*)bl)->status.hp) {
- status_calc_npc(((TBL_NPC*)bl), SCO_FIRST);
+ if (bl != NULL) {
+ if (bl->type == BL_NPC) {
+ struct npc_data *nd = BL_UCAST(BL_NPC, bl);
+ if (nd->status.hp == 0) {
+ status_calc_npc(nd, SCO_FIRST);
} else {
- status_calc_npc(((TBL_NPC*)bl), SCO_NONE);
+ status_calc_npc(nd, SCO_NONE);
}
}
unit->skilluse_id(bl, target_id, skill_id, skill_lv);
@@ -16751,12 +16800,13 @@ BUILDIN(unitskillusepos) {
bl = map->id2bl(unit_id);
- if( bl != NULL ) {
- if( bl->type == BL_NPC ) {
- if (!((TBL_NPC*)bl)->status.hp) {
- status_calc_npc(((TBL_NPC*)bl), SCO_FIRST);
+ if (bl != NULL) {
+ if (bl->type == BL_NPC) {
+ struct npc_data *nd = BL_UCAST(BL_NPC, bl);
+ if (nd->status.hp == 0) {
+ status_calc_npc(nd, SCO_FIRST);
} else {
- status_calc_npc(((TBL_NPC*)bl), SCO_NONE);
+ status_calc_npc(nd, SCO_NONE);
}
}
unit->skilluse_pos(bl, skill_x, skill_y, skill_id, skill_lv);
@@ -16837,7 +16887,7 @@ BUILDIN(awake) {
for( tst = dbi_first(iter); dbi_exists(iter); tst = dbi_next(iter) ) {
if( tst->oid == nd->bl.id ) {
- TBL_PC* sd = map->id2sd(tst->rid);
+ struct map_session_data *sd = map->id2sd(tst->rid);
if( tst->sleep.timer == INVALID_TIMER ) {// already awake ???
continue;
@@ -16952,10 +17002,8 @@ BUILDIN(warpportal) {
BUILDIN(openmail)
{
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
mail->openmail(sd);
@@ -16965,10 +17013,8 @@ BUILDIN(openmail)
BUILDIN(openauction)
{
- TBL_PC* sd;
-
- sd = script->rid2sd(st);
- if( sd == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
clif->auction_openwindow(sd);
@@ -17407,8 +17453,9 @@ BUILDIN(questprogress)
return true;
}
-BUILDIN(showevent) {
- TBL_PC *sd = script->rid2sd(st);
+BUILDIN(showevent)
+{
+ struct map_session_data *sd = script->rid2sd(st);
struct npc_data *nd = map->id2nd(st->oid);
int icon, color = 0;
@@ -17451,9 +17498,9 @@ BUILDIN(waitingroom2bg) {
if( script_hasdata(st,7) )
nd = npc->name2id(script_getstr(st,7));
else
- nd = (struct npc_data *)map->id2bl(st->oid);
+ nd = map->id2nd(st->oid);
- if( nd == NULL || (cd = (struct chat_data *)map->id2bl(nd->chat_id)) == NULL ) {
+ if (nd == NULL || (cd = map->id2cd(nd->chat_id)) == NULL) {
script_pushint(st,0);
return true;
}
@@ -17512,7 +17559,7 @@ BUILDIN(waitingroom2bg_single) {
y = script_getnum(st,5);
nd = npc->name2id(script_getstr(st,6));
- if( nd == NULL || (cd = (struct chat_data *)map->id2bl(nd->chat_id)) == NULL || cd->users <= 0 )
+ if (nd == NULL || (cd = map->id2cd(nd->chat_id)) == NULL || cd->users <= 0)
return true;
if( (sd = cd->usersd[0]) == NULL )
@@ -17575,15 +17622,15 @@ BUILDIN(bg_monster)
return true;
}
-BUILDIN(bg_monster_set_team) {
- struct mob_data *md;
- struct block_list *mbl;
+BUILDIN(bg_monster_set_team)
+{
int id = script_getnum(st,2),
bg_id = script_getnum(st,3);
+ struct block_list *mbl = map->id2bl(id); // TODO: Why does this not use map->id2md?
+ struct mob_data *md = BL_CAST(BL_MOB, mbl);
- if( (mbl = map->id2bl(id)) == NULL || mbl->type != BL_MOB )
+ if (md == NULL)
return true;
- md = (TBL_MOB *)mbl;
md->bg_id = bg_id;
mob_stop_attack(md);
@@ -17965,12 +18012,18 @@ BUILDIN(has_instance) {
script_pushconststr(st, map->list[m].name);
return true;
}
-int buildin_instance_warpall_sub(struct block_list *bl,va_list ap) {
- struct map_session_data *sd = ((TBL_PC*)bl);
+
+int buildin_instance_warpall_sub(struct block_list *bl, va_list ap)
+{
+ struct map_session_data *sd = NULL;
int map_index = va_arg(ap,int);
int x = va_arg(ap,int);
int y = va_arg(ap,int);
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
+
pc->setpos(sd,map_index,x,y,CLR_TELEPORT);
return 0;
@@ -18140,9 +18193,9 @@ BUILDIN(setfont)
return true;
}
-int buildin_mobuseskill_sub(struct block_list *bl,va_list ap)
+int buildin_mobuseskill_sub(struct block_list *bl, va_list ap)
{
- TBL_MOB* md = (TBL_MOB*)bl;
+ struct mob_data *md = NULL;
struct block_list *tbl;
int mobid = va_arg(ap,int);
uint16 skill_id = va_arg(ap,int);
@@ -18152,6 +18205,10 @@ int buildin_mobuseskill_sub(struct block_list *bl,va_list ap)
int emotion = va_arg(ap,int);
int target = va_arg(ap,int);
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCAST(BL_MOB, bl);
+
if( md->class_ != mobid )
return 0;
@@ -18349,9 +18406,10 @@ BUILDIN(showdigit)
/**
* Rune Knight
**/
-BUILDIN(makerune) {
- TBL_PC* sd;
- if( (sd = script->rid2sd(st)) == NULL )
+BUILDIN(makerune)
+{
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
clif->skill_produce_mix_list(sd,RK_RUNEMASTERY,24);
sd->itemid = script_getnum(st,2);
@@ -18363,8 +18421,8 @@ BUILDIN(makerune) {
**/
BUILDIN(hascashmount)
{
- TBL_PC* sd;
- if( (sd = script->rid2sd(st)) == NULL )
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
if( sd->sc.data[SC_ALL_RIDING] )
script_pushint(st,1);
@@ -18382,8 +18440,8 @@ BUILDIN(hascashmount)
**/
BUILDIN(setcashmount)
{
- TBL_PC* sd;
- if ((sd = script->rid2sd(st)) == NULL)
+ struct map_session_data *sd = script->rid2sd(st);
+ if (sd == NULL)
return true;
if (pc_hasmount(sd)) {
clif->msgtable(sd, MSG_REINS_CANT_USE_MOUNTED);
@@ -18644,7 +18702,7 @@ BUILDIN(unbindatcmd) {
}
BUILDIN(useatcmd) {
- TBL_PC *sd, *dummy_sd = NULL;
+ struct map_session_data *sd, *dummy_sd = NULL;
int fd;
const char* cmd;
@@ -18663,8 +18721,8 @@ BUILDIN(useatcmd) {
if( st->oid ) {
struct block_list* bl = map->id2bl(st->oid);
memcpy(&sd->bl, bl, sizeof(struct block_list));
- if( bl->type == BL_NPC )
- safestrncpy(sd->status.name, ((TBL_NPC*)bl)->name, NAME_LENGTH);
+ if (bl->type == BL_NPC)
+ safestrncpy(sd->status.name, BL_UCAST(BL_NPC, bl)->name, NAME_LENGTH);
}
}
@@ -18843,7 +18901,7 @@ BUILDIN(npcskill)
if (sd == NULL)
return true;
- nd = (struct npc_data *)map->id2bl(sd->npc_id);
+ nd = map->id2nd(sd->npc_id);
if (stat_point > battle_config.max_third_parameter) {
ShowError("npcskill: stat point exceeded maximum of %d.\n",battle_config.max_third_parameter );
@@ -18929,8 +18987,6 @@ BUILDIN(montransform) {
if (tick != 0) {
struct map_session_data *sd = script->id2sd(st, bl->id);
- struct mob_db *monster = mob->db(mob_id);
- char msg[CHAT_SIZE_MAX];
if (sd == NULL)
return true;
@@ -18945,8 +19001,6 @@ BUILDIN(montransform) {
return true;
}
- sprintf(msg, msg_sd(sd,1485), monster->name); // Traaaansformation-!! %s form!!
- clif->ShowScript(&sd->bl, msg);
status_change_end(bl, SC_MONSTER_TRANSFORM, INVALID_TIMER); // Clear previous
sc_start2(NULL, bl, SC_MONSTER_TRANSFORM, 100, mob_id, type, tick);
@@ -19517,7 +19571,7 @@ BUILDIN(bg_join_team) {
BUILDIN(countbound)
{
int i, type, j=0, k=0;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -19553,7 +19607,7 @@ BUILDIN(checkbound)
{
int i, nameid = script_getnum(st,2);
int bound_type = 0;
- TBL_PC *sd = script->rid2sd(st);
+ struct map_session_data *sd = script->rid2sd(st);
if (sd == NULL)
return true;
@@ -20492,6 +20546,7 @@ void script_parse_builtin(void) {
BUILDIN_DEF(min, "i*"),
BUILDIN_DEF(max, "i*"),
BUILDIN_DEF(md5,"s"),
+ BUILDIN_DEF(swap,"rr"),
// [zBuffer] List of dynamic var commands --->
BUILDIN_DEF(getd,"s"),
BUILDIN_DEF(setd,"sv"),
diff --git a/src/map/script.h b/src/map/script.h
index b3e16b1b4..5f71662c6 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -647,10 +647,10 @@ struct script_interface {
bool (*addScript) (char *name, char *args, bool (*func)(struct script_state *st), bool isDeprecated);
int (*conv_num) (struct script_state *st,struct script_data *data);
const char* (*conv_str) (struct script_state *st,struct script_data *data);
- TBL_PC *(*rid2sd) (struct script_state *st);
- TBL_PC *(*id2sd) (struct script_state *st, int account_id);
- TBL_PC *(*charid2sd) (struct script_state *st, int char_id);
- TBL_PC *(*nick2sd) (struct script_state *st, const char *name);
+ struct map_session_data *(*rid2sd) (struct script_state *st);
+ struct map_session_data *(*id2sd) (struct script_state *st, int account_id);
+ struct map_session_data *(*charid2sd) (struct script_state *st, int char_id);
+ struct map_session_data *(*nick2sd) (struct script_state *st, const char *name);
void (*detach_rid) (struct script_state* st);
struct script_data* (*push_val)(struct script_stack* stack, enum c_op type, int64 val, struct reg_db *ref);
struct script_data *(*get_val) (struct script_state* st, struct script_data* data);
@@ -728,7 +728,7 @@ struct script_interface {
void (*read_constdb) (void);
const char* (*print_line) (StringBuf *buf, const char *p, const char *mark, int line);
void (*errorwarning_sub) (StringBuf *buf, const char *src, const char *file, int start_line, const char *error_msg, const char *error_pos);
- int (*set_reg) (struct script_state *st, TBL_PC *sd, int64 num, const char *name, const void *value, struct reg_db *ref);
+ int (*set_reg) (struct script_state *st, struct map_session_data *sd, int64 num, const char *name, const void *value, struct reg_db *ref);
void (*set_reg_ref_str) (struct script_state* st, struct reg_db *n, int64 num, const char* name, const char *str);
void (*set_reg_scope_str) (struct script_state* st, struct reg_db *n, int64 num, const char* name, const char *str);
void (*set_reg_npc_str) (struct script_state* st, struct reg_db *n, int64 num, const char* name, const char *str);
diff --git a/src/map/skill.c b/src/map/skill.c
index dc3ebe62e..b3c264e43 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2012-2015 Hercules Dev Team
+ * Copyright (C) 2012-2016 Hercules Dev Team
* Copyright (C) Athena Dev Teams
*
* Hercules is free software: you can redistribute it and/or modify
@@ -260,6 +260,7 @@ int skill_get_casttype2 (uint16 index) {
//Returns actual skill range taking into account attack range and AC_OWL [Skotlex]
int skill_get_range2 (struct block_list *bl, uint16 skill_id, uint16 skill_lv) {
int range;
+ struct map_session_data *sd = BL_CAST(BL_PC, bl);
if( bl->type == BL_MOB && battle_config.mob_ai&0x400 )
return 9; //Mobs have a range of 9 regardless of skill used.
@@ -288,8 +289,8 @@ int skill_get_range2 (struct block_list *bl, uint16 skill_id, uint16 skill_lv) {
case RA_ARROWSTORM:
case RA_AIMEDBOLT:
case RA_WUGBITE:
- if( bl->type == BL_PC )
- range += pc->checkskill((TBL_PC*)bl, AC_VULTURE);
+ if (sd != NULL)
+ range += pc->checkskill(sd, AC_VULTURE);
else
range += 10; //Assume level 10?
break;
@@ -299,14 +300,14 @@ int skill_get_range2 (struct block_list *bl, uint16 skill_id, uint16 skill_lv) {
case GS_FULLBUSTER:
case GS_SPREADATTACK:
case GS_GROUNDDRIFT:
- if (bl->type == BL_PC)
- range += pc->checkskill((TBL_PC*)bl, GS_SNAKEEYE);
+ if (sd != NULL)
+ range += pc->checkskill(sd, GS_SNAKEEYE);
else
range += 10; //Assume level 10?
break;
case NJ_KIRIKAGE:
- if (bl->type == BL_PC)
- range = skill->get_range(NJ_SHADOWJUMP,pc->checkskill((TBL_PC*)bl,NJ_SHADOWJUMP));
+ if (sd != NULL)
+ range = skill->get_range(NJ_SHADOWJUMP, pc->checkskill(sd, NJ_SHADOWJUMP));
break;
/**
* Warlock
@@ -323,9 +324,9 @@ int skill_get_range2 (struct block_list *bl, uint16 skill_id, uint16 skill_lv) {
case WL_TETRAVORTEX:
case WL_EARTHSTRAIN:
case WL_RELEASE:
- if( bl->type == BL_PC )
- range += pc->checkskill((TBL_PC*)bl, WL_RADIUS);
- break;
+ if (sd != NULL)
+ range += pc->checkskill(sd, WL_RADIUS);
+ break;
/**
* Ranger Bonus
**/
@@ -336,8 +337,8 @@ int skill_get_range2 (struct block_list *bl, uint16 skill_id, uint16 skill_lv) {
case RA_CLUSTERBOMB:
case RA_FIRINGTRAP:
case RA_ICEBOUNDTRAP:
- if( bl->type == BL_PC )
- range += (1 + pc->checkskill((TBL_PC*)bl, RA_RESEARCHTRAP))/2;
+ if (sd != NULL)
+ range += (1 + pc->checkskill(sd, RA_RESEARCHTRAP))/2;
}
if( !range && bl->type != BL_PC )
@@ -383,7 +384,7 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk
#endif // RENEWAL
if (sd && (skill2_lv = pc->checkskill(sd, HP_MEDITATIO)) > 0)
hp += hp * skill2_lv * 2 / 100;
- else if( src->type == BL_HOM && (skill2_lv = homun->checkskill(((TBL_HOM*)src), HLIF_BRAIN)) > 0 )
+ else if (src->type == BL_HOM && (skill2_lv = homun->checkskill(BL_UCAST(BL_HOM, src), HLIF_BRAIN)) > 0)
hp += hp * skill2_lv * 2 / 100;
break;
}
@@ -1765,8 +1766,8 @@ int skill_counter_additional_effect(struct block_list* src, struct block_list *b
break;
case HFLI_SBR44: // [orn]
case HVAN_EXPLOSION:
- if(src->type == BL_HOM){
- TBL_HOM *hd = (TBL_HOM*)src;
+ if (src->type == BL_HOM) {
+ struct homun_data *hd = BL_UCAST(BL_HOM, src);
hd->homunculus.intimacy = 200;
if (hd->master)
clif->send_homdata(hd->master,SP_INTIMATE,hd->homunculus.intimacy/100);
@@ -1957,8 +1958,7 @@ int skill_break_equip (struct block_list *bl, unsigned short where, int rate, in
const enum sc_type scdef[4] = {SC_PROTECTWEAPON, SC_PROTECTARMOR, SC_PROTECTSHIELD, SC_PROTECTHELM};
struct status_change *sc = status->get_sc(bl);
int i;
- TBL_PC *sd;
- sd = BL_CAST(BL_PC, bl);
+ struct map_session_data *sd = BL_CAST(BL_PC, bl);
if (sc && !sc->count)
sc = NULL;
@@ -2074,9 +2074,9 @@ int skill_strip_equip(struct block_list *bl, unsigned short where, int rate, int
- if 'flag&0x1', position update packets must not be sent.
- if 'flag&0x2', skill blown ignores players' special_state.no_knockback
-------------------------------------------------------------------------*/
-int skill_blown(struct block_list* src, struct block_list* target, int count, int8 dir, int flag) {
+int skill_blown(struct block_list* src, struct block_list* target, int count, int8 dir, int flag)
+{
int dx = 0, dy = 0;
- struct skill_unit* su = NULL;
nullpo_ret(src);
@@ -2086,26 +2086,30 @@ int skill_blown(struct block_list* src, struct block_list* target, int count, in
return 0; // Actual knockback distance is 0.
switch (target->type) {
- case BL_MOB: {
- struct mob_data* md = BL_CAST(BL_MOB, target);
- if (md->class_ == MOBID_EMPELIUM)
- return 0;
- if(src != target && is_boss(target)) // Bosses can't be knocked-back
- return 0;
- }
+ case BL_MOB:
+ {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, target);
+ if (md->class_ == MOBID_EMPELIUM)
+ return 0;
+ if (src != target && is_boss(target)) // Bosses can't be knocked-back
+ return 0;
+ }
break;
- case BL_PC: {
- struct map_session_data *sd = BL_CAST(BL_PC, target);
- if( sd->sc.data[SC_BASILICA] && sd->sc.data[SC_BASILICA]->val4 == sd->bl.id && !is_boss(src))
- return 0; // Basilica caster can't be knocked-back by normal monsters.
- if( !(flag&0x2) && src != target && sd->special_state.no_knockback )
- return 0;
- }
+ case BL_PC:
+ {
+ struct map_session_data *sd = BL_UCAST(BL_PC, target);
+ if (sd->sc.data[SC_BASILICA] && sd->sc.data[SC_BASILICA]->val4 == sd->bl.id && !is_boss(src))
+ return 0; // Basilica caster can't be knocked-back by normal monsters.
+ if (!(flag&0x2) && src != target && sd->special_state.no_knockback)
+ return 0;
+ }
break;
case BL_SKILL:
- su = (struct skill_unit *)target;
- if( su->group && (su->group->unit_id == UNT_ANKLESNARE || su->group->unit_id == UNT_REVERBERATION))
+ {
+ struct skill_unit *su = BL_UCAST(BL_SKILL, target);
+ if (su->group && (su->group->unit_id == UNT_ANKLESNARE || su->group->unit_id == UNT_REVERBERATION))
return 0; // ankle snare cannot be knocked back
+ }
break;
}
@@ -2232,8 +2236,8 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr
dmg = battle->calc_attack(attack_type,src,bl,skill_id,skill_lv,flag&0xFFF);
//Skotlex: Adjusted to the new system
- if( src->type == BL_PET ) { // [Valaris]
- struct pet_data *pd = (TBL_PET*)src;
+ if (src->type == BL_PET) { // [Valaris]
+ struct pet_data *pd = BL_UCAST(BL_PET, src);
if (pd->a_skill && pd->a_skill->div_ && pd->a_skill->id == skill_id) {
int element = skill->get_ele(skill_id, skill_lv);
/*if (skill_id == -1) Does it ever worked?
@@ -2770,12 +2774,13 @@ int skill_attack(int attack_type, struct block_list* src, struct block_list *dsr
if( sc && sc->data[SC_DEVOTION] && skill_id != PA_PRESSURE ) {
struct status_change_entry *sce = sc->data[SC_DEVOTION];
struct block_list *d_bl = map->id2bl(sce->val1);
+ struct mercenary_data *d_md = BL_CAST(BL_MER, d_bl);
+ struct map_session_data *d_sd = BL_CAST(BL_PC, d_bl);
- if( d_bl && (
- (d_bl->type == BL_MER && ((TBL_MER*)d_bl)->master && ((TBL_MER*)d_bl)->master->bl.id == bl->id) ||
- (d_bl->type == BL_PC && ((TBL_PC*)d_bl)->devotion[sce->val2] == bl->id)
- ) && check_distance_bl(bl, d_bl, sce->val3) )
- {
+ if (d_bl != NULL
+ && ((d_md != NULL && d_md->master && d_md->master->bl.id == bl->id) || (d_sd != NULL && d_sd->devotion[sce->val2] == bl->id))
+ && check_distance_bl(bl, d_bl, sce->val3)
+ ) {
if(!rmdamage){
clif->damage(d_bl,d_bl, 0, 0, damage, 0, BDT_NORMAL, 0);
status_fix_damage(NULL,d_bl, damage, 0);
@@ -2876,8 +2881,8 @@ void skill_attack_combo2_unknown(int *attack_type, struct block_list* src, struc
void skill_attack_display_unknown(int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage) {
if (*flag & SD_ANIMATION && dmg->div_ < 2) //Disabling skill animation doesn't works on multi-hit.
*type = BDT_SPLASH;
- if (bl->type == BL_SKILL ) {
- TBL_SKILL *su = (TBL_SKILL*)bl;
+ if (bl->type == BL_SKILL) {
+ struct skill_unit *su = BL_UCAST(BL_SKILL, bl);
if (su->group && skill->get_inf2(su->group->skill_id) & INF2_TRAP) // show damage on trap targets
clif->skill_damage(src, bl, *tick, dmg->amotion, dmg->dmotion, *damage, dmg->div_, *skill_id, (*flag & SD_LEVEL) ? -1 : *skill_lv, BDT_SPLASH);
}
@@ -2895,7 +2900,7 @@ int skill_attack_dir_unknown(int *attack_type, struct block_list* src, struct bl
void skill_attack_blow_unknown(int *attack_type, struct block_list* src, struct block_list *dsrc, struct block_list *bl, uint16 *skill_id, uint16 *skill_lv, int64 *tick, int *flag, int *type, struct Damage *dmg, int64 *damage, int8 *dir) {
skill->blown(dsrc, bl, dmg->blewcount, *dir, 0x0);
if (!dmg->blewcount && bl->type == BL_SKILL && *damage > 0){
- TBL_SKILL *su = (TBL_SKILL*)bl;
+ struct skill_unit *su = BL_UCAST(BL_SKILL, bl);
if (su->group && su->group->skill_id == HT_BLASTMINE)
skill->blown(src, bl, 3, -1, 0);
}
@@ -2938,15 +2943,18 @@ int skill_area_sub(struct block_list *bl, va_list ap) {
return 0;
}
-int skill_check_unit_range_sub (struct block_list *bl, va_list ap) {
- struct skill_unit *su;
+int skill_check_unit_range_sub(struct block_list *bl, va_list ap)
+{
+ const struct skill_unit *su = NULL;
uint16 skill_id,g_skill_id;
- su = (struct skill_unit *)bl;
+ nullpo_ret(bl);
- if(bl->prev == NULL || bl->type != BL_SKILL)
+ if (bl->type != BL_SKILL || bl->prev == NULL)
return 0;
+ su = BL_UCCAST(BL_SKILL, bl);
+
if(!su->alive)
return 0;
@@ -3032,7 +3040,7 @@ int skill_check_unit_range2_sub (struct block_list *bl, va_list ap) {
if( skill_id == HP_BASILICA && bl->type == BL_PC )
return 0;
- if (skill_id == AM_DEMONSTRATION && bl->type == BL_MOB && ((TBL_MOB*)bl)->class_ == MOBID_EMPELIUM)
+ if (skill_id == AM_DEMONSTRATION && bl->type == BL_MOB && BL_UCCAST(BL_MOB, bl)->class_ == MOBID_EMPELIUM)
return 0; //Allow casting Bomb/Demonstration Right under emperium [Skotlex]
return 1;
}
@@ -3092,8 +3100,8 @@ int skill_check_condition_mercenary(struct block_list *bl, int skill_id, int lv,
nullpo_ret(bl);
switch( bl->type ) {
- case BL_HOM: sd = ((TBL_HOM*)bl)->master; break;
- case BL_MER: sd = ((TBL_MER*)bl)->master; break;
+ case BL_HOM: sd = BL_UCAST(BL_HOM, bl)->master; break;
+ case BL_MER: sd = BL_UCAST(BL_MER, bl)->master; break;
}
st = status->get_status_data(bl);
@@ -3323,9 +3331,9 @@ int skill_timerskill(int tid, int64 tick, int id, intptr_t data) {
break;
case LG_MOONSLASHER:
case SR_WINDMILL:
- if( target->type == BL_PC ) {
- struct map_session_data *tsd = NULL;
- if( (tsd = ((TBL_PC*)target)) && !pc_issit(tsd) ) {
+ if (target->type == BL_PC) {
+ struct map_session_data *tsd = BL_UCAST(BL_PC, target);
+ if (!pc_issit(tsd)) {
pc_setsit(tsd);
skill->sit(tsd,1);
clif->sitting(&tsd->bl);
@@ -3344,11 +3352,12 @@ int skill_timerskill(int tid, int64 tick, int id, intptr_t data) {
case SR_FALLENEMPIRE:
case SR_TIGERCANNON:
case SR_SKYNETBLOW:
- if( src->type == BL_PC ) {
+ if (src->type == BL_PC) {
+ struct map_session_data *sd = BL_UCAST(BL_PC, src);
if( distance_xy(src->x, src->y, target->x, target->y) >= 3 )
break;
- skill->castend_damage_id(src, target, skl->skill_id, pc->checkskill(((TBL_PC*)src), skl->skill_id), tick, 0);
+ skill->castend_damage_id(src, target, skl->skill_id, pc->checkskill(sd, skl->skill_id), tick, 0);
}
break;
case SC_ESCAPE:
@@ -3359,12 +3368,14 @@ int skill_timerskill(int tid, int64 tick, int id, intptr_t data) {
}
break;
case RK_HUNDREDSPEAR:
- if(src->type == BL_PC) {
- int skill_lv = pc->checkskill((TBL_PC *)src, KN_SPEARBOOMERANG);
- if(skill_lv > 0)
+ if (src->type == BL_PC) {
+ struct map_session_data *sd = BL_UCAST(BL_PC, src);
+ int skill_lv = pc->checkskill(sd, KN_SPEARBOOMERANG);
+ if (skill_lv > 0)
skill->attack(BF_WEAPON, src, src, target, KN_SPEARBOOMERANG, skill_lv, tick, skl->flag);
- } else
+ } else {
skill->attack(BF_WEAPON, src, src, target, KN_SPEARBOOMERANG, 1, tick, skl->flag);
+ }
break;
case CH_PALMSTRIKE:
{
@@ -3506,11 +3517,16 @@ bool skill_cleartimerskill_exception(int skill_id)
return false;
}
-int skill_activate_reverberation(struct block_list *bl, va_list ap) {
- struct skill_unit *su = (TBL_SKILL*)bl;
- struct skill_unit_group *sg;
- if( bl->type != BL_SKILL )
+int skill_activate_reverberation(struct block_list *bl, va_list ap)
+{
+ struct skill_unit *su = NULL;
+ struct skill_unit_group *sg = NULL;
+
+ nullpo_ret(bl);
+ if (bl->type != BL_SKILL)
return 0;
+ su = BL_UCAST(BL_SKILL, bl);
+
if( su->alive && (sg = su->group) != NULL && sg->skill_id == WM_REVERBERATION && sg->unit_id == UNT_REVERBERATION ) {
int64 tick = timer->gettick();
clif->changetraplook(bl,UNT_USED_TRAPS);
@@ -3521,8 +3537,14 @@ int skill_activate_reverberation(struct block_list *bl, va_list ap) {
return 0;
}
-int skill_reveal_trap (struct block_list *bl, va_list ap) {
- TBL_SKILL *su = (TBL_SKILL*)bl;
+int skill_reveal_trap(struct block_list *bl, va_list ap)
+{
+ struct skill_unit *su = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_SKILL);
+ su = BL_UCAST(BL_SKILL, bl);
+
if (su->alive && su->group && skill->get_inf2(su->group->skill_id)&INF2_TRAP) { //Reveal trap.
//Change look is not good enough, the client ignores it as an actual trap still. [Skotlex]
//clif->changetraplook(bl, su->group->unit_id);
@@ -5000,7 +5022,7 @@ int skill_castend_id(int tid, int64 tick, int id, intptr_t data) {
}
if (ud->skill_id >= SL_SKE && ud->skill_id <= SL_SKA && target->type == BL_MOB) {
- if (((TBL_MOB*)target)->class_ == MOBID_EMPELIUM)
+ if (BL_UCCAST(BL_MOB, target)->class_ == MOBID_EMPELIUM)
break;
} else if (inf && battle->check_target(src, target, inf) <= 0) {
if (sd) clif->skill_fail(sd,ud->skill_id,USESKILL_FAIL_LEVEL,0);
@@ -5560,30 +5582,31 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
abra_skill_lv = min(skill_lv, skill->get_max(abra_skill_id));
clif->skill_nodamage (src, bl, skill_id, skill_lv, 1);
- if( sd )
- {// player-casted
+ if (sd) {
+ // player-casted
sd->state.abra_flag = 1;
sd->skillitem = abra_skill_id;
sd->skillitemlv = abra_skill_lv;
clif->item_skill(sd, abra_skill_id, abra_skill_lv);
- }
- else
- {// mob-casted
+ } else {
+ // mob-casted
struct unit_data *ud = unit->bl2ud(src);
int inf = skill->get_inf(abra_skill_id);
- if (!ud) break;
+ if (ud == NULL)
+ break;
if (inf&INF_SELF_SKILL || inf&INF_SUPPORT_SKILL) {
- if (src->type == BL_PET)
- bl = (struct block_list*)((TBL_PET*)src)->msd;
- if (!bl) bl = src;
- unit->skilluse_id(src, bl->id, abra_skill_id, abra_skill_lv);
+ int id = src->id;
+ struct pet_data *pd = BL_CAST(BL_PET, src);
+ if (pd != NULL && pd->msd != NULL)
+ id = pd->msd->bl.id;
+ unit->skilluse_id(src, id, abra_skill_id, abra_skill_lv);
} else { //Assume offensive skills
int target_id = 0;
if (ud->target)
target_id = ud->target;
else switch (src->type) {
- case BL_MOB: target_id = ((TBL_MOB*)src)->target_id; break;
- case BL_PET: target_id = ((TBL_PET*)src)->target_id; break;
+ case BL_MOB: target_id = BL_UCAST(BL_MOB, src)->target_id; break;
+ case BL_PET: target_id = BL_UCAST(BL_PET, src)->target_id; break;
}
if (!target_id)
break;
@@ -5817,7 +5840,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
if( sd )
skill->blockpc_start(sd, skill_id, skill->get_time(skill_id, skill_lv));
else if( bl->type == BL_MER )
- skill->blockmerc_start((TBL_MER*)bl, skill_id, skill->get_time(skill_id, skill_lv));
+ skill->blockmerc_start(BL_UCAST(BL_MER, bl), skill_id, skill->get_time(skill_id, skill_lv));
break;
case TK_JUMPKICK:
@@ -6733,7 +6756,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
case AL_HOLYWATER:
if(sd) {
- if (skill->produce_mix(sd, skill_id, 523, 0, 0, 0, 1))
+ if (skill->produce_mix(sd, skill_id, ITEMID_HOLY_WATER, 0, 0, 0, 1))
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
else
clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
@@ -6762,7 +6785,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
case ASC_CDP:
if(sd) {
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
- skill->produce_mix(sd, skill_id, 678, 0, 0, 0, 1); //Produce a Deadly Poison Bottle.
+ skill->produce_mix(sd, skill_id, ITEMID_POISON_BOTTLE, 0, 0, 0, 1); //Produce a Deadly Poison Bottle.
}
break;
@@ -7501,10 +7524,10 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
break;
case HT_SPRINGTRAP:
clif->skill_nodamage(src,bl,skill_id,skill_lv,1);
- {
- struct skill_unit *su=NULL;
- if (bl->type==BL_SKILL && (su=(struct skill_unit *)bl) != NULL && su->group != NULL) {
- switch(su->group->unit_id){
+ if (bl->type == BL_SKILL) {
+ struct skill_unit *su = BL_UCAST(BL_SKILL, bl);
+ if (su->group != NULL) {
+ switch (su->group->unit_id) {
case UNT_ANKLESNARE:
if (su->group->val2 != 0)
// if it is already trapping something don't spring it,
@@ -9002,8 +9025,8 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
if( flag&1 ) {
if( is_boss(bl) ) break;
if( sc_start2(src,bl, type, 100, skill_lv, src->id, skill->get_time(skill_id, skill_lv))) {
- if( bl->type == BL_MOB )
- mob->unlocktarget((TBL_MOB*)bl,timer->gettick());
+ if (bl->type == BL_MOB)
+ mob->unlocktarget(BL_UCAST(BL_MOB, bl), timer->gettick());
unit->stop_attack(bl);
clif->bladestop(src, bl->id, 1);
map->freeblock_unlock();
@@ -9251,7 +9274,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
improv_skill_lv = 4 + skill_lv;
clif->skill_nodamage (src, bl, skill_id, skill_lv, 1);
- if( sd ) {
+ if (sd == NULL) {
sd->state.abra_flag = 2;
sd->skillitem = improv_skill_id;
sd->skillitemlv = improv_skill_lv;
@@ -9259,19 +9282,23 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
} else {
struct unit_data *ud = unit->bl2ud(src);
int inf = skill->get_inf(improv_skill_id);
- if (!ud) break;
+ if (ud == NULL)
+ break;
if (inf&INF_SELF_SKILL || inf&INF_SUPPORT_SKILL) {
- if (src->type == BL_PET)
- bl = (struct block_list*)((TBL_PET*)src)->msd;
- if (!bl) bl = src;
- unit->skilluse_id(src, bl->id, improv_skill_id, improv_skill_lv);
+ int id = src->id;
+ struct pet_data *pd = BL_CAST(BL_PET, src);
+ if (pd != NULL && pd->msd != NULL)
+ id = pd->msd->bl.id;
+ unit->skilluse_id(src, id, improv_skill_id, improv_skill_lv);
} else {
int target_id = 0;
- if (ud->target)
+ if (ud->target) {
target_id = ud->target;
- else switch (src->type) {
- case BL_MOB: target_id = ((TBL_MOB*)src)->target_id; break;
- case BL_PET: target_id = ((TBL_PET*)src)->target_id; break;
+ } else {
+ switch (src->type) {
+ case BL_MOB: target_id = BL_UCAST(BL_MOB, src)->target_id; break;
+ case BL_PET: target_id = BL_UCAST(BL_PET, src)->target_id; break;
+ }
}
if (!target_id)
break;
@@ -10049,10 +10076,16 @@ int skill_castend_pos(int tid, int64 tick, int id, intptr_t data)
return 0;
}
-static int check_npc_chaospanic(struct block_list* bl, va_list args) {
- TBL_NPC* nd = (TBL_NPC*)bl;
- if( nd->option&(OPTION_HIDE|OPTION_INVISIBLE) || nd->class_ != 45 )
+static int check_npc_chaospanic(struct block_list *bl, va_list args)
+{
+ const struct npc_data *nd = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_NPC);
+ nd = BL_UCCAST(BL_NPC, bl);
+
+ if (nd->option&(OPTION_HIDE|OPTION_INVISIBLE) || nd->class_ != WARP_CLASS)
return 0;
return 1;
@@ -10648,9 +10681,10 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
} else {
int mob_id = skill_lv < 2 ? MOBID_BLACK_MUSHROOM + rnd()%2 : MOBID_RED_PLANT + rnd()%6;
- TBL_MOB* md = mob->once_spawn_sub(src, src->m, x, y, "--ja--", mob_id, "", SZ_SMALL, AI_NONE);
+ struct mob_data *md = mob->once_spawn_sub(src, src->m, x, y, "--ja--", mob_id, "", SZ_SMALL, AI_NONE);
int i;
- if (!md) break;
+ if (md == NULL)
+ break;
if ((i = skill->get_time(skill_id, skill_lv)) > 0)
{
if( md->deletetimer != INVALID_TIMER )
@@ -10968,11 +11002,16 @@ bool skill_castend_pos2_unknown(struct block_list* src, int *x, int *y, uint16 *
}
/// transforms 'target' skill unit into dissonance (if conditions are met)
-int skill_dance_overlap_sub(struct block_list* bl, va_list ap) {
- struct skill_unit* target = (struct skill_unit*)bl;
- struct skill_unit* src = va_arg(ap, struct skill_unit*);
+int skill_dance_overlap_sub(struct block_list *bl, va_list ap)
+{
+ struct skill_unit *target = NULL;
+ struct skill_unit *src = va_arg(ap, struct skill_unit*);
int flag = va_arg(ap, int);
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_SKILL);
+ target = BL_UCAST(BL_SKILL, bl);
+
if (src == target)
return 0;
if (!target->group || !(target->group->state.song_dance&0x1))
@@ -11133,10 +11172,13 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_
limit=2000;
} else { // previous implementation (not used anymore)
//Warp Portal morphing to active mode, extract relevant data from src. [Skotlex]
- if( src->type != BL_SKILL ) return NULL;
- group = ((TBL_SKILL*)src)->group;
+ struct skill_unit *su = BL_CAST(BL_SKILL, src);
+ if (su == NULL)
+ return NULL;
+ group = su->group;
src = map->id2bl(group->src_id);
- if( !src ) return NULL;
+ if (src == NULL)
+ return NULL;
val2 = group->val2; //Copy the (x,y) position you warp to
val3 = group->val3; //as well as the mapindex to warp to.
}
@@ -11666,11 +11708,9 @@ int skill_unit_onplace(struct skill_unit *src, struct block_list *bl, int64 tick
case UNT_WARP_WAITING: {
int working = sg->val1&0xffff;
- if(bl->type==BL_PC && !working){
- struct map_session_data *sd = (struct map_session_data *)bl;
- if((!sd->chatID || battle_config.chat_warpportal)
- && sd->ud.to_x == src->bl.x && sd->ud.to_y == src->bl.y)
- {
+ if (bl->type == BL_PC && !working) {
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
+ if ((!sd->chatID || battle_config.chat_warpportal) && sd->ud.to_x == src->bl.x && sd->ud.to_y == src->bl.y) {
int x = sg->val2>>16;
int y = sg->val2&0xffff;
int count = sg->val1>>16;
@@ -11827,7 +11867,7 @@ void skill_unit_onplace_unknown(struct skill_unit *src, struct block_list *bl, i
int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *bl, int64 tick) {
struct skill_unit_group *sg;
struct block_list *ss;
- TBL_PC* tsd;
+ struct map_session_data *tsd;
struct status_data *tstatus, *bst;
struct status_change *tsc, *ssc;
struct skill_unit_group_tickset *ts;
@@ -12416,7 +12456,7 @@ int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *bl, int6
break;
case UNT_DEMONIC_FIRE: {
- TBL_PC* sd = BL_CAST(BL_PC, ss);
+ struct map_session_data *sd = BL_CAST(BL_PC, ss);
switch( sg->val2 ) {
case 1:
case 2:
@@ -12559,7 +12599,7 @@ int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *bl, int6
}
if (bl->type == BL_MOB && ss != bl)
- mob->skill_event((TBL_MOB*)bl, ss, tick, MSC_SKILLUSED|(skill_id<<16));
+ mob->skill_event(BL_UCAST(BL_MOB, bl), ss, tick, MSC_SKILLUSED|(skill_id<<16));
return skill_id;
}
@@ -12816,21 +12856,21 @@ int skill_unit_ondamaged(struct skill_unit *src, struct block_list *bl, int64 da
/*==========================================
*
*------------------------------------------*/
-int skill_check_condition_char_sub (struct block_list *bl, va_list ap) {
- int *c, skill_id;
- struct block_list *src;
- struct map_session_data *sd;
- struct map_session_data *tsd;
- int *p_sd; //Contains the list of characters found.
+int skill_check_condition_char_sub (struct block_list *bl, va_list ap)
+{
+ struct map_session_data *tsd = NULL;
+ struct block_list *src = va_arg(ap, struct block_list *);
+ struct map_session_data *sd = NULL;
+ int *c = va_arg(ap, int *);
+ int *p_sd = va_arg(ap, int *); //Contains the list of characters found.
+ int skill_id = va_arg(ap, int);
nullpo_ret(bl);
- nullpo_ret(tsd=(struct map_session_data*)bl);
- nullpo_ret(src=va_arg(ap,struct block_list *));
- nullpo_ret(sd=(struct map_session_data*)src);
-
- c=va_arg(ap,int *);
- p_sd = va_arg(ap, int *);
- skill_id = va_arg(ap,int);
+ nullpo_ret(src);
+ Assert_ret(bl->type == BL_PC);
+ Assert_ret(src->type == BL_PC);
+ tsd = BL_UCAST(BL_PC, bl);
+ sd = BL_UCAST(BL_PC, src);
if ( ((skill_id != PR_BENEDICTIO && *c >=1) || *c >=2) && !(skill->get_inf2(skill_id)&INF2_CHORUS_SKILL) )
return 0; //Partner found for ensembles, or the two companions for Benedictio. [Skotlex]
@@ -12958,15 +12998,18 @@ int skill_check_pc_partner (struct map_session_data *sd, uint16 skill_id, uint16
/*==========================================
*
*------------------------------------------*/
-int skill_check_condition_mob_master_sub (struct block_list *bl, va_list ap) {
- int *c,src_id,mob_class,skill_id;
- struct mob_data *md;
+int skill_check_condition_mob_master_sub (struct block_list *bl, va_list ap)
+{
+ const struct mob_data *md = NULL;
+ int src_id = va_arg(ap, int);
+ int mob_class = va_arg(ap, int);
+ int skill_id = va_arg(ap, int);
+ int *c = va_arg(ap, int *);
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_MOB);
+ md = BL_UCCAST(BL_MOB, bl);
- md=(struct mob_data*)bl;
- src_id=va_arg(ap,int);
- mob_class=va_arg(ap,int);
- skill_id=va_arg(ap,int);
- c=va_arg(ap,int *);
if( md->master_id != src_id
|| md->special_state.ai != (skill_id == AM_SPHEREMINE?AI_SPHERE:skill_id == KO_ZANZOU?AI_ZANZOU:skill_id == MH_SUMMON_LEGION?AI_ATTACK:AI_FLORA) )
return 0; //Non alchemist summoned mobs have nothing to do here.
@@ -13721,8 +13764,10 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
}
break;
case NC_PILEBUNKER:
- if ( sd->equip_index[EQI_HAND_R] < 0 || sd->status.inventory[sd->equip_index[EQI_HAND_R]].nameid != ITEMID_PILEBUNCKER ) {
- clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
+ if (sd->equip_index[EQI_HAND_R] < 0
+ || !itemid_is_pilebunker(sd->status.inventory[sd->equip_index[EQI_HAND_R]].nameid)
+ ) {
+ clif->skill_fail(sd, skill_id, USESKILL_FAIL_THIS_WEAPON, 0);
return 0;
}
break;
@@ -14084,7 +14129,7 @@ int skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id,
map->foreachinmap(skill->check_condition_mob_master_sub, sd->bl.m, BL_MOB, sd->bl.id, MOBID_SILVERSNIPER, skill_id, &c);
}
if( c >= maxcount ) {
- clif->skill_fail(sd , skill_id, USESKILL_FAIL_LEVEL, 0);
+ clif->skill_fail(sd , skill_id, USESKILL_FAIL_SUMMON, 0);
return 0;
}
}
@@ -15309,10 +15354,14 @@ int skill_autospell (struct map_session_data *sd, uint16 skill_id)
/*==========================================
* Sitting skills functions.
*------------------------------------------*/
-int skill_sit_count (struct block_list *bl, va_list ap) {
- struct map_session_data *sd;
- int type =va_arg(ap,int);
- sd=(struct map_session_data*)bl;
+int skill_sit_count(struct block_list *bl, va_list ap)
+{
+ int type = va_arg(ap, int);
+ struct map_session_data *sd = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
if(!pc_issit(sd))
return 0;
@@ -15326,11 +15375,14 @@ int skill_sit_count (struct block_list *bl, va_list ap) {
return 0;
}
-int skill_sit_in (struct block_list *bl, va_list ap) {
- struct map_session_data *sd;
- int type =va_arg(ap,int);
+int skill_sit_in(struct block_list *bl, va_list ap)
+{
+ int type = va_arg(ap, int);
+ struct map_session_data *sd = NULL;
- sd=(struct map_session_data*)bl;
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
if(!pc_issit(sd))
return 0;
@@ -15347,10 +15399,15 @@ int skill_sit_in (struct block_list *bl, va_list ap) {
return 0;
}
-int skill_sit_out (struct block_list *bl, va_list ap) {
- struct map_session_data *sd;
- int type =va_arg(ap,int);
- sd=(struct map_session_data*)bl;
+int skill_sit_out(struct block_list *bl, va_list ap)
+{
+ int type = va_arg(ap, int);
+ struct map_session_data *sd = NULL;
+
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_PC);
+ sd = BL_UCAST(BL_PC, bl);
+
if(sd->state.gangsterparadise && type&1)
sd->state.gangsterparadise=0;
if(sd->state.rest && type&2) {
@@ -15401,7 +15458,8 @@ int skill_sit (struct map_session_data *sd, int type)
/*==========================================
*
*------------------------------------------*/
-int skill_frostjoke_scream(struct block_list *bl, va_list ap) {
+int skill_frostjoke_scream(struct block_list *bl, va_list ap)
+{
struct block_list *src;
uint16 skill_id,skill_lv;
int64 tick;
@@ -15417,9 +15475,9 @@ int skill_frostjoke_scream(struct block_list *bl, va_list ap) {
if (src == bl || status->isdead(bl))
return 0;
if (bl->type == BL_PC) {
- struct map_session_data *sd = (struct map_session_data *)bl;
- if (sd && (pc_isinvisible(sd) || pc_ismadogear(sd)))
- return 0;//Frost Joke / Scream cannot target invisible or MADO Gear characters [Ind]
+ const struct map_session_data *sd = BL_UCCAST(BL_PC, bl);
+ if (pc_isinvisible(sd) || pc_ismadogear(sd))
+ return 0; //Frost Joke / Scream cannot target invisible or MADO Gear characters [Ind]
}
//It has been reported that Scream/Joke works the same regardless of woe-setting. [Skotlex]
if(battle->check_target(src,bl,BCT_ENEMY) > 0)
@@ -15551,15 +15609,15 @@ struct skill_unit_group *skill_locate_element_field(struct block_list *bl) {
}
// for graffiti cleaner [Valaris]
-int skill_graffitiremover (struct block_list *bl, va_list ap) {
- struct skill_unit *su=NULL;
+int skill_graffitiremover(struct block_list *bl, va_list ap)
+{
+ struct skill_unit *su = NULL;
nullpo_ret(bl);
- if(bl->type != BL_SKILL)
+ if (bl->type != BL_SKILL)
return 0;
-
- su = ((struct skill_unit *)bl);
+ su = BL_UCAST(BL_SKILL, bl);
if((su->group) && (su->group->unit_id == UNT_GRAFFITI))
skill->delunit(su);
@@ -15567,30 +15625,35 @@ int skill_graffitiremover (struct block_list *bl, va_list ap) {
return 0;
}
-int skill_greed (struct block_list *bl, va_list ap) {
- struct block_list *src;
+int skill_greed(struct block_list *bl, va_list ap)
+{
+ struct block_list *src = va_arg(ap, struct block_list *);
nullpo_ret(bl);
- nullpo_ret(src = va_arg(ap, struct block_list *));
+ nullpo_ret(src);
- if(src->type == BL_PC && bl->type==BL_ITEM )
- pc->takeitem(((TBL_PC*)src), ((TBL_ITEM*)bl));
+ if (src->type == BL_PC && bl->type == BL_ITEM) {
+ struct map_session_data *sd = BL_UCAST(BL_PC, src);
+ struct flooritem_data *fitem = BL_UCAST(BL_ITEM, bl);
+ pc->takeitem(sd, fitem);
+ }
return 0;
}
+
//For Ranger's Detonator [Jobbie/3CeAM]
-int skill_detonator(struct block_list *bl, va_list ap) {
- struct skill_unit *su=NULL;
- struct block_list *src;
+int skill_detonator(struct block_list *bl, va_list ap)
+{
+ struct skill_unit *su = NULL;
+ struct block_list *src = va_arg(ap,struct block_list *);
int unit_id;
nullpo_ret(bl);
- src = va_arg(ap,struct block_list *);
+ nullpo_ret(src);
- if( bl->type != BL_SKILL )
+ if (bl->type != BL_SKILL)
return 0;
-
- su = (struct skill_unit *)bl;
+ su = BL_UCAST(BL_SKILL, bl);
if( !su->group || su->group->src_id != src->id )
return 0;
@@ -15630,16 +15693,21 @@ int skill_detonator(struct block_list *bl, va_list ap) {
/*==========================================
*
*------------------------------------------*/
-int skill_cell_overlap(struct block_list *bl, va_list ap) {
+int skill_cell_overlap(struct block_list *bl, va_list ap)
+{
uint16 skill_id;
int *alive;
- struct skill_unit *su;
+ struct skill_unit *su = NULL;
skill_id = va_arg(ap,int);
alive = va_arg(ap,int *);
- su = (struct skill_unit *)bl;
- if( su == NULL || su->group == NULL || (*alive) == 0 )
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_SKILL);
+ nullpo_ret(alive);
+ su = BL_UCAST(BL_SKILL, bl);
+
+ if (bl->type != BL_SKILL || su->group == NULL || (*alive) == 0)
return 0;
if( su->group->state.guildaura ) /* guild auras are not canceled! */
@@ -15723,38 +15791,44 @@ int skill_cell_overlap(struct block_list *bl, va_list ap) {
/*==========================================
*
*------------------------------------------*/
-int skill_chastle_mob_changetarget(struct block_list *bl,va_list ap)
+int skill_chastle_mob_changetarget(struct block_list *bl, va_list ap)
{
- struct mob_data* md;
- struct unit_data*ud = unit->bl2ud(bl);
- struct block_list *from_bl;
- struct block_list *to_bl;
- md = (struct mob_data*)bl;
- from_bl = va_arg(ap,struct block_list *);
- to_bl = va_arg(ap,struct block_list *);
-
- if(ud && ud->target == from_bl->id)
+ struct unit_data *ud = unit->bl2ud(bl);
+ struct block_list *from_bl = va_arg(ap, struct block_list *);
+ struct block_list *to_bl = va_arg(ap, struct block_list *);
+
+ nullpo_ret(bl);
+ nullpo_ret(from_bl);
+ nullpo_ret(to_bl);
+
+ if (ud != NULL && ud->target == from_bl->id)
ud->target = to_bl->id;
- if(md->bl.type == BL_MOB && md->target_id == from_bl->id)
- md->target_id = to_bl->id;
+ if (bl->type == BL_MOB) {
+ struct mob_data *md = BL_UCAST(BL_MOB, bl);
+ if (md->target_id == from_bl->id)
+ md->target_id = to_bl->id;
+ }
return 0;
}
/*==========================================
*
*------------------------------------------*/
-int skill_trap_splash(struct block_list *bl, va_list ap) {
- struct block_list *src;
- int64 tick;
- struct skill_unit *src_su;
+int skill_trap_splash(struct block_list *bl, va_list ap)
+{
+ struct block_list *src = va_arg(ap, struct block_list *);
+ int64 tick = va_arg(ap, int64);
+ struct skill_unit *src_su = NULL;
struct skill_unit_group *sg;
struct block_list *ss;
- src = va_arg(ap,struct block_list *);
- src_su = (struct skill_unit *)src;
- tick = va_arg(ap,int64);
- if( !src_su->alive || bl->prev == NULL )
+ nullpo_ret(bl);
+ nullpo_ret(src);
+ Assert_ret(src->type == BL_SKILL);
+ src_su = BL_UCAST(BL_SKILL, src);
+
+ if (!src_su->alive || bl->prev == NULL)
return 0;
nullpo_ret(sg = src_su->group);
@@ -15807,21 +15881,24 @@ int skill_trap_splash(struct block_list *bl, va_list ap) {
break;
case UNT_FIRINGTRAP:
case UNT_ICEBOUNDTRAP:
- if( src->id == bl->id ) break;
- if( bl->type == BL_SKILL ){
- struct skill_unit *su = (struct skill_unit *)bl;
- if( su->group->unit_id == UNT_USED_TRAPS )
+ if (src->id == bl->id)
+ break;
+ if (bl->type == BL_SKILL) {
+ struct skill_unit *su = BL_UCAST(BL_SKILL, bl);
+ if (su->group->unit_id == UNT_USED_TRAPS)
break;
}
+ /* Fall through */
case UNT_CLUSTERBOMB:
if( ss != bl )
skill->attack(BF_MISC,ss,src,bl,sg->skill_id,sg->skill_lv,tick,sg->val1|SD_LEVEL);
break;
case UNT_CLAYMORETRAP:
- if( src->id == bl->id ) break;
- if( bl->type == BL_SKILL ){
- struct skill_unit *su = (struct skill_unit *)bl;
- switch( su->group->unit_id ){
+ if (src->id == bl->id)
+ break;
+ if (bl->type == BL_SKILL) {
+ struct skill_unit *su = BL_UCAST(BL_SKILL, bl);
+ switch (su->group->unit_id) {
case UNT_CLAYMORETRAP:
case UNT_LANDMINE:
case UNT_BLASTMINE:
@@ -15837,6 +15914,7 @@ int skill_trap_splash(struct block_list *bl, va_list ap) {
}
break;
}
+ /* Fall through */
default:
skill->attack(skill->get_type(sg->skill_id),ss,src,bl,sg->skill_id,sg->skill_lv,tick,0);
break;
@@ -15918,8 +15996,9 @@ bool skill_can_cloak(struct map_session_data *sd) {
* Verifies if an user can still be cloaked (AS_CLOAKING)
* Is called via map->foreachinrange when any kind of wall disapears
**/
-int skill_check_cloaking_end(struct block_list *bl, va_list ap) {
- TBL_PC *sd = BL_CAST(BL_PC, bl);
+int skill_check_cloaking_end(struct block_list *bl, va_list ap)
+{
+ struct map_session_data *sd = BL_CAST(BL_PC, bl);
if (sd && sd->sc.data[SC_CLOAKING] && !skill->can_cloak(sd))
status_change_end(bl, SC_CLOAKING, INVALID_TIMER);
@@ -15964,6 +16043,7 @@ bool skill_check_shadowform(struct block_list *bl, int64 damage, int hit)
if (sc && sc->data[SC__SHADOWFORM] && damage) {
struct block_list *src = map->id2bl(sc->data[SC__SHADOWFORM]->val2);
+ struct map_session_data *sd = BL_CAST(BL_PC, src);
if( !src || src->m != bl->m ) {
status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER);
@@ -15971,8 +16051,8 @@ bool skill_check_shadowform(struct block_list *bl, int64 damage, int hit)
}
if( src && (status->isdead(src) || !battle->check_target(bl,src,BCT_ENEMY)) ){
- if( src->type == BL_PC )
- ((TBL_PC*)src)->shadowform_id = 0;
+ if (sd != NULL)
+ sd->shadowform_id = 0;
status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER);
return false;
}
@@ -15982,8 +16062,8 @@ bool skill_check_shadowform(struct block_list *bl, int64 damage, int hit)
/* because damage can cancel it */
if( sc->data[SC__SHADOWFORM] && (--sc->data[SC__SHADOWFORM]->val3) <= 0 ) {
status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER);
- if( src->type == BL_PC )
- ((TBL_PC*)src)->shadowform_id = 0;
+ if (sd != NULL)
+ sd->shadowform_id = 0;
}
return true;
}
@@ -16180,7 +16260,7 @@ struct skill_unit_group* skill_initunitgroup (struct block_list* src, int count,
group->guild_id = status->get_guild_id(src);
group->bg_id = bg->team_get_id(src);
group->group_id = skill->get_new_group_id();
- group->unit.data = (struct skill_unit *)aCalloc(count,sizeof(struct skill_unit));
+ CREATE(group->unit.data, struct skill_unit, count);
group->unit.count = count;
group->alive_count = 0;
group->val1 = 0;
@@ -16207,24 +16287,27 @@ struct skill_unit_group* skill_initunitgroup (struct block_list* src, int count,
/*==========================================
*
*------------------------------------------*/
-int skill_delunitgroup(struct skill_unit_group *group, const char* file, int line, const char* func) {
+int skill_delunitgroup(struct skill_unit_group *group, const char *file, int line, const char *func)
+{
struct block_list* src;
struct unit_data *ud;
int i,j;
+ struct map_session_data *sd = NULL;
if( group == NULL ) {
ShowDebug("skill_delunitgroup: group is NULL (source=%s:%d, %s)! Please report this! (#3504)\n", file, line, func);
return 0;
}
- src=map->id2bl(group->src_id);
+ src = map->id2bl(group->src_id);
ud = unit->bl2ud(src);
- if(!src || !ud) {
+ sd = BL_CAST(BL_PC, src);
+ if (src == NULL || ud == NULL) {
ShowError("skill_delunitgroup: Group's source not found! (src_id: %d skill_id: %d)\n", group->src_id, group->skill_id);
return 0;
}
- if( src->type == BL_PC && !status->isdead(src) && ((TBL_PC*)src)->state.warping && !((TBL_PC*)src)->state.changemap ) {
+ if (sd != NULL && !status->isdead(src) && sd->state.warping && !sd->state.changemap) {
switch( group->skill_id ) {
case BA_DISSONANCE:
case BA_POEMBRAGI:
@@ -16236,7 +16319,7 @@ int skill_delunitgroup(struct skill_unit_group *group, const char* file, int lin
case DC_DONTFORGETME:
case DC_FORTUNEKISS:
case DC_SERVICEFORYOU:
- skill->usave_add(((TBL_PC*)src), group->skill_id, group->skill_lv);
+ skill->usave_add(sd, group->skill_id, group->skill_lv);
break;
}
}
@@ -16301,8 +16384,8 @@ int skill_delunitgroup(struct skill_unit_group *group, const char* file, int lin
break;
}
- if (src->type==BL_PC && group->state.ammo_consume)
- battle->consume_ammo((TBL_PC*)src, group->skill_id, group->skill_lv);
+ if (sd != NULL && group->state.ammo_consume)
+ battle->consume_ammo(sd, group->skill_id, group->skill_lv);
group->alive_count=0;
@@ -16646,9 +16729,10 @@ int skill_unit_timer(int tid, int64 tick, int id, intptr_t data) {
/*==========================================
*
*------------------------------------------*/
-int skill_unit_move_sub(struct block_list* bl, va_list ap) {
- struct skill_unit* su = (struct skill_unit *)bl;
- struct skill_unit_group* group = su->group;
+int skill_unit_move_sub(struct block_list* bl, va_list ap)
+{
+ struct skill_unit *su = NULL;
+ struct skill_unit_group *group = NULL;
struct block_list* target = va_arg(ap,struct block_list*);
int64 tick = va_arg(ap,int64);
@@ -16658,6 +16742,10 @@ int skill_unit_move_sub(struct block_list* bl, va_list ap) {
uint16 skill_id;
int i;
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_SKILL);
+ su = BL_UCAST(BL_SKILL, bl);
+ group = su->group;
nullpo_ret(group);
if( !su->alive || target->prev == NULL )
@@ -17607,9 +17695,10 @@ void skill_toggle_magicpower(struct block_list *bl, uint16 skill_id) {
sc->data[SC_MAGICPOWER]->val4 = 1;
status_calc_bl(bl, status->sc2scb_flag(SC_MAGICPOWER));
#ifndef RENEWAL
- if(bl->type == BL_PC){// update current display.
- clif->updatestatus(((TBL_PC *)bl),SP_MATK1);
- clif->updatestatus(((TBL_PC *)bl),SP_MATK2);
+ if (bl->type == BL_PC) {// update current display.
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
+ clif->updatestatus(sd, SP_MATK1);
+ clif->updatestatus(sd, SP_MATK2);
}
#endif
}
@@ -17638,21 +17727,21 @@ int skill_magicdecoy(struct map_session_data *sd, int nameid) {
sd->menuskill_val = 0;
switch (nameid) {
- case ITEMID_BOODY_RED:
+ case ITEMID_SCARLET_POINT:
class_ = MOBID_MAGICDECOY_FIRE;
break;
- case ITEMID_CRYSTAL_BLUE:
+ case ITEMID_INDIGO_POINT:
class_ = MOBID_MAGICDECOY_WATER;
break;
- case ITEMID_WIND_OF_VERDURE:
+ case ITEMID_LIME_GREEN_POINT:
class_ = MOBID_MAGICDECOY_WIND;
break;
- case ITEMID_YELLOW_LIVE:
+ case ITEMID_YELLOW_WISH_POINT:
class_ = MOBID_MAGICDECOY_EARTH;
break;
}
- md = mob->once_spawn_sub(&sd->bl, sd->bl.m, x, y, sd->status.name, class_, "", SZ_SMALL, AI_NONE);
+ md = mob->once_spawn_sub(&sd->bl, sd->bl.m, x, y, sd->status.name, class_, "", SZ_SMALL, AI_NONE);
if( md ) {
md->master_id = sd->bl.id;
md->special_state.ai = AI_FLORA;
@@ -17857,13 +17946,15 @@ int skill_changematerial(struct map_session_data *sd, int n, unsigned short *ite
/**
* for Royal Guard's LG_TRAMPLE
**/
-int skill_destroy_trap(struct block_list *bl, va_list ap) {
- struct skill_unit *su = (struct skill_unit *)bl;
+int skill_destroy_trap(struct block_list *bl, va_list ap)
+{
+ struct skill_unit *su = NULL;
struct skill_unit_group *sg;
- int64 tick;
+ int64 tick = va_arg(ap, int64);
- nullpo_ret(su);
- tick = va_arg(ap, int64);
+ nullpo_ret(bl);
+ Assert_ret(bl->type == BL_SKILL);
+ su = BL_UCAST(BL_SKILL, bl);
if (su->alive && (sg = su->group) != NULL && skill->get_inf2(sg->skill_id)&INF2_TRAP) {
switch( sg->unit_id ) {
@@ -18025,11 +18116,14 @@ int skill_blockpc_start_(struct map_session_data *sd, uint16 skill_id, int tick)
return 0;
}
-int skill_blockhomun_end(int tid, int64 tick, int id, intptr_t data) { // [orn]
- struct homun_data *hd = (TBL_HOM*)map->id2bl(id);
+// [orn]
+int skill_blockhomun_end(int tid, int64 tick, int id, intptr_t data)
+{
+ struct homun_data *hd = map->id2hd(id);
if (data <= 0 || data >= MAX_SKILL)
return 0;
- if (hd) hd->blockskill[data] = 0;
+ if (hd != NULL)
+ hd->blockskill[data] = 0;
return 1;
}
@@ -18049,11 +18143,14 @@ int skill_blockhomun_start(struct homun_data *hd, uint16 skill_id, int tick) { /
return timer->add(timer->gettick() + tick, skill->blockhomun_end, hd->bl.id, idx);
}
-int skill_blockmerc_end(int tid, int64 tick, int id, intptr_t data) {// [orn]
- struct mercenary_data *md = (TBL_MER*)map->id2bl(id);
- if( data <= 0 || data >= MAX_SKILL )
+// [orn]
+int skill_blockmerc_end(int tid, int64 tick, int id, intptr_t data)
+{
+ struct mercenary_data *md = map->id2mc(id);
+ if (data <= 0 || data >= MAX_SKILL)
return 0;
- if( md ) md->blockskill[data] = 0;
+ if (md != NULL)
+ md->blockskill[data] = 0;
return 1;
}
@@ -19082,29 +19179,31 @@ void skill_readdb(bool minimal) {
sv->readdb(map->db_path, "skill_changematerial_db.txt", ',', 4, 4+2*5, MAX_SKILL_PRODUCE_DB, skill->parse_row_changematerialdb);
}
-void skill_reload (void) {
+void skill_reload(void)
+{
struct s_mapiterator *iter;
struct map_session_data *sd;
- int i,c,k;
+ int i, j, k;
skill->read_db(false);
//[Ind/Hercules] refresh index cache
- for(c = 0; c < CLASS_COUNT; c++) {
- for( i = 0; i < MAX_SKILL_TREE; i++ ) {
- if( pc->skill_tree[c][i].id ) {
- pc->skill_tree[c][i].idx = skill->get_index(pc->skill_tree[c][i].id);
- for(k = 0; k < MAX_PC_SKILL_REQUIRE; k++) {
- if( pc->skill_tree[c][i].need[k].id )
- pc->skill_tree[c][i].need[k].idx = skill->get_index(pc->skill_tree[c][i].need[k].id);
- }
+ for (j = 0; j < CLASS_COUNT; j++) {
+ for (i = 0; i < MAX_SKILL_TREE; i++) {
+ struct skill_tree_entry *entry = &pc->skill_tree[j][i];
+ if (entry->id == 0)
+ continue;
+ entry->idx = skill->get_index(entry->id);
+ for (k = 0; k < VECTOR_LENGTH(entry->need); k++) {
+ struct skill_tree_requirement *req = &VECTOR_INDEX(entry->need, k);
+ req->idx = skill->get_index(req->id);
}
}
}
chrif->skillid2idx(0);
/* lets update all players skill tree : so that if any skill modes were changed they're properly updated */
iter = mapit_getallusers();
- for( sd = (TBL_PC*)mapit->first(iter); mapit->exists(iter); sd = (TBL_PC*)mapit->next(iter) )
+ for (sd = BL_UCAST(BL_PC, mapit->first(iter)); mapit->exists(iter); sd = BL_UCAST(BL_PC, mapit->next(iter)))
clif->skillinfoblock(sd);
mapit->free(iter);
diff --git a/src/map/status.c b/src/map/status.c
index 39329d5bb..c755d8eb0 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -1310,7 +1310,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 in_hp,
}
if (target->type == BL_SKILL)
- return skill->unit_ondamaged((struct skill_unit *)target, src, hp, timer->gettick());
+ return skill->unit_ondamaged(BL_UCAST(BL_SKILL, target), src, hp, timer->gettick());
st = status->get_status_data(target);
if( st == &status->dummy )
@@ -1350,9 +1350,14 @@ int status_damage(struct block_list *src,struct block_list *target,int64 in_hp,
#ifdef DEVOTION_REFLECT_DAMAGE
if (src && (sce = sc->data[SC_DEVOTION]) != NULL) {
struct block_list *d_bl = map->id2bl(sce->val1);
+ struct mercenary_data *d_md = BL_CAST(BL_MER, d_bl);
+ struct map_session_data *d_sd = BL_CAST(BL_PC, d_bl);
- if(d_bl &&((d_bl->type == BL_MER && ((TBL_MER *)d_bl)->master && ((TBL_MER *)d_bl)->master->bl.id == target->id)
- || (d_bl->type == BL_PC && ((TBL_PC *)d_bl)->devotion[sce->val2] == target->id)) && check_distance_bl(target, d_bl, sce->val3)) {
+ if (d_bl != NULL
+ && ((d_md != NULL && d_md->master != NULL && d_md->master->bl.id == target->id)
+ || (d_sd != NULL && d_sd->devotion[sce->val2] == target->id))
+ && check_distance_bl(target, d_bl, sce->val3)
+ ) {
clif->damage(d_bl, d_bl, 0, 0, hp, 0, BDT_NORMAL, 0);
status_fix_damage(NULL, d_bl, hp, 0);
return 0;
@@ -1412,14 +1417,15 @@ int status_damage(struct block_list *src,struct block_list *target,int64 in_hp,
}
switch (target->type) {
- case BL_PC: pc->damage((TBL_PC*)target,src,hp,sp); break;
- case BL_MOB: mob->damage((TBL_MOB*)target, src, hp); break;
- case BL_HOM: homun->damaged((TBL_HOM*)target); break;
- case BL_MER: mercenary->heal((TBL_MER*)target,hp,sp); break;
- case BL_ELEM: elemental->heal((TBL_ELEM*)target,hp,sp); break;
+ case BL_PC: pc->damage(BL_UCAST(BL_PC, target), src, hp, sp); break;
+ case BL_MOB: mob->damage(BL_UCAST(BL_MOB, target), src, hp); break;
+ case BL_HOM: homun->damaged(BL_UCAST(BL_HOM, target)); break;
+ case BL_MER: mercenary->heal(BL_UCAST(BL_MER, target), hp, sp); break;
+ case BL_ELEM: elemental->heal(BL_UCAST(BL_ELEM, target), hp, sp); break;
}
- if( src && target->type == BL_PC && (((TBL_PC*)target)->disguise) > 0 ) {// stop walking when attacked in disguise to prevent walk-delay bug
+ if (src != NULL && target->type == BL_PC && BL_UCAST(BL_PC, target)->disguise > 0) {
+ // stop walking when attacked in disguise to prevent walk-delay bug
unit->stop_walking(target, STOPWALKING_FLAG_FIXPOS);
}
@@ -1437,11 +1443,11 @@ int status_damage(struct block_list *src,struct block_list *target,int64 in_hp,
//&2: Also remove object from map.
//&4: Also delete object from memory.
switch (target->type) {
- case BL_PC: flag = pc->dead((TBL_PC*)target,src); break;
- case BL_MOB: flag = mob->dead((TBL_MOB*)target, src, (flag&4) ? 3 : 0); break;
- case BL_HOM: flag = homun->dead((TBL_HOM*)target); break;
- case BL_MER: flag = mercenary->dead((TBL_MER*)target); break;
- case BL_ELEM: flag = elemental->dead((TBL_ELEM*)target); break;
+ case BL_PC: flag = pc->dead(BL_UCAST(BL_PC, target), src); break;
+ case BL_MOB: flag = mob->dead(BL_UCAST(BL_MOB, target), src, (flag&4) ? 3 : 0); break;
+ case BL_HOM: flag = homun->dead(BL_UCAST(BL_HOM, target)); break;
+ case BL_MER: flag = mercenary->dead(BL_UCAST(BL_MER, target)); break;
+ case BL_ELEM: flag = elemental->dead(BL_UCAST(BL_ELEM, target)); break;
default: //Unhandled case, do nothing to object.
flag = 0;
break;
@@ -1481,18 +1487,21 @@ int status_damage(struct block_list *src,struct block_list *target,int64 in_hp,
sc_start(target,target,status->skill2sc(PR_KYRIE),100,10,time);
if( target->type == BL_MOB )
- ((TBL_MOB*)target)->state.rebirth = 1;
+ BL_UCAST(BL_MOB, target)->state.rebirth = 1;
return (int)(hp+sp);
}
- if (target->type == BL_MOB && sc && sc->data[SC_REBIRTH] && !((TBL_MOB*) target)->state.rebirth) {
- // Ensure the monster has not already rebirthed before doing so.
- status->revive(target, sc->data[SC_REBIRTH]->val2, 0);
- status->change_clear(target,0);
- ((TBL_MOB*)target)->state.rebirth = 1;
+ if (target->type == BL_MOB && sc != NULL && sc->data[SC_REBIRTH] != NULL) {
+ struct mob_data *t_md = BL_UCAST(BL_MOB, target);
+ if (!t_md->state.rebirth) {
+ // Ensure the monster has not already reborn before doing so.
+ status->revive(target, sc->data[SC_REBIRTH]->val2, 0);
+ status->change_clear(target,0);
+ t_md->state.rebirth = 1;
- return (int)(hp+sp);
+ return (int)(hp+sp);
+ }
}
status->change_clear(target,0);
@@ -1577,11 +1586,11 @@ int status_heal(struct block_list *bl,int64 in_hp,int64 in_sp, int flag) {
// send hp update to client
switch(bl->type) {
- case BL_PC: pc->heal((TBL_PC*)bl,hp,sp,(flag&2) ? 1 : 0); break;
- case BL_MOB: mob->heal((TBL_MOB*)bl,hp); break;
- case BL_HOM: homun->healed((TBL_HOM*)bl); break;
- case BL_MER: mercenary->heal((TBL_MER*)bl,hp,sp); break;
- case BL_ELEM: elemental->heal((TBL_ELEM*)bl,hp,sp); break;
+ case BL_PC: pc->heal(BL_UCAST(BL_PC, bl), hp, sp, (flag&2) ? 1 : 0); break;
+ case BL_MOB: mob->heal(BL_UCAST(BL_MOB, bl), hp); break;
+ case BL_HOM: homun->healed(BL_UCAST(BL_HOM, bl)); break;
+ case BL_MER: mercenary->heal(BL_UCAST(BL_MER, bl), hp, sp); break;
+ case BL_ELEM: elemental->heal(BL_UCAST(BL_ELEM, bl), hp, sp); break;
}
return (int)(hp+sp);
@@ -1674,9 +1683,9 @@ int status_revive(struct block_list *bl, unsigned char per_hp, unsigned char per
clif->resurrection(bl, 1);
switch (bl->type) {
- case BL_PC: pc->revive((TBL_PC*)bl, hp, sp); break;
- case BL_MOB: mob->revive((TBL_MOB*)bl, hp); break;
- case BL_HOM: homun->revive((TBL_HOM*)bl, hp, sp); break;
+ case BL_PC: pc->revive(BL_UCAST(BL_PC, bl), hp, sp); break;
+ case BL_MOB: mob->revive(BL_UCAST(BL_MOB, bl), hp); break;
+ case BL_HOM: homun->revive(BL_UCAST(BL_HOM, bl), hp, sp); break;
}
return 1;
}
@@ -1709,9 +1718,9 @@ int status_fixed_revive(struct block_list *bl, unsigned int per_hp, unsigned int
if (bl->prev) //Animation only if character is already on a map.
clif->resurrection(bl, 1);
switch (bl->type) {
- case BL_PC: pc->revive((TBL_PC*)bl, hp, sp); break;
- case BL_MOB: mob->revive((TBL_MOB*)bl, hp); break;
- case BL_HOM: homun->revive((TBL_HOM*)bl, hp, sp); break;
+ case BL_PC: pc->revive(BL_UCAST(BL_PC, bl), hp, sp); break;
+ case BL_MOB: mob->revive(BL_UCAST(BL_MOB, bl), hp); break;
+ case BL_HOM: homun->revive(BL_UCAST(BL_HOM, bl), hp, sp); break;
}
return 1;
}
@@ -1731,10 +1740,11 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
struct status_data *st;
struct status_change *sc=NULL, *tsc;
int hide_flag;
+ struct map_session_data *sd = BL_CAST(BL_PC, src);
st = src ? status->get_status_data(src) : &status->dummy;
- if (src && src->type != BL_PC && status->isdead(src))
+ if (src != NULL && src->type != BL_PC && status->isdead(src))
return 0;
if (!skill_id) { //Normal attack checks.
@@ -1749,14 +1759,14 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
}
if( skill_id ) {
-
- if( src && !(src->type == BL_PC && ((TBL_PC*)src)->skillitem)) { // Items that cast skills using 'itemskill' will not be handled by map_zone_db.
+ if (src != NULL && (sd == NULL || sd->skillitem == 0)) {
+ // Items that cast skills using 'itemskill' will not be handled by map_zone_db.
int i;
for(i = 0; i < map->list[src->m].zone->disabled_skills_count; i++) {
if( skill_id == map->list[src->m].zone->disabled_skills[i]->nameid && (map->list[src->m].zone->disabled_skills[i]->type&src->type) ) {
if (src->type == BL_PC) {
- clif->msgtable((TBL_PC*)src, MSG_SKILL_CANT_USE_AREA); // This skill cannot be used within this area
+ clif->msgtable(sd, MSG_SKILL_CANT_USE_AREA); // This skill cannot be used within this area
} else if (src->type == BL_MOB && map->list[src->m].zone->disabled_skills[i]->subtype != MZS_NONE) {
if( st->mode&MD_BOSS ) { /* is boss */
if( !( map->list[src->m].zone->disabled_skills[i]->subtype&MZS_BOSS ) )
@@ -1786,9 +1796,10 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
break;
case AL_TELEPORT:
//Should fail when used on top of Land Protector [Skotlex]
- if (src && map->getcell(src->m, src, src->x, src->y, CELL_CHKLANDPROTECTOR)
- && !(st->mode&MD_BOSS)
- && (src->type != BL_PC || ((TBL_PC*)src)->skillitem != skill_id))
+ if (src != NULL
+ && map->getcell(src->m, src, src->x, src->y, CELL_CHKLANDPROTECTOR)
+ && !(st->mode&MD_BOSS)
+ && (src->type != BL_PC || sd->skillitem != skill_id))
return 0;
break;
default:
@@ -1818,7 +1829,7 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
struct block_list *winkcharm_target = map->id2bl(sc->data[SC_DC_WINKCHARM]->val2);
if (winkcharm_target != NULL) {
if (unit->bl2ud(src) && (unit->bl2ud(src))->walktimer == INVALID_TIMER)
- unit->walktobl(src, map->id2bl(sc->data[SC_DC_WINKCHARM]->val2), 3, 1);
+ unit->walktobl(src, winkcharm_target, 3, 1);
clif->emotion(src, E_LV);
return 0;
} else {
@@ -1838,9 +1849,9 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
}
if (sc->data[SC_DANCING] && flag!=2) {
- if( src->type == BL_PC && skill_id >= WA_SWING_DANCE && skill_id <= WM_UNLIMITED_HUMMING_VOICE )
- { // Lvl 5 Lesson or higher allow you use 3rd job skills while dancing.v
- if( pc->checkskill((TBL_PC*)src,WM_LESSON) < 5 )
+ if (src->type == BL_PC && skill_id >= WA_SWING_DANCE && skill_id <= WM_UNLIMITED_HUMMING_VOICE) {
+ // Lvl 5 Lesson or higher allow you use 3rd job skills while dancing.v
+ if (pc->checkskill(sd, WM_LESSON) < 5)
return 0;
} else if(sc->data[SC_LONGING]) { //Allow everything except dancing/re-dancing. [Skotlex]
if (skill_id == BD_ENCORE ||
@@ -1862,48 +1873,45 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
return 0; //Can't amp out of Wand of Hermode :/ [Skotlex]
}
- if (skill_id && //Do not block item-casted skills.
- (src->type != BL_PC || ((TBL_PC*)src)->skillitem != skill_id)
- ) {
+ if (skill_id != 0 /* Do not block item-casted skills.*/ && (src->type != BL_PC || sd->skillitem != skill_id)) {
//Skills blocked through status changes...
- if (!flag && ( //Blocked only from using the skill (stuff like autospell may still go through
- sc->data[SC_SILENCE] ||
- sc->data[SC_STEELBODY] ||
- sc->data[SC_BERSERK] ||
- sc->data[SC_OBLIVIONCURSE] ||
- sc->data[SC_WHITEIMPRISON] ||
- sc->data[SC__INVISIBILITY] ||
- (sc->data[SC_COLD] && src->type != BL_MOB) ||
- sc->data[SC__IGNORANCE] ||
- sc->data[SC_DEEP_SLEEP] ||
- sc->data[SC_SATURDAY_NIGHT_FEVER] ||
- sc->data[SC_CURSEDCIRCLE_TARGET] ||
- (sc->data[SC_MARIONETTE_MASTER] && skill_id != CG_MARIONETTE) || //Only skill you can use is marionette again to cancel it
- (sc->data[SC_MARIONETTE] && skill_id == CG_MARIONETTE) || //Cannot use marionette if you are being buffed by another
- (sc->data[SC_STASIS] && skill->block_check(src, SC_STASIS, skill_id)) ||
- (sc->data[SC_KG_KAGEHUMI] && skill->block_check(src, SC_KG_KAGEHUMI, skill_id))
- ))
- return 0;
+ if (!flag && ( //Blocked only from using the skill (stuff like autospell may still go through
+ sc->data[SC_SILENCE] ||
+ sc->data[SC_STEELBODY] ||
+ sc->data[SC_BERSERK] ||
+ sc->data[SC_OBLIVIONCURSE] ||
+ sc->data[SC_WHITEIMPRISON] ||
+ sc->data[SC__INVISIBILITY] ||
+ (sc->data[SC_COLD] && src->type != BL_MOB) ||
+ sc->data[SC__IGNORANCE] ||
+ sc->data[SC_DEEP_SLEEP] ||
+ sc->data[SC_SATURDAY_NIGHT_FEVER] ||
+ sc->data[SC_CURSEDCIRCLE_TARGET] ||
+ (sc->data[SC_MARIONETTE_MASTER] && skill_id != CG_MARIONETTE) || //Only skill you can use is marionette again to cancel it
+ (sc->data[SC_MARIONETTE] && skill_id == CG_MARIONETTE) || //Cannot use marionette if you are being buffed by another
+ (sc->data[SC_STASIS] && skill->block_check(src, SC_STASIS, skill_id)) ||
+ (sc->data[SC_KG_KAGEHUMI] && skill->block_check(src, SC_KG_KAGEHUMI, skill_id))
+ ))
+ return 0;
- //Skill blocking.
- if (
- (sc->data[SC_VOLCANO] && skill_id == WZ_ICEWALL) ||
- (sc->data[SC_ROKISWEIL] && skill_id != BD_ADAPTATION) ||
- (sc->data[SC_HERMODE] && skill->get_inf(skill_id) & INF_SUPPORT_SKILL) ||
- pc_ismuted(sc, MANNER_NOSKILL)
- )
- return 0;
+ //Skill blocking.
+ if (
+ (sc->data[SC_VOLCANO] && skill_id == WZ_ICEWALL) ||
+ (sc->data[SC_ROKISWEIL] && skill_id != BD_ADAPTATION) ||
+ (sc->data[SC_HERMODE] && skill->get_inf(skill_id) & INF_SUPPORT_SKILL) ||
+ pc_ismuted(sc, MANNER_NOSKILL)
+ )
+ return 0;
- if( sc->data[SC__MANHOLE] || ((tsc = status->get_sc(target)) && tsc->data[SC__MANHOLE]) ) {
- switch(skill_id) {//##TODO## make this a flag in skill_db?
- // Skills that can be used even under Man Hole effects.
- case SC_SHADOWFORM:
- break;
- default:
- return 0;
- }
+ if( sc->data[SC__MANHOLE] || ((tsc = status->get_sc(target)) && tsc->data[SC__MANHOLE]) ) {
+ switch(skill_id) {//##TODO## make this a flag in skill_db?
+ // Skills that can be used even under Man Hole effects.
+ case SC_SHADOWFORM:
+ break;
+ default:
+ return 0;
}
-
+ }
}
}
@@ -1963,23 +1971,26 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin
hide_flag &= ~OPTION_HIDE;
switch( target->type ) {
- case BL_PC: {
- struct map_session_data *sd = (TBL_PC*) target;
- bool is_boss = (st->mode&MD_BOSS);
- bool is_detect = ((st->mode&MD_DETECTOR)?true:false);//god-knows-why gcc doesn't shut up until this happens
- if (pc_isinvisible(sd))
+ case BL_PC:
+ {
+ const struct map_session_data *tsd = BL_UCCAST(BL_PC, target);
+ bool is_boss = (st->mode&MD_BOSS);
+ bool is_detect = ((st->mode&MD_DETECTOR)?true:false);//god-knows-why gcc doesn't shut up until this happens
+ if (pc_isinvisible(tsd))
+ return 0;
+ if (tsc != NULL) {
+ if (tsc->option&hide_flag
+ && !is_boss
+ && ((tsd->special_state.perfect_hiding || !is_detect)
+ || (tsc->data[SC_CLOAKINGEXCEED] != NULL && is_detect)
+ ))
+ return 0;
+ if (tsc->data[SC_CAMOUFLAGE] && !(is_boss || is_detect) && (!skill_id || (flag == 0 && src && src->type != BL_PC)))
+ return 0;
+ if (tsc->data[SC_STEALTHFIELD] && !is_boss)
return 0;
- if( tsc ) {
- if (tsc->option&hide_flag && !is_boss &&
- ((sd->special_state.perfect_hiding || !is_detect) ||
- (tsc->data[SC_CLOAKINGEXCEED] && is_detect)))
- return 0;
- if( tsc->data[SC_CAMOUFLAGE] && !(is_boss || is_detect) && (!skill_id || (flag == 0 && src && src->type != BL_PC)) )
- return 0;
- if( tsc->data[SC_STEALTHFIELD] && !is_boss )
- return 0;
- }
}
+ }
break;
case BL_ITEM:
//Allow targeting of items to pick'em up (or in the case of mobs, to loot them).
@@ -2052,7 +2063,7 @@ int status_calc_mob_(struct mob_data* md, enum e_status_calc_opt opt) {
return 0;
}
if (!md->base_status)
- md->base_status = (struct status_data*)aCalloc(1, sizeof(struct status_data));
+ CREATE(md->base_status, struct status_data, 1);
mstatus = md->base_status;
memcpy(mstatus, &md->db->status, sizeof(struct status_data));
@@ -2074,7 +2085,7 @@ int status_calc_mob_(struct mob_data* md, enum e_status_calc_opt opt) {
//Max HP setting from Summon Flora/marine Sphere
struct unit_data *ud = unit->bl2ud(mbl);
//Remove special AI when this is used by regular mobs.
- if (mbl->type == BL_MOB && ((TBL_MOB*)mbl)->special_state.ai == AI_NONE)
+ if (mbl->type == BL_MOB && BL_UCAST(BL_MOB, mbl)->special_state.ai == AI_NONE)
md->special_state.ai = AI_NONE;
if (ud) {
// different levels of HP according to skill level
@@ -3426,8 +3437,8 @@ void status_calc_regen(struct block_list *bl, struct status_data *st, struct reg
sregen->sp = cap_value(val, 0, SHRT_MAX);
}
- if( bl->type == BL_HOM ) {
- struct homun_data *hd = (TBL_HOM*)bl;
+ if (bl->type == BL_HOM) {
+ struct homun_data *hd = BL_UCAST(BL_HOM, bl);
if( (skill_lv = homun->checkskill(hd,HAMI_SKIN)) > 0 ) {
val = regen->hp*(100+5*skill_lv)/100;
regen->hp = cap_value(val, 1, SHRT_MAX);
@@ -3492,10 +3503,17 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str
)
regen->flag = 0; //No regen
- if ( sc->data[SC_DANCING] || sc->data[SC_OBLIVIONCURSE] || sc->data[SC_MAXIMIZEPOWER] || sc->data[SC_REBOUND]
- || ( bl->type == BL_PC && (((TBL_PC*)bl)->class_&MAPID_UPPERMASK) == MAPID_MONK
- && (sc->data[SC_EXTREMITYFIST] || (sc->data[SC_EXPLOSIONSPIRITS] && (!sc->data[SC_SOULLINK] || sc->data[SC_SOULLINK]->val2 != SL_MONK)))
+ if (sc->data[SC_DANCING] != NULL
+ || sc->data[SC_OBLIVIONCURSE] != NULL
+ || sc->data[SC_MAXIMIZEPOWER] != NULL
+ || sc->data[SC_REBOUND] != NULL
+ || (bl->type == BL_PC && (BL_UCAST(BL_PC, bl)->class_&MAPID_UPPERMASK) == MAPID_MONK
+ && (sc->data[SC_EXTREMITYFIST] != NULL
+ || (sc->data[SC_EXPLOSIONSPIRITS] != NULL
+ && (sc->data[SC_SOULLINK] == NULL || sc->data[SC_SOULLINK]->val2 != SL_MONK)
)
+ )
+ )
) {
regen->flag &=~RGN_SP; //No natural SP regen
}
@@ -3542,13 +3560,21 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str
regen->rate.sp += regen->rate.sp * sc->data[SC_BUCHEDENOEL]->val2 / 100;
}
}
+
+#define status_get_homstr(st, hd) ((st)->str + (hd)->homunculus.str_value)
+#define status_get_homagi(st, hd) ((st)->agi + (hd)->homunculus.agi_value)
+#define status_get_homvit(st, hd) ((st)->vit + (hd)->homunculus.vit_value)
+#define status_get_homint(st, hd) ((st)->int_ + (hd)->homunculus.int_value)
+#define status_get_homdex(st, hd) ((st)->dex + (hd)->homunculus.dex_value)
+#define status_get_homluk(st, hd) ((st)->luk + (hd)->homunculus.luk_value)
+
/// Recalculates parts of an object's battle status according to the specified flags.
/// @param flag bitfield of values from enum scb_flag
void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
const struct status_data *bst = status->get_base_status(bl);
struct status_data *st = status->get_status_data(bl);
struct status_change *sc = status->get_sc(bl);
- TBL_PC *sd = BL_CAST(BL_PC,bl);
+ struct map_session_data *sd = BL_CAST(BL_PC,bl);
int temp;
if (!bst || !st)
@@ -3744,8 +3770,11 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
if( bl->type&BL_PC && !(sd && sd->state.permanent_speed) && st->speed < battle_config.max_walk_speed )
st->speed = battle_config.max_walk_speed;
- if( bl->type&BL_HOM && battle_config.hom_setting&0x8 && ((TBL_HOM*)bl)->master)
- st->speed = status->get_speed(&((TBL_HOM*)bl)->master->bl);
+ if (bl->type&BL_HOM && battle_config.hom_setting&0x8) {
+ struct homun_data *hd = BL_UCAST(BL_HOM, bl);
+ if (hd->master != NULL)
+ st->speed = status->get_speed(&hd->master->bl);
+ }
}
if(flag&SCB_CRI && bst->cri) {
@@ -3754,7 +3783,7 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
else
st->cri = status->calc_critical(bl, sc, bst->cri + 3*(st->luk - bst->luk), true);
}
- if (battle_config.show_katar_crit_bonus && bl->type == BL_PC && ((TBL_PC*)bl)->status.weapon == W_KATAR)
+ if (battle_config.show_katar_crit_bonus && bl->type == BL_PC && BL_UCAST(BL_PC, bl)->status.weapon == W_KATAR)
st->cri <<= 1;
if(flag&SCB_FLEE2 && bst->flee2) {
@@ -3860,12 +3889,13 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
if(flag&SCB_ASPD) {
int amotion;
if ( bl->type&BL_HOM ) {
+ const struct homun_data *hd = BL_UCCAST(BL_HOM, bl);
#ifdef RENEWAL
- amotion = ((TBL_HOM*)bl)->homunculusDB->baseASPD;
- amotion = amotion - amotion * status_get_homdex(bl) / 1000 - status_get_homagi(bl) * amotion / 250;
+ amotion = hd->homunculusDB->baseASPD;
+ amotion = amotion - amotion * status_get_homdex(st, hd) / 1000 - status_get_homagi(st, hd) * amotion / 250;
amotion = (amotion * status->calc_aspd(bl, sc, 1) + status->calc_aspd(bl, sc, 2)) / -100 + amotion;
#else
- amotion = (1000 - 4 * st->agi - st->dex) * ((TBL_HOM*)bl)->homunculusDB->baseASPD / 1000;
+ amotion = (1000 - 4 * st->agi - st->dex) * hd->homunculusDB->baseASPD / 1000;
amotion = status->calc_aspd_rate(bl, sc, amotion);
@@ -3918,16 +3948,20 @@ void status_calc_bl_main(struct block_list *bl, /*enum scb_flag*/int flag) {
/// Also sends updates to the client wherever applicable.
/// @param flag bitfield of values from enum scb_flag
/// @param first if true, will cause status_calc_* functions to run their base status initialization code
-void status_calc_bl_(struct block_list *bl, enum scb_flag flag, enum e_status_calc_opt opt) {
+void status_calc_bl_(struct block_list *bl, enum scb_flag flag, enum e_status_calc_opt opt)
+{
struct status_data bst; // previous battle status
struct status_data *st; // pointer to current battle status
- if( bl->type == BL_PC && ((TBL_PC*)bl)->delayed_damage != 0 ) {
- if( opt&SCO_FORCE )
- ((TBL_PC*)bl)->state.hold_recalc = 0;/* clear and move on */
- else {
- ((TBL_PC*)bl)->state.hold_recalc = 1;/* flag and stop */
- return;
+ if (bl->type == BL_PC) {
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
+ if (sd->delayed_damage != 0) {
+ if (opt&SCO_FORCE) {
+ sd->state.hold_recalc = 0;/* clear and move on */
+ } else {
+ sd->state.hold_recalc = 1;/* flag and stop */
+ return;
+ }
}
}
@@ -3964,7 +3998,7 @@ void status_calc_bl_(struct block_list *bl, enum scb_flag flag, enum e_status_ca
// compare against new values and send client updates
if( bl->type == BL_PC ) {
- TBL_PC* sd = BL_CAST(BL_PC, bl);
+ struct map_session_data *sd = BL_CAST(BL_PC, bl);
if(bst.str != st->str)
clif->updatestatus(sd,SP_STR);
if(bst.agi != st->agi)
@@ -4055,11 +4089,11 @@ void status_calc_bl_(struct block_list *bl, enum scb_flag flag, enum e_status_ca
clif->updatestatus(sd,SP_ATK2);
#endif
} else if( bl->type == BL_HOM ) {
- TBL_HOM* hd = BL_CAST(BL_HOM, bl);
- if( hd->master && memcmp(&bst, st, sizeof(struct status_data)) != 0 )
+ struct homun_data *hd = BL_CAST(BL_HOM, bl);
+ if (hd->master != NULL && memcmp(&bst, st, sizeof(struct status_data)) != 0)
clif->hominfo(hd->master,hd,0);
} else if( bl->type == BL_MER ) {
- TBL_MER* md = BL_CAST(BL_MER, bl);
+ struct mercenary_data *md = BL_CAST(BL_MER, bl);
if( bst.rhw.atk != st->rhw.atk || bst.rhw.atk2 != st->rhw.atk2 )
clif->mercenary_updatestatus(md->master, SP_ATK1);
if( bst.matk_max != st->matk_max )
@@ -4085,7 +4119,7 @@ void status_calc_bl_(struct block_list *bl, enum scb_flag flag, enum e_status_ca
if( bst.sp != st->sp )
clif->mercenary_updatestatus(md->master, SP_SP);
} else if( bl->type == BL_ELEM ) {
- TBL_ELEM* ed = BL_CAST(BL_ELEM, bl);
+ struct elemental_data *ed = BL_CAST(BL_ELEM, bl);
if( bst.max_hp != st->max_hp )
clif->elemental_updatestatus(ed->master, SP_MAXHP);
if( bst.max_sp != st->max_sp )
@@ -4103,10 +4137,10 @@ int status_check_visibility(struct block_list *src, struct block_list *target) {
switch ( src->type ) {
case BL_MOB:
- view_range = ((TBL_MOB*)src)->min_chase;
+ view_range = BL_UCCAST(BL_MOB, src)->min_chase;
break;
case BL_PET:
- view_range = ((TBL_PET*)src)->db->range2;
+ view_range = BL_UCCAST(BL_PET, src)->db->range2;
break;
default:
view_range = AREA_SIZE;
@@ -4125,8 +4159,13 @@ int status_check_visibility(struct block_list *src, struct block_list *target) {
case BL_PC:
if ( tsc->data[SC_CLOAKINGEXCEED] && !(st->mode&MD_BOSS) )
return 0;
- if ( (tsc->option&(OPTION_HIDE | OPTION_CLOAK | OPTION_CHASEWALK) || tsc->data[SC_STEALTHFIELD] || tsc->data[SC__INVISIBILITY] || tsc->data[SC_CAMOUFLAGE]) && !(st->mode&MD_BOSS) &&
- (((TBL_PC*)target)->special_state.perfect_hiding || !(st->mode&MD_DETECTOR)) )
+ if ((tsc->option&(OPTION_HIDE | OPTION_CLOAK | OPTION_CHASEWALK)
+ || tsc->data[SC_STEALTHFIELD] != NULL
+ || tsc->data[SC__INVISIBILITY] != NULL
+ || tsc->data[SC_CAMOUFLAGE] != NULL
+ )
+ && !(st->mode&MD_BOSS)
+ && (BL_UCCAST(BL_PC, target)->special_state.perfect_hiding || !(st->mode&MD_DETECTOR)))
return 0;
break;
default:
@@ -4192,8 +4231,8 @@ unsigned short status_base_atk(const struct block_list *bl, const struct status_
if ( !(bl->type&battle_config.enable_baseatk) )
return 0;
- if ( bl->type == BL_PC )
- switch ( ((TBL_PC*)bl)->status.weapon ) {
+ if (bl->type == BL_PC) {
+ switch (BL_UCCAST(BL_PC, bl)->status.weapon) {
case W_BOW:
case W_MUSICAL:
case W_WHIP:
@@ -4203,36 +4242,39 @@ unsigned short status_base_atk(const struct block_list *bl, const struct status_
case W_SHOTGUN:
case W_GRENADE:
flag = 1;
+ }
}
if ( flag ) {
-#ifdef RENEWAL
- dstr =
-#endif
- str = st->dex;
+ str = st->dex;
dex = st->str;
} else {
-#ifdef RENEWAL
- dstr =
-#endif
- str = st->str;
+ str = st->str;
dex = st->dex;
}
+#ifdef RENEWAL
+ dstr = str;
+#endif
//Normally only players have base-atk, but homunc have a different batk
// equation, hinting that perhaps non-players should use this for batk.
// [Skotlex]
#ifdef RENEWAL
- if ( bl->type == BL_HOM )
- str = 2 * (((TBL_HOM*)bl)->homunculus.level + status_get_homstr(bl));
+ if (bl->type == BL_HOM) {
+ const struct homun_data *hd = BL_UCCAST(BL_HOM, bl);
+ str = 2 * (hd->homunculus.level + status_get_homstr(st, hd));
+ }
#else
dstr = str / 10;
str += dstr*dstr;
#endif
- if ( bl->type == BL_PC )
#ifdef RENEWAL
- str = (int)(dstr + (float)dex / 5 + (float)st->luk / 3 + (float)((TBL_PC*)bl)->status.base_level / 4);
- else if ( bl->type == BL_MOB || bl->type == BL_MER )
- str = dstr + ((TBL_MOB*)bl)->level;
+ if (bl->type == BL_PC)
+ str = (int)(dstr + (float)dex / 5 + (float)st->luk / 3 + (float)BL_UCCAST(BL_PC, bl)->status.base_level / 4);
+ else if (bl->type == BL_MOB)
+ str = dstr + BL_UCCAST(BL_MOB, bl)->level;
+ //else if (bl->type == BL_MER) // FIXME: What should go here?
+ // str = dstr + BL_UCCAST(BL_MER, bl)->level;
#else
+ if (bl->type == BL_PC)
str += dex / 5 + st->luk / 5;
#endif
return cap_value(str, 0, USHRT_MAX);
@@ -4249,7 +4291,7 @@ unsigned short status_base_matk(struct block_list *bl, const struct status_data
case BL_MOB:
return st->int_ + level;
case BL_HOM:
- return status_get_homint(bl) + level;
+ return status_get_homint(st, BL_UCCAST(BL_HOM, bl)) + level;
case BL_MER:
return st->int_ + st->int_ / 5 * st->int_ / 5;
case BL_PC:
@@ -4272,14 +4314,15 @@ void status_calc_misc(struct block_list *bl, struct status_data *st, int level)
#ifdef RENEWAL // renewal formulas
if ( bl->type == BL_HOM ) {
- st->def2 = status_get_homvit(bl) + status_get_homagi(bl) / 2;
- st->mdef2 = (status_get_homvit(bl) + status_get_homint(bl)) / 2;
- st->def += status_get_homvit(bl) + level / 2; // Increase. Already initialized in status_calc_homunculus_
- st->mdef = (int)(((float)status_get_homvit(bl) + level) / 4 + (float)status_get_homint(bl) / 2);
+ const struct homun_data *hd = BL_UCCAST(BL_HOM, bl);
+ st->def2 = status_get_homvit(st, hd) + status_get_homagi(st, hd) / 2;
+ st->mdef2 = (status_get_homvit(st, hd) + status_get_homint(st, hd)) / 2;
+ st->def += status_get_homvit(st, hd) + level / 2; // Increase. Already initialized in status_calc_homunculus_
+ st->mdef = (int)(((float)status_get_homvit(st, hd) + level) / 4 + (float)status_get_homint(st, hd) / 2);
st->hit = level + st->dex + 150;
- st->flee = level + status_get_homagi(bl);
- st->rhw.atk = (status_get_homstr(bl) + status_get_homdex(bl)) / 5;
- st->rhw.atk2 = (status_get_homluk(bl) + status_get_homstr(bl) + status_get_homdex(bl)) / 3;
+ st->flee = level + status_get_homagi(st, hd);
+ st->rhw.atk = (status_get_homstr(st, hd) + status_get_homdex(st, hd)) / 5;
+ st->rhw.atk2 = (status_get_homluk(st, hd) + status_get_homstr(st, hd) + status_get_homdex(st, hd)) / 3;
} else {
st->hit += level + st->dex + (bl->type == BL_PC ? st->luk / 3 + 175 : 150); //base level + ( every 1 dex = +1 hit ) + (every 3 luk = +1 hit) + 175
st->flee += level + st->agi + (bl->type == BL_MER ? 0: (bl->type == BL_PC ? st->luk / 5 : 0) + 100); //base level + ( every 1 agi = +1 flee ) + (every 5 luk = +1 flee) + 100
@@ -4833,10 +4876,10 @@ unsigned short status_calc_watk(struct block_list *bl, struct status_change *sc,
#ifndef RENEWAL
if(sc->data[SC_NIBELUNGEN]) {
- if (bl->type != BL_PC)
+ if (bl->type != BL_PC) {
watk += sc->data[SC_NIBELUNGEN]->val2;
- else {
- TBL_PC *sd = (TBL_PC*)bl;
+ } else {
+ const struct map_session_data *sd = BL_UCCAST(BL_PC, bl);
int index = sd->equip_index[sd->state.lr_flag?EQI_HAND_L:EQI_HAND_R];
if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->wlv == 4)
watk += sc->data[SC_NIBELUNGEN]->val2;
@@ -4952,7 +4995,7 @@ unsigned short status_calc_matk(struct block_list *bl, struct status_change *sc,
if (sc->data[SC_MOONLIT_SERENADE])
matk += matk * sc->data[SC_MOONLIT_SERENADE]->val2 / 100;
if (sc->data[SC_MTF_MATK])
- matk += matk * sc->data[SC_MTF_MATK]->val1 / 100;
+ matk += sc->data[SC_MTF_MATK]->val1;
if (sc->data[SC_MYSTICSCROLL])
matk += matk * sc->data[SC_MYSTICSCROLL]->val1 / 100;
@@ -5469,7 +5512,7 @@ signed short status_calc_mdef2(struct block_list *bl, struct status_change *sc,
unsigned short status_calc_speed(struct block_list *bl, struct status_change *sc, int speed)
{
- TBL_PC* sd = BL_CAST(BL_PC, bl);
+ struct map_session_data *sd = BL_CAST(BL_PC, bl);
int speed_rate;
if( sc == NULL || ( sd && sd->state.permanent_speed ) )
@@ -5698,11 +5741,10 @@ short status_calc_aspd(struct block_list *bl, struct status_change *sc, short fl
}
if (sc->data[SC_ASSNCROS] && bonus < sc->data[SC_ASSNCROS]->val2) {
- if (bl->type!=BL_PC)
+ if (bl->type != BL_PC) {
bonus = sc->data[SC_ASSNCROS]->val2;
- else {
- switch (((TBL_PC*)bl)->status.weapon)
- {
+ } else {
+ switch (BL_UCCAST(BL_PC, bl)->status.weapon) {
case W_BOW:
case W_REVOLVER:
case W_RIFLE:
@@ -5798,11 +5840,10 @@ short status_calc_fix_aspd(struct block_list *bl, struct status_change *sc, int
if (!sc || !sc->count)
return cap_value(aspd, 0, 2000);
- if ((sc->data[SC_GUST_OPTION] || sc->data[SC_BLAST_OPTION]
- || sc->data[SC_WILD_STORM_OPTION]))
+ if (sc->data[SC_GUST_OPTION] != NULL || sc->data[SC_BLAST_OPTION] != NULL || sc->data[SC_WILD_STORM_OPTION] != NULL)
aspd -= 50; // +5 ASPD
- if (sc->data[SC_FIGHTINGSPIRIT] && sc->data[SC_FIGHTINGSPIRIT]->val2)
- aspd -= (bl->type==BL_PC?pc->checkskill((TBL_PC *)bl, RK_RUNEMASTERY):10) / 10 * 40;
+ if (sc->data[SC_FIGHTINGSPIRIT] != NULL && sc->data[SC_FIGHTINGSPIRIT]->val2 != 0)
+ aspd -= (bl->type == BL_PC ? pc->checkskill(BL_UCAST(BL_PC, bl), RK_RUNEMASTERY) : 10) / 10 * 40;
if (sc->data[SC_MTF_ASPD])
aspd -= sc->data[SC_MTF_ASPD]->val1;
@@ -5857,14 +5898,11 @@ short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int
max < sc->data[SC_HLIF_FLEET]->val2)
max = sc->data[SC_HLIF_FLEET]->val2;
- if(sc->data[SC_ASSNCROS] &&
- max < sc->data[SC_ASSNCROS]->val2)
- {
- if (bl->type!=BL_PC)
+ if (sc->data[SC_ASSNCROS] && max < sc->data[SC_ASSNCROS]->val2) {
+ if (bl->type != BL_PC) {
max = sc->data[SC_ASSNCROS]->val2;
- else
- switch(((TBL_PC*)bl)->status.weapon)
- {
+ } else {
+ switch (BL_UCCAST(BL_PC, bl)->status.weapon) {
case W_BOW:
case W_REVOLVER:
case W_RIFLE:
@@ -5874,6 +5912,7 @@ short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int
break;
default:
max = sc->data[SC_ASSNCROS]->val2;
+ }
}
}
@@ -5957,9 +5996,10 @@ short status_calc_aspd_rate(struct block_list *bl, struct status_change *sc, int
return (short)cap_value(aspd_rate,0,SHRT_MAX);
}
-unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion) {
+unsigned short status_calc_dmotion(struct block_list *bl, struct status_change *sc, int dmotion)
+{
// It has been confirmed on official servers that MvP mobs have no dmotion even without endure
- if( bl->type == BL_MOB && (((TBL_MOB*)bl)->status.mode&MD_BOSS) )
+ if (bl->type == BL_MOB && (BL_UCCAST(BL_MOB, bl)->status.mode&MD_BOSS))
return 0;
if( !sc || !sc->count || map_flag_gvg2(bl->m) || map->list[bl->m].flag.battleground )
@@ -6183,14 +6223,21 @@ unsigned short status_calc_mode(struct block_list *bl, struct status_change *sc,
return cap_value(mode,0,USHRT_MAX);
}
-const char* status_get_name(struct block_list *bl) {
+const char *status_get_name(struct block_list *bl)
+{
nullpo_ret(bl);
switch (bl->type) {
- case BL_PC: return ((TBL_PC *)bl)->fakename[0] != '\0' ? ((TBL_PC*)bl)->fakename : ((TBL_PC*)bl)->status.name;
- case BL_MOB: return ((TBL_MOB*)bl)->name;
- case BL_PET: return ((TBL_PET*)bl)->pet.name;
- case BL_HOM: return ((TBL_HOM*)bl)->homunculus.name;
- case BL_NPC: return ((TBL_NPC*)bl)->name;
+ case BL_PC:
+ {
+ const struct map_session_data *sd = BL_UCCAST(BL_PC, bl);
+ if (sd->fakename[0] != '\0')
+ return sd->fakename;
+ return sd->status.name;
+ }
+ case BL_MOB: return BL_UCCAST(BL_MOB, bl)->name;
+ case BL_PET: return BL_UCCAST(BL_PET, bl)->pet.name;
+ case BL_HOM: return BL_UCCAST(BL_HOM, bl)->homunculus.name;
+ case BL_NPC: return BL_UCCAST(BL_NPC, bl)->name;
}
return "Unknown";
}
@@ -6201,16 +6248,17 @@ const char* status_get_name(struct block_list *bl) {
* 0 = fail
* class_id = success
*------------------------------------------*/
-int status_get_class(struct block_list *bl) {
+int status_get_class(struct block_list *bl)
+{
nullpo_ret(bl);
- switch( bl->type ) {
- case BL_PC: return ((TBL_PC*)bl)->status.class_;
- case BL_MOB: return ((TBL_MOB*)bl)->vd->class_; //Class used on all code should be the view class of the mob.
- case BL_PET: return ((TBL_PET*)bl)->pet.class_;
- case BL_HOM: return ((TBL_HOM*)bl)->homunculus.class_;
- case BL_MER: return ((TBL_MER*)bl)->mercenary.class_;
- case BL_NPC: return ((TBL_NPC*)bl)->class_;
- case BL_ELEM: return ((TBL_ELEM*)bl)->elemental.class_;
+ switch (bl->type) {
+ case BL_PC: return BL_UCCAST(BL_PC, bl)->status.class_;
+ case BL_MOB: return BL_UCCAST(BL_MOB, bl)->vd->class_; //Class used on all code should be the view class of the mob.
+ case BL_PET: return BL_UCCAST(BL_PET, bl)->pet.class_;
+ case BL_HOM: return BL_UCCAST(BL_HOM, bl)->homunculus.class_;
+ case BL_MER: return BL_UCCAST(BL_MER, bl)->mercenary.class_;
+ case BL_NPC: return BL_UCCAST(BL_NPC, bl)->class_;
+ case BL_ELEM: return BL_UCCAST(BL_ELEM, bl)->elemental.class_;
}
return 0;
}
@@ -6220,16 +6268,17 @@ int status_get_class(struct block_list *bl) {
* 1 = fail
* level = success
*------------------------------------------*/
-int status_get_lv(struct block_list *bl) {
+int status_get_lv(struct block_list *bl)
+{
nullpo_ret(bl);
switch (bl->type) {
- case BL_PC: return ((TBL_PC*)bl)->status.base_level;
- case BL_MOB: return ((TBL_MOB*)bl)->level;
- case BL_PET: return ((TBL_PET*)bl)->pet.level;
- case BL_HOM: return ((TBL_HOM*)bl)->homunculus.level;
- case BL_MER: return ((TBL_MER*)bl)->db->lv;
- case BL_ELEM: return ((TBL_ELEM*)bl)->db->lv;
- case BL_NPC: return ((TBL_NPC*)bl)->level;
+ case BL_PC: return BL_UCCAST(BL_PC, bl)->status.base_level;
+ case BL_MOB: return BL_UCCAST(BL_MOB, bl)->level;
+ case BL_PET: return BL_UCCAST(BL_PET, bl)->pet.level;
+ case BL_HOM: return BL_UCCAST(BL_HOM, bl)->homunculus.level;
+ case BL_MER: return BL_UCCAST(BL_MER, bl)->db->lv;
+ case BL_ELEM: return BL_UCCAST(BL_ELEM, bl)->db->lv;
+ case BL_NPC: return BL_UCCAST(BL_NPC, bl)->level;
}
return 1;
}
@@ -6238,10 +6287,10 @@ struct regen_data *status_get_regen_data(struct block_list *bl)
{
nullpo_retr(NULL, bl);
switch (bl->type) {
- case BL_PC: return &((TBL_PC*)bl)->regen;
- case BL_HOM: return &((TBL_HOM*)bl)->regen;
- case BL_MER: return &((TBL_MER*)bl)->regen;
- case BL_ELEM: return &((TBL_ELEM*)bl)->regen;
+ case BL_PC: return &BL_UCAST(BL_PC, bl)->regen;
+ case BL_HOM: return &BL_UCAST(BL_HOM, bl)->regen;
+ case BL_MER: return &BL_UCAST(BL_MER, bl)->regen;
+ case BL_ELEM: return &BL_UCAST(BL_ELEM, bl)->regen;
default:
return NULL;
}
@@ -6252,13 +6301,17 @@ struct status_data *status_get_status_data(struct block_list *bl)
nullpo_retr(&status->dummy, bl);
switch (bl->type) {
- case BL_PC: return &((TBL_PC*)bl)->battle_status;
- case BL_MOB: return &((TBL_MOB*)bl)->status;
- case BL_PET: return &((TBL_PET*)bl)->status;
- case BL_HOM: return &((TBL_HOM*)bl)->battle_status;
- case BL_MER: return &((TBL_MER*)bl)->battle_status;
- case BL_ELEM: return &((TBL_ELEM*)bl)->battle_status;
- case BL_NPC: return ((mob->db_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : &status->dummy);
+ case BL_PC: return &BL_UCAST(BL_PC, bl)->battle_status;
+ case BL_MOB: return &BL_UCAST(BL_MOB, bl)->status;
+ case BL_PET: return &BL_UCAST(BL_PET, bl)->status;
+ case BL_HOM: return &BL_UCAST(BL_HOM, bl)->battle_status;
+ case BL_MER: return &BL_UCAST(BL_MER, bl)->battle_status;
+ case BL_ELEM: return &BL_UCAST(BL_ELEM, bl)->battle_status;
+ case BL_NPC:
+ {
+ struct npc_data *nd = BL_UCAST(BL_NPC, bl);
+ return mob->db_checkid(nd->class_) == 0 ? &nd->status : &status->dummy;
+ }
default:
return &status->dummy;
}
@@ -6268,13 +6321,21 @@ struct status_data *status_get_base_status(struct block_list *bl)
{
nullpo_retr(NULL, bl);
switch (bl->type) {
- case BL_PC: return &((TBL_PC*)bl)->base_status;
- case BL_MOB: return ((TBL_MOB*)bl)->base_status ? ((TBL_MOB*)bl)->base_status : &((TBL_MOB*)bl)->db->status;
- case BL_PET: return &((TBL_PET*)bl)->db->status;
- case BL_HOM: return &((TBL_HOM*)bl)->base_status;
- case BL_MER: return &((TBL_MER*)bl)->base_status;
- case BL_ELEM: return &((TBL_ELEM*)bl)->base_status;
- case BL_NPC: return ((mob->db_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : NULL);
+ case BL_PC: return &BL_UCAST(BL_PC, bl)->base_status;
+ case BL_MOB:
+ {
+ struct mob_data *md = BL_UCAST(BL_MOB, bl);
+ return md->base_status ? md->base_status : &md->db->status;
+ }
+ case BL_PET: return &BL_UCAST(BL_PET, bl)->db->status;
+ case BL_HOM: return &BL_UCAST(BL_HOM, bl)->base_status;
+ case BL_MER: return &BL_UCAST(BL_MER, bl)->base_status;
+ case BL_ELEM: return &BL_UCAST(BL_ELEM, bl)->base_status;
+ case BL_NPC:
+ {
+ struct npc_data *nd = BL_UCAST(BL_NPC, bl);
+ return mob->db_checkid(nd->class_) == 0 ? &nd->status : NULL;
+ }
default:
return NULL;
}
@@ -6290,9 +6351,10 @@ defType status_get_def(struct block_list *bl) {
return cap_value(def, DEFTYPE_MIN, DEFTYPE_MAX);
}
-unsigned short status_get_speed(struct block_list *bl) {
- if(bl->type==BL_NPC)//Only BL with speed data but no status_data [Skotlex]
- return ((struct npc_data *)bl)->speed;
+unsigned short status_get_speed(struct block_list *bl)
+{
+ if (bl->type == BL_NPC) //Only BL with speed data but no status_data [Skotlex]
+ return BL_UCCAST(BL_NPC, bl)->speed;
return status->get_status_data(bl)->speed;
}
@@ -6300,81 +6362,118 @@ int status_get_party_id(struct block_list *bl) {
nullpo_ret(bl);
switch (bl->type) {
case BL_PC:
- return ((TBL_PC*)bl)->status.party_id;
+ return BL_UCCAST(BL_PC, bl)->status.party_id;
case BL_PET:
- if (((TBL_PET*)bl)->msd)
- return ((TBL_PET*)bl)->msd->status.party_id;
+ {
+ const struct pet_data *pd = BL_UCCAST(BL_PET, bl);
+ if (pd->msd != NULL)
+ return pd->msd->status.party_id;
+ }
break;
- case BL_MOB: {
- struct mob_data *md=(TBL_MOB*)bl;
- if( md->master_id > 0 ) {
- struct map_session_data *msd;
+ case BL_MOB:
+ {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
+ if (md->master_id > 0) {
+ const struct map_session_data *msd = NULL;
if (md->special_state.ai != AI_NONE && (msd = map->id2sd(md->master_id)) != NULL)
return msd->status.party_id;
return -md->master_id;
}
- }
- break;
+ }
+ break;
case BL_HOM:
- if (((TBL_HOM*)bl)->master)
- return ((TBL_HOM*)bl)->master->status.party_id;
+ {
+ const struct homun_data *hd = BL_UCCAST(BL_HOM, bl);
+ if (hd->master != NULL)
+ return hd->master->status.party_id;
+ }
break;
case BL_MER:
- if (((TBL_MER*)bl)->master)
- return ((TBL_MER*)bl)->master->status.party_id;
+ {
+ const struct mercenary_data *mc = BL_UCCAST(BL_MER, bl);
+ if (mc->master != NULL)
+ return mc->master->status.party_id;
+ }
break;
case BL_SKILL:
- if (((TBL_SKILL*)bl)->group)
- return ((TBL_SKILL*)bl)->group->party_id;
+ {
+ const struct skill_unit *su = BL_UCCAST(BL_SKILL, bl);
+ if (su->group != NULL)
+ return su->group->party_id;
+ }
break;
case BL_ELEM:
- if (((TBL_ELEM*)bl)->master)
- return ((TBL_ELEM*)bl)->master->status.party_id;
+ {
+ const struct elemental_data *ed = BL_UCCAST(BL_ELEM, bl);
+ if (ed->master != NULL)
+ return ed->master->status.party_id;
+ }
break;
}
return 0;
}
-int status_get_guild_id(struct block_list *bl) {
+int status_get_guild_id(struct block_list *bl)
+{
nullpo_ret(bl);
switch (bl->type) {
case BL_PC:
- return ((TBL_PC*)bl)->status.guild_id;
+ return BL_UCCAST(BL_PC, bl)->status.guild_id;
case BL_PET:
- if (((TBL_PET*)bl)->msd)
- return ((TBL_PET*)bl)->msd->status.guild_id;
+ {
+ const struct pet_data *pd = BL_UCCAST(BL_PET, bl);
+ if (pd->msd != NULL)
+ return pd->msd->status.guild_id;
+ }
break;
case BL_MOB:
{
- struct map_session_data *msd;
- struct mob_data *md = (struct mob_data *)bl;
- if( md->guardian_data ) { //Guardian's guild [Skotlex]
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
+ const struct map_session_data *msd = NULL;
+ if (md->guardian_data != NULL) { //Guardian's guild [Skotlex]
// Guardian guild data may not been available yet, castle data is always set
- return (md->guardian_data->g)?md->guardian_data->g->guild_id:md->guardian_data->castle->guild_id;
+ if (md->guardian_data->g != NULL)
+ return md->guardian_data->g->guild_id;
+ return md->guardian_data->castle->guild_id;
}
if (md->special_state.ai != AI_NONE && (msd = map->id2sd(md->master_id)) != NULL)
return msd->status.guild_id; //Alchemist's mobs [Skotlex]
break;
}
case BL_HOM:
- if (((TBL_HOM*)bl)->master)
- return ((TBL_HOM*)bl)->master->status.guild_id;
+ {
+ const struct homun_data *hd = BL_UCCAST(BL_HOM, bl);
+ if (hd->master != NULL)
+ return hd->master->status.guild_id;
+ }
break;
case BL_MER:
- if (((TBL_MER*)bl)->master)
- return ((TBL_MER*)bl)->master->status.guild_id;
+ {
+ const struct mercenary_data *mc = BL_UCCAST(BL_MER, bl);
+ if (mc->master != NULL)
+ return mc->master->status.guild_id;
+ }
break;
case BL_NPC:
- if (((TBL_NPC*)bl)->subtype == SCRIPT)
- return ((TBL_NPC*)bl)->u.scr.guild_id;
+ {
+ const struct npc_data *nd = BL_UCCAST(BL_NPC, bl);
+ if (nd->subtype == SCRIPT)
+ return nd->u.scr.guild_id;
+ }
break;
case BL_SKILL:
- if (((TBL_SKILL*)bl)->group)
- return ((TBL_SKILL*)bl)->group->guild_id;
+ {
+ const struct skill_unit *su = BL_UCCAST(BL_SKILL, bl);
+ if (su->group != NULL)
+ return su->group->guild_id;
+ }
break;
case BL_ELEM:
- if (((TBL_ELEM*)bl)->master)
- return ((TBL_ELEM*)bl)->master->status.guild_id;
+ {
+ const struct elemental_data *ed = BL_UCCAST(BL_ELEM, bl);
+ if (ed->master != NULL)
+ return ed->master->status.guild_id;
+ }
break;
}
return 0;
@@ -6384,38 +6483,58 @@ int status_get_emblem_id(struct block_list *bl) {
nullpo_ret(bl);
switch (bl->type) {
case BL_PC:
- return ((TBL_PC*)bl)->guild_emblem_id;
+ return BL_UCCAST(BL_PC, bl)->guild_emblem_id;
case BL_PET:
- if (((TBL_PET*)bl)->msd)
- return ((TBL_PET*)bl)->msd->guild_emblem_id;
+ {
+ const struct pet_data *pd = BL_UCCAST(BL_PET, bl);
+ if (pd->msd != NULL)
+ return pd->msd->guild_emblem_id;
+ }
break;
- case BL_MOB: {
- struct map_session_data *msd;
- struct mob_data *md = (struct mob_data *)bl;
- if (md->guardian_data) //Guardian's guild [Skotlex]
- return (md->guardian_data->g) ? md->guardian_data->g->emblem_id:0;
+ case BL_MOB:
+ {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
+ const struct map_session_data *msd = NULL;
+ if (md->guardian_data != NULL) {
+ //Guardian's guild [Skotlex]
+ if (md->guardian_data->g != NULL)
+ return md->guardian_data->g->emblem_id;
+ return 0;
+ }
if (md->special_state.ai != AI_NONE && (msd = map->id2sd(md->master_id)) != NULL)
return msd->guild_emblem_id; //Alchemist's mobs [Skotlex]
- }
- break;
+ }
+ break;
case BL_HOM:
- if (((TBL_HOM*)bl)->master)
- return ((TBL_HOM*)bl)->master->guild_emblem_id;
+ {
+ const struct homun_data *hd = BL_UCCAST(BL_HOM, bl);
+ if (hd->master)
+ return hd->master->guild_emblem_id;
+ }
break;
case BL_MER:
- if (((TBL_MER*)bl)->master)
- return ((TBL_MER*)bl)->master->guild_emblem_id;
+ {
+ const struct mercenary_data *mc = BL_UCCAST(BL_MER, bl);
+ if (mc->master)
+ return mc->master->guild_emblem_id;
+ }
break;
case BL_NPC:
- if (((TBL_NPC*)bl)->subtype == SCRIPT && ((TBL_NPC*)bl)->u.scr.guild_id > 0) {
- struct guild *g = guild->search(((TBL_NPC*)bl)->u.scr.guild_id);
- if (g)
+ {
+ const struct npc_data *nd = BL_UCCAST(BL_NPC, bl);
+ if (nd->subtype == SCRIPT && nd->u.scr.guild_id > 0) {
+ struct guild *g = guild->search(nd->u.scr.guild_id);
+ if (g != NULL)
return g->emblem_id;
}
+ }
break;
case BL_ELEM:
- if (((TBL_ELEM*)bl)->master)
- return ((TBL_ELEM*)bl)->master->guild_emblem_id;
+ {
+ const struct elemental_data *ed = BL_UCCAST(BL_ELEM, bl);
+ if (ed->master)
+ return ed->master->guild_emblem_id;
+ }
break;
}
return 0;
@@ -6424,19 +6543,20 @@ int status_get_emblem_id(struct block_list *bl) {
int status_get_mexp(struct block_list *bl)
{
nullpo_ret(bl);
- if(bl->type==BL_MOB)
- return ((struct mob_data *)bl)->db->mexp;
- if(bl->type==BL_PET)
- return ((struct pet_data *)bl)->db->mexp;
+ if (bl->type == BL_MOB)
+ return BL_UCCAST(BL_MOB, bl)->db->mexp;
+ if (bl->type == BL_PET)
+ return BL_UCCAST(BL_PET, bl)->db->mexp;
return 0;
}
+
int status_get_race2(struct block_list *bl)
{
nullpo_ret(bl);
- if(bl->type == BL_MOB)
- return ((struct mob_data *)bl)->db->race2;
- if(bl->type==BL_PET)
- return ((struct pet_data *)bl)->db->race2;
+ if (bl->type == BL_MOB)
+ return BL_UCCAST(BL_MOB, bl)->db->race2;
+ if (bl->type == BL_PET)
+ return BL_UCCAST(BL_PET, bl)->db->race2;
return 0;
}
@@ -6445,28 +6565,34 @@ int status_isdead(struct block_list *bl) {
return status->get_status_data(bl)->hp == 0;
}
-int status_isimmune(struct block_list *bl) {
- struct status_change *sc = status->get_sc(bl);
- if (sc && sc->data[SC_HERMODE])
+int status_isimmune(struct block_list *bl)
+{
+ struct status_change *sc = NULL;
+ nullpo_ret(bl);
+ sc = status->get_sc(bl);
+
+ if (sc != NULL && sc->data[SC_HERMODE] != NULL)
return 100;
- if (bl->type == BL_PC &&
- ((TBL_PC*)bl)->special_state.no_magic_damage >= battle_config.gtb_sc_immunity)
- return ((TBL_PC*)bl)->special_state.no_magic_damage;
+ if (bl->type == BL_PC) {
+ const struct map_session_data *sd = BL_UCCAST(BL_PC, bl);
+ if (sd->special_state.no_magic_damage >= battle_config.gtb_sc_immunity)
+ return sd->special_state.no_magic_damage;
+ }
return 0;
}
-struct view_data* status_get_viewdata(struct block_list *bl)
+struct view_data *status_get_viewdata(struct block_list *bl)
{
nullpo_retr(NULL, bl);
switch (bl->type) {
- case BL_PC: return &((TBL_PC*)bl)->vd;
- case BL_MOB: return ((TBL_MOB*)bl)->vd;
- case BL_PET: return &((TBL_PET*)bl)->vd;
- case BL_NPC: return ((TBL_NPC*)bl)->vd;
- case BL_HOM: return ((TBL_HOM*)bl)->vd;
- case BL_MER: return ((TBL_MER*)bl)->vd;
- case BL_ELEM: return ((TBL_ELEM*)bl)->vd;
+ case BL_PC: return &BL_UCAST(BL_PC, bl)->vd;
+ case BL_MOB: return BL_UCAST(BL_MOB, bl)->vd;
+ case BL_PET: return &BL_UCAST(BL_PET, bl)->vd;
+ case BL_NPC: return BL_UCAST(BL_NPC, bl)->vd;
+ case BL_HOM: return BL_UCAST(BL_HOM, bl)->vd;
+ case BL_MER: return BL_UCAST(BL_MER, bl)->vd;
+ case BL_ELEM: return BL_UCAST(BL_ELEM, bl)->vd;
}
return NULL;
}
@@ -6490,136 +6616,147 @@ void status_set_viewdata(struct block_list *bl, int class_)
switch (bl->type) {
case BL_PC:
- {
- TBL_PC* sd = (TBL_PC*)bl;
- if (pc->db_checkid(class_)) {
- if (pc_isridingpeco(sd)) {
- switch (class_) {
- //Adapt class to a Mounted one.
- case JOB_KNIGHT:
- class_ = JOB_KNIGHT2;
- break;
- case JOB_CRUSADER:
- class_ = JOB_CRUSADER2;
- break;
- case JOB_LORD_KNIGHT:
- class_ = JOB_LORD_KNIGHT2;
- break;
- case JOB_PALADIN:
- class_ = JOB_PALADIN2;
- break;
- case JOB_BABY_KNIGHT:
- class_ = JOB_BABY_KNIGHT2;
- break;
- case JOB_BABY_CRUSADER:
- class_ = JOB_BABY_CRUSADER2;
- break;
- }
- }
- sd->vd.class_ = class_;
- clif->get_weapon_view(sd, &sd->vd.weapon, &sd->vd.shield);
- sd->vd.head_top = sd->status.head_top;
- sd->vd.head_mid = sd->status.head_mid;
- sd->vd.head_bottom = sd->status.head_bottom;
- sd->vd.hair_style = cap_value(sd->status.hair,0,battle_config.max_hair_style);
- sd->vd.hair_color = cap_value(sd->status.hair_color,0,battle_config.max_hair_color);
- sd->vd.cloth_color = cap_value(sd->status.clothes_color,0,battle_config.max_cloth_color);
- sd->vd.robe = sd->status.robe;
- sd->vd.sex = sd->status.sex;
-
- if ( sd->vd.cloth_color ) {
- if( sd->sc.option&OPTION_WEDDING && battle_config.wedding_ignorepalette )
- sd->vd.cloth_color = 0;
- if( sd->sc.option&OPTION_XMAS && battle_config.xmas_ignorepalette )
- sd->vd.cloth_color = 0;
- if( sd->sc.option&OPTION_SUMMER && battle_config.summer_ignorepalette )
- sd->vd.cloth_color = 0;
- if( sd->sc.option&OPTION_HANBOK && battle_config.hanbok_ignorepalette )
- sd->vd.cloth_color = 0;
- if( sd->sc.option&OPTION_OKTOBERFEST /* TODO: config? */ )
- sd->vd.cloth_color = 0;
+ {
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
+ if (pc->db_checkid(class_)) {
+ if (pc_isridingpeco(sd)) {
+ switch (class_) {
+ //Adapt class to a Mounted one.
+ case JOB_KNIGHT:
+ class_ = JOB_KNIGHT2;
+ break;
+ case JOB_CRUSADER:
+ class_ = JOB_CRUSADER2;
+ break;
+ case JOB_LORD_KNIGHT:
+ class_ = JOB_LORD_KNIGHT2;
+ break;
+ case JOB_PALADIN:
+ class_ = JOB_PALADIN2;
+ break;
+ case JOB_BABY_KNIGHT:
+ class_ = JOB_BABY_KNIGHT2;
+ break;
+ case JOB_BABY_CRUSADER:
+ class_ = JOB_BABY_CRUSADER2;
+ break;
}
- } else if (vd)
- memcpy(&sd->vd, vd, sizeof(struct view_data));
- else
- ShowError("status_set_viewdata (PC): No view data for class %d\n", class_);
+ }
+ sd->vd.class_ = class_;
+ clif->get_weapon_view(sd, &sd->vd.weapon, &sd->vd.shield);
+ sd->vd.head_top = sd->status.head_top;
+ sd->vd.head_mid = sd->status.head_mid;
+ sd->vd.head_bottom = sd->status.head_bottom;
+ sd->vd.hair_style = cap_value(sd->status.hair,0,battle_config.max_hair_style);
+ sd->vd.hair_color = cap_value(sd->status.hair_color,0,battle_config.max_hair_color);
+ sd->vd.cloth_color = cap_value(sd->status.clothes_color,0,battle_config.max_cloth_color);
+ sd->vd.robe = sd->status.robe;
+ sd->vd.body_style = sd->status.body;
+ sd->vd.sex = sd->status.sex;
+
+ if (sd->vd.cloth_color) {
+ if (sd->sc.option&OPTION_WEDDING && battle_config.wedding_ignorepalette)
+ sd->vd.cloth_color = 0;
+ if (sd->sc.option&OPTION_XMAS && battle_config.xmas_ignorepalette)
+ sd->vd.cloth_color = 0;
+ if (sd->sc.option&OPTION_SUMMER && battle_config.summer_ignorepalette)
+ sd->vd.cloth_color = 0;
+ if (sd->sc.option&OPTION_HANBOK && battle_config.hanbok_ignorepalette)
+ sd->vd.cloth_color = 0;
+ if (sd->sc.option&OPTION_OKTOBERFEST /* TODO: config? */)
+ sd->vd.cloth_color = 0;
+ }
+ if (sd->vd.body_style
+ && (sd->sc.option&OPTION_WEDDING
+ || sd->sc.option&OPTION_XMAS
+ || sd->sc.option&OPTION_SUMMER
+ || sd->sc.option&OPTION_HANBOK
+ || sd->sc.option&OPTION_OKTOBERFEST))
+ sd->vd.body_style = 0;
+ } else if (vd != NULL) {
+ memcpy(&sd->vd, vd, sizeof(struct view_data));
+ } else {
+ ShowError("status_set_viewdata (PC): No view data for class %d\n", class_);
}
+ }
break;
case BL_MOB:
- {
- TBL_MOB* md = (TBL_MOB*)bl;
- if (vd)
- md->vd = vd;
- else
- ShowError("status_set_viewdata (MOB): No view data for class %d\n", class_);
- }
+ {
+ struct mob_data *md = BL_UCAST(BL_MOB, bl);
+ if (vd != NULL)
+ md->vd = vd;
+ else
+ ShowError("status_set_viewdata (MOB): No view data for class %d\n", class_);
+ }
break;
case BL_PET:
- {
- TBL_PET* pd = (TBL_PET*)bl;
- if (vd) {
- memcpy(&pd->vd, vd, sizeof(struct view_data));
- if (!pc->db_checkid(vd->class_)) {
- pd->vd.hair_style = battle_config.pet_hair_style;
- if(pd->pet.equip) {
- pd->vd.head_bottom = itemdb_viewid(pd->pet.equip);
- if (!pd->vd.head_bottom)
- pd->vd.head_bottom = pd->pet.equip;
- }
+ {
+ struct pet_data *pd = BL_UCAST(BL_PET, bl);
+ if (vd != NULL) {
+ memcpy(&pd->vd, vd, sizeof(struct view_data));
+ if (!pc->db_checkid(vd->class_)) {
+ pd->vd.hair_style = battle_config.pet_hair_style;
+ if(pd->pet.equip) {
+ pd->vd.head_bottom = itemdb_viewid(pd->pet.equip);
+ if (!pd->vd.head_bottom)
+ pd->vd.head_bottom = pd->pet.equip;
}
- } else
- ShowError("status_set_viewdata (PET): No view data for class %d\n", class_);
+ }
+ } else {
+ ShowError("status_set_viewdata (PET): No view data for class %d\n", class_);
}
+ }
break;
case BL_NPC:
- {
- TBL_NPC* nd = (TBL_NPC*)bl;
- if (vd)
- nd->vd = vd;
- else
- ShowError("status_set_viewdata (NPC): No view data for class %d (name=%s)\n", class_, nd->name);
- }
+ {
+ struct npc_data *nd = BL_UCAST(BL_NPC, bl);
+ if (vd != NULL)
+ nd->vd = vd;
+ else
+ ShowError("status_set_viewdata (NPC): No view data for class %d (name=%s)\n", class_, nd->name);
+ }
break;
case BL_HOM: //[blackhole89]
- {
- struct homun_data *hd = (struct homun_data*)bl;
- if (vd)
- hd->vd = vd;
- else
- ShowError("status_set_viewdata (HOMUNCULUS): No view data for class %d\n", class_);
- }
+ {
+ struct homun_data *hd = BL_UCAST(BL_HOM, bl);
+ if (vd != NULL)
+ hd->vd = vd;
+ else
+ ShowError("status_set_viewdata (HOMUNCULUS): No view data for class %d\n", class_);
+ }
break;
case BL_MER:
- {
- struct mercenary_data *md = (struct mercenary_data*)bl;
- if (vd)
- md->vd = vd;
- else
- ShowError("status_set_viewdata (MERCENARY): No view data for class %d\n", class_);
- }
+ {
+ struct mercenary_data *md = BL_UCAST(BL_MER, bl);
+ if (vd != NULL)
+ md->vd = vd;
+ else
+ ShowError("status_set_viewdata (MERCENARY): No view data for class %d\n", class_);
+ }
break;
case BL_ELEM:
- {
- struct elemental_data *ed = (struct elemental_data*)bl;
- if (vd)
- ed->vd = vd;
- else
- ShowError("status_set_viewdata (ELEMENTAL): No view data for class %d\n", class_);
- }
+ {
+ struct elemental_data *ed = BL_UCAST(BL_ELEM, bl);
+ if (vd != NULL)
+ ed->vd = vd;
+ else
+ ShowError("status_set_viewdata (ELEMENTAL): No view data for class %d\n", class_);
+ }
break;
}
}
/// Returns the status_change data of bl or NULL if it doesn't exist.
-struct status_change *status_get_sc(struct block_list *bl) {
- if( bl ) {
+struct status_change *status_get_sc(struct block_list *bl)
+{
+ if (bl != NULL) {
switch (bl->type) {
- case BL_PC: return &((TBL_PC*)bl)->sc;
- case BL_MOB: return &((TBL_MOB*)bl)->sc;
+ case BL_PC: return &BL_UCAST(BL_PC, bl)->sc;
+ case BL_MOB: return &BL_UCAST(BL_MOB, bl)->sc;
case BL_NPC: return NULL;
- case BL_HOM: return &((TBL_HOM*)bl)->sc;
- case BL_MER: return &((TBL_MER*)bl)->sc;
- case BL_ELEM: return &((TBL_ELEM*)bl)->sc;
+ case BL_HOM: return &BL_UCAST(BL_HOM, bl)->sc;
+ case BL_MER: return &BL_UCAST(BL_MER, bl)->sc;
+ case BL_ELEM: return &BL_UCAST(BL_ELEM, bl)->sc;
}
}
return NULL;
@@ -6870,13 +7007,13 @@ int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_typ
sc_def = (st->vit + st->luk)*20;
break;
case SC_SIREN:
- tick_def2 = (status->get_lv(bl) * 100) + ((bl->type == BL_PC)?((TBL_PC*)bl)->status.job_level : 0);
+ tick_def2 = status->get_lv(bl) * 100 + (bl->type == BL_PC ? BL_UCCAST(BL_PC, bl)->status.job_level : 0);
break;
case SC_NEEDLE_OF_PARALYZE:
tick_def2 = (st->vit + st->luk) * 50;
break;
case SC_NETHERWORLD:
- tick_def2 = 1000 * (((bl->type == BL_PC) ? ((TBL_PC*)bl)->status.job_level : 0) / 10 + status->get_lv(bl) / 50);
+ tick_def2 = 1000 * ((bl->type == BL_PC ? BL_UCCAST(BL_PC, bl)->status.job_level : 0) / 10 + status->get_lv(bl) / 50);
break;
default:
//Effect that cannot be reduced? Likely a buff.
@@ -7888,8 +8025,11 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t
if (sd->devotion[i] && (tsd = map->id2sd(sd->devotion[i])) != NULL)
status->change_start(bl, &tsd->bl, type, 10000, val1, val2, val3, val4, tick, SCFLAG_ALL);
}
- } else if (bl->type == BL_MER && ((TBL_MER*)bl)->devotion_flag && (tsd = ((TBL_MER*)bl)->master) != NULL) {
- status->change_start(bl, &tsd->bl, type, 10000, val1, val2, val3, val4, tick, SCFLAG_ALL);
+ } else if (bl->type == BL_MER) {
+ struct mercenary_data *mc = BL_UCAST(BL_MER, bl);
+ if (mc->devotion_flag && (tsd = mc->master) != NULL) {
+ status->change_start(bl, &tsd->bl, type, 10000, val1, val2, val3, val4, tick, SCFLAG_ALL);
+ }
}
}
//val4 signals infinite endure (if val4 == 2 it is infinite endure from Berserk)
@@ -7988,8 +8128,11 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t
if (sd->devotion[i] && (tsd = map->id2sd(sd->devotion[i])) != NULL)
status->change_start(bl, &tsd->bl, type, 10000, val1, val2, 0, 0, tick, SCFLAG_ALL);
}
- } else if (bl->type == BL_MER && ((TBL_MER*)bl)->devotion_flag && (tsd = ((TBL_MER*)bl)->master) != NULL) {
- status->change_start(bl, &tsd->bl, type, 10000, val1, val2, 0, 0, tick, SCFLAG_ALL);
+ } else if (bl->type == BL_MER) {
+ struct mercenary_data *mc = BL_UCAST(BL_MER, bl);
+ if (mc->devotion_flag && (tsd = mc->master) != NULL) {
+ status->change_start(bl, &tsd->bl, type, 10000, val1, val2, 0, 0, tick, SCFLAG_ALL);
+ }
}
}
break;
@@ -8131,7 +8274,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t
if( val2 && bl->type == BL_MOB ) {
struct block_list* src2 = map->id2bl(val2);
if( src2 )
- mob->log_damage((TBL_MOB*)bl,src2,diff);
+ mob->log_damage(BL_UCAST(BL_MOB, bl), src2, diff);
}
status_zap(bl, diff, 0);
}
@@ -8205,7 +8348,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t
//val4&1 signals the presence of a wall.
//val4&2 makes cloak not end on normal attacks [Skotlex]
//val4&4 makes cloak not end on using skills
- if (bl->type == BL_PC || (bl->type == BL_MOB && ((TBL_MOB*)bl)->special_state.clone) ) //Standard cloaking.
+ if (bl->type == BL_PC || (bl->type == BL_MOB && BL_UCCAST(BL_MOB, bl)->special_state.clone)) //Standard cloaking.
val4 |= battle_config.pc_cloak_check_type&7;
else
val4 |= battle_config.monster_cloak_check_type&7;
@@ -8249,9 +8392,11 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t
if (sd->devotion[i] && (tsd = map->id2sd(sd->devotion[i])) != NULL)
status->change_start(bl, &tsd->bl, type, 10000, val1, val2, 0, 0, tick, SCFLAG_ALL);
}
- }
- else if (bl->type == BL_MER && ((TBL_MER*)bl)->devotion_flag && (tsd = ((TBL_MER*)bl)->master) != NULL) {
- status->change_start(bl, &tsd->bl, type, 10000, val1, val2, 0, 0, tick, SCFLAG_ALL);
+ } else if (bl->type == BL_MER) {
+ struct mercenary_data *mc = BL_UCAST(BL_MER, bl);
+ if (mc->devotion_flag && (tsd = mc->master) != NULL) {
+ status->change_start(bl, &tsd->bl, type, 10000, val1, val2, 0, 0, tick, SCFLAG_ALL);
+ }
}
}
}
@@ -8426,7 +8571,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t
if( val3 && bl->type == BL_MOB ) {
struct block_list* src2 = map->id2bl(val3);
if( src2 )
- mob->log_damage((TBL_MOB*)bl,src2,st->hp - 1);
+ mob->log_damage(BL_UCAST(BL_MOB, bl), src2, st->hp - 1);
}
status_zap(bl, st->hp-1, val2 ? 0 : st->sp);
return 1;
@@ -9464,6 +9609,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t
clif->changelook(bl,LOOK_WEAPON,0);
clif->changelook(bl,LOOK_SHIELD,0);
clif->changelook(bl,LOOK_CLOTHES_COLOR,vd->cloth_color);
+ clif->changelook(bl,LOOK_BODY2,0);
break;
case SC_KAAHI:
val4 = INVALID_TIMER;
@@ -9869,6 +10015,17 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t
calc_flag&=~SCB_DYE;
}
+#if 0 //Currently No SC's use this
+ if (calc_flag&SCB_BODY) {
+ //Reset Body Style
+ if (vd && vd->body_style) {
+ val4 = vd->body_style;
+ clif->changelook(bl,LOOK_BODY2,0);
+ }
+ calc_flag&=~SCB_BODY;
+ }
+#endif
+
if(!(flag&SCFLAG_NOICON) && !(flag&SCFLAG_LOADED && status->dbs->DisplayType[type]))
clif->status_change(bl,status->dbs->IconChangeTable[type],1,tick,(val_flag&1)?val1:1,(val_flag&2)?val2:0,(val_flag&4)?val3:0);
@@ -10187,11 +10344,14 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
if (sd->devotion[i] && (tsd = map->id2sd(sd->devotion[i])) != NULL && tsd->sc.data[type])
status_change_end(&tsd->bl, type, INVALID_TIMER);
}
- } else if( bl->type == BL_MER && ((TBL_MER*)bl)->devotion_flag ) {
- // Clear Status from Master
- tsd = ((TBL_MER*)bl)->master;
- if( tsd && tsd->sc.data[type] )
- status_change_end(&tsd->bl, type, INVALID_TIMER);
+ } else if (bl->type == BL_MER) {
+ struct mercenary_data *mc = BL_UCAST(BL_MER, bl);
+ if (mc->devotion_flag) {
+ // Clear Status from Master
+ tsd = mc->master;
+ if (tsd != NULL && tsd->sc.data[type] != NULL)
+ status_change_end(&tsd->bl, type, INVALID_TIMER);
+ }
}
}
break;
@@ -10199,10 +10359,10 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
{
struct block_list *d_bl = map->id2bl(sce->val1);
if( d_bl ) {
- if( d_bl->type == BL_PC )
- ((TBL_PC*)d_bl)->devotion[sce->val2] = 0;
- else if( d_bl->type == BL_MER )
- ((TBL_MER*)d_bl)->devotion_flag = 0;
+ if (d_bl->type == BL_PC)
+ BL_UCAST(BL_PC, d_bl)->devotion[sce->val2] = 0;
+ else if (d_bl->type == BL_MER)
+ BL_UCAST(BL_MER, d_bl)->devotion_flag = 0;
clif->devotion(d_bl, NULL);
}
@@ -10752,6 +10912,14 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
calc_flag&=~SCB_DYE;
}
+#if 0 // Currently No SC's use this
+ if (calc_flag&SCB_BODY) { // Restore Body color
+ if (vd && !vd->body_style && sce->val4)
+ clif->changelook(bl,LOOK_BODY2,sce->val4);
+ calc_flag&=~SCB_BODY;
+ }
+#endif
+
//On Aegis, when turning off a status change, first goes the sc packet, then the option packet.
clif->sc_end(bl,bl->id,AREA,status->dbs->IconChangeTable[type]);
@@ -10765,6 +10933,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
clif->changelook(bl,LOOK_WEAPON,sd->vd.weapon);
clif->changelook(bl,LOOK_SHIELD,sd->vd.shield);
clif->changelook(bl,LOOK_CLOTHES_COLOR,cap_value(sd->status.clothes_color,0,battle_config.max_cloth_color));
+ clif->changelook(bl,LOOK_BODY2,cap_value(sd->status.body,0,battle_config.max_body_style));
}
}
@@ -10948,8 +11117,8 @@ int status_change_timer(int tid, int64 tick, int id, intptr_t data) {
if (!sc->data[SC_SLOWPOISON]) {
if( sce->val2 && bl->type == BL_MOB ) {
struct block_list* src = map->id2bl(sce->val2);
- if( src )
- mob->log_damage((TBL_MOB*)bl,src,sce->val4);
+ if (src != NULL)
+ mob->log_damage(BL_UCAST(BL_MOB, bl), src, sce->val4);
}
map->freeblock_lock();
status_zap(bl, sce->val4, 0);
@@ -10988,7 +11157,7 @@ int status_change_timer(int tid, int64 tick, int id, intptr_t data) {
int hp = rnd()%600 + 200;
struct block_list* src = map->id2bl(sce->val2);
if( src && bl && bl->type == BL_MOB ) {
- mob->log_damage((TBL_MOB*)bl,src,sd||hp<st->hp?hp:st->hp-1);
+ mob->log_damage(BL_UCAST(BL_MOB, bl), src, sd != NULL || hp < st->hp ? hp : st->hp-1);
}
map->freeblock_lock();
status_fix_damage(src, bl, sd||hp<st->hp?hp:st->hp-1, 1);
@@ -11733,9 +11902,12 @@ int status_change_timer_sub(struct block_list* bl, va_list ap) {
if (battle->check_target( src, bl, BCT_ENEMY ) > 0
&& status->check_skilluse(src, bl, WZ_SIGHTBLASTER, 2)
) {
- struct skill_unit *su = (struct skill_unit *)bl;
- if (sce && skill->attack(BF_MAGIC,src,src,bl,WZ_SIGHTBLASTER,sce->val1,tick,0x4000)
- && (!su || !su->group || !(skill->get_inf2(su->group->skill_id)&INF2_TRAP))) { // The hit is not counted if it's against a trap
+ const struct skill_unit *su = BL_CCAST(BL_SKILL, bl);
+ if (sce != NULL
+ && skill->attack(BF_MAGIC,src,src,bl,WZ_SIGHTBLASTER,sce->val1,tick,0x4000)
+ && (su == NULL || su->group == NULL || !(skill->get_inf2(su->group->skill_id)&INF2_TRAP))
+ ) {
+ // The hit is not counted if it's against a trap
sce->val2 = 0; // This signals it to end.
} else if ((bl->type&BL_SKILL) && sce && sce->val4%2 == 0) {
//Remove trap immunity temporarily so it triggers if you still stand on it
@@ -11801,7 +11973,7 @@ int status_get_weapon_atk(struct block_list *bl, struct weapon_atk *watk, int fl
}
if ( bl->type == BL_PC && !(flag & 2) ) {
- struct map_session_data *sd = (struct map_session_data *)bl;
+ const struct map_session_data *sd = BL_UCCAST(BL_PC, bl);
short index = sd->equip_index[EQI_HAND_R], refine;
if ( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON
&& (refine = sd->status.inventory[index].refine) < 16 && refine ) {
@@ -11872,16 +12044,25 @@ void status_get_matk_sub(struct block_list *bl, int flag, unsigned short *matk_m
}
break;
case BL_MER:
- *matk_min += 70 * ((TBL_MER*)bl)->battle_status.rhw.atk2 / 100;
- *matk_max += 130 * ((TBL_MER*)bl)->battle_status.rhw.atk2 / 100;
+ {
+ const struct mercenary_data *mc = BL_UCCAST(BL_MER, bl);
+ *matk_min += 70 * mc->battle_status.rhw.atk2 / 100;
+ *matk_max += 130 * mc->battle_status.rhw.atk2 / 100;
+ }
break;
case BL_MOB:
- *matk_min += 70 * ((TBL_MOB*)bl)->status.rhw.atk2 / 100;
- *matk_max += 130 * ((TBL_MOB*)bl)->status.rhw.atk2 / 100;
+ {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
+ *matk_min += 70 * md->status.rhw.atk2 / 100;
+ *matk_max += 130 * md->status.rhw.atk2 / 100;
+ }
break;
case BL_HOM:
- *matk_min += (status_get_homint(bl) + status_get_homdex(bl)) / 5;
- *matk_max += (status_get_homluk(bl) + status_get_homint(bl) + status_get_homdex(bl)) / 3;
+ {
+ const struct homun_data *hd = BL_UCCAST(BL_HOM, bl);
+ *matk_min += (status_get_homint(st, hd) + status_get_homdex(st, hd)) / 5;
+ *matk_max += (status_get_homluk(st, hd) + status_get_homint(st, hd) + status_get_homdex(st, hd)) / 3;
+ }
break;
}
@@ -11917,6 +12098,13 @@ void status_get_matk_sub(struct block_list *bl, int flag, unsigned short *matk_m
return;
}
+#undef status_get_homstr
+#undef status_get_homagi
+#undef status_get_homvit
+#undef status_get_homint
+#undef status_get_homdex
+#undef status_get_homluk
+
/**
* Gets a random matk value depending on min matk and max matk
**/
diff --git a/src/map/status.h b/src/map/status.h
index 5996e8c2e..51ca1e78b 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -1641,10 +1641,10 @@ enum si_type {
//SI_CHUSEOK_WEEKEND = 790,
//SI_ALL_LIGHTGUARD = 791,
//SI_ALL_LIGHTGUARD_COOL_TIME = 792,
- //SI_MTF_MHP = 793,
- //SI_MTF_MSP = 794,
- //SI_MTF_PUMPKIN = 795,
- //SI_MTF_HITFLEE = 796,
+ SI_MTF_MHP = 793,
+ SI_MTF_MSP = 794,
+ SI_MTF_PUMPKIN = 795,
+ SI_MTF_HITFLEE = 796,
//SI_MTF_CRIDAMAGE2 = 797,
//SI_MTF_SPDRAIN = 798,
//SI_ACUO_MINT_GUM = 799,
@@ -1923,6 +1923,9 @@ enum scb_flag
SCB_RANGE = 0x10000000,
SCB_REGEN = 0x20000000,
SCB_DYE = 0x40000000, // force cloth-dye change to 0 to avoid client crashes.
+#if 0 // Currently No SC use it. Also, when this will be implemented, there will be need to change to 64bit variable
+ SCB_BODY = 0x80000000, // Force bodysStyle change to 0
+#endif
SCB_BATTLE = 0x3FFFFFFE,
SCB_ALL = 0x3FFFFFFF
@@ -2120,13 +2123,6 @@ struct status_change {
#define status_get_size(bl) (status->get_status_data(bl)->size)
#define status_get_mode(bl) (status->get_status_data(bl)->mode)
-#define status_get_homstr(bl) (st->str + ((TBL_HOM*)bl)->homunculus.str_value)
-#define status_get_homagi(bl) (st->agi + ((TBL_HOM*)bl)->homunculus.agi_value)
-#define status_get_homvit(bl) (st->vit + ((TBL_HOM*)bl)->homunculus.vit_value)
-#define status_get_homint(bl) (st->int_ + ((TBL_HOM*)bl)->homunculus.int_value)
-#define status_get_homdex(bl) (st->dex + ((TBL_HOM*)bl)->homunculus.dex_value)
-#define status_get_homluk(bl) (st->luk + ((TBL_HOM*)bl)->homunculus.luk_value)
-
//Short version, receives rate in 1->100 range, and does not uses a flag setting.
#define sc_start(src, bl, type, rate, val1, tick) (status->change_start((src),(bl),(type),100*(rate),(val1),0,0,0,(tick),SCFLAG_NONE))
#define sc_start2(src, bl, type, rate, val1, val2, tick) (status->change_start((src),(bl),(type),100*(rate),(val1),(val2),0,0,(tick),SCFLAG_NONE))
diff --git a/src/map/unit.c b/src/map/unit.c
index 4c5254373..03334f7f3 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -73,15 +73,16 @@ struct unit_interface *unit;
* @param bl block_list to process
* @return a pointer to the given object's unit_data
**/
-struct unit_data* unit_bl2ud(struct block_list *bl) {
- if( bl == NULL) return NULL;
- if( bl->type == BL_PC) return &((struct map_session_data*)bl)->ud;
- if( bl->type == BL_MOB) return &((struct mob_data*)bl)->ud;
- if( bl->type == BL_PET) return &((struct pet_data*)bl)->ud;
- if( bl->type == BL_NPC) return ((struct npc_data*)bl)->ud;
- if( bl->type == BL_HOM) return &((struct homun_data*)bl)->ud;
- if( bl->type == BL_MER) return &((struct mercenary_data*)bl)->ud;
- if( bl->type == BL_ELEM) return &((struct elemental_data*)bl)->ud;
+struct unit_data* unit_bl2ud(struct block_list *bl)
+{
+ if (bl == NULL) return NULL;
+ if (bl->type == BL_PC) return &BL_UCAST(BL_PC, bl)->ud;
+ if (bl->type == BL_MOB) return &BL_UCAST(BL_MOB, bl)->ud;
+ if (bl->type == BL_PET) return &BL_UCAST(BL_PET, bl)->ud;
+ if (bl->type == BL_NPC) return BL_UCAST(BL_NPC, bl)->ud;
+ if (bl->type == BL_HOM) return &BL_UCAST(BL_HOM, bl)->ud;
+ if (bl->type == BL_MER) return &BL_UCAST(BL_MER, bl)->ud;
+ if (bl->type == BL_ELEM) return &BL_UCAST(BL_ELEM, bl)->ud;
return NULL;
}
@@ -92,9 +93,10 @@ struct unit_data* unit_bl2ud(struct block_list *bl) {
* @param bl block_list to process
* @return a pointer to the given object's unit_data
*/
-struct unit_data* unit_bl2ud2(struct block_list *bl) {
- if( bl && bl->type == BL_NPC && ((struct npc_data*)bl)->ud == &npc->base_ud ) {
- struct npc_data *nd = (struct npc_data *)bl;
+struct unit_data *unit_bl2ud2(struct block_list *bl)
+{
+ struct npc_data *nd = BL_CAST(BL_NPC, bl);
+ if (nd != NULL && nd->ud == &npc->base_ud) {
nd->ud = NULL;
CREATE(nd->ud, struct unit_data, 1);
unit->dataset(&nd->bl);
@@ -148,8 +150,9 @@ int unit_walktoxy_sub(struct block_list *bl)
ud->state.change_walk_target=0;
if (bl->type == BL_PC) {
- ((TBL_PC *)bl)->head_dir = 0;
- clif->walkok((TBL_PC*)bl);
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
+ sd->head_dir = 0;
+ clif->walkok(sd);
}
clif->move(ud);
@@ -448,7 +451,7 @@ int unit_walktoxy_timer(int tid, int64 tick, int id, intptr_t data) {
//Cancel chase.
ud->to_x = bl->x;
ud->to_y = bl->y;
- if (tbl && bl->type == BL_MOB && mob->warpchase((TBL_MOB*)bl, tbl) )
+ if (tbl && bl->type == BL_MOB && mob->warpchase(BL_UCAST(BL_MOB, bl), tbl))
return 0;
ud->target_to = 0;
return 0;
@@ -813,7 +816,7 @@ int unit_setdir(struct block_list *bl,unsigned char dir)
if (!ud) return 0;
ud->dir = dir;
if (bl->type == BL_PC)
- ((TBL_PC *)bl)->head_dir = 0;
+ BL_UCAST(BL_PC, bl)->head_dir = 0;
clif->changed_dir(bl, AREA);
return 0;
}
@@ -823,7 +826,7 @@ uint8 unit_getdir(struct block_list *bl) {
nullpo_ret(bl);
if( bl->type == BL_NPC )
- return ((TBL_NPC*)bl)->dir;
+ return BL_UCCAST(BL_NPC, bl)->dir;
ud = unit->bl2ud(bl);
if (!ud) return 0;
return ud->dir;
@@ -917,10 +920,13 @@ int unit_warp(struct block_list *bl,short m,short x,short y,clr_type type)
switch (bl->type) {
case BL_MOB:
- if (map->list[bl->m].flag.monster_noteleport && ((TBL_MOB*)bl)->master_id == 0)
+ {
+ const struct mob_data *md = BL_UCCAST(BL_MOB, bl);
+ if (map->list[bl->m].flag.monster_noteleport && md->master_id == 0)
return 1;
- if (m != bl->m && map->list[m].flag.nobranch && battle_config.mob_warp&4 && !(((TBL_MOB *)bl)->master_id))
+ if (m != bl->m && map->list[m].flag.nobranch && battle_config.mob_warp&4 && md->master_id == 0)
return 1;
+ }
break;
case BL_PC:
if (map->list[bl->m].flag.noteleport)
@@ -947,7 +953,7 @@ int unit_warp(struct block_list *bl,short m,short x,short y,clr_type type)
}
if (bl->type == BL_PC) //Use pc_setpos
- return pc->setpos((TBL_PC*)bl, map_id2index(m), x, y, type);
+ return pc->setpos(BL_UCAST(BL_PC, bl), map_id2index(m), x, y, type);
if (!unit->remove_map(bl, type, ALC_MARK))
return 3;
@@ -1137,7 +1143,7 @@ int unit_can_move(struct block_list *bl) {
int unit_resume_running(int tid, int64 tick, int id, intptr_t data) {
struct unit_data *ud = (struct unit_data *)data;
- TBL_PC * sd = map->id2sd(id);
+ struct map_session_data *sd = map->id2sd(id);
if(sd && pc_isridingwug(sd))
clif->skill_nodamage(ud->bl,ud->bl,RA_WUGDASH,ud->skill_lv,
@@ -1164,7 +1170,7 @@ int unit_set_walkdelay(struct block_list *bl, int64 tick, int delay, int type) {
if (type) {
//Bosses can ignore skill induced walkdelay (but not damage induced)
- if(bl->type == BL_MOB && (((TBL_MOB*)bl)->status.mode&MD_BOSS))
+ if (bl->type == BL_MOB && (BL_UCCAST(BL_MOB, bl)->status.mode&MD_BOSS))
return 0;
//Make sure walk delay is not decreased
if (DIFF_TICK(ud->canmove_tick, tick+delay) > 0)
@@ -1256,13 +1262,17 @@ int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, ui
break;
case WE_MALE:
case WE_FEMALE:
+ {
+ struct map_session_data *p_sd = NULL;
if (!sd->status.partner_id)
return 0;
- target = (struct block_list*)map->charid2sd(sd->status.partner_id);
- if (!target) {
+ p_sd = map->charid2sd(sd->status.partner_id);
+ if (p_sd == NULL) {
clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
return 0;
}
+ target = &p_sd->bl;
+ }
break;
case GC_WEAPONCRUSH:
if( sc && sc->data[SC_COMBOATTACK] && sc->data[SC_COMBOATTACK]->val1 == GC_WEAPONBLOCKING ) {
@@ -1381,14 +1391,16 @@ int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, ui
return 0;
}
- if( src->type == BL_MOB )
- switch( skill_id ) {
+ if (src->type == BL_MOB) {
+ const struct mob_data *src_md = BL_UCCAST(BL_MOB, src);
+ switch (skill_id) {
case NPC_SUMMONSLAVE:
case NPC_SUMMONMONSTER:
case AL_TELEPORT:
- if (((TBL_MOB*)src)->master_id && ((TBL_MOB*)src)->special_state.ai != AI_NONE)
+ if (src_md->master_id != 0 && src_md->special_state.ai != AI_NONE)
return 0;
}
+ }
if (src->type == BL_NPC) // NPC-objects can override cast distance
range = AREA_SIZE; // Maximum visible distance before NPC goes out of sight
@@ -1564,9 +1576,8 @@ int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, ui
clif->skillcasting(src, src->id, target_id, 0,0, skill_id, skill->get_ele(skill_id, skill_lv), casttime);
if( casttime > 0 || temp )
{
- if (sd && target->type == BL_MOB)
- {
- TBL_MOB *md = (TBL_MOB*)target;
+ if (sd != NULL && target->type == BL_MOB) {
+ struct mob_data *md = BL_UCAST(BL_MOB, target);
mob->skill_event(md, src, tick, -1); //Cast targeted skill event.
if (tstatus->mode&(MD_CASTSENSOR_IDLE|MD_CASTSENSOR_CHASE) &&
battle->check_target(target, src, BCT_ENEMY) > 0)
@@ -1848,10 +1859,10 @@ int unit_unattackable(struct block_list *bl)
unit->set_target(ud, 0);
}
- if(bl->type == BL_MOB)
- mob->unlocktarget((struct mob_data*)bl, timer->gettick()) ;
- else if(bl->type == BL_PET)
- pet->unlocktarget((struct pet_data*)bl);
+ if (bl->type == BL_MOB)
+ mob->unlocktarget(BL_UCAST(BL_MOB, bl), timer->gettick());
+ else if (bl->type == BL_PET)
+ pet->unlocktarget(BL_UCAST(BL_PET, bl));
return 0;
}
@@ -1872,10 +1883,10 @@ int unit_attack(struct block_list *src,int target_id,int continuous) {
return 1;
}
- if( src->type == BL_PC ) {
- TBL_PC* sd = (TBL_PC*)src;
+ if (src->type == BL_PC) {
+ struct map_session_data *sd = BL_UCAST(BL_PC, src);
if( target->type == BL_NPC ) { // monster npcs [Valaris]
- npc->click(sd,(TBL_NPC*)target); // submitted by leinsirk10 [Celest]
+ npc->click(sd, BL_UCAST(BL_NPC, target)); // submitted by leinsirk10 [Celest]
return 0;
}
if( pc_is90overweight(sd) || pc_isridingwug(sd) ) { // overweight or mounted on warg - stop attacking
@@ -2086,9 +2097,8 @@ int unit_attack_timer_sub(struct block_list* src, int tid, int64 tick) {
)
return 0; // can't attack under these conditions
- if( src->m != target->m )
- {
- if( src->type == BL_MOB && mob->warpchase((TBL_MOB*)src, target) )
+ if (src->m != target->m) {
+ if (src->type == BL_MOB && mob->warpchase(BL_UCAST(BL_MOB, src), target))
return 1; // Follow up.
return 0;
}
@@ -2161,7 +2171,7 @@ int unit_attack_timer_sub(struct block_list* src, int tid, int64 tick) {
map->foreachinrange(mob->linksearch, src, md->db->range2, BL_MOB, md->class_, target, tick);
}
}
- if(src->type == BL_PET && pet->attackskill((TBL_PET*)src, target->id))
+ if (src->type == BL_PET && pet->attackskill(BL_UCAST(BL_PET, src), target->id))
return 1;
map->freeblock_lock();
@@ -2256,7 +2266,8 @@ int unit_skillcastcancel(struct block_list *bl,int type)
}
}
- if(bl->type==BL_MOB) ((TBL_MOB*)bl)->skill_idx = -1;
+ if (bl->type == BL_MOB)
+ BL_UCAST(BL_MOB, bl)->skill_idx = -1;
clif->skillcastcancel(bl);
return 1;
@@ -2311,9 +2322,9 @@ int unit_changeviewsize(struct block_list *bl,short size)
size=(size<0)?-1:(size>0)?1:0;
if(bl->type == BL_PC) {
- ((TBL_PC*)bl)->state.size=size;
+ BL_UCAST(BL_PC, bl)->state.size = size;
} else if(bl->type == BL_MOB) {
- ((TBL_MOB*)bl)->special_state.size=size;
+ BL_UCAST(BL_MOB, bl)->special_state.size = size;
} else
return 0;
if(size!=0)
@@ -2398,8 +2409,9 @@ int unit_remove_map(struct block_list *bl, clr_type clrtype, const char* file, i
}
switch( bl->type ) {
- case BL_PC: {
- struct map_session_data *sd = (struct map_session_data*)bl;
+ case BL_PC:
+ {
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
if(sd->shadowform_id) {
struct block_list *d_bl = map->id2bl(sd->shadowform_id);
@@ -2494,8 +2506,9 @@ int unit_remove_map(struct block_list *bl, clr_type clrtype, const char* file, i
break;
}
- case BL_MOB: {
- struct mob_data *md = (struct mob_data*)bl;
+ case BL_MOB:
+ {
+ struct mob_data *md = BL_UCAST(BL_MOB, bl);
// Drop previous target mob_slave_keep_target: no.
if (!battle_config.mob_slave_keep_target)
md->target_id=0;
@@ -2505,8 +2518,9 @@ int unit_remove_map(struct block_list *bl, clr_type clrtype, const char* file, i
break;
}
- case BL_PET: {
- struct pet_data *pd = (struct pet_data*)bl;
+ case BL_PET:
+ {
+ struct pet_data *pd = BL_UCAST(BL_PET, bl);
if( pd->pet.intimate <= 0 && !(pd->msd && !pd->msd->state.active) ) {
//If logging out, this is deleted on unit->free
clif->clearunit_area(bl,clrtype);
@@ -2519,7 +2533,7 @@ int unit_remove_map(struct block_list *bl, clr_type clrtype, const char* file, i
break;
}
case BL_HOM: {
- struct homun_data *hd = (struct homun_data *)bl;
+ struct homun_data *hd = BL_UCAST(BL_HOM, bl);
if( !hd->homunculus.intimacy && !(hd->master && !hd->master->state.active) ) {
//If logging out, this is deleted on unit->free
clif->emotion(bl, E_SOB);
@@ -2532,7 +2546,7 @@ int unit_remove_map(struct block_list *bl, clr_type clrtype, const char* file, i
break;
}
case BL_MER: {
- struct mercenary_data *md = (struct mercenary_data *)bl;
+ struct mercenary_data *md = BL_UCAST(BL_MER, bl);
ud->canact_tick = ud->canmove_tick;
if( mercenary->get_lifetime(md) <= 0 && !(md->master && !md->master->state.active) ) {
clif->clearunit_area(bl,clrtype);
@@ -2544,7 +2558,7 @@ int unit_remove_map(struct block_list *bl, clr_type clrtype, const char* file, i
break;
}
case BL_ELEM: {
- struct elemental_data *ed = (struct elemental_data *)bl;
+ struct elemental_data *ed = BL_UCAST(BL_ELEM, bl);
ud->canact_tick = ud->canmove_tick;
if( elemental->get_lifetime(ed) <= 0 && !(ed->master && !ed->master->state.active) ) {
clif->clearunit_area(bl,clrtype);
@@ -2608,7 +2622,7 @@ int unit_free(struct block_list *bl, clr_type clrtype) {
switch( bl->type ) {
case BL_PC:
{
- struct map_session_data *sd = (struct map_session_data*)bl;
+ struct map_session_data *sd = BL_UCAST(BL_PC, bl);
sd->state.loggingout = 1;
@@ -2672,7 +2686,7 @@ int unit_free(struct block_list *bl, clr_type clrtype) {
}
case BL_PET:
{
- struct pet_data *pd = (struct pet_data*)bl;
+ struct pet_data *pd = BL_UCAST(BL_PET, bl);
struct map_session_data *sd = pd->msd;
pet->hungry_timer_delete(pd);
if( pd->a_skill )
@@ -2723,7 +2737,7 @@ int unit_free(struct block_list *bl, clr_type clrtype) {
}
case BL_MOB:
{
- struct mob_data *md = (struct mob_data*)bl;
+ struct mob_data *md = BL_UCAST(BL_MOB, bl);
if( md->spawn_timer != INVALID_TIMER )
{
timer->delete(md->spawn_timer,mob->delayspawn);
@@ -2783,7 +2797,7 @@ int unit_free(struct block_list *bl, clr_type clrtype) {
}
case BL_HOM:
{
- struct homun_data *hd = (TBL_HOM*)bl;
+ struct homun_data *hd = BL_UCAST(BL_HOM, bl);
struct map_session_data *sd = hd->master;
homun->hunger_timer_delete(hd);
if( hd->homunculus.intimacy > 0 )
@@ -2799,7 +2813,7 @@ int unit_free(struct block_list *bl, clr_type clrtype) {
}
case BL_MER:
{
- struct mercenary_data *md = (TBL_MER*)bl;
+ struct mercenary_data *md = BL_UCAST(BL_MER, bl);
struct map_session_data *sd = md->master;
if( mercenary->get_lifetime(md) > 0 )
mercenary->save(md);
@@ -2816,7 +2830,7 @@ int unit_free(struct block_list *bl, clr_type clrtype) {
break;
}
case BL_ELEM: {
- struct elemental_data *ed = (TBL_ELEM*)bl;
+ struct elemental_data *ed = BL_UCAST(BL_ELEM, bl);
struct map_session_data *sd = ed->master;
if( elemental->get_lifetime(ed) > 0 )
elemental->save(ed);
diff --git a/src/map/unit.h b/src/map/unit.h
index f0933aa9a..0279d73c1 100644
--- a/src/map/unit.h
+++ b/src/map/unit.h
@@ -93,7 +93,8 @@ struct view_data {
head_bottom,
hair_style,
hair_color,
- cloth_color;
+ cloth_color,
+ body_style;
char sex;
unsigned dead_sit : 2;
};
diff --git a/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
index aefb3aa93..dd6b3d5d6 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
index 3c442c4ab..34a9e4005 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
@@ -1,7 +1,7 @@
/**
* This file is part of Hercules.
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
index 3e9e6e1d2..b1554aefd 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/plugins/HPMHooking/HPMHooking_char.sources.inc b/src/plugins/HPMHooking/HPMHooking_char.sources.inc
index 92623f516..d14117add 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.sources.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.sources.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc
index 5540e15b3..3a8bb2a5f 100644
--- a/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_login.HPMHooksCore.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc
index 27e0f857d..959bb076f 100644
--- a/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_login.HookingPoints.inc
@@ -1,7 +1,7 @@
/**
* This file is part of Hercules.
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc
index 012240bb3..2e2d9e619 100644
--- a/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_login.Hooks.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/plugins/HPMHooking/HPMHooking_login.sources.inc b/src/plugins/HPMHooking/HPMHooking_login.sources.inc
index 38500f0ee..bbc1cecbc 100644
--- a/src/plugins/HPMHooking/HPMHooking_login.sources.inc
+++ b/src/plugins/HPMHooking/HPMHooking_login.sources.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
index c725cdf4a..e5ec573a9 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HPMHooksCore.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -3034,16 +3034,24 @@ struct {
struct HPMHookPoint *HP_map_vforeachininstance_post;
struct HPMHookPoint *HP_map_id2sd_pre;
struct HPMHookPoint *HP_map_id2sd_post;
- struct HPMHookPoint *HP_map_id2md_pre;
- struct HPMHookPoint *HP_map_id2md_post;
struct HPMHookPoint *HP_map_id2nd_pre;
struct HPMHookPoint *HP_map_id2nd_post;
+ struct HPMHookPoint *HP_map_id2md_pre;
+ struct HPMHookPoint *HP_map_id2md_post;
+ struct HPMHookPoint *HP_map_id2fi_pre;
+ struct HPMHookPoint *HP_map_id2fi_post;
+ struct HPMHookPoint *HP_map_id2cd_pre;
+ struct HPMHookPoint *HP_map_id2cd_post;
+ struct HPMHookPoint *HP_map_id2su_pre;
+ struct HPMHookPoint *HP_map_id2su_post;
+ struct HPMHookPoint *HP_map_id2pd_pre;
+ struct HPMHookPoint *HP_map_id2pd_post;
struct HPMHookPoint *HP_map_id2hd_pre;
struct HPMHookPoint *HP_map_id2hd_post;
struct HPMHookPoint *HP_map_id2mc_pre;
struct HPMHookPoint *HP_map_id2mc_post;
- struct HPMHookPoint *HP_map_id2cd_pre;
- struct HPMHookPoint *HP_map_id2cd_post;
+ struct HPMHookPoint *HP_map_id2ed_pre;
+ struct HPMHookPoint *HP_map_id2ed_post;
struct HPMHookPoint *HP_map_id2bl_pre;
struct HPMHookPoint *HP_map_id2bl_post;
struct HPMHookPoint *HP_map_blid_exists_pre;
@@ -4262,6 +4270,8 @@ struct {
struct HPMHookPoint *HP_pc_follow_timer_post;
struct HPMHookPoint *HP_pc_read_skill_tree_pre;
struct HPMHookPoint *HP_pc_read_skill_tree_post;
+ struct HPMHookPoint *HP_pc_clear_skill_tree_pre;
+ struct HPMHookPoint *HP_pc_clear_skill_tree_post;
struct HPMHookPoint *HP_pc_isUseitem_pre;
struct HPMHookPoint *HP_pc_isUseitem_post;
struct HPMHookPoint *HP_pc_show_steal_pre;
@@ -8861,16 +8871,24 @@ struct {
int HP_map_vforeachininstance_post;
int HP_map_id2sd_pre;
int HP_map_id2sd_post;
- int HP_map_id2md_pre;
- int HP_map_id2md_post;
int HP_map_id2nd_pre;
int HP_map_id2nd_post;
+ int HP_map_id2md_pre;
+ int HP_map_id2md_post;
+ int HP_map_id2fi_pre;
+ int HP_map_id2fi_post;
+ int HP_map_id2cd_pre;
+ int HP_map_id2cd_post;
+ int HP_map_id2su_pre;
+ int HP_map_id2su_post;
+ int HP_map_id2pd_pre;
+ int HP_map_id2pd_post;
int HP_map_id2hd_pre;
int HP_map_id2hd_post;
int HP_map_id2mc_pre;
int HP_map_id2mc_post;
- int HP_map_id2cd_pre;
- int HP_map_id2cd_post;
+ int HP_map_id2ed_pre;
+ int HP_map_id2ed_post;
int HP_map_id2bl_pre;
int HP_map_id2bl_post;
int HP_map_blid_exists_pre;
@@ -10089,6 +10107,8 @@ struct {
int HP_pc_follow_timer_post;
int HP_pc_read_skill_tree_pre;
int HP_pc_read_skill_tree_post;
+ int HP_pc_clear_skill_tree_pre;
+ int HP_pc_clear_skill_tree_post;
int HP_pc_isUseitem_pre;
int HP_pc_isUseitem_post;
int HP_pc_show_steal_pre;
diff --git a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
index 456f2985f..67fb2ce19 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.HookingPoints.inc
@@ -1,7 +1,7 @@
/**
* This file is part of Hercules.
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -1555,11 +1555,15 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(map->vforeachinmap, HP_map_vforeachinmap) },
{ HP_POP(map->vforeachininstance, HP_map_vforeachininstance) },
{ HP_POP(map->id2sd, HP_map_id2sd) },
- { HP_POP(map->id2md, HP_map_id2md) },
{ HP_POP(map->id2nd, HP_map_id2nd) },
+ { HP_POP(map->id2md, HP_map_id2md) },
+ { HP_POP(map->id2fi, HP_map_id2fi) },
+ { HP_POP(map->id2cd, HP_map_id2cd) },
+ { HP_POP(map->id2su, HP_map_id2su) },
+ { HP_POP(map->id2pd, HP_map_id2pd) },
{ HP_POP(map->id2hd, HP_map_id2hd) },
{ HP_POP(map->id2mc, HP_map_id2mc) },
- { HP_POP(map->id2cd, HP_map_id2cd) },
+ { HP_POP(map->id2ed, HP_map_id2ed) },
{ HP_POP(map->id2bl, HP_map_id2bl) },
{ HP_POP(map->blid_exists, HP_map_blid_exists) },
{ HP_POP(map->mapindex2mapid, HP_map_mapindex2mapid) },
@@ -2181,6 +2185,7 @@ struct HookingPointData HookingPoints[] = {
{ HP_POP(pc->autosave, HP_pc_autosave) },
{ HP_POP(pc->follow_timer, HP_pc_follow_timer) },
{ HP_POP(pc->read_skill_tree, HP_pc_read_skill_tree) },
+ { HP_POP(pc->clear_skill_tree, HP_pc_clear_skill_tree) },
{ HP_POP(pc->isUseitem, HP_pc_isUseitem) },
{ HP_POP(pc->show_steal, HP_pc_show_steal) },
{ HP_POP(pc->checkcombo, HP_pc_checkcombo) },
diff --git a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
index ad9d96f03..d7e798637 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.Hooks.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -5499,11 +5499,11 @@ void HP_chrif_skillid2idx(int fd) {
}
return;
}
-bool HP_chrif_sd_to_auth(TBL_PC *sd, enum sd_state state) {
+bool HP_chrif_sd_to_auth(struct map_session_data *sd, enum sd_state state) {
int hIndex = 0;
bool retVal___ = false;
if( HPMHooks.count.HP_chrif_sd_to_auth_pre ) {
- bool (*preHookFunc) (TBL_PC *sd, enum sd_state *state);
+ bool (*preHookFunc) (struct map_session_data *sd, enum sd_state *state);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_chrif_sd_to_auth_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_chrif_sd_to_auth_pre[hIndex].func;
@@ -5518,7 +5518,7 @@ bool HP_chrif_sd_to_auth(TBL_PC *sd, enum sd_state state) {
retVal___ = HPMHooks.source.chrif.sd_to_auth(sd, state);
}
if( HPMHooks.count.HP_chrif_sd_to_auth_post ) {
- bool (*postHookFunc) (bool retVal___, TBL_PC *sd, enum sd_state *state);
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, enum sd_state *state);
for(hIndex = 0; hIndex < HPMHooks.count.HP_chrif_sd_to_auth_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_chrif_sd_to_auth_post[hIndex].func;
retVal___ = postHookFunc(retVal___, sd, &state);
@@ -5553,11 +5553,11 @@ int HP_chrif_check_connect_char_server(int tid, int64 tick, int id, intptr_t dat
}
return retVal___;
}
-bool HP_chrif_auth_logout(TBL_PC *sd, enum sd_state state) {
+bool HP_chrif_auth_logout(struct map_session_data *sd, enum sd_state state) {
int hIndex = 0;
bool retVal___ = false;
if( HPMHooks.count.HP_chrif_auth_logout_pre ) {
- bool (*preHookFunc) (TBL_PC *sd, enum sd_state *state);
+ bool (*preHookFunc) (struct map_session_data *sd, enum sd_state *state);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_chrif_auth_logout_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_chrif_auth_logout_pre[hIndex].func;
@@ -5572,7 +5572,7 @@ bool HP_chrif_auth_logout(TBL_PC *sd, enum sd_state state) {
retVal___ = HPMHooks.source.chrif.auth_logout(sd, state);
}
if( HPMHooks.count.HP_chrif_auth_logout_post ) {
- bool (*postHookFunc) (bool retVal___, TBL_PC *sd, enum sd_state *state);
+ bool (*postHookFunc) (bool retVal___, struct map_session_data *sd, enum sd_state *state);
for(hIndex = 0; hIndex < HPMHooks.count.HP_chrif_auth_logout_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_chrif_auth_logout_post[hIndex].func;
retVal___ = postHookFunc(retVal___, sd, &state);
@@ -27865,11 +27865,11 @@ int HP_guild_payexp_timer(int tid, int64 tick, int id, intptr_t data) {
}
return retVal___;
}
-TBL_PC* HP_guild_sd_check(int guild_id, int account_id, int char_id) {
+struct map_session_data* HP_guild_sd_check(int guild_id, int account_id, int char_id) {
int hIndex = 0;
- TBL_PC* retVal___ = NULL;
+ struct map_session_data* retVal___ = NULL;
if( HPMHooks.count.HP_guild_sd_check_pre ) {
- TBL_PC* (*preHookFunc) (int *guild_id, int *account_id, int *char_id);
+ struct map_session_data* (*preHookFunc) (int *guild_id, int *account_id, int *char_id);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_guild_sd_check_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_guild_sd_check_pre[hIndex].func;
@@ -27884,7 +27884,7 @@ TBL_PC* HP_guild_sd_check(int guild_id, int account_id, int char_id) {
retVal___ = HPMHooks.source.guild.sd_check(guild_id, account_id, char_id);
}
if( HPMHooks.count.HP_guild_sd_check_post ) {
- TBL_PC* (*postHookFunc) (TBL_PC* retVal___, int *guild_id, int *account_id, int *char_id);
+ struct map_session_data* (*postHookFunc) (struct map_session_data* retVal___, int *guild_id, int *account_id, int *char_id);
for(hIndex = 0; hIndex < HPMHooks.count.HP_guild_sd_check_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_guild_sd_check_post[hIndex].func;
retVal___ = postHookFunc(retVal___, &guild_id, &account_id, &char_id);
@@ -40093,6 +40093,33 @@ struct map_session_data* HP_map_id2sd(int id) {
}
return retVal___;
}
+struct npc_data* HP_map_id2nd(int id) {
+ int hIndex = 0;
+ struct npc_data* retVal___ = NULL;
+ if( HPMHooks.count.HP_map_id2nd_pre ) {
+ struct npc_data* (*preHookFunc) (int *id);
+ *HPMforce_return = false;
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2nd_pre; hIndex++ ) {
+ preHookFunc = HPMHooks.list.HP_map_id2nd_pre[hIndex].func;
+ retVal___ = preHookFunc(&id);
+ }
+ if( *HPMforce_return ) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.map.id2nd(id);
+ }
+ if( HPMHooks.count.HP_map_id2nd_post ) {
+ struct npc_data* (*postHookFunc) (struct npc_data* retVal___, int *id);
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2nd_post; hIndex++ ) {
+ postHookFunc = HPMHooks.list.HP_map_id2nd_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, &id);
+ }
+ }
+ return retVal___;
+}
struct mob_data* HP_map_id2md(int id) {
int hIndex = 0;
struct mob_data* retVal___ = NULL;
@@ -40120,14 +40147,14 @@ struct mob_data* HP_map_id2md(int id) {
}
return retVal___;
}
-struct npc_data* HP_map_id2nd(int id) {
+struct flooritem_data* HP_map_id2fi(int id) {
int hIndex = 0;
- struct npc_data* retVal___ = NULL;
- if( HPMHooks.count.HP_map_id2nd_pre ) {
- struct npc_data* (*preHookFunc) (int *id);
+ struct flooritem_data* retVal___ = NULL;
+ if( HPMHooks.count.HP_map_id2fi_pre ) {
+ struct flooritem_data* (*preHookFunc) (int *id);
*HPMforce_return = false;
- for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2nd_pre; hIndex++ ) {
- preHookFunc = HPMHooks.list.HP_map_id2nd_pre[hIndex].func;
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2fi_pre; hIndex++ ) {
+ preHookFunc = HPMHooks.list.HP_map_id2fi_pre[hIndex].func;
retVal___ = preHookFunc(&id);
}
if( *HPMforce_return ) {
@@ -40136,12 +40163,93 @@ struct npc_data* HP_map_id2nd(int id) {
}
}
{
- retVal___ = HPMHooks.source.map.id2nd(id);
+ retVal___ = HPMHooks.source.map.id2fi(id);
}
- if( HPMHooks.count.HP_map_id2nd_post ) {
- struct npc_data* (*postHookFunc) (struct npc_data* retVal___, int *id);
- for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2nd_post; hIndex++ ) {
- postHookFunc = HPMHooks.list.HP_map_id2nd_post[hIndex].func;
+ if( HPMHooks.count.HP_map_id2fi_post ) {
+ struct flooritem_data* (*postHookFunc) (struct flooritem_data* retVal___, int *id);
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2fi_post; hIndex++ ) {
+ postHookFunc = HPMHooks.list.HP_map_id2fi_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, &id);
+ }
+ }
+ return retVal___;
+}
+struct chat_data* HP_map_id2cd(int id) {
+ int hIndex = 0;
+ struct chat_data* retVal___ = NULL;
+ if( HPMHooks.count.HP_map_id2cd_pre ) {
+ struct chat_data* (*preHookFunc) (int *id);
+ *HPMforce_return = false;
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2cd_pre; hIndex++ ) {
+ preHookFunc = HPMHooks.list.HP_map_id2cd_pre[hIndex].func;
+ retVal___ = preHookFunc(&id);
+ }
+ if( *HPMforce_return ) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.map.id2cd(id);
+ }
+ if( HPMHooks.count.HP_map_id2cd_post ) {
+ struct chat_data* (*postHookFunc) (struct chat_data* retVal___, int *id);
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2cd_post; hIndex++ ) {
+ postHookFunc = HPMHooks.list.HP_map_id2cd_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, &id);
+ }
+ }
+ return retVal___;
+}
+struct skill_unit* HP_map_id2su(int id) {
+ int hIndex = 0;
+ struct skill_unit* retVal___ = NULL;
+ if( HPMHooks.count.HP_map_id2su_pre ) {
+ struct skill_unit* (*preHookFunc) (int *id);
+ *HPMforce_return = false;
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2su_pre; hIndex++ ) {
+ preHookFunc = HPMHooks.list.HP_map_id2su_pre[hIndex].func;
+ retVal___ = preHookFunc(&id);
+ }
+ if( *HPMforce_return ) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.map.id2su(id);
+ }
+ if( HPMHooks.count.HP_map_id2su_post ) {
+ struct skill_unit* (*postHookFunc) (struct skill_unit* retVal___, int *id);
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2su_post; hIndex++ ) {
+ postHookFunc = HPMHooks.list.HP_map_id2su_post[hIndex].func;
+ retVal___ = postHookFunc(retVal___, &id);
+ }
+ }
+ return retVal___;
+}
+struct pet_data* HP_map_id2pd(int id) {
+ int hIndex = 0;
+ struct pet_data* retVal___ = NULL;
+ if( HPMHooks.count.HP_map_id2pd_pre ) {
+ struct pet_data* (*preHookFunc) (int *id);
+ *HPMforce_return = false;
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2pd_pre; hIndex++ ) {
+ preHookFunc = HPMHooks.list.HP_map_id2pd_pre[hIndex].func;
+ retVal___ = preHookFunc(&id);
+ }
+ if( *HPMforce_return ) {
+ *HPMforce_return = false;
+ return retVal___;
+ }
+ }
+ {
+ retVal___ = HPMHooks.source.map.id2pd(id);
+ }
+ if( HPMHooks.count.HP_map_id2pd_post ) {
+ struct pet_data* (*postHookFunc) (struct pet_data* retVal___, int *id);
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2pd_post; hIndex++ ) {
+ postHookFunc = HPMHooks.list.HP_map_id2pd_post[hIndex].func;
retVal___ = postHookFunc(retVal___, &id);
}
}
@@ -40201,14 +40309,14 @@ struct mercenary_data* HP_map_id2mc(int id) {
}
return retVal___;
}
-struct chat_data* HP_map_id2cd(int id) {
+struct elemental_data* HP_map_id2ed(int id) {
int hIndex = 0;
- struct chat_data* retVal___ = NULL;
- if( HPMHooks.count.HP_map_id2cd_pre ) {
- struct chat_data* (*preHookFunc) (int *id);
+ struct elemental_data* retVal___ = NULL;
+ if( HPMHooks.count.HP_map_id2ed_pre ) {
+ struct elemental_data* (*preHookFunc) (int *id);
*HPMforce_return = false;
- for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2cd_pre; hIndex++ ) {
- preHookFunc = HPMHooks.list.HP_map_id2cd_pre[hIndex].func;
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2ed_pre; hIndex++ ) {
+ preHookFunc = HPMHooks.list.HP_map_id2ed_pre[hIndex].func;
retVal___ = preHookFunc(&id);
}
if( *HPMforce_return ) {
@@ -40217,12 +40325,12 @@ struct chat_data* HP_map_id2cd(int id) {
}
}
{
- retVal___ = HPMHooks.source.map.id2cd(id);
+ retVal___ = HPMHooks.source.map.id2ed(id);
}
- if( HPMHooks.count.HP_map_id2cd_post ) {
- struct chat_data* (*postHookFunc) (struct chat_data* retVal___, int *id);
- for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2cd_post; hIndex++ ) {
- postHookFunc = HPMHooks.list.HP_map_id2cd_post[hIndex].func;
+ if( HPMHooks.count.HP_map_id2ed_post ) {
+ struct elemental_data* (*postHookFunc) (struct elemental_data* retVal___, int *id);
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_map_id2ed_post; hIndex++ ) {
+ postHookFunc = HPMHooks.list.HP_map_id2ed_post[hIndex].func;
retVal___ = postHookFunc(retVal___, &id);
}
}
@@ -51048,11 +51156,11 @@ void HP_party_fill_member(struct party_member *member, struct map_session_data *
}
return;
}
-TBL_PC* HP_party_sd_check(int party_id, int account_id, int char_id) {
+struct map_session_data* HP_party_sd_check(int party_id, int account_id, int char_id) {
int hIndex = 0;
- TBL_PC* retVal___ = NULL;
+ struct map_session_data* retVal___ = NULL;
if( HPMHooks.count.HP_party_sd_check_pre ) {
- TBL_PC* (*preHookFunc) (int *party_id, int *account_id, int *char_id);
+ struct map_session_data* (*preHookFunc) (int *party_id, int *account_id, int *char_id);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_party_sd_check_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_party_sd_check_pre[hIndex].func;
@@ -51067,7 +51175,7 @@ TBL_PC* HP_party_sd_check(int party_id, int account_id, int char_id) {
retVal___ = HPMHooks.source.party.sd_check(party_id, account_id, char_id);
}
if( HPMHooks.count.HP_party_sd_check_post ) {
- TBL_PC* (*postHookFunc) (TBL_PC* retVal___, int *party_id, int *account_id, int *char_id);
+ struct map_session_data* (*postHookFunc) (struct map_session_data* retVal___, int *party_id, int *account_id, int *char_id);
for(hIndex = 0; hIndex < HPMHooks.count.HP_party_sd_check_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_party_sd_check_post[hIndex].func;
retVal___ = postHookFunc(retVal___, &party_id, &account_id, &char_id);
@@ -56817,6 +56925,32 @@ void HP_pc_read_skill_tree(void) {
}
return;
}
+void HP_pc_clear_skill_tree(void) {
+ int hIndex = 0;
+ if( HPMHooks.count.HP_pc_clear_skill_tree_pre ) {
+ void (*preHookFunc) (void);
+ *HPMforce_return = false;
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_clear_skill_tree_pre; hIndex++ ) {
+ preHookFunc = HPMHooks.list.HP_pc_clear_skill_tree_pre[hIndex].func;
+ preHookFunc();
+ }
+ if( *HPMforce_return ) {
+ *HPMforce_return = false;
+ return;
+ }
+ }
+ {
+ HPMHooks.source.pc.clear_skill_tree();
+ }
+ if( HPMHooks.count.HP_pc_clear_skill_tree_post ) {
+ void (*postHookFunc) (void);
+ for(hIndex = 0; hIndex < HPMHooks.count.HP_pc_clear_skill_tree_post; hIndex++ ) {
+ postHookFunc = HPMHooks.list.HP_pc_clear_skill_tree_post[hIndex].func;
+ postHookFunc();
+ }
+ }
+ return;
+}
int HP_pc_isUseitem(struct map_session_data *sd, int n) {
int hIndex = 0;
int retVal___ = 0;
@@ -58796,11 +58930,11 @@ struct quest_db* HP_quest_db(int quest_id) {
}
return retVal___;
}
-int HP_quest_pc_login(TBL_PC *sd) {
+int HP_quest_pc_login(struct map_session_data *sd) {
int hIndex = 0;
int retVal___ = 0;
if( HPMHooks.count.HP_quest_pc_login_pre ) {
- int (*preHookFunc) (TBL_PC *sd);
+ int (*preHookFunc) (struct map_session_data *sd);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_pc_login_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_quest_pc_login_pre[hIndex].func;
@@ -58815,7 +58949,7 @@ int HP_quest_pc_login(TBL_PC *sd) {
retVal___ = HPMHooks.source.quest.pc_login(sd);
}
if( HPMHooks.count.HP_quest_pc_login_post ) {
- int (*postHookFunc) (int retVal___, TBL_PC *sd);
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd);
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_pc_login_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_quest_pc_login_post[hIndex].func;
retVal___ = postHookFunc(retVal___, sd);
@@ -58823,11 +58957,11 @@ int HP_quest_pc_login(TBL_PC *sd) {
}
return retVal___;
}
-int HP_quest_add(TBL_PC *sd, int quest_id) {
+int HP_quest_add(struct map_session_data *sd, int quest_id) {
int hIndex = 0;
int retVal___ = 0;
if( HPMHooks.count.HP_quest_add_pre ) {
- int (*preHookFunc) (TBL_PC *sd, int *quest_id);
+ int (*preHookFunc) (struct map_session_data *sd, int *quest_id);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_add_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_quest_add_pre[hIndex].func;
@@ -58842,7 +58976,7 @@ int HP_quest_add(TBL_PC *sd, int quest_id) {
retVal___ = HPMHooks.source.quest.add(sd, quest_id);
}
if( HPMHooks.count.HP_quest_add_post ) {
- int (*postHookFunc) (int retVal___, TBL_PC *sd, int *quest_id);
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, int *quest_id);
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_add_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_quest_add_post[hIndex].func;
retVal___ = postHookFunc(retVal___, sd, &quest_id);
@@ -58850,11 +58984,11 @@ int HP_quest_add(TBL_PC *sd, int quest_id) {
}
return retVal___;
}
-int HP_quest_change(TBL_PC *sd, int qid1, int qid2) {
+int HP_quest_change(struct map_session_data *sd, int qid1, int qid2) {
int hIndex = 0;
int retVal___ = 0;
if( HPMHooks.count.HP_quest_change_pre ) {
- int (*preHookFunc) (TBL_PC *sd, int *qid1, int *qid2);
+ int (*preHookFunc) (struct map_session_data *sd, int *qid1, int *qid2);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_change_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_quest_change_pre[hIndex].func;
@@ -58869,7 +59003,7 @@ int HP_quest_change(TBL_PC *sd, int qid1, int qid2) {
retVal___ = HPMHooks.source.quest.change(sd, qid1, qid2);
}
if( HPMHooks.count.HP_quest_change_post ) {
- int (*postHookFunc) (int retVal___, TBL_PC *sd, int *qid1, int *qid2);
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, int *qid1, int *qid2);
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_change_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_quest_change_post[hIndex].func;
retVal___ = postHookFunc(retVal___, sd, &qid1, &qid2);
@@ -58877,11 +59011,11 @@ int HP_quest_change(TBL_PC *sd, int qid1, int qid2) {
}
return retVal___;
}
-int HP_quest_delete(TBL_PC *sd, int quest_id) {
+int HP_quest_delete(struct map_session_data *sd, int quest_id) {
int hIndex = 0;
int retVal___ = 0;
if( HPMHooks.count.HP_quest_delete_pre ) {
- int (*preHookFunc) (TBL_PC *sd, int *quest_id);
+ int (*preHookFunc) (struct map_session_data *sd, int *quest_id);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_delete_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_quest_delete_pre[hIndex].func;
@@ -58896,7 +59030,7 @@ int HP_quest_delete(TBL_PC *sd, int quest_id) {
retVal___ = HPMHooks.source.quest.delete(sd, quest_id);
}
if( HPMHooks.count.HP_quest_delete_post ) {
- int (*postHookFunc) (int retVal___, TBL_PC *sd, int *quest_id);
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, int *quest_id);
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_delete_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_quest_delete_post[hIndex].func;
retVal___ = postHookFunc(retVal___, sd, &quest_id);
@@ -58937,10 +59071,10 @@ int HP_quest_update_objective_sub(struct block_list *bl, va_list ap) {
}
return retVal___;
}
-void HP_quest_update_objective(TBL_PC *sd, int mob_id) {
+void HP_quest_update_objective(struct map_session_data *sd, int mob_id) {
int hIndex = 0;
if( HPMHooks.count.HP_quest_update_objective_pre ) {
- void (*preHookFunc) (TBL_PC *sd, int *mob_id);
+ void (*preHookFunc) (struct map_session_data *sd, int *mob_id);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_update_objective_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_quest_update_objective_pre[hIndex].func;
@@ -58955,7 +59089,7 @@ void HP_quest_update_objective(TBL_PC *sd, int mob_id) {
HPMHooks.source.quest.update_objective(sd, mob_id);
}
if( HPMHooks.count.HP_quest_update_objective_post ) {
- void (*postHookFunc) (TBL_PC *sd, int *mob_id);
+ void (*postHookFunc) (struct map_session_data *sd, int *mob_id);
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_update_objective_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_quest_update_objective_post[hIndex].func;
postHookFunc(sd, &mob_id);
@@ -58963,11 +59097,11 @@ void HP_quest_update_objective(TBL_PC *sd, int mob_id) {
}
return;
}
-int HP_quest_update_status(TBL_PC *sd, int quest_id, enum quest_state qs) {
+int HP_quest_update_status(struct map_session_data *sd, int quest_id, enum quest_state qs) {
int hIndex = 0;
int retVal___ = 0;
if( HPMHooks.count.HP_quest_update_status_pre ) {
- int (*preHookFunc) (TBL_PC *sd, int *quest_id, enum quest_state *qs);
+ int (*preHookFunc) (struct map_session_data *sd, int *quest_id, enum quest_state *qs);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_update_status_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_quest_update_status_pre[hIndex].func;
@@ -58982,7 +59116,7 @@ int HP_quest_update_status(TBL_PC *sd, int quest_id, enum quest_state qs) {
retVal___ = HPMHooks.source.quest.update_status(sd, quest_id, qs);
}
if( HPMHooks.count.HP_quest_update_status_post ) {
- int (*postHookFunc) (int retVal___, TBL_PC *sd, int *quest_id, enum quest_state *qs);
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, int *quest_id, enum quest_state *qs);
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_update_status_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_quest_update_status_post[hIndex].func;
retVal___ = postHookFunc(retVal___, sd, &quest_id, &qs);
@@ -58990,11 +59124,11 @@ int HP_quest_update_status(TBL_PC *sd, int quest_id, enum quest_state qs) {
}
return retVal___;
}
-int HP_quest_check(TBL_PC *sd, int quest_id, enum quest_check_type type) {
+int HP_quest_check(struct map_session_data *sd, int quest_id, enum quest_check_type type) {
int hIndex = 0;
int retVal___ = 0;
if( HPMHooks.count.HP_quest_check_pre ) {
- int (*preHookFunc) (TBL_PC *sd, int *quest_id, enum quest_check_type *type);
+ int (*preHookFunc) (struct map_session_data *sd, int *quest_id, enum quest_check_type *type);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_check_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_quest_check_pre[hIndex].func;
@@ -59009,7 +59143,7 @@ int HP_quest_check(TBL_PC *sd, int quest_id, enum quest_check_type type) {
retVal___ = HPMHooks.source.quest.check(sd, quest_id, type);
}
if( HPMHooks.count.HP_quest_check_post ) {
- int (*postHookFunc) (int retVal___, TBL_PC *sd, int *quest_id, enum quest_check_type *type);
+ int (*postHookFunc) (int retVal___, struct map_session_data *sd, int *quest_id, enum quest_check_type *type);
for(hIndex = 0; hIndex < HPMHooks.count.HP_quest_check_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_quest_check_post[hIndex].func;
retVal___ = postHookFunc(retVal___, sd, &quest_id, &type);
@@ -59444,11 +59578,11 @@ const char* HP_script_conv_str(struct script_state *st, struct script_data *data
}
return retVal___;
}
-TBL_PC* HP_script_rid2sd(struct script_state *st) {
+struct map_session_data* HP_script_rid2sd(struct script_state *st) {
int hIndex = 0;
- TBL_PC* retVal___ = NULL;
+ struct map_session_data* retVal___ = NULL;
if( HPMHooks.count.HP_script_rid2sd_pre ) {
- TBL_PC* (*preHookFunc) (struct script_state *st);
+ struct map_session_data* (*preHookFunc) (struct script_state *st);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_script_rid2sd_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_script_rid2sd_pre[hIndex].func;
@@ -59463,7 +59597,7 @@ TBL_PC* HP_script_rid2sd(struct script_state *st) {
retVal___ = HPMHooks.source.script.rid2sd(st);
}
if( HPMHooks.count.HP_script_rid2sd_post ) {
- TBL_PC* (*postHookFunc) (TBL_PC* retVal___, struct script_state *st);
+ struct map_session_data* (*postHookFunc) (struct map_session_data* retVal___, struct script_state *st);
for(hIndex = 0; hIndex < HPMHooks.count.HP_script_rid2sd_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_script_rid2sd_post[hIndex].func;
retVal___ = postHookFunc(retVal___, st);
@@ -59471,11 +59605,11 @@ TBL_PC* HP_script_rid2sd(struct script_state *st) {
}
return retVal___;
}
-TBL_PC* HP_script_id2sd(struct script_state *st, int account_id) {
+struct map_session_data* HP_script_id2sd(struct script_state *st, int account_id) {
int hIndex = 0;
- TBL_PC* retVal___ = NULL;
+ struct map_session_data* retVal___ = NULL;
if( HPMHooks.count.HP_script_id2sd_pre ) {
- TBL_PC* (*preHookFunc) (struct script_state *st, int *account_id);
+ struct map_session_data* (*preHookFunc) (struct script_state *st, int *account_id);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_script_id2sd_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_script_id2sd_pre[hIndex].func;
@@ -59490,7 +59624,7 @@ TBL_PC* HP_script_id2sd(struct script_state *st, int account_id) {
retVal___ = HPMHooks.source.script.id2sd(st, account_id);
}
if( HPMHooks.count.HP_script_id2sd_post ) {
- TBL_PC* (*postHookFunc) (TBL_PC* retVal___, struct script_state *st, int *account_id);
+ struct map_session_data* (*postHookFunc) (struct map_session_data* retVal___, struct script_state *st, int *account_id);
for(hIndex = 0; hIndex < HPMHooks.count.HP_script_id2sd_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_script_id2sd_post[hIndex].func;
retVal___ = postHookFunc(retVal___, st, &account_id);
@@ -59498,11 +59632,11 @@ TBL_PC* HP_script_id2sd(struct script_state *st, int account_id) {
}
return retVal___;
}
-TBL_PC* HP_script_charid2sd(struct script_state *st, int char_id) {
+struct map_session_data* HP_script_charid2sd(struct script_state *st, int char_id) {
int hIndex = 0;
- TBL_PC* retVal___ = NULL;
+ struct map_session_data* retVal___ = NULL;
if( HPMHooks.count.HP_script_charid2sd_pre ) {
- TBL_PC* (*preHookFunc) (struct script_state *st, int *char_id);
+ struct map_session_data* (*preHookFunc) (struct script_state *st, int *char_id);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_script_charid2sd_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_script_charid2sd_pre[hIndex].func;
@@ -59517,7 +59651,7 @@ TBL_PC* HP_script_charid2sd(struct script_state *st, int char_id) {
retVal___ = HPMHooks.source.script.charid2sd(st, char_id);
}
if( HPMHooks.count.HP_script_charid2sd_post ) {
- TBL_PC* (*postHookFunc) (TBL_PC* retVal___, struct script_state *st, int *char_id);
+ struct map_session_data* (*postHookFunc) (struct map_session_data* retVal___, struct script_state *st, int *char_id);
for(hIndex = 0; hIndex < HPMHooks.count.HP_script_charid2sd_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_script_charid2sd_post[hIndex].func;
retVal___ = postHookFunc(retVal___, st, &char_id);
@@ -59525,11 +59659,11 @@ TBL_PC* HP_script_charid2sd(struct script_state *st, int char_id) {
}
return retVal___;
}
-TBL_PC* HP_script_nick2sd(struct script_state *st, const char *name) {
+struct map_session_data* HP_script_nick2sd(struct script_state *st, const char *name) {
int hIndex = 0;
- TBL_PC* retVal___ = NULL;
+ struct map_session_data* retVal___ = NULL;
if( HPMHooks.count.HP_script_nick2sd_pre ) {
- TBL_PC* (*preHookFunc) (struct script_state *st, const char *name);
+ struct map_session_data* (*preHookFunc) (struct script_state *st, const char *name);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_script_nick2sd_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_script_nick2sd_pre[hIndex].func;
@@ -59544,7 +59678,7 @@ TBL_PC* HP_script_nick2sd(struct script_state *st, const char *name) {
retVal___ = HPMHooks.source.script.nick2sd(st, name);
}
if( HPMHooks.count.HP_script_nick2sd_post ) {
- TBL_PC* (*postHookFunc) (TBL_PC* retVal___, struct script_state *st, const char *name);
+ struct map_session_data* (*postHookFunc) (struct map_session_data* retVal___, struct script_state *st, const char *name);
for(hIndex = 0; hIndex < HPMHooks.count.HP_script_nick2sd_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_script_nick2sd_post[hIndex].func;
retVal___ = postHookFunc(retVal___, st, name);
@@ -61545,11 +61679,11 @@ void HP_script_errorwarning_sub(StringBuf *buf, const char *src, const char *fil
}
return;
}
-int HP_script_set_reg(struct script_state *st, TBL_PC *sd, int64 num, const char *name, const void *value, struct reg_db *ref) {
+int HP_script_set_reg(struct script_state *st, struct map_session_data *sd, int64 num, const char *name, const void *value, struct reg_db *ref) {
int hIndex = 0;
int retVal___ = 0;
if( HPMHooks.count.HP_script_set_reg_pre ) {
- int (*preHookFunc) (struct script_state *st, TBL_PC *sd, int64 *num, const char *name, const void *value, struct reg_db *ref);
+ int (*preHookFunc) (struct script_state *st, struct map_session_data *sd, int64 *num, const char *name, const void *value, struct reg_db *ref);
*HPMforce_return = false;
for(hIndex = 0; hIndex < HPMHooks.count.HP_script_set_reg_pre; hIndex++ ) {
preHookFunc = HPMHooks.list.HP_script_set_reg_pre[hIndex].func;
@@ -61564,7 +61698,7 @@ int HP_script_set_reg(struct script_state *st, TBL_PC *sd, int64 num, const char
retVal___ = HPMHooks.source.script.set_reg(st, sd, num, name, value, ref);
}
if( HPMHooks.count.HP_script_set_reg_post ) {
- int (*postHookFunc) (int retVal___, struct script_state *st, TBL_PC *sd, int64 *num, const char *name, const void *value, struct reg_db *ref);
+ int (*postHookFunc) (int retVal___, struct script_state *st, struct map_session_data *sd, int64 *num, const char *name, const void *value, struct reg_db *ref);
for(hIndex = 0; hIndex < HPMHooks.count.HP_script_set_reg_post; hIndex++ ) {
postHookFunc = HPMHooks.list.HP_script_set_reg_post[hIndex].func;
retVal___ = postHookFunc(retVal___, st, sd, &num, name, value, ref);
diff --git a/src/plugins/HPMHooking/HPMHooking_map.sources.inc b/src/plugins/HPMHooking/HPMHooking_map.sources.inc
index bab4f3931..1af35ab21 100644
--- a/src/plugins/HPMHooking/HPMHooking_map.sources.inc
+++ b/src/plugins/HPMHooking/HPMHooking_map.sources.inc
@@ -2,7 +2,7 @@
* This file is part of Hercules.
* http://herc.ws - http://github.com/HerculesWS/Hercules
*
- * Copyright (C) 2013-2015 Hercules Dev Team
+ * Copyright (C) 2013-2016 Hercules Dev Team
*
* Hercules is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by