MMORPG Brasil
Ola, visitante! Agradecemos sua visita, para ter acesso a todo nosso conteúdo recomendamos que faça um cadastro no fórum, com ele você pode participar de tópicos e ter acesso a todas áreas da comunidade!

Participe do fórum, é rápido e fácil

MMORPG Brasil
Ola, visitante! Agradecemos sua visita, para ter acesso a todo nosso conteúdo recomendamos que faça um cadastro no fórum, com ele você pode participar de tópicos e ter acesso a todas áreas da comunidade!
MMORPG Brasil
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[Pedido] Sistema de Quest

+2
maninho21
TheKirin
6 participantes

Ir para baixo

[Pedido] Sistema de Quest Empty [Pedido] Sistema de Quest

Mensagem por TheKirin Sáb 09 Fev 2013, 17:35

Eu preciso de um tutorial de sistema de quest eu não achei nenhum...

Se alguém poder disponibilizar para mim eu agradeço e dou +1

Vlw!
TheKirin
TheKirin
Membro Vitalicio
Membro Vitalicio

Mensagens : 561

Ir para o topo Ir para baixo

[Pedido] Sistema de Quest Empty Re: [Pedido] Sistema de Quest

Mensagem por maninho21 Sáb 09 Fev 2013, 18:16

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:
[Pedido] Sistema de Quest 2jfgbd5

Vamos começar com a Source do servidor
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...

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

Creditos:

Alatar - Por fazer
Terabin - Por traduzir
Ricardo - Por Postar na MMORPGBR
Valentine - Por Postar na Aldeia RPG
A min - Por pegar la na aldeia e colocar o tuto pra você
maninho21
maninho21
Membro
Membro

Mensagens : 234

Ir para o topo Ir para baixo

[Pedido] Sistema de Quest Empty Re: [Pedido] Sistema de Quest

Mensagem por TheKirin Sáb 09 Fev 2013, 19:13

Muito Obrigado mesmo +1 ^^


Edit: ta dando erro aqui quando vou compilar...

Print:
https://2img.net/r/ihimg/f/33/imagemyk.png/

[Pedido] Sistema de Quest Imagemyk

OBS: eu estou usando a versão FULL
TheKirin
TheKirin
Membro Vitalicio
Membro Vitalicio

Mensagens : 561

Ir para o topo Ir para baixo

[Pedido] Sistema de Quest Empty Re: [Pedido] Sistema de Quest

Mensagem por lucas100vzs Sáb 09 Fev 2013, 20:02

Simples, vá abra seu "Client.vbp" e em "ModConstants" depois de:

Código:
Public Const MAX_PARTYS As Long =

Adicione isto:

Código:
Public Const MAX_QUESTS as Long = 30 ' Ou o número máximo de quests

E a mesma coisa no servidor, abra seu "Server.vbp" e em "ModConstants" , depois de:

Código:
Public Const MAX_PARTYS As Long =

Adicione isto:

Código:
Public Const MAX_QUESTS as Long = 30 ' Ou o número máximo de quests

OBS: Lembrando que o "Max_Quests" do cliente deve ser igual o do servidor....

E pronto, compile e seja feliz!! Very Happy
lucas100vzs
lucas100vzs
Membro Sênior
Membro Sênior

Mensagens : 396

Ir para o topo Ir para baixo

[Pedido] Sistema de Quest Empty Re: [Pedido] Sistema de Quest

Mensagem por Himinato Dom 03 Mar 2013, 08:28

como eu abro o sistema de quest ?
Himinato
Himinato
Membro
Membro

Mensagens : 130

Ir para o topo Ir para baixo

[Pedido] Sistema de Quest Empty Re: [Pedido] Sistema de Quest

Mensagem por TheKirin Dom 03 Mar 2013, 12:40

@Himinato

Abre digitando /editquest

OBS: só admin pode fazer esse comando

OBG para todos os 2 que me ajudaram + 1 pra vcs...

Esqueci de falar Smile
TheKirin
TheKirin
Membro Vitalicio
Membro Vitalicio

Mensagens : 561

Ir para o topo Ir para baixo

[Pedido] Sistema de Quest Empty Re: [Pedido] Sistema de Quest

Mensagem por sushi123 Dom 03 Mar 2013, 12:54

pelo que parece topico resolvido ? se for .. vo chamar um mod para trancar Razz
sushi123
sushi123
Banido
Banido

Mensagens : 188

Ir para o topo Ir para baixo

[Pedido] Sistema de Quest Empty Re: [Pedido] Sistema de Quest

Mensagem por Blizzard Dom 03 Mar 2013, 13:16

Tópico resolvido,trancado de movido.
Blizzard
Blizzard
Membro Vitalicio
Membro Vitalicio

Mensagens : 603

Ir para o topo Ir para baixo

[Pedido] Sistema de Quest Empty Re: [Pedido] Sistema de Quest

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

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