summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2022-01-20 02:46:20 +0000
committerJesusaves <cpntb1@ymail.com>2022-01-20 02:46:20 +0000
commit8875cef958add4b361300c1ba108d8bf1d7995d7 (patch)
tree96f05618b8dc04bc19778d51482f85c6f4e94865
parentc1be7bd1eab5b0c230001c369292abe757a7f32a (diff)
downloadserverdata-8875cef958add4b361300c1ba108d8bf1d7995d7.tar.gz
serverdata-8875cef958add4b361300c1ba108d8bf1d7995d7.tar.bz2
serverdata-8875cef958add4b361300c1ba108d8bf1d7995d7.tar.xz
serverdata-8875cef958add4b361300c1ba108d8bf1d7995d7.zip
Christmas 2021 Cleanup
Contains several other bugfixes and improvements - The Mana World Team's Chairman - Fix Terogan Fight - Poppet's Battle Chamber (inactive) - `@setcells` and `@delcells` - Fix Graveyard Ghosts - Jande skill (inactive)
-rw-r--r--conf/map/maps.conf7
-rw-r--r--db/constants.conf11
-rw-r--r--db/map_index.txt29
-rw-r--r--db/pre-re/item_db.conf75
-rw-r--r--db/pre-re/mob_db.conf164
-rw-r--r--db/pre-re/skill_db.conf19
-rw-r--r--db/pre-re/skill_tree.conf1
-rw-r--r--maps/pre-re/016-1.mcachebin728 -> 727 bytes
-rw-r--r--maps/pre-re/080-1.mcachebin0 -> 1452 bytes
-rw-r--r--maps/pre-re/080-3.mcachebin0 -> 1522 bytes
-rw-r--r--maps/pre-re/081-1.mcachebin0 -> 619 bytes
-rw-r--r--maps/pre-re/081-2.mcachebin0 -> 1488 bytes
-rw-r--r--maps/pre-re/081-3.mcachebin0 -> 145 bytes
-rw-r--r--maps/pre-re/082-2.mcachebin0 -> 151 bytes
-rw-r--r--maps/pre-re/082-3.mcachebin0 -> 1082 bytes
-rw-r--r--maps/pre-re/fermi.mcachebin63 -> 71 bytes
-rw-r--r--npc/009-1/_import.txt2
-rw-r--r--npc/009-1/kytty.txt (renamed from npc/009-1/event.txt)0
-rw-r--r--npc/017-9/npcs.txt16
-rw-r--r--npc/027-8/general_terogan.txt10
-rw-r--r--npc/080-1/_import.txt2
-rw-r--r--npc/080-3/_import.txt2
-rw-r--r--npc/081-1/_import.txt4
-rw-r--r--npc/081-1/_warps.txt4
-rw-r--r--npc/081-1/extra.txt99
-rw-r--r--npc/081-2/_import.txt3
-rw-r--r--npc/081-2/_warps.txt3
-rw-r--r--npc/081-3/_import.txt2
-rw-r--r--npc/082-2/_import.txt3
-rw-r--r--npc/082-2/_warps.txt4
-rw-r--r--npc/082-3/_import.txt4
-rw-r--r--npc/082-3/_warps.txt3
-rw-r--r--npc/082-3/poppet.txt266
-rw-r--r--npc/_import.txt7
-rw-r--r--npc/annuals/tree_beard.txt6
-rw-r--r--npc/commands/kami.txt32
-rw-r--r--npc/fermi/_import.txt1
-rw-r--r--npc/fermi/_warps.txt1
-rw-r--r--npc/fermi/chairman.txt73
-rw-r--r--npc/functions/clear_vars.txt12
-rw-r--r--npc/functions/ghost.txt14
-rw-r--r--npc/functions/global_event_handler.txt3
-rw-r--r--npc/functions/main.txt15
-rw-r--r--npc/functions/scoreboards.txt2
-rw-r--r--npc/functions/vault.txt2
-rw-r--r--npc/functions/weather.txt3
-rw-r--r--npc/magic/config.txt1
-rw-r--r--npc/magic/final.txt3
-rw-r--r--npc/magic/level1-summon-maggots.txt11
-rw-r--r--npc/magic/level1-transmutations.txt4
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
index 4ccb5482..b0641a4d 100644
--- a/maps/pre-re/016-1.mcache
+++ b/maps/pre-re/016-1.mcache
Binary files differ
diff --git a/maps/pre-re/080-1.mcache b/maps/pre-re/080-1.mcache
new file mode 100644
index 00000000..09891164
--- /dev/null
+++ b/maps/pre-re/080-1.mcache
Binary files differ
diff --git a/maps/pre-re/080-3.mcache b/maps/pre-re/080-3.mcache
new file mode 100644
index 00000000..514e4730
--- /dev/null
+++ b/maps/pre-re/080-3.mcache
Binary files differ
diff --git a/maps/pre-re/081-1.mcache b/maps/pre-re/081-1.mcache
new file mode 100644
index 00000000..60f55155
--- /dev/null
+++ b/maps/pre-re/081-1.mcache
Binary files differ
diff --git a/maps/pre-re/081-2.mcache b/maps/pre-re/081-2.mcache
new file mode 100644
index 00000000..0e69fb70
--- /dev/null
+++ b/maps/pre-re/081-2.mcache
Binary files differ
diff --git a/maps/pre-re/081-3.mcache b/maps/pre-re/081-3.mcache
new file mode 100644
index 00000000..8250d273
--- /dev/null
+++ b/maps/pre-re/081-3.mcache
Binary files differ
diff --git a/maps/pre-re/082-2.mcache b/maps/pre-re/082-2.mcache
new file mode 100644
index 00000000..0108349e
--- /dev/null
+++ b/maps/pre-re/082-2.mcache
Binary files differ
diff --git a/maps/pre-re/082-3.mcache b/maps/pre-re/082-3.mcache
new file mode 100644
index 00000000..e92774d9
--- /dev/null
+++ b/maps/pre-re/082-3.mcache
Binary files differ
diff --git a/maps/pre-re/fermi.mcache b/maps/pre-re/fermi.mcache
index 949c4a62..f536965d 100644
--- a/maps/pre-re/fermi.mcache
+++ b/maps/pre-re/fermi.mcache
Binary files differ
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;