Pregunta sobe sistema de quest

weqweasdqwe

Newbie Lvl 1
Hola gente, buenas noches, queria hacerles una pregunta, hace 2 dias implemente este sistema de quest (https://www.gs-zone.org/temas/sistema-de-quests-blisseao.82560/) todo funcional, muy buen sistema de quest, el unico "problema" si es que asi se le puede decir, es que al desloguear el personaje, teniendo 1 o 2 quest en proceso o las que sean. Cuando relogueo ya no estan... En fin.
Queria saber si alguien me podria explicar como hacer para que las quest que acepta un personaje se guarden en los .char

Aca les dejo la parte del codigo que deberia hacer eso:

Public Sub LoadQuestStats(ByVal UserIndex As Integer, ByRef UserFile As clsIniReader)
'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
'Carga las QuestStats del usuario.
'Last modified: 28/01/2010 by Amraphen
'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Dim i As Integer
Dim j As Integer
Dim tmpStr As String

For i = 1 To MAXUSERQUESTS
With UserList(UserIndex).QuestStats.Quests(i)
tmpStr = UserFile.GetValue("QUESTS", "Q" & i)

.QuestIndex = val(ReadField(1, tmpStr, 45))
If .QuestIndex Then
If QuestList(.QuestIndex).RequiredNPCs Then
ReDim .NPCsKilled(1 To QuestList(.QuestIndex).RequiredNPCs)

For j = 1 To QuestList(.QuestIndex).RequiredNPCs
.NPCsKilled(j) = val(ReadField(j + 1, tmpStr, 45))
Next j
End If
End If
End With
Next i

With UserList(UserIndex).QuestStats
tmpStr = UserFile.GetValue("QUESTS", "QuestsDone")

.NumQuestsDone = val(ReadField(1, tmpStr, 45))

If .NumQuestsDone Then
ReDim .QuestsDone(1 To .NumQuestsDone)
For i = 1 To .NumQuestsDone
.QuestsDone(i) = val(ReadField(i + 1, tmpStr, 45))
Next i
End If
End With

End Sub

Public Sub SaveQuestStats(ByVal UserIndex As Integer, ByVal UserFile As String)
'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
'Guarda las QuestStats del usuario.
'Last modified: 29/01/2010 by Amraphen
'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Dim i As Integer
Dim j As Integer
Dim tmpStr As String

For i = 1 To MAXUSERQUESTS
With UserList(UserIndex).QuestStats.Quests(i)
tmpStr = .QuestIndex

If .QuestIndex Then
If QuestList(.QuestIndex).RequiredNPCs Then
For j = 1 To QuestList(.QuestIndex).RequiredNPCs
tmpStr = tmpStr & "-" & .NPCsKilled(j)
Next j
End If
End If

Call WriteVar(UserFile, "QUESTS", "Q" & i, tmpStr)
End With
Next i

With UserList(UserIndex).QuestStats
tmpStr = .NumQuestsDone

If .NumQuestsDone Then
For i = 1 To .NumQuestsDone
tmpStr = tmpStr & "-" & .QuestsDone(i)
Next i
End If

Call WriteVar(UserFile, "QUESTS", "QuestsDone", tmpStr)
End With
End Sub
 

weqweasdqwe

Newbie Lvl 1
en el modulo ES, solamente tengo esto: relacionado a las quest, claro..

Call SaveQuestStats(UserIndex, UserFile)
 

MAB

Lamb of God
en el modulo ES, solamente tengo esto: relacionado a las quest, claro..

Call SaveQuestStats(UserIndex, UserFile)

Ese mismo Sub es el que se encarga de guardar en los charfiles las quests.

Lo guarda con un formato "algo así" (lo mire muy rápido así que no se si es tal cual, pero te sirve como referencia):

[QUESTS]
Q1=Número de Quest-Npcs asesinados
QuestsDone=Cantidad
 

weqweasdqwe

Newbie Lvl 1
Perfecto, eso lo entendi, xD ahora hay que tener en cuenta que hacen 10 dias empece a programar con VB, si bien estudio ingenieria informatica, no tengo taaaanta idea de vb. Yendo al punto, entiendo todo lo que me dijiste, pero no entiendo bien como pasarlo a codigo, no te pido que me armes el codigo, pero si pudieses tirarme una pista mas me seria de gran ayuda !! MUCHAS GRACIAS POR RESPONDER...
 

Cr3p-1

6 FEET DEEP
Perfecto, eso lo entendi, xD ahora hay que tener en cuenta que hacen 10 dias empece a programar con VB, si bien estudio ingenieria informatica, no tengo taaaanta idea de vb. Yendo al punto, entiendo todo lo que me dijiste, pero no entiendo bien como pasarlo a codigo, no te pido que me armes el codigo, pero si pudieses tirarme una pista mas me seria de gran ayuda !! MUCHAS GRACIAS POR RESPONDER...
Closeuser y savechar llamas a el sub que guarda las quest en un bucle
 

weqweasdqwe

Newbie Lvl 1
Buenisimo, gracias, voy a ver como lo encaro!!! Muchas gracias por sus respuestas!



Mírate el modulo ES.
Ese mismo Sub es el que se encarga de guardar en los charfiles las quests.

Lo guarda con un formato "algo así" (lo mire muy rápido así que no se si es tal cual, pero te sirve como referencia):

[QUESTS]
Q1=Número de Quest-Npcs asesinados
QuestsDone=Cantidad
Closeuser y savechar llamas a el sub que guarda las quest en un bucle
 

MAB

Lamb of God
Perfecto, eso lo entendi, xD ahora hay que tener en cuenta que hacen 10 dias empece a programar con VB, si bien estudio ingenieria informatica, no tengo taaaanta idea de vb. Yendo al punto, entiendo todo lo que me dijiste, pero no entiendo bien como pasarlo a codigo, no te pido que me armes el codigo, pero si pudieses tirarme una pista mas me seria de gran ayuda !! MUCHAS GRACIAS POR RESPONDER...

Primero fijate en el código cuando llama a ese Sub que guarda esos datos (osea, busca el Call, que si mal no recuerdo sabes donde esta).

Luego podes usar puntos de interrupción para marcar el código hasta que llegue a ese punto en tiempo de ejecución, ahí con F5 podes ir procesando línea por línea y ver si todos los parámetros que se están enviando al Sub son correctos. Si el Sub tiene todo bien, tenes que fijarte si se esta llamando a ese Sub cuando se graba el personaje (Sub SaveUser, creo que en fénix es el mismo que en Alkon).
 

weqweasdqwe

Newbie Lvl 1
Gracias por la respuesta, la verdad, no creo poder hacerlo por ahora. Lo voy a dejar para cuando tenga mas conocimientos de vb, crei que era un poco mas facil xD, de todas maneras, les agradezco a todos por las respuestas!! muy buena onda
 

weqweasdqwe

Newbie Lvl 1
Bien buenisimo!! ahora una pregunta mas, si no es mucha molestia. Los npcs que dan quest, dan solo 1 quest cada uno, si quisiera que un npc de por ejemplo 2, 3, 4 , x quests, que tendria que hacer?


en el modulo quests, en la funcion TieneQuest lo tengo asi:


Public Function TieneQuest(ByVal UserIndex As Integer, ByVal QuestNumber As Integer) As Byte
'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
'Devuelve el slot de UserQuests en que tiene la quest QuestNumber. En caso contrario devuelve 0.
'Last modified: 27/01/2010 by Amraphen
'$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Dim i As Integer

For i = 1 To MAXUSERQUESTS
If UserList(UserIndex).QuestStats.Quests(i).QuestIndex = QuestNumber Then
TieneQuest = i
Exit Function
End If
Next i

TieneQuest = 0
End Function
 
Arriba