Suporte ao desenvolvimento de jogos!


    [EO] - Silenciar adversário

    Compartilhe
    avatar
    newbie123
    Semi-Experiente
    Semi-Experiente

    Mensagens : 128
    Créditos : 34

    [EO] - Silenciar adversário

    Mensagem por newbie123 em Seg Ago 15, 2016 7:22 pm

    Temos aqui um sistema bem simples, com o objetivo de que ao player ser atingido por tal skill, o mesmo fica silenciado, por seja não poderia usar nenhum poder por determinado tempo.(O poder não silencia NPC, só fazer editar de acordo com o sistema de NPC soltar spell, para que funcione também contra NPC.

    Abra o client.vbp e na frmEditor_spell crie uma scrollbar, e uma label com as seguintes propriedades:


    ScrollBar
    Name: scrlSilence

    Label
    Name: lblSilence
    Caption: Silence: Nenhum


    Agora de 2 cliques na scrlSilence e adicione:
    Código:
    ' If debug mode, handle error then exit out
        If Options.Debug = 1 Then On Error GoTo errorhandler

        If scrlSilence.Value > 0 Then
            lblSilence.Caption = "Silence: " & scrlSilence.Value & "s"
        Else
            lblSilence.Caption = "Silence: Nenhum"
        End If
        Spell(EditorIndex).Silence = scrlSilence.Value
        
        ' Error handler
        Exit Sub
    errorhandler:
        HandleError "scrlSilence_Change", "frmEditor_Spell", Err.Number, Err.Description, Err.Source, Err.HelpContext
        Err.Clear
        Exit Sub

    Aperte ctrl+F e agora pesquise na modEnumerations procure por:

    Código:
    SPartyVitals


    Abaixo coloque:

    Código:
    SSilence

    Agora na modGameEditors encontre:

    Código:
    .scrlStun.Value = Spell(EditorIndex).StunDuration

    Adicione abaixo:

    Código:
    .scrlSilence.Value = Spell(EditorIndex).Silence

    Agora na modGameLogic dentro da sub castspell procure:
    Código:
    If spellslot < 1 Or spellslot > MAX_PLAYER_SPELLS Then
            Exit Sub
        End If

    E coloque embaixo:

    Código:
    If Silence > 0 Then Exit Sub

    na Modglobals procure por:

    Código:
    Public StunDuration As Long

    Embaixo coloque:

    Código:
    Public Silence As Long

    na modHandledata procure:

    Código:
    HandleDataSub(SPartyVitals) = GetAddress(AddressOf HandlePartyVitals)

    E adicione embaixo:

    Código:
    HandleDataSub(SSilence) = GetAddress(AddressOf HandleSilence)

    Ainda na modHandledata procure por:
    Código:
    Private Sub HandleStunned(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar 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.WriteBytes Data()
        
        StunDuration = Buffer.ReadLong
        
        Set Buffer = Nothing
        
        ' Error handler
        Exit Sub
    errorhandler:
        HandleError "HandleStunned", "modHandleData", Err.Number, Err.Description, Err.Source, Err.HelpContext
        Err.Clear
        Exit Sub
    End Sub

    E abaixo adicione:
    Código:
    Private Sub HandleSilence(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar 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.WriteBytes Data()
        
        Silence = Buffer.ReadLong
        
        Set Buffer = Nothing
        
        ' Error handler
        Exit Sub
    errorhandler:
        HandleError "HandleSilence", "modHandleData", Err.Number, Err.Description, Err.Source, Err.HelpContext
        Err.Clear
        Exit Sub
    End Sub

    Na modType, na private type spellrec procure:

    Código:
    StunDuration As Long

    E embaixo coloque:

    Código:
    Silence As Long


    Acabamos no cliente, agora vamos para o Server.vbp


    No modCombat procure:
    Código:
    If spellnum > 0 Then
                If Spell(spellnum).StunDuration > 0 Then StunPlayer victim, spellnum
                ' DoT
                If Spell(spellnum).Duration > 0 Then
                    AddDoT_Player victim, spellnum, attacker
                End If
                End If
            End If



    E SUBSTITUA por:

    Código:
    If spellnum > 0 Then
                If Spell(spellnum).StunDuration > 0 Then StunPlayer victim, spellnum
                If Spell(spellnum).Silence > 0 Then SilencePlayer victim, spellnum
                ' DoT
                If Spell(spellnum).Duration > 0 Then
                    AddDoT_Player victim, spellnum, attacker
                End If
                End If
            End If

    Ainda na modCombat procure por:
    Código:
    Public Sub StunPlayer(ByVal index As Long, ByVal spellnum As Long)
        ' check if it's a stunning spell
        If Spell(spellnum).StunDuration > 0 Then
            ' set the values on index
            TempPlayer(index).StunDuration = Spell(spellnum).StunDuration
            TempPlayer(index).StunTimer = GetTickCount
            ' send it to the index
            SendStunned index
            ' tell him he's stunned
            PlayerMsg index, "You have been stunned.", BrightRed
        End If
    End Sub

    E coloque embaixo:
    Código:
    Public Sub SilencePlayer(ByVal index As Long, ByVal spellnum As Long)

        If Spell(spellnum).Silence > 0 Then
            
            TempPlayer(index).Silence = Spell(spellnum).Silence
            TempPlayer(index).SilenceTimer = GetTickCount
            
            SendSilence index
            
            PlayerMsg index, "Você foi silenciado.", BrightRed
        End If
    End Sub

    Agora na modEnumerations procure por:

    Código:
    SPartyVitals

    E adicione abaixo:

    Código:
    SSilence

    no modServerLoop procure:
    Código:
    If TempPlayer(i).StunDuration > 0 Then
                            If GetTickCount > TempPlayer(i).StunTimer + (TempPlayer(i).StunDuration * 1000) Then
                                TempPlayer(i).StunDuration = 0
                                TempPlayer(i).StunTimer = 0
                                SendStunned i
                            End If
                        End If

    Embaixo coloque:
    Código:
    If TempPlayer(i).Silence > 0 Then
                            If GetTickCount > TempPlayer(i).SilenceTimer + (TempPlayer(i).Silence * 1000) Then
                                TempPlayer(i).Silence = 0
                                TempPlayer(i).SilenceTimer = 0
                                SendSilence i
                            End If
                        End If

    no modServerTCP procure:
    Código:
    Sub SendStunned(ByVal index As Long)
        Dim Buffer As clsBuffer
        
        Set Buffer = New clsBuffer
        Buffer.WriteLong SStunned
        Buffer.WriteLong TempPlayer(index).StunDuration
        
        SendDataTo index, Buffer.ToArray()
        
        Set Buffer = Nothing
    End Sub

    E adicione embaixo:
    Código:
    Sub SendSilence(ByVal index As Long)
        Dim Buffer As clsBuffer
        
        Set Buffer = New clsBuffer
        Buffer.WriteLong SSilence
        Buffer.WriteLong TempPlayer(index).Silence
        
        SendDataTo index, Buffer.ToArray()
        
        Set Buffer = Nothing
    End Sub

    Agora na modTypes dentro da Public Type TempPlayerRec, procure por:

    Código:
    StunDuration As Long

    E embaixo adicione:
    Código:
    SilenceTimer As Long
        Silence As Long

    Pronto, agora o sistema esta completo, qualquer duvida ou erro poste abaixo...

    Creditos ~ Newbie123
    avatar
    Hashirama
    Membro Ativo
    Membro Ativo

    Mensagens : 394
    Créditos : 126

    Re: [EO] - Silenciar adversário

    Mensagem por Hashirama em Ter Ago 16, 2016 5:41 pm

    Não testei ainda, mas vou dar 1+crédito por ainda ajudar com sistemas pro EO
    =D


    _________________
    Apoia nosso projeto? use nossa assinatura

    Código:
    [color=#ff9900][size=10]Eu Apoio Esse Projeto![/size][/color]
    [url=http://www.aldeiarpg.com/t11184-naruto-shinobi-online][img]http://i.imgur.com/B9M26iU.png[/img][/url]

    avatar
    Profane ~
    Administrador
    Administrador

    Mensagens : 664
    Créditos : 114

    Re: [EO] - Silenciar adversário

    Mensagem por Profane ~ em Qua Ago 17, 2016 5:06 am

    Excelente Movimentação Newbie123.

    Interessante e poderá ajudar a muitos : 3


    _________________
    "If you don't belong here, just build a place where you do."
    avatar
    Kies
    Membro de Honra
    Membro de Honra

    Mensagens : 994
    Créditos : 111

    Ficha do personagem
    Nível: 1
    Vida:
    30/30  (30/30)
    Energia:
    0/0  (0/0)

    Re: [EO] - Silenciar adversário

    Mensagem por Kies em Qua Ago 17, 2016 2:47 pm

    Nossa man adorei o siatema, não testei ainda pois to sem PC mais assim que eu pegar ele de volta eu testo, esse sistema é muito bom no pvp
    avatar
    Spooky
    Membro Ativo
    Membro Ativo

    Mensagens : 262
    Créditos : 23

    Re: [EO] - Silenciar adversário

    Mensagem por Spooky em Sab Ago 20, 2016 11:58 am

    Opa, vlw pela contribuição, Newbie, é um sistema bastante interessante e dá pra fazer diversas modificações... +1 cred


    _________________
    Sign

    Sign¹:

    Sign²:

    Conteúdo patrocinado

    Re: [EO] - Silenciar adversário

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Dom Abr 22, 2018 7:16 pm