Problème loop

  • Initiateur de la discussion yunever
  • Date de début
  • Initiateur de la discussion
  • Banni
yunever

yunever

Geek
Messages
64
Score réaction
6
Points
65
Salut à tous,

Je suis actuellement entrain d'essayer de créer un addon mais j'ai un petit problème. Ce que je recherche à faire c'est un système où lorsque x = 2, une notification soit envoyée et qu'une perte de vie de "dmg2" points sur une durée de "timed2" s'effectue. Tout allait correctement jusqu'au moment ou j'ai remarqué que je pouvais contracter deux fois la "malédiction" simultanément ce que je ne veux pas. C'est pourquoi j'ai mis un timer.Remove afin de supprimer le timer lançant le math.random pendant "timedelay2" et j'ai ajouté un timer afin que toute cette grosse fonction se répète tout les "timedelay2". Mais le problème c'est que lorsque x = 2, la fonction s'arrête complètement et ne se relance pas tout les "timedelay2" comme il est demandé dans le timer. Voici mon code merci de votre aide !

J'ai essayé de le faire de deux façons différentes :
(la premiere sans prendre en compte les variables)

Code:
 local dmg2 = 1 local chance2 = 2 local timed2 = 10 local timedelay2 = 1 util.AddNetworkString( "d2" ) net.Receive( "d2", function(len, ply, amount, self)
---- random number--------- function random2() x = math.random( 1, chance2 ) print(x) end-- random2 function check2() if x == 2 and ply:Alive() then ply:SendLua("GAMEMODE:AddNotify(\"cc.\", NOTIFY_GENERIC, 5)") end--if end-- stop 2
----------dmg----------- function fundmg2() if x == 2 and ply:Alive() == true then timer.Create("dmgtimer2",1, 10, function() ply:SetHealth(ply:Health()-dmg2) timer.Stop("global2") end)-- timer else timer.Start("global2") end--if end--fundmg2
---------------------function------- timer.Create("global2",10, 0, function() random2() check2() fundmg2() end)--timer end)--network
la seconde :
Code:
local dmg1 = 1local chance1 = 2local time1 = 10local timedelay1 = 1 util.AddNetworkString( "name1" ) net.Receive( "name1", function(len, ply, amount, self) timer.Create("stop1", timedelay1, 0, function() x = math.random( 1, chance1 ) print(x.."n1") if x == 2and ply:Alive() then ply:SendLua("GAMEMODE:AddNotify(\"n1.\", NOTIFY_GENERIC, 5)") timer.Create("name1", 1, time1, function()if ply:Alive() then ply:SetHealth(ply:Health()-dmg1) timer.Remove("stop1") --timer.Stop("stop1")else timer.Remove("name1") endend) endend ) --timerend ) --function
 
Gladiateur45

Gladiateur45

Geek suprême
Messages
472
Score réaction
39
Points
140
yunever à dit:
Salut à tous,

Je suis actuellement entrain d'essayer de créer un addon mais j'ai un petit problème. Ce que je recherche à faire c'est un système où lorsque x = 2, une notification soit envoyée et qu'une perte de vie de "dmg2" points sur une durée de "timed2" s'effectue. Tout allait correctement jusqu'au moment ou j'ai remarqué que je pouvais contracter deux fois la "malédiction" simultanément ce que je ne veux pas. C'est pourquoi j'ai mis un timer.Remove afin de supprimer le timer lançant le math.random pendant "timedelay2" et j'ai ajouté un timer afin que toute cette grosse fonction se répète tout les "timedelay2". Mais le problème c'est que lorsque x = 2, la fonction s'arrête complètement et ne se relance pas tout les "timedelay2" comme il est demandé dans le timer. Voici mon code merci de votre aide !

J'ai essayé de le faire de deux façons différentes :
(la premiere sans prendre en compte les variables)

Code:
 local dmg2 = 1 local chance2 = 2 local timed2 = 10 local timedelay2 = 1 util.AddNetworkString( "d2" ) net.Receive( "d2", function(len, ply, amount, self)
---- random number--------- function random2() x = math.random( 1, chance2 ) print(x) end-- random2 function check2() if x == 2 and ply:Alive() then ply:SendLua("GAMEMODE:AddNotify(\"cc.\", NOTIFY_GENERIC, 5)") end--if end-- stop 2
----------dmg----------- function fundmg2() if x == 2 and ply:Alive() == true then timer.Create("dmgtimer2",1, 10, function() ply:SetHealth(ply:Health()-dmg2) timer.Stop("global2") end)-- timer else timer.Start("global2") end--if end--fundmg2
---------------------function------- timer.Create("global2",10, 0, function() random2() check2() fundmg2() end)--timer end)--network
la seconde :
Code:
local dmg1 = 1local chance1 = 2local time1 = 10local timedelay1 = 1 util.AddNetworkString( "name1" ) net.Receive( "name1", function(len, ply, amount, self) timer.Create("stop1", timedelay1, 0, function() x = math.random( 1, chance1 ) print(x.."n1") if x == 2and ply:Alive() then ply:SendLua("GAMEMODE:AddNotify(\"n1.\", NOTIFY_GENERIC, 5)") timer.Create("name1", 1, time1, function()if ply:Alive() then ply:SetHealth(ply:Health()-dmg1) timer.Remove("stop1") --timer.Stop("stop1")else timer.Remove("name1") endend) endend ) --timerend ) --function
Essaye deja ici dans ta fonction random de mettre local x = math.random( 1 , chance2 ) , à la place de x = math.random( 1 , chance2 ) :
yunever à dit:
Code:
---- random number--------- function random2() x = math.random( 1, chance2 ) print(x) end-- random2 function check2() if x == 2 and ply:Alive() then ply:SendLua("GAMEMODE:AddNotify(\"cc.\", NOTIFY_GENERIC, 5)") end--if end-- stop 2
 
  • J'aime
Réactions: yunever
  • Initiateur de la discussion
  • Banni
yunever

yunever

Geek
Messages
64
Score réaction
6
Points
65
Gladiateur45 à dit:
Essaye deja ici dans ta fonction random de mettre local x = math.random( 1 , chance2 ) , à la place de x = math.random( 1 , chance2 ) :
Le local ne me permet pas de réutiliser x dans le reste des fonctions :/
 
Valfunde

Valfunde

Helpeur Divin
Messages
3 800
Score réaction
1 235
Points
450
Si ta variable n'est pas locale alors mets un autre nom que x, et si tu la definie en local en dehors d'une fonction tu pourra la call dans tous le fichier
 
  • J'aime
Réactions: yunever
  • Initiateur de la discussion
  • Banni
yunever

yunever

Geek
Messages
64
Score réaction
6
Points
65
Valfunde à dit:
Si ta variable n'est pas locale alors mets un autre nom que x, et si tu la definie en local en dehors d'une fonction tu pourra la call dans tous le fichier
Le problème de la mettre en local en dehors de la fonction c'est que si x=1 cela ne va jamais changé vu que ce n'est pas dans un timer permettant de changer les valeurs à chaque fois ^^
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
Le code est un peu brouillon, ce que tu veux faire c'est un système de maladie ?
Ai-je bien compris :
Une fois qu'un joueur est contaminé, toutes les X secondes, il a une chance sur Y de perdre Z pts de vie sinon il est guéri ?
 
  • J'aime
Réactions: yunever
  • Initiateur de la discussion
  • Banni
yunever

yunever

Geek
Messages
64
Score réaction
6
Points
65
Ce que je souhaiterai faire c'est :

Un système de maladie/malédiction qui toutes les X secondes, il a une chance sur Y de perdre Z points de vie pendant un temps T et que une fois la personne contaminée, pendant ce temps T la chance sur Y redevenir malade est de 0.
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
J'aurais fait un truc dans le genre, le seul inconvénient c'est que tous les malades perdent de la vie en même temps, mais ça évite de devoir créer un timer par malade. Cette version est simplifiée et plus légère, à toi de voir.
[Lua] Untitled - paste.sx
 
Dernière édition:
  • J'aime
Réactions: Yoh Sambre ♪
  • Initiateur de la discussion
  • Banni
yunever

yunever

Geek
Messages
64
Score réaction
6
Points
65
Merci je vais y jetter un oeil !
 
Discord d'entraide
Rejoignz-nous sur Discord