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
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
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.
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:
Para os usuários, muitas vezes é importante, para o caso, checar a distância antes da habilidade ser usada se for "target-based":
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):
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:
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":
E agora faremos o período de exaustão da habilidade e a mostramos como ícone
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:
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:
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:
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:
Em qualquer lugar abaixo do Public Type SkillID, Adicione a sua habilidade
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.
Agora aplicar o valor para a nova habilidade neste método
Agora Abaixo da Oitava Skill adicione:
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
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:
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:
Um Exemplo para a habilidade Benção
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:
Isso deve ser auto-explicativo. :-) Certifique-se de usar ModStat e BaseStat adequadamente.
Créditos~~
Cayoda
É 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