Oin!
É com muita insatisfação, que eu trago esse sistema. Mas porque insatisfação?
Ué, eu acompanho e ajudo em mais de 10 projetos, a qual todos parecem querer esse sistema,
me trazerem inúmeros erros e isso é um saco ta respondendo sempre a mesma coisa, para algo que foi feito de "forma errada", não exatamente errada, mas de forma "burra".
Espero encarecidamente que aqueles que forem usar, aprendam a ter noção das coisas mais "direitas", e que não se contentem com o "pouco", se querem algo decente no projeto de vocês, vocês precisam buscar e ir atrás de meliorar ;3
Esse é o Intuito da Aldeia, formar vocês para que façam projetos Bons para nós!
Primeiro dê Play nisso aqui:
https://www.youtube.com/watch?v=Gs89xBcfgKI
Vamos ao Sistema!
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.
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.
#########
Server - Side
#########
[4] Colocando as Variaveis do ModTypes
Como fizemos no Cliente, o servidor precisa estar "INGUAL!!!" viu? nhonc!
Vá para o ModTypes, dentro dele procure por: Private Type SpellRec
Dentro delo, 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 aputaria 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 primera 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.
######
Desabafo
######
É com muita insatisfação, que eu trago esse sistema. Mas porque insatisfação?
Ué, eu acompanho e ajudo em mais de 10 projetos, a qual todos parecem querer esse sistema,
me trazerem inúmeros erros e isso é um saco ta respondendo sempre a mesma coisa, para algo que foi feito de "forma errada", não exatamente errada, mas de forma "burra".
Espero encarecidamente que aqueles que forem usar, aprendam a ter noção das coisas mais "direitas", e que não se contentem com o "pouco", se querem algo decente no projeto de vocês, vocês precisam buscar e ir atrás de meliorar ;3
Esse é o Intuito da Aldeia, formar vocês para que façam projetos Bons para nós!
Primeiro dê Play nisso aqui:
https://www.youtube.com/watch?v=Gs89xBcfgKI
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 Aldeia! 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 "INGUAL!!!" viu? nhonc!
Vá para o ModTypes, dentro dele procure por: Private Type SpellRec
Dentro delo, 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
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 primera 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
############
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.
Maiores duvidas eu e a Aldeia estaremos aqui para alumiar vocês.
Bjus da Fada Linda < 3
Bom jogos e noites viradas desenvolvendo turma!
Creio que eu não tenha esquecido de nada ;c