Bem a logica desse sistema de ajuda o player a adicionar uma quantia de pontos bem mais rápido
Vamos ao tutorial
Cliente
Vá ate a modEnumerations e aperte ctrl + f e procure por:
- Código:
CUseStatPoint
E ABAIXO você coloca:
- Código:
CCommandStatPoint
Agora na modClientTCP procure pela sub:
- Código:
Sub SendTrainStat(ByVal StatNum As Byte)
ABAIXO do End Sub voce coloca
- Código:
Sub SendCommandTrainStat(ByVal StatNum As Byte, ByVal Quantity As Long)
Dim Buffer As clsBuffer
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
If Val(Quantity) > MAX_LONG Then
Exit Sub
End If
Set Buffer = New clsBuffer
Buffer.WriteLong CCommandStatPoint
Buffer.WriteByte StatNum
Buffer.WriteLong Quantity
SendData Buffer.ToArray()
Set Buffer = Nothing
' Error handler
Exit Sub
errorhandler:
HandleError "SendCommandTrainStat", "modClientTCP", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Agora vamos criar o Distribuidor rsrs
Crie uma picture na frmMain com o nome de picDistribuidor e deixe o visible False
Dentro da picture você cria 5 commandbuttons, 1 textbox, 2 labels
vamos as propriedades de cada uma:
as 5 commandButton você poe o nome de cmdAddPontos você poe o nome deles de acordo com seu index
Index 0 name: Strength
Index 1 name: Endurance
Index 2 name: Intelligence
Index 3 name: Agility
Index 4 name: Willpower
depois dê dois clicks no cmdAddPontos, pode ser qualquer um dos 5 e coloque isso dentro
a textbox você poe o nome de txtAddPontos
a text dele voce deixa ou 0 ou limpo fica a tua escolha
as 2 labels uma com o nome de lblPontos e outra com o nome de lblFechar
label 1
Name:lblFechar
Caption:Fechar
label 2
name:lblPontos
Caption:Pontos:
Index 1 name: Endurance
Index 2 name: Intelligence
Index 3 name: Agility
Index 4 name: Willpower
depois dê dois clicks no cmdAddPontos, pode ser qualquer um dos 5 e coloque isso dentro
- Código:
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
Select Case Index
Case 0
If IsNumeric(txtAddPontos.text) Then
SendCommandTrainStat 1, txtAddPontos.text
Else
Call AddText("coloque somente numeros na caixa", BrightBlue)
End If
Case 1
If IsNumeric(txtAddPontos.text) Then
SendCommandTrainStat 2, txtAddPontos.text
Else
Call AddText("coloque somente numeros na caixa", BrightBlue)
End If
Case 2
If IsNumeric(txtAddPontos.text) Then
SendCommandTrainStat 3, txtAddPontos.text
Else
Call AddText("coloque somente numeros na caixa", BrightBlue)
End If
Case 3
If IsNumeric(txtAddPontos.text) Then
SendCommandTrainStat 4, txtAddPontos.text
Else
Call AddText("coloque somente numeros na caixa", BrightBlue)
End If
Case 4
If IsNumeric(txtAddPontos.text) Then
SendCommandTrainStat 5, txtAddPontos.text
Else
Call AddText("coloque somente numeros na caixa", BrightBlue)
End If
End Select
' Error handler
Exit Sub
errorhandler:
HandleError "cmdLevel_Click", "frmMain", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
a textbox você poe o nome de txtAddPontos
a text dele voce deixa ou 0 ou limpo fica a tua escolha
as 2 labels uma com o nome de lblPontos e outra com o nome de lblFechar
label 1
Name:lblFechar
Caption:Fechar
label 2
name:lblPontos
Caption:Pontos:
dê dois clicks na lblFechar e coloque
- Código:
picDistribuidor.visible = false
Bem no fim é pra ficar mais ou menos assim ó
na modHandleData procure por:
- Código:
frmMain.lblPoints.Caption = GetPlayerPOINTS(MyIndex)
e ABAIXO coloque:
- Código:
frmMain.lblPontos.Caption = "Pontos: " & GetPlayerPOINTS(MyIndex)
Agora vamos ate modInput e procurar por:
- Código:
' Banning a player
Case "/ban"
e ACIMA disto você poe:
- Código:
Case "/distribuir"
frmMain.picDistribuidor.Visible = True
Cliente terminado kk agora vamos ao servidor
Server
Va ate a modEnumerations e aperte ctrl + f e procure por:
- Código:
CUseStatPoint
ABAIXO você coloca:
- Código:
CCommandStatPoint
depois na modHandleData procure por:
- Código:
HandleDataSub(CUseStatPoint) = GetAddress(AddressOf HandleUseStatPoint)
e ABAIXO você coloca
- Código:
HandleDataSub(CCommandStatPoint) = GetAddress(AddressOf HandleCommandStatPoint)
depois procure pela sub:
- Código:
Sub HandleUseStatPoint(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
e ABAIXO do end sub coloque:
- Código:
' ::::::::::::::::::::::::::
' :: Command stats packet ::
' ::::::::::::::::::::::::::
Sub HandleCommandStatPoint(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Dim PointType As Byte
Dim Val As Long
Dim Buffer As clsBuffer
Dim sMes As String
Dim i As Long
Set Buffer = New clsBuffer
Buffer.WriteBytes Data()
PointType = Buffer.ReadByte 'CLng(Parse(1))
Val = Buffer.ReadLong
Set Buffer = Nothing
' Prevent hacking
If (PointType < 0) Or (PointType > Stats.Stat_Count) Then
Exit Sub
End If
' Check if player has the indicated value
If Val > GetPlayerPOINTS(index) Or Val <= 0 Then
PlayerMsg index, "Você não tem essa quantidade de pontos.", Red
Exit Sub
End If
' Check to not overflow the value
If Val > 100000000 Then
PlayerMsg index, "Você não pode adicionar tamanha quantidade(Máx 100000000).", Red
Exit Sub
End If
' Make sure they have points
If GetPlayerPOINTS(index) > 0 Then
' make sure they're not maxed#
If GetPlayerRawStat(index, PointType) >= 100000000 Then
PlayerMsg index, "Máximo Obtido.", BrightRed
Exit Sub
End If
' Take away a stat point
Call SetPlayerPOINTS(index, GetPlayerPOINTS(index) - Val)
' Everything is ok
Select Case PointType
Case Stats.Strength
Call SetPlayerStat(index, Stats.Strength, GetPlayerRawStat(index, Stats.Strength) + Val)
Call PlayerMsg(index, "Você adicionou +" & Val & " pontos em Strength!", White)
sMes = " Strength"
Case Stats.Endurance
Call SetPlayerStat(index, Stats.Endurance, GetPlayerRawStat(index, Stats.Endurance) + Val)
Call PlayerMsg(index, "Você adicionou +" & Val & " pontos em Endurance!", White)
sMes = " Endurance"
Case Stats.Intelligence
Call SetPlayerStat(index, Stats.Intelligence, GetPlayerRawStat(index, Stats.Intelligence) + Val)
Call PlayerMsg(index, "Você adicionou +" & Val & " pontos em Intelligence!", White)
sMes = " Intelligence"
Case Stats.Agility
Call SetPlayerStat(index, Stats.Agility, GetPlayerRawStat(index, Stats.Agility) + Val)
Call PlayerMsg(index, "Você adicionou +" & Val & " pontos em Agility!", White)
sMes = " Agility"
Case Stats.Willpower
Call SetPlayerStat(index, Stats.Willpower, GetPlayerRawStat(index, Stats.Willpower) + Val)
Call PlayerMsg(index, "Você adicionou +" & Val & " pontos em Willpower!", White)
sMes = " Willpower"
End Select
SendActionMsg GetPlayerMap(index), "+" & Val & sMes, White, 1, (GetPlayerX(index) * 32), (GetPlayerY(index) * 32)
Else
Exit Sub
End If
' Send the update
SendPlayerData index
For i = 1 To Vitals.Vital_Count - 1
SendVital index, i
Next
End Sub
Sistema Pronto rsrs agora é só testa, qualquer erro podem falar ai pois é meu primeiro tutorial rsrs
Creditos: Bem eu peguei esse código do SendCommandTrainStat do sistema de Adicionar pontos por comando e não sei quem que fez,mas o resto é meu rsrs
OBS:
Esse é meu primeiro tutorial então peço a ajuda de vocês pra me fala em que errei caso tenha errado kk
qualquer erro me avisem ai