-
Posts
82 -
Joined
-
Last visited
-
Days Won
6
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Everything posted by Ragno
-
It is because the npc definition: <map name>,<x>,<y>,<facing>%TAB%script%TAB%<NPC Name>%TAB%<sprite id>,<triggerX>,<triggerY>,{<code>} You have an extra ",2" argument. The correct should be: paradise,143,87,1 script Time Portal#porev 723,2,2,{ morocc_o,159,112,1 script Time Portal#porev3 723,2,2,{
-
One way I know to produce that, is forcing to sit a dead player. They sit, but with 0 hp. A way to prevent it is check it's hp has more than 0 hp before sit them.
-
iRO Weekly Turn-In Event - Gramps NPC
Ragno replied to Ragno's topic in Game, Event, Quest Script Releases
Maybe we can do a team in other projects, I haven't made an inventory of iRO contents, but there is still lots of contents to bring. -
The following script emulates iRO's Weekly Turn-In Event (Gramps NPC). This was made by having direct interaction with Gramps npc ingame. For more details please check: Weekly Turn-In Events - iRO Wiki Special thanks to: ZacktheBear from AtlantisRO. This would not have been possible without his invaluable help by providing replay data and testing. Resources: Gramps_Weekly_TurnIn.txt quest_db.txt questid2display.txt resnametable.txt Some notes about this script: This script uses special maps to warp players. Please prepare the map-cache according to data provided. This script uses some arrays on the OnInit label to set the Turn-In quest and maps: Arrays .Gramps_MapName$, .Gramps_MapWarp$, .Gramps_MapX and .Gramps_MapY defines the turn-in map where player will be warped. Array .Gramps_Turn defines the questlog id and target monster for Tur-In in this order: Low Maps: Index 0 = Quest Id 1 Index 1 = Monster Id 1 Index 2 = Quest Id 2 Index 3 = Monster Id 2 Mid Maps: Index 4 = Quest Id 1 Index 5 = Monster Id 1 Index 6 = Quest Id 2 Index 7 = Monster Id 2 High Maps: Index 8 = Quest Id 1 Index 9 = Monster Id 1 Index 10 = Quest Id 2 Index 11 = Monster Id 2 Some quest gives Zeny reward, but it is not clear which one gives and which one doesn't. Please provide any data to know how does this works. Since I have no way to know how much monsters have Turn-In maps, I didn't put monster spawn. Please configure it as your needs. Please feel free to make any suggestion for improve this script and report any issue you may find.
-
According to kRO 2014.02.01 Notice it was added a Guild Storage NPC in every city: I have this questions about this update: How does this npc works? Is it an independent npc or it was added via Kafra Employee? Can every guild member access the guild storage? Or only those who has the storage check in guild window? What are the requisits to use it? And also want to request for somebody with kRO account to please bring screenshots (or video if possible) with the official dialogues of this npc to make it a script. Thanks!
-
If you want to replace prontera map without replacing the files, you need to edit your resnametable.txt file in data.grf. Add this: prontera.gnd#pprontera.gnd# prontera.gat#pprontera.gat# prontera.rsw#pprontera.rsw# À¯ÀúÀÎÅÍÆäÀ̽º\map\prontera.bmp#À¯ÀúÀÎÅÍÆäÀ̽º\map\pprontera.bmp# In this way, when player loads prontera map, client will use "pprontera.*" instead of "prontera.*" resources.
-
iRO has the clan system active since some months, and players can apply to a clan. Here are some observations: When you pass the mouse over the clan master npc, it shows the clan logo in his name: This are the buffs seted when player joins the clan: StateIconList[EFST_IDs.EFST_SWORDCLAN] = { descript = { { "Sword clan", COLOR_TITLE_BUFF }, { "STR + 1, VIT + 1" }, { "MHP + 30, MSP + 10" } } } StateIconList[EFST_IDs.EFST_ARCWANDCLAN] = { descript = { { "Arcwand Clan", COLOR_TITLE_BUFF }, { "INT + 1, DEX + 1" }, { "MHP + 30, MSP + 10" } } } StateIconList[EFST_IDs.EFST_GOLDENMACECLAN] = { descript = { { "Goldenmace Clan", COLOR_TITLE_BUFF }, { "LUK + 1, INT + 1" }, { "MHP + 30, MSP + 10" } } } StateIconList[EFST_IDs.EFST_CROSSBOWCLAN] = { descript = { { "Crossbow Clan", COLOR_TITLE_BUFF }, { "DEX + 1, AGI + 1" }, { "MHP + 30, MSP + 10" } } } And this are the dialogues and messages from that four npcs: prt_in,33,114,5 script Raffam Oranpere 10058,{ mes "[Raffam Oranpere]"; mes "Hi! I'm Raffam, master of ^3131FFSword Clan^000000, one the Rune-Midgarts Kingdom."; next; switch(select("Introducing Clan", "Join.", "Leave.")){ case 1: switch(select("Clans are", "About the Sword Clan", "Cancel.")){ case 1: mes "[Raffam Oranpere]"; mes "The Clans are a type of guild ran by the Kingdom."; mes "They don't participate in the Siege, so members are free to join/leave anytime."; next; mes "[Raffam Oranpere]"; mes "I wish we could join the Siege. I'd love flying over on my dragon and burning everyone in my way!"; mes "Oops, too thrilled!"; next; mes "[Raffam Oranpere]"; mes "Join us, if no clan suits your taste."; mes "New members are given ^3131FFfree stat bonus^000000."; next; mes "[Raffam Oranpere]"; mes "Melee stats are offered as the name ^3131FFSword Clan^000000 suggests, but not all members are Melee classes."; mes "Don't feel pressured, just count on me!"; next; mes "[Raffam Oranpere]"; mes "Difference in variety creates the fun"; mes "These odd bunches never bore me in the party."; next; mes "[Raffam Oranpere]"; mes "And who knows you'll meet your soul mate in the clan? Hahah!"; close; case 2: mes "[Raffam Oranpere]"; mes "The ^3131FFSword Clan^000000 mainly supports Melee adventurers."; mes "Join for free ^FF0000<STR+1, VIT+1, MHP+30, MSP+10>^000000!"; next; mes "[Raffam Oranpere]"; mes "Remember, no Siege participation."; mes "You should contact other guilds for Siege."; next; mes "[Raffam Oranpere]"; mes "A question?"; mes "Excited to join me? Hahah!"; close; case 3: close; } case 2: mes "[Raffam Oranpere]"; mes "Oh, you'll join? Good choice!"; mes "Let's check the Clan policy then take admission procedures."; next; mes "[Raffam Oranpere]"; mes "^3131FFClansmen^000000 cannot participate in the Siege."; mes "New members are given these stat bonuses: ^FF0000<STR+1, VIT+1, MHP+30, MSP+10>^000000."; mes "You with me so far?"; next; if (select("Yes.", "No.") == 2){ mes "[Raffam Oranpere]"; mes "Uh, oh. Let's go back to"; mes "beginning."; close; } mes "[Raffam Oranpere]"; mes "Join and leave the clans anytime, but if you don't show up at clan for ^FF0000longer than 2 weeks^000000, you'll be ^FF0000expelled^000000."; mes "Clan masters exist for reason, like I."; mes "Understood?"; next; if (select("Yes.", "No.") == 2){ mes "[Raffam Oranpere]"; mes "Uh, oh. Let's go back to"; mes "beginning."; close; } mes "[Raffam Oranpere]"; mes "Great, sign name here on the register."; next; input .@input$; mes "[Raffam Oranpere]"; mes "So, you're ^3131FF" + strcharinfo(0) + "^000000! Nice name!"; mes "Let me register you."; next; if (getcharid(2)){ mes "[Raffam Oranpere]"; mes "Come back to join after you leave the current guild."; close; //} else if (clan()){ mes "[Raffam Oranpere]"; mes "Eh?"; mes "Oh, you're in Clan."; mes "Don't mess with me, it's not cool."; close; } mes "[Raffam Oranpere]"; mes "Welcome to ^3131FFSword Clan^000000!"; mes "You can review Clan info with ^3131FFCtrl+G^000000."; mes "At your service!"; // added to Sword Clan close; case 3: mes "[Raffam Oranpere]"; mes "You want to leave?"; mes "No problem. I hope you'll find more suitable clan."; mes "Ready for withdrawal?"; next; if (select("Continue.", "Cancel.") == 1){ /* if (clan() == Sword_Clan){ mes "[Raffam Oranpere]"; mes "Okay, it's done. But let's not be strangers, okay?"; mes "It was nice having you!"; // removed from Sword Clan } else if (clan()){ mes "[Raffam Oranpere]"; mes "Hey, talk to your guild master if you want to leave."; } else { mes "[Raffam Oranpere]"; mes "Wait, you're not with us! Grr, don't make me breathe fire at you!"; } */ } close; } } prt_in,35,114,5 script Devon Aire 10059,{ mes "[Devon Aire]"; mes "I'm Devon, master of ^3131FFArc Wand Clan^000000."; next; switch(select("Introducing Clan", "Join.", "Leave.")){ case 1: switch(select("Clans are", "About the Arc Wand Clan", "Cancel.")){ case 1: mes "[Devon Aire]"; mes "The ^3131FFClans^000000 are ran by the Kingdom, not privately like others."; mes "And I manage one of them."; next; mes "[Devon Aire]"; mes "..."; mes "What's with that look? You got a problem?"; next; mes "[Berman Aire]"; mes "Brother, you're scaring the potential member, be gentle."; next; mes "[Devon Aire]"; mes "..."; next; mes "[Devon Aire]"; mes "Join if seeking a place to fit in."; mes "We give ^3131FFfree bonus stat^000000. But no Siege."; next; mes "[Devon Aire]"; mes "Most members are offensive mage classes as the name ^3131FFArc Wand Clan^000000 suggests, but that's no requirement."; next; mes "[Devon Aire]"; mes "...Hey, Shaam Rumi."; mes "Stop hitting on my brother, and go work."; next; mes "[Shaam Rumi]"; mes "Whatever!"; next; mes "[Devon Aire]"; mes "...Hmpf!"; mes "Listen, Crossbow Clan's master is an evil."; next; mes "[Shaam Rumi]"; mes "Get over me, Decon! Don't spread rumors!"; // Note. Here literally says "Decon", but it may be "Devon" (typo mistake) next; mes "[Berman Aire]"; mes "Haha. stop it. You two are making a scene."; mes "Come on, back to work, guys."; close; case 2: mes "[Devon Aire]"; mes "The ^3131FFArc Wand Clan^000000 mainly supports offensive mage classes."; mes "We offer ^FF0000<INT+1, DEX+1, MHP+30, MSP+10>^000000 to new members. Don't ask for more; it's the Kingdom's rule."; next; mes "[Devon Aire]"; mes "^3131FFClansmen^000000 can't participate in the Siege."; mes "If you like the Siege, then go join a regular guild."; next; mes "[Devon Aire]"; mes "That is all. No questions."; close; case 3: close; } case 2: mes "[Devon Aire]"; mes "..."; mes "Let's check the Clan policy then take admission procedures."; next; mes "[Devon Aire]"; mes "^3131FFClansmen^000000 cannot participate in the Siege."; mes "New members are given these stat bonuses: ^FF0000<INT+1, DEX+1, MHP+30, MSP+10>^000000."; mes "You with me so far?"; next; if (select("Yes.", "No.") == 2){ mes "[Devon Aire]"; mes "Gosh, listen to the policy again."; close; } mes "[Devon Aire]"; mes "Join and leave the clans anytime, but if you don't show up at clan for ^FF0000more than 2 weeks^000000, you'll be ^FF0000expelled^000000."; mes "Do you agree?"; next; if (select("Yes.", "No.") == 2){ mes "[Devon Aire]"; mes "Then I don't want you."; close; } mes "[Devon Aire]"; mes "Sign your name here."; next; input .@input$; mes "[Devon Aire]"; mes "^3131FF" + strcharinfo(0) + "^000000...."; mes "Good, let me invite you in."; next; if (getcharid(2)){ mes "[Devon Aire]"; mes "Leave your guild first to join mine, duh."; close; //} else if (clan()){ mes "[Devon Aire]"; mes "You're already in a clan. You joking?!"; mes "Oh, I can be funny, too--FIRE PILLAR!"; close; } mes "[Devon Aire]"; mes "You have joined the ^3131FFArc Wand Clan^000000."; // added to Arc Wand Clan next; mes "[Devon Aire]"; mes "You can review Clan info with ^3131FFCtrl+G^000000."; mes "So don't bother me later."; next; mes "[Devon Aire]"; mes "That's all. Visit often or be expelled. Dismissed."; close; case 3: mes "[Devon Aire]"; mes "Want to leave, huh?"; mes "I understand it it's about Siege."; mes "If not, why are...Never mind.."; mes "I'll process your withdrawal."; next; if (select("Continue.", "Cancel.") == 1){ /* if (clan() == Arc_Wand_Clan){ mes "[Devon Aire]"; mes "You are withdrawn from the clan."; mes "Now leave. I don't feel like talking anymore."; // removed from Arc Wand Clan } else if (clan()){ mes "[Devon Aire]"; mes "You're barking up the wrong tree."; mes "Go to your clan master."; } else { mes "[Devon Aire]"; mes "Naughty children deserve a good Jupitel Thunder."; } */ } close; } } prt_in,37,114,5 script Berman Aire 10060,{ mes "[Berman Aire]"; mes "Nice to meet you. I'm Berman Aire, master of ^3131FFGoldenmace Clan^000000."; mes "I'm also the older brother of Devon Aire here. Devon looks tough, but he's a sweetheart."; next; switch(select("Introducing Clan", "Join.", "Leave.")){ case 1: switch(select("Clans are", "About the Golden Mace Clan", "Cancel.")){ case 1: mes "[Berman Aire]"; mes "The ^3131FFClans^000000 are established by the Kingdom to help adventurers connect and share information."; next; mes "[Berman Aire]"; mes "Because the Kingdom runs the clan, no Sieges, but at least the members are given ^3131FFstat bonuses^000000."; mes "The stat bonuses are small, but can be very useful for beginning adventurers."; next; mes "[Berman Aire]"; mes "We're named the ^3131FFGolden Mace Clan^000000, but we don't discriminate against applicants based on their classes."; mes "The name is just to help you easily choose your clan."; next; mes "[Shaam Rumi]"; mes "Berman, enough with the explanation. Let's go hang out in Glast Heim."; next; mes "[Devon Aire]"; mes "... Hey."; next; mes "[Shaam Rumi]"; mes "Ooh, you're scaring me."; mes "Berman, call me when you can!~"; next; mes "[Berman Aire]"; mes "Hah hah, I apologize for their bickering."; next; mes "[Berman Aire]"; mes "Do you have a question?"; mes "If you're tired of traveling alone, join us! You can join and leave the Clans anytime you want."; close; case 2: mes "[Berman Aire]"; mes "The ^3131FFGolden Mace Clan^000000 mainly supports supportive classes."; mes "We offer ^FF0000<INT+1, LUK+1, MHP+30, MSP+10>^000000 to new members."; next; mes "[Berman Aire]"; mes "As I told you earlier, Clans cannot join the Siege because they already belong to the Kingdom."; mes "If you want to be in the Siege, then I recommend you join a regular guild."; next; mes "[Berman Aire]"; mes "Do you understand about the Clans now?"; close; case 3: close; } case 2: mes "[Berman Aire]"; mes "Great!"; mes "Let's check the Clan policy then take admission procedures."; next; mes "[Berman Aire]"; mes "^3131FFClansmen^000000 cannot participate in the Siege."; mes "As our new member, you'll receive the following stat bonuses: ^FF0000<DEX+1, AGI+1, MHP+30, MSP+10>^000000."; mes "Do you agree?"; next; if (select("Yes.", "No.") == 2){ mes "[Berman Aire]"; mes "I suggest you to think it over."; close; } mes "[Berman Aire]"; mes "Join and leave the clans anytime, but if you don't show up at clan for ^FF0000more than 2 weeks^000000, you'll be ^FF0000expelled^000000."; mes "Do you agree to maintain good standing in Clan?"; next; if (select("Yes.", "No.") == 2){ mes "[Berman Aire]"; mes "I'm sure you'll find a clan better suited for your needs."; close; } mes "[Berman Aire]"; mes "Now, please write your name here."; next; input .@input$; mes "[Berman Aire]"; mes "^3131FF" + strcharinfo(0) + "^000000! What a good name!"; mes "Okay, then..."; next; if (getcharid(2)){ mes "[Berman Aire]"; mes "Oh, no."; mes "In order to join, you first have to leave the current guild."; close; //} else if (clan()){ mes "[Berman Aire]"; mes "You're already in a clan."; mes "You're just confused, right?"; close; } mes "[Berman Aire]"; mes "Welcome to the ^3131FFGolden Mace Clan^000000!"; // added to Golden Mace Clan next; mes "[Berman Aire]"; mes "You can review Clan info with ^3131FFCtrl+G^000000."; next; mes "[Berman Aire]"; mes "Please remember the few precautions I gave you, and enjoy your Clan activities!"; close; case 3: mes "[Berman Aire]"; mes "With meeting, there is parting."; mes "I hope you enjoyed your time in ^3131FFGolden Mace Clan^000000."; mes "Now, should I process your withdrawal?"; next; if (select("Continue.", "Cancel.") == 1){ /* if (clan() == Goldenmace_Clan){ mes "[Berman Aire]"; mes "It's processed."; mes "Come back anytime to ^3131FFGolden Mace Clan^000000. I'll be here."; // removed from Golden Mace Clan } else if (clan()){ mes "[Berman Aire]"; mes "I'm sorry, but I can't remove you from another clan.."; } else { mes "[Berman Aire]"; mes "You can't leave the clan without joining it first."; } */ } close; } } prt_in,39,114,5 script Shaam Rumi 10061,{ mes "[Shaam Rumi]"; mes "Hi, there! I'm Shaam, master of ^3131FFCrossbow Clan^000000"; mes "What can I do for you?"; next; switch(select("Introducing Clan", "Join.", "Leave.")){ case 1: switch(select("Clans are", "About the Crossbow Clan", "Cancel.")){ case 1: mes "[Shaam Rumi]"; mes "The Clan established by the Rune-Midgarts Kingdom to... Raffam, why are our ^3131FFclans^000000 made?"; next; mes "[Raffam Oranpere]"; mes "Did you sleep in class? Gosh."; mes "The Clans help lone adventurers connect with each other and share information."; next; mes "[Shaam Rumi]"; mes "A-ha, got it! Thank you, Captain!"; mes "You heard that too, right?"; next; mes "[Shaam Rumi]"; mes "Run by the Kingdom itself, the Clans are not allowed to participate in the Siege, but the good news is that the members are given some ^3131FFstat bonuses^000000."; next; mes "[Shaam Rumi]"; mes "In case you wonder if the ^3131FFCrossbow Clan^000000 only recruits Archers, no, it doesn't."; mes "All the Clans accept all classes."; mes "You can choose the one that suits your needs best."; next; mes "[Shaam Rumi]"; mes "That should cover everything there is to know."; mes "Berman, let's go hang out in Glast Heim."; next; mes "[Devon Aire]"; mes "You..."; next; mes "[Shaam Rumi]"; mes "Ooh, scary! You're so protective of your brother."; close; case 2: mes "[Shaam Rumi]"; mes "The ^3131FFCrossbow Clan^000000 is ideal for Ranged classes."; next; mes "[Shaam Rumi]"; mes "Eh, let me check the Clan manual."; mes "Ah, and we offer stat bonuses to new members: ^FF0000<DEX+1, AGI+1, MHP+30, MSP+10>^000000."; next; mes "[Shaam Rumi]"; mes "The Clans are not allowed to participate in the Siege; you should join a private guild instead for the Siege."; mes "The Clans are for adventurers that hate being tied down."; next; mes "[Shaam Rumi]"; mes "Do you have a question?"; close; case 3: close; } case 2: mes "[Shaam Rumi]"; mes "Oh, yeah? Good choice!"; mes "Let's check the Clan policy then take admission procedures."; next; mes "[Shaam Rumi]"; mes "^3131FFClansmen^000000 cannot participate in the Siege."; mes "As our new member, you'll receive the following stat bonuses: ^FF0000<DEX+1, AGI+1, MHP+30, MSP+10>^000000."; mes "Do you agree?"; next; if (select("Yes.", "No.") == 2){ mes "[Shaam Rumi]"; mes "Ah, do you need time to think about this? No problem."; close; } mes "[Shaam Rumi]"; mes "Join and leave the clans anytime, but if you don't show up at clan for ^FF0000more than 2 weeks^000000, you'll be ^FF0000expelled^000000."; mes "Do you promise you'll maintain good standing?"; next; if (select("Yes.", "No.") == 2){ mes "[Shaam Rumi]"; mes "All right then. I'm just going to go have some fun."; close; } mes "[Shaam Rumi]"; mes "Good, write your name here."; next; input .@input$; mes "[Shaam Rumi]"; mes "^3131FF" + strcharinfo(0) + "^000000..!"; mes "Ugh, your penmanship needs work."; mes "Let me process your application."; next; if (getcharid(2)){ mes "[Shaam Rumi]"; mes "Did you finish things up with your old clan?"; close; //} else if (clan()){ mes "[Shaam Rumi]"; mes "Eh, you're already in a clan. Hey, this isn't funny."; close; } mes "[Shaam Rumi]"; mes "Welcome to the ^3131FFCrossbow Clan^000000!"; // added to Crossbow clan next; mes "[Shaam Rumi]"; mes "You can review Clan info with ^3131FFCtrl+G^000000."; next; mes "[Shaam Rumi]"; mes "Don't pick fights with other clansmen. Be social."; mes "If you need help, you can always whisper me, okay? See you around!"; close; case 3: mes "[Shaam Rumi]"; mes "Why, did you find a better clan?"; mes "I'm disappointed, but it's your call. Let me process your withdrawal."; next; if (select("Continue.", "Cancel.") == 1){ /* if (clan() == Crossbow_Clan){ mes "[Shaam Rumi]"; mes "It's done."; mes "If you ever miss us, don't hesitate to come back, all right?"; // removed from Crossbow Clan } else if (clan()){ mes "[Shaam Rumi]"; mes "Sorry, but I don't meddle with other clan's business."; } else { mes "[Shaam Rumi]"; mes "I can't let you leave--you're not even in my clan!"; } */ } close; } } I used a "clan()" fictional command to indicate the kind of activity every npc do. I hope this help
-
Emistry's code is correct, Yami. Here is the complete script with the suggested editions: //===== rAthena Script ======================================= //= Battleground: PVP //===== By: ================================================== //= AnnieRuru //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= A simple battleground script: //= Kill players from the other team. //===== Additional Comments: ================================= //= 1.0 First version, edited. [Euphy] //============================================================ - script bg_pvp1#control1 -1,{ OnInit: .minplayer2start = 5; // minimum players to start (ex. if 3vs3, set to 3) .eventlasting = 15*60; // event duration before auto-reset (20 minutes * seconds) setarray .rewarditem[0], // rewards for the winning team: <item>,<amount>,... 7773, 15; end; OnStart: .@Guillaume = getwaitingroomstate( 0, .rednpcname$ ); .@Croix = getwaitingroomstate( 0, .bluenpcname$ ); if ( .@Guillaume < .minplayer2start || .@Croix < .minplayer2start ){ announce "Battleground 5v5 : "+.@Guillaume+"/5 Red Side | "+.@Croix+"/5 Blue Side",16; end; } // create Battleground and teams .red = waitingroom2bg( "guild_vs1", 5,50, strnpcinfo(0)+"::OnRedQuit", strnpcinfo(0)+"::OnRedDead", .rednpcname$ ); copyarray .team1aid, $@arenamembers, $@arenamembersnum; .team1count = .minplayer2start; .blue = waitingroom2bg( "guild_vs1", 95,50, strnpcinfo(0)+"::OnBlueQuit", strnpcinfo(0)+"::OnBlueDead", .bluenpcname$ ); copyarray .team2aid, $@arenamembers, $@arenamembersnum; .team2count = .minplayer2start; delwaitingroom .rednpcname$; delwaitingroom .bluenpcname$; bg_warp .red, "guild_vs1", 5,50; bg_warp .blue, "guild_vs1", 95,50; .score[1] = .score[2] = .minplayer2start; bg_updatescore "guild_vs1", .score[1], .score[2]; // match duration sleep .eventlasting * 1000; // end match, destroy Battleground, reset NPCs if ( .score[1] > .score[2] ) { mapannounce "guild_vs1", "- Red Team is victorious! -", bc_map; callsub L_Reward, 1; } else if ( .score[1] < .score[2] ) { mapannounce "guild_vs1", "- Blue Team is victorious! -", bc_map; callsub L_Reward, 2; } else mapannounce "guild_vs1", "- The match has ended in a draw! -", bc_map; bg_warp .red, "prontera",156,182; bg_warp .blue, "prontera",156,182; bg_destroy .red; bg_destroy .blue; donpcevent .rednpcname$ +"::OnStart"; donpcevent .bluenpcname$ +"::OnStart"; end; L_Reward: for ( .@i = 0; .@i < getd(".team"+ getarg(0) +"count"); .@i++ ) getitem .rewarditem[0], .rewarditem[1], getd(".team"+ getarg(0) +"aid["+ .@i +"]" ); return; // "OnDeath" event OnRedDead: callsub L_Dead, 1; OnBlueDead: callsub L_Dead, 2; L_Dead: .score[ getarg(0) ]--; bg_updatescore "guild_vs1", .score[1], .score[2]; while ( getd( ".team"+ getarg(0) +"aid["+ .@i +"]" ) != getcharid(3) && .@i < getd(".team"+ getarg(0) +"count") ) .@i++; deletearray getd( ".team"+ getarg(0) +"aid["+ .@i +"]" ), 1; setd ".team"+ getarg(0) +"count", getd(".team"+ getarg(0) +"count") -1; bg_leave; if ( !.score[ getarg(0) ] ) awake strnpcinfo(0); sleep2 1250; percentheal 100,100; end; // "OnQuit" event OnRedQuit: callsub L_Quit, 1; OnBlueQuit: callsub L_Quit, 2; L_Quit: .score[ getarg(0) ]--; bg_updatescore "guild_vs1", .score[1], .score[2]; percentheal 100, 100; while ( getd( ".team"+ getarg(0) +"aid["+ .@i +"]" ) != getcharid(3) && .@i < getd(".team"+ getarg(0) +"count") ) .@i++; deletearray getd( ".team"+ getarg(0) +"aid["+ .@i +"]" ), 1; setd ".team"+ getarg(0) +"count", getd(".team"+ getarg(0) +"count") -1; if ( !.score[ getarg(0) ] ) awake strnpcinfo(0); end; } prontera,147,162,5 script Red Team#bg_pvp1 413,{ mes "5v5 Battleground"; mes "Time Limit : 15 minutes"; mes "Cooldown : 0 minute"; mes "Rewards"; mes "Winner : 15"; mes "Loser : 0"; end; OnInit: sleep 1; set getvariableofnpc( .rednpcname$, "bg_pvp1#control1" ), strnpcinfo(0); OnStart: waitingroom "Battleground - 5v5", getvariableofnpc( .minplayer2start, "bg_pvp1#control1" ) +1, "bg_pvp1#control1::OnStart", 1; end; } prontera,164,162,3 script Blue Team#bg_pvp1 413,{ mes "5v5 Battleground"; mes "Time Limit : 15 minutes"; mes "Cooldown : 0 minute"; mes "Rewards"; mes "Winner : 15"; mes "Loser : 0"; end; OnInit: sleep 1; set getvariableofnpc( .bluenpcname$, "bg_pvp1#control1" ), strnpcinfo(0); OnStart: waitingroom "Battleground - 5v5", getvariableofnpc( .minplayer2start, "bg_pvp1#control1" ) +1, "bg_pvp1#control1::OnStart", 1; end; } guild_vs1 mapflag battleground 2 guild_vs1 mapflag nosave SavePoint guild_vs1 mapflag nowarp guild_vs1 mapflag nowarpto guild_vs1 mapflag noteleport guild_vs1 mapflag nomemo guild_vs1 mapflag nopenalty guild_vs1 mapflag nobranch guild_vs1 mapflag noicewall
-
iRO Event: Adventure of the Tarnished Lamp
Ragno replied to Ragno's topic in Game, Event, Quest Script Releases
You're right. The location for bookshelf is ra_in01,187,149, I confused it in the replay Here is the sprite data, if needed: sprite.rar -
iRO 13th Anniversary Quest Event
Ragno replied to Ragno's topic in Game, Event, Quest Script Releases
Thank you =) There was an error on iteminfo.lub, I have corrected it in this other version and also added the item sprites: items data.rar -
In both waitingroom of [Red Team#bg_pvp1] and [Blue Team#bg_pvp1] you need to chance the Trigger value from [ "bg_pvp1#control1::OnStart", getvariableofnpc( .minplayer2start, "bg_pvp1#control1" ) ] to 1. This will trigger the event "bg_pvp1#control1::OnStart" everytime a player enters the waiting room. Then add your announce in OnStart label, just after the first if conditional: OnStart: if ( getwaitingroomstate( 0, .rednpcname$ ) < .minplayer2start || getwaitingroomstate( 0, .bluenpcname$ ) < .minplayer2start ){ announce "Battleground 5v5 : "+.@Guillaume+"/5 Red Side | "+.@Croix+"/5 Blue Side",16; end; }
-
The following script emulates the iRO's 13th Anniversary Quest Event active on 2016 June in iRO. This was made by directly doing this quest on iRO. For more details please check: Event Notice || iRO Wiki Resources: iRO_13th_Anniv.txt items data.rar quest_db.txt questid2display.txt Feel free to make any question.
-
The following script emulates the Spotlight Quest: Adventure of the Tarnished Lamp active on 2016 June in iRO. This was made directly by doing this quest on iRO. For more details please check: Event Notice || iRO Wiki This quest requires an special spawn of Byorgue monster named "Byorgue Mercenary" who hasn't any exp/drops and has the following stats: Resources: iRO_Event_2016-06.txt item data.txt quest_db.txt questid2display.txt sprite.rar Feel free to make any question.
-
You were right @Capuche, the error reported by @spinzaku was caused by the += operation with string. This is the fixed version: iRO Bounty Boards v1.0.2.rar : Removed += operations with strings. Thanks to both for the info. Added vip function to collect all bounties and fixed a minnor bug with one use of a close command. iRO Bounty Boards v1.1.rar
-
I will give it a second check the += operations. I have tested this in Hercules base emulator and haven't any issues. That close2 is oficial behavior, because in iRO the dialogue puts a close button, when hit that button it closes the dialogue and then the dialogue is reopened. It would be preferable to directly put a next button, but, I prefer to leave it with the official behavior, it is cool as well. Thanks for the report, i'm checking it. Edit: That is because in initial release I was using constant variables insted of numerical variables, since I script this in a Hercules based server Please use the version 1.0.1 from this link: iRO Bounty Boards v1.0.1.rar : Changed npc and monsters constants to numerical ids.
-
Yes, I know, but, is this really the first comment to my contribution? I'm feeling a little disappointed. Just for the record, this script doesn't copy any kind of code from yours. I make this from zero by testing Bounty Boards in iRO with help of people from our server, who gives all kind of ro replay files to make this possible. Anyway, this scripts is a close emulation to Bounty Boards just as on iRO. I have reproduced even the different messages that every board have, because not all of them are the same. I only wanted to share this to make an addition to emulation of ragnarok.
-
The following script emulates the Bounty Board Quests from iRO. This was made by having direct interaction with all the npcs, directly doing some of this quest and also using iRO Wiki information as a source. This quest uses a special function designed to concentrate and manage all the bounties in a few lines, to make it easy to update, modify or even create custom bounties. iRO Bounty Boards v1.1.rar : Added vip function to collect all bounties and fixed a minnor bug with one use of a close command. iRO Bounty Boards v1.0.2.rar : Removed += operations with strings. iRO Bounty Boards v1.0.1.rar : Changed npc and monsters constants to numerical ids. iRO Bounty Boards v1.0.rar : Initial Release For more details please check: Bounty Board Quests - iRO Wiki Special thanks to: Trixtan and ZacktheBear from AtlantisRO. This would not have been possible without their invaluable help. Some notes about this: There are some errors in iRO's npc. In example, in Juno the Bounty 70-110 for Juno with a char base level 127, the Bounty says it is for levels 70-100 (not 110, as his name says). This error was caused because this quests were implemented before update that expands max base level to 175 and it seems that iRO's npc were scripted individually one by one, not as a function, so, this errors may be only little bugs when updating values. This kind of error is present in some bounties for Lighthalzen, Hugel, and don't remember which other one. However, all the npcs presented here are using the information provided by iRO Wiki and presents information ingame avoiding this kind of errors. Some to-do : I'm missing base/job exp for False Angel and Mini Demon (Geffen Bounties), since that information is not present in iRO Wiki and I haven't The Sign quest. If somebody can open Portal to Geffenia, i will update that values. Bounties for biolab 3 and 4 has a special function, it is like containing two boards in one, since a player can choose to do all bounties for monsters from 3rd level and all bounties for monsters from 4th level (to receive the reward for all the bounties completed). Add vip function to Collect All Bounties. Add questinfo command to show quest mark in bounties npc. This quests are a close emulation to iRO's Bounty Boards. We hope players can enjoy this quests. If you detect any error or have a suggestion, please feel free to comment it.
-
Sure, here is a few steps using query_sql command in a little script: 1. First at all make a backup of your item_db table. 2. Create the table "rA_item_db" in your ragnarok Database using the file I'm sending to you, or take the original one from rAthena's github and change all the "item_db" for "rA_item_db", this is to avoid replace your actual item_db with another item_db. rA_item_db.sql To create the table copy the file i'm sending to C:\ and use this command in your sql console: source C:\rA_item_db.sql 3. Use the next npc to make all the changes: prontera,50,50,0 script equip_jobs 1002,{ mes "Hi, I will update your job values in item_db."; query_sql "SHOW TABLES LIKE 'rA_item_db'",.@tbl$; if (.@tbl$ == ""){ mes "However, you need to create the rA_item_db table to proceed."; mes "Please execute the rA_item_db.sql file provided with this script."; close; } mes "Would you like to proceed?"; if (select("No:Yes") == 1) close; next; mes "Working..."; query_sql("SELECT id, equip_jobs FROM rA_item_db", .@id, .@equip_jobs); freeloop(1); for (.@i = 0; .@i < getarraysize(.@id); ++.@i){ query_sql("UPDATE `item_db` SET `equip_jobs` = " + .@equip_jobs[.@i] + " WHERE `id` = "+.@id[.@i]); } freeloop(0); mes "I have update the item_db values with the ones from rA_item_db table."; mes "Hope this was helpful :)"; close; } When this has finished your sql item_db will have all the equip_job values changed to their defaults according to rAthena db. 4. When you have finished use this command to erase the rA_item_db table created only for this: drop table rA_item_db; Hope this helps
-
The easiest way is replacing your item_db.txt with the one provided by rAthena devs in github: https://github.com/rathena/rathena However, if you want to manually update only the Job values of your item_db, you can try to convert it to sql and then apply a query to change it with the ones in item_db.txt provided by rAthena. You can use Ai4rei's tool to convert your item_db.txt to sql format: nn.ai4rei.net/dev/eatoys/item-db.htm If you want, I can fix your item_db.txt by merging the Job value from item_db.txt of rAthena to the yours.
-
RagEffect Client Plug-In, version 1.0.3.1 - last updated 2014/05/10
Ragno replied to Ai4rei's topic in Client Releases
It is really impressive Ai4rei, you are simply amazing. With this new plugin we can update the /mineffect comand. I confirm you it correctly works in 2012-06-12aRagexe version. However it is not compatible with Harmony (it closes the exe) but it may be because a configuration related to harmony. Anybody can test the effectiveness of this awesome plugin. This is a modification of Lord of Vermilion skill effect to use it with /mineffect command. All you need is to put it in your texture/effect folder and follow the instructions of the plugin to make it work. http://www.mediafire.com/download/r0qouw9arra31tt/lord.str Thanks again Ai4rei! -
I was extracting palettes data from our grf files, when I was checking them I just see some corrupted files (just a very very few ones). I was using then GRF Editor version 1.5.4, I'm using right now the latest version 1.5.6, i have not seen any errores yet, but i will inform you if a see one. Thank you for all of your work!
-
I have a new suggestion to GRF Editor related to md5 calc feature. Is it possible to calc the md5 of all the files contained in a grf file? It would help a lot to check corrupted grf files and individualice the damaged files.
-
RO Patcher Lite, v4.5.0.1340 - last updated 2024/09/21
Ragno replied to Ai4rei's topic in Client Releases
I have redownloaded it from the webpage, but avast! does not let me uncompress it until I put an exception to the destination extraction folder. -
RO Patcher Lite, v4.5.0.1340 - last updated 2024/09/21
Ragno replied to Ai4rei's topic in Client Releases
Ai4rei, we are experiencing problems about false positive of virus with the rsumerge.exe. At least in Avast Antivirus it detects the virus threat "Win32:Evo-gen [susp]" and sends it to quarantine, making it impossible its use. Can you give us some help with this? Thanks a lot!