diff options
Diffstat (limited to 'npc/custom/woe_controller.txt')
-rw-r--r-- | npc/custom/woe_controller.txt | 448 |
1 files changed, 0 insertions, 448 deletions
diff --git a/npc/custom/woe_controller.txt b/npc/custom/woe_controller.txt deleted file mode 100644 index 5f619c1db..000000000 --- a/npc/custom/woe_controller.txt +++ /dev/null @@ -1,448 +0,0 @@ -//===== Hercules Script ====================================== -//= Euphy's WOE Controller -//===== By: ================================================== -//= Euphy -//===== Current Version: ===================================== -//= 1.5 -//===== 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\woe-fe\agit_controller.txt -//== npc\woe-se\agit_start_se.txt -//============================================================ - -// Information NPC -//============================================================ -prontera,149,193,4 script WOE Information 2_BOARD1,{ - doevent "WOE_CONTROL::OnMenu"; - end; -OnAgitStart: - while(agitcheck()) { - specialeffect(EF_BEGINSPELL6); - sleep 425; - } - end; -} - -// Script Core -//============================================================ -- script WOE_CONTROL FAKE_NPC,{ -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(GETTIME_WEEKDAY) == $WOE_CONTROL[.@i] && gettime(GETTIME_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(GETTIME_WEEKDAY) == $WOE_CONTROL[.@i] && gettime(GETTIME_HOUR) >= $WOE_CONTROL[.@i+1] && gettime(GETTIME_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."; - } - } else if (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(PC_MAP),"g_cas")) end; - if (((.AutoKick && .Active[0]) || (.NoOwner && !getcastledata(strcharinfo(PC_MAP),1))) && !(.Active[0]&(1<<getd("."+strcharinfo(PC_MAP))))) { - if (getcharid(CHAR_ID_GUILD) && getcastledata(strcharinfo(PC_MAP),1) == getcharid(CHAR_ID_GUILD)) end; - sleep2 1000; - message strcharinfo(PC_NAME), getcastlename(strcharinfo(PC_MAP))+" is currently inactive."; - sleep2 5000; - if (compare(strcharinfo(PC_MAP),"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(GETTIME_WEEKDAY) == $WOE_CONTROL[.@i] && gettime(GETTIME_HOUR) >= $WOE_CONTROL[.@i+1] && gettime(GETTIME_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(GETTIME_WEEKDAY) == $WOE_CONTROL[.@i] && gettime(GETTIME_HOUR) <= $WOE_CONTROL[.@i+1]) || gettime(GETTIME_WEEKDAY) < $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")) { - case 1: - 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; - case 2: - 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; - case 3: - 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; - 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 .@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"; - else for(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")) { - case 1: - 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); - case 3: - mes "[New Session]"; - mes ((.@d)?"Session added.":"Cancelled."); - next; - set .@d,1; - case 2: - break; - } - if (.@d) { set .@d,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 .@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; - 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 .@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; - 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 .@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; - case 5: - set .@d,1; break; - } - if (.@d) { set .@d,0; break; } - } break; - case 5: - close; - } } -} |