diff options
author | Jesusaves <cpntb1@ymail.com> | 2022-01-20 02:46:20 +0000 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2022-01-20 02:46:20 +0000 |
commit | a7a421842af79b6aff03335401db5bca5f2e5284 (patch) | |
tree | 96f05618b8dc04bc19778d51482f85c6f4e94865 | |
parent | c1be7bd1eab5b0c230001c369292abe757a7f32a (diff) | |
parent | 8875cef958add4b361300c1ba108d8bf1d7995d7 (diff) | |
download | serverdata-a7a421842af79b6aff03335401db5bca5f2e5284.tar.gz serverdata-a7a421842af79b6aff03335401db5bca5f2e5284.tar.bz2 serverdata-a7a421842af79b6aff03335401db5bca5f2e5284.tar.xz serverdata-a7a421842af79b6aff03335401db5bca5f2e5284.zip |
Merge branch 'jesusalva/cleanup' into 'master'
Christmas 2021 Cleanup
See merge request themanaworld/evolved/serverdata!10
50 files changed, 876 insertions, 47 deletions
diff --git a/conf/map/maps.conf b/conf/map/maps.conf index 68d2bd20..35f8979b 100644 --- a/conf/map/maps.conf +++ b/conf/map/maps.conf @@ -122,6 +122,13 @@ map_list: ( "069-2", "070-1", "070-3", + "080-1", + "080-3", + "081-1", + "081-2", + "081-3", + "082-2", + "082-3", "099-1", "099-2", "099-3", diff --git a/db/constants.conf b/db/constants.conf index 21bfd5f3..477a28ab 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -3185,9 +3185,18 @@ more than one separator can be used in a row (so 12_3___456 is illegal). NPC432:432 NPC433:433 NPC434:434 + NPC435:435 + NPC436:436 + NPC437:437 + NPC438:438 + NPC439:439 + NPC440:440 NPC32767:32767 // NPCs decently named + NPC_ALISSA: 438 + NPC_SANTA: 439 + NPC_GAK: 440 NPC_OFFSET_NO_SPRITE: 998 // Avatars (1000+) @@ -3214,7 +3223,7 @@ more than one separator can be used in a row (so 12_3___456 is illegal). NPC_UNUSED__MOBTOMB: 565 NPC_WARP_DEBUG: 722 NPC_UNUSED__FLAG: 722 - NPC_NO_SPRITE: 999 + NPC_NO_SPRITE: 400 NPC_HIDDEN: 32767 comment__: "Walk masks" diff --git a/db/map_index.txt b/db/map_index.txt index 354f427b..a7b53599 100644 --- a/db/map_index.txt +++ b/db/map_index.txt @@ -119,14 +119,21 @@ 069-2 119 070-1 120 070-3 121 -099-1 122 -099-2 123 -099-3 124 -099-4 125 -099-5 126 -099-6 127 -099-7 128 -099-8 129 -botcheck 130 -fermi 131 -sec_pri 132 +080-1 122 +080-3 123 +081-1 124 +081-2 125 +081-3 126 +082-2 127 +082-3 128 +099-1 129 +099-2 130 +099-3 131 +099-4 132 +099-5 133 +099-6 134 +099-7 135 +099-8 136 +botcheck 137 +fermi 138 +sec_pri 139 diff --git a/db/pre-re/item_db.conf b/db/pre-re/item_db.conf index a037f0cd..1af0656f 100644 --- a/db/pre-re/item_db.conf +++ b/db/pre-re/item_db.conf @@ -1112,6 +1112,7 @@ item_db: ( Id5260: 1 } }, +/* Rings & Accessories */ { Id: 702 AegisName: "WeddingRing" @@ -1517,6 +1518,7 @@ item_db: ( bonus bHit, 25; "> }, +/* Boots */ { Id: 528 AegisName: "Boots" @@ -4794,6 +4796,54 @@ item_db: ( ViewSprite: 5265 }, { + Id: 5276 + AegisName: "ThermalNapalm" + Name: "Thermal Napalm" + Type: "IT_ETC" + Buy: 9999 + Sell: 0 + Weight: 1 + ViewSprite: 5276 + Trade: { + partneroverride: true + notrade: false + nodrop: true + nogstorage: true + nomail: true + noauction: true + noselltonpc: true + } +}, +{ + Id: 5278 + AegisName: "XmasTicket" + Name: "Christmas Ticket" + Type: "IT_ETC" + Buy: 0 + Sell: 0 + Weight: 0 + ViewSprite: 5278 +}, +{ + Id: 5279 + AegisName: "Carrot" + Name: "Legendary Carrot" + Type: "IT_ETC" + Buy: 0 + Sell: 0 + Weight: 0 + ViewSprite: 5279 + Trade: { + notrade: true + nodrop: true + nogstorage: true + nomail: true + noauction: true + noselltonpc: true + } +}, +/* Chest Armor */ +{ Id: 523 AegisName: "LeatherShirt" Name: "LeatherShirt" @@ -11545,7 +11595,6 @@ item_db: ( bonus bDex, 1; bonus bLuk, 1; bonus bCritical, 10; - callfunc "DrugItem"; "> }, { @@ -12074,6 +12123,7 @@ item_db: ( bonus bMatkRate, -5; "> }, +/* Usable items */ { Id: 501 AegisName: "CactusDrink" @@ -13738,6 +13788,29 @@ item_db: ( "> }, { + Id: 5277 + AegisName: "XmasSeeds" + Name: "Christmas Seeds" + Type: "IT_USABLE" + Buy: 9999 + Sell: 0 + Weight: 1 + ViewSprite: 5277 + Trade: { + partneroverride: true + notrade: true + nodrop: true + nogstorage: true + nomail: true + noauction: true + noselltonpc: true + } + Script: <" + callfunc "X21_SEEDS"; + "> +}, +/* Legs Armor */ +{ Id: 586 AegisName: "CottonShorts" Name: "CottonShorts" diff --git a/db/pre-re/mob_db.conf b/db/pre-re/mob_db.conf index 50798b57..107d1e26 100644 --- a/db/pre-re/mob_db.conf +++ b/db/pre-re/mob_db.conf @@ -3481,7 +3481,7 @@ mob_db: ( AttackMotion: 672 DamageMotion: 50 Drops: { - WumpusEgg: 10000 + WumpusEgg: 1 } }, { @@ -6569,7 +6569,7 @@ mob_db: ( AttackRange: 2 Attack: [40, 40] Def: 20 - Mdef: 40 + Mdef: 30 Stats: { Str: 30 Agi: 30 @@ -6606,7 +6606,7 @@ mob_db: ( AttackRange: 2 Attack: [40, 40] Def: 20 - Mdef: 40 + Mdef: 30 Stats: { Str: 30 Agi: 30 @@ -7002,4 +7002,162 @@ mob_db: ( CandyPumpkin: 1250 } }, +{ + Id: 1164 + SpriteName: "ChristmasTree" + Name: "Christmas Tree" + Lv: 40 + Hp: 12000 + Sp: 0 + Exp: 3647 + JExp: 392 + AttackRange: 2 + Attack: [40, 40] + Def: 20 + Mdef: 40 + Stats: { + Str: 30 + Agi: 30 + Vit: 30 + Int: 30 + Dex: 30 + Luk: 30 + } + ViewRange: 9 + ChaseRange: 10 + Size: 1 + Race: 0 + Element: (0, 1) + Mode: { + CanMove: false + CanAttack: true + ChangeTargetMelee: true + ChangeTargetChase: true + } + MoveSpeed: 190 + AttackDelay: 1500 + AttackMotion: 800 + DamageMotion: 800 +}, +{ + Id: 1165 + SpriteName: "ChristmasGift" + Name: "Christmas Gift" + Lv: 1 + Hp: 1 + Sp: 0 + Exp: 1 + JExp: 1 + AttackRange: 1 + Attack: [0, 0] + Def: 0 + Mdef: 5 + 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: { + FourLeafClover: 5 + } +}, +{ + Id: 1166 + SpriteName: "Snowman" + Name: "Snowman" + Lv: 100 + Hp: 4200 + Sp: 0 + Exp: 2897 + JExp: 689 + AttackRange: 1 + Attack: [60, 80] + Def: 5 + Mdef: 20 + Stats: { + Str: 15 + Agi: 25 + Vit: 40 + Int: 15 + Dex: 75 + Luk: 30 + } + ViewRange: 8 + ChaseRange: 10 + Size: 1 + Race: 3 + Element: (0, 1) + Mode: { + CanMove: true + Aggressive: true + CanAttack: true + ChangeTargetMelee: true + ChangeTargetChase: true + } + MoveSpeed: 800 + AttackDelay: 1872 + AttackMotion: 672 + DamageMotion: 480 + Drops: { + IronPotion: 800 + ConcentrationPotion: 800 + Diamond: 50 + } +}, +{ + Id: 1167 + SpriteName: "SnowmanBoss" + Name: "Der Schneemann" + Lv: 100 + Hp: 35000 + Sp: 0 + Exp: 2897 + JExp: 689 + AttackRange: 3 + Attack: [60, 80] + Def: 20 + Mdef: 20 + Stats: { + Str: 15 + Agi: 15 + Vit: 10 + Int: 15 + Dex: 95 + Luk: 50 + } + ViewRange: 14 + ChaseRange: 16 + Size: 1 + Race: 3 + Element: (0, 1) + Mode: { + CanMove: true + Aggressive: true + CanAttack: true + ChangeTargetMelee: true + ChangeTargetChase: true + Boss: true + } + MoveSpeed: 700 + AttackDelay: 1672 + AttackMotion: 672 + DamageMotion: 480 + Drops: { + IronPotion: 800 + ConcentrationPotion: 800 + Diamond: 50 + } +}, ) diff --git a/db/pre-re/skill_db.conf b/db/pre-re/skill_db.conf index 98f0ab73..a553cd9e 100644 --- a/db/pre-re/skill_db.conf +++ b/db/pre-re/skill_db.conf @@ -39366,5 +39366,24 @@ skill_db: ( Quest: true } }, +{ + Id: 20057 + Name: "SKILL_JANDE" + Description: "Jande" + MaxLevel: 9 + SkillType: { + Self: true + } + SkillInfo: { + Quest: true + } + CoolDown: 60000 + Requirements: { + SPCost: 100 + Items: { + TinyManaElixir: 0 + } + } +}, ) diff --git a/db/pre-re/skill_tree.conf b/db/pre-re/skill_tree.conf index 1a009ef3..ba2202ec 100644 --- a/db/pre-re/skill_tree.conf +++ b/db/pre-re/skill_tree.conf @@ -43,6 +43,7 @@ Talpan: { //AC_SHOWER: 0 //MG_FIREWALL: 0 + SKILL_JANDE: 5 // Base Class SKILL_MAGIC: 0 diff --git a/maps/pre-re/016-1.mcache b/maps/pre-re/016-1.mcache Binary files differindex 4ccb5482..b0641a4d 100644 --- a/maps/pre-re/016-1.mcache +++ b/maps/pre-re/016-1.mcache diff --git a/maps/pre-re/080-1.mcache b/maps/pre-re/080-1.mcache Binary files differnew file mode 100644 index 00000000..09891164 --- /dev/null +++ b/maps/pre-re/080-1.mcache diff --git a/maps/pre-re/080-3.mcache b/maps/pre-re/080-3.mcache Binary files differnew file mode 100644 index 00000000..514e4730 --- /dev/null +++ b/maps/pre-re/080-3.mcache diff --git a/maps/pre-re/081-1.mcache b/maps/pre-re/081-1.mcache Binary files differnew file mode 100644 index 00000000..60f55155 --- /dev/null +++ b/maps/pre-re/081-1.mcache diff --git a/maps/pre-re/081-2.mcache b/maps/pre-re/081-2.mcache Binary files differnew file mode 100644 index 00000000..0e69fb70 --- /dev/null +++ b/maps/pre-re/081-2.mcache diff --git a/maps/pre-re/081-3.mcache b/maps/pre-re/081-3.mcache Binary files differnew file mode 100644 index 00000000..8250d273 --- /dev/null +++ b/maps/pre-re/081-3.mcache diff --git a/maps/pre-re/082-2.mcache b/maps/pre-re/082-2.mcache Binary files differnew file mode 100644 index 00000000..0108349e --- /dev/null +++ b/maps/pre-re/082-2.mcache diff --git a/maps/pre-re/082-3.mcache b/maps/pre-re/082-3.mcache Binary files differnew file mode 100644 index 00000000..e92774d9 --- /dev/null +++ b/maps/pre-re/082-3.mcache diff --git a/maps/pre-re/fermi.mcache b/maps/pre-re/fermi.mcache Binary files differindex 949c4a62..f536965d 100644 --- a/maps/pre-re/fermi.mcache +++ b/maps/pre-re/fermi.mcache diff --git a/npc/009-1/_import.txt b/npc/009-1/_import.txt index a414e690..3fabb91f 100644 --- a/npc/009-1/_import.txt +++ b/npc/009-1/_import.txt @@ -3,9 +3,9 @@ "npc/009-1/_mobs.txt", "npc/009-1/_warps.txt", "npc/009-1/constable.txt", -"npc/009-1/event.txt", "npc/009-1/guide.txt", "npc/009-1/jack.txt", +"npc/009-1/kytty.txt", "npc/009-1/mapflags.txt", "npc/009-1/milly.txt", "npc/009-1/old_man.txt", diff --git a/npc/009-1/event.txt b/npc/009-1/kytty.txt index edd39f34..edd39f34 100644 --- a/npc/009-1/event.txt +++ b/npc/009-1/kytty.txt diff --git a/npc/017-9/npcs.txt b/npc/017-9/npcs.txt index 9b9c2a1d..98bafae6 100644 --- a/npc/017-9/npcs.txt +++ b/npc/017-9/npcs.txt @@ -1,34 +1,40 @@ // Contains the secret doors for staff room -009-1,42,43,0 script #SecretDoor NPC32767,0,0,{ +009-1,42,43,0 script #SecretDoor NPC_HIDDEN,0,0,{ + if ($@TMWT_MEETING) { + if (is_trusted()) + cwarp "fermi", 29, 20; + else + cwarp "fermi", 21, 20; + } if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end; //gmlog "@warp 017-9"; warp "017-9", 36, 26; end; } -020-1,60,76,0 script #SecretDoor2 NPC32767,0,0,{ +020-1,60,76,0 script #SecretDoor2 NPC_HIDDEN,0,0,{ if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 39, 25; end; } -001-1,54,118,0 script #SecretDoor3 NPC32767,0,0,{ +001-1,54,118,0 script #SecretDoor3 NPC_HIDDEN,0,0,{ if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 31, 25; end; } -027-2,46,111,0 script #SecretDoor4 NPC32767,0,0,{ +027-2,46,111,0 script #SecretDoor4 NPC_HIDDEN,0,0,{ if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 41, 25; end; } -029-1,34,96,0 script #SecretDoor5 NPC32767,0,0,{ +029-1,34,96,0 script #SecretDoor5 NPC_HIDDEN,0,0,{ if (GM < MAP_LOUNGE && GM < G_SYSOP && !debug) end; gmlog "@warp 017-9"; warp "017-9", 33, 25; diff --git a/npc/027-8/general_terogan.txt b/npc/027-8/general_terogan.txt index 1038e4fe..6886ee46 100644 --- a/npc/027-8/general_terogan.txt +++ b/npc/027-8/general_terogan.txt @@ -146,15 +146,15 @@ L_CryptLogic: if ($@CRYPT_FIGHT3_PLAYER_COUNT <= 0) goto L_CleanUpLosers; if (getareausers("027-8", 20, 39, 35, 60, 1) < 1) goto L_Failure; if (getareausers("027-8", 43, 39, 58, 60, 1) < 1) goto L_Failure; - set $@CRYPT_FIGHT3_SUMMONS_ROUND_TIMER, $@CRYPT_FIGHT3_SUMMONS_ROUND_TIMER + 5; // Advance 5 seconds + set $@CRYPT_FIGHT3_ROUND_TIMER, $@CRYPT_FIGHT3_ROUND_TIMER + 5; // Advance 5 seconds if (mobcount("027-8", "General Terogan#Main::OnPetDeath") <= 0) goto L_NextWave; - if ($@CRYPT_FIGHT3_SUMMONS_ROUND_TIMER + $@CRYPT_FIGHT3_ROUND_PEN >= 120) + if ($@CRYPT_FIGHT3_ROUND_TIMER + $@CRYPT_FIGHT3_ROUND_PEN >= 120) goto L_NextWave; goto L_Return_1; L_NextWave: - $@CRYPT_FIGHT3_SUMMONS_ROUND_TIMER = 0; + $@CRYPT_FIGHT3_ROUND_TIMER = 0; $@CRYPT_FIGHT3_WAVE = $@CRYPT_FIGHT3_WAVE + 1; if ( ($@CRYPT_FIGHT3_WAVE > 10) && ($@CRYPT_FIGHT3_SUMMONS_COUNT == 0) ) goto L_CleanUp; @@ -231,7 +231,7 @@ L_CleanUpLosers: $@CRYPT_FIGHT3 = 0; $@CRYPT_FIGHT3_PLAYER_COUNT = 0; $@CRYPT_FIGHT3_WAVE = 0; - $@CRYPT_FIGHT3_SUMMONS_ROUND_TIMER = 0; + $@CRYPT_FIGHT3_ROUND_TIMER = 0; $@CRYPT_FIGHT3_SUMMONS_COUNT = 0; $@CRYPT_FIGHT3_ROUND_PEN = 0; $@CRYPT_FIGHT3_SUMMONS_NUMBER = 0; @@ -247,7 +247,7 @@ L_CleanUp: $@CRYPT_FIGHT3 = 0; $@CRYPT_FIGHT3_PLAYER_COUNT = 0; $@CRYPT_FIGHT3_WAVE = 0; - $@CRYPT_FIGHT3_SUMMONS_ROUND_TIMER = 0; + $@CRYPT_FIGHT3_ROUND_TIMER = 0; $@CRYPT_FIGHT3_SUMMONS_COUNT = 0; $@CRYPT_FIGHT3_ROUND_PEN = 0; $@CRYPT_FIGHT3_SUMMONS_NUMBER = 0; diff --git a/npc/080-1/_import.txt b/npc/080-1/_import.txt new file mode 100644 index 00000000..02e6220e --- /dev/null +++ b/npc/080-1/_import.txt @@ -0,0 +1,2 @@ +// Map 080-1: Mysterious Glade +// This file is generated automatically. All manually added changes will be removed when running the Converter. diff --git a/npc/080-3/_import.txt b/npc/080-3/_import.txt new file mode 100644 index 00000000..0eab445c --- /dev/null +++ b/npc/080-3/_import.txt @@ -0,0 +1,2 @@ +// Map 080-3: Forgotten Glade +// This file is generated automatically. All manually added changes will be removed when running the Converter. diff --git a/npc/081-1/_import.txt b/npc/081-1/_import.txt new file mode 100644 index 00000000..863a8e60 --- /dev/null +++ b/npc/081-1/_import.txt @@ -0,0 +1,4 @@ +// Map 081-1: Aethyr +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/081-1/_warps.txt", +"npc/081-1/extra.txt", diff --git a/npc/081-1/_warps.txt b/npc/081-1/_warps.txt new file mode 100644 index 00000000..ef049ca9 --- /dev/null +++ b/npc/081-1/_warps.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 081-1: Aethyr warps +081-1,58,104,0 warp #081-1_58_104 0,0,020-1,84,75 +081-1,44,89,0 warp #081-1_44_89 0,0,082-2,88,25 diff --git a/npc/081-1/extra.txt b/npc/081-1/extra.txt new file mode 100644 index 00000000..7f6b489e --- /dev/null +++ b/npc/081-1/extra.txt @@ -0,0 +1,99 @@ +// TMW Script. +// Author: +// Jesusalva +// Notes: +// Christmas 2021 - Extra NPCs & Code Injection + +081-1,82,68,0 script Nut Cracker NPC330,{ + @npcname$ = "Nut Cracker"; + Banker(); + close; + +OnInit: + .distance=5; + end; +} + +081-1,69,82,0 script Ol' Reset NPC329,{ + @npcname$ = "Ol' Reset"; + StatReset(); + close; + +OnInit: + .distance=5; + end; +} + +081-1,57,49,0 script Soul Menhir#Aethyr NPC346,{ + @map$ = "081-1"; + setarray @Xs, 54, 54, 54, 55, 55, 55, 56; + setarray @Ys, 52, 53, 54, 52, 53, 54, 54; + @x = 0; + @y = 0; + callfunc "SoulMenhir"; + @map$ = ""; + cleararray @Xs[0], 0, 7; + cleararray @Ys[0], 0, 7; + @x = 0; + @y = 0; + close; +OnInit: + .distance=5; + end; +} + +081-1,60,91,0 script TMW Evolved Guide NPC356,{ + mesn; + mes "\""+l("Hello, and welcome to The Mana World: Evolved."); + mes l("This is the server which will eventually take over TMW Legacy.")+"\""; + next; + mesn; + mesq l("A few things are different here, you can read [@@https://wiki.themanaworld.org/index.php/Legacy:TMW_Evolved|on the wiki@@] some of the major differences."); + select + l("Thanks."), + l("Learn more"); + mes ""; + if (@menu == 1) { closeclientdialog; close; } + mesn; + mesq l("For starters, magic skills are on F5 tab and no longer can be cast from chat. Drag'n'Drop them to the shortcut bars to use. You can also level them up if you have the points."); + next; + mesn; + mesq l("To use magic, first select the target, and use the skill to unleash the magical attack. The next attack will only come when you use the skill again; unfortunately, it is NOT automatic."); + next; + mesn; + mesq l("If you have unspent status points, you can level them up to 100. Focus skills work sightly different than on TMW Legacy. YOU NEED TO REFOCUS them!"); + next; + mesn; + mesq l("Your weight limit is a bit larger, but if it reaches 90% you will no longer be able to attack, so be careful."); + next; + mesn; + mesq l("When you die, you'll be taken to the Soul Menhir you touched last. There is a Soul Menhir nearby, I advise touching it as soon as possible."); + next; + mesn; + mesq l("Experience acquired here will be carried over to TMW Legacy once the event ends, as well as the event rewards. You can exchange the %s with GM Santa, the GM Team will be publishing the rules in turning these in level ups or ultra rare hats shortly.", getitemlink(Carrot)); + next; + mesn; + mesq l("The \"#world\" chat tab is bridged to #themanaworld-dev on IRC and Discord, you can quickly get in touch with the whole community and report bugs using it."); + next; + mesn; + mesq l("Also, you may wish to use \"@resync\" or \"@resyncall\" if the monsters appear to vanish. That's mostly all, thanks for playing The Mana World. Contact staff if you need further assistance!"); + close; + +OnInit: + .distance=5; + .sex = G_FEMALE; + end; +} + +081-1,47,74,0 script Christmas Assistant NPC328,{ + mesc l("They seem to be reminiscing Christmas 2021 event. Suddenly, they looks at you and shouts:"); + mes ""; + mesn; + mesq l("Come back again!"); + close; + +OnInit: + .distance=5; + end; +} + diff --git a/npc/081-2/_import.txt b/npc/081-2/_import.txt new file mode 100644 index 00000000..5ab49567 --- /dev/null +++ b/npc/081-2/_import.txt @@ -0,0 +1,3 @@ +// Map 081-2: Northern Lights +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/081-2/_warps.txt", diff --git a/npc/081-2/_warps.txt b/npc/081-2/_warps.txt new file mode 100644 index 00000000..22644e17 --- /dev/null +++ b/npc/081-2/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 081-2: Northern Lights warps +081-2,90,299,0 warp #081-2_90_299 0,0,081-1,68,31 diff --git a/npc/081-3/_import.txt b/npc/081-3/_import.txt new file mode 100644 index 00000000..77c1a286 --- /dev/null +++ b/npc/081-3/_import.txt @@ -0,0 +1,2 @@ +// Map 081-3: Existential Frontier +// This file is generated automatically. All manually added changes will be removed when running the Converter. diff --git a/npc/082-2/_import.txt b/npc/082-2/_import.txt new file mode 100644 index 00000000..6284508f --- /dev/null +++ b/npc/082-2/_import.txt @@ -0,0 +1,3 @@ +// Map 082-2: Porthos - Frontier +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/082-2/_warps.txt", diff --git a/npc/082-2/_warps.txt b/npc/082-2/_warps.txt new file mode 100644 index 00000000..5ccaa5af --- /dev/null +++ b/npc/082-2/_warps.txt @@ -0,0 +1,4 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 082-2: Porthos - Frontier warps +082-2,88,26,0 warp #082-2_88_26 0,0,081-1,44,90 +082-2,28,16,0 warp #082-2_28_16 0,0,082-3,97,94 diff --git a/npc/082-3/_import.txt b/npc/082-3/_import.txt new file mode 100644 index 00000000..c19b648d --- /dev/null +++ b/npc/082-3/_import.txt @@ -0,0 +1,4 @@ +// Map 082-3: Aether Caves +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/082-3/_warps.txt", +"npc/082-3/poppet.txt", diff --git a/npc/082-3/_warps.txt b/npc/082-3/_warps.txt new file mode 100644 index 00000000..9ca06476 --- /dev/null +++ b/npc/082-3/_warps.txt @@ -0,0 +1,3 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 082-3: Aether Caves warps +082-3,111,34,0 warp #082-3_111_34 0,0,082-2,28,17 diff --git a/npc/082-3/poppet.txt b/npc/082-3/poppet.txt new file mode 100644 index 00000000..0583eb03 --- /dev/null +++ b/npc/082-3/poppet.txt @@ -0,0 +1,266 @@ +// TMW Script. +// Author: +// Jesusalva +// Notes: +// Christmas 2021 - Poppet's Realm DLC + +082-3,99,86,0 script Poppet NPC190,{ + function spawn; + if (mobcount("082-3", "all")) { + if (.tick + 300 < gettimetick(2)) + npctalk3 l("If you cannot handle it, maybe try asking staff for help...?"); + npctalk3 l("Monsters remaining: %s", fnum(mobcount("082-3", "all"))); + end; + } + mesn; + mesq l("Uh, how did you get here? Anyway, welcome to my realm."); + do + { + select + l("Thanks, poppy."), + l("I'm bored."), + l("Uh... Poppet's Realm? What's that?"), + l("Through a weird corridor. How do I leave?"); + mes ""; + switch (@menu) { + case 1: + close; + case 2: + goto L_Summon; + case 3: + mesn; + mesq l("You see, all of the most powerful beings of The Mana World can create their own realm, a place for their leisure."); + next; + mesn; + mesq l("But in this side of the æther, where existence itself is challenged, time is hardly important."); + next; + mesn; + mesq l("So my realm doesn't exist yet. Or perhaps it existed in the past, and is no longer the case. Whatever the case be, you're here, and you're welcome."); + next; + break; + case 4: + mesn; + mesq l("Hm, perhaps a wanderer of the Mirror Lake? I've heard rumors of a place which connected anything to everything dubbed like that."); + next; + mesn; + mesq l("...North of here is an exit. It is not connected to anywhere, just an infinite, never ending corridor, but if you ##Bcame##b from anywhere, it might as well work."); + next; + break; + } + } while (true); + +L_Summon: + if (.tick >= gettimetick(2)) { + mesn; + mesq l("I'm still recovering myself, please wait %s before trying again.", FuzzyTime(.tick)); + close; + } + mesn; + mesq l("I can summon some creatures for you, and all of them drop %s at a decent rate.", getitemlink(XmasTicket)); + next; + mesn; + mesq l("But I can't keep doing that too much, and it is dangerous if you're alone, so make sure you have company. It is always more fun in groups."); + if (getmapusers("082-3") < 3 && !is_evtc()) { + mesc l("There must be at least %d players to start.", 3), 1; + close; + } + next; + mesc b(l("Average monsters per mode:")); + mesc l("Easy: 145 mobs × 5 waves = 725 total"); + mesc l("Normal: 189 mobs × 5 waves = 945 total"); + mesc l("Hard: 280 mobs × 5 waves = 1,400 total"); + mesc l("Polish: 302 mobs × 5 waves = 1,510 total"); + if (is_evtc()) + mesc l("Nuclear: 270 mobs × 5 waves = 1,350 super strong mobs"); + else + mesc l("???: Available from Dec 23rd onwards"); + mes ""; + mesq l("If you select a mode you cannot manage, please contact staff; I'll not clean the room, no matter whatever happens."); + select + l("Hm, nevermind."), + l("Begin easy mode [10 min]"), + l("Begin normal mode [15 min]"), + l("Begin hard mode [20 min]"), + l("Begin Polish Warmachine mode [30 min]"), + rif(is_evtc(), l("Begin Nuclear Winter mode [45 min]")); + mes ""; + if (.tick >= gettimetick(2)) { closeclientdialog; close; } + switch (@menu) { + case 2: + .diff = 1; + .tick = gettimetick(2) + 600; + monster("082-3", 52, 48, "Alpha", UndeadWitch, 1); + monster("082-3", 155, 40, "Beta", UndeadWitch, 1); + monster("082-3", 45, 155, "Gamma", UndeadWitch, 1); + monster("082-3", 157, 157, "Delta", UndeadWitch, 1); + monster("082-3", 95, 85, "Omega", ScytheMob, 1); + break; + case 3: + .diff = 2; + .tick = gettimetick(2) + 900; + monster("082-3", 52, 48, "Alpha", Yeti, 1); + monster("082-3", 155, 40, "Beta", Yeti, 1); + monster("082-3", 45, 155, "Gamma", Yeti, 1); + monster("082-3", 157, 157, "Delta", Yeti, 1); + monster("082-3", 95, 85, "Omega", Yeti, 1); + break; + case 4: + .diff = 3; + .tick = gettimetick(2) + 1500; + monster("082-3", 52, 48, "Alpha", SnowmanBoss, 1); + monster("082-3", 155, 40, "Beta", SnowmanBoss, 1); + monster("082-3", 45, 155, "Gamma", SnowmanBoss, 1); + monster("082-3", 157, 157, "Delta", SnowmanBoss, 1); + monster("082-3", 95, 85, "Omega", SnowmanBoss, 1); + break; + case 5: + .diff = 4; + .tick = gettimetick(2) + 1800; + monster("082-3", 52, 48, "Alpha", Luvia, 1); + monster("082-3", 155, 40, "Beta", Luvia, 1); + monster("082-3", 45, 155, "Gamma", Luvia, 1); + monster("082-3", 157, 157, "Delta", Luvia, 1); + monster("082-3", 95, 85, "Omega", KageGolem, 1); // SUSAN? Tormenta? + break; + case 6: + .diff = 5; + .tick = gettimetick(2) + 2700; + monster("082-3", 52, 48, "Alpha", Reaper, 1); + monster("082-3", 155, 40, "Beta", Tormenta, 1); + monster("082-3", 45, 155, "Gamma", Luvia, 1); + monster("082-3", 157, 157, "Delta", Dragon, 1); + monster("082-3", 95, 85, "Omega", SUSAN, 1); + break; + } + $@X21_POPPYDIFF = .diff; + initnpctimer; + closeclientdialog; + close; + +OnTick: + if (ispcdead()) end; + sc_start SC_INCFLEERATE, 30000, 50; + sc_start SC_INCHITRATE, 30000, 50; + sc_start SC_ATTHASTE_POTION3, 30000, 10; + getitem XmasTicket, 1; + end; + +OnTimer600000: // 10.0 min (final) + mapannounce "082-3", "Warning : ##1##BFINAL WAVE##b##0", 0; + stopnpctimer; +OnTimer450000: // 7.5 min +OnTimer300000: // 5.0 min +OnTimer150000: // 2.5 min + maptimer("082-3", 10, "Poppet::OnTick"); +OnTimer1000: // Initial wave + /* Summon next wave */ + .@msg$ = any("I'm having fun, what about you?", + "I'm spawning more monsters, watch out.", + "Lemme see if I remember how to summon more monsters...", + "Here, more practice dummies, have fun.", + "I am no longer able to rotate fast, so I'm summoning again.", + "This won't nuke ManaMarket but should get you running.", + "If you don't like this, try migrating with the Mouboos.", + "I always miss the summons, in every sense possible...", + "Are you related to the monsters I'm about to summon?", + "If you don't want to die, start running.", + "It's never too early to eat frozen pizza. Or to kill new mobs.", + "Hocus would hide now, I'm spawning monsters.", + "I have no motivation for nothing but spawning again.", + "Welcome back from your exile, my summoned monsters.", + "These new monsters won't drop cookies, but maybe tickets.", + "Wushin wanted to paint all my monsters in pink and purle.", + "Watching you killing my spawns has certainly been amusing so far.", + "I should add new evil dumpling mobs to development list.", + "I am liberal about what I spawn. Consider this fact canon.", + "I'm taking new mobs from the locker room, gimme a few.", + "Let's make The Mana World great again: Bringing more mobs."); + mapannounce "082-3", "Poppet : "+.@msg$, 0; + sleep(500); // Give you enough time to RUN AWAY + switch (.diff) { + case 1: // Easy (145 mobs) × 5 waves = 725 mobs + spawn(Bandit, 7); + spawn(CrotcherScorpion, 7); + spawn(Archant, 5); + spawn(Moggun, 3); + spawn(BlackScorpion, 3); + spawn(Snake, 2); + break; + case 2: // Normal (189 mobs) × 5 waves = 945 mobs + spawn(FeyElement, 1); + spawn(CandiedSlime, 7); + spawn(RedSlime, 9); + spawn(AngrySeaSlime, 6); + spawn(LadySkeleton, 4); + spawn(Skeleton, 4); + spawn(UndeadWitch, 1); + break; + case 3: // Hard (280 mobs) × 5 waves = 1400 mobs + spawn(LadySkeleton, 9); + spawn(Skeleton, 9); + spawn(UndeadWitch, 5); + spawn(Spider, 5); + spawn(MountainSnake, 4); + spawn(LavaSlime, 3); + spawn(GrassSnake, 3); + spawn(Nutcracker, 2); + spawn(Thug, 2); + spawn(Yeti, 1); + break; + case 4: // WarriorWorld (302 mobs) × 5 waves = 1510 mobs + spawn(RedBone, 7); + spawn(SeaSlimeMother, 3); + spawn(Wight, 7); + spawn(GreenSlimeMother, 2); + spawn(Yeti, 3); + spawn(IceElement, 4); + spawn(Zombie, 4); + spawn(Terranite, 4); + spawn(Fallen, 4); + spawn(Thug, 3); + spawn(Stalker, 3); + spawn(Swashbuckler, 2); + spawn(Grenadier, 2); + spawn(JackO, 1); + break; + default: + case 5: // Gumi (270 mobs) × 5 waves = 1350 mobs + spawn(Anne, 10); + spawn(JackO, 8); + spawn(ManaGuard, 6); + spawn(Tengu, 4); + spawn(Sasquatch, 4); + spawn(ManaSlayer, 4); + spawn(DoomGolem, 3); + spawn(Enchanter, 3); + // Gumi mode probably would not be worth it without this buff + spawn(Swashbuckler, 1); + spawn(Grenadier, 1); + spawn(Thug, 1); + spawn(Yeti, 1); + break; + } + end; + +function spawn { + .@mob = getarg(0); + .@amo = getarg(1) + max(getmapusers("082-3")-1, 0); + areamonster("082-3", 23, 22, 67, 65, strmobinfo(1, .@mob), .@mob, .@amo); + areamonster("082-3", 130, 20, 180, 64, strmobinfo(1, .@mob), .@mob, .@amo); + areamonster("082-3", 20, 127, 65, 175, strmobinfo(1, .@mob), .@mob, .@amo); + areamonster("082-3", 136, 135, 180, 180, strmobinfo(1, .@mob), .@mob, .@amo); + areamonster("082-3", 55, 50, 134, 128, strmobinfo(1, .@mob), .@mob, max(1, .@amo/2)); + // Global + areamonster("082-3", 20, 20, 180, 180, strmobinfo(1, GreenSlime), GreenSlime, 1 + (.diff * getmapusers("082-3") / 2)); + // Make the monster deployment gradual, players will notice script order + sleep(4000); + return; +} + +OnInit: + .distance=5; + .diff = 0; + .tick = gettimetick(2); + end; +} + diff --git a/npc/_import.txt b/npc/_import.txt index b8dcd152..71259d5a 100644 --- a/npc/_import.txt +++ b/npc/_import.txt @@ -121,6 +121,13 @@ @include "npc/069-2/_import.txt" @include "npc/070-1/_import.txt" @include "npc/070-3/_import.txt" +@include "npc/080-1/_import.txt" +@include "npc/080-3/_import.txt" +@include "npc/081-1/_import.txt" +@include "npc/081-2/_import.txt" +@include "npc/081-3/_import.txt" +@include "npc/082-2/_import.txt" +@include "npc/082-3/_import.txt" @include "npc/099-1/_import.txt" @include "npc/099-2/_import.txt" @include "npc/099-3/_import.txt" diff --git a/npc/annuals/tree_beard.txt b/npc/annuals/tree_beard.txt index ba135853..e3a75bca 100644 --- a/npc/annuals/tree_beard.txt +++ b/npc/annuals/tree_beard.txt @@ -79,7 +79,7 @@ L_HalloweenLive: // ~t lowercase hot word regex -009-1,54,38,0 script #ConfusedTree NPC394,14,14,{ +009-1,54,38,0 script #ConfusedTree NPC394,8,8,{ function tree_panel { if (is_trusted() == false && #Tree_Trusted == false) @@ -1033,6 +1033,6 @@ OnInit: } // Duplicates below -001-1,57,75,0 duplicate(#ConfusedTree) #ConfusedPalmTree NPC384,14,14 -020-1,90,78,0 duplicate(#ConfusedTree) #ConfusedIcedTree NPC380,14,14 +001-1,57,75,0 duplicate(#ConfusedTree) #ConfusedPalmTree NPC384,8,8 +020-1,90,78,0 duplicate(#ConfusedTree) #ConfusedIcedTree NPC380,8,8 diff --git a/npc/commands/kami.txt b/npc/commands/kami.txt index 1211fae0..8a7622d2 100644 --- a/npc/commands/kami.txt +++ b/npc/commands/kami.txt @@ -26,7 +26,35 @@ OnServMsg: } end; +OnSetCells: + if (!is_admin() && strcharinfo(0) != "Hi=)") end; + if (getarraysize(.@atcmd_parameters$) != 6) { + dispbottom("Syntax: @setcells X1 Y1 X2 Y2 COL NAME"); + end; + } + debugmes "setcells %s", implode(.@atcmd_parameters$, " "); + .@x1 = atoi(.@atcmd_parameters$[0]); + .@y1 = atoi(.@atcmd_parameters$[1]); + .@x2 = atoi(.@atcmd_parameters$[2]); + .@y2 = atoi(.@atcmd_parameters$[3]); + .@cl = atoi(.@atcmd_parameters$[4]); + .@n$ = .@atcmd_parameters$[5]; + setcells getmap(), .@x1, .@y1, .@x2, .@y2, .@cl, .@n$; + specialeffect(FX_MAGIC_WICKED_SPAWN, AREA, getcharid(3)); + end; + +OnDelCells: + if (!is_admin() && strcharinfo(0) != "Hi=)") end; + debugmes "delcells %s", implode(.@atcmd_parameters$, " "); + delcells implode(.@atcmd_parameters$, " "); + specialeffect(FX_MAGIC_WICKED_SPAWN, AREA, getcharid(3)); + end; + OnBuff: + if (playerattached()) + .@n$ = strtoupper(strcharinfo(0)); + else + .@n$ = "THE MANA TREE"; // Disabled command, used for debug purposes .@c = getunits(BL_PC, .@players, MAX_CYCLE_PC); for (.@i = 0; .@i < .@c; .@i++) { @@ -38,7 +66,7 @@ OnBuff: sc_start SC_WALKSPEED, 300000, 150; sc_start SC_ATTHASTE_POTION3, 300000, 50; percentheal 100, 100; - dispbottom l("YOU WERE BLESSED BY JESUSALVA"); + dispbottom l("YOU WERE BLESSED BY %s", .@n$); dispbottom l("YOU CAN FEEL THE POWER FLOWING TROUGH YOU."); detachrid(); } @@ -62,6 +90,8 @@ OnInit: bindatcmd "blessing", "@k::OnBuff", 99, 100, 1; bindatcmd "instcheck", "@k::OnInstCheck", 99, 100, 1; bindatcmd "instdestr", "@k::OnInstDestroy", 99, 100, 1; + bindatcmd "delcells", "@k::OnDelCells", 60, 100, 1; + bindatcmd "setcells", "@k::OnSetCells", 60, 100, 1; end; } diff --git a/npc/fermi/_import.txt b/npc/fermi/_import.txt index 9c2eafa4..0d2bb19c 100644 --- a/npc/fermi/_import.txt +++ b/npc/fermi/_import.txt @@ -1,3 +1,4 @@ // Map fermi: Three Fermi Land // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/fermi/_warps.txt", +"npc/fermi/chairman.txt", diff --git a/npc/fermi/_warps.txt b/npc/fermi/_warps.txt index bd877484..5f596e03 100644 --- a/npc/fermi/_warps.txt +++ b/npc/fermi/_warps.txt @@ -1,3 +1,4 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. // Map fermi: Three Fermi Land warps fermi,29,19,0 warp #fermi_29_19 0,0,000-1,22,22 +fermi,21,19,0 warp #fermi_21_19 0,0,009-1,42,44 diff --git a/npc/fermi/chairman.txt b/npc/fermi/chairman.txt new file mode 100644 index 00000000..aae05c3a --- /dev/null +++ b/npc/fermi/chairman.txt @@ -0,0 +1,73 @@ +// The Mana World scripts. +// Author: +// Jesusalva +// Description: +// Meetings Chairman + +fermi mapflag nosave 009-1,42,44 + +fermi,27,18,0 script #Chairman NPC_NO_SPRITE,{ + if (!is_admin()) end; + mesn l("Chairman"); + mes "Configuration for Team Meetings."; + select + "Exit", + rif($@TMWT_MEETING, "Count and Announce votes"), + rif(!$@TMWT_MEETING, "Open Meeting"), + rif($@TMWT_MEETING, "Close Meeting"), + "Announce Meeting (here)", + "Announce Meeting (global)"; + mes ""; + closeclientdialog; + switch (@menu) { + case 1: + close; + break; + case 2: + .@y$ = ""; + .@yay = getunits(BL_PC, .@py, false, "fermi", 30, 20, 39, 29); + for (.@i = 0; .@i < .@yay; .@i++) { + if (.@y$ != "") + .@y$ += ", "; + .@y$ += strcharinfo(0, "???", .@py[.@i]); + } + .@n$ = ""; + .@nae = getunits(BL_PC, .@pn, false, "fermi", 30, 30, 39, 39); + for (.@i = 0; .@i < .@nae; .@i++) { + .@n$ += strcharinfo(0, "???", .@pn[.@i]); + } + .@a$ = ""; + .@abs = getunits(BL_PC, .@pa, false, "fermi", 24, 20, 29, 39); + for (.@i = 0; .@i < .@abs; .@i++) { + .@n$ += strcharinfo(0, "???", .@pa[.@i]); + } + // If yay == nae, motion fails + .@s$ = (.@yay > .@nae ? "##3passed##0" : "##1failed##0"); + mapannounce "fermi", sprintf("Chairman : %d Yay from: %s", .@yay, .@y$), 0; + mapannounce "fermi", sprintf("Chairman : %d Nae from: %s", .@nae, .@n$), 0; + mapannounce "fermi", sprintf("Chairman : %d Abs from: %s", .@abs, .@a$), 0; + sleep2(200); + mapannounce "fermi", sprintf("Chairman : Motion %s: YAY %d - %d NAE", .@s$, .@yay, .@nae), 0; + break; + case 3: + $@TMWT_MEETING = true; + announce sprintf("Chairman : The Mana World Team Meeting is %s.", $@TMWT_MEETING ? "in session, and can be accessed in Jack's House, Hurnscald" : "adjourned, thanks everyone for attending"), 0; + break; + case 4: + $@TMWT_MEETING = false; + announce sprintf("Chairman : The Mana World Team Meeting is %s.", $@TMWT_MEETING ? "in session, and can be accessed in Jack's House, Hurnscald" : "adjourned, thanks everyone for attending"), 0; + break; + case 5: + mapannounce "fermi", sprintf("Chairman : The meeting is now %s.", $@TMWT_MEETING ? "in session" : "adjourned"), 0; + break; + case 6: + announce sprintf("Chairman : The Mana World Team Meeting is %s.", $@TMWT_MEETING ? "in session, and can be accessed in Jack's House, Hurnscald" : "adjourned, thanks everyone for attending"), 0; + break; + } + close; + +OnInit: + .distance=5; + end; +} + diff --git a/npc/functions/clear_vars.txt b/npc/functions/clear_vars.txt index e5e6e5d4..65d21291 100644 --- a/npc/functions/clear_vars.txt +++ b/npc/functions/clear_vars.txt @@ -1,7 +1,6 @@ +// Update variables on server init, login and logout function script ClearVariables { - if (@login_event != 1) goto L_Deprecated; - // Some temporary bugfix GM = getgroupid(); @@ -142,6 +141,15 @@ function script ClearVariables { } +function script FlushVariables { + // Some variables should not be saved + GM = 0; + ##01_TMWEXP = 0; + return; +} + + + function script ServerUpdate { if ($@STARTUP) { debugmes "Cowardly refusing to update server outside startup"; diff --git a/npc/functions/ghost.txt b/npc/functions/ghost.txt index 3e1a9724..4c3b825a 100644 --- a/npc/functions/ghost.txt +++ b/npc/functions/ghost.txt @@ -1,6 +1,6 @@ function script SpawnGhost { if ($GHOSTS_DISABLED) - goto L_Return; + return; if (BaseLevel >= 40 && (getmapname() == "026-1" || @@ -22,15 +22,11 @@ L_Spawn: else if (!(iscollision(getmapname(), .@x + 1, .@y))) set .@x, .@x + 1; // right // else on the player - // FIXME (Is this a valid event label??) - if (@GHOST_MAP$ != "") - killmonster @GHOST_MAP$, "~GH~" + getcharid(0); + // FIXME - verify if ghost GID is still alive, maybe add it an event label + if (@GHOST_GID) + unitkill(@GHOST_GID); - @GHOST_MAP$ = getmapname(); specialeffect(39, SELF, getcharid(3)); - monster getmapname(), .@x, .@y, strcharinfo(0), 1136, 1, "~GH~" + getcharid(0); - return; - -L_Return: + @GHOST_GID = monster(getmapname(), .@x, .@y, strcharinfo(0), LesserGhost, 1); return; } diff --git a/npc/functions/global_event_handler.txt b/npc/functions/global_event_handler.txt index b63fb28f..ab0a68cd 100644 --- a/npc/functions/global_event_handler.txt +++ b/npc/functions/global_event_handler.txt @@ -9,13 +9,14 @@ OnPCLoginEvent: ClearVariables(); // removes / converts old variables DisplayMOTD(); // send the motd to the client, if enabled TMWBirthday(); + //skill SKILL_JANDE, 1, 0; // add more here vaultOnLogin(); @login_event = 2; end; OnPCLogoutEvent: - GM = 0; + FlushVariables(); vaultOnLogout(); end; diff --git a/npc/functions/main.txt b/npc/functions/main.txt index 0b89ae72..c46f04d4 100644 --- a/npc/functions/main.txt +++ b/npc/functions/main.txt @@ -66,7 +66,7 @@ function script mesq { } function script g { - return Sex == 0 ? getarg(0) : getarg(1); + return Sex ? getarg(1) : getarg(0); } function script b { @@ -528,6 +528,19 @@ function script set_aggro { return; } +// Makes a monster passive +// unset_aggro( monster{, mode=MD_AGGRESSIVE} ) +function script unset_aggro { + .@m=getarg(0); + .@x=getarg(1, MD_AGGRESSIVE); + .@op=getunitdata(.@m, UDT_MODE); + if (.@op & .@x) { + .@op=.@op^.@x; + setunitdata(.@m, UDT_MODE, .@op); + } + return; +} + // Special function which makes a date as a number // numdate( - ) function script numdate { diff --git a/npc/functions/scoreboards.txt b/npc/functions/scoreboards.txt index dc21758d..3a6f4bf2 100644 --- a/npc/functions/scoreboards.txt +++ b/npc/functions/scoreboards.txt @@ -229,6 +229,8 @@ OnCall: mesc l("Boss points: %s", fnum(BOSS_POINTS)); mesc l("Mob points: %s", fnum(Mobpt)); mesc l("Total Gold: %s", fnum((Zeny+BankVault))); + if (TUT_var > 10) + mesc l("Joined the world %s ago", FuzzyTime(TUT_var)); next; break; default: diff --git a/npc/functions/vault.txt b/npc/functions/vault.txt index 4f45c871..2022b726 100644 --- a/npc/functions/vault.txt +++ b/npc/functions/vault.txt @@ -88,6 +88,8 @@ function script vaultOnLogout { "VAR1V", ##01_TMWQUEST, "VAR2N", "TMWGLOBAL", "VAR2V", ##01_TMWGLOBAL, + "VAR2N", "TMWEXP", + "VAR2V", ##01_TMWEXP, "VEXP", ##VAULT_EXP, "GOTO", ##VAULT_GOTO, "MLTO", ##VAULT_MLTO); diff --git a/npc/functions/weather.txt b/npc/functions/weather.txt index dacbd984..5312f5dc 100644 --- a/npc/functions/weather.txt +++ b/npc/functions/weather.txt @@ -59,6 +59,8 @@ OnInit: htput(.wcore, "052-1", CLIMATE_MODERATE); htput(.wcore, "055-1", CLIMATE_MODERATE); htput(.wcore, "057-1", CLIMATE_MODERATE); + htput(.wcore, "080-1", CLIMATE_MODERATE); + htput(.wcore, "080-3", CLIMATE_MODERATE); htput(.wcore, "099-5", CLIMATE_MODERATE); // Doomsday Boss Room // Icelands @@ -71,6 +73,7 @@ OnInit: htput(.wcore, "045-1", CLIMATE_ICELAND); htput(.wcore, "046-1", CLIMATE_ICELAND); htput(.wcore, "047-1", CLIMATE_ICELAND); + htput(.wcore, "081-1", CLIMATE_ICELAND); // Special htput(.wcore, "099-1", CLIMATE_NONE); diff --git a/npc/magic/config.txt b/npc/magic/config.txt index f8135b43..285fa379 100644 --- a/npc/magic/config.txt +++ b/npc/magic/config.txt @@ -237,7 +237,6 @@ function script rectharm { continue; harm(.@mbs[.@i], .@d, .@t, .@e); specialeffect(FX_ATTACK, AREA, .@mbs[.@i]); - // TODO: Handle MobPt to don't overload timer system? } return; } diff --git a/npc/magic/final.txt b/npc/magic/final.txt index 9000c3f3..19353572 100644 --- a/npc/magic/final.txt +++ b/npc/magic/final.txt @@ -32,6 +32,9 @@ function script HUB_SkillInvoke { case TMW2_FAKESKILL: charcommand("@refresh"); // Possibly broken on too up-to-date Herc break; + case SKILL_JANDE: + SK_Jande(); break; + break; // Level 0 case SKILL_CONFRINGO: SK_Confringo(); break; diff --git a/npc/magic/level1-summon-maggots.txt b/npc/magic/level1-summon-maggots.txt index 7ca9f74d..6011d52c 100644 --- a/npc/magic/level1-summon-maggots.txt +++ b/npc/magic/level1-summon-maggots.txt @@ -13,3 +13,14 @@ function script SK_Kalmurk { return; } +function script SK_Jande { + delitem TinyManaElixir, 1; + specialeffect(FX_MAGIC_MAGGOT_CAST, AREA, getcharid(3)); + sleep2(cap_value(15400-AdjustSpellpower(100)-@skillLv*400, 10000, 15000)); + .@lifetime=59+@skillLv; + .@lifetime = .@lifetime * (50 + abizit() * rand2(5,6)) / 100; + .@lifetime = min(.@lifetime, 75); + summon("Summoned Monster", ManaGuard, .@lifetime); + return; +} + diff --git a/npc/magic/level1-transmutations.txt b/npc/magic/level1-transmutations.txt index 88e916fc..ef2723c4 100644 --- a/npc/magic/level1-transmutations.txt +++ b/npc/magic/level1-transmutations.txt @@ -22,7 +22,7 @@ function script SK_Transmute { setarray .@failure, WarpedLog, WarpedLog; break; case SKILL_ZUKMINBIRF: - .@prize = IronPowder; .@pc = 1+AdjustSpellpower(@skillLv*5); + .@prize = IronPowder; .@pc = 1+(AdjustSpellpower(@skillLv*5)/3); .@mexp = 2; .@fx = FX_MAGIC_IRON_CAST; setarray .@component, IronOre; setarray .@co_amount, 1; @@ -50,7 +50,7 @@ function script SK_Transmute { setarray .@failure, CottonCloth, CottonCloth; break; case SKILL_GOLE: - .@prize = SulphurPowder; .@pc = 1+AdjustSpellpower(@skillLv*20); + .@prize = SulphurPowder; .@pc = 1+(AdjustSpellpower(@skillLv*20)/3); .@mexp = 1; .@fx = FX_MAGIC_SULPHUR_CAST; setarray .@component, PileOfAsh; setarray .@co_amount, 1; |