Bom não é de hoje que muitos novatos e" já iniciados" pedem o sistema de elementos, e ele está bem a frente do mesmos e não percebem, o sistema de vila, pode ser usado como uma boa base para este, desde já dou os créditos a Thales12, por ter feito o sistema de vilas.
Chega de papo agora irei explicar como o tutorial será feito, será dividido em partes a primeira parte será postada agora e depois será editada com a segunda parte e em seguida com a terceira.
1º Parte: Base do sistema, ao player se registrar já tem os 3 elementos porém só o 1º a escolha ao criar o char e a mostra por comando(opcional)
2º Parte: Item Requer Elemento e ganha elemento (só ganha o segundo)
3º Parte: Spell Requer Elemento e mais coisas que irei decidir.
4º Parte: Terceiro elemento ganho da junção do 1º e 2º (ao ganhar o 2º, o terceiro é ganho como se fosse uma kekkei genkai)
Créditos da primeira parte:
Thales12 (Por fazer o sistema de vila)
Kross (Por simplesmente passar pra 3 elementos)
Ah quando virá a próxima parte?
R= Pode vir de hoje à 8 dias.
Esse tutorial foi testado?
R= Sim, na EO 2.0 zerada e com correções de bugs encontrada em outro fórum.
Off: Caso eu tenha errado, por favor me informar. Ou se tiver algum pedido pode falar também.
Chega de papo agora irei explicar como o tutorial será feito, será dividido em partes a primeira parte será postada agora e depois será editada com a segunda parte e em seguida com a terceira.
2º Parte: Item Requer Elemento e ganha elemento (só ganha o segundo)
3º Parte: Spell Requer Elemento e mais coisas que irei decidir.
4º Parte: Terceiro elemento ganho da junção do 1º e 2º (ao ganhar o 2º, o terceiro é ganho como se fosse uma kekkei genkai)
- 1º Parte(Créditos á Thales12) -
- Client-Side:
Vá na Sub PlayerRec e abaixo de:
- Código:
PK As Byte
Adicione:
- Código:
Elemento1 As Byte
Elemento2 As Byte
Elemento3 As Byte
Na frmMenu, na Sub Form_Load() abaixo de:
- Código:
For i = 0 To UBound(tmpArray)
lblNews.Caption = lblNews.Caption & tmpArray(i) & vbNewLine
Next
Adicione:
- Código:
Elemento1 = 1
Elemento2 = 1
Elemento3 = 1
Pronto agora faremos a parte no qual o player escolherá o elemento.
Na frmMenu, na picCharacter adicione 3 Labels e 1 picturebox com as seguintes propriedades:
- Código:
PictureBox:
Name: picElemento
Appearence: 0 - Flat
Autosize: True
BorderStyle: 0 - None
1º Label:
Name: lblElemento
Caption: Katon
2 Label
Name:lblElementoAnt
Caption: <
3º Label
Name:lblElementoProx
Caption: >
Organize da forma que desejar a minha ficou da seguinte maneira:
Dê dois clicks na lblElementoProx e adicione:
- Código:
If Elemento1 >= 5 Then
Elemento1 = 1
Else
Elemento1 = Elemento1 + 1
End If
picElemento.Picture = LoadPicture(App.Path & "\data files\graphics\elementos\Elementos" & Elemento1 & ".jpg")
If Elemento1 = 1 Then
lblElemento.Caption = "Katon"
ElseIf Elemento1 = 2 Then
lblElemento.Caption = "Doton"
ElseIf Elemento1 = 3 Then
lblElemento.Caption = "Suiton"
ElseIf Elemento1 = 4 Then
lblElemento.Caption = "Fuuton"
ElseIf Elemento1 = 5 Then
lblElemento.Caption = "Raiton"
End If
- Código:
If Elemento1 <= 1 Then
Elemento1 = 5
Else
Elemento1 = Elemento1 - 1
End If
picElemento.Picture = LoadPicture(App.Path & "\data files\graphics\elementos\Elementos" & Elemento1 & ".jpg")
If Elemento1 = 1 Then
lblElemento.Caption = "Katon"
ElseIf Elemento1 = 2 Then
lblElemento.Caption = "Doton"
ElseIf Elemento1 = 3 Then
lblElemento.Caption = "Suiton"
ElseIf Elemento1 = 4 Then
lblElemento.Caption = "Fuuton"
ElseIf Elemento1 = 5 Then
lblElemento.Caption = "Raiton"
End If
Troque a Sub SendAddChar por:
Public Sub SendAddChar(ByVal name As String, ByVal Sex As Long, ByVal ClassNum As Long, ByVal Sprite As Long, ByVal Elemento1 As Byte, Elemento2 As Byte, Elemento3 As Byte)
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.WriteLong CAddChar
buffer.WriteString name
buffer.WriteLong Sex
buffer.WriteLong ClassNum
buffer.WriteLong Sprite
buffer.WriteByte Elemento1
buffer.WriteByte Elemento2
buffer.WriteByte Elemento3
SendData buffer.ToArray()
Set buffer = Nothing
' Error handler
Exit Sub
errorhandler:
HandleError "SendAddChar", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Obs: Caso tenha sistemas adicionados que mexem com a sub, é somente adicionar as partes que estão em vermelho, por isso não coloquei em code.
Procure por:
- Código:
Call SetPlayerPK(i, buffer.ReadLong)
- Código:
Player(i).Elemento1 = buffer.ReadByte
Player(i).Elemento2 = buffer.ReadByte
Player(i).Elemento3 = buffer.ReadByte
Na Sub MenuState procure por:
- Código:
If frmMenu.optMale.Value Then
Call SendAddChar(frmMenu.txtCName, SEX_MALE, frmMenu.cmbClass.ListIndex + 1, newCharSprite)
Else
Call SendAddChar(frmMenu.txtCName, SEX_FEMALE, frmMenu.cmbClass.ListIndex + 1, newCharSprite)
End If
Troque para:
If frmMenu.optMale.Value Then
Call SendAddChar(frmMenu.txtCName, SEX_MALE, frmMenu.cmbClass.ListIndex + 1, newCharSprite, Elemento1, Elemento2, Elemento3)
Else
Call SendAddChar(frmMenu.txtCName, SEX_FEMALE, frmMenu.cmbClass.ListIndex + 1, newCharSprite, Elemento1, Elemento2, Elemento3)
End If
Obs: Caso tenha sistemas que mexa com tal código, é somente adicionar as partes que coloquei em vermelho.
E para finalizar o Client, no final do ModGlobals, Adicione:
- Código:
Public Elemento1 As Byte
Public Elemento2 As Byte
Public Elemento3 As Byte
- Server-Side:
Troque a Sub AddChar por:
Sub AddChar(ByVal index As Long, ByVal Name As String, ByVal Sex As Byte, ByVal ClassNum As Long, ByVal Sprite As Long, ByVal Elemento1 As Byte, Elemento2 As Byte, Elemento3 As Byte)
Dim f As Long
Dim n As Long
Dim spritecheck As Boolean
If LenB(Trim$(Player(index).Name)) = 0 Then
spritecheck = False
Player(index).Name = Name
Player(index).Sex = Sex
Player(index).Class = ClassNum
Player(index).Elemento1 = Elemento1
Player(index).Elemento2 = Elemento2
Player(index).Elemento3 = Elemento3
If Player(index).Sex = SEX_MALE Then
Player(index).Sprite = Class(ClassNum).MaleSprite(Sprite)
Else
Player(index).Sprite = Class(ClassNum).FemaleSprite(Sprite)
End If
Player(index).Level = 1
For n = 1 To Stats.Stat_Count - 1
Player(index).stat(n) = Class(ClassNum).stat(n)
Next n
Player(index).Dir = DIR_DOWN
Player(index).Map = START_MAP
Player(index).x = START_X
Player(index).y = START_Y
Player(index).Dir = DIR_DOWN
Player(index).Vital(Vitals.HP) = GetPlayerMaxVital(index, Vitals.HP)
Player(index).Vital(Vitals.MP) = GetPlayerMaxVital(index, Vitals.MP)
' set starter equipment
If Class(ClassNum).startItemCount > 0 Then
For n = 1 To Class(ClassNum).startItemCount
If Class(ClassNum).StartItem(n) > 0 Then
' item exist?
If Len(Trim$(Item(Class(ClassNum).StartItem(n)).Name)) > 0 Then
Player(index).Inv(n).Num = Class(ClassNum).StartItem(n)
Player(index).Inv(n).Value = Class(ClassNum).StartValue(n)
End If
End If
Next
End If
' set start spells
If Class(ClassNum).startSpellCount > 0 Then
For n = 1 To Class(ClassNum).startSpellCount
If Class(ClassNum).StartSpell(n) > 0 Then
' spell exist?
If Len(Trim$(Spell(Class(ClassNum).StartSpell(n)).Name)) > 0 Then
Player(index).Spell(n) = Class(ClassNum).StartSpell(n)
End If
End If
Next
End If
' Append name to file
f = FreeFile
Open App.path & "\data\accounts\charlist.txt" For Append As #f
Print #f, Name
Close #f
Call SavePlayer(index)
Exit Sub
End If
End Sub
Obs: Caso tenha algum sistema envolvendo o código citado, somente adicionar a parte em vermelho.
No final da ModGlobals adicione:
- Código:
Public Elemento1 As Byte
Public Elemento2 As Byte
Public Elemento3 As Byte
Na Sub HandleAddChar procure por:
- Código:
Dim n as Long
Abaixo adicione:
- Código:
Dim Elemento1 As Byte
Dim Elemento2 As Byte
Dim Elemento3 As Byte
Ainda na sub, procure por:
- Código:
Sprite = buffer.ReadLong
Abaixo adicione:
- Código:
Elemento1 = buffer.ReadByte
Elemento2 = buffer.ReadByte
Elemento3 = buffer.ReadByte
No modHandleData procure por:
- Código:
' Everything went ok, add the character
Call AddChar(index, Name, Sex, Class, Sprite)
Troque para:
' Everything went ok, add the character
Call AddChar(index, Name, Sex, Class, Sprite, Elemento1, Elemento2, Elemento3)
Obs: Caso tenha algum sistema que envolva o código mostrado, somente adicionar as partes em vermelho.
No modServerTCP procure por:
- Código:
buffer.WriteLong GetPlayerPK(index)
Abaixo adicione:
- Código:
buffer.WriteByte Player(index).Elemento1
buffer.WriteByte Player(index).Elemento2
buffer.WriteByte Player(index).Elemento3
Na Type PlayerRec abaixo de PK As Byte adicione:
- Código:
Elemento1 As Byte
Elemento2 As Byte
Elemento3 As Byte
Créditos da primeira parte:
Thales12 (Por fazer o sistema de vila)
Kross (Por simplesmente passar pra 3 elementos)
Ah quando virá a próxima parte?
R= Pode vir de hoje à 8 dias.
Esse tutorial foi testado?
R= Sim, na EO 2.0 zerada e com correções de bugs encontrada em outro fórum.
Off: Caso eu tenha errado, por favor me informar. Ou se tiver algum pedido pode falar também.