Liste complète des différent codes disponible pour votre serveur

Très souvent des recherches sont effectuées afin de promouvoir les codes les plus utiles pour chaque type d'utilisation sur n'importe quel mode de jeu, gardez donc l'œil car il est certain que cette liste gonflera au fur et à mesure.

1
code au total (variante non prise en compte)

- Bloquer la command pour se suicider

Cette commande assez inutile reste néanmoins un très bon moyen pour les joueurs coquins de se déplacer plus rapidement (retour au centre ville auto) ou ruiner une scène RP…

Bref rien de très agréable, voici donc un code très lite pour empêcher ce genre de gêne :

Merci a Divran pour le code !

Installation: autorun/server

no_kill_command.lua
 
  1. local function BlockSuicide(ply)
  2.     ply:ChatPrint("*Rien ne semble se produire..*")
  3.     return false
  4. end
  5. hook.Add( "CanPlayerSuicide", "BlockSuicide", BlockSuicide )

- Afficher le spawnmenu uniquement pour certains job DarkRP

Envie de voir des sdf dormir par terre sans rien ou d’avoir un job de monstre qui ne construit rien mais se contente d’erré dans les égouts ? bien grace a ce code basique il vous sera facile de contrôler quelle job précisément a la possibilité d’ouvrir son spawnmenu !

Merci a BobbleHead pour le code concept !

Installation: autorun/server

resctrict_spawnmenu.lua
 
  1. hook.Add("SpawnMenuOpen", "team_resctrict_spawnmenu", function()
  2.     local allowedJobs = {[TEAM_CITOYEN] = true, [TEAM_FLIC] = true, [TEAM_MAFIEU] = true, [TEAM_MAIRE] = true, [TEAM_CUISTOT] = true}
  3.     return (allowedJobs[LocalPlayer():Team()] != nil)
  4. end)

- Modifier le stuff de base du meurtrier en Murder en fonction de son groupe ULX

Il est très souvent reproché aux serveurs Murder de ne pas pimenter un peu plus le gameplay durant les rounds (hormis avec l’addons des power round), déja qu’attendre de devenir enfin le meurtrier demande une certaine patience en fonction du nombre de joueurs sur le serveur mais en plus au final les techniques s’enchaînent quel que soit le style du joueur.

Avec ce code vous allez avoir une bonne opportunité de rendre fidèle vos joueurs qui on l’habitude de se lassé du simple ‘couteaux’ , en fonction du grade ULX voila les nombreuse possibilités de préconfigurées : un stuff fun ou plus létal.

Merci à Handsome Matt pour son code vraiment cool !

Installation: lua/autorun/server/

murder_stuff.lua
 
  1. hook.Add("PlayerLoadout", "MurderStuff", function(ply)
  2.     ply:Give("weapon_rp_hands")
  3.    
  4.     if ply:GetMurderer() and ply:IsUserGroup("superadmin") then
  5.         ply:Give("VOTRE WEAPONS EN +")
  6.     elseif ply:GetMurderer() and ply:IsUserGroup("user") then
  7.         ply:Give("VOTRE WEAPONS EN +")
  8.     elseif ply:GetMurderer() then
  9.         ply:Give("weapon_mu_knife")
  10.     end
  11.     return true
  12. end)

- Set un prénom & nom roleplay a la connexion du joueur

Toutes les équipes de modération dans garry’s mod sont fatiguées de devoir se téléporter sur un nouveau joueur pour lui dire :

“Un prénom/nom rp s’il te plait merci.”

Je vous propose donc un code qui a pour concept de générer un prénom ainsi qu’un nom prédéfinis (le joueur pourra bien évidemment changer si il le désire… C’est un code juste pratique pour lutter contre la perte de temps).

Installation : autorun/server

Merci à Borris_Squad pour le code !

set_name_rp.lua
 
  1. local firstnames = { "Harry", "Benjamin", "Matthias", "Francois", "Billy", "Max", "Charle", "Patrick", "Kevin", "Titou" }
  2. local lastnames = { "Barma", "Sigon", "Mariu", "Samme", "Beloroide", "Kitsuna", "Fabre", "Tentai", "Slimme", "Moee" }
  3. local delay = 4 -- secondes avant que le joueur ne subisse le set rpname
  4. hook.Add( "PlayerInitialSpawn", "setnamerp", function(ply)
  5.       timer.Simple(delay , function()
  6.             ply:setRPName(table.Random(firstnames).." "..table.Random(lastnames))
  7.       end)
  8. end)

- Mute l'outil 'Thruster' afin d’être tranquille en terme de sonorité

Dans Garry’s Mod, un très grand panel d’outils de base est fourni, il sont tous différents les uns des autres à l’égard des caractéristiques et permettent aux joueurs de pouvoir mettre en œuvre beaucoup de systèmes plus ou moins complexes.

Les thrusters sont un outil à la fois mécanique et décoratif, ayant la particularité d’augmenter la puissance de poussée d’un objet (très pratique pour des voitures voire des bateaux). Le problème de cet outil est qu’il propose toute une variété de sons assez lourds pour la plupart… Alors ça peut se révéler fun pour une soucoupe volante, mais au bout de 20mn quand un joueur utilise un son d’ascenseur vous allez vite avoir pour habitude de resté éloigné de sa construction…

Bref voici un code qui permet de simplement mute les sons de l’outil en général 😉

Installation: lua/autorun/server

no_thruster_sounds.lua
 
  1. if SERVER then
  2.       local ShutUpThrusters = function(ent)
  3.             if ent:GetClass() == "gmod_thruster" then
  4.                   timer.Simple(.01, function()
  5.                         ent.StartThrustSound = function()return end
  6.                   end)
  7.             end
  8.       end
  9.       hook.Add("OnEntityCreated", "Thrustershit", ShutUpThrusters)
  10. end

- Désactiver le spawnmenu sauf pour les staff

Très souvent inutile en PrisonRP ou toute autre déclinaison du gamemode Sandbox ce code va vous permettre d’afficher un menu conséquent en moins pour le joueur (celui ci n’en n’ayant finalement pas besoin) 

Installation: darkrp/gamemode/cl_init.lua

restrict_spawmenu.lua
 
  1. local function DisallowSpawnMenu( )
  2. if not LocalPlayer():IsAdmin() then
  3. return false
  4. chat.AddText( Color( 255, 0, 0 ), "Menu reservé au staff du serveur !" )
  5. end
  6. end
  7. hook.Add( "SpawnMenuOpen", "DisallowSpawnMenu", DisallowSpawnMenu)

- Restreindre facilement un job darkrp avec utime

Marre de voir des trolls spawn sur le serveur et directement prendre un job pour freekill ou pire ? (Flic par exemple…)

Alors limitez la sélection d’un job en vérifiant le nombre de temps d’un joueur sur le serveur ! Simple et permettant de fidéliser votre communauté, ce code va vous permettre de mettre une certaine limite pour différents job… Ainsi vous serez tranquilles; quand un joueur prendra le job “Policier” ou “Maire”, cela prouvera qu’il est là depuis un bon moment (en fonction du temps minimum requis indiqué)

Pré-requis : Utime

Ensuite, dans votre job il suffit d’ajouter ce customCheck :

job_time.lua
 
  1. customCheck = function(ply) --remplacer 7200 par le nombre de seconde
  2.       if ply:GetUTimeTotalTime() >= 7200 then
  3.             return true
  4.       end
  5. end,
  6. CustomCheckFailMsg = "Vous devez jouer " .. string.NiceTime( 7200 ) .." pour pouvoir prendre ce type de metier.",

- Récompense avec des points (pointshop) pour chaque team en Deathrun

Salut à tous, pour inaugurer cette première page de la Catégorie 4 maintenant disponible dans “Codes glua cadeaux”, on va voir un code compatible à n’importe quel genre de gamemode et ici plus particulièrement pour le mode de jeu “DeathRun” 😀

Gamemode très drôle entre amis, où le but est simplement de finir une map remplie d’obstacles tous plus loufoques & sadiques les uns que les autres… Seul hic dans cet objectif : un des joueurs contrôle le déclenchement des machines et des pièges pouvant vous faire échouer.

De ce fait, très souvent, de nombreux fondateurs essaient de rajouter en plus de la victoire des petits bonus qui donnent envie de continuer à s’entraîner sur le serveur pour perfectionner son timing de sauts ou d’esquives… Voici donc un code en relation avec le Pointshop qui récompensera vos joueurs si ils parviennent à la victoire (à savoir tuer tous les autres joueurs pour le/les joueur(s) contrôlant les pièges et juste finir la map sans mourir pour les runners )

Merci à Combinerus pour ce code très gratifiant 

Installation: lua/autorun/server

pointshop_reward
 
  1. local amount = 0;
  2. hook.Add( "PlayerDeath", "KillPoints", function( victim, weapon, killer)
  3.     if( IsValid( killer ) and IsValid( victim ) ) then
  4.         if( killer:IsPlayer() and victim:IsPlayer() ) then
  5.             if ( killer:Team() == TEAM_RUNNER and victim:Team() == TEAM_DEATH ) then
  6.                 killer:PS_GivePoints( 50 );
  7.                 killer:PS_Notify("Vous avez reçu 50 points pour avoir évité la mort !");
  8.             elseif ( killer:Team() == TEAM_DEATH and victim:Team() == TEAM_RUNNER ) then
  9.                 killer:PS_GivePoints( 70 );
  10.                 killer:PS_Notify("Vous avez reçu 70 points pour avoir tué tout le monde !");
  11.             end;
  12.         end;
  13.     end;
  14. end )

- Modifier le son de mort de base du joueur

Simple comme de se frotter avec énergie contre la boîte aux lettres de son voisin, à vous de choisir entre n’avoir aucun son lors de la mort du joueur ou un son différent de l’horrible “BEEP BEEP” de base ( pour un son custom ne pas oublier de l’inclure dans un FastDL ).

Merci à CombineGuru d’avoir post ce code  simple et efficace

set_death_sound.lua
 
  1. local function NoSound()
  2.       return true
  3. end
  4. hook.Add("PlayerDeathSound", "NoSound", NoSound)

 Code N°2 (Son custom)

Merci à meirl d’avoir post le code sur facepunch 

death_sound.lua
 
  1. function GM:EntityTakeDamage(ply, info)
  2.       if ply:Health() < 1 then
  3.             ply:EmitSound(string.format("soncustom.wav", math.random(1, 6)), 100, 100, 1, CHAN_BODY)
  4.       end
  5. end
  6. function GM:PlayerDeathSound()
  7.       return true
  8. end

- En tant que staff pouvoir être invisible tous en étant en noclip

Fatigué de devoir faire un !cloak PSEUDO ? Ce code va donc résoudre vos problèmes de tendinite !

Essentiellement un raccourcie qui évitera de perdre du temps a votre équipe de modération qui la plupart du temps l’oublient.

noclip_cloak.lua
 
  1. local function NoclipCloak( ply )
  2.     if !ply:GetMoveType() == MOVETYPE_NOCLIP then
  3.         ply:SetColor(Color(0, 0, 0, 0))
  4.     else
  5.         ply:SetColor(Color(255,255,255,255))
  6.     end
  7. return true
  8. end
  9. hook.Add("PlayerNoClip", "NoclipCloak", NoclipCloak)

Code N°2 (variante)

Merci a DevulTj pour le code ! 

noclip__auto_cloak.lua
 
  1. hook.Add("PlayerNoClip", "noclip_cloak", function(ply, noClipState)
  2.         if not ply:IsAdmin() then return false end
  3.         if noClipState then
  4.             ply:SetNoDraw(true)
  5.             ply:SetNotSolid(true)
  6.             ply:GodEnable()
  7.             ply:DrawWorldModel(false)
  8.         else
  9.             ply:SetNoDraw(false)
  10.             ply:SetNotSolid(false)
  11.             ply:GodDisable()
  12.             ply:DrawWorldModel(true)
  13.         end
  14.         return true
  15.     end)

- Faire en sorte que le joueur mort laisse a terre la totalité de son argent

Envie de “réalisme” pur en terme de gameplay économique ? , très bien alors ce code est fait d’office pour votre serveur ! en effet comme le nom l’indique quand un joueur mourra il perdra l’intégralité de son portefeuille..ce genre de manoeuvre permet de limité le freekill mais aussi d’inculqué une présence d’esprit vital en terme de gestion du personnage concernant le transfert d’argent ect..ect (le joueur étant alors forcé de prendre sur lui une petite somme de son compte en banque..)

Merci a Reese Roite pour la publication du code ! & et a ntrom pour le detterage du code situé dans un vieux topic du forum que moi méme je n’ai pas retrouvé 😉

Installation:  lua/autorun/server

drop_all_money.lua
 
  1. hook.Add("PlayerDeath", "argentmortyipicaye", function(ply)
  2.       local amount = ply:getDarkRPVar( "money" )
  3.       amount = math.Round(amount)
  4.       if amount > 0 then
  5.           ply:addMoney(-amount)
  6.           DarkRP.createMoneyBag(ply:GetPos(), amount)
  7.       end
  8. end)

Code N°2 (variante

Grand merci a Tupac pour cette déclinaison 😉

drop_all_player_money
 
  1. hook.Add('PlayerDeath', 'dropurMoneyBITCHBOI', function(pl)      -- Ces crochets s'appellent chaque fois qu'un joueur décède. L'argument "pl" est le joueur qui est mort
  2.       if pl:getDarkRPVar 'money' > 0 then                        -- Vérifiez s'ils ont de l'argent à déposer
  3.             local money = pl:getDarkRPVar 'money'            -- Rangez le montant de l'argent qu'ils ont dans cette variable
  4.             local pos = pl:GetPos() + Vector(0, 0, 50)       -- Rangez la position des joueurs et ajoutez Vector (0, 0, 50) pour que l'argent engendre au dessus du joueur
  5.             pl:addMoney(money * -1)                              -- Réglez l'argent des joueurs à 0 (prenez la variable monétaire et multipliez par une négative)
  6.             DarkRP.createMoneyBag(pos, money)                  -- Créez le sac d'argent avec la fonction prématurée darkrp "DarkRP.createMoneyBag", le premier paramètre étant la pos et le deuxième à supprimer
  7.       end
  8. end)

- Augmenter la valeur du saut de base

Envie que vos joueurs bondissent comme des lapins sous cocaïne ?

Aucun problème ! Ce minuscule code va vous permettre de set la puissance de saut du personnage (permettant ainsi de ne plus le faire dans le fichier source du jeu, qui s’efface à chaque màj… Yeah ! ) et donc permettre de pouvoir avoir plus de chance de passer au-dessus des bâtiments qui normalement sont inaccessibles 😉

Installation: lua/autorun/server

Merci à Robotboy655 (rubat) pour avoir post le code adéquat 

bunny.lua
 
  1. hook.Add("PlayerSpawn","lahaut",function ( ply )
  2.       ply:SetJumpPower( 800)
  3. end )

- Bannir automatiquement les membres d'un groupe steam indésirable

Peur d’un groupe steam de type propkill ou anonymousse ? aucun probleme ce code est fait pour vous ! , la totalité des membres du ou des groupes indiquer seront automatiquement ban de votre serveur a leur connexion..gardez a l’esprit quand meme que pas mal de joueur du groupe steam que vous n’appréciez pas ne sont pas forcément concernés par l’activité du groupe (énormément de gens oublie qu’il font partie de groupe steam)

Merci Maks !

Installation: lua/autorun/server

bgs.lua
 
  1. --[[
  2.     ajoute les noms des groupes a ban ici
  3.     genre dans http://steamcommunity.com/groups/nomdugroupe
  4.     tu prends "nomdugroupe"
  5. ]]
  6. local bannedGroups = {
  7.    "nomdugroup",
  8. }
  9. hook.Add("CheckPassword", "BanGroupSystem", function(steamid64)
  10.     for _, group in pairs(bannedGroups) do
  11.         local link = "https://steamcommunity.com/groups/"..group.."/memberslistxml/?xml=1"
  12.         http.Fetch(link, function(body)
  13.             if string.find(body, steamid64) != nil then
  14.                 return false, "MAKE GMOD SAFE AGAIN"
  15.             end
  16.             local number = tonumber(string.match(body, "(.+)"))
  17.             for id=2, number do
  18.                 http.Fetch(link.."&p="..id, function(bodyception)
  19.                     if string.find(body, steamid64) != nil then
  20.                         return false, "MAKE GMOD SAFE AGAIN"
  21.                     end
  22.                 end)
  23.             end
  24.         end)
  25.     end
  26. end)
  27. print("BanGroupSystem Actif !")

- Changer le son de base du saut

Fatigué d’entendre le même son en boucle à chacun de vos sauts ? Alors ce code va apporter un peu de fun sur votre serveur en modifiant avec goût (oupas !) le wav original ! Libre de mettre bien évidemment un son pas forcément de base dans le jeux issu de CSS ou un autre jeu valve, mais n’oubliez juste pas de l’inclure dans un fastdl 🙂 

clear_ragdoll_npc.lua
 
  1. function RemoveDeadRag( ent )
  2.     if (ent == NULL) or (ent == nil) then return end
  3.     if (ent:GetClass() == "class C_ClientRagdoll") then
  4.         if ent:IsValid() and !(ent == NULL) then
  5.             SafeRemoveEntityDelayed(ent,0)
  6.         end
  7.     end
  8.    
  9. end
  10. hook.Add("OnEntityCreated", "RemoveDeadRag", RemoveDeadRag)

- Effacer le cadavre des NPC

Code permettant de pouvoir enfin assouvir ses envie d’event apocalyptique sans craindre une répercussion drastique sur les ressource de votre serveur ! , sentez vous mieux en observant les cadavre de vos NPC disparaître automatiquement !

Merci à Fantym420 pour ce code très sympathique !

Installation: lua\autorun\client

clear_ragdoll_npc_death
 
  1. function RemoveDeadRag( ent )
  2.     if (ent == NULL) or (ent == nil) then return end
  3.     if (ent:GetClass() == "class C_ClientRagdoll") then
  4.         if ent:IsValid() and !(ent == NULL) then
  5.             SafeRemoveEntityDelayed(ent,0)
  6.         end
  7.     end
  8.    
  9. end
  10. hook.Add("OnEntityCreated", "RemoveDeadRag", RemoveDeadRag)

- Pouvoir différencier le son de marche (foodstep) d'un job en Darkrp

Envie de faire un job gouvernemental qui a un style unique ? , ne cherchez plus avec ce code vous aurez le plaisir d’augmenter l’immersion du job de 500% ! .

Différent son vont être jouer a chaque mouvement du joueur afin d’avoir un rendu inhabituelle qui peux rendre le gameplay plus réaliste/loufoque (en fonction du type de serveur..).

custom_sound_foodstep.lua
 
  1. hook.Add("PlayerFootstep", "ChangeStepSounds", function(ply)
  2.     if ply:Team() == TEAM_NOM then
  3.             ply:EmitSound( "NPC_Hunter.Footstep" ) -- Custom sound
  4.             return true -- Don't allow default footsteps
  5.     end
  6.     if ply:Team() == TEAM_DIFFERENTE then
  7.       ply:EmitSound( "CustomSound.mp3" ) -- Custom sound
  8.             return true -- Don't allow default footsteps
  9.     end
  10. end)

- Supprimer automatiquement les World Props inutile comme des meubles génant dans des endroits indispensable

Code pas forcément a mettre en oeuvre pour le gamemode Darkrp (quoi que?) il permet simplement de supprimer la totalité des entités de type “prop” sur la map , essentiellement utilisé a cause de certaine map contenant des props inutile ou néfaste .

Notez qu’il est possible d’avoir une variante pour le reste des entités  (NPC , Weapons , Ragdolls , Glass)

Code N°1

Installation: lua/autorun/server

 hook.Add("InitPostEntity", "DeleteTrash", function()
      for _,v in pairs(ents.GetAll()) do
            if string.find(v:GetClass(), "prop") then
                  SafeRemoveEntity(v)
            end
      end
end)

Code N°2 (variante)

Installation: lua/autorun/server

 local blacklist = {
      ["prop_physics"] = true,
      ["prop_whatever"] = true,
}

hook.Add( "InitPostEntity", "Whoops", function()
      for _, ent in pairs( ents.GetAll() ) do
            if blacklist[ ent:GetClass() ] then ent:Remove() end
      end
end )

- Mettre en place une commande pour ouvrir une page web au joueurs

Envie de boost le groupe steam de votre communauté ? facile avec ce code qui permet de proposer au joueurs in-game de faire une simple command pour avoir un aperçu de votre groupe ou se trouve vos infos supplémentaire (TS, Discord, Forum)

Installation: lua/autorun/client

local command = "!steam"
local url = "https://steamcommunity.com/groups/whynotbecomeafly"
hook.Add("OnPlayerChat","GBox_URL4Chat",function(ply, text)
if string.Trim(text) == command then
if ply == LocalPlayer() then
gui.OpenURL(url)
end
return true
end
end)

 

- Supprimer le soleil de votre map pour une ambiance un peu moins éclatante

Maintenant, sur de très nombreux serveurs, un style de type “apocalypse” est en vogue, survival/horror, et nombreux sont alors confrontés à un léger souci sur les maps pas forcément créées dans l’idée de ce genre de gameplay…

Le style de jeu se veux très dark mais du coup certaines map imposent malgré elles le “soleil” dans le ciel, viens alors le compromis pénible de devoir prendre un cycle jour/nuit.

Néanmoins, grâce a ce simple code un peu hors norme, il vous sera possible de désactiver (ou enlever, voire détruire, cela dépend de votre point de vue 😉) l’affichage du soleil sans forcément passer par l’entité sun_edit.

Notez que ce code peut aussi servir à supprimer ce visuel un poil gênant 🙂 (gm_construct par exemple, où il ne sert à rien…)

Merci à ZIgnorant pour ce code qui ne n’a pas besoin d’avoir un serveur sous sv_cheats 1 ! 

Installation: lua/autorun

hide_sun.lua
 
  1. hook.Add("InitPostEntity", "sun remove", function()
  2.       local aSuns = ents.FindByClass("env_sun")
  3.       for i = 1, #aSuns do
  4.             aSuns[i]:Remove()
  5.       end
  6. end)

- Avoir un Antipropkill basique ne nécessitant aucune configuration

Voilà un code qui peut paraître ridicule au vue de sa longueur mais qui confère un grand soutien pour une équipe de modération d’un petit serveur.

Ce code va vous permettre d’avoir un antipropkill basique, sans option, via panel ou fichier config (le GhostProps par exemple s’avère assez pénible dans les serveurs darkrp). Mais notez qu’il est conseillé de l’utiliser dans un serveur assez basique (Sandbox par exemple ou Murder voire TTT), après à vous de voir… Le code n’étant pas infaillible, il est juste là pour pouvoir offrir un minimum de sécurité contre le propkilling brute.

Installation: lua/autorun/server

no_propkill.lua
 
  1. hook.Add("EntityTakeDamage", "AntiPropKilldeluxe", function( target, dmginfo )
  2.       local attacker = dmginfo:GetAttacker()
  3.       if attacker:GetClass() == "prop_physics" then
  4.             dmginfo:SetDamage(0)
  5.       end
  6. end)

Code N°2 (variante)

anti_propkill.lua
 
  1. hook.Add( "EntityTakeDamage", "AntiPropKilldeluxe", function(ent,dmginfo)
  2.     if ent:IsPlayer() and dmginfo:GetDamageType() == DMG_CRUSH then
  3.         dmginfo:SetDamage(0)
  4.     end
  5. end)

- ForceRespawn vos joueurs pour ne pas avoir de cadavres a l'infini par terre

Marre des joueurs qui traine par terre depuis la dernière fusillade en ville ou qui sont simplement afk après un raid foiré contre le gang le plus célèbre du serveur ? ..alors ce code seras la solution à ce type de problématique

Installation: lua/autorun

Un grand merci à Stanstar22 pour son code très complet

force_respawn.lua
 
  1. function autoRespawn( ply )
  2.     timer.Simple( 1, function()
  3.         if !ply:Alive() then
  4.             ply:Spawn()
  5.         end
  6.     end )
  7. end
  8. hook.Add( "PlayerDeath", "autoRespawn", autoRespawn )

- Pousser le concept de NLR (New Life Rule) a un niveaux supérieur

Voici des codes très intéressants permettant d’avoir un ajout supplémentaire pour des serveurs au concept “réaliste”.

Leur effet, à la mort du joueur, consiste à ce qu’il perde non seulement la totalité de son argent (comme avec un autre code, disponible sur g-box :)), mais aussi ses props, véhicules et bien évidemment ses propriétés (portes si vous préférez).

Installation: lua/autorun/server

Un grand merci à Jayhook pour son code, qui, à la suite d’un MP, a délivré une version encore plus complète que celle de base 😉 

delete_all_entity_players.lua
 
  1. -- 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
  2. local hooks = {
  3.     PlayerSpawnedVehicle = {ply=1, ent=2},
  4.     PlayerSpawnedProp = {ply=1, ent=3}
  5. }
  6. -- Sert à ajouter les hooks définits dans la variable précédente
  7. for h, ents in pairs(hooks) do
  8.     hook.Add(h, "JayCleanUp", function(...)
  9.         local args = {...}
  10.         local ply = args[ents.ply]
  11.         if not ply.JayCleanUp then ply.JayCleanUp = {} end
  12.         ply.JayCleanUp[#ply.JayCleanUp + 1] = args[ents.ent]
  13.     end)
  14. end
  15. -- Code de base auquel j'ai ajouté la fonctionnalité de supprimer les entités ajoutées dans la variable ply.JayCleanUp
  16. hook.Add("PostPlayerDeath", "JayCleanUp", function(ply)
  17.     for _, ent in pairs( ents.GetAll() ) do
  18.         if IsValid(ent) and ent:isDoor() then ent:keysUnOwn(ply) end
  19.     end
  20.     for _, ent in pairs(ply.JayCleanUp or {}) do
  21.         if IsValid(ent) then ent:Remove() end
  22.     end
  23.     ply.JayCleanUp = nil
  24. end)

Code N°2 (variante minimaliste)

Merci aussi à slownls pour son code alternatif  🙂 

remove_door_and_props.lua
 
  1. hook.Add("PlayerDeath", "RemovePropsAndDoors", function(ply)
  2.     for _, ent in pairs( ents.GetAll() ) do
  3.         if ent:GetClass() == "prop_physics" then
  4.             if ent:CPPIGetOwner() == ply then
  5.                 ent:Remove()
  6.             end
  7.         end
  8.         if ent:isDoor() && ent:isKeysOwned() then
  9.             if ent:getDoorOwner() == ply then
  10.               ent:keysUnOwn(ply)
  11.           end
  12.         end
  13.     end
  14. end)

- Faire taire les sons d'une map a la connexion de votre serveur

Pour ce code on va voir comment faire pour avoir les oreilles tranquilles sur des maps un peu trop sonores !

Il arrive en effet très souvent qu’un dev sur hammer décide d’ajouter un son d’ambiance (NdT: Ce sont des “Soundscapes”) pour avoir un effet plus “vivant” dans la map, cela peut être une simple zone ou la globalité de l’aire de jeu (les sons sont généralement une sorte d’écho sourd de ville ou de foret). L’initiative est très bonne, hélas beaucoup trop souvent le son est bien trop présent voire strident à la longue… Heureusement il existe un code très simple pour ne plus entendre quoi que ce soit 🙂

Installation: autorun/client

stop_sound.lua
 
  1. hook.Add("InitPostEntity","kill_sounds", function()
  2.       RunConsoleCommand("stopsound")
  3. end)

- Restriction de la commande 'gm_spawn'

Quand on a un serveur avec la possibilité de spawn des props, il peut s’avérer que la commande “gm_spawn” soit problématique… En effet, entre le fait de spamprops pour mettre à mal votre serveur ou d’avoir des joueurs préférant troll en spawnant un meuble assez massif très rapidement, il y a de quoi devenir dingue…

Voilà donc des codes très intéressants qui peuvent servir à sécuriser votre serveur, ou mieux encore, à avoir un rendu plus réaliste (concernant uniquement les mode de jeux roleplay).

Installation: lua/autorun/client

Merci à Mista Tea pour le partage public du code

kill_gm_spawn_command.lua
 
  1. hook.Add( "PlayerBindPress", "BlockGMSpawnBinds", function( _, bind )
  2.     if ( string.find(string.lower(bind), "gm_spawn") ) then
  3.         LocalPlayer():PrintMessage( HUD_PRINTTALK, "*Action impossible*" )
  4.         return true
  5.     end
  6. end)

Code N°2 (variante)

Merci à Giraffen93 pour la publication du code

block_gm_spawn_command.lua
 
  1. local canspawn = {
  2.       ["admin"] = true,
  3.       ["superadmin"] = true,
  4. }
  5. hook.Add("PlayerSpawnProp", "MaksStopGmSpawn", function(ply)
  6.       if not canspawn[ply:GetUserGroup()] then
  7.             ply:PrintMessage(HUD_PRINTTALK,"*Action impossible*")
  8.             return false
  9.       end
  10. end)

- Avoir un effet d'eau sur les entités réaliste

Fait intéressant a remarquer sur garrys mod durant vos sessions vous avez sans doute remarquer que quand votre joueur est en feu il est inutile de plonger dans un lac puisque une fois dans l’eau absolument rien ne se passe (si ce n’est que votre joueur continue de prendre des dégâts..) de même et bien évidemment les NPC

Voici donc le code nécessaire pour ajouter le réalisme évident des lois de la nature 😉

water_fire
 
  1. local CurTime = CurTime
  2. local ents_GetAll = ents.GetAll
  3. local flNextCheckTime = 0
  4. hook.Add("Tick", "WaterExtinguish", function()
  5.     local flCurTime = CurTime()
  6.    
  7.     if (flNextCheckTime <= flCurTime) then
  8.         flNextCheckTime = flCurTime + 0.2 -- Check every 0.2 seconds..
  9.        
  10.         local tEntities = ents_GetAll()
  11.        
  12.         for i = 1, #tEntities do
  13.             if (tEntities[i]:IsOnFire() and tEntities[i]:WaterLevel() == 3) then
  14.                 tEntities[i]:Extinguish()
  15.             end
  16.         end
  17.     end
  18. end)

- Pouvoir faire en sorte que le joueur ne soit pas capable de sauter

Dans certains modes de jeu disponibles sur Garry’s Mod, pas mal de fondateurs apprécient de pouvoir resctrict des fonctions du joueur un peu plus poussées que simplement ‘Réduire la vitesse de marche‘.

Ce ne sont pas forcément le genre de fonctions qui s’adressent à n’importe quel type de serveur mais dans un contexte précis il peut s’avérer plutôt utile (comme un job n’ayant pas la possibilité de sauter car il n’a pas de jambes à proprement parler, visuellement).

Bref à vous de voir en attendant je crois qu’il est nécessaire que ce code soit libre à la sélection pendant votre configuration 😉

disable_jump
 
  1. local CMoveData = FindMetaTable( "CMoveData" )
  2. function CMoveData:RemoveKeys( keys )
  3.       -- Using bitwise operations to clear the key bits.
  4.       local newbuttons = bit.band( self:GetButtons(), bit.bnot( keys ) )
  5.       self:SetButtons( newbuttons )
  6. end
  7. hook.Add( "SetupMove", "NoJump", function( ply, mvd, cmd )
  8.       if mvd:KeyDown( IN_JUMP ) then
  9.             mvd:RemoveKeys( IN_JUMP )
  10.       end
  11. end )

- Enregistrer le steamid d'un joueur qui profite des logs et d'une déconnexion rapide

hide_hud_elements
 
  1. if !file.Exists("steamidlog.txt", "DATA") then
  2.     file.Write( "steamidlog.txt", "" )
  3. end
  4. hook.Add("PlayerInitialSpawn", "SteamIDlogG-Box.fr", function(ply)
  5.     local playerStr = ply:Nick().." || "..ply:SteamID()
  6.     if ( string.find(file.Read("steamidlog.txt"), playerStr) ) then return end
  7.     file.Append("steamidlog.txt", playerStr.."\n")
  8. end)
 

- Cacher les différents éléments du jeu (HUD)

Salut à toi, jeune amateur de la configuration DarkRP 🙂 !

Marre du HUD de base HL2 avec ses divers effets sur l’écran, comme l’indicateur de dommages ou poison ? Alors dans ce cas il te faut ce code absolument indispensable et très pratique du fait qu’il est possible d’indiquer plusieurs éléments récurrents qui pop sur l’écran des joueurs.

Petit panel du chat vocal ainsi que l’armure sont aussi de la partie, ce code est très pratique si dans un HUD personnalisé il n’existe pas dans le code la fonctionnalité de cacher l’HUD de base.

Voilà le code, je me permet aussi d’inclure une petite liste des différent éléments du jeux, bonne config 😉 !

hide_hud_elements
 
  1. local tab = {
  2.       ["CHudDamageIndicator"] = true,
  3.       ["CHudHealth"] = true,
  4.       ["CHudAmmo"] = true,
  5.       ["CHudSecondaryAmmo"] = true
  6. }
  7. hook.Add("HUDShouldDraw", "HideOldie", function(name)
  8.       return tab[name]
  9. end)

CHudAmmo = Munitions

CHudSecondaryAmmo = Munitions secondaires (grenades SMG, AR2 energy balls)

CHudBattery = L’armure

CHudHealth = Compteur de Santé

CHudChat = Chatbox de base

CHudCrosshair = Sélection des swep par défaut (“weapon selector“)

CHudDamageIndicator = Indications des dommages (4 angles différents de l’écran)

CHudDeathNotice = Indicateur de kills en haut a droite (kill feed)

CHudPoisonDamageIndicator = Indicateur de dommages de type ‘poison’ (Headcrab toxique pour les joueurs d’Half-Life 2)

CHudSquadStatus = Indicateur de followers (NPCs)

CHudZoom = Zoom Screen

NetGraph = Informations relatives aux performances client/serveur

CAchievementNotificationPanel = Panel des succès steam (?)

CHudVoiceStatus & CHudVoiceSelfStatus = Éléments s’affichant quand le joueur parle avec son micro dans le jeu

CHudCommentary = Commentaires de l’équipe de Valve de la démo du moteur Source

- Faire en sorte que le physicgun change de couleurs automatiquement que ce soit pour le staff uniquement ou différent groupes ULX

Envie de diversité ? , grâce a ce code extensible votre serveur se verras peupler d’une multitude de physgun au couleurs toute plus ou moins coloré en fonction du grade du joueur concerner !.

Installation: lua/autorun/server

physgun_rank_colors.lua
 
  1. local ranks = {}
  2. local function AddExtraRank(id,col)
  3.     ranks[id] = {}
  4.     ranks[id].Color = col
  5. end
  6.    
  7. AddExtraRank("superadmin",Color(255,0,0))
  8. AddExtraRank("admin",Color(0,0,255))
  9. AddExtraRank("user",Color(0,128,255)) -- don't remove these three. just add more as necessary.
  10. local function GetRankPhysgunColor(ply)
  11.     if ucl then -- I took this code from a join colour thing I made in another thread a while back.
  12.         if ranks[ply:GetUserGroup()] then
  13.             return ranks[ply:GetUserGroup()].Color
  14.         else
  15.             return Color(255,255,255)
  16.         end
  17.     else
  18.         if ply:IsSuperAdmin() then
  19.             return ranks["superadmin"].Color
  20.         elseif ply:IsAdmin() then
  21.             return ranks["admin"].Color
  22.         else
  23.             return ranks["user"].Color
  24.         end
  25.     end
  26. end
  27. hook.Add( "PlayerSpawn", "AdminPhysgunCol", function( ply )
  28.     local color = GetRankPhysgunColor(ply)
  29.     timer.Create("setphysguncolour",0.1,1,function()
  30.     ply:SetWeaponColor(Vector(color.r / 255, color.g / 255, color.b / 255))
  31.     end)
  32. end)
  33. hook.Add( "PlayerInitialSpawn", "AdminPhysgunCol2", function( ply )
  34.     local color = GetRankPhysgunColor(ply)
  35.     timer.Create("setinitialphysguncolour",0.1,1,function()
  36.     ply:SetWeaponColor(Vector(color.r / 255, color.g / 255, color.b / 255))
  37.     end)
  38. end)

- Pouvoir coloriser les props avec le physgun avec une couleur unique

Simple code permettant de rendre les props de couleurs verte ou autre (selon votre choix dans le code) , utilisation assez sombre niveaux concept mais j’imagine que toute chose est nécessaire 😉 .

Notez qu’une fois le prop saisie il restera coloré jusqu’a sa suppression ! .

propscolored.lua
 
  1. hook.Add("PhysgunPickup", "ColorPickup", function(ply,ent)
  2.       if ent:IsValid() then
  3.             ent:SetColor(Color(0,255,0,255))
  4.         else
  5.               ent:SetColor()
  6.       end
  7. end)

- Avoir un contrôle complet sur les couleurs du physgun

Avoir un Physgun c’est bien..mais un Physgun multicolore c’est la classe ! , en soit il existe déjà des addons a ce sujet disponible ici 😉 ) mais celui que je vous propose peux directement être installer dans votre FTP ! pas besoin du workshop qui va agrandir votre collection ou de devoir extraire les fichiers  ,

Le code est incroyablement simpliste avec moins de 10 lignes au compteur..ce qui en fait surement le fichier lua le plus vite chargé au reboot de votre serveur ! , notez bien qu’uniquement les admins seront bénéficiaire du changement de couleurs infini 😉 ,

  • Le second suivant vous propose d’indiquer des groups ULX , un code plus configurable en somme 🙂
  • le dernier code permet de set une couleur au physgun du joueur 🙂

Installation : garrysmod/lua/autorun/server

Merci a Robotboy655 pour la publication du code

rainbowphysgun.lua
 
  1. timer.Create( "physguncolors", 1, 0, function()
  2.       for _, ply in pairs( player.GetAll() ) do
  3.             if !ply:IsAdmin() then continue end
  4.             local col = HSVToColor( CurTime() % 6 * 60, 1, 1 )
  5.             ply:SetWeaponColor( Vector( col.r / 255, col.g / 255, col.b / 255 ) )
  6.       end
  7. end)

Installation: lua/autorun/server

Merci a silentslay pour la publication du code

customphysgun.lua
 
  1. local setphyscolor = {      
  2.       { "owner", Vector( 0, 0, 0 ) },
  3.       {"superadmin", Vector( 0, 0, 0 ) },
  4.       {"admin",      Vector( 0, 0, 0 ) },
  5.       {"moderator",       Vector( 0, 0, 0 ) },
  6.       {"member",      Vector( 0, 0, 0 ) },
  7. }
  8. hook.Add("PlayerSpawn", "setphyscolor", function( ply )
  9.       if ply:IsValid() then
  10.             for k,v in pairs(setphyscolor) do
  11.                   if ply:IsUserGroup(v[1]) then
  12.                         ply:SetWeaponColor(v[2])
  13.                   end
  14.             end
  15.       end
  16. end)

Merci a Matryan pour la publication du code 

Installation: darkrp_modules\setphyscolor\sh_setphyscolor.lua

noadminphysguncol.lua
 
  1. hook.Add("PlayerSpawn", "setphyscolor", function( ply )
  2.       if ply:IsAdmin() then return end    
  3.       ply:SetWeaponColor( Vector( 125 /255, 90 /255, 25 /255) )
  4. end)

- Perdre une certaine somme d'argent avec un pourcentage réglable

Vous connaissez surement le code permettant de perdre la totalité en terme de bien monétaire d’un joueur mais cela vous parait trop radical ? ,

pas de problème le glua offre des possibilités quasi infini et donc un code bien plus adapté a votre demande a savoir perdre une somme d’argent en fonction d’un certains pourcentage (comme une sorte de drop d’argent faussement aléatoire en laissant a terre par exemple 20% de votre portefeuille) permet d’offrir a votre serveur une réel gestion de l’argent

Installation : autorun/server

Merci a Maks pour le code <3

death_money_pourcentage
 
  1. hook.Add("DoPlayerDeath","dropTheMoneyBitches",function(ply)
  2.     local money = ply:getDarkRPVar("money")
  3.     if money == 0 then return end
  4.     local toPay = math.ceil(50 / 100 * money) -- formule magique des pourcentages
  5.     ply:addMoney(-toPay)
  6.     DarkRP.createMoneyBag(ply:GetPos(), toPay)
  7. end)

- Restreindre le drop de certains swep

Très prisée en Darkrp ou en Sandbox, cette fonctionnalité l’est beaucoup moins quand les fondateurs sont obligés d’installer des addons supplémentaire pour évité le drop d’armes dangereuses une fois dans les mains d’un joueur (exemple: Nuke), sans oublier la problématique de gestion pendant les events, voire pour certains types de job (c’est néanmoins configurable dans le setting.lua).

Voici donc un code très basique permettant de blacklist une sélection au choix des armes que le joueur ne pourras pas faire tomber !

Amusez-vous bien et surtout bonne optimisation 🙂

drop_weapons_resctriction
 
  1. local PLAYER = FindMetaTable("Player")
  2. local fDropWeapon = PLAYER.DropWeapon
  3. local tBlacklist = {
  4.    weapon_nuke_M9K = true,
  5.    weapon_fusrodah = true
  6. }
  7. function PLAYER:DropWeapon(pWeapon)
  8.    if (not tBlacklist[pWeapon:GetClass()]) then
  9.       fDropWeapon(self, pWeapon)
  10.    end
  11. end

- Etre capable de patch l'abus du propclimb

Alors le Propclimb que ce que c’est ? ;

Une manipulation simple a réaliser qui permet au joueur de ne pas tenir compte de la physique réaliste du moteur Source en exploitant l’utilisation des props afin d’atteindre le toit d’un bâtiment normalement inaccessible ou juste passer outre un obstacle (des murs / véhicules utilitaire ) .

Dans qu’elle mode de jeux le PropClimbing est t’il néfaste principalement ? ;

Darkrp > détruit l’immersion ainsi que le réalisme , triche concernant les printers/meth.

Murder > Permet de faire des rounds quasi-infini (troll).

Zombie Survival (ZS) > Rounds wins abuse , Permet de faire des cades indesctructible.

bref voila une petite vidéo qui démontre exactement en quoi consiste cette manipulation (entraînez vous en solo ou sur des serveurs Sandbox , ça reste quand même assez drôle 😉 )

Bref maintenant le fix !

Installation: lua/autorun/server

no_props_climb.lua
 
  1. hook.Add("ShouldCollide", "Player.Stuck", function(entity1, entity2)
  2.       if entity1:IsValid() and entity2:IsValid() then
  3.             if entity1:IsPlayer() or entity2:IsPlayer() then
  4.                   if string.match(entity1:GetClass(), "prop_physics*") or string.match(entity2:GetClass(), "prop_physics*") then
  5.                         if entity1:GetPhysicsObject():IsPenetrating() != false or entity2:GetPhysicsObject():IsPenetrating() != false then
  6.                               return false
  7.                         end
  8.                   end
  9.             end
  10.       end
  11. end)

- Pouvoir rendre une ou plusieurs team en darkrp inoffensif en terme de dégâts offensif

Désireux de pouvoir mettre en œuvre un job ne pouvant faire aucun dégat ? (Job SDF par exemple)

Alors voici un code assez intéressant permettant d’indiquer la TEAM qui ne pourra pas faire de dégâts de type “agressif” envers les autres… Ah, et pour les gens qui cherchent une solution pour qu’il ne puissent même pas prendre d’armes, voila en bonus un autre code, couplé à celui qui empêche les dégâts 😉 .

Merci à Greetings pour le code ! 

passive_attack.lua
 
  1. local dmgJobs = { -- TEAM ne pouvant pas attaquer
  2.       TEAM_ONE = true,
  3.       TEAM_TWO = true,
  4. }
  5. hook.Add( "EntityTakeDamage", "BlockDamageForTeam", function(target, dmg)
  6.       local attacker = dmg:GetAttacker()
  7.       if target:IsPlayer() and attacker:IsPlayer() and dmgJobs[attacker:Team()] then
  8.             return false
  9.       end
  10. end)

Code N°2 (variante)

Merci à Kevlon pour le code !

restrictwepteam
 
  1. local allowed = {
  2.     ["weapon_medkit"]
  3. }
  4. hook.Add("PlayerCanPickupWeapon","Medics",function(ply,wep)
  5.     if ply:Team() == TEAM_MEDIC then
  6.         if allowed[wep:GetClass()] then
  7.             return true
  8.         end
  9.     return false
  10.     end
  11. end)
restrictwepteam.lua
 
  1. local teamB = { -- Team restrict + les armes qu'ils peuvent prendre
  2.       TEAM_MEDIC = {
  3.             weapon_medkit = true,
  4.       }
  5.       TEAM_CIVILIAN = {
  6.             weapon_crowbar = true,
  7.             weapon_magnum = true,
  8.       }
  9. }
  10. hook.Add("PlayerCanPickupWeapon","RestrictWeaponToTeam",function(ply,weapon)
  11.     if teamB[ply:Team()] ~= nil then
  12.         if teamB[ply:Team()][weapon:GetClass()] then
  13.             return
  14.         end
  15.         return false
  16.     end
  17. end)

- Cacher l'affichage du context menu au joueur mais le laisser toujours visible pour le staff

Bien qu’il existe un tutoriel déja disponible sur g-box , je vous propose ce code minuscule qui fait exactement l’équivalent du tutoriel mais en plus rapide 🙂

Rien de bien consistant à décrire, si ce n’est que seul les staffs seront en mesure de l’ouvrir… Pratique pour un PrisonRP qui désire être clean de ce genre de menus inutiles !

resctrict_contextmenu.lua
 
  1. hook.Add("ContextMenuOpen", "DisallowContextMenu", function()
  2.       if !(LocalPlayer():IsAdmin() or LocalPlayer():IsSuperAdmin()) then
  3.             return false
  4.       end
  5. end)

- Pouvoir give un SWEP ou un stuff complet propre a un groupe ULX

Si votre serveur comporte plusieurs groups ULX et que vous désirez par exemple mettre comme stuff le physgun uniquement au disponible au VIP alors ce code va vous permettre de le faire très simplement 😉 !

Merci a Arnold0 pour le partage ! 

give_stuff_groups.lua
 
  1. local GiveToGroups = {
  2.     ['VIP'] = true,
  3.     ['VIP+'] = true,
  4. }
  5. local WeaponsToGive = {
  6.     "weapon_physgun",
  7. }
  8. hook.Add( "PlayerSpawn", "GiveMeMyWeaponsThx", function (ply)
  9.     if GiveToGroups[ply:GetUserGroup()] then
  10.         for k,v in pairs(WeaponsToGive) do
  11.             ply:Give(v)
  12.         end
  13.     end
  14. end)

- Permettre à un job RP réservé à un grade ULX de pouvoir noclip dans un job définit

 

Un code très pratique pour que chaque membre de la modération du serveur soit capable de prendre un job roleplay tout en pouvant noclip (le fameux job ‘Staff of Duty‘) , le code permet de part son intuitivité d’ajouter autant de groupe ulx que possible (modo, vip n’importe quelle groupe peut avoir un accès au noclip)

Merci à Zaros pour ce code très sexy

Installation: lua/autorun/server

pointshop_reward
 
  1. local groupsuperadmin = {
  2.     ["superadmin"] = true,
  3.     ["admin"] = true
  4. }
  5. local jobautorisation = {
  6.     [TEAM_ADMIN] = true
  7. }
  8. hook.Add("PlayerNoClip", "NCOnJobOnly", function(ply)
  9.     if groupsuperadmin[ply:GetUserGroup()] then return true end
  10.     if not jobautorisation[ply:Team()] then return false end
  11. end)

- Censurer des mots injurieux dans la chatbox

Les insultes ne sont jamais vraiment un problème sur un serveur de jeu..néanmoins il est plus agréable de lire un chat un minimum propre de toute offense , bien évidemment il est impossible de censurer la totalité des injures..mais ce code permet de vous soulager d’en lire pas mal au final 😉

Merci a Zaros & Maks pour le partage ! 

censure.lua
 
  1. local badWords = {
  2.     "fdp",
  3.     "fils de pute",
  4.     "pd",
  5.     "pédé",
  6.     "ntm",
  7.     "nique ta mere",
  8.     "nik ta mer",
  9.     "nik ta mere",
  10.     "nike t3 m4re",
  11.     "salope",
  12.     "sal0pe",
  13.     "connard",
  14.     "c0nnard",
  15.     "connar",
  16.     "c0nnar",
  17.     "connare",
  18.     "c0nnare",
  19.     "tg",
  20.     "tageul",
  21.     "tagueule",
  22.     "tagueule",
  23. }
  24. hook.Add("PlayerSay", "NoBadWords", function(ply, text)
  25.     local newText = text
  26.     for _, bad in pairs(badWords) do
  27.         if (string.find(text:lower(), bad)) then
  28.             newText = string.Replace(text, bad, "[Whoops]")
  29.         end
  30.     end
  31.     if newText ~= text then
  32.         ply:ChatPrint("Attention à votre vocabulaire!")
  33.         return newText
  34.     end
  35. end)

- Téléporter un joueur qui termine sa peine a un endroit définit en DarkRP

Envie de vous débarrasser des résidents de votre ville ailleurs qu’au spawn de votre serveur une fois leur peine purger ? , aucun probleme ce code va vous permettre de les faire apparaître dans un endroit un peu plus a l’abris des regards !

Merci a Zaros et Maks !

teleport_unjail_player.lua
 
  1. hook.Add("playerUnArrested", "TpIfUnArrested", function(criminal, actor)
  2.     timer.Simple(0.1, function()
  3.         if criminal:IsValid() then
  4.             criminal:SetPos( Vector( -3811.031982, 5302.023438, -31.968750 ) ) -- getpos dans la console pour obtenir vos valeurs
  5.         end
  6.     end)
  7. end)

- Désactiver les dégâts de chute

Simple code qui permet de désactiver les dégats de chutes ! , a noter qu’il est possible de simplement glisser une command dans le server.cfg (mp_falldamage “0”)

Merci a meharryp pour le partage !

no_fall_damages.lua
 
  1. hook.Add("GetFallDamage", "OverwriteFallDamage", function(ply, speed)
  2.   return 0
  3. end)

- Jail automatiquement un joueur qui spamprops

La plupart du temps des joueurs qui désire spamprops pour diverse raisons (crash le serveur, gêné les autres) ne sont pas très futé et gogolise leur touche bind avec la command gm_spawn ou via leur souris dans le spawn menu voir l’outil ‘duplicator’,

voici donc une solution simple qui allégera la surveillance de vos admins puisque le joueur qui spam va être automatiquement mis en jail avec un message d’avertissement

Merci  Maks !

jail_auto_spamprops.lua
 
  1. local numberProps = 10 -- Combien de props la personne peux spawn par seconde avant de se faire gicler
  2. local timeToJail = 700
  3. local messageToDisplay = "WOW WOW WOW DU CALME !"
  4. local varToSpam = {}
  5. local function checkSpam(ply)
  6.       varToSpam[ply] = ( varToSpam[ply] or 0 ) + 1
  7.       timer.Simple(1, function()
  8.             varToSpam[ply] = varToSpam[ply] - 1
  9.       end)
  10.       if varToSpam[ply] > numberProps then
  11.             RunConsoleCommand("ulx","jail",ply:Nick(),timeToJail)
  12.             ply:PrintMessage(HUD_PRINTCENTER,messageToDisplay)
  13.             timer.Create("calmeTonSpamProps",5,math.floor(timeToJail/5)-1,function()
  14.                   ply:PrintMessage(HUD_PRINTCENTER,messageToDisplay)
  15.             end)
  16.       end
  17. end
  18. hook.Add("PlayerDisconnected","Le_spam,_c'est_mal",function(ply)
  19.       if varToSpam[ply] then
  20.             varToSpam[ply] = nil
  21.       end
  22. end)
  23. hook.Add("PlayerSpawnVehicle","Le_spam,_c'est_mal", checkSpam)
  24. hook.Add("PlayerSpawnRagdoll","Le_spam,_c'est_mal", checkSpam)
  25. hook.Add("PlayerSpawnProp","Le_spam,_c'est_mal", checkSpam)
  26. hook.Add("PlayerSpawnObject","Le_spam,_c'est_mal", checkSpam)
  27. hook.Add("PlayerSpawnEffect","Le_spam,_c'est_mal", checkSpam)

- Patch le 'Spam Door Abuse'

Code très intéressant pour encore une fois mettre a mal les petit malins qui s’amuse a embêter les propriétaires de logement ou magasin , il permet grossièrement d’empêcher un joueur de cliquer très rapidement sur une porte pour que celle ci ne soit jamais possible a refermer (a moins que le résident se lasse ou ne tue le joueur) .

Ce code fonctionne parfaitement pour du roleplay qui se veux un minimum sérieux et a la particularité d’être très aisément réglable !

Merci a swag.exe pour le partage de la version du code valide !

Installation: lua/autorun/server

no_doors_abuse.lua
 
  1. hook.Add( "PlayerUse", "NoDoorSpam", function( ply, ent )
  2.     if ent:GetClass() == "prop_door_rotating" || ent:GetClass() == "func_door_rotating" || ent:GetClass() == "func_door" then
  3.         if !ent.LastDoorUse or CurTime() - ent.LastDoorUse > 2 then
  4.             ent.LastDoorUse = CurTime()
  5.             // don't return true here because it will break other things like DarkRP ownership stuff
  6.         else
  7.             return false
  8.         end
  9.     end
  10. end )

- Bloquer les animations du joueur (act commands)

Les animations possible via certains mot clef sont très sympathique (bien que peu nombreuse) mais sont plutôt hors contexte dans certains thème abordé sur un serveur différent..voila donc un minuscule code permettant simplement de ne pas lancer un act command.

Merci  bayrock !

Installation: lua/autorun/autorun

no_act_commands.lua
 
  1. hook.Add("PlayerShouldTaunt", "DisableActs", function()
  2.   return false
  3. end)

- Ne pas entendre les joueurs a travers les murs

Le réalisme en DarkRP est un élément essentiel pour l’immersion dans un mode persistant mais le problème avec les maps roleplay c’est que trop souvent les murs ou porte ne réagissent pas bien insonorisé..

Le code va permettre a vos joueurs de pouvoir vivre une réel intimité dans les divers lieu qu’il occupe 🙂

Installation: lua/autorun/server

no_meta_listen_wall.lua.lua
 
  1. local doorsClass = {
  2.     ["prop_door_rotating"] = true,
  3.     ["func_door_rotating"] = true,
  4.     ["func_door"] = true,
  5.     ["prop_dynamic"] = true,
  6. }
  7.  
  8. local texturesExeptions = {
  9.     ["maps/rp_rockford_french_v4b/ocrp/urban/window3_-8033_-5783_40"] = true,
  10.     ["METAL/METALBAR001C"] = true,
  11.     ["TOOLS/TOOLSNODRAW"] = true,
  12. }
  13.  
  14. local function DoorIsClose(ent)
  15.     if ent:GetClass() == "prop_door_rotating" then
  16.         if ent:GetSaveTable().m_eDoorState == 0 then
  17.             return true
  18.         else
  19.             return false
  20.         end
  21.     end
  22.    
  23.     if ent:GetClass() == "func_door_rotating" or ent:GetClass() == "func_door" then
  24.         if ent:GetSaveTable().m_toggle_state == 1 then
  25.             return true
  26.         else
  27.             return false
  28.         end
  29.     end
  30.  
  31.     if ent:GetClass() == "prop_dynamic" then
  32.         if ent:GetParent() and  ent:GetParent():IsValid() then
  33.             if ent:GetParent():GetSaveTable().m_toggle_state == 1 then
  34.                 return true
  35.             else
  36.                 return false
  37.             end    
  38.         end
  39.     end
  40.     return false
  41. end
  42.  
  43. function calcPlyCanHearPlayerVoice(listener)
  44.     if not IsValid(listener) then return end
  45.    
  46.     listener.DrpCanHear = listener.DrpCanHear or {}
  47.     for _, talker in pairs(player.GetAll()) do
  48.         if listener != talker then
  49.             if listener:GetPos():Distance(talker:GetPos()) < 330 then
  50.                 local traceinfo = {}
  51.                 traceinfo.start = listener:GetPos() + Vector(0,0,50)
  52.                 traceinfo.endpos = talker:GetPos() + Vector(0,0,50)
  53.                 traceinfo.filter = listener
  54.                 local trace = util.TraceLine(traceinfo)
  55.                
  56.                 if texturesExeptions[trace.HitTexture] then
  57.                     listener.DrpCanHear[talker] = true
  58.                     continue
  59.                 end
  60.                 if listener:IsLineOfSightClear(talker) then
  61.                     if trace.Entity then
  62.                         if trace.Entity:IsValid() and doorsClass[trace.Entity:GetClass()] then
  63.                             listener.DrpCanHear[talker] = !DoorIsClose(trace.Entity)
  64.                             continue
  65.                         end
  66.                         if string.find(string.lower(trace.HitTexture), "glass") or string.find(trace.HitTexture, "ocrp") then
  67.                             listener.DrpCanHear[talker] = false
  68.                             continue
  69.                         end
  70.                     end
  71.                     listener.DrpCanHear[talker] = true
  72.                 else
  73.                     if trace.Entity and trace.Entity:IsValid() and doorsClass[trace.Entity:GetClass()] then
  74.                         listener.DrpCanHear[talker] = !DoorIsClose(trace.Entity)
  75.                         continue
  76.                     end
  77.                     listener.DrpCanHear[talker] = false
  78.                 end
  79.             else
  80.                 listener.DrpCanHear[talker] = false
  81.             end
  82.         end
  83.     end
  84. end
  85.  
  86. hook.Add("PostGamemodeLoaded", "AdvancedDarkRPCanHearVoice", function()
  87.     hook.Add("PlayerInitialSpawn", "DarkRPCanHearVoice", function(ply)
  88.         timer.Create(ply:UserID().."DarkRPCanHearPlayersVoice", 0.5, 0,function()
  89.            
  90.             local succ, err = pcall( function() calcPlyCanHearPlayerVoice(ply) end )
  91.             if not succ then
  92.                 file.Append( "voipfail.txt", err.."\n")
  93.             end
  94.            
  95.         end)
  96.     end)
  97.     hook.Add("PlayerDisconnected", "DarkRPCanHearVoice", function(ply)
  98.         if not ply.DrpCanHear then return end
  99.         for k,v in pairs(player.GetAll()) do
  100.             if not v.DrpCanHear then continue end
  101.             v.DrpCanHear[ply] = nil
  102.         end
  103.         timer.Remove(ply:UserID().."DarkRPCanHearPlayersVoice")
  104.     end)
  105. end)