sábado, 11 de fevereiro de 2012

Adcionar Pet No Server


Aplicativos utilizados:

Observações:
ALGUMAS FUNÇÕES PODEM SER DIFERENTES DO BGC PARA A SEASON 1, OU SEJA, SERÁ NECESSARIO REMOVE-LAS ( COMENTA-LAS ) ou ACHAR ALGUMA FUNÇÃO SIMILAR E UTILIZA-LÁ.
- Os procedimentos abaixo feitos foram realizados em um servidor caseiro com cliente season 1 inalterado, ou seja os arquivos a serem editados podem variar, caso o cliente que você utilize esteja com os arquivos editados no main.exe.
- Existem mascotes como o Chester que possuem efeitos que devem ser colocados no pettemplate, cujo não irei explicar no tutorial, mas explorando será facil para você por.
- Existem mascotes como o Catbot que são bastantes complexos e não basta apenas adapta-los simplesmente, sendo que possa ser necessario fazer gambiarras no petaction.lua para o mesmo funcionar quase que perfeitamente.
- Isso é apenas um tutorial, vocês terão que ir estudando e testando seus mascotes por que não é tão facil quanto pode parecer.
- Crie um arquivo de texto em branco para adicionar informaçoes cruciais durante a edição.
- Após uma recente mudança, criar mascotes ficou mais complexo, como é demonstrado no tutorial abaixo já que é necessario fazer mais edições.
- Descobrir o nome original do mascote e seu codinome, é questão de logica e busca.
- É necessario pegar as imagens das cartas/skills e particulas nos arquivos de textura do cliente.
• Particulas:
- Arquivos Texture\particle\particleX.kom
• Cartas:
- Arquivos Texture\sbtaXX.kom

Arquivos manipulados ( cliente season 1 ):
Stage\str_p.stg ( arquivo de texto )
Stage\gcnewmapparticle.stg
Stage\script.kom:
- datafiles.lua
- enum.stg
- fireinfo.stg
- sort_p.stg
- petaction.lua
- pettemplate.stg
- sound.stg
E claro, os arquivos do pet.

Arquivos manipulados ( cliente season xaus / hiro ):
Stage\str_br.stg ( arquivo de texto )
Stage\char_script.kom:
- DamageOld.stg
Stage\script.kom:
- sound.stg
Stage\particle_script.kom:
- gcnewmappartie.stg ou arquivo do pet.
Stage\pettemplate.kom:
- Arquivo do pet.
ResSet ou Sound:
Todos arquivos ( para os sons do pet )
Texture\particle\:
- Todos arquivos.

E claro, os arquivos do pet².

Tutorial:
0 - Antes de tudo, crie uma pasta com o nome do pet, e nesta pasta você deverá colocar os arquivos do pet que você irá coletar tais como: texturas, esqueletos, frames, arquivos de som e particulas.
1 - ID do Pet, Template ( pettemplate.stg ):
1.1. Todo Pet possui um id de sistema que pode ser definido pelo usuario, esse id serve para estabelecer o 'template' e 'ações' do mascote junto ao cliente, você deve estabelecer o id de acordo à ordem ja existente no pettemplate.stg, como segue na imagem abaixo:



1.2. A Template é referente aos dados do mascote tais como descrição, nome, modo de apresentação, mesh's, texturas, frames e etc..., abaixo segue o template do Mascote Diabinho em uma imagem comentada e o codigo do mesmo Pet no BGC construido de maneira diferente é claro.



1.2. Enquanto no BGC o arquivo pet_devil.stg ( encontrado no pettemplate.kom ) possui uma estrutura bem diferente, que terá que ser adaptada ( obvio ), com a mesma estrutura que foi apresentada acima do Mascote Diabinhomas com todos valores e dados editados em relação ao mascote em questão a ser adicionado.


PetTemplate[17] = {};
template = SPetTemplate();
template.iPetID = 17;
0;
template.dwGoodsID =
template.iPromotion = 13879; template.fScale = 0.55;
.fDistY = 0.1;
template
template.fDistX = 0.15; templat e.fNameHeight = -0.07; template.iNameID = 3954;
e:AddDesc( PET_DESC_FIRST, 3962 );
templ
template:AddDesc( PET_DESC_SHOP, 3961 ); templa tate.fResultScale = 0.15; template:SetAxisCorrectionX( 0.0 );
Z( 0.0 );
template.iMaxEvolutionLev
template:SetAxisCorrectionY( 0.0 ); template:SetAxisCorrectio nel = 0; template.iItemDescID = -1; template:AddMent( PET_MENT_HUNGRY, 500, 3958 );
00, 3956 );
template:AddMent( PET_MENT_MYINFO,
template:AddMent( PET_MENT_MYINFO, 500, 3955 ); template:AddMent( PET_MENT_MYINFO, 5500, 3957 ); template:AddMent( PET_MENT_ROOM, 500, 3955 ); template:AddMent( PET_MENT_ROOM, 500, 3956 );
nt( PET_MENT_FEEDING_3000, 500, 1730 );
templ
template:AddMent( PET_MENT_ROOM, 500, 3957 ); template:AddMent( PET_MENT_SHOP, 500, 3961 ); template:AddM eate:AddMent( PET_MENT_FEEDING_6000, 500, 1730 ); template:AddMent( PET_MENT_HUNGRY_ZERO, 500, 3959 ); template:AddMent( PET_MENT_LEVELUP, 500, 3960 );
, "pet_tex017_0_devil.dds", "pet_tex017_0_showroom.dd
template:AddMent( PET_MENT_CHAR_LEVELUP, 500, 1713 ); template:AddMent( PET_MENT_FIRST_MEETING, 500, 3962 ); template:PushMeshInfo( "pet017_0_devil.p3m "s", CARTOON_PETS ); template:PushSoundInfo( 293 ); template:PushSoundInfo( 292 ); template:PushSoundInfo( 36 ); template:PushSoundInfo( 665 ); template:PushSoundInfo( 666 ); template.SkillGP = 13880;
Motion = "pet017_0_08.frm",
template.SkillCash = 13881; PetTemplate[17][0] = {}; PetTemplate[17][0]._class = template; PetTemplate[17][0]._skill = { [13881] = 13880, [13880] = { [PetMotion.ATTACK] = { Action = function ( iPlayer, iFrame ) local Pet = g_MyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù. if( iFrame == 45 ) then Pet:PlaySound( 11, 0 );
iPlayer, iFrame )
local Pet = g_MyD3D:GetPe
Pet:AddDamage( DT_DEVILPET, 0 , 0.1, 0); end end }, [PetMotion.TELEPORT_READY] = { Motion = "pet017_0_10.frm", Action = function (t(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù. local dwMaxFrame = Pet:GetNumFrame(Pet.iMotion); if( Pet.iFrame == dwMaxFrame - 10 ) then Pet:AddParticle( "pet-teleport_1", 0, 0 );
= function ( iPlayer, iFrame )
local Pet = g_
Pet:AddParticle( "pet-teleport_2", 0, 0 ); Pet:PlaySound( 293, 0 ); end end }, [PetMotion.TELEPORT_ARRIVE] = { Motion = "pet017_0_11.frm", Actio nMyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù. if( Pet.iFrame == 1 ) then Pet:PlaySound( 292, 0 ); end end }, },
}




1.3. Salve o arquivo e mantenha-o aberto.

2 - Sons do mascote:
2.1. Primeiramente, abra o sound.stg do BGC, e então procure pelos arquivos de som tendo como referencia os ids que estão nopet_devil.stg ( NO CASO DO PET USADO NESSE TUTORIAL ) e copie as linhas para um arquivo de texto a parte:
Código:
Exemplo do arquivos de som usados pelo Diabinho como demonstrado no pet_devil.stg:
template:PushSoundInfo( 293 ); template:PushSoundInfo( 292 );
mplate:PushSoundInfo( 666 );
template:PushSoundInfo( 36 ); template:PushSoundInfo( 665 ); t
e
2.2. Abaixo segue um exemplo de como estará o 'arquivo a parte' após coletar todas informações referentes para o arquivo de texto:
Código:
{ ID = "293", FILENAME = "Pet_Teleport_Out_Effect.wav", },
{ ID = "292", FILENAME = "Pet_Teleport_In_Effect.wav", },
FILENAME = "Cupid_Atk1.wav", },
{ ID =
{ ID = "36", FILENAME = "MDash.wav", }, { ID = "665",
"666", FILENAME = "Cupid_Boom.wav", },
2.3. Agora que ja temos o nome de arquivo, iremos verificar se os mesmos ja existem no sound.stg do nosso cliente cujo qual o mascote esta sendo adicionado, caso o arquivo ja exista, não iremos adiciona-lo novamente e iremos remover do arquivo à parte os dados referentes ao som, deixando apenas o seguinte como mostra o exemplo, pois os ids dos sons deverão ser mudados nos arquivos que contem os ids como se fossem do BGC:
Código:
id bgc = meu novo id para o som no meu cliente
36 = 36
2.4. Agora iremos somar os novos ids ao total do nosso sound.stg:





2.5. Agora iremos adicionar os arquivos ao sound.stg, sendo que os ids deverão ser em ordem crescente,:
Código:
No caso, adicionei assim ao final do arquivo:
SOUND671 = { FILENAME = "Pet_Teleport_Out_Effect.wav", }
SOUND672 = { FILENAME = "Pet_Teleport_In_Effect.wav", }
{ FILENAME = "Cupid_Boom.wav", }
SOUND673 = { FILENAME = "Cupid_Atk1.wav", } SOUND674
=
2.6. Como os ids mudaram, é claro que terei que substituir os mesmos no pettemplate.stg e os demais arquivos que serão editados, colocando os novos ids, levando em consideração o id anterior referente ao mesmo arquivo de som, ou seja os ids ficarão ( exemplo no pettemplate.stg ):
Código:
De:
Sound =
{
293, 292, 36, 665, 666,
};
Para: Sound = {
4,
};
671, 672, 36, 673, 6
7
2.7. Salve o arquivo e mantenha-o aberto.

3. PetSkill.lua:
3.1. A parte do PetSkill.lua é bastante simples como mostra a imagem abaixo, sendo que você só terá que adicionar os mesmos referentes aos ids dos ataques do mascote, sim, aqueles que tem no pettemplate.stg.






3.2. Salve o arquivo e feche-o.

4. PetAction.lua:
4.1. Cada pet possui 17 conjuntos de frames, sendo que esses conjuntos de frames são referentes a ações, e essas ações são designadas no arquivo PetAction.lua que serve para definir ataques e etc como mostra a imagem:






4.2. Abaixo segue uma lista das ações e seus id's que tambem podem ser encontradas no petaction.lua:
Código:
WAIT = 0;
MOVE = 1;
;
JUMP_UP =
JUMP_READY = 2 3; JUMP_DOWN = 4;
= 6;
LO
START = 5; WIN SE = 7; ATTACK = 8;
0;
TELEPORT_ARRIVE =
MAGIC = 9; TELEPORT_READY = 111; ROOM = 12; SHOP = 13;
_ACTION = 16;
MOVE
JUMP_LAND = 14; GAME_LOADING = 15; SHO
P_END = 17;
4.3. Para construir as ações do seu mascote, basta ir no template do seu mascote no bgc, copiar as ações e em um arquivo a parte, colar e adapta-lo, abaixo segue um exemplo.
De:
Código:
[PetMotion.ATTACK] = {
Motion = "pet017_0_08.frm",
Action = function ( iPlayer, iFrame )
local Pet = g_MyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
if( iFrame == 45 ) then
);
Pet:AddDamage( DT_D
Pet:PlaySound( 11, 0EVILPET, 0 , 0.1, 0); end end },
10.frm",
Action = function
[PetMotion.TELEPORT_READY] = { Motion = "pet017_0 _ ( iPlayer, iFrame ) local Pet = g_MyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
if( Pet.i
local dwMaxFrame = Pet:GetNumFrame(Pet.iMotion); Frame == dwMaxFrame - 10 ) then Pet:AddParticle( "pet-teleport_1", 0, 0 );
( 293, 0 );
end
end
},
Pet:AddParticle( "pet-teleport_2", 0, 0 ); Pet:PlaySoun d [PetMotion.TELEPORT_ARRIVE] = { Motion = "pet017_0_11.frm", Action = function ( iPlayer, iFrame )
Pet:PlaySound( 292, 0 );
end
local Pet = g_MyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù. if( Pet.iFrame == 1 ) then end
},
Para: 
Código:
function Pet_Action14_0_8(iPlayer, iFrame)
local Pet = g_MyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
if( iFrame == 45 ) then
);
Pet:AddDamage( DT_D
Pet:PlaySound( 11, 0EVILPET, 0 , 0.1, 0); end end
local Pet = g_MyD3D:GetPet(iPl
function Pet_Action14_0_10(iPlayer, iFrame) ayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
(Pet.iMotion);
if( Pet.iFrame == dw
local dwMaxFrame = Pet:GetNumFram eMaxFrame - 10 ) then Pet:AddParticle( "pet-teleport_1", 0, 0 );
t:PlaySound( 293, 0 );
end
end
end
Pet:AddParticle( "pet-teleport_2", 0, 0 ); P e function Pet_Action14_0_11(iPlayer, iFrame) local Pet = g_MyD3D:GetPet(iPlayer, 0); --Ŭ·¡½º¸¦ ¹Þ¾Æ¿É´Ï´Ù.
if( Pet.iFrame == 1 ) then Pet:PlaySound( 292, 0 ); end
end
4.4. Agora copie o que foi adaptado, vá e cole no fim do petacion.lua, logo apos caso falte alguma ação, pegue em outro mascote as ações restantes ( com o mesmo numero de ação ) e mude o id e coloque em ordem junto ao que foi adaptado.
4.5. Lembre-se de mudar os sons de acordo ao id dos novos sons equivalentes ( olhe a função PlaySound, e veja que tem o mesmo id, então é só substituir caso seja necessário ).
4.6. Salve o arquivo e mantenha-o aberto. 

5. Enum.stg:
5.1. O enum.stg tem a utilidade de enumerar diversos valores do jogo, mas isso não vou explicar aqui, o importante é que os danos do mascotes ( como será mostrado na imagem abaixo ), primeiramente devem ser adicionados nesse arquivo, levando em consideração a ordem crescente de numeros.






5.2. Mas como indentificar os danos? é bem simples, basta no petaction do mascote em questão verificar as palavras que sejam relacionadas a uma função que contenha damage ( ex: AddDamage ) e essa constante comece com DT.
5.3. Salve o arquivo e mantenha-o aberto.

6. FireInfo.stg:
6.1. Primeiramente iremos alterar o valor do MAX_DAMAGE_NUM para o novo valor total, acrescentado o valor dos damages novos (no meu caso é 1 ).
Exemplo:
Código:
De:
ireInfo =
F{
MAX_DAMAGE_NUM = 753,
MAX_DAMAGE_TEX_NUM = 194,
} Para: FireInfo = {
754,
MAX_DAMAGE_TEX_
MAX_DAMAGE_NUM =NUM = 194,
}
6.2. Agora vá até o final do arquivo e crie o seguinte codigo ( no meu caso é FireInfo753 por que o id do unico damage do diabinho é 753 ):
Código:
FireInfo753 =
{
}
6.3. Agora no DamageOld.stg do BGC iremos procurar pelo dano do pet, tendo como referencia o nome dele, no caso do diabinho tive o seguinte resultado:
Código:
Damage[DT_DEVILPET] = {
--DT_DevilPet
55,
ENABLE_DAMAGE
START_LIFE = 2 = TRUE,
_X = 0.07,
SCALE_Y_PE
START_SCAL ER_X = 0.5, START_LOCATE_X = 0.1,
_X = 0.0250000,
START_LOCATE_Y = 0, SPEE D DAMAGE_SOUND = 6,
A_ONETIME_DAMAGE,
AGIC_EFF = 108,
MMAG
DAMAGE_FLAG = DA_HIT_LIGHT + DIC_TIME = 2.0, TEXTURE = 210, DAMAGETO_MONSTER = -24,
TTACKDIR_UP,
PUSH_X_TO_MONSTER = 0.01,
ATTACK_TYPE_TO_MONSTER = ATTACKTYPE_NORMAL, ATTACK_DIR_TO_MONSTER = APUSH_Y_TO_MONSTER = 0.0,
}
6.4. Agora iremos montar esse codigo dentro do fireinfo como mostra abaixo:
Código:
FireInfo753 =
{
--DT_DevilPet
START_LIFE = 255,
ENABLE_DAMAGE = TRUE,
TART_SCALE_X = 0.07,
SSCALE_Y_PER_X = 0.5,
.1,
START_LOCATE_Y =
START_LOCATE_X = 00, SPEED_X = 0.0250000,
DAMAGE_FLAG = DA_HIT_LIGHT +
DAMAGE_SOUND = 6, DA_ONETIME_DAMAGE, MAGIC_EFF = 108, MAGIC_TIME = 2.0,
ATTACK_T
TEXTURE = 210, DAMAGETO_MONSTER = -0.024, YPE_TO_MONSTER = ATTACKTYPE_NORMAL,
_UP,
PUSH_X_TO_MONSTER = 0.01,
PU
ATTACK_DIR_TO_MONSTER = ATTACKDI RSH_Y_TO_MONSTER = 0.0,
}
6.5. Salve o arquivo e mantenha-o aberto.

7. str_p.stg:
7.1. Copie os valores do sort_br.stg do BGC referente aos valores de texto do mascote do pettemplate.stg
7.2. Salve o str_p.stg e feche-o.

8. sort_p.stg:
8.1. Adicione ao sort a carta e as tecnicas especiais do mascote.
8.2. Salve o sort e feche-o.

9. gcnewmapparticle.stg:
9.1. Você deverá coletar os nomes das particulas que o pet utiliza, mas como identificar? basta no petaction e no fireinfo do mascote em questão verificar as palavras que sejam relacionadas a uma função que contenha particle ( ex: AddParticle ).
9.2. Agora verifique no gcnewmapparticle.stg do seu Grand Chase se as particulas em questão existem, caso não voce deverá repassar os particle info do gcnewmapparticle.stg do bgc ( ou do particle file script do pet ) para o seu gcnewmapparticle.stg.
9.3. Salve o arquivo e feche-o.

10. Arquivos:
10.1. Agora você deverá coletar os arquivos de som, os arquivos de particula e os arquivos de pets e colar na pasta cuja qual será criada o kom a partir dessa pasta que conterá os arquivo do pet.
10.2. Você deverá renomear os arquivos do pet que contenham a extensão frm, exemplo:
Código:
pet017_0_09.frm para pet0ID_0_09.frm
exemplo do diabinho:
pet017_0_09.frm para
pet014_0_09.frm
10.2. Adicione no DataFiles.lua o caminho do arquivo kom que contem os arquivos do mascote.
10.3. Comprima o script.kom e o arquivo kom do pet, coloque-o em seus respectivos diretorios.
10.4. Enjoy.

Creditos:
Yondaime12