Gquest - donner l'accès à une quête seulement quand une précédente est terminée ?

  • Initiateur de la discussion Deadman69330
  • Date de début
  • Initiateur de la discussion
Deadman69330

Deadman69330

Psychopathe
Messages
2 289
Score réaction
309
Points
290
Bonjour,

Avec l'addon gQuest - The Perfect Quest System je voudrais faire un serveur avec des quêtes pour permettre aux joueurs de les faire quand il n'y a pas beaucoup de joueurs sur le serveur.

Seulement, je voudrais faire un scénario mais, pour cela j'ai besoin que les joueurs fassent les quêtes dans un certains ordre précis.

Malheuresement je ne voit pas trop de moyen :/

Il y a pas mal de fonctions disponible mais j'en voit aucune qui permet de faire ce que je veux, je vous laisse le code si vous voulez bien m'aider :)
PS : C'est un code de toute une quête



Merci
 
  • Initiateur de la discussion
Deadman69330

Deadman69330

Psychopathe
Messages
2 289
Score réaction
309
Points
290
Up
 
skrilax91

skrilax91

Geek suprême
Messages
327
Score réaction
103
Points
160
hey,
Code:
hook.Add("gQuest_QuestCompleted","", function(ply, quest) ply:setNWInt("lastquest", quest)
end)
quand le joueur veut démarrer la quête tu modifie ton code pour qu'il regarde si le joueurs à terminé l'ancienne quête (i-1) et si non alors tu refuse

if ply:getNWInt("lastquest") ~= questnumber - 1 then return false end
 
  • Initiateur de la discussion
Deadman69330

Deadman69330

Psychopathe
Messages
2 289
Score réaction
309
Points
290
skrilax91 à dit:
hey,
Code:
hook.Add("gQuest_QuestCompleted","", function(ply, quest) ply:setNWInt("lastquest", quest)
end)
quand le joueur veut démarrer la quête tu modifie ton code pour qu'il regarde si le joueurs à terminé l'ancienne quête (i-1) et si non alors tu refuse

if ply:getNWInt("lastquest") ~= questnumber - 1 then return false end
J'avais penser à cette solution mais est-ce que les NWInt restent après un reboot ou une déco du joueur ?
 
skrilax91

skrilax91

Geek suprême
Messages
327
Score réaction
103
Points
160
Ah non en effet, tu stock la variable dans la data base du serveur
 
  • Initiateur de la discussion
Deadman69330

Deadman69330

Psychopathe
Messages
2 289
Score réaction
309
Points
290
skrilax91 à dit:
Ah non en effet, tu stock la variable dans la data base du serveur
Player/SetPData - Garry's Mod avec ça ?
 
skrilax91

skrilax91

Geek suprême
Messages
327
Score réaction
103
Points
160
Tu as deux possibilités, soit dans un fichier data :
Code:
function Getdata() local d = file.Read("ton_fichier","DATA") if !d || string.len(d) <= 0 then return end local e = util.JSONToTable(d) return e
end
function writedata(data) file.Write("ton_fichier",util.TableToJSON(data))
end
ou part ta database :
Code:
hook.Add("DarkRPDBInitialized", "CoreBDInit",function() MySQLite.query([[CREATE TABLE IF NOT EXISTS quest_playerstats( uid VARCHAR(32) NOT NULL, lastquest int NOT NULL, UNIQUE(uid) ); ]])
end)
function UpdateDataBase(value, ply) MySQLite.query("UPDATE quest_playerstats SET lastquest="..MySQLite.SQLStr(value).." WHERE uid="..ply:SteamID64()..";" ) ply:setNWInt("lastquest", value)
end
function retrievePlayerInfo(ply, callback) MySQLite.query("SELECT lastquest FROM quest_playerstats WHERE uid = ".. ply:SteamID64()..";", function(r)callback(r)end)
end
function createPlayerInfoData(ply) MySQLite.query([[REPLACE INTO quest_playerstats VALUES(]]..ply:SteamID64() .. [[,0)]]) ply:setNWInt("lastquest", 0)
end
hook.Add('PlayerInitialSpawn', 'PlayerInitialSpawn',function(ply) timer.Simple( 1, function () retrievePlayerInfo(ply,function(data) if not IsValid(ply) then return end local info = data and data[1] or {} info.lastquest = (info.lastquest or -1) if info.lastquest == -1 then createPlayerInfoData(ply) end ply:setNWInt("lastquest", info.lastquest) end) end)
end)
 
NoaGamingFR

NoaGamingFR

Wait :)
Messages
3 650
Score réaction
625
Points
340
Deadman69330 à dit:
J'avais penser à cette solution mais est-ce que les NWInt restent après un reboot ou une déco du joueur ?
Non :/
Sinon tu stocke dans une DB/un fichier data ?
 
  • J'aime
Réactions: Deadman69330
  • Initiateur de la discussion
Deadman69330

Deadman69330

Psychopathe
Messages
2 289
Score réaction
309
Points
290
skrilax91 à dit:
Tu as deux possibilités, soit dans un fichier data :
Code:
function Getdata() local d = file.Read("ton_fichier","DATA") if !d || string.len(d) <= 0 then return end local e = util.JSONToTable(d) return e
end
function writedata(data) file.Write("ton_fichier",util.TableToJSON(data))
end
ou part ta database :
Code:
hook.Add("DarkRPDBInitialized", "CoreBDInit",function() MySQLite.query([[CREATE TABLE IF NOT EXISTS quest_playerstats( uid VARCHAR(32) NOT NULL, lastquest int NOT NULL, UNIQUE(uid) ); ]])
end)
function UpdateDataBase(value, ply) MySQLite.query("UPDATE quest_playerstats SET lastquest="..MySQLite.SQLStr(value).." WHERE uid="..ply:SteamID64()..";" ) ply:setNWInt("lastquest", value)
end
function retrievePlayerInfo(ply, callback) MySQLite.query("SELECT lastquest FROM quest_playerstats WHERE uid = ".. ply:SteamID64()..";", function(r)callback(r)end)
end
function createPlayerInfoData(ply) MySQLite.query([[REPLACE INTO quest_playerstats VALUES(]]..ply:SteamID64() .. [[,0)]]) ply:setNWInt("lastquest", 0)
end
hook.Add('PlayerInitialSpawn', 'PlayerInitialSpawn',function(ply) timer.Simple( 1, function () retrievePlayerInfo(ply,function(data) if not IsValid(ply) then return end local info = data and data[1] or {} info.lastquest = (info.lastquest or -1) if info.lastquest == -1 then createPlayerInfoData(ply) end ply:setNWInt("lastquest", info.lastquest) end) end)
end)
Merci Beaucoup :)
 
Discord d'entraide
Rejoignz-nous sur Discord