Leaderboard
Popular Content
Showing content with the highest reputation on 02/06/20 in all areas
-
View File Euphy's WoE Controller + @woe command Report all error/bugs in the forum post not in the PM for faster fix, Thanks! By downloading this file, you agree with my Terms of Service: • You are not allowed remove my signature from any of the included files. • You are not allowed claim my work as yours. • I can give you support, but please, do not message me. If you like it, give me a Submitter BeWan Submitted 02/02/2020 Category PvP, GvG, WoE, Battleground Video Content Author Euphy, BeWan1 point
-
Version 1.4
1424 downloads
Report all error/bugs in the forum post not in the PM for faster fix, Thanks! By downloading this file, you agree with my Terms of Service: • You are not allowed remove my signature from any of the included files. • You are not allowed claim my work as yours. • I can give you support, but please, do not message me. If you like it, give me aFree1 point -
Hey guys, i never share things here, but hey, glad to help ~ This is my custom implementation of the Mechanic new costume, and work like this. This new sprite only work when u use the "Bodystyle 1" on the mechanic class, that means we keep the old mechanic costume as "bodystyle 0" In addition to that, i add the Attack animation for 2 genders and the first 3 palettes. In the file i put the new Gravitational Cart as "Cart 3" but, u guys can rename or replace it as you like ~ To make it work, just drag all the rar content on your current grf and it´s done ~ Additional note: Some old clients read the mechanic sprite or palete whit a different name, so, in that case, just replace the name of the files as the name that your client or grf are reading it. mechanic_full_new_stuff.rar1 point
-
Use sql query to ban accounts until 20-02-2020 00:00:00 UPDATE `login` SET `unban_time` = '1582146000' WHERE `account_id` >= 2000002 AND `account_id` <= 2000343; Accounts automaticly unbanned at '1582146000' (Use UnixTime converter)1 point
-
@NKCYBER you can edit the points and the item. prontera,150,150,5 script Bring Shopping 122,{ mes "[Item Trader]"; mes "Hi, "+strcharinfo(0)+"!"; mes "What can I do for you?"; next; switch(select(" > Information: > Trade in Items: > Point shop (^0055FF"+getd(.Points$)+"^000000): > Leave")) { case 1: mes "[Item Trader]"; mes "Do you find that you've got"; mes "useless Items lying around?"; mes "I'll be glad to take them off"; mes "your hands!"; next; mes "[Item Trader]"; mes "I'll give you ^0055FF"+.Points[0]+" Point"+((.Points[0] == 1)?"":"s")+"^000000 for normal Item each"; mes "Item you give me, and"; mes "^0055FF"+.Points[1]+" Points^000000 for Items."; mes "You can trade those points"; mes "for items later on."; mes "How does that sound?"; emotion ET_MONEY; close; case 2: mes "[Item Trader]"; mes "Select the Items you"; mes "want to trade in."; if (.Level) { mes " "; mes "They must be dropped"; mes "by monsters of level"; mes .Level+" and above."; } deletearray @sold_nameid[0],getarraysize(@sold_nameid); callshop "item_shopp",2; npcshopattach "item_shopp"; end; case 3: mes "[Item Trader]"; mes "You have ^0055FF"+getd(.Points$)+"^000000 Point"+((getd(.Points$) == 1)?".":"s."); callshop "item_shopp",1; npcshopattach "item_shopp"; end; case 4: mes "[Item Trader]"; mes "*yawn*"; mes "See you later!"; emotion ET_SLEEPY; close; } OnSellItem: mes "Items to sell:"; mes "-----------------------------------"; for(set .@i,0; .@i<getarraysize(@sold_nameid); set .@i,.@i+1) if (@sold_nameid[.@i] > 4000 && @sold_nameid[.@i] < 4700) { if (.Level) { query_sql("SELECT `LV` FROM `mob_db` WHERE `DropItemid` = "+@sold_nameid[.@i],.@lv); if (.@lv < .Level) { dispbottom getitemname(@sold_nameid[.@i])+" is under the minimum level."; continue; } } set .@Item_id[getarraysize(.@Item_id)], @sold_nameid[.@i]; set .@Item_amt[getarraysize(.@Item_amt)], @sold_quantity[.@i]; set .@item, compare(.ITEM$,""+@sold_nameid[.@i]); mes ((.@item)?" ^FF0000":" ^777777")+@sold_quantity[.@i]+"x "+getitemname(@sold_nameid[.@i])+"^000000"; set .@Item_total, .@Item_total+(@sold_quantity[.@i]*((.@item)?.Points[1]:.Points[0])); } deletearray @sold_nameid[0], getarraysize(@sold_nameid); deletearray @sold_quantity[0], getarraysize(@sold_quantity); if (!.@Item_id) { mes " ^777777(none)^000000"; emotion ET_SWEAT; close; } mes " "; mes "---------- Total: ^0055FF"+.@Item_total+" pt.^000000 -------"; next; if(select(" > ^0055FFComplete trade...^000000: > ^777777Cancel^000000") == 2) { mes "[Item Trader]"; mes "Oh, okay..."; emotion ET_SCRATCH; close; } for(set .@i,0; .@i<getarraysize(.@Item_id); set .@i,.@i+1) delitem .@Item_id[.@i],.@Item_amt[.@i]; setd .Points$, getd(.Points$)+.@Item_total; mes "[Item Trader]"; mes "All done!"; emotion ET_DELIGHT; close; OnBuyItem: for(set .@i,0; .@i<getarraysize(@bought_nameid); set .@i,.@i+1) for(set .@j,0; .@j<getarraysize(.Shop); set .@j,.@j+2) if (@bought_nameid[.@i] == .Shop[.@j]) { set .@cost, .@cost+(.Shop[.@j+1]*@bought_quantity[.@i]); break; } if (.@cost > getd(.Points$)) { mes "[Item Trader]"; mes "You don't have enough Points."; emotion ET_HUK; } else { mes "Items purchased:"; mes "-----------------------------------"; for(set .@i,0; .@i<getarraysize(@bought_nameid); set .@i,.@i+1) { getitem @bought_nameid[.@i], @bought_quantity[.@i]; mes " ^777777"+@bought_quantity[.@i]+"x "+getitemname(@bought_nameid[.@i])+"^000000"; } mes " "; mes "---------- Total: ^0055FF"+.@cost+" pt.^000000 -------"; setd .Points$, getd(.Points$)-.@cost; emotion ET_MONEY; } deletearray @bought_nameid[0], getarraysize(@bought_nameid); deletearray @bought_quantity[0], getarraysize(@bought_quantity); close; OnInit: //waitingroom "Item Trader",0; set .Level,0; // Minimum monster level to trade corresponding Items. set .Points$,"#Item_Points"; // Variable to store points. setarray .Shop[0], // Item Shop items: <ID>,<point cost> 512,10; setarray .Points[0],0,1,1; // Points per <normal Item>,<Item> set .ITEM$, // List of Items. "2504,2311"+ "2403,2103"; npcshopdelitem "item_shopp",909; for(set .@i,0; .@i<getarraysize(.Shop); set .@i,.@i+2) npcshopadditem "item_shopp",.Shop[.@i],.Shop[.@i+1]; end; } - shop item_shopp -1,909:-11 point
-
Debes revisar esto: https://github.com/rathena/rathena/wiki También estaría bueno que revisases la biblia de Judas: https://rathena.org/board/topic/60968-step-by-step-guide-at-how-to-start-a-ro-server/#comment-89389 Luego debes curiosear mucho en la carpeta doc del emulador ?1 point
-
100% working. tested already 12118,Resist_Fire,Fireproof Potion,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_end SC_ARMOR_ELEMENT_FIRE; sc_end SC_ARMOR_ELEMENT_WATER; sc_end SC_ARMOR_ELEMENT_EARTH; sc_end SC_ARMOR_ELEMENT_WIND; sc_start4 SC_ARMOR_ELEMENT_FIRE,1200000,-15,0,20,0; },{},{} 12119,Resist_Water,Coldproof Potion,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_end SC_ARMOR_ELEMENT_FIRE; sc_end SC_ARMOR_ELEMENT_WATER; sc_end SC_ARMOR_ELEMENT_EARTH; sc_end SC_ARMOR_ELEMENT_WIND; sc_start4 SC_ARMOR_ELEMENT_WATER,1200000,20,0,0,-15; },{},{} 12120,Resist_Earth,Earthproof Potion,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_end SC_ARMOR_ELEMENT_FIRE; sc_end SC_ARMOR_ELEMENT_WATER; sc_end SC_ARMOR_ELEMENT_EARTH; sc_end SC_ARMOR_ELEMENT_WIND; sc_start4 SC_ARMOR_ELEMENT_EARTH,1200000,0,20,-15,0; },{},{} 12121,Resist_Wind,Thunderproof Potion,2,2,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_end SC_ARMOR_ELEMENT_FIRE; sc_end SC_ARMOR_ELEMENT_WATER; sc_end SC_ARMOR_ELEMENT_EARTH; sc_end SC_ARMOR_ELEMENT_WIND; sc_start4 SC_ARMOR_ELEMENT_WIND,1200000,0,-15,0,20; },{},{}1 point
-
The topic has been removed because of rAthena staff double standards and hypocrisy things. (rA staff blame me that I made a money on this topic while it's not and never was) All that I did for the last 2.5 years with around ~1k answers from my side is help for free for newbies here, but to rA staff, my topic is a pain in the ass. Sorry guys, but the topic can't be maintained on such a community anymore because of its admins. Bye1 point
-
You can try this script by Sehrentos, it's one of the most configurable enchanters I've seen: //===== rAthena Script ======================================= //= Enchant NPC //===== By: ================================================== //= Sehrentos //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= Enchant player's equipment. Support multiple enchants. //===== Additional Comments: ================================= //= 1.0 Initial script. //= 1.1 Remove enchant option. //= 1.2 Added .max_enchant option. //============================================================ // shop/cashshop/itemshop/pointshop - shop enc_atk -1,501:300; - shop enc_def -1,501:300; - shop enc_stats -1,501:300; prt_in,65,68,4 script Enchant#prt1 4_M_MERCAT1,{ disable_items; switch(select("Attack:Defence:Stats:Remove")) { case 1: @shop_name$ = "enc_atk"; break; case 2: @shop_name$ = "enc_def"; break; case 3: @shop_name$ = "enc_stats"; break; case 4: callsub S_Remove; break; default: end; } callshop @shop_name$, 1; npcshopattach @shop_name$; end; OnInit: // Settings: shop names, currencies, items, prices .max_enchant = 2; // Max amount of enchants 0-4 setarray .shop_name$[0], "enc_atk", "enc_def", "enc_stats"; setarray .shop_currency$[0],"Zeny", "Zeny", "Zeny"; setarray .enc_atk_id[0], 4760, 4761, 4806, 4815, 4814, 4813, 4812, 4826, 4827, 4828, 4829, 4830, 4831, 4819, 4766, 4767,4764,4765, 4807, 4842, 4818, 4817, 4816, 4843, 4844, 4811, 4810, 4809, 4808, 4820, 4821, 4822, 4823, 4824, 4825, 4832, 4833, 4834, 4835, 4836, 4837, 4838, 4839, 4840, 4841; setarray .enc_atk_price[0],10000,20000,30000,10000,20000,30000,40000,50000,60000,70000,80000,90000,100000,10000,20000,30000,5000,7000,10000,20000,10000,20000,30000,40000,50000,10000,20000,30000,40000,50000,60000,70000,80000,90000,100000,10000,20000,30000,40000,50000,60000,70000,80000,90000,100000; setarray .enc_def_id[0], 4805, 4850, 4851, 4852,4762, 4763,4786,4787,4788,4789, 4790,4791,4792,4793, 4794,4795,4796,4797,4798,4799,4800,4801, 4802; setarray .enc_def_price[0],10000,20000,40000,60000,5000,12000,2000,4000,6000,8000,10000,3000,5000,9000,12000,1000,2000,3000,4000,5000,2500,5000,10000; setarray .enc_stats_id[0], 4700,4710,4720,4730,4740,4750, 4701,4711,4721,4731,4741,4751, 4702,4712,4722,4732,4742,4752, 4703,4713,4723,4733,4743,4753, 4704,4714,4724,4734,4744,4754, 4705,4715,4725,4735,4745,4755, 4706,4716,4726,4736,4746,4756, 4707,4717,4727,4737,4747,4757, 4708,4718,4728,4738,4748,4758, 4709, 4719, 4729, 4739, 4749, 4759; setarray .enc_stats_price[0],1500,1500,1500,1500,1500,1500, 2500,2500,2500,2500,2500,2500, 3500,3500,3500,3500,3500,3500, 4500,4500,4500,4500,4500,4500, 5500,5500,5500,5500,5500,5500, 6500,6500,6500,6500,6500,6500, 7500,7500,7500,7500,7500,7500, 8500,8500,8500,8500,8500,8500, 9500,9500,9500,9500,9500,9500, 10500,10500,10500,10500,10500,10500; // Load shop items for(.@i = 0; .@i < getarraysize(.shop_name$); .@i++) { .@npc$ = .shop_name$[.@i]; deletearray .@id[0],getarraysize(.@id); deletearray .@price[0],getarraysize(.@price); copyarray .@id[0], getd("."+.@npc$+"_id[0]"), getarraysize(getd("."+.@npc$+"_id")); copyarray .@price[0], getd("."+.@npc$+"_price[0]"), getarraysize(getd("."+.@npc$+"_price")); npcshopdelitem .@npc$,501;// Remove apple for(.@j = 0; .@j < getarraysize(.@id); .@j++) { npcshopadditem .@npc$, .@id[.@j], .@price[.@j]; } } end; OnSellItem: end; OnBuyItem: .@bought_count = getarraysize(@bought_nameid); if(.@bought_count < 1) end; // Get shop data by @shop_name$ .@shop_index = inarray(.shop_name$[0], @shop_name$); if(.@shop_index == -1 || getarraysize(.shop_name$) < 1) { message strcharinfo(0), "Shop was not found!"; debugmes "Incorrect shop array detected in '"+@shop_name$+"'! FIXME!"; end; } copyarray .@shop_id[0], getd("."+@shop_name$+"_id"), getarraysize(getd("."+@shop_name$+"_id")); copyarray .@shop_price[0], getd("."+@shop_name$+"_price"), getarraysize(getd("."+@shop_name$+"_price")); for(.@i = 0; .@i < .@bought_count; .@i++) { .@index = inarray(.@shop_id[0], @bought_nameid[.@i]); if(.@index == -1) { message strcharinfo(0), "Price was not found!"; debugmes "Incorrect price array detected in '"+@shop_name$+"'! FIXME!"; end; } setarray .@bought_cost[getarraysize(.@bought_cost)],.@shop_price[.@index]*@bought_quantity[.@i]; for (.@j = 0; .@j < @bought_quantity[.@i]; .@j++) { setarray .@enchant[getarraysize(.@enchant)],@bought_nameid[.@i]; } } // Count total cost for(.@i = 0; .@i < .@bought_count; .@i++) { .@total_cost = .@total_cost + .@bought_cost[.@i]; } // Currency check if(.shop_currency$[.@shop_index] == "Zeny" && Zeny < .@total_cost) { message strcharinfo(0), "("+.@total_cost+") Not enough "+.shop_currency$[.@shop_index]+"!"; end; } // Other currency checks... // Select equipment (EQI) mes "[ " + strnpcinfo(1) + " ]"; mes "Please select which equipment you want me to enchant."; .@position = callsub(S_SelectPosition); // Check if position has equipment if(!getequipisequiped(.@position)) { clear; mes "[ " + strnpcinfo(1) + " ]"; mes "You don't have anything equipped there!"; close; } .@item_id = getequipid(.@position); //Equipped item id .@refine = getequiprefinerycnt(.@position); //Equipped refine value .@slots = getitemslots(.@item_id); setarray .@cards[0], getequipcardid(.@position,0), getequipcardid(.@position,1), getequipcardid(.@position,2), getequipcardid(.@position,3); .@cards_count = getarraysize(.@cards); .@enchant_count = getarraysize(.@enchant); /*if(.@enchant_count > .max_enchant) { clear; mes "[ " + strnpcinfo(1) + " ]"; mes "This item has been crafted or produced and cannot be enchanted."; close; }*/ // Check for enabled refinement /*if(!getequipisenableref(.@position)) { clear; mes "[ " + strnpcinfo(1) + " ]"; mes "I don't think I can enchant this item at all."; mes "Sorry..."; close; }*/ // Add all card slots for(.@i = 0; .@i < .@slots; .@i++) { setarray .@item[getarraysize(.@item)], (.@cards[.@i] > 0 ? .@cards[.@i] : -1); } // Add previous enchants for(.@i = .@slots; .@i < .@cards_count; .@i++) { if(.@cards[.@i] > 0) { setarray .@item[getarraysize(.@item)], .@cards[.@i]; } } // Add new enchants for(.@i = 0; .@i < .@enchant_count; .@i++) { setarray .@item[getarraysize(.@item)], .@enchant[.@i]; } // Check for produced/crafted items 254,255 if(.@cards[0] == CARD0_FORGE || .@cards[0] == CARD0_CREATE) { clear; mes "[ " + strnpcinfo(1) + " ]"; mes "This item has been crafted or produced and cannot be enchanted."; close; } // Has card sockets 4 - slots if(.@enchant_count > (.max_enchant - .@slots)) { clear; mes "[ " + strnpcinfo(1) + " ]"; mes "This equipment can hold "+(.max_enchant - .@slots)+" enchant."; close; } // Has free sockets if((.@slots + .@enchant_count) > .max_enchant || getarraysize(.@item) > .max_enchant) { clear; mes "[ " + strnpcinfo(1) + " ]"; mes "This item does not have enough free sockets to enchant."; close; } // Confirm the setup clear; mes "[ " + strnpcinfo(1) + " ]^6E6E6E Setup^000000"; for(.@i = 0; .@i < .@enchant_count; .@i++) { mes "Enchant: "+ getitemname(.@enchant[.@i]); } mes "Equipment: "+ getitemname(getequipid(.@position)); mes "Cost: "+.@total_cost+" "+.shop_currency$[.@shop_index]+"."; if (select("Create enchant:Cancel") != 1) { clear; mes "[ " + strnpcinfo(1) + " ]"; mes "Farewell."; close; } // Create selected enchant clear; mes "[ " + strnpcinfo(1) + " ]^6E6E6E Done^000000"; mes "Here is your enchanted equipment!"; delequip(.@position); specialeffect2 154; if(.shop_currency$[.@shop_index] == "Zeny") { Zeny = Zeny - .@total_cost; } getitem2 .@item_id, 1, 1, .@refine, 0, (.@item[0] > 0 ? .@item[0] : 0), (.@item[1] > 0 ? .@item[1] : 0), (.@item[2] > 0 ? .@item[2] : 0), (.@item[3] > 0 ? .@item[3] : 0); close; S_Remove: // Select equipment (EQI) mes "[ " + strnpcinfo(1) + " ]"; mes "Please select which equipment you want me to work on."; .@position = callsub(S_SelectPosition); // Check if position has equipment if(!getequipisequiped(.@position)) { clear; mes "[ " + strnpcinfo(1) + " ]"; mes "You don't have anything equipped there!"; close; } .@item_id = getequipid(.@position); //Equipped item id .@refine = getequiprefinerycnt(.@position); //Equipped refine value .@slots = getitemslots(.@item_id); setarray .@cards[0], getequipcardid(.@position,0), getequipcardid(.@position,1), getequipcardid(.@position,2), getequipcardid(.@position,3); .@cards_count = getarraysize(.@cards); .@enchant_count = getarraysize(.@enchant); // Create selected item clear; mes "[ " + strnpcinfo(1) + " ]^6E6E6E Done^000000"; mes "Here is your equipment back!"; delequip(.@position); specialeffect2 169; getitem2 .@item_id, 1, 1, .@refine, 0,0,0,0,0; for(.@i=0; .@i<.@slots; .@i++) { if(.@cards[.@i] > 0) getitem .@cards[.@i], 1; } close; S_SelectPosition: setarray .@indices[1], EQI_HEAD_TOP, EQI_HEAD_MID, EQI_HEAD_LOW, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_L, EQI_ACC_R; setarray .@position$[1], "Top", "Mid", "Low", "Armor", "Left Hand", "Right Hand", "Garment", "Shoes", "Accessory L", "Accessory R"; setarray .@option[1], 1, 1, 1, 1, 1, 1, 1, 1, 1, 1; // 1=allow, 0=deny for(.@i=1; .@i<getarraysize(.@indices); .@i++) { if(.@option[.@i] && getequipisequiped(.@indices[.@i])) { .@menu$ = .@menu$ + .@position$[.@i] + "-[" + getequipname(.@indices[.@i]) + "]"; } .@menu$ = .@menu$ + ":"; } .@part = .@indices[select(.@menu$)]; return .@part; }1 point
-
Version 2.2.0
40793 downloads
Third Job Costumes + New Classes The Correction With the advent of jRO releasing new Job Costumes, and also, the new classes from the Taekwon branch, many of server owners want to replace the vanilla sprites or even, implement the bodystyle system. But, there's a catch! Originally jRO, and now, even kRO spriters, have made it completely off of the default pattern of palette. In a classic example, you can notice the pattern of the RO palettes. What matters is the position of the colours, as an example, for all jobs, the white-ish tones will be always on the same row, so we can use it to create custom palettes. See how it works: But jRO didn't follow the classic pattern, making it incompatible with custom palettes (@Kamishi ones included). So, I edited frame by frame of each job sprite, of each gender, mounted or not, correcting them, converting them in a way so many of the previously created palettes will work. This package includes: Alternate Outfits: Alternate Royal Guard M/F + Gryffon Battlemount + Lion Mount Alternate Ranger M/F + Warg Battlemount + Ostrich Mount Alternate Minstrel/Wanderer + Ostrich Mount Alternate ArchBishop M/F + Alpaca Mount Alternate Warlock M/F + Fox Mount Alternate Mechanic M/F + Savage Mount Alternate Genetic M/F + Savage Mount Alternate Guillotine Cross M/F + Hyena Mount Alternate Shadow Chaser M/F + Hyena Mount Alternate Sorcerer M/F + Fox Mount Alternate Sura M/F + Alpaca Mount Alternate Rune Knight M/F + Dragon Battlemount + Lion Mount New Classes Star Emperor M/F + Wolf Mount Soul Reaper M/F + Wolf Mount As requested by @Emistry, I also added an extra, making it more compatible to default palettes: Kagerou/Oboro + Frog Mount Following the another @Emistry's request, all files are now already on GRFs. The previous version had no Cashmount palette included, this one fixes the issue. Only the already released costumes are supported at this moment. The Rune Knight seems to be the last of them, it's over a year from the first release! As a final part of the package, I'm including Classic Palettes for all Alternate Costumes. Enjoy the final product!Free1 point -
Seu desejo é uma ordem! /////////////////////////////////////////////////////// // ___________ _____.__ // \__ ___/__.__.________/ ____\__| ____ ____ // | | < | |\_ __ \ __\| |/ \ / ___\ // | | \___ | | | \/| | | | | \/ /_/ > // |____| / ____| |__| |__| |__|___| /\___ / // \/ Scripts \//_____/ // //===================================================== // Name: Poring Reporter // // Description: // A poring reporter will spread the news about your // server walking randomly throughout Prontera. // // Instructions: // Toggle walking by whispering to NPC! // (To whisper the NPC, simply send a private message // in Ragnarok to "npc:Poring Reporter") // Say "walk" and it'll start walking. // Anything else and it'll stop as soon as possible. //===================================================== /////////////////////////////////////////////////////// prontera,147,190,5 script Poring Reporter 909,{ set .@gm_level, 99; // Necessary GM Level set .@npc_name$, "Poring Reporter"; function NewsList; Begin: if (getgmlevel() < .@gm_level) end; npcstop; if (.walking != 0) npctalk "Stopped walking. Tell me to \"walk\".", "", bc_self; set .walking, 0; clear; mes "[ ^f442a7"+ .@npc_name$ +"^000000 ]"; mes "Hello, master! What are the news today?"; menu "Show news",ShowNews, "Remove news",RemoveNews, "Register news",RegisterNews; ShowNews: clear; mes "[ ^f442a7"+ .@npc_name$ +"^000000 ]"; if (getarraysize(.news$) > 0) { mes "These are the news:"; NewsList; } else { mes "There are no news."; } next; goto Begin; RemoveNews: clear; NewsList; mes "Enter the number of the new you want to remove:"; input .@remove; clear; mes "[ ^f442a7"+ .@npc_name$ +"^000000 ]"; mes "Do you want to remove \"" + .news$[.@remove-1] + "\"?"; if (select("Yes:No") == 1) { .@arrsize = getarraysize(.news$); for (.@i = .@remove-1; .@i < .@arrsize; .@i++) { set .news$[.@i], .news$[.@i+1]; } set .news$[.@arrsize], ""; } goto Begin; RegisterNews: clear; mes "[ ^f442a7"+ .@npc_name$ +"^000000 ]"; mes "What should I spread throughout Prontera?"; input .@new$; clear; mes "[ ^f442a7"+ .@npc_name$ +"^000000 ]"; mes "\"" + .@new$ + "\""; mes "Is that right?"; if (select("Yes:No") == 2) goto RegisterNews; set .news$[getarraysize(.news$)], .@new$; clear; mes "[ ^f442a7"+ .@npc_name$ +"^000000 ]"; mes "Okay!~"; next; goto Begin; function NewsList { for (.@i = 0; .@i < getarraysize(.news$); .@i++) { if (.news$[.@i] != "") mes (.@i+1) + ". \""+ .news$[.@i] +"\""; } } OnWhisperGlobal: if (getgmlevel() < .@gm_level) end; if (@whispervar0$ == "walk") { set .walking, 1; } else { set .walking, 0; } while (.walking == 1) { set .@posxmin, 142; set .@posxmax, 192; set .@posymin, 189; set .@posymax, 217; npcwalkto rand(.@posxmin, .@posxmax), rand(.@posymin, .@posymax); npctalk .news$[rand(getarraysize(.news$))]; sleep 5000; } end; } Para que o poring ande pelo mapa, é necessário ativá-lo enviando uma mensagem para o npc. Para fazer isso, no lugar onde você coloca o nome dos jogadores com quem deseja ter uma conversa privada, coloque o seguinte: "npc:Poring Reporter". Se você mandar a mensagem "walk", ele vai começar a andar ao redor da parte central de Prontera. Você pode alterar as coordenadas mínimas e máximas.1 point
-
make sure you set this option on conf/char_athena.conf set to 1 for "email" // Restrict character deletion by email address or birthdate. // This restricts players from changing the langtype and deleting characters. // Defaults based on client date. // 1: Email address // 2: Birthdate // 3: Email address or Birthdate // IMPORTANT! // - This config only works for clients that send 0x0068 or 0x01fb for delete request. // - Use langtype 1 for newer clients (2013+), to use 0x01fb. // - Clients that are not using 0x0068 or 0x01fb, only use birthdate (YYMMDD) as default. char_del_option: 2 after diff your client with NEMO with "Always use email for character deletion"1 point