joaopaulo98
ADM
Vamos ao Sistema!
#########
Ficha Técnica
#########
Nome do Sistema: Sistema de Transformação
Nível de Dificuldade: Nenhum já que você vai copiar e colar ;v ué k
Compatibilidade: Qualquer EO ou Crystal
Programa Necessário: Visual Basic 6
| Função |
- É uma Spell? Não exatamente, é algo decente. Será um Complemento a qual você vai poder aplicar a qualquer tipo de Spell. Mas porque? Porque eu sou acostumada a fazer coisas ilimitadas e abertas e não coisas para mentes fechadas.
Como funcionará? Você irá marcar apenas 1 caixinha, e em QUALQUER tipo de spell, você marca essa caixinha e configura a Transformação para QUALQUER tipo de Spell.
Isso libera que você faça uma Spell de DANO, e mesmo assim se Transforme.
OU de cura? mas porque?
Ué, Imagine você se transformando e acontecendo uma grande explosão ao mesmo tempo? Você se transforma e explode a area toda como efeito da sua transformação;
Ou mesmo você cura a area toda e se transforma em um Anjo Op com status aumentados ué uashuhsa, ser uma "Capacidade", algo "adicional" as spells abre um leque infundado de fusões.
| Observação |
Neste Sistema de Transformação eu estarei usando uma CrystalShire Comum, os códigos em nada serão diferentes das EO comum, então a compatibilidade é Global.
Porém diferente do aumento comum de Atributos, eu alterarei apenas 4 Valores.
Serão eles:
-HP
-MP
-DANO
-DEFESA
Você pode customizar e adicionar quantos quiser, EXP, REGEN, e o caralho a 4, basta você usar a lógica.
#########
Pedido
#########
Se for usar, seria interessante deixar os Créditos de onde você tirou esse sistema, digo a MMorpg! Traga mais pessoas para este meio xD Assim teremos mais mundos, e mais historias para viver.
#########
Adicional
#########
Sobre o Sistema, ninguém tem "integridade" sobre nada, é programação, o sistema não é meu, o sistema é de quem usa, eu sou apenas o instrumento a qual usou a cabeça para montar, porque qualquer um que seja capaz é capaz de montar.
Vamos ao Work.
#########
Client - Side
#########
[1] Preparando o Terreno.
Aqui iremos preparar a Form do Editor de Spells para a Transformação; No seu cliente, na frmEditor_Spell, crie uma area dessa forma: ( http://prntscr.com/frngwt ) - http://prntscr.com/frngwt
São 2 CheckBox, Labels para nomear as Áreas e 6 TextBox.
Preencha os Componentes com os Seguintes nomes:
#CheckBox de Transformação:
Name: chkHasTransform
#CheckBox de Mudar Sprite?
Name: chkChangeSprite
#textBox da Sprite
Name: txtTransSprite
MaxLenght: 3 'Observe isso aqui, é importante limitar para você não acabar pondo um valor absurdo!!
#TextBox do Tempo
Name: txtTransTime
#textBox do Hp
Name: txtTransHp
#textBox do Mp
Name: txtTransMp
#textBox do Poder
Name: txtTransPoder
#textBox do Defesa
Name: txtTransDefesa
Agora com nosso esquema montado vamos aos Scripts ;3
Acesse a área de Códigos da FrmEditor_Spells, basta clicar nela com o botão direito, e por CodeView
http://prntscr.com/frnkuq
Agora estamos na área de códigos da FrmEditor_Spells.
No fim dela adicione isso aqui:
https://pastebin.com/PcYu1EVy
https://pastebin.com/PcYu1EVy
Dentro do PasterBin, basta copiar e colar para o fim do seu FRMEDITOR_SPELLS!!!
[2] Preparando as Variáveis
Seguindo agora para o ModTypes, dentro do Cliente.
Aqui encontramos diversas classes, mas estamos procurando pela: Private Type SpellRec
No Fim dela, antes do End Type, no caso ainda "dentro" dela.
Adicione:
Adicionando isso, agora ACIMA!!!! da Private Type SpellRec adicione isso aqui:
Pronto, modTypes do Cliente está pronto! Falta por a mesma coisa no Servidor, mas faremos quando chegar no servidor.
[3] Cuidando do Inicializador do Editor de Spells.
No ModGameEditors, procure por : Public Sub SpellEditorInit()
Dentro dele é que vamos trabalhar agora, ele é responsável por fazer a "load" de cada spell que você clica para editar no Editor de Spells.
Então precisamos atualizar essa criança para ele ler os valores novos.
Antes do End With ,que fica em cima do Spell_Changed(EditorIndex) = True , você adiciona isso aqui:
Segue Imagem: http://prntscr.com/fro1ub // http://prntscr.com/fro1ub
Com isso o Grosso do Cliente está pronto.
Vamos ao Servidor.
#########
Server - Side
#########
[4] Colocando as Variaveis do ModTypes
Como fizemos no Cliente, o servidor precisa estar "IGUAL!!!" viu?
Vá para o ModTypes, dentro dele procure por: Private Type SpellRec
Dentro dele, no FINAL! assim como foi posto no FINAL do Cliente, adicione:
Lembre-se que fica antes do END TYPES!!!
Agora acima do Private Type SpellRec, você adiciona isso aqui:
Pronto, ModTypes da parte de Spell terminado, jaja vamos voltar aqui ;3;
[5] Colocando a Transformação para funcionar!
Vamos ao ModCombat procurar pela.. Public Sub CastSpell
Uhm...Procure por: If DidCast Then
A Didcast quer dizer que se efetuou a Spell, ela teve exito em ser executada/lançada, e ela processa coisas como enviar o Resfriamento(cooldown), retirar mana e outras atualizações.
É nela que vamos trabalhar.
Dentro do If DidCast Then, abaixo dele obvio, adicione:
Certo, agora vamos processar e transformação!
[6] Adicionando o Processamento da Transformação.
Vá ao ModPlayer no final dele, adicione:
Agora vamos voltar ao ModTypes ;3
[7] Colocando os Temporários no ModTypes!
Voltando ao ModTypes procure por: Public Type TempPlayerRec
No final dela antes do End Types adicione: Transform As TempTransformRec
Acima do Public Type TempPlayerRec adicione :
Agora vamos dar um passeio pela do Player, procure por: Private Type PlayerRec
Dentro e no FINAL antes do End Types adicione:
#É algo que não é necessário ir para o Cliente e nem ser enviado para o Cliente, por isso não precisa conter em conjunto no cliente.
[8] Fazendo a Trans intervir nos Valores:
[8.a] Mudando no HP:
Procure a ModCombat, a Function GetPlayerMaxVital(ByVal Index As Long, ByVal Vital As Vitals) As Long
Ela é responsável por calcular TANTO o HP quanto o MP, Máximos!
Dentro disso aqui: Case HP
Você poem antes do Case MP! isso aqui:
Aplicando a Matematica base, ele fará com que o valor do Aumento do HP la da Spell Aumente em % o HP MAXIMO, assim se vc por 500 lá na criação da Trans, ele vai aumentar 500% do HP MAXIMO ATUAL.
Vamos fazer a mesma coisa no MP.
Antes do End Select, dentro do Case MP e no final do Case MP ainda... adicione:
Mesma coisa, vai aumentar o MP máximo em porcentagem de acordo com o valor da caixinha de MP.
[8.b] Modificando valores de "Poder (Dano)" e Defesa:
| DANO |
Dentro do ModCombat, procure por: Function GetPlayerDamage(ByVal Index As Long) As Long
Dentro dela no final, antes do End Sub adicione:
Assim o valor da spell trans vai aumentar em porcentagem o valor de DANO ATUAL geral.
| Defesas... |
Defesa é um tanto mais complicadinho, já que nem todas as engines contam com uma "defesa", então o que eu farei é um redutor de % de dano Recebido.
Se você deixar 100, então na transformação o Player estará IMUNE a dano recebido pela Try Comum.
Então você precisa ou criar uma sub de defesa, ou customizar isso.
- Contra Monstros: Procure pela : Public Sub TryNpcAttackPlayer
Dentro dela, antes de Call NpcAttackPlayer(MapNpcNum, Index, damage)
Adicione:
Dessa forma o dano que o player receberia, seria reduzido em % direto no valor do dano.
Então como falei, 100% seria reduzir 100% do valor do dano, anulando o dano recebido.
- Contra Players: Procure pela: Public Sub TryPlayerAttackPlayer(ByVal attacker As Long, ByVal Victim As Long,
No final dela, você encontrará: Call PlayerAttackPlayer(attacker, Victim,
Acima disso você adiciona:
Assim será o mesmo esquema, reduzirá o dano que passar por essa sub.
Alterações comuns de valores já feitos, agora vamos as Miscelanous ~
[9] Colocando o Tempo da Animação para Acabar e fazer a Limpeza, afinal nem tudo dura pra sempre.
Vá ao ModServerLoop, dentro dele procure a primeira sub mesmo a : Sub ServerLoop()
Ela é responsável por muito do processamento de tempos e de seu servidor.
Então vamos trabalhar nela,
procure por isso aqui bem no começo:
Abaixo disso ai você pode adicionar:
Com isso , ela já vai mandar pra ProcessSpellTransform, e ela vai passar pelo Switcher posto e fazer a limpeza da transformação.
Uffa... falta mais o que? uahshusa Ah! Vamos evitar erros ao logar e deslogar estando transformado.
[10] Evitando problemas ao Logar e Deslogar, Sprites e etc...
Procure pela: Sub JoinGame(ByVal Index As Long)
Dentro dela, no final, antes do End Sub coloque:
Creio que é isso, como enviamos pacotes de datas dentro da Subs de Processo de SpellTransforme, não é interessante por a call da Sub direto na Sub LeftGame()
Então, Dentro da Sub LeftGame() abaixo de: TempPlayer(Index).InGame = False
Adicione:
Assim é feita a limpeza no temporário.
Se trata de um "add-on", uma modificação, do sistema de Transformação que fora postado aqui por mim.
O Link para a Treta vai estar disponível abaixo uma vez que para ser posto isso aqui, será necessária a perfeita colocação do meu sistema passado.
Vamos lá.
##########
Ficha Técnica
##########
Nome do Sistema: Incremento de Sistema de Transformação - Agora por "Foto".
Nível de Dificuldade: Nenhum, já que basta você ler e copiar e colar ~~
Compatibilidade: QUALQUER EO ou CrystalShire.
Programas Necessários: Visual Basic 6
Sistemas necessários: https://mmorpgsbrasil.directorioforuns.com/t13-sistema-de-transformacao
#######
Função
#######
Do que se trata de fato essa modificação? Bem, você irá permitir a "transformação", decorrente o Clique de uma Imagem.
"Ah mas eu tenho medo...";
não tenha, vai ser fácil, verás!!!
########
Abaoti
########
-> Como vai funcionar?;
Você irá criar a Spell como normal, porém usando o "click" em uma das imagens, a spell será processada porém será extraido e usado apenas o valor da Transformação, para dar os fatores ao rapaz piruleta que usar.
-> Ah mas eu quero restrição, por classe Naruto, Saskure, Power Ranger.
Isso ai já é com você meu pequeno sucker of jaruto, dê seu jeito, monte a threat e tentaremos ajudar sempre que possibles.
-> Ah mas Profane responde ai no face, no discord, no skype, acessa aqui pra ver...
Ow god, assim nau. Monta a dúvida, que quem puder ajudar e auxiliar irá auxiliar se puder ué.
########
Observação
########
Este Sistema será montado em uma tela "grossa", um componente de Imagem qualquer, com outras imagens dentro para simular a área de "foto".
Eu sou usuária fervorosa de Dx8, e por ser uma modificação que estou disponibilizando a qualquer engine, então será feita de forma comum. Se você é usuário de Dx8, procure os tópicos a qual ensinam a montar telas, gui, buttons em dx8, e assim aplique o sistema.
########
Ao Sistema
########
[1] Criação da Tela de Imagens
- Indo ao FrmMain, onde rola o game, procure um Componente de Picture, e faça a telinha.
#Obs: Inicialmente é interessante que você, como sujeito malino e muitas vezes afobado, porém inexperiente, não tente de antemão se jogar num precipício que é querer fazer de uma vez só 10000 transformações e o carai a 4.
Porque? Porque ai você por não saber o que está fazendo ainda, vai acabar fazendo tudo errado como sempre. Tenha calma e entenda o que está fazendo.
- Deixe a Telinha mais o menos assim :
http://prntscr.com/fta0ip
Ai temos, coisas a mais como Labels para descrição e sinalização, mas como você provavelmente irá usar "Imagens", então fica a seu critério.
O Importante é saber que trataremos aqui de 3 Trans por "Foto", são elas, Oin, Ululu e Bjus (na boka)
[2] Nomeando os Componentes
#Pic de Fundo - Transformação
Name:picTrans
#Pic da Oin
Name: picTrans_1
#Pic da Ululu
Name: picTrans_2
#Pic da Bjus
Name: picTrans_3
#Obs: Ah formas mais decentes de se trabalhar com componentes, ainda mais quem irá usar muitos, e para variar. Mas isso você terá de tentar estudar sozinho, se é aplicar uma copia por index ao Componente; Mas como eu tenho que ensinar o básico e funcional, esteja por satisfeito amore < 3
[3] Parte Boa ;3 The logic
- Abra cada um dos picTrans_1/2/3; E dentro deles adicione:
Onde se tem o (x), substitua o X pelo numero da Imagem de transformação.
#Obs: NÃO é ainda a Transformação, e sim, apenas o Numero da Imagem do Botão. Trabalharemos Casos. Então se atente a isso.
- Agora vá ao ModGameLogic, e no final dele adicione:
[4] Empacotando
- Nossa sub de processamento está criada, e ela passará a fazer o pedido, mas esse pedido ainda não existe, vamos criar ele e mandar empacotar para sorrir.
Vá ao modClientTCP, no final dele adicione:
Agora, vá ao ModEnumerations e procure por:
Essa área de enumerations lista todos os pacotes possíveis, lançadas pelo cliente, então acima disso ai, adicione nosso pacote:
Ficaria assim: http://prntscr.com/fta7v4
[5] Recebendo esse pacote de delicias.
- Primeiro temos de deixar o ModEnumarations de acordo, ambos tem de estar na mesma ordem, é uma enumeração. Você embaralhar isso aqui, você terá uma vasta dor de cabeça. Então no server, modEnumerations adicione:
Acima do:
Vai ficar igual ao que fizemos no ModEnumerations do Client.
Agora vamos ao modHandleData, no Servidor.
Procure por isso aqui (estará bem no começo do Modulo);
No Fim dessa SUB, antes do END SUB; adicione:
Quando chegar o pacote do Cliente, relacionada ao nosso RequestTransPic, então ele vai mandar a leitura ser processada na sub do HandleTransPic.
Vamos agora Criar e trabalhar no HandleTransPic; No fim do ModHandleData, adicione:
Encerrado.
##############
Considerações Finais
##############
O Valor irá passar da caixa, para o select case do client, dps empacotado e enviado para o servidor analisar e processar a Trans de acordo com a Spell registrada com tal numero.
No mais é isso, continua ai o sistema de trans + buff;
Val val vai fazer um bom uso disso! < 3
Att
Créditos : Profane ~
#########
Ficha Técnica
#########
Nome do Sistema: Sistema de Transformação
Nível de Dificuldade: Nenhum já que você vai copiar e colar ;v ué k
Compatibilidade: Qualquer EO ou Crystal
Programa Necessário: Visual Basic 6
| Função |
- É uma Spell? Não exatamente, é algo decente. Será um Complemento a qual você vai poder aplicar a qualquer tipo de Spell. Mas porque? Porque eu sou acostumada a fazer coisas ilimitadas e abertas e não coisas para mentes fechadas.
Como funcionará? Você irá marcar apenas 1 caixinha, e em QUALQUER tipo de spell, você marca essa caixinha e configura a Transformação para QUALQUER tipo de Spell.
Isso libera que você faça uma Spell de DANO, e mesmo assim se Transforme.
OU de cura? mas porque?
Ué, Imagine você se transformando e acontecendo uma grande explosão ao mesmo tempo? Você se transforma e explode a area toda como efeito da sua transformação;
Ou mesmo você cura a area toda e se transforma em um Anjo Op com status aumentados ué uashuhsa, ser uma "Capacidade", algo "adicional" as spells abre um leque infundado de fusões.
| Observação |
Neste Sistema de Transformação eu estarei usando uma CrystalShire Comum, os códigos em nada serão diferentes das EO comum, então a compatibilidade é Global.
Porém diferente do aumento comum de Atributos, eu alterarei apenas 4 Valores.
Serão eles:
-HP
-MP
-DANO
-DEFESA
Você pode customizar e adicionar quantos quiser, EXP, REGEN, e o caralho a 4, basta você usar a lógica.
#########
Pedido
#########
Se for usar, seria interessante deixar os Créditos de onde você tirou esse sistema, digo a MMorpg! Traga mais pessoas para este meio xD Assim teremos mais mundos, e mais historias para viver.
#########
Adicional
#########
Sobre o Sistema, ninguém tem "integridade" sobre nada, é programação, o sistema não é meu, o sistema é de quem usa, eu sou apenas o instrumento a qual usou a cabeça para montar, porque qualquer um que seja capaz é capaz de montar.
Vamos ao Work.
#########
Client - Side
#########
[1] Preparando o Terreno.
Aqui iremos preparar a Form do Editor de Spells para a Transformação; No seu cliente, na frmEditor_Spell, crie uma area dessa forma: ( http://prntscr.com/frngwt ) - http://prntscr.com/frngwt
São 2 CheckBox, Labels para nomear as Áreas e 6 TextBox.
Preencha os Componentes com os Seguintes nomes:
#CheckBox de Transformação:
Name: chkHasTransform
#CheckBox de Mudar Sprite?
Name: chkChangeSprite
#textBox da Sprite
Name: txtTransSprite
MaxLenght: 3 'Observe isso aqui, é importante limitar para você não acabar pondo um valor absurdo!!
#TextBox do Tempo
Name: txtTransTime
#textBox do Hp
Name: txtTransHp
#textBox do Mp
Name: txtTransMp
#textBox do Poder
Name: txtTransPoder
#textBox do Defesa
Name: txtTransDefesa
Agora com nosso esquema montado vamos aos Scripts ;3
Acesse a área de Códigos da FrmEditor_Spells, basta clicar nela com o botão direito, e por CodeView
http://prntscr.com/frnkuq
Agora estamos na área de códigos da FrmEditor_Spells.
No fim dela adicione isso aqui:
https://pastebin.com/PcYu1EVy
https://pastebin.com/PcYu1EVy
Dentro do PasterBin, basta copiar e colar para o fim do seu FRMEDITOR_SPELLS!!!
[2] Preparando as Variáveis
Seguindo agora para o ModTypes, dentro do Cliente.
Aqui encontramos diversas classes, mas estamos procurando pela: Private Type SpellRec
No Fim dela, antes do End Type, no caso ainda "dentro" dela.
Adicione:
- Código:
Transform As SpellTransformRec
Adicionando isso, agora ACIMA!!!! da Private Type SpellRec adicione isso aqui:
- Código:
Private Type SpellTransformRec
HasTransform As Byte 'Está habilitada a transformação?
ChangeSprite As Byte 'Está habilitada a mudança de Sprite?
TransSprite As Long 'Valor que salva o numero da transformação.
TransTimer As Long 'Salva o Tempo de Transformação em Segundos.
HpPercent As Long 'Guarda o % de Acrescimo de Hp
MpPercent As Long 'Guarda a % de Acrescimo de Mp
PoderPercent As Long 'Guarda a % de Acrescimo de Poder
DefesaPercent As Long 'Guarda a % de Acrescimo de Defesa
End Type
Pronto, modTypes do Cliente está pronto! Falta por a mesma coisa no Servidor, mas faremos quando chegar no servidor.
[3] Cuidando do Inicializador do Editor de Spells.
No ModGameEditors, procure por : Public Sub SpellEditorInit()
Dentro dele é que vamos trabalhar agora, ele é responsável por fazer a "load" de cada spell que você clica para editar no Editor de Spells.
Então precisamos atualizar essa criança para ele ler os valores novos.
Antes do End With ,que fica em cima do Spell_Changed(EditorIndex) = True , você adiciona isso aqui:
Segue Imagem: http://prntscr.com/fro1ub // http://prntscr.com/fro1ub
- Código:
'Trans MoonShine by Profane
If Spell(EditorIndex).Transform.HasTransform > 0 Then
.chkHasTransform.Value = 1
Else
.chkHasTransform.Value = 0
End If
If Spell(EditorIndex).Transform.ChangeSprite > 0 Then
.chkChangeSprite.Value = 1
Else
.chkChangeSprite.Value = 0
End If
.txtTransSprite.Text = Spell(EditorIndex).Transform.TransSprite
.txtTransTime.Text = Spell(EditorIndex).Transform.TransTimer
.txtTransHp.Text = Spell(EditorIndex).Transform.HpPercent
.txtTransMp.Text = Spell(EditorIndex).Transform.MpPercent
.txtTransPoder.Text = Spell(EditorIndex).Transform.PoderPercent
.txtTransDefesa.Text = Spell(EditorIndex).Transform.DefesaPercent
Com isso o Grosso do Cliente está pronto.
Vamos ao Servidor.
#########
Server - Side
#########
[4] Colocando as Variaveis do ModTypes
Como fizemos no Cliente, o servidor precisa estar "IGUAL!!!" viu?
Vá para o ModTypes, dentro dele procure por: Private Type SpellRec
Dentro dele, no FINAL! assim como foi posto no FINAL do Cliente, adicione:
- Código:
Transform As SpellTransformRec
Lembre-se que fica antes do END TYPES!!!
Agora acima do Private Type SpellRec, você adiciona isso aqui:
- Código:
Private Type SpellTransformRec
HasTransform As Byte 'Está habilitada a transformação?
ChangeSprite As Byte 'Está habilitada a mudança de Sprite?
TransSprite As Long 'Valor que salva o numero da transformação.
TransTimer As Long 'Salva o Tempo de Transformação em Segundos.
HpPercent As Long 'Guarda o % de Acrescimo de Hp
MpPercent As Long 'Guarda a % de Acrescimo de Mp
PoderPercent As Long 'Guarda a % de Acrescimo de Poder
DefesaPercent As Long 'Guarda a % de Acrescimo de Defesa
End Type
Pronto, ModTypes da parte de Spell terminado, jaja vamos voltar aqui ;3;
[5] Colocando a Transformação para funcionar!
Vamos ao ModCombat procurar pela.. Public Sub CastSpell
Uhm...Procure por: If DidCast Then
A Didcast quer dizer que se efetuou a Spell, ela teve exito em ser executada/lançada, e ela processa coisas como enviar o Resfriamento(cooldown), retirar mana e outras atualizações.
É nela que vamos trabalhar.
Dentro do If DidCast Then, abaixo dele obvio, adicione:
- Código:
If Spell(SpellNum).Transform.HasTransform > 0 Then 'Verifica se a Spell tem Transformação Habilitada
Call ProcessSpellTransform(index, SpellNum, True) 'Processar Transformação
End If
Certo, agora vamos processar e transformação!
[6] Adicionando o Processamento da Transformação.
Vá ao ModPlayer no final dele, adicione:
- Código:
Public Sub ProcessSpellTransform(ByVal Index As Long, ByVal SpellNum As Long, ByVal Switcher As Boolean)
'Sub Responsável por aplicar a Transformação.
Dim SpriteValue As Long
'Prevent Scripts
If Index <= 0 Or Index > MAX_PLAYERS Then Exit Sub
If SpellNum <= 0 Or SpellNum > MAX_SPELLS Then Exit Sub
'Re-Verificar se é Spell de Trans
If Spell(SpellNum).Transform.HasTransform <= 0 Then Exit Sub
'Caso o Switcher seja Falso, então enviar para a limpeza da Transformação.
If Not Switcher Then
Call ClearSpellTransform(Index)
Exit Sub
End If
'Observação e Proteção do Sistema , forma Lógic
If TempPlayer(Index).Transform.Transformed > 0 Then 'Player ja está transformado?
If TempPlayer(Index).Transform.Transformed = SpellNum Then
'Se é a Mesma Transformação, então apenas repor o Tempo de trans e NÃO ADICIONAR AINDA MAIS!
TempPlayer(Index).Transform.TransformDuration = Spell(SpellNum).Transform.TransTimer '(Cada valor 1 no timer, confere 1s de transformação.)
TempPlayer(Index).Transform.TransformTimer = GetTickCount 'Atualiza o GetTick
Call PlayerMsg(Index, "Você mantém a transformação atual.", Cyan) 'Avisar Player que ele reestabeleceu o tempo da Transformação.
Exit Sub 'Exitar, ja que não tem mais anda a ser processado.
Else 'Else então se trata de outra Transformação e não a mesma que estamos usando.
'Aqui trataremos de anti acumulo de uma forma lógica, Fazer a limpeza do Player e apos isso atualizar os valores.
Call ClearSpellTransform(Index) 'Vai fazer a limpeza e continuar processando.
End if
End If
'Hora de Trabalhar a transformação.
If Spell(SpellNum).Transform.ChangeSprite > 0 Then 'Spell Tem Mudança de Sprite pela Trans? se Sim
'Processar a Mudança.
Player(Index).MySelfSprite = GetPlayerSprite(Index) 'Adiciona o valor da minha sprite atual ao MySelfSprite.
SpriteValue = Spell(SpellNum).Transform.TransSprite 'Adiciona o Valor da Sprite a uma Variavel Interna
Call SetPlayerSprite(Index, SpriteValue) 'Modifica a Sprite do Index
SavePlayer Index
End If
'caso tenha mudança de sprite ela já vai ter entrado, e salvo a sprite base natural.
'Abaixo vamos a mudança de atribuições e estabelecer os tempos.
TempPlayer(Index).Transform.Transformed = SpellNum 'Adiciona o Numero da Transformação no Temp
TempPlayer(Index).Transform.TransformDuration = Spell(SpellNum).Transform.TransTimer '(Cada valor 1 no timer, confere 1s de transformação.)
TempPlayer(Index).Transform.TransformTimer = GetTickCount 'Atualiza o GetTick
TempPlayer(Index).Transform.TempHpUp = Spell(SpellNum).Transform.HpPercent
TempPlayer(Index).Transform.TempMpUp = Spell(SpellNum).Transform.MpPercent
TempPlayer(Index).Transform.TempPoderUp = Spell(SpellNum).Transform.PoderPercent
TempPlayer(Index).Transform.TempDefesaUp = Spell(SpellNum).Transform.DefesaPercent
'usando o TempPlayer, você guarda o valor em uma variavel temporária assim não fica presa ao jogador e evita certos erros ;3
'ainda mais porque é algo temporario a transformação.
SendPlayerData Index
Call PlayerMsg(Index, "Você se transformou!", Cyan) 'Avisar ao Player
End Sub
Public Sub ClearSpellTransform(ByVal Index As Long)
'Sub Responsável pela Limpeza das Transformações.
'Prevent Scripts
If Index <= 0 Or Index > MAX_PLAYERS Then Exit Sub
'Verificar se o Player tem mesmo uma Transformação ou se tem a sprite alterada por uma transformação prévia.
If TempPlayer(Index).Transform.Transformed > 0 Or Player(Index).MySelfSprite > 0 Then
'dessa forma nem toda trans precisa ter mudança de Sprite e ja serve como um sistema de buff xD
'Hora da Limpeza
If Player(Index).MySelfSprite > 0 Then 'Caso tenha sprite trocada ~
Call SetPlayerSprite(Index, Player(Index).MySelfSprite) 'colocar sprite myself de volta uffa.
Player(Index).MySelfSprite = 0
SavePlayer Index
End If
'Limpar valores Temporarios
TempPlayer(Index).Transform.TransformDuration = 0
TempPlayer(Index).Transform.TransformTimer = 0
TempPlayer(Index).Transform.TempHpUp = 0
TempPlayer(Index).Transform.TempMpUp = 0
TempPlayer(Index).Transform.TempPoderUp = 0
TempPlayer(Index).Transform.TempDefesaUp = 0
TempPlayer(Index).Transform.Transformed = 0
SendPlayerData Index
'Coloque um call PlayerMsg caso queira avisar algo ao Player.
End If
End Sub
Agora vamos voltar ao ModTypes ;3
[7] Colocando os Temporários no ModTypes!
Voltando ao ModTypes procure por: Public Type TempPlayerRec
No final dela antes do End Types adicione: Transform As TempTransformRec
Acima do Public Type TempPlayerRec adicione :
- Código:
Public Type TempTransformRec
Transformed As Long 'Salva o Numero da Spell que o Transformou, sendo maior que zero, então está.
TransformTimer As Long
TransformDuration As Long
TempHpUp As Long
TempMpUp As Long
TempPoderUp As Long
TempDefesaUp As Long
End Type
Agora vamos dar um passeio pela do Player, procure por: Private Type PlayerRec
Dentro e no FINAL antes do End Types adicione:
- Código:
'Sprite da Transformação
MySelfSprite As Long
#É algo que não é necessário ir para o Cliente e nem ser enviado para o Cliente, por isso não precisa conter em conjunto no cliente.
[8] Fazendo a Trans intervir nos Valores:
[8.a] Mudando no HP:
Procure a ModCombat, a Function GetPlayerMaxVital(ByVal Index As Long, ByVal Vital As Vitals) As Long
Ela é responsável por calcular TANTO o HP quanto o MP, Máximos!
Dentro disso aqui: Case HP
Você poem antes do Case MP! isso aqui:
- Código:
GetPlayerMaxVital = GetPlayerMaxVital + ((GetPlayerMaxVital / 100) * TempPlayer(Index).Transform.TempHpUp)
Aplicando a Matematica base, ele fará com que o valor do Aumento do HP la da Spell Aumente em % o HP MAXIMO, assim se vc por 500 lá na criação da Trans, ele vai aumentar 500% do HP MAXIMO ATUAL.
Vamos fazer a mesma coisa no MP.
Antes do End Select, dentro do Case MP e no final do Case MP ainda... adicione:
- Código:
GetPlayerMaxVital = GetPlayerMaxVital + ((GetPlayerMaxVital / 100) * TempPlayer(Index).Transform.TempMpUp)
Mesma coisa, vai aumentar o MP máximo em porcentagem de acordo com o valor da caixinha de MP.
[8.b] Modificando valores de "Poder (Dano)" e Defesa:
| DANO |
Dentro do ModCombat, procure por: Function GetPlayerDamage(ByVal Index As Long) As Long
Dentro dela no final, antes do End Sub adicione:
- Código:
GetPlayerDamage = GetPlayerDamage + ((getPlayerDamage / 100) * TempPlayer(Index).Transform.TempPoderUp)
Assim o valor da spell trans vai aumentar em porcentagem o valor de DANO ATUAL geral.
| Defesas... |
Defesa é um tanto mais complicadinho, já que nem todas as engines contam com uma "defesa", então o que eu farei é um redutor de % de dano Recebido.
Se você deixar 100, então na transformação o Player estará IMUNE a dano recebido pela Try Comum.
Então você precisa ou criar uma sub de defesa, ou customizar isso.
- Contra Monstros: Procure pela : Public Sub TryNpcAttackPlayer
Dentro dela, antes de Call NpcAttackPlayer(MapNpcNum, Index, damage)
Adicione:
- Código:
Damage = Damage - ((Damage / 100) * TempPlayer(Index).Transform.TempDefesaUp)
Dessa forma o dano que o player receberia, seria reduzido em % direto no valor do dano.
Então como falei, 100% seria reduzir 100% do valor do dano, anulando o dano recebido.
- Contra Players: Procure pela: Public Sub TryPlayerAttackPlayer(ByVal attacker As Long, ByVal Victim As Long,
No final dela, você encontrará: Call PlayerAttackPlayer(attacker, Victim,
Acima disso você adiciona:
- Código:
Damage = Damage - ((Damage / 100) * TempPlayer(Victim).Transform.TempDefesaUp)
Assim será o mesmo esquema, reduzirá o dano que passar por essa sub.
Alterações comuns de valores já feitos, agora vamos as Miscelanous ~
[9] Colocando o Tempo da Animação para Acabar e fazer a Limpeza, afinal nem tudo dura pra sempre.
Vá ao ModServerLoop, dentro dele procure a primeira sub mesmo a : Sub ServerLoop()
Ela é responsável por muito do processamento de tempos e de seu servidor.
Então vamos trabalhar nela,
procure por isso aqui bem no começo:
- Código:
If Tick > tmr25 Then
For i = 1 To Player_HighIndex
If IsPlaying(i) Then
Abaixo disso ai você pode adicionar:
- Código:
' checkar e processar tempo da Transformação
If TempPlayer(i).Transform.Transformed > 0 Then
If GetTickCount > TempPlayer(i).Transform.TransformTimer + (TempPlayer(i).Transform.TransformDuration * 1000) Then
Call ProcessSpellTransform(i, TempPlayer(i).Transform.Transformed, False) 'Acabou o tempo, mandar limpar a bagaça.
End If
End If
Com isso , ela já vai mandar pra ProcessSpellTransform, e ela vai passar pelo Switcher posto e fazer a limpeza da transformação.
Uffa... falta mais o que? uahshusa Ah! Vamos evitar erros ao logar e deslogar estando transformado.
[10] Evitando problemas ao Logar e Deslogar, Sprites e etc...
Procure pela: Sub JoinGame(ByVal Index As Long)
Dentro dela, no final, antes do End Sub coloque:
- Código:
'Transformação, passar limpeza
Call ClearSpellTransform(Index)
Creio que é isso, como enviamos pacotes de datas dentro da Subs de Processo de SpellTransforme, não é interessante por a call da Sub direto na Sub LeftGame()
Então, Dentro da Sub LeftGame() abaixo de: TempPlayer(Index).InGame = False
Adicione:
- Código:
TempPlayer(Index).Transform.TempDefesaUp = 0
TempPlayer(Index).Transform.TempHpUp = 0
TempPlayer(Index).Transform.TempMpUp = 0
TempPlayer(Index).Transform.TempPoderUp = 0
TempPlayer(Index).Transform.TransformDuration = 0
TempPlayer(Index).Transform.Transformed = 0
TempPlayer(Index).Transform.TransformTimer = 0
Assim é feita a limpeza no temporário.
############
Encerramento
############
Encerramento
############
O Sistema é totalmente customizado e editável, a atender qualquer outros padrões e estilos. Mas cabe a você também usar um pouco da sua mente, e sentar, estudar, ler, em quase tudo tentei deixar a logica bem explicita e o porque daquela linha existir, assim você pode ler e começar a entender.
"ah mais eu quero mais valores..." Basta você adicionar mais valores.
Outro detalhe, é necessário que você faça a limpeza das spells e dos jogadores, para evitar possiveis falhas de resguardo.
"ah mais eu quero mais valores..." Basta você adicionar mais valores.
Outro detalhe, é necessário que você faça a limpeza das spells e dos jogadores, para evitar possiveis falhas de resguardo.
Se trata de um "add-on", uma modificação, do sistema de Transformação que fora postado aqui por mim.
O Link para a Treta vai estar disponível abaixo uma vez que para ser posto isso aqui, será necessária a perfeita colocação do meu sistema passado.
Vamos lá.
##########
Ficha Técnica
##########
Nome do Sistema: Incremento de Sistema de Transformação - Agora por "Foto".
Nível de Dificuldade: Nenhum, já que basta você ler e copiar e colar ~~
Compatibilidade: QUALQUER EO ou CrystalShire.
Programas Necessários: Visual Basic 6
Sistemas necessários: https://mmorpgsbrasil.directorioforuns.com/t13-sistema-de-transformacao
#######
Função
#######
Do que se trata de fato essa modificação? Bem, você irá permitir a "transformação", decorrente o Clique de uma Imagem.
"Ah mas eu tenho medo...";
não tenha, vai ser fácil, verás!!!
########
Abaoti
########
-> Como vai funcionar?;
Você irá criar a Spell como normal, porém usando o "click" em uma das imagens, a spell será processada porém será extraido e usado apenas o valor da Transformação, para dar os fatores ao rapaz piruleta que usar.
-> Ah mas eu quero restrição, por classe Naruto, Saskure, Power Ranger.
Isso ai já é com você meu pequeno sucker of jaruto, dê seu jeito, monte a threat e tentaremos ajudar sempre que possibles.
-> Ah mas Profane responde ai no face, no discord, no skype, acessa aqui pra ver...
Ow god, assim nau. Monta a dúvida, que quem puder ajudar e auxiliar irá auxiliar se puder ué.
########
Observação
########
Este Sistema será montado em uma tela "grossa", um componente de Imagem qualquer, com outras imagens dentro para simular a área de "foto".
Eu sou usuária fervorosa de Dx8, e por ser uma modificação que estou disponibilizando a qualquer engine, então será feita de forma comum. Se você é usuário de Dx8, procure os tópicos a qual ensinam a montar telas, gui, buttons em dx8, e assim aplique o sistema.
########
Ao Sistema
########
- Client Side
[1] Criação da Tela de Imagens
- Indo ao FrmMain, onde rola o game, procure um Componente de Picture, e faça a telinha.
#Obs: Inicialmente é interessante que você, como sujeito malino e muitas vezes afobado, porém inexperiente, não tente de antemão se jogar num precipício que é querer fazer de uma vez só 10000 transformações e o carai a 4.
Porque? Porque ai você por não saber o que está fazendo ainda, vai acabar fazendo tudo errado como sempre. Tenha calma e entenda o que está fazendo.
- Deixe a Telinha mais o menos assim :
http://prntscr.com/fta0ip
Ai temos, coisas a mais como Labels para descrição e sinalização, mas como você provavelmente irá usar "Imagens", então fica a seu critério.
O Importante é saber que trataremos aqui de 3 Trans por "Foto", são elas, Oin, Ululu e Bjus (na boka)
[2] Nomeando os Componentes
#Pic de Fundo - Transformação
Name:picTrans
#Pic da Oin
Name: picTrans_1
#Pic da Ululu
Name: picTrans_2
#Pic da Bjus
Name: picTrans_3
#Obs: Ah formas mais decentes de se trabalhar com componentes, ainda mais quem irá usar muitos, e para variar. Mas isso você terá de tentar estudar sozinho, se é aplicar uma copia por index ao Componente; Mas como eu tenho que ensinar o básico e funcional, esteja por satisfeito amore < 3
[3] Parte Boa ;3 The logic
- Abra cada um dos picTrans_1/2/3; E dentro deles adicione:
- Código:
Call ProcessTransByPic(X)
Onde se tem o (x), substitua o X pelo numero da Imagem de transformação.
#Obs: NÃO é ainda a Transformação, e sim, apenas o Numero da Imagem do Botão. Trabalharemos Casos. Então se atente a isso.
- Agora vá ao ModGameLogic, e no final dele adicione:
- Código:
'Sub que processará e pedirá o envio da Transformação
Public Sub ProcessTransByPic(ByVal PicTrans As Byte) 'Usando Byte que vai até 255, 255 ta bom não?
Dim SpellNum As Long 'Vai Guardar o Valor da Spell
'Hora de Brincar.
Select Case PicTrans 'Vai pegar o Numero substituido pelo X e aplicar aqui
Case 1 'oin
SpellNum = 1 'Numero da Spell a qual Clicando na Caixinha 1 irá processar a Trans
Case 2 'ululul
SpellNum = 2 'Numero da Spell a qual Clicando na Caixinha 2 irá processar a Trans
Case 3 'bju na boka
SpellNum = 3 'Numero da Spell a qual Clicando na Caixinha 3 irá processar a Trans
Case Else
SpellNum = 0
End Select
'SpellNum assumirá o numero da Spell que está guardada a Trans, então você so precisa substituir pelo numero
'da Spell no Editor.
'Enviar pedido de Transformação, porém analisando antes os limites!!!
'Caso Exista (Não seja zero ou menor), e também não seja maior que o limite então ~
If SpellNum > 0 And SpellNum < MAX_SPELLS Then
Call RequestTransByPic(SpellNum) 'Enviará o pedido da Trans
End If
End Sub
[4] Empacotando
- Nossa sub de processamento está criada, e ela passará a fazer o pedido, mas esse pedido ainda não existe, vamos criar ele e mandar empacotar para sorrir.
Vá ao modClientTCP, no final dele adicione:
- Código:
Public Sub RequestTransByPic(ByVal SpellNum As Long)
Dim Buffer As clsBuffer
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
Set Buffer = New clsBuffer
Buffer.WriteLong CRequestTransPic 'Enumeração do Pacote!
Buffer.WriteLong SpellNum 'Numero da Spell que saiu lá do Processamento
SendData Buffer.ToArray()
Set Buffer = Nothing
' Error handler
Exit Sub
errorhandler:
HandleError "RequestTransByPic", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Agora, vá ao ModEnumerations e procure por:
- Código:
' Make sure CMSG_COUNT is below everything else
CMSG_COUNT
End Enum
Essa área de enumerations lista todos os pacotes possíveis, lançadas pelo cliente, então acima disso ai, adicione nosso pacote:
- Código:
CRequestTransPic
Ficaria assim: http://prntscr.com/fta7v4
- Código:
https://image.prntscr.com/image/so-6OIK3QgWnR9Snija-aQ.png
- Server Side
[5] Recebendo esse pacote de delicias.
- Primeiro temos de deixar o ModEnumarations de acordo, ambos tem de estar na mesma ordem, é uma enumeração. Você embaralhar isso aqui, você terá uma vasta dor de cabeça. Então no server, modEnumerations adicione:
- Código:
CRequestTransPic
Acima do:
- Código:
' Make sure CMSG_COUNT is below everything else
CMSG_COUNT
End Enum
Vai ficar igual ao que fizemos no ModEnumerations do Client.
Agora vamos ao modHandleData, no Servidor.
Procure por isso aqui (estará bem no começo do Modulo);
- Código:
Public Sub InitMessages()
No Fim dessa SUB, antes do END SUB; adicione:
- Código:
'Trans Pic vinda do Client
HandleDataSub(CRequestTransPic) = GetAddress(AddressOf HandleTransPic)
Quando chegar o pacote do Cliente, relacionada ao nosso RequestTransPic, então ele vai mandar a leitura ser processada na sub do HandleTransPic.
Vamos agora Criar e trabalhar no HandleTransPic; No fim do ModHandleData, adicione:
- Código:
'Processamento do Pacote de Trans, vindo do Client.
Private Sub HandleTransPic(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Dim SpellNum As Long
Dim Buffer As clsBuffer
Set Buffer = New clsBuffer
Buffer.WriteBytes Data()
SpellNum = Buffer.ReadLong 'Alargada a Leitura - Numero da Spell que veio do Client
'Passar nos Limites do Servidor:
If SpellNum <= 0 Or SpellNum > MAX_SPELLS Then Exit Sub 'Exitar se for causar um Script out of Range
'O Numero é viavel, então vamos trabalhar ele.
Set Buffer = Nothing 'Encerrado o Pacote;
'Enviar transformaçãu (ih FIM!)
If Spell(SpellNum).Transform.HasTransform > 0 Then 'Verifica se a Spell tem Transformação Habilitada
Call ProcessSpellTransform(Index, SpellNum, True) 'Processar Transformação
End If
End Sub
Encerrado.
##############
Considerações Finais
##############
O Valor irá passar da caixa, para o select case do client, dps empacotado e enviado para o servidor analisar e processar a Trans de acordo com a Spell registrada com tal numero.
No mais é isso, continua ai o sistema de trans + buff;
Val val vai fazer um bom uso disso! < 3
Att
Créditos : Profane ~