Ajouter un Cooldown dans le ENT:AcceptInput

  • Initiateur de la discussion Frite's Corp.
  • Date de début
  • Initiateur de la discussion
Frite's Corp.

Frite's Corp.

Geek suprême
Messages
204
Score réaction
34
Points
105
Bonjour,
J'ai créer un addon de cuisinier et je l'ai presque fini. Il pourrait être fini mais il me manque un truc dans le init.lua, c'est un cooldown pour que le NPC ne soit pas utilisable tout le temps.
Voici ma function acceptinput :
Code:
function ENT:AcceptInput( Name, Activator, Caller ) if Name == "Use" and Caller:IsPlayer() then if Caller:Team() == TEAM_COOK then local bread = ents.Create("pizza") bread:SetPos(self:GetPos() + Vector(0, -50, 50)) bread:Spawn() else DarkRP.notify(Caller,1,2,"Il faut être Cuisinier pour y avoir accès.") end end
end
J'ai deja réussi a bloquer l'accès aux autres jobs et à faire spawn une pizza quand on fait Use deçu mais je suis bloqué à "la fin".
Quelqu'un pourrait m'aider ?
Résumé : Je cherche a mettre un Cooldown pour que ce soit seulement toutes les 5 secondes que le NPC puisse être utilisé !
Merci d'avance à tout le monde
 
thepsyca

thepsyca

Psychopathe
Messages
2 164
Score réaction
648
Points
365
https://wiki.garrysmod.com/page/Global/CurTime

https://wiki.garrysmod.com/index.php?title=Talk:Delays_and_Cooldowns&action=edit&redlink=1
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Code:
function ENT:Initialize()
self.LastPressed = 0
end
function ENT:AcceptInput( Name, Activator, Caller ) if Name == "Use" and Caller:IsPlayer() then if Caller:Team() == TEAM_COOK and (CurTime() - self.LastPressed > 5) then local bread = ents.Create("pizza") bread:SetPos(self:GetPos() + Vector(0, -50, 50)) bread:Spawn() self.LastPressed = CurTime() else DarkRP.notify(Caller,1,2,"Il faut être Cuisinier pour y avoir accès.") end end
end
 
  • Initiateur de la discussion
Frite's Corp.

Frite's Corp.

Geek suprême
Messages
204
Score réaction
34
Points
105
Je suis déjà aller chercher sur le wiki mais je n'arrive pas à savoir quel code mettre comment ou où. Tu pourrais me faire le code directement à mettre dans le init.lua ? @thepsyca
 
  • Initiateur de la discussion
Frite's Corp.

Frite's Corp.

Geek suprême
Messages
204
Score réaction
34
Points
105
Je teste @Z3k4 merci !
 
  • Initiateur de la discussion
Frite's Corp.

Frite's Corp.

Geek suprême
Messages
204
Score réaction
34
Points
105
Mon entitée a disparu @Z3k4
 
ALTA

ALTA

Geek suprême
Messages
449
Score réaction
212
Points
150
Ou simplement self:SetUseType(SIMPLE_USE) dans ton initialize et utiliser un ENT:Use(ply) à la place du Accept Input
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Malo Ghost à dit:
Mon entitée a disparu @Z3k4
Montre ton code
ALTA à dit:
Ou simplement self:SetUseType(SIMPLE_USE) dans ton initialize et utiliser un ENT:Use(ply) à la place du Accept Input
ça va pas ajouter 5 secondes de cooldown :x
 
  • Initiateur de la discussion
Frite's Corp.

Frite's Corp.

Geek suprême
Messages
204
Score réaction
34
Points
105
Ok le voici @Z3k4
Code:
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
function ENT:Initialize() self:SetModel("models/sickness/fridge_01.mdl") self:LastPressed = 0 self:PhysicsInit( SOLID_VPHYSICS ) self:SetMoveType( MOVETYPE_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self:SetUseType( SIMPLE_USE ) local phys = self:GetPhysicsObject() if (phys:IsValid()) then phys:Wake() end
end
function ENT:AcceptInput( Name, Activator, Caller ) if Name == "Use" and Caller:IsPlayer() then if Caller:Team() == TEAM_COOK and (CurTime() - self.LastPressed > 5) then local bread = ents.Create("pizza") bread:SetPos(self:GetPos() + Vector(0, -50, 50)) bread:Spawn() self.LastPressed = CurTime() else DarkRP.notify(Caller,1,2,"Il faut être Cuisinier pour y avoir accès.") end end
end
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
t'as pas fait exactement ce que je t'ai dis :x
Code:
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
function ENT:Initialize() self:SetModel("models/sickness/fridge_01.mdl") self:LastPressed = 0 self:PhysicsInit( SOLID_VPHYSICS ) self:SetMoveType( MOVETYPE_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self:SetUseType( SIMPLE_USE ) local phys = self:GetPhysicsObject() if (phys:IsValid()) then phys:Wake() end self.LastPressed = 0
end
function ENT:AcceptInput( Name, Activator, Caller ) if Name == "Use" and Caller:IsPlayer() then if Caller:Team() == TEAM_COOK and (CurTime() - self.LastPressed > 5) then local bread = ents.Create("pizza") bread:SetPos(self:GetPos() + Vector(0, -50, 50)) bread:Spawn() self.LastPressed = CurTime() else DarkRP.notify(Caller,1,2,"Il faut être Cuisinier pour y avoir accès.") end end
end
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Z3k4 à dit:
t'as pas fait exactement ce que je t'ai dis :x
Code:
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
function ENT:Initialize() self:SetModel("models/sickness/fridge_01.mdl") self:LastPressed = 0 self:PhysicsInit( SOLID_VPHYSICS ) self:SetMoveType( MOVETYPE_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self:SetUseType( SIMPLE_USE ) local phys = self:GetPhysicsObject() if (phys:IsValid()) then phys:Wake() end self.LastPressed = 0
end
function ENT:AcceptInput( Name, Activator, Caller ) if Name == "Use" and Caller:IsPlayer() then if Caller:Team() == TEAM_COOK and (CurTime() - self.LastPressed > 5) then local bread = ents.Create("pizza") bread:SetPos(self:GetPos() + Vector(0, -50, 50)) bread:Spawn() self.LastPressed = CurTime() else DarkRP.notify(Caller,1,2,"Il faut être Cuisinier pour y avoir accès.") end end
end
Si mais il l'a mis au début j'avais pas remarqué non plus.
Après pour quoi utiliser l'ent ?
Moi je n'utilise jamais ça pour les cooldowns :
Code:
local globule = 0
function ENT:Use(activator, caller) if CurTime() > globule then if caller:IsPlayer() && IsValid(caller) then -- BLABLA globule = CurTime() + 5 end end
end
moi ça ça fonctionne toujours
 
  • J'aime
Réactions: Jenni Gort
  • Initiateur de la discussion
Frite's Corp.

Frite's Corp.

Geek suprême
Messages
204
Score réaction
34
Points
105
Ok je teste ça @Feytone
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Feytone à dit:
Si mais il l'a mis au début j'avais pas remarqué non plus.
Après pour quoi utiliser l'ent ?
Moi je n'utilise jamais ça pour les cooldowns :
Code:
local globule = 0
function ENT:Use(activator, caller) if CurTime() > globule then if caller:IsPlayer() && IsValid(caller) then -- BLABLA globule = CurTime() + 5 end end
end
moi ça ça fonctionne toujours
Sauf que ton truc ne met pas un cooldown de 5 secondes, ça regarde juste si la dernière activation a été effectué avant celle que tu vas faire

Pourquoi utiliser l'ent ? C'est une variable appartenant à l'entité, donc c'est mieux de l'assigner directement à l'ent
Et aussi, c'est bien "self.LastPressed" et non "self:LastPressed", c'est pas une fonction qu'on veut là, c'est une variable :p

Donc @Malo Ghost, fait attention quand tu recopie
 
Jenni Gort

Jenni Gort

Geek suprême
Messages
207
Score réaction
67
Points
130
Z3k4 à dit:
Code:
function ENT:Initialize()
self.LastPressed = 0
end
function ENT:AcceptInput( Name, Activator, Caller ) if Name == "Use" and Caller:IsPlayer() then if Caller:Team() == TEAM_COOK and (CurTime() - self.LastPressed > 5) then local bread = ents.Create("pizza") bread:SetPos(self:GetPos() + Vector(0, -50, 50)) bread:Spawn() self.LastPressed = CurTime() else DarkRP.notify(Caller,1,2,"Il faut être Cuisinier pour y avoir accès.") end end
end
Sauf que ton LastPressed si tu le mes avant de faire spawn l'entité jamais elle pourra spawn NinjaTroll

Feytone à dit:
Si mais il l'a mis au début j'avais pas remarqué non plus.
Après pour quoi utiliser l'ent ?
Moi je n'utilise jamais ça pour les cooldowns :
Code:
local globule = 0
function ENT:Use(activator, caller) if CurTime() > globule then if caller:IsPlayer() && IsValid(caller) then -- BLABLA globule = CurTime() + 5 end end
end
moi ça ça fonctionne toujours
gg ;)
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Z3k4 à dit:
Sauf que ton truc ne met pas un cooldown de 5 secondes, ça regarde juste si la dernière activation a été effectué avant celle que tu vas faire

Pourquoi utiliser l'ent ? C'est une variable appartenant à l'entité, donc c'est mieux de l'assigner directement à l'ent
Et aussi, c'est bien "self.LastPressed" et non "self:LastPressed", c'est pas une fonction qu'on veut là, c'est une variable :p

Donc @Malo Ghost, fait attention quand tu recopie
C'est bien un cooldown : obliger le joueur à attendre 5 secondes pour réutiliser le use.
Ah oui j'avais pas vu qu'il avait fait self:LastPressed
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Jenni Gort à dit:
Sauf que ton LastPressed si tu le mes avant de faire spawn l'entité jamais elle pourra spawn NinjaTroll


gg ;)
Quoi ? Le Initialize début quand l'entité spawn, en plus le "LastPressed" c'est pas une entité, donc je vois pas pourquoi tu dis ça :x
Tu connais les bases au moins avant de me dire ça ?
Feytone à dit:
C'est bien un cooldown : obliger le joueur à attendre 5 secondes pour réutiliser le use.
Ah oui j'avais pas vu qu'il avait fait self:LastPressed
Autant pour moi, j'avais mal lu, c'est un peu près la même façon de faire que moi, sauf que toi tu te base sur un addtion alors que moi c'est sur une soustraction
 
Jenni Gort

Jenni Gort

Geek suprême
Messages
207
Score réaction
67
Points
130
Z3k4 à dit:
Quoi ? Le Initialize début quand l'entité spawn, en plus le "LastPressed" c'est pas une entité, donc je vois pas pourquoi tu dis ça :x
Tu connais les bases au moins avant de me dire ça ?

Autant pour moi, j'avais mal lu, c'est un peu près la même façon de faire que moi, sauf que toi tu te base sur un addtion alors que moi c'est sur une soustraction
je parle de sa
Code:
(CurTime() - self.LastPressed > 5)
sa va empecher de faire spawn l'entité CurTime() sa fonctionne pas comme un timer hein ^^
en plus si j'ai bien compris il veut juste empecher que l'on puissent spam donc o_O
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Jenni Gort à dit:
je parle de sa
Code:
(CurTime() - self.LastPressed > 5)
sa va empecher de faire spawn l'entité CurTime() sa fonctionne pas comme un timer hein ^^
en plus si j'ai bien compris il veut juste empecher que l'on puissent spam donc o_O
Moi je mets toujours 1 sec justement pour prévenir les spams.
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Jenni Gort à dit:
je parle de sa
Code:
(CurTime() - self.LastPressed > 5)
sa va empecher de faire spawn l'entité CurTime() sa fonctionne pas comme un timer hein ^^
en plus si j'ai bien compris il veut juste empecher que l'on puissent spam donc o_O
Sauf que CurTime() est une fonction qui te retourne un nombre de seconde (plus précisément, le temps en seconde depuis lequel le serveur est actif) donc je comprends pas non plus pour tu me parles de "timer" sachant que les timers s'écrit comme ceci :
timer.Create("test", x, y, function()

end)
C'est pas juste parce que j'ai mis des parenthèses que ça signifie pour autant que je considère comme un timer

PS: Il a clairement dit qu'il souhaite mettre un cooldown de 5 secondes, et c'est pas forcément par rapports aux spams :p
 
  • Initiateur de la discussion
Frite's Corp.

Frite's Corp.

Geek suprême
Messages
204
Score réaction
34
Points
105
J'ai une error en faisait comment ça @Z3k4
Code:
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
function ENT:Initialize() self:SetModel("models/sickness/fridge_01.mdl") self:PhysicsInit( SOLID_VPHYSICS ) self:SetMoveType( MOVETYPE_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self:SetUseType( SIMPLE_USE ) local phys = self:GetPhysicsObject() if (phys:IsValid()) then phys:Wake() self.LastPressed = 0 end
end
function ENT:AcceptInput( Name, Activator, Caller ) if Name == "Use" and Caller:IsPlayer() then if Caller:Team() == TEAM_COOK and (CurTime() - self.LastPressed > 5) then local bread = ents.Create("pizza") bread:SetPos(self:GetPos() + Vector(0, -50, 50)) bread:Spawn() self.LastPressed = CurTime() else DarkRP.notify(Caller,1,2,"Il faut être Cuisinier pour y avoir accès.") end end
end
Et l'erreur c'est ça :
Code:
[ERROR] addons/frite_cooking/lua/entities/frigo/init.lua:20: attempt to perform arithmetic on field 'LastPressed' (a nil value) 1. unknown - addons/frite_cooking/lua/entities/frigo/init.lua:20
 
Jenni Gort

Jenni Gort

Geek suprême
Messages
207
Score réaction
67
Points
130
Z3k4 à dit:
Sauf que CurTime() est une fonction qui te retourne un nombre de seconde (plus précisément, le temps en seconde depuis lequel le serveur est actif) donc je comprends pas non plus pour tu me parles de "timer" sachant que les timers s'écrit comme ceci :
timer.Create("test", x, y, function()

end)
C'est pas juste parce que j'ai mis des parenthèses que ça signifie pour autant que je considère comme un timer

PS: Il a clairement dit qu'il souhaite mettre un cooldown de 5 secondes, et c'est pas forcément par rapports aux spams :p
on se comprend pas x)
en gros ce que je veut dire c'est que quand il va use sa va lui dire qu'il n'est pas cuisinier meme si il l'est avec ton code car self.LastPressed = 0 ^^
 
  • Initiateur de la discussion
Frite's Corp.

Frite's Corp.

Geek suprême
Messages
204
Score réaction
34
Points
105
Mais ça marche en tout cas ;) j'ai juste cette erreur @Z3k4
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Jenni Gort à dit:
on se comprend pas x)
en gros ce que je veut dire c'est que quand il va use sa va lui dire qu'il n'est pas cuisinier meme si il l'est avec ton code car self.LastPressed = 0 ^^
ça c'est un détail, mais c'est vrai ^^
Malo Ghost à dit:
Mais ça marche en tout cas ;) j'ai juste cette erreur @Z3k4
Je regarde vite fait
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Malo Ghost à dit:
Mais ça marche en tout cas ;) j'ai juste cette erreur @Z3k4
Go utiliser ma méthode sinon :rolleyes:
 
Z3k4

Z3k4

Helpeur Divin
Messages
4 495
Score réaction
1 513
Points
580
Malo Ghost à dit:
Mais ça marche en tout cas ;) j'ai juste cette erreur @Z3k4
Je t'insulterai plus tard, c'est
Code:
function ENT:Initialize() self:SetModel("models/sickness/fridge_01.mdl") self:PhysicsInit( SOLID_VPHYSICS ) self:SetMoveType( MOVETYPE_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self:SetUseType( SIMPLE_USE ) local phys = self:GetPhysicsObject() if (phys:IsValid()) then phys:Wake() end
self.LastPressed = 0
end
et pas
Code:
function ENT:Initialize() self:SetModel("models/sickness/fridge_01.mdl") self:PhysicsInit( SOLID_VPHYSICS ) self:SetMoveType( MOVETYPE_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self:SetUseType( SIMPLE_USE ) local phys = self:GetPhysicsObject() if (phys:IsValid()) then phys:Wake() self.LastPressed = 0 end
end
Donc pas de self.LastPressed dans le if
Sinon, en effet, tu peux utiliser le méthode de
@Feytone
 
  • Initiateur de la discussion
Frite's Corp.

Frite's Corp.

Geek suprême
Messages
204
Score réaction
34
Points
105
Ah merde je suis trop con... Merci @Z3k4
 
Discord d'entraide
Rejoignz-nous sur Discord