// TMW2 Scripts
// Author:
// 4144
// Jesusalva
// Description:
// Arena for Duels and PVP (temporary map)
003-13,29,29,0 script Arnea#003-13 NPC_ELF_F,{
/*
// FIXME
warp "003-10", 22, 62;
close;
*/
if (is_staff()) {
mes "npc name: " + .name$;
mes "npc ext name: " + .extname$;
mes "npc id: " + .id;
mes "npc parent id: " + .parent;
mes "npc src id: " + .srcId;
mes "char id 3: " + getcharid(3);
mes "instance id: " + instance_id();
mes "Map ID: " + instance_mapname("003-13");
}
if (instance_id() >= 0) {
goto L_Manage;
} else {
// Non staff and on 003-13? That's a bug!
if (!is_staff()) {
atcommand "@request Hey hey hey, player found in 003-13 - regular map! Report this to Jesusalva at once!";
warp "Save", 0, 0;
close;
}
mes "npc not in instance";
}
close;
L_Manage:
mesn;
select
l("warp back"),
rif(!'UDTf, l("begin UDT Challenge")),
l("UDT Challenge Ranking"),
l("cancel");
switch (@menu)
{
case 1:
warp "003-10", 22, 62;
break;
case 2:
mesc l("spawn challenge monster! How far can you go?"), 2;
mesc l("The UDT Challenge will create a Gladiator Monster which should somehow emulate a PvP experience.");
mesc l("Defeating it will advance the round. How far can you survive?");
next;
mesc l("Really begin the UDT Challenge?");
if (askyesno() == ASK_NO)
break;
npctalk l("UDT Challenge, @@ began the fight!", strcharinfo(0));
// Save data
'udt_blv=BaseLevel;
'udt_bhp=MaxHp;
'udt_Str=readparam2(bStr);
'udt_Agi=readparam2(bAgi);
'udt_Vit=readparam2(bVit);
'udt_Int=readparam2(bInt);
'udt_Dex=readparam2(bDex);
'udt_Luk=readparam2(bLuk);
// Begin the fight
doevent instance_npcname(.name$)+"::OnGladius";
closeclientdialog;
break;
case 3:
mesc l("All leaderboards are refreshed hourly."), 1;
mesc l("Your current score: @@", UDTRANK), 3;
HallOfUDT();
break;
case 4:
break;
}
close;
OnGladius:
sleep(800);
.@mg=monster(instance_mapname("003-13"), 38, 32, "Gladiator", TestingMob, 1, instance_npcname(.name$)+"::OnGladius");
setunitdata(.@mg, UDT_LEVEL, 'udt_blv+'UDTf);
setunitdata(.@mg, UDT_MAXHP, 'udt_bhp+('UDTf*45));
setunitdata(.@mg, UDT_HP, 'udt_bhp+('UDTf*45));
setunitdata(.@mg, UDT_STR, 'udt_Str+('UDTf*rand(1,3)));
setunitdata(.@mg, UDT_AGI, 'udt_Agi+('UDTf*rand(1,3)));
setunitdata(.@mg, UDT_VIT, 'udt_Vit+('UDTf*rand(1,3)));
setunitdata(.@mg, UDT_INT, 'udt_Int+('UDTf*rand(1,3)));
setunitdata(.@mg, UDT_DEX, 'udt_Dex+('UDTf*rand(1,3)));
setunitdata(.@mg, UDT_LUK, 'udt_Luk+('UDTf*rand(1,3)));
// Now, I don't have this info from player, so...
// We must generate it
.@str=getunitdata(.@mg, UDT_STR);
.@agi=getunitdata(.@mg, UDT_AGI);
.@vit=getunitdata(.@mg, UDT_VIT);
.@int=getunitdata(.@mg, UDT_INT);
.@dex=getunitdata(.@mg, UDT_DEX);
.@luk=getunitdata(.@mg, UDT_LUK);
.@blv=getunitdata(.@mg, UDT_LEVEL);
// And then fill it
setunitdata(.@mg, UDT_ATKRANGE, any(1,1,1,2));
setunitdata(.@mg, UDT_ATKMIN, .@blv+(.@str*2)+('UDTf*4));
setunitdata(.@mg, UDT_ATKMAX, .@blv+(.@str*2)+.@luk+('UDTf*6));
setunitdata(.@mg, UDT_DEF, .@blv+.@vit+('UDTf*2));
setunitdata(.@mg, UDT_MDEF, .@blv+.@int+('UDTf*2));
setunitdata(.@mg, UDT_HIT, (.@blv*2)+.@dex+('UDTf*4));
setunitdata(.@mg, UDT_FLEE, .@blv+.@agi+('UDTf*2));
setunitdata(.@mg, UDT_PDODGE, min(30, .@luk/10+('UDTf/3)));
setunitdata(.@mg, UDT_CRIT, (.@blv/2)+.@luk+('UDTf*2));
'UDTf+=1;
npctalk ("UDT Challenge, wave " + 'UDTf + "!");
if ('UDTf > UDTRANK)
UDTRANK='UDTf;
end;
OnInit:
.@npcId = getnpcid(.name$);
setunitdata(.@npcId, UDT_HEADTOP, Darkelm);
setunitdata(.@npcId, UDT_HEADMIDDLE, CopperArmor);
setunitdata(.@npcId, UDT_HEADBOTTOM, JeansChaps);
setunitdata(.@npcId, UDT_WEAPON, RockKnife);
setunitdata(.@npcId, UDT_HAIRSTYLE, 14);
setunitdata(.@npcId, UDT_HAIRCOLOR, 18);
.sex = G_FEMALE;
.distance = 9;
end;
OnInstanceInit:
.@npcId = getnpcid(instance_npcname(.name$));
setunitdata(.@npcId, UDT_HEADTOP, Darkelm);
setunitdata(.@npcId, UDT_HEADMIDDLE, CopperArmor);
setunitdata(.@npcId, UDT_HEADBOTTOM, JeansChaps);
setunitdata(.@npcId, UDT_WEAPON, RockKnife);
setunitdata(.@npcId, UDT_HAIRSTYLE, 14);
setunitdata(.@npcId, UDT_HAIRCOLOR, 18);
end;
}