MMORPG Brasil - Suporte e recursos para desenvolvedores de MMORPGs.

Forum destinado a criação de MMORPGs e abrindo espaço para todas engines MMORPG maker.

Bem vindo ao MMORPGBR Fórum
Visite nossa Faq, crie tópicos, seja ativo para participar de nossa comunidade, faça a diferença e não seja um sangue suga, se gostar de um tópico não custa reputar, veja nossas Regras para não se prejudicar.

Você não está conectado. Conecte-se ou registre-se

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

#1 Sistema de Transformação em Ter Out 17, 2017 7:23 pm

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:

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
############


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.

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: http://mmorpgsbrasil.forumeiros.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
Cliente pronto, agora vamos ao Servidor.

  • 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 ~


_________________
Juntos Por Só Um Motivo.
Ver perfil do usuário http://mmorpgsbrasil.forumeiros.com

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum