Harmony
Members-
Content Count
32 -
Joined
-
Last visited
Content Type
Profiles
Forums
Downloads
Staff Applications
Calendar
Everything posted by Harmony
-
Neoncube only allows 3 patches at a time in patchlist
Harmony replied to Harmony's question in Client-Side Support
Bump -
Neoncube only allows 3 patches at a time in patchlist
Harmony replied to Harmony's question in Client-Side Support
You mean making a new file then uploading it to the VPS? Tried this, made a new file on a windows environment then uploading it. Still not working. Made a new file on Linux environment using WinSCP. Still not working. -
Neoncube only allows 3 patches at a time in patchlist
Harmony posted a question in Client-Side Support
Hello, I have found out that my neoncube patcher only accepts 3 patches at a time in patchlist.txt, if I add a 4th one it just says unable to get patchlist.txt. Is this a common problem or did I download a faulty neoncube patcher? Even when I comment out the 4th patch it still outputs the error so is it because the file is too big? -
Redeemer NPC / Coupon NPC / Promotional NPC
Harmony replied to ThyroDree's question in Script Requests
Hello, sorry for necro but can anyone fix the script linked by AnnieRuru? It uses "String" as a function and it may have problems in SQL Side since only the first player can't claim it twice. (The 2nd and succeeding players can claim it endlessly) -
I got this script from rathena forums but the max in my server is Trans. Can anyone change it to trans? Is it just Job_Lord_Knight or Job_LordKnight? Also, the clear; function seems to be not supported. /////////////////////////////////////////////////////// // ___________ _____.__ // \__ ___/__.__.________/ ____\__| ____ ____ // | | < | |\_ __ \ __\| |/ \ / ___\ // | | \___ | | | \/| | | | | \/ /_/ > // |____| / ____| |__| |__| |__|___| /\___ / // \/ Scripts \//_____/ // //===================================================== // Name: Race to Max Level // // Description: // This NPC allows for Game Masters to set a reward to // be given to the first player of each 2nd class that // reaches maximum level (base and class). //===================================================== /////////////////////////////////////////////////////// prontera,147,180,5 script Race to Max Level 58,{ set .@gm_level, 99; // GM level required to set the reward set .@maxbase, 99; set .@maxjob, 50; set .@defaultreward, 510; setarray .@rewardablejobs[0], Job_Knight, Job_Alchemist, Job_Assassin, Job_Bard, Job_Blacksmith, Job_Crusader, Job_Dancer, Job_Hunter, Job_Monk, Job_Priest, Job_Rogue, Job_Sage, Job_Wizard; Begin: clear; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Hello, " + ((getgmlevel() >= .@gm_level) ? "master! What do you want to do today?" : "are you here for your reward?"); switch(select(((getgmlevel() >= .@gm_level) ? "Set Reward:Restart Race" : ":") + ":YES!:...Reward?:Who was rewarded?:Cancel")) { case 1: goto SetReward; case 2: goto RestartRace; case 3: goto GetReward; case 4: goto ExplainRace; case 5: goto ShowRewarded; default: end; } SetReward: clear; mes "[ ^0099ccRace to Max Level^000000 ]"; if ($reward == 0) set $reward, .@defaultreward; mes "The reward is " + getitemname($reward) + " (ID: " + $reward + ")."; mes "Do you want to change it?"; if (select("Yes:No") == 1) { clear; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Please enter the new reward item ID."; input .@rewardid; clear; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Set " + getitemname(.@rewardid) + " as the reward?"; if(select("Yes:No") == 1) { set $reward, .@rewardid; } } goto Begin; RestartRace: clear; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Are you sure you want to restart the race?"; if (select("Yes:No") == 1) { for (.@i = 0; .@i < getarraysize(.@rewardablejobs); .@i++) { set $rewarded$[.@rewardablejobs[.@i]], ""; } announce "The Race to Max Level has begun! Claim a reward once you reach " + .@maxbase + " base and " + .@maxjob + " class!", bc_all; } goto Begin; GetReward: mes "Let's see... " + strcharinfo(0) + ", huh?"; set .@competitioner, 0; for (.@i = 0; .@i < getarraysize(.@rewardablejobs); .@i++) { if (Class == .@rewardablejobs[.@i]) { set .@competitioner, 1; if (BaseLevel < .@maxbase || JobLevel < .@maxjob) { mes "I'm sorry, but you still need to level a bit more."; } else if ($rewarded$[Class] == strcharinfo(0)) { mes "You have already claimed your reward."; } else if ($rewarded$[Class] != "") { mes "Too late!"; mes "The reward for " + jobname(Class) + " was already claimed by " + $rewarded$[Class] + "."; } else goto GiveReward; } } if (.@competitioner == 0) mes "You need to change your job."; close; GiveReward: set $rewarded$[Class], strcharinfo(0); clear; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Congratulations! You were the first " + jobname(Class) + " to reach " + .@maxbase + " base and " + .@maxjob + " class!"; getitem $reward, 1; announce strcharinfo(0) + " (" + jobname(Class) + ") reached Max. Level and received " + getitemname($reward) + "!", bc_all; close; ExplainRace: clear; mes "[ ^0099ccRace to Max Level^000000 ]"; mes "Yes! When you reach the maximum level for your class, talk to me and you'll be rewarded with a special item."; next; goto Begin; ShowRewarded: clear; mes "[ ^0099ccRace to Max Level^000000 ]"; for (.@i = 0; .@i < getarraysize(.@rewardablejobs); .@i++) { mes jobname(.@rewardablejobs[.@i]) + ": " + (($rewarded$[.@rewardablejobs[.@i]] != "") ? $rewarded$[.@rewardablejobs[.@i]] : "^ff0000Nobody^000000"); } next; goto Begin; }
-
Give rewards to player below certain account id
Harmony replied to Harmony's question in Script Requests
Thanks alot meko! -
Hello! I want to give players who registered early a reward but the problem is I don't know how to include sql database in my scripts. Can someone help me out with this?
-
Can't get past login screen (failed to connect to server)
Harmony replied to Harmony's question in General Server Support
Yup, as you can see in my first post the packetver is different from the default one and I recompiled it using the method I stated on post #3. What I want to know is that if there is something I'm doing wrong in compiling to make this error happen. Oh and is there any way to check what packetver hercules is running without running the client and testing if its working? -
Can't get past login screen (failed to connect to server)
Harmony replied to Harmony's question in General Server Support
I don't know how Google Cloud VMs work but I've opened all ports to all ip addresses so isnt that the same thing? EDIT: I got past login screen ( I used the default client in mmo.h ) but what if I wanted to use another client date? I know that I recompiled properly using ./configure and make clean && make sql. Is there something im doing wrong? -
Can't get past login screen (failed to connect to server)
Harmony posted a question in General Server Support
Hello, I'm having this problem, I'm using 20140305 and I can't seem to connect to my server. (All ports are open) -When I login using right credentials I can't even reach the server selection screen that follows it. -When I type the wrong password it says wrong password. Usually I could debug it myself but there's really no error message to help me now, I'd appreciate it if someone could help me. map-server [Status]: Request for connection of cassey02 (ip: 130.105.186.113). [Notice]: Authentication accepted (account: cassey02, id: 2000003, ip: 130.105.186.113) [Status]: Connection of the account 'cassey02' accepted. [Info]: Closed connection from '130.105.186.113'. clientinfo.xml <?xml version="1.0" encoding="euc-kr" ?> <clientinfo> <desc>Ragnarok Client Information</desc> <servicetype>korea</servicetype> <servertype>primary</servertype> <connection> <display>RelentlessRO</display> <desc>Ragnarok Online</desc> <balloon>this is a tool tip</balloon> <address>35.240.209.215</address> <port>6900</port> <version>24</version> <langtype>0</langtype> <registrationweb>http://35.240.209.215</registrationweb> <yellow> <admin>2000001</admin> </yellow> <loading> <image>loading00.jpg</image> <image>loading01.jpg</image> <image>loading02.jpg</image> <image>loading03.jpg</image> <image>loading04.jpg</image> <image>loading05.jpg</image> <image>loading06.jpg</image> </loading> </connection> </clientinfo> mmo.h #ifndef PACKETVER #define PACKETVER 20140305 #endif // PACKETVER char-server.conf // Information related to inter-server behavior inter: { // Server Communication username and password. userid: "s1" passwd: "p1" // Login Server IP // The character server connects to the login server using this IP address. // NOTE: This is useful when you are running behind a firewall or are on // a machine with multiple interfaces. login_ip: "localhost" // The character server listens on the interface with this IP address. // NOTE: This allows you to run multiple servers on multiple interfaces // while using the same ports for each server. //bind_ip: "127.0.0.0" // Login Server Port login_port: 6900 // Character Server IP // The IP address which clients will use to connect. // Set this to what your server's public IP address is. char_ip: "35.240.209.215" // Character Server Port char_port: 6121 } login-server.conf inter: { // The login server listens on the interface with this IP address. // NOTE: This allows you to run multiple servers on multiple interfaces // while using the same ports for each server. //bind_ip: "127.0.0.1" // Login Server Port login_port: 6900 // Interval (in minutes) to execute a DNS/IP update. Disabled by default. // Enable it if your server uses a dynamic IP which changes with time. //ip_sync_interval: 10 } map-server.conf // Information related to inter-server behavior inter: { // Interserver communication passwords, set in the login server database userid: "s1" passwd: "p1" // Character Server IP // The map server connects to the character server using this IP address. // NOTE: This is useful when you are running behind a firewall or are on // a machine with multiple interfaces. char_ip: "localhost" // The map server listens on the interface with this IP address. // NOTE: This allows you to run multiple servers on multiple interfaces // while using the same ports for each server. //bind_ip: "127.0.0.1" // Character Server Port char_port: 6121 // Map Server IP // The IP address which clients will use to connect. // Set this to what your server's public IP address is. map_ip: "35.240.209.215" // Map Server Port map_port: 5121 } NEMO Diff Log 9 Disable 1rag1 type parameters (Recommended) 23 Enable /who command (Recommended) 24 Fix Camera Angles (Recommended) 33 Always Call SelectKoreaClientInfo() (Recommended) 34 Enable /showname (Recommended) 36 Read msgstringtable.txt (Recommended) 38 Remove Gravity Ads (Recommended) 39 Remove Gravity Logo (Recommended) 40 Restore Login Window (Recommended) 41 Disable Nagle Algorithm (Recommended) 44 Translate Client (Recommended) 46 Use Normal Guild Brackets (Recommended) 47 Use Ragnarok Icon 48 Use Plain Text Descriptions (Recommended) 49 Enable Multiple GRFs (Recommended) 53 Use Ascii on All LangTypes (Recommended) 64 @ Bug Fix (Recommended) 65 Load Custom lua file instead of iteminfo*.lub (Recommended) 68 Enable 64k Hairstyle 84 Remove Serial Display (Recommended) 90 Enable DNS Support (Recommended) 97 Cancel to Login Window (Recommended) 105 Hide Nav Button 106 Hide BG Button 107 Hide Bank Button 108 Hide Booking Button 109 Hide Rodex Button 110 Hide Achievements Button 111 Hide Rec Button 112 Hide Map Button 113 Hide Quest Button 213 Disable Help Message on Login (Recommended) 216 Hide Cash Shop 233 Hide SNS Button I also get an error when launching my client (See attached file) -
How to make Happy's Freebies NPC account-bound?
Harmony replied to Harmony's question in Script Support
I'm sorry, I might've constructed my question wrong. I mean one account can only get the freebies once not make the item itself account bound -
So I modified Happy's Script abit but I found out that the script was char-bound not account-bound. I wanted to prevent abuse so does anyone here know how to make this account-bound? //===== Happy Scripts ================================== //= Freebee //===== By: ================================================== //= Happy //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== //= Hercules //===== Description: ========================================= // Resettable Freebie Giver. More freeee stuffs! //===== Comments: ============================================ //= Change npc coordinates and item ids/amounts etcs //===== Additional Comments: ================================= //= 1.00 Initial Release //===== Contact Ifo: ========================================= //= http://hercules.ws/board/user/164-happy/ //============================================================ new_2-1,55,115,4 script Freebies NPC 123,{ mes "[Freebie NPC]"; mes "What's up? Are you new?"; mes "What do you wanna do?"; if(getgmlevel() >= .GM){ set .@i,select("I'd like to claim my freebies:Leave:Reset Variables"); } else { set .@i,select("I'd like to claim my freebies:Leave"); } switch(.@i) { case 3: next; mes "Are you sure you want to delete"; mes "ALL freebie records?"; if(select("No:Yes")==1) close; next; mes "Wait one Moment..."; mes "....."; query_sql("DELETE FROM `char_reg_num_db` WHERE `key` = 'hpy_got_freebie'"); set .@self, getcharid(3); set .@size, query_sql("select account_id from `char` where online = 1", .@aid); for(set .@i,0; .@i<.@size; set .@i,.@i+1) { if(attachrid(.@aid[.@i])){ set hpy_got_freebie,0; } } attachrid(.@self); mes "Cleared"; close; case 1: next; if (!hpy_got_freebie) { set hpy_got_freebie,1; for (set .@i,0; .@i < getarraysize(.hpy_freebie); set .@i, .@i +1) { getitem .hpy_freebie[.@i],.hpy_freebie_amt[.@i]; } mes "Enjoy!"; } else { mes "You already got your freebie!"; } close; case 2: close; } OnInit: /* *CONFIG */ set .GM,99; // Group required to reset setarray .hpy_freebie[0],607,608; // enter the itemids setarray .hpy_freebie_amt[0],3,5; // enter the amount of the items /* on the example above, it gives 3x 607(ygg) and 5x 608(yggseed) */ }
-
Hello again! Can anyone show me where I could edit the break chance of certain skills like Melt Down, Acid Demonstration and others? Thanks in advance! Bonus Question: Where and how can I edit Enchant Deadly Poison to scale to 200% at level 5 instead of 400%?
-
Help with 2max deadly combo and autoevent script
Harmony replied to Harmony's question in Script Support
Will try this. Thank you so much!! <3 -
So I found a 2 max deadly combo card script but I read somewhere that hercules works inversely in boolean now or something else? can someone fix this for me? the items have Script: {if (ccount < 2) { itemEff }} function script ccount { set @cardcnt, isequippedcnt(4357); // Lord knight card set @cardcnt, @cardcnt + isequippedcnt(4359); // Assassin cross Card set @cardcnt, @cardcnt + isequippedcnt(4361); // Whitesmith Card set @cardcnt, @cardcnt + isequippedcnt(4363); // High Priest Card set @cardcnt, @cardcnt + isequippedcnt(4365); //High Wizard Card set @cardcnt, @cardcnt + isequippedcnt(4367); //Sniper Card set @cardcnt, @cardcnt + isequippedcnt(4399); set @cardcnt, @cardcnt + isequippedcnt(4441); set @cardcnt, @cardcnt + isequippedcnt(4367); set @cardcnt, @cardcnt + isequippedcnt(4408); return @cardcnt; } and this script I got from rathena forums which is supposed to be autoevent but I can't talk to the event manager and the events dont even start //===== EinherjarRO Scripts ================================== //= Auto Event //===== By: ================================================== //= Stolao //===== Current Version: ===================================== //= 2.01 //===== 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 Force End Comamnd //= Add Devil Square Event //= Add Disguise Event //= Add Invasion Event //= Add X-O Event //= Add MVP Arena //= Add Dead Branch Event //= Add Requested Events //= Add Ranking System //===== Additional Comments: ================================= //= 2.00 Remake //= 2.01 Fix bug in Lucky Pick //===== Contact Ifo: ========================================= //= [Stolao] //= Email: [email protected] //============================================================ prontera,164,162,4 script Event Information 835,{ function Func_Countdown; function Func_Add_Time; function Func_Prizes; freeloop(1); //================================== 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...")+ ": ~ ^777777Cancel^000000")) { case 2: next; mes "[ Sunday Event Schedule ]"; for(.@i = 0; .@i < 168; .@i++){ if($EVENT_CONTROL[.@i]) mes .ColorName$[$EVENT_CONTROL[.@i]] +" ~ "+ Func_Add_Time(.@i % 24); if( !( ( .@i + 1 ) % 24 ) && .@i < 144){ next; mes "[ "+ .Days$[.@i / 24 + 1] +" Event Schedule ]"; } } close; case 3: while(1){ switch(select(" ~ Add a event...: ~ Delete a event...: ~ ^777777Go back^000000")) { 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 3: next; goto OnMenu; } } case 4: 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(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 { warp .EnterMap$[$@CurrentEvent],.EnterX[$@CurrentEvent],.EnterY[$@CurrentEvent]; end; } } close; //================================== 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$,": ~ ")) - 1; } switch(.@i){ default: break; case 1: donpcevent strnpcinfo(1)+"::OnEmpStart"; break; case 2: donpcevent strnpcinfo(1)+"::OnZombieStart"; break; case 3: donpcevent strnpcinfo(1)+"::OnDiceStart"; break; case 4: donpcevent strnpcinfo(1)+"::OnPvPStart"; break; case 5: donpcevent strnpcinfo(1)+"::OnMazeStart"; break; case 6: donpcevent strnpcinfo(1)+"::OnPoringStart"; break; case 7: donpcevent "Cluckers::OnEventStart"; break; case 8: donpcevent strnpcinfo(1)+"::OnLuckyStart"; break; case 9: donpcevent strnpcinfo(1)+"::OnBombStart"; break; case 10: donpcevent strnpcinfo(1)+"::OnHuntStart"; break; case 11: donpcevent strnpcinfo(1)+"::OnShroomStart"; 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; 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; query_sql("INSERT INTO `mail` (send_name,dest_id,title,message,nameid,amount,identify,zeny,time) VALUES ("+ "'no-reply',"+getarg(0)+",'** "+getarg(1)+" **',"+ "'Congratulations!% You have won % in the "+getarg(1)+" Event% % % % % % % % [ Your reward is attached. ]',"+ $@RewardID+","+$@RewardQNT+",1,"+$@RewardZeny+",UNIX_TIMESTAMP(NOW()))"); announce "Rewards hava been sent via mail.",bc_self|bc_blue; query_sql("UPDATE `mail` SET message = REPLACE(message,'%',CHAR(13)) WHERE send_name = 'no-reply'"); } //================================== OnMinute00: //- Start Events //================================== 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(1)+"::OnEmpStart"; break; case 2: donpcevent strnpcinfo(1)+"::OnZombieStart"; break; case 3: donpcevent strnpcinfo(1)+"::OnDiceStart"; break; case 4: donpcevent strnpcinfo(1)+"::OnPvPStart"; break; case 5: donpcevent strnpcinfo(1)+"::OnMazeStart"; break; case 6: donpcevent strnpcinfo(1)+"::OnPoringStart"; break; case 7: donpcevent "Cluckers::OnEventStart"; break; case 8: donpcevent strnpcinfo(1)+"::OnLuckyStart"; break; case 9: donpcevent strnpcinfo(1)+"::OnBombStart"; break; case 10: donpcevent strnpcinfo(1)+"::OnHuntStart"; break; case 11: donpcevent strnpcinfo(1)+"::OnShroomStart"; break; } end; //================================== OnEmpStart: //-- Emperium Event //================================== $@CurrentEvent = 1; waitingroom "Emperium Event",99; Func_Countdown; $@CurrentEvent = -1; $@BestTime = $@BestCid = 0; getwaitingroomusers strnpcinfo(1); if(.@waitingroom_usercount >= .MinPlayers[1]){ for(.@i = 0; .@i < .@waitingroom_usercount; .@i++){ attachrid(.@waitingroom_users[.@i]); callfunc("dispell"); switch(instance_enter("Emp Breaker")){ default: instance_create("Emp Breaker",IM_CHAR); instance_enter("Emp Breaker"); case 0: } } delwaitingroom; sleep 900000; // 15 mins should be enough? } else { delwaitingroom; Announce "Event Stopped! Not Enough Players Joined the "+.EventName$[1]+"!",bc_blue|bc_area|bc_npc; } Func_Prizes($@BestCid,.EventName$[1]); $@CurrentEvent = 0; end; //================================== OnZombieStart: //-- Zombie Event //================================== mapwarp "1@zombie","prontera",155,181; $@CurrentEvent = 2; Func_Countdown; $@CurrentEvent = -2; if(getmapusers("1@zombie") < .MinPlayers[2]){ mapannounce "1@zombie","Event Stopped! Not Enough Players Joined the "+.EventName$[2]+"!",bc_blue; mapwarp "1@zombie","prontera",155,181; } else { //Insert Rules sleep 25000; for(.@wave = 1; .@wave < 11; .@wave++){ if(.@wave < 10) mapannounce "1@zombie","Wave "+.@wave+"!",bc_blue; else mapannounce "1@zombie","FIANL WAVE!",bc_blue; sleep 1000; for(.@i = 5; .@i > 0; .@i--){ mapannounce "1@zombie",""+.@i+"...",bc_blue; sleep 1000; } mapannounce "1@zombie","Begin Wave!",bc_blue; for(.@i = 0; (.@i < getarraysize(.Zombies)); .@i += 2) monster "1@zombie",0,0,"--ja--",.Zombies[.@i], .@wave * .Zombies[.@i+1],strnpcinfo(1)+"::OnKillZombie"; if(!getmapusers("1@zombie")){ .@wave += 255; } else { mapannounce "1@zombie","There "+((getmapusers("1@zombie")>1)?"are":"is")+" "+callfunc("F_InsertPlural",getmapusers("1@zombie"),"player")+" left",bc_blue; sleep 56000; } } killmonsterall "1@zombie"; if(getmapusers("1@zombie")){ addrid(5,0,"1@zombie"); if(HP > 0 && strcharinfo(3) == "1@zombie") Func_Prizes(getcharid(0),.EventName$[2]); } } $@CurrentEvent = 0; end; OnKillZombie: dispbottom "Don't do that",0xCC0000; sc_start SC_DECREASEAGI,300000,10; percentheal -20,-100; heal -5,0; end; //================================== OnDiceStart: //-- Dice Event //================================== mapwarp "quiz_01","prontera",155,181; $@CurrentEvent = 3; Func_Countdown; $@CurrentEvent = -3; sleep 9000; if(getmapusers("quiz_01") < .MinPlayers[3]){ mapannounce "quiz_01","Event Stopped! Not Enough Players Joined the "+.EventName$[3]+"!",bc_blue; mapwarp "quiz_01","prontera",155,181; $@CurrentEvent = 0; end; } else { mapannounce "quiz_01","Ok the rules of "+.EventName$[3]+" are as follows",bc_blue; sleep 5000; mapannounce "quiz_01","Each player picks a box 1, 2, 3 or 4",bc_blue; sleep 5000; mapannounce "quiz_01","There will be a count down from 10 to 0",bc_blue; sleep 5000; mapannounce "quiz_01","at 0 a four sided die will be rolled",bc_blue; sleep 5000; mapannounce "quiz_01","Anyone in the box of the number rolled will be warped to town",bc_blue; sleep 5000; mapannounce "quiz_01","as well as anyone on the stairs or outside the box",bc_blue; sleep 5000; mapannounce "quiz_01","the number of players remaining will be announced",bc_blue; sleep 5000; mapannounce "quiz_01","this prosses will repeat till only one player remains",bc_blue; sleep 5000; mapannounce "quiz_01","take a few moments to fnd a box",bc_blue; sleep 15000; mapannounce "quiz_01","we will now begin, please find a box",bc_blue; sleep 6000; for(.@1234 = 0; .@1234 < 100; .@1234++){ for(.@i = 10; .@i > 0; .@i--){ mapannounce "quiz_01",.@i+"...",bc_blue; sleep 1000; } .@i = rand(1,4); mapannounce "quiz_01","0... Good Bye Box "+.@i,bc_blue; switch(.@i){ case 1: areawarp "quiz_01",183,81,191,59,"prontera",155,181; break; case 2: areawarp "quiz_01",195,81,203,59,"prontera",155,181; break; case 3: areawarp "quiz_01",207,81,215,59,"prontera",155,181; break; case 4: areawarp "quiz_01",219,81,227,59,"prontera",155,181; break; } areawarp "quiz_01",182,94,228,88,"prontera",155,181; //Upper Area areawarp "quiz_01",185,87,188,82,"prontera",155,181; //Stairs 1 areawarp "quiz_01",197,87,200,82,"prontera",155,181; //Stairs 2 areawarp "quiz_01",209,87,212,82,"prontera",155,181; //Stairs 3 areawarp "quiz_01",221,87,224,82,"prontera",155,181; //Stairs 4 if(getmapusers("quiz_01") <= 1){ .@1234 += 100; } else { mapannounce "quiz_01","There are "+getmapusers("quiz_01")+" Players Remaining.",bc_blue; mapannounce "quiz_01","Take a few moments if you want to change boxes.",bc_blue; sleep 20000; } } if(getmapusers("quiz_01")){ addrid(5,0,"quiz_01"); if(HP > 0 && strcharinfo(3) == "quiz_01") Func_Prizes(getcharid(0),.EventName$[3]); } $@CurrentEvent = 0; end; } //================================== OnPvPStart: //-- PvP Event //================================== mapwarp "pvp_n_1-5","prontera",155,181; pvpoff "pvp_n_1-5"; $@CurrentEvent = 4; Func_Countdown; $@CurrentEvent = -4; sleep 9000; if(getmapusers("pvp_n_1-5") < .MinPlayers[4]){ mapannounce "pvp_n_1-5","Event Stopped! Not Enough Players Joined the "+.EventName$[4]+"!",bc_blue; } else { mapannounce "pvp_n_1-5","The Rules of "+.EventName$[4]+" are as follows",bc_blue; sleep 5000; mapannounce "pvp_n_1-5","This is a Free for all Last man Standing",bc_blue; sleep 5000; mapannounce "pvp_n_1-5","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 "pvp_n_1-5","Everyone has 1 Life so Res, Ygg Leafs and Kazail dont work",bc_blue; sleep 5000; mapannounce "pvp_n_1-5","Spread out PVP will begin in 10...",bc_blue; sleep 1000; for(.@i = 9; .@i > 0; .@i--){ mapannounce "pvp_n_1-5",.@i+"...",bc_blue; sleep 1000; } pvpon "pvp_n_1-5"; mapannounce "pvp_n_1-5","Begin",bc_blue; sleep 5000; for(.@P = 0; .@P < 20; .@P++){ if(getmapusers("pvp_n_1-5") < 2){ .@P += 20; } else mapannounce "pvp_n_1-5","There are "+getmapusers("pvp_n_1-5")+" Players Remaining",bc_blue; sleep 60000; } if(getmapusers("pvp_n_1-5") == 1){ addrid(5,0,"pvp_n_1-5"); if(HP > 0 && strcharinfo(3) == "pvp_n_1-5") Func_Prizes(getcharid(0),.EventName$[4]); } else { mapannounce "pvp_n_1-5","Time Is up",bc_blue; } } pvpoff "pvp_n_1-5"; $@CurrentEvent = 0; mapwarp "pvp_n_1-5","prontera",155,181; end; //================================== OnMazeStart: //-- Maze Event //================================== mapwarp "maze","prontera",155,181; enablenpc "mazeroadblock"; disablenpc "Event_Agent#Maze"; $@CurrentEvent = 5; Func_Countdown; $@CurrentEvent = -5; sleep 9000; if(getmapusers("maze") < .MinPlayers[5]){ mapannounce "maze","Event Stopped! Not Enough Players Joined the "+.EventName$[5]+"!",bc_blue; } else { mapannounce "maze","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("maze")<1) .@maze = 0; mapannounce "maze","There are "+(.@maze)+" Minuets Remaining",bc_blue; sleep 60000; } mapannounce "maze","Time Is up",bc_blue; } disablenpc "Event_Agent#Maze"; sleep 5000; mapwarp "maze","prontera",155,181; $@CurrentEvent = 0; end; //================================== OnPoringStart: //-- Poring Event //================================== mapwarp "pvp_n_1-5","prontera",155,181; $@CurrentEvent = 6; pvpoff "pvp_n_1-5"; setmapflag "pvp_n_1-5",mf_noskill; Func_Countdown; $@CurrentEvent = -6; if(getmapusers("pvp_n_1-5") < .MinPlayers[6]){ mapannounce "pvp_n_1-5","Event Stopped! Not Enough Players Joined the "+.EventName$[6]+"!",bc_blue; } else { mapannounce "pvp_n_1-5","Rules are simple",bc_blue; sleep 3000; mapannounce "pvp_n_1-5","Kill the 'Poring' with the correct name, and get a warped to town with a prize.",bc_blue; sleep 4000; mapannounce "pvp_n_1-5","Kill the wrong one and get warped to town with nothing.",bc_blue; sleep 4000; mapannounce "pvp_n_1-5","There are 2 right poring and a 30 min timer.",bc_blue; sleep 4000; mapannounce "pvp_n_1-5","Event will now Begin~",bc_blue; for(.@i = 0; .@i < getarraysize(.Poring$); .@i++){ monster "pvp_n_1-5",0,0,.Poring$[.@i],1725,5,strnpcinfo(1)+"::OnKillWrong"; } monster "pvp_n_1-5",0,0,"--ja--",1725,2,strnpcinfo(1)+"::OnKillRight"; for(.@poring = 30; .@poring > 0; .@poring--){ if(getmapusers("pvp_n_1-5") < 1) .@poring = 0; mapannounce "pvp_n_1-5",callfunc("F_InsertPlural",.@poring,"Minute")+" Remaining.",bc_blue; sleep 60000; } } mapannounce "pvp_n_1-5","Time Is up",bc_blue; killmonsterall "pvp_n_1-5"; removemapflag "pvp_n_1-5",mf_noskill; $@CurrentEvent = 0; sleep 5000; mapwarp "pvp_n_1-5","prontera",155,181; end; OnKillWrong: monster "pvp_n_1-5",0,0,.Poring$[rand(1,getarraysize($@Mobs))],1725,1,strnpcinfo(1)+"::OnKillWrong"; warp "prontera",155,181; end; OnKillRight: Func_Prizes(getcharid(0),.EventName$[6]); warp "prontera",155,181; end; //================================== OnLuckyStart: //-- Lucky Event //================================== $@CurrentEvent = 8; waitingroom "Lucky Event",99; Func_Countdown; getwaitingroomusers strnpcinfo(1); delwaitingroom; $@CurrentEvent = -8; if(.@waitingroom_usercount >= .MinPlayers[8]) Func_Prizes(.@waitingroom_users[rand(.@waitingroom_usercount)],.EventName$[8]); else Announce "Event Stopped! Not Enough Players Joined the "+.EventName$[8]+"!",bc_blue|bc_area; $@CurrentEvent = 0; end; //================================== OnBombStart: //-- Bombring Event //================================== mapwarp "quiz_02","prontera",155,181; $@CurrentEvent = 9; Func_Countdown; $@CurrentEvent = -9; .@totalplayers = getmapusers("quiz_02"); if(.@totalplayers < .MinPlayers[9]){ mapannounce "quiz_02","Event Stopped! Not Enough Players Joined the "+.EventName$[9]+"!",bc_blue; mapwarp "quiz_02","prontera",155,181; } else { for ( .@i = 0; .@i < getarraysize( .bombflag ); .@i++ ) setmapflag "quiz_02", .bombflag[.@i]; mapannounce "quiz_02","Okay listen up, this is how it works.",bc_blue; sleep 2000; mapannounce "quiz_02","Bombrings will run rampant in this area.",bc_blue; sleep 2000; mapannounce "quiz_02","and all of them will go booooooom!",bc_blue; sleep 2000; mapannounce "quiz_02","all you have to do is avoid them and stay alive :P",bc_blue; sleep 2000; mapannounce "quiz_02","This will run for 30 seconds for 5 total rounds.",bc_blue; sleep 2000; mapannounce "quiz_02","Sooooooooooo, ready or not here they come!!!",bc_blue; sleep 25000; for(.@wave = 1; .@wave <= 5; .@wave++){ if(.@wave < 5){ mapannounce "quiz_02","Wave "+.@wave+"!",bc_blue; } else mapannounce "quiz_02","FIANL WAVE!",bc_blue; if ( (3 * .@totalplayers) <= 60) areamonster "quiz_02",48,334,71,357,"Run for you life!",1904,3 * .@totalplayers; else areamonster "quiz_02",48,334,71,357,"Run for you life!",1904,60; if(!getmapusers("quiz_02")) .@wave += 10; else sleep 1000 * 5 / .@wave; } sleep 30000; if(getmapusers("quiz_02")){ addrid(5,0,"quiz_02"); if(HP > 0 && strcharinfo(3) == "quiz_02") Func_Prizes(getcharid(0),.EventName$[9]); } for ( .@i = 0; .@i < getarraysize( .bombflag ); .@i++ ) removemapflag "quiz_02", .bombflag[.@i]; } $@CurrentEvent = 0; end; //================================== OnHuntStart: //-- Man Hunt Event //================================== mapwarp "pvp_n_1-5","prontera",155,181; enablenpc "ManhuntPrize"; $@CurrentEvent = 10; Func_Countdown; $@CurrentEvent = -10; if(getmapusers("pvp_n_1-5") < .MinPlayers[10]){ mapannounce "pvp_n_1-5","Event Stopped! Not Enough Players Joined the "+.EventName$[10]+"!",bc_blue; } else { mapannounce "pvp_n_1-5","The goal is this event is to kill the target within 60 seconds.",bc_blue; sleep 5000; mapannounce "pvp_n_1-5","The one who managed to kill the target will gain a prize",bc_blue; sleep 5000; mapannounce "pvp_n_1-5","But if the target surivived, the target will gain the prize",bc_blue; sleep 5000; mapannounce "pvp_n_1-5","Man-Hunt Event start!",bc_blue; for(.@round = 1; .@round <= 10; .@round++){ if(getmapusers("pvp_n_1-5") < 3){ mapannounce "pvp_n_1-5","Sorry there are no longer enough players for another round",bc_blue; } else { if(.@round < 10) mapannounce "pvp_n_1-5","Next Round will begin in 10 seconds!",bc_blue; deletearray .@AID[0],getarraysize(.@AID); addrid(5,0,"quiz_02"); .@AID[getarraysize(.@AID)] = getcharid(3); $@Target = rand(getarraysize(.@AID)); sleep 10000; mapannounce "pvp_n_1-5","[Round "+.@round+"] Our target is "+rid2name($@Target)+"!",bc_blue; atcommand "killable "+rid2name($@Target); atcommand "size "+rid2name($@Target)+" 2"; sleep 60000; if($@Target != -1){ if(attachrid($@Target) && strcharinfo(3) == "pvp_n_1-5") Func_Prizes(getcharid(0),.EventName$[10]); } atcommand "alive "+rid2name($@Target); atcommand "killable "+rid2name($@Target); atcommand "size "+rid2name($@Target)+" 0"; } } } sleep 5000; mapwarp "pvp_n_1-5","prontera",155,181; $@CurrentEvent = 0; end; OnPCDieEvent: if($@CurrentEvent == -4 && strcharinfo(3) =="pvp_n_1-5") warp "Save",0,0; if($@CurrentEvent == -10 && getcharid(3) == $@Target ){ Func_Prizes(killerrid,.EventName$[10]); $@Target = -1; } end; OnPCLogOutEvent: if($@CurrentEvent == -10 && getcharid(3) == $@Target){ mapannounce "pvp_n_1-5","The target has logged out of this game. This round will be nulled.",bc_blue; $@Target = -1; } end; //================================== OnShroomStart: //-- Mushroom Event //================================== .Map$ = .ShroomMaps$[rand(getarraysize(.ShroomMaps$))]; killmonster .Map$,"All"; $@CurrentEvent = 11; .EnterMap$[$@CurrentEvent] = .Map$; Func_Countdown; .@Spawn = .Spawn = rand(1,getusers(1) / 5); if(1 > .Spawn) .@Spawn = .Spawn = 1; monster .Map$,0,0,"Please don't kill me!",1084,.Spawn,strnpcinfo(0)+"::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$,"All"; $@CurrentEvent = 0; end; OnShroomKilled: .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 "The Mushroom Event has ended. All the Mushrooms have been killed.",bc_blue; $@CurrentEvent = 0; } end; //================================== OnInit: //-- Config //================================== // ------------------- // Rewards // ------------------- // Does not support multiple item rewards // Rewards are Mailed to winners $@RewardID = 33001; $@RewardQNT = 1; $@RewardZeny = 10000; // ------------------- // At Commands // ------------------- // Run Event Command to manually run event bindatcmd("runevent",strnpcinfo(1)+"::OnRunEvent",60,99); // Join Event Command bindatcmd("joinevent",strnpcinfo(1)+"::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"; // Colored Event Names setarray .ColorName$[1], "^00CCCCEmperium Event^000000","^CC00CCZombie Survival^000000","^00CC00Dice Event^000000","^CC0000PvP Event^000000","^00CC00Maze Event^000000", "^00CCCCFind The Poring^000000","^00CC00Cluckers^000000","^00CC00Lucky Pick^000000","^CC00CCBombring Event^000000","^CC0000Manhunt^000000", "^00CCCCFind The Mushroom^000000"; // Min Players // Cluckers & Mushroom don't check setarray .MinPlayers[1], 2,1,2,3,2, 1,0,3,1,3, 0; // @JoinEvent warp points setarray .EnterMap$[1], "prontera","1@zombie","quiz_01","pvp_n_1-5","maze", "pvp_n_1-5","prontera","prontera","quiz_02","pvp_n_1-5", "prontera"; setarray .EnterX[1], 161, 0,205, 0,371, 0,155,161, 59, 0, 0; setarray .EnterY[1], 168, 0, 92, 0,143, 0,227,168,345, 0, 0; // 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"; // Bombring Mapflags setarray .bombflag,mf_nowarp,mf_nowarpto,mf_nosave,mf_nomemo,mf_noteleport,mf_nopenalty,mf_noreturn,mf_nobranch,mf_nomobloot,mf_nomvploot; // Mushroom Event Possible Maps setarray .ShroomMaps$[0],"izlude","geffen","morocc","prontera"; // ------------------- // Don't Touch Ever // ------------------- $@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,{ OnAgitBreak: 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){ $@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(1); 'Map$ = strnpcinfo(4); monster 'Map$,223,206,"Emperium",1288,1,strnpcinfo(1)+"::OnAgitBreak"; 'GID = $@mobid; setunitdata 'GID,UMOB_DMGIMMUNE,1; sleep2 2000; mapannounce 'Map$,"[Emperium Event]: Goal is simple, kill the Emperium as fast as you can~",bc_map|bc_blue; sleep2 1000; mapannounce 'Map$,"[Emperium Event]: Once Countdown is done have at it.",bc_map|bc_blue; sleep2 2000; mapannounce 'Map$,"5",bc_map|bc_blue; sleep2 1000; mapannounce 'Map$,"4",bc_map|bc_blue; sleep2 1000; mapannounce 'Map$,"3",bc_map|bc_blue; sleep2 1000; mapannounce 'Map$,"2",bc_map|bc_blue; sleep2 1000; mapannounce 'Map$,"1",bc_map|bc_blue; sleep2 1000; mapannounce 'Map$,"Go~",bc_map|bc_blue; startnpctimer strnpcinfo(1); 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_: announce "Congrats "+strcharinfo(0)+", a winner in the Maze Event.",bc_all|bc_blue; query_sql("INSERT INTO `mail` (send_name,dest_id,title,message,nameid,amount,identify,zeny,time) VALUES ("+ "'no-reply',"+getcharid(0)+",'** Maze Event **',"+ "'Congratulations!% You have won % in the Maze Event% % % % % % % % [ Your reward is attached. ]',"+ $@RewardID+","+$@RewardQNT+",0,"+$@RewardZeny+",UNIX_TIMESTAMP(NOW()))"); announce "Rewards hava been sent via mail.",bc_self|bc_blue; mapwarp "maze","prontera",155,181; query_sql("UPDATE `mail` SET message = REPLACE(message,'%',CHAR(13)) WHERE send_name = 'no-reply'"); $@CurrentEvent = 0; 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 e_omg; 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 e_omg; break; case 5: sc_start SC_Sleep,10000,0; break; case 6: sc_start SC_Stone,10000,0; emotion e_gg; break; case 7: npctalk "CLUUUUUUCK!!!"; unitkill getcharid(3); skilleffect "NPC_SELFDESTRUCTION",1; emotion e_omg; break; case 8: npctalk "Cluck! CLUUUCK!!"; unitkill getcharid(3); skilleffect "NPC_SELFDESTRUCTION",1; emotion e_omg; break; case 9: sc_start SC_Stun,10000,0; break; case 10: sc_start SC_Sleep,10000,0; emotion e_gg; 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; query_sql("INSERT INTO `mail` (send_name,dest_id,title,message,nameid,amount,identify,zeny,time) VALUES ("+ "'no-reply',"+getcharid(0)+",'** Cluckers **',"+ "'Congratulations!% You have won % in the Cluckers Event% % % % % % % % [ Your reward is attached. ]',"+ $@RewardID+","+$@RewardQNT+",0,"+$@RewardZeny+",UNIX_TIMESTAMP(NOW()))"); announce "Rewards hava been sent via mail.",bc_self|bc_blue; query_sql("UPDATE `mail` SET message = REPLACE(message,'%',CHAR(13)) WHERE send_name = 'no-reply'"); $@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; } //================================== //-- 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,165,174,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,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
-
I was tooling around and diffed AnnieRuru's KoE Script which was not successful as it is not updated in years then suddenly one of my players reported that the base attackspeed became 196 Any idea as to how to fix this? NOTE1: Equipping an axe or a sword reduces the aspd by 1, other weapons doesn't do anything EDIT: I just checked, my status.c aspd formula hasn't changed. I also checked job_db.conf and the base aspd values there are correct. EDIT: FIXED
-
I am using Mhalicot's @afk plugin on a linux VPS machine and when I try to make plugins it always looks for afk.so, I tried looking for afk.so in all versions of Mhalicot's @afk but I could not see it. Is there any way to skip .so through command or something? Apparently it does it on every plugin I try to install
-
Hello! Can I request a script where an NPC will only talk to you if you have Item A equipped and then he gives 3 choices (Item X, Y, Z) then you select which item you want then he will give the item to you oh and It has to be account-bound(The NPC not the item). Is this possible?
-
Isn't it only change the minimum so that if I raise the minimum above the set MVP and Normal Card drop rates only thats the time when the minimum will change every card's drop rate
-
Buump
-
When I change my item_drop_card_min it changes all card's drop rates?
-
Hello, I want this quest to be account bound because at it's current state you just have to change into another character to do the quest again //======Name======================================== // Daily Monster Hunt //======Version===================================== // 1.2 //======Author(s)=================================== // Sandbox //======Comments==================================== // This NPC allows your player to hunt a random amount // of a random monster // *randomception!* // If the player successfully hunts the monster // he'll receive a reward! //======Credits===================================== // KeyWorld, nanakiwurtz, NeoMind, Kido // Thanks for helping me out guize! // Modified by Luciar for Yonko //================================================== prontera,161,184,5 script Hunting Challenge 78,{ mes .Npc_Name$; if(Hunter) { mes "You have killed ^880000"+HuntCount+"^000000/^0000FF"+Amt +"^000000 "+getmonsterinfo(Hunt,0)+"s, keep it up!"; close; } if(gettimetick(2) < HuntDelay) { mes "You can only do this quest once every 12 hours!"; close; } mes "Hello, do you want to take on the Monster Hunting Challenge? If you manage to kill them, you'll receive a reward!"; if(select("Bring it on!:How about no?")==2) { mes .Npc_Name$; mes "Fine!"; close; } next; mes .Npc_Name$; Hunt = .Mob_List[rand(getarraysize(.Mob_List))]; Amt = rand (50,100); //Amount of mob to hunt Hunter++; mes "You have to hunt ^0000FF"+Amt+" "+getmonsterinfo(Hunt,0)+"^000000!"; next; mes .Npc_Name$; mes "Go go go!"; close2; HuntDelay = gettimetick(2)+43200; //Once a day only. end; //----------Config---------- OnInit: .Npc_Name$ = "[^0000FF NPC ^000000]"; setarray .Mob_List[0],1002,1007,1063; //Mobs to hunt. Default: Poring, Fabre, Lunatic .Reward = 7227; //Reward ID .RewAmt = 1; //Reward Amount end; OnNPCKillEvent: if(Hunter > 0) { if(killedrid == Hunt) { HuntCount++; dispbottom "You have killed "+HuntCount+"/"+Amt+" "+getmonsterinfo(Hunt,0)+"s, keep it up!"; if(HuntCount >= Amt) { dispbottom strnpcinfo(1)+": Congratulations! You did it!"; getitem .Reward,.RewAmt; Hunt = 0; Hunter = 0; HuntCount = 0; Amt = 0; } } } end; }
-
#1 How do I change the src in status.c to remove the dual wield attack speed penaly? #2 How to I change the base aspd values? #else // base weapon delay amotion = (sd->status.weapon < MAX_SINGLE_WEAPON_TYPE) ? (status->dbs->aspd_base[pc->class2idx(sd->status.class_)][sd->status.weapon]) // single weapon : (status->dbs->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype1] + status->dbs->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype2]) * 7 / 10; // dual-wield // percentual delay reduction from stats amotion -= amotion * (4 * st->agi + st->dex) / 1000; // raw delay adjustment from bAspd bonus amotion += sd->bonus.aspd_add; /* angra manyu disregards aspd_base and similar */ if ( sd->equip_index[EQI_HAND_R] >= 0 && sd->status.inventory[sd->equip_index[EQI_HAND_R]].nameid == ITEMID_ANGRA_MANYU ) return 0; #endif Solved! // base weapon delay amotion = (sd->status.weapon < MAX_SINGLE_WEAPON_TYPE) ? (status->dbs->aspd_base[pc->class2idx(sd->status.class_)][sd->status.weapon]) // single weapon : (status->dbs->aspd_base[pc->class2idx(sd->status.class_)][sd->weapontype1]);