Jump to content

Nova

Members
  • Posts

    265
  • Joined

  • Last visited

  • Days Won

    8

Everything posted by Nova

  1. Really? I know they have ~12 or so datacenters. "from Tokyo, to Australia, The Netherlands, Germany, France, London, and more.." None of these are close enough to give you good ping? (Not sure where you're from)
  2. if (Zeny >= 1285000 && countitem(7825) >= 1 ) { set Zeny, Zeny-1285000; delitem 7825,1; and mes "Unfortunately, you either don't seem to possess enough zeny at the moment or are missing a Heroic Stone. Please check your funds and come back again.";
  3. In your item_combo_db.txt file you would make a combo with the items you want, and the script would be something like { if (strcharinfo(3) == "guild_vs1" { bonus,bMaxHPRate,10; } }
  4. That 9 on the title bar is a countdown, after pressing OK, X, or after the countdown runs out, the client closes. This happens if you have OpenKore open before opening the client, or after.
  5. I am, and I strongly recommend it. Not only is it extremely useful for keeping people banned properly, but you can even use it for things such as preventing dual-clienting on certain things (BG, Events) and offering safe Daily Rewards. It's got third party blocking, MAC and other Hardware ID logging, protection from editing files you don't want people changing, and great customer service. I can't imagine running half of the scripts in my server without fear of people abusing them without RagnaShield being in place. Listen to me, I almost sound like some sort of salesman. But I'm extremely happy with both the protection that RagnaShield offers my server as well as the hosting service and DDoS Protection I'm getting from RagnaHosting.
  6. I didn't want to. I used to play on CookieRO and I led a guild I grew to love, but once the server was abandoned by the GM team we found it hard to find a new home. I made all of my friends hop from server to server for the longest time and we even had short runs on other servers. After being hyped up about a new renewal server coming up, I posted on the forums and the reply by the administrator was extremely disappointing. I had been waiting a month and amassing my friends to join this server, only to meet disappointment before the server even launched. It was at that point that I decided, if no one's going to make a proper Renewal server, I'll have to take the task on. I had 0 coding experience and had never been a GM in RO or any other game before, and I think I'm doing pretty well for myself now. Love the community, and I've made some great friends running my server.
  7. I'm extremely happy with RagnaShield, it's only offered by http://www.ragnahosting.com
  8. We're clear for now. :] Server's back up! Though in order to not derail the thread, I'll add another script! Shared The Claw
  9. Thanks guys! Sadly my server is currently undergoing constant DDoS attacks so it's a bit unstable. ._. Hope to get past it soon, I'll add a new script to the opener.
  10. As opposed to my previous thread made here, this one will have scripts I share with the community. I'll be adding more as time goes by, but I intend to share quite a bit. :] Do whatever you want with these, just don't claim them as your own or sell them of course. And if you could add credits to them that'd be great as well! If at least on your Features page or on the announcement when the script is added to your server. Enjoy! 1. Countdown Mini-Game (Cross-Post from Summer Festival Collection): //===== rAthena Script ======================================= //= Countdown Mini-Game Script //===== By: ================================================== //= Nova http://www.novaragnarok.com //============================================================ summer01,124,121,6 script Countdown#summ 904,{ if ( .start == 0 ) { .@n$ = "[ ^FF0000Countdown^000000 ]"; mes .@n$; mes "In order to win, you must click me after counting down to 0."; mes "Cost of participation is ^3355FF2 Festival Coins^000000"; mes "If you win, I'll give you ^3355FF35 Coins^000000"; @novacountdown = 0; deltimer "Countdown#summ::OnCountdown"; next; switch(select("Play Countdown:Leave")){ case 1: if (@NovaCount > gettimetick(2)) { .@t = @NovaCount - gettimetick(2); dispbottom "Countdown: You must wait "+.@t+" seconds before playing again."; end; } if (.start == 1) { dispbottom "Countdown: Somebody is already playing. Wait for them to finish."; end; } if(countitem(6767) < 2) { mes .@n$; mes "You don't have enough coins."; end; } initnpctimer; delitem 6767,2; @NovaCount = gettimetick(2) + 60; .start = 1; close2; .player$ = strcharinfo(0); .@timer = rand(8,11); .@r = rand(600,1000); .@timer1 = .@timer*.@r; .@timer2 = .@timer1+.@r; emotion 27; showscript "Countdown: "+.player$+"! Count in your head, and click me again when the timer reaches 0.",.gid$; dispbottom "Countdown: Count in your head, and click me on the NPC again when the timer reaches 0."; sleep2 5000; addtimer .@timer1,"Countdown#summ::OnCountdown"; addtimer .@timer2,"Countdown#summ::OnCountdown2"; .@time$ = .@timer; showscript .@time$,.gid$; sleep2 .@r; .@time$ = .@timer-1; showscript .@time$,.gid$; sleep2 .@r; .@time$ = .@timer-2; showscript .@time$,.gid$; end; case 2: end; } end; } if ( .start == 1 && .player$ == strcharinfo(0) ) { if (@novacountdown == 0) { showscript "Countdown: You went too quickly. You lose.",.gid$; .start = 0; @NovaCount = gettimetick(2) + 30; stopnpctimer; end; } if (@novacountdown == 1) { showscript "Countdown: Nice one. You win this time "+.player$+".",.gid$; .start = 0; getitem 6767,35; @NovaCount = gettimetick(2) + 30; stopnpctimer; end; } if (@novacountdown == 2) { showscript "Countdown: You went too slowly. You lose.",.gid$; .start = 0; @NovaCount = gettimetick(2) + 30; stopnpctimer; end; } end; } else { dispbottom "Somebody is already playing Countdown. Wait for them to finish."; end; } OnInit: .gid$ = getnpcid(0); end; OnCountdown: @novacountdown = 1; end; OnCountdown2: @novacountdown = 2; end; OnTimer30000: stopnpctimer; showscript "Countdown: You went too slowly. You lose.",.gid$; .start = 0; end; } 2. Character Deletion on Death: //===== rAthena Script ======================================= //= Character Deletion on Death Script //===== By: ================================================== //= Nova http://www.novaragnarok.com //============================================================ - script PERMANENTDEATH -1,{ end; OnPCDieEvent: set .@deadplayer,getcharid(0); message strcharinfo(0),"Game Over"; atcommand "@kick "+strcharinfo(0); set .@j, getarraysize( .char_delete$ ); for (.@i = 0; .@i < .@j; .@i++) { query_sql("DELETE FROM `"+ .char_delete$[.@i] +"` WHERE `char_id` = '"+ .@deadplayer +"'"); } query_sql "DELETE FROM `party` WHERE `leader_char` = '"+.@deadplayer+"'"; end; OnInit: setarray .char_delete$[0],"bonus_script","char","cart_inventory","elemental","friends","global_reg_value","guild","guild_member","homunculus","hotkey","inventory","memo","mercenary","mercenary_owner","pet","quest","sc_data","skill","skillcooldown"; end; } 3. Instance Based Dead Branch Room: //===== rAthena Script ======================================= //= Dead Branch Room Script //===== By: ================================================== //= Nova http://www.novaragnarok.com //============================================================ npc_in,9,103,6 script Branch Manager 89,{ .@n$ = "[^3355FF Branch Manager ^000000]"; .@party_id = getcharid(1); .@p_name$ = getpartyname(.@party_id); .@instance$ = "Dead Branch Room"; if (getcharid(0) == getpartyleader(.@party_id,2)) { mes .@n$; mes "Would you like to reserve a private Dead Branch Room? It'll cost 100K for two full hours."; mes "Remember, the room and everything inside it will disappear after this time frame."; next; switch(select("Rent Dead Branch Room:Enter the Room:Cancel")) { case 1: if (Zeny < 100000) { mes .@n$; mes "Are you trying to sneak in without paying? You must bring me 100,000 Zeny if you wish to rent a room."; cutin "",255; end; } if (instance_create(.@instance$) < 0) { mes "Party Name: "+.@p_name$; mes "Party Leader: "+strcharinfo(0); mes "^0000ff"+.@instance$+" ^000000- Reservation Failed!"; close; } Zeny -= 100000; mes .@n$; mes "Talk to me again to enter the room now that your room has been reserved."; close; case 2: callsub L_Enter,0,1; case 3: mes .@n$; mes "Have a nice day then, and enjoy Dead Branching in Juperos."; close; } } mes .@n$; mes "You may enter a Dead Branch Room if it's been reserved by your party leader."; next; switch(select("Enter the Dead Branch Room:Cancel")) { case 1: callsub L_Enter,1,1; case 2: mes .@n$; mes "Have a nice day then, and enjoy Dead Branching in Juperos."; end; } L_Enter: switch(instance_enter("Dead Branch Room")) { case 3: mes .@n$; mes "You are not in a party."; close; case 2: mes .@n$; mes "The private Dead Branch Room has not yet been reserved."; mes "The party leader did not pay the fee."; close; case 1: mes .@n$; mes "You can enter the room after making a party."; close; case 0: mapannounce "npc_in", strcharinfo(0)+" of the party, "+.@p_name$+", is entering a Dead Branch Room.",bc_map,"0x00ff99",FW_NORMAL,12; end; } } //================================================================================== //--------|Map Flags|--------------------------------------------------------------- //================================================================================== pvp_n_1-3 mapflag monster_noteleport pvp_n_1-3 mapflag nowarpto pvp_n_1-3 mapflag nomemo pvp_n_1-3 mapflag noteleport pvp_n_1-3 mapflag nosave SavePoint pvp_n_1-3 mapflag nopenalty Make sure you add the following line to your instance_db 16,Dead Branch Room,7200,pvp_n_1-3,99,95,pvp_n_1-3 Feel free to change the number to whatever is appropriate in your server. You'll likely also need to unset the PvP mapflags from that map, or move it to a different map, and feel free to add the following to the map according to what you want for your server: MvP Summoner, Healer, Kafra, Dead Branch Seller. 4. In-game Item Descriptions:​ //===== rAthena Script ======================================= //= In-game Item Descriptions Script //===== By: ================================================== //= Nova http://www.novaragnarok.com //============================================================ - script itemdescs -1,{ end; OnInit: bindatcmd "ii2",strnpcinfo(3)+"::OnAtcommand"; bindatcmd "itemdesc",strnpcinfo(3)+"::OnAtcommand"; end; OnAtcommand: mes "^3355FF[ Item Description Search ]^000000"; .@item = atoi(.@atcmd_parameters$[0]); mes "<ITEMLINK>"+getitemname(.@item)+"<INFO>"+.@item+"</INFO></ITEMLINK>"; mes "Click on the name of the item above."; end; } 5. Dismounter:​ npc_in,50,110,3 script Dismounter 105,{ mes "[ Dismounter ]"; mes "It seems you're stuck on your mount! I'll make that thing run away for you."; next; switch(select("Please! I can't get rid of it.:No! I want to keep my mount.")) { case 1: mes "[ Dismounter ]"; mes "OOGA BOOGA!"; if(SC_ALL_RIDING>=1) { sc_start SC_ALL_RIDING,1,0; } mes "- Your mount has ran away -"; end; case 2: mes "[ Dismounter ]"; mes "Keep your mount for all I care!"; end; } } If you rent a Halter Lead/Reins of Mount, sometimes they'll expire and leave your players stuck on them. This NPC gives them the option to dismount without the reins. 6. Level Up Function:​ - script LevelUpQuotes -1,{ end; OnInit: setarray .q$,"I have advanced forward!","There's no stopping me now!","Look at me go!","There's more where that came from.","This isn't even my final form!"; .num1 = getarraysize(.q$); setarray .maxq$,"I've made it!","I never thought I'd become this strong...","I have reached my final form."; .num2 = getarraysize(.maxq$); end; OnPCBaseLvUpEvent: if( BaseLevel > 149 && getstatus(SC_ITEMBOOST) == 0 ) { sc_start SC_ITEMBOOST,180000,200; } if( BaseLevel == 175 ) { .@r = rand(.num2); showscript strcharinfo(0)+" : "+.maxq$[.@r]; } else { .@r = rand(.num1); showscript strcharinfo(0)+" : "+.q$[.@r]; } if( getstatus(SC_INCREASEAGI) != 1 ) { sc_start SC_INCREASEAGI,30000,10; } end; } This one displays one of several quotes when a player levels up on top of their head. I removed the quotes but you can use your own, I have around 30 on my server. (Just replace Quote 1-3 and add as many as you'd like) It also gives the player 30 seconds of level 10 INC agi, and if the player is 150 or higher, 3 minutes of Bubble Gum effect. 7. Dice Hack: - script dicehack -1,{ end; OnInit: bindatcmd "dice",strnpcinfo(3)+"::OnAtcommand"; end; OnAtcommand: if (getgroupid() < 10) { end; } .@dice = atoi(.@atcmd_parameters$[0]); .@dice += 57; emotion .@dice,1; end; } This one's a silly one. It lets your GMs use @dice 1 to @dice 6 to cheat at dice. It's fun. :] 8. The Claw: //===== rAthena Script ======================================= //= The Claw Script //===== By: ================================================== //= Nova http://www.novaragnarok.com //============================================================ moc_para01,13,25,6 script The Claw 562,{ set .@n$,"[ ^FF0000The Claw^000000 ]"; mes .@n$; mes "Instructions:"; mes "You may pay 250 coins for a random headgear, or 500 to pick a specific headgear."; mes "New hats will be in stock every month."; next; switch(select("Random Hat",""+.hat1$+"",""+.hat2$+"",""+.hat3$+"",""+.hat4$+"")) { case 1: mes .@n$; mes "Are you sure you want a random hat for 250 Gold Coins?"; next; switch(select("Yes","No")) { case 1: if (countitem(671)) < (500) { mes .@n$,"You do not have enough Gold Coins to operate The Claw."; close; } if (checkweight(.@pickedhat,1) == 0 ) { mes .@n$,"The Claw detects you are over your weight limit."; close; } set .HatRandomArray,rand(1,4); delitem 671,250; if(.HatRandomArray==1) { getitem .hatid1,1; } if(.HatRandomArray==2) { getitem .hatid2,1; } if(.HatRandomArray==3) { getitem .hatid3,1; } if(.HatRandomArray==4) { getitem .hatid4,1; } mes .@n$; mes "The Claw has chosen. Here is your hat."; close; case 2: mes .@n$; mes "Come back and play again!"; close; } end; case 2: .@pickedhat = .hatid1; .@pickedname$ = .hat1$; break; case 3: .@pickedhat = .hatid2; .@pickedname$ = .hat2$; break; case 4: .@pickedhat = .hatid3; .@pickedname$ = .hat3$; break; case 5: .@pickedhat = .hatid4; .@pickedname$ = .hat4$; break; } mes .@n$; mes "Are you sure you want to buy: "; mes "<ITEMLINK>"+.@pickedname$+"<INFO>"+.@pickedhat+"</INFO></ITEMLINK> ?"; next; switch(select("Buy for 500 Gold Coins","Cancel")) { case 1: if (countitem(671)) < (500) { mes .@n$,"You do not have enough Gold Coins to operate The Claw."; close; } if (checkweight(.@pickedhat,1) == 0 ) { mes .@n$,"The Claw detects you are over your weight limit."; close; } delitem 671,500; getitem .@pickedhat,1; mes .@n$; mes "The Claw has retrieved your "+.@pickedname$+". Enjoy it."; close; case 2: mes .@n$; mes "Come back and play again!"; close; } OnInit: .hatid1 = 5474; .hatid2 = 5102; .hatid3 = 18678; .hatid4 = 5793; .hat1$ = getitemname(.hatid1); .hat2$ = getitemname(.hatid2); .hat3$ = getitemname(.hatid3); .hat4$ = getitemname(.hatid4); end; } Just change the IDs of the hats you want to rotate in for the month at the bottom, and change the Gold Coin text as well as the ID to whatever item you wish. 9. Search iRO Wiki/RMS Script (In-Game Browser): //===== rAthena Script ======================================= //= Search iRO Wiki/RMS Script (In-Game Browser) //===== By: ================================================== //= Nova http://www.novaragnarok.com //============================================================ - script NovaSearch -1,{ end; OnInit: bindatcmd "rms",strnpcinfo(3)+"::OnAtcommand"; bindatcmd "irowiki",strnpcinfo(3)+"::OnAtcommand"; bindatcmd "search",strnpcinfo(3)+"::OnAtcommand"; .n$ = "^3355FF[ Search Engine ]^000000"; end; OnAtcommand: mes .n$; mes "Note that some information on RMS and iRO wiki might be outdated or inaccurate."; mes "Take your search results with a grain of salt!"; next; switch(select("RMS Monster Search:RMS Item Search:iRO Wiki Search:Close")){ case 1: input .@search$; mes .n$; mes "<URL>Click here to open the browser!<INFO>http://ratemyserver.net/index.php?all_mob_select=%23&mob_id=&mob_name="+.@search$+"&element=-1&race=-1&size=-1&mlvsn=0&mlv=&mlv2=&bxpsn=0&exp=&exp2=&jxpsn=0&jexp=&jexp2=&flee=&dr=95&hit=&hr=100&rgc=0&immu=0&mvp=0&minib=0&aggr=0&assi=0&sense=0&det=0&natk=0&immo=0&chcha=0&loot=0&chtar=0&plt=0&sort_r=0&sort_o=0&page=re_mob_db&f=1&mob_search=Search,1000,1000</INFO></URL>"; close; case 2: input .@search$; mes .n$; mes "<URL>Click here to open the browser!<INFO>http://ratemyserver.net/index.php?page=re_item_db&item_id=&iname="+.@search$+"&itype=-1&islot_sign=-1&islot=-1&ij%5B+%5D=-1&iju=-1&idesc=&iscript=&i_ele=-1&i_status=-1&i_race=-1&i_bonus=-1&icfix=&sort_r=0&sort_o=0&isearch=Search,1000,1000</INFO></URL>"; close; case 3: input .@search$; mes .n$; mes "<URL>Click here to open the browser!<INFO>http://irowiki.org/w/index.php?search="+.@search$+",1000,1000</INFO></URL>"; close; case 4: end; } end; } This one's pretty simple but neat as well. It allows opening iRO wiki and RMS with searches on the in-game browser. 10. Crystal Chaos Mini-Game //===== rAthena Script ======================================= //= Crystal Chaos Mini-Game Script //===== By: ================================================== //= Nova http://www.novaragnarok.com //============================================================ prontera,152,175,6 script Crystal Chaos#summ 762,{ .@n$ = "[ ^FF0000Crystal Chaos^000000 ]"; mes .@n$; mes "You must think you have good eyes."; mes "When the shadow stops moving, select which shadow you think it stopped on."; mes "Playing costs ^3355FF"+.costqty+"x "+getitemname(.costid)+"^000000. If you win, you will get ^3355FF"+.rewardqty+"x "+getitemname(.rewardid)+"^000000."; next; switch(select("Play Crystal Chaos:Leave")){ case 1: if(.start == 0) { if (@NovaCrystal > gettimetick(2)) { .@t = @NovaCrystal - gettimetick(2); dispbottom "Crystal Chaos: You must wait "+.@t+" seconds before playing Crystal Chaos again."; end; } if(countitem(.costid) < .costqty) { mes .@n$; mes "You don't have enough "+getitemname(.rewardid)+"."; end; } delitem .costid,.costqty; @NovaCrystal = gettimetick(2) + 60; .start = 1; initnpctimer; mes .@n$; mes "Press next to start the game."; mes "Pay close attention to the Crystal's shadow,"; mes "When the shadow stops moving, select which shadow you think it stopped on."; next; mes .@n$; mes "- Round 1 -"; donpcevent "Crystal#summshufreal::OnRound1"; donpcevent "Crystal#summshufreal::OnEnable"; mes "Which Crystal did the shadow stop on?"; next; .@choice = .x[select("Left Crystal:Middle Crystal:Right Crystal") - 1]; if(getvariableofnpc(.shadow, "Crystal#summshufreal") != .@choice ) { showscript "You lose",.pchaos$; .start = 0; @NovaCrystal = gettimetick(2) + 60; end; } mes .@n$; mes "Congratulations, now for round 2!"; showscript "Round 2",.pchaos$; next; mes .@n$; mes "- Round 2 -"; donpcevent "Crystal#summshufreal::OnRound2"; donpcevent "Crystal#summshufreal::OnEnable"; mes "Which Crystal did the shadow stop on?"; next; .@choice = .x[select("Left Crystal:Middle Crystal:Right Crystal") - 1]; if(getvariableofnpc(.shadow, "Crystal#summshufreal") != .@choice ) { showscript "You lose",.pchaos$; .start = 0; @NovaCrystal = gettimetick(2) + 60; end; } mes .@n$; mes "Congratulations, now for round 3!"; showscript "Round 3",.pchaos$; next; mes .@n$; mes "- Round 3 -"; donpcevent "Crystal#summshufreal::OnRound3"; donpcevent "Crystal#summshufreal::OnEnable"; mes "Which Crystal did the shadow stop on?"; next; .@choice = .x[select("Left Crystal:Middle Crystal:Right Crystal") - 1]; if(getvariableofnpc(.shadow, "Crystal#summshufreal") != .@choice ) { showscript "You lose",.pchaos$; .start = 0; @NovaCrystal = gettimetick(2) + 60; end; } mes .@n$; mes "Congratulations, now for the final round!"; showscript "Final Round!",.pchaos$; next; mes .@n$; mes "- Final Round -"; donpcevent "Crystal#summshufreal::OnRound4"; donpcevent "Crystal#summshufreal::OnEnable"; mes "Which Crystal did the shadow stop on?"; next; .@choice = .x[select("Left Crystal:Middle Crystal:Right Crystal") - 1]; if(getvariableofnpc(.shadow, "Crystal#summshufreal") != .@choice ) { showscript "You lose",.pchaos$; .start = 0; @NovaCrystal = gettimetick(2) + 60; end; } showscript "You win!",.pchaos$; getitem .rewardid,.rewardqty; .start = 0; @NovaCrystal = gettimetick(2) + 60; end; } else { mes .@n$; mes "Somebody is already playing Crystal Chaos! Please wait until they finish."; } end; case 2: mes .@n$; mes "Come back when you're ready to play."; end; } OnTimer60000: .start = 0; stopnpctimer; end; OnInit: .start = 0; .pchaos$ = getnpcid(0); //Configure the cost of playing as well as the reward. .costid = 6767; .costqty = 2; .rewardid = 6767; .rewardqty = 30; //Set the following array to be the X Coordinates of the 3 following NPCs setarray .x,158,156,154; end; } //Make sure these NPCs are spaced apart by 2 cells on the X axis. (104, 102, 100) //The Coordinates of the last Crystal should be the same as that of the middle one. //If you change the Y coordinate (174) Make sure you also change it below inside Crystal#summshufreal prontera,158,174,4 script Right Crystal#summshuf1 1914,{ end; } prontera,156,174,4 script Middle Crystal#summshuf2 1914,{ end; } prontera,154,174,4 script Left Crystal#summshuf3 1914,{ end; } prontera,156,174,4 script Crystal#summshufreal 1914,{ end; OnInit: npcspeed 20; //Set the following array to be the X Coordinate of the 3 previous NPCs (Same as above) setarray .x,158,156,154; disablenpc "Crystal#summshufreal"; .y = 174; //Set to be the Y coordinate of the previous NPCs end; OnEnable: enablenpc "Crystal#summshufreal"; .r1 = rand(0,2); movenpc "Crystal#summshufreal",.x[.r1],.y; sleep .round; for (.@i = 0; .@i < 15; .@i++){ .r2 = rand(0,2); while (.r2 == .r1) .r2 = rand(0,2); movenpc "Crystal#summshufreal",.x[.r2],.y; sleep .round; .r1 = rand(0,2); while (.r1 == .r2) .r1 = rand(0,2); movenpc "Crystal#summshufreal",.x[.r1],.y; .shadow = .x[.r1]; sleep .round; } disablenpc "Crystal#summshufreal"; end; // Speed Configuration, change at will. OnRound1: .round = 150; end; OnRound2: .round = 100; end; OnRound3: .round = 70; end; OnRound4: .round = 45; end; } This one's one of my favorites despite being pretty simple. Make sure you configure it properly! I'll be adding more scripts over time. Oh and make sure to relocate these as most are from custom maps.
  11. Nova

    Delay Items

    If you already set // How much time must pass between item uses? // Only affects the delay between using items, prevents healing item abuse. Recommended ~500 ms // On officials this is 0, but it's set to 100ms as a measure against bots/macros. item_use_interval: 100 to a low number, then it's likely just your ping to the server.
  12. Nova

    Delay Items

    Do you mean the universal server delay? Or specific Ygg Berry/Ygg Seed/Mora Sap delays?
  13. Eh, I'm currently on Limestone Networks/ONE and I'm setting up a migration over to http://www.ragnahosting.com My time knowing @Conflicts has been short, but my experience with the service has been great so far. (My website, http://www.novaragnarok.com is already being hosted by them) What I appreciate the most is the direct support, instead of generic canned replies that come with "professional" hosting services. Not only that, but they offer support tailored for RO server owners, which though by now I do not need nearly as much, I can see as a great benefit to new owners. The point I'm trying to make is, I believe one negative experience, no matter how overwhelmingly awful it was, should not affect your opinion on other RO hosting services. Not only that, but @Tokeiburu is part of the team. I mean come on, there's not a single more helpful person in the community than Tokei, and he prioritizes answering tickets over talking with me. ;~; (I just noticed mentions were disabled.) Lastly, I'm sorry to hear about this experience, I've heard the story now from two different people who lost their server, and now reading this thread, it terrifies me to think that this could have happened to me.
  14. Pretty cool! I might implement this on my website once I revamp it.
  15. Yeah just reply here if it doesn't work.
  16. The idea behind that NPC is to have a ton of headgear quests in one NPC. I suggest doing something simpler for what you want. A turn-in quest would work. //===== eAthena Script ======================================= //= Euphy's Quest Shop //===== By: ================================================== //= Euphy //===== Current Version: ===================================== //= 1.4a - eAthena //===== Description: ========================================= //= A dynamic quest shop based on Lunar's, with easier config. //= Includes support for multiple shops & cashpoints. //= Item Preview script by ToastOfDoom. //============================================================ prontera,139,167,5 script Hat Maker 61,{ function Add; function Chk; function Slot; function A_An; npcshopdelitem "qshop3",909; dispbottom "Select one item at a time."; callshop "qshop3"; npcshopattach "qshop3"; end; function Add { if (getitemname(getarg(1))=="null") { debugmes "Quest reward #"+getarg(1)+" invalid (skipped)."; return; } for(set .@n,5; .@n<127; set .@n,.@n+2) { if (!getarg(.@n,0)) break; if (getitemname(getarg(.@n))=="null") { debugmes "Quest requirement #"+getarg(.@n)+" invalid (skipped)."; return; } } for(set .@i,2; .@i<.@n; set .@i,.@i+1) set getd(".q_"+getarg(1)+"["+(.@i-2)+"]"), getarg(.@i); npcshopadditem "qshop"+getarg(0),getarg(1),((.ShowZeny)?getarg(3):0); sleep 1; return; } function Chk { if (getarg(0)<getarg(1)) { set @qe0,1; return "^FF0000"; } else return "^00FF00"; } function Slot { set .@s$,getitemname(getarg(0)); switch(.ShowSlot){ case 1: if (!getitemslots(getarg(0))) return .@s$; case 2: if (getiteminfo(getarg(0),2) == 4 || getiteminfo(getarg(0),2) == 5) return .@s$+" ["+getitemslots(getarg(0))+"]"; default: return .@s$; } } function A_An { setarray .@A$[0],"a","e","i","o","u"; set .@B$, "_"+getarg(0); for(set .@i,0; .@i<5; set .@i,.@i+1) if (compare(.@B$,"_"+.@A$[.@i])) return "an "+getarg(0); return "a "+getarg(0); } OnBuyItem: set .@q[0],@bought_nameid; copyarray .@q[1],getd(".q_"+@bought_nameid+"[0]"),getarraysize(getd(".q_"+@bought_nameid+"[0]")); if (!.@q[1]) { message strcharinfo(0),"An error has occurred."; end; } mes "[Quest Shop]"; mes "Reward: ^0055FF"+((.@q[1]>1)?.@q[1]+"x ":"")+Slot(.@q[0])+"^000000"; mes "Requirements:"; if (.@q[2]) mes " > "+Chk(Zeny,.@q[2])+.@q[2]+" Zeny^000000"; if (.@q[3]) mes " > "+Chk(getd(.Points$[0]),.@q[3])+.@q[3]+" "+.Points$[1]+" ("+getd(.Points$[0])+"/"+.@q[3]+")^000000"; if (.@q[4]) for(set .@i,4; .@i<getarraysize(.@q); set .@i,.@i+2) mes " > "+Chk(countitem(.@q[.@i]),.@q[.@i+1])+((.DisplayID)?"{"+.@q[.@i]+"} ":"")+Slot(.@q[.@i])+" ("+countitem(.@q[.@i])+"/"+.@q[.@i+1]+")^000000"; next; set @qe1, getiteminfo(.@q[0],5); set @qe2, getiteminfo(.@q[0],11); addtimer 1000, strnpcinfo(1)+"::OnEnd"; while(1){ switch(select(" ~ Purchase ^0055FF"+getitemname(.@q[0])+"^000000:"+((((@qe1&1) || (@qe1&256) || (@qe1&512)) && @qe2>0 && !@qe6)?" ~ Preview...":"")+": ~ ^777777Cancel^000000")) { case 1: if (@qe0) { mes "[Quest Shop]"; mes "You're missing one or more quest requirements."; close; } if (!checkweight(.@q[0],.@q[1])) { mes "[Quest Shop]"; mes "^FF0000You need "+(((.@q[1]*getiteminfo(.@q[0],6))+Weight-MaxWeight)/10)+" additional weight capacity to complete this trade.^000000"; close; } if (.@q[2]) set Zeny, Zeny-.@q[2]; if (.@q[3]) setd .Points$[0], getd(.Points$[0])-.@q[3]; if (.@q[4]) for(set .@i,4; .@i<getarraysize(.@q); set .@i,.@i+2) delitem .@q[.@i],.@q[.@i+1]; getitem .@q[0],.@q[1]; if (.Announce) announce strcharinfo(0)+" has created "+A_An(getitemname(.@q[0]))+"!",0; specialeffect2 699; close; case 2: set @qe3, getlook(3); set @qe4, getlook(4); set @qe5, getlook(5); if (@qe1&1) atcommand "@changelook 3 "+@qe2; if (@qe1&256) atcommand "@changelook 1 "+@qe2; if (@qe1&512) atcommand "@changelook 2 "+@qe2; set @qe6,1; break; case 3: close; } } OnEnd: if (@qe6) { atcommand "@changelook 3 "+@qe3; atcommand "@changelook 1 "+@qe4; atcommand "@changelook 2 "+@qe5; } for(set .@i,0; .@i<7; set .@i,.@i+1) setd "@qe"+.@i,0; end; OnInit: // --------------------- Config --------------------- // Custom points, if needed: "<variable>","<name to display>" setarray .Points$[0],"#CASHPOINTS","Cash Points"; set .Announce,1; // Announce quest completion? (1: yes / 0: no) set .ShowSlot,1; // Show item slots? (2: all equipment / 1: if slots > 0 / 0: never) set .DisplayID,0; // Show item IDs? (1: yes / 0: no) set .ShowZeny,0; // Show Zeny cost, if any? (1: yes / 0: no) // Shop categories, if needed: "<Shop 1>","<Shop 2>"{,...}; // Duplicate dummy data for any additional shops (bottom of script). // If no categories, use the second line instead (remove //). setarray .Shops$[1],"Headgears","Weapons","Other"; // set .Shops$,"n/a"; // Add(<shop number>,<reward ID>,<reward amount>,<Zeny cost>,<point cost>, // <required item ID>,<required item amount>{,...}); // Shop number corresponds with order above (default is 1). // Note: Do NOT use a reward item more than once! Add(3,5217,1,0,0,912,1); // -------------------------------------------------- } // -------- Dummy data (duplicate as needed) -------- - shop qshop1 -1,909:-1 - shop qshop2 -1,909:-1 - shop qshop3 -1,909:-1 But if you insist, you can use this. Just change this line: Add(3,5217,1,0,0,912,1); 912 is the first item required, 1 means you need one. You can keep adding more items with more commas. (913,10,914,25) etc.
  17. What's your current Punching Bag script? Is it just a permanent monster or? It'd be a lot easier if you post it so we don't just replace what it might already be doing. - script Punching_Bag HIDDEN_NPC,{ end; OnInit: monster "prontera",150,160,"--en--",1002,1,"Punching_Bag::OnMyMobDead"; end; OnMyMobDead: #PvPPoints = #PvPPoints + rand(5,150); monster "prontera",150,160,"--en--",1002,1,"Punching_Bag::OnMyMobDead"; end; } Just change the mob ID, map and coordinates.
  18. I'm pretty sure it's exactly those two segments you listed: src/map/skill.c: if (rnd()%100 < unit->val1) case GS_DESPERADO: unit_val1 = abs(layout->dx[i]); unit_val2 = abs(layout->dy[i]); if (unit_val1 < 2 || unit_val2 < 2) { //Nearby cross, linear decrease with no diagonals if (unit_val2 > unit_val1) unit_val1 = unit_val2; if (unit_val1) unit_val1--; unit_val1 = 36 -12*unit_val1; } else //Diagonal edges unit_val1 = 28 -4*unit_val1 -4*unit_val2; if (unit_val1 < 1) unit_val1 = 1; unit_val2 = 0; break;
  19. Merge this into your server to get the showscript command. https://github.com/rathena/rathena/commit/6ad4ed13d130702b99d0dbe54767c6d6945d4876
  20. Nova

    Exp Mod help

    If it's ending on Saturday at midnight and you want it to end on Sunday at midnight then change if(gettime(4) == 0) To if(gettime(4) == 1)
  21. At the end of the day, no matter how long he took, if he's offering to do it now I don't see why you wouldn't take him up on it considering you paid for it. At the very least you got his attention, and he's offered the service you claimed he denied you before. So take him up on it and move on. You won't gain anything from attempting to tarnish his reputation. Right or wrong the thread has served its purpose, now take the good with the bad and call it a day.
  22. I wasn't planning on releasing any of this, but why not share a little. The thing about the fishing is it's pretty convoluted so it'd be tough to share, there's at least 3 different NPCs, two custom items, and the script itself Edit: I messed up countdown! I'll repost it when I'm home. It's been added to the top post now.
  23. Your inability to have a proper discussion discredits all of your statements Orange00. Accusations also don't make you look too good. Taking over an e-mail is no small matter. Seeing as how he suggested still supporting your Harmony even after all of this and you denied him, I don't get the point of the thread. Is it just defamation?
  24. Easiest way to do so without editing the script too much should be just adding another atcommand "@reloadbattleconf"; line here: if(gettime(4)==4 || gettime(4)==5 || gettime(4)==6 ) { atcommand "@reloadbattleconf"; set .br,getbattleflag("base_exp_rate")*2; set .jr,getbattleflag("job_exp_rate")*2; setbattleflag("base_exp_rate"), .br; setbattleflag("job_exp_rate"), .jr; atcommand "@reloadmobdb"; end; } Or you could make it even simpler and just if(gettime(4)==4 || gettime(4)==5 || gettime(4)==6 ) { setbattleflag("base_exp_rate",1400); setbattleflag("job_exp_rate",1400); atcommand "@reloadmobdb"; end; }
×
×
  • Create New...