-
Content Count
333 -
Joined
-
Last visited
-
Days Won
8
Content Type
Profiles
Forums
Downloads
Staff Applications
Calendar
Everything posted by astralprojection
-
any update with this?
-
//===== Hercules Script ====================================== // MVP Spawn Controller //===== By: ================================================== // astralprojektion //===== Current Version: ===================================== // 1.3 //===== Description: ========================================= // Control MVP Spawn with script. MVP will not respawn on server start or reload using flag. // Delete or Comment all MVP and mini boss spawn at npc/pre-re/mobs/dungeons/ or /fields. // Make sure set at NifInvasion to make it work. // OnLoDDead: // // Set LOD as dead ang next respawn is 5580sec // $S11373 = 2; $T11373 = (gettimetick(2) + 5580); // //===== Additional Comments: ================================= // 1.0 Initial Release // 1.1 Use TimeStamp when mvp is killed // Fixed typo on MVP_Map array. // 1.2 Set Variables to Global. // 1.3 Include some Mini Boss on the controller // Added PvP On/Off MvP is alive // Integrate LOD invasion // Added @mvpcontroller command to reset all or a specific mvp and other settings. //============================================================ /* Credits to Meko https://herc.ws/board/files/file/326-array-manipulation-functions/ */ function script array_find { .@size = getarraysize(getarg(0)); .@neq = getarg(2, false); freeloop(true); for (.@i = getarrayindex(getarg(0)); .@i < .@size; ++.@i) { if ((.@neq && (getelementofarray(getarg(0), .@i) != getarg(1))) || (!(.@neq) && (getelementofarray(getarg(0), .@i) == getarg(1)))) { freeloop(false); return .@i; } } freeloop(false); return -1; } - script mvpcontroller FAKE_NPC,{ end; OnNPCKillEvent: if(array_find(.mvpid, killedrid) >= 0 ){ for( .@i = 0; .@i < getarraysize(.mvpid); .@i++ ) { if( killedrid == .mvpid[.@i] && strcharinfo(PC_MAP) == .mvpmaps$[.@i]) { // 1 - Alive 2 - Dead setd("$S"+.mvpa[.@i]+.mvpid[.@i], 2); // current time + respawn time (seconds) setd("$T"+.mvpa[.@i]+.mvpid[.@i],gettimetick(2)+(.mvptime[.@i]*60)); setd("$P"+.mvpa[.@i]+.mvpid[.@i]+"$", strcharinfo(PC_NAME)); if( killedrid == 1120 || killedrid == 1096 || killedrid == 1388 ) { if(.announce) announce "A mini boss monster [ "+strmobinfo(1,killedrid)+" ] at "+strcharinfo(PC_MAP)+" has been slain.",bc_all; } else { if(.announce) announce "A boss monster [ "+strmobinfo(1,killedrid)+" ] at "+strcharinfo(PC_MAP)+" has been slain.",bc_all; if(.pvp){ removemapflag .mvpmaps$[.@i], mf_pvp_nocalcrank; pvpoff .mvpmaps$[.@i]; } } break; } } } end; OnSettings: while(1){ switch(select( " ~ PvP On Map [ "+((.pvp)?"^28bf00Yes^000000":"^ff0000No^000000")+" ]:"+ " ~ Announce [ "+((.announce)?"^28bf00Yes^000000":"^ff0000No^000000")+" ]:"+ " ~ Reset All MvP:"+ " ~ Reset Specific MvP:"+ " ~ ^777777Close^000000" )) { case 1: .pvp =! .pvp; for( .@i = 0; .@i < getarraysize(.mvpid); .@i++ ) { if ( getd("$S"+.mvpa[.@i]+.mvpid[.@i]) < 2 || getd("$T"+.mvpa[.@i]+.mvpid[.@i]) <= gettimetick(2) ) { // if mini boss, just ignore pvp if(.pvp){ if(.mvpid[.@i] == 1120 || .mvpid[.@i] == 1096 || .mvpid[.@i] == 1388 ){ //PASS THROUGH } else { setmapflag .mvpmaps$[.@i], mf_pvp_nocalcrank; pvpon .mvpmaps$[.@i]; } } else { removemapflag .mvpmaps$[.@i], mf_pvp_nocalcrank; pvpoff .mvpmaps$[.@i]; } } } break; case 2: .announce =! .announce; break; case 3: freeloop(1); for( .@i = 0; .@i < getarraysize(.mvpid); .@i++ ) { setd("$S"+.mvpa[.@i]+.mvpid[.@i], 1); setd("$T"+.mvpa[.@i]+.mvpid[.@i], 0); setd("$P"+.mvpa[.@i]+.mvpid[.@i]+"$",""); killmonsterall .mvpmaps$[.@i]; } for( .@i = 0; .@i < getarraysize(.mvpid); .@i++ ) { if( compare( .mvpmaps$[.@i], "prt_maze03" ) && .mvpid[.@i] == 1039 ) { // Baphomet monster .mvpmaps$[.@i],100,100,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "treasure02" ) && .mvpid[.@i] == 1112 ) { // Drake monster .mvpmaps$[.@i],101,151,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "pay_dun04" ) && .mvpid[.@i] == 1150 ) { // moonlight monster .mvpmaps$[.@i],120,115,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "tur_dun04" ) && .mvpid[.@i] == 1312 ) { // turtle monster .mvpmaps$[.@i],99,93,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "moc_pryd06" ) && .mvpid[.@i] == 1511 ) { // amon monster .mvpmaps$[.@i],102,166,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "ayo_dun02" ) && .mvpid[.@i] == 1688 ) { // lady monster .mvpmaps$[.@i],150,90,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "niflheim" ) && .mvpid[.@i] == 1373 ) { // LOD donpcevent("NifInvasion::OnSpawn"); } else { monster .mvpmaps$[.@i],0,0,"--ja--",.mvpid[.@i],1; } if(.pvp){ if(.mvpid[.@i] == 1120 || .mvpid[.@i] == 1096 || .mvpid[.@i] == 1388 ){ //PASS THROUGH } else { setmapflag .mvpmaps$[.@i], mf_pvp_nocalcrank; pvpon .mvpmaps$[.@i]; } } else { removemapflag .mvpmaps$[.@i], mf_pvp_nocalcrank; pvpoff .mvpmaps$[.@i]; } } freeloop(0); dispbottom "All MVP has been reset."; break; case 4: set .@menu$,""; freeloop(1); for( .@i = 0; .@i < getarraysize(.mvpid); .@i++ ) set .@menu$, .@menu$+getmonsterinfo(.mvpid[.@i],0)+" - ("+.mvpmaps$[.@i]+"):"; set .@menu$, .@menu$+" ~ ^777777Cancel^000000"; freeloop(0); set .@i, select(.@menu$)-1; setd("$S"+.mvpa[.@i]+.mvpid[.@i], 1); setd("$T"+.mvpa[.@i]+.mvpid[.@i], 0); setd("$P"+.mvpa[.@i]+.mvpid[.@i]+"$",""); killmonsterall .mvpmaps$[.@i]; monster .mvpmaps$[.@i],0,0,"--ja--",.mvpid[.@i],1; if(.pvp){ if(.mvpid[.@i] == 1120 || .mvpid[.@i] == 1096 || .mvpid[.@i] == 1388 ){ //PASS THROUGH } else { setmapflag .mvpmaps$[.@i], mf_pvp_nocalcrank; pvpon .mvpmaps$[.@i]; } } else { removemapflag .mvpmaps$[.@i], mf_pvp_nocalcrank; pvpoff .mvpmaps$[.@i]; } dispbottom "Monster [ "+strmobinfo(1,.mvpid[.@i])+" ] at "+.mvpmaps$[.@i]+" has been reset."; break; default: close; } } close; OnTimer60000: // Let recheck after a minute. for( .@i = 0; .@i < getarraysize(.mvpid); .@i++ ) { /* $S 1 - Alive $S 2 - Dead */ // If MvP status is not yet set if ( getd("$S"+.mvpa[.@i]+.mvpid[.@i]) == 2 && getd("$T"+.mvpa[.@i]+.mvpid[.@i]) <= gettimetick(2) ) { // check if MvP has fixed spawn location in the map. if( compare( .mvpmaps$[.@i], "prt_maze03" ) && .mvpid[.@i] == 1039 ) { // Baphomet monster .mvpmaps$[.@i],100,100,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "treasure02" ) && .mvpid[.@i] == 1112 ) { // Drake monster .mvpmaps$[.@i],101,151,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "pay_dun04" ) && .mvpid[.@i] == 1150 ) { // moonlight monster .mvpmaps$[.@i],120,115,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "tur_dun04" ) && .mvpid[.@i] == 1312 ) { // turtle monster .mvpmaps$[.@i],99,93,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "moc_pryd06" ) && .mvpid[.@i] == 1511 ) { // amon monster .mvpmaps$[.@i],102,166,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "ayo_dun02" ) && .mvpid[.@i] == 1688 ) { // lady monster .mvpmaps$[.@i],150,90,"--ja--",.mvpid[.@i],1; // Initiate LOD invasion at Niflheim } else if( compare( .mvpmaps$[.@i], "niflheim" ) && .mvpid[.@i] == 1373 ) { // LOD donpcevent("NifInvasion::OnSpawn"); } else { // Spawn the MvP at random location. monster .mvpmaps$[.@i],0,0,"--ja--",.mvpid[.@i],1; } if(.announce) announce "Monster [ "+strmobinfo(1,.mvpid[.@i])+" ] at "+.mvpmaps$[.@i]+" has been spawned.",bc_all; // set status of MvP as ALIVE! setd("$S"+.mvpa[.@i]+.mvpid[.@i], 1); // reset killer name. setd("$P"+.mvpa[.@i]+.mvpid[.@i]+"$", ""); if(.pvp){ // if mini boss, just ignore pvp if(.mvpid[.@i] == 1120 || .mvpid[.@i] == 1096 || .mvpid[.@i] == 1388 ){ //PASS THROUGH } else { setmapflag .mvpmaps$[.@i], mf_pvp_nocalcrank; pvpon .mvpmaps$[.@i]; } } else { removemapflag .mvpmaps$[.@i], mf_pvp_nocalcrank; pvpoff .mvpmaps$[.@i]; } } } initnpctimer(); end; OnCheck: OnPCLoginEvent: .@rank = 0; query_sql "SELECT DATABASE()", .@rag_db$; query_logsql "SELECT DATABASE()", .@log_db$; query_sql( "SELECT COUNT(`monster_id`) AS `total`,`char`.`name`,`kill_char_id` FROM "+.@log_db$+".`mvplog`"+" LEFT JOIN "+.@rag_db$+".`char` ON `char`.`char_id` = `mvplog`.`kill_char_id` WHERE `map` <> 'guild_vs5' AND DATE_FORMAT( `mvp_date`, '%Y-%m-%d') = DATE_FORMAT( now(), '%Y-%m-%d') GROUP BY `kill_char_id` ORDER BY `total` DESC LIMIT 10",.@mvptotal,.@mvpname$,.@kill_char_id ); for( .@i = 0; .@i < getarraysize(.@kill_char_id); .@i++ ) { if(getcharid(CHAR_ID_CHAR) == .@kill_char_id[.@i]){ .@rank = .@i+1; .@total = .@mvptotal[.@i]; } } if ( .@rank > 0 && .@rank < 4 ) { if(countitem(.topreward) == 0){ dispbottom "Congratulations you ranked as #"+.@rank+" MvP Hunter for today. Total kill "+.@total; getitembound .topreward,1,4; equip(.topreward); } } else { if(countitem(.topreward) > 0){ delitem .topreward,countitem(.topreward); dispbottom "Sorry you have lost your rank as Top 3 MvP Hunter of the day."; } } addtimer 300000,strnpcinfo(0) + "::OnCheck"; end; OnInit: .topreward = 31488; // top mvp daily reward .toprange = 3; // Only Top 3 gets the reward .announce = 1; // shall we announce mvp kills and spawn? (yes = 1 no = 0) .pvp = 1; // shall will make the map pvp? (yes = 1 no = 0) bindatcmd("mvpcontroller","mvpcontroller::OnSettings",99,99); // Mvp ids setarray .mvpid[0],1511,1096,1096,1388,1039,1272,1272,1046,1046,1389,1112,1115,1115,1418,1252,1120,1120,1120,1120,1086,1492,1251,1147,1147,1059,1150,1087,1190,1038,1157,1159,1312,1373,1630,1688; // Mvp Index is used because there are same mvp that spawn on different maps. setarray .mvpa[0],1,1,2,1,1,1,2,1,2,1,1,1,2,1,1,1,2,3,4,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1; // MvP maps setarray .mvpmaps$[0],"moc_pryd06","pay_fild04","xmas_dun01","yuno_fild02","prt_maze03","gl_chyard","gld_dun04","gef_dun02","gld_dun02","gef_dun01","treasure02","gld_dun01","pay_fild11","gon_dun03","xmas_fild01","gld_dun04","pay_fild04","prt_maze03","treasure02","prt_sewb4","ama_dun03","xmas_dun02","anthell02","gld_dun03","mjolnir_04","pay_dun04","gef_fild14","gef_fild10","moc_pryd04","in_sphinx5","moc_fild15","tur_dun04","niflheim","lou_dun03","ayo_dun02"; // How many minutes to respawn? setarray .mvptime[0],60,60,60,60,120,60,480,120,480,60,120,480,120,95,120,240,60,114,32,60,91,60,120,480,120,60,60,120,60,60,120,60,93,117,420; freeloop(1); for( .@i = 0; .@i < getarraysize(.mvpid); .@i++ ) { // If MvP status is not yet set if ( getd("$S"+.mvpa[.@i]+.mvpid[.@i]) < 2 || getd("$T"+.mvpa[.@i]+.mvpid[.@i]) <= gettimetick(2) ) { // check if MvP has fixed spawn location in the map. if( compare( .mvpmaps$[.@i], "prt_maze03" ) && .mvpid[.@i] == 1039 ) { // Baphomet monster .mvpmaps$[.@i],100,100,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "treasure02" ) && .mvpid[.@i] == 1112 ) { // Drake monster .mvpmaps$[.@i],101,151,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "pay_dun04" ) && .mvpid[.@i] == 1150 ) { // moonlight monster .mvpmaps$[.@i],120,115,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "tur_dun04" ) && .mvpid[.@i] == 1312 ) { // turtle monster .mvpmaps$[.@i],99,93,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "moc_pryd06" ) && .mvpid[.@i] == 1511 ) { // amon monster .mvpmaps$[.@i],102,166,"--ja--",.mvpid[.@i],1; } else if( compare( .mvpmaps$[.@i], "ayo_dun02" ) && .mvpid[.@i] == 1688 ) { // lady monster .mvpmaps$[.@i],150,90,"--ja--",.mvpid[.@i],1; // Initiate LOD invasion at Niflheim } else if( compare( .mvpmaps$[.@i], "niflheim" ) && .mvpid[.@i] == 1373 ) { // LOD donpcevent("NifInvasion::OnSpawn"); } else { // Spawn the MvP at random location. monster .mvpmaps$[.@i],0,0,"--ja--",.mvpid[.@i],1; } // set status of MvP as ALIVE! setd("$S"+.mvpa[.@i]+.mvpid[.@i], 1); // status is alive (1) // reset killer name. setd("$P"+.mvpa[.@i]+.mvpid[.@i]+"$", ""); // killer name reset if(.pvp){ // if mini boss, just ignore pvp if(.mvpid[.@i] == 1120 || .mvpid[.@i] == 1096 || .mvpid[.@i] == 1388 ){ //PASS THROUGH } else { setmapflag .mvpmaps$[.@i], mf_pvp_nocalcrank; pvpon .mvpmaps$[.@i]; } } else { removemapflag .mvpmaps$[.@i], mf_pvp_nocalcrank; pvpoff .mvpmaps$[.@i]; } } } freeloop(0); initnpctimer(); end; } /* If you want your player have access to spawn time, you can use this function to display status of each MvP and who killed them { Id: 501 AegisName: "Red_Potion" Name: "Red Potion" Type: "IT_HEALING" Buy: 50 Weight: 70 Script: <" callfunc "F_MVPTime"; "> }, */ function script F_MVPTime { mes "^FF0000MvP Status^000000"; for( .@i = 0; .@i < getarraysize(getvariableofnpc(.mvpid,"mvpcontroller")); .@i++ ) { .@time = getd("$T" +getvariableofnpc(.mvpindex[.@i],"mvpcontroller") + getvariableofnpc(.mvpid[.@i],"mvpcontroller")); .@alive = getd("$S" +getvariableofnpc(.mvpindex[.@i],"mvpcontroller") + getvariableofnpc(.mvpid[.@i],"mvpcontroller")); set .@hours, (.@time - gettimetick(2)) / 3600; set .@mins, (.@time - gettimetick(2))%3600/60; set .@secs, (.@time - gettimetick(2))%60; set .@mobname$,getmonsterinfo( getvariableofnpc(.mvpid[.@i], "mvpcontroller"),0 ); set .@map$,getvariableofnpc(.mvpmaps$[.@i], "mvpcontroller"); set .@player$,getd("$P"+getvariableofnpc(.mvpindex[.@i], "mvpcontroller") + getvariableofnpc(.mvpid[.@i], "mvpcontroller") +"$"); mes ((.@alive == 1) ? "[ ^01DF01+^000000 ]" : "[ ^FF0000x^000000 ]")+((getstrlen( .@mobname$ ) > 10 ) ? " ^0055FF"+substr(.@mobname$,0, 10)+"^000000" : " ^0055FF"+.@mobname$+"^000000")+" ^777777"+.@map$+"^000000 "; if( .@alive == 2 ) { mes "^FF0000"+((.@hours) ? .@hours +"h" : "")+" "+((.@mins) ? .@mins +"m" : "")+" "+((.@secs) ? .@secs +"s" : "")+"^000000 "+"^777777 kiiled by "+.@player$+"^000000"; } } close; } What does it do? - prevents spawn of mvp on each server starts or reload. - spawns mvp or mini only at specific time based when it was killed + spawn time - reward x top mvp killers. Cons: - you can not use convex mirrors to show mvp in the map - you can not find mvp using @whereis. How to use: - Delete or Comment target MVP and mini boss spawn from your npc/pre-re/mobs/dungeons/ or /fields. - Add these mvps to array. FAQ: #Q1 What the heck is this? setarray .mvpa[0],1,1,2,1,1,1,2,1,2,1,1,1,2,1,1,1,2,3,4,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1; #A1: since there are same kind of MVP spawn on multile map (i.e Angeling spawns at pay_fild04, xmas_dun01, yuno_fild03) those numbers are the unique identifiers. if there is only 1 spawn, then just write 1. succeeding spawn is 2 then 3 .... All other suggestions to simplify and improve @AnnieRuru yohoo! my master.
-
MVP Respawn on server restart
astralprojection replied to xJhay's question in General Server Support
anyway, i will release full script after i finish in a while. -
MVP Respawn on server restart
astralprojection replied to xJhay's question in General Server Support
1. Delete or Comment all MVP and mini boss spawn at npc/pre-re/mobs/dungeons/ or /fields. 2. add all MobID, spawn time and map of mvp to array. OnInit: setarray .mvpid[0],1511,1039; <- osiris and baphomet setarray .mvptime[0],60,60; setarray .mvpmaps$[0],"moc_pryd06","prt_maze03"; 3. Upon script load add global variables to each item in .mvpid and initialize timer. OnInit: /* Loop to each mvp. lets set global variable getd("$S"+.mvpid[.@i] = 0 <- not set getd("$S"+.mvpid[.@i] = 1 <- alive getd("$S"+.mvpid[.@i] = 2 <- dead */ for( .@i = 0; .@i < getarraysize(.mvpid); .@i++ ) { /* if variable is not yet set or getd("$S"+.mvpid[.@i] < 2 (alive or not set) OR time from setarray .mvptime[0] has elapse setd("$S"+.mvpid[.@i],1); (alive) spawn .mvpid[.@i] } */ } initnpctimer(); 4 Check every 1 minutes OnTimer60000: for( .@i = 0; .@i < getarraysize(.mvpid); .@i++ ) { /* same thing just check on each mvp if flag is dead then skip, if alive then spawn. if variable is not yet set or getd("$S"+.mvpid[.@i] < 2 (alive or not set) OR time from setarray .mvptime[0] has elapse set global mvp status variable to (alive) clear global mvp death variable. spawn .mvpid[.@i] } */ } initnpctimer(); 5. Finally, record if mvp is killed and set flag to killed. /* must load that useful function array_find from meko https://herc.ws/board/files/file/326-array-manipulation-functions/ */ OnNPCKillEvent: if(array_find(.mvpid, killedrid) >= 0 ){ // check if monster killed is part of your mvp array // loop to that array until it matches mvpid and map for( .@i = 0; .@i < getarraysize(.mvpid); .@i++ ) { // if match then set variable to dead and set the global mvptime variable to timestamp. break; } } end; -
its very impossible to fix that unless you showing the script.
-
is there any reason why we need to do that?
-
its not only 2010, i have tried 2018 , its also same. i saw this report also https://github.com/HerculesWS/Hercules/issues/2925
-
PRE-RE 2010-07-30aRagexeRE
-
yes using latest herc now with no mod and using official database. Sometimes its okay, but there are times that i experience the issue for unknown reason.
-
- i press Butterfly, 2x not working. - 3rd time working. - i warp to dungeons and press flywing (it brings me to savepoint). too annoying
-
Still getting this nasty unknown HERC itemskill bug. Still not able to identify how to simulate. PRE-RE - Using flywing, butterfly wing or other consumable dont function but deduct item from inventory. I hope it will be fix, its been long time experience this issue with players.
-
excited
-
1. its usually inter-network issue, if you host your server at Singapore and player connecting from Europe, then you will be having lots of those packet loss. 2. Your net provider (ISP) maybe having issue or maintenance along the route. 3. You maybe have high net usage at your home network.
-
account id in your database has 8 digit while your account id in your clientinfo has 7 only.
-
Disable/dispell certain skill buff in certain map
astralprojection replied to Kuroyama's question in General Server Support
correct me if im wrong map zone only prevents u to cast a skill, if u enter a restricted zone with that buff, it will ignore it -
@4144 i can confirm this bug.
-
are there any modification on eddga card script? check if it has OnUnequipScript: <" sc_end SC_ENDURE; ">
-
check if you have other items equip with endure bonus.
-
Disable/dispell certain skill buff in certain map
astralprojection replied to Kuroyama's question in General Server Support
try OnPCLoadMapEvent: - script OnPCLoadMapEvent HIDDEN_NPC,{ end; OnPCLoadMapEvent: if ( strcharinfo(PC_MAP) == "new_1-1" ) if(getstatus(SC_BLESSING)) sc_end SC_BLESSING; end; Oninit: setmapflag "new_1-1", mf_loadevent; end; } -
Custom Healing Item ** no visual effect **
astralprojection replied to astralprojection's question in Database Support
Thanks for the answer. that is why thanks also for sharing the workaround. -
Been looking but i cant figure this out. 1. I made a custom ID of WHITE_POTION > WHITE_POTION_F and copy the script. 2. the healing actually works but i missed that white potion visual effect when you use the item. I hope someone can help me out.
-
not tested by u can try - script woe_joblimit FAKE_NPC,{ end; OnPCLoadMapEvent: .@guild_id = getcharid(CHAR_ID_GUILD); if (!.@guild_id || !getmapflag(strcharinfo(PC_MAP), MF_GVG_CASTLE) || !agitcheck() || !agitcheck2() ) end; if(.joblimit){ .@origin = playerattached(); .@class = Class; .@map$ = strcharinfo(PC_MAP); .@climit = 0; getguildmember getcharid(CHAR_ID_GUILD), 1; getguildmember getcharid(CHAR_ID_GUILD), 2; for ( .@i = 0; .@i < $@guildmembercount; ++.@i ) { if (isloggedin( $@guildmemberaid[.@i], $@guildmembercid[.@i] ) == 0) { continue; } else { if (attachrid($@guildmemberaid[.@i])) { if( .@class == Class && strcharinfo(PC_MAP) == .@map$ ) { ++.@climit; } } } } if ( .@origin ) { attachrid(.@origin); if(.@climit > .joblimit){ message strcharinfo(0), "REGULATION: Your guild reached the max of ( "+.joblimit+" ) "+jobname(Class)+" that can join the siege."; warp "SavePoint",0,0; } } else { detachrid; } } end; OnInit: .joblimit = 6; setarray .castle$[0], "aldeg_cas01","aldeg_cas02","aldeg_cas03","aldeg_cas04","aldeg_cas05", "gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05", "payg_cas01","payg_cas02","payg_cas03","payg_cas04","payg_cas05", "prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05", "arug_cas01","arug_cas02","arug_cas03","arug_cas04","arug_cas05", "schg_cas01","schg_cas02","schg_cas03","schg_cas04","schg_cas05"; for (.@i = 0; .@i < 30; ++.@i) { setmapflag .castle$[.@i], MF_GVG_CASTLE; setmapflag .castle$[.@i], MF_LOADEVENT; } end; }
-
Looking for service to setup server
astralprojection replied to zect00's topic in General Discussion
i would not recommend any. its better to learn it by your self rather than hire people. what will happen if that person leaves you in the mid? you will not know what to do = server close. try a test server in local machine 1st and figure it out. -
SimpleROHook for 2002 to 2020+ clients
astralprojection replied to X-EcutiOnner's topic in Client-Side Releases
what does it do.? -
very nice tutorial indeed. can you also add IF NOT EXIST INSERT ELSE UPDATE Thanks for the guide.