summaryrefslogtreecommitdiff
path: root/npc/custom/woe_controller.txt
diff options
context:
space:
mode:
Diffstat (limited to 'npc/custom/woe_controller.txt')
-rw-r--r--npc/custom/woe_controller.txt181
1 files changed, 123 insertions, 58 deletions
diff --git a/npc/custom/woe_controller.txt b/npc/custom/woe_controller.txt
index d8380e770..fe88b0934 100644
--- a/npc/custom/woe_controller.txt
+++ b/npc/custom/woe_controller.txt
@@ -3,9 +3,9 @@
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
-//= 1.4
+//= 1.5
//===== Compatible With: =====================================
-//= rAthena SVN r16571+
+//= rAthena SVN r16958+
//===== Description: =========================================
//= A controller for War of Emperium designed for
//= simplicity and ease of use.
@@ -17,23 +17,64 @@
//== npc\guild2\agit_start_se.txt
//============================================================
-prontera,149,193,4 script WOE Information 835,{ doevent "WOE_CONTROL::OnMenu"; end; OnAgitStart: while(agitcheck()) { misceffect 58; sleep 425; } end; }
+// Information NPC
+//============================================================
+prontera,149,193,4 script WOE Information 835,{
+ doevent "WOE_CONTROL::OnMenu";
+ end;
+OnAgitStart:
+ while(agitcheck()) {
+ misceffect 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.
- setarray .Reward[0],14001,1; // Reward for all members of conquering guilds, per castle: <ID>,<Count>{,...} (0 to disable)
-// --------------------------------------------------------------------------------------------------------------------------
- set .Size, getarraysize($WOE_CONTROL);
+// -----------------------------------------------------------
+// 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",
@@ -47,12 +88,18 @@ OnInit:
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 (.AutoKick || .NoOwner) for(set .@i,0; .@i<30; set .@i,.@i+1) {
- setmapflag .Castles$[.@i], mf_loadevent;
- setd "."+.Castles$[.@i], .@i;
- }
+
+// -----------------------------------------------------------
+
+ 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()) {
@@ -66,7 +113,7 @@ OnMinute00:
if (.Active[0]&(1<<.@j)) Disp_Owner(.Castles$[.@j],1);
if (.ExitWarp) maprespawnguildid .Castles$[.@j],0,3;
}
- if (.Reward[0] && .Active[0] && .ForceEnd != 2) callsub OnReward, .Active[0];
+ if (.Options&1 && .Active[0] && .ForceEnd != 2) callsub OnReward, .Active[0];
deletearray .Active[0],2;
if (.ForceEnd) { set .ForceEnd,0; end; }
break;
@@ -100,7 +147,6 @@ OnMinute00:
}
}
set .Init,0;
- freeloop(0);
end;
function Disp_Owner {
@@ -114,20 +160,37 @@ function Add_Zero {
}
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 .@guild, getcastledata(.Castles$[.@i],1);
- if (.@guild) {
- deletearray .@acc[0], getarraysize(.@acc); deletearray .@char[0], getarraysize(.@char);
- query_sql("SELECT account_id,char_id FROM `guild_member` WHERE guild_id = '"+.@guild+"'", .@acc, .@char);
- for(set .@j,0; .@j<getarraysize(.@acc); set .@j,.@j+1)
- if (isloggedin(.@acc[.@j],.@char[.@j])) {
- for(set .@k,0; .@k<getarraysize(.Reward); set .@k,.@k+2)
- getitem .Reward[.@k], .Reward[.@k+1], .@acc[.@j];
- message rid2name(.@acc[.@j]),"You have been rewarded for conquering "+getcastlename(.Castles$[.@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:
@@ -145,8 +208,7 @@ OnMenu:
while(1) {
mes "[WOE Information]";
if (agitcheck() || agitcheck2()) {
- if (!.Size) mes "The War of Emperium is ^0055FFactive^000000.";
- else {
+ if (.Active[0]) {
for(set .@i,0; .@i<.Size; set .@i,.@i+4)
if (gettime(4) == $WOE_CONTROL[.@i] && gettime(3) >= $WOE_CONTROL[.@i+1] && gettime(3) < $WOE_CONTROL[.@i+2]) {
set .@i, $WOE_CONTROL[.@i+2];
@@ -156,39 +218,38 @@ while(1) {
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 {
- set .@j,0; set .@k,0;
for(set .@i,0; .@i<.Size; set .@i,.@i+4)
if ((gettime(4) == $WOE_CONTROL[.@i] && gettime(3) <= $WOE_CONTROL[.@i+1]) || gettime(4) < $WOE_CONTROL[.@i]) {
- set .@j, $WOE_CONTROL[.@i]; set .@k, $WOE_CONTROL[.@i+1];
+ setarray .@time[0],$WOE_CONTROL[.@i],$WOE_CONTROL[.@i+1];
break;
}
- if (!.@j && !.@k) {
- set .@j, $WOE_CONTROL[0];
- set .@k, $WOE_CONTROL[1];
- }
+ 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$[.@j]+"^000000 at "+Add_Zero(.@k)+"^000000.";
+ 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)))?"^0055FF":"^777777")+.Regions$[.@i]+" Castles^000000";
+ 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))?"^0055FF":"^777777")+getcastlename(.Castles$[.@j])+"^000000";
+ set .@menu$, .@menu$+" ~ "+((.Active[0]&(1<<.@j))?.@clr$:"^777777")+getcastlename(.Castles$[.@j])+"^000000";
set .@menu$, .@menu$+":";
}
set .@j, select(.@menu$)-1;
@@ -205,8 +266,8 @@ while(1) {
if (.@i+4 < .Size) mes " ";
}
freeloop(0);
- }
- else mes "No times are configured.";
+ } else
+ mes "No times are configured.";
next;
break;
case 3:
@@ -270,7 +331,8 @@ 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";
+ 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;
@@ -278,29 +340,30 @@ while(1) {
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));
+ 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;
+ 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; }
}
@@ -327,7 +390,8 @@ while(1) {
next;
set .@j, select(" ~ ^FF0000Delete session...^000000: ~ ^777777Cancel^000000");
mes "[Remove Session]";
- if (.@j == 2) mes "Cancelled.";
+ if (.@j == 2)
+ mes "Cancelled.";
else {
deletearray $WOE_CONTROL[.@i*4],4;
set .Size, getarraysize($WOE_CONTROL);
@@ -364,9 +428,10 @@ while(1) {
mes " ";
mes "Kill the current WOE session?";
next;
- set .@i, select(" ~ ^FF0000End session...^000000:"+((.Reward[0])?" ~ ^FF0000End session without rewards...^000000":"")+": ~ ^777777Cancel^000000");
+ set .@i, select(" ~ ^FF0000End session...^000000:"+((.Options&1)?" ~ ^FF0000End session without rewards...^000000":"")+": ~ ^777777Cancel^000000");
mes "[Force Agit End]";
- if (.@i == 3) mes "Cancelled.";
+ if (.@i == 3)
+ mes "Cancelled.";
else {
set .ForceEnd, .@i;
donpcevent "WOE_CONTROL::OnWOEEnd";