summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2023-06-26 00:13:41 -0300
committerJesusaves <cpntb1@ymail.com>2023-06-26 00:13:41 -0300
commit82b91693cac9bf3169d3d1d6eb8a3075f662f6a2 (patch)
treef7f5aebee155b3fa8d12b0291668cbca6615c838
parent8a48bf02e99874e6aaf7171d259f5f2a3e8a45e3 (diff)
downloadserverdata-82b91693cac9bf3169d3d1d6eb8a3075f662f6a2.tar.gz
serverdata-82b91693cac9bf3169d3d1d6eb8a3075f662f6a2.tar.bz2
serverdata-82b91693cac9bf3169d3d1d6eb8a3075f662f6a2.tar.xz
serverdata-82b91693cac9bf3169d3d1d6eb8a3075f662f6a2.zip
Add the Moubootaur Showdown (without any major change)
-rw-r--r--db/constants.conf2
-rw-r--r--npc/033-1/misc.txt9
-rw-r--r--npc/config/events.txt321
-rw-r--r--npc/scripts.conf1
4 files changed, 331 insertions, 2 deletions
diff --git a/db/constants.conf b/db/constants.conf
index 8cd0b90..8e8bfb7 100644
--- a/db/constants.conf
+++ b/db/constants.conf
@@ -2231,7 +2231,7 @@ constants_db: {
comment__: "Porthos Events Identifiers"
PORTHOS_UNUSED: 0
- PORTHOS_STDBY: 1
+ PORTHOS_ACTIVE: 1
PORTHOS_BUSY: 2
comment__: "Mirror Lake Server Identifiers"
diff --git a/npc/033-1/misc.txt b/npc/033-1/misc.txt
index 4537c80..d923de6 100644
--- a/npc/033-1/misc.txt
+++ b/npc/033-1/misc.txt
@@ -47,9 +47,16 @@ function script SetPorthosPortal {
mes l("Do you want to activate an event?");
next;
select
- l("Cancel");
+ l("Cancel"),
+ l("Moubootaur Showdown");
mes "";
switch (@menu) {
+ case 2:
+ setd(sprintf("$@EVENT_%02d", .@id), PORTHOS_ACTIVE);
+ setd(sprintf("$@EVENT_%02d_M$", .@id), "001-13-2");
+ setd(sprintf("$@EVENT_%02d_X", .@id), 47);
+ setd(sprintf("$@EVENT_%02d_Y", .@id), 52);
+ break;
default:
mes l("Ok.");
break;
diff --git a/npc/config/events.txt b/npc/config/events.txt
new file mode 100644
index 0000000..55c4433
--- /dev/null
+++ b/npc/config/events.txt
@@ -0,0 +1,321 @@
+// TMW2 scripts.
+// Author:
+// Jesusalva
+// Description:
+// Some of the event scripts
+
+001-13-2 mapflag zone MMO
+001-13-2,47,26,0 script #FoSCore NPC_NO_SPRITE,{
+ if (!is_admin() && !is_master()) end;
+ if ($@FIRESOFSTEAM_BOSS) end;
+ select
+ l("Ignore this book"),
+ l("Begin Moubootaur Showdown");
+ mes "";
+ $@FIRESOFSTEAM_BOSS=(@menu-1)*2;
+ if ($@FIRESOFSTEAM_BOSS == 0) close;
+ select
+ l("Easy Mode"),
+ l("Crazy Mode"),
+ l("Cadis Mode"),
+ l("Crazy Cadis Ultimate Pandorica Mode"),
+ l("Portable Apocalypse");
+ mes "";
+ $@FIRESOFSTEAM_DIFF=70+(@menu*30);
+ $@EVENT_01 = PORTHOS_BUSY;
+ switch (@menu) {
+ case 1: .@d$="##2Easy"; break;
+ case 2: .@d$="##3Crazy"; break;
+ case 3: .@d$="##5Cadis"; break;
+ case 4: .@d$="##6Crazy Cadis Ultimate Pandorica"; break;
+ case 5: .@d$="##1Portable Apocalypse"; break;
+ default: .@d$="Unknown";
+ }
+ mapannounce("001-13-2", "Difficulty Selected: ##B"+.@d$+"##b", 0);
+ changemusic("001-13-2", "mythica.ogg");
+ closeclientdialog;
+ // Dispose of the GM
+ warp "033-1", 72, 185;
+ sleep(200);
+ // PC no longer attached
+ // Start the event
+ mapwarp("001-13-2", "001-13-2", 47, 37);
+ sleep(200);
+ // Cleanup previous data (if any)
+ $@FOS_ISB=0;
+ $@FOS_MOB=0;
+ $@FOS_AND=0;
+ .Support1=0;
+ .Support2=0;
+ .Support3=0;
+ .Support4=0;
+ .Support5=0;
+ $@FOS_MOB=monster("001-13-2", 47, 32, "Moubootaur (Sealed)", MobMoubootaur, 1, "#FoSCore::OnEventEnd");
+ .@c = getunits(BL_PC|BL_MER|BL_HOM, .@players, MAX_CYCLE_PC, "001-13-2");
+ for (.@i = 0; .@i < .@c; .@i++) {
+ sc_start(SC_STUN, 31000, 1, 10000,
+ SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .@players[.@i]);
+ }
+ sc_start(SC_STUN, 31000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, $@FOS_MOB);
+ sleep(1000); // Dramatic Silence
+ unittalk($@FOS_MOB, "##1Who dares awake me from my slumber...");
+ sleep(3000);
+ unittalk($@FOS_MOB, "##1It was not even a decade since I turned a whole world in a Moubootaur Legend for their insolence...");
+ sleep(5000);
+ maptimer2("001-13-2", 2000, "#FoSCore::OnMFShake");
+ sleep(2000);
+ unittalk($@FOS_MOB, "##1AND YOU DARE TO NOT LEARN YOUR LESSON?? %%e");
+ sleep(2000);
+ unittalk($@FOS_MOB, "##1USELESS, UNWORTHY CREATURES!! %%e");
+ sleep(6000);
+ unittalk($@FOS_MOB, "##1I SHALL TURN THE WHOLE FRICKIN' MULTIVERSE INTO MOUBOOS...");
+ sleep(6000);
+ unittalk($@FOS_MOB, "##1MY RETURN... IS AT HAND!!");
+ .@avg=$@FIRESOFSTEAM_DIFF*13/10; // Moubootaur: +30% bonus (+30~60 lvls)
+ // Reconfigure the monster (otherwise it is night immortal)
+ setunitdata($@FOS_MOB, UDT_LEVEL, .@avg);
+ setunitdata($@FOS_MOB, UDT_STR, 1+.@avg*3/4);
+ setunitdata($@FOS_MOB, UDT_AGI, 1+.@avg*3/4);
+ setunitdata($@FOS_MOB, UDT_VIT, 1+.@avg*3/4);
+ setunitdata($@FOS_MOB, UDT_INT, 1+.@avg*3/4);
+ setunitdata($@FOS_MOB, UDT_DEX, 1+.@avg*3/4);
+ setunitdata($@FOS_MOB, UDT_LUK, 1+.@avg*3/4);
+ setunitdata($@FOS_MOB, UDT_ADELAY, 1472);
+ setunitdata($@FOS_MOB, UDT_ATKRANGE, 4);
+ // Battle Status
+ setunitdata($@FOS_MOB, UDT_MAXHP, .@avg*1350);
+ setunitdata($@FOS_MOB, UDT_HP, .@avg*1350);
+ setunitdata($@FOS_MOB, UDT_ATKMIN, .@avg*6);
+ setunitdata($@FOS_MOB, UDT_ATKMAX, .@avg*8);
+ setunitdata($@FOS_MOB, UDT_DEF, 12+.@avg*5/3);
+ setunitdata($@FOS_MOB, UDT_MDEF, 1+.@avg);
+ setunitdata($@FOS_MOB, UDT_HIT, .@avg*18); // Advised: x18
+ setunitdata($@FOS_MOB, UDT_FLEE, .@avg*4); // Advised: x5
+ setunitdata($@FOS_MOB, UDT_CRIT, 60+.@avg*4/3);
+ // Reconfigure the AI
+ .@opt=getunitdata($@FOS_MOB, UDT_MODE);
+ // Disable looting
+ if (.@opt & MD_LOOTER)
+ .@opt=.@opt^MD_LOOTER;
+ // Add knockback immunity
+ .@opt=.@opt|MD_NOKNOCKBACK;
+ // Mark as boss
+ .@opt=.@opt|MD_BOSS;
+ // Mark as aggressive
+ .@opt=.@opt|MD_AGGRESSIVE;
+ .@opt=.@opt|MD_ANGRY;
+ // Make it more op
+ .@opt=.@opt|MD_DETECTOR;
+ .@opt=.@opt|MD_CASTSENSOR_CHASE;
+ .@opt=.@opt|MD_CASTSENSOR_IDLE;
+ .@opt=.@opt|MD_CHANGECHASE;
+ .@opt=.@opt|MD_CHANGETARGET_MELEE;
+ .@opt=.@opt|MD_CHANGETARGET_CHASE;
+ setunitdata($@FOS_MOB, UDT_MODE, .@opt);
+ sleep(1000);
+ mapannounce("001-13-2", "##1##BON YOUR MARKS...", 0);
+ sleep(2000);
+ mapannounce("001-13-2", "##1##B3...", 0);
+ sleep(1000);
+ mapannounce("001-13-2", "##1##B2...", 0);
+ sleep(1000);
+ mapannounce("001-13-2", "##1##B1...", 0);
+ sleep(1000);
+ mapannounce("001-13-2", "##1##BBEGIN!!", 0);
+ .Support3=monster("001-13-2", 59, 36, "Magic Commander", Moubi, 1);
+ .Support4=monster("001-13-2", 44, 44, "Army Commander", BloodyMouboo, 1);
+ .Support5=monster("001-13-2", 37, 36, "Mouboo Governor", AlphaMouboo, 1);
+ setunitdata(.Support3, UDT_MAXHP, .@avg*300);
+ setunitdata(.Support3, UDT_HP, .@avg*300);
+ setunitdata(.Support4, UDT_MAXHP, .@avg*300);
+ setunitdata(.Support4, UDT_HP, .@avg*300);
+ setunitdata(.Support5, UDT_MAXHP, .@avg*300);
+ setunitdata(.Support5, UDT_HP, .@avg*300);
+ setunitdata(.Support3, UDT_RACE, RC_Legendary);
+ setunitdata(.Support4, UDT_RACE, RC_Legendary);
+ setunitdata(.Support5, UDT_RACE, RC_Legendary);
+ initnpctimer;
+ changemusic("001-13-2", "Arabesque.ogg");
+ end;
+
+////////////// Player's Victory //////////////
+OnEventEnd:
+ stopnpctimer;
+ killmonsterall("001-13-2");
+ changemusic("001-13-2", "Misty_Shrine.ogg");
+ mapannounce("001-13-2", "Moubootaur : ##1##BThis is not the place...", 0);
+ sleep(2000);
+ mapannounce("001-13-2", "Moubootaur : ##1##BMy powers are weak here...", 0);
+ sleep(2000);
+ mapannounce("001-13-2", "Moubootaur : ##1##BBut you won't foil my plans forever!", 0);
+ sleep(3000);
+ mapannounce("001-13-2", "Moubootaur : ##1##BI'll come back... Stronger than ever!", 0);
+ sleep(3000);
+ maptimer2("001-13-2", 10, "#FoSCore::OnMFSurvive");
+ $@EVENT_01 = PORTHOS_UNUSED;
+ end;
+
+
+////////////// Map Broadcast //////////////
+OnMFMark:
+ dispbottom col(l("On your marks..."), 1);
+ end;
+
+OnMFShake:
+ sshake();
+ closeclientdialog;
+ sleep2(1000);
+ sshake();
+ sshake();
+ closeclientdialog;
+ end;
+
+OnMFDispose:
+ if (ispcdead()) warp("033-1", 72, 191);
+ end;
+
+OnMFSurvive:
+ dispbottom l("Mission accomplished. Well played!");
+ // TODO: Mark as "done" on Mirror Lake Quest Tracker
+ specialeffect(FX_FANFARE, AREA, getcharid(3));
+ sleep2(15000);
+ warp("033-1", 72, 191);
+ end;
+
+////////////// Heartbeat //////////////
+OnTimer15000:
+ maptimer2("001-13-2", 10, "#FoSCore::OnMFDispose");
+ sleep(30);
+ if (getmapusers("001-13-2") < 1) goto L_Defeat;
+ // Main cycle
+ if ($@FIRESOFSTEAM_BOSS) {
+ // Handle Moubootaur Magic
+ // But only if .Support3 was defined (control variable)
+ if (!.Support3) {initnpctimer; end;}
+ // Spawn a fiend
+ .@m=monster("001-13-2", 47, 31, "Mouboo", Mouboo, 1);
+ setunitdata(.@m, UDT_RACE, RC_Legendary);
+ .@hp=getunitdata(.@m, UDT_MAXHP)*$@FIRESOFSTEAM_DIFF/80;
+ .@op=getunitdata(.@m, UDT_MODE);
+ .@op=.@op|MD_AGGRESSIVE;
+ setunitdata(.@m, UDT_MAXHP, .@hp);
+ setunitdata(.@m, UDT_HP, .@hp);
+ setunitdata(.@m, UDT_MODE, .@op);
+ // Select random magic from arsenal
+ .@r=rand2(16);
+ switch (.@r) {
+ case 1:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Bleeding", 0);
+ areasc2("001-13-2", 50, 40, 30, 15000, SC_BLOODING, BL_PC, 1);
+ break;
+ case 2:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Blind", 0);
+ areasc2("001-13-2", 50, 40, 30, 15000, SC_BLIND, BL_PC, 1);
+ break;
+ case 3:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Lag", 0);
+ areasc2("001-13-2", 50, 40, 30, 15000, SC_CONFUSION, BL_PC, 1);
+ break;
+ case 4:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Curse", 0);
+ areasc2("001-13-2", 50, 40, 30, 15000, SC_CURSE, BL_PC, 1);
+ break;
+ case 5:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Poison", 0);
+ areasc2("001-13-2", 50, 40, 30, 15000, SC_POISON, BL_PC, 1);
+ break;
+ case 6:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Sleep", 0);
+ areasc2("001-13-2", 50, 40, 30, 15000, SC_SLEEP, BL_PC, 1);
+ break;
+ case 7:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Deadly Poison", 0);
+ areasc2("001-13-2", 50, 40, 30, 15000, SC_DPOISON, BL_PC, 1);
+ break;
+ case 8:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Chilling", 0);
+ areasc2("001-13-2", 50, 40, 30, 15000, SC_COLD, BL_PC, 1);
+ break;
+ case 9:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Burning", 0);
+ areasc2("001-13-2", 50, 40, 30, 15000, SC_BURNING, BL_PC, 1);
+ break;
+ case 10:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Fear", 0);
+ areasc2("001-13-2", 50, 40, 30, 15000, SC_FEAR, BL_PC, 1);
+ break;
+ case 11:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Obliterate", 0);
+ rectharm($@FOS_MOB, 7, 7, rand2(700, 900), HARM_MISC, Ele_Holy, "filter_always", BL_PC | BL_MER | BL_HOM);
+ break;
+ case 12:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Disarm Homun", 0);
+ areasc2("001-13-2", 50, 40, 30, 15000, SC_STUN, BL_HOM, 1);
+ break;
+ case 13:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Exterminate Lesserform", 0);
+ rectharm($@FOS_MOB, 7, 7, rand2(800, 1400), HARM_MISC, Ele_Holy, "filter_always", BL_MER | BL_HOM);
+ break;
+ case 14:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Summon Reinforcement", 0);
+ for (.@i=0;.@i <= rand2(4);.@i++) {
+ .@m=monster("001-13-2", rand2(35,43), rand2(35,38), "Reinforcement",
+ any(AlphaMouboo, Moubi, BloodyMouboo, Moubi), 1);
+ setunitdata(.@m, UDT_RACE, RC_Legendary);
+ .@hp=getunitdata(.@m, UDT_MAXHP)*$@FIRESOFSTEAM_DIFF/60;
+ setunitdata(.@m, UDT_MAXHP, .@hp);
+ setunitdata(.@m, UDT_HP, .@hp);
+ }
+ break;
+ case 15:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Wizcat", 0);
+ for (.@i=0;.@i <= 2+rand2(7);.@i++) {
+ .@m=monster("001-13-2", rand2(35,43), rand2(35,38),
+ "Reinforcement", BlackCat, 1);
+ setunitdata(.@m, UDT_RACE, RC_Legendary);
+ .@hp=getunitdata(.@m, UDT_MAXHP)*$@FIRESOFSTEAM_DIFF/70;
+ setunitdata(.@m, UDT_MAXHP, .@hp);
+ setunitdata(.@m, UDT_HP, .@hp);
+ }
+ break;
+ case 16:
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Nuke", 0);
+ rectharm($@FOS_MOB, 14, 14, rand2(450, 750), HARM_MISC, Ele_Holy, "filter_always", BL_PC | BL_MER | BL_HOM);
+ break;
+ default: // case 0
+ mapannounce("001-13-2", "Moubootaur : ##BAncient Magic: Seal", 0);
+ areasc2("001-13-2", 50, 40, 30, 15000, SC_SILENCE, BL_PC, 1);
+ break;
+ }
+ sleep(rand2(45000)); // Wait a bit longer between magic (random)
+ }
+ initnpctimer;
+ end;
+
+////////////// Player's Defeat //////////////
+OnDefeat:
+L_Defeat:
+ $@FIRESOFSTEAM_BOSS=0;
+ $@FIRESOFSTEAM_DIFF=0;
+ $@FOS_ISB=0;
+ $@FOS_MOB=0;
+ $@FOS_AND=0;
+ .Support1=0;
+ .Support2=0;
+ .Support3=0;
+ .Support4=0;
+ .Support5=0;
+ killmonsterall("001-13-2");
+ kamibroadcast("The players were defeated at Fires of Steam Showdown.", "Fires of Steam");
+ $@EVENT_01 = PORTHOS_UNUSED;
+ stopnpctimer;
+ end;
+
+OnInit:
+ .boostime = 900000;
+ .subitime = 47000;
+ .distance = 5;
+ .sex = G_OTHER;
+ end;
+}
+
diff --git a/npc/scripts.conf b/npc/scripts.conf
index 71d2f60..b997c39 100644
--- a/npc/scripts.conf
+++ b/npc/scripts.conf
@@ -147,6 +147,7 @@
"npc/functions/instances.txt",
"npc/functions/captcha.txt",
"npc/functions/dungeon.txt",
+"npc/config/events.txt",
// Maps specific scripts
@include "npc/_import.txt"