Leaderboard
Popular Content
Showing content with the highest reputation on 03/02/21 in all areas
-
View File Caça Toupeiras / Whack-A-Mole [PT-BR]: O script funciona como instância, é um jogo onde o player pode iniciar uma partida sempre que quiser, quanto mais toupeiras ele acertar mais pontos ele acumula, a partida termina quando ele somar o máximo de erros que pode cometer (configurável), o player precisa acertar um mínimo de toupeiras por ciclo, conforme os ciclos aumentam os acertos mínimos também (limitando-se ao máximo de 3), acertar o cachorro contará como erro, os pontos não são acumulativos ou seja, o player entrará par ao rank com o primeiro char que ele fez a partida e será contado por conta, quando ele atingir um valor máximo de pontos na partida que supera o do seu rank anterior ele atualiza, o rank reseta todo o domingo as 12h e converte os pontos para usar na loja da toupeira. Cred: Tio Akima (criador do mapa) Cred: Frost (guia add custom npc) [ENG]: The script works as an instance, it is a game where the player can start a game whenever he wants, the more moles he hits the more points he accumulates, the game ends when he adds up the maximum mistakes he can make (configurable), the player needs hitting a minimum of moles per cycle, as the cycles increase the minimum hits as well (limited to a maximum of 3), hitting the dog will count as an error, the points are not cumulative ie the player will enter the rank with the first char he made the match and will be counted on account, when he reaches a maximum point value in the match that exceeds that of his previous rank he updates, the rank resets every Sunday at 12pm and converts the points to use in the mole shop . NOTE: Perhaps the translation was not the best, so you can send a suggestion that I will be correcting. Cred: Tio Akima (map creator) Cred: Frost (guide add custom npc) Submitter Hyroshima Submitted 03/01/2021 Category Games, Events, Quests Video https://youtu.be/A_Y_9LxSWt4 Content Author Hyroshima4 points
-
Updated to 1.8.4.0: Added proper support for previewing RSM2 file format up to version 0x203. Enabled animations for RSM2 models. Support translation animations. Support texture animations.3 points
-
Hi everyone; hope you enjoy your weekend ? This is a map I did as an improved version of the original Auch Map by the 2012 ...! The map was originally inspired on a city of this game I loved and close to Ragnarok Online. The city was improved a lot by remaking all the models and making more accurate textures. Like always the idea was to make it have the barroque style feeling of the original. This map contains a main town and a set of fields+dungeons. Hope you like it Auch City - Main Town This is a map I showed on social media for a while, yet not in the forum. I´ve been told I should be more active as I was on the forum and I think I have too ? It has been 5+ years when I made this map; I´m very glad there has been some improvement over the years The nostalgia is reallll!2 points
-
Version 1.0.0
630 downloads
[PT-BR]: O script funciona como instância, é um jogo onde o player pode iniciar uma partida sempre que quiser, quanto mais toupeiras ele acertar mais pontos ele acumula, a partida termina quando ele somar o máximo de erros que pode cometer (configurável), o player precisa acertar um mínimo de toupeiras por ciclo, conforme os ciclos aumentam os acertos mínimos também (limitando-se ao máximo de 3), acertar o cachorro contará como erro, os pontos não são acumulativos ou seja, o player entrará par ao rank com o primeiro char que ele fez a partida e será contado por conta, quando ele atingir um valor máximo de pontos na partida que supera o do seu rank anterior ele atualiza, o rank reseta todo o domingo as 12h e converte os pontos para usar na loja da toupeira. Cred: Tio Akima (criador do mapa) Cred: Frost (guia add custom npc) [ENG]: The script works as an instance, it is a game where the player can start a game whenever he wants, the more moles he hits the more points he accumulates, the game ends when he adds up the maximum mistakes he can make (configurable), the player needs hitting a minimum of moles per cycle, as the cycles increase the minimum hits as well (limited to a maximum of 3), hitting the dog will count as an error, the points are not cumulative ie the player will enter the rank with the first char he made the match and will be counted on account, when he reaches a maximum point value in the match that exceeds that of his previous rank he updates, the rank resets every Sunday at 12pm and converts the points to use in the mole shop . NOTE: Perhaps the translation was not the best, so you can send a suggestion that I will be correcting. Cred: Tio Akima (map creator) Cred: Frost (guide add custom npc)Free2 points -
A whole map dedicated to traders to sell/buy. You can either choose to put NPCs for players to buy all kinds of stuff or let players set up their shops in their own tents. It also includes a little beach island with deckchairs, some shadey/hidden areas that can lead to indoors (for illegal shops? xD) and also walking access on some ships and boats.1 point
-
EDIT 2023: Hello ! it's been a long time ? As some people still looks interested in this, i reuploaded the file, and added some new things. This link contain: - 151 Pokemon Card + Sprite/item/collec for Pokemon Card item - 151 Mob pokemon (ACT need to be reworked though. As i didn't had the motivation to modify it for flying pokemon ? - 5 different types of Balls (Hyperball, Master Ball, Pokéball, Safari Ball, Superball) - Cries from 151 Pokemon And with this, i added: - The item_db for the pokemon items and more (Costumes to enable Santa, Summer, or even an item to @hide when you equip it if you are at least GM lvl 50) - A "Plan", which is an item that display the map of where you are in a cutin. (usefull if you want to make treasure maps or something like that) - A "Spiriteur" NPC, which is a quest to unlock a NPC to Soul Link your character (you need an item https://drive.google.com/file/d/1XrlUNJ-QHkzXydspmD2JtpVGuQ2IiypH/view?usp=share_link If you have any questions, or request, you can contact me on Discord @Varguen#9220 Hope you enjoy, even if it's not the best sprites in the world1 point
-
Pokemon League Map Hi, I'm doing some duel maps. I made a map of yu-gi-oh now i finished a pokemon map The next one will be a map of Naruto. [ ok ] - yugi-oh [ ok ] - pokemon [ ... ] - naruto Didn't see the map of yugi-oh? you can check it out here:1 point
-
Version 1.1
1821 downloads
Description : Players are able to click on the Enchant items to provide custom bonus to the selected equipment. Varies of bonus could be done especially use together with a *getequippedon script command to provide a wide range of bonuses. The current items and bonuses display in the video is just a sample for demo. The origin of the idea come from Diablo and 張阿神. Sample Usage: callfunc("F_UsableEnchantItem", <delete_item_id>, <enchant_item_id>{, <card_index>}); Item Database : Create a custom item for enchant - Id: 501 AegisName: Red_Potion_Enchant_Usable Name: Red Potion Type: DelayConsume Buy: 10 Weight: 70 Script: | callfunc("F_UsableEnchantItem", 501, 909, 3); Create a custom enchant item with special bonuses. - Id: 909 AegisName: Jellopy_Enchant_Item Name: Jellopy Type: Etc Buy: 6 Weight: 10 Flags: BuyingStore: true Script: | .@eqp = getequippedon(); if (.@eqp & EQP_ARMOR) { bonus bVit,100; } if (.@eqp & EQP_HEAD_TOP) { bonus bInt,100; } if (.@eqp & EQP_SHOES) { bonus bAgi,100; } Preview :Free1 point -
1 point
-
1 point
-
Heya, There are multiple approaches for this issue. The first one is "lazy" but it is usually good enough for most people and it is much simpler. You run a script on all players to remove their achievement and then you run a SQL command to remove all achievements. So something along these lines: OnClock0000: // At midnight, everyday donpcevent strnpcinfo(0) + "::OnResetAchievement"; end; OnResetAchievement: donpcevent strnpcinfo(0) + "::OnResetAchievementSub"; query_sql("DELETE FROM `achievement` WHERE `id` = 100"); end; OnResetAchievementSub: addrid 0; achievementremove 100; end; The issue with the above is that the query is ran on the map-server and therefore will lag you depending on the size of your achievement table (the same goes for any query ran on the map-server). This solution is also not "atomic" and can fail in some situations where a player is logging on while the script is being ran, and the char-server has already sent the achievement data and hasn't been received by the player yet. The chances of the last scenario happening are very low though. An alternative would be to keep the achievements in the database, but only delete them when the player logs on. You would still have to delete them on the online players though. So something like this: OnClock0000: donpcevent strnpcinfo(0) + "::OnResetAchievement"; $ach_100_start = gettimetick(2); end; OnPCLoginEvent: .@aid = 100; .@res = achievementinfo(.@aid, ACHIEVEINFO_COMPLETEDATE); if (.@res > 0 && .@res < $ach_100_start) { achievementremove 100; } end; OnResetAchievement: addrid 0; achievementremove 100; end; The above works relatively well. It doesn't have concurrency issues, it won't lag your server either. The downside there would be that the achievements would still exist in your sql table. Also, both of the above need to attach a script to the player, which will cause issues if a player is already talking to a NPC (it will terminate the previously ran script). The proper solution would be to run the SQL query on the char-server instead using an inter-server packet (or using a SQL thread, if that PR is merged). Then you would run a custom script command that iterates through online players and removes their achievement with achievement_remove without ever attaching a script to them. The last solution is the best and will work in all scenarios with no in-game lag. Though it is somewhat annoying to code I suppose. (Those scripts were not tested, so you may have to fix the errors yourself.)1 point
-
1 point
-
1 point
-
Excellent Event, excellent script! thanks for the contribution Hyro 0/1 point
-
Just wanna say thank you for the released! it reminds me of my childhood back in 80's ? Small Correction from your Guide.txt npcidentity.lub JT_TOUPEIRA = 10500, READ-ME1 point
-
1 point
-
1 point
-
It is a bit strange to collect vending info by using a bot. Gladius is right. It is better to find an alternative way. Gepard Shield doesn't have a function that allows using the unprotected game client/bot. He couldn't contact me, because the PM inbox was full. I don't support Gepard Shield on the forum's PM and don't check it every day. All my customers use Skype account for it. Customers receive replies every day. If you have some problems with contacting me on Skype, you can send me a PM on the forum. I already removed some PMs.1 point
-
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.1 point
-
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; }1 point
-
Updated to 1.8.3.7: Fixed an issue where directory/uncompressed data files would not be visible when loading a GPF file.1 point
-
1 point
-
Welcome .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•. mystvil Please rate it if the map is good enough ~~ This map can be downloaded here https://rathena.org/board/files/file/4487-w0w_map_collection/1 point
-
1 point