Universo Games
Ola , Convidado



Você ainda não e cadastrado então cadastre-se e veja todas as atualizações no mundo rpg!!!
Universo Games

Suporte e Desenvolvimento só no Universo Games

Ola Convidado, Seja Bem vindo a equipe lhe deseja boa sorte no seu projeto!

Você não está conectado. Conecte-se ou registre-se

Sistema de Quest com Editor

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1Tutorial Sistema de Quest com Editor em Qua 22 Jul 2015, 01:48

Luucas Robeerto


Fundador
Fundador
Este é o tutorial da engine do tópico:
[Você precisa estar registrado e conectado para ver este link.]

Faça um Backup do seu Projeto antes de continuar.
Eu não testei o tutorial logo se tiver algo faltando, comente.

Cliente Side

- Adicione a form frmMissionEditor anexada no final do post.
- Vá na frmMirage, e crie uma picturebox com o nome de picMission, coloque Visible = False, e dentro dela adicione 4 labels, uma com o nome de lblMissionName(será o nome da quest), outro com lblFala (a fala da quest), e os outros dois serão lblOpcao1 e lblOpcao2 (as respostas).
- Agora crie mais uma picturebox, esta será pra mostrar as nossas missões, coloque o nome de picMyMissions, Visible = False, e dentro dela coloque 2 listboxs, um com nome de lstMissions e outro de lstCompletedMissions. Agora crie um botão para abrir essa picture e adicione dentro:

Código:
picMyMissions.Visible = Not picMyMissions.Visible

Dê 2 cliques na lblOpcao1 e adicione:
Código:
Select Case lblOpcao1.Caption
    Case "Aceitar"
    Call SendData("aceitarmissao" & SEP_CHAR & lblMissionName.Caption & END_CHAR)
    picMission.Visible = False
    
    Case "Voltar"
    picMission.Visible = False
    
    Case "Pegar recompensas"
    Call SendData("pegarrecompensas" & SEP_CHAR & lblMissionName.Caption & END_CHAR)
    picMission.Visible = False
End Select

Na lblOpcao2 adicione:
Código:
Select Case lblOpcao2.Caption
    Case "Rejeitar"
    picMission.Visible = False
    
    Case "Desistir"
    Call SendData("desistirmissao" & SEP_CHAR & lblMissionName.Caption & END_CHAR)
    picMission.Visible = False
    
    Case "Esquecer recompensas"
    Call SendData("esquecerrecompensas" & SEP_CHAR & lblMissionName.Caption & END_CHAR)
    picMission.Visible = False
    
End Select

Procure:
Código:
Public MAX_SPEECH As Long

Em baixo adicione:
Código:
Public MAX_MISSIONS As Long

Procure:
Código:
Type ItemRec
    Name As String * NAME_LENGTH
    desc As String * 150
    
    Pic As Long
    Type As Byte
    Data1 As Long
    Data2 As Long
    Data3 As Long
    StrReq As Long
    DefReq As Long
    SpeedReq As Long
    MagicReq As Long
    ClassReq As Long
    AccessReq As Byte
    
    AddHP As Long
    AddMP As Long
    AddSP As Long
    AddStr As Long
    AddDef As Long
    AddMagi As Long
    AddSpeed As Long
    AddEXP As Long
    AttackSpeed As Long
End Type

Em baixo adicione:
Código:
Type MissionRec
    Name             As String ' Nome da missão
    Fala(0 To 2)     As String ' 0 = Fala ao iniciar 1 = Fala em progresso 2 = Fala final
    
    Tipo             As Byte ' Tipo da Missão
    
    ' No caso de missão tipo MATAR NPC
    NPCAMatar        As Long
    NPCAMatarQuant   As Long
    
    ' No caso de missão tipo Explorar Mapa
    MapaAExplorar    As Long
    
    ' No caso de missão tipo Falar com NPC
    NPCAFalar        As Long
    
    ' No caso de missão tipo Matar Jogador
    QuantidadeAMatar    As Long
    
    ' No caso de missão tipo Pegar Item
    ItemAPegar       As Long
    ItemAPegarQuant  As Long
    
    NextMission      As Long ' Dar outra missão ao terminar?
    Repetitiva       As Long ' Missão repetitiva?
    ' Requerimentos:
    LevelReq         As Long
    MissionReq       As Long
    ItemReq          As Long
    ItemQuantReq     As Long
    ' Recompensas:
    LevelRec         As Long
    EXPRec           As Long
    ItemRec          As Long
    ItemQuantRec     As Long
    MapRec           As Long
    XRec             As Long
    YRec             As Long
End Type

Procure:
Código:
ItemNPC(1 To MAX_NPC_DROPS) As NPCEditorRec

Adicione em baixo:
Código:
Mission     As Long

Ache:
Código:
Public Speech() As SpeechRec

Adicione em baixo:
Código:
Public Mission() As MissionRec

Ache:
Código:
Public InSpawnEditor As Boolean

Adicione em baixo:
Código:
Public InMissionEditor As Boolean

Procure:
Código:
Public Sub ArrowEditorCancel()
    InArrowEditor = False
    Unload frmEditArrows
End Sub

Em baixo ponha:
Código:
Public Sub MissionEditorInit()
    frmMissionEditor.txtName.Text = Mission(EditorIndex).Name
    frmMissionEditor.txtFala(0).Text = Mission(EditorIndex).Fala(0)
    frmMissionEditor.txtFala(1).Text = Mission(EditorIndex).Fala(1)
    frmMissionEditor.txtFala(2).Text = Mission(EditorIndex).Fala(2)
    frmMissionEditor.chkRepetir.Value = Mission(EditorIndex).Repetitiva
    frmMissionEditor.txtNextMission.Text = Mission(EditorIndex).NextMission
    frmMissionEditor.txtLvlReq.Text = Mission(EditorIndex).LevelReq
    frmMissionEditor.txtMissionReq.Text = Mission(EditorIndex).MissionReq
    frmMissionEditor.txtItemReq.Text = Mission(EditorIndex).ItemReq
    frmMissionEditor.txtItemQuantReq.Text = Mission(EditorIndex).ItemQuantReq
    frmMissionEditor.cmbType.ListIndex = Mission(EditorIndex).Tipo
    frmMissionEditor.scrlMatarNpc.Value = Mission(EditorIndex).NPCAMatar
    frmMissionEditor.txtMatarNpcQuant.Text = Mission(EditorIndex).NPCAMatarQuant
    frmMissionEditor.txtLevelRec.Text = Mission(EditorIndex).LevelRec
    frmMissionEditor.txtEXPRec.Text = Mission(EditorIndex).EXPRec
    frmMissionEditor.txtItemRec.Text = Mission(EditorIndex).ItemRec
    frmMissionEditor.txtItemQuantRec.Text = Mission(EditorIndex).ItemQuantRec
    frmMissionEditor.txtMapRec.Text = Mission(EditorIndex).MapRec
    frmMissionEditor.txtXRec.Text = Mission(EditorIndex).XRec
    frmMissionEditor.txtYRec.Text = Mission(EditorIndex).YRec
    frmMissionEditor.txtExplorarMapa.Text = Mission(EditorIndex).MapaAExplorar
    frmMissionEditor.txtNPCAFalar.Text = Mission(EditorIndex).NPCAFalar
    frmMissionEditor.txtQuantidadeAMatar.Text = Mission(EditorIndex).QuantidadeAMatar
    frmMissionEditor.scrlPegarItem.Value = Mission(EditorIndex).ItemAPegar
    frmMissionEditor.txtPegarItemQuant.Text = Mission(EditorIndex).ItemAPegarQuant
    
    frmMissionEditor.Show vbModal
End Sub
Public Sub MissionEditorCancel()
    InMissionEditor = False
    Unload frmMissionEditor
End Sub
Public Sub MissionEditorOk()
Mission(EditorIndex).Name = frmMissionEditor.txtName.Text
Mission(EditorIndex).Tipo = frmMissionEditor.cmbType.ListIndex
Mission(EditorIndex).Fala(0) = frmMissionEditor.txtFala(0).Text
Mission(EditorIndex).Fala(1) = frmMissionEditor.txtFala(1).Text
Mission(EditorIndex).Fala(2) = frmMissionEditor.txtFala(2).Text
Mission(EditorIndex).Repetitiva = frmMissionEditor.chkRepetir.Value
Mission(EditorIndex).NextMission = frmMissionEditor.txtNextMission.Text
Mission(EditorIndex).LevelReq = frmMissionEditor.txtLvlReq.Text
Mission(EditorIndex).MissionReq = frmMissionEditor.txtMissionReq.Text
Mission(EditorIndex).ItemReq = frmMissionEditor.txtItemReq.Text
Mission(EditorIndex).ItemQuantReq = frmMissionEditor.txtItemQuantReq.Text
Mission(EditorIndex).NPCAMatar = frmMissionEditor.scrlMatarNpc.Value
Mission(EditorIndex).NPCAMatarQuant = frmMissionEditor.txtMatarNpcQuant.Text
Mission(EditorIndex).LevelRec = frmMissionEditor.txtLevelRec.Text
Mission(EditorIndex).EXPRec = frmMissionEditor.txtEXPRec.Text
Mission(EditorIndex).ItemRec = frmMissionEditor.txtItemRec.Text
Mission(EditorIndex).ItemQuantRec = frmMissionEditor.txtItemQuantRec.Text
Mission(EditorIndex).MapRec = frmMissionEditor.txtMapRec.Text
Mission(EditorIndex).XRec = frmMissionEditor.txtXRec.Text
Mission(EditorIndex).YRec = frmMissionEditor.txtYRec.Text
Mission(EditorIndex).MapaAExplorar = frmMissionEditor.txtExplorarMapa.Text
Mission(EditorIndex).NPCAFalar = frmMissionEditor.txtNPCAFalar.Text
Mission(EditorIndex).QuantidadeAMatar = frmMissionEditor.txtQuantidadeAMatar.Text
Mission(EditorIndex).ItemAPegar = frmMissionEditor.scrlPegarItem.Value
Mission(EditorIndex).ItemAPegarQuant = frmMissionEditor.txtPegarItemQuant.Text

    Call SendSaveMission(EditorIndex)
    InMissionEditor = False
    Unload frmMissionEditor
End Sub

Procure:
Código:
frmNpcEditor.BigNpc.Value = Npc(EditorIndex).Big

Em baixo ponha:
Código:
frmNpcEditor.scrlMission.Value = Npc(EditorIndex).Mission

Procure:
Código:
Npc(EditorIndex).Speech = frmNpcEditor.scrlSpeech.Value

Em baixo ponha:
Código:
Npc(EditorIndex).Mission = frmNpcEditor.scrlMission.Value

Procure:
Código:
MAX_SPEECH = Val(Parse(12))

Em baixo adicionar:
Código:
MAX_MISSIONS = Val(Parse(13))

Procure:
Código:
If Parse(0) = "spawnitem" Then
        n = Val(Parse(1))
        
        MapItem(n).Num = Val(Parse(2))
        MapItem(n).Value = Val(Parse(3))
        MapItem(n).Dur = Val(Parse(4))
        MapItem(n).x = Val(Parse(5))
        MapItem(n).y = Val(Parse(6))
        Exit Sub
    End If

Em baixo coloque:
Código:
' Edit Mission Packet
    If Parse(0) = "editmission" Then
        n = Val(Parse(1))
        Mission(n).Name = Parse(2)
        Mission(n).Tipo = Parse(3)
        Mission(n).Fala(0) = Parse(4)
        Mission(n).Fala(1) = Parse(5)
        Mission(n).Fala(2) = Parse(6)
        Mission(n).LevelReq = Parse(7)
        Mission(n).MissionReq = Parse(8)
        Mission(n).ItemReq = Parse(9)
        Mission(n).ItemQuantReq = Parse(10)
        Mission(n).NextMission = Parse(11)
        Mission(n).Repetitiva = Parse(12)
        Mission(n).NPCAMatar = Parse(13)
        Mission(n).NPCAMatarQuant = Parse(14)
        Mission(n).LevelRec = Parse(15)
        Mission(n).EXPRec = Parse(16)
        Mission(n).ItemRec = Parse(17)
        Mission(n).ItemQuantRec = Parse(18)
        Mission(n).MapRec = Parse(19)
        Mission(n).XRec = Parse(20)
        Mission(n).YRec = Parse(21)
        Mission(n).MapaAExplorar = Parse(22)
        Mission(n).NPCAFalar = Parse(23)
        Mission(n).QuantidadeAMatar = Parse(24)
        Mission(n).ItemAPegar = Parse(25)
        Mission(n).ItemAPegarQuant = Parse(26)
        
        Call MissionEditorInit
        Exit Sub
    End If
    
    ' Update Mission Packet
    If Parse(0) = "updatemission" Then
    n = Val(Parse(1))
        Mission(n).Name = Parse(2)
        Mission(n).Tipo = Parse(3)
        Mission(n).Fala(0) = Parse(4)
        Mission(n).Fala(1) = Parse(5)
        Mission(n).Fala(2) = Parse(6)
        Mission(n).LevelReq = Parse(7)
        Mission(n).MissionReq = Parse(8)
        Mission(n).ItemReq = Parse(9)
        Mission(n).ItemQuantReq = Parse(10)
        Mission(n).NextMission = Parse(11)
        Mission(n).Repetitiva = Parse(12)
        Mission(n).NPCAMatar = Parse(13)
        Mission(n).NPCAMatarQuant = Parse(14)
        Mission(n).LevelRec = Parse(15)
        Mission(n).EXPRec = Parse(16)
        Mission(n).ItemRec = Parse(17)
        Mission(n).ItemQuantRec = Parse(18)
        Mission(n).MapRec = Parse(19)
        Mission(n).XRec = Parse(20)
        Mission(n).YRec = Parse(21)
        Mission(n).MapaAExplorar = Parse(22)
        Mission(n).NPCAFalar = Parse(23)
        Mission(n).QuantidadeAMatar = Parse(24)
        Mission(n).ItemAPegar = Parse(25)
        Mission(n).ItemAPegarQuant = Parse(26)
        Exit Sub
    End If

Ache:
Código:
Npc(n).Speech = Val(Parse(6))

Adicione em baixo:
Código:
Npc(n).Mission = Val(Parse(7))

Ache:
Código:
Npc(n).Speech = Val(Parse(16))

Adicione em baixo:
Código:
Npc(n).Mission = Val(Parse(17))

Logo em baixo terá z = 17, mude para 18

Procure:
Código:
' ::::::::::::::::::
    ' :: Start Speech ::
    ' ::::::::::::::::::

EM Cima adicione:
Código:
If Parse(0) = "clearmisslist" Then
        frmMirage.lstMissions.Clear
        frmMirage.lstCompletedMissions.Clear
        Exit Sub
    End If
    
    If Parse(0) = "misslist" Then
        frmMirage.lstMissions.AddItem Parse(1)
        Exit Sub
    End If
    
    If Parse(0) = "commisslist" Then
        frmMirage.lstCompletedMissions.AddItem Parse(1)
        Exit Sub
    End If
    
    ' Mission editor packet
    If Parse(0) = "missioneditor" Then
        InMissionEditor = True
        
        frmIndex.Show
        frmIndex.lstIndex.Clear
        
        For I = 1 To MAX_MISSIONS
            frmIndex.lstIndex.AddItem I & ": " & Trim(Mission(I).Name)
        Next I
        
        frmIndex.lstIndex.ListIndex = 0
        Exit Sub
    End If
    
    ' Start Mission '
    If Parse(0) = "startmission" Then
        I = Val(Parse(1)) ' Status da missão
        n = Val(Parse(2)) ' numero da missão
        
        Select Case I
        Case 1
        frmMirage.lblMissionName.Caption = Mission(n).Name
        frmMirage.lblFala.Caption = Mission(n).Fala(0)
        frmMirage.lblOpcao1.Caption = "Aceitar"
        frmMirage.lblOpcao2.Caption = "Rejeitar"
        frmMirage.picMission.Visible = True
        Case 2
        frmMirage.lblMissionName.Caption = Mission(n).Name
        frmMirage.lblFala.Caption = Mission(n).Fala(1)
        frmMirage.lblOpcao1.Caption = "Voltar"
        frmMirage.lblOpcao2.Caption = "Desistir"
        frmMirage.picMission.Visible = True
        Case 3
        frmMirage.lblMissionName.Caption = Mission(n).Name
        frmMirage.lblFala.Caption = Mission(n).Fala(2)
        frmMirage.lblOpcao1.Caption = "Pegar recompensas"
        frmMirage.lblOpcao2.Caption = "Esquecer recompensas"
        frmMirage.picMission.Visible = True
        End Select
        Exit Sub
    End If

Procure:
Código:
Packet = "SAVENPC" & SEP_CHAR & NpcNum & SEP_CHAR & Trim(Npc(NpcNum).Name) & SEP_CHAR & Trim(Npc(NpcNum).AttackSay) & SEP_CHAR & Npc(NpcNum).Sprite & SEP_CHAR & Npc(NpcNum).SpawnSecs & SEP_CHAR & Npc(NpcNum).Behavior & SEP_CHAR & Npc(NpcNum).Range & SEP_CHAR & Npc(NpcNum).STR & SEP_CHAR & Npc(NpcNum).DEF & SEP_CHAR & Npc(NpcNum).Speed & SEP_CHAR & Npc(NpcNum).MAGI & SEP_CHAR & Npc(NpcNum).Big & SEP_CHAR & Npc(NpcNum).MaxHP & SEP_CHAR & Npc(NpcNum).EXP & SEP_CHAR & Npc(NpcNum).SpawnTime & SEP_CHAR & Npc(NpcNum).Speech & SEP_CHAR

Mude para:
Código:
Packet = "SAVENPC" & SEP_CHAR & NpcNum & SEP_CHAR & Trim(Npc(NpcNum).Name) & SEP_CHAR & Trim(Npc(NpcNum).AttackSay) & SEP_CHAR & Npc(NpcNum).Sprite & SEP_CHAR & Npc(NpcNum).SpawnSecs & SEP_CHAR & Npc(NpcNum).Behavior & SEP_CHAR & Npc(NpcNum).Range & SEP_CHAR & Npc(NpcNum).STR & SEP_CHAR & Npc(NpcNum).DEF & SEP_CHAR & Npc(NpcNum).Speed & SEP_CHAR & Npc(NpcNum).MAGI & SEP_CHAR & Npc(NpcNum).Big & SEP_CHAR & Npc(NpcNum).MaxHP & SEP_CHAR & Npc(NpcNum).EXP & SEP_CHAR & Npc(NpcNum).SpawnTime & SEP_CHAR & Npc(NpcNum).Speech & SEP_CHAR & Npc(NpcNum).Mission & SEP_CHAR

Procure:
Código:
Sub SendSetPlayerSprite(ByVal Name As String, ByVal SpriteNum As Byte)
Dim Packet As String

    Packet = "SETPLAYERSPRITE" & SEP_CHAR & Name & SEP_CHAR & SpriteNum & END_CHAR
    Call SendData(Packet)
End Sub

Em baixo ponha:
Código:
Sub SendSaveMission(ByVal Num As Long)
Dim Packet As String

    Packet = "SAVEMISSION" & SEP_CHAR & Num & SEP_CHAR & Trim(Mission(Num).Name) & SEP_CHAR & Mission(Num).Tipo & SEP_CHAR & Mission(Num).Fala(0) & SEP_CHAR & Mission(Num).Fala(1) & SEP_CHAR & Mission(Num).Fala(2) & SEP_CHAR & Mission(Num).LevelReq & SEP_CHAR & Mission(Num).MissionReq & SEP_CHAR & Mission(Num).ItemReq & SEP_CHAR & Mission(Num).ItemQuantReq & SEP_CHAR & Mission(Num).NextMission & SEP_CHAR & Mission(Num).Repetitiva & SEP_CHAR & Mission(Num).NPCAMatar & SEP_CHAR & Mission(Num).NPCAMatarQuant & SEP_CHAR & Mission(Num).LevelRec & SEP_CHAR & Mission(Num).EXPRec & SEP_CHAR & Mission(Num).ItemRec & SEP_CHAR & Mission(Num).ItemQuantRec & SEP_CHAR & Mission(Num).MapRec & SEP_CHAR & Mission(Num).XRec & SEP_CHAR & Mission(Num).YRec & SEP_CHAR & Mission(Num).MapaAExplorar & SEP_CHAR & Mission(Num).NPCAFalar & SEP_CHAR & Mission(Num).QuantidadeAMatar & SEP_CHAR & Mission(Num).ItemAPegar & SEP_CHAR & Mission(Num).ItemAPegarQuant & END_CHAR
    Call SendData(Packet)
End Sub
Sub SendRequestEditMission()
Dim Packet As String

    Packet = "REQUESTEDITMISSION" & END_CHAR
    Call SendData(Packet)
End Sub

Procure:
Código:
If InSpeechEditor = True Then
        Call SendData("EDITSPEECH" & SEP_CHAR & EditorIndex & END_CHAR)
    End If

Em baixo coloque:
Código:
If InMissionEditor = True Then
        Call SendData("EDITMISSION" & SEP_CHAR & EditorIndex & END_CHAR)
    End If

Procure:
Código:
InArrowEditor = False

Em baixo ponha:
Código:
InMissionEditor = False

- Vá na frmNpcEditor e adicione um scrollbar com nome de scrlMission, uma label antes dele com Caption "Missão: " e outra label do lado dele com Caption "0" e nome de lblMission.

De dois cliques no scrlMission e adicione:
Código:
lblMission.Caption = STR(scrlMission.Value)

- Vá na frmAdmin e adicione um botão, chamado btnEditMission e com caption Editar Missões.
Dê dois cliques nele e adicione:
Código:
If GetPlayerAccess(MyIndex) >= ADMIN_MAPPER Then
Call SendRequestEditMission
Else: Call AddText("Você não está autorizado para exercer essa função.", BrightRed)
End If

Procure:
Código:
' Não estamos em jogo!
    InGame = False
    GettingMap = True
    InEditor = False
    InSpeechEditor = False
    InItemsEditor = False
    InNpcEditor = False
    InShopEditor = False
    InEmoticonEditor = False
    InArrowEditor = False
    InSpawnEditor = False

Em baixo ponha:
Código:
InMissionEditor = False

Cliente terminado.

SERVER-SIDE;

Procure:
Código:
If LCase$(Dir$(App.Path & "\falas", vbDirectory)) <> "falas" Then
        Call MkDir$(App.Path & "\Falas")
    End If

Em baixo adicione:
Código:
If LCase$(Dir$(App.Path & "\missions", vbDirectory)) <> "missions" Then
        Call MkDir$(App.Path & "\Missions")
    End If

Procure:
Código:
MAX_SPEECH = Val(GetVar(App.Path & "\Dados.ini", "MAX", "MAX_SPEECH"))

Em baixo ponha:
Código:
MAX_MISSIONS = Val(GetVar(App.Path & "\Dados.ini", "MAX", "MAX_MISSIONS"))

- Abra o arquivo Dados.ini do servidor e adicione em baixo de MAX_SPEECH=50:
Código:
MAX_MISSIONS=70

Voltando ao server side procure:
Código:
ReDim Npc(0 To MAX_NPCS) As NpcRec

Adicione em baixo:
Código:
ReDim Mission(1 To MAX_MISSIONS) As MissionRec

Procure:
Código:
Call LoadClasses

Adicione em baixo:
Código:
Call SetStatus("Limpando Missões...")
    Call ClearMissions

Procure:
Código:
Call LoadItems

Em baixo ponha:
Código:
Call SetStatus("Carregando missões...")
    Call LoadMissions

Procure:
Código:
Packs = Packs & MAX_SPEECH & SEP_CHAR

Em baixo adicione:
Código:
Packs = Packs & MAX_MISSIONS & SEP_CHAR

Procure:
Código:
Call AddLog(GetPlayerName(Index) & " editando Item #" & n & ".", ADMIN_LOG)
            Call SendEditItemTo(Index, n)
            Exit Sub

Abaixo adicione:
Código:
Case "pegarrecompensas"
            Name = Parse(1) ' nome da missao
                For i = 1 To MAX_MISSIONS
                    If Mission(i).Name = Name Then
                        If Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 3 Then
                            Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 4
                        
                        If Not Mission(i).LevelRec = 0 Then
                            If GetPlayerLevel(Index) >= MAX_LEVEL Then
                            Call SetPlayerExp(Index, Experience(MAX_LEVEL))
                            Call SendStats(Index)
                            Else
                            Call SetPlayerLevel(Index, GetPlayerLevel(Index) + Mission(i).LevelRec)
                            Call SetPlayerPOINTS(Index, GetPlayerPOINTS(Index) + Mission(i).LevelRec * 3) ' 3 = pontos ganhos por level, se for outro no seu jogo, mude

                            If GetPlayerLevel(Index) >= MAX_LEVEL Then
                                Call SetPlayerExp(Index, Experience(MAX_LEVEL))
                                Call SendStats(Index)
                            End If
                            Call SendStats(Index)
                        End If
                        End If
                        
                        If Not Mission(i).EXPRec = 0 Then
                            Call SetPlayerExp(Index, GetPlayerExp(Index) + Mission(i).EXPRec)
                            Call CheckPlayerLevelUp(Index)
                        End If
                        
                        If Not Mission(i).ItemRec = 0 Then
                            Call GiveItem(Index, Mission(i).ItemRec, Mission(i).ItemQuantRec)
                        End If
                        
                        If Not Mission(i).MapRec = 0 Then
                            Call PlayerWarp(Index, Mission(i).MapRec, Mission(i).XRec, Mission(i).YRec, True)
                        End If
                        
                        If Mission(i).Tipo = 4 Then
                            Call TakeItem(Index, Mission(i).ItemAPegar, Mission(i).ItemAPegarQuant)
                        End If
                        
                        Call PlayerMsg(Index, "Você recebeu suas recompensas", Green)
                        
                            If Mission(i).NextMission <> 0 Then
                                Player(Index).Char(Player(Index).CharNum).MissionStatus(Mission(i).NextMission) = 2
                                Call PlayerMsg(Index, "Missão " & Mission(Mission(i).NextMission).Name & " ativa!", Green)
                            End If
                        End If
                    End If
                Next
                
                Call SendMyMissions(Index)
        Exit Sub
            
        Case "esquecerrecompensas"
            Name = Parse(1) ' nome da missao
                For i = 1 To MAX_MISSIONS
                If Mission(i).Name = Name Then
                    If Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 3 Then
                        Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 4
                        
                        If Mission(i).Tipo = 4 Then
                            Call TakeItem(Index, Mission(i).ItemAPegar, Mission(i).ItemAPegarQuant)
                        End If
                        
                    Call PlayerMsg(Index, "Você terminou a missão sem receber recompensas.", White)
                    End If
                End If
                Next
                
                Call SendMyMissions(Index)
        Exit Sub
        
        Case "aceitarmissao"
            Name = Parse(1) ' nome da missao
                For i = 1 To MAX_MISSIONS
                If Mission(i).Name = Name Then
                
                    ' Requerimentos
                    If GetPlayerLevel(Index) < Mission(i).LevelReq Then
                        Call PlayerMsg(Index, "Você não tem level suficiente para esta missão.", Red)
                        Exit Sub
                    End If
                    
                    If HasItem(Index, Mission(i).ItemReq) < Mission(i).ItemQuantReq Then
                        Call PlayerMsg(Index, "Você não tem o item ou quantidade necessária!", Red)
                        Exit Sub
                    End If
                    
                    If Mission(i).MissionReq <> 0 Then
                    
                        If Player(Index).Char(Player(Index).CharNum).MissionStatus(Mission(i).MissionReq) <> 4 Then
                            Call PlayerMsg(Index, "Você não fez a missão pedida!", Red)
                            Exit Sub
                        End If
                    
                    End If
                    
                    ' Fim requerimentos
                    
                    ' Dar missão
                    Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 2
                    Call PlayerMsg(Index, "Missão '" & Name & "' ativa!", Green)
                    
                    ' Checar se ele ja tem o item no caso de missao pegar item
                    If Mission(i).Tipo = 4 Then
                        If HasItem(Index, Mission(i).ItemAPegar) >= Mission(i).ItemAPegarQuant Then
                            Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 3
                            Call PlayerMsg(Index, "Missão " & Mission(i).Name & " completa, retorne à quem lhe deu a missão para receber as recompensas.", Green)
                        End If
                    End If
                End If
                Next
                
                Call SendMyMissions(Index)
        Exit Sub
        
        Case "desistirmissao"
            Name = Parse(1) ' Nome da missao
            For i = 1 To MAX_MISSIONS
                If Mission(i).Name = Name Then
                Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 1
                Call PlayerMsg(Index, "Você desistiu da missão " & Name & ".", Red)
                End If
            Next
            
            Call SendMyMissions(Index)
        Exit Sub
            
        ' Salvar Missão
        Case "savemission"
            ' Proteção
            If GetPlayerAccess(Index) < ADMIN_MAPPER Then
                Call HackingAttempt(Index, "Admin Cloning")
                Exit Sub
            End If
            
            n = Val(Parse(1))

            If n < 0 Or n > MAX_MISSIONS Then
                Call HackingAttempt(Index, "Invalid Mission Index")
                Exit Sub
            End If

            ' Atualizar a missão
            Mission(n).Name = Parse(2)
            Mission(n).Tipo = Parse(3)
            Mission(n).Fala(0) = Parse(4)
            Mission(n).Fala(1) = Parse(5)
            Mission(n).Fala(2) = Parse(6)
            Mission(n).LevelReq = Parse(7)
            Mission(n).MissionReq = Parse(8)
            Mission(n).ItemReq = Parse(9)
            Mission(n).ItemQuantReq = Parse(10)
            Mission(n).NextMission = Parse(11)
            Mission(n).Repetitiva = Parse(12)
            Mission(n).NPCAMatar = Parse(13)
            Mission(n).NPCAMatarQuant = Parse(14)
            Mission(n).LevelRec = Parse(15)
            Mission(n).EXPRec = Parse(16)
            Mission(n).ItemRec = Parse(17)
            Mission(n).ItemQuantRec = Parse(18)
            Mission(n).MapRec = Parse(19)
            Mission(n).XRec = Parse(20)
            Mission(n).YRec = Parse(21)
            Mission(n).MapaAExplorar = Parse(22)
            Mission(n).NPCAFalar = Parse(23)
            Mission(n).QuantidadeAMatar = Parse(24)
            Mission(n).ItemAPegar = Parse(25)
            Mission(n).ItemAPegarQuant = Parse(26)
            
            ' Save it
            Call SendUpdateMissionToAll(n)
            Call SaveMission(n)
            Call AddLog(GetPlayerName(Index) & " salvou missão #" & n & ".", ADMIN_LOG)
        Exit Sub

Procure:
Código:
Npc(n).Speech = Val(Parse(16))

Abaixo ponha:
Código:
Npc(n).Mission = Val(Parse(17))

Logo em baixo terá z = 17, mude para z = 18

Procure:
Código:
Case "speechscript"

            If SCRIPTING = 1 Then
                MyScript.ExecuteStatement "Scripts\Principal.txt", "ScriptedTile " & Index & "," & Parse(1)
            End If

            Exit Sub

Abaixo ponha:
Código:
Case "requesteditmission"
            ' Prevent hacking
            If GetPlayerAccess(Index) < ADMIN_DEVELOPER Then
                Call HackingAttempt(Index, "Admin Cloning")
                Exit Sub
            End If
            
            Call SendDataTo(Index, "MISSIONEDITOR" & END_CHAR)
        Exit Sub
        
        Case "editmission"

            If GetPlayerAccess(Index) < ADMIN_MAPPER Then
                Call HackingAttempt(Index, "Admin Cloning")
                Exit Sub
            End If

            n = Val(Parse(1))

            If n < 0 Or n > MAX_MISSIONS Then
                Call HackingAttempt(Index, "Invalid Mission Index")
                Exit Sub
            End If

            Call AddLog(GetPlayerName(Index) & " editando missão #" & n & ".", ADMIN_LOG)
            Call SendEditMissionTo(Index, n)
            Exit Sub

Na sub SendEditNpcTo ache:
Código:
Packet = "EDITNPC" & SEP_CHAR & NpcNum & SEP_CHAR & Trim$(Npc(NpcNum).Name) & SEP_CHAR & Trim$(Npc(NpcNum).AttackSay) & SEP_CHAR & Npc(NpcNum).Sprite & SEP_CHAR & Npc(NpcNum).SpawnSecs & SEP_CHAR & Npc(NpcNum).Behavior & SEP_CHAR & Npc(NpcNum).Range & SEP_CHAR & Npc(NpcNum).STR & SEP_CHAR & Npc(NpcNum).DEF & SEP_CHAR & Npc(NpcNum).Speed & SEP_CHAR & Npc(NpcNum).Magi & SEP_CHAR & Npc(NpcNum).Big & SEP_CHAR & Npc(NpcNum).MaxHp & SEP_CHAR & Npc(NpcNum).Exp & SEP_CHAR & Npc(NpcNum).SpawnTime & SEP_CHAR & Npc(NpcNum).Speech & SEP_CHAR

Mude para:
Código:
Packet = "EDITNPC" & SEP_CHAR & NpcNum & SEP_CHAR & Trim$(Npc(NpcNum).Name) & SEP_CHAR & Trim$(Npc(NpcNum).AttackSay) & SEP_CHAR & Npc(NpcNum).Sprite & SEP_CHAR & Npc(NpcNum).SpawnSecs & SEP_CHAR & Npc(NpcNum).Behavior & SEP_CHAR & Npc(NpcNum).Range & SEP_CHAR & Npc(NpcNum).STR & SEP_CHAR & Npc(NpcNum).DEF & SEP_CHAR & Npc(NpcNum).Speed & SEP_CHAR & Npc(NpcNum).Magi & SEP_CHAR & Npc(NpcNum).Big & SEP_CHAR & Npc(NpcNum).MaxHp & SEP_CHAR & Npc(NpcNum).Exp & SEP_CHAR & Npc(NpcNum).SpawnTime & SEP_CHAR & Npc(NpcNum).Speech & SEP_CHAR & Npc(NpcNum).Mission & SEP_CHAR

Procure:
Código:
Packet = "UPDATENPC" & SEP_CHAR & NpcNum & SEP_CHAR & Trim$(Npc(NpcNum).Name) & SEP_CHAR & Npc(NpcNum).Sprite & SEP_CHAR & Npc(NpcNum).Big & SEP_CHAR & Npc(NpcNum).MaxHp & SEP_CHAR & Npc(NpcNum).Speech & END_CHAR

Mude para:
Código:
Packet = "UPDATENPC" & SEP_CHAR & NpcNum & SEP_CHAR & Trim$(Npc(NpcNum).Name) & SEP_CHAR & Npc(NpcNum).Sprite & SEP_CHAR & Npc(NpcNum).Big & SEP_CHAR & Npc(NpcNum).MaxHp & SEP_CHAR & Npc(NpcNum).Speech & SEP_CHAR & Npc(NpcNum).Mission & END_CHAR

Procure novamente:
Código:
Packet = "UPDATENPC" & SEP_CHAR & NpcNum & SEP_CHAR & Trim$(Npc(NpcNum).Name) & SEP_CHAR & Npc(NpcNum).Sprite & SEP_CHAR & Npc(NpcNum).Big & SEP_CHAR & Npc(NpcNum).MaxHp & SEP_CHAR & Npc(NpcNum).Speech & END_CHAR

Mude para:
Código:
Packet = "UPDATENPC" & SEP_CHAR & NpcNum & SEP_CHAR & Trim$(Npc(NpcNum).Name) & SEP_CHAR & Npc(NpcNum).Sprite & SEP_CHAR & Npc(NpcNum).Big & SEP_CHAR & Npc(NpcNum).MaxHp & SEP_CHAR & Npc(NpcNum).Speech & SEP_CHAR & Npc(NpcNum).Mission & END_CHAR

No final do modServerTCP adicione:
Código:
Sub SendEditMissionTo(ByVal Index As Long, ByVal num As Long)
    Dim Packet As String

    Packet = "EDITMISSION" & SEP_CHAR & num & SEP_CHAR & Trim$(Mission(num).Name) & SEP_CHAR & Mission(num).Tipo & SEP_CHAR & Mission(num).Fala(0) & SEP_CHAR & Mission(num).Fala(1) & SEP_CHAR & Mission(num).Fala(2) & SEP_CHAR & Mission(num).LevelReq & SEP_CHAR & Mission(num).MissionReq & SEP_CHAR & Mission(num).ItemReq & SEP_CHAR & Mission(num).ItemQuantReq & SEP_CHAR & Mission(num).NextMission & SEP_CHAR & Mission(num).Repetitiva & SEP_CHAR & Mission(num).NPCAMatar & SEP_CHAR & Mission(num).NPCAMatarQuant & SEP_CHAR & Mission(num).LevelRec & SEP_CHAR & Mission(num).EXPRec & SEP_CHAR & Mission(num).ItemRec & SEP_CHAR & Mission(num).ItemQuantRec & SEP_CHAR & Mission(num).MapRec & SEP_CHAR & Mission(num).XRec & SEP_CHAR & Mission(num).YRec & SEP_CHAR & Mission(num).MapaAExplorar & SEP_CHAR & Mission(num).NPCAFalar & SEP_CHAR & Mission(num).QuantidadeAMatar & SEP_CHAR & Mission(num).ItemAPegar & SEP_CHAR & Mission(num).ItemAPegarQuant & END_CHAR
    Call SendDataTo(Index, Packet)
End Sub

Sub SendMissions(ByVal Index As Long)
    Dim i As Long

    For i = 1 To MAX_MISSIONS

        If Trim$(Mission(i).Name) <> vbNullString Then
            Call SendUpdateMissionTo(Index, i)
        End If

    Next

End Sub

Sub SendUpdateMissionTo(ByVal Index As Long, ByVal num As Long)
    Dim Packet As String

    Packet = "UPDATEMISSION" & SEP_CHAR & num & SEP_CHAR & Trim$(Mission(num).Name) & SEP_CHAR & Mission(num).Tipo & SEP_CHAR & Mission(num).Fala(0) & SEP_CHAR & Mission(num).Fala(1) & SEP_CHAR & Mission(num).Fala(2) & SEP_CHAR & Mission(num).LevelReq & SEP_CHAR & Mission(num).MissionReq & SEP_CHAR & Mission(num).ItemReq & SEP_CHAR & Mission(num).ItemQuantReq & SEP_CHAR & Mission(num).NextMission & SEP_CHAR & Mission(num).Repetitiva & SEP_CHAR & Mission(num).NPCAMatar & SEP_CHAR & Mission(num).NPCAMatarQuant & SEP_CHAR & Mission(num).LevelRec & SEP_CHAR & Mission(num).EXPRec & SEP_CHAR & Mission(num).ItemRec & SEP_CHAR & Mission(num).ItemQuantRec & SEP_CHAR & Mission(num).MapRec & SEP_CHAR & Mission(num).XRec & SEP_CHAR & Mission(num).YRec & SEP_CHAR & Mission(num).MapaAExplorar & SEP_CHAR & Mission(num).NPCAFalar & SEP_CHAR & Mission(num).QuantidadeAMatar & SEP_CHAR & Mission(num).ItemAPegar & SEP_CHAR & Mission(num).ItemAPegarQuant & END_CHAR
    Call SendDataTo(Index, Packet)
End Sub

Sub SendUpdateMissionToAll(ByVal num As Long)
    Dim Packet As String

    Packet = "UPDATEMISSION" & SEP_CHAR & num & SEP_CHAR & Trim$(Mission(num).Name) & SEP_CHAR & Mission(num).Tipo & SEP_CHAR & Mission(num).Fala(0) & SEP_CHAR & Mission(num).Fala(1) & SEP_CHAR & Mission(num).Fala(2) & SEP_CHAR & Mission(num).LevelReq & SEP_CHAR & Mission(num).MissionReq & SEP_CHAR & Mission(num).ItemReq & SEP_CHAR & Mission(num).ItemQuantReq & SEP_CHAR & Mission(num).NextMission & SEP_CHAR & Mission(num).Repetitiva & SEP_CHAR & Mission(num).NPCAMatar & SEP_CHAR & Mission(num).NPCAMatarQuant & SEP_CHAR & Mission(num).LevelRec & SEP_CHAR & Mission(num).EXPRec & SEP_CHAR & Mission(num).ItemRec & SEP_CHAR & Mission(num).ItemQuantRec & SEP_CHAR & Mission(num).MapRec & SEP_CHAR & Mission(num).XRec & SEP_CHAR & Mission(num).YRec & SEP_CHAR & Mission(num).MapaAExplorar & SEP_CHAR & Mission(num).NPCAFalar & SEP_CHAR & Mission(num).QuantidadeAMatar & SEP_CHAR & Mission(num).ItemAPegar & SEP_CHAR & Mission(num).ItemAPegarQuant & END_CHAR
    Call SendDataToAll(Packet)
End Sub

Public Sub ChecarEXPLORARMAPA(ByVal Index As Long, ByVal Map As Long)
Dim i As Long
    For i = 1 To MAX_MISSIONS
        If Mission(i).Tipo = 1 Then
            If Mission(i).MapaAExplorar = Map Then
                If GetPlayerMap(Index) = Map Then
                If Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 2 Then
                Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 3
                Call PlayerMsg(Index, "Você explorou o mapa " & Map & " (da missão " & Mission(i).Name & ")", Green)
                Call PlayerMsg(Index, "Para finalizar a missão volte a quem lhe deu a missão!", Green)
                End If
            End If
            End If
        End If
    Next
End Sub

Procure na Sub PlayerMapDropItem(ByVal Index As Long, ByVal InvNum As Long, ByVal Amount As Long):
Código:
' Check for subscript out of range
    If IsPlaying(Index) = False Or InvNum <= 0 Or InvNum > MAX_INV Then
        Exit Sub
    End If

Abaixo ponha:
Código:
For i = 1 To MAX_MISSIONS
        If Mission(i).Tipo = 4 Then
            If Mission(i).ItemAPegar = GetPlayerInvItemNum(Index, InvNum) Then
            
                If Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 3 Then
                Call PlayerMsg(Index, "Você não pode dropar o item da missão, você deve entregá-lo!", Red)
                Exit Sub
                End If
            End If
        End If
    Next

Procure:
Código:
Sub CheckItems()
    Call SaveItems
End Sub

Em cima adicione:
Código:
Sub CheckMissions()
    Call SaveMissions
End Sub

Procure:
Código:
Sub LoadExps()
    Dim FileName As String
    Dim i As Long

    Call CheckExps
    FileName = App.Path & "\Experiência.ini"

    For i = 1 To MAX_LEVEL
        Call SetStatus("Carregando experiência... " & Int((i / MAX_LEVEL) * 100) & "%")
        Experience(i) = GetVar(FileName, "EXPERIENCE", "Exp" & i)

        DoEvents
    Next

End Sub

Abaixo ponha:
Código:
Sub LoadMissions()
    Dim FileName As String
    Dim i As Long
    Dim f As Long

    Call CheckMissions

    For i = 1 To MAX_MISSIONS
        Call SetStatus("Carregando missões... " & Int((i / MAX_MISSIONS) * 100) & "%")
        FileName = App.Path & "\Missions\Mission" & i & ".dat"
        f = FreeFile
        Open FileName For Binary As #f
        Get #f, , Mission(i)
        Close #f

        DoEvents
    Next

End Sub

Procure:
Código:
' Inventário
        For n = 1 To MAX_INV
            Player(Index).Char(i).Inv(n).num = Val(GetVar(FileName, "CHAR" & i, "InvItemNum" & n))
            Player(Index).Char(i).Inv(n).Value = Val(GetVar(FileName, "CHAR" & i, "InvItemVal" & n))
            Player(Index).Char(i).Inv(n).Dur = Val(GetVar(FileName, "CHAR" & i, "InvItemDur" & n))
        Next

Abaixo ponha:
Código:
For n = 1 To MAX_MISSIONS
            Player(Index).Char(i).MissionStatus(n) = Val(GetVar(FileName, "CHAR" & i, "MissionStatus" & n))
            Player(Index).Char(i).Matados(n) = Val(GetVar(FileName, "CHAR" & i, "Matados" & n))
            Player(Index).Char(i).JogadoresMatados(n) = Val(GetVar(FileName, "CHAR" & i, "JogadoresMatados" & n))
        Next

Procure:
Código:
Sub SaveItem(ByVal ItemNum As Long)
    Dim FileName As String
    Dim f  As Long

    FileName = App.Path & "\Itens\item" & ItemNum & ".dat"
    f = FreeFile
    Open FileName For Binary As #f
    Put #f, , Item(ItemNum)
    Close #f
End Sub

Abaixo ponha:
Código:
Sub SaveMission(ByVal ItemNum As Long)
    Dim FileName As String
    Dim f  As Long

    FileName = App.Path & "\Missions\mission" & ItemNum & ".dat"
    f = FreeFile
    Open FileName For Binary As #f
    Put #f, , Mission(ItemNum)
    Close #f
End Sub
Sub SaveMissions()
    Dim i As Long

    Call SetStatus("Salvando missões... ")

    For i = 1 To MAX_MISSIONS

        If Not FileExist("Missions\mission" & i & ".dat") Then
            Call SetStatus("Salvando missões... " & Int((i / MAX_MISSIONS) * 100) & "%")

            DoEvents
            Call SaveMission(i)
        End If

    Next

End Sub

Procure:
Código:
' Inventário
        For n = 1 To MAX_INV
            Call PutVar(FileName, "CHAR" & i, "InvItemNum" & n, STR(Player(Index).Char(i).Inv(n).num))
            Call PutVar(FileName, "CHAR" & i, "InvItemVal" & n, STR(Player(Index).Char(i).Inv(n).Value))
            Call PutVar(FileName, "CHAR" & i, "InvItemDur" & n, STR(Player(Index).Char(i).Inv(n).Dur))
        Next

Abaixo ponha:
Código:
For n = 1 To MAX_MISSIONS
            Call PutVar(FileName, "CHAR" & i, "MissionStatus" & n, STR(Player(Index).Char(i).MissionStatus(n)))
            Call PutVar(FileName, "CHAR" & i, "Matados" & n, STR(Player(Index).Char(i).Matados(n)))
            Call PutVar(FileName, "CHAR" & i, "JogadoresMatados" & n, STR(Player(Index).Char(i).JogadoresMatados(n)))
        Next

Procure:
Código:
Public MAX_SPEECH As Long

Adicione em baixo:
Código:
Public MAX_MISSIONS As Long

Procure na Type PlayerRec:
Código:
PK As Byte

Abaixo coloque:
Código:
MissionStatus(1 To 70) As Long ' 1 = Pegando 2 = Em progresso 3 = Completa mas nao pegou recompensa 4 = completa
    Matados(1 To 70)                As Long ' Quantos NPCs matados no caso de missões "Matar NPC"
    JogadoresMatados(1 To 70) As Long ' Quantos Jogadores Matados no caso de missões "Matar Jogador"


CONTINUA...


_______________________________________________________________________________________________________

[Você precisa estar registrado e conectado para ver esta imagem.]
Spoiler:
[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]

[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]
http://universogamesmmo.forumeiros.com

2Tutorial Re: Sistema de Quest com Editor em Qua 22 Jul 2015, 01:48

Luucas Robeerto


Fundador
Fundador
Procure:
Código:
Type ClassRec
    Name As String * NAME_LENGTH
    AdvanceFrom As Long
    LevelReq As Long

    Type As Long
    Locked As Long
    MaleSprite As Long
    FemaleSprite As Long
    STR As Long
    DEF As Long
    Speed As Long
    Magi As Long
    Map As Long
    x As Byte
    y As Byte
End Type

Em baixo coloque:
Código:
Type MissionRec
    Name            As String ' Nome da missão
    Fala(0 To 2)    As String ' 0 = Fala ao iniciar 1 = Fala em progresso 2 = Fala final

    Tipo            As Byte ' Tipo da Missão
    
    ' No caso de missão tipo MATAR NPC
    NPCAMatar       As Long
    NPCAMatarQuant  As Long
    
    ' No caso de missão tipo Explorar Mapa
    MapaAExplorar   As Long
    
    ' No caso de missão tipo Falar com NPC
    NPCAFalar       As Long
    
    ' No caso de missão tipo Matar Jogador
    QuantidadeAMatar   As Long
    
    ' No caso de missão tipo Pegar Item
    ItemAPegar       As Long
    ItemAPegarQuant  As Long
    
    NextMission     As Long
    Repetitiva      As Long
    ' Requerimentos:
    LevelReq        As Long
    MissionReq      As Long
    ItemReq         As Long
    ItemQuantReq    As Long
    ' Recompensas:
    LevelRec        As Long
    EXPRec          As Long
    ItemRec         As Long
    ItemQuantRec    As Long
    MapRec          As Long
    XRec            As Long
    YRec            As Long
End Type

Procure:
Código:
ItemNPC(1 To MAX_NPC_DROPS) As NPCEditorRec

Abaixo ponha:
Código:
Mission As Long

Procure:
Código:
Public Npc() As NpcRec

Abaixo ponha:
Código:
Public Mission() As MissionRec

Procure:
Código:
Sub ClearGrid()
    Dim i As Long, y As Long, x As Long

    For i = 1 To MAX_MAPS
        For x = 0 To MAX_MAPX
            For y = 0 To MAX_MAPY
                Grid(i).Loc(x, y).Blocked = False
            Next
        Next
    Next

End Sub

Abaixo ponha:
Código:
Sub ClearMission(ByVal Index As Long)
    Mission(Index).Name = vbNullString
    Mission(Index).Tipo = 0
    Mission(Index).Fala(0) = vbNullString
    Mission(Index).Fala(1) = vbNullString
    Mission(Index).Fala(2) = vbNullString
    Mission(Index).LevelReq = 0
    Mission(Index).MissionReq = 0
    Mission(Index).ItemReq = 0
    Mission(Index).ItemQuantReq = 0
    Mission(Index).NextMission = 0
    Mission(Index).Repetitiva = 0
    Mission(Index).NPCAMatar = 1
    Mission(Index).NPCAMatarQuant = 0
    Mission(Index).LevelRec = 0
    Mission(Index).EXPRec = 0
    Mission(Index).ItemRec = 0
    Mission(Index).ItemQuantRec = 0
    Mission(Index).MapRec = 0
    Mission(Index).XRec = 0
    Mission(Index).YRec = 0
    Mission(Index).MapaAExplorar = 0
    Mission(Index).NPCAFalar = 0
    Mission(Index).QuantidadeAMatar = 0
    Mission(Index).ItemAPegar = 1
    Mission(Index).ItemAPegarQuant = 1
End Sub
Sub ClearMissions()
    Dim i As Long

    For i = 1 To MAX_MISSIONS
        Call ClearMission(i)
    Next

End Sub

Procure na sub ClearNPC
Código:
Npc(Index).Speech = 0

Abaixo ponha:
Código:
Npc(Index).Mission = 0

Procure:
Código:
For n = 1 To MAX_PLAYER_SPELLS
            Player(Index).Char(i).Spell(n) = 0
        Next

Acima adicione:
Código:
For n = 1 To MAX_MISSIONS
            Player(Index).Char(i).MissionStatus(n) = 1
            Player(Index).Char(i).Matados(n) = 0
            Player(Index).Char(i).JogadoresMatados(n) = 0
        Next

Na Function CanAttackNPC procure:
Código:
If Npc(NpcNum).Speech <> 0 Then
                        Call SendDataTo(Attacker, "STARTSPEECH" & SEP_CHAR & Npc(NpcNum).Speech & SEP_CHAR & 0 & SEP_CHAR & NpcNum & END_CHAR)

Abaixo ponha: (SIM, ANTES DO END IF)
Código:
Call ChecarFALARCOMNPC(Attacker, NpcNum)

Agora depois do End if adicione:
Código:
If Npc(NpcNum).Mission <> 0 Then
                        Call StartMission(Attacker, Npc(NpcNum).Mission)
                    End If

Na Sub JoinGame ache:
Código:
Call SendSpeech(Index)

Abaixo coloque:
Código:
Call SendMissions(Index)
    Call SendMyMissions(Index)

No final do modGameLogic adicione:
Código:
Sub StartMission(ByVal Index As Long, ByVal Missionn As Long)
            Select Case Player(Index).Char(Player(Index).CharNum).MissionStatus(Missionn)
            
                Case 1
                    Call SendDataTo(Index, "STARTMISSION" & SEP_CHAR & "1" & SEP_CHAR & Missionn & END_CHAR)
                
                Case 2
                    Call SendDataTo(Index, "STARTMISSION" & SEP_CHAR & "2" & SEP_CHAR & Missionn & END_CHAR)
                
                Case 3
                    Call SendDataTo(Index, "STARTMISSION" & SEP_CHAR & "3" & SEP_CHAR & Missionn & END_CHAR)
                
                Case 4
                    If Mission(Missionn).Repetitiva = 1 Then
                        Call SendDataTo(Index, "STARTMISSION" & SEP_CHAR & "1" & SEP_CHAR & Missionn & END_CHAR)
                    Else
                        Call PlayerMsg(Index, "Você já fez esta missão e ela não pode se repetir!", Red)
                    End If
                  
            End Select
            
End Sub

Sub SendMyMissions(ByVal Index As Long)
Dim i As Long
Call SendDataTo(Index, "clearmisslist" & END_CHAR)

    For i = 1 To MAX_MISSIONS
        If Player(Index).Char(Player(Index).CharNum).MissionStatus(i) <> 1 Then
            If Player(Index).Char(Player(Index).CharNum).MissionStatus(i) <> 3 Then
                If Player(Index).Char(Player(Index).CharNum).MissionStatus(i) <> 4 Then
                    Call SendDataTo(Index, "misslist" & SEP_CHAR & Mission(i).Name & END_CHAR)
                End If
            End If
        End If
        
        If Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 4 Then
            Call SendDataTo(Index, "commisslist" & SEP_CHAR & Mission(i).Name & END_CHAR)
        End If
    Next
    
End Sub

Sub ChecarMATARNPC(ByVal Index As Long, ByVal Np As Long)
Dim i As Long
    For i = 1 To MAX_MISSIONS
        If Mission(i).Tipo = 0 Then
            If Mission(i).NPCAMatar = Np Then
                If Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 2 Then
                Player(Index).Char(Player(Index).CharNum).Matados(i) = Player(Index).Char(Player(Index).CharNum).Matados(i) + 1
                Call PlayerMsg(Index, Trim$(Npc(Np).Name) & ": " & Val(Player(Index).Char(Player(Index).CharNum).Matados(i)) & "/" & Val(Mission(i).NPCAMatarQuant), Green)
            
                If Player(Index).Char(Player(Index).CharNum).Matados(i) >= Mission(i).NPCAMatarQuant Then
                Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 3
                Player(Index).Char(Player(Index).CharNum).Matados(i) = 0
                Call PlayerMsg(Index, "Missão " & Mission(i).Name & " completa, retorne à quem lhe deu a missão para receber as recompensas.", Green)
                End If
                End If
            End If
        End If
    Next
    
End Sub

Sub ChecarFALARCOMNPC(ByVal Index As Long, ByVal NpcNum As Long)
Dim i As Long
    For i = 1 To MAX_MISSIONS
        If Mission(i).Tipo = 2 Then
            If Mission(i).NPCAFalar = NpcNum Then
                If Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 2 Then
                Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 3
                Call PlayerMsg(Index, "Missão " & Mission(i).Name & " completa, retorne à quem lhe deu a missão para receber as recompensas.", Green)
                End If
            End If
        End If
    Next
End Sub

Sub ChecarMATARJOGADOR(ByVal Attacker As Long)
Dim i As Long
    For i = 1 To MAX_MISSIONS
        If Mission(i).Tipo = 3 Then
                If Player(Attacker).Char(Player(Attacker).CharNum).MissionStatus(i) = 2 Then
                Player(Attacker).Char(Player(Attacker).CharNum).JogadoresMatados(i) = Player(Attacker).Char(Player(Attacker).CharNum).JogadoresMatados(i) + 1
                Call PlayerMsg(Attacker, "Jogadores Matados: " & Val(Player(Attacker).Char(Player(Attacker).CharNum).JogadoresMatados(i)) & "/" & Val(Mission(i).QuantidadeAMatar), Green)
            
                If Player(Attacker).Char(Player(Attacker).CharNum).JogadoresMatados(i) >= Mission(i).QuantidadeAMatar Then
                Player(Attacker).Char(Player(Attacker).CharNum).MissionStatus(i) = 3
                Player(Attacker).Char(Player(Attacker).CharNum).JogadoresMatados(i) = 0
                Call PlayerMsg(Attacker, "Missão " & Mission(i).Name & " completa, retorne à quem lhe deu a missão para receber as recompensas.", Green)
                End If
                End If
        End If
    Next
End Sub

Sub ChecarPEGARITEM(ByVal Index As Long, ByVal n As Long)
' Item(GetPlayerInvItemNum(Index, N)).Name
Dim i As Long
    For i = 1 To MAX_MISSIONS
        If Mission(i).Tipo = 4 Then
            If Item(Mission(i).ItemAPegar).Name = Item(GetPlayerInvItemNum(Index, n)).Name Then
                If Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 2 Then
                    If HasItem(Index, Mission(i).ItemAPegar) >= Mission(i).ItemAPegarQuant Then
                    Player(Index).Char(Player(Index).CharNum).MissionStatus(i) = 3
                    Call PlayerMsg(Index, "Missão " & Mission(i).Name & " completa, retorne à quem lhe deu a missão para receber as recompensas.", Green)
                    End If
                End If
            End If
        End If
    Next
End Sub

Procure:
Código:
Call GlobalMsg(GetPlayerName(Victim) & " foi morto por " & GetPlayerName(Attacker), BrightRed)

Adicione em baixo:
Código:
Call ChecarMATARJOGADOR(Attacker)

Procure:
Código:
' Agora, setar HP para 0

Abaixo adicione:
Código:
Call ChecarMATARNPC(Attacker, NpcNum)

Procure:
Código:
' Erase item from the map
                    MapItem(MapNum, i).num = 0
                    MapItem(MapNum, i).Value = 0
                    MapItem(MapNum, i).Dur = 0
                    MapItem(MapNum, i).x = 0
                    MapItem(MapNum, i).y = 0
                    Call SendInventoryUpdate(Index, n)
                    Call SpawnItemSlot(i, 0, 0, 0, GetPlayerMap(Index), GetPlayerX(Index), GetPlayerY(Index))
                    Call PlayerMsg(Index, Msg, Yellow)

Adicione em baixo:
Código:
Call ChecarPEGARITEM(Index, n)

Download da form frmMissionEditor:
[Você precisa estar registrado e conectado para ver este link.]

Créditos: Renan


_______________________________________________________________________________________________________

[Você precisa estar registrado e conectado para ver esta imagem.]
Spoiler:
[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]

[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]
http://universogamesmmo.forumeiros.com

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum