Sistema de Quest
2 participantes
Página 1 de 1
Sistema de Quest
Antes de Coemçar o tutorial quero agradecer de mais a Alatar, por disbonibilziar esse brilhante sistema.
Imagem do Sistema(Na versão Inglesa)
[img width=587 height=457][Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Começando
Baixe a form de edição de quest (Download)
Servidor
Primeiramente adicione a modSvQuest no servidor. Agora procure por:
Troque para:
Obs.: Existem 2 desse codigo substitua os dois
Procure por:
Acima do codigos, apos o Else adicione:
Em SubPlayerAttackNpc, procure:
Acima adicione:
Na Sub PlayerAttackNpc, procure por:
Acima adicione:
Em InitServe procure por:
Abaixo adicione:
Em ClearGameData procure por:
Abaixo adicione:
Em LoadGameData procure por:
Abaixo adicione:
Em modHandleData procure por:
Abaixo adicione:
No final do modhandledata adicione:
Em modTypes, na Private Type PlayerRec procure por:
Abaixo adicione:
Em Private Type NpcRec, procure por:
Abaixo adicione:
Em modTypes procure por:
Abaixo adicione:
Agora procure por:
Abaixo adicione:
Em modPlayer procure por:
Abaixo adicione:
Em PlayerWarp ache:
Abaixo adicione:
Em PlayerMapGetItem procure por:
Abaixo adicione:
Em CheckResource procure:
Abaixo adicione:
Client~Side
Adicione o modQuest e frmEditor_Quest ao seu projeto. E altere frmEditor_NPC e frmMain pelos qu estão no pack
Em modGmaeLogic na NpcEditorInit procure por:
Abaixo adicione:
Em modEnumerations procure por:
Abaixo adicione:
Procure por:
Abaixo adicione:
Em modHandleData procure por:
Abaixo adicione:
No final desse mod adicione:
Em modInput procure por:
Abaixo adicione:
Em moTypes na Private Type PlayerRec procure por:
Abaixo adicione:
Em Private Type NpcRec procure por:
Abaixo adicione:
Na frmQuest_Editor troca a Form_Load para:
Creditos:
Ricardo - Tradução
Alatar - Pelos sistemas
Alguns membros da Toucht Death - Correção de outros bugs
Imagem do Sistema(Na versão Inglesa)
[img width=587 height=457][Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
Começando
Baixe a form de edição de quest (Download)
Servidor
Primeiramente adicione a modSvQuest no servidor. Agora procure por:
- Código:
If NPC(npcNum).Behaviour <> NPC_BEHAVIOUR_FRIENDLY And NPC(npcNum).Behaviour <> NPC_BEHAVIOUR_SHOPKEEPER Then
Troque para:
- Código:
If NPC(npcNum).Behaviour <> NPC_BEHAVIOUR_FRIENDLY And NPC(npcNum).Behaviour <> NPC_BEHAVIOUR_SHOPKEEPER And NPC(npcNum).Behaviour <> NPC_BEHAVIOUR_QUEST Then
Obs.: Existem 2 desse codigo substitua os dois
Procure por:
- Código:
If Len(Trim$(NPC(npcNum).AttackSay)) > 0 Then
Acima do codigos, apos o Else adicione:
- Código:
If NPC(npcNum).Behaviour = NPC_BEHAVIOUR_QUEST Then
Call ShowQuest(attacker, NPC(npcNum).QuestNum)
Exit Function
End If
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)
End If
Em SubPlayerAttackNpc, procure:
- Código:
' send death to the map
Acima adicione:
- Código:
Call CheckTasks(attacker, QUEST_TYPE_GOSLAY, npcNum)
Na Sub PlayerAttackNpc, procure por:
- Código:
Call OnDeath(victim)
Acima adicione:
- Código:
Call CheckTasks(attacker, QUEST_TYPE_GOKILL, 0)
Em InitServe procure por:
- Código:
ChkDir App.Path & "\Data\", "spells"
Abaixo adicione:
- Código:
ChkDir App.Path & "\Data\", "quests"
Em ClearGameData procure por:
- Código:
Call ClearAnimations
Abaixo adicione:
- Código:
Call SetStatus("Clearing quests...")
Call ClearQuests
Em LoadGameData procure por:
- Código:
Call LoadAnimations
Abaixo adicione:
- Código:
Call SetStatus("Loading quests...")
Call LoadQuests
Em modHandleData procure por:
- Código:
HandleDataSub(CPartyLeave) = GetAddress(AddressOf HandlePartyLeave)
Abaixo adicione:
- 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)
No final do modhandledata adicione:
- 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) & " saved Quest #" & 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
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
ElseIf Order = 2 Then
Player(Index).PlayerQuest(QuestNum).Status = QUEST_NOT_STARTED '2
PlayerMsg Index, Trim$(Quest(QuestNum).Name) & " has been canceled!", BrightGreen
End If
SavePlayer Index
SendPlayerData Index
SendPlayerQuest Index, QuestNum
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
Em modTypes, na Private Type PlayerRec procure por:
- Código:
Dir As Byte
Abaixo adicione:
- Código:
PlayerQuest(1 To MAX_QUESTS) As PlayerQuestRec
Em Private Type NpcRec, procure por:
- Código:
Level As Long
Abaixo adicione:
- Código:
QuestNum As Long
Em modTypes procure por:
- Código:
SPartyVitals
Abaixo adicione:
- Código:
SQuestEditor
SUpdateQuest
SPlayerQuest
SQuestMessage
Agora procure por:
- Código:
CPartyLeave
Abaixo adicione:
- Código:
CRequestEditQuest
CSaveQuest
CRequestQuests
CPlayerHandleQuest
CQuestLogUpdate
Em modPlayer procure por:
- Código:
Call SendHotbar(Index)
Abaixo adicione:
- Código:
Call SendQuests(Index)
Em PlayerWarp ache:
- Código:
TempPlayer(Index).GettingMap = YES
Abaixo adicione:
- Código:
Call CheckTasks(Index, QUEST_TYPE_GOREACH, mapNum)
Em PlayerMapGetItem procure por:
- Código:
SendActionMsg GetPlayerMap(Index), Msg, White, 1, (GetPlayerX(Index) * 32), (GetPlayerY(Index) * 32)
Abaixo adicione:
- Código:
Call CheckTasks(Index, QUEST_TYPE_GOGATHER, GetItemNum(Trim$(Item(GetPlayerInvItemNum(Index, n)).Name)))
Em CheckResource procure:
- Código:
SendMapSound Index, rX, rY, SoundEntity.seResource, Resource_index
Abaixo adicione:
- Código:
Call CheckTasks(Index, QUEST_TYPE_GOTRAIN, Resource_index)
Client~Side
Adicione o modQuest e frmEditor_Quest ao seu projeto. E altere frmEditor_NPC e frmMain pelos qu estão no pack
Em modGmaeLogic na NpcEditorInit procure por:
- Código:
.txtDamage.text = NPC(EditorIndex).Damage
Abaixo adicione:
- Código:
.scrlQuest.Value = NPC(EditorIndex).QuestNum
Em modEnumerations procure por:
- Código:
SPartyVitals
Abaixo adicione:
- Código:
SQuestEditor
SUpdateQuest
SPlayerQuest
SQuestMessage
Procure por:
- Código:
CPartyLeave
Abaixo adicione:
- Código:
CRequestEditQuest
CSaveQuest
CRequestQuests
CPlayerHandleQuest
CQuestLogUpdate
Em modHandleData procure por:
- Código:
HandleDataSub(SPartyVitals) = GetAddress(AddressOf HandlePartyVitals)
Abaixo adicione:
- Código:
HandleDataSub(SQuestEditor) = GetAddress(AddressOf HandleQuestEditor)
HandleDataSub(SUpdateQuest) = GetAddress(AddressOf HandleUpdateQuest)
HandleDataSub(SPlayerQuest) = GetAddress(AddressOf HandlePlayerQuest)
HandleDataSub(SQuestMessage) = GetAddress(AddressOf HandleQuestMessage)
No final desse mod adicione:
- 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.lblQuestNameVisual = Trim$(Quest(QuestNum).Name)
frmMain.lblQuestSay = Message
frmMain.picQuestSpeech.Visible = True
If QuestNumForStart > 0 And QuestNumForStart <= MAX_QUESTS Then
frmMain.lblQuestAccept.Visible = True
frmMain.lblQuestAccept.Tag = QuestNumForStart
End If
LoadQuestLogPage
ShowQuestLogPage 1
Set Buffer = Nothing
End Sub
Em modInput procure por:
- Código:
SendRequestEditSpell
Abaixo adicione:
- Código:
Case "/editquest"
If GetPlayerAccess(MyIndex) < ADMIN_DEVELOPER Then GoTo Continue
SendRequestEditQuest
Em moTypes na Private Type PlayerRec procure por:
- Código:
Step As Byte
Abaixo adicione:
- Código:
PlayerQuest(1 To MAX_QUESTS) As PlayerQuestRec
Em Private Type NpcRec procure por:
- Código:
Level As Long
Abaixo adicione:
- Código:
QuestNum As Long
Na frmQuest_Editor troca a Form_Load para:
- Código:
Private Sub Form_Load()
scrlTotalTasks.Max = MAX_TASKS
scrlNPC.Max = MAX_NPCS
scrlItem.Max = MAX_ITEMS
scrlMap.Max = MAX_MAPS
scrlResource.Max = MAX_RESOURCES
scrlAmount.Max = MAX_BYTE
scrlReq(1).Max = MAX_LEVELS
scrlReq(2).Max = MAX_ITEMS
scrlReq(3).Max = MAX_QUESTS
scrlItemRew.Max = MAX_ITEMS
scrlItemRewValue.Max = MAX_BYTE 'can also be changed to any number under 32767 (For larger cash rewards)
scrlItemNum(0).Max = MAX_ITEMS
scrlItemNum(1).Max = MAX_ITEMS
scrlItemValue(0).Max = MAX_BYTE 'can also be changed to any number under 32767
scrlItemValue(1).Max = MAX_BYTE 'can also be changed to any number under 32767 (the max integer)
End Sub
Creditos:
Ricardo - Tradução
Alatar - Pelos sistemas
Alguns membros da Toucht Death - Correção de outros bugs
Ricardo XD- Sentinela
- Mensagens : 29
Estrelas Makers : 139
Creditos : 19
Data de inscrição : 19/03/2011
Idade : 25
Localização : Minha Casa
Re: Sistema de Quest
lol muito bom
Sistema completíssimo!
Sistema completíssimo!
spectrus- Administrador
- Mensagens : 299
Estrelas Makers : 1466
Creditos : 49
Data de inscrição : 01/01/2011
Idade : 30
Localização : V.da conquista bahia
Tópicos semelhantes
» [PEDIDO]Sistema de quest 100%
» Sistema De Pdl
» Sistema de Amigos
» Sistema de Climas
» Sistema De Mario RM XP
» Sistema De Pdl
» Sistema de Amigos
» Sistema de Climas
» Sistema De Mario RM XP
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|
Sex Dez 05, 2014 10:00 am por Fabio-3dgames
» Lost In Dreams chapter 01
Seg Nov 24, 2014 7:22 pm por slipknot
» A Makers Brasil ressuscitara em breve!!
Sáb Nov 01, 2014 2:26 pm por Francisco Souza
» Elysium Diamond 3.3.2
Sáb Nov 01, 2014 2:17 pm por Francisco Souza
» personagens e objetos 3d game builder
Seg Jul 28, 2014 2:33 pm por Reginaldo Aparecido Zanus
» fala galera \o obs auhsaush digita galera asygasyga
Dom Jul 06, 2014 1:40 am por anastiel
» tutorial headshot fps creator
Seg Jun 09, 2014 6:08 pm por EspinhosoGamer
» SnakeMod fps creator
Seg Jun 09, 2014 5:55 pm por EspinhosoGamer
» serial fps creator
Seg maio 26, 2014 7:35 pm por slipknot