summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2023-10-01 19:33:45 -0300
committerJesusaves <cpntb1@ymail.com>2023-10-01 19:33:45 -0300
commit01dadc7c6e14b1b6df28574c7237c1ceb38432b2 (patch)
treeef1d83c9bf9971a5dda73ff96aa9c9c6917c0b85
parentc41a42a5d2b13e12796dd43d978e784af75e402c (diff)
downloadserverdata-01dadc7c6e14b1b6df28574c7237c1ceb38432b2.tar.gz
serverdata-01dadc7c6e14b1b6df28574c7237c1ceb38432b2.tar.bz2
serverdata-01dadc7c6e14b1b6df28574c7237c1ceb38432b2.tar.xz
serverdata-01dadc7c6e14b1b6df28574c7237c1ceb38432b2.zip
Finish Kamelot Raid - supply Terogan an array of skills, fix broken stuff
Minor reward tweaks, and more dark petal drops (whose sell value is now zero) The sigils spawns are now much stronger depending on difficulty setting.
-rw-r--r--db/re/item_db.conf4
-rw-r--r--npc/042-0/arthur.txt4
-rw-r--r--npc/042-10/ctrl.txt28
-rw-r--r--npc/042-11/boss.txt97
-rw-r--r--npc/042-4/ctrl.txt2
5 files changed, 125 insertions, 10 deletions
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index e90e3fd93..3c2bb18f7 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -3947,8 +3947,8 @@ item_db: (
Name: "Dark Petal"
Type: "IT_ETC"
Buy: 50
- Sell: 10
- Weight: 10
+ Sell: 0
+ Weight: 2
Refine: false
},
{
diff --git a/npc/042-0/arthur.txt b/npc/042-0/arthur.txt
index fc7565fea..da0262211 100644
--- a/npc/042-0/arthur.txt
+++ b/npc/042-0/arthur.txt
@@ -166,9 +166,9 @@ L_Reward:
goto L_DoReward2;
$KAMELOT_QUEST[.@g]=$KAMELOT_QUEST[.@g]|128;
getitem GuildCoin, .@cn;
- guildgetexp(.@cn*1000);
// TODO: Make this a decent reward
getitembound any(SilverRing, GoldenRing), 1, 2;
+ guildgetexp(.@cn*2000);
goto L_DoReward2;
//////////////////////////////////////////////////////////////////////////
@@ -234,9 +234,9 @@ L_DoReward2:
// Your reward
.@cn+=1;
getitem GuildCoin, .@cn;
- guildgetexp(.@cn*300);
getexp BaseLevel*10, .@cn*35;
Zeny+=.@cn*1000;
+ guildgetexp(.@cn*350);
close;
OnKillMob:
diff --git a/npc/042-10/ctrl.txt b/npc/042-10/ctrl.txt
index 9fccee6dc..864b43661 100644
--- a/npc/042-10/ctrl.txt
+++ b/npc/042-10/ctrl.txt
@@ -210,7 +210,21 @@ function script KatazuliCore {
KamelotCaveSpawn($KAMELOT_PC[.@g], .@x-rand2(4), .@y-rand2(4), .@x+rand2(4), .@y+rand2(4), $KAMELOT_MX[.@g]+(.@power/3), "042-10");
.@x+=any(-3,-2,-1,1,2,3);
.@y+=any(-3,-2,-1,1,2,3);
- monster(.@m$, .@x, .@y, strmobinfo(1, MagicGoblin), MagicGoblin, (@kataspam == 1 ? 6 : (@kataspam == 2 ? 5 : (@kataspam == 3 ? 4 : 3))) );
+ /* Determine the random artillery monster to be summoned */
+ if ($KAMELOT_MX[.@g] >= 200)
+ .@mid = any(Jhon, GreatMoubooSlime, DustBoss, DustRevolver, DustRifle, DustGatling, RobinBandit);
+ else if ($KAMELOT_MX[.@g] >= 150)
+ .@mid = any(GreatMoubooSlime, DustBoss, DustRevolver, DustRifle, DustGatling, RobinBandit);
+ else if ($KAMELOT_MX[.@g] >= 120)
+ .@mid = any(DustBoss, DustRevolver, DustRifle, DustGatling, RobinBandit);
+ else if ($KAMELOT_MX[.@g] >= 100)
+ .@mid = any(DustRevolver, DustRifle, DustGatling, RobinBandit, MagicGoblin);
+ else if ($KAMELOT_MX[.@g] >= 50)
+ .@mid = any(RobinBandit, MagicGoblin);
+ else
+ .@mid = MagicGoblin;
+ // These do not seem to drop petals?
+ monster(.@m$, .@x, .@y, strmobinfo(1, .@mid), .@mid, (@kataspam == 1 ? 5 : (@kataspam == 2 ? 4 : (@kataspam == 3 ? 3 : 2))) );
// Take away some HP and MP, but do not make you stand
percentheal -1, -5;
@@ -293,10 +307,12 @@ OnKillMob:
// Handle Dark Petal
// XXX: How MX/PC should affect drop rates?
// I imagine a higher MX will increase DR.... (Right now, level 100 = +50% DR)
+ // Meanwhile, more players or difficulty (PC) will increase Nº of petals
.@r=rand2(250);
if (.@r < 100+$KAMELOT_MX[.@g]) {
getmapxy(.@m$, .@x, .@y, 0);
- makeitem(DarkPetal, 1, .@m$, rand2(.@x-1, .@x+1), rand2(.@y-1, .@y+1));
+ .@am = rand2(1, 1+min(7, $KAMELOT_PC[.@g]));
+ makeitem(DarkPetal, .@am, .@m$, rand2(.@x-1, .@x+1), rand2(.@y-1, .@y+1));
}
// Maybe a reward is due
@@ -376,10 +392,12 @@ OnKillMob:
// Handle Dark Petal
// XXX: How MX/PC should affect drop rates?
// I imagine a higher MX will increase DR.... (Right now, level 100 = +20% DR)
+ // Meanwhile, more players or difficulty (PC) will increase Nº of petals
.@r=rand2(500);
if (.@r < 100+$KAMELOT_MX[.@g]) {
getmapxy(.@m$, .@x, .@y, 0);
- makeitem(DarkPetal, 1, .@m$, rand2(.@x-1, .@x+1), rand2(.@y-1, .@y+1));
+ .@am = rand2(1, 1+min(7, $KAMELOT_PC[.@g]));
+ makeitem(DarkPetal, .@am, .@m$, rand2(.@x-1, .@x+1), rand2(.@y-1, .@y+1));
}
// Maybe a reward is due
@@ -587,10 +605,12 @@ OnKillMob:
// Handle Dark Petal
// XXX: How MX/PC should affect drop rates?
// I imagine a higher MX will increase DR.... (Right now, level 100 = +20% DR)
+ // Meanwhile, more players or difficulty (PC) will increase Nº of petals
.@r=rand2(500);
if (.@r < 100+$KAMELOT_MX[.@g]) {
getmapxy(.@m$, .@x, .@y, 0);
- makeitem(DarkPetal, 1, .@m$, rand2(.@x-1, .@x+1), rand2(.@y-1, .@y+1));
+ .@am = rand2(1, 1+min(7, $KAMELOT_PC[.@g]));
+ makeitem(DarkPetal, .@am, .@m$, rand2(.@x-1, .@x+1), rand2(.@y-1, .@y+1));
}
// Maybe a reward is due
diff --git a/npc/042-11/boss.txt b/npc/042-11/boss.txt
index 5cc3b6578..18c6e8515 100644
--- a/npc/042-11/boss.txt
+++ b/npc/042-11/boss.txt
@@ -135,7 +135,102 @@ OnTimer5000:
KamelotCaveSpawn(.@gcount*max(1, .@hplos), 20, 20, 57, 40, .@avg, "042-11");
}
- // TODO: Special skills
+ // Special skills (seldomly, but entirely randomly, triggered)
+ if (rand2(10000) < ($KAMELOT_MX[.@g] + $KAMELOT_PC[.@g] + getguildlvl(.@g))) {
+ // Taken from Aurora Boss Raid and Blanc
+ .@skill = rand2(10);
+ getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, .@mob);
+ .@c=getunits(BL_PC, .@pcs, MAX_CYCLE_PC, .@m$);
+ .@mvp=0;.@rnd=0;.@def=-1;
+ for (.@i = 0; .@i < .@c; .@i++) {
+ if (!.@rnd || !rand2(.@c))
+ .@rnd=.@pcs[.@i];
+ if (readbattleparam(.@pcs[.@i], UDT_DEF) > .@def) {
+ if (readparam(Hp, .@pcs[.@i]) < 1) continue;
+ .@mvp=.@pcs[.@i];
+ .@def=readbattleparam(.@pcs[.@i], UDT_DEF);
+ }
+ }
+ .@lv = $KAMELOT_MX[.@g];
+ // Execute the skill
+ switch (.@skill) {
+ case 1:
+ .@msg$ = l("Witness my sublime rain of death. Regeneration!");
+ .@hp=getunitdata(@mb, UDT_HP);
+ .@mp=getunitdata(@mb, UDT_MAXHP);
+ setunitdata(@mb, UDT_HP, min(.@mp, .@hp+(.@lv * 50)));
+ .@mobid=(rand2(.@lv) > 50 ? DeathCat : GreenSlime);
+ monster(.@m$, .@x, .@y, strmobinfo(1, .@mobid), .@mobid, 1);
+ break;
+ case 2:
+ .@msg$ = l("Chaos shall be the founding stone of my town! Falling star!");
+ percentheal -5, -10;
+ .@mobid=(rand2(.@lv) > 50 ? BlackScorpion : RedSlime);
+ monster(.@m$, .@x, .@y, strmobinfo(1, .@mobid), .@mobid, 1);
+ break;
+ case 3:
+ .@msg$ = l("I, the rightful ruler, demand back this world! Tyranny!");
+ percentheal -1, -1;
+ SC_Bonus(.@t, any(SC_BLIND, SC_POISON), 1);
+ .@mobid=(rand2(.@lv) > 50 ? DarkLizard : Assassin);
+ monster(.@m$, .@x, .@y, strmobinfo(1, .@mobid), .@mobid, 1);
+ break;
+ case 4:
+ .@msg$ = l("Stop on your tracks, unfair being! Freeze!");
+ SC_Bonus((.@t / 2), any(SC_FREEZE, SC_SLEEP, SC_SLEEP, SC_SLEEP), 1);
+ .@mobid=(rand2(.@lv) > 50 ? BlueSlime : WhiteSlime);
+ monster(.@m$, .@x, .@y, strmobinfo(1, .@mobid), .@mobid, 1);
+ break;
+ case 5:
+ .@msg$ = l("There is no free speech. Censorship!");
+ SC_Bonus(.@t, SC_SILENCE, 1);
+ .@mobid=(rand2(.@lv) > 50 ? Thug : RedMushroom);
+ monster(.@m$, .@x, .@y, strmobinfo(1, .@mobid), .@mobid, 1);
+ break;
+ case 6:
+ .@msg$ = l("And then... There was a quake. And all life died. Bleed!");
+ SC_Bonus(.@t, SC_BLOODING, 1);
+ .@mobid=(rand2(.@lv) > 50 ? BlackSlime : OldSnake);
+ monster(.@m$, .@x, .@y, strmobinfo(1, .@mobid), .@mobid, 1);
+ break;
+ case 7:
+ .@msg$ = l("Puny mortal, do your best to entertain me! Curse!");
+ SC_Bonus(.@t, SC_CURSE, 1);
+ .@mobid=(rand2(.@lv) > 50 ? FireSkull : Skeleton);
+ monster(.@m$, .@x, .@y, strmobinfo(1, .@mobid), .@mobid, 1);
+ break;
+ case 8:
+ .@msg$ = l("The problem with typos is - unpredictable side effects.");
+ SC_Bonus(.@t, any(SC_SILENCE, SC_CURSE, SC_FREEZE, SC_BLOODING, SC_BLIND, SC_POISON, SC_DPOISON, SC_POISON, SC_BURNING, SC_SLEEP), 1);
+ .@mobid=(rand2(.@lv) > 50 ? Swashbuckler : Bluepar);
+ monster(.@m$, .@x, .@y, strmobinfo(1, .@mobid), .@mobid, 1);
+ break;
+ case 9:
+ // Second Attack Pattern: Holy Light (vs Tank)
+ unittalk(.@mob, sprintf("%s, I'll show you no mercy! ##BThunder Bolt##b!", strcharinfo(0, "cursed player", .@mvp)));
+ .@PW=125; .@SPW=25; .@RG=1;
+ .@mtk = calcdmg(.@mob, .@mvp, HARM_MAGI);
+ .@dmg = .@mtk * .@PW / 100;
+ .@dsb = .@mtk * .@SPW / 100;
+ sleep(1000);
+ specialeffect(FX_LIGHTNING, AREA, .@mvp);
+ areaharm(.@mvp, .@RG, .@dsb, HARM_MAGI, Ele_Wind, "filter_always", BL_PC|BL_MER|BL_HOM);
+ harm(.@mvp, .@dmg, HARM_MAGI, Ele_Holy);
+ break;
+ default:
+ // First Attack Pattern: Napalm Beat (vs Random)
+ unittalk(.blanc, sprintf("This battle is over, %s! ##BThunder Neddle##b!", strcharinfo(0, "cursed player", .@rnd)));
+ .@PW=35; .@SPW=5; .@RG=2;
+ .@mtk = calcdmg(.@mob, .@rnd, HARM_MAGI);
+ .@dmg = .@mtk * .@PW / 100;
+ .@dsb = .@mtk * .@SPW / 100;
+ sleep(1000);
+ specialeffect(FX_LIGHTNING, AREA, .@rnd);
+ areaharm(.@rnd, .@RG, .@dsb, HARM_MAGI, Ele_Wind, "filter_always", BL_PC|BL_MER|BL_HOM);
+ harm(.@rnd, .@dmg, HARM_MAGI, Ele_Holy);
+ break;
+ }
+ }
// Always update the ratio - Terogan could have been healed
setd("$@GTEMP_HP_"+.@m$, .@ratio);
diff --git a/npc/042-4/ctrl.txt b/npc/042-4/ctrl.txt
index 4bea94407..a70deb9d3 100644
--- a/npc/042-4/ctrl.txt
+++ b/npc/042-4/ctrl.txt
@@ -12,7 +12,7 @@
// awesome system. Same rules as any treasure box still applies.
042-4,94,47,0 script #chest_0424 NPC_CHEST,{
function monster0424;
- TreasureBox();
+ TreasureBox(60); // 0.60% better chance
specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid()); // closed ? opening : closing
close;