Suporte ao desenvolvimento de jogos!


    [EO 2.0] Sistema de Craft

    Compartilhe
    avatar
    silipinho
    Iniciante
    Iniciante

    Mensagens : 68
    Créditos : 13

    [EO 2.0] Sistema de Craft

    Mensagem por silipinho em Sex Out 23, 2015 8:50 pm

    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).






    [b][b]Introdução[/b][/b]
    Sistema de Craft
    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.




    [b][b]Mídia[/b][/b]
    Vídeo Demonstração




    [b][b]Material[/b][/b]
    Download e Tutorial
    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'

    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 pastno 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
    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:

    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á!
    avatar
    Profane ~
    Administrador
    Administrador

    Mensagens : 664
    Créditos : 114

    Re: [EO 2.0] Sistema de Craft

    Mensagem por Profane ~ em Dom Out 25, 2015 4:32 pm

    Well. Muito bom.

    Parabéns pelo desenvolvimento até mesmo pelo post. Um dia crio coragem e testo ><!

    *-*

    +1


    _________________
    "If you don't belong here, just build a place where you do."
    avatar
    silipinho
    Iniciante
    Iniciante

    Mensagens : 68
    Créditos : 13

    Re: [EO 2.0] Sistema de Craft

    Mensagem por silipinho em Sab Out 31, 2015 1:16 am

    Vlw man... como eu disse só trouxe ele pra cá!
    Enfim eu testei, funcionou não é tão completo por não ter chance de falhar e não gasta gold e tals tipo pra ficar mais bem completinho e reparei q funcionou com uma conta ADMIN com um player normal a pic de craft não abri... nem tentei arrumar e tals mas "funcionar" ele funciona! Talvez uns ajustes e ele fica top!
    avatar
    joaopaulo98
    Experiente
    Experiente

    Mensagens : 622
    Créditos : 42

    Re: [EO 2.0] Sistema de Craft

    Mensagem por joaopaulo98 em Sab Out 31, 2015 2:12 am

    Case 3
        CraftNum = Player(MyIndex).Craft.Resultado
        CraftNumValue = Player(MyIndex).Craft.ResultadoValue

          Call TakeItem(Index, 1, 2)


    +- assim   1 é o ID do item 2 a quantidade


    bom eu n testei pra ver se da certo mais eu coloquei ali +- para tirar o item depois do resultado do craft


    _________________
    Dancinha:
    Código:
    http://ultracurioso.tk  - Um Mundo de Curiosidades , Ta esperando oque mate a sua , acesse não perca tempo.
    http://ligadosthemes.tk - já pensou em criar um site de filmes ou etc acesse e encontre scripts feitos para
    facilitar sua vida.
    http://linkfree.ml - encurte seus links e ainda ganhe dinheiro com isso , fácil e pratico.
    https://aprendendonline.ml  - nunca é perca de tempo aprender online.
    avatar
    Profane ~
    Administrador
    Administrador

    Mensagens : 664
    Créditos : 114

    Re: [EO 2.0] Sistema de Craft

    Mensagem por Profane ~ em Seg Nov 09, 2015 2:30 am

    Kkkk, esta corretissimo pequeno Joao ; 3

    Ficando bom nisso em xD


    _________________
    "If you don't belong here, just build a place where you do."
    avatar
    Akio
    Membro Ativo
    Membro Ativo

    Mensagens : 301
    Créditos : 22

    Ficha do personagem
    Nível: 1
    Vida:
    30/30  (30/30)
    Energia:
    0/0  (0/0)

    Re: [EO 2.0] Sistema de Craft

    Mensagem por Akio em Seg Nov 09, 2015 12:13 pm

    Opa já tenho esse sistema do Alifer no meu jogo, muito bom Very Happy continue contribuindo Very Happy


    _________________

    Facebook:https://www.facebook.com/junio.henrique.102
    Skype: junio.henrike1

    avatar
    kriteuss
    Iniciante
    Iniciante

    Mensagens : 45
    Créditos : 2

    Re: [EO 2.0] Sistema de Craft

    Mensagem por kriteuss em Qua Nov 18, 2015 8:04 am

    Esse sistema não é do Alifer, ele apenas pegou o sistema pronto e modificou --'
    avatar
    llAliferll
    Novato
    Novato

    Mensagens : 18
    Créditos : 7

    Re: [EO 2.0] Sistema de Craft

    Mensagem por llAliferll em Qua Nov 18, 2015 8:51 am

    @kriteuss escreveu:Esse sistema não é do Alifer, ele apenas pegou o sistema pronto e modificou --'

    Quero saber onde esta esse sistema pronto por que né, quero provas...
    Já tenho experiência com E.O 2.0 o suficiente para fazer sistemas de minha vontade não necessito pegar sistemas prontos para ganhar algum créditos na comunidade maker, além de eu ter somente colocado o sistema na Taberna, o usuário Silipinho disponibilizou aqui até agradeço por compartilhar com a aldeia.

    Agora sobre o sistema algumas Observações...

    Sobre criar itens somente usando admin foi uma condição colocada por mim pois eu estava testando um npc para crafts e a janela não ficar aberta torto a direito .-. e nego craftando o que bem entendesse...


    Para resolver é somente retirar está parte no ModCraftServer em HandleCraftItemAdd:

    Código:
    Código:
    If Player(index).Access < ADMIN_DEVELOPER Then
        If TempPlayer(index).InCraft = False Then Exit Sub
        End If

    E acabei de notar um "bug" que foi erro meu na hora de criar os packets... irei explicar o que ocorre bom não é possivel colocar um valor maior que 255 'As byte

    Então tenho o dever de passar a correção imediata.

    Vamos começar pelo Client... Procure por:


    Código:
    Código:
    Public Sub PlayerCraftItemAdd(ByVal ItemNum As Long, ByVal ItemNumValue As Byte)

    Então substitua toda a Sub por:

    Código:
    Código:
    Public Sub PlayerCraftItemAdd(ByVal ItemNum As Long, ByVal ItemNumValue As Long)
        Dim Buffer As clsBuffer
        Set Buffer = New clsBuffer
        
        Buffer.WriteLong CCraftItemAdd
        Buffer.WriteLong ItemNum
        Buffer.WriteLong ItemNumValue
        SendData Buffer.ToArray()
        Set Buffer = Nothing
    End Sub

    Pronto Agora vamos para o Servidor... E procure por:
    Código:
    Código:
    Sub HandleCraftItemAdd(ByVal index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)

    E dentro procure por:

    ResultadoValue As Byte 'Não tenho muita certeza se está a byte se estiver as long deixe se estiver as byte troque para as long .-.

    ainda dentro dessa sub procure por:


    Código:
    Código:
    ItemNumValue = Buffer.ReadByte

    e troque por:

    Código:
    Código:
    ItemNumValue = Buffer.ReadLong

    Bom feito isso... teste um valor acima de 255 no craft Successful!


    _________________
    Hero Soul
    avatar
    Profane ~
    Administrador
    Administrador

    Mensagens : 664
    Créditos : 114

    Re: [EO 2.0] Sistema de Craft

    Mensagem por Profane ~ em Qua Nov 18, 2015 2:01 pm

    Não se importe com Haters, Alifer >.<.

    Ainda acho uma bobagem essa questão de "creditos"; Não se ganha nada com esse teste de conhecimento, e tenho certeza que um reconhecimento bobo em fórum é apenas algo infantil, você sabe suas capacidades.

    Como já falei,adorei o vídeo e a forma como ficou o sistema; Realmente um excelente trabalho.


    _________________
    "If you don't belong here, just build a place where you do."
    avatar
    Dooolly
    Moderador Global
    Moderador Global

    Medalhas :
    Mensagens : 1225
    Créditos : 137

    Ficha do personagem
    Nível: 1
    Vida:
    30/30  (30/30)
    Energia:
    0/0  (0/0)

    Re: [EO 2.0] Sistema de Craft

    Mensagem por Dooolly em Qua Nov 18, 2015 7:20 pm

    Muito bom o sistema, eu já o conhecia, parabéns Alifer você é muito bom programador e não ligue para oq esse pessoas falam... 

    +1 Cred

    Conteúdo patrocinado

    Re: [EO 2.0] Sistema de Craft

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Sab Abr 21, 2018 10:07 pm