Suporte ao desenvolvimento de jogos!


    [Prof~] Spawn de Item direto na Bolsa

    Compartilhe
    avatar
    Profane ~
    Administrador
    Administrador

    Mensagens : 728
    Créditos : 125

    [Prof~] Spawn de Item direto na Bolsa

    Mensagem por Profane ~ em Dom Ago 12, 2018 8:40 pm

    Oin turu baum?

    Sisteminha simples, pedido pelo @MasterOp

    Eu ia passar para ele via Discord, ele então viria postar, mas para ser mais rápido venho postar logo /o/



    Qual a Lógica por trás?

    Teremos no painel de Admin ou em qualquer outra tela em sí de administração a qual você queira, uma Listagem com os Itens disponiveis, você poderá selecionar o item, setar quantidade e então mandar enviar direto esse item para A SUA bolsa.

    Com uma simples modificação poderá enviar isso para quaisquer outros jogadores online.



    Ficha Técnina

     Dificuldade: Fácil
     Compatibilidade: Qualquer EO/CS
     Necessário
    - Visual Basic 6




    Ao Sistema




     Client Side ~


     0.1 - Criando a Área


    Crie uma área para que possamos fazer uso das coisas
    Em ex:



    - ComboBox (Name: lstItemSpawn)
    - TextBox (Name: txtItemSpawnQuant)

    Botões não importa o Nome.

    0.2 Botão Reload List

    Esse botão eu coloquei já que eu não sei como a SUA engine faz a leitura e abertura da forma de adm, ou se é que tem... Mas de forma geral, com ele ai se torna meio universal a função desejada.

    Dê um duplo-click dentro dele e adicione isso aqui:

    Código:
    Dim i As Long

        '''''''''''''''''
        'Item Spawn List'
        lstItemSpawn.Clear
        lstItemSpawn.AddItem "None " 'Popular Listagem
        For i = 1 To MAX_ITEMS
            lstItemSpawn.AddItem i & ": " & Trim$(Item(i).Name)
        Next

    Ao clicar nele, ele limpara a listagem de itens e repopulará ela para você.
    Assim você terá a listagem atualizada sempre que clicar nele.

    0.3 Botão de Enviar o Comando - Spawn Item

    Dê duplo click dentro dele e adicione:

    Código:
    Dim ItemNum As Long
    Dim Amount As Long

        If GetPlayerAccess(MyIndex) >= ACCESS_DEVELOPER Then 'Note que essa parte de Access pode ser diferente na sua engine.
            ItemNum = lstItemSpawn.ListIndex
            If ItemNum <= 0 Or ItemNum > Max_Items Then Exit Sub 'Note que essa parte de MAX_Items constant pode ser diferente na sua engine.
            Amount = Abs(txtAmountSpawn.Text)
           
            Call SendNeedSpawnItem(ItemNum, Amount)
        Else
            Call AddText("Invalid command!", Red)
        End If

    0.4 Criando Pacote de Envio de Comando

    Vá ao modClientTCP, no final dele adicione:

    Código:
    Public Sub SendNeedSpawnItem(ByVal ItemNum As Long, ByVal Amount As Long)
    Dim Buffer As clsBuffer

        Set Buffer = New clsBuffer
        Buffer.WriteLong CNeedSpawnItem
        Buffer.WriteLong ItemNum
        Buffer.WriteLong Amount
        SendData Buffer.ToArray()
        Set Buffer = Nothing
    End Sub

    0.5 Adicionando Enumerations do Cliente

    Vá ao modEnumerations, procure por:

    Código:
        ' Make sure CMSG_COUNT is below everything else
        CMSG_COUNT

    Acima dele adicione:

    Código:
    CNeedSpawnItem

    Cliente está pronto, vamos ao Servidor.

    Server Side ~

    0.6 Adicionando Enumerations do Servidor

    Vá ao modEnumerations do Servidor, procure por


    Código:
        ' Make sure CMSG_COUNT is below everything else
        CMSG_COUNT

    Acima dele adicione:

    Código:
    CNeedSpawnItem

    0.7 Recebendo o Pacote e Creditando ao Player

    Dentro do ModHandleData no servidor, no começo dele (em geral) primera sub, procure por:

    Código:
    Public Sub InitMessages()

    dentro dela e antes do End Sub adicione:

    Código:
    HandleDataSub(CNeedSpawnItem) = GetAddress(AddressOf HandleNeedSpawnItem)

    No Final do ModHandleData no servidor , adicione:

    Código:

    Private Sub HandleNeedSpawnItem(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
    Dim buffer As clsBuffer
    Dim itemNum As Long
    Dim Amount As Long


        Set buffer = New clsBuffer
        buffer.WriteBytes Data()
        itemNum = buffer.ReadLong
        Amount = buffer.ReadLong
        Set buffer = Nothing
       
        'Prevent out
        If itemNum <= 0 Or itemNum > Max_Items Then Exit Sub 'Note que o Max_Items pode ser diferente na sua Engine.
       
        GiveInvItem Index, itemNum, Amount
        PlayerMsg Index, "Você recebeu do Console: " & Trim$(Item(itemNum).Name) & " x" & Amount & ".", BrightGreen
       
           

    End Sub





    Pronto, agora o item de Spawn será entregue direto na bolsa do (Index) que é o Usuário Administrador que solicitou o comando.

    Com uma pequena edição é possível enviar isso para outros jogadores online, bastando alterar o Index que chegar, ou enviar o nome do usuário em conjunto e usar o FindPlayer(Nome) para conseguir o index desse jogador.

    Com mais tempo eu posto add-on's para essa função.

    Att


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

    Mensagens : 17
    Créditos : 2

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

    Re: [Prof~] Spawn de Item direto na Bolsa

    Mensagem por Mizuki em Dom Ago 12, 2018 8:54 pm

    bom garoto assim que eu gosto +1 credts pra oc


    _________________
    vem sempre aqui?  I love you
    avatar
    MasterOp
    Iniciante
    Iniciante

    Mensagens : 44
    Créditos : 2

    Re: [Prof~] Spawn de Item direto na Bolsa

    Mensagem por MasterOp em Qui Set 27, 2018 5:39 pm

    Uma pequena modificação para enviar para qualquer pessoa.
    Atenção: Para fazer esta modificação é necessário ter adicionado o sistema acima!


    No cliente


    Crie uma TextBox com o nome : txtNome




    0.1 Botão de Enviar o Comando - Spawn Item

    Dê duplo click dentro dele e substitua por esse:




    Código:
    Dim ItemNum As Long
    Dim Amount As Long
    Dim nome as string

        If GetPlayerAccess(MyIndex) >= ACCESS_DEVELOPER Then 'Note que essa parte de Access pode ser diferente na sua engine.
            ItemNum = lstItemSpawn.ListIndex
            If ItemNum <= 0 Or ItemNum > Max_Items Then Exit Sub 'Note que essa parte de MAX_Items constant pode ser diferente na sua engine.
            Amount = Abs(txtAmountSpawn.Text)
            nome = Abs(txtNome.Text)
            if nome = vbnullstring then
            call addtext("nome do jogador não pode está em branco!!",red)
            exit sub
            end if
            
            Call SendNeedSpawnItem(ItemNum, Amount, nome)
        Else
            Call AddText("Invalid command!", Red)
        End If


    0.2 alterando Pacote de Envio de Comando


    substitua toda a sub SendNeedSpawnItem por esse codigo.



    Código:
    Public Sub SendNeedSpawnItem(ByVal ItemNum As Long, ByVal Amount As Long, byval nome as string)
    Dim Buffer As clsBuffer

        Set Buffer = New clsBuffer
        Buffer.WriteLong CNeedSpawnItem
        Buffer.WriteLong ItemNum
        Buffer.WriteLong Amount
        Buffer.Writestring nome

        SendData Buffer.ToArray()
        Set Buffer = Nothing
    End Sub


    Agora no servidor.


    No  ModHandleData no servidor , substitua toda a sub HandleNeedSpawnItem por:



    Código:
    Private Sub HandleNeedSpawnItem(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
    Dim buffer As clsBuffer
    Dim itemNum As Long
    Dim Amount As Long
    dim nome as string


        Set buffer = New clsBuffer
        buffer.WriteBytes Data()
        itemNum = buffer.ReadLong
        Amount = buffer.ReadLong
        nome = buffer.Readstring
        Set buffer = Nothing
        
        'Prevent out
        If itemNum <= 0 Or itemNum > Max_Items Then Exit Sub 'Note que o Max_Items pode ser diferente na sua Engine.      


    'Procurando index do player, se for igual ao nome ele dara a index

        for players =1 to max_players
        if isplaying(players) then
        if nome = getplayername(players) then
        
        GiveInvItem players, itemNum, Amount
        PlayerMsg players, "Você recebeu do Console: " & Trim$(Item(itemNum).Name) & " x" & Amount & ".", BrightGreen
        else
        playermsg index ,"Jogador " & nome & " Não existe ou está offline!!",red
        exit sub
            
        end if
        end if
        next
        End Sub




    _________________
    Um tiro e 20 mortes.......-Desnecessário
    avatar
    Mizuki
    Novato
    Novato

    Mensagens : 17
    Créditos : 2

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

    Re: [Prof~] Spawn de Item direto na Bolsa

    Mensagem por Mizuki em Sex Set 28, 2018 6:04 am

    muito bom mais não seria melhor em vez de um txtbox por um combobox puxando o idex de quem esta online isso facilitaria bastante


    _________________
    vem sempre aqui?  I love you
    avatar
    MasterOp
    Iniciante
    Iniciante

    Mensagens : 44
    Créditos : 2

    Re: [Prof~] Spawn de Item direto na Bolsa

    Mensagem por MasterOp em Sex Set 28, 2018 10:18 am

    eu acho mais pratico digitar o nome, mas depende do gosto de cada um.


    _________________
    Um tiro e 20 mortes.......-Desnecessário

    Conteúdo patrocinado

    Re: [Prof~] Spawn de Item direto na Bolsa

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Seg Out 22, 2018 5:27 pm