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:
Agora de 2 cliques na scrlSilence e adicione:
Aperte ctrl+F e agora pesquise na modEnumerations procure por:
Abaixo coloque:
Agora na modGameEditors encontre:
Adicione abaixo:
Agora na modGameLogic dentro da sub castspell procure:
E coloque embaixo:
na Modglobals procure por:
Embaixo coloque:
na modHandledata procure:
E adicione embaixo:
Ainda na modHandledata procure por:
E abaixo adicione:
Na modType, na private type spellrec procure:
E embaixo coloque:
E SUBSTITUA por:
Ainda na modCombat procure por:
E coloque embaixo:
Agora na modEnumerations procure por:
E adicione abaixo:
no modServerLoop procure:
Embaixo coloque:
no modServerTCP procure:
E adicione embaixo:
Agora na modTypes dentro da Public Type TempPlayerRec, procure por:
E embaixo adicione:
Pronto, agora o sistema esta completo, qualquer duvida ou erro poste abaixo...
Abra o client.vbp e na frmEditor_spell crie uma scrollbar, e uma label com as seguintes propriedades:
ScrollBarName: scrlSilence
LabelName: lblSilenceCaption: 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