ROBLOX 2007 host script
-- declarations
local port = 0
local sleepTime = 10
-- establish this peer as the Server
local ns = game:service("NetworkServer")
game:service("Players"):setAbuseReportUrl("http://www.roblox.com/AbuseReport/InGameChatHandler.ashx")
-- utility
function waitForChild(parent, childName)
while true do
local child = parent:findFirstChild(childName)
if child then
return child
end
parent.ChildAdded:wait()
end
end
-- returns the player object that killed this humanoid
-- returns nil if the killer is no longer in the game
function getKillerOfHumanoidIfStillInGame(humanoid)
-- check for kill tag on humanoid - may be more than one - todo: deal with this
local tag = humanoid:findFirstChild("creator")
-- find player with name on tag
if tag then
local killer = tag.Value
if killer.Parent then -- killer still in game
return killer
end
end
return nil
end
-- send kill and death stats when a player dies
function onDied(victim, humanoid)
local killer = getKillerOfHumanoidIfStillInGame(humanoid)
local victorId = 0
if killer then
victorId = killer.userId
print("STAT: kill by " .. victorId .. " of " .. victim.userId)
game:httpGet("http://www.roblox.com/Game/Statistics.ashx?TypeID=15&UserID=" .. victorId .. "&AssociatedUserID=" .. victim.userId .. "&AssociatedPlaceID=0")
end
print("STAT: death of " .. victim.userId .. " by " .. victorId)
game:httpGet("http://www.roblox.com/Game/Statistics.ashx?TypeID=16&UserID=" .. victim.userId .. "&AssociatedUserID=" .. victorId .. "&AssociatedPlaceID=0")
end
-- listen for the death of a Player
function createDeathMonitor(player)
-- we don't need to clean up old monitors or connections since the Character will be destroyed soon
if player.Character then
local humanoid = waitForChild(player.Character, "Humanoid")
humanoid.Died:connect(
function ()
onDied(player, humanoid)
end
)
end
end
-- listen to all Players' Characters
game:service("Players").ChildAdded:connect(
function (player)
createDeathMonitor(player)
player.Changed:connect(
function (property)
if property=="Character" then
createDeathMonitor(player)
end
end
)
end
)
-- This code might move to C++
function characterRessurection(player)
if player.Character then
local humanoid = player.Character.Humanoid
humanoid.Died:connect(function() wait(5) player:LoadCharacter() end)
end
end
game:service("Players").PlayerAdded:connect(function(player)
print("Player " .. player.userId .. " added")
characterRessurection(player)
player.Changed:connect(function(name)
if name=="Character" then
characterRessurection(player)
end
end)
end)
if port>0 then
-- Now start the connection
ns:start(port, sleepTime)
end
game:service("RunService"):run()