Warrior Admin
Mensagens : 164 Moeda : 1726 Pontos : 3 Data de inscrição : 30/08/2012 Idade : 33
| Assunto: Sistema de quest Seg Jan 07, 2013 5:06 pm | |
| Esse tutorial foi traduzido e modificado. Bom,você tem duas opções,baixar o Eclipse Origins com o sistema já implantado: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]Ou seguir o tutorial e implantar manualmente na sua source,tendo de trocar apenas alguns arquivos: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]Foto: [Tens de ter uma conta e sessão iniciada para poderes visualizar esta imagem]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: - Citação :
- 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 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
Última edição por Warrior_Maker em Seg Jan 07, 2013 5:14 pm, editado 1 vez(es) | |
|
newbie123 Admin
Mensagens : 57 Moeda : 68 Pontos : 2 Data de inscrição : 29/12/2012
| Assunto: Re: Sistema de quest Seg Jan 07, 2013 5:11 pm | |
| Isso é sistema de Quest '0'. | |
|