Sistema de Quest Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

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

Sistema de Quest

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

Página 1 de 3 1, 2, 3  Seguinte

Ir para baixo

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)
Valentine
Valentine
Administrador
Administrador

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

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

Sistema de Quest Empty Re: Sistema de Quest

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

Como é abre esse comando no eclipse ?

marlisson01
Iniciante
Iniciante

Mensagens : 31
Créditos : 2

Ir para o topo Ir para baixo

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
danielnathan
danielnathan
Novato
Novato

Mensagens : 4
Créditos : 0

Ir para o topo Ir para baixo

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
Zeus
Zeus
Novato
Novato

Mensagens : 17
Créditos : 0

Ir para o topo Ir para baixo

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
Leleo
Leleo
Novato
Novato

Mensagens : 1
Créditos : 0

Ir para o topo Ir para baixo

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:
Kirigaya Uchiha
Kirigaya Uchiha
Novato
Novato

Mensagens : 18
Créditos : 0

Ir para o topo Ir para baixo

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
Laxus
Laxus
Aldeia Friend
Aldeia Friend

Mensagens : 1150
Créditos : 78

Ir para o topo Ir para baixo

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:
Heathclifff
Heathclifff
Novato
Novato

Mensagens : 17
Créditos : 2

Ir para o topo Ir para baixo

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
Lief
Lief
Desenvolvedor
Desenvolvedor

Mensagens : 834
Créditos : 50

http://shafou.com

Ir para o topo Ir para baixo

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

Ir para o topo Ir para baixo

Sistema de Quest Empty Re: Sistema de Quest

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Página 1 de 3 1, 2, 3  Seguinte

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos