Ai gente só trazendo um ótimo tutorial de outra comunidade pra cá, a unica coisa que fiz foi dar Ctrl+C e Ctrl+V no poste do llAliferll (membro da tarberna e foi de lá que tirei o sistema).
Então todo o crédito é de direito dele, e as considerações dele está ao final do tópico!
Não foi eu quem fiz então não posso dar qualquer tipo de suporte ao conteúdo, porém já foi testa e roda tranquilo e muito bem é ótimo o sistema... (testado numa E.O2.0 "limpa" "original).
Olá, faz tempo que não posto algo aqui na área de tutoriais então vim disponibilizar o sistema de Craft que por meio de um pedido resolvi compartilhar.
O Sistema é bem simples porém tem um Editor, além de eu deixar bem pratico de ser adicionado ao Projeto
A "formula" do Craft é: Item1+Qntia1 + Item2+Qntia2 = Resultado + QntiaResultado.
Arquivos Necessários: Download
Obs: a FrmMainPic são as Pics que tem que ser colocadas na FrmMain via Ctrl+C e Ctrl+V para ficar mais simples 'u'
Bom primeiro baixe os arquivos necessários e adicione ao seu projeto.
Pronto!?, Então podemos começar primeiro vamos ao servidor que tem pouca coisa para configurar...
Vá ao ModHandleData e encontre a Sub InitMessages e no final Antes de End Sub Adicione:
Feito Isso vá ao ModEnumerations e procure por Public Enum ClientPackets e antes de ' Make sure CMSG_COUNT is below everything else adicione:
e Em Public Enum ServerPackets antes de ' Make sure SMSG_COUNT is below everything else adicione:
Agora já configurado os Pacotes vá para ModTypes e antes de Private Type PlayerRec adicione:
e Dentro da Private Type PlayerRec adicione:
No mesmo Modulo procure por Private Type TempPlayerRec:
Código:
no ModHandleData procure por Sub HandlePlayerMove dentro abaixo de:
Código:
Adicione:
Código:
Em ModPlayer procure por Sub JoinGame(ByVal index As Long) e dentro encontre Call SendHotbar(index) abaixo adicione:
Código:
Agora vá em ModGeneral e procure por Private Sub LoadGameData() e antes de End Sub adicione:
Código:
Obs: Agora crie uma pasta no DataFiles do servidor chamada Craft
Certo Servidor Configurado! Agora vamos para o Client.
Vá ao ModHandleData e encontre a Sub InitMessages e antes de ' Error handler adicione:
Código:
Feito isso vá em ModEnumerations e procure por Public Enum ClientPackets e antes de ' Make sure CMSG_COUNT is below everything else adicione:
Código:
e Em Public Enum ServerPackets antes de ' Make sure SMSG_COUNT is below everything else adicione:
Código:
Agora já configurado os Pacotes vá para ModTypes e antes de Private Type PlayerRec adicione:
Código:
No mesmo Modulo procure por Private Type PlayerRec:
Código:
Agora vá na frmMain e na PicInventory de dois cliques para abrir a Private Sub picInventory_DblClick() e dentro da mesma Acima de ' are we in a shop? adicione:
Código:
Agora na FrmMain de um duplo clique e vá até o final dos codes e adicione:
Código:
Vá no modDirectDraw7 e no final do Modulo adicione:
Código:
Agora para abrir o editor Crie um Botão na PicAdmin e adicione dentro:
Código:
Pronto agora só testar o sistema, caso encontrem bugs me avise :3!
llAliferll 'Fazer o sistema :3
Belzebu 'Cobaia para achar Bugs para Correção.
Junior 'Base linda do Video(Se não colocar Crédito ele Xora)
Depois de terminar o sistema caso queira o membro Thales12 lembrou dessa parte:
OBS: Procurem por :
Código:
em baixo add:
Código:
De nd
E é isso gente espero ter ajudado trazendo para cá!
Então todo o crédito é de direito dele, e as considerações dele está ao final do tópico!
Não foi eu quem fiz então não posso dar qualquer tipo de suporte ao conteúdo, porém já foi testa e roda tranquilo e muito bem é ótimo o sistema... (testado numa E.O2.0 "limpa" "original).
[b][b]Introdução[/b][/b] |
Sistema de Craft |
O Sistema é bem simples porém tem um Editor, além de eu deixar bem pratico de ser adicionado ao Projeto
A "formula" do Craft é: Item1+Qntia1 + Item2+Qntia2 = Resultado + QntiaResultado.
[b][b]Mídia[/b][/b] |
Vídeo Demonstração |
[b][b]Material[/b][/b] |
Download e Tutorial |
Obs: a FrmMainPic são as Pics que tem que ser colocadas na FrmMain via Ctrl+C e Ctrl+V para ficar mais simples 'u'
Aviso: Antes de começar qualquer modificação no Projeto certifique-se de fazer Backup para não haver perda do seu projeto. Sistema funcional EO 2.0, não me responsabilizo por ações de Programadores Inexperientes ou Incompatibilidade com seu projeto...
Bom primeiro baixe os arquivos necessários e adicione ao seu projeto.
Pronto!?, Então podemos começar primeiro vamos ao servidor que tem pouca coisa para configurar...
Vá ao ModHandleData e encontre a Sub InitMessages e no final Antes de End Sub Adicione:
- Código:
HandleDataSub(CRequestEditCraft) = GetAddress(AddressOf HandleRequestEditCraft) 'Craft System
HandleDataSub(CSaveCraft) = GetAddress(AddressOf HandleSaveCraft)
HandleDataSub(CRequestCraft) = GetAddress(AddressOf HandleRequestCraft)
HandleDataSub(CCraftLogUpdate) = GetAddress(AddressOf HandleCraftUpdate)
HandleDataSub(CPlayerHandleCraft) = GetAddress(AddressOf HandleCraftOk)
HandleDataSub(CCraftItemAdd) = GetAddress(AddressOf HandleCraftItemAdd)
Feito Isso vá ao ModEnumerations e procure por Public Enum ClientPackets e antes de ' Make sure CMSG_COUNT is below everything else adicione:
- Código:
HandleDataSub(CRequestEditCraft) = GetAddress(AddressOf HandleRequestEditCraft) 'Craft System
HandleDataSub(CSaveCraft) = GetAddress(AddressOf HandleSaveCraft)
HandleDataSub(CRequestCraft) = GetAddress(AddressOf HandleRequestCraft)
HandleDataSub(CCraftLogUpdate) = GetAddress(AddressOf HandleCraftUpdate)
HandleDataSub(CPlayerHandleCraft) = GetAddress(AddressOf HandleCraftOk)
HandleDataSub(CCraftItemAdd) = GetAddress(AddressOf HandleCraftItemAd
e Em Public Enum ServerPackets antes de ' Make sure SMSG_COUNT is below everything else adicione:
- Código:
SCraftEditor ' Craft System
SUpdateCraft
SPlayerCraft
SInCraft
Agora já configurado os Pacotes vá para ModTypes e antes de Private Type PlayerRec adicione:
- Código:
'Variaveis do Jogador Craft
Private Type PlayerCraftRec
Name As String * NAME_LENGTH
Item1 As Long
Item1Value As Long
Item2 As Long
Item2Value As Long
Resultado As Long
ResultadoValue As Long
Cost As Long
End Type
e Dentro da Private Type PlayerRec adicione:
- Código:
Craft As PlayerCraftRec 'Sistema de Craft
No mesmo Modulo procure por Private Type TempPlayerRec:
Código:
- Código:
InCraft As Boolean 'Sistema de Craft
no ModHandleData procure por Sub HandlePlayerMove dentro abaixo de:
Código:
- Código:
' if stunned, stop them moving
If TempPlayer(index).StunDuration > 0 Then
Call SendPlayerXY(index)
Exit Sub
End If
Adicione:
Código:
- Código:
' Craft System - Remove Craft Walk
If TempPlayer(index).InCraft = True Then
TempPlayer(index).InCraft = False
SendInCraft index
End If
Em ModPlayer procure por Sub JoinGame(ByVal index As Long) e dentro encontre Call SendHotbar(index) abaixo adicione:
Código:
- Código:
Call SendCraftS(index) 'Sistema de Craft
Agora vá em ModGeneral e procure por Private Sub LoadGameData() e antes de End Sub adicione:
Código:
- Código:
Call SetStatus("Loading Crafts...") 'Sistema de Craft
Call LoadCraft
Obs: Agora crie uma pasta no DataFiles do servidor chamada Craft
Certo Servidor Configurado! Agora vamos para o Client.
Vá ao ModHandleData e encontre a Sub InitMessages e antes de ' Error handler adicione:
Código:
- Código:
HandleDataSub(SCraftEditor) = GetAddress(AddressOf HandleCraftEditor) 'Craft System
HandleDataSub(SUpdateCraft) = GetAddress(AddressOf HandleUpdateCraft)
HandleDataSub(SPlayerCraft) = GetAddress(AddressOf HandlePlayerCraft)
HandleDataSub(SInCraft) = GetAddress(AddressOf HandleInCraft)
Feito isso vá em ModEnumerations e procure por Public Enum ClientPackets e antes de ' Make sure CMSG_COUNT is below everything else adicione:
Código:
- Código:
CRequestEditCraft 'Craft System
CSaveCraft
CRequestCraft
CCraftLogUpdate
CPlayerHandleCraft
CCraftItemAdd
e Em Public Enum ServerPackets antes de ' Make sure SMSG_COUNT is below everything else adicione:
Código:
- Código:
SCraftEditor ' Craft System
SUpdateCraft
SPlayerCraft
SInCraft
Agora já configurado os Pacotes vá para ModTypes e antes de Private Type PlayerRec adicione:
Código:
- Código:
'Variaveis do Jogador Craft
Private Type PlayerCraftRec
Name As String * NAME_LENGTH
Item1 As Long
Item1Value As Long
Item2 As Long
Item2Value As Long
Resultado As Long
ResultadoValue As Long
Cost As Long
End Type
No mesmo Modulo procure por Private Type PlayerRec:
Código:
- Código:
Craft As PlayerCraftRec 'Sistema de Craft
Agora vá na frmMain e na PicInventory de dois cliques para abrir a Private Sub picInventory_DblClick() e dentro da mesma Acima de ' are we in a shop? adicione:
Código:
- Código:
'In Craft? Send Item to Craft Window
If CraftMode = True Then
If Item(GetPlayerInvItemNum(MyIndex, InvNum)).Type = ITEM_TYPE_CURRENCY Then
ItemNumAddCraft = GetPlayerInvItemNum(MyIndex, InvNum)
PicValueCraft.Visible = True
Else
PlayerCraftItemAdd GetPlayerInvItemNum(MyIndex, InvNum), 1
ItemNumAddCraft = 0
PicValueCraft.Visible = False
End If
Exit Sub
End If
Agora na FrmMain de um duplo clique e vá até o final dos codes e adicione:
Código:
- Código:
Private Sub cmdAdminCraft_Click()
PlayerCraftOk 0, 4 'Retirar esse Comando quando adicionar Npc Craft
End Sub
Private Sub imgCraftCancel_Click()
PlayerCraftOk 0, 0
End Sub
Private Sub imgCraftOk_Click()
PlayerCraftOk 0, 1
End Sub
Private Sub imgItem1_Click()
PlayerCraftOk 0, 2
End Sub
Private Sub imgItem2_Click()
PlayerCraftOk 0, 3
End Sub
Private Sub lblCancelValueCraft_Click()
ItemNumAddCraft = 0
PicValueCraft.Visible = False
End Sub
Private Sub lblOkValueCraft_Click()
Call PlayerCraftItemAdd(ItemNumAddCraft, Trim$(TxtCraftCurrency))
ItemNumAddCraft = 0
PicValueCraft.Visible = False
End Sub
Vá no modDirectDraw7 e no final do Modulo adicione:
Código:
- Código:
Public Sub bltCraft()
Dim I As Long, x As Long, y As Long, CraftNum As Long, CraftPic As Long, CraftNumValue As Long
Dim Amount As String
Dim rec As RECT, rec_pos As RECT
Dim colour As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
If Not InGame Then Exit Sub
frmMain.PicCraft.Cls
For I = 1 To 3
Select Case I
Case 1
CraftNum = Player(MyIndex).Craft.Item1
CraftNumValue = Player(MyIndex).Craft.Item1Value
Case 2
CraftNum = Player(MyIndex).Craft.Item2
CraftNumValue = Player(MyIndex).Craft.Item2Value
Case 3
CraftNum = Player(MyIndex).Craft.Resultado
CraftNumValue = Player(MyIndex).Craft.ResultadoValue
Case Else
CraftNum = 0
CraftNumValue = 0
End Select
If CraftNum > 0 And CraftNum <= MAX_CRAFTS Then
CraftPic = Item(CraftNum).Pic
If CraftPic > 0 And CraftPic <= NumItems Then
Select Case I
Case 1
With rec_pos
.top = 13
.Bottom = .top + PIC_Y
.Left = 12
.Right = .Left + PIC_X
End With
Case 2
With rec_pos
.top = 13
.Bottom = .top + PIC_Y
.Left = 56
.Right = .Left + PIC_X
End With
Case 3
With rec_pos
.top = 51
.Bottom = .top + PIC_Y
.Left = 34
.Right = .Left + PIC_X
End With
End Select
With rec
.top = 0
.Bottom = 32
.Left = 32
.Right = 64
End With
' Load item if not loaded, and reset timer
ItemTimer(CraftPic) = GetTickCount + SurfaceTimerMax
If DDS_Item(CraftPic) Is Nothing Then
Call InitDDSurf("Items" & CraftPic, DDSD_Item(CraftPic), DDS_Item(CraftPic))
End If
'Engine_BltToDC DDS_SpellIcon(SkillTreepic), rec, rec_pos, frmMain.PicSkillTree, False
Call Engine_BltToDC(DDS_Item(CraftPic), rec, rec_pos, frmMain.PicCraft, False)
' If item is a stack - draw the amount you have
y = rec_pos.top + 22
x = rec_pos.Left + 14
If CraftNumValue > 1 Then
DrawText frmMain.PicCraft.hDC, x, y, CraftNumValue, QBColor(White)
End If
frmMain.PicCraft.Refresh
End If
End If
Next
' Error handler
Exit Sub
errorhandler:
HandleError "EditorSkillTree_BltIcon", "modDirectDraw7", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Agora para abrir o editor Crie um Botão na PicAdmin e adicione dentro:
Código:
- Código:
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
If GetPlayerAccess(MyIndex) < ADMIN_DEVELOPER Then
Exit Sub
End If
SendRequestEditCraft
' Error handler
Exit Sub
errorhandler:
HandleError "cmdCraft_Click", "frmMain", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
Pronto agora só testar o sistema, caso encontrem bugs me avise :3!
[b][b]Considerações finais[/b][/b] |
Créditos |
Belzebu 'Cobaia para achar Bugs para Correção.
Junior 'Base linda do Video
Depois de terminar o sistema caso queira o membro Thales12 lembrou dessa parte:
OBS: Procurem por :
Código:
- Código:
Call SetStatus("Clearing animations...")
Call ClearAnimations
em baixo add:
Código:
- Código:
Call SetStatus("Clearing crafts...")
Call ClearCraftS
De nd
E é isso gente espero ter ajudado trazendo para cá!