Jump to content
  • 0

Quête


bd59140

Question

Bonjour cher funk's,

 

Je viens vers vous car j'ai un souci avec une quête (Plutôt 2 en fait).

 

Version des fichiers/ Type d'émulateur : 2016 de Seajin

Domaine (Base de données, Client, Core...) : LUA

Votre niveau (Débutant, Intermédiaire, Avancé..) : debutant

 

Description du problème :

Voilà en fait je veux faire en sorte que mon item donne un bonus pour 1h et qu'il soit cumulable.

La fonction mise est la suivante :  affect.add_collect_point(apply.MOV_SPEED, 10, 60*60*1)

 

Comment reproduire le problème ? : ///

Recherches et tests effectués : bonne question.

 

Screenshot du problème concerné :

La quête en question :

 

191150quest.PNG

 

En postant ma demande d'aide, j'affirme avoir lu et accepté le Règlement de Funky-Emulation.

Aide quand je suis disponible.

 

Link to post

Recommended Posts

  • 0

oui kameyu,

J'ai essayer de chercher sur google si quelqu'un aurais eu un soucis similaire mes non !!

Et oui test plusieurs fonction affect.add pour voir si ce cumuler mes nada !

 

du coup je cherche encore!

Ou si quelqu'un a la solution je le remercie d'avance!!

Aide quand je suis disponible.

 

Link to post
  • 0
local name = pc.get_name()
local recupere_id = mysql_query("SELECT * FROM player.player WHERE player.name='"..name.."'")
local id = recupere_id[1][1]
local select_table_affect = mysql_query("SELECT * FROM player.affect WHERE player.dwPID='"..id.."'")
local bonus = select_table_affect[1][6]
local ajout_temps = 60*60*1 -- ou 3600 étant le calcul de 60 sec * 60 min * 1h 
local cumul_temps = bonus+ajout_temps
local maj = mysql_query("UPDATE player.affect SET IDuration='"..cumul_temps.."' WHERE bTYpe='le code de ton bonus' AND bApplyOn='vnum de ton bunus ")

 

Edited by Jinzo (see edit history)
Link to post
  • 0
il y a 1 minute, Jinzo a dit :
local name = pc.get_name()
local recupere_id = mysql_query("SELECT * FROM player.player WHERE player.name='"..name.."'")
local id = recupere_id[1][1]
local select_table_affect = mysql_query("SELECT * FROM player.affect WHERE player.dwPID='"..id.."'")
local bonus = select_table_affect[1][6]
local ajout_temps = 60*60*1
local cumul_temps = bonus+ajout_temps
local maj = local maj_bonus = mysql_query("UPDATE player.affect SET IDuration='"..cumul_temps.."' WHERE bTYpe='le code de ton bonus' AND bApplyOn='vnum de ton bunus ")

 

 

OULA, NON. Jamais faire ça. C'est presque une insulte.

 

Fais plutôt ce qui suit.

Dans les sources, fichier questlua_affect, à la fonction affect_add(lua_State *L) supprime ou commente ces deux lignes:

if (ch->FindAffect(AFFECT_QUEST_START_IDX, applyOn))
	return 0;

Ensuite utilise affect.add plutôt que affect.add_collect(_point).

La fonction add_collect est faite, à la base, pour les quêtes du biologiste. D'où le nom collect, les quêtes biologiste s'appellent collect_quest_lvX.quest

Link to post
  • 0
il y a 2 minutes, Kameyu a dit :

 

OULA, NON. Jamais faire ça. C'est presque une insulte.

 

Fais plutôt ce qui suit.

Dans les sources, fichier questlua_affect, à la fonction affect_add(lua_State *L) supprime ou commente ces deux lignes:

if (ch->FindAffect(AFFECT_QUEST_START_IDX, applyOn))
	return 0;

Ensuite utilise affect.add plutôt que affect.add_collect(_point).

La fonction add_collect est faite, à la base, pour les quêtes du biologiste. D'où le nom collect, les quêtes biologiste s'appellent collect_quest_lvX.quest

c'est vexant , une façon peut orthodoxe je te l'accorde cependant cela fonctionne trés bien , je n'ai jamais rencontrer de soucis via ce script ( qui a été modifier , j'ai mal copier coller ) .

Néanmoins , ta solution est bien plus propre 😃

Link to post
  • 0

C'est certes vexant mais au moins tu sais que c'est une grave erreur.

À ce que je vois tu utilises le mysql_query de Mijago, qui est une véritable horreur en termes de performance.

Ce mysql_query qu'a fait Mijago c'est un script qui ouvre une connexion à partir du mot de passe défini dans ton db/conf.txt

Déjà en terme de sécurité c'est pas bien malin. Ensuite, ce que le script fait pour une seule requête c'est, dans l'ordre:

  1. Ouvre le fichier conf.txt
  2. Lit son contenu pour récupérer le mot de passe
  3. Trie les données pour tirer uniquement le mot de passe
  4. Ferme le fichier conf.txt
  5. Utilise le client mysql du serveur avec le mot de passe récupéré
  6. Exécute la query, puis ferme le client mysql

Imagine si tu fais 3 queries d'affilée, la joie que c'est en terme de perf...

 

Edit: de plus, pour appliquer les bonus une fois changés avec ta méthode, il faut se reconnecter à chaque changement.

Edited by Kameyu (see edit history)
Link to post
  • 0

J'ai tester de retirer comme tu la dit dans questlua_affect des sources j'ai supprimer les 2 ligne mes test ig et dans la table affect de player toujours non cumulable!!

Aide quand je suis disponible.

 

Link to post
  • 0
quest carte1 begin
	state start begin
		when 30342.use begin
			say_title("Carte Noir")
			say("Bonjour jeune Cannabien, ")
			say("Je vois que tu es en possessiond'une")
			say("carte noir !!! ")
			say("Elle te donne 10% de vitesse de déplacement! ")
			say("Veut tu l'utiliser ?")
			local s = select("Oui","Non")
			if s == 1 then
				if pc.getqf("carte_noir") == 0 then
					affect.add_collect(apply.mov, 10, 60*60*1)
					pc.remove_item(30342, 1)
					pc.setqf("carte_noir", 1)
				elseif pc.getqf("carte_noir") == 1 then
					local name = pc.get_name()
					local id = pc.get_player_id()
					local select_table_affect = mysql_query("SELECT * FROM player.affect WHERE player.dwPID='"..id.."'")
					local bonus = select_table_affect[1][6]
					local ajout_temps = 60*60*1
					local cumul_temps = bonus+ajout_temps
					local maj = mysql_query("UPDATE player.affect SET IDuration='"..cumul_temps.."' WHERE bTYpe='le code de ton bonus' AND bApplyOn='vnum de ton bonus ")
				end
			elseif s == 2 then
				return
			end
		end
	end
end

Ne fonctionnera que si le "pc.getqf("carte_noir") == 1"

Link to post
  • 0

pense a modifier la quête avec tes informations relative a l'id et au vnum de ton bonus::

local maj = mysql_query("UPDATE player.affect SET IDuration='"..cumul_temps.."' WHERE bTYpe='le code de ton bonus' AND bApplyOn='vnum de ton bonus' ")

Edited by Jinzo (see edit history)
Link to post
  • 0
quest carte1 begin
	state start begin
		when 30342.use begin
			say_title("Carte Noir")
			say("Bonjour jeune Cannabien, ")
			say("Je vois que tu es en possession d'une")
			say("carte noir !!! ")
			say("Elle te donne 10% de vitesse de déplacement! ")
			say("Veut tu l'utiliser ?")
			local s = select("Oui","Non")
			if s == 1 then
				if pc.getqf("carte_noir") == 0 then
					affect.add_collect(apply.mov, 10, 60*60*1)
					pc.remove_item(30342, 1)
					pc.setqf("carte_noir", 1)
				elseif pc.getqf("carte_noir") == 1 then
					local id = pc.get_player_id()
					local select_table_affect = mysql_query("SELECT * FROM player.affect WHERE affect.dwPID='"..id.."'")
					local bonus = select_table_affect[1][6]
					local ajout_temps = 60*60*1
					local cumul_temps = bonus+ajout_temps
					local maj = mysql_query("UPDATE player.affect SET IDuration='"..cumul_temps.."' WHERE bType='1000' AND bApplyOn='19' ")
				end
			elseif s == 2 then
				return
			end
		end
	end
end

 

Edited by Jinzo (see edit history)
Link to post
  • 0
quest carte1 begin
	state start begin
		when 30342.use begin
			say_title("Carte Noir")
			say("Bonjour jeune Cannabien, ")
			say("Je vois que tu es en possession d'une")
			say("carte noir !!! ")
			say("Elle te donne 10% de vitesse de déplacement! ")
			say("Veut tu l'utiliser ?")
			local s = select("Oui","Non")
			if s == 1 then
				if pc.getqf("carte_noir") == 0 then
					affect.add_collect(apply.mov, 10, 60*60*1)
					pc.remove_item(30342, 1)
					pc.setqf("carte_noir", 1)
				elseif pc.getqf("carte_noir") == 1 then
					local id = pc.get_player_id()
					local select_table_affect = mysql_query("SELECT * FROM player.affect WHERE affect.dwPID='"..id.."'")
					local bonus = select_table_affect[1][6]
					local ajout_temps = 60*60*1
					local cumul_temps = bonus+ajout_temps
					local maj = mysql_query("UPDATE player.affect SET lDuration='"..cumul_temps.."' WHERE bType='1000' AND bApplyOn='19' ")
					pc.remove_item(30342, 1)
  				end
			elseif s == 2 then
				return
			end
		end
	end
end

C'est un L minuscule "l" et non un "i" majuscule I , c'est rectifier.

Par contre il ce peut que le bonus ne soit pas afficher directement , le temps que le serveur actualise la base de données.

J'ai ajouté pc.remove_item(30342, 1) je ne l'avait pas mis sur l'UPDATE

Edited by Jinzo (see edit history)
Link to post
  • 0

normal qu'il ne s'ajoute pas , de plus j'ai modifier juste au dessus pour l'item , je te remet la quête ici en EDIT

quest carte1 begin
	state start begin
		when 30342.use begin
			say_title("Carte Noir")
			say("Bonjour jeune Cannabien, ")
			say("Je vois que tu es en possession d'une")
			say("carte noir !!! ")
			say("Elle te donne 10% de vitesse de déplacement! ")
			say("Veut tu l'utiliser ?")
			local s = select("Oui","Non")
			if s == 1 then
				if pc.getqf("carte_noir") == 0 then
					affect.add_collect(apply.mov, 10, 60*60*1)
					pc.remove_item(30342, 1)
					pc.setqf("carte_noir", 1)
				elseif pc.getqf("carte_noir") == 1 then
					local id = pc.get_player_id()
					local select_table_affect = mysql_query("SELECT * FROM player.affect WHERE affect.dwPID='"..id.."'")
					local bonus = select_table_affect[1][6]
					local ajout_temps = 3600
					local cumul_temps = bonus+ajout_temps
					local maj = mysql_query("UPDATE player.affect SET lDuration='"..cumul_temps.."' WHERE bType='1000' AND bApplyOn='19' ")
					pc.remove_item(30342, 1)
    					say("Si la fonction marche tu dois voir ceci")
  				end
			elseif s == 2 then
				return
			end
		end
	end
end

Tu dois surement attendre que le serveur actualise le bonus .

Tu as supprimé le bonus dans la table affect ?

 

Edited by Jinzo (see edit history)
Link to post
  • 0

oui et l'item quand je clic dessus affiche la 1ere page entre le choix oui ou non mes quand je clic sur Oui la page se ferme et rien que se sois dans affect ou meme l'item reste dans mon inventaire

Aide quand je suis disponible.

 

Link to post
Guest
This topic is now closed to further replies.


×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.