Uniquement codeurs lua

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

xLomble77

Psychopathe
Messages
2 191
Score réaction
348
Points
290
Bonjour,

Je souhaiterais avoir des informations, je souhaiterais établir une commande qui fait que lorsque l'on tape la commande admettons /bonjour, cela crée une entité qui spawn sur le joueur, genre dans son dos.
J'ai déjà l'entité dans un fichier lua qui doit être spawn, le problème, c'est que j'ai défini la commande donc quand on la tape, j'ai l'erreur suivante :

Code:
[ERROR] gamemodes/darkrp/gamemode/modules/chat/sv_chat.lua:8: attempt to call upvalue 'callback' (a nil value)
1. callback - gamemodes/darkrp/gamemode/modules/chat/sv_chat.lua:8
2. RP_PlayerChat - gamemodes/darkrp/gamemode/modules/chat/sv_chat.lua:37
3. Run - gamemodes/darkrp/gamemode/modules/chat/sv_chat.lua:101
Quelqu'un pourrait-il m'aider à résoudre ce problème.
Merci !
 
ALTA

ALTA

Geek suprême
Messages
449
Score réaction
212
Points
150
Le mieux aurait été d'avoir ton bout de code...
Apparement c'est ton callback qui foire (thanks to cpt obvious) mais encore, sans le code c'est chaud.
 
  • Initiateur de la discussion
xLomble77

xLomble77

Psychopathe
Messages
2 191
Score réaction
348
Points
290
ALTA à dit:
Le mieux aurait été d'avoir ton bout de code...
Apparement c'est ton callback qui foire (thanks to cpt obvious) mais encore, sans le code c'est chaud.
En elle même l'entité spawn, et tout fonctionne à ce niveau, j'aimerais juste qu'en faisant la commande et bien cela spawn l'entité a une position du joueur lorsque celui-ci tape la commande.
 
ALTA

ALTA

Geek suprême
Messages
449
Score réaction
212
Points
150
Je me répète: Sans le code que tu utilise A.K.A la function que tu callback, c'est difficile de t'aider. Envoie la moi PV si tu veux.
 
  • J'aime
Réactions: Guillaume Bonnet
ALTA

ALTA

Geek suprême
Messages
449
Score réaction
212
Points
150
Si tu utilise DarkRP: http://wiki.darkrp.com/index.php/Functions/DarkRP/Server/defineChatCommand
Sinon: http://wiki.garrysmod.com/page/GM/PlayerSay

Dans les deux cas, ne pas oublier le return "" pour ne pas avoir de retour dans le chat de la commande.
Exemple:
(DARKRP:)
Code:
local function spawnCmd(ply, args) local pos = ply:GetPos() local ang = -- angle à set local obj = ents.Create("classdel'objet") obj:SetPos(pos) obj:SetAngles(ang) obj:Spawn() obj:Activate() return ""
end
DarkRP.defineChatCommand("spawn", spawnCmd, 1.5)
Y'a plein de function à set à obj, comme le physObj à mettre ect, c'est qu'un exemple.
 
Dernière édition:
  • Initiateur de la discussion
xLomble77

xLomble77

Psychopathe
Messages
2 191
Score réaction
348
Points
290
ALTA à dit:
Si tu utilise DarkRP: http://wiki.darkrp.com/index.php/Functions/DarkRP/Server/defineChatCommand
Sinon: http://wiki.garrysmod.com/page/GM/PlayerSay

Dans les deux cas, ne pas oublier le return "" pour ne pas avoir de retour dans le chat de la commande.
Exemple:
(DARKRP:)
Code:
local function spawnCmd(ply, args) local pos = ply:GetPos() local ang = -- angle à set local obj = ents.Create("classdel'objet") obj:SetPos(pos) obj:SetAngles(ang) obj:Spawn() obj:Activate() return ""
end
DarkRP.defineChatCommand("spawn", spawnCmd, 1.5)
Y'a plein de function à set à obj, comme le physObj à mettre ect, c'est qu'un exemple.
et donc cette function je l'ajoute dans sv_chat.lua ?
et le DarkRP.defineChatCommand dans sv_chatscommands.lua ?
et si je veux que l'entité spawn derrière le joueur, je met quoi en position ?
 
  • Initiateur de la discussion
xLomble77

xLomble77

Psychopathe
Messages
2 191
Score réaction
348
Points
290
@ALTA j'ai essayer de modifier tout avec ce que tu m'as donné et voici l'erreur :

[ERROR] gamemodes/darkrp/gamemode/modules/fpp/pp/server/core.lua:642: attempt to index local 'ang' (a number value)
1. SetAngles - gamemodes/darkrp/gamemode/modules/fpp/pp/server/core.lua:642
2. callback - gamemodes/darkrp/gamemode/modules/chat/sv_chatcommands.lua:286
3. callback - gamemodes/darkrp/gamemode/modules/chat/sv_chat.lua:8
4. RP_PlayerChat - gamemodes/darkrp/gamemode/modules/chat/sv_chat.lua:37
 
ALTA

ALTA

Geek suprême
Messages
449
Score réaction
212
Points
150
Ton angle doit être sous forme vectorielle, donc "Angle(x,y,z)"
(erreur de minge)
 
Dernière édition:
M

Membre supprimé 70413

Anonyme
ALTA à dit:
Ton angle doit être sous forme vectorielle, donc "vector(x,y,z)"
Tu lui dis qu'il a peut-être fais une erreur sur son ang, il a mit Vector ou tu lui dis de mettre Vector ?
 
  • Initiateur de la discussion
xLomble77

xLomble77

Psychopathe
Messages
2 191
Score réaction
348
Points
290
Donc en gros :
local ang = Angle(0,90,0)
ça fonctionne comme ça ?
Le code est placé dans sv_chatcommands.lua c'est bien ça ?
 
ALTA

ALTA

Geek suprême
Messages
449
Score réaction
212
Points
150
Oui.
 
  • Initiateur de la discussion
xLomble77

xLomble77

Psychopathe
Messages
2 191
Score réaction
348
Points
290
ALTA à dit:
Tu m'as énormément aider je te remercie beaucoup, dernière question y'a t-il possibilité de mettre un timer.Simple de 60 secondes de délais pour la commande et mettre un retour s'il l'a déjà fait avec une réponse DarkRP.Notify("Vous avez déjà effectué cette commande récemment") ?
 
Makss

Makss

Psychopathe
Messages
830
Score réaction
990
Points
310
xLomble77 à dit:
Tu m'as énormément aider je te remercie beaucoup, dernière question y'a t-il possibilité de mettre un timer.Simple de 60 secondes de délais pour la commande et mettre un retour s'il l'a déjà fait avec une réponse DarkRP.Notify("Vous avez déjà effectué cette commande récemment") ?
Tu fais un timer avec un nom ( timer.Create("NomSuperOriginal",60,1,function() end) ) puis tu regardes si il existe déjà ( timer.Exists("NomSuperOriginal") )
 
  • Initiateur de la discussion
xLomble77

xLomble77

Psychopathe
Messages
2 191
Score réaction
348
Points
290
Makss à dit:
Tu fais un timer avec un nom ( timer.Create("NomSuperOriginal",60,1,function() end) ) puis tu regardes si il existe déjà ( timer.Exists("NomSuperOriginal") )
d'accord mais le timer s'ajoutera bien pour la commande défini ?
 
Makss

Makss

Psychopathe
Messages
830
Score réaction
990
Points
310
xLomble77 à dit:
d'accord mais le timer s'ajoutera bien pour la commande défini ?
J'ai pas exactement compris ce que tu voulais dire donc je vais expliqué mieux :
Tu fais un timer dans ta commande :
Code:
timer.Create("AttendsDeuxSec"..ply:SteamID(), 60, 1, function() end)
le "AttendsDeuxSec"..ply:SteamID() est pour créé un timer avec un nom unique au joueur, le 60 indique le nombre de seconde avant la fin du timer, le function() end est là pour initialiser mais il ne fais rien, tu dois donc déclarer ce timer dans la fonction de ta commande.
Avant de faire ce timer tu mets:
Code:
if timer.Exists("AttendsDeuxSec"..ply:SteamID()) then
-- ton code
pour voir si le timer existe déjà, si oui alors ça execute ton code pour affiché au joueur un avertissement. Exemple complet :
Code:
local function bonjour(ply)	if timer.Exists("AttendsDeuxSec"..ply:SteamID()) then	ply:PrintMessage(HUD_PRINTTALK,"Attendez 60 secondes avant de pouvoir refaire la commande")	return	else	timer.Create("AttendsDeuxSec"..ply:SteamID(),60,1,function() end)	end
end
 
  • Initiateur de la discussion
xLomble77

xLomble77

Psychopathe
Messages
2 191
Score réaction
348
Points
290
Et si à la place du PrintMessage je veux mettre un DarkRPNotify, c'est possible ?
Bah en gros lorsque le joueur tape la commande /bonjour , cela lui spawn une entité, mais s'il le refait une deuxième fois ça lui dis bah Vous devez attendre 60 secondes avant de refaire la commande.
 
Valfunde

Valfunde

Helpeur Divin
Messages
3 800
Score réaction
1 235
Points
450
Il veut faire un anti spam
 
  • J'aime
Réactions: xLomble77
  • Initiateur de la discussion
xLomble77

xLomble77

Psychopathe
Messages
2 191
Score réaction
348
Points
290
Valfunde à dit:
Il veut faire un anti spam
Exacte ^^ car si la personne refait la commande plusieurs fois ça le fais pas les entités spam pour rien.
Donc anti-spam avec le DarkRPNotify ^^
 
Makss

Makss

Psychopathe
Messages
830
Score réaction
990
Points
310
xLomble77 à dit:
Et si à la place du PrintMessage je veux mettre un DarkRPNotify, c'est possible ?
Bah en gros lorsque le joueur tape la commande /bonjour , cela lui spawn une entité, mais s'il le refait une deuxième fois ça lui dis bah Vous devez attendre 60 secondes avant de refaire la commande.
Remplace PrintMessage par :
DarkRP.notify(ply, 1, 5, " Vous devez attendre 60 secondes avant de refaire la commande.") :p
Valfunde à dit:
Il veut faire un anti spam
Je sais bien mais c'était le message que je ne comprenais pas
 
  • Initiateur de la discussion
xLomble77

xLomble77

Psychopathe
Messages
2 191
Score réaction
348
Points
290
Makss à dit:
Remplace PrintMessage par :
DarkRP.notify(ply, 1, 5, " Vous devez attendre 60 secondes avant de refaire la commande.") :p

Je sais bien mais c'était le message que je ne comprenais pas
Donc :

Le joueur tape /bonjour ça fonctionne, et s'il tape une deuxième fois avant 60 secondes cela lui met le message ?
Ce code fonctionne comme anti spam donc ? :

Code:
local function bonjour(ply) if timer.Exists("AttendsDeuxSec"..ply:SteamID()) then DarkRP.notify(ply, 1, 5, " Vous devez attendre 60 secondes avant de refaire la commande.") return else timer.Create("AttendsDeuxSec"..ply:SteamID(),60,1,function() end) end
end
 
Makss

Makss

Psychopathe
Messages
830
Score réaction
990
Points
310
xLomble77 à dit:
Donc :

Le joueur tape /bonjour ça fonctionne, et s'il tape une deuxième fois avant 60 secondes cela lui met le message ?
Ce code fonctionne comme anti spam donc ? :

Code:
local function bonjour(ply) if timer.Exists("AttendsDeuxSec"..ply:SteamID()) then DarkRP.notify(ply, 1, 5, " Vous devez attendre 60 secondes avant de refaire la commande.") return else timer.Create("AttendsDeuxSec"..ply:SteamID(),60,1,function() end) end
end
Yep, en enlevant la ligne ' local function' et le 'end' de la fin, il y a juste à mettre ce code dans la fonction de ta commande :)
 
  • Initiateur de la discussion
xLomble77

xLomble77

Psychopathe
Messages
2 191
Score réaction
348
Points
290
Makss à dit:
Yep, en enlevant la ligne ' local function' et le 'end' de la fin, il y a juste à mettre ce code dans la fonction de ta commande :)
Voici le code mais il ne fonctionne pas et j'ai l'erreur :
Tout est dans le sv_chatcommands.lua

Code:
local function Armement(ply, args) local pos = ply:GetPos() local ang = Angle(0,90,0) local obj = ents.Create("armement") obj:SetPos(pos) obj:SetAngles(ang) obj:Spawn() obj:Activate() return "" if timer.Exists("Armement"..ply:SteamID()) then DarkRP.notify(ply, 1, 5, "Vous avez pris votre armement récemment.") return else timer.Create("Armement"..ply:SteamID(),60,1,function() end) end
end
DarkRP.defineChatCommand("armement", Armement, 1.5)
L'erreur :

Code:
[ERROR] gamemodes/darkrp/gamemode/modules/chat/sv_chat.lua:37: attempt to call field 'callback' (a nil value)
1. RP_PlayerChat - gamemodes/darkrp/gamemode/modules/chat/sv_chat.lua:37
2. Run - gamemodes/darkrp/gamemode/modules/chat/sv_chat.lua:101
 
Valfunde

Valfunde

Helpeur Divin
Messages
3 800
Score réaction
1 235
Points
450
J'avais pas fait comme ça pour faire un anti spam perso mais cette façon doit fonctionner ;)
 
Makss

Makss

Psychopathe
Messages
830
Score réaction
990
Points
310
xLomble77 à dit:
Voici le code mais il ne fonctionne pas et j'ai l'erreur :
Tout est dans le sv_chatcommands.lua

Code:
local function Armement(ply, args) local pos = ply:GetPos() local ang = Angle(0,90,0) local obj = ents.Create("armement") obj:SetPos(pos) obj:SetAngles(ang) obj:Spawn() obj:Activate() return "" if timer.Exists("Armement"..ply:SteamID()) then DarkRP.notify(ply, 1, 5, "Vous avez pris votre armement récemment.") return else timer.Create("Armement"..ply:SteamID(),60,1,function() end) end
end
DarkRP.defineChatCommand("armement", Armement, 1.5)
L'erreur :

Code:
[ERROR] gamemodes/darkrp/gamemode/modules/chat/sv_chat.lua:37: attempt to call field 'callback' (a nil value)
1. RP_PlayerChat - gamemodes/darkrp/gamemode/modules/chat/sv_chat.lua:37
2. Run - gamemodes/darkrp/gamemode/modules/chat/sv_chat.lua:101
il faut mettre le timer avant la fonction pour faire spawn ton objet ;)
En entier ça donne donc :
Code:
local function Armement(ply, args) if timer.Exists("Armement"..ply:SteamID()) then DarkRP.notify(ply, 1, 5, "Vous avez pris votre armement récemment.") return "" else timer.Create("Armement"..ply:SteamID(),60,1,function() end) end local pos = ply:GetPos() local ang = Angle(0,90,0) local obj = ents.Create("armement") obj:SetPos(pos) obj:SetAngles(ang) obj:Spawn() obj:Activate() return ""
end
DarkRP.defineChatCommand("armement", Armement, 1.5)
Valfunde à dit:
J'avais pas fait comme ça pour faire un anti spam perso mais cette façon doit fonctionner ;)
Ah t'avais fait comment alors ? :eek:
 
  • J'aime
Réactions: xLomble77
  • Initiateur de la discussion
xLomble77

xLomble77

Psychopathe
Messages
2 191
Score réaction
348
Points
290
Merci à vous deux, cela fonctionne très bien.
 
Valfunde

Valfunde

Helpeur Divin
Messages
3 800
Score réaction
1 235
Points
450
Makss à dit:
il faut mettre le timer avant la fonction pour faire spawn ton objet ;)
En entier ça donne donc :
Code:
local function Armement(ply, args) if timer.Exists("Armement"..ply:SteamID()) then DarkRP.notify(ply, 1, 5, "Vous avez pris votre armement récemment.") return "" else timer.Create("Armement"..ply:SteamID(),60,1,function() end) end local pos = ply:GetPos() local ang = Angle(0,90,0) local obj = ents.Create("armement") obj:SetPos(pos) obj:SetAngles(ang) obj:Spawn() obj:Activate() return ""
end
DarkRP.defineChatCommand("armement", Armement, 1.5)
Ah t'avais fait comment alors ? :eek:
Je sais plus si jamais passé pv je te dis quand je rentre mais j'avais use une variable qui changeait d'état en fonction du timer enft
 
Makss

Makss

Psychopathe
Messages
830
Score réaction
990
Points
310
Valfunde à dit:
Je sais plus si jamais passé pv je te dis quand je rentre mais j'avais use une variable qui changeait d'état en fonction du timer enft
Ah oui c'est presque pareil, y'a juste que le timer change la variable et du coup le if regarde cette variable au lieu de regarder si le timer existe
 
Discord d'entraide
Rejoignz-nous sur Discord