lLoydxx 0 Posted February 9 (edited) Boa noite galera, gostaria de saber se alguém pode me informar se tem como criar um npc que troca moedas por 30 dias VIP, e outro refinador 100% que cobre cash ao refinar o item. Edited February 13 by lLoydxx Quote Share this post Link to post Share on other sites
0 Racaae 10 Posted February 14 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( [email protected]i = 0; [email protected]i < getarraysize( .day ); [email protected]i++ ) [email protected]menu$ += (.day[[email protected]i] + " dia(s):"); [email protected]i = select([email protected]menu$) - 1; mes "[" + strnpcinfo(1) + "]"; mes "O custo de "+.day[[email protected]i]+" dia(s) de VIP é:"; if (.cash_cost[[email protected]i]) mes "- " + callfunc("F_InsertComma",.cash_cost[[email protected]i]) + " CASH"; if (.cash_cost[[email protected]i] && .item_qtd[[email protected]i]) mes "ou"; if (.item_qtd[[email protected]i]) mes "- " + .item_qtd[[email protected]i]+"x <ITEM>" + getitemname( .item_id ) + "<INFO>" + .item_id + "</INFO></ITEM>"; if (.zeny_cost[[email protected]i] && .item_qtd[[email protected]i] || .cash_cost[[email protected]i] && .zeny_cost[[email protected]i]) mes "ou"; if (.zeny_cost[[email protected]i]) mes "- " + callfunc("F_InsertComma",.zeny_cost[[email protected]i]) + "z"; next; [email protected]menu$ = ""; if (.cash_cost[[email protected]i]) [email protected]menu$ += "Pagar com CASH"; [email protected]menu$ += ":"; if (.item_qtd[[email protected]i]) [email protected]menu$ += "Pagar com "+getitemname(.item_id); [email protected]menu$ += ":"; if (.zeny_cost[[email protected]i]) [email protected]menu$ += "Pagar com zeny"; switch(select([email protected]menu$ + ":Deixa pra lá.")) { case 1: mes "[" + strnpcinfo(1) + "]"; if ( #CASHPOINTS < .cash_cost[[email protected]i] ) { mes "Você não tem CASH suficiente."; } else { #CASHPOINTS -= .cash_cost[[email protected]i]; vip_time ( .day[[email protected]i] * 1440 ); mes "VIP adquirido com sucesso!"; mes "Você pode usar o comando ^[email protected]^000000 para ver a duração do seu VIP."; } break; case 2: mes "[" + strnpcinfo(1) + "]"; if ( countitem( .item_id ) < .item_qtd[[email protected]i] ) { mes getitemname( .item_id ) + " insuficiente."; } else { delitem .item_id, .item_qtd[[email protected]i]; vip_time ( .day[[email protected]i] * 1440 ); mes "VIP adquirido com sucesso!"; mes "Você pode usar o comando ^[email protected]^000000 para ver a duração do seu VIP."; } break; case 3: mes "[" + strnpcinfo(1) + "]"; if ( Zeny < .zeny_cost[[email protected]i] ) { mes "Você não tem Zeny suficiente."; } else { Zeny -= .zeny_cost[[email protected]i]; vip_time ( .day[[email protected]i] * 1440 ); mes "VIP adquirido com sucesso!"; mes "Você pode usar o comando ^[email protected]^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( [email protected]i = 0; [email protected]i < .max; [email protected]i++ ) mes "+" + [email protected]i + ">+" + ([email protected]i+1) + " - " + callfunc("F_InsertComma", .cost[[email protected]i]) + " CASH"; close; } mes "[" + strnpcinfo(1) + "]"; mes "Já estou animado!"; mes "Que equipamento você quer refinar?"; next; setarray [email protected]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 [email protected]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 [email protected]i,1; [email protected]i<=10; set [email protected]i,[email protected]i+1) set [email protected]menu$, [email protected]menu$+((getequipisequiped([email protected]indices[[email protected]i]))?"+"+getequiprefinerycnt([email protected]indices[[email protected]i])+" "+getequipname([email protected]indices[[email protected]i]):[email protected]position$[[email protected]i]+"- [VAZIO]")+":"; set [email protected]part, [email protected]indices[ select([email protected]menu$) ]; if (!getequipisequiped([email protected]part)) { mes "[" + strnpcinfo(1) + "]"; mes "Você deve equipar o item que quer refinar."; close; } if (!getequipisenableref([email protected]part)) { emotion ET_OTL; mes "[" + strnpcinfo(1) + "]"; mes "Me desculpe."; mes "É impossível refinar esse item."; close; } [email protected]item_refine = getequiprefinerycnt([email protected]part); //save refinery count if (getequiprefinerycnt([email protected]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([email protected]part)+"^8B4513 vai custar " + callfunc("F_InsertComma", .cost[[email protected]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[[email protected]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[[email protected]item_refine]; successrefitem [email protected]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; } 1 1 Quote Share this post Link to post Share on other sites
0 lLoydxx 0 Posted February 14 3 hours ago, Racaae said: 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( [email protected]i = 0; [email protected]i < getarraysize( .day ); [email protected]i++ ) [email protected]menu$ += (.day[[email protected]i] + " dia(s):"); [email protected]i = select([email protected]menu$) - 1; mes "[" + strnpcinfo(1) + "]"; mes "O custo de "+.day[[email protected]i]+" dia(s) de VIP é:"; if (.cash_cost[[email protected]i]) mes "- " + callfunc("F_InsertComma",.cash_cost[[email protected]i]) + " CASH"; if (.cash_cost[[email protected]i] && .item_qtd[[email protected]i]) mes "ou"; if (.item_qtd[[email protected]i]) mes "- " + .item_qtd[[email protected]i]+"x <ITEM>" + getitemname( .item_id ) + "<INFO>" + .item_id + "</INFO></ITEM>"; if (.zeny_cost[[email protected]i] && .item_qtd[[email protected]i] || .cash_cost[[email protected]i] && .zeny_cost[[email protected]i]) mes "ou"; if (.zeny_cost[[email protected]i]) mes "- " + callfunc("F_InsertComma",.zeny_cost[[email protected]i]) + "z"; next; [email protected]menu$ = ""; if (.cash_cost[[email protected]i]) [email protected]menu$ += "Pagar com CASH"; [email protected]menu$ += ":"; if (.item_qtd[[email protected]i]) [email protected]menu$ += "Pagar com "+getitemname(.item_id); [email protected]menu$ += ":"; if (.zeny_cost[[email protected]i]) [email protected]menu$ += "Pagar com zeny"; switch(select([email protected]menu$ + ":Deixa pra lá.")) { case 1: mes "[" + strnpcinfo(1) + "]"; if ( #CASHPOINTS < .cash_cost[[email protected]i] ) { mes "Você não tem CASH suficiente."; } else { #CASHPOINTS -= .cash_cost[[email protected]i]; vip_time ( .day[[email protected]i] * 1440 ); mes "VIP adquirido com sucesso!"; mes "Você pode usar o comando ^[email protected]^000000 para ver a duração do seu VIP."; } break; case 2: mes "[" + strnpcinfo(1) + "]"; if ( countitem( .item_id ) < .item_qtd[[email protected]i] ) { mes getitemname( .item_id ) + " insuficiente."; } else { delitem .item_id, .item_qtd[[email protected]i]; vip_time ( .day[[email protected]i] * 1440 ); mes "VIP adquirido com sucesso!"; mes "Você pode usar o comando ^[email protected]^000000 para ver a duração do seu VIP."; } break; case 3: mes "[" + strnpcinfo(1) + "]"; if ( Zeny < .zeny_cost[[email protected]i] ) { mes "Você não tem Zeny suficiente."; } else { Zeny -= .zeny_cost[[email protected]i]; vip_time ( .day[[email protected]i] * 1440 ); mes "VIP adquirido com sucesso!"; mes "Você pode usar o comando ^[email protected]^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( [email protected]i = 0; [email protected]i < .max; [email protected]i++ ) mes "+" + [email protected]i + ">+" + ([email protected]i+1) + " - " + callfunc("F_InsertComma", .cost[[email protected]i]) + " CASH"; close; } mes "[" + strnpcinfo(1) + "]"; mes "Já estou animado!"; mes "Que equipamento você quer refinar?"; next; setarray [email protected]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 [email protected]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 [email protected]i,1; [email protected]i<=10; set [email protected]i,[email protected]i+1) set [email protected]menu$, [email protected]menu$+((getequipisequiped([email protected]indices[[email protected]i]))?"+"+getequiprefinerycnt([email protected]indices[[email protected]i])+" "+getequipname([email protected]indices[[email protected]i]):[email protected]position$[[email protected]i]+"- [VAZIO]")+":"; set [email protected]part, [email protected]indices[ select([email protected]menu$) ]; if (!getequipisequiped([email protected]part)) { mes "[" + strnpcinfo(1) + "]"; mes "Você deve equipar o item que quer refinar."; close; } if (!getequipisenableref([email protected]part)) { emotion ET_OTL; mes "[" + strnpcinfo(1) + "]"; mes "Me desculpe."; mes "É impossível refinar esse item."; close; } [email protected]item_refine = getequiprefinerycnt([email protected]part); //save refinery count if (getequiprefinerycnt([email protected]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([email protected]part)+"^8B4513 vai custar " + callfunc("F_InsertComma", .cost[[email protected]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[[email protected]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[[email protected]item_refine]; successrefitem [email protected]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; } Poderia me informar como faço para usar o sistema vip do próprio emulador? Onde ativo e onde posso por para vip ser do grupo 1? Refine tá 200% meu muito obrigado! Quote Share this post Link to post Share on other sites
0 Racaae 10 Posted February 15 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. 2 Quote Share this post Link to post Share on other sites
0 lLoydxx 0 Posted February 15 1 hour ago, Racaae said: 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. Obrigado MESTRE! Fico te devendo uma não recuse em cobrar. Quote Share this post Link to post Share on other sites
Boa noite galera, gostaria de saber se alguém pode me informar se tem como criar um npc que troca moedas por 30 dias VIP, e outro refinador 100% que cobre cash ao refinar o item.
Edited by lLoydxxShare this post
Link to post
Share on other sites