Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte ao desenvolvimento de jogos


+12
Dexter
Snoopy
Dooolly
Lief
Heathclifff
Laxus
Kirigaya Uchiha
Leleo
Zeus
danielnathan
marlisson01
Valentine
16 participantes

    Sistema de Quest

    Valentine
    Valentine
    Administrador
    Administrador


    Medalhas : Sistema de Quest ZgLkiRU
    Mensagens : 5345
    Créditos : 1164

    Sistema de Quest Empty Sistema de Quest

    Mensagem por Valentine 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:
    Sistema de Quest 2jfgbd5

    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 Sáb Jun 28, 2014 11:10 am, editado 2 vez(es)
    avatar
    marlisson01
    Iniciante
    Iniciante


    Mensagens : 31
    Créditos : 2

    Sistema de Quest Empty Re: Sistema de Quest

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

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


    Mensagens : 4
    Créditos : 0

    Sistema de Quest Empty Re: Sistema de Quest

    Mensagem por danielnathan 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
    Zeus
    Zeus
    Novato
    Novato


    Mensagens : 17
    Créditos : 0

    Sistema de Quest Empty Re: Sistema de Quest

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

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


    Mensagens : 1
    Créditos : 0

    Sistema de Quest Empty Re: Sistema de Quest

    Mensagem por Leleo 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
    Kirigaya Uchiha
    Kirigaya Uchiha
    Novato
    Novato


    Mensagens : 18
    Créditos : 0

    Sistema de Quest Empty Re: Sistema de Quest

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

    esse quest system da para o vx ace?


    _________________
    Sistema de Quest 158a63o

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

    Spoiler:
    Laxus
    Laxus
    Aldeia Friend
    Aldeia Friend


    Mensagens : 1150
    Créditos : 78

    Sistema de Quest Empty Re: Sistema de Quest

    Mensagem por Laxus 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
    Heathclifff
    Heathclifff
    Novato
    Novato


    Mensagens : 17
    Créditos : 2

    Sistema de Quest Empty Re: Sistema de Quest

    Mensagem por Heathclifff 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


    _________________
    Sistema de Quest Heathcliff

     
    Remnant War:
    Lief
    Lief
    Desenvolvedor
    Desenvolvedor


    Mensagens : 834
    Créditos : 50

    Sistema de Quest Empty Re: Sistema de Quest

    Mensagem por Lief 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: Sistema de Quest Erroaf11
    Dooolly
    Dooolly
    Colaborador
    Colaborador


    Medalhas : Sistema de Quest Trophy12
    Mensagens : 1227
    Créditos : 153

    Ficha do personagem
    Nível: 1
    Experiência:
    Sistema de Quest Left_bar_bleue0/0Sistema de Quest Empty_bar_bleue  (0/0)
    Vida:
    Sistema de Quest Left_bar_bleue30/30Sistema de Quest Empty_bar_bleue  (30/30)

    Sistema de Quest Empty Re: Sistema de Quest

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

    add a modquest no seu client e servidor..

    Conteúdo patrocinado


    Sistema de Quest Empty Re: Sistema de Quest

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Dom Nov 24, 2024 4:16 pm