//===== Hercules Script ===================================== //= Russian Roulette //===== By: ================================================ //= AnnieRuru //===== Current Version: =================================== //= 1.0 //===== Compatible With: =================================== //= Hercules 2018-05-24 //===== Description: ======================================= //= Just join this event and test your luck //===== Topic ============================================== //= http://herc.ws/board/topic/15927-russian-roulette/ //===== Additional Comments: =============================== //= an event that is good for AFK :P //========================================================== prontera,154,187,5 script Russian Roulette 4_M_GUNSLINGER3,{ mes "["+ strnpcinfo(NPC_NAME) +"]"; if ( .start == false ) { mes "Registration closed. Please come again."; close; } if ( .start == 2 ) { mes "Game is in progress..."; close; } if ( getgmlevel() >= 60 ) { mes "Sorry, a GM cannot participate in this event."; close; } if ( BaseLevel < 55 ) { mes "You must have a Base Level of 55 of above to join this event."; close; } if ( queuesize(.qid) >= .register_limit ) { mes "This event has reach the maximum player participations."; close; } if ( queueadd( .qid, getcharid(3) ) == false ) { mes "You have register for thie event."; close; } mes "Register successfully."; close; OnClock2000: OnStart: .start = 1; .qid = queue(); queueopt .qid, QUEUEOPT_DEATH, strnpcinfo(0)+"::OnQuit"; queueopt .qid, QUEUEOPT_LOGOUT, strnpcinfo(0)+"::OnQuit"; queueopt .qid, QUEUEOPT_MAPCHANGE, strnpcinfo(0)+"::OnQuit"; announce "Russian Roulette event will start in "+ .register_timer +" min.", bc_all; sleep .register_timer * 60000; .start = 2; announce "Russian Roulette event registration close.", bc_all; if ( queuesize(.qid) < .register_min ) { announce "Russian Roulette: Not enough players for the event.", bc_all; queuedel .qid; .start = false; end; } npctalk "You have 1:4 chance of surviving per round..."; sleep 3000; npctalk "Everyone ready ?"; sleep 3000; while ( .start ) { .@iter = queueiterator(.qid); npctalk "Round "+ ++.@round +" Start !!"; sleep 3000; if ( !.start ) { qiclear .@iter; end; } while ( .@aid = qiget(.@iter) ) { getmapxy .@map$, .@x, .@y, UNITTYPE_PC, .@aid; if ( distance(.@x, .@y, .x, .y) > getbattleflag("area_size") ) { npctalk F_Rand( rid2name(.@aid) +" !! Don't think you can run far away from me !!", "Watch my long range ballistic !! Now you die "+ rid2name(.@aid) +" !!", "(Filled the pistol with bullets) BANG !!", "Surgical Strike Launch ... 3... 2... 1.. BOOM !!", "Nuclear Launch Detected.", "KAMEHAME HAA !!"); specialeffect F_Rand( EF_FIREPILLARBOMB, EF_HIT2, EF_ARROWSTORM_STR ), AREA, .@aid; specialeffect F_Rand( EF_AIMED_STR, EF_TRACKCASTING ), AREA; showscript "**Sniped !!*", .@aid; unitkill .@aid; } else if ( rand(4) ) { // 75% chance survive npctalk F_Rand( "You are so lucky "+ rid2name(.@aid) +" !!", "WOOT !! Miss !!" "Angel has protect "+ rid2name(.@aid) +" ?", "Oh ? I didn't think that was a miss !", "Let's see if the goddess will protect "+ rid2name(.@aid) +" next time ..."); specialeffect F_Rand( EF_MAGICALBULLET, EF_TRACKING ), AREA, .@aid; showscript "Miss !!", .@aid; // if ( !rand(10) ) // 10% chance // getitem Poring_Coin, 1, .@aid; } else { npctalk F_Rand( "AHAHAHA !! Bad luck for you "+ rid2name(.@aid) +" !!", "Grim Reaper has come to take your life !! HAHAHA !!", "Oops !! I accidentally pull my trigger ... Sorry "+ rid2name(.@aid) +".", "My bad, this was an accident !! I swear it !!", "AHA ~ that was a nice one !!"); specialeffect F_Rand( EF_RAPIDSHOWER, EF_FIREPILLARBOMB ), AREA, .@aid; showscript "** Bang !!*", .@aid; unitkill .@aid; } sleep 3000; if ( !.start ) break; } qiclear .@iter; } end; OnQuit: queueremove .qid, getcharid(3); if ( queuesize(.qid) > 1 || .start != 2 ) end; .@it = queueiterator(.qid); .@aid = qiget(.@it); qiclear .@it; announce "Russian Roulette: The Winner is "+ rid2name(.@aid) +" !!", bc_npc | bc_area; getitem Poring_Coin, 10, .@aid; queuedel .qid; .start = false; end; OnInit: .register_limit = 100; // maximum amount of players able to participate in this event .register_min = 2; // minimum amount of players to start this event, or else it auto-abort .register_timer = 1; // how many minutes for player to register this event ? getmapxy .@map$, .x, .y, UNITTYPE_NPC; bindatcmd "roulette", strnpcinfo(0)+"::OnStart", 99,100; setmapflag .@map$, mf_nopenalty; end; }