diff options
Diffstat (limited to 'world')
274 files changed, 3056 insertions, 500 deletions
diff --git a/world/map/conf/battle_athena.conf b/world/map/conf/battle_athena.conf index 5c2f0f4d..6f0e6aed 100644 --- a/world/map/conf/battle_athena.conf +++ b/world/map/conf/battle_athena.conf @@ -207,7 +207,7 @@ player_attack_direction_change: yes monster_attack_direction_change: yes // Stop logout for 10 seconds after a hit? (Note 1) -prevent_logout: yes +prevent_logout: no // If skill fails by delay, should it display or not. (Note 1) display_delay_skill_fail: yes diff --git a/world/map/data/012-4.wlk b/world/map/data/012-4.wlk Binary files differindex 4784cc41..86318714 100644 --- a/world/map/data/012-4.wlk +++ b/world/map/data/012-4.wlk diff --git a/world/map/data/012-5.wlk b/world/map/data/012-5.wlk Binary files differnew file mode 100644 index 00000000..386ebe85 --- /dev/null +++ b/world/map/data/012-5.wlk diff --git a/world/map/data/027-5.wlk b/world/map/data/027-5.wlk Binary files differindex b3e2a37d..e9c0c489 100644 --- a/world/map/data/027-5.wlk +++ b/world/map/data/027-5.wlk diff --git a/world/map/data/resnametable.txt b/world/map/data/resnametable.txt index cfebd318..9d51981a 100644 --- a/world/map/data/resnametable.txt +++ b/world/map/data/resnametable.txt @@ -36,6 +36,7 @@ 012-1#012-1.wlk# 012-3#012-3.wlk# 012-4#012-4.wlk# +012-5#012-5.wlk# 013-1#013-1.wlk# 013-2#013-2.wlk# 013-3#013-3.wlk# diff --git a/world/map/db/const-aegis.txt b/world/map/db/const-aegis.txt index c5c19c0f..63f7e01e 100644 --- a/world/map/db/const-aegis.txt +++ b/world/map/db/const-aegis.txt @@ -76,7 +76,7 @@ AmethystRing 4013 SimpleRing 4014 HeartNecklace 677 GuardianWings 5252 -MageRing 5253 +MagicRing 5253 ManaPearl 5270 AssassinRing 5268 AssassinAmulet 5269 @@ -318,7 +318,7 @@ CryptKey 5112 Ectoplasm 5113 Urn 5114 VampireBatWing 5115 -WraithHorn 5116 +StalkerHorn 5116 AstralCube 5117 RunestoneA 5118 RunestoneL 5119 @@ -391,6 +391,12 @@ Stone 5380 Brick 5381 MountainCrystal 5384 BlackQuartz 5385 +GlassShards 5386 +Hay 5387 +Straw 5388 +SpeltSeeds 5389 +MoonDust 5390 +SunDust 5391 LeatherShirt 523 DesertShirt 546 Turtleneck 564 @@ -640,6 +646,7 @@ DarkGreenSaviorArmor 5308 BlackChainmailShirt 5320 BlackLightPlatemail 5321 BlackWarlordPlate 5322 +RaggedShirt 5398 SantaHat 511 FancyHat 524 MinersHat 525 @@ -868,6 +875,17 @@ HMCPirateHat 5287 BlackWarlordHelmet 5324 BlackInfantryHelmet 5325 BlackCrusadeHelmet 5326 +SunshroomHat 5392 +BlackKnightsHelmet 5394 +BlackRoseHat 5395 +SnowshroomHat 5396 +WickedMushroomHat 5397 +IceSkullMask 5399 +GoldenSkullMask 5400 +YellowHeadSlime 5401 +RedHeadSlime 5402 +GreenHeadSlime 5403 +BlueHeadSlime 5404 CactusDrink 501 CactusPotion 502 CandyCane 506 @@ -1084,6 +1102,7 @@ WoodenShield 602 LeatherShield 603 BromenalShield 797 DragonShield 5285 +BlackSteelShield 5393 PinkieScroll 6000 FireGoblin 1011 Bat 1017 @@ -1305,3 +1324,13 @@ SmallTopazBif 1223 CoalGolem 1224 StoneSlime 1225 StoneGolem 1226 +Grass 1227 +Spelt 1228 +WarlordSkull 1229 +GoldenSkull 1230 +Sunshroom 1231 +Snowshroom 1232 +YellowSuperSlime 1233 +RedSuperSlime 1234 +GreenSuperSlime 1235 +BlueSuperSlime 1236 diff --git a/world/map/db/const-quest.txt b/world/map/db/const-quest.txt index 88ecb334..48a3cc14 100644 --- a/world/map/db/const-quest.txt +++ b/world/map/db/const-quest.txt @@ -132,7 +132,7 @@ FLAG_DECLINED_BEANIEHAT 8192 // player declined Beanie Copter Hat from Mill //FLAG_ 16384 // not used at the moment //FLAG_ 32768 // not used at the moment FLAG_BEHEADER_MASK 65536 // traded with The Beheader -FLAG_GOT_BEHEADER_SWORD 131072 // Obtained the Beheader Sword +//FLAG_GOT_BEHEADER_SWORD 131072 // Obtained the Beheader Sword. Moved to quest log FLAG_LUCA_GOT_SIX_SKILLS 262144 // player learned all six Focus Skills FLAG_LUCA_2SKILLS_MAXED 524288 // player got 2 Focus Skills at lvl 9 FLAG_LUCA_4SKILLS_MAXED 1048576 // player got 4 Focus Skills at lvl 9 @@ -165,6 +165,13 @@ GEM_BIF_CHANCE 5 NORMAL_BIF_CHANCE 4 BIG_BIF_CHANCE 8 +// Anchor Stone constants: +// biggest maps use 520 tiles (012-3, 012-4) so 1023 is good atm but if maps ever grow bigger these values need to be changed +AS_X_MASK 1023 +AS_X_SHIFT 0 +AS_Y_MASK 1047552 +AS_Y_SHIFT 10 + // Flags for the battle caves. BATTLE_CAVE1 1 BATTLE_CAVE2 2 diff --git a/world/map/db/item_db.conf b/world/map/db/item_db.conf index 56d61dd2..da175bca 100644 --- a/world/map/db/item_db.conf +++ b/world/map/db/item_db.conf @@ -821,20 +821,28 @@ item_db: ( AegisName: "LongSword" Name: "LongSword" Type: "IT_WEAPON" - Buy: 1000 - Sell: 500 + Buy: 20000 + Sell: 10000 Weight: 1300 - Atk: 150 + Atk: 149 Range: 1 Slots: 1 Loc: "EQP_HAND_R" - WeaponLv: 1 + WeaponLv: 2 EquipLv: 1 Refine: false ViewSprite: 1 Subtype: "W_1HSWORD" + OnEquipScript: <" + callfunc "RequireStat", bStr, 31, EQI_HAND_R; + callfunc "RequireStat", bVit, 67, EQI_HAND_R; + callfunc "RequireStat", bDex, 59, EQI_HAND_R; + callfunc "RequireStat", bLuk, 61, EQI_HAND_R; + "> Script: <" - callfunc "UnreleasedItem", EQI_HAND_R; + bonus bBaseWeaponDelayAdjust, -11; // @TMWA + bonus bPerfectHitRate, 11; + bonus bPerfectHitAddRate, 7; "> }, { @@ -1018,6 +1026,7 @@ item_db: ( Subtype: "W_1HSWORD" Script: <" bonus bLuk, 1; + bonus bCriticalDef, 5; "> }, { @@ -1111,7 +1120,7 @@ item_db: ( Buy: 10000 Sell: 5000 Weight: 350 - Atk: 1 + Atk: 50 Range: 3 Slots: 1 Loc: ["EQP_HAND_L", "EQP_HAND_R"] @@ -1128,7 +1137,7 @@ item_db: ( Buy: 10000 Sell: 5000 Weight: 350 - Atk: 1 + Atk: 50 Range: 3 Slots: 1 Loc: ["EQP_HAND_L", "EQP_HAND_R"] @@ -1802,8 +1811,8 @@ item_db: ( }, { Id: 5253 - AegisName: "MageRing" - Name: "MageRing" + AegisName: "MagicRing" + Name: "MagicRing" Type: "IT_ARMOR" Buy: 0 Sell: 0 @@ -1811,9 +1820,14 @@ item_db: ( Def: 0 Slots: 0 Loc: "EQP_ACC_R" + EquipLv: 80 Refine: false ViewSprite: 5253 + OnEquipScript: <" + callfunc "RequireStat", bInt, 80, EQI_ACC_R; + "> Script: <" + callfunc "MagicRingItem", EQI_ACC_R; bonus bInt, 1; "> }, @@ -1822,9 +1836,9 @@ item_db: ( AegisName: "ManaPearl" Name: "Mana Pearl" Type: "IT_ARMOR" - Buy: 1000 - Sell: 1 - Weight: 3 + Buy: 0 + Sell: 0 + Weight: 0 Matk: 22 Def: 0 Slots: 0 @@ -1832,6 +1846,7 @@ item_db: ( Refine: false ViewSprite: 5272 Script: <" + callfunc "ManaPearlItem", EQI_ARMOR; bonus bInt, 1; bonus bMatkRate, 22; // @EVOL2 bonus bMaxSP, 55; @@ -2367,7 +2382,7 @@ item_db: ( Type: "IT_ETC" Buy: 20 Sell: 10 - Weight: 1 + Weight: 5 Def: 0 Refine: false ViewSprite: 540 @@ -4871,7 +4886,6 @@ item_db: ( Def: 0 Refine: false ViewSprite: 5112 - //Disabled: true // @TMWA }, { Id: 5113 @@ -4914,16 +4928,15 @@ item_db: ( }, { Id: 5116 - AegisName: "WraithHorn" - Name: "WraithHorn" + AegisName: "StalkerHorn" + Name: "StalkerHorn" Type: "IT_ETC" - Buy: 700 - Sell: 20 + Buy: 2000 + Sell: 1000 Weight: 10 Def: 0 Refine: false ViewSprite: 5116 - //Disabled: true // @TMWA }, { Id: 5117 @@ -5481,7 +5494,6 @@ item_db: ( noauction: true noselltonpc: true } - //Disabled: true // @TMWA }, { Id: 5316 @@ -5659,6 +5671,7 @@ item_db: ( noauction: true noselltonpc: true } + //Disabled: true // @TMWA }, { Id: 5360 @@ -5777,6 +5790,7 @@ item_db: ( noauction: true noselltonpc: true } + //Disabled: true // @TMWA }, { Id: 5371 @@ -5796,6 +5810,7 @@ item_db: ( noauction: true noselltonpc: true } + //Disabled: true // @TMWA }, { Id: 5372 @@ -5815,6 +5830,7 @@ item_db: ( noauction: true noselltonpc: true } + //Disabled: true // @TMWA }, { Id: 5375 @@ -5904,6 +5920,74 @@ item_db: ( Refine: false ViewSprite: 5385 }, +{ + Id: 5386 + AegisName: "GlassShards" + Name: "GlassShards" + Type: "IT_ETC" + Buy: 10 + Sell: 5 + Weight: 5 + Refine: false + ViewSprite: 5386 +}, +{ + Id: 5387 + AegisName: "Hay" + Name: "Hay" + Type: "IT_ETC" + Buy: 200 + Sell: 100 + Weight: 11 + Refine: false + ViewSprite: 5387 +}, +{ + Id: 5388 + AegisName: "Straw" + Name: "Straw" + Type: "IT_ETC" + Buy: 200 + Sell: 100 + Weight: 11 + Refine: false + ViewSprite: 5388 +}, +{ + Id: 5389 + AegisName: "SpeltSeeds" + Name: "SpeltSeeds" + Type: "IT_ETC" + Buy: 200 + Sell: 100 + Weight: 8 + Refine: false + ViewSprite: 5389 +}, +{ + Id: 5390 + AegisName: "MoonDust" + Name: "MoonDust" + Type: "IT_ETC" + Buy: 2000 + Sell: 1000 + Weight: 1 + Refine: false + ViewSprite: 5390 + //Disabled: true // @TMWA +}, +{ + Id: 5391 + AegisName: "SunDust" + Name: "SunDust" + Type: "IT_ETC" + Buy: 2000 + Sell: 1000 + Weight: 1 + Refine: false + ViewSprite: 5391 + //Disabled: true // @TMWA +}, /* Chest Armor */ { Id: 523 @@ -6018,7 +6102,7 @@ item_db: ( AegisName: "GoldenPlatemail" Name: "GoldenPlatemail" Type: "IT_ARMOR" - Buy: 9999000 + Buy: 350000 Sell: 3000 Weight: 4500 Matk: -100 @@ -6029,6 +6113,7 @@ item_db: ( ViewSprite: 645 Script: <" bonus bMatkRate, -100; // @EVOL2 + bonus bCriticalDef, 5; "> }, { @@ -6161,6 +6246,7 @@ item_db: ( ViewSprite: 659 Script: <" bonus bMatkRate, -110; // @EVOL2 + bonus bCriticalDef, 10; "> }, { @@ -6521,8 +6607,8 @@ item_db: ( AegisName: "CottonShirt" Name: "CottonShirt" Type: "IT_ARMOR" - Buy: 300 - Sell: 5 + Buy: 1000 + Sell: 500 Weight: 13 Matk: -2 Def: 2 @@ -6539,8 +6625,8 @@ item_db: ( AegisName: "RedCottonShirt" Name: "RedCottonShirt" Type: "IT_ARMOR" - Buy: 300 - Sell: 5 + Buy: 1000 + Sell: 500 Weight: 20 Matk: -4 Def: 2 @@ -6557,8 +6643,8 @@ item_db: ( AegisName: "GreenCottonShirt" Name: "GreenCottonShirt" Type: "IT_ARMOR" - Buy: 300 - Sell: 5 + Buy: 1000 + Sell: 500 Weight: 20 Matk: -4 Def: 2 @@ -6575,8 +6661,8 @@ item_db: ( AegisName: "DarkBlueCottonShirt" Name: "DarkBlueCottonShirt" Type: "IT_ARMOR" - Buy: 300 - Sell: 5 + Buy: 1000 + Sell: 500 Weight: 20 Matk: -4 Def: 2 @@ -6593,8 +6679,8 @@ item_db: ( AegisName: "YellowCottonShirt" Name: "YellowCottonShirt" Type: "IT_ARMOR" - Buy: 300 - Sell: 5 + Buy: 1000 + Sell: 500 Weight: 20 Matk: -4 Def: 2 @@ -6611,8 +6697,8 @@ item_db: ( AegisName: "LightBlueCottonShirt" Name: "LightBlueCottonShirt" Type: "IT_ARMOR" - Buy: 300 - Sell: 5 + Buy: 1000 + Sell: 500 Weight: 20 Matk: -4 Def: 2 @@ -6629,8 +6715,8 @@ item_db: ( AegisName: "PinkCottonShirt" Name: "PinkCottonShirt" Type: "IT_ARMOR" - Buy: 300 - Sell: 5 + Buy: 1000 + Sell: 500 Weight: 20 Matk: -4 Def: 2 @@ -6647,8 +6733,8 @@ item_db: ( AegisName: "BlackCottonShirt" Name: "BlackCottonShirt" Type: "IT_ARMOR" - Buy: 300 - Sell: 5 + Buy: 1000 + Sell: 500 Weight: 20 Matk: -4 Def: 2 @@ -6665,8 +6751,8 @@ item_db: ( AegisName: "OrangeCottonShirt" Name: "OrangeCottonShirt" Type: "IT_ARMOR" - Buy: 300 - Sell: 5 + Buy: 1000 + Sell: 500 Weight: 20 Matk: -4 Def: 2 @@ -6683,8 +6769,8 @@ item_db: ( AegisName: "PurpleCottonShirt" Name: "PurpleCottonShirt" Type: "IT_ARMOR" - Buy: 300 - Sell: 5 + Buy: 1000 + Sell: 500 Weight: 20 Matk: -4 Def: 2 @@ -6701,8 +6787,8 @@ item_db: ( AegisName: "DarkGreenCottonShirt" Name: "DarkGreenCottonShirt" Type: "IT_ARMOR" - Buy: 300 - Sell: 5 + Buy: 1000 + Sell: 500 Weight: 20 Matk: -4 Def: 2 @@ -10512,6 +10598,24 @@ item_db: ( bonus bMatkRate, -170; // @EVOL2 "> }, +{ + Id: 5398 + AegisName: "RaggedShirt" + Name: "RaggedShirt" + Type: "IT_ARMOR" + Buy: 300 + Sell: 5 + Weight: 7 + Matk: -1 + Def: 1 + Slots: 0 + Loc: "EQP_HEAD_MID" + Refine: false + ViewSprite: 5398 + Script: <" + bonus bMatkRate, -1; // @EVOL2 + "> +}, ////////////////////////////////////////////////////////// // Hats { @@ -11365,14 +11469,14 @@ item_db: ( Buy: 20000 Sell: 1500 Weight: 800 - Matk: -20 - Def: 10 + Matk: -30 + Def: 15 Slots: 0 Loc: "EQP_HEAD_TOP" Refine: false ViewSprite: 801 Script: <" - bonus bMatkRate, -20; // @EVOL2 + bonus bMatkRate, -30; // @EVOL2 bonus bLuk, 1; "> }, @@ -14459,6 +14563,209 @@ item_db: ( bonus bMatkRate, -36; // @EVOL2 "> }, +{ + Id: 5392 + AegisName: "SunshroomHat" + Name: "SunshroomHat" + Type: "IT_ARMOR" + Buy: 3000 + Sell: 1500 + Weight: 30 + Matk: 5 + Def: 15 + Slots: 0 + Loc: "EQP_HEAD_TOP" + Refine: false + ViewSprite: 5392 + Script: <" + bonus bMatkRate, 5; // @EVOL2 + "> +}, +{ + Id: 5394 + AegisName: "BlackKnightsHelmet" + Name: "BlackKnightsHelmet" + Type: "IT_ARMOR" + Buy: 20000 + Sell: 2000 + Weight: 600 + Matk: -30 + Def: 15 + Slots: 0 + Loc: "EQP_HEAD_TOP" + Refine: false + ViewSprite: 5394 + Script: <" + bonus bMatkRate, -30; // @EVOL2 + "> +}, +{ + Id: 5395 + AegisName: "BlackRoseHat" + Name: "BlackRoseHat" + Type: "IT_ARMOR" + Buy: 5000 + Sell: 1000 + Weight: 0 + Matk: 8 + Def: 1 + Slots: 0 + Loc: "EQP_HEAD_TOP" + Refine: false + ViewSprite: 5395 + Script: <" + bonus bMatkRate, 8; // @EVOL2 + "> +}, +{ + Id: 5396 + AegisName: "SnowshroomHat" + Name: "SnowshroomHat" + Type: "IT_ARMOR" + Buy: 3000 + Sell: 1500 + Weight: 30 + Matk: 5 + Def: 15 + Slots: 0 + Loc: "EQP_HEAD_TOP" + Refine: false + ViewSprite: 5396 + Script: <" + bonus bMatkRate, 5; // @EVOL2 + "> +}, +{ + Id: 5397 + AegisName: "WickedMushroomHat" + Name: "WickedMushroomHat" + Type: "IT_ARMOR" + Buy: 2500 + Sell: 1250 + Weight: 30 + Matk: 0 + Def: 15 + Slots: 0 + Loc: "EQP_HEAD_TOP" + Refine: false + ViewSprite: 5396 +}, +{ + Id: 5399 + AegisName: "IceSkullMask" + Name: "IceSkullMask" + Type: "IT_ARMOR" + Buy: 10000 + Sell: 5000 + Weight: 150 + Matk: 5 + Def: 3 + Slots: 0 + Loc: "EQP_HEAD_TOP" + Refine: false + ViewSprite: 5399 + Script: <" + bonus bMatkRate, 5; // @EVOL2 + "> +}, +{ + Id: 5400 + AegisName: "GoldenSkullMask" + Name: "GoldenSkullMask" + Type: "IT_ARMOR" + Buy: 10000 + Sell: 5000 + Weight: 150 + Matk: 5 + Def: 3 + Slots: 0 + Loc: "EQP_HEAD_TOP" + Refine: false + ViewSprite: 5400 + Script: <" + bonus bMatkRate, 5; // @EVOL2 + "> +}, +{ + Id: 5401 + AegisName: "YellowHeadSlime" + Name: "YellowHeadSlime" + Type: "IT_ARMOR" + Buy: 10000 + Sell: 5000 + Weight: 250 + Matk: 0 + Def: 1 + Slots: 0 + Loc: "EQP_HEAD_TOP" + Refine: false + ViewSprite: 5401 + Script: <" + bonus bHPrecovRate, 7; + bonus bMdef, 7; + bonus bHit, -7; + "> +}, +{ + Id: 5402 + AegisName: "RedHeadSlime" + Name: "RedHeadSlime" + Type: "IT_ARMOR" + Buy: 10000 + Sell: 5000 + Weight: 250 + Matk: 0 + Def: 1 + Slots: 0 + Loc: "EQP_HEAD_TOP" + Refine: false + ViewSprite: 5402 + Script: <" + bonus bHPrecovRate, 7; + bonus bMdef, 7; + bonus bHit, -7; + "> +}, +{ + Id: 5403 + AegisName: "GreenHeadSlime" + Name: "GreenHeadSlime" + Type: "IT_ARMOR" + Buy: 10000 + Sell: 5000 + Weight: 250 + Matk: 0 + Def: 1 + Slots: 0 + Loc: "EQP_HEAD_TOP" + Refine: false + ViewSprite: 5403 + Script: <" + bonus bHPrecovRate, 7; + bonus bMdef, 7; + bonus bHit, -7; + "> +}, +{ + Id: 5404 + AegisName: "BlueHeadSlime" + Name: "BlueHeadSlime" + Type: "IT_ARMOR" + Buy: 10000 + Sell: 5000 + Weight: 250 + Matk: 0 + Def: 1 + Slots: 0 + Loc: "EQP_HEAD_TOP" + Refine: false + ViewSprite: 5404 + Script: <" + bonus bHPrecovRate, 7; + bonus bMdef, 7; + bonus bHit, -7; + "> +}, /* Usable items */ { Id: 501 @@ -18070,6 +18377,7 @@ item_db: ( Refine: false ViewSprite: 585 Script: <" + bonus bInt, 1; bonus bMatkRate, 5; // @EVOL2 "> }, @@ -18164,6 +18472,24 @@ item_db: ( bonus bMatkRate, -200; // @EVOL2 "> }, +{ + Id: 5393 + AegisName: "BlackSteelShield" + Name: "BlackSteelShield" + Type: "IT_ARMOR" + Buy: 40000 + Sell: 3000 + Weight: 2500 + Matk: -200 + Def: 20 + Slots: 0 + Loc: "EQP_HAND_L" + Refine: false + ViewSprite: 5393 + Script: <" + bonus bMatkRate, -200; // @EVOL2 + "> +}, // // Pets diff --git a/world/map/db/item_db_chest.txt b/world/map/db/item_db_chest.txt index ff48e16e..25c91cdb 100644 --- a/world/map/db/item_db_chest.txt +++ b/world/map/db/item_db_chest.txt @@ -8,14 +8,14 @@ 624, VNeckSweater, 5, 6000, 3000, 135, 0, 8, 0, -24, 0, 2, 512, 0, 0, 0, 0, {}, {} 625, ChainmailShirt, 5, 15000, 1500, 800, 0, 20, 0, -120, 0, 2, 512, 0, 0, 0, 0, {}, {} 626, LightPlatemail, 5, 50000, 2500, 1200, 0, 25, 0, -150, 0, 2, 512, 0, 0, 0, 0, {}, {} -645, GoldenPlatemail, 5, 9999000, 3000, 4500, 0, 25, 0, -100, 0, 2, 512, 0, 0, 0, 0, {}, {} +645, GoldenPlatemail, 5, 350000, 3000, 4500, 0, 25, 0, -100, 0, 2, 512, 0, 0, 0, 0, {}, {bonus bCriticalDef, 5;} 649, WhiteEvokersRobeBlue, 5, 8000, 4000, 50, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, 0, {}, {bonus bAgi, 1; bonus bCriticalDef, 10;} 650, BlackEvokersRobeBlue, 5, 8000, 4000, 50, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, 0, {}, {bonus bAgi, 1; bonus bCriticalDef, 10;} 651, WhiteWizardRobe, 5, 8000, 4000, 50, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, 0, {}, {} 652, BlackWizardRobe, 5, 8000, 4000, 50, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, 0, {}, {} 653, ApprenticeRobe, 5, 8000, 4000, 50, 0, 5, 0, 20, 0, 2, 512, 0, 0, 0, 0, {}, {bonus bAgi, 1; bonus bCriticalDef, 10;} 658, WarlordPlate, 5, 100000, 3000, 2600, 0, 27, 0, -170, 0, 2, 512, 0, 0, 0, 0, {}, {} -659, GoldenWarlordPlate, 5, 500000, 4000, 7600, 0, 27, 0, -110, 0, 2, 512, 0, 0, 0, 0, {}, {} +659, GoldenWarlordPlate, 5, 500000, 4000, 7600, 0, 27, 0, -110, 0, 2, 512, 0, 0, 0, 0, {}, {bonus bCriticalDef, 10;} 688, TankTop, 5, 800, 400, 10, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} 689, ShortTankTop, 5, 600, 300, 8, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} 720, SilkRobe, 5, 8000, 4000, 90, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, 0, {}, {} @@ -36,18 +36,18 @@ 1185, PinkChristmasSweater, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, 0, {}, {} 1186, DarkChristmasSweater, 5, 2000, 1000, 35, 0, 6, 0, -12, 0, 2, 512, 0, 0, 0, 0, {}, {} 1187, BlueChristmasSweater, 5, 8000, 4000, 30, 0, 5, 0, 0, 0, 2, 512, 0, 0, 0, 0, {}, {} -1202, CottonShirt, 5, 300, 5, 13, 0, 2, 0, -2, 0, 2, 512, 0, 0, 0, 0, {}, {} -2050, RedCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} -2051, GreenCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} -2052, DarkBlueCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} -2053, YellowCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} -2054, LightBlueCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} -2055, PinkCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} +1202, CottonShirt, 5, 1000, 500, 13, 0, 2, 0, -2, 0, 2, 512, 0, 0, 0, 0, {}, {} +2050, RedCottonShirt, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} +2051, GreenCottonShirt, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} +2052, DarkBlueCottonShirt, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} +2053, YellowCottonShirt, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} +2054, LightBlueCottonShirt, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} +2055, PinkCottonShirt, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} //ID, Name, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, Mode, {UseScript}, {EquipScript} -2056, BlackCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} -2057, OrangeCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} -2058, PurpleCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} -2059, DarkGreenCottonShirt, 5, 300, 5, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} +2056, BlackCottonShirt, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} +2057, OrangeCottonShirt, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} +2058, PurpleCottonShirt, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} +2059, DarkGreenCottonShirt, 5, 1000, 500, 20, 0, 2, 0, -4, 0, 2, 512, 0, 0, 0, 0, {}, {} 2060, RedVNeckSweater, 5, 6000, 3000, 135, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, 0, {}, {} 2061, GreenVNeckSweater, 5, 6000, 3000, 135, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, 0, {}, {} 2062, DarkBlueVNeckSweater, 5, 6000, 3000, 135, 0, 8, 0, -16, 0, 2, 512, 0, 0, 0, 0, {}, {} @@ -263,3 +263,4 @@ 5320, BlackChainmailShirt, 5, 15000, 1500, 800, 0, 20, 0, -120, 0, 2, 512, 0, 0, 0, 0, {}, {} 5321, BlackLightPlatemail, 5, 50000, 2500, 1200, 0, 25, 0, -150, 0, 2, 512, 0, 0, 0, 0, {}, {} 5322, BlackWarlordPlate, 5, 200000, 6000, 2600, 0, 27, 0, -170, 0, 2, 512, 0, 0, 0, 0, {}, {} +5398, RaggedShirt, 5, 300, 5, 7, 0, 1, 0, -1, 0, 2, 512, 0, 0, 0, 0, {}, {} diff --git a/world/map/db/item_db_generic.txt b/world/map/db/item_db_generic.txt index ff127182..22834289 100644 --- a/world/map/db/item_db_generic.txt +++ b/world/map/db/item_db_generic.txt @@ -13,7 +13,7 @@ 526, CoinBag, 3, 1000, 500, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 537, TreasureKey, 3, 100, 50, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 538, GreenPresentBox, 3, 20, 10, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} -540, EmptyBottle, 3, 20, 10, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} +540, EmptyBottle, 3, 20, 10, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 542, BottleOfSand, 3, 70, 35, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 551, AquaHint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 552, MagentaHint, 3, 20, 0, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} @@ -228,12 +228,12 @@ 4041, FlightTalisman, 3, 5000, 1200, 12, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 5110, Bloodstone, 3, 2000, 250, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 5111, BrainStem, 3, 180, 90, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} -//5112, CryptKey, 3, 300, 150, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} +5112, CryptKey, 3, 300, 150, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} //5113, Ectoplasm, 3, 80, 20, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} //5114, Urn, 3, 40, 20, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 5115, VampireBatWing, 3, 700, 20, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} //ID, Name, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, Mode, {UseScript}, {EquipScript} -//5116, WraithHorn, 3, 700, 20, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} +5116, StalkerHorn, 3, 2000, 1000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} //5117, AstralCube, 3, 10000, 10, 800, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} //5118, RunestoneA, 3, 1000, 100, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} //5119, RunestoneL, 3, 1000, 100, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} @@ -273,7 +273,7 @@ 5311, ShadowHerb, 3, 2, 1, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} //5313, CrozeniteCrystal, 3, 0, 0, 555, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, {}, {} 5314, GoldOre, 3, 3200, 1600, 40, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} -//5315, GoldIngot, 3, 160000, 80000, 1000, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, {}, {} +5315, GoldIngot, 3, 160000, 80000, 1000, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, {}, {} //ID, Name, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, Mode, {UseScript}, {EquipScript} 5316, BromenalOre, 3, 800, 400, 40, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} //5317, BromenalIngot, 3, 40000, 20000, 1000, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, {}, {} @@ -286,7 +286,7 @@ 5356, TortugaShell, 3, 2000, 1000, 100, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 5357, RattoTail, 3, 300, 150, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 5358, RattoTeeth, 3, 300, 150, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} -5359, SilverKey, 3, 2000, 1000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, {}, {} +//5359, SilverKey, 3, 2000, 1000, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, {}, {} 5360, MushroomSpores, 3, 500, 250, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 5361, Snowflake, 3, 500, 250, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 5362, BeeStinger, 3, 50, 25, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} @@ -297,9 +297,9 @@ 5368, RedScorpionClaw, 3, 80, 40, 15, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} //ID, Name, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, Mode, {UseScript}, {EquipScript} 5369, BlackScorpionClaw, 3, 160, 80, 15, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} -5370, GoldenScorpionClaw, 3, 600, 75, 65, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, {}, {} -5371, DragonScales, 3, 8000, 750, 400, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, {}, {} -5372, DragonHorn, 3, 90000, 4000, 1000, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, {}, {} +//5370, GoldenScorpionClaw, 3, 600, 75, 65, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, {}, {} +//5371, DragonScales, 3, 8000, 750, 400, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, {}, {} +//5372, DragonHorn, 3, 90000, 4000, 1000, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, {}, {} 5375, JunglefowlFeather, 3, 4000, 2000, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 5376, KingChonkyBirbFeather, 3, 6000, 3000, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 5377, Honeycomb, 3, 200, 100, 11, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} @@ -308,3 +308,9 @@ 5381, Brick, 3, 2000, 1000, 40, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 5384, MountainCrystal, 3, 20000, 5000, 20, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} 5385, BlackQuartz, 3, 20000, 5000, 20, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} +5386, GlassShards, 3, 10, 5, 5, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} +5387, Hay, 3, 200, 100, 11, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} +5388, Straw, 3, 200, 100, 11, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} +5389, SpeltSeeds, 3, 200, 100, 8, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} +//5390, MoonDust, 3, 2000, 1000, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} +//5391, SunDust, 3, 2000, 1000, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, {}, {} diff --git a/world/map/db/item_db_head.txt b/world/map/db/item_db_head.txt index 08a7b5c1..7bee1014 100644 --- a/world/map/db/item_db_head.txt +++ b/world/map/db/item_db_head.txt @@ -54,7 +54,7 @@ 781, WitchDoctorsMask, 5, 20000, 100, 20, 0, 3, 0, 0, 0, 2, 256, 0, 0, 0, 0, {}, {} 795, BromenalHelmet, 5, 15000, 1500, 400, 0, 16, 0, -30, 0, 2, 256, 0, 0, 0, 0, {}, {} 800, BowlerHatBrown, 5, 2500, 1250, 30, 0, 10, 0, 2, 0, 2, 256, 0, 0, 0, 0, {}, {} -801, PinkieHelmet, 5, 20000, 1500, 800, 0, 10, 0, -20, 0, 2, 256, 0, 0, 0, 0, {}, {bonus bLuk, 1;} +801, PinkieHelmet, 5, 20000, 1500, 800, 0, 15, 0, -30, 0, 2, 256, 0, 0, 0, 0, {}, {bonus bLuk, 1;} 848, Earmuffs, 5, 1000, 500, 20, 0, 2, 0, -1, 0, 2, 256, 0, 0, 0, 0, {}, {} 854, ElfNightcap, 5, 1000, 500, 50, 0, 3, 0, 5, 0, 2, 256, 0, 0, 0, 0, {}, {} 855, Sunglasses, 5, 1000, 500, 10, 0, 2, 0, 6, 0, 2, 256, 0, 0, 0, 0, {}, {} @@ -242,3 +242,15 @@ 5324, BlackWarlordHelmet, 5, 30000, 3000, 900, 0, 18, 0, -36, 0, 2, 256, 0, 0, 0, 0, {}, {} 5325, BlackInfantryHelmet, 5, 15000, 1500, 400, 0, 15, 0, -30, 0, 2, 256, 0, 0, 0, 0, {}, {} 5326, BlackCrusadeHelmet, 5, 25000, 2500, 1300, 0, 18, 0, -36, 0, 2, 256, 0, 0, 0, 0, {}, {} +5392, SunshroomHat, 5, 3000, 1500, 30, 0, 15, 0, 5, 0, 2, 256, 0, 0, 0, 0, {}, {} +5394, BlackKnightsHelmet, 5, 20000, 2000, 600, 0, 15, 0, -30, 0, 2, 256, 0, 0, 0, 0, {}, {} +5395, BlackRoseHat, 5, 5000, 1000, 0, 0, 1, 0, 8, 0, 2, 256, 0, 0, 0, 0, {}, {} +5396, SnowshroomHat, 5, 3000, 1500, 30, 0, 15, 0, 5, 0, 2, 256, 0, 0, 0, 0, {}, {} +5397, WickedMushroomHat, 5, 2500, 1250, 30, 0, 15, 0, 0, 0, 2, 256, 0, 0, 0, 0, {}, {} +5399, IceSkullMask, 5, 10000, 5000, 150, 0, 3, 0, 5, 0, 2, 256, 0, 0, 0, 0, {}, {} +5400, GoldenSkullMask, 5, 10000, 5000, 150, 0, 3, 0, 5, 0, 2, 256, 0, 0, 0, 0, {}, {} +5401, YellowHeadSlime, 5, 10000, 5000, 250, 0, 1, 0, 0, 0, 2, 256, 0, 0, 0, 0, {}, {bonus bHPrecovRate, 7; bonus bMdef, 7; bonus bHit, -7;} +5402, RedHeadSlime, 5, 10000, 5000, 250, 0, 1, 0, 0, 0, 2, 256, 0, 0, 0, 0, {}, {bonus bHPrecovRate, 7; bonus bMdef, 7; bonus bHit, -7;} +5403, GreenHeadSlime, 5, 10000, 5000, 250, 0, 1, 0, 0, 0, 2, 256, 0, 0, 0, 0, {}, {bonus bHPrecovRate, 7; bonus bMdef, 7; bonus bHit, -7;} +5404, BlueHeadSlime, 5, 10000, 5000, 250, 0, 1, 0, 0, 0, 2, 256, 0, 0, 0, 0, {}, {bonus bHPrecovRate, 7; bonus bMdef, 7; bonus bHit, -7;} +//ID, Name, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, Mode, {UseScript}, {EquipScript} diff --git a/world/map/db/item_db_offhand.txt b/world/map/db/item_db_offhand.txt index 39d5d4a4..52e500df 100644 --- a/world/map/db/item_db_offhand.txt +++ b/world/map/db/item_db_offhand.txt @@ -2,9 +2,10 @@ //DO NOT EDIT IT DIRECTLY //Edit item_db.conf instead! //ID, Name, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, Mode, {UseScript}, {EquipScript} -585, ScarabArmlet, 5, 8000, 4000, 200, 0, 0, 0, 5, 0, 2, 32, 0, 1, 0, 0, {}, {} +585, ScarabArmlet, 5, 8000, 4000, 200, 0, 0, 0, 5, 0, 2, 32, 0, 1, 0, 0, {}, {bonus bInt, 1;} 601, SteelShield, 5, 40000, 3000, 2500, 0, 20, 0, -200, 0, 2, 32, 0, 0, 0, 0, {}, {} 602, WoodenShield, 5, 10000, 2000, 1500, 0, 14, 0, -70, 0, 2, 32, 0, 0, 0, 0, {}, {} 603, LeatherShield, 5, 2000, 1000, 1300, 0, 7, 0, -35, 0, 2, 32, 0, 0, 0, 0, {}, {} //797, BromenalShield, 5, 40000, 3000, 2000, 0, 18, 0, -160, 0, 2, 32, 0, 0, 0, 0, {}, {} 5285, DragonShield, 5, 40000, 3000, 2500, 0, 27, 0, -200, 0, 2, 32, 0, 0, 0, 0, {}, {} +5393, BlackSteelShield, 5, 40000, 3000, 2500, 0, 20, 0, -200, 0, 2, 32, 0, 0, 0, 0, {}, {} diff --git a/world/map/db/item_db_trinket.txt b/world/map/db/item_db_trinket.txt index 30d84c04..5d94dc8a 100644 --- a/world/map/db/item_db_trinket.txt +++ b/world/map/db/item_db_trinket.txt @@ -24,7 +24,7 @@ 4014, SimpleRing, 5, 100000, 2500, 5, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, 0, {}, {} //ID, Name, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, Mode, {UseScript}, {EquipScript} 5252, GuardianWings, 5, 0, 0, 1, 0, 0, 0, 0, 0, 2, 16, 0, 0, 0, 0, {}, {} -5253, MageRing, 5, 0, 0, 3, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, 0, {}, {bonus bInt, 1;} +5253, MagicRing, 5, 0, 0, 3, 0, 0, 0, 0, 0, 2, 128, 0, 80, 0, 0, {}, {set @bStat, Int; set @minbStatVal, 80; callfunc "RequireStat"; callfunc "MagicRingItem"; bonus bInt, 1;} //5268, AssassinRing, 5, 1000, 1, 5, 0, 0, 0, 0, 0, 2, 128, 0, 0, 0, 0, {}, {callfunc "BrawlingItem"; bonus bAgi, 1; bonus bCritical, 5; bonus bAspdRate, 5;} //5269, AssassinAmulet, 5, 1000, 1, 10, 0, 0, 0, 0, 0, 2, 16, 0, 0, 0, 0, {}, {callfunc "BrawlingItem"; bonus bAgi, 1; bonus bDoubleAddRate, 5; bonus bHit, 25;} -5270, ManaPearl, 5, 1000, 1, 3, 0, 0, 0, 22, 0, 2, 16, 0, 0, 0, 0, {}, {bonus bInt, 1; bonus bMaxSP, 55; bonus bMdef, 22; bonus bSPrecovRate, 33;} +5270, ManaPearl, 5, 0, 0, 0, 0, 0, 0, 22, 0, 2, 16, 0, 0, 0, 0, {}, {callfunc "ManaPearlItem"; bonus bInt, 1; bonus bMaxSP, 55; bonus bMdef, 22; bonus bSPrecovRate, 33;} diff --git a/world/map/db/item_db_weapon.txt b/world/map/db/item_db_weapon.txt index 1c22799d..ddfae1a4 100644 --- a/world/map/db/item_db_weapon.txt +++ b/world/map/db/item_db_weapon.txt @@ -32,20 +32,20 @@ 587, Sword, 4, 1000, 500, 1500, 140, 0, 1, 0, 0, 2, 2, 1, 1, 2, 0, {}, {callfunc "UnreleasedItem";} 588, BastardSword, 4, 1000, 500, 1500, 150, 0, 1, 0, 0, 2, 2, 1, 1, 2, 0, {}, {callfunc "UnreleasedItem";} 590, DragonSword, 4, 8000, 4000, 1050, 171, 0, 1, 0, 0, 2, 2, 2, 99, 2, 0, {}, {set @bStat, Str; set @minbStatVal, 50; callfunc "RequireStat"; set @bStat, Agi; set @minbStatVal, 50; callfunc "RequireStat"; set @bStat, Vit; set @minbStatVal, 50; callfunc "RequireStat"; set @bStat, Dex; set @minbStatVal, 50; callfunc "RequireStat"; set @bStat, Luk; set @minbStatVal, 50; callfunc "RequireStat"; bonus bStr, 5; bonus bAspdRate, 2; bonus bHit, 5; bonus bBaseWeaponDelayAdjust, -25;} -591, LongSword, 4, 1000, 500, 1300, 150, 0, 1, 0, 0, 2, 2, 1, 1, 2, 0, {}, {callfunc "UnreleasedItem";} +591, LongSword, 4, 20000, 10000, 1300, 149, 0, 1, 0, 0, 2, 2, 2, 1, 2, 0, {}, {bonus bBaseWeaponDelayAdjust, -11; bonus bPerfectHitRate, 11; bonus bPerfectHitAddRate, 7;} 594, Spear, 4, 1000, 500, 200, 110, 0, 1, 0, 0, 2, 2, 1, 1, 4, 0, {}, {callfunc "UnreleasedItem";} 596, Pike, 4, 20, 10, 3000, 170, 8, 2, 0, 0, 2, 34, 2, 0, 5, 0, {}, {callfunc "UnreleasedItem";} 609, ImperialBow, 4, 101000, 40000, 900, 110, 0, 6, -9, 0, 2, 34, 1, 90, 11, 0, {}, {set @bStat, Dex; set @minbStatVal, 80; callfunc "RequireStat"; bonus2 bHPDrainRate, 100, 4; bonus bCriticalDef, 10; bonus bFlee, 10; bonus bAspdRate, 10; set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";} 623, Scythe, 4, 100, 50, 1200, 120, 5, 2, 0, 0, 2, 34, 2, 1, 23, 0, {}, {} 758, WoodenStaff, 4, 4000, 2000, 800, 50, 3, 2, 10, 0, 2, 34, 1, 1, 23, 0, {}, {set @bStat, Int; set @minbStatVal, 60; callfunc "RequireStat";} 762, TerraniteArrow, 10, 80, 20, 1, 50, 0, 0, 0, 0, 2, 32768, 0, 0, 0, 0, {}, {bonus bCritical, 20; set @AmmoType, AMMO_BOW; callfunc "CheckAmmo";} -867, IceGladius, 4, 2000, 1000, 1000, 130, 0, 1, 0, 0, 2, 2, 1, 1, 2, 0, {}, {bonus bLuk, 1;} +867, IceGladius, 4, 2000, 1000, 1000, 130, 0, 1, 0, 0, 2, 2, 1, 1, 2, 0, {}, {bonus bLuk, 1; bonus bCriticalDef, 5;} 878, BansheeBow, 4, 101000, 40000, 900, 140, 0, 6, -9, 0, 2, 34, 1, 90, 11, 0, {}, {set @bStat, Dex; set @minbStatVal, 80; callfunc "RequireStat"; bonus2 bHPDrainRate, 100, -2; bonus bAspdRate, 20; bonus bMaxHP, -150; bonus bSpeedAddRate, 10; bonus bDefRate, -40; bonus bDef2Rate, -35; set @LauncherType, AMMO_BOW; callfunc "CheckLauncher";} 903, SlingShot, 4, 500, 50, 50, 5, 0, 4, 0, 0, 2, 34, 1, 1, 11, 0, {}, {set @LauncherType, AMMO_SLING; callfunc "CheckLauncher";} 904, SlingBullet, 10, 1, 0, 1, 3, 0, 0, 0, 0, 2, 32768, 0, 0, 0, 0, {}, {set @AmmoType, AMMO_SLING; callfunc "CheckAmmo";} //ID, Name, Type, Price, Sell, Weight, ATK, DEF, Range, Mbonus, Slot, Gender, Loc, wLV, eLV, View, Mode, {UseScript}, {EquipScript} -906, KidBook, 4, 10000, 5000, 350, 1, 0, 3, 0, 0, 2, 34, 1, 1, 15, 0, {}, {} -907, FloydBook, 4, 10000, 5000, 350, 1, 0, 3, 0, 0, 2, 34, 1, 135, 15, 7, {}, {} +906, KidBook, 4, 10000, 5000, 350, 50, 0, 3, 0, 0, 2, 34, 1, 1, 15, 0, {}, {} +907, FloydBook, 4, 10000, 5000, 350, 50, 0, 3, 0, 0, 2, 34, 1, 135, 15, 7, {}, {} 910, Rainerang, 4, 10000, 5000, 115, 60, 0, 4, 0, 0, 2, 2, 1, 0, 11, 32, {}, {set @LauncherType, AMMO_DONT_USE; callfunc "CheckLauncher";} 1170, SweetTooth, 4, 4000, 2000, 1000, 50, 0, 2, 15, 0, 2, 34, 1, 1, 23, 0, {}, {set @bStat, Int; set @minbStatVal, 60; callfunc "RequireStat";} 1171, Wand, 4, 400, 200, 100, 1, 0, 1, 5, 0, 2, 2, 1, 1, 10, 0, {}, {set @bStat, Int; set @minbStatVal, 5; callfunc "RequireStat";} diff --git a/world/map/db/mob_db.conf b/world/map/db/mob_db.conf index d33b30c4..fcbff654 100644 --- a/world/map/db/mob_db.conf +++ b/world/map/db/mob_db.conf @@ -196,10 +196,9 @@ mob_db: ( CactusDrink: 150 InsectLeg: 400 RoastedMaggot: 150 - Dagger: 70 - SharpKnife: 1 BatWing: 3000 BatTeeth: 2000 + RubberBat: 1 } }, { @@ -427,7 +426,7 @@ mob_db: ( MutationCount: 3 MutationStrength: 50 Drops: { - CaveSnakeLamp: 1000 + CaveSnakeLamp: 1500 JeansShorts: (40, "ODG_BASICSTAT") CaveSnakeTongue: 500 CaveSnakeEgg: 400 @@ -1906,11 +1905,12 @@ mob_db: ( MutationCount: 1 MutationStrength: 30 Drops: { - LeatherGloves: (20, "ODG_BASICSTAT") SnakeSkin: 350 MountainSnakeEgg: 400 MountainSnakeEgg: 400 MountainSnakeTongue: 500 + MinerGloves: (100, "ODG_BASICSTAT") + LeatherGloves: (1, "ODG_BASICSTAT") } }, { @@ -2104,9 +2104,9 @@ mob_db: ( Bone: 210 Skull: 300 DarkCrystal: 1000 - WarlordHelmet: (3, "ODG_BASICSTAT") - WarlordPlate: (2, "ODG_BASICSTAT") - LeatherGloves: (35, "ODG_BASICSTAT") + WarlordHelmet: (1, "ODG_BASICSTAT") + WarlordPlate: (1, "ODG_BASICSTAT") + LeatherGloves: (5, "ODG_BASICSTAT") DiseasedHeart: 500 Soul: 500 GoldenTooth: 10 @@ -2403,6 +2403,7 @@ mob_db: ( DarkCrystal: 40 DiseasedHeart: 500 Soul: 500 + StalkerHorn: 500 } }, { @@ -2450,6 +2451,7 @@ mob_db: ( IceCube: 5000 IcedWater: 800 Snowflake: 1000 + IceSkullMask: (1, "ODG_BASICSTAT") } }, { @@ -2589,6 +2591,7 @@ mob_db: ( Fungus: 30 MushroomSpores: 100 JoyplimScroll: 40 + WickedMushroomHat: (1, "ODG_BASICSTAT") } }, { @@ -3042,9 +3045,9 @@ mob_db: ( UnderworldMask: 5 Skull: 300 DarkCrystal: 1000 - WarlordHelmet: (3, "ODG_BASICSTAT") - WarlordPlate: (2, "ODG_BASICSTAT") - LeatherGloves: (35, "ODG_BASICSTAT") + WarlordHelmet: (1, "ODG_BASICSTAT") + WarlordPlate: (1, "ODG_BASICSTAT") + LeatherGloves: (5, "ODG_BASICSTAT") DiseasedHeart: 500 Soul: 500 } @@ -3096,9 +3099,9 @@ mob_db: ( Phylactery: 5 Skull: 300 DarkCrystal: 1000 - WarlordHelmet: (3, "ODG_BASICSTAT") - WarlordPlate: (2, "ODG_BASICSTAT") - LeatherGloves: (35, "ODG_BASICSTAT") + WarlordHelmet: (1, "ODG_BASICSTAT") + WarlordPlate: (1, "ODG_BASICSTAT") + LeatherGloves: (5, "ODG_BASICSTAT") DiseasedHeart: 500 Soul: 500 } @@ -3930,7 +3933,7 @@ mob_db: ( RottenRags: 70 Soul: 50 BlackRose: 30 - MageRing: 4 + MagicRing: 4 BlinkingHocus: 1 } }, @@ -4218,11 +4221,12 @@ mob_db: ( MutationCount: 1 MutationStrength: 30 Drops: { - LeatherGloves: (20, "ODG_BASICSTAT") SnakeSkin: 350 MountainSnakeEgg: 400 MountainSnakeEgg: 400 MountainSnakeTongue: 500 + MinerGloves: (100, "ODG_BASICSTAT") + LeatherGloves: (1, "ODG_BASICSTAT") } }, { @@ -4270,10 +4274,9 @@ mob_db: ( CactusDrink: 150 InsectLeg: 400 RoastedMaggot: 150 - Dagger: 70 - SharpKnife: 1 BatWing: 3000 BatTeeth: 2000 + RubberBat: 1 } }, { @@ -4368,9 +4371,9 @@ mob_db: ( UndeadEye: 210 PurpleDye: 200 DarkCrystal: 1000 - WarlordHelmet: (3, "ODG_BASICSTAT") - WarlordPlate: (2, "ODG_BASICSTAT") - LeatherGloves: (35, "ODG_BASICSTAT") + WarlordHelmet: (1, "ODG_BASICSTAT") + WarlordPlate: (1, "ODG_BASICSTAT") + LeatherGloves: (5, "ODG_BASICSTAT") DiseasedHeart: 500 Soul: 500 } @@ -4938,10 +4941,9 @@ mob_db: ( CactusDrink: 150 InsectLeg: 400 RoastedMaggot: 150 - Dagger: 70 - SharpKnife: 1 VampireBatWing: 3000 BatTeeth: 2000 + RubberBat: 1 } }, { @@ -5268,7 +5270,6 @@ mob_db: ( Drops: { LadyFingers: 300 JellAhh: 280 - RubberBat: 100 JackOLantern: 50 CandyPumpkin: 250 JellySkull: 250 @@ -6673,7 +6674,6 @@ mob_db: ( DamageMotion: 480 Drops: { JackOLantern: 100 - RubberBat: 20 RubberDucky: 20 RealisticBrain: 10 JarofBlood: 15 @@ -7521,7 +7521,6 @@ mob_db: ( MutationCount: 2 MutationStrength: 20 Drops: { - RubberBat: 10 RubberDucky: 10 RealisticBrain: 5 JarofBlood: 9 @@ -7990,6 +7989,7 @@ mob_db: ( Boots: 5000 LeatherGloves: 200 CrazyRum: 500 + LongSword: (1, "ODG_BASICSTAT") } }, { @@ -10445,4 +10445,486 @@ mob_db: ( IronPowder: 1200 } }, +{ + Id: 1227 + SpriteName: "Grass" + Name: "Grass" + Lv: 1 + Hp: 1 + Sp: 0 + Exp: 1 + JExp: 1 + AttackRange: 1 + Attack: [0, 0] + Def: 1 + Mdef: 0 + CriticalDef: 0 + Stats: { + Str: 0 + Agi: 0 + Vit: 0 + Int: 0 + Dex: 0 + Luk: 0 + } + ViewRange: 9 + ChaseRange: 10 + Size: 1 + Race: 3 + Element: (2, 1) + MoveSpeed: 800 + AttackDelay: 800 + AttackMotion: 672 + DamageMotion: 480 + Drops: { + Hay: 5000 + GrassSeed: 2000 + } +}, +{ + Id: 1228 + SpriteName: "Spelt" + Name: "Spelt" + Lv: 1 + Hp: 1 + Sp: 0 + Exp: 1 + JExp: 1 + AttackRange: 1 + Attack: [0, 0] + Def: 1 + Mdef: 0 + CriticalDef: 0 + Stats: { + Str: 0 + Agi: 0 + Vit: 0 + Int: 0 + Dex: 0 + Luk: 0 + } + ViewRange: 9 + ChaseRange: 10 + Size: 1 + Race: 3 + Element: (2, 1) + MoveSpeed: 800 + AttackDelay: 800 + AttackMotion: 672 + DamageMotion: 480 + Drops: { + Straw: 5000 + SpeltSeeds: 2000 + } +}, +{ + Id: 1229 + SpriteName: "WarlordSkull" + Name: "Warlord Skull" + Lv: 180 + Hp: 6000 + Sp: 0 + Exp: 6808 + JExp: 821 + AttackRange: 2 + Attack: [85, 185] + Def: 45 + Mdef: 25 + CriticalDef: 0 + Stats: { + Str: 50 + Agi: 20 + Vit: 40 + Int: 30 + Dex: 30 + Luk: 70 + } + ViewRange: 9 + ChaseRange: 10 + Size: 1 + Race: 3 + Element: (2, 1) + Mode: { + CanMove: true + Looter: true + Aggressive: true + Assist: true + CanAttack: true + ChangeTargetMelee: true + ChangeTargetChase: true + } + MoveSpeed: 650 + AttackDelay: 1700 + AttackMotion: 702 + DamageMotion: 580 + MutationCount: 4 + MutationStrength: 30 + Drops: { + DarkCrystal: 1000 + Skull: 500 + GoldenTooth: 20 + WarlordHelmet: (1, "ODG_BASICSTAT") + SkullMask: (1, "ODG_BASICSTAT") + } +}, +{ + Id: 1230 + SpriteName: "GoldenSkull" + Name: "Golden Skull" + Lv: 180 + Hp: 8000 + Sp: 0 + Exp: 8595 + JExp: 857 + AttackRange: 2 + Attack: [85, 410] + Def: 50 + Mdef: 25 + CriticalDef: 0 + Stats: { + Str: 45 + Agi: 25 + Vit: 35 + Int: 30 + Dex: 35 + Luk: 55 + } + ViewRange: 9 + ChaseRange: 10 + Size: 1 + Race: 3 + Element: (1, 1) + Mode: { + CanMove: true + Aggressive: true + Assist: true + CanAttack: true + ChangeTargetMelee: true + ChangeTargetChase: true + } + MoveSpeed: 650 + AttackDelay: 1650 + AttackMotion: 682 + DamageMotion: 490 + MutationCount: 3 + MutationStrength: 30 + Drops: { + GoldenTooth: 50 + GoldenTooth: 50 + GoldenDeliciousApple: 22 + GoldenSkullMask: (1, "ODG_BASICSTAT") + } +}, +{ + Id: 1231 + SpriteName: "Sunshroom" + Name: "Sunshroom" + Lv: 120 + Hp: 650 + Sp: 0 + Exp: 324 + JExp: 55 + AttackRange: 4 + Attack: [90, 110] + Def: 12 + Mdef: 12 + CriticalDef: 0 + Stats: { + Str: 20 + Agi: 22 + Vit: 20 + Int: 15 + Dex: 40 + Luk: 20 + } + ViewRange: 9 + ChaseRange: 10 + Size: 1 + Race: 3 + Element: (2, 1) + Mode: { + CanMove: true + Assist: true + CanAttack: true + ChangeTargetMelee: true + ChangeTargetChase: true + } + MoveSpeed: 700 + AttackDelay: 1500 + AttackMotion: 572 + DamageMotion: 380 + MutationCount: 2 + MutationStrength: 50 + Drops: { + SmallMushroom: 500 + InsectLeg: 500 + SulphurPowder: 400 + Lifestone: 300 + EmptyBottle: 100 + Fungus: 30 + MushroomSpores: 100 + JoyplimScroll: 50 + SunshroomHat: (1, "ODG_BASICSTAT") + } +}, +{ + Id: 1232 + SpriteName: "Snowshroom" + Name: "Snowshroom" + Lv: 120 + Hp: 650 + Sp: 0 + Exp: 324 + JExp: 55 + AttackRange: 4 + Attack: [90, 110] + Def: 12 + Mdef: 12 + CriticalDef: 0 + Stats: { + Str: 20 + Agi: 22 + Vit: 20 + Int: 15 + Dex: 40 + Luk: 20 + } + ViewRange: 9 + ChaseRange: 10 + Size: 1 + Race: 3 + Element: (2, 1) + Mode: { + CanMove: true + Assist: true + CanAttack: true + ChangeTargetMelee: true + ChangeTargetChase: true + } + MoveSpeed: 700 + AttackDelay: 1500 + AttackMotion: 572 + DamageMotion: 380 + MutationCount: 2 + MutationStrength: 50 + Drops: { + SmallMushroom: 500 + InsectLeg: 500 + SulphurPowder: 400 + Lifestone: 300 + EmptyBottle: 100 + Fungus: 30 + MushroomSpores: 100 + JoyplimScroll: 50 + SnowshroomHat: (1, "ODG_BASICSTAT") + } +}, +{ + Id: 1233 + SpriteName: "YellowSuperSlime" + Name: "Yellow Super Slime" + Lv: 125 + Hp: 25000 + Sp: 0 + Exp: 12000 + JExp: 1600 + AttackRange: 3 + Attack: [160, 165] + Def: 44 + Mdef: 28 + CriticalDef: 10 + Stats: { + Str: 50 + Agi: 8 + Vit: 50 + Int: 1 + Dex: 25 + Luk: 70 + } + ViewRange: 9 + ChaseRange: 10 + Size: 1 + Race: 0 + Element: (1, 1) + Mode: { + CanMove: true + Boss: true + CanAttack: true + ChangeTargetMelee: true + ChangeTargetChase: true + } + MoveSpeed: 1600 + AttackDelay: 2000 + AttackMotion: 672 + DamageMotion: 480 + MutationCount: 1 + MutationStrength: 20 + Drops: { + YellowApple: 750 + OrangeCupcake: 200 + CherryCake: 100 + CactusDrink: 350 + CactusPotion: 250 + SharpKnife: 10 + IronOre: 450 + Topaz: 20 + Coal: 450 + YellowHeadSlime: (1, "ODG_BASICSTAT") + } +}, +{ + Id: 1234 + SpriteName: "RedSuperSlime" + Name: "Red Super Slime" + Lv: 130 + Hp: 30000 + Sp: 0 + Exp: 14000 + JExp: 1800 + AttackRange: 3 + Attack: [170, 175] + Def: 55 + Mdef: 38 + CriticalDef: 10 + Stats: { + Str: 60 + Agi: 8 + Vit: 55 + Int: 1 + Dex: 25 + Luk: 75 + } + ViewRange: 9 + ChaseRange: 10 + Size: 1 + Race: 0 + Element: (1, 1) + Mode: { + CanMove: true + Boss: true + CanAttack: true + ChangeTargetMelee: true + ChangeTargetChase: true + } + MoveSpeed: 1500 + AttackDelay: 1700 + AttackMotion: 672 + DamageMotion: 480 + MutationCount: 2 + MutationStrength: 20 + Drops: { + Knife: 300 + ChocolateBar: 110 + Dagger: 200 + Ruby: 20 + MinersHat: (80, "ODG_BASICSTAT") + RedApple: 750 + Boots: (250, "ODG_BASICSTAT") + MinerGloves: (150, "ODG_BASICSTAT") + RedHeadSlime: (1, "ODG_BASICSTAT") + } +}, +{ + Id: 1235 + SpriteName: "GreenSuperSlime" + Name: "Green Super Slime" + Lv: 135 + Hp: 35000 + Sp: 0 + Exp: 16000 + JExp: 2000 + AttackRange: 3 + Attack: [180, 185] + Def: 66 + Mdef: 48 + CriticalDef: 10 + Stats: { + Str: 70 + Agi: 8 + Vit: 60 + Int: 1 + Dex: 25 + Luk: 80 + } + ViewRange: 9 + ChaseRange: 10 + Size: 1 + Race: 0 + Element: (1, 1) + Mode: { + CanMove: true + Boss: true + CanAttack: true + ChangeTargetMelee: true + ChangeTargetChase: true + } + MoveSpeed: 1400 + AttackDelay: 2072 + AttackMotion: 672 + DamageMotion: 480 + MutationCount: 1 + MutationStrength: 20 + Drops: { + CactusPotion: 200 + Emerald: 20 + CactusDrink: 100 + Dagger: 250 + SharpKnife: 200 + CoinBag: 500 + CasinoCoins: 500 + GreenApple: 750 + GreenHeadSlime: (1, "ODG_BASICSTAT") + } +}, +{ + Id: 1236 + SpriteName: "BlueSuperSlime" + Name: "Blue Super Slime" + Lv: 140 + Hp: 40000 + Sp: 0 + Exp: 18000 + JExp: 2200 + AttackRange: 3 + Attack: [190, 195] + Def: 77 + Mdef: 58 + CriticalDef: 10 + Stats: { + Str: 80 + Agi: 8 + Vit: 65 + Int: 1 + Dex: 50 + Luk: 85 + } + ViewRange: 9 + ChaseRange: 10 + Size: 1 + Race: 0 + Element: (1, 3) + Mode: { + CanMove: true + Boss: true + CanAttack: true + ChangeTargetMelee: true + ChangeTargetChase: true + } + MoveSpeed: 1400 + AttackDelay: 2072 + AttackMotion: 672 + DamageMotion: 480 + MutationCount: 1 + MutationStrength: 20 + Drops: { + IceCube: 200 + Sapphire: 20 + CactusDrink: 500 + IcedWater: 700 + SilverMirror: 50 + BookPage: 500 + Snowflake: 100 + BlueHeadSlime: (1, "ODG_BASICSTAT") + } +}, ) diff --git a/world/map/db/mob_db_0_19.txt b/world/map/db/mob_db_0_19.txt index 831426b9..e4287231 100644 --- a/world/map/db/mob_db_0_19.txt +++ b/world/map/db/mob_db_0_19.txt @@ -14,7 +14,7 @@ 1048, Duck, Duck, 14, 1282, 0, 16, 1, 1, 60, 63, 17, 20, 0, 9, 18, 17, 1, 16, 11, 6, 12, 1, 2, 11, 131, 240, 580, 472, 200, 5349, 400, 5365, 550, 562, 500, 4023, 250, 5354, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1050, HouseMaggot, HouseMaggot, 5, 50, 0, 7, 3, 1, 5, 7, 0, 3, 0, 5, 5, 1, 0, 6, 5, 9, 10, 1, 3, 11, 133, 700, 1872, 672, 480, 505, 800, 501, 150, 518, 400, 533, 150, 502, 70, 522, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1056, CaveMaggot, CaveMaggot, 10, 100, 0, 16, 3, 1, 10, 10, 0, 5, 0, 5, 5, 1, 0, 6, 5, 9, 10, 1, 3, 11, 133, 700, 1872, 672, 480, 505, 800, 501, 150, 518, 400, 533, 150, 502, 70, 522, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1063, Pumpkin, Pumpkin, 1, 200, 0, 17, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 9, 10, 1, 3, 12, 0, 800, 800, 672, 480, 3000, 100, 3001, 20, 5354, 20, 3002, 10, 3003, 15, 3011, 500, 3006, 1500, 3007, 2000, 3010, 2500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1063, Pumpkin, Pumpkin, 1, 200, 0, 17, 1, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 9, 10, 1, 3, 12, 0, 800, 800, 672, 480, 3000, 100, 5354, 20, 3002, 10, 3003, 15, 3011, 500, 3006, 1500, 3007, 2000, 3010, 2500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1082, Serqet, Serqet, 10, 100, 0, 12, 2, 1, 10, 15, 0, 5, 0, 1, 1, 1, 0, 15, 5, 9, 10, 1, 3, 10, 129, 2000, 1872, 672, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1092, SlimeBlast, SlimeBlast, 10, 100, 0, 20, 8, 1, 10, 10, 10, 10, 0, 10, 10, 10, 10, 10, 10, 9, 10, 1, 0, 31, 143, 250, 1872, 672, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20 1095, WhiteBell, WhiteBell, 10, 100, 0, 25, 40, 2, 70, 75, 0, 5, 0, 16, 12, 20, 20, 20, 50, 2, 10, 1, 3, 12, 128, 800, 800, 672, 480, 535, 100, 540, 10, 526, 400, 5260, 600, 861, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 50 @@ -53,3 +53,5 @@ 1221, SmallRubyBif, SmallRubyBif, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 1, 3, 12, 0, 800, 800, 672, 480, 4003, 10, 824, 600, 819, 600, 821, 600, 820, 1200, 822, 600, 823, 600, 4001, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1222, SmallSapphireBif, SmallSapphireBif, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 1, 3, 12, 0, 800, 800, 672, 480, 4005, 10, 824, 600, 819, 600, 821, 600, 820, 600, 822, 1200, 823, 600, 4001, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1223, SmallTopazBif, SmallTopazBif, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 1, 3, 12, 0, 800, 800, 672, 480, 4006, 10, 824, 600, 819, 600, 821, 600, 820, 600, 822, 600, 823, 1200, 4001, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1227, Grass, Grass, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 1, 3, 12, 0, 800, 800, 672, 480, 5387, 5000, 807, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1228, Spelt, Spelt, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 1, 3, 12, 0, 800, 800, 672, 480, 5388, 5000, 5389, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 diff --git a/world/map/db/mob_db_20_39.txt b/world/map/db/mob_db_20_39.txt index 1cc401e8..40e5d23e 100644 --- a/world/map/db/mob_db_20_39.txt +++ b/world/map/db/mob_db_20_39.txt @@ -3,11 +3,11 @@ //Edit mob_db.conf instead! //ID, Name, Jname, LV, HP, SP, EXP, JEXP, Range1, ATK1, ATK2, DEF, MDEF, CRITDEF,STR, AGI, VIT, INT, DEX, LUK, Range2, Range3, Scale, Race, Element,Mode, Speed, Adelay, Amotion,Dmotion,Drop0id,Drop0%, Drop1id,Drop1%, Drop2id,Drop2%, Drop3id,Drop3%, Drop4id,Drop4%, Drop5id,Drop5%, Drop6id,Drop6%, Drop7id,Drop7%, Drop8id,Drop8%, Drop9id,Drop9%, Item1, Item2, MEXP, ExpPer, MVP1id, MVP1per,MVP2id, MVP2per,MVP3id, MVP3per,mutationcount,mutationstrength 1011, FireGoblin, FireGoblin, 20, 220, 0, 41, 4, 1, 15, 20, 0, 5, 0, 1, 1, 1, 0, 6, 30, 9, 10, 1, 3, 13, 129, 800, 1872, 672, 480, 505, 800, 501, 150, 518, 800, 502, 150, 521, 70, 522, 10, 701, 500, 703, 250, 5318, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 -1017, Bat, Bat, 20, 150, 0, 27, 3, 1, 5, 25, 0, 5, 0, 1, 1, 1, 0, 20, 25, 9, 10, 1, 3, 12, 129, 800, 1872, 672, 480, 505, 800, 501, 150, 518, 400, 533, 150, 521, 70, 522, 1, 753, 3000, 754, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40 +1017, Bat, Bat, 20, 150, 0, 27, 3, 1, 5, 25, 0, 5, 0, 1, 1, 1, 0, 20, 25, 9, 10, 1, 3, 12, 129, 800, 1872, 672, 480, 505, 800, 501, 150, 518, 400, 533, 150, 753, 3000, 754, 2000, 3001, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40 1018, Pinkie, Pinkie, 30, 300, 0, 60, 7, 2, 15, 20, 0, 5, 0, 1, 1, 1, 0, 20, 25, 2, 10, 1, 3, 10, 129, 800, 1872, 672, 480, 614, 1000, 751, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 50 1019, SpikyMushroom, SpikyMushroom, 30, 300, 0, 54, 5, 1, 10, 13, 0, 5, 0, 1, 1, 1, 0, 10, 10, 9, 10, 1, 3, 10, 129, 800, 1872, 672, 480, 567, 800, 501, 150, 518, 50, 613, 400, 5334, 30, 5360, 100, 630, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40 1020, Fluffy, Fluffy, 30, 500, 0, 100, 7, 1, 6, 10, 1, 5, 0, 1, 2, 1, 0, 20, 25, 9, 10, 1, 3, 10, 129, 800, 1600, 672, 480, 611, 800, 527, 150, 535, 400, 752, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40 -1021, CaveSnake, CaveSnake, 30, 800, 0, 157, 13, 1, 20, 15, 1, 5, 0, 10, 1, 1, 0, 5, 20, 9, 10, 1, 3, 10, 129, 800, 1872, 672, 480, 612, 1000, 610, 40, 713, 500, 717, 400, 717, 400, 641, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 50 +1021, CaveSnake, CaveSnake, 30, 800, 0, 157, 13, 1, 20, 15, 1, 5, 0, 10, 1, 1, 0, 5, 20, 9, 10, 1, 3, 10, 129, 800, 1872, 672, 480, 612, 1500, 610, 40, 713, 500, 717, 400, 717, 400, 641, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 50 1025, LogHead, LogHead, 30, 500, 0, 150, 5, 1, 10, 20, 50, 5, 0, 1, 1, 1, 0, 20, 25, 9, 10, 1, 3, 12, 129, 800, 1872, 672, 480, 569, 2000, 740, 2500, 743, 3000, 569, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 50 1027, EasterFluffy, EasterFluffy, 30, 500, 0, 100, 7, 1, 10, 12, 0, 5, 0, 1, 1, 1, 0, 20, 25, 9, 10, 1, 3, 10, 129, 800, 1872, 672, 480, 1208, 2000, 1209, 2000, 1210, 2000, 1211, 1000, 1212, 1000, 1213, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40 1035, Silkworm, Silkworm, 20, 1, 0, 1, 1, 1, 0, 0, 2, 10, 0, 20, 11, 10, 10, 40, 10, 9, 10, 1, 0, 10, 129, 1300, 1100, 672, 480, 718, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40 diff --git a/world/map/db/mob_db_60_79.txt b/world/map/db/mob_db_60_79.txt index 687629a9..5cb2402b 100644 --- a/world/map/db/mob_db_60_79.txt +++ b/world/map/db/mob_db_60_79.txt @@ -11,6 +11,6 @@ 1101, DemonicSpirit, DemonicSpirit, 72, 1505, 0, 860, 270, 1, 125, 175, 4, 6, 0, 20, 40, 10, 10, 110, 45, 9, 10, 1, 1, 47, 133, 230, 900, 672, 480, 631, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1110, AngryGreenSlime, AngryGreenSlime, 60, 1000, 0, 435, 135, 1, 100, 160, 20, 30, 0, 20, 30, 10, 10, 30, 30, 9, 10, 1, 0, 11, 143, 1200, 1872, 672, 480, 502, 200, 4004, 20, 501, 100, 521, 250, 522, 200, 526, 500, 503, 500, 719, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20 1117, UndeadTroll, UndeadTroll, 75, 3100, 0, 1770, 179, 3, 60, 140, 20, 10, 0, 50, 40, 20, 10, 40, 49, 9, 10, 1, 0, 10, 133, 650, 1500, 672, 480, 1199, 2000, 631, 1000, 529, 500, 539, 300, 526, 250, 4023, 200, 906, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40 -1163, FridayCat, FridayCat, 70, 450, 0, 130, 17, 1, 40, 45, 2, 7, 0, 12, 8, 2, 1, 25, 1, 9, 10, 1, 0, 11, 131, 1300, 1500, 672, 480, 3001, 10, 5354, 10, 3002, 5, 3003, 9, 3011, 250, 3006, 750, 3007, 1000, 3010, 1250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 20 +1163, FridayCat, FridayCat, 70, 450, 0, 130, 17, 1, 40, 45, 2, 7, 0, 12, 8, 2, 1, 25, 1, 9, 10, 1, 0, 11, 131, 1300, 1500, 672, 480, 5354, 10, 3002, 5, 3003, 9, 3011, 250, 3006, 750, 3007, 1000, 3010, 1250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 20 1187, EliteDuck, EliteDuck, 75, 14000, 0, 8800, 860, 2, 170, 195, 50, 80, 0, 70, 120, 10, 42, 48, 95, 5, 12, 1, 2, 13, 167, 225, 500, 472, 200, 5349, 1000, 5365, 1100, 562, 1000, 562, 500, 4023, 500, 5354, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40 1195, Brainblow, Brainblow, 77, 200, 0, 100, 50, 1, 10, 10, 0, 0, 0, 1, 7, 1, 1, 123, 123, 9, 10, 1, 0, 27, 133, 77, 500, 672, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 diff --git a/world/map/db/mob_db_80_99.txt b/world/map/db/mob_db_80_99.txt index 8f7c3b4c..a98c68ee 100644 --- a/world/map/db/mob_db_80_99.txt +++ b/world/map/db/mob_db_80_99.txt @@ -9,14 +9,14 @@ 1044, LadySkeleton, LadySkeleton, 90, 5500, 0, 4120, 957, 1, 73, 146, 31, 8, 0, 20, 25, 15, 8, 43, 48, 9, 10, 1, 1, 17, 143, 650, 750, 672, 700, 775, 200, 775, 280, 776, 300, 631, 1000, 778, 250, 5297, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1047, Poltergeist, Poltergeist, 90, 9000, 0, 4230, 1306, 3, 110, 150, 0, 15, 0, 35, 0, 15, 15, 75, 50, 9, 10, 1, 0, 17, 137, 330, 740, 672, 400, 774, 1000, 703, 600, 703, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 20 1059, GCMaggot, GCMaggot, 90, 2000, 0, 685, 102, 2, 60, 80, 2, 7, 0, 10, 10, 2, 1, 22, 1, 2, 10, 1, 0, 21, 133, 1000, 1872, 672, 480, 727, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 25 -1066, VampireBat, VampireBat, 80, 800, 0, 245, 9, 1, 55, 150, 10, 8, 0, 8, 8, 1, 4, 20, 4, 6, 10, 1, 3, 12, 129, 800, 1872, 672, 480, 501, 150, 518, 400, 533, 150, 521, 70, 522, 1, 5115, 3000, 754, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 +1066, VampireBat, VampireBat, 80, 800, 0, 245, 9, 1, 55, 150, 10, 8, 0, 8, 8, 1, 4, 20, 4, 6, 10, 1, 3, 12, 129, 800, 1872, 672, 480, 501, 150, 518, 400, 533, 150, 5115, 3000, 754, 2000, 3001, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1069, FlyingScythe, FlyingScythe, 80, 3000, 0, 7042, 617, 1, 200, 350, 30, 10, 0, 100, 250, 1, 1, 150, 90, 9, 10, 1, 0, 20, 133, 220, 700, 672, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1070, BallLightning, BallLightning, 80, 300, 0, 201, 1, 1, 5, 10, 40, 50, 0, 1, 200, 1, 1, 1, 1, 9, 10, 1, 0, 27, 133, 110, 1500, 672, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1073, TheLost, TheLost, 83, 5000, 0, 8750, 2840, 5, 125, 150, 10, 60, 0, 5, 40, 10, 70, 70, 40, 4, 10, 1, 1, 37, 173, 500, 2000, 672, 300, 5110, 500, 5110, 500, 631, 500, 778, 800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1074, RedBone, RedBone, 90, 8000, 0, 9750, 3434, 2, 100, 330, 24, 30, 0, 35, 25, 3, 50, 80, 75, 2, 10, 1, 1, 17, 175, 340, 1800, 672, 950, 775, 75, 775, 115, 776, 135, 631, 4, 778, 250, 5297, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 20 1077, DrunkenSkeleton, DrunkenSkeleton, 90, 7200, 0, 4825, 530, 1, 55, 284, 30, 10, 0, 35, 10, 3, 8, 71, 65, 9, 10, 1, 1, 17, 137, 350, 1800, 672, 950, 790, 300, 789, 280, 3003, 100, 3000, 50, 3009, 250, 3006, 400, 778, 250, 5297, 40, 627, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1078, TipsySkeleton, TipsySkeleton, 90, 7000, 0, 4950, 493, 1, 60, 284, 33, 10, 0, 35, 10, 3, 8, 71, 65, 9, 10, 1, 1, 17, 137, 350, 1800, 672, 950, 787, 300, 788, 280, 3002, 100, 3000, 50, 3007, 400, 3010, 250, 778, 250, 5297, 40, 4030, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 -1079, DrunkenLadySkeleton, DrunkenLadySkeleton, 90, 6000, 0, 4565, 389, 1, 75, 146, 40, 8, 0, 20, 20, 15, 8, 51, 48, 9, 10, 1, 1, 17, 137, 660, 750, 672, 700, 785, 300, 786, 280, 3001, 100, 3000, 50, 3010, 250, 3009, 250, 778, 250, 5297, 40, 1247, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 +1079, DrunkenLadySkeleton, DrunkenLadySkeleton, 90, 6000, 0, 4565, 389, 1, 75, 146, 40, 8, 0, 20, 20, 15, 8, 51, 48, 9, 10, 1, 1, 17, 137, 660, 750, 672, 700, 785, 300, 786, 280, 3000, 50, 3010, 250, 3009, 250, 778, 250, 5297, 40, 1247, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1097, SoulEater, SoulEater, 90, 6800, 0, 4150, 1746, 1, 129, 354, 12, 10, 0, 35, 18, 3, 8, 71, 65, 9, 10, 1, 1, 17, 143, 340, 1800, 672, 950, 778, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1103, WitchGuard, WitchGuard, 84, 9742, 0, 9525, 1060, 2, 200, 220, 25, 30, 0, 90, 65, 45, 5, 120, 69, 9, 10, 1, 1, 47, 133, 290, 1200, 672, 30, 631, 2000, 631, 500, 778, 250, 5141, 50, 5142, 50, 5143, 50, 5144, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40 1104, DemonicMouboo, DemonicMouboo, 85, 800, 0, 290, 32, 2, 40, 70, 35, 15, 0, 15, 5, 15, 0, 40, 10, 2, 10, 1, 3, 10, 133, 600, 1872, 672, 480, 703, 3000, 660, 1000, 660, 500, 4004, 50, 806, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 30 diff --git a/world/map/db/mob_db_over_100.txt b/world/map/db/mob_db_over_100.txt index b65e3800..443361a6 100644 --- a/world/map/db/mob_db_over_100.txt +++ b/world/map/db/mob_db_over_100.txt @@ -8,37 +8,37 @@ 1013, EvilMushroom, EvilMushroom, 110, 650, 0, 233, 35, 1, 65, 80, 4, 6, 0, 16, 12, 10, 10, 35, 10, 9, 10, 1, 3, 12, 137, 800, 1800, 672, 480, 535, 500, 540, 10, 534, 100, 526, 400, 566, 1000, 566, 1000, 5334, 30, 5360, 100, 629, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 60 1014, PinkFlower, PinkFlower, 115, 700, 0, 296, 40, 2, 70, 75, 0, 5, 0, 16, 12, 20, 20, 20, 50, 2, 10, 1, 3, 12, 128, 800, 800, 672, 480, 535, 100, 540, 10, 1199, 100, 526, 400, 565, 1000, 565, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 50 1015, SantaSlime, SantaSlime, 120, 750, 0, 298, 58, 1, 75, 80, 2, 7, 0, 1, 20, 1, 0, 30, 30, 9, 10, 1, 0, 11, 129, 1500, 1872, 672, 480, 512, 800, 513, 700, 514, 600, 519, 500, 527, 400, 538, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 10 -1026, MountainSnake, MountainSnake, 130, 900, 0, 1024, 63, 1, 80, 125, 4, 6, 0, 20, 40, 10, 10, 35, 45, 9, 10, 1, 0, 10, 133, 1000, 1500, 672, 480, 532, 20, 641, 350, 715, 400, 715, 400, 711, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 30 +1026, MountainSnake, MountainSnake, 130, 900, 0, 1024, 63, 1, 80, 125, 4, 6, 0, 20, 40, 10, 10, 35, 45, 9, 10, 1, 0, 10, 133, 1000, 1500, 672, 480, 641, 350, 715, 400, 715, 400, 711, 500, 531, 100, 532, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 30 1034, GrassSnake, GrassSnake, 140, 1000, 0, 1254, 103, 1, 80, 120, 2, 10, 0, 20, 40, 10, 10, 40, 50, 9, 10, 1, 0, 10, 133, 500, 1100, 672, 480, 716, 400, 716, 400, 712, 500, 676, 500, 660, 1600, 641, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 40 1036, Zombie, Zombie, 110, 12000, 0, 7782, 1393, 2, 275, 355, 20, 14, 0, 30, 15, 30, 3, 60, 40, 9, 10, 1, 1, 17, 133, 480, 1872, 672, 900, 631, 1000, 777, 700, 778, 500, 779, 200, 780, 150, 1198, 500, 5297, 10, 3004, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1042, Spectre, Spectre, 140, 6500, 0, 3978, 359, 3, 160, 220, 40, 0, 0, 35, 70, 22, 15, 20, 70, 9, 10, 1, 1, 27, 137, 650, 1700, 800, 500, 773, 1000, 703, 600, 703, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 20 -1045, Fallen, Fallen, 120, 10000, 0, 7812, 1663, 2, 180, 430, 5, 18, 0, 40, 3, 25, 5, 80, 45, 9, 10, 1, 1, 27, 133, 300, 1200, 672, 300, 775, 210, 775, 210, 776, 300, 631, 1000, 636, 3, 658, 2, 532, 35, 778, 500, 1198, 500, 5297, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 50 +1045, Fallen, Fallen, 120, 10000, 0, 7812, 1663, 2, 180, 430, 5, 18, 0, 40, 3, 25, 5, 80, 45, 9, 10, 1, 1, 27, 133, 300, 1200, 672, 300, 775, 210, 775, 210, 776, 300, 631, 1000, 636, 1, 658, 1, 532, 5, 778, 500, 1198, 500, 5297, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 50 1062, Terranite, Terranite, 110, 6000, 0, 4851, 889, 1, 200, 300, 20, 35, 0, 60, 40, 40, 30, 60, 40, 9, 10, 1, 1, 17, 133, 400, 872, 672, 900, 4001, 600, 4004, 20, 4005, 20, 4007, 20, 763, 500, 640, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1067, Reaper2, Reaper2, 140, 40000, 0, 64128, 156, 7, 200, 350, 30, 50, 0, 100, 120, 70, 120, 100, 75, 9, 10, 1, 1, 47, 165, 500, 1200, 800, 300, 777, 1000, 775, 500, 776, 100, 1221, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1068, Reaper, Reaper, 140, 40000, 0, 64128, 156, 7, 200, 350, 30, 70, 0, 100, 120, 70, 120, 100, 75, 9, 10, 1, 1, 47, 165, 500, 1200, 800, 300, 777, 1000, 775, 500, 776, 100, 1221, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1071, IceElement, IceElement, 100, 5000, 0, 2897, 689, 3, 60, 200, 5, 20, 0, 15, 25, 40, 15, 45, 30, 9, 10, 1, 0, 21, 135, 330, 740, 672, 400, 4026, 900, 537, 750, 568, 400, 543, 900, 544, 250, 5361, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 20 1072, Yeti, Yeti, 100, 8500, 0, 9040, 726, 2, 100, 400, 60, 15, 0, 60, 5, 45, 15, 60, 32, 9, 10, 1, 0, 31, 135, 220, 1200, 672, 900, 4023, 700, 4024, 300, 4025, 400, 4027, 142, 4021, 800, 4022, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 -1075, Stalker, Stalker, 120, 20000, 0, 15628, 4000, 2, 220, 500, 23, 30, 0, 35, 15, 3, 50, 50, 50, 2, 10, 1, 1, 17, 175, 340, 1800, 672, 950, 775, 75, 775, 115, 776, 135, 631, 40, 778, 500, 1198, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 20 +1075, Stalker, Stalker, 120, 20000, 0, 15628, 4000, 2, 220, 500, 23, 30, 0, 35, 15, 3, 50, 50, 50, 2, 10, 1, 1, 17, 175, 340, 1800, 672, 950, 775, 75, 775, 115, 776, 135, 631, 40, 778, 500, 1198, 500, 5116, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 20 1096, SoulSnake, SoulSnake, 115, 850, 0, 325, 56, 1, 75, 90, 4, 6, 0, 20, 11, 10, 10, 35, 10, 9, 10, 1, 0, 10, 137, 900, 1300, 672, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1102, Luvia, Luvia, 127, 48044, 60, 315973, 12172, 5, 339, 364, 50, 92, 0, 1, 29, 55, 255, 255, 255, 31, 10, 1, 1, 37, 181, 220, 1200, 672, 50, 5141, 10, 5142, 10, 5143, 10, 5144, 10, 5145, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1106, WickedMushroom, WickedMushroom, 110, 550, 0, 220, 30, 1, 70, 80, 4, 4, 0, 16, 12, 10, 10, 35, 10, 9, 10, 1, 3, 12, 133, 800, 1800, 672, 480, 613, 600, 4007, 50, 567, 100, 566, 1000, 5334, 30, 5360, 100, 5145, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 60 +1106, WickedMushroom, WickedMushroom, 110, 550, 0, 220, 30, 1, 70, 80, 4, 4, 0, 16, 12, 10, 10, 35, 10, 9, 10, 1, 3, 12, 133, 800, 1800, 672, 480, 613, 600, 4007, 50, 567, 100, 566, 1000, 5334, 30, 5360, 100, 5145, 40, 5397, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 60 //ID, Name, Jname, LV, HP, SP, EXP, JEXP, Range1, ATK1, ATK2, DEF, MDEF, CRITDEF,STR, AGI, VIT, INT, DEX, LUK, Range2, Range3, Scale, Race, Element,Mode, Speed, Adelay, Amotion,Dmotion,Drop0id,Drop0%, Drop1id,Drop1%, Drop2id,Drop2%, Drop3id,Drop3%, Drop4id,Drop4%, Drop5id,Drop5%, Drop6id,Drop6%, Drop7id,Drop7%, Drop8id,Drop8%, Drop9id,Drop9%, Item1, Item2, MEXP, ExpPer, MVP1id, MVP1per,MVP2id, MVP2per,MVP3id, MVP3per,mutationcount,mutationstrength 1114, Nutcracker, Nutcracker, 110, 6000, 0, 4226, 769, 1, 81, 281, 20, 37, 0, 40, 20, 10, 5, 60, 40, 9, 10, 1, 1, 17, 133, 400, 872, 672, 900, 569, 1000, 660, 750, 539, 750, 503, 250, 640, 200, 4004, 200, 4001, 600, 1190, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1123, DreadPirateMarleyClone, DreadPirateMarleyClone, 150, 2000, 0, 1652, 0, 6, 175, 250, 18, 22, 0, 10, 40, 30, 20, 80, 40, 9, 10, 1, 0, 10, 175, 500, 1200, 672, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1126, PsiBrain, PsiBrain, 100, 10000, 0, 7255, 4000, 2, 220, 500, 23, 30, 0, 35, 15, 3, 50, 50, 50, 2, 10, 1, 1, 17, 175, 340, 1800, 672, 950, 775, 75, 775, 115, 776, 135, 631, 40, 5111, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 20 1127, GeneralKrukan, GeneralKrukan, 140, 40000, 0, 27536, 1663, 2, 180, 430, 5, 20, 0, 40, 3, 25, 5, 80, 45, 9, 10, 1, 1, 27, 165, 300, 1200, 672, 300, 775, 1000, 776, 1000, 631, 1000, 5128, 5, 636, 6, 637, 25, 638, 50, 639, 8, 778, 500, 1198, 500, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 6, 50 -1128, GeneralRazha, GeneralRazha, 140, 40000, 0, 27536, 1663, 2, 180, 430, 5, 20, 0, 40, 3, 25, 5, 80, 45, 9, 10, 1, 1, 27, 165, 300, 1200, 672, 300, 775, 210, 5129, 5, 776, 300, 631, 1000, 636, 3, 658, 2, 532, 35, 778, 500, 1198, 500, 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 4, 50 -1129, GeneralTerogan, GeneralTerogan, 140, 40000, 0, 27536, 1663, 2, 180, 430, 5, 20, 0, 40, 3, 25, 5, 80, 45, 9, 10, 1, 1, 27, 165, 300, 1200, 672, 300, 775, 210, 5130, 5, 776, 300, 631, 1000, 636, 3, 658, 2, 532, 35, 778, 500, 1198, 500, 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 4, 50 +1128, GeneralRazha, GeneralRazha, 140, 40000, 0, 27536, 1663, 2, 180, 430, 5, 20, 0, 40, 3, 25, 5, 80, 45, 9, 10, 1, 1, 27, 165, 300, 1200, 672, 300, 775, 210, 5129, 5, 776, 300, 631, 1000, 636, 1, 658, 1, 532, 5, 778, 500, 1198, 500, 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 4, 50 +1129, GeneralTerogan, GeneralTerogan, 140, 40000, 0, 27536, 1663, 2, 180, 430, 5, 20, 0, 40, 3, 25, 5, 80, 45, 9, 10, 1, 1, 27, 165, 300, 1200, 672, 300, 775, 210, 5130, 5, 776, 300, 631, 1000, 636, 1, 658, 1, 532, 5, 778, 500, 1198, 500, 0, 0, 0, 0, 1198, 0, 0, 0, 0, 0, 0, 0, 4, 50 1130, Moonshroom, Moonshroom, 110, 550, 0, 224, 35, 4, 70, 80, 4, 4, 0, 16, 12, 10, 10, 35, 10, 9, 10, 1, 3, 12, 133, 800, 1800, 672, 480, 566, 500, 518, 500, 703, 400, 730, 300, 540, 100, 5334, 30, 5360, 100, 5145, 50, 5203, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 60 1132, LavaSlime, LavaSlime, 135, 4144, 0, 6000, 1111, 2, 105, 260, 75, 80, 0, 30, 15, 35, 10, 70, 250, 9, 10, 1, 0, 23, 135, 900, 1300, 672, 100, 904, 10000, 703, 5000, 703, 5000, 640, 1000, 701, 1000, 4001, 1000, 5318, 200, 5318, 100, 825, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 40 1133, Anne, Anne, 110, 12000, 0, 1100, 889, 1, 200, 300, 20, 35, 0, 60, 40, 40, 30, 60, 40, 9, 10, 1, 1, 17, 133, 380, 872, 672, 900, 838, 6000, 839, 6000, 840, 6000, 1229, 200, 1230, 500, 1231, 500, 1232, 500, 1281, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1151, VoidFlower, VoidFlower, 115, 7000, 0, 1068, 40, 12, 400, 420, 0, 5, 0, 16, 12, 20, 20, 255, 50, 12, 10, 1, 3, 12, 128, 800, 2000, 672, 180, 535, 100, 540, 10, 1199, 100, 526, 400, 565, 1000, 565, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1152, VoidArchant, VoidArchant, 130, 6000, 0, 1598, 14, 1, 140, 180, 36, 6, 0, 10, 5, 1, 0, 12, 10, 9, 10, 1, 0, 12, 133, 800, 1500, 672, 200, 537, 300, 535, 100, 640, 40, 4001, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40 1153, VoidSlime, VoidSlime, 135, 4144, 0, 6000, 70, 2, 105, 160, 75, 40, 0, 30, 15, 35, 10, 70, 250, 9, 10, 1, 0, 23, 135, 1100, 1500, 672, 200, 904, 10000, 703, 5000, 703, 5000, 640, 1000, 701, 1000, 4001, 1000, 825, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1154, VoidSnake, VoidSnake, 130, 2000, 0, 541, 63, 1, 80, 120, 4, 6, 0, 20, 40, 10, 10, 35, 45, 9, 10, 1, 0, 10, 133, 320, 1500, 672, 200, 532, 20, 641, 350, 715, 400, 715, 400, 711, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 30 -1155, VoidBat, VoidBat, 100, 400, 0, 81, 3, 1, 10, 25, 0, 5, 0, 1, 1, 1, 0, 20, 25, 9, 10, 1, 3, 12, 133, 200, 1872, 672, 480, 505, 800, 501, 150, 518, 400, 533, 150, 521, 70, 522, 1, 753, 3000, 754, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40 +1154, VoidSnake, VoidSnake, 130, 2000, 0, 541, 63, 1, 80, 120, 4, 6, 0, 20, 40, 10, 10, 35, 45, 9, 10, 1, 0, 10, 133, 320, 1500, 672, 200, 641, 350, 715, 400, 715, 400, 711, 500, 531, 100, 532, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 30 +1155, VoidBat, VoidBat, 100, 400, 0, 81, 3, 1, 10, 25, 0, 5, 0, 1, 1, 1, 0, 20, 25, 9, 10, 1, 3, 12, 133, 200, 1872, 672, 480, 505, 800, 501, 150, 518, 400, 533, 150, 753, 3000, 754, 2000, 3001, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40 1156, VoidMaggot, VoidMaggot, 100, 400, 0, 74, 1, 1, 10, 25, 0, 5, 0, 1, 1, 1, 0, 20, 25, 9, 10, 1, 3, 11, 133, 800, 1872, 672, 480, 505, 800, 501, 150, 518, 400, 533, 150, 502, 70, 522, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1157, VoidSoldier, VoidSoldier, 120, 8000, 0, 1957, 663, 7, 20, 30, 5, 20, 0, 40, 3, 25, 5, 80, 45, 9, 10, 1, 1, 27, 133, 500, 1600, 672, 300, 779, 210, 780, 210, 698, 200, 631, 1000, 636, 3, 658, 2, 532, 35, 778, 500, 1198, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 40 +1157, VoidSoldier, VoidSoldier, 120, 8000, 0, 1957, 663, 7, 20, 30, 5, 20, 0, 40, 3, 25, 5, 80, 45, 9, 10, 1, 1, 27, 133, 500, 1600, 672, 300, 779, 210, 780, 210, 698, 200, 631, 1000, 636, 1, 658, 1, 532, 5, 778, 500, 1198, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 40 1158, VoidMouboo, VoidMouboo, 100, 5000, 0, 1338, 16, 2, 50, 65, 60, 5, 0, 15, 5, 15, 0, 40, 10, 2, 10, 1, 3, 10, 129, 600, 1872, 672, 480, 660, 1000, 660, 500, 541, 750, 660, 50, 806, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 30 1159, VoidScorpion, VoidScorpion, 110, 6000, 0, 1327, 37, 1, 60, 90, 4, 6, 0, 16, 30, 10, 10, 35, 10, 9, 10, 1, 0, 10, 133, 700, 1700, 672, 480, 523, 150, 509, 100, 518, 800, 709, 800, 5369, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1160, VoidShroom, VoidShroom, 110, 5500, 0, 1223, 30, 3, 70, 80, 4, 4, 0, 16, 12, 10, 10, 35, 10, 9, 10, 1, 3, 12, 133, 550, 1700, 672, 480, 613, 600, 4007, 50, 567, 100, 566, 1000, 5334, 30, 5360, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -47,7 +47,7 @@ 1167, SnowmanBoss, SnowmanBoss, 100, 35000, 0, 88970, 2689, 4, 220, 240, 77, 50, 0, 45, 20, 110, 150, 255, 110, 14, 16, 1, 3, 10, 165, 700, 1672, 672, 480, 567, 1600, 5310, 1600, 568, 1600, 4002, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1169, CrystalSpider, CrystalSpider, 140, 1000, 0, 800, 200, 1, 80, 95, 8, 12, 0, 20, 15, 20, 11, 45, 30, 1, 1, 1, 0, 22, 139, 1000, 1500, 672, 480, 537, 500, 5384, 100, 638, 20, 526, 200, 4002, 20, 4003, 20, 4004, 20, 4005, 20, 4006, 20, 4007, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40 1173, MontBlanc, MontBlanc, 110, 30000, 0, 100300, 500, 12, 777, 1000, 70, 90, 90, 30, 1, 100, 1, 120, 120, 12, 12, 1, 3, 12, 164, 0, 4000, 672, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -1174, Emo, Emo, 129, 50150, 80, 150000, 1000, 2, 250, 450, 30, 60, 60, 80, 60, 100, 60, 110, 110, 40, 30, 1, 1, 21, 183, 250, 450, 672, 50, 528, 5000, 532, 200, 5294, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1174, Emo, Emo, 129, 50150, 80, 150000, 1000, 2, 250, 450, 30, 60, 60, 80, 60, 100, 60, 110, 110, 40, 30, 1, 1, 21, 183, 250, 450, 672, 50, 528, 5000, 532, 200, 5294, 500, 591, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1175, MegaManaBug, MegaManaBug, 111, 675, 0, 275, 40, 1, 60, 85, 3, 8, 0, 16, 14, 15, 20, 30, 30, 9, 10, 1, 4, 12, 137, 800, 1800, 672, 480, 505, 1000, 518, 800, 533, 400, 540, 10, 526, 400, 5309, 1000, 5309, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 60 1176, Rotter, Rotter, 130, 6000, 0, 5533, 733, 4, 333, 555, 20, 25, 50, 30, 15, 30, 1, 130, 130, 7, 11, 1, 1, 17, 141, 1200, 2222, 672, 900, 631, 1000, 777, 800, 778, 200, 779, 500, 1198, 500, 5297, 10, 3004, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1177, Rot, Rot, 100, 13, 0, 11, 1, 1, 111, 333, 0, 0, 0, 0, 0, 0, 0, 255, 33, 1, 1, 1, 0, 11, 132, 0, 500, 672, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -60,3 +60,10 @@ 1196, RickLime, RickLime, 120, 54321, 0, 100001, 777, 7, 123, 321, 33, 55, 44, 30, 99, 80, 33, 123, 123, 9, 10, 1, 1, 37, 133, 120, 800, 672, 200, 526, 500, 526, 500, 526, 1000, 526, 2000, 742, 5, 742, 5, 5280, 10, 909, 5, 910, 5, 5297, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1197, Blanc1, Blanc1, 150, 55055, 0, 300000, 3000, 10, 600, 800, 50, 70, 60, 30, 99, 80, 33, 133, 133, 10, 10, 1, 1, 37, 135, 200, 500, 672, 200, 526, 10000, 526, 500, 526, 500, 5294, 750, 5294, 750, 503, 250, 503, 250, 5287, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1198, Blanc2, Blanc2, 150, 33033, 0, 200000, 2000, 2, 250, 350, 50, 70, 60, 30, 99, 80, 33, 133, 133, 6, 6, 1, 1, 37, 135, 200, 300, 672, 200, 526, 10000, 526, 500, 526, 500, 5294, 750, 5294, 750, 503, 250, 503, 250, 5287, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1231, Sunshroom, Sunshroom, 120, 650, 0, 324, 55, 4, 90, 110, 12, 12, 0, 20, 22, 20, 15, 40, 20, 9, 10, 1, 3, 12, 137, 700, 1500, 572, 380, 566, 500, 518, 500, 703, 400, 730, 300, 540, 100, 5334, 30, 5360, 100, 5145, 50, 5392, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 50 +1232, Snowshroom, Snowshroom, 120, 650, 0, 324, 55, 4, 90, 110, 12, 12, 0, 20, 22, 20, 15, 40, 20, 9, 10, 1, 3, 12, 137, 700, 1500, 572, 380, 566, 500, 518, 500, 703, 400, 730, 300, 540, 100, 5334, 30, 5360, 100, 5145, 50, 5396, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 50 +1233, YellowSuperSlime, YellowSuperSlime, 125, 25000, 0, 12000, 1600, 3, 160, 165, 44, 28, 10, 50, 8, 50, 1, 25, 70, 9, 10, 1, 0, 11, 161, 1600, 2000, 672, 480, 5331, 750, 534, 200, 519, 100, 501, 350, 502, 250, 522, 10, 640, 450, 4006, 20, 4001, 450, 5401, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20 +1234, RedSuperSlime, RedSuperSlime, 130, 30000, 0, 14000, 1800, 3, 170, 175, 55, 38, 10, 60, 8, 55, 1, 25, 75, 9, 10, 1, 0, 11, 161, 1500, 1700, 672, 480, 1201, 300, 509, 110, 521, 200, 4003, 20, 525, 80, 535, 750, 528, 250, 531, 150, 5402, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 20 +//ID, Name, Jname, LV, HP, SP, EXP, JEXP, Range1, ATK1, ATK2, DEF, MDEF, CRITDEF,STR, AGI, VIT, INT, DEX, LUK, Range2, Range3, Scale, Race, Element,Mode, Speed, Adelay, Amotion,Dmotion,Drop0id,Drop0%, Drop1id,Drop1%, Drop2id,Drop2%, Drop3id,Drop3%, Drop4id,Drop4%, Drop5id,Drop5%, Drop6id,Drop6%, Drop7id,Drop7%, Drop8id,Drop8%, Drop9id,Drop9%, Item1, Item2, MEXP, ExpPer, MVP1id, MVP1per,MVP2id, MVP2per,MVP3id, MVP3per,mutationcount,mutationstrength +1235, GreenSuperSlime, GreenSuperSlime, 135, 35000, 0, 16000, 2000, 3, 180, 185, 66, 48, 10, 70, 8, 60, 1, 25, 80, 9, 10, 1, 0, 11, 161, 1400, 2072, 672, 480, 502, 200, 4004, 20, 501, 100, 521, 250, 522, 200, 526, 500, 503, 500, 719, 750, 5403, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20 +1236, BlueSuperSlime, BlueSuperSlime, 140, 40000, 0, 18000, 2200, 3, 190, 195, 77, 58, 10, 80, 8, 65, 1, 50, 85, 9, 10, 1, 0, 31, 161, 1400, 2072, 672, 480, 4026, 200, 4005, 20, 501, 500, 862, 700, 863, 50, 864, 500, 5361, 100, 5404, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 20 diff --git a/world/map/db/mob_db_over_150.txt b/world/map/db/mob_db_over_150.txt index 7c7d9c0e..29c2d339 100644 --- a/world/map/db/mob_db_over_150.txt +++ b/world/map/db/mob_db_over_150.txt @@ -5,7 +5,7 @@ 1022, JackO, JackO, 175, 10000, 0, 18130, 1241, 2, 100, 500, 40, 18, 0, 105, 40, 85, 75, 105, 95, 9, 10, 1, 0, 10, 165, 250, 1500, 672, 480, 617, 300, 622, 400, 624, 400, 620, 400, 615, 300, 1203, 400, 1198, 10000, 616, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1023, FireSkull, FireSkull, 170, 5000, 0, 5808, 721, 2, 75, 175, 35, 15, 0, 40, 30, 30, 30, 35, 70, 9, 10, 1, 3, 13, 143, 600, 1600, 672, 480, 701, 5000, 703, 500, 631, 1000, 776, 500, 5297, 10, 1221, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1024, PoisonSkull, PoisonSkull, 170, 5000, 0, 5808, 721, 2, 75, 175, 35, 15, 0, 40, 30, 30, 30, 35, 70, 9, 10, 1, 3, 12, 143, 600, 1600, 672, 480, 631, 1000, 776, 500, 5297, 10, 1221, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 20 -1085, IceSkull, IceSkull, 170, 7000, 0, 7595, 757, 2, 75, 400, 40, 15, 0, 40, 30, 30, 30, 35, 44, 9, 10, 1, 3, 11, 141, 600, 1600, 672, 480, 4026, 5000, 862, 800, 5361, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 +1085, IceSkull, IceSkull, 170, 7000, 0, 7595, 757, 2, 75, 400, 40, 15, 0, 40, 30, 30, 30, 35, 44, 9, 10, 1, 3, 11, 141, 600, 1600, 672, 480, 4026, 5000, 862, 800, 5361, 1000, 5399, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 30 1119, Thug, Thug, 170, 5000, 0, 5491, 999, 1, 125, 250, 30, 6, 0, 10, 10, 60, 10, 50, 70, 9, 10, 1, 0, 10, 143, 500, 1200, 672, 480, 539, 1000, 657, 1000, 703, 1000, 701, 500, 700, 250, 764, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40 1120, Swashbuckler, Swashbuckler, 170, 5000, 0, 5434, 999, 1, 75, 250, 23, 25, 0, 20, 20, 40, 30, 90, 70, 9, 10, 1, 0, 10, 143, 400, 800, 672, 480, 539, 1000, 657, 1000, 703, 1000, 701, 500, 700, 250, 622, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40 1121, Grenadier, Grenadier, 170, 6000, 0, 4332, 999, 6, 100, 200, 8, 50, 0, 12, 10, 50, 60, 90, 70, 9, 10, 1, 0, 10, 143, 500, 2000, 672, 480, 539, 1000, 657, 1000, 701, 500, 704, 250, 700, 250, 617, 100, 765, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 40 @@ -32,3 +32,5 @@ 1183, MobMoubootaur, MobMoubootaur, 220, 99999, 9999, 999999, 99999, 1, 400, 500, 99, 99, 0, 99, 60, 99, 30, 255, 255, 18, 18, 1, 6, 47, 165, 240, 872, 272, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1224, CoalGolem, CoalGolem, 180, 25000, 280, 68000, 2200, 3, 170, 190, 75, 40, 0, 35, 26, 99, 127, 255, 105, 31, 30, 1, 0, 46, 169, 320, 1000, 672, 50, 5332, 2000, 5332, 1000, 5332, 500, 4001, 4000, 4001, 2000, 4001, 1000, 640, 500, 704, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 1226, StoneGolem, StoneGolem, 180, 30000, 280, 70000, 2400, 3, 170, 190, 75, 40, 0, 35, 26, 99, 127, 255, 105, 31, 30, 1, 0, 46, 169, 320, 1000, 672, 50, 5380, 2000, 5380, 1000, 5380, 500, 5381, 200, 4001, 500, 640, 500, 704, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +1229, WarlordSkull, WarlordSkull, 180, 6000, 0, 6808, 821, 2, 85, 185, 45, 25, 0, 50, 20, 40, 30, 30, 70, 9, 10, 1, 3, 12, 143, 650, 1700, 702, 580, 631, 1000, 776, 500, 5297, 20, 636, 1, 1221, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 30 +1230, GoldenSkull, GoldenSkull, 180, 8000, 0, 8595, 857, 2, 85, 410, 50, 25, 0, 45, 25, 35, 30, 35, 55, 9, 10, 1, 3, 11, 141, 650, 1650, 682, 490, 5297, 50, 5297, 50, 1253, 22, 5400, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 30 diff --git a/world/map/db/quest-log.txt b/world/map/db/quest-log.txt index 37e137f3..db810d6e 100644 --- a/world/map/db/quest-log.txt +++ b/world/map/db/quest-log.txt @@ -1,10 +1,15 @@ //Quest Log //Quest ID: var id used by client -//CommonVar: Used in getq & to set -//ServerVar: Server Varaible value is stored -//SHIFT: Posistion shifted. (SHIFT * MASK) +//CommonVar: Used in getq & to set (a view upon the ServerVar, not saved) +//ServerVar: Server Variable where the value is stored +//SHIFT: Position shifted. (SHIFT * MASK) //MASK: Size of shift to make. ((1 << MASK) - 1) << (SHIFT * MASK) //Quest ID,CommonVar,ServerVar,SHIFT,MASK +// N.B: when you migrate a quest to quest log, you also have to use CommonVar +// throughout the server code. Failing to do this will result in client-side +// quest-log not updating as the player progresses. But it will update on +// re-login/switch char. There are no database changes necessary, as +// the quest log variables are just a view upon ServerVar. 1,QL_BEGIN,STARTAREA,0,4 2,QL_VALON,STARTAREA,1,4 3,QL_MORGAN,STARTAREA,3,4 @@ -28,3 +33,8 @@ 20,QL_TERRANITE_ARMOR,QUEST_NorthTulimshar,6,4 // 21 => assassin quest 22,QL_CELESTIA,QUEST_Hurnscald,2,8 +// Beheader quest comes in two parts: the flag that you've completed it +// and the variable that tracks how many you've killed thus far. The +// latter is deleted once you complete the quest. +23,QL_BEHEADER_TERRAC,TERRAC,0,16 +24,QL_BEHEADER_COMPLETE,FLAGS,17,1 diff --git a/world/map/langs/lang_de.txt b/world/map/langs/lang_de.txt index 91937e13..86e4d63b 100644 --- a/world/map/langs/lang_de.txt +++ b/world/map/langs/lang_de.txt @@ -647,7 +647,7 @@ Auldsbel places the logs next to his hut. Auldsbel the Wizard -Auldsbel#_M +Auldsbel Aureole @@ -2198,7 +2198,7 @@ Elanore smiles. Elanore the Healer -Elanore#_M +Elanore ElfNightcap @@ -2453,7 +2453,7 @@ For unfocusing you need to bring a potion; a special potion. That potion is not For your deeds, I shall bestow upon you %d %s. Use them wisely, they are the results of your hard effort. -Forest Mana Seed#_M +Forest Mana Seed ForestArmor @@ -4139,7 +4139,7 @@ Luvia? MTJarofOwnBlood -MageRing +MagicRing MagentaHint @@ -4379,7 +4379,7 @@ Muuuuuuuuuuuuuuuuuuuh! MopoxCurePotion -Morgan#_M +Morgan MorganDebug @@ -4706,7 +4706,7 @@ Old Chest#crastur Old Man -Old Wizard#_W +Old Wizard Old Woman @@ -5240,7 +5240,7 @@ Poppet Pot -Potions#_M +Potions Practice! There are no secrets to becoming a warrior. @@ -5450,6 +5450,9 @@ RIP#9 RabbitEars +RaggedShirt + + RaggedShorts @@ -5816,7 +5819,7 @@ Sabine Sabre -Sagatha#_M +Sagatha Said to have the key to stop Zax De'Kagen's ambitions. @@ -7613,7 +7616,7 @@ Wyara is the Hurnscald town witch. She was also the town healer before the Docto Wyara the Witch -Wyara#_M +Wyara Xakelbael @@ -8114,7 +8117,7 @@ Du hast die exp Rate erfolgreich auf @@% eingestellt. Sie wird in @@ auf @@% zur You suddenly feel naked; you ARE naked! -You take a simple Cotton Shirt and some very worn-out Ragged Shorts out of the dresser. +You take a very worn-out Ragged Shirt and some very worn-out Ragged Shorts out of the dresser. You were blessed by Kirin De'Kagen. The effects will vanish when you die or once thirty minutes have passed. diff --git a/world/map/langs/lang_en.txt b/world/map/langs/lang_en.txt index c3723151..b5210980 100644 --- a/world/map/langs/lang_en.txt +++ b/world/map/langs/lang_en.txt @@ -647,8 +647,8 @@ Auldsbel places the logs next to his hut. Auldsbel the Wizard Auldsbel the Wizard -Auldsbel#_M -Auldsbel#_M +Auldsbel +Auldsbel Aureole Aureole @@ -2198,8 +2198,8 @@ Elanore smiles. Elanore the Healer Elanore the Healer -Elanore#_M -Elanore#_M +Elanore +Elanore ElfNightcap ElfNightcap @@ -2453,8 +2453,8 @@ For unfocusing you need to bring a potion; a special potion. That potion is not For your deeds, I shall bestow upon you %d %s. Use them wisely, they are the results of your hard effort. For your deeds, I shall bestow upon you %d %s. Use them wisely, they are the results of your hard effort. -Forest Mana Seed#_M -Forest Mana Seed#_M +Forest Mana Seed +Forest Mana Seed ForestArmor ForestArmor @@ -4139,8 +4139,8 @@ Luvia? MTJarofOwnBlood MTJarofOwnBlood -MageRing -MageRing +MagicRing +MagicRing MagentaHint MagentaHint @@ -4379,8 +4379,8 @@ Moooooooooooo! MopoxCurePotion MopoxCurePotion -Morgan#_M -Morgan#_M +Morgan +Morgan MorganDebug MorganDebug @@ -4706,8 +4706,8 @@ Old Chest#crastur Old Man Old Man -Old Wizard#_W -Old Wizard#_W +Old Wizard +Old Wizard Old Woman Old Woman @@ -5240,8 +5240,8 @@ Poppet Pot Pot -Potions#_M -Potions#_M +Potions +Potions Practice! There are no secrets to becoming a warrior. Practice! There are no secrets to becoming a warrior. @@ -5450,6 +5450,9 @@ RIP#9 RabbitEars RabbitEars +RaggedShirt +RaggedShirt + RaggedShorts RaggedShorts @@ -5816,8 +5819,8 @@ Sabine Sabre Sabre -Sagatha#_M -Sagatha#_M +Sagatha +Sagatha Said to have the key to stop Zax De'Kagen's ambitions. Said to have the key to stop Zax De'Kagen's ambitions. @@ -7613,8 +7616,8 @@ Wyara is the Hurnscald town witch. She was also the town healer before the Docto Wyara the Witch Wyara the Witch -Wyara#_M -Wyara#_M +Wyara +Wyara Xakelbael Xakelbael @@ -8114,8 +8117,8 @@ You successfully set the exp rate to @@%. It will reset to @@% (default value) i You suddenly feel naked; you ARE naked! You suddenly feel naked; you ARE naked! -You take a simple Cotton Shirt and some very worn-out Ragged Shorts out of the dresser. -You take a simple Cotton Shirt and some very worn-out Ragged Shorts out of the dresser. +You take a very worn-out Ragged Shirt and some very worn-out Ragged Shorts out of the dresser. +You take a very worn-out Ragged Shirt and some very worn-out Ragged Shorts out of the dresser. You were blessed by Kirin De'Kagen. The effects will vanish when you die or once thirty minutes have passed. You were blessed by Kirin De'Kagen. The effects will vanish when you die or once thirty minutes have passed. diff --git a/world/map/langs/lang_es.txt b/world/map/langs/lang_es.txt index 08bcedf5..f7d5ca42 100644 --- a/world/map/langs/lang_es.txt +++ b/world/map/langs/lang_es.txt @@ -647,7 +647,7 @@ Auldsbel places the logs next to his hut. Auldsbel the Wizard -Auldsbel#_M +Auldsbel Aureole @@ -2198,7 +2198,7 @@ Elanore smiles. Elanore the Healer -Elanore#_M +Elanore ElfNightcap @@ -2453,7 +2453,7 @@ For unfocusing you need to bring a potion; a special potion. That potion is not For your deeds, I shall bestow upon you %d %s. Use them wisely, they are the results of your hard effort. -Forest Mana Seed#_M +Forest Mana Seed ForestArmor @@ -4139,7 +4139,7 @@ Luvia? MTJarofOwnBlood -MageRing +MagicRing MagentaHint @@ -4379,7 +4379,7 @@ Moooooooooooo! MopoxCurePotion -Morgan#_M +Morgan MorganDebug @@ -4706,7 +4706,7 @@ Old Chest#crastur Old Man Viejo -Old Wizard#_W +Old Wizard Old Woman @@ -5240,7 +5240,7 @@ Poppet Pot -Potions#_M +Potions Practice! There are no secrets to becoming a warrior. @@ -5450,6 +5450,9 @@ RIP#9 RabbitEars +RaggedShirt + + RaggedShorts @@ -5816,7 +5819,7 @@ Sabine Sabre -Sagatha#_M +Sagatha Said to have the key to stop Zax De'Kagen's ambitions. @@ -7613,7 +7616,7 @@ Wyara is the Hurnscald town witch. She was also the town healer before the Docto Wyara the Witch -Wyara#_M +Wyara Xakelbael @@ -8114,7 +8117,7 @@ Asignó satisfactoriamente el Ãndice de experiencia en @@%. Este se restablecer You suddenly feel naked; you ARE naked! -You take a simple Cotton Shirt and some very worn-out Ragged Shorts out of the dresser. +You take a very worn-out Ragged Shirt and some very worn-out Ragged Shorts out of the dresser. You were blessed by Kirin De'Kagen. The effects will vanish when you die or once thirty minutes have passed. diff --git a/world/map/langs/lang_fr.txt b/world/map/langs/lang_fr.txt index 9b3702ea..552eb69b 100644 --- a/world/map/langs/lang_fr.txt +++ b/world/map/langs/lang_fr.txt @@ -647,7 +647,7 @@ Auldsbel places the logs next to his hut. Auldsbel the Wizard -Auldsbel#_M +Auldsbel Aureole @@ -2197,7 +2197,7 @@ Elanore smiles. Elanore the Healer -Elanore#_M +Elanore ElfNightcap @@ -2452,7 +2452,7 @@ For unfocusing you need to bring a potion; a special potion. That potion is not For your deeds, I shall bestow upon you %d %s. Use them wisely, they are the results of your hard effort. -Forest Mana Seed#_M +Forest Mana Seed ForestArmor @@ -4138,7 +4138,7 @@ Luvia? MTJarofOwnBlood -MageRing +MagicRing MagentaHint @@ -4378,7 +4378,7 @@ Moooooooooooo! MopoxCurePotion -Morgan#_M +Morgan MorganDebug @@ -4705,7 +4705,7 @@ Old Chest#crastur Old Man -Old Wizard#_W +Old Wizard Old Woman @@ -5239,7 +5239,7 @@ Poppet Pot -Potions#_M +Potions Practice! There are no secrets to becoming a warrior. @@ -5449,6 +5449,9 @@ RIP#9 RabbitEars +RaggedShirt + + RaggedShorts @@ -5815,7 +5818,7 @@ Sabine Sabre -Sagatha#_M +Sagatha Said to have the key to stop Zax De'Kagen's ambitions. @@ -7612,7 +7615,7 @@ Wyara is the Hurnscald town witch. She was also the town healer before the Docto Wyara the Witch -Wyara#_M +Wyara Xakelbael @@ -8113,7 +8116,7 @@ Tu as établi le taux d'exp à @@% avec succès. Il se réinitialisera à @@% (v You suddenly feel naked; you ARE naked! -You take a simple Cotton Shirt and some very worn-out Ragged Shorts out of the dresser. +You take a very worn-out Ragged Shirt and some very worn-out Ragged Shorts out of the dresser. You were blessed by Kirin De'Kagen. The effects will vanish when you die or once thirty minutes have passed. diff --git a/world/map/langs/lang_pt_BR.txt b/world/map/langs/lang_pt_BR.txt index e05f2e19..2fdcf9dd 100644 --- a/world/map/langs/lang_pt_BR.txt +++ b/world/map/langs/lang_pt_BR.txt @@ -647,7 +647,7 @@ Auldsbel places the logs next to his hut. Auldsbel the Wizard -Auldsbel#_M +Auldsbel Aureole @@ -2198,7 +2198,7 @@ Elanore smiles. Elanore the Healer -Elanore#_M +Elanore ElfNightcap @@ -2453,7 +2453,7 @@ For unfocusing you need to bring a potion; a special potion. That potion is not For your deeds, I shall bestow upon you %d %s. Use them wisely, they are the results of your hard effort. -Forest Mana Seed#_M +Forest Mana Seed ForestArmor @@ -4139,7 +4139,7 @@ Luvia? MTJarofOwnBlood -MageRing +MagicRing MagentaHint @@ -4379,7 +4379,7 @@ Moooooooooooo! MopoxCurePotion -Morgan#_M +Morgan MorganDebug @@ -4706,7 +4706,7 @@ Old Chest#crastur Old Man -Old Wizard#_W +Old Wizard Old Woman @@ -5240,7 +5240,7 @@ Poppet Pot -Potions#_M +Potions Practice! There are no secrets to becoming a warrior. @@ -5450,6 +5450,9 @@ RIP#9 RabbitEars +RaggedShirt + + RaggedShorts @@ -5816,7 +5819,7 @@ Sabine Sabre -Sagatha#_M +Sagatha Said to have the key to stop Zax De'Kagen's ambitions. @@ -7613,7 +7616,7 @@ Wyara is the Hurnscald town witch. She was also the town healer before the Docto Wyara the Witch -Wyara#_M +Wyara Xakelbael @@ -8114,7 +8117,7 @@ You successfully set the exp rate to @@%. It will reset to @@% (default value) i You suddenly feel naked; you ARE naked! -You take a simple Cotton Shirt and some very worn-out Ragged Shorts out of the dresser. +You take a very worn-out Ragged Shirt and some very worn-out Ragged Shorts out of the dresser. You were blessed by Kirin De'Kagen. The effects will vanish when you die or once thirty minutes have passed. diff --git a/world/map/news.d/05-new-dress.txt b/world/map/news.d/2012-09-new_dress.txt index cd3302dd..cd3302dd 100644 --- a/world/map/news.d/05-new-dress.txt +++ b/world/map/news.d/2012-09-new_dress.txt diff --git a/world/map/news.d/06-east-expansion.txt b/world/map/news.d/2012-10-east_expansion.txt index 015acdf2..015acdf2 100644 --- a/world/map/news.d/06-east-expansion.txt +++ b/world/map/news.d/2012-10-east_expansion.txt diff --git a/world/map/news.d/07-halloween2012.txt b/world/map/news.d/2012-11-halloween.txt index 86689de1..86689de1 100644 --- a/world/map/news.d/07-halloween2012.txt +++ b/world/map/news.d/2012-11-halloween.txt diff --git a/world/map/news.d/08-christmas2012.txt b/world/map/news.d/2012-12-christmas.txt index 6bba8a14..6bba8a14 100644 --- a/world/map/news.d/08-christmas2012.txt +++ b/world/map/news.d/2012-12-christmas.txt diff --git a/world/map/news.d/09-winter2012.txt b/world/map/news.d/2012-12-illia.txt index 52b9fb1f..52b9fb1f 100644 --- a/world/map/news.d/09-winter2012.txt +++ b/world/map/news.d/2012-12-illia.txt diff --git a/world/map/news.d/10-news-news.txt b/world/map/news.d/2013-01-23-news_news.txt index b4ab0817..b4ab0817 100644 --- a/world/map/news.d/10-news-news.txt +++ b/world/map/news.d/2013-01-23-news_news.txt diff --git a/world/map/news.d/11-CR-Jan13.txt b/world/map/news.d/2013-01-26-content,fixes.txt index 2e6b177d..2e6b177d 100644 --- a/world/map/news.d/11-CR-Jan13.txt +++ b/world/map/news.d/2013-01-26-content,fixes.txt diff --git a/world/map/news.d/12-manaplus.txt b/world/map/news.d/2013-01-31-manaplus.txt index 7c8ef578..7c8ef578 100644 --- a/world/map/news.d/12-manaplus.txt +++ b/world/map/news.d/2013-01-31-manaplus.txt diff --git a/world/map/news.d/13-lpc.txt b/world/map/news.d/2013-02-18-lpc.txt index b4197b10..b4197b10 100644 --- a/world/map/news.d/13-lpc.txt +++ b/world/map/news.d/2013-02-18-lpc.txt diff --git a/world/map/news.d/14-bugfix-killthegmevent.txt b/world/map/news.d/2013-02-21-bugfix,kill_gm.txt index 249d23a3..249d23a3 100644 --- a/world/map/news.d/14-bugfix-killthegmevent.txt +++ b/world/map/news.d/2013-02-21-bugfix,kill_gm.txt diff --git a/world/map/news.d/15-servermove.txt b/world/map/news.d/2013-03-09-server_move.txt index deeb91e9..deeb91e9 100644 --- a/world/map/news.d/15-servermove.txt +++ b/world/map/news.d/2013-03-09-server_move.txt diff --git a/world/map/news.d/16-servermoveagain.txt b/world/map/news.d/2013-03-17-server_move_again.txt index 1c368ba7..1c368ba7 100644 --- a/world/map/news.d/16-servermoveagain.txt +++ b/world/map/news.d/2013-03-17-server_move_again.txt diff --git a/world/map/news.d/17-beanie-easter.txt b/world/map/news.d/2013-03-21-beanie,easter.txt index cc99040d..cc99040d 100644 --- a/world/map/news.d/17-beanie-easter.txt +++ b/world/map/news.d/2013-03-21-beanie,easter.txt diff --git a/world/map/news.d/18-bugfixes.txt b/world/map/news.d/2013-04-28-brodomir,orum_fixes.txt index 67d0a343..67d0a343 100644 --- a/world/map/news.d/18-bugfixes.txt +++ b/world/map/news.d/2013-04-28-brodomir,orum_fixes.txt diff --git a/world/map/news.d/19-rollbackup.txt b/world/map/news.d/2013-06-05-crash,rollback.txt index d5dbec51..d5dbec51 100644 --- a/world/map/news.d/19-rollbackup.txt +++ b/world/map/news.d/2013-06-05-crash,rollback.txt diff --git a/world/map/news.d/20-double-exp-drop.txt b/world/map/news.d/2013-06-07-double_exp_drop.txt index f1d84918..f1d84918 100644 --- a/world/map/news.d/20-double-exp-drop.txt +++ b/world/map/news.d/2013-06-07-double_exp_drop.txt diff --git a/world/map/news.d/21-tulimshar-caves.txt b/world/map/news.d/2013-06-29-tulimshar_caves.txt index 24efd44f..24efd44f 100644 --- a/world/map/news.d/21-tulimshar-caves.txt +++ b/world/map/news.d/2013-06-29-tulimshar_caves.txt diff --git a/world/map/news.d/22-orum-extension.txt b/world/map/news.d/2013-09-03-orum_extension.txt index c2a04543..c2a04543 100644 --- a/world/map/news.d/22-orum-extension.txt +++ b/world/map/news.d/2013-09-03-orum_extension.txt diff --git a/world/map/news.d/23-astral-extension.txt b/world/map/news.d/2013-09-14-astral_extension.txt index 87d32cfa..87d32cfa 100644 --- a/world/map/news.d/23-astral-extension.txt +++ b/world/map/news.d/2013-09-14-astral_extension.txt diff --git a/world/map/news.d/24-code-release.txt b/world/map/news.d/2013-09-28-code_release.txt index f6a180e0..f6a180e0 100644 --- a/world/map/news.d/24-code-release.txt +++ b/world/map/news.d/2013-09-28-code_release.txt diff --git a/world/map/news.d/25-halloween.txt b/world/map/news.d/2013-10-30-halloween.txt index 208bb4ec..208bb4ec 100644 --- a/world/map/news.d/25-halloween.txt +++ b/world/map/news.d/2013-10-30-halloween.txt diff --git a/world/map/news.d/26-unequipcb.txt b/world/map/news.d/2013-11-30-icons,weapons.txt index c692b647..c692b647 100644 --- a/world/map/news.d/26-unequipcb.txt +++ b/world/map/news.d/2013-11-30-icons,weapons.txt diff --git a/world/map/news.d/27-xmas-event.txt b/world/map/news.d/2013-12-25-xmas_event.txt index 85e36372..85e36372 100644 --- a/world/map/news.d/27-xmas-event.txt +++ b/world/map/news.d/2013-12-25-xmas_event.txt diff --git a/world/map/news.d/28-troll-map.txt b/world/map/news.d/2014-02-03-troll_map.txt index 2b6a35d7..2b6a35d7 100644 --- a/world/map/news.d/28-troll-map.txt +++ b/world/map/news.d/2014-02-03-troll_map.txt diff --git a/world/map/news.d/29-rc-one.txt b/world/map/news.d/2014-04-16-major_release.txt index 7cddb743..7cddb743 100644 --- a/world/map/news.d/29-rc-one.txt +++ b/world/map/news.d/2014-04-16-major_release.txt diff --git a/world/map/news.d/30-v2014.4.21.txt b/world/map/news.d/2014-04-21-here_we_go_again.txt index dcada158..dcada158 100644 --- a/world/map/news.d/30-v2014.4.21.txt +++ b/world/map/news.d/2014-04-21-here_we_go_again.txt diff --git a/world/map/news.d/31-v2014.5.6.txt b/world/map/news.d/2014-05-06-ferry_music.txt index 250d2c59..9386a00c 100644 --- a/world/map/news.d/31-v2014.5.6.txt +++ b/world/map/news.d/2014-05-06-ferry_music.txt @@ -1,8 +1,8 @@ -{title:No one speaks English good.} +{title:No one speaks English good} {date:2014-05-06} Ahoy Manazins! Todays release brings new music to the boats. -Otherwise the release is primarly for bug fixes. +Otherwise the release is primarly for bug fixes. Server-Data: {ul} diff --git a/world/map/news.d/32-v2014.5.20.txt b/world/map/news.d/2014-05-20-small_update.txt index b490d04a..b490d04a 100644 --- a/world/map/news.d/32-v2014.5.20.txt +++ b/world/map/news.d/2014-05-20-small_update.txt diff --git a/world/map/news.d/33-v2014.6.17.txt b/world/map/news.d/2014-06-17-item_split,mob_shuffle.txt index 15707cb5..15707cb5 100644 --- a/world/map/news.d/33-v2014.6.17.txt +++ b/world/map/news.d/2014-06-17-item_split,mob_shuffle.txt diff --git a/world/map/news.d/34-v2014.7.1.txt b/world/map/news.d/2014-07-01-gm_island.txt index 0223d511..0223d511 100644 --- a/world/map/news.d/34-v2014.7.1.txt +++ b/world/map/news.d/2014-07-01-gm_island.txt diff --git a/world/map/news.d/35-v2014.7.3.txt b/world/map/news.d/2014-07-03-bughunt.txt index 52828e24..8a8ae409 100644 --- a/world/map/news.d/35-v2014.7.3.txt +++ b/world/map/news.d/2014-07-03-bughunt.txt @@ -1,7 +1,7 @@ -{title:Sounds like another bug hunt.} +{title:Sounds like another bug hunt} {date:2014-07-03} -We had a major bug hunt and squashed a number +We had a major bug hunt and squashed a number of problems with the client-data and the client. This should clear up and help latency and other client bugs. diff --git a/world/map/news.d/36-v2014.7.15.txt b/world/map/news.d/2014-07-12-lag-sickness.txt index 7dcf812c..7dcf812c 100644 --- a/world/map/news.d/36-v2014.7.15.txt +++ b/world/map/news.d/2014-07-12-lag-sickness.txt diff --git a/world/map/news.d/37-v2014.7.29.txt b/world/map/news.d/2014-07-29-sanity_check.txt index 2061d89f..2061d89f 100644 --- a/world/map/news.d/37-v2014.7.29.txt +++ b/world/map/news.d/2014-07-29-sanity_check.txt diff --git a/world/map/news.d/38-v2014.9.1.txt b/world/map/news.d/2014-09-01-now_with_less_spam.txt index fa63e6ae..fa63e6ae 100644 --- a/world/map/news.d/38-v2014.9.1.txt +++ b/world/map/news.d/2014-09-01-now_with_less_spam.txt diff --git a/world/map/news.d/39-v2014.10.7.txt b/world/map/news.d/2014-10-07-back_in_business.txt index b9cddcfa..b9cddcfa 100644 --- a/world/map/news.d/39-v2014.10.7.txt +++ b/world/map/news.d/2014-10-07-back_in_business.txt diff --git a/world/map/news.d/40-v2014.10.20.txt b/world/map/news.d/2014-10-20-halloween.txt index c0726a4d..c0726a4d 100644 --- a/world/map/news.d/40-v2014.10.20.txt +++ b/world/map/news.d/2014-10-20-halloween.txt diff --git a/world/map/news.d/41-v2014.10.23.txt b/world/map/news.d/2014-10-23-free_basic_skills.txt index 21531bf1..21531bf1 100644 --- a/world/map/news.d/41-v2014.10.23.txt +++ b/world/map/news.d/2014-10-23-free_basic_skills.txt diff --git a/world/map/news.d/42-v2014.11.4.txt b/world/map/news.d/2014-11-04-quest_or_fight.txt index b19f3536..d5e8d6a2 100644 --- a/world/map/news.d/42-v2014.11.4.txt +++ b/world/map/news.d/2014-11-04-quest_or_fight.txt @@ -1,12 +1,12 @@ {title:To Quest or Fight} -{date:2014-11-4} +{date:2014-11-04} Heya Manakins, we have a bunch of updates for you. Kylian -has had his shop license. Hetchel in Tulimshar Noble +has had his shop license. Hetchel in Tulimshar Noble district needs some help. -The new Races/Species are not yet playable but this release -requires you to upgrade to the version of Manaplus that +The new Races/Species are not yet playable but this release +requires you to upgrade to the version of Manaplus that will allow us to bring them in once more people have upgraded. Please upgrade Manaplus at your earliest convience. diff --git a/world/map/news.d/43-v2014.11.18.txt b/world/map/news.d/2014-11-18-candont_is_cando.txt index 0a38f4c7..0a38f4c7 100644 --- a/world/map/news.d/43-v2014.11.18.txt +++ b/world/map/news.d/2014-11-18-candont_is_cando.txt diff --git a/world/map/news.d/44-v2014.12.04.txt b/world/map/news.d/2014-12-04-heathin,inya.txt index 36ab4528..36ab4528 100644 --- a/world/map/news.d/44-v2014.12.04.txt +++ b/world/map/news.d/2014-12-04-heathin,inya.txt diff --git a/world/map/news.d/45-v2015.01.13.txt b/world/map/news.d/2015-01-13-new_tutorial.txt index ea2f4cb6..ea2f4cb6 100644 --- a/world/map/news.d/45-v2015.01.13.txt +++ b/world/map/news.d/2015-01-13-new_tutorial.txt diff --git a/world/map/news.d/46-v2015.02.03.txt b/world/map/news.d/2015-02-03-new_kaizei_art.txt index 40267aca..40267aca 100644 --- a/world/map/news.d/46-v2015.02.03.txt +++ b/world/map/news.d/2015-02-03-new_kaizei_art.txt diff --git a/world/map/news.d/47-v2015.03.10.txt b/world/map/news.d/2015-03-10-new_candor_bank.txt index 9be33a3f..9be33a3f 100644 --- a/world/map/news.d/47-v2015.03.10.txt +++ b/world/map/news.d/2015-03-10-new_candor_bank.txt diff --git a/world/map/news.d/48-v2015.05.04.txt b/world/map/news.d/2015-05-04-double_header.txt index 4fb1744d..4fb1744d 100644 --- a/world/map/news.d/48-v2015.05.04.txt +++ b/world/map/news.d/2015-05-04-double_header.txt diff --git a/world/map/news.d/49-v2015.05.18.txt b/world/map/news.d/2015-05-18-candor_open.txt index 0b491842..0b491842 100644 --- a/world/map/news.d/49-v2015.05.18.txt +++ b/world/map/news.d/2015-05-18-candor_open.txt diff --git a/world/map/news.d/50-v2015.06.30.txt b/world/map/news.d/2015-06-30-pvp_enhance.txt index ef589d96..ef589d96 100644 --- a/world/map/news.d/50-v2015.06.30.txt +++ b/world/map/news.d/2015-06-30-pvp_enhance.txt diff --git a/world/map/news.d/51-v2015.08.17.txt b/world/map/news.d/2015-08-17-another_bughunt.txt index 95601301..95601301 100644 --- a/world/map/news.d/51-v2015.08.17.txt +++ b/world/map/news.d/2015-08-17-another_bughunt.txt diff --git a/world/map/news.d/52-v2015.09.15.txt b/world/map/news.d/2015-09-15-max_daily.txt index 37ebaa5f..37ebaa5f 100644 --- a/world/map/news.d/52-v2015.09.15.txt +++ b/world/map/news.d/2015-09-15-max_daily.txt diff --git a/world/map/news.d/53-v2015.10.01.txt b/world/map/news.d/2015-10-01-overdue_bug_fixes.txt index f3e5845f..f3e5845f 100644 --- a/world/map/news.d/53-v2015.10.01.txt +++ b/world/map/news.d/2015-10-01-overdue_bug_fixes.txt diff --git a/world/map/news.d/54-v2015.11.23.txt b/world/map/news.d/2015-11-23-minor_fixes.txt index 16f99cd1..16f99cd1 100644 --- a/world/map/news.d/54-v2015.11.23.txt +++ b/world/map/news.d/2015-11-23-minor_fixes.txt diff --git a/world/map/news.d/55-v2016.2.9.txt b/world/map/news.d/2016-02-09-third_gender.txt index 20269968..20269968 100644 --- a/world/map/news.d/55-v2016.2.9.txt +++ b/world/map/news.d/2016-02-09-third_gender.txt diff --git a/world/map/news.d/56-v2016.3.31.txt b/world/map/news.d/2016-03-31-blue_sage_fix.txt index 57f42bff..57f42bff 100644 --- a/world/map/news.d/56-v2016.3.31.txt +++ b/world/map/news.d/2016-03-31-blue_sage_fix.txt diff --git a/world/map/news.d/57-v2016.4.21.txt b/world/map/news.d/2016-04-21-magic_v3.txt index 78bb095d..78bb095d 100644 --- a/world/map/news.d/57-v2016.4.21.txt +++ b/world/map/news.d/2016-04-21-magic_v3.txt diff --git a/world/map/news.d/58-v2016.4.24.txt b/world/map/news.d/2016-04-24-we_are_all_dead.txt index 9e6b7cd8..9e6b7cd8 100644 --- a/world/map/news.d/58-v2016.4.24.txt +++ b/world/map/news.d/2016-04-24-we_are_all_dead.txt diff --git a/world/map/news.d/59-v2016.4.25.txt b/world/map/news.d/2016-04-25-there_again.txt index 5d75afc2..5d75afc2 100644 --- a/world/map/news.d/59-v2016.4.25.txt +++ b/world/map/news.d/2016-04-25-there_again.txt diff --git a/world/map/news.d/60-v2016.5.12.txt b/world/map/news.d/2016-05-12-its_like_magic.txt index 7e11d83a..7e11d83a 100644 --- a/world/map/news.d/60-v2016.5.12.txt +++ b/world/map/news.d/2016-05-12-its_like_magic.txt diff --git a/world/map/news.d/61-v2016.10.10.txt b/world/map/news.d/2016-10-10-halloween.txt index aeed8f35..aeed8f35 100644 --- a/world/map/news.d/61-v2016.10.10.txt +++ b/world/map/news.d/2016-10-10-halloween.txt diff --git a/world/map/news.d/62-v2016.11.26.txt b/world/map/news.d/2016-11-26-stability.txt index 996d6812..996d6812 100644 --- a/world/map/news.d/62-v2016.11.26.txt +++ b/world/map/news.d/2016-11-26-stability.txt diff --git a/world/map/news.d/63-v2017.11.12.txt b/world/map/news.d/2017-11-12-crash_fixes.txt index d8f8f0c3..d8f8f0c3 100644 --- a/world/map/news.d/63-v2017.11.12.txt +++ b/world/map/news.d/2017-11-12-crash_fixes.txt diff --git a/world/map/news.d/64-v2017.12.04.txt b/world/map/news.d/2017-12-04-item_desc_updates.txt index eb4ecd37..eb4ecd37 100644 --- a/world/map/news.d/64-v2017.12.04.txt +++ b/world/map/news.d/2017-12-04-item_desc_updates.txt diff --git a/world/map/news.d/65-v2018.01.01.txt b/world/map/news.d/2018-01-01-party_limit_increase.txt index c15b4bfe..c15b4bfe 100644 --- a/world/map/news.d/65-v2018.01.01.txt +++ b/world/map/news.d/2018-01-01-party_limit_increase.txt diff --git a/world/map/news.d/66-v2018.01.15.txt b/world/map/news.d/2018-01-15-new_hats,fixes.txt index 81eb36ac..81eb36ac 100644 --- a/world/map/news.d/66-v2018.01.15.txt +++ b/world/map/news.d/2018-01-15-new_hats,fixes.txt diff --git a/world/map/news.d/67-v2018.01.28.txt b/world/map/news.d/2018-01-28-races,items,maps.txt index 990f8f9a..990f8f9a 100644 --- a/world/map/news.d/67-v2018.01.28.txt +++ b/world/map/news.d/2018-01-28-races,items,maps.txt diff --git a/world/map/news.d/68-v2018.02.17.txt b/world/map/news.d/2018-02-17-fixes,improvements.txt index 87db02ac..87db02ac 100644 --- a/world/map/news.d/68-v2018.02.17.txt +++ b/world/map/news.d/2018-02-17-fixes,improvements.txt diff --git a/world/map/news.d/69-v2018.03.03.txt b/world/map/news.d/2018-03-03-default_badges.txt index 827c7b04..827c7b04 100644 --- a/world/map/news.d/69-v2018.03.03.txt +++ b/world/map/news.d/2018-03-03-default_badges.txt diff --git a/world/map/news.d/70-v2018.03.11.txt b/world/map/news.d/2018-03-11-skeleton_race.txt index 1ee6ac59..1ee6ac59 100644 --- a/world/map/news.d/70-v2018.03.11.txt +++ b/world/map/news.d/2018-03-11-skeleton_race.txt diff --git a/world/map/news.d/71-v2018.03.23.txt b/world/map/news.d/2018-03-23-lesser_ghosts.txt index 2c92d5f5..2c92d5f5 100644 --- a/world/map/news.d/71-v2018.03.23.txt +++ b/world/map/news.d/2018-03-23-lesser_ghosts.txt diff --git a/world/map/news.d/72-v2019.01.20.txt b/world/map/news.d/2019-01-20-fluffy_board_increase.txt index 5bcba177..5bcba177 100644 --- a/world/map/news.d/72-v2019.01.20.txt +++ b/world/map/news.d/2019-01-20-fluffy_board_increase.txt diff --git a/world/map/news.d/73-anniversary.txt b/world/map/news.d/2019-04-09-15th_anniversary_reminder.txt index 614a9bd4..614a9bd4 100644 --- a/world/map/news.d/73-anniversary.txt +++ b/world/map/news.d/2019-04-09-15th_anniversary_reminder.txt diff --git a/world/map/news.d/74-anniversary.txt b/world/map/news.d/2019-04-15-15th_anniversary.txt index 1ae8beca..1ae8beca 100644 --- a/world/map/news.d/74-anniversary.txt +++ b/world/map/news.d/2019-04-15-15th_anniversary.txt diff --git a/world/map/news.d/75-news-2019-04-17.txt b/world/map/news.d/2019-04-17-major_rant.txt index dbe094c3..dbe094c3 100644 --- a/world/map/news.d/75-news-2019-04-17.txt +++ b/world/map/news.d/2019-04-17-major_rant.txt diff --git a/world/map/news.d/76-milestone-news.txt b/world/map/news.d/2019-05-01-milestone_news.txt index 066670f1..066670f1 100644 --- a/world/map/news.d/76-milestone-news.txt +++ b/world/map/news.d/2019-05-01-milestone_news.txt diff --git a/world/map/news.d/77-new-website.txt b/world/map/news.d/2019-08-12-new_website.txt index c962e1c2..c962e1c2 100644 --- a/world/map/news.d/77-new-website.txt +++ b/world/map/news.d/2019-08-12-new_website.txt diff --git a/world/map/news.d/78-halloween-2019.txt b/world/map/news.d/2019-10-07-halloween.txt index 44445e9e..44445e9e 100644 --- a/world/map/news.d/78-halloween-2019.txt +++ b/world/map/news.d/2019-10-07-halloween.txt diff --git a/world/map/news.d/79-news-2019-12-18.txt b/world/map/news.d/2019-12-18-nerf_banshee.txt index 96287b01..96287b01 100644 --- a/world/map/news.d/79-news-2019-12-18.txt +++ b/world/map/news.d/2019-12-18-nerf_banshee.txt diff --git a/world/map/news.d/80-news-2020-01-01.txt b/world/map/news.d/2020-01-01-valentine.txt index 37978358..37978358 100644 --- a/world/map/news.d/80-news-2020-01-01.txt +++ b/world/map/news.d/2020-01-01-valentine.txt diff --git a/world/map/news.d/81-news-2020-02-25.txt b/world/map/news.d/2020-02-25-doomsday_invasion.txt index fcddaecb..fcddaecb 100644 --- a/world/map/news.d/81-news-2020-02-25.txt +++ b/world/map/news.d/2020-02-25-doomsday_invasion.txt diff --git a/world/map/news.d/82-news-2020-04-01.txt b/world/map/news.d/2020-04-01-fools_day.txt index 0868273e..0868273e 100644 --- a/world/map/news.d/82-news-2020-04-01.txt +++ b/world/map/news.d/2020-04-01-fools_day.txt diff --git a/world/map/news.d/83-news-2020-04-06.txt b/world/map/news.d/2020-04-06-doomsday_great_war_1.txt index 60a909b8..60a909b8 100644 --- a/world/map/news.d/83-news-2020-04-06.txt +++ b/world/map/news.d/2020-04-06-doomsday_great_war_1.txt diff --git a/world/map/news.d/84-news-2020-04-20.txt b/world/map/news.d/2020-04-20-doomsday_great_war_2.txt index 759446d3..759446d3 100644 --- a/world/map/news.d/84-news-2020-04-20.txt +++ b/world/map/news.d/2020-04-20-doomsday_great_war_2.txt diff --git a/world/map/news.d/85-news-2020-05-09.txt b/world/map/news.d/2020-05-09-doomsday_great_war_3.txt index c1a5d8f3..c1a5d8f3 100644 --- a/world/map/news.d/85-news-2020-05-09.txt +++ b/world/map/news.d/2020-05-09-doomsday_great_war_3.txt diff --git a/world/map/news.d/86-news-2020-05-26.txt b/world/map/news.d/2020-05-26-doomsday_great_war_4.txt index b93c1e59..b93c1e59 100644 --- a/world/map/news.d/86-news-2020-05-26.txt +++ b/world/map/news.d/2020-05-26-doomsday_great_war_4.txt diff --git a/world/map/news.d/87-news-2020-06-11.txt b/world/map/news.d/2020-06-11-doomsday_final_battle_1.txt index 82a9289d..82a9289d 100644 --- a/world/map/news.d/87-news-2020-06-11.txt +++ b/world/map/news.d/2020-06-11-doomsday_final_battle_1.txt diff --git a/world/map/news.d/88-news-2020-08-24.txt b/world/map/news.d/2020-08-24-doomsday_final_battle_2.txt index a2d60b75..a2d60b75 100644 --- a/world/map/news.d/88-news-2020-08-24.txt +++ b/world/map/news.d/2020-08-24-doomsday_final_battle_2.txt diff --git a/world/map/news.d/89-halloween-2020.txt b/world/map/news.d/2020-09-15-doomsday_final_battle_3.txt index 0f3fc6d9..0f3fc6d9 100644 --- a/world/map/news.d/89-halloween-2020.txt +++ b/world/map/news.d/2020-09-15-doomsday_final_battle_3.txt diff --git a/world/map/news.d/90-christmas-2020.txt b/world/map/news.d/2020-12-01-christmas.txt index 33241e89..33241e89 100644 --- a/world/map/news.d/90-christmas-2020.txt +++ b/world/map/news.d/2020-12-01-christmas.txt diff --git a/world/map/news.d/91-new-year-2021.txt b/world/map/news.d/2021-02-09-beheader,valentine.txt index 25236be6..25236be6 100644 --- a/world/map/news.d/91-new-year-2021.txt +++ b/world/map/news.d/2021-02-09-beheader,valentine.txt diff --git a/world/map/news.d/92-news-2021-04-01.txt b/world/map/news.d/2021-04-01-fools_day.txt index b9a05f9b..b9a05f9b 100644 --- a/world/map/news.d/92-news-2021-04-01.txt +++ b/world/map/news.d/2021-04-01-fools_day.txt diff --git a/world/map/news.d/93-news-2021-04-22.txt b/world/map/news.d/2021-04-22-manaplus_fork,assassin_gear.txt index 18f7906f..18f7906f 100644 --- a/world/map/news.d/93-news-2021-04-22.txt +++ b/world/map/news.d/2021-04-22-manaplus_fork,assassin_gear.txt diff --git a/world/map/news.d/94-news-2021-05-28.txt b/world/map/news.d/2021-05-28-libera,upmarmu_buff.txt index 6de82ecb..6de82ecb 100644 --- a/world/map/news.d/94-news-2021-05-28.txt +++ b/world/map/news.d/2021-05-28-libera,upmarmu_buff.txt diff --git a/world/map/news.d/95-christmas-2021.txt b/world/map/news.d/2021-12-04-christmas.txt index 6e1272ce..6e1272ce 100644 --- a/world/map/news.d/95-christmas-2021.txt +++ b/world/map/news.d/2021-12-04-christmas.txt diff --git a/world/map/news.d/96-news-2022-04-26.txt b/world/map/news.d/2022-04-26-steam,big_changes.txt index bb7d99f5..bb7d99f5 100644 --- a/world/map/news.d/96-news-2022-04-26.txt +++ b/world/map/news.d/2022-04-26-steam,big_changes.txt diff --git a/world/map/news.d/97-news-2022-10-02.txt b/world/map/news.d/2022-10-02-blanc_invasions.txt index a6fe7b37..a6fe7b37 100644 --- a/world/map/news.d/97-news-2022-10-02.txt +++ b/world/map/news.d/2022-10-02-blanc_invasions.txt diff --git a/world/map/news.d/98-news-2022-11-20.txt b/world/map/news.d/2022-11-20-rewrite_3,blanc.txt index a9ee47e5..a9ee47e5 100644 --- a/world/map/news.d/98-news-2022-11-20.txt +++ b/world/map/news.d/2022-11-20-rewrite_3,blanc.txt diff --git a/world/map/news.d/99-00-news-2024-05-03.txt b/world/map/news.d/2024-05-03-long_awaited_news.txt index fb3e67fa..fb3e67fa 100644 --- a/world/map/news.d/99-00-news-2024-05-03.txt +++ b/world/map/news.d/2024-05-03-long_awaited_news.txt diff --git a/world/map/news.d/2024-10-31-halloween.txt b/world/map/news.d/2024-10-31-halloween.txt new file mode 100644 index 00000000..e582b68d --- /dev/null +++ b/world/map/news.d/2024-10-31-halloween.txt @@ -0,0 +1,40 @@ +{title:Happy Halloween - 2024} +{date:2024-10-31} + +{b}Since our last news entry:{/b} + +{ul} +{li}Bromenal set reworked and some parts are obtainable{/li} +{li}Clouds_Calling.ogg was added back to music(Was referenced, but not updated last time){/li} +{li}Limitations of "in town" removed. i.e. Spells and mob summons{/li} +{li}Many new items and mobs{/li} +{li}Tomato sale is over{/li} +{li}Rain(kaflosh) has new effects on some mobs{/li} +{li}Character movement restrictions possible for maps/quests{/li} +{li}Mages now make more Bone Arrows(kularzunevelafrill) due to the buy price dropping at NPC{/li} +{li}Added to Chronos shop: Dragon Shield, Leprechaun Head, Rainerang and Scissors{/li} +{li}Enchanter's Amulet is a 1 in 3 chance at Swamp Chest again{/li} +{li}Trader now pays an Enchanter's Amulet if you can get ahold of the required items{/li} +{li}Magic Ring now has requirements(gives use to Sapphire Ring){/li} +{li}Scarab Armlet gains +1 int bonus and is equipped in shield slot{/li} +{li}Long Sword added as a very rare Emo drop{/li} +{li}Ice Gladius gains +5% crit def{/li} +{li}Detect Magic(miteyo) now works on more NPCs and even players focused on Astral Soul, level 2 or higher{/li} +{li}Pinkie Helmet requires a Pinkie Hat to make, but gains 5 more def(15 def, -30 matk){/li} +{li}Troll/Floyd now have a base attack of 50(was 1) to promote use without overpowering real classes{/li} +{li}Certain 2-handed weapons have had def since our last update. Descriptions match now{/li} +{li}Many enhancements to non-Arkim daily point items/spawn rates to alleviate Arkim a bit{/li} +{li}Doomsday battles are temporarily disabled until bugs and content changes are resolved{/li} +{li}A few mods were finally added(alternate effects/music) for use with M+/MV{/li} +{li}Golden Platemail and Golden Warlord Plate gain 5% and 10% crit def, respectively{/li} +{li}Rainerang has its own sounds now{/li} +{li}Killing Reaper(GM controlled) can now yield boss points to MVP and improvements/additions made to its spells{/li} +{li}Extensive work on portalling system for on-the-fly GM use and future additions{/li} +{li}Misc bug fixes, edits, improvements and additions on many fronts{/li} +{li}Many enhancements and updates to the Mana client{/li} +{/ul} + +Last but, not least; A special thanks to all our invisible admins and supporters that keep this place running(a continuous effort). +Without them, there is no TMW. + +{author:Ledmitz} diff --git a/world/map/news.d/2024-12-18-christmas.txt b/world/map/news.d/2024-12-18-christmas.txt new file mode 100644 index 00000000..df46650d --- /dev/null +++ b/world/map/news.d/2024-12-18-christmas.txt @@ -0,0 +1,31 @@ +{title:Merry Christmas! - 2024} +{date:2024-12-18} + +{b}{red}M{/red}{green}e{/green}{red}r{/red}{green}r{/green}{red}y{/red} {green}C{/green}{red}h{/red}{green}r{/green}{red}i{/red}{green}s{/green}{red}t{/red}{green}m{/green}{red}a{/red}{green}s{/green}{red}!{/red} +Some of our new work includes:{/b} + +Various NPC and other text corrections, Maze chests can now be reset (099-8), Candor +reward scaling corrected (for GM controlled difficulty), anchor stone improvements, +more mana battery effects were added (Xmas battle), two bug fixes to new GM teleport +system, new characters start game with a ragged shirt, mob spawning on a +parent mobs death and implemented on a few mobs (surprise!), many new mobs are now +live (seek them out), name values added to mods, since names don't show, more slime +sounds added. + +New mobs and items: +{ul} +{li}Black armors (not yet craft-able){/li} +{li}Black Rose Hat (not yet craft-able){/li} +{li}Snowshroom{/li} +{li}Snowshroom Hat{/li} +{li}Blue/Green/Red/Yellow Super Slimes{/li} +{li}Head Slime... say WHAT!?{/li} +{li}Golden Skull{/li} +{li}Golden Skull Mask{/li} +{li}Wicked Mushroom Hat{/li} +{li}Ice Skull Mask{/li} +{/ul} + +Don't forget about the Christmas quest. This is a good chance to get a free level up. + +{author:Ledmitz} diff --git a/world/map/npc/001-1/_mobs.txt b/world/map/npc/001-1/_mobs.txt index 12ef200d..a87784b4 100644 --- a/world/map/npc/001-1/_mobs.txt +++ b/world/map/npc/001-1/_mobs.txt @@ -2,7 +2,9 @@ // Tulimshar Port mobs 001-1,32,59,10,11|monster|GreenSlime|1005,8,100000ms,30000ms +001-1,32,59,10,11|monster|GreenSuperSlime|1235,2,100000ms,30000ms 001-1,45,100,10,11|monster|GreenSlime|1005,8,100000ms,30000ms +001-1,45,100,10,11|monster|GreenSuperSlime|1235,2,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/stat_reset.txt b/world/map/npc/001-1/stat_reset.txt index e8c61ca3..78835d1a 100644 --- a/world/map/npc/001-1/stat_reset.txt +++ b/world/map/npc/001-1/stat_reset.txt @@ -5,4 +5,8 @@ set @npcname$, "Malivox"; callfunc "StatReset"; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/001-2/pauline.txt b/world/map/npc/001-2/pauline.txt index 497116f6..8c67e00d 100644 --- a/world/map/npc/001-2/pauline.txt +++ b/world/map/npc/001-2/pauline.txt @@ -283,6 +283,10 @@ L_Close: S_Update_Mask: set QUEST_MAGIC2, (QUEST_MAGIC2 & ~(@Pauline_MASK)) | (@pauline_state << @Pauline_SHIFT); return; + +OnInit: + set .IS_MAGIC, 1; + end; } 001-2,79,74,0|script|PaulineDebug|208 diff --git a/world/map/npc/001-2/tondar.txt b/world/map/npc/001-2/tondar.txt index cb3a1070..e36cb66a 100644 --- a/world/map/npc/001-2/tondar.txt +++ b/world/map/npc/001-2/tondar.txt @@ -55,4 +55,8 @@ L_nopay: L_end: close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/001-2/wizards.txt b/world/map/npc/001-2/wizards.txt index e51e7a66..aedeaa7b 100644 --- a/world/map/npc/001-2/wizards.txt +++ b/world/map/npc/001-2/wizards.txt @@ -11,7 +11,7 @@ close; OnInit: - if (puppet("001-2", 104, 19, "Desert Mana Seed#_M", 166) < 1) mapexit; + if (puppet("001-2", 104, 19, "Desert Mana Seed", 166) < 1) mapexit; if (puppet("001-2", 99, 22, "Wizard#1", 355) < 1) mapexit; if (puppet("001-2", 92, 24, "Wizard#2", 356) < 1) mapexit; if (puppet("001-2", 92, 30, "Wizard#3", 357) < 1) mapexit; @@ -21,5 +21,16 @@ OnInit: if (puppet("001-2", 117, 30, "Wizard#7", 361) < 1) mapexit; if (puppet("001-2", 110, 32, "Wizard#8", 362) < 1) mapexit; if (puppet("001-2", 104, 27, "Arch-Wizard#9", 354) < 1) mapexit; + set .IS_MAGIC, 1, getnpcid("Desert Mana Seed"); + set .IS_MAGIC, 1, getnpcid("Wizard#1"); + set .IS_MAGIC, 1, getnpcid("Wizard#2"); + set .IS_MAGIC, 1, getnpcid("Wizard#3"); + set .IS_MAGIC, 1, getnpcid("Wizard#4"); + set .IS_MAGIC, 1, getnpcid("Wizard#5"); + set .IS_MAGIC, 1, getnpcid("Wizard#6"); + set .IS_MAGIC, 1, getnpcid("Wizard#7"); + set .IS_MAGIC, 1, getnpcid("Wizard#8"); + set .IS_MAGIC, 1, getnpcid("Arch-Wizard#9"); end; + } diff --git a/world/map/npc/002-1/elanore.txt b/world/map/npc/002-1/elanore.txt index 15e8439e..3d398454 100644 --- a/world/map/npc/002-1/elanore.txt +++ b/world/map/npc/002-1/elanore.txt @@ -36,7 +36,7 @@ L_Return: return; } -002-1,75,62,0|script|Elanore#_M|108 +002-1,75,62,0|script|Elanore|108 { set @has_magic, getskilllv(SKILL_MAGIC); @@ -619,4 +619,8 @@ L_Close: S_update_var: set QUEST_MAGIC2, (QUEST_MAGIC2 & ~(@Q_MASK) | (@Q_status << @Q_SHIFT)); return; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/002-1/soul-menhir.txt b/world/map/npc/002-1/soul-menhir.txt index fa2a4508..06387baf 100644 --- a/world/map/npc/002-1/soul-menhir.txt +++ b/world/map/npc/002-1/soul-menhir.txt @@ -14,4 +14,8 @@ set @x, 0; set @y, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/002-1/traveler.txt b/world/map/npc/002-1/traveler.txt index 975786ae..dadbeff0 100644 --- a/world/map/npc/002-1/traveler.txt +++ b/world/map/npc/002-1/traveler.txt @@ -8,4 +8,8 @@ set @NpcTravelBit, $@tulimshar_bit; callfunc "Traveler"; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/002-2/stranger.txt b/world/map/npc/002-2/stranger.txt index 84932c8e..cb7d5b96 100644 --- a/world/map/npc/002-2/stranger.txt +++ b/world/map/npc/002-2/stranger.txt @@ -312,7 +312,7 @@ L_Teal: goto L_DyeChecks; L_Lime: - // Panchua + // Pachua set @warpTowelName$, "LimeHitchhikersTowel"; setarray @towelPowder$, "EmeraldPowder", "TopazPowder"; setarray @towelPowderCnt, 1, 1; diff --git a/world/map/npc/002-3/traveler.txt b/world/map/npc/002-3/traveler.txt index 48175be8..ebaf07da 100644 --- a/world/map/npc/002-3/traveler.txt +++ b/world/map/npc/002-3/traveler.txt @@ -8,4 +8,8 @@ set @NpcTravelBit, $@tul_mine_bit; callfunc "Traveler"; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/002-5/_mobs.txt b/world/map/npc/002-5/_mobs.txt index 700685c8..5684364a 100644 --- a/world/map/npc/002-5/_mobs.txt +++ b/world/map/npc/002-5/_mobs.txt @@ -6,15 +6,16 @@ 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,68,100,12,2|monster|YellowSlime|1007,4,100000ms,30000ms +002-5,90,61,6,2|monster|YellowSlime|1007,1,100000ms,30000ms 002-5,93,38,8,2|monster|YellowSlime|1007,2,100000ms,30000ms +002-5,81,69,31,64|monster|YellowSuperSlime|1233,2,100000ms,30000ms 002-5,62,62,5,43|monster|AngryFireGoblin|1108,3,100000ms,30000ms diff --git a/world/map/npc/003-4/_mobs.txt b/world/map/npc/003-4/_mobs.txt index 18913d0b..56dce567 100644 --- a/world/map/npc/003-4/_mobs.txt +++ b/world/map/npc/003-4/_mobs.txt @@ -5,6 +5,7 @@ 003-4,0,0,0,0|monster|SeaSlime|1033,15,100000ms,30000ms 003-4,120,31,22,22|monster|SeaSlime|1033,5,100000ms,30000ms 003-4,119,68,105,101|monster|GreenSlime|1005,35,100000ms,30000ms +003-4,119,68,105,101|monster|GreenSuperSlime|1235,7,100000ms,30000ms 003-4,134,69,76,71|monster|RedScorpion|1004,20,100000ms,30000ms 003-4,35,25,10,3|monster|MountainSnake|1026,1,700000ms,600000ms 003-4,115,68,42,96|monster|Croc|1193,10,10000ms,30000ms diff --git a/world/map/npc/003-4/time-traveler.txt b/world/map/npc/003-4/time-traveler.txt index 00a875f5..148ab95e 100644 --- a/world/map/npc/003-4/time-traveler.txt +++ b/world/map/npc/003-4/time-traveler.txt @@ -11,6 +11,10 @@ L_Warp: close2; warp "003-4", 171, 76; close; + +OnInit: + set .IS_MAGIC, 1; + end; } 003-4,165,73,0|script|Time Traveler#34|184 @@ -30,4 +34,8 @@ L_What: L_Leave: mes "Walk East from here to escape the time dilation bubble."; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/006-1/_mobs.txt b/world/map/npc/006-1/_mobs.txt index c18464c8..ffb28ffa 100644 --- a/world/map/npc/006-1/_mobs.txt +++ b/world/map/npc/006-1/_mobs.txt @@ -14,11 +14,12 @@ 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,58,49,3,3|monster|GreenSlime|1005,3,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,40,64,26,20|monster|GreenSuperSlime|1235,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/spirit.txt b/world/map/npc/006-1/spirit.txt index 4796121a..3c464383 100644 --- a/world/map/npc/006-1/spirit.txt +++ b/world/map/npc/006-1/spirit.txt @@ -282,14 +282,22 @@ S_update_var: return; } -006-1,67,68,0|script|#EarthImp0#_M|400 +006-1,67,68,0|script|#EarthImp0|400 { callfunc "EarthImpTouch"; close; + +OnInit: + set .IS_MAGIC, 1; + end; } -006-1,68,68,0|script|#EarthImp1#_M|400 +006-1,68,68,0|script|#EarthImp1|400 { callfunc "EarthImpTouch"; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/006-1/traveler.txt b/world/map/npc/006-1/traveler.txt index 7c84e040..a2f02b24 100644 --- a/world/map/npc/006-1/traveler.txt +++ b/world/map/npc/006-1/traveler.txt @@ -8,4 +8,8 @@ set @NpcTravelBit, $@pachua_bit; callfunc "Traveler"; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/006-1/tree.txt b/world/map/npc/006-1/tree.txt index 57209d24..ef5fb113 100644 --- a/world/map/npc/006-1/tree.txt +++ b/world/map/npc/006-1/tree.txt @@ -155,8 +155,12 @@ L_Close: } -006-1,82,59,0|script|#DruidTree0#_M|400 +006-1,82,59,0|script|#DruidTree0|400 { callfunc "QuestTreeTouch"; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/006-3/_mobs.txt b/world/map/npc/006-3/_mobs.txt index 93d6102c..08aa2778 100644 --- a/world/map/npc/006-3/_mobs.txt +++ b/world/map/npc/006-3/_mobs.txt @@ -18,12 +18,20 @@ 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,87,74,26,9|monster|RedSuperSlime|1234,1,15000ms,10000ms +006-3,120,77,9,19|monster|RedSlime|1008,3,15000ms,10000ms +006-3,120,77,9,19|monster|RedSuperSlime|1234,1,15000ms,10000ms 006-3,101,85,14,8|monster|RedSlime|1008,4,15000ms,10000ms +006-3,101,85,14,8|monster|RedSuperSlime|1234,1,15000ms,10000ms +006-3,30,88,13,20|monster|RedSlime|1008,3,90000ms,30000ms +006-3,30,88,13,20|monster|RedSuperSlime|1234,1,90000ms,30000ms 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 +006-3,83,107,13,14|monster|YellowSuperSlime|1233,1,100000ms,30000ms +006-3,119,117,15,14|monster|GoldenSkull|1230,3,100000ms,30000ms +006-3,90,125,17,7|monster|GoldenSkull|1230,2,100000ms,30000ms +006-3,44,124,29,7|monster|GoldenSkull|1230,2,100000ms,30000ms diff --git a/world/map/npc/008-1/diryn.txt b/world/map/npc/008-1/diryn.txt index 6570f1d8..7e27e4e0 100644 --- a/world/map/npc/008-1/diryn.txt +++ b/world/map/npc/008-1/diryn.txt @@ -8,4 +8,8 @@ set @NpcTravelBit, $@hurnscald_bit; callfunc "Traveler"; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/009-1/soul-menhir.txt b/world/map/npc/009-1/soul-menhir.txt index 3b8c5cee..da8a1224 100644 --- a/world/map/npc/009-1/soul-menhir.txt +++ b/world/map/npc/009-1/soul-menhir.txt @@ -1,5 +1,4 @@ // - 009-1,53,40,0|script|Soul Menhir#hurnscald|344 { set @map$, "009-1"; @@ -14,4 +13,8 @@ set @x, 0; set @y, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/009-2/trader.txt b/world/map/npc/009-2/trader.txt index 46ccafac..d66968e0 100644 --- a/world/map/npc/009-2/trader.txt +++ b/world/map/npc/009-2/trader.txt @@ -62,6 +62,7 @@ L_Trademenu: "Do you have Iron Powder?", L_Iron, "How about Sulphur Powder?", L_Sulphur, "I need Medium Healing Potions.", L_Healpots, + "I'd like to acquire an Enchanter's Amulet.", L_Eamulet, "I think I have everything I need, thanks.", L_Close; L_Iron: @@ -85,6 +86,13 @@ L_Healpots: "Alright.", L_Pots, "Whoa, that's way too much.", L_Close; +L_Eamulet: + mes "[Trader]"; + mes "\"These amulets are quite rare. Two times as rare as a Magic Ring, they say. I do have one though and would trade it off for two Magic Rings and thirteen Blood Stones. I've had a hard time finding those stones.\""; + menu + "Alright.", L_GetEamuletConfirm, + "I'd better check the shops out first.", L_Close; + L_Ipowder: if (countitem("IronOre") < 1) goto L_Missing; if (Zeny < @Ironprice) goto L_NotEnoughMoney; @@ -127,6 +135,27 @@ L_Pots: "Yes.", L_Trademenu, "No.", L_No; +L_GetEamuletConfirm: + mes "[Trader]"; + mes "\"Are you sure you wish to trade for the Enchanter's Amulet? All trades are final.\""; + menu + "No, I'd better think this over a bit more.", L_No, + "No thanks. I've changed my mind. What else do you trade, again?", L_Trademenu, + "Yes, I'm positive.", L_GetEamulet; + +L_GetEamulet: + if (countitem("MagicRing") < 2) goto L_Missing; + if (countitem("Bloodstone") < 13) goto L_Missing; + delitem "MagicRing", 1; + delitem "MagicRing", 1; + delitem "Bloodstone", 13; + getitem "EnchantersAmulet", 1; + mes "[Trader]"; + mes "\"Make good use of your new amulet. Would you like to trade anything else?\""; + menu + "Yes.", L_Trademenu, + "No.", L_No; + L_Full: mes "[Trader]"; mes "\"You must have been making a lot of trades...your bag is completely full! Come back after you've made some room.\""; diff --git a/world/map/npc/009-2/wyara.txt b/world/map/npc/009-2/wyara.txt index 1b912019..51e2ada6 100644 --- a/world/map/npc/009-2/wyara.txt +++ b/world/map/npc/009-2/wyara.txt @@ -1,7 +1,7 @@ // ---------------------------------------- // Wyara the Hurnscald witch // ---------------------------------------- -009-2,121,26,0|script|Wyara#_M|103 +009-2,121,26,0|script|Wyara|103 { set @Q_MASK, NIBBLE_2_MASK; set @Q_SHIFT, NIBBLE_2_SHIFT; @@ -554,4 +554,8 @@ L_Close: S_update_var: set QUEST_MAGIC2, (QUEST_MAGIC2 & ~(@Q_MASK) | (@Q_status << @Q_SHIFT)); return; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/009-3/_mobs.txt b/world/map/npc/009-3/_mobs.txt index b02ee643..5b4f58c6 100644 --- a/world/map/npc/009-3/_mobs.txt +++ b/world/map/npc/009-3/_mobs.txt @@ -2,7 +2,9 @@ // Hurnscald Cave mobs 009-3,0,0,0,0|monster|YellowSlime|1007,20,0ms,0ms +009-3,0,0,0,0|monster|YellowSuperSlime|1233,4,100000ms,30000ms 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,63,75,126,150|monster|RedSuperSlime|1234,7,100000ms,30000ms 009-3,145,75,110,151|monster|CaveMaggot|1056,20,100000ms,30000ms 009-3,152,37,53,33|monster|Ratto|1192,6,10000ms,30000ms diff --git a/world/map/npc/009-3/sword.txt b/world/map/npc/009-3/sword.txt index 1a427731..9649d730 100644 --- a/world/map/npc/009-3/sword.txt +++ b/world/map/npc/009-3/sword.txt @@ -1,4 +1,4 @@ -009-3,26,100,0|script|#MysticSword#_M|400 +009-3,26,100,0|script|#MysticSword|400 { if (getskilllv(SKILL_MAGIC)) goto L_message; @@ -173,4 +173,8 @@ L_farewell: S_update_var: set QUEST_MAGIC, (QUEST_MAGIC & ~(@Q_MASK) | (@Q_status << @Q_SHIFT)); return; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/009-4/orum.txt b/world/map/npc/009-4/orum.txt index df9ac2d9..f7fea706 100644 --- a/world/map/npc/009-4/orum.txt +++ b/world/map/npc/009-4/orum.txt @@ -591,6 +591,10 @@ L_Close: set @Torch, 0; set @TorchColor, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } function|script|SetUpOrumQuest { @@ -626,4 +630,8 @@ function|script|SetUpOrumQuest callfunc "SetTorchColor"; callfunc "SetTorchIntensity"; return; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/009-4/waric.txt b/world/map/npc/009-4/waric.txt index aa366318..23c03517 100644 --- a/world/map/npc/009-4/waric.txt +++ b/world/map/npc/009-4/waric.txt @@ -19,6 +19,10 @@ next; mes "\"Your fate is up to Waric now... don't expect me to do anything else for you.\""; close; + +OnInit: + set .IS_MAGIC, 1; + end; } 009-4,118,42,0|script|Waric#trap|153 @@ -87,11 +91,15 @@ L_Explain: misceffect 10; warp "008-1", 65, 90; getexp @EXP_LEARNED_ALOT, 0; - mes "You awake on your back with a squirrel sitting on top of you arranging it's acorns. It quickly gathers them up and runs off as it sees you looking at it them."; + mes "You awaken on your back with a squirrel sitting on top of you arranging its acorns. It quickly gathers them up and runs off as it sees you looking at them."; monster "008-1", 65, 90, "", 1038, 1; goto L_Close; L_Close: set @EXP_LEARNED_ALOT, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/011-1/auldsbel.txt b/world/map/npc/011-1/auldsbel.txt index 8f8fe66c..a289f86a 100644 --- a/world/map/npc/011-1/auldsbel.txt +++ b/world/map/npc/011-1/auldsbel.txt @@ -1,7 +1,7 @@ // Auldsbel the Wizard // Transmutation Magic expert -011-1,50,68,0|script|Auldsbel#_M|168 +011-1,50,68,0|script|Auldsbel|168 { set @mexp, MAGIC_EXPERIENCE & 65535; @@ -943,7 +943,7 @@ L_Next8: mes "\"I suggest that you run.\""; next; misceffect sfx_magic_transmute; - monster "this", 50, 68, "", 1034, 4, "Auldsbel#_M::OnSnakeDeath"; + monster "this", 50, 68, "", 1034, 4, "Auldsbel::OnSnakeDeath"; close; OnSnakeDeath: @@ -1287,4 +1287,8 @@ S_update_var: (QUEST_MAGIC & ~(@Q_MASK) | (@Q_status << @Q_SHIFT)); return; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/011-6/_mobs.txt b/world/map/npc/011-6/_mobs.txt index 0d6748a8..f954a13f 100644 --- a/world/map/npc/011-6/_mobs.txt +++ b/world/map/npc/011-6/_mobs.txt @@ -30,17 +30,19 @@ 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,92,77,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,31,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,77,65,111,82|monster|YellowSuperSlime|1233,5,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,131,205,9,12|monster|YellowSlime|1007,2,30000ms,100000ms +011-6,76,203,120,63|monster|YellowSuperSlime|1233,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 diff --git a/world/map/npc/012-1/flowerpentagram2.txt b/world/map/npc/012-1/flowerpentagram2.txt index 3ce479e9..715b2611 100644 --- a/world/map/npc/012-1/flowerpentagram2.txt +++ b/world/map/npc/012-1/flowerpentagram2.txt @@ -94,4 +94,8 @@ L_PlacedFifthFlower: L_Close: set @localMonsterCount, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/012-3/beheader.txt b/world/map/npc/012-3/beheader.txt index ddd46c53..34676a50 100644 --- a/world/map/npc/012-3/beheader.txt +++ b/world/map/npc/012-3/beheader.txt @@ -91,7 +91,7 @@ L_Later: mes ""; mes "[The Beheader]"; mes "\"Time passes so quickly. It would seem that later is now. I wonder if now is then, then. Hmmmm...\""; - if (!(FLAGS & FLAG_GOT_BEHEADER_SWORD)) goto L_MaybeBeheader; + if (!QL_BEHEADER_COMPLETE) goto L_MaybeBeheader; // NOTE: Room for future expansion if needed. // Previous text: "Some February, I don't know. If you want to help, go to Hurnscald square, look for the noisy person with an AFK Cap which is always sitting with their kitty, and tell them to start working. That might just do the trick." // The "noisy person w/ an AFK Cap and a kytty" is Jesusalva (script author) @@ -104,9 +104,9 @@ L_MaybeBeheader: "Can I behead Terranites on my own?", L_Beheader; L_Beheader: - if (FLAGS & FLAG_GOT_BEHEADER_SWORD) goto L_Again; - if (TERRAC == 1501) goto L_Finish; - if (TERRAC > 0) goto L_Status; + if (QL_BEHEADER_COMPLETE) goto L_Again; + if (QL_BEHEADER_TERRAC == 1501) goto L_Finish; + if (QL_BEHEADER_TERRAC > 0) goto L_Status; mes ""; mes "[The Beheader]"; mes "\"You obviously know nothing about Terranite Anatomy, hahaha!\""; @@ -132,13 +132,14 @@ L_Accept: mes ""; mes "[The Beheader]"; mes "So... Hmm, lemme think... Ah, I know! Thou shall ##Bkill me 1500 [@@m1062|@@]##b. Why? Because that's pointless, and you want a weapon you won't be able to use, so a pointless task for a pointless reward! Now get going!"; - set TERRAC, 1; + set QL_BEHEADER_TERRAC, 1; close; L_Status: mes ""; mes "[The Beheader]"; - mes "\"Get going, running in circles and amusing me, you only killed "+(TERRAC-1)+"/1500 [@@m1062|@@] until now.\""; + mes "\"Get going, running in circles and amusing me, you only killed " + + (QL_BEHEADER_TERRAC-1)+"/1500 [@@m1062|@@] until now.\""; close; L_Again: @@ -177,8 +178,8 @@ L_Finish: getitem "Beheader", 1; getexp 1000000, 0; - set FLAGS, FLAGS | FLAG_GOT_BEHEADER_SWORD; - set TERRAC, 0; + set QL_BEHEADER_COMPLETE, 1; + set QL_BEHEADER_TERRAC, 0; mes "[The Beheader]"; mes "\"Anyway, a deal is a deal and here is your [@@576|@@]. I hope you can actually make good use of it!\""; diff --git a/world/map/npc/012-3/mana-seed.txt b/world/map/npc/012-3/mana-seed.txt index 057665e0..73e1828f 100644 --- a/world/map/npc/012-3/mana-seed.txt +++ b/world/map/npc/012-3/mana-seed.txt @@ -1,4 +1,4 @@ -012-3,62,130,0|script|Forest Mana Seed#_M|166 +012-3,62,130,0|script|Forest Mana Seed|166 { setarray @magic_exp_needed, 0, // level 0 @@ -279,4 +279,8 @@ L_magic_destroy: L_end: close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/012-3/traveler.txt b/world/map/npc/012-3/traveler.txt index b3c158ea..9f497dab 100644 --- a/world/map/npc/012-3/traveler.txt +++ b/world/map/npc/012-3/traveler.txt @@ -8,4 +8,8 @@ set @NpcTravelBit, $@terranite_cave_bit; callfunc "Traveler"; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/012-4/_mobs.txt b/world/map/npc/012-4/_mobs.txt index 142ec427..eb678883 100644 --- a/world/map/npc/012-4/_mobs.txt +++ b/world/map/npc/012-4/_mobs.txt @@ -17,18 +17,10 @@ 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 @@ -39,9 +31,30 @@ 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,254,163,19,46|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,254,163,19,46|monster|YellowSuperSlime|1233,2,100000ms,30000ms +012-4,167,175,17,22|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,167,175,17,22|monster|YellowSuperSlime|1233,2,100000ms,30000ms +012-4,140,131,17,22|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,140,131,17,22|monster|YellowSuperSlime|1233,2,100000ms,30000ms +012-4,42,128,17,9|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,42,128,17,9|monster|YellowSuperSlime|1233,2,100000ms,30000ms +012-4,69,89,17,21|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,69,89,17,21|monster|YellowSuperSlime|1233,2,100000ms,30000ms +012-4,90,137,17,22|monster|YellowSlime|1007,10,100000ms,30000ms +012-4,90,137,17,22|monster|YellowSuperSlime|1233,2,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,354,106,19,46|monster|YellowSuperSlime|1233,2,100000ms,30000ms +012-4,148,176,17,22|monster|RedSlime|1008,20,100000ms,30000ms +012-4,148,176,17,22|monster|RedSuperSlime|1234,4,100000ms,30000ms +012-4,131,88,17,22|monster|RedSlime|1008,15,100000ms,30000ms +012-4,131,88,17,22|monster|RedSuperSlime|1234,3,100000ms,30000ms 012-4,389,81,33,15|monster|RedSlime|1008,20,100000ms,30000ms +012-4,389,81,33,15|monster|RedSuperSlime|1234,4,100000ms,30000ms +012-4,342,139,17,22|monster|RedSlime|1008,15,100000ms,30000ms +012-4,342,139,17,22|monster|RedSuperSlime|1234,3,100000ms,30000ms +012-4,322,141,17,22|monster|RedSlime|1008,20,100000ms,30000ms +012-4,322,141,17,22|monster|RedSuperSlime|1234,4,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 @@ -55,13 +68,12 @@ 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,80,110,9,5|monster|Bat|1017,5,100000ms,30000ms +012-4,95,180,9,5|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/_warps.txt b/world/map/npc/012-4/_warps.txt index eaff1897..354ffbc9 100644 --- a/world/map/npc/012-4/_warps.txt +++ b/world/map/npc/012-4/_warps.txt @@ -4,3 +4,4 @@ 012-4,193,58|warp|-1,-1,012-3,448,62 012-4,363,26|warp|-1,-1,012-4,474,187 012-4,474,188|warp|-1,-1,012-4,363,27 +012-4,278,73|warp|-1,-1,012-5,217,198 diff --git a/world/map/npc/012-5/_import.txt b/world/map/npc/012-5/_import.txt new file mode 100644 index 00000000..e7f2912d --- /dev/null +++ b/world/map/npc/012-5/_import.txt @@ -0,0 +1,6 @@ +// Map 012-5: Lower Terranite Cave +// This file is generated automatically. All manually added changes will be removed when running the Converter. +map: 012-5 +npc: npc/012-5/_mobs.txt +npc: npc/012-5/_nodes.txt +npc: npc/012-5/_warps.txt diff --git a/world/map/npc/012-5/_mobs.txt b/world/map/npc/012-5/_mobs.txt new file mode 100644 index 00000000..300c5c16 --- /dev/null +++ b/world/map/npc/012-5/_mobs.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Lower Terranite Cave mobs + diff --git a/world/map/npc/012-5/_nodes.txt b/world/map/npc/012-5/_nodes.txt new file mode 100644 index 00000000..52903884 --- /dev/null +++ b/world/map/npc/012-5/_nodes.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Lower Terranite Cave nodes + +// (no nodes) diff --git a/world/map/npc/012-5/_warps.txt b/world/map/npc/012-5/_warps.txt new file mode 100644 index 00000000..32cd2333 --- /dev/null +++ b/world/map/npc/012-5/_warps.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Lower Terranite Cave warps + +012-5,217,199|warp|-1,-1,012-4,278,74 diff --git a/world/map/npc/013-1/flowerpentagram.txt b/world/map/npc/013-1/flowerpentagram.txt index 001b7e0a..5c5ec79b 100644 --- a/world/map/npc/013-1/flowerpentagram.txt +++ b/world/map/npc/013-1/flowerpentagram.txt @@ -86,6 +86,10 @@ S_CleanUp: killmonster "013-1", "#FlowerPentagram::OnAScorpionDeath"; killmonster "013-1", "#FlowerPentagram::OnBScorpionDeath"; return; + +OnInit: + set .IS_MAGIC, 1; + end; } function|script|FlowerPentagramCount diff --git a/world/map/npc/013-1/sagatha.txt b/world/map/npc/013-1/sagatha.txt index fe2a4e6f..07348181 100644 --- a/world/map/npc/013-1/sagatha.txt +++ b/world/map/npc/013-1/sagatha.txt @@ -72,7 +72,7 @@ L_next: } //---------------------------------------- -013-1,131,24,0|script|Sagatha#_M|167 +013-1,131,24,0|script|Sagatha|167 { callfunc "SagathaStatus"; @@ -444,4 +444,8 @@ S_update_var: (QUEST_MAGIC & ~(@Q_MASK) | (@Q_status << @Q_SHIFT)); return; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/013-1/traveler.txt b/world/map/npc/013-1/traveler.txt index 7439b8d8..acbe4d29 100644 --- a/world/map/npc/013-1/traveler.txt +++ b/world/map/npc/013-1/traveler.txt @@ -4,4 +4,8 @@ set @NpcTravelBit, $@magic_house_bit; callfunc "Traveler"; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/013-2/notes.txt b/world/map/npc/013-2/notes.txt index 3a0215b9..f412668b 100644 --- a/world/map/npc/013-2/notes.txt +++ b/world/map/npc/013-2/notes.txt @@ -39,6 +39,10 @@ L_Close: set @fixedMirror, 1; callfunc "useMirror"; close; + +OnInit: + set .IS_MAGIC, 1; + end; } // Warp to wood clearings @@ -72,6 +76,10 @@ L_PlaceThree: L_Close: set @dest, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } // Warp to desert @@ -104,6 +112,10 @@ L_PlaceThree: L_Close: set @dest, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } // Warp to snow area @@ -135,6 +147,10 @@ L_Cave: L_Close: set @dest, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } // Warp to Inns @@ -166,6 +182,10 @@ L_PlaceThree: L_Close: set @dest, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } // Warp to mines @@ -197,6 +217,10 @@ L_PlaceThree: L_Close: set @dest, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } // Death @@ -208,6 +232,10 @@ L_Close: next; heal -Hp, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } // Naked @@ -219,4 +247,8 @@ L_Close: next; nude; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/013-2/wizard.txt b/world/map/npc/013-2/wizard.txt index 13f3fc9c..7a3fd822 100644 --- a/world/map/npc/013-2/wizard.txt +++ b/world/map/npc/013-2/wizard.txt @@ -1,4 +1,4 @@ -013-2,66,39,0|script|Old Wizard#_W|116 +013-2,66,39,0|script|Old Wizard|116 { set @has_magic, getskilllv(SKILL_MAGIC); set MAGIC_FLAGS, MAGIC_FLAGS | MFLAG_KNOWS_OLD_WIZARD; @@ -155,4 +155,8 @@ L_Agree: L_Close: set @has_magic, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/013-3/_mobs.txt b/world/map/npc/013-3/_mobs.txt index 0560cc37..61ea8940 100644 --- a/world/map/npc/013-3/_mobs.txt +++ b/world/map/npc/013-3/_mobs.txt @@ -17,6 +17,9 @@ 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,145,36,20,15|monster|RedSuperSlime|1234,5,80000ms,40000ms +013-3,65,39,7,4|monster|RedSlime|1008,8,40000ms,20000ms +013-3,65,39,7,4|monster|RedSuperSlime|1234,2,40000ms,20000ms 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 @@ -24,7 +27,6 @@ 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 diff --git a/world/map/npc/013-3/barrier.txt b/world/map/npc/013-3/barrier.txt index d7875009..680bb0a4 100644 --- a/world/map/npc/013-3/barrier.txt +++ b/world/map/npc/013-3/barrier.txt @@ -1,6 +1,6 @@ // -013-3,71,21,0|script|#DemonMineBarrier1#_M|32767,1,0 +013-3,71,21,0|script|#DemonMineBarrier1|32767,1,0 { set @state, ((QUEST_Hurnscald & NIBBLE_2_MASK) >> NIBBLE_2_SHIFT); @@ -26,4 +26,8 @@ L_End: S_Update_Mask: set QUEST_Hurnscald, (QUEST_Hurnscald & ~(NIBBLE_2_MASK)) | (@state << NIBBLE_2_SHIFT); return; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/015-1/sword.txt b/world/map/npc/015-1/sword.txt index be23e23a..bbf60b72 100644 --- a/world/map/npc/015-1/sword.txt +++ b/world/map/npc/015-1/sword.txt @@ -1,4 +1,4 @@ -015-1,97,97,0|script|#MagicSword#_M|400 +015-1,97,97,0|script|#MagicSword|400 { if (getskilllv(SKILL_MAGIC)) goto L_message; @@ -321,4 +321,8 @@ S_update_var: (QUEST_MAGIC & ~(@Q_MASK) | (@Q_status << @Q_SHIFT)); return; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/017-1/flowerpentagram1.txt b/world/map/npc/017-1/flowerpentagram1.txt index 64128b4b..5480ad60 100644 --- a/world/map/npc/017-1/flowerpentagram1.txt +++ b/world/map/npc/017-1/flowerpentagram1.txt @@ -79,4 +79,8 @@ L_PlacedFifthFlower: L_Close: set @localMonsterCount, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/017-1/flowerpentagram5.txt b/world/map/npc/017-1/flowerpentagram5.txt index f8947dbd..628a9433 100644 --- a/world/map/npc/017-1/flowerpentagram5.txt +++ b/world/map/npc/017-1/flowerpentagram5.txt @@ -137,4 +137,8 @@ L_PlacedFifthFlower: L_Close: set @localMonsterCount, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/017-4/guardingspirit.txt b/world/map/npc/017-4/guardingspirit.txt index 8fef95ed..06dc0a6b 100644 --- a/world/map/npc/017-4/guardingspirit.txt +++ b/world/map/npc/017-4/guardingspirit.txt @@ -1,6 +1,6 @@ // Author: Jenalya -017-4,173,47,0|script|#Guarding Spirit#_M|204,0,0 +017-4,173,47,0|script|#Guarding Spirit|204,0,0 { goto L_Talk; @@ -94,4 +94,8 @@ OnTouch: goto L_Block; warp "017-4", 201, 26; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/017-4/orum.txt b/world/map/npc/017-4/orum.txt index 213f14af..58c605a4 100644 --- a/world/map/npc/017-4/orum.txt +++ b/world/map/npc/017-4/orum.txt @@ -840,4 +840,8 @@ L_Close: set @REWARD_MONEY, 0; set @REWARD_EXP, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/017-4/waric.txt b/world/map/npc/017-4/waric.txt index 1fc489f3..55b794c8 100644 --- a/world/map/npc/017-4/waric.txt +++ b/world/map/npc/017-4/waric.txt @@ -383,6 +383,10 @@ L_Close: set @SUP_lvl, 0; set @SUP_xp, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } 017-1,74,32,0|script|DebugFlowerP|153 diff --git a/world/map/npc/017-9/_warps.txt b/world/map/npc/017-9/_warps.txt index 15bde415..424978bd 100644 --- a/world/map/npc/017-9/_warps.txt +++ b/world/map/npc/017-9/_warps.txt @@ -2,7 +2,7 @@ // GM Lounge warps 017-9,29,20|warp|-1,-1,020-1,60,75 -017-9,26,21|warp|-1,-1,009-1,43,45 -017-9,21,20|warp|-1,-1,001-1,54,118 +017-9,26,21|warp|-1,-1,009-1,42,44 +017-9,21,20|warp|-1,-1,001-1,55,118 017-9,31,20|warp|-1,-1,027-2,46,110 017-9,23,20|warp|-1,-1,029-1,34,95 diff --git a/world/map/npc/017-9/npcs.txt b/world/map/npc/017-9/npcs.txt index 9ba0e498..386a92c3 100644 --- a/world/map/npc/017-9/npcs.txt +++ b/world/map/npc/017-9/npcs.txt @@ -2,7 +2,7 @@ { if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; - warp "017-9", 27, 23; + warp "017-9", 26, 23; end; } diff --git a/world/map/npc/018-1/_mobs.txt b/world/map/npc/018-1/_mobs.txt index d1cfc6e1..9089bffc 100644 --- a/world/map/npc/018-1/_mobs.txt +++ b/world/map/npc/018-1/_mobs.txt @@ -14,17 +14,21 @@ 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,68,89,14,17|monster|Bat|1017,3,100000ms,50000ms +018-1,169,47,20,10|monster|RedSlime|1008,4,120000ms,30000ms +018-1,169,47,20,10|monster|RedSuperSlime|1234,1,120000ms,30000ms +018-1,96,47,18,11|monster|RedSlime|1008,3,100000ms,50000ms +018-1,96,47,18,11|monster|RedSuperSlime|1234,1,100000ms,50000ms 018-1,78,55,37,6|monster|RedSlime|1008,7,100000ms,50000ms +018-1,78,55,37,6|monster|RedSuperSlime|1234,2,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,152,26,25,13|monster|RedSuperSlime|1234,2,120000ms,30000ms 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/flowerpentagram3.txt b/world/map/npc/018-1/flowerpentagram3.txt index 857c412d..7f90965e 100644 --- a/world/map/npc/018-1/flowerpentagram3.txt +++ b/world/map/npc/018-1/flowerpentagram3.txt @@ -108,4 +108,8 @@ L_PlacedFifthFlower: L_Close: set @localMonsterCount, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/018-1/sword.txt b/world/map/npc/018-1/sword.txt index 8d5dc827..885c9532 100644 --- a/world/map/npc/018-1/sword.txt +++ b/world/map/npc/018-1/sword.txt @@ -1,4 +1,4 @@ -018-1,110,43,0|script|#IceSword#_M|400 +018-1,110,43,0|script|#IceSword|400 { if (getskilllv(SKILL_MAGIC)) goto L_message; @@ -8,4 +8,8 @@ L_message: mes "[Sword in Pond]"; mes "\"Zzzzzz.....\""; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/018-3/_mobs.txt b/world/map/npc/018-3/_mobs.txt index e2a4e491..d4817152 100644 --- a/world/map/npc/018-3/_mobs.txt +++ b/world/map/npc/018-3/_mobs.txt @@ -6,16 +6,21 @@ 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,99,111,17,41|monster|YellowSuperSlime|1233,2,100000ms,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,174,37,10,31|monster|YellowSuperSlime|1233,1,100000ms,30000ms 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,136,87,21,7|monster|YellowSuperSlime|1233,1,100000ms,30000ms 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,81,77,27,21|monster|RedSlime|1008,15,80000ms,40000ms +018-3,81,77,27,21|monster|RedSuperSlime|1234,3,80000ms,40000ms 018-3,172,94,17,17|monster|RedSlime|1008,10,60000ms,30000ms +018-3,172,94,17,17|monster|RedSuperSlime|1234,2,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 diff --git a/world/map/npc/018-3/evil-obelisk.txt b/world/map/npc/018-3/evil-obelisk.txt index 4ecc00b3..1d4cea7d 100644 --- a/world/map/npc/018-3/evil-obelisk.txt +++ b/world/map/npc/018-3/evil-obelisk.txt @@ -15,4 +15,8 @@ set @x1, 0; set @y1, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/018-3/sword.txt b/world/map/npc/018-3/sword.txt index 83e9c6f2..5dfbedbf 100644 --- a/world/map/npc/018-3/sword.txt +++ b/world/map/npc/018-3/sword.txt @@ -1,4 +1,4 @@ -018-3,71,127,0|script|#DemonSword#_M|400 +018-3,71,127,0|script|#DemonSword|400 { if (getskilllv(SKILL_MAGIC)) goto L_message; @@ -8,4 +8,8 @@ L_message: mes "[Sword in Rock]"; mes "\"Ouch... my head...\""; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/019-1/santa_helper.txt b/world/map/npc/019-1/santa_helper.txt index 9d8a21b9..56fbb02d 100644 --- a/world/map/npc/019-1/santa_helper.txt +++ b/world/map/npc/019-1/santa_helper.txt @@ -47,7 +47,7 @@ L_Yes: goto L_NoItem; getinventorylist; set @SantasHelper_Reward$, $@SantasHelper_Annual_Reward$[ rand(getarraysize($@SantasHelper_Annual_Reward$)) ]; - if ((@inventorylist_count > 99) || (checkweight(@SantasHelper_Reward$, 1) == 0)) + if (@inventorylist_count > 99) // Needs no weight check since all the presents weigh more than any of the rewards goto L_TooMany; mes "[Santa's Helper]"; mes "\"Great! Here is something for you\""; diff --git a/world/map/npc/019-1/snowman.txt b/world/map/npc/019-1/snowman.txt index 98b749df..ef26f3dd 100644 --- a/world/map/npc/019-1/snowman.txt +++ b/world/map/npc/019-1/snowman.txt @@ -43,7 +43,7 @@ L_Sure: if(countitem("CactusPotion") < @cactus_amount) goto L_NoItem; getinventorylist; - if (@inventorylist_count > 99) + if (@inventorylist_count > 99) // Needs no weight check since all the ingredients weigh more than the reward goto L_TooMany; delitem "Candy", @candy_amount; delitem "ChocolateBar", @chocolate_amount; diff --git a/world/map/npc/019-3/_mobs.txt b/world/map/npc/019-3/_mobs.txt index 3ba50e42..3bc4e946 100644 --- a/world/map/npc/019-3/_mobs.txt +++ b/world/map/npc/019-3/_mobs.txt @@ -1,5 +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 -019-3,0,4,0,0|monster|Bat|1017,50,100000ms,30000ms +019-3,0,0,0,0|monster|Moggun|1061,10,100000ms,30000ms +019-3,0,0,0,0|monster|Bat|1017,50,100000ms,30000ms diff --git a/world/map/npc/019-4/_mobs.txt b/world/map/npc/019-4/_mobs.txt index 6a23a017..f64744a1 100644 --- a/world/map/npc/019-4/_mobs.txt +++ b/world/map/npc/019-4/_mobs.txt @@ -5,3 +5,4 @@ 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 +019-4,0,0,0,0|monster|BlueSuperSlime|1236,1,45000ms,30000ms diff --git a/world/map/npc/020-1/soul-menhir.txt b/world/map/npc/020-1/soul-menhir.txt index c8f7740a..d9471f2b 100644 --- a/world/map/npc/020-1/soul-menhir.txt +++ b/world/map/npc/020-1/soul-menhir.txt @@ -14,4 +14,8 @@ set @x, 0; set @y, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/020-1/traveler.txt b/world/map/npc/020-1/traveler.txt index 421ed0e7..a5a5b9cf 100644 --- a/world/map/npc/020-1/traveler.txt +++ b/world/map/npc/020-1/traveler.txt @@ -4,4 +4,8 @@ set @NpcTravelBit, $@nivalis_bit; callfunc "Traveler"; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/020-3/_mobs.txt b/world/map/npc/020-3/_mobs.txt index 2e7ed4a0..f9d4cee7 100644 --- a/world/map/npc/020-3/_mobs.txt +++ b/world/map/npc/020-3/_mobs.txt @@ -1,7 +1,8 @@ // 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 -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 +020-3,40,36,29,4|monster|Moggun|1061,1,100000ms,30000ms +020-3,40,49,34,7|monster|Bluepar|1107,1,100000ms,30000ms +020-3,0,0,0,0|monster|Moggun|1061,20,0ms,0ms +020-3,0,0,0,0|monster|Bluepar|1107,10,0ms,0ms +020-3,0,0,0,0|monster|WhiteSlime|1093,20,0ms,0ms diff --git a/world/map/npc/021-3/_mobs.txt b/world/map/npc/021-3/_mobs.txt index 21102c60..714d10fd 100644 --- a/world/map/npc/021-3/_mobs.txt +++ b/world/map/npc/021-3/_mobs.txt @@ -8,6 +8,7 @@ 021-3,140,38,16,8|monster|AngryFireGoblin|1108,3,100000ms,30000ms 021-3,79,98,33,31|monster|BlackScorpion|1009,4,100000ms,30000ms 021-3,52,53,2,17|monster|GreenSlime|1005,4,40000ms,50000ms +021-3,52,53,2,17|monster|GreenSuperSlime|1235,1,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/025-4/battlecaves.txt b/world/map/npc/025-4/battlecaves.txt index 8acebf2a..8c281a35 100644 --- a/world/map/npc/025-4/battlecaves.txt +++ b/world/map/npc/025-4/battlecaves.txt @@ -75,6 +75,9 @@ L_no_root: mes "I don't have any roots in my inventory!"; close; +OnInit: + set .IS_MAGIC, 1; + end; } // --------------------- Cave 1 Checker ---------------------------- @@ -167,6 +170,10 @@ L_Close: L_no_root: mes "I don't have any roots in my inventory!"; close; + +OnInit: + set .IS_MAGIC, 1; + end; } // --------------------- Cave 2 Checker ---------------------------- @@ -258,6 +265,9 @@ L_no_root: mes "I don't have any roots in my inventory!"; close; +OnInit: + set .IS_MAGIC, 1; + end; } // --------------------- Cave 3 Checker ---------------------------- @@ -351,6 +361,9 @@ L_no_root: mes "I don't have any roots in my inventory!"; close; +OnInit: + set .IS_MAGIC, 1; + end; } // --------------------- Cave 4 Checker ---------------------------- @@ -445,6 +458,9 @@ L_no_root: mes "I don't have any roots in my inventory!"; close; +OnInit: + set .IS_MAGIC, 1; + end; } // --------------------- Cave 5 Checker ---------------------------- @@ -539,6 +555,9 @@ L_no_root: mes "I don't have any roots in my inventory!"; close; +OnInit: + set .IS_MAGIC, 1; + end; } // --------------------- Cave 6 Checker ---------------------------- @@ -635,6 +654,9 @@ L_no_root: mes "I don't have any roots in my inventory!"; close; +OnInit: + set .IS_MAGIC, 1; + end; } // --------------------- Cave 7 Checker ---------------------------- @@ -731,6 +753,9 @@ L_no_root: mes "I don't have any roots in my inventory!"; close; +OnInit: + set .IS_MAGIC, 1; + end; } // --------------------- Cave 8 Checker ---------------------------- @@ -827,6 +852,9 @@ L_no_root: mes "I don't have any roots in my inventory!"; close; +OnInit: + set .IS_MAGIC, 1; + end; } // --------------------- Cave 9 Checker ---------------------------- @@ -945,6 +973,9 @@ L_no_root: mes "I don't have any roots in my inventory!"; close; +OnInit: + set .IS_MAGIC, 1; + end; } // --------------------- Boss Cave Checker ---------------------------- @@ -1015,4 +1046,3 @@ L_Save: message strcharinfo(0), "You can't leave Julia here, all alone!"; end; } - diff --git a/world/map/npc/026-1/headless_man.txt b/world/map/npc/026-1/headless_man.txt index f922406d..96c8cd49 100644 --- a/world/map/npc/026-1/headless_man.txt +++ b/world/map/npc/026-1/headless_man.txt @@ -59,18 +59,21 @@ L_Quest_ask: L_Quest_start: mes "[Thurstan]"; mes "\"Great! I will need the following things.\""; - mes "\"" + @Wisp_Powder + " Wisp Powder,\""; - mes "\"" + @Polt_Powder + " Poltergeist Powder,\""; - mes "\"" + @Spec_Powder + " Spectre Powder,\""; - mes "\"" + @Iron_Pot + " Iron Potion,\""; - mes "\"" + @Conc_Pot + " Concentration Potion,\""; - mes "\"" + @Red_Dye + " vials of Red Dye,\""; - mes "\"" + @Yellow_Dye + " vials of Yellow Dye,\""; + mes "\"" + @Wisp_Powder + " [@@"+WispPowder+"|@@],\""; + mes "\"" + @Polt_Powder + " [@@"+PoltergeistPowder+"|@@],\""; + mes "\"" + @Spec_Powder + " [@@"+SpectrePowder+"|@@],\""; + mes "\"" + @Iron_Pot + " [@@"+IronPotion+"|@@],\""; + mes "\"" + @Conc_Pot + " [@@"+ConcentrationPotion+"|@@],\""; + mes "\"" + @Red_Dye + " vials of [@@"+RedDye+"|@@],\""; + mes "\"" + @Yellow_Dye + " vials of [@@"+YellowDye+"|@@],\""; mes "\"and...\""; - mes "\"" + @LB_Dye + " vials of Light Blue Dye,\""; + mes "\"" + @LB_Dye + " vials of [@@"+LightBlueDye+"|@@],\""; next; mes "[Thurstan]"; - mes "\"My friend also said that I should use a metal bowl instead of a wooden one. I don't have one and I think a cauldron from the kitchen would be too big. Perhaps we could use an Infantry Helmet to serve that task.\""; + mes "\"My friend also said that I should use a metal bowl instead of a wooden one. I don't have one and I think a cauldron from the kitchen would be too big. Perhaps we could use an [@@"+InfantryHelmet+"|@@] to serve that task.\""; + next; + mes "[Thurstan]"; + mes "\"He also said that a [@@"+PinkieHat+"|@@] is a perfect whisk for stirring this recipe since the glue does not stick to it.\""; next; mes "[Thurstan]"; mes "\"I know it probably doesn't seem like that much to you, but it is a really big deal for me. I will try to find something to compensate you for your efforts.\""; @@ -100,6 +103,7 @@ L_Quest_check: || countitem("RedDye") < @Red_Dye || countitem("YellowDye") < @Yellow_Dye || countitem("LightBlueDye") < @LB_Dye + || countitem("PinkieHat") < 1 || countitem("InfantryHelmet") < 1) goto L_Quest_notenough; @@ -111,6 +115,7 @@ L_Quest_check: delitem "RedDye", @Red_Dye; delitem "YellowDye", @Yellow_Dye; delitem "LightBlueDye", @LB_Dye; + delitem "PinkieHat", 1; delitem "InfantryHelmet", 1; getexp @Glue_Exp, 0; mes "[Thurstan]"; @@ -146,15 +151,15 @@ L_Quest_notenough: L_Quest_items: mes "[Thurstan]"; - mes "\"" + @Wisp_Powder + " Wisp Powder,\""; - mes "\"" + @Polt_Powder + " Poltergeist Powder,\""; - mes "\"" + @Spec_Powder + " Spectre Powder,\""; - mes "\"" + @Iron_Pot + " Iron Potion,\""; - mes "\"" + @Conc_Pot + " Concentration Potion,\""; - mes "\"" + @Red_Dye + " vials of Red Dye,\""; - mes "\"" + @Yellow_Dye + " vials of Yellow Dye,\""; - mes "\"" + @LB_Dye + " vials of Light Blue Dye,\""; - mes "\"We'll also need 1 Infantry Helmet to use as a bowl for mixing everything together.\""; + mes "\"" + @Wisp_Powder + " [@@"+WispPowder+"|@@],\""; + mes "\"" + @Polt_Powder + " [@@"+PoltergeistPowder+"|@@],\""; + mes "\"" + @Spec_Powder + " [@@"+SpectrePowder+"|@@],\""; + mes "\"" + @Iron_Pot + " [@@"+IronPotion+"|@@],\""; + mes "\"" + @Conc_Pot + " [@@"+ConcentrationPotion+"|@@],\""; + mes "\"" + @Red_Dye + " vials of [@@"+RedDye+"|@@],\""; + mes "\"" + @Yellow_Dye + " vials of [@@"+YellowDye+"|@@],\""; + mes "\"" + @LB_Dye + " vials of [@@"+LightBlueDye+"|@@],\""; + mes "\"We'll also need 1 [@@"+InfantryHelmet+"|@@] to use as a bowl for mixing everything together and 1 [@@"+PinkieHat+"|@@] as whisk for stirring since the glue does not stick to it.\""; goto L_Close; L_Quest_finished: diff --git a/world/map/npc/026-1/traveler.txt b/world/map/npc/026-1/traveler.txt index de743c14..ab905120 100644 --- a/world/map/npc/026-1/traveler.txt +++ b/world/map/npc/026-1/traveler.txt @@ -8,4 +8,8 @@ set @NpcTravelBit, $@graveyard_bit; callfunc "Traveler"; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/026-2/golbenez.txt b/world/map/npc/026-2/golbenez.txt index 6cf76de1..2bcd29c6 100644 --- a/world/map/npc/026-2/golbenez.txt +++ b/world/map/npc/026-2/golbenez.txt @@ -416,7 +416,7 @@ S_Reidsmem: next; mes "It seems you're not only seeing Reid's memories, but also feeling them!"; next; - mes "Reid turns away from Savaric's door and walks to her rooms quickly. She is shivering. You feel her heart pounding."; + mes "Reid turns away from Savaric's door and walks to her room quickly. She is shivering. You feel her heart pounding."; next; mes "She enters the room and pulls a red dress out of a chest and changes into it. As you feel her heart pounding even faster, you recognize the dress as the one her ghost is wearing."; next; diff --git a/world/map/npc/027-5/_mobs.txt b/world/map/npc/027-5/_mobs.txt index 97c66e24..589f6e5a 100644 --- a/world/map/npc/027-5/_mobs.txt +++ b/world/map/npc/027-5/_mobs.txt @@ -6,8 +6,8 @@ 027-5,57,143,3,1|monster|Fallen|1045,1,30000ms,4000ms 027-5,62,141,2,1|monster|TheLost|1073,1,300000ms,8000ms 027-5,21,136,7,5|monster|Stalker|1075,4,60000ms,4000ms -027-5,69,42,97,41|monster|Wight|1124,6,60000ms,8000ms +027-5,70,39,100,34|monster|Wight|1124,6,60000ms,8000ms 027-5,69,56,97,69|monster|VampireBat|1066,30,100000ms,30000ms -027-5,68,42,97,40|monster|RedBone|1074,6,60000ms,8000ms -027-5,70,80,98,34|monster|PoisonSkull|1024,8,60000ms,8000ms -027-5,69,80,99,36|monster|FireSkull|1023,8,60000ms,8000ms +027-5,70,39,100,35|monster|RedBone|1074,6,60000ms,8000ms +027-5,70,73,98,24|monster|PoisonSkull|1024,8,60000ms,8000ms +027-5,69,73,99,24|monster|FireSkull|1023,8,60000ms,8000ms diff --git a/world/map/npc/027-6/general_krukan.txt b/world/map/npc/027-6/general_krukan.txt index 8dfb80bf..635c616e 100644 --- a/world/map/npc/027-6/general_krukan.txt +++ b/world/map/npc/027-6/general_krukan.txt @@ -222,7 +222,7 @@ L_End: OnInit: setarray $@CRYPT_FIGHT1_MESSAGES$, - "General Krukan : Haha, Thank you mortal. You have released me from my prison. To show my gratitude you can die swiftly at my hands and become part of my undead army. MUhahahahaha! Minions, Dispose of these Adventurers!", + "General Krukan : Muhahahahaha! Thank you, mortal! You have released me from my prison. To show my gratitude you can die swiftly at my hands and become part of my undead army! Minions, dispose of these adventurers!", "General Krukan : Ha, Looks like you're tougher than I thought.", "General Krukan : and here I thought I wasn't going to enjoy this.", "General Krukan : More of them are coming!", diff --git a/world/map/npc/027-7/general_razha.txt b/world/map/npc/027-7/general_razha.txt index 17f70b63..cdc2405a 100644 --- a/world/map/npc/027-7/general_razha.txt +++ b/world/map/npc/027-7/general_razha.txt @@ -226,8 +226,8 @@ L_End: OnInit: setarray $@CRYPT_FIGHT2_MESSAGES$, - "General Razha : Haha, Thank you mortal. You have released me from my prison. To show my graditude you can die swiftly at my hands and become part of my undead army. MUhahahahaha! Minions, Dispose of these Adventurers!", - "General Razha : Ha, Looks like your tougher then I thought.", + "General Razha : Muhahahahaha! Thank you, mortal! You have released me from my prison. To show my gratitude you can die swiftly at my hands and become part of my undead army! Minions, dispose of these adventurers!", + "General Razha : Ha, Looks like your tougher than I thought.", "General Razha : and here I thought I wasn't going to enjoy this.", "General Razha : More of them are coming!", "General Razha : Minions! Kill them already!", @@ -237,6 +237,6 @@ OnInit: "General Razha : How about you try a different approach and kill them already!", "General Razha : Minions! Last chance or it's back to being part of an ossuary for you!", "General Razha : Looks like if you want something done right you have to do it yourself.", - "General Razha : Charge!."; + "General Razha : Charge!"; end; } diff --git a/world/map/npc/027-8/general_terogan.txt b/world/map/npc/027-8/general_terogan.txt index 259ce0a9..c3246949 100644 --- a/world/map/npc/027-8/general_terogan.txt +++ b/world/map/npc/027-8/general_terogan.txt @@ -316,8 +316,8 @@ L_End: OnInit: setarray $@CRYPT_FIGHT3_MESSAGES$, - "General Terogan : Haha, Thank you mortal. You have released me from my prison. To show my graditude you can die swiftly at my hands and become part of my undead army. MUhahahahaha! Minions, Dispose of these Adventurers!", - "General Terogan : Ha, Looks like your tougher then I thought.", + "General Terogan : Muhahahahaha! Thank you, mortal! You have released me from my prison. To show my gratitude you can die swiftly at my hands and become part of my undead army! Minions, dispose of these adventurers!", + "General Terogan : Ha, Looks like your tougher than I thought.", "General Terogan : and here I thought I wasn't going to enjoy this.", "General Terogan : More of them are coming!", "General Terogan : Minions! Kill them already!", @@ -327,7 +327,7 @@ OnInit: "General Terogan : How about you try a different approach and kill them already!", "General Terogan : Minions! Last chance or it's back to being part of an ossuary for you!", "General Terogan : Looks like if you want something done right you have to do it yourself.", - "General Terogan : Charge!."; + "General Terogan : Charge!"; end; } diff --git a/world/map/npc/029-1/soul-menhir.txt b/world/map/npc/029-1/soul-menhir.txt index 8113d9c5..702356bf 100644 --- a/world/map/npc/029-1/soul-menhir.txt +++ b/world/map/npc/029-1/soul-menhir.txt @@ -14,4 +14,8 @@ set @x, 0; set @y, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/029-1/traveler.txt b/world/map/npc/029-1/traveler.txt index befa8eef..0add5765 100644 --- a/world/map/npc/029-1/traveler.txt +++ b/world/map/npc/029-1/traveler.txt @@ -8,4 +8,8 @@ set @NpcTravelBit, $@candor_bit; callfunc "Traveler"; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/029-2/_mobs.txt b/world/map/npc/029-2/_mobs.txt index c75f2816..a63fae65 100644 --- a/world/map/npc/029-2/_mobs.txt +++ b/world/map/npc/029-2/_mobs.txt @@ -2,5 +2,3 @@ // Candor Island Indoor mobs 029-2,33,57,24,7|monster|HouseMaggot|1050,7,100000ms,30000ms -029-2,33,88,24,7|monster|Ratto|1192,4,10000ms,30000ms -029-2,33,57,24,7|monster|Ratto|1192,2,10000ms,30000ms diff --git a/world/map/npc/029-2/morgan.txt b/world/map/npc/029-2/morgan.txt index c6dfa306..c5d48b43 100644 --- a/world/map/npc/029-2/morgan.txt +++ b/world/map/npc/029-2/morgan.txt @@ -23,7 +23,7 @@ OnInit: disablenpc "MorganDebug"; end; } -029-2,101,57,0|script|Morgan#_M|355 +029-2,101,57,0|script|Morgan|355 { callfunc "PCtoNPCRange"; if(@npc_check) end; @@ -137,6 +137,10 @@ L_LearningDone: L_Close: close; + +OnInit: + set .IS_MAGIC, 1; + end; } 029-2,113,59,0|shop|Zitoni|103,CactusDrink:*1,CactusPotion:*1,TinyManaElixir:*5,SmallManaElixir:*5,EnlighteningElixir:*1,ManaDust:*1 diff --git a/world/map/npc/029-2/sorfina.txt b/world/map/npc/029-2/sorfina.txt index a851a71c..80313877 100644 --- a/world/map/npc/029-2/sorfina.txt +++ b/world/map/npc/029-2/sorfina.txt @@ -309,7 +309,7 @@ L_Bye: getitem "SlingShot", 1; getitem "SlingBullet", 500; getitem "HitchhikersTowel", 1; - getitem "CottonShirt", 1; + getitem "RaggedShirt", 1; getitem "RaggedShorts", 1; set Zeny, Zeny + 35; // tanisha gives 5 zeny set QL_BEGIN, 8; @@ -362,7 +362,7 @@ L_Walk: L_Shirt: mapmask getmask(); mes "You take a simple Cotton Shirt and some very worn-out Ragged Shorts out of the dresser."; - getitem "CottonShirt", 1; + getitem "RaggedShirt", 1; getitem "RaggedShorts", 1; mes "[Sorfina]"; mes "\"Great! Now you can equip it.\""; diff --git a/world/map/npc/029-2/stat_reset.txt b/world/map/npc/029-2/stat_reset.txt index d66cd2f9..17be61b9 100644 --- a/world/map/npc/029-2/stat_reset.txt +++ b/world/map/npc/029-2/stat_reset.txt @@ -48,4 +48,8 @@ L_Sorry: L_Close: close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/029-3/parua.txt b/world/map/npc/029-3/parua.txt index 18b960aa..6142b089 100644 --- a/world/map/npc/029-3/parua.txt +++ b/world/map/npc/029-3/parua.txt @@ -401,8 +401,8 @@ L_IdleCheckPassed: OnReward: if (isdead()) end; - set @bp, 100 * 2200 / $@FIGHT_CAVE_MAX_LEVEL; - set @xp, 100000 * 2200 / $@FIGHT_CAVE_MAX_LEVEL; + set @bp, 100 * $@FIGHT_CAVE_MAX_LEVEL / 2200; + set @xp, 100000 * $@FIGHT_CAVE_MAX_LEVEL / 2200; getexp @xp, 0; set BOSS_POINTS, BOSS_POINTS + @bp; message strcharinfo(0), "You gain "+ @bp +" Boss Points giving you a total of " + BOSS_POINTS + "."; diff --git a/world/map/npc/029-4/time-traveler.txt b/world/map/npc/029-4/time-traveler.txt index 1242e7c4..1407e949 100644 --- a/world/map/npc/029-4/time-traveler.txt +++ b/world/map/npc/029-4/time-traveler.txt @@ -11,6 +11,10 @@ L_Warp: close2; warp "029-4", 24, 38; close; + +OnInit: + set .IS_MAGIC, 1; + end; } 029-4,26,36,0|script|Time Traveler#294|184 @@ -28,4 +32,8 @@ L_What: L_Leave: mes "Walk West from here to escape the time dilation bubble."; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/030-1/time-traveler.txt b/world/map/npc/030-1/time-traveler.txt index a79b812d..7c6aba65 100644 --- a/world/map/npc/030-1/time-traveler.txt +++ b/world/map/npc/030-1/time-traveler.txt @@ -11,6 +11,10 @@ L_Warp: close2; warp "030-1", 61, 29; close; + +OnInit: + set .IS_MAGIC, 1; + end; } 030-1,64,33,0|script|Time Traveler#30|184 @@ -31,4 +35,8 @@ L_What: L_Leave: mes "Walk North from here to exit the time dilation bubble."; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/030-2/avalia.txt b/world/map/npc/030-2/avalia.txt index 818fabae..98353d5f 100644 --- a/world/map/npc/030-2/avalia.txt +++ b/world/map/npc/030-2/avalia.txt @@ -145,7 +145,7 @@ L_CheckReagents: mes "Mana surges to life in the bottles making a peel of thunder."; next; mes "[Avalia]"; - mes "\"Phew! That takes alot out of a person.\""; + mes "\"Phew! That takes a lot out of a person.\""; mes "\"I'm in no condition to go anywhere.\""; mes "\"Take the Mana Battery and install it in the warehouse.\""; mes "\"It's found behind Chief Warrick\""; @@ -187,6 +187,10 @@ L_ThankYou: L_Close: close; + +OnInit: + set .IS_MAGIC, 1; + end; } 030-2,190,64,0|script|Milis|330 diff --git a/world/map/npc/030-2/eljas.txt b/world/map/npc/030-2/eljas.txt index 93270299..72ea5d4e 100644 --- a/world/map/npc/030-2/eljas.txt +++ b/world/map/npc/030-2/eljas.txt @@ -187,8 +187,9 @@ L_Research: L_NotWelcome: mes "... You hear a voice calling your name ... "; mes "[Balthasar]"; - mes "\"Come See me in the caves below.\""; - mes "\"go south till you reach the snowman. Then head into the cave to the east.\""; + mes "\"Come see me in the caves below.\""; + if (!@xmas_knows_route) + mes "\"Go south till you reach the snowman. Then head into the cave to the east.\""; warp "020-1",33,94; close; diff --git a/world/map/npc/030-3/orum_homunculus.txt b/world/map/npc/030-3/orum_homunculus.txt index 503374ff..3fe61f05 100644 --- a/world/map/npc/030-3/orum_homunculus.txt +++ b/world/map/npc/030-3/orum_homunculus.txt @@ -430,7 +430,7 @@ L_CheckReagents: next; mes "Mana surges to life in the potions"; next; - mes "\"Phew! That takes alot out of a person.\""; + mes "\"Phew! That takes a lot out of a person.\""; mes "\"I'm in no condition to go anywhere.\""; next; mes "\"Take the Mana Battery and install it in the warehouse.\""; @@ -473,4 +473,8 @@ L_ThankYou: L_Close: close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/030-4/mana_battery.txt b/world/map/npc/030-4/mana_battery.txt index 30c997b4..9b6182e4 100644 --- a/world/map/npc/030-4/mana_battery.txt +++ b/world/map/npc/030-4/mana_battery.txt @@ -445,8 +445,12 @@ S_ClearVariables: set @karma_bonus, 0; return; -OnCommandDing: - specialeffect 402; +OnCommandOverHeat: + specialeffect 407; + end; + +OnCommandCoolDown: + specialeffect 408; end; } @@ -454,19 +458,33 @@ OnCommandDing: { end; OnCommandCoolDown: + donpcevent "AniManOMat::OnCommandOverHeat"; + enablenpc "#MBE0"; set $@XmasBattleStatus, 0; set $@XmasBattleCoolDown, 1; initnpctimer; end; OnTimer120000: + donpcevent "AniManOMat::OnCommandCoolDown"; + disablenpc "#MBE0"; set $@XmasBattleCoolDown, 0; stopnpctimer; mapannounce "030-4", "The AniManOMat has cooled down.", 0; - donpcevent "AniManOMat::OnCommandDing"; end; } +// Mana battery effects + +// Smoke and sparks +030-4,32,21,0|script|#MBE0|436 +{ + end; + OnInit: + disablenpc "#MBE0"; + end; +} + // Danger Cells // 0: 20,21,29,30 diff --git a/world/map/npc/031-3/_mobs.txt b/world/map/npc/031-3/_mobs.txt index 2004a2f2..5eb79a5b 100644 --- a/world/map/npc/031-3/_mobs.txt +++ b/world/map/npc/031-3/_mobs.txt @@ -25,12 +25,11 @@ 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,193,216,12,17|monster|Yeti|1072,1,100000ms,30000ms +031-3,209,199,12,17|monster|Yeti|1072,4,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 @@ -66,21 +65,24 @@ 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,281,215,55,21|monster|BlueSuperSlime|1236,1,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,37,124,5,13|monster|BlueSlime|1091,1,100000ms,30000ms 031-3,136,227,14,9|monster|WhiteSlime|1093,7,100000ms,30000ms +031-3,136,216,6,4|monster|BlueSlime|1091,2,100000ms,30000ms 031-3,152,218,13,17|monster|BlueSlime|1091,4,100000ms,30000ms +031-3,146,218,26,17|monster|BlueSuperSlime|1236,1,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,139,264,25,19|monster|BlueSuperSlime|1236,1,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 @@ -90,3 +92,4 @@ 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 +031-3,37,279,43,22|monster|BlueSuperSlime|1236,1,100000ms,30000ms diff --git a/world/map/npc/031-4/cindyCave.txt b/world/map/npc/031-4/cindyCave.txt index fc9fab08..df56175f 100644 --- a/world/map/npc/031-4/cindyCave.txt +++ b/world/map/npc/031-4/cindyCave.txt @@ -74,7 +74,7 @@ L_Reward: mes "\"I've found this thing in the cave - it looks valuable. I want you to have it.\""; next; getinventorylist; - if (@inventorylist_count == 100) + if ((checkweight("WoodenStaff", 1) == 0) || (@inventorylist_count == 100)) // check for the heaviest of them all here to avoid drops to ground. WoodenStaff = 800g goto L_Full_Inv; set @reward, rand(15); @@ -202,17 +202,27 @@ OnReward: set @bonus, (BaseLevel/2); set DailyQuestBonus, DailyQuestBonus + @bonus; message strcharinfo(0), "You feel a temporary rush of power and zest for action. " + @bonus + " daily bonus gained." ; + set @bonus, 0; + if (QL_CINDY != 1 ) - goto L_End; + goto L_RepeatReward; + set QL_CINDY, 2; message strcharinfo(0), "Cindy looks relieved and as if she wants to talk with you."; getexp 100000, 0; set BOSS_POINTS, BOSS_POINTS + 70; message strcharinfo(0), "You gain 70 Boss Points giving you a total of " + BOSS_POINTS + "."; - goto L_End; + end; -L_End: - set @bonus, 0; +L_RepeatReward: + message strcharinfo(0), "Cindy looks relieved and is grateful for helping to save her again."; + getexp 5000, 0; + // Reward is 20 BP and starts decreasing, one per 5 levels, after lvl 74. + // Bottoms out at lvl 120 and 10 boss points. + set @bp, 20 - max (0, min ((BaseLevel - 74)/5, 10)); + set BOSS_POINTS, BOSS_POINTS + @bp; + message strcharinfo(0), "You gain " + @bp + " Boss Points giving you a total of " + BOSS_POINTS + "."; + set @bp, 0; end; OnInit: diff --git a/world/map/npc/032-3/_mobs.txt b/world/map/npc/032-3/_mobs.txt index b84e45f3..8964e655 100644 --- a/world/map/npc/032-3/_mobs.txt +++ b/world/map/npc/032-3/_mobs.txt @@ -9,5 +9,6 @@ 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,25,76,24,21|monster|YellowSuperSlime|1233,2,100000ms,30000ms 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/033-1/traveler.txt b/world/map/npc/033-1/traveler.txt index 462e2586..11f93bcf 100644 --- a/world/map/npc/033-1/traveler.txt +++ b/world/map/npc/033-1/traveler.txt @@ -8,4 +8,8 @@ set @NpcTravelBit, $@barbarians_bit; callfunc "Traveler"; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/035-2/koga.txt b/world/map/npc/035-2/koga.txt index d54e3e27..26ed2528 100644 --- a/world/map/npc/035-2/koga.txt +++ b/world/map/npc/035-2/koga.txt @@ -2,12 +2,6 @@ 035-2,39,29,0|script|#KogaExit|45,0,1 { - mes "Disembark the ferry for "+$@MainDocks$[$@MainCurrentDock]+"?"; - menu - "Yes.", L_Leave, - "Nevermind", L_Close; - -L_Leave: if ($@MainCurrentDock == 0) goto L_Hurnscald; if ($@MainCurrentDock == 1) diff --git a/world/map/npc/036-2/koga-candor.txt b/world/map/npc/036-2/koga-candor.txt index 8aee6be3..9477d056 100644 --- a/world/map/npc/036-2/koga-candor.txt +++ b/world/map/npc/036-2/koga-candor.txt @@ -2,12 +2,6 @@ 036-2,39,29,0|script|#KogaCandorExit|45,0,1 { - mes "Disembark the ferry for "+$@CandorDocks$[$@CandorCurrentDock]+"?"; - menu - "Yes.", L_Leave, - "Nevermind", L_Close; - -L_Leave: if ($@CandorCurrentDock == 0) goto L_Candor; if ($@CandorCurrentDock == 1) diff --git a/world/map/npc/043-1/_mobs.txt b/world/map/npc/043-1/_mobs.txt index 234e5afc..462cec3f 100644 --- a/world/map/npc/043-1/_mobs.txt +++ b/world/map/npc/043-1/_mobs.txt @@ -4,4 +4,5 @@ 043-1,0,0,0,0|monster|SeaSlime|1033,17,40000ms,30000ms 043-1,0,0,0,0|monster|YellowSlime|1007,15,60000ms,60000ms 043-1,0,0,0,0|monster|GreenSlime|1005,20,60000ms,60000ms +043-1,0,0,0,0|monster|GreenSuperSlime|1235,4,60000ms,60000ms 043-1,37,74,26,109|monster|Croc|1193,10,10000ms,30000ms diff --git a/world/map/npc/043-3/_mobs.txt b/world/map/npc/043-3/_mobs.txt index 772c8921..5734cb25 100644 --- a/world/map/npc/043-3/_mobs.txt +++ b/world/map/npc/043-3/_mobs.txt @@ -9,4 +9,6 @@ 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,113,47,30,22|monster|RedSuperSlime|1234,3,45000ms,35000ms 043-3,94,44,40,18|monster|GreenSlime|1005,5,30000ms,15000ms +043-3,94,44,40,18|monster|GreenSuperSlime|1235,1,30000ms,15000ms diff --git a/world/map/npc/046-3/_mobs.txt b/world/map/npc/046-3/_mobs.txt index d75b5f5a..874db2a6 100644 --- a/world/map/npc/046-3/_mobs.txt +++ b/world/map/npc/046-3/_mobs.txt @@ -6,13 +6,14 @@ 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,107,85,14,9|monster|BlueSlime|1091,2,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,118,77,82,67|monster|BlueSuperSlime|1236,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/047-3/_mobs.txt b/world/map/npc/047-3/_mobs.txt index 2b0f3338..0a813eb3 100644 --- a/world/map/npc/047-3/_mobs.txt +++ b/world/map/npc/047-3/_mobs.txt @@ -11,6 +11,7 @@ 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,54,126,67,88|monster|BlueSuperSlime|1236,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 diff --git a/world/map/npc/048-2/sageNikolai.txt b/world/map/npc/048-2/sageNikolai.txt index fdc6e76d..fb121552 100644 --- a/world/map/npc/048-2/sageNikolai.txt +++ b/world/map/npc/048-2/sageNikolai.txt @@ -283,4 +283,8 @@ L_Close: set @bookpages, 0; set @slimes, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/048-2/traveler.txt b/world/map/npc/048-2/traveler.txt index 7b654d85..9f323eac 100644 --- a/world/map/npc/048-2/traveler.txt +++ b/world/map/npc/048-2/traveler.txt @@ -8,4 +8,8 @@ set @NpcTravelBit, $@blue_sage_bit; callfunc "Traveler"; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/052-2/chest.txt b/world/map/npc/052-2/chest.txt index 00645c76..06d8b972 100644 --- a/world/map/npc/052-2/chest.txt +++ b/world/map/npc/052-2/chest.txt @@ -62,7 +62,7 @@ L_GetCommonReward: getinventorylist; set @index, rand(getarraysize($@illia_common_rewards$)); set @reward$, $@illia_common_rewards$[@index]; - if ((checkweight(@reward$, 1) == 0) || (@inventorylist_count == 100)) + if ((checkweight("WarlordPlate", 1) == 0) || (@inventorylist_count == 100)) // check for the heaviest of them all here to avoid limiting chances. WarlordPlate = 2.6kg goto L_InventoryNoSpace; set @illia_current_num_rewards, @illia_current_num_rewards + 1; getitem @reward$, 1; @@ -78,7 +78,7 @@ L_GetUniqueReward: getinventorylist; set @index, rand(getarraysize($@illia_unique_rewards$)); set @reward$, $@illia_unique_rewards$[@index]; - if ((checkweight(@reward$, 1) == 0) || (@inventorylist_count == 100)) + if ((checkweight("BullHelmet", 1) == 0) || (@inventorylist_count == 100)) // check for the heaviest of them all here to avoid limiting chances. BullHelmet = 1.3kg goto L_InventoryNoSpace; next; mes "You notice an interesting shape hidden under a cover..."; diff --git a/world/map/npc/052-2/storage.txt b/world/map/npc/052-2/storage.txt index a8582408..e9ca98bc 100644 --- a/world/map/npc/052-2/storage.txt +++ b/world/map/npc/052-2/storage.txt @@ -32,7 +32,7 @@ L_StartItemInvoker: end; OnInit: - setarray $@illia_storage_items, 541, 567, 568, 562; + setarray $@illia_storage_items, 541, 567, 568, 562, 5379; setarray $@illia_storage_special_items, 687, 827, 1229; // Map coords:* x1,y1, x2,y2, ... setarray $@illia_storage_item_points, 20,67, 22,75, 27,71, 30,73, 34,76, 30,64, 34,65, 34,62, 21,61, 22,64; diff --git a/world/map/npc/055-1/flowerpentagram4.txt b/world/map/npc/055-1/flowerpentagram4.txt index 1fdd64cf..cc2d5191 100644 --- a/world/map/npc/055-1/flowerpentagram4.txt +++ b/world/map/npc/055-1/flowerpentagram4.txt @@ -122,4 +122,8 @@ L_PlacedFifthFlower: L_Close: set @localMonsterCount, 0; close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/055-1/traveler.txt b/world/map/npc/055-1/traveler.txt index 1f36de77..233671bf 100644 --- a/world/map/npc/055-1/traveler.txt +++ b/world/map/npc/055-1/traveler.txt @@ -8,4 +8,8 @@ set @NpcTravelBit, $@hurns_farms_bit; callfunc "Traveler"; end; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/055-3/_mobs.txt b/world/map/npc/055-3/_mobs.txt index 3b44df01..b492dd09 100644 --- a/world/map/npc/055-3/_mobs.txt +++ b/world/map/npc/055-3/_mobs.txt @@ -2,8 +2,10 @@ // Cave mobs 055-3,45,44,20,14|monster|RedSlime|1008,10,10000ms,60000ms +055-3,45,44,20,14|monster|RedSuperSlime|1234,2,10000ms,60000ms 055-3,0,0,0,0|monster|Bat|1017,20,10000ms,45000ms 055-3,53,75,28,40|monster|YellowSlime|1007,10,10000ms,60000ms +055-3,53,75,28,40|monster|YellowSuperSlime|1233,2,10000ms,60000ms 055-3,0,0,0,0|monster|BlackScorpion|1009,8,10000ms,35000ms 055-3,0,0,0,0|monster|Spider|1012,8,10000ms,35000ms 055-3,0,0,0,0|monster|Snake|1010,3,10000ms,20000ms diff --git a/world/map/npc/056-2/barrier.txt b/world/map/npc/056-2/barrier.txt index 956dc630..9552623f 100644 --- a/world/map/npc/056-2/barrier.txt +++ b/world/map/npc/056-2/barrier.txt @@ -14,5 +14,4 @@ L_Block: L_Weak: message strcharinfo(0), "I can't enter because this magic field is too strong. Maybe I should train some more...."; end; - } diff --git a/world/map/npc/056-2/mirak.txt b/world/map/npc/056-2/mirak.txt index e1a37347..8719e4b4 100644 --- a/world/map/npc/056-2/mirak.txt +++ b/world/map/npc/056-2/mirak.txt @@ -149,4 +149,8 @@ S_Update_Mask: (QUEST_Mirak & ~(@Mirak_MASK)) | (@talk << @Mirak_SHIFT); return; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/058-1/griffen.txt b/world/map/npc/058-1/griffen.txt index 4b81e9a6..8f794c55 100644 --- a/world/map/npc/058-1/griffen.txt +++ b/world/map/npc/058-1/griffen.txt @@ -42,4 +42,8 @@ L_Quest: L_Close: close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/058-2/griffen.txt b/world/map/npc/058-2/griffen.txt index c6bce716..d2824dc8 100644 --- a/world/map/npc/058-2/griffen.txt +++ b/world/map/npc/058-2/griffen.txt @@ -40,4 +40,8 @@ L_Quest: L_Close: close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/069-2/wizard.txt b/world/map/npc/069-2/wizard.txt index c94258ec..f3b71df4 100644 --- a/world/map/npc/069-2/wizard.txt +++ b/world/map/npc/069-2/wizard.txt @@ -131,6 +131,11 @@ L_Task: L_Doomsday: mes "[Rodium]"; + mes "\"No sorry the universe is too unstable at the moment. I can't warp you back in time in this state you must wait until it has calmed down.\""; + goto L_Menu2; + +/* + mes "[Rodium]"; mes "\"Yes. The Doomsday is how the third rewrite happened and the fourth timeline began. You can get a [@@"+SaviorArmor+"|@@] if you can watch until the very end, but I must warn you...\""; next; mes "[Rodium]"; @@ -169,7 +174,12 @@ OnWarp: mes "\"Please make your decision.\""; menu "I don't know what you're talking about, old man!", L_Close, "Yeah, they're my friend, please warp me!", L_Warp; +*/ L_Close: close; + +OnInit: + set .IS_MAGIC, 1; + end; } diff --git a/world/map/npc/099-1/main.txt b/world/map/npc/099-1/main.txt index cbe03c7c..75881ba5 100644 --- a/world/map/npc/099-1/main.txt +++ b/world/map/npc/099-1/main.txt @@ -12,7 +12,7 @@ callfunc "PCtoNPCRange"; if(@npc_check) end; - mes ".:: Keshlam's Adventurer Guild ::."; + mes ".:: Keshlam's Adventurer Guild ::."; mes ""; mes "Welcome to the Adventurers Guild!"; mes "Sorry I could not wait for you. It's your fault for being late."; @@ -43,7 +43,7 @@ next; mes "Signed,"; mes "Xakelbael the Dark"; - close; + close; } @@ -53,10 +53,10 @@ callfunc "PCtoNPCRange"; if(@npc_check) end; - mes "Walk here to go to the ##BFinal Showdown##b."; + mes "Walk here to go to the ##BFinal Showdown##b."; mes ""; mes "##1##BWARNING:##b##0 Come prepared!"; - close; + close; L_Busy: mes "This warp cannot be used while players are on the other side!"; @@ -69,7 +69,7 @@ L_Menu: if ($@DD5_STATUS > 1) goto L_Busy; - mes "##BGo to the final showdown?##b"; + mes "##BGo to the final showdown?##b"; mes "You cannot return from there!"; mes ""; mes "##1Warning: Warp will be unavailable during fights!"; @@ -86,5 +86,8 @@ L_Yes: if (!$@DD5_STATUS) donpcevent "#TMWFinalExam::OnWarn0"; close; -} +OnInit: + set .IS_MAGIC, 1; + end; +} diff --git a/world/map/npc/099-2/logic.txt b/world/map/npc/099-2/logic.txt index 29d7e96d..6b4667cd 100644 --- a/world/map/npc/099-2/logic.txt +++ b/world/map/npc/099-2/logic.txt @@ -111,12 +111,12 @@ OnJanitor: if(@npc_check) end; mes ".:: V0id Flower ::."; - mes "This orange flower is dangerous!"; + mes "This orange flower is dangerous!"; mes "Do not disturb them - they have great range and damage!"; mes ""; mes "Whoever designed this artifical flower must have been crazy!"; mes "Killing it is not fast enough, avoid its nectar at all costs!"; - close; + close; } 099-2,123,128,0|script|???#099-2_123_128|400 @@ -126,10 +126,10 @@ OnJanitor: if(@npc_check) end; mes ".:: V0id Slime ::."; - mes "A crazy combat unit made in a crazy laboratory."; + mes "A crazy combat unit made in a crazy laboratory."; mes "If you can, just avoid it. It is slow enough."; mes "It can be slain, but have a decent defense, so use magic."; - close; + close; } 099-2,95,122,0|script|???#099-2_95_122|400 @@ -139,9 +139,9 @@ OnJanitor: if(@npc_check) end; mes ".:: V0id Snake ::."; - mes "If I find who designed these monsters ... Grr..."; + mes "If I find who designed these monsters ... Grr..."; mes "They are fast. And powerful. Goes down quickly, though."; - close; + close; } 099-2,28,122,0|script|???#099-2_28_122|400 @@ -150,13 +150,13 @@ OnJanitor: callfunc "PCtoNPCRange"; if(@npc_check) end; - mes "Last night, we were attacked by Xakelbael the Dark."; + mes "Last night, we were attacked by Xakelbael the Dark."; mes "Our attacks could barely do him any harm, and then..."; mes "He cast \"Fourth Fall\". All our buffed soldiers fell down the same instant."; mes ""; mes "I am gravely injured, but I'm leaving this note here."; mes "Comrades, please avenge me!"; - close; + close; } 099-2,91,92,0|script|???#099-2_91_92|400 @@ -166,11 +166,11 @@ OnJanitor: if(@npc_check) end; mes ".:: Sasquatch ::."; - mes "Developed for protection of the Earth Crystal."; + mes "Developed for protection of the Earth Crystal."; mes "They are extreme power houses capable to smash intruders."; mes "They have very meh defense, though."; mes "Also, even then could not harm Xakelbael the Dark."; - close; + close; } 099-2,62,43,0|script|???#099-6_62_43|400 @@ -179,7 +179,7 @@ OnJanitor: callfunc "PCtoNPCRange"; if(@npc_check) end; - mes "Zax De'Kagen trademark skill, the Bliss of Oblivion."; + mes "Zax De'Kagen trademark skill, the Bliss of Oblivion."; mes "A powerful skill which dispels mana around himself."; mes "Monsters will perish the very moment he cast it, and anyone too close"; mes "will have their mana drained as well, and might die from it."; @@ -187,7 +187,7 @@ OnJanitor: mes "Not only that, but he may become immune to certain sources of damage."; mes "It is a killer move which also allows him to assemble an army right after."; mes "I do believe there is a weakness, though. Something about excessive fur growth?"; - close; + close; } 099-6,57,17,0|script|???#099-6_57_17|400 @@ -197,11 +197,11 @@ OnJanitor: if(@npc_check) end; mes ".:: V0id Soldier ::."; - mes "These units can endure a lot of pain and use bows."; - mes "They are not dangerous, but do not let they become fodder."; - mes "A lot of soldiers can be very difficult to kill later on."; + mes "These units can endure a lot of pain and use bows."; + mes "They are not dangerous, but do not let they become fodder."; + mes "A lot of soldiers can be very difficult to kill later on."; mes "Random trivia: They are afraid of bone arrows and knifes."; - close; + close; } 099-6,123,128,0|script|???#099-6_123_128|400 @@ -211,10 +211,10 @@ OnJanitor: if(@npc_check) end; mes ".:: V0id Mouboo ::."; - mes "A solid all rounder unit, it has decent health and damage."; + mes "A solid all rounder unit, it has decent health and damage."; mes "But it proved useless as a security biopart."; mes "Figures out, we could not subvert its peaceful nature."; - close; + close; } 099-6,95,122,0|script|???#099-6_95_122|400 @@ -224,10 +224,10 @@ OnJanitor: if(@npc_check) end; mes ".:: Tengu ::."; - mes "Developed for protection of the Earth Crystal."; + mes "Developed for protection of the Earth Crystal."; mes "There shouldn't be any here, but they have a high defense."; mes "They turned out vulnerable to magic, unfortunately."; - close; + close; } 099-6,28,122,0|script|???#099-6_28_122|400 @@ -237,12 +237,12 @@ OnJanitor: if(@npc_check) end; mes ".:: V0id Bat ::."; - mes "They fly very fast and can quickly swarm you."; + mes "They fly very fast and can quickly swarm you."; mes "Their damage and health is not important."; mes "But if not careful, they will overwhelm you."; mes "Also, did you hear about lay on hands on overlapping dimensions?"; mes "This have nothing to do with bats but is a cool fact!"; - close; + close; } 099-6,91,92,0|script|???#099-6_91_92|400 @@ -252,10 +252,10 @@ OnJanitor: if(@npc_check) end; mes ".:: Mana Slayer ::."; - mes "An anti-magic unit, made to run and slay mages."; + mes "An anti-magic unit, made to run and slay mages."; mes "They look so much like us, that we are afraid of them all time."; mes "Not strong against physical damage, but can resist magic pretty well."; - close; + close; } 099-6,62,43,0|script|???#099-6_92_43|400 @@ -264,7 +264,7 @@ OnJanitor: callfunc "PCtoNPCRange"; if(@npc_check) end; - mes "Do not neglect the potions which you deemed useless until now."; + mes "Do not neglect the potions which you deemed useless until now."; mes "Our foe is formidable. Our knowledge is being tested, here."; mes "The same techniques which worked for years simply do not apply."; mes ""; @@ -272,7 +272,7 @@ OnJanitor: mes "I think what should sense magic, might sense mana devoid-ness as well."; mes "In this case, such would be the only way to know how far of killing we are."; mes "But I'm not sure if such trick would work except on support role."; - close; + close; } @@ -287,7 +287,7 @@ OnJanitor: mes "Reading this is as hard as finding a needle in a haystack."; if (debug) goto L_Close; if (countitem(FlawedLens) < 1) goto L_Tools; - mes "Although the painting also has no artistic value on its own..."; + mes "Although the painting also has no artistic value on its own..."; mes "Something tells you there is something ominous with it."; next; mes "##9 Use [Flawed Lens] on the painting? ##0"; @@ -318,10 +318,14 @@ L_UseLens: mes "Rest in Peace. Damnatio memoriae. Effective immediately."; // ;-- TRANSLATORS: Damnatio memoriae - "condemnation of memory", indicating that a person is to be excluded from official accounts. History rewrite if required. next; - //mes "The lens break! They were not only poorly effective but also of bad quality."; + //mes "The lens breaks! It was not only poorly effective, but also of bad quality."; mes "If only we could make the real Lens, we would have been able to find out"; - mes "what is up with this ominous, eerie feeling this picture gives."; + mes "What is up with this ominous, eerie feeling this picture gives?"; close; + +OnInit: + set .IS_MAGIC, 1; + end; } 099-1,35,22,0|script|Fireplace#099-1|400 @@ -330,13 +334,13 @@ L_UseLens: callfunc "PCtoNPCRange"; if(@npc_check) end; - mes "##9 There is something interesting on this fireplace. ##0"; - mes "##9 It doesn't seems to fit this building. ##0"; - mes "##9 As if it have been taken from another world and put here. ##0"; + mes "##9 There is something interesting on this fireplace. ##0"; + mes "##9 It doesn't seems to fit this building. ##0"; + mes "##9 As if it have been taken from another world and put here. ##0"; next; - mes "##9 After searching it, you found nothing. ##0"; - mes "##9 It is just a common fireplace, after all. ##0"; - close; + mes "##9 After searching it, you found nothing. ##0"; + mes "##9 It is just a common fireplace, after all. ##0"; + close; } /////////////////////////////// @@ -348,14 +352,14 @@ L_UseLens: if(@npc_check) end; mes ".:: V0id Scorpion ::."; - mes "The most basic combat unit in Keshlam."; + mes "The most basic combat unit in Keshlam."; mes "They have decent health, damage, and speed."; mes ""; mes ".:: V0id Mushroom ::."; - mes "The most basic combat unit in Keshlam."; + mes "The most basic combat unit in Keshlam."; mes "They have decent health, damage, and speed, and a higher range."; mes "Unlike the scorpions, they can move faster, but attack is slower."; - close; + close; } 099-1,45,22,0|script|Bookcase#099-1b|400 @@ -365,13 +369,13 @@ L_UseLens: if(@npc_check) end; mes ".:: V0id Maggot ::."; - mes "They are pathetic individually, and slow, a failed experiment."; + mes "They are pathetic individually, and slow, a failed experiment."; mes "But do not let them overwhelm you, togheter they are formidable!"; mes ""; mes ".:: V0id Archant ::."; - mes "An advanced combat unit, without weak points."; + mes "An advanced combat unit, without weak points."; mes "They are slow in movement, but other than that, they are good."; - close; + close; } /////////////////////////////// @@ -382,7 +386,7 @@ L_UseLens: callfunc "PCtoNPCRange"; if(@npc_check) end; - mes "There is a nice score here."; + mes "There is a nice score here."; mes "I assume important info will be sent by SFX only."; next; mes "Also, the time beats of this score are all in 600ms intervals."; @@ -391,7 +395,11 @@ L_UseLens: mes "However, potions will still work, hmm."; mes "There is also a spell here: \"##B#storage##b\"."; mes "I assume it only works at specific times."; - close; + close; + +OnInit: + set .IS_MAGIC, 1; + end; } 099-3,39,46,0|script|Outstanding Book#099-3|400 @@ -400,22 +408,22 @@ L_UseLens: callfunc "PCtoNPCRange"; if(@npc_check) end; - mes "Zax De'Kagen's Diary, entry #27"; + mes "Zax De'Kagen's Diary, entry #27"; mes ""; mes "##9 I am all soaking wet. They found my weak point. ##0"; mes "##9 However it was too late, Fourth Fall brought the end to this. ##0"; mes "##9 I did not even had to cancel my illusion. ##0"; next; - mes "Zax De'Kagen's Diary, entry #34"; + mes "Zax De'Kagen's Diary, entry #34"; mes ""; mes "##9 Today my Rubber Bat flew away. Probably shouldn't have given life to it. ##0"; mes "##9 I'll miss it, my dear friend, I hope one day he returns? ##0"; next; - mes "Zax De'Kagen's Diary, entry #42"; + mes "Zax De'Kagen's Diary, entry #42"; mes ""; mes "##9 What I wouldn't give for some pickled beets right now... ##0"; mes "##9 Meh, whatever. I'm not going to Dimond's Cove ever again! ##0"; - close; + close; } 099-3,64,62,0|script|Pan#099-3|400 @@ -429,20 +437,19 @@ L_UseLens: goto L_Potion; L_Shock: - mes "Some was trying to make Shock Sweets here."; - mes "However, it doesn't seems to have been finished."; + mes "Someone was trying to make Shock Sweets here."; + mes "However, they don't seem to be finished."; next; - mes "There are the initials \"To stop F.F.\" nearby."; + mes "An inscription reads, \"To stop F.F.\", nearby."; mes "One can only wonder who or what F.F. is."; - close; + close; L_Potion: - mes "Some was trying to make a Mana Potion here."; - mes "However, it doesn't seems to have been finished."; + mes "Someone was trying to make a Mana Potion here."; + mes "However, it doesn't seem to have been finished."; next; - mes "There are the initials \"To stop Bob\" nearby."; - mes "Well, I assume it is \"Bob\", text is fainted."; - mes "it could be \"boo\" as well. Maybe from Mouboo?"; - close; + mes "An inscription reads, \"To stop Bob\", nearby."; + mes "Well, I assume it is \"Bob\". The text is faded."; + mes "It could be \"boo\", as well. Maybe from Mouboo?"; + close; } - diff --git a/world/map/npc/099-5/boss.txt b/world/map/npc/099-5/boss.txt index 1ab584fd..1c282d8b 100644 --- a/world/map/npc/099-5/boss.txt +++ b/world/map/npc/099-5/boss.txt @@ -46,9 +46,9 @@ // bool // $@DD5_DEFCON - Defensive mode of Zax De'Kagen // 0 - Defenseless (#------- TRANSPARENT) -// 1 - Invencible (except to shearing) (#CC79A7 PURPLE) +// 1 - Invincible (except to shearing) (#CC79A7 PURPLE) // 2 - All damage is halved (#E69F00 ORANGE) -// 3 - Immune to potion'ed attackers (#D55E00 BROWN) +// 3 - Immune to potioned attackers (#D55E00 BROWN) // 4 - Vulnerable only when wet (#56B4E9 CYAN) // 5 - Vulnerable only to melee (#999999 GRAY) // 6 - Vulnerable to Bone Knife/Bone Arrow (#FFFFFF WHITE) @@ -89,12 +89,7 @@ 099-4|mapflag|resave|009-1,52,40 // Additional mapflags -099-3|mapflag|nosave|099-7,75,36 -099-3|mapflag|resave|099-7,75,36 -099-2|mapflag|nosave|099-7,75,36 -099-2|mapflag|resave|099-7,75,36 -099-1|mapflag|nosave|099-7,75,36 -099-1|mapflag|resave|099-7,75,36 +// 099-1/2/3/6 no flags set means: after relog you respawn at the same spot you logged off, on death you respawn at the last soul menhir 099-5,0,0,0|script|#TMWFinalExam|32767 { @@ -1302,6 +1297,7 @@ L_Return: end; OnInit: disablenpc strnpcinfo(0); + set .IS_MAGIC, 1; end; } @@ -1312,6 +1308,7 @@ OnInit: end; OnInit: disablenpc strnpcinfo(0); + set .IS_MAGIC, 1; end; } @@ -1322,6 +1319,7 @@ OnInit: end; OnInit: disablenpc strnpcinfo(0); + set .IS_MAGIC, 1; end; } @@ -1332,6 +1330,7 @@ OnInit: end; OnInit: disablenpc strnpcinfo(0); + set .IS_MAGIC, 1; end; } @@ -1525,6 +1524,7 @@ L_TooEarly: OnInit: disablenpc "Gema III"; + set .IS_MAGIC, 1; end; } ///////////////////////////////////////////////////// @@ -1535,6 +1535,7 @@ OnInit: end; OnInit: disablenpc "Xakelbael the Dark#0"; + set .IS_MAGIC, 1; end; OnTimer50000: @@ -1562,6 +1563,7 @@ OnDisable: end; OnInit: disablenpc "Zax De'Kagen#0"; + set .IS_MAGIC, 1; end; OnTimer18000: diff --git a/world/map/npc/099-7/boss.txt b/world/map/npc/099-7/boss.txt index 7d68bca8..b572c7cc 100644 --- a/world/map/npc/099-7/boss.txt +++ b/world/map/npc/099-7/boss.txt @@ -532,8 +532,8 @@ L_Off: if (!#CRYPT_PASSWORD) end; mes "There's an inscription on the gate."; next; - mes "\"The candle shall lit you, but if you mess up, a different light will show."; - mes "Alas did you knew, that Razha came before Krukan?\""; + mes "\"The candle should be lit, but if you mess up a different light will show."; + mes "Alas, did you know that Razha came before Krukan?\""; close; } @@ -552,7 +552,7 @@ L_Off: mes "There's an inscription on the gate."; next; mes "\"The master's candlesticks are like the fingers of his hand."; - mes "And if it is not to kill, they will never move.\""; + mes "And if they are not to kill, they will never move.\""; close; } @@ -563,9 +563,9 @@ L_Off: next; mes "\"##B"+get(.invocation$, "reapercry")+"##b\""; next; - mes "##9You hear the sounds of battle. Candle lights shines in distance."; + mes "##9You hear the sounds of battle. Candle light shines in the distance."; next; - mes "##9However, when you turn towards the source - both the light as the sound have already stopped."; + mes "##9However, when you turn towards the source, the light, as the sound, have already stopped."; next; mes "##9Is this a clue of some sort?"; close; @@ -581,7 +581,7 @@ L_Off: mes "Thanks to the lens on your inventory, you can read this:"; mes ""; mes "\"Nu'rem perished here, after the fight with Jande, Tal and Di'Tal."; - mes "For this very reason, this land is plagued forever. We shall give Nu'Rem a proper burrial.\""; + mes "For this very reason, this land is plagued forever. We shall give Nu'Rem a proper burial.\""; next; mes "-- The Sparron"; close; @@ -590,7 +590,7 @@ L_Tools: mes "It is too faint to read without some good lens, but you can make the following words out of the engraving:"; next; mes "\"Nu'rem .... here .... fight .... Jande ...."; - mes ".... land .... plagued forever. .... Nu'Rem .... proper burrial.\""; + mes ".... land .... plagued forever. .... Nu'Rem .... proper burial.\""; next; mes "-- The ...."; close; @@ -694,8 +694,8 @@ L_FlawedLens: L_Rare: getexp 15000000, 0; set KESHLAM_STATE, KESHLAM_STATE | FLAG_KESHLAM_RAREDROP; - if (rand(4) == 1) goto L_Amulet; // 25% chance - goto L_Ring; // 75% chance + if (rand(3) == 1) goto L_Amulet; // 33.33% chance + goto L_Ring; // 66.66% chance L_Amulet: getitem "EnchantersAmulet", 1; @@ -704,9 +704,9 @@ L_Amulet: close; L_Ring: - getitem "MageRing", 1; + getitem "MagicRing", 1; mes "[Chest]"; - mes "You opened it and found...! A Mage Ring! Lucky!"; + mes "You opened it and found...! A Magic Ring! Lucky!"; close; L_Not_Enough: @@ -786,4 +786,3 @@ L_No: warp "099-7", 92, 36; end; } - diff --git a/world/map/npc/099-7/chronos.txt b/world/map/npc/099-7/chronos.txt index c0e0c9e8..6ca56cf8 100644 --- a/world/map/npc/099-7/chronos.txt +++ b/world/map/npc/099-7/chronos.txt @@ -64,7 +64,7 @@ L_MaxedMedals: mes "I just reached out telepatically to the invisible forces that keep this world into motion and told them what happened to you, so they are aware of your situation.\""; next; goto L_Question; - + L_ExededMaxMedals: set @cur, CHRONOS_BOSS_MEDALS_MAX - (@BOSS_MEDALS - @dif); set @BOSS_MEDALS, CHRONOS_BOSS_MEDALS_MAX; @@ -287,18 +287,18 @@ OnInit: "Candy-Caned Anti-Grinch-Rifle 2020"; setarray $@chronos_2_medal$, "Eyepatch", "TopHat", "FunkyHat", "MushHat", "ShroomHat", "ChristmasElfHat", "FaceMask", "CaptainsHat", "TamOShanter", "BunnyEars", "PanHat", "PilotHat", - "CarbonGasMask", "GroovyHat", "JazzyHat", "AnniversaryHat", "ChicSantaHat", "ReadingGlasses", "EggshellHat", "Pipe", "ScarabArmlet", + "CarbonGasMask", "GroovyHat", "JazzyHat", "AnniversaryHat", "ChicSantaHat", "ReadingGlasses", "EggshellHat", "Pipe", "ScarabArmlet", "Scissors", "LeprechaunHead", "BlinkingEvil", "BlinkingEvilRed", "BlinkingEvilBlue", "BlinkingEvilPink", "BlinkingEvilYellow", "BlinkingHocus", "GoldenPlatemail", "Earmuffs"; setarray $@chronos_2_medal_n$, "Eyepatch", "Top Hat", "Funky Hat", "Mush Hat", "Shroom Hat", "Christmas Elf Hat", "Face Mask", "Captain's Hat", "Tam O' Shanter", "Bunny Ears", "Pan Hat", "Pilot Hat", - "Carbon Gas Mask", "Groovy Hat", "Jazzy Hat", "Anniversary Hat", "Chic Santa Hat", "Reading Glasses", "Eggshell Hat", "Smoking Pipe", "Scarab Armlet", + "Carbon Gas Mask", "Groovy Hat", "Jazzy Hat", "Anniversary Hat", "Chic Santa Hat", "Reading Glasses", "Eggshell Hat", "Smoking Pipe", "Scarab Armlet", "Scissors", "Leprechaun Head", "Mask of Blinking Evil (Green)", "Mask of Blinking Evil (Red)", "Mask of Blinking Evil (Blue)", "Mask of Blinking Evil (Pink)", "Mask of Blinking Evil (Yellow)", "Mask of Blinking Hocus", "Golden Platemail", "Earmuffs"; - setarray $@chronos_3_medal$, "BlinkingEvilHalloween", "MoonshroomHat", "WhiteEvokersRobeBlue", "BlackEvokersRobeBlue", "ApprenticeRobe", "GoldenWarlordPlate", "MageRing"; - setarray $@chronos_3_medal_n$, "Mask of Blinking Evil (Orange)", "Moonshroom Hat", "White Evoker's Robe (Blue)", "Black Evoker's Robe (Blue)", "Apprentice Robe", "Golden Warlord Plate", "Magic Ring"; + setarray $@chronos_3_medal$, "BlinkingEvilHalloween", "MoonshroomHat", "SunshroomHat", "WhiteEvokersRobeBlue", "BlackEvokersRobeBlue", "ApprenticeRobe", "GoldenWarlordPlate", "MagicRing", "Rainerang"; + setarray $@chronos_3_medal_n$, "Mask of Blinking Evil (Orange)", "Moonshroom Hat", "Sunshroom Hat", "White Evoker's Robe (Blue)", "Black Evoker's Robe (Blue)", "Apprentice Robe", "Golden Warlord Plate", "Magic Ring", "Rainerang"; - setarray $@chronos_4_medal$, "OverlordsHelmet", "DarkTalisman", "Aureole", "PaladinsHelmet", "EnchantersAmulet", + setarray $@chronos_4_medal$, "OverlordsHelmet", "DarkTalisman", "Aureole", "PaladinsHelmet", "EnchantersAmulet", "DragonShield", "HeartOfIsis", "BansheeBow", "BullHelmet", "AssassinShirt", "LazuriteRobe", "DarkHelm", "UnderworldMask", "Phylactery"; - setarray $@chronos_4_medal_n$, "Overlord's Helmet", "Dark Talisman", "Prsm Aura", "Paladin's Helmet", "Enchanter's Amulet", + setarray $@chronos_4_medal_n$, "Overlord's Helmet", "Dark Talisman", "Prsm Aura", "Paladin's Helmet", "Enchanter's Amulet", "Dragon Shield", "Heart of Isis", "Banshee Bow", "Bull Helmet", "Assassin Shirt", "Lazurite Robe", "Dark Helm", "Underworld Mask", "Phylactery"; end; } diff --git a/world/map/npc/099-8/mobs.txt b/world/map/npc/099-8/mobs.txt index b46efc08..c7c998a3 100644 --- a/world/map/npc/099-8/mobs.txt +++ b/world/map/npc/099-8/mobs.txt @@ -163,7 +163,7 @@ OnBoss: next; mes "##9The controls seems to have been destroyed!"; mes "##9The panel says the situtation is critical."; - mes "##9Why the final defensive measures didn't engage?"; + mes "##9Why didn't the final defensive measures engage?"; next; mes "What's happening?"; close; @@ -211,7 +211,7 @@ OnBoss: mes "##9The controls seems to have been destroyed!"; mes "##9I wonder where these three rooms are."; mes "##9What sort of research was being conducted?"; - mes "##9What is a Crystal Room? I don't saw any passage."; + mes "##9What is a Crystal Room? I didn't see any passage."; next; mes "What's happening?"; close; @@ -234,4 +234,3 @@ OnBoss: mes "What's happening?"; close; } - diff --git a/world/map/npc/_import.txt b/world/map/npc/_import.txt index 2e832cdb..a44f7f89 100644 --- a/world/map/npc/_import.txt +++ b/world/map/npc/_import.txt @@ -38,6 +38,7 @@ import: npc/011-6/_import.txt import: npc/012-1/_import.txt import: npc/012-3/_import.txt import: npc/012-4/_import.txt +import: npc/012-5/_import.txt import: npc/013-1/_import.txt import: npc/013-2/_import.txt import: npc/013-3/_import.txt diff --git a/world/map/npc/annuals/2022.txt b/world/map/npc/annuals/2022.txt index 4752b137..d5595d48 100644 --- a/world/map/npc/annuals/2022.txt +++ b/world/map/npc/annuals/2022.txt @@ -88,6 +88,3 @@ OnInit: registercmd "#crcend", strnpcinfo(0)+"::OnEndEv"; end; } - - - diff --git a/world/map/npc/annuals/xmas/2020.txt b/world/map/npc/annuals/xmas/2020.txt index 0490d1a7..dc7a66d8 100644 --- a/world/map/npc/annuals/xmas/2020.txt +++ b/world/map/npc/annuals/xmas/2020.txt @@ -402,6 +402,10 @@ OnClock2124: OnClock0024: goto OnClock2359; */ + +OnInit: + set .IS_MAGIC, 1; + end; } @@ -832,4 +836,3 @@ OnNearbyNpc: set @nearby, @nearby + 1; end; } - diff --git a/world/map/npc/annuals/xmas/core.txt b/world/map/npc/annuals/xmas/core.txt index bbfece2d..dc3a383b 100644 --- a/world/map/npc/annuals/xmas/core.txt +++ b/world/map/npc/annuals/xmas/core.txt @@ -194,7 +194,7 @@ L_FinalGift: mes "O look, a present from " + $@xmas_present_from$[@xmas_reward_side]; next; getinventorylist; - if (@inventorylist_count > 97) + if ((checkweight("AmberChristmasSweater", 3) == 0) || (@inventorylist_count > 97)) // check for one of the heaviest*3 here to avoid drops to ground. AmberChristmasSweater/FunkyChristmasSweater/DarkChristmasSweater = 35g goto L_FullInv; set @xmas_reward, (@xmas_reward + ((BaseLevel + 10)/10)); if (debug > 0) @@ -206,8 +206,6 @@ L_FinalGift: if(@xmas_reward >= $@xmas_reward_tally_common) set @xmas_reward_item1$, $@xmas_uncommon_reward$[@xmas_uncommon_slot1]; set @xmas_reward_item2$, $@xmas_uncommon_reward$[@xmas_uncommon_slot2]; - if(checkweight("Iten", 1) == 0) - goto L_FullInv; if(@xmas_reward >= $@xmas_reward_tally_rare) getitem @xmas_reward_item$, 1; if(@xmas_reward >= $@xmas_reward_tally_common) diff --git a/world/map/npc/commands/_import.txt b/world/map/npc/commands/_import.txt index 6e2f0cc2..0b28a3ea 100644 --- a/world/map/npc/commands/_import.txt +++ b/world/map/npc/commands/_import.txt @@ -22,3 +22,4 @@ npc: npc/commands/divorce.txt npc: npc/commands/exp.txt npc: npc/commands/dailypoints.txt npc: npc/commands/mobpoints.txt +npc: npc/commands/labyrinth-reset.txt diff --git a/world/map/npc/commands/destroynpc.txt b/world/map/npc/commands/destroynpc.txt index 1ebede9e..552f9693 100644 --- a/world/map/npc/commands/destroynpc.txt +++ b/world/map/npc/commands/destroynpc.txt @@ -22,7 +22,7 @@ L_Confirm: 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`."; + 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 `#barrier`."; end; L_GM: diff --git a/world/map/npc/commands/hug.txt b/world/map/npc/commands/hug.txt index f97c81e4..af8bd6e1 100644 --- a/world/map/npc/commands/hug.txt +++ b/world/map/npc/commands/hug.txt @@ -18,8 +18,9 @@ close; OnInit: - set .tree_id, getnpcid("#DruidTree0#_M"); + set .tree_id, getnpcid("#DruidTree0"); registercmd "*hugs", strnpcinfo(0); // eq: /me hugs (target) registercmd "*hugs*", strnpcinfo(0); // eq: /me hugs + set .IS_MAGIC, 1; end; } diff --git a/world/map/npc/commands/labyrinth-reset.txt b/world/map/npc/commands/labyrinth-reset.txt new file mode 100644 index 00000000..e95eb3ee --- /dev/null +++ b/world/map/npc/commands/labyrinth-reset.txt @@ -0,0 +1,23 @@ +-|script|labyrinth-reset|32767 +{ + if (GM < 60) goto L_GM; + gmlog "(Labyrinth XP Chest state reset) @labyrinth-reset " + @args$; + wgm "labyrinth-reset : " + strcharinfo(0) + " invoked @labyrinth-reset (Labyrinth XP Chest state cleaner) " + @args$; + set .@i, 0; + goto L_CleanSlot; + +L_CleanSlot: + set $DD5A_EXPCHEST$[.@i], ""; + set .@i, (.@i + 1); + if (.@i > 99) message strcharinfo(0), "labyrinth-reset : complete!"; + if (.@i > 99) end; + goto L_CleanSlot; + +L_GM: + message strcharinfo(0), "labyrinth-reset : GM command is level 60, but you are level " + GM; + end; + +OnInit: + registercmd chr(ATCMD_SYMBOL) + "labyrinth-reset", strnpcinfo(0); + end; +} diff --git a/world/map/npc/functions/doomsday.txt b/world/map/npc/functions/doomsday.txt index bba08e75..2be517c3 100644 --- a/world/map/npc/functions/doomsday.txt +++ b/world/map/npc/functions/doomsday.txt @@ -979,7 +979,3 @@ OnDeathAct4: end; } - - - - diff --git a/world/map/npc/functions/global_event_handler.txt b/world/map/npc/functions/global_event_handler.txt index b1c5917e..ed95b442 100644 --- a/world/map/npc/functions/global_event_handler.txt +++ b/world/map/npc/functions/global_event_handler.txt @@ -20,11 +20,13 @@ OnPCLoginEvent: callfunc "VaultLogin"; // Mirror Lake Protocol biddings callfunc "VaultLogout"; // Clean some stuff, to be safe if (WEIGHT_LIMIT) set MaxWeightOverride, WEIGHT_LIMIT; // If this char var set, override max weight (tradebots, etc) + if (PC_BOSS_REWARD) set @PC_BOSS_REWARD, PC_BOSS_REWARD; // Load tempvar from per-acct var (needed by maybe_reward_boss_kill) // add more here set @login_event, 2; end; OnPCKillEvent: + callfunc "maybe_reward_boss_kill"; callfunc "elanore_decrease_exp"; // decrease heal exp for doing bad things callfunc "SweetTooth"; end; @@ -33,6 +35,7 @@ OnMobKillEvent: callfunc "MobPoints"; callfunc "MobKillHandler"; callfunc "SweetTooth"; + callfunc "spawns_on_mobkill"; end; OnPCDieEvent: @@ -59,3 +62,18 @@ OnDay0411: callfunc "MaybeAnnounceBirthday"; end; } + +// Inputs: nothing, but assumes RID attached and @victimrid set on PK kill +// Return: nothing, but adjusts BOSS_POINTS +// TODO: move this func somewhere else maybe? +function|script|maybe_reward_boss_kill +{ // not here or lacks reward for head -> skip rewarding. + if ((@victimrid < 1) || !(isloggedin(@victimrid)) || (get(@PC_BOSS_REWARD, @victimrid)) < 1) goto L_SkipReward; + set BOSS_POINTS, (BOSS_POINTS + get(@PC_BOSS_REWARD, @victimrid)); + message strcharinfo(0), "[boss reward] : you killed eventer-controlled boss and gained " + get(@PC_BOSS_REWARD, @victimrid) + + " boss points, for total of " + BOSS_POINTS + " boss points"; + return; + +L_SkipReward: + return; +} diff --git a/world/map/npc/functions/spawns_on_mobkill.txt b/world/map/npc/functions/spawns_on_mobkill.txt new file mode 100644 index 00000000..fadb6cd1 --- /dev/null +++ b/world/map/npc/functions/spawns_on_mobkill.txt @@ -0,0 +1,81 @@ +// Mob splitting/spawn logic By Hello=) + +// Spawns some mobs on death of other mob. E.g. split BIG slime -> few smaller ones +// This function meant to be called with player RID attached (usually in OnMobKillEvent) +// Inputs: nothing, but expects @mobID, @mobX and @mobY set (usually by server) +// Return: nothing, but spawns few things. +function|script|spawns_on_mobkill +{ + if (@mobID == SeaSlimeMother) goto L_SplitSea; + if ((@mobID == GreenSlimeMother) || (@mobID == GreenSuperSlime)) goto L_SplitGreen; + if (@mobID == YellowSuperSlime) goto L_SplitYellow; + if (@mobID == RedSuperSlime) goto L_SplitRed; + if (@mobID == BlueSuperSlime) goto L_SplitBlue; + if (@mobID == Tormenta) goto L_TorWitchDead; + if ((@mobID == Luvia) && (getmap() != "052-2")) goto L_LuvWitchDead; // Skip spawns if its Illia + if (@mobID == Blanc1) goto L_Blanc1Dead; + return; // Not mob of interest -> do nothing + +L_SplitSea: + void call("spawn_mobs_around", getmap(), @mobX, @mobY, AngrySeaSlime, rand(8, 16)); + return; + +L_SplitGreen: + void call("spawn_mobs_around", getmap(), @mobX, @mobY, AngryGreenSlime, rand(8, 16)); + return; + +L_SplitYellow: + void call("spawn_mobs_around", getmap(), @mobX, @mobY, YellowSlime, rand(6, 16)); + return; + +L_SplitRed: + void call("spawn_mobs_around", getmap(), @mobX, @mobY, RedSlime, rand(6, 16)); + return; + +L_SplitBlue: + void call("spawn_mobs_around", getmap(), @mobX, @mobY, BlueSlime, rand(3, 6)); + return; + +L_TorWitchDead: + void call("spawn_mobs_around", getmap(), @mobX, @mobY, VoidBat, rand(7, 12)); + void call("spawn_mobs_around", getmap(), @mobX, @mobY, DemonicSpirit, rand(5, 10)); + void call("spawn_mobs_around", getmap(), @mobX, @mobY, UndeadWitch, 1); + return; + +L_LuvWitchDead: + void call("spawn_mobs_around", getmap(), @mobX, @mobY, VoidBat, rand(7, 12)); + void call("spawn_mobs_around", getmap(), @mobX, @mobY, DemonicSpirit, rand(5, 8)); + void call("spawn_mobs_around", getmap(), @mobX, @mobY, UndeadWitch, 1); + return; + +L_Blanc1Dead: + void call("spawn_mobs_around", getmap(), @mobX, @mobY, Blanc2, 1); + return; +} + +// Spawns mobs around spot, if it can - or stacks mobs on spot if no room for 3x3 area +// This function can be called from any context. +// Inputs: arg0: map (string), arg1: X, arg2: Y, arg3: mob ID, arg4: amount +// Return: nothing, but spawns few things. +function|script|spawn_mobs_around +{ + set .@map$, getarg(0, ""); // map where to spawn + set .@mobX, getarg(1, -1); // X coord + set .@mobY, getarg(2, -1); // Y coord + set .@mobID, getarg(3, -1); // Mob ID to spawn. + set .@mobQTY, getarg(4, -1); // Amount. + if ((.@map$ == "") || (.@mobX < 1) || (.@mobY < 1) || (.@mobID < 1002) || + (.@mobX > getmapmaxx(.@map$)) || (.@mobY > getmapmaxy(.@map$)) || + (.@mobQTY < 1)) // Invalid parameters given? + goto L_Abort; // Yell and return + if ((.@mobX > 1) && (.@mobY > 1) && (.@mobX < getmapmaxx(.@map$)) && + (.@mobY < getmapmaxy(.@map$)) && (.@mobQTY > 1)) //Enough room for 3x3 && "mass" spawn + areamonster .@map$, (.@mobX-1), (.@mobY-1), (.@mobX+1), (.@mobY+1), "", .@mobID, .@mobQTY; + else + monster .@map$, .@mobX, .@mobY, "", .@mobID, .@mobQTY; // 3x3 wouldnt fit or just 1 mob. + return; + +L_Abort: + debugmes "spawn_mob_around: invalid args! Map=" + .@map$ + " x=" + .@mobX + " y=" + .@mobY + " mobID=" + .@mobID + " mobQTY=" + .@mobQTY; + return; +} diff --git a/world/map/npc/functions/teleport_manager.txt b/world/map/npc/functions/teleport_manager.txt new file mode 100644 index 00000000..529bd5e0 --- /dev/null +++ b/world/map/npc/functions/teleport_manager.txt @@ -0,0 +1,553 @@ +// GateBuilders toolkit aka "arbitrary teleports". +// Author: Hello=). Credits go to Freeyorp and HoraK for some insights. + +// This lacks limits of previously existing teleport systems. +// * New teleports can be instatiated as needed, running side by side. +// * Teleports can have finite lifetime, disappearing themself. +// * Teleports can be removed, leaving no side effects. +// * No leftovers or side effects after teleport removed. +// * Up to about 100 teleports can coexist. +// * Flexible condition check based on cookie. If some gate got cookie set +// then it only lets players with matching variable to pass. +// * Aspects like timeout, FX and their timing, etc can be customized. +// * Teleports meant to be registered in TeleportManager. However, its +// possible to create "unmanaged" teleports (e.g. for spells). +// * In future it can allow custom hooks/checks on teleporters (planned) + +// Technically, TeleportManager NPC keeps teleports as array of integers. +// with structure .teleports[.index] = Teleport's NPC ID. +// Up to 100 teleports allowed (.index = 1..100, .index = 0 is unused). +// if .teleports[.index] = 0 -> empty/reusable slot. +// All teleport specific data stored in puppet NPC itself. +// Teleport NPCs are puppets of TeleportManager and inherit its code. + +// Attempt will be made to make it reasonably robust. That is, +// * Try to handle usage bugs/bogus data/etc. +// * No actions causing big server side fallouts. +// * No out of bounds, nonexistent NPC references, etc. + +// Teleports have the following variables (some are set on teleport_create) +// .srcmap$ - source map of teleport's npc +// .src_x - source map of teleport's npc, X coord +// .src_y - source map of teleport's npc, Y coord +// .dstmap$ - destination map of teleport's npc +// .dst_x - destination map of teleport's npc, X coord +// .dst_y - destination map of teleport's npc, Y coord +// .lifetime - teleport's lifetime, in ms. 0 = permanent (until server restart) +// .cookie - if set, only teleport players with teleport_cookie == NPC's .cookie +// .fx, - FX effect to play on teleport. +// .fx_time, - Time FX allowed to play before teleport actually happens. +// .IS_MANAGER - Indicates TeleportManager NPC. Puppets wouldnst have that. +// .managed - Indicates its teleport managed by TeleportManager. Its possible to +// create unmanaged teleports, e.g. transient teleports by spells. +// .teleport - Set to 1 to be able to distinguish teleport NPCs from other NPCs +// .info$ - Description, shown to user when clicking NPC +// .inactive - set to disable OnTouch reaction. Useful for staged shutdown or +// e.g. temporarily deactivating teleport for whatever reason. + +// Key functcions: teleport_add and teleport_del. Rest are "helpers". + +// Main NPC code, runs on both TeleportManager and teleport puppets. +// Do not rename NPC: functions below rely on NPC name. +-|script|TeleportManager|32767 +{ + message strcharinfo(0), .info$; // Display info about teleport, var allows message change. + end; + +// Manager code below - puppets dont use OnCmd* events +// Invoked when someone adds teleport via @teleportadd +OnCmdAdd: + if (call("teleport_access_check")) end; // Not allowed to use this. + set .@idx, call("teleport_find_slot", 0); // Try to find empty slot (containing 0) + if (.@idx <= 0) goto L_AddNoRoom; // No empty slots? NB: teleports[0] not used. + if (call ("teleportadd_parseargs") <= 0) goto L_AddArgsFail; // @VARs like @POS_X, @NAME$, etc set by teleportadd_parseargs() +// Create actual teleport NPC ------- src map - src x src y --- name - NPC ---- Sz Sz dst map - dst x - dst y -- time - cook managed? + set .@tp, call("teleport_create", getmap(), @POS_X, @POS_Y, @NAME$, @NPCSPRITE, 0, 0, @DSTMAP$, @DST_X, @DST_Y, @TIMEOUT, 0, 1); + if (.@tp <= 0) goto L_AddPuppetFail; // Has puppet() failed? + set .teleports[.@idx], .@tp; // Store NPC ID -> .teleports[.@idx] slot. Access safe: teleport_find_slot() == 1..100 + gmlog strcharinfo(0) + " accessed TeleportManager: @teleportadd " + @args$; + wgm strcharinfo(0) + " accessed TeleportManager: @teleportadd " + @args$; + message strcharinfo(0), "[TeleportManager] : Added: [" + .@idx + "] " + + (get(.srcmap$, .@tp)) + " " + (get(.src_x, .@tp)) + "," + (get(.src_y, .@tp)) + + " -> " + (get(.dstmap$, .@tp)) + " " + (get(.dst_x, .@tp)) + "," + (get(.dst_y, .@tp)) + + " lifetime:" + ((get(.lifetime, .@tp)) / 1000) + "s, Name:" + strnpcinfo(0, .@tp) + " (" + .@tp + ")"; + end; + +L_AddNoRoom: + message strcharinfo(0), "[TeleportManager] : Too many teleports open, max 100 tracked teleports"; + message strcharinfo(0), "[TeleportManager] : use @teleportlist to list and @teleportdel to remove some."; + end; + +L_AddArgsFail: + if (@DSTMAP$ != "help") message strcharinfo(0), "[TeleportManager] : try @teleportadd help or @teleporthelp"; + end; + +L_AddPuppetFail: + message strcharinfo(0), "[TeleportManager] : failed to add teleport, check params. Duplicate NPC name maybe?"; + end; + +// Invoked when someone removes teleport via @teleportdel +OnCmdDel: + if (call("teleport_access_check")) end; // Not allowed to use this. + callfunc "argv_splitter"; + if (@argv[0] <= 0) goto L_DelFail; + if (call("teleport_delete", @argv[0]) <= 0) goto L_DelNotFound; + message strcharinfo(0), "[TeleportManager] : requested teleport ID [" + @argv[0] + "] to terminate"; + gmlog strcharinfo(0) + " accessed TeleportManager: @teleportdel " + @args$; + wgm strcharinfo(0) + " accessed TeleportManager: @teleportdel " + @args$; + end; + +L_DelNotFound: + message strcharinfo(0), "[TeleportManager] : teleport ID [" + @argv[0] + "] not found."; + end; + +L_DelFail: + message strcharinfo(0), "[TeleportManager] : Bad parameters."; + callfunc("teleport_help_del"); + end; + +// Invoked when someone lists teleports via @teleportlist +OnCmdList: + if (call("teleport_access_check")) end; // Not allowed to use this. + callfunc("teleports_list"); + gmlog strcharinfo(0) + " accessed TeleportManager: @teleporlist" + @args$; + end; + +// Invoked when someone requests help via @teleporthelp +// (doesn't needs access checks - does nothing dangerous) +OnCmdHelp: + message strcharinfo(0), "[TeleportManager] : Commands: @teleportadd @teleportdel @teleportlist @teleporthelp"; + message strcharinfo(0), "[TeleportManager] : @teleportlist - display list of active teleports"; + callfunc("teleport_help_del"); + callfunc("teleport_help_add"); + end; + +// Puppets (teleportation pads) logic below. +// Invoked when player steps on npc. Manager NPC ignores this. +OnTouch: + if (.IS_MANAGER) end; // Manager NPC isnt teleport -> no interaction. + if (.inactive) end; // If gate deactivated -> no interaction. + if ((.cookie) && (teleport_cookie != .cookie)) goto L_CantPass; + set teleport_cookie, 0; // Clear teleport cookie of player on teleport use. + sc_start SC_SLOWMOVE, .fx_time+200, 100000; // Slow player temporarily to avoid movement VS warp DCs + addtimer .fx_time, strnpcinfo(0)+"::OnTeleport"; // time before teleporting away + misceffect .fx; // Default .fx set in teleport_add, other code can override it. + end; +L_CantPass: + message strcharinfo(0), .cantpass$; // NPC var allows to change message. + end; // "keyed" teleport and player didnt had proper cookie. + +// Teleportation timer event (attached to player). Queued by OnTouch. +OnTeleport: + warp .dstmap$, .dst_x, .dst_y; + addtimer 3000, strnpcinfo(0)+"::OnWarpDone"; // Mostly to clean up SC icon + end; + +// Mostly used to remove slow icon that sticks in some cases. +OnWarpDone: + sc_end SC_SLOWMOVE; + end; + +// Invoked on timed teleport's NPC timer expired. +OnTeleportExpired: + set .inactive, 1; // Flag shutdown so OnTouch ignores incoming players. + addnpctimer (.fx_time + 1000), strnpcinfo(0)+"::OnTeleportShutdown"; // Give time to in-flight players to teleport. + end; + +// Does actual teleport shutdown. +OnTeleportShutdown: + void call("teleport_mgr_clean"); // Cleanups adequately both "managed" and "unmanaged" teleports. + if !(.IS_MANAGER) destroy; // Dont ever try to destroy manager npc. + end; + +OnInit: + set .IS_MANAGER, 1; // Only Manager NPC would have this, puppets wouldnt. + set .info$, "TeleportManager : This thing is unlike anything you've seen before"; // Manager's NPC message on click. + registercmd "@teleportadd", "TeleportManager::OnCmdAdd"; + registercmd "@teleportdel", "TeleportManager::OnCmdDel"; + registercmd "@teleportlist", "TeleportManager::OnCmdList"; + registercmd "@teleporthelp", "TeleportManager::OnCmdHelp"; + registercmd "@teleport", "TeleportManager::OnCmdHelp"; + end; +} + +// PUBLIC API. Creates requested teleport NPC. Arg 0..6 are like puppet(). +// This function designed to run in ANY context, whether RID attached or not. +// It creates puppet + setups all relevant data in created NPC. +// arg(0): Teleport's map. +// arg(1): Teleport's X +// arg(2): Teleport's Y +// arg(3): Teleport's NPC label +// arg(4): Teleport's NPC sprite ID +// arg(5): Teleport's X size +// arg(6): Teleport's Y size +// arg(7): Destination map name. +// arg(8): Destination X +// arg(9): Destination Y +// arg(10):Teleport lifetime ( > 0 or -1 = indefinite) +// arg(11):Teleport magic cookie, 0 = everyone allowed, otherwise checks match. +// arg(12):Whether teleport managed, 0 = unmanaged, != 0 means it is. +// Return: On success: NPC ID of teleport created. +// On failure: 0 if puppet failed, -1 if arg check failed. +function|script|teleport_create +{ + set .@map$, getarg(0, ""); // Get args (+failsafe defailts) + set .@x, getarg(1, -10); // Get args (+failsafe defailts) + set .@y, getarg(2, -10); // Get args (+failsafe defailts) + set .@name$, getarg(3, ""); // Get args (+failsafe defailts) + set .@sprite, getarg(4, -10); // Get args (+failsafe defailts) + set .@xsz, getarg(5, -10); // Get args (+failsafe defailts) + set .@ysz, getarg(6, -10); // Get args (+failsafe defailts) + set .@dstmap$, getarg(7, -10); // Get args (+failsafe defailts) + set .@dst_x, getarg(8, -10); // Get args (+failsafe defailts) + set .@dst_y, getarg(9, -10); // Get args (+failsafe defailts) + set .@lifetime, getarg(10, -10); // Get args (+failsafe defailts) + set .@cookie, getarg(11, -10); // Get args (+failsafe defailts) + set .@managed, getarg(12, -10); // Get args (+failsafe defailts) + set .@res, -1; // Validate what caller gave + if !(call("teleport_map_valid", .@map$ )) goto L_Fail; // Validate src map$ + if !(call("teleport_map_valid", .@dstmap$)) goto L_Fail; // Validate dst map$ + if ((.@x < 0) || (.@y < 0)) goto L_Fail; // SRC X/Y cant be < 0 + if ((.@dst_x < 0) || (.@dst_y < 0)) goto L_Fail; // DST X/Y cant be < 0 + if ((.@xsz < 0) || (.@ysz < 0)) goto L_Fail; // NPC X/Y size cant be <= 0 + if (.@name$ == "") goto L_Fail; // NPC name cant be empty + if (.@sprite <= 0) goto L_Fail; // NPC sprite cant be <= 0 + if (.@lifetime < -1 || (.@lifetime) == 0) goto L_Fail; // Lifetime either > 0 or -1 = infinite + if ((.@cookie < 0) || (.@managed < 0)) goto L_Fail; // Cookie and managed cant be < 0 + set .@res, puppet(.@map$, .@x, .@y, .@name$, .@sprite, .@xsz, .@ysz); // instatiate teleport NPC + if (.@res <= 0) goto L_Fail; + //NPC's var value NPC ID -- teleport defaults + set .srcmap$, .@map$, .@res; // set .srcmap$ of NPC + set .src_x, .@x, .@res; // set .src_x of NPC + set .src_y, .@y, .@res; // set .src_y of NPC + set .dstmap$, .@dstmap$, .@res; // set .dstmap$ of NPC + set .dst_x, .@dst_x, .@res; // set .dst_x of NPC + set .dst_y, .@dst_y, .@res; // set .dst_y of NPC + set .lifetime, .@lifetime, .@res; // set .lifetime of NPC + set .cookie, .@cookie, .@res; // set .cookie of NPC + set .fx, 41, .@res; // set default teleport FX + set .fx_time, 350, .@res; // set default FX time (warp delay) + set .managed, .@managed, .@res; // If > 0, npc managed by TeleportManager (unmanaged temp TPs can be e.g. spells) + set .teleport, 1, .@res; // All teleports created by teleport_create have this. + set .info$, "Teleport : strange structure of unknown origins", .@res; // Default on-click message. + set .cantpass$, "Teleport : structure seems to ignore you", .@res; // Default "can't pass" message. + // If timeout requested, set up teardown timer. + if (.@lifetime > 0) addnpctimer .@lifetime, .@name$+"::OnTeleportExpired"; + return .@res; + +L_Fail: + return .@res; +} + +// PUBLIC API. This function deletes teleport. +// This function designed to run in ANY context, whether RID attached or not. +// Teleport removed by NPC destroy + setting its .teleports[.index] = 0. +// Inputs: arg[0] is either slot index (1..100) or NPC ID to remove. +// Return: 1 on success, <= 0 on failure. +function|script|teleport_delete +{ + set .@npctodel, getarg(0, -1); // This is either slot # or NPC ID + if (.@npctodel <= 0) goto L_Error; + if (.@npctodel > 100) goto L_GotNpcId; // If > 100 assume its NPC ID, not slot. + set .@npctodel, call("teleport_get_slot_val", .@npctodel); // Get NPC id from teleport manager slot. + if (.@npctodel <= 0) goto L_Error; // Failed to get NPC ID? + goto L_GotNpcId; + +L_GotNpcId: + if !(get(.teleport, .@npctodel)) goto L_Error; // Sanity check its teleport NPC indeed + donpcevent strnpcinfo(0, .@npctodel)+"::OnTeleportShutdown"; // Request teleport NPC to perform shutdown. + return 1; + +L_Error: + return 0; +} + +// This function prints teleports known to TeleportManager. +// This function MUST run in player context with RID attached to send messages. +// Inputs: nothing, all data taken from TeleportManager NPC. +// Return: nothing, just prints info as it iterates manager's slots. +function|script|teleports_list +{ + set .@idx, 0; + freeloop 1; // Loops via 100 slots -> can time out. + message strcharinfo(0), "[TeleportManager] : ---- Active teleports ----"; + goto L_NextSlot; + +L_NextSlot: + set .@idx, (.@idx+1); + if (.@idx > 100) goto L_Done; // Iterated whole array. + set .@npc, call("teleport_get_slot_val", .@idx); + if (.@npc < 0) goto L_Error; // Abort iteration on error and report it. + if (.@npc > 0) goto L_PrintSlot; // Print slot data. + goto L_NextSlot; // .@npc == 0 // just iterate to next slot + +L_PrintSlot: + if !(get(.managed, .@npc)) goto L_Error; // Sanity check its really "managed teleport" NPC + // Display info about teleport, data taken from NPC. + message strcharinfo(0), "[TeleportManager] : [" + .@idx + "] " + + (get(.srcmap$, .@npc)) + " " + (get(.src_x, .@npc)) + "," + (get(.src_y, .@npc)) + + " -> " + (get(.dstmap$, .@npc)) + " " + (get(.dst_x, .@npc)) + "," + (get(.dst_y, .@npc)) + + " lifetime:" + ((get(.lifetime, .@npc)) / 1000) + "s, Name:" + strnpcinfo(0, .@npc) + " (" + .@npc + ")"; + goto L_NextSlot; + +L_Done: + freeloop 0; + message strcharinfo(0), "[TeleportManager] : ---- End ----"; + return; + +L_Error: + freeloop 0; + message strcharinfo(0), "[TeleportManager] : Error iterating TeleportManager slots (bug?!)"; + return; +} + +// This function finds slot in TeleportManager with given NPC ID. +// This function designed to run in ANY context, whether RID attached or not. +// Inputs: arg[0]: NPC ID to find, 0 means "find free slot", +// Return: slot index in 1..100 range if slot found, <= 0 on fail. +function|script|teleport_find_slot +{ + if (getarg(0) < 0) goto L_Fail; // Caller gave some crap? + set .@wanted, getarg(0); // NPC ID to find (or 0 to find free slot) + set .@manager, getnpcid("TeleportManager"); + if (.@manager <= 0) goto L_Fail; // Manager NPC not found? + set .@i, 1; // 0 slot not used. + freeloop 1; + goto L_TrySlot; // Start iterating via teleport slots on TeleportManager. + +L_TrySlot: + set .@npcid, get(.teleports[.@i], .@manager); + if (.@npcid == .@wanted) goto L_Found; //.teleports[.@i] == desired ID? + if (.@i > 100) goto L_Fail; // No free slots in teleports[1..100] + set .@i, (.@i + 1); goto L_TrySlot; // Try next slot + +L_Found: + freeloop 0; + return .@i; + +L_Fail: + freeloop 0; + return 0; +} + +// This function returns value in TeleportManager's slot with given indes. +// This function designed to run in ANY context, whether RID attached or not. +// Inputs: arg[0]: slot ID, must be 1 .. 100; +// Return: -1 on error, 0 on empty slot, or NPC ID of teleport in given sslot. +function|script|teleport_get_slot_val +{ + if ((getarg(0) < 1) || (getarg (0) > 100)) goto L_Fail; // Bogus index? + set .@index, getarg(0); + set .@manager, getnpcid("TeleportManager"); + if (.@manager <= 0) goto L_Fail; // Manager NPC not found? + set .@ret, get(.teleports[.@index], .@manager); + return .@ret; + +L_Fail: + return -1; +} + +// This function sets slot in TeleportManager with given value. +// This function designed to run in ANY context, whether RID attached or not. +// Inputs: arg[0]: slot ID, must be 1 .. 100; +// arg[1]: value to store to slot; +// Return: 1 on success, <= 0 on failure. +function|script|teleport_set_slot_val +{ + if ((getarg(0) < 1) || (getarg (0) > 100)) goto L_Fail; // Bogus index? + if (getarg(1) < 0) goto L_Fail; // TP slots are NPC ID or 0 for empty + set .@index, getarg(0); + set .@val, getarg(1); + set .@manager, getnpcid("TeleportManager"); + if (.@manager <= 0) goto L_Fail; // Manager NPC not found? + set .teleports[.@i], .@val, .@manager; + return 1; + +L_Fail: + return 0; +} + +// PRIVATE: This function cleans up slot in TeleportManager on teleport shutdown. +// This function ONLY meant to be invoked by teleport NPC puppet on shutdown! +// Inputs: nothing. Gets data from its calling NPC. +// Return: 1 on success, <= 0 on failure. +function|script|teleport_mgr_clean +{ + if !(.managed) goto L_RetOk; // Teleport not managed by TeleportManager -> no cleanup + set .@my_id, getnpcid(); + if (.@my_id <= 0) goto L_RetFail; // Give up on cleanup, slot will leak + // Call chaining OK: teleport_set_slot_val() checks slot # sanity, so teleport_find_slot() fail handled. + set .@res, call("teleport_set_slot_val", call("teleport_find_slot", .@my_id), 0); + if (.@res != 1) goto L_RetFail; + goto L_RetOk; +L_RetOk: + return 1; + +L_RetFail: + debugmes "teleport_mgr_clean: TeleportManager cleanup failure -> slot leak. Likely bug! .@my_id=" + .@my_id + ".@res=" + .@res; + return 0; +} + +// PRIVATE: This function validates @teleportadd args and prepares for teleport_add() call. +// This function MUST be invoked with player RID attached, by TeleportManager NPC +// Inputs: nothing, but assumes args$ set. +// Return: <= 0 on failure, 1 on success. +// Return: sets @POS_X, @POS_X, @DSTMAP$, @DST_X, @DST_Y, +function|script|teleportadd_parseargs +{ + callfunc "argv_splitter"; + set @DSTMAP$, @argv$[0]; // Destination map + set @DST_X, @argv[1]; // Dst warp coordinates + set @DST_Y, @argv[2]; // Dst warp coordinates + set @NAME$, @argv$[3]; // Teleport's label + set @TIMEOUT, @argv[4]; // Teleport's lifetime + set @NPCSPRITE, @argv[5]; // Teleport's NPC sprite (optional) + // Check DST map is okay + if ((@DSTMAP$ == "help") || (@DSTMAP$ == "")) goto L_DisplayHelp; // @teleportadd help or @teleportadd + if !(call("teleport_map_valid", @DSTMAP$)) goto L_FailBadmap; // DST: invalid map? + // Check DST X,Y sane + if ((@DST_X <= 0) || (@DST_Y <= 0)) goto L_FailBadDstXY1; // DST: invalids coords <= 0? + if ((getmapmaxx(@DSTMAP$) < @DST_X) || (getmapmaxy(@DSTMAP$) < @DST_Y)) goto L_FailBadDstXY2; // Outside of map? + // Check if DST is collision + if (iscollision(@DSTMAP$, @DST_X, @DST_Y)) goto L_FailDstCollide; + // Try adaptive NPC placement. Above caller if there's room or on caller if not. + set @POS_X, POS_X; + if ((POS_Y > 2) && !(iscollision(getmap(), POS_X, (POS_Y-2)))) set @POS_Y, (POS_Y - 2); + else set @POS_Y, POS_Y; // Overhead placement failed, use caller's tile + // NPC name checks + if (@NAME$ == "") goto L_FailNPCName; + // TIMEOUT checks and setup + if ((@TIMEOUT < -1) || (@TIMEOUT == 0) || (@TIMEOUT > 2000000)) goto L_FailTimeout; + if (@TIMEOUT > 0) set @TIMEOUT, (@TIMEOUT * 1000); // translate seconds -> ms to make more wieldy numbers + // NPC SPRITE configuration + if ((@NPCSPRITE != 424) && (@NPCSPRITE != 369) && (@NPCSPRITE != 368) + && (@NPCSPRITE != 325) && (@NPCSPRITE != 324)) set @NPCSPRITE, 424; + // All checks complete + return 1; // Everything OK + +L_FailBadmap: + message strcharinfo(0), "[TeleportManager] : @teleportadd: unknown destination map:" + @DSTMAP$; + return -1; + +L_FailBadDstXY1: + message strcharinfo(0), "[TeleportManager] : @teleportadd: destination X,Y must be > 0! Given X=" + @DST_X + " Y=" + @DST_Y; + return -2; + +L_FailBadDstXY2: + message strcharinfo(0), "[TeleportManager] : @teleportadd: destination X,Y outside of map! Given X=" + @DST_X+ " Y=" + @DST_Y; + return -3; + +L_FailDstCollide: + message strcharinfo(0), "[TeleportManager] : @teleportadd: destination MAP=" + @DSTMAP$ + " X=" + @DST_X + " Y=" + @DST_Y + " is a collision (impassable)"; + return -4; + +L_FailNPCName: + message strcharinfo(0), "[TeleportManager] : @teleportadd: NPCNAME can't be empty!"; + return -5; + +L_FailTimeout: + message strcharinfo(0), "[TeleportManager] : @teleportadd: timeout must be either -1, or > 0 and < 2000000 (seconds)"; + return -6; + +L_DisplayHelp: + void call("teleport_help_add"); + return -7; +} + +// PUBLIC API: This function checks if map name known and OK to use. +// This function designed to run in any context. +// Inputs: arg$[0] is map name to check for sanity. +// Return: 1 for known maps, 0 for unknown +function|script|teleport_map_valid +{ + set .@inputmap$, getarg(0, ""); + set .@i, 0; + setarray .@maps1$, "001-1", "001-2", "001-3", "002-1", "002-2", "002-3", + "002-4", "002-5", "003-1", "003-4", "004-1", "004-3", + "004-4", "004-5", "005-3", "006-1", "006-2", "006-3", + "007-1", "007-2", "008-1", "009-1", "009-2", "009-3", + "009-4", "009-5", "009-6", "009-7", "009-8", "010-1", + "010-2", "011-1", "011-3", "011-4", "011-6", "012-1", + "012-3", "012-4", "013-1", "013-2", "013-3", "014-1", + "014-3", "015-1", "015-3", "016-1", "016-2", "017-1", + "017-2", "017-3", "017-4", "017-9", "018-1", "018-2", + "018-3", "019-1", "019-3", "019-4", "020-1", "020-2", + "020-3", "021-3", "023-1", "023-2", "023-3", "025-1", + "025-3", "025-4", "026-1", "026-2", "027-1", "027-2", + "027-3", "027-4", "027-5", "027-6", "027-7", "027-8", + "028-1", "028-3", "029-1", "029-2", "029-3", "029-4", + "030-1", "030-2", "030-3", "030-4", "031-1", "031-2", + "031-3", "031-4", "032-3", "033-1", "034-1", "034-2", + "035-2", "036-2", "041-1", "042-1", "043-1", "043-3", + "043-4", "045-1", "046-1", "046-3", "047-1", "047-3"; +// Had to split to 2 arrays as its too big for array initializer + setarray .@maps2$, "048-2", "051-1", "051-3", "052-1", "052-2", "055-1", + "055-3", "056-2", "057-1", "058-1", "058-2", "069-2", + "070-1", "070-3", "099-1", "099-2", "099-3", "099-4", + "099-5", "099-6", "099-7", "099-8", "botcheck"; + set .@arr_sz1, getarraysize(.@maps1$[0]); + set .@arr_sz2, getarraysize(.@maps2$[0]); + freeloop 1; // Needed to iterate over array of about 150 maps + goto L_NextMap; // Start iterating over array of maps. + +L_NextMap: + if (.@inputmap$ == .@maps1$[.@i]) goto L_Found; // Found map in arr 1? + if (.@inputmap$ == .@maps2$[.@i]) goto L_Found; // Found map in arr 2? + set .@i, (.@i + 1); // increment .@maps$[] index + if ((.@i >= .@arr_sz1) && (.@i >= .@arr_sz2)) goto L_NotFound; // Abort if whole arrays scanned + goto L_NextMap; // Try next map in .@maps$[] + +L_NotFound: + freeloop 0; + return 0; + +L_Found: + freeloop 0; + return 1; +} + +// PRIVATE: This function displays usage help for TeleportManager - @teleportadd +// This function should be invoked by TeleportManager with RID attached. +// Inputs: nothing. +// Return: nothing, just shows usage -> caller. +function|script|teleport_help_add +{ + message strcharinfo(0), "[TeleportManager] : @teleportadd <MAP> <X> <Y> <NPCNAME> <TIMEOUT> [sprite]"; + message strcharinfo(0), "[TeleportManager] : <MAP> <X> <Y>: teleport's destination map and coordinates"; + message strcharinfo(0), "[TeleportManager] : <NPCNAME>: name of NPC, unique and nonempty. If it stats with # its hidden"; + message strcharinfo(0), "[TeleportManager] : <TIMEOUT>: teleport lifetime (sec), < 2 000 000 sec, -1 = persistent"; + message strcharinfo(0), "[TeleportManager] : [sprite]: optional, NPC sprite (424,369,368,325 and 324 accepted)"; + message strcharinfo(0), "[TeleportManager] : Example: @teleportadd 009-1 52 39 Hurns -1 adds permanent teleport to Hurns menhir"; + message strcharinfo(0), "[TeleportManager] : Example: @teleportadd 009-1 52 39 Hurns 600 324 - same but 10 min, and red circle"; + return; +} + +// PRIVATE: This function displays usage help for TeleportManager - @teleportdel +// This function should be invoked by TeleportManager with RID attached. +// Inputs: nothing. +// Return: nothing, just shows usage -> caller. +function|script|teleport_help_del +{ + message strcharinfo(0), "[TeleportManager] : @teleportdel <ID>"; + message strcharinfo(0), "[TeleportManager] : ID either slot# (1..100) or teleport NPC ID"; + return; +} + +// Access checks for TeleportManager. Based on cut-down BossPowers checks. +function|script|teleport_access_check +{ + if ($BP_DISABLE) goto L_Killswitch; // If things go wrong, TeleportManager can be disabled. + if (#BP_DISABLE) goto L_Killswitch; // If someone abuses feature, there's _per-account_ DENY flag. + if (GM >= 40) goto L_Allowed; // GM >= 40 can use boss actions. + if (IS_EVENTER == 42) goto L_Allowed; // Trusted player(s) could be allowed to access Eventer "magic" +// if (debug) goto L_Allowed; // Allow on debug. + message strcharinfo(0), "[TeleportManager] : You can't use this feature at this time. Sorry. [1]"; + return 1; // Not allowed by default. + +L_Allowed: + return 0; // Whoever gets here allowed to invoke BossPowers spells + +L_Killswitch: + message strcharinfo(0), "[TeleportManager] : You can't use this feature at this time. Sorry. [2]"; + return 2; +} diff --git a/world/map/npc/items/anchor_stone.txt b/world/map/npc/items/anchor_stone.txt index c1ea722b..e0be2f1c 100644 --- a/world/map/npc/items/anchor_stone.txt +++ b/world/map/npc/items/anchor_stone.txt @@ -9,6 +9,11 @@ function|script|useAnchorStone end; OnUse: + if (isin("botcheck",25,27,51,47)) + goto L_Prison; + if (getmapflag(getmap(), MF_NOSAVE) || getmapflag(getmap(), MF_NOTELEPORT) || getmapflag(getmap(), MF_NOWARP) || isin("009-7",$@fightclub_x1,$@fightclub_y1,$@fightclub_x2,$@fightclub_y2)) + goto L_Forbid; + if ( @StoneName$ == "AnchorStone" ) goto L_AnchorStone; if ( @StoneName$ == "AnchoredAnchorStone" ) goto L_AnchoredAnchorStone; goto L_Close; @@ -32,13 +37,20 @@ L_AnchoredAnchorStone: mes "\"You want to recall to the place the [@@" + AnchoredAnchorStone + "|@@] is bound to?\""; menu "No", L_Close, - "Yes", L_AAS_Yes; + "Yes", L_AAS_Yes, + "Unbind Anchored Anchor Stone", L_AAS_Unbind; L_AAS_Yes: warp getmapnamefromhash(AnchorStoneDest), (AnchorStoneDestCoord & AS_X_MASK >> AS_X_SHIFT), (AnchorStoneDestCoord & AS_Y_MASK >> AS_Y_SHIFT); - goto L_AAStoAS; +L_AAS_Unbind: + mes ""; + mes "\"You really want to unbind the [@@" + AnchoredAnchorStone + "|@@] from it's destination?\""; + menu + "No", L_Close, + "Yes", L_AAStoAS; + L_AAS_Error: mes "\"Something went wrong the [@@" + AnchoredAnchorStone + "|@@] lost its destination and turns back to normal.\""; goto L_AAStoAS; @@ -51,6 +63,14 @@ L_AAStoAS: getitem AnchorStone, 1; close; +L_Forbid: + message strcharinfo(0), "Anchor Stone : This area is protected by a force that doesn't tolerate the power of the Anchor Stone."; + goto L_Close; + +L_Prison: + message strcharinfo(0), "Anchor Stone : You must be warped by a GM to leave the botcheck area."; + goto L_Close; + L_Close: close; } diff --git a/world/map/npc/items/magicring_item.txt b/world/map/npc/items/magicring_item.txt new file mode 100644 index 00000000..eeb1aee6 --- /dev/null +++ b/world/map/npc/items/magicring_item.txt @@ -0,0 +1,27 @@ +// Variables passed to this script: +// @slotId The slot in which the item would have been equipped in. This is passed automagically when called in an equip script. + +function|script|MagicRingItem +{ + + set @debug_mask, 65535; + set @debug_shift, 0; + set @mexp, ((MAGIC_EXPERIENCE & @debug_mask) >> @debug_shift); + + set @magicring_mexp_needed, 5404; + + if ( @mexp >= @magicring_mexp_needed ) + goto L_Return; + + message strcharinfo(0), "You are not experienced enough to use the Magic Ring."; + + // This is for debug + if (debug) + goto L_Return; + + callfunc "UnequipLater"; + goto L_Return; + +L_Return: + return; +} diff --git a/world/map/npc/items/manapearl_item.txt b/world/map/npc/items/manapearl_item.txt index 9c1f1c04..2d7ce428 100644 --- a/world/map/npc/items/manapearl_item.txt +++ b/world/map/npc/items/manapearl_item.txt @@ -15,7 +15,7 @@ function|script|ManaPearlItem if ( @mexp >= @manapearl_mexp_needed ) goto L_Return; - message strcharinfo(0), "You are not expirienced enough to keep up the mana flow that is needed to stay in resonance with the Mana Pearl."; + message strcharinfo(0), "You are not experienced enough to keep up the mana flow that is needed to stay in resonance with the Mana Pearl."; // This is for debug if (debug) diff --git a/world/map/npc/magic/_import.txt b/world/map/npc/magic/_import.txt index 4c5dc1ed..42f316fe 100644 --- a/world/map/npc/magic/_import.txt +++ b/world/map/npc/magic/_import.txt @@ -47,6 +47,8 @@ npc: npc/magic/level2-make-shirt.txt npc: npc/magic/level3-necromancy.txt npc: npc/magic/event-summon-managuardian.txt npc: npc/magic/event-summon-manatyrant.txt +//npc: npc/magic/event-summon-stonegolem.txt +//npc: npc/magic/event-summon-sunshroom.txt npc: npc/magic/event-boss-powerup-lifedrain.txt npc: npc/magic/event-boss-powerup-manadrain.txt npc: npc/magic/event-boss-powerup-poison.txt @@ -56,3 +58,5 @@ npc: npc/magic/event-boss-powerup-tothecrypt.txt npc: npc/magic/event-boss-powerup-disarm.txt npc: npc/magic/event-boss-powerup-grenades.txt npc: npc/magic/event-boss-powerup-headshot.txt +npc: npc/magic/event-boss-powerup-massslow.txt +npc: npc/magic/event-boss-powerup-flee.txt diff --git a/world/map/npc/magic/_procedures.txt b/world/map/npc/magic/_procedures.txt index 601d5b15..517373e2 100644 --- a/world/map/npc/magic/_procedures.txt +++ b/world/map/npc/magic/_procedures.txt @@ -94,50 +94,49 @@ L_Return: return 0; } - -// this function is call()-only // Custom version of checks for Dungeon Masters boss "powerups". // Both GMs and player eventers MAY eventually call "boss powerups". // By default, only GMs >= 40 can use BossPowers, but: -// - If someone abuses BossPowers, setting #BOSS_POWERS_DISABLED = 1 on them locks them out. -// - Some (trusted) player can be allowed to invoke this by setting #IS_EVENTER = 42 on them. +// - If someone abuses BossPowers, setting #BP_DISABLED = 1 on them locks them out. +// - Some (trusted) player can be allowed to invoke this by setting BP_EVENTER = 42 on them. // On TMWA these changes need GM Lv 80 to issue @setvar, so access can only be changed by Lv 80. // Advantage of this permissions system is: no need to shuffle GM levels, nor there's need to restart server. - function|script|boss_powerup_checks { - set .@flags, getarg(0); - set .@nonmagic, .@flags & (1<<0); - - if ($BOSS_KILLSWITCH) goto L_Killswitch; // If things go wrong, boss powers can be completely disabled. - if (#BOSS_POWERS_DISABLED) goto L_Killswitch; // If someone abuses BossPowers they can get DENY flag set. - if (HIDDEN) goto L_Hidden; // can not cast with @hide - if (@_M_BLOCK) goto L_Blocked; // check if last debuff ended - if (Hp < 1) goto L_Dead; // can not cast when dead - if (GM >= 40) goto L_Allowed; // GM >= 40 can use boss actions - if (#IS_EVENTER == 42) goto L_Allowed; // Trusted player(s) could be allowed to access Eventer "magic": - // Use @setvar #IS_EVENTER 0 42 Nick (GM Lv 80 command) to do it. + if (HIDDEN) goto L_Hidden; // can not cast with @hide + if (Hp < 1) goto L_Dead; // can not cast when dead + if (@_M_BLOCK) goto L_Blocked; // check if last debuff ended + if ($BP_DISABLE) goto L_Killswitch1; // If things go wrong, boss powers can be completely disabled. + if (#BP_DISABLE) goto L_Killswitch2; // If someone abuses BossPowers there's _per-account_ DENY flag. + if (GM >= 40) goto L_Allowed; // GM >= 40 can use boss actions. + if (IS_EVENTER == 42) goto L_Allowed; // Trusted player(s) could be allowed to access Eventer "magic": + // Use @setvar BP_EVENTER 0 42 Nick (GM Lv 80 command). smsg SMSG_FAILURE, "BossPowers: Only few of mere mortals may try to enter the twilight zone"; - return 1; // Not allowed by default. + return 1; // Not allowed by default. L_Allowed: - return 0; // Whoever gets here allowed to invoke BossPowers spells + return 0; // Whoever gets here allowed to invoke BossPowers spells -L_Killswitch: - smsg SMSG_FAILURE, "BossPowers: disabled by kill switch!"; +L_Dead: + smsg SMSG_FAILURE, "BossPowers: you're dead!"; return 2; L_Hidden: smsg SMSG_FAILURE, "BossPowers: can't be used when hidden!"; return 3; -L_Blocked: - smsg SMSG_FAILURE, "BossPowers: cooldown is in effect. Please wait."; +L_Killswitch1: + smsg SMSG_FAILURE, "BossPowers: unavailable at the moment (KillSwitch 1)"; return 4; -L_Dead: - smsg SMSG_FAILURE, "BossPowers: you're dead!"; +L_Killswitch2: + smsg SMSG_FAILURE, "BossPowers: unavailable at the moment (KillSwitch 2)"; return 5; + +L_Blocked: + smsg SMSG_FAILURE, "BossPowers: cooldown is in effect. Please wait."; + return 6; + } function|script|elt_damage @@ -286,3 +285,74 @@ function|script|gain_heal_xp L_Return: return 0; } + +// magic_activity should be called with player RID attached. +// This function used to keep track of magic activity. +function|script|magic_activity +{ + set CASTS, CASTS + 1; + if (CASTS < 0) set CASTS, 1; // overflow + return; +} + +// consume_sp must be called with player RID attached. +// Params: arg(0): amount of XP to consume. +// Return: 0 on success. On failure: nonzero + message to caster. +function|script|consume_sp +{ + if (getarg(0) <= 0) goto L_SpArgFail; // Usage bug? Function fails. + if (Sp < getarg(0)) goto L_NoSp; // Caster lacks enough Sp, fail. + set Sp, (Sp - getarg(0)); // Consume Sp and return success. + callfunc "magic_activity"; // Call activity here to unclutter spells. + return 0; + +L_NoSp: + message strcharinfo(0), "Magic : ##3##BNot enough Mana!"; + return 1; + +L_SpArgFail: + debugmes "bug: consume_sp needs arg(0) > 0"; + return 2; +} + +// spell_lv_checks helper must be called by spell NPC, with player RID attached. +// It expects "typical" spell NPC structure with .level ans .school +// Params: no args. Data taken from spell NPC. +// Return: 0 on success. On failure: nonzero + message to caster. +function|script|lvl_and_school_check +{ + if ((.level <= 0) || (.school <= 0)) goto L_LvCkFail; // Weird/missing school/level on NPC? + if (getskilllv(SKILL_MAGIC) < .level) goto L_LvCkReqs; // General magic < required level? + if (getskilllv(.school) < .level) goto L_LvCkReqs; // Magic school < required level? + return 0; // All checks passed -> success. + +L_LvCkReqs: + message strcharinfo(0), "Magic : ##3##BThis spell too hard for you yet."; + return 1; // User below spell requirements set on spell's NPC + +L_LvCkFail: + debugmes "bug: lvl_and_school_check needs .school and .level > 0 on spell NPC"; + return 2; // NPC bug or not called by spell NPC -> fail +} + +// magic_cooldown helper should be called with player RID attached. +// This function used to lock out spell. +// Input: arg0 - length of cooldown. +// Input: arg1 - optional: custom SC_COOLDOWN ID to use. +function|script|magic_block +{ + if (getarg(0) <= 0) goto L_Block_Fail; + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer getarg(0), "Magic Timer::OnClear"; // Disable spell casting + if (getarg(1) > 0) goto L_CustomCool; // Custom cooldown ID given? + sc_start SC_COOLDOWN, getarg(0), 0, BL_ID; // If not -> default SC_COOLDOWN + return; + +L_CustomCool: + sc_start getarg(1), getarg(0), 0, BL_ID; // Apply custom cooldown. + return; + +L_Block_Fail: + debugmes "bug: magic_block needs arg(0) > 0"; + return; // Called wrong way -> spell bug. +} diff --git a/world/map/npc/magic/event-boss-powerup-flee.txt b/world/map/npc/magic/event-boss-powerup-flee.txt new file mode 100644 index 00000000..ee0e68a3 --- /dev/null +++ b/world/map/npc/magic/event-boss-powerup-flee.txt @@ -0,0 +1,94 @@ +// Opens transient teleport to allow boss to flee! +-|script|powerup-flee|32767 +{ + end; + +OnCast: + if (call("boss_powerup_checks")) end; + if (call("bossflee_parseargs")) goto L_EscPlanFail1; // @VARs like @POS_X set by bossflee_parseargs() +// Create actual teleport NPC ------- src map - src x src y --- name --- -NPC- Sz Sz dst map - dst x - dst y --time----cookie---managed? + set .@tp, call("teleport_create", getmap(), @POS_X, @POS_Y, "#bossflee", 324, 0, 0, @DSTMAP$, @DST_X, @DST_Y, 7000, 0xBADB055, 0); + if (.@tp <= 0) goto L_EscPlanFail2; // Has puppet() failed? + set .info$, "Teleport : Boss escapes!", .@tp; // on-click message. + set .cantpass$, "Teleport : somehow structure ignores you", .@tp; // "can't pass" message. + set teleport_cookie, 0xBADB055; // Allow caller (boss) to use teleport + mapannounce getmap(), strcharinfo(0)+" : Catch me, if you can!", 0; + end; + +L_EscPlanFail1: + message strcharinfo(0), "[#bossflee] : Escape plan status: fail! (bad destination?)"; + end; + +L_EscPlanFail2: + message strcharinfo(0), "[#bossflee] : Escape plan status: fail! (teleport creation failed)"; + end; + +// Puppet (teleportation pads) logic below. +// Invoked when player steps on npc. +OnTouch: + if ((.cookie) && (teleport_cookie != .cookie)) goto L_CantPass; + set teleport_cookie, 0; // Clear teleport cookie of player on teleport use. + sc_start SC_SLOWMOVE, .fx_time+100, 100000; // Slow player temporarily to avoid movement VS warp DCs + addtimer .fx_time, strnpcinfo(0)+"::OnTeleport"; // time before teleporting away + misceffect .fx; // Default .fx set in teleport_add, other code can override it. + end; + +L_CantPass: + message strcharinfo(0), .cantpass$; // NPC var allows to change message. + end; // "keyed" teleport and player didnt had proper cookie. + +// Teleportation timer event (attached to player). Queued by OnTouch. +OnTeleport: + warp .dstmap$, .dst_x, .dst_y; + end; + +// Invoked on timed teleport's NPC timer expired. +OnTeleportExpired: + destroy; + +OnInit: + set .invocation$, chr(MAGIC_SYMBOL) + "bossflee"; // used in npcs that refer to this spell + void call("magic_register", "OnCast"); + end; +} + +// Based on TeleportManager code - with +// This function MUST be invoked with player RID attached by powerup-flee +// Inputs: nothing, but assumes args$ set. +// Return: <= 0 on failure, 1 on success. +// Return: sets @POS_X, @POS_X, @DSTMAP$, @DST_X, @DST_Y, @NPCSPRITE, @TIMEOUT +function|script|bossflee_parseargs +{ + callfunc "argv_splitter"; + set @DSTMAP$, @argv$[0]; // Destination map + set @DST_X, @argv[1]; // Dst warp coordinates + set @DST_Y, @argv[2]; // Dst warp coordinates + // Check DST map is okay + if !(call("teleport_map_valid", @DSTMAP$)) goto L_FailBadmap; // DST: invalid map? + // Check DST X,Y sane + if ((@DST_X <= 0) || (@DST_Y <= 0)) goto L_FailBadDstXY1; // DST: invalids coords <= 0? + if ((getmapmaxx(@DSTMAP$) < @DST_X) || (getmapmaxy(@DSTMAP$) < @DST_Y)) goto L_FailBadDstXY2; // Outside of map? + // Check if DST is collision + if (iscollision(@DSTMAP$, @DST_X, @DST_Y)) goto L_FailDstCollide; + // Try adaptive NPC placement. Above caller if there's room or on caller if not. + set @POS_X, POS_X; + if ((POS_Y > 2) && !(iscollision(getmap(), POS_X, (POS_Y-2)))) set @POS_Y, (POS_Y - 2); + else set @POS_Y, POS_Y; // Overhead placement failed, use caller's tile + return 0; // Everything OK + +L_FailBadmap: + message strcharinfo(0), "[#bossflee] : unknown flee map:" + @DSTMAP$; + return 1; + +L_FailBadDstXY1: + message strcharinfo(0), "[#bossflee] : flee map X,Y must be > 0! Given X=" + @DST_X + " Y=" + @DST_Y; + return 2; + +L_FailBadDstXY2: + message strcharinfo(0), "[#bossflee] : flee map X,Y outside of map! Given X=" + @DST_X+ " Y=" + @DST_Y; + return 3; + +L_FailDstCollide: + message strcharinfo(0), "[#bossflee] : flee MAP=" + @DSTMAP$ + " X=" + @DST_X + " Y=" + @DST_Y + " is a collision (impassable)"; + return 4; +} diff --git a/world/map/npc/magic/event-boss-powerup-grenades.txt b/world/map/npc/magic/event-boss-powerup-grenades.txt index 0a692314..bf4d30c7 100644 --- a/world/map/npc/magic/event-boss-powerup-grenades.txt +++ b/world/map/npc/magic/event-boss-powerup-grenades.txt @@ -6,8 +6,8 @@ OnCast: if(call("boss_powerup_checks")) end; if (getmapflag(getmap(), MF_TOWN)) goto L_Fail_town; set @_M_BLOCK, 1; // block casting, until the timer clears it - addtimer 16000, "Magic Timer::OnClear"; // set the new debuff - sc_start SC_COOLDOWN, 16000, 0, BL_ID; + addtimer 12000, "Magic Timer::OnClear"; // set the new debuff + sc_start SC_COOLDOWN, 12000, 0, BL_ID; misceffect FX_MEDIUM_EXPLOSION, strcharinfo(0); set @dist, 5; foreach 0, getmap(), (POS_X - @dist), (POS_Y - @dist), (POS_X + @dist), (POS_Y + @dist), strnpcinfo(0) + "::OnHit"; @@ -22,6 +22,7 @@ OnHit: OnGrenadeHit: misceffect FX_MEDIUM_SMOKE, strcharinfo(0); + sc_start SC_SLOWMOVE, 2000, 900, @target_id; // Slow (almost stun) player temporarily heal (0 - rand(Hp)), 0; set Sp, (Sp / 3); end; diff --git a/world/map/npc/magic/event-boss-powerup-headshot.txt b/world/map/npc/magic/event-boss-powerup-headshot.txt index 5e3dc4f9..546ab32f 100644 --- a/world/map/npc/magic/event-boss-powerup-headshot.txt +++ b/world/map/npc/magic/event-boss-powerup-headshot.txt @@ -11,8 +11,8 @@ OnCast: if ((get(Hp, @target_id)) < 1) goto L_Too_dead; // Do not touch dead if (target(BL_ID, @target_id, 0x20) != 0x20) goto L_No_los; set @_M_BLOCK, 1; // block casting, until the timer clears it - addtimer 16000, "Magic Timer::OnClear"; // set the new debuff - sc_start SC_COOLDOWN, 16000, 0, BL_ID; + addtimer 10000, "Magic Timer::OnClear"; // set the new debuff + sc_start SC_COOLDOWN, 10000, 0, BL_ID; misceffect FX_MEDIUM_EXPLOSION, strcharinfo(0); misceffect FX_CHANNELLING_CAST_RED, @target_id; @@ -20,6 +20,7 @@ OnCast: set Sp, 1, @target_id; // Hurt target if (@tgthp < 1500) set @tgthp, 1; // Boss or not? (>3000 HP) set Hp, @tgthp, @target_id; // Hurt target + sc_start SC_SLOWMOVE, 3000, 5000; // Slow player temporarily message strcharinfo(0, @target_id), "[boss-headshot] : "+strcharinfo(0, BL_ID)+" shot you!"; set @tgthp, 0; end; diff --git a/world/map/npc/magic/event-boss-powerup-lifedrain.txt b/world/map/npc/magic/event-boss-powerup-lifedrain.txt index 5399ea37..aa4e7181 100644 --- a/world/map/npc/magic/event-boss-powerup-lifedrain.txt +++ b/world/map/npc/magic/event-boss-powerup-lifedrain.txt @@ -6,8 +6,8 @@ OnCast: if(call("boss_powerup_checks")) end; if (getmapflag(getmap(), MF_TOWN)) goto L_Fail_town; set @_M_BLOCK, 1; // block casting, until the timer clears it - addtimer 30000, "Magic Timer::OnClear"; // set the new debuff - sc_start SC_COOLDOWN, 30000, 0, BL_ID; + addtimer 12000, "Magic Timer::OnClear"; // set the new debuff + sc_start SC_COOLDOWN, 12000, 0, BL_ID; misceffect FX_PENTAGRAM_BURST, strcharinfo(0); set @dist, 12; foreach 0, getmap(), (POS_X - @dist), (POS_Y - @dist), (POS_X + @dist), (POS_Y + @dist), strnpcinfo(0) + "::OnHit"; diff --git a/world/map/npc/magic/event-boss-powerup-manadrain.txt b/world/map/npc/magic/event-boss-powerup-manadrain.txt index b6f7f835..8c42bde9 100644 --- a/world/map/npc/magic/event-boss-powerup-manadrain.txt +++ b/world/map/npc/magic/event-boss-powerup-manadrain.txt @@ -6,8 +6,8 @@ OnCast: if(call("boss_powerup_checks")) end; if (getmapflag(getmap(), MF_TOWN)) goto L_Fail_town; set @_M_BLOCK, 1; // block casting, until the timer clears it - addtimer 20000, "Magic Timer::OnClear"; // set the new debuff - sc_start SC_COOLDOWN, 20000, 0, BL_ID; + addtimer 12000, "Magic Timer::OnClear"; // set the new debuff + sc_start SC_COOLDOWN, 12000, 0, BL_ID; misceffect FX_CHANNELLING_CAST_BLUE, strcharinfo(0); set @dist, 16; foreach 0, getmap(), (POS_X - @dist), (POS_Y - @dist), (POS_X + @dist), (POS_Y + @dist), strnpcinfo(0) + "::OnHit"; diff --git a/world/map/npc/magic/event-boss-powerup-massslow.txt b/world/map/npc/magic/event-boss-powerup-massslow.txt new file mode 100644 index 00000000..6c10cfa3 --- /dev/null +++ b/world/map/npc/magic/event-boss-powerup-massslow.txt @@ -0,0 +1,35 @@ +-|script|powerup-massslow|32767 +{ + end; + +OnCast: + if(call("boss_powerup_checks")) end; + if (getmapflag(getmap(), MF_TOWN)) goto L_Fail_town; + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 10000, "Magic Timer::OnClear"; // set the new debuff + sc_start SC_COOLDOWN, 10000, 0, BL_ID; + misceffect FX_PENTAGRAM_BURST, strcharinfo(0); + set @dist, 12; + foreach 0, getmap(), (POS_X - @dist), (POS_Y - @dist), (POS_X + @dist), (POS_Y + @dist), strnpcinfo(0) + "::OnHit"; + end; + +OnHit: + if (@target_id == BL_ID) end; // Do not slow caster + if (get(Hp, @target_id) <= 0) end; // Dont slow dead. + message strcharinfo(0, @target_id), "[boss-massslow] : "+strcharinfo(0, BL_ID)+" cast slow spell on you!"; + misceffect 23, strcharinfo(0, @target_id); // Show slow effect + sc_start SC_SLOWMOVE, 5000, 300, @target_id; // Slow player temporarily + end; + +L_Fail_town: + message strcharinfo(0), "[boss-massslow] : city protected by strong magic, your spell dissipates"; + end; + +OnInit: + set .school, SKILL_MAGIC; + set .invocation$, chr(MAGIC_SYMBOL) + "mapmassslow"; // used in npcs that refer to this spell + void call("magic_register", "OnCast"); + set .level, 0; + set .exp_gain, 0; + end; +} diff --git a/world/map/npc/magic/event-boss-powerup-poison.txt b/world/map/npc/magic/event-boss-powerup-poison.txt index a37f5aa9..777930c1 100644 --- a/world/map/npc/magic/event-boss-powerup-poison.txt +++ b/world/map/npc/magic/event-boss-powerup-poison.txt @@ -6,8 +6,8 @@ OnCast: if (call("boss_powerup_checks")) end; if (getmapflag(getmap(), MF_TOWN)) goto L_Fail_town; set @_M_BLOCK, 1; // block casting, until the timer clears it - addtimer 16000, "Magic Timer::OnClear"; // set the new debuff - sc_start SC_COOLDOWN, 16000, 0, BL_ID; + addtimer 10000, "Magic Timer::OnClear"; // set the new debuff + sc_start SC_COOLDOWN, 10000, 0, BL_ID; misceffect FX_MAGIC_SNAKE_CAST, strcharinfo(0); set @dist, 12; foreach 0, getmap(), (POS_X - @dist), (POS_Y - @dist), (POS_X + @dist), (POS_Y + @dist), strnpcinfo(0) + "::OnHit"; diff --git a/world/map/npc/magic/event-boss-powerup-tormenta.txt b/world/map/npc/magic/event-boss-powerup-tormenta.txt index 52e6f42f..a5b47fdf 100644 --- a/world/map/npc/magic/event-boss-powerup-tormenta.txt +++ b/world/map/npc/magic/event-boss-powerup-tormenta.txt @@ -6,6 +6,7 @@ OnCast: if(call("boss_powerup_checks")) end; bonus bMaxHP, 20000; set Hp, (Hp+20000), BL_ID; + set @oldclass, get(Class, BL_ID); set Class, 1137, BL_ID; warp getmap(), POS_X, POS_Y; // Refresh witch appearance addtimer 1500, strnpcinfo(0)+"::OnFix"; @@ -23,9 +24,11 @@ OnFix: L_done: message strcharinfo(0, BL_ID), "[boss-tormenta] : Tormenta impersonation ended!"; set @fix_count, 0; - set Class, 0, BL_ID; + set Class, @oldclass, BL_ID; bonus bMaxHP, 0; set Hp, 100, BL_ID; + sc_start SC_SLOWMOVE, 500, 10000; // Slow player temporarily to avoid movement VS warp DCs + warp getmap(), POS_X, POS_Y; // warp (under char's RID!) end; OnInit: diff --git a/world/map/npc/magic/event-boss-powerup-totheabyss.txt b/world/map/npc/magic/event-boss-powerup-totheabyss.txt index d215db8b..c271a260 100644 --- a/world/map/npc/magic/event-boss-powerup-totheabyss.txt +++ b/world/map/npc/magic/event-boss-powerup-totheabyss.txt @@ -9,8 +9,8 @@ OnCast: if (call("boss_powerup_checks")) end; if (getmapflag(getmap(), MF_TOWN)) goto L_Fail_town; set @_M_BLOCK, 1; // block casting, until the timer clears it - addtimer 60000, "Magic Timer::OnClear"; // set the new debuff - sc_start SC_COOLDOWN, 60000, 0, BL_ID; + addtimer 30000, "Magic Timer::OnClear"; // set the new debuff + sc_start SC_COOLDOWN, 30000, 0, BL_ID; misceffect FX_RED_MAGIC_CAST, strcharinfo(0); set @dist, 25; foreach 0, getmap(), (POS_X - @dist), (POS_Y - @dist), (POS_X + @dist), (POS_Y + @dist), strnpcinfo(0) + "::OnHit"; @@ -18,24 +18,25 @@ OnCast: OnHit: if ((get(Hp, @target_id)) < 1) end; // Do not touch dead - set Sp, 1, @target_id; // Hurt target - set Hp, min(((Hp/2)), 100), @target_id; // Hurt target - sc_start SC_POISON, 1, 10, @target_id; // Poison target message strcharinfo(0, @target_id), "[boss-to-the-abyss] : "+strcharinfo(0, BL_ID)+" ##B PULLS YOU TO THE ABYSS!!"; misceffect FX_RED_MAGIC_CAST, strcharinfo(0, @target_id); - addtimer 1000, strnpcinfo(0)+"::OnTeleport", @target_id; + sc_start SC_SLOWMOVE, 6000, 10000; // Slow player temporarily to avoid movement VS warp DCs + addtimer 500+rand(500), strnpcinfo(0)+"::OnTeleport", @target_id; end; // Runs attached to player, beware. Dont try access vars from former code! OnTeleport: warp "070-3", 40+rand(5), 25+rand(5); // warp (under char's RID!) - addtimer 1500, strnpcinfo(0)+"::OnArrival"; // To play FX after player's arrival -> map + set Sp, 1; // Hurt target + set Hp, (Hp/4); // Hurt target + sc_start SC_POISON, 1, 10; // Poison target + addtimer 1000, strnpcinfo(0)+"::OnArrival"; // To play FX after player's arrival -> map end; // Done. // Runs attached to player, beware. Dont try access vars from former code! OnArrival: misceffect 50, strcharinfo(0); // Unfortunately hell glow lacks const. - addtimer 15000, strnpcinfo(0)+"::OnClean"; // To cancel former "infinite" FX. + addtimer 2800, strnpcinfo(0)+"::OnClean"; // To cancel former "infinite" FX. end; // Done. // Runs attached to player, beware. Dont try access vars from former code! diff --git a/world/map/npc/magic/event-boss-powerup-tothecrypt.txt b/world/map/npc/magic/event-boss-powerup-tothecrypt.txt index 8ae4b3b6..cf189fb4 100644 --- a/world/map/npc/magic/event-boss-powerup-tothecrypt.txt +++ b/world/map/npc/magic/event-boss-powerup-tothecrypt.txt @@ -9,8 +9,8 @@ OnCast: if (call("boss_powerup_checks")) end; if (getmapflag(getmap(), MF_TOWN)) goto L_Fail_town; set @_M_BLOCK, 1; // block casting, until the timer clears it - addtimer 60000, "Magic Timer::OnClear"; // set the new debuff - sc_start SC_COOLDOWN, 60000, 0, BL_ID; + addtimer 30000, "Magic Timer::OnClear"; // set the new debuff + sc_start SC_COOLDOWN, 30000, 0, BL_ID; misceffect FX_BLUE_MAGIC_CAST, strcharinfo(0); set @dist, 25; foreach 0, getmap(), (POS_X - @dist), (POS_Y - @dist), (POS_X + @dist), (POS_Y + @dist), strnpcinfo(0) + "::OnHit"; @@ -19,23 +19,24 @@ OnCast: OnHit: if ((get(Hp, @target_id)) < 1) end; // Do not touch dead set Sp, 1, @target_id; // Hurt target - set Hp, min(((Hp/2)), 100), @target_id; // Hurt target + set Hp, (Hp/4), @target_id; // Hurt target sc_start SC_POISON, 1, 10, @target_id; // Poison target message strcharinfo(0, @target_id), "[boss-to-the-crypt] : "+strcharinfo(0, BL_ID)+" ##B PULLS YOU TO THE CRYPT!!"; misceffect FX_CHANNELLING_RAISE, strcharinfo(0, @target_id); - addtimer 1000, strnpcinfo(0)+"::OnTeleport", @target_id; + sc_start SC_SLOWMOVE, 6000, 10000; // Slow player temporarily to avoid movement VS warp DCs + addtimer 500+rand(500), strnpcinfo(0)+"::OnTeleport", @target_id; end; // Runs attached to player, beware. Dont try access vars from former code! OnTeleport: warp "027-5", 71+rand(3), 51+rand(3); // warp (under char's RID!) - addtimer 1500, strnpcinfo(0)+"::OnArrival"; // To play FX after player's arrival -> map + addtimer 1000, strnpcinfo(0)+"::OnArrival"; // To play FX after player's arrival -> map end; // Done. // Runs attached to player, beware. Dont try access vars from former code! OnArrival: misceffect 50, strcharinfo(0); // Unfortunately hell glow lacks const. - addtimer 15000, strnpcinfo(0)+"::OnClean"; // To cancel former "infinite" FX. + addtimer 2800, strnpcinfo(0)+"::OnClean"; // To cancel former "infinite" FX. end; // Done. // Runs attached to player, beware. Dont try access vars from former code! diff --git a/world/map/npc/magic/event-summon-stonegolem.txt b/world/map/npc/magic/event-summon-stonegolem.txt new file mode 100644 index 00000000..873f4c1c --- /dev/null +++ b/world/map/npc/magic/event-summon-stonegolem.txt @@ -0,0 +1,75 @@ +-|script|summon-sgolem|32767 +{ + end; + +OnCast: + if(call("magic_checks")) end; + // FIXME: Incomplete check, should still work during sieges + if (getmapflag(getmap(), MF_TOWN)) end; + if (Sp < 100) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (countitem("Stone") < 5) end; +// if (!$DOOMSDAY_SUMMON) end; +// if (@ddcooldown > gettimetick(2)) goto L_Cooldown; + if (sc_check(SC_COOLDOWN_SG)) goto L_Cooldown; + if (getmap() == "033-1") goto L_SpecialRules6; + goto L_Pay; + +L_Pay: + delitem "Stone", 5; + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 15000, "Magic Timer::OnClear"; // set the new debuff + sc_start SC_COOLDOWN, 15000, 0, BL_ID; + callfunc "adjust_spellpower"; + set Sp, Sp - 100; + set CASTS, CASTS + 1; + if (CASTS < 0) set CASTS, 1; // overflow + misceffect FX_MAGIC_MAGGOT_CAST, strcharinfo(0); + callfunc "magic_exp"; + set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID; + set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127); + if (.@puppet < 1) end; + set .master, BL_ID, .@puppet; + set .lifetime, (@spellpower*9)+60000, .@puppet; +// set @ddcooldown, gettimetick(2)+70; // This is measured in seconds + sc_start SC_COOLDOWN_SG, (@spellpower*9)+70000, 0, BL_ID; // .lifetime + OnSummon + addnpctimer 10000, .@puppet$+"::OnSummon"; + addnpctimer 11000, .@puppet$+"::OnDestroy"; + end; + +OnSummon: + if (!(isloggedin(.master))) destroy; + if(get(Hp, .master) < 1) destroy; // destroy if master is missing + if(getmap(.master) != strnpcinfo(3)) destroy; // destroy if master left the map + specialeffect FX_MAGIC_MAGGOT_SPAWN; + 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, "Stone Golem Summon", StoneGolem, 2, .lifetime; + destroy; + +L_Cooldown: + message strcharinfo(0), "This skill is in forced cooldown; Please wait your first summon to expire."; + end; + +L_SpecialRules6: + if ($@KIMARR_EVENT < 1) goto L_Pay; + if ($@Fluffy_FighterID == BL_ID) goto L_Pay; + message strcharinfo(0), "You can't summon here unless hunting fluffies."; + end; + +OnInit: + set .school, SKILL_MAGIC_ASTRAL; + set .invocation$, chr(MAGIC_SYMBOL) + "stogolis"; // used in npcs that refer to this spell + void call("magic_register", "OnCast"); + set .level, 1; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/event-summon-sunshroom.txt b/world/map/npc/magic/event-summon-sunshroom.txt new file mode 100644 index 00000000..6c01c1c8 --- /dev/null +++ b/world/map/npc/magic/event-summon-sunshroom.txt @@ -0,0 +1,71 @@ +-|script|smsunmushrooms|32767 +{ + end; + +OnCast: + if(call("magic_checks")) end; + if (Sp < 66) end; + if (getmapflag(getmap(), MF_TOWN)) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (getskilllv(.school) < .level) end; + if (countitem("SmallMushroom") < 1 || countitem("Root") < 1) end; + if (getmap() == "033-1") goto L_SpecialRules6; + goto L_Pay; + +L_Pay: + delitem "SmallMushroom", 1; + delitem "Root", 1; + set @_M_BLOCK, 1; // block casting, until the timer clears it + addtimer 20000, "Magic Timer::OnClear"; // set the new debuff + sc_start SC_COOLDOWN, 20000, 0, BL_ID; + callfunc "adjust_spellpower"; + set Sp, Sp - 33; + set CASTS, CASTS + 1; + if (CASTS < 0) set CASTS, 1; // overflow + misceffect FX_MAGIC_SPIKY_CAST, strcharinfo(0); + callfunc "magic_exp"; + set .@puppet$, "#"+strnpcinfo(0)+"#"+BL_ID; + set .@puppet, puppet(getmap(), POS_X, POS_Y, .@puppet$, 127); + if (.@puppet < 1) end; + 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: + if (!(isloggedin(.master))) destroy; + if(get(Hp, .master) < 1) destroy; // destroy if master is missing + if(getmap(.master) != strnpcinfo(3)) destroy; // destroy if master left the map + specialeffect FX_MAGIC_SPIKY_SPAWN; + 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, "Sunshroom Summon", Sunshroom, 2, .lifetime; + set .@i, .@i + 1; + if (.@i < .count) goto S_SummonAll; + destroy; + +L_SpecialRules6: + if ($@KIMARR_EVENT < 1) goto L_Pay; + if ($@Fluffy_FighterID == BL_ID) goto L_Pay; + message strcharinfo(0), "You can't summon here unless hunting fluffies."; + end; + +OnInit: + set .school, SKILL_MAGIC_ASTRAL; + set .invocation$, chr(MAGIC_SYMBOL) + "kalsun"; // used in npcs that refer to this spell + void call("magic_register", "OnCast"); + set .level, 2; + set .exp_gain, 1; + end; +} diff --git a/world/map/npc/magic/level1-detect-magic.txt b/world/map/npc/magic/level1-detect-magic.txt index 33597d02..420b457c 100644 --- a/world/map/npc/magic/level1-detect-magic.txt +++ b/world/map/npc/magic/level1-detect-magic.txt @@ -12,6 +12,9 @@ if (CASTS < 0) set CASTS, 1; // overflow misceffect FX_MAGIC_DETECT_CAST, strcharinfo(0); set .@range, (@spellpower/50)+1; + set .caster, getcharid(3); + foreach 0, getmap(), POS_X - .@range, POS_Y - .@range, POS_X + .@range, POS_Y + .@range, + strnpcinfo(0) + "::OnNearbyPlayer"; foreach 1, getmap(), POS_X - .@range, POS_Y - .@range, POS_X + .@range, POS_Y + .@range, strnpcinfo(0) + "::OnNearbyNpc"; if (getmap() == "099-4") @@ -21,9 +24,17 @@ callfunc "magic_exp"; end; +OnNearbyPlayer: + if (@target_id == BL_ID) end; // Dont do lookups on caster. + if (sc_check(SC_HIDE, @target_id)) end; // Also skip hidden (anwiltyp) players. + if (attachrid(@target_id) < 1) end; // Switch context -> found player (to look up focused skills) + if (call("is_magician")) misceffect FX_MAGIC_DETECT_HIT, BL_ID; // BL_ID because now attached to target + if (attachrid(.caster) < 1) end; // Try to reattach back -> caster (is it needed?) + end; + OnNearbyNpc: set .@e$, strnpcinfo(2,@target_id); - if(.@e$ == "#_M" || .@e$ == "#MAGIC" || get(.IS_MAGIC, @target_id)) + if(.@e$ == "#_M" || .@e$ == "#MAGIC" || get(.IS_MAGIC, @target_id)) //#_M and #MAGIC can be used for problematic situations, like shops misceffect FX_MAGIC_DETECT_HIT, @target_id; end; @@ -35,3 +46,23 @@ OnInit: set .exp_gain, 0; end; } + +// This function tests if current RID is a magician (Astral soul skill Lv 9). +function|script|is_magician +{ + getactivatedpoolskilllist; + if (@skilllist_count != 0) goto L_iterate_focused; // Had some focused skills -> look further + goto L_focus_notfound; // No focused skills at all -> bail out. + +L_iterate_focused: + set @skilllist_count, @skilllist_count-1; + if ((@skilllist_id[@skilllist_count] == SKILL_ASTRAL_SOUL) && (getskilllv(SKILL_ASTRAL_SOUL) >= 2)) goto L_focus_found; + if (@skilllist_count == 0) goto L_focus_notfound; + goto L_iterate_focused; // iterate via array of focused skills. + +L_focus_found: + return 1; + +L_focus_notfound: + return 0; +} diff --git a/world/map/npc/magic/level2-protect.txt b/world/map/npc/magic/level2-protect.txt index 87d010f8..5447f4e0 100644 --- a/world/map/npc/magic/level2-protect.txt +++ b/world/map/npc/magic/level2-protect.txt @@ -1,18 +1,18 @@ -|script|protect|32767 { - if (sc_check(SC_PHYS_SHIELD_ITEM)) goto L_Itsanc; // itsanc has top priority and cant be overwritten by betsanc - if(call("magic_checks")) end; - if (Sp < 14) end; - set .@level, getskilllv(.school); - if (.@level < .level) end; - if (getskilllv(SKILL_MAGIC) < .level) end; - if (.@level <= 3 && countitem("HardSpike") < 1) end; set @target_id, getcharid(3, @args$); if (@target_id < 1 || !(isloggedin(@target_id)) || get(INVISIBLE, @target_id) == 1) set @target_id, BL_ID; // fallback to self callfunc "adjust_spellpower"; if (distance(BL_ID, @target_id) >= (@spellpower/30)+2) set @target_id, BL_ID; if (BL_ID == @target_id) set @args$, strcharinfo(0); + if (sc_check(SC_PHYS_SHIELD_ITEM, @target_id)) goto L_Itsanc; // itsanc has top priority and can't be overwritten by betsanc + if(call("magic_checks")) end; + if (Sp < 14) end; + set .@level, getskilllv(.school); + if (.@level < .level) end; + if (getskilllv(SKILL_MAGIC) < .level) end; + if (.@level <= 3 && countitem("HardSpike") < 1) end; if (get(GM, @target_id) == 1) end; if (get(Hp, @target_id) < 1) end; if (getequipid(equip_head, strcharinfo(0, @target_id)) == 888) end; @@ -46,9 +46,18 @@ OnEnd: end; L_Itsanc: + if (BL_ID == @target_id) goto L_ItsancSelf; + goto L_ItsancOther; + +L_ItsancSelf: message strcharinfo(0), "Shield : You are still itsanced, This blocks your spell."; end; +L_ItsancOther: + message strcharinfo(0), "Shield : Your target is still itsanced, This blocks your spell."; + end; + + L_SpecialRules6: if ($@KIMARR_EVENT < 1) goto L_Pay; if (@target_id == BL_ID) goto L_Pay; diff --git a/world/map/npc/mobs/mob_kill_handler.txt b/world/map/npc/mobs/mob_kill_handler.txt index 83f64d3e..9e2f69c7 100644 --- a/world/map/npc/mobs/mob_kill_handler.txt +++ b/world/map/npc/mobs/mob_kill_handler.txt @@ -58,10 +58,9 @@ L_Celestia: L_Terranite: if ( @mobID != Terranite ) goto L_Pink_Flower; - if (TERRAC < 1 || TERRAC > 1500) goto L_Return; - if (TERRAC % 100 == 0) - message strcharinfo(0), "Terranite : ##3Total Terranites Slain: "+TERRAC; - set TERRAC, TERRAC + 1; + if (QL_BEHEADER_TERRAC < 1 || QL_BEHEADER_TERRAC > 1500) + goto L_Return; + set QL_BEHEADER_TERRAC, QL_BEHEADER_TERRAC + 1; goto L_Return; L_Pink_Flower: diff --git a/world/map/npc/mobs/mob_points.txt b/world/map/npc/mobs/mob_points.txt index 2589f1eb..3b83d3a8 100644 --- a/world/map/npc/mobs/mob_points.txt +++ b/world/map/npc/mobs/mob_points.txt @@ -234,7 +234,17 @@ function|script|MobPoints 1, // 1223 SmallTopazBif 200, // 1224 CoalGolem 25, // 1225 StoneSlime - 200 // 1226 StoneGolem + 200, // 1226 StoneGolem + 1, // 1227 Grass + 1, // 1228 Spelt + 95, // 1229 WarlordSkull + 110, // 1230 GoldenSkull + 100, // 1231 Sunshroom + 100, // 1232 Snowshroom + 200, // 1233 YellowSuperSlime + 220, // 1234 RedSuperSlime + 240, // 1235 GreenSuperSlime + 260 // 1236 BlueSuperSlime ; // END // the following mobs where replaced by other mobs: diff --git a/world/map/npc/scripts.conf b/world/map/npc/scripts.conf index b0a5f0c2..b2565af8 100644 --- a/world/map/npc/scripts.conf +++ b/world/map/npc/scripts.conf @@ -36,6 +36,8 @@ npc: npc/functions/motdconfig.txt npc: npc/functions/ghost.txt npc: npc/functions/vault.txt npc: npc/functions/global_event_handler.txt +npc: npc/functions/teleport_manager.txt +npc: npc/functions/spawns_on_mobkill.txt // Item Functions npc: npc/items/purification_potion.txt @@ -59,6 +61,7 @@ npc: npc/items/drugs.txt npc: npc/items/max_stat.txt npc: npc/items/nobow_item.txt npc: npc/items/love_potion.txt +npc: npc/items/magicring_item.txt npc: npc/items/manapearl_item.txt npc: npc/items/underworld_troll.txt npc: npc/items/silver_bell.txt |