Hey guys... As some of you who know me quite a bit I am working on my servers JailBreak gamemode quite a lot and some of the things I need to do just... I would not have a clue where to start. Now I have been wanting to make things run on a certain player dying like the warden for example. The only problem is, is I don't actually know a good and fully working way to get and run things on a players death. The only way I can manage deaths at the moment is if it was to be if not ply:Alive() and stuff... So here is a basic thing I would like to do.
On the wardens death I would like a
[code]surface.PlaySound("trizone/jailbreak/deadwarden.wav")[/code]
and
[code]
chat.AddText(
Color(255,0,0), "WARDEN IS DEAD! PRISONERS GET FREEDAY!")
chat.PlaySound()
[/code]
But there is no way obvious to me of making these run when the JB.wardenPlayer dies. All the warden setup is working and is setup here:
[code]
function JB:SetWarden(p)
JB.wardenPlayer = p;
for k,v in pairs(team.GetPlayers(TEAM_GUARD)) do
v:SetModel("models/player/police.mdl")
end
p:SetModel("models/player/combine_soldier_prisonguard.mdl")
umsg.Start("JSWP"); umsg.Entity(p); umsg.End();
end
[/code]
So it can't be anything to do with the warden not being identified... And also tried using
[code]
function JB:PlayerDeath( p, a, d )
[/code]
BUT, it stops people from dying properly and conflicts with this script:
[code]
function JB:PlayerDeath( p, a, d )
if p:Team() == TEAM_PRISONER then
p:SetTeam(TEAM_PRISONER_DEAD);
local e = ents.Create("jb_hands");
e:SetModel(p:GetModel());
e:SetPos(p:GetPos());
e:GetAngles(p:GetAngles());
e:SetVelocity(p:GetVelocity());
e:Spawn();
e:Activate();
p:EmitSound(table.Random(DeathSounds),300,100);
if p:Alive() then
p:KillSilent()
p:Spawn();
end
elseif p:Team() == TEAM_GUARD then -- or we simply check it.
p:SetTeam(TEAM_GUARD_DEAD);
local e = ents.Create("jb_hands");
e:SetModel(p:GetModel());
e:SetPos(p:GetPos());
e:GetAngles(p:GetAngles());
e:SetVelocity(p:GetVelocity());
e:Spawn();
e:Activate();
p:EmitSound(table.Random(DeathSounds),300,100);
if p:Alive() then
p:KillSilent()
p:Spawn();
end
end
if JB:RoundStatus() ~= ROUND_END then
JB:CheckRoundEnd();
end
end
[/code]
Its put me in a really hard position and now I just don't know what to do... And please don't ask me why it is spawning jb_hands on death T_T... It stop ragdolls spawning as dead bodies so it doesn't dupe the ragdolls as I have a ragdolldeath fix addon...
I'm hoping this is going to help with a lot of other things also. Thanks for the help guys!
If you want to add more than one function to a hook, then you have to use [url="http://wiki.garrysmod.com/page/hook/Add"]hook.Add()[/url]
I'm horrible with hooks... I'll have a play around thanks... If anyone has any other idea I would be really greatful.
[lua]
function yourFunction( ply, infli, killer )
print(ply:Nick() .. " died!")
print(killer:Nick() .. " killed " .. ply:Nick())
end
hook.Add("PlayerDeath", "Random hook name", yourFunction )
[/lua]
Will print the player who died and then who died and by who.
I think i have already tried playing with this hook but I will give it another go...
[editline]30th October 2013[/editline]
Tried this and it just fucked over the gamemode... :C
[code]
function yourFunction( ply, infli, killer )
if JB.wardenPlayer == ply then
PrintMessage( HUD_PRINTCENTER, "WARDEN IS DEAD! PRISONERS GET FREEDAY!" )
chat.AddText(
Color(255,0,0), "WARDEN IS DEAD! PRISONERS GET FREEDAY!")
chat.PlaySound()
end
hook.Add("PlayerDeath", "Random hook name", yourFunction )
[/code]
[QUOTE=SatoshiAaron;42702407]snip[/QUOTE]
I'm not listing your faults to be a dick, just so you learn if you care to.
-You are missing an 'end'
-Your last end is missing a ')'
-Missing a unique hook name, not sure if spaces are acceptable.
-If you are trying to print this on the screen for players on the warden team id use
'if ply:Team() == TEAM_GUARD then'
[code]
function JB_DeathNotify( ply, infli, killer )
if ply:Team() == TEAM_GUARD then
PrintMessage( HUD_PRINTCENTER, "WARDEN IS DEAD! PRISONERS GET FREEDAY!" )
chat.AddText(Color(255,0,0), "WARDEN IS DEAD! PRISONERS GET FREEDAY!")
chat.PlaySound()
end
end)
hook.Add("PlayerDeath", "JB_DeathNotifacation", JB_DeathNotify )
[/code]
Also look at the formatting of this code now, makes it easier to read.
You're using a combination of client and server functions/hooks.
PlayerDeath is a serverside hook. chat.AddText is clientside.
[QUOTE=ms333;42703308]You're using a combination of client and server functions/hooks.
PlayerDeath is a serverside hook. chat.AddText is clientside.[/QUOTE]
Good call, I'm not smart enough to spot things like that w/o testing it.
Here SatoshiAaron look how we can send clientside LUA from serverside files:
[code]
function JB_DeathNotify( ply, infli, killer )
if ply:Team() == TEAM_GUARD then
PrintMessage( HUD_PRINTCENTER, "WARDEN IS DEAD! PRISONERS GET FREEDAY!" )
ply:SendLua( [[chat.AddText(Color(255, 0, 0, 255), "WARDEN IS DEAD! PRISONERS GET FREEDAY!" ) ]] )
chat.PlaySound()
end
end)
hook.Add("PlayerDeath", "JB_DeathNotifacation", JB_DeathNotify )
[/code]
ms333 did I do that right? I did it in the browser, so no promises.
The close-bracket after the end of the function isn't neccesary. (It's not valid syntax)
chat.PlaySound is clientside too.
Localize the function as well.
[QUOTE=Willox;42703924]The close-bracket after the end of the function isn't neccesary. (It's not valid syntax)[/QUOTE]
I'm an idiot, I knew that. I don't know the terminology for it, but I forgot this was coded as a normal function. In my head I was thinking this:
[code]
hook.Add("PlayerSpawn", "PlayerSpawnShit", function()
print("Hello")
end)
[/code]
What a stupid stoner.
Thats not what I'm trying to do... I now understand that chat.AddText is client now you have told me but I want it to trigger when the warden dies... Not any random member of guard team
[QUOTE=SatoshiAaron;42704870]Thats not what I'm trying to do... I now understand that chat.AddText is client now you have told me but I want it to trigger when the warden dies... Not any random member of guard team[/QUOTE]
Then change the if statement to what you want it to check......
Sorry, you need to Log In to post a reply to this thread.