[Lua] Comment créer une variable unique par joueur et lancer une fonction par joueur?
Bonjour/Bonsoir,

J'aurais besoin d'un œil expert pour m'aider dans une création en Lua Huh

J'aimerai qu'à chaque lancer de sort, une valeur se crée (genre "GCD =1"), et qu'une seconde après, la valeur se remette à zéro. Mais cette valeur doit être unique pour chaque joueur et ne pas interférer avec celle des autres joueurs.

En gros :

00 (secs)
01 : Player_1 lance sort X => "GCD.Player_1 = 1"
02 : "GCD.Player_1 = 0"(Expiration) + Player_2 lance sort Y => "GCD.Player_2 = 1"
03 : "GCD.Player_2 = 0"(Expiration)

Je saurais me débrouiller après avec ce que je veux faire Smile
Je sais que ça fait un moment mais je ne connais pas la réponse et apparemment personne ici la connais. La recherche est-elle toujours d'actualité?
il faudrait jouer avec les tables de la DB non ?
on insert le chiffre 1 dans la DB
et après 1 seconde on le supprime ,
tendis que pour le deuxieme joueur , on récupère le plus gros chiffre dans la "table" et on fait +1
un truc du style , mais aucune idée de comment on fait Hihi
Oula ça fait un peu lourd de gérer ça par DB surtout si c'est pour ajouter/supprimer un truc en 1 seconde Erf. Il doit y avoir un moyen, mais lequel :/.
Pas forcément par la DB, mais tu peux créer un tableau.
Tu fais un :
Temp[player:GetName()]['GCD'] = Ton GCD
Après une seconde (Tu joues avec le GetGameTime()), tu fais un Temp[player:GetName()]['GCD'] = nil
Puis tu réassigne la variable à chaque fois que le joueur lance un sort.
Je sais pas si c'est ce que tu cherchais, mais c'est beaucoup moins lourd que d'utiliser la DB.
Edit : En me relisant je me suis planté.
C'est Temp = {};
Puis Temp[player:GetName()]['GCD'] = Ton GCD; je crois, pour initialiser le tableau.
Han, pauvre de moi, j'ai refermé l'onglet, donc je réponds un peu tard, mais c'est toujours d'actualité. Je pensais faire comme tu disais, Kajtt, pour que la variable existe, et faire un RegisterEvent qui se lance une seconde plus tard pour réinitialiser la variable. (Je n'ai pas encore eu le temps de tester, je suis sur d'autres choses en même temps et j'ai mis de côté pour ne pas trop me creuser la tête sur ça.)
Ben essaye comme ça et dis nous si ça marche Clin
J'étais à deux doigts de m'ouvrir les veines, quand je me suis rappelé que Grandelf avait utilisé quasiment tout le nécessaire dans son script de tente !

Du coup, j'ai réussi, et ça marche très bien (mon exemple était de faire un proc boule de feu quand on lançait javelot de glace, le tout avec un ICD de 5 secondes).

Je vais donc poster ce que j'ai fait, pour que ça puisse aider Smile

[code=Lua]Temp = {}
function Spell(event, player, spellid)

if (Temp[player:GetName()] == nil) then
Temp[player:GetName()] = {}
if (Temp[player:GetName()].GCD == nil) then
Temp[player:GetName()].GCD = 0
end
end

local target = player:GetSelection()
local Time = GetGameTime()
if (spellid == 42914) then -- Javelot de glace
if Time > Temp[player:GetName()].GCD then -- On regarde si Temps est plus grand que Fin du temps de recharge
player:CastSpellOnTarget(38692, target) -- On lance la jolie boule de feu
Temp[player:GetName()].GCD = (Time + 5) -- 5 représente le nombre de secondes (en secondes, vu que GetGameTime donne un temps en secondes)
end
end
end

RegisterServerHook(10, "Spell")
[/code]

Merci à vous pour votre aide, et Grandelf, même si il ne lira jamais ça ^_^
J'espère que ça aidera certains autres Huh
Merci d'avoir partagé la solution et je suis ravi que ton problème soit résolu Smile.

Retourner en haut Accueil