Suporte ao desenvolvimento de jogos!


    Adicionando Skills no vbGORE

    Compartilhe
    avatar
    FilipeJF
    Aldeia Friend
    Aldeia Friend

    Medalhas :
    Mensagens : 1914
    Créditos : 134

    Adicionando Skills no vbGORE

    Mensagem por FilipeJF em Ter Mar 22, 2011 1:14 pm

    Bom, olá a todos primeiramente. Hoje vou postar um tutorial básico do vbGore de como adicionar Skills nele, agora vamos lá.

    É recomendado antes de ler tem uma noção básica de VB6



    Adicionando Skills no vbGORE



    Em vbGORE, habilidades devem ser totalmente codificadas - sem script ou qualquer coisa do tipo. Isso é feito por causa da flexibilidade. Habilidades "scriptadas" são muito limitadas, enquanto codifica-las torna melhor o seu resultado. O problema que vem com esta, porém, é a dificuldade.

    Tenha em mente que as habilidades são tão diversas no que se realizar, a partir de buffs e cura à ataques de dano e talvez até mesmo efeitos de alteração no mapa. Todo o código mostrado aqui é apenas uma sugestão sobre como determinadas tarefas podem ser realizadas. Não basta "copiar e colar" o código pensando que vai trabalhar em todas as condições.

    Escrevendo o código da magia

    A parte mais importante do código é o código da magia em si. Estas são todas realizadas em Competências modulo Skills. A maioria dos feitiços do vbGORE padrão oferecem suporte para a conjuração de PC-> NPC, NPC-> NPC e PC-> PC. Além disso, as constantes são adicionadas ao topo para definir facilmente certos valores. Estes não são necessárias, mas é recomendado para a facilidade de uso. Tudo sobre seu estilo pessoal, no entanto.




    Checando as Condições necessárias para soltar a skill

    A Primeira parte a se fazer para uma skill funcionar é checar as condições necessárias, isto depende de como será a conjuração de PC -> NPC ou PC->PC, Conjurações PC->PC terá mais condições a se checar.

    Vamos começar certificando-se o usuário está mesmo no estado para lançar o feitiço, ou ser alvo do feitiço, e checar se eles estão online (ou o NPC está vivo). Por exemplo, a partir do PC-PC

    Código:

        If UserList(CasterIndex).flags.UserLogged = 0 Then Exit Sub
        If UserList(TargetIndex).flags.UserLogged = 0 Then Exit Sub
        If UserList(CasterIndex).Counters.SpellExhaustion > 0 Then Exit Sub

    O Proximo passo é checar se o usuário que esta conjurando a habilidade realmente a tem ou conheçe a habilidade. Checar isso em um NPC é desnecessário.

    Código:

        'Checamos se o usuário conheçe a skill
        If UserList(CasterIndex).KnownSkills(SkID.Bless) = 0 Then
            Data_Send ToIndex, CasterIndex, cMessage(37).Data
            Exit Sub
      End If

    Após isso, certifique-se que o conjurador (NPC ou PC) tenha MP , força e HP o suficiente para usar a habilidade se for o caso for necessário. Por exemplo:

    Código:

        'Checamos se o o conjurador tem Mana/hp/força o suficiente para conjurar
        If UserList(CasterIndex).Stats.BaseStat(SID.MinMAN) < Int(UserList(CasterIndex).Stats.ModStat(SID.Mag) * Bless_Cost) Then
            Data_Send ToIndex, CasterIndex, cMessage(38).Data
            Exit Sub
        End If

    Para os usuários, muitas vezes é importante, para o caso, checar a distância antes da habilidade ser usada se for "target-based":

    Código:

        'Checamos se tem um alvo válido a distância
        If Server_CheckTargetedDistance(CasterIndex) = 0 Then Exit Sub




    Usando a Habilidade

    Sabemos agora que o usuário passa todas as condições para usar a habilidade. A partir daqui, vamos assumir que a habilidade será utilizada com êxito, de modo a reduzir Estatísticas do usuário se necessário (isto é, MP/mana):

    Código:

        'Reduzimos a Mana
        UserList(CasterIndex).Stats.BaseStat(SID.MinMAN) = UserList(CasterIndex).Stats.BaseStat(SID.MinMAN) - Int(UserList(CasterIndex).Stats.ModStat(SID.Mag) * Bless_Cost)

    Para doenças ou magias de buff, como uma maldição ou bênção, muitas vezes você vai querer certificar-se que o usuário não tiver a habilidade aplicado sobre ele com um forte poder. A razão para isso é que você não quer que alguém seja capaz de ter um fraco buff conjurado a eles por seus inimigos para cancelar seu buff forte. Uma boa idéia é permitir que a habilidade para ser conjurado sobre eles de qualquer forma se a um conjurado que lhes está prestes a esgotar-se - isto permitirá que os usuários para evitar que "unbuffed time" entre o velho buff, quando se esgota, e um novo é conjurado. O exemplo abaixo não faz isso, no entanto:

    Código:

        'Conjuramos sobre o alvo
        If UserList(TargetIndex).Counters.BlessCounter > 0 Then
            If UserList(TargetIndex).Skills.Bless > UserList(CasterIndex).Stats.ModStat(SID.Mag) Then

    Em seguida está a lidar com os ícones exibidos acima do conjurador e do alvo, se houver. O mais comum é sobre o esgotamento do período (tempo que deve ser aguardado entre Conjurações). O abaixo é um exemplo que irá exibir o ícone da "Benção":

    Código:

        'Mostra o Icone do Buff(Isto se ele ainda não existir no alvo)
        If UserList(TargetIndex).Skills.Bless = 0 Then
            ConBuf.PreAllocate 4
            ConBuf.Put_Byte DataCode.Server_IconBlessed
            ConBuf.Put_Byte 1
            ConBuf.Put_Integer UserList(TargetIndex).Char.CharIndex
            Data_Send ToMap, CasterIndex, ConBuf.Get_Buffer, UserList(CasterIndex).Pos.Map, PP_StatusIcons
        End If

    E agora faremos o período de exaustão da habilidade e a mostramos como ícone

    Código:

    'Add the spell exhaustion and display it
        UserList(CasterIndex).Counters.SpellExhaustion = timeGetTime  Bless_Exhaust
        ConBuf.PreAllocate 4
        ConBuf.Put_Byte DataCode.Server_IconSpellExhaustion
        ConBuf.Put_Byte 1
        ConBuf.Put_Integer UserList(CasterIndex).Char.CharIndex
        Data_Send ToMap, CasterIndex, ConBuf.Get_Buffer, UserList(CasterIndex).Pos.Map, PP_StatusIcons

    Tenha em mente que os tempos são calculadas como CurrentTime Lenght (em milissegundos). Isso ajuda a reduzir a carga da CPU para o temporizador baseado em cálculos, juntamente com uma precisão muito melhor.

    algumas tarefas mais display esquerdo. O abaixo é um exemplo de como contar o Conjurador e de Alvo que a benção foi conjurada:

    Código:

    'Envia a mensagem para o conjurador
        If TargetIndex <> CasterIndex Then
            ConBuf.PreAllocate 3  Len(UserList(TargetIndex).Name)
            ConBuf.Put_Byte DataCode.Server_Message
            ConBuf.Put_Byte 40
            ConBuf.Put_String UserList(TargetIndex).Name
            Data_Send ToIndex, CasterIndex, ConBuf.Get_Buffer
     
            'Vira o Conjurador para o Alvo
            UserList(CasterIndex).Char.Heading = Server_FindDirection(UserList(CasterIndex).Pos, UserList(TargetIndex).Pos)
            UserList(CasterIndex).Char.HeadHeading = UserList(CasterIndex).Char.Heading
            ConBuf.PreAllocate 4
            ConBuf.Put_Byte DataCode.User_Rotate
            ConBuf.Put_Integer UserList(CasterIndex).Char.CharIndex
            ConBuf.Put_Byte UserList(CasterIndex).Char.Heading
            Data_Send ToMap, CasterIndex, ConBuf.Get_Buffer, UserList(CasterIndex).Pos.Map
     
        End If
     
        'Manda a Mensagem para o Alvo
        ConBuf.PreAllocate 5  Len(UserList(CasterIndex).Name)
        ConBuf.Put_Byte DataCode.Server_Message
        ConBuf.Put_Byte 41
        ConBuf.Put_String UserList(CasterIndex).Name
        ConBuf.Put_Integer UserList(CasterIndex).Skills.Bless
        Data_Send ToIndex, TargetIndex, ConBuf.Get_Buffer

    Agora, para Mostrar os efeitos. Isto tem que ser tratado mais sobre o cliente que vamos chegar mais tarde. Se você deseja exibir um efeito de mágica, você terá que passar a ID da habilidade, e os parâmetros específicos para essa habilidade. Muitas vezes, este é apenas o índex do personagem do alvo e conjurador:

    Código:

    'Mostra o Efeito
        ConBuf.PreAllocate 6
        ConBuf.Put_Byte DataCode.User_CastSkill
        ConBuf.Put_Byte SkID.Bless
        ConBuf.Put_Integer UserList(CasterIndex).Char.CharIndex
        ConBuf.Put_Integer UserList(TargetIndex).Char.CharIndex
        Data_Send ToMap, CasterIndex, ConBuf.Get_Buffer, UserList(CasterIndex).Pos.Map, PP_DisplaySpell

    Finalmente, a última coisa é o som. O som exige apenas o envio do número de som (como 6 para 6.wav), juntamente com a posição do tile:

    Código:

    'Toca o Efeito do Som
        ConBuf.PreAllocate 4
        ConBuf.Put_Byte DataCode.Server_PlaySound3D
        ConBuf.Put_Byte Bless_Sfx
        ConBuf.Put_Byte UserList(CasterIndex).Pos.X
        ConBuf.Put_Byte UserList(CasterIndex).Pos.Y
        Data_Send ToPCArea, CasterIndex, ConBuf.Get_Buffer, , PP_Sound




    Adicionando o ID da Skill

    A ID da Habilidade (SkillID) é o que é usado para deixar o servidor e o cliente dizer uns aos outros o que a habilidade está sendo usada sem passar o nome. A SkillID é realizada no módulo DataIDs, que faz parte do Código Comum, o que significa que o cliente e o servidor utilizam o mesmo módulo. Se você alterar o código no servidor, por exemplo, será mostrado no cliente quando você carregá-lo.

    Encontre Isso no Módulo:

    Código:

    Public Type SkillID
        Bless As Byte
        Protection As Byte
        Strengthen As Byte
        Warcry As Byte
        Heal As Byte
        IronSkin As Byte
        SpikeField As Byte
        SummonBandit As Byte
    End Type
    Public SkID As SkillID  'Skill IDs
    Public Const NumSkills As Byte = 8

    Em qualquer lugar abaixo do Public Type SkillID, Adicione a sua habilidade

    Código:

    MinhaSkill As Byte

    Certifique-se de atualizar o NumSkills que é o constante com o número de habilidades que você tem. Na maioria dos casos, este será o mesmo número que existem variáveis no UDT SkillID.

    Código:
    Public Const NumSkills As Byte = 9 'Tire o 9 Para o maior numero de habilidades que o seu jogo tem(quando criar alguma modifique-a

    Agora aplicar o valor para a nova habilidade neste método

    Código:
        With SkID
            .Bless = 1
            .Heal = 2
            .IronSkin = 3
            .Protection = 4
            .Strengthen = 5
            .Warcry = 6
            .SpikeField = 7
            .SummonBandit = 8
        End With

    Agora Abaixo da Oitava Skill adicione:
    Código:
    .MinhaSkill = 9




    SkillIDto...

    Enquanto o servidor só precisa saber o número SkillID e habilidade que se refere à subs, o cliente precisa ser capaz de converter a SkillID no nome de habilidade e GRH para exibir as informações sobre a habilidade do cliente. Estes subs são Engine_SkillIDtoGRHID e Engine_SkillIDtoSkillName. O uso para eles são muito auto-explicativo, você só precisa digitar o número e o nome da habilidade Grh .

    Depois de seguir estes passos, se o usuário conhece a habilidade, eles devem ser capazes de vê-lo em sua lista de seleção de habilidade, que pode ser levantada por Shift Mouse Esquerdo em um slot bar rápida.




    Extendendo as Skills

    Status Negativos e Contadores de Tempo


    Uma parte enorme sobre feitiços é sobre doenças e temporizadores. Por exemplo, se você quiser ter um feitiço Maldição que reduz todas as estatísticas do usuário e tem a duração de 5 minutos, vai precisar de um temporizador variável para dizer que tem a duração de 5 minutos, e uma variável de dizer ao dizer ao servidor a magia está no o usuário, e como a magia é poderosa.

    No Servidor. Procure por

    Código:
    Type UserCounters

    Você vai ver um monte de contadores de habilidade aqui já. Como afirmado anteriormente, o valor armazenado neste contador não é quanto tempo dura a habilidade, mas em que momento a habilidade irá acabar, que é encontrado por timeGetTime Length, e é representado em milissegundos. Manter todos os contadores As Long.

    Em seguida, para adicionar as informações da habilidade para o usuário, busque por:

    Código:
    Type Skills

    Isso Indica poder da habilidade. Como usar e calcular esse valor. Algumas habilidades, como a Iron Skill, está apenas ligado ou desligado, enquanto os outros são mantidos pelo seu valor, onde um maior valor de potência = maior Poder.

    Em seguida, você quer ter a certeza que está a verificar para ver se o contador se esgote. Muitos exemplos disso podem ser encontrados se você olhar para o código:
    Código:
    *** Update the counters ***

    Um Exemplo para a habilidade Benção

    Código:
    If UserList(UserIndex).Counters.BlessCounter > 0 Then
                                If UserList(UserIndex).Counters.BlessCounter < timeGetTime Then
                                    UserList(UserIndex).Skills.Bless = 0
                                    ConBuf.PreAllocate 4
                                    ConBuf.Put_Byte DataCode.Server_IconBlessed
                                    ConBuf.Put_Byte 0
                                    ConBuf.Put_Integer UserList(UserIndex).Char.CharIndex
                                    Data_Send ToMap, UserIndex, ConBuf.Get_Buffer, UserList(UserIndex).Pos.Map, PP_StatusIcons
                                    User_UpdateModStats UserIndex
                                End If
                            End If

    O conceito básico deste é verificar se o feitiço acabou, define o valor de habilidade para 0 (desativar a doença), desliga o ícone e atualização de suas estatísticas.

    O passo final é fazer uso da doença. Isto é feito em User_UpdateModStats. Por exemplo:

    Código:

            'Protection
            If UserList(UserIndex).Skills.Protect > 0 Then
                Log "User_UpdateModStats: Updating effects of skill/spell Protection", CodeTracker '//\\LOGLINE//\\
                .ModStat(SID.DEF) = .ModStat(SID.DEF)  UserList(UserIndex).Skills.Protect
            End If

    Isso deve ser auto-explicativo. :-) Certifique-se de usar ModStat e BaseStat adequadamente.

    Créditos~~
    Cayoda


    _________________

    avatar
    NeapØn~
    Membro Ativo
    Membro Ativo

    Mensagens : 253
    Créditos : 69

    Re: Adicionando Skills no vbGORE

    Mensagem por NeapØn~ em Ter Mar 22, 2011 3:07 pm

    Belo tutorial pq e osso joga sem skill neh Very Happy


    _________________
    avatar
    FilipeJF
    Aldeia Friend
    Aldeia Friend

    Medalhas :
    Mensagens : 1914
    Créditos : 134

    Re: Adicionando Skills no vbGORE

    Mensagem por FilipeJF em Ter Mar 22, 2011 3:14 pm

    kkkk! jogo sem Skill Fica Podre igual Habbo é ahauhau! Tá que deve ter sido foda criar um jogo tipo habbo, mas é paia mesmo.


    _________________

    avatar
    NeapØn~
    Membro Ativo
    Membro Ativo

    Mensagens : 253
    Créditos : 69

    Re: Adicionando Skills no vbGORE

    Mensagem por NeapØn~ em Ter Mar 22, 2011 3:26 pm

    oooo i como e paia ( falei do jogo nao dos que jogam U-u)


    _________________

    Conteúdo patrocinado

    Re: Adicionando Skills no vbGORE

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Seg Dez 17, 2018 2:34 pm