Jump to content

cumbe11

Members
  • Posts

    249
  • Joined

  • Last visited

  • Days Won

    1

Community Answers

  1. cumbe11's post in WoE Awards was marked as the answer   
    complete controller script
    - script WoEInfoBase -1,{   OnStartMenu: if(.init == 0) donpcevent strnpcinfo(3)+"::OnInit";   OnStartMenu2: mes "The " + ((.state)?"^00DD00current":"^DD0000next") + "^000000 WoE session is: "; mes " "; mes "Day: ^0000DD" + .daysOfWeek$[.woe_day[.woe_index]]; mes "^000000Start time: ^00DD00" + .woe_0_str$[.woe_index]; mes "^000000End time: ^DD0000" + .woe_1_str$[.woe_index]; mes "^000000Region:";   set [email protected]_strs$, ".woe_state_str_" + .woe_state[.woe_index] + "$"; for(set [email protected], 0; [email protected] < .num_regions; set [email protected], [email protected] + 1) { set [email protected]$, getd([email protected]_strs$ + "[" + [email protected] + "]"); if([email protected]$ != "") mes "^000000- ^0000DD" + [email protected]$; } next;   if(getgmlevel() >= .gm_access) select( "Warp to Castle Grounds", "View Castle Owners", "View all WoE times",  ((!.state)?"Start next WoE":"End current WoE"), ((.state)?"":"Skip next WoE session") ); else select( "Warp to Castle Grounds", "View Castle Owners", "View all WoE times");   switch(@menu) { case 1: //warp mes "Which region would you like to warp to?"; next; select(.region_warp$[.woe_state[.woe_index]]); if(@menu < 1 || @menu > .num_regions) close;   close2; warp .region_maps$[@menu - 1], .region_x[@menu - 1], .region_y[@menu - 1]; end; case 2: //view set [email protected]_state_array$, ".woe_state_" + .woe_state[.woe_index]; for(set [email protected], 0; [email protected] < .num_regions; set [email protected], [email protected] + 1) { set [email protected], 0; set [email protected]$, ".castles_" + .regions$[[email protected]] + "$"; set [email protected]_check, getd([email protected]_state_array$ + "[" + [email protected] + "]"); while([email protected]_check && [email protected] < .num_castles[[email protected]]) { if([email protected]_check & (1 << [email protected])) { set [email protected]$, getd([email protected]$+"["[email protected]+"]"); if (GetCastleData([email protected]$,1)) { dispbottom "The [" + GetCastleName([email protected]$) + "] castle of the [" + .region_names$[[email protected]] + "] region is currently held by the [" + GetGuildName(GetCastleData([email protected]$,1)) + "] guild."; } else { dispbottom "The [" + GetCastleName([email protected]$) + "] castle of the [" + .region_names$[[email protected]] + "] region is currently unoccupied."; } set [email protected]_check, [email protected]_check - (1 << [email protected]); } set [email protected], [email protected] + 1; } } break; case 3: //woe times for(set [email protected], 0; [email protected] < .num_woes; set [email protected], [email protected] + 1) { dispbottom "- " + .daysOfWeek$[.woe_day[[email protected]]] + " " + .woe_0_str$[[email protected]] + "-" + .woe_1_str$[[email protected]]; set [email protected]_state_str_array$, ".woe_state_str_" + .woe_state[[email protected]] + "$"; for(set [email protected], 0; [email protected] < .num_regions; set [email protected], [email protected] + 1) { set [email protected]$, getd([email protected]_state_str_array$ + "[" + [email protected] + "]"); if([email protected]$ != "") dispbottom "        " + [email protected]$; } } break; case 4: //start next; if(getgmlevel() <.gm_access) close;   mes "^FF0000Are you sure you want to " + ((!.state)?"start the next WoE session?":"end the current WoE session?"); next; if(select("Yes:No") == 2) break;   set .remainTime, 0; //might not work sometimes...you have like a 500ms window out of 505ms i guess.. sleep2 .timer_refresh_rate; //wait abit so the menu doesn't screw up (how long it takes for the timer to update) break; case 5: //skip next; if(getgmlevel() <.gm_access || .state) close;   mes "^FF0000Are you sure you want to skip the next WoE session^000000"; next; if(select("Yes:No") == 2) break; if(.state) { //you really can't do this with woe active next; mes "Sorry, in the time you took making your decision, WoE started"; mes "Please either manually end it first or wait"; break; } set .woe_index, (.woe_index + 1) % .num_woes; donpcevent strnpcinfo(3)+"::OnUpdateCountTick"; sleep2 .timer_refresh_rate; break; default: close; } goto OnStartMenu2;   OnInit:   //-----------------------------------------------------------------------------------------// //CONFIG START                                                                             // //-----------------------------------------------------------------------------------------//   set .gm_access, 60;   //WoE timings needs to be ordered ascendingly unless you want to do weird  //stuff like skip a region every other week or so... //Also times can't overlap. Uses second of day(gettimetick(1)) for timing // eg 1am -> 3600, 2:30pm -> 52200, midnight -> 86400 (anything past that doesn't work) //Note: woe_0 is start times, woe_1 is end times. Ignore how it's called but // don't change it either since it's dynamically used // Also..woe has to end on the same day it starts (it's easier that way..) setarray .woe_day[0], 0,    3,    6; setarray .woe_0[0], 68400,68400,68400; setarray .woe_1[0], 72000,72000,72000; setarray .woe_state[0], 0,    1,    2;   //WoE state settings. Every WoE session can be defined as a particular state of castle configuration. //.woe_state_#[%] = $ // # - state number // % - region number // $ - binary representation of castles that are active for that region in that state ( //     (ie. 0 is no castles, 5 is castle 0 and 2  (2^0 + 2^2 = 5)) setarray .woe_state_0[0],4,0,0,0,0,0,0; setarray .woe_state_1[0],1,0,0,0,0,0,0; setarray .woe_state_2[0],2,0,0,0,0,0,0;   //Setting for if script handles WoE controller function. Disable agit_controller.txt if you are using this. //For if you want to use something else to handle your woe stuff but only this script //to show info (1 - on, 0 - off...duh) set .active_woe, 1;     //WoE inactive on map notifier. Basically notifies player if the castle they are entering is //WoE active or not set .notify_woe, 1;   //-----------------------------------------------------------------------------------------// //CONFIG END                                                                               // //-----------------------------------------------------------------------------------------//     //-----------------------------------------------------------------------------------------// //CONSTANTS START - Don't touch this unless you know what you are doing                    // //-----------------------------------------------------------------------------------------//   //castle maps by region setarray .castles_prtg$[0],"prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05"; setarray .castles_payg$[0],"payg_cas01","payg_cas02","payg_cas03","payg_cas04","payg_cas05"; setarray .castles_gefg$[0],"gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05"; setarray .castles_aldeg$[0],"aldeg_cas01","aldeg_cas02","aldeg_cas03","aldeg_cas04","aldeg_cas05"; setarray .castles_arug$[0],"arug_cas01","arug_cas02","arug_cas03","arug_cas04","arug_cas05"; setarray .castles_schg$[0],"schg_cas01","schg_cas02","schg_cas03","schg_cas04","schg_cas05"; setarray .castles_novi$[0],"nguild_alde","nguild_gef","nguild_pay","nguild_prt";   //woe kill functions for each castle setarray .woe_kill_prtg$[0],"Agit#prtg_cas01::OnAgitEnd","Agit#prtg_cas02::OnAgitEnd","Agit#prtg_cas03::OnAgitEnd","Agit#prtg_cas04::OnAgitEnd","Agit#prtg_cas05::OnAgitEnd"; setarray .woe_kill_payg$[0],"Agit#payg_cas01::OnAgitEnd","Agit#payg_cas02::OnAgitEnd","Agit#payg_cas03::OnAgitEnd","Agit#payg_cas04::OnAgitEnd","Agit#payg_cas05::OnAgitEnd"; setarray .woe_kill_gefg$[0],"Agit#gefg_cas01::OnAgitEnd","Agit#gefg_cas02::OnAgitEnd","Agit#gefg_cas03::OnAgitEnd","Agit#gefg_cas04::OnAgitEnd","Agit#gefg_cas05::OnAgitEnd"; setarray .woe_kill_aldeg$[0],"Agit#aldeg_cas01::OnAgitEnd","Agit#aldeg_cas02::OnAgitEnd","Agit#aldeg_cas03::OnAgitEnd","Agit#aldeg_cas04::OnAgitEnd","Agit#aldeg_cas05::OnAgitEnd"; setarray .woe_kill_arug$[0],"Manager#aru01_02::OnAgitEnd2","Manager#aru02_02::OnAgitEnd2","Manager#aru03_02::OnAgitEnd2","Manager#aru04_02::OnAgitEnd2","Manager#aru05_02::OnAgitEnd2"; setarray .woe_kill_schg$[0],"Manager#sch01_02::OnAgitEnd2","Manager#sch02_02::OnAgitEnd2","Manager#sch03_02::OnAgitEnd2","Manager#sch04_02::OnAgitEnd2","Manager#sch05_02::OnAgitEnd2"; setarray .woe_kill_novi$[0],"Agit_N01::OnAgitEnd","Agit_N02::OnAgitEnd","Agit_N03::OnAgitEnd","Agit_N04::OnAgitEnd";   //region prefixs setarray .regions$[0],"prtg","payg","gefg","aldeg","arug","schg","novi";   //region info setarray .region_names$[0],"Prontera", "Payon", "Geffen", "Aldebaran", "Arunafeltz", "Schwarzwald", "Novice Castles"; setarray .region_maps$[0],"prt_gld", "pay_gld", "gef_fild13", "alde_gld", "aru_gld", "sch_gld", "prontera"; //coords to warp player to region (0 is random) setarray .region_x[0],0, 0, 0, 0, 0, 0, 148; setarray .region_y[0],0, 0, 0, 0, 0, 0, 163;   setarray .waitMsg$[0], "WoE Starts: ", "WoE Ends: "; setarray .startMsg$[0], "WoE is Starting", "WoE is Ending";   set .ticks_in_day, 86400; //mmm...magic numbers setarray .daysOfWeek$[0], "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday";   set .timer_refresh_rate, 500; //how many ms per timer refresh...keep less than 1000 (in milliseconds) set .change_state_sleep, 3000; //how long to show "WoE is Start|End-ing" msg for in ms. (in milliseconds) //Make sure WoE sessions are longer than this xD set .banner_refresh_rate, 10; //how many seconds per banner refresh...keep 1 or above (in seconds)   //-----------------------------------------------------------------------------------------// //CONSTANTS END                                                                            // //-----------------------------------------------------------------------------------------//   set .num_regions, getarraysize(.regions$); set .num_woes, getarraysize(.woe_1);   //force WoE to end if active callfunc "WoEToggler", 0;   for(set [email protected], 0; [email protected] < .num_regions; set [email protected], [email protected] + 1) { //count num castles per region set .num_castles[[email protected]], getarraysize(getd(".castles_" + .regions$[[email protected]] + "$")); }   //convert timestamps to readable format for(set [email protected], 0; [email protected] < .num_woes; set [email protected], [email protected] + 1) { set [email protected], .woe_0[[email protected]] / 3600; set [email protected], .woe_0[[email protected]] % 3600 / 60; set [email protected]$, (([email protected] % 12)[email protected]%12:12) + ":" + (([email protected] < 10)?"0"[email protected]:[email protected]) + " " + (([email protected] > 12)?"PM":"AM");   set .woe_0_str$[[email protected]], [email protected]$;   set [email protected], .woe_1[[email protected]] / 3600; set [email protected], .woe_1[[email protected]] % 3600 / 60; set [email protected]$, (([email protected] % 12)[email protected]%12:12) + ":" + (([email protected] < 10)?"0"[email protected]:[email protected]) + " " + (([email protected] > 12)?"PM":"AM");   set .woe_1_str$[[email protected]], [email protected]$; }   //calc number of woe states and consolidate states to create list of castles used set .num_states, 0; while(getarraysize(getd(".woe_state_" + (.num_states)))) { set [email protected]$, ".woe_state_" + .num_states; set [email protected], 0; while([email protected] < getarraysize(getd([email protected]$))) { set .castleUsage[[email protected]], .castleUsage[[email protected]] | getd([email protected]$ + "[" + [email protected] + "]"); set [email protected], [email protected] + 1; } set .num_states, .num_states + 1; }   for(set [email protected], 0; [email protected] < .num_states; set [email protected], [email protected] + 1) { set [email protected]_state_array$, ".woe_state_" + [email protected]; for(set [email protected], 0; [email protected] < .num_regions; set [email protected], [email protected] + 1) { if(.castleUsage[[email protected]] > 0) { set [email protected]$, ".castles_" + .regions$[[email protected]] + "$"; set [email protected]_check, getd([email protected]_state_array$ + "[" + [email protected] + "]"); if([email protected]_check == 0) { //region not in this state //region warp menu string set .region_warp$[[email protected]], .region_warp$[[email protected]] + "^DD0000" + .region_names$[[email protected]] + "^000000:"; continue; } else { if([email protected]_check >= ((1 << .num_castles[[email protected]]) - 1)) { //includes all castles...just list as region. setd(".woe_state_str_" + [email protected] + "$[" + [email protected] + "]", .region_names$[[email protected]]);   //region warp menu string set .region_warp$[[email protected]], .region_warp$[[email protected]] + "^00DD00" + .region_names$[[email protected]] + "^000000:"; } else { set [email protected], 0; set [email protected]$, ""; while([email protected] < .num_castles[[email protected]]) { if([email protected]_check & (1 << [email protected])) { set [email protected]$, [email protected]$ + GetCastleName(getd([email protected]$+"["[email protected]+"]")); set [email protected]_check, [email protected]_check - (1 << [email protected]); if([email protected]astle_check) { if([email protected]$ != "")  set [email protected]$, [email protected]$ + ", "; } else break; } set [email protected], [email protected] + 1; } setd(".woe_state_str_" + [email protected] + "$[" + [email protected] + "]", .region_names$[[email protected]] + " ("+  [email protected]$ + ")");   //region warp menu string set .region_warp$[[email protected]], .region_warp$[[email protected]] + "^00DD00" + .region_names$[[email protected]] + " ("+  [email protected]$ + ")^000000:"; } } } else { set .region_warp$[[email protected]], .region_warp$[[email protected]] + ":"; } } }   donpcevent strnpcinfo(3)+"::OnFindCurIndex"; donpcevent strnpcinfo(3)+"::OnUpdateCountTick";   if(.active_woe) { if(.notify_woe) { //set mapflag for all castle maps for(set [email protected], 0; [email protected] < .num_regions; set [email protected], [email protected] + 1) { set [email protected]_array$, ".castles_" + .regions$[[email protected]] + "$"; for(set [email protected], 0; [email protected] < .num_castles[[email protected]]; set [email protected], [email protected] + 1) { setmapflag getd([email protected]_array$ + "[" + [email protected] + "]"), mf_loadevent; setd(".loadmap_region_" + getd([email protected]_array$ + "[" + [email protected] + "]"), [email protected] + 1); setd(".loadmap_castleIndex_" + getd([email protected]_array$ + "[" + [email protected] + "]"), [email protected]); } } } //activates WoE if needed donpcevent strnpcinfo(3)+"::OnDoWoE"; } //flag that init occured set .init, 1;   OnWoETimer: //timer stuff while (1) { set .remainTime, .count_tick - gettimetick(2); set .bannerTimer, .remainTime - (.remainTime % .banner_refresh_rate) + .banner_refresh_rate; set .min, .bannerTimer / 60; set .sec, .bannerTimer - .min * 60; set .hr, .min / 60; set .min, .min - .hr * 60; set .roomMsg$, .waitMsg$[.state] + .hr + ":" + ((.min < 10 )?"0":"") + .min + ":" + ((.sec < 10 )?"0":"") + .sec; sleep .timer_refresh_rate;   if(.remainTime <= 0) { if(.active_woe) { donpcevent strnpcinfo(3)+"::OnDoWoE"; } set .roomMsg$, .startMsg$[.state];   set .woe_index, (.woe_index + .state) % .num_woes; //go to next index if needed set .state, (.state + 1) % 2; //flip state   donpcevent strnpcinfo(3)+"::OnUpdateCountTick"; sleep .change_state_sleep; } } end; //obligatory end =D   OnUpdateCountTick: set .count_tick, getd(".woe_" + .state + "[" + .woe_index + "]"); set .count_tick, gettimetick(2) + .count_tick - gettimetick(1) + (.woe_day[.woe_index] - gettime(4) + 7) % 7 * .ticks_in_day;   if(gettimetick(2) > .count_tick) set .count_tick, .count_tick + 7 * .ticks_in_day; end;   OnFindCurIndex:   set [email protected]_day, gettime(4); set [email protected]_tick, gettimetick(1);   set .woe_index, 0; set .state, 0;   for(set [email protected], 0; [email protected] < .num_woes; set [email protected], [email protected] + 1) { if(.woe_day[[email protected]] < [email protected]_day) continue;   if(.woe_day[[email protected]] == [email protected]_day) { if(.woe_0[[email protected]] >= [email protected]_tick) { set .woe_index, [email protected]; set .state, 0; break; } if(.woe_1[[email protected]] >= [email protected]_tick) { set .woe_index, [email protected]; set .state, 1; break; } } if(.woe_day[[email protected]] > [email protected]_day) { set .woe_index, [email protected]; set .state, 0; break; } } end;   //On map notifier //Comment out OnPCLoadMapEvent label if .notify_woe is disabled to prevent unnecessary triggering OnPCLoadMapEvent: if(.state && .notify_woe) { getmapxy([email protected]$, [email protected], [email protected], 0); set [email protected], getd(".loadmap_region_" + [email protected]$) - 1; if([email protected] >= 0) { set [email protected], getd(".loadmap_castleIndex_" + [email protected]$); if(getd(".woe_state_" + .woe_state[.woe_index] + "[" + [email protected] + "]") & 1 << [email protected]) dispbottom "The [" + GetCastleName([email protected]$) + "] castle is available for conquering during this WoE session"; else dispbottom "The [" + GetCastleName([email protected]$) + "] castle is NOT available for conquering during this WoE session"; } } end;   //------------------------------------------------------------------------------ // WoE Controller Stuff Here //------------------------------------------------------------------------------   OnDoWoE: if((.state == 0 && .init) || (.state == 1 && !agitcheck())) { //starting callfunc "WoEToggler", 1;   //kills WoE in all castles that shouldn't have WoE set [email protected]_state_array$, ".woe_state_" + .woe_state[.woe_index]; for(set [email protected], 0; [email protected] < .num_regions; set [email protected], [email protected] + 1) { set [email protected]$, ".castles_" + .regions$[[email protected]] + "$"; set [email protected]_check, getd([email protected]_state_array$ + "[" + [email protected] + "]");   for(set [email protected], 0; [email protected] < .num_castles[[email protected]]; set [email protected], [email protected] + 1) { set [email protected]$, getd([email protected]$+"["[email protected]+"]"); if(([email protected]_check & (1 << [email protected])) == 0) { donpcevent getd(".woe_kill_" + .regions$[[email protected]] + "$[" + [email protected] + "]"); } } }   announce "The War Of Emperium has begun!",bc_all; donpcevent strnpcinfo(3)+"::OnDisplayOwners"; } else { //ending if(agitcheck()) { callfunc "WoEToggler", 0; announce "The War Of Emperium is over!",bc_all; donpcevent strnpcinfo(3)+"::OnDisplayOwners"; } } end;   OnDisplayOwners: //displays based on current region set [email protected]_state_array$, ".woe_state_" + .woe_state[.woe_index]; for(set [email protected], 0; [email protected] < .num_regions; set [email protected], [email protected] + 1) { set [email protected], 0;   set [email protected]_check, getd([email protected]_state_array$ + "[" + [email protected] + "]"); set [email protected]$, ".castles_" + .regions$[[email protected]] + "$";   while([email protected]_check && [email protected] < .num_castles[[email protected]]) { if([email protected]_check & (1 << [email protected])) { set [email protected]$, getd([email protected]$+"["[email protected]+"]"); if (GetCastleData([email protected]$,1)) { announce "The [" + GetCastleName([email protected]$) + "] castle of the [" + .region_names$[[email protected]] + "] region is currently held by the [" + GetGuildName(GetCastleData([email protected]$,1)) + "] guild.",bc_all; } else { announce "The [" + GetCastleName([email protected]$) + "] castle of the [" + .region_names$[[email protected]] + "] region is currently unoccupied.",bc_all; } set [email protected]_check, [email protected]_check - (1 << [email protected]); } set [email protected], [email protected] + 1; } } end; } cydonia,125,166,4 script WoE Info 837,{ if(getwaitingroomstate(3, strnpcinfo(3)) == -1) donpcevent strnpcinfo(3)+"::OnInit";   doevent "WoEInfoBase::OnStartMenu"; end;   OnInit: while (1) { //only updates if msg is different set .banner$, getwaitingroomstate(4, strnpcinfo(3)); if(getvariableofnpc(.roomMsg$, "WoEInfoBase") != .banner$) { delwaitingroom; waitingroom getvariableofnpc(.roomMsg$, "WoEInfoBase"), 0; } sleep 500; } end; }   //zomg! it duplicates!! cydonia,137,109,6 duplicate(WoE Info) WoE Info#2winfo 837   //---------------------------------------------------------------------------------------------------------------------   //These two functions handle WoE's activation/deactivation. Since stable does not have AgitStart2/AgitEnd2,  //using the trunk version will result in catastrophic failure of the script. Double declaration of the following //functions fixes this (you will get warning messages though)   function script WoEToggler { //<state> = 0|1 if(getarg(0)) { AgitStart; } else { AgitEnd; } return; }   //if stable script will fail parsing this function, but the rest of the script will still be usable function script WoEToggler { //<state> = 0|1 if(getarg(0)) { AgitStart; AgitStart2; } else { AgitEnd; AgitEnd2; } return; }
    My friend helped me Capuche here to be the solution
     
    fix
                announce "The War Of Emperium has begun!",bc_all;             callsub "OnDisplayOwners";         } else {            //ending             if(agitcheck()) {                 callfunc "WoEToggler", 0;                 announce "The War Of Emperium is over!",bc_all;                 callsub "OnDisplayOwners",1;             }         }         end;              OnDisplayOwners:    //displays based on current region         set [email protected]_state_array$, ".woe_state_" + .woe_state[.woe_index];         for(set [email protected], 0; [email protected] < .num_regions; set [email protected], [email protected] + 1) {             set [email protected], 0;                          set [email protected]_check, getd([email protected]_state_array$ + "[" + [email protected] + "]");             set [email protected]$, ".castles_" + .regions$[[email protected]] + "$";                          while([email protected]_check && [email protected] < .num_castles[[email protected]]) {                 if([email protected]_check & (1 << [email protected])) {                     set [email protected]$, getd([email protected]$+"["[email protected]+"]");                     set [email protected], GetCastleData([email protected]$,1);                     if ( [email protected] ) {                         announce "The [" + GetCastleName([email protected]$) + "] castle of the [" + .region_names$[[email protected]] + "] region is currently held by the [" + GetGuildName(GetCastleData([email protected]$,1)) + "] guild.",bc_all;                         if ( getarg(0,0) ) {                             set [email protected], query_sql( "select account_id from `char` where guild_id = "+ [email protected] +" and online = 1", [email protected] );                             for ( set [email protected], 0; [email protected] < [email protected]; set [email protected], [email protected] +1 )                                 getitem 7539,15, [email protected][[email protected]];                         }                     } else {                         announce "The [" + GetCastleName([email protected]$) + "] castle of the [" + .region_names$[[email protected]] + "] region is currently unoccupied.",bc_all;                     }                     set [email protected]_check, [email protected]_check - (1 << [email protected]);                 }                                 set [email protected], [email protected] + 1;                     }         }         end; }
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.