// RCharles - Last Man Standing - Fixed!
prontera,143,170,4 script LMS 67,{
if (!.gm) goto OnInit;
mes .n1$;
mes "Hello there " + strcharinfo(0) + ", welcome to the Last Man Standing event, how can i help you?";
mes " ";
mes "> Registration: " + (.LMS_Reg?"^00CC00Open":"^ff0000Closed") + "^000000";
mes "> Status: " + ((.LMS_Eve==1)?"^00CC00Starting...":(.LMS_Eve==2)?"^FF0000In Progress":"^FF0000Inactive")+"^000000.";
next;
set .@Menu$, "- Join LMS:- Redeem Reward:" + (getgmlevel() >= .gml?"- " + (.LMS_Eve?"Stop":"Start") +" Event ^0000ff[GM]^000000":"") + ":- Exit";
switch (select(.@Menu$)) {
case 1:
mes .n1$;
if (!.LMS_Reg) {
mes "I'm Sorry " + strcharinfo(0) + " but the registration isn't opened yet";
close;
}
mes "Are you sure in joining Last Man Standing Event?";
next;
if (select("- Yes! I would like to participate!","- Wrong move, EXIT") - 1) {
mes .n1$;
mes "See you again, when you are ready.";
close;
}
mes .n1$;
mes "That's the spirit!!!";
mes "I will warp you know to the map where the event will be hold.";
close2;
if (.limit && .p_ct >= .limit) {
message strcharinfo(0), "Oh no, the event room for LMS reach the limit of participants!";
end;
}
if (!.LMS_Reg) {
message strcharinfo(0), "I'm sorry, the registration was closed, be faster the next time!";
end;
}
if (.LMS_Eve > 1) {
message strcharinfo(0), "I'm sorry, the event is in progress right now, be faster the next time!";
end;
}
set .p_ct,.p_ct + 1;
set @lms,.LMS_ID;
warp .map$,0,0;
if (.intra) sc_start SC_Intravision,.dur,1;
end;
case 2:
mes .n1$;
if (!@lms || @lms != .LMS_ID) {
mes "I'm sorry, but you are not qualified to recieve an reward.";
close;
}
mes "Congratulation in surviving Last Man Standing, here is your reward.";
set @lms,0;
getitem .rew_id,.rew_am;
break;
case 3:
mes .n1$;
mes "Do you really want to "+( (!.LMS_Eve)?"^00CC00Start":"^FF0000Stop")+"^000000 the event?";
next;
if (select("- Yes:- No") == 2) close;
mes .n1$;
mes "Please close this window to proceed!";
close2;
if (.LMS_Eve) {
set .LMS_ID,0;
goto OnDisable;
} else {
set .LMS_ID, rand(100000,999999);
set .time_ch,0;
goto OnTimer10000;
}
}
close;
OnTimer10000: // Every 10 seconds
stopnpctimer;
set .time_ch,.time_ch + 1;
if (.time_ch == 1) {
set .LMS_Eve,1; // Event starting
announce .n2$+": The event, Last Man Standing, will be started shortly.",bc_all;
if (getmapusers(.map$) > 0) mapannounce .map$,.n2$+": You all will be warped in 10 seconds back to Prontera, since this map will be used for an event, Last Man Standing.",bc_map;
} else if (.time_ch == 3) {
mapwarp .map$,"prontera.gat",150,180;
announce .n2$+": The registration is now open for 2 minutes... hurry!!!",bc_all;
// Avoid fights before start the event
removemapflag .map$,mf_pvp;
set .LMS_Reg,1; // Registration enabled
} else if (.time_ch == 4) {
announce .n2$+": We are accepting " + (.limit?.limit:"unlimited") + " participants.",bc_all;
} else if (.time_ch == 9) {
announce .n2$+": The registration will be closed in 1 minute...",bc_all;
} else if (.time_ch == 12) {
announce .n2$+": The registration process finish in 30 seconds... hurry!!!",bc_all;
} else if (.time_ch == 15) {
set .LMS_Reg,0;
if (.p_ct < 2 || getmapusers(.map$) < 2) {
announce .n2$+": The process was canceled because there are not enough players.",bc_all;
set .LMS_ID,0;
goto OnDisable;
} else {
announce .n2$+": Registration has been closed!",bc_all;
}
} else if (.time_ch == 16) {
announce .n2$+": We have " + .p_ct + " registered fighters!!!",bc_all;
setmapflag .map$,mf_nowarpto;
setmapflag .map$,mf_nowarp;
setmapflag .map$,mf_nosave;
setmapflag .map$,mf_nomemo;
setmapflag .map$,mf_nomemo;
setmapflag .map$,mf_partylock;
setmapflag .map$,mf_pvp_noparty;
set .LMS_Eve,2; // Event started
} else if (.time_ch > 16) {
set .@BaseTime, .time_ch - 17;
set .@MinutesElapsed, .@BaseTime / 6 + 1;
if (getmapusers(.map$) == 0) {
announce .n2$+": It seems like that all users have left the event map therefore I won't be able to declare the winner!!!",bc_all;
goto OnDisable;
} else if (getmapusers(.map$) == 1) {
announce .n$+": The winner of the Last Man Standing event is "+ rid2name(killerrid)+".",bc_all;
goto OnDisable;
} else if (.@BaseTime % 6 == 0) {
if (.@BaseTime) {
mapannounce .map$, .n2$ + ": " + .@MinutesElapsed + " Minutes has passed!!!",bc_all;
} else {
mapannounce .map$, .n2$ + ": FIGHT!",bc_all;
// Ensure a random start position
mapwarp .map$, .map$, 0, 0;
// Set the PVP flag here to be sure that the players don't fight before the event start
setmapflag .map$,mf_pvp;
}
} else if (.@MinutesElapsed >= .dur) {
mapannounce .map$,.n2$+": "+.dur+" Minutes has passed, I will now end the event!!!",bc_all;
goto OnDisable;
}
}
initnpctimer;
end;
OnDisable:
stopnpctimer;
if (!.LMS_Eve) end; // No need to continue if the event hasn't even started
set .LMS_Eve,0;
removemapflag .map$,mf_nowarpto;
removemapflag .map$,mf_nowarp;
removemapflag .map$,mf_nomemo;
removemapflag .map$,mf_nomemo;
removemapflag .map$,mf_pvp;
removemapflag .map$,mf_partylock;
removemapflag .map$,mf_pvp_noparty;
set .p_ct,0; // Reseting Player Counter
announce .n2$ + ": The event, Last Man Standing, has ended!!!",bc_all;
mapannounce .map$,.n2$+": You all will be warped in 10 seconds back to prontera.",bc_all;
sleep 10000;
mapwarp .map$,"prontera.gat",150,180;
end;
OnPCDieEvent:
set @lms,0;
if (.LMS_Eve < 2) end;
if (strcharinfo(3) != .map$) end;
if (killerrid != getcharid(3)) dispbottom .n$+": You have been killed by "+rid2name(killerrid)+"!!";
warp "prontera",150,180;
if (getmapusers(.map$) == 2) {
mapannounce .map$,.n$+": Wuhu!! Only 2 players remain, let's see who is the better player!!", bc_all;
} else if (getmapusers(.map$) == 1) {
announce .n$+": The winner of the Last Man Standing event is "+ rid2name(killerrid)+".",bc_all;
goto OnDisable;
} else if (getmapusers(.map$) == 0) {
goto OnDisable;
}
end;
OnPCLogoutEvent:
if (.LMS_Eve < 2) end;
if (strcharinfo(3) != .map$) end;
end;
OnInit:
set .n1$,"[^0000ff"+strnpcinfo(1)+"^000000]";
set .n2$,"["+strnpcinfo(1)+"]";
set .gm,60; // GM Access
set .dur,5;
// Intravision (Maya Purple Card Effect - Able to see hidden player)
// This effect is to prevent players to cheat by using "Cloaking" and similiar skills
// 0 = Off
// 1 = On
set .intra,1;
set .rew_am,1; // Reward Amount
set .rew_id,607; // Item ID
// Player Limit:
// 0 == Unlimited
set .limit,30;
// Map on which LMS will be executed
set .map$,"guild_vs4";
end;
}