diff options
Diffstat (limited to 'npc/001-2-32/serena.txt')
-rw-r--r-- | npc/001-2-32/serena.txt | 215 |
1 files changed, 0 insertions, 215 deletions
diff --git a/npc/001-2-32/serena.txt b/npc/001-2-32/serena.txt deleted file mode 100644 index d7d18a41..00000000 --- a/npc/001-2-32/serena.txt +++ /dev/null @@ -1,215 +0,0 @@ -// The Mana World scripts. -// Author: -// Reid -// Jesusalva -// Description: -// Artis's Legion of Aemil officier of the fighting room. -// Note: -// ATL - Artis Training Legion - -001-2-32,27,27,0 script Serena NPC_SERENA,{ - mesn; - mesq l("Oh darling, what brought you here?"); // TRANSLATORS: Darling - Expresses familiarity or elderliness in relation to PC. - next; - select - l("I wanna fight."), - l("Nothing."); - mes ""; - if (@menu == 1) { - mes l("Just walk right and talk to me. I'll be there in no time."); - mesc l("Challenge time limit: 60 minutes after entering the room."); - } - close; - -OnInit: - .distance = 3; - end; -} - -001-2-35,26,27,0 script Serena#Ctrl NPC_SERENA,{ - function checkVictory; - - // We can't begin if we're already doing it - if (.atlf) { - // TODO: We should check if the timers are running - //doevent(instance_npcname(.name$)+"::OnVerify"); - if (getq(Artis_Legion_Progress) == 4) - npctalk l("You're already done with the training, so feel free to leave."); - else - npctalk l("Focus on the fight!"); - end; - } - - // Enemies of the Legion of Aemil cannot train, obviously - if (faction_standing("LEGION", true) < 1) { - mesn; - mesq l("Sorry, but I can only train you if Lieutenant Lozerk authorizes."); - close; - } - - // Otherwise, begin it - mesn; - mesq l("Are you ready for your training?"); - next; - if (askyesno() == ASK_NO) { - mesn; - mesq l("Oh dear, please come back later then."); - close; - } - @ATLFIGHT=true; - // FALL THROUGH - -OnBegin: - mapannounce getmap(), l("Training Arena, %s, get ready!", strcharinfo(0)), bc_all; - // Save permanent data - .atl_blv=BaseLevel; - .atl_Str=readbattleparam(getcharid(3), UDT_STR); - .atl_Agi=readbattleparam(getcharid(3), UDT_AGI); - .atl_Vit=readbattleparam(getcharid(3), UDT_VIT); - .atl_Int=readbattleparam(getcharid(3), UDT_INT); - .atl_Dex=readbattleparam(getcharid(3), UDT_DEX); - .atl_Luk=readbattleparam(getcharid(3), UDT_LUK); - .atl_Dly=readbattleparam(getcharid(3), UDT_ADELAY); - .atl_Rng=readbattleparam(getcharid(3), UDT_ATKRANGE); - - // Save (b)ase data - .atl_bhp=MaxHp; - .atl_bAtk1=readbattleparam(getcharid(3), UDT_ATKMIN); - .atl_bAtk2=readbattleparam(getcharid(3), UDT_ATKMAX); - .atl_bMatk=readbattleparam(getcharid(3), UDT_MATKMAX); - .atl_bDef=readbattleparam(getcharid(3), UDT_DEF); - .atl_bMdef=readbattleparam(getcharid(3), UDT_MDEF); - .atl_bHit=readbattleparam(getcharid(3), UDT_FLEE)*8/10; - .atl_bFlee=readbattleparam(getcharid(3), UDT_HIT)*7/10; - .atl_bCrit=readbattleparam(getcharid(3), UDT_CRIT); - - // Save (p)rogression data - .atl_php=.atl_bhp/6; - .atl_pAtk1=.atl_bAtk1/12; - .atl_pAtk2=.atl_bAtk2/12; - .atl_pMatk=.atl_bMatk/5; - .atl_pDef=.atl_bDef/5; - .atl_pMdef=.atl_bMdef/5; - .atl_pHit=.atl_bFlee/10; - .atl_pFlee=.atl_bHit/15; - .atl_pCrit=.atl_bCrit/10; - - // Begin the battle - doevent(instance_npcname(.name$)+"::OnGladius"); - addtimer(5000, instance_npcname(.name$)+"::OnVerify"); - closeclientdialog; - close; - -OnGladius: - sleep(800); - // TODO: Coordinates, Helpers? - .@mg=monster(instance_mapname("001-2-35"), any(25, 30, 35), any(29, 35, 40, 46), "Gladiator", any(LegionSwordswoman, LegionHalberdier, LegionLieutenant, LegionLieutenant), 1, instance_npcname(.name$)+"::OnGladius"); - - // Set "permanent" data - setunitdata(.@mg, UDT_ADELAY, .atl_Dly-.atlf); - setunitdata(.@mg, UDT_ATKRANGE, .atl_Rng+cap_value(.atlf/10, 0, 3)); - - // Set base data - setunitdata(.@mg, UDT_LEVEL, .atl_blv+.atlf); - setunitdata(.@mg, UDT_STR, .atl_Str+.atlf); - setunitdata(.@mg, UDT_AGI, .atl_Agi+.atlf); - setunitdata(.@mg, UDT_VIT, .atl_Vit+.atlf); - setunitdata(.@mg, UDT_INT, .atl_Int+.atlf); - setunitdata(.@mg, UDT_DEX, .atl_Dex+.atlf); - setunitdata(.@mg, UDT_LUK, .atl_Luk+.atlf); - - // Set variable data - setunitdata(.@mg, UDT_MAXHP, .atl_bhp+.atl_php*(.atlf-1)); - setunitdata(.@mg, UDT_HP, .atl_bhp+.atl_php*(.atlf-1)); - - setunitdata(.@mg, UDT_ATKMIN, .atl_bAtk1+.atl_pAtk1*(.atlf-1)); - setunitdata(.@mg, UDT_ATKMAX, .atl_bAtk2+.atl_pAtk2*(.atlf-1)); - setunitdata(.@mg, UDT_MATKMIN, .atl_bMatk+.atl_pMatk*(.atlf-1)); - setunitdata(.@mg, UDT_MATKMAX, .atl_bMatk+.atl_pMatk*(.atlf-1)); - setunitdata(.@mg, UDT_DEF, .atl_bDef+.atl_pDef*(.atlf-1)); - setunitdata(.@mg, UDT_MDEF, .atl_Mdef+.atl_pMdef*(.atlf-1)); - setunitdata(.@mg, UDT_HIT, .atl_bHit+.atl_pHit*(.atlf-1)); - setunitdata(.@mg, UDT_FLEE, .atl_bFlee+.atl_pFlee*(.atlf-1)); - setunitdata(.@mg, UDT_CRIT, .atl_bCrit+.atl_pCrit*(.atlf-1)); - - setunitdata(.@mg, UDT_PDODGE, min(30, .atl_Luk/10+(.atlf/3))); - - .atlf+=1; - mapannounce instance_mapname("001-2-35"), ("Training Arena, wave " + .atlf + "!"), bc_all; - maptimer(instance_mapname("001-2-35"), 10, instance_npcname(.name$)+"::OnATLUpdate"); - end; - -OnATLUpdate: - if (.atlf > ATLRANK) - ATLRANK=.atlf; - getexp .atlf*7, .atlf*5; // Provide some reward - end; - -// Check for possible cheats, and update default values -OnVerify: - if (!.atlf) - end; - - if (readbattleparam(getcharid(3), UDT_ATKRANGE) > .atl_Rng) - .atl_Rng=readbattleparam(getcharid(3), UDT_ATKRANGE); - - if (readbattleparam(getcharid(3), UDT_ATKMAX) > .atl_bAtk1) { - .atl_bAtk1=readbattleparam(getcharid(3), UDT_ATKMIN); - .atl_bAtk2=readbattleparam(getcharid(3), UDT_ATKMAX); - .atl_pAtk1=.atl_bAtk1/10; - .atl_pAtk2=.atl_bAtk2/10; - } - - if (readbattleparam(getcharid(3), UDT_DEF) > .atl_bDef) { - .atl_bDef=readbattleparam(getcharid(3), UDT_DEF); - .atl_pDef=.atl_bDef/5; - } - - if (readbattleparam(getcharid(3), UDT_MDEF) > .atl_bMdef) { - .atl_bMdef=readbattleparam(getcharid(3), UDT_MDEF); - .atl_pMdef=.atl_bMdef/5; - } - - if (readbattleparam(getcharid(3), UDT_MATKMAX) > .atl_bMatk) { - .atl_bMatk=readbattleparam(getcharid(3), UDT_MATKMAX); - .atl_pMatk=.atl_bMatk/5; - } - - // TODO: Ignore haste potion effects - // TODO: Update battle statuses on the fly - if (readbattleparam(getcharid(3), UDT_ADELAY) < .atl_bDly) - .atl_bDly=readbattleparam(getcharid(3), UDT_DELAY); - - // Victory conditions - if (getq(Artis_Legion_Progress) == 3) - checkVictory(); - - addtimer(5000, instance_npcname(.name$)+"::OnVerify"); - end; - - // Victory conditions - function checkVictory { - if (.atlf > 3) { - npctalk l("Congratulations, %s. I think this is enough. You can continue fighting to set a good score or report to Lozerk.", strcharinfo(0)); - // Duplicate the dialog in case player miss it - dispbottom l("Congratulations, %s. I think this is enough. You can continue fighting to set a good score or report to Lozerk.", strcharinfo(0)); - setq Artis_Legion_Progress, 4, 0; - } - return; - } - -} - -// Helper function for failure -function script ATLFightEnd { - if (@ATLFIGHT) { - @ATLFIGHT=false; - .@mapn$="atl2@"+getcharid(0); - killmonster(.@mapn$, "all", false); - .@q2=getq2(Artis_Legion_Progress); - set(getvariableofnpc(.atlf, instance_npcname("Serena#Ctrl", .@q2)), 0); - } - return; -} - - |