Suporte ao desenvolvimento de jogos!


    Sistema de Quest

    Compartilhe
    avatar
    Valentine
    Administrador
    Administrador

    Medalhas :
    Mensagens : 4751
    Créditos : 1009

    Sistema de Quest

    Mensagem por Valentine em Qua Fev 08, 2012 1:57 pm

    Esse tutorial foi traduzido e modificado.

    Bom,você tem duas opções,baixar o Eclipse Origins com o sistema já implantado: http://www.mediafire.com/?8oq70z4cq2qik26
    Ou seguir o tutorial e implantar manualmente na sua source,tendo de trocar apenas alguns arquivos: http://www.mediafire.com/?g1gn1bosic8aan1

    Foto:


    Vamos começar com a Source do servidor
    no modConstants,procure:
    Código:
    Public Const MAX_PARTY_MEMBERS As Long = 4

    Abaixo,adicione:
    Código:
    Public Const MAX_QUESTS As Byte = 70

    Agora no modCombat,procure:
    Código:
    If Len(Trim$(NPC(npcNum).AttackSay)) > 0 Then

    depois disso,após o else,adicione:
    Código:
                        If NPC(npcNum).Behaviour = NPC_BEHAVIOUR_FRIENDLY Then
                                Call CheckTasks(attacker, QUEST_TYPE_GOTALK, npcNum)
                                Call CheckTasks(attacker, QUEST_TYPE_GOGIVE, npcNum)
                                Call CheckTasks(attacker, QUEST_TYPE_GOGET, npcNum)
                                
                                If NPC(npcNum).Quest = YES Then
                                    If CanStartQuest(attacker, NPC(npcNum).QuestNum) Then
                                        'if can start show the request message (chat1)
                                        QuestMessage attacker, NPC(npcNum).QuestNum, Trim$(Quest(NPC(npcNum).QuestNum).Chat(1)), NPC(npcNum).QuestNum
                                        Exit Function
                                    End If
                                    If QuestInProgress(attacker, NPC(npcNum).QuestNum) Then
                                        'if the quest is in progress show the meanwhile message (chat2)
                                        PlayerMsg attacker, Trim$(NPC(npcNum).Name) + ": " + Trim$(Quest(NPC(npcNum).QuestNum).Chat(2)), BrightGreen
                                        'QuestMessage attacker, NPC(npcNum).QuestNum, Trim$(Quest(NPC(npcNum).QuestNum).Chat(2)), 0
                                        Exit Function
                                    End If
                                End If
                            End If

    Procure por:
    Código:
    ' send death to the map

    Abaixo adicione isso:
    Código:
    Call CheckTasks(attacker, QUEST_TYPE_GOSLAY, npcNum)

    Agora procure por:
    Código:
    Call OnDeath(victim)

    Acima adicione isso:
    Código:
    Call CheckTasks(attacker, QUEST_TYPE_GOKILL, victim)

    Agora,no modGeneral

    Procure por:
    Código:
    ChkDir App.Path & "\Data\", "spells"

    Coloque isso abaixo:
    Código:
    ChkDir App.Path & "\Data\", "quests"

    Procure agora por:
    Código:
    Call ClearAnimations

    Adicione isso abaixo:
    Código:
    Call SetStatus("Escaneando missões...")
    Call ClearQuests

    Agora,procure por isso:
    Código:
    Call LoadAnimations

    Adicione isso abaixo:
    Código:
    Call SetStatus("Carregando missões...")
    Call LoadQuests

    Agora,no modHandleData

    Procure por
    Código:
    HandleDataSub(CPartyLeave) = GetAddress(AddressOf HandlePartyLeave)

    Adicione abaixo:
    Código:
    HandleDataSub(CRequestEditQuest) = GetAddress(AddressOf HandleRequestEditQuest)
        HandleDataSub(CSaveQuest) = GetAddress(AddressOf HandleSaveQuest)
        HandleDataSub(CRequestQuests) = GetAddress(AddressOf HandleRequestQuests)
        HandleDataSub(CPlayerHandleQuest) = GetAddress(AddressOf HandlePlayerHandleQuest)
        HandleDataSub(CQuestLogUpdate) = GetAddress(AddressOf HandleQuestLogUpdate)

    Agora,no final do modHandleData adicione isso:
    Código:
    Sub HandleRequestEditQuest(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
        Dim Buffer As clsBuffer

        ' Prevent hacking
        If GetPlayerAccess(Index) < ADMIN_DEVELOPER Then
            Exit Sub
        End If

        Set Buffer = New clsBuffer
        Buffer.WriteLong SQuestEditor
        SendDataTo Index, Buffer.ToArray()
        Set Buffer = Nothing
    End Sub

    Sub HandleSaveQuest(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
        Dim n As Long
        Dim Buffer As clsBuffer
        Dim QuestSize As Long
        Dim QuestData() As Byte
        Set Buffer = New clsBuffer
        Buffer.WriteBytes Data()

        ' Prevent hacking
        If GetPlayerAccess(Index) < ADMIN_DEVELOPER Then
            Exit Sub
        End If

        n = Buffer.ReadLong 'CLng(Parse(1))

        If n < 0 Or n > MAX_QUESTS Then
            Exit Sub
        End If
        
        ' Update the Quest
        QuestSize = LenB(Quest(n))
        ReDim QuestData(QuestSize - 1)
        QuestData = Buffer.ReadBytes(QuestSize)
        CopyMemory ByVal VarPtr(Quest(n)), ByVal VarPtr(QuestData(0)), QuestSize
        Set Buffer = Nothing
        
        ' Save it
        Call SendUpdateQuestToAll(n)
        Call SaveQuest(n)
        Call AddLog(GetPlayerName(Index) & " salvou missão #" & n & ".", ADMIN_LOG)
    End Sub

    Sub HandleRequestQuests(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
        SendQuests Index
    End Sub

    Sub HandlePlayerHandleQuest(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
        Dim Buffer As clsBuffer
        Dim QuestNum As Long, Order As Long, i As Long
        
        Set Buffer = New clsBuffer
        Buffer.WriteBytes Data()
        QuestNum = Buffer.ReadLong
        Order = Buffer.ReadLong '1 = accept, 2 = cancel
        
        If Order = 1 Then
            Player(Index).PlayerQuest(QuestNum).Status = QUEST_STARTED '1
            Player(Index).PlayerQuest(QuestNum).ActualTask = 1
            Player(Index).PlayerQuest(QuestNum).CurrentCount = 0
            PlayerMsg Index, "New quest accepted: " & Trim$(Quest(QuestNum).Name) & "!", BrightGreen
            'Add item on start
            If Quest(QuestNum).QuestGiveItem > 0 And Quest(QuestNum).QuestGiveItem < MAX_ITEMS Then
                If Quest(QuestNum).QuestGiveItemValue > 0 And Quest(QuestNum).QuestGiveItemValue < MAX_INV Then 'ToDo: stuff with currency
                    GiveInvItem Index, Quest(QuestNum).QuestGiveItem, Quest(QuestNum).QuestGiveItemValue
                End If
            End If
            
        ElseIf Order = 2 Then
            Player(Index).PlayerQuest(QuestNum).Status = QUEST_NOT_STARTED '2
            Player(Index).PlayerQuest(QuestNum).ActualTask = 1
            Player(Index).PlayerQuest(QuestNum).CurrentCount = 0
            PlayerMsg Index, Trim$(Quest(QuestNum).Name) & " foi cancelada!", BrightGreen
        End If
        
        SavePlayer Index
        SendPlayerData Index
        SendPlayerQuests Index
        
        Set Buffer = Nothing
    End Sub

    Sub HandleQuestLogUpdate(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
        SendPlayerQuests Index
    End Sub

    Agora,no modTypes

    Procure por:
    Código:
    Dir As Byte

    Abaixo cole:
    PlayerQuest(1 To MAX_QUESTS) As PlayerQuestRec

    Agora,procure por isso:
    Código:
    Level As Long

    Adicione isso abaixo:
    Código:
    Quest As Byte
        QuestNum As Long


    Agora,no modEnumerations

    Procure por:
    Código:
    SPartyVitals

    Abaixo coloque:
    Código:
       SQuestEditor
        SUpdateQuest
        SPlayerQuest
        SQuestMessage

    Procure agora:
    Código:
    CPartyLeave

    Adicione Abaixo:
    Código:
       CRequestEditQuest
        CSaveQuest
        CRequestQuests
        CPlayerHandleQuest
        CQuestLogUpdate

    Agora,vamos ao modPlayer

    Procure por:
    Código:
    Call SendHotbar(Index)

    Cole abaixo:
    Código:
    Call SendQuests(Index)

    Procure por:
    Código:
    TempPlayer(Index).GettingMap = YES

    Cole abaixo:
    Código:
    Call CheckTasks(Index, QUEST_TYPE_GOREACH, mapNum)

    Procure agora por:
    Código:
    SendActionMsg GetPlayerMap(Index), Msg, White, 1, (GetPlayerX(Index) * 32), (GetPlayerY(Index) * 32)

    Cole abaixo:
    Código:
    Call CheckTasks(Index, QUEST_TYPE_GOGATHER, GetItemNum(Trim$(Item(GetPlayerInvItemNum(Index, n)).Name)))

    Procure agora por:
    Código:
    SendMapSound Index, rX, rY, SoundEntity.seResource, Resource_index

    Cole abaixo
    Código:
    Call CheckTasks(Index, QUEST_TYPE_GOTRAIN, Resource_index)


    Agora no CLIENTE !!!
    adicione modQuests para seu projeto
    adicione frmEditor_Quest para seu projeto.
    Troque seu frmEditor_NPC e frmMain pelo que estava no arquivo em que baixou...

    No modConstants,procure:
    Código:
    Public Const MAX_PARTY_MEMBERS As Long = 4

    Abaixo,adicione:
    Código:
    Public Const MAX_QUESTS As Byte = 70

    Agora,no modGameEditors,procure:
    Código:
    .txtDamage.text = NPC(EditorIndex).Damage

    Abaixo,adicione:
    Código:
    .chkQuest.Value = NPC(EditorIndex).Quest
            .scrlQuest.Value = NPC(EditorIndex).QuestNum

    no modEnumerations,procure por
    Código:
    SPartyVitals

    Cole abaixo:
    Código:
       SQuestEditor
        SUpdateQuest
        SPlayerQuest
        SQuestMessage

    Agora,procure por:
    Código:
    CPartyLeave

    Abaixo,cole:
    Código:
       CRequestEditQuest
        CSaveQuest
        CRequestQuests
        CPlayerHandleQuest
        CQuestLogUpdate


    Agora,no modHandleDate procure por:
    Código:
    HandleDataSub(SPartyVitals) = GetAddress(AddressOf HandlePartyVitals)

    Abaixo cole:
    Código:
       HandleDataSub(SQuestEditor) = GetAddress(AddressOf HandleQuestEditor)
        HandleDataSub(SUpdateQuest) = GetAddress(AddressOf HandleUpdateQuest)
        HandleDataSub(SPlayerQuest) = GetAddress(AddressOf HandlePlayerQuest)
        HandleDataSub(SQuestMessage) = GetAddress(AddressOf HandleQuestMessage)


    no final do modHandleDate cole isso:
    Código:
    Private Sub HandleQuestEditor()
        Dim i As Long
        
        With frmEditor_Quest
            Editor = EDITOR_TASKS
            .lstIndex.Clear

            ' Add the names
            For i = 1 To MAX_QUESTS
                .lstIndex.AddItem i & ": " & Trim$(Quest(i).Name)
            Next

            .Show
            .lstIndex.ListIndex = 0
            QuestEditorInit
        End With

    End Sub

    Private Sub HandleUpdateQuest(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
        Dim n As Long
        Dim Buffer As clsBuffer
        Dim QuestSize As Long
        Dim QuestData() As Byte
        Set Buffer = New clsBuffer
        Buffer.WriteBytes Data()
        n = Buffer.ReadLong
        ' Update the Quest
        QuestSize = LenB(Quest(n))
        ReDim QuestData(QuestSize - 1)
        QuestData = Buffer.ReadBytes(QuestSize)
        CopyMemory ByVal VarPtr(Quest(n)), ByVal VarPtr(QuestData(0)), QuestSize
        Set Buffer = Nothing
    End Sub

    Private Sub HandlePlayerQuest(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
        Dim Buffer As clsBuffer
        Dim i As Long

        Set Buffer = New clsBuffer
        Buffer.WriteBytes Data()
            
        For i = 1 To MAX_QUESTS
            Player(MyIndex).PlayerQuest(i).Status = Buffer.ReadLong
            Player(MyIndex).PlayerQuest(i).ActualTask = Buffer.ReadLong
            Player(MyIndex).PlayerQuest(i).CurrentCount = Buffer.ReadLong
        Next
        
        RefreshQuestLog
        
        Set Buffer = Nothing
    End Sub

    Private Sub HandleQuestMessage(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
        Dim Buffer As clsBuffer
        Dim i As Long, QuestNum As Long, QuestNumForStart As Long
        Dim Message As String
        
        Set Buffer = New clsBuffer
        Buffer.WriteBytes Data()
        QuestNum = Buffer.ReadLong
        Message = Trim$(Buffer.ReadString)
        QuestNumForStart = Buffer.ReadLong
        
        frmMain.lblQuestName = Trim$(Quest(QuestNum).Name)
        frmMain.lblQuestSay = Message
        frmMain.picQuestDialogue.Visible = True
        
        If QuestNumForStart > 0 And QuestNumForStart <= MAX_QUESTS Then
            frmMain.lblQuestAccept.Visible = True
            frmMain.lblQuestAccept.Tag = QuestNumForStart
        End If
            
        Set Buffer = Nothing
    End Sub

    no modInput,procure por:
    Código:
    SendRequestEditSpell

    abaixo,cole:
    Código:
                   Case "/editquest"
                        If GetPlayerAccess(MyIndex) < ADMIN_DEVELOPER Then GoTo Continue
                        SendRequestEditQuest


    em modType,procure por:
    Código:
    Step As Byte

    Abaixo,cole:
    Código:
    PlayerQuest(1 To MAX_QUESTS) As PlayerQuestRec

    Agora,procure por:
    Código:
    Level As Long

    E por último cole:
    Código:
       Quest As Byte
        QuestNum As Long

    Bom,é um tutorial bem grande,e levou um bom tempo para modificar e traduzir tudo =)
    Qualquer problema poste aqui...

    Creditos:

    Alatar - Por fazer
    Terabin - Por traduzir
    Ricardo - Por Postar na MMORPGBR
    Valentine - Por Postar na Aldeia RPG e corrigir alguns bugs do tutorial


    Última edição por Valentine em Sab Jun 28, 2014 11:10 am, editado 2 vez(es)


    _________________

    marlisson01
    Iniciante
    Iniciante

    Mensagens : 31
    Créditos : 2

    Re: Sistema de Quest

    Mensagem por marlisson01 em Qui Mar 08, 2012 10:04 am

    Como é abre esse comando no eclipse ?
    avatar
    danielnathan
    Novato
    Novato

    Mensagens : 4
    Créditos : 0

    Re: Sistema de Quest

    Mensagem por danielnathan em Qua Jun 13, 2012 7:19 pm

    seu tutorial e muito bom eu baixei o o e.o. com o sistema de quest mais n sei como alterar a quest oq faço
    avatar
    Zeus
    Novato
    Novato

    Mensagens : 17
    Créditos : 0

    Re: Sistema de Quest

    Mensagem por Zeus em Qua Jun 27, 2012 2:02 pm

    Segue o modelo da quest, pra abrir o editor digita /editquest no chat
    avatar
    Leleo
    Novato
    Novato

    Mensagens : 1
    Créditos : 0

    Re: Sistema de Quest

    Mensagem por Leleo em Qui Ago 09, 2012 9:56 am

    Vc não tem as GUI dessa quest system?
    pq aqui fica tudo preto e eu num sei mexer muito bem com essas GUI ..
    Mas o sistema deu certinho vlw Very Happy
    avatar
    Kirigaya Uchiha
    Novato
    Novato

    Mensagens : 18
    Créditos : 0

    Re: Sistema de Quest

    Mensagem por Kirigaya Uchiha em Seg Nov 19, 2012 5:25 pm

    esse quest system da para o vx ace?


    _________________


    Meu forum Sword Art Online! Visitem e Registam-se Angel

    Spoiler:
    http://saoportugal.forum-livre.com
    avatar
    Laxus
    Aldeia Friend
    Aldeia Friend

    Mensagens : 1151
    Créditos : 77

    Re: Sistema de Quest

    Mensagem por Laxus em Seg Nov 19, 2012 9:14 pm

    Desculpe mais você reviveu um tópico para isso¬¬ esse sistema e para engine eclipse origins não para jogos rpg maker entende?


    _________________
    "Não importa o quão forte o cara é, o que importa é encara-lo de frente sem fraquejar"
                                                                                                                                                        Laxus ~ Fairy Tail
    avatar
    Heathclifff
    Novato
    Novato

    Mensagens : 17
    Créditos : 2

    Re: Sistema de Quest

    Mensagem por Heathclifff em Sex Maio 17, 2013 2:08 pm

    Otimo Mais, Como tenho muita preguiça de Ficar adicionando isso, eu queria saber se temc omo eu apenas substituir os itens modificados no tutorial, assin seria bem mais facil, e rapido... Question


    _________________


     
    Remnant War:

    avatar
    Lief
    Desenvolvedor
    Desenvolvedor

    Mensagens : 830
    Créditos : 50

    Re: Sistema de Quest

    Mensagem por Lief em Ter Fev 11, 2014 9:38 pm

    Desculpa reviver o tópico, fiz tudo direitinho mas tá dando erro aqui, olha a print:
    @edit: corrigi, mas quando uso o comando /editquest dá "Runtime error '9' subscript out of range"
    nessa linha:


    _________________
    A cidade tem medo de mim. Eu vi sua verdadeira face. As ruas são sarjetas dilatadas cheias de sangue e, quando os bueiros transbordarem, todos os vermes vão se afogar. A imundice de todo sexo e matanças vai espumar até a cintura e as putas e os políticos vão olhar para cima gritando "salve-nos"... e eu vou olhar para baixo e dizer "não".
    avatar
    Dooolly
    Moderador Global
    Moderador Global

    Medalhas :
    Mensagens : 1221
    Créditos : 137

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

    Re: Sistema de Quest

    Mensagem por Dooolly em Ter Fev 11, 2014 9:56 pm

    add a modquest no seu client e servidor..

    Conteúdo patrocinado

    Re: Sistema de Quest

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Ter Fev 20, 2018 2:18 pm