Bom, olá denovo gente, aqui estou eu postando mais um sistema para jogo de animes, nunca vi ninguém postar um sistema para jogos de one piece por isso aqui vim para postá-lo, novamente venho dizendo que os sistemas estão debaixo dos seus narizes e vocês não o vêem farei este baseado no sistema de rank e novamente venho trazer os créditos para Thales12 por nos disponibilizar o mesmo.
O tutorial já está completo, não haverá "continuações" com modificações.
No que consiste o sistema de akuma no mis?
R= O player ao entrar, o valor da akuma no mi é igual a 1, que é equivalente a nenhuma, após comer o item, o valor da akuma no mi muda para o definido no editor de itens, cada valor será nomeado (2: Gomu Gomu no mi, 3: Moku Moku no Mi... no tutorial são somente esses), será mostrado em uma label, na picCharacter, a akuma no mi do player.
Sem mais delongas aqui está o tutorial:
Pronto base feita, agora faremos a parte do item que dará akuma no mi. Vamos lá.
Obs: Os créditos do tutorial a seguir não tem nada a ver com thales.
Pronto aí está o tutorial, se quiser modificações faça você mesmo, por exemplo se quiser mandar uma mensagem que o player comeu tal akuma no mi, estude o código para saber como funciona, dá pra servir de base pra muita coisa. Até a próxima amigo
O tutorial já está completo, não haverá "continuações" com modificações.
No que consiste o sistema de akuma no mis?
R= O player ao entrar, o valor da akuma no mi é igual a 1, que é equivalente a nenhuma, após comer o item, o valor da akuma no mi muda para o definido no editor de itens, cada valor será nomeado (2: Gomu Gomu no mi, 3: Moku Moku no Mi... no tutorial são somente esses), será mostrado em uma label, na picCharacter, a akuma no mi do player.
Sem mais delongas aqui está o tutorial:
- Server-side:
Na Sub AddChar procure por:
- Código:
For n = 1 To Stats.Stat_Count - 1
Player(Index).Stat(n) = Class(ClassNum).Stat(n)
Next n
- Código:
Player(index).Akuma = 1
No final do modDatabase adicione:
- Código:
Function GetPlayerAkuma(ByVal index As Long) As Long
If index > MAX_PLAYERS Then Exit Function
GetPlayerAkuma = Player(index).Akuma
End Function
Sub SetPlayerAkuma(ByVal index As Long, ByVal Akuma As Long)
Player(index).Akuma = Akuma
End Sub
No modHandleData Procure por:
- Código:
HandleDataSub(CPartyLeave) = GetAddress(AddressOf HandlePartyLeave
- Código:
HandleDataSub(CSetAkuma) = GetAddress(AddressOf HandleSetAkuma)
- Código:
Sub HandleSetAkuma(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Dim u As String
Dim n As Long
Dim i As Long
Dim Buffer As clsBuffer
Set Buffer = New clsBuffer
Buffer.WriteBytes Data()
' Prevent hacking
If GetPlayerAccess(index) < ADMIN_CREATOR Then
Exit Sub
End If
n = FindPlayer(Buffer.ReadString)
i = Buffer.ReadLong
Set Buffer = Nothing
If IsPlaying(n) = False Then Exit Sub
Player(n).Akuma = i
SendPlayerData n
SavePlayer n
End Sub
Na PlayerData procure por:
- Código:
Buffer.WriteLong GetPlayerAccess(index)
- Código:
Buffer.WriteByte Player(index).Akuma
Na Type PlayerRec, abaixo de:
- Código:
PK As Byte
- Código:
Akuma As Byte
- Código:
CPartyLeave
- Código:
CSetAkuma
- Client-side:
Na Type PlayerRec abaixo de:
- Código:
PK As Byte
- Código:
Akuma As Byte
- Código:
Public Sub SendSetAkuma(ByVal Name As String, ByVal Access As Byte)
Dim Buffer As clsBuffer
Set Buffer = New clsBuffer
Buffer.WriteLong CSetAkuma
Buffer.WriteString Name
Buffer.WriteLong Access
SendData Buffer.ToArray()
Set Buffer = Nothing
End Sub
- Código:
Sub SetPlayerAkuma(ByVal Index As Long, ByVal Akuma As Long)
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
If Index > MAX_PLAYERS Then Exit Sub
Player(Index).Akuma = Akuma
' Error handler
Exit Sub
errorhandler:
HandleError "SetPlayerAkuma", "modDatabase", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Function GetPlayerAkuma(ByVal Index As Long) As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
If Index > MAX_PLAYERS Then Exit Function
GetPlayerAkuma = Player(Index).Akuma
' Error handler
Exit Function
errorhandler:
HandleError "GetPlayerAkuma", "modDatabase", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Function
End Function
No modEnumerations procure por:
- Código:
CPartyLeave
- Código:
CSetAkuma
Procure por:
- Código:
Call SetPlayerAccess(i, Buffer.ReadLong)
- Código:
Player(i).Akuma = Buffer.ReadByte
- Código:
Name:lblAkuma
Caption: Akuma no mi: Nenhuma
Na HandlePlayerData procure por:
- Código:
For x = 1 To Stats.Stat_Count - 1
frmMain.lblCharStat(x).Caption = GetPlayerStat(MyIndex, x)
Next
- Código:
Select Case Player(MyIndex).Akuma
Case 1
frmMain.lblAkuma.Caption = "Akuma no Mi:Nenhuma"
Case 2
frmMain.lblAkuma.Caption = "Akuma no Mi: Gomu Gomu no Mi"
Case 3
frmMain.lblAkuma.Caption = "Akuma no Mi: Moku Moku no Mi"
End Select
Pronto base feita, agora faremos a parte do item que dará akuma no mi. Vamos lá.
Obs: Os créditos do tutorial a seguir não tem nada a ver com thales.
- Client-Side:
Abra a frmEditor_Item e adicione 1 Frame, 1 Label e 1 scrollbox com as seguintes propriedades:
- Código:
Frame:
Name:fraAkuma
Caption:Akuma
Label:
Name:lblAkuma
Caption:Akuma:
Scrollbox:
Name:scrlAkuma
Min:1
Max:3
Na cmbType adicione na propriedade List o nome:
- Código:
Akuma
Dê dois clicks na cmbType e adicione:
- Código:
If cmbType.ListIndex = ITEM_TYPE_AKUMA Then
fraAkuma.Visible = True
Else
fraAkuma.Visible = False
End If
Dê dois clicks na scrlAkuma e adicione:
- Código:
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
Select Case scrlAkuma.Value
Case 1
lblAkuma.Caption = "Akuma: Nenhuma"
Case 2
lblAkuma.Caption = "Akuma: Gomu Gomu"
Case 3
lblAkuma.Caption = "Akuma: Moku Moku"
Case Else
lblAkuma.Caption = "Akuma: Nenhuma"
End Select
Item(EditorIndex).AkumaReward = scrlAkuma.Value
' Error handler
Exit Sub
errorhandler:
HandleError "scrlAkuma", "frmEditor_Item", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
Procure por:
- Código:
Public Const ITEM_TYPE_SPELL As Byte = 8
- Código:
Public Const ITEM_TYPE_AKUMA As Byte = 9 'ou o próximo número
No modGameEditors procure por:
- Código:
If (frmEditor_Item.cmbType.ListIndex = ITEM_TYPE_SPELL) Then
frmEditor_Item.fraSpell.Visible = True
frmEditor_Item.scrlSpell.Value = .Data1
Else
frmEditor_Item.fraSpell.Visible = False
End If
Abaixo adicione:
- Código:
If (frmEditor_Item.cmbType.ListIndex = ITEM_TYPE_AKUMA) Then
frmEditor_Item.scrlAkuma.Value = .AkumaReward
Else
frmEditor_Item.fraAkuma.Visible = False
End If
Na Type ItemRec abaixo de:
- Código:
Paperdoll As Long
- Código:
AkumaReward As Long
- Server-side:
Procure por:
- Código:
Public Const ITEM_TYPE_SPELL As Byte = 8
- Código:
Public Const ITEM_TYPE_AKUMA As Byte = 9
no ModPlayer na UseItem procure por:
- Código:
Case ITEM_TYPE_SPELL
' stat requirements
For i = 1 To Stats.Stat_Count - 1
If GetPlayerRawStat(index, i) < Item(itemnum).Stat_Req(i) Then
PlayerMsg index, "Você não tem os status requeridos para equipar esse equipamento.", BrightRed
Exit Sub
End If
Next
' level requirement
If GetPlayerLevel(index) < Item(itemnum).LevelReq Then
PlayerMsg index, "Você não tem o level requerido para usar esse item.", BrightRed
Exit Sub
End If
' class requirement
If Item(itemnum).ClassReq > 0 Then
If Not GetPlayerClass(index) = Item(itemnum).ClassReq Then
PlayerMsg index, "Você não tem a classe necessaria para usar esse item.", BrightRed
Exit Sub
End If
End If
' access requirement
If Not GetPlayerAccess(index) >= Item(itemnum).AccessReq Then
PlayerMsg index, "Você não tem o acesso requerido para usar esse item.", BrightRed
Exit Sub
End If
' Get the spell num
n = Item(itemnum).Data1
If n > 0 Then
' Make sure they are the right class
If Spell(n).ClassReq = GetPlayerClass(index) Or Spell(n).ClassReq = 0 Then
' Make sure they are the right level
i = Spell(n).LevelReq
If i <= GetPlayerLevel(index) Then
i = FindOpenSpellSlot(index)
' Make sure they have an open spell slot
If i > 0 Then
' Make sure they dont already have the spell
If Not HasSpell(index, n) Then
Call SetPlayerSpell(index, i, n)
Call SendAnimation(GetPlayerMap(index), Item(itemnum).Animation, 0, 0, TARGET_TYPE_PLAYER, index)
Call TakeInvItem(index, itemnum, 0)
Call PlayerMsg(index, "Agora você
pode usar a magia " & Trim$(Spell(n).Name) & ".", BrightGreen)
Else
Call PlayerMsg(index, "Você ja tem essa magia.", BrightRed)
End If
Else
Call PlayerMsg(index, "Você não pode aprender mais magias.", BrightRed)
End If
Else
Call PlayerMsg(index, "Você precisa estar no
nivel " & i & " para aprender essa magia.", BrightRed)
End If
Else
Call PlayerMsg(index, "Essa magia so pode ser
aprendida pela classe " &
CheckGrammar(GetClassName(Spell(n).ClassReq)) & ".", BrightRed)
End If
End If
' send the sound
SendPlayerSound index, GetPlayerX(index), GetPlayerY(index), SoundEntity.seItem, itemnum
Abaixo adicione:
- Código:
Case ITEM_TYPE_AKUMA
' stat requirements
For i = 1 To Stats.Stat_Count - 1
If GetPlayerRawStat(index, i) < Item(itemnum).Stat_Req(i) Then
PlayerMsg index, "You do not meet the stat requirements to use this item.", BrightRed
Exit Sub
End If
Next
' level requirement
If GetPlayerLevel(index) < Item(itemnum).LevelReq Then
PlayerMsg index, "You do not meet the level requirement to use this item.", BrightRed
Exit Sub
End If
' class requirement
If Item(itemnum).ClassReq > 0 Then
If Not GetPlayerClass(index) = Item(itemnum).ClassReq Then
PlayerMsg index, "You do not meet the class requirement to use this item.", BrightRed
Exit Sub
End If
End If
' access requirement
If Not GetPlayerAccess(index) >= Item(itemnum).AccessReq Then
PlayerMsg index, "You do not meet the access requirement to use this item.", BrightRed
Exit Sub
End If
' Ganhar Akuma
Call SetPlayerAkuma(index, Item(itemnum).AkumaReward)
' send the sound
SendPlayerSound index, GetPlayerX(index), GetPlayerY(index), SoundEntity.seItem, itemnum
' atualizar player
Call SendPlayerData(index)
'tirar item do inventário
Call TakeInvItem(index, itemnum, 0)
Para finalizar na Type Item_Rec abaixo de:
- Código:
Paperdoll As Long
- Código:
AkumaReward As Long
Pronto aí está o tutorial, se quiser modificações faça você mesmo, por exemplo se quiser mandar uma mensagem que o player comeu tal akuma no mi, estude o código para saber como funciona, dá pra servir de base pra muita coisa. Até a próxima amigo
Última edição por XWlash em Dom Jun 26, 2016 9:11 pm, editado 1 vez(es)