Aide codage

  • Initiateur de la discussion
LesGalériens

LesGalériens

Geek
Messages
405
Score réaction
2
Points
85
Bonsoir, j'ai un petit problème avec mon addon que je code actuellement, je débute c'est mon premier addons de test. Voici les problèmes :

le menu les bouton et le DTextEntry en haut a gauche qui s'affiche au spawn alors qu'il devrais s'afficher quand on appuie sur e sur le NPC :

Et celui ci pour montrer le npc qui ne spawn pas mis a part le cam 3D2D:
 
M

Membre supprimé 98332

Anonyme
LesGalériens à dit:
Bonsoir, j'ai un petit problème avec mon addon que je code actuellement, je débute c'est mon premier addons de test. Voici les problèmes :

le menu les bouton et le DTextEntry en haut a gauche qui s'affiche au spawn alors qu'il devrais s'afficher quand on appuie sur e sur le NPC :

Et celui ci pour montrer le npc qui ne spawn pas mis a part le cam 3D2D:
Hey mets ton code on pourra mieux t'aider ;)
 
  • Initiateur de la discussion
LesGalériens

LesGalériens

Geek
Messages
405
Score réaction
2
Points
85
Code côté client :
Code:
include("shared.lua")
surface.CreateFont("TitleNPC", { font = "Arial", size = 35, weight = 600, blursize = 0, scanlines = 0, antialias = true, underline = false, italic = false, strikeout = false, symbol = false, rotary = false, shadow = false, additive = false, outline = false,
});
surface.CreateFont("TextButtonArmurier", { font = "Trebuchet18", size = 20, weight = 600, blursize = 0, scanlines = 0, antialias = true, underline = false, italic = false, strikeout = false, symbol = false, rotary = false, shadow = false, additive = false, outline = false,
});
function ENT:Draw() net.Receive("ArmorMenuFrame", armormenuframe) cam.Start3D2D(self:GetPos() + self:GetUp() * 90, Angle(0, LocalPlayer():EyeAngles().y - 90,90), .35)
draw.SimpleText("Armor", "DermaDefault", 0, 0, Color(255, 0, 0), TEXT_ALIGN_CENTER, TEXT_ALIGN_LEFT)
cam.End3D2D() self:DrawModel()
end
local function OpenArmorMenuFrame() local scrw, scrh = ScrW(), ScrH() local armormenuframe = vgui.Create("DFrame") armormenuframe:SetPos(scrw * .3, scrh * .2) armormenuframe:SetSize(200, 200) armormenuframe:SetTitle("") armormenuframe:ShowCloseButton(false) function armormenuframe:Paint(w, h) draw.RoundedBox(0, 0, 0, w, h, Color(100, 100, 100)) draw.RoundedBox(0, 0, 0, w, 40, Color(50, 50, 50))
end
armormenuframe:MakePopup() local armormenuclose = vgui.Create("DImageButton", ArmorMenuFrame) armormenuclose:SetPos(170, 10) amormenuclose:SetSize(20, 20) armormenuclose:SetImage("icon16/cross.png") armormenuclose.DoClick = function() armormenuframe:Close()
end local armormenuheader = vgui.Create("DLabel", ArmorMenuFrame) armormenuheader:SetPos(10, 10) armormenuheader:SetSize(150, 20) armormenuheader:SetFont("Trebuchet18") armormenuheader:SetText("Buy Kevlar?")
end local armormenuentry = vgui.Create("DTextEntry", ArmorMenuFrame) armormenuentry:SetPos(150, 50) armormenuentry:SetSize(30, 30) armormenuentry:SetText("") function armormenuentry:Paint(w, h) draw.RoundedBox(0, 0, 0, w, h, Color(250, 250, 250)) draw.RoundedBox(0, 1, 1, w-2, h-2, Color(200, 200, 200)) self:DrawTextEntryText(Color(10, 10, 10), Color(10, 10, 10), Color(255, 255, 255)) end local yesbutton = vgui.Create("DButton", ArmorMenuFrame) yesbutton:SetPos(50, 100) yesbutton:SetSize(100, 30) yesbutton:SetText("Yes") yesbutton.DoClick = function() net.Start("YesAction") net.SendToServer() armormenuframe:Close() LocalPlayer():ChatPrint("You have just purchased a kevlar")
end local nothanksbutton = vgui.Create("DButton", ArmorMenuFrame) nothanksbutton:SetPos(50, 150) nothanksbutton:SetSize(100, 30) nothanksbutton:SetText("No Thanks") nothanksbutton.DoClick = function() net.Start("NoThanksAction") net.SendToServer() armormenuframe:Close()
end
hook.Add("ArmorMenu", ArmorMenuFrame)
net.Receive("ArmorMenuFrame", ArmorMenuFrame)
Code côté serveur :
Code:
util.AddNetworkString("ArmorMenuFrame")
util.AddNetworkString("YesAction")
util.AddNetworkString("NoThanksAction")
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
function ENT:SpawnFunction(ply, tr, classname) if !tr.Hit then return end local SpawnPos = tr.HitPos + tr.HitNormal * 16 local ent = ents.Create(classname) ent:SetPos(SpawnPos) ent:Spawn() ent:Activate() return ent
end
function ENT:Use(act, ply) if IsValid(ply) and ply:IsPlayer() then net.Start("ArmorMenuFrame") net.Send(ply) end
end
local function SpawnARMORNPC() timer.Simple(.1, function() for _, v in pairs(ents.FindByClass("npc-armor")) do v:Remove() end local readthefile = file.Read("npcarmor/" .. string.lower(game.GetMap()) .. ".txt", "DATA") if not readthefile then return end for _, str in pairs(string.Explode("}", readthefile)) do if #str <= 1 then return end local infos = string.Explode(";", string.sub(str, 2)) local pos, ang = string.Explode(",", infos[1]), string.Explode(",", infos[2]) local ent = ents.Create("npc_armor") if !IsValid(ent) then return end ent:SetPos(Vector(tonumber(pos[1]), tonumber(pos[2]), tonumber(pos[3]))) ent:SetAngles(Angle(tonumber(ang[1]), tonumber(ang[2]), tonumber(ang[3]))) ent:DropToFloor() ent:Spawn() ent:Activate() end end)
end
hook.Add("InitPostEntity", "SpawnARMORNPCInit", SpawnARMORNPC)
hook.Add("PostCleanupMap", "SpawnARMORNPCCleanup", SpawnARMORNPC)
net.Receive("SaveNPCFile", function(len, ply) if not ply:IsSuperAdmin() then return end
if not file.IsDir("npcarmor", "DATA") then file.CreateDir("npcarmor") end
local filename = "npcarmor/" ..string.lower(game.GetMap()) .. ".txt"
if not file.Exists (filename, "DATA") then file.Write(filename, "") end file.Write(filename, "") for _, ent in pairs(ents.FindByClass("npc_armor")) do local pos, ang = ent:GetPos(), ent:GetAngles() file.Append (filename, "{" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ";" .. ang.p .. "," .. ang.y .. "," .. ang.r .. "}") end
SpawnARMORNPC()
end)
Code shared :
Code:
ENT.Base = "base_ai"
ENT.Type = "anim"
ENT.Author = "Askal"
ENT.PrintName = "NPC_Armor"
ENT.Category = "Npc Armor"
ENT.Instructions = ""
ENT.Spawnable = true
ENT.SpawnableAdmin = true
function ENT:Initialze() self:SetModel("models/gman.mdl") self:SetSolid(SOLID_BBOX) self:SetUseType( SIMPLE_USE ) self:DropToFloor()
end
 
M

Membre supprimé 98332

Anonyme
LesGalériens à dit:
Code côté client :
Code:
include("shared.lua")
surface.CreateFont("TitleNPC", { font = "Arial", size = 35, weight = 600, blursize = 0, scanlines = 0, antialias = true, underline = false, italic = false, strikeout = false, symbol = false, rotary = false, shadow = false, additive = false, outline = false,
});
surface.CreateFont("TextButtonArmurier", { font = "Trebuchet18", size = 20, weight = 600, blursize = 0, scanlines = 0, antialias = true, underline = false, italic = false, strikeout = false, symbol = false, rotary = false, shadow = false, additive = false, outline = false,
});
function ENT:Draw() net.Receive("ArmorMenuFrame", armormenuframe) cam.Start3D2D(self:GetPos() + self:GetUp() * 90, Angle(0, LocalPlayer():EyeAngles().y - 90,90), .35)
draw.SimpleText("Armor", "DermaDefault", 0, 0, Color(255, 0, 0), TEXT_ALIGN_CENTER, TEXT_ALIGN_LEFT)
cam.End3D2D() self:DrawModel()
end
local function OpenArmorMenuFrame() local scrw, scrh = ScrW(), ScrH() local armormenuframe = vgui.Create("DFrame") armormenuframe:SetPos(scrw * .3, scrh * .2) armormenuframe:SetSize(200, 200) armormenuframe:SetTitle("") armormenuframe:ShowCloseButton(false) function armormenuframe:Paint(w, h) draw.RoundedBox(0, 0, 0, w, h, Color(100, 100, 100)) draw.RoundedBox(0, 0, 0, w, 40, Color(50, 50, 50))
end
armormenuframe:MakePopup() local armormenuclose = vgui.Create("DImageButton", ArmorMenuFrame) armormenuclose:SetPos(170, 10) amormenuclose:SetSize(20, 20) armormenuclose:SetImage("icon16/cross.png") armormenuclose.DoClick = function() armormenuframe:Close()
end local armormenuheader = vgui.Create("DLabel", ArmorMenuFrame) armormenuheader:SetPos(10, 10) armormenuheader:SetSize(150, 20) armormenuheader:SetFont("Trebuchet18") armormenuheader:SetText("Buy Kevlar?")
end local armormenuentry = vgui.Create("DTextEntry", ArmorMenuFrame) armormenuentry:SetPos(150, 50) armormenuentry:SetSize(30, 30) armormenuentry:SetText("") function armormenuentry:Paint(w, h) draw.RoundedBox(0, 0, 0, w, h, Color(250, 250, 250)) draw.RoundedBox(0, 1, 1, w-2, h-2, Color(200, 200, 200)) self:DrawTextEntryText(Color(10, 10, 10), Color(10, 10, 10), Color(255, 255, 255)) end local yesbutton = vgui.Create("DButton", ArmorMenuFrame) yesbutton:SetPos(50, 100) yesbutton:SetSize(100, 30) yesbutton:SetText("Yes") yesbutton.DoClick = function() net.Start("YesAction") net.SendToServer() armormenuframe:Close() LocalPlayer():ChatPrint("You have just purchased a kevlar")
end local nothanksbutton = vgui.Create("DButton", ArmorMenuFrame) nothanksbutton:SetPos(50, 150) nothanksbutton:SetSize(100, 30) nothanksbutton:SetText("No Thanks") nothanksbutton.DoClick = function() net.Start("NoThanksAction") net.SendToServer() armormenuframe:Close()
end
hook.Add("ArmorMenu", ArmorMenuFrame)
net.Receive("ArmorMenuFrame", ArmorMenuFrame)
Code côté serveur :
Code:
util.AddNetworkString("ArmorMenuFrame")
util.AddNetworkString("YesAction")
util.AddNetworkString("NoThanksAction")
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
function ENT:SpawnFunction(ply, tr, classname) if !tr.Hit then return end local SpawnPos = tr.HitPos + tr.HitNormal * 16 local ent = ents.Create(classname) ent:SetPos(SpawnPos) ent:Spawn() ent:Activate() return ent
end
function ENT:Use(act, ply) if IsValid(ply) and ply:IsPlayer() then net.Start("ArmorMenuFrame") net.Send(ply) end
end
local function SpawnARMORNPC() timer.Simple(.1, function() for _, v in pairs(ents.FindByClass("npc-armor")) do v:Remove() end local readthefile = file.Read("npcarmor/" .. string.lower(game.GetMap()) .. ".txt", "DATA") if not readthefile then return end for _, str in pairs(string.Explode("}", readthefile)) do if #str <= 1 then return end local infos = string.Explode(";", string.sub(str, 2)) local pos, ang = string.Explode(",", infos[1]), string.Explode(",", infos[2]) local ent = ents.Create("npc_armor") if !IsValid(ent) then return end ent:SetPos(Vector(tonumber(pos[1]), tonumber(pos[2]), tonumber(pos[3]))) ent:SetAngles(Angle(tonumber(ang[1]), tonumber(ang[2]), tonumber(ang[3]))) ent:DropToFloor() ent:Spawn() ent:Activate() end end)
end
hook.Add("InitPostEntity", "SpawnARMORNPCInit", SpawnARMORNPC)
hook.Add("PostCleanupMap", "SpawnARMORNPCCleanup", SpawnARMORNPC)
net.Receive("SaveNPCFile", function(len, ply) if not ply:IsSuperAdmin() then return end
if not file.IsDir("npcarmor", "DATA") then file.CreateDir("npcarmor") end
local filename = "npcarmor/" ..string.lower(game.GetMap()) .. ".txt"
if not file.Exists (filename, "DATA") then file.Write(filename, "") end file.Write(filename, "") for _, ent in pairs(ents.FindByClass("npc_armor")) do local pos, ang = ent:GetPos(), ent:GetAngles() file.Append (filename, "{" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ";" .. ang.p .. "," .. ang.y .. "," .. ang.r .. "}") end
SpawnARMORNPC()
end)
Code shared :
Code:
ENT.Base = "base_ai"
ENT.Type = "anim"
ENT.Author = "Askal"
ENT.PrintName = "NPC_Armor"
ENT.Category = "Npc Armor"
ENT.Instructions = ""
ENT.Spawnable = true
ENT.SpawnableAdmin = true
function ENT:Initialze() self:SetModel("models/gman.mdl") self:SetSolid(SOLID_BBOX) self:SetUseType( SIMPLE_USE ) self:DropToFloor()
end
Bon déjà, dans cl_init.lua, enlève le
Code:
net.Receive("blablabla")
dans le
Code:
ENT:Draw
il est de trop et je pense que c'est ça qui empêche de "dessiner" l'entité.


Aussi :
Ta frame s'appelle :
Code:
armormenuframe
et toi tu mets :
Code:
vgui.Create("Dquelquechose", ArmorMenuFrame)
Ca ne peut pas marcher. Tu dois respecter les majuscules / minuscules.

Il doit avoir d'autres erreurs mais je suis sur mon téléphone et c'est assez laborieux de répondre / analyser le code.

Bref je te laisse chercher pour la suite mais déjà je pense que pas mal de problèmes devraient être réglés.
 
  • J'aime
Réactions: lampoule
  • Initiateur de la discussion
LesGalériens

LesGalériens

Geek
Messages
405
Score réaction
2
Points
85
EpicGaby à dit:
Bon déjà, dans cl_init.lua, enlève le
Code:
net.Receive("blablabla")
dans le
Code:
ENT:Draw
il est de trop et je pense que c'est ça qui empêche de "dessiner" l'entité.


Aussi :
Ta frame s'appelle :
Code:
armormenuframe
et toi tu mets :
Code:
vgui.Create("Dquelquechose", ArmorMenuFrame)
Ca ne peut pas marcher. Tu dois respecter les majuscules / minuscules.

Il doit avoir d'autres erreurs mais je suis sur mon téléphone et c'est assez laborieux de répondre / analyser le code.

Bref je te laisse chercher pour la suite mais déjà je pense que pas mal de problèmes devraient être réglés.
Cela ne change rien :/
 
M

Membre supprimé 98332

Anonyme
LesGalériens à dit:
Cela ne change rien :/
J'avais pas vu mais t'as fait une erreur toute bête :

Tu as mis :
Code:
function ENT:Initialze()
Alors que c'est :
Code:
function ENT:Initialize()
 
  • Initiateur de la discussion
LesGalériens

LesGalériens

Geek
Messages
405
Score réaction
2
Points
85
Oui c'est mieux :) L'entité apparaît mais le menu spawn toujours au spawn, et quand je clique sur e sur l'entité cela m'affiche cette erreur :
[ERROR] addons/npc_armor/lua/entities/npc-armor/shared.lua:13: attempt to call method 'SetUseType' (a nil value)
1. unknown - addons/npc_armor/lua/entities/npc-armor/shared.lua:13
 
M

Membre supprimé 98332

Anonyme
LesGalériens à dit:
Oui c'est mieux :) L'entité apparaît mais le menu spawn toujours au spawn, et quand je clique sur e sur l'entité cela m'affiche cette erreur :
[ERROR] addons/npc_armor/lua/entities/npc-armor/shared.lua:13: attempt to call method 'SetUseType' (a nil value)
1. unknown - addons/npc_armor/lua/entities/npc-armor/shared.lua:13
SetUseType s'execute cote serveur.

Ajoute un if SERVER then avant ton self:SetUseType

;)
 
  • Initiateur de la discussion
LesGalériens

LesGalériens

Geek
Messages
405
Score réaction
2
Points
85
EpicGaby à dit:
SetUseType s'execute cote serveur.

Ajoute un if SERVER then avant ton self:SetUseType

;)
Ha c'est pour ça que certains mettent leur initialize cote serveur ?
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
Ton ENT doit être initialisé côté serveur donc pour pas te compliquer et ajouter des caractères pour rien, mets le côté serveur.
 
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
LesGalériens

LesGalériens

Geek
Messages
405
Score réaction
2
Points
85
>C'est bon mais toujours pas bon pour le menu qui spawn dès le début :/ et quand je fait e sur le npc rien ne s'ouvre je sait pas si c a cause du problème ou pas ..
 
M

Membre supprimé 98332

Anonyme
LesGalériens à dit:
>C'est bon mais toujours pas bon pour le menu qui spawn dès le début :/ et quand je fait e sur le npc rien ne s'ouvre je sait pas si c a cause du problème ou pas ..
C'est normal, toi tu fais ça :
Code:
local function OpenArmorMenuFrame() local scrw, scrh = ScrW(), ScrH() local armormenuframe = vgui.Create("DFrame") armormenuframe:SetPos(scrw * .3, scrh * .2) armormenuframe:SetSize(200, 200) armormenuframe:SetTitle("") armormenuframe:ShowCloseButton(false) function armormenuframe:Paint(w, h) draw.RoundedBox(0, 0, 0, w, h, Color(100, 100, 100)) draw.RoundedBox(0, 0, 0, w, 40, Color(50, 50, 50))
end
armormenuframe:MakePopup()
La dernière ligne fait apparaître directement le hud étant donné quelle n'est pas dans ta fonction.
Il faut que tu fasses :
Code:
local function OpenArmorMenuFrame() local scrw, scrh = ScrW(), ScrH() local armormenuframe = vgui.Create("DFrame") armormenuframe:SetPos(scrw * .3, scrh * .2) armormenuframe:SetSize(200, 200) armormenuframe:SetTitle("") armormenuframe:ShowCloseButton(false) armormenuframe:MakePopup() function armormenuframe:Paint(w, h) draw.RoundedBox(0, 0, 0, w, h, Color(100, 100, 100)) draw.RoundedBox(0, 0, 0, w, 40, Color(50, 50, 50))
end
Normalement tout devrai fonctionner :)
 
  • Initiateur de la discussion
LesGalériens

LesGalériens

Geek
Messages
405
Score réaction
2
Points
85
EpicGaby à dit:
C'est normal, toi tu fais ça :
Code:
local function OpenArmorMenuFrame() local scrw, scrh = ScrW(), ScrH() local armormenuframe = vgui.Create("DFrame") armormenuframe:SetPos(scrw * .3, scrh * .2) armormenuframe:SetSize(200, 200) armormenuframe:SetTitle("") armormenuframe:ShowCloseButton(false) function armormenuframe:Paint(w, h) draw.RoundedBox(0, 0, 0, w, h, Color(100, 100, 100)) draw.RoundedBox(0, 0, 0, w, 40, Color(50, 50, 50))
end
armormenuframe:MakePopup()
La dernière ligne fait apparaître directement le hud étant donné quelle n'est pas dans ta fonction.
Il faut que tu fasses :
Code:
local function OpenArmorMenuFrame() local scrw, scrh = ScrW(), ScrH() local armormenuframe = vgui.Create("DFrame") armormenuframe:SetPos(scrw * .3, scrh * .2) armormenuframe:SetSize(200, 200) armormenuframe:SetTitle("") armormenuframe:ShowCloseButton(false) armormenuframe:MakePopup() function armormenuframe:Paint(w, h) draw.RoundedBox(0, 0, 0, w, h, Color(100, 100, 100)) draw.RoundedBox(0, 0, 0, w, 40, Color(50, 50, 50))
end
Normalement tout devrai fonctionner :)
Toujours pas.. Je ne comprend pas
 
  • Initiateur de la discussion
LesGalériens

LesGalériens

Geek
Messages
405
Score réaction
2
Points
85
pas d'aide ? :(
 
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
LesGalériens

LesGalériens

Geek
Messages
405
Score réaction
2
Points
85
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
LesGalériens à dit:
Code côté client :
Code:
include("shared.lua")
surface.CreateFont("TitleNPC", { font = "Arial", size = 35, weight = 600, blursize = 0, scanlines = 0, antialias = true, underline = false, italic = false, strikeout = false, symbol = false, rotary = false, shadow = false, additive = false, outline = false,
});
surface.CreateFont("TextButtonArmurier", { font = "Trebuchet18", size = 20, weight = 600, blursize = 0, scanlines = 0, antialias = true, underline = false, italic = false, strikeout = false, symbol = false, rotary = false, shadow = false, additive = false, outline = false,
});
function ENT:Draw() net.Receive("ArmorMenuFrame", armormenuframe) cam.Start3D2D(self:GetPos() + self:GetUp() * 90, Angle(0, LocalPlayer():EyeAngles().y - 90,90), .35)
draw.SimpleText("Armor", "DermaDefault", 0, 0, Color(255, 0, 0), TEXT_ALIGN_CENTER, TEXT_ALIGN_LEFT)
cam.End3D2D() self:DrawModel()
end
local function OpenArmorMenuFrame() local scrw, scrh = ScrW(), ScrH() local armormenuframe = vgui.Create("DFrame") armormenuframe:SetPos(scrw * .3, scrh * .2) armormenuframe:SetSize(200, 200) armormenuframe:SetTitle("") armormenuframe:ShowCloseButton(false) function armormenuframe:Paint(w, h) draw.RoundedBox(0, 0, 0, w, h, Color(100, 100, 100)) draw.RoundedBox(0, 0, 0, w, 40, Color(50, 50, 50))
end
armormenuframe:MakePopup() local armormenuclose = vgui.Create("DImageButton", ArmorMenuFrame) armormenuclose:SetPos(170, 10) amormenuclose:SetSize(20, 20) armormenuclose:SetImage("icon16/cross.png") armormenuclose.DoClick = function() armormenuframe:Close()
end local armormenuheader = vgui.Create("DLabel", ArmorMenuFrame) armormenuheader:SetPos(10, 10) armormenuheader:SetSize(150, 20) armormenuheader:SetFont("Trebuchet18") armormenuheader:SetText("Buy Kevlar?")
end local armormenuentry = vgui.Create("DTextEntry", ArmorMenuFrame) armormenuentry:SetPos(150, 50) armormenuentry:SetSize(30, 30) armormenuentry:SetText("") function armormenuentry:Paint(w, h) draw.RoundedBox(0, 0, 0, w, h, Color(250, 250, 250)) draw.RoundedBox(0, 1, 1, w-2, h-2, Color(200, 200, 200)) self:DrawTextEntryText(Color(10, 10, 10), Color(10, 10, 10), Color(255, 255, 255)) end local yesbutton = vgui.Create("DButton", ArmorMenuFrame) yesbutton:SetPos(50, 100) yesbutton:SetSize(100, 30) yesbutton:SetText("Yes") yesbutton.DoClick = function() net.Start("YesAction") net.SendToServer() armormenuframe:Close() LocalPlayer():ChatPrint("You have just purchased a kevlar")
end local nothanksbutton = vgui.Create("DButton", ArmorMenuFrame) nothanksbutton:SetPos(50, 150) nothanksbutton:SetSize(100, 30) nothanksbutton:SetText("No Thanks") nothanksbutton.DoClick = function() net.Start("NoThanksAction") net.SendToServer() armormenuframe:Close()
end
hook.Add("ArmorMenu", ArmorMenuFrame)
net.Receive("ArmorMenuFrame", ArmorMenuFrame)
Code côté serveur :
Code:
util.AddNetworkString("ArmorMenuFrame")
util.AddNetworkString("YesAction")
util.AddNetworkString("NoThanksAction")
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
function ENT:SpawnFunction(ply, tr, classname) if !tr.Hit then return end local SpawnPos = tr.HitPos + tr.HitNormal * 16 local ent = ents.Create(classname) ent:SetPos(SpawnPos) ent:Spawn() ent:Activate() return ent
end
function ENT:Use(act, ply) if IsValid(ply) and ply:IsPlayer() then net.Start("ArmorMenuFrame") net.Send(ply) end
end
local function SpawnARMORNPC() timer.Simple(.1, function() for _, v in pairs(ents.FindByClass("npc-armor")) do v:Remove() end local readthefile = file.Read("npcarmor/" .. string.lower(game.GetMap()) .. ".txt", "DATA") if not readthefile then return end for _, str in pairs(string.Explode("}", readthefile)) do if #str <= 1 then return end local infos = string.Explode(";", string.sub(str, 2)) local pos, ang = string.Explode(",", infos[1]), string.Explode(",", infos[2]) local ent = ents.Create("npc_armor") if !IsValid(ent) then return end ent:SetPos(Vector(tonumber(pos[1]), tonumber(pos[2]), tonumber(pos[3]))) ent:SetAngles(Angle(tonumber(ang[1]), tonumber(ang[2]), tonumber(ang[3]))) ent:DropToFloor() ent:Spawn() ent:Activate() end end)
end
hook.Add("InitPostEntity", "SpawnARMORNPCInit", SpawnARMORNPC)
hook.Add("PostCleanupMap", "SpawnARMORNPCCleanup", SpawnARMORNPC)
net.Receive("SaveNPCFile", function(len, ply) if not ply:IsSuperAdmin() then return end
if not file.IsDir("npcarmor", "DATA") then file.CreateDir("npcarmor") end
local filename = "npcarmor/" ..string.lower(game.GetMap()) .. ".txt"
if not file.Exists (filename, "DATA") then file.Write(filename, "") end file.Write(filename, "") for _, ent in pairs(ents.FindByClass("npc_armor")) do local pos, ang = ent:GetPos(), ent:GetAngles() file.Append (filename, "{" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ";" .. ang.p .. "," .. ang.y .. "," .. ang.r .. "}") end
SpawnARMORNPC()
end)
Code shared :
Code:
ENT.Base = "base_ai"
ENT.Type = "anim"
ENT.Author = "Askal"
ENT.PrintName = "NPC_Armor"
ENT.Category = "Npc Armor"
ENT.Instructions = ""
ENT.Spawnable = true
ENT.SpawnableAdmin = true
function ENT:Initialze() self:SetModel("models/gman.mdl") self:SetSolid(SOLID_BBOX) self:SetUseType( SIMPLE_USE ) self:DropToFloor()
end
J'ai un peut organisé ( modifié ) ton code, car la ont comprend rien :

CLIENT :
Code:
include("shared.lua")
--[[------------------------------------------------------------------------- Création des polices
---------------------------------------------------------------------------]]
surface.CreateFont("TitleNPC", { font = "Arial", size = 35, weight = 600, blursize = 0, scanlines = 0, antialias = true, underline = false, italic = false, strikeout = false, symbol = false, rotary = false, shadow = false, additive = false, outline = false,
});
surface.CreateFont("TextButtonArmurier", { font = "Trebuchet18", size = 20, weight = 600, blursize = 0, scanlines = 0, antialias = true, underline = false, italic = false, strikeout = false, symbol = false, rotary = false, shadow = false, additive = false, outline = false,
});
--[[------------------------------------------------------------------------- 3D2D du NPC
---------------------------------------------------------------------------]]
function ENT:Draw() self:DrawModel() cam.Start3D2D(self:GetPos() + self:GetUp() * 90, Angle(0, LocalPlayer():EyeAngles().y - 90,90), .35) draw.SimpleText("Armor", "DermaDefault", 0, 0, Color(255, 0, 0), TEXT_ALIGN_CENTER, TEXT_ALIGN_LEFT) cam.End3D2D()
end
--[[------------------------------------------------------------------------- Menu que le joueur veras
---------------------------------------------------------------------------]]
local function OpenArmorMenuFrame() local ArmorMenuFrame = vgui.Create( "DFrame" ) ArmorMenuFrame:SetSize(200, 200) ArmorMenuFrame:Center() ArmorMenuFrame:SetTitle("") ArmorMenuFrame:ShowCloseButton(false) ArmorMenuFrame:MakePopup() ArmorMenuFrame.Paint = function( self, w, h ) draw.RoundedBox(0, 0, 0, w, h, Color(100, 100, 100)) draw.RoundedBox(0, 0, 0, w, 40, Color(50, 50, 50)) end local armormenuclose = vgui.Create( "DImageButton", ArmorMenuFrame ) armormenuclose:SetPos(170, 10) armormenuclose:SetSize(20, 20) armormenuclose:SetImage("icon16/cross.png") armormenuclose.DoClick = function() ArmorMenuFrame:Remove() end local armormenuheader = vgui.Create("DLabel", ArmorMenuFrame ) armormenuheader:SetPos(10, 10) armormenuheader:SetSize(150, 20) armormenuheader:SetFont("Trebuchet18") armormenuheader:SetText("Buy Kevlar?") local armormenuentry = vgui.Create( "DTextEntry", ArmorMenuFrame ) armormenuentry:SetPos(150, 50) armormenuentry:SetSize(30, 30) armormenuentry:SetText("") armormenuentry.Paint = function( self, w, h ) draw.RoundedBox(0, 0, 0, w, h, Color(250, 250, 250)) draw.RoundedBox(0, 1, 1, w-2, h-2, Color(200, 200, 200)) self:DrawTextEntryText(Color(10, 10, 10), Color(10, 10, 10), Color(255, 255, 255)) end local yesbutton = vgui.Create( "DButton", ArmorMenuFrame ) yesbutton:SetPos(50, 100) yesbutton:SetSize(100, 30) yesbutton:SetText("Yes") yesbutton.DoClick = function() net.Start("YesAction") net.SendToServer() ArmorMenuFrame:Remove() LocalPlayer():ChatPrint("You have just purchased a kevlar") end local nothanksbutton = vgui.Create( "DButton", ArmorMenuFrame ) nothanksbutton:SetPos(50, 150) nothanksbutton:SetSize(100, 30) nothanksbutton:SetText("No Thanks") nothanksbutton.DoClick = function() net.Start("NoThanksAction") net.SendToServer() ArmorMenuFrame:Close() end
end
net.Receive("ArmorMenuFrame", ArmorMenuFrame )
SERVER :
Code:
AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")
--[[------------------------------------------------------------------------- Initialisation des networks
---------------------------------------------------------------------------]]
util.AddNetworkString("ArmorMenuFrame")
util.AddNetworkString("YesAction")
util.AddNetworkString("NoThanksAction")
--[[------------------------------------------------------------------------- Initialisation du NPC
---------------------------------------------------------------------------]]
function ENT:Initialize() self:SetModel("models/gman.mdl") self:SetHullType( HULL_HUMAN ) self:SetHullSizeNormal() self:SetNPCState( NPC_STATE_SCRIPT ) self:SetSolid( SOLID_BBOX ) self:CapabilitiesAdd( CAP_ANIMATEDFACE || CAP_TURN_HEAD ) self:SetUseType( SIMPLE_USE ) self:DropToFloor()
end
--[[------------------------------------------------------------------------- Quand on appuie sur le npc
---------------------------------------------------------------------------]]
function ENT:AcceptInput( Name, Activator, Caller ) if Name == "Use" && IsValid( Caller ) && Caller:IsPlayer() then -- On fait des vérification net.Start( "ArmorMenuFrame" ) net.Send( Caller ) -- On envoie le net au joueur end
end
--[[------------------------------------------------------------------------- Fonction pour spawn les npcs
---------------------------------------------------------------------------]]
local function SpawnARMORNPC() timer.Simple( 0.1, function() -- for _, v in pairs( ents.FindByClass("npc-armor") ) do v:Remove() end // Se code ne sert à rien vu que tu cleanup / demarre la map local readthefile = file.Read( "npcarmor/" .. string.lower( game.GetMap() ) .. ".txt", "DATA" ) if not readthefile then return end for _, str in pairs( string.Explode( "}", readthefile ) ) do if #str <= 1 then return end local infos = string.Explode( ";", string.sub( str, 2 ) ) local pos, ang = string.Explode( ",", infos[ 1 ] ), string.Explode( ",", infos[ 2 ] ) local ent = ents.Create( "npc_armor" ) if !IsValid( ent ) then return end ent:SetPos( Vector( tonumber( pos[ 1 ] ), tonumber( pos[ 2 ] ), tonumber( pos[ 3 ] ) ) ) ent:SetAngles( Angle( tonumber( ang[ 1 ] ), tonumber( ang[ 2 ] ), tonumber( ang[ 3 ] ) ) ) ent:Spawn() ent:Activate() end end)
end
hook.Add( "InitPostEntity", "SpawnARMORNPCInit", SpawnARMORNPC )
hook.Add( "PostCleanupMap", "SpawnARMORNPCCleanup", SpawnARMORNPC )
--[[------------------------------------------------------------------------- Network pour sauvegarder le npc ( inconnue )
---------------------------------------------------------------------------]]
net.Receive("SaveNPCFile", function(len, ply) if not ply:IsSuperAdmin() then return end if not file.IsDir( "npcarmor", "DATA" ) then file.CreateDir( "npcarmor" ) end local filename = "npcarmor/" .. string.lower( game.GetMap() ) .. ".txt" if not file.Exists( filename, "DATA" ) then file.Write( filename, "" ) end file.Write( filename, "" ) for _, ent in pairs( ents.FindByClass( "npc_armor" ) ) do local pos, ang = ent:GetPos(), ent:GetAngles() file.Append( filename, "{" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ";" .. ang.p .. "," .. ang.y .. "," .. ang.r .. "}" ) end -- SpawnARMORNPC() // Ne sert à rien, pas besoin de les faire respawns
end)
SHARED :
Code:
ENT.Base = "base_ai"
ENT.Type = "ai"
ENT.Author = "Askal"
ENT.PrintName = "NPC_Armor"
ENT.Category = "Npc Armor"
ENT.Instructions = ""
ENT.Spawnable = true
ENT.SpawnableAdmin = true
 
Dernière édition:
  • J'aime
Réactions: Membre supprimé 98332
  • Initiateur de la discussion
LesGalériens

LesGalériens

Geek
Messages
405
Score réaction
2
Points
85
Tu as juste ajouter les --[[-------------------------------------------------------]]-- ? c'est vrai e c'est mieux :)
 
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
LesGalériens à dit:
Tu as juste ajouter les --[[-------------------------------------------------------]]-- ? c'est vrai e c'est mieux :)
J'ai organisé ton code en général, j'ai enlevé des end qui fermer rien, j'ai changer la base de ton npc, ajouter un "Initialize", Mis les bon derma au bon net ^^....
 
  • J'aime
Réactions: LesGalériens
M

Membre supprimé 98332

Anonyme
LesGalériens à dit:
Tu as juste ajouter les --[[-------------------------------------------------------]]-- ? c'est vrai e c'est mieux :)
Il a refait une indentation digne de ce nom aussi ;)
Du coup ton code est plus lisible.
 
  • J'aime
Réactions: LesGalériens
  • Initiateur de la discussion
LesGalériens

LesGalériens

Geek
Messages
405
Score réaction
2
Points
85
slownls à dit:
J'ai organisé ton code en général, j'ai enlevé des end qui fermer rien, j'ai changer la base de ton npc, ajouter un "Initialize", Mis les bon derma au bon net ^^....
D'accord, merci :) Mais du coup vous avez trouver pourquoi le menu s'ouvrez au spawn ?
 
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
LesGalériens à dit:
D'accord, merci :) Mais du coup vous avez trouver pourquoi le menu s'ouvrez au spawn ?
Normalement, avec le code que je t'es envoyé ton problème sera résolu :)
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
slownls à dit:
Normalement, avec le code que je t'es envoyé ton problème sera résolu :)
Nope :
Code:
net.Receive("ArmorMenuFrame", OpenArmorMenuFrame )
Le receiver doit appeler la fonction OpenArmorMenuFrame, pas le vgui.Create.
 
slownls

slownls

Helpeur Divin
Messages
1 853
Score réaction
1 079
Points
465
While True à dit:
Nope :
Code:
net.Receive("ArmorMenuFrame", OpenArmorMenuFrame )
Le receiver doit appeler la fonction OpenArmorMenuFrame, pas le vgui.Create.
Ah oui! ( j'ai pas fait attention ), autant pour moi :oops:
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
  • J'aime
Réactions: slownls
  • Initiateur de la discussion
LesGalériens

LesGalériens

Geek
Messages
405
Score réaction
2
Points
85
slownls à dit:
Ah oui! ( j'ai pas fait attention ), autant pour moi :oops:
Pourrais tu m'explique quesqui coser le probleme ?
 
Taink

Taink

El Magnifico
Messages
5 292
Score réaction
2 720
Points
965
While True à dit:
*au temps pour moi
Les deux se disent, grâce à (à cause de ?) l'Académie Française.
 
While True

While True

Geek suprême
Messages
445
Score réaction
395
Points
190
Taink à dit:
Les deux se disent, grâce à (à cause de ?) l'Académie Française.
Ne disons pas de bêtises, L'Académie Française admet l'utilisation, c'est tout :
http://www.academie-francaise.fr/questions-de-langue#16_strong-em-au-temps-pour-moi-em-strong à dit:
L’origine de cette expression n’étant plus comprise, la graphie Autant pour moi est courante aujourd’hui, mais rien ne la justifie.
 
  • J'aime
Réactions: Taink
Taink

Taink

El Magnifico
Messages
5 292
Score réaction
2 720
Points
965
While True à dit:
Ne disons pas de bêtises, L'Académie Française admet l'utilisation, c'est tout :
C'est ce que je dis :c
 
Feytone

Feytone

Chuck Norris
Messages
4 741
Score réaction
1 301
Points
600
While True à dit:
Ne disons pas de bêtises, L'Académie Française admet l'utilisation, c'est tout :
Des zharicots verts.
Un nénufar
Bientôt : une brouètteu ?
 
Discord d'entraide
Rejoignz-nous sur Discord