Leaderboard
Popular Content
Showing content with the highest reputation on 07/21/18 in all areas
-
1 pointHello guys, i'm making a custom hp bar system for mob units. The command show the HP of the mob for all players in the map. I am using the cutin command, the problem is that I do not think so many files are necessary. In the case 1 image for each percentage of hp I would like your opnion and help to improve this system and make it lighter. Test yourselves :). HP Bar System: payon,147,229,4 script Test#HPbar 1_F_MARIA,{ if (.HP_Bar == 0) { .HP_Bar = 1; .mobGID = monster ("payon",148,226,"[T] HP Test",POPORING,1,strnpcinfo(0)+"::OnDie"); setunitdata .mobGID,UDT_MAXHP,4000; setunitdata .mobGID,UDT_HP,4000; .@count = getunits(BL_PC, .@units, false, "payon"); for (.@i = 0; .@i < .@count; .@i++) addtimer(0,strnpcinfo(0)+"::OnHPBar", .@units[.@i]); } end; OnDie: .HP_Bar = 0; end; OnHPBar: .U_MAXHP = getunitdata (.mobGID,UDT_MAXHP); while (.HP_Bar != 0) { .U_HP = getunitdata (.mobGID,UDT_HP); .P_HP = (.U_HP*100)/.U_MAXHP; cutin(""+.P_HP+"", 1); sleep2 100; } cutin("0", 1); sleep2 5000; //Delay to hide HP Bar cutin("", 255); end; } Donwload of the data folder files: HP Bar System (2018-06-26).rar
-
1 pointThere's a packet called ZC_MAPPROPERTY_R2 that has a bit field and one of the bit entry's is called SUNMOONSTAR_MIRACLE. That could be related to why the message appears. I don't think this will affect if miracle will work or not since its just a way for the client to know and tell you if your on a map where miracle is not allowed to activate. Server side will still activate it by chance unless a map flag is set to disable it. Don't know if Hercules has support for that flag yet. Note To Devs: A bit old topic but im bumping so we can check into this to make sure it works properly. If no map flag support for this exists yet, maybe set the bit to a fixed setting to make the message not appear until one is supported.
-
1 point
[Guia e orientação] Criando habilidades. PT-BR
ColdDiablo reacted to Like it~* for a post in a topic
Criando habilidades ou clonando-as Introdução Uma grande área onde os jogadores têm dificuldade é adicionar novas habilidades para a fonte e o cliente. Abaixo será documentado como implementar essas novas habilidades. A habilidade A habilidade que estaremos trabalhando é simples. Nome: Earth Bolt Level Máx: 10 Tipo: Ativa Custo de SP: 20 + 5*SkillLV Alvo: 1 inimigo Tempo de conjuração: 2 seg Delay: 1 seg Duração: Instantânea Descrição: Causa dano mágico de elemento terra ao inimigo, conforme level da habilidade, a 150% MATK por hit. Basicamente, essa habilidade deve atingir 1 inimigo e lidar com 10 hits de 150% MATK, propriedade elemental da Terra e deve ser baseada em dano mágico. Abra /src/map/skill.h Role para baixo até encontrar EL_STONE_HAMMER, EL_ROCK_CRUSHER, EL_ROCK_CRUSHER_ATK, EL_STONE_RAIN, Depois daqui é onde nós adicionamos quaisquer habilidades adicionais. É melhor dar às habilidades um ID personalizado para começar. Então, vamos adicionar a nossa habilidade "Earth Bolt". Depois disso, adicione MG_EARTHBOLT = 8443, MG_ definição significa "Mago", você vai trabalhar para fora as siglas como você percorrer as habilidades. Definimos a base da habilidade. Como você pode ver, o id de habilidade é definido como '8443' desde Stone Elemental's Stone Rain é definido como 8442 (e é o última habilidade de jogador acessível). Abra /src/map/skill.c Esse arquivo é onde definimos as implementações de habilidades reais. Para habilidades de alvo único, todo o processamento dessa habilidade irá em skill_castend_damage_id (para habilidades prejudiciais) ou skill_castend_nodamage_id (para skills que não causam danos). Habilidades baseadas em mágica ou mágia. Como o Earth Bolt é baseado em danos, encontre a função skill_castend_damage_id e localize: case AB_RENOVATIO: case AB_HIGHNESSHEAL: case AB_DUPLELIGHT_MAGIC: case WM_METALICSOUND: case MH_ERASER_CUTTER: case KO_KAIHOU: A razão pela qual estaremos colocando a case para Earth Bolt aqui é porque: skill->attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag); A definição BF_MAGIC significa que a habilidade é baseada em magia e deve ser calculada sob cálculos de batalha mágica. Assim, após a case NJ_HUUJIN adicionar: case MG_EARTHBOLT: Habilidades baseadas em armas No caso de querer adicionar uma habilidade que é baseada em Arma, em vez de Magia, encontre: case WM_GREAT_ECHO: case GN_SLINGITEM_RANGEMELEEATK: case KO_JYUMONJIKIRI: case KO_SETSUDAN: case GC_DARKCROW: case LG_OVERBRAND_BRANDISH: case LG_OVERBRAND: E adicione a case depois disso. Se quiséssemos que o Earth Bolt fosse baseado em armas, ficaria assim: case WM_GREAT_ECHO: case GN_SLINGITEM_RANGEMELEEATK: case KO_JYUMONJIKIRI: case KO_SETSUDAN: case GC_DARKCROW: case LG_OVERBRAND_BRANDISH: case LG_OVERBRAND: case MG_EARTHBOLT: No entanto, vamos manter a função Magic em vez disso. Abra /src/map/battle.c Nesta função, todos os cálculos de danos principais são realizados. E em funções separadas, as % modificadoras para as habilidades são armazenados. Portanto, para os nossos danos de 150%, adicionamos o extra de 50% (já que 100% é o padrão) na função apropriada. Ataques baseado em mágica Para ataques baseados em Magia, os modificadores são encontrados em battle_calc_magic_attack. Basta encontrar: case NPC_EARTHQUAKE: skillratio += 100 +100*skill_lv +100*(skill_lv/2); break; E adicione o modificador de danos abaixo. Como Earth Bolt é baseado em magia, nós adicionaremos-a aqui. case MG_EARTHBOLT: skillratio += 50; break; Isso agora significa que o Earth Bolt causará dano mágico de 150% MATK. Átaques baseado em armas Para ataques baseados em armas, os modificadores são encontrados em battle_calc_weapon_attack. Basta encontrar: case NPC_VAMPIRE_GIFT: skillratio += ((skill_lv-1)%5+1)*100; break; E adicione seu modificador de dano lá. Por exemplo, se o Earth Bolt fosse baseado em Weapon, acrescentaríamos: case MG_EARTHBOLT: skillratio += 50; break; O + = 50 significa simplesmente "Adicionar 50% ao 100%" para danos de ATK de 150%. Suporte a banco de dados de habilidades Tecnicamente falando, a base da habilidade está agora correta. Claro, se você quiser implementar habilidades mais complexas, há muito mais para isso. A seção separada será criada no futuro para isso. Mas, por enquanto, precisamos implementar as entradas do banco de dados de habilidades. Os arquivos abaixo podem ser encontrados em db / (pre / re) /. Apenas um de ambos (pre / re) precisa ser atualizado, é o qual você usa em seu servidor. Nessa parte é sempre aconselhável que você tenha alguma habilidade escolhida para se utilizar como base, pois facilitará muito a criação e/ou clonagem de sua habilidade. Aqui há diferenças, então dependendo do emulador usado, cada forma será de um jeito, caso o seu emulador seja alguns dos abaixos, continue. Caso não, pule para a parte: ** p/ Hercules. ** p/ rAthena, brAthena, Cronus. Skill_db.txt Para a nossa habilidade Earth Bolt, podemos agora digitar o seguinte: Estrutura: 8443,5,8,1,2,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic, 0, MG_EARTHBOLT, Earth Bolt Isso define que: Earth Bolt tem um intervalo de 5 células, bate várias vezes, é elemento da Terra e alvos 1 inimigo. Ele pode ser interrompido, e é de dano de tipo mágico. A quantidade de acessos aumenta em 1 em cada nível, com um nível máximo de 10. Skill_cast_db.txt Para a nossa habilidade Earth Bolt, podemos agora digitar o seguinte: Estrutura: 8443,2000,1,000,0,0,0 Isso define que: Earth Bolt tem um segundo tempo de ligação e um tempo de atraso de 1 segundo. Não há atraso de caminhada após o lançamento. Skill_require_db.txt Para o nosso Earth Bolt, podemos agora digitar o seguinte: Estrutura: 8443,0,0,25: 30: 35: 40: 45: 50: 55: 60: 65: 70,0,0,0,0,0,0,0,0,0,0,0,0, 0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 Isso define que: Earth Bolt requer 25 SP no nível 1, 30 SP no nível 2 .. 70 SP no nível 10. Pode ser lançado com qualquer arma, não requer nenhum estado e não requer nenhum item para ser consumido. =========================================================================== ** p/ Hercules. Skill_db.txt =========================================================================== Skill_tree.txt Esta parte do banco de dados não é necessária se não for lida por uma classe. No entanto, se você quiser que uma classe aprenda uma habilidade, você deve fazer uma entrada em skill_tree.txt. Um exemplo abaixo: MG_EARTHBOLT: { MaxLevel: 10 MG_FIREBOLT: 5 MG_LIGHTNINGBOLT: 5 } Isso define que: Earth Bolt pode ser aprendido por Mago, tem um nível máximo de 10 (para esta classe), e requer habilidade MG_FIREBOLT no nível 5 e habilidade MG_LIGHTNINGBOLT no nível 5. Tecnicamente, estas são as partes geralmente utilizas com arquivos de banco de dados de habilidade. Há mais, mas isso ficará pra vocês explorarem. Arquivos .lua e .lub As seguintes implementações estão de acordo com a Revisão 228 do Projeto Lua (2012-05-23). A implementação é diferente entre muitas versões de cliente, mas geralmente há 2 implementações: Sem arquivos skillinfoz Em data/lua files/skillinfo/skilltreeview.lua encontre: {"MG_FIREWALL", 18; Pos = 19, MaxLv = 10, NeedSkillList = {6, 12}} Adicione a baixo: {"MG_EARTHBOLT",8443; Pos = 20, MaxLv = 10, NeedSkillList = {19,20}} Com arquivos skillinfoz Em skillid.lua encontre: ECLAGE_RECALL = 3035, Depois adicione: MG_EARTHBOLT = 8443, in data/lua files/skillinfo/skilldescript.lua localize: [SKID.MG_THUNDERSTORM] = { "Thunder Storm", "Max Level:^777777 10 ^000000", "Type:^777777 Offensive ^000000", "SP Cost:^777777 24 + 5*SkillLV ^000000", "Target:^777777 cell ^000000", "Range:^777777 9 cells ^000000", "Cast Time:^777777 1*SkillLV sec ^000000", "Cool Down:^777777 2 sec ^000000", "Duration:^777777 0.2*SkillLV sec ^000000", "Effect:^777777 Hits every Enemy in a 5x5 area around the targeted cell with 1 Wind Element Bolt per level at a rate of 1 bolt every 0.2 seconds. Each bolt does 0.8*MATK Wind element damage. ^000000", "[LV 1]^777777 1 Bolt ^000000", "[LV 2]^777777 2 Bolts ^000000", "[LV 3]^777777 3 Bolts ^000000", "[LV 4]^777777 4 Bolts ^000000", "[LV 5]^777777 5 Bolts ^000000", "[LV 6]^777777 6 Bolts ^000000", "[LV 7]^777777 7 Bolts ^000000", "[LV 8]^777777 8 Bolts ^000000", "[LV 9]^777777 9 Bolts ^000000", "[LV 10]^777777 10 Bolts ^000000", }, Depois adicione: [SKID.MG_EARTHBOLT] = { "Earth Bolt", "Max Level:^777777 10 ^000000" "Type:^77777 Active ^000000" "SP Cost:^777777 20 + 5*SkillLV ^000000" "Target:^777777 1 Enemy ^000000" "Cast Time:^777777 2 sec ^000000" "Cool Down:^777777 1 sec ^000000" "Duration:^777777 Instant ^000000" "Effect: ^777777 Deals SkillLV bolts of Earth magic damage to one enemy, at 150% MATK per hit.^000000", }, skilltreeview.lua mude: [JOBID.JT_MAGICIAN] = { [1] = SKID.MG_STONECURSE, [2] = SKID.MG_COLDBOLT, [3] = SKID.MG_LIGHTNINGBOLT, [4] = SKID.MG_NAPALMBEAT, [5] = SKID.MG_FIREBOLT, [6] = SKID.MG_SIGHT, [8] = SKID.MG_SRECOVERY, [9] = SKID.MG_FROSTDIVER, [10] = SKID.MG_THUNDERSTORM, [11] = SKID.MG_SOULSTRIKE, [12] = SKID.MG_FIREBALL, [13] = SKID.MG_ENERGYCOAT, [18] = SKID.MG_SAFETYWALL, [19] = SKID.MG_FIREWALL }, para: [JOBID.JT_MAGICIAN] = { [1] = SKID.MG_STONECURSE, [2] = SKID.MG_COLDBOLT, [3] = SKID.MG_LIGHTNINGBOLT, [4] = SKID.MG_NAPALMBEAT, [5] = SKID.MG_FIREBOLT, [6] = SKID.MG_SIGHT, [8] = SKID.MG_SRECOVERY, [9] = SKID.MG_FROSTDIVER, [10] = SKID.MG_THUNDERSTORM, [11] = SKID.MG_SOULSTRIKE, [12] = SKID.MG_FIREBALL, [13] = SKID.MG_ENERGYCOAT, [18] = SKID.MG_SAFETYWALL, [19] = SKID.MG_FIREWALL, [20] = SKID.MG_EARTHBOLT }, skillinfolist.lua Mude: [SKID.ECL_SEQUOIADUST] = { "ECL_SEQUOIADUST"; SkillName = "Sequoia Dust", MaxLv = 1, SpAmount = { 0 }, bSeperateLv = false, AttackRange = { 7 }, } Para: [SKID.ECL_SEQUOIADUST] = { "ECL_SEQUOIADUST"; SkillName = "Sequoia Dust", MaxLv = 1, SpAmount = { 0 }, bSeperateLv = false, AttackRange = { 7 }, }, [SKID.MG_EARTHBOLT] = { "MG_EARTHBOLT"; SkillName = "Earth Bolt", MaxLv = 10, SpAmount = { 25, 30, 35, 40, 45, 50, 55, 60, 65, 70 }, _NeedSkillList = { { SKID.MG_FIREBOLT, 5}, { SKID.MG_LIGHTNINGBOLT, 5} } Finalizando Não se esqueça que você precisará de adicionar o arquivo Sprite e BMP apropriado para a habilidade. Use o nome MG_EARTHBOLT como o nome do arquivo em: data\texture\À¯ÀúÀÎÅÍÆäÀ̽º\item data\sprite\¾ÆÀÌÅÛ Efeitos Vá a src/map/skill.h, Procure a skill que deseja adicionar/editar o efeito: case WE_BABY: if(sd) { struct map_session_data *f_sd = pc->get_father(sd); struct map_session_data *m_sd = pc->get_mother(sd); bool we_baby_parents = false; if(m_sd && check_distance_bl(bl,&m_sd->bl,AREA_SIZE)) { sc_start(src,&m_sd->bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv)); clif->specialeffect(&m_sd->bl,408,AREA); we_baby_parents = true; } Aqui está sendo utilizado como exemplo a habilidade de convocação das classes bebês. Onde 408 é o efeito adicionado para que seja mostrado ao utilizar a skill. Para a sua habilidade customizada, como ela é uma habilidade nova, não há nenhum efeito, então você terá que adicioná-lo ao arquivo, seguindo de exemplo a mesma forma mostrada acima. Para saber a lista de todos os efeitos, basta utilizar doc/effect_list.txt. Fontes e créditos https://github.com/HerculesWS/ https://github.com/Cronus-Emulator/ https://github.com/brAthena/ https://github.com/rAthena/ http://forum.cronus-emulator.com/ https://forum.brathena.org/ http://herc.ws/wiki/Adding_new_skills http://herc.ws/ https://google.com/ Comentários Decidi fazer esse tutorial pois percebi que ainda não há nenhum guia com esse assunto em PT-BR e havia uma grande demanda de pessoas procurando. Tinha dado uma olhada no Hercules e percebi que é um bom tutorial, mas ainda estava incompleto e bem desatualizado, então decidi usa-lo como base e também pensei, por que não criar um? Espero que esteja de boa compreensão, caso estiver faltando algo que eu esqueci ou que eu não saiba, por favor me informe para torná-lo o melhor possível. Estou aberto a sugestões e críticas construtivas. Façam um bom proveito -
1 pointAndei observando que alguns estão/estavam procurando por um programa para visualizar sprites (assim como eu). Mas são tantos sprites e visualizar um a um dá um certo trabalho. Que tal visualizar vários de uma vez só? Pois o WeeThumbnail é uma dll que faz com que isso aconteça no próprio Windows Explorer, como na imagem abaixo. Muitos não estão conseguindo fazer o processo no Windows 7/8/8.1. Bem, eis o que fazer para que funcione: 1º Baixe a dll de acordo com a base do seu windows (32 bits ou 64 bits) https://subversion.assembla.com/svn/weetools/trunk/WeeThumbnail/x86%20and%20x64/ 2º Coloque o arquivo WeeThumbnail.dll na pasta c:windowssystem32 3º Execute o prompt de comando como Administrador 4º Digite (copie e cole) o seguinte comando: regsvr32 /s "%SystemRoot%system32WeeThumbnail.dll" Pronto. Seus problemas se acabaram.