Jump to content

KhrizPlayCL

Members
  • Posts

    17
  • Joined

  • Last visited

Everything posted by KhrizPlayCL

  1. yo he logrado hacer funcionar el monster spawn con la ultima version de FluxCP 2021, modificando todos los archivos de item DB del Addons if($server->isRenewal) { $fromTables = array("{$server->charMapDatabase}.item_db_re", "{$server->charMapDatabase}.item_db2_re"); } else { $fromTables = array("{$server->charMapDatabase}.item_db", "{$server->charMapDatabase}.item_db2"); a if($server->isRenewal) { $fromTables = array("{$server->charMapDatabase}.item_db_re_compat", "{$server->charMapDatabase}.item_db2_re_compat"); } else { $fromTables = array("{$server->charMapDatabase}.item_db_compat", "{$server->charMapDatabase}.item_db2_compat"); creando las vistas en la DB según las indicaciones Rathena el problema es que al cargar la carpeta NPC en el FluxCP se muestra todo correcto pero al revisar al detalle la DB "mob_spawns" veo que las hay casilla invertidas entre el range_y con mob_id y count con name, haciendo que no todos los mob se muestren de forma correcta en el flux ¿alguien tendrá alguna idea de como corregir la lectura del de la carpeta NPC? saludos,
  2. @cook1e estimado amigo acabo de realizar lo indicado, pero aun así no logro ver el ranking tampoco se guarda nada en la DB
  3. @cook1e muchas gracias por la respuesta, pero esto ya lo tengo configurado en pre-renewal en FluxCP/config/servers.php, pero aun así no logro que muestre el ranking, tendré que habilitar algún NPC dentro del servidor para que se pueda mostrar
  4. tengo el mismo problema con los MVP log, Rankink MVP e item/mob DB, tengo todos los datos los datos en mi DB, pero por alguna razón no funciona.
  5. Estimados, colegas muy buenas tardes recurro a ustedes para poder ajustar el siguiente NPC de "Auto Event" a un emulador Rathena Actualizado, con una versión de cliente 2018 PRE-Renewal, en la siguiente version posteada e logrado corregir algunos errores como por ejemplo: Las Emociones de los NPC. Cambie los Item de premio por x50 Poring Coin y 1M de zeny. Quite el "Evento Shops" ya no se justificaba en mi servidor. Algunas correcciones de mapas. Solucionar problema de la función "dispell" Pero aun no logro corregir algunos errores y es por eso que recurro a ustedes, para que me puedan ayudar El evento de Emp Breaker manda un error despues de agregar la instancia [Info]: [Instance] Created map '0282#000003' (921) from 'sword_1-1' (282). [Error]: status_calc_mob: No castle set at map 0282#000003 El Evento "Poring Event" no se detiene automaticamente despues de tener un ganador. El Evento "Zombie Event" no termina si solo queda un jugador en pie. //===== EinherjarRO Scripts ================================== //= Auto Event //===== By: ================================================== //= Stolao //===== Current Version: ===================================== //= 2.5A //===== Compatible With: ===================================== //= rAthena SVN //===== Description: ========================================= //= Auto Event //===== Comments: ============================================ //= [Stolao] // db/import/instance_db.txt // 30,Emp Breaker,900,300,sword_1-1,215,206 // // src/map/chat.h // #define MAX_CHAT_USERS 20 // Increase as needed for your server size // //===== To Do: =============================================== //= Make Rewards Editable in game //= Add A Vote4Event(ingame) Feature //= Add Events; Invasion, X-O Event, MVP Arena, //= Dead Branch, Wiki, Jumper, Fast Type, Safetywall //= Add Other Requested Events //= Fix Manually Removing Events Overflow Error (not game breaking) //===== Additional Comments: ================================= //= 2.38 Added No_Trade flag to bomring and poring events //= 2.39 Added Find th Baphomet //= 2.3A Added Grab the Candy! //= 2.3B Added Monsters Counting (requires the server to be compiled with regular expressions library enabled) //= 2.3C Combined OnPCLogout Events //= 2.3D Added Disgusie Event //= 2.3E Replaced 'strnpcinfo()' type 0 and 1 with type 3 //= 2.3F Removed dependencey on regular expressions library for Disguise and Coutning //= 2.40 Fixed Poring Event setting mapflags non-dynamic map //= 2.41 Added Fabre Event //= 2.42 Fixed Emp Event Failing to annouce not enough players //= 2.43 Fixed Zombie Failing to start due to negative index //= 2.44 Added Devil Square //= 2.45 Certain mapflags no loger removed on events end //= 2.46 Warp Players to Save instead of Prontera //= 2.47 Made default time for emp event ~23 Days //= 2.48 Added a player death check to zombie event //= 2.49 Fixed a loop issue in PVP //= 2.4A Players warp to prontera instead of save, apperenetly map warp doesnt support "Save" //= 2.4B Fixed Lucky Pick //= 2.4C Fixed a missing "" in maze event //= 2.4D Added a check so Mushroom Event will always have at least 1 mushroom //= 2.4E Fixed incorrect map index for Mushroom and Bapho events //= 2.4F Fixed incorrect event index for Mushroom and Bapho events //= 2.50 Added a Gm diplay count for mob counting event if Testmode is enabled //= 2.51 Removed map warp from counting event //= 2.52 Counting event now properly removes mobs at events end //= 2.53 Removed SQL dependency from Fabre event //= 2.54 Added Warp out for disgusie event //= 2.55 Disabled Countdown timer in disguse event //= 2.56 Fixed incorrect Rules check //= 2.57 Added a Gm diplay mob name for disguise event for gm 99 //= 2.58 Fixed incorrect mapindex for disguise event //= 2.59 Devil Square now rewards all players once last chest is killed //= 2.5A Fabre event now propery kills monsters at end //===== Contact Ifo: ========================================= //= [Stolao] //= Email: [email protected] //============================================================ prontera,164,171,4 script Event Information 835,{ function Func_Countdown; function Func_Add_Time; function Func_Prizes; freeloop(1); //================================== //-- Special Checks //================================== if($@CurrentEvent == -14){ if(getgmlevel() >= .GMAccess && .TestMode) dispbottom .MobCount[.@Target]+""; input .@i; if(.@i == .MobCount[.@Target]) doevent strnpcinfo(3)+"::OnRight"; else doevent strnpcinfo(3)+"::OnSpam"; end; } //================================== OnMenu: //-- Click Menus //================================== mes "[ Event Information ]"; if($@CurrentEvent > 0) mes "Current Event: ",.ColorName$[$@CurrentEvent]," "; .@Time = gettime(4) * 24 + gettime(3); for(.@i = .@Time + ((gettime(2)>.StartTime?1:0)); .@i < .@Time + 168; .@i++){ if($EVENT_CONTROL[.@i%168]){ mes "Next Event:",.ColorName$[ $EVENT_CONTROL[ (.@i % 168) ] ] +" ~ "+ .Days$[ .@i % 168 / 24 ] +" - "+ Func_Add_Time( (.@i % 168) % 24); .@e += 1; break; } } if(!.@e) mes "Auto Events Disabled."; switch(select((($@CurrentEvent > 0)?" ~ Join event...:":":")+ ((.@e)?" ~ Check schedule...:":":")+ ((getgmlevel() < .GMAccess)?":":" ~ Manage events...:")+ (($@EventRanking & 1)?" ~ Monthly Ranking:":":")+ (($@EventRanking & 2)?" ~ Lifetime Ranking:":":")+ ": ~ ^777777Cancel^000000")) { case 2: for(.@i = 0; .@i < 168; .@i++){ if( !( ( .@i ) % 24 )){ next; mes "[ "+ .Days$[.@i / 24] +" Event Schedule ]"; } if($EVENT_CONTROL[.@i]) mes .ColorName$[$EVENT_CONTROL[.@i]] +" ~ "+ Func_Add_Time(.@i % 24); } close; case 4: query_sql("SELECT char_id, CAST(`value` AS SIGNED) FROM `char_reg_num` WHERE `key` = 'MWonEvents' ORDER BY CAST(`value` AS SIGNED) DESC LIMIT 10",.@cid,.@value); case 5: if(!.@cid) query_sql("SELECT char_id, CAST(`value` AS SIGNED) FROM `char_reg_num` WHERE `key` = 'WonEvents' ORDER BY CAST(`value` AS SIGNED) DESC LIMIT 10",.@cid,.@value); for(.@x = 0; .@x < getarraysize(.@cid); .@x++) { query_sql("SELECT `name` FROM `char` WHERE char_id = "+.@cid[.@x]+";",.@j$); .@name$[.@x] = .@j$; } next; mes "~ ^990000"+((.@m)?"Monthly ":"") +"Event Ladder^000000 ~"; if (!getarraysize(.@cid)) mes "The rankings are empty."; else { for(.@i = 0; .@i < getarraysize(.@cid); .@i++) mes "#"+(.@i+1)+" ^0000FF"+.@name$[.@i]+"^000000 "+.@value[.@i]; } close; case 3: while(1){ switch(select(" ~ Add an event...: ~ Delete an event...: ~ End current event: ~ Randomize event list: ~ Add event type: ~ Remove event type: ~ Reset queue:~ ^777777Go back^000000")) { case 3: next; goto OnEndEvent; case 4: next; goto OnRandomize; case 5: next; goto OnAddType; case 6: next; goto OnRemoveType; case 7: next; goto OnClear; case 8: next; goto OnMenu; case 1: next; mes "[ Add Event ]"; mes "Pick a Day."; .@Day = select(" ~ "+implode(.Days$,": ~ ")) - 1; next; mes "[ Add Event ]"; mes "Pick a Time for ^0055FF"+.Days$[.@D / 24]+"."; .@menu$ = ""; .@e = 0; for(.@i = .@Day * 24; .@i < .@Day * 24 + 24; .@i++){ if(!$EVENT_CONTROL[.@i]){ .@menu$ = .@menu$ +" ~ "+ Func_Add_Time( .@i % 24 ) +":"; .@e += 1; } else .@menu$ = .@menu$ + ":"; } if(!.@e){ mes "No Events Times Remaining for "+ .Days$[ .@Day ] +"."; close; } .@D = select(.@menu$) + .@Day * 24 - 1; next; mes "[ Add Event ]"; mes "Select a event for ^0055FF"+ .Days$[.@D / 24] +" ~ "+ Func_Add_Time(.@D % 24) +"^000000."; next; .@Event = select(implode(.ColorName$,": ~ ")) - 1; mes "Are you sure you want to add "+ .ColorName$[.@Event] +","; mes "for ^0055FF"+ .Days$[.@D / 24] +" ~ "+ Func_Add_Time(.@D % 24) +"^000000?"; next; .@A = (select(" ~ ^0000CCAdd event...^000000: ~ ^777777Cancel^000000")); mes "[ Add Event ]"; if(.@A == 2) mes "Cancelled."; else { $EVENT_CONTROL[.@D] = .@Event; mes "Event Added."; } break; case 2: next; mes "[ Remove Event ]"; mes "Which Event?"; .@menu$ = ""; for(.@i = .@e = 0; .@i < 168; .@i++){ if($EVENT_CONTROL[.@i]){ .@menu$ = .@menu$ + .Days$[ .@i / 24 ] +" - "+ Func_Add_Time( .@i % 24 ) +" ~ "+ .ColorName$[ $EVENT_CONTROL[ .@i ] ]+":"; .@e += 1; } else .@menu$ = .@menu$ + ":"; } if(!.@e){ mes "No Events Setup."; close; } .@D = select(.@menu$) - 1; next; mes "[ Remove Event ]"; mes "Are you sure you want to add the "+ .ColorName$[.@D] +","; mes "for ^0055FF"+ .Days$[.@D % 168 / 24] +" ~ "+ Func_Add_Time(.@D % 168 / 24) +"^000000?"; .@A = (select(" ~ ^FF0000Remove event...^000000: ~ ^777777Cancel^000000")); if(.@A == 2){ mes "Cancelled."; } else { $EVENT_CONTROL[.@D] = 0; mes "Event Removed."; } break; } } case 6: close; case 1: next; break; } //================================== OnJoinEvent: //-- Join Event //================================== if($@CurrentEvent < 1) mes "[ Event Management ]","Sorry no event is running."; else { mes "[ "+ .EventName$[$@CurrentEvent] +" ]","Want to join the "+ .ColorName$[$@CurrentEvent] +"?"; if($@CurrentEvent == 2) mes "[ "+ .EventName$[$@CurrentEvent] +" ]","Must be a Novice Level 10/10 or lower."; if($@CurrentEvent == 5 || $@CurrentEvent == 6 || $@CurrentEvent == 7) mes "[ "+ .EventName$[$@CurrentEvent] +" ]","Will have any Carts or Pets Removed."; if(select("Yes:No") == 2) mes "[ "+ .EventName$[$@CurrentEvent] +" ]","Ok come back later.",bc_self|bc_blue; else if((Baselevel > 10 || JobLevel > 10 || Class != Job_Novice ) && $@CurrentEvent == 2) mes "[ "+ .EventName$[$@CurrentEvent] +" ]","Sorry you must be a Novice Level 10/10 or lower."; else if($@CurrentEvent < 1) mes "[ Event Management ]","Sorry event closed before you hit yes."; else { if($@CurrentEvent == 5 || $@CurrentEvent == 6 || $@CurrentEvent == 7 || $@CurrentEvent == 13){ setmadogear 0; setdragon 0; if (checkwug()) setoption Option_Wugrider,0; if(ismounting()) setmounting; setriding 0; setfalcon 0; setcart 0; callfunc("dispell"); } else if($@CurrentEvent == 2) callfunc("dispell"); if($@CurrentEvent == 13){ .register_aid[ .register_count ] = getcharid(3); .register_count++; delitem .candy_id, countitem( .candy_id ); } fabre = 0; warp .EnterMap$[$@CurrentEvent],.EnterX[$@CurrentEvent],.EnterY[$@CurrentEvent]; } } close; //================================== OnRandomize: //-- Randomize Event //================================== mes "[ Randomize Event ]"; mes "Chance of no event?"; input(.@j,0,100); freeloop(1); for(.@i = 0; .@i < 168; .@i++){ if(rand(100) < .@j){ $EVENT_CONTROL[.@i] = 0; continue; } $EVENT_CONTROL[.@i] = rand(getarraysize(.EventName$)); if($EVENT_CONTROL[.@i] == .@lastevent) $EVENT_CONTROL[.@i] = rand(getarraysize(.EventName$)); .@lastevent = $EVENT_CONTROL[.@i]; } freeloop(0); next; mes "[ Randomize Event ]"; mes "Events set."; close; //================================== OnClear: //-- Clear Event //================================== mes "[ Clear Event Queue ]"; mes "Wipe the event Queue?"; if(select("No:Yes")== 1) close; freeloop(1); for(.@i = 0; .@i < 168; .@i++) $EVENT_CONTROL[.@i] = 0; freeloop(0); next; mes "[ Clear Event Queue ]"; mes "Events Cleared."; close; //================================== OnRemoveType: //-- Remove Event Type //================================== mes "[ Remove Event Type ]"; Mes "Which Event Would you Like to remove?"; .@select = select(implode(.ColorName$,": ~ ")) - 1; next; mes "[ Remove Event Type ]"; mes "Are you sure you want to remove all "+.ColorName$[.@select]+"?"; if(select("No:Yes")== 1) close; freeloop(1); for(.@i = 0; .@i < 168; .@i++){ if($EVENT_CONTROL[.@i] == .@select){ $EVENT_CONTROL[.@i] = 0; continue; } } freeloop(0); next; mes "[ Remove Event Type ]"; mes "All "+.ColorName$[.@select]+" Events Removed."; close; //================================== OnAddType: //-- Add Event Type //================================== mes "[ Add Event Type ]"; Mes "Which Event Would you Like to add?"; .@select = select(implode(.ColorName$,": ~ ")) - 1; next; mes "[ Add Event Type ]"; mes "What chance would you like "+.ColorName$[.@select]+" to appear?"; input(.@j,0,100); next; mes "[ Add Event Type ]"; mes "Would you like "+.ColorName$[.@select]+" to overwrite other events?"; .@Over = select("No:Yes") - 1; next; mes "[ Add Event Type ]"; mes "Are you sure you want to add "+.ColorName$[.@select]+" at a "+.@j+"% chance"+((.@Over)?" overwriting other events":"")+"?"; if(select("No:Yes")== 1) close; freeloop(1); for(.@i = 0; .@i < 168; .@i++){ if(rand(100) > .@j || (!.@Over && $EVENT_CONTROL[.@i])) continue; else $EVENT_CONTROL[.@i] = .@select; } freeloop(0); next; mes "[ Add Event Type ]"; mes .ColorName$[.@select]+" Added."; close; //================================== OnEndEvent: //-- End Event //================================== if($@CurrentEvent == 0){ mes "[ Event Management ]","Sorry no event is running."; close; } if($@CurrentEvent < 0) $@CurrentEvent *= -1; switch($@CurrentEvent){ default: mapwarp .EnterMap$[$@CurrentEvent],"prontera",155,172; case 1: case 8: case 7: break; case 11: killmonster .Map$[11],strnpcinfo(3)+"::OnShroomKilled"; break; case 14: killmonster .Map$[14],strnpcinfo(3)+"::OnKilled"; break; } Announce "Sorry a GM has stopped the "+ .EventName$[$@CurrentEvent] +".",bc_all|bc_blue; $@CurrentEvent = 0; delwaitingroom; end; //================================== OnRunEvent: //-- GM Run //================================== if($@CurrentEvent) mes "[ Event Management ]","Sorry an event is already running"; else if(agitcheck() || agitcheck2()) mes "[ Event Management ]","Sorry cannot run event during woe"; else { mes "[ Event Management ]","Pick an Event."; .@i = select(implode(.ColorName$,": ~ ") +":Bug Test") - 1; } switch(.@i){ case 0: break; case 1: donpcevent strnpcinfo(3)+"::OnEmpStart"; break; case 2: donpcevent strnpcinfo(3)+"::OnZombieStart"; break; case 3: donpcevent strnpcinfo(3)+"::OnDiceStart"; break; case 4: donpcevent strnpcinfo(3)+"::OnPvPStart"; break; case 5: donpcevent strnpcinfo(3)+"::OnMazeStart"; break; case 6: donpcevent strnpcinfo(3)+"::OnPoringStart"; break; case 7: donpcevent "Cluckers::OnEventStart"; break; case 8: donpcevent strnpcinfo(3)+"::OnLuckyStart"; break; case 9: donpcevent strnpcinfo(3)+"::OnBombStart"; break; case 10: donpcevent strnpcinfo(3)+"::OnHuntStart"; break; case 11: donpcevent strnpcinfo(3)+"::OnShroomStart"; break; case 12: donpcevent strnpcinfo(3)+"::OnBaphoStart"; break; case 13: donpcevent strnpcinfo(3)+"::OnCandyStart"; break; case 14: donpcevent strnpcinfo(3)+"::OnCountStart"; break; case 15: donpcevent strnpcinfo(3)+"::OnDisguiseStart"; break; case 16: donpcevent strnpcinfo(3)+"::OnFabreStart"; break; case 17: donpcevent strnpcinfo(3)+"::OnDevilStart"; break; default: Func_Prizes(getcharid(0),"Bug Test"); break; } close; //================================== //-- Functions //================================== function Func_Add_Time { return ( ( (getarg(0) < 10)?"0":"" ) + getarg(0) + "." + ( (.StartTime < 10)?"0":"" ) + .StartTime ); } function Func_Countdown { for(.@i = 5; .@i > 0; .@i--){ announce .EventName$[$@CurrentEvent]+" will begin in "+ callfunc("F_InsertPlural",.@i,"minute") +"!",bc_all|bc_blue; Announce "Please type @joinevent to join",bc_all|bc_blue; if(.TestMode) sleep 6000; else sleep 60000; } Announce .EventName$[$@CurrentEvent] +" Has Begun!",bc_all|bc_blue; return; } function Func_Prizes { announce "Congrats "+strcharinfo(0,getarg(0))+", a winner in the "+getarg(1)+" Event.",bc_all|bc_blue; WonEvents++; MWonEvents++; if($@Mail){ mail getarg(0), "no-reply", getarg(1), "Congratulations!% You have won in the "+getarg(1)+" % % %[ Your reward is attached. ]", $@RewardZeny, $@RewardID, $@RewardQNT; query_sql("UPDATE `mail` SET message = REPLACE(message,'%',CHAR(13)) WHERE send_name = 'no-reply'"); } else { getitem $@RewardID,$@RewardQNT; zeny += $@RewardZeny; } return; } //================================== OnMinute00: //- Start Events //================================== if(gettime(DT_DAYOFMONTH) == 1 && gettime(DT_HOUR) == 0) query_sql("DELETE FROM `char_reg_num` WHERE `key` = 'MWonEvents'"); if(agitcheck() || agitcheck2() || $@CurrentEvent) end; sleep .StartTime * 60000 + 1000; .@Time = gettime(4) * 24 + gettime(3); switch($EVENT_CONTROL[.@Time]){ default: break; case 1: donpcevent strnpcinfo(3)+"::OnEmpStart"; break; case 2: donpcevent strnpcinfo(3)+"::OnZombieStart"; break; case 3: donpcevent strnpcinfo(3)+"::OnDiceStart"; break; case 4: donpcevent strnpcinfo(3)+"::OnPvPStart"; break; case 5: donpcevent strnpcinfo(3)+"::OnMazeStart"; break; case 6: donpcevent strnpcinfo(3)+"::OnPoringStart"; break; case 7: donpcevent "Cluckers::OnEventStart"; break; case 8: donpcevent strnpcinfo(3)+"::OnLuckyStart"; break; case 9: donpcevent strnpcinfo(3)+"::OnBombStart"; break; case 10: donpcevent strnpcinfo(3)+"::OnHuntStart"; break; case 11: donpcevent strnpcinfo(3)+"::OnShroomStart"; break; case 12: donpcevent strnpcinfo(3)+"::OnBaphoStart"; break; case 13: donpcevent strnpcinfo(3)+"::OnCandyStart"; break; case 14: donpcevent strnpcinfo(3)+"::OnCountStart"; break; case 15: donpcevent strnpcinfo(3)+"::OnDisguiseStart"; break; case 16: donpcevent strnpcinfo(3)+"::OnFabreStart"; break; case 17: donpcevent strnpcinfo(3)+"::OnDevilStart"; break; } end; //================================== OnEmpStart: //-- Emperium Event //================================== $@CurrentEvent = 1; waitingroom "Emperium Event",99; Func_Countdown; $@CurrentEvent = -1; $@BestTime = 2000000000; $@BestCid = 0; getwaitingroomusers strnpcinfo(3); if(.@waitingroom_usercount >= .MinPlayers[1]){ freeloop(1); for(.@i = 0; .@i < .@waitingroom_usercount; .@i++){ attachrid(.@waitingroom_users[.@i]); callfunc("dispell"); if(instance_id()) instance_destroy; instance_create("Emp Breaker",IM_CHAR); instance_enter("Emp Breaker"); } freeloop(0); delwaitingroom; sleep 905000; // 15 mins should be enough? } else { delwaitingroom; announce .EventName$[1]+" Stopped! Not Enough Players Joined the "+.EventName$[1]+"!",bc_blue|bc_area|bc_npc; } if($@BestCid && $@CurrentEvent == -1) Func_Prizes($@BestCid,.EventName$[1]); $@CurrentEvent = 0; end; //================================== OnZombieStart: //-- Zombie Event //================================== mapwarp .EnterMap$[2],"prontera",155,172; $@CurrentEvent = 2; Func_Countdown; $@CurrentEvent = -2; if(getmapusers(.EnterMap$[2]) < .MinPlayers[2]){ mapannounce .EnterMap$[2],.EventName$[2]+" Stopped! Not Enough Players Joined the "+.EventName$[2]+"!",bc_blue; mapwarp .EnterMap$[2],"prontera",155,172; } else { mapannounce .EnterMap$[2],"Rules are simple, don't die before the end of round 10!",bc_blue; sleep 25000; for(.@wave = 1; .@wave < 11; .@wave++){ if(.@wave < 10) mapannounce .EnterMap$[2],"Wave "+.@wave+"!",bc_blue; else mapannounce .EnterMap$[2],"FINAL WAVE!",bc_blue; sleep 1000; for(.@i = 5; .@i > 0; .@i--){ mapannounce .EnterMap$[2],""+.@i+"...",bc_blue; sleep 1000; } mapannounce .EnterMap$[2],"Begin Wave!",bc_blue; for(.@i = 0; (.@i < getarraysize(.Zombies)); .@i += 2) monster .EnterMap$[2],0,0,"--ja--",.Zombies[.@i], .@wave * .Zombies[.@i+1],strnpcinfo(3)+"::OnKillZombie"; if(!getmapusers(.EnterMap$[2])){ .@wave += 255; } else { mapannounce .EnterMap$[2],"There "+((getmapusers(.EnterMap$[2])>1)?"are":"is")+" "+callfunc("F_InsertPlural",getmapusers(.EnterMap$[2]),"player")+" left",bc_blue; sleep 55000; } } killmonsterall .EnterMap$[2]; if(getmapusers(.EnterMap$[2])){ addrid(5,0,.EnterMap$[2]); if(HP > 0 && strcharinfo(3) == .EnterMap$[2]) Func_Prizes(getcharid(0),.EventName$[2]); } } $@CurrentEvent = 0; mapwarp .EnterMap$[2],"prontera",155,172; end; OnKillZombie: dispbottom "Don't do that",0xCC0000; sc_start SC_DECREASEAGI,30000,10; percentheal -20,-100; heal -5,0; end; //================================== OnDiceStart: //-- Dice Event //================================== mapwarp .EnterMap$[3],"prontera",155,172; $@CurrentEvent = 3; Func_Countdown; $@CurrentEvent = -3; if(getmapusers(.EnterMap$[3]) < .MinPlayers[3]){ mapannounce .EnterMap$[3],"Event Stopped! Not Enough Players Joined the "+.EventName$[3]+"!",bc_blue; mapwarp .EnterMap$[3],"prontera",155,172; $@CurrentEvent = 0; end; } else { mapannounce .EnterMap$[3],"Ok the rules of "+.EventName$[3]+" are as follows",bc_blue; sleep 5000; mapannounce .EnterMap$[3],"Each player picks a box 1, 2, 3 or 4",bc_blue; sleep 5000; mapannounce .EnterMap$[3],"There will be a count down from 10 to 0",bc_blue; sleep 5000; mapannounce .EnterMap$[3],"at 0 a four sided die will be rolled",bc_blue; sleep 5000; mapannounce .EnterMap$[3],"Anyone in the box of the number rolled will be warped to town",bc_blue; sleep 5000; mapannounce .EnterMap$[3],"as well as anyone on the stairs or outside the box",bc_blue; sleep 5000; mapannounce .EnterMap$[3],"the number of players remaining will be announced",bc_blue; sleep 5000; mapannounce .EnterMap$[3],"this prosses will repeat till only one player remains",bc_blue; sleep 5000; mapannounce .EnterMap$[3],"take a few moments to fnd a box",bc_blue; sleep 15000; mapannounce .EnterMap$[3],"we will now begin, please find a box",bc_blue; sleep 5000; for(.@1234 = 0; .@1234 < 100; .@1234++){ for(.@i = 10; .@i > 0; .@i--){ mapannounce .EnterMap$[3],.@i+"...",bc_blue; sleep 1000; } .@i = rand(1,4); mapannounce .EnterMap$[3],"0... Good Bye Box "+.@i,bc_blue; switch(.@i){ case 1: areawarp .EnterMap$[3],183,81,191,59,"prontera",155,172; break; case 2: areawarp .EnterMap$[3],195,81,203,59,"prontera",155,172; break; case 3: areawarp .EnterMap$[3],207,81,215,59,"prontera",155,172; break; case 4: areawarp .EnterMap$[3],219,81,227,59,"prontera",155,172; break; } areawarp .EnterMap$[3],182,94,228,88,"prontera",155,172; //Upper Area areawarp .EnterMap$[3],185,87,188,82,"prontera",155,172; //Stairs 1 areawarp .EnterMap$[3],197,87,200,82,"prontera",155,172; //Stairs 2 areawarp .EnterMap$[3],209,87,212,82,"prontera",155,172; //Stairs 3 areawarp .EnterMap$[3],221,87,224,82,"prontera",155,172; //Stairs 4 if(getmapusers(.EnterMap$[3]) <= 1){ .@1234 += 100; } else { mapannounce .EnterMap$[3],"There are "+getmapusers(.EnterMap$[3])+" Players Remaining.",bc_blue; mapannounce .EnterMap$[3],"Take a few moments if you want to change boxes.",bc_blue; sleep 20000; } } if(getmapusers(.EnterMap$[3])){ addrid(5,0,.EnterMap$[3]); if(HP > 0 && strcharinfo(3) == .EnterMap$[3]) Func_Prizes(getcharid(0),.EventName$[3]); } $@CurrentEvent = 0; mapwarp .EnterMap$[3],"prontera",155,172; end; } //================================== OnPvPStart: //-- PvP Event //================================== mapwarp .EnterMap$[4],"prontera",155,172; pvpoff .EnterMap$[4]; $@CurrentEvent = 4; Func_Countdown; $@CurrentEvent = -4; .@count = getmapusers(.EnterMap$[4]); if(.@count < .MinPlayers[4]){ mapannounce .EnterMap$[4],"Event Stopped! Not Enough Players Joined the "+.EventName$[4]+"!",bc_blue; } else { mapannounce .EnterMap$[4],"The Rules of "+.EventName$[4]+" are as follows",bc_blue; sleep 5000; mapannounce .EnterMap$[4],"This is a Free for all Last man Standing",bc_blue; sleep 5000; mapannounce .EnterMap$[4],"There is a 20 min time limit in place if there is no clear winner within 20 mins the Event ends",bc_blue; sleep 5000; mapannounce .EnterMap$[4],"Everyone has 1 Life so Res, Ygg Leafs and Kazail don't work",bc_blue; sleep 5000; mapannounce .EnterMap$[4],"Spread out PVP will begin in 10...",bc_blue; sleep 1000; for(.@i = 9; .@i > 0; .@i--){ mapannounce .EnterMap$[4],.@i+"...",bc_blue; sleep 1000; } pvpon .EnterMap$[4]; mapannounce .EnterMap$[4],"Begin",bc_blue; sleep 5000; freeloop(1); for(.@i = 1; .@i <= 360; .@i++){ .@count[.@i] = getmapusers(.EnterMap$[4]); if(.@count[.@i] != .@count[.@i - 1]){ if(.@count[.@i] < 2){ .@i += 10000; } else mapannounce .EnterMap$[4],"There are "+getmapusers(.EnterMap$[4])+" Players Remaining",bc_blue; } sleep 5000; } freeloop(0); if(getmapusers(.EnterMap$[4]) == 1){ addrid(5,0,.EnterMap$[4]); if(HP > 0 && strcharinfo(3) == .EnterMap$[4]) Func_Prizes(getcharid(0),.EventName$[4]); } else mapannounce .EnterMap$[4],"Time Is up",bc_blue; } pvpoff .EnterMap$[4]; $@CurrentEvent = 0; mapwarp .EnterMap$[4],"prontera",155,172; end; //================================== OnMazeStart: //-- Maze Event //================================== mapwarp .EnterMap$[5],"prontera",155,172; enablenpc "mazeroadblock"; disablenpc "Event_Agent#Maze"; $@CurrentEvent = 5; for ( .@i = 0; .@i < getarraysize( .bombflag ); .@i++ ) setmapflag .EnterMap$[5], .bombflag[.@i]; Func_Countdown; $@CurrentEvent = -5; sleep 9000; if(getmapusers(.EnterMap$[5]) < .MinPlayers[5]) mapannounce .EnterMap$[5],"Event Stopped! Not Enough Players Joined the "+.EventName$[5]+"!",bc_blue; else { mapannounce .EnterMap$[5],"Rules are simple first to get to end of maze wins, so begin~",bc_blue; disablenpc "mazeroadblock"; enablenpc "Event_Agent#Maze"; for(.@maze = 40; .@maze > 0; .@maze--){ if(getmapusers(.EnterMap$[5])<1) .@maze = 0; mapannounce .EnterMap$[5],"There are "+(.@maze)+" Minuets Remaining",bc_blue; sleep 60000; } mapannounce .EnterMap$[5],"Time Is up",bc_blue; } for ( .@i = 6; .@i < getarraysize( .bombflag ); .@i++ ) removemapflag .EnterMap$[5], .bombflag[.@i]; disablenpc "Event_Agent#Maze"; sleep 5000; mapwarp .EnterMap$[5],"prontera",155,172; $@CurrentEvent = 0; end; //================================== OnPoringStart: //-- Poring Event //================================== mapwarp .EnterMap$[6],"prontera",155,172; $@CurrentEvent = 6; pvpoff .EnterMap$[6]; for ( .@i = 0; .@i < getarraysize( .bombflag ); .@i++ ) setmapflag .EnterMap$[6], .bombflag[.@i]; Func_Countdown; $@CurrentEvent = -6; if(getmapusers(.EnterMap$[6]) < .MinPlayers[6]){ mapannounce .EnterMap$[6],"Event Stopped! Not Enough Players Joined the "+.EventName$[6]+"!",bc_blue; } else { mapannounce .EnterMap$[6],"Rules are simple",bc_blue; sleep 3000; mapannounce .EnterMap$[6],"Kill the 'Poring' with the correct name, and get a warped to town with a prize.",bc_blue; sleep 4000; mapannounce .EnterMap$[6],"Kill the wrong one and get warped to town with nothing.",bc_blue; sleep 4000; mapannounce .EnterMap$[6],"There are 2 right poring and a 30 min timer.",bc_blue; sleep 4000; mapannounce .EnterMap$[6],"Event will now Begin~",bc_blue; for(.@i = 0; .@i < getarraysize(.Poring$); .@i++) monster .EnterMap$[6],0,0,.Poring$[.@i],1725,5,strnpcinfo(3)+"::OnKillWrong"; monster .EnterMap$[6],0,0,"--ja--",1725,.PoringSpawn,strnpcinfo(3)+"::OnKillRight"; .PoringSpawn = 2; for(.@poring = 30; .@poring > 0; .@poring--){ if(getmapusers(.EnterMap$[6]) < 1) .@poring = 0; mapannounce .EnterMap$[6],callfunc("F_InsertPlural",.@poring,"Minute")+" Remaining.",bc_blue; sleep 60000; } } if(!.PoringLeft){ mapannounce .EnterMap$[6],"Time Is up",bc_blue; killmonsterall .EnterMap$[6]; for ( .@i = 6; .@i < getarraysize( .bombflag ); .@i++ ) removemapflag .EnterMap$[6], .bombflag[.@i]; $@CurrentEvent = 0; sleep 5000; mapwarp .EnterMap$[6],"prontera",155,172; } end; OnKillWrong: monster .EnterMap$[6],0,0,.Poring$[rand(1,getarraysize($@Mobs))],1725,1,strnpcinfo(3)+"::OnKillWrong"; warp "prontera",155,172; end; OnKillRight: Func_Prizes(getcharid(0),.EventName$[6]); warp "prontera",155,172; .PoringLeft--; if(!.PoringLeft){ mapannounce .EnterMap$[6],"Time Is up",bc_blue; killmonsterall .EnterMap$[6]; for ( .@i = 6; .@i < getarraysize( .bombflag ); .@i++ ) removemapflag .EnterMap$[6], .bombflag[.@i]; $@CurrentEvent = 0; sleep 5000; mapwarp .EnterMap$[6],"prontera",155,172; } end; //================================== OnLuckyStart: //-- Lucky Event //================================== $@CurrentEvent = 8; .luckywinner = 0; waitingroom "Lucky Event",99; Func_Countdown; getwaitingroomusers strnpcinfo(3); .luckywinner = .@waitingroom_users[rand(.@waitingroom_usercount)]; $@CurrentEvent = -8; if(.@waitingroom_usercount >= .MinPlayers[8]){ attachrid(.luckywinner); Func_Prizes(getcharid(0),.EventName$[8]); } else announce .EventName$[8]+" Stopped! Not Enough Players Joined the "+.EventName$[8]+"!",bc_blue|bc_area|bc_npc; delwaitingroom; $@CurrentEvent = 0; .luckywinner = 0; end; //================================== OnBombStart: //-- Bombring Event //================================== mapwarp .EnterMap$[9],"prontera",155,172; $@CurrentEvent = 9; Func_Countdown; $@CurrentEvent = -9; .@totalplayers = getmapusers(.EnterMap$[9]); if(.@totalplayers < .MinPlayers[9]){ mapannounce .EnterMap$[9],"Event Stopped! Not Enough Players Joined the "+.EventName$[9]+"!",bc_blue; mapwarp .EnterMap$[9],"prontera",155,172; } else { for ( .@i = 0; .@i < getarraysize( .bombflag ); .@i++ ) setmapflag .EnterMap$[9], .bombflag[.@i]; mapannounce .EnterMap$[9],"Okay listen up, this is how it works.",bc_blue; sleep 2000; mapannounce .EnterMap$[9],"Bombrings will run rampant in this area.",bc_blue; sleep 2000; mapannounce .EnterMap$[9],"and all of them will go booooooom!",bc_blue; sleep 2000; mapannounce .EnterMap$[9],"all you have to do is avoid them and stay alive :P",bc_blue; sleep 2000; mapannounce .EnterMap$[9],"This will run for 30 seconds for 5 total rounds.",bc_blue; sleep 2000; mapannounce .EnterMap$[9],"Sooooooooooo, ready or not here they come!!!",bc_blue; sleep 10000; for(.@wave = 1; .@wave <= .Bombwaves; .@wave++){ if(.@wave < .Bombwaves){ mapannounce .EnterMap$[9],"Wave "+.@wave+"!",bc_blue; } else mapannounce .EnterMap$[9],"FIANL WAVE!",bc_blue; if (.@wave * .@totalplayers < 60) areamonster .EnterMap$[9],48,334,71,357,"Run for you life!",1904,.@wave * .@totalplayers; else areamonster .EnterMap$[9],48,334,71,357,"Run for you life!",1904,60; if(!getmapusers(.EnterMap$[9])) .@wave += 5; else sleep 1500 * .Bombwaves / .@wave; } sleep 10000; if(getmapusers(.EnterMap$[9])){ addrid(5,0,.EnterMap$[9]); if(HP > 0 && strcharinfo(3) == .EnterMap$[9]) Func_Prizes(getcharid(0),.EventName$[9]); } for ( .@i = 6; .@i < getarraysize( .bombflag ); .@i++ ) removemapflag .EnterMap$[9], .bombflag[.@i]; } $@CurrentEvent = 0; mapwarp .EnterMap$[9],"prontera",155,172; end; //================================== OnHuntStart: //-- Man Hunt Event //================================== mapwarp .EnterMap$[10],"prontera",155,172; $@CurrentEvent = 10; Func_Countdown; $@CurrentEvent = -10; if(getmapusers(.EnterMap$[10]) < .MinPlayers[10]){ mapannounce .EnterMap$[10],"Event Stopped! Not Enough Players Joined the "+.EventName$[10]+"!",bc_blue; } else { mapannounce .EnterMap$[10],"The goal is this event is to kill the target within 60 seconds.",bc_blue; sleep 5000; mapannounce .EnterMap$[10],"The one who managed to kill the target will gain a prize",bc_blue; sleep 5000; mapannounce .EnterMap$[10],"But if the target surivived, the target will gain the prize",bc_blue; sleep 5000; mapannounce .EnterMap$[10],"Man-Hunt Event start!",bc_blue; for(.@round = 1; .@round <= 10; .@round++){ if(getmapusers(.EnterMap$[10]) < 3){ mapannounce .EnterMap$[10],"Sorry there are no longer enough players for another round",bc_blue; } else { if(.@round < 10) mapannounce .EnterMap$[10],"Next Round will begin in 10 seconds!",bc_blue; deletearray .@AID[0],getarraysize(.@AID); addrid(5,0,.EnterMap$[10]); .@AID[getarraysize(.@AID)] = getcharid(3); $@Target = rand(getarraysize(.@AID)); sleep 10000; mapannounce .EnterMap$[10],"[Round "+.@round+"] Our target is "+rid2name($@Target)+"!",bc_blue; charcommand "killable "+rid2name($@Target); charcommand "size "+rid2name($@Target)+" 2"; sleep 60000; if($@Target != -1){ if(attachrid($@Target) && strcharinfo(3) == .EnterMap$[10]) Func_Prizes(getcharid(0),.EventName$[10]); } charcommand "alive "+rid2name($@Target); charcommand "killable "+rid2name($@Target); charcommand "size "+rid2name($@Target)+" 0"; } } } sleep 5000; mapwarp .EnterMap$[10],"prontera",155,172; $@CurrentEvent = 0; end; //================================== OnShroomStart: //-- Mushroom Event //================================== .Map$ = .ShroomMaps$[rand(getarraysize(.ShroomMaps$))]; killmonster .Map$,strnpcinfo(3)+"::OnShroomKilled"; $@CurrentEvent = 11; .EnterMap$[$@CurrentEvent] = .Map$; Func_Countdown; $@CurrentEvent = -11; .@Spawn = .Spawn = max(1,rand(getusers(1) / 10)); if(1 > .Spawn) .@Spawn = .Spawn = 1; monster .Map$,0,0,"Please don't kill me!",1084,.Spawn,strnpcinfo(3)+"::OnShroomKilled"; announce "Find the Mushroom : Total of "+.Spawn+" Mushrooms have been spawned in "+.Map$+"!",bc_blue; sleep 60000 * 45; if(.Spawn == .@Spawn) Announce .EventName$[11]+" Has Ended with No Winner!",bc_blue; killmonster .Map$,strnpcinfo(3)+"::OnShroomKilled"; $@CurrentEvent = 0; end; OnShroomKilled: if($@CurrentEvent == -11){ .Spawn--; Func_Prizes(getcharid(0),.EventName$[11]); if (.Spawn) announce "[ "+strcharinfo(0)+" ] has killed a Mushroom. There are now "+.Spawn+" Mushroom(s) left.",bc_map|bc_blue; else { announce .EventName$[11]+" has ended. All the Mushrooms have been killed.",bc_blue; $@CurrentEvent = 0; } } end; //================================== OnBaphoStart: //-- Find the Baphomet //================================== .Map$ = .BaphoMaps$[rand(getarraysize(.BaphoMaps$))]; killmonster .Map$,strnpcinfo(3)+"::OnBaphoKilled"; $@CurrentEvent = 12; .EnterMap$[$@CurrentEvent] = .Map$; Func_Countdown; $@CurrentEvent = -12; .@Spawn = .Spawn = max(1,rand(getusers(1) / 10)); monster .Map$,0,0,"Please don't kill me!",1039,.Spawn,strnpcinfo(3)+"::OnBaphoKilled"; announce "Find the Baphomet: Total of "+.Spawn+" Baphomets have been spawned in "+.Map$+"!",bc_blue; sleep 60000 * 45; if(.Spawn == .@Spawn) Announce .EventName$[12]+" Has Ended with No Winner!",bc_blue; killmonster .Map$,strnpcinfo(3)+"::OnBaphoKilled"; $@CurrentEvent = 0; end; OnBaphoKilled: if($@CurrentEvent == -12){ .Spawn--; Func_Prizes(getcharid(0),.EventName$[12]); if (.Spawn) announce "[ "+strcharinfo(0)+" ] has killed a Baphomet. There are now "+.Spawn+" Baphomet(s) left.",bc_map|bc_blue; else { announce .EventName$[-$@CurrentEvent]+" has ended. All the Baphomets have been killed.",bc_blue; $@CurrentEvent = 0; } } end; //================================== OnCandyStart: //-- Grab the Candy //================================== mapwarp .EnterMap$[13],"prontera",155,172; $@CurrentEvent = 13; Func_Countdown; $@CurrentEvent = -13; if(getmapusers(.EnterMap$[13]) < .MinPlayers[13]){ mapannounce .EnterMap$[13],"Event Stopped! Not Enough Players Joined the "+.EventName$[13]+"!",bc_blue; } else { sleep 3000; mapannounce .EnterMap$[13],"The goal is this event is to pick up as many "+getitemname(.candy_id)+".",bc_blue; sleep 1000; for ( .@i = 5; .@i >= 0; .@i-- ) { mapannounce .EnterMap$[13], "["+ .@i +"]", 0; sleep 1000; } .@drop_candy_amount = .register_count * 12; // drop the amount of candies equal to no. of participants x 12 freeloop 1; while ( .@i < .@drop_candy_amount ) { while ( checkcell( .EnterMap$[13], .@x = rand(450), .@y = rand(450), cell_chknopass ) ); makeitem .candy_id, 1, .EnterMap$[13], .@x, .@y; .@i++; } freeloop 0; sleep 60000; for ( .@i = 0; .@i < .register_count; .@i++ ) { if ( attachrid( .register_aid[.@i] ) ) { .@amount = countitem( .candy_id ); if ( .@amount >= .@highest ) { setd ".@count"+ .@amount +"["+ getarraysize( getd( ".@count"+ .@amount ) ) +"]", getcharid(3); .@highest = .@amount; } delitem .candy_id, countitem( .candy_id ); } } cleanmap .EnterMap$[13]; if ( .@size = getarraysize( getd( ".@count"+ .@highest ) ) ) { for ( .@i = 0; .@i < .@size; .@i++ ) { attachrid getd( ".@count"+ .@highest +"["+ .@i +"]" ); Func_Prizes(getcharid(0),.EventName$[13]); } mapannounce .EnterMap$[13], "Event end, there are "+ .@size +" player having most "+ getitemname( .candy_id ) +" ! "+ .@name$, 0; } else mapannounce .EnterMap$[13], "Event end, nobody is a winner ... too bad", 0; } sleep 5000; mapwarp .EnterMap$[13],"prontera",155,172; deletearray .register_aid; .register_count = 0; $@CurrentEvent = 0; end; //================================== OnCountStart: //-- Monsters Counting //================================== killmonster .EnterMap$[14],strnpcinfo(3)+"::OnKilled"; $@CurrentEvent = 14; Func_Countdown; .Round = .CountRound; OnStartGame: deletearray .MobCount[0],getarraysize( .MobCount ); for( .@x = .CountXY[0]; .@x <= .CountXY[2]; .@x++ ){ for( .@y = .CountXY[1]; .@y <= .CountXY[3]; .@y++ ){ .@Summon = rand( getarraysize( .CountMonster ) ); monster .EnterMap$[14],.@x,.@y,"Count Me",.CountMonster[.@Summon],1,strnpcinfo(3)+"::OnKilled"; .GID = $@mobid; setunitdata .GID,UMOB_DMGIMMUNE,1; .MobCount[.@Summon] = .MobCount[.@Summon] + 1; sleep 1; } } .@Target = rand( getarraysize( .CountMonster ) ); deletepset 1; defpattern 1, "([^:]+): (\\|\\d{2})?"+.MobCount[.@Target]+ ".$", "OnRight"; defpattern 1,"([^:]+):.*.*", "OnSpam"; activatepset 1; delwaitingroom; waitingroom getmonsterinfo( .CountMonster[.@Target],0 ),0; npctalk "Count for the Targeted Monster's Amount to Win the Game."; $@CurrentEvent = -14; end; OnSpammed: @Spam = 0; end; OnSpam: if( getgmlevel() > 90 ) end; @Spam++; if( @Spam >= .Spam ){ // 3 Continuos Answer will trigger... @SpamDelay = gettimetick(2) + .Spam; dispbottom "SPAM Detected, your answer within next "+.Spam+" Seconds will be Ignored."; } deltimer strnpcinfo(3)+"::OnSpammed"; addtimer ( .Spam * 1000 ),strnpcinfo(3)+"::OnSpammed"; end; OnRight: @Spam = 0; deltimer strnpcinfo(3)+"::OnSpammed"; if( $@CurrentEvent != -14 ){ message strcharinfo(0),"Sorry, there is no Event right now."; } else if( @SpamDelay > gettimetick(2) ){ message strcharinfo(0),"SPAM Protection : Remain "+( @SpamDelay - gettimetick(2) )+" seconds."; } else if( getcharid(0) == .Winner[0] && gettimetick(2) < .Winner[1] ){ message strcharinfo(0),"Sorry, Winner Time Penalty : Remain "+( .Winner[1] - gettimetick(2) )+" seconds."; } else { delwaitingroom; $@CurrentEvent = 14; .Round--; .Winner[0] = getcharid(0); .Winner[1] = gettimetick(2) + .Delay; deletepset 1; Func_Prizes(getcharid(0),.EventName$[14]); killmonster .EnterMap$[14],strnpcinfo(3)+"::OnKilled"; if( .Round ) donpcevent strnpcinfo(3)+"::OnStartGame"; else $@CurrentEvent = 0; } end; OnKilled: end; //================================== OnDisguiseStart: //-- Disguise //================================== mapwarp .EnterMap$[15],"prontera",155,172; $@CurrentEvent = 15; Func_Countdown; $@CurrentEvent = -15; .Round = .DisguiseRound; sleep 9000; if(getmapusers(.EnterMap$[15]) < .MinPlayers[15]) mapannounce .EnterMap$[15],"Event Stopped! Not Enough Players Joined the "+.EventName$[15]+"!",bc_blue; else { enablenpc "Disguise Event"; sleep 100; donpcevent "Disguise Event::OnStart"; for(.@dis = 30; .@dis > 0; .@dis--){ if(!getmapusers(.EnterMap$[15])) .@dis = 0; // mapannounce .EnterMap$[15],"There are "+(.@dis)+" Minuets Remaining",bc_blue; sleep 60000; } mapannounce .EnterMap$[15],"Time Is up",bc_blue; } disablenpc "Disguise Event"; sleep 5000; mapwarp .EnterMap$[15],"prontera",155,172; $@CurrentEvent = 0; end; //================================== OnFabreStart: //-- Fabre Event //================================== killmonsterall .EnterMap$[16]; query_sql("DELETE FROM `char_reg_num` WHERE `key` = 'fabre'"); mapwarp .EnterMap$[16],"prontera",155,172; $@CurrentEvent = 16; pvpoff .EnterMap$[16]; for ( .@i = 0; .@i < getarraysize( .bombflag ); .@i++ ) setmapflag .EnterMap$[16], .bombflag[.@i]; Func_Countdown; $@CurrentEvent = -16; if(getmapusers(.EnterMap$[16]) < .MinPlayers[16]){ mapannounce .EnterMap$[16],"Event Stopped! Not Enough Players Joined the "+.EventName$[16]+"!",bc_blue; for ( .@i = 6; .@i < getarraysize( .bombflag ); .@i++ ) removemapflag .EnterMap$[16], .bombflag[.@i]; $@CurrentEvent = 0; } else { mapannounce .EnterMap$[16],"Rules are simple",bc_blue; sleep 5000; mapannounce .EnterMap$[16],"Kill the monsters to recive points.",bc_blue; sleep 5000; mapannounce .EnterMap$[16],"Player with the most points at the end wins.",bc_blue; sleep 5000; mapannounce .EnterMap$[16],"Event will now Begin~",bc_blue; monster .EnterMap$[16],0,0,"1 Point",1007,60,strnpcinfo(3)+"::OnKill_1"; monster .EnterMap$[16],0,0,"10 Point",1008,30,strnpcinfo(3)+"::OnKill_2"; monster .EnterMap$[16],0,0,"-20 Point",1002,50,strnpcinfo(3)+"::OnKill_3"; for(.@fabre = 5; .@fabre > 0; .@fabre--){ if(getmapusers(.EnterMap$[16]) < 1) .@poring = 0; mapannounce .EnterMap$[16],callfunc("F_InsertPlural",.@fabre,"Minute")+" Remaining.",bc_blue; sleep 60000; } killmonsterall .EnterMap$[16]; for ( .@i = 6; .@i < getarraysize( .bombflag ); .@i++ ) removemapflag .EnterMap$[16], .bombflag[.@i]; $@CurrentEvent = 0; query_sql("SELECT `char_reg_num`.`value`,`char`.`name`,`char`.`char_id` FROM `char` INNER JOIN `char_reg_num` ON `char_reg_num`.`char_id`=`char`.`char_id` WHERE `char_reg_num`.`key`='fabre' ORDER BY `char_reg_num`.`value` DESC LIMIT 50",.@value,.@name$,.@cid); .@size = getarraysize( .@cid ); for ( .@i = 0; .@i < .@size; .@i++ ){ if(.@value == .@value[.@i]) Func_Prizes(.@cid[.@i],.EventName$[16]); else break; } mapannounce .EnterMap$[16],.EventName$[16]+" ended with a total of "+(.@i+1)+" winners.",bc_all; } sleep 5000; mapwarp .EnterMap$[16],"prontera",155,172; end; OnKill_1: monster .EnterMap$[16],0,0,"1 Point",1007,1,strnpcinfo(3)+"::OnKill_1"; fabre += 1; end; OnKill_2: monster .EnterMap$[16],0,0,"10 Points",1008,1,strnpcinfo(3)+"::OnKill_2"; fabre += 10; end; OnKill_3: monster .EnterMap$[16],0,0,"-20 Points",1002,1,strnpcinfo(3)+"::OnKill_3"; fabre -= 20; end; //================================== OnDevilStart: //-- Devil Square //================================== mapwarp .EnterMap$[17],"prontera",155,172; for ( .@i = 0; .@i < getarraysize( .devilflag ); .@i++ ) setmapflag .EnterMap$[17], .devilflag[.@i]; $@CurrentEvent = 17; Func_Countdown; $@CurrentEvent = -17; $MVPdefeat = 0; killmonsterall .EnterMap$[17]; sleep 9000; if(getmapusers(.EnterMap$[17]) < .MinPlayers[17]) mapannounce .EnterMap$[17],"Event Stopped! Not Enough Players Joined the "+.EventName$[17]+"!",bc_blue; else { mapannounce .EnterMap$[17],"[Devil Square]: You will encounter 3 waves of monsters. The monsters will grow stronger with each wave.",bc_blue; mapannounce .EnterMap$[17],"[Devil Square]: If you defeat all the enemies, you will be given the opportunity to open 10 Treasure Chests with items, equipment, and rare cards inside!",bc_blue; mapannounce .EnterMap$[17],"[Devil Square]: Event has started!",bc_blue; .round = 1; .mob = 0; set .monsterset, query_sql("SELECT id, iname, hp FROM `mob_db` where LV <= 70 and LV >= 60 and hp < 99999999 and MEXP = 0 and not iName='Treasure Chest' ORDER BY RAND() LIMIT 100", .monsterid, .monstername$, .monsterhp); for (.@x = 0; .@x < getmapusers(.EnterMap$[17]); .@x++){ .monstercount = 3; for (.@y = 0; .@y < .monstercount; .@y++) { .monster = rand(0,.monsterset-1); monster .EnterMap$[17],0,0,"[Devil Square]: "+.monstername$[.monster],.monsterid[.monster],.monstercount,strnpcinfo(3)+"::OnDevilDead"; .mob += .monstercount; } } for(.devil = 50; .devil > 0; .devil--){ if(getmapusers(.EnterMap$[17]) < 1) .devil = 0; mapannounce .EnterMap$[17],"There are "+(.devil)+" Minuets Remaining",bc_blue; sleep 60000; } mapannounce .EnterMap$[17],"Time Is up",bc_blue; } .round = .mob = $@CurrentEvent = 0; killmonsterall .EnterMap$[17]; for ( .@i = 6; .@i < getarraysize( .devilflag ); .@i++ ) removemapflag .EnterMap$[17], .devilflag[.@i]; sleep 5000; mapwarp .EnterMap$[17],"prontera",155,172; end; OnDevilDead: if(.round > 3){ $MVPDefeat += 5; if (rand(1,.2 + $MVPDefeat) == 1) { mapannounce .EnterMap$[17],"[Devil Square]: It's not over yet! Another MVP Has entered the realm!!", bc_map; set.mob, 0; if (getmapusers(.EnterMap$[17]) <= 5) set .monsterset, query_sql("SELECT id, iname FROM `mob_db` where LV <= 99 and LV >= 1 and MEXP>1", .monsterid, .monstername$); else set .monsterset, query_sql("SELECT id, iname FROM `mob_db` where LV <= 99 and LV >= 85 and MEXP>1", .monsterid, .monstername$); .monstercount = 1; .monster = rand(0,.monsterset-1); monster .EnterMap$[17],0,0,"[Devil Square]: "+.monstername$[.monster],.monsterid[.monster],1,strnpcinfo(3)+"::OnDevilDead"; } else { mapannounce .EnterMap$[17],"The Devil Square has been eradicated!", bc_map; mapannounce .EnterMap$[17],"Treasure chests have appeared across the map!", bc_map; .round++; set .monsterset, query_sql("SELECT id FROM `mob_db` where iName='Treasure Chest';", .monsterid); for(.@x = 0; .@x < getmapusers(.EnterMap$[17]); .@x++){ monster .EnterMap$[17],0,0,"[Devil Square]: "+.monstername$[.monster],.monsterid[.monster],1,strnpcinfo(3)+"::OnTreasureDead"; .mob++; } } end; } else { .mob--; if ( .mob <= 10 && .mob >= 1) announce "Devil Square : "+ .mob +" monsters remaining in round "+.round+".", bc_map; else if ( .mob <= 0 ) { if(.round == 3){ mapannounce .EnterMap$[17],"[Devil Square]: Watchout!! An MVP Has entered the realm!!", bc_map; set.mob, 0; if (getmapusers(.EnterMap$[17]) <= 5) set .monsterset, query_sql("SELECT id, iname FROM `mob_db` where LV <= 99 and LV >= 1 and MEXP>1", .monsterid, .monstername$); else set .monsterset, query_sql("SELECT id, iname FROM `mob_db` where LV <= 99 and LV >= 85 and MEXP>1", .monsterid, .monstername$); .monstercount = 1; .monster = rand(0,.monsterset-1); monster .EnterMap$[17],0,0,"[Devil Square]: "+.monstername$[.monster],.monsterid[.monster],1,strnpcinfo(3)+"::OnDevilDead"; .round++; } else { mapannounce .EnterMap$[17],"[Devil Square]: Entering round "+(.round + 1)+" in 30 seconds", bc_map; sleep 20000; mapannounce .EnterMap$[17],"[Devil Square]: Entering round "+(.round + 1)+" in 10 seconds.", bc_map; sleep 5000; mapannounce .EnterMap$[17],"[Devil Square]: Entering round "+(.round + 1)+" in 5 seconds.", bc_map; sleep 5000; .round++; .mob = 0; .@lvmin = 65 + .round * 5; .@lvmax = .@lvmin + 5; set .monsterset, query_sql("SELECT id, iname, hp FROM `mob_db` where LV <= "+.@lvmax+" and LV >= "+.@lvmin+" and hp < 99999999 and MEXP = 0 and not iName='Treasure Chest' ORDER BY RAND() LIMIT 100", .monsterid, .monstername$, .monsterhp); for(.@x = 0; .@x < getmapusers(.EnterMap$[17]); .@x++){ .monstercount = 3; for(.@y = 0; .@y < .monstercount; .@y++) { .monster = rand(0,.monsterset-1); monster .EnterMap$[17],0,0,"[Devil Square]: "+.monstername$[.monster],.monsterid[.monster],.monstercount,strnpcinfo(3)+"::OnDevilDead"; .mob += .monstercount; } } } } } end; OnTreasureDead: .mob--; if (.mob < 1){ .round = .mob = .devil = 0; addrid(5,0,.EnterMap$[17]); Func_Prizes(getcharid(0),.EventName$[17]); sleep2 10000; warp "prontera",155,172; } end; //================================== OnPCLogOutEvent: //-- On Logout //================================== if($@CurrentEvent == -10 && getcharid(3) == $@Target){ mapannounce .EnterMap$[10],"The target has logged out of this game. This round will be nulled.",bc_blue; $@Target = -1; } else if($@CurrentEvent == -13 || $@CurrentEvent == 13){ for(.@i = 0; .@i < .register_count; .@i++) if(getcharid(3) == .register_aid[.@i]) deletearray .register_aid[.@i], 1; } end; //================================== OnPCDieEvent: //-- On player death //================================== if(($@CurrentEvent == -4 && strcharinfo(3) == .EnterMap$[4]) || ($@CurrentEvent == -2 && strcharinfo(3) == .EnterMap$[2])) warp "prontera",155,172; if($@CurrentEvent == -10 && getcharid(3) == $@Target ){ Func_Prizes(killerrid,.EventName$[10]); $@Target = -1; } end; //================================== OnInit: //-- Config //================================== // ------------------- // Rewards // ------------------- // Recive rewards via // [0] = Direct to inv // [1] = Mail / RoDex $@Mail = 1; // Does not support multiple item rewards // Rewards are Mailed to winners // Ro Dex Supports 5 Items // Old Mail & Direct DO NOT support multiple items setarray $@RewardID ,7539,0,0,0,0; setarray $@RewardQNT , 50,0,0,0,0; $@RewardZeny = 1000000; // Not Adding Card / Random Bonus Support Yet, bug me if you really want it. // ------------------- // Ranking // ------------------- // Enable Event Ranking // Bitwise // [1] = Liftime // [2] = Mothly // [3] = Both $@EventRanking = 3; // ------------------- // At Commands // ------------------- // Run Event Command to manually run event bindatcmd("runevent",strnpcinfo(3)+"::OnRunEvent",60,99); // End Event Command to manually end event bindatcmd("stopevent",strnpcinfo(3)+"::OnEndEvent",60,99); // Randomize Event Command to randomize event scedule bindatcmd("randevent",strnpcinfo(3)+"::OnRandomize",60,99); // Clear Event Command to wipe event scedule bindatcmd("wipeevent",strnpcinfo(3)+"::OnClear",60,99); // Remove Event Command to wipe event scedule bindatcmd("removeevent",strnpcinfo(3)+"::OnRemoveType",60,99); // Add Event Command to wipe event scedule bindatcmd("addevent",strnpcinfo(3)+"::OnRemoveType",60,99); // Join Event Command bindatcmd("joinevent",strnpcinfo(3)+"::OnJoinEvent",0,99); // ------------------- // Event Data // ------------------- // Gm Level to access GM Menus .GMAccess = 99; // How Many Mins after the hour till event starts // Don't forget 5 mins for Func_Countdown .StartTime = 25; // Event Names setarray .EventName$[1], "Emperium Event","Zombie Survival","Dice Event","PvP Event","Maze Event", "Find The Poring","Cluckers","Lucky Pick","Bombring Event","Manhunt", "Find The Mushroom","Find The Baphomet","Grab the Candy!","Monsters Counting","Disguise Event", "Fabre Event","Devil Square"; // Colored Event Names setarray .ColorName$[1], "^00CCCC"+.EventName$[1]+"^000000", "^CC00CC"+.EventName$[2]+"^000000", "^00CC00"+.EventName$[3]+"^000000", "^CC0000"+.EventName$[4]+"^000000", "^00CC00"+.EventName$[5]+"^000000", "^00CCCC"+.EventName$[6]+"^000000", "^00CC00"+.EventName$[7]+"^000000", "^00CC00"+.EventName$[8]+"^000000", "^CC00CC"+.EventName$[9]+"^000000", "^CC0000"+.EventName$[10]+"^000000", "^00CCCC"+.EventName$[11]+"^000000", "^00CCCC"+.EventName$[12]+"^000000", "^00CC00"+.EventName$[13]+"^000000", "^00CC00"+.EventName$[14]+"^000000", "^00CC00"+.EventName$[15]+"^000000", "^00CCCC"+.EventName$[16]+"^000000", "^CC00CC"+.EventName$[17]+"^000000"; // Min Players // Cluckers, Mushroom & Monter Counting don't check setarray .MinPlayers[1], 2,1,2,3,2, 1,0,3,1,99, 0,0,2,0,3, 3,3; // @JoinEvent warp points setarray .EnterMap$[1], "prontera","1@zombie","quiz_01","guild_vs2","maze", "guild_vs2","prontera","prontera","quiz_02","guild_vs2",//"pvp_n_1-5" needs a fix "prontera","prontera","guild_vs2","prontera","guild_vs2", "guild_vs2","guild_vs2"; setarray .EnterX[1], 161, 0,205, 0,371, 0,155,161, 59, 0, 0, 0, 0,156, 0, 0, 50; setarray .EnterY[1], 168, 0, 92, 0,143, 0,227,168,345, 0, 0, 0, 0,164, 0, 0, 50; // Zombies Spawned per Wave // MobID1,Quantity1{,MobID2,Quantity2{,{....}} // Quantity is multiplied by number of waves // so 10 will become 100 in last wave // and mobs are not killed between // so 10 will have 550 spawned in last wave setarray .Zombies,1394,10,1423,5,1298,1; // Fake Poring Names setarray .Poring$,"Porjng","P0ring","Porlng","Porimg","Porinq", "Poporing","This One","Right","Kill Me","Poning", "qoring","Pooring","Pouring","Polling","~Poring~", "Winner","Prize","Porirg","Paring","Notice Me Senpai", "Pickle","Puring","Ponirg","Poning","P o r i n g"; // Number of poring to Spawn in Find the poring Event .PoringSpawn = 2; // Poring and Bombring and Grab the Candy Mapflags setarray .bombflag,mf_nosave,mf_nowarp,mf_nowarpto,mf_nomemo,mf_noteleport,mf_noreturn,mf_nobranch,mf_nomobloot,mf_nomvploot,mf_noskill,mf_noitemconsumption,mf_nodrop,mf_notrade,mf_nopenalty; // Devil Square Mapflags setarray .devilflag,mf_nosave,mf_nowarp,mf_nowarpto,mf_nomemo,mf_noteleport,mf_noreturn,mf_notrade,mf_nopenalty; // Mushroom Event Possible Maps setarray .ShroomMaps$,"izlude","geffen","morocc","prontera"; // Baphomet Event Possible Maps setarray .BaphoMaps$,"splendide","hugel","yuno","comodo","xmas","aldebaran","izlude","payon","geffen","morocc","prontera"; // Number of waves in Bombporing Event .Bombwaves = 5; // Item ID used in the Grab the Candy! event // Best to use a custom ID .candy_id = 529; // Monster Counting setarray .CountMonster,1084,1085; // Number of rounds for Monster Counting .CountRound = 1; // Monster Coutning Mob Spawn area setarray .CountXY,152,160,159,167; // Winners Answer Delay for Monster Counting set .Delay,10; // Spam Prevention for Monster Counting set .Spam,3; // Test mode, Shortens Coutdown timer to 30 seconds for faster testing // [0] = Off // [1] = On .TestMode = 0; // ------------------- // Don't Touch Ever // ------------------- disablenpc "Disguise Event"; $@CurrentEvent = 0; if( .StartTime > 59 ) .StartTime = 59; if( .StartTime < 0 ) .StartTime = 0; setarray .Days$[0],"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"; end; } //================================== //-- Emperium Event Extras //================================== sword_1-1,216,208,4 script Emp_Break -1,{ OnBreak: stopnpctimer; .@Time = getnpctimer(0); .@m = .@Time / 60000; .@s = (.@Time - .@m * 60000) / 1000; .@ms = .@Time % 1000; if(.@Time < BestTime || !BestTime) BestTime = .@Time; if(.@Time < $@BestTime){ $@BestTime = .@Time; $@BestCid = getcharid(0); announce "[Emperium Event]: "+strcharinfo(0)+" now holds the top time of "+((.@m)?callfunc("F_InsertPlural",.@i,"minute")+" ":"")+""+((.@s)?.@s+""+((.@ms)?"."+.@ms:"")+" seconds":"")+".",bc_all|bc_blue; } mapannounce .Map$,"You have a "+((.@Time == BestTime)?"new personal best ":"")+"time of "+((.@m)?callfunc("F_InsertPlural",.@i,"minute")+" ":"")+""+((.@s)?.@s+""+((.@ms)?"."+.@ms:"")+" seconds":"")+".",bc_area|bc_blue; sleep2 2500; instance_destroy; end; OnInstanceInit: initnpctimer; stopnpctimer; setnpctimer 0,strnpcinfo(3); .Map$ = strnpcinfo(4); monster .Map$,223,206,"Emperium",1288,1,strnpcinfo(3)+"::OnBreak"; .GID = $@mobid; setunitdata .GID,UMOB_DMGIMMUNE,1; sleep 2000; mapannounce .Map$,"[Emperium Event]: Goal is simple, kill the Emperium as fast as you can~",bc_map|bc_blue; sleep 1000; mapannounce .Map$,"[Emperium Event]: Once Countdown is done have at it.",bc_map|bc_blue; sleep 2000; mapannounce .Map$,"5",bc_map|bc_blue; sleep 1000; mapannounce .Map$,"4",bc_map|bc_blue; sleep 1000; mapannounce .Map$,"3",bc_map|bc_blue; sleep 1000; mapannounce .Map$,"2",bc_map|bc_blue; sleep 1000; mapannounce .Map$,"1",bc_map|bc_blue; sleep 1000; mapannounce .Map$,"Go~",bc_map|bc_blue; startnpctimer strnpcinfo(3); setunitdata .GID,UMOB_DMGIMMUNE,0; end; } //================================== //-- Maze Event Extras //================================== maze,358,148,0 warp mazeroadblock 2,2,maze,371,149 maze,369,162,4 script Event_Agent#Maze 405,4,4,{ mes "[Event Agent]"; mes "Walk up to me to claim prize~"; close; OnTouch_: if($@CurrentEvent == -5){ $@CurrentEvent = 0; announce "Congrats "+strcharinfo(0)+", a winner in the Maze Event.",bc_all|bc_blue; WonEvents++; MWonEvents++; if($@Mail){ mail getcharid(0), "no-reply", "Maze Event", "Congratulations!% You have won in the Maze Event % % %[ Your reward is attached. ]", $@RewardZeny, $@RewardID, $@RewardQNT; query_sql("UPDATE `mail` SET message = REPLACE(message,'%',CHAR(13)) WHERE send_name = 'no-reply'"); } else { getitem $@RewardID,$@RewardQNT; zeny += $@RewardZeny; } mapwarp "maze","prontera",155,172; } warp "prontera",155,172; end; } //================================== //-- Cluckers Event //================================== prontera,155,227,4 script Cluckers 800,{ if ($@CurrentEvent == -7) { specialeffect2 EF_HIT3; switch(rand(16)) { case 0: npctalk "CLUUUUUUCK!!!"; unitkill getcharid(3); skilleffect "NPC_SELFDESTRUCTION",1; emotion ET_HUK; break; case 1: npctalk "Cluuuuuck!~"; break; case 2: unitkill getcharid(3); skilleffect "NPC_SELFDESTRUCTION",1; break; case 3: sc_start SC_Freeze,10000,0; break; case 4: npctalk "CLUUUUUUUUUCK!!!"; unitkill getcharid(3); skilleffect "NPC_SELFDESTRUCTION",1; emotion ET_HUK; break; case 5: sc_start SC_Sleep,10000,0; break; case 6: sc_start SC_Stone,10000,0; emotion ET_KIK; break; case 7: npctalk "CLUUUUUUCK!!!"; unitkill getcharid(3); skilleffect "NPC_SELFDESTRUCTION",1; emotion ET_HUK; break; case 8: npctalk "Cluck! CLUUUCK!!"; unitkill getcharid(3); skilleffect "NPC_SELFDESTRUCTION",1; emotion ET_HUK; break; case 9: sc_start SC_Stun,10000,0; break; case 10: sc_start SC_Sleep,10000,0; emotion ET_KIK; break; case 11: npctalk "Cluck! Cluck!"; break; case 12: sc_start SC_Stun,10000,0; break; case 13: unitkill getcharid(3); skilleffect "NPC_SELFDESTRUCTION",1; break; default: if (!rand(7)) { npctalk "WOOF!..........."; specialeffect2 EF_SPHERE; announce "Congrats "+strcharinfo(0)+", a winner in the Cluckers Event.",bc_all|bc_blue; WonEvents++; MWonEvents++; if($@Mail){ mail getcharid(0), "no-reply", "Cluckers Event", "Congratulations!% You have won in the Cluckers Event % % %[ Your reward is attached. ]", $@RewardZeny, $@RewardID, $@RewardQNT; query_sql("UPDATE `mail` SET message = REPLACE(message,'%',CHAR(13)) WHERE send_name = 'no-reply'"); } else { getitem $@RewardID,$@RewardQNT; zeny += $@RewardZeny; } $@CurrentEvent = 0; } else { npctalk "Cluck! CLUUUCK!!"; unitkill getcharid(3); skilleffect "NPC_SELFDESTRUCTION",1; npcwalkto rand(152,159),rand(234,241); } break; } end; } mes "Cluck cluck! Cluuuuuck?"; mes "Cluck...."; close; OnTimer15000: npcwalkto 70+rand(17),135+rand(16); setnpctimer 0; end; OnInit: npcspeed 75; npcwalkto rand(152,159),rand(234,241); initnpctimer; end; OnEventStart: $@CurrentEvent = 7; for(.@i = 5; .@i > 0; .@i--){ Announce "Cluckers Event Will begin in "+callfunc("F_InsertPlural",.@i,"minute")+"!",bc_blue; Announce "Please type @joinevent to join",bc_blue; sleep 60000; } Announce "Cluckers Event Has Begun!",bc_blue; $@CurrentEvent = -7; sleep 60000 * 45; if($@CurrentEvent == -7){ $@CurrentEvent = 0; Announce "Cluckers Event Has Ended with No Winner!",bc_blue|bc_area|bc_npc; } end; } guild_vs2,50,50,4 script Disguise Event 795,{ if($@CurrentEvent == -15){ if(getgmlevel() == 99) dispbottom $MonsterName$+""; input .@input$; if(.@input$ == $MonsterName$) doevent strnpcinfo(3)+"::OnCorrect"; } end; OnStart: .EventON = .Wait = 1; setnpctimer 0; initnpctimer; end; OnTimer10000: if (.Change) end; .Wait = 0; OnDisguise: if (.MVPRule) { .Winner = 0; .Monster = rand(getarraysize(.MVP)); $MonsterName$ = getmonsterinfo(.MVP[.Monster],0); } else { .Winner = 0; .Monster = 1000+rand(1000,1995); if (compare(","+.BlackList$+"," , ","+.Monster+",") || .Monster == .LastMonster) goto OnDisguise; .LastMonster = .Monster; $MonsterName$ = getmonsterinfo(.Monster,0); } deletepset 1; defpattern 1,"([^:]+):.\\s*"+$MonsterName$+".*", "OnCorrect"; activatepset 1; if (.MVPRule) setnpcdisplay "Disguise Event",.MVP[.Monster]; else setnpcdisplay "Disguise Event",.Monster; .Change = 1; setnpctimer 0; end; OnTimer30000: .Change = 0; setnpcdisplay "Disguise Event",795; npctalk "Disguise Event : You took too long to guess what I was. Please wait 10 seconds while I disguise again."; specialeffect EF_DETECT2; set $MonsterName$,""; deletepset 1; stopnpctimer; setnpctimer 0; initnpctimer; end; OnCorrect: if (.Winner) { dispbottom "Someone has already won this round."; end; } set .Winner,1; set .RoundCount,.RoundCount+1; deletepset 1; activatepset 1; specialeffect2 EF_SPHERE; announce "Congrats "+strcharinfo(0)+", a winner in the Disguise Event.",bc_all|bc_blue; WonEvents++; MWonEvents++; if($@Mail){ mail getcharid(0), "no-reply", "Disguise Event", "Congratulations!% You have won in the Disguise Event % % %[ Your reward is attached. ]", $@RewardZeny, $@RewardID, $@RewardQNT; query_sql("UPDATE `mail` SET message = REPLACE(message,'%',CHAR(13)) WHERE send_name = 'no-reply'"); } else { getitem $@RewardID,$@RewardQNT; zeny += $@RewardZeny; } if (.RoundCount >= .Rounds) { setnpcdisplay "Disguise Event",795; .RoundCount = .Change = .EventON = 0; setnpctimer 0; stopnpctimer; npctalk "Disguise Event : Thank you all for playing. That was the last round of the Disguise Event. Come play again later."; mapwarp "guild_vs2","prontera",155,172; end; } setnpcdisplay "Disguise Event",795; .Change = 0; setnpctimer 0; end; OnInit: // Npc Name .n$ = "[^0000FFDisguise NPC^000000]"; // Disguise Event MVP Ruleset // Toggle 1/0 // [0] Normal monsters, except blacklist // [1] MVPs from list .MVPRule = 1; // Number of rounds for Disguise Event .DisguiseRound = 5; // MVP List setarray .MVP[0],1038,1039,1046,1059,1086,1087,1112,1115,1147,1150,1157,1159,1190,1251,1252,1272,1312,1373, 1389,1399,1418,1492,1502,1511,1583,1623,1630,1646,1647,1648,1649,1650,1651,1658,1685,1688, 1708,1719,1734,1751,1768,1779,1785,1802,1832,1871,1874,1885,1917,1980,2022,2068,2087,2131, 2156,2165; // Blacklist set .BlackList$, "1003,1006,1017,1021,1022,1027,1043,1075,1136,1137,1168," + "1171,1172,1173,1181,1187,1210,1217,1218,1222,1223,1224,1225,1226,1227,1228," + "1233,1284,1407,1411,1414,1495,1501,1900,1996,2000,2001,2002,2003,2004," + "2005,2006,2007,2011,2012,2025,2028,2029,2030,2031,2032,2033,2034,2035," + "2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049," + "2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063," + "2064,2065,2066,2067,2075,2076,2077,2078,2079,2080,2081,2083,2084,2085," + "2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099," + "2100,2101,2012,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113," + "2114,2115,2116,2117,2118,2119,2120,2121,2123,2124,2125,1496,"; } //================================== //-- Event Shops //================================== //prontera,164,175,3 itemshop Event Headgear Shop 877,33001,5381:50,5391:50,5462:50,5463:75,5596:75,5214:100,5380:100,5210:100,5226:100,5227:100,5228:100,5229:100,5230:100,5231:100,5232:100,5233:100,5234:100,5235:100,5236:100,5237:100,5283:100,5288:100,5293:100,5313:100,5314:100,5315:100,5324:100,5372:100,5376:100,5377:100,5378:100,5503:100,5505:100,5529:100,5286:125,5263:125,5098:125,5382:125,5238:175,5239:175,5240:175,5241:175,5242:175,5374:500 //prontera,164,173,3 itemshop Event Rental Shop 877,33001,36502:7,35504:10,35505:10,35503:20 //prontera,164,169,3 itemshop Event Shop 877,33001,12209:1,12211:2,604:3,7621:3,12299:5,12212:5,12311:5,12221:7,608:10,607:15,12208:15,14592:15,12210:15,12214:20,7776:20,35501:25,35502:25 //prontera,164,167,3 itemshop Event Food Shop 877,33001,12041:10,12042:20,12043:30,12044:40,12045:50,12046:10,12047:20,12048:30,12049:40,12050:50,12051:10,12052:20,12053:30,12054:40,12055:50,12056:10,12057:20,12058:30,12059:40,12060:50,12061:10,12062:20,12063:30,12064:40,12065:50,12066:10,12067:20,12068:30,12069:40,12070:50 desde ya muchas gracias saludos,
  6. Problema Solucionado hay que modificar el código por el siguiente, cambiando los nombre de las skill e item por las ID // identifica el equipamiento getinventorylist; while( .@i < @inventorylist_count ){ getinventorylist; freeloop(true); for( .@i = 0; .@i < @inventorylist_count; .@i++ ) { if ( @inventorylist_identify[.@i] == 1 ) continue; else if ( getskilllv(40) == 1 && Sp >= 10 ) heal 0,0; // lol... this is supposed to reduce their SP by 10, whatever else if ( countitem(611) ) delitem 611,1; else if ( getskilllv(224) && Zeny >= ( 100 - ( 5 + 4 * getskilllv(224) ) )* 2/5 ) Zeny -= ( 100 - ( 5 + 4 * getskilllv(224) ) )* 2/5; else if ( getskilllv(37) && Zeny >= ( 100 - ( 5 + 2 * getskilllv(37) ) )* 2/5 ) Zeny -= ( 100 - ( 5 + 2 * getskilllv(37) ) )* 2/5; else if ( Zeny >= 40 ) Zeny -= 40; else break; delitem2 @inventorylist_id[.@i], 1, 0, @inventorylist_refine[.@i], @inventorylist_attribute[.@i], @inventorylist_card1[.@i], @inventorylist_card2[.@i], @inventorylist_card3[.@i], @inventorylist_card4[.@i]; getitem2 @inventorylist_id[.@i], 1, 1, @inventorylist_refine[.@i], 0, @inventorylist_card1[.@i], @inventorylist_card2[.@i], @inventorylist_card3[.@i], @inventorylist_card4[.@i]; .@icount++; } freeloop(false); if ( .@icount ) message strcharinfo(0), "Identified "+ .@icount +" Items."; }
  7. Amigos, buenas tardes, solicito su apoyo para identificar el siguiente problema, tengo el siguiente script que entrega, heal, repara equipo, identifica y refina piedras, el problema es que el código de identificar muestra el siguiente error en consola, como información adicional uso Centos7, ultima versión de rathena y un cliente 2018 en sistema PRE-RE [Error]: pc_checkskill: Invalid skill id 0 (char_id=150000). [Error]: buildin_countitem: Invalid item '0'. [Debug]: Source (NPC): Healer#prt at prontera (162,193) [Error]: pc_checkskill: Invalid skill id 0 (char_id=150000). [Error]: pc_checkskill: Invalid skill id 0 (char_id=150000). [Error]: pc_checkskill: Invalid skill id 0 (char_id=150000). [Error]: pc_checkskill: Invalid skill id 0 (char_id=150000). código NPC //===== rAthena Script ======================================= //= Healer //===== By: ================================================== //= Euphy //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= Basic healer script. //===== Additional Comments: ================================= //= 1.0 Initial script. //= 1.1 Aligned coordinates with @go. //============================================================ - script Healer -1,{ .@Price = 0; // Zeny required for heal .@Buffs = 1; // Also buff players? (1: yes / 0: no) .@Delay = 5; // Heal delay, in seconds if (@HD > gettimetick(2)) end; if (.@Price) { message strcharinfo(0), "Healing costs " + callfunc("F_InsertComma",.@Price) + " Zeny."; if (Zeny < .@Price) end; if (select("^0055FFHeal^000000:^777777Cancel^000000") == 2) end; Zeny -= .@Price; } // Elimina Los Buff negativos sc_end SC_STONE; sc_end SC_FREEZE; sc_end SC_STUN; sc_end SC_SLEEP; sc_end SC_POISON; sc_end SC_CURSE; sc_end SC_SILENCE; sc_end SC_CONFUSION; sc_end SC_BLIND; sc_end SC_BLEEDING; sc_end SC_QUAGMIRE; sc_end SC_DECREASEAGI; sc_end SC_BERSERK; // refina Oridicon .@ori = countitem(756); if ( .@ori >= 5 ) { delitem 756, .@ori / 5 * 5; getitem 984, .@ori / 5; message strcharinfo(0), "Refined "+ ( .@ori / 5 * 5 ) +" Oridecon Stones, got "+ ( .@ori / 5 ) +" Oridecons."; } // refina Elunium .@elu = countitem(757); if ( .@elu >= 5 ) { delitem 757, .@elu / 5 * 5; getitem 985, .@elu / 5; message strcharinfo(0), "Refined "+ ( .@elu / 5 * 5 ) +" Elunium Stones, got "+ ( .@elu / 5 ) +" Eluniums."; } // repara el equipo dañado if( getbrokenid(1) ) repairall; // identifica el equipamiento getinventorylist; while( .@i < @inventorylist_count ){ getinventorylist; freeloop(true); for( .@i = 0; .@i < @inventorylist_count; .@i++ ) { if ( @inventorylist_identify[.@i] == 1 ) continue; else if ( getskilllv(MC_IDENTIFY) == 1 && Sp >= 10 ) heal 0,0; // lol... this is supposed to reduce their SP by 10, whatever else if ( countitem(Spectacles) ) delitem Spectacles,1; else if ( getskilllv(RG_COMPULSION) && Zeny >= ( 100 - ( 5 + 4 * getskilllv(RG_COMPULSION) ) )* 2/5 ) Zeny -= ( 100 - ( 5 + 4 * getskilllv(RG_COMPULSION) ) )* 2/5; else if ( getskilllv(MC_DISCOUNT) && Zeny >= ( 100 - ( 5 + 2 * getskilllv(MC_DISCOUNT) ) )* 2/5 ) Zeny -= ( 100 - ( 5 + 2 * getskilllv(MC_DISCOUNT) ) )* 2/5; else if ( Zeny >= 40 ) Zeny -= 40; else break; delitem2 @inventorylist_id[.@i], 1, 0, @inventorylist_refine[.@i], @inventorylist_attribute[.@i], @inventorylist_card1[.@i], @inventorylist_card2[.@i], @inventorylist_card3[.@i], @inventorylist_card4[.@i]; getitem2 @inventorylist_id[.@i], 1, 1, @inventorylist_refine[.@i], 0, @inventorylist_card1[.@i], @inventorylist_card2[.@i], @inventorylist_card3[.@i], @inventorylist_card4[.@i]; .@icount++; } freeloop(false); if ( .@icount ) message strcharinfo(0), "Identified "+ .@icount +" Items."; } // Entrega los Buff specialeffect2 EF_HEAL2; percentheal 100,100; if (.@Buffs) { specialeffect2 EF_INCAGILITY; sc_start SC_INCREASEAGI,240000,10; specialeffect2 EF_BLESSING; sc_start SC_BLESSING,240000,10; } percentheal 100,100; if (.@Delay) @HD = gettimetick(2) + .@Delay; end; } // Duplicates //============================================================ alberta,25,240,6 duplicate(Healer) Healer#alb 909,13,13 aldebaran,135,118,6 duplicate(Healer) Healer#alde 909,13,13 amatsu,200,79,4 duplicate(Healer) Healer#ama 909,13,13 ayothaya,207,169,6 duplicate(Healer) Healer#ayo 909,13,13 comodo,184,158,6 duplicate(Healer) Healer#com 909,13,13 einbech,57,36,6 duplicate(Healer) Healer#einbe 909,13,13 einbroch,57,202,6 duplicate(Healer) Healer#einbr 909,13,13 geffen,115,72,6 duplicate(Healer) Healer#gef 909,13,13 gonryun,156,122,6 duplicate(Healer) Healer#gon 909,13,13 hugel,89,150,6 duplicate(Healer) Healer#hug 909,13,13 izlude,125,118,6 duplicate(Healer) Healer#izl 909,13,13 //Pre-RE: (125,118) jawaii,250,139,4 duplicate(Healer) Healer#jaw 909,13,13 lighthalzen,152,100,6 duplicate(Healer) Healer#lhz 909,13,13 louyang,226,103,4 duplicate(Healer) Healer#lou 909,13,13 manuk,272,144,6 duplicate(Healer) Healer#man 909,13,13 mid_camp,203,289,6 duplicate(Healer) Healer#mid 909,13,13 moc_ruins,72,164,4 duplicate(Healer) Healer#moc 909,13,13 morocc,153,97,6 duplicate(Healer) Healer#mor 909,13,13 moscovia,220,191,4 duplicate(Healer) Healer#mos 909,13,13 niflheim,212,182,5 duplicate(Healer) Healer#nif 909,13,13 payon,179,106,4 duplicate(Healer) Healer#pay 909,13,13 prontera,162,193,4 duplicate(Healer) Healer#prt 909,13,13 rachel,125,116,6 duplicate(Healer) Healer#rac 909,13,13 splendide,201,153,4 duplicate(Healer) Healer#spl 909,13,13 thor_camp,249,74,4 duplicate(Healer) Healer#thor 909,13,13 umbala,105,148,3 duplicate(Healer) Healer#umb 909,13,13 veins,217,121,4 duplicate(Healer) Healer#ve 909,13,13 xmas,143,136,4 duplicate(Healer) Healer#xmas 909,13,13 yuno,164,45,4 duplicate(Healer) Healer#yuno 909,13,13 // Duplicates (Renewal) //============================================================ brasilis,194,221,6 duplicate(Healer) Healer#bra 909,13,13 dewata,195,187,4 duplicate(Healer) Healer#dew 909,13,13 dicastes01,201,194,4 duplicate(Healer) Healer#dic 909,13,13 ecl_in01,45,60,4 duplicate(Healer) Healer#ecl 909,13,13 malangdo,132,114,6 duplicate(Healer) Healer#mal 909,13,13 malaya,227,204,6 duplicate(Healer) Healer#ma 909,13,13 mora,55,152,4 duplicate(Healer) Healer#mora 909,13,13 saludos,
  8. Chicos muchas gracias por responder @Maelhablas de poner las llaves directamente en las funciones sin utilizar las variables. Creo que el archivo está lib/flux/loginserver.php
  9. Estimados, para no abrir otro post, he tratado de habilitar el ReCaptcha de Google para poder aumentar la seguridad, pero no logro hacer login o registrar cuentas, solo recibo un mensaje de error, he revisado una y otra vez las claves en el archivo "application.php" sin lograr resolver el error, de hecho la pagina de recaptcha me advierte de un error en un banner amarillo (se adjunta foto), alguna idea de lo que podría ser, ¿alguna librería de PHP? 'ServerStatusCache' => 2, // Store a cached server status and refresh every X minutes. Default: 2 minutes (value is measured in minutes). 'ServerStatusTimeout' => 2, // For each server, spend X amount of seconds to determine whether it's up or not. 'SessionKey' => 'fluxSessionData', // Shouldn't be changed, just specifies the session key to be used for session data. 'DefaultModule' => 'main', // This is the module to execute when none has been specified. 'DefaultAction' => 'index', // This is the default action for any module, probably should leave this alone. (Deprecated) 'GzipCompressOutput' => false, // Whether or not to compress output using zlib. 'GzipCompressionLevel' => 9, // zlib compression level. (1~9) 'OutputCleanHTML' => true, // Use this if you have Tidy installed to clean your HTML output when serving pages. 'ShowCopyright' => true, // Whether or not to show the copyright footer. 'ShowRenderDetails' => true, // Shows the "page rendered in X seconds" and "number of queries executed: X" in the default theme. 'UseCleanUrls' => false, // Set to true if you're running Apache and it supports mod_rewrite and .htaccess files. 'DebugMode' => false, // Set to false to minimize technical details from being output by Flux. WARNING: DO NOT USE THIS OPTION ON A PUBLICALLY-ACCESSIBLE CP. 'UseCaptcha' => true, // Use CAPTCHA image for account registration to prevent automated account creations. (Requires GD2/FreeType2) 'UseLoginCaptcha' => true, // Use CAPTCHA image for account logins. (Requires GD2/FreeType2) 'EnableReCaptcha' => true, // Enables the use of reCAPTCHA instead of Flux's native GD2 library (http://www.google.com/recaptcha) 'ReCaptchaPublicKey' => '6LeDHtYUAAAAADDYc04IdF0ltYVIvW7U4EJz5NPR', // This is your reCAPTCHA public key [REQUIRED FOR RECAPTCHA] (sign up at http://www.google.com/recaptcha) 'ReCaptchaPrivateKey' => '6LeDHtYUAAAAAB1MA-zRfLAIw_ERdFG2k-uBxIm-', // This is your reCAPTCHA private key [REQUIRED FOR RECAPTCHA] (sign up at http://www.google.com/recaptcha) 'ReCaptchaTheme' => 'light', // ReCaptcha theme to use (Value: dark or light) (see: https://developers.google.com/recaptcha/docs/display#render_param) 'DisplaySinglePages' => true, // Whether or not to display paging for single page results. 'ForwardYears' => 15, // (Visual) The number of years to display ahead of the current year in date inputs. 'BackwardYears' => 50, // (Visual) The number of years to display behind the current year in date inputs. 'ColumnSortAscending' => ' ▲', // (Visual) Text displayed for ascending sorted column names. 'ColumnSortDescending' => ' ▼', // (Visual) Text displayed for descending sorted column names. 'CreditExchangeRate' => 1.0, // The rate at which credits are exchanged for dollars. 'MinDonationAmount' => 2.0, // Minimum donation amount. (NOTE: Actual donations made that are less than this account won't be exchanged) 'DonationCurrency' => 'USD', // Preferred donation currency. Only donations made in this currency will be processed for credit deposits. 'MoneyDecimalPlaces' => 2, // (Visual) Number of decimal places to display in amount. 'MoneyThousandsSymbol' => ',', // (Visual) Thousandths place separator (a period in European currencies). 'MoneyDecimalSymbol' => '.', // (Visual) Decimal separator (a comma in European currencies). 'AcceptDonations' => false, // Whether or not to accept donations. 'PayPalIpnUrl' => 'www.paypal.com', // The ipnpb.paypal.com and ipnpb.sandbox.paypal.com endpoints only accept HTTPS connections. If you currently use www.paypal.com, you should move to ipnpb.paypal.com when you update your code to use HTTPS. 'PayPalBusinessEmail' => 'admin@localhost', // Enter the e-mail under which you have registered your business account. 'PayPalReceiverEmails' => array( // These are the receiver e-mail addresses who are allowed to receive payment.
  10. Estimados, buenas tardes, quiero acudir a ustedes para aconsejar a como aumentar la protección al FluxCP he tenido registro de cuentas extrañas a pesar que el servidor aun no esta publicado en ningún grupo, de hecho el otro día las cuentas que están bloqueadas permanentemente llegaron bloquear el MySQL de la VPS, actualmente el emulador de ratehna esta en un servidor VPS se un proveedor "X" y la pagina web esta en un hosting de otro proveedor, la la IP del web hosting es la única que tiene acceso al MySQL del emulador desde ya agradezco su colaboración
  11. otro dato adicional, hable con mi proveedor web y me indica que no puede abrir estos puertos, ya que el servidor web es compartido y afectaría a el resto de usuarios.
  12. Kevo89, para no tener problemas en el vps, debes fijarte si tiene los puertos abiertos 6900, 6121, 5121, 3306 y que los permisos del usuario de la DB que creaste para controlar el emulador tenga permisos para conectarse de forma remota, ya que el FluxCP como esta en otra servidor debe ir a realizar consultas. saludos,
  13. Buenas tardes comunidad, alguien me podría orientar un poco en este error que se presenta en el FluxCP, estoy usando la versión de PHP 5.6, ya verifique el "servers.php" y que los puertos estuvieran abiertos, el FluxCP, puede crear cuenta, eliminar, modificar, puedo ver los item DB y mobs DB, pero lo único que no funciona es el estado servidor, he buscado información en la web sobre este problema como dato adicional el Emulador esta alojado en una VPS (Linux Centos 7) y FluxCP esta alojado en un webhosting con (Cpanel), ambos en proveedores diferentes. cualquier idea es bien recibida desde ya muchas gracias saludos,
  14. Muchas, gracias por la ayuda, mi cliente funciona a la perfección, ya estoy revisando a mas detalle, pero por ahora todo ok!, nuevamente mil gracias saludos,
  15. Gracias Mael, llegando a la casa lo voy a revisar Mael, buenas tardes, a que te refieres con pegar tu carpeta data sobre esto, me puedes explicar por favor
  16. Hola comunidad, Junto con saludar quisiera solicitar su ayuda, llevo muchos años sin montar un servidor de Raganrok, con lo cual mis conocimiento y materiales estan extremadamente des-actualizados, es por ello que solicito su apoyo y orientación, actualmente tengo corriendo un servidor local en modo PRE Renewal, pero cuando trate de hacer el diff de los clientes comenzaron mis problemas. tome como referencia la siguiente guía [Tutorial] Video Edition - How to Setup rAthena and run Ragnarok Updated 2018-7-28 - Page 2 - Installation Support - rAthena pero aun así tengo mis duda, por ejemplo: Que versión de PACKETVER es mas estable para un servidor tipo PRE Renewal ¿Que versión de cliente es la recomendada? ¿cuales son las carpetas System y DATA recomendadas para la PRE Renewal Al usar el cliente Parcher "NEMO" debo escoger iteminfo.lub o .lua para una versión PRE Renewal desde ya agradezco cualquier ayuda saludos,
×
×
  • Create New...