It is really a good script but I wanted to ask you if someone can help me to modify it in order to setup sessions that start/end at the 30th minute of every hour, for example a session that starts at 21:30 and ends at 22:30 pm and not only 21:00~22:00 like now.
Can anybody help me?
//===== rAthena Script =======================================//= Euphy's WOE Controller//===== By: ==================================================//= Euphy//===== Current Version: =====================================//= 1.5//===== Compatible With: =====================================//= rAthena Project//===== 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//============================================================// Information NPC//============================================================
prontera,149,193,4 script WOE Information835,{
doevent "WOE_CONTROL::OnMenu";
end;OnAgitStart:while(agitcheck()){
specialeffect EF_BEGINSPELL6;
sleep 425;}
end;}// Script Core//============================================================- script WOE_CONTROL -1,{
function Disp_Owner; function Add_Zero;OnInit:// -----------------------------------------------------------// Configuration settings.// -----------------------------------------------------------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.NoOwner,0;// Automatically kick players from unconquered castles outside of 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.// -----------------------------------------------------------// Reward options.// -----------------------------------------------------------// [1] Enable rewards.// [2] Mail all rewards.// - If not set, players receive items in their inventory.// - Only ONE item can be sent via mail, plus Zeny.// - Note that offline players do NOT receive rewards.// [4] Only reward Guild Masters.// - If not set, all guild members are rewarded.// - If mailing is enabled (option 2), offline Guild Masters WILL receive rewards.// [8] Duplicate IP check.// - Members in a guild with the same IP address are not rewarded.// - If Guild Masters is enabled (option 4), this feature is not used.// -----------------------------------------------------------// Combine values as needed (e.g. 1|8 = 1+8 = 9).set.Options,1|8;// Rewards per castle.// -- when given directly: <itemID>,<amount>{,<itemID>,<amount>,...}// -- via mail (option 2): <itemID>,<amount>,<Zeny>
setarray .Reward[0],14001,1;// -----------------------------------------------------------// Constants (leave this section alone).// -----------------------------------------------------------
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],"ar01","ar02","ar03","ar04","ar05","sc01","sc02","sc03","sc04","sc05";
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;// -----------------------------------------------------------set.Size, getarraysize($WOE_CONTROL);if(.AutoKick||.NoOwner)for(set.@i,0;.@i<30;set.@i,.@i+1){
setmapflag .Castles$[.@i], mf_loadevent;
setd "."+.Castles$[.@i],.@i;}if(!agitcheck()&&!agitcheck2()) sleep 4000;set.Init,1;OnMinute00:
freeloop(1);if(agitcheck()|| agitcheck2()){for(set.@i,0;.@i<.Size;set.@i,.@i+4)if(gettime(DT_DAYOFWEEK)== $WOE_CONTROL[.@i]&& gettime(DT_HOUR)== $WOE_CONTROL[.@i+2]){OnWOEEnd:
announce "The War Of Emperium is over!",bc_all|bc_woe;AgitEnd;AgitEnd2;
sleep 1000;for(set.@j,0;.@j<30;set.@j,.@j+1){if(.Active[0]&(1<<.@j))Disp_Owner(.Castles$[.@j],1);if(.ExitWarp) maprespawnguildid .Castles$[.@j],0,3;}if((.Options&1)&&.Active[0]&&.ForceEnd!=2) callsub OnReward,.Active[0];
deletearray .Active[0],2;if(.ForceEnd){set.ForceEnd,0; end;}break;}}if((!agitcheck()&&!agitcheck2())||.Init){if(!agitcheck()&&!agitcheck2())set.Init,0;for(set.@i,0;.@i<.Size;set.@i,.@i+4)if(gettime(DT_DAYOFWEEK)== $WOE_CONTROL[.@i]&& gettime(DT_HOUR)>= $WOE_CONTROL[.@i+1]&& gettime(DT_HOUR)< $WOE_CONTROL[.@i+2]){
deletearray .Active[0],2;set.Active[0], $WOE_CONTROL[.@i+3];if(.Init){AgitEnd;AgitEnd2;}else announce "The War Of Emperium has begun!",bc_all|bc_woe;
sleep 1000;AgitStart;AgitStart2;for(set.@j,0;.@j<30;set.@j,.@j+1){if(.Active[0]&(1<<.@j)){if(!.Init)Disp_Owner(.Castles$[.@j],0);set.Active[1],.Active[1]|(1<<((.@j/5)+1));}else{if(.@j<20){
donpcevent "Agit#"+.Castles$[.@j]+"::OnAgitEnd";
killmonster .Castles$[.@j],"Agit#"+.Castles$[.@j]+"::OnAgitBreak";}else{
donpcevent "Manager#"+.Castles$[.@j]+"::OnAgitEnd2";
killmonster .Castles$[.@j],"Steward#"+.EndLabel$[.@j-20]+"::OnStartArena";}}}break;}}set.Init,0;
end;
function Disp_Owner{set.@o, getcastledata(getarg(0),1);if(.@o) announce "The ["+getcastlename(getarg(0))+"] castle "+((getarg(1))?"has been conquered":"is currently held")+" by the ["+getguildname(.@o)+"] 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:set.@sql$,((.Options&4)?"position = 0":"online = 1");if(.Options&2)set.@str$,gettimestr("%B %d, %Y",21);
freeloop(1);for(set.@i,0;.@i<30;set.@i,.@i+1)if(getarg(0)&(1<<.@i)){set.@gid, getcastledata(.Castles$[.@i],1);if(!.@gid)continue;set.@size, query_sql("SELECT account_id,char_id FROM `guild_member` WHERE guild_id = '"+.@gid+"' AND "+.@sql$,.@aid,.@cid);for(set.@j,0;.@j<.@size;set.@j,.@j+1){if((.Options&8)&&!(.Options&4)){set.@ip$, replacestr(getcharip(.@aid[.@j]),".","a");if(getd(".@ip_"+.@i+"_"+.@ip$))continue;
setd ".@ip_"+.@i+"_"+.@ip$,1;}if(.Options&2){
query_sql("INSERT INTO `mail` (send_name,dest_id,title,message,nameid,amount,identify,zeny,time) VALUES ("+"'no-reply',"+.@cid[.@j]+",'** Siege Reward: "+getcastlename(.Castles$[.@i])+" **',"+"'Brave one,% % Congratulations!% Your guild has successfully occupied% territory in the War of Emperium on% "+.@str$+".% % % % % [ Your reward is attached. ]',"+.Reward[0]+","+.Reward[1]+",0,"+.Reward[2]+",UNIX_TIMESTAMP(NOW()))");if(!getd(".@str_"+.@cid[.@j])&& isloggedin(.@aid[.@j],.@cid[.@j])){
setd ".@str_"+.@cid[.@j],1;
message rid2name(.@aid[.@j]),"You've got mail! Please re-login to update your mailing list.";}}elseif(isloggedin(.@aid[.@j])){for(set.@k,0;.@k<getarraysize(.Reward);set.@k,.@k+2)
getitem .Reward[.@k],.Reward[.@k+1],.@aid[.@j];
message rid2name(.@aid[.@j]),"You have been rewarded for conquering "+getcastlename(.Castles$[.@i])+".";}}}if(.Options&2) query_sql("UPDATE `mail` SET message = REPLACE(message,'%',CHAR(13)) WHERE send_name = 'no-reply'");return;OnPCLoadMapEvent:if(!compare(strcharinfo(3),"g_cas")) end;if(((.AutoKick&&.Active[0])||(.NoOwner&&!getcastledata(strcharinfo(3),1)))&&!(.Active[0]&(1<<getd("."+strcharinfo(3))))){if(getcharid(2)&& getcastledata(strcharinfo(3),1)== getcharid(2)) end;
sleep2 1000;
message strcharinfo(0), getcastlename(strcharinfo(3))+" is currently inactive.";
sleep2 5000;if(compare(strcharinfo(3),"g_cas")) warp "SavePoint",0,0;}
end;OnMenu:while(1){
mes "[WOE Information]";if(agitcheck()|| agitcheck2()){if(.Active[0]){for(set.@i,0;.@i<.Size;set.@i,.@i+4)if(gettime(DT_DAYOFWEEK)== $WOE_CONTROL[.@i]&& gettime(DT_HOUR)>= $WOE_CONTROL[.@i+1]&& gettime(DT_HOUR)< $WOE_CONTROL[.@i+2]){set.@i, $WOE_CONTROL[.@i+2];break;}
mes "The War of Emperium is ^0055FFactive^000000 until ^FF0000"+Add_Zero(.@i)+"^000000 in the following regions:";
mes " ";for(set.@i,0;.@i<6;set.@i,.@i+1)if(.Active[1]&(1<<(.@i+1))) mes " > ^777777"+.Regions$[.@i]+"^000000";}else
mes "The War of Emperium is ^0055FFactive^000000.";}else{for(set.@i,0;.@i<.Size;set.@i,.@i+4)if((gettime(DT_DAYOFWEEK)== $WOE_CONTROL[.@i]&& gettime(DT_HOUR)<= $WOE_CONTROL[.@i+1])|| gettime(DT_DAYOFWEEK)< $WOE_CONTROL[.@i]){
setarray .@time[0],$WOE_CONTROL[.@i],$WOE_CONTROL[.@i+1];break;}if(!getarraysize(.@time))
setarray .@time[0],$WOE_CONTROL[0],$WOE_CONTROL[1];
mes "The War of Emperium is ^777777inactive^000000.";if(.Size){
mes " ";
mes "The next session will begin";
mes "on ^0055FF"+.Days$[.@time[0]]+"^000000 at "+Add_Zero(.@time[1])+"^000000.";}}
next;switch(select(""+((.CastleWarp||.Active[1])?" ~ Warp to castles...":"")+": ~ Check schedule...: ~ View castle owners...:"+((getgmlevel()<.GMAccess||!getgmlevel())?"":" ~ Manage sessions...")+": ~ ^777777Cancel^000000")){case1:if(.CastleWarp)set.@clr$,"^0055FF";set.@menu$,"";for(set.@i,0;.@i<6;set.@i,.@i+1){if(.CastleWarp||.Active[1]&(1<<(.@i+1)))set.@menu$,.@menu$+" ~ "+((.Active[1]&(1<<(.@i+1)))?.@clr$:"^777777")+.Regions$[.@i]+" Castles^000000";set.@menu$,.@menu$+":";}set.@i, select(.@menu$)-1;set.@menu$,"";for(set.@j,.@i*5;.@j<(.@i*5)+5;set.@j,.@j+1){if(.CastleWarp||.Active[0]&(1<<.@j))set.@menu$,.@menu$+" ~ "+((.Active[0]&(1<<.@j))?.@clr$:"^777777")+getcastlename(.Castles$[.@j])+"^000000";set.@menu$,.@menu$+":";}set.@j, select(.@menu$)-1;
warp .Map$[.@i],.MapX[(.@i*5)+.@j],.MapY[(.@i*5)+.@j];
close;case2:
mes "[Schedule]";if(.Size){
freeloop(1);for(set.@i,0;.@i<.Size;set.@i,.@i+4){
mes "> ^FF0000"+.Days$[$WOE_CONTROL[.@i]]+" ("+Add_Zero($WOE_CONTROL[.@i+1])+"-"+Add_Zero($WOE_CONTROL[.@i+2])+")^000000";for(set.@j,0;.@j<30;set.@j,.@j+1)if($WOE_CONTROL[.@i+3]&(1<<.@j)) mes " ~ "+getcastlename(.Castles$[.@j])+" ^777777("+.Castles$[.@j]+")^000000";if(.@i+4<.Size) mes " ";}
freeloop(0);}else
mes "No times are configured.";
next;break;case3:
mes "[Castle Ownership]";for(set.@i,0;.@i<6;set.@i,.@i+1){set.@k,.@i*5;
mes "> ^FF0000"+.Regions$[.@i]+"^000000";for(set.@j,.@k;.@j<(.@k+5);set.@j,.@j+1){set.@t, getcastledata(.Castles$[.@j],1);
mes " ~ "+getcastlename(.Castles$[.@j])+": "+((.@t)?"^0055FF"+getguildname(.@t):"^777777unoccupied")+"^000000";}if(.@i<5) mes " ";}
next;break;case4: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")){case1:
mes "[New Session]";if(.Size>127){
mes "You have already reached the maximum of 32 sessions.";
next;break;}
mes "Select a day.";
next;set.@Day, select(" ~ "+implode(.Days$,": ~ "))-1;
mes "[New Session]";
mes "Select a start time for ^0055FF"+.Days$[.@Day]+"^000000.";
next;set.@menu$,"";for(set.@i,0;.@i<23;set.@i,.@i+1)set.@menu$,.@menu$+" ~ "+Add_Zero(.@i,1)+":";set.@Start, select(.@menu$)-1;
mes "[New Session]";
mes "Select an end time for ^0055FF"+.Days$[.@Day]+"^000000.";
next;set.@menu$,"";for(set.@i,.@Start+1;.@i<24;set.@i,.@i+1)set.@menu$,.@menu$+" ~ "+Add_Zero(.@i,1)+":";set.@End, select(.@menu$)+.@Start;for(set.@i,0;.@i<.Size;set.@i,.@i+4)if(.@Day== $WOE_CONTROL[.@i]&&((.@Start>= $WOE_CONTROL[.@i+1]&&.@Start< $WOE_CONTROL[.@i+2])||(.@End> $WOE_CONTROL[.@i+1]&&.@End<= $WOE_CONTROL[.@i+2])||(.@Start<= $WOE_CONTROL[.@i+1]&&.@End>= $WOE_CONTROL[.@i+2]))){
mes "[New Session]";
mes "The chosen times overlap with an existing session.";
next;set.@d,1;break;}if(.@d){set.@d,0;break;}set.@Castle,0;while(1){
mes "[New Session]";
mes "^0055FF"+.Days$[.@Day]+" ("+Add_Zero(.@Start)+"-"+Add_Zero(.@End)+")^000000";
mes " > Castles:";if(!.@Castle)
mes " ~ ^777777(none selected)^000000";elsefor(set.@i,0;.@i<30;set.@i,.@i+1)if(.@Castle&(1<<.@i)) mes " ~ "+getcastlename(.Castles$[.@i])+" ("+.Castles$[.@i]+")";
next;set.@menu$,((.@Castle)?" ~ ^FF0000Finished...^000000":"")+":";for(set.@i,0;.@i<30;set.@i,.@i+1)set.@menu$,.@menu$+" ~ "+((.@Castle&(1<<.@i))?"^0055FF":"")+getcastlename(.Castles$[.@i])+" ("+.Castles$[.@i]+")^000000:";set.@i, select(.@menu$)-1;if(.@i)set.@Castle,.@Castle^(1<<(.@i-1));else{
mes "[New Session]";
mes "Are you sure?";
next;switch(select(" ~ ^0055FFAdd session...^000000: ~ Continue selecting castles...: ~ ^777777Cancel^000000")){case1:for(set.@i,0;.@i<.Size;set.@i,.@i+4)if((.@Day== $WOE_CONTROL[.@i]&&.@End<= $WOE_CONTROL[.@i+1])||.@Day< $WOE_CONTROL[.@i]){set.@d,1;break;}if(!.@d){set.@d,1;set.@i,.Size;}
copyarray $WOE_CONTROL[.@i+4], $WOE_CONTROL[.@i],.Size-.@i;
setarray $WOE_CONTROL[.@i],.@Day,.@Start,.@End,.@Castle;set.Size, getarraysize($WOE_CONTROL);case3:
mes "[New Session]";
mes ((.@d)?"Session added.":"cancelled.");
next;set.@d,1;case2:break;}if(.@d){set.@d,0;break;}}}break;case2:
mes "[Remove Session]";if(!.Size){
mes "There are no sessions configured.";
next;break;}
mes "Select a session to remove.";
next;set.@menu$,"";for(set.@i,0;.@i<.Size;set.@i,.@i+4)set.@menu$,.@menu$+" ~ "+.Days$[$WOE_CONTROL[.@i]]+" ("+Add_Zero($WOE_CONTROL[.@i+1],1)+"-"+Add_Zero($WOE_CONTROL[.@i+2],1)+"):";set.@menu$,.@menu$+" ~ ^777777Cancel^000000";set.@i, select(.@menu$)-1;if(.@i==(.Size/4))break;
mes "[Remove Session]";
mes "Delete ^0055FF"+.Days$[$WOE_CONTROL[.@i*4]]+"'s^000000 session?";
mes "This action cannot be undone.";
next;set.@j, select(" ~ ^FF0000Delete session...^000000: ~ ^777777Cancel^000000");
mes "[Remove Session]";if(.@j==2)
mes "cancelled.";else{
deletearray $WOE_CONTROL[.@i*4],4;set.Size, getarraysize($WOE_CONTROL);
mes "Session deleted.";}
next;break;case3:
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.@i, select(" ~ ^0055FFReload settings...^000000: ~ ^777777Cancel^000000");
mes "[Reload Settings]";if(.@i==2) mes "cancelled.";else{set.Init,1;
donpcevent "WOE_CONTROL::OnMinute00";
mes "Variables have been re-initialized.";}
next;break;case4:
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.@i, select(" ~ ^FF0000End session...^000000:"+((.Options&1)?" ~ ^FF0000End session without rewards...^000000":"")+": ~ ^777777Cancel^000000");
mes "[Force Agit End]";if(.@i==3)
mes "cancelled.";else{set.ForceEnd,.@i;
donpcevent "WOE_CONTROL::OnWOEEnd";
mes "WOE session terminated.";}
next;break;case5:set.@d,1;break;}if(.@d){set.@d,0;break;}}break;case5:
close;}}}
Question
CyberDevil
This is the official @Euphy's WOE Controller: https://github.com/rathena/rathena/blob/master/npc/custom/woe_controller.txt
It is really a good script but I wanted to ask you if someone can help me to modify it in order to setup sessions that start/end at the 30th minute of every hour, for example a session that starts at 21:30 and ends at 22:30 pm and not only 21:00~22:00 like now.
Can anybody help me?
Link to comment
Share on other sites
9 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.