Jump to content

KhrizPlayCL

Members
  • Posts

    27
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

KhrizPlayCL's Achievements

Santa Poring

Santa Poring (3/15)

  • Conversation Starter
  • First Post
  • Collaborator
  • Dedicated
  • Week One Done

Recent Badges

1

Reputation

  1. Habilitando la opción informada por @KazumaSatou se mostró el icono de la Roullete, después como menciona @_Terra fue solo cambiar las imágenes del GRF en las rutas señaladas, después solo es cambiar el comportamiento del botón clif_parse_roulette_open en clif.cpp y recopilar void clif_parse_roulette_open( int fd, struct map_session_data* sd ){ nullpo_retv(sd); if (sd) { if (sd->npc_id || sd->vender_id || sd->state.trading || sd->state.storage_flag) return; struct npc_data* nd; nd = npc_name2id("NAME_NPC"); if (nd == NULL) return; run_script(nd->u.scr.script, 0, sd->bl.id, nd->bl.id); } }
  2. Alguna idea de donde puedo obtener estos iconos
  3. gracias muchachos, estoy creado un nuevo ejecutable y les comento como me va
  4. Estimados, buenas tardes he estado buscando información pero sin dar con muchos resultados, que indique como proceder Quiero cambiar el icono del CashShop poniendo otro icono custom (solo imagen), como lo hacen servidores mas modernos que se llama DONA Cambie el comportamiento del la funcion icono roulette open, para que pueda abrir el dialogo del npc de configuracion de mi servidor, el problema es que habilite el funcion de ruleta en mi servidor y no lo tengo oculto en mi en el diff de mi cliente, pero aun asi no logro hacer que me muestra el icono, ya recompile y nada. (tambien acualice la DB con items) Mi Servidor Actual Como quiero que quede cualquier orientación me sirve saludos,
  5. Buenas tardes, les escribo por aquí para ver si me pueden ayudar con el script de un item, en mi servidor tengo un ítem de premio que otorga 100 de cash point al ser consumido, pero mi problema es que al consumirlo y tener el cashshop abierto, este se consume y no entrega los cash mandando un error, ¿qué restricción le puedo poner al script para evitar esta situación? - Id: 671 AegisName: Gold_Coin Name: Moneda Extra単a ROH Type: Usable Buy: 0 Weight: 0 Trade: NoDrop: true NoTrade: false NoSell: true NoCart: true NoStorage: false NoGuildStorage: true NoMail: true NoAuction: true Script: | specialeffect2 100; atcommand "@cash 100"; dispbottom "Has recibido [ 100 Puntos de Creditos ].!"; al consumirla sin tener abierto el cashshop al consumirla teniendo el cashshop abierto
  6. Gracias a la Respuesta de Sapito sucio me dio una idea de donde buscar y les comparto la solución que en ambos casos se encontraba dentro de skill.conf dentro de battle Para el problema de las tramps de hunter/sniper pase la configuracion de 0 oficial a 3 // Skill Trap Type // On official servers if a unit is completely immune to knockback, it will still walk to the last target tile before // stopping when inflicted by a stopping status effect (including traps like Ankle Snare and Spiderweb). All traps on // the way will be activated. // This does NOT include being immune to knock back from equip. This bonus only helps against knockback skills. // 0: (official) // 1: Stop effects in GvG/WoE make units stop immediately. // 2: Stop effects make monsters immune to knockback / bosses stop immediately. // 3: 1+2 skill_trap_type: 3 Para el problema de Bowling Bash elimine el uso de Gutter Line // Area of Bowling Bash chain reaction (pre-renewal only) // 0: Use official gutter line system // 1: Gutter line system without demi gutter bug // 2-20: Area around caster (2 = 5x5, 3 = 7x7, 4 = 9x9, ..., 20 = 41x41) // Note: If you knock the target out of the area it will only be hit once and won't do splash damage bowling_bash_area: 2 con esto las skill quedaron como la recordaban los usuarios saludos,
  7. Estimados, Necesito su apoyo para entender cómo revisar y corregir el funcionamiento de las habilidades mencionadas en el título. Recientemente abrí un servidor de Ragnarok Online configurado en modo Pre-Renewal, utilizando la siguiente configuración: ./configure --enable-epoll=yes --enable-prere=yes --enable-vip=yes --enable-packetver=20180620 Problemas detectados Ankle Snare: Los jugadores han reportado que al utilizar esta habilidad contra ciertos monstruos, como Kasa o Salamander, la primera trampa funciona correctamente y los inmoviliza. Sin embargo, las trampas posteriores se activan pero no vuelven a inmovilizar al enemigo, permitiendo que avance hacia el jugador y lo ataque, lo que no parece ser el comportamiento esperado. Bowling Bash: Se ha reportado un problema con el ataque en área de esta habilidad. Parece que si el personaje no está en una posición específica, el doble golpe característico de Bowling Bash no se activa correctamente. Agradecería cualquier orientación sobre qué archivos revisar o qué ajustes puedo hacer para corregir estos problemas. Cualquier sugerencia será bienvenida. ¡Muchas gracias de antemano por su ayuda!
  8. How can you check that the cash shop is not open before giving the cash to the player?
  9. 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,
  10. @cook1e estimado amigo acabo de realizar lo indicado, pero aun así no logro ver el ranking tampoco se guarda nada en la DB
  11. @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
  12. 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.
  13. 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,
  14. 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."; }
×
×
  • Create New...