Suppression des props/portes dès que l'on meurt

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

Malcolm

Psychopathe
Messages
1 096
Score réaction
262
Points
280
Bonjour/Bonsoir,

J'aimerai savoir comment faire pour que dès qu'on meurt nos props disparaissent et nos portes acheter se vendent.

Cordialement, Malcolm.
 
Jayhook

Jayhook

Geek suprême
Messages
36
Score réaction
13
Points
105
Salut,
J'ai fait ça en 5min et je l'ai pas testé mais normalement ça devrait marcher
Code:
hook.Add("PostPlayerDeath", "RemovePropsAndDoors", function(ply) cleanup.CC_Cleanup(ply) for _, ent in pairs( ents.GetAll() ) if ent:IsDoor() and ent.removeKeysDoorOwner then ent:removeKeysDoorOwner(ply) end end
end)
 
Erwann Fox

Erwann Fox

Amateur de projet
Messages
437
Score réaction
24
Points
115
Jayhook à dit:
Salut,
J'ai fait ça en 5min et je l'ai pas testé mais normalement ça devrait marcher
Code:
hook.Add("PostPlayerDeath", "RemovePropsAndDoors", function(ply) cleanup.CC_Cleanup(ply) for _, ent in pairs( ents.GetAll() ) if ent:IsDoor() and ent.removeKeysDoorOwner then ent:removeKeysDoorOwner(ply) end end
end)

Lua/Autorun/Server ?

malcolm2003 à dit:
Bonjour/Bonsoir,

J'aimerai savoir comment faire pour que dès qu'on meurt nos props disparaissent et nos portes acheter se vendent.

Cordialement, Malcolm.
Ca fonctionne? :p
 
Jayhook

Jayhook

Geek suprême
Messages
36
Score réaction
13
Points
105
Oui lua/autorun/server, dites moi si ça fonctionne
 
Yoh Sambre ♪

Yoh Sambre ♪

Shaman Fou
Messages
16 273
Score réaction
9 687
Points
1 845
Hey cela est un concept plutôt intéressant ,

@Jayhook je peux post ce code dans g-help ? Je croit qu'il ferait un bon code réaliste pour des fondateurs pointilleux :)
 
  • J'aime
Réactions: Erwann Fox
  • Initiateur de la discussion
Malcolm

Malcolm

Psychopathe
Messages
1 096
Score réaction
262
Points
280
Jayhook à dit:
Salut,
J'ai fait ça en 5min et je l'ai pas testé mais normalement ça devrait marcher
Code:
hook.Add("PostPlayerDeath", "RemovePropsAndDoors", function(ply) cleanup.CC_Cleanup(ply) for _, ent in pairs( ents.GetAll() ) if ent:IsDoor() and ent.removeKeysDoorOwner then ent:removeKeysDoorOwner(ply) end end
end)
Merci, ne pouvant pas tester actuellement (sur téléphone), je vous le dit dès que possible.
 
  • Initiateur de la discussion
Malcolm

Malcolm

Psychopathe
Messages
1 096
Score réaction
262
Points
280
Je viens de tester, ça ne marche pas.
 
  • J'aime
Réactions: Erwann Fox
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
Jayhook à dit:
Salut,
J'ai fait ça en 5min et je l'ai pas testé mais normalement ça devrait marcher
Code:
hook.Add("PostPlayerDeath", "RemovePropsAndDoors", function(ply) cleanup.CC_Cleanup(ply) for _, ent in pairs( ents.GetAll() ) if ent:IsDoor() and ent.removeKeysDoorOwner then ent:removeKeysDoorOwner(ply) end end
end)
Le hook, ce n'est pas juste "PlayerDeath" ?
 
Jayhook

Jayhook

Geek suprême
Messages
36
Score réaction
13
Points
105
malcolm2003 à dit:
Je viens de tester, ça ne marche pas.
Ok ben je vais tester ça plus sérieusement.
slownls à dit:
Le hook, ce n'est pas juste "PlayerDeath" ?
Théoriquement ça marche aussi mais c'est moins bien optimisé.
Yoh Sambre ♪ à dit:
Hey cela est un concept plutôt intéressant ,

@Jayhook je peux post ce code dans g-help ? Je croit qu'il ferait un bon code réaliste pour des fondateurs pointilleux :)
Attend peut être que je fasse une version qui marche :)
 
  • J'aime
Réactions: Erwann Fox, Malcolm et Yoh Sambre ♪
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
Code:
hook.Add("PlayerDeath", "RemovePropsAndDoors", function(ply) cleanup.CC_Cleanup(ply) for _, ent in pairs( ents.GetAll() ) if ent:IsDoor() and ent:isKeysOwned() then if ent:getDoorOwner() == ply then ent:removeKeysDoorOwner(ply) end end end
end)
Moi j'aurais fait un truc du genre :rolleyes:...
 
  • J'aime
Réactions: Yoh Sambre ♪
Yoh Sambre ♪

Yoh Sambre ♪

Shaman Fou
Messages
16 273
Score réaction
9 687
Points
1 845
slownls à dit:
Code:
hook.Add("PlayerDeath", "RemovePropsAndDoors", function(ply) cleanup.CC_Cleanup(ply) for _, ent in pairs( ents.GetAll() ) if ent:IsDoor() and ent:isKeysOwned() then if ent:getDoorOwner() == ply then ent:removeKeysDoorOwner(ply) end end end
end)
Moi j'aurais fait un truc du genre :rolleyes:...
huhu FrankerZ
 
Jayhook

Jayhook

Geek suprême
Messages
36
Score réaction
13
Points
105
Nouvelle version trop bien qui marche ma gueule !
Code:
hook.Add("PostPlayerDeath", "RemovePropsAndDoors", function(ply) cleanup.CC_Cleanup(ply, nil, {}) for _, ent in pairs( ents.GetAll() ) do if IsValid(ent) and ent:isDoor() then ent:keysUnOwn(ply) end end
end)
 
Dernière édition:
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
Après quelques test, j'ai réussi à te faire un petit code fonctionnel à placer dans lua\autorun\server

Code:
hook.Add("PlayerDeath", "RemovePropsAndDoors", function(ply) for _, ent in pairs( ents.GetAll() ) do if ent:GetClass() == "prop_physics" then if ent:CPPIGetOwner() == ply then ent:Remove() end end if ent:isDoor() && ent:isKeysOwned() then if ent:getDoorOwner() == ply then ent:keysUnOwn(ply) end end end
end)
 
Dernière édition:
  • J'aime
Réactions: Erwann Fox
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
Jayhook à dit:
Nouvelle version trop bien qui marche ma gueule !
Code:
hook.Add("PostPlayerDeath", "RemovePropsAndDoors", function(ply) cleanup.CC_Cleanup(ply, nil, {}) for _, ent in pairs( ents.GetAll() ) do if IsValid(ent) and ent:isDoor() and ent:keysUnOwn(ply) end end
end)
Tu a oublié un then ^^
 
Jayhook

Jayhook

Geek suprême
Messages
36
Score réaction
13
Points
105
slownls à dit:
Tu a oublié un then ^^
Merci de me l'avoir fait remarqué, j'avais pas fait gaffe j'ai pas l'habitude de Xenforo.
J'ai corrigé l'erreur, sinon il vaut mieux utiliser mon script pour des raisons d'optimisations et de compatibilités, je vais le démontrer avec des commentaires sur le code que tu as posté (ne le prend pas mal, c'est aussi pour que tu puisse t'améliorer).
Code:
hook.Add("PlayerDeath", "RemovePropsAndDoors", function(ply)
-- Le choix de ce hook fait que le script est moins bien optimisé que si tu avais utilisé le hook "PostPlayerDeath" for _, ent in pairs( ents.GetAll() ) do if ent:GetClass() == "prop_physics" then if ent:CPPIGetOwner() == ply then -- Nécessite le Falco's Prop Protection, tout le monde ne l'a pas forcément ent:Remove() end end if ent:isDoor() && ent:isKeysOwned() then -- Le ent:isKeysOwned() est une vérification inutile if ent:getDoorOwner() == ply then -- Cette vérification est également inutile car elle est faite dans la fonction ent:keysUnOwn() ent:keysUnOwn(ply) end end end
end)
Bref ton script marche et est correct mais le miens est mieux.
 
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
Jayhook à dit:
Merci de me l'avoir fait remarqué, j'avais pas fait gaffe j'ai pas l'habitude de Xenforo.
J'ai corrigé l'erreur, sinon il vaut mieux utiliser mon script pour des raisons d'optimisations et de compatibilités, je vais le démontrer avec des commentaires sur le code que tu as posté (ne le prend pas mal, c'est aussi pour que tu puisse t'améliorer).
Code:
hook.Add("PlayerDeath", "RemovePropsAndDoors", function(ply)
-- Le choix de ce hook fait que le script est moins bien optimisé que si tu avais utilisé le hook "PostPlayerDeath" for _, ent in pairs( ents.GetAll() ) do if ent:GetClass() == "prop_physics" then if ent:CPPIGetOwner() == ply then -- Nécessite le Falco's Prop Protection, tout le monde ne l'a pas forcément ent:Remove() end end if ent:isDoor() && ent:isKeysOwned() then -- Le ent:isKeysOwned() est une vérification inutile if ent:getDoorOwner() == ply then -- Cette vérification est également inutile car elle est faite dans la fonction ent:keysUnOwn() ent:keysUnOwn(ply) end end end
end)
Bref ton script marche et est correct mais le miens est mieux.
Oui mais dans tous sa, tu m'explique pas pourquoi le hook "PostPlayerDeath" et mieux que "PlayerDeath" ...

De plus darkrp inclue directement FPP
 
Jayhook

Jayhook

Geek suprême
Messages
36
Score réaction
13
Points
105
slownls à dit:
Oui mais dans tous sa, tu m'explique pas pourquoi le hook "PostPlayerDeath" et mieux que "PlayerDeath" ...
De plus darkrp inclue directement FPP
Pour les hooks c'est assez compliqué, en grand quand tu fait un hook.Add, tu ajoute une fonction dans une table qui sera appelée avec tout les arguments proposés par le hook (et ce même si tu n'en mets qu'un seul).
Vu que le hook "PostPlayerDeath" propose un seul argument tandis que le hook "PlayerDeath" en propose 3, il est préférable d'utiliser le hook "PostPlayerDeath" pour ce script (même si ça change pas grand chose).
Si tu veux en savoir plus, regarde le script qui gère les hooks : https://github.com/Facepunch/garrysmod/blob/master/garrysmod/lua/includes/modules/hook.lua

Pour le FPP, il n'y est pas quand on a juste la version github (ce qui je dois bien l'admettre est un peu idiot).
Il y a juste un script qui empêche tout problème de compatibilité : https://github.com/FPtje/DarkRP/blob/master/gamemode/modules/cppi/sh_cppi.lua
D'ailleurs, si ce script n'était pas présent, les personnes n'ayant pas le FPP auraient eu une erreur Lua pour la raison "attempt to call a nill value" ou un truc comme ça.

Dans tout les cas ton script reste assez bon, c'est juste que le miens est un peu mieux car plus court (si dès fois quand c'est court c'est mieux), un peu mieux optimisé et tout le temps fonctionnel.
 
  • J'aime
Réactions: slownls
Yoh Sambre ♪

Yoh Sambre ♪

Shaman Fou
Messages
16 273
Score réaction
9 687
Points
1 845
Je vais prendre vos codes respectif cela fait une bonne alternative en fonction du choix du mec qui C/C le code :)
 
  • J'aime
Réactions: Erwann Fox
  • Initiateur de la discussion
Malcolm

Malcolm

Psychopathe
Messages
1 096
Score réaction
262
Points
280
Merci beaucoup, j'ai pris celui de @Jayhook même si les deux fonctionnent :)
 
  • J'aime
Réactions: Yoh Sambre ♪
Jayhook

Jayhook

Geek suprême
Messages
36
Score réaction
13
Points
105
Salut,
Même si ce topic est résolu je voulais vous partager une version améliorée de ce code qui permet également de supprimer les véhicules.
J'en profite pour remercier @Yoh Sambre ♪ qui m'a donné l'idée en me suggérant d'ajouter une fonctionnalité qui permet de supprimer les véhicules du joueur à sa mort.

Bon assez parlé voici le script avec quelques explications.
Code:
-- Permet de définir tout les hooks relatifs au spawn d'entités pour permettre l'ajout de l'entité spawn à la liste d'entités à nettoyer à la mort du joueur
local hooks = { PlayerSpawnedVehicle = {ply=1, ent=2}, PlayerSpawnedProp = {ply=1, ent=3}
}
-- Sert à ajouter les hooks définie dans la variable précédentes
for h, ents in pairs(hooks) do hook.Add(h, "JayCleanUp", function(...) local args = {...} local ply = args[ents.ply] if not ply.JayCleanUp then ply.JayCleanUp = {} end ply.JayCleanUp[#ply.JayCleanUp + 1] = args[ents.ent] end)
end
-- Code de base auquel j'ai rajouté la fonctionnalité permettant de supprimer les entités ajoutées dans la variable ply.JayCleanUp
hook.Add("PostPlayerDeath", "JayCleanUp", function(ply) for _, ent in pairs( ents.GetAll() ) do if IsValid(ent) and ent:isDoor() then ent:keysUnOwn(ply) end end for _, ent in pairs(ply.JayCleanUp or {}) do if IsValid(ent) then ent:Remove() end end ply.JayCleanUp = nil
end)
Remarque :
En cas d'incompatibilité avec un Car Dealer, faites le moi savoir est donnez moi le lien de l'addon posant problème pour que j'essaye rentre le script compatible.
 
  • J'aime
Réactions: Yoh Sambre ♪
  • Initiateur de la discussion
Malcolm

Malcolm

Psychopathe
Messages
1 096
Score réaction
262
Points
280
Jayhook à dit:
Salut,
Même si ce topic est résolu je voulais vous partager une version améliorée de ce code qui permet également de supprimer les véhicules.
J'en profite pour remercier @Yoh Sambre ♪ qui m'a donné l'idée en me suggérant d'ajouter une fonctionnalité qui permet de supprimer les véhicules du joueur à sa mort.

Bon assez parlé voici le script avec quelques explications.
Code:
-- Permet de définir tout les hooks relatifs au spawn d'entités pour permettre l'ajout de l'entité spawn à la liste d'entités à nettoyer à la mort du joueur
local hooks = { PlayerSpawnedVehicle = {ply=1, ent=2}, PlayerSpawnedProp = {ply=1, ent=3}
}
-- Sert à ajouter les hooks définie dans la variable précédentes
for h, ents in pairs(hooks) do hook.Add(h, "JayCleanUp", function(...) local args = {...} local ply = args[ents.ply] if not ply.JayCleanUp then ply.JayCleanUp = {} end ply.JayCleanUp[#ply.JayCleanUp + 1] = args[ents.ent] end)
end
-- Code de base auquel j'ai rajouté la fonctionnalité permettant de supprimer les entités ajoutées dans la variable ply.JayCleanUp
hook.Add("PostPlayerDeath", "JayCleanUp", function(ply) for _, ent in pairs( ents.GetAll() ) do if IsValid(ent) and ent:isDoor() then ent:keysUnOwn(ply) end end for _, ent in pairs(ply.JayCleanUp or {}) do if IsValid(ent) then ent:Remove() end end ply.JayCleanUp = nil
end)
Remarque :
En cas d'incompatibilité avec un Car Dealer, faites le moi savoir est donnez moi le lien de l'addon posant problème pour que j'essaye rentre le script compatible.
Lua > Autorun > Server ?
 
Jayhook

Jayhook

Geek suprême
Messages
36
Score réaction
13
Points
105
Oui lua/autorun/server
 
A

Alex's_

Nouveau né
Messages
3
Score réaction
0
Points
15
Jayhook à dit:
Oui lua/autorun/server
Bonjour, je voudrais savoir si quelqu'un aurait le nouveau script ? Ou si il marche encore quel nom il faut donner au Fichier, car moi cela ne marche pas :/
 
M

Moslay28

Geek suprême
Messages
116
Score réaction
11
Points
130
Le script supprime aussi les entités du menu F4, genre je prend via le menu F4 un caisse et quand je meurt la caisse ce supprime ?
 
A

Alex's_

Nouveau né
Messages
3
Score réaction
0
Points
15
matmarat à dit:
Le script supprime aussi les entités du menu F4, genre je prend via le menu F4 un caisse et quand je meurt la caisse ce supprime ?
Tu sais pourquoi quand je met le code dans : lua/autorun/server cela ne marche pas :/ ?
 
Discord d'entraide
Rejoignz-nous sur Discord