//===== eAthena Script =======================================
//= Euphy's WOE Controller
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.3a - eAthena
//===== Description: =========================================
//= A controller for War of Emperium designed for
//= simplicity and ease of use.
//= Many concepts taken from ToastOfDoom's script,
//= and "rewards" function originally by Goddameit.
//===== Additional Comments: =================================
//= Be sure to disable the default agit controllers!
//== npc\guild\agit_controller.txt
//== npc\guild2\agit_start_se.txt
//============================================================
prontera,158,193,4 script WOE Information 835,{ doevent "WOE_CONTROL::OnMenu"; end; OnAgitStart: while(agitcheck()) { } }
- script WOE_CONTROL -1,{
function Disp_Owner; function Add_Zero;
OnInit:
// --------------------------------------------------------------------------------------------------------------------------
set .CastleWarp,0; // 1: Always enable all castle warps. | 0: Warp only to active castles.
set .AutoKick,1; // Automatically kick players from inactive castles during WOE? (1:yes / 0:no)
set .ExitWarp,0; // Warp all players from castles when WOE ends? (1:yes / 0:no)
set .GMAccess,99; // GM level required to access Session Manager (cannot be 0)
setarray .Reward[0],12035,0; // Reward for all members of conquering guilds, per castle: <ID>,<Count>{,...} (0 to disable)
// --------------------------------------------------------------------------------------------------------------------------
set .Size, getarraysize($WOE_CONTROL);
setarray .Castles$[0],
"prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05",
"payg_cas01","payg_cas02","payg_cas03","payg_cas04","payg_cas05",
"gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05",
"aldeg_cas01","aldeg_cas02","aldeg_cas03","aldeg_cas04","aldeg_cas05",
"arug_cas01","arug_cas02","arug_cas03","arug_cas04","arug_cas05",
"schg_cas01","schg_cas02","schg_cas03","schg_cas04","schg_cas05";
setarray .EndLabel$[0],"aru01","aru02","aru03","aru04","aru05","sch01","sch02","sch03","sch04","sch05";
setarray .Days$[0],"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday";
setarray .Regions$[0],"Prontera","Payon","Geffen","Aldebaran","Arunafeltz","Schwaltzvalt";
setarray .Map$[0],"prt_gld","pay_gld","gef_fild13","alde_gld","aru_gld","sch_gld";
setarray .MapX[0],134,240,153,111,208,121,295,317,140,204,214,308,143,193,305,48, 95,142,239,264,158,83, 68,299,292,293,288, 97,137, 71;
setarray .MapY[0], 65,128,137,240,240,233,116,293,160,266, 75,240,240,278, 87,83,249, 85,242, 90,272,47,155,345,107,100,252,196, 90,315;
if (!agitcheck() && !agitcheck2()) sleep 4000;
set .Init,1;
OnMinute00:
if (agitcheck() || agitcheck2()) {
for(set
[email protected],0;
[email protected]<.Size; set
[email protected],
[email protected]+4)
if (gettime(4)==$WOE_CONTROL[
[email protected]] && gettime(3)==$WOE_CONTROL[
[email protected]+2]) {
OnWOEEnd:
announce "The War Of Emperium is over!",bc_all|bc_woe;
AgitEnd; AgitEnd2;
sleep 1000;
for(set
[email protected],0;
[email protected]<30; set
[email protected],
[email protected]+1) {
if (.Active[0]&(1<<
[email protected])) Disp_Owner(.Castles$[
[email protected]],1);
else if (.AutoKick) removemapflag .Castles$[
[email protected]], mf_loadevent;
if (.ExitWarp) maprespawnguildid .Castles$[
[email protected]],0,3; }
if (.Reward[0] && .Active[0] && .ForceEnd != 2) callsub OnReward, .Active[0];
deletearray .Active[0],2;
if (.ForceEnd) { set .ForceEnd,0; end; }
break; } }
sleep 5;
if ((!agitcheck() && !agitcheck2()) || .Init) {
if (!agitcheck() && !agitcheck2()) set .Init,0;
for(set
[email protected],0;
[email protected]<.Size; set
[email protected],
[email protected]+4)
if (gettime(4)==$WOE_CONTROL[
[email protected]] && gettime(3)>=$WOE_CONTROL[
[email protected]+1] && gettime(3)<$WOE_CONTROL[
[email protected]+2]) {
deletearray .Active[0],2;
set .Active[0], $WOE_CONTROL[
[email protected]+3];
if (.Init) { AgitEnd; AgitEnd2; }
else announce "The War Of Emperium has begun!",bc_all|bc_woe;
sleep 1000;
AgitStart; AgitStart2;
for(set
[email protected],0;
[email protected]<30; set
[email protected],
[email protected]+1) {
if (.Active[0]&(1<<
[email protected])) {
if (!.Init) Disp_Owner(.Castles$[
[email protected]],0);
set .Active[1], .Active[1] | (1<<((
[email protected]/5)+1));
} else {
if (.AutoKick) setmapflag .Castles$[
[email protected]], mf_loadevent;
if (
[email protected]<20) {
donpcevent "Agit#"+.Castles$[
[email protected]]+"::OnAgitEnd";
killmonster .Castles$[
[email protected]], "Agit#"+.Castles$[
[email protected]]+"::OnAgitBreak";
} else {
donpcevent "Manager#"+.Castles$[
[email protected]]+"_02::OnAgitEnd2";
killmonster .Castles$[
[email protected]], "Steward#"+.EndLabel$[
[email protected]]+"::OnStartArena"; } } }
break; } }
set .Init,0;
end;
function Disp_Owner {
set
[email protected], getcastledata(getarg(0),1);
if (
[email protected]) announce "The ["+getcastlename(getarg(0))+"] castle "+((getarg(1))?"has been conquered":"is currently held")+" by the ["+getguildname(
[email protected])+"] guild.",bc_all|bc_woe;
else announce "The ["+getcastlename(getarg(0))+"] castle is currently unoccupied.",bc_all|bc_woe;
return; }
function Add_Zero {
return ((getarg(0)<10)?"0":"")+getarg(0)+(getarg(1,0)?".":":")+"00"; }
OnReward:
for(set
[email protected],0;
[email protected]<30; set
[email protected],
[email protected]+1)
if (getarg(0)&(1<<
[email protected])) {
set
[email protected], getcastledata(.Castles$[
[email protected]],1);
if (
[email protected]) {
deletearray
[email protected][0], getarraysize(
[email protected]); deletearray
[email protected][0], getarraysize(
[email protected]);
query_sql("SELECT account_id,char_id FROM `guild_member` WHERE guild_id = '"
[email protected]+"'",
[email protected],
[email protected]);
for(set
[email protected],0;
[email protected]<getarraysize(
[email protected]); set
[email protected],
[email protected]+1)
if (isloggedin(
[email protected][
[email protected]],
[email protected][
[email protected]])) {
for(set
[email protected],0;
[email protected]<getarraysize(.Reward); set
[email protected],
[email protected]+2)
getitem .Reward[
[email protected]], .Reward[
[email protected]+1],
[email protected][
[email protected]];
message rid2name(
[email protected][
[email protected]]),"You have been rewarded for conquering "+getcastlename(.Castles$[
[email protected]])+"."; }
sleep 1; } }
return;
OnPCLoadMapEvent:
if (!compare(strcharinfo(3),"g_cas")) end;
sleep2 1000;
message strcharinfo(0), getcastlename(strcharinfo(3))+" is inactive during this WOE session.";
sleep2 5000;
if (compare(strcharinfo(3),"g_cas")) warp "SavePoint",0,0;
end;
OnMenu:
while(1) {
mes "[WOE Information]";
if (agitcheck() || agitcheck2()) {
if (!.Size) mes "The War of Emperium is ^0055FFactive^000000.";
else {
for(set
[email protected],0;
[email protected]<.Size; set
[email protected],
[email protected]+4)
if (gettime(4)==$WOE_CONTROL[
[email protected]] && gettime(3)>=$WOE_CONTROL[
[email protected]+1] && gettime(3)<$WOE_CONTROL[
[email protected]+2]) {
set
[email protected], $WOE_CONTROL[
[email protected]+2]; break; }
mes "The War of Emperium is ^0055FFactive^000000 until ^FF0000"+Add_Zero(
[email protected])+"^000000 in the following regions:";
mes " ";
for(set
[email protected],0;
[email protected]<6; set
[email protected],
[email protected]+1)
if (.Active[1]&(1<<(
[email protected]+1))) mes " > ^777777"+.Regions$[
[email protected]]+"^000000"; }
} else {
set
[email protected],0; set
[email protected],0;
for(set
[email protected],0;
[email protected]<.Size; set
[email protected],
[email protected]+4)
if ((gettime(4)==$WOE_CONTROL[
[email protected]] && gettime(3)<=$WOE_CONTROL[
[email protected]+1]) || gettime(4)<$WOE_CONTROL[
[email protected]]) {
set
[email protected], $WOE_CONTROL[
[email protected]]; set
[email protected], $WOE_CONTROL[
[email protected]+1]; break; }
if (
[email protected] &&
[email protected]) {
set
[email protected], $WOE_CONTROL[0]; set
[email protected], $WOE_CONTROL[1]; }
mes "The War of Emperium is ^777777inactive^000000.";
if (.Size) {
mes " ";
mes "The next session will begin";
mes "on ^0055FF"+.Days$[
[email protected]]+"^000000 at "+Add_Zero(
[email protected])+"^000000."; } }
next;
switch(select(""+((.CastleWarp || .Active[1])?" ~ Warp to castles...":"")+": ~ Check schedule...: ~ View castle owners...:"+((getgmlevel()<.GMAccess || !getgmlevel())?"":" ~ Manage sessions...")+": ~ ^777777Cancel^000000")) {
case 1:
set
[email protected]$,"";
for(set
[email protected],0;
[email protected]<6; set
[email protected],
[email protected]+1) {
if (.CastleWarp || .Active[1]&(1<<(
[email protected]+1))) set
[email protected]$,
[email protected]$+" ~ "+((.Active[1]&(1<<(
[email protected]+1)))?"^0055FF":"^777777")+.Regions$[
[email protected]]+" Castles^000000";
set
[email protected]$,
[email protected]$+":"; }
set
[email protected], select(
[email protected]$)-1;
set
[email protected]$,"";
for(set
[email protected],
[email protected]*5;
[email protected]<(
[email protected]*5)+5; set
[email protected],
[email protected]+1) {
if (.CastleWarp || .Active[0]&(1<<
[email protected])) set
[email protected]$,
[email protected]$+" ~ "+((.Active[0]&(1<<
[email protected]))?"^0055FF":"^777777")+getcastlename(.Castles$[
[email protected]])+"^000000";
set
[email protected]$,
[email protected]$+":"; }
set
[email protected], select(
[email protected]$)-1;
warp .Map$[
[email protected]],.MapX[(
[email protected]*5)
[email protected]],.MapY[(
[email protected]*5)
[email protected]];
close;
case 2:
mes "[Schedule]";
if (.Size) {
for(set
[email protected],0;
[email protected]<.Size; set
[email protected],
[email protected]+4) {
mes "> ^FF0000"+.Days$[$WOE_CONTROL[
[email protected]]]+" ("+Add_Zero($WOE_CONTROL[
[email protected]+1])+"-"+Add_Zero($WOE_CONTROL[
[email protected]+2])+")^000000";
for(set
[email protected],0;
[email protected]<30; set
[email protected],
[email protected]+1)
if ($WOE_CONTROL[
[email protected]+3]&(1<<
[email protected])) mes " ~ "+getcastlename(.Castles$[
[email protected]])+" ^777777("+.Castles$[
[email protected]]+")^000000";
if (
[email protected]+4<.Size) mes " ";
sleep2 1; }
} else mes "No times are configured.";
next;
break;
case 3:
mes "[Castle Ownership]";
for(set
[email protected],0;
[email protected]<6; set
[email protected],
[email protected]+1) {
set
[email protected],
[email protected]*5;
mes "> ^FF0000"+.Regions$[
[email protected]]+"^000000";
for(set
[email protected],
[email protected];
[email protected]<(
[email protected]+5); set
[email protected],
[email protected]+1) {
set
[email protected], getcastledata(.Castles$[
[email protected]],1);
mes " ~ "+getcastlename(.Castles$[
[email protected]])+": "+((
[email protected])?"^0055FF"+getguildname(
[email protected]):"^777777unoccupied")+"^000000"; }
if (
[email protected]<5) mes " "; }
next;
break;
case 4:
while(1) {
mes "[Session Manager]";
mes "There are ^0055FF"+(.Size/4)+" session(s)^000000 configured.";
mes "What would you like to do?";
next;
switch(select(" ~ Add a session...: ~ Delete a session...: ~ Reload settings...:"+((agitcheck() || agitcheck2())?" ~ End WOE session...":"")+": ~ ^777777Go back^000000")) {
case 1:
mes "[New Session]";
if (.Size > 127) {
mes "You have already reached the maximum of 32 sessions."; next; break; }
mes "Select a day.";
next;
set
[email protected]$,"";
for(set
[email protected],0;
[email protected]<7; set
[email protected],
[email protected]+1)
set
[email protected]$,
[email protected]$+" ~ "+.Days$[
[email protected]]+":";
set
[email protected], select(
[email protected]$)-1;
mes "[New Session]";
mes "Select a start time for ^0055FF"+.Days$[
[email protected]]+"^000000.";
next;
set
[email protected]$,"";
for(set
[email protected],0;
[email protected]<23; set
[email protected],
[email protected]+1)
set
[email protected]$,
[email protected]$+" ~ "+Add_Zero(
[email protected],1)+":";
set
[email protected], select(
[email protected]$)-1;
mes "[New Session]";
mes "Select an end time for ^0055FF"+.Days$[
[email protected]]+"^000000.";
next;
set
[email protected]$,"";
for(set
[email protected],
[email protected]+1;
[email protected]<24;
[email protected],
[email protected]+1)
set
[email protected]$,
[email protected]$+" ~ "+Add_Zero(
[email protected],1)+":";
set
[email protected], select(
[email protected]$)
[email protected];
for(set
[email protected],0;
[email protected]<.Size; set
[email protected],
[email protected]+4)
if (
[email protected]==$WOE_CONTROL[
[email protected]] &&
((
[email protected] >= $WOE_CONTROL[
[email protected]+1] &&
[email protected] < $WOE_CONTROL[
[email protected]+2]) ||
(
[email protected] > $WOE_CONTROL[
[email protected]+1] &&
[email protected] <= $WOE_CONTROL[
[email protected]+2]) ||
(
[email protected] <= $WOE_CONTROL[
[email protected]+1] &&
[email protected] >= $WOE_CONTROL[
[email protected]+2]))) {
mes "[New Session]";
mes "The chosen times overlap with an existing session.";
next;
set
[email protected],1; break; }
if (
[email protected]) { set
[email protected],0; break; }
set
[email protected],0;
while(1) {
mes "[New Session]";
mes "^0055FF"+.Days$[
[email protected]]+" ("+Add_Zero(
[email protected])+"-"+Add_Zero(
[email protected])+")^000000";
mes " > Castles:";
if (
[email protected]) mes " ~ ^777777(none selected)^000000";
else for(set
[email protected],0;
[email protected]<30; set
[email protected],
[email protected]+1)
if (
[email protected]&(1<<
[email protected])) mes " ~ "+getcastlename(.Castles$[
[email protected]])+" ("+.Castles$[
[email protected]]+")";
next;
set
[email protected]$,((
[email protected])?" ~ ^FF0000Finished...^000000":"")+":";
for(set
[email protected],0;
[email protected]<30; set
[email protected],
[email protected]+1)
set
[email protected]$,
[email protected]$+" ~ "+((
[email protected]&(1<<
[email protected]))?"^0055FF":"")+getcastlename(.Castles$[
[email protected]])+" ("+.Castles$[
[email protected]]+")^000000:";
set
[email protected], select(
[email protected]$)-1;
if (
[email protected]) set
[email protected],
[email protected]^(1<<(
[email protected]));
else {
mes "[New Session]";
mes "Are you sure?";
next;
switch(select(" ~ ^0055FFAdd session...^000000: ~ Continue selecting castles...: ~ ^777777Cancel^000000")) {
case 1:
for(set
[email protected],0;
[email protected]<.Size; set
[email protected],
[email protected]+4)
if ((
[email protected]==$WOE_CONTROL[
[email protected]] &&
[email protected]<=$WOE_CONTROL[
[email protected]+1]) ||
[email protected]<$WOE_CONTROL[
[email protected]]) {
set
[email protected],1; break; }
if (
[email protected]) { set
[email protected],1; set
[email protected],.Size; }
copyarray $WOE_CONTROL[
[email protected]+4], $WOE_CONTROL[
[email protected]],
[email protected];
setarray $WOE_CONTROL[
[email protected]],
[email protected],
[email protected],
[email protected],
[email protected];
set .Size, getarraysize($WOE_CONTROL);
case 3:
mes "[New Session]";
mes ((
[email protected])?"Session added.":"Cancelled.");
next;
set
[email protected],1;
case 2:
break;
} if (
[email protected]) { set
[email protected],0; break; } }
} break;
case 2:
mes "[Remove Session]";
if (!.Size) {
mes "There are no sessions configured."; next; break; }
mes "Select a session to remove.";
next;
set
[email protected]$,"";
for(set
[email protected],0;
[email protected]<.Size; set
[email protected],
[email protected]+4)
set
[email protected]$,
[email protected]$+" ~ "+.Days$[$WOE_CONTROL[
[email protected]]]+" ("+Add_Zero($WOE_CONTROL[
[email protected]+1],1)+"-"+Add_Zero($WOE_CONTROL[
[email protected]+2],1)+"):";
set
[email protected]$,
[email protected]$+" ~ ^777777Cancel^000000";
set
[email protected], select(
[email protected]$)-1;
if (
[email protected]==(.Size/4)) break;
mes "[Remove Session]";
mes "Delete ^0055FF"+.Days$[$WOE_CONTROL[
[email protected]*4]]+"'s^000000 session?";
mes "This action cannot be undone.";
next;
set
[email protected], select(" ~ ^FF0000Delete session...^000000: ~ ^777777Cancel^000000");
mes "[Remove Session]";
if (
[email protected]==2) mes "Cancelled.";
else {
deletearray $WOE_CONTROL[
[email protected]*4],4;
set .Size, getarraysize($WOE_CONTROL);
mes "Session deleted."; }
next;
break;
case 3:
mes "[Reload Settings]";
mes "This will trigger all events related to new session configurations, if any.";
if (agitcheck() || agitcheck2()) { mes " "; mes "Be aware that this will disrupt the current WOE session."; }
next;
set
[email protected], select(" ~ ^0055FFReload settings...^000000: ~ ^777777Cancel^000000");
mes "[Reload Settings]";
if (
[email protected]==2) mes "Cancelled.";
else {
set .Init,1;
donpcevent "WOE_CONTROL::OnMinute00";
mes "Variables have been re-initialized."; }
next;
break;
case 4:
mes "[Force Agit End]";
if (!agitcheck() && !agitcheck2()) {
mes "WOE has already ended."; next; break; }
mes "This command will safely execute all AgitEnd events.";
mes " ";
mes "Kill the current WOE session?";
next;
set
[email protected], select(" ~ ^FF0000End session...^000000:"+((.Reward[0])?" ~ ^FF0000End session without rewards...^000000":"")+": ~ ^777777Cancel^000000");
mes "[Force Agit End]";
if (
[email protected]==3) mes "Cancelled.";
else {
set .ForceEnd,
[email protected];
donpcevent "WOE_CONTROL::OnWOEEnd";
mes "WOE session terminated."; }
next;
break;
case 5:
set
[email protected],1; break;
} if (
[email protected]) { set
[email protected],0; break; } }
break;
case 5:
close; }
}
}