[Autor: Cayoda ]
É 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
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):
algumas tarefas mais display esquerdo. O abaixo é um exemplo de como contar o Conjurador e de Alvo que a benção foi conjurada:
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:
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
Em seguida, para adicionar as informações da habilidade para o usuário, busque por:
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:
O passo final é fazer uso da doença. Isto é feito em User_UpdateModStats. Por exemplo:
É 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
- 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
- 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
- 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)
- 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
- 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
- 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
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
- 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
- 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
- Código:
MinhaSkill As Byte
- 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
- Código:
With SkID
.Bless = 1
.Heal = 2
.IronSkin = 3
.Protection = 4
.Strengthen = 5
.Warcry = 6
.SpikeField = 7
.SummonBandit = 8
End With
- 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
Em seguida, para adicionar as informações da habilidade para o usuário, busque por:
- Código:
Type Skills
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 ***
- 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 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