From bc4deaf81d9701261baac6a10d762b0f40e7f65f Mon Sep 17 00:00:00 2001 From: mekolat Date: Thu, 11 Jun 2015 11:13:11 -0400 Subject: initial commit for magic v3 Fix Druid Tree and add hug to TMW --- world/map/.gitignore | 1 + world/map/conf/magic-level0.sex | 39 - world/map/conf/magic-level1.sex | 494 ------- world/map/conf/magic-level2.sex | 1462 -------------------- world/map/conf/magic-level3.sex | 179 --- world/map/conf/magic-level4.sex | 3 - world/map/conf/magic-level5.sex | 55 - world/map/conf/magic-misc.sex | 112 -- world/map/conf/magic-procedures.sex | 7 +- world/map/conf/magic-quests.sex | 154 --- world/map/conf/tmwa-map.conf | 17 +- world/map/db/const-magic.txt | 62 + world/map/db/const.txt | 69 +- world/map/db/params.txt | 51 + world/map/npc/001-1/ched.txt | 4 +- world/map/npc/001-1/children.txt | 2 +- world/map/npc/001-1/guards.txt | 2 +- world/map/npc/001-2/government_building.txt | 8 +- world/map/npc/001-2/pauline.txt | 10 +- world/map/npc/001-2/tondar.txt | 2 +- world/map/npc/001-2/wizards.txt | 99 +- world/map/npc/002-1/elanore.txt | 14 +- world/map/npc/006-1/spirit.txt | 4 +- world/map/npc/006-1/tree.txt | 6 - world/map/npc/007-2/witch.txt | 8 +- world/map/npc/008-1/hinnak.txt | 2 +- world/map/npc/009-2/misc.txt | 2 +- world/map/npc/009-2/wyara.txt | 6 +- world/map/npc/009-3/sword.txt | 4 +- world/map/npc/009-6/brodomir.txt | 2 +- world/map/npc/009-7/eventHandler.txt | 2 +- world/map/npc/009-7/rouge.txt | 4 +- world/map/npc/011-1/auldsbel.txt | 20 +- world/map/npc/012-3/mana-seed.txt | 2 +- world/map/npc/013-1/sagatha.txt | 14 +- world/map/npc/013-2/wizard.txt | 2 +- world/map/npc/014-1/wedding-officiator.txt | 12 +- world/map/npc/015-1/sword.txt | 6 +- world/map/npc/017-4/waric.txt | 12 +- world/map/npc/017-9/npcs.txt | 10 + world/map/npc/027-6/general_krukan.txt | 4 +- world/map/npc/027-7/general_razha.txt | 4 +- world/map/npc/027-8/general_terogan.txt | 4 +- world/map/npc/029-1/barrier.txt | 2 +- world/map/npc/029-2/morgan.txt | 8 +- world/map/npc/029-2/tanisha.txt | 2 +- world/map/npc/029-3/parua.txt | 6 +- world/map/npc/030-4/mana_battery.txt | 6 +- world/map/npc/031-4/cindyCave.txt | 4 +- world/map/npc/033-1/kimarr.txt | 2 +- world/map/npc/051-3/ambush.txt | 4 +- world/map/npc/051-3/reinforcements.txt | 4 +- world/map/npc/052-1/channelling.txt | 10 +- world/map/npc/052-2/lobby.txt | 2 +- world/map/npc/052-2/partyroom.txt | 8 +- world/map/npc/052-2/storage.txt | 10 +- .../map/npc/commands/_atcommand_local.txt.example | 12 + world/map/npc/commands/_import.txt | 4 + world/map/npc/commands/_procedures.txt | 53 + world/map/npc/commands/marry.txt | 69 + world/map/npc/commands/zeny.txt | 77 ++ world/map/npc/doc/magic | 23 - world/map/npc/functions/debug.txt | 40 +- world/map/npc/functions/global_event_handler.txt | 1 + world/map/npc/functions/hug.txt | 24 + world/map/npc/functions/strangerquiz.txt | 2 +- world/map/npc/functions/superdebug.txt | 16 +- world/map/npc/items/check_wand.txt | 65 - world/map/npc/items/magic_gm_top_hat.txt | 16 +- world/map/npc/magic/README.md | 63 + world/map/npc/magic/_import.txt | 38 + world/map/npc/magic/_procedures.txt | 135 ++ world/map/npc/magic/level0-wand.txt | 74 + world/map/npc/magic/level1-aggravate.txt | 22 + world/map/npc/magic/level1-detect-magic.txt | 29 + world/map/npc/magic/level1-experience.txt | 41 + world/map/npc/magic/level1-flare-dart.txt | 33 + world/map/npc/magic/level1-grow-alizarin.txt | 37 + world/map/npc/magic/level1-grow-cobalt.txt | 37 + world/map/npc/magic/level1-grow-gamboge.txt | 37 + world/map/npc/magic/level1-grow-mauve.txt | 37 + world/map/npc/magic/level1-lesser-heal.txt | 41 + world/map/npc/magic/level1-magic-blade.txt | 34 + world/map/npc/magic/level1-make-sulphur.txt | 24 + world/map/npc/magic/level1-summon-maggots.txt | 52 + world/map/npc/magic/level1-transmute-wood.txt | 36 + world/map/npc/magic/level2-arrow-hail.txt | 112 ++ world/map/npc/magic/level2-barrier.txt | 48 + world/map/npc/magic/level2-detect-players.txt | 32 + world/map/npc/magic/level2-enchant-lifestone.txt | 35 + world/map/npc/magic/level2-flying-backpack.txt | 39 + world/map/npc/magic/level2-happy-curse.txt | 42 + world/map/npc/magic/level2-hide.txt | 43 + world/map/npc/magic/level2-lay-on-hands.txt | 57 + world/map/npc/magic/level2-lightning-strike.txt | 67 + world/map/npc/magic/level2-magic-knuckles.txt | 32 + world/map/npc/magic/level2-make-arrows.txt | 26 + world/map/npc/magic/level2-make-iron-powder.txt | 26 + world/map/npc/magic/level2-protect.txt | 48 + world/map/npc/magic/level2-rain.txt | 103 ++ world/map/npc/magic/level2-shear.txt | 49 + world/map/npc/magic/level2-summon-fluffies.txt | 53 + world/map/npc/magic/level2-summon-mouboo.txt | 53 + world/map/npc/magic/level2-summon-pinkie.txt | 53 + world/map/npc/magic/level2-summon-snakes.txt | 54 + .../map/npc/magic/level2-summon-spiky-mushroom.txt | 53 + .../map/npc/magic/level2-summon-wickedmushroom.txt | 54 + world/map/npc/magic/level2-toxic-dart.txt | 36 + world/map/npc/magic/level3-necromancy.txt | 54 + world/map/npc/scripts.conf | 7 + 110 files changed, 2516 insertions(+), 2876 deletions(-) delete mode 100644 world/map/conf/magic-level0.sex delete mode 100644 world/map/conf/magic-level1.sex delete mode 100644 world/map/conf/magic-level2.sex delete mode 100644 world/map/conf/magic-level3.sex delete mode 100644 world/map/conf/magic-level4.sex delete mode 100644 world/map/conf/magic-level5.sex delete mode 100644 world/map/conf/magic-quests.sex create mode 100644 world/map/db/const-magic.txt create mode 100644 world/map/db/params.txt create mode 100644 world/map/npc/commands/_atcommand_local.txt.example create mode 100644 world/map/npc/commands/_import.txt create mode 100644 world/map/npc/commands/_procedures.txt create mode 100644 world/map/npc/commands/marry.txt create mode 100644 world/map/npc/commands/zeny.txt delete mode 100644 world/map/npc/doc/magic create mode 100644 world/map/npc/functions/hug.txt create mode 100644 world/map/npc/magic/README.md create mode 100644 world/map/npc/magic/_import.txt create mode 100644 world/map/npc/magic/_procedures.txt create mode 100644 world/map/npc/magic/level0-wand.txt create mode 100644 world/map/npc/magic/level1-aggravate.txt create mode 100644 world/map/npc/magic/level1-detect-magic.txt create mode 100644 world/map/npc/magic/level1-experience.txt create mode 100644 world/map/npc/magic/level1-flare-dart.txt create mode 100644 world/map/npc/magic/level1-grow-alizarin.txt create mode 100644 world/map/npc/magic/level1-grow-cobalt.txt create mode 100644 world/map/npc/magic/level1-grow-gamboge.txt create mode 100644 world/map/npc/magic/level1-grow-mauve.txt create mode 100644 world/map/npc/magic/level1-lesser-heal.txt create mode 100644 world/map/npc/magic/level1-magic-blade.txt create mode 100644 world/map/npc/magic/level1-make-sulphur.txt create mode 100644 world/map/npc/magic/level1-summon-maggots.txt create mode 100644 world/map/npc/magic/level1-transmute-wood.txt create mode 100644 world/map/npc/magic/level2-arrow-hail.txt create mode 100644 world/map/npc/magic/level2-barrier.txt create mode 100644 world/map/npc/magic/level2-detect-players.txt create mode 100644 world/map/npc/magic/level2-enchant-lifestone.txt create mode 100644 world/map/npc/magic/level2-flying-backpack.txt create mode 100644 world/map/npc/magic/level2-happy-curse.txt create mode 100644 world/map/npc/magic/level2-hide.txt create mode 100644 world/map/npc/magic/level2-lay-on-hands.txt create mode 100644 world/map/npc/magic/level2-lightning-strike.txt create mode 100644 world/map/npc/magic/level2-magic-knuckles.txt create mode 100644 world/map/npc/magic/level2-make-arrows.txt create mode 100644 world/map/npc/magic/level2-make-iron-powder.txt create mode 100644 world/map/npc/magic/level2-protect.txt create mode 100644 world/map/npc/magic/level2-rain.txt create mode 100644 world/map/npc/magic/level2-shear.txt create mode 100644 world/map/npc/magic/level2-summon-fluffies.txt create mode 100644 world/map/npc/magic/level2-summon-mouboo.txt create mode 100644 world/map/npc/magic/level2-summon-pinkie.txt create mode 100644 world/map/npc/magic/level2-summon-snakes.txt create mode 100644 world/map/npc/magic/level2-summon-spiky-mushroom.txt create mode 100644 world/map/npc/magic/level2-summon-wickedmushroom.txt create mode 100644 world/map/npc/magic/level2-toxic-dart.txt create mode 100644 world/map/npc/magic/level3-necromancy.txt (limited to 'world') diff --git a/world/map/.gitignore b/world/map/.gitignore index 2c681650..07be4021 100644 --- a/world/map/.gitignore +++ b/world/map/.gitignore @@ -5,3 +5,4 @@ /db/const-debugflag.txt /npc/functions/motd.txt +/npc/commands/_atcommand_local.txt diff --git a/world/map/conf/magic-level0.sex b/world/map/conf/magic-level0.sex deleted file mode 100644 index f376b2cd..00000000 --- a/world/map/conf/magic-level0.sex +++ /dev/null @@ -1,39 +0,0 @@ -"--------------------------------------------------------------------------------" -" Level 0 spells " -"--------------------------------------------------------------------------------" -(SPELL () wand "#confringo" () - (LET school MAGIC) - (=> - (GUARD - (CASTTIME 500)) - (EFFECT - (SCRIPT "{callfunc \"CheckWand\";}") - (IF (== - (script_int caster "@Wand") - 0) - (ABORT)) - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL install_attack_spell - (+ (script_int caster "@Wand") - (/ spellpower 10)) - 1200 - 3 - (script_int caster "@WandID")) - (CALL gain_xp 1 3) - (ATTRIGGER - (CALL attack_check target) - (SCRIPT "{callfunc \"WandMana\";}") - (IF (== - (script_int caster "@WandAttack") - 0) - (ABORT)) - (SET damage - (* (script_int caster "@Wand") - (/ spellpower - 3))) - (SET damage_bonus - (* (script_int caster "@Wand") - (/ spellpower - 3))) - (CALL elt_damage target damage damage_bonus ELT_NEUTRAL ELT_NEUTRAL 5))))) diff --git a/world/map/conf/magic-level1.sex b/world/map/conf/magic-level1.sex deleted file mode 100644 index da29ad22..00000000 --- a/world/map/conf/magic-level1.sex +++ /dev/null @@ -1,494 +0,0 @@ -"--------------------------------------------------------------------------------" -" Level 1 spells " -"--------------------------------------------------------------------------------" -(SPELL () ask-magic-exp "#abizit" () - (LET level 1) - (LET school MAGIC) - (=> - (GUARD - (MANA 1) - (CASTTIME 1000) - (REQUIRE - (>= - (skill caster MAGIC) - level))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (SET level - (skill caster MAGIC)) - (SET experience - (& - (>> - (script_int caster SCRIPT_XP) - SCRIPT_XP_SHIFT) - SCRIPT_XP_MASK)) - (IF (&& - (== experience SCRIPT_XP_MASK) - (> level 4)) - (message caster "You are as proficient at magic as you can possibly be.") - (BLOCK "This duplicates the table in mana-seed.txt" - (IF (> level 4) - (SET max_experience SCRIPT_XP_MASK) - (IF (== level 4) - (SET max_experience 40000) - (IF (== level 3) - (SET max_experience 8000) - (IF (== level 2) - (SET max_experience 1200) - (SET max_experience 100))))) - (SET ratio - (/ - (- - (* 10 experience) - (random - (/ max_experience 30))) - max_experience)) "Randomness: jitter a bit at the transitions to give more precise information if used frequently" - (IF (>= ratio 45) - (message caster - (+ "Magic flows naturally from you, readily and with ease. Your understanding of what you can currently control at present is flawless, far beyond your requirements to cast magic at this level." - (if_then_else - (>= level MAX_MAGIC_LEVEL) - "" - " Surely the Mana Seed will more than readily offer more magic for such a proficient user."))) - (IF (>= ratio 20) - (message caster "You have perfect control of what you understand now, but there is now a distinct sensation of something more, something indescribable. If only the Mana Seed would give more magic to you...") - (IF (>= ratio 10) - (message caster - (+ "You feel in perfect control of your magic" - (if_then_else - (>= level MAX_MAGIC_LEVEL) - "." - ", and seem on the verge of something more... perhaps you should see the Mana Seed to ask for more magic?"))) - (IF (>= ratio 9) - (message caster "You feel in almost perfect control of your magic.") - (IF (>= ratio 8) - (message caster "You feel that you have very good control of your magic.") - (IF (>= ratio 7) - (message caster "You feel quite in control of your magic.") - (IF (>= ratio 6) - (message caster "You feel mostly in control of your magic.") - (IF (>= ratio 5) - (message caster "You feel somewhat in control of your magic.") - (IF (>= ratio 4) - (message caster "You feel you still have a few difficulties in controlling your magic.") - (IF (>= ratio 3) - (message caster "Trying to control your magic is still rather troublesome.") - (IF (>= ratio 2) - (message caster "You feel that you have only the bare minimum of control over your magic.") - (IF (>= ratio 1) - (message caster "You feel quite overwhelmed by your magic, but are beginning to see patterns.") - (message caster "You feel completely overwhelmed by your magic.")))))))))))))))))) - -(SPELL () transmute-wood-to-figurine "#parum" (STRING name) - (LET level 1) - (LET school TRANSMUTE) - (=> - (GUARD - (MANA 5) - (CASTTIME 4000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (COMPONENTS "RawLog")) - (| - (=> - (REQUIRE - (== name "boo")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL create_item "MoubooFigurine" 1 "WarpedLog" 40) - (CALL gain_xp 1 0))) - (=> - (REQUIRE - (== name "lurk")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL create_item "WarpedLog" 1 "WarpedLog" 40) - (message caster "You have no idea what a Skytlurk looks like.")))))) - -(SPELL () make-sulphur "#gole" () - (LET level 1) - (LET school TRANSMUTE) - (=> - (GUARD - (MANA 4) - (CASTTIME 4000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (COMPONENTS "PileOfAsh")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL create_item "SulphurPowder" - (+ - (+ 1 - (/ spellpower 100)) - (/ - (random - (max 1 - (- 800 spellpower))) - 180)) - "PileOfAsh" - 50) - (CALL gain_xp 1 1)))) - -(SPELL () lesser-heal "#lum" (STRING target) - (LET level 1) - (LET school LIFE) - (=> - (GUARD - (MANA 6) - (CASTTIME 500) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (if_then_else - (failed - (pc target)) - 1 - (< - (rdistance - (location caster) - (location - (pc target))) - (+ 2 - (/ spellpower 100))))) - (GUARD - (COMPONENTS "Lifestone"))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (IF (failed - (pc target)) - (BLOCK - (IF (&& - (|| - (== target "mouboo") - (== target "Mouboo")) - (< - (rdistance - (location caster) - (location - (npc "Mouboo"))) - (+ 2 - (/ spellpower 100)))) - (SCRIPT "{ - mes \"Your spell seems to have no effect on the mouboo.\"; - close; - }") - (SET target caster))) - (BLOCK - (SET target - (pc target)) - (IF (is_dead target) - (ABORT)))) - (CALL gain_heal_xp - (min 200 - (- - (max_hp target) - (hp target))) - 1 - 2 - 2) "report half values for non-instaheal" - (CALL heal target 200) - (IF (> - (skill caster DARK) - 1) - (status_change caster SC_HALT_REGENERATE 0 0 0 0 2000)) - (CALL gain_xp 1 2)))) - -(SPELL () flare-dart "#flar" () - (LET level 1) - (LET school WAR) - (=> - (GUARD - (MANA 10) - (CASTTIME 500) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (GUARD - (OR - (REQUIRE - (> - (skill caster school) - 2)) - (COMPONENTS "SulphurPowder")))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (SET damage - (* 5 - (sqrt spellpower))) - (SET damage_bonus - (+ 5 - (/ - (level caster) - 3))) - (CALL install_attack_spell - (+ 3 - (/ spellpower 50)) - 1200 - 4 - 31) - (CALL gain_xp 1 3) - (ATTRIGGER - (CALL attack_check target) - (CALL elt_damage target damage damage_bonus ELT_WATER ELT_FIRE 15))))) - -(SPELL () magic-blade "#chiza" () - (LET level 1) - (LET school WAR) - (=> - (GUARD - (MANA 9) - (CASTTIME 500) - (REQUIRE - (>= - (skill caster MAGIC) - level))) - (| - (=> - (COMPONENTS "SharpKnife") - (EFFECT - (CALL adjust_spellpower WAR) - (CALL default_effect) - (CALL install_melee_spell - (+ 10 - (/ spellpower 15)) - 1200 - 30) - (CALL gain_xp 1 4) - (ATTRIGGER - (CALL melee_damage target 60 - (+ 5 - (str caster)))))) - (=> - (COMPONENTS "Knife") - (EFFECT - (CALL adjust_spellpower WAR) - (CALL default_effect) - (CALL install_melee_spell - (+ 10 - (/ spellpower 15)) - 1200 - 30) - (CALL gain_xp 1 5) - (ATTRIGGER - (CALL melee_damage target 40 - (+ 5 - (str caster))))))))) - -(SPELL () aggravate "#itenplz" () - (LET level 1) - (LET school NATURE) - (=> - (GUARD - (MANA 3) - (CASTTIME 1000) - (REQUIRE - (>= - (skill caster MAGIC) - level))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (FOREACH MOB target - (rbox - (location caster) - (+ 2 - (/ spellpower 50))) - (IF (line_of_sight - (location caster) - (location target)) - (BLOCK - (CALL sfx_generic target) - (aggravate target 0 caster))))))) - -(SPELL () grow-mauve "#modrilax" () - (LET level 1) - (LET school NATURE) - (=> - (GUARD - (MANA 4) - (CASTTIME 2000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (COMPONENTS "MauveHerb" "Root")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL gain_xp 1 6) - (CALL summon_spell 1029 - (+ - (/ - (skill caster school) - 2) - 1) - (- 4000 - (* spellpower 9)) - (+ 10000 - (* spellpower 50)) - 999999 - school)))) - -(SPELL () grow-alizarin "#modriphoo" () - (LET level 1) - (LET school NATURE) - (=> - (GUARD - (MANA 4) - (CASTTIME 2000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (COMPONENTS "AlizarinHerb" "Root")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL gain_xp 1 7) - (CALL summon_spell 1032 - (+ - (/ - (skill caster school) - 2) - 1) - (- 4000 - (* spellpower 9)) - (+ 10000 - (* spellpower 50)) - 999999 - school)))) - -(SPELL () grow-gamboge "#modriyikam" () - (LET level 1) - (LET school NATURE) - (=> - (GUARD - (MANA 4) - (CASTTIME 2000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (COMPONENTS "GambogeHerb" "Root")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL gain_xp 1 8) - (CALL summon_spell 1031 - (+ - (/ - (skill caster school) - 2) - 1) - (- 4000 - (* spellpower 9)) - (+ 10000 - (* spellpower 50)) - 999999 - school)))) - -(SPELL () grow-cobalt "#modrisump" () - (LET level 1) - (LET school NATURE) - (=> - (GUARD - (MANA 4) - (CASTTIME 2000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (COMPONENTS "CobaltHerb" "Root")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL gain_xp 1 9) - (CALL summon_spell 1030 - (+ - (/ - (skill caster school) - 2) - 1) - (- 4000 - (* spellpower 9)) - (+ 10000 - (* spellpower 50)) - 999999 - school)))) - -(SPELL (LOCAL) summon-maggots "#kalmurk" () - (LET level 1) - (LET school ASTRAL) - (=> - (GUARD - (MANA 21) - (CASTTIME 20000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (COMPONENTS "MaggotSlime" "Root")) - (EFFECT - (CALL adjust_spellpower school) - (CALL gain_xp 1 10) - (CALL summon_spell 1002 - (+ 1 - (/ - (+ - (sqrt spellpower) - (/ spellpower 15)) - 5)) - (- 5000 - (* spellpower 5)) - (+ 10000 - (* spellpower 50)) - 1 - school)))) - -(SPELL () detect-magic "#miteyo" () - (LET level 1) - (LET school MAGIC) - (=> - (GUARD - (MANA 3) - (CASTTIME 6000) - (REQUIRE - (>= - (skill caster MAGIC) - level))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (SET range - (+ 1 - (/ spellpower 50))) - (FOREACH NPC n - (rbox - (location caster) - range) - (IF (|| - (contains_string - (name_of n) - "#MAGIC") - (contains_string - (name_of n) - "#_M")) - (sfx n SFX_DEFAULT 0))) - (FOREACH SPELL s (rbox - (location caster) - range) (IF (!= s self_invocation) - (sfx s SFX_DEFAULT 0)))))) diff --git a/world/map/conf/magic-level2.sex b/world/map/conf/magic-level2.sex deleted file mode 100644 index e4bd6908..00000000 --- a/world/map/conf/magic-level2.sex +++ /dev/null @@ -1,1462 +0,0 @@ -"--------------------------------------------------------------------------------" -" Level 2 spells " -"--------------------------------------------------------------------------------" -(SPELL () make-arrows "#kularzufrill" () - (LET level 2) - (LET school TRANSMUTE) - (=> - (GUARD - (MANA 8) - (CASTTIME 5000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS "RawLog")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL create_item "Arrow" - (+ - (+ 1 - (/ spellpower 40)) - (/ - (random - (max 1 - (- 800 spellpower))) - 80)) - "WarpedLog" - 500) - (CALL gain_xp 1 11)))) - -(SPELL () make-shirt "#patmuploo" () - (LET level 2) - (LET school TRANSMUTE) - (=> - (GUARD - (MANA 25) - (CASTTIME 5000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS - (5 "CottonCloth"))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL create_item "CottonShirt" 1 "CottonCloth" 425) - (CALL gain_xp 2 12)))) - -(SPELL () make-tanktop "#patloree" () - (LET level 2) - (LET school TRANSMUTE) - (=> - (GUARD - (MANA 25) - (CASTTIME 5000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS - (4 "CottonCloth"))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL create_item "TankTop" 1 "CottonCloth" 350) - (CALL gain_xp 2 13)))) - -(SPELL () make-short-tanktop "#patviloree" () - (LET level 2) - (LET school TRANSMUTE) - (=> - (GUARD - (MANA 25) - (CASTTIME 5000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS - (3 "CottonCloth"))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL create_item "ShortTankTop" 1 "CottonCloth" 250) - (CALL gain_xp 2 14)))) - -(SPELL () make-iron-powder "#zukminbirf" () - (LET level 2) - (LET school TRANSMUTE) - (=> - (GUARD - (MANA 8) - (CASTTIME 5000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS "IronOre")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL create_item "IronPowder" - (+ - (+ 1 - (/ spellpower 140)) - (/ - (random - (max 1 - (- 900 spellpower))) - 220)) - "IronOre" - 700) - (CALL gain_xp 3 15)))) - -(SPELL () make-concentration-potion "#loshira" () - (LET level 2) - (LET school TRANSMUTE) - (=> - (GUARD - (MANA 8) - (CASTTIME 5000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS "BottleOfWater" - (2 "CobaltHerb") - (2 "PinkPetal"))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL create_item - (if_then_else - (< - (random - (+ 2000 experience)) - experience) - "ConcentrationPotion" - "DarkConcentrationPotion") - 1 - (if_then_else - (random 2) - "DilutedConcentrationPot" - "DarkConcentrationPotion") - 2000) - (IF success - (CALL set_var MAGIC_FLAGS 1 MFLAG_MADE_CONC_POTION_SHIFT 1)) - (CALL gain_xp 4 16)))) - -(SPELL () merge-concentration-potions "#skrimp" () - (LET level 2) - (LET school TRANSMUTE) - (=> - (GUARD - (MANA 8) - (CASTTIME 5000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS "DarkConcentrationPotion" "DilutedConcentrationPot")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL create_item "ConcentrationPotion" 1 "DilutedConcentrationPot" 1000) - (message caster - (+ "success = " success)) - (IF success - (CALL set_var MAGIC_FLAGS 1 MFLAG_MADE_CONC_POTION_SHIFT 1)) - (CALL gain_xp 4 17)))) - -(SPELL () lay-on-hands "#inma" (STRING target) - (LET level 2) - (LET school LIFE) - (=> - (GUARD - (MANA 10) - (CASTTIME 500) - (REQUIRE - (> - (hp caster) - (/ - (max_hp caster) - 20))) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (REQUIRE - (if_then_else - (failed - (pc target)) - 1 - (&& - (&& - (&& - (!= - (pc target) - caster) - (< - (rdistance - (location caster) - (location - (pc target))) - (+ 2 - (/ - (+ - (* 12 - (sqrt spellpower)) - spellpower) - 100)))) - (not - (running_status_update - (pc target) - SC_HALT_REGENERATE))) - (not - (is_equipped - (pc target) - "MagicGMTopHat")))))) - (EFFECT - (CALL adjust_spellpower school) - (IF (not target) - (ABORT)) - (IF (failed - (pc target)) - (BLOCK - (IF (&& - (|| - (== target "mouboo") - (== target "Mouboo")) - (< - (rdistance - (location caster) - (location - (npc "Mouboo"))) - (+ 2 - (/ spellpower 100)))) - (BLOCK - (SET needed 1000) - (SCRIPT "{ - set @spell, 1; - callfunc \"QuestMoubooHeal\"; - }")) - (ABORT))) - (BLOCK - (SET target - (pc target)) - (SET needed - (- - (max_hp target) - (hp target))))) - (SET pay_fraction - (max 80 - (- 200 - (+ - (vit caster) - (/ spellpower 10))))) "Pay at least 40%" - (SET payment - (/ - (* needed pay_fraction) - 200)) - (SET available - (- - (hp caster) - (/ - (max_hp caster) - 20))) - (IF (< payment available) - (SET power needed) - (BLOCK - (SET payment available) - (SET power - (/ - (* available 200) - pay_fraction)))) - (CALL gain_heal_xp power 1 1 3) - (CALL quickheal target power) - (SET t 5000) "with dark magic skill you pay 1/20 of max hp but the regenerate cooldown is cut in half" - (SET school DARK) - (SET h - (* - (/ - (max_hp caster) - 20) - -1)) - (IF (>= - (skill caster school) - level) - (itemheal caster h 0)) - (IF (>= - (skill caster school) - level) - (SET t 10000)) - (status_change caster SC_HALT_REGENERATE 0 0 0 0 t) - (CALL gain_xp - (min 4 - (/ payment 100)) - 18)))) - -(SPELL () lightning-strike "#ingrav" () - (LET level 2) - (LET school WAR) - (=> - (GUARD - (MANA 20) - (CASTTIME 1000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (GUARD - (OR - (REQUIRE - (>= - (skill caster school) "The spell is free at magic lv 4" - 4)) - (COMPONENTS "IronPowder")))) - (EFFECT - (CALL adjust_spellpower school) - (SET damage spellpower) - (SET damage_bonus - (+ 1 - (/ spellpower 2))) - (CALL install_attack_spell - (+ 1 - (/ spellpower 90)) - 3000 - 8 - 31) - (CALL gain_xp 2 19) - (ATTRIGGER - (CALL attack_check target) - (SET in_rain 0) - (SET area - (location caster)) - (FOREACH SPELL s (rbox - (location caster) - (+ MAX_RAIN_SPELL_RADIUS 1)) (IF (== - (name_of s) - "rain") - (BLOCK - (IF (is_in - (location caster) - (. s area)) - (BLOCK - (SET in_rain - (| in_rain 1)) - (SET area - (+ area - (. s area))))) - (IF (is_in - (location target) - (. s area)) - (SET in_rain - (| in_rain 2)))))) - (IF (& in_rain 1) - (BLOCK "caster standing in the rain? This is going to be fun." - (SET used 0) - (FOREACH TARGET t area - (IF (> - (+ - (random 200) - (luk caster)) - 175) - (BLOCK - (SET used - (+ used 1)) - (CALL elt_damage t - (/ damage 6) - (+ 1 - (/ damage_bonus 3)) - ELT_EARTH - ELT_WIND - (+ 17 - (random 3)))))) - (IF (|| - (not used) - (< - (+ - (random 200) - (luk caster)) - 150)) - (BLOCK - (sfx caster - (+ 17 - (random 3)) - 0) - (itemheal caster - (- - (- 0 damage) - (random damage_bonus)) - 0)))) - (CALL elt_damage target damage damage_bonus ELT_EARTH ELT_WIND - (+ 17 - (random 3)))))))) - -(SPELL (LOCAL) arrow-hail "#frillyar" () - (LET level 2) - (LET school WAR) - (=> - (GUARD - (MANA 25) - (CASTTIME 5000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (REQUIRE - (is_exterior - (location caster))) - (GUARD - (OR - (COMPONENTS - (20 "Arrow")) - (COMPONENTS - (20 "IronArrow")))) - (GUARD - (OR - (REQUIRE - (> - (skill caster school) - 3)) - (COMPONENTS "SulphurPowder")))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL abort_on_area_shield - (location caster)) - (SET range 7) - (SET area - (rbox - (awayfrom - (location caster) - (dir caster) - (+ 1 range)) - range)) - (FOREACH SPELL s (rbox - (awayfrom - (location caster) - (dir caster) - (+ 1 range)) - (* range 2)) (IF (&& - (!= s self_invocation) - (== - (name_of s) - "arrow-hail")) - (BLOCK - (message caster "A nearby arrow hail spell absorbs your magic!") - (ABORT)))) - (SET damage 125) - (SET damage_bonus - (/ spellpower 5)) - (CALL gain_xp 2 20) - (FOR i 0 - (/ spellpower 8) - (BLOCK - (IF (not (pc caster)) - (ABORT)) - (FOR j 0 2 - (BLOCK - (IF (not (pc caster)) - (ABORT)) - (SET location - (random_location area)) - (sfx location SFX_ARROW_HAIL 0) - (SET done 0) - (FOREACH TARGET target - (rbox location 0) - (BLOCK - (injure caster target - (+ - (+ damage - (random damage_bonus)) - (random damage_bonus)) - 0) - (SET done 1) - (BREAK))) - (IF (&& - (== - (location caster) - location) - (not done)) - (BLOCK - (itemheal caster - (- 0 - (+ - (+ damage - (random damage_bonus)) - (random damage_bonus))) - 0) - (sfx caster SFX_HIT 0))))) - (WAIT - (+ - (+ 250 - (random 50)) - (random 50)))))))) - -(SPELL () magic-knuckles "#upmarmu" () - (LET level 2) - (LET school WAR) - (=> - (GUARD - (MANA 20) - (CASTTIME 500) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (GUARD - (OR - (REQUIRE - (> - (skill caster school) - 3)) - (COMPONENTS "Beer")))) - (EFFECT - (CALL adjust_spellpower WAR) - (SET str - (str caster)) - (CALL install_melee_spell - (+ 10 - (/ spellpower 10)) - 1300 - 34) - (ATTRIGGER - (CALL melee_damage target 30 - (+ 5 - (* str 2))))))) - -(SPELL (LOCAL) summon-snakes "#halhiss" () - (LET level 2) - (LET school DARK) - (=> - (GUARD - (MANA 40) - (CASTTIME 15000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (REQUIRE - (> - (script_int caster "OrumQuest") - 40)) - (COMPONENTS "DarkCrystal" "SnakeEgg")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL gain_xp 3 31) - (CALL summon_spell 1010 - (+ 1 - (/ spellpower 300)) - (- 4000 - (* spellpower 9)) - (* spellpower 80) - 2 - school)))) - -(SPELL () toxic-dart "#phlex" () - (LET level 2) - (LET school DARK) - (=> - (GUARD - (MANA 15) - (CASTTIME 500) - (REQUIRE - (> - (script_int caster "OrumQuest") - 37)) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (GUARD - (OR - (REQUIRE - (>= - (skill caster school) - 3)) - (COMPONENTS - (2 "Root"))))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (SET damage - (* 5 - (sqrt spellpower))) - (SET damage_bonus - (+ 5 - (/ - (level caster) - 3))) - (CALL install_attack_spell - (+ 3 - (/ spellpower 75)) - 1200 - 4 - 31) - (CALL gain_xp 3 35) - (ATTRIGGER - (CALL attack_check target) - (CALL elt_damage target damage damage_bonus ELT_NEUTRAL ELT_POISON 15) - (IF (&& - (is_pc target) - (!= caster target)) - (status_change target SC_POISON - (+ 5 - (max 15 - (/ spellpower 15))) - 0 - 0 - 0 - (+ 5000 - (* spellpower 1200)))))))) - -(SPELL (LOCAL) summon-wickedmushroom "#helorp" () - (LET level 2) - (LET school DARK) - (=> - (GUARD - (MANA 35) - (CASTTIME 15000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (> - (script_int caster "OrumQuest") - 36)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS "SmallMushroom" "DarkCrystal")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL gain_xp 3 36) - (CALL summon_spell 1106 - (+ 1 - (/ spellpower 250)) - (- 4000 - (* spellpower 9)) - (* spellpower 80) - 2 - school)))) - -(SPELL () flying-backpack "#plugh" (PC target) - (LET level 2) - (LET school NATURE) - (=> - (GUARD - (MANA 12) - (CASTTIME 1000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (GUARD - (OR - (REQUIRE - (> - (skill caster school) - 3)) - (COMPONENTS "SilkCocoon"))) - (REQUIRE - (< - (rdistance - (location target) - (location caster)) - (+ 2 - (/ spellpower 30))))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (IF (!= caster target) - (sfx caster 2 0)) - (status_change target SC_FLYING_BACKPACK 0 0 0 0 - (+ 5000 - (* spellpower 500))) - (message target "Your backpack is lifted by a mystical force; you no longer feel it pressing on your back.") - (CALL gain_xp 1 21) - (ATEND - (message target "Your backpack is no longer levitating.") - (sfx target 2 0))))) - -(SPELL () protect "#betsanc" (PC target) - (LET level 2) - (LET school NATURE) - (=> - (GUARD - (MANA 14) - (CASTTIME 1500) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (REQUIRE - (not - (is_equipped - (pc target) - "MagicGMTopHat"))) - (GUARD - (OR - (REQUIRE - (>= - (skill caster school) - 4)) - (COMPONENTS "HardSpike"))) - (REQUIRE - (< - (rdistance - (location target) - (location caster)) - (+ 2 - (/ spellpower 30))))) - (EFFECT - (CALL adjust_spellpower school) - (sfx target 11 0) - (IF (!= caster target) - (CALL default_effect)) - (status_change target SC_PHYS_SHIELD - (+ 5 - (max 15 - (/ spellpower 20))) - 0 - 0 - 0 - (+ 5000 - (* spellpower 1000))) - (message target "You feel more protected.") - (CALL gain_xp 2 22) - (ATEND - (message target "You feel less protected.") - (sfx target 111 0))))) - -(SPELL () happy-curse "#joyplim" (PC target) - (LET level 2) - (LET school NATURE) - (=> - (GUARD - (MANA 13) - (CASTTIME 1000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (GUARD - (OR - (REQUIRE - (> - (skill caster school) - 3)) - (COMPONENTS "GingerBreadMan"))) - (REQUIRE - (< - (rdistance - (location target) - (location caster)) - (+ 1 - (/ spellpower 100))))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (IF (> - (skill caster DARK) - 1) - (FOR i 0 - (/ spellpower 10) - (BLOCK - (emote target 5) - (WAIT 500))) - (FOR i 0 - (/ spellpower 10) - (BLOCK - (emote target 3) - (WAIT 500)))) - (CALL gain_xp 1 23)))) - -(SPELL (LOCAL) rain "#kaflosh" () - (LET level 2) - (LET school NATURE) - (=> - (GUARD - (MANA 17) - (CASTTIME 3000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (REQUIRE - (is_exterior - (location caster))) - (GUARD - (OR - (REQUIRE - (>= - (skill caster school) - 4)) - (COMPONENTS "BottleOfWater")))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL abort_on_area_shield - (location caster)) - (FOREACH SPELL s (rbox - (location caster) - (+ MAX_RAIN_SPELL_RADIUS 1)) (IF (&& - (!= s self_invocation) - (== - (name_of s) - "rain")) - (BLOCK - (message caster "A nearby raincloud absorbs your magic.") - (ABORT)))) - (CALL gain_xp 1 24) - (SET range - (min MAX_RAIN_SPELL_RADIUS - (+ 3 - (/ - (min spellpower 200) - 30)))) - (SET area - (rbox - (location caster) - range)) - (IF (|| - (is_in - (location - (npc "#DruidTree0#_M")) - area) - (is_in - (location - (npc "#DruidTree1#_M")) - area)) - (SCRIPT "{ - set @flag, 1; - callfunc \"QuestTreeTrigger\"; - close; - }")) - (IF (is_in - (location caster) - (@+ - (@ "011-1" 94 38) - 9 - 7)) - (SCRIPT "{ - callfunc \"HalloweenQuestWaterPumpkins\"; - }")) "Halloween quest" - (FOR i 0 - (/ spellpower 3) - (BLOCK - (IF (not (pc caster)) - (ABORT)) - (FOR j 0 - (/ - (min - (/ spellpower 2) - 200) - 100) - (BLOCK - (IF (not (pc caster)) - (ABORT)) - (SET location - (random_location area)) - (sfx location SFX_RAIN 0) - (FOREACH TARGET target - (rbox location 1) - (IF (== - (element target) - ELT_FIRE) - (injure caster target - (+ 2 - (random - (+ 5 - (/ spellpower 15)))) - 0))))) - (WAIT - (+ 400 - (random 100)))))))) - -(PROCEDURE shear-drop (target target2 item prob) - (IF (|| - (== target name) - (== target2 name)) - (BLOCK - (IF (< score prob) - (drop_item_for place item 1 60000 caster 5000))))) - -(PROCEDURE shear-drop2 (target target2 item prob item2 prob2) - (IF (|| - (== target name) - (== target2 name)) - (BLOCK - (IF (< score prob) - (drop_item_for place item 1 60000 caster 5000) - (CALL shear-drop target target2 item2 - (+ prob2 prob)))))) - -(PROCEDURE shear-drop3 (target target2 item prob item2 prob2 item3 prob3) - (IF (|| - (== target name) - (== target2 name)) - (BLOCK - (IF (< score prob) - (drop_item_for place item 1 60000 caster 5000) - (CALL shear-drop2 target target2 item2 - (+ prob2 prob) - item3 - (+ prob3 prob)))))) - -(SPELL () shear "#chipchip" () - (LET level 2) - (LET school NATURE) - (=> - (GUARD - (MANA 23) - (CASTTIME 1000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (override_attack caster 1 2000 1 ATTACK_ICON_SHEARING 30 0) - (ATTRIGGER - (IF (not - (is_pc target)) - (BLOCK - (SET score - (random - (- 1000 - (random spellpower)))) "lower score -> more valuable item" - (SET name - (name_of target)) - (SET place - (random_location - (rbox - (location target) - 1))) - (IF (running_status_update target SC_SHEARED) - (ABORT)) - (status_change target SC_SHEARED 0 0 0 0 600000) "10 minutes" - (CALL shear-drop "Fluffy" "Fluffy" "WhiteFur" 300) - (CALL shear-drop "EasterFluffy" "Easter Fluffy" "WhiteFur" 300) - (CALL shear-drop "SpikyMushroom" "Spiky Mushroom" "HardSpike" 250) - (CALL shear-drop "Mouboo" "Mouboo" "CottonCloth" 175) - (CALL shear-drop "Cobalt" "CobaltPlant" "CobaltHerb" 700) - (CALL shear-drop "Alizarin" "AlizarinPlant" "AlizarinHerb" 700) - (CALL shear-drop "Gamboge" "GambogePlant" "GambogeHerb" 700) - (CALL shear-drop "Mauve" "MauvePlant" "MauveHerb" 700) - (CALL shear-drop "SilkWorm" "Silkworm" "SilkCocoon" 300) - (CALL shear-drop "Pinkie" "Pinkie" "PinkAntenna" 180) - (IF (&& - (|| - (|| - (== name "Fluffy") - (== name "Mouboo")) - (== name "Pinkie")) - (random 2)) - (SCRIPT "{ - set @value, 1; - callfunc \"QuestSagathaHappy\"; - }")))))))) - -(SPELL () barrier "#asorm" (PC target) - (LET level 2) - (LET school ASTRAL) - (=> - (GUARD - (MANA 16) - (CASTTIME 1000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (REQUIRE - (not - (is_equipped - (pc target) - "MagicGMTopHat"))) - (GUARD - (OR - (REQUIRE - (> - (skill caster school) - 3)) - (COMPONENTS "SmallMushroom"))) - (REQUIRE - (< - (rdistance - (location target) - (location caster)) - (+ 2 - (/ spellpower 30))))) - (EFFECT - (CALL adjust_spellpower school) - (sfx target SFX_BARRIER 0) - (IF (!= caster target) - (CALL default_effect)) - (status_change target SC_MBARRIER - (+ 20 - (max 30 - (/ spellpower 8))) - 0 - 0 - 0 - (+ 2000 - (* spellpower 200))) - (message target "You are surrounded by a magical barrier.") - (CALL gain_xp 3 25) - (ATEND - (message target "Your magical barrier dissipates.") - (sfx target SFX_UNBARRIER 0))))) - -(SPELL (LOCAL) summon-spiky-mushrooms "#kalrenk" () - (LET level 2) - (LET school ASTRAL) - (=> - (GUARD - (MANA 33) - (CASTTIME 20000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS "HardSpike" "Root")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL gain_xp 1 26) - (CALL summon_spell 1019 - (+ 1 - (/ spellpower 120)) - (- 5000 - (* spellpower 9)) - (* spellpower 400) - 2 - school)))) - -(SPELL (LOCAL) summon-fluffies "#kalakarenk" () - (LET level 2) - (LET school ASTRAL) - (=> - (GUARD - (MANA 39) - (CASTTIME 20000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS "WhiteFur" "Root")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL gain_xp 1 27) - (CALL summon_spell 1020 - (+ - (+ 1 - (/ spellpower 170)) - (/ spellpower 430)) - (- 5000 - (* spellpower 8)) - (* spellpower 350) - 2 - school)))) - -(SPELL (LOCAL) summon-mouboo "#kalboo" () - (LET level 2) - (LET school ASTRAL) - (=> - (GUARD - (MANA 35) - (CASTTIME 20000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS "MoubooFigurine" "Root")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL gain_xp 2 37) - (CALL summon_spell 1028 - (+ 1 - (/ spellpower 270)) - (- 4000 - (* spellpower 9)) - (* spellpower 100) - 2 - school)))) - -(SPELL (LOCAL) summon-pinkie "#kalgina" () - (LET level 2) - (LET school ASTRAL) - (=> - (GUARD - (MANA 35) - (CASTTIME 20000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS "PinkAntenna" "Root")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (CALL gain_xp 2 38) - (CALL summon_spell 1018 - (+ 1 - (/ spellpower 120)) - (- 5000 - (* spellpower 9)) - (* spellpower 150) - 2 - school)))) - -(SPELL () detect-players "#inwilt" () - (LET level 2) - (LET school MAGIC) - (=> - (GUARD - (MANA 7) - (CASTTIME 300) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (SET message "") - (FOREACH PC target - (rbox - (location caster) - (/ spellpower 2)) - (IF (&& - (&& - (!= target caster) - (not - (running_status_update - (pc target) - SC_HIDE))) - (not - (status_option target SO_GMINVISIBLE))) - (BLOCK - (IF (!= message "") - (SET message - (+ message ", "))) - (SET message - (+ message - (name_of target))) - (IF (> spellpower 99) - (SET message - (+ - (+ - (+ message "(") - (level target)) - ")")))))) - (IF (== message "") - (message caster "You sense no-one else nearby.") - (message caster - (+ "You sense the following: " message)))))) - -(SPELL () enchant-lifestone "#manpahil" () - (LET level 2) - (LET school MAGIC) - (=> - (GUARD - (MANA 15) - (CASTTIME 4000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (GUARD - (OR - (OR - (COMPONENTS "BugLeg") - (COMPONENTS "MaggotSlime")) - (COMPONENTS "MauveHerb" "AlizarinHerb" "CobaltHerb" "GambogeHerb")))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (create_item caster "Lifestone" 1) - (CALL gain_xp 1 28)))) - -(SPELL () sense-spouse "#inzuwilt" () - (LET level 2) - (LET school MAGIC) - (=> - (GUARD - (MANA 7) - (CASTTIME 400) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (REQUIRE - (is_married caster)) - (REQUIRE - (is_equipped caster "WeddingRing"))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (IF (|| - (failed - (partner caster)) - (not - (is_equipped - (partner caster) - "WeddingRing"))) - (BLOCK - (message caster "You cannot sense your partner.") - (ABORT))) - (SET partner - (partner caster)) - (SET name - (name_of partner)) - (IF (|| - (is_dead partner) - (!= - (map_nr - (location partner)) - (map_nr - (location caster)))) - (BLOCK - (message caster - (+ - (+ "You cannot sense " name) - " nearby.")) - (ABORT))) - (IF (&& - (> - (map_level - (location partner)) - 2) - (< - (map_level - (location caster)) - (map_level - (location partner)))) - (BLOCK - (message caster - (+ - (+ "You sense " name) - " somewhere below.")) - (ABORT))) - (IF (&& - (> - (map_level - (location caster)) - 2) - (< - (map_level - (location partner)) - (map_level - (location caster)))) - (BLOCK - (message caster - (+ - (+ "You sense " name) - " somewhere above.")) - (ABORT))) - (IF (!= - (map_level - (location caster)) - (map_level - (location partner))) - (message caster - (+ - (+ "You sense " name) - " somewhere in the vincinity.")) - (BLOCK - (SET distance - (rdistance - (location caster) - (location partner))) - (SET dir - (dir_towards - (location caster) - (location partner) - 1)) - (IF (< distance 3) - (message caster - (+ - (+ "You sense " name) - " right next to you.")) - (IF (< distance 30) - (message caster - (+ - (+ - (+ - (+ "You sense " name) - " close by, towards the ") - dir) - ".")) - (IF (< distance 200) - (message caster - (+ - (+ - (+ - (+ "You sense " name) - " nearby, towards the ") - dir) - ".")) - (message caster - (+ - (+ - (+ - (+ "You sense " name) - " in the ") - dir) - ".")))))))))) - -(SPELL () hide "#anwiltyp" (PC target) - (LET level 2) - (LET school ASTRAL) - (=> - (GUARD - (MANA 11) - (CASTTIME 1000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (GUARD - (OR - (REQUIRE - (> - (skill caster school) - 3)) - (COMPONENTS "CottonCloth"))) - (REQUIRE - (< - (rdistance - (location target) - (location caster)) - (+ 2 - (/ spellpower 30))))) - (EFFECT - (CALL adjust_spellpower school) - (sfx target SFX_DEFAULT 0) - (IF (!= caster target) - (CALL default_effect)) - (status_change target SC_HIDE 0 0 0 0 - (+ 5000 - (* spellpower 2500))) - (CALL gain_xp 2 29) - (message target "You are hidden!") - (IF (!= caster target) - (message caster "You hid someone!")) - (ATEND - (message target "You are no longer hidden."))))) diff --git a/world/map/conf/magic-level3.sex b/world/map/conf/magic-level3.sex deleted file mode 100644 index 5d4d7374..00000000 --- a/world/map/conf/magic-level3.sex +++ /dev/null @@ -1,179 +0,0 @@ -"--------------------------------------------------------------------------------" -" Level 3 spells " -"--------------------------------------------------------------------------------" -(DISABLED - (SPELL () cure-poison "#anju" (PC target) - (LET level 3) - (LET school LIFE) - (=> - (GUARD - (MANA 15) - (CASTTIME 1000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (REQUIRE - (< - (rdistance - (location caster) - (location - (pc target))) - (+ 1 - (/ spellpower 60)))) - (COMPONENTS "GambogeHerb")) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (IF (running_status_update target SC_POISON) - (BLOCK - (CALL gain_heal_xp 40 1 2 2) - (stop_status_change target SC_POISON) - (CALL gain_xp 2 30) - (IF (!= caster target) - (sfx target SFX_HEAL 0)))))))) - -(DISABLED - (SPELL () fire-ball "#flarfol" () - (LET level 3) - (LET school WAR) - (=> - (GUARD - (MANA 30) - (CASTTIME 1000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (COMPONENTS "PileOfAsh")) - (EFFECT - (CALL adjust_spellpower school) - (SET damage - (min - (+ 50 - (* - (skill caster school) - 40)) - (+ 30 - (/ - (* spellpower 3) - 2)))) - (SET damage_bonus - (+ - (level caster) - (* spellpower 2))) - (SET radius - (+ 2 - (/ spellpower 50))) - (CALL install_attack_spell - (+ 1 - (/ spellpower 60)) - 5000 - 10 - 31) - (ATTRIGGER - (CALL attack_check target) - (SET loc - (location target)) - (DISABLED (WAIT 500)) - (sfx loc 16 0) - (FOREACH TARGET target - (rbox loc radius) - (IF (line_of_sight loc - (location target)) - (BLOCK - (SET divisor - (+ 3 - (rdistance loc - (location target)))) - (CALL elt_damage target - (/ - (* damage 3) - divisor) - (/ - (* damage_bonus 3) - divisor) - ELT_WATER - ELT_FIRE - 15))))))))) - -(DISABLED - (SPELL () summon-partner "#kalzumin" () - (LET level 3) - (LET school ASTRAL) - (=> - (GUARD - (MANA 30) - (CASTTIME 2000) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level)) - (REQUIRE - (is_married caster)) - (REQUIRE - (is_equipped caster "WeddingRing"))) - (EFFECT - (CALL adjust_spellpower school) - (CALL default_effect) - (IF (failed - (partner caster)) - (message caster "You call out for your partner, but there is no response.") - (BLOCK - (message caster - (+ - (+ "You call out for " - (name_of - (partner caster))) - ".")) - (message - (partner caster) - (+ - (name_of caster) - " is calling for your aid!")) - (sfx - (partner caster) - 2 - 0) - (WAIT - (max 5000 - (- 30000 - (* spellpower 60)))) - (IF (failed - (partner caster)) - (message caster "Your partner has abandoned you.") - (IF (is_dead - (partner caster)) - (message caster - (+ - (+ "Something seems to have happened to " - (name_of - (partner caster))) - ".")) - (BLOCK - (sfx - (location - (partner caster)) - SFX_TELEPORT - 0) - (SET dest - (awayfrom - (location caster) - (random_dir 1) - 1)) - (warp - (partner caster) - dest) - (sfx dest SFX_TELEPORT 0)))))))))) diff --git a/world/map/conf/magic-level4.sex b/world/map/conf/magic-level4.sex deleted file mode 100644 index f04092f4..00000000 --- a/world/map/conf/magic-level4.sex +++ /dev/null @@ -1,3 +0,0 @@ -"--------------------------------------------------------------------------------" -" Level 4 spells " -"--------------------------------------------------------------------------------" diff --git a/world/map/conf/magic-level5.sex b/world/map/conf/magic-level5.sex deleted file mode 100644 index 056c9e50..00000000 --- a/world/map/conf/magic-level5.sex +++ /dev/null @@ -1,55 +0,0 @@ -"--------------------------------------------------------------------------------" -" Level 5 spells " -"--------------------------------------------------------------------------------" -(DISABLED - (SPELL () shroud "#anwilvimar" () - (LET level 5) - (LET school NATURE) - (=> - (GUARD - (MANA 40) - (CASTTIME 400) - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level))) - (EFFECT - (CALL default_effect) - (shroud caster 0x04))))) - -(DISABLED - (SPELL () teleport "#vorp" (STRING destination) - (LET level 5) - (LET school ASTRAL) - (=> - (GUARD - (MANA 80) - (CASTTIME 400) - (COMPONENT "EtherEssence") - (CATALYSTS "TeleportCrystal") - (REQUIRE - (>= - (skill caster MAGIC) - level)) - (REQUIRE - (>= - (skill caster school) - level))) - (EFFECT - (CALL default_effect) - (WAIT - (+ 1000 - (/ 200000 - (+ spellpower 10)))) - (sfx - (location caster) - SFX_TELEPORT - 200) - (warp caster - (random_location - (anchor destination))) - (sfx caster SFX_TELEPORT 200))))) diff --git a/world/map/conf/magic-misc.sex b/world/map/conf/magic-misc.sex index 15672f4c..14d6ea3a 100644 --- a/world/map/conf/magic-misc.sex +++ b/world/map/conf/magic-misc.sex @@ -1,68 +1,6 @@ "--------------------------------------------------------------------------------" " Special-purpose quasispells " "--------------------------------------------------------------------------------" -(SPELL (NONMAGIC) dueloff "#dueloff" () - (=> - (GUARD - (REQUIRE - (== (substr (location caster) 2 5) "009-7"))) - (EFFECT - (IF (== (script_int caster "@Duels_Off") 1) - (BLOCK - (SCRIPT "{set @Duels_Off, 0;}") - (message caster "Now accepting incoming duel requests.") - (ABORT))) - (SCRIPT "{set @Duels_Off, 1;}") - (message caster "Now blocking incoming duel requests.")))) - -(SPELL (NONMAGIC) duel "#duel" (PC target) - (=> - (GUARD - (REQUIRE - (== (& (script_int target "$SANGUINE") (script_int target "$@SV_FCDBit")) 0))) - (EFFECT - (IF (== target caster) - (BLOCK - (message caster "You can not fight against yourself.") - (ABORT))) - (IF (is_dead target) - (BLOCK - (message caster "You can not fight against a corpse.") - (ABORT))) - (IF (status_option caster SO_GMINVISIBLE) - (BLOCK - (message caster "You can not fight while being invisible.") - (ABORT))) - (IF (status_option target SO_GMHIDE) - (BLOCK - (message caster "This player have @hide enabled.") - (ABORT))) - (IF (status_option target SO_GMINVISIBLE) - (ABORT)) - (IF (status_option caster SO_GMHIDE) - (ABORT)) - (IF (!= (substr (location caster) 2 5) "009-7") - (BLOCK - (message caster "You need to be in the fight club to challenge someone to a duel.") - (ABORT))) - (IF (!= (substr (location target) 2 5) "009-7") - (BLOCK - (message caster "This player is not in the fight club at the moment.") - (ABORT))) - (IF (> (script_int target "@Duels_Off") 0) - (BLOCK - (message caster "This player is automatically ignoring incoming duel requests.") - (ABORT))) - (IF (> (script_int caster "$@Duel_Queue_ID[($@Duel_QueueLimit)]") 0) - (BLOCK - (message caster (+ (+ "There is already " (script_int caster "$@Duel_QueueLimit")) " duel(s) in the queue, which is the maximum.")) - (ABORT))) - (IF (> (script_int target "@Duel_Queue[($@Duel_PlayerQueueLimit)]") 0) - (BLOCK - (message caster (+ (+ "There is already " (script_int caster "$@Duel_PlayerQueueLimit")) " duel request(s) in the queue of this player, which is the maximum.")) - (ABORT))) - (SET script_target target) - (SCRIPT "{callfunc \"fightclub_sendrequest\";}")))) (SPELL (NONMAGIC SILENT) marriage "marry" (PC target) (=> @@ -165,53 +103,3 @@ (+ (name_of target) " turned down your marriage offer.")))))) - -(DISABLED - (SPELL (LOCAL) mouboo-groan "#g" () - (=> - (GUARD - (MANA 1) - (REQUIRE - (== - (name_of caster) - "MOUBOOTAUR"))) - (EFFECT - (FOREACH PC p - (rbox - (location caster) - 200) - (SET distance - (rdistance - (location caster) - (location p)))) - (IF (< distance 15) - (message p "The moubootaur's groaning rings in your ears!") - (IF (< distance 70) - (message p "You hear a loud groaning noise, not far away...") - (message p "You hear an odd groaning noise in the distance..."))))))) - -(DISABLED - (SPELL (LOCAL) mouboo-smell "#s" () - (=> - (GUARD - (MANA 1) - (REQUIRE - (== - (name_of caster) - "MOUBOOTAUR"))) - (EFFECT - (WAIT 30000) - (FOREACH PC p - (rbox - (location caster) - 30) - (message p "You notice a strange smell all around you.")))))) - -(SPELL (NONMAGIC) killgm0 "#pullrabbit" () - (=> - (REQUIRE - (is_equipped caster "MagicGMTopHat")) - (EFFECT - (SCRIPT "{ - callfunc \"ActivateMagicGMTophat\"; - }")))) diff --git a/world/map/conf/magic-procedures.sex b/world/map/conf/magic-procedures.sex index ea62f50f..0ba40bc8 100644 --- a/world/map/conf/magic-procedures.sex +++ b/world/map/conf/magic-procedures.sex @@ -286,12 +286,7 @@ (WAIT delay) (sfx location SFX_SUMMON_FIRE 0) (spawn - (rbox location (if_then_else - (is_in (location caster) - (@+ - (@ "009-7" (- (script_int caster "$@fightclub_x1") 2) (- (script_int caster "$@fightclub_y1") 2)) - (+ (- (script_int caster "$@fightclub_x2") (script_int caster "$@fightclub_x1")) 5) - (+ (- (script_int caster "$@fightclub_y2") (script_int caster "$@fightclub_y1")) 5))) 1 2)) + (rbox location 2) caster mob_id (if_then_else diff --git a/world/map/conf/magic-quests.sex b/world/map/conf/magic-quests.sex deleted file mode 100644 index 4b8a822c..00000000 --- a/world/map/conf/magic-quests.sex +++ /dev/null @@ -1,154 +0,0 @@ -(PROCEDURE hug_tree (target) - (IF (|| - (|| - (|| - (|| - (|| - (|| - (|| - (|| - (== target "") - (== target "tree")) - (== target "tree*")) - (== target "Tree")) - (== target "Tree*")) - (== target "druid")) - (== target "druid*")) - (== target "Druid")) - (== target "Druid*")) - (SCRIPT "{ - set @flag, 2; - callfunc \"QuestTreeTrigger\"; - close; - }"))) - -(SPELL (NONMAGIC) hug0 "hug" (STRING target) - (=> - (REQUIRE - (|| - (<= - (rdistance - (location caster) - (location - (npc "#DruidTree0#_M"))) - 1) - (<= - (rdistance - (location caster) - (location - (npc "#DruidTree1#_M"))) - 1))) - (EFFECT - (CALL hug_tree target)))) - -(SPELL (NONMAGIC) hug1 "*hug*" (STRING target) - (=> - (REQUIRE - (|| - (<= - (rdistance - (location caster) - (location - (npc "#DruidTree0#_M"))) - 1) - (<= - (rdistance - (location caster) - (location - (npc "#DruidTree1#_M"))) - 1))) - (EFFECT - (CALL hug_tree target)))) - -(SPELL (NONMAGIC) hug2 "*hug" (STRING target) - (=> - (REQUIRE - (|| - (<= - (rdistance - (location caster) - (location - (npc "#DruidTree0#_M"))) - 1) - (<= - (rdistance - (location caster) - (location - (npc "#DruidTree1#_M"))) - 1))) - (EFFECT - (CALL hug_tree target)))) - -(SPELL (NONMAGIC) hug3 "hugs" (STRING target) - (=> - (REQUIRE - (|| - (<= - (rdistance - (location caster) - (location - (npc "#DruidTree0#_M"))) - 1) - (<= - (rdistance - (location caster) - (location - (npc "#DruidTree1#_M"))) - 1))) - (EFFECT - (CALL hug_tree target)))) - -(SPELL (NONMAGIC) hug4 "*hugs*" (STRING target) - (=> - (REQUIRE - (|| - (<= - (rdistance - (location caster) - (location - (npc "#DruidTree0#_M"))) - 1) - (<= - (rdistance - (location caster) - (location - (npc "#DruidTree1#_M"))) - 1))) - (EFFECT - (CALL hug_tree target)))) - -(SPELL (NONMAGIC) hug5 "*hugs" (STRING target) - (=> - (REQUIRE - (|| - (<= - (rdistance - (location caster) - (location - (npc "#DruidTree0#_M"))) - 1) - (<= - (rdistance - (location caster) - (location - (npc "#DruidTree1#_M"))) - 1))) - (EFFECT - (CALL hug_tree target)))) - -"--------------------------------------------------------------------------------" -"Illia spell" -"--------------------------------------------------------------------------------" -(SPELL (NONMAGIC) illia0 "#catalazuli" () - (=> - (REQUIRE - (== - (rdistance - (location caster) - (location - (npc "#Power Circle"))) - 0)) - (EFFECT - (SCRIPT "{ - callfunc \"StartChannelling\";} - ")))) diff --git a/world/map/conf/tmwa-map.conf b/world/map/conf/tmwa-map.conf index 849779af..fa28abe5 100644 --- a/world/map/conf/tmwa-map.conf +++ b/world/map/conf/tmwa-map.conf @@ -9,7 +9,9 @@ map_conf: conf/map_athena.conf battle_conf: conf/battle_athena.conf atcommand_conf: conf/atcommand_athena.conf +const_db: db/params.txt const_db: db/const.txt +const_db: db/const-magic.txt const_db: db/const-quest.txt const_db: db/const-mapflags.txt const_db: db/const-debugflag.txt @@ -35,19 +37,4 @@ mob_db: db/mob_db_over_100.txt mob_skill_db: db/mob_skill_db.txt skill_db: db/skill_db.txt -magic_conf: conf/magic-config.sex -magic_conf: conf/magic-procedures.sex -magic_conf: conf/magic-level0.sex -magic_conf: conf/magic-level1.sex -magic_conf: conf/magic-level2.sex -magic_conf: conf/magic-level3.sex -magic_conf: conf/magic-level4.sex -magic_conf: conf/magic-level5.sex -magic_conf: conf/magic-misc.sex -magic_conf: conf/magic-quests.sex -magic_conf: conf/magic-anchors.sex -magic_conf: conf/magic-quickdebug.sex - -magic_conf: conf/magic-secrets.sex - resnametable: data/resnametable.txt diff --git a/world/map/db/const-magic.txt b/world/map/db/const-magic.txt new file mode 100644 index 00000000..9bf8e063 --- /dev/null +++ b/world/map/db/const-magic.txt @@ -0,0 +1,62 @@ +// NOTE: I think min_casttime should be in battle config if we don't make it a variable +MIN_CASTTIME 200 + +// Magic Skills +SKILL_MAGIC 340 +SKILL_MAGIC_LIFE 341 +SKILL_MAGIC_WAR 342 +SKILL_MAGIC_TRANSMUTE 343 +SKILL_MAGIC_NATURE 344 +SKILL_MAGIC_ASTRAL 345 +SKILL_MAGIC_DARK 346 + +// Elements +ELT_NEUTRAL 0 +ELT_WATER 1 +ELT_EARTH 2 +ELT_FIRE 3 +ELT_WIND 4 +ELT_POISON 5 +ELT_SHADOW 6 +ELT_HOLY 7 +ELT_GHOST 8 +ELT_UNDEAD 9 + +// Status effects +SC_SHEARED 194 +SC_HIDE 194 +SC_HALT_REGENERATE 195 +SC_FLYING_BACKPACK 196 +SC_MBARRIER 197 +SC_HASTE 198 +SC_PHYS_SHIELD 199 +SO_GMHIDE 64 +SO_GMINVISIBLE 4096 + +// Special effects +SFX_DEFAULT 10 +SFX_SUMMON_START 21 +SFX_SUMMON_FIRE 22 +SFX_TELEPORT 24 +SFX_RAIN 25 +SFX_HIT 25 +SFX_ARROW_HAIL 27 +SFX_BARRIER 10 +SFX_UNBARRIER 10 +SFX_HEAL 3 +SFX_LIGHTNING 18 + +// Magic Spell Const +MIN_MARRY_LEVEL 32 +MAX_RAIN_SPELL_RADIUS 15 +MAX_MAGIC_LEVEL 2 +MFLAG_MADE_CONC_POTION 16384 +MFLAG_MADE_CONC_POTION_SHIFT 14 +// SCRIPT_XP "MAGIC_EXPERIENCE" +SCRIPT_XP_MASK 65535 +SCRIPT_XP_SHIFT 0 +SCRIPT_HEALSPELL_MASK 255 +SCRIPT_HEALSPELL_SHIFT 24 +ATTACK_ICON_GENERIC 2000 +ATTACK_ICON_SHEARING 2001 +E10_FLAG_USED_FREE_WARP_SHIFT 17 diff --git a/world/map/db/const.txt b/world/map/db/const.txt index d3b42ee4..2f7d63a8 100644 --- a/world/map/db/const.txt +++ b/world/map/db/const.txt @@ -1,39 +1,6 @@ // Constants usable in scripts. +// TODO remove all the bSomething and move them to params instead -// BEFORE UNCOMMENTING ANYTHING, TALK TO o11c! - -// Note: the type-1 constants and the bWhatever are actually -// the same type internally, but they must be used differently. -// A *few* can be used for both ... -// TODO resolve that last, and change the names to match SP_* - -// BEFORE UNCOMMENTING ANYTHING, TALK TO o11c! -//BaseExp 1 1 -//JobExp 2 1 -Hp 5 1 -MaxHp 6 1 -Sp 7 1 -MaxSp 8 1 -StatusPoint 9 1 -BaseLevel 11 1 -//SkillPoint 12 1 -Class 19 1 -Zeny 20 1 -Sex 21 1 -//NextBaseExp 22 1 -//NextJobExp 23 1 -Weight 24 1 -MaxWeight 25 1 -//JobLevel 55 1 -//Upper 56 1 -Str 13 1 -Agi 14 1 -Vit 15 1 -Int 16 1 -Dex 17 1 -Luk 18 1 - -// BEFORE UNCOMMENTING ANYTHING, TALK TO o11c! bMaxHP 6 bMaxSP 8 bStr 13 @@ -44,7 +11,7 @@ bDex 17 bLuk 18 //bAtk 41 //bAtk2 42 -//bMatk1 43 +bMatk1 43 //bMatk2 44 //bDef 45 bMdef 47 @@ -102,8 +69,6 @@ bDeaf 70 // Those which can be used with the arrow are only bCritical, bAtkEle, bHit, bAddEle, bAddRace, bAddSize and bAddEff. The other bonuses are ignored. // For more information, have a look here: http://code.google.com/p/eathena/source/browse/trunk/doc/item_bonus.txt -// BEFORE UNCOMMENTING ANYTHING, TALK TO o11c! - bAtkRange 1000 // A range bonus of n (bAtkRange,n;). //bAtkEle 1001 // Gives the player's attacks a n element (bAtkEle,n;). //bDefEle 1002 // Gives the player's defense a n element (bDefEle,n;). @@ -265,6 +230,13 @@ sc_poison 132 sc_slowpoison 14 sc_raiseattackspeed0 37 sc_raiseattackstrength 185 +SC_SHEARED 194 +SC_HIDE 194 +SC_HALT_REGENERATE 195 +SC_FLYING_BACKPACK 196 +SC_MBARRIER 197 +SC_HASTE 198 +SC_PHYS_SHIELD 199 // Emotions EMOTE_DISGUST 1 @@ -311,6 +283,11 @@ EMOTE_TROLL 126 EMOTE_PAIN 127 EMOTE_TEARS 128 +// symbols used for registercmd (ASCII) +MAGIC_SYMBOL 35 +ATCMD_SYMBOL 64 +DEBUG_SYMBOL 37 + sfx_skillup 1 sfx_magic_generic 2 sfx_magic_life 3 @@ -362,6 +339,7 @@ FX_MAGIC_BLUE_TELEPORT 41 FX_MAGIC_DARK_EXPLOSION 42 FX_PUMPKIN_EXPLOSION 43 FX_GETITEM 44 +FX_HUG 49 FX_MAGIC_SHIELD_ENDS 111 FX_ELECTRICITY_RED 114 FX_ELECTRICITY_BLUE 115 @@ -426,11 +404,12 @@ SKILL_RESIST_POISON 353 SKILL_ASTRAL_SOUL 354 SKILL_RAGING 355 -// Magic Skills -SKILL_MAGIC 340 -SKILL_MAGIC_LIFE 341 -SKILL_MAGIC_WAR 342 -SKILL_MAGIC_TRANSMUTE 343 -SKILL_MAGIC_NATURE 344 -SKILL_MAGIC_ASTRAL 345 -SKILL_MAGIC_DARK 346 +// GM groups +G_PLAYER 0 +G_BOT 1 +G_TESTER 20 +G_DEV 40 +G_EVENT 50 +G_GM 60 +G_ADMIN 80 +G_SYSOP 99 diff --git a/world/map/db/params.txt b/world/map/db/params.txt new file mode 100644 index 00000000..4d905522 --- /dev/null +++ b/world/map/db/params.txt @@ -0,0 +1,51 @@ +// Params usable in scripts +// see SP enum in clif.t.hpp + +// TODO finish that list and add comments +// TODO refactor: make the names match their SP:: counterpart <== halfway done + +BASEEXP 1 1 +JOBEXP 2 1 +Hp 5 1 +MaxHp 6 1 +Sp 7 1 +MaxSp 8 1 +STATUSPOINT 9 1 +BaseLevel 11 1 +SKILLPOINT 12 1 +Str 13 1 +Agi 14 1 +Vit 15 1 +Int 16 1 +Dex 17 1 +Luk 18 1 +Class 19 1 +Zeny 20 1 +Sex 21 1 +NEXTBASEEXP 22 1 +NEXTJOBEXP 23 1 +Weight 24 1 +MaxWeight 25 1 +ATK1 41 1 +ATK2 42 1 +MATK1 43 1 +MATK2 44 1 +DEF1 45 1 +DEF2 46 1 +MDEF1 47 1 +MDEF2 48 1 +HIT 49 1 +FLEE1 50 1 +FLEE2 51 1 +CRITICAL 52 1 +JOBLEVEL 55 1 +PARTNER 57 1 +GM 500 1 +ATTACKRANGE 1000 1 +BASE_ATK 1014 1 +POS_X 1074 1 +POS_Y 1075 1 +PVP_CHANNEL 1076 1 +BL_ID 1077 1 +BL_TYPE 1078 1 +CHAR_ID 1079 1 diff --git a/world/map/npc/001-1/ched.txt b/world/map/npc/001-1/ched.txt index ddfddd95..dee6cb77 100644 --- a/world/map/npc/001-1/ched.txt +++ b/world/map/npc/001-1/ched.txt @@ -15,9 +15,9 @@ L_Next: mes "[Ched]"; mes "\"Well, I don't remember what it's called... I took it out of 'Timbleweed's Advanced Transmutations,' but it seems awfully hard to cast.\""; next; - mes "\"If you want to try it, the invocation is '" + getspellinvocation("merge-concentration-potions") + ".' I just can't get the hang of it though.\""; + mes "\"If you want to try it, the invocation is '" + ("merge-concentration-potions") + ".' I just can't get the hang of it though.\""; next; - mes "\"Maybe I should go back to practicing '" + getspellinvocation("detect-magic") + "' until I can cast it properly.\" %%6"; + mes "\"Maybe I should go back to practicing '" + ("detect-magic") + "' until I can cast it properly.\" %%6"; goto L_Done; L_Done: diff --git a/world/map/npc/001-1/children.txt b/world/map/npc/001-1/children.txt index 5ad738a9..83718566 100644 --- a/world/map/npc/001-1/children.txt +++ b/world/map/npc/001-1/children.txt @@ -78,7 +78,7 @@ L_keepword: L_giveword: mes "[Aisha]"; mes "Aisha looks around as she leans in and hushes you to silence. After a few seconds, she whispers to you:"; - mes "\"I like you, so I'll tell you the bad word. But you can't tell anyone else about it! The bad word is '" + getspellinvocation("aggravate") + ".'\""; + mes "\"I like you, so I'll tell you the bad word. But you can't tell anyone else about it! The bad word is '" + get(.invocation$, "spell-aggravate") + ".'\""; next; mes "[Aisha]"; diff --git a/world/map/npc/001-1/guards.txt b/world/map/npc/001-1/guards.txt index 0167510e..df25a13e 100644 --- a/world/map/npc/001-1/guards.txt +++ b/world/map/npc/001-1/guards.txt @@ -91,6 +91,6 @@ L_message: mes "[Ryan the Town Guard]"; mes "\" Watch out for Black Scorpions. They are extremely dangerous!\""; next; - mes "\"Whenever one approaches the town gate, Ekinu has me run around shouting '" + getspellinvocation("aggravate") + ".' Somehow, this distracts it so Ekinu can kill it.\""; + mes "\"Whenever one approaches the town gate, Ekinu has me run around shouting '" + $@SPELL_AGGRAVATE$ + ".' Somehow, this distracts it so Ekinu can kill it.\""; close; } diff --git a/world/map/npc/001-2/government_building.txt b/world/map/npc/001-2/government_building.txt index 51b43a8c..03c3eaf7 100644 --- a/world/map/npc/001-2/government_building.txt +++ b/world/map/npc/001-2/government_building.txt @@ -6,7 +6,7 @@ mes "[Estard]"; mes "\"Hello. What can I do for you?\""; next; - if (getpartnerid2()) + if (PARTNER) goto L_main_married; menu @@ -35,7 +35,7 @@ L_marry_do: callsub S_give_rings; mes ""; mes "[Estard]"; - mes "\"Here are your rings. In order to marry each other, you both must stand within one of the designated areas (like that small rug over there in the corner), wear your rings, and say 'marry (your partner's name).'\""; + mes "\"Here are your rings. In order to marry each other, you both must stand within one of the designated areas (like that small rug over there in the corner), wear your rings, and say '#marry (your partner's name).'\""; close; L_marry_too_young: @@ -93,8 +93,8 @@ L_do_divorce: if (Zeny < @divorce_cost) goto L_not_enough_money; - if (divorce()) - goto L_divorce_done; + set PARTNER, 0, PARTNER; // divorce the partner first, which will also divorce the rid if succesful + if (PARTNER < 1) goto L_divorce_done; mes ""; mes "[Estard]"; diff --git a/world/map/npc/001-2/pauline.txt b/world/map/npc/001-2/pauline.txt index 4fbd5a5f..93608a10 100644 --- a/world/map/npc/001-2/pauline.txt +++ b/world/map/npc/001-2/pauline.txt @@ -92,7 +92,7 @@ L_Spells: L_Next1: mes "[Pauline]"; mes "\"Well I could only read the invocations. So I don't exactly know what kind of ingredients you are going to need.\""; - mes "\"The first one for the mouboo was " + getspellinvocation("summon-mouboo") + " and the one for the pinkie was " + getspellinvocation("summon-pinkie") +".\""; + mes "\"The first one for the mouboo was " + ("summon-mouboo") + " and the one for the pinkie was " + ("summon-pinkie") +".\""; next; mes "\"For the pinkie spell my suggestion is to try similar ingredients to the other Astral spells. Try a root and some item typical for pinkies.\""; mes "\"The mouboo spell might be more complicated. From what I could translate, one of the spell components is crafted by magic.\""; @@ -157,7 +157,7 @@ L_Next4: goto L_DidNotWorkMouboo; L_DidNotWorkMouboo: - mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + getspellinvocation("summon-mouboo") + "."; + mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + ("summon-mouboo") + "."; mes "Nothing happens."; mes "[Pauline]"; mes "\"It seems you did not tell me the correct ingredients. Come back when you find the correct ones.\""; @@ -174,7 +174,7 @@ L_Pass2Mouboo: goto L_DidNotWorkMouboo; L_TrySpellMouboo: - mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + getspellinvocation("summon-mouboo") + "."; + mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + ("summon-mouboo") + "."; monster "001-1", 55,68, "Good", 1028, 1; mes "[Pauline]"; mes "\"It worked!\""; @@ -220,7 +220,7 @@ L_Next5: goto L_DidNotWorkPinkie; L_DidNotWorkPinkie: - mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + getspellinvocation("summon-pinkie") + "."; + mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + ("summon-pinkie") + "."; mes "Nothing happens."; mes "[Pauline]"; mes "\"It seems you did not tell me the correct ingredients. Come back when you find the correct ones.\""; @@ -237,7 +237,7 @@ L_Pass2Pinkie: goto L_DidNotWorkPinkie; L_TrySpellPinkie: - mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + getspellinvocation("summon-pinkie") + "."; + mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + ("summon-pinkie") + "."; monster "001-1", 54,68, "Good", 1018, 1; mes "[Pauline]"; mes "\"It worked!\""; diff --git a/world/map/npc/001-2/tondar.txt b/world/map/npc/001-2/tondar.txt index ba4c0fff..d7fd3531 100644 --- a/world/map/npc/001-2/tondar.txt +++ b/world/map/npc/001-2/tondar.txt @@ -41,7 +41,7 @@ L_askspell: L_spell: mes "[Tondar]"; - mes "\"Well, all right; this one can't do much harm. Press your hands together and say `" + getspellinvocation("ask-magic-exp") + "'.\""; + mes "\"Well, all right; this one can't do much harm. Press your hands together and say `" + get(.invocation$, "spell-experience") + "'.\""; mes "\"This will release a steady flow of magic within you. Focus and try to control it; it is a good meditative practice.\""; close; diff --git a/world/map/npc/001-2/wizards.txt b/world/map/npc/001-2/wizards.txt index 37efa8bd..ef538489 100644 --- a/world/map/npc/001-2/wizards.txt +++ b/world/map/npc/001-2/wizards.txt @@ -1,90 +1,25 @@ // Council of Ruling Wizards Room -// manaseed -001-2,104,19,0|script|Desert Mana Seed#_M|166 +-|script|Magic Council|32767 { - mes "Strangely, you feel nothing – as if its membrane is closed to you."; + explode .@n, strnpcinfo(0), "#"; + if (.@n[1] == 9) mes "The arch wizard seems to be busy."; + elif (.@n[1]) mes "The wizard seems to ignore you."; + else mes "Strangely, you feel nothing – as if its membrane is closed to you."; next; mes "Perhaps you should come back later."; close; -} - -// -001-2,99,22,0|script|Wizard#1|355 -{ - mes "The wizard seems to ignore you."; - next; - mes "Perhaps you should come back later."; - close; -} - -// -001-2,92,24,0|script|Wizard#2|356 -{ - mes "The wizard seems to ignore you."; - next; - mes "Perhaps you should come back later."; - close; -} - -// -001-2,92,30,0|script|Wizard#3|357 -{ - mes "The wizard seems to ignore you."; - next; - mes "Perhaps you should come back later."; - close; -} - -// -001-2,99,32,0|script|Wizard#4|358 -{ - mes "The wizard seems to ignore you."; - next; - mes "Perhaps you should come back later."; - close; -} - -// -001-2,110,22,0|script|Wizard#5|359 -{ - mes "The wizard seems to ignore you."; - next; - mes "Perhaps you should come back later."; - close; -} - -// -001-2,117,24,0|script|Wizard#6|360 -{ - mes "The wizard seems to ignore you."; - next; - mes "Perhaps you should come back later."; - close; -} - -// -001-2,117,30,0|script|Wizard#7|361 -{ - mes "The wizard seems to ignore you."; - next; - mes "Perhaps you should come back later."; - close; -} -// -001-2,110,32,0|script|Wizard#8|362 -{ - mes "The wizard seems to ignore you."; - next; - mes "Perhaps you should come back later."; - close; -} -// -001-2,104,27,0|script|Arch-Wizard#9|354 -{ - mes "The arch wizard seems to be busy."; - next; - mes "Perhaps you should come back later."; - close; +OnInit: + set .@void, puppet("001-2", 104, 19, "Desert Mana Seed#_M", 166); + set .@void, puppet("001-2", 99, 22, "Wizard#1", 355); + set .@void, puppet("001-2", 92, 24, "Wizard#2", 356); + set .@void, puppet("001-2", 92, 30, "Wizard#3", 357); + set .@void, puppet("001-2", 99, 32, "Wizard#4", 358); + set .@void, puppet("001-2", 110, 22, "Wizard#5", 359); + set .@void, puppet("001-2", 117, 24, "Wizard#6", 360); + set .@void, puppet("001-2", 117, 30, "Wizard#7", 361); + set .@void, puppet("001-2", 110, 32, "Wizard#8", 362); + set .@void, puppet("001-2", 104, 27, "Arch-Wizard#9", 354); + end; } diff --git a/world/map/npc/002-1/elanore.txt b/world/map/npc/002-1/elanore.txt index ea3b78bf..fbc8f3c0 100644 --- a/world/map/npc/002-1/elanore.txt +++ b/world/map/npc/002-1/elanore.txt @@ -233,7 +233,7 @@ L_MakeSelf: goto L_MakeSelf_yes; L_MakeSelf_yes: - mes "\"Oh, but of course! You are powerful enough to make your own lifestones, using the enchantment '" + getspellinvocation("enchant-lifestone") + "'. This will consume a bug leg or a maggot slime or one of each of the four healing herbs, though.\""; + mes "\"Oh, but of course! You are powerful enough to make your own lifestones, using the enchantment '" + ("enchant-lifestone") + "'. This will consume a bug leg or a maggot slime or one of each of the four healing herbs, though.\""; goto L_Close; L_MakeSelf_no: @@ -265,15 +265,15 @@ L_T_Initial: next; mes "[Elanore the Healer]"; mes "\"To heal someone, first locate the injury. As a beginner, you have to touch the wound; with practice, it will be enough to think about it. Hold the lifestone in one hand, touching the wound with the other.\""; - mes "\"Then say, '" + getspellinvocation("lesser-heal") + "', followed by the name of the one you wish to heal.\""; + mes "\"Then say, '" + ("lesser-heal") + "', followed by the name of the one you wish to heal.\""; next; mes "[Elanore the Healer]"; mes "\"You might want to write that down, actually. In fact, you might want to make sure to keep notes of all spells you hear, for you never know if you will hear them again!\""; - mes "\"The invocation was '" + getspellinvocation("lesser-heal") + "'.\""; + mes "\"The invocation was '" + ("lesser-heal") + "'.\""; next; mes "[Elanore the Healer]"; mes "\"This will only cure cuts and bruises, though, and it will take some time to take effect. It will be useless to mend broken bones or more severe injuries!\""; - mes "\"To heal yourself, it's enough to just say '" + getspellinvocation("lesser-heal") + "' by itself.\""; + mes "\"To heal yourself, it's enough to just say '" + ("lesser-heal") + "' by itself.\""; next; mes "[Elanore the Healer]"; mes "\"Let me give you a lifestone to get started with.\""; @@ -344,7 +344,7 @@ L_T_ChkAdvToLOH: mes "\"I will now teach you how to heal by laying on your hands. The technique is similar to the spell I taught you at the beginning, but this time you transfer your own health instead of drawing health from a lifestone.\""; next; mes "[Elanore the Healer]"; - mes "\"First, lay your hand on the person you wish to heal. You needn't touch the injury itself, though you have to touch the skin until you are a little more experienced. Then, medidate on the word '" + getspellinvocation("lay-on-hands") + "'\""; + mes "\"First, lay your hand on the person you wish to heal. You needn't touch the injury itself, though you have to touch the skin until you are a little more experienced. Then, medidate on the word '" + ("lay-on-hands") + "'\""; next; mes "[Elanore the Healer]"; mes "\"This will let your own life force flow into the person you are healing. If you are badly injured yourself, you will not be able to do this.\""; @@ -500,11 +500,11 @@ L_T_CurePosion: next; mes "[Elanore the Healer]"; mes "\"If you would like to cure someone who is poisoned, first rub a Gamboge leaf between your hands. Your hands must be covered in Gamboge liquid for this to work.\""; - mes "\"Speak the invocation, `" + getspellinvocation("cure-poison") + "'.\""; + mes "\"Speak the invocation, `" + ("cure-poison") + "'.\""; mes "\"Next, you either touch the poisoned person with your hands, or speak their name. You have to be close for this to work, though.\""; next; mes "[Elanore the Healer]"; - mes "\"Once again, the invocation is `" + getspellinvocation("cure-poison") + "'.\""; + mes "\"Once again, the invocation is `" + ("cure-poison") + "'.\""; mes "\"Come back again soon; there is another spell I would like to teach you.\""; next; set @Q_status, @STATUS_LEARNED_CURE_POISON; diff --git a/world/map/npc/006-1/spirit.txt b/world/map/npc/006-1/spirit.txt index 8c7155fa..9a839a81 100644 --- a/world/map/npc/006-1/spirit.txt +++ b/world/map/npc/006-1/spirit.txt @@ -178,7 +178,7 @@ L_Next5: mes "\"Kekeke... excellent! Yes, here goes your first spell, the flying backpack! If you are overloaded, it will take the load off your shoulders.\""; next; mes "[Earth Spirit]"; - mes "\"Take a cocoon, living or dead, and suffuse it in magic. Whisper '" + getspellinvocation("flying-backpack") + "', and feel it float!\""; + mes "\"Take a cocoon, living or dead, and suffuse it in magic. Whisper '" + ("flying-backpack") + "', and feel it float!\""; goto L_Q_magic_finish; L_Q_magic_3: @@ -196,7 +196,7 @@ L_Next6: mes "\"Yeees, good! This one is a protection spell, making your skin harder. You need a hard spike for it, though. Hold that spike in your hands, and focus on it.\""; next; mes "[Earth Spirit]"; - mes "\"Next, say '" + getspellinvocation("protect") + "', and feel your skin grow rigid! Very useful against stings and stabs and pokes and pricks and that sort of stuff.\""; + mes "\"Next, say '" + ("protect") + "', and feel your skin grow rigid! Very useful against stings and stabs and pokes and pricks and that sort of stuff.\""; goto L_Q_magic_finish; L_Q_magic_4: diff --git a/world/map/npc/006-1/tree.txt b/world/map/npc/006-1/tree.txt index 6740312e..57209d24 100644 --- a/world/map/npc/006-1/tree.txt +++ b/world/map/npc/006-1/tree.txt @@ -160,9 +160,3 @@ L_Close: callfunc "QuestTreeTouch"; close; } - -006-1,83,59,0|script|#DruidTree1#_M|400 -{ - callfunc "QuestTreeTouch"; - close; -} diff --git a/world/map/npc/007-2/witch.txt b/world/map/npc/007-2/witch.txt index 557b5f62..f5fcda32 100644 --- a/world/map/npc/007-2/witch.txt +++ b/world/map/npc/007-2/witch.txt @@ -639,10 +639,10 @@ OnTimer34000: end; // Trigger 4 areatimers to show the teleport spell // This is better looking than a basic areawarp - areatimer "007-2", 0, 0, 57, 55, 3000, "Valia::OnWarpHero"; - areatimer "007-2", 0, 0, 57, 55, 3500, "Valia::OnWarpHelper1"; - areatimer "007-2", 0, 0, 57, 55, 4000, "Valia::OnWarpHelper2"; - areatimer "007-2", 0, 0, 57, 55, 4500, "Valia::OnWarpHelper3"; + areatimer 0, "007-2", 0, 0, 57, 55, 3000, "Valia::OnWarpHero"; + areatimer 0, "007-2", 0, 0, 57, 55, 3500, "Valia::OnWarpHelper1"; + areatimer 0, "007-2", 0, 0, 57, 55, 4000, "Valia::OnWarpHelper2"; + areatimer 0, "007-2", 0, 0, 57, 55, 4500, "Valia::OnWarpHelper3"; npctalk strnpcinfo(0), "Spiralis Major!"; misceffect FX_BLUE_MAGIC_CAST; end; diff --git a/world/map/npc/008-1/hinnak.txt b/world/map/npc/008-1/hinnak.txt index c2360141..d3828d74 100644 --- a/world/map/npc/008-1/hinnak.txt +++ b/world/map/npc/008-1/hinnak.txt @@ -217,7 +217,7 @@ L_Sagatha_scary: L_Sagatha_word: mes "[Farmer Hinnak]"; - mes "\"Oh, I can't be sure... but something like '" + getspellinvocation("summon-maggots") + "', I think.\""; + mes "\"Oh, I can't be sure... but something like '" + ("summon-maggots") + "', I think.\""; goto L_Close; L_NoBeer: diff --git a/world/map/npc/009-2/misc.txt b/world/map/npc/009-2/misc.txt index b28d43b5..139033ec 100644 --- a/world/map/npc/009-2/misc.txt +++ b/world/map/npc/009-2/misc.txt @@ -39,7 +39,7 @@ L_magic: mes "The page after that is once again hastily written, with many crossed out words and sections and side remarks such as 'it almost worked' or 'it worked fine yesterday.'"; next; mes "[Bookshelf]"; - mes "The last word on that page is '" + getspellinvocation("make-iron-powder") + ",' and it's underlined twice with a comment next to it saying 'finally got it right.'"; + mes "The last word on that page is '" + ("make-iron-powder") + ",' and it's underlined twice with a comment next to it saying 'finally got it right.'"; next; mes "[Bookshelf]"; mes "Unfortunately, you can't make out what the transmutation is for or even whether it requires any materials..."; diff --git a/world/map/npc/009-2/wyara.txt b/world/map/npc/009-2/wyara.txt index ba33d29f..d0bffbea 100644 --- a/world/map/npc/009-2/wyara.txt +++ b/world/map/npc/009-2/wyara.txt @@ -242,7 +242,7 @@ L_M_spell: L_M_spell3: mes "[Wyara the Witch]"; - mes "\"Now that you know the basics of nature magic, here is one of my favourites: '" + getspellinvocation("rain") + "' will summon rain, whereever you are standing. It will consume a bottle of water, though.\""; + mes "\"Now that you know the basics of nature magic, here is one of my favourites: '" + ("rain") + "' will summon rain, whereever you are standing. It will consume a bottle of water, though.\""; if (getskilllv(SKILL_MAGIC) < 2) mes "\"You are not powerful enough to use it yet, though; you will first have to absorb more magic from the mana seed.\""; next; @@ -250,14 +250,14 @@ L_M_spell3: L_M_spell2: mes "[Wyara the Witch]"; - mes "\"Here is another useful one: '" + getspellinvocation("detect-players") + "'. It will tell you the names of everyone nearby, but beware that there are ways to protect against it.\""; + mes "\"Here is another useful one: '" + ("detect-players") + "'. It will tell you the names of everyone nearby, but beware that there are ways to protect against it.\""; if (getskilllv(SKILL_MAGIC) < 2) mes "\"Hmm. You aren't powerful enough for this one either yet, I think.\""; next; if (!(getpartnerid2())) goto L_M_main; mes "[Wyara the Witch]"; - mes "\"Married partners can find each other even more easily. Use the '" + getspellinvocation("sense-spouse") + "' spell instead.\""; + mes "\"Married partners can find each other even more easily. Use the '" + ("sense-spouse") + "' spell instead.\""; next; goto L_M_main; diff --git a/world/map/npc/009-3/sword.txt b/world/map/npc/009-3/sword.txt index 91366f9e..dbb177bc 100644 --- a/world/map/npc/009-3/sword.txt +++ b/world/map/npc/009-3/sword.txt @@ -103,7 +103,7 @@ L_Next1: mes "\"So thou art bound to the path of War, as am I, as is my sister...\""; next; mes "[Magic Sword]"; - mes "\"So be it, fellow warrior. Hear the incantation for the blade spell: '" + getspellinvocation("magic-blade") + "'\""; + mes "\"So be it, fellow warrior. Hear the incantation for the blade spell: '" + ("magic-blade") + "'\""; mes "\"Hold a knife, sharp or regular, when thou speakest it.\""; set @Q_status, @STATUS_LEARNED_MAGICBLADE; callsub S_update_var; @@ -152,7 +152,7 @@ L_Next3: mes "\"The spell I shall teach thee is the hail of arrows spell. It will make arrows fall down from the heavens unto thy enemies.\""; next; mes "[Magic Sword]"; - mes "\"Take twenty arrows, sprinkle sulphur powder over them, and then speak '" + getspellinvocation("arrow-hail") + "'. Throw them high up in the air, and watch the hail unfold before thy feet.\""; + mes "\"Take twenty arrows, sprinkle sulphur powder over them, and then speak '" + get(.invocation$, "arrow-hail") + "'. Throw them high up in the air, and watch the hail unfold before thy feet.\""; close; L_L2_almost_done: diff --git a/world/map/npc/009-6/brodomir.txt b/world/map/npc/009-6/brodomir.txt index 02704447..ea73ac36 100644 --- a/world/map/npc/009-6/brodomir.txt +++ b/world/map/npc/009-6/brodomir.txt @@ -195,7 +195,7 @@ L_SkipItemback: L_Check: if (getareausers("009-5", 20, 20, 80, 80, 1) > 1) end; - areatimer "009-5", 20, 20, 80, 80, 0, "Brodomir::OnReward"; + areatimer 0, "009-5", 20, 20, 80, 80, 0, "Brodomir::OnReward"; goto L_End; OnReward: diff --git a/world/map/npc/009-7/eventHandler.txt b/world/map/npc/009-7/eventHandler.txt index d20fff4d..6f6419ca 100644 --- a/world/map/npc/009-7/eventHandler.txt +++ b/world/map/npc/009-7/eventHandler.txt @@ -40,7 +40,7 @@ OnBecomeKiller: end; OnCommandIntrusion: - areatimer "009-7", $@fightclub_x1, $@fightclub_y1, $@fightclub_x2, $@fightclub_y2, 0, "#FightClubUtils::OnIntrusion"; // we can not do this directly on #handler because it already have a timer + areatimer 0, "009-7", $@fightclub_x1, $@fightclub_y1, $@fightclub_x2, $@fightclub_y2, 0, "#FightClubUtils::OnIntrusion"; // we can not do this directly on #handler because it already have a timer end; } diff --git a/world/map/npc/009-7/rouge.txt b/world/map/npc/009-7/rouge.txt index 7660683e..b9b8e4cd 100644 --- a/world/map/npc/009-7/rouge.txt +++ b/world/map/npc/009-7/rouge.txt @@ -78,13 +78,13 @@ L_Challenge: next; mes "[Rouge]"; mes "To challenge a player to a duel, you need to write this command:"; - mes "%%E ##a"+ getspellinvocation("duel") +" (name)##0"; + mes "%%E ##a"+ ("duel") +" (name)##0"; next; mes "Your opponent will have to talk to me to accept or decline your offer."; mes "The request will expire ##2"+ @time$ +"##0 after being sent."; next; mes "Keep in mind that you can ignore incoming duel requests with this command:"; - mes "%%E ##a"+ getspellinvocation("dueloff") +"##0"; + mes "%%E ##a"+ ("dueloff") +"##0"; next; mes "To un-ignore, simply write the same command again."; goto L_End; diff --git a/world/map/npc/011-1/auldsbel.txt b/world/map/npc/011-1/auldsbel.txt index 094651e9..4a57b75b 100644 --- a/world/map/npc/011-1/auldsbel.txt +++ b/world/map/npc/011-1/auldsbel.txt @@ -236,7 +236,7 @@ L_Sul_t_s: mes "\"Very well, then. You have been quite helpful with my experiments, after all. As you may have noticed, the spell takes a pile of volcanic ashes. Close your hands around it, then whisper the invocation.\""; next; mes "[Auldsbel the Wizard]"; - mes "\"That invocation is '" + getspellinvocation("make-sulphur") + "'.\""; + mes "\"That invocation is '" + ("make-sulphur") + "'.\""; next; mes "[Auldsbel the Wizard]"; mes "\"You may find that you can transmute the powder more effectively after a while; that is perfectly natural.\""; @@ -332,7 +332,7 @@ L_about_nature: L_about_other_spells: mes "[Auldsbel the Wizard]"; - mes "\"A few spells are not claimed by any particular school of magic. In practice, this means that anyone can cast them if they just have sufficient magical power. The most prominent example is the 'detect magic' spell, '" + getspellinvocation("detect-magic") + "'.\""; + mes "\"A few spells are not claimed by any particular school of magic. In practice, this means that anyone can cast them if they just have sufficient magical power. The most prominent example is the 'detect magic' spell, '" + ("detect-magic") + "'.\""; next; goto L_a_s_minimenu; @@ -984,10 +984,10 @@ L_learn_spell: mes "\"This spell is a simple transmutation invocation. All it takes is a clean wooden log. Hold it in your hand, focus your powers, and say the magic invocation.\""; next; mes "[Auldsbel the Wizard]"; - mes "\"You can turn the log into a wooden figurine by imagining the creature whose shape you want in your head and saying `" + getspellinvocation("transmute-wood-to-figurine") + ",' followed by the last syllable of the name of the creature you want to shape it into.\""; + mes "\"You can turn the log into a wooden figurine by imagining the creature whose shape you want in your head and saying `" + ("transmute-wood-to-figurine") + ",' followed by the last syllable of the name of the creature you want to shape it into.\""; next; mes "[Auldsbel the Wizard]"; - mes "\"So `" + getspellinvocation("transmute-wood-to-figurine") + " lurk' for a Skytlurk figurine, for example. If you know what a Skytlurk is, I mean, otherwise you will have a hard time imagining it. You may want to try some others instead, though.\""; + mes "\"So `" + ("transmute-wood-to-figurine") + " lurk' for a Skytlurk figurine, for example. If you know what a Skytlurk is, I mean, otherwise you will have a hard time imagining it. You may want to try some others instead, though.\""; next; mes "[Auldsbel the Wizard]"; mes "\"Oh... and it has to be the old Tritan name. Most creatures nowadays have very different names, but some old Tritan names have survived. Just try some, until you find one that fits.\""; @@ -1001,7 +1001,7 @@ L_learn_spell: L_repeat_spell: mes "[Auldsbel the Wizard]"; - mes "\"The invocation is `" + getspellinvocation("transmute-wood-to-figurine") + ",' followed by the last syllable of the name of the creature you want to shape the log into. So `" + getspellinvocation("transmute-wood-to-figurine") + " lurk' for a Skytlurk figurine.\""; + mes "\"The invocation is `" + ("transmute-wood-to-figurine") + ",' followed by the last syllable of the name of the creature you want to shape the log into. So `" + ("transmute-wood-to-figurine") + " lurk' for a Skytlurk figurine.\""; next; mes "[Auldsbel the Wizard]"; mes "\"But keep two things in mind: First, you must KNOW what the creature looks like – so a Skytlurk probably won't work – and second, you must use the old Tritan name of it. `Fluffy' and `Scorpion' are modern names, so those won't work, you should try some others.\""; @@ -1092,7 +1092,7 @@ L_Next9: mes "[1000 experience points]"; next; mes "[Auldsbel the Wizard]"; - mes "\"Now, listen carefully: to make a short tank top out of three pieces of cloth, you must use the invocation '" + getspellinvocation("make-short-tanktop") + "'.\""; + mes "\"Now, listen carefully: to make a short tank top out of three pieces of cloth, you must use the invocation '" + ("make-short-tanktop") + "'.\""; next; mes "[Auldsbel the Wizard]"; mes "\"But be careful; transmutations can go wrong, and that can injure you. When you have more overall spellcasting practice, come back to me.\""; @@ -1131,7 +1131,7 @@ L_Next10: mes "[1000 experience points]"; next; mes "[Auldsbel the Wizard]"; - mes "\"The next spell I have will make a normal tank top out of four pieces of cloth. The invocation is '" + getspellinvocation("make-tanktop") + "', make sure to write this down.\""; + mes "\"The next spell I have will make a normal tank top out of four pieces of cloth. The invocation is '" + ("make-tanktop") + "', make sure to write this down.\""; next; goto L_main_menu; @@ -1161,7 +1161,7 @@ L_Next11: mes "[1000 experience points]"; next; mes "[Auldsbel the Wizard]"; - mes "\"To make a shirt, use the invocation '" + getspellinvocation("make-shirt") + "'. This will require five pieces of cloth.\""; + mes "\"To make a shirt, use the invocation '" + ("make-shirt") + "'. This will require five pieces of cloth.\""; next; goto L_main_menu; @@ -1191,7 +1191,7 @@ L_Next12: mes "[1000 experience points]"; next; mes "[Auldsbel the Wizard]"; - mes "\"This spell makes arrows out of a single wooden log. Its invocation is '" + getspellinvocation("make-arrows") + "'.\""; + mes "\"This spell makes arrows out of a single wooden log. Its invocation is '" + ("make-arrows") + "'.\""; next; goto L_main_menu; @@ -1205,7 +1205,7 @@ L_stu_3: L_stu_3_repeat: mes "[Auldsbel the Wizard]"; - mes "\"This one has the invocation `" + getspellinvocation("make-concentration-potion") + "'. Put two cobalt leaves and two pink flower petals into a bottle of water, hold it up, and speak that phrase.\""; + mes "\"This one has the invocation `" + ("make-concentration-potion") + "'. Put two cobalt leaves and two pink flower petals into a bottle of water, hold it up, and speak that phrase.\""; next; mes "[Auldsbel the Wizard]"; mes "\"It is a tricky spell, but if it works out, you will transform the bottle into a concentration potion.\""; diff --git a/world/map/npc/012-3/mana-seed.txt b/world/map/npc/012-3/mana-seed.txt index bb479c2b..35d6ea52 100644 --- a/world/map/npc/012-3/mana-seed.txt +++ b/world/map/npc/012-3/mana-seed.txt @@ -37,7 +37,7 @@ "You may only be children, but you recognize that it is this man only who can save the world. As the walls rush towards you to crush your small group, you exchange a glance with your twin sister – there is no doubt what you must do...", "The sacred place is surrounded by nothingness; were it not for your magic, you would have no hope of returning. The old and young man stands nearby; he has been waiting for you, for centuries. He has all the time in the world, after all...", "Nothing remains behind. The underground castle is empty now, its chambers plundered, its throne destroyed. Shivering, you climb down the stairs, towards the wailing of the underworld that is waiting beneath...", - "You feel soft, fluffy fur brushing against your skin and are filled with happiness. Somehow, the word `" + getspellinvocation("happy-curse") + "' comes to mind..."; + "You feel soft, fluffy fur brushing against your skin and are filled with happiness. Somehow, the word `" + ("happy-curse") + "' comes to mind..."; set @max_magic, 2; diff --git a/world/map/npc/013-1/sagatha.txt b/world/map/npc/013-1/sagatha.txt index 558e9b70..84336eef 100644 --- a/world/map/npc/013-1/sagatha.txt +++ b/world/map/npc/013-1/sagatha.txt @@ -267,7 +267,7 @@ L_teach_N14: mes "\"Some forest creatures sometimes overgrow their fur or hide. That makes them uncomfortable.\""; next; mes "[Sagatha the Witch]"; - mes "\"You can help them with shearing magic. Press your hands together and say '" + getspellinvocation("shear") + "'. Then touch them with your hands, and brush off any excess.\""; + mes "\"You can help them with shearing magic. Press your hands together and say '" + ("shear") + "'. Then touch them with your hands, and brush off any excess.\""; next; mes "[Sagatha the Witch]"; mes "\"The spell is strong, so you only need to do this once. Be careful not to cut them. Some things they shed are useful. Often they will leave them to you as a thank-you.\""; @@ -280,7 +280,7 @@ L_teach_N10: mes "\"Next, a nature spell. Take a cocoon shell. Hold it in your hand. Feel its lightness.\""; next; mes "[Sagatha the Witch]"; - mes "\"Now whisper '" + getspellinvocation("flying-backpack") + "', and if your backpack was pressing on you you should no longer feel it now.\""; + mes "\"Now whisper '" + ("flying-backpack") + "', and if your backpack was pressing on you you should no longer feel it now.\""; goto L_practice; L_teach_A10: @@ -290,14 +290,14 @@ L_teach_A10: mes "\"To protect against others' magic, take a small mushroom from a shady place. Mushrooms draw things out of the earth. Rub your mushroom into pieces between your hands.\""; next; mes "[Sagatha the Witch]"; - mes "\"Then say '" + getspellinvocation("barrier") + "' and let the mushroom's power take over.\""; + mes "\"Then say '" + ("barrier") + "' and let the mushroom's power take over.\""; goto L_practice; L_teach_A11: if (@mexp < 200) goto L_teach_noexp; mes "[Sagatha the Witch]"; - mes "\"If you must fight, call allies. You can call spiky mushrooms out of the ground with a mushroom spike and a root. Hold up the spike and call out to them: '" + getspellinvocation("summon-spiky-mushrooms") + "'. Then press the root to the ground.\""; + mes "\"If you must fight, call allies. You can call spiky mushrooms out of the ground with a mushroom spike and a root. Hold up the spike and call out to them: '" + ("summon-spiky-mushrooms") + "'. Then press the root to the ground.\""; next; mes "[Sagatha the Witch]"; mes "\"Spiky mushrooms often grow too many spikes, so you can shear the spikes off of some.\""; @@ -308,17 +308,17 @@ L_teach_A12: if (@mexp < 220) goto L_teach_noexp; mes "[Sagatha the Witch]"; - mes "\"You can call fluffies, too. But for them you must call out '" + getspellinvocation("summon-fluffies") + "' instead, with white fluffy fur instead of a spike. And don't forget the root.\""; + mes "\"You can call fluffies, too. But for them you must call out '" + ("summon-fluffies") + "' instead, with white fluffy fur instead of a spike. And don't forget the root.\""; goto L_practice; L_teach_N11: if (@mexp < 250) goto L_teach_noexp; mes "[Sagatha the Witch]"; - mes "\"You can harden your skin with a hard spike. Hold it in your hands and speak '" + getspellinvocation("protect") + "', then draw its hardness into your skin.\""; + mes "\"You can harden your skin with a hard spike. Hold it in your hands and speak '" + ("protect") + "', then draw its hardness into your skin.\""; next; mes "[Sagatha the Witch]"; - mes "\"Or call it into someone else's skin, by saying that someone's name right after the '" + getspellinvocation("protect") + "'.\""; + mes "\"Or call it into someone else's skin, by saying that someone's name right after the '" + ("protect") + "'.\""; goto L_practice; L_teach_noexp: diff --git a/world/map/npc/013-2/wizard.txt b/world/map/npc/013-2/wizard.txt index ced2865b..cf8598b0 100644 --- a/world/map/npc/013-2/wizard.txt +++ b/world/map/npc/013-2/wizard.txt @@ -75,7 +75,7 @@ L_TeachSpell: mes "\"This one may not seem too powerful, but it can be quite handy; it's the 'hide' spell. It will shield you from some forms of detection magic.\""; next; mes "[Old Wizard]"; - mes "\"Put a piece of cotton cloth on your head, and speak out '" + getspellinvocation("hide") + "', loudly and clearly. The protection lasts quite long, but you may have to renew it on occasion.\""; + mes "\"Put a piece of cotton cloth on your head, and speak out '" + ("hide") + "', loudly and clearly. The protection lasts quite long, but you may have to renew it on occasion.\""; next; mes "[Old Wizard]"; mes "\"You can also cast it on others, of course. Just speak their name after you pronounce the invocation.\""; diff --git a/world/map/npc/014-1/wedding-officiator.txt b/world/map/npc/014-1/wedding-officiator.txt index fc237082..dfdab00b 100644 --- a/world/map/npc/014-1/wedding-officiator.txt +++ b/world/map/npc/014-1/wedding-officiator.txt @@ -9,7 +9,7 @@ goto L_main; L_main: - if (getpartnerid2()) + if (PARTNER) goto L_main_married; menu @@ -35,10 +35,10 @@ L_explain_marriage: mes "\"Both you and your partner must be at least " + WEDDING_MIN_LEVEL + " levels of age, though; the law is very firm on that. But if all of that works out, I will give you two wedding rings for the ceremony.\""; next; mes "[Wedding Officiator]"; - mes "\"To complete the marriage, each of you has to put on one of these rings, and you have to stand next to each other in the southern part of this park. Then one of you says `marry' and then the other person's name.\""; + mes "\"To complete the marriage, each of you has to put on one of these rings, and you have to stand next to each other in the southern part of this park. Then one of you says `#marry' and then the other person's name.\""; next; mes "[Wedding Officiator]"; - mes "\"So if you would want to marry me, for example, you would say `marry Wendy'. Just like that. Your partner then has to decide whether he or she wants that. And if you both agree, then you're married!\""; + mes "\"So if you would want to marry me, for example, you would say `#marry Wendy'. Just like that. Your partner then has to decide whether he or she wants that. And if you both agree, then you're married!\""; mes "She again smiles that broad smile of hers."; next; goto L_main; @@ -135,7 +135,7 @@ L_too_poor: L_main_married: mes "[Wedding Officiator]"; - mes "\"I hope that you and your partner are doing well?\""; + mes "\"I hope that you and "+ strcharinfo(0, get(BL_ID, PARTNER)) +" are doing well?\""; next; menu "We are very happy, thanks for asking!", L_farewell, @@ -219,8 +219,8 @@ L_divorce_nomoney: L_do_divorce: if (Zeny < @divorce_cost) goto L_divorce_nomoney; - if (divorce()) - goto L_DidDivorce; + set PARTNER, 0, PARTNER; // divorce the partner first, which will also divorce the rid if succesful + if (PARTNER < 1) goto L_DidDivorce; mes "[Wedding Officiator]"; mes "The officiator searches through her records for your partner."; diff --git a/world/map/npc/015-1/sword.txt b/world/map/npc/015-1/sword.txt index 239de752..90c56283 100644 --- a/world/map/npc/015-1/sword.txt +++ b/world/map/npc/015-1/sword.txt @@ -109,7 +109,7 @@ L_Initial_ok: mes "\"Oh, my apologies – that was a little overly dramatic. But I do not get to talk to thy kin anymore all that often.\""; next; mes "[Mystic Sword]"; - mes "\"For the flare dart spell throw a handful of sulphur powder up into the air, and say, '" + getspellinvocation("flare-dart") + "'.\""; + mes "\"For the flare dart spell throw a handful of sulphur powder up into the air, and say, '" + ("flare-dart") + "'.\""; set @Q_status, @STATUS_LEARNED_FLAREDART; callsub S_update_var; next; @@ -257,7 +257,7 @@ L_Next3: callsub S_update_var; next; mes "[Mystic Sword]"; - mes "\"Speak '" + getspellinvocation("magic-knuckles") + "' and take a glass of beer and drink it, without ever taking it off thy lips. This will harden and enchant thy fists, turning them into powerful weapons.\""; + mes "\"Speak '" + ("magic-knuckles") + "' and take a glass of beer and drink it, without ever taking it off thy lips. This will harden and enchant thy fists, turning them into powerful weapons.\""; close; L_L2_almost_done: @@ -297,7 +297,7 @@ L_Next4: callsub S_update_var; next; mes "[Mystic Sword]"; - mes "\"This powder thou shalst need to cast the lightning spell. Throw it up into the air and shout '" + getspellinvocation("lightning-strike") + "', and smite thine enemies with lightning.\""; + mes "\"This powder thou shalst need to cast the lightning spell. Throw it up into the air and shout '" + ("lightning-strike") + "', and smite thine enemies with lightning.\""; next; goto L_Farewell; diff --git a/world/map/npc/017-4/waric.txt b/world/map/npc/017-4/waric.txt index f98cb0d0..11f836b6 100644 --- a/world/map/npc/017-4/waric.txt +++ b/world/map/npc/017-4/waric.txt @@ -234,7 +234,7 @@ L_Mushroom: mes "\"Now that you are a student of mine, I will teach you some spells.\""; next; mes "\"We will start with an easy one. I will teach you how to summon a wicked mushroom.\""; - mes "\"The spell consumes a Small Mushroom and a Dark Crystal. Shove the Dark Crystal into the Small Mushroom and yell " + getspellinvocation("summon-wickedmushroom") +".\""; + mes "\"The spell consumes a Small Mushroom and a Dark Crystal. Shove the Dark Crystal into the Small Mushroom and yell " + ("summon-wickedmushroom") +".\""; next; mes "\"A wicked mushroom will appear to fight for you.\""; set OrumQuest, 37; @@ -254,7 +254,7 @@ L_Next4: next; mes "\"You have to use two roots for this spell. First you have to take one root and break off all the root hair. Shape it into a stick, if you will. Then put it on top of the other root and form an arrow-like structure.\""; next; - mes "\"Once this is done you have to throw it in the air and scream " + getspellinvocation("toxic-dart") + " and the two roots will turn into toxic darts, a projectile you can throw.\""; + mes "\"Once this is done you have to throw it in the air and scream " + ("toxic-dart") + " and the two roots will turn into toxic darts, a projectile you can throw.\""; next; mes "\"If you want to learn more, come back later.\""; set OrumQuest, 38; @@ -312,7 +312,7 @@ L_SnakesSpell: L_Next7: mes "[Waric]"; - mes "\"I said " + getspellinvocation("summon-snakes") + ".\""; + mes "\"I said " + ("summon-snakes") + ".\""; mes "\"Have fun with those spells and use them to cause hate, anger and death.\""; set OrumQuest, 41; goto L_Close; @@ -341,9 +341,9 @@ L_MoreMagic: L_Next8: mes "[Waric]"; mes "\"Yes, of course.\""; - mes "\"To summon the snakes use " + getspellinvocation("summon-snakes") + ".\""; - mes "\"Say " + getspellinvocation("toxic-dart") + " to make your roots into toxic darts.\""; - mes "\"And the first spell, to summon wicked mushrooms, is " + getspellinvocation("summon-wickedmushroom") + ".\""; + mes "\"To summon the snakes use " + ("summon-snakes") + ".\""; + mes "\"Say " + ("toxic-dart") + " to make your roots into toxic darts.\""; + mes "\"And the first spell, to summon wicked mushrooms, is " + ("summon-wickedmushroom") + ".\""; next; mes "\"Now leave. Spread chaos with the spells I have taught you!\""; goto L_Close; diff --git a/world/map/npc/017-9/npcs.txt b/world/map/npc/017-9/npcs.txt index b14428c5..e5a2ec04 100644 --- a/world/map/npc/017-9/npcs.txt +++ b/world/map/npc/017-9/npcs.txt @@ -44,3 +44,13 @@ callfunc "SuperDebug"; end; } + +-|script|Numa Spell|32767 +{ + callfunc "SuperDebug"; + end; + +OnInit: + registercmd "@numa", "Numa Spell"; + end; +} diff --git a/world/map/npc/027-6/general_krukan.txt b/world/map/npc/027-6/general_krukan.txt index 6b086cee..1c2ff95f 100644 --- a/world/map/npc/027-6/general_krukan.txt +++ b/world/map/npc/027-6/general_krukan.txt @@ -86,7 +86,7 @@ OnTimer5000: L_Return_1: set $@CRYPT_FIGHT1_PLAYER_COUNT, 0; - areatimer "027-6", 0, 0, 79, 84, 10, "General Krukan::OnTick"; + areatimer 0, "027-6", 0, 0, 79, 84, 10, "General Krukan::OnTick"; end; L_CryptLogic: @@ -182,7 +182,7 @@ L_CleanUpLosers: end; L_CleanUp: - areatimer "027-6", 0, 0, 79, 84, 10, "General Krukan::OnReward"; + areatimer 0, "027-6", 0, 0, 79, 84, 10, "General Krukan::OnReward"; set $@CRYPT_FIGHT1, 0; set $@CRYPT_FIGHT1_PLAYER_COUNT, 0; set $@CRYPT_FIGHT1_WAVE, 0; diff --git a/world/map/npc/027-7/general_razha.txt b/world/map/npc/027-7/general_razha.txt index e22f6392..f331d95c 100644 --- a/world/map/npc/027-7/general_razha.txt +++ b/world/map/npc/027-7/general_razha.txt @@ -86,7 +86,7 @@ OnTimer5000: L_Return_1: set $@CRYPT_FIGHT2_PLAYER_COUNT, 0; - areatimer "027-7", 0, 0, 79, 84, 10, "General Razha::OnTick"; + areatimer 0, "027-7", 0, 0, 79, 84, 10, "General Razha::OnTick"; end; L_CryptLogic: @@ -186,7 +186,7 @@ L_CleanUpLosers: L_CleanUp: mapannounce "027-7", "General Razha : How in all hells could that happen? I am lost forever.", 0; mapannounce "027-4", "General Razha is defeated.", 0; - areatimer "027-7", 0, 0, 79, 84, 10, "General Razha::OnReward"; + areatimer 0, "027-7", 0, 0, 79, 84, 10, "General Razha::OnReward"; set $@CRYPT_FIGHT2, 0; set $@CRYPT_FIGHT2_PLAYER_COUNT, 0; set $@CRYPT_FIGHT2_WAVE, 0; diff --git a/world/map/npc/027-8/general_terogan.txt b/world/map/npc/027-8/general_terogan.txt index ca8691f0..522b1eaa 100644 --- a/world/map/npc/027-8/general_terogan.txt +++ b/world/map/npc/027-8/general_terogan.txt @@ -141,7 +141,7 @@ OnTimer5000: L_Return_1: set $@CRYPT_FIGHT3_PLAYER_COUNT, 0; - areatimer "027-8", 0, 0, 79, 84, 10, "General Terogan#Main::OnTick"; + areatimer 0, "027-8", 0, 0, 79, 84, 10, "General Terogan#Main::OnTick"; end; L_CryptLogic: @@ -249,7 +249,7 @@ L_CleanUpLosers: L_CleanUp: mapannounce "027-8", "General Terogan : You might have won this battle, but you will never defeat me!", 0; - areatimer "027-8", 0, 0, 79, 84, 10, "General Terogan#Main::OnReward"; + areatimer 0, "027-8", 0, 0, 79, 84, 10, "General Terogan#Main::OnReward"; set $@CRYPT_FIGHT3, 0; set $@CRYPT_FIGHT3_PLAYER_COUNT, 0; set $@CRYPT_FIGHT3_WAVE, 0; diff --git a/world/map/npc/029-1/barrier.txt b/world/map/npc/029-1/barrier.txt index e6c580ad..7414f78b 100644 --- a/world/map/npc/029-1/barrier.txt +++ b/world/map/npc/029-1/barrier.txt @@ -18,6 +18,6 @@ OnTalk: end; OnCommandTalk: - areatimer "029-1", 61, 61, 69, 73, 0, "#CandorAnnouncer::OnTalk"; + areatimer 0, "029-1", 61, 61, 69, 73, 0, "#CandorAnnouncer::OnTalk"; end; } diff --git a/world/map/npc/029-2/morgan.txt b/world/map/npc/029-2/morgan.txt index 1f8f19f4..d5604f93 100644 --- a/world/map/npc/029-2/morgan.txt +++ b/world/map/npc/029-2/morgan.txt @@ -78,7 +78,7 @@ L_Start: mes "\"Various wands and staffs are found throughout the land with many different strengths and weaknesses.\""; mes "\"To use the wand you need to have it equipped and speak the incantation to let it tap into your mana.\""; mes "\"As the power of your magic grows so will the spells you can cast.\""; - mes "\"Lets start with a basic wand attack. " + getspellinvocation("wand") + "\""; + mes "\"Lets start with a basic wand attack. " + get(.invocation$, "spell-wand") + "\""; mes "\"Equip the wand and lets try out that spell.\""; mes "\"To cast a spell open the chat window, type the invocation and press enter.\""; mes "\"Speak to me again once you've cast the spell.\""; @@ -86,7 +86,7 @@ L_Start: L_Started: mes "[Morgan]"; - mes "\"Lets start with a basic wand attack. " + getspellinvocation("wand") + "\""; + mes "\"Lets start with a basic wand attack. " + get(.invocation$, "spell-wand") + "\""; mes "\"Equip the wand and lets try out that spell.\""; mes "\"To cast a spell open the chat window, type the invocation and press enter.\""; mes "\"Speak to me again once you've cast the spell.\""; @@ -95,7 +95,7 @@ L_Started: L_CastOnce: mes "[Morgan]"; mes "\"Ok, good job! Looks like you have good mana flow.\""; - mes "\"Onto the next lesson. Now that you have " + getspellinvocation("wand") + " cast,\""; + mes "\"Onto the next lesson. Now that you have " + get(.invocation$, "spell-wand") + " cast,\""; mes "\"Each time you attack the wand will convert a bit of you mana into a magic bolt.\""; mes "\"After so many attacks, you will need to recast the invocation to stay attuned to the wand.\""; mes "\"(Logging out will also cancel any spell effects currently active in-game.).\""; @@ -106,7 +106,7 @@ L_CastOnce: L_LearningDone: mes "[Morgan]"; - mes "\"" + getspellinvocation("wand") + " is a basic wand attack.\""; + mes "\"" + get(.invocation$, "spell-wand") + " is a basic wand attack.\""; mes "\"A Wand must be equipped to use the spell.\""; mes "\"To cast a spell open the chat window, type the invocation and press enter.\""; mes "\"I've taught you all I can for now. You should visit the Mana Seed north west of Hurnscald.\""; diff --git a/world/map/npc/029-2/tanisha.txt b/world/map/npc/029-2/tanisha.txt index 7142721e..025cc499 100644 --- a/world/map/npc/029-2/tanisha.txt +++ b/world/map/npc/029-2/tanisha.txt @@ -221,7 +221,7 @@ OnTimer1000: if (getareausers("029-2", 98, 84, 106, 89) == 0) goto L_CleanUp; // This is needed because multiple players can be in the area at once - areatimer "029-2", 98, 84, 106, 89, 0, "Tanisha::OnTick"; + areatimer 0, "029-2", 98, 84, 106, 89, 0, "Tanisha::OnTick"; end; L_CleanUp: diff --git a/world/map/npc/029-3/parua.txt b/world/map/npc/029-3/parua.txt index 5ebcc4d7..ef630413 100644 --- a/world/map/npc/029-3/parua.txt +++ b/world/map/npc/029-3/parua.txt @@ -187,7 +187,7 @@ OnTimer5000: L_Return_1: set $@FIGHT_CAVE_PLAYER_COUNT, 0; - areatimer "029-3", 20, 20, 70, 60, 10, "Parua::OnTick"; + areatimer 0, "029-3", 20, 20, 70, 60, 10, "Parua::OnTick"; end; L_CaveLogic: @@ -215,7 +215,7 @@ L_NextRound: goto L_CleanUp; set $@FIGHT_CAVE_POINTS, $@FIGHT_CAVE_LEVEL; - areatimer "029-3", 20, 20, 70, 60, 10, "Parua::OnNewRound"; + areatimer 0, "029-3", 20, 20, 70, 60, 10, "Parua::OnNewRound"; set $@candor_npctalk$, "The next round (level " + $@FIGHT_CAVE_LEVEL + ") is starting with " + $@FIGHT_CAVE_PLAYER_COUNT + " player(s) left alive."; donpcevent "#CandorAnnouncer::OnCommandTalk"; @@ -360,7 +360,7 @@ L_CleanUp: npctalk strnpcinfo(0), "Game Over"; set $@candor_npctalk$, "The dungeon is now ready for its next victims."; donpcevent "#CandorAnnouncer::OnCommandTalk"; - areatimer "029-3", 20, 20, 70, 60, 10, "Parua::OnReward"; + areatimer 0, "029-3", 20, 20, 70, 60, 10, "Parua::OnReward"; set $@FIGHT_CAVE_STATUS, 0; set $@ANNOUNCE_TIME, 0; set $@FIGHT_CAVE_PAID, 0; diff --git a/world/map/npc/030-4/mana_battery.txt b/world/map/npc/030-4/mana_battery.txt index aea601c5..15ff40c3 100644 --- a/world/map/npc/030-4/mana_battery.txt +++ b/world/map/npc/030-4/mana_battery.txt @@ -197,7 +197,7 @@ OnTimer5000: L_Return_1: set $@XmasBossPlayerCount, 0; - areatimer "030-4", 0, 0, 60, 60, 10, "AniManOMat::OnTick"; + areatimer 0, "030-4", 0, 0, 60, 60, 10, "AniManOMat::OnTick"; end; L_CaveLogic: @@ -294,7 +294,7 @@ L_Finished: goto L_CleanUp; L_CleanUp: - areatimer "030-4", 0, 0, 50, 50, 10, "AniManOMat::OnReward"; + areatimer 0, "030-4", 0, 0, 50, 50, 10, "AniManOMat::OnReward"; set $@XmasBossPlayerCount, 0; set $@XmasBossRound, 0; set $@BombTimer, 0; @@ -338,7 +338,7 @@ L_EndNice: end; OnCommandChamberReset: - areatimer "030-4", 0, 0, 50, 50, 10, "AniManOMat::OnReward"; + areatimer 0, "030-4", 0, 0, 50, 50, 10, "AniManOMat::OnReward"; set $@XmasBattleStatus, 0; set $@XmasBossPlayerCount, 0; set $@XmasBossRound, 0; diff --git a/world/map/npc/031-4/cindyCave.txt b/world/map/npc/031-4/cindyCave.txt index 33c3a16f..c97b166d 100644 --- a/world/map/npc/031-4/cindyCave.txt +++ b/world/map/npc/031-4/cindyCave.txt @@ -131,7 +131,7 @@ OnTimer5000: L_Return_1: set $@FIGHT_YETI_PLAYER_COUNT, 0; - areatimer "031-4", 0, 0, 95, 91, 10, "Cindy::OnTick"; + areatimer 0, "031-4", 0, 0, 95, 91, 10, "Cindy::OnTick"; end; L_CaveLogic: @@ -184,7 +184,7 @@ OnPetDeath: end; L_CleanUp: - areatimer "031-4", 0, 0, 95, 91, 10, "Cindy::OnReward"; + areatimer 0, "031-4", 0, 0, 95, 91, 10, "Cindy::OnReward"; set $@FIGHT_YETI_STATUS, 0; set $@FIGHT_YETI_PLAYER_COUNT, 0; set $@FIGHT_YETI_WAVE, 0; diff --git a/world/map/npc/033-1/kimarr.txt b/world/map/npc/033-1/kimarr.txt index 6650198f..cbe2b289 100644 --- a/world/map/npc/033-1/kimarr.txt +++ b/world/map/npc/033-1/kimarr.txt @@ -196,7 +196,7 @@ L_Action: goto L_Died; // Checking if there is more than 1 player in the fight area if (getareausers("033-1", 79, 28, 88, 42) > 1) - areatimer "033-1", 79, 28, 88, 42, 10, "Kimarr::OnTooMany"; + areatimer 0, "033-1", 79, 28, 88, 42, 10, "Kimarr::OnTooMany"; if ($@Fluffy_Time == 180) npctalk strnpcinfo(0), strcharinfo(0) + ", you have 3 minutes."; diff --git a/world/map/npc/051-3/ambush.txt b/world/map/npc/051-3/ambush.txt index da12b306..7d659710 100644 --- a/world/map/npc/051-3/ambush.txt +++ b/world/map/npc/051-3/ambush.txt @@ -72,8 +72,8 @@ OnTimer9000: end; OnTimer11000: - areatimer "051-3", 22, 12, 102, 97, 500, "#BndtTl::OnOuch"; - areatimer "051-3", 22, 12, 102, 97, 3000, "#BndtTl::OnA"; + areatimer 0, "051-3", 22, 12, 102, 97, 500, "#BndtTl::OnOuch"; + areatimer 0, "051-3", 22, 12, 102, 97, 3000, "#BndtTl::OnA"; stopnpctimer; setnpctimer 0; end; diff --git a/world/map/npc/051-3/reinforcements.txt b/world/map/npc/051-3/reinforcements.txt index 73236dec..5870671c 100644 --- a/world/map/npc/051-3/reinforcements.txt +++ b/world/map/npc/051-3/reinforcements.txt @@ -49,7 +49,7 @@ OnRnfrcmts: areamonster "051-3", 29, 25, 48, 39, "", 1065, 3, "Door::OnB"; initnpctimer; mapannounce "051-3", "Bandit Lords : Do not let them escape!!" , 0; - areatimer "051-3", 25, 20, 80, 85, 10, "Door::OnDRnfrcmts"; + areatimer 0, "051-3", 25, 20, 80, 85, 10, "Door::OnDRnfrcmts"; end; OnB: @@ -72,7 +72,7 @@ L_OpenDoor: set $@illia_progress, 3; callfunc "UpdateIlliaProgress"; set $@illia_max_time, $@illia_max_time + 300; - areatimer "051-3", 25, 20, 80, 85, 10, "Door::OnKeyFound"; + areatimer 0, "051-3", 25, 20, 80, 85, 10, "Door::OnKeyFound"; stopnpctimer; setnpctimer 0; end; diff --git a/world/map/npc/052-1/channelling.txt b/world/map/npc/052-1/channelling.txt index 565f96fd..5eb3dfbf 100644 --- a/world/map/npc/052-1/channelling.txt +++ b/world/map/npc/052-1/channelling.txt @@ -141,6 +141,10 @@ L_Return: goto L_Hint; end; +OnCast: + callfunc "StartChannelling"; + end; + OnCommandSt: initnpctimer; end; @@ -259,7 +263,7 @@ S_CheckChannelling: set $@illia_channelling_status_msg$, $@illia_char_channelling$ + ": Damn! It faded a little."; if ($@illia_channelling_status_msg$ != "") - areatimer "052-1", 1, 1, 100, 80, 0, "#Power Circle::OnMPSC"; + areatimer 0, "052-1", 1, 1, 100, 80, 0, "#Power Circle::OnMPSC"; return; @@ -328,4 +332,8 @@ L_ChannellingFail: L_ShouldNotBeHere: heal -Hp, 0; end; + +OnInit: + registercmd "#catalazuli", strnpcinfo(0)+"::OnCast"; + end; } diff --git a/world/map/npc/052-2/lobby.txt b/world/map/npc/052-2/lobby.txt index efc0a20a..1b36d929 100644 --- a/world/map/npc/052-2/lobby.txt +++ b/world/map/npc/052-2/lobby.txt @@ -337,7 +337,7 @@ L_ChaseLuvia: set $@illia_progress, 6; callfunc "UpdateIlliaProgress"; set $@illia_max_time, $@illia_max_time + 360; - areatimer "052-2", 19, 18, 48, 43, 2000, "#LuviaShadow::OnNN"; + areatimer 0, "052-2", 19, 18, 48, 43, 2000, "#LuviaShadow::OnNN"; end; S_GetHeroRect: diff --git a/world/map/npc/052-2/partyroom.txt b/world/map/npc/052-2/partyroom.txt index 02d7a7ac..ec6d2a64 100644 --- a/world/map/npc/052-2/partyroom.txt +++ b/world/map/npc/052-2/partyroom.txt @@ -182,7 +182,7 @@ S_SpawnWitchGuard: misceffect FX_GROUND_SPAWN; monster "052-2", getx(), gety(), "", 1103, 1, "#LuviaDaemon::OnWGD"; detachrid; - areatimer "052-2", 73, 11, 115, 49, 0, "#LuviaDaemon::OnWGS"; + areatimer 0, "052-2", 73, 11, 115, 49, 0, "#LuviaDaemon::OnWGS"; return; OnTimer30000: @@ -198,7 +198,7 @@ OnTimer30000: L_TriggerTrance: set $@illia_level_7_progress, 3; set $@illia_luvia_trance_delay, 0; - areatimer "052-2", 73, 11, 115, 49, 0, "#LuviaDaemon::OnTT"; + areatimer 0, "052-2", 73, 11, 115, 49, 0, "#LuviaDaemon::OnTT"; setnpctimer 0; end; @@ -217,9 +217,9 @@ OnDeath: mapannounce "052-2", "Luvia : How? By mere humans! But we will see again! Enjoy your victory while it lasts, " + $@ILLIA_HERO$ + "!!", 0; set $@illia_bp, $Illia_Luvia_Harvest * 16 / 10 + 120; - areatimer "052-2", 73, 11, 115, 49, 0, "#LuviaDaemon::OnBP"; + areatimer 0, "052-2", 73, 11, 115, 49, 0, "#LuviaDaemon::OnBP"; - areatimer "052-2", 73, 11, 115, 49, 2000, "#LuviaDaemon::OnW00t"; + areatimer 0, "052-2", 73, 11, 115, 49, 2000, "#LuviaDaemon::OnW00t"; set $@illia_progress, 8; callfunc "UpdateIlliaProgress"; diff --git a/world/map/npc/052-2/storage.txt b/world/map/npc/052-2/storage.txt index 8abbb732..a8582408 100644 --- a/world/map/npc/052-2/storage.txt +++ b/world/map/npc/052-2/storage.txt @@ -42,7 +42,7 @@ OnCommandStart: set $@illia_storage_max_items, 20; set $@illia_storage_deviation, (8 + ($Illia_Luvia_Harvest*70)/100)*3; initnpctimer; - areatimer "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnStart"; + areatimer 0, "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnStart"; end; OnStart: @@ -64,7 +64,7 @@ OnTimer1000: OnTimer1500: // See the note above. enablenpc "#ItemsInvoker"; - areatimer "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnItem"; + areatimer 0, "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnItem"; misceffect FX_GROUND_SPAWN; end; @@ -109,7 +109,7 @@ L_ItemSpawn: L_MakeSpecialMonster: monster "052-2", $@item_invoke_x, $@item_invoke_y, "", 1103, 1, "#ItemsInvoker::OnDeath"; - areatimer "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnWtf"; + areatimer 0, "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnWtf"; set $@illia_storage_max_items, $@illia_storage_max_items - 1; end; @@ -121,7 +121,7 @@ L_MakeMonster: L_MakeSpecialItem: makeitem $@illia_storage_special_items[rand(getarraysize($@illia_storage_special_items))], rand(2, 4), "052-2", $@item_invoke_x, $@item_invoke_y; - areatimer "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnWow"; + areatimer 0, "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnWow"; set $@illia_storage_max_items, $@illia_storage_max_items - 1; set @r, 0; end; @@ -152,7 +152,7 @@ L_Stop: set $@illia_progress, 7; callfunc "UpdateIlliaProgress"; set $@illia_max_time, $@illia_max_time + 900; - areatimer "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnStop"; + areatimer 0, "052-2", 19, 60, 35, 78, 10, "#ItemsInvoker::OnStop"; end; OnDeath: diff --git a/world/map/npc/commands/_atcommand_local.txt.example b/world/map/npc/commands/_atcommand_local.txt.example new file mode 100644 index 00000000..a195d580 --- /dev/null +++ b/world/map/npc/commands/_atcommand_local.txt.example @@ -0,0 +1,12 @@ +-|script|GM|32767 +{ + end; + +OnInit: + // define permissions here + set .zeny, G_ADMIN; + + // permissions for events + set .killthegm, G_EVENT; + end; +} diff --git a/world/map/npc/commands/_import.txt b/world/map/npc/commands/_import.txt new file mode 100644 index 00000000..7efe4111 --- /dev/null +++ b/world/map/npc/commands/_import.txt @@ -0,0 +1,4 @@ +npc: npc/commands/_procedures.txt +npc: npc/commands/_atcommand_local.txt +npc: npc/commands/zeny.txt +npc: npc/commands/marry.txt diff --git a/world/map/npc/commands/_procedures.txt b/world/map/npc/commands/_procedures.txt new file mode 100644 index 00000000..77c1c7e9 --- /dev/null +++ b/world/map/npc/commands/_procedures.txt @@ -0,0 +1,53 @@ +// ARGV Splitter +// takes @args$ and splits it properly so that '@cmd "foo bar" baz' is ['foo bar','baz'] instead of ['foo','bar','baz'] +// input: @args$ (string) +// output: @argv$ (array) and @argv (array) +function|script|argv_splitter +{ + explode .@fragments$, @args$, " "; + set .@e, 0; + set .@total, getarraysize(.@fragments$); + set .@NULL$, chr(3); // HACK: we use .@NULL$ as a workaround because we can't do "\0" + goto L_Check; + +L_Check: + setarray .@check$[0], "", .@NULL$, .@NULL$; + explode .@check$, .@fragments$[.@e], "\""; // check if the fragment contains a quote + if (.@check$[0] == "" && .@check$[1] != .@NULL$ && .@check$[1] != "" && .@check$[2] == .@NULL$) + set .@string$, .@check$[1]; // begin substring + elif (.@check$[0] != "" && .@check$[1] == "" && .@check$[2] == .@NULL$) + goto L_EndSubString; // end substring + elif (.@string$ != "" && .@check$[0] != "" && .@check$[1] == .@NULL$ && .@check$[2] == .@NULL$) + set .@string$, .@string$ +" "+ .@check$[0]; // part of the substring + elif (.@check$[2] != .@NULL$) goto L_Set2; // the the argument is quoted but there is no space + else goto L_Set; + goto L_CheckAfter; + +L_Set: + setarray @argv$[.@t], .@check$[0]; // not in a substring so push right away + setarray @argv[.@t], .@check$[0]; // not in a substring so push right away + set .@t, .@t + 1; + goto L_CheckAfter; + +L_Set2: + setarray @argv$[.@t], .@check$[1]; // not in a substring so push right away + setarray @argv[.@t], .@check$[1]; // not in a substring so push right away + set .@t, .@t + 1; + goto L_CheckAfter; + +L_EndSubString: + set .@string$, .@string$ + " " + .@check$[0]; + setarray @argv$[.@t], .@string$; // push in the array + setarray @argv[.@t], .@string$; // push in the array + set .@t, .@t + 1; + set .@string$, ""; // clean + goto L_CheckAfter; + +L_CheckAfter: + set .@e, .@e + 1; + if (.@e > .@total) goto L_Done; // the @argv$ array is built + goto L_Check; // not done yet + +L_Done: + return; +} diff --git a/world/map/npc/commands/marry.txt b/world/map/npc/commands/marry.txt new file mode 100644 index 00000000..39efe6b8 --- /dev/null +++ b/world/map/npc/commands/marry.txt @@ -0,0 +1,69 @@ +-|script|special-marry|32767 +{ + set .@target_id, getcharid(3, @args$); + if (.@target_id < 1 || !(isloggedin(.@target_id)) || .@target_id == BL_ID) goto L_NotFound; + if (PARTNER || get(PARTNER, .@target_id)) goto L_AlreadyMarried; + if (isin("014-1",29,36,34,39) == 0 && isin("001-1",20,27,22,27) == 0) goto L_NotInArea; + if (distance(BL_ID, .@target_id) != 1) goto L_AwayFromPartner; + if (BaseLevel < WEDDING_MIN_LEVEL || get(BaseLevel, .@target_id) < WEDDING_MIN_LEVEL) goto L_TooYoung; + if (getequipid(equip_shield) != 702 || getequipid(equip_shield, @args$) != 702) goto L_NoRing; + + if (get(@marriage[0], .@target_id) == BL_ID) goto L_Proceed; + + setarray @marriage[0], .@target_id, gettimetick(2); + addtimer (.timeout * 1000), strnpcinfo(0) + "::OnTimeout"; + announce strcharinfo(0) + " is asking " + strcharinfo(0, .@target_id) + " for marriage.", 2; + message strcharinfo(0, .@target_id), "Marriage : ##3##B" + strcharinfo(0) + " wishes to marry you. To accept, write `##1#marry "+strcharinfo(0)+"##3` within the next "+.timeout+" seconds."; + end; + +L_NotFound: + message strcharinfo(0), "Marriage : ##3##BThe target player is either not found or yourself."; + end; + +L_TooYoung: + message strcharinfo(0), "Marriage : ##3##BYou and your partner need to be at least level "+ WEDDING_MIN_LEVEL +"."; + end; + +L_NoRing: + message strcharinfo(0), "Marriage : ##3##BYou and your partner need to have ["+ getitemlink("WeddingRing") +"] equipped."; + end; + +L_AwayFromPartner: + message strcharinfo(0), "Marriage : ##3##BYou and your partner need to be standing next to each other."; + end; + +L_NotInArea: + message strcharinfo(0), "Marriage : ##3##BYou are not standing in a designated marriage area."; + end; + +L_Proceed: + if ((gettimetick(2) - .timeout) > get(@marriage[1], .@target_id)) goto L_TooLate; + set PARTNER, CHAR_ID, .@target_id; + if (PARTNER == get(CHAR_ID, .@target_id)) goto L_Success; + set PARTNER, 0, .@target_id; + set PARTNER, 0; + end; + +L_Success: + announce strcharinfo(0) + " and " + strcharinfo(0, .@target_id) + " are now married.", 2; + end; + +OnTimeout: + goto L_TooLate; + +L_TooLate: + message strcharinfo(0), "Marriage : ##3##BThe proposal expired. Please try again."; + message strcharinfo(0, @marriage[0]), "Marriage : ##3##BThe proposal expired. Please try again."; + set @marriage[0], 0, @marriage[0]; + set @marriage[0], 0; + end; + +L_AlreadyMarried: + message strcharinfo(0), "Marriage : ##3##BYou"+ if_then_else(PARTNER, " are", "r partner is") +" already married."; + end; + +OnInit: + set .timeout, 30; // timeout for proposal + registercmd "#marry", strnpcinfo(0); // we NEED to use a # before `marry` because otherwise manaplus does not strip colors + end; +} diff --git a/world/map/npc/commands/zeny.txt b/world/map/npc/commands/zeny.txt new file mode 100644 index 00000000..9215637a --- /dev/null +++ b/world/map/npc/commands/zeny.txt @@ -0,0 +1,77 @@ +-|script|@zeny|32767 +{ + if (GM < get(.zeny, "GM") && GM < G_SYSOP) goto L_GM; + callfunc "argv_splitter"; + set .@target_id, BL_ID; + if (@argv$[1] != "") set .@target_id, getcharid(3, @argv$[1]); + if (@argv$[1] != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self + if (@argv$[0] == "--") goto L_Remove; + if (@argv$[0] == "---") goto L_RemoveAll; + if (@argv$[0] == "++") goto L_Max; + if (@argv$[0] == "+++") goto L_MaxAll; + set .@delta, @argv[0]; // ± zeny + set .@zeny, get(Zeny, .@target_id); // get the number of zeny in char + set .@bank, get(#BankAccount, .@target_id); // get number of zeny in (world) account + set .@new_zeny, .@zeny + .@delta; // new balance in char + if (.@new_zeny < 0) goto L_MaybeRemoveBank; // zeny would be below 0 so check if we can take from bank + if (.@new_zeny > .max_zeny) goto L_MaybeAddBank; // zeny would be over the limit so check if we can store in bank + set Zeny, (.@zeny + .@delta), .@target_id; + goto L_Success; + +L_Remove: + set Zeny, 0, .@target_id; + goto L_Success; + +L_RemoveAll: + set Zeny, 0, .@target_id; + set #BankAccount, 0, .@target_id; + goto L_Success; + +L_Max: + set Zeny, .max_zeny, .@target_id; + goto L_Success; + +L_MaxAll: + set Zeny, .max_zeny, .@target_id; + set #BankAccount, .max_int, .@target_id; + goto L_Success; + +L_MaybeAddBank: + set .@new_bank, (.@bank + (.@new_zeny - .max_zeny)); + if (.@new_bank > .max_int || .@new_bank < 0) goto L_OutOfBounds; + set Zeny, .max_zeny, .@target_id; + set #BankAccount, .@new_bank, .@target_id; + goto L_Success; + +L_MaybeRemoveBank: + if ((.@bank + .@new_zeny) < 0) goto L_OutOfBounds; + set Zeny, 0, .@target_id; + set #BankAccount, (.@bank + .@new_zeny), .@target_id; + goto L_Success; + +L_OutOfBounds: + // XXX: maybe we could also take from other chars from the same accout? + message strcharinfo(0), "zeny : Impossible to proceed! This would cause the player to have less than 0 zeny or more than " + .max_int + "."; + end; + +L_Failed: + // XXX: should we allow GMs to change zeny of users that are not logged in? + message strcharinfo(0), "zeny : Impossible to attach to the target player."; + end; + +L_Success: + gmlog "@zeny " + @args$; + message strcharinfo(0), "zeny : The operation succeeded."; + end; + +L_GM: + message strcharinfo(0), "zeny : GM command is level "+ get(.zeny, "GM") +", but you are level " + GM; + end; + +OnInit: + set .max_zeny, 1000000000; // hardcoded in tmwa + set .max_int, 2147483647; // max int32 value + registercmd chr(ATCMD_SYMBOL) + "zeny", strnpcinfo(0); + registercmd chr(ATCMD_SYMBOL) + "charzeny", strnpcinfo(0); + end; +} diff --git a/world/map/npc/doc/magic b/world/map/npc/doc/magic deleted file mode 100644 index 8a2b84e1..00000000 --- a/world/map/npc/doc/magic +++ /dev/null @@ -1,23 +0,0 @@ -Nibble use: ---------------- -== QUEST_MAGIC - N0, N1: Auldsbel - N2: druid tree quest, mouboo quest (shared) - N3: Sagatha unhappiness counter - N4, N5: Sagatha - N6, N7: Swords -== QUEST_MAGIC2 - N0: Evil Earth Spirit - N1: Elanore - N2: Wyara - N3: Elanore subquests (Cure Kadiya) - N4-N7: may be messy at this point - -The various magic scripts pack their status into these variables. -Locally, they use `@Q_status' to maintain the state, and use a function -`S_update_var' to update it. This is all re-using the same code, setting -the `@Q_MASK' and `@Q_SHIFT' variables appropriately. - - There are a few exceptions (such as the Kadiya quest) wherein -a separate helper function sets a dedicated local variable, or some hackery -in Auldsbel wherein we read stati directly, merely to enable certain options. diff --git a/world/map/npc/functions/debug.txt b/world/map/npc/functions/debug.txt index 44af4d40..556e501b 100755 --- a/world/map/npc/functions/debug.txt +++ b/world/map/npc/functions/debug.txt @@ -5,7 +5,7 @@ function|script|Debug if(!@debug_npc) goto L_Begin; mes "The debug NPCs have been deprecated. Please use this magic spell instead:"; mes ""; - mes "%%E ##a"+ getspellinvocation("debug0") +"##0"; + mes "%%E ##a#debug##0"; set @debug_npc, 0; goto L_Close; @@ -831,13 +831,13 @@ S_Update_Mask: return; L_GetAllMagic: - setskill SKILL_MAGIC, 2; - setskill SKILL_MAGIC_LIFE, 2; - setskill SKILL_MAGIC_WAR, 2; - setskill SKILL_MAGIC_TRANSMUTE, 2; - setskill SKILL_MAGIC_NATURE, 2; - setskill SKILL_MAGIC_ASTRAL, 2; - setskill SKILL_MAGIC_DARK, 2; + setskill SKILL_MAGIC, 5; + setskill SKILL_MAGIC_LIFE, 5; + setskill SKILL_MAGIC_WAR, 5; + setskill SKILL_MAGIC_TRANSMUTE, 5; + setskill SKILL_MAGIC_NATURE, 5; + setskill SKILL_MAGIC_ASTRAL, 5; + setskill SKILL_MAGIC_DARK, 5; set @mexp, 8000; callsub S_Update_Mask; mes "Magic skills added."; @@ -869,13 +869,13 @@ L_AddAll: setskill SKILL_RESIST_POISON, 9; setskill SKILL_ASTRAL_SOUL, 9; setskill SKILL_RAGING, 9; - setskill SKILL_MAGIC, 2; - setskill SKILL_MAGIC_LIFE, 2; - setskill SKILL_MAGIC_WAR, 2; - setskill SKILL_MAGIC_TRANSMUTE, 2; - setskill SKILL_MAGIC_NATURE, 2; - setskill SKILL_MAGIC_ASTRAL, 2; - setskill SKILL_MAGIC_DARK, 2; + setskill SKILL_MAGIC, 5; + setskill SKILL_MAGIC_LIFE, 5; + setskill SKILL_MAGIC_WAR, 5; + setskill SKILL_MAGIC_TRANSMUTE, 5; + setskill SKILL_MAGIC_NATURE, 5; + setskill SKILL_MAGIC_ASTRAL, 5; + setskill SKILL_MAGIC_DARK, 5; set @mexp, 8000; resetstatus; set BaseLevel, 99; @@ -922,6 +922,16 @@ L_Close: } +-|script|Debug Spell|32767 +{ + if(!debug && getgmlevel() < 99) end; + callfunc "Debug"; + end; +OnInit: + registercmd "@debug", "Debug Spell"; + end; +} + 029-2,30,26,0|script|Debug#0|154 { set @debug_npc, 1; diff --git a/world/map/npc/functions/global_event_handler.txt b/world/map/npc/functions/global_event_handler.txt index d5c20b06..e4247d18 100644 --- a/world/map/npc/functions/global_event_handler.txt +++ b/world/map/npc/functions/global_event_handler.txt @@ -28,6 +28,7 @@ OnPCKilledEvent: OnPCDieEvent: callfunc "fightclub_GoBack"; // this used by the battle master callfunc "fightclub_event_die"; // this is used by the 1v1 arena + set @necromancer, 0; end; OnInit: diff --git a/world/map/npc/functions/hug.txt b/world/map/npc/functions/hug.txt new file mode 100644 index 00000000..a663ea1d --- /dev/null +++ b/world/map/npc/functions/hug.txt @@ -0,0 +1,24 @@ +-|script|nonmagic-hug|32767 +{ + explode .@name$[0], @args$, "*"; // strip the trailing * + set @target_id, if_then_else(.@name$[0], getcharid(3, .@name$[0]), BL_ID); + if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self + if (.@name$[0] == "Tree" || .@name$[0] == "tree") set @target_id, .tree_id; + set .@range, 3; + if (distance(BL_ID, @target_id) >= .@range) end; + misceffect FX_HUG, strcharinfo(0); + if (@target_id != BL_ID) misceffect FX_HUG, @target_id; + if (@target_id != .tree_id) end; + callfunc "QuestTreeTouch"; + close; + +OnInit: + set .tree_id, getnpcid("#DruidTree0#_M"); + registercmd "hug", strnpcinfo(0); + registercmd "*hug", strnpcinfo(0); + registercmd "*hug*", strnpcinfo(0); + registercmd "hugs", strnpcinfo(0); + registercmd "*hugs", strnpcinfo(0); + registercmd "*hugs*", strnpcinfo(0); + end; +} diff --git a/world/map/npc/functions/strangerquiz.txt b/world/map/npc/functions/strangerquiz.txt index 8da3f65a..3427a0ee 100644 --- a/world/map/npc/functions/strangerquiz.txt +++ b/world/map/npc/functions/strangerquiz.txt @@ -3,6 +3,6 @@ function|script|StrangerQuiz { // param @quizparam$$ // return in @quizanswer$ - set @quizanswer$, getspellinvocation(@quizparam$); + set @quizanswer$, (@quizparam$); return; } diff --git a/world/map/npc/functions/superdebug.txt b/world/map/npc/functions/superdebug.txt index 5654dd4c..140e703a 100644 --- a/world/map/npc/functions/superdebug.txt +++ b/world/map/npc/functions/superdebug.txt @@ -34,32 +34,36 @@ L_Holiday: L_XmasDebug: gmlog strcharinfo(0) + " accessed the Xmas debug."; callfunc "XmasDebug"; - end; + goto L_Close; L_HalloweenDebug: gmlog strcharinfo(0) + " accessed the Halloween debug."; callfunc "HalloweenDebug"; - end; + goto L_Close; L_Event: if(getgmlevel() < 60) goto L_GM; gmlog strcharinfo(0) + " accessed the GM event debug."; callfunc "GmDebug"; - close; + goto L_Close; L_StoneBoard: if (getgmlevel() < 30) goto L_GM; callfunc "SBConfig"; - close; + goto L_Close; L_MOTD: if (getgmlevel() < 40) goto L_GM; callfunc "MOTDConfig"; - close; + goto L_Close; L_GM: mes "[Numa]"; mes "I'm awfully sorry."; mes "You do not have the required GM level to perform this action."; - close; + goto L_Close; + +L_Close: + close2; // FIXME: replace with npc action 5 + return; } diff --git a/world/map/npc/items/check_wand.txt b/world/map/npc/items/check_wand.txt index 5a339049..93993c53 100644 --- a/world/map/npc/items/check_wand.txt +++ b/world/map/npc/items/check_wand.txt @@ -1,67 +1,2 @@ // Wands // Author: Wushin -function|script|WandMana -{ - if(isin("009-7", $@fightclub_x1, $@fightclub_y1, $@fightclub_x2, $@fightclub_y2) && ((@Duel_Fighter != 1) || ($@Duel_NoMagic == 1))) - goto L_Return; - callfunc "CheckWand"; - set @WandCost, (@Wand * (BaseLevel / 15) + 2); - set @WandAttack, 0; - if (!(@Wand)) - goto L_NoWand; - if (Sp >= @WandCost) - goto L_Attack; - goto L_LowSp; - -L_Attack: - set Sp, (Sp - @WandCost); - set @WandAttack, 1; - goto L_Return; - -L_NoWand: - message strcharinfo(0), "You need a wand Equipped!"; - set @WandAttack, 0; - goto L_Return; - -L_LowSp: - message strcharinfo(0), "Out of Mana"; - set @WandAttack, 0; - goto L_Return; - -L_Return: - return; -} -function|script|CheckWand -{ - setarray $@Wands, 758, 1171; - setarray $@WandsPwr, 2, 1; - setarray $@WandsAnim, 35, 33; - set @Wand, 0; - set @wand_loop, 0; - goto L_Loop; - -L_Loop: - if ((getequipid(equip_hand1) == $@Wands[@wand_loop]) || (getequipid(equip_hand2) == $@Wands[@wand_loop])) - goto L_SetWand; - goto L_LoopAgain; - -L_SetWand: - set @Wand, $@WandsPwr[@wand_loop]; - set @WandID, $@WandsAnim[@wand_loop]; - if (QL_MORGAN == 2) - goto L_SetCastOnce; - goto L_Return; - -L_LoopAgain: - set @wand_loop, (@wand_loop + 1); - if (@wand_loop >= getarraysize($@Wands)) - goto L_Return; - goto L_Loop; - -L_SetCastOnce: - set QL_MORGAN, 3; - goto L_Return; - -L_Return: - return; -} diff --git a/world/map/npc/items/magic_gm_top_hat.txt b/world/map/npc/items/magic_gm_top_hat.txt index 129aa5c0..dfd114d2 100644 --- a/world/map/npc/items/magic_gm_top_hat.txt +++ b/world/map/npc/items/magic_gm_top_hat.txt @@ -1,21 +1,25 @@ -function|script|ActivateMagicGMTophat +-|script|ActivateMagicGMTophat|32767 { - if (getgmlevel() < 60) goto L_Return; + if (GM < get(.killthegm, "GM") && GM < G_SYSOP) end; + if (getequipid(equip_head) != 888) end; getinventorylist; if ((checkweight("MurdererCrown", 1) == 0) || (@inventorylist_count == 100)) goto L_Inventory; // Get the current reward of the event. This may be changed later getitem "MurdererCrown", 1; + // Set HP and SP to max + heal MaxHp, MaxSp; // Display an effect misceffect FX_CHANNELLING_CAST, strcharinfo(0); // Log the usage of this spell gmlog strcharinfo(0)+" used the Magic GM Top Hat."; - return; + end; L_Inventory: message strcharinfo(0), "You cannot create this item. You're too heavy or you don't have a free slot."; - return; + end; -L_Return: - return; +OnInit: + registercmd "#pullrabbit", strnpcinfo(0); + end; } diff --git a/world/map/npc/magic/README.md b/world/map/npc/magic/README.md new file mode 100644 index 00000000..a9dedb6e --- /dev/null +++ b/world/map/npc/magic/README.md @@ -0,0 +1,63 @@ +# To-do +- [ ] finish the missing spells and push them so they can be tested + +--- +--- +to see other things that needs to be done do a grep for `TODO`, `FIXME` in this folder. +To see a list of things that needs further thoughts do a grep for `XXX`. + +--- +--- + +- [ ] check the new builtins and make sure they work as intended + - [ ] `puppet` + - [ ] check what happens when making a puppet whose name already exist (maybe it replaces?) + - [ ] `destroy` + - [ ] `registercmd` + - [ ] check what happens when registering a command that was already registered + - [ ] `target` + - [ ] `get` + - [ ] the new `set` + - [ ] `min` + - [ ] `max` + - [ ] `pow` + - [ ] `sqrt` + - [ ] `cbrt` + - [ ] `elttype` + - [ ] `eltlvl` + - [ ] `injure` + - [ ] `elif` + - [ ] `else` + - [ ] `getnpcid` + - [ ] `overrideattack` + - [ ] `summon` + - [ ] `addnpctimer` + - [ ] `explode` + - [ ] `foreach` + - [ ] modified `areatimer` + - [ ] `aggravate` + - [ ] `getdir` + - [ ] `distance` + - [ ] `if_then_else` + +--- +- [ ] test the spells + - [ ] test with no target + - [ ] test with a npc target + - [ ] random npc not part of any quest + - [ ] injured mouboo + - [ ] also test on a **player** with the name `Mouboo` or `mouboo` + - [ ] druid tree + - [ ] test with a mob target + - [ ] mob with clear path (walkable) + - [ ] mob with no clear path (unwalkable, blocked by collision) + - [ ] mob out of attack range + - [ ] test with a player target + - [ ] both the caster and the target have pvp disabled + - [ ] both the caster and the target have pvp enabled + - [ ] the caster has pvp enabled and the target has pvp disabled + - [ ] the caster has pvp disabled and the target has pvp enabled + - [ ] test with the spouse as target + +--- +- [ ] Once everything is done, remove this file diff --git a/world/map/npc/magic/_import.txt b/world/map/npc/magic/_import.txt new file mode 100644 index 00000000..4118170e --- /dev/null +++ b/world/map/npc/magic/_import.txt @@ -0,0 +1,38 @@ +npc: npc/magic/_procedures.txt +npc: npc/magic/level0-wand.txt +npc: npc/magic/level1-aggravate.txt +npc: npc/magic/level1-experience.txt +npc: npc/magic/level1-lesser-heal.txt +npc: npc/magic/level1-transmute-wood.txt +npc: npc/magic/level1-make-sulphur.txt +npc: npc/magic/level1-flare-dart.txt +npc: npc/magic/level1-magic-blade.txt +npc: npc/magic/level1-grow-mauve.txt +npc: npc/magic/level1-grow-alizarin.txt +npc: npc/magic/level1-grow-gamboge.txt +npc: npc/magic/level1-grow-cobalt.txt +npc: npc/magic/level1-summon-maggots.txt +npc: npc/magic/level1-detect-magic.txt +npc: npc/magic/level2-arrow-hail.txt +npc: npc/magic/level2-make-arrows.txt +npc: npc/magic/level2-make-iron-powder.txt +npc: npc/magic/level2-magic-knuckles.txt +npc: npc/magic/level2-summon-snakes.txt +npc: npc/magic/level2-summon-wickedmushroom.txt +npc: npc/magic/level2-summon-spiky-mushroom.txt +npc: npc/magic/level2-summon-fluffies.txt +npc: npc/magic/level2-summon-mouboo.txt +npc: npc/magic/level2-summon-pinkie.txt +npc: npc/magic/level2-toxic-dart.txt +npc: npc/magic/level2-enchant-lifestone.txt +npc: npc/magic/level2-flying-backpack.txt +npc: npc/magic/level2-protect.txt +npc: npc/magic/level2-barrier.txt +npc: npc/magic/level2-hide.txt +npc: npc/magic/level2-happy-curse.txt +npc: npc/magic/level2-detect-players.txt +npc: npc/magic/level2-shear.txt +npc: npc/magic/level2-lightning-strike.txt +npc: npc/magic/level2-rain.txt +npc: npc/magic/level2-lay-on-hands.txt +npc: npc/magic/level3-necromancy.txt diff --git a/world/map/npc/magic/_procedures.txt b/world/map/npc/magic/_procedures.txt new file mode 100644 index 00000000..71d12605 --- /dev/null +++ b/world/map/npc/magic/_procedures.txt @@ -0,0 +1,135 @@ +function|script|magic_register +{ + debugmes ">> Register " + .invocation$ + " @ " + strnpcinfo(0); + registercmd .invocation$, strnpcinfo(0); // register the spell + set .index, $@magic_index; + set $@magic_index, $@magic_index + 1; + return; +} + +function|script|magic_register2 +{ + debugmes ">> Register " + .invocation$ + " @ " + strnpcinfo(0); + registercmd .invocation$, strnpcinfo(0) + "::OnCast"; // register the spell <= this spell has a puppet + set .index, $@magic_index; + set $@magic_index, $@magic_index + 1; + return; +} + +function|script|magic_checks +{ + set @failed, 0; + if(getpvpflag(1)) set @failed, 1; // can not cast with @hide enabled + if((gettimetick(2) - MAGIC_CAST_TICK) < 0) set @failed, 1; // check if last debuff ended + if(isdead()) set @failed, 1; // can not cast when dead + return; +} + +function|script|elt_damage +{ + // @edmg is damage, dmgplus(mutation), bonus_elt, malus_elt, effect + set @edmg[5], @edmg[0] + rand(@edmg[1]); + if(elttype(@target_id) == @edmg[3]) // malus + set @edmg[5], @edmg[5] / 3; + if(elttype(@target_id) == @edmg[2]) // bonus + set @edmg[5], ((eltlvl(@target_id) + 4) * @edmg[5]) / 4; + set .@source, .caster; + if (!.@source) set .@source, getcharid(3); + + injure .@source, @target_id, @edmg[5]; + misceffect @edmg[4], @target_id; + cleararray @edmg, 0, getarraysize(@edmg); + return; +} + +function|script|melee_damage +{ + if ((@spellpower - rand(100)) < (get(BaseLevel, @target_id) + get(MDEF1, @target_id))) + injure BL_ID, @target_id, 0; + else injure BL_ID, @target_id, @melee_dmg[0] + rand(@melee_dmg[1]); + return; +} + +function|script|magic_create_item +{ + set .@exp, (MAGIC_EXPERIENCE & (BYTE_0_MASK | BYTE_1_MASK)) >> BYTE_0_SHIFT; + set .@score, (.@exp + rand(min(@spellpower, ((.@exp / 3) + 1)))); + set @create_params[2], 1; // success flag + if (.@score >= @create_params[1]) goto L_Perfect; + set @create_params[2], 0; // success flag + set .@score, .@score + rand(Luk) + rand(Luk); + if (.@score < (@create_params[1] / 3)) goto L_Backfire; + if (.@score < ((@create_params[1] * 2) / 3)) goto L_Iten; + message strcharinfo(0), "Magic : ##3##BYour spell takes on a mind of its own!"; + if (rand(3) == 1) getitem @create_items$[1], 1; // bad item + return; + +L_Iten: + if (rand(5) != 2) goto L_Escape; + message strcharinfo(0), "Magic : ##3##BYour spell solidifies into the shape of a mysterious object!"; + getitem "Iten", 1; + return; + +L_Escape: + message strcharinfo(0), "Magic : ##3##BYour spell escapes!"; + return; + +L_Backfire: + message strcharinfo(0), "Magic : ##3##BYour spell backfires!"; + if (rand(110) < Luk) heal 0 - ((BaseLevel+1)*(BaseLevel+2)*(rand(28)+3)), 0; + else heal 0 - (BaseLevel + 1), 0; + return; + +L_Perfect: + getitem @create_items$[0], @create_params[0]; // good item + return; +} + +function|script|magic_exp +{ + set @last_index, (MAGIC_EXPERIENCE & BYTE_2_MASK) >> BYTE_2_SHIFT; + set @last_exp, (MAGIC_EXPERIENCE & (BYTE_0_MASK | BYTE_1_MASK)) >> BYTE_0_SHIFT; + + debugmes "old spell index: " + @last_index; + debugmes "new spell index: " + .index; + + if(getskilllv(SKILL_MAGIC) < (.level + 3) && .index != @last_index) + goto L_Gain; + debugmes "same as last spell => don't proceed"; + goto L_Return; + +L_Gain: + if(.exp_gain < 1) goto L_Return; // only the spells that have exp register here. If you + // remove this line then players can cast a spell with + // no cost, then a spell with a reagents, then another + // spell with no costs and still get the exp + set @new_exp, @last_exp + .exp_gain; + if(@new_exp > (BYTE_0_MASK | BYTE_1_MASK)) set @new_exp, (BYTE_0_MASK | BYTE_1_MASK); + debugmes "old magic exp: "+ @last_exp; + debugmes "new magic exp: "+ @new_exp; + set MAGIC_EXPERIENCE, (MAGIC_EXPERIENCE &~ (BYTE_0_MASK | BYTE_1_MASK)) | (@new_exp << BYTE_0_SHIFT); + set MAGIC_EXPERIENCE, (MAGIC_EXPERIENCE &~ BYTE_2_MASK) | (.index << BYTE_2_SHIFT); + goto L_Return; + +L_Return: + return; +} + +function|script|adjust_spellpower +{ + set @spellpower, MATK1 + getskilllv(SKILL_MAGIC) + getskilllv(.school) + 10; + if((.school != SKILL_MAGIC_NATURE) && (.school != SKILL_MAGIC_LIFE)) goto L_Return; + if(@args$ == "" || !@args$ || getpartnerid2() == 0) goto L_Return; + if(getcharid(3, @args$) < 1 || getpartnerid2() != getcharid(3, @args$) || !(isloggedin(getcharid(3, @args$)))) + goto L_Return; + debugmes "You targeted your spouse!"; + // XXX: I need a builtin to check if the target is in range of the caster + // XXX: the spell power increases when the target is the spouse so one could + // just do #modrilax (spouse) right? + // + // ... let's just forget about spouse for now + goto L_Return; + +L_Return: + return; +} diff --git a/world/map/npc/magic/level0-wand.txt b/world/map/npc/magic/level0-wand.txt new file mode 100644 index 00000000..e38a26c7 --- /dev/null +++ b/world/map/npc/magic/level0-wand.txt @@ -0,0 +1,74 @@ +-|script|spell-wand|32767 +{ + callfunc "magic_checks"; if(@failed) goto L_Failed; // << I wish we had functions that could return >> + callsub S_CheckWand; + if(@WandAttack != 1) goto L_Failed; + + // here we install + set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + callfunc "adjust_spellpower"; + misceffect FX_MAGIC_GENERIC, strcharinfo(0); + overrideattack (@Wand + (@spellpower / 10)), 1200, 3, ATTACK_ICON_GENERIC, @WandID, strnpcinfo(0)+"::OnAttack"; + callfunc "magic_exp"; + end; + +OnAttack: + callsub S_CheckWand; + if(@WandAttack != 1) goto L_Failed; + if(target(BL_ID, @target_id, 22) != 22) goto L_Failed; // 0x02 | 0x04 | 0x10 + set Sp, (Sp - @WandCost); + set @damage, (@Wand * (@spellpower / 3)); + setarray @edmg,@damage,@damage,ELT_NEUTRAL,ELT_NEUTRAL,FX_MAGIC_RED; callfunc "elt_damage"; + end; + +S_CheckWand: + set @Wand, 0; + set @wand_loop, 0; + goto S_Loop; + +S_Loop: + if ((getequipid(equip_hand1) == .Wands[@wand_loop]) || (getequipid(equip_hand2) == .Wands[@wand_loop])) + goto S_SetWand; + set @wand_loop, (@wand_loop + 1); + if (@wand_loop >= getarraysize(.Wands)) + goto S_NoWand; + goto S_Loop; + +S_SetWand: + set @Wand, .WandsPwr[@wand_loop]; + set @WandID, .WandsAnim[@wand_loop]; + if (QL_MORGAN == 2) + set QL_MORGAN, 3; + set @WandCost, (@Wand * (BaseLevel / 15) + 2); + set @WandAttack, 0; + if (Sp < @WandCost) + goto S_LowSp; + set @WandAttack, 1; // everything is fine + return; + +S_NoWand: + message strcharinfo(0), "Wand : ##3##BYou need a wand Equipped!"; + set @WandAttack, 0; + return; + +S_LowSp: + message strcharinfo(0), "Wand : ##3##BOut of Mana"; + set @WandAttack, 0; + return; + +L_Failed: + //misceffect FX_ELECTRICITY_RED, strcharinfo(0); // XXX: do we show an effect on fail? + debugmes "cast or attack failed"; + end; + +OnInit: + setarray .Wands[0], 758, 1171; + setarray .WandsPwr[0], 2, 1; + setarray .WandsAnim[0], 35, 33; + set .school, SKILL_MAGIC; + set .invocation$, chr(MAGIC_SYMBOL) + "confringo"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 0; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level1-aggravate.txt b/world/map/npc/magic/level1-aggravate.txt new file mode 100644 index 00000000..74316b89 --- /dev/null +++ b/world/map/npc/magic/level1-aggravate.txt @@ -0,0 +1,22 @@ +-|script|spell-aggravate|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 3) end; + if (getskilllv(.school) < .level) end; + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @args$, ""; callfunc "adjust_spellpower"; // we reset @args$ because this spell should not have a target + set @distance, (2 + (@spellpower / 50)); + set Sp, Sp - 3; + misceffect FX_MAGIC_GREEN, strcharinfo(0); + callfunc "magic_exp"; + aggravate getmap(), (POS_X - @distance), (POS_Y - @distance), (POS_X + @distance), (POS_Y + @distance), SFX_DEFAULT; + end; + +OnInit: + set .school, SKILL_MAGIC_NATURE; + set .invocation$, chr(MAGIC_SYMBOL) + "itenplz"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 1; + set .exp_gain, 0; + end; +} diff --git a/world/map/npc/magic/level1-detect-magic.txt b/world/map/npc/magic/level1-detect-magic.txt new file mode 100644 index 00000000..c5dff558 --- /dev/null +++ b/world/map/npc/magic/level1-detect-magic.txt @@ -0,0 +1,29 @@ +-|script|detect-magic|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 3) end; + if (getskilllv(.school) < .level) end; + set MAGIC_CAST_TICK, gettimetick(2) + 6; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 3; + misceffect FX_MAGIC_GENERIC, strcharinfo(0); + set .@range, (@spellpower/50)+1; + foreach 1, getmap(), POS_X - .@range, POS_Y - .@range, POS_X + .@range, POS_Y + .@range, + strnpcinfo(0) + "::OnNearbyNpc"; + callfunc "magic_exp"; + end; + +OnNearbyNpc: + set .@e$, strnpcinfo(2,@target_id); + if(.@e$ == "#_M" || .@e$ == "#MAGIC") + misceffect FX_MAGIC_DEFAULT, @target_id; + end; + +OnInit: + set .school, SKILL_MAGIC; + set .invocation$, chr(MAGIC_SYMBOL) + "miteyo"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 1; + set .exp_gain, 0; + end; +} diff --git a/world/map/npc/magic/level1-experience.txt b/world/map/npc/magic/level1-experience.txt new file mode 100644 index 00000000..9492b6f2 --- /dev/null +++ b/world/map/npc/magic/level1-experience.txt @@ -0,0 +1,41 @@ +-|script|spell-experience|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 1) end; + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @level, getskilllv(.school); + if (@level < .level) end; + callfunc "adjust_spellpower"; + set Sp, Sp - 1; + misceffect FX_MAGIC_GENERIC, strcharinfo(0); + callfunc "magic_exp"; // no exp for this spell + set @ratio, ((@last_exp*10) - rand(.MAX_MAGIC_EXP[@level]/30))/.MAX_MAGIC_EXP[@level]; + + set @mes$, "You feel completely overwhelmed by your magic."; + if(@ratio == 1) set @mes$, "You feel quite overwhelmed by your magic, but are beginning to see patterns."; + if(@ratio == 2) set @mes$, "You feel that you have only the bare minimum of control over your magic."; + if(@ratio == 3) set @mes$, "Trying to control your magic is still rather troublesome."; + if(@ratio == 4) set @mes$, "You feel you still have a few difficulties in controlling your magic."; + if(@ratio == 5) set @mes$, "You feel somewhat in control of your magic."; + if(@ratio == 6) set @mes$, "You feel mostly in control of your magic."; + if(@ratio == 7) set @mes$, "You feel quite in control of your magic."; + if(@ratio == 8) set @mes$, "You feel that you have very good control of your magic."; + if(@ratio == 9) set @mes$, "You feel in almost perfect control of your magic."; + if(@ratio >= 10) set @mes$, "You feel in perfect control of your magic" + if_then_else(@level >= MAX_MAGIC_LEVEL, ".", ", and seem on the verge of something more... perhaps you should see the Mana Seed to ask for more magic?"); + if(@ratio >= 20) set @mes$, "You have perfect control of what you understand now, but there is now a distinct sensation of something more, something indescribable. If only the Mana Seed would give more magic to you..."; + if(@ratio >= 45) set @mes$, "Magic flows naturally from you, readily and with ease. Your understanding of what you can currently control at present is flawless, far beyond your requirements to cast magic at this level."; + if(@ratio >= 45 && @level < MAX_MAGIC_LEVEL) set @mes$, @mes$ + " Surely the Mana Seed will more than readily offer more magic for such a proficient user."; + if(@level >= 5) set @mes$, "You are as proficient at magic as you can possibly be."; // this is the maximum magic level + message strcharinfo(0), "Magic : ##3##B"+@mes$; + // TODO put magic_exp somewhere + end; + +OnInit: + set .school, SKILL_MAGIC; + set .invocation$, chr(MAGIC_SYMBOL) + "abizit"; // used in npcs that refer to this spell + set .level, 1; + set .exp_gain, 0; + callfunc "magic_register"; + setarray .MAX_MAGIC_EXP[0], 0, 100, 1200, 8000, 40000, 65535; + end; +} diff --git a/world/map/npc/magic/level1-flare-dart.txt b/world/map/npc/magic/level1-flare-dart.txt new file mode 100644 index 00000000..ee08e7f4 --- /dev/null +++ b/world/map/npc/magic/level1-flare-dart.txt @@ -0,0 +1,33 @@ +-|script|flare-dart|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 10) end; + set @level, getskilllv(.school); + if (@level < .level) end; + if (@level <= 2 && countitem("SulphurPowder") >= 1) delitem "SulphurPowder", 1; + elif (@level <= 2) end; + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 10; + misceffect FX_MAGIC_BLACK, strcharinfo(0); + set @damage, sqrt(@spellpower) * 5; + set @dmg_bonus, (BaseLevel/3) + 5; + overrideattack (@spellpower/50)+3, 1200, 4, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack"; + callfunc "magic_exp"; + end; + +OnAttack: + misceffect FX_MAGIC_BLACK, strcharinfo(0); + if (target(BL_ID, @target_id, 50) != 50) end; // 0x20 | 0x02 | 0x10 + setarray @edmg[0], @damage, @dmg_bonus, ELT_WATER, ELT_FIRE, FX_MAGIC_BLACK; + callfunc "elt_damage"; + end; + +OnInit: + set .school, SKILL_MAGIC_WAR; + set .invocation$, chr(MAGIC_SYMBOL) + "flar"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 1; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level1-grow-alizarin.txt b/world/map/npc/magic/level1-grow-alizarin.txt new file mode 100644 index 00000000..64593975 --- /dev/null +++ b/world/map/npc/magic/level1-grow-alizarin.txt @@ -0,0 +1,37 @@ +-|script|grow-alizarin|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 4) end; + if (getskilllv(.school) < .level) end; + if (countitem("AlizarinHerb") < 1 || countitem("Root") < 1) end; + delitem "AlizarinHerb", 1; + delitem "Root", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 4; + misceffect FX_MAGIC_GREEN, strcharinfo(0); + misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0); + setarray @summon[0], 0, (getskilllv(.school)/2)+1; + callfunc "magic_exp"; + addtimer 4000-(@spellpower-9), strnpcinfo(0)+"::OnSummon"; + end; + +OnSummon: + misceffect FX_PENTAGRAM_BURST, strcharinfo(0); + callsub S_SummonAll; + end; + +S_SummonAll: + summon getmap(), rand(POS_X-2,POS_X+2), rand(POS_Y-2,POS_Y+2), BL_ID, 1032, 1, (@spellpower*50)+10000; + set @summon[0], @summon[0] + 1; + if (@summon[0] < @summon[1]) goto S_SummonAll; + return; + +OnInit: + set .school, SKILL_MAGIC_NATURE; + set .invocation$, chr(MAGIC_SYMBOL) + "modriphoo"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 1; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level1-grow-cobalt.txt b/world/map/npc/magic/level1-grow-cobalt.txt new file mode 100644 index 00000000..c094fe6f --- /dev/null +++ b/world/map/npc/magic/level1-grow-cobalt.txt @@ -0,0 +1,37 @@ +-|script|grow-cobalt|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 4) end; + if (getskilllv(.school) < .level) end; + if (countitem("CobaltHerb") < 1 || countitem("Root") < 1) end; + delitem "CobaltHerb", 1; + delitem "Root", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 4; + misceffect FX_MAGIC_GREEN, strcharinfo(0); + misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0); + setarray @summon[0], 0, (getskilllv(.school)/2)+1; + callfunc "magic_exp"; + addtimer 4000-(@spellpower-9), strnpcinfo(0)+"::OnSummon"; + end; + +OnSummon: + misceffect FX_PENTAGRAM_BURST, strcharinfo(0); + callsub S_SummonAll; + end; + +S_SummonAll: + summon getmap(), rand(POS_X-2,POS_X+2), rand(POS_Y-2,POS_Y+2), BL_ID, 1030, 1, (@spellpower*50)+10000; + set @summon[0], @summon[0] + 1; + if (@summon[0] < @summon[1]) goto S_SummonAll; + return; + +OnInit: + set .school, SKILL_MAGIC_NATURE; + set .invocation$, chr(MAGIC_SYMBOL) + "modrisump"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 1; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level1-grow-gamboge.txt b/world/map/npc/magic/level1-grow-gamboge.txt new file mode 100644 index 00000000..15bb9906 --- /dev/null +++ b/world/map/npc/magic/level1-grow-gamboge.txt @@ -0,0 +1,37 @@ +-|script|grow-gamboge|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 4) end; + if (getskilllv(.school) < .level) end; + if (countitem("GambogeHerb") < 1 || countitem("Root") < 1) end; + delitem "GambogeHerb", 1; + delitem "Root", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 4; + misceffect FX_MAGIC_GREEN, strcharinfo(0); + misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0); + setarray @summon[0], 0, (getskilllv(.school)/2)+1; + callfunc "magic_exp"; + addtimer 4000-(@spellpower-9), strnpcinfo(0)+"::OnSummon"; + end; + +OnSummon: + misceffect FX_PENTAGRAM_BURST, strcharinfo(0); + callsub S_SummonAll; + end; + +S_SummonAll: + summon getmap(), rand(POS_X-2,POS_X+2), rand(POS_Y-2,POS_Y+2), BL_ID, 1031, 1, (@spellpower*50)+10000; + set @summon[0], @summon[0] + 1; + if (@summon[0] < @summon[1]) goto S_SummonAll; + return; + +OnInit: + set .school, SKILL_MAGIC_NATURE; + set .invocation$, chr(MAGIC_SYMBOL) + "modriyikam"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 1; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level1-grow-mauve.txt b/world/map/npc/magic/level1-grow-mauve.txt new file mode 100644 index 00000000..6cc15955 --- /dev/null +++ b/world/map/npc/magic/level1-grow-mauve.txt @@ -0,0 +1,37 @@ +-|script|grow-mauve|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 4) end; + if (getskilllv(.school) < .level) end; + if (countitem("MauveHerb") < 1 || countitem("Root") < 1) end; + delitem "MauveHerb", 1; + delitem "Root", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 4; + misceffect FX_MAGIC_GREEN, strcharinfo(0); + misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0); + setarray @summon[0], 0, (getskilllv(.school)/2)+1; + callfunc "magic_exp"; + addtimer 4000-(@spellpower-9), strnpcinfo(0)+"::OnSummon"; + end; + +OnSummon: + misceffect FX_PENTAGRAM_BURST, strcharinfo(0); + callsub S_SummonAll; + end; + +S_SummonAll: + summon getmap(), rand(POS_X-2,POS_X+2), rand(POS_Y-2,POS_Y+2), BL_ID, 1029, 1, (@spellpower*50)+10000; + set @summon[0], @summon[0] + 1; + if (@summon[0] < @summon[1]) goto S_SummonAll; + return; + +OnInit: + set .school, SKILL_MAGIC_NATURE; + set .invocation$, chr(MAGIC_SYMBOL) + "modrilax"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 1; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level1-lesser-heal.txt b/world/map/npc/magic/level1-lesser-heal.txt new file mode 100644 index 00000000..ef087525 --- /dev/null +++ b/world/map/npc/magic/level1-lesser-heal.txt @@ -0,0 +1,41 @@ +-|script|lesser-heal|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 6) end; + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + if (getskilllv(.school) < .level) end; + set @target_id, getcharid(3, @args$); + if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self + if (@args$ == "Mouboo" || @args$ == "mouboo") set @target_id, getnpcid("Mouboo"); + set .@range, (((MATK1 + getskilllv(SKILL_MAGIC) + getskilllv(.school) + 10) / 100) + 2); + if (distance(BL_ID, @target_id) >= .@range) end; + if (PVP_CHANNEL != get(PVP_CHANNEL, @target_id) && get(PVP_CHANNEL, @target_id) != 0) end; + if (countitem("Lifestone") < 1) end; + delitem "Lifestone", 1; + callfunc "adjust_spellpower"; + set Sp, Sp - 6; + misceffect FX_MAGIC_WHITE, strcharinfo(0); + if (@target_id != BL_ID) misceffect FX_MAGIC_WHITE, @target_id; + // TODO gain_heal_exp + // TODO magic_exp + if (@args$ == "Mouboo" || @args$ == "mouboo") goto L_Mouboo; + + if (getskilllv(SKILL_MAGIC_DARK) >= 1) sc_start SC_HALT_REGENERATE, 2000, 0; + + set @heal_amount, 200, @target_id; + if (attachrid(@target_id) != 1) end; // XXX: to avoid the ugly attachrid method we would need some kind of `run_as` builtin + if (!(isdead())) heal @heal_amount, 0, 1; + end; + +L_Mouboo: + mes "Mouboo : ##3##BYour spell seems to have no effect on the mouboo."; + close; + +OnInit: + set .school, SKILL_MAGIC_LIFE; + set .invocation$, chr(MAGIC_SYMBOL) + "lum"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 1; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level1-magic-blade.txt b/world/map/npc/magic/level1-magic-blade.txt new file mode 100644 index 00000000..7c286678 --- /dev/null +++ b/world/map/npc/magic/level1-magic-blade.txt @@ -0,0 +1,34 @@ +-|script|magic-blade|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 9) end; + set .@level, getskilllv(.school); + if (.@level < .level) end; + set @chiza_component$, ""; + if (.@level <= 2 && countitem("SharpKnife") >= 1) set @chiza_component$, "SharpKnife"; + elif (.@level <= 2 && countitem("Knife") >= 1) set @chiza_component$, "Knife"; + elif (.@level <= 2) end; + if (@chiza_component$ != "") delitem @chiza_component$, 1; + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 9; + misceffect FX_MAGIC_BLACK, strcharinfo(0); + overrideattack (@spellpower/15)+10, 1200, 1, ATTACK_ICON_GENERIC, 30, strnpcinfo(0)+"::OnAttack"; + callfunc "magic_exp"; + set @chiza_str, Str; // do not allow to equip light armor, cast, and then switch to heavy armor to get bonus str + end; + +OnAttack: + if (target(BL_ID, @target_id, 22) != 22) end; // 0x10 | 0x02 | 0x04 + setarray @melee_dmg[0], if_then_else(@chiza_component$ == "Knife", 40, 60), (@chiza_str + 5); + callfunc "melee_damage"; + end; + +OnInit: + set .school, SKILL_MAGIC_WAR; + set .invocation$, chr(MAGIC_SYMBOL) + "chiza"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 1; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level1-make-sulphur.txt b/world/map/npc/magic/level1-make-sulphur.txt new file mode 100644 index 00000000..2d11e5f6 --- /dev/null +++ b/world/map/npc/magic/level1-make-sulphur.txt @@ -0,0 +1,24 @@ +-|script|make-sulphur|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 4) end; + if (getskilllv(.school) < .level) end; + if (countitem("PileOfAsh") >= 1) delitem "PileOfAsh", 1; else end; + set MAGIC_CAST_TICK, gettimetick(2) + 4; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 4; + misceffect FX_MAGIC_RED, strcharinfo(0); + setarray @create_params[0], (@spellpower/100)+1+(rand(max(1,(800-@spellpower)))/180), 50; + setarray @create_items$[0], "SulphurPowder", "PileOfAsh"; + callfunc "magic_create_item"; + callfunc "magic_exp"; + end; + +OnInit: + set .school, SKILL_MAGIC_TRANSMUTE; + set .invocation$, chr(MAGIC_SYMBOL) + "gole"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 1; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level1-summon-maggots.txt b/world/map/npc/magic/level1-summon-maggots.txt new file mode 100644 index 00000000..12d2465c --- /dev/null +++ b/world/map/npc/magic/level1-summon-maggots.txt @@ -0,0 +1,52 @@ +-|script|summon-maggots|32767 +{ + end; + +OnCast: + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 21) end; + if (getskilllv(.school) < .level) end; + if (countitem("MaggotSlime") < 1 || countitem("Root") < 1) end; + delitem "MaggotSlime", 1; + delitem "Root", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 21; + misceffect FX_MAGIC_BLUE, strcharinfo(0); + misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0); + callfunc "magic_exp"; + set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID; + set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127); + set .count, ((sqrt(@spellpower)+(@spellpower/15))/5)+1, .@puppet; + set .master, BL_ID, .@puppet; + set .lifetime, (@spellpower*50)+10000, .@puppet; + addnpctimer 5000-(@spellpower*5), .@puppet$+"::OnSummon"; + addnpctimer 6000, .@puppet$+"::OnDestroy"; + end; + +OnSummon: + specialeffect FX_PENTAGRAM_BURST; + set .@i, 0; + set .@x, getnpcx(); + set .@y, getnpcy(); + set .@map$, strnpcinfo(3); + callsub S_SummonAll; + end; + +OnDestroy: + destroy; + +S_SummonAll: + summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1002, 2, .lifetime; + set .@i, .@i + 1; + if (.@i < .count) goto S_SummonAll; + return; + +OnInit: + set .school, SKILL_MAGIC_ASTRAL; + set .invocation$, chr(MAGIC_SYMBOL) + "kalmurk"; // used in npcs that refer to this spell + callfunc "magic_register2"; + set .level, 1; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level1-transmute-wood.txt b/world/map/npc/magic/level1-transmute-wood.txt new file mode 100644 index 00000000..9984d2b0 --- /dev/null +++ b/world/map/npc/magic/level1-transmute-wood.txt @@ -0,0 +1,36 @@ +-|script|spell-transmute-wood|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 5) end; + if (getskilllv(.school) < .level) end; + if (countitem("RawLog") >= 1) delitem "RawLog", 1; else end; + set MAGIC_CAST_TICK, gettimetick(2) + 4; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 5; + misceffect FX_MAGIC_RED, strcharinfo(0); + if (@args$ == "boo") goto L_Mouboo; + elif (@args$ == "lurk") goto L_Skytlurk; + else message strcharinfo(0), "Magic : ##3##BYou do not know how to transmute wood into this kind of animal."; // FIXME: write a better sentence + end; + +L_Mouboo: + setarray @create_params[0], 1, 40; + setarray @create_items$[0], "MoubooFigurine", "WarpedLog"; + callfunc "magic_create_item"; + callfunc "magic_exp"; + end; + +L_Skytlurk: + if (rand(2) == 1) getitem "Iten", 1; + else getitem "WarpedLog", 1; + message strcharinfo(0), "Magic : ##3##BYou have no idea what a Skrytlurk looks like."; + end; + +OnInit: + set .school, SKILL_MAGIC_TRANSMUTE; + set .invocation$, chr(MAGIC_SYMBOL) + "parum"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 1; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level2-arrow-hail.txt b/world/map/npc/magic/level2-arrow-hail.txt new file mode 100644 index 00000000..ecd79317 --- /dev/null +++ b/world/map/npc/magic/level2-arrow-hail.txt @@ -0,0 +1,112 @@ +-|script|arrow-hail|32767 +{ + // we can not start here because for the puppets this is OnClick + end; + +OnCast: + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (Sp < 25) end; + explode .@map_ext[0], getmap(), "-"; + if (.@map_ext[1] != 1) end; // XXX this is fugly, in the future let's use MF_OUTSIDE to detect if a map is "outside" or "inside" + if (getmapflag(getmap(), MF_TOWN)) end; + if (countitem("Arrow") >= 20 && countitem("SulphurPowder") >= 1) delitem "Arrow", 20; + elif (countitem("IronArrow") >= 20 && countitem("SulphurPowder") >= 1) delitem "IronArrow", 20; + else end; + delitem "SulphurPowder", 1; + set Sp, Sp - 25; + set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + + setarray @away[0], POS_X, POS_Y, getdir(), (.range + 1), 0; + callsub S_AwayFrom; + + set @nearby, 0; + foreach 1, getmap(), @away[0] - 14, @away[1] - 14, @away[0] + 14, @away[1] + 14, + strnpcinfo(0) + "::OnNearbyNpc"; + if (@nearby) goto L_Absorb; + + callfunc "adjust_spellpower"; + set @new_npc_name$, "#" + strnpcinfo(0) + "#" + getcharid(3); // make a unique puppet name for every player + callfunc "magic_exp"; + misceffect FX_MAGIC_BLACK, strcharinfo(0); + set @spell_npc, puppet(getmap(), POS_X, POS_Y, @new_npc_name$, 127); // clone npc => get puppet id + set .max_hit, (@spellpower / 8), @spell_npc; // set .max_hit in the puppet + set .caster, getcharid(3), @spell_npc; // tell the puppet who controls it + set .damage, 125, @spell_npc; + set .damage_bonus, (@spellpower / 5), @spell_npc; + set .area_x, @away[0], @spell_npc; set .area_y, @away[1], @spell_npc; + donpcevent @new_npc_name$+"::OnLaunch"; // start the puppet timer and strike + initnpctimer @new_npc_name$; // start the destroy timer + end; + +S_AwayFrom: + if(@away[2] == 6 && !(iscollision(getmap(), (@away[0] + 1), @away[1]))) // right + set @away[0], @away[0] + 1; + if(@away[2] == 4 && !(iscollision(getmap(), @away[0], (@away[1] - 1)))) // up + set @away[1], @away[1] - 1; + if(@away[2] == 2 && !(iscollision(getmap(), (@away[0] - 1), @away[1]))) // left + set @away[0], @away[0] - 1; + if(@away[2] == 0 && !(iscollision(getmap(), @away[0], (@away[1] + 1)))) // down + set @away[1], @away[1] + 1; + set @away[4], @away[4] + 1; + if(@away[4] < @away[3]) goto S_AwayFrom; + return; + +L_Absorb: + message strcharinfo(0), "##3Arrow Hail : ##BA nearby arrow hail absorbs your magic!"; + end; + +OnNearbyNpc: + explode .@nearby$[0], strnpcinfo(0,@target_id), "#"; + if(.@nearby$[0] == "arrow-hail" || .@nearby$[1] == "arrow-hail") + set @nearby, @nearby + 1; + end; + +OnLaunch: + if(attachrid(.caster) != 1) destroy; // destroy if caster is missing + if(getmap() != strnpcinfo(3)) destroy; // destroy if caster left the map + set .hit, .hit + 1; + if(.hit > .max_hit) destroy; + set .launch, 0; + callsub S_Launch; + addnpctimer 250 + rand(50) + rand(50), strnpcinfo(0)+"::OnLaunch"; // loop until max + end; + +S_Launch: + npcareawarp .area_x - 6, .area_y - 6, .area_x + 6, .area_y + 6, 0, strnpcinfo(0); + misceffect FX_ARROW_HAIL; + set .done, 0; + foreach 3, strnpcinfo(3), getnpcx(), getnpcy(), getnpcx(), getnpcy(), strnpcinfo(0) + "::OnHit"; + if(!.done && getx() == getnpcx() && gety() == getnpcy()) + heal 0 - (.damage + rand(.damage_bonus) + rand(.damage_bonus)), 0; // injure caster + set .launch, .launch + 1; + if(.launch < 3) goto S_Launch; + return; + +OnTimer30000: + debugmes "frillyar timeout! [this shouldn't happen]"; + destroy; + +OnHit: + if(attachrid(.caster) != 1) destroy; // destroy if caster is missing + if(getmap() != strnpcinfo(3)) destroy; // destroy if caster left the map + + if(target(.caster, @target_id, 16) != 16 && .caster != @target_id) end; + if((get(BL_TYPE, @target_id) & 1) == 0) end; // either mob or pc + set .@damage, .damage + rand(.damage_bonus) + rand(.damage_bonus); + if(.caster != @target_id) + set .@damage, (.@damage * (100 - get(MDEF1, @target_id))) / 100; + injure .caster, @target_id, .@damage; + set .done, 1; + end; + +OnInit: + set .school, SKILL_MAGIC_WAR; + set .range, 7; + set .invocation$, chr(MAGIC_SYMBOL) + "frillyar"; // used in npcs that refer to this spell + callfunc "magic_register2"; + set .level, 2; + set .exp_gain, 2; + end; +} diff --git a/world/map/npc/magic/level2-barrier.txt b/world/map/npc/magic/level2-barrier.txt new file mode 100644 index 00000000..89a50044 --- /dev/null +++ b/world/map/npc/magic/level2-barrier.txt @@ -0,0 +1,48 @@ +-|script|magic-barrier|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 15) end; + set .@level, getskilllv(.school); + if (.@level < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (.@level <= 3 && countitem("SmallMushroom") >= 1) delitem "SmallMushroom", 1; + elif (.@level <= 3) end; + set @target_id, getcharid(3, @args$); + if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self + + set @asorm_caster, BL_ID, @target_id; + if (attachrid(@target_id) != 1) end; + set @target_hat, getequipid(equip_head), @asorm_caster; + if (attachrid(@asorm_caster) != 1) end; + if (@target_hat == 888) end; // FIXME: this whole 5 line block could be done with only one line if we modify getequipid + + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 15; + misceffect FX_MAGIC_BLUE, strcharinfo(0); + callfunc "magic_exp"; + + if (distance(BL_ID, @target_id) >= (@spellpower/30)+2) set @target_id, BL_ID; + if (BL_ID == @target_id) set @args$, strcharinfo(0); + if (BL_ID != @target_id) misceffect FX_MAGIC_DEFAULT, @args$; + set .@time, (@spellpower*200)+2000; + set @asorm_time, .@time, @target_id; + sc_start SC_MBARRIER, .@time, max(30,(@spellpower/8))+20, @target_id; + message @args$, "Barrier : You are surrounded by a magical barrier."; + if (attachrid(@target_id) != 1) end; + addtimer @asorm_time, strnpcinfo(0)+"::OnEnd"; + end; + +OnEnd: + message strcharinfo(0), "Barrier : Your magical barrier dissipates."; + misceffect FX_MAGIC_DEFAULT, strcharinfo(0); + end; + +OnInit: + set .school, SKILL_MAGIC_ASTRAL; + set .invocation$, chr(MAGIC_SYMBOL) + "asorm"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 3; + end; +} diff --git a/world/map/npc/magic/level2-detect-players.txt b/world/map/npc/magic/level2-detect-players.txt new file mode 100644 index 00000000..3b024d38 --- /dev/null +++ b/world/map/npc/magic/level2-detect-players.txt @@ -0,0 +1,32 @@ +-|script|detect-players|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 7) end; + if (getskilllv(.school) < .level) end; + set MAGIC_CAST_TICK, gettimetick(2) + 1; // XXX the casttime is 300 so should this be 0 ? + callfunc "adjust_spellpower"; + set Sp, Sp - 7; + misceffect FX_MAGIC_DARKRED, strcharinfo(0); + callfunc "magic_exp"; + set @inwilt$, ""; + set .@d, @spellpower/2; + foreach 0, getmap(), POS_X - .@d, POS_Y - .@d, POS_X + .@d, POS_Y + .@d, strnpcinfo(0)+"::OnPC"; + message strcharinfo(0), if_then_else(@inwilt$=="", "You sense no-one else nearby.", "You sense the following: "+@inwilt$); + end; + +OnPC: + if (@target_id == BL_ID) end; // do not count the caster + if (sc_check(SC_HIDE, @target_id)) end; // do not count players with anwiltyp + if (getpvpflag(1, @target_id)) end; // do not count invisible players + if (@inwilt$ != "") set @inwilt$, @inwilt$ + ", "; + set @inwilt$, @inwilt$ + strcharinfo(0, @target_id) + if_then_else(@spellpower > 99, "("+get(BaseLevel, @target_id)+")", ""); + end; + +OnInit: + set .school, SKILL_MAGIC; + set .invocation$, chr(MAGIC_SYMBOL) + "inwilt"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 0; + end; +} diff --git a/world/map/npc/magic/level2-enchant-lifestone.txt b/world/map/npc/magic/level2-enchant-lifestone.txt new file mode 100644 index 00000000..9d56f84a --- /dev/null +++ b/world/map/npc/magic/level2-enchant-lifestone.txt @@ -0,0 +1,35 @@ +-|script|enchant-lifestone|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 15) end; + if (getskilllv(.school) < .level) end; + if (countitem("BugLeg") >= 1) delitem "BugLeg", 1; + elif (countitem("MaggotSlime") >= 1) delitem "MaggotSlime", 1; + elif (countitem("MauveHerb") >= 1 && countitem("AlizarinHerb") >= 1 && countitem("CobaltHerb") >= 1 && countitem("GambogeHerb") >= 1) goto L_Herbs; + else end; + goto L_Proceed; + +L_Herbs: + delitem "MauveHerb", 1; + delitem "AlizarinHerb", 1; + delitem "CobaltHerb", 1; + delitem "GambogeHerb", 1; + goto L_Proceed; + +L_Proceed: + set MAGIC_CAST_TICK, gettimetick(2) + 4; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 15; + misceffect FX_MAGIC_GENERIC, strcharinfo(0); + getitem "Lifestone", 1; + callfunc "magic_exp"; + end; + +OnInit: + set .school, SKILL_MAGIC; + set .invocation$, chr(MAGIC_SYMBOL) + "manpahil"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level2-flying-backpack.txt b/world/map/npc/magic/level2-flying-backpack.txt new file mode 100644 index 00000000..f2ab0b07 --- /dev/null +++ b/world/map/npc/magic/level2-flying-backpack.txt @@ -0,0 +1,39 @@ +-|script|flying-backpack|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 12) end; + set .@level, getskilllv(.school); + if (.@level < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (.@level <= 3 && countitem("SilkCocoon") >= 1) delitem "SilkCocoon", 1; + elif (.@level <= 3) end; + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 12; + misceffect FX_MAGIC_GREEN, strcharinfo(0); + callfunc "magic_exp"; + set @target_id, getcharid(3, @args$); + if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self + if (distance(BL_ID, @target_id) >= (@spellpower/30)+2) set @target_id, BL_ID; + if (BL_ID != @target_id) misceffect FX_MAGIC_GENERIC, @args$; + if (BL_ID == @target_id) set @args$, strcharinfo(0); + set @plugh_time, (@spellpower*500)+5000, @target_id; + sc_start SC_FLYING_BACKPACK, @plugh_time, 0, @target_id; + message @args$, "Backpack : Your backpack is lifted by a mystical force; you no longer feel it pressing on your back."; + if (attachrid(@target_id) != 1) end; + addtimer @plugh_time, strnpcinfo(0)+"::OnEnd"; + end; + +OnEnd: + message strcharinfo(0), "Backpack : Your backpack is no longer levitating."; + misceffect FX_MAGIC_GENERIC, strcharinfo(0); + end; + +OnInit: + set .school, SKILL_MAGIC_NATURE; + set .invocation$, chr(MAGIC_SYMBOL) + "plugh"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level2-happy-curse.txt b/world/map/npc/magic/level2-happy-curse.txt new file mode 100644 index 00000000..0ad2d113 --- /dev/null +++ b/world/map/npc/magic/level2-happy-curse.txt @@ -0,0 +1,42 @@ +-|script|happy-curse|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 13) end; + set .@level, getskilllv(.school); + if (.@level < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (.@level <= 3 && countitem("GingerBreadMan") >= 1) delitem "GingerBreadMan", 1; + elif (.@level <= 3) end; + set @target_id, getcharid(3, @args$); + if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self + + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 13; + misceffect FX_MAGIC_GREEN, strcharinfo(0); + callfunc "magic_exp"; + + if (distance(BL_ID, @target_id) >= (@spellpower/100)+1) set @target_id, BL_ID; + if (BL_ID == @target_id) set @args$, strcharinfo(0); + set @joyplim_count, 1, @target_id; + set @joyplim_emote, if_then_else(getskilllv(SKILL_MAGIC_DARK) > 1, EMOTE_EVIL, EMOTE_HAPPY), @target_id; + set @joyplim_total, (@spellpower/10), @target_id; + if (attachrid(@target_id) != 1) end; + emotion @joyplim_emote, "self"; + addtimer 500, strnpcinfo(0)+"::OnEmote"; + end; + +OnEmote: + emotion @joyplim_emote, "self"; + set @joyplim_count, @joyplim_count + 1; + if (@joyplim_count < @joyplim_total) addtimer 500, strnpcinfo(0)+"::OnEmote"; + end; + +OnInit: + set .school, SKILL_MAGIC_NATURE; + set .invocation$, chr(MAGIC_SYMBOL) + "joyplim"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level2-hide.txt b/world/map/npc/magic/level2-hide.txt new file mode 100644 index 00000000..42de7f6a --- /dev/null +++ b/world/map/npc/magic/level2-hide.txt @@ -0,0 +1,43 @@ +-|script|spell-hide|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 11) end; + set .@level, getskilllv(.school); + if (.@level < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (.@level <= 3 && countitem("CottonCloth") >= 1) delitem "CottonCloth", 1; + elif (.@level <= 3) end; + set @target_id, getcharid(3, @args$); + if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self + + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 11; + misceffect FX_MAGIC_BLUE, strcharinfo(0); + callfunc "magic_exp"; + + if (distance(BL_ID, @target_id) >= (@spellpower/30)+2) set @target_id, BL_ID; + if (BL_ID == @target_id) set @args$, strcharinfo(0); + if (BL_ID != @target_id) misceffect FX_MAGIC_DEFAULT, @args$; + set .@time, (@spellpower*2500)+5000; + set @anwiltyp_time, .@time, @target_id; + sc_start SC_HIDE, .@time, 0, @target_id; + message @args$, "Magic : You are hidden!"; + if (BL_ID != @target_id) message strcharinfo(0), "Magic : You hid someone!"; + if (attachrid(@target_id) != 1) end; + addtimer @anwiltyp_time, strnpcinfo(0)+"::OnEnd"; + end; + +OnEnd: + message strcharinfo(0), "Magic : You are no longer hidden."; + misceffect FX_MAGIC_GENERIC, strcharinfo(0); + end; + +OnInit: + set .school, SKILL_MAGIC_ASTRAL; + set .invocation$, chr(MAGIC_SYMBOL) + "anwiltyp"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 2; + end; +} diff --git a/world/map/npc/magic/level2-lay-on-hands.txt b/world/map/npc/magic/level2-lay-on-hands.txt new file mode 100644 index 00000000..d106ac54 --- /dev/null +++ b/world/map/npc/magic/level2-lay-on-hands.txt @@ -0,0 +1,57 @@ +-|script|lay-on-hands|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 10) end; + if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (@args$ == "Mouboo" || @args$ == "mouboo") goto L_Mouboo; + set @target_id, getcharid(3, @args$); + if (@target_id < 1 || !(isloggedin(@target_id))) end; + if (Hp <= get(MaxHp, @target_id) / 20) end; // hp needs to be > 1/20 * target hp + callfunc "adjust_spellpower"; + if (distance(BL_ID, @target_id) >= (((sqrt(@spellpower)*12)+@spellpower)/100)+2) end; + if (sc_check(SC_HALT_REGENERATE,@target_id)) end; + if (getequipid(equip_head, @args$) == 888) end; // magic gm top hat + set .@needed, get(MaxHp, @target_id) - get(Hp, @target_id); + goto L_Pay; + +L_Pay: + set MAGIC_CAST_TICK, gettimetick(2) + 1; // XXX should this be 0 ? + set Sp, Sp - 10; + misceffect FX_MAGIC_WHITE, strcharinfo(0); // on caster + misceffect FX_MAGIC_WHITE, @args$; // on target + + set .@fraction, max(80, 200 - (Vit + (@spellpower/10))); // pay at least 40% + set .@payment, (.@needed * .@fraction) / 200; + set .@available, Hp - (MaxHp / 20); + set .@power, if_then_else(.@payment < .@available, .@needed+1-1, (.@available * 200) / .@fraction); // FIXME / XXX why the f do I need to do +1-1 ? + if (.@payment > .@available) set .@payment, .@available; + + set @inma_power, .@power, @target_id; + + set @mexp, min(.exp_gain, .@payment/100); // TODO pass this to gain_heal_exp so it can be passed to gain_exp + // TODO gain_heal_exp(.@power, 1, 1, 3) => gain_exp + + set .@dark, getskilllv(SKILL_MAGIC_DARK) >= 2; // true if dark magic user + set .@bad, (MaxHp/20)*(0-1); + if (.@dark) heal .@bad, 0; + sc_start SC_HALT_REGENERATE, if_then_else(.@dark, 5000, 10000), 0; + + if (attachrid(@target_id) != 1) end; + if (!(isdead())) heal @inma_power, 0; + end; + +L_Mouboo: + set @spell, 1; + callfunc "QuestMoubooHeal"; + set .@needed, 1000; + goto L_Pay; + +OnInit: + set .school, SKILL_MAGIC_LIFE; + set .invocation$, chr(MAGIC_SYMBOL) + "inma"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 4; // this is MAX possible exp + end; +} diff --git a/world/map/npc/magic/level2-lightning-strike.txt b/world/map/npc/magic/level2-lightning-strike.txt new file mode 100644 index 00000000..d27d88df --- /dev/null +++ b/world/map/npc/magic/level2-lightning-strike.txt @@ -0,0 +1,67 @@ +-|script|lightning-strike|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 20) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + set .@level, getskilllv(.school); + if (.@level < .level) end; + if (.@level <= 3 && countitem("IronPowder") >= 1) delitem "IronPowder", 1; + elif (.@level <= 3) end; + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 20; + misceffect FX_MAGIC_BLACK, strcharinfo(0); + set @ingrav_sp, @spellpower; + set @ingrav_luk, Luk; + overrideattack (@spellpower/90)+1, 3000, 8, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack"; + callfunc "magic_exp"; + end; + +OnAttack: + if (target(BL_ID, @target_id, 22) != 22) end; // 0x10 | 0x02 | 0x04 + + set @ingrav_rain, 0; + set .@p, get(.max_radius, "rain") + 1; + set @ingrav_target, @target_id; // store it because foreach overwrites it + foreach 1, getmap(), POS_X-.@p, POS_Y-.@p, POS_X+.@p, POS_Y+.@p, strnpcinfo(0)+"::OnNpc"; + set @target_id, @ingrav_target; // now restore it + + if (@ingrav_rain & 1) goto L_InRain; + setarray @edmg[0], @ingrav_sp, (@ingrav_sp/2)+1, ELT_EARTH, ELT_WIND, FX_LIGHTNING1 + rand(3); + callfunc "elt_damage"; + end; + +OnNpc: + set .@name$, strnpcinfo(0,@target_id); + explode .@nearby$[0], .@name$, "#"; + if (.@nearby$[0] != "rain" && .@nearby$[1] != "rain") end; + setarray .@l[0], getnpcx(.@name$), getnpcy(.@name$), get(.radius, @target_id); // kaflosh x, y, radius + setarray @ar[0], .@l[0]-.@l[2], .@l[1]-.@l[2], .@l[0]+.@l[2], .@l[1]+.@l[2]; // kaflosh x1, y1, x2, y2 <= this is "area" + if (POS_X >= @ar[0] && POS_Y >= @ar[1] && POS_X <= @ar[2] && POS_Y <= @ar[3]) + set @ingrav_rain, @ingrav_rain | 1; + end; + +L_InRain: + set @used, 0; + foreach 3, getmap(), @ar[0], @ar[1], @ar[2], @ar[3], strnpcinfo(0)+"::OnEntityInRain"; + if (@used >= 1 && (@ingrav_luk + rand(200)) >= 150) end; + misceffect FX_LIGHTNING1 + rand(3), strcharinfo(0); + heal 0 - @ingrav_sp, 0; + end; + +OnEntityInRain: + if (target(BL_ID, @target_id, 16) != 16) end; // 0x10 + if (@ingrav_luk + rand(200) <= 175) end; + set @used, @used + 1; + setarray @edmg[0], @ingrav_sp/6, (((@ingrav_sp/2)+1)/3)+1, ELT_EARTH, ELT_WIND, FX_LIGHTNING1 + rand(3); + callfunc "elt_damage"; + end; + +OnInit: + set .school, SKILL_MAGIC_WAR; + set .invocation$, chr(MAGIC_SYMBOL) + "ingrav"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 2; + end; +} diff --git a/world/map/npc/magic/level2-magic-knuckles.txt b/world/map/npc/magic/level2-magic-knuckles.txt new file mode 100644 index 00000000..76ff3215 --- /dev/null +++ b/world/map/npc/magic/level2-magic-knuckles.txt @@ -0,0 +1,32 @@ +-|script|magic-knuckles|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 20) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + set .@level, getskilllv(.school); + if (.@level < .level) end; + if (.@level <= 3 && countitem("Beer") >= 1) delitem "Beer", 1; + elif (.@level <= 3) end; + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 20; + misceffect FX_MAGIC_BLACK, strcharinfo(0); + overrideattack (@spellpower/10)+10, 1300, 1, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack"; + callfunc "magic_exp"; + set @upmaru_str, Str; // do not allow to equip light armor, cast, and then switch to heavy armor to get bonus str + end; + +OnAttack: + if (target(BL_ID, @target_id, 22) != 22) end; // 0x10 | 0x02 | 0x04 + setarray @melee_dmg[0], 30, ((@upmaru_str*2) + 5); + callfunc "melee_damage"; + end; + +OnInit: + set .school, SKILL_MAGIC_WAR; + set .invocation$, chr(MAGIC_SYMBOL) + "upmaru"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level2-make-arrows.txt b/world/map/npc/magic/level2-make-arrows.txt new file mode 100644 index 00000000..897598f9 --- /dev/null +++ b/world/map/npc/magic/level2-make-arrows.txt @@ -0,0 +1,26 @@ +-|script|make-arrows|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 8) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (getskilllv(.school) < .level) end; + if (countitem("RawLog") < 1) end; + delitem "RawLog", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 8; + misceffect FX_MAGIC_RED, strcharinfo(0); + setarray @create_params[0], (@spellpower/40)+1+(rand(max(1,(800-@spellpower)))/80), 500; + setarray @create_items$[0], "Arrow", "WarpedLog"; + callfunc "magic_create_item"; + callfunc "magic_exp"; + end; + +OnInit: + set .school, SKILL_MAGIC_TRANSMUTE; + set .invocation$, chr(MAGIC_SYMBOL) + "kularzufrill"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level2-make-iron-powder.txt b/world/map/npc/magic/level2-make-iron-powder.txt new file mode 100644 index 00000000..089150ac --- /dev/null +++ b/world/map/npc/magic/level2-make-iron-powder.txt @@ -0,0 +1,26 @@ +-|script|make-iron-powder|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 8) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (getskilllv(.school) < .level) end; + if (countitem("IronOre") < 1) end; + delitem "IronOre", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 8; + misceffect FX_MAGIC_RED, strcharinfo(0); + setarray @create_params[0], (@spellpower/140)+1+(rand(max(1,(900-@spellpower)))/220), 700; + setarray @create_items$[0], "IronPowder", "IronOre"; + callfunc "magic_create_item"; + callfunc "magic_exp"; + end; + +OnInit: + set .school, SKILL_MAGIC_TRANSMUTE; + set .invocation$, chr(MAGIC_SYMBOL) + "zukminbirf"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 3; + end; +} diff --git a/world/map/npc/magic/level2-protect.txt b/world/map/npc/magic/level2-protect.txt new file mode 100644 index 00000000..e4ca8d76 --- /dev/null +++ b/world/map/npc/magic/level2-protect.txt @@ -0,0 +1,48 @@ +-|script|protect|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 14) end; + set .@level, getskilllv(.school); + if (.@level < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (.@level <= 3 && countitem("HardSpike") >= 1) delitem "HardSpike", 1; + elif (.@level <= 3) end; + set @target_id, getcharid(3, @args$); + if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self + + set @betsanc_caster, BL_ID, @target_id; + if (attachrid(@target_id) != 1) end; + set @target_hat, getequipid(equip_head), @betsanc_caster; + if (attachrid(@betsanc_caster) != 1) end; + if (@target_hat == 888) end; // FIXME: this whole 5 line block could be done with only one line if we modify getequipid + + set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 14; + misceffect FX_MAGIC_GREEN, strcharinfo(0); + callfunc "magic_exp"; + + if (distance(BL_ID, @target_id) >= (@spellpower/30)+2) set @target_id, BL_ID; + if (BL_ID == @target_id) set @args$, strcharinfo(0); + misceffect FX_MAGIC_SHIELD, @args$; + set .@time, (@spellpower*1000)+5000; + set @betsanc_time, .@time, @target_id; + sc_start SC_PHYS_SHIELD, .@time, max(15,(@spellpower/20))+5, @target_id; + message @args$, "Shield : You feel more protected."; + if (attachrid(@target_id) != 1) end; + addtimer @betsanc_time, strnpcinfo(0)+"::OnEnd"; + end; + +OnEnd: + message strcharinfo(0), "Shield : You feel less protected."; + misceffect FX_MAGIC_SHIELD_ENDS, strcharinfo(0); + end; + +OnInit: + set .school, SKILL_MAGIC_NATURE; + set .invocation$, chr(MAGIC_SYMBOL) + "betsanc"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 2; + end; +} diff --git a/world/map/npc/magic/level2-rain.txt b/world/map/npc/magic/level2-rain.txt new file mode 100644 index 00000000..f12c9072 --- /dev/null +++ b/world/map/npc/magic/level2-rain.txt @@ -0,0 +1,103 @@ +-|script|rain|32767 +{ + // we can not start here because for the puppets this is OnClick + end; + +OnCast: + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (Sp < 17) end; + explode .@map_ext[0], getmap(), "-"; + if (.@map_ext[1] != 1) end; // XXX this is fugly, in the future let's use MF_OUTSIDE to detect if a map is "outside" or "inside" + if (getmapflag(getmap(), MF_TOWN)) end; + if (getskilllv(.school) < 4 && countitem("BottleOfWater") >= 1) delitem "BottleOfWater", 1; + elif (getskilllv(.school) < 4) end; + set Sp, Sp - 17; + set MAGIC_CAST_TICK, gettimetick(2) + 3; // set the new debuff + + callfunc "adjust_spellpower"; + set @krad, min(.max_radius,(min(@spellpower,200)/30)+3); // kaflosh radius + + set @nearby, 0; + foreach 1, getmap(), POS_X - .max_radius, POS_Y - .max_radius, POS_X + .max_radius, POS_Y + .max_radius, + strnpcinfo(0) + "::OnNearbyNpc"; + if (@nearby) goto L_Absorb; + + set @new_npc_name$, "#" + strnpcinfo(0) + "#" + getcharid(3); // make a unique puppet name for every player + callfunc "magic_exp"; + misceffect FX_MAGIC_GREEN, strcharinfo(0); + set @spell_npc, puppet(getmap(), POS_X, POS_Y, @new_npc_name$, 127); // clone npc => get puppet id + set .caster, getcharid(3), @spell_npc; // tell the puppet who controls it + set .radius, @krad, @spell_npc; // this is also used by ingrav, don't rename + set .initial_x, POS_X, @spell_npc; + set .initial_y, POS_Y, @spell_npc; + set .max, @spellpower/3, @spell_npc; + set .max_launch, min(200,@spellpower/2)/100, @spell_npc; + donpcevent @new_npc_name$+"::OnLaunch"; // start + addnpctimer 30000, @new_npc_name$+"::OnDestroy"; // this is just a failsafe in case the npc is not properly destroyed + if(isin("011-1", 85, 31, 103, 45)) goto L_Pumpkins; + end; + +L_Absorb: + message strcharinfo(0), "##3Rain : ##BA nearby raincloud absorbs your magic."; + end; + +OnNearbyNpc: + explode .@nearby$[0], strnpcinfo(0,@target_id), "#"; + if(.@nearby$[1] == "DruidTree0" || .@nearby$[1] == "DruidTree0") goto L_Tree; + if(.@nearby$[0] == "rain" || .@nearby$[1] == "rain") + set @nearby, @nearby + 1; + end; + +L_Pumpkins: + callfunc "HalloweenQuestWaterPumpkins"; + end; + +L_Tree: + set .@x, get(POS_X, @target_id); set .@y, get(POS_Y, @target_id); + if (.@x < POS_X-@krad || .@y < POS_Y-@krad || .@x > POS_X+@krad || .@y > POS_Y+@krad) end; // in max radius but not in puppet area + set @flag, 1; + callfunc "QuestTreeTrigger"; + close; + +OnLaunch: + if(attachrid(.caster) != 1) destroy; // destroy if caster is missing + if(getmap() != strnpcinfo(3)) destroy; // destroy if caster left the map + set .count, .count + 1; + if(.count > .max) destroy; + set .launch, 0; + callsub S_Launch; + addnpctimer 400 + rand(100), strnpcinfo(0)+"::OnLaunch"; // loop until max + end; + +S_Launch: + npcareawarp .initial_x - .radius, .initial_y - .radius, .initial_x + .radius, .initial_y + .radius, 0, strnpcinfo(0); + misceffect FX_RAIN; + foreach 3, strnpcinfo(3), getnpcx()-1, getnpcy()-1, getnpcx()+1, getnpcy()+1, strnpcinfo(0) + "::OnHit"; + set .launch, .launch + 1; + if(.launch < .max_launch) goto S_Launch; + return; + +OnHit: + if(attachrid(.caster) != 1) destroy; // destroy if caster is missing + if(getmap() != strnpcinfo(3)) destroy; // destroy if caster left the map + if(target(.caster, @target_id, 16) != 16 && .caster != @target_id) end; + if((get(BL_TYPE, @target_id) & 1) == 0) end; // either mob or pc + if(elttype(@target_id) == ELT_FIRE) + injure .caster, @target_id, rand((@spellpower/15)+5)+2; + end; + +OnDestroy: + debugmes "kaflosh timeout! [this shouldn't happen]"; + destroy; + +OnInit: + set .school, SKILL_MAGIC_NATURE; + set .invocation$, chr(MAGIC_SYMBOL) + "kaflosh"; // used in npcs that refer to this spell + callfunc "magic_register2"; + set .level, 2; + set .exp_gain, 1; + set .max_radius, 15; + end; +} diff --git a/world/map/npc/magic/level2-shear.txt b/world/map/npc/magic/level2-shear.txt new file mode 100644 index 00000000..5af782e1 --- /dev/null +++ b/world/map/npc/magic/level2-shear.txt @@ -0,0 +1,49 @@ +-|script|shear|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 23) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (getskilllv(.school) < .level) end; + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 23; + misceffect FX_MAGIC_GREEN, strcharinfo(0); + overrideattack 1, 2000, 1, ATTACK_ICON_SHEARING, 30, strnpcinfo(0)+"::OnAttack"; + callfunc "magic_exp"; + set @chipchip_sp, @spellpower; + end; + +OnAttack: + if (isloggedin(@target_id)) end; // can not shear a player + if (sc_check(SC_SHEARED, @target_id)) end; // mob already sheared + if (target(BL_ID, @target_id, 22) != 22) end; // 0x10 | 0x02 | 0x04 + sc_start SC_SHEARED, 600000, 0, @target_id; + set .@score, rand(1000 - rand(@chipchip_sp)); + set .@id, get(Class, @target_id); // get the mob ID + + if (.@id == 1020 && .@score < 300) set .@item$, "WhiteFur"; // Fluffy + elif (.@id == 1027 && .@score < 300) set .@item$, "WhiteFur"; // EasterFluffy + elif (.@id == 1019 && .@score < 250) set .@item$, "HardSpike"; // SpikyMushroom + elif (.@id == 1028 && .@score < 175) set .@item$, "CottonCloth"; // Mouboo + elif (.@id == 1029 && .@score < 700) set .@item$, "MauveHerb"; // MauvePlant + elif (.@id == 1030 && .@score < 700) set .@item$, "CobaltHerb"; // CobaltPlant + elif (.@id == 1031 && .@score < 700) set .@item$, "GambogeHerb"; // GambogePlant + elif (.@id == 1032 && .@score < 700) set .@item$, "AlizarinHerb"; // AlizarinPlant + elif (.@id == 1035 && .@score < 300) set .@item$, "SilkCocoon"; // SilkWorm + elif (.@id == 1018 && .@score < 180) set .@item$, "PinkAntenna"; // Pinkie + else end; + makeitem .@item$, 1, getmap(), rand(POS_X - 1, POS_X + 1), rand(POS_Y - 1, POS_Y + 1); + + if (.@id != 1020 && .@id != 1028 && .@id != 1018 && rand(2) != 1) end; + set @value, 1; + callfunc "QuestSagathaHappy"; + end; + +OnInit: + set .school, SKILL_MAGIC_NATURE; + set .invocation$, chr(MAGIC_SYMBOL) + "chipchip"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 0; + end; +} diff --git a/world/map/npc/magic/level2-summon-fluffies.txt b/world/map/npc/magic/level2-summon-fluffies.txt new file mode 100644 index 00000000..9590b468 --- /dev/null +++ b/world/map/npc/magic/level2-summon-fluffies.txt @@ -0,0 +1,53 @@ +-|script|fluffies|32767 +{ + end; + +OnCast: + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 39) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (getskilllv(.school) < .level) end; + if (countitem("WhiteFur") < 1 || countitem("Root") < 1) end; + delitem "WhiteFur", 1; + delitem "Root", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 39; + misceffect FX_MAGIC_BLUE, strcharinfo(0); + misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0); + callfunc "magic_exp"; + set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID; + set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127); + set .count, (@spellpower/170)+1+(@spellpower/430), .@puppet; + set .master, BL_ID, .@puppet; + set .lifetime, @spellpower*350, .@puppet; + addnpctimer 5000-(@spellpower*8), .@puppet$+"::OnSummon"; + addnpctimer 6000, .@puppet$+"::OnDestroy"; + end; + +OnSummon: + specialeffect FX_PENTAGRAM_BURST; + set .@i, 0; + set .@x, getnpcx(); + set .@y, getnpcy(); + set .@map$, strnpcinfo(3); + callsub S_SummonAll; + end; + +OnDestroy: + destroy; + +S_SummonAll: + summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1020, 2, .lifetime; + set .@i, .@i + 1; + if (.@i < .count) goto S_SummonAll; + return; + +OnInit: + set .school, SKILL_MAGIC_ASTRAL; + set .invocation$, chr(MAGIC_SYMBOL) + "kalakarenk"; // used in npcs that refer to this spell + callfunc "magic_register2"; + set .level, 2; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level2-summon-mouboo.txt b/world/map/npc/magic/level2-summon-mouboo.txt new file mode 100644 index 00000000..6b82b8c9 --- /dev/null +++ b/world/map/npc/magic/level2-summon-mouboo.txt @@ -0,0 +1,53 @@ +-|script|mouboos|32767 +{ + end; + +OnCast: + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 35) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (getskilllv(.school) < .level) end; + if (countitem("MoubooFigurine") < 1 || countitem("Root") < 1) end; + delitem "MoubooFigurine", 1; + delitem "Root", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 35; + misceffect FX_MAGIC_BLUE, strcharinfo(0); + misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0); + callfunc "magic_exp"; + set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID; + set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127); + set .count, (@spellpower/270)+1, .@puppet; + set .master, BL_ID, .@puppet; + set .lifetime, @spellpower*100, .@puppet; + addnpctimer 4000-(@spellpower*9), .@puppet$+"::OnSummon"; + addnpctimer 6000, .@puppet$+"::OnDestroy"; + end; + +OnSummon: + specialeffect FX_PENTAGRAM_BURST; + set .@i, 0; + set .@x, getnpcx(); + set .@y, getnpcy(); + set .@map$, strnpcinfo(3); + callsub S_SummonAll; + end; + +OnDestroy: + destroy; + +S_SummonAll: + summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1028, 2, .lifetime; + set .@i, .@i + 1; + if (.@i < .count) goto S_SummonAll; + return; + +OnInit: + set .school, SKILL_MAGIC_ASTRAL; + set .invocation$, chr(MAGIC_SYMBOL) + "kalboo"; // used in npcs that refer to this spell + callfunc "magic_register2"; + set .level, 2; + set .exp_gain, 2; + end; +} diff --git a/world/map/npc/magic/level2-summon-pinkie.txt b/world/map/npc/magic/level2-summon-pinkie.txt new file mode 100644 index 00000000..2c8d235e --- /dev/null +++ b/world/map/npc/magic/level2-summon-pinkie.txt @@ -0,0 +1,53 @@ +-|script|pinkies|32767 +{ + end; + +OnCast: + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 35) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (getskilllv(.school) < .level) end; + if (countitem("PinkAntenna") < 1 || countitem("Root") < 1) end; + delitem "PinkAntenna", 1; + delitem "Root", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 35; + misceffect FX_MAGIC_BLUE, strcharinfo(0); + misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0); + callfunc "magic_exp"; + set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID; + set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127); + set .count, (@spellpower/120)+1, .@puppet; + set .master, BL_ID, .@puppet; + set .lifetime, @spellpower*150, .@puppet; + addnpctimer 5000-(@spellpower*9), .@puppet$+"::OnSummon"; + addnpctimer 6000, .@puppet$+"::OnDestroy"; + end; + +OnSummon: + specialeffect FX_PENTAGRAM_BURST; + set .@i, 0; + set .@x, getnpcx(); + set .@y, getnpcy(); + set .@map$, strnpcinfo(3); + callsub S_SummonAll; + end; + +OnDestroy: + destroy; + +S_SummonAll: + summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1018, 2, .lifetime; + set .@i, .@i + 1; + if (.@i < .count) goto S_SummonAll; + return; + +OnInit: + set .school, SKILL_MAGIC_ASTRAL; + set .invocation$, chr(MAGIC_SYMBOL) + "kalgina"; // used in npcs that refer to this spell + callfunc "magic_register2"; + set .level, 2; + set .exp_gain, 2; + end; +} diff --git a/world/map/npc/magic/level2-summon-snakes.txt b/world/map/npc/magic/level2-summon-snakes.txt new file mode 100644 index 00000000..2bce0f96 --- /dev/null +++ b/world/map/npc/magic/level2-summon-snakes.txt @@ -0,0 +1,54 @@ +-|script|summon-snakes|32767 +{ + end; + +OnCast: + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 40) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (getskilllv(.school) < .level) end; + if (countitem("DarkCrystal") < 1 || countitem("SnakeEgg") < 1) end; + if (OrumQuest <= 40) end; + delitem "DarkCrystal", 1; + delitem "SnakeEgg", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 15; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 40; + misceffect FX_MAGIC_DARKRED, strcharinfo(0); + misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0); + callfunc "magic_exp"; + set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID; + set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127); + set .count, (@spellpower/300)+1, .@puppet; + set .master, BL_ID, .@puppet; + set .lifetime, @spellpower*80, .@puppet; + addnpctimer 4000-(@spellpower*9), .@puppet$+"::OnSummon"; + addnpctimer 6000, .@puppet$+"::OnDestroy"; + end; + +OnSummon: + specialeffect FX_PENTAGRAM_BURST; + set .@i, 0; + set .@x, getnpcx(); + set .@y, getnpcy(); + set .@map$, strnpcinfo(3); + callsub S_SummonAll; + end; + +OnDestroy: + destroy; + +S_SummonAll: + summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1010, 2, .lifetime; + set .@i, .@i + 1; + if (.@i < .count) goto S_SummonAll; + return; + +OnInit: + set .school, SKILL_MAGIC_DARK; + set .invocation$, chr(MAGIC_SYMBOL) + "halhiss"; // used in npcs that refer to this spell + callfunc "magic_register2"; + set .level, 2; + set .exp_gain, 3; + end; +} diff --git a/world/map/npc/magic/level2-summon-spiky-mushroom.txt b/world/map/npc/magic/level2-summon-spiky-mushroom.txt new file mode 100644 index 00000000..182bbda5 --- /dev/null +++ b/world/map/npc/magic/level2-summon-spiky-mushroom.txt @@ -0,0 +1,53 @@ +-|script|spikymushroom|32767 +{ + end; + +OnCast: + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 33) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (getskilllv(.school) < .level) end; + if (countitem("HardSpike") < 1 || countitem("Root") < 1) end; + delitem "HardSpike", 1; + delitem "Root", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 33; + misceffect FX_MAGIC_BLUE, strcharinfo(0); + misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0); + callfunc "magic_exp"; + set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID; + set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127); + set .count, (@spellpower/120)+1, .@puppet; + set .master, BL_ID, .@puppet; + set .lifetime, @spellpower*400, .@puppet; + addnpctimer 5000-(@spellpower*9), .@puppet$+"::OnSummon"; + addnpctimer 6000, .@puppet$+"::OnDestroy"; + end; + +OnSummon: + specialeffect FX_PENTAGRAM_BURST; + set .@i, 0; + set .@x, getnpcx(); + set .@y, getnpcy(); + set .@map$, strnpcinfo(3); + callsub S_SummonAll; + end; + +OnDestroy: + destroy; + +S_SummonAll: + summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1019, 2, .lifetime; + set .@i, .@i + 1; + if (.@i < .count) goto S_SummonAll; + return; + +OnInit: + set .school, SKILL_MAGIC_ASTRAL; + set .invocation$, chr(MAGIC_SYMBOL) + "kalrenk"; // used in npcs that refer to this spell + callfunc "magic_register2"; + set .level, 2; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level2-summon-wickedmushroom.txt b/world/map/npc/magic/level2-summon-wickedmushroom.txt new file mode 100644 index 00000000..bceef8b6 --- /dev/null +++ b/world/map/npc/magic/level2-summon-wickedmushroom.txt @@ -0,0 +1,54 @@ +-|script|wickedmushroom|32767 +{ + end; + +OnCast: + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 35) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (getskilllv(.school) < .level) end; + if (countitem("DarkCrystal") < 1 || countitem("SmallMushroom") < 1) end; + if (OrumQuest <= 36) end; + delitem "DarkCrystal", 1; + delitem "SmallMushroom", 1; + set MAGIC_CAST_TICK, gettimetick(2) + 15; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 35; + misceffect FX_MAGIC_DARKRED, strcharinfo(0); + misceffect FX_PENTAGRAM_BUILDUP, strcharinfo(0); + callfunc "magic_exp"; + set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID; + set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127); + set .count, (@spellpower/250)+1, .@puppet; + set .master, BL_ID, .@puppet; + set .lifetime, @spellpower*80, .@puppet; + addnpctimer 4000-(@spellpower*9), .@puppet$+"::OnSummon"; + addnpctimer 6000, .@puppet$+"::OnDestroy"; + end; + +OnSummon: + specialeffect FX_PENTAGRAM_BURST; + set .@i, 0; + set .@x, getnpcx(); + set .@y, getnpcy(); + set .@map$, strnpcinfo(3); + callsub S_SummonAll; + end; + +OnDestroy: + destroy; + +S_SummonAll: + summon .@map$, rand(.@x-2,.@x+2), rand(.@y-2,.@y+2), .master, 1106, 2, .lifetime; + set .@i, .@i + 1; + if (.@i < .count) goto S_SummonAll; + return; + +OnInit: + set .school, SKILL_MAGIC_DARK; + set .invocation$, chr(MAGIC_SYMBOL) + "helorp"; // used in npcs that refer to this spell + callfunc "magic_register2"; + set .level, 2; + set .exp_gain, 3; + end; +} diff --git a/world/map/npc/magic/level2-toxic-dart.txt b/world/map/npc/magic/level2-toxic-dart.txt new file mode 100644 index 00000000..91522a58 --- /dev/null +++ b/world/map/npc/magic/level2-toxic-dart.txt @@ -0,0 +1,36 @@ +-|script|toxic-dart|32767 +{ + callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if (Sp < 15) end; + set .@level, getskilllv(.school); + if (.@level < .level) end; + if (OrumQuest <= 37) end; + if (.@level <= 2 && countitem("Root") >= 2) delitem "Root", 2; + elif (.@level <= 2) end; + set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 15; + misceffect FX_MAGIC_DARKRED, strcharinfo(0); + set @damage, sqrt(@spellpower) * 5; + set @dmg_bonus, (BaseLevel/3) + 5; + overrideattack (@spellpower/75)+3, 1200, 4, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack"; + callfunc "magic_exp"; + end; + +OnAttack: + misceffect FX_MAGIC_DARKRED, strcharinfo(0); + if (target(BL_ID, @target_id, 50) != 50) end; // 0x20 | 0x02 | 0x10 + setarray @edmg[0], @damage, @dmg_bonus, ELT_NEUTRAL, ELT_POISON, FX_FIRE_BURST; + callfunc "elt_damage"; + if(@target_id != BL_ID && isloggedin(@target_id)) // this is a dirty trick to check if the target is a player + sc_start sc_poison, 5000+(@spellpower*1200), max(15,@spellpower/15)+5, @target_id; + end; + +OnInit: + set .school, SKILL_MAGIC_DARK; + set .invocation$, chr(MAGIC_SYMBOL) + "phlex"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 2; + set .exp_gain, 3; + end; +} diff --git a/world/map/npc/magic/level3-necromancy.txt b/world/map/npc/magic/level3-necromancy.txt new file mode 100644 index 00000000..bd1f611c --- /dev/null +++ b/world/map/npc/magic/level3-necromancy.txt @@ -0,0 +1,54 @@ +// see https://tmworld.uservoice.com/forums/255809-general/suggestions/6051818-sacrifice +// author: gumi +-|script|necromancy|32767 +{ + callfunc "magic_checks"; if(@failed) end; + if (Sp < 50) end; + if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + set @target_id, getcharid(3, @args$); + if (@target_id < 1 || !(isloggedin(@target_id))) end; + if (get(Hp, @target_id) > 0) end; + if (Hp < (get(MaxHp, @target_id) / 3)) end; // hp must be at least a third of the max hp of the target + callfunc "adjust_spellpower"; + if (distance(BL_ID, @target_id) >= (((sqrt(@spellpower)*12)+@spellpower)/100)+2) end; + if (get(@necromancer, @target_id) > 0) end; // someone else is already trying to resurrect this player + if (getmapflag(getmap(), MF_NOSAVE)) end; // do not allow for maps like illia or candor + if (countitem("Soul") >= 1) delitem "Soul", 1; else end; + + set MAGIC_CAST_TICK, gettimetick(2) + 20; + set Sp, Sp - 50; + misceffect FX_MAGIC_DARKRED, strcharinfo(0); // on caster + misceffect FX_PENTAGRAM_BUILDUP, @args$; // on target + + set @necromancer, CHAR_ID, @target_id; // tell the target who is reviving them + + if (attachrid(@target_id) != 1) end; + addtimer 6000, strnpcinfo(0)+"::OnRevive"; // TODO: make it take more or less time depending on the spell power + end; + +OnRevive: + set .@necro, get(BL_ID, @necromancer); + if (.@necro < 1) goto L_Clean; + if (get(Hp, .@necro) < 1) end; + misceffect FX_PENTAGRAM_BURST, strcharinfo(0); + misceffect FX_CRITICAL, strcharinfo(0, .@necro); + heal 1, 0; // revive + set Hp, 1; + set Sp, 0; + set Hp, 1, .@necro; + set Sp, 0, .@necro; + goto L_Clean; + +L_Clean: + set @necromancer, 0; + end; + +OnInit: + set .school, SKILL_MAGIC_DARK; + set .invocation$, chr(MAGIC_SYMBOL) + "nevela"; // used in npcs that refer to this spell + callfunc "magic_register"; + set .level, 3; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf index e9bceb20..68a348e1 100644 --- a/world/map/npc/scripts.conf +++ b/world/map/npc/scripts.conf @@ -32,6 +32,7 @@ npc: npc/functions/dynamic_menu.txt npc: npc/functions/DyeConfig.txt npc: npc/functions/motd.txt npc: npc/functions/motdconfig.txt +npc: npc/functions/hug.txt // Item Functions npc: npc/items/magic_gm_top_hat.txt @@ -50,6 +51,12 @@ npc: npc/items/mirror.txt npc: npc/items/rubber_bat.txt import: npc/_import.txt +// magic +import: npc/magic/_import.txt + +// GM commands +import: npc/commands/_import.txt + // GM Events npc: npc/functions/gm_island.txt // Annuals Framework -- cgit v1.2.3-70-g09d2 From afb8f6982d9a6458197faeb9c035b0a882b5b7fa Mon Sep 17 00:00:00 2001 From: mekolat Date: Thu, 29 Oct 2015 11:48:34 -0400 Subject: use call --- world/map/npc/001-2/wizards.txt | 21 +++++----- world/map/npc/magic/_procedures.txt | 47 +++++++++------------- world/map/npc/magic/level0-wand.txt | 6 +-- world/map/npc/magic/level1-aggravate.txt | 4 +- world/map/npc/magic/level1-detect-magic.txt | 4 +- world/map/npc/magic/level1-experience.txt | 4 +- world/map/npc/magic/level1-flare-dart.txt | 7 ++-- world/map/npc/magic/level1-grow-alizarin.txt | 4 +- world/map/npc/magic/level1-grow-cobalt.txt | 4 +- world/map/npc/magic/level1-grow-gamboge.txt | 4 +- world/map/npc/magic/level1-grow-mauve.txt | 4 +- world/map/npc/magic/level1-lesser-heal.txt | 4 +- world/map/npc/magic/level1-magic-blade.txt | 8 ++-- world/map/npc/magic/level1-make-sulphur.txt | 4 +- world/map/npc/magic/level1-summon-maggots.txt | 4 +- world/map/npc/magic/level1-transmute-wood.txt | 4 +- world/map/npc/magic/level2-arrow-hail.txt | 4 +- world/map/npc/magic/level2-barrier.txt | 4 +- world/map/npc/magic/level2-detect-players.txt | 4 +- world/map/npc/magic/level2-enchant-lifestone.txt | 4 +- world/map/npc/magic/level2-flying-backpack.txt | 4 +- world/map/npc/magic/level2-happy-curse.txt | 4 +- world/map/npc/magic/level2-hide.txt | 4 +- world/map/npc/magic/level2-lay-on-hands.txt | 4 +- world/map/npc/magic/level2-lightning-strike.txt | 10 ++--- world/map/npc/magic/level2-magic-knuckles.txt | 8 ++-- world/map/npc/magic/level2-make-arrows.txt | 4 +- world/map/npc/magic/level2-make-iron-powder.txt | 4 +- world/map/npc/magic/level2-protect.txt | 4 +- world/map/npc/magic/level2-rain.txt | 4 +- world/map/npc/magic/level2-shear.txt | 4 +- world/map/npc/magic/level2-summon-fluffies.txt | 4 +- world/map/npc/magic/level2-summon-mouboo.txt | 4 +- world/map/npc/magic/level2-summon-pinkie.txt | 4 +- world/map/npc/magic/level2-summon-snakes.txt | 4 +- .../map/npc/magic/level2-summon-spiky-mushroom.txt | 4 +- .../map/npc/magic/level2-summon-wickedmushroom.txt | 4 +- world/map/npc/magic/level2-toxic-dart.txt | 7 ++-- world/map/npc/magic/level3-necromancy.txt | 4 +- 39 files changed, 113 insertions(+), 125 deletions(-) (limited to 'world') diff --git a/world/map/npc/001-2/wizards.txt b/world/map/npc/001-2/wizards.txt index ef538489..3c7d6ecf 100644 --- a/world/map/npc/001-2/wizards.txt +++ b/world/map/npc/001-2/wizards.txt @@ -11,15 +11,16 @@ close; OnInit: - set .@void, puppet("001-2", 104, 19, "Desert Mana Seed#_M", 166); - set .@void, puppet("001-2", 99, 22, "Wizard#1", 355); - set .@void, puppet("001-2", 92, 24, "Wizard#2", 356); - set .@void, puppet("001-2", 92, 30, "Wizard#3", 357); - set .@void, puppet("001-2", 99, 32, "Wizard#4", 358); - set .@void, puppet("001-2", 110, 22, "Wizard#5", 359); - set .@void, puppet("001-2", 117, 24, "Wizard#6", 360); - set .@void, puppet("001-2", 117, 30, "Wizard#7", 361); - set .@void, puppet("001-2", 110, 32, "Wizard#8", 362); - set .@void, puppet("001-2", 104, 27, "Arch-Wizard#9", 354); + void + puppet("001-2", 104, 19, "Desert Mana Seed#_M", 166), + puppet("001-2", 99, 22, "Wizard#1", 355), + puppet("001-2", 92, 24, "Wizard#2", 356), + puppet("001-2", 92, 30, "Wizard#3", 357), + puppet("001-2", 99, 32, "Wizard#4", 358), + puppet("001-2", 110, 22, "Wizard#5", 359), + puppet("001-2", 117, 24, "Wizard#6", 360), + puppet("001-2", 117, 30, "Wizard#7", 361), + puppet("001-2", 110, 32, "Wizard#8", 362), + puppet("001-2", 104, 27, "Arch-Wizard#9", 354); end; } diff --git a/world/map/npc/magic/_procedures.txt b/world/map/npc/magic/_procedures.txt index 71d12605..b2a734c2 100644 --- a/world/map/npc/magic/_procedures.txt +++ b/world/map/npc/magic/_procedures.txt @@ -1,52 +1,45 @@ function|script|magic_register { debugmes ">> Register " + .invocation$ + " @ " + strnpcinfo(0); - registercmd .invocation$, strnpcinfo(0); // register the spell - set .index, $@magic_index; - set $@magic_index, $@magic_index + 1; - return; -} - -function|script|magic_register2 -{ - debugmes ">> Register " + .invocation$ + " @ " + strnpcinfo(0); - registercmd .invocation$, strnpcinfo(0) + "::OnCast"; // register the spell <= this spell has a puppet + set .@ext$, if_then_else(getarg(0,"") != "", "::"+getarg(0), ""); + registercmd .invocation$, strnpcinfo(0) + .@ext$; // register the spell set .index, $@magic_index; set $@magic_index, $@magic_index + 1; return; } +// this function is call()-only function|script|magic_checks { - set @failed, 0; - if(getpvpflag(1)) set @failed, 1; // can not cast with @hide enabled - if((gettimetick(2) - MAGIC_CAST_TICK) < 0) set @failed, 1; // check if last debuff ended - if(isdead()) set @failed, 1; // can not cast when dead - return; + set .@r, 0; + if(getpvpflag(1)) set .@r, 1; + if((gettimetick(2) - MAGIC_CAST_TICK) < 0) set .@r, 2; // check if last debuff ended + if(Hp < 1) set .@r, 3; // can not cast when dead + return .@r; } function|script|elt_damage { - // @edmg is damage, dmgplus(mutation), bonus_elt, malus_elt, effect - set @edmg[5], @edmg[0] + rand(@edmg[1]); - if(elttype(@target_id) == @edmg[3]) // malus - set @edmg[5], @edmg[5] / 3; - if(elttype(@target_id) == @edmg[2]) // bonus - set @edmg[5], ((eltlvl(@target_id) + 4) * @edmg[5]) / 4; + // args are damage, dmgplus(mutation), bonus_elt, malus_elt, effect + set .@dmg, getarg(0) + rand(getarg(1)); + if(elttype(@target_id) == getarg(3)) // malus + set .@dmg, .@dmg / 3; + if(elttype(@target_id) == getarg(2)) // bonus + set .@dmg, ((eltlvl(@target_id) + 4) * .@dmg) / 4; set .@source, .caster; if (!.@source) set .@source, getcharid(3); - injure .@source, @target_id, @edmg[5]; - misceffect @edmg[4], @target_id; - cleararray @edmg, 0, getarraysize(@edmg); + injure .@source, @target_id, .@dmg; + misceffect getarg(4), @target_id; return; } function|script|melee_damage { - if ((@spellpower - rand(100)) < (get(BaseLevel, @target_id) + get(MDEF1, @target_id))) - injure BL_ID, @target_id, 0; - else injure BL_ID, @target_id, @melee_dmg[0] + rand(@melee_dmg[1]); + // args are spell power, target id, dmg + if ((getarg(0) - rand(100)) < (get(BaseLevel, getarg(1)) + get(MDEF1, getarg(1)))) + injure BL_ID, getarg(1), 0; + else injure BL_ID, getarg(1), getarg(2); return; } diff --git a/world/map/npc/magic/level0-wand.txt b/world/map/npc/magic/level0-wand.txt index e38a26c7..f0938713 100644 --- a/world/map/npc/magic/level0-wand.txt +++ b/world/map/npc/magic/level0-wand.txt @@ -1,6 +1,6 @@ -|script|spell-wand|32767 { - callfunc "magic_checks"; if(@failed) goto L_Failed; // << I wish we had functions that could return >> + if(call("magic_checks")) goto L_Failed; callsub S_CheckWand; if(@WandAttack != 1) goto L_Failed; @@ -18,7 +18,7 @@ OnAttack: if(target(BL_ID, @target_id, 22) != 22) goto L_Failed; // 0x02 | 0x04 | 0x10 set Sp, (Sp - @WandCost); set @damage, (@Wand * (@spellpower / 3)); - setarray @edmg,@damage,@damage,ELT_NEUTRAL,ELT_NEUTRAL,FX_MAGIC_RED; callfunc "elt_damage"; + void call("elt_damage", @damage,@damage,ELT_NEUTRAL,ELT_NEUTRAL,FX_MAGIC_RED); end; S_CheckWand: @@ -67,7 +67,7 @@ OnInit: setarray .WandsAnim[0], 35, 33; set .school, SKILL_MAGIC; set .invocation$, chr(MAGIC_SYMBOL) + "confringo"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 0; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level1-aggravate.txt b/world/map/npc/magic/level1-aggravate.txt index 74316b89..1aaa9fc7 100644 --- a/world/map/npc/magic/level1-aggravate.txt +++ b/world/map/npc/magic/level1-aggravate.txt @@ -1,6 +1,6 @@ -|script|spell-aggravate|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 3) end; if (getskilllv(.school) < .level) end; set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff @@ -15,7 +15,7 @@ OnInit: set .school, SKILL_MAGIC_NATURE; set .invocation$, chr(MAGIC_SYMBOL) + "itenplz"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 1; set .exp_gain, 0; end; diff --git a/world/map/npc/magic/level1-detect-magic.txt b/world/map/npc/magic/level1-detect-magic.txt index c5dff558..e64a499a 100644 --- a/world/map/npc/magic/level1-detect-magic.txt +++ b/world/map/npc/magic/level1-detect-magic.txt @@ -1,6 +1,6 @@ -|script|detect-magic|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 3) end; if (getskilllv(.school) < .level) end; set MAGIC_CAST_TICK, gettimetick(2) + 6; // set the new debuff @@ -22,7 +22,7 @@ OnNearbyNpc: OnInit: set .school, SKILL_MAGIC; set .invocation$, chr(MAGIC_SYMBOL) + "miteyo"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 1; set .exp_gain, 0; end; diff --git a/world/map/npc/magic/level1-experience.txt b/world/map/npc/magic/level1-experience.txt index 9492b6f2..0d6b5459 100644 --- a/world/map/npc/magic/level1-experience.txt +++ b/world/map/npc/magic/level1-experience.txt @@ -1,6 +1,6 @@ -|script|spell-experience|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 1) end; set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff set @level, getskilllv(.school); @@ -35,7 +35,7 @@ OnInit: set .invocation$, chr(MAGIC_SYMBOL) + "abizit"; // used in npcs that refer to this spell set .level, 1; set .exp_gain, 0; - callfunc "magic_register"; + void call("magic_register"); setarray .MAX_MAGIC_EXP[0], 0, 100, 1200, 8000, 40000, 65535; end; } diff --git a/world/map/npc/magic/level1-flare-dart.txt b/world/map/npc/magic/level1-flare-dart.txt index ee08e7f4..6b6657b6 100644 --- a/world/map/npc/magic/level1-flare-dart.txt +++ b/world/map/npc/magic/level1-flare-dart.txt @@ -1,6 +1,6 @@ -|script|flare-dart|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 10) end; set @level, getskilllv(.school); if (@level < .level) end; @@ -19,14 +19,13 @@ OnAttack: misceffect FX_MAGIC_BLACK, strcharinfo(0); if (target(BL_ID, @target_id, 50) != 50) end; // 0x20 | 0x02 | 0x10 - setarray @edmg[0], @damage, @dmg_bonus, ELT_WATER, ELT_FIRE, FX_MAGIC_BLACK; - callfunc "elt_damage"; + void call("elt_damage", @damage, @dmg_bonus, ELT_WATER, ELT_FIRE, FX_MAGIC_BLACK); end; OnInit: set .school, SKILL_MAGIC_WAR; set .invocation$, chr(MAGIC_SYMBOL) + "flar"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 1; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level1-grow-alizarin.txt b/world/map/npc/magic/level1-grow-alizarin.txt index 64593975..c44a4f47 100644 --- a/world/map/npc/magic/level1-grow-alizarin.txt +++ b/world/map/npc/magic/level1-grow-alizarin.txt @@ -1,6 +1,6 @@ -|script|grow-alizarin|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 4) end; if (getskilllv(.school) < .level) end; if (countitem("AlizarinHerb") < 1 || countitem("Root") < 1) end; @@ -30,7 +30,7 @@ S_SummonAll: OnInit: set .school, SKILL_MAGIC_NATURE; set .invocation$, chr(MAGIC_SYMBOL) + "modriphoo"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 1; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level1-grow-cobalt.txt b/world/map/npc/magic/level1-grow-cobalt.txt index c094fe6f..1eb923b2 100644 --- a/world/map/npc/magic/level1-grow-cobalt.txt +++ b/world/map/npc/magic/level1-grow-cobalt.txt @@ -1,6 +1,6 @@ -|script|grow-cobalt|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 4) end; if (getskilllv(.school) < .level) end; if (countitem("CobaltHerb") < 1 || countitem("Root") < 1) end; @@ -30,7 +30,7 @@ S_SummonAll: OnInit: set .school, SKILL_MAGIC_NATURE; set .invocation$, chr(MAGIC_SYMBOL) + "modrisump"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 1; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level1-grow-gamboge.txt b/world/map/npc/magic/level1-grow-gamboge.txt index 15bb9906..4ac779a8 100644 --- a/world/map/npc/magic/level1-grow-gamboge.txt +++ b/world/map/npc/magic/level1-grow-gamboge.txt @@ -1,6 +1,6 @@ -|script|grow-gamboge|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 4) end; if (getskilllv(.school) < .level) end; if (countitem("GambogeHerb") < 1 || countitem("Root") < 1) end; @@ -30,7 +30,7 @@ S_SummonAll: OnInit: set .school, SKILL_MAGIC_NATURE; set .invocation$, chr(MAGIC_SYMBOL) + "modriyikam"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 1; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level1-grow-mauve.txt b/world/map/npc/magic/level1-grow-mauve.txt index 6cc15955..1744660a 100644 --- a/world/map/npc/magic/level1-grow-mauve.txt +++ b/world/map/npc/magic/level1-grow-mauve.txt @@ -1,6 +1,6 @@ -|script|grow-mauve|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 4) end; if (getskilllv(.school) < .level) end; if (countitem("MauveHerb") < 1 || countitem("Root") < 1) end; @@ -30,7 +30,7 @@ S_SummonAll: OnInit: set .school, SKILL_MAGIC_NATURE; set .invocation$, chr(MAGIC_SYMBOL) + "modrilax"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 1; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level1-lesser-heal.txt b/world/map/npc/magic/level1-lesser-heal.txt index ef087525..6b728e81 100644 --- a/world/map/npc/magic/level1-lesser-heal.txt +++ b/world/map/npc/magic/level1-lesser-heal.txt @@ -1,6 +1,6 @@ -|script|lesser-heal|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 6) end; set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff if (getskilllv(.school) < .level) end; @@ -34,7 +34,7 @@ L_Mouboo: OnInit: set .school, SKILL_MAGIC_LIFE; set .invocation$, chr(MAGIC_SYMBOL) + "lum"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 1; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level1-magic-blade.txt b/world/map/npc/magic/level1-magic-blade.txt index 7c286678..915cb018 100644 --- a/world/map/npc/magic/level1-magic-blade.txt +++ b/world/map/npc/magic/level1-magic-blade.txt @@ -1,6 +1,6 @@ -|script|magic-blade|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 9) end; set .@level, getskilllv(.school); if (.@level < .level) end; @@ -20,14 +20,14 @@ OnAttack: if (target(BL_ID, @target_id, 22) != 22) end; // 0x10 | 0x02 | 0x04 - setarray @melee_dmg[0], if_then_else(@chiza_component$ == "Knife", 40, 60), (@chiza_str + 5); - callfunc "melee_damage"; + set .@dmg, if_then_else(@chiza_component$ == "Knife", 40, 60); + void call("melee_damage", @spellpower, @target_id, (.@dmg + rand(@chiza_str + 5))); end; OnInit: set .school, SKILL_MAGIC_WAR; set .invocation$, chr(MAGIC_SYMBOL) + "chiza"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 1; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level1-make-sulphur.txt b/world/map/npc/magic/level1-make-sulphur.txt index 2d11e5f6..fe175265 100644 --- a/world/map/npc/magic/level1-make-sulphur.txt +++ b/world/map/npc/magic/level1-make-sulphur.txt @@ -1,6 +1,6 @@ -|script|make-sulphur|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 4) end; if (getskilllv(.school) < .level) end; if (countitem("PileOfAsh") >= 1) delitem "PileOfAsh", 1; else end; @@ -17,7 +17,7 @@ OnInit: set .school, SKILL_MAGIC_TRANSMUTE; set .invocation$, chr(MAGIC_SYMBOL) + "gole"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 1; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level1-summon-maggots.txt b/world/map/npc/magic/level1-summon-maggots.txt index 12d2465c..9247e56c 100644 --- a/world/map/npc/magic/level1-summon-maggots.txt +++ b/world/map/npc/magic/level1-summon-maggots.txt @@ -3,7 +3,7 @@ end; OnCast: - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 21) end; if (getskilllv(.school) < .level) end; if (countitem("MaggotSlime") < 1 || countitem("Root") < 1) end; @@ -45,7 +45,7 @@ S_SummonAll: OnInit: set .school, SKILL_MAGIC_ASTRAL; set .invocation$, chr(MAGIC_SYMBOL) + "kalmurk"; // used in npcs that refer to this spell - callfunc "magic_register2"; + void call("magic_register", "OnCast"); set .level, 1; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level1-transmute-wood.txt b/world/map/npc/magic/level1-transmute-wood.txt index 9984d2b0..9ec8403e 100644 --- a/world/map/npc/magic/level1-transmute-wood.txt +++ b/world/map/npc/magic/level1-transmute-wood.txt @@ -1,6 +1,6 @@ -|script|spell-transmute-wood|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 5) end; if (getskilllv(.school) < .level) end; if (countitem("RawLog") >= 1) delitem "RawLog", 1; else end; @@ -29,7 +29,7 @@ L_Skytlurk: OnInit: set .school, SKILL_MAGIC_TRANSMUTE; set .invocation$, chr(MAGIC_SYMBOL) + "parum"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 1; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level2-arrow-hail.txt b/world/map/npc/magic/level2-arrow-hail.txt index ecd79317..f1a3686b 100644 --- a/world/map/npc/magic/level2-arrow-hail.txt +++ b/world/map/npc/magic/level2-arrow-hail.txt @@ -4,7 +4,7 @@ end; OnCast: - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (getskilllv(.school) < .level) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (Sp < 25) end; @@ -105,7 +105,7 @@ OnInit: set .school, SKILL_MAGIC_WAR; set .range, 7; set .invocation$, chr(MAGIC_SYMBOL) + "frillyar"; // used in npcs that refer to this spell - callfunc "magic_register2"; + void call("magic_register", "OnCast"); set .level, 2; set .exp_gain, 2; end; diff --git a/world/map/npc/magic/level2-barrier.txt b/world/map/npc/magic/level2-barrier.txt index 89a50044..3c7ef29f 100644 --- a/world/map/npc/magic/level2-barrier.txt +++ b/world/map/npc/magic/level2-barrier.txt @@ -1,6 +1,6 @@ -|script|magic-barrier|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 15) end; set .@level, getskilllv(.school); if (.@level < .level) end; @@ -41,7 +41,7 @@ OnEnd: OnInit: set .school, SKILL_MAGIC_ASTRAL; set .invocation$, chr(MAGIC_SYMBOL) + "asorm"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 3; end; diff --git a/world/map/npc/magic/level2-detect-players.txt b/world/map/npc/magic/level2-detect-players.txt index 3b024d38..41ab2e03 100644 --- a/world/map/npc/magic/level2-detect-players.txt +++ b/world/map/npc/magic/level2-detect-players.txt @@ -1,6 +1,6 @@ -|script|detect-players|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 7) end; if (getskilllv(.school) < .level) end; set MAGIC_CAST_TICK, gettimetick(2) + 1; // XXX the casttime is 300 so should this be 0 ? @@ -25,7 +25,7 @@ OnPC: OnInit: set .school, SKILL_MAGIC; set .invocation$, chr(MAGIC_SYMBOL) + "inwilt"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 0; end; diff --git a/world/map/npc/magic/level2-enchant-lifestone.txt b/world/map/npc/magic/level2-enchant-lifestone.txt index 9d56f84a..19cc0a84 100644 --- a/world/map/npc/magic/level2-enchant-lifestone.txt +++ b/world/map/npc/magic/level2-enchant-lifestone.txt @@ -1,6 +1,6 @@ -|script|enchant-lifestone|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 15) end; if (getskilllv(.school) < .level) end; if (countitem("BugLeg") >= 1) delitem "BugLeg", 1; @@ -28,7 +28,7 @@ L_Proceed: OnInit: set .school, SKILL_MAGIC; set .invocation$, chr(MAGIC_SYMBOL) + "manpahil"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level2-flying-backpack.txt b/world/map/npc/magic/level2-flying-backpack.txt index f2ab0b07..2480ef14 100644 --- a/world/map/npc/magic/level2-flying-backpack.txt +++ b/world/map/npc/magic/level2-flying-backpack.txt @@ -1,6 +1,6 @@ -|script|flying-backpack|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 12) end; set .@level, getskilllv(.school); if (.@level < .level) end; @@ -32,7 +32,7 @@ OnEnd: OnInit: set .school, SKILL_MAGIC_NATURE; set .invocation$, chr(MAGIC_SYMBOL) + "plugh"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level2-happy-curse.txt b/world/map/npc/magic/level2-happy-curse.txt index 0ad2d113..a6e314dd 100644 --- a/world/map/npc/magic/level2-happy-curse.txt +++ b/world/map/npc/magic/level2-happy-curse.txt @@ -1,6 +1,6 @@ -|script|happy-curse|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 13) end; set .@level, getskilllv(.school); if (.@level < .level) end; @@ -35,7 +35,7 @@ OnEmote: OnInit: set .school, SKILL_MAGIC_NATURE; set .invocation$, chr(MAGIC_SYMBOL) + "joyplim"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level2-hide.txt b/world/map/npc/magic/level2-hide.txt index 42de7f6a..d6bf538c 100644 --- a/world/map/npc/magic/level2-hide.txt +++ b/world/map/npc/magic/level2-hide.txt @@ -1,6 +1,6 @@ -|script|spell-hide|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 11) end; set .@level, getskilllv(.school); if (.@level < .level) end; @@ -36,7 +36,7 @@ OnEnd: OnInit: set .school, SKILL_MAGIC_ASTRAL; set .invocation$, chr(MAGIC_SYMBOL) + "anwiltyp"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 2; end; diff --git a/world/map/npc/magic/level2-lay-on-hands.txt b/world/map/npc/magic/level2-lay-on-hands.txt index d106ac54..7d006ea9 100644 --- a/world/map/npc/magic/level2-lay-on-hands.txt +++ b/world/map/npc/magic/level2-lay-on-hands.txt @@ -1,6 +1,6 @@ -|script|lay-on-hands|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 10) end; if (getskilllv(.school) < .level) end; if (getskilllv(SKILL_MAGIC) < .level) end; @@ -50,7 +50,7 @@ L_Mouboo: OnInit: set .school, SKILL_MAGIC_LIFE; set .invocation$, chr(MAGIC_SYMBOL) + "inma"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 4; // this is MAX possible exp end; diff --git a/world/map/npc/magic/level2-lightning-strike.txt b/world/map/npc/magic/level2-lightning-strike.txt index d27d88df..c9cf4602 100644 --- a/world/map/npc/magic/level2-lightning-strike.txt +++ b/world/map/npc/magic/level2-lightning-strike.txt @@ -1,6 +1,6 @@ -|script|lightning-strike|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 20) end; if (getskilllv(SKILL_MAGIC) < .level) end; set .@level, getskilllv(.school); @@ -27,8 +27,7 @@ OnAttack: set @target_id, @ingrav_target; // now restore it if (@ingrav_rain & 1) goto L_InRain; - setarray @edmg[0], @ingrav_sp, (@ingrav_sp/2)+1, ELT_EARTH, ELT_WIND, FX_LIGHTNING1 + rand(3); - callfunc "elt_damage"; + void call("elt_damage", @ingrav_sp, (@ingrav_sp/2)+1, ELT_EARTH, ELT_WIND, FX_LIGHTNING1 + rand(3)); end; OnNpc: @@ -53,14 +52,13 @@ OnEntityInRain: if (target(BL_ID, @target_id, 16) != 16) end; // 0x10 if (@ingrav_luk + rand(200) <= 175) end; set @used, @used + 1; - setarray @edmg[0], @ingrav_sp/6, (((@ingrav_sp/2)+1)/3)+1, ELT_EARTH, ELT_WIND, FX_LIGHTNING1 + rand(3); - callfunc "elt_damage"; + void call("elt_damage", @ingrav_sp/6, (((@ingrav_sp/2)+1)/3)+1, ELT_EARTH, ELT_WIND, FX_LIGHTNING1 + rand(3)); end; OnInit: set .school, SKILL_MAGIC_WAR; set .invocation$, chr(MAGIC_SYMBOL) + "ingrav"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 2; end; diff --git a/world/map/npc/magic/level2-magic-knuckles.txt b/world/map/npc/magic/level2-magic-knuckles.txt index 76ff3215..a91feeb2 100644 --- a/world/map/npc/magic/level2-magic-knuckles.txt +++ b/world/map/npc/magic/level2-magic-knuckles.txt @@ -1,6 +1,6 @@ -|script|magic-knuckles|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 20) end; if (getskilllv(SKILL_MAGIC) < .level) end; set .@level, getskilllv(.school); @@ -17,15 +17,13 @@ end; OnAttack: - if (target(BL_ID, @target_id, 22) != 22) end; // 0x10 | 0x02 | 0x04 - setarray @melee_dmg[0], 30, ((@upmaru_str*2) + 5); - callfunc "melee_damage"; + void call("melee_damage", @spellpower, @target_id, (30 + rand((@upmaru_str*2) + 5))); end; OnInit: set .school, SKILL_MAGIC_WAR; set .invocation$, chr(MAGIC_SYMBOL) + "upmaru"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level2-make-arrows.txt b/world/map/npc/magic/level2-make-arrows.txt index 897598f9..db3250a6 100644 --- a/world/map/npc/magic/level2-make-arrows.txt +++ b/world/map/npc/magic/level2-make-arrows.txt @@ -1,6 +1,6 @@ -|script|make-arrows|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 8) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; @@ -19,7 +19,7 @@ OnInit: set .school, SKILL_MAGIC_TRANSMUTE; set .invocation$, chr(MAGIC_SYMBOL) + "kularzufrill"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level2-make-iron-powder.txt b/world/map/npc/magic/level2-make-iron-powder.txt index 089150ac..7cf7a134 100644 --- a/world/map/npc/magic/level2-make-iron-powder.txt +++ b/world/map/npc/magic/level2-make-iron-powder.txt @@ -1,6 +1,6 @@ -|script|make-iron-powder|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 8) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; @@ -19,7 +19,7 @@ OnInit: set .school, SKILL_MAGIC_TRANSMUTE; set .invocation$, chr(MAGIC_SYMBOL) + "zukminbirf"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 3; end; diff --git a/world/map/npc/magic/level2-protect.txt b/world/map/npc/magic/level2-protect.txt index e4ca8d76..bee84133 100644 --- a/world/map/npc/magic/level2-protect.txt +++ b/world/map/npc/magic/level2-protect.txt @@ -1,6 +1,6 @@ -|script|protect|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 14) end; set .@level, getskilllv(.school); if (.@level < .level) end; @@ -41,7 +41,7 @@ OnEnd: OnInit: set .school, SKILL_MAGIC_NATURE; set .invocation$, chr(MAGIC_SYMBOL) + "betsanc"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 2; end; diff --git a/world/map/npc/magic/level2-rain.txt b/world/map/npc/magic/level2-rain.txt index f12c9072..2d13cc8d 100644 --- a/world/map/npc/magic/level2-rain.txt +++ b/world/map/npc/magic/level2-rain.txt @@ -4,7 +4,7 @@ end; OnCast: - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (getskilllv(.school) < .level) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (Sp < 17) end; @@ -95,7 +95,7 @@ OnDestroy: OnInit: set .school, SKILL_MAGIC_NATURE; set .invocation$, chr(MAGIC_SYMBOL) + "kaflosh"; // used in npcs that refer to this spell - callfunc "magic_register2"; + void call("magic_register", "OnCast"); set .level, 2; set .exp_gain, 1; set .max_radius, 15; diff --git a/world/map/npc/magic/level2-shear.txt b/world/map/npc/magic/level2-shear.txt index 5af782e1..afa6a59e 100644 --- a/world/map/npc/magic/level2-shear.txt +++ b/world/map/npc/magic/level2-shear.txt @@ -1,6 +1,6 @@ -|script|shear|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 23) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; @@ -42,7 +42,7 @@ OnAttack: OnInit: set .school, SKILL_MAGIC_NATURE; set .invocation$, chr(MAGIC_SYMBOL) + "chipchip"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 0; end; diff --git a/world/map/npc/magic/level2-summon-fluffies.txt b/world/map/npc/magic/level2-summon-fluffies.txt index 9590b468..70e5121c 100644 --- a/world/map/npc/magic/level2-summon-fluffies.txt +++ b/world/map/npc/magic/level2-summon-fluffies.txt @@ -3,7 +3,7 @@ end; OnCast: - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 39) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; @@ -46,7 +46,7 @@ S_SummonAll: OnInit: set .school, SKILL_MAGIC_ASTRAL; set .invocation$, chr(MAGIC_SYMBOL) + "kalakarenk"; // used in npcs that refer to this spell - callfunc "magic_register2"; + void call("magic_register", "OnCast"); set .level, 2; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level2-summon-mouboo.txt b/world/map/npc/magic/level2-summon-mouboo.txt index 6b82b8c9..f11f6608 100644 --- a/world/map/npc/magic/level2-summon-mouboo.txt +++ b/world/map/npc/magic/level2-summon-mouboo.txt @@ -3,7 +3,7 @@ end; OnCast: - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 35) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; @@ -46,7 +46,7 @@ S_SummonAll: OnInit: set .school, SKILL_MAGIC_ASTRAL; set .invocation$, chr(MAGIC_SYMBOL) + "kalboo"; // used in npcs that refer to this spell - callfunc "magic_register2"; + void call("magic_register", "OnCast"); set .level, 2; set .exp_gain, 2; end; diff --git a/world/map/npc/magic/level2-summon-pinkie.txt b/world/map/npc/magic/level2-summon-pinkie.txt index 2c8d235e..4e7ebf1a 100644 --- a/world/map/npc/magic/level2-summon-pinkie.txt +++ b/world/map/npc/magic/level2-summon-pinkie.txt @@ -3,7 +3,7 @@ end; OnCast: - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 35) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; @@ -46,7 +46,7 @@ S_SummonAll: OnInit: set .school, SKILL_MAGIC_ASTRAL; set .invocation$, chr(MAGIC_SYMBOL) + "kalgina"; // used in npcs that refer to this spell - callfunc "magic_register2"; + void call("magic_register", "OnCast"); set .level, 2; set .exp_gain, 2; end; diff --git a/world/map/npc/magic/level2-summon-snakes.txt b/world/map/npc/magic/level2-summon-snakes.txt index 2bce0f96..4998fded 100644 --- a/world/map/npc/magic/level2-summon-snakes.txt +++ b/world/map/npc/magic/level2-summon-snakes.txt @@ -3,7 +3,7 @@ end; OnCast: - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 40) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; @@ -47,7 +47,7 @@ S_SummonAll: OnInit: set .school, SKILL_MAGIC_DARK; set .invocation$, chr(MAGIC_SYMBOL) + "halhiss"; // used in npcs that refer to this spell - callfunc "magic_register2"; + void call("magic_register", "OnCast"); set .level, 2; set .exp_gain, 3; end; diff --git a/world/map/npc/magic/level2-summon-spiky-mushroom.txt b/world/map/npc/magic/level2-summon-spiky-mushroom.txt index 182bbda5..59cc295d 100644 --- a/world/map/npc/magic/level2-summon-spiky-mushroom.txt +++ b/world/map/npc/magic/level2-summon-spiky-mushroom.txt @@ -3,7 +3,7 @@ end; OnCast: - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 33) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; @@ -46,7 +46,7 @@ S_SummonAll: OnInit: set .school, SKILL_MAGIC_ASTRAL; set .invocation$, chr(MAGIC_SYMBOL) + "kalrenk"; // used in npcs that refer to this spell - callfunc "magic_register2"; + void call("magic_register", "OnCast"); set .level, 2; set .exp_gain, 1; end; diff --git a/world/map/npc/magic/level2-summon-wickedmushroom.txt b/world/map/npc/magic/level2-summon-wickedmushroom.txt index bceef8b6..bd095144 100644 --- a/world/map/npc/magic/level2-summon-wickedmushroom.txt +++ b/world/map/npc/magic/level2-summon-wickedmushroom.txt @@ -3,7 +3,7 @@ end; OnCast: - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 35) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; @@ -47,7 +47,7 @@ S_SummonAll: OnInit: set .school, SKILL_MAGIC_DARK; set .invocation$, chr(MAGIC_SYMBOL) + "helorp"; // used in npcs that refer to this spell - callfunc "magic_register2"; + void call("magic_register", "OnCast"); set .level, 2; set .exp_gain, 3; end; diff --git a/world/map/npc/magic/level2-toxic-dart.txt b/world/map/npc/magic/level2-toxic-dart.txt index 91522a58..9674b64f 100644 --- a/world/map/npc/magic/level2-toxic-dart.txt +++ b/world/map/npc/magic/level2-toxic-dart.txt @@ -1,6 +1,6 @@ -|script|toxic-dart|32767 { - callfunc "magic_checks"; if(@failed) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 15) end; set .@level, getskilllv(.school); if (.@level < .level) end; @@ -20,8 +20,7 @@ OnAttack: misceffect FX_MAGIC_DARKRED, strcharinfo(0); if (target(BL_ID, @target_id, 50) != 50) end; // 0x20 | 0x02 | 0x10 - setarray @edmg[0], @damage, @dmg_bonus, ELT_NEUTRAL, ELT_POISON, FX_FIRE_BURST; - callfunc "elt_damage"; + void call("elt_damage", @damage, @dmg_bonus, ELT_NEUTRAL, ELT_POISON, FX_FIRE_BURST); if(@target_id != BL_ID && isloggedin(@target_id)) // this is a dirty trick to check if the target is a player sc_start sc_poison, 5000+(@spellpower*1200), max(15,@spellpower/15)+5, @target_id; end; @@ -29,7 +28,7 @@ OnAttack: OnInit: set .school, SKILL_MAGIC_DARK; set .invocation$, chr(MAGIC_SYMBOL) + "phlex"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 2; set .exp_gain, 3; end; diff --git a/world/map/npc/magic/level3-necromancy.txt b/world/map/npc/magic/level3-necromancy.txt index bd1f611c..66643d39 100644 --- a/world/map/npc/magic/level3-necromancy.txt +++ b/world/map/npc/magic/level3-necromancy.txt @@ -2,7 +2,7 @@ // author: gumi -|script|necromancy|32767 { - callfunc "magic_checks"; if(@failed) end; + if(call("magic_checks")) end; if (Sp < 50) end; if (getskilllv(.school) < .level) end; if (getskilllv(SKILL_MAGIC) < .level) end; @@ -47,7 +47,7 @@ L_Clean: OnInit: set .school, SKILL_MAGIC_DARK; set .invocation$, chr(MAGIC_SYMBOL) + "nevela"; // used in npcs that refer to this spell - callfunc "magic_register"; + void call("magic_register"); set .level, 3; set .exp_gain, 1; end; -- cgit v1.2.3-70-g09d2 From 502bb1adfbe060d81b8bbcd6d41153170f43031c Mon Sep 17 00:00:00 2001 From: wushin Date: Tue, 8 Mar 2016 18:27:49 -0600 Subject: Add heal_gain_xp --- world/map/npc/magic/_procedures.txt | 28 ++++++++++++++++++++++++++++ world/map/npc/magic/level1-lesser-heal.txt | 20 ++++++++++++++------ world/map/npc/magic/level2-lay-on-hands.txt | 12 +++++++----- 3 files changed, 49 insertions(+), 11 deletions(-) (limited to 'world') diff --git a/world/map/npc/magic/_procedures.txt b/world/map/npc/magic/_procedures.txt index b2a734c2..3fe0ed34 100644 --- a/world/map/npc/magic/_procedures.txt +++ b/world/map/npc/magic/_procedures.txt @@ -126,3 +126,31 @@ function|script|adjust_spellpower L_Return: return; } + +function|script|gain_heal_xp +{ + set @last_heal_xp, ((SCRIPT_XP & SCRIPT_HEALSPELL_MASK) >> SCRIPT_HEALSPELL_SHIFT); + if ((@target_id != BL_ID) && ((.@heal_value / .heal_xp_value_divisor) > (((10 + @last_heal_xp) + rand(@last_heal_xp + 1)) + rand(@last_heal_xp + 1)))) + goto L_Block; + goto L_Return; + +L_Block: + set @heal_xp, (@last_heal_xp + @mexp); + if (@heal_xp > SCRIPT_HEALSPELL_MASK) + set @heal_xp, SCRIPT_HEALSPELL_MASK; + set XMASTIME, (XMASTIME & ~(NIBBLE_0_MASK) | (@xmas_state << NIBBLE_0_SHIFT)); + set SCRIPT_XP, (SCRIPT_XP & ~(SCRIPT_HEALSPELL_MASK) | (@heal_xp << SCRIPT_HEALSPELL_SHIFT)); + goto L_Gain_Xp; + +L_Gain_Xp: + set @target_heal_xp, (get(MaxHp, @target_id) - get(HEALXP, @target_id)); + set @heal_exp, .@heal_value; + if (@target_heal_xp < .@heal_value) + set @heal_exp, @target_heal_xp; + getexp (.base_exp_factor * @heal_exp), 0; + set HEALXP, (get(HEALXP, @target_id) + @heal_exp), @target_id; + goto L_Return; + +L_Return: + return; +} diff --git a/world/map/npc/magic/level1-lesser-heal.txt b/world/map/npc/magic/level1-lesser-heal.txt index 6b728e81..22aec370 100644 --- a/world/map/npc/magic/level1-lesser-heal.txt +++ b/world/map/npc/magic/level1-lesser-heal.txt @@ -15,16 +15,23 @@ callfunc "adjust_spellpower"; set Sp, Sp - 6; misceffect FX_MAGIC_WHITE, strcharinfo(0); - if (@target_id != BL_ID) misceffect FX_MAGIC_WHITE, @target_id; - // TODO gain_heal_exp - // TODO magic_exp + set .@heal_value, (get(MaxHp, @target_id) - get(Hp, @target_id)); + set @mexp, .exp_gain; + if (.@heal_value < 200) + set .@heal_value, 200; if (@args$ == "Mouboo" || @args$ == "mouboo") goto L_Mouboo; + if (@target_id != BL_ID) goto L_NotMe; + goto L_Continue; - if (getskilllv(SKILL_MAGIC_DARK) >= 1) sc_start SC_HALT_REGENERATE, 2000, 0; +L_NotMe: + misceffect FX_MAGIC_WHITE, @target_id; + callfunc "gain_heal_xp"; + goto L_Continue; - set @heal_amount, 200, @target_id; +L_Continue: + if (getskilllv(SKILL_MAGIC_DARK) >= 1) sc_start SC_HALT_REGENERATE, 2000, 0; if (attachrid(@target_id) != 1) end; // XXX: to avoid the ugly attachrid method we would need some kind of `run_as` builtin - if (!(isdead())) heal @heal_amount, 0, 1; + if (!(isdead())) heal .@heal_value, 1, 1; end; L_Mouboo: @@ -37,5 +44,6 @@ OnInit: void call("magic_register"); set .level, 1; set .exp_gain, 1; + set .heal_xp_value_divisor, 2; end; } diff --git a/world/map/npc/magic/level2-lay-on-hands.txt b/world/map/npc/magic/level2-lay-on-hands.txt index 7d006ea9..8fb7f6ce 100644 --- a/world/map/npc/magic/level2-lay-on-hands.txt +++ b/world/map/npc/magic/level2-lay-on-hands.txt @@ -24,13 +24,13 @@ L_Pay: set .@fraction, max(80, 200 - (Vit + (@spellpower/10))); // pay at least 40% set .@payment, (.@needed * .@fraction) / 200; set .@available, Hp - (MaxHp / 20); - set .@power, if_then_else(.@payment < .@available, .@needed+1-1, (.@available * 200) / .@fraction); // FIXME / XXX why the f do I need to do +1-1 ? + set .@heal_value, if_then_else(.@payment < .@available, .@needed+1-1, (.@available * 200) / .@fraction); // FIXME / XXX why the f do I need to do +1-1 ? if (.@payment > .@available) set .@payment, .@available; - set @inma_power, .@power, @target_id; + set @inma_power, .@heal_value, @target_id; - set @mexp, min(.exp_gain, .@payment/100); // TODO pass this to gain_heal_exp so it can be passed to gain_exp - // TODO gain_heal_exp(.@power, 1, 1, 3) => gain_exp + set @mexp, min(.exp_gain, .@payment/100); + callfunc "gain_heal_xp"; set .@dark, getskilllv(SKILL_MAGIC_DARK) >= 2; // true if dark magic user set .@bad, (MaxHp/20)*(0-1); @@ -52,6 +52,8 @@ OnInit: set .invocation$, chr(MAGIC_SYMBOL) + "inma"; // used in npcs that refer to this spell void call("magic_register"); set .level, 2; - set .exp_gain, 4; // this is MAX possible exp + set .exp_gain, 1; // this is MAX possible exp + set .heal_xp_value_divisor, 1; + set .base_exp_factor, 3; end; } -- cgit v1.2.3-70-g09d2 From 4e50e4f9a271bbbbf71551308851718d52242a90 Mon Sep 17 00:00:00 2001 From: wushin Date: Tue, 8 Mar 2016 18:37:54 -0600 Subject: Add missing magic_exp --- world/map/npc/magic/level1-experience.txt | 2 -- world/map/npc/magic/level1-lesser-heal.txt | 1 + world/map/npc/magic/level2-lay-on-hands.txt | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) (limited to 'world') diff --git a/world/map/npc/magic/level1-experience.txt b/world/map/npc/magic/level1-experience.txt index 0d6b5459..323abc54 100644 --- a/world/map/npc/magic/level1-experience.txt +++ b/world/map/npc/magic/level1-experience.txt @@ -8,7 +8,6 @@ callfunc "adjust_spellpower"; set Sp, Sp - 1; misceffect FX_MAGIC_GENERIC, strcharinfo(0); - callfunc "magic_exp"; // no exp for this spell set @ratio, ((@last_exp*10) - rand(.MAX_MAGIC_EXP[@level]/30))/.MAX_MAGIC_EXP[@level]; set @mes$, "You feel completely overwhelmed by your magic."; @@ -27,7 +26,6 @@ if(@ratio >= 45 && @level < MAX_MAGIC_LEVEL) set @mes$, @mes$ + " Surely the Mana Seed will more than readily offer more magic for such a proficient user."; if(@level >= 5) set @mes$, "You are as proficient at magic as you can possibly be."; // this is the maximum magic level message strcharinfo(0), "Magic : ##3##B"+@mes$; - // TODO put magic_exp somewhere end; OnInit: diff --git a/world/map/npc/magic/level1-lesser-heal.txt b/world/map/npc/magic/level1-lesser-heal.txt index 22aec370..85f2f8a8 100644 --- a/world/map/npc/magic/level1-lesser-heal.txt +++ b/world/map/npc/magic/level1-lesser-heal.txt @@ -17,6 +17,7 @@ misceffect FX_MAGIC_WHITE, strcharinfo(0); set .@heal_value, (get(MaxHp, @target_id) - get(Hp, @target_id)); set @mexp, .exp_gain; + callfunc "magic_exp"; if (.@heal_value < 200) set .@heal_value, 200; if (@args$ == "Mouboo" || @args$ == "mouboo") goto L_Mouboo; diff --git a/world/map/npc/magic/level2-lay-on-hands.txt b/world/map/npc/magic/level2-lay-on-hands.txt index 8fb7f6ce..ab5b2616 100644 --- a/world/map/npc/magic/level2-lay-on-hands.txt +++ b/world/map/npc/magic/level2-lay-on-hands.txt @@ -31,6 +31,7 @@ L_Pay: set @mexp, min(.exp_gain, .@payment/100); callfunc "gain_heal_xp"; + callfunc "magic_exp"; set .@dark, getskilllv(SKILL_MAGIC_DARK) >= 2; // true if dark magic user set .@bad, (MaxHp/20)*(0-1); -- cgit v1.2.3-70-g09d2 From 778cd71d3933ac6172b09654fdf2b4b317d18398 Mon Sep 17 00:00:00 2001 From: wushin Date: Wed, 9 Mar 2016 13:28:09 -0600 Subject: Fix Healing --- world/map/db/params.txt | 1 + world/map/npc/magic/_procedures.txt | 9 +++------ world/map/npc/magic/level1-lesser-heal.txt | 6 +++--- 3 files changed, 7 insertions(+), 9 deletions(-) (limited to 'world') diff --git a/world/map/db/params.txt b/world/map/db/params.txt index 4d905522..b10a4dce 100644 --- a/world/map/db/params.txt +++ b/world/map/db/params.txt @@ -11,6 +11,7 @@ MaxHp 6 1 Sp 7 1 MaxSp 8 1 STATUSPOINT 9 1 +HEALXP 10 1 BaseLevel 11 1 SKILLPOINT 12 1 Str 13 1 diff --git a/world/map/npc/magic/_procedures.txt b/world/map/npc/magic/_procedures.txt index 3fe0ed34..5f1ea865 100644 --- a/world/map/npc/magic/_procedures.txt +++ b/world/map/npc/magic/_procedures.txt @@ -138,17 +138,14 @@ L_Block: set @heal_xp, (@last_heal_xp + @mexp); if (@heal_xp > SCRIPT_HEALSPELL_MASK) set @heal_xp, SCRIPT_HEALSPELL_MASK; - set XMASTIME, (XMASTIME & ~(NIBBLE_0_MASK) | (@xmas_state << NIBBLE_0_SHIFT)); set SCRIPT_XP, (SCRIPT_XP & ~(SCRIPT_HEALSPELL_MASK) | (@heal_xp << SCRIPT_HEALSPELL_SHIFT)); goto L_Gain_Xp; L_Gain_Xp: - set @target_heal_xp, (get(MaxHp, @target_id) - get(HEALXP, @target_id)); - set @heal_exp, .@heal_value; - if (@target_heal_xp < .@heal_value) - set @heal_exp, @target_heal_xp; + set @heal_exp, .@heal_value; + if (.@heal_value > get(HEALXP, @target_id)) + set @heal_exp, get(HEALXP, @target_id); getexp (.base_exp_factor * @heal_exp), 0; - set HEALXP, (get(HEALXP, @target_id) + @heal_exp), @target_id; goto L_Return; L_Return: diff --git a/world/map/npc/magic/level1-lesser-heal.txt b/world/map/npc/magic/level1-lesser-heal.txt index 85f2f8a8..c4c74dd7 100644 --- a/world/map/npc/magic/level1-lesser-heal.txt +++ b/world/map/npc/magic/level1-lesser-heal.txt @@ -15,10 +15,10 @@ callfunc "adjust_spellpower"; set Sp, Sp - 6; misceffect FX_MAGIC_WHITE, strcharinfo(0); - set .@heal_value, (get(MaxHp, @target_id) - get(Hp, @target_id)); + set .@heal_value, get(HEALXP, @target_id); set @mexp, .exp_gain; callfunc "magic_exp"; - if (.@heal_value < 200) + if (.@heal_value > 200) set .@heal_value, 200; if (@args$ == "Mouboo" || @args$ == "mouboo") goto L_Mouboo; if (@target_id != BL_ID) goto L_NotMe; @@ -32,7 +32,7 @@ L_NotMe: L_Continue: if (getskilllv(SKILL_MAGIC_DARK) >= 1) sc_start SC_HALT_REGENERATE, 2000, 0; if (attachrid(@target_id) != 1) end; // XXX: to avoid the ugly attachrid method we would need some kind of `run_as` builtin - if (!(isdead())) heal .@heal_value, 1, 1; + if (!(isdead())) heal 200, 1, 1; end; L_Mouboo: -- cgit v1.2.3-70-g09d2 From aee89bdbe04ad0aed06622052244bf6b7d3c1d23 Mon Sep 17 00:00:00 2001 From: wushin Date: Wed, 9 Mar 2016 21:10:45 -0600 Subject: Fix invocations --- world/map/npc/001-1/ched.txt | 4 ++-- world/map/npc/001-2/pauline.txt | 10 +++++----- world/map/npc/002-1/elanore.txt | 14 ++++++------- world/map/npc/006-1/spirit.txt | 4 ++-- world/map/npc/008-1/hinnak.txt | 2 +- world/map/npc/009-2/misc.txt | 2 +- world/map/npc/009-2/wyara.txt | 6 +++--- world/map/npc/009-3/sword.txt | 2 +- world/map/npc/011-1/auldsbel.txt | 20 +++++++++---------- world/map/npc/012-3/mana-seed.txt | 2 +- world/map/npc/013-1/sagatha.txt | 14 ++++++------- world/map/npc/013-2/wizard.txt | 2 +- world/map/npc/015-1/sword.txt | 6 +++--- world/map/npc/017-4/waric.txt | 12 +++++------ world/map/npc/doc/magic | 23 ++++++++++++++++++++++ world/map/npc/magic/level2-barrier.txt | 2 +- world/map/npc/magic/level2-summon-fluffies.txt | 2 +- world/map/npc/magic/level2-summon-mouboo.txt | 2 +- world/map/npc/magic/level2-summon-pinkie.txt | 2 +- .../map/npc/magic/level2-summon-spiky-mushroom.txt | 2 +- .../map/npc/magic/level2-summon-wickedmushroom.txt | 2 +- 21 files changed, 79 insertions(+), 56 deletions(-) create mode 100644 world/map/npc/doc/magic (limited to 'world') diff --git a/world/map/npc/001-1/ched.txt b/world/map/npc/001-1/ched.txt index dee6cb77..eb82aba1 100644 --- a/world/map/npc/001-1/ched.txt +++ b/world/map/npc/001-1/ched.txt @@ -15,9 +15,9 @@ L_Next: mes "[Ched]"; mes "\"Well, I don't remember what it's called... I took it out of 'Timbleweed's Advanced Transmutations,' but it seems awfully hard to cast.\""; next; - mes "\"If you want to try it, the invocation is '" + ("merge-concentration-potions") + ".' I just can't get the hang of it though.\""; + mes "\"If you want to try it, the invocation is '" + get(.invocation$, "merge-concentration-potions") + ".' I just can't get the hang of it though.\""; next; - mes "\"Maybe I should go back to practicing '" + ("detect-magic") + "' until I can cast it properly.\" %%6"; + mes "\"Maybe I should go back to practicing '" + get(.invocation$, "detect-magic") + "' until I can cast it properly.\" %%6"; goto L_Done; L_Done: diff --git a/world/map/npc/001-2/pauline.txt b/world/map/npc/001-2/pauline.txt index 93608a10..e69f8206 100644 --- a/world/map/npc/001-2/pauline.txt +++ b/world/map/npc/001-2/pauline.txt @@ -92,7 +92,7 @@ L_Spells: L_Next1: mes "[Pauline]"; mes "\"Well I could only read the invocations. So I don't exactly know what kind of ingredients you are going to need.\""; - mes "\"The first one for the mouboo was " + ("summon-mouboo") + " and the one for the pinkie was " + ("summon-pinkie") +".\""; + mes "\"The first one for the mouboo was " + get(.invocation$, "summon-mouboo") + " and the one for the pinkie was " + get(.invocation$, "summon-pinkie") +".\""; next; mes "\"For the pinkie spell my suggestion is to try similar ingredients to the other Astral spells. Try a root and some item typical for pinkies.\""; mes "\"The mouboo spell might be more complicated. From what I could translate, one of the spell components is crafted by magic.\""; @@ -157,7 +157,7 @@ L_Next4: goto L_DidNotWorkMouboo; L_DidNotWorkMouboo: - mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + ("summon-mouboo") + "."; + mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + get(.invocation$, "summon-mouboo") + "."; mes "Nothing happens."; mes "[Pauline]"; mes "\"It seems you did not tell me the correct ingredients. Come back when you find the correct ones.\""; @@ -174,7 +174,7 @@ L_Pass2Mouboo: goto L_DidNotWorkMouboo; L_TrySpellMouboo: - mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + ("summon-mouboo") + "."; + mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + get(.invocation$, "summon-mouboo") + "."; monster "001-1", 55,68, "Good", 1028, 1; mes "[Pauline]"; mes "\"It worked!\""; @@ -220,7 +220,7 @@ L_Next5: goto L_DidNotWorkPinkie; L_DidNotWorkPinkie: - mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + ("summon-pinkie") + "."; + mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + get(.invocation$, "summon-pinkie") + "."; mes "Nothing happens."; mes "[Pauline]"; mes "\"It seems you did not tell me the correct ingredients. Come back when you find the correct ones.\""; @@ -237,7 +237,7 @@ L_Pass2Pinkie: goto L_DidNotWorkPinkie; L_TrySpellPinkie: - mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + ("summon-pinkie") + "."; + mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + get(.invocation$, "summon-pinkie") + "."; monster "001-1", 54,68, "Good", 1018, 1; mes "[Pauline]"; mes "\"It worked!\""; diff --git a/world/map/npc/002-1/elanore.txt b/world/map/npc/002-1/elanore.txt index fbc8f3c0..e936447e 100644 --- a/world/map/npc/002-1/elanore.txt +++ b/world/map/npc/002-1/elanore.txt @@ -233,7 +233,7 @@ L_MakeSelf: goto L_MakeSelf_yes; L_MakeSelf_yes: - mes "\"Oh, but of course! You are powerful enough to make your own lifestones, using the enchantment '" + ("enchant-lifestone") + "'. This will consume a bug leg or a maggot slime or one of each of the four healing herbs, though.\""; + mes "\"Oh, but of course! You are powerful enough to make your own lifestones, using the enchantment '" + get(.invocation$, "enchant-lifestone") + "'. This will consume a bug leg or a maggot slime or one of each of the four healing herbs, though.\""; goto L_Close; L_MakeSelf_no: @@ -265,15 +265,15 @@ L_T_Initial: next; mes "[Elanore the Healer]"; mes "\"To heal someone, first locate the injury. As a beginner, you have to touch the wound; with practice, it will be enough to think about it. Hold the lifestone in one hand, touching the wound with the other.\""; - mes "\"Then say, '" + ("lesser-heal") + "', followed by the name of the one you wish to heal.\""; + mes "\"Then say, '" + get(.invocation$, "lesser-heal") + "', followed by the name of the one you wish to heal.\""; next; mes "[Elanore the Healer]"; mes "\"You might want to write that down, actually. In fact, you might want to make sure to keep notes of all spells you hear, for you never know if you will hear them again!\""; - mes "\"The invocation was '" + ("lesser-heal") + "'.\""; + mes "\"The invocation was '" + get(.invocation$, "lesser-heal") + "'.\""; next; mes "[Elanore the Healer]"; mes "\"This will only cure cuts and bruises, though, and it will take some time to take effect. It will be useless to mend broken bones or more severe injuries!\""; - mes "\"To heal yourself, it's enough to just say '" + ("lesser-heal") + "' by itself.\""; + mes "\"To heal yourself, it's enough to just say '" + get(.invocation$, "lesser-heal") + "' by itself.\""; next; mes "[Elanore the Healer]"; mes "\"Let me give you a lifestone to get started with.\""; @@ -344,7 +344,7 @@ L_T_ChkAdvToLOH: mes "\"I will now teach you how to heal by laying on your hands. The technique is similar to the spell I taught you at the beginning, but this time you transfer your own health instead of drawing health from a lifestone.\""; next; mes "[Elanore the Healer]"; - mes "\"First, lay your hand on the person you wish to heal. You needn't touch the injury itself, though you have to touch the skin until you are a little more experienced. Then, medidate on the word '" + ("lay-on-hands") + "'\""; + mes "\"First, lay your hand on the person you wish to heal. You needn't touch the injury itself, though you have to touch the skin until you are a little more experienced. Then, medidate on the word '" + get(.invocation$, "lay-on-hands") + "'\""; next; mes "[Elanore the Healer]"; mes "\"This will let your own life force flow into the person you are healing. If you are badly injured yourself, you will not be able to do this.\""; @@ -500,11 +500,11 @@ L_T_CurePosion: next; mes "[Elanore the Healer]"; mes "\"If you would like to cure someone who is poisoned, first rub a Gamboge leaf between your hands. Your hands must be covered in Gamboge liquid for this to work.\""; - mes "\"Speak the invocation, `" + ("cure-poison") + "'.\""; + mes "\"Speak the invocation, `" + get(.invocation$, "cure-poison") + "'.\""; mes "\"Next, you either touch the poisoned person with your hands, or speak their name. You have to be close for this to work, though.\""; next; mes "[Elanore the Healer]"; - mes "\"Once again, the invocation is `" + ("cure-poison") + "'.\""; + mes "\"Once again, the invocation is `" + get(.invocation$, "cure-poison") + "'.\""; mes "\"Come back again soon; there is another spell I would like to teach you.\""; next; set @Q_status, @STATUS_LEARNED_CURE_POISON; diff --git a/world/map/npc/006-1/spirit.txt b/world/map/npc/006-1/spirit.txt index 9a839a81..68e1bbe7 100644 --- a/world/map/npc/006-1/spirit.txt +++ b/world/map/npc/006-1/spirit.txt @@ -178,7 +178,7 @@ L_Next5: mes "\"Kekeke... excellent! Yes, here goes your first spell, the flying backpack! If you are overloaded, it will take the load off your shoulders.\""; next; mes "[Earth Spirit]"; - mes "\"Take a cocoon, living or dead, and suffuse it in magic. Whisper '" + ("flying-backpack") + "', and feel it float!\""; + mes "\"Take a cocoon, living or dead, and suffuse it in magic. Whisper '" + get(.invocation$, "flying-backpack") + "', and feel it float!\""; goto L_Q_magic_finish; L_Q_magic_3: @@ -196,7 +196,7 @@ L_Next6: mes "\"Yeees, good! This one is a protection spell, making your skin harder. You need a hard spike for it, though. Hold that spike in your hands, and focus on it.\""; next; mes "[Earth Spirit]"; - mes "\"Next, say '" + ("protect") + "', and feel your skin grow rigid! Very useful against stings and stabs and pokes and pricks and that sort of stuff.\""; + mes "\"Next, say '" + get(.invocation$, "protect") + "', and feel your skin grow rigid! Very useful against stings and stabs and pokes and pricks and that sort of stuff.\""; goto L_Q_magic_finish; L_Q_magic_4: diff --git a/world/map/npc/008-1/hinnak.txt b/world/map/npc/008-1/hinnak.txt index d3828d74..d16460c3 100644 --- a/world/map/npc/008-1/hinnak.txt +++ b/world/map/npc/008-1/hinnak.txt @@ -217,7 +217,7 @@ L_Sagatha_scary: L_Sagatha_word: mes "[Farmer Hinnak]"; - mes "\"Oh, I can't be sure... but something like '" + ("summon-maggots") + "', I think.\""; + mes "\"Oh, I can't be sure... but something like '" + get(.invocation$, "summon-maggots") + "', I think.\""; goto L_Close; L_NoBeer: diff --git a/world/map/npc/009-2/misc.txt b/world/map/npc/009-2/misc.txt index 139033ec..1c1d3897 100644 --- a/world/map/npc/009-2/misc.txt +++ b/world/map/npc/009-2/misc.txt @@ -39,7 +39,7 @@ L_magic: mes "The page after that is once again hastily written, with many crossed out words and sections and side remarks such as 'it almost worked' or 'it worked fine yesterday.'"; next; mes "[Bookshelf]"; - mes "The last word on that page is '" + ("make-iron-powder") + ",' and it's underlined twice with a comment next to it saying 'finally got it right.'"; + mes "The last word on that page is '" + get(.invocation$, "make-iron-powder") + ",' and it's underlined twice with a comment next to it saying 'finally got it right.'"; next; mes "[Bookshelf]"; mes "Unfortunately, you can't make out what the transmutation is for or even whether it requires any materials..."; diff --git a/world/map/npc/009-2/wyara.txt b/world/map/npc/009-2/wyara.txt index d0bffbea..246d458a 100644 --- a/world/map/npc/009-2/wyara.txt +++ b/world/map/npc/009-2/wyara.txt @@ -242,7 +242,7 @@ L_M_spell: L_M_spell3: mes "[Wyara the Witch]"; - mes "\"Now that you know the basics of nature magic, here is one of my favourites: '" + ("rain") + "' will summon rain, whereever you are standing. It will consume a bottle of water, though.\""; + mes "\"Now that you know the basics of nature magic, here is one of my favourites: '" + get(.invocation$, "rain") + "' will summon rain, whereever you are standing. It will consume a bottle of water, though.\""; if (getskilllv(SKILL_MAGIC) < 2) mes "\"You are not powerful enough to use it yet, though; you will first have to absorb more magic from the mana seed.\""; next; @@ -250,14 +250,14 @@ L_M_spell3: L_M_spell2: mes "[Wyara the Witch]"; - mes "\"Here is another useful one: '" + ("detect-players") + "'. It will tell you the names of everyone nearby, but beware that there are ways to protect against it.\""; + mes "\"Here is another useful one: '" + get(.invocation$, "detect-players") + "'. It will tell you the names of everyone nearby, but beware that there are ways to protect against it.\""; if (getskilllv(SKILL_MAGIC) < 2) mes "\"Hmm. You aren't powerful enough for this one either yet, I think.\""; next; if (!(getpartnerid2())) goto L_M_main; mes "[Wyara the Witch]"; - mes "\"Married partners can find each other even more easily. Use the '" + ("sense-spouse") + "' spell instead.\""; + mes "\"Married partners can find each other even more easily. Use the '" + get(.invocation$, "sense-spouse") + "' spell instead.\""; next; goto L_M_main; diff --git a/world/map/npc/009-3/sword.txt b/world/map/npc/009-3/sword.txt index dbb177bc..1a427731 100644 --- a/world/map/npc/009-3/sword.txt +++ b/world/map/npc/009-3/sword.txt @@ -103,7 +103,7 @@ L_Next1: mes "\"So thou art bound to the path of War, as am I, as is my sister...\""; next; mes "[Magic Sword]"; - mes "\"So be it, fellow warrior. Hear the incantation for the blade spell: '" + ("magic-blade") + "'\""; + mes "\"So be it, fellow warrior. Hear the incantation for the blade spell: '" + get(.invocation$, "magic-blade") + "'\""; mes "\"Hold a knife, sharp or regular, when thou speakest it.\""; set @Q_status, @STATUS_LEARNED_MAGICBLADE; callsub S_update_var; diff --git a/world/map/npc/011-1/auldsbel.txt b/world/map/npc/011-1/auldsbel.txt index 4a57b75b..f4c328ce 100644 --- a/world/map/npc/011-1/auldsbel.txt +++ b/world/map/npc/011-1/auldsbel.txt @@ -236,7 +236,7 @@ L_Sul_t_s: mes "\"Very well, then. You have been quite helpful with my experiments, after all. As you may have noticed, the spell takes a pile of volcanic ashes. Close your hands around it, then whisper the invocation.\""; next; mes "[Auldsbel the Wizard]"; - mes "\"That invocation is '" + ("make-sulphur") + "'.\""; + mes "\"That invocation is '" + get(.invocation$, "make-sulphur") + "'.\""; next; mes "[Auldsbel the Wizard]"; mes "\"You may find that you can transmute the powder more effectively after a while; that is perfectly natural.\""; @@ -332,7 +332,7 @@ L_about_nature: L_about_other_spells: mes "[Auldsbel the Wizard]"; - mes "\"A few spells are not claimed by any particular school of magic. In practice, this means that anyone can cast them if they just have sufficient magical power. The most prominent example is the 'detect magic' spell, '" + ("detect-magic") + "'.\""; + mes "\"A few spells are not claimed by any particular school of magic. In practice, this means that anyone can cast them if they just have sufficient magical power. The most prominent example is the 'detect magic' spell, '" + get(.invocation$, "detect-magic") + "'.\""; next; goto L_a_s_minimenu; @@ -984,10 +984,10 @@ L_learn_spell: mes "\"This spell is a simple transmutation invocation. All it takes is a clean wooden log. Hold it in your hand, focus your powers, and say the magic invocation.\""; next; mes "[Auldsbel the Wizard]"; - mes "\"You can turn the log into a wooden figurine by imagining the creature whose shape you want in your head and saying `" + ("transmute-wood-to-figurine") + ",' followed by the last syllable of the name of the creature you want to shape it into.\""; + mes "\"You can turn the log into a wooden figurine by imagining the creature whose shape you want in your head and saying `" + get(.invocation$, "spell-transmute-wood") + ",' followed by the last syllable of the name of the creature you want to shape it into.\""; next; mes "[Auldsbel the Wizard]"; - mes "\"So `" + ("transmute-wood-to-figurine") + " lurk' for a Skytlurk figurine, for example. If you know what a Skytlurk is, I mean, otherwise you will have a hard time imagining it. You may want to try some others instead, though.\""; + mes "\"So `" + get(.invocation$, "spell-transmute-wood") + " lurk' for a Skytlurk figurine, for example. If you know what a Skytlurk is, I mean, otherwise you will have a hard time imagining it. You may want to try some others instead, though.\""; next; mes "[Auldsbel the Wizard]"; mes "\"Oh... and it has to be the old Tritan name. Most creatures nowadays have very different names, but some old Tritan names have survived. Just try some, until you find one that fits.\""; @@ -1001,7 +1001,7 @@ L_learn_spell: L_repeat_spell: mes "[Auldsbel the Wizard]"; - mes "\"The invocation is `" + ("transmute-wood-to-figurine") + ",' followed by the last syllable of the name of the creature you want to shape the log into. So `" + ("transmute-wood-to-figurine") + " lurk' for a Skytlurk figurine.\""; + mes "\"The invocation is `" + get(.invocation$, "spell-transmute-wood") + ",' followed by the last syllable of the name of the creature you want to shape the log into. So `" + get(.invocation$, "spell-transmute-wood") + " lurk' for a Skytlurk figurine.\""; next; mes "[Auldsbel the Wizard]"; mes "\"But keep two things in mind: First, you must KNOW what the creature looks like – so a Skytlurk probably won't work – and second, you must use the old Tritan name of it. `Fluffy' and `Scorpion' are modern names, so those won't work, you should try some others.\""; @@ -1092,7 +1092,7 @@ L_Next9: mes "[1000 experience points]"; next; mes "[Auldsbel the Wizard]"; - mes "\"Now, listen carefully: to make a short tank top out of three pieces of cloth, you must use the invocation '" + ("make-short-tanktop") + "'.\""; + mes "\"Now, listen carefully: to make a short tank top out of three pieces of cloth, you must use the invocation '" + get(.invocation$, "make-short-tanktop") + "'.\""; next; mes "[Auldsbel the Wizard]"; mes "\"But be careful; transmutations can go wrong, and that can injure you. When you have more overall spellcasting practice, come back to me.\""; @@ -1131,7 +1131,7 @@ L_Next10: mes "[1000 experience points]"; next; mes "[Auldsbel the Wizard]"; - mes "\"The next spell I have will make a normal tank top out of four pieces of cloth. The invocation is '" + ("make-tanktop") + "', make sure to write this down.\""; + mes "\"The next spell I have will make a normal tank top out of four pieces of cloth. The invocation is '" + get(.invocation$, "make-tanktop") + "', make sure to write this down.\""; next; goto L_main_menu; @@ -1161,7 +1161,7 @@ L_Next11: mes "[1000 experience points]"; next; mes "[Auldsbel the Wizard]"; - mes "\"To make a shirt, use the invocation '" + ("make-shirt") + "'. This will require five pieces of cloth.\""; + mes "\"To make a shirt, use the invocation '" + get(.invocation$, "make-shirt") + "'. This will require five pieces of cloth.\""; next; goto L_main_menu; @@ -1191,7 +1191,7 @@ L_Next12: mes "[1000 experience points]"; next; mes "[Auldsbel the Wizard]"; - mes "\"This spell makes arrows out of a single wooden log. Its invocation is '" + ("make-arrows") + "'.\""; + mes "\"This spell makes arrows out of a single wooden log. Its invocation is '" + get(.invocation$, "make-arrows") + "'.\""; next; goto L_main_menu; @@ -1205,7 +1205,7 @@ L_stu_3: L_stu_3_repeat: mes "[Auldsbel the Wizard]"; - mes "\"This one has the invocation `" + ("make-concentration-potion") + "'. Put two cobalt leaves and two pink flower petals into a bottle of water, hold it up, and speak that phrase.\""; + mes "\"This one has the invocation `" + get(.invocation$, "make-concentration-potion") + "'. Put two cobalt leaves and two pink flower petals into a bottle of water, hold it up, and speak that phrase.\""; next; mes "[Auldsbel the Wizard]"; mes "\"It is a tricky spell, but if it works out, you will transform the bottle into a concentration potion.\""; diff --git a/world/map/npc/012-3/mana-seed.txt b/world/map/npc/012-3/mana-seed.txt index 35d6ea52..c75125e4 100644 --- a/world/map/npc/012-3/mana-seed.txt +++ b/world/map/npc/012-3/mana-seed.txt @@ -37,7 +37,7 @@ "You may only be children, but you recognize that it is this man only who can save the world. As the walls rush towards you to crush your small group, you exchange a glance with your twin sister – there is no doubt what you must do...", "The sacred place is surrounded by nothingness; were it not for your magic, you would have no hope of returning. The old and young man stands nearby; he has been waiting for you, for centuries. He has all the time in the world, after all...", "Nothing remains behind. The underground castle is empty now, its chambers plundered, its throne destroyed. Shivering, you climb down the stairs, towards the wailing of the underworld that is waiting beneath...", - "You feel soft, fluffy fur brushing against your skin and are filled with happiness. Somehow, the word `" + ("happy-curse") + "' comes to mind..."; + "You feel soft, fluffy fur brushing against your skin and are filled with happiness. Somehow, the word `" + get(.invocation$, "happy-curse") + "' comes to mind..."; set @max_magic, 2; diff --git a/world/map/npc/013-1/sagatha.txt b/world/map/npc/013-1/sagatha.txt index 84336eef..fe7503a6 100644 --- a/world/map/npc/013-1/sagatha.txt +++ b/world/map/npc/013-1/sagatha.txt @@ -267,7 +267,7 @@ L_teach_N14: mes "\"Some forest creatures sometimes overgrow their fur or hide. That makes them uncomfortable.\""; next; mes "[Sagatha the Witch]"; - mes "\"You can help them with shearing magic. Press your hands together and say '" + ("shear") + "'. Then touch them with your hands, and brush off any excess.\""; + mes "\"You can help them with shearing magic. Press your hands together and say '" + get(.invocation$, "shear") + "'. Then touch them with your hands, and brush off any excess.\""; next; mes "[Sagatha the Witch]"; mes "\"The spell is strong, so you only need to do this once. Be careful not to cut them. Some things they shed are useful. Often they will leave them to you as a thank-you.\""; @@ -280,7 +280,7 @@ L_teach_N10: mes "\"Next, a nature spell. Take a cocoon shell. Hold it in your hand. Feel its lightness.\""; next; mes "[Sagatha the Witch]"; - mes "\"Now whisper '" + ("flying-backpack") + "', and if your backpack was pressing on you you should no longer feel it now.\""; + mes "\"Now whisper '" + get(.invocation$, "flying-backpack") + "', and if your backpack was pressing on you you should no longer feel it now.\""; goto L_practice; L_teach_A10: @@ -290,14 +290,14 @@ L_teach_A10: mes "\"To protect against others' magic, take a small mushroom from a shady place. Mushrooms draw things out of the earth. Rub your mushroom into pieces between your hands.\""; next; mes "[Sagatha the Witch]"; - mes "\"Then say '" + ("barrier") + "' and let the mushroom's power take over.\""; + mes "\"Then say '" + get(.invocation$, "barrier") + "' and let the mushroom's power take over.\""; goto L_practice; L_teach_A11: if (@mexp < 200) goto L_teach_noexp; mes "[Sagatha the Witch]"; - mes "\"If you must fight, call allies. You can call spiky mushrooms out of the ground with a mushroom spike and a root. Hold up the spike and call out to them: '" + ("summon-spiky-mushrooms") + "'. Then press the root to the ground.\""; + mes "\"If you must fight, call allies. You can call spiky mushrooms out of the ground with a mushroom spike and a root. Hold up the spike and call out to them: '" + get(.invocation$, "summon-spiky-mushrooms") + "'. Then press the root to the ground.\""; next; mes "[Sagatha the Witch]"; mes "\"Spiky mushrooms often grow too many spikes, so you can shear the spikes off of some.\""; @@ -308,17 +308,17 @@ L_teach_A12: if (@mexp < 220) goto L_teach_noexp; mes "[Sagatha the Witch]"; - mes "\"You can call fluffies, too. But for them you must call out '" + ("summon-fluffies") + "' instead, with white fluffy fur instead of a spike. And don't forget the root.\""; + mes "\"You can call fluffies, too. But for them you must call out '" + get(.invocation$, "summon-fluffies") + "' instead, with white fluffy fur instead of a spike. And don't forget the root.\""; goto L_practice; L_teach_N11: if (@mexp < 250) goto L_teach_noexp; mes "[Sagatha the Witch]"; - mes "\"You can harden your skin with a hard spike. Hold it in your hands and speak '" + ("protect") + "', then draw its hardness into your skin.\""; + mes "\"You can harden your skin with a hard spike. Hold it in your hands and speak '" + get(.invocation$, "protect") + "', then draw its hardness into your skin.\""; next; mes "[Sagatha the Witch]"; - mes "\"Or call it into someone else's skin, by saying that someone's name right after the '" + ("protect") + "'.\""; + mes "\"Or call it into someone else's skin, by saying that someone's name right after the '" + get(.invocation$, "protect") + "'.\""; goto L_practice; L_teach_noexp: diff --git a/world/map/npc/013-2/wizard.txt b/world/map/npc/013-2/wizard.txt index cf8598b0..32a2a623 100644 --- a/world/map/npc/013-2/wizard.txt +++ b/world/map/npc/013-2/wizard.txt @@ -75,7 +75,7 @@ L_TeachSpell: mes "\"This one may not seem too powerful, but it can be quite handy; it's the 'hide' spell. It will shield you from some forms of detection magic.\""; next; mes "[Old Wizard]"; - mes "\"Put a piece of cotton cloth on your head, and speak out '" + ("hide") + "', loudly and clearly. The protection lasts quite long, but you may have to renew it on occasion.\""; + mes "\"Put a piece of cotton cloth on your head, and speak out '" + get(.invocation$, "spell-hide") + "', loudly and clearly. The protection lasts quite long, but you may have to renew it on occasion.\""; next; mes "[Old Wizard]"; mes "\"You can also cast it on others, of course. Just speak their name after you pronounce the invocation.\""; diff --git a/world/map/npc/015-1/sword.txt b/world/map/npc/015-1/sword.txt index 90c56283..be23e23a 100644 --- a/world/map/npc/015-1/sword.txt +++ b/world/map/npc/015-1/sword.txt @@ -109,7 +109,7 @@ L_Initial_ok: mes "\"Oh, my apologies – that was a little overly dramatic. But I do not get to talk to thy kin anymore all that often.\""; next; mes "[Mystic Sword]"; - mes "\"For the flare dart spell throw a handful of sulphur powder up into the air, and say, '" + ("flare-dart") + "'.\""; + mes "\"For the flare dart spell throw a handful of sulphur powder up into the air, and say, '" + get(.invocation$, "flare-dart") + "'.\""; set @Q_status, @STATUS_LEARNED_FLAREDART; callsub S_update_var; next; @@ -257,7 +257,7 @@ L_Next3: callsub S_update_var; next; mes "[Mystic Sword]"; - mes "\"Speak '" + ("magic-knuckles") + "' and take a glass of beer and drink it, without ever taking it off thy lips. This will harden and enchant thy fists, turning them into powerful weapons.\""; + mes "\"Speak '" + get(.invocation$, "magic-knuckles") + "' and take a glass of beer and drink it, without ever taking it off thy lips. This will harden and enchant thy fists, turning them into powerful weapons.\""; close; L_L2_almost_done: @@ -297,7 +297,7 @@ L_Next4: callsub S_update_var; next; mes "[Mystic Sword]"; - mes "\"This powder thou shalst need to cast the lightning spell. Throw it up into the air and shout '" + ("lightning-strike") + "', and smite thine enemies with lightning.\""; + mes "\"This powder thou shalst need to cast the lightning spell. Throw it up into the air and shout '" + get(.invocation$, "lightning-strike") + "', and smite thine enemies with lightning.\""; next; goto L_Farewell; diff --git a/world/map/npc/017-4/waric.txt b/world/map/npc/017-4/waric.txt index 11f836b6..92674a00 100644 --- a/world/map/npc/017-4/waric.txt +++ b/world/map/npc/017-4/waric.txt @@ -234,7 +234,7 @@ L_Mushroom: mes "\"Now that you are a student of mine, I will teach you some spells.\""; next; mes "\"We will start with an easy one. I will teach you how to summon a wicked mushroom.\""; - mes "\"The spell consumes a Small Mushroom and a Dark Crystal. Shove the Dark Crystal into the Small Mushroom and yell " + ("summon-wickedmushroom") +".\""; + mes "\"The spell consumes a Small Mushroom and a Dark Crystal. Shove the Dark Crystal into the Small Mushroom and yell " + get(.invocation$, "summon-wickedmushroom") +".\""; next; mes "\"A wicked mushroom will appear to fight for you.\""; set OrumQuest, 37; @@ -254,7 +254,7 @@ L_Next4: next; mes "\"You have to use two roots for this spell. First you have to take one root and break off all the root hair. Shape it into a stick, if you will. Then put it on top of the other root and form an arrow-like structure.\""; next; - mes "\"Once this is done you have to throw it in the air and scream " + ("toxic-dart") + " and the two roots will turn into toxic darts, a projectile you can throw.\""; + mes "\"Once this is done you have to throw it in the air and scream " + get(.invocation$, "toxic-dart") + " and the two roots will turn into toxic darts, a projectile you can throw.\""; next; mes "\"If you want to learn more, come back later.\""; set OrumQuest, 38; @@ -312,7 +312,7 @@ L_SnakesSpell: L_Next7: mes "[Waric]"; - mes "\"I said " + ("summon-snakes") + ".\""; + mes "\"I said " + get(.invocation$, "summon-snakes") + ".\""; mes "\"Have fun with those spells and use them to cause hate, anger and death.\""; set OrumQuest, 41; goto L_Close; @@ -341,9 +341,9 @@ L_MoreMagic: L_Next8: mes "[Waric]"; mes "\"Yes, of course.\""; - mes "\"To summon the snakes use " + ("summon-snakes") + ".\""; - mes "\"Say " + ("toxic-dart") + " to make your roots into toxic darts.\""; - mes "\"And the first spell, to summon wicked mushrooms, is " + ("summon-wickedmushroom") + ".\""; + mes "\"To summon the snakes use " + get(.invocation$, "summon-snakes") + ".\""; + mes "\"Say " + get(.invocation$, "toxic-dart") + " to make your roots into toxic darts.\""; + mes "\"And the first spell, to summon wicked mushrooms, is " + get(.invocation$, "summon-wickedmushroom") + ".\""; next; mes "\"Now leave. Spread chaos with the spells I have taught you!\""; goto L_Close; diff --git a/world/map/npc/doc/magic b/world/map/npc/doc/magic new file mode 100644 index 00000000..8a2b84e1 --- /dev/null +++ b/world/map/npc/doc/magic @@ -0,0 +1,23 @@ +Nibble use: +--------------- +== QUEST_MAGIC + N0, N1: Auldsbel + N2: druid tree quest, mouboo quest (shared) + N3: Sagatha unhappiness counter + N4, N5: Sagatha + N6, N7: Swords +== QUEST_MAGIC2 + N0: Evil Earth Spirit + N1: Elanore + N2: Wyara + N3: Elanore subquests (Cure Kadiya) + N4-N7: may be messy at this point + +The various magic scripts pack their status into these variables. +Locally, they use `@Q_status' to maintain the state, and use a function +`S_update_var' to update it. This is all re-using the same code, setting +the `@Q_MASK' and `@Q_SHIFT' variables appropriately. + + There are a few exceptions (such as the Kadiya quest) wherein +a separate helper function sets a dedicated local variable, or some hackery +in Auldsbel wherein we read stati directly, merely to enable certain options. diff --git a/world/map/npc/magic/level2-barrier.txt b/world/map/npc/magic/level2-barrier.txt index 3c7ef29f..d692bee1 100644 --- a/world/map/npc/magic/level2-barrier.txt +++ b/world/map/npc/magic/level2-barrier.txt @@ -1,4 +1,4 @@ --|script|magic-barrier|32767 +-|script|barrier|32767 { if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 15) end; diff --git a/world/map/npc/magic/level2-summon-fluffies.txt b/world/map/npc/magic/level2-summon-fluffies.txt index 70e5121c..77f21fab 100644 --- a/world/map/npc/magic/level2-summon-fluffies.txt +++ b/world/map/npc/magic/level2-summon-fluffies.txt @@ -1,4 +1,4 @@ --|script|fluffies|32767 +-|script|summon-fluffies|32767 { end; diff --git a/world/map/npc/magic/level2-summon-mouboo.txt b/world/map/npc/magic/level2-summon-mouboo.txt index f11f6608..13b51ae6 100644 --- a/world/map/npc/magic/level2-summon-mouboo.txt +++ b/world/map/npc/magic/level2-summon-mouboo.txt @@ -1,4 +1,4 @@ --|script|mouboos|32767 +-|script|summon-mouboo|32767 { end; diff --git a/world/map/npc/magic/level2-summon-pinkie.txt b/world/map/npc/magic/level2-summon-pinkie.txt index 4e7ebf1a..a3949c78 100644 --- a/world/map/npc/magic/level2-summon-pinkie.txt +++ b/world/map/npc/magic/level2-summon-pinkie.txt @@ -1,4 +1,4 @@ --|script|pinkies|32767 +-|script|summon-pinkie|32767 { end; diff --git a/world/map/npc/magic/level2-summon-spiky-mushroom.txt b/world/map/npc/magic/level2-summon-spiky-mushroom.txt index 59cc295d..b39c53ad 100644 --- a/world/map/npc/magic/level2-summon-spiky-mushroom.txt +++ b/world/map/npc/magic/level2-summon-spiky-mushroom.txt @@ -1,4 +1,4 @@ --|script|spikymushroom|32767 +-|script|summon-spiky-mushrooms|32767 { end; diff --git a/world/map/npc/magic/level2-summon-wickedmushroom.txt b/world/map/npc/magic/level2-summon-wickedmushroom.txt index bd095144..46e608a6 100644 --- a/world/map/npc/magic/level2-summon-wickedmushroom.txt +++ b/world/map/npc/magic/level2-summon-wickedmushroom.txt @@ -1,4 +1,4 @@ --|script|wickedmushroom|32767 +-|script|summon-wickedmushroom|32767 { end; -- cgit v1.2.3-70-g09d2 From abdd6b60721e35faf4e07612890c28cf9e5a01a6 Mon Sep 17 00:00:00 2001 From: wushin Date: Thu, 10 Mar 2016 10:31:13 -0600 Subject: Translate ascii codes in const --- world/map/db/const.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'world') diff --git a/world/map/db/const.txt b/world/map/db/const.txt index 2f7d63a8..0a4b5fb0 100644 --- a/world/map/db/const.txt +++ b/world/map/db/const.txt @@ -284,9 +284,9 @@ EMOTE_PAIN 127 EMOTE_TEARS 128 // symbols used for registercmd (ASCII) -MAGIC_SYMBOL 35 -ATCMD_SYMBOL 64 -DEBUG_SYMBOL 37 +MAGIC_SYMBOL 35 //# +ATCMD_SYMBOL 64 //@ +DEBUG_SYMBOL 37 //% sfx_skillup 1 sfx_magic_generic 2 -- cgit v1.2.3-70-g09d2 From 19eb4a9b9267967c1c8c0f4a434bd2097706146d Mon Sep 17 00:00:00 2001 From: wushin Date: Thu, 10 Mar 2016 10:59:18 -0600 Subject: Update Readmes --- world/map/npc/commands/README.md | 140 +++++++++++++++++++++++++++++++++++++++ world/map/npc/magic/README.md | 13 +++- 2 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 world/map/npc/commands/README.md (limited to 'world') diff --git a/world/map/npc/commands/README.md b/world/map/npc/commands/README.md new file mode 100644 index 00000000..b1f3c401 --- /dev/null +++ b/world/map/npc/commands/README.md @@ -0,0 +1,140 @@ +# Commands To-do +- [ ] help +- [ ] setup +- [ ] charwarp +- [ ] warp +- [ ] where +- [ ] goto +- [ ] npc +- [ ] jump +- [ ] who +- [ ] whogroup +- [ ] whomap +- [ ] whomapgroup +- [ ] whogm +- [ ] save +- [ ] return +- [ ] load +- [ ] speed +- [ ] storage +- [ ] option +- [ ] hide +- [ ] die +- [ ] kill +- [ ] alive +- [ ] kami +- [ ] heal +- [ ] item +- [ ] itemreset +- [ ] itemcheck +- [ ] blvl +- [ ] jlvl +- [ ] pvpoff +- [ ] exprate +- [ ] pvpon +- [ ] model +- [ ] spawn +- [ ] killmonster +- [ ] killmonster2 +- [ ] gat +- [ ] packet +- [ ] stpoint +- [ ] skpoint +- [X] zeny +- [ ] str +- [ ] agi +- [ ] vit +- [ ] int +- [ ] dex +- [ ] luk +- [ ] recall +- [ ] revive +- [ ] charstats +- [ ] charstatsall +- [ ] charoption +- [ ] charsave +- [ ] doom +- [ ] doommap +- [ ] raise +- [ ] raisemap +- [ ] charbaselvl +- [ ] charjlvl +- [ ] kick +- [ ] kickall +- [ ] questskill +- [ ] charquestskill +- [ ] lostskill +- [ ] charlostskill +- [ ] party +- [ ] mapexit +- [ ] idsearch +- [ ] mapmove +- [ ] broadcast +- [ ] localbroadcast +- [ ] recallall +- [ ] charskreset +- [ ] charstreset +- [ ] charreset +- [ ] charmodel +- [ ] charskpoint +- [ ] charstpoint +- [X] charzeny +- [ ] mapinfo +- [ ] dye +- [ ] ccolor +- [ ] hairstyle +- [ ] haircolor +- [ ] allstats +- [ ] charchangesex +- [ ] block +- [ ] unblock +- [ ] ban +- [ ] unban +- [ ] partyspy +- [ ] partyrecall +- [ ] enablenpc +- [ ] disablenpc +- [ ] servertime +- [ ] chardelitem +- [ ] listnearby +- [ ] email +- [ ] effect +- [ ] charitemlist +- [ ] charstoragelist +- [ ] addwarp +- [ ] pvp +- [ ] npcmove +- [ ] charpvp +- [ ] chareffect +- [ ] dropall +- [ ] chardropall +- [ ] storeall +- [ ] charstoreall +- [ ] rain +- [ ] snow +- [ ] sakura +- [ ] fog +- [ ] leaves +- [ ] summon +- [ ] adjgmlvl +- [ ] adjcmdlvl +- [ ] trade +- [ ] charwipe +- [ ] setmagic +- [ ] magicinfo +- [ ] log +- [ ] l +- [ ] tee +- [ ] t +- [ ] invisible +- [ ] visible +- [ ] hugo +- [ ] linus +- [ ] sp-info +- [ ] sp-focus +- [ ] sp-unfocus +- [ ] skill-learn +- [ ] wgm +- [ ] ipcheck +- [ ] doomspot +- [ ] source diff --git a/world/map/npc/magic/README.md b/world/map/npc/magic/README.md index a9dedb6e..1ba351d1 100644 --- a/world/map/npc/magic/README.md +++ b/world/map/npc/magic/README.md @@ -1,5 +1,15 @@ # To-do -- [ ] finish the missing spells and push them so they can be tested +- [X] finish the missing spells and push them so they can be tested +- [ ] Deal with the removal of the following spells from magic to NPCs or Commands + - Ched + - [ ] merge-concentration-potions + - [ ] Auldsbel + - [ ] make-short-tanktop + - [ ] make-tanktop + - [ ] make-shirt + - [ ] make-concentration-potion + - Wyara + - [ ] sense-spouse --- --- @@ -8,7 +18,6 @@ To see a list of things that needs further thoughts do a grep for `XXX`. --- --- - - [ ] check the new builtins and make sure they work as intended - [ ] `puppet` - [ ] check what happens when making a puppet whose name already exist (maybe it replaces?) -- cgit v1.2.3-70-g09d2 From 8d9de1d4d43b4548aa544a995d402173e7e56af8 Mon Sep 17 00:00:00 2001 From: mekolat Date: Tue, 15 Mar 2016 12:58:11 -0400 Subject: fix spell names for puppets --- world/map/npc/001-2/pauline.txt | 2 +- world/map/npc/013-1/sagatha.txt | 6 +++--- world/map/npc/017-4/waric.txt | 2 +- world/map/npc/magic/_procedures.txt | 2 +- world/map/npc/magic/level1-experience.txt | 1 + world/map/npc/magic/level2-barrier.txt | 4 ++-- world/map/npc/magic/level2-summon-fluffies.txt | 2 +- world/map/npc/magic/level2-summon-mouboo.txt | 2 +- world/map/npc/magic/level2-summon-pinkie.txt | 2 +- world/map/npc/magic/level2-summon-spiky-mushroom.txt | 2 +- world/map/npc/magic/level2-summon-wickedmushroom.txt | 2 +- 11 files changed, 14 insertions(+), 13 deletions(-) (limited to 'world') diff --git a/world/map/npc/001-2/pauline.txt b/world/map/npc/001-2/pauline.txt index e69f8206..6925d554 100644 --- a/world/map/npc/001-2/pauline.txt +++ b/world/map/npc/001-2/pauline.txt @@ -92,7 +92,7 @@ L_Spells: L_Next1: mes "[Pauline]"; mes "\"Well I could only read the invocations. So I don't exactly know what kind of ingredients you are going to need.\""; - mes "\"The first one for the mouboo was " + get(.invocation$, "summon-mouboo") + " and the one for the pinkie was " + get(.invocation$, "summon-pinkie") +".\""; + mes "\"The first one for the mouboo was " + get(.invocation$, "smmouboo") + " and the one for the pinkie was " + get(.invocation$, "smpinkie") +".\""; next; mes "\"For the pinkie spell my suggestion is to try similar ingredients to the other Astral spells. Try a root and some item typical for pinkies.\""; mes "\"The mouboo spell might be more complicated. From what I could translate, one of the spell components is crafted by magic.\""; diff --git a/world/map/npc/013-1/sagatha.txt b/world/map/npc/013-1/sagatha.txt index fe7503a6..e113d35a 100644 --- a/world/map/npc/013-1/sagatha.txt +++ b/world/map/npc/013-1/sagatha.txt @@ -290,14 +290,14 @@ L_teach_A10: mes "\"To protect against others' magic, take a small mushroom from a shady place. Mushrooms draw things out of the earth. Rub your mushroom into pieces between your hands.\""; next; mes "[Sagatha the Witch]"; - mes "\"Then say '" + get(.invocation$, "barrier") + "' and let the mushroom's power take over.\""; + mes "\"Then say '" + get(.invocation$, "magic barrier") + "' and let the mushroom's power take over.\""; goto L_practice; L_teach_A11: if (@mexp < 200) goto L_teach_noexp; mes "[Sagatha the Witch]"; - mes "\"If you must fight, call allies. You can call spiky mushrooms out of the ground with a mushroom spike and a root. Hold up the spike and call out to them: '" + get(.invocation$, "summon-spiky-mushrooms") + "'. Then press the root to the ground.\""; + mes "\"If you must fight, call allies. You can call spiky mushrooms out of the ground with a mushroom spike and a root. Hold up the spike and call out to them: '" + get(.invocation$, "smsmushrooms") + "'. Then press the root to the ground.\""; next; mes "[Sagatha the Witch]"; mes "\"Spiky mushrooms often grow too many spikes, so you can shear the spikes off of some.\""; @@ -308,7 +308,7 @@ L_teach_A12: if (@mexp < 220) goto L_teach_noexp; mes "[Sagatha the Witch]"; - mes "\"You can call fluffies, too. But for them you must call out '" + get(.invocation$, "summon-fluffies") + "' instead, with white fluffy fur instead of a spike. And don't forget the root.\""; + mes "\"You can call fluffies, too. But for them you must call out '" + get(.invocation$, "smfluffies") + "' instead, with white fluffy fur instead of a spike. And don't forget the root.\""; goto L_practice; L_teach_N11: diff --git a/world/map/npc/017-4/waric.txt b/world/map/npc/017-4/waric.txt index 92674a00..a0f826e9 100644 --- a/world/map/npc/017-4/waric.txt +++ b/world/map/npc/017-4/waric.txt @@ -234,7 +234,7 @@ L_Mushroom: mes "\"Now that you are a student of mine, I will teach you some spells.\""; next; mes "\"We will start with an easy one. I will teach you how to summon a wicked mushroom.\""; - mes "\"The spell consumes a Small Mushroom and a Dark Crystal. Shove the Dark Crystal into the Small Mushroom and yell " + get(.invocation$, "summon-wickedmushroom") +".\""; + mes "\"The spell consumes a Small Mushroom and a Dark Crystal. Shove the Dark Crystal into the Small Mushroom and yell " + get(.invocation$, "smwmushroom") +".\""; next; mes "\"A wicked mushroom will appear to fight for you.\""; set OrumQuest, 37; diff --git a/world/map/npc/magic/_procedures.txt b/world/map/npc/magic/_procedures.txt index 5f1ea865..57a83fa9 100644 --- a/world/map/npc/magic/_procedures.txt +++ b/world/map/npc/magic/_procedures.txt @@ -12,7 +12,7 @@ function|script|magic_register function|script|magic_checks { set .@r, 0; - if(getpvpflag(1)) set .@r, 1; + if(getpvpflag(1)) set .@r, 1; // FIXME: make HIDDEN into a param if((gettimetick(2) - MAGIC_CAST_TICK) < 0) set .@r, 2; // check if last debuff ended if(Hp < 1) set .@r, 3; // can not cast when dead return .@r; diff --git a/world/map/npc/magic/level1-experience.txt b/world/map/npc/magic/level1-experience.txt index 323abc54..2c283eaa 100644 --- a/world/map/npc/magic/level1-experience.txt +++ b/world/map/npc/magic/level1-experience.txt @@ -8,6 +8,7 @@ callfunc "adjust_spellpower"; set Sp, Sp - 1; misceffect FX_MAGIC_GENERIC, strcharinfo(0); + callfunc "magic_exp"; set @ratio, ((@last_exp*10) - rand(.MAX_MAGIC_EXP[@level]/30))/.MAX_MAGIC_EXP[@level]; set @mes$, "You feel completely overwhelmed by your magic."; diff --git a/world/map/npc/magic/level2-barrier.txt b/world/map/npc/magic/level2-barrier.txt index d692bee1..8d74414a 100644 --- a/world/map/npc/magic/level2-barrier.txt +++ b/world/map/npc/magic/level2-barrier.txt @@ -1,4 +1,4 @@ --|script|barrier|32767 +-|script|magic barrier|32767 { if(call("magic_checks")) end; // << I wish we had functions that could return >> if (Sp < 15) end; @@ -14,7 +14,7 @@ if (attachrid(@target_id) != 1) end; set @target_hat, getequipid(equip_head), @asorm_caster; if (attachrid(@asorm_caster) != 1) end; - if (@target_hat == 888) end; // FIXME: this whole 5 line block could be done with only one line if we modify getequipid + if (@target_hat == 888) end; // FIXME: this whole 5 line block could be done with only one line if we modify getequipid OR make equip_ into params set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff callfunc "adjust_spellpower"; diff --git a/world/map/npc/magic/level2-summon-fluffies.txt b/world/map/npc/magic/level2-summon-fluffies.txt index 77f21fab..32fcd750 100644 --- a/world/map/npc/magic/level2-summon-fluffies.txt +++ b/world/map/npc/magic/level2-summon-fluffies.txt @@ -1,4 +1,4 @@ --|script|summon-fluffies|32767 +-|script|smfluffies|32767 { end; diff --git a/world/map/npc/magic/level2-summon-mouboo.txt b/world/map/npc/magic/level2-summon-mouboo.txt index 13b51ae6..5055362f 100644 --- a/world/map/npc/magic/level2-summon-mouboo.txt +++ b/world/map/npc/magic/level2-summon-mouboo.txt @@ -1,4 +1,4 @@ --|script|summon-mouboo|32767 +-|script|smmouboo|32767 { end; diff --git a/world/map/npc/magic/level2-summon-pinkie.txt b/world/map/npc/magic/level2-summon-pinkie.txt index a3949c78..f4716749 100644 --- a/world/map/npc/magic/level2-summon-pinkie.txt +++ b/world/map/npc/magic/level2-summon-pinkie.txt @@ -1,4 +1,4 @@ --|script|summon-pinkie|32767 +-|script|smpinkie|32767 { end; diff --git a/world/map/npc/magic/level2-summon-spiky-mushroom.txt b/world/map/npc/magic/level2-summon-spiky-mushroom.txt index b39c53ad..97d916b0 100644 --- a/world/map/npc/magic/level2-summon-spiky-mushroom.txt +++ b/world/map/npc/magic/level2-summon-spiky-mushroom.txt @@ -1,4 +1,4 @@ --|script|summon-spiky-mushrooms|32767 +-|script|smsmushrooms|32767 { end; diff --git a/world/map/npc/magic/level2-summon-wickedmushroom.txt b/world/map/npc/magic/level2-summon-wickedmushroom.txt index 46e608a6..3960437a 100644 --- a/world/map/npc/magic/level2-summon-wickedmushroom.txt +++ b/world/map/npc/magic/level2-summon-wickedmushroom.txt @@ -1,4 +1,4 @@ --|script|summon-wickedmushroom|32767 +-|script|smwmushroom|32767 { end; -- cgit v1.2.3-70-g09d2 From a99779828dd609f004a17048d72bbfeb484a81bd Mon Sep 17 00:00:00 2001 From: mekolat Date: Tue, 15 Mar 2016 14:00:04 -0400 Subject: get rid of magic secrets, convert stranger quiz --- GNUmakefile | 7 +- world/map/conf/.gitignore | 3 - world/map/conf/build-magic.sh | 19 --- world/map/conf/magic-secrets.sex.template | 241 ------------------------------ world/map/npc/002-2/stranger.txt | 235 +++++++++++------------------ world/map/npc/functions/quiz.txt | 5 + world/map/npc/functions/strangerquiz.txt | 8 - world/map/npc/magic/README.md | 18 +-- world/map/npc/scripts.conf | 1 - 9 files changed, 99 insertions(+), 438 deletions(-) delete mode 100755 world/map/conf/build-magic.sh delete mode 100644 world/map/conf/magic-secrets.sex.template delete mode 100644 world/map/npc/functions/strangerquiz.txt (limited to 'world') diff --git a/GNUmakefile b/GNUmakefile index 85989f6a..8f124784 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -7,16 +7,11 @@ maps: % : | %.example cp "$|" "$@" -conf: world/map/conf/magic-secrets.sex \ -login/conf/login_local.conf login/conf/ladmin_local.conf login/save/gm_account.txt login/save/account.txt \ +conf: login/conf/login_local.conf login/conf/ladmin_local.conf login/save/gm_account.txt login/save/account.txt \ world/conf/char_local.conf \ world/map/conf/map_local.conf world/map/conf/battle_local.conf world/map/conf/atcommand_local.conf world/map/db/const-debugflag.txt \ world/map/npc/functions/motd.txt world/map/npc/commands/_atcommand_local.txt -world/map/conf/magic-secrets.sex: world/map/conf/magic-secrets.sex.template world/map/conf/secrets-build - cd world/map/conf && ./build-magic.sh -world/map/conf/secrets-build: - format: find world/map/npc -type f -exec sed -ri \ -e "s%([^|]+)\|script\|([^|]+)\|-1%\1|script|\2|32767%ig" \ diff --git a/world/map/conf/.gitignore b/world/map/conf/.gitignore index c2b48eb6..2c43e911 100644 --- a/world/map/conf/.gitignore +++ b/world/map/conf/.gitignore @@ -1,4 +1 @@ /*_local.conf -/magic-secrets.conf -/magic-secrets.sex -/secrets-build diff --git a/world/map/conf/build-magic.sh b/world/map/conf/build-magic.sh deleted file mode 100755 index 77337df7..00000000 --- a/world/map/conf/build-magic.sh +++ /dev/null @@ -1,19 +0,0 @@ -#! /bin/bash - -OUTPUT=magic-secrets.sex -INPUT=$OUTPUT.template -RSCRIPT=secrets-build - -if ! grep -q -s '/bin/sed' $RSCRIPT; then - echo '#! /bin/sed -f' > $RSCRIPT; - chmod a+x $RSCRIPT -fi - -for n in `grep -o '"#..."' $INPUT`; do - if ! grep -q $n $RSCRIPT; then - echo "New secret ${n} needs to be set in $RSCRIPT!" - echo "s/${n}/${n}/" >> $RSCRIPT; - fi -done - -./$RSCRIPT $INPUT > $OUTPUT diff --git a/world/map/conf/magic-secrets.sex.template b/world/map/conf/magic-secrets.sex.template deleted file mode 100644 index 78d5e5d7..00000000 --- a/world/map/conf/magic-secrets.sex.template +++ /dev/null @@ -1,241 +0,0 @@ -" coding of generic spellinvocations" -" #[indicates difficulty level][indicates questionnumber][indicates answerpossibility]" -" X = easy; Y = medium; Z = hard" -" each question have a number of possible answers (mostly using capital letters or not)" -(SPELL (NONMAGIC) towelanswer00a "#X00" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer00b "#X01" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer01a "#X10" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer01b "#X11" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer02a "#X20" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer02b "#X21" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer03a "#X30" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer03b "#X31" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer04a "#X40" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer04b "#X41" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer05a "#X50" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer05b "#X51" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer05c "#X52" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer05d "#X53" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer06a "#X60" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer06b "#X61" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer06c "#X62" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer06d "#X63" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer07a "#X70" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer07b "#X71" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer08a "#X80" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer08b "#X81" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer08c "#X82" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer08d "#X83" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer09a "#X90" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer09b "#X91" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer10a "#Y00" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer10b "#Y01" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer11a "#Y10" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer11b "#Y11" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer12a "#Y20" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer12b "#Y21" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer13a "#Y30" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer13b "#Y31" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer14a "#Y40" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer14b "#Y41" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer15a "#Y50" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer15b "#Y51" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer15c "#Y52" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer16a "#Y60" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer16b "#Y61" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer17a "#Y70" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer17b "#Y71" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer18a "#Y80" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer18b "#Y81" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer18c "#Y82" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer18d "#Y83" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer19a "#Y90" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer19b "#Y91" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer19c "#Y92" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer19d "#Y93" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer110a "#YA0" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer110b "#YA1" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer111a "#YB0" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer111b "#YB1" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer20a "#Z00" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer20b "#Z01" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer20c "#Z02" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer20d "#Z03" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer21a "#Z10" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer21b "#Z11" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer22a "#Z20" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer22b "#Z21" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer23a "#Z30" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer23b "#Z31" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer24a "#Z40" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer24b "#Z41" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer25a "#Z50" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer25b "#Z51" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer26a "#Z60" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer26b "#Z61" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer27a "#Z62" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer27b "#Z63" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer27c "#Z70" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer27d "#Z71" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer28a "#Z72" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer28b "#Z73" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer29a "#Z80" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) -(SPELL (NONMAGIC) towelanswer29b "#Z81" () - (EFFECT - (SCRIPT "{ message strcharinfo(0), \"\"; }"))) diff --git a/world/map/npc/002-2/stranger.txt b/world/map/npc/002-2/stranger.txt index 8186636b..1367e6f7 100644 --- a/world/map/npc/002-2/stranger.txt +++ b/world/map/npc/002-2/stranger.txt @@ -58,171 +58,104 @@ L_Towel: mes "\"The first one is easy.\""; next; - setarray @easy_questions$, - "What two words are written in big friendly letters on the back cover?", - "What's the name of the paranoid robot?", - "What is the answer to life, the universe and everything?", - "What is the first name of the author of the hitchhikers guide?", - "What is the last name of the author of the hitchhikers guide?", - "Who is the male human protagonist?", - "Who is the female human protagonist?", - "According to the Guide, space is ____?", - "What is the name of the spaceship which was stolen by the president of the universe?", - "How many heads does Zaphod Beeblebrox have?"; - - setarray @easy_answers_amount,2,2,2,2,2,4,4,2,4,2; - - set @random, rand(10); - mes "\"" + @easy_questions$[@random] + "\""; - input @answer$; - - if (@easy_answers_amount[@random] < 4) - goto L_Easy_Skip4; - set @quizparam$, "towelanswer0" + @random + "d"; - callfunc "StrangerQuiz"; - if (("###" + @answer$ == @quizanswer$)) - goto L_Right_Answer_Easy; - goto L_Easy_Skip4; - -L_Easy_Skip4: - if (@easy_answers_amount[@random] < 3) - goto L_Easy_Skip3; - set @quizparam$, "towelanswer0" + @random + "c"; - callfunc "StrangerQuiz"; - if (("###" + @answer$ == @quizanswer$)) - goto L_Right_Answer_Easy; - goto L_Easy_Skip3; - -L_Easy_Skip3: - set @quizparam$, "towelanswer0" + @random + "b"; - callfunc "StrangerQuiz"; - if (("###" + @answer$ == @quizanswer$)) - goto L_Right_Answer_Easy; - - set @quizparam$, "towelanswer0" + @random + "a"; - callfunc "StrangerQuiz"; - if (("###" + @answer$ == @quizanswer$)) - goto L_Right_Answer_Easy; - - goto L_Wrong_Answer; - -L_Right_Answer_Easy: + setarray @quiz_questions$[0], + "What two words are written in big friendly letters on the back cover?", + "What's the name of the paranoid robot?", + "What is the answer to life, the universe and everything?", + "What is the first name of the author of the hitchhikers guide?", + "What is the last name of the author of the hitchhikers guide?", + "Who is the male human protagonist?", + "Who is the female human protagonist?", + "According to the Guide, space is ___?", + "What is the name of the spaceship which was stolen by the president of the universe?", + "How many heads does Zaphod Beeblebrox have?"; + setarray @quiz_answers$[0], + "Don't Panic", + "Marvin", + "42", + "Douglas", + "Adams", + "Arthur Philip Dent", + "Trillian", + "Big", + "Heart of Gold", + "2"; + + callfunc "MultiQuiz"; + if (@success == 0) goto L_Wrong_Answer; + mes "[Stranger]"; mes "\"You're absolutely right. The next one will be more tricky.\""; next; - setarray @medium_questions$, - "What is the name of the rock group claiming to be the loudest band in the universe?", - "What star is near Ford's home planet?", - "Which country does the human protagonist come from?", - "What is the name of the computer on The Heart of Gold?", - "What color is a Babel Fish?", - "What did the bowl of petunias think?", - "What body orifice should a babel fish be inserted in to work properly?", - "What is the name of the super computer?", - "What were the second most intelligent creatures on Earth?", - "What race creates the worst poetry in universe?", - "What is the name of the Vogon home planet?", - "What is the name of the Restaurant at the End of the Universe?"; - - setarray @medium_answers_amount,2,2,2,2,2,3,2,2,4,4,2,2; - - set @random, rand(12); - mes "\"" + @medium_questions$[@random] + "\""; - input @answer$; - - if (@medium_answers_amount[@random] < 4) - goto L_Medium_Skip4; - - set @quizparam$, "towelanswer1" + @random + "d"; - callfunc "StrangerQuiz"; - if (("###" + @answer$ == @quizanswer$)) - goto L_Right_Answer_Medium; - goto L_Medium_Skip4; - -L_Medium_Skip4: - if (@medium_answers_amount[@random] < 3) - goto L_Medium_Skip3; - set @quizparam$, "towelanswer1" + @random + "c"; - callfunc "StrangerQuiz"; - if (("###" + @answer$ == @quizanswer$)) - goto L_Right_Answer_Medium; - goto L_Medium_Skip3; - -L_Medium_Skip3: - set @quizparam$, "towelanswer1" + @random + "b"; - callfunc "StrangerQuiz"; - if (("###" + @answer$ == @quizanswer$)) - goto L_Right_Answer_Medium; - - set @quizparam$, "towelanswer1" + @random + "a"; - callfunc "StrangerQuiz"; - if (("###" + @answer$ == @quizanswer$)) - goto L_Right_Answer_Medium; - - goto L_Wrong_Answer; - -L_Right_Answer_Medium: + setarray @quiz_questions$[0], + "What is the name of the rock group claiming to be the loudest band in the universe?", + "What star is near Ford's home planet?", + "Which country does the human protagonist come from?", + "What is the name of the computer on The Heart of Gold?", + "What color is a Babel Fish?", + "What did the bowl of petunias think?", + "What body orifice should a babel fish be inserted in to work properly?", + "What is the name of the super computer?", + "What were the second most intelligent creatures on Earth?", + "What race creates the worst poetry in universe?", + "What is the name of the Vogon home planet?", + "What is the name of the Restaurant at the End of the Universe?"; + setarray @quiz_answers$[0], + "Disaster Area", + "Betelgeuse", + "England", + "Eddie", + "Yellow", + "Oh no, not again", + "Ear", + "Deep Thought", + "Dolphins", + "Vogons", + "Vogsphere", + "Milliways"; + + callfunc "MultiQuiz"; + if (@success == 0) goto L_Wrong_Answer; + mes "[Stranger]"; mes "\"Not bad, not bad. Let's see if you can answer an even more difficult one.\""; next; - setarray @hard_questions$, - "Drinking what drink is like having your brain smashed out by a slice of lemon wrapped round a large gold brick?", - "How many pints of beers should you drink before hitchhiking?", - "What initials are carved into Zaphod Beeblebrox's brain?", - "What is Ford Prefect's nickname?", - "Who is responsible for the fjords of Norway?", - "What game is played on earth as a relict of memories to an ancient war?", - "What is the name of the triple-breasted whore from Eroticon VI?", - "Who will insult every living being in the universe, because he is immortal and getting bored?", - "What is the name of the piteous creature that is continually reincarnated and subsequently killed, each time unknowingly, by Arthur Dent?"; - - setarray @hard_answers_amount,4,2,2,2,2,2,2,4,2; - - set @random, rand(9); - mes "\"" + @hard_questions$[@random] + "\""; - input @answer$; - - if (@hard_answers_amount[@random] < 4) - goto L_Hard_Skip4; - set @quizparam$, "towelanswer2" + @random + "d"; - callfunc "StrangerQuiz"; - if (("###" + @answer$ == @quizanswer$)) - goto L_Right_Answer_Hard; - goto L_Hard_Skip4; - -L_Hard_Skip4: - if (@hard_answers_amount[@random] < 3) - goto L_Hard_Skip3; - set @quizparam$, "towelanswer2" + @random + "c"; - callfunc "StrangerQuiz"; - if (("###" + @answer$ == @quizanswer$)) - goto L_Right_Answer_Hard; - goto L_Hard_Skip3; - -L_Hard_Skip3: - set @quizparam$, "towelanswer2" + @random + "b"; - callfunc "StrangerQuiz"; - if (("###" + @answer$ == @quizanswer$)) - goto L_Right_Answer_Hard; - - set @quizparam$, "towelanswer2" + @random + "a"; - callfunc "StrangerQuiz"; - if (("###" + @answer$ == @quizanswer$)) - goto L_Right_Answer_Hard; - - goto L_Wrong_Answer; - -L_Right_Answer_Hard: + setarray @quiz_questions$[0], + "Drinking what drink is like having your brain smashed out by a slice of lemon wrapped round a large gold brick?", + "How many pints of beers should you drink before hitchhiking?", + "What initials are carved into Zaphod Beeblebrox's brain?", + "What is Ford Prefect's nickname?", + "Who is responsible for the fjords of Norway?", + "What game is played on earth as a relict of memories to an ancient war?", + "What is the name of the triple-breasted whore from Eroticon VI?", + "Who will insult every living being in the universe, because he is immortal and getting bored?", + "What is the name of the piteous creature that is continually reincarnated and subsequently killed, each time unknowingly, by Arthur Dent?"; + setarray @quiz_answers$[0], + "Pan Galactic Gargle Blaster", + "3", + "ZB", + "Ix", + "Slartibartfast", + "Cricket", + "Eccentrica Gallumbits", + "Wowbagger", + "Agrajag"; + + callfunc "MultiQuiz"; + if (@success == 0) goto L_Wrong_Answer; + mes "[Stranger]"; mes "\"Unbelievable! You're really a wise person.\""; next; mes "\"One last question, but this shouldn't be a problem for you.\""; next; mes "\"What is the most important item for every hitchhiker to have?\""; - input @answer$; - if (@answer$ != "Towel" && @answer$ != "towel") + mes ""; + mes "##BDrag & drop the item from your inventory##b."; + requestitem @answer$; + if (@answer$ != "Towel" && @answer$ != "HitchhikersTowel") goto L_Wrong_Answer; mes "[Stranger]"; diff --git a/world/map/npc/functions/quiz.txt b/world/map/npc/functions/quiz.txt index ea10a3c4..0f2f7c87 100644 --- a/world/map/npc/functions/quiz.txt +++ b/world/map/npc/functions/quiz.txt @@ -1,3 +1,8 @@ +// FIXME/TODO: some variables should be scoped, and some other variables +// combined in an array, with a very specific name, to avoid +// collisions. The script as a whole should be optimized to +// take advangage of magic-v3 + function|script|MultiQuiz { if((getarraysize(@quiz_answers$) != getarraysize(@quiz_questions$)) || diff --git a/world/map/npc/functions/strangerquiz.txt b/world/map/npc/functions/strangerquiz.txt deleted file mode 100644 index 3427a0ee..00000000 --- a/world/map/npc/functions/strangerquiz.txt +++ /dev/null @@ -1,8 +0,0 @@ - -function|script|StrangerQuiz -{ - // param @quizparam$$ - // return in @quizanswer$ - set @quizanswer$, (@quizparam$); - return; -} diff --git a/world/map/npc/magic/README.md b/world/map/npc/magic/README.md index 1ba351d1..89d0fe12 100644 --- a/world/map/npc/magic/README.md +++ b/world/map/npc/magic/README.md @@ -1,15 +1,15 @@ # To-do - [X] finish the missing spells and push them so they can be tested - [ ] Deal with the removal of the following spells from magic to NPCs or Commands - - Ched - - [ ] merge-concentration-potions - - [ ] Auldsbel - - [ ] make-short-tanktop - - [ ] make-tanktop - - [ ] make-shirt - - [ ] make-concentration-potion - - Wyara - - [ ] sense-spouse + - [X] Ched + - [ ] merge-concentration-potions + - [ ] Auldsbel + - [ ] make-short-tanktop + - [ ] make-tanktop + - [ ] make-shirt + - [ ] make-concentration-potion + - [X] Wyara + - [ ] sense-spouse --- --- diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf index 68a348e1..57aa43e0 100644 --- a/world/map/npc/scripts.conf +++ b/world/map/npc/scripts.conf @@ -14,7 +14,6 @@ npc: npc/functions/mob_points.txt npc: npc/functions/process_equip.txt npc: npc/functions/slot_machine.txt npc: npc/functions/soul_menhir.txt -npc: npc/functions/strangerquiz.txt npc: npc/functions/time.txt npc: npc/functions/water_bottle.txt npc: npc/functions/evil_obelisk.txt -- cgit v1.2.3-70-g09d2 From c0eab1f3997509784572302120456fe7cd856530 Mon Sep 17 00:00:00 2001 From: mekolat Date: Thu, 17 Mar 2016 13:11:37 -0400 Subject: move `merge-concentration-potions` spell to npc add alchemy table make alchemy puppets --- world/map/npc/001-1/ched.txt | 14 ------- world/map/npc/029-2/_import.txt | 1 + world/map/npc/029-2/alchemy.txt | 81 +++++++++++++++++++++++++++++++++++++++++ world/map/npc/magic/README.md | 2 +- 4 files changed, 83 insertions(+), 15 deletions(-) create mode 100644 world/map/npc/029-2/alchemy.txt (limited to 'world') diff --git a/world/map/npc/001-1/ched.txt b/world/map/npc/001-1/ched.txt index eb82aba1..2ec3288a 100644 --- a/world/map/npc/001-1/ched.txt +++ b/world/map/npc/001-1/ched.txt @@ -6,20 +6,6 @@ mes "\"I'm trying to get a spell to work, but I'm having some trouble.\""; mes "\"It's supposed to combine two potions, but I can't seem to figure out which two to combine...\""; next; - menu - "Good luck with that.", L_Done, - "What spell is it?", L_Next; - -L_Next: - mes ""; - mes "[Ched]"; - mes "\"Well, I don't remember what it's called... I took it out of 'Timbleweed's Advanced Transmutations,' but it seems awfully hard to cast.\""; - next; - mes "\"If you want to try it, the invocation is '" + get(.invocation$, "merge-concentration-potions") + ".' I just can't get the hang of it though.\""; - next; mes "\"Maybe I should go back to practicing '" + get(.invocation$, "detect-magic") + "' until I can cast it properly.\" %%6"; - goto L_Done; - -L_Done: close; } diff --git a/world/map/npc/029-2/_import.txt b/world/map/npc/029-2/_import.txt index 29e2607a..6d67f2f7 100644 --- a/world/map/npc/029-2/_import.txt +++ b/world/map/npc/029-2/_import.txt @@ -14,3 +14,4 @@ npc: npc/029-2/sorfina.txt npc: npc/029-2/stat_reset.txt npc: npc/029-2/tanisha.txt npc: npc/029-2/two_arms.txt +npc: npc/029-2/alchemy.txt diff --git a/world/map/npc/029-2/alchemy.txt b/world/map/npc/029-2/alchemy.txt new file mode 100644 index 00000000..d0d2909a --- /dev/null +++ b/world/map/npc/029-2/alchemy.txt @@ -0,0 +1,81 @@ +029-2,113,57,0|script|#alchemylab|400 +{ + title "Alchemy Lab"; + mes "This is an alchemy lab."; + mes "With it, you can combine reagents together to create powerful potions."; + next; + clear; + mes "##BDrag & drop 2 items from your inventory. All items used will be lost.##b"; + requestitem @alchlab_items$[0], 2; // TODO: add a craft builtin (npc action 12) + clear; + if (@alchlab_items$[0] == "" || @alchlab_items$[1] == "") + goto L_NoItems; + + mes "You are about to combine the following:"; + mes " ["+ getitemlink(@alchlab_items$[0]) +"]"; + mes " ["+ getitemlink(@alchlab_items$[1]) +"]"; + mes; + mes "##BWarning! This will permanently destroy the selected items.##b"; + // can not use a scope variable to store item names because menu is a script terminator (destroys the scope) + menu + "Abort Mission.", L_Abort, + "Proceed.", L_Proceed; + +L_Proceed: + // XXX: here we could make it wait a little, while the potion is boiling (and show an animation/particles/sound) + if (countitem(@alchlab_items$[0]) < 1 || countitem(@alchlab_items$[1]) < 1) // this shouldn't happen, but just to be safe.. + goto L_NoItems; + delitem @alchlab_items$[0], 1; + delitem @alchlab_items$[1], 1; + if (@alchlab_items$[0] == "BottleOfWater" || @alchlab_items$[1] == "BottleOfWater") // give back used bottles + getitem "EmptyBottle", if_then_else(@alchlab_items$[0] == "BottleOfWater" && @alchlab_items$[1] == "BottleOfWater",2,1); + + set .@n, -3; + goto L_CheckRecipes; + +L_CheckRecipes: + set .@n, .@n+3; + if (.@n == get(.rsize, "#alchemylab")) + goto L_Failed; + if (!(get(.recipes$[.@n], "#alchemylab") == @alchlab_items$[0] && get(.recipes$[.@n+1], "#alchemylab") == @alchlab_items$[1]) && + !(get(.recipes$[.@n], "#alchemylab") == @alchlab_items$[1] && get(.recipes$[.@n+1], "#alchemylab") == @alchlab_items$[0])) + goto L_CheckRecipes; + + getitem get(.recipes$[.@n+2], "#alchemylab"), 1; // XXX: here we could also make it fail sometimes depending on your expertise + + // XXX: here we could make it give profession/crafting exp + clear; + mes "You combined the following:"; + mes " ["+ getitemlink(@alchlab_items$[0]) +"]"; + mes " ["+ getitemlink(@alchlab_items$[1]) +"]"; + mes; + mes "You obtained:"; + mes " ["+ getitemlink(get(.recipes$[.@n+2], "#alchemylab")) +"]"; + close; + +L_NoItems: + mes "You must put exactly 2 items."; + close; + +L_Failed: + mes "The potion bubbles violently and evaporates."; // XXX: here we could have random failure messages + close; + +L_Abort: + close; + +OnInit: + void // the first alchemy lab doesn't need a puppet, it's already on a map + puppet("027-2", 51, 100, strnpcinfo(0)+0, 400), // TODO: make a npc like npc 400 but with hoverCursor="action" => looks better for things like crafting + puppet("001-2", 92, 76, strnpcinfo(0)+1, 400), + puppet("001-2", 98, 76, strnpcinfo(0)+2, 400), + puppet("001-2", 92, 89, strnpcinfo(0)+3, 400), + puppet("001-2", 98, 89, strnpcinfo(0)+4, 400); + + setarray .recipes$[0], + "DilutedConcentrationPot", "DarkConcentrationPotion", "ConcentrationPotion", + "CactusDrink", "CactusDrink", "CactusPotion", + "PinkPetal", "BottleOfWater", "ConcentrationPotion"; + set .rsize, getarraysize(.recipes$); + end; +} diff --git a/world/map/npc/magic/README.md b/world/map/npc/magic/README.md index 89d0fe12..187c7c04 100644 --- a/world/map/npc/magic/README.md +++ b/world/map/npc/magic/README.md @@ -2,7 +2,7 @@ - [X] finish the missing spells and push them so they can be tested - [ ] Deal with the removal of the following spells from magic to NPCs or Commands - [X] Ched - - [ ] merge-concentration-potions + - [X] merge-concentration-potions - [ ] Auldsbel - [ ] make-short-tanktop - [ ] make-tanktop -- cgit v1.2.3-70-g09d2 From 1834f64f6ae790876f9447c8da1dcd7bf5195bbf Mon Sep 17 00:00:00 2001 From: wushin Date: Sat, 19 Mar 2016 22:13:28 -0500 Subject: Swap spell for alchemy reference --- world/map/npc/001-1/ched.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'world') diff --git a/world/map/npc/001-1/ched.txt b/world/map/npc/001-1/ched.txt index 2ec3288a..1710ff1e 100644 --- a/world/map/npc/001-1/ched.txt +++ b/world/map/npc/001-1/ched.txt @@ -3,9 +3,9 @@ 001-1,43,48,0|script|Ched|113 { mes "[Ched]"; - mes "\"I'm trying to get a spell to work, but I'm having some trouble.\""; - mes "\"It's supposed to combine two potions, but I can't seem to figure out which two to combine...\""; + mes "\"I'm trying to get work on my Alchemy homework, but I'm having some trouble.\""; + mes "\"I'm supposed to combine two potions to create a " + getitemlink("ConcentrationPotion") + ", but I can't seem to figure out which two to combine...\""; next; - mes "\"Maybe I should go back to practicing '" + get(.invocation$, "detect-magic") + "' until I can cast it properly.\" %%6"; + mes "\"Maybe I should go back to practicing '" + get(.invocation$, "detect-magic") + "' until I can make potions properly.\" %%6"; close; } -- cgit v1.2.3-70-g09d2 From 96fcb2acd3fe36d7d44d95d83c5845822987734c Mon Sep 17 00:00:00 2001 From: mekolat Date: Tue, 22 Mar 2016 10:58:33 -0400 Subject: get language from client for game rules --- world/map/npc/functions/game_rules.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'world') diff --git a/world/map/npc/functions/game_rules.txt b/world/map/npc/functions/game_rules.txt index e2b9df81..d898b436 100644 --- a/world/map/npc/functions/game_rules.txt +++ b/world/map/npc/functions/game_rules.txt @@ -2,6 +2,21 @@ function|script|GameRules { + requestlang .@cl$; + explode .@l$, .@cl$, "_"; + if (.@l$[0] == "en") goto L_English; + if (.@l$[0] == "nl") goto L_Dutch; + if (.@l$[0] == "de") goto L_German; + if (.@l$[0] == "da") goto L_Danish; + if (.@l$[0] == "fr") goto L_French; + if (.@l$[0] == "es") goto L_Spanish; + if (.@l$[0] == "sv") goto L_Swedish; + if (.@l$[0] == "pt") goto L_Portuguese; + if (.@l$[0] == "pl") goto L_Polish; + if (.@l$[0] == "it") goto L_Italian; + if (.@l$[0] == "zh") goto L_zhHant; + if (.@l$[0] == "ru") goto L_Russian; + mes "[Game Rules]"; mes "Please select a language:"; menu -- cgit v1.2.3-70-g09d2 From c22162b0a8cd9cceab579548bbc1b68ff67ba4dd Mon Sep 17 00:00:00 2001 From: mekolat Date: Tue, 22 Mar 2016 12:44:19 -0400 Subject: add useless transmutation spells --- world/map/npc/magic/_import.txt | 3 +++ world/map/npc/magic/level2-make-shirt.txt | 24 +++++++++++++++++++++++ world/map/npc/magic/level2-make-short-tanktop.txt | 24 +++++++++++++++++++++++ world/map/npc/magic/level2-make-tanktop.txt | 24 +++++++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 world/map/npc/magic/level2-make-shirt.txt create mode 100644 world/map/npc/magic/level2-make-short-tanktop.txt create mode 100644 world/map/npc/magic/level2-make-tanktop.txt (limited to 'world') diff --git a/world/map/npc/magic/_import.txt b/world/map/npc/magic/_import.txt index 4118170e..52a6a55c 100644 --- a/world/map/npc/magic/_import.txt +++ b/world/map/npc/magic/_import.txt @@ -35,4 +35,7 @@ npc: npc/magic/level2-shear.txt npc: npc/magic/level2-lightning-strike.txt npc: npc/magic/level2-rain.txt npc: npc/magic/level2-lay-on-hands.txt +npc: npc/magic/level2-make-short-tanktop.txt +npc: npc/magic/level2-make-tanktop.txt +npc: npc/magic/level2-make-shirt.txt npc: npc/magic/level3-necromancy.txt diff --git a/world/map/npc/magic/level2-make-shirt.txt b/world/map/npc/magic/level2-make-shirt.txt new file mode 100644 index 00000000..8585a509 --- /dev/null +++ b/world/map/npc/magic/level2-make-shirt.txt @@ -0,0 +1,24 @@ +-|script|make-shirt|32767 +{ + if(call("magic_checks")) end; // << I wish we had functions that could return >> + if (Sp < 25) end; + if (getskilllv(.school) < .level) end; + if (countitem("CottonCloth") >= 5) delitem "CottonCloth", 5; else end; + set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 25; + misceffect FX_MAGIC_RED, strcharinfo(0); + setarray @create_params[0], 1, 425; + setarray @create_items$[0], "CottonShirt", "CottonCloth"; + callfunc "magic_create_item"; + callfunc "magic_exp"; + end; + +OnInit: + set .school, SKILL_MAGIC_TRANSMUTE; + set .invocation$, chr(MAGIC_SYMBOL) + "patmuploo"; // used in npcs that refer to this spell + void call("magic_register"); + set .level, 2; + set .exp_gain, 2; + end; +} diff --git a/world/map/npc/magic/level2-make-short-tanktop.txt b/world/map/npc/magic/level2-make-short-tanktop.txt new file mode 100644 index 00000000..69297483 --- /dev/null +++ b/world/map/npc/magic/level2-make-short-tanktop.txt @@ -0,0 +1,24 @@ +-|script|make-short-tanktop|32767 +{ + if(call("magic_checks")) end; // << I wish we had functions that could return >> + if (Sp < 25) end; + if (getskilllv(.school) < .level) end; + if (countitem("CottonCloth") >= 3) delitem "CottonCloth", 3; else end; + set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 25; + misceffect FX_MAGIC_RED, strcharinfo(0); + setarray @create_params[0], 1, 250; + setarray @create_items$[0], "ShortTankTop", "CottonCloth"; + callfunc "magic_create_item"; + callfunc "magic_exp"; + end; + +OnInit: + set .school, SKILL_MAGIC_TRANSMUTE; + set .invocation$, chr(MAGIC_SYMBOL) + "patviloree"; // used in npcs that refer to this spell + void call("magic_register"); + set .level, 2; + set .exp_gain, 2; + end; +} diff --git a/world/map/npc/magic/level2-make-tanktop.txt b/world/map/npc/magic/level2-make-tanktop.txt new file mode 100644 index 00000000..cec49d2e --- /dev/null +++ b/world/map/npc/magic/level2-make-tanktop.txt @@ -0,0 +1,24 @@ +-|script|make-tanktop|32767 +{ + if(call("magic_checks")) end; // << I wish we had functions that could return >> + if (Sp < 25) end; + if (getskilllv(.school) < .level) end; + if (countitem("CottonCloth") >= 4) delitem "CottonCloth", 4; else end; + set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + callfunc "adjust_spellpower"; + set Sp, Sp - 25; + misceffect FX_MAGIC_RED, strcharinfo(0); + setarray @create_params[0], 1, 350; + setarray @create_items$[0], "TankTop", "CottonCloth"; + callfunc "magic_create_item"; + callfunc "magic_exp"; + end; + +OnInit: + set .school, SKILL_MAGIC_TRANSMUTE; + set .invocation$, chr(MAGIC_SYMBOL) + "patloree"; // used in npcs that refer to this spell + void call("magic_register"); + set .level, 2; + set .exp_gain, 2; + end; +} -- cgit v1.2.3-70-g09d2 From 40add9a2181ef5cb2d8804eeb01c0a190d6c8ee5 Mon Sep 17 00:00:00 2001 From: mekolat Date: Wed, 30 Mar 2016 19:52:24 -0400 Subject: slowly getting things done explain the debug spell is deprecated upmarmu typo cooldown fix make maps with updated converter, make nodes update permissions --- world/map/conf/magic-anchors.sex | 66 -- world/map/conf/magic-config.sex | 68 -- world/map/conf/magic-misc.sex | 105 --- world/map/conf/magic-procedures.sex | 340 ------- world/map/conf/magic-quickdebug.sex | 10 - world/map/db/item_db_head.txt | 2 +- world/map/db/params.txt | 2 + world/map/npc/001-1/_import.txt | 1 + world/map/npc/001-1/_mobs.txt | 31 +- world/map/npc/001-1/_nodes.txt | 4 + world/map/npc/001-2/_import.txt | 1 + world/map/npc/001-2/_mobs.txt | 6 - world/map/npc/001-2/_nodes.txt | 16 + world/map/npc/001-3/_import.txt | 1 + world/map/npc/001-3/_mobs.txt | 13 +- world/map/npc/001-3/_nodes.txt | 4 + world/map/npc/002-1/_import.txt | 1 + world/map/npc/002-1/_mobs.txt | 57 +- world/map/npc/002-1/_nodes.txt | 4 + world/map/npc/002-1/elanore.txt | 2 - world/map/npc/002-2/_import.txt | 1 + world/map/npc/002-2/_mobs.txt | 6 - world/map/npc/002-2/_nodes.txt | 4 + world/map/npc/002-2/stranger.txt | 4 +- world/map/npc/002-3/_import.txt | 1 + world/map/npc/002-3/_mobs.txt | 6 - world/map/npc/002-3/_nodes.txt | 4 + world/map/npc/002-4/_import.txt | 1 + world/map/npc/002-4/_mobs.txt | 49 +- world/map/npc/002-4/_nodes.txt | 4 + world/map/npc/002-5/_import.txt | 1 + world/map/npc/002-5/_mobs.txt | 65 +- world/map/npc/002-5/_nodes.txt | 4 + world/map/npc/004-3/_import.txt | 1 + world/map/npc/004-3/_mobs.txt | 35 +- world/map/npc/004-3/_nodes.txt | 4 + world/map/npc/004-4/_import.txt | 1 + world/map/npc/004-4/_mobs.txt | 39 +- world/map/npc/004-4/_nodes.txt | 4 + world/map/npc/004-5/_import.txt | 1 + world/map/npc/004-5/_mobs.txt | 45 +- world/map/npc/004-5/_nodes.txt | 4 + world/map/npc/005-3/_import.txt | 1 + world/map/npc/005-3/_mobs.txt | 27 +- world/map/npc/005-3/_nodes.txt | 4 + world/map/npc/006-1/_import.txt | 1 + world/map/npc/006-1/_mobs.txt | 73 +- world/map/npc/006-1/_nodes.txt | 4 + world/map/npc/006-2/_import.txt | 1 + world/map/npc/006-2/_mobs.txt | 6 - world/map/npc/006-2/_nodes.txt | 4 + world/map/npc/006-3/_import.txt | 1 + world/map/npc/006-3/_mobs.txt | 78 +- world/map/npc/006-3/_nodes.txt | 4 + world/map/npc/007-1/_import.txt | 1 + world/map/npc/007-1/_mobs.txt | 69 +- world/map/npc/007-1/_nodes.txt | 4 + world/map/npc/007-2/_import.txt | 1 + world/map/npc/007-2/_mobs.txt | 6 - world/map/npc/007-2/_nodes.txt | 4 + world/map/npc/007-2/witch.txt | 38 +- world/map/npc/008-1/_import.txt | 1 + world/map/npc/008-1/_mobs.txt | 69 +- world/map/npc/008-1/_nodes.txt | 4 + world/map/npc/008-1/annualeaster.txt | 323 +++---- world/map/npc/009-1/_import.txt | 1 + world/map/npc/009-1/_mobs.txt | 36 +- world/map/npc/009-1/_nodes.txt | 4 + world/map/npc/009-2/_import.txt | 1 + world/map/npc/009-2/_mobs.txt | 6 - world/map/npc/009-2/_nodes.txt | 4 + world/map/npc/009-3/_import.txt | 1 + world/map/npc/009-3/_mobs.txt | 34 +- world/map/npc/009-3/_nodes.txt | 4 + world/map/npc/009-4/_import.txt | 1 + world/map/npc/009-4/_mobs.txt | 35 +- world/map/npc/009-4/_nodes.txt | 4 + world/map/npc/009-5/_import.txt | 1 + world/map/npc/009-5/_mobs.txt | 6 - world/map/npc/009-5/_nodes.txt | 4 + world/map/npc/009-6/_import.txt | 1 + world/map/npc/009-6/_mobs.txt | 6 - world/map/npc/009-6/_nodes.txt | 4 + world/map/npc/009-7/_import.txt | 1 + world/map/npc/009-7/_mobs.txt | 6 - world/map/npc/009-7/_nodes.txt | 4 + world/map/npc/010-1/_import.txt | 1 + world/map/npc/010-1/_mobs.txt | 92 +- world/map/npc/010-1/_nodes.txt | 4 + world/map/npc/010-2/_import.txt | 1 + world/map/npc/010-2/_mobs.txt | 6 - world/map/npc/010-2/_nodes.txt | 4 + world/map/npc/011-1/_import.txt | 1 + world/map/npc/011-1/_mobs.txt | 99 +- world/map/npc/011-1/_nodes.txt | 4 + world/map/npc/011-3/_import.txt | 1 + world/map/npc/011-3/_mobs.txt | 20 +- world/map/npc/011-3/_nodes.txt | 4 + world/map/npc/011-4/_import.txt | 1 + world/map/npc/011-4/_mobs.txt | 40 +- world/map/npc/011-4/_nodes.txt | 4 + world/map/npc/011-6/_import.txt | 1 + world/map/npc/011-6/_mobs.txt | 140 +-- world/map/npc/011-6/_nodes.txt | 4 + world/map/npc/012-1/_import.txt | 1 + world/map/npc/012-1/_mobs.txt | 83 +- world/map/npc/012-1/_nodes.txt | 4 + world/map/npc/012-3/_import.txt | 1 + world/map/npc/012-3/_mobs.txt | 53 +- world/map/npc/012-3/_nodes.txt | 4 + world/map/npc/012-4/_import.txt | 1 + world/map/npc/012-4/_mobs.txt | 174 ++-- world/map/npc/012-4/_nodes.txt | 4 + world/map/npc/013-1/_import.txt | 1 + world/map/npc/013-1/_mobs.txt | 91 +- world/map/npc/013-1/_nodes.txt | 4 + world/map/npc/013-2/_import.txt | 1 + world/map/npc/013-2/_mobs.txt | 6 - world/map/npc/013-2/_nodes.txt | 4 + world/map/npc/013-3/_import.txt | 1 + world/map/npc/013-3/_mobs.txt | 107 +-- world/map/npc/013-3/_nodes.txt | 4 + world/map/npc/014-1/_import.txt | 1 + world/map/npc/014-1/_mobs.txt | 98 +- world/map/npc/014-1/_nodes.txt | 4 + world/map/npc/014-3/_import.txt | 1 + world/map/npc/014-3/_mobs.txt | 13 +- world/map/npc/014-3/_nodes.txt | 4 + world/map/npc/015-1/_import.txt | 1 + world/map/npc/015-1/_mobs.txt | 76 +- world/map/npc/015-1/_nodes.txt | 4 + world/map/npc/015-3/_import.txt | 1 + world/map/npc/015-3/_mobs.txt | 29 +- world/map/npc/015-3/_nodes.txt | 4 + world/map/npc/016-1/_import.txt | 1 + world/map/npc/016-1/_mobs.txt | 66 +- world/map/npc/016-1/_nodes.txt | 4 + world/map/npc/017-1/_import.txt | 1 + world/map/npc/017-1/_mobs.txt | 117 +-- world/map/npc/017-1/_nodes.txt | 4 + world/map/npc/017-2/_import.txt | 1 + world/map/npc/017-2/_mobs.txt | 6 - world/map/npc/017-2/_nodes.txt | 4 + world/map/npc/017-3/_import.txt | 1 + world/map/npc/017-3/_mobs.txt | 6 - world/map/npc/017-3/_nodes.txt | 4 + world/map/npc/017-4/_import.txt | 1 + world/map/npc/017-4/_mobs.txt | 6 - world/map/npc/017-4/_nodes.txt | 4 + world/map/npc/017-9/_import.txt | 1 + world/map/npc/017-9/_mobs.txt | 6 - world/map/npc/017-9/_nodes.txt | 4 + world/map/npc/017-9/npcs.txt | 27 +- world/map/npc/018-1/_import.txt | 1 + world/map/npc/018-1/_mobs.txt | 125 +-- world/map/npc/018-1/_nodes.txt | 4 + world/map/npc/018-2/_import.txt | 1 + world/map/npc/018-2/_mobs.txt | 13 +- world/map/npc/018-2/_nodes.txt | 4 + world/map/npc/018-3/_import.txt | 1 + world/map/npc/018-3/_mobs.txt | 107 +-- world/map/npc/018-3/_nodes.txt | 4 + world/map/npc/019-1/_import.txt | 1 + world/map/npc/019-1/_mobs.txt | 34 +- world/map/npc/019-1/_nodes.txt | 4 + world/map/npc/019-3/_import.txt | 1 + world/map/npc/019-3/_mobs.txt | 20 +- world/map/npc/019-3/_nodes.txt | 4 + world/map/npc/019-4/_import.txt | 1 + world/map/npc/019-4/_mobs.txt | 34 +- world/map/npc/019-4/_nodes.txt | 4 + world/map/npc/020-1/_import.txt | 1 + world/map/npc/020-1/_mobs.txt | 13 +- world/map/npc/020-1/_nodes.txt | 4 + world/map/npc/020-2/_import.txt | 1 + world/map/npc/020-2/_mobs.txt | 6 - world/map/npc/020-2/_nodes.txt | 4 + world/map/npc/020-3/_import.txt | 1 + world/map/npc/020-3/_mobs.txt | 24 +- world/map/npc/020-3/_nodes.txt | 4 + world/map/npc/021-3/_import.txt | 1 + world/map/npc/021-3/_mobs.txt | 51 +- world/map/npc/021-3/_nodes.txt | 4 + world/map/npc/025-1/_import.txt | 1 + world/map/npc/025-1/_mobs.txt | 71 +- world/map/npc/025-1/_nodes.txt | 4 + world/map/npc/025-3/_import.txt | 1 + world/map/npc/025-3/_mobs.txt | 34 +- world/map/npc/025-3/_nodes.txt | 4 + world/map/npc/025-4/_import.txt | 1 + world/map/npc/025-4/_mobs.txt | 15 +- world/map/npc/025-4/_nodes.txt | 4 + world/map/npc/026-1/_import.txt | 1 + world/map/npc/026-1/_mobs.txt | 63 +- world/map/npc/026-1/_nodes.txt | 4 + world/map/npc/027-1/_import.txt | 1 + world/map/npc/027-1/_mobs.txt | 75 +- world/map/npc/027-1/_nodes.txt | 4 + world/map/npc/027-2/_import.txt | 1 + world/map/npc/027-2/_mobs.txt | 46 +- world/map/npc/027-2/_nodes.txt | 16 + world/map/npc/027-3/_import.txt | 1 + world/map/npc/027-3/_mobs.txt | 47 +- world/map/npc/027-3/_nodes.txt | 4 + world/map/npc/027-4/_import.txt | 1 + world/map/npc/027-4/_mobs.txt | 26 +- world/map/npc/027-4/_nodes.txt | 4 + world/map/npc/027-5/_import.txt | 1 + world/map/npc/027-5/_mobs.txt | 45 +- world/map/npc/027-5/_nodes.txt | 4 + world/map/npc/027-6/_import.txt | 1 + world/map/npc/027-6/_mobs.txt | 6 - world/map/npc/027-6/_nodes.txt | 4 + world/map/npc/027-7/_import.txt | 1 + world/map/npc/027-7/_mobs.txt | 6 - world/map/npc/027-7/_nodes.txt | 4 + world/map/npc/027-8/_import.txt | 1 + world/map/npc/027-8/_mobs.txt | 6 - world/map/npc/027-8/_nodes.txt | 4 + world/map/npc/028-1/_import.txt | 1 + world/map/npc/028-1/_mobs.txt | 6 - world/map/npc/028-1/_nodes.txt | 4 + world/map/npc/028-3/_import.txt | 1 + world/map/npc/028-3/_mobs.txt | 6 - world/map/npc/028-3/_nodes.txt | 4 + world/map/npc/029-1/_import.txt | 1 + world/map/npc/029-1/_mobs.txt | 43 +- world/map/npc/029-1/_nodes.txt | 4 + world/map/npc/029-2/_import.txt | 3 +- world/map/npc/029-2/_mobs.txt | 13 +- world/map/npc/029-2/_nodes.txt | 16 + world/map/npc/029-2/alchemy.txt | 48 +- world/map/npc/029-3/_import.txt | 1 + world/map/npc/029-3/_mobs.txt | 6 - world/map/npc/029-3/_nodes.txt | 4 + world/map/npc/030-2/_import.txt | 1 + world/map/npc/030-2/_mobs.txt | 6 - world/map/npc/030-2/_nodes.txt | 4 + world/map/npc/030-3/_import.txt | 1 + world/map/npc/030-3/_mobs.txt | 6 - world/map/npc/030-3/_nodes.txt | 4 + world/map/npc/030-4/_import.txt | 1 + world/map/npc/030-4/_mobs.txt | 6 - world/map/npc/030-4/_nodes.txt | 4 + world/map/npc/031-1/_import.txt | 1 + world/map/npc/031-1/_mobs.txt | 34 +- world/map/npc/031-1/_nodes.txt | 4 + world/map/npc/031-2/_import.txt | 1 + world/map/npc/031-2/_mobs.txt | 6 - world/map/npc/031-2/_nodes.txt | 4 + world/map/npc/031-3/_import.txt | 1 + world/map/npc/031-3/_mobs.txt | 224 ++--- world/map/npc/031-3/_nodes.txt | 4 + world/map/npc/031-4/_import.txt | 1 + world/map/npc/031-4/_mobs.txt | 6 - world/map/npc/031-4/_nodes.txt | 4 + world/map/npc/032-3/_import.txt | 1 + world/map/npc/032-3/_mobs.txt | 71 +- world/map/npc/032-3/_nodes.txt | 4 + world/map/npc/033-1/_import.txt | 1 + world/map/npc/033-1/_mobs.txt | 34 +- world/map/npc/033-1/_nodes.txt | 4 + world/map/npc/034-1/_import.txt | 1 + world/map/npc/034-1/_mobs.txt | 48 +- world/map/npc/034-1/_nodes.txt | 4 + world/map/npc/034-2/_import.txt | 1 + world/map/npc/034-2/_mobs.txt | 6 - world/map/npc/034-2/_nodes.txt | 4 + world/map/npc/035-2/_import.txt | 1 + world/map/npc/035-2/_mobs.txt | 6 - world/map/npc/035-2/_nodes.txt | 4 + world/map/npc/036-2/_import.txt | 1 + world/map/npc/036-2/_mobs.txt | 6 - world/map/npc/036-2/_nodes.txt | 4 + world/map/npc/043-3/_import.txt | 1 + world/map/npc/043-3/_mobs.txt | 49 +- world/map/npc/043-3/_nodes.txt | 4 + world/map/npc/043-4/_import.txt | 1 + world/map/npc/043-4/_mobs.txt | 80 +- world/map/npc/043-4/_nodes.txt | 4 + world/map/npc/045-1/_import.txt | 1 + world/map/npc/045-1/_mobs.txt | 66 +- world/map/npc/045-1/_nodes.txt | 4 + world/map/npc/046-1/_import.txt | 1 + world/map/npc/046-1/_mobs.txt | 63 +- world/map/npc/046-1/_nodes.txt | 4 + world/map/npc/046-3/_import.txt | 1 + world/map/npc/046-3/_mobs.txt | 66 +- world/map/npc/046-3/_nodes.txt | 4 + world/map/npc/047-1/_import.txt | 1 + world/map/npc/047-1/_mobs.txt | 95 +- world/map/npc/047-1/_nodes.txt | 4 + world/map/npc/047-3/_import.txt | 1 + world/map/npc/047-3/_mobs.txt | 78 +- world/map/npc/047-3/_nodes.txt | 4 + world/map/npc/048-2/_import.txt | 1 + world/map/npc/048-2/_mobs.txt | 6 - world/map/npc/048-2/_nodes.txt | 4 + world/map/npc/051-1/_import.txt | 1 + world/map/npc/051-1/_mobs.txt | 20 +- world/map/npc/051-1/_nodes.txt | 4 + world/map/npc/051-3/_import.txt | 1 + world/map/npc/051-3/_mobs.txt | 78 +- world/map/npc/051-3/_nodes.txt | 4 + world/map/npc/052-1/_import.txt | 1 + world/map/npc/052-1/_mobs.txt | 13 +- world/map/npc/052-1/_nodes.txt | 4 + world/map/npc/052-2/_import.txt | 1 + world/map/npc/052-2/_mobs.txt | 6 - world/map/npc/052-2/_nodes.txt | 4 + world/map/npc/055-1/_import.txt | 1 + world/map/npc/055-1/_mobs.txt | 100 +-- world/map/npc/055-1/_nodes.txt | 16 + world/map/npc/055-1/pumpkins.txt | 116 ++- world/map/npc/055-3/_import.txt | 1 + world/map/npc/055-3/_mobs.txt | 52 +- world/map/npc/055-3/_nodes.txt | 4 + world/map/npc/056-2/_import.txt | 1 + world/map/npc/056-2/_mobs.txt | 6 - world/map/npc/056-2/_nodes.txt | 4 + world/map/npc/057-1/_import.txt | 1 + world/map/npc/057-1/_mobs.txt | 97 +- world/map/npc/057-1/_nodes.txt | 16 + world/map/npc/annuals/fathertime.txt | 8 +- world/map/npc/annuals/halloween/debug.txt | 1 - world/map/npc/annuals/xmas/debug.txt | 1 - world/map/npc/botcheck/_import.txt | 1 + world/map/npc/botcheck/_mobs.txt | 6 - world/map/npc/botcheck/_nodes.txt | 4 + world/map/npc/commands/README.md | 140 --- .../map/npc/commands/_atcommand_local.txt.example | 21 +- world/map/npc/commands/_import.txt | 5 + world/map/npc/commands/_procedures.txt | 2 +- world/map/npc/commands/changesex.txt | 34 + world/map/npc/commands/class.txt | 33 + world/map/npc/commands/debug.txt | 992 +++++++++++++++++++++ world/map/npc/commands/numa.txt | 132 +++ world/map/npc/commands/pullrabbit.txt | 25 + world/map/npc/commands/zeny.txt | 12 +- world/map/npc/functions/clear_vars.txt | 3 +- world/map/npc/functions/debug.txt | 988 -------------------- world/map/npc/functions/default_npc_checks.txt | 1 + world/map/npc/functions/game_rules.txt | 6 +- world/map/npc/functions/global_event_handler.txt | 8 +- world/map/npc/functions/superdebug.txt | 69 -- world/map/npc/items/magic_gm_top_hat.txt | 25 - world/map/npc/magic/README.md | 22 +- world/map/npc/magic/_import.txt | 1 + world/map/npc/magic/_procedures.txt | 19 +- world/map/npc/magic/level0-wand.txt | 12 +- world/map/npc/magic/level1-aggravate.txt | 5 +- world/map/npc/magic/level1-detect-magic.txt | 7 +- world/map/npc/magic/level1-experience.txt | 7 +- world/map/npc/magic/level1-flare-dart.txt | 14 +- world/map/npc/magic/level1-grow-alizarin.txt | 5 +- world/map/npc/magic/level1-grow-cobalt.txt | 5 +- world/map/npc/magic/level1-grow-gamboge.txt | 5 +- world/map/npc/magic/level1-grow-mauve.txt | 5 +- world/map/npc/magic/level1-lesser-heal.txt | 7 +- world/map/npc/magic/level1-magic-blade.txt | 8 +- world/map/npc/magic/level1-make-sulphur.txt | 5 +- world/map/npc/magic/level1-sense-spouse.txt | 25 + world/map/npc/magic/level1-summon-maggots.txt | 5 +- world/map/npc/magic/level1-transmute-wood.txt | 5 +- world/map/npc/magic/level2-arrow-hail.txt | 9 +- world/map/npc/magic/level2-barrier.txt | 6 +- world/map/npc/magic/level2-detect-players.txt | 7 +- world/map/npc/magic/level2-enchant-lifestone.txt | 5 +- world/map/npc/magic/level2-flying-backpack.txt | 6 +- world/map/npc/magic/level2-happy-curse.txt | 5 +- world/map/npc/magic/level2-hide.txt | 6 +- world/map/npc/magic/level2-lay-on-hands.txt | 5 +- world/map/npc/magic/level2-lightning-strike.txt | 10 +- world/map/npc/magic/level2-magic-knuckles.txt | 10 +- world/map/npc/magic/level2-make-arrows.txt | 5 +- world/map/npc/magic/level2-make-iron-powder.txt | 5 +- world/map/npc/magic/level2-make-shirt.txt | 5 +- world/map/npc/magic/level2-make-short-tanktop.txt | 5 +- world/map/npc/magic/level2-make-tanktop.txt | 5 +- world/map/npc/magic/level2-protect.txt | 6 +- world/map/npc/magic/level2-rain.txt | 9 +- world/map/npc/magic/level2-shear.txt | 8 +- world/map/npc/magic/level2-summon-fluffies.txt | 5 +- world/map/npc/magic/level2-summon-mouboo.txt | 5 +- world/map/npc/magic/level2-summon-pinkie.txt | 5 +- world/map/npc/magic/level2-summon-snakes.txt | 5 +- .../map/npc/magic/level2-summon-spiky-mushroom.txt | 5 +- .../map/npc/magic/level2-summon-wickedmushroom.txt | 5 +- world/map/npc/magic/level2-toxic-dart.txt | 13 +- world/map/npc/magic/level3-necromancy.txt | 3 +- world/map/npc/scripts.conf | 3 - 391 files changed, 3229 insertions(+), 5762 deletions(-) delete mode 100644 world/map/conf/magic-anchors.sex delete mode 100644 world/map/conf/magic-config.sex delete mode 100644 world/map/conf/magic-misc.sex delete mode 100644 world/map/conf/magic-procedures.sex delete mode 100644 world/map/conf/magic-quickdebug.sex create mode 100644 world/map/npc/001-1/_nodes.txt create mode 100644 world/map/npc/001-2/_nodes.txt create mode 100644 world/map/npc/001-3/_nodes.txt create mode 100644 world/map/npc/002-1/_nodes.txt create mode 100644 world/map/npc/002-2/_nodes.txt create mode 100644 world/map/npc/002-3/_nodes.txt create mode 100644 world/map/npc/002-4/_nodes.txt create mode 100644 world/map/npc/002-5/_nodes.txt create mode 100644 world/map/npc/004-3/_nodes.txt create mode 100644 world/map/npc/004-4/_nodes.txt create mode 100644 world/map/npc/004-5/_nodes.txt create mode 100644 world/map/npc/005-3/_nodes.txt create mode 100644 world/map/npc/006-1/_nodes.txt create mode 100644 world/map/npc/006-2/_nodes.txt create mode 100644 world/map/npc/006-3/_nodes.txt create mode 100644 world/map/npc/007-1/_nodes.txt create mode 100644 world/map/npc/007-2/_nodes.txt create mode 100644 world/map/npc/008-1/_nodes.txt create mode 100644 world/map/npc/009-1/_nodes.txt create mode 100644 world/map/npc/009-2/_nodes.txt create mode 100644 world/map/npc/009-3/_nodes.txt create mode 100644 world/map/npc/009-4/_nodes.txt create mode 100644 world/map/npc/009-5/_nodes.txt create mode 100644 world/map/npc/009-6/_nodes.txt create mode 100644 world/map/npc/009-7/_nodes.txt create mode 100644 world/map/npc/010-1/_nodes.txt create mode 100644 world/map/npc/010-2/_nodes.txt create mode 100644 world/map/npc/011-1/_nodes.txt create mode 100644 world/map/npc/011-3/_nodes.txt create mode 100644 world/map/npc/011-4/_nodes.txt create mode 100644 world/map/npc/011-6/_nodes.txt create mode 100644 world/map/npc/012-1/_nodes.txt create mode 100644 world/map/npc/012-3/_nodes.txt create mode 100644 world/map/npc/012-4/_nodes.txt create mode 100644 world/map/npc/013-1/_nodes.txt create mode 100644 world/map/npc/013-2/_nodes.txt create mode 100644 world/map/npc/013-3/_nodes.txt create mode 100644 world/map/npc/014-1/_nodes.txt create mode 100644 world/map/npc/014-3/_nodes.txt create mode 100644 world/map/npc/015-1/_nodes.txt create mode 100644 world/map/npc/015-3/_nodes.txt create mode 100644 world/map/npc/016-1/_nodes.txt create mode 100644 world/map/npc/017-1/_nodes.txt create mode 100644 world/map/npc/017-2/_nodes.txt create mode 100644 world/map/npc/017-3/_nodes.txt create mode 100644 world/map/npc/017-4/_nodes.txt create mode 100644 world/map/npc/017-9/_nodes.txt create mode 100644 world/map/npc/018-1/_nodes.txt create mode 100644 world/map/npc/018-2/_nodes.txt create mode 100644 world/map/npc/018-3/_nodes.txt create mode 100644 world/map/npc/019-1/_nodes.txt create mode 100644 world/map/npc/019-3/_nodes.txt create mode 100644 world/map/npc/019-4/_nodes.txt create mode 100644 world/map/npc/020-1/_nodes.txt create mode 100644 world/map/npc/020-2/_nodes.txt create mode 100644 world/map/npc/020-3/_nodes.txt create mode 100644 world/map/npc/021-3/_nodes.txt create mode 100644 world/map/npc/025-1/_nodes.txt create mode 100644 world/map/npc/025-3/_nodes.txt create mode 100644 world/map/npc/025-4/_nodes.txt create mode 100644 world/map/npc/026-1/_nodes.txt create mode 100644 world/map/npc/027-1/_nodes.txt create mode 100644 world/map/npc/027-2/_nodes.txt create mode 100644 world/map/npc/027-3/_nodes.txt create mode 100644 world/map/npc/027-4/_nodes.txt create mode 100644 world/map/npc/027-5/_nodes.txt create mode 100644 world/map/npc/027-6/_nodes.txt create mode 100644 world/map/npc/027-7/_nodes.txt create mode 100644 world/map/npc/027-8/_nodes.txt create mode 100644 world/map/npc/028-1/_nodes.txt create mode 100644 world/map/npc/028-3/_nodes.txt create mode 100644 world/map/npc/029-1/_nodes.txt create mode 100644 world/map/npc/029-2/_nodes.txt create mode 100644 world/map/npc/029-3/_nodes.txt create mode 100644 world/map/npc/030-2/_nodes.txt create mode 100644 world/map/npc/030-3/_nodes.txt create mode 100644 world/map/npc/030-4/_nodes.txt create mode 100644 world/map/npc/031-1/_nodes.txt create mode 100644 world/map/npc/031-2/_nodes.txt create mode 100644 world/map/npc/031-3/_nodes.txt create mode 100644 world/map/npc/031-4/_nodes.txt create mode 100644 world/map/npc/032-3/_nodes.txt create mode 100644 world/map/npc/033-1/_nodes.txt create mode 100644 world/map/npc/034-1/_nodes.txt create mode 100644 world/map/npc/034-2/_nodes.txt create mode 100644 world/map/npc/035-2/_nodes.txt create mode 100644 world/map/npc/036-2/_nodes.txt create mode 100644 world/map/npc/043-3/_nodes.txt create mode 100644 world/map/npc/043-4/_nodes.txt create mode 100644 world/map/npc/045-1/_nodes.txt create mode 100644 world/map/npc/046-1/_nodes.txt create mode 100644 world/map/npc/046-3/_nodes.txt create mode 100644 world/map/npc/047-1/_nodes.txt create mode 100644 world/map/npc/047-3/_nodes.txt create mode 100644 world/map/npc/048-2/_nodes.txt create mode 100644 world/map/npc/051-1/_nodes.txt create mode 100644 world/map/npc/051-3/_nodes.txt create mode 100644 world/map/npc/052-1/_nodes.txt create mode 100644 world/map/npc/052-2/_nodes.txt create mode 100644 world/map/npc/055-1/_nodes.txt create mode 100644 world/map/npc/055-3/_nodes.txt create mode 100644 world/map/npc/056-2/_nodes.txt create mode 100644 world/map/npc/057-1/_nodes.txt create mode 100644 world/map/npc/botcheck/_nodes.txt delete mode 100644 world/map/npc/commands/README.md create mode 100644 world/map/npc/commands/changesex.txt create mode 100644 world/map/npc/commands/class.txt create mode 100644 world/map/npc/commands/debug.txt create mode 100644 world/map/npc/commands/numa.txt create mode 100644 world/map/npc/commands/pullrabbit.txt delete mode 100755 world/map/npc/functions/debug.txt delete mode 100644 world/map/npc/functions/superdebug.txt delete mode 100644 world/map/npc/items/magic_gm_top_hat.txt create mode 100644 world/map/npc/magic/level1-sense-spouse.txt (limited to 'world') diff --git a/world/map/conf/magic-anchors.sex b/world/map/conf/magic-anchors.sex deleted file mode 100644 index 3bb16f75..00000000 --- a/world/map/conf/magic-anchors.sex +++ /dev/null @@ -1,66 +0,0 @@ -"--------------------------------------------------------------------------------" -" Teleport anchors(disabled) " -" As of now, only the #vorp spell(disabled) uses them " -"--------------------------------------------------------------------------------" -(DISABLED - (TELEPORT-ANCHOR tulimshar "tulimshar" - (@+ - (@ "001-1" 43 66) - 3 - 3))) - -(DISABLED - (TELEPORT-ANCHOR hurnscald "hurnscald" - (@+ - (@ "009-1" 55 37) - 3 - 3))) - -(DISABLED - (TELEPORT-ANCHOR nivalis "nivalis" - (@+ - (@ "020-1" 75 63) - 19 - 12))) - -(DISABLED - (TELEPORT-ANCHOR wizardhut "##00" - (@+ - (@ "013-1" 41 92) - 3 - 3))) - -(DISABLED - (TELEPORT-ANCHOR pachua "##01" - (@+ - (@ "006-1" 22 101) - 3 - 3))) - -(DISABLED - (TELEPORT-ANCHOR desert "##02" - (@+ - (@ "005-1" 160 64) - 5 - 5))) - -(DISABLED - (TELEPORT-ANCHOR forest "##03" - (@+ - (@ "015-1" 35 35) - 40 - 40))) - -(DISABLED - (TELEPORT-ANCHOR snakecave "##04" - (@+ - (@ "011-4" 50 75) - 3 - 3))) - -(DISABLED - (TELEPORT-ANCHOR dimondscove "##05" - (@+ - (@ "010-2" 23 79) - 3 - 3))) diff --git a/world/map/conf/magic-config.sex b/world/map/conf/magic-config.sex deleted file mode 100644 index a130becf..00000000 --- a/world/map/conf/magic-config.sex +++ /dev/null @@ -1,68 +0,0 @@ -"Special-purpose globals" -(SET obscure_chance 95) -(SET min_casttime 200) - -"Schools of magic" -(CONST MAGIC 340) -(CONST LIFE 341) -(CONST WAR 342) -(CONST TRANSMUTE 343) -(CONST NATURE 344) -(CONST ASTRAL 345) -(CONST DARK 346) - -"Elements" -(CONST ELT_NEUTRAL 0) -(CONST ELT_WATER 1) -(CONST ELT_EARTH 2) -(CONST ELT_FIRE 3) -(CONST ELT_WIND 4) -(CONST ELT_POISON 5) -(CONST ELT_SHADOW 6) -(CONST ELT_HOLY 7) -(CONST ELT_GHOST 8) -(CONST ELT_UNDEAD 9) - -"Status effects" -(CONST SC_POISON 132) -(CONST SC_SHEARED 194) "This is the same as SC_HIDE, since mobs can't hide and shearing is only used for mobs. Feel free to fix!" -(CONST SC_HIDE 194) -(CONST SC_HALT_REGENERATE 195) -(CONST SC_FLYING_BACKPACK 196) -(CONST SC_MBARRIER 197) -(CONST SC_HASTE 198) -(CONST SC_PHYS_SHIELD 199) -(CONST SO_GMHIDE 64) -(CONST SO_GMINVISIBLE 4096) - -"Special effects" -(CONST SFX_DEFAULT 10) -(CONST SFX_SUMMON_START 21) -(CONST SFX_SUMMON_FIRE 22) -(CONST SFX_TELEPORT 24) -(CONST SFX_RAIN 25) -(CONST SFX_HIT 25) -(CONST SFX_ARROW_HAIL 27) -(CONST SFX_BARRIER 10) -(CONST SFX_UNBARRIER 10) -(CONST SFX_HEAL 3) -(CONST SFX_LIGHTNING 18) - -"Magic Spell Const" -(CONST MIN_MARRY_LEVEL 32) -(CONST MAX_RAIN_SPELL_RADIUS 15) -(CONST MAX_MAGIC_LEVEL 2) "Increase up to 5 as each new magic level is completed." -(CONST MAGIC_FLAGS "MAGIC_FLAGS") -(CONST MFLAG_MADE_CONC_POTION 16384) -(CONST MFLAG_MADE_CONC_POTION_SHIFT 14) -(CONST SCRIPT_XP "MAGIC_EXPERIENCE") -(CONST SCRIPT_XP_MASK 0xffff) -(CONST SCRIPT_XP_SHIFT 0) -(CONST SCRIPT_LASTSPELL_MASK 0xff) -(CONST SCRIPT_LASTSPELL_SHIFT 16) -(CONST SCRIPT_HEALSPELL_MASK 0xff) -(CONST SCRIPT_HEALSPELL_SHIFT 24) -(CONST DEBUG 0) -(CONST ATTACK_ICON_GENERIC 2000) -(CONST ATTACK_ICON_SHEARING 2001) -(CONST E10_FLAG_USED_FREE_WARP_SHIFT 17) diff --git a/world/map/conf/magic-misc.sex b/world/map/conf/magic-misc.sex deleted file mode 100644 index 14d6ea3a..00000000 --- a/world/map/conf/magic-misc.sex +++ /dev/null @@ -1,105 +0,0 @@ -"--------------------------------------------------------------------------------" -" Special-purpose quasispells " -"--------------------------------------------------------------------------------" - -(SPELL (NONMAGIC SILENT) marriage "marry" (PC target) - (=> - (GUARD - (REQUIRE - (|| - (is_in - (location caster) - (@+ - (@ "014-1" 28 39) - 8 - 6)) - (is_in - (location caster) - (@+ - (@ "001-2" 21 27) - 4 - 4))))) - (EFFECT - (IF (== target caster) - (ABORT)) "no valid target or tried to marry self?" - (IF (< - (level caster) - MIN_MARRY_LEVEL) - (BLOCK - (message caster - (+ - (+ "You must be level " MIN_MARRY_LEVEL) - " or higher to marry!")) - (ABORT))) - (IF (< - (level target) - MIN_MARRY_LEVEL) - (BLOCK - (message caster - (+ - (+ "Your partner must be level " MIN_MARRY_LEVEL) - " or higher to marry!")) - (ABORT))) - (IF (== - (partner caster) - target) - (BLOCK - (message caster - (+ - (+ "You and " - (name_of target)) - " are already married.")) - (ABORT))) - (IF (is_married caster) - (BLOCK - (message caster "You are already married!") - (ABORT))) - (IF (is_married target) - (BLOCK - (message caster - (+ - (name_of target) - " is already married.")) - (ABORT))) - (IF (!= - (distance - (location caster) - (location target)) - 1) - (BLOCK - (message caster "You need to stand next to each other.") - (ABORT))) - (IF (|| - (== - (count_item caster "WeddingRing") - 0) - (== - (count_item target "WeddingRing") - 0)) - (BLOCK - (message caster "You must both be wearing your wedding rings!") - (ABORT))) - (SET script_target target) - (SCRIPT "{ - announce @caster_name$ + \" is asking \" + strcharinfo(0) + \" for marriage.\", 2; - mes @caster_name$ + \" wishes to marry you.\"; - mes \"Do you accept?\"; - next; - menu - \"Yes, I do!\", L_yes, - \"No.\", L_Close; - - L_yes: - if (marriage(@caster_name$)) - announce @caster_name$ + \" and \" + strcharinfo(0) + \" are now married!\", 0; - goto L_Close; - - L_Close: - close; - }") - (IF (not - (is_married caster)) - (message caster - (+ - (name_of target) - " turned down your marriage offer.")))))) diff --git a/world/map/conf/magic-procedures.sex b/world/map/conf/magic-procedures.sex deleted file mode 100644 index 0ba40bc8..00000000 --- a/world/map/conf/magic-procedures.sex +++ /dev/null @@ -1,340 +0,0 @@ -"Default sfx on caster" -(PROCEDURE default_effect () - (sfx caster - (+ - (- school MAGIC) - 2) - 0)) - -(PROCEDURE sfx_generic (target) - (sfx target SFX_DEFAULT 0)) - -(PROCEDURE sfx_lightning (target) - (sfx target SFX_LIGHTNING 0)) - -(PROCEDURE set_var (name mask shift value) - (set_script_variable caster name - (| - (& - (script_int caster name) - (neg - (<< mask shift))) - (<< - (& value mask) - shift)))) - -"value is How many HP we healed" -"gain is how many life magic experience points we can potentially gain" -"heal_xp_value_divisor is 1 for instaheal, 2 for slow heal" -"base_exp_factor is the factor for how many base experience points (max) the player should be allowed to gain" -(PROCEDURE gain_heal_xp (value gain heal_xp_value_divisor base_exp_factor) - (SET last_heal_xp - (& - (>> - (script_int caster SCRIPT_XP) - SCRIPT_HEALSPELL_SHIFT) - SCRIPT_HEALSPELL_MASK)) - (IF (&& - (!= target caster) - (> - (/ value heal_xp_value_divisor) - (+ - (+ - (+ 10 last_heal_xp) - (random - (+ last_heal_xp 1))) - (random - (+ last_heal_xp 1))))) - (BLOCK - (SET heal_xp - (+ last_heal_xp gain)) - (IF (> heal_xp SCRIPT_HEALSPELL_MASK) - (SET heal_xp SCRIPT_HEALSPELL_MASK)) - (CALL set_var SCRIPT_XP SCRIPT_HEALSPELL_MASK SCRIPT_HEALSPELL_SHIFT heal_xp))) - (IF (!= target caster) - (gain_experience caster - (* base_exp_factor - (extract_healer_experience target value)) - 0 - 1))) - -(PROCEDURE gain_xp (gain index) - "Level 4 and 5 magic users don't gain anything from spell levels 0 resp. 0+1" - (IF (> - (+ level 3) - (skill caster MAGIC)) - (BLOCK - (SET last_index - (& - (>> - (script_int caster SCRIPT_XP) - SCRIPT_LASTSPELL_SHIFT) - SCRIPT_LASTSPELL_MASK)) - (SET last_xp - (& - (>> - (script_int caster SCRIPT_XP) - SCRIPT_XP_SHIFT) - SCRIPT_XP_MASK)) - (IF (!= index last_index) - (BLOCK "Some variation observed" - (SET xp - (+ last_xp gain)) - (IF (> xp SCRIPT_XP_MASK) - (SET xp SCRIPT_XP_MASK)) - (CALL set_var SCRIPT_XP SCRIPT_XP_MASK SCRIPT_XP_SHIFT xp) - (CALL set_var SCRIPT_XP SCRIPT_LASTSPELL_MASK SCRIPT_LASTSPELL_SHIFT index) - (IF DEBUG - (message caster - (+ "Spell xp = " xp)))) - (IF DEBUG - (message caster - (+ "Re-cast same spell, xp remain at " last_xp))))))) - -(PROCEDURE create_item (good_item count bad_item difficulty) - (SET success 1) - (SET score - (+ experience - (random - (min spellpower - (+ - (/ experience 3) - 1))))) - (IF (>= score difficulty) - (create_item caster good_item count) - (BLOCK - (SET success 0) - (SET score - (+ - (+ score - (random - (luk caster))) - (random - (luk caster)))) - (IF (< score - (/ difficulty 3)) - (BLOCK - (message caster "Your spell backfires!") - (IF (< - (random 110) - (luk caster)) - (itemheal caster - (- 0 - (* - (* - (+ level 1) - (+ level 2)) - (+ 3 - (random 28)))) - 0) - (itemheal caster - (- 0 - (+ level 1)) - 0))) - (IF (< score - (/ - (* difficulty 2) - 3)) - (BLOCK - (IF (== - (random 5) - 0) - (BLOCK - (message caster "Your spell solidifies into the shape of a mysterious object!") - (create_item caster "Iten" 1)) - (message caster "Your spell escapes!"))) - (BLOCK - (message caster "Your spell takes on a mind of its own!") - (IF (== - (random 3) - 0) - (create_item caster bad_item 1)))))))) - -"Increase spellpower by school and general magic skill" -(PROCEDURE adjust_spellpower (school) - (SET experience - (& - (>> - (script_int caster SCRIPT_XP) - SCRIPT_XP_SHIFT) - SCRIPT_XP_MASK)) - (SET spellpower - (+ spellpower - (* - (+ - (skill caster MAGIC) - (skill caster school)) - 10))) - "Below, we adjust by special items" - (IF (&& - (not - (failed target)) - (|| - (== school LIFE) - (== school NATURE))) - (IF target - (IF (== - (pc target) - (partner caster)) - (BLOCK - (SET spellpower - (+ spellpower 200)) - (IF (is_equipped caster "WeddingRing") - (SET spellpower - (+ spellpower 50))) - (IF (is_equipped - (pc target) - "WeddingRing") - (SET spellpower - (+ spellpower 50)))))))) - -(PROCEDURE heal (target max_heal) - (CALL default_effect) - (IF (!= caster target) - (sfx target SFX_HEAL 0)) - (SET power - (+ spellpower - (vit caster))) - (SET power - (min max_heal - (/ - (* max_heal power) - 250))) - (itemheal target power 0)) - -"Goes through instaheal instead of itemheal" -(PROCEDURE quickheal (target power) - (CALL default_effect) - (IF (!= caster target) - (sfx target SFX_HEAL 0)) - (instaheal target power 0)) - -"Can attack the target? Imports attack_range from dynamic environment" -(PROCEDURE attack_check (target) - (IF (not - (line_of_sight - (location caster) - (location target))) - (ABORT)) - (IF (not - (<= - (rdistance - (location caster) - (location target)) - attack_range)) - (ABORT))) - -"Cause elemental damage. bonus_elt grants an attack bonus, malus_elt reduces the attack. `effect' is the sfx ID." -(PROCEDURE elt_damage (target damage dmgplus bonus_elt malus_elt effect) - (SET d - (+ damage - (random dmgplus))) - (IF (== - (element target) - malus_elt) - (SET d - (/ d 3))) - (IF (== - (element target) - bonus_elt) - (SET d - (/ - (* d - (+ 4 - (element_level target))) - 4))) - (sfx target effect 0) - (injure caster target d 0)) - -(PROCEDURE melee_damage (target damage dmgplus) - (CALL attack_check target) - (SET d - (+ damage - (random dmgplus))) - (SET evade - (+ - (level target) - (mdef target))) - (IF (< - (- spellpower - (random 100)) - evade) - (SET d 0)) - (injure caster target d 0)) - -(PROCEDURE install_attack_spell (charges base_delay range attack_animation) - (CALL default_effect) - (SET attack_range range) - (override_attack caster charges - (/ - (* - (- 200 - (agi caster)) - base_delay) - 200) - range - ATTACK_ICON_GENERIC - attack_animation - 0)) - -(PROCEDURE install_melee_spell (charges base_delay attack_animation) - (CALL install_attack_spell charges base_delay 1 attack_animation)) - -(PROCEDURE summon_spell (mob_id count delay lifetime control_level school) - (CALL default_effect) - (sfx location SFX_SUMMON_START 0) - (WAIT delay) - (sfx location SFX_SUMMON_FIRE 0) - (spawn - (rbox location 2) - caster - mob_id - (if_then_else - (>= - (skill caster school) - control_level) - 2 - 1) - count - lifetime)) "pets when level is high enough" - -(PROCEDURE abort_on_area_shield (pos) - (IF (&& - (== - (is_exterior pos) - 1) - (|| - (|| - (== - (map_nr pos) - 1) - (== - (map_nr pos) - 9)) - (== - (map_nr pos) - 20))) - (BLOCK "1 is Tulimshar, 9 is Hurnscald and 20 is Nivalis" - (message caster "A powerful magic drains your spell just as it is beginning to take shape!") - (ABORT)))) - -(PROCEDURE script_split_str (d str v m) - (FOR a 0 m - (BLOCK - (IF (< (strlen str) 1) (BREAK)) - (SET arglen (strlen str)) - (SET argoffset - (if_then_else - (contains_string str d) - (strstr str d) - arglen)) - (SET arg - (if_then_else (== arglen argoffset) - str - (substr str 0 argoffset))) - (set_script_str caster (+ (+ "@" v) (+ a "$")) arg) - (SET str - (if_then_else - (> arglen (- argoffset 1)) - (substr str (+ argoffset 1) arglen) - ""))))) diff --git a/world/map/conf/magic-quickdebug.sex b/world/map/conf/magic-quickdebug.sex deleted file mode 100644 index 1b5f582c..00000000 --- a/world/map/conf/magic-quickdebug.sex +++ /dev/null @@ -1,10 +0,0 @@ -"--------------------------------------------------------------------------------" -"Quickdebug Spells" -"--------------------------------------------------------------------------------" -(SPELL (NONMAGIC SILENT) debug0 "#debug" () - (EFFECT - (SCRIPT "{if(!debug&&(getgmlevel()<99))end;callfunc \"Debug\";}"))) - -(SPELL (NONMAGIC SILENT) debug1 "#numa" () - (EFFECT - (SCRIPT "{if(!debug&&(getgmlevel()<99))end;callfunc \"SuperDebug\";}"))) diff --git a/world/map/db/item_db_head.txt b/world/map/db/item_db_head.txt index 9cd56c4e..9faaf4c2 100644 --- a/world/map/db/item_db_head.txt +++ b/world/map/db/item_db_head.txt @@ -63,7 +63,7 @@ 885, GreenEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {} 886, OrangeEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {} 887, DarkEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {} -888, MagicGMTopHat, 5, 4200, 1900, 30, 0, 60, 0, 20, 0, 2, 256, 0, 0, 0, {}, {set @minLvl, 60; callfunc "RestrictedItem"; bonus bMaxHP, 31000; bonus bFlee, -200; bonus bHPrecovRate, -400; bonus bCriticalDef, 250; bonus bMdef, 89;} +888, MagicGMTopHat, 5, 4200, 1900, 30, 0, 60, 0, 20, 0, 2, 256, 0, 0, 0, {}, {set @minLvl, get(.killthegm, "GM"); callfunc "RestrictedItem"; bonus bMaxHP, 31000; bonus bFlee, -200; bonus bHPrecovRate, -400; bonus bCriticalDef, 250; bonus bMdef, 89;} 889, MurdererCrown, 5, 75000, 12000, 240, 0, 4, 0, 0, 0, 2, 256, 0, 0, 0, {}, {} 890, BeanieCopter, 5, 8000, 2000, 20, 0, 4, 0, 2, 0, 2, 256, 0, 0, 0, {}, {} 897, RedRoseHat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} diff --git a/world/map/db/params.txt b/world/map/db/params.txt index b10a4dce..2bf45896 100644 --- a/world/map/db/params.txt +++ b/world/map/db/params.txt @@ -43,6 +43,8 @@ JOBLEVEL 55 1 PARTNER 57 1 GM 500 1 ATTACKRANGE 1000 1 +ELTLVL 1001 1 +ELTTYPE 1002 1 BASE_ATK 1014 1 POS_X 1074 1 POS_Y 1075 1 diff --git a/world/map/npc/001-1/_import.txt b/world/map/npc/001-1/_import.txt index 9b7ca66f..3122724c 100644 --- a/world/map/npc/001-1/_import.txt +++ b/world/map/npc/001-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 001-1 npc: npc/001-1/_mobs.txt +npc: npc/001-1/_nodes.txt npc: npc/001-1/_warps.txt npc: npc/001-1/adrian.txt npc: npc/001-1/ched.txt diff --git a/world/map/npc/001-1/_mobs.txt b/world/map/npc/001-1/_mobs.txt index 6fc46da5..ebc1b007 100644 --- a/world/map/npc/001-1/_mobs.txt +++ b/world/map/npc/001-1/_mobs.txt @@ -1,29 +1,8 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Tulimshar Port mobs -001-1,32,59,10,11|monster|GreenSlime|1005,8,100000ms,30000ms,Mob001-1::On1005 -001-1,45,100,10,11|monster|GreenSlime|1005,8,100000ms,30000ms,Mob001-1::On1005 -001-1,37,75,8,34|monster|SeaSlime|1033,8,100000ms,30000ms,Mob001-1::On1033 -001-1,86,84,65,55|monster|Maggot|1002,11,100000ms,30000ms,Mob001-1::On1002 -001-1,86,84,65,55|monster|SeaSlime|1033,8,100000ms,30000ms,Mob001-1::On1033 - - -001-1,0,0,0|script|Mob001-1|32767 -{ - end; - -On1002: - set @mobID, 1002; - callfunc "MobPoints"; - end; - -On1005: - set @mobID, 1005; - callfunc "MobPoints"; - end; - -On1033: - set @mobID, 1033; - callfunc "MobPoints"; - end; -} +001-1,32,59,10,11|monster|GreenSlime|1005,8,100000ms,30000ms +001-1,45,100,10,11|monster|GreenSlime|1005,8,100000ms,30000ms +001-1,37,75,8,34|monster|SeaSlime|1033,8,100000ms,30000ms +001-1,86,84,65,55|monster|Maggot|1002,11,100000ms,30000ms +001-1,86,84,65,55|monster|SeaSlime|1033,8,100000ms,30000ms diff --git a/world/map/npc/001-1/_nodes.txt b/world/map/npc/001-1/_nodes.txt new file mode 100644 index 00000000..8d82cc96 --- /dev/null +++ b/world/map/npc/001-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Tulimshar Port nodes + +// (no nodes) diff --git a/world/map/npc/001-2/_import.txt b/world/map/npc/001-2/_import.txt index 338ec411..ee75d70e 100644 --- a/world/map/npc/001-2/_import.txt +++ b/world/map/npc/001-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 001-2 npc: npc/001-2/_mobs.txt +npc: npc/001-2/_nodes.txt npc: npc/001-2/_warps.txt npc: npc/001-2/bank.txt npc: npc/001-2/david.txt diff --git a/world/map/npc/001-2/_mobs.txt b/world/map/npc/001-2/_mobs.txt index 167e1f2e..570c1234 100644 --- a/world/map/npc/001-2/_mobs.txt +++ b/world/map/npc/001-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // South Tulimshar Indoor mobs - - -001-2,0,0,0|script|Mob001-2|32767 -{ - end; -} diff --git a/world/map/npc/001-2/_nodes.txt b/world/map/npc/001-2/_nodes.txt new file mode 100644 index 00000000..5a5cdeac --- /dev/null +++ b/world/map/npc/001-2/_nodes.txt @@ -0,0 +1,16 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// South Tulimshar Indoor nodes + +001-2,0,0,0|script|Node001-2|32767 +{ + end; +OnInit: + setarray .m$, "_N-Alchemy", "001-2", "001-2", "001-2", "001-2"; + setarray .x1, "_N-Alchemy", 98, 92, 98, 92; + setarray .y1, "_N-Alchemy", 76, 76, 89, 89; + setarray .x2, "_N-Alchemy", 0, 0, 0, 0; + setarray .y2, "_N-Alchemy", 0, 0, 0, 0; + setarray .id, "_N-Alchemy", 0, 0, 0, 0; + donpcevent "_N-Alchemy::OnMaybeStart"; + destroy; +} diff --git a/world/map/npc/001-3/_import.txt b/world/map/npc/001-3/_import.txt index 92e0e964..5c821ae4 100644 --- a/world/map/npc/001-3/_import.txt +++ b/world/map/npc/001-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 001-3 npc: npc/001-3/_mobs.txt +npc: npc/001-3/_nodes.txt npc: npc/001-3/_warps.txt npc: npc/001-3/guards.txt npc: npc/001-3/mapflags.txt diff --git a/world/map/npc/001-3/_mobs.txt b/world/map/npc/001-3/_mobs.txt index 1c76eac9..63e16e8c 100644 --- a/world/map/npc/001-3/_mobs.txt +++ b/world/map/npc/001-3/_mobs.txt @@ -1,15 +1,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Tulimshar Arena mobs -001-3,0,0,0,0|monster|Maggot|1002,10,0ms,0ms,Mob001-3::On1002 - - -001-3,0,0,0|script|Mob001-3|32767 -{ - end; - -On1002: - set @mobID, 1002; - callfunc "MobPoints"; - end; -} +001-3,0,0,0,0|monster|Maggot|1002,10,0ms,0ms diff --git a/world/map/npc/001-3/_nodes.txt b/world/map/npc/001-3/_nodes.txt new file mode 100644 index 00000000..8a03ab93 --- /dev/null +++ b/world/map/npc/001-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Tulimshar Arena nodes + +// (no nodes) diff --git a/world/map/npc/002-1/_import.txt b/world/map/npc/002-1/_import.txt index 66366b6c..1e4e50cf 100644 --- a/world/map/npc/002-1/_import.txt +++ b/world/map/npc/002-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 002-1 npc: npc/002-1/_mobs.txt +npc: npc/002-1/_nodes.txt npc: npc/002-1/_warps.txt npc: npc/002-1/anwar.txt npc: npc/002-1/bard.txt diff --git a/world/map/npc/002-1/_mobs.txt b/world/map/npc/002-1/_mobs.txt index 19933fab..63282a48 100644 --- a/world/map/npc/002-1/_mobs.txt +++ b/world/map/npc/002-1/_mobs.txt @@ -1,47 +1,16 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Tulimshar South mobs -002-1,93,62,24,9|monster|Maggot|1002,11,100000ms,30000ms,Mob002-1::On1002 -002-1,112,62,11,9|monster|Maggot|1002,11,100000ms,30000ms,Mob002-1::On1002 -002-1,108,73,11,9|monster|Maggot|1002,11,100000ms,30000ms,Mob002-1::On1002 -002-1,62,28,3,15|monster|Maggot|1002,6,100000ms,30000ms,Mob002-1::On1002 -002-1,74,96,24,33|monster|Scorpion|1003,12,100000ms,30000ms,Mob002-1::On1003 -002-1,113,114,10,7|monster|Maggot|1002,11,100000ms,30000ms,Mob002-1::On1002 -002-1,43,61,10,70|monster|Scorpion|1003,6,100000ms,30000ms,Mob002-1::On1003 -002-1,70,92,49,19|monster|Scorpion|1003,10,100000ms,30000ms,Mob002-1::On1003 -002-1,40,93,19,20|monster|RedScorpion|1004,10,100000ms,30000ms,Mob002-1::On1004 -002-1,42,40,8,29|monster|SeaSlime|1033,8,100000ms,30000ms,Mob002-1::On1033 -002-1,33,75,9,40|monster|SeaSlime|1033,8,100000ms,30000ms,Mob002-1::On1033 -002-1,99,62,37,9|monster|Scorpion|1003,6,100000ms,30000ms,Mob002-1::On1003 -002-1,73,105,20,21|monster|FireGoblin|1011,6,100000ms,30000ms,Mob002-1::On1011 - - -002-1,0,0,0|script|Mob002-1|32767 -{ - end; - -On1002: - set @mobID, 1002; - callfunc "MobPoints"; - end; - -On1003: - set @mobID, 1003; - callfunc "MobPoints"; - end; - -On1004: - set @mobID, 1004; - callfunc "MobPoints"; - end; - -On1011: - set @mobID, 1011; - callfunc "MobPoints"; - end; - -On1033: - set @mobID, 1033; - callfunc "MobPoints"; - end; -} +002-1,93,62,24,9|monster|Maggot|1002,11,100000ms,30000ms +002-1,112,62,11,9|monster|Maggot|1002,11,100000ms,30000ms +002-1,108,73,11,9|monster|Maggot|1002,11,100000ms,30000ms +002-1,62,28,3,15|monster|Maggot|1002,6,100000ms,30000ms +002-1,74,96,24,33|monster|Scorpion|1003,12,100000ms,30000ms +002-1,113,114,10,7|monster|Maggot|1002,11,100000ms,30000ms +002-1,43,61,10,70|monster|Scorpion|1003,6,100000ms,30000ms +002-1,70,92,49,19|monster|Scorpion|1003,10,100000ms,30000ms +002-1,40,93,19,20|monster|RedScorpion|1004,10,100000ms,30000ms +002-1,42,40,8,29|monster|SeaSlime|1033,8,100000ms,30000ms +002-1,33,75,9,40|monster|SeaSlime|1033,8,100000ms,30000ms +002-1,99,62,37,9|monster|Scorpion|1003,6,100000ms,30000ms +002-1,73,105,20,21|monster|FireGoblin|1011,6,100000ms,30000ms diff --git a/world/map/npc/002-1/_nodes.txt b/world/map/npc/002-1/_nodes.txt new file mode 100644 index 00000000..7e192e45 --- /dev/null +++ b/world/map/npc/002-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Tulimshar South nodes + +// (no nodes) diff --git a/world/map/npc/002-1/elanore.txt b/world/map/npc/002-1/elanore.txt index e936447e..b235c5b4 100644 --- a/world/map/npc/002-1/elanore.txt +++ b/world/map/npc/002-1/elanore.txt @@ -19,8 +19,6 @@ function|script|ElanoreFix function|script|elanore_decrease_exp { - if (attachrid(@killerrid) == 0) - goto L_Return; set @Q_heal_exp, MAGIC_EXPERIENCE >> 24; if (@Q_heal_exp < 8) goto L_OnPcKillWipe; set @Q_heal_exp, @Q_heal_exp - 8; diff --git a/world/map/npc/002-2/_import.txt b/world/map/npc/002-2/_import.txt index c2bd041a..3f90a1d8 100644 --- a/world/map/npc/002-2/_import.txt +++ b/world/map/npc/002-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 002-2 npc: npc/002-2/_mobs.txt +npc: npc/002-2/_nodes.txt npc: npc/002-2/_warps.txt npc: npc/002-2/bakery.txt npc: npc/002-2/barber.txt diff --git a/world/map/npc/002-2/_mobs.txt b/world/map/npc/002-2/_mobs.txt index aad2a871..0d9b84e4 100644 --- a/world/map/npc/002-2/_mobs.txt +++ b/world/map/npc/002-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Sandstorm Desert Indoors mobs - - -002-2,0,0,0|script|Mob002-2|32767 -{ - end; -} diff --git a/world/map/npc/002-2/_nodes.txt b/world/map/npc/002-2/_nodes.txt new file mode 100644 index 00000000..875c3c60 --- /dev/null +++ b/world/map/npc/002-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Sandstorm Desert Indoors nodes + +// (no nodes) diff --git a/world/map/npc/002-2/stranger.txt b/world/map/npc/002-2/stranger.txt index 1367e6f7..e323293e 100644 --- a/world/map/npc/002-2/stranger.txt +++ b/world/map/npc/002-2/stranger.txt @@ -154,8 +154,8 @@ L_Towel: mes "\"What is the most important item for every hitchhiker to have?\""; mes ""; mes "##BDrag & drop the item from your inventory##b."; - requestitem @answer$; - if (@answer$ != "Towel" && @answer$ != "HitchhikersTowel") + requestitem .@answer$[0]; + if (.@answer$[0] != "Towel" && .@answer$[0] != "HitchhikersTowel") goto L_Wrong_Answer; mes "[Stranger]"; diff --git a/world/map/npc/002-3/_import.txt b/world/map/npc/002-3/_import.txt index bb5e72d3..ec14b916 100644 --- a/world/map/npc/002-3/_import.txt +++ b/world/map/npc/002-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 002-3 npc: npc/002-3/_mobs.txt +npc: npc/002-3/_nodes.txt npc: npc/002-3/_warps.txt npc: npc/002-3/mapflags.txt npc: npc/002-3/merchant.txt diff --git a/world/map/npc/002-3/_mobs.txt b/world/map/npc/002-3/_mobs.txt index 963b8e36..a0552ba2 100644 --- a/world/map/npc/002-3/_mobs.txt +++ b/world/map/npc/002-3/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Tulimshar Mining Camp mobs - - -002-3,0,0,0|script|Mob002-3|32767 -{ - end; -} diff --git a/world/map/npc/002-3/_nodes.txt b/world/map/npc/002-3/_nodes.txt new file mode 100644 index 00000000..eb53d136 --- /dev/null +++ b/world/map/npc/002-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Tulimshar Mining Camp nodes + +// (no nodes) diff --git a/world/map/npc/002-4/_import.txt b/world/map/npc/002-4/_import.txt index 7f617989..44a09e1d 100644 --- a/world/map/npc/002-4/_import.txt +++ b/world/map/npc/002-4/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 002-4 npc: npc/002-4/_mobs.txt +npc: npc/002-4/_nodes.txt npc: npc/002-4/_warps.txt npc: npc/002-4/mapflags.txt npc: npc/002-4/mine_triggerone.txt diff --git a/world/map/npc/002-4/_mobs.txt b/world/map/npc/002-4/_mobs.txt index 0a461429..0643fb93 100644 --- a/world/map/npc/002-4/_mobs.txt +++ b/world/map/npc/002-4/_mobs.txt @@ -1,38 +1,17 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Desert Mines mobs -002-4,39,37,15,11|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob002-4::On1056 -002-4,91,41,17,20|monster|AngryFireGoblin|1108,3,100000ms,30000ms,Mob002-4::On1108 -002-4,71,35,25,17|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob002-4::On1056 -002-4,69,100,8,5|monster|AngryFireGoblin|1108,2,100000ms,30000ms,Mob002-4::On1108 -002-4,68,57,26,24|monster|AngryScorpion|1057,5,100000ms,30000ms,Mob002-4::On1057 -002-4,49,58,4,15|monster|AngryScorpion|1057,5,100000ms,30000ms,Mob002-4::On1057 -002-4,38,76,15,22|monster|AngryScorpion|1057,4,100000ms,30000ms,Mob002-4::On1057 -002-4,58,78,6,17|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob002-4::On1056 -002-4,89,68,11,32|monster|AngryScorpion|1057,4,100000ms,30000ms,Mob002-4::On1057 -002-4,84,93,19,17|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob002-4::On1056 -002-4,72,77,21,14|monster|AngryFireGoblin|1108,3,100000ms,30000ms,Mob002-4::On1108 -002-4,67,91,11,12|monster|AngryScorpion|1057,4,100000ms,30000ms,Mob002-4::On1057 -002-4,58,95,6,13|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob002-4::On1056 -002-4,63,100,2,5|monster|AngryScorpion|1057,3,100000ms,30000ms,Mob002-4::On1057 - - -002-4,0,0,0|script|Mob002-4|32767 -{ - end; - -On1056: - set @mobID, 1056; - callfunc "MobPoints"; - end; - -On1057: - set @mobID, 1057; - callfunc "MobPoints"; - end; - -On1108: - set @mobID, 1108; - callfunc "MobPoints"; - end; -} +002-4,39,37,15,11|monster|CaveMaggot|1056,5,100000ms,30000ms +002-4,91,41,17,20|monster|AngryFireGoblin|1108,3,100000ms,30000ms +002-4,71,35,25,17|monster|CaveMaggot|1056,4,100000ms,30000ms +002-4,69,100,8,5|monster|AngryFireGoblin|1108,2,100000ms,30000ms +002-4,68,57,26,24|monster|AngryScorpion|1057,5,100000ms,30000ms +002-4,49,58,4,15|monster|AngryScorpion|1057,5,100000ms,30000ms +002-4,38,76,15,22|monster|AngryScorpion|1057,4,100000ms,30000ms +002-4,58,78,6,17|monster|CaveMaggot|1056,4,100000ms,30000ms +002-4,89,68,11,32|monster|AngryScorpion|1057,4,100000ms,30000ms +002-4,84,93,19,17|monster|CaveMaggot|1056,4,100000ms,30000ms +002-4,72,77,21,14|monster|AngryFireGoblin|1108,3,100000ms,30000ms +002-4,67,91,11,12|monster|AngryScorpion|1057,4,100000ms,30000ms +002-4,58,95,6,13|monster|CaveMaggot|1056,4,100000ms,30000ms +002-4,63,100,2,5|monster|AngryScorpion|1057,3,100000ms,30000ms diff --git a/world/map/npc/002-4/_nodes.txt b/world/map/npc/002-4/_nodes.txt new file mode 100644 index 00000000..ddcec23c --- /dev/null +++ b/world/map/npc/002-4/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Desert Mines nodes + +// (no nodes) diff --git a/world/map/npc/002-5/_import.txt b/world/map/npc/002-5/_import.txt index 7b2a4daa..d50b74a4 100644 --- a/world/map/npc/002-5/_import.txt +++ b/world/map/npc/002-5/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 002-5 npc: npc/002-5/_mobs.txt +npc: npc/002-5/_nodes.txt npc: npc/002-5/_warps.txt npc: npc/002-5/chest.txt npc: npc/002-5/mapflags.txt diff --git a/world/map/npc/002-5/_mobs.txt b/world/map/npc/002-5/_mobs.txt index c6894850..700685c8 100644 --- a/world/map/npc/002-5/_mobs.txt +++ b/world/map/npc/002-5/_mobs.txt @@ -1,51 +1,20 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Deep Desert Mines mobs -002-5,37,89,12,7|monster|AngryFireGoblin|1108,3,100000ms,30000ms,Mob002-5::On1108 -002-5,33,76,3,11|monster|CaveMaggot|1056,3,100000ms,30000ms,Mob002-5::On1056 -002-5,40,68,7,5|monster|AngryScorpion|1057,3,100000ms,30000ms,Mob002-5::On1057 -002-5,40,38,18,5|monster|Archant|1060,3,100000ms,30000ms,Mob002-5::On1060 -002-5,56,97,2,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060 -002-5,68,100,12,2|monster|YellowSlime|1007,4,100000ms,30000ms,Mob002-5::On1007 -002-5,91,80,1,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060 -002-5,89,94,1,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060 -002-5,74,78,1,5|monster|Archant|1060,2,100000ms,30000ms,Mob002-5::On1060 -002-5,94,72,2,4|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060 -002-5,90,61,6,2|monster|YellowSlime|1007,1,100000ms,30000ms,Mob002-5::On1007 -002-5,74,35,1,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060 -002-5,84,33,1,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060 -002-5,84,46,1,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060 -002-5,99,38,1,5|monster|Archant|1060,1,100000ms,30000ms,Mob002-5::On1060 -002-5,93,38,8,2|monster|YellowSlime|1007,2,100000ms,30000ms,Mob002-5::On1007 -002-5,62,62,5,43|monster|AngryFireGoblin|1108,3,100000ms,30000ms,Mob002-5::On1108 - - -002-5,0,0,0|script|Mob002-5|32767 -{ - end; - -On1007: - set @mobID, 1007; - callfunc "MobPoints"; - end; - -On1056: - set @mobID, 1056; - callfunc "MobPoints"; - end; - -On1057: - set @mobID, 1057; - callfunc "MobPoints"; - end; - -On1060: - set @mobID, 1060; - callfunc "MobPoints"; - end; - -On1108: - set @mobID, 1108; - callfunc "MobPoints"; - end; -} +002-5,37,89,12,7|monster|AngryFireGoblin|1108,3,100000ms,30000ms +002-5,33,76,3,11|monster|CaveMaggot|1056,3,100000ms,30000ms +002-5,40,68,7,5|monster|AngryScorpion|1057,3,100000ms,30000ms +002-5,40,38,18,5|monster|Archant|1060,3,100000ms,30000ms +002-5,56,97,2,5|monster|Archant|1060,1,100000ms,30000ms +002-5,68,100,12,2|monster|YellowSlime|1007,4,100000ms,30000ms +002-5,91,80,1,5|monster|Archant|1060,1,100000ms,30000ms +002-5,89,94,1,5|monster|Archant|1060,1,100000ms,30000ms +002-5,74,78,1,5|monster|Archant|1060,2,100000ms,30000ms +002-5,94,72,2,4|monster|Archant|1060,1,100000ms,30000ms +002-5,90,61,6,2|monster|YellowSlime|1007,1,100000ms,30000ms +002-5,74,35,1,5|monster|Archant|1060,1,100000ms,30000ms +002-5,84,33,1,5|monster|Archant|1060,1,100000ms,30000ms +002-5,84,46,1,5|monster|Archant|1060,1,100000ms,30000ms +002-5,99,38,1,5|monster|Archant|1060,1,100000ms,30000ms +002-5,93,38,8,2|monster|YellowSlime|1007,2,100000ms,30000ms +002-5,62,62,5,43|monster|AngryFireGoblin|1108,3,100000ms,30000ms diff --git a/world/map/npc/002-5/_nodes.txt b/world/map/npc/002-5/_nodes.txt new file mode 100644 index 00000000..d3890f4a --- /dev/null +++ b/world/map/npc/002-5/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Deep Desert Mines nodes + +// (no nodes) diff --git a/world/map/npc/004-3/_import.txt b/world/map/npc/004-3/_import.txt index 1c5bc475..97d4e69b 100644 --- a/world/map/npc/004-3/_import.txt +++ b/world/map/npc/004-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 004-3 npc: npc/004-3/_mobs.txt +npc: npc/004-3/_nodes.txt npc: npc/004-3/_warps.txt npc: npc/004-3/mapflags.txt diff --git a/world/map/npc/004-3/_mobs.txt b/world/map/npc/004-3/_mobs.txt index dce2ec02..26c4d595 100644 --- a/world/map/npc/004-3/_mobs.txt +++ b/world/map/npc/004-3/_mobs.txt @@ -1,31 +1,10 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Pirate Caves First Floor mobs -004-3,43,72,7,8|monster|Thug|1119,2,100000ms,30000ms,Mob004-3::On1119 -004-3,43,72,7,8|monster|Swashbuckler|1120,1,100000ms,30000ms,Mob004-3::On1120 -004-3,43,72,7,8|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-3::On1121 -004-3,28,69,8,2|monster|Thug|1119,2,100000ms,30000ms,Mob004-3::On1119 -004-3,71,63,7,8|monster|Thug|1119,2,100000ms,30000ms,Mob004-3::On1119 -004-3,39,39,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-3::On1120 -004-3,71,63,7,8|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-3::On1121 - - -004-3,0,0,0|script|Mob004-3|32767 -{ - end; - -On1119: - set @mobID, 1119; - callfunc "MobPoints"; - end; - -On1120: - set @mobID, 1120; - callfunc "MobPoints"; - end; - -On1121: - set @mobID, 1121; - callfunc "MobPoints"; - end; -} +004-3,43,72,7,8|monster|Thug|1119,2,100000ms,30000ms +004-3,43,72,7,8|monster|Swashbuckler|1120,1,100000ms,30000ms +004-3,43,72,7,8|monster|Grenadier|1121,1,100000ms,30000ms +004-3,28,69,8,2|monster|Thug|1119,2,100000ms,30000ms +004-3,71,63,7,8|monster|Thug|1119,2,100000ms,30000ms +004-3,39,39,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms +004-3,71,63,7,8|monster|Grenadier|1121,1,100000ms,30000ms diff --git a/world/map/npc/004-3/_nodes.txt b/world/map/npc/004-3/_nodes.txt new file mode 100644 index 00000000..9ebc3e80 --- /dev/null +++ b/world/map/npc/004-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Pirate Caves First Floor nodes + +// (no nodes) diff --git a/world/map/npc/004-4/_import.txt b/world/map/npc/004-4/_import.txt index d241e73e..6b0490c3 100644 --- a/world/map/npc/004-4/_import.txt +++ b/world/map/npc/004-4/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 004-4 npc: npc/004-4/_mobs.txt +npc: npc/004-4/_nodes.txt npc: npc/004-4/_warps.txt npc: npc/004-4/mapflags.txt diff --git a/world/map/npc/004-4/_mobs.txt b/world/map/npc/004-4/_mobs.txt index 525a7215..0216ba6d 100644 --- a/world/map/npc/004-4/_mobs.txt +++ b/world/map/npc/004-4/_mobs.txt @@ -1,33 +1,12 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Pirate Caves Second Floor mobs -004-4,36,62,5,20|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-4::On1121 -004-4,37,61,5,21|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-4::On1120 -004-4,62,52,12,7|monster|Thug|1119,2,100000ms,30000ms,Mob004-4::On1119 -004-4,34,87,12,7|monster|Thug|1119,2,100000ms,30000ms,Mob004-4::On1119 -004-4,37,62,6,22|monster|Thug|1119,2,100000ms,30000ms,Mob004-4::On1119 -004-4,34,88,10,6|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-4::On1120 -004-4,63,52,10,6|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-4::On1120 -004-4,62,52,11,4|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-4::On1121 -004-4,34,88,10,4|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-4::On1121 - - -004-4,0,0,0|script|Mob004-4|32767 -{ - end; - -On1119: - set @mobID, 1119; - callfunc "MobPoints"; - end; - -On1120: - set @mobID, 1120; - callfunc "MobPoints"; - end; - -On1121: - set @mobID, 1121; - callfunc "MobPoints"; - end; -} +004-4,36,62,5,20|monster|Grenadier|1121,1,100000ms,30000ms +004-4,37,61,5,21|monster|Swashbuckler|1120,2,100000ms,30000ms +004-4,62,52,12,7|monster|Thug|1119,2,100000ms,30000ms +004-4,34,87,12,7|monster|Thug|1119,2,100000ms,30000ms +004-4,37,62,6,22|monster|Thug|1119,2,100000ms,30000ms +004-4,34,88,10,6|monster|Swashbuckler|1120,2,100000ms,30000ms +004-4,63,52,10,6|monster|Swashbuckler|1120,2,100000ms,30000ms +004-4,62,52,11,4|monster|Grenadier|1121,1,100000ms,30000ms +004-4,34,88,10,4|monster|Grenadier|1121,1,100000ms,30000ms diff --git a/world/map/npc/004-4/_nodes.txt b/world/map/npc/004-4/_nodes.txt new file mode 100644 index 00000000..2ca90a45 --- /dev/null +++ b/world/map/npc/004-4/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Pirate Caves Second Floor nodes + +// (no nodes) diff --git a/world/map/npc/004-5/_import.txt b/world/map/npc/004-5/_import.txt index 3114b117..234d6cde 100644 --- a/world/map/npc/004-5/_import.txt +++ b/world/map/npc/004-5/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 004-5 npc: npc/004-5/_mobs.txt +npc: npc/004-5/_nodes.txt npc: npc/004-5/_warps.txt npc: npc/004-5/chest.txt npc: npc/004-5/mapflags.txt diff --git a/world/map/npc/004-5/_mobs.txt b/world/map/npc/004-5/_mobs.txt index 2d3acc7e..b7425fb5 100644 --- a/world/map/npc/004-5/_mobs.txt +++ b/world/map/npc/004-5/_mobs.txt @@ -1,36 +1,15 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Pirate Den mobs -004-5,41,70,6,5|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-5::On1121 -004-5,41,70,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-5::On1120 -004-5,40,70,8,2|monster|Thug|1119,2,100000ms,30000ms,Mob004-5::On1119 -004-5,35,86,6,5|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-5::On1121 -004-5,34,86,8,2|monster|Thug|1119,2,100000ms,30000ms,Mob004-5::On1119 -004-5,35,86,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-5::On1120 -004-5,54,38,6,5|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-5::On1121 -004-5,53,38,8,2|monster|Thug|1119,2,100000ms,30000ms,Mob004-5::On1119 -004-5,54,38,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-5::On1120 -004-5,81,38,6,5|monster|Grenadier|1121,1,100000ms,30000ms,Mob004-5::On1121 -004-5,80,38,8,2|monster|Thug|1119,2,100000ms,30000ms,Mob004-5::On1119 -004-5,81,38,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms,Mob004-5::On1120 - - -004-5,0,0,0|script|Mob004-5|32767 -{ - end; - -On1119: - set @mobID, 1119; - callfunc "MobPoints"; - end; - -On1120: - set @mobID, 1120; - callfunc "MobPoints"; - end; - -On1121: - set @mobID, 1121; - callfunc "MobPoints"; - end; -} +004-5,41,70,6,5|monster|Grenadier|1121,1,100000ms,30000ms +004-5,41,70,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms +004-5,40,70,8,2|monster|Thug|1119,2,100000ms,30000ms +004-5,35,86,6,5|monster|Grenadier|1121,1,100000ms,30000ms +004-5,34,86,8,2|monster|Thug|1119,2,100000ms,30000ms +004-5,35,86,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms +004-5,54,38,6,5|monster|Grenadier|1121,1,100000ms,30000ms +004-5,53,38,8,2|monster|Thug|1119,2,100000ms,30000ms +004-5,54,38,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms +004-5,81,38,6,5|monster|Grenadier|1121,1,100000ms,30000ms +004-5,80,38,8,2|monster|Thug|1119,2,100000ms,30000ms +004-5,81,38,7,3|monster|Swashbuckler|1120,2,100000ms,30000ms diff --git a/world/map/npc/004-5/_nodes.txt b/world/map/npc/004-5/_nodes.txt new file mode 100644 index 00000000..55ea7bb3 --- /dev/null +++ b/world/map/npc/004-5/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Pirate Den nodes + +// (no nodes) diff --git a/world/map/npc/005-3/_import.txt b/world/map/npc/005-3/_import.txt index a1fd70bd..415451c3 100644 --- a/world/map/npc/005-3/_import.txt +++ b/world/map/npc/005-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 005-3 npc: npc/005-3/_mobs.txt +npc: npc/005-3/_nodes.txt npc: npc/005-3/_warps.txt npc: npc/005-3/mapflags.txt diff --git a/world/map/npc/005-3/_mobs.txt b/world/map/npc/005-3/_mobs.txt index 63e58847..79168aba 100644 --- a/world/map/npc/005-3/_mobs.txt +++ b/world/map/npc/005-3/_mobs.txt @@ -1,27 +1,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Snake Pit mobs -005-3,58,57,62,57|monster|Snake|1010,50,100000ms,30000ms,Mob005-3::On1010 -005-3,58,57,62,57|monster|BlackScorpion|1009,15,100000ms,30000ms,Mob005-3::On1009 -005-3,58,57,62,57|monster|GiantMaggot|1006,20,100000ms,30000ms,Mob005-3::On1006 - - -005-3,0,0,0|script|Mob005-3|32767 -{ - end; - -On1006: - set @mobID, 1006; - callfunc "MobPoints"; - end; - -On1009: - set @mobID, 1009; - callfunc "MobPoints"; - end; - -On1010: - set @mobID, 1010; - callfunc "MobPoints"; - end; -} +005-3,58,57,62,57|monster|Snake|1010,50,100000ms,30000ms +005-3,58,57,62,57|monster|BlackScorpion|1009,15,100000ms,30000ms +005-3,58,57,62,57|monster|GiantMaggot|1006,20,100000ms,30000ms diff --git a/world/map/npc/005-3/_nodes.txt b/world/map/npc/005-3/_nodes.txt new file mode 100644 index 00000000..0e704ee5 --- /dev/null +++ b/world/map/npc/005-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Snake Pit nodes + +// (no nodes) diff --git a/world/map/npc/006-1/_import.txt b/world/map/npc/006-1/_import.txt index 0885c461..44f1375d 100644 --- a/world/map/npc/006-1/_import.txt +++ b/world/map/npc/006-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 006-1 npc: npc/006-1/_mobs.txt +npc: npc/006-1/_nodes.txt npc: npc/006-1/_warps.txt npc: npc/006-1/mapflags.txt npc: npc/006-1/mika.txt diff --git a/world/map/npc/006-1/_mobs.txt b/world/map/npc/006-1/_mobs.txt index 2288ec92..c18464c8 100644 --- a/world/map/npc/006-1/_mobs.txt +++ b/world/map/npc/006-1/_mobs.txt @@ -1,55 +1,24 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Desert Mountains mobs -006-1,49,52,7,3|monster|Snake|1010,1,100000ms,30000ms,Mob006-1::On1010 -006-1,53,36,16,13|monster|MountainSnake|1026,3,150000ms,10000ms,Mob006-1::On1026 -006-1,89,26,33,13|monster|MountainSnake|1026,5,15000ms,75000ms,Mob006-1::On1026 -006-1,113,41,12,37|monster|MountainSnake|1026,8,15000ms,75000ms,Mob006-1::On1026 -006-1,113,51,6,3|monster|MountainSnake|1026,3,15000ms,75000ms,Mob006-1::On1026 -006-1,86,46,29,5|monster|MountainSnake|1026,3,15000ms,75000ms,Mob006-1::On1026 -006-1,105,73,21,14|monster|MountainSnake|1026,3,15000ms,75000ms,Mob006-1::On1026 -006-1,73,102,8,13|monster|MountainSnake|1026,4,15000ms,75000ms,Mob006-1::On1026 -006-1,104,100,11,15|monster|MountainSnake|1026,8,15000ms,75000ms,Mob006-1::On1026 -006-1,82,72,25,16|monster|MountainSnake|1026,8,15000ms,75000ms,Mob006-1::On1026 -006-1,95,114,17,4|monster|MountainSnake|1026,5,15000ms,75000ms,Mob006-1::On1026 -006-1,57,119,18,2|monster|MountainSnake|1026,4,15000ms,75000ms,Mob006-1::On1026 -006-1,33,97,27,33|monster|Scorpion|1003,10,100000ms,30000ms,Mob006-1::On1003 -006-1,58,49,3,3|monster|GreenSlime|1005,3,100000ms,30000ms,Mob006-1::On1005 -006-1,34,50,5,4|monster|Snake|1010,2,40000ms,50000ms,Mob006-1::On1010 -006-1,96,92,20,48|monster|Snake|1010,2,40000ms,50000ms,Mob006-1::On1010 -006-1,35,97,28,29|monster|Maggot|1002,20,100000ms,30000ms,Mob006-1::On1002 -006-1,28,73,3,2|monster|GreenSlime|1005,2,100000ms,30000ms,Mob006-1::On1005 -006-1,33,59,3,2|monster|GreenSlime|1005,2,100000ms,30000ms,Mob006-1::On1005 -006-1,37,73,7,3|monster|Snake|1010,1,100000ms,30000ms,Mob006-1::On1010 -006-1,100,36,38,24|monster|Snake|1010,2,40000ms,50000ms,Mob006-1::On1010 - - -006-1,0,0,0|script|Mob006-1|32767 -{ - end; - -On1002: - set @mobID, 1002; - callfunc "MobPoints"; - end; - -On1003: - set @mobID, 1003; - callfunc "MobPoints"; - end; - -On1005: - set @mobID, 1005; - callfunc "MobPoints"; - end; - -On1010: - set @mobID, 1010; - callfunc "MobPoints"; - end; - -On1026: - set @mobID, 1026; - callfunc "MobPoints"; - end; -} +006-1,49,52,7,3|monster|Snake|1010,1,100000ms,30000ms +006-1,53,36,16,13|monster|MountainSnake|1026,3,150000ms,10000ms +006-1,89,26,33,13|monster|MountainSnake|1026,5,15000ms,75000ms +006-1,113,41,12,37|monster|MountainSnake|1026,8,15000ms,75000ms +006-1,113,51,6,3|monster|MountainSnake|1026,3,15000ms,75000ms +006-1,86,46,29,5|monster|MountainSnake|1026,3,15000ms,75000ms +006-1,105,73,21,14|monster|MountainSnake|1026,3,15000ms,75000ms +006-1,73,102,8,13|monster|MountainSnake|1026,4,15000ms,75000ms +006-1,104,100,11,15|monster|MountainSnake|1026,8,15000ms,75000ms +006-1,82,72,25,16|monster|MountainSnake|1026,8,15000ms,75000ms +006-1,95,114,17,4|monster|MountainSnake|1026,5,15000ms,75000ms +006-1,57,119,18,2|monster|MountainSnake|1026,4,15000ms,75000ms +006-1,33,97,27,33|monster|Scorpion|1003,10,100000ms,30000ms +006-1,58,49,3,3|monster|GreenSlime|1005,3,100000ms,30000ms +006-1,34,50,5,4|monster|Snake|1010,2,40000ms,50000ms +006-1,96,92,20,48|monster|Snake|1010,2,40000ms,50000ms +006-1,35,97,28,29|monster|Maggot|1002,20,100000ms,30000ms +006-1,28,73,3,2|monster|GreenSlime|1005,2,100000ms,30000ms +006-1,33,59,3,2|monster|GreenSlime|1005,2,100000ms,30000ms +006-1,37,73,7,3|monster|Snake|1010,1,100000ms,30000ms +006-1,100,36,38,24|monster|Snake|1010,2,40000ms,50000ms diff --git a/world/map/npc/006-1/_nodes.txt b/world/map/npc/006-1/_nodes.txt new file mode 100644 index 00000000..e53e7619 --- /dev/null +++ b/world/map/npc/006-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Desert Mountains nodes + +// (no nodes) diff --git a/world/map/npc/006-2/_import.txt b/world/map/npc/006-2/_import.txt index 0730bd46..2d22f31c 100644 --- a/world/map/npc/006-2/_import.txt +++ b/world/map/npc/006-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 006-2 npc: npc/006-2/_mobs.txt +npc: npc/006-2/_nodes.txt npc: npc/006-2/_warps.txt npc: npc/006-2/mapflags.txt npc: npc/006-2/npcs.txt diff --git a/world/map/npc/006-2/_mobs.txt b/world/map/npc/006-2/_mobs.txt index 13ee9057..e3fe486b 100644 --- a/world/map/npc/006-2/_mobs.txt +++ b/world/map/npc/006-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Pachua's Village mobs - - -006-2,0,0,0|script|Mob006-2|32767 -{ - end; -} diff --git a/world/map/npc/006-2/_nodes.txt b/world/map/npc/006-2/_nodes.txt new file mode 100644 index 00000000..ae0f0147 --- /dev/null +++ b/world/map/npc/006-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Pachua's Village nodes + +// (no nodes) diff --git a/world/map/npc/006-3/_import.txt b/world/map/npc/006-3/_import.txt index 6302c3a8..8e52641e 100644 --- a/world/map/npc/006-3/_import.txt +++ b/world/map/npc/006-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 006-3 npc: npc/006-3/_mobs.txt +npc: npc/006-3/_nodes.txt npc: npc/006-3/_warps.txt npc: npc/006-3/mapflags.txt diff --git a/world/map/npc/006-3/_mobs.txt b/world/map/npc/006-3/_mobs.txt index 3fa25c29..93d6102c 100644 --- a/world/map/npc/006-3/_mobs.txt +++ b/world/map/npc/006-3/_mobs.txt @@ -1,55 +1,29 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Desert Mountain Cave mobs -006-3,108,25,36,8|monster|MountainSnake|1026,3,15000ms,90000ms,Mob006-3::On1026 -006-3,99,50,14,13|monster|MountainSnake|1026,1,15000ms,90000ms,Mob006-3::On1026 -006-3,89,63,14,11|monster|MountainSnake|1026,2,15000ms,90000ms,Mob006-3::On1026 -006-3,86,90,29,9|monster|MountainSnake|1026,3,15000ms,90000ms,Mob006-3::On1026 -006-3,109,78,12,9|monster|MountainSnake|1026,1,15000ms,90000ms,Mob006-3::On1026 -006-3,119,117,15,14|monster|MountainSnake|1026,4,15000ms,90000ms,Mob006-3::On1026 -006-3,106,64,14,17|monster|MountainSnake|1026,3,15000ms,90000ms,Mob006-3::On1026 -006-3,65,71,31,35|monster|MountainSnake|1026,10,15000ms,90000ms,Mob006-3::On1026 -006-3,57,105,27,30|monster|MountainSnake|1026,8,15000ms,90000ms,Mob006-3::On1026 -006-3,73,120,16,5|monster|MountainSnake|1026,3,15000ms,90000ms,Mob006-3::On1026 -006-3,117,54,11,9|monster|MountainSnake|1026,4,15000ms,90000ms,Mob006-3::On1026 -006-3,123,62,10,5|monster|MountainSnake|1026,3,15000ms,90000ms,Mob006-3::On1026 -006-3,72,36,24,25|monster|MountainSnake|1026,10,15000ms,90000ms,Mob006-3::On1026 -006-3,84,27,5,7|monster|MountainSnake|1026,1,15000ms,90000ms,Mob006-3::On1026 -006-3,40,40,36,28|monster|MountainSnake|1026,8,15000ms,90000ms,Mob006-3::On1026 -006-3,34,60,27,11|monster|MountainSnake|1026,3,15000ms,90000ms,Mob006-3::On1026 -006-3,87,74,26,9|monster|RedSlime|1008,3,15000ms,10000ms,Mob006-3::On1008 -006-3,120,76,9,21|monster|RedSlime|1008,3,15000ms,10000ms,Mob006-3::On1008 -006-3,101,85,14,8|monster|RedSlime|1008,4,15000ms,10000ms,Mob006-3::On1008 -006-3,44,124,29,7|monster|MountainSnake|1026,5,15000ms,90000ms,Mob006-3::On1026 -006-3,90,125,17,7|monster|MountainSnake|1026,5,15000ms,90000ms,Mob006-3::On1026 -006-3,30,88,13,20|monster|RedSlime|1008,3,90000ms,30000ms,Mob006-3::On1008 -006-3,122,98,10,16|monster|Spider|1012,3,90000ms,30000ms,Mob006-3::On1012 -006-3,112,104,7,13|monster|Spider|1012,1,90000ms,30000ms,Mob006-3::On1012 -006-3,103,108,9,9|monster|Spider|1012,1,90000ms,30000ms,Mob006-3::On1012 -006-3,83,107,13,14|monster|YellowSlime|1007,6,90000ms,30000ms,Mob006-3::On1007 - - -006-3,0,0,0|script|Mob006-3|32767 -{ - end; - -On1007: - set @mobID, 1007; - callfunc "MobPoints"; - end; - -On1008: - set @mobID, 1008; - callfunc "MobPoints"; - end; - -On1012: - set @mobID, 1012; - callfunc "MobPoints"; - end; - -On1026: - set @mobID, 1026; - callfunc "MobPoints"; - end; -} +006-3,108,25,36,8|monster|MountainSnake|1026,3,15000ms,90000ms +006-3,99,50,14,13|monster|MountainSnake|1026,1,15000ms,90000ms +006-3,89,63,14,11|monster|MountainSnake|1026,2,15000ms,90000ms +006-3,86,90,29,9|monster|MountainSnake|1026,3,15000ms,90000ms +006-3,109,78,12,9|monster|MountainSnake|1026,1,15000ms,90000ms +006-3,119,117,15,14|monster|MountainSnake|1026,4,15000ms,90000ms +006-3,106,64,14,17|monster|MountainSnake|1026,3,15000ms,90000ms +006-3,65,71,31,35|monster|MountainSnake|1026,10,15000ms,90000ms +006-3,57,105,27,30|monster|MountainSnake|1026,8,15000ms,90000ms +006-3,73,120,16,5|monster|MountainSnake|1026,3,15000ms,90000ms +006-3,117,54,11,9|monster|MountainSnake|1026,4,15000ms,90000ms +006-3,123,62,10,5|monster|MountainSnake|1026,3,15000ms,90000ms +006-3,72,36,24,25|monster|MountainSnake|1026,10,15000ms,90000ms +006-3,84,27,5,7|monster|MountainSnake|1026,1,15000ms,90000ms +006-3,40,40,36,28|monster|MountainSnake|1026,8,15000ms,90000ms +006-3,34,60,27,11|monster|MountainSnake|1026,3,15000ms,90000ms +006-3,87,74,26,9|monster|RedSlime|1008,3,15000ms,10000ms +006-3,120,76,9,21|monster|RedSlime|1008,3,15000ms,10000ms +006-3,101,85,14,8|monster|RedSlime|1008,4,15000ms,10000ms +006-3,44,124,29,7|monster|MountainSnake|1026,5,15000ms,90000ms +006-3,90,125,17,7|monster|MountainSnake|1026,5,15000ms,90000ms +006-3,30,88,13,20|monster|RedSlime|1008,3,90000ms,30000ms +006-3,122,98,10,16|monster|Spider|1012,3,90000ms,30000ms +006-3,112,104,7,13|monster|Spider|1012,1,90000ms,30000ms +006-3,103,108,9,9|monster|Spider|1012,1,90000ms,30000ms +006-3,83,107,13,14|monster|YellowSlime|1007,6,90000ms,30000ms diff --git a/world/map/npc/006-3/_nodes.txt b/world/map/npc/006-3/_nodes.txt new file mode 100644 index 00000000..c039867e --- /dev/null +++ b/world/map/npc/006-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Desert Mountain Cave nodes + +// (no nodes) diff --git a/world/map/npc/007-1/_import.txt b/world/map/npc/007-1/_import.txt index eca15081..f6f86a36 100644 --- a/world/map/npc/007-1/_import.txt +++ b/world/map/npc/007-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 007-1 npc: npc/007-1/_mobs.txt +npc: npc/007-1/_nodes.txt npc: npc/007-1/_warps.txt npc: npc/007-1/mapflags.txt npc: npc/007-1/voltain.txt diff --git a/world/map/npc/007-1/_mobs.txt b/world/map/npc/007-1/_mobs.txt index 846c9fc5..e160e414 100644 --- a/world/map/npc/007-1/_mobs.txt +++ b/world/map/npc/007-1/_mobs.txt @@ -1,63 +1,12 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland mobs -007-1,0,0,0,0|monster|PinkFlower|1014,17,100000ms,30000ms,Mob007-1::On1014 -007-1,0,0,0,0|monster|SpikyMushroom|1019,15,100000ms,30000ms,Mob007-1::On1019 -007-1,0,0,0,0|monster|Snail|1041,25,100000ms,30000ms,Mob007-1::On1041 -007-1,0,0,0,0|monster|MauvePlant|1029,3,270000ms,180000ms,Mob007-1::On1029 -007-1,0,0,0,0|monster|GambogePlant|1031,1,2700000ms,1800000ms,Mob007-1::On1031 -007-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms,Mob007-1::On1035 -007-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob007-1::On1037 -007-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms,Mob007-1::On1038 -007-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob007-1::On1055 - - -007-1,0,0,0|script|Mob007-1|32767 -{ - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1029: - set @mobID, 1029; - callfunc "MobPoints"; - end; - -On1031: - set @mobID, 1031; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1041: - set @mobID, 1041; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; -} +007-1,0,0,0,0|monster|PinkFlower|1014,17,100000ms,30000ms +007-1,0,0,0,0|monster|SpikyMushroom|1019,15,100000ms,30000ms +007-1,0,0,0,0|monster|Snail|1041,25,100000ms,30000ms +007-1,0,0,0,0|monster|MauvePlant|1029,3,270000ms,180000ms +007-1,0,0,0,0|monster|GambogePlant|1031,1,2700000ms,1800000ms +007-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms +007-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms +007-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms +007-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms diff --git a/world/map/npc/007-1/_nodes.txt b/world/map/npc/007-1/_nodes.txt new file mode 100644 index 00000000..12c08221 --- /dev/null +++ b/world/map/npc/007-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland nodes + +// (no nodes) diff --git a/world/map/npc/007-2/_import.txt b/world/map/npc/007-2/_import.txt index bce6eb02..e68bb71b 100644 --- a/world/map/npc/007-2/_import.txt +++ b/world/map/npc/007-2/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 007-2 npc: npc/007-2/_mobs.txt +npc: npc/007-2/_nodes.txt npc: npc/007-2/_warps.txt npc: npc/007-2/witch.txt diff --git a/world/map/npc/007-2/_mobs.txt b/world/map/npc/007-2/_mobs.txt index ca392cc6..1d91c286 100644 --- a/world/map/npc/007-2/_mobs.txt +++ b/world/map/npc/007-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Illia forsaken inn mobs - - -007-2,0,0,0|script|Mob007-2|32767 -{ - end; -} diff --git a/world/map/npc/007-2/_nodes.txt b/world/map/npc/007-2/_nodes.txt new file mode 100644 index 00000000..38010d03 --- /dev/null +++ b/world/map/npc/007-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Illia forsaken inn nodes + +// (no nodes) diff --git a/world/map/npc/007-2/witch.txt b/world/map/npc/007-2/witch.txt index f5fcda32..3e80dccc 100644 --- a/world/map/npc/007-2/witch.txt +++ b/world/map/npc/007-2/witch.txt @@ -23,7 +23,7 @@ set @illia_iced_water, 4; set $@illia_min_level, 90; - if (getgmlevel() >= 40 && getequipid(equip_head) == 647) + if ((GM >= get(.valia, "GM") || debug) && getequipid(equip_head) == 647) goto L_DeveloperBoard; if (BaseLevel < $@illia_min_level) goto L_Unexperienced; @@ -35,22 +35,7 @@ end; L_DeveloperBoard: - mes "[Developer Board]"; - mes "$Illia_Luvia_Harvest: "+$Illia_Luvia_Harvest; - mes "$Illia_Win_Counter: "+$Illia_Win_Counter; - next; - mes "[Developer Board]"; - mes "$@illia_progress: "+$@illia_progress; - if ($@illia_begin_time > 0) - mes "Time: "+(gettimetick(2) - $@illia_begin_time)+"/"+$@illia_max_time; - mes ""; - mes "$@illia_level_1_progress: "+$@illia_level_1_progress; - mes "$@illia_level_2_progress: "+$@illia_level_2_progress; - mes "$@illia_level_3_progress: "+$@illia_level_3_progress; - mes "$@illia_level_4_progress: "+$@illia_level_4_progress; - mes "$@illia_level_5_progress: "+$@illia_level_5_progress; - mes "$@illia_level_6_progress: "+$@illia_level_6_progress; - mes "$@illia_level_7_progress: "+$@illia_level_7_progress; + callfunc "IlliaDebug"; close; L_Introduce: @@ -1020,3 +1005,22 @@ end; { end; } + +function|script|IlliaDebug +{ + mes "$Illia_Luvia_Harvest: "+$Illia_Luvia_Harvest; + mes "$Illia_Win_Counter: "+$Illia_Win_Counter; + mes "---"; + mes "$@illia_progress: "+$@illia_progress; + if ($@illia_begin_time > 0) + mes "Time: "+(gettimetick(2) - $@illia_begin_time)+"/"+$@illia_max_time; + mes "---"; + mes "$@illia_level_1_progress: "+$@illia_level_1_progress; + mes "$@illia_level_2_progress: "+$@illia_level_2_progress; + mes "$@illia_level_3_progress: "+$@illia_level_3_progress; + mes "$@illia_level_4_progress: "+$@illia_level_4_progress; + mes "$@illia_level_5_progress: "+$@illia_level_5_progress; + mes "$@illia_level_6_progress: "+$@illia_level_6_progress; + mes "$@illia_level_7_progress: "+$@illia_level_7_progress; + return; +} diff --git a/world/map/npc/008-1/_import.txt b/world/map/npc/008-1/_import.txt index fc019095..630d4263 100644 --- a/world/map/npc/008-1/_import.txt +++ b/world/map/npc/008-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 008-1 npc: npc/008-1/_mobs.txt +npc: npc/008-1/_nodes.txt npc: npc/008-1/_warps.txt npc: npc/008-1/andra.txt npc: npc/008-1/annualeaster.txt diff --git a/world/map/npc/008-1/_mobs.txt b/world/map/npc/008-1/_mobs.txt index 33a425e3..6c077242 100644 --- a/world/map/npc/008-1/_mobs.txt +++ b/world/map/npc/008-1/_mobs.txt @@ -1,63 +1,12 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Hurnscald Outskirts mobs -008-1,0,0,0,0|monster|PinkFlower|1014,10,20ms,0ms,Mob008-1::On1014 -008-1,0,0,0,0|monster|Pinkie|1018,18,20ms,0ms,Mob008-1::On1018 -008-1,0,0,0,0|monster|ManaBug|1131,18,30ms,0ms,Mob008-1::On1131 -008-1,0,0,0,0|monster|Maggot|1002,30,30ms,0ms,Mob008-1::On1002 -008-1,0,0,0,0|monster|MauvePlant|1029,2,270000ms,180000ms,Mob008-1::On1029 -008-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms,Mob008-1::On1035 -008-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob008-1::On1037 -008-1,0,0,0,0|monster|Squirrel|1038,10,30ms,20ms,Mob008-1::On1038 -008-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob008-1::On1055 - - -008-1,0,0,0|script|Mob008-1|32767 -{ - end; - -On1002: - set @mobID, 1002; - callfunc "MobPoints"; - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1018: - set @mobID, 1018; - callfunc "MobPoints"; - end; - -On1029: - set @mobID, 1029; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; - -On1131: - set @mobID, 1131; - callfunc "MobPoints"; - end; -} +008-1,0,0,0,0|monster|PinkFlower|1014,10,20ms,0ms +008-1,0,0,0,0|monster|Pinkie|1018,18,20ms,0ms +008-1,0,0,0,0|monster|ManaBug|1131,18,30ms,0ms +008-1,0,0,0,0|monster|Maggot|1002,30,30ms,0ms +008-1,0,0,0,0|monster|MauvePlant|1029,2,270000ms,180000ms +008-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms +008-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms +008-1,0,0,0,0|monster|Squirrel|1038,10,30ms,20ms +008-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms diff --git a/world/map/npc/008-1/_nodes.txt b/world/map/npc/008-1/_nodes.txt new file mode 100644 index 00000000..d8b67583 --- /dev/null +++ b/world/map/npc/008-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Hurnscald Outskirts nodes + +// (no nodes) diff --git a/world/map/npc/008-1/annualeaster.txt b/world/map/npc/008-1/annualeaster.txt index b38aaa0a..1ec95cbe 100644 --- a/world/map/npc/008-1/annualeaster.txt +++ b/world/map/npc/008-1/annualeaster.txt @@ -8,250 +8,213 @@ // Easter cannot be before march 22 or after april 25, so activate // the event in these days. - -function|script|AnnualEasterEvent +008-1,0,0,0|script|Easter Eggs|32767 { + +////////////////////////////////// +// puppet logic below + + if (strnpcinfo(2) == "") end; + if (get(.disabled, "Easter Eggs") || $@isEaster < 1) goto L_Destroy; + set @npc_distance, 1; + callfunc "PCtoNPCRange"; + if(@npc_check) end; if ((gettimetick(2)-TUT_var < 5*7*86400) || (BaseLevel < 40)) //player must be created at least 5 weeks ago goto L_EndTooYoung; - callsub S_Read_Annual_Quest; + set @easter_year, (Annual_Quest & BYTE_1_MASK) >> BYTE_1_SHIFT; + if (#EASTERTIMEPENALTY == 0) goto L_WarmUp; // prevent clicking multiple times: - if (gettimetick(2) < #EASTERTIMEPENALTY + $@EASTER_FOUND_WAIT_TIME) + if (gettimetick(2) < #EASTERTIMEPENALTY + get(.wait_time, "Easter Eggs")) goto L_End2; if (@easter_year > gettime(7) - 2000) goto L_End3; set #EASTERTIMEPENALTY, gettimetick(2); - // global counter to determine reshuffle times of the eggs. - set $@peopleFoundEggs[@EasterEggID], $@peopleFoundEggs[@EasterEggID]+1; - - set @AnnualEasterTries, @AnnualEasterTries + 1; + set .found, .found + 1; // this egg has been found X times + set @AnnualEasterTries, @AnnualEasterTries + 1; // you tried X times since login - // give a small reward: - message strcharinfo(0), "You found something!"; - set @tmp, getarraysize($@SmallAnnualEasterItems$); - set @random, rand(@tmp + 2); - if (@random < @tmp) getitem $@SmallAnnualEasterItems$[@random], rand(1, 2); - if (@random == @tmp) getexp rand(200), 0; - if (@random == @tmp + 1) set Zeny, Zeny + rand(50); - misceffect FX_GETITEM, strcharinfo(0); + message strcharinfo(0), "Eggs : You found something!"; + set .@size, get(.small_rewards, "Easter Eggs"); + set .@random, rand(.@size+2); + if (.@random < .@size) + getitem get(.small_rewards$[.@random], "Easter Eggs"), rand(1, 2); + elif (.@random == .@size) + getexp rand(200), 0; + else + set Zeny, Zeny + rand(50); - // give out a better reward occasionally: - // standard case is branch taken, so only if rand yields 0, medium rewarding. - if (rand($@EASTER_EGG_INV_CHANCE)) + if (rand(get(.chance, "Easter Eggs"))) goto L_NoEasterEgg; - set @random, rand(getarraysize($@MediumAnnualEasterRewards$)); - getitem $@MediumAnnualEasterRewards$[@random], 1; + + set .@random, rand(get(.medium_rewards$, "Easter Eggs")); + getitem get(.medium_rewards$[.@random], "Easter Eggs"), 1; misceffect FX_GETITEM, strcharinfo(0); goto L_NoEasterEgg; L_NoEasterEgg: - - // If you're lucky you get a bigger unique reward per year: - // so only pass on a small chance iff you don't have the item yet. - // Usually the journey ends here because @random != 0 -> end - callsub S_Read_Annual_Quest; - - if (@AnnualEasterTries > $@EASTER_FINAL_REW_INV_CHANCE) - set @AnnualEasterTries, $@EASTER_FINAL_REW_INV_CHANCE; - set @random, rand($@EASTER_FINAL_REW_INV_CHANCE - @AnnualEasterTries + 1); - if (@random || @easter_year > gettime(7) - 2000) - goto L_End1; + set .@fchance, get(.final_rew_chance, "Easter Eggs"); + if (@AnnualEasterTries > .@fchance) + set @AnnualEasterTries, .@fchance; + set .@random, rand(.@fchance - @AnnualEasterTries + 1); + if (.@random || @easter_year > gettime(7) - 2000) + goto L_Reward_End; // block for further items this year: set @easter_year, gettime(7) - 2000 + 1; - callsub S_Update_Annual_Quest; + set Annual_Quest, (Annual_Quest & ~(BYTE_1_MASK) | (@easter_year << BYTE_1_SHIFT)); // Hand out pretty unique rewards depending on the current year: // We'll be handing out 2 different items each year, whereas one of them // will be very common (95 %) and the other rare (5 %) for the players. // The rare item will become the common item next year. - set @rewardindex, gettime(7) - 2012; + set .@rewardindex, gettime(7) - 2012; if (rand(100) < 5) - set @rewardindex, @rewardindex + 1; - + set .@rewardindex, .@rewardindex + 1; // now hand out the specific item: - set @rewardindex, @rewardindex % getarraysize($@FinalAnnualEasterReward$); - getitem $@FinalAnnualEasterReward$[@rewardindex], 1; + set .@rewardindex, .@rewardindex % get(.big_rewards, "Easter Eggs"); + getitem get(.big_rewards$[.@rewardindex], "Easter Eggs"), 1; misceffect FX_GETITEM, strcharinfo(0); - message strcharinfo(0), "This is really special. You won't find anything like this again."; - goto L_End1; + message strcharinfo(0), "Eggs : This is really special. You won't find anything like this again."; + goto L_Reward_End; -S_Read_Annual_Quest: - set @easter_year, (Annual_Quest & BYTE_1_MASK) >> BYTE_1_SHIFT; - return; +L_Reward_End: + if (.found >= get(.mapcount, "Easter Eggs")) + goto L_Destroy; + end; -S_Update_Annual_Quest: - set Annual_Quest, (Annual_Quest & ~(BYTE_1_MASK) | (@easter_year << BYTE_1_SHIFT)); - return; +L_Destroy: + set .eggs, get(.eggs, "Easter Eggs") - 1, "Easter Eggs"; // tell the puppeteer we lost an egg + destroy; L_EndTooYoung: - message strcharinfo(0), "The nest is empty."; - goto L_End1; + message strcharinfo(0), "Eggs : The nest is empty."; + end; L_WarmUp: set #EASTERTIMEPENALTY, gettimetick(2); getitem "MoubooFigurine", 1; misceffect FX_GETITEM, strcharinfo(0); - message strcharinfo(0), "Hmmm eggs! Maybe you can find something nice there!"; - goto L_End1; + message strcharinfo(0), "Eggs : Hmmm eggs! Maybe you can find something nice there!"; + end; L_End3: - message strcharinfo(0), "Don't be greedy! You already found something nice."; - goto L_End1; + message strcharinfo(0), "Eggs : Don't be greedy! You already found something nice."; + end; L_End2: - message strcharinfo(0), "Don't be greedy! You just found something a moment ago."; + message strcharinfo(0), "Eggs : Don't be greedy! You just found something a moment ago."; set #EASTERTIMEPENALTY, #EASTERTIMEPENALTY + 5; if (#EASTERTIMEPENALTY > gettimetick(2)) set #EASTERTIMEPENALTY, gettimetick(2); - goto L_End1; - -L_End1: - set @rewardindex, 0; - set @easter_year, 0; - set @random, 0; - set @tmp, 0; - set @EasterEggID, 0; - return; -} - -008-1,65,40,0|script|#TestEgg0|375 -{ - set @npc_distance, 1; - callfunc "PCtoNPCRange"; - if(@npc_check) end; - - set @EasterEggID, 0; - callfunc("AnnualEasterEvent"); end; -} -008-1,65,40,0|script|#TestEgg1|375 -{ - set @npc_distance, 1; - callfunc "PCtoNPCRange"; - if(@npc_check) end; - - set @EasterEggID, 1; - callfunc("AnnualEasterEvent"); +OnTimer5000: + if (get(.disabled, "Easter Eggs") || $@isEaster < 1) + goto L_Destroy; + initnpctimer; end; -} -008-1,65,40,0|script|#TestEgg2|375 -{ - set @npc_distance, 1; - callfunc "PCtoNPCRange"; - if(@npc_check) end; - - set @EasterEggID, 2; - callfunc("AnnualEasterEvent"); - end; -} +////////////////////////////////// +// puppeteer logic below -008-1,59,38,0|script|#AnnualEaster|32767 -{ +OnSpawn: + set .@e, rand(2,.loc[1]); + set .@x, .loc[.@e]; + set .@y, .loc[(.@e-1)+.loc[1]]; + set .eID, .eID + 1; // give the egg an id + set .@name$, "#--Ee"+chr(3)+.eID; + void puppet(strnpcinfo(3), .@x, .@y, .@name$, 375); // spawn the egg + initnpctimer .@name$; // init puppeteer check timer + if (.eID == 2147483647) + set .eID, 0; // start over if id = 0x7FFFFFFF end; -OnInit: - set $@EASTER_FOUND_WAIT_TIME, 15; - set $@EASTER_FINAL_REW_INV_CHANCE, 70; - set $@EASTER_EGG_INV_CHANCE, 750; - - setarray $@easteregg_posx, 41, 45, 50, 57, 60, 64, 67, 65, 59, 72, 70, 82, 81, 93, 97, 101, 88, 108, 115, 122, 122, 129, 129, 130, 135, 123, 132, 132, 127, 124, 121, 107, 100, 101, 109, 104, 88, 84, 92, 59, 71, 65, 53, 55, 74, 59, 53, 46, 44, 44, 38, 43, 40, 43, 37; - setarray $@easteregg_posy, 87, 89, 88, 93, 98, 90, 96, 82, 81, 82, 96, 98, 92, 89, 89, 81, 82, 94, 96, 96, 90, 86, 72, 65, 60, 46, 25, 21, 20, 22, 20, 34, 24, 41, 43, 42, 48, 28, 27, 17, 23, 29, 25, 20, 39, 41, 34, 36, 18, 25, 31, 39, 64, 69, 73; - - if (getarraysize($@easteregg_posy) != getarraysize($@easteregg_posx)) - goto L_FAULTY_SETUP; - - setarray $@SmallAnnualEasterItems$, "AppleCake", "CactusDrink", "CactusPotion", "Cake", "Candy", "CherryCake", "ChocolateBar", "ChocolateCake", "GreenApple", "Orange", "OrangeCake", "OrangeCupcake", "RedApple", "WhiteCake"; - - setarray $@MediumAnnualEasterRewards$, "RedEasterEgg", "GreenEasterEgg", "BlueEasterEgg", "YellowEasterEgg", "PinkEasterEgg", "TealEasterEgg"; +S_Spawn: + if (.eggs >= .max_eggs) + goto S_Return; + set .eggs, .eggs + 1; + addnpctimer 125 + rand(250), strnpcinfo(0) + "::OnSpawn"; // schedule a spawn + if (.eggs < .min_eggs) + goto S_Spawn; + return; - // DO NOT CHANGE SIZE AFTER EASTER 2013! - setarray $@FinalAnnualEasterReward$, "RedEggshellHat", "BlueEggshellHat", "YellowEggshellHat", "GreenEggshellHat", "OrangeEggshellHat", "DarkEggshellHat"; +S_Return: + return; - callsub S_disableEggs; - if (debug >= 2) end; - initnpctimer; +OnHeartbeat: + if (.max_eggs < 1 || .disabled || $@isEaster < 1) end; + set .mapcount, 1 + getmapusers(strnpcinfo(3)) / 3; + callsub S_Spawn; + addnpctimer 1000, strnpcinfo(0) + "::OnHeartbeat"; // heartbeat end; -L_FAULTY_SETUP: - mapexit; - -OnTimer1000: - setnpctimer 0; - - // an egg can be 'found' multiple times, make this number of possible findings - // depend on the number of players currently on the map. - set $@AEASTER_mapcount, 1 + getmapusers("008-1") / 3; - - set $@isEaster, 0; +OnCheckEaster: if ((gettime(6) == 3 && gettime(5) >= 22) || (gettime(6) == 4 && gettime(5) <= 25)) set $@isEaster, 1; - - if (!$@wasEaster && $@isEaster) - goto L_do_update_enable; - if ($@wasEaster && !$@isEaster) - goto L_do_update_disable; - goto L_done_update; - -L_do_update_enable: - callsub S_enableEggs; - goto L_done_update; - -L_do_update_disable: - callsub S_disableEggs; - goto L_done_update; - -L_done_update: - set $@wasEaster, $@isEaster; - - if (!$@isEaster) - goto L_End; - - set $@EggID, 0; - callsub S_relocateEasterEgg; - set $@EggID, 1; - callsub S_relocateEasterEgg; - set $@EggID, 2; - callsub S_relocateEasterEgg; - // intentional fallthrough to L_End - goto L_End; - -L_End: - set $@AEASTER_mapcount, 0; - set $@EggID, 0; - set $@isEaster, 0; + else + set $@isEaster, 0; + if ($@isEaster && .eggs < 1) + donpcevent "Easter Eggs::OnStart"; end; -S_enableEggs: - enablenpc "#TestEgg0"; - enablenpc "#TestEgg1"; - enablenpc "#TestEgg2"; - return; - -S_disableEggs: - disablenpc "#TestEgg0"; - disablenpc "#TestEgg1"; - disablenpc "#TestEgg2"; - return; - -S_relocateEasterEgg: - if ($@peopleFoundEggs[$@EggID] < $@AEASTER_mapcount) - goto S_Return; - - set $@peopleFoundEggs[$@EggID], 0; - - set $@eastereggPos, rand(getarraysize($@easteregg_posx)); - npcwarp $@easteregg_posx[$@eastereggPos], $@easteregg_posy[$@eastereggPos], "#TestEgg" + $@EggID; - goto S_Return; +OnStart: + if (.disabled || $@isEaster < 1) end; + set .min_eggs, 1; // min number of eggs + set .max_eggs, 3; // max number of eggs + set .eggs, 0; // virtual amount of eggs + set .eID, 0; // last egg id + set .wait_time, 15; + set .final_rew_chance, 70; + set .chance, 750; + setarray .loc[0], 0, 1,1, // first row: x, second row: y + 41, 45, 50, 57, 60, 64, 67, 65, 59, 72, 70, 82, 81, 93, 97, 101, 88, 108, 115, 122, 122, 129, 129, 130, 135, 123, 132, 132, 127, 124, 121, 107, 100, 101, 109, 104, 88, 84, 92, 59, 71, 65, 53, 55, 74, 59, 53, 46, 44, 44, 38, 43, 40, 43, 37, + 87, 89, 88, 93, 98, 90, 96, 82, 81, 82, 96, 98, 92, 89, 89, 81, 82, 94, 96, 96, 90, 86, 72, 65, 60, 46, 25, 21, 20, 22, 20, 34, 24, 41, 43, 42, 48, 28, 27, 17, 23, 29, 25, 20, 39, 41, 34, 36, 18, 25, 31, 39, 64, 69, 73; + set .loc[0], (getarraysize(.loc) - 1); // loc 0 and 1 are special (stores array size, and half index) + set .loc[1], ((.loc[0]+1)/2); + setarray .small_rewards$[0], 0, "AppleCake", "CactusDrink", "CactusPotion", "Cake", "Candy", "CherryCake", "ChocolateBar", "ChocolateCake", "GreenApple", "Orange", "OrangeCake", "OrangeCupcake", "RedApple", "WhiteCake"; + set .small_rewards, getarraysize(.small_rewards$); + setarray .medium_rewards$[0], 0, "RedEasterEgg", "GreenEasterEgg", "BlueEasterEgg", "YellowEasterEgg", "PinkEasterEgg", "TealEasterEgg"; + setarray .big_rewards$[0], 0, "RedEggshellHat", "BlueEggshellHat", "YellowEggshellHat", "GreenEggshellHat", "OrangeEggshellHat", "DarkEggshellHat"; + set .big_rewards, getarraysize(.big_rewards$); + donpcevent strnpcinfo(0) + "::OnHeartbeat"; // first heartbeat + end; +} -S_Return: +function|script|Easter Debug +{ + goto L_Menu; + +L_Menu: + clear; + mes "Please choose an option."; + if (get(.disabled, "Easter Eggs")) + menu + "Do Nothing.", L_Return, + "Enable eggs.", L_Enable; + menu + "Do Nothing.", L_Return, + "Disable eggs.", L_Disable; + +L_Enable: + set .disabled, 0, "Easter Eggs"; + clear; + mes "Easter Eggs enabled."; + next; + goto L_Menu; + +L_Disable: + set .disabled, 1, "Easter Eggs"; // TODO: (tmwa) automatically destroy puppets when using @disablenpc & also discard timers + clear; + mes "Easter Eggs disabled."; + next; + goto L_Menu; + +L_Return: return; } diff --git a/world/map/npc/009-1/_import.txt b/world/map/npc/009-1/_import.txt index 4c902627..6c27b6c5 100644 --- a/world/map/npc/009-1/_import.txt +++ b/world/map/npc/009-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 009-1 npc: npc/009-1/_mobs.txt +npc: npc/009-1/_nodes.txt npc: npc/009-1/_warps.txt npc: npc/009-1/constable.txt npc: npc/009-1/dock.txt diff --git a/world/map/npc/009-1/_mobs.txt b/world/map/npc/009-1/_mobs.txt index 247a3797..223569bf 100644 --- a/world/map/npc/009-1/_mobs.txt +++ b/world/map/npc/009-1/_mobs.txt @@ -1,34 +1,8 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Hurnscald mobs -009-1,74,32,2,1|monster|CloverPatch|1037,1,100000ms,120000ms,Mob009-1::On1037 -009-1,29,44,9,13|monster|PinkFlower|1014,2,0ms,250ms,Mob009-1::On1014 -009-1,88,51,15,4|monster|Squirrel|1038,2,0ms,5000ms,Mob009-1::On1038 -009-1,80,38,5,5|monster|Squirrel|1038,1,0ms,5000ms,Mob009-1::On1038 -009-1,0,0,0,0|monster|Butterfly|1055,5,30ms,20ms,Mob009-1::On1055 - - -009-1,0,0,0|script|Mob009-1|32767 -{ - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; -} +009-1,74,32,2,1|monster|CloverPatch|1037,1,100000ms,120000ms +009-1,29,44,9,13|monster|PinkFlower|1014,2,0ms,250ms +009-1,88,51,15,4|monster|Squirrel|1038,2,0ms,5000ms +009-1,80,38,5,5|monster|Squirrel|1038,1,0ms,5000ms +009-1,0,0,0,0|monster|Butterfly|1055,5,30ms,20ms diff --git a/world/map/npc/009-1/_nodes.txt b/world/map/npc/009-1/_nodes.txt new file mode 100644 index 00000000..6d59c8db --- /dev/null +++ b/world/map/npc/009-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Hurnscald nodes + +// (no nodes) diff --git a/world/map/npc/009-2/_import.txt b/world/map/npc/009-2/_import.txt index 2bec98b3..25198d72 100644 --- a/world/map/npc/009-2/_import.txt +++ b/world/map/npc/009-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 009-2 npc: npc/009-2/_mobs.txt +npc: npc/009-2/_nodes.txt npc: npc/009-2/_warps.txt npc: npc/009-2/airlia.txt npc: npc/009-2/alan.txt diff --git a/world/map/npc/009-2/_mobs.txt b/world/map/npc/009-2/_mobs.txt index e0b8a1a0..45fa02a8 100644 --- a/world/map/npc/009-2/_mobs.txt +++ b/world/map/npc/009-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Hurnscald Indoor mobs - - -009-2,0,0,0|script|Mob009-2|32767 -{ - end; -} diff --git a/world/map/npc/009-2/_nodes.txt b/world/map/npc/009-2/_nodes.txt new file mode 100644 index 00000000..161b9c17 --- /dev/null +++ b/world/map/npc/009-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Hurnscald Indoor nodes + +// (no nodes) diff --git a/world/map/npc/009-3/_import.txt b/world/map/npc/009-3/_import.txt index f147aa76..6cf14773 100644 --- a/world/map/npc/009-3/_import.txt +++ b/world/map/npc/009-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 009-3 npc: npc/009-3/_mobs.txt +npc: npc/009-3/_nodes.txt npc: npc/009-3/_warps.txt npc: npc/009-3/mapflags.txt npc: npc/009-3/sword.txt diff --git a/world/map/npc/009-3/_mobs.txt b/world/map/npc/009-3/_mobs.txt index ab403a12..64c43145 100644 --- a/world/map/npc/009-3/_mobs.txt +++ b/world/map/npc/009-3/_mobs.txt @@ -1,33 +1,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Hurnscald Cave mobs -009-3,0,0,0,0|monster|YellowSlime|1007,20,0ms,0ms,Mob009-3::On1007 -009-3,62,75,125,150|monster|BlackScorpion|1009,25,0ms,0ms,Mob009-3::On1009 -009-3,63,75,126,150|monster|RedSlime|1008,35,0ms,0ms,Mob009-3::On1008 -009-3,145,75,110,151|monster|CaveMaggot|1056,20,100000ms,30000ms,Mob009-3::On1056 - - -009-3,0,0,0|script|Mob009-3|32767 -{ - end; - -On1007: - set @mobID, 1007; - callfunc "MobPoints"; - end; - -On1008: - set @mobID, 1008; - callfunc "MobPoints"; - end; - -On1009: - set @mobID, 1009; - callfunc "MobPoints"; - end; - -On1056: - set @mobID, 1056; - callfunc "MobPoints"; - end; -} +009-3,0,0,0,0|monster|YellowSlime|1007,20,0ms,0ms +009-3,62,75,125,150|monster|BlackScorpion|1009,25,0ms,0ms +009-3,63,75,126,150|monster|RedSlime|1008,35,0ms,0ms +009-3,145,75,110,151|monster|CaveMaggot|1056,20,100000ms,30000ms diff --git a/world/map/npc/009-3/_nodes.txt b/world/map/npc/009-3/_nodes.txt new file mode 100644 index 00000000..a4b17b18 --- /dev/null +++ b/world/map/npc/009-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Hurnscald Cave nodes + +// (no nodes) diff --git a/world/map/npc/009-4/_import.txt b/world/map/npc/009-4/_import.txt index c10d7df3..efddeeb4 100644 --- a/world/map/npc/009-4/_import.txt +++ b/world/map/npc/009-4/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 009-4 npc: npc/009-4/_mobs.txt +npc: npc/009-4/_nodes.txt npc: npc/009-4/_warps.txt npc: npc/009-4/barriers.txt npc: npc/009-4/mapflags.txt diff --git a/world/map/npc/009-4/_mobs.txt b/world/map/npc/009-4/_mobs.txt index e81f350e..2995d15e 100644 --- a/world/map/npc/009-4/_mobs.txt +++ b/world/map/npc/009-4/_mobs.txt @@ -1,31 +1,10 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Orum Caves mobs -009-4,117,97,24,15|monster|Silkworm|1035,3,20000ms,14000ms,Mob009-4::On1035 -009-4,115,98,24,15|monster|CaveSnake|1021,5,20000ms,14000ms,Mob009-4::On1021 -009-4,103,28,24,15|monster|CaveSnake|1021,3,20000ms,14000ms,Mob009-4::On1021 -009-4,106,27,24,15|monster|Silkworm|1035,3,20000ms,14000ms,Mob009-4::On1035 -009-4,119,45,12,10|monster|Silkworm|1035,3,20000ms,14000ms,Mob009-4::On1035 -009-4,72,130,24,15|monster|Maggot|1002,3,20000ms,14000ms,Mob009-4::On1002 -009-4,38,116,24,15|monster|Maggot|1002,3,20000ms,14000ms,Mob009-4::On1002 - - -009-4,0,0,0|script|Mob009-4|32767 -{ - end; - -On1002: - set @mobID, 1002; - callfunc "MobPoints"; - end; - -On1021: - set @mobID, 1021; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; -} +009-4,117,97,24,15|monster|Silkworm|1035,3,20000ms,14000ms +009-4,115,98,24,15|monster|CaveSnake|1021,5,20000ms,14000ms +009-4,103,28,24,15|monster|CaveSnake|1021,3,20000ms,14000ms +009-4,106,27,24,15|monster|Silkworm|1035,3,20000ms,14000ms +009-4,119,45,12,10|monster|Silkworm|1035,3,20000ms,14000ms +009-4,72,130,24,15|monster|Maggot|1002,3,20000ms,14000ms +009-4,38,116,24,15|monster|Maggot|1002,3,20000ms,14000ms diff --git a/world/map/npc/009-4/_nodes.txt b/world/map/npc/009-4/_nodes.txt new file mode 100644 index 00000000..5050be70 --- /dev/null +++ b/world/map/npc/009-4/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Orum Caves nodes + +// (no nodes) diff --git a/world/map/npc/009-5/_import.txt b/world/map/npc/009-5/_import.txt index 6cbfcc60..fe3f3fff 100644 --- a/world/map/npc/009-5/_import.txt +++ b/world/map/npc/009-5/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 009-5 npc: npc/009-5/_mobs.txt +npc: npc/009-5/_nodes.txt npc: npc/009-5/_warps.txt npc: npc/009-5/mapflags.txt diff --git a/world/map/npc/009-5/_mobs.txt b/world/map/npc/009-5/_mobs.txt index 78d520be..7e4d996a 100644 --- a/world/map/npc/009-5/_mobs.txt +++ b/world/map/npc/009-5/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Last man standing mobs - - -009-5,0,0,0|script|Mob009-5|32767 -{ - end; -} diff --git a/world/map/npc/009-5/_nodes.txt b/world/map/npc/009-5/_nodes.txt new file mode 100644 index 00000000..9f0d888e --- /dev/null +++ b/world/map/npc/009-5/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Last man standing nodes + +// (no nodes) diff --git a/world/map/npc/009-6/_import.txt b/world/map/npc/009-6/_import.txt index 11296b22..3bb23125 100644 --- a/world/map/npc/009-6/_import.txt +++ b/world/map/npc/009-6/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 009-6 npc: npc/009-6/_mobs.txt +npc: npc/009-6/_nodes.txt npc: npc/009-6/_warps.txt npc: npc/009-6/brodomir.txt npc: npc/009-6/mapflags.txt diff --git a/world/map/npc/009-6/_mobs.txt b/world/map/npc/009-6/_mobs.txt index adb1e44e..c03fd729 100644 --- a/world/map/npc/009-6/_mobs.txt +++ b/world/map/npc/009-6/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Cave mobs - - -009-6,0,0,0|script|Mob009-6|32767 -{ - end; -} diff --git a/world/map/npc/009-6/_nodes.txt b/world/map/npc/009-6/_nodes.txt new file mode 100644 index 00000000..ed02d5dc --- /dev/null +++ b/world/map/npc/009-6/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Cave nodes + +// (no nodes) diff --git a/world/map/npc/009-7/_import.txt b/world/map/npc/009-7/_import.txt index 4ae626ea..a064a519 100644 --- a/world/map/npc/009-7/_import.txt +++ b/world/map/npc/009-7/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 009-7 npc: npc/009-7/_mobs.txt +npc: npc/009-7/_nodes.txt npc: npc/009-7/_warps.txt npc: npc/009-7/battlemaster.txt npc: npc/009-7/core.txt diff --git a/world/map/npc/009-7/_mobs.txt b/world/map/npc/009-7/_mobs.txt index bb641d0c..5eb4c228 100644 --- a/world/map/npc/009-7/_mobs.txt +++ b/world/map/npc/009-7/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // The Sanguine Vault mobs - - -009-7,0,0,0|script|Mob009-7|32767 -{ - end; -} diff --git a/world/map/npc/009-7/_nodes.txt b/world/map/npc/009-7/_nodes.txt new file mode 100644 index 00000000..ad714a60 --- /dev/null +++ b/world/map/npc/009-7/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// The Sanguine Vault nodes + +// (no nodes) diff --git a/world/map/npc/010-1/_import.txt b/world/map/npc/010-1/_import.txt index 2bbe3df8..170881fa 100644 --- a/world/map/npc/010-1/_import.txt +++ b/world/map/npc/010-1/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 010-1 npc: npc/010-1/_mobs.txt +npc: npc/010-1/_nodes.txt npc: npc/010-1/_warps.txt npc: npc/010-1/mapflags.txt diff --git a/world/map/npc/010-1/_mobs.txt b/world/map/npc/010-1/_mobs.txt index d73c842f..cf0ebae5 100644 --- a/world/map/npc/010-1/_mobs.txt +++ b/world/map/npc/010-1/_mobs.txt @@ -1,82 +1,16 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland mobs -010-1,82,63,19,19|monster|Scorpion|1003,1,100000ms,30000ms,Mob010-1::On1003 -010-1,49,71,31,19|monster|SpikyMushroom|1019,1,100000ms,30000ms,Mob010-1::On1019 -010-1,0,0,0,0|monster|PinkFlower|1014,30,50ms,0ms,Mob010-1::On1014 -010-1,0,0,0,0|monster|Snail|1041,20,50ms,0ms,Mob010-1::On1041 -010-1,0,0,0,0|monster|SpikyMushroom|1019,45,50ms,0ms,Mob010-1::On1019 -010-1,0,0,0,0|monster|LogHead|1025,40,100ms,0ms,Mob010-1::On1025 -010-1,0,0,0,0|monster|Mouboo|1028,15,0ms,10ms,Mob010-1::On1028 -010-1,0,0,0,0|monster|MauvePlant|1029,3,270000ms,180000ms,Mob010-1::On1029 -010-1,0,0,0,0|monster|CobaltPlant|1030,1,2700000ms,1800000ms,Mob010-1::On1030 -010-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms,Mob010-1::On1035 -010-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob010-1::On1037 -010-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms,Mob010-1::On1038 -010-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob010-1::On1055 - - -010-1,0,0,0|script|Mob010-1|32767 -{ - end; - -On1003: - set @mobID, 1003; - callfunc "MobPoints"; - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1025: - set @mobID, 1025; - callfunc "MobPoints"; - end; - -On1028: - set @mobID, 1028; - callfunc "MobPoints"; - end; - -On1029: - set @mobID, 1029; - callfunc "MobPoints"; - end; - -On1030: - set @mobID, 1030; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1041: - set @mobID, 1041; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; -} +010-1,82,63,19,19|monster|Scorpion|1003,1,100000ms,30000ms +010-1,49,71,31,19|monster|SpikyMushroom|1019,1,100000ms,30000ms +010-1,0,0,0,0|monster|PinkFlower|1014,30,50ms,0ms +010-1,0,0,0,0|monster|Snail|1041,20,50ms,0ms +010-1,0,0,0,0|monster|SpikyMushroom|1019,45,50ms,0ms +010-1,0,0,0,0|monster|LogHead|1025,40,100ms,0ms +010-1,0,0,0,0|monster|Mouboo|1028,15,0ms,10ms +010-1,0,0,0,0|monster|MauvePlant|1029,3,270000ms,180000ms +010-1,0,0,0,0|monster|CobaltPlant|1030,1,2700000ms,1800000ms +010-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms +010-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms +010-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms +010-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms diff --git a/world/map/npc/010-1/_nodes.txt b/world/map/npc/010-1/_nodes.txt new file mode 100644 index 00000000..12c08221 --- /dev/null +++ b/world/map/npc/010-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland nodes + +// (no nodes) diff --git a/world/map/npc/010-2/_import.txt b/world/map/npc/010-2/_import.txt index 9c2b3065..7d790a1b 100644 --- a/world/map/npc/010-2/_import.txt +++ b/world/map/npc/010-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 010-2 npc: npc/010-2/_mobs.txt +npc: npc/010-2/_nodes.txt npc: npc/010-2/_warps.txt npc: npc/010-2/band.txt npc: npc/010-2/chef.txt diff --git a/world/map/npc/010-2/_mobs.txt b/world/map/npc/010-2/_mobs.txt index 3b258bd5..5ae78616 100644 --- a/world/map/npc/010-2/_mobs.txt +++ b/world/map/npc/010-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Dimond's Cove mobs - - -010-2,0,0,0|script|Mob010-2|32767 -{ - end; -} diff --git a/world/map/npc/010-2/_nodes.txt b/world/map/npc/010-2/_nodes.txt new file mode 100644 index 00000000..97d1478f --- /dev/null +++ b/world/map/npc/010-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Dimond's Cove nodes + +// (no nodes) diff --git a/world/map/npc/011-1/_import.txt b/world/map/npc/011-1/_import.txt index 13faf23a..161caeb4 100644 --- a/world/map/npc/011-1/_import.txt +++ b/world/map/npc/011-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 011-1 npc: npc/011-1/_mobs.txt +npc: npc/011-1/_nodes.txt npc: npc/011-1/_warps.txt npc: npc/011-1/alchemist.txt npc: npc/011-1/auldsbel.txt diff --git a/world/map/npc/011-1/_mobs.txt b/world/map/npc/011-1/_mobs.txt index 3a0c0ce3..596c7194 100644 --- a/world/map/npc/011-1/_mobs.txt +++ b/world/map/npc/011-1/_mobs.txt @@ -1,88 +1,17 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland mobs -011-1,0,0,0,0|monster|EvilMushroom|1013,30,0ms,0ms,Mob011-1::On1013 -011-1,0,0,0,0|monster|PinkFlower|1014,20,0ms,0ms,Mob011-1::On1014 -011-1,0,0,0,0|monster|SpikyMushroom|1019,5,0ms,0ms,Mob011-1::On1019 -011-1,0,0,0,0|monster|Snail|1041,1,0ms,0ms,Mob011-1::On1041 -011-1,0,0,0,0|monster|Mouboo|1028,5,0ms,10ms,Mob011-1::On1028 -011-1,0,0,0,0|monster|MauvePlant|1029,3,270000ms,180000ms,Mob011-1::On1029 -011-1,0,0,0,0|monster|AlizarinPlant|1032,1,2700000ms,1800000ms,Mob011-1::On1032 -011-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms,Mob011-1::On1035 -011-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob011-1::On1037 -011-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms,Mob011-1::On1038 -011-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob011-1::On1055 -011-1,0,0,0,0|monster|Mouboo|1028,5,0ms,10ms,Mob011-1::On1028 -011-1,1,1,0,0|monster|ManaBug|1131,18,30ms,0ms,Mob011-1::On1131 -011-1,92,44,35,28|monster|Maggot|1002,10,30ms,0ms,Mob011-1::On1002 - - -011-1,0,0,0|script|Mob011-1|32767 -{ - end; - -On1002: - set @mobID, 1002; - callfunc "MobPoints"; - end; - -On1013: - set @mobID, 1013; - callfunc "MobPoints"; - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1028: - set @mobID, 1028; - callfunc "MobPoints"; - end; - -On1029: - set @mobID, 1029; - callfunc "MobPoints"; - end; - -On1032: - set @mobID, 1032; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1041: - set @mobID, 1041; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; - -On1131: - set @mobID, 1131; - callfunc "MobPoints"; - end; -} +011-1,0,0,0,0|monster|EvilMushroom|1013,30,0ms,0ms +011-1,0,0,0,0|monster|PinkFlower|1014,20,0ms,0ms +011-1,0,0,0,0|monster|SpikyMushroom|1019,5,0ms,0ms +011-1,0,0,0,0|monster|Snail|1041,1,0ms,0ms +011-1,0,0,0,0|monster|Mouboo|1028,5,0ms,10ms +011-1,0,0,0,0|monster|MauvePlant|1029,3,270000ms,180000ms +011-1,0,0,0,0|monster|AlizarinPlant|1032,1,2700000ms,1800000ms +011-1,0,0,0,0|monster|Silkworm|1035,2,60000ms,30000ms +011-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms +011-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms +011-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms +011-1,0,0,0,0|monster|Mouboo|1028,5,0ms,10ms +011-1,1,1,0,0|monster|ManaBug|1131,18,30ms,0ms +011-1,92,44,35,28|monster|Maggot|1002,10,30ms,0ms diff --git a/world/map/npc/011-1/_nodes.txt b/world/map/npc/011-1/_nodes.txt new file mode 100644 index 00000000..12c08221 --- /dev/null +++ b/world/map/npc/011-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland nodes + +// (no nodes) diff --git a/world/map/npc/011-3/_import.txt b/world/map/npc/011-3/_import.txt index f916fcb2..d8dd3777 100644 --- a/world/map/npc/011-3/_import.txt +++ b/world/map/npc/011-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 011-3 npc: npc/011-3/_mobs.txt +npc: npc/011-3/_nodes.txt npc: npc/011-3/_warps.txt npc: npc/011-3/hermit.txt npc: npc/011-3/mapflags.txt diff --git a/world/map/npc/011-3/_mobs.txt b/world/map/npc/011-3/_mobs.txt index 4e4a504e..f90961fb 100644 --- a/world/map/npc/011-3/_mobs.txt +++ b/world/map/npc/011-3/_mobs.txt @@ -1,21 +1,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Hermit's Cave mobs -011-3,0,0,0,0|monster|Bat|1017,10,0ms,0ms,Mob011-3::On1017 -011-3,0,0,0,0|monster|Silkworm|1035,3,60000ms,30000ms,Mob011-3::On1035 - - -011-3,0,0,0|script|Mob011-3|32767 -{ - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; -} +011-3,0,0,0,0|monster|Bat|1017,10,0ms,0ms +011-3,0,0,0,0|monster|Silkworm|1035,3,60000ms,30000ms diff --git a/world/map/npc/011-3/_nodes.txt b/world/map/npc/011-3/_nodes.txt new file mode 100644 index 00000000..d9dd7661 --- /dev/null +++ b/world/map/npc/011-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Hermit's Cave nodes + +// (no nodes) diff --git a/world/map/npc/011-4/_import.txt b/world/map/npc/011-4/_import.txt index b7b835e1..1b654a65 100644 --- a/world/map/npc/011-4/_import.txt +++ b/world/map/npc/011-4/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 011-4 npc: npc/011-4/_mobs.txt +npc: npc/011-4/_nodes.txt npc: npc/011-4/_warps.txt npc: npc/011-4/bl_barrier.txt npc: npc/011-4/mapflags.txt diff --git a/world/map/npc/011-4/_mobs.txt b/world/map/npc/011-4/_mobs.txt index 81da8edc..92d32ddf 100644 --- a/world/map/npc/011-4/_mobs.txt +++ b/world/map/npc/011-4/_mobs.txt @@ -1,36 +1,10 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Lake Cave mobs -011-4,52,30,39,39|monster|SpikyMushroom|1019,1,100000ms,30000ms,Mob011-4::On1019 -011-4,93,114,39,39|monster|CaveSnake|1021,1,100000ms,30000ms,Mob011-4::On1021 -011-4,0,0,0,0|monster|CaveSnake|1021,40,0ms,0ms,Mob011-4::On1021 -011-4,0,0,0,0|monster|SpikyMushroom|1019,15,0ms,0ms,Mob011-4::On1019 -011-4,60,78,56,75|monster|CaveMaggot|1056,10,100000ms,30000ms,Mob011-4::On1056 -011-4,63,21,110,35|monster|CaveMaggot|1056,10,100000ms,30000ms,Mob011-4::On1056 -011-4,0,0,0,0|monster|Bat|1017,20,180000ms,40000ms,Mob011-4::On1017 - - -011-4,0,0,0|script|Mob011-4|32767 -{ - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1021: - set @mobID, 1021; - callfunc "MobPoints"; - end; - -On1056: - set @mobID, 1056; - callfunc "MobPoints"; - end; -} +011-4,52,30,39,39|monster|SpikyMushroom|1019,1,100000ms,30000ms +011-4,93,114,39,39|monster|CaveSnake|1021,1,100000ms,30000ms +011-4,0,0,0,0|monster|CaveSnake|1021,40,0ms,0ms +011-4,0,0,0,0|monster|SpikyMushroom|1019,15,0ms,0ms +011-4,60,78,56,75|monster|CaveMaggot|1056,10,100000ms,30000ms +011-4,63,21,110,35|monster|CaveMaggot|1056,10,100000ms,30000ms +011-4,0,0,0,0|monster|Bat|1017,20,180000ms,40000ms diff --git a/world/map/npc/011-4/_nodes.txt b/world/map/npc/011-4/_nodes.txt new file mode 100644 index 00000000..d439cbc5 --- /dev/null +++ b/world/map/npc/011-4/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Lake Cave nodes + +// (no nodes) diff --git a/world/map/npc/011-6/_import.txt b/world/map/npc/011-6/_import.txt index 34a781ad..216402e5 100644 --- a/world/map/npc/011-6/_import.txt +++ b/world/map/npc/011-6/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 011-6 npc: npc/011-6/_mobs.txt +npc: npc/011-6/_nodes.txt npc: npc/011-6/_warps.txt npc: npc/011-6/barrier.txt npc: npc/011-6/bryant.txt diff --git a/world/map/npc/011-6/_mobs.txt b/world/map/npc/011-6/_mobs.txt index 4ba7f2ee..6a6ea09d 100644 --- a/world/map/npc/011-6/_mobs.txt +++ b/world/map/npc/011-6/_mobs.txt @@ -1,96 +1,50 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Bandit Cave mobs -011-6,152,72,283,127|monster|Silkworm|1035,9,30000ms,100000ms,Mob011-6::On1035 -011-6,263,38,30,34|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064 -011-6,262,114,38,38|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064 -011-6,132,119,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064 -011-6,170,66,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064 -011-6,67,70,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064 -011-6,196,107,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064 -011-6,196,29,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064 -011-6,36,37,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064 -011-6,112,40,45,48|monster|Bandit|1064,2,30000ms,60000ms,Mob011-6::On1064 -011-6,31,99,17,21|monster|Bandit|1064,1,30000ms,30000ms,Mob011-6::On1064 -011-6,223,250,123,65|monster|Bat|1017,5,30000ms,100000ms,Mob011-6::On1017 -011-6,224,175,118,25|monster|Bat|1017,3,30000ms,100000ms,Mob011-6::On1017 -011-6,257,77,4,126|monster|Bat|1017,6,30000ms,100000ms,Mob011-6::On1017 -011-6,192,77,4,126|monster|Bat|1017,9,30000ms,100000ms,Mob011-6::On1017 -011-6,167,110,87,13|monster|Bat|1017,9,30000ms,100000ms,Mob011-6::On1017 -011-6,75,70,104,96|monster|Bat|1017,23,30000ms,100000ms,Mob011-6::On1017 -011-6,78,195,129,97|monster|Bat|1017,9,30000ms,100000ms,Mob011-6::On1017 -011-6,168,109,36,37|monster|SpikyMushroom|1019,5,30000ms,100000ms,Mob011-6::On1019 -011-6,199,76,36,37|monster|SpikyMushroom|1019,5,30000ms,100000ms,Mob011-6::On1019 -011-6,88,163,29,27|monster|SpikyMushroom|1019,5,30000ms,100000ms,Mob011-6::On1019 -011-6,48,113,35,19|monster|SpikyMushroom|1019,5,30000ms,100000ms,Mob011-6::On1019 -011-6,177,94,20,28|monster|EvilMushroom|1013,4,30000ms,100000ms,Mob011-6::On1013 -011-6,194,49,20,28|monster|EvilMushroom|1013,2,30000ms,100000ms,Mob011-6::On1013 -011-6,51,115,47,24|monster|EvilMushroom|1013,2,30000ms,100000ms,Mob011-6::On1013 -011-6,63,169,13,17|monster|EvilMushroom|1013,2,30000ms,100000ms,Mob011-6::On1013 -011-6,100,226,29,14|monster|SpikyMushroom|1019,3,30000ms,100000ms,Mob011-6::On1019 -011-6,260,44,53,16|monster|SpikyMushroom|1019,3,30000ms,100000ms,Mob011-6::On1019 -011-6,272,48,21,28|monster|EvilMushroom|1013,2,30000ms,100000ms,Mob011-6::On1013 -011-6,95,78,31,25|monster|YellowSlime|1007,5,30000ms,100000ms,Mob011-6::On1007 -011-6,59,36,19,25|monster|YellowSlime|1007,5,30000ms,100000ms,Mob011-6::On1007 -011-6,26,69,19,25|monster|YellowSlime|1007,5,30000ms,100000ms,Mob011-6::On1007 -011-6,61,101,14,10|monster|YellowSlime|1007,3,30000ms,100000ms,Mob011-6::On1007 -011-6,50,61,9,12|monster|YellowSlime|1007,3,30000ms,100000ms,Mob011-6::On1007 -011-6,128,39,9,12|monster|YellowSlime|1007,3,30000ms,100000ms,Mob011-6::On1007 -011-6,41,178,9,12|monster|YellowSlime|1007,1,30000ms,100000ms,Mob011-6::On1007 -011-6,70,229,9,12|monster|YellowSlime|1007,1,30000ms,100000ms,Mob011-6::On1007 -011-6,20,204,9,12|monster|YellowSlime|1007,1,30000ms,100000ms,Mob011-6::On1007 -011-6,114,190,9,12|monster|YellowSlime|1007,4,30000ms,100000ms,Mob011-6::On1007 -011-6,137,205,9,12|monster|YellowSlime|1007,2,30000ms,100000ms,Mob011-6::On1007 -011-6,79,220,29,14|monster|CaveSnake|1021,3,30000ms,100000ms,Mob011-6::On1021 -011-6,115,210,29,14|monster|CaveSnake|1021,3,30000ms,100000ms,Mob011-6::On1021 -011-6,41,193,31,31|monster|CaveSnake|1021,3,30000ms,100000ms,Mob011-6::On1021 -011-6,70,143,31,31|monster|CaveSnake|1021,3,30000ms,100000ms,Mob011-6::On1021 -011-6,97,183,29,14|monster|CaveSnake|1021,3,30000ms,100000ms,Mob011-6::On1021 -011-6,172,252,9,12|monster|CaveMaggot|1056,4,30000ms,100000ms,Mob011-6::On1056 -011-6,263,236,16,5|monster|CaveMaggot|1056,3,30000ms,100000ms,Mob011-6::On1056 - - -011-6,0,0,0|script|Mob011-6|32767 -{ - end; - -On1007: - set @mobID, 1007; - callfunc "MobPoints"; - end; - -On1013: - set @mobID, 1013; - callfunc "MobPoints"; - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1021: - set @mobID, 1021; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1056: - set @mobID, 1056; - callfunc "MobPoints"; - end; - -On1064: - set @mobID, 1064; - callfunc "MobPoints"; - end; -} +011-6,152,72,283,127|monster|Silkworm|1035,9,30000ms,100000ms +011-6,263,38,30,34|monster|Bandit|1064,1,30000ms,30000ms +011-6,262,114,38,38|monster|Bandit|1064,1,30000ms,30000ms +011-6,132,119,17,21|monster|Bandit|1064,1,30000ms,30000ms +011-6,170,66,17,21|monster|Bandit|1064,1,30000ms,30000ms +011-6,67,70,17,21|monster|Bandit|1064,1,30000ms,30000ms +011-6,196,107,17,21|monster|Bandit|1064,1,30000ms,30000ms +011-6,196,29,17,21|monster|Bandit|1064,1,30000ms,30000ms +011-6,36,37,17,21|monster|Bandit|1064,1,30000ms,30000ms +011-6,112,40,45,48|monster|Bandit|1064,2,30000ms,60000ms +011-6,31,99,17,21|monster|Bandit|1064,1,30000ms,30000ms +011-6,223,250,123,65|monster|Bat|1017,5,30000ms,100000ms +011-6,224,175,118,25|monster|Bat|1017,3,30000ms,100000ms +011-6,257,77,4,126|monster|Bat|1017,6,30000ms,100000ms +011-6,192,77,4,126|monster|Bat|1017,9,30000ms,100000ms +011-6,167,110,87,13|monster|Bat|1017,9,30000ms,100000ms +011-6,75,70,104,96|monster|Bat|1017,23,30000ms,100000ms +011-6,78,195,129,97|monster|Bat|1017,9,30000ms,100000ms +011-6,168,109,36,37|monster|SpikyMushroom|1019,5,30000ms,100000ms +011-6,199,76,36,37|monster|SpikyMushroom|1019,5,30000ms,100000ms +011-6,88,163,29,27|monster|SpikyMushroom|1019,5,30000ms,100000ms +011-6,48,113,35,19|monster|SpikyMushroom|1019,5,30000ms,100000ms +011-6,177,94,20,28|monster|EvilMushroom|1013,4,30000ms,100000ms +011-6,194,49,20,28|monster|EvilMushroom|1013,2,30000ms,100000ms +011-6,51,115,47,24|monster|EvilMushroom|1013,2,30000ms,100000ms +011-6,63,169,13,17|monster|EvilMushroom|1013,2,30000ms,100000ms +011-6,100,226,29,14|monster|SpikyMushroom|1019,3,30000ms,100000ms +011-6,260,44,53,16|monster|SpikyMushroom|1019,3,30000ms,100000ms +011-6,272,48,21,28|monster|EvilMushroom|1013,2,30000ms,100000ms +011-6,95,78,31,25|monster|YellowSlime|1007,5,30000ms,100000ms +011-6,59,36,19,25|monster|YellowSlime|1007,5,30000ms,100000ms +011-6,26,69,19,25|monster|YellowSlime|1007,5,30000ms,100000ms +011-6,61,101,14,10|monster|YellowSlime|1007,3,30000ms,100000ms +011-6,50,61,9,12|monster|YellowSlime|1007,3,30000ms,100000ms +011-6,128,39,9,12|monster|YellowSlime|1007,3,30000ms,100000ms +011-6,41,178,9,12|monster|YellowSlime|1007,1,30000ms,100000ms +011-6,70,229,9,12|monster|YellowSlime|1007,1,30000ms,100000ms +011-6,20,204,9,12|monster|YellowSlime|1007,1,30000ms,100000ms +011-6,114,190,9,12|monster|YellowSlime|1007,4,30000ms,100000ms +011-6,137,205,9,12|monster|YellowSlime|1007,2,30000ms,100000ms +011-6,79,220,29,14|monster|CaveSnake|1021,3,30000ms,100000ms +011-6,115,210,29,14|monster|CaveSnake|1021,3,30000ms,100000ms +011-6,41,193,31,31|monster|CaveSnake|1021,3,30000ms,100000ms +011-6,70,143,31,31|monster|CaveSnake|1021,3,30000ms,100000ms +011-6,97,183,29,14|monster|CaveSnake|1021,3,30000ms,100000ms +011-6,172,252,9,12|monster|CaveMaggot|1056,4,30000ms,100000ms +011-6,263,236,16,5|monster|CaveMaggot|1056,3,30000ms,100000ms diff --git a/world/map/npc/011-6/_nodes.txt b/world/map/npc/011-6/_nodes.txt new file mode 100644 index 00000000..7a5c6a33 --- /dev/null +++ b/world/map/npc/011-6/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Bandit Cave nodes + +// (no nodes) diff --git a/world/map/npc/012-1/_import.txt b/world/map/npc/012-1/_import.txt index 0a7ff68b..4ce6c34d 100644 --- a/world/map/npc/012-1/_import.txt +++ b/world/map/npc/012-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 012-1 npc: npc/012-1/_mobs.txt +npc: npc/012-1/_nodes.txt npc: npc/012-1/_warps.txt npc: npc/012-1/amrak.txt npc: npc/012-1/flowerpentagram2.txt diff --git a/world/map/npc/012-1/_mobs.txt b/world/map/npc/012-1/_mobs.txt index cdcc8730..4f85e2ff 100644 --- a/world/map/npc/012-1/_mobs.txt +++ b/world/map/npc/012-1/_mobs.txt @@ -1,75 +1,14 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland Hills mobs -012-1,0,0,0,0|monster|PinkFlower|1014,13,0ms,100ms,Mob012-1::On1014 -012-1,0,0,0,0|monster|SpikyMushroom|1019,25,0ms,10ms,Mob012-1::On1019 -012-1,0,0,0,0|monster|Mouboo|1028,20,0ms,10ms,Mob012-1::On1028 -012-1,0,0,0,0|monster|MauvePlant|1029,5,2700000ms,1800000ms,Mob012-1::On1029 -012-1,0,0,0,0|monster|CobaltPlant|1030,2,2700000ms,1800000ms,Mob012-1::On1030 -012-1,0,0,0,0|monster|GambogePlant|1031,2,2700000ms,1800000ms,Mob012-1::On1031 -012-1,0,0,0,0|monster|AlizarinPlant|1032,2,2700000ms,1800000ms,Mob012-1::On1032 -012-1,0,0,0,0|monster|Silkworm|1035,5,60000ms,30000ms,Mob012-1::On1035 -012-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob012-1::On1037 -012-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms,Mob012-1::On1038 -012-1,0,0,0,0|monster|Butterfly|1055,20,30ms,20ms,Mob012-1::On1055 - - -012-1,0,0,0|script|Mob012-1|32767 -{ - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1028: - set @mobID, 1028; - callfunc "MobPoints"; - end; - -On1029: - set @mobID, 1029; - callfunc "MobPoints"; - end; - -On1030: - set @mobID, 1030; - callfunc "MobPoints"; - end; - -On1031: - set @mobID, 1031; - callfunc "MobPoints"; - end; - -On1032: - set @mobID, 1032; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; -} +012-1,0,0,0,0|monster|PinkFlower|1014,13,0ms,100ms +012-1,0,0,0,0|monster|SpikyMushroom|1019,25,0ms,10ms +012-1,0,0,0,0|monster|Mouboo|1028,20,0ms,10ms +012-1,0,0,0,0|monster|MauvePlant|1029,5,2700000ms,1800000ms +012-1,0,0,0,0|monster|CobaltPlant|1030,2,2700000ms,1800000ms +012-1,0,0,0,0|monster|GambogePlant|1031,2,2700000ms,1800000ms +012-1,0,0,0,0|monster|AlizarinPlant|1032,2,2700000ms,1800000ms +012-1,0,0,0,0|monster|Silkworm|1035,5,60000ms,30000ms +012-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms +012-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms +012-1,0,0,0,0|monster|Butterfly|1055,20,30ms,20ms diff --git a/world/map/npc/012-1/_nodes.txt b/world/map/npc/012-1/_nodes.txt new file mode 100644 index 00000000..13ee4f92 --- /dev/null +++ b/world/map/npc/012-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland Hills nodes + +// (no nodes) diff --git a/world/map/npc/012-3/_import.txt b/world/map/npc/012-3/_import.txt index 2f9275c8..82b77be8 100644 --- a/world/map/npc/012-3/_import.txt +++ b/world/map/npc/012-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 012-3 npc: npc/012-3/_mobs.txt +npc: npc/012-3/_nodes.txt npc: npc/012-3/_warps.txt npc: npc/012-3/mana-seed.txt npc: npc/012-3/mapflags.txt diff --git a/world/map/npc/012-3/_mobs.txt b/world/map/npc/012-3/_mobs.txt index 354fc289..e9314763 100644 --- a/world/map/npc/012-3/_mobs.txt +++ b/world/map/npc/012-3/_mobs.txt @@ -1,40 +1,19 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Moggun Cave mobs -012-3,448,65,18,7|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061 -012-3,442,45,18,7|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061 -012-3,412,31,18,7|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061 -012-3,347,39,8,16|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061 -012-3,363,101,17,18|monster|Moggun|1061,10,100000ms,30000ms,Mob012-3::On1061 -012-3,446,81,18,7|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061 -012-3,388,138,17,7|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061 -012-3,409,78,8,17|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061 -012-3,382,152,17,7|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061 -012-3,430,117,8,16|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061 -012-3,330,100,8,16|monster|Moggun|1061,5,100000ms,30000ms,Mob012-3::On1061 -012-3,269,138,17,18|monster|Moggun|1061,10,100000ms,30000ms,Mob012-3::On1061 -012-3,188,52,17,18|monster|Moggun|1061,10,100000ms,30000ms,Mob012-3::On1061 -012-3,165,106,17,18|monster|Moggun|1061,10,100000ms,30000ms,Mob012-3::On1061 -012-3,0,0,0,0|monster|Bat|1017,100,0ms,0ms,Mob012-3::On1017 -012-3,0,0,0,0|monster|CaveSnake|1021,75,0ms,0ms,Mob012-3::On1021 - - -012-3,0,0,0|script|Mob012-3|32767 -{ - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1021: - set @mobID, 1021; - callfunc "MobPoints"; - end; - -On1061: - set @mobID, 1061; - callfunc "MobPoints"; - end; -} +012-3,448,65,18,7|monster|Moggun|1061,5,100000ms,30000ms +012-3,442,45,18,7|monster|Moggun|1061,5,100000ms,30000ms +012-3,412,31,18,7|monster|Moggun|1061,5,100000ms,30000ms +012-3,347,39,8,16|monster|Moggun|1061,5,100000ms,30000ms +012-3,363,101,17,18|monster|Moggun|1061,10,100000ms,30000ms +012-3,446,81,18,7|monster|Moggun|1061,5,100000ms,30000ms +012-3,388,138,17,7|monster|Moggun|1061,5,100000ms,30000ms +012-3,409,78,8,17|monster|Moggun|1061,5,100000ms,30000ms +012-3,382,152,17,7|monster|Moggun|1061,5,100000ms,30000ms +012-3,430,117,8,16|monster|Moggun|1061,5,100000ms,30000ms +012-3,330,100,8,16|monster|Moggun|1061,5,100000ms,30000ms +012-3,269,138,17,18|monster|Moggun|1061,10,100000ms,30000ms +012-3,188,52,17,18|monster|Moggun|1061,10,100000ms,30000ms +012-3,165,106,17,18|monster|Moggun|1061,10,100000ms,30000ms +012-3,0,0,0,0|monster|Bat|1017,100,0ms,0ms +012-3,0,0,0,0|monster|CaveSnake|1021,75,0ms,0ms diff --git a/world/map/npc/012-3/_nodes.txt b/world/map/npc/012-3/_nodes.txt new file mode 100644 index 00000000..ea6a8cae --- /dev/null +++ b/world/map/npc/012-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Moggun Cave nodes + +// (no nodes) diff --git a/world/map/npc/012-4/_import.txt b/world/map/npc/012-4/_import.txt index 6dc69dad..ecf5657f 100644 --- a/world/map/npc/012-4/_import.txt +++ b/world/map/npc/012-4/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 012-4 npc: npc/012-4/_mobs.txt +npc: npc/012-4/_nodes.txt npc: npc/012-4/_warps.txt npc: npc/012-4/mapflags.txt npc: npc/012-4/pvpflag.txt diff --git a/world/map/npc/012-4/_mobs.txt b/world/map/npc/012-4/_mobs.txt index e1a4a259..142ec427 100644 --- a/world/map/npc/012-4/_mobs.txt +++ b/world/map/npc/012-4/_mobs.txt @@ -1,113 +1,67 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Terranite Cave mobs -012-4,217,45,12,3|monster|Moggun|1061,3,100000ms,30000ms,Mob012-4::On1061 -012-4,223,30,12,3|monster|Moggun|1061,3,100000ms,30000ms,Mob012-4::On1061 -012-4,239,48,12,3|monster|Moggun|1061,3,100000ms,30000ms,Mob012-4::On1061 -012-4,197,39,7,8|monster|Moggun|1061,3,100000ms,30000ms,Mob012-4::On1061 -012-4,210,35,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,241,38,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,237,59,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,226,73,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,209,94,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,263,29,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,274,48,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,267,70,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,259,79,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,274,79,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,268,91,24,15|monster|Moggun|1061,10,100000ms,30000ms,Mob012-4::On1061 -012-4,209,146,69,55|monster|Spider|1012,50,100000ms,30000ms,Mob012-4::On1012 -012-4,254,163,19,46|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007 -012-4,167,175,17,22|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007 -012-4,148,176,17,22|monster|RedSlime|1008,20,100000ms,30000ms,Mob012-4::On1008 -012-4,131,88,17,22|monster|RedSlime|1008,15,100000ms,30000ms,Mob012-4::On1008 -012-4,140,131,17,22|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007 -012-4,42,128,17,9|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007 -012-4,64,62,25,30|monster|Spider|1012,20,100000ms,30000ms,Mob012-4::On1012 -012-4,69,89,17,21|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007 -012-4,34,45,17,33|monster|Terranite|1062,3,100000ms,30000ms,Mob012-4::On1062 -012-4,64,36,24,17|monster|Skeleton|1043,3,100000ms,30000ms,Mob012-4::On1043 -012-4,100,115,24,17|monster|Skeleton|1043,3,100000ms,30000ms,Mob012-4::On1043 -012-4,90,137,17,22|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007 -012-4,59,113,14,17|monster|LadySkeleton|1044,3,100000ms,30000ms,Mob012-4::On1044 -012-4,42,176,15,13|monster|Terranite|1062,3,100000ms,30000ms,Mob012-4::On1062 -012-4,120,177,24,17|monster|LadySkeleton|1044,3,100000ms,30000ms,Mob012-4::On1044 -012-4,287,180,24,17|monster|LadySkeleton|1044,3,100000ms,30000ms,Mob012-4::On1044 -012-4,340,175,24,17|monster|Skeleton|1043,3,100000ms,30000ms,Mob012-4::On1043 -012-4,390,156,69,54|monster|Spider|1012,40,100000ms,30000ms,Mob012-4::On1012 -012-4,358,37,20,22|monster|Terranite|1062,3,100000ms,30000ms,Mob012-4::On1062 -012-4,481,110,19,24|monster|Terranite|1062,3,100000ms,30000ms,Mob012-4::On1062 -012-4,435,114,24,17|monster|Skeleton|1043,3,100000ms,30000ms,Mob012-4::On1043 -012-4,477,82,24,17|monster|LadySkeleton|1044,3,100000ms,30000ms,Mob012-4::On1044 -012-4,354,106,19,46|monster|YellowSlime|1007,10,100000ms,30000ms,Mob012-4::On1007 -012-4,342,139,17,22|monster|RedSlime|1008,15,100000ms,30000ms,Mob012-4::On1008 -012-4,389,81,33,15|monster|RedSlime|1008,20,100000ms,30000ms,Mob012-4::On1008 -012-4,409,35,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,413,73,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,395,63,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,314,182,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,409,121,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,456,99,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,133,153,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,153,98,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,126,65,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,81,180,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,61,159,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,271,157,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,270,182,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,322,141,17,22|monster|RedSlime|1008,20,100000ms,30000ms,Mob012-4::On1008 -012-4,451,111,7,8|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,422,50,11,32|monster|Spider|1012,10,100000ms,30000ms,Mob012-4::On1012 -012-4,380,40,14,22|monster|Spider|1012,10,100000ms,30000ms,Mob012-4::On1012 -012-4,124,49,9,24|monster|Terranite|1062,1,100000ms,30000ms,Mob012-4::On1062 -012-4,80,110,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,42,142,20,11|monster|Skeleton|1043,3,100000ms,30000ms,Mob012-4::On1043 -012-4,41,159,11,20|monster|Spider|1012,20,100000ms,30000ms,Mob012-4::On1012 -012-4,95,180,9,5|monster|Bat|1017,5,100000ms,30000ms,Mob012-4::On1017 -012-4,91,180,23,10|monster|Spider|1012,20,100000ms,30000ms,Mob012-4::On1012 - - -012-4,0,0,0|script|Mob012-4|32767 -{ - end; - -On1007: - set @mobID, 1007; - callfunc "MobPoints"; - end; - -On1008: - set @mobID, 1008; - callfunc "MobPoints"; - end; - -On1012: - set @mobID, 1012; - callfunc "MobPoints"; - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1043: - set @mobID, 1043; - callfunc "MobPoints"; - end; - -On1044: - set @mobID, 1044; - callfunc "MobPoints"; - end; - -On1061: - set @mobID, 1061; - callfunc "MobPoints"; - end; - -On1062: - set @mobID, 1062; - callfunc "MobPoints"; - end; -} +012-4,217,45,12,3|monster|Moggun|1061,3,100000ms,30000ms +012-4,223,30,12,3|monster|Moggun|1061,3,100000ms,30000ms +012-4,239,48,12,3|monster|Moggun|1061,3,100000ms,30000ms +012-4,197,39,7,8|monster|Moggun|1061,3,100000ms,30000ms +012-4,210,35,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,241,38,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,237,59,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,226,73,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,209,94,9,5|monster|Bat|1017,5,100000ms,30000ms +012-4,263,29,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,274,48,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,267,70,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,259,79,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,274,79,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,268,91,24,15|monster|Moggun|1061,10,100000ms,30000ms +012-4,209,146,69,55|monster|Spider|1012,50,100000ms,30000ms +012-4,254,163,19,46|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,167,175,17,22|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,148,176,17,22|monster|RedSlime|1008,20,100000ms,30000ms +012-4,131,88,17,22|monster|RedSlime|1008,15,100000ms,30000ms +012-4,140,131,17,22|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,42,128,17,9|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,64,62,25,30|monster|Spider|1012,20,100000ms,30000ms +012-4,69,89,17,21|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,34,45,17,33|monster|Terranite|1062,3,100000ms,30000ms +012-4,64,36,24,17|monster|Skeleton|1043,3,100000ms,30000ms +012-4,100,115,24,17|monster|Skeleton|1043,3,100000ms,30000ms +012-4,90,137,17,22|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,59,113,14,17|monster|LadySkeleton|1044,3,100000ms,30000ms +012-4,42,176,15,13|monster|Terranite|1062,3,100000ms,30000ms +012-4,120,177,24,17|monster|LadySkeleton|1044,3,100000ms,30000ms +012-4,287,180,24,17|monster|LadySkeleton|1044,3,100000ms,30000ms +012-4,340,175,24,17|monster|Skeleton|1043,3,100000ms,30000ms +012-4,390,156,69,54|monster|Spider|1012,40,100000ms,30000ms +012-4,358,37,20,22|monster|Terranite|1062,3,100000ms,30000ms +012-4,481,110,19,24|monster|Terranite|1062,3,100000ms,30000ms +012-4,435,114,24,17|monster|Skeleton|1043,3,100000ms,30000ms +012-4,477,82,24,17|monster|LadySkeleton|1044,3,100000ms,30000ms +012-4,354,106,19,46|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,342,139,17,22|monster|RedSlime|1008,15,100000ms,30000ms +012-4,389,81,33,15|monster|RedSlime|1008,20,100000ms,30000ms +012-4,409,35,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,413,73,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,395,63,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,314,182,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,409,121,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,456,99,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,133,153,9,5|monster|Bat|1017,5,100000ms,30000ms +012-4,153,98,9,5|monster|Bat|1017,5,100000ms,30000ms +012-4,126,65,9,5|monster|Bat|1017,5,100000ms,30000ms +012-4,81,180,9,5|monster|Bat|1017,5,100000ms,30000ms +012-4,61,159,9,5|monster|Bat|1017,5,100000ms,30000ms +012-4,271,157,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,270,182,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,322,141,17,22|monster|RedSlime|1008,20,100000ms,30000ms +012-4,451,111,7,8|monster|Bat|1017,5,100000ms,30000ms +012-4,422,50,11,32|monster|Spider|1012,10,100000ms,30000ms +012-4,380,40,14,22|monster|Spider|1012,10,100000ms,30000ms +012-4,124,49,9,24|monster|Terranite|1062,1,100000ms,30000ms +012-4,80,110,9,5|monster|Bat|1017,5,100000ms,30000ms +012-4,42,142,20,11|monster|Skeleton|1043,3,100000ms,30000ms +012-4,41,159,11,20|monster|Spider|1012,20,100000ms,30000ms +012-4,95,180,9,5|monster|Bat|1017,5,100000ms,30000ms +012-4,91,180,23,10|monster|Spider|1012,20,100000ms,30000ms diff --git a/world/map/npc/012-4/_nodes.txt b/world/map/npc/012-4/_nodes.txt new file mode 100644 index 00000000..2c9229b2 --- /dev/null +++ b/world/map/npc/012-4/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Terranite Cave nodes + +// (no nodes) diff --git a/world/map/npc/013-1/_import.txt b/world/map/npc/013-1/_import.txt index 3a988151..5fca25f0 100644 --- a/world/map/npc/013-1/_import.txt +++ b/world/map/npc/013-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 013-1 npc: npc/013-1/_mobs.txt +npc: npc/013-1/_nodes.txt npc: npc/013-1/_warps.txt npc: npc/013-1/flowerpentagram.txt npc: npc/013-1/mapflags.txt diff --git a/world/map/npc/013-1/_mobs.txt b/world/map/npc/013-1/_mobs.txt index 7d2efa88..ca0b2b68 100644 --- a/world/map/npc/013-1/_mobs.txt +++ b/world/map/npc/013-1/_mobs.txt @@ -1,79 +1,18 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland Hills mobs -013-1,0,0,0,0|monster|PinkFlower|1014,13,0ms,100ms,Mob013-1::On1014 -013-1,0,0,0,0|monster|SpikyMushroom|1019,12,0ms,100ms,Mob013-1::On1019 -013-1,0,0,0,0|monster|Mouboo|1028,5,0ms,100ms,Mob013-1::On1028 -013-1,0,0,0,0|monster|MauvePlant|1029,1,270ms,180ms,Mob013-1::On1029 -013-1,0,0,0,0|monster|MauvePlant|1029,4,2700000ms,1800000ms,Mob013-1::On1029 -013-1,0,0,0,0|monster|CobaltPlant|1030,1,270ms,180ms,Mob013-1::On1030 -013-1,0,0,0,0|monster|CobaltPlant|1030,2,2700000ms,1800000ms,Mob013-1::On1030 -013-1,0,0,0,0|monster|GambogePlant|1031,1,270ms,180ms,Mob013-1::On1031 -013-1,0,0,0,0|monster|GambogePlant|1031,2,2700000ms,1800000ms,Mob013-1::On1031 -013-1,0,0,0,0|monster|AlizarinPlant|1032,1,270ms,180ms,Mob013-1::On1032 -013-1,0,0,0,0|monster|AlizarinPlant|1032,2,2700000ms,1800000ms,Mob013-1::On1032 -013-1,0,0,0,0|monster|Silkworm|1035,4,60000ms,30000ms,Mob013-1::On1035 -013-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob013-1::On1037 -013-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms,Mob013-1::On1038 -013-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob013-1::On1055 - - -013-1,0,0,0|script|Mob013-1|32767 -{ - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1028: - set @mobID, 1028; - callfunc "MobPoints"; - end; - -On1029: - set @mobID, 1029; - callfunc "MobPoints"; - end; - -On1030: - set @mobID, 1030; - callfunc "MobPoints"; - end; - -On1031: - set @mobID, 1031; - callfunc "MobPoints"; - end; - -On1032: - set @mobID, 1032; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; -} +013-1,0,0,0,0|monster|PinkFlower|1014,13,0ms,100ms +013-1,0,0,0,0|monster|SpikyMushroom|1019,12,0ms,100ms +013-1,0,0,0,0|monster|Mouboo|1028,5,0ms,100ms +013-1,0,0,0,0|monster|MauvePlant|1029,1,270ms,180ms +013-1,0,0,0,0|monster|MauvePlant|1029,4,2700000ms,1800000ms +013-1,0,0,0,0|monster|CobaltPlant|1030,1,270ms,180ms +013-1,0,0,0,0|monster|CobaltPlant|1030,2,2700000ms,1800000ms +013-1,0,0,0,0|monster|GambogePlant|1031,1,270ms,180ms +013-1,0,0,0,0|monster|GambogePlant|1031,2,2700000ms,1800000ms +013-1,0,0,0,0|monster|AlizarinPlant|1032,1,270ms,180ms +013-1,0,0,0,0|monster|AlizarinPlant|1032,2,2700000ms,1800000ms +013-1,0,0,0,0|monster|Silkworm|1035,4,60000ms,30000ms +013-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms +013-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms +013-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms diff --git a/world/map/npc/013-1/_nodes.txt b/world/map/npc/013-1/_nodes.txt new file mode 100644 index 00000000..13ee4f92 --- /dev/null +++ b/world/map/npc/013-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland Hills nodes + +// (no nodes) diff --git a/world/map/npc/013-2/_import.txt b/world/map/npc/013-2/_import.txt index 105a75a7..6dc243ad 100644 --- a/world/map/npc/013-2/_import.txt +++ b/world/map/npc/013-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 013-2 npc: npc/013-2/_mobs.txt +npc: npc/013-2/_nodes.txt npc: npc/013-2/_warps.txt npc: npc/013-2/apprentice.txt npc: npc/013-2/mapflags.txt diff --git a/world/map/npc/013-2/_mobs.txt b/world/map/npc/013-2/_mobs.txt index 82f242a0..b092afcc 100644 --- a/world/map/npc/013-2/_mobs.txt +++ b/world/map/npc/013-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Magic House mobs - - -013-2,0,0,0|script|Mob013-2|32767 -{ - end; -} diff --git a/world/map/npc/013-2/_nodes.txt b/world/map/npc/013-2/_nodes.txt new file mode 100644 index 00000000..80a032bc --- /dev/null +++ b/world/map/npc/013-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Magic House nodes + +// (no nodes) diff --git a/world/map/npc/013-3/_import.txt b/world/map/npc/013-3/_import.txt index b4ca98df..4a6fd517 100644 --- a/world/map/npc/013-3/_import.txt +++ b/world/map/npc/013-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 013-3 npc: npc/013-3/_mobs.txt +npc: npc/013-3/_nodes.txt npc: npc/013-3/_warps.txt npc: npc/013-3/barrier.txt npc: npc/013-3/mapflags.txt diff --git a/world/map/npc/013-3/_mobs.txt b/world/map/npc/013-3/_mobs.txt index 088e2c72..b1456bc5 100644 --- a/world/map/npc/013-3/_mobs.txt +++ b/world/map/npc/013-3/_mobs.txt @@ -1,82 +1,31 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland Hills Cave mobs -013-3,28,89,16,52|monster|CaveSnake|1021,10,120000ms,60000ms,Mob013-3::On1021 -013-3,61,22,2,2|monster|FireSkull|1023,1,120000ms,60000ms,Mob013-3::On1023 -013-3,81,22,2,2|monster|PoisonSkull|1024,1,120000ms,60000ms,Mob013-3::On1024 -013-3,109,31,6,22|monster|BlackScorpion|1009,20,50000ms,25000ms,Mob013-3::On1009 -013-3,119,84,27,38|monster|Spider|1012,20,120000ms,40000ms,Mob013-3::On1012 -013-3,176,23,5,6|monster|Spider|1012,10,100000ms,40000ms,Mob013-3::On1012 -013-3,82,75,2,2|monster|FireSkull|1023,1,180000ms,60000ms,Mob013-3::On1023 -013-3,142,37,2,2|monster|PoisonSkull|1024,1,180000ms,60000ms,Mob013-3::On1024 -013-3,79,134,21,16|monster|BlackScorpion|1009,5,80000ms,40000ms,Mob013-3::On1009 -013-3,71,169,38,17|monster|BlackScorpion|1009,5,80000ms,40000ms,Mob013-3::On1009 -013-3,64,85,9,21|monster|BlackScorpion|1009,10,80000ms,40000ms,Mob013-3::On1009 -013-3,81,92,3,20|monster|BlackScorpion|1009,10,80000ms,40000ms,Mob013-3::On1009 -013-3,163,84,33,37|monster|Snake|1010,30,120000ms,50000ms,Mob013-3::On1010 -013-3,162,85,33,37|monster|Spider|1012,30,120000ms,50000ms,Mob013-3::On1012 -013-3,172,77,18,25|monster|BlackScorpion|1009,15,120000ms,50000ms,Mob013-3::On1009 -013-3,145,36,20,15|monster|RedSlime|1008,25,80000ms,40000ms,Mob013-3::On1008 -013-3,167,37,23,11|monster|Snake|1010,20,120000ms,40000ms,Mob013-3::On1010 -013-3,165,25,16,11|monster|BlackScorpion|1009,15,120000ms,40000ms,Mob013-3::On1009 -013-3,71,39,2,3|monster|Snake|1010,2,40000ms,20000ms,Mob013-3::On1010 -013-3,159,102,3,5|monster|YellowSlime|1007,2,80000ms,40000ms,Mob013-3::On1007 -013-3,67,22,2,2|monster|Maggot|1002,2,40000ms,20000ms,Mob013-3::On1002 -013-3,75,22,2,2|monster|Maggot|1002,2,40000ms,20000ms,Mob013-3::On1002 -013-3,76,39,7,4|monster|BlackScorpion|1009,8,40000ms,20000ms,Mob013-3::On1009 -013-3,65,39,7,4|monster|RedSlime|1008,8,40000ms,20000ms,Mob013-3::On1008 -013-3,62,33,2,1|monster|PoisonSkull|1024,1,120000ms,60000ms,Mob013-3::On1024 -013-3,80,33,2,1|monster|FireSkull|1023,1,120000ms,60000ms,Mob013-3::On1023 -013-3,75,46,2,1|monster|PoisonSkull|1024,1,120000ms,60000ms,Mob013-3::On1024 -013-3,67,46,2,1|monster|FireSkull|1023,1,120000ms,60000ms,Mob013-3::On1023 - - -013-3,0,0,0|script|Mob013-3|32767 -{ - end; - -On1002: - set @mobID, 1002; - callfunc "MobPoints"; - end; - -On1007: - set @mobID, 1007; - callfunc "MobPoints"; - end; - -On1008: - set @mobID, 1008; - callfunc "MobPoints"; - end; - -On1009: - set @mobID, 1009; - callfunc "MobPoints"; - end; - -On1010: - set @mobID, 1010; - callfunc "MobPoints"; - end; - -On1012: - set @mobID, 1012; - callfunc "MobPoints"; - end; - -On1021: - set @mobID, 1021; - callfunc "MobPoints"; - end; - -On1023: - set @mobID, 1023; - callfunc "MobPoints"; - end; - -On1024: - set @mobID, 1024; - callfunc "MobPoints"; - end; -} +013-3,28,89,16,52|monster|CaveSnake|1021,10,120000ms,60000ms +013-3,61,22,2,2|monster|FireSkull|1023,1,120000ms,60000ms +013-3,81,22,2,2|monster|PoisonSkull|1024,1,120000ms,60000ms +013-3,109,31,6,22|monster|BlackScorpion|1009,20,50000ms,25000ms +013-3,119,84,27,38|monster|Spider|1012,20,120000ms,40000ms +013-3,176,23,5,6|monster|Spider|1012,10,100000ms,40000ms +013-3,82,75,2,2|monster|FireSkull|1023,1,180000ms,60000ms +013-3,142,37,2,2|monster|PoisonSkull|1024,1,180000ms,60000ms +013-3,79,134,21,16|monster|BlackScorpion|1009,5,80000ms,40000ms +013-3,71,169,38,17|monster|BlackScorpion|1009,5,80000ms,40000ms +013-3,64,85,9,21|monster|BlackScorpion|1009,10,80000ms,40000ms +013-3,81,92,3,20|monster|BlackScorpion|1009,10,80000ms,40000ms +013-3,163,84,33,37|monster|Snake|1010,30,120000ms,50000ms +013-3,162,85,33,37|monster|Spider|1012,30,120000ms,50000ms +013-3,172,77,18,25|monster|BlackScorpion|1009,15,120000ms,50000ms +013-3,145,36,20,15|monster|RedSlime|1008,25,80000ms,40000ms +013-3,167,37,23,11|monster|Snake|1010,20,120000ms,40000ms +013-3,165,25,16,11|monster|BlackScorpion|1009,15,120000ms,40000ms +013-3,71,39,2,3|monster|Snake|1010,2,40000ms,20000ms +013-3,159,102,3,5|monster|YellowSlime|1007,2,80000ms,40000ms +013-3,67,22,2,2|monster|Maggot|1002,2,40000ms,20000ms +013-3,75,22,2,2|monster|Maggot|1002,2,40000ms,20000ms +013-3,76,39,7,4|monster|BlackScorpion|1009,8,40000ms,20000ms +013-3,65,39,7,4|monster|RedSlime|1008,8,40000ms,20000ms +013-3,62,33,2,1|monster|PoisonSkull|1024,1,120000ms,60000ms +013-3,80,33,2,1|monster|FireSkull|1023,1,120000ms,60000ms +013-3,75,46,2,1|monster|PoisonSkull|1024,1,120000ms,60000ms +013-3,67,46,2,1|monster|FireSkull|1023,1,120000ms,60000ms diff --git a/world/map/npc/013-3/_nodes.txt b/world/map/npc/013-3/_nodes.txt new file mode 100644 index 00000000..689be5d9 --- /dev/null +++ b/world/map/npc/013-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland Hills Cave nodes + +// (no nodes) diff --git a/world/map/npc/014-1/_import.txt b/world/map/npc/014-1/_import.txt index 9990bdf0..cde43724 100644 --- a/world/map/npc/014-1/_import.txt +++ b/world/map/npc/014-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 014-1 npc: npc/014-1/_mobs.txt +npc: npc/014-1/_nodes.txt npc: npc/014-1/_warps.txt npc: npc/014-1/mapflags.txt npc: npc/014-1/wedding-officiator.txt diff --git a/world/map/npc/014-1/_mobs.txt b/world/map/npc/014-1/_mobs.txt index 862d1c19..8abab0ea 100644 --- a/world/map/npc/014-1/_mobs.txt +++ b/world/map/npc/014-1/_mobs.txt @@ -1,85 +1,19 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland mobs -014-1,0,0,0,0|monster|EvilMushroom|1013,20,0ms,0ms,Mob014-1::On1013 -014-1,0,0,0,0|monster|PinkFlower|1014,25,0ms,0ms,Mob014-1::On1014 -014-1,0,0,0,0|monster|SpikyMushroom|1019,15,0ms,0ms,Mob014-1::On1019 -014-1,0,0,0,0|monster|Mouboo|1028,5,0ms,10ms,Mob014-1::On1028 -014-1,0,0,0,0|monster|MauvePlant|1029,1,270ms,180ms,Mob014-1::On1029 -014-1,0,0,0,0|monster|MauvePlant|1029,5,2700000ms,1800000ms,Mob014-1::On1029 -014-1,0,0,0,0|monster|CobaltPlant|1030,1,270ms,180ms,Mob014-1::On1030 -014-1,0,0,0,0|monster|CobaltPlant|1030,2,2700000ms,1800000ms,Mob014-1::On1030 -014-1,0,0,0,0|monster|GambogePlant|1031,1,270ms,180ms,Mob014-1::On1031 -014-1,0,0,0,0|monster|GambogePlant|1031,2,2700000ms,1800000ms,Mob014-1::On1031 -014-1,0,0,0,0|monster|AlizarinPlant|1032,1,270ms,180ms,Mob014-1::On1032 -014-1,0,0,0,0|monster|AlizarinPlant|1032,2,2700000ms,1800000ms,Mob014-1::On1032 -014-1,0,0,0,0|monster|Silkworm|1035,4,6000ms,3000ms,Mob014-1::On1035 -014-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob014-1::On1037 -014-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms,Mob014-1::On1038 -014-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob014-1::On1055 - - -014-1,0,0,0|script|Mob014-1|32767 -{ - end; - -On1013: - set @mobID, 1013; - callfunc "MobPoints"; - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1028: - set @mobID, 1028; - callfunc "MobPoints"; - end; - -On1029: - set @mobID, 1029; - callfunc "MobPoints"; - end; - -On1030: - set @mobID, 1030; - callfunc "MobPoints"; - end; - -On1031: - set @mobID, 1031; - callfunc "MobPoints"; - end; - -On1032: - set @mobID, 1032; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; -} +014-1,0,0,0,0|monster|EvilMushroom|1013,20,0ms,0ms +014-1,0,0,0,0|monster|PinkFlower|1014,25,0ms,0ms +014-1,0,0,0,0|monster|SpikyMushroom|1019,15,0ms,0ms +014-1,0,0,0,0|monster|Mouboo|1028,5,0ms,10ms +014-1,0,0,0,0|monster|MauvePlant|1029,1,270ms,180ms +014-1,0,0,0,0|monster|MauvePlant|1029,5,2700000ms,1800000ms +014-1,0,0,0,0|monster|CobaltPlant|1030,1,270ms,180ms +014-1,0,0,0,0|monster|CobaltPlant|1030,2,2700000ms,1800000ms +014-1,0,0,0,0|monster|GambogePlant|1031,1,270ms,180ms +014-1,0,0,0,0|monster|GambogePlant|1031,2,2700000ms,1800000ms +014-1,0,0,0,0|monster|AlizarinPlant|1032,1,270ms,180ms +014-1,0,0,0,0|monster|AlizarinPlant|1032,2,2700000ms,1800000ms +014-1,0,0,0,0|monster|Silkworm|1035,4,6000ms,3000ms +014-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms +014-1,0,0,0,0|monster|Squirrel|1038,25,30ms,20ms +014-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms diff --git a/world/map/npc/014-1/_nodes.txt b/world/map/npc/014-1/_nodes.txt new file mode 100644 index 00000000..12c08221 --- /dev/null +++ b/world/map/npc/014-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland nodes + +// (no nodes) diff --git a/world/map/npc/014-3/_import.txt b/world/map/npc/014-3/_import.txt index 25c551bd..8aedea2e 100644 --- a/world/map/npc/014-3/_import.txt +++ b/world/map/npc/014-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 014-3 npc: npc/014-3/_mobs.txt +npc: npc/014-3/_nodes.txt npc: npc/014-3/_warps.txt npc: npc/014-3/mapflags.txt diff --git a/world/map/npc/014-3/_mobs.txt b/world/map/npc/014-3/_mobs.txt index ebadbf58..90d835c2 100644 --- a/world/map/npc/014-3/_mobs.txt +++ b/world/map/npc/014-3/_mobs.txt @@ -1,15 +1,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland Cave mobs -014-3,0,0,0,0|monster|Bat|1017,50,0ms,0ms,Mob014-3::On1017 - - -014-3,0,0,0|script|Mob014-3|32767 -{ - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; -} +014-3,0,0,0,0|monster|Bat|1017,50,0ms,0ms diff --git a/world/map/npc/014-3/_nodes.txt b/world/map/npc/014-3/_nodes.txt new file mode 100644 index 00000000..2ebc3af1 --- /dev/null +++ b/world/map/npc/014-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland Cave nodes + +// (no nodes) diff --git a/world/map/npc/015-1/_import.txt b/world/map/npc/015-1/_import.txt index 6085f2a3..a376d93a 100644 --- a/world/map/npc/015-1/_import.txt +++ b/world/map/npc/015-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 015-1 npc: npc/015-1/_mobs.txt +npc: npc/015-1/_nodes.txt npc: npc/015-1/_warps.txt npc: npc/015-1/alice.txt npc: npc/015-1/barrier.txt diff --git a/world/map/npc/015-1/_mobs.txt b/world/map/npc/015-1/_mobs.txt index cad191f2..e012a95c 100644 --- a/world/map/npc/015-1/_mobs.txt +++ b/world/map/npc/015-1/_mobs.txt @@ -1,69 +1,13 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland mobs -015-1,0,0,0,0|monster|CloverPatch|1037,2,100000ms,1000ms,Mob015-1::On1037 -015-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob015-1::On1055 -015-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms,Mob015-1::On1038 -015-1,0,0,0,0|monster|LogHead|1025,40,0ms,0ms,Mob015-1::On1025 -015-1,0,0,0,0|monster|SpikyMushroom|1019,20,0ms,0ms,Mob015-1::On1019 -015-1,0,0,0,0|monster|PinkFlower|1014,20,0ms,0ms,Mob015-1::On1014 -015-1,0,0,0,0|monster|GambogePlant|1031,5,0ms,0ms,Mob015-1::On1031 -015-1,0,0,0,0|monster|AlizarinPlant|1032,5,0ms,0ms,Mob015-1::On1032 -015-1,0,0,0,0|monster|Silkworm|1035,7,15000ms,7000ms,Mob015-1::On1035 -015-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms,Mob015-1::On1029 - - -015-1,0,0,0|script|Mob015-1|32767 -{ - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1025: - set @mobID, 1025; - callfunc "MobPoints"; - end; - -On1029: - set @mobID, 1029; - callfunc "MobPoints"; - end; - -On1031: - set @mobID, 1031; - callfunc "MobPoints"; - end; - -On1032: - set @mobID, 1032; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; -} +015-1,0,0,0,0|monster|CloverPatch|1037,2,100000ms,1000ms +015-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms +015-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms +015-1,0,0,0,0|monster|LogHead|1025,40,0ms,0ms +015-1,0,0,0,0|monster|SpikyMushroom|1019,20,0ms,0ms +015-1,0,0,0,0|monster|PinkFlower|1014,20,0ms,0ms +015-1,0,0,0,0|monster|GambogePlant|1031,5,0ms,0ms +015-1,0,0,0,0|monster|AlizarinPlant|1032,5,0ms,0ms +015-1,0,0,0,0|monster|Silkworm|1035,7,15000ms,7000ms +015-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms diff --git a/world/map/npc/015-1/_nodes.txt b/world/map/npc/015-1/_nodes.txt new file mode 100644 index 00000000..12c08221 --- /dev/null +++ b/world/map/npc/015-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland nodes + +// (no nodes) diff --git a/world/map/npc/015-3/_import.txt b/world/map/npc/015-3/_import.txt index c0f4fc4f..d1b95191 100644 --- a/world/map/npc/015-3/_import.txt +++ b/world/map/npc/015-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 015-3 npc: npc/015-3/_mobs.txt +npc: npc/015-3/_nodes.txt npc: npc/015-3/_warps.txt npc: npc/015-3/barrier.txt npc: npc/015-3/katze.txt diff --git a/world/map/npc/015-3/_mobs.txt b/world/map/npc/015-3/_mobs.txt index 1b205735..faab0b97 100644 --- a/world/map/npc/015-3/_mobs.txt +++ b/world/map/npc/015-3/_mobs.txt @@ -1,28 +1,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Cat's Cave mobs -015-3,22,25,2,4|monster|Bat|1017,2,100000ms,30000ms,Mob015-3::On1017 -015-3,29,31,2,2|monster|Maggot|1002,2,100000ms,30000ms,Mob015-3::On1002 -015-3,23,19,1,1|monster|Maggot|1002,1,100000ms,30000ms,Mob015-3::On1002 -015-3,40,19,1,1|monster|Spider|1012,1,100000ms,30000ms,Mob015-3::On1012 - - -015-3,0,0,0|script|Mob015-3|32767 -{ - end; - -On1002: - set @mobID, 1002; - callfunc "MobPoints"; - end; - -On1012: - set @mobID, 1012; - callfunc "MobPoints"; - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; -} +015-3,22,25,2,4|monster|Bat|1017,2,100000ms,30000ms +015-3,29,31,2,2|monster|Maggot|1002,2,100000ms,30000ms +015-3,23,19,1,1|monster|Maggot|1002,1,100000ms,30000ms +015-3,40,19,1,1|monster|Spider|1012,1,100000ms,30000ms diff --git a/world/map/npc/015-3/_nodes.txt b/world/map/npc/015-3/_nodes.txt new file mode 100644 index 00000000..e37c6a3c --- /dev/null +++ b/world/map/npc/015-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Cat's Cave nodes + +// (no nodes) diff --git a/world/map/npc/016-1/_import.txt b/world/map/npc/016-1/_import.txt index e67bcb01..63751660 100644 --- a/world/map/npc/016-1/_import.txt +++ b/world/map/npc/016-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 016-1 npc: npc/016-1/_mobs.txt +npc: npc/016-1/_nodes.txt npc: npc/016-1/_warps.txt npc: npc/016-1/gwendolyn.txt npc: npc/016-1/mapflags.txt diff --git a/world/map/npc/016-1/_mobs.txt b/world/map/npc/016-1/_mobs.txt index 58b33a9d..91c4d96c 100644 --- a/world/map/npc/016-1/_mobs.txt +++ b/world/map/npc/016-1/_mobs.txt @@ -1,59 +1,13 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland mobs -016-1,0,0,0,0|monster|CloverPatch|1037,2,100000ms,30000ms,Mob016-1::On1037 -016-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob016-1::On1055 -016-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms,Mob016-1::On1038 -016-1,0,0,0,0|monster|Mouboo|1028,5,0ms,0ms,Mob016-1::On1028 -016-1,0,0,0,0|monster|Scorpion|1003,15,0ms,0ms,Mob016-1::On1003 -016-1,0,0,0,0|monster|MauvePlant|1029,3,0ms,0ms,Mob016-1::On1029 -016-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms,Mob016-1::On1029 -016-1,0,0,0,0|monster|CobaltPlant|1030,3,0ms,0ms,Mob016-1::On1030 -016-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms,Mob016-1::On1029 -016-1,0,0,0,0|monster|Silkworm|1035,7,150000ms,7000ms,Mob016-1::On1035 - - -016-1,0,0,0|script|Mob016-1|32767 -{ - end; - -On1003: - set @mobID, 1003; - callfunc "MobPoints"; - end; - -On1028: - set @mobID, 1028; - callfunc "MobPoints"; - end; - -On1029: - set @mobID, 1029; - callfunc "MobPoints"; - end; - -On1030: - set @mobID, 1030; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; -} +016-1,0,0,0,0|monster|CloverPatch|1037,2,100000ms,30000ms +016-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms +016-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms +016-1,0,0,0,0|monster|Mouboo|1028,5,0ms,0ms +016-1,0,0,0,0|monster|Scorpion|1003,15,0ms,0ms +016-1,0,0,0,0|monster|MauvePlant|1029,3,0ms,0ms +016-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms +016-1,0,0,0,0|monster|CobaltPlant|1030,3,0ms,0ms +016-1,0,0,0,0|monster|MauvePlant|1029,4,270000ms,180000ms +016-1,0,0,0,0|monster|Silkworm|1035,7,150000ms,7000ms diff --git a/world/map/npc/016-1/_nodes.txt b/world/map/npc/016-1/_nodes.txt new file mode 100644 index 00000000..12c08221 --- /dev/null +++ b/world/map/npc/016-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland nodes + +// (no nodes) diff --git a/world/map/npc/017-1/_import.txt b/world/map/npc/017-1/_import.txt index ecf2c383..a8bc80c9 100644 --- a/world/map/npc/017-1/_import.txt +++ b/world/map/npc/017-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 017-1 npc: npc/017-1/_mobs.txt +npc: npc/017-1/_nodes.txt npc: npc/017-1/_warps.txt npc: npc/017-1/flowerpentagram1.txt npc: npc/017-1/flowerpentagram5.txt diff --git a/world/map/npc/017-1/_mobs.txt b/world/map/npc/017-1/_mobs.txt index fe1c40b4..d4e5955a 100644 --- a/world/map/npc/017-1/_mobs.txt +++ b/world/map/npc/017-1/_mobs.txt @@ -1,102 +1,21 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland Hills mobs -017-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob017-1::On1037 -017-1,99,30,2,1|monster|CloverPatch|1037,1,150000ms,50000ms,Mob017-1::On1037 -017-1,29,29,19,12|monster|GambogePlant|1031,1,0ms,25000ms,Mob017-1::On1031 -017-1,91,25,76,8|monster|LogHead|1025,3,5000ms,60000ms,Mob017-1::On1025 -017-1,31,48,19,12|monster|LogHead|1025,3,5000ms,60000ms,Mob017-1::On1025 -017-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms,Mob017-1::On1055 -017-1,0,0,0,0|monster|Bat|1017,5,0ms,0ms,Mob017-1::On1017 -017-1,0,0,0,0|monster|FireGoblin|1011,5,0ms,0ms,Mob017-1::On1011 -017-1,0,0,0,0|monster|Mouboo|1028,5,0ms,0ms,Mob017-1::On1028 -017-1,0,0,0,0|monster|PinkFlower|1014,5,0ms,0ms,Mob017-1::On1014 -017-1,0,0,0,0|monster|SpikyMushroom|1019,5,0ms,0ms,Mob017-1::On1019 -017-1,0,0,0,0|monster|EvilMushroom|1013,10,0ms,0ms,Mob017-1::On1013 -017-1,0,0,0,0|monster|AlizarinPlant|1032,3,0ms,0ms,Mob017-1::On1032 -017-1,0,0,0,0|monster|GambogePlant|1031,3,0ms,0ms,Mob017-1::On1031 -017-1,0,0,0,0|monster|CobaltPlant|1030,3,0ms,0ms,Mob017-1::On1030 -017-1,0,0,0,0|monster|MauvePlant|1029,5,0ms,0ms,Mob017-1::On1029 -017-1,0,0,0,0|monster|Silkworm|1035,10,0ms,0ms,Mob017-1::On1035 -017-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms,Mob017-1::On1038 - - -017-1,0,0,0|script|Mob017-1|32767 -{ - end; - -On1011: - set @mobID, 1011; - callfunc "MobPoints"; - end; - -On1013: - set @mobID, 1013; - callfunc "MobPoints"; - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1025: - set @mobID, 1025; - callfunc "MobPoints"; - end; - -On1028: - set @mobID, 1028; - callfunc "MobPoints"; - end; - -On1029: - set @mobID, 1029; - callfunc "MobPoints"; - end; - -On1030: - set @mobID, 1030; - callfunc "MobPoints"; - end; - -On1031: - set @mobID, 1031; - callfunc "MobPoints"; - end; - -On1032: - set @mobID, 1032; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; -} +017-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms +017-1,99,30,2,1|monster|CloverPatch|1037,1,150000ms,50000ms +017-1,29,29,19,12|monster|GambogePlant|1031,1,0ms,25000ms +017-1,91,25,76,8|monster|LogHead|1025,3,5000ms,60000ms +017-1,31,48,19,12|monster|LogHead|1025,3,5000ms,60000ms +017-1,0,0,0,0|monster|Butterfly|1055,10,30ms,20ms +017-1,0,0,0,0|monster|Bat|1017,5,0ms,0ms +017-1,0,0,0,0|monster|FireGoblin|1011,5,0ms,0ms +017-1,0,0,0,0|monster|Mouboo|1028,5,0ms,0ms +017-1,0,0,0,0|monster|PinkFlower|1014,5,0ms,0ms +017-1,0,0,0,0|monster|SpikyMushroom|1019,5,0ms,0ms +017-1,0,0,0,0|monster|EvilMushroom|1013,10,0ms,0ms +017-1,0,0,0,0|monster|AlizarinPlant|1032,3,0ms,0ms +017-1,0,0,0,0|monster|GambogePlant|1031,3,0ms,0ms +017-1,0,0,0,0|monster|CobaltPlant|1030,3,0ms,0ms +017-1,0,0,0,0|monster|MauvePlant|1029,5,0ms,0ms +017-1,0,0,0,0|monster|Silkworm|1035,10,0ms,0ms +017-1,0,0,0,0|monster|Squirrel|1038,30,20ms,10ms diff --git a/world/map/npc/017-1/_nodes.txt b/world/map/npc/017-1/_nodes.txt new file mode 100644 index 00000000..13ee4f92 --- /dev/null +++ b/world/map/npc/017-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland Hills nodes + +// (no nodes) diff --git a/world/map/npc/017-2/_import.txt b/world/map/npc/017-2/_import.txt index 8f13a370..84618771 100644 --- a/world/map/npc/017-2/_import.txt +++ b/world/map/npc/017-2/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 017-2 npc: npc/017-2/_mobs.txt +npc: npc/017-2/_nodes.txt npc: npc/017-2/_warps.txt npc: npc/017-2/mapflags.txt diff --git a/world/map/npc/017-2/_mobs.txt b/world/map/npc/017-2/_mobs.txt index 7fbf694f..57e93531 100644 --- a/world/map/npc/017-2/_mobs.txt +++ b/world/map/npc/017-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Theater mobs - - -017-2,0,0,0|script|Mob017-2|32767 -{ - end; -} diff --git a/world/map/npc/017-2/_nodes.txt b/world/map/npc/017-2/_nodes.txt new file mode 100644 index 00000000..0e37f1ef --- /dev/null +++ b/world/map/npc/017-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Theater nodes + +// (no nodes) diff --git a/world/map/npc/017-3/_import.txt b/world/map/npc/017-3/_import.txt index c2f9b84d..ec5b651f 100644 --- a/world/map/npc/017-3/_import.txt +++ b/world/map/npc/017-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 017-3 npc: npc/017-3/_mobs.txt +npc: npc/017-3/_nodes.txt npc: npc/017-3/_warps.txt npc: npc/017-3/mapflags.txt diff --git a/world/map/npc/017-3/_mobs.txt b/world/map/npc/017-3/_mobs.txt index c498697b..ee92826e 100644 --- a/world/map/npc/017-3/_mobs.txt +++ b/world/map/npc/017-3/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland Cave mobs - - -017-3,0,0,0|script|Mob017-3|32767 -{ - end; -} diff --git a/world/map/npc/017-3/_nodes.txt b/world/map/npc/017-3/_nodes.txt new file mode 100644 index 00000000..2ebc3af1 --- /dev/null +++ b/world/map/npc/017-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland Cave nodes + +// (no nodes) diff --git a/world/map/npc/017-4/_import.txt b/world/map/npc/017-4/_import.txt index fcd79a8e..33a00b9b 100644 --- a/world/map/npc/017-4/_import.txt +++ b/world/map/npc/017-4/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 017-4 npc: npc/017-4/_mobs.txt +npc: npc/017-4/_nodes.txt npc: npc/017-4/_warps.txt npc: npc/017-4/guardingspirit.txt npc: npc/017-4/mapflags.txt diff --git a/world/map/npc/017-4/_mobs.txt b/world/map/npc/017-4/_mobs.txt index 920a1db5..5270e787 100644 --- a/world/map/npc/017-4/_mobs.txt +++ b/world/map/npc/017-4/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Hideout mobs - - -017-4,0,0,0|script|Mob017-4|32767 -{ - end; -} diff --git a/world/map/npc/017-4/_nodes.txt b/world/map/npc/017-4/_nodes.txt new file mode 100644 index 00000000..357bf9fd --- /dev/null +++ b/world/map/npc/017-4/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Hideout nodes + +// (no nodes) diff --git a/world/map/npc/017-9/_import.txt b/world/map/npc/017-9/_import.txt index 55b1495e..06bab503 100644 --- a/world/map/npc/017-9/_import.txt +++ b/world/map/npc/017-9/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 017-9 npc: npc/017-9/_mobs.txt +npc: npc/017-9/_nodes.txt npc: npc/017-9/_warps.txt npc: npc/017-9/mapflags.txt npc: npc/017-9/npcs.txt diff --git a/world/map/npc/017-9/_mobs.txt b/world/map/npc/017-9/_mobs.txt index 9f351648..d8d6de99 100644 --- a/world/map/npc/017-9/_mobs.txt +++ b/world/map/npc/017-9/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // GM Lounge mobs - - -017-9,0,0,0|script|Mob017-9|32767 -{ - end; -} diff --git a/world/map/npc/017-9/_nodes.txt b/world/map/npc/017-9/_nodes.txt new file mode 100644 index 00000000..78aae663 --- /dev/null +++ b/world/map/npc/017-9/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// GM Lounge nodes + +// (no nodes) diff --git a/world/map/npc/017-9/npcs.txt b/world/map/npc/017-9/npcs.txt index e5a2ec04..188ef2e0 100644 --- a/world/map/npc/017-9/npcs.txt +++ b/world/map/npc/017-9/npcs.txt @@ -1,6 +1,6 @@ 009-1,42,43,0|script|#SecretDoor|32767,0,0 { - if (getgmlevel() < 20 && !debug) end; + if (GM < get(.lounge, "GM") && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 27, 23; end; @@ -8,7 +8,7 @@ 020-1,60,76,0|script|#SecretDoor2|32767,0,0 { - if (getgmlevel() < 20 && !debug) end; + if (GM < get(.lounge, "GM") && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 29, 21; end; @@ -16,7 +16,7 @@ 001-1,54,118,0|script|#SecretDoor3|32767,0,0 { - if (getgmlevel() < 20 && !debug) end; + if (GM < get(.lounge, "GM") && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 21, 21; end; @@ -24,7 +24,7 @@ 027-2,118,111,0|script|#SecretDoor4|32767,0,0 { - if (getgmlevel() < 20 && !debug) end; + if (GM < get(.lounge, "GM") && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 31, 21; end; @@ -32,25 +32,8 @@ 029-1,34,96,0|script|#SecretDoor5|32767,0,0 { - if (getgmlevel() < 20 && !debug) end; + if (GM < get(.lounge, "GM") && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 23, 21; end; } - -017-9,30,28,0|script|Numa|393 -{ - set @from_npc, 1; - callfunc "SuperDebug"; - end; -} - --|script|Numa Spell|32767 -{ - callfunc "SuperDebug"; - end; - -OnInit: - registercmd "@numa", "Numa Spell"; - end; -} diff --git a/world/map/npc/018-1/_import.txt b/world/map/npc/018-1/_import.txt index 087fe43e..bf00cad9 100644 --- a/world/map/npc/018-1/_import.txt +++ b/world/map/npc/018-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 018-1 npc: npc/018-1/_mobs.txt +npc: npc/018-1/_nodes.txt npc: npc/018-1/_warps.txt npc: npc/018-1/flowerpentagram3.txt npc: npc/018-1/mapflags.txt diff --git a/world/map/npc/018-1/_mobs.txt b/world/map/npc/018-1/_mobs.txt index 942a6d09..ced34aa9 100644 --- a/world/map/npc/018-1/_mobs.txt +++ b/world/map/npc/018-1/_mobs.txt @@ -1,101 +1,30 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland Mining Camp mobs -018-1,136,79,9,41|monster|SeaSlime|1033,10,100000ms,30000ms,Mob018-1::On1033 -018-1,108,87,53,25|monster|ManaBug|1131,10,100000ms,30000ms,Mob018-1::On1131 -018-1,116,44,6,7|monster|SeaSlime|1033,3,100000ms,30000ms,Mob018-1::On1033 -018-1,119,56,13,6|monster|PinkFlower|1014,2,100000ms,30000ms,Mob018-1::On1014 -018-1,175,28,17,19|monster|JackO|1022,1,180000ms,120000ms,Mob018-1::On1022 -018-1,78,59,3,1|monster|YellowSlime|1007,1,100000ms,30000ms,Mob018-1::On1007 -018-1,57,63,14,7|monster|Silkworm|1035,2,100000ms,30000ms,Mob018-1::On1035 -018-1,43,63,31,28|monster|Bat|1017,10,100000ms,30000ms,Mob018-1::On1017 -018-1,134,39,18,10|monster|GrassSnake|1034,4,100000ms,50000ms,Mob018-1::On1034 -018-1,124,42,9,11|monster|GrassSnake|1034,2,100000ms,50000ms,Mob018-1::On1034 -018-1,124,19,22,9|monster|GrassSnake|1034,3,100000ms,50000ms,Mob018-1::On1034 -018-1,122,29,19,9|monster|GrassSnake|1034,2,100000ms,50000ms,Mob018-1::On1034 -018-1,149,45,10,8|monster|Bat|1017,5,100000ms,30000ms,Mob018-1::On1017 -018-1,169,47,20,10|monster|RedSlime|1008,4,120000ms,30000ms,Mob018-1::On1008 -018-1,136,49,13,8|monster|Bat|1017,4,100000ms,30000ms,Mob018-1::On1017 -018-1,166,49,13,9|monster|CloverPatch|1037,1,100000ms,30000ms,Mob018-1::On1037 -018-1,111,62,5,2|monster|Silkworm|1035,1,60000ms,30000ms,Mob018-1::On1035 -018-1,117,50,4,3|monster|SeaSlime|1033,1,120000ms,60000ms,Mob018-1::On1033 -018-1,96,47,18,11|monster|RedSlime|1008,3,100000ms,50000ms,Mob018-1::On1008 -018-1,106,52,15,6|monster|CobaltPlant|1030,1,240000ms,120000ms,Mob018-1::On1030 -018-1,78,55,37,6|monster|RedSlime|1008,7,100000ms,50000ms,Mob018-1::On1008 -018-1,145,24,10,9|monster|RedSlime|1008,3,100000ms,50000ms,Mob018-1::On1008 -018-1,68,89,14,17|monster|Bat|1017,3,100000ms,50000ms,Mob018-1::On1017 -018-1,160,31,11,18|monster|RedSlime|1008,5,100000ms,50000ms,Mob018-1::On1008 -018-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms,Mob018-1::On1037 -018-1,0,0,0,0|monster|Butterfly|1055,20,30ms,20ms,Mob018-1::On1055 -018-1,134,80,14,39|monster|Maggot|1002,15,30ms,0ms,Mob018-1::On1002 - - -018-1,0,0,0|script|Mob018-1|32767 -{ - end; - -On1002: - set @mobID, 1002; - callfunc "MobPoints"; - end; - -On1007: - set @mobID, 1007; - callfunc "MobPoints"; - end; - -On1008: - set @mobID, 1008; - callfunc "MobPoints"; - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1022: - set @mobID, 1022; - callfunc "MobPoints"; - end; - -On1030: - set @mobID, 1030; - callfunc "MobPoints"; - end; - -On1033: - set @mobID, 1033; - callfunc "MobPoints"; - end; - -On1034: - set @mobID, 1034; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; - -On1131: - set @mobID, 1131; - callfunc "MobPoints"; - end; -} +018-1,136,79,9,41|monster|SeaSlime|1033,10,100000ms,30000ms +018-1,108,87,53,25|monster|ManaBug|1131,10,100000ms,30000ms +018-1,116,44,6,7|monster|SeaSlime|1033,3,100000ms,30000ms +018-1,119,56,13,6|monster|PinkFlower|1014,2,100000ms,30000ms +018-1,175,28,17,19|monster|JackO|1022,1,180000ms,120000ms +018-1,78,59,3,1|monster|YellowSlime|1007,1,100000ms,30000ms +018-1,57,63,14,7|monster|Silkworm|1035,2,100000ms,30000ms +018-1,43,63,31,28|monster|Bat|1017,10,100000ms,30000ms +018-1,134,39,18,10|monster|GrassSnake|1034,4,100000ms,50000ms +018-1,124,42,9,11|monster|GrassSnake|1034,2,100000ms,50000ms +018-1,124,19,22,9|monster|GrassSnake|1034,3,100000ms,50000ms +018-1,122,29,19,9|monster|GrassSnake|1034,2,100000ms,50000ms +018-1,149,45,10,8|monster|Bat|1017,5,100000ms,30000ms +018-1,169,47,20,10|monster|RedSlime|1008,4,120000ms,30000ms +018-1,136,49,13,8|monster|Bat|1017,4,100000ms,30000ms +018-1,166,49,13,9|monster|CloverPatch|1037,1,100000ms,30000ms +018-1,111,62,5,2|monster|Silkworm|1035,1,60000ms,30000ms +018-1,117,50,4,3|monster|SeaSlime|1033,1,120000ms,60000ms +018-1,96,47,18,11|monster|RedSlime|1008,3,100000ms,50000ms +018-1,106,52,15,6|monster|CobaltPlant|1030,1,240000ms,120000ms +018-1,78,55,37,6|monster|RedSlime|1008,7,100000ms,50000ms +018-1,145,24,10,9|monster|RedSlime|1008,3,100000ms,50000ms +018-1,68,89,14,17|monster|Bat|1017,3,100000ms,50000ms +018-1,160,31,11,18|monster|RedSlime|1008,5,100000ms,50000ms +018-1,0,0,0,0|monster|CloverPatch|1037,2,0ms,1000ms +018-1,0,0,0,0|monster|Butterfly|1055,20,30ms,20ms +018-1,134,80,14,39|monster|Maggot|1002,15,30ms,0ms diff --git a/world/map/npc/018-1/_nodes.txt b/world/map/npc/018-1/_nodes.txt new file mode 100644 index 00000000..9ac98a33 --- /dev/null +++ b/world/map/npc/018-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland Mining Camp nodes + +// (no nodes) diff --git a/world/map/npc/018-2/_import.txt b/world/map/npc/018-2/_import.txt index 6c8fcb00..93025f9d 100644 --- a/world/map/npc/018-2/_import.txt +++ b/world/map/npc/018-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 018-2 npc: npc/018-2/_mobs.txt +npc: npc/018-2/_nodes.txt npc: npc/018-2/_warps.txt npc: npc/018-2/angus.txt npc: npc/018-2/books.txt diff --git a/world/map/npc/018-2/_mobs.txt b/world/map/npc/018-2/_mobs.txt index fb451a92..13188ee7 100644 --- a/world/map/npc/018-2/_mobs.txt +++ b/world/map/npc/018-2/_mobs.txt @@ -1,15 +1,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland Mining Camp Indoor mobs -018-2,114,21,4,3|monster|YellowSlime|1007,1,100000ms,30000ms,Mob018-2::On1007 - - -018-2,0,0,0|script|Mob018-2|32767 -{ - end; - -On1007: - set @mobID, 1007; - callfunc "MobPoints"; - end; -} +018-2,114,21,4,3|monster|YellowSlime|1007,1,100000ms,30000ms diff --git a/world/map/npc/018-2/_nodes.txt b/world/map/npc/018-2/_nodes.txt new file mode 100644 index 00000000..93459a98 --- /dev/null +++ b/world/map/npc/018-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland Mining Camp Indoor nodes + +// (no nodes) diff --git a/world/map/npc/018-3/_import.txt b/world/map/npc/018-3/_import.txt index de5fbfb1..1845c3d1 100644 --- a/world/map/npc/018-3/_import.txt +++ b/world/map/npc/018-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 018-3 npc: npc/018-3/_mobs.txt +npc: npc/018-3/_nodes.txt npc: npc/018-3/_warps.txt npc: npc/018-3/bookcase.txt npc: npc/018-3/evil-obelisk.txt diff --git a/world/map/npc/018-3/_mobs.txt b/world/map/npc/018-3/_mobs.txt index 46457878..57c48654 100644 --- a/world/map/npc/018-3/_mobs.txt +++ b/world/map/npc/018-3/_mobs.txt @@ -1,87 +1,26 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Northern Mines mobs -018-3,48,29,57,19|monster|Bat|1017,10,100000ms,30000ms,Mob018-3::On1017 -018-3,35,144,31,48|monster|EvilMushroom|1013,10,120000ms,30000ms,Mob018-3::On1013 -018-3,35,65,28,22|monster|Spider|1012,20,100000ms,50000ms,Mob018-3::On1012 -018-3,28,157,3,2|monster|PinkFlower|1014,1,60000ms,30000ms,Mob018-3::On1014 -018-3,99,111,17,41|monster|YellowSlime|1007,10,90000ms,30000ms,Mob018-3::On1007 -018-3,134,140,12,8|monster|Maggot|1002,3,80000ms,40000ms,Mob018-3::On1002 -018-3,82,149,73,26|monster|Spider|1012,8,300000ms,120000ms,Mob018-3::On1012 -018-3,102,172,131,13|monster|BlackScorpion|1009,20,60000ms,10000ms,Mob018-3::On1009 -018-3,174,37,10,31|monster|YellowSlime|1007,5,180000ms,120000ms,Mob018-3::On1007 -018-3,148,148,13,24|monster|Bat|1017,3,180000ms,40000ms,Mob018-3::On1017 -018-3,136,87,21,7|monster|YellowSlime|1007,6,80000ms,40000ms,Mob018-3::On1007 -018-3,81,77,27,21|monster|RedSlime|1008,15,80000ms,40000ms,Mob018-3::On1008 -018-3,111,80,5,6|monster|BlackScorpion|1009,10,80000ms,40000ms,Mob018-3::On1009 -018-3,175,122,5,40|monster|Snake|1010,15,40000ms,20000ms,Mob018-3::On1010 -018-3,172,94,17,17|monster|RedSlime|1008,10,60000ms,30000ms,Mob018-3::On1008 -018-3,59,95,11,8|monster|Spider|1012,15,60000ms,30000ms,Mob018-3::On1012 -018-3,77,92,23,7|monster|BlackScorpion|1009,15,60000ms,30000ms,Mob018-3::On1009 -018-3,94,55,16,8|monster|Snake|1010,5,60000ms,30000ms,Mob018-3::On1010 -018-3,133,39,12,17|monster|Spider|1012,10,60000ms,30000ms,Mob018-3::On1012 -018-3,111,33,30,16|monster|Snake|1010,15,60000ms,30000ms,Mob018-3::On1010 -018-3,68,101,5,4|monster|CaveSnake|1021,4,60000ms,30000ms,Mob018-3::On1021 -018-3,153,96,18,17|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob018-3::On1056 -018-3,99,99,17,17|monster|CaveMaggot|1056,4,100000ms,30000ms,Mob018-3::On1056 - - -018-3,0,0,0|script|Mob018-3|32767 -{ - end; - -On1002: - set @mobID, 1002; - callfunc "MobPoints"; - end; - -On1007: - set @mobID, 1007; - callfunc "MobPoints"; - end; - -On1008: - set @mobID, 1008; - callfunc "MobPoints"; - end; - -On1009: - set @mobID, 1009; - callfunc "MobPoints"; - end; - -On1010: - set @mobID, 1010; - callfunc "MobPoints"; - end; - -On1012: - set @mobID, 1012; - callfunc "MobPoints"; - end; - -On1013: - set @mobID, 1013; - callfunc "MobPoints"; - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1021: - set @mobID, 1021; - callfunc "MobPoints"; - end; - -On1056: - set @mobID, 1056; - callfunc "MobPoints"; - end; -} +018-3,48,29,57,19|monster|Bat|1017,10,100000ms,30000ms +018-3,35,144,31,48|monster|EvilMushroom|1013,10,120000ms,30000ms +018-3,35,65,28,22|monster|Spider|1012,20,100000ms,50000ms +018-3,28,157,3,2|monster|PinkFlower|1014,1,60000ms,30000ms +018-3,99,111,17,41|monster|YellowSlime|1007,10,90000ms,30000ms +018-3,134,140,12,8|monster|Maggot|1002,3,80000ms,40000ms +018-3,82,149,73,26|monster|Spider|1012,8,300000ms,120000ms +018-3,102,172,131,13|monster|BlackScorpion|1009,20,60000ms,10000ms +018-3,174,37,10,31|monster|YellowSlime|1007,5,180000ms,120000ms +018-3,148,148,13,24|monster|Bat|1017,3,180000ms,40000ms +018-3,136,87,21,7|monster|YellowSlime|1007,6,80000ms,40000ms +018-3,81,77,27,21|monster|RedSlime|1008,15,80000ms,40000ms +018-3,111,80,5,6|monster|BlackScorpion|1009,10,80000ms,40000ms +018-3,175,122,5,40|monster|Snake|1010,15,40000ms,20000ms +018-3,172,94,17,17|monster|RedSlime|1008,10,60000ms,30000ms +018-3,59,95,11,8|monster|Spider|1012,15,60000ms,30000ms +018-3,77,92,23,7|monster|BlackScorpion|1009,15,60000ms,30000ms +018-3,94,55,16,8|monster|Snake|1010,5,60000ms,30000ms +018-3,133,39,12,17|monster|Spider|1012,10,60000ms,30000ms +018-3,111,33,30,16|monster|Snake|1010,15,60000ms,30000ms +018-3,68,101,5,4|monster|CaveSnake|1021,4,60000ms,30000ms +018-3,153,96,18,17|monster|CaveMaggot|1056,4,100000ms,30000ms +018-3,99,99,17,17|monster|CaveMaggot|1056,4,100000ms,30000ms diff --git a/world/map/npc/018-3/_nodes.txt b/world/map/npc/018-3/_nodes.txt new file mode 100644 index 00000000..833941e7 --- /dev/null +++ b/world/map/npc/018-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Northern Mines nodes + +// (no nodes) diff --git a/world/map/npc/019-1/_import.txt b/world/map/npc/019-1/_import.txt index e462165a..9eeea2c7 100644 --- a/world/map/npc/019-1/_import.txt +++ b/world/map/npc/019-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 019-1 npc: npc/019-1/_mobs.txt +npc: npc/019-1/_nodes.txt npc: npc/019-1/_warps.txt npc: npc/019-1/mapflags.txt npc: npc/019-1/santa_helper.txt diff --git a/world/map/npc/019-1/_mobs.txt b/world/map/npc/019-1/_mobs.txt index 505d18df..28f76d9a 100644 --- a/world/map/npc/019-1/_mobs.txt +++ b/world/map/npc/019-1/_mobs.txt @@ -1,33 +1,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // snow Field mobs -019-1,0,0,0,0|monster|Fluffy|1020,50,100000ms,30000ms,Mob019-1::On1020 -019-1,0,0,0,0|monster|Reinboo|1094,4,100000ms,30000ms,Mob019-1::On1094 -019-1,0,0,0,0|monster|WhiteBell|1095,5,100000ms,30000ms,Mob019-1::On1095 -019-1,0,0,0,0|monster|Santaboo|1112,4,100000ms,30000ms,Mob019-1::On1112 - - -019-1,0,0,0|script|Mob019-1|32767 -{ - end; - -On1020: - set @mobID, 1020; - callfunc "MobPoints"; - end; - -On1094: - set @mobID, 1094; - callfunc "MobPoints"; - end; - -On1095: - set @mobID, 1095; - callfunc "MobPoints"; - end; - -On1112: - set @mobID, 1112; - callfunc "MobPoints"; - end; -} +019-1,0,0,0,0|monster|Fluffy|1020,50,100000ms,30000ms +019-1,0,0,0,0|monster|Reinboo|1094,4,100000ms,30000ms +019-1,0,0,0,0|monster|WhiteBell|1095,5,100000ms,30000ms +019-1,0,0,0,0|monster|Santaboo|1112,4,100000ms,30000ms diff --git a/world/map/npc/019-1/_nodes.txt b/world/map/npc/019-1/_nodes.txt new file mode 100644 index 00000000..091beb4e --- /dev/null +++ b/world/map/npc/019-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// snow Field nodes + +// (no nodes) diff --git a/world/map/npc/019-3/_import.txt b/world/map/npc/019-3/_import.txt index eca5ede9..d7547724 100644 --- a/world/map/npc/019-3/_import.txt +++ b/world/map/npc/019-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 019-3 npc: npc/019-3/_mobs.txt +npc: npc/019-3/_nodes.txt npc: npc/019-3/_warps.txt npc: npc/019-3/mapflags.txt diff --git a/world/map/npc/019-3/_mobs.txt b/world/map/npc/019-3/_mobs.txt index 26a7771a..3ba50e42 100644 --- a/world/map/npc/019-3/_mobs.txt +++ b/world/map/npc/019-3/_mobs.txt @@ -1,21 +1,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Snow Cave mobs -019-3,0,4,0,0|monster|Moggun|1061,10,100000ms,30000ms,Mob019-3::On1061 -019-3,0,4,0,0|monster|Bat|1017,50,100000ms,30000ms,Mob019-3::On1017 - - -019-3,0,0,0|script|Mob019-3|32767 -{ - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1061: - set @mobID, 1061; - callfunc "MobPoints"; - end; -} +019-3,0,4,0,0|monster|Moggun|1061,10,100000ms,30000ms +019-3,0,4,0,0|monster|Bat|1017,50,100000ms,30000ms diff --git a/world/map/npc/019-3/_nodes.txt b/world/map/npc/019-3/_nodes.txt new file mode 100644 index 00000000..97eefd57 --- /dev/null +++ b/world/map/npc/019-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Snow Cave nodes + +// (no nodes) diff --git a/world/map/npc/019-4/_import.txt b/world/map/npc/019-4/_import.txt index 0d16081c..f9b94579 100644 --- a/world/map/npc/019-4/_import.txt +++ b/world/map/npc/019-4/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 019-4 npc: npc/019-4/_mobs.txt +npc: npc/019-4/_nodes.txt npc: npc/019-4/_warps.txt npc: npc/019-4/mapflags.txt diff --git a/world/map/npc/019-4/_mobs.txt b/world/map/npc/019-4/_mobs.txt index 43717e0d..6a23a017 100644 --- a/world/map/npc/019-4/_mobs.txt +++ b/world/map/npc/019-4/_mobs.txt @@ -1,33 +1,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Snow Cave mobs -019-4,0,0,0,0|monster|Moggun|1061,12,45000ms,30000ms,Mob019-4::On1061 -019-4,47,67,15,9|monster|WhiteSlime|1093,5,45000ms,45000ms,Mob019-4::On1093 -019-4,0,0,0,0|monster|Bat|1017,15,45000ms,25000ms,Mob019-4::On1017 -019-4,0,0,0,0|monster|BlueSlime|1091,7,45000ms,30000ms,Mob019-4::On1091 - - -019-4,0,0,0|script|Mob019-4|32767 -{ - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1061: - set @mobID, 1061; - callfunc "MobPoints"; - end; - -On1091: - set @mobID, 1091; - callfunc "MobPoints"; - end; - -On1093: - set @mobID, 1093; - callfunc "MobPoints"; - end; -} +019-4,0,0,0,0|monster|Moggun|1061,12,45000ms,30000ms +019-4,47,67,15,9|monster|WhiteSlime|1093,5,45000ms,45000ms +019-4,0,0,0,0|monster|Bat|1017,15,45000ms,25000ms +019-4,0,0,0,0|monster|BlueSlime|1091,7,45000ms,30000ms diff --git a/world/map/npc/019-4/_nodes.txt b/world/map/npc/019-4/_nodes.txt new file mode 100644 index 00000000..97eefd57 --- /dev/null +++ b/world/map/npc/019-4/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Snow Cave nodes + +// (no nodes) diff --git a/world/map/npc/020-1/_import.txt b/world/map/npc/020-1/_import.txt index b85bd34f..a48fad5d 100644 --- a/world/map/npc/020-1/_import.txt +++ b/world/map/npc/020-1/_import.txt @@ -3,6 +3,7 @@ map: 020-1 npc: npc/020-1/KrickKrackKrock.txt npc: npc/020-1/_mobs.txt +npc: npc/020-1/_nodes.txt npc: npc/020-1/_warps.txt npc: npc/020-1/dock.txt npc: npc/020-1/mapflags.txt diff --git a/world/map/npc/020-1/_mobs.txt b/world/map/npc/020-1/_mobs.txt index da1ffd27..7890d424 100644 --- a/world/map/npc/020-1/_mobs.txt +++ b/world/map/npc/020-1/_mobs.txt @@ -1,15 +1,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Nivalis mobs -020-1,0,0,0,0|monster|WhiteBell|1095,3,100000ms,30000ms,Mob020-1::On1095 - - -020-1,0,0,0|script|Mob020-1|32767 -{ - end; - -On1095: - set @mobID, 1095; - callfunc "MobPoints"; - end; -} +020-1,0,0,0,0|monster|WhiteBell|1095,3,100000ms,30000ms diff --git a/world/map/npc/020-1/_nodes.txt b/world/map/npc/020-1/_nodes.txt new file mode 100644 index 00000000..07b204f3 --- /dev/null +++ b/world/map/npc/020-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Nivalis nodes + +// (no nodes) diff --git a/world/map/npc/020-2/_import.txt b/world/map/npc/020-2/_import.txt index 5ed442f3..e8d75c4c 100644 --- a/world/map/npc/020-2/_import.txt +++ b/world/map/npc/020-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 020-2 npc: npc/020-2/_mobs.txt +npc: npc/020-2/_nodes.txt npc: npc/020-2/_warps.txt npc: npc/020-2/baktar.txt npc: npc/020-2/banker.txt diff --git a/world/map/npc/020-2/_mobs.txt b/world/map/npc/020-2/_mobs.txt index 62e1f438..70eb4f73 100644 --- a/world/map/npc/020-2/_mobs.txt +++ b/world/map/npc/020-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Nivalis Indoor mobs - - -020-2,0,0,0|script|Mob020-2|32767 -{ - end; -} diff --git a/world/map/npc/020-2/_nodes.txt b/world/map/npc/020-2/_nodes.txt new file mode 100644 index 00000000..29018595 --- /dev/null +++ b/world/map/npc/020-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Nivalis Indoor nodes + +// (no nodes) diff --git a/world/map/npc/020-3/_import.txt b/world/map/npc/020-3/_import.txt index 8560e23d..b1624874 100644 --- a/world/map/npc/020-3/_import.txt +++ b/world/map/npc/020-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 020-3 npc: npc/020-3/_mobs.txt +npc: npc/020-3/_nodes.txt npc: npc/020-3/_warps.txt npc: npc/020-3/mapflags.txt diff --git a/world/map/npc/020-3/_mobs.txt b/world/map/npc/020-3/_mobs.txt index edb95973..2e7ed4a0 100644 --- a/world/map/npc/020-3/_mobs.txt +++ b/world/map/npc/020-3/_mobs.txt @@ -1,23 +1,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Ice cave mobs -020-3,40,36,29,4|monster|Bat|1017,1,100000ms,30000ms,Mob020-3::On1017 -020-3,40,49,34,7|monster|Pinkie|1018,1,100000ms,30000ms,Mob020-3::On1018 -020-3,0,0,0,0|monster|Bat|1017,20,0ms,0ms,Mob020-3::On1017 -020-3,0,0,0,0|monster|Pinkie|1018,10,0ms,0ms,Mob020-3::On1018 - - -020-3,0,0,0|script|Mob020-3|32767 -{ - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1018: - set @mobID, 1018; - callfunc "MobPoints"; - end; -} +020-3,40,36,29,4|monster|Bat|1017,1,100000ms,30000ms +020-3,40,49,34,7|monster|Pinkie|1018,1,100000ms,30000ms +020-3,0,0,0,0|monster|Bat|1017,20,0ms,0ms +020-3,0,0,0,0|monster|Pinkie|1018,10,0ms,0ms diff --git a/world/map/npc/020-3/_nodes.txt b/world/map/npc/020-3/_nodes.txt new file mode 100644 index 00000000..361b2f86 --- /dev/null +++ b/world/map/npc/020-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Ice cave nodes + +// (no nodes) diff --git a/world/map/npc/021-3/_import.txt b/world/map/npc/021-3/_import.txt index c83d6433..33b9119e 100644 --- a/world/map/npc/021-3/_import.txt +++ b/world/map/npc/021-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 021-3 npc: npc/021-3/_mobs.txt +npc: npc/021-3/_nodes.txt npc: npc/021-3/_warps.txt npc: npc/021-3/mapflags.txt diff --git a/world/map/npc/021-3/_mobs.txt b/world/map/npc/021-3/_mobs.txt index 8d6c2591..75449889 100644 --- a/world/map/npc/021-3/_mobs.txt +++ b/world/map/npc/021-3/_mobs.txt @@ -1,44 +1,13 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Central Tulimshar Sewers mobs -021-3,120,38,11,8|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056 -021-3,103,58,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056 -021-3,80,98,34,31|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056 -021-3,129,82,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056 -021-3,140,38,16,8|monster|AngryFireGoblin|1108,3,100000ms,30000ms,Mob021-3::On1108 -021-3,79,98,33,31|monster|BlackScorpion|1009,4,100000ms,1800000ms,Mob021-3::On1009 -021-3,52,53,2,17|monster|GreenSlime|1005,4,40000ms,50000ms,Mob021-3::On1005 -021-3,93,31,28,22|monster|SeaSlime|1033,6,100000ms,30000ms,Mob021-3::On1033 -021-3,121,128,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056 -021-3,47,139,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms,Mob021-3::On1056 - - -021-3,0,0,0|script|Mob021-3|32767 -{ - end; - -On1005: - set @mobID, 1005; - callfunc "MobPoints"; - end; - -On1009: - set @mobID, 1009; - callfunc "MobPoints"; - end; - -On1033: - set @mobID, 1033; - callfunc "MobPoints"; - end; - -On1056: - set @mobID, 1056; - callfunc "MobPoints"; - end; - -On1108: - set @mobID, 1108; - callfunc "MobPoints"; - end; -} +021-3,120,38,11,8|monster|CaveMaggot|1056,5,100000ms,30000ms +021-3,103,58,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms +021-3,80,98,34,31|monster|CaveMaggot|1056,5,100000ms,30000ms +021-3,129,82,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms +021-3,140,38,16,8|monster|AngryFireGoblin|1108,3,100000ms,30000ms +021-3,79,98,33,31|monster|BlackScorpion|1009,4,100000ms,1800000ms +021-3,52,53,2,17|monster|GreenSlime|1005,4,40000ms,50000ms +021-3,93,31,28,22|monster|SeaSlime|1033,6,100000ms,30000ms +021-3,121,128,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms +021-3,47,139,8,3|monster|CaveMaggot|1056,5,100000ms,30000ms diff --git a/world/map/npc/021-3/_nodes.txt b/world/map/npc/021-3/_nodes.txt new file mode 100644 index 00000000..f55e37ec --- /dev/null +++ b/world/map/npc/021-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Central Tulimshar Sewers nodes + +// (no nodes) diff --git a/world/map/npc/025-1/_import.txt b/world/map/npc/025-1/_import.txt index a5530f31..9c4af1aa 100644 --- a/world/map/npc/025-1/_import.txt +++ b/world/map/npc/025-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 025-1 npc: npc/025-1/_mobs.txt +npc: npc/025-1/_nodes.txt npc: npc/025-1/_warps.txt npc: npc/025-1/barrier.txt npc: npc/025-1/mapflags.txt diff --git a/world/map/npc/025-1/_mobs.txt b/world/map/npc/025-1/_mobs.txt index 2a2d27ac..259f0568 100644 --- a/world/map/npc/025-1/_mobs.txt +++ b/world/map/npc/025-1/_mobs.txt @@ -1,64 +1,13 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland Swamp mobs -025-1,100,60,56,79|monster|CloverPatch|1037,3,30000ms,10000ms,Mob025-1::On1037 -025-1,56,96,13,5|monster|CloverPatch|1037,1,1200000ms,10000ms,Mob025-1::On1037 -025-1,56,35,77,33|monster|AlizarinPlant|1032,2,240000ms,12000ms,Mob025-1::On1032 -025-1,55,62,24,13|monster|Snail|1041,7,30000ms,12000ms,Mob025-1::On1041 -025-1,38,84,37,31|monster|Silkworm|1035,18,40000ms,300ms,Mob025-1::On1035 -025-1,96,47,63,55|monster|LogHead|1025,14,18000ms,3000ms,Mob025-1::On1025 -025-1,0,0,0,0|monster|PinkFlower|1014,34,20000ms,5000ms,Mob025-1::On1014 -025-1,0,0,0,0|monster|SpikyMushroom|1019,40,90000ms,500ms,Mob025-1::On1019 -025-1,101,53,55,65|monster|Squirrel|1038,18,60000ms,9000ms,Mob025-1::On1038 -025-1,26,61,15,85|monster|Scorpion|1003,12,100000ms,50000ms,Mob025-1::On1003 - - -025-1,0,0,0|script|Mob025-1|32767 -{ - end; - -On1003: - set @mobID, 1003; - callfunc "MobPoints"; - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1025: - set @mobID, 1025; - callfunc "MobPoints"; - end; - -On1032: - set @mobID, 1032; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1041: - set @mobID, 1041; - callfunc "MobPoints"; - end; -} +025-1,100,60,56,79|monster|CloverPatch|1037,3,30000ms,10000ms +025-1,56,96,13,5|monster|CloverPatch|1037,1,1200000ms,10000ms +025-1,56,35,77,33|monster|AlizarinPlant|1032,2,240000ms,12000ms +025-1,55,62,24,13|monster|Snail|1041,7,30000ms,12000ms +025-1,38,84,37,31|monster|Silkworm|1035,18,40000ms,300ms +025-1,96,47,63,55|monster|LogHead|1025,14,18000ms,3000ms +025-1,0,0,0,0|monster|PinkFlower|1014,34,20000ms,5000ms +025-1,0,0,0,0|monster|SpikyMushroom|1019,40,90000ms,500ms +025-1,101,53,55,65|monster|Squirrel|1038,18,60000ms,9000ms +025-1,26,61,15,85|monster|Scorpion|1003,12,100000ms,50000ms diff --git a/world/map/npc/025-1/_nodes.txt b/world/map/npc/025-1/_nodes.txt new file mode 100644 index 00000000..805bf118 --- /dev/null +++ b/world/map/npc/025-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland Swamp nodes + +// (no nodes) diff --git a/world/map/npc/025-3/_import.txt b/world/map/npc/025-3/_import.txt index 63ace6ac..83e14f2c 100644 --- a/world/map/npc/025-3/_import.txt +++ b/world/map/npc/025-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 025-3 npc: npc/025-3/_mobs.txt +npc: npc/025-3/_nodes.txt npc: npc/025-3/_warps.txt npc: npc/025-3/barriers.txt npc: npc/025-3/mapflags.txt diff --git a/world/map/npc/025-3/_mobs.txt b/world/map/npc/025-3/_mobs.txt index 5ccfdfc0..70e432d9 100644 --- a/world/map/npc/025-3/_mobs.txt +++ b/world/map/npc/025-3/_mobs.txt @@ -1,33 +1,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Rossy Main Hall mobs -025-3,0,0,0,0|monster|CaveMaggot|1056,100,0ms,100ms,Mob025-3::On1056 -025-3,0,0,0,0|monster|Archant|1060,20,0ms,100ms,Mob025-3::On1060 -025-3,0,0,0,0|monster|AngryScorpion|1057,25,0ms,100ms,Mob025-3::On1057 -025-3,69,153,13,1|monster|Skeleton|1043,1,0ms,30000ms,Mob025-3::On1043 - - -025-3,0,0,0|script|Mob025-3|32767 -{ - end; - -On1043: - set @mobID, 1043; - callfunc "MobPoints"; - end; - -On1056: - set @mobID, 1056; - callfunc "MobPoints"; - end; - -On1057: - set @mobID, 1057; - callfunc "MobPoints"; - end; - -On1060: - set @mobID, 1060; - callfunc "MobPoints"; - end; -} +025-3,0,0,0,0|monster|CaveMaggot|1056,100,0ms,100ms +025-3,0,0,0,0|monster|Archant|1060,20,0ms,100ms +025-3,0,0,0,0|monster|AngryScorpion|1057,25,0ms,100ms +025-3,69,153,13,1|monster|Skeleton|1043,1,0ms,30000ms diff --git a/world/map/npc/025-3/_nodes.txt b/world/map/npc/025-3/_nodes.txt new file mode 100644 index 00000000..28957b28 --- /dev/null +++ b/world/map/npc/025-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Rossy Main Hall nodes + +// (no nodes) diff --git a/world/map/npc/025-4/_import.txt b/world/map/npc/025-4/_import.txt index cb9fb0e9..9f7c59cf 100644 --- a/world/map/npc/025-4/_import.txt +++ b/world/map/npc/025-4/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 025-4 npc: npc/025-4/_mobs.txt +npc: npc/025-4/_nodes.txt npc: npc/025-4/_warps.txt npc: npc/025-4/battlecaves.txt npc: npc/025-4/clauquer.txt diff --git a/world/map/npc/025-4/_mobs.txt b/world/map/npc/025-4/_mobs.txt index 3ad731de..d8664774 100644 --- a/world/map/npc/025-4/_mobs.txt +++ b/world/map/npc/025-4/_mobs.txt @@ -1,16 +1,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Rossy Battle Caves mobs -025-4,29,31,20,14|monster|CaveMaggot|1056,3,0ms,100ms,Mob025-4::On1056 -025-4,94,24,20,21|monster|CaveMaggot|1056,5,0ms,100ms,Mob025-4::On1056 - - -025-4,0,0,0|script|Mob025-4|32767 -{ - end; - -On1056: - set @mobID, 1056; - callfunc "MobPoints"; - end; -} +025-4,29,31,20,14|monster|CaveMaggot|1056,3,0ms,100ms +025-4,94,24,20,21|monster|CaveMaggot|1056,5,0ms,100ms diff --git a/world/map/npc/025-4/_nodes.txt b/world/map/npc/025-4/_nodes.txt new file mode 100644 index 00000000..bd29621b --- /dev/null +++ b/world/map/npc/025-4/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Rossy Battle Caves nodes + +// (no nodes) diff --git a/world/map/npc/026-1/_import.txt b/world/map/npc/026-1/_import.txt index ddd3a0cd..72d1a275 100644 --- a/world/map/npc/026-1/_import.txt +++ b/world/map/npc/026-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 026-1 npc: npc/026-1/_mobs.txt +npc: npc/026-1/_nodes.txt npc: npc/026-1/_warps.txt npc: npc/026-1/mapflags.txt npc: npc/026-1/sign.txt diff --git a/world/map/npc/026-1/_mobs.txt b/world/map/npc/026-1/_mobs.txt index a99c4bab..9f4d8325 100644 --- a/world/map/npc/026-1/_mobs.txt +++ b/world/map/npc/026-1/_mobs.txt @@ -1,55 +1,14 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Swamp mobs -026-1,0,0,0,0|monster|Wisp|1040,34,120000ms,40000ms,Mob026-1::On1040 -026-1,0,0,0,0|monster|Spectre|1042,34,120000ms,40000ms,Mob026-1::On1042 -026-1,0,0,0,0|monster|Poltergeist|1047,34,120000ms,40000ms,Mob026-1::On1047 -026-1,0,0,0,0|monster|Silkworm|1035,10,300000ms,60000ms,Mob026-1::On1035 -026-1,0,0,0,0|monster|Scorpion|1003,15,300000ms,30000ms,Mob026-1::On1003 -026-1,0,0,0,0|monster|LogHead|1025,8,300000ms,40000ms,Mob026-1::On1025 -026-1,46,74,35,26|monster|GrassSnake|1034,2,100000ms,50000ms,Mob026-1::On1034 -026-1,88,36,35,26|monster|GrassSnake|1034,2,100000ms,50000ms,Mob026-1::On1034 -026-1,35,36,18,16|monster|GrassSnake|1034,2,100000ms,50000ms,Mob026-1::On1034 -026-1,66,33,73,17|monster|GrassSnake|1034,4,100000ms,50000ms,Mob026-1::On1034 -026-1,60,76,61,31|monster|GrassSnake|1034,4,100000ms,50000ms,Mob026-1::On1034 - - -026-1,0,0,0|script|Mob026-1|32767 -{ - end; - -On1003: - set @mobID, 1003; - callfunc "MobPoints"; - end; - -On1025: - set @mobID, 1025; - callfunc "MobPoints"; - end; - -On1034: - set @mobID, 1034; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1040: - set @mobID, 1040; - callfunc "MobPoints"; - end; - -On1042: - set @mobID, 1042; - callfunc "MobPoints"; - end; - -On1047: - set @mobID, 1047; - callfunc "MobPoints"; - end; -} +026-1,0,0,0,0|monster|Wisp|1040,34,120000ms,40000ms +026-1,0,0,0,0|monster|Spectre|1042,34,120000ms,40000ms +026-1,0,0,0,0|monster|Poltergeist|1047,34,120000ms,40000ms +026-1,0,0,0,0|monster|Silkworm|1035,10,300000ms,60000ms +026-1,0,0,0,0|monster|Scorpion|1003,15,300000ms,30000ms +026-1,0,0,0,0|monster|LogHead|1025,8,300000ms,40000ms +026-1,46,74,35,26|monster|GrassSnake|1034,2,100000ms,50000ms +026-1,88,36,35,26|monster|GrassSnake|1034,2,100000ms,50000ms +026-1,35,36,18,16|monster|GrassSnake|1034,2,100000ms,50000ms +026-1,66,33,73,17|monster|GrassSnake|1034,4,100000ms,50000ms +026-1,60,76,61,31|monster|GrassSnake|1034,4,100000ms,50000ms diff --git a/world/map/npc/026-1/_nodes.txt b/world/map/npc/026-1/_nodes.txt new file mode 100644 index 00000000..47e3199f --- /dev/null +++ b/world/map/npc/026-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Swamp nodes + +// (no nodes) diff --git a/world/map/npc/027-1/_import.txt b/world/map/npc/027-1/_import.txt index 103ca8fd..66d24392 100644 --- a/world/map/npc/027-1/_import.txt +++ b/world/map/npc/027-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 027-1 npc: npc/027-1/_mobs.txt +npc: npc/027-1/_nodes.txt npc: npc/027-1/_warps.txt npc: npc/027-1/crypt.txt npc: npc/027-1/golbenez.txt diff --git a/world/map/npc/027-1/_mobs.txt b/world/map/npc/027-1/_mobs.txt index de1a4b6f..51ce6174 100644 --- a/world/map/npc/027-1/_mobs.txt +++ b/world/map/npc/027-1/_mobs.txt @@ -1,61 +1,20 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Graveyard mobs -027-1,81,91,95,27|monster|Poltergeist|1047,4,900000ms,60000ms,Mob027-1::On1047 -027-1,81,91,97,25|monster|Spectre|1042,4,900000ms,60000ms,Mob027-1::On1042 -027-1,81,91,99,23|monster|Wisp|1040,4,900000ms,60000ms,Mob027-1::On1040 -027-1,37,64,32,20|monster|Skeleton|1043,2,60000ms,8000ms,Mob027-1::On1043 -027-1,37,64,32,20|monster|LadySkeleton|1044,2,60000ms,8000ms,Mob027-1::On1044 -027-1,71,41,31,22|monster|Skeleton|1043,1,175000ms,20000ms,Mob027-1::On1043 -027-1,71,41,31,22|monster|LadySkeleton|1044,1,175000ms,20000ms,Mob027-1::On1044 -027-1,37,41,33,22|monster|Skeleton|1043,4,180000ms,20000ms,Mob027-1::On1043 -027-1,37,41,33,22|monster|LadySkeleton|1044,4,180000ms,20000ms,Mob027-1::On1044 -027-1,105,40,32,21|monster|Skeleton|1043,2,35000ms,20000ms,Mob027-1::On1043 -027-1,105,40,32,21|monster|LadySkeleton|1044,3,33000ms,25000ms,Mob027-1::On1044 -027-1,70,64,31,20|monster|Skeleton|1043,1,60000ms,8000ms,Mob027-1::On1043 -027-1,70,64,31,21|monster|LadySkeleton|1044,1,60000ms,8000ms,Mob027-1::On1044 -027-1,104,64,31,20|monster|Skeleton|1043,2,60000ms,8000ms,Mob027-1::On1043 -027-1,104,64,31,21|monster|LadySkeleton|1044,2,60000ms,8000ms,Mob027-1::On1044 -027-1,70,40,100,20|monster|VampireBat|1066,15,100000ms,30000ms,Mob027-1::On1066 -027-1,99,90,34,16|monster|GrassSnake|1034,3,100000ms,50000ms,Mob027-1::On1034 - - -027-1,0,0,0|script|Mob027-1|32767 -{ - end; - -On1034: - set @mobID, 1034; - callfunc "MobPoints"; - end; - -On1040: - set @mobID, 1040; - callfunc "MobPoints"; - end; - -On1042: - set @mobID, 1042; - callfunc "MobPoints"; - end; - -On1043: - set @mobID, 1043; - callfunc "MobPoints"; - end; - -On1044: - set @mobID, 1044; - callfunc "MobPoints"; - end; - -On1047: - set @mobID, 1047; - callfunc "MobPoints"; - end; - -On1066: - set @mobID, 1066; - callfunc "MobPoints"; - end; -} +027-1,81,91,95,27|monster|Poltergeist|1047,4,900000ms,60000ms +027-1,81,91,97,25|monster|Spectre|1042,4,900000ms,60000ms +027-1,81,91,99,23|monster|Wisp|1040,4,900000ms,60000ms +027-1,37,64,32,20|monster|Skeleton|1043,2,60000ms,8000ms +027-1,37,64,32,20|monster|LadySkeleton|1044,2,60000ms,8000ms +027-1,71,41,31,22|monster|Skeleton|1043,1,175000ms,20000ms +027-1,71,41,31,22|monster|LadySkeleton|1044,1,175000ms,20000ms +027-1,37,41,33,22|monster|Skeleton|1043,4,180000ms,20000ms +027-1,37,41,33,22|monster|LadySkeleton|1044,4,180000ms,20000ms +027-1,105,40,32,21|monster|Skeleton|1043,2,35000ms,20000ms +027-1,105,40,32,21|monster|LadySkeleton|1044,3,33000ms,25000ms +027-1,70,64,31,20|monster|Skeleton|1043,1,60000ms,8000ms +027-1,70,64,31,21|monster|LadySkeleton|1044,1,60000ms,8000ms +027-1,104,64,31,20|monster|Skeleton|1043,2,60000ms,8000ms +027-1,104,64,31,21|monster|LadySkeleton|1044,2,60000ms,8000ms +027-1,70,40,100,20|monster|VampireBat|1066,15,100000ms,30000ms +027-1,99,90,34,16|monster|GrassSnake|1034,3,100000ms,50000ms diff --git a/world/map/npc/027-1/_nodes.txt b/world/map/npc/027-1/_nodes.txt new file mode 100644 index 00000000..46a78ab8 --- /dev/null +++ b/world/map/npc/027-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Graveyard nodes + +// (no nodes) diff --git a/world/map/npc/027-2/_import.txt b/world/map/npc/027-2/_import.txt index f9e207b3..4cacd2c1 100644 --- a/world/map/npc/027-2/_import.txt +++ b/world/map/npc/027-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 027-2 npc: npc/027-2/_mobs.txt +npc: npc/027-2/_nodes.txt npc: npc/027-2/_warps.txt npc: npc/027-2/alacrius.txt npc: npc/027-2/barman.txt diff --git a/world/map/npc/027-2/_mobs.txt b/world/map/npc/027-2/_mobs.txt index ab76e3b0..1c5a6d51 100644 --- a/world/map/npc/027-2/_mobs.txt +++ b/world/map/npc/027-2/_mobs.txt @@ -1,39 +1,13 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Graveyard Indoor mobs -027-2,81,41,11,9|monster|DrunkenSkeleton|1077,1,100000ms,30000ms,Mob027-2::On1077 -027-2,102,99,9,19|monster|TipsySkeleton|1078,1,100000ms,30000ms,Mob027-2::On1078 -027-2,110,26,11,11|monster|TipsySkeleton|1078,1,100000ms,30000ms,Mob027-2::On1078 -027-2,104,28,11,9|monster|DrunkenSkeleton|1077,1,100000ms,30000ms,Mob027-2::On1077 -027-2,89,34,11,9|monster|DrunkenLadySkeleton|1079,1,100000ms,30000ms,Mob027-2::On1079 -027-2,116,26,11,9|monster|DrunkenLadySkeleton|1079,1,100000ms,30000ms,Mob027-2::On1079 -027-2,112,88,28,39|monster|VampireBat|1066,15,100000ms,30000ms,Mob027-2::On1066 -027-2,102,99,9,19|monster|DrunkenSkeleton|1077,1,100000ms,30000ms,Mob027-2::On1077 -027-2,102,99,9,19|monster|TipsySkeleton|1078,1,100000ms,30000ms,Mob027-2::On1078 -027-2,89,34,11,9|monster|TipsySkeleton|1078,1,100000ms,30000ms,Mob027-2::On1078 - - -027-2,0,0,0|script|Mob027-2|32767 -{ - end; - -On1066: - set @mobID, 1066; - callfunc "MobPoints"; - end; - -On1077: - set @mobID, 1077; - callfunc "MobPoints"; - end; - -On1078: - set @mobID, 1078; - callfunc "MobPoints"; - end; - -On1079: - set @mobID, 1079; - callfunc "MobPoints"; - end; -} +027-2,81,41,11,9|monster|DrunkenSkeleton|1077,1,100000ms,30000ms +027-2,102,99,9,19|monster|TipsySkeleton|1078,1,100000ms,30000ms +027-2,110,26,11,11|monster|TipsySkeleton|1078,1,100000ms,30000ms +027-2,104,28,11,9|monster|DrunkenSkeleton|1077,1,100000ms,30000ms +027-2,89,34,11,9|monster|DrunkenLadySkeleton|1079,1,100000ms,30000ms +027-2,116,26,11,9|monster|DrunkenLadySkeleton|1079,1,100000ms,30000ms +027-2,112,88,28,39|monster|VampireBat|1066,15,100000ms,30000ms +027-2,102,99,9,19|monster|DrunkenSkeleton|1077,1,100000ms,30000ms +027-2,102,99,9,19|monster|TipsySkeleton|1078,1,100000ms,30000ms +027-2,89,34,11,9|monster|TipsySkeleton|1078,1,100000ms,30000ms diff --git a/world/map/npc/027-2/_nodes.txt b/world/map/npc/027-2/_nodes.txt new file mode 100644 index 00000000..78bbb5b6 --- /dev/null +++ b/world/map/npc/027-2/_nodes.txt @@ -0,0 +1,16 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Graveyard Indoor nodes + +027-2,0,0,0|script|Node027-2|32767 +{ + end; +OnInit: + setarray .m$, "_N-Alchemy", "027-2"; + setarray .x1, "_N-Alchemy", 51; + setarray .y1, "_N-Alchemy", 100; + setarray .x2, "_N-Alchemy", 0; + setarray .y2, "_N-Alchemy", 0; + setarray .id, "_N-Alchemy", 0; + donpcevent "_N-Alchemy::OnMaybeStart"; + destroy; +} diff --git a/world/map/npc/027-3/_import.txt b/world/map/npc/027-3/_import.txt index af72eb2f..78754482 100644 --- a/world/map/npc/027-3/_import.txt +++ b/world/map/npc/027-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 027-3 npc: npc/027-3/_mobs.txt +npc: npc/027-3/_nodes.txt npc: npc/027-3/_warps.txt npc: npc/027-3/casket_traps.txt npc: npc/027-3/general_krukan_door.txt diff --git a/world/map/npc/027-3/_mobs.txt b/world/map/npc/027-3/_mobs.txt index 4c7c8ff6..a1926191 100644 --- a/world/map/npc/027-3/_mobs.txt +++ b/world/map/npc/027-3/_mobs.txt @@ -1,42 +1,11 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Crypt Basement mobs -027-3,34,63,29,69|monster|Skeleton|1043,6,60000ms,8000ms,Mob027-3::On1043 -027-3,97,43,59,30|monster|Skeleton|1043,6,60000ms,8000ms,Mob027-3::On1043 -027-3,34,63,29,69|monster|LadySkeleton|1044,4,60000ms,8000ms,Mob027-3::On1044 -027-3,113,78,28,26|monster|LadySkeleton|1044,4,60000ms,8000ms,Mob027-3::On1044 -027-3,113,78,27,27|monster|Skeleton|1043,4,60000ms,8000ms,Mob027-3::On1043 -027-3,81,87,29,22|monster|VampireBat|1066,15,100000ms,30000ms,Mob027-3::On1066 -027-3,74,45,106,33|monster|PoisonSkull|1024,1,60000ms,20000ms,Mob027-3::On1024 -027-3,98,84,60,14|monster|FireSkull|1023,2,60000ms,20000ms,Mob027-3::On1023 - - -027-3,0,0,0|script|Mob027-3|32767 -{ - end; - -On1023: - set @mobID, 1023; - callfunc "MobPoints"; - end; - -On1024: - set @mobID, 1024; - callfunc "MobPoints"; - end; - -On1043: - set @mobID, 1043; - callfunc "MobPoints"; - end; - -On1044: - set @mobID, 1044; - callfunc "MobPoints"; - end; - -On1066: - set @mobID, 1066; - callfunc "MobPoints"; - end; -} +027-3,34,63,29,69|monster|Skeleton|1043,6,60000ms,8000ms +027-3,97,43,59,30|monster|Skeleton|1043,6,60000ms,8000ms +027-3,34,63,29,69|monster|LadySkeleton|1044,4,60000ms,8000ms +027-3,113,78,28,26|monster|LadySkeleton|1044,4,60000ms,8000ms +027-3,113,78,27,27|monster|Skeleton|1043,4,60000ms,8000ms +027-3,81,87,29,22|monster|VampireBat|1066,15,100000ms,30000ms +027-3,74,45,106,33|monster|PoisonSkull|1024,1,60000ms,20000ms +027-3,98,84,60,14|monster|FireSkull|1023,2,60000ms,20000ms diff --git a/world/map/npc/027-3/_nodes.txt b/world/map/npc/027-3/_nodes.txt new file mode 100644 index 00000000..ab655dd1 --- /dev/null +++ b/world/map/npc/027-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Crypt Basement nodes + +// (no nodes) diff --git a/world/map/npc/027-4/_import.txt b/world/map/npc/027-4/_import.txt index 033877af..7bcfbc68 100644 --- a/world/map/npc/027-4/_import.txt +++ b/world/map/npc/027-4/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 027-4 npc: npc/027-4/_mobs.txt +npc: npc/027-4/_nodes.txt npc: npc/027-4/_warps.txt npc: npc/027-4/casket_traps.txt npc: npc/027-4/general_razha_door.txt diff --git a/world/map/npc/027-4/_mobs.txt b/world/map/npc/027-4/_mobs.txt index cb65135e..dde5781e 100644 --- a/world/map/npc/027-4/_mobs.txt +++ b/world/map/npc/027-4/_mobs.txt @@ -1,24 +1,8 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Crypt Sub-Basement One mobs -027-4,39,84,38,22|monster|Skeleton|1043,2,60000ms,8000ms,Mob027-4::On1043 -027-4,27,57,15,22|monster|LadySkeleton|1044,2,60000ms,8000ms,Mob027-4::On1044 -027-4,108,77,39,14|monster|Skeleton|1043,2,60000ms,8000ms,Mob027-4::On1043 -027-4,61,37,38,30|monster|LadySkeleton|1044,2,60000ms,8000ms,Mob027-4::On1044 -027-4,101,36,38,30|monster|LadySkeleton|1044,2,60000ms,8000ms,Mob027-4::On1044 - - -027-4,0,0,0|script|Mob027-4|32767 -{ - end; - -On1043: - set @mobID, 1043; - callfunc "MobPoints"; - end; - -On1044: - set @mobID, 1044; - callfunc "MobPoints"; - end; -} +027-4,39,84,38,22|monster|Skeleton|1043,2,60000ms,8000ms +027-4,27,57,15,22|monster|LadySkeleton|1044,2,60000ms,8000ms +027-4,108,77,39,14|monster|Skeleton|1043,2,60000ms,8000ms +027-4,61,37,38,30|monster|LadySkeleton|1044,2,60000ms,8000ms +027-4,101,36,38,30|monster|LadySkeleton|1044,2,60000ms,8000ms diff --git a/world/map/npc/027-4/_nodes.txt b/world/map/npc/027-4/_nodes.txt new file mode 100644 index 00000000..ee3b5dcf --- /dev/null +++ b/world/map/npc/027-4/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Crypt Sub-Basement One nodes + +// (no nodes) diff --git a/world/map/npc/027-5/_import.txt b/world/map/npc/027-5/_import.txt index 183dbf49..a0d686c6 100644 --- a/world/map/npc/027-5/_import.txt +++ b/world/map/npc/027-5/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 027-5 npc: npc/027-5/_mobs.txt +npc: npc/027-5/_nodes.txt npc: npc/027-5/_warps.txt npc: npc/027-5/casket_traps.txt npc: npc/027-5/general_terogan_door.txt diff --git a/world/map/npc/027-5/_mobs.txt b/world/map/npc/027-5/_mobs.txt index e6958ba9..750163ad 100644 --- a/world/map/npc/027-5/_mobs.txt +++ b/world/map/npc/027-5/_mobs.txt @@ -1,41 +1,10 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Crypt Sub-Basement Two mobs -027-5,69,42,97,41|monster|Wight|1124,6,60000ms,8000ms,Mob027-5::On1124 -027-5,69,56,97,69|monster|VampireBat|1066,30,100000ms,30000ms,Mob027-5::On1066 -027-5,69,42,98,40|monster|Skeleton|1043,8,60000ms,8000ms,Mob027-5::On1043 -027-5,69,41,98,39|monster|LadySkeleton|1044,8,60000ms,8000ms,Mob027-5::On1044 -027-5,68,42,97,40|monster|RedBone|1074,6,60000ms,8000ms,Mob027-5::On1074 -027-5,70,80,98,34|monster|Skeleton|1043,8,60000ms,8000ms,Mob027-5::On1043 -027-5,69,80,99,36|monster|LadySkeleton|1044,8,60000ms,8000ms,Mob027-5::On1044 - - -027-5,0,0,0|script|Mob027-5|32767 -{ - end; - -On1043: - set @mobID, 1043; - callfunc "MobPoints"; - end; - -On1044: - set @mobID, 1044; - callfunc "MobPoints"; - end; - -On1066: - set @mobID, 1066; - callfunc "MobPoints"; - end; - -On1074: - set @mobID, 1074; - callfunc "MobPoints"; - end; - -On1124: - set @mobID, 1124; - callfunc "MobPoints"; - end; -} +027-5,69,42,97,41|monster|Wight|1124,6,60000ms,8000ms +027-5,69,56,97,69|monster|VampireBat|1066,30,100000ms,30000ms +027-5,69,42,98,40|monster|Skeleton|1043,8,60000ms,8000ms +027-5,69,41,98,39|monster|LadySkeleton|1044,8,60000ms,8000ms +027-5,68,42,97,40|monster|RedBone|1074,6,60000ms,8000ms +027-5,70,80,98,34|monster|Skeleton|1043,8,60000ms,8000ms +027-5,69,80,99,36|monster|LadySkeleton|1044,8,60000ms,8000ms diff --git a/world/map/npc/027-5/_nodes.txt b/world/map/npc/027-5/_nodes.txt new file mode 100644 index 00000000..4e14e522 --- /dev/null +++ b/world/map/npc/027-5/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Crypt Sub-Basement Two nodes + +// (no nodes) diff --git a/world/map/npc/027-6/_import.txt b/world/map/npc/027-6/_import.txt index 5c19c47b..48dbcf11 100644 --- a/world/map/npc/027-6/_import.txt +++ b/world/map/npc/027-6/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 027-6 npc: npc/027-6/_mobs.txt +npc: npc/027-6/_nodes.txt npc: npc/027-6/_warps.txt npc: npc/027-6/casket_traps.txt npc: npc/027-6/general_krukan.txt diff --git a/world/map/npc/027-6/_mobs.txt b/world/map/npc/027-6/_mobs.txt index 407a697e..a6d6a471 100644 --- a/world/map/npc/027-6/_mobs.txt +++ b/world/map/npc/027-6/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Crypt Sub-Basement Two mobs - - -027-6,0,0,0|script|Mob027-6|32767 -{ - end; -} diff --git a/world/map/npc/027-6/_nodes.txt b/world/map/npc/027-6/_nodes.txt new file mode 100644 index 00000000..4e14e522 --- /dev/null +++ b/world/map/npc/027-6/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Crypt Sub-Basement Two nodes + +// (no nodes) diff --git a/world/map/npc/027-7/_import.txt b/world/map/npc/027-7/_import.txt index 8990d426..e4baf4aa 100644 --- a/world/map/npc/027-7/_import.txt +++ b/world/map/npc/027-7/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 027-7 npc: npc/027-7/_mobs.txt +npc: npc/027-7/_nodes.txt npc: npc/027-7/_warps.txt npc: npc/027-7/general_razha.txt npc: npc/027-7/general_razha_exitdoor.txt diff --git a/world/map/npc/027-7/_mobs.txt b/world/map/npc/027-7/_mobs.txt index 43867927..a6d6a471 100644 --- a/world/map/npc/027-7/_mobs.txt +++ b/world/map/npc/027-7/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Crypt Sub-Basement Two mobs - - -027-7,0,0,0|script|Mob027-7|32767 -{ - end; -} diff --git a/world/map/npc/027-7/_nodes.txt b/world/map/npc/027-7/_nodes.txt new file mode 100644 index 00000000..4e14e522 --- /dev/null +++ b/world/map/npc/027-7/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Crypt Sub-Basement Two nodes + +// (no nodes) diff --git a/world/map/npc/027-8/_import.txt b/world/map/npc/027-8/_import.txt index b103d346..dc9e06da 100644 --- a/world/map/npc/027-8/_import.txt +++ b/world/map/npc/027-8/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 027-8 npc: npc/027-8/_mobs.txt +npc: npc/027-8/_nodes.txt npc: npc/027-8/_warps.txt npc: npc/027-8/general_terogan.txt npc: npc/027-8/general_terogan_exitdoor.txt diff --git a/world/map/npc/027-8/_mobs.txt b/world/map/npc/027-8/_mobs.txt index d38bf647..a6d6a471 100644 --- a/world/map/npc/027-8/_mobs.txt +++ b/world/map/npc/027-8/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Crypt Sub-Basement Two mobs - - -027-8,0,0,0|script|Mob027-8|32767 -{ - end; -} diff --git a/world/map/npc/027-8/_nodes.txt b/world/map/npc/027-8/_nodes.txt new file mode 100644 index 00000000..4e14e522 --- /dev/null +++ b/world/map/npc/027-8/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Crypt Sub-Basement Two nodes + +// (no nodes) diff --git a/world/map/npc/028-1/_import.txt b/world/map/npc/028-1/_import.txt index 7b323a88..b7221baf 100644 --- a/world/map/npc/028-1/_import.txt +++ b/world/map/npc/028-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 028-1 npc: npc/028-1/_mobs.txt +npc: npc/028-1/_nodes.txt npc: npc/028-1/_warps.txt npc: npc/028-1/mapflags.txt npc: npc/028-1/portal.txt diff --git a/world/map/npc/028-1/_mobs.txt b/world/map/npc/028-1/_mobs.txt index b0ae65fe..e5e3e7e5 100644 --- a/world/map/npc/028-1/_mobs.txt +++ b/world/map/npc/028-1/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // GM Island mobs - - -028-1,0,0,0|script|Mob028-1|32767 -{ - end; -} diff --git a/world/map/npc/028-1/_nodes.txt b/world/map/npc/028-1/_nodes.txt new file mode 100644 index 00000000..c4fb65dc --- /dev/null +++ b/world/map/npc/028-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// GM Island nodes + +// (no nodes) diff --git a/world/map/npc/028-3/_import.txt b/world/map/npc/028-3/_import.txt index 12684d4b..8f0036c0 100644 --- a/world/map/npc/028-3/_import.txt +++ b/world/map/npc/028-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 028-3 npc: npc/028-3/_mobs.txt +npc: npc/028-3/_nodes.txt npc: npc/028-3/_warps.txt npc: npc/028-3/mapflags.txt diff --git a/world/map/npc/028-3/_mobs.txt b/world/map/npc/028-3/_mobs.txt index 1290a483..c3c38c44 100644 --- a/world/map/npc/028-3/_mobs.txt +++ b/world/map/npc/028-3/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // GM Island Cave mobs - - -028-3,0,0,0|script|Mob028-3|32767 -{ - end; -} diff --git a/world/map/npc/028-3/_nodes.txt b/world/map/npc/028-3/_nodes.txt new file mode 100644 index 00000000..25112bd6 --- /dev/null +++ b/world/map/npc/028-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// GM Island Cave nodes + +// (no nodes) diff --git a/world/map/npc/029-1/_import.txt b/world/map/npc/029-1/_import.txt index c2a6d2ed..b9e64749 100644 --- a/world/map/npc/029-1/_import.txt +++ b/world/map/npc/029-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 029-1 npc: npc/029-1/_mobs.txt +npc: npc/029-1/_nodes.txt npc: npc/029-1/_warps.txt npc: npc/029-1/aahna.txt npc: npc/029-1/barrier.txt diff --git a/world/map/npc/029-1/_mobs.txt b/world/map/npc/029-1/_mobs.txt index bad7d55a..4fb1734b 100644 --- a/world/map/npc/029-1/_mobs.txt +++ b/world/map/npc/029-1/_mobs.txt @@ -1,40 +1,9 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Candor Island mobs -029-1,46,48,4,1|monster|CloverPatch|1037,1,10000ms,120000ms,Mob029-1::On1037 -029-1,73,93,14,13|monster|Maggot|1002,8,100000ms,30000ms,Mob029-1::On1002 -029-1,90,35,15,11|monster|TameScorpion|1046,16,100000ms,30000ms,Mob029-1::On1046 -029-1,93,100,21,18|monster|TameScorpion|1046,8,100000ms,30000ms,Mob029-1::On1046 -029-1,43,43,31,23|monster|Scorpion|1003,2,100000ms,30000ms,Mob029-1::On1003 -029-1,76,42,52,25|monster|ManaBug|1131,3,30ms,0ms,Mob029-1::On1131 - - -029-1,0,0,0|script|Mob029-1|32767 -{ - end; - -On1002: - set @mobID, 1002; - callfunc "MobPoints"; - end; - -On1003: - set @mobID, 1003; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1046: - set @mobID, 1046; - callfunc "MobPoints"; - end; - -On1131: - set @mobID, 1131; - callfunc "MobPoints"; - end; -} +029-1,46,48,4,1|monster|CloverPatch|1037,1,10000ms,120000ms +029-1,73,93,14,13|monster|Maggot|1002,8,100000ms,30000ms +029-1,90,35,15,11|monster|TameScorpion|1046,16,100000ms,30000ms +029-1,93,100,21,18|monster|TameScorpion|1046,8,100000ms,30000ms +029-1,43,43,31,23|monster|Scorpion|1003,2,100000ms,30000ms +029-1,76,42,52,25|monster|ManaBug|1131,3,30ms,0ms diff --git a/world/map/npc/029-1/_nodes.txt b/world/map/npc/029-1/_nodes.txt new file mode 100644 index 00000000..cde06d82 --- /dev/null +++ b/world/map/npc/029-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Candor Island nodes + +// (no nodes) diff --git a/world/map/npc/029-2/_import.txt b/world/map/npc/029-2/_import.txt index 6d67f2f7..b87b6dc1 100644 --- a/world/map/npc/029-2/_import.txt +++ b/world/map/npc/029-2/_import.txt @@ -2,7 +2,9 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 029-2 npc: npc/029-2/_mobs.txt +npc: npc/029-2/_nodes.txt npc: npc/029-2/_warps.txt +npc: npc/029-2/alchemy.txt npc: npc/029-2/bankroom.txt npc: npc/029-2/barrels.txt npc: npc/029-2/barrels_config.txt @@ -14,4 +16,3 @@ npc: npc/029-2/sorfina.txt npc: npc/029-2/stat_reset.txt npc: npc/029-2/tanisha.txt npc: npc/029-2/two_arms.txt -npc: npc/029-2/alchemy.txt diff --git a/world/map/npc/029-2/_mobs.txt b/world/map/npc/029-2/_mobs.txt index 02d3fbd9..a63fae65 100644 --- a/world/map/npc/029-2/_mobs.txt +++ b/world/map/npc/029-2/_mobs.txt @@ -1,15 +1,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Candor Island Indoor mobs -029-2,33,57,24,7|monster|HouseMaggot|1050,7,100000ms,30000ms,Mob029-2::On1050 - - -029-2,0,0,0|script|Mob029-2|32767 -{ - end; - -On1050: - set @mobID, 1050; - callfunc "MobPoints"; - end; -} +029-2,33,57,24,7|monster|HouseMaggot|1050,7,100000ms,30000ms diff --git a/world/map/npc/029-2/_nodes.txt b/world/map/npc/029-2/_nodes.txt new file mode 100644 index 00000000..9e38e0e1 --- /dev/null +++ b/world/map/npc/029-2/_nodes.txt @@ -0,0 +1,16 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Candor Island Indoor nodes + +029-2,0,0,0|script|Node029-2|32767 +{ + end; +OnInit: + setarray .m$, "_N-Alchemy", "029-2"; + setarray .x1, "_N-Alchemy", 113; + setarray .y1, "_N-Alchemy", 57; + setarray .x2, "_N-Alchemy", 0; + setarray .y2, "_N-Alchemy", 0; + setarray .id, "_N-Alchemy", 0; + donpcevent "_N-Alchemy::OnMaybeStart"; + destroy; +} diff --git a/world/map/npc/029-2/alchemy.txt b/world/map/npc/029-2/alchemy.txt index d0d2909a..3d49d5ae 100644 --- a/world/map/npc/029-2/alchemy.txt +++ b/world/map/npc/029-2/alchemy.txt @@ -1,11 +1,16 @@ -029-2,113,57,0|script|#alchemylab|400 +-|script|_N-Alchemy|32767 { + set @npc_distance, 1; + callfunc "PCtoNPCRange"; + if (@npc_check) end; + title "Alchemy Lab"; mes "This is an alchemy lab."; mes "With it, you can combine reagents together to create powerful potions."; next; clear; mes "##BDrag & drop 2 items from your inventory. All items used will be lost.##b"; + cleararray @alchlab_items$[0], "", 2; // since we're not using a scoped (.@) array, we need to clean it requestitem @alchlab_items$[0], 2; // TODO: add a craft builtin (npc action 12) clear; if (@alchlab_items$[0] == "" || @alchlab_items$[1] == "") @@ -35,13 +40,13 @@ L_Proceed: L_CheckRecipes: set .@n, .@n+3; - if (.@n == get(.rsize, "#alchemylab")) + if (.@n == get(.rsize, "_N-Alchemy")) goto L_Failed; - if (!(get(.recipes$[.@n], "#alchemylab") == @alchlab_items$[0] && get(.recipes$[.@n+1], "#alchemylab") == @alchlab_items$[1]) && - !(get(.recipes$[.@n], "#alchemylab") == @alchlab_items$[1] && get(.recipes$[.@n+1], "#alchemylab") == @alchlab_items$[0])) + if (!(get(.recipes$[.@n], "_N-Alchemy") == @alchlab_items$[0] && get(.recipes$[.@n+1], "_N-Alchemy") == @alchlab_items$[1]) && + !(get(.recipes$[.@n], "_N-Alchemy") == @alchlab_items$[1] && get(.recipes$[.@n+1], "_N-Alchemy") == @alchlab_items$[0])) goto L_CheckRecipes; - getitem get(.recipes$[.@n+2], "#alchemylab"), 1; // XXX: here we could also make it fail sometimes depending on your expertise + getitem get(.recipes$[.@n+2], "_N-Alchemy"), 1; // XXX: here we could also make it fail sometimes depending on your expertise // XXX: here we could make it give profession/crafting exp clear; @@ -50,7 +55,7 @@ L_CheckRecipes: mes " ["+ getitemlink(@alchlab_items$[1]) +"]"; mes; mes "You obtained:"; - mes " ["+ getitemlink(get(.recipes$[.@n+2], "#alchemylab")) +"]"; + mes " ["+ getitemlink(get(.recipes$[.@n+2], "_N-Alchemy")) +"]"; close; L_NoItems: @@ -64,15 +69,30 @@ L_Failed: L_Abort: close; -OnInit: - void // the first alchemy lab doesn't need a puppet, it's already on a map - puppet("027-2", 51, 100, strnpcinfo(0)+0, 400), // TODO: make a npc like npc 400 but with hoverCursor="action" => looks better for things like crafting - puppet("001-2", 92, 76, strnpcinfo(0)+1, 400), - puppet("001-2", 98, 76, strnpcinfo(0)+2, 400), - puppet("001-2", 92, 89, strnpcinfo(0)+3, 400), - puppet("001-2", 98, 89, strnpcinfo(0)+4, 400); +S_Spawn: + set .@s, getarraysize(.x1); + if (.spawned == 0) + set .spawned, 1; // FIXME: in tmwa (getarraysize2, setarray) allow to set array index 0 when setting in another npc + if (.spawned >= .@s) + goto S_Return; + set .@n$, "#_Al-lab"+chr(3)+.spawned; + void puppet(.m$[.spawned], .x1[.spawned], .y1[.spawned], .@n$, 400); // TODO: make a npc like npc 400 but with hoverCursor="action" => looks better for things like crafting + set .spawned, .spawned + 1; + if (.spawned < .@s) + goto S_Spawn; + return; + +S_Return: + return; + +OnMaybeStart: + callsub S_Spawn; + if (.started == 0) + goto L_InitVars; + end; - setarray .recipes$[0], +L_InitVars: + setarray .recipes$[0], 0, "DilutedConcentrationPot", "DarkConcentrationPotion", "ConcentrationPotion", "CactusDrink", "CactusDrink", "CactusPotion", "PinkPetal", "BottleOfWater", "ConcentrationPotion"; diff --git a/world/map/npc/029-3/_import.txt b/world/map/npc/029-3/_import.txt index f879a861..2fe4f885 100644 --- a/world/map/npc/029-3/_import.txt +++ b/world/map/npc/029-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 029-3 npc: npc/029-3/_mobs.txt +npc: npc/029-3/_nodes.txt npc: npc/029-3/_warps.txt npc: npc/029-3/barrier.txt npc: npc/029-3/mapflags.txt diff --git a/world/map/npc/029-3/_mobs.txt b/world/map/npc/029-3/_mobs.txt index 9a83bf7f..83f4ee2f 100644 --- a/world/map/npc/029-3/_mobs.txt +++ b/world/map/npc/029-3/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Candor Cave mobs - - -029-3,0,0,0|script|Mob029-3|32767 -{ - end; -} diff --git a/world/map/npc/029-3/_nodes.txt b/world/map/npc/029-3/_nodes.txt new file mode 100644 index 00000000..127723aa --- /dev/null +++ b/world/map/npc/029-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Candor Cave nodes + +// (no nodes) diff --git a/world/map/npc/030-2/_import.txt b/world/map/npc/030-2/_import.txt index 2588ec56..938c74e8 100644 --- a/world/map/npc/030-2/_import.txt +++ b/world/map/npc/030-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 030-2 npc: npc/030-2/_mobs.txt +npc: npc/030-2/_nodes.txt npc: npc/030-2/_warps.txt npc: npc/030-2/avalia.txt npc: npc/030-2/basic_npcs.txt diff --git a/world/map/npc/030-2/_mobs.txt b/world/map/npc/030-2/_mobs.txt index 664e8111..7664126e 100644 --- a/world/map/npc/030-2/_mobs.txt +++ b/world/map/npc/030-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Christmas Inn mobs - - -030-2,0,0,0|script|Mob030-2|32767 -{ - end; -} diff --git a/world/map/npc/030-2/_nodes.txt b/world/map/npc/030-2/_nodes.txt new file mode 100644 index 00000000..8fea3767 --- /dev/null +++ b/world/map/npc/030-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Christmas Inn nodes + +// (no nodes) diff --git a/world/map/npc/030-3/_import.txt b/world/map/npc/030-3/_import.txt index bbce8cb4..252027e4 100644 --- a/world/map/npc/030-3/_import.txt +++ b/world/map/npc/030-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 030-3 npc: npc/030-3/_mobs.txt +npc: npc/030-3/_nodes.txt npc: npc/030-3/_warps.txt npc: npc/030-3/mapflags.txt npc: npc/030-3/orum_homunculus.txt diff --git a/world/map/npc/030-3/_mobs.txt b/world/map/npc/030-3/_mobs.txt index 9d4b3b43..d1a3f5e8 100644 --- a/world/map/npc/030-3/_mobs.txt +++ b/world/map/npc/030-3/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // The Frozen Lake mobs - - -030-3,0,0,0|script|Mob030-3|32767 -{ - end; -} diff --git a/world/map/npc/030-3/_nodes.txt b/world/map/npc/030-3/_nodes.txt new file mode 100644 index 00000000..e78786b3 --- /dev/null +++ b/world/map/npc/030-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// The Frozen Lake nodes + +// (no nodes) diff --git a/world/map/npc/030-4/_import.txt b/world/map/npc/030-4/_import.txt index b4b8153a..26492173 100644 --- a/world/map/npc/030-4/_import.txt +++ b/world/map/npc/030-4/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 030-4 npc: npc/030-4/_mobs.txt +npc: npc/030-4/_nodes.txt npc: npc/030-4/_warps.txt npc: npc/030-4/mana_battery.txt npc: npc/030-4/mapflags.txt diff --git a/world/map/npc/030-4/_mobs.txt b/world/map/npc/030-4/_mobs.txt index 97ff93a8..e53861b5 100644 --- a/world/map/npc/030-4/_mobs.txt +++ b/world/map/npc/030-4/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Christmas Inn Warehouse mobs - - -030-4,0,0,0|script|Mob030-4|32767 -{ - end; -} diff --git a/world/map/npc/030-4/_nodes.txt b/world/map/npc/030-4/_nodes.txt new file mode 100644 index 00000000..14284ca5 --- /dev/null +++ b/world/map/npc/030-4/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Christmas Inn Warehouse nodes + +// (no nodes) diff --git a/world/map/npc/031-1/_import.txt b/world/map/npc/031-1/_import.txt index 827a60e8..fe66c2d2 100644 --- a/world/map/npc/031-1/_import.txt +++ b/world/map/npc/031-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 031-1 npc: npc/031-1/_mobs.txt +npc: npc/031-1/_nodes.txt npc: npc/031-1/_warps.txt npc: npc/031-1/angelaOutside.txt npc: npc/031-1/dock.txt diff --git a/world/map/npc/031-1/_mobs.txt b/world/map/npc/031-1/_mobs.txt index d5a747fb..c8d85539 100644 --- a/world/map/npc/031-1/_mobs.txt +++ b/world/map/npc/031-1/_mobs.txt @@ -1,33 +1,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Nivalis Port mobs -031-1,0,0,0,0|monster|Fluffy|1020,10,100000ms,30000ms,Mob031-1::On1020 -031-1,0,0,0,0|monster|Pollett|1113,14,100000ms,30000ms,Mob031-1::On1113 -031-1,76,26,10,5|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-1::On1093 -031-1,0,0,0,0|monster|WhiteBell|1095,4,100000ms,30000ms,Mob031-1::On1095 - - -031-1,0,0,0|script|Mob031-1|32767 -{ - end; - -On1020: - set @mobID, 1020; - callfunc "MobPoints"; - end; - -On1093: - set @mobID, 1093; - callfunc "MobPoints"; - end; - -On1095: - set @mobID, 1095; - callfunc "MobPoints"; - end; - -On1113: - set @mobID, 1113; - callfunc "MobPoints"; - end; -} +031-1,0,0,0,0|monster|Fluffy|1020,10,100000ms,30000ms +031-1,0,0,0,0|monster|Pollett|1113,14,100000ms,30000ms +031-1,76,26,10,5|monster|WhiteSlime|1093,7,100000ms,30000ms +031-1,0,0,0,0|monster|WhiteBell|1095,4,100000ms,30000ms diff --git a/world/map/npc/031-1/_nodes.txt b/world/map/npc/031-1/_nodes.txt new file mode 100644 index 00000000..c369eff4 --- /dev/null +++ b/world/map/npc/031-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Nivalis Port nodes + +// (no nodes) diff --git a/world/map/npc/031-2/_import.txt b/world/map/npc/031-2/_import.txt index 2e3f4e77..cfb6eb4a 100644 --- a/world/map/npc/031-2/_import.txt +++ b/world/map/npc/031-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 031-2 npc: npc/031-2/_mobs.txt +npc: npc/031-2/_nodes.txt npc: npc/031-2/_warps.txt npc: npc/031-2/angelaHouse.txt npc: npc/031-2/cindyHouse.txt diff --git a/world/map/npc/031-2/_mobs.txt b/world/map/npc/031-2/_mobs.txt index ab4d5c66..b21a6a20 100644 --- a/world/map/npc/031-2/_mobs.txt +++ b/world/map/npc/031-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Angela's House mobs - - -031-2,0,0,0|script|Mob031-2|32767 -{ - end; -} diff --git a/world/map/npc/031-2/_nodes.txt b/world/map/npc/031-2/_nodes.txt new file mode 100644 index 00000000..f62ab315 --- /dev/null +++ b/world/map/npc/031-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Angela's House nodes + +// (no nodes) diff --git a/world/map/npc/031-3/_import.txt b/world/map/npc/031-3/_import.txt index 0094b579..bd4af770 100644 --- a/world/map/npc/031-3/_import.txt +++ b/world/map/npc/031-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 031-3 npc: npc/031-3/_mobs.txt +npc: npc/031-3/_nodes.txt npc: npc/031-3/_warps.txt npc: npc/031-3/labyrinth.txt npc: npc/031-3/mapflags.txt diff --git a/world/map/npc/031-3/_mobs.txt b/world/map/npc/031-3/_mobs.txt index ccfb1199..2004a2f2 100644 --- a/world/map/npc/031-3/_mobs.txt +++ b/world/map/npc/031-3/_mobs.txt @@ -1,138 +1,92 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Ice Labyrinth mobs -031-3,230,279,25,26|monster|IceGoblin|1058,5,100000ms,30000ms,Mob031-3::On1058 -031-3,195,277,25,26|monster|IceGoblin|1058,3,100000ms,30000ms,Mob031-3::On1058 -031-3,213,282,66,43|monster|Bat|1017,5,100000ms,30000ms,Mob031-3::On1017 -031-3,37,213,27,23|monster|Yeti|1072,2,100000ms,30000ms,Mob031-3::On1072 -031-3,35,212,27,23|monster|Bat|1017,11,100000ms,30000ms,Mob031-3::On1017 -031-3,38,147,44,68|monster|Moggun|1061,19,100000ms,30000ms,Mob031-3::On1061 -031-3,97,261,42,22|monster|Moggun|1061,5,100000ms,30000ms,Mob031-3::On1061 -031-3,97,291,42,22|monster|Moggun|1061,5,100000ms,30000ms,Mob031-3::On1061 -031-3,36,148,64,43|monster|Bat|1017,11,100000ms,30000ms,Mob031-3::On1017 -031-3,97,277,22,42|monster|Bat|1017,11,100000ms,30000ms,Mob031-3::On1017 -031-3,148,282,22,42|monster|Bat|1017,11,100000ms,30000ms,Mob031-3::On1017 -031-3,145,293,25,26|monster|IceGoblin|1058,6,100000ms,30000ms,Mob031-3::On1058 -031-3,98,214,39,44|monster|IceElement|1071,2,100000ms,30000ms,Mob031-3::On1071 -031-3,99,214,25,26|monster|IceGoblin|1058,3,100000ms,30000ms,Mob031-3::On1058 -031-3,198,144,29,53|monster|IceGoblin|1058,4,100000ms,30000ms,Mob031-3::On1058 -031-3,97,291,42,22|monster|Moggun|1061,5,100000ms,30000ms,Mob031-3::On1061 -031-3,278,282,33,14|monster|IceGoblin|1058,5,100000ms,30000ms,Mob031-3::On1058 -031-3,98,214,39,44|monster|IceElement|1071,2,100000ms,30000ms,Mob031-3::On1071 -031-3,285,218,8,75|monster|IceElement|1071,2,100000ms,30000ms,Mob031-3::On1071 -031-3,283,217,41,64|monster|Bat|1017,15,100000ms,30000ms,Mob031-3::On1017 -031-3,282,237,63,20|monster|Moggun|1061,3,100000ms,30000ms,Mob031-3::On1061 -031-3,282,196,62,16|monster|Moggun|1061,3,100000ms,30000ms,Mob031-3::On1061 -031-3,229,226,27,34|monster|Yeti|1072,3,100000ms,30000ms,Mob031-3::On1072 -031-3,230,227,12,42|monster|IceGoblin|1058,5,100000ms,30000ms,Mob031-3::On1058 -031-3,209,199,12,17|monster|Yeti|1072,2,100000ms,30000ms,Mob031-3::On1072 -031-3,193,216,12,17|monster|Yeti|1072,1,100000ms,30000ms,Mob031-3::On1072 -031-3,213,282,66,43|monster|Bat|1017,5,100000ms,30000ms,Mob031-3::On1017 -031-3,213,282,66,43|monster|Pollett|1113,5,100000ms,30000ms,Mob031-3::On1113 -031-3,199,200,45,14|monster|Bat|1017,13,100000ms,30000ms,Mob031-3::On1017 -031-3,209,199,12,17|monster|Yeti|1072,2,100000ms,30000ms,Mob031-3::On1072 -031-3,234,141,18,19|monster|Yeti|1072,2,100000ms,30000ms,Mob031-3::On1072 -031-3,282,196,62,16|monster|Moggun|1061,3,100000ms,30000ms,Mob031-3::On1061 -031-3,212,159,62,16|monster|Moggun|1061,7,100000ms,30000ms,Mob031-3::On1061 -031-3,212,159,62,16|monster|Moggun|1061,7,100000ms,30000ms,Mob031-3::On1061 -031-3,212,130,62,16|monster|Moggun|1061,7,100000ms,30000ms,Mob031-3::On1061 -031-3,284,143,40,48|monster|Moggun|1061,7,100000ms,30000ms,Mob031-3::On1061 -031-3,283,84,36,31|monster|Bat|1017,15,100000ms,30000ms,Mob031-3::On1017 -031-3,283,84,36,31|monster|Bat|1017,15,100000ms,30000ms,Mob031-3::On1017 -031-3,274,81,15,32|monster|Yeti|1072,2,100000ms,30000ms,Mob031-3::On1072 -031-3,40,53,44,68|monster|Moggun|1061,10,100000ms,30000ms,Mob031-3::On1061 -031-3,120,160,85,30|monster|Yeti|1072,4,100000ms,30000ms,Mob031-3::On1072 -031-3,121,131,82,24|monster|Yeti|1072,8,100000ms,30000ms,Mob031-3::On1072 -031-3,107,130,25,26|monster|IceGoblin|1058,6,100000ms,30000ms,Mob031-3::On1058 -031-3,145,160,25,24|monster|IceGoblin|1058,6,100000ms,30000ms,Mob031-3::On1058 -031-3,94,167,25,24|monster|IceGoblin|1058,6,100000ms,30000ms,Mob031-3::On1058 -031-3,282,37,31,28|monster|IceElement|1071,5,100000ms,30000ms,Mob031-3::On1071 -031-3,213,36,64,32|monster|IceElement|1071,5,100000ms,30000ms,Mob031-3::On1071 -031-3,228,83,31,28|monster|IceElement|1071,3,100000ms,30000ms,Mob031-3::On1071 -031-3,283,138,15,13|monster|IceElement|1071,1,100000ms,30000ms,Mob031-3::On1071 -031-3,198,83,31,28|monster|IceElement|1071,3,100000ms,30000ms,Mob031-3::On1071 -031-3,214,75,25,26|monster|IceGoblin|1058,3,100000ms,30000ms,Mob031-3::On1058 -031-3,217,37,66,43|monster|Bat|1017,10,100000ms,30000ms,Mob031-3::On1017 -031-3,39,52,64,56|monster|Bat|1017,5,100000ms,30000ms,Mob031-3::On1017 -031-3,39,274,64,56|monster|Bat|1017,10,100000ms,30000ms,Mob031-3::On1017 -031-3,119,51,39,64|monster|Bat|1017,10,100000ms,30000ms,Mob031-3::On1017 -031-3,119,50,57,51|monster|IceElement|1071,5,100000ms,30000ms,Mob031-3::On1071 -031-3,120,79,20,17|monster|Yeti|1072,2,100000ms,30000ms,Mob031-3::On1072 -031-3,37,284,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,28,255,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091 -031-3,212,277,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,289,295,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,292,288,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091 -031-3,296,233,7,6|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,271,222,7,6|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,281,215,55,21|monster|BlueSlime|1091,5,100000ms,30000ms,Mob031-3::On1091 -031-3,126,35,6,5|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,143,124,34,22|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091 -031-3,48,65,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,37,113,5,13|monster|BlueSlime|1091,1,100000ms,30000ms,Mob031-3::On1091 -031-3,136,227,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,152,218,13,17|monster|BlueSlime|1091,4,100000ms,30000ms,Mob031-3::On1091 -031-3,135,206,9,6|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,154,202,7,7|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,136,216,6,4|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091 -031-3,112,276,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,143,294,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,149,268,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,136,264,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,157,283,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,139,264,25,19|monster|BlueSlime|1091,4,100000ms,30000ms,Mob031-3::On1091 -031-3,24,265,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,52,280,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,37,254,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,24,290,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,48,298,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,53,260,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob031-3::On1093 -031-3,23,275,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091 -031-3,37,272,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091 -031-3,52,285,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob031-3::On1091 - - -031-3,0,0,0|script|Mob031-3|32767 -{ - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1058: - set @mobID, 1058; - callfunc "MobPoints"; - end; - -On1061: - set @mobID, 1061; - callfunc "MobPoints"; - end; - -On1071: - set @mobID, 1071; - callfunc "MobPoints"; - end; - -On1072: - set @mobID, 1072; - callfunc "MobPoints"; - end; - -On1091: - set @mobID, 1091; - callfunc "MobPoints"; - end; - -On1093: - set @mobID, 1093; - callfunc "MobPoints"; - end; - -On1113: - set @mobID, 1113; - callfunc "MobPoints"; - end; -} +031-3,230,279,25,26|monster|IceGoblin|1058,5,100000ms,30000ms +031-3,195,277,25,26|monster|IceGoblin|1058,3,100000ms,30000ms +031-3,213,282,66,43|monster|Bat|1017,5,100000ms,30000ms +031-3,37,213,27,23|monster|Yeti|1072,2,100000ms,30000ms +031-3,35,212,27,23|monster|Bat|1017,11,100000ms,30000ms +031-3,38,147,44,68|monster|Moggun|1061,19,100000ms,30000ms +031-3,97,261,42,22|monster|Moggun|1061,5,100000ms,30000ms +031-3,97,291,42,22|monster|Moggun|1061,5,100000ms,30000ms +031-3,36,148,64,43|monster|Bat|1017,11,100000ms,30000ms +031-3,97,277,22,42|monster|Bat|1017,11,100000ms,30000ms +031-3,148,282,22,42|monster|Bat|1017,11,100000ms,30000ms +031-3,145,293,25,26|monster|IceGoblin|1058,6,100000ms,30000ms +031-3,98,214,39,44|monster|IceElement|1071,2,100000ms,30000ms +031-3,99,214,25,26|monster|IceGoblin|1058,3,100000ms,30000ms +031-3,198,144,29,53|monster|IceGoblin|1058,4,100000ms,30000ms +031-3,97,291,42,22|monster|Moggun|1061,5,100000ms,30000ms +031-3,278,282,33,14|monster|IceGoblin|1058,5,100000ms,30000ms +031-3,98,214,39,44|monster|IceElement|1071,2,100000ms,30000ms +031-3,285,218,8,75|monster|IceElement|1071,2,100000ms,30000ms +031-3,283,217,41,64|monster|Bat|1017,15,100000ms,30000ms +031-3,282,237,63,20|monster|Moggun|1061,3,100000ms,30000ms +031-3,282,196,62,16|monster|Moggun|1061,3,100000ms,30000ms +031-3,229,226,27,34|monster|Yeti|1072,3,100000ms,30000ms +031-3,230,227,12,42|monster|IceGoblin|1058,5,100000ms,30000ms +031-3,209,199,12,17|monster|Yeti|1072,2,100000ms,30000ms +031-3,193,216,12,17|monster|Yeti|1072,1,100000ms,30000ms +031-3,213,282,66,43|monster|Bat|1017,5,100000ms,30000ms +031-3,213,282,66,43|monster|Pollett|1113,5,100000ms,30000ms +031-3,199,200,45,14|monster|Bat|1017,13,100000ms,30000ms +031-3,209,199,12,17|monster|Yeti|1072,2,100000ms,30000ms +031-3,234,141,18,19|monster|Yeti|1072,2,100000ms,30000ms +031-3,282,196,62,16|monster|Moggun|1061,3,100000ms,30000ms +031-3,212,159,62,16|monster|Moggun|1061,7,100000ms,30000ms +031-3,212,159,62,16|monster|Moggun|1061,7,100000ms,30000ms +031-3,212,130,62,16|monster|Moggun|1061,7,100000ms,30000ms +031-3,284,143,40,48|monster|Moggun|1061,7,100000ms,30000ms +031-3,283,84,36,31|monster|Bat|1017,15,100000ms,30000ms +031-3,283,84,36,31|monster|Bat|1017,15,100000ms,30000ms +031-3,274,81,15,32|monster|Yeti|1072,2,100000ms,30000ms +031-3,40,53,44,68|monster|Moggun|1061,10,100000ms,30000ms +031-3,120,160,85,30|monster|Yeti|1072,4,100000ms,30000ms +031-3,121,131,82,24|monster|Yeti|1072,8,100000ms,30000ms +031-3,107,130,25,26|monster|IceGoblin|1058,6,100000ms,30000ms +031-3,145,160,25,24|monster|IceGoblin|1058,6,100000ms,30000ms +031-3,94,167,25,24|monster|IceGoblin|1058,6,100000ms,30000ms +031-3,282,37,31,28|monster|IceElement|1071,5,100000ms,30000ms +031-3,213,36,64,32|monster|IceElement|1071,5,100000ms,30000ms +031-3,228,83,31,28|monster|IceElement|1071,3,100000ms,30000ms +031-3,283,138,15,13|monster|IceElement|1071,1,100000ms,30000ms +031-3,198,83,31,28|monster|IceElement|1071,3,100000ms,30000ms +031-3,214,75,25,26|monster|IceGoblin|1058,3,100000ms,30000ms +031-3,217,37,66,43|monster|Bat|1017,10,100000ms,30000ms +031-3,39,52,64,56|monster|Bat|1017,5,100000ms,30000ms +031-3,39,274,64,56|monster|Bat|1017,10,100000ms,30000ms +031-3,119,51,39,64|monster|Bat|1017,10,100000ms,30000ms +031-3,119,50,57,51|monster|IceElement|1071,5,100000ms,30000ms +031-3,120,79,20,17|monster|Yeti|1072,2,100000ms,30000ms +031-3,37,284,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,28,255,14,9|monster|BlueSlime|1091,2,100000ms,30000ms +031-3,212,277,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,289,295,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,292,288,14,9|monster|BlueSlime|1091,2,100000ms,30000ms +031-3,296,233,7,6|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,271,222,7,6|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,281,215,55,21|monster|BlueSlime|1091,5,100000ms,30000ms +031-3,126,35,6,5|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,143,124,34,22|monster|BlueSlime|1091,2,100000ms,30000ms +031-3,48,65,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,37,113,5,13|monster|BlueSlime|1091,1,100000ms,30000ms +031-3,136,227,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,152,218,13,17|monster|BlueSlime|1091,4,100000ms,30000ms +031-3,135,206,9,6|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,154,202,7,7|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,136,216,6,4|monster|BlueSlime|1091,2,100000ms,30000ms +031-3,112,276,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,143,294,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,149,268,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,136,264,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,157,283,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,139,264,25,19|monster|BlueSlime|1091,4,100000ms,30000ms +031-3,24,265,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,52,280,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,37,254,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,24,290,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,48,298,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,53,260,6,4|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,23,275,14,9|monster|BlueSlime|1091,2,100000ms,30000ms +031-3,37,272,14,9|monster|BlueSlime|1091,2,100000ms,30000ms +031-3,52,285,14,9|monster|BlueSlime|1091,2,100000ms,30000ms diff --git a/world/map/npc/031-3/_nodes.txt b/world/map/npc/031-3/_nodes.txt new file mode 100644 index 00000000..38ed7558 --- /dev/null +++ b/world/map/npc/031-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Ice Labyrinth nodes + +// (no nodes) diff --git a/world/map/npc/031-4/_import.txt b/world/map/npc/031-4/_import.txt index 02089d01..250e5b20 100644 --- a/world/map/npc/031-4/_import.txt +++ b/world/map/npc/031-4/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 031-4 npc: npc/031-4/_mobs.txt +npc: npc/031-4/_nodes.txt npc: npc/031-4/_warps.txt npc: npc/031-4/barrier.txt npc: npc/031-4/cindyCave.txt diff --git a/world/map/npc/031-4/_mobs.txt b/world/map/npc/031-4/_mobs.txt index cc2f2d21..891a5cd7 100644 --- a/world/map/npc/031-4/_mobs.txt +++ b/world/map/npc/031-4/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Cindy Cave mobs - - -031-4,0,0,0|script|Mob031-4|32767 -{ - end; -} diff --git a/world/map/npc/031-4/_nodes.txt b/world/map/npc/031-4/_nodes.txt new file mode 100644 index 00000000..11486912 --- /dev/null +++ b/world/map/npc/031-4/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Cindy Cave nodes + +// (no nodes) diff --git a/world/map/npc/032-3/_import.txt b/world/map/npc/032-3/_import.txt index 66d368cd..09f9448c 100644 --- a/world/map/npc/032-3/_import.txt +++ b/world/map/npc/032-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 032-3 npc: npc/032-3/_mobs.txt +npc: npc/032-3/_nodes.txt npc: npc/032-3/_warps.txt npc: npc/032-3/mapflags.txt diff --git a/world/map/npc/032-3/_mobs.txt b/world/map/npc/032-3/_mobs.txt index 2e336d50..b84e45f3 100644 --- a/world/map/npc/032-3/_mobs.txt +++ b/world/map/npc/032-3/_mobs.txt @@ -1,64 +1,13 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Outback Cave mobs -032-3,90,44,9,10|monster|Skeleton|1043,3,30000ms,100000ms,Mob032-3::On1043 -032-3,44,23,29,22|monster|MountainSnake|1026,7,30000ms,100000ms,Mob032-3::On1026 -032-3,125,46,35,75|monster|Snake|1010,13,30000ms,100000ms,Mob032-3::On1010 -032-3,80,44,9,10|monster|BlackScorpion|1009,5,30000ms,100000ms,Mob032-3::On1009 -032-3,85,33,9,10|monster|Spider|1012,5,30000ms,100000ms,Mob032-3::On1012 -032-3,83,18,37,9|monster|Archant|1060,8,30000ms,100000ms,Mob032-3::On1060 -032-3,78,76,24,21|monster|Archant|1060,8,30000ms,100000ms,Mob032-3::On1060 -032-3,25,76,24,21|monster|YellowSlime|1007,11,300000ms,1000000ms,Mob032-3::On1007 -032-3,46,51,34,18|monster|CaveMaggot|1056,11,30000ms,100000ms,Mob032-3::On1056 -032-3,0,0,0,0|monster|Bat|1017,25,30000ms,100000ms,Mob032-3::On1017 - - -032-3,0,0,0|script|Mob032-3|32767 -{ - end; - -On1007: - set @mobID, 1007; - callfunc "MobPoints"; - end; - -On1009: - set @mobID, 1009; - callfunc "MobPoints"; - end; - -On1010: - set @mobID, 1010; - callfunc "MobPoints"; - end; - -On1012: - set @mobID, 1012; - callfunc "MobPoints"; - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; - -On1026: - set @mobID, 1026; - callfunc "MobPoints"; - end; - -On1043: - set @mobID, 1043; - callfunc "MobPoints"; - end; - -On1056: - set @mobID, 1056; - callfunc "MobPoints"; - end; - -On1060: - set @mobID, 1060; - callfunc "MobPoints"; - end; -} +032-3,90,44,9,10|monster|Skeleton|1043,3,30000ms,100000ms +032-3,44,23,29,22|monster|MountainSnake|1026,7,30000ms,100000ms +032-3,125,46,35,75|monster|Snake|1010,13,30000ms,100000ms +032-3,80,44,9,10|monster|BlackScorpion|1009,5,30000ms,100000ms +032-3,85,33,9,10|monster|Spider|1012,5,30000ms,100000ms +032-3,83,18,37,9|monster|Archant|1060,8,30000ms,100000ms +032-3,78,76,24,21|monster|Archant|1060,8,30000ms,100000ms +032-3,25,76,24,21|monster|YellowSlime|1007,11,300000ms,1000000ms +032-3,46,51,34,18|monster|CaveMaggot|1056,11,30000ms,100000ms +032-3,0,0,0,0|monster|Bat|1017,25,30000ms,100000ms diff --git a/world/map/npc/032-3/_nodes.txt b/world/map/npc/032-3/_nodes.txt new file mode 100644 index 00000000..87034821 --- /dev/null +++ b/world/map/npc/032-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Outback Cave nodes + +// (no nodes) diff --git a/world/map/npc/033-1/_import.txt b/world/map/npc/033-1/_import.txt index 6205545e..60a3096a 100644 --- a/world/map/npc/033-1/_import.txt +++ b/world/map/npc/033-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 033-1 npc: npc/033-1/_mobs.txt +npc: npc/033-1/_nodes.txt npc: npc/033-1/_warps.txt npc: npc/033-1/backDoor.txt npc: npc/033-1/barbarianinit.txt diff --git a/world/map/npc/033-1/_mobs.txt b/world/map/npc/033-1/_mobs.txt index afbd35ed..2eb36796 100644 --- a/world/map/npc/033-1/_mobs.txt +++ b/world/map/npc/033-1/_mobs.txt @@ -1,33 +1,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // snow Path mobs -033-1,73,49,10,18|monster|Wolvern|1090,2,100000ms,30000ms,Mob033-1::On1090 -033-1,33,38,15,49|monster|Reinboo|1094,3,100000ms,30000ms,Mob033-1::On1094 -033-1,56,87,50,42|monster|Squirrel|1038,15,100000ms,30000ms,Mob033-1::On1038 -033-1,0,0,0,0|monster|WhiteBell|1095,3,100000ms,30000ms,Mob033-1::On1095 - - -033-1,0,0,0|script|Mob033-1|32767 -{ - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1090: - set @mobID, 1090; - callfunc "MobPoints"; - end; - -On1094: - set @mobID, 1094; - callfunc "MobPoints"; - end; - -On1095: - set @mobID, 1095; - callfunc "MobPoints"; - end; -} +033-1,73,49,10,18|monster|Wolvern|1090,2,100000ms,30000ms +033-1,33,38,15,49|monster|Reinboo|1094,3,100000ms,30000ms +033-1,56,87,50,42|monster|Squirrel|1038,15,100000ms,30000ms +033-1,0,0,0,0|monster|WhiteBell|1095,3,100000ms,30000ms diff --git a/world/map/npc/033-1/_nodes.txt b/world/map/npc/033-1/_nodes.txt new file mode 100644 index 00000000..3842473e --- /dev/null +++ b/world/map/npc/033-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// snow Path nodes + +// (no nodes) diff --git a/world/map/npc/034-1/_import.txt b/world/map/npc/034-1/_import.txt index ae229c8c..fab02ab2 100644 --- a/world/map/npc/034-1/_import.txt +++ b/world/map/npc/034-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 034-1 npc: npc/034-1/_mobs.txt +npc: npc/034-1/_nodes.txt npc: npc/034-1/_warps.txt npc: npc/034-1/ambushs.txt npc: npc/034-1/mapflags.txt diff --git a/world/map/npc/034-1/_mobs.txt b/world/map/npc/034-1/_mobs.txt index e02e496b..575d0220 100644 --- a/world/map/npc/034-1/_mobs.txt +++ b/world/map/npc/034-1/_mobs.txt @@ -1,45 +1,9 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Snow Forest mobs -034-1,0,0,0,0|monster|Reinboo|1094,4,100000ms,30000ms,Mob034-1::On1094 -034-1,0,0,0,0|monster|Fluffy|1020,25,100000ms,30000ms,Mob034-1::On1020 -034-1,0,0,0,0|monster|WhiteBell|1095,5,100000ms,30000ms,Mob034-1::On1095 -034-1,0,0,0,0|monster|Squirrel|1038,25,100000ms,30000ms,Mob034-1::On1038 -034-1,0,0,0,0|monster|Santaboo|1112,4,100000ms,30000ms,Mob034-1::On1112 -034-1,1,1,0,0|monster|IceGoblin|1058,25,100000ms,30000ms,Mob034-1::On1058 - - -034-1,0,0,0|script|Mob034-1|32767 -{ - end; - -On1020: - set @mobID, 1020; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1058: - set @mobID, 1058; - callfunc "MobPoints"; - end; - -On1094: - set @mobID, 1094; - callfunc "MobPoints"; - end; - -On1095: - set @mobID, 1095; - callfunc "MobPoints"; - end; - -On1112: - set @mobID, 1112; - callfunc "MobPoints"; - end; -} +034-1,0,0,0,0|monster|Reinboo|1094,4,100000ms,30000ms +034-1,0,0,0,0|monster|Fluffy|1020,25,100000ms,30000ms +034-1,0,0,0,0|monster|WhiteBell|1095,5,100000ms,30000ms +034-1,0,0,0,0|monster|Squirrel|1038,25,100000ms,30000ms +034-1,0,0,0,0|monster|Santaboo|1112,4,100000ms,30000ms +034-1,1,1,0,0|monster|IceGoblin|1058,25,100000ms,30000ms diff --git a/world/map/npc/034-1/_nodes.txt b/world/map/npc/034-1/_nodes.txt new file mode 100644 index 00000000..99c4688b --- /dev/null +++ b/world/map/npc/034-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Snow Forest nodes + +// (no nodes) diff --git a/world/map/npc/034-2/_import.txt b/world/map/npc/034-2/_import.txt index 29e7a602..47130e2d 100644 --- a/world/map/npc/034-2/_import.txt +++ b/world/map/npc/034-2/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 034-2 npc: npc/034-2/_mobs.txt +npc: npc/034-2/_nodes.txt npc: npc/034-2/_warps.txt npc: npc/034-2/mapflags.txt diff --git a/world/map/npc/034-2/_mobs.txt b/world/map/npc/034-2/_mobs.txt index 709fcb08..9045b1c4 100644 --- a/world/map/npc/034-2/_mobs.txt +++ b/world/map/npc/034-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Trappers Huts mobs - - -034-2,0,0,0|script|Mob034-2|32767 -{ - end; -} diff --git a/world/map/npc/034-2/_nodes.txt b/world/map/npc/034-2/_nodes.txt new file mode 100644 index 00000000..c92382fc --- /dev/null +++ b/world/map/npc/034-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Trappers Huts nodes + +// (no nodes) diff --git a/world/map/npc/035-2/_import.txt b/world/map/npc/035-2/_import.txt index a46f42b1..78b7188c 100644 --- a/world/map/npc/035-2/_import.txt +++ b/world/map/npc/035-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 035-2 npc: npc/035-2/_mobs.txt +npc: npc/035-2/_nodes.txt npc: npc/035-2/_warps.txt npc: npc/035-2/casino.txt npc: npc/035-2/emblems.txt diff --git a/world/map/npc/035-2/_mobs.txt b/world/map/npc/035-2/_mobs.txt index 899a8d04..bb3f2eca 100644 --- a/world/map/npc/035-2/_mobs.txt +++ b/world/map/npc/035-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Koga - Main mobs - - -035-2,0,0,0|script|Mob035-2|32767 -{ - end; -} diff --git a/world/map/npc/035-2/_nodes.txt b/world/map/npc/035-2/_nodes.txt new file mode 100644 index 00000000..7002a966 --- /dev/null +++ b/world/map/npc/035-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Koga - Main nodes + +// (no nodes) diff --git a/world/map/npc/036-2/_import.txt b/world/map/npc/036-2/_import.txt index dd908e52..79ee898b 100644 --- a/world/map/npc/036-2/_import.txt +++ b/world/map/npc/036-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 036-2 npc: npc/036-2/_mobs.txt +npc: npc/036-2/_nodes.txt npc: npc/036-2/_warps.txt npc: npc/036-2/casino.txt npc: npc/036-2/emblems.txt diff --git a/world/map/npc/036-2/_mobs.txt b/world/map/npc/036-2/_mobs.txt index 0cebfbc8..483d68b1 100644 --- a/world/map/npc/036-2/_mobs.txt +++ b/world/map/npc/036-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Koga - Candor mobs - - -036-2,0,0,0|script|Mob036-2|32767 -{ - end; -} diff --git a/world/map/npc/036-2/_nodes.txt b/world/map/npc/036-2/_nodes.txt new file mode 100644 index 00000000..20ea08f2 --- /dev/null +++ b/world/map/npc/036-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Koga - Candor nodes + +// (no nodes) diff --git a/world/map/npc/043-3/_import.txt b/world/map/npc/043-3/_import.txt index d915e2d0..b4b99268 100644 --- a/world/map/npc/043-3/_import.txt +++ b/world/map/npc/043-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 043-3 npc: npc/043-3/_mobs.txt +npc: npc/043-3/_nodes.txt npc: npc/043-3/_warps.txt npc: npc/043-3/mapflags.txt diff --git a/world/map/npc/043-3/_mobs.txt b/world/map/npc/043-3/_mobs.txt index 085615a4..772c8921 100644 --- a/world/map/npc/043-3/_mobs.txt +++ b/world/map/npc/043-3/_mobs.txt @@ -1,43 +1,12 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Sandy Dungeon Level 1 mobs -043-3,39,45,24,17|monster|CaveMaggot|1056,6,20000ms,20000ms,Mob043-3::On1056 -043-3,44,60,24,17|monster|CaveMaggot|1056,6,20000ms,20000ms,Mob043-3::On1056 -043-3,41,96,34,26|monster|CaveMaggot|1056,10,20000ms,20000ms,Mob043-3::On1056 -043-3,52,91,6,7|monster|AngryScorpion|1057,5,30000ms,30000ms,Mob043-3::On1057 -043-3,102,116,26,19|monster|AngryFireGoblin|1108,10,30000ms,30000ms,Mob043-3::On1108 -043-3,33,99,6,7|monster|AngryScorpion|1057,5,30000ms,30000ms,Mob043-3::On1057 -043-3,116,78,25,19|monster|AngryFireGoblin|1108,8,30000ms,30000ms,Mob043-3::On1108 -043-3,113,47,30,22|monster|RedSlime|1008,15,45000ms,35000ms,Mob043-3::On1008 -043-3,94,44,40,18|monster|GreenSlime|1005,5,30000ms,15000ms,Mob043-3::On1005 - - -043-3,0,0,0|script|Mob043-3|32767 -{ - end; - -On1005: - set @mobID, 1005; - callfunc "MobPoints"; - end; - -On1008: - set @mobID, 1008; - callfunc "MobPoints"; - end; - -On1056: - set @mobID, 1056; - callfunc "MobPoints"; - end; - -On1057: - set @mobID, 1057; - callfunc "MobPoints"; - end; - -On1108: - set @mobID, 1108; - callfunc "MobPoints"; - end; -} +043-3,39,45,24,17|monster|CaveMaggot|1056,6,20000ms,20000ms +043-3,44,60,24,17|monster|CaveMaggot|1056,6,20000ms,20000ms +043-3,41,96,34,26|monster|CaveMaggot|1056,10,20000ms,20000ms +043-3,52,91,6,7|monster|AngryScorpion|1057,5,30000ms,30000ms +043-3,102,116,26,19|monster|AngryFireGoblin|1108,10,30000ms,30000ms +043-3,33,99,6,7|monster|AngryScorpion|1057,5,30000ms,30000ms +043-3,116,78,25,19|monster|AngryFireGoblin|1108,8,30000ms,30000ms +043-3,113,47,30,22|monster|RedSlime|1008,15,45000ms,35000ms +043-3,94,44,40,18|monster|GreenSlime|1005,5,30000ms,15000ms diff --git a/world/map/npc/043-3/_nodes.txt b/world/map/npc/043-3/_nodes.txt new file mode 100644 index 00000000..9b7b7c4e --- /dev/null +++ b/world/map/npc/043-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Sandy Dungeon Level 1 nodes + +// (no nodes) diff --git a/world/map/npc/043-4/_import.txt b/world/map/npc/043-4/_import.txt index a7200a7e..83403eaf 100644 --- a/world/map/npc/043-4/_import.txt +++ b/world/map/npc/043-4/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 043-4 npc: npc/043-4/_mobs.txt +npc: npc/043-4/_nodes.txt npc: npc/043-4/_warps.txt npc: npc/043-4/mapflags.txt diff --git a/world/map/npc/043-4/_mobs.txt b/world/map/npc/043-4/_mobs.txt index a06642d0..ae7678e6 100644 --- a/world/map/npc/043-4/_mobs.txt +++ b/world/map/npc/043-4/_mobs.txt @@ -1,61 +1,25 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Sandy Dungeon Level 2 mobs -043-4,139,163,7,6|monster|Terranite|1062,2,240000ms,120000ms,Mob043-4::On1062 -043-4,133,45,14,16|monster|UndeadTroll|1117,4,100000ms,50000ms,Mob043-4::On1117 -043-4,91,139,11,10|monster|UndeadTroll|1117,2,100000ms,50000ms,Mob043-4::On1117 -043-4,35,120,10,11|monster|UndeadTroll|1117,2,100000ms,50000ms,Mob043-4::On1117 -043-4,43,143,12,11|monster|UndeadWitch|1116,2,120000ms,60000ms,Mob043-4::On1116 -043-4,102,153,9,9|monster|UndeadWitch|1116,2,120000ms,60000ms,Mob043-4::On1116 -043-4,142,159,14,12|monster|UndeadWitch|1116,2,120000ms,60000ms,Mob043-4::On1116 -043-4,150,33,16,15|monster|UndeadWitch|1116,1,120000ms,60000ms,Mob043-4::On1116 -043-4,103,54,8,23|monster|UndeadTroll|1117,3,100000ms,50000ms,Mob043-4::On1117 -043-4,47,38,20,10|monster|Troll|1054,7,100000ms,50000ms,Mob043-4::On1054 -043-4,98,85,8,15|monster|Snake|1010,5,100000ms,50000ms,Mob043-4::On1010 -043-4,104,57,15,27|monster|Troll|1054,7,100000ms,50000ms,Mob043-4::On1054 -043-4,89,64,9,11|monster|BlackScorpion|1009,5,100000ms,50000ms,Mob043-4::On1009 -043-4,143,46,32,28|monster|Troll|1054,7,100000ms,50000ms,Mob043-4::On1054 -043-4,154,106,26,29|monster|BlackScorpion|1009,8,100000ms,50000ms,Mob043-4::On1009 -043-4,162,77,15,23|monster|Snake|1010,6,100000ms,50000ms,Mob043-4::On1010 -043-4,152,143,11,10|monster|BlackScorpion|1009,6,100000ms,50000ms,Mob043-4::On1009 -043-4,159,161,10,8|monster|Snake|1010,6,100000ms,50000ms,Mob043-4::On1010 -043-4,98,138,21,21|monster|Troll|1054,5,100000ms,50000ms,Mob043-4::On1054 -043-4,45,106,18,25|monster|Troll|1054,5,100000ms,50000ms,Mob043-4::On1054 -043-4,39,138,19,17|monster|BlackScorpion|1009,5,100000ms,50000ms,Mob043-4::On1009 -043-4,133,123,30,23|monster|Troll|1054,3,100000ms,50000ms,Mob043-4::On1054 - - -043-4,0,0,0|script|Mob043-4|32767 -{ - end; - -On1009: - set @mobID, 1009; - callfunc "MobPoints"; - end; - -On1010: - set @mobID, 1010; - callfunc "MobPoints"; - end; - -On1054: - set @mobID, 1054; - callfunc "MobPoints"; - end; - -On1062: - set @mobID, 1062; - callfunc "MobPoints"; - end; - -On1116: - set @mobID, 1116; - callfunc "MobPoints"; - end; - -On1117: - set @mobID, 1117; - callfunc "MobPoints"; - end; -} +043-4,139,163,7,6|monster|Terranite|1062,2,240000ms,120000ms +043-4,133,45,14,16|monster|UndeadTroll|1117,4,100000ms,50000ms +043-4,91,139,11,10|monster|UndeadTroll|1117,2,100000ms,50000ms +043-4,35,120,10,11|monster|UndeadTroll|1117,2,100000ms,50000ms +043-4,43,143,12,11|monster|UndeadWitch|1116,2,120000ms,60000ms +043-4,102,153,9,9|monster|UndeadWitch|1116,2,120000ms,60000ms +043-4,142,159,14,12|monster|UndeadWitch|1116,2,120000ms,60000ms +043-4,150,33,16,15|monster|UndeadWitch|1116,1,120000ms,60000ms +043-4,103,54,8,23|monster|UndeadTroll|1117,3,100000ms,50000ms +043-4,47,38,20,10|monster|Troll|1054,7,100000ms,50000ms +043-4,98,85,8,15|monster|Snake|1010,5,100000ms,50000ms +043-4,104,57,15,27|monster|Troll|1054,7,100000ms,50000ms +043-4,89,64,9,11|monster|BlackScorpion|1009,5,100000ms,50000ms +043-4,143,46,32,28|monster|Troll|1054,7,100000ms,50000ms +043-4,154,106,26,29|monster|BlackScorpion|1009,8,100000ms,50000ms +043-4,162,77,15,23|monster|Snake|1010,6,100000ms,50000ms +043-4,152,143,11,10|monster|BlackScorpion|1009,6,100000ms,50000ms +043-4,159,161,10,8|monster|Snake|1010,6,100000ms,50000ms +043-4,98,138,21,21|monster|Troll|1054,5,100000ms,50000ms +043-4,45,106,18,25|monster|Troll|1054,5,100000ms,50000ms +043-4,39,138,19,17|monster|BlackScorpion|1009,5,100000ms,50000ms +043-4,133,123,30,23|monster|Troll|1054,3,100000ms,50000ms diff --git a/world/map/npc/043-4/_nodes.txt b/world/map/npc/043-4/_nodes.txt new file mode 100644 index 00000000..f334a483 --- /dev/null +++ b/world/map/npc/043-4/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Sandy Dungeon Level 2 nodes + +// (no nodes) diff --git a/world/map/npc/045-1/_import.txt b/world/map/npc/045-1/_import.txt index a9101910..591b3e37 100644 --- a/world/map/npc/045-1/_import.txt +++ b/world/map/npc/045-1/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 045-1 npc: npc/045-1/_mobs.txt +npc: npc/045-1/_nodes.txt npc: npc/045-1/_warps.txt npc: npc/045-1/mapflags.txt diff --git a/world/map/npc/045-1/_mobs.txt b/world/map/npc/045-1/_mobs.txt index 37357556..f8a3433c 100644 --- a/world/map/npc/045-1/_mobs.txt +++ b/world/map/npc/045-1/_mobs.txt @@ -1,54 +1,18 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Deep Snow Forest mobs -045-1,102,122,23,22|monster|Wolvern|1090,10,100000ms,30000ms,Mob045-1::On1090 -045-1,98,77,23,22|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090 -045-1,147,63,23,22|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090 -045-1,60,97,23,22|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090 -045-1,106,44,23,22|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090 -045-1,133,93,23,22|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090 -045-1,38,76,18,15|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090 -045-1,60,59,18,15|monster|Wolvern|1090,5,100000ms,30000ms,Mob045-1::On1090 -045-1,0,0,0,0|monster|Squirrel|1038,40,100000ms,30000ms,Mob045-1::On1038 -045-1,0,0,0,0|monster|Reinboo|1094,30,100000ms,30000ms,Mob045-1::On1094 -045-1,0,0,0,0|monster|Fluffy|1020,40,100000ms,30000ms,Mob045-1::On1020 -045-1,0,0,0,0|monster|WhiteBell|1095,5,100000ms,30000ms,Mob045-1::On1095 -045-1,47,145,25,25|monster|IceGoblin|1058,4,100000ms,30000ms,Mob045-1::On1058 -045-1,150,126,25,24|monster|IceGoblin|1058,4,100000ms,30000ms,Mob045-1::On1058 -045-1,104,149,79,10|monster|IceGoblin|1058,4,100000ms,30000ms,Mob045-1::On1058 - - -045-1,0,0,0|script|Mob045-1|32767 -{ - end; - -On1020: - set @mobID, 1020; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1058: - set @mobID, 1058; - callfunc "MobPoints"; - end; - -On1090: - set @mobID, 1090; - callfunc "MobPoints"; - end; - -On1094: - set @mobID, 1094; - callfunc "MobPoints"; - end; - -On1095: - set @mobID, 1095; - callfunc "MobPoints"; - end; -} +045-1,102,122,23,22|monster|Wolvern|1090,10,100000ms,30000ms +045-1,98,77,23,22|monster|Wolvern|1090,5,100000ms,30000ms +045-1,147,63,23,22|monster|Wolvern|1090,5,100000ms,30000ms +045-1,60,97,23,22|monster|Wolvern|1090,5,100000ms,30000ms +045-1,106,44,23,22|monster|Wolvern|1090,5,100000ms,30000ms +045-1,133,93,23,22|monster|Wolvern|1090,5,100000ms,30000ms +045-1,38,76,18,15|monster|Wolvern|1090,5,100000ms,30000ms +045-1,60,59,18,15|monster|Wolvern|1090,5,100000ms,30000ms +045-1,0,0,0,0|monster|Squirrel|1038,40,100000ms,30000ms +045-1,0,0,0,0|monster|Reinboo|1094,30,100000ms,30000ms +045-1,0,0,0,0|monster|Fluffy|1020,40,100000ms,30000ms +045-1,0,0,0,0|monster|WhiteBell|1095,5,100000ms,30000ms +045-1,47,145,25,25|monster|IceGoblin|1058,4,100000ms,30000ms +045-1,150,126,25,24|monster|IceGoblin|1058,4,100000ms,30000ms +045-1,104,149,79,10|monster|IceGoblin|1058,4,100000ms,30000ms diff --git a/world/map/npc/045-1/_nodes.txt b/world/map/npc/045-1/_nodes.txt new file mode 100644 index 00000000..9ef28c87 --- /dev/null +++ b/world/map/npc/045-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Deep Snow Forest nodes + +// (no nodes) diff --git a/world/map/npc/046-1/_import.txt b/world/map/npc/046-1/_import.txt index 9c11acb7..2700ea85 100644 --- a/world/map/npc/046-1/_import.txt +++ b/world/map/npc/046-1/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 046-1 npc: npc/046-1/_mobs.txt +npc: npc/046-1/_nodes.txt npc: npc/046-1/_warps.txt npc: npc/046-1/mapflags.txt diff --git a/world/map/npc/046-1/_mobs.txt b/world/map/npc/046-1/_mobs.txt index d5551ecd..919cca57 100644 --- a/world/map/npc/046-1/_mobs.txt +++ b/world/map/npc/046-1/_mobs.txt @@ -1,55 +1,14 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Rock Plateau mobs -046-1,0,7,0,0|monster|Reinboo|1094,40,100000ms,30000ms,Mob046-1::On1094 -046-1,0,7,0,0|monster|Fluffy|1020,50,100000ms,30000ms,Mob046-1::On1020 -046-1,0,7,0,0|monster|Squirrel|1038,50,100000ms,30000ms,Mob046-1::On1038 -046-1,44,35,52,20|monster|Moggun|1061,12,100000ms,30000ms,Mob046-1::On1061 -046-1,0,7,0,0|monster|Yeti|1072,2,100000ms,30000ms,Mob046-1::On1072 -046-1,87,101,23,13|monster|Wolvern|1090,5,100000ms,30000ms,Mob046-1::On1090 -046-1,0,7,0,0|monster|WhiteBell|1095,9,100000ms,30000ms,Mob046-1::On1095 -046-1,72,59,15,12|monster|Wolvern|1090,2,100000ms,30000ms,Mob046-1::On1090 -046-1,36,112,10,9|monster|Wolvern|1090,2,100000ms,30000ms,Mob046-1::On1090 -046-1,115,40,45,33|monster|Wolvern|1090,7,100000ms,30000ms,Mob046-1::On1090 -046-1,145,67,10,9|monster|Wolvern|1090,2,100000ms,30000ms,Mob046-1::On1090 - - -046-1,0,0,0|script|Mob046-1|32767 -{ - end; - -On1020: - set @mobID, 1020; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1061: - set @mobID, 1061; - callfunc "MobPoints"; - end; - -On1072: - set @mobID, 1072; - callfunc "MobPoints"; - end; - -On1090: - set @mobID, 1090; - callfunc "MobPoints"; - end; - -On1094: - set @mobID, 1094; - callfunc "MobPoints"; - end; - -On1095: - set @mobID, 1095; - callfunc "MobPoints"; - end; -} +046-1,0,7,0,0|monster|Reinboo|1094,40,100000ms,30000ms +046-1,0,7,0,0|monster|Fluffy|1020,50,100000ms,30000ms +046-1,0,7,0,0|monster|Squirrel|1038,50,100000ms,30000ms +046-1,44,35,52,20|monster|Moggun|1061,12,100000ms,30000ms +046-1,0,7,0,0|monster|Yeti|1072,2,100000ms,30000ms +046-1,87,101,23,13|monster|Wolvern|1090,5,100000ms,30000ms +046-1,0,7,0,0|monster|WhiteBell|1095,9,100000ms,30000ms +046-1,72,59,15,12|monster|Wolvern|1090,2,100000ms,30000ms +046-1,36,112,10,9|monster|Wolvern|1090,2,100000ms,30000ms +046-1,115,40,45,33|monster|Wolvern|1090,7,100000ms,30000ms +046-1,145,67,10,9|monster|Wolvern|1090,2,100000ms,30000ms diff --git a/world/map/npc/046-1/_nodes.txt b/world/map/npc/046-1/_nodes.txt new file mode 100644 index 00000000..9075a159 --- /dev/null +++ b/world/map/npc/046-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Rock Plateau nodes + +// (no nodes) diff --git a/world/map/npc/046-3/_import.txt b/world/map/npc/046-3/_import.txt index 24769cc4..d06b31c5 100644 --- a/world/map/npc/046-3/_import.txt +++ b/world/map/npc/046-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 046-3 npc: npc/046-3/_mobs.txt +npc: npc/046-3/_nodes.txt npc: npc/046-3/_warps.txt npc: npc/046-3/mapflags.txt diff --git a/world/map/npc/046-3/_mobs.txt b/world/map/npc/046-3/_mobs.txt index 95c498ed..d75b5f5a 100644 --- a/world/map/npc/046-3/_mobs.txt +++ b/world/map/npc/046-3/_mobs.txt @@ -1,54 +1,18 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Frosty Underground mobs -046-3,68,101,12,8|monster|Yeti|1072,2,100000ms,30000ms,Mob046-3::On1072 -046-3,0,0,0,0|monster|IceGoblin|1058,20,100000ms,30000ms,Mob046-3::On1058 -046-3,55,61,25,26|monster|Moggun|1061,14,100000ms,30000ms,Mob046-3::On1061 -046-3,119,104,5,4|monster|IceElement|1071,1,100000ms,30000ms,Mob046-3::On1071 -046-3,132,71,9,7|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob046-3::On1093 -046-3,107,85,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob046-3::On1091 -046-3,98,77,6,4|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob046-3::On1093 -046-3,70,82,6,4|monster|WhiteSlime|1093,6,100000ms,30000ms,Mob046-3::On1093 -046-3,106,34,6,4|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob046-3::On1093 -046-3,33,37,6,4|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob046-3::On1093 -046-3,144,105,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob046-3::On1091 -046-3,152,55,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob046-3::On1091 -046-3,84,53,14,9|monster|BlueSlime|1091,2,100000ms,30000ms,Mob046-3::On1091 -046-3,47,23,15,10|monster|IceElement|1071,2,100000ms,30000ms,Mob046-3::On1071 -046-3,113,48,12,8|monster|Yeti|1072,2,100000ms,30000ms,Mob046-3::On1072 - - -046-3,0,0,0|script|Mob046-3|32767 -{ - end; - -On1058: - set @mobID, 1058; - callfunc "MobPoints"; - end; - -On1061: - set @mobID, 1061; - callfunc "MobPoints"; - end; - -On1071: - set @mobID, 1071; - callfunc "MobPoints"; - end; - -On1072: - set @mobID, 1072; - callfunc "MobPoints"; - end; - -On1091: - set @mobID, 1091; - callfunc "MobPoints"; - end; - -On1093: - set @mobID, 1093; - callfunc "MobPoints"; - end; -} +046-3,68,101,12,8|monster|Yeti|1072,2,100000ms,30000ms +046-3,0,0,0,0|monster|IceGoblin|1058,20,100000ms,30000ms +046-3,55,61,25,26|monster|Moggun|1061,14,100000ms,30000ms +046-3,119,104,5,4|monster|IceElement|1071,1,100000ms,30000ms +046-3,132,71,9,7|monster|WhiteSlime|1093,4,100000ms,30000ms +046-3,107,85,14,9|monster|BlueSlime|1091,2,100000ms,30000ms +046-3,98,77,6,4|monster|WhiteSlime|1093,4,100000ms,30000ms +046-3,70,82,6,4|monster|WhiteSlime|1093,6,100000ms,30000ms +046-3,106,34,6,4|monster|WhiteSlime|1093,4,100000ms,30000ms +046-3,33,37,6,4|monster|WhiteSlime|1093,4,100000ms,30000ms +046-3,144,105,14,9|monster|BlueSlime|1091,2,100000ms,30000ms +046-3,152,55,14,9|monster|BlueSlime|1091,2,100000ms,30000ms +046-3,84,53,14,9|monster|BlueSlime|1091,2,100000ms,30000ms +046-3,47,23,15,10|monster|IceElement|1071,2,100000ms,30000ms +046-3,113,48,12,8|monster|Yeti|1072,2,100000ms,30000ms diff --git a/world/map/npc/046-3/_nodes.txt b/world/map/npc/046-3/_nodes.txt new file mode 100644 index 00000000..42beb88a --- /dev/null +++ b/world/map/npc/046-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Frosty Underground nodes + +// (no nodes) diff --git a/world/map/npc/047-1/_import.txt b/world/map/npc/047-1/_import.txt index 7dbebdc4..d99b52f5 100644 --- a/world/map/npc/047-1/_import.txt +++ b/world/map/npc/047-1/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 047-1 npc: npc/047-1/_mobs.txt +npc: npc/047-1/_nodes.txt npc: npc/047-1/_warps.txt npc: npc/047-1/mapflags.txt diff --git a/world/map/npc/047-1/_mobs.txt b/world/map/npc/047-1/_mobs.txt index a502dcdf..8c709dff 100644 --- a/world/map/npc/047-1/_mobs.txt +++ b/world/map/npc/047-1/_mobs.txt @@ -1,76 +1,25 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // snow Hills mobs -047-1,37,175,3,2|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-1::On1093 -047-1,45,75,2,2|monster|BlueSlime|1091,1,100000ms,30000ms,Mob047-1::On1091 -047-1,0,0,0,0|monster|Reinboo|1094,50,100000ms,30000ms,Mob047-1::On1094 -047-1,0,0,0,0|monster|Fluffy|1020,60,100000ms,30000ms,Mob047-1::On1020 -047-1,0,0,0,0|monster|Squirrel|1038,60,100000ms,30000ms,Mob047-1::On1038 -047-1,81,125,103,56|monster|Moggun|1061,25,100000ms,30000ms,Mob047-1::On1061 -047-1,189,123,25,36|monster|Wolvern|1090,6,100000ms,30000ms,Mob047-1::On1090 -047-1,160,115,25,20|monster|Wolvern|1090,6,100000ms,30000ms,Mob047-1::On1090 -047-1,169,163,48,31|monster|Wolvern|1090,6,100000ms,30000ms,Mob047-1::On1090 -047-1,58,71,48,31|monster|Wolvern|1090,6,100000ms,30000ms,Mob047-1::On1090 -047-1,122,116,20,24|monster|Wolvern|1090,6,100000ms,30000ms,Mob047-1::On1090 -047-1,110,173,25,20|monster|Wolvern|1090,6,100000ms,30000ms,Mob047-1::On1090 -047-1,108,168,3,2|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-1::On1093 -047-1,108,158,3,2|monster|BlueSlime|1091,1,100000ms,30000ms,Mob047-1::On1091 -047-1,0,0,0,0|monster|WhiteBell|1095,10,100000ms,30000ms,Mob047-1::On1095 -047-1,87,119,36,35|monster|Yeti|1072,2,100000ms,30000ms,Mob047-1::On1072 -047-1,138,22,2,2|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob047-1::On1093 -047-1,157,66,2,2|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob047-1::On1093 -047-1,174,46,4,5|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-1::On1091 -047-1,143,43,4,5|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-1::On1091 -047-1,122,61,2,2|monster|WhiteSlime|1093,4,100000ms,30000ms,Mob047-1::On1093 -047-1,132,70,4,5|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-1::On1091 - - -047-1,0,0,0|script|Mob047-1|32767 -{ - end; - -On1020: - set @mobID, 1020; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1061: - set @mobID, 1061; - callfunc "MobPoints"; - end; - -On1072: - set @mobID, 1072; - callfunc "MobPoints"; - end; - -On1090: - set @mobID, 1090; - callfunc "MobPoints"; - end; - -On1091: - set @mobID, 1091; - callfunc "MobPoints"; - end; - -On1093: - set @mobID, 1093; - callfunc "MobPoints"; - end; - -On1094: - set @mobID, 1094; - callfunc "MobPoints"; - end; - -On1095: - set @mobID, 1095; - callfunc "MobPoints"; - end; -} +047-1,37,175,3,2|monster|WhiteSlime|1093,7,100000ms,30000ms +047-1,45,75,2,2|monster|BlueSlime|1091,1,100000ms,30000ms +047-1,0,0,0,0|monster|Reinboo|1094,50,100000ms,30000ms +047-1,0,0,0,0|monster|Fluffy|1020,60,100000ms,30000ms +047-1,0,0,0,0|monster|Squirrel|1038,60,100000ms,30000ms +047-1,81,125,103,56|monster|Moggun|1061,25,100000ms,30000ms +047-1,189,123,25,36|monster|Wolvern|1090,6,100000ms,30000ms +047-1,160,115,25,20|monster|Wolvern|1090,6,100000ms,30000ms +047-1,169,163,48,31|monster|Wolvern|1090,6,100000ms,30000ms +047-1,58,71,48,31|monster|Wolvern|1090,6,100000ms,30000ms +047-1,122,116,20,24|monster|Wolvern|1090,6,100000ms,30000ms +047-1,110,173,25,20|monster|Wolvern|1090,6,100000ms,30000ms +047-1,108,168,3,2|monster|WhiteSlime|1093,7,100000ms,30000ms +047-1,108,158,3,2|monster|BlueSlime|1091,1,100000ms,30000ms +047-1,0,0,0,0|monster|WhiteBell|1095,10,100000ms,30000ms +047-1,87,119,36,35|monster|Yeti|1072,2,100000ms,30000ms +047-1,138,22,2,2|monster|WhiteSlime|1093,4,100000ms,30000ms +047-1,157,66,2,2|monster|WhiteSlime|1093,4,100000ms,30000ms +047-1,174,46,4,5|monster|BlueSlime|1091,2,100000ms,30000ms +047-1,143,43,4,5|monster|BlueSlime|1091,2,100000ms,30000ms +047-1,122,61,2,2|monster|WhiteSlime|1093,4,100000ms,30000ms +047-1,132,70,4,5|monster|BlueSlime|1091,2,100000ms,30000ms diff --git a/world/map/npc/047-1/_nodes.txt b/world/map/npc/047-1/_nodes.txt new file mode 100644 index 00000000..d910c062 --- /dev/null +++ b/world/map/npc/047-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// snow Hills nodes + +// (no nodes) diff --git a/world/map/npc/047-3/_import.txt b/world/map/npc/047-3/_import.txt index 4f711642..5250ad76 100644 --- a/world/map/npc/047-3/_import.txt +++ b/world/map/npc/047-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 047-3 npc: npc/047-3/_mobs.txt +npc: npc/047-3/_nodes.txt npc: npc/047-3/_warps.txt npc: npc/047-3/mapflags.txt diff --git a/world/map/npc/047-3/_mobs.txt b/world/map/npc/047-3/_mobs.txt index adf84729..2b0f3338 100644 --- a/world/map/npc/047-3/_mobs.txt +++ b/world/map/npc/047-3/_mobs.txt @@ -1,60 +1,24 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Snow Hills Cave mobs -047-3,56,135,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093 -047-3,35,153,6,6|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093 -047-3,39,104,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093 -047-3,73,153,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093 -047-3,64,104,3,3|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093 -047-3,24,168,6,4|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-3::On1091 -047-3,87,134,5,3|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-3::On1091 -047-3,55,122,5,3|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-3::On1091 -047-3,35,128,5,3|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-3::On1091 -047-3,53,84,5,3|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-3::On1091 -047-3,75,136,21,26|monster|Moggun|1061,5,100000ms,30000ms,Mob047-3::On1061 -047-3,39,31,42,21|monster|Moggun|1061,12,100000ms,30000ms,Mob047-3::On1061 -047-3,40,31,5,3|monster|IceSkull|1085,2,100000ms,30000ms,Mob047-3::On1085 -047-3,122,157,21,16|monster|Yeti|1072,2,100000ms,30000ms,Mob047-3::On1072 -047-3,102,166,15,13|monster|IceSkull|1085,5,100000ms,30000ms,Mob047-3::On1085 -047-3,109,81,15,13|monster|IceElement|1071,1,100000ms,30000ms,Mob047-3::On1071 -047-3,123,90,5,3|monster|BlueSlime|1091,2,100000ms,30000ms,Mob047-3::On1091 -047-3,109,97,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093 -047-3,119,41,42,21|monster|Moggun|1061,8,100000ms,30000ms,Mob047-3::On1061 -047-3,51,94,39,14|monster|IceSkull|1085,5,100000ms,30000ms,Mob047-3::On1085 -047-3,121,172,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms,Mob047-3::On1093 - - -047-3,0,0,0|script|Mob047-3|32767 -{ - end; - -On1061: - set @mobID, 1061; - callfunc "MobPoints"; - end; - -On1071: - set @mobID, 1071; - callfunc "MobPoints"; - end; - -On1072: - set @mobID, 1072; - callfunc "MobPoints"; - end; - -On1085: - set @mobID, 1085; - callfunc "MobPoints"; - end; - -On1091: - set @mobID, 1091; - callfunc "MobPoints"; - end; - -On1093: - set @mobID, 1093; - callfunc "MobPoints"; - end; -} +047-3,56,135,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms +047-3,35,153,6,6|monster|WhiteSlime|1093,7,100000ms,30000ms +047-3,39,104,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms +047-3,73,153,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms +047-3,64,104,3,3|monster|WhiteSlime|1093,7,100000ms,30000ms +047-3,24,168,6,4|monster|BlueSlime|1091,2,100000ms,30000ms +047-3,87,134,5,3|monster|BlueSlime|1091,2,100000ms,30000ms +047-3,55,122,5,3|monster|BlueSlime|1091,2,100000ms,30000ms +047-3,35,128,5,3|monster|BlueSlime|1091,2,100000ms,30000ms +047-3,53,84,5,3|monster|BlueSlime|1091,2,100000ms,30000ms +047-3,75,136,21,26|monster|Moggun|1061,5,100000ms,30000ms +047-3,39,31,42,21|monster|Moggun|1061,12,100000ms,30000ms +047-3,40,31,5,3|monster|IceSkull|1085,2,100000ms,30000ms +047-3,122,157,21,16|monster|Yeti|1072,2,100000ms,30000ms +047-3,102,166,15,13|monster|IceSkull|1085,5,100000ms,30000ms +047-3,109,81,15,13|monster|IceElement|1071,1,100000ms,30000ms +047-3,123,90,5,3|monster|BlueSlime|1091,2,100000ms,30000ms +047-3,109,97,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms +047-3,119,41,42,21|monster|Moggun|1061,8,100000ms,30000ms +047-3,51,94,39,14|monster|IceSkull|1085,5,100000ms,30000ms +047-3,121,172,9,8|monster|WhiteSlime|1093,7,100000ms,30000ms diff --git a/world/map/npc/047-3/_nodes.txt b/world/map/npc/047-3/_nodes.txt new file mode 100644 index 00000000..06534770 --- /dev/null +++ b/world/map/npc/047-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Snow Hills Cave nodes + +// (no nodes) diff --git a/world/map/npc/048-2/_import.txt b/world/map/npc/048-2/_import.txt index 8178036c..a820b2d4 100644 --- a/world/map/npc/048-2/_import.txt +++ b/world/map/npc/048-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 048-2 npc: npc/048-2/_mobs.txt +npc: npc/048-2/_nodes.txt npc: npc/048-2/_warps.txt npc: npc/048-2/bluesageConfig.txt npc: npc/048-2/helperAccused.txt diff --git a/world/map/npc/048-2/_mobs.txt b/world/map/npc/048-2/_mobs.txt index 87b5b1d4..c9f81014 100644 --- a/world/map/npc/048-2/_mobs.txt +++ b/world/map/npc/048-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Blue Sages' Mansion mobs - - -048-2,0,0,0|script|Mob048-2|32767 -{ - end; -} diff --git a/world/map/npc/048-2/_nodes.txt b/world/map/npc/048-2/_nodes.txt new file mode 100644 index 00000000..f5923fb2 --- /dev/null +++ b/world/map/npc/048-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Blue Sages' Mansion nodes + +// (no nodes) diff --git a/world/map/npc/051-1/_import.txt b/world/map/npc/051-1/_import.txt index 9f93f8ef..2e99eba9 100644 --- a/world/map/npc/051-1/_import.txt +++ b/world/map/npc/051-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 051-1 npc: npc/051-1/_mobs.txt +npc: npc/051-1/_nodes.txt npc: npc/051-1/_warps.txt npc: npc/051-1/desert.txt npc: npc/051-1/desertmonsters.txt diff --git a/world/map/npc/051-1/_mobs.txt b/world/map/npc/051-1/_mobs.txt index 752c527c..7569cce6 100644 --- a/world/map/npc/051-1/_mobs.txt +++ b/world/map/npc/051-1/_mobs.txt @@ -1,21 +1,5 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Illia outskirts mobs -051-1,42,35,42,24|monster|LogHead|1025,30,100000ms,30000ms,Mob051-1::On1025 -051-1,42,35,41,22|monster|SpikyMushroom|1019,10,100000ms,30000ms,Mob051-1::On1019 - - -051-1,0,0,0|script|Mob051-1|32767 -{ - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1025: - set @mobID, 1025; - callfunc "MobPoints"; - end; -} +051-1,42,35,42,24|monster|LogHead|1025,30,100000ms,30000ms +051-1,42,35,41,22|monster|SpikyMushroom|1019,10,100000ms,30000ms diff --git a/world/map/npc/051-1/_nodes.txt b/world/map/npc/051-1/_nodes.txt new file mode 100644 index 00000000..86674b68 --- /dev/null +++ b/world/map/npc/051-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Illia outskirts nodes + +// (no nodes) diff --git a/world/map/npc/051-3/_import.txt b/world/map/npc/051-3/_import.txt index f74d6cb4..f4cae902 100644 --- a/world/map/npc/051-3/_import.txt +++ b/world/map/npc/051-3/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 051-3 npc: npc/051-3/_mobs.txt +npc: npc/051-3/_nodes.txt npc: npc/051-3/_warps.txt npc: npc/051-3/ambush.txt npc: npc/051-3/jailslimes.txt diff --git a/world/map/npc/051-3/_mobs.txt b/world/map/npc/051-3/_mobs.txt index 711bf39c..3b10016f 100644 --- a/world/map/npc/051-3/_mobs.txt +++ b/world/map/npc/051-3/_mobs.txt @@ -1,65 +1,19 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Illia Bandit Cave mobs -051-3,31,52,21,13|monster|RedSlime|1008,8,100000ms,30000ms,Mob051-3::On1008 -051-3,31,52,19,14|monster|CaveMaggot|1056,3,100000ms,30000ms,Mob051-3::On1056 -051-3,56,102,3,2|monster|Spider|1012,1,100000ms,250000ms,Mob051-3::On1012 -051-3,61,102,2,2|monster|Spider|1012,1,100000ms,250000ms,Mob051-3::On1012 -051-3,65,102,2,2|monster|Spider|1012,1,100000ms,250000ms,Mob051-3::On1012 -051-3,71,109,4,2|monster|BlackScorpion|1009,1,100000ms,250000ms,Mob051-3::On1009 -051-3,59,56,12,36|monster|Bandit|1064,47,100000ms,10000ms,Mob051-3::On1064 -051-3,59,44,13,13|monster|BanditLord|1065,4,100000ms,20000ms,Mob051-3::On1065 -051-3,60,69,18,9|monster|BanditLord|1065,4,100000ms,20000ms,Mob051-3::On1065 -051-3,63,94,0,0|monster|SleepingBandit|1099,1,100000ms,60000ms,Mob051-3::On1099 -051-3,53,93,0,0|monster|SleepingBandit|1099,1,100000ms,60000ms,Mob051-3::On1099 -051-3,48,71,0,0|monster|SleepingBandit|1099,1,100000ms,60000ms,Mob051-3::On1099 -051-3,38,30,17,12|monster|Bandit|1064,12,100000ms,10000ms,Mob051-3::On1064 -051-3,39,33,11,8|monster|BanditLord|1065,2,100000ms,20000ms,Mob051-3::On1065 -051-3,80,101,10,12|monster|CopperSlime|1098,7,100000ms,60000ms,Mob051-3::On1098 -051-3,60,94,18,5|monster|CopperSlime|1098,7,100000ms,60000ms,Mob051-3::On1098 - - -051-3,0,0,0|script|Mob051-3|32767 -{ - end; - -On1008: - set @mobID, 1008; - callfunc "MobPoints"; - end; - -On1009: - set @mobID, 1009; - callfunc "MobPoints"; - end; - -On1012: - set @mobID, 1012; - callfunc "MobPoints"; - end; - -On1056: - set @mobID, 1056; - callfunc "MobPoints"; - end; - -On1064: - set @mobID, 1064; - callfunc "MobPoints"; - end; - -On1065: - set @mobID, 1065; - callfunc "MobPoints"; - end; - -On1098: - set @mobID, 1098; - callfunc "MobPoints"; - end; - -On1099: - set @mobID, 1099; - callfunc "MobPoints"; - end; -} +051-3,31,52,21,13|monster|RedSlime|1008,8,100000ms,30000ms +051-3,31,52,19,14|monster|CaveMaggot|1056,3,100000ms,30000ms +051-3,56,102,3,2|monster|Spider|1012,1,100000ms,250000ms +051-3,61,102,2,2|monster|Spider|1012,1,100000ms,250000ms +051-3,65,102,2,2|monster|Spider|1012,1,100000ms,250000ms +051-3,71,109,4,2|monster|BlackScorpion|1009,1,100000ms,250000ms +051-3,59,56,12,36|monster|Bandit|1064,47,100000ms,10000ms +051-3,59,44,13,13|monster|BanditLord|1065,4,100000ms,20000ms +051-3,60,69,18,9|monster|BanditLord|1065,4,100000ms,20000ms +051-3,63,94,0,0|monster|SleepingBandit|1099,1,100000ms,60000ms +051-3,53,93,0,0|monster|SleepingBandit|1099,1,100000ms,60000ms +051-3,48,71,0,0|monster|SleepingBandit|1099,1,100000ms,60000ms +051-3,38,30,17,12|monster|Bandit|1064,12,100000ms,10000ms +051-3,39,33,11,8|monster|BanditLord|1065,2,100000ms,20000ms +051-3,80,101,10,12|monster|CopperSlime|1098,7,100000ms,60000ms +051-3,60,94,18,5|monster|CopperSlime|1098,7,100000ms,60000ms diff --git a/world/map/npc/051-3/_nodes.txt b/world/map/npc/051-3/_nodes.txt new file mode 100644 index 00000000..75194dbf --- /dev/null +++ b/world/map/npc/051-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Illia Bandit Cave nodes + +// (no nodes) diff --git a/world/map/npc/052-1/_import.txt b/world/map/npc/052-1/_import.txt index c4c9d1e3..05e7e8e9 100644 --- a/world/map/npc/052-1/_import.txt +++ b/world/map/npc/052-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 052-1 npc: npc/052-1/_mobs.txt +npc: npc/052-1/_nodes.txt npc: npc/052-1/_warps.txt npc: npc/052-1/channelling.txt npc: npc/052-1/janitor.txt diff --git a/world/map/npc/052-1/_mobs.txt b/world/map/npc/052-1/_mobs.txt index c386d5d1..96b998eb 100644 --- a/world/map/npc/052-1/_mobs.txt +++ b/world/map/npc/052-1/_mobs.txt @@ -1,15 +1,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Illia archipelago mobs -052-1,55,29,43,39|monster|AzulSlime|1100,18,100000ms,20000ms,Mob052-1::On1100 - - -052-1,0,0,0|script|Mob052-1|32767 -{ - end; - -On1100: - set @mobID, 1100; - callfunc "MobPoints"; - end; -} +052-1,55,29,43,39|monster|AzulSlime|1100,18,100000ms,20000ms diff --git a/world/map/npc/052-1/_nodes.txt b/world/map/npc/052-1/_nodes.txt new file mode 100644 index 00000000..35ee39e3 --- /dev/null +++ b/world/map/npc/052-1/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Illia archipelago nodes + +// (no nodes) diff --git a/world/map/npc/052-2/_import.txt b/world/map/npc/052-2/_import.txt index 0a8b5847..aa01af40 100644 --- a/world/map/npc/052-2/_import.txt +++ b/world/map/npc/052-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 052-2 npc: npc/052-2/_mobs.txt +npc: npc/052-2/_nodes.txt npc: npc/052-2/_warps.txt npc: npc/052-2/chest.txt npc: npc/052-2/janitor.txt diff --git a/world/map/npc/052-2/_mobs.txt b/world/map/npc/052-2/_mobs.txt index 1fb96829..1d91c286 100644 --- a/world/map/npc/052-2/_mobs.txt +++ b/world/map/npc/052-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Illia forsaken inn mobs - - -052-2,0,0,0|script|Mob052-2|32767 -{ - end; -} diff --git a/world/map/npc/052-2/_nodes.txt b/world/map/npc/052-2/_nodes.txt new file mode 100644 index 00000000..38010d03 --- /dev/null +++ b/world/map/npc/052-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Illia forsaken inn nodes + +// (no nodes) diff --git a/world/map/npc/055-1/_import.txt b/world/map/npc/055-1/_import.txt index 10c3c13c..8760f125 100644 --- a/world/map/npc/055-1/_import.txt +++ b/world/map/npc/055-1/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 055-1 npc: npc/055-1/_mobs.txt +npc: npc/055-1/_nodes.txt npc: npc/055-1/_warps.txt npc: npc/055-1/flowerpentagram4.txt npc: npc/055-1/mapflags.txt diff --git a/world/map/npc/055-1/_mobs.txt b/world/map/npc/055-1/_mobs.txt index 35741d32..23eba0b0 100644 --- a/world/map/npc/055-1/_mobs.txt +++ b/world/map/npc/055-1/_mobs.txt @@ -1,86 +1,20 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland Hills mobs -055-1,68,72,22,19|monster|Butterfly|1055,16,10000ms,85000ms,Mob055-1::On1055 -055-1,87,29,55,14|monster|Silkworm|1035,15,10000ms,85000ms,Mob055-1::On1035 -055-1,79,30,84,17|monster|Squirrel|1038,10,10000ms,45000ms,Mob055-1::On1038 -055-1,0,0,0,0|monster|Mouboo|1028,15,10000ms,85000ms,Mob055-1::On1028 -055-1,91,49,6,4|monster|CloverPatch|1037,1,10000ms,180000ms,Mob055-1::On1037 -055-1,103,54,5,3|monster|CloverPatch|1037,1,10000ms,180000ms,Mob055-1::On1037 -055-1,64,75,27,16|monster|CloverPatch|1037,1,10000ms,120000ms,Mob055-1::On1037 -055-1,80,34,82,25|monster|Snail|1041,3,10000ms,85000ms,Mob055-1::On1041 -055-1,70,72,17,24|monster|AlizarinPlant|1032,2,10000ms,60000ms,Mob055-1::On1032 -055-1,81,32,81,22|monster|AlizarinPlant|1032,2,10000ms,60000ms,Mob055-1::On1032 -055-1,0,0,0,0|monster|MauvePlant|1029,7,10000ms,55000ms,Mob055-1::On1029 -055-1,0,0,0,0|monster|CobaltPlant|1030,3,10000ms,60000ms,Mob055-1::On1030 -055-1,0,0,0,0|monster|GambogePlant|1031,2,10000ms,60000ms,Mob055-1::On1031 -055-1,116,60,4,2|monster|PinkFlower|1014,1,10000ms,45000ms,Mob055-1::On1014 -055-1,97,60,4,2|monster|PinkFlower|1014,1,10000ms,45000ms,Mob055-1::On1014 -055-1,64,73,23,17|monster|PinkFlower|1014,1,10000ms,45000ms,Mob055-1::On1014 -055-1,0,0,0,0|monster|SpikyMushroom|1019,7,10000ms,60000ms,Mob055-1::On1019 - - -055-1,0,0,0|script|Mob055-1|32767 -{ - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1028: - set @mobID, 1028; - callfunc "MobPoints"; - end; - -On1029: - set @mobID, 1029; - callfunc "MobPoints"; - end; - -On1030: - set @mobID, 1030; - callfunc "MobPoints"; - end; - -On1031: - set @mobID, 1031; - callfunc "MobPoints"; - end; - -On1032: - set @mobID, 1032; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1041: - set @mobID, 1041; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; -} +055-1,68,72,22,19|monster|Butterfly|1055,16,10000ms,85000ms +055-1,87,29,55,14|monster|Silkworm|1035,15,10000ms,85000ms +055-1,79,30,84,17|monster|Squirrel|1038,10,10000ms,45000ms +055-1,0,0,0,0|monster|Mouboo|1028,15,10000ms,85000ms +055-1,91,49,6,4|monster|CloverPatch|1037,1,10000ms,180000ms +055-1,103,54,5,3|monster|CloverPatch|1037,1,10000ms,180000ms +055-1,64,75,27,16|monster|CloverPatch|1037,1,10000ms,120000ms +055-1,80,34,82,25|monster|Snail|1041,3,10000ms,85000ms +055-1,70,72,17,24|monster|AlizarinPlant|1032,2,10000ms,60000ms +055-1,81,32,81,22|monster|AlizarinPlant|1032,2,10000ms,60000ms +055-1,0,0,0,0|monster|MauvePlant|1029,7,10000ms,55000ms +055-1,0,0,0,0|monster|CobaltPlant|1030,3,10000ms,60000ms +055-1,0,0,0,0|monster|GambogePlant|1031,2,10000ms,60000ms +055-1,116,60,4,2|monster|PinkFlower|1014,1,10000ms,45000ms +055-1,97,60,4,2|monster|PinkFlower|1014,1,10000ms,45000ms +055-1,64,73,23,17|monster|PinkFlower|1014,1,10000ms,45000ms +055-1,0,0,0,0|monster|SpikyMushroom|1019,7,10000ms,60000ms diff --git a/world/map/npc/055-1/_nodes.txt b/world/map/npc/055-1/_nodes.txt new file mode 100644 index 00000000..e6da33ea --- /dev/null +++ b/world/map/npc/055-1/_nodes.txt @@ -0,0 +1,16 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland Hills nodes + +055-1,0,0,0|script|Node055-1|32767 +{ + end; +OnInit: + setarray .m$, "_N-Pumpkin", "055-1", "055-1", "055-1"; + setarray .x1, "_N-Pumpkin", 129, 133, 41; + setarray .y1, "_N-Pumpkin", 23, 27, 22; + setarray .x2, "_N-Pumpkin", 135, 139, 47; + setarray .y2, "_N-Pumpkin", 26, 33, 30; + setarray .id, "_N-Pumpkin", 0, 0, 0; + donpcevent "_N-Pumpkin::OnMaybeStart"; + destroy; +} diff --git a/world/map/npc/055-1/pumpkins.txt b/world/map/npc/055-1/pumpkins.txt index 96931e04..64b145c8 100644 --- a/world/map/npc/055-1/pumpkins.txt +++ b/world/map/npc/055-1/pumpkins.txt @@ -1,18 +1,18 @@ -// Pumpkin mobs for the seasonal halloween event with Oscar -055-1,48,25,16,8|monster|Pumpkin|1063,12,10000ms,5000ms,PumpkinMob055-1::On1063 -055-1,139,29,5,7|monster|Pumpkin|1063,7,10000ms,5000ms,PumpkinMob055-1::On1063 -055-1,132,24,6,4|monster|Pumpkin|1063,4,10000ms,5000ms,PumpkinMob055-1::On1063 +055-1,0,0,0|script|_N-Pumpkin|32767 +{ +////////////////////////////////// +// puppet logic below -055-1,0,0,0|script|PumpkinMob055-1|32767 -{ - end; + set @distance_handler, 1; // silent + set @npc_distance, (1-2); // -1 means attack range + callfunc "PCtoNPCRange"; + if (@npc_check) end; -On1063: if (Quest_Halloween != 1 || !(gettime(6) == 11 && (gettime(5) >= 4 && gettime(5) <= 30))) goto L_HeavyPoison; if (@discover_poisonous_pumpkin == 0) - message strcharinfo(0), "Yuke, this pumpkin released some ugly poison gas!"; + message strcharinfo(0), "Pumpkin : Yuke, this pumpkin released some ugly poison gas!"; set @discover_poisonous_pumpkin, 1; misceffect FX_PUMPKIN_EXPLOSION, strcharinfo(0); heal -15, 0; @@ -25,44 +25,122 @@ On1063: set @mobID, 1063; callfunc "MobPoints"; - end; + goto L_Destroy; L_EnoughSeeds: - message strcharinfo(0), $@halloween_num_seeds + " should be enough seeds for Oscar. And this pumpkin gas gets too bad to stand it any longer..."; + message strcharinfo(0), "Pumpkin : " + $@halloween_num_seeds + " should be enough seeds for Oscar. And this pumpkin gas gets too bad to stand it any longer..."; set Quest_Halloween, 2; // Reset this to get the message for the "heavy" poison set @discover_poisonous_pumpkin, 0; - end; + goto L_Destroy; L_HeavyPoison: if (@discover_poisonous_pumpkin == 0) goto L_HeavyPoison0; if (@discover_poisonous_pumpkin == 1) goto L_HeavyPoison1; - if (@discover_poisonous_pumpkin > 1) - goto L_HeavyPoison2; - end; + goto L_HeavyPoison2; L_HeavyPoison0: set @discover_poisonous_pumpkin, @discover_poisonous_pumpkin + 1; - message strcharinfo(0), "Ouch, this pumpkin is totally poisonous! Let's get away from them!"; + message strcharinfo(0), "Pumpkin : Ouch, this pumpkin is totally poisonous! Let's get away from them!"; misceffect FX_PUMPKIN_EXPLOSION, strcharinfo(0); heal -150,0; sc_start sc_poison, 1, 60; - end; + goto L_Destroy; L_HeavyPoison1: set @discover_poisonous_pumpkin, @discover_poisonous_pumpkin + 1; - message strcharinfo(0), "This is really awful! I should not touch them!"; + message strcharinfo(0), "Pumpkin : This is really awful! I should not touch them!"; misceffect FX_PUMPKIN_EXPLOSION, strcharinfo(0); heal -350,0; sc_start sc_poison, 1, 120; - end; + goto L_Destroy; L_HeavyPoison2: set @discover_poisonous_pumpkin, @discover_poisonous_pumpkin + 1; misceffect FX_PUMPKIN_EXPLOSION, strcharinfo(0); heal -Hp, 0; + goto L_Destroy; + +OnAppear: + fakenpcname strnpcinfo(0), strnpcinfo(0), 1063; // switch npc id to 1063 end; +L_Destroy: + set .nodes[.i], get(.nodes[.i], "_N-Pumpkin") - 1, "_N-Pumpkin"; // tell the puppeteer we lost an egg + destroy; + + +////////////////////////////////// +// puppeteer logic below + +S_MakeNode: + set .nID, .nID + 1; // give the node an id + set .@name$, "#_Pkin" + chr(3) + .nID; + goto S_FindXY; + +S_FindXY: + set .@x, rand(.x1[.i], .x2[.i]); + set .@y, rand(.y1[.i], .y2[.i]); + if (iscollision(.m$[.i], .@x, .@y) == 1) + goto S_FindXY; + goto S_ReallySpawn; + +S_ReallySpawn: + set .@p, puppet(.m$[.i], .@x, .@y, .@name$, 32767); // spawn the node + set .i, .i, .@p; // tell the puppet what object contains it + set .@timer, if_then_else(.done_initial[.i], rand(.death_t/2, .death_t), 0); // timer depends on if first spawn or if respawned after death + addnpctimer .@timer, .@name$+"::OnAppear"; // we spawn the node instantly but it only appears after the timer + if (.nID == 2147483647) + set .nID, 0; // start over if id = 0x7FFFFFFF + return; + +S_IterateObjects: + if (.min_nodes[.i] == 0) + set .min_nodes[.i], (.min * min(1, ((.x2[.i] - .x1[.i]) * (.y2[.i] - .y1[.i])) / .divisor)); + if (.max_nodes[.i] == 0) + set .max_nodes[.i], (.max * max(1, ((.x2[.i] - .x1[.i]) * (.y2[.i] - .y1[.i])) / .divisor)); + + if (.nodes[.i] >= .max_nodes[.i]) + goto S_NextObject; + + set .nodes[.i], .nodes[.i] + 1; + callsub S_MakeNode; + if (.nodes[.i] < if_then_else(.done_initial[.i], .min_nodes[.i], .max_nodes[.i])) + goto S_IterateObjects; + goto S_NextObject; + +S_NextObject: + set .done_initial[.i], 1; + if (.i >= (.count - 1)) + goto S_Return; + set .i, .i + 1; // object iterator++ + goto S_IterateObjects; + +S_Return: + return; + +OnHeartbeat: + set .i, 1; // object iterator + freeloop 1; + callsub S_IterateObjects; + freeloop 0; + addnpctimer .spawn_t, strnpcinfo(0) + "::OnHeartbeat"; // heartbeat + end; + +OnMaybeStart: + if (.x1[1] == 0) + end; + set .min, 0; // relative min number of nodes per object => (min * (((x2 - x1) * (y2 - y1)) / divisor)) + set .max, 5; // relative max number of nodes per object => (max * (((x2 - x1) * (y2 - y1)) / divisor)) + set .divisor, 32; // see .min & .max ^ + set .count, getarraysize(.x1); // number of nodes objects in TSX + set .spawn_t, 18000; // heartbeat rate + set .death_t, 40000; // rand(timer/2, timer) before a node appears + if (.started) + end; + set .started, 1; + addnpctimer 10000, strnpcinfo(0)+"::OnHeartbeat"; // first heartbeat + end; } diff --git a/world/map/npc/055-3/_import.txt b/world/map/npc/055-3/_import.txt index b1073d34..82962c3f 100644 --- a/world/map/npc/055-3/_import.txt +++ b/world/map/npc/055-3/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 055-3 npc: npc/055-3/_mobs.txt +npc: npc/055-3/_nodes.txt npc: npc/055-3/_warps.txt npc: npc/055-3/mapflags.txt diff --git a/world/map/npc/055-3/_mobs.txt b/world/map/npc/055-3/_mobs.txt index bc14b844..686b2172 100644 --- a/world/map/npc/055-3/_mobs.txt +++ b/world/map/npc/055-3/_mobs.txt @@ -1,47 +1,11 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Cave mobs -055-3,45,44,20,14|monster|RedSlime|1008,10,10000ms,60000ms,Mob055-3::On1008 -055-3,0,0,1,1|monster|Bat|1017,20,10000ms,45000ms,Mob055-3::On1017 -055-3,53,75,28,40|monster|YellowSlime|1007,10,10000ms,60000ms,Mob055-3::On1007 -055-3,0,0,1,1|monster|BlackScorpion|1009,8,10000ms,35000ms,Mob055-3::On1009 -055-3,0,0,1,1|monster|Spider|1012,8,10000ms,35000ms,Mob055-3::On1012 -055-3,0,0,1,1|monster|Snake|1010,3,10000ms,20000ms,Mob055-3::On1010 -055-3,46,44,14,18|monster|Spider|1012,3,50000ms,100000ms,Mob055-3::On1012 -055-3,52,78,36,23|monster|BlackScorpion|1009,3,50000ms,100000ms,Mob055-3::On1009 - - -055-3,0,0,0|script|Mob055-3|32767 -{ - end; - -On1007: - set @mobID, 1007; - callfunc "MobPoints"; - end; - -On1008: - set @mobID, 1008; - callfunc "MobPoints"; - end; - -On1009: - set @mobID, 1009; - callfunc "MobPoints"; - end; - -On1010: - set @mobID, 1010; - callfunc "MobPoints"; - end; - -On1012: - set @mobID, 1012; - callfunc "MobPoints"; - end; - -On1017: - set @mobID, 1017; - callfunc "MobPoints"; - end; -} +055-3,45,44,20,14|monster|RedSlime|1008,10,10000ms,60000ms +055-3,0,0,1,1|monster|Bat|1017,20,10000ms,45000ms +055-3,53,75,28,40|monster|YellowSlime|1007,10,10000ms,60000ms +055-3,0,0,1,1|monster|BlackScorpion|1009,8,10000ms,35000ms +055-3,0,0,1,1|monster|Spider|1012,8,10000ms,35000ms +055-3,0,0,1,1|monster|Snake|1010,3,10000ms,20000ms +055-3,46,44,14,18|monster|Spider|1012,3,50000ms,100000ms +055-3,52,78,36,23|monster|BlackScorpion|1009,3,50000ms,100000ms diff --git a/world/map/npc/055-3/_nodes.txt b/world/map/npc/055-3/_nodes.txt new file mode 100644 index 00000000..ed02d5dc --- /dev/null +++ b/world/map/npc/055-3/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Cave nodes + +// (no nodes) diff --git a/world/map/npc/056-2/_import.txt b/world/map/npc/056-2/_import.txt index 4a48c0f5..79dda260 100644 --- a/world/map/npc/056-2/_import.txt +++ b/world/map/npc/056-2/_import.txt @@ -2,6 +2,7 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 056-2 npc: npc/056-2/_mobs.txt +npc: npc/056-2/_nodes.txt npc: npc/056-2/_warps.txt npc: npc/056-2/barrier.txt npc: npc/056-2/mapflags.txt diff --git a/world/map/npc/056-2/_mobs.txt b/world/map/npc/056-2/_mobs.txt index 267e0d8a..487fdc8d 100644 --- a/world/map/npc/056-2/_mobs.txt +++ b/world/map/npc/056-2/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Mirak's House mobs - - -056-2,0,0,0|script|Mob056-2|32767 -{ - end; -} diff --git a/world/map/npc/056-2/_nodes.txt b/world/map/npc/056-2/_nodes.txt new file mode 100644 index 00000000..597f2336 --- /dev/null +++ b/world/map/npc/056-2/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Mirak's House nodes + +// (no nodes) diff --git a/world/map/npc/057-1/_import.txt b/world/map/npc/057-1/_import.txt index 5ccd6889..2a668bd7 100644 --- a/world/map/npc/057-1/_import.txt +++ b/world/map/npc/057-1/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: 057-1 npc: npc/057-1/_mobs.txt +npc: npc/057-1/_nodes.txt npc: npc/057-1/_warps.txt npc: npc/057-1/mapflags.txt diff --git a/world/map/npc/057-1/_mobs.txt b/world/map/npc/057-1/_mobs.txt index 5988ce83..865607ee 100644 --- a/world/map/npc/057-1/_mobs.txt +++ b/world/map/npc/057-1/_mobs.txt @@ -1,82 +1,21 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Woodland mobs -057-1,0,0,0,0|monster|MauvePlant|1029,5,45000ms,45000ms,Mob057-1::On1029 -057-1,0,0,0,0|monster|CobaltPlant|1030,3,10000ms,65000ms,Mob057-1::On1030 -057-1,0,0,0,0|monster|GambogePlant|1031,5,10000ms,45000ms,Mob057-1::On1031 -057-1,0,0,0,0|monster|AlizarinPlant|1032,7,10000ms,70000ms,Mob057-1::On1032 -057-1,0,0,0,0|monster|Mouboo|1028,14,10000ms,45000ms,Mob057-1::On1028 -057-1,95,42,29,9|monster|Butterfly|1055,3,10000ms,40000ms,Mob057-1::On1055 -057-1,25,48,11,46|monster|Silkworm|1035,7,10000ms,15000ms,Mob057-1::On1035 -057-1,99,40,22,16|monster|PinkFlower|1014,2,10000ms,45000ms,Mob057-1::On1014 -057-1,100,30,19,11|monster|Butterfly|1055,2,10000ms,40000ms,Mob057-1::On1055 -057-1,83,64,12,12|monster|Butterfly|1055,2,10000ms,40000ms,Mob057-1::On1055 -057-1,59,34,8,11|monster|Butterfly|1055,2,10000ms,40000ms,Mob057-1::On1055 -057-1,32,45,8,11|monster|Butterfly|1055,2,10000ms,40000ms,Mob057-1::On1055 -057-1,144,35,12,12|monster|Butterfly|1055,2,10000ms,40000ms,Mob057-1::On1055 -057-1,104,67,12,11|monster|PinkFlower|1014,2,10000ms,45000ms,Mob057-1::On1014 -057-1,135,53,12,11|monster|PinkFlower|1014,2,10000ms,45000ms,Mob057-1::On1014 -057-1,0,0,0,0|monster|SpikyMushroom|1019,10,10000ms,45000ms,Mob057-1::On1019 -057-1,0,0,0,0|monster|CloverPatch|1037,3,10000ms,180000ms,Mob057-1::On1037 -057-1,27,46,14,52|monster|Squirrel|1038,6,10000ms,50000ms,Mob057-1::On1038 - - -057-1,0,0,0|script|Mob057-1|32767 -{ - end; - -On1014: - set @mobID, 1014; - callfunc "MobPoints"; - end; - -On1019: - set @mobID, 1019; - callfunc "MobPoints"; - end; - -On1028: - set @mobID, 1028; - callfunc "MobPoints"; - end; - -On1029: - set @mobID, 1029; - callfunc "MobPoints"; - end; - -On1030: - set @mobID, 1030; - callfunc "MobPoints"; - end; - -On1031: - set @mobID, 1031; - callfunc "MobPoints"; - end; - -On1032: - set @mobID, 1032; - callfunc "MobPoints"; - end; - -On1035: - set @mobID, 1035; - callfunc "MobPoints"; - end; - -On1037: - set @mobID, 1037; - callfunc "MobPoints"; - end; - -On1038: - set @mobID, 1038; - callfunc "MobPoints"; - end; - -On1055: - set @mobID, 1055; - callfunc "MobPoints"; - end; -} +057-1,0,0,0,0|monster|MauvePlant|1029,5,45000ms,45000ms +057-1,0,0,0,0|monster|CobaltPlant|1030,3,10000ms,65000ms +057-1,0,0,0,0|monster|GambogePlant|1031,5,10000ms,45000ms +057-1,0,0,0,0|monster|AlizarinPlant|1032,7,10000ms,70000ms +057-1,0,0,0,0|monster|Mouboo|1028,14,10000ms,45000ms +057-1,95,42,29,9|monster|Butterfly|1055,3,10000ms,40000ms +057-1,25,48,11,46|monster|Silkworm|1035,7,10000ms,15000ms +057-1,99,40,22,16|monster|PinkFlower|1014,2,10000ms,45000ms +057-1,100,30,19,11|monster|Butterfly|1055,2,10000ms,40000ms +057-1,83,64,12,12|monster|Butterfly|1055,2,10000ms,40000ms +057-1,59,34,8,11|monster|Butterfly|1055,2,10000ms,40000ms +057-1,32,45,8,11|monster|Butterfly|1055,2,10000ms,40000ms +057-1,144,35,12,12|monster|Butterfly|1055,2,10000ms,40000ms +057-1,104,67,12,11|monster|PinkFlower|1014,2,10000ms,45000ms +057-1,135,53,12,11|monster|PinkFlower|1014,2,10000ms,45000ms +057-1,0,0,0,0|monster|SpikyMushroom|1019,10,10000ms,45000ms +057-1,0,0,0,0|monster|CloverPatch|1037,3,10000ms,180000ms +057-1,27,46,14,52|monster|Squirrel|1038,6,10000ms,50000ms diff --git a/world/map/npc/057-1/_nodes.txt b/world/map/npc/057-1/_nodes.txt new file mode 100644 index 00000000..3bc0c2e9 --- /dev/null +++ b/world/map/npc/057-1/_nodes.txt @@ -0,0 +1,16 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Woodland nodes + +057-1,0,0,0|script|Node057-1|32767 +{ + end; +OnInit: + setarray .m$, "_N-Pumpkin", "057-1"; + setarray .x1, "_N-Pumpkin", 25; + setarray .y1, "_N-Pumpkin", 25; + setarray .x2, "_N-Pumpkin", 35; + setarray .y2, "_N-Pumpkin", 37; + setarray .id, "_N-Pumpkin", 0; + donpcevent "_N-Pumpkin::OnMaybeStart"; + destroy; +} diff --git a/world/map/npc/annuals/fathertime.txt b/world/map/npc/annuals/fathertime.txt index 6d61f446..29406f63 100644 --- a/world/map/npc/annuals/fathertime.txt +++ b/world/map/npc/annuals/fathertime.txt @@ -6,17 +6,13 @@ OnInit: if (debug >= 2) end; - goto L_StartTimer; - -L_StartTimer: - setnpctimer 0; - initnpctimer; + donpcevent strnpcinfo(0) + "::OnTimer20000"; end; OnTimer20000: - setnpctimer 0; donpcevent "#XmasConfig::OnCommandRestartQuest"; donpcevent "#HalloweenConfig::OnCommandRestartQuest"; + donpcevent "Easter Eggs::OnCheckEaster"; initnpctimer; end; } diff --git a/world/map/npc/annuals/halloween/debug.txt b/world/map/npc/annuals/halloween/debug.txt index cbc918e2..8f3d066e 100644 --- a/world/map/npc/annuals/halloween/debug.txt +++ b/world/map/npc/annuals/halloween/debug.txt @@ -42,7 +42,6 @@ L_LastReset: goto L_Debug; L_HalloweenTimeKey: - if (getgmlevel() < 20) goto L_Close; mes "Halloween Time Key Change."; mes "Start Month?"; input @halloween_time_key_smonth; diff --git a/world/map/npc/annuals/xmas/debug.txt b/world/map/npc/annuals/xmas/debug.txt index f0170a0d..6c513ff1 100644 --- a/world/map/npc/annuals/xmas/debug.txt +++ b/world/map/npc/annuals/xmas/debug.txt @@ -96,7 +96,6 @@ L_Reset: goto L_Close; L_XmasTimeKey: - if (getgmlevel() < 20) goto L_Close; mes "Xmas Time Key Change."; mes "Start Month?"; input @xmas_time_key_smonth; diff --git a/world/map/npc/botcheck/_import.txt b/world/map/npc/botcheck/_import.txt index c54696ac..85374e51 100644 --- a/world/map/npc/botcheck/_import.txt +++ b/world/map/npc/botcheck/_import.txt @@ -2,5 +2,6 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. map: botcheck npc: npc/botcheck/_mobs.txt +npc: npc/botcheck/_nodes.txt npc: npc/botcheck/_warps.txt npc: npc/botcheck/mapflags.txt diff --git a/world/map/npc/botcheck/_mobs.txt b/world/map/npc/botcheck/_mobs.txt index 91d023cd..66a9726f 100644 --- a/world/map/npc/botcheck/_mobs.txt +++ b/world/map/npc/botcheck/_mobs.txt @@ -1,9 +1,3 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Botcheck Area mobs - - -botcheck,0,0,0|script|Mobbotcheck|32767 -{ - end; -} diff --git a/world/map/npc/botcheck/_nodes.txt b/world/map/npc/botcheck/_nodes.txt new file mode 100644 index 00000000..e72a6332 --- /dev/null +++ b/world/map/npc/botcheck/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Botcheck Area nodes + +// (no nodes) diff --git a/world/map/npc/commands/README.md b/world/map/npc/commands/README.md deleted file mode 100644 index b1f3c401..00000000 --- a/world/map/npc/commands/README.md +++ /dev/null @@ -1,140 +0,0 @@ -# Commands To-do -- [ ] help -- [ ] setup -- [ ] charwarp -- [ ] warp -- [ ] where -- [ ] goto -- [ ] npc -- [ ] jump -- [ ] who -- [ ] whogroup -- [ ] whomap -- [ ] whomapgroup -- [ ] whogm -- [ ] save -- [ ] return -- [ ] load -- [ ] speed -- [ ] storage -- [ ] option -- [ ] hide -- [ ] die -- [ ] kill -- [ ] alive -- [ ] kami -- [ ] heal -- [ ] item -- [ ] itemreset -- [ ] itemcheck -- [ ] blvl -- [ ] jlvl -- [ ] pvpoff -- [ ] exprate -- [ ] pvpon -- [ ] model -- [ ] spawn -- [ ] killmonster -- [ ] killmonster2 -- [ ] gat -- [ ] packet -- [ ] stpoint -- [ ] skpoint -- [X] zeny -- [ ] str -- [ ] agi -- [ ] vit -- [ ] int -- [ ] dex -- [ ] luk -- [ ] recall -- [ ] revive -- [ ] charstats -- [ ] charstatsall -- [ ] charoption -- [ ] charsave -- [ ] doom -- [ ] doommap -- [ ] raise -- [ ] raisemap -- [ ] charbaselvl -- [ ] charjlvl -- [ ] kick -- [ ] kickall -- [ ] questskill -- [ ] charquestskill -- [ ] lostskill -- [ ] charlostskill -- [ ] party -- [ ] mapexit -- [ ] idsearch -- [ ] mapmove -- [ ] broadcast -- [ ] localbroadcast -- [ ] recallall -- [ ] charskreset -- [ ] charstreset -- [ ] charreset -- [ ] charmodel -- [ ] charskpoint -- [ ] charstpoint -- [X] charzeny -- [ ] mapinfo -- [ ] dye -- [ ] ccolor -- [ ] hairstyle -- [ ] haircolor -- [ ] allstats -- [ ] charchangesex -- [ ] block -- [ ] unblock -- [ ] ban -- [ ] unban -- [ ] partyspy -- [ ] partyrecall -- [ ] enablenpc -- [ ] disablenpc -- [ ] servertime -- [ ] chardelitem -- [ ] listnearby -- [ ] email -- [ ] effect -- [ ] charitemlist -- [ ] charstoragelist -- [ ] addwarp -- [ ] pvp -- [ ] npcmove -- [ ] charpvp -- [ ] chareffect -- [ ] dropall -- [ ] chardropall -- [ ] storeall -- [ ] charstoreall -- [ ] rain -- [ ] snow -- [ ] sakura -- [ ] fog -- [ ] leaves -- [ ] summon -- [ ] adjgmlvl -- [ ] adjcmdlvl -- [ ] trade -- [ ] charwipe -- [ ] setmagic -- [ ] magicinfo -- [ ] log -- [ ] l -- [ ] tee -- [ ] t -- [ ] invisible -- [ ] visible -- [ ] hugo -- [ ] linus -- [ ] sp-info -- [ ] sp-focus -- [ ] sp-unfocus -- [ ] skill-learn -- [ ] wgm -- [ ] ipcheck -- [ ] doomspot -- [ ] source diff --git a/world/map/npc/commands/_atcommand_local.txt.example b/world/map/npc/commands/_atcommand_local.txt.example index a195d580..ec1fae51 100644 --- a/world/map/npc/commands/_atcommand_local.txt.example +++ b/world/map/npc/commands/_atcommand_local.txt.example @@ -3,10 +3,25 @@ end; OnInit: - // define permissions here + // command permissions here set .zeny, G_ADMIN; + set .charzeny, G_SYSOP; + set .debug, G_ADMIN; + set .changesex, G_DEV; + set .charchangesex, G_GM; + set .class, G_DEV; + set .charclass, G_EVENT; + + // special permissions below + set .lounge, G_TESTER; // level to enter the GM Lounge & talk to Numa + set .killthegm, G_EVENT; // this is both for the event and the magic gm top hat + set .holiday, G_DEV; // holiday debug (xmas, halloween, ...) + set .event, G_EVENT; // event debug (open portals, disguise, ...) + set .scheduled, G_DEV; // scheduled broadcasts (schedule broadcast, stop broadcast, trigger broadcast, ...) + set .motd, G_DEV; // motd debug (show/hide motd) + + // very specific debug menus + set .valia, G_DEV; // illia quest debug info - // permissions for events - set .killthegm, G_EVENT; end; } diff --git a/world/map/npc/commands/_import.txt b/world/map/npc/commands/_import.txt index 7efe4111..c0630138 100644 --- a/world/map/npc/commands/_import.txt +++ b/world/map/npc/commands/_import.txt @@ -2,3 +2,8 @@ npc: npc/commands/_procedures.txt npc: npc/commands/_atcommand_local.txt npc: npc/commands/zeny.txt npc: npc/commands/marry.txt +npc: npc/commands/debug.txt +npc: npc/commands/changesex.txt +npc: npc/commands/class.txt +npc: npc/commands/pullrabbit.txt +npc: npc/commands/numa.txt diff --git a/world/map/npc/commands/_procedures.txt b/world/map/npc/commands/_procedures.txt index 77c1c7e9..732b496f 100644 --- a/world/map/npc/commands/_procedures.txt +++ b/world/map/npc/commands/_procedures.txt @@ -1,5 +1,5 @@ // ARGV Splitter -// takes @args$ and splits it properly so that '@cmd "foo bar" baz' is ['foo bar','baz'] instead of ['foo','bar','baz'] +// takes @args$ and splits it properly so that '@cmd "foo bar" baz' is ['foo bar','baz'] instead of ['"foo','bar"','baz'] // input: @args$ (string) // output: @argv$ (array) and @argv (array) function|script|argv_splitter diff --git a/world/map/npc/commands/changesex.txt b/world/map/npc/commands/changesex.txt new file mode 100644 index 00000000..ba08783d --- /dev/null +++ b/world/map/npc/commands/changesex.txt @@ -0,0 +1,34 @@ +-|script|@changesex|32767 +{ + callfunc "argv_splitter"; + set .@n$, if_then_else(@argv$[1] != "", "char", "") + "changesex"; + if (GM < get(.changesex, "GM") && GM < G_SYSOP) goto L_GM; // check if you can use it on self + set .@target_id, BL_ID; + if (@argv$[1] != "") set .@target_id, getcharid(3, @argv$[1]); + if (@argv$[1] != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self + if (@argv$[1] != "" && GM < get(.charchangesex, "GM") && GM < G_SYSOP) goto L_GM; // when target is not self, use charchangesex permission + set .@s, 3; // default to non-binary + if (@argv$[0] == "M" || @argv$[0] == "m") set .@s, 1; + if (@argv$[0] == "F" || @argv$[0] == "f") set .@s, 0; + set Sex, .@s, .@target_id; + goto L_Success; + +L_Failed: + // XXX: should we allow GMs to change sex of users that are not logged in? + message strcharinfo(0), .@n$+" : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?"; + end; + +L_Success: + gmlog "@"+.@n$+" " + @args$; + message strcharinfo(0), .@n$+" : The operation succeeded."; + end; + +L_GM: + message strcharinfo(0), .@n$+" : GM command is level "+ get(if_then_else(@argv$[1] != "", .charchangesex, .changesex), "GM") +", but you are level " + GM; + end; + +OnInit: + registercmd chr(ATCMD_SYMBOL) + "changesex", strnpcinfo(0); + registercmd chr(ATCMD_SYMBOL) + "charchangesex", strnpcinfo(0); + end; +} diff --git a/world/map/npc/commands/class.txt b/world/map/npc/commands/class.txt new file mode 100644 index 00000000..f9275591 --- /dev/null +++ b/world/map/npc/commands/class.txt @@ -0,0 +1,33 @@ +-|script|@class|32767 +{ + callfunc "argv_splitter"; + set .@n$, if_then_else(@argv$[1] != "", "char", "") + "class"; + if (GM < get(.class, "GM") && GM < G_SYSOP) goto L_GM; // check if you can use it on self + set .@target_id, BL_ID; + if (@argv$[1] != "") set .@target_id, getcharid(3, @argv$[1]); + if (@argv$[1] != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self + if (@argv$[1] != "" && GM < get(.charclass, "GM") && GM < G_SYSOP) goto L_GM; // when target is not self, use charclass permission + set .@c, 1; // default to human + if (@argv[0] >= 0 || @argv[0] <= 32767) set .@c, @argv[0]; + set Class, .@c, .@target_id; + goto L_Success; + +L_Failed: + // XXX: should we allow GMs to change class of users that are not logged in? + message strcharinfo(0), .@n$+" : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?"; + end; + +L_Success: + gmlog "@"+.@n$+" " + @args$; + message strcharinfo(0), .@n$+" : The operation succeeded."; + end; + +L_GM: + message strcharinfo(0), .@n$+" : GM command is level "+ get(if_then_else(@argv$[1] != "", .charclass, .class), "GM") +", but you are level " + GM; + end; + +OnInit: + registercmd chr(ATCMD_SYMBOL) + "class", strnpcinfo(0); + registercmd chr(ATCMD_SYMBOL) + "charclass", strnpcinfo(0); + end; +} diff --git a/world/map/npc/commands/debug.txt b/world/map/npc/commands/debug.txt new file mode 100644 index 00000000..7b653b26 --- /dev/null +++ b/world/map/npc/commands/debug.txt @@ -0,0 +1,992 @@ +// Authors: alastrim, Jenalya, Ali-G + +function|script|Debug +{ + if(!@debug_npc) goto L_Begin; + mes "The debug NPCs have been deprecated. Please use this command instead:"; + mes ""; + mes "%%E ##a@debug##0"; + set @debug_npc, 0; + goto L_Close; + +L_Begin: + set @debug_mask, 65535; + set @debug_shift, 0; + set @mexp, ((MAGIC_EXPERIENCE & @debug_mask) >> @debug_shift); + mes "What do you want to do?"; + menu + "Change my level.", L_Level, + "Change my stats.", L_Status, + "Change my basic skills.", L_BasicSkills, + "Change my focus skills.", L_FocusSkills, + "Change my magic skills.", L_MagicSkills, + "Add everything.", L_AddAll, + "Reset everything.", L_ResetAll, + "Close.", L_Close; + +L_Level: + mes "What level do you want to be (min: 1 - max: 99)?"; + input @lvl; + if (@lvl < 1) + goto L_LevelTooLow; + if (@lvl > 99) + goto L_LevelTooHigh; + if (BaseLevel == @lvl) + goto L_SameLevel; + set BaseLevel, @lvl; + resetstatus; + mes "You are now level " + BaseLevel + "."; + goto L_Begin; + +L_LevelTooLow: + mes "Bad choice. Minimum level is 1."; + next; + goto L_Begin; + +L_LevelTooHigh: + mes "Bad choice. Maximum level is 99."; + next; + goto L_Begin; + +L_SameLevel: + mes "You already are level " + @lvl + "."; + next; + goto L_Begin; + +L_Status: + mes "What do you want to do?"; + menu + "Set all of my stats myself.", L_ChangeStrength, + "Set one of my stats myself.", L_ChangeSingleStat, + "Get maximum points in all stats.", L_ChangeAllStats, + "Reset my status points.", L_ResetStatusPoints, + "Back to the main menu.", L_Begin, + "Close.", L_Close; + +L_ChangeAllStats: + set Str, 99; + set Agi, 99; + set Vit, 99; + set Int, 99; + set Dex, 99; + set Luk, 99; + mes "You now have 99 in all stats."; + next; + goto L_Begin; + +L_ChangeStrength: + mes "How much strength do you want to have (min: 1 - max: 99)?"; + input @str; + if (@str < 1) + goto L_StatTooLow; + if (@str > 99) + goto L_StatTooHigh; + set Str, @str; + goto L_ChangeAgility; + +L_ChangeAgility: + mes "How much agility do you want to have (min: 1 - max: 99)?"; + input @agi; + if (@agi < 1) + goto L_StatTooLow; + if (@agi > 99) + goto L_StatTooHigh; + set Agi, @agi; + goto L_ChangeVitality; + +L_ChangeVitality: + mes "How much vitality do you want to have (min: 1 - max: 99)?"; + input @vit; + if (@vit < 1) + goto L_StatTooLow; + if (@vit > 99) + goto L_StatTooHigh; + set Vit, @vit; + goto L_ChangeIntelligence; + +L_ChangeIntelligence: + mes "How much intelligence do you want to have (min: 1 - max: 99)?"; + input @int; + if (@int < 1) + goto L_StatTooLow; + if (@int > 99) + goto L_StatTooHigh; + set Int, @int; + goto L_ChangeDexterity; + +L_ChangeDexterity: + mes "How much dexterity do you want to have (min: 1 - max: 99)?"; + input @dex; + if (@dex < 1) + goto L_StatTooLow; + if (@dex > 99) + goto L_StatTooHigh; + set Dex, @dex; + goto L_ChangeLuck; + +L_ChangeLuck: + mes "How much luck do you want to have (min: 1 - max: 99)?"; + input @luk; + if (@luk < 1) + goto L_StatTooLow; + if (@luk > 99) + goto L_StatTooHigh; + set Luk, @luk; + mes "You now have " + Str + " in strength."; + mes "You now have " + Agi + " in agility."; + mes "You now have " + Vit + " in vitality."; + mes "You now have " + Int + " in intelligence."; + mes "You now have " + Dex + " in dexterity."; + mes "You now have " + Luk + " in luck."; + next; + goto L_Begin; + +L_StatTooLow: + mes "Bad choice. Minimum stat value is 1. Aborting."; + next; + goto L_Status; + +L_StatTooHigh: + mes "Bad choice. Maximum stat value is 99. Aborting."; + next; + goto L_Status; + +L_ChangeSingleStat: + mes "Which stat do you want to change?"; + menu + "Strength.", L_ChangeStrengthSingle, + "Agility.", L_ChangeAgilitySingle, + "Vitality.", L_ChangeVitalitySingle, + "Intelligence.", L_ChangeIntelligenceSingle, + "Dexterity.", L_ChangeDexteritySingle, + "Luck.", L_ChangeLuckSingle, + "Back to the main menu.", L_Begin, + "Close.", L_Close; + +L_ChangeStrengthSingle: + mes "How much strength do you want to have (min: 1 - max: 99)?"; + input @str; + if (@str < 1) + goto L_StatTooLow; + if (@str > 99) + goto L_StatTooHigh; + set Str, @str; + mes "You now have " + Str + " in strength."; + next; + goto L_Begin; + +L_ChangeAgilitySingle: + mes "How much agility do you want to have (min: 1 - max: 99)?"; + input @agi; + if (@agi < 1) + goto L_StatTooLow; + if (@agi > 99) + goto L_StatTooHigh; + set Agi, @agi; + mes "You now have " + Agi + " in agility."; + next; + goto L_Begin; + +L_ChangeVitalitySingle: + mes "How much vitality do you want to have (min: 1 - max: 99)?"; + input @vit; + if (@vit < 1) + goto L_StatTooLow; + if (@vit > 99) + goto L_StatTooHigh; + set Vit, @vit; + mes "You now have " + Vit + " in vitality."; + next; + goto L_Begin; + +L_ChangeIntelligenceSingle: + mes "How much intelligence do you want to have (min: 1 - max: 99)?"; + input @int; + if (@int < 1) + goto L_StatTooLow; + if (@int > 99) + goto L_StatTooHigh; + set Int, @int; + mes "You now have " + Int + " in intelligence."; + next; + goto L_Begin; + +L_ChangeDexteritySingle: + mes "How much dexterity do you want to have (min: 1 - max: 99)?"; + input @dex; + if (@dex < 1) + goto L_StatTooLow; + if (@dex > 99) + goto L_StatTooHigh; + set Dex, @dex; + mes "You now have " + Dex + " in dexterity."; + next; + goto L_Begin; + +L_ChangeLuckSingle: + mes "How much luck do you want to have (min: 1 - max: 99)?"; + input @luk; + if (@luk < 1) + goto L_StatTooLow; + if (@luk > 99) + goto L_StatTooHigh; + set Luk, @luk; + mes "You now have " + Luk + " in luck."; + next; + goto L_Begin; + +L_ResetStatusPoints: + resetstatus; + mes "Stats successfully resetted."; + next; + goto L_Begin; + +L_BasicSkills: + set @emote, getskilllv(SKILL_EMOTE); + set @trade, getskilllv(SKILL_TRADE); + set @party, getskilllv(SKILL_PARTY); + menu + "Overview of my basic skills.", L_BasicSkillsOverview, + "Add basic skills.", L_AddBasicSkills, + "Reset basic skills.", L_ResetBasicSkills, + "Back to main menu.", L_Begin, + "Close.", L_Close; + +L_BasicSkillsOverview: + mes "Your level in the emote skill is " + @emote + "."; + mes "Your level in the trade skill is " + @trade + "."; + mes "Your level in the party skill is " + @party + "."; + next; + goto L_BasicSkills; + +L_AddBasicSkills: + menu + "Emote", L_ChangeEmoteSkill, + "Trade.", L_ChangeTradeSkill, + "Party.", L_ChangePartySkill, + "All basic skills to their maximum level.", L_AllBasicSkills, + "Back to the basic skills menu.", L_BasicSkills, + "Close.", L_Close; + +L_ChangeEmoteSkill: + mes "Your level in the emote skill is " + @emote + ". What do you want to do?"; + menu + "Get level 0.", L_Next, + "Get level 1.", L_ChangeEmoteSkill1; + +L_Next: + if (@menu == 1) + setskill SKILL_EMOTE, 0; + mes "Emote skill changed to level 0."; + next; + goto L_BasicSkills; + +L_ChangeEmoteSkill1: + setskill SKILL_EMOTE, 1; + mes "Emote skill changed to level 1."; + next; + goto L_BasicSkills; + +L_ChangeTradeSkill: + mes "Your level in the trade skill is " + @trade + ". What do you want to do?"; + menu + "Get level 0.", L_Next1, + "Get level 1.", L_ChangeTradeSkill1; + +L_Next1: + if (@menu == 1) + setskill SKILL_TRADE, 0; + mes "Trade skill changed to level 0."; + next; + goto L_BasicSkills; + +L_ChangeTradeSkill1: + setskill SKILL_TRADE, 1; + mes "Trade skill changed to level 1."; + next; + goto L_BasicSkills; + +L_ChangePartySkill: + mes "Your level in the party skill is " + @trade + ". What do you want to do?"; + menu + "Get level 0.", L_Next2, + "Get level 1.", L_ChangePartySkill1, + "Get level 2.", L_ChangePartySkill2; + +L_Next2: + if (@menu == 1) + setskill SKILL_PARTY, 0; + mes "Party skill changed to level 0."; + next; + goto L_BasicSkills; + +L_ChangePartySkill1: + setskill SKILL_PARTY, 1; + mes "Party skill changed to level 1."; + next; + goto L_BasicSkills; + +L_ChangePartySkill2: + setskill SKILL_PARTY, 2; + mes "Party skill changed to level 2."; + next; + goto L_BasicSkills; + +L_AllBasicSkills: + setskill SKILL_EMOTE, 1; + setskill SKILL_TRADE, 1; + setskill SKILL_PARTY, 2; + mes "Basic skills added."; + next; + goto L_BasicSkills; + +L_ResetBasicSkills: + setskill SKILL_EMOTE, 0; + setskill SKILL_TRADE, 0; + setskill SKILL_PARTY, 0; + mes "Basic skills removed."; + next; + goto L_BasicSkills; + +L_FocusSkills: + set @pool, getskilllv(SKILL_POOL); + set @mallard, getskilllv(SKILL_MALLARDS_EYE); + set @brawling, getskilllv(SKILL_BRAWLING); + set @speed, getskilllv(SKILL_SPEED); + set @poison, getskilllv(SKILL_RESIST_POISON); + set @astralsoul, getskilllv(SKILL_ASTRAL_SOUL); + set @raging, getskilllv(SKILL_RAGING); + menu + "Overview of my focus skills.", L_SeeFocusSkills, + "Focus or unfocus.", L_Unfocus, + "Add focus skills.", L_ChangeFocusSkills, + "Reset focus skills.", L_ResetFocusSkills, + "Back to the main menu.", L_Begin, + "Close.", L_Close; + +L_SeeFocusSkills: + cleararray @skilllist_name$[0], "", 8; + cleararray @skilllist_id[0], 0, 8; + cleararray @skilllist_count[0], 0, 8; + getactivatedpoolskilllist; + if (@skilllist_count == 0) + goto L_NotFocusedMessage; + if (@skilllist_count != 0) + mes "You are currently focused on the " + @skilllist_name$[@skilllist_count-1] + " skill."; + goto L_FocusSkills; + +L_NotFocusedMessage: + mes "You are not focused on any skill right now."; + goto L_FocusSkillsOverview; + +L_FocusSkillsOverview: + mes "Your focusing skill level is " + @pool + "."; + mes "Your mallard's eye skill level is " + @mallard + "."; + mes "Your brawling skill level is " + @brawling + "."; + mes "Your speed skill level is " + @speed + "."; + mes "Your resist poison skill level is " + @poison + "."; + mes "Your astral soul skill level is " + @astralsoul + "."; + mes "Your raging skill level is " + @raging + "."; + next; + goto L_FocusSkills; + +L_Unfocus: + cleararray @skilllist_name$[0], "", 8; + cleararray @skilllist_id[0], 0, 8; + cleararray @skilllist_count[0], 0, 8; + if (getskilllv(SKILL_POOL) == 0) + setskill SKILL_POOL, 1; + getactivatedpoolskilllist; + if (@skilllist_count == 0) + goto L_Focus; + getactivatedpoolskilllist; + if (@skilllist_count != 0) + goto L_AskUnfocus; + mes "You are not focused on a skill at the moment."; + goto L_FocusSkills; + +L_Focus: + cleararray @skilllist_name$[0], "", 8; + cleararray @skilllist_id[0], 0, 8; + cleararray @skilllist_count[0], 0, 8; + getunactivatedpoolskilllist; + if (@skilllist_count == 0) + goto L_NoFocusSkills; + set @skilllist_id[@skilllist_count], 0; + set @skilllist_name$[@skilllist_count], "Back to the focus skills menu."; + mes "You are not focused on any focus skill right now. Which one do you want to focus on?"; + menu + @skilllist_name$[0], L_MenuItems, + @skilllist_name$[1], L_MenuItems, + @skilllist_name$[2], L_MenuItems, + @skilllist_name$[3], L_MenuItems, + @skilllist_name$[4], L_MenuItems, + @skilllist_name$[5], L_MenuItems, + @skilllist_name$[6], L_MenuItems, + @skilllist_name$[7], L_MenuItems; + +L_MenuItems: + set @menu, @menu - 1; + poolskill @skilllist_id[@menu]; + goto L_FocusSkills; + +L_NoFocusSkills: + mes "You have no skills to focus on or unfocus from."; + goto L_FocusSkills; + +L_AskUnfocus: + mes "Unfocus " + @skilllist_name$[@skilllist_count-1] + "?"; + menu + "Yes.", L_Next3, + "No.", L_FocusSkills; + +L_Next3: + unpoolskill @skilllist_id[@skilllist_count-1]; + goto L_FocusSkills; + +L_ChangeFocusSkills: + menu + "Focusing.", L_ChangeFocusingSkill, + "Mallard's Eye.", L_ChangeMallardsEyeSkill, + "Brawling.", L_ChangeBrawlingSkill, + "Speed.", L_ChangeSpeedSkill, + "Resist Poison.", L_ChangeResistPoisonSkill, + "Astral Soul.", L_ChangeAstralSoulSkill, + "Raging.", L_ChangeRagingSkill, + "All focus skills to their maximum level.", L_AllFocusSkills, + "Back to the focus skills menu.", L_FocusSkills, + "Close.", L_Close; + +L_BadSkillLevel: + mes "Invalid skill level."; + next; + goto L_ChangeFocusSkills; + +L_ChangeFocusingSkill: + mes "Enter the level you want to be in this skill (min: 0 - max: 1)."; + input @lvl; + if (@lvl > 1) + goto L_BadSkillLevel; + setskill SKILL_POOL, @lvl; + next; + goto L_FocusSkills; + +L_ChangeMallardsEyeSkill: + mes "Enter the level you want to be in this skill (min: 0 - max: 9)."; + input @lvl; + if (@lvl > 9) + goto L_BadSkillLevel; + setskill SKILL_MALLARDS_EYE, @lvl; + next; + goto L_FocusSkills; + +L_ChangeBrawlingSkill: + mes "Enter the lvl you want to be in this skill (min: 0 - max: 9)."; + input @lvl; + if (@lvl > 9) + goto L_BadSkillLevel; + setskill SKILL_BRAWLING, @lvl; + next; + goto L_FocusSkills; + +L_ChangeSpeedSkill: + mes "Enter the lvl you want to be in this skill (min: 0 - max: 9)."; + input @lvl; + if (@lvl > 9) + goto L_BadSkillLevel; + setskill SKILL_SPEED, @lvl; + next; + goto L_FocusSkills; + +L_ChangeResistPoisonSkill: + mes "Enter the lvl you want to be in this skill (min: 0 - max: 9)."; + input @lvl; + if (@lvl > 9) + goto L_BadSkillLevel; + setskill SKILL_RESIST_POISON, @lvl; + next; + goto L_FocusSkills; + +L_ChangeAstralSoulSkill: + mes "Enter the lvl you want to be in this skill (min: 0 - max: 9)."; + input @lvl; + if (@lvl > 9) + goto L_BadSkillLevel; + setskill SKILL_ASTRAL_SOUL, @lvl; + next; + goto L_FocusSkills; + +L_ChangeRagingSkill: + mes "Enter the lvl you want to be in this skill (min: 0 - max: 9)."; + input @lvl; + if (@lvl > 9) + goto L_BadSkillLevel; + setskill SKILL_RAGING, @lvl; + next; + goto L_FocusSkills; + +L_AllFocusSkills: + setskill SKILL_POOL, 1; + setskill SKILL_MALLARDS_EYE, 9; + setskill SKILL_BRAWLING, 9; + setskill SKILL_SPEED, 9; + setskill SKILL_RESIST_POISON, 9; + setskill SKILL_ASTRAL_SOUL, 9; + setskill SKILL_RAGING, 9; + mes "Focus skills added."; + next; + goto L_FocusSkills; + +L_ResetFocusSkills: + setskill SKILL_POOL, 0; + setskill SKILL_MALLARDS_EYE, 0; + setskill SKILL_BRAWLING, 0; + setskill SKILL_SPEED, 0; + setskill SKILL_RESIST_POISON, 0; + setskill SKILL_ASTRAL_SOUL, 0; + setskill SKILL_RAGING, 0; + mes "Focus skills removed."; + next; + goto L_FocusSkills; + +L_MagicSkills: + set @general, getskilllv(SKILL_MAGIC); + set @life, getskilllv(SKILL_MAGIC_LIFE); + set @war, getskilllv(SKILL_MAGIC_WAR); + set @trans, getskilllv(SKILL_MAGIC_TRANSMUTE); + set @nature, getskilllv(SKILL_MAGIC_NATURE); + set @astral, getskilllv(SKILL_MAGIC_ASTRAL); + set @dark, getskilllv(SKILL_MAGIC_DARK); + menu + "Overview of my magical skills.", L_MagicSkillsOverview, + "Get magic skills.", L_ChangeMagicSkills, + "Get magic experience.", L_MagicExperience, + "All magic skills to their maximum level and maximum magic experience.", L_GetAllMagic, + "Reset magic skills and experience.", L_ResetMagicSkills, + "Back to the main menu.", L_Begin, + "Close.", L_Close; + +L_MagicSkillsOverview: + mes "Your current magic experience skill is " + @mexp + "."; + mes "Your level in the general magic skill is " + @general + "."; + mes "Your level in the life magic skill is " + @life + "."; + mes "Your level in the war magic skill is " + @war + "."; + mes "Your level in the transmutation magic skill is " + @trans + "."; + mes "Your level in the nature magic skill is " + @nature + "."; + mes "Your level in the astral magic skill is " + @astral + "."; + mes "Your level in the dark magic skill is " + @dark + "."; + next; + goto L_MagicSkills; + +L_MagicExperience: + mes "Your current magic experience is " + @mexp + "."; + if (@general == 0 + && @life == 0 + && @war == 0 + && @trans == 0 + && @nature == 0 + && @astral == 0 + && @dark == 0) + goto L_NoMagicSkills; + + goto L_ChangeMagicExperience; + +L_NoMagicSkills: + mes "You can't have magic experience, since you have no magic skills yet."; + goto L_MagicSkills; + +L_ChangeMagicExperience: + mes "Set the desired magic experience (min: 0 - max: 8000)."; + input @value; + if (@value < 0 || @value > 8000) + goto L_WrongMagicExperience; + set @mexp, @value; + callsub S_Update_Mask; + mes "You now have " + @mexp + " magic experience points."; + goto L_MagicSkills; + +L_WrongMagicExperience: + mes "Wrong value informed. Aborting."; + goto L_MagicSkills; + +L_ChangeMagicSkills: + menu + "General Magic.", L_ChangeGeneralMagicSkill, + "Life Magic.", L_ChangeLifeMagicSkill, + "War Magic.", L_ChangeWarMagicSkill, + "Transmutation Magic.", L_ChangeTransmutationMagicSkill, + "Nature Magic.", L_ChangeNatureMagicSkill, + "Astral Magic.", L_ChangeAstralMagicSkill, + "Dark Magic.", L_ChangeDarkMagicSkill, + "Back to the magic skills menu.", L_MagicSkills, + "Close.", L_Close; + +L_ChangeGeneralMagicSkill: + mes "Your level in the general magic skill is " + @general + ". What do you want to do?"; + menu + "Get level 0.", L_Next4, + "Get level 1.", L_ChangeGeneralMagicSkill1, + "Get level 2.", L_ChangeGeneralMagicSkill2; + +L_Next4: + if (@menu == 1) + setskill SKILL_MAGIC, 0; + mes "General Magic skill changed to level 0."; + next; + goto L_MagicSkills; + +L_ChangeGeneralMagicSkill1: + setskill SKILL_MAGIC, 1; + mes "General Magic skill changed to level 1."; + next; + goto L_MagicSkills; + +L_ChangeGeneralMagicSkill2: + setskill SKILL_MAGIC, 2; + if (@mexp < 100) + set @mexp, 100; + callsub S_Update_Mask; + mes "General Magic skill changed to level 2."; + next; + goto L_MagicSkills; + +L_ChangeLifeMagicSkill: + mes "Your level in the life magic skill is " + @life + ". What do you want to do?"; + menu + "Get level 0.", L_Next5, + "Get level 1.", L_ChangeLifeMagicSkill1, + "Get level 2.", L_ChangeLifeMagicSkill2; + +L_Next5: + if (@menu == 1) + setskill SKILL_MAGIC_LIFE, 0; + mes "Life Magic skill changed to level 0."; + next; + goto L_MagicSkills; + +L_ChangeLifeMagicSkill1: + setskill SKILL_MAGIC_LIFE, 1; + mes "Life Magic skill changed to level 1."; + next; + goto L_MagicSkills; + +L_ChangeLifeMagicSkill2: + setskill SKILL_MAGIC_LIFE, 2; + if (@mexp < 100) + set @mexp, 100; + callsub S_Update_Mask; + mes "Life Magic skill changed to level 2."; + next; + goto L_MagicSkills; + +L_ChangeWarMagicSkill: + mes "Your level in the war magic skill is " + @war + ". What do you want to do?"; + menu + "Get level 0.", L_Next6, + "Get level 1.", L_ChangeWarMagicSkill1, + "Get level 2.", L_ChangeWarMagicSkill2; + +L_Next6: + if (@menu == 1) + setskill SKILL_MAGIC_WAR, 0; + mes "War Magic skill changed to level 0."; + next; + goto L_MagicSkills; + +L_ChangeWarMagicSkill1: + setskill SKILL_MAGIC_WAR, 1; + mes "War Magic skill changed to level 1."; + next; + goto L_MagicSkills; + +L_ChangeWarMagicSkill2: + setskill SKILL_MAGIC_WAR, 2; + if (@mexp < 100) + set @mexp, 100; + callsub S_Update_Mask; + mes "War Magic skill changed to level 2."; + next; + goto L_MagicSkills; + +L_ChangeTransmutationMagicSkill: + mes "Your level in the transmutation magic skill is " + @trans + ". What do you want to do?"; + menu + "Get level 0.", L_Next7, + "Get level 1.", L_ChangeTransmutationMagicSkill1, + "Get level 2.", L_ChangeTransmutationMagicSkill2; + +L_Next7: + if (@menu == 1) + setskill SKILL_MAGIC_TRANSMUTE, 0; + mes "Transmutation Magic skill changed to level 0."; + next; + goto L_MagicSkills; + +L_ChangeTransmutationMagicSkill1: + setskill SKILL_MAGIC_TRANSMUTE, 1; + mes "Transmutation Magic skill changed to level 1."; + next; + goto L_MagicSkills; + +L_ChangeTransmutationMagicSkill2: + setskill SKILL_MAGIC_TRANSMUTE, 2; + if (@mexp < 100) + set @mexp, 100; + callsub S_Update_Mask; + mes "Transmutation Magic skill changed to level 2."; + next; + goto L_MagicSkills; + +L_ChangeNatureMagicSkill: + mes "Your level in the nature magic skill is " + @nature + ". What do you want to do?"; + menu + "Get level 0.", L_Next8, + "Get level 1.", L_ChangeNatureMagicSkill1, + "Get level 2.", L_ChangeNatureMagicSkill2; + +L_Next8: + if (@menu == 1) + setskill SKILL_MAGIC_NATURE, 0; + mes "Nature Magic skill changed to level 0."; + next; + goto L_MagicSkills; + +L_ChangeNatureMagicSkill1: + setskill SKILL_MAGIC_NATURE, 1; + mes "Nature Magic skill changed to level 1."; + next; + goto L_MagicSkills; + +L_ChangeNatureMagicSkill2: + setskill SKILL_MAGIC_NATURE, 2; + if (@mexp < 100) + set @mexp, 100; + callsub S_Update_Mask; + mes "Nature Magic skill changed to level 2."; + next; + goto L_MagicSkills; + +L_ChangeAstralMagicSkill: + mes "Your level in the astral magic skill is " + @astral + ". What do you want to do?"; + menu + "Get level 0.", L_Next9, + "Get level 1.", L_ChangeAstralMagicSkill1, + "Get level 2.", L_ChangeAstralMagicSkill2; + +L_Next9: + if (@menu == 1) + setskill SKILL_MAGIC_ASTAL, 0; + mes "Astral Magic skill changed to level 0."; + next; + goto L_MagicSkills; + +L_ChangeAstralMagicSkill1: + setskill SKILL_MAGIC_ASTRAL, 1; + mes "Astral Magic skill changed to level 1."; + next; + goto L_MagicSkills; + +L_ChangeAstralMagicSkill2: + setskill SKILL_MAGIC_ASTRAL, 2; + if (@mexp < 100) + set @mexp, 100; + callsub S_Update_Mask; + mes "Astral Magic skill changed to level 2."; + next; + goto L_MagicSkills; + +L_ChangeDarkMagicSkill: + mes "Your level in the dark magic skill is " + @dark + ". What do you want to do?"; + menu + "Get level 0.", L_Next10, + "Get level 1.", L_ChangeDarkMagicSkill1, + "Get level 2.", L_ChangeDarkMagicSkill2; + +L_Next10: + if (@menu == 1) + setskill SKILL_MAGIC_DARK, 0; + mes "Dark Magic skill changed to level 0."; + next; + goto L_MagicSkills; + +L_ChangeDarkMagicSkill1: + setskill SKILL_MAGIC_DARK, 1; + mes "Dark Magic skill changed to level 1."; + next; + goto L_MagicSkills; + +L_ChangeDarkMagicSkill2: + setskill SKILL_MAGIC_DARK, 2; + if (@mexp < 100) + set @mexp, 100; + callsub S_Update_Mask; + mes "Dark Magic skill changed to level 2."; + next; + goto L_MagicSkills; + +S_Update_Mask: + set MAGIC_EXPERIENCE, + (MAGIC_EXPERIENCE & ~(@debug_mask)) + | (@mexp << @debug_shift); + return; + +L_GetAllMagic: + setskill SKILL_MAGIC, 5; + setskill SKILL_MAGIC_LIFE, 5; + setskill SKILL_MAGIC_WAR, 5; + setskill SKILL_MAGIC_TRANSMUTE, 5; + setskill SKILL_MAGIC_NATURE, 5; + setskill SKILL_MAGIC_ASTRAL, 5; + setskill SKILL_MAGIC_DARK, 5; + set @mexp, 8000; + callsub S_Update_Mask; + mes "Magic skills added."; + next; + goto L_MagicSkills; + +L_ResetMagicSkills: + setskill SKILL_MAGIC, 0; + setskill SKILL_MAGIC_LIFE, 0; + setskill SKILL_MAGIC_WAR, 0; + setskill SKILL_MAGIC_TRANSMUTE, 0; + setskill SKILL_MAGIC_NATURE, 0; + setskill SKILL_MAGIC_ASTRAL, 0; + setskill SKILL_MAGIC_DARK, 0; + set @mexp, 0; + callsub S_Update_Mask; + mes "Magic skills removed."; + next; + goto L_MagicSkills; + +L_AddAll: + setskill SKILL_EMOTE, 1; + setskill SKILL_TRADE, 1; + setskill SKILL_PARTY, 2; + setskill SKILL_POOL, 1; + setskill SKILL_MALLARDS_EYE, 9; + setskill SKILL_BRAWLING, 9; + setskill SKILL_SPEED, 9; + setskill SKILL_RESIST_POISON, 9; + setskill SKILL_ASTRAL_SOUL, 9; + setskill SKILL_RAGING, 9; + setskill SKILL_MAGIC, 5; + setskill SKILL_MAGIC_LIFE, 5; + setskill SKILL_MAGIC_WAR, 5; + setskill SKILL_MAGIC_TRANSMUTE, 5; + setskill SKILL_MAGIC_NATURE, 5; + setskill SKILL_MAGIC_ASTRAL, 5; + setskill SKILL_MAGIC_DARK, 5; + set @mexp, 8000; + resetstatus; + set BaseLevel, 99; + mes "All skills added to their maximum level."; + mes "Maximum number of Magic Experience points."; + mes "You are now level " + BaseLevel + "."; + next; + goto L_Begin; + +L_ResetAll: + cleararray @skilllist_name$[0], "", 8; + cleararray @skilllist_id[0], 0, 8; + cleararray @skilllist_count[0], 0, 8; + setskill SKILL_EMOTE, 0; + setskill SKILL_TRADE, 0; + setskill SKILL_PARTY, 0; + setskill SKILL_POOL, 0; + setskill SKILL_MALLARDS_EYE, 0; + setskill SKILL_BRAWLING, 0; + setskill SKILL_SPEED, 0; + setskill SKILL_RESIST_POISON, 0; + setskill SKILL_ASTRAL_SOUL, 0; + setskill SKILL_RAGING, 0; + setskill SKILL_MAGIC, 0; + setskill SKILL_MAGIC_LIFE, 0; + setskill SKILL_MAGIC_WAR, 0; + setskill SKILL_MAGIC_TRANSMUTE, 0; + setskill SKILL_MAGIC_NATURE, 0; + setskill SKILL_MAGIC_ASTRAL, 0; + setskill SKILL_MAGIC_DARK, 0; + set @mexp, 0; + callsub S_Update_Mask; + resetstatus; + set BaseLevel, 1; + mes "All skills removed."; + mes "Minimum number of Magic Experience points."; + mes "You are now level " + BaseLevel + "."; + next; + goto L_Begin; + +L_Close: + close2; + return; + +} + +-|script|Debug Spell|32767 +{ + if(!debug && getgmlevel() < get(.debug, "GM")) end; + callfunc "Debug"; + end; +OnDeprecated: + message strcharinfo(0), "Debug : ##3The #debug spell has been superseded by the ##B@debug##b command."; + end; +OnInit: + registercmd "@debug", "Debug Spell"; + registercmd "#debug", "Debug Spell::OnDeprecated"; + end; +} + +029-2,30,26,0|script|Debug#0|154 +{ + set @debug_npc, 1; + callfunc "Debug"; + end; +OnInit: + if (!debug) + disablenpc "Debug#0"; + end; +} + +001-1,53,47,0|script|Debug#1|154 +{ + set @debug_npc, 1; + callfunc "Debug"; + end; +OnInit: + if (!debug) + disablenpc "Debug#1"; + end; +} + +009-1,45,33,0|script|Debug#2|154 +{ + set @debug_npc, 1; + callfunc "Debug"; + end; +OnInit: + if (!debug) + disablenpc "Debug#2"; + end; +} + +020-1,75,85,0|script|Debug#3|154 +{ + set @debug_npc, 1; + callfunc "Debug"; + end; +OnInit: + if (!debug) + disablenpc "Debug#3"; + end; +} + +027-2,125,103,0|script|Debug#5|154 +{ + set @debug_npc, 1; + callfunc "Debug"; + end; +OnInit: + if (!debug) + disablenpc "Debug#5"; + end; +} diff --git a/world/map/npc/commands/numa.txt b/world/map/npc/commands/numa.txt new file mode 100644 index 00000000..4184743b --- /dev/null +++ b/world/map/npc/commands/numa.txt @@ -0,0 +1,132 @@ +// all-in-one debug +// author: meko + +-|script|SuperDebug|32767 +{ + if (GM < get(.lounge, "GM") && GM < G_SYSOP && !debug) goto L_GM2; // make sure you can enter the gm lounge + if (target(BL_ID,getnpcid("Numa"),1)) goto L_Main; + npcaction 6, 12; + title "Numa"; + goto L_Main; + +L_GM2: + message strcharinfo(0), "numa : GM command is level "+ get(.lounge, "GM") +", but you are level " + GM; + end; + +L_Main: + mes "How may I help you?"; + next; + menu + "Announcements", L_StoneBoard, + "MOTD", L_MOTD, + "Holiday debug", L_Holiday, + "Event debug", L_Event, + "Quest debug", L_Quest, + "Who are you?", L_WhoAmI, + "Close", L_Close; + // todo: generic npcs + // todo: map list + +L_WhoAmI: + mes "I am Numa, also known as `SuperDebug`."; + mes "My sole purpose is to assist TMW staff from behind-the-scene."; + mes "Using me, you can access several debug menus."; + mes "You can call me from anywhere using the ##B@numa##b spell, or you can come see me in person."; + next; + goto L_Main; + +L_Holiday: + if (GM < get(.holiday, "GM") && GM < G_SYSOP) goto L_GM; + mes "What holiday do you want to debug?"; + next; + menu + "Xmas.", L_XmasDebug, + "Halloween.", L_HalloweenDebug, + "Easter.", L_EasterDebug; + +L_XmasDebug: + gmlog strcharinfo(0) + " accessed the Xmas debug."; + callfunc "XmasDebug"; + goto L_Close; + +L_HalloweenDebug: + gmlog strcharinfo(0) + " accessed the Halloween debug."; + callfunc "HalloweenDebug"; + goto L_Close; + +L_EasterDebug: + gmlog strcharinfo(0) + " accessed the Easter debug."; + callfunc "Easter Debug"; + goto L_Close; + +L_Event: + if (GM < get(.event, "GM") && GM < G_EVENT) goto L_GM; + gmlog strcharinfo(0) + " accessed the GM event debug."; + callfunc "GmDebug"; + goto L_Close; + +L_StoneBoard: + if (GM < get(.scheduled, "GM") && GM < G_SYSOP) goto L_GM; + callfunc "SBConfig"; + goto L_Close; + +L_MOTD: + if (GM < get(.motd, "GM") && GM < G_SYSOP) goto L_GM; + callfunc "MOTDConfig"; + goto L_Close; + +L_GM: + mes "I'm awfully sorry."; + mes "You do not have the required GM level to perform this action."; + goto L_Close; + +L_Quest: + callfunc "QuestDebug"; + goto L_Close; + +L_Close: + close; + +OnInit: + registercmd chr(ATCMD_SYMBOL) + "numa", strnpcinfo(0); + registercmd chr(ATCMD_SYMBOL) + "superdebug", strnpcinfo(0); + void puppet("017-9", 30, 28, "Numa", 393); + end; +} + +function|script|QuestDebug +{ + goto L_ChooseContinent; + +L_ChooseContinent: + mes "Choose a continent."; + next; + menu + "Argeas", L_Argeas, + "Close", L_Return; + +L_Argeas: + mes "Choose an area."; + next; + menu + "Woodland", L_Woodland, + "Choose a continent", L_ChooseContinent, + "Close", L_Return; + +L_Woodland: + mes "Choose a quest."; + next; + menu + "Illia Sisters", L_Valia, + "Choose an area", L_Argeas, + "Close", L_Return; + +L_Return: + return; + +////////////////////////////// + +L_Valia: + callfunc "IlliaDebug"; + goto L_Return; +} diff --git a/world/map/npc/commands/pullrabbit.txt b/world/map/npc/commands/pullrabbit.txt new file mode 100644 index 00000000..3994b795 --- /dev/null +++ b/world/map/npc/commands/pullrabbit.txt @@ -0,0 +1,25 @@ +-|script|@pullrabbit|32767 +{ + if (GM < get(.killthegm, "GM") && GM < G_SYSOP) end; + if (getequipid(equip_head) != 888) end; + getinventorylist; + if ((checkweight("MurdererCrown", 1) == 0) || (@inventorylist_count == 100)) + goto L_Inventory; + // Get the current reward of the event. This may be changed later + getitem "MurdererCrown", 1; + // Set HP and SP to max + heal MaxHp, MaxSp; + // Display an effect + misceffect FX_CHANNELLING_CAST, strcharinfo(0); + // Log the usage of this spell + gmlog strcharinfo(0)+" used the Magic GM Top Hat."; + end; + +L_Inventory: + message strcharinfo(0), "You cannot create this item. You're too heavy or you don't have a free slot."; + end; + +OnInit: + registercmd chr(ATCMD_SYMBOL) + "pullrabbit", strnpcinfo(0); + end; +} diff --git a/world/map/npc/commands/zeny.txt b/world/map/npc/commands/zeny.txt index 9215637a..94c02c4b 100644 --- a/world/map/npc/commands/zeny.txt +++ b/world/map/npc/commands/zeny.txt @@ -1,10 +1,12 @@ -|script|@zeny|32767 { - if (GM < get(.zeny, "GM") && GM < G_SYSOP) goto L_GM; callfunc "argv_splitter"; + set .@n$, if_then_else(@argv$[1] != "", "char", "") + "zeny"; + if (GM < get(.zeny, "GM") && GM < G_SYSOP) goto L_GM; // check if you can use it on self set .@target_id, BL_ID; if (@argv$[1] != "") set .@target_id, getcharid(3, @argv$[1]); if (@argv$[1] != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self + if (@argv$[1] != "" && GM < get(.charzeny, "GM") && GM < G_SYSOP) goto L_GM; // when target is not self, use charzeny permission if (@argv$[0] == "--") goto L_Remove; if (@argv$[0] == "---") goto L_RemoveAll; if (@argv$[0] == "++") goto L_Max; @@ -51,21 +53,21 @@ L_MaybeRemoveBank: L_OutOfBounds: // XXX: maybe we could also take from other chars from the same accout? - message strcharinfo(0), "zeny : Impossible to proceed! This would cause the player to have less than 0 zeny or more than " + .max_int + "."; + message strcharinfo(0), .@n$+" : Impossible to proceed! This would cause the player to have less than 0 zeny or more than " + .max_int + "."; end; L_Failed: // XXX: should we allow GMs to change zeny of users that are not logged in? - message strcharinfo(0), "zeny : Impossible to attach to the target player."; + message strcharinfo(0), .@n$+" : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?"; end; L_Success: gmlog "@zeny " + @args$; - message strcharinfo(0), "zeny : The operation succeeded."; + message strcharinfo(0), .@n$+" : The operation succeeded."; end; L_GM: - message strcharinfo(0), "zeny : GM command is level "+ get(.zeny, "GM") +", but you are level " + GM; + message strcharinfo(0), .@n$+" : GM command is level "+ get(if_then_else(@argv$[1] != "", .charzeny, .zeny), "GM") +", but you are level " + GM; end; OnInit: diff --git a/world/map/npc/functions/clear_vars.txt b/world/map/npc/functions/clear_vars.txt index ee09071e..aa3f700a 100644 --- a/world/map/npc/functions/clear_vars.txt +++ b/world/map/npc/functions/clear_vars.txt @@ -264,12 +264,13 @@ S_Remove_Skills: return; S_Misc: - if(Death_Kill) set Death_Kill, 0; + set Death_Kill, 0; set Scorp, 0; // Tulimshar and Mine Variables which aren't used anymore set Bugleg, 0; // Tulimshar and Mine Variables which aren't used anymore set KatzeBeenOutside, 0; // variable was moved to a temporary player variable set LastHiss, 0; // variable was moved to Nibble 1 of the variable Katze set CaveSnakeLamp, 0; // quest was turned into a Daily Quest, so the variable isn't needed anymore + set MAGIC_CAST_TICK, 0; // legacy stuff return; S_Tutorial: diff --git a/world/map/npc/functions/debug.txt b/world/map/npc/functions/debug.txt deleted file mode 100755 index 556e501b..00000000 --- a/world/map/npc/functions/debug.txt +++ /dev/null @@ -1,988 +0,0 @@ -// Authors: alastrim, Jenalya, Ali-G - -function|script|Debug -{ - if(!@debug_npc) goto L_Begin; - mes "The debug NPCs have been deprecated. Please use this magic spell instead:"; - mes ""; - mes "%%E ##a#debug##0"; - set @debug_npc, 0; - goto L_Close; - -L_Begin: - set @debug_mask, 65535; - set @debug_shift, 0; - set @mexp, ((MAGIC_EXPERIENCE & @debug_mask) >> @debug_shift); - mes "What do you want to do?"; - menu - "Change my level.", L_Level, - "Change my stats.", L_Status, - "Change my basic skills.", L_BasicSkills, - "Change my focus skills.", L_FocusSkills, - "Change my magic skills.", L_MagicSkills, - "Add everything.", L_AddAll, - "Reset everything.", L_ResetAll, - "Close.", L_Close; - -L_Level: - mes "What level do you want to be (min: 1 - max: 99)?"; - input @lvl; - if (@lvl < 1) - goto L_LevelTooLow; - if (@lvl > 99) - goto L_LevelTooHigh; - if (BaseLevel == @lvl) - goto L_SameLevel; - set BaseLevel, @lvl; - resetstatus; - mes "You are now level " + BaseLevel + "."; - goto L_Begin; - -L_LevelTooLow: - mes "Bad choice. Minimum level is 1."; - next; - goto L_Begin; - -L_LevelTooHigh: - mes "Bad choice. Maximum level is 99."; - next; - goto L_Begin; - -L_SameLevel: - mes "You already are level " + @lvl + "."; - next; - goto L_Begin; - -L_Status: - mes "What do you want to do?"; - menu - "Set all of my stats myself.", L_ChangeStrength, - "Set one of my stats myself.", L_ChangeSingleStat, - "Get maximum points in all stats.", L_ChangeAllStats, - "Reset my status points.", L_ResetStatusPoints, - "Back to the main menu.", L_Begin, - "Close.", L_Close; - -L_ChangeAllStats: - set Str, 99; - set Agi, 99; - set Vit, 99; - set Int, 99; - set Dex, 99; - set Luk, 99; - mes "You now have 99 in all stats."; - next; - goto L_Begin; - -L_ChangeStrength: - mes "How much strength do you want to have (min: 1 - max: 99)?"; - input @str; - if (@str < 1) - goto L_StatTooLow; - if (@str > 99) - goto L_StatTooHigh; - set Str, @str; - goto L_ChangeAgility; - -L_ChangeAgility: - mes "How much agility do you want to have (min: 1 - max: 99)?"; - input @agi; - if (@agi < 1) - goto L_StatTooLow; - if (@agi > 99) - goto L_StatTooHigh; - set Agi, @agi; - goto L_ChangeVitality; - -L_ChangeVitality: - mes "How much vitality do you want to have (min: 1 - max: 99)?"; - input @vit; - if (@vit < 1) - goto L_StatTooLow; - if (@vit > 99) - goto L_StatTooHigh; - set Vit, @vit; - goto L_ChangeIntelligence; - -L_ChangeIntelligence: - mes "How much intelligence do you want to have (min: 1 - max: 99)?"; - input @int; - if (@int < 1) - goto L_StatTooLow; - if (@int > 99) - goto L_StatTooHigh; - set Int, @int; - goto L_ChangeDexterity; - -L_ChangeDexterity: - mes "How much dexterity do you want to have (min: 1 - max: 99)?"; - input @dex; - if (@dex < 1) - goto L_StatTooLow; - if (@dex > 99) - goto L_StatTooHigh; - set Dex, @dex; - goto L_ChangeLuck; - -L_ChangeLuck: - mes "How much luck do you want to have (min: 1 - max: 99)?"; - input @luk; - if (@luk < 1) - goto L_StatTooLow; - if (@luk > 99) - goto L_StatTooHigh; - set Luk, @luk; - mes "You now have " + Str + " in strength."; - mes "You now have " + Agi + " in agility."; - mes "You now have " + Vit + " in vitality."; - mes "You now have " + Int + " in intelligence."; - mes "You now have " + Dex + " in dexterity."; - mes "You now have " + Luk + " in luck."; - next; - goto L_Begin; - -L_StatTooLow: - mes "Bad choice. Minimum stat value is 1. Aborting."; - next; - goto L_Status; - -L_StatTooHigh: - mes "Bad choice. Maximum stat value is 99. Aborting."; - next; - goto L_Status; - -L_ChangeSingleStat: - mes "Which stat do you want to change?"; - menu - "Strength.", L_ChangeStrengthSingle, - "Agility.", L_ChangeAgilitySingle, - "Vitality.", L_ChangeVitalitySingle, - "Intelligence.", L_ChangeIntelligenceSingle, - "Dexterity.", L_ChangeDexteritySingle, - "Luck.", L_ChangeLuckSingle, - "Back to the main menu.", L_Begin, - "Close.", L_Close; - -L_ChangeStrengthSingle: - mes "How much strength do you want to have (min: 1 - max: 99)?"; - input @str; - if (@str < 1) - goto L_StatTooLow; - if (@str > 99) - goto L_StatTooHigh; - set Str, @str; - mes "You now have " + Str + " in strength."; - next; - goto L_Begin; - -L_ChangeAgilitySingle: - mes "How much agility do you want to have (min: 1 - max: 99)?"; - input @agi; - if (@agi < 1) - goto L_StatTooLow; - if (@agi > 99) - goto L_StatTooHigh; - set Agi, @agi; - mes "You now have " + Agi + " in agility."; - next; - goto L_Begin; - -L_ChangeVitalitySingle: - mes "How much vitality do you want to have (min: 1 - max: 99)?"; - input @vit; - if (@vit < 1) - goto L_StatTooLow; - if (@vit > 99) - goto L_StatTooHigh; - set Vit, @vit; - mes "You now have " + Vit + " in vitality."; - next; - goto L_Begin; - -L_ChangeIntelligenceSingle: - mes "How much intelligence do you want to have (min: 1 - max: 99)?"; - input @int; - if (@int < 1) - goto L_StatTooLow; - if (@int > 99) - goto L_StatTooHigh; - set Int, @int; - mes "You now have " + Int + " in intelligence."; - next; - goto L_Begin; - -L_ChangeDexteritySingle: - mes "How much dexterity do you want to have (min: 1 - max: 99)?"; - input @dex; - if (@dex < 1) - goto L_StatTooLow; - if (@dex > 99) - goto L_StatTooHigh; - set Dex, @dex; - mes "You now have " + Dex + " in dexterity."; - next; - goto L_Begin; - -L_ChangeLuckSingle: - mes "How much luck do you want to have (min: 1 - max: 99)?"; - input @luk; - if (@luk < 1) - goto L_StatTooLow; - if (@luk > 99) - goto L_StatTooHigh; - set Luk, @luk; - mes "You now have " + Luk + " in luck."; - next; - goto L_Begin; - -L_ResetStatusPoints: - resetstatus; - mes "Stats successfully resetted."; - next; - goto L_Begin; - -L_BasicSkills: - set @emote, getskilllv(SKILL_EMOTE); - set @trade, getskilllv(SKILL_TRADE); - set @party, getskilllv(SKILL_PARTY); - menu - "Overview of my basic skills.", L_BasicSkillsOverview, - "Add basic skills.", L_AddBasicSkills, - "Reset basic skills.", L_ResetBasicSkills, - "Back to main menu.", L_Begin, - "Close.", L_Close; - -L_BasicSkillsOverview: - mes "Your level in the emote skill is " + @emote + "."; - mes "Your level in the trade skill is " + @trade + "."; - mes "Your level in the party skill is " + @party + "."; - next; - goto L_BasicSkills; - -L_AddBasicSkills: - menu - "Emote", L_ChangeEmoteSkill, - "Trade.", L_ChangeTradeSkill, - "Party.", L_ChangePartySkill, - "All basic skills to their maximum level.", L_AllBasicSkills, - "Back to the basic skills menu.", L_BasicSkills, - "Close.", L_Close; - -L_ChangeEmoteSkill: - mes "Your level in the emote skill is " + @emote + ". What do you want to do?"; - menu - "Get level 0.", L_Next, - "Get level 1.", L_ChangeEmoteSkill1; - -L_Next: - if (@menu == 1) - setskill SKILL_EMOTE, 0; - mes "Emote skill changed to level 0."; - next; - goto L_BasicSkills; - -L_ChangeEmoteSkill1: - setskill SKILL_EMOTE, 1; - mes "Emote skill changed to level 1."; - next; - goto L_BasicSkills; - -L_ChangeTradeSkill: - mes "Your level in the trade skill is " + @trade + ". What do you want to do?"; - menu - "Get level 0.", L_Next1, - "Get level 1.", L_ChangeTradeSkill1; - -L_Next1: - if (@menu == 1) - setskill SKILL_TRADE, 0; - mes "Trade skill changed to level 0."; - next; - goto L_BasicSkills; - -L_ChangeTradeSkill1: - setskill SKILL_TRADE, 1; - mes "Trade skill changed to level 1."; - next; - goto L_BasicSkills; - -L_ChangePartySkill: - mes "Your level in the party skill is " + @trade + ". What do you want to do?"; - menu - "Get level 0.", L_Next2, - "Get level 1.", L_ChangePartySkill1, - "Get level 2.", L_ChangePartySkill2; - -L_Next2: - if (@menu == 1) - setskill SKILL_PARTY, 0; - mes "Party skill changed to level 0."; - next; - goto L_BasicSkills; - -L_ChangePartySkill1: - setskill SKILL_PARTY, 1; - mes "Party skill changed to level 1."; - next; - goto L_BasicSkills; - -L_ChangePartySkill2: - setskill SKILL_PARTY, 2; - mes "Party skill changed to level 2."; - next; - goto L_BasicSkills; - -L_AllBasicSkills: - setskill SKILL_EMOTE, 1; - setskill SKILL_TRADE, 1; - setskill SKILL_PARTY, 2; - mes "Basic skills added."; - next; - goto L_BasicSkills; - -L_ResetBasicSkills: - setskill SKILL_EMOTE, 0; - setskill SKILL_TRADE, 0; - setskill SKILL_PARTY, 0; - mes "Basic skills removed."; - next; - goto L_BasicSkills; - -L_FocusSkills: - set @pool, getskilllv(SKILL_POOL); - set @mallard, getskilllv(SKILL_MALLARDS_EYE); - set @brawling, getskilllv(SKILL_BRAWLING); - set @speed, getskilllv(SKILL_SPEED); - set @poison, getskilllv(SKILL_RESIST_POISON); - set @astralsoul, getskilllv(SKILL_ASTRAL_SOUL); - set @raging, getskilllv(SKILL_RAGING); - menu - "Overview of my focus skills.", L_SeeFocusSkills, - "Focus or unfocus.", L_Unfocus, - "Add focus skills.", L_ChangeFocusSkills, - "Reset focus skills.", L_ResetFocusSkills, - "Back to the main menu.", L_Begin, - "Close.", L_Close; - -L_SeeFocusSkills: - cleararray @skilllist_name$[0], "", 8; - cleararray @skilllist_id[0], 0, 8; - cleararray @skilllist_count[0], 0, 8; - getactivatedpoolskilllist; - if (@skilllist_count == 0) - goto L_NotFocusedMessage; - if (@skilllist_count != 0) - mes "You are currently focused on the " + @skilllist_name$[@skilllist_count-1] + " skill."; - goto L_FocusSkills; - -L_NotFocusedMessage: - mes "You are not focused on any skill right now."; - goto L_FocusSkillsOverview; - -L_FocusSkillsOverview: - mes "Your focusing skill level is " + @pool + "."; - mes "Your mallard's eye skill level is " + @mallard + "."; - mes "Your brawling skill level is " + @brawling + "."; - mes "Your speed skill level is " + @speed + "."; - mes "Your resist poison skill level is " + @poison + "."; - mes "Your astral soul skill level is " + @astralsoul + "."; - mes "Your raging skill level is " + @raging + "."; - next; - goto L_FocusSkills; - -L_Unfocus: - cleararray @skilllist_name$[0], "", 8; - cleararray @skilllist_id[0], 0, 8; - cleararray @skilllist_count[0], 0, 8; - if (getskilllv(SKILL_POOL) == 0) - setskill SKILL_POOL, 1; - getactivatedpoolskilllist; - if (@skilllist_count == 0) - goto L_Focus; - getactivatedpoolskilllist; - if (@skilllist_count != 0) - goto L_AskUnfocus; - mes "You are not focused on a skill at the moment."; - goto L_FocusSkills; - -L_Focus: - cleararray @skilllist_name$[0], "", 8; - cleararray @skilllist_id[0], 0, 8; - cleararray @skilllist_count[0], 0, 8; - getunactivatedpoolskilllist; - if (@skilllist_count == 0) - goto L_NoFocusSkills; - set @skilllist_id[@skilllist_count], 0; - set @skilllist_name$[@skilllist_count], "Back to the focus skills menu."; - mes "You are not focused on any focus skill right now. Which one do you want to focus on?"; - menu - @skilllist_name$[0], L_MenuItems, - @skilllist_name$[1], L_MenuItems, - @skilllist_name$[2], L_MenuItems, - @skilllist_name$[3], L_MenuItems, - @skilllist_name$[4], L_MenuItems, - @skilllist_name$[5], L_MenuItems, - @skilllist_name$[6], L_MenuItems, - @skilllist_name$[7], L_MenuItems; - -L_MenuItems: - set @menu, @menu - 1; - poolskill @skilllist_id[@menu]; - goto L_FocusSkills; - -L_NoFocusSkills: - mes "You have no skills to focus on or unfocus from."; - goto L_FocusSkills; - -L_AskUnfocus: - mes "Unfocus " + @skilllist_name$[@skilllist_count-1] + "?"; - menu - "Yes.", L_Next3, - "No.", L_FocusSkills; - -L_Next3: - unpoolskill @skilllist_id[@skilllist_count-1]; - goto L_FocusSkills; - -L_ChangeFocusSkills: - menu - "Focusing.", L_ChangeFocusingSkill, - "Mallard's Eye.", L_ChangeMallardsEyeSkill, - "Brawling.", L_ChangeBrawlingSkill, - "Speed.", L_ChangeSpeedSkill, - "Resist Poison.", L_ChangeResistPoisonSkill, - "Astral Soul.", L_ChangeAstralSoulSkill, - "Raging.", L_ChangeRagingSkill, - "All focus skills to their maximum level.", L_AllFocusSkills, - "Back to the focus skills menu.", L_FocusSkills, - "Close.", L_Close; - -L_BadSkillLevel: - mes "Invalid skill level."; - next; - goto L_ChangeFocusSkills; - -L_ChangeFocusingSkill: - mes "Enter the level you want to be in this skill (min: 0 - max: 1)."; - input @lvl; - if (@lvl > 1) - goto L_BadSkillLevel; - setskill SKILL_POOL, @lvl; - next; - goto L_FocusSkills; - -L_ChangeMallardsEyeSkill: - mes "Enter the level you want to be in this skill (min: 0 - max: 9)."; - input @lvl; - if (@lvl > 9) - goto L_BadSkillLevel; - setskill SKILL_MALLARDS_EYE, @lvl; - next; - goto L_FocusSkills; - -L_ChangeBrawlingSkill: - mes "Enter the lvl you want to be in this skill (min: 0 - max: 9)."; - input @lvl; - if (@lvl > 9) - goto L_BadSkillLevel; - setskill SKILL_BRAWLING, @lvl; - next; - goto L_FocusSkills; - -L_ChangeSpeedSkill: - mes "Enter the lvl you want to be in this skill (min: 0 - max: 9)."; - input @lvl; - if (@lvl > 9) - goto L_BadSkillLevel; - setskill SKILL_SPEED, @lvl; - next; - goto L_FocusSkills; - -L_ChangeResistPoisonSkill: - mes "Enter the lvl you want to be in this skill (min: 0 - max: 9)."; - input @lvl; - if (@lvl > 9) - goto L_BadSkillLevel; - setskill SKILL_RESIST_POISON, @lvl; - next; - goto L_FocusSkills; - -L_ChangeAstralSoulSkill: - mes "Enter the lvl you want to be in this skill (min: 0 - max: 9)."; - input @lvl; - if (@lvl > 9) - goto L_BadSkillLevel; - setskill SKILL_ASTRAL_SOUL, @lvl; - next; - goto L_FocusSkills; - -L_ChangeRagingSkill: - mes "Enter the lvl you want to be in this skill (min: 0 - max: 9)."; - input @lvl; - if (@lvl > 9) - goto L_BadSkillLevel; - setskill SKILL_RAGING, @lvl; - next; - goto L_FocusSkills; - -L_AllFocusSkills: - setskill SKILL_POOL, 1; - setskill SKILL_MALLARDS_EYE, 9; - setskill SKILL_BRAWLING, 9; - setskill SKILL_SPEED, 9; - setskill SKILL_RESIST_POISON, 9; - setskill SKILL_ASTRAL_SOUL, 9; - setskill SKILL_RAGING, 9; - mes "Focus skills added."; - next; - goto L_FocusSkills; - -L_ResetFocusSkills: - setskill SKILL_POOL, 0; - setskill SKILL_MALLARDS_EYE, 0; - setskill SKILL_BRAWLING, 0; - setskill SKILL_SPEED, 0; - setskill SKILL_RESIST_POISON, 0; - setskill SKILL_ASTRAL_SOUL, 0; - setskill SKILL_RAGING, 0; - mes "Focus skills removed."; - next; - goto L_FocusSkills; - -L_MagicSkills: - set @general, getskilllv(SKILL_MAGIC); - set @life, getskilllv(SKILL_MAGIC_LIFE); - set @war, getskilllv(SKILL_MAGIC_WAR); - set @trans, getskilllv(SKILL_MAGIC_TRANSMUTE); - set @nature, getskilllv(SKILL_MAGIC_NATURE); - set @astral, getskilllv(SKILL_MAGIC_ASTRAL); - set @dark, getskilllv(SKILL_MAGIC_DARK); - menu - "Overview of my magical skills.", L_MagicSkillsOverview, - "Get magic skills.", L_ChangeMagicSkills, - "Get magic experience.", L_MagicExperience, - "All magic skills to their maximum level and maximum magic experience.", L_GetAllMagic, - "Reset magic skills and experience.", L_ResetMagicSkills, - "Back to the main menu.", L_Begin, - "Close.", L_Close; - -L_MagicSkillsOverview: - mes "Your current magic experience skill is " + @mexp + "."; - mes "Your level in the general magic skill is " + @general + "."; - mes "Your level in the life magic skill is " + @life + "."; - mes "Your level in the war magic skill is " + @war + "."; - mes "Your level in the transmutation magic skill is " + @trans + "."; - mes "Your level in the nature magic skill is " + @nature + "."; - mes "Your level in the astral magic skill is " + @astral + "."; - mes "Your level in the dark magic skill is " + @dark + "."; - next; - goto L_MagicSkills; - -L_MagicExperience: - mes "Your current magic experience is " + @mexp + "."; - if (@general == 0 - && @life == 0 - && @war == 0 - && @trans == 0 - && @nature == 0 - && @astral == 0 - && @dark == 0) - goto L_NoMagicSkills; - - goto L_ChangeMagicExperience; - -L_NoMagicSkills: - mes "You can't have magic experience, since you have no magic skills yet."; - goto L_MagicSkills; - -L_ChangeMagicExperience: - mes "Set the desired magic experience (min: 0 - max: 8000)."; - input @value; - if (@value < 0 || @value > 8000) - goto L_WrongMagicExperience; - set @mexp, @value; - callsub S_Update_Mask; - mes "You now have " + @mexp + " magic experience points."; - goto L_MagicSkills; - -L_WrongMagicExperience: - mes "Wrong value informed. Aborting."; - goto L_MagicSkills; - -L_ChangeMagicSkills: - menu - "General Magic.", L_ChangeGeneralMagicSkill, - "Life Magic.", L_ChangeLifeMagicSkill, - "War Magic.", L_ChangeWarMagicSkill, - "Transmutation Magic.", L_ChangeTransmutationMagicSkill, - "Nature Magic.", L_ChangeNatureMagicSkill, - "Astral Magic.", L_ChangeAstralMagicSkill, - "Dark Magic.", L_ChangeDarkMagicSkill, - "Back to the magic skills menu.", L_MagicSkills, - "Close.", L_Close; - -L_ChangeGeneralMagicSkill: - mes "Your level in the general magic skill is " + @general + ". What do you want to do?"; - menu - "Get level 0.", L_Next4, - "Get level 1.", L_ChangeGeneralMagicSkill1, - "Get level 2.", L_ChangeGeneralMagicSkill2; - -L_Next4: - if (@menu == 1) - setskill SKILL_MAGIC, 0; - mes "General Magic skill changed to level 0."; - next; - goto L_MagicSkills; - -L_ChangeGeneralMagicSkill1: - setskill SKILL_MAGIC, 1; - mes "General Magic skill changed to level 1."; - next; - goto L_MagicSkills; - -L_ChangeGeneralMagicSkill2: - setskill SKILL_MAGIC, 2; - if (@mexp < 100) - set @mexp, 100; - callsub S_Update_Mask; - mes "General Magic skill changed to level 2."; - next; - goto L_MagicSkills; - -L_ChangeLifeMagicSkill: - mes "Your level in the life magic skill is " + @life + ". What do you want to do?"; - menu - "Get level 0.", L_Next5, - "Get level 1.", L_ChangeLifeMagicSkill1, - "Get level 2.", L_ChangeLifeMagicSkill2; - -L_Next5: - if (@menu == 1) - setskill SKILL_MAGIC_LIFE, 0; - mes "Life Magic skill changed to level 0."; - next; - goto L_MagicSkills; - -L_ChangeLifeMagicSkill1: - setskill SKILL_MAGIC_LIFE, 1; - mes "Life Magic skill changed to level 1."; - next; - goto L_MagicSkills; - -L_ChangeLifeMagicSkill2: - setskill SKILL_MAGIC_LIFE, 2; - if (@mexp < 100) - set @mexp, 100; - callsub S_Update_Mask; - mes "Life Magic skill changed to level 2."; - next; - goto L_MagicSkills; - -L_ChangeWarMagicSkill: - mes "Your level in the war magic skill is " + @war + ". What do you want to do?"; - menu - "Get level 0.", L_Next6, - "Get level 1.", L_ChangeWarMagicSkill1, - "Get level 2.", L_ChangeWarMagicSkill2; - -L_Next6: - if (@menu == 1) - setskill SKILL_MAGIC_WAR, 0; - mes "War Magic skill changed to level 0."; - next; - goto L_MagicSkills; - -L_ChangeWarMagicSkill1: - setskill SKILL_MAGIC_WAR, 1; - mes "War Magic skill changed to level 1."; - next; - goto L_MagicSkills; - -L_ChangeWarMagicSkill2: - setskill SKILL_MAGIC_WAR, 2; - if (@mexp < 100) - set @mexp, 100; - callsub S_Update_Mask; - mes "War Magic skill changed to level 2."; - next; - goto L_MagicSkills; - -L_ChangeTransmutationMagicSkill: - mes "Your level in the transmutation magic skill is " + @trans + ". What do you want to do?"; - menu - "Get level 0.", L_Next7, - "Get level 1.", L_ChangeTransmutationMagicSkill1, - "Get level 2.", L_ChangeTransmutationMagicSkill2; - -L_Next7: - if (@menu == 1) - setskill SKILL_MAGIC_TRANSMUTE, 0; - mes "Transmutation Magic skill changed to level 0."; - next; - goto L_MagicSkills; - -L_ChangeTransmutationMagicSkill1: - setskill SKILL_MAGIC_TRANSMUTE, 1; - mes "Transmutation Magic skill changed to level 1."; - next; - goto L_MagicSkills; - -L_ChangeTransmutationMagicSkill2: - setskill SKILL_MAGIC_TRANSMUTE, 2; - if (@mexp < 100) - set @mexp, 100; - callsub S_Update_Mask; - mes "Transmutation Magic skill changed to level 2."; - next; - goto L_MagicSkills; - -L_ChangeNatureMagicSkill: - mes "Your level in the nature magic skill is " + @nature + ". What do you want to do?"; - menu - "Get level 0.", L_Next8, - "Get level 1.", L_ChangeNatureMagicSkill1, - "Get level 2.", L_ChangeNatureMagicSkill2; - -L_Next8: - if (@menu == 1) - setskill SKILL_MAGIC_NATURE, 0; - mes "Nature Magic skill changed to level 0."; - next; - goto L_MagicSkills; - -L_ChangeNatureMagicSkill1: - setskill SKILL_MAGIC_NATURE, 1; - mes "Nature Magic skill changed to level 1."; - next; - goto L_MagicSkills; - -L_ChangeNatureMagicSkill2: - setskill SKILL_MAGIC_NATURE, 2; - if (@mexp < 100) - set @mexp, 100; - callsub S_Update_Mask; - mes "Nature Magic skill changed to level 2."; - next; - goto L_MagicSkills; - -L_ChangeAstralMagicSkill: - mes "Your level in the astral magic skill is " + @astral + ". What do you want to do?"; - menu - "Get level 0.", L_Next9, - "Get level 1.", L_ChangeAstralMagicSkill1, - "Get level 2.", L_ChangeAstralMagicSkill2; - -L_Next9: - if (@menu == 1) - setskill SKILL_MAGIC_ASTAL, 0; - mes "Astral Magic skill changed to level 0."; - next; - goto L_MagicSkills; - -L_ChangeAstralMagicSkill1: - setskill SKILL_MAGIC_ASTRAL, 1; - mes "Astral Magic skill changed to level 1."; - next; - goto L_MagicSkills; - -L_ChangeAstralMagicSkill2: - setskill SKILL_MAGIC_ASTRAL, 2; - if (@mexp < 100) - set @mexp, 100; - callsub S_Update_Mask; - mes "Astral Magic skill changed to level 2."; - next; - goto L_MagicSkills; - -L_ChangeDarkMagicSkill: - mes "Your level in the dark magic skill is " + @dark + ". What do you want to do?"; - menu - "Get level 0.", L_Next10, - "Get level 1.", L_ChangeDarkMagicSkill1, - "Get level 2.", L_ChangeDarkMagicSkill2; - -L_Next10: - if (@menu == 1) - setskill SKILL_MAGIC_DARK, 0; - mes "Dark Magic skill changed to level 0."; - next; - goto L_MagicSkills; - -L_ChangeDarkMagicSkill1: - setskill SKILL_MAGIC_DARK, 1; - mes "Dark Magic skill changed to level 1."; - next; - goto L_MagicSkills; - -L_ChangeDarkMagicSkill2: - setskill SKILL_MAGIC_DARK, 2; - if (@mexp < 100) - set @mexp, 100; - callsub S_Update_Mask; - mes "Dark Magic skill changed to level 2."; - next; - goto L_MagicSkills; - -S_Update_Mask: - set MAGIC_EXPERIENCE, - (MAGIC_EXPERIENCE & ~(@debug_mask)) - | (@mexp << @debug_shift); - return; - -L_GetAllMagic: - setskill SKILL_MAGIC, 5; - setskill SKILL_MAGIC_LIFE, 5; - setskill SKILL_MAGIC_WAR, 5; - setskill SKILL_MAGIC_TRANSMUTE, 5; - setskill SKILL_MAGIC_NATURE, 5; - setskill SKILL_MAGIC_ASTRAL, 5; - setskill SKILL_MAGIC_DARK, 5; - set @mexp, 8000; - callsub S_Update_Mask; - mes "Magic skills added."; - next; - goto L_MagicSkills; - -L_ResetMagicSkills: - setskill SKILL_MAGIC, 0; - setskill SKILL_MAGIC_LIFE, 0; - setskill SKILL_MAGIC_WAR, 0; - setskill SKILL_MAGIC_TRANSMUTE, 0; - setskill SKILL_MAGIC_NATURE, 0; - setskill SKILL_MAGIC_ASTRAL, 0; - setskill SKILL_MAGIC_DARK, 0; - set @mexp, 0; - callsub S_Update_Mask; - mes "Magic skills removed."; - next; - goto L_MagicSkills; - -L_AddAll: - setskill SKILL_EMOTE, 1; - setskill SKILL_TRADE, 1; - setskill SKILL_PARTY, 2; - setskill SKILL_POOL, 1; - setskill SKILL_MALLARDS_EYE, 9; - setskill SKILL_BRAWLING, 9; - setskill SKILL_SPEED, 9; - setskill SKILL_RESIST_POISON, 9; - setskill SKILL_ASTRAL_SOUL, 9; - setskill SKILL_RAGING, 9; - setskill SKILL_MAGIC, 5; - setskill SKILL_MAGIC_LIFE, 5; - setskill SKILL_MAGIC_WAR, 5; - setskill SKILL_MAGIC_TRANSMUTE, 5; - setskill SKILL_MAGIC_NATURE, 5; - setskill SKILL_MAGIC_ASTRAL, 5; - setskill SKILL_MAGIC_DARK, 5; - set @mexp, 8000; - resetstatus; - set BaseLevel, 99; - mes "All skills added to their maximum level."; - mes "Maximum number of Magic Experience points."; - mes "You are now level " + BaseLevel + "."; - next; - goto L_Begin; - -L_ResetAll: - cleararray @skilllist_name$[0], "", 8; - cleararray @skilllist_id[0], 0, 8; - cleararray @skilllist_count[0], 0, 8; - setskill SKILL_EMOTE, 0; - setskill SKILL_TRADE, 0; - setskill SKILL_PARTY, 0; - setskill SKILL_POOL, 0; - setskill SKILL_MALLARDS_EYE, 0; - setskill SKILL_BRAWLING, 0; - setskill SKILL_SPEED, 0; - setskill SKILL_RESIST_POISON, 0; - setskill SKILL_ASTRAL_SOUL, 0; - setskill SKILL_RAGING, 0; - setskill SKILL_MAGIC, 0; - setskill SKILL_MAGIC_LIFE, 0; - setskill SKILL_MAGIC_WAR, 0; - setskill SKILL_MAGIC_TRANSMUTE, 0; - setskill SKILL_MAGIC_NATURE, 0; - setskill SKILL_MAGIC_ASTRAL, 0; - setskill SKILL_MAGIC_DARK, 0; - set @mexp, 0; - callsub S_Update_Mask; - resetstatus; - set BaseLevel, 1; - mes "All skills removed."; - mes "Minimum number of Magic Experience points."; - mes "You are now level " + BaseLevel + "."; - next; - goto L_Begin; - -L_Close: - close2; - return; - -} - --|script|Debug Spell|32767 -{ - if(!debug && getgmlevel() < 99) end; - callfunc "Debug"; - end; -OnInit: - registercmd "@debug", "Debug Spell"; - end; -} - -029-2,30,26,0|script|Debug#0|154 -{ - set @debug_npc, 1; - callfunc "Debug"; - end; -OnInit: - if (!debug) - disablenpc "Debug#0"; - end; -} - -001-1,53,47,0|script|Debug#1|154 -{ - set @debug_npc, 1; - callfunc "Debug"; - end; -OnInit: - if (!debug) - disablenpc "Debug#1"; - end; -} - -009-1,45,33,0|script|Debug#2|154 -{ - set @debug_npc, 1; - callfunc "Debug"; - end; -OnInit: - if (!debug) - disablenpc "Debug#2"; - end; -} - -020-1,75,85,0|script|Debug#3|154 -{ - set @debug_npc, 1; - callfunc "Debug"; - end; -OnInit: - if (!debug) - disablenpc "Debug#3"; - end; -} - -027-2,125,103,0|script|Debug#5|154 -{ - set @debug_npc, 1; - callfunc "Debug"; - end; -OnInit: - if (!debug) - disablenpc "Debug#5"; - end; -} diff --git a/world/map/npc/functions/default_npc_checks.txt b/world/map/npc/functions/default_npc_checks.txt index da080e82..cc5c4086 100644 --- a/world/map/npc/functions/default_npc_checks.txt +++ b/world/map/npc/functions/default_npc_checks.txt @@ -9,6 +9,7 @@ function|script|PCtoNPCRange set @npc_check, 0; set @Nmap$, strnpcinfo(3); if(!@npc_distance) set @npc_distance, 4; // <== default distance + if(@npc_distance == (1-2)) set @npc_distance, ATTACKRANGE; cleararray @npc_loc, 0, 3; setarray @npc_loc, getnpcx(), getnpcy(), @npc_distance; set @Nx1, (@npc_loc[0] - @npc_loc[2]); diff --git a/world/map/npc/functions/game_rules.txt b/world/map/npc/functions/game_rules.txt index d898b436..316ee03f 100644 --- a/world/map/npc/functions/game_rules.txt +++ b/world/map/npc/functions/game_rules.txt @@ -2,7 +2,10 @@ function|script|GameRules { - requestlang .@cl$; + mes "##BPlease click submit."; + requestlang .@cl$; // newer clients will automatically submit and skip ahead + clear; + title "Game Rules"; explode .@l$, .@cl$, "_"; if (.@l$[0] == "en") goto L_English; if (.@l$[0] == "nl") goto L_Dutch; @@ -17,7 +20,6 @@ function|script|GameRules if (.@l$[0] == "zh") goto L_zhHant; if (.@l$[0] == "ru") goto L_Russian; - mes "[Game Rules]"; mes "Please select a language:"; menu "English", L_English, diff --git a/world/map/npc/functions/global_event_handler.txt b/world/map/npc/functions/global_event_handler.txt index e4247d18..4d453c83 100644 --- a/world/map/npc/functions/global_event_handler.txt +++ b/world/map/npc/functions/global_event_handler.txt @@ -21,14 +21,16 @@ OnPCKillEvent: callfunc "elanore_decrease_exp"; // decrease heal exp for doing bad things end; -OnPCKilledEvent: - callfunc "fightclub_event_killed"; // this is used by the 1v1 arena +OnMobKillEvent: + callfunc "MobPoints"; end; OnPCDieEvent: callfunc "fightclub_GoBack"; // this used by the battle master - callfunc "fightclub_event_die"; // this is used by the 1v1 arena + //callfunc "fightclub_event_die"; // this is used by the 1v1 arena set @necromancer, 0; + set @_M_BLOCK, 0; // reset magic block on death + set @killerrid, 0; // reset killer rid end; OnInit: diff --git a/world/map/npc/functions/superdebug.txt b/world/map/npc/functions/superdebug.txt deleted file mode 100644 index 140e703a..00000000 --- a/world/map/npc/functions/superdebug.txt +++ /dev/null @@ -1,69 +0,0 @@ -// all-in-one debug -// author: meko - -function|script|SuperDebug -{ - if(@from_npc) goto L_Main; - npcaction 6, 12; - title "Numa"; - goto L_Main; - -L_Main: - set @from_npc, 0; - mes "[Numa]"; - mes "How may I help you?"; - next; - menu - "Announcements", L_StoneBoard, - "MOTD", L_MOTD, - "Holiday debug", L_Holiday, - "Event debug", L_Event; - // todo: generic npcs (in a future PR) - // todo: map list (in a future PR) - // todo: quest log debug (in a future PR) - -L_Holiday: - if(getgmlevel() < 40) goto L_GM; - mes "[Numa]"; - mes "What holiday do you want to debug?"; - next; - menu - "Xmas.", L_XmasDebug, - "Halloween.", L_HalloweenDebug; - -L_XmasDebug: - gmlog strcharinfo(0) + " accessed the Xmas debug."; - callfunc "XmasDebug"; - goto L_Close; - -L_HalloweenDebug: - gmlog strcharinfo(0) + " accessed the Halloween debug."; - callfunc "HalloweenDebug"; - goto L_Close; - -L_Event: - if(getgmlevel() < 60) goto L_GM; - gmlog strcharinfo(0) + " accessed the GM event debug."; - callfunc "GmDebug"; - goto L_Close; - -L_StoneBoard: - if (getgmlevel() < 30) goto L_GM; - callfunc "SBConfig"; - goto L_Close; - -L_MOTD: - if (getgmlevel() < 40) goto L_GM; - callfunc "MOTDConfig"; - goto L_Close; - -L_GM: - mes "[Numa]"; - mes "I'm awfully sorry."; - mes "You do not have the required GM level to perform this action."; - goto L_Close; - -L_Close: - close2; // FIXME: replace with npc action 5 - return; -} diff --git a/world/map/npc/items/magic_gm_top_hat.txt b/world/map/npc/items/magic_gm_top_hat.txt deleted file mode 100644 index dfd114d2..00000000 --- a/world/map/npc/items/magic_gm_top_hat.txt +++ /dev/null @@ -1,25 +0,0 @@ --|script|ActivateMagicGMTophat|32767 -{ - if (GM < get(.killthegm, "GM") && GM < G_SYSOP) end; - if (getequipid(equip_head) != 888) end; - getinventorylist; - if ((checkweight("MurdererCrown", 1) == 0) || (@inventorylist_count == 100)) - goto L_Inventory; - // Get the current reward of the event. This may be changed later - getitem "MurdererCrown", 1; - // Set HP and SP to max - heal MaxHp, MaxSp; - // Display an effect - misceffect FX_CHANNELLING_CAST, strcharinfo(0); - // Log the usage of this spell - gmlog strcharinfo(0)+" used the Magic GM Top Hat."; - end; - -L_Inventory: - message strcharinfo(0), "You cannot create this item. You're too heavy or you don't have a free slot."; - end; - -OnInit: - registercmd "#pullrabbit", strnpcinfo(0); - end; -} diff --git a/world/map/npc/magic/README.md b/world/map/npc/magic/README.md index 187c7c04..57ab5131 100644 --- a/world/map/npc/magic/README.md +++ b/world/map/npc/magic/README.md @@ -1,23 +1,3 @@ -# To-do -- [X] finish the missing spells and push them so they can be tested -- [ ] Deal with the removal of the following spells from magic to NPCs or Commands - - [X] Ched - - [X] merge-concentration-potions - - [ ] Auldsbel - - [ ] make-short-tanktop - - [ ] make-tanktop - - [ ] make-shirt - - [ ] make-concentration-potion - - [X] Wyara - - [ ] sense-spouse - ---- ---- -to see other things that needs to be done do a grep for `TODO`, `FIXME` in this folder. -To see a list of things that needs further thoughts do a grep for `XXX`. - ---- ---- - [ ] check the new builtins and make sure they work as intended - [ ] `puppet` - [ ] check what happens when making a puppet whose name already exist (maybe it replaces?) @@ -49,6 +29,8 @@ To see a list of things that needs further thoughts do a grep for `XXX`. - [ ] `distance` - [ ] `if_then_else` + - I do not like `void`, feels like an ugly workaround; we should make `puppet` and `call` work in both function context and statement context + --- - [ ] test the spells - [ ] test with no target diff --git a/world/map/npc/magic/_import.txt b/world/map/npc/magic/_import.txt index 52a6a55c..2ef595af 100644 --- a/world/map/npc/magic/_import.txt +++ b/world/map/npc/magic/_import.txt @@ -12,6 +12,7 @@ npc: npc/magic/level1-grow-alizarin.txt npc: npc/magic/level1-grow-gamboge.txt npc: npc/magic/level1-grow-cobalt.txt npc: npc/magic/level1-summon-maggots.txt +npc: npc/magic/level1-sense-spouse.txt npc: npc/magic/level1-detect-magic.txt npc: npc/magic/level2-arrow-hail.txt npc: npc/magic/level2-make-arrows.txt diff --git a/world/map/npc/magic/_procedures.txt b/world/map/npc/magic/_procedures.txt index 57a83fa9..df750f73 100644 --- a/world/map/npc/magic/_procedures.txt +++ b/world/map/npc/magic/_procedures.txt @@ -1,6 +1,6 @@ function|script|magic_register { - debugmes ">> Register " + .invocation$ + " @ " + strnpcinfo(0); + //debugmes ">> Register " + .invocation$ + " @ " + strnpcinfo(0); set .@ext$, if_then_else(getarg(0,"") != "", "::"+getarg(0), ""); registercmd .invocation$, strnpcinfo(0) + .@ext$; // register the spell set .index, $@magic_index; @@ -8,12 +8,21 @@ function|script|magic_register return; } +// this can only be done with a npc so... +-|script|Magic Timer|32767 +{ + end; +OnClear: + set @_M_BLOCK, 0; + end; +} + // this function is call()-only function|script|magic_checks { set .@r, 0; if(getpvpflag(1)) set .@r, 1; // FIXME: make HIDDEN into a param - if((gettimetick(2) - MAGIC_CAST_TICK) < 0) set .@r, 2; // check if last debuff ended + if(@_M_BLOCK) set .@r, 2; // check if last debuff ended if(Hp < 1) set .@r, 3; // can not cast when dead return .@r; } @@ -22,10 +31,10 @@ function|script|elt_damage { // args are damage, dmgplus(mutation), bonus_elt, malus_elt, effect set .@dmg, getarg(0) + rand(getarg(1)); - if(elttype(@target_id) == getarg(3)) // malus + if(get(ELTTYPE, @target_id) == getarg(3)) // malus set .@dmg, .@dmg / 3; - if(elttype(@target_id) == getarg(2)) // bonus - set .@dmg, ((eltlvl(@target_id) + 4) * .@dmg) / 4; + if(get(ELTTYPE, @target_id) == getarg(2)) // bonus + set .@dmg, ((get(ELTLVL, @target_id) + 4) * .@dmg) / 4; set .@source, .caster; if (!.@source) set .@source, getcharid(3); diff --git a/world/map/npc/magic/level0-wand.txt b/world/map/npc/magic/level0-wand.txt index f0938713..1a512c0c 100644 --- a/world/map/npc/magic/level0-wand.txt +++ b/world/map/npc/magic/level0-wand.txt @@ -5,10 +5,12 @@ if(@WandAttack != 1) goto L_Failed; // here we install - set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 500, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; misceffect FX_MAGIC_GENERIC, strcharinfo(0); - overrideattack (@Wand + (@spellpower / 10)), 1200, 3, ATTACK_ICON_GENERIC, @WandID, strnpcinfo(0)+"::OnAttack"; + set .@delay, (((200 - Agi) * 1200) / 200); + overrideattack (@Wand + (@spellpower / 10)), .@delay, 3, ATTACK_ICON_GENERIC, @WandID, strnpcinfo(0)+"::OnAttack"; callfunc "magic_exp"; end; @@ -62,9 +64,9 @@ L_Failed: end; OnInit: - setarray .Wands[0], 758, 1171; - setarray .WandsPwr[0], 2, 1; - setarray .WandsAnim[0], 35, 33; + setarray .Wands[0], 0, 758, 1171; + setarray .WandsPwr[0], 0, 2, 1; + setarray .WandsAnim[0], 0, 35, 33; set .school, SKILL_MAGIC; set .invocation$, chr(MAGIC_SYMBOL) + "confringo"; // used in npcs that refer to this spell void call("magic_register"); diff --git a/world/map/npc/magic/level1-aggravate.txt b/world/map/npc/magic/level1-aggravate.txt index 1aaa9fc7..5b3d5674 100644 --- a/world/map/npc/magic/level1-aggravate.txt +++ b/world/map/npc/magic/level1-aggravate.txt @@ -1,9 +1,10 @@ -|script|spell-aggravate|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 3) end; if (getskilllv(.school) < .level) end; - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 1000, "Magic Timer::OnClear"; // set the new debuff set @args$, ""; callfunc "adjust_spellpower"; // we reset @args$ because this spell should not have a target set @distance, (2 + (@spellpower / 50)); set Sp, Sp - 3; diff --git a/world/map/npc/magic/level1-detect-magic.txt b/world/map/npc/magic/level1-detect-magic.txt index e64a499a..e975e952 100644 --- a/world/map/npc/magic/level1-detect-magic.txt +++ b/world/map/npc/magic/level1-detect-magic.txt @@ -1,9 +1,10 @@ -|script|detect-magic|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 3) end; if (getskilllv(.school) < .level) end; - set MAGIC_CAST_TICK, gettimetick(2) + 6; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 6000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 3; misceffect FX_MAGIC_GENERIC, strcharinfo(0); @@ -15,7 +16,7 @@ OnNearbyNpc: set .@e$, strnpcinfo(2,@target_id); - if(.@e$ == "#_M" || .@e$ == "#MAGIC") + if(.@e$ == "#_M" || .@e$ == "#MAGIC" || get(.IS_MAGIC, @target_id)) misceffect FX_MAGIC_DEFAULT, @target_id; end; diff --git a/world/map/npc/magic/level1-experience.txt b/world/map/npc/magic/level1-experience.txt index 2c283eaa..36ad8179 100644 --- a/world/map/npc/magic/level1-experience.txt +++ b/world/map/npc/magic/level1-experience.txt @@ -1,8 +1,9 @@ -|script|spell-experience|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 1) end; - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 1000, "Magic Timer::OnClear"; // set the new debuff set @level, getskilllv(.school); if (@level < .level) end; callfunc "adjust_spellpower"; @@ -35,6 +36,6 @@ OnInit: set .level, 1; set .exp_gain, 0; void call("magic_register"); - setarray .MAX_MAGIC_EXP[0], 0, 100, 1200, 8000, 40000, 65535; + setarray .MAX_MAGIC_EXP[0], 0, 0, 100, 1200, 8000, 40000, 65535; end; } diff --git a/world/map/npc/magic/level1-flare-dart.txt b/world/map/npc/magic/level1-flare-dart.txt index 6b6657b6..29a4f3c1 100644 --- a/world/map/npc/magic/level1-flare-dart.txt +++ b/world/map/npc/magic/level1-flare-dart.txt @@ -1,25 +1,27 @@ -|script|flare-dart|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 10) end; set @level, getskilllv(.school); if (@level < .level) end; if (@level <= 2 && countitem("SulphurPowder") >= 1) delitem "SulphurPowder", 1; elif (@level <= 2) end; - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 500, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 10; misceffect FX_MAGIC_BLACK, strcharinfo(0); - set @damage, sqrt(@spellpower) * 5; - set @dmg_bonus, (BaseLevel/3) + 5; - overrideattack (@spellpower/50)+3, 1200, 4, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack"; + set @flar_damage, sqrt(@spellpower) * 5; + set @flar_dmg_bonus, (BaseLevel/3) + 5; + set .@delay, (((200 - Agi) * 1200) / 200); + overrideattack (@spellpower/50)+3, .@delay, 4, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack"; callfunc "magic_exp"; end; OnAttack: misceffect FX_MAGIC_BLACK, strcharinfo(0); if (target(BL_ID, @target_id, 50) != 50) end; // 0x20 | 0x02 | 0x10 - void call("elt_damage", @damage, @dmg_bonus, ELT_WATER, ELT_FIRE, FX_MAGIC_BLACK); + void call("elt_damage", @flar_damage, @flar_dmg_bonus, ELT_WATER, ELT_FIRE, FX_MAGIC_BLACK); end; OnInit: diff --git a/world/map/npc/magic/level1-grow-alizarin.txt b/world/map/npc/magic/level1-grow-alizarin.txt index c44a4f47..bc88380d 100644 --- a/world/map/npc/magic/level1-grow-alizarin.txt +++ b/world/map/npc/magic/level1-grow-alizarin.txt @@ -1,12 +1,13 @@ -|script|grow-alizarin|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 4) end; if (getskilllv(.school) < .level) end; if (countitem("AlizarinHerb") < 1 || countitem("Root") < 1) end; delitem "AlizarinHerb", 1; delitem "Root", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 2000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 4; misceffect FX_MAGIC_GREEN, strcharinfo(0); diff --git a/world/map/npc/magic/level1-grow-cobalt.txt b/world/map/npc/magic/level1-grow-cobalt.txt index 1eb923b2..cc7d1b33 100644 --- a/world/map/npc/magic/level1-grow-cobalt.txt +++ b/world/map/npc/magic/level1-grow-cobalt.txt @@ -1,12 +1,13 @@ -|script|grow-cobalt|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 4) end; if (getskilllv(.school) < .level) end; if (countitem("CobaltHerb") < 1 || countitem("Root") < 1) end; delitem "CobaltHerb", 1; delitem "Root", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 2000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 4; misceffect FX_MAGIC_GREEN, strcharinfo(0); diff --git a/world/map/npc/magic/level1-grow-gamboge.txt b/world/map/npc/magic/level1-grow-gamboge.txt index 4ac779a8..559c99e8 100644 --- a/world/map/npc/magic/level1-grow-gamboge.txt +++ b/world/map/npc/magic/level1-grow-gamboge.txt @@ -1,12 +1,13 @@ -|script|grow-gamboge|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 4) end; if (getskilllv(.school) < .level) end; if (countitem("GambogeHerb") < 1 || countitem("Root") < 1) end; delitem "GambogeHerb", 1; delitem "Root", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 2000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 4; misceffect FX_MAGIC_GREEN, strcharinfo(0); diff --git a/world/map/npc/magic/level1-grow-mauve.txt b/world/map/npc/magic/level1-grow-mauve.txt index 1744660a..5ae266e2 100644 --- a/world/map/npc/magic/level1-grow-mauve.txt +++ b/world/map/npc/magic/level1-grow-mauve.txt @@ -1,12 +1,13 @@ -|script|grow-mauve|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 4) end; if (getskilllv(.school) < .level) end; if (countitem("MauveHerb") < 1 || countitem("Root") < 1) end; delitem "MauveHerb", 1; delitem "Root", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 2000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 4; misceffect FX_MAGIC_GREEN, strcharinfo(0); diff --git a/world/map/npc/magic/level1-lesser-heal.txt b/world/map/npc/magic/level1-lesser-heal.txt index c4c74dd7..17f48b95 100644 --- a/world/map/npc/magic/level1-lesser-heal.txt +++ b/world/map/npc/magic/level1-lesser-heal.txt @@ -1,8 +1,7 @@ -|script|lesser-heal|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 6) end; - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff if (getskilllv(.school) < .level) end; set @target_id, getcharid(3, @args$); if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self @@ -11,6 +10,8 @@ if (distance(BL_ID, @target_id) >= .@range) end; if (PVP_CHANNEL != get(PVP_CHANNEL, @target_id) && get(PVP_CHANNEL, @target_id) != 0) end; if (countitem("Lifestone") < 1) end; + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 500, "Magic Timer::OnClear"; // set the new debuff delitem "Lifestone", 1; callfunc "adjust_spellpower"; set Sp, Sp - 6; @@ -32,7 +33,7 @@ L_NotMe: L_Continue: if (getskilllv(SKILL_MAGIC_DARK) >= 1) sc_start SC_HALT_REGENERATE, 2000, 0; if (attachrid(@target_id) != 1) end; // XXX: to avoid the ugly attachrid method we would need some kind of `run_as` builtin - if (!(isdead())) heal 200, 1, 1; + if (!(isdead())) heal 200, 0, 1; end; L_Mouboo: diff --git a/world/map/npc/magic/level1-magic-blade.txt b/world/map/npc/magic/level1-magic-blade.txt index 915cb018..954675fe 100644 --- a/world/map/npc/magic/level1-magic-blade.txt +++ b/world/map/npc/magic/level1-magic-blade.txt @@ -1,6 +1,6 @@ -|script|magic-blade|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 9) end; set .@level, getskilllv(.school); if (.@level < .level) end; @@ -9,11 +9,13 @@ elif (.@level <= 2 && countitem("Knife") >= 1) set @chiza_component$, "Knife"; elif (.@level <= 2) end; if (@chiza_component$ != "") delitem @chiza_component$, 1; - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 500, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 9; misceffect FX_MAGIC_BLACK, strcharinfo(0); - overrideattack (@spellpower/15)+10, 1200, 1, ATTACK_ICON_GENERIC, 30, strnpcinfo(0)+"::OnAttack"; + set .@delay, (((200 - Agi) * 1200) / 200); + overrideattack (@spellpower/15)+10, .@delay, 1, ATTACK_ICON_GENERIC, 30, strnpcinfo(0)+"::OnAttack"; callfunc "magic_exp"; set @chiza_str, Str; // do not allow to equip light armor, cast, and then switch to heavy armor to get bonus str end; diff --git a/world/map/npc/magic/level1-make-sulphur.txt b/world/map/npc/magic/level1-make-sulphur.txt index fe175265..a181d057 100644 --- a/world/map/npc/magic/level1-make-sulphur.txt +++ b/world/map/npc/magic/level1-make-sulphur.txt @@ -1,10 +1,11 @@ -|script|make-sulphur|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 4) end; if (getskilllv(.school) < .level) end; if (countitem("PileOfAsh") >= 1) delitem "PileOfAsh", 1; else end; - set MAGIC_CAST_TICK, gettimetick(2) + 4; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 4000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 4; misceffect FX_MAGIC_RED, strcharinfo(0); diff --git a/world/map/npc/magic/level1-sense-spouse.txt b/world/map/npc/magic/level1-sense-spouse.txt new file mode 100644 index 00000000..1766276c --- /dev/null +++ b/world/map/npc/magic/level1-sense-spouse.txt @@ -0,0 +1,25 @@ +-|script|sense-spouse|32767 +{ + set .@m, getpartnerid2(); + if (.@m < 1) + goto L_NotMarried; + if (isloggedin(.@m) < 1) + goto L_NotOnline; + if (sc_check(SC_HIDE, .@m) || getpvpflag(1, .@m)) + goto L_NotOnline; + message strcharinfo(0), "Spouse : Your spouse is... somewhere."; + end; + +L_NotOnline: + message strcharinfo(0), "Spouse : Your spouse is not online, or maybe just hiding from you."; + end; + +L_NotMarried: + message strcharinfo(0), "Spouse : You are not married, or no longer married (sorry for being the one telling you the bad news)."; + end; + +OnInit: + set .invocation$, chr(MAGIC_SYMBOL) + "inzuwilt"; // used in npcs that refer to this spell + registercmd .invocation$, strnpcinfo(0); + end; +} diff --git a/world/map/npc/magic/level1-summon-maggots.txt b/world/map/npc/magic/level1-summon-maggots.txt index 9247e56c..5daddd8a 100644 --- a/world/map/npc/magic/level1-summon-maggots.txt +++ b/world/map/npc/magic/level1-summon-maggots.txt @@ -3,13 +3,14 @@ end; OnCast: - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 21) end; if (getskilllv(.school) < .level) end; if (countitem("MaggotSlime") < 1 || countitem("Root") < 1) end; delitem "MaggotSlime", 1; delitem "Root", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 20000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 21; misceffect FX_MAGIC_BLUE, strcharinfo(0); diff --git a/world/map/npc/magic/level1-transmute-wood.txt b/world/map/npc/magic/level1-transmute-wood.txt index 9ec8403e..935ed2fa 100644 --- a/world/map/npc/magic/level1-transmute-wood.txt +++ b/world/map/npc/magic/level1-transmute-wood.txt @@ -1,10 +1,11 @@ -|script|spell-transmute-wood|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 5) end; if (getskilllv(.school) < .level) end; if (countitem("RawLog") >= 1) delitem "RawLog", 1; else end; - set MAGIC_CAST_TICK, gettimetick(2) + 4; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 4000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 5; misceffect FX_MAGIC_RED, strcharinfo(0); diff --git a/world/map/npc/magic/level2-arrow-hail.txt b/world/map/npc/magic/level2-arrow-hail.txt index f1a3686b..3be14f1a 100644 --- a/world/map/npc/magic/level2-arrow-hail.txt +++ b/world/map/npc/magic/level2-arrow-hail.txt @@ -4,7 +4,7 @@ end; OnCast: - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (getskilllv(.school) < .level) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (Sp < 25) end; @@ -16,7 +16,8 @@ OnCast: else end; delitem "SulphurPowder", 1; set Sp, Sp - 25; - set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 5000, "Magic Timer::OnClear"; // set the new debuff setarray @away[0], POS_X, POS_Y, getdir(), (.range + 1), 0; callsub S_AwayFrom; @@ -77,7 +78,9 @@ S_Launch: npcareawarp .area_x - 6, .area_y - 6, .area_x + 6, .area_y + 6, 0, strnpcinfo(0); misceffect FX_ARROW_HAIL; set .done, 0; - foreach 3, strnpcinfo(3), getnpcx(), getnpcy(), getnpcx(), getnpcy(), strnpcinfo(0) + "::OnHit"; + foreach 2, strnpcinfo(3), getnpcx(), getnpcy(), getnpcx(), getnpcy(), strnpcinfo(0) + "::OnHit"; + if (PVP_CHANNEL || getmapflag(getmap(), MF_PVP)) + foreach 0, strnpcinfo(3), getnpcx(), getnpcy(), getnpcx(), getnpcy(), strnpcinfo(0) + "::OnHit"; if(!.done && getx() == getnpcx() && gety() == getnpcy()) heal 0 - (.damage + rand(.damage_bonus) + rand(.damage_bonus)), 0; // injure caster set .launch, .launch + 1; diff --git a/world/map/npc/magic/level2-barrier.txt b/world/map/npc/magic/level2-barrier.txt index 8d74414a..3f78677b 100644 --- a/world/map/npc/magic/level2-barrier.txt +++ b/world/map/npc/magic/level2-barrier.txt @@ -1,6 +1,6 @@ -|script|magic barrier|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 15) end; set .@level, getskilllv(.school); if (.@level < .level) end; @@ -16,7 +16,8 @@ if (attachrid(@asorm_caster) != 1) end; if (@target_hat == 888) end; // FIXME: this whole 5 line block could be done with only one line if we modify getequipid OR make equip_ into params - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 1000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 15; misceffect FX_MAGIC_BLUE, strcharinfo(0); @@ -34,6 +35,7 @@ end; OnEnd: + if (sc_check(SC_MBARRIER) != 1) end; message strcharinfo(0), "Barrier : Your magical barrier dissipates."; misceffect FX_MAGIC_DEFAULT, strcharinfo(0); end; diff --git a/world/map/npc/magic/level2-detect-players.txt b/world/map/npc/magic/level2-detect-players.txt index 41ab2e03..9867b700 100644 --- a/world/map/npc/magic/level2-detect-players.txt +++ b/world/map/npc/magic/level2-detect-players.txt @@ -1,12 +1,13 @@ -|script|detect-players|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 7) end; if (getskilllv(.school) < .level) end; - set MAGIC_CAST_TICK, gettimetick(2) + 1; // XXX the casttime is 300 so should this be 0 ? + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 300, "Magic Timer::OnClear"; callfunc "adjust_spellpower"; set Sp, Sp - 7; - misceffect FX_MAGIC_DARKRED, strcharinfo(0); + misceffect FX_MAGIC_GENERIC, strcharinfo(0); callfunc "magic_exp"; set @inwilt$, ""; set .@d, @spellpower/2; diff --git a/world/map/npc/magic/level2-enchant-lifestone.txt b/world/map/npc/magic/level2-enchant-lifestone.txt index 19cc0a84..ba8536bf 100644 --- a/world/map/npc/magic/level2-enchant-lifestone.txt +++ b/world/map/npc/magic/level2-enchant-lifestone.txt @@ -1,6 +1,6 @@ -|script|enchant-lifestone|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 15) end; if (getskilllv(.school) < .level) end; if (countitem("BugLeg") >= 1) delitem "BugLeg", 1; @@ -17,7 +17,8 @@ L_Herbs: goto L_Proceed; L_Proceed: - set MAGIC_CAST_TICK, gettimetick(2) + 4; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 4000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 15; misceffect FX_MAGIC_GENERIC, strcharinfo(0); diff --git a/world/map/npc/magic/level2-flying-backpack.txt b/world/map/npc/magic/level2-flying-backpack.txt index 2480ef14..b87fba02 100644 --- a/world/map/npc/magic/level2-flying-backpack.txt +++ b/world/map/npc/magic/level2-flying-backpack.txt @@ -1,13 +1,14 @@ -|script|flying-backpack|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 12) end; set .@level, getskilllv(.school); if (.@level < .level) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (.@level <= 3 && countitem("SilkCocoon") >= 1) delitem "SilkCocoon", 1; elif (.@level <= 3) end; - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 1000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 12; misceffect FX_MAGIC_GREEN, strcharinfo(0); @@ -25,6 +26,7 @@ end; OnEnd: + if (sc_check(SC_FLYING_BACKPACK) != 1) end; message strcharinfo(0), "Backpack : Your backpack is no longer levitating."; misceffect FX_MAGIC_GENERIC, strcharinfo(0); end; diff --git a/world/map/npc/magic/level2-happy-curse.txt b/world/map/npc/magic/level2-happy-curse.txt index a6e314dd..190c7d23 100644 --- a/world/map/npc/magic/level2-happy-curse.txt +++ b/world/map/npc/magic/level2-happy-curse.txt @@ -1,6 +1,6 @@ -|script|happy-curse|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 13) end; set .@level, getskilllv(.school); if (.@level < .level) end; @@ -10,7 +10,8 @@ set @target_id, getcharid(3, @args$); if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 1000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 13; misceffect FX_MAGIC_GREEN, strcharinfo(0); diff --git a/world/map/npc/magic/level2-hide.txt b/world/map/npc/magic/level2-hide.txt index d6bf538c..1895cff1 100644 --- a/world/map/npc/magic/level2-hide.txt +++ b/world/map/npc/magic/level2-hide.txt @@ -1,6 +1,6 @@ -|script|spell-hide|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 11) end; set .@level, getskilllv(.school); if (.@level < .level) end; @@ -10,7 +10,8 @@ set @target_id, getcharid(3, @args$); if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 1000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 11; misceffect FX_MAGIC_BLUE, strcharinfo(0); @@ -29,6 +30,7 @@ end; OnEnd: + if (sc_check(SC_HIDE) != 1) end; message strcharinfo(0), "Magic : You are no longer hidden."; misceffect FX_MAGIC_GENERIC, strcharinfo(0); end; diff --git a/world/map/npc/magic/level2-lay-on-hands.txt b/world/map/npc/magic/level2-lay-on-hands.txt index ab5b2616..4e3a1e9c 100644 --- a/world/map/npc/magic/level2-lay-on-hands.txt +++ b/world/map/npc/magic/level2-lay-on-hands.txt @@ -1,6 +1,6 @@ -|script|lay-on-hands|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 10) end; if (getskilllv(.school) < .level) end; if (getskilllv(SKILL_MAGIC) < .level) end; @@ -16,7 +16,8 @@ goto L_Pay; L_Pay: - set MAGIC_CAST_TICK, gettimetick(2) + 1; // XXX should this be 0 ? + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 500, "Magic Timer::OnClear"; // XXX should this be 0 ? set Sp, Sp - 10; misceffect FX_MAGIC_WHITE, strcharinfo(0); // on caster misceffect FX_MAGIC_WHITE, @args$; // on target diff --git a/world/map/npc/magic/level2-lightning-strike.txt b/world/map/npc/magic/level2-lightning-strike.txt index c9cf4602..67d1a72e 100644 --- a/world/map/npc/magic/level2-lightning-strike.txt +++ b/world/map/npc/magic/level2-lightning-strike.txt @@ -1,19 +1,21 @@ -|script|lightning-strike|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 20) end; if (getskilllv(SKILL_MAGIC) < .level) end; set .@level, getskilllv(.school); if (.@level < .level) end; if (.@level <= 3 && countitem("IronPowder") >= 1) delitem "IronPowder", 1; elif (.@level <= 3) end; - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 1000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 20; misceffect FX_MAGIC_BLACK, strcharinfo(0); set @ingrav_sp, @spellpower; set @ingrav_luk, Luk; - overrideattack (@spellpower/90)+1, 3000, 8, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack"; + set .@delay, (((200 - Agi) * 3000) / 200); + overrideattack (@spellpower/90)+1, .@delay, 8, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack"; callfunc "magic_exp"; end; @@ -42,7 +44,7 @@ OnNpc: L_InRain: set @used, 0; - foreach 3, getmap(), @ar[0], @ar[1], @ar[2], @ar[3], strnpcinfo(0)+"::OnEntityInRain"; + foreach 0, getmap(), @ar[0], @ar[1], @ar[2], @ar[3], strnpcinfo(0)+"::OnEntityInRain"; if (@used >= 1 && (@ingrav_luk + rand(200)) >= 150) end; misceffect FX_LIGHTNING1 + rand(3), strcharinfo(0); heal 0 - @ingrav_sp, 0; diff --git a/world/map/npc/magic/level2-magic-knuckles.txt b/world/map/npc/magic/level2-magic-knuckles.txt index a91feeb2..3f4d4667 100644 --- a/world/map/npc/magic/level2-magic-knuckles.txt +++ b/world/map/npc/magic/level2-magic-knuckles.txt @@ -1,17 +1,19 @@ -|script|magic-knuckles|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 20) end; if (getskilllv(SKILL_MAGIC) < .level) end; set .@level, getskilllv(.school); if (.@level < .level) end; if (.@level <= 3 && countitem("Beer") >= 1) delitem "Beer", 1; elif (.@level <= 3) end; - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 500, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 20; misceffect FX_MAGIC_BLACK, strcharinfo(0); - overrideattack (@spellpower/10)+10, 1300, 1, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack"; + set .@delay, (((200 - Agi) * 1300) / 200); + overrideattack (@spellpower/10)+10, .@delay, 1, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack"; callfunc "magic_exp"; set @upmaru_str, Str; // do not allow to equip light armor, cast, and then switch to heavy armor to get bonus str end; @@ -22,7 +24,7 @@ OnAttack: OnInit: set .school, SKILL_MAGIC_WAR; - set .invocation$, chr(MAGIC_SYMBOL) + "upmaru"; // used in npcs that refer to this spell + set .invocation$, chr(MAGIC_SYMBOL) + "upmarmu"; // used in npcs that refer to this spell void call("magic_register"); set .level, 2; set .exp_gain, 1; diff --git a/world/map/npc/magic/level2-make-arrows.txt b/world/map/npc/magic/level2-make-arrows.txt index db3250a6..5bad035b 100644 --- a/world/map/npc/magic/level2-make-arrows.txt +++ b/world/map/npc/magic/level2-make-arrows.txt @@ -1,12 +1,13 @@ -|script|make-arrows|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 8) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; if (countitem("RawLog") < 1) end; delitem "RawLog", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 5000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 8; misceffect FX_MAGIC_RED, strcharinfo(0); diff --git a/world/map/npc/magic/level2-make-iron-powder.txt b/world/map/npc/magic/level2-make-iron-powder.txt index 7cf7a134..55bdd0b9 100644 --- a/world/map/npc/magic/level2-make-iron-powder.txt +++ b/world/map/npc/magic/level2-make-iron-powder.txt @@ -1,12 +1,13 @@ -|script|make-iron-powder|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 8) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; if (countitem("IronOre") < 1) end; delitem "IronOre", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 5000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 8; misceffect FX_MAGIC_RED, strcharinfo(0); diff --git a/world/map/npc/magic/level2-make-shirt.txt b/world/map/npc/magic/level2-make-shirt.txt index 8585a509..b7a1570f 100644 --- a/world/map/npc/magic/level2-make-shirt.txt +++ b/world/map/npc/magic/level2-make-shirt.txt @@ -1,10 +1,11 @@ -|script|make-shirt|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 25) end; if (getskilllv(.school) < .level) end; if (countitem("CottonCloth") >= 5) delitem "CottonCloth", 5; else end; - set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 5000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 25; misceffect FX_MAGIC_RED, strcharinfo(0); diff --git a/world/map/npc/magic/level2-make-short-tanktop.txt b/world/map/npc/magic/level2-make-short-tanktop.txt index 69297483..eee48425 100644 --- a/world/map/npc/magic/level2-make-short-tanktop.txt +++ b/world/map/npc/magic/level2-make-short-tanktop.txt @@ -1,10 +1,11 @@ -|script|make-short-tanktop|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 25) end; if (getskilllv(.school) < .level) end; if (countitem("CottonCloth") >= 3) delitem "CottonCloth", 3; else end; - set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 5000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 25; misceffect FX_MAGIC_RED, strcharinfo(0); diff --git a/world/map/npc/magic/level2-make-tanktop.txt b/world/map/npc/magic/level2-make-tanktop.txt index cec49d2e..678cf650 100644 --- a/world/map/npc/magic/level2-make-tanktop.txt +++ b/world/map/npc/magic/level2-make-tanktop.txt @@ -1,10 +1,11 @@ -|script|make-tanktop|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 25) end; if (getskilllv(.school) < .level) end; if (countitem("CottonCloth") >= 4) delitem "CottonCloth", 4; else end; - set MAGIC_CAST_TICK, gettimetick(2) + 5; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 5000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 25; misceffect FX_MAGIC_RED, strcharinfo(0); diff --git a/world/map/npc/magic/level2-protect.txt b/world/map/npc/magic/level2-protect.txt index bee84133..e66aab3a 100644 --- a/world/map/npc/magic/level2-protect.txt +++ b/world/map/npc/magic/level2-protect.txt @@ -1,6 +1,6 @@ -|script|protect|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 14) end; set .@level, getskilllv(.school); if (.@level < .level) end; @@ -16,7 +16,8 @@ if (attachrid(@betsanc_caster) != 1) end; if (@target_hat == 888) end; // FIXME: this whole 5 line block could be done with only one line if we modify getequipid - set MAGIC_CAST_TICK, gettimetick(2) + 2; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 1500, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 14; misceffect FX_MAGIC_GREEN, strcharinfo(0); @@ -34,6 +35,7 @@ end; OnEnd: + if (sc_check(SC_PHYS_SHIELD) != 1) end; message strcharinfo(0), "Shield : You feel less protected."; misceffect FX_MAGIC_SHIELD_ENDS, strcharinfo(0); end; diff --git a/world/map/npc/magic/level2-rain.txt b/world/map/npc/magic/level2-rain.txt index 2d13cc8d..d3718170 100644 --- a/world/map/npc/magic/level2-rain.txt +++ b/world/map/npc/magic/level2-rain.txt @@ -4,7 +4,7 @@ end; OnCast: - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (getskilllv(.school) < .level) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (Sp < 17) end; @@ -14,7 +14,8 @@ OnCast: if (getskilllv(.school) < 4 && countitem("BottleOfWater") >= 1) delitem "BottleOfWater", 1; elif (getskilllv(.school) < 4) end; set Sp, Sp - 17; - set MAGIC_CAST_TICK, gettimetick(2) + 3; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 3000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set @krad, min(.max_radius,(min(@spellpower,200)/30)+3); // kaflosh radius @@ -74,7 +75,7 @@ OnLaunch: S_Launch: npcareawarp .initial_x - .radius, .initial_y - .radius, .initial_x + .radius, .initial_y + .radius, 0, strnpcinfo(0); misceffect FX_RAIN; - foreach 3, strnpcinfo(3), getnpcx()-1, getnpcy()-1, getnpcx()+1, getnpcy()+1, strnpcinfo(0) + "::OnHit"; + foreach 2, strnpcinfo(3), getnpcx()-1, getnpcy()-1, getnpcx()+1, getnpcy()+1, strnpcinfo(0) + "::OnHit"; set .launch, .launch + 1; if(.launch < .max_launch) goto S_Launch; return; @@ -84,7 +85,7 @@ OnHit: if(getmap() != strnpcinfo(3)) destroy; // destroy if caster left the map if(target(.caster, @target_id, 16) != 16 && .caster != @target_id) end; if((get(BL_TYPE, @target_id) & 1) == 0) end; // either mob or pc - if(elttype(@target_id) == ELT_FIRE) + if(get(ELTTYPE, @target_id) == ELT_FIRE) injure .caster, @target_id, rand((@spellpower/15)+5)+2; end; diff --git a/world/map/npc/magic/level2-shear.txt b/world/map/npc/magic/level2-shear.txt index afa6a59e..c76b1093 100644 --- a/world/map/npc/magic/level2-shear.txt +++ b/world/map/npc/magic/level2-shear.txt @@ -1,14 +1,16 @@ -|script|shear|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 23) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 1000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 23; misceffect FX_MAGIC_GREEN, strcharinfo(0); - overrideattack 1, 2000, 1, ATTACK_ICON_SHEARING, 30, strnpcinfo(0)+"::OnAttack"; + set .@delay, (((200 - Agi) * 2000) / 200); + overrideattack 1, .@delay, 1, ATTACK_ICON_SHEARING, 30, strnpcinfo(0)+"::OnAttack"; callfunc "magic_exp"; set @chipchip_sp, @spellpower; end; diff --git a/world/map/npc/magic/level2-summon-fluffies.txt b/world/map/npc/magic/level2-summon-fluffies.txt index 32fcd750..cd754e33 100644 --- a/world/map/npc/magic/level2-summon-fluffies.txt +++ b/world/map/npc/magic/level2-summon-fluffies.txt @@ -3,14 +3,15 @@ end; OnCast: - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 39) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; if (countitem("WhiteFur") < 1 || countitem("Root") < 1) end; delitem "WhiteFur", 1; delitem "Root", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 20000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 39; misceffect FX_MAGIC_BLUE, strcharinfo(0); diff --git a/world/map/npc/magic/level2-summon-mouboo.txt b/world/map/npc/magic/level2-summon-mouboo.txt index 5055362f..8eb074c6 100644 --- a/world/map/npc/magic/level2-summon-mouboo.txt +++ b/world/map/npc/magic/level2-summon-mouboo.txt @@ -3,14 +3,15 @@ end; OnCast: - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 35) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; if (countitem("MoubooFigurine") < 1 || countitem("Root") < 1) end; delitem "MoubooFigurine", 1; delitem "Root", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 20000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 35; misceffect FX_MAGIC_BLUE, strcharinfo(0); diff --git a/world/map/npc/magic/level2-summon-pinkie.txt b/world/map/npc/magic/level2-summon-pinkie.txt index f4716749..b91ec1d9 100644 --- a/world/map/npc/magic/level2-summon-pinkie.txt +++ b/world/map/npc/magic/level2-summon-pinkie.txt @@ -3,14 +3,15 @@ end; OnCast: - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 35) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; if (countitem("PinkAntenna") < 1 || countitem("Root") < 1) end; delitem "PinkAntenna", 1; delitem "Root", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 20000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 35; misceffect FX_MAGIC_BLUE, strcharinfo(0); diff --git a/world/map/npc/magic/level2-summon-snakes.txt b/world/map/npc/magic/level2-summon-snakes.txt index 4998fded..7490c506 100644 --- a/world/map/npc/magic/level2-summon-snakes.txt +++ b/world/map/npc/magic/level2-summon-snakes.txt @@ -3,7 +3,7 @@ end; OnCast: - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 40) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; @@ -11,7 +11,8 @@ OnCast: if (OrumQuest <= 40) end; delitem "DarkCrystal", 1; delitem "SnakeEgg", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 15; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 15000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 40; misceffect FX_MAGIC_DARKRED, strcharinfo(0); diff --git a/world/map/npc/magic/level2-summon-spiky-mushroom.txt b/world/map/npc/magic/level2-summon-spiky-mushroom.txt index 97d916b0..39ad9ecd 100644 --- a/world/map/npc/magic/level2-summon-spiky-mushroom.txt +++ b/world/map/npc/magic/level2-summon-spiky-mushroom.txt @@ -3,14 +3,15 @@ end; OnCast: - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 33) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; if (countitem("HardSpike") < 1 || countitem("Root") < 1) end; delitem "HardSpike", 1; delitem "Root", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 20; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 20000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 33; misceffect FX_MAGIC_BLUE, strcharinfo(0); diff --git a/world/map/npc/magic/level2-summon-wickedmushroom.txt b/world/map/npc/magic/level2-summon-wickedmushroom.txt index 3960437a..df17742f 100644 --- a/world/map/npc/magic/level2-summon-wickedmushroom.txt +++ b/world/map/npc/magic/level2-summon-wickedmushroom.txt @@ -3,7 +3,7 @@ end; OnCast: - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 35) end; if (getskilllv(SKILL_MAGIC) < .level) end; if (getskilllv(.school) < .level) end; @@ -11,7 +11,8 @@ OnCast: if (OrumQuest <= 36) end; delitem "DarkCrystal", 1; delitem "SmallMushroom", 1; - set MAGIC_CAST_TICK, gettimetick(2) + 15; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 15000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 35; misceffect FX_MAGIC_DARKRED, strcharinfo(0); diff --git a/world/map/npc/magic/level2-toxic-dart.txt b/world/map/npc/magic/level2-toxic-dart.txt index 9674b64f..a14710d6 100644 --- a/world/map/npc/magic/level2-toxic-dart.txt +++ b/world/map/npc/magic/level2-toxic-dart.txt @@ -1,26 +1,27 @@ -|script|toxic-dart|32767 { - if(call("magic_checks")) end; // << I wish we had functions that could return >> + if(call("magic_checks")) end; if (Sp < 15) end; set .@level, getskilllv(.school); if (.@level < .level) end; if (OrumQuest <= 37) end; if (.@level <= 2 && countitem("Root") >= 2) delitem "Root", 2; elif (.@level <= 2) end; - set MAGIC_CAST_TICK, gettimetick(2) + 1; // set the new debuff + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 500, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 15; misceffect FX_MAGIC_DARKRED, strcharinfo(0); - set @damage, sqrt(@spellpower) * 5; - set @dmg_bonus, (BaseLevel/3) + 5; - overrideattack (@spellpower/75)+3, 1200, 4, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack"; + setarray @phlex_damage[0], (sqrt(@spellpower) * 5), ((BaseLevel/3) + 5); + set .@delay, (((200 - Agi) * 1200) / 200); + overrideattack (@spellpower/75)+3, .@delay, 4, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack"; callfunc "magic_exp"; end; OnAttack: misceffect FX_MAGIC_DARKRED, strcharinfo(0); if (target(BL_ID, @target_id, 50) != 50) end; // 0x20 | 0x02 | 0x10 - void call("elt_damage", @damage, @dmg_bonus, ELT_NEUTRAL, ELT_POISON, FX_FIRE_BURST); + void call("elt_damage", @phlex_damage[0], @phlex_damage[1], ELT_NEUTRAL, ELT_POISON, FX_FIRE_BURST); if(@target_id != BL_ID && isloggedin(@target_id)) // this is a dirty trick to check if the target is a player sc_start sc_poison, 5000+(@spellpower*1200), max(15,@spellpower/15)+5, @target_id; end; diff --git a/world/map/npc/magic/level3-necromancy.txt b/world/map/npc/magic/level3-necromancy.txt index 66643d39..ef2d761f 100644 --- a/world/map/npc/magic/level3-necromancy.txt +++ b/world/map/npc/magic/level3-necromancy.txt @@ -16,7 +16,8 @@ if (getmapflag(getmap(), MF_NOSAVE)) end; // do not allow for maps like illia or candor if (countitem("Soul") >= 1) delitem "Soul", 1; else end; - set MAGIC_CAST_TICK, gettimetick(2) + 20; + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 20000, "Magic Timer::OnClear"; set Sp, Sp - 50; misceffect FX_MAGIC_DARKRED, strcharinfo(0); // on caster misceffect FX_PENTAGRAM_BUILDUP, @args$; // on target diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf index 57aa43e0..0935f246 100644 --- a/world/map/npc/scripts.conf +++ b/world/map/npc/scripts.conf @@ -17,8 +17,6 @@ npc: npc/functions/soul_menhir.txt npc: npc/functions/time.txt npc: npc/functions/water_bottle.txt npc: npc/functions/evil_obelisk.txt -npc: npc/functions/debug.txt -npc: npc/functions/superdebug.txt npc: npc/functions/announcements.txt npc: npc/functions/lockpicking.txt npc: npc/functions/default_npc_checks.txt @@ -34,7 +32,6 @@ npc: npc/functions/motdconfig.txt npc: npc/functions/hug.txt // Item Functions -npc: npc/items/magic_gm_top_hat.txt npc: npc/items/purification_potion.txt npc: npc/items/scissors.txt npc: npc/items/pickled_beets.txt -- cgit v1.2.3-70-g09d2 From 1f5cb5b8f93c9931c32393c2d69a739ae2f1c3d3 Mon Sep 17 00:00:00 2001 From: mekolat Date: Fri, 8 Apr 2016 13:06:52 -0400 Subject: only require base magic skill for level 1 spells --- world/map/npc/magic/level1-aggravate.txt | 4 ++-- world/map/npc/magic/level1-detect-magic.txt | 4 ++-- world/map/npc/magic/level1-flare-dart.txt | 2 +- world/map/npc/magic/level1-grow-alizarin.txt | 4 ++-- world/map/npc/magic/level1-grow-cobalt.txt | 4 ++-- world/map/npc/magic/level1-grow-gamboge.txt | 4 ++-- world/map/npc/magic/level1-grow-mauve.txt | 4 ++-- world/map/npc/magic/level1-lesser-heal.txt | 2 +- world/map/npc/magic/level1-magic-blade.txt | 2 +- world/map/npc/magic/level1-make-sulphur.txt | 4 ++-- world/map/npc/magic/level1-summon-maggots.txt | 4 ++-- world/map/npc/magic/level1-transmute-wood.txt | 4 ++-- 12 files changed, 21 insertions(+), 21 deletions(-) (limited to 'world') diff --git a/world/map/npc/magic/level1-aggravate.txt b/world/map/npc/magic/level1-aggravate.txt index 5b3d5674..05474a2a 100644 --- a/world/map/npc/magic/level1-aggravate.txt +++ b/world/map/npc/magic/level1-aggravate.txt @@ -1,8 +1,8 @@ -|script|spell-aggravate|32767 { - if(call("magic_checks")) end; + if(call("magic_checks")) end; if (Sp < 3) end; - if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; set @_M_BLOCK, 1; // block casting, until the timer clears it addtimer 1000, "Magic Timer::OnClear"; // set the new debuff set @args$, ""; callfunc "adjust_spellpower"; // we reset @args$ because this spell should not have a target diff --git a/world/map/npc/magic/level1-detect-magic.txt b/world/map/npc/magic/level1-detect-magic.txt index e975e952..f0c01592 100644 --- a/world/map/npc/magic/level1-detect-magic.txt +++ b/world/map/npc/magic/level1-detect-magic.txt @@ -1,8 +1,8 @@ -|script|detect-magic|32767 { - if(call("magic_checks")) end; + if(call("magic_checks")) end; if (Sp < 3) end; - if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; set @_M_BLOCK, 1; // block casting, until the timer clears it addtimer 6000, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; diff --git a/world/map/npc/magic/level1-flare-dart.txt b/world/map/npc/magic/level1-flare-dart.txt index 29a4f3c1..2f17c499 100644 --- a/world/map/npc/magic/level1-flare-dart.txt +++ b/world/map/npc/magic/level1-flare-dart.txt @@ -3,7 +3,7 @@ if(call("magic_checks")) end; if (Sp < 10) end; set @level, getskilllv(.school); - if (@level < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; if (@level <= 2 && countitem("SulphurPowder") >= 1) delitem "SulphurPowder", 1; elif (@level <= 2) end; set @_M_BLOCK, 1; // block casting, until the timer clears it diff --git a/world/map/npc/magic/level1-grow-alizarin.txt b/world/map/npc/magic/level1-grow-alizarin.txt index bc88380d..601f32c2 100644 --- a/world/map/npc/magic/level1-grow-alizarin.txt +++ b/world/map/npc/magic/level1-grow-alizarin.txt @@ -1,8 +1,8 @@ -|script|grow-alizarin|32767 { - if(call("magic_checks")) end; + if(call("magic_checks")) end; if (Sp < 4) end; - if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; if (countitem("AlizarinHerb") < 1 || countitem("Root") < 1) end; delitem "AlizarinHerb", 1; delitem "Root", 1; diff --git a/world/map/npc/magic/level1-grow-cobalt.txt b/world/map/npc/magic/level1-grow-cobalt.txt index cc7d1b33..78ab602a 100644 --- a/world/map/npc/magic/level1-grow-cobalt.txt +++ b/world/map/npc/magic/level1-grow-cobalt.txt @@ -1,8 +1,8 @@ -|script|grow-cobalt|32767 { - if(call("magic_checks")) end; + if(call("magic_checks")) end; if (Sp < 4) end; - if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; if (countitem("CobaltHerb") < 1 || countitem("Root") < 1) end; delitem "CobaltHerb", 1; delitem "Root", 1; diff --git a/world/map/npc/magic/level1-grow-gamboge.txt b/world/map/npc/magic/level1-grow-gamboge.txt index 559c99e8..eda23f70 100644 --- a/world/map/npc/magic/level1-grow-gamboge.txt +++ b/world/map/npc/magic/level1-grow-gamboge.txt @@ -1,8 +1,8 @@ -|script|grow-gamboge|32767 { - if(call("magic_checks")) end; + if(call("magic_checks")) end; if (Sp < 4) end; - if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; if (countitem("GambogeHerb") < 1 || countitem("Root") < 1) end; delitem "GambogeHerb", 1; delitem "Root", 1; diff --git a/world/map/npc/magic/level1-grow-mauve.txt b/world/map/npc/magic/level1-grow-mauve.txt index 5ae266e2..951b71f0 100644 --- a/world/map/npc/magic/level1-grow-mauve.txt +++ b/world/map/npc/magic/level1-grow-mauve.txt @@ -1,8 +1,8 @@ -|script|grow-mauve|32767 { - if(call("magic_checks")) end; + if(call("magic_checks")) end; if (Sp < 4) end; - if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; if (countitem("MauveHerb") < 1 || countitem("Root") < 1) end; delitem "MauveHerb", 1; delitem "Root", 1; diff --git a/world/map/npc/magic/level1-lesser-heal.txt b/world/map/npc/magic/level1-lesser-heal.txt index 17f48b95..fcd9897a 100644 --- a/world/map/npc/magic/level1-lesser-heal.txt +++ b/world/map/npc/magic/level1-lesser-heal.txt @@ -2,7 +2,7 @@ { if(call("magic_checks")) end; if (Sp < 6) end; - if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; set @target_id, getcharid(3, @args$); if (@target_id < 1 || !(isloggedin(@target_id))) set @target_id, BL_ID; // fallback to self if (@args$ == "Mouboo" || @args$ == "mouboo") set @target_id, getnpcid("Mouboo"); diff --git a/world/map/npc/magic/level1-magic-blade.txt b/world/map/npc/magic/level1-magic-blade.txt index 954675fe..262a08a1 100644 --- a/world/map/npc/magic/level1-magic-blade.txt +++ b/world/map/npc/magic/level1-magic-blade.txt @@ -3,7 +3,7 @@ if(call("magic_checks")) end; if (Sp < 9) end; set .@level, getskilllv(.school); - if (.@level < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; set @chiza_component$, ""; if (.@level <= 2 && countitem("SharpKnife") >= 1) set @chiza_component$, "SharpKnife"; elif (.@level <= 2 && countitem("Knife") >= 1) set @chiza_component$, "Knife"; diff --git a/world/map/npc/magic/level1-make-sulphur.txt b/world/map/npc/magic/level1-make-sulphur.txt index a181d057..4aab7e3b 100644 --- a/world/map/npc/magic/level1-make-sulphur.txt +++ b/world/map/npc/magic/level1-make-sulphur.txt @@ -1,8 +1,8 @@ -|script|make-sulphur|32767 { - if(call("magic_checks")) end; + if(call("magic_checks")) end; if (Sp < 4) end; - if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; if (countitem("PileOfAsh") >= 1) delitem "PileOfAsh", 1; else end; set @_M_BLOCK, 1; // block casting, until the timer clears it addtimer 4000, "Magic Timer::OnClear"; // set the new debuff diff --git a/world/map/npc/magic/level1-summon-maggots.txt b/world/map/npc/magic/level1-summon-maggots.txt index 5daddd8a..aa4e646f 100644 --- a/world/map/npc/magic/level1-summon-maggots.txt +++ b/world/map/npc/magic/level1-summon-maggots.txt @@ -3,9 +3,9 @@ end; OnCast: - if(call("magic_checks")) end; + if(call("magic_checks")) end; if (Sp < 21) end; - if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; if (countitem("MaggotSlime") < 1 || countitem("Root") < 1) end; delitem "MaggotSlime", 1; delitem "Root", 1; diff --git a/world/map/npc/magic/level1-transmute-wood.txt b/world/map/npc/magic/level1-transmute-wood.txt index 935ed2fa..a7c86ecc 100644 --- a/world/map/npc/magic/level1-transmute-wood.txt +++ b/world/map/npc/magic/level1-transmute-wood.txt @@ -1,8 +1,8 @@ -|script|spell-transmute-wood|32767 { - if(call("magic_checks")) end; + if(call("magic_checks")) end; if (Sp < 5) end; - if (getskilllv(.school) < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; if (countitem("RawLog") >= 1) delitem "RawLog", 1; else end; set @_M_BLOCK, 1; // block casting, until the timer clears it addtimer 4000, "Magic Timer::OnClear"; // set the new debuff -- cgit v1.2.3-70-g09d2 From 641a0062bdde6d187a0c5bd5c7956ba47ed322cc Mon Sep 17 00:00:00 2001 From: mekolat Date: Tue, 12 Apr 2016 09:21:42 -0400 Subject: leftovers --- world/map/npc/029-2/alchemy.txt | 2 -- world/map/npc/055-1/pumpkins.txt | 2 +- world/map/npc/magic/_procedures.txt | 14 +++++++------- world/map/npc/magic/level0-wand.txt | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-) (limited to 'world') diff --git a/world/map/npc/029-2/alchemy.txt b/world/map/npc/029-2/alchemy.txt index 3d49d5ae..b5e4732c 100644 --- a/world/map/npc/029-2/alchemy.txt +++ b/world/map/npc/029-2/alchemy.txt @@ -71,8 +71,6 @@ L_Abort: S_Spawn: set .@s, getarraysize(.x1); - if (.spawned == 0) - set .spawned, 1; // FIXME: in tmwa (getarraysize2, setarray) allow to set array index 0 when setting in another npc if (.spawned >= .@s) goto S_Return; set .@n$, "#_Al-lab"+chr(3)+.spawned; diff --git a/world/map/npc/055-1/pumpkins.txt b/world/map/npc/055-1/pumpkins.txt index 64b145c8..eff97b2e 100644 --- a/world/map/npc/055-1/pumpkins.txt +++ b/world/map/npc/055-1/pumpkins.txt @@ -122,7 +122,7 @@ S_Return: return; OnHeartbeat: - set .i, 1; // object iterator + set .i, 0; // object iterator freeloop 1; callsub S_IterateObjects; freeloop 0; diff --git a/world/map/npc/magic/_procedures.txt b/world/map/npc/magic/_procedures.txt index df750f73..466d8ca8 100644 --- a/world/map/npc/magic/_procedures.txt +++ b/world/map/npc/magic/_procedures.txt @@ -54,6 +54,7 @@ function|script|melee_damage function|script|magic_create_item { + // FIXME / XXX: IMO, using Luk for this is very bad and unfair set .@exp, (MAGIC_EXPERIENCE & (BYTE_0_MASK | BYTE_1_MASK)) >> BYTE_0_SHIFT; set .@score, (.@exp + rand(min(@spellpower, ((.@exp / 3) + 1)))); set @create_params[2], 1; // success flag @@ -92,12 +93,12 @@ function|script|magic_exp set @last_index, (MAGIC_EXPERIENCE & BYTE_2_MASK) >> BYTE_2_SHIFT; set @last_exp, (MAGIC_EXPERIENCE & (BYTE_0_MASK | BYTE_1_MASK)) >> BYTE_0_SHIFT; - debugmes "old spell index: " + @last_index; - debugmes "new spell index: " + .index; + //debugmes "old spell index: " + @last_index; + //debugmes "new spell index: " + .index; if(getskilllv(SKILL_MAGIC) < (.level + 3) && .index != @last_index) goto L_Gain; - debugmes "same as last spell => don't proceed"; + //debugmes "same as last spell => don't proceed"; goto L_Return; L_Gain: @@ -107,8 +108,8 @@ L_Gain: // spell with no costs and still get the exp set @new_exp, @last_exp + .exp_gain; if(@new_exp > (BYTE_0_MASK | BYTE_1_MASK)) set @new_exp, (BYTE_0_MASK | BYTE_1_MASK); - debugmes "old magic exp: "+ @last_exp; - debugmes "new magic exp: "+ @new_exp; + //debugmes "old magic exp: "+ @last_exp; + //debugmes "new magic exp: "+ @new_exp; set MAGIC_EXPERIENCE, (MAGIC_EXPERIENCE &~ (BYTE_0_MASK | BYTE_1_MASK)) | (@new_exp << BYTE_0_SHIFT); set MAGIC_EXPERIENCE, (MAGIC_EXPERIENCE &~ BYTE_2_MASK) | (.index << BYTE_2_SHIFT); goto L_Return; @@ -124,8 +125,7 @@ function|script|adjust_spellpower if(@args$ == "" || !@args$ || getpartnerid2() == 0) goto L_Return; if(getcharid(3, @args$) < 1 || getpartnerid2() != getcharid(3, @args$) || !(isloggedin(getcharid(3, @args$)))) goto L_Return; - debugmes "You targeted your spouse!"; - // XXX: I need a builtin to check if the target is in range of the caster + //debugmes "You targeted your spouse!"; // XXX: the spell power increases when the target is the spouse so one could // just do #modrilax (spouse) right? // diff --git a/world/map/npc/magic/level0-wand.txt b/world/map/npc/magic/level0-wand.txt index 1a512c0c..07fbb025 100644 --- a/world/map/npc/magic/level0-wand.txt +++ b/world/map/npc/magic/level0-wand.txt @@ -60,7 +60,7 @@ S_LowSp: L_Failed: //misceffect FX_ELECTRICITY_RED, strcharinfo(0); // XXX: do we show an effect on fail? - debugmes "cast or attack failed"; + //debugmes "cast or attack failed"; end; OnInit: -- cgit v1.2.3-70-g09d2 From d55ee9ec4a43cbc7d52619b6a473a4760bb9acdb Mon Sep 17 00:00:00 2001 From: mekolat Date: Tue, 12 Apr 2016 15:28:25 -0400 Subject: add destroynpc command --- world/map/npc/commands/_import.txt | 1 + world/map/npc/commands/destroynpc.txt | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 world/map/npc/commands/destroynpc.txt (limited to 'world') diff --git a/world/map/npc/commands/_import.txt b/world/map/npc/commands/_import.txt index c0630138..d123d405 100644 --- a/world/map/npc/commands/_import.txt +++ b/world/map/npc/commands/_import.txt @@ -7,3 +7,4 @@ npc: npc/commands/changesex.txt npc: npc/commands/class.txt npc: npc/commands/pullrabbit.txt npc: npc/commands/numa.txt +npc: npc/commands/destroynpc.txt diff --git a/world/map/npc/commands/destroynpc.txt b/world/map/npc/commands/destroynpc.txt new file mode 100644 index 00000000..fcda52ef --- /dev/null +++ b/world/map/npc/commands/destroynpc.txt @@ -0,0 +1,35 @@ +-|script|@destroynpc|32767 +{ + callfunc "argv_splitter"; + if (GM < get(.destroynpc, "GM") && GM < G_SYSOP) + goto L_GM; + + set .@id, getnpcid(@argv$[0]); + if (@argv$[0] == "" || .@id < 1) + goto L_Failed; + if (gettimetick(2) - @destroynpc[0] > 300 || @destroynpc[1] != .@id) + goto L_Confirm; + + gmlog "@destroynpc " + @args$; + message strcharinfo(0), "destroynpc : The operation succeeded."; + debugmes "!!! => npc destroyed: `"+@argv$[0]+"` ("+.@id+")"; + if (1==1) destroy .@id; // FIXME: allow destroy to work as a non-terminator when arg0 is given + end; + +L_Confirm: + message strcharinfo(0), "destroynpc : ##BDANGER ZONE!##b This command permanently destroys a npc and its puppets (if any). Use the command again to confirm."; + setarray @destroynpc[0], gettimetick(2), .@id; + end; + +L_Failed: + message strcharinfo(0), "destroynpc : Impossible to find the target npc. Did you try putting the name in \"quotation marks\"? Some npcs also have an invisible postfix in their name, ie `#_M`."; + end; + +L_GM: + message strcharinfo(0), "destroynpc : GM command is level "+ get(destroynpc, "GM") +", but you are level " + GM; + end; + +OnInit: + registercmd chr(ATCMD_SYMBOL) + "destroynpc", strnpcinfo(0); + end; +} -- cgit v1.2.3-70-g09d2 From dc9c6ac482b353fe9a4b1e1628f691c487a517fc Mon Sep 17 00:00:00 2001 From: mekolat Date: Tue, 12 Apr 2016 16:37:08 -0400 Subject: add default permissions --- GNUmakefile | 2 +- world/map/.gitignore | 1 - world/map/conf/.gitignore | 1 + world/map/conf/permissions.txt | 20 ++++++++++++++++ world/map/conf/permissions_local.txt.example | 10 ++++++++ world/map/conf/tmwa-map.conf | 2 ++ world/map/db/item_db_head.txt | 2 +- world/map/npc/007-2/witch.txt | 2 +- world/map/npc/017-9/npcs.txt | 10 ++++---- .../map/npc/commands/_atcommand_local.txt.example | 27 ---------------------- world/map/npc/commands/_import.txt | 1 - world/map/npc/commands/changesex.txt | 16 ++++++------- world/map/npc/commands/class.txt | 18 +++++++-------- world/map/npc/commands/debug.txt | 2 +- world/map/npc/commands/destroynpc.txt | 6 ++--- world/map/npc/commands/numa.txt | 12 +++++----- world/map/npc/commands/pullrabbit.txt | 2 +- world/map/npc/commands/zeny.txt | 6 ++--- 18 files changed, 70 insertions(+), 70 deletions(-) create mode 100644 world/map/conf/permissions.txt create mode 100644 world/map/conf/permissions_local.txt.example delete mode 100644 world/map/npc/commands/_atcommand_local.txt.example (limited to 'world') diff --git a/GNUmakefile b/GNUmakefile index 8f124784..edde25a3 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -10,7 +10,7 @@ maps: conf: login/conf/login_local.conf login/conf/ladmin_local.conf login/save/gm_account.txt login/save/account.txt \ world/conf/char_local.conf \ world/map/conf/map_local.conf world/map/conf/battle_local.conf world/map/conf/atcommand_local.conf world/map/db/const-debugflag.txt \ -world/map/npc/functions/motd.txt world/map/npc/commands/_atcommand_local.txt +world/map/npc/functions/motd.txt world/map/conf/permissions_local.txt format: find world/map/npc -type f -exec sed -ri \ diff --git a/world/map/.gitignore b/world/map/.gitignore index 07be4021..2c681650 100644 --- a/world/map/.gitignore +++ b/world/map/.gitignore @@ -5,4 +5,3 @@ /db/const-debugflag.txt /npc/functions/motd.txt -/npc/commands/_atcommand_local.txt diff --git a/world/map/conf/.gitignore b/world/map/conf/.gitignore index 2c43e911..a1c73f43 100644 --- a/world/map/conf/.gitignore +++ b/world/map/conf/.gitignore @@ -1 +1,2 @@ /*_local.conf +/*_local.txt diff --git a/world/map/conf/permissions.txt b/world/map/conf/permissions.txt new file mode 100644 index 00000000..7da7006c --- /dev/null +++ b/world/map/conf/permissions.txt @@ -0,0 +1,20 @@ +// command permissions below +CMD_ZENY 80 +CMD_CHARZENY 99 +CMD_DEBUG 80 +CMD_CHANGESEX 40 +CMD_CHARCHANGESEX 60 +CMD_CLASS 40 +CMD_CHARCLASS 50 +CMD_DESTROYNPC 99 + +// special permissions below +MAP_LOUNGE 20 // level to enter the GM Lounge & talk to Numa +EVT_KILLTHEGM 50 // this is both for the event and the magic gm top hat +DBG_HOLIDAY 40 // holiday debug (xmas, halloween, ...) +EVT_DEBUG 50 // event debug (open portals, disguise, ...) +DBG_SCHEDULED 40 // scheduled broadcasts (schedule broadcast, stop broadcast, trigger broadcast, ...) +DBG_MOTD 40 // motd debug (show/hide motd) + +// very specific debug menus +DBG_VALIA 40 // illia quest debug info diff --git a/world/map/conf/permissions_local.txt.example b/world/map/conf/permissions_local.txt.example new file mode 100644 index 00000000..422da753 --- /dev/null +++ b/world/map/conf/permissions_local.txt.example @@ -0,0 +1,10 @@ +// in this file you can overwrite anything from permissions.txt + + +// Template for test server: +//CMD_ZENY 0 +//CMD_DEBUG 0 +//CMD_CHANGESEX 0 +//CMD_CLASS 0 +//MAP_LOUNGE 0 +//DBG_VALIA 0 diff --git a/world/map/conf/tmwa-map.conf b/world/map/conf/tmwa-map.conf index fa28abe5..53926ffb 100644 --- a/world/map/conf/tmwa-map.conf +++ b/world/map/conf/tmwa-map.conf @@ -15,6 +15,8 @@ const_db: db/const-magic.txt const_db: db/const-quest.txt const_db: db/const-mapflags.txt const_db: db/const-debugflag.txt +const_db: conf/permissions.txt +const_db: conf/permissions_local.txt quest_db: db/quest-log.txt diff --git a/world/map/db/item_db_head.txt b/world/map/db/item_db_head.txt index 9faaf4c2..7ecec5b3 100644 --- a/world/map/db/item_db_head.txt +++ b/world/map/db/item_db_head.txt @@ -63,7 +63,7 @@ 885, GreenEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {} 886, OrangeEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {} 887, DarkEggshellHat, 5, 7000, 5000, 15, 0, 9, 0, 3, 0, 2, 256, 0, 1, 0, {}, {} -888, MagicGMTopHat, 5, 4200, 1900, 30, 0, 60, 0, 20, 0, 2, 256, 0, 0, 0, {}, {set @minLvl, get(.killthegm, "GM"); callfunc "RestrictedItem"; bonus bMaxHP, 31000; bonus bFlee, -200; bonus bHPrecovRate, -400; bonus bCriticalDef, 250; bonus bMdef, 89;} +888, MagicGMTopHat, 5, 4200, 1900, 30, 0, 60, 0, 20, 0, 2, 256, 0, 0, 0, {}, {set @minLvl, EVT_KILLTHEGM; callfunc "RestrictedItem"; bonus bMaxHP, 31000; bonus bFlee, -200; bonus bHPrecovRate, -400; bonus bCriticalDef, 250; bonus bMdef, 89;} 889, MurdererCrown, 5, 75000, 12000, 240, 0, 4, 0, 0, 0, 2, 256, 0, 0, 0, {}, {} 890, BeanieCopter, 5, 8000, 2000, 20, 0, 4, 0, 2, 0, 2, 256, 0, 0, 0, {}, {} 897, RedRoseHat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, {}, {} diff --git a/world/map/npc/007-2/witch.txt b/world/map/npc/007-2/witch.txt index 3e80dccc..360f2885 100644 --- a/world/map/npc/007-2/witch.txt +++ b/world/map/npc/007-2/witch.txt @@ -23,7 +23,7 @@ set @illia_iced_water, 4; set $@illia_min_level, 90; - if ((GM >= get(.valia, "GM") || debug) && getequipid(equip_head) == 647) + if ((GM >= DBG_VALIA || debug) && getequipid(equip_head) == 647) goto L_DeveloperBoard; if (BaseLevel < $@illia_min_level) goto L_Unexperienced; diff --git a/world/map/npc/017-9/npcs.txt b/world/map/npc/017-9/npcs.txt index 188ef2e0..2db61d1f 100644 --- a/world/map/npc/017-9/npcs.txt +++ b/world/map/npc/017-9/npcs.txt @@ -1,6 +1,6 @@ 009-1,42,43,0|script|#SecretDoor|32767,0,0 { - if (GM < get(.lounge, "GM") && GM < G_SYSOP && !debug) end; + if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 27, 23; end; @@ -8,7 +8,7 @@ 020-1,60,76,0|script|#SecretDoor2|32767,0,0 { - if (GM < get(.lounge, "GM") && GM < G_SYSOP && !debug) end; + if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 29, 21; end; @@ -16,7 +16,7 @@ 001-1,54,118,0|script|#SecretDoor3|32767,0,0 { - if (GM < get(.lounge, "GM") && GM < G_SYSOP && !debug) end; + if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 21, 21; end; @@ -24,7 +24,7 @@ 027-2,118,111,0|script|#SecretDoor4|32767,0,0 { - if (GM < get(.lounge, "GM") && GM < G_SYSOP && !debug) end; + if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 31, 21; end; @@ -32,7 +32,7 @@ 029-1,34,96,0|script|#SecretDoor5|32767,0,0 { - if (GM < get(.lounge, "GM") && GM < G_SYSOP && !debug) end; + if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 23, 21; end; diff --git a/world/map/npc/commands/_atcommand_local.txt.example b/world/map/npc/commands/_atcommand_local.txt.example deleted file mode 100644 index ec1fae51..00000000 --- a/world/map/npc/commands/_atcommand_local.txt.example +++ /dev/null @@ -1,27 +0,0 @@ --|script|GM|32767 -{ - end; - -OnInit: - // command permissions here - set .zeny, G_ADMIN; - set .charzeny, G_SYSOP; - set .debug, G_ADMIN; - set .changesex, G_DEV; - set .charchangesex, G_GM; - set .class, G_DEV; - set .charclass, G_EVENT; - - // special permissions below - set .lounge, G_TESTER; // level to enter the GM Lounge & talk to Numa - set .killthegm, G_EVENT; // this is both for the event and the magic gm top hat - set .holiday, G_DEV; // holiday debug (xmas, halloween, ...) - set .event, G_EVENT; // event debug (open portals, disguise, ...) - set .scheduled, G_DEV; // scheduled broadcasts (schedule broadcast, stop broadcast, trigger broadcast, ...) - set .motd, G_DEV; // motd debug (show/hide motd) - - // very specific debug menus - set .valia, G_DEV; // illia quest debug info - - end; -} diff --git a/world/map/npc/commands/_import.txt b/world/map/npc/commands/_import.txt index d123d405..81994b80 100644 --- a/world/map/npc/commands/_import.txt +++ b/world/map/npc/commands/_import.txt @@ -1,5 +1,4 @@ npc: npc/commands/_procedures.txt -npc: npc/commands/_atcommand_local.txt npc: npc/commands/zeny.txt npc: npc/commands/marry.txt npc: npc/commands/debug.txt diff --git a/world/map/npc/commands/changesex.txt b/world/map/npc/commands/changesex.txt index ba08783d..fca27645 100644 --- a/world/map/npc/commands/changesex.txt +++ b/world/map/npc/commands/changesex.txt @@ -2,29 +2,27 @@ { callfunc "argv_splitter"; set .@n$, if_then_else(@argv$[1] != "", "char", "") + "changesex"; - if (GM < get(.changesex, "GM") && GM < G_SYSOP) goto L_GM; // check if you can use it on self + if (GM < CMD_CHANGESEX && GM < G_SYSOP) goto L_GM; // check if you can use it on self set .@target_id, BL_ID; if (@argv$[1] != "") set .@target_id, getcharid(3, @argv$[1]); if (@argv$[1] != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self - if (@argv$[1] != "" && GM < get(.charchangesex, "GM") && GM < G_SYSOP) goto L_GM; // when target is not self, use charchangesex permission + if (@argv$[1] != "" && GM < CMD_CHARCHANGESEX && GM < G_SYSOP) goto L_GM; // when target is not self, use charchangesex permission + set .@s, 3; // default to non-binary if (@argv$[0] == "M" || @argv$[0] == "m") set .@s, 1; if (@argv$[0] == "F" || @argv$[0] == "f") set .@s, 0; set Sex, .@s, .@target_id; - goto L_Success; + gmlog "@"+.@n$+" " + @args$; + message strcharinfo(0), .@n$+" : The operation succeeded."; + end; L_Failed: // XXX: should we allow GMs to change sex of users that are not logged in? message strcharinfo(0), .@n$+" : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?"; end; -L_Success: - gmlog "@"+.@n$+" " + @args$; - message strcharinfo(0), .@n$+" : The operation succeeded."; - end; - L_GM: - message strcharinfo(0), .@n$+" : GM command is level "+ get(if_then_else(@argv$[1] != "", .charchangesex, .changesex), "GM") +", but you are level " + GM; + message strcharinfo(0), .@n$+" : GM command is level "+ if_then_else(@argv$[1] != "", CMD_CHARCHANGESEX, CMD_CHANGESEX) +", but you are level " + GM; end; OnInit: diff --git a/world/map/npc/commands/class.txt b/world/map/npc/commands/class.txt index f9275591..9143e08a 100644 --- a/world/map/npc/commands/class.txt +++ b/world/map/npc/commands/class.txt @@ -2,28 +2,26 @@ { callfunc "argv_splitter"; set .@n$, if_then_else(@argv$[1] != "", "char", "") + "class"; - if (GM < get(.class, "GM") && GM < G_SYSOP) goto L_GM; // check if you can use it on self + if (GM < CMD_CLASS && GM < G_SYSOP) goto L_GM; // check if you can use it on self set .@target_id, BL_ID; if (@argv$[1] != "") set .@target_id, getcharid(3, @argv$[1]); if (@argv$[1] != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self - if (@argv$[1] != "" && GM < get(.charclass, "GM") && GM < G_SYSOP) goto L_GM; // when target is not self, use charclass permission + if (@argv$[1] != "" && GM < CMD_CHARCLASS && GM < G_SYSOP) goto L_GM; // when target is not self, use charclass permission + set .@c, 1; // default to human - if (@argv[0] >= 0 || @argv[0] <= 32767) set .@c, @argv[0]; + if (@argv[0] >= 1 || @argv[0] <= 32767) set .@c, @argv[0]; set Class, .@c, .@target_id; - goto L_Success; + gmlog "@"+.@n$+" " + @args$; + message strcharinfo(0), .@n$+" : The operation succeeded."; + end; L_Failed: // XXX: should we allow GMs to change class of users that are not logged in? message strcharinfo(0), .@n$+" : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?"; end; -L_Success: - gmlog "@"+.@n$+" " + @args$; - message strcharinfo(0), .@n$+" : The operation succeeded."; - end; - L_GM: - message strcharinfo(0), .@n$+" : GM command is level "+ get(if_then_else(@argv$[1] != "", .charclass, .class), "GM") +", but you are level " + GM; + message strcharinfo(0), .@n$+" : GM command is level "+ if_then_else(@argv$[1] != "", CMD_CHARCLASS, CMD_CLASS) +", but you are level " + GM; end; OnInit: diff --git a/world/map/npc/commands/debug.txt b/world/map/npc/commands/debug.txt index 7b653b26..19ac4114 100644 --- a/world/map/npc/commands/debug.txt +++ b/world/map/npc/commands/debug.txt @@ -924,7 +924,7 @@ L_Close: -|script|Debug Spell|32767 { - if(!debug && getgmlevel() < get(.debug, "GM")) end; + if(!debug && getgmlevel() < CMD_DEBUG) end; callfunc "Debug"; end; OnDeprecated: diff --git a/world/map/npc/commands/destroynpc.txt b/world/map/npc/commands/destroynpc.txt index fcda52ef..1ebede9e 100644 --- a/world/map/npc/commands/destroynpc.txt +++ b/world/map/npc/commands/destroynpc.txt @@ -1,7 +1,7 @@ -|script|@destroynpc|32767 { callfunc "argv_splitter"; - if (GM < get(.destroynpc, "GM") && GM < G_SYSOP) + if (GM < CMD_DESTROYNPC && GM < G_SYSOP) goto L_GM; set .@id, getnpcid(@argv$[0]); @@ -13,7 +13,7 @@ gmlog "@destroynpc " + @args$; message strcharinfo(0), "destroynpc : The operation succeeded."; debugmes "!!! => npc destroyed: `"+@argv$[0]+"` ("+.@id+")"; - if (1==1) destroy .@id; // FIXME: allow destroy to work as a non-terminator when arg0 is given + if (1==1) destroy .@id; // FIXME: allow destroy to work as a non-terminator when arg0 is given (TMWA) end; L_Confirm: @@ -26,7 +26,7 @@ L_Failed: end; L_GM: - message strcharinfo(0), "destroynpc : GM command is level "+ get(destroynpc, "GM") +", but you are level " + GM; + message strcharinfo(0), "destroynpc : GM command is level "+ CMD_DESTROYNPC +", but you are level " + GM; end; OnInit: diff --git a/world/map/npc/commands/numa.txt b/world/map/npc/commands/numa.txt index 4184743b..e8e8cabd 100644 --- a/world/map/npc/commands/numa.txt +++ b/world/map/npc/commands/numa.txt @@ -3,14 +3,14 @@ -|script|SuperDebug|32767 { - if (GM < get(.lounge, "GM") && GM < G_SYSOP && !debug) goto L_GM2; // make sure you can enter the gm lounge + if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) goto L_GM2; // make sure you can enter the gm lounge if (target(BL_ID,getnpcid("Numa"),1)) goto L_Main; npcaction 6, 12; title "Numa"; goto L_Main; L_GM2: - message strcharinfo(0), "numa : GM command is level "+ get(.lounge, "GM") +", but you are level " + GM; + message strcharinfo(0), "numa : GM command is level "+ MAP_LOUNGE +", but you are level " + GM; end; L_Main: @@ -36,7 +36,7 @@ L_WhoAmI: goto L_Main; L_Holiday: - if (GM < get(.holiday, "GM") && GM < G_SYSOP) goto L_GM; + if (GM < DBG_HOLIDAY && GM < G_SYSOP) goto L_GM; mes "What holiday do you want to debug?"; next; menu @@ -60,18 +60,18 @@ L_EasterDebug: goto L_Close; L_Event: - if (GM < get(.event, "GM") && GM < G_EVENT) goto L_GM; + if (GM < EVT_DEBUG && GM < G_EVENT) goto L_GM; gmlog strcharinfo(0) + " accessed the GM event debug."; callfunc "GmDebug"; goto L_Close; L_StoneBoard: - if (GM < get(.scheduled, "GM") && GM < G_SYSOP) goto L_GM; + if (GM < DBG_SCHEDULED && GM < G_SYSOP) goto L_GM; callfunc "SBConfig"; goto L_Close; L_MOTD: - if (GM < get(.motd, "GM") && GM < G_SYSOP) goto L_GM; + if (GM < DBG_MOTD && GM < G_SYSOP) goto L_GM; callfunc "MOTDConfig"; goto L_Close; diff --git a/world/map/npc/commands/pullrabbit.txt b/world/map/npc/commands/pullrabbit.txt index 3994b795..022f3753 100644 --- a/world/map/npc/commands/pullrabbit.txt +++ b/world/map/npc/commands/pullrabbit.txt @@ -1,6 +1,6 @@ -|script|@pullrabbit|32767 { - if (GM < get(.killthegm, "GM") && GM < G_SYSOP) end; + if (GM < EVT_KILLTHEGM && GM < G_SYSOP) end; if (getequipid(equip_head) != 888) end; getinventorylist; if ((checkweight("MurdererCrown", 1) == 0) || (@inventorylist_count == 100)) diff --git a/world/map/npc/commands/zeny.txt b/world/map/npc/commands/zeny.txt index 94c02c4b..513330b5 100644 --- a/world/map/npc/commands/zeny.txt +++ b/world/map/npc/commands/zeny.txt @@ -2,11 +2,11 @@ { callfunc "argv_splitter"; set .@n$, if_then_else(@argv$[1] != "", "char", "") + "zeny"; - if (GM < get(.zeny, "GM") && GM < G_SYSOP) goto L_GM; // check if you can use it on self + if (GM < CMD_ZENY && GM < G_SYSOP) goto L_GM; // check if you can use it on self set .@target_id, BL_ID; if (@argv$[1] != "") set .@target_id, getcharid(3, @argv$[1]); if (@argv$[1] != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self - if (@argv$[1] != "" && GM < get(.charzeny, "GM") && GM < G_SYSOP) goto L_GM; // when target is not self, use charzeny permission + if (@argv$[1] != "" && GM < CMD_CHARZENY && GM < G_SYSOP) goto L_GM; // when target is not self, use charzeny permission if (@argv$[0] == "--") goto L_Remove; if (@argv$[0] == "---") goto L_RemoveAll; if (@argv$[0] == "++") goto L_Max; @@ -67,7 +67,7 @@ L_Success: end; L_GM: - message strcharinfo(0), .@n$+" : GM command is level "+ get(if_then_else(@argv$[1] != "", .charzeny, .zeny), "GM") +", but you are level " + GM; + message strcharinfo(0), .@n$+" : GM command is level "+ if_then_else(@argv$[1] != "", CMD_CHARZENY, CMD_ZENY) +", but you are level " + GM; end; OnInit: -- cgit v1.2.3-70-g09d2 From c935422ac345e341724e2c543ff9b86b84ca591f Mon Sep 17 00:00:00 2001 From: mekolat Date: Wed, 13 Apr 2016 14:30:57 -0400 Subject: add despawn timer to pumpkins --- world/map/npc/055-1/pumpkins.txt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'world') diff --git a/world/map/npc/055-1/pumpkins.txt b/world/map/npc/055-1/pumpkins.txt index eff97b2e..1c2535f7 100644 --- a/world/map/npc/055-1/pumpkins.txt +++ b/world/map/npc/055-1/pumpkins.txt @@ -64,10 +64,15 @@ L_HeavyPoison2: goto L_Destroy; OnAppear: - fakenpcname strnpcinfo(0), strnpcinfo(0), 1063; // switch npc id to 1063 + fakenpcname strnpcinfo(0), strnpcinfo(0), 1063; // set the sprite (implies enablenpc) end; L_Destroy: + disablenpc strnpcinfo(0); // makes the npc invisible, unclickable + addnpctimer .death_t, strnpcinfo(0) + "::OnReallyDestroy"; // schedule a respawn + end; + +OnReallyDestroy: set .nodes[.i], get(.nodes[.i], "_N-Pumpkin") - 1, "_N-Pumpkin"; // tell the puppeteer we lost an egg destroy; @@ -88,9 +93,11 @@ S_FindXY: goto S_ReallySpawn; S_ReallySpawn: - set .@p, puppet(.m$[.i], .@x, .@y, .@name$, 32767); // spawn the node + set .@p, puppet(.m$[.i], .@x, .@y, .@name$, 32767); // spawn the node (but not on map, because 32767) + disablenpc .@name$; // make sure it can't be clicked by guessing the being id set .i, .i, .@p; // tell the puppet what object contains it - set .@timer, if_then_else(.done_initial[.i], rand(.death_t/2, .death_t), 0); // timer depends on if first spawn or if respawned after death + set .death_t, rand(.death_t/2, .death_t), .@p; // tell the puppet when to die + set .@timer, if_then_else(.done_initial[.i], rand(.appear_t/2, .appear_t), 0); // timer depends on if first spawn or if respawned after death addnpctimer .@timer, .@name$+"::OnAppear"; // we spawn the node instantly but it only appears after the timer if (.nID == 2147483647) set .nID, 0; // start over if id = 0x7FFFFFFF @@ -137,7 +144,8 @@ OnMaybeStart: set .divisor, 32; // see .min & .max ^ set .count, getarraysize(.x1); // number of nodes objects in TSX set .spawn_t, 18000; // heartbeat rate - set .death_t, 40000; // rand(timer/2, timer) before a node appears + set .death_t, 1000; // rand(timer/2, timer) before a node triggers respawn after death + set .appear_t, 40000; // rand(timer/2, timer) before a node becomes visible after spawn if (.started) end; set .started, 1; -- cgit v1.2.3-70-g09d2 From a895a9fb39002e18487a9c19d7c7ea5215a6afb8 Mon Sep 17 00:00:00 2001 From: mekolat Date: Fri, 15 Apr 2016 13:30:15 -0400 Subject: add command @remotecmd --- world/map/conf/permissions.txt | 1 + world/map/npc/commands/_import.txt | 1 + world/map/npc/commands/remotecmd.txt | 62 ++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 world/map/npc/commands/remotecmd.txt (limited to 'world') diff --git a/world/map/conf/permissions.txt b/world/map/conf/permissions.txt index 7da7006c..0b8cb79a 100644 --- a/world/map/conf/permissions.txt +++ b/world/map/conf/permissions.txt @@ -7,6 +7,7 @@ CMD_CHARCHANGESEX 60 CMD_CLASS 40 CMD_CHARCLASS 50 CMD_DESTROYNPC 99 +CMD_REMOTECMD 40 // special permissions below MAP_LOUNGE 20 // level to enter the GM Lounge & talk to Numa diff --git a/world/map/npc/commands/_import.txt b/world/map/npc/commands/_import.txt index 81994b80..3cabe0b7 100644 --- a/world/map/npc/commands/_import.txt +++ b/world/map/npc/commands/_import.txt @@ -7,3 +7,4 @@ npc: npc/commands/class.txt npc: npc/commands/pullrabbit.txt npc: npc/commands/numa.txt npc: npc/commands/destroynpc.txt +npc: npc/commands/remotecmd.txt diff --git a/world/map/npc/commands/remotecmd.txt b/world/map/npc/commands/remotecmd.txt new file mode 100644 index 00000000..b8c47f35 --- /dev/null +++ b/world/map/npc/commands/remotecmd.txt @@ -0,0 +1,62 @@ +-|script|@remotecmd|32767 +{ + callfunc "argv_splitter"; + if (GM < CMD_REMOTECMD && GM < G_SYSOP) goto L_GM; // check if you can use it on self + set .@target_id, BL_ID; + set .@t$, @argv$[1]; + setarray @remotecmd[0], 0, 1, 1; // nr, to_self, multi_target + if (.@t$ == "map") goto L_Map; + if (.@t$ == "map!") goto L_AllMap; + if (.@t$ == "area") goto L_Area; + if (.@t$ == "area!") goto L_AllArea; + if (.@t$ != "") set .@target_id, getcharid(3, @argv$[1]); + if (.@t$ != "" && !(isloggedin(.@target_id))) goto L_Failed; // do NOT fallback to self + + set @target_id, .@target_id; + set @remotecmd[2], 0; // only one target + addtimer 0, strnpcinfo(0) + "::OnPC"; + end; + +L_Map: + set @remotecmd[1], 0; // do not include self + goto L_AllMap; + +L_AllMap: + foreach 0, getmap(), 0, 0, 32767, 32767, strnpcinfo(0)+"::OnPC"; + goto L_Success; + +L_Area: + set @remotecmd[1], 0; // do not include self + goto L_AllMap; + +L_AllArea: + foreach 0, getmap(), (POS_X - .range), (POS_Y - .range), (POS_X + .range), (POS_Y + .range), strnpcinfo(0)+"::OnPC"; + goto L_Success; + +OnPC: + if (@target_id == BL_ID && @remotecmd[1] < 1) + end; + remotecmd @argv$[0], strcharinfo(0, @target_id); + set @remotecmd[0], @remotecmd[0] + 1; + if (@remotecmd[2] < 1) + goto L_Success; + end; + +L_Success: + gmlog "@remotecmd " + @args$; + message strcharinfo(0), "remotecmd : The operation succeeded. ["+ @remotecmd[0] + "]"; + end; + +L_Failed: + message strcharinfo(0), "remotecmd : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?"; + end; + +L_GM: + message strcharinfo(0), "remotecmd : GM command is level "+ CMD_REMOTECMD +", but you are level " + GM; + end; + +OnInit: + set .range, 14; // visible range + registercmd chr(ATCMD_SYMBOL) + "remotecmd", strnpcinfo(0); + end; +} -- cgit v1.2.3-70-g09d2 From 91fe3711fcacdfe83794b4347595e56e90e9d3a7 Mon Sep 17 00:00:00 2001 From: mekolat Date: Mon, 18 Apr 2016 15:26:33 -0400 Subject: give a free recast when spell attack conditions fails --- world/map/npc/magic/level1-flare-dart.txt | 25 ++++++++--- world/map/npc/magic/level1-magic-blade.txt | 34 ++++++++++----- world/map/npc/magic/level2-lightning-strike.txt | 57 +++++++++++++++---------- world/map/npc/magic/level2-magic-knuckles.txt | 23 +++++++--- world/map/npc/magic/level2-shear.txt | 23 +++++++--- world/map/npc/magic/level2-toxic-dart.txt | 29 ++++++++++--- 6 files changed, 132 insertions(+), 59 deletions(-) (limited to 'world') diff --git a/world/map/npc/magic/level1-flare-dart.txt b/world/map/npc/magic/level1-flare-dart.txt index 2f17c499..6c0ef303 100644 --- a/world/map/npc/magic/level1-flare-dart.txt +++ b/world/map/npc/magic/level1-flare-dart.txt @@ -11,17 +11,28 @@ callfunc "adjust_spellpower"; set Sp, Sp - 10; misceffect FX_MAGIC_BLACK, strcharinfo(0); - set @flar_damage, sqrt(@spellpower) * 5; - set @flar_dmg_bonus, (BaseLevel/3) + 5; - set .@delay, (((200 - Agi) * 1200) / 200); - overrideattack (@spellpower/50)+3, .@delay, 4, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack"; + setarray @flarspell[0], + sqrt(@spellpower) * 5, //dmg + (BaseLevel/3) + 5, // dmg bonus + (@spellpower/50) + 3, // charges + (((200 - Agi) * 1200) / 200); // delay callfunc "magic_exp"; - end; + goto L_FreeRecast; OnAttack: + if (target(BL_ID, @target_id, 50) != 50) goto L_FreeRecast; // 0x20 | 0x02 | 0x10 misceffect FX_MAGIC_BLACK, strcharinfo(0); - if (target(BL_ID, @target_id, 50) != 50) end; // 0x20 | 0x02 | 0x10 - void call("elt_damage", @flar_damage, @flar_dmg_bonus, ELT_WATER, ELT_FIRE, FX_MAGIC_BLACK); + void call("elt_damage", @flarspell[0], @flarspell[1], ELT_WATER, ELT_FIRE, FX_MAGIC_BLACK); + set @flarspell[2], @flarspell[2] - 1; + goto L_FreeRecast; + +L_FreeRecast: + if (@flarspell[2] > 0) + addtimer 0, strnpcinfo(0) + "::OnSetRecast"; + end; + +OnSetRecast: + overrideattack 1, @flarspell[3], 4, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack"; end; OnInit: diff --git a/world/map/npc/magic/level1-magic-blade.txt b/world/map/npc/magic/level1-magic-blade.txt index 262a08a1..ad39c244 100644 --- a/world/map/npc/magic/level1-magic-blade.txt +++ b/world/map/npc/magic/level1-magic-blade.txt @@ -4,26 +4,38 @@ if (Sp < 9) end; set .@level, getskilllv(.school); if (getskilllv(SKILL_MAGIC) < .level) end; - set @chiza_component$, ""; - if (.@level <= 2 && countitem("SharpKnife") >= 1) set @chiza_component$, "SharpKnife"; - elif (.@level <= 2 && countitem("Knife") >= 1) set @chiza_component$, "Knife"; + if (.@level <= 2 && countitem("SharpKnife") >= 1) set .@component$, "SharpKnife"; + elif (.@level <= 2 && countitem("Knife") >= 1) set .@component$, "Knife"; elif (.@level <= 2) end; - if (@chiza_component$ != "") delitem @chiza_component$, 1; + if (.@component$ != "") delitem .@component$, 1; set @_M_BLOCK, 1; // block casting, until the timer clears it addtimer 500, "Magic Timer::OnClear"; // set the new debuff callfunc "adjust_spellpower"; set Sp, Sp - 9; misceffect FX_MAGIC_BLACK, strcharinfo(0); - set .@delay, (((200 - Agi) * 1200) / 200); - overrideattack (@spellpower/15)+10, .@delay, 1, ATTACK_ICON_GENERIC, 30, strnpcinfo(0)+"::OnAttack"; + setarray @chizaspell[0], + if_then_else(.@component$ == "Knife", 40, 60), // dmg + Str, // do not allow to equip light armor, cast, and then switch to heavy armor to get bonus str + (@spellpower/15) + 10, // charges + (((200 - Agi) * 1200) / 200), // delay + @spellpower; + callfunc "magic_exp"; - set @chiza_str, Str; // do not allow to equip light armor, cast, and then switch to heavy armor to get bonus str - end; + goto L_FreeRecast; OnAttack: - if (target(BL_ID, @target_id, 22) != 22) end; // 0x10 | 0x02 | 0x04 - set .@dmg, if_then_else(@chiza_component$ == "Knife", 40, 60); - void call("melee_damage", @spellpower, @target_id, (.@dmg + rand(@chiza_str + 5))); + if (target(BL_ID, @target_id, 22) != 22) goto L_FreeRecast; // 0x10 | 0x02 | 0x04 + void call("melee_damage", @chizaspell[4], @target_id, (@chizaspell[0] + rand(@chizaspell[1] + 5))); + set @chizaspell[2], @chizaspell[2] - 1; + goto L_FreeRecast; + +L_FreeRecast: + if (@chizaspell[2] > 0) + addtimer 0, strnpcinfo(0) + "::OnSetRecast"; + end; + +OnSetRecast: + overrideattack 1, @chizaspell[3], 1, ATTACK_ICON_GENERIC, 30, strnpcinfo(0)+"::OnAttack"; end; OnInit: diff --git a/world/map/npc/magic/level2-lightning-strike.txt b/world/map/npc/magic/level2-lightning-strike.txt index 67d1a72e..3032d5ab 100644 --- a/world/map/npc/magic/level2-lightning-strike.txt +++ b/world/map/npc/magic/level2-lightning-strike.txt @@ -12,24 +12,37 @@ callfunc "adjust_spellpower"; set Sp, Sp - 20; misceffect FX_MAGIC_BLACK, strcharinfo(0); - set @ingrav_sp, @spellpower; - set @ingrav_luk, Luk; - set .@delay, (((200 - Agi) * 3000) / 200); - overrideattack (@spellpower/90)+1, .@delay, 8, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack"; + setarray @ingravspell[0], + @spellpower, + Luk, + ((@spellpower/90)+1), // charges + (((200 - Agi) * 3000) / 200), // delay + 0, // in_rain + 0; // target id (tmp) + callfunc "magic_exp"; - end; + goto L_FreeRecast; OnAttack: - if (target(BL_ID, @target_id, 22) != 22) end; // 0x10 | 0x02 | 0x04 + if (target(BL_ID, @target_id, 22) != 22) L_FreeRecast; // 0x10 | 0x02 | 0x04 - set @ingrav_rain, 0; set .@p, get(.max_radius, "rain") + 1; - set @ingrav_target, @target_id; // store it because foreach overwrites it + set @ingravspell[5], @target_id; // store it because foreach overwrites it foreach 1, getmap(), POS_X-.@p, POS_Y-.@p, POS_X+.@p, POS_Y+.@p, strnpcinfo(0)+"::OnNpc"; - set @target_id, @ingrav_target; // now restore it + set @target_id, @ingravspell[5]; // now restore it + + set @ingravspell[2], @ingravspell[2] - 1; + if (@ingravspell[4] & 1) goto L_InRain; + void call("elt_damage", @ingravspell[0], (@ingravspell[0]/2)+1, ELT_EARTH, ELT_WIND, FX_LIGHTNING1 + rand(3)); + goto L_FreeRecast; - if (@ingrav_rain & 1) goto L_InRain; - void call("elt_damage", @ingrav_sp, (@ingrav_sp/2)+1, ELT_EARTH, ELT_WIND, FX_LIGHTNING1 + rand(3)); +L_FreeRecast: + if (@ingravspell[2] > 0) + addtimer 0, strnpcinfo(0) + "::OnSetRecast"; + end; + +OnSetRecast: + overrideattack 1, @ingravspell[3], 8, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack"; end; OnNpc: @@ -37,24 +50,24 @@ OnNpc: explode .@nearby$[0], .@name$, "#"; if (.@nearby$[0] != "rain" && .@nearby$[1] != "rain") end; setarray .@l[0], getnpcx(.@name$), getnpcy(.@name$), get(.radius, @target_id); // kaflosh x, y, radius - setarray @ar[0], .@l[0]-.@l[2], .@l[1]-.@l[2], .@l[0]+.@l[2], .@l[1]+.@l[2]; // kaflosh x1, y1, x2, y2 <= this is "area" - if (POS_X >= @ar[0] && POS_Y >= @ar[1] && POS_X <= @ar[2] && POS_Y <= @ar[3]) - set @ingrav_rain, @ingrav_rain | 1; + setarray @ingravspell[6], .@l[0]-.@l[2], .@l[1]-.@l[2], .@l[0]+.@l[2], .@l[1]+.@l[2]; // kaflosh x1, y1, x2, y2 <= this is "area" + if (POS_X >= @ingravspell[6] && POS_Y >= @ingravspell[7] && POS_X <= @ingravspell[8] && POS_Y <= @ingravspell[9]) + set @ingravspell[4], @ingravspell[4] | 1; end; L_InRain: - set @used, 0; - foreach 0, getmap(), @ar[0], @ar[1], @ar[2], @ar[3], strnpcinfo(0)+"::OnEntityInRain"; - if (@used >= 1 && (@ingrav_luk + rand(200)) >= 150) end; + set @ingravspell[10], 0; + foreach 0, getmap(), @ingravspell[6], @ingravspell[7], @ingravspell[8], @ingravspell[9], strnpcinfo(0)+"::OnEntityInRain"; + if (@ingravspell[10] >= 1 && (@ingravspell[1] + rand(200)) >= 150) goto L_FreeRecast; misceffect FX_LIGHTNING1 + rand(3), strcharinfo(0); - heal 0 - @ingrav_sp, 0; - end; + heal 0 - @ingravspell[0], 0; + goto L_FreeRecast; OnEntityInRain: if (target(BL_ID, @target_id, 16) != 16) end; // 0x10 - if (@ingrav_luk + rand(200) <= 175) end; - set @used, @used + 1; - void call("elt_damage", @ingrav_sp/6, (((@ingrav_sp/2)+1)/3)+1, ELT_EARTH, ELT_WIND, FX_LIGHTNING1 + rand(3)); + if (@ingravspell[1] + rand(200) <= 175) end; + set @ingravspell[10], @ingravspell[10] + 1; + void call("elt_damage", @ingravspell[0]/6, (((@ingravspell[0]/2)+1)/3)+1, ELT_EARTH, ELT_WIND, FX_LIGHTNING1 + rand(3)); end; OnInit: diff --git a/world/map/npc/magic/level2-magic-knuckles.txt b/world/map/npc/magic/level2-magic-knuckles.txt index 3f4d4667..0984a7fd 100644 --- a/world/map/npc/magic/level2-magic-knuckles.txt +++ b/world/map/npc/magic/level2-magic-knuckles.txt @@ -12,14 +12,27 @@ callfunc "adjust_spellpower"; set Sp, Sp - 20; misceffect FX_MAGIC_BLACK, strcharinfo(0); - set .@delay, (((200 - Agi) * 1300) / 200); - overrideattack (@spellpower/10)+10, .@delay, 1, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack"; + setarray @upmarmuspell[0], + @spellpower, + ((@spellpower/10) + 10), // charges + (((200 - Agi) * 1300) / 200), // delay + Str; // do not allow to equip light armor, cast, and then switch to heavy armor to get bonus str callfunc "magic_exp"; - set @upmaru_str, Str; // do not allow to equip light armor, cast, and then switch to heavy armor to get bonus str - end; + goto L_FreeRecast; OnAttack: - void call("melee_damage", @spellpower, @target_id, (30 + rand((@upmaru_str*2) + 5))); + if (target(BL_ID, @target_id, 22) != 22) goto L_FreeRecast; // 0x10 | 0x02 | 0x04 + void call("melee_damage", @upmarmuspell[0], @target_id, (30 + rand((@upmarmuspell[3]*2) + 5))); + set @upmarmuspell[1], @upmarmuspell[1] - 1; + goto L_FreeRecast; + +L_FreeRecast: + if (@upmarmuspell[1] > 0) + addtimer 0, strnpcinfo(0) + "::OnSetRecast"; + end; + +OnSetRecast: + overrideattack 1, @upmarmuspell[2], 1, ATTACK_ICON_GENERIC, 34, strnpcinfo(0)+"::OnAttack"; end; OnInit: diff --git a/world/map/npc/magic/level2-shear.txt b/world/map/npc/magic/level2-shear.txt index c76b1093..af825727 100644 --- a/world/map/npc/magic/level2-shear.txt +++ b/world/map/npc/magic/level2-shear.txt @@ -9,18 +9,19 @@ callfunc "adjust_spellpower"; set Sp, Sp - 23; misceffect FX_MAGIC_GREEN, strcharinfo(0); - set .@delay, (((200 - Agi) * 2000) / 200); - overrideattack 1, .@delay, 1, ATTACK_ICON_SHEARING, 30, strnpcinfo(0)+"::OnAttack"; + setarray @chipchipspell[0], + @spellpower, + (((200 - Agi) * 2000) / 200); //delay + overrideattack 1, @chipchipspell[1], 1, ATTACK_ICON_SHEARING, 30, strnpcinfo(0)+"::OnAttack"; callfunc "magic_exp"; - set @chipchip_sp, @spellpower; end; OnAttack: - if (isloggedin(@target_id)) end; // can not shear a player - if (sc_check(SC_SHEARED, @target_id)) end; // mob already sheared - if (target(BL_ID, @target_id, 22) != 22) end; // 0x10 | 0x02 | 0x04 + if (isloggedin(@target_id)) goto L_FreeRecast; // can not shear a player + if (sc_check(SC_SHEARED, @target_id)) goto L_FreeRecast; // mob already sheared + if (target(BL_ID, @target_id, 22) != 22) goto L_FreeRecast; // 0x10 | 0x02 | 0x04 sc_start SC_SHEARED, 600000, 0, @target_id; - set .@score, rand(1000 - rand(@chipchip_sp)); + set .@score, rand(1000 - rand(@chipchipspell[0])); set .@id, get(Class, @target_id); // get the mob ID if (.@id == 1020 && .@score < 300) set .@item$, "WhiteFur"; // Fluffy @@ -41,6 +42,14 @@ OnAttack: callfunc "QuestSagathaHappy"; end; +L_FreeRecast: + addtimer 0, strnpcinfo(0) + "::OnSetRecast"; // we can't do it while already overridden, until it reaches a script terminator + end; + +OnSetRecast: + overrideattack 1, @chipchipspell[1], 1, ATTACK_ICON_SHEARING, 30, strnpcinfo(0)+"::OnAttack"; + end; + OnInit: set .school, SKILL_MAGIC_NATURE; set .invocation$, chr(MAGIC_SYMBOL) + "chipchip"; // used in npcs that refer to this spell diff --git a/world/map/npc/magic/level2-toxic-dart.txt b/world/map/npc/magic/level2-toxic-dart.txt index a14710d6..357ae32b 100644 --- a/world/map/npc/magic/level2-toxic-dart.txt +++ b/world/map/npc/magic/level2-toxic-dart.txt @@ -12,18 +12,33 @@ callfunc "adjust_spellpower"; set Sp, Sp - 15; misceffect FX_MAGIC_DARKRED, strcharinfo(0); - setarray @phlex_damage[0], (sqrt(@spellpower) * 5), ((BaseLevel/3) + 5); - set .@delay, (((200 - Agi) * 1200) / 200); - overrideattack (@spellpower/75)+3, .@delay, 4, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack"; + setarray @phlexspell[0], + (sqrt(@spellpower) * 5), // elt damage + ((BaseLevel/3) + 5), // elt damage bonus + (((200 - Agi) * 1200) / 200), // delay + ((@spellpower/75) + 3), // charges + (5000+(@spellpower*1200)), // poison duration + (max(15,@spellpower/15)+5); // poison strength + callfunc "magic_exp"; - end; + goto L_FreeRecast; OnAttack: + if (target(BL_ID, @target_id, 50) != 50) goto L_FreeRecast; // 0x20 | 0x02 | 0x10 misceffect FX_MAGIC_DARKRED, strcharinfo(0); - if (target(BL_ID, @target_id, 50) != 50) end; // 0x20 | 0x02 | 0x10 - void call("elt_damage", @phlex_damage[0], @phlex_damage[1], ELT_NEUTRAL, ELT_POISON, FX_FIRE_BURST); + void call("elt_damage", @phlexspell[0], @phlexspell[1], ELT_NEUTRAL, ELT_POISON, FX_FIRE_BURST); if(@target_id != BL_ID && isloggedin(@target_id)) // this is a dirty trick to check if the target is a player - sc_start sc_poison, 5000+(@spellpower*1200), max(15,@spellpower/15)+5, @target_id; + sc_start sc_poison, @phlexspell[4], @phlexspell[5], @target_id; + set @phlexspell[3], @phlexspell[3] - 1; + goto L_FreeRecast; + +L_FreeRecast: + if (@phlexspell[3] > 0) + addtimer 0, strnpcinfo(0) + "::OnSetRecast"; + end; + +OnSetRecast: + overrideattack 1, @phlexspell[2], 4, ATTACK_ICON_GENERIC, 31, strnpcinfo(0)+"::OnAttack"; end; OnInit: -- cgit v1.2.3-70-g09d2