

Racaae
Members-
Posts
212 -
Joined
-
Last visited
-
Days Won
32
Content Type
Profiles
Forums
Downloads
Jobs Available
Server Database
Third-Party Services
Top Guides
Store
Crowdfunding
Everything posted by Racaae
-
Add in \db\pre-re\skill_db.yml - Id: 10016 Name: GD_GUILD_STORAGE Description: Guild Storage Expansion MaxLevel: 5 Flags: IsGuild: true
-
Storage now needs guild skill to open. Add in /db/pre-re/guild_skill_tree.yml - Id: GD_GUILD_STORAGE MaxLevel: 5 Required: - Id: GD_EMERGENCYCALL Level: 1 - Id: GD_EXTENSION Level: 10 - Id: GD_SOULCOLD Level: 1 - Id: GD_HAWKEYES Level: 1
-
Hi, You need to open each file and look for the lines with getexp. Then change the values according to the wiki if they are different. getexp <base exp>, <job exp>; Some Monster Hunting quests are missing, I suggest you to copy other NPC and change the text and values. Missing: Medusa, Lava Golem and Deleter. There's no Towns Bounty Boards in the folder. You can look at scripts from other people and see if you like:
-
ID,AegisName,Name,Type,Buy,Sell,Weight,ATK[:MATK],DEF,Range,Slots,Job,Class,Gender,Loc,wLV,eLV[:maxLevel],Refineable,View,{ Script },{ OnEquip_Script },{ OnUnequip_Script } The effect goes on the Script area, not on the OnEquip_Script. Example: 50000,LBRO,LBRO,4,0,,10,,0,,0,0xFFFFFFFF,63,2,1024,,0,1,5000,{ bonus bMaxHP,300; bonus bMaxSP,50; },{},{}
-
Disable the two scripts in npc/re/scripts_athena.conf https://github.com/rathena/rathena/blob/master/npc/re/scripts_athena.conf#L101-L102
-
Hi. You need to set the array with IDs before using the conditional. You can use inarray to check if the monster killed ID is in the array. //Only monsters in the given array if ( inarray(.@monster_list, killedrid) > -1) //Only monsters who give MvP exp if ( getmonsterinfo( killedrid, MOB_MVPEXP) ) //Or both if ( inarray(.@monster_list, killedrid) > -1 || getmonsterinfo( killedrid, MOB_MVPEXP) ) Example: - script boss_treasure HIDDEN_WARP_NPC,{ end; OnNPCKillEvent: // add mvp & mini boss mob id's here setarray .@monster_list[0], 1312,1087,1086,1511; if ( inarray(.@monster_list, killedrid) > -1 || getmonsterinfo( killedrid, MOB_MVPEXP) ) { getmapxy(.@map$,.@x,.@y, BL_PC); monster .@map$, rand(.@x,.@x-3),rand(.@y-3,.@y), "--ja--", 1324, 1; } end; }
- 1 reply
-
- 1
-
-
Add or remove IDs in the arrays to fit your server.
-
Find: query_sql "SELECT `code` , `item_amount` , `validation_code` , `status` FROM `donate` ORDER BY `code` DESC", .@codelist$, .@status$, .@validation$; Replace: query_sql "SELECT `code` , `item_amount` , `validation_code` FROM `donate` ORDER BY `code` DESC", .@codelist$, .@status$, .@validation$; Find: getitem .donate_item,@Donation_Code$; Replace: getitem .donate_item, atoi(@Donation_Code$);
-
You need to add the egg itemID and ticket itemID to the arrays. Example. setarray .@tickets, 6116, //Succu_Pet_Coupon 6117, //Imp_Pet_Coupon 6118, //Chung_E_Pet_Coupon 6129, //Ticket_Nightmare 6130, //Ticket_Loli_Ruri 6131, //Ticket_Goblin_Leader 6132, //Ticket_Incubus 6133, //Ticket_Miyabi_Ningyo 6134, //Ticket_Whisper 6135, //Ticket_Wicked_Nymph 6136, //Ticket_Medusa 6137, //Ticket_Stoneshooter 6138, //Ticket_Marionette 6139, //Ticket_Leafcat 6140, //Ticket_Dullahan 6141, //Ticket_Shinobi 6142, //Ticket_Golem 6143, //Ticket_Civil_Servant 6157, //Poring_Ticket 6158, //Drops_Ticket 6159, //Poporing_Ticket 6160, //Lunatic_Ticket 6161, //Picky_Ticket 6162, //Pecopeco_Ticket 6163, //Savage_Baby_Ticket 6164, //Spore_Ticket 6165, //Poison_Spore_Ticket 6166, //Chonchon_Ticket 6167, //Steel_Chonchon_Ticket 6168, //Petit_Ticket 6169, //Deviruchi_Ticket 6170, //Isis_Ticket 6171, //Smokie_Ticket 6172, //Dokebi_Ticket 6173, //Desert_Wolf_B_Ticket 6174, //Yoyo_Ticket 6175, //Sohee_Ticket 6176, //Rocker_Ticket 6177, //Hunter_Fly_Ticket 6178, //Orc_Warrior_Ticket 6179, //Bapho_Jr_Ticket 6180, //Munak_Ticket 6181, //Bongun_Ticket 6182, //Goblin_Ticket 6183, //Hardtack_Ticket 6184, //Zherlthsh_Ticket 6185, //Alice_Ticket 6883, //Pet_Snow_Bunny_Ticket 6884, //Pet_Tikbalang_Ticket XXXX; //MY CUSTOM PET TICKET ID setarray .@eggs, 9055, //Succubus_Egg 9056, //Imp_Egg 9030, //Chung_E_Egg 9054, //Nightmare_Terror_Egg 9042, //Loli_Ruri_Egg 9046, //Goblin_Leader_Egg 9052, //Incubus_Egg 9048, //Miyabi_Ningyo_Egg 9045, //Whisper_Egg 9047, //Wicked_Nymph_Egg 9050, //Medusa_Egg 9051, //Stone_Shooter_Egg 9043, //Marionette_Egg 9041, //Leaf_Cat_Egg 9049, //Dullahan_Egg 9044, //Shinobi_Egg 9053, //Golem_Egg 9040, //Civil_Servant_Egg 9001, //Poring_Egg 9002, //Drops_Egg 9003, //Poporing_Egg 9004, //Lunatic_Egg 9005, //Picky_Egg 9014, //PecoPeco_Egg 9009, //Savage_Bebe_Egg 9012, //Spore_Egg 9013, //Poison_Spore_Egg 9006, //Chonchon_Egg 9007, //Steel_Chonchon_Egg 9022, //Green_Petite_Egg 9023, //Deviruchi_Egg 9021, //Isis_Egg 9015, //Smokie_Egg 9019, //Dokkaebi_Egg 9010, //Baby_Desert_Wolf_Egg 9016, //Yoyo_Egg 9020, //Sohee_Egg 9011, //Rocker_Egg 9008, //Hunter_Fly_Egg 9017, //Orc_Warrior_Egg 9024, //Bapho_Jr 9018, //Munak_Egg 9025, //Bongun_Egg 9029, //Santa_Goblin_Egg 9028, //Rice_Cake_Egg 9026, //Zherlthsh_Egg 9027, //Alice_Egg 9058, //Snow_Rabbit_Egg 9059, //Tikbalang_Pet YYYY; //MY CUSTOM PET EGG ID
-
Oi, você pode encontrar a maioria das atualizações do kRO no divine-pride. Até onde eu sei não existe nada para converter texto em script, então tem que adicionar cada item um por um, lendo o efeito do item e transformando para linguagem da db. (Content updates - Divine Pride (divine-pride.net)
-
R》killed mvp get item 50%
Racaae replied to AOCzxc's topic in Dito mag request ng Script at Database
- script mvpdrop -1,{ OnNPCKillEvent: if (getmonsterinfo(killedrid,MOB_MVPEXP) > 0) { //check if monster is mvp if (rand(1,100) < 50) { //50% chance getitem 607, 1; //got 1 yggdrasil berry announce strcharinfo(0) + " got " + getitemname(607) + " from a MvP!", bc_all; } } end; } -
Add below OnNPCKillEvent: if (mobcount(.map$, strnpcinfo(0)+"::OnBossKill")) end; *mobcount("<map name>","<event label>") This function will count all the monsters on the specified map that have a given event label and return the number or 0 if it can't find any. Your mapannounce is missing some values. *mapannounce "<map name>","<text>",<flag>{,<fontColor>{,<fontType>{,<fontSize>{,<fontAlign>{,<fontY>}}}}}}; This command will work like 'announce' but will only broadcast to characters currently residing on the specified map. So the correct is: mapannounce .map$, "The player "+strcharinfo(0)+" has killed the boss!", bc_map;
-
Vai em src/config/core.h, ache essa parte e tira os // da segunda linha. Recompila o servidor, VIP ativado. /// Uncomment to enable VIP system. //#define VIP_ENABLE conf/login_athena.conf, acha essa parte e muda o 5 para 1. // Which group (ID) will be denoted as the VIP group? // Default: 5 vip_group: 5 Em conf/battle/player.conf tem algumas opções de configuração do vip. Por exemplo: rate de EXP e drop, aumentar limite do armazém. Em conf/groups.conf você configura os comandos e algumas outras coisas disponíveis para os VIPs. Em conf/login_athena.conf também dá para aumentar o número de personagens máximo em contas VIP.
-
Boa noite. Sim, é possível criar um NPC que pede um item em troca de algo. Aí depende do seu sistema VIP se é fácil de criar isso ou não. Aqui tem um exemplo de um NPC que faz exatamente isso, usando o vip oficial do rAthena. prontera,159,170,3 script Moça do VIP 4_F_KAFRA1,{ mes "[" + strnpcinfo(1) + "]"; if (vip_status(VIP_STATUS_ACTIVE)) mes "Olá, você já é VIP."; else { mes "Olá, quer se tornar VIP? São vários benefícios!"; mes "Escolha quanto tempo você quer contratar."; next; for( .@i = 0; .@i < getarraysize( .day ); .@i++ ) .@menu$ += (.day[.@i] + " dia(s):"); .@i = select(.@menu$) - 1; mes "[" + strnpcinfo(1) + "]"; mes "O custo de "+.day[.@i]+" dia(s) de VIP é:"; if (.cash_cost[.@i]) mes "- " + callfunc("F_InsertComma",.cash_cost[.@i]) + " CASH"; if (.cash_cost[.@i] && .item_qtd[.@i]) mes "ou"; if (.item_qtd[.@i]) mes "- " + .item_qtd[.@i]+"x <ITEM>" + getitemname( .item_id ) + "<INFO>" + .item_id + "</INFO></ITEM>"; if (.zeny_cost[.@i] && .item_qtd[.@i] || .cash_cost[.@i] && .zeny_cost[.@i]) mes "ou"; if (.zeny_cost[.@i]) mes "- " + callfunc("F_InsertComma",.zeny_cost[.@i]) + "z"; next; .@menu$ = ""; if (.cash_cost[.@i]) .@menu$ += "Pagar com CASH"; .@menu$ += ":"; if (.item_qtd[.@i]) .@menu$ += "Pagar com "+getitemname(.item_id); .@menu$ += ":"; if (.zeny_cost[.@i]) .@menu$ += "Pagar com zeny"; switch(select(.@menu$ + ":Deixa pra lá.")) { case 1: mes "[" + strnpcinfo(1) + "]"; if ( #CASHPOINTS < .cash_cost[.@i] ) { mes "Você não tem CASH suficiente."; } else { #CASHPOINTS -= .cash_cost[.@i]; vip_time ( .day[.@i] * 1440 ); mes "VIP adquirido com sucesso!"; mes "Você pode usar o comando ^00FF00@tempovip^000000 para ver a duração do seu VIP."; } break; case 2: mes "[" + strnpcinfo(1) + "]"; if ( countitem( .item_id ) < .item_qtd[.@i] ) { mes getitemname( .item_id ) + " insuficiente."; } else { delitem .item_id, .item_qtd[.@i]; vip_time ( .day[.@i] * 1440 ); mes "VIP adquirido com sucesso!"; mes "Você pode usar o comando ^00FF00@tempovip^000000 para ver a duração do seu VIP."; } break; case 3: mes "[" + strnpcinfo(1) + "]"; if ( Zeny < .zeny_cost[.@i] ) { mes "Você não tem Zeny suficiente."; } else { Zeny -= .zeny_cost[.@i]; vip_time ( .day[.@i] * 1440 ); mes "VIP adquirido com sucesso!"; mes "Você pode usar o comando ^00FF00@tempovip^000000 para ver a duração do seu VIP."; } break; case 4: mes "[" + strnpcinfo(1) + "]"; mes "Até mais."; } } close; OnCheck: if (vip_status(VIP_STATUS_ACTIVE)) dispbottom "SISTEMA: Você é VIP até "+ gettimestr("%d/%m/%Y %H:%M",21,vip_status(VIP_STATUS_EXPIRE)); else dispbottom "SISTEMA: Você não é VIP."; end; OnInit: //== CONFIGURAÇÕES ================== setarray .day,7,14,30; //Opções de dias de VIP //setarray .cash_cost,4000,7000,10000; //Custo em Cash de cada opção (use // para desabilitar CASH) //setarray .zeny_cost,10000000,15000000,30000000; //Custo em Zeny de cada opção (use // para desabilitar Zeny) .item_id = 7929; //ID do item usado para troca setarray .item_qtd,3,5,10; //Custo (em item) para cada opção de tempo (use // para desabilitar item) //=================================== bindatcmd("tempovip", strnpcinfo(3)+"::OnCheck"); end; } O refinador 100% é mais simples que os refinadores comuns já que não tem nenhuma chance de falha. Aqui vai o exemplo: prontera,161,170,3 script Refinador Barra Pesada 4_M_REPAIR,{ disable_items; mes "[" + strnpcinfo(1) + "]"; mes "Olá! Eu aceito CASH para refinar seus equipamentos com 100% de chance de sucesso!"; next; if(select("Informações.:Refinar.") == 1) { mes "[" + strnpcinfo(1) + "]"; mes "Eu refino equipamentos ^0000FFaté o nível " + .max + "^000000. O valor em CASH que eu peço depende do nível do equipamento."; mes "Você pode ver a tabela com os preços abaixo."; next; mes "[TABELA DE PREÇOS]"; for( .@i = 0; .@i < .max; .@i++ ) mes "+" + .@i + ">+" + (.@i+1) + " - " + callfunc("F_InsertComma", .cost[.@i]) + " CASH"; close; } mes "[" + strnpcinfo(1) + "]"; mes "Já estou animado!"; mes "Que equipamento você quer refinar?"; next; setarray .@position$[1],"Topo","Armadura","Mão esquerda","Mão direita","Capa","Sapatos","Acessório 1","Acesório 2","Cabeça meio","Cabeça baixo"; setarray .@indices[1], EQI_HEAD_TOP, EQI_ARMOR, EQI_HAND_L, EQI_HAND_R, EQI_GARMENT, EQI_SHOES, EQI_ACC_L, EQI_ACC_R, EQI_HEAD_MID, EQI_HEAD_LOW; for(set .@i,1; .@i<=10; set .@i,.@i+1) set .@menu$, .@menu$+((getequipisequiped(.@indices[.@i]))?"+"+getequiprefinerycnt(.@indices[.@i])+" "+getequipname(.@indices[.@i]):.@position$[.@i]+"- [VAZIO]")+":"; set .@part, .@indices[ select(.@menu$) ]; if (!getequipisequiped(.@part)) { mes "[" + strnpcinfo(1) + "]"; mes "Você deve equipar o item que quer refinar."; close; } if (!getequipisenableref(.@part)) { emotion ET_OTL; mes "[" + strnpcinfo(1) + "]"; mes "Me desculpe."; mes "É impossível refinar esse item."; close; } .@item_refine = getequiprefinerycnt(.@part); //save refinery count if (getequiprefinerycnt(.@part) >= .max) { emotion ET_PROFUSELY_SWEAT; mes "[" + strnpcinfo(1) + "]"; mes "Esse item já é poderoso demais até para mim. É melhor deixar para lá."; close; } mes "[" + strnpcinfo(1) + "]"; mes "Refinar ^006400"+getequipname(.@part)+"^8B4513 vai custar " + callfunc("F_InsertComma", .cost[.@item_refine]) + " CASH."; mes "Devo continuar?"; next; if(select("Não.:Sim.") == 1) { emotion ET_THINK; mes "[" + strnpcinfo(1) + "]"; mes "Oh, você mudou de ideia."; mes "Ok."; mes "Você pode voltar depois."; close; } if (#CASHPOINTS < .cost[.@item_refine]) { mes "[" + strnpcinfo(1) + "]"; mes "Você não tem CASH suficiente."; close; } mes "[" + strnpcinfo(1) + "]"; mes "Ótimo."; mes "Como desejar!"; mes "Eu tenho um jeito especial para refinar..."; mes ".......ka boom!"; specialeffect EF_SUI_EXPLOSION; #CASHPOINTS -= .cost[.@item_refine]; successrefitem .@part; next; emotion ET_DELIGHT; mes "[" + strnpcinfo(1) + "]"; mes "Certo, aqui está~"; mes "Adeus~!"; close; OnInit: //== CONFIGURAÇÕES ================== .max = 15; //refino máximo //custo de cada nv de refinamento setarray .cost,100,100,100,100,500,1000,2000,4000,5000,6000,10000,18000,19000,20000,21000,22000,40000,50000,70000,100000; //=================================== end; }
-
Gold room error and adding limit for 300mins
Racaae replied to Petey Pablo's question in Scripting Support
Hi. Add this after input .@value,0,#GOLDPOINTS; if (.@value == 0) { mes "Exchange canceled."; close; } -
Isso vai de script para script. Você tem que entender como o ranking do script funciona, ou pode compartilhar aqui para eu ver se acho.
-
Maybe the account you are using is of lowel level. set $VIPs_AdminGmLevel,99; Find this line and change the 99 to the level of your account.
-
The menu works just fine here. Did you whisper to "npc:vipsystem8806azwan"?
-
Hi. I didn't test much. The command is @reward.
-
} else if (getskilllv("GD_APPROVAL") != 1) { mes "Official Guild Approval required to enter."; }
- 1 reply
-
- 1
-
-
Here's the full script, try it out.
-
Boa noite, você pode usar o comando hateffect. Ele coloca um efeito continuo no personagem. Exemplo: OnPCLoginEvent: if (verifique aqui se o personagem é o líder do pvp) hateffect(HAT_EF_LEVEL99_SUN_ORANGE, true); end; Nesse exemplo, o efeito LEVEL99_SUN_ORANGE é ativado na hora que o boneco loga. Tem várias "auras" como opção. Você pode ver a lista em src/map/script_constants.hpp
-
Hi. The variables need to be set when the server starts, so you need to add OnInit before the confs and end after. Like this: OnInit: //**************** VIP SYSTEM CONFIGURATION ************************* set $VIPs_SilverAccLevel,1; // Account Level assigned for VIP Silver * set $VIPs_GoldAccLevel,2; // Account Level assigned for VIP Gold * set $VIPs_PlatinumAccLevel,3; // Account Level assigned for VIP Platinum * set $VIPs_SilverExpRate,50; // VIP Silver Exp Boost in % ( 1 = 1% ) * set $VIPs_GoldExpRate,100; // VIP Gold Exp Boost in % ( 1 = 1% ) * set $VIPs_PlatinumExpRate,200000; // VIP Platinum Exp Boost in % ( 1 = 1% ) * set $VIPs_SilverItemRate,10; // VIP Silver Item Drop Boost in % ( 1 = 1% ) * set $VIPs_GoldItemRate,20; // VIP Gold Item Drop Boost in % ( 1 = 1% ) * set $VIPs_PlatinumItemRate,30; // VIP Platinum Item Drop Boost in % ( 1 = 1%)* set $VIPs_AdminGmLevel,99; // Define GM Level enabled to add, list and * // remove VIP entries. Any GM with access le- * // vel equal or higher than this will be able * // to manage VIP Accounts. * // ******************************************************************** end;
-
Hi. You can put this before the autoreset so it goes automatically. I did not test. query_sql "SELECT * FROM ladder_mvp ORDER BY kills DESC LIMIT 1", .@charid, .@name$, .@kill; .@sender$ = "GM Team"; .@title$ = "Top MvP Prize"; .@body$ = "Congratulations " + .@name$ + "! You are the top ranker with " + .@kill + " kills!"; .@zeny = 0; setarray .@mailitem[0], 504, 505; // White Potion, Blue Potion setarray .@mailamount[0], 10, 5; // 10 White Potions, 5 Blue Potions mail .@charid, .@sender$, .@title$, .@body$, .@zeny, .@mailitem, .@mailamount; You can learn more about how to customize the rodex contents reading the file doc/script_commands.txt.