Vizualizar Versão Completa : [Tutorial] Usando Todas as Funções do X-Ray


Nosyel
27-05-2009, 11:11 PM
Usando todas as funções do X-Ray!

:: Índice ::

1 - .: Introdução :.
2 - .: Conseguindo o seu Hexed X-Ray :.
3 - .: Adicionando Custom Headgears :.
4 - .: Adicionando Custom Hairstyles :.
5 - .: Adicionando Custom Mobs/NPC's :.
6 - .: Adicionando Custom Skills :.
6.1 - . Edições na Source .
6.2 - . Edições nos Databases .
6.3 - . Edições nos Client .
7 - .: Adicionando Custom Classes :.
7.1 - . Edições na Source .
7.2 - . Edições nos Databases .
7.3 - . Edições nos Client .
8 - .: Agradecimentos/Créditos :.
--------------------------

1 - .: Introdução :.

Nesse tutorial, eu vou mostrar (ou pelo menos tentar) como usar todas as funções do X-Ray (por enquanto versão 11.0.1), incluindo a adição de custom classes, skills, monstros/npcs, headgears e hairstyles.

Todos os créditos vão pro Meruru, que criou essa coisa tão útil chamada X-Ray, esse guia vai meramente guiá-lo no uso dessa ferramenta.


2 - .: Conseguindo o seu Hexed X-Ray :.

Para baixar um hexed do X-Ray, vá até o fórum do HeliumRO, registre-se lá, logue, vá na seção X-Ray do fórum, e no tópico onde o Meruru disponibiliza os hexeds X-Ray, baixe o X-Ray Client 11.0.1 (vou usar esse hexed nesse guia, não recomendo que você siga esse guia com um hexed mais antigo).

OBS: Leia o Tutorial sobre como Diffar um X-Ray Aqui (http://www.motomodd.net/4031-tutorial-baixando-e-diffando-o-xray.html)

Lembrando que eu NÃO vou dar suporte sobre registro/login no fórum do HeliumRO, se você não consegue se registrar lá, ou logar lá, ou tiver qualquer tipo de problema, peça para alguém que consiga, ou então baixe um hexed pronto de algum lugar.

Depois que você baixar seu X-Ray, diffe-o seguindo um guia de criação de hexeds qualquer, lembrando que você pode usar um diff qualquer, não existem diffs específicos pro X-Ray, mas o diff PRECISA ser pra versão do hexed que você baixou, se é um hexed "10-17" por exemplo, você terá que usar o diff "v10-17a".

Depois que tiver seu hexed diffado, coloque-o na pasta do seu Ragnarök, e coloque as tabelas (os arquivos que vieram junto com seu X-Ray) na sua pasta data, ou no seu custom grf, se você não os adicionar, o hexed não vai iniciar. Depois que você fez tudo isso, vamos começar.


3 - .: Adicionando Custom Headgears :.

Nessa seção, eu vou explicar como se adiciona custom headgears ao client, usando o X-Ray, para isso, você precisará mexer apenas na visionary_tab, e em alguns arquivos do client e do seu servidor.

Primeiramente, adicione o custom headgear no seu servidor, usando o formato certo, no item_db2.txt (que é destinado para custom items), e grave a View-ID (número da coluna view) que você usou para o seu headgear, esse número precisa ser um número razoavelmente alto (recomendo 400 ou mais) para evitar conflitos futuros com headgears oficiais..

Agora, vamos editar a visionary_tab.

Quando você abrir a visionary_tab, verá um monte de caracteres em ASCII, não mexa nesses caracteres, eles são os headgears oficiais, e se você mexer em algum deles, vai causar vários erros com os headgears já contidos no Ragnarok.

Pra explicar melhor como a visionary_tab funciona, cada linha dela é associada a um View-ID, e o nome contido nessa linha diz para o client que nome de sprite/act ele deve associar ao item, a primeira linha (depois do !1), por exemplo, é referente ao item com a View-ID 1.

Agora, existem dois meios de adicionar os seus custom headgears, usando uma função do X-Ray chamada "ID-Jumping", ou sem usar essa função.

AVISO : INDEPENDENTE DO MODO DE ADICIONAR QUE VOCÊ USAR, VOCÊ DEVE SEMPRE DEIXAR A LINHA "*_°í±Û" POR ÚLTIMO NO ARQUIVO, POIS ESSA É A ÚLTIMA LINHA QUE O X-RAY VAI LER, QUALQUER LINHA DEPOIS DELA SERÁ IGNORADA!

Adicionando sem usar o ID-Jumping:

Para adicionar custom headgears sem usar o ID-Jumping, basta você adicionar o nome do sprite/act do seu headgear na visionary_tab, depois dos headgears originais, nesse formato :

(...)
_null
_null
_null
_seusprite
*_°í±ÛOnde o (...) corresponde às linhas dos headgears oficiais.

Eu usei esses "_null" para indicar uma linha vazia, você deve adicionar essas linhas após os headgears oficiais, e quando chegar em uma linha razoavelmente afastada dos headgears oficiais, comece a adicionar os seus headgears, você deve fazer isso para evitar conflitos futuros com headgears que a Gravity possa adicionar futuramente no Ragnarok.

Lembrando que você NÃO deve adicionar linhas totalmente em branco, o X-Ray vai parar de ler a tabela na primeira linha em branco que ele encontrar, mas você pode colocar qualquer tipo de nome para indicar linhas em branco, já que eles não serão usados.

E a linha onde está "_seusprite" deve ser a linha correspondente ao número da View-ID que você colocou no seu item, lá no item_db2.txt (diminuindo 1 no número da linha, considerando a primeira linha que é "!1").

Usando o ID-Jumping:

Para adicionar custom headgears usando o ID jumping, você deve ir até a última linha da visionary_tab, e colocar uma linha indicando pra qual linha ele irá pular, e na linha logo abaixo, o nome do arquivo .spr/.act do seu item, assim :

(...)
!400
_seusprite
*_°í±Û

Esse número que você coloca após o ! indica pra que linha ele vai pular, no caso, ele vai interpretar a linha após esse "!400" como a linha 400, então você deve colocar após esse "!" a linha correspondente à View-ID do seu item.

Logo, o "_seusprite" vai ser a minha View ID 400.

Lembrando que o ID-Jumping é um pouco bugado, se você tiver erros adicionando headgears dessa maneira, adicione usando o outro método.

Aviso : TODAS AS LINHAS devem ter um "_" antes do nome do arquivo act/spr.

Agora é só adicionar os arquivos do seu custom headgear (.spr/.act quando equipado), nas pastas corretas, lembrando que todos esses arquivos devem ter o mesmo nome, e todos eles devem ter o nome que você indicou na visionary_tab.

É preciso também adicionar o seu custom headgear nos arquivos idnum2itemdesctable.txt, num2itemdesctable.txt, idnum2itemdisplaynametable.txt num2itemdisplaynametable.txt, idnum2itemresnametable.txt e num2itemresnametable.txt no formato correto, para descobrir como fazê-lo, siga um guia de adição de custom headgears normal.

Aviso : O X-Ray não influenciará a adição do seu item nos arquivos idnum2itemresnametable.txt e o num2itemresnametable.txt, então adicione-os lá normalmente.

Pronto, após ter feito tudo isso, o seu hexed vai ler seus custom headgears normalmente.


4 - .: Adicionando Custom Hairstyles :.

Primeiramente, pra adicionar custom hairstyles, você vai ter que abrir o arquivo vanity_m/f_tab(depende do sexo que você quer adicionar, caso seja pra homens, será na m_tab, caso seja pra mulheres, será na f_tab).

Então, é só você adicionar mais um número na tab, seguindo a ordem do arquivo, o último número provavelmente será o 23, então é só adicionar o 24 logo depois.

Depois, você tem que adicionar os arquivos .spr/.act do custom hairstyle na pasta "/data/sprite/Àΰ£Á·/¸Ó¸®Åë/[sexo]/", no formato "Nº_SEXO", usando a pasta/prefixo ³² pra homens, e ¿© pra mulheres.

Após ter feito isso, você terá que adicionar os custom hairstyles no seu servidor (na verdade apenas aumentar o limite), pra isso, vá no arquivo conf/battle/client.conf, e procure essas linhas:

min_hair_style: 0
max_hair_style: 23Mude o 23 para o número de headgears que sua visionary_tab contém.

Lembre-se de fazer isso no Stylist também!! É só editar o número de hairstyles no arquivo npc/custom/dye.txt.

Consertando os sprites do Blank Eyes/Moustash
(essa parte é uma advertência do Meruru traduzida)

Quando você adiciona custom hairstyles no seu client, você PRECISA corrigir os sprites do Blank Eyes/Moustash também. Se você não consertá-los, vão ocorrer erros quando você equipar esses items usando seu custom hairstyle!

Primeiramente, aqui estão as pastas que nós vamos mexer. (use um programa de edição de grfs pra isso)
sprite\악세사리

E a pasta de cada sexo:

MASCULINO:남
FEMININO:여

Quando você entrar em um dessas pastas você verá um monte de arquivos com nomes baseados nos números dos headgears/sexo.

Os que nós vamos usar são os que parecem com esses:

[sexo]_배틀온라인[número].spr
[sexo]_배틀온라인[número].act

Extraia esses arquivos usando um programa de edição de grfs, caso ele não converta os nomes pra ASCII automaticamente, use um programa pra convertê-los (como o gayconv ou o Unbollox).

Depois de tê-los extraído, eles devem estar com os nomes parecidos com isso:

\sprite\¾Ç¼¼»ç¸®\[sexo]\[sexo]_¹èƲ¿Â¶óÀÎ[número].spr
\sprite\¾Ç¼¼»ç¸®\[sexo]\[sexo]_¹èƲ¿Â¶óÀÎ[número].act

Para adicionar esses arquivos pro seu hairstyle, basta criar uma cópia de cada um deles, e editar o número do hairstyle pro do seu custom hairstyle.

Caso o hairstyle que você adicionou seja o 24, e você tenha adicionado na vanity_m_tab.txt, ficaria assim:

\sprite\¾Ç¼¼»ç¸®\³²\³²_¹èƲ¿Â¶óÀÎ24.spr
\sprite\¾Ç¼¼»ç¸®\³²\³²_¹èƲ¿Â¶óÀÎ24.act

Após ter feito isso, é só adicioná-los à sua pasta data, ou então convertê-los e passá-los pro seu custom grf.


5 - .: Adicionando Custom Mobs/NPC's :.

Para adicionar custom Mobs/NPC's no client, você vai usar a monstrosity_tab.txt.

Abrindo esse arquivo, você perceberá que ele não é como as outras tables, porque ela tem a info de todos os mobs/npcs/jobs do jogo (apesar de que aqui os jobs não são sprites, e sim o nome que aparece na janela de status).

Para adicionar custom mobs, é só você adicionar o seu mob no mob_db2.txt normalmente, eu por exemplo vou usar o ID 3000 para meu monstro.

Depois de adicionar o seu mob no mob_db, é só ir lá na monstrosity_tab, e ir na última linha antes do ID do seu monstro, por exemplo, eu estou usando o ID 3000, então primeiro eu procuro o maior ID Jump que tem na tabela menor que 3000, e acho isso :

!1219
knight_of_abyss

Então eu sei que o último ID Jump antes do meu mob é o que vai pra ID "1219", agora, é só achar o final dessa lista, aonde ele vai pular pra um ID MAIOR que o meu, então, eu vou achar isso :

!4001
Novice High

Bem, então eu sei que a outra lista acabava na faixa dos 1500, e agora já começa o ID 4001, então, eu devo adicionar meu mob entre essas 2, assim :

(...)
!3000
meu_mob
!4001
Novice High

Pronto, agora meu mob está usando o ID 3000 da monstrosity_tab e do mob_db.

Depois, é só adicionar os arquivos .spr/.act na pasta "sprite/¸ó½ºÅÍ/" com o mesmo nome definido na monstrosity, no meu caso seria "meu_mob.spr" e "meu_mob.act".

Agora para adicionar NPC's, você terá que usar um ID menor que o 1000, e maior do que os já usados, isso é limitado no server, não no client, se você quiser editar esse limite, edite no arquivo src/map/npc.h.

Então, ache a última linha de NPC da monstrosity e adicione depois o nome do seu .spr/.act (você pode usar um ID maior que o do último NPC usando ID Jumping, mas você NÃO PODE usar um ID maior que 1000, porque é aqui que começam os jobs).

Depois, é só adicionar os arquivos na pasta sprite/npc, com o mesmo nome que você colocou na monstrosity_tab, e pronto, é só usar o número que você colocou no cabeçalho do seu NPC (lembrando que pode acontecer que o ID seja 1 número depois do colocado na monstrosity_tab, então, teste os dois).


6 - .: Adicionando Custom Skills :.

Agora começa a parte mais temida, porém, essa parte não é tão difícil, se você experimentar, e tentar algumas vezes, e se basear nas skills já prontas, você deve conseguir com o tempo ^^.

Nessa parte, nós teremos que começar a mexer na source do emulador, então, se você pretende tentar essa parte, você vai precisar da source do emulador (pasta src), de preferência baixada do repositório, e de um compilador pronto pra compilar seu eAthena, e vai ter que saber usá-los também, caso já saiba/tenha tudo isso, vamos começar.

Eu vou dividir essa parte em 3 seções : As edições na Source, nos Databases, e no Client.


6.1 - . Edições na Source .

Primeiramente, você terá que editar o arquivo src/map/skill.h, nesse arquivo, você vai ter que adicionar a sua custom skill, e apontar o ID dela, lembrando que o ID deve ser maior que 1019 e menor que 8001, sugiro que você não use IDs muito altos, mas caso prefira...

Bem, para adicionar a skill, você tem que procurar essa linha no arquivo :

SA_ELEMENTWIND,

Logo depois, pule uma linha, e adicione nesse formato (lembrando que o nome da skill fica a seu critério, eu vou usar MINHA_SKILL):

MINHA_SKILL = ID,Pronto, nesse arquivo é só isso, salve-o e feche.

Depois, nós vamos editar o arquivo skill.c.

Primeiramente, abra o arquivo, e você verá uma lista de todas as skills do jogo, desça essa lista até o final, e quando achar essa linha:

{ WZ_WATERBALL, "WZ_WATERBALL", "Water_Ball" } ,

Adicione logo abaixo:

{ MINHA_SKILL, "MINHA_SKILL", "Skill_que_eu_criei",} Os primeiro e segundo nomes, precisam ser os nomes que você colocou no arquivo "skill.h", e o terceiro, o nome completo da sua skill.

Após ter colocado isso, você terá que adicionar sua skill nas outras partes do arquivo, dependendo de como sua skill será, baseie-se em skills já prontas, em condições/semelhanças que ela tenha com a sua, tente, por exemplo, começar apenas clonando uma skill, é mais fácil e ajuda a aprender mais como funciona o código do emulador.

Depois de editar tudo que é necessário, salve e feche o arquivo.

Então, dependendo da skill (em algumas não é necessário, apenas cheque uma skill semelhante à sua), você terá que editar o arquivo battle.c, pra definir fórmula de dano, se a skill é afetada por cards, pelo elemento da arma, e várias coisas do tipo, novamente, tente seguir o formato de outras skills pra se orientar, ou até clonar outra skill primeiramente.

Depois, dependendo da skill (caso ela inflinja algum status no inimigo/user), você terá que editar o arquivo status.c, como eu já disse antes, siga o formato de outras skills, ou então clone uma, x].

Pronto, agora a parte da edição da source está pronta, recompile seu emulador, e suas skills já estarão adicionadas no servidor.

Se ocorrer algum erro, não se preocupe, isso é normal, reveja tudo que você fez, corrija possíveis erros, não fechar os códigos com "}"'s ou não adicionar "break;"'s é normal, provavelmente você terá que recompilar várias vezes para acertar, se precisar de ajuda, pode postar que eu faço o possível pra ajudar.


6.2 - . Edições nos Databases .

Agora começa a parte de databases, essa é a parte que você vai adicionar sua(s) custom skill(s) nos databases do servidor, informando as specs da skill.

Primeiramente, adicione sua skill no skill_db, no formato certo, o ID da skill, se ela pode ser interrompida, etc. Siga o formato de outras skills, ou então consulte o cabeçalho para ver como adicionar sua skill.

Depois, você terá que adicionar sua skill no skill_cast_db.txt, nesse arquivo você vai informar o delay/cast-time de cada level da sua skill, consulte o outras skills já prontas ou o cabeçalho para aprender como adicionar sua skill.

Então, você vai precisar adicionar sua skill no skill_tree.txt, nesse arquivo, você vai indicar que classes terão a skill, e que skills serão necessárias para obtê-la, siga o formato de outras skills, ou então consulte o cabeçalho, para saber como adicionar a sua.

Agora, você precisará adicionar sua skill no arquivo skill_require_db.txt, nesse arquivo, você vai informar quanto SP a skill vai gastar por level, se a pessoa precisa estar em algum estado (com spirit spheres por exemplo) para usar a skill, se ela precisa ter alguma arma equipada, etc. Siga o formato de outras skills ou consulte o cabeçalho para adicionar a sua.


6.3 - . Edições no Client .

Agora vamos para a parte do hexed, para adicionar custom skills, você usará a player_ability_tab.txt, para adicionar skills para players, a homun_ability_tab.txt para adicionar skills para homunculus, e a guild_ability_tab para adicionar skills para guilds, aqui, eu vou ensinar como usar a player, já que eu quero é adicionar uma skill para um player, mas o método de uso é o mesmo para as três, então, para seguir esse "exemplo", você vai usar a player_ability_tab, abra-a, e você verá que ela tem listada todas as skills, e os "ID-Jumpings" que existem na table, indicam os ID's de cada skill.

A última skill deve ser a "SA_ELEMENTWIND", que corresponde ao ID 1019, baseando-se nessa linha, adicione sua custom skill logo depois.

Se você usou o ID 1020 para sua custom skill, seria só adicionar logo depois de "SA_ELEMENTWIND", uma nova linha "MINHA_SKILL", mas se você não usou o ID 1020, adicione linhas em branco com qualquer conteúdo "NULL_SKILL" por exemplo, até chegar ao ID da sua skill (vá contando, já que o número da linha não é referência).

Você também pode tentar usar o ID-Jumping, mas comigo, isso não funcionou, então teste, se não funcionar mesmo, use esse método.

Depois, é só adicionar a sua skill nos arquivos "data/skilldesctable.txt" (a descrição da sua skill), "skillnametable.txt" (o nome da sua skill), e caso ela seja level-selectable (que você possa escolher o level que vai usar), no arquivo "leveluseskillspamount.txt" (a quantidade de SP necessária para cada level da skill).

Após tudo isso, sua custom skill estará adicionada no seu server e no seu client com sucesso, apenas execute tudo e teste! :D


7 - .: Adicionando Custom Classes :.

Pronto, agora chegou a parte que eu creio que seja a que as pessoas tem mais interessse, a parte de adicionar custom classes (jobs).

Primeiramente, você deve ter conhecimento de que essa função ainda é um pouco bugada, o seu char provavelmente vai ficar andando de um modo estranho (e engraçado diga-se de passagem), com o sprite alinhado na diagonal, porém andando para frente, basicamente, ele vai andar meio desalinhado, apesar de não afetar a jogabilidade.

Essa é uma parte que provavelmente também lhe cause alguns erros na hora de compilar, como na parte das skills, você provavelmente vai ter que recompilar várias vezes até acertar (pelo menos eu tive, :P), e é normal esquecer uma coisa ali e outra aqui, então se não estiver funcionando, primeiramente revise o que você já fez, que com certeza você vai achar algum erro bem bossal ^^.

Também como na parte das skills, eu resolvi dividir essa parte do tutorial em 3 seções, a das edições da Source, a das edições dos Databases, e a das edições do client.


7.1 - . Edições na Source .

O primeiro arquivo da source que nós vamos fuçar, vai ser o já conhecido de bastante gente "common/mmo.h".

Abrindo esse arquivo e descendo um pouco a scrollbar, você vai reparar que como na parte das skills, estão todos os jobs do jogo, e cada um com seu respectivo ID apontado nesse arquivo.

É agora que você deve decidir que ID você vai usar para a sua custom classe, lembre-se que esse ID não pode ser o ID de nenhum monstro/NPC já existente, e de nenhuma das classes, eu costumo usar ID's por volta de 27~35, ou IDs bem altos, como 4051+ (depois das classes atuais).

Nesse tutorial, eu vou usar o ID 35 para minha classe, e vou criá-la como uma expanded class (ou seja, não será a evolução de nenhum job, e sim um job separado, como Ninja ou Gunslinger).

Para adicionar sua custom class nesse arquivo (supondo que você use o ID 35), primeiro ache essa linha:

JOB_XMAS,

Essa linha, a partir do segmento das outras, define que o ID do job XMAS (da roupa de papai noel) é o 26, então, pule uma linha e adicione logo embaixo :

MEU_JOB = 35,Nesse arquivo é só isso, salve e feche.

Depois disso, vá até o arquivo src/char/char.c, e procure esta linha :

case JOB_SOUL_LINKER: return "Soul Linker";

Bem, eu vou tentar explicar o que cada parte faz, essa linha por exemplo, diz para o char server que se a const "JOB" do personagem é o "JOB_XXX_XXX", o nome do job que ele vai retornar vai ser aquele entre aspas.

Para adicionar o seu custom job aqui, adicione logo abaixo dessa linha, nesse formato :

case JOB_MEU_JOB: return "Meu Job";Pronto, nesse arquivo também por enquanto é só, salve-o e feche.

Agora vá até o arquivo src/map/atcommand.c, agora nós vamos editar o comando @job/@jobchange, para que ele suporte o seu custom job, caso contrário, mesmo que seu job existisse, o comando não reconheceria ele, e você só poderia se tornar esse job através de NPC's e coisas do tipo.

Nesse arquivo, ache essa linha :

{ "ninja",<tab>25 },

Adicione logo abaixo :

{ "meu job",<tab>35 },Pronto, salve o arquivo e feche-o.

Agora começa a parte meio chata... abra o arquivo itemdb.c e ache essa linha :

if (jobmask & 1<<JOB_NINJA)
bclass[0] |= 1<<MAPID_NINJA;

Essa parte do código, serve para definir que tipo de job é o seu, e para definir qual vai ser a bitmask (numero em hex) que você vai ter que usar no item_db pra que ele possa equipar um item.

Para adicionar seu custom job nesse arquivo, adicione logo abaixo :


if (jobmask & 1<<JOB_MEU_JOB)
bclass[0]|= 1<<MAPID_MEU_JOB;

Nesse caso, o que caracteriza a classe como uma expanded class é aquele [0], se fosse um [1], seria uma classe 2-1, etc... E lembrando que, colocando "jobmask & 1<<JOB_MEU_JOB" eu estou definindo o bitmask da minha classe como 35, já que é o ID que eu usei, mas você pode usar QUALQUER bitmask que já não seja usado (talvez até algum que já seja usado), é só colocar um número diferente, independente do ID que você usou no resto dos arquivos... por exemplo, se eu quisesse usar ID 4051 pro meu job mas quisesse que o bitmask dele correspondesse ao número 28, era só colocar assim :

if (jobmask & 1<<28)
bclass[0]|= 1<<MAPID_MEU_JOB;

Nesse arquivo é só, depois de modificar o que quiser, salve-o e feche.

Agora abra o arquivo map.h.

Descendo um pouco a scrollbar, você verá que nesse arquivo ele também define que tipo de job será seu custom job, você precisa adicionar aqui de acordo com o que adicionou nos outros arquivos, senão provavelmente vai dar erro na hora de compilar ou na hora de rodar o servidor mesmo.

Já que minha custom classe vai ser uma expanded class, eu vou procurar por esta linha (que é a que define a última base/expanded class):

MAPID_XMAS, // [Valaris]

E vou adicionar logo abaixo :

MAPID_MEU_JOB = 0x0E,

Esse 0x0E é o número em hex que vai definir a constante do job, você deve colocar o MESMO número que você especificou aqui no const.txt.

Depois de modificar, salve e feche o arquivo.

Então, abra o arquivo pc.c e ache estas linhas :

case JOB_XMAS:
class_ = MAPID_XMAS;
break;Essa parte converte o sistema de jobs do client para o sistema de jobs do map-server, para adicionar sua custom class aqui, é só adicionar logo abaixo isso aqui :

case JOB_MEU_JOB:
class_ = MAPID_MEU_JOB;
break;

Depois, mais abaixo, encontre essa linha :

case MAPID_XMAS: // [Valaris]return JOB_XMAS;

Essa parte converte de volta o sistema de jobs do map-server para o sistema de jobs do client, para adicionar seu custom job aqui, é só adicionar logo abaixo isso :

case MAPID_MEU_JOB: // [Valaris]return JOB_MEU_JOB;

Agora, um pouco mais abaixo no arquivo, ache isso aqui :

case JOB_NINJA:
return msg_txt(620);Essa parte, define que mensagem do msg_conf ele vai usar para mostrar qual o job de um personagem desta classe, você pode escolher qualquer número de mensagem que não esteja usado, já que você mesmo vai configurá-lo depois, eu por exemplo, vou usar o nº 1000, para adicionar sua custom class, é só colocar assim :

case JOB_MEU_JOB:
return msg_txt(1000);

Pronto, agora salve e feche o pc.c

Agora abra o pc.h (finalmente o último arquivo da source que vamos editar ^^), e ache isso nele :

#define pcdb_checkid(class_) (class_ <= JOB_XMAS || (class_ >= JOB_NOVICE_HIGH && class_ <= JOB_SOUL_LINKER))Bem, eu vou tentar explicar o que essa parte do código faz.

Esse check checa o ID do job para ver se esse ID é um ID válido para uma classe de um player, perceba que ele checa se o ID é menor ou igual (<=) à JOB_XMAS, que é 26, ou seja, todo ID menor ou igual a 26 (26-1) será válido para um job, ou seja, os IDs que vão do Novice até o Ninja.

Depois, o próximo ID válido para um job será maior ou igual (>=) a Novice High, que é o ID 4001, até o Soul Linker, que é o último ID de job lançado até agora.

O que nós precisaremos fazer é editar esse check pra que ele reconheça o ID do nosso custom job como um ID válido.

Supondo que você esteja usando o ID 35, você pode colocar assim :

#define pcdb_checkid(class_) (class_ <= JOB_MEU_JOB || (class_ >= JOB_NOVICE_HIGH && class_ <= JOB_SOUL_LINKER))

Assim, os IDs de 35-1 serão válidos para jobs de players.

Pronto! Isso é tudo que temos que editar na source! Após ter feito TUDO isso, recompile seu emulador, e veja se não acusa erro nenhum, caso acuse, revise todo o processo, por erros básicos, se ainda assim tiver certeza de que não cometeu nenhum erro, poste aqui e eu ajudo na medida do possível ^^.


7.2 - . Edições nos Databases .

Agora vamos começar a editar os databases.

Primeiramente, abra o arquivo const.txt, e ache essa linha:

Job_Xmas<tab>26Como eu estou usando o ID 35 para o meu job nesse tutorial, eu vou adicionar logo abaixo:

Job_Meu_Job<tab>35

Lembrando que o espaço precisa ser com a tecla Tab! (parágrafo).

Depois, procure mais embaixo por esta linha :

EAJ_NINJA<tab>0x0AEsse é o número hexadecimal que o client vai reconhecer como aquele job, você poderia usar qualquer número que já não esteja usado (teoricamente), eu vou usar 3 números depois do Ninja, já que já existem rumores de que lançarão novas classes, eu vou deixar espaço para elas, para evitar conflitos futuros, e lembrando que, o número que você colocar aqui deve ser o MESMO que você colocou no map.h.

Então, adicione assim :

EAJ_MEU_JOB<tab>0x0E

Após ter feito isso, salve e feche.

Agora, nós adicionaremos o custom job nos job_dbs1 e 2, para definir a aspd com cada arma, o número de HP, o peso, e etc da custom classe, para isso, apenas abra o job_db1, e o job_db2, e adicione sua custom classe lá, usando o ID/Nome que você deu pra ela, e seguindo o cabeçalho para saber como adicionar a sua (ou até basei-se/copie de outra classe).

Depois disso, nós teremos que editar a exp.txt para definir quanta exp nosso job precisará para cada level, senão, ele ficará apenas no level 0 de base/job, sem poder evoluir, pra isso, escolha a linha de exp de job/base que você quer usar para seu job, e aonde, por exemplo, estiver assim :

"//Base - Normal Jobs
255,0:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18 :19:20:21:23:24:25:26"

Esses números entre os ":" são os números dos jobs afetados por esses valores (incluindo max level).

Para adicionar seu custom job, basta apenas adicionar ele no formato dos outros, usando o ID que você apontou pra ele, assim :

"//Base - Normal Jobs
255,0:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18 :19:20:21:23:24:25:26:35"

Pronto, agora nós precisaremos editar uma coisa básica no arquivo conf/msg_athena.conf.

Lembra que eu usei a msg 1000 pro meu job? Pois é, agora você vai adicionar a msg que você quiser com o número que você apontou nesse arquivo, já que eu usei a msg 1000, o meu ficou assim :

"1000: Meu Job"

Pronto, salve e feche.


7.3 - . Edições no Client .

Estamos chegando no final! Agora é a parte mais fácil, adicionar no client.

Pra isso, você só vai precisar dos arquivos .spr/.act da sua custom classe.

Primeiramente, abra a class_tab, e adicione o nome dos arquivos .spr/.act lá, apontando o ID da sua classe, no meu ficou assim :

!35
meu_job

Agora é só fazer isso também na reality_tab e na reality_dir_tab.txt, lembrando de seguir o formato de cada uma, e colocando o nome do sprite do seu job, e apontando o ID do seu job corretamente também...

Quanto à imf_tab, ainda não se sabe como se criar arquivos desse tipo customizados, mas já é quase certeza que é esse arquivo que causa o erro de desalinhamento dos sprites da classe, nessa table, você pode usar o nome de qualquer classe pro ID da sua classe, que não vai afetar em nada, faça isso apenas para evitar erros.

Agora, vá na monstrosity_tab e procure pelo ID do seu Job lá (esse, se você estiver usando um ID baixo, vai ser provavelmente o ID da linha).

No meu caso, eu estou usando o ID 35, então eu vou até a linha 35, e substituo o "1_ETC_01" dessa linha por "Meu Job", depois é só salvar e fechar.

Após tudo isso feito, você terá que adicionar os sprites da sua custom class, pra isso, vá na pasta (caso não tenha crie) data/sprite/Àΰ£Á·/¸öÅë, e nessa pasta terão duas outras pastas, uma pra cada sexo.

Adicione na do sexo masculino (³²), o spr e o act da sua custom class nesse formato :

nome_³².spr
nome_³².act

Lembrando que esse "nome" é o nome que você apontou nas tabelas.

Faça o mesmo para o sexo feminino, porém usando o símbolo/pasta ¿©.

Após tudo isso feito, sua custom class deve estar adicionada no seu servidor/client com sucesso, apenas teste. ^^

Para adicionar os sprites de weapon na sua custom class, apenas equipe uma arma, e isso deve causar um erro de falta de spr, apenas olhe o diretório/nome do arquivo que ele pede, e coloque lá o .spr/.act das weapons da sua custom class, usando o nome que ele pede.

Pra dar um exemplo de como fica no final, segue uma SS da custom class que eu fiz, "Shaman", usando uma custom skill que eu fiz pra ela também, "Mass Heal", que é basicamente uma mistura de "Slim Potion Pitcher" com "Heal", que deu nisso aí, um Potion Pitcher de área que afeta guild/party, mas que usa a fórmula do Heal (de int, lvl, etc) :

http://img262.imageshack.us/img262/5504/screenmithro0016jj.jpg

(Sim, eu estou usando a skill em um bando de clones sem cabeça >.<)

Observações

Pra quem estava com dúvida no esquema de bitmask de custom jobs (que número usar pra que o job possa usar os equipamentos), eu acabei descobrindo o esquema da bitmask de jobs do item_db, e vou explicar ela aqui pra vocês, é o seguinte :

Primeiro, vamos dar uma olhada na tabela do arquivo doc/item_db.txt :

(S.) Novice (2^00): 0x00000001
Swordman (2^01): 0x00000002
Mage (2^02): 0x00000004
Archer (2^03): 0x00000008
Acolyte (2^04): 0x00000010
Merchant (2^05): 0x00000020
Thief (2^06): 0x00000040
Knight (2^07): 0x00000080
Priest (2^08): 0x00000100
Wizard (2^09): 0x00000200
Blacksmith (2^10): 0x00000400
Hunter (2^11): 0x00000800
Assassin (2^12): 0x00001000
Unused (2^13): 0x00002000
Crusader (2^14): 0x00004000
Monk (2^15): 0x00008000
Sage (2^16): 0x00010000
Rogue (2^17): 0x00020000
Alchemist (2^18): 0x00040000
Bard/Dancer (2^19): 0x00080000
Unused (2^20): 0x00100000
Taekwon (2^21): 0x00200000
StarGladi (2^22): 0x00400000
Soul Linker (2^23): 0x00800000
Gunslinger (2^24): 0x01000000
Ninja (2^25): 0x02000000

Primeiramente, todo mundo achava que era simplesmente fazer os cálculos mostrados, porque no começo da tabela até que faz sentido, 2^0 (^ = elevado a) = 1, etc, mas depois ela começa a perder o sentido, então eu fui procurar e acabei descobrindo a lógica dessa tabela...

O que você tem que fazer pra descobrir a bitmask de um ID (o que você usa no itemdb.c, independente do que você usa no resto dos arquivos), é elevar ele a 2, e depois converter o resultado para hexadecimal, usando um conversor comum, como esse.

Vamos testar por exemplo com o ID 22, você (com uma calculadora de preferência), calcula 2 elevado a 22, o resultado será 4194304.

Depois, pegamos esse valor e colocamos no conversor, depois é só clicar no botão "DEC to HEX", que ele irá converter, e o resultado será 400000.

Agora, se observarmos na tabela, o valor do ID 22 (Star Gladiator), é exatamente esse, mas antecedido por 2 zeros pra manter o formato, e o 0x que é como um "prefixo" das bitmasks :

StarGladi (2^22): 0x00400000

Então, pra descobrir a bitmask do seu job, é só seguir essa lógica, 2^ID e converter pra hexadecimal, :D.


8 - .: Agradecimentos/Créditos :.

Agradecimentos a :

Meruru - por ter criado o X-Ray, essa ferramenta tão útil que facilita tanto nossa vida.
Kadmus - por ter feito junto comigo esse processo de vááárias tentativas de criação de custom skills/classes.
_Shadow_ - por ter me dado uns toques de uns erros idiotas meus na parte de skills e por mais algumas coisas em que me ajudou, e é claro, por ter me incentivado a criar esse tutorial enoooorme, que eu estava na dúvida se criava ou não :).

Créditos:

MithBR - Pela criação do tutorial original
Nosyel - Pela edição, correção de alguns erros e postagem

Valeu e grande abraço a todos, dúvidas postem aqui mesmo! ;)

Haohmaru22
28-05-2009, 07:21 PM
:cool: Valeu pela eficiencia Nosyel...meus agradecimentos!