Objets Player et Entity

Les objets renvoyés par l'API et passés aux hooks. On appelle leurs méthodes avec : (par exemple ply:Name()).

Objets périmésUn objet peut devenir invalide (joueur parti, prop supprimé). Les méthodes ne plantent pas : elles ne font rien ou renvoient une valeur neutre. Vérifie avec :IsValid() dans le code différé (minuteries).

Player

MéthodeRenvoieDescription
ply:UserID()nombreIdentifiant réseau du joueur (1 = l'hôte).
ply:IsValid()booléenLe joueur est-il toujours sur la carte ?
ply:Name()textePseudo (pseudo Steam sur les parties Steam).
ply:SteamID()texteIdentifiant Steam 64 bits en texte, "0" sans Steam.
ply:Health()nombreSanté actuelle.
ply:SetHealth(n)—Règle la santé (maximum 999). Une valeur ≤ 0 tue le joueur.
ply:Armor()nombreArmure actuelle.
ply:SetArmor(n)—Règle l'armure (0 à 255). L'armure absorbe 80 % des dégâts.
ply:Alive()booléenVivant (pas en ragdoll) ?
ply:Kill()—Tue le joueur.
ply:CreateRagdoll()—Serveur : le corps du joueur tombe en ragdoll chez tous, comme à la mort, sans mourir ; il se relève à sa prochaine réapparition (ply:Spawn()). Sans effet sur un joueur mort. Pour un corps seul, voir ents.Create("prop_ragdoll").
ply:GetPos()VectorPosition des pieds.
ply:SetPos(v)—Téléporte le joueur et annule sa vitesse.
ply:ChatPrint(texte)—Message système visible par ce joueur seulement.
ply:SetWalkSpeed(v)—Vitesse de marche en m/s (défaut 5,08).
ply:SetRunSpeed(v)—Vitesse de course (Maj) en m/s (défaut 10,16).
ply:SetSlowWalkSpeed(v)—Vitesse de marche lente (Alt, prioritaire sur la course) en m/s (défaut 1,32, un vrai pas de marche, pour le roleplay).
ply:SetJumpPower(v)—Vitesse verticale du saut en m/s (défaut 5,08, soit environ 85 cm de saut). En sautant accroupi (Espace + Ctrl), 1,25 fois plus : environ 1,55 fois plus haut (pas avec les déplacements réalistes sv_rp_movement).
ply:Nick()texteComme Name().
ply:Ping()nombrePing en millisecondes.
ply:IsPlayer()booléentrue.
ply:Team() / ply:SetTeam(n)nombre / —Équipe (0 = aucune). Voir Équipes.
ply:Frags() / SetFrags(n) / AddFrags(n)nombre / —Points du joueur (colonne Points du tableau des scores).
ply:Deaths() / SetDeaths(n) / AddDeaths(n)nombre / —Morts (comptées automatiquement).
ply:Give(arme)—Donne une arme et un plein de munitions (s'il l'a déjà : recharge ses munitions). "hands" donne l'arme « Mains » : rien en main, les bras au repos (emplacement 1, ne se jette pas). Voir Armes.
ply:StripWeapon(arme) / ply:StripWeapons()—Retire une arme / toutes. Sans arme, le joueur a les mains vides.
ply:HasWeapon(arme) / ply:GetWeapons()booléen / tableSes armes.
ply:GetActiveWeapon()texteArme en main ("pistol"…, "hands" pour l'arme « Mains », ou l'id d'une arme d'addon), "" s'il n'a plus aucune arme.
ply:SelectWeapon(id)—Serveur : le joueur prend l'arme (sans le hook PlayerSwitchWeapon). Client : seulement LocalPlayer(), en passant par le hook.
ply:DropWeapon(id)booléenServeur : l'arme (par défaut celle en main) tombe devant le joueur avec ses munitions. Voir Armes au sol.
ply:GetWeapon(classe) / ply:GetActiveWeaponTable()arme ou nilL'objet d'une arme Lua du joueur / de celle en main.
ply:GetAmmo(type) / ply:GetClip(id)nombreRéserve d'un type de munition, balles dans le chargeur d'une arme d'addon. Serveur : ply:SetAmmo(n, type), ply:GiveAmmo(n, type). Voir Armes personnalisées.
ply:RemoveAllAmmo() / ply:StripAmmo()—Serveur : vide toutes les réserves de munitions du joueur (armes du jeu, armes de l'éditeur et types des armes Lua). Les balles déjà dans les chargeurs restent, comme dans GMod. StripAmmo est un autre nom de la même fonction.
ply:SetNoclipAllowed(b)—Autorise ou interdit le noclip (voir GM:PlayerNoClip).
ply:Spawn()—Fait réapparaître le joueur à un point d'apparition.
ply:GetEyeTrace()tableCe que le joueur vise : Hit, HitPos, HitNormal, Entity, HitWorld… Voir Ce que vise un joueur.
ply:EyePos() / ply:GetAimVector()VectorPosition des yeux / direction de la visée.
ent:EmitSound(chemin, niveau, hauteur, volume)—Joue un son depuis le joueur ou le prop (serveur : tous l'entendent). Voir Sons et lumières.
ply:InVehicle() / ply:GetVehicle() / ply:GetVehicleSeat()booléen / Entity / nombreVéhicule et place (1 = conducteur, 0 = à pied). Serveur : ply:EnterVehicle(veh, place), ply:ExitVehicle(). Voir Véhicules.
ply:IsKeyDown(touche)booléenLa touche (KEY_*, MOUSE_*) est-elle tenue ? Serveur : pour chaque joueur ; client : seulement LocalPlayer(). Voir Touches et souris.
ply:IsAdmin() / ply:IsSuperAdmin()booléenLe joueur est-il admin (ou plus) / superadmin ? Aussi côté client.
ply:GetUserGroup()texteSon groupe ("user", "moderator"…). Voir Groupes et permissions.
ply:CPPIGetFriends()tableLes joueurs qu'il autorise sur ses props pour au moins une action (protection des props). Aussi côté client.
ply:HasPermission(nom)booléenA-t-il cette permission ("kick", "ban"…) ? Serveur.
ply:Kick(raison) / ply:Ban(minutes, raison)—Exclut / bannit (0 minute = définitif). Serveur.
ply:IPAddress()texteAdresse IP (vide via Steam). Serveur.
ply:GetNWInt(nom, défaut)…valeurVariables réseau du joueur (aussi Float, Bool, String, Vector) ; SetNW… côté serveur.

Côté client, seules les méthodes de lecture existent (Name, Health, Team, GetNW……) ; LocalPlayer() donne le joueur local.

concommand.Add("rapide", function(ply)
	ply:SetWalkSpeed(10)
	ply:SetRunSpeed(20)
	ply:ChatPrint("Mode rapide !")
end)
DéplacementChaque joueur simule son propre déplacement : SetPos et les réglages de vitesse lui sont envoyés par le réseau et prennent effet après un court délai (latence).

Vue, mouvement et apparence du joueur

Lecture (partagé)

MéthodeRenvoieDescription
ply:GetVelocity()VectorVitesse en m/s (exacte pour son propre joueur, estimée pour les autres).
ply:EyeAngles()AngleAngle de la vue (Vector(pitch, yaw, roll), voir Angles et vecteurs).
ply:GetAngles()AngleOrientation du corps (yaw seulement).
ply:GetForward(), GetRight(), GetUp()VectorDirections du corps.
ply:LocalToWorld(v) / ply:WorldToLocal(v)VectorConversion avec le repère des pieds, tourné avec le corps.
ply:IsOnGround(), ply:Crouching(), ply:IsSprinting()booléenAu sol, accroupi, en train de courir.
ply:GetMoveType()nombreType de déplacement (MOVETYPE_WALK, MOVETYPE_FLY…) imposé par SetMoveType ; sans type imposé, MOVETYPE_NOCLIP en noclip, sinon MOVETYPE_WALK.
ply:WaterLevel()nombre0 hors de l'eau, 1 les pieds, 2 la taille, 3 la tête sous l'eau.
ply:GetPlayerColor(), ply:GetPlayerModel(), ply:GetPlayerSkin()Color / texte / nombreCouleur du mannequin, modèle affiché à sa place (prop ou playermodel), skin du playermodel.
ply:GetBodygroup(groupe), ply:GetNumBodyGroups(), ply:GetBodyGroups()nombre / nombre / tableBodygroups du playermodel (à partir de 0) ; ply:SetBodygroup(groupe, option) côté serveur.
ply:GetMaxHealth(), ply:IsFrozen(), ply:GetNoDraw()nombre / booléenVie maximale, bloqué sur place, invisible.
ply:IsVR(), ply:GetVRHeadPos(), ply:GetVRHandPos(main)…booléen, Vector…Joueur en réalité virtuelle, casque et mains (monde). Voir Réalité virtuelle.
ply:FlashlightIsOn(), ply:CanUseFlashlight()booléenLampe torche allumée, autorisée (voir Lampe torche).
ply:KeyDown(IN_…)booléenUne action du jeu est-elle tenue ? Serveur : pour chaque joueur ; client : pour LocalPlayer().
ply:GetInfo(nom) / ply:GetInfoNum(nom, défaut)texte / nombreServeur : valeur d'une ConVar client « userinfo » du joueur ; client : sa propre ConVar client. Voir userinfo.

Les constantes IN_ATTACK, IN_ATTACK2, IN_JUMP, IN_DUCK, IN_FORWARD, IN_BACK, IN_MOVELEFT, IN_MOVERIGHT, IN_USE, IN_RELOAD, IN_SPEED (courir), IN_WALK (marcher lentement, Alt) et IN_SCORE (Tab) désignent des actions : elles suivent les touches choisies par le joueur dans Paramètres → Touches (contrairement aux codes KEY_*, qui sont des touches physiques). Les hooks KeyPress / KeyRelease les reçoivent.

Modification serveur

MéthodeDescription
ply:SetVelocity(v)Remplace la vitesse (sauts, propulsions ; 200 m/s au plus).
ply:SetEyeAngles(ang)Tourne la vue du joueur.
ply:SetPlayerColor(Color ou nil)Couleur du mannequin pour tous ; nil = couleur automatique.
ply:SetNick(nom)Change le pseudo (32 caractères) partout : chat, tableau des scores, au-dessus de la tête.
ply:SetPlayerModel(id ou nil, skin)Affiche un autre modèle à la place du mannequin, pour tous : un playermodel (avec son skin, sa hitbox et ses couleurs ; il remplace le choix du joueur dans Apparence tant qu'il est imposé) ou un prop. Un modèle humanoïde (squelette Mixamo, Unreal, Rigify, profil humanoïde de Godot) suit les animations et le ragdoll du mannequin ; un autre modèle est porté tel quel, à la taille d'un joueur. La collision et les dégâts restent ceux du joueur (au contraire de ply:SetModel, le déguisement en prop). Expérimental pour les humanoïdes (l'orientation dépend du modèle).
ply:Freeze(bool) (aussi ply:Lock() / ply:UnLock())Le joueur ne peut plus bouger ni sauter (il peut regarder autour).
ply:SetMoveType(MOVETYPE_…)Comment il bouge : MOVETYPE_NONE (immobile), MOVETYPE_WALK (normal, par défaut), MOVETYPE_FLY (vole en butant sur les murs), MOVETYPE_NOCLIP / MOVETYPE_OBSERVER (à travers les murs). Tant qu'un type est imposé, sa touche noclip est ignorée. Voir Type de déplacement.
ply:SetNoDraw(bool)Invisible pour les autres (modèle, déguisement, pseudo).
ply:SetMaxHealth(n)Vie à la réapparition et valeur de GetMaxHealth (1 à 999). SetHealth peut toujours monter à 999.
ply:SetUserGroup(groupe)Même effet que /setgroup (sauvé par SteamID) ; renvoie true si c'est fait. L'hôte d'une partie locale reste superadmin ; impossible sans Steam.
ply:Flashlight(bool), ply:AllowFlashlight(bool)Allume / éteint la lampe torche (sans passer par le hook) ; AllowFlashlight(false) désactive la touche et éteint la lampe.
-- Double saut : un deuxième appui sur Saut en l'air relance vers le haut.
local double = {}
hook.Add("KeyPress", "double_saut", function(ply, touche)
	if not SERVER or touche ~= IN_JUMP then return end
	local id = ply:UserID()
	if ply:IsOnGround() then double[id] = false return end
	if double[id] == false then
		double[id] = true
		local v = ply:GetVelocity()
		ply:SetVelocity(Vector(v.x, 6, v.z))
	end
end)

-- Couleur d'équipe et 150 points de vie.
hook.Add("PlayerSpawn", "monmode_apparence", function(ply)
	ply:SetPlayerColor(team.GetColor(ply:Team()))
	ply:SetMaxHealth(150)
	ply:SetHealth(150)
end)

Os, feu et pilotage

Les joueurs (comme les props et les PNJ) ont les méthodes d'os et de points d'attache : ply:LookupBone, GetBonePosition, GetBoneMatrix, ManipulateBoneScale…, ply:LookupAttachment("eyes"), GetAttachment. ent:SetupBones() (ou ent:InvalidateBoneCache()) recalcule tout de suite la pose des os : GetBonePosition tient alors compte d'un ManipulateBone* fait dans la même image. Côté serveur, ply:Ignite(durée, rayon) et ply:Extinguish() l'enflamment et l'éteignent ; ply:IsOnFire() des deux côtés. Voir Os, animations et effets.

ply:IsDrivingEntity(), ply:GetDrivingEntity() et ply:GetDrivingMode() (des deux côtés) disent si le joueur pilote une entité avec drive. ply:GetPData(clé, défaut), ply:SetPData(clé, valeur) et ply:RemovePData(clé) gardent des données par joueur d'une partie à l'autre.

Déplacement : CMoveData et CUserCmd

Les objets reçus par les hooks de déplacement (côté client, pour le joueur local). Unités : mètres, m/s, degrés ; boutons : bits IN_*. Un exemple complet (jetpack) est dans Déplacement du joueur.

CUserCmd (cmd)

Les commandes du tick, reçues par StartCommand(ply, cmd), CreateMove(cmd) et SetupMove(ply, mv, cmd). Les changements faits dans StartCommand et CreateMove passent dans mv.

MéthodeDescription
cmd:GetButtons(), cmd:SetButtons(bits)Actions tenues (bits IN_*).
cmd:KeyDown(IN_…)Cette action est-elle tenue ?
cmd:AddKey(IN_…), cmd:RemoveKey(IN_…), cmd:ClearButtons()Ajoute, retire une action ; les retire toutes.
cmd:GetForwardMove() / SetForwardMove(v)Vitesse voulue vers l'avant (m/s, négative en arrière).
cmd:GetSideMove() / SetSideMove(v)Vitesse voulue sur le côté (positive à droite).
cmd:GetUpMove() / SetUpMove(v)Vitesse verticale voulue (toujours 0 au départ, sans effet sur le jeu).
cmd:ClearMovement()Met les trois vitesses à 0 (le joueur ne marche plus).
cmd:GetViewAngles() / SetViewAngles(ang)Angles de la vue (Angle(pitch, yaw, 0)) ; les changer tourne la vue du joueur.
cmd:CommandNumber(), cmd:TickCount()Numéro du tick (augmente de 1 à chaque appel).
cmd:GetMouseX(), cmd:GetMouseY()Mouvement de la souris (pixels) depuis la commande précédente, quand la souris tourne la caméra. Côté client seulement (0 côté serveur). cmd:SetMouseX(n) / SetMouseY(n) changent la valeur lue par les hooks suivants du même tick.

CMoveData (mv)

L'état du déplacement, reçu par SetupMove(ply, mv, cmd), Move(ply, mv) et FinishMove(ply, mv).

MéthodeDescription
mv:GetVelocity() / SetVelocity(v)Vitesse du joueur (m/s). Une vitesse vers le haut le décolle du sol.
mv:GetOrigin() / SetOrigin(pos)Position des pieds ; la changer téléporte le joueur.
mv:GetButtons() / SetButtons(bits), mv:AddKey(IN_…)Actions tenues. Seul IN_JUMP agit : l'ajouter au sol fait sauter, l'enlever annule le saut.
mv:GetOldButtons()Actions tenues au tick précédent.
mv:KeyDown(IN_…), KeyWasDown, KeyPressed, KeyReleasedTenue maintenant ; tenue au tick précédent ; vient d'être appuyée ; vient d'être relâchée.
mv:GetForwardSpeed() / SetForwardSpeed(v), GetSideSpeed / SetSideSpeedVitesses voulues avant et côté (m/s), bornées à la vitesse max.
mv:GetUpSpeed() / SetUpSpeed(v)Vitesse verticale voulue (sans effet sur le jeu).
mv:GetMaxSpeed() / SetMaxSpeed(v) (aussi GetMaxClientSpeed / SetMaxClientSpeed)Vitesse max de ce tick (marche, course, accroupi compris).
mv:GetAngles() / SetAngles(ang) (aussi GetMoveAngles / SetMoveAngles)Angles de la vue. À lire seulement : pour tourner la vue, utilise cmd:SetViewAngles.

Taille et gestes du joueur

MéthodeCôtéDescription
ply:SetModelScale(échelle)serveurTaille du joueur pour tous, de 0,25 à 3 (1 = normale). Le mannequin (ou le playermodel, dont l'échelle propre se multiplie avec celle-ci), la capsule de collision, la hauteur des yeux (1re et 3e personne, distance de la caméra 3e personne), le pseudo au-dessus de la tête, les zones de tir (tête, corps, jambes) et la portée de E suivent. La vitesse et la hauteur de saut ne changent pas (SetWalkSpeed, SetJumpPower…). Gardée à la mort et à la réapparition, comme SetPlayerColor : remettez 1 vous-même.
ply:GetModelScale()partagéÉchelle donnée par SetModelScale (1 par défaut).
ply:PlayGesture(nom) → booléenserveur / clientJoue un geste du mannequin, vu par tous (le joueur passe en 3e personne le temps du geste, comme avec la roue d'emotes G). Serveur : sur n'importe quel joueur, sans passer par le hook. Client : seulement sur LocalPlayer(), en passant par le serveur et le hook PlayerStartGesture. Renvoie false si le nom est inconnu ou si le joueur est mort, dans un véhicule ou déguisé.
ply:StopGesture()serveur / clientArrête le geste en cours (client : LocalPlayer() seulement).
ply:GetGesture()partagéNom du geste en cours, ou "".
ply:GetGestures(), player.GetGestureList()partagéListe des noms de gestes disponibles.

Gestes disponibles : en boucle jusqu'à ce que le joueur bouge — "dance", "talk" (parler), "sit" (assis par terre), "fix" (réparer à genoux), "torch" (brandir une torche), "push" (pousser), "sit_talk" (discuter assis), "magic" (incantation) ; joués une fois puis arrêtés tout seuls — "pickup" (ramasser), "interact", "punch", "jab" (coups de poing), "cast" (lancer un sort), "swing" (coup d'épée). Les six premiers sont ceux de la roue d'emotes. Un geste s'arrête dès que le joueur se déplace, saute, passe en noclip ou meurt ; accroupi, dans l'eau ou en l'air, le joueur garde l'animation correspondante tant que dure la situation.

-- /danse pour tout le monde, et un géant pour l'équipe 2.
concommand.Add("danse", function(ply)
	for _, p in ipairs(player.GetAll()) do
		p:PlayGesture("dance")
	end
end)

hook.Add("PlayerSpawn", "monmode_taille", function(ply)
	ply:SetModelScale(ply:Team() == 2 and 1.5 or 1)
end)

Déguisement en prop et caméra

De quoi faire un mode « Prop Hunt » : les joueurs se déguisent en props, les chasseurs doivent les trouver.

MéthodeCôtéDescription
ply:SetModel(id ou ent)serveurDéguise le joueur en prop pour tout le monde. Avec un id ("builtin:barrel", "addon:…/models/…glb"), il prend le prop tel quel. Avec un prop de la map (ent), il copie aussi sa couleur, son matériau et son orientation. Le mannequin, ses animations et son arme disparaissent, et le joueur ne peut plus tirer. La collision devient une boîte de la taille du prop : les balles touchent la boîte, sans bonus à la tête. nil le rend humain à nouveau. Mort, il tombe en mannequin.
ply:GetModel()partagéLe prop du déguisement ("" pour le mannequin).
ply:SetNameTagVisible(bool)serveurAffiche ou cache le pseudo au-dessus de la tête pour les autres joueurs. Affiché, il ne se voit que de près (ConVar sv_nametag_distance, 10 m par défaut) et pas à travers les murs ni les props.
ply:SetThirdPerson(bool)serveurForce la 3e personne (true) ou la 1re (false) : la touche C ne change plus la vue. nil rend le choix au joueur.
ply:SetViewOffset(Vector)serveurPosition de l'œil depuis les pieds (ex. Vector(0, 0.5, 0)). Elle sert aussi au départ des tirs. nil remet la hauteur normale. Déguisé, l'œil est par défaut aux 85 % de la hauteur du prop.
ply:SetModelAngleLocked(bool)serveurLe prop garde son orientation actuelle au lieu de tourner avec la souris, pour rester aligné avec le décor. Le joueur peut toujours regarder autour de lui.
ply:Spectate(cible) / ply:UnSpectate()serveurMort, la caméra tourne autour du joueur cible (la souris tourne autour) au lieu de son propre corps. ply:GetSpectating() renvoie la cible.
ply:TakeDamage(montant, attaquant, cause)serveurInflige des dégâts en créditant attaquant : point (Frags) s'il tue, et PlayerDeath avec l'attaquant. Le hook PlayerShouldTakeDamage peut toujours refuser. cause est facultative.
-- Clic sur E en visant un prop : on se déguise en lui.
hook.Add("PlayerButtonDown", "prophunt_deguise", function(ply, touche)
	if SERVER and touche == KEY_E and ply:Team() == 1 then
		local tr = ply:GetEyeTrace()
		if IsValid(tr.Entity) and not tr.Entity:IsPlayer() then
			local mins, maxs = tr.Entity:GetModelBounds()
			local taille = maxs - mins
			if taille.y > 2.5 then ply:ChatPrint("Trop gros !") return end
			ply:SetModel(tr.Entity)
			ply:SetNameTagVisible(false)
			ply:SetThirdPerson(true)
			ply:SetHealth(math.floor(50 + taille.x * taille.y * taille.z * 100))
		end
	end
end)

-- Tirer sur un faux prop coûte de la vie au chasseur.
hook.Add("EntityTakeDamage", "prophunt_erreur", function(ent, attaquant, degats, arme)
	if IsValid(attaquant) and attaquant:Team() == 2 then
		attaquant:TakeDamage(5, attaquant, "a tiré sur le mauvais prop")
	end
end)

-- Les morts attendent la fin de la manche en regardant un survivant.
hook.Add("PlayerCanRespawn", "prophunt_manche", function(ply) return false end)
hook.Add("PlayerDeath", "prophunt_spectateur", function(ply)
	for _, autre in ipairs(player.GetAll()) do
		if autre:Alive() then ply:Spectate(autre) break end
	end
end)

Armes

Identifiants à utiliser avec ply:Give, ply:StripWeapon, ply:HasWeapon et GM:PlayerLoadout. Les armes à feu ont un chargeur et une réserve (rechargement : R ; le fusil à pompe se recharge cartouche par cartouche, donc plus il est vide, plus c'est long) ; ply:Give remplit les deux. T inspecte l'arme en main (touche modifiable dans Paramètres → Touches). Le serveur vérifie chaque tir (cadence, munitions, visée) et applique les dégâts : tête ×2, réglage serveur pvp et hook PlayerShouldTakeDamage. Les balles poussent aussi les props non figés. En véhicule, l'arme est rangée : impossible de tirer ou de recharger, et le serveur refuse ces tirs.

IdentifiantArmeToucheDégâtsChargeur / réserve
physgunPhysgun1——
toolgunToolgun2——
crowbarPied-de-biche (corps à corps, 2 m)325 par coup—
pistolPistolet (coup par coup)42012 / 72
shotgunFusil à pompe (8 plombs, perd de la puissance après 8 m)59 par plomb6 / 36
rifleFusil d'assaut (automatique)61330 / 150
-- Un mode « pistolet seulement ».
function GM:PlayerLoadout(ply)
	ply:Give("pistol")
end

hook.Add("PlayerButtonDown", "monmode_arme", function(ply, touche)
	if SERVER and touche == KEY_F2 then
		ply:ChatPrint("Arme en main : " .. ply:GetActiveWeapon())
	end
end)

Prop

Les props, gadgets et entités scriptées partagent ces méthodes (on les appelle aussi entités, ent). Les méthodes de modification n'existent que côté serveur.

Une entité scriptée lit aussi les champs de sa classe pour le bac à sable : ENT.Spawnable, ENT.AdminOnly, ENT.Category, ENT.DisableDuplicator, et les fonctions ENT:SpawnFunction, ENT:PreEntityCopy, ENT:PostEntityPaste (voir Menu de spawn et dupes).

MéthodeRenvoieDescription
prop:IsValid()booléenLe prop existe-t-il toujours ?
prop:GetModel()texteIdentifiant du prop ("builtin:crate"…).
prop:GetModelBounds()Vector, VectorCoins minimum et maximum du modèle, dans l'espace du prop (taille = maxs - mins).
prop:GetPos()VectorPosition du centre du prop.
prop:SetPos(v)—Téléporte le prop (garde sa rotation, annule sa vitesse).
prop:GetColor()ColorTeinte actuelle, composantes de 0 à 1.
prop:SetColor(c)—Teinte le prop (utilise Color(r, g, b) en 0–255).
prop:IsFrozen()booléenFigé (immobile) ?
prop:SetFrozen(b)—Fige ou libère le prop.
prop:GetMass()nombreMasse en kg.
prop:SetMass(kg)—Masse en kg (0,1 à 50 000).
prop:ApplyForce(v)—Donne une impulsion au centre du prop (en N·s : une impulsion de 10 sur un prop de 10 kg ajoute 1 m/s).
prop:GetOwner()Player ou nilLe joueur qui l'a créé (nil pour les props créés par Lua). Connu aussi des clients.
ent:CPPIGetOwner(), ent:CPPICanTool(ply, outil), ent:CPPICanPhysgun(ply)…Player ou nil / booléenPropriétaire et droits selon la protection des props (aussi sur les PNJ). Voir protection et CPPI.
prop:Remove()—Supprime le prop (et ses contraintes).
prop:GetAnimations()tableNoms des animations du modèle (table vide s'il n'en a pas).
prop:PlayAnimation(nom, boucle)—Joue une animation chez tous les joueurs ; boucle vaut false par défaut. Un nom vide revient à l'animation en boucle réglée dans l'éditeur de modèles.
prop:StopAnimation()—Arrête l'animation en cours.
ent:GetNodeNames()tableNoms des objets du modèle (pièces et repères vides : "Gyro_Rouge_1"…), dans l'ordre du fichier. Vide pour les props intégrés.
ent:LookupNode(nom)booléenLe modèle a-t-il un objet de ce nom ?
ent:GetNodePos(nom) / ent:GetNodeAngles(nom)Vector ou nilPosition dans le monde / rotation en degrés d'un objet du modèle (pour y placer une lumière, un effet…).
ent:IsNodeVisible(nom)booléenL'objet est-il affiché ?
ent:SetNodeVisible(nom, bool)—Affiche ou cache une pièce (et ses enfants), comme les extras d'un véhicule. Serveur : chez tous les joueurs ; client : chez ce joueur seulement, par-dessus le serveur.
ent:SetNodeEmission(nom, couleur, intensité)—Fait briller une pièce (et ses enfants) ; intensité 0 à 16 (1 par défaut), 0 ou nil = éteint. Serveur : chez tous ; client : effet local. Voir Pièces du modèle en Lua.
ent:ClearNodeOverrides(nom)—Client : retire les effets locaux d'une pièce (sans nom : de toutes) et revient à l'état du serveur.
ent:GetClass()texteClasse de l'entité scriptée, "prop_vehicle" pour un véhicule, ou "prop_physics".
veh:IsVehicle(), veh:GetDriver(), veh:GetSpeed()…—Méthodes des véhicules : voir Véhicules.
ent:GetAngles() / ent:SetAngles(v)Vector / —Rotation en degrés.
ent:EntIndex()texteIdentifiant unique de l'entité.
ent:IsPlayer()booléenfalse (true pour un joueur).
ent:SetModel(m) / ent:Spawn()—Pour une entité préparée avec ents.Create, avant / pour la faire apparaître.
ent:GetNWInt(nom, défaut)…valeurVariables réseau (aussi Float, Bool, String, Vector) ; SetNW… côté serveur. Voir Variables réseau.
ent:TakeDamage(montant, attaquant, inflicteur)—Serveur : inflige des dégâts à un prop ou une entité scriptée comme une arme qui la touche, mais sans la pousser : lance le hook EntityTakeDamage(ent, attaquant, montant, arme) avec arme = inflicteur (texte, ou la classe d'une arme ou entité passée en objet ; "" sinon), puis ENT:OnTakeDamage(dmginfo) si la classe la définit et qu'aucun hook n'a renvoyé true. attaquant (un joueur, une entité ou nil) et inflicteur sont facultatifs. Les joueurs et PNJ ont leur propre TakeDamage.
ent:Health() / ent:GetMaxHealth()nombreSanté de l'entité (0 par défaut), lisible des deux côtés. Serveur : ent:SetHealth(n), ent:SetMaxHealth(n). Le jeu ne la baisse pas tout seul et ne retire pas l'entité à 0 : voir Santé.
ent:NextThink(temps)—Entité scriptée : le prochain ENT:Think de ce côté attend temps (en CurTime()).
ent:SetTrigger(bool), ent:SetCollisionBounds(mins, maxs)—Serveur : zone de contact (StartTouch / Touch / EndTouch) d'une entité scriptée. GetTrigger() et GetCollisionBounds() (deux Vector) des deux côtés. Voir Zones de contact.
ent:GetName(), ent:GetKeyValue(clé), ent:GetKeyValues()texte / tableNom et propriétés d'une entité placée dans l'éditeur de map ; serveur : ent:SetKeyValue(clé, valeur). Voir Propriétés des entités placées.

Repères, physique et apparence

Les entités ont aussi des méthodes détaillées dans Monde et physique :

-- /fusee : propulse tous tes props vers le ciel.
concommand.Add("fusee", function(ply)
	for _, prop in ipairs(ents.GetAll()) do
		local proprio = prop:GetOwner()
		if proprio and proprio:UserID() == ply:UserID() then
			prop:SetFrozen(false)
			prop:ApplyForce(Vector(0, prop:GetMass() * 15, 0))
		end
	end
end)