I recently installed M9K weapons, but only as skins in my PointShop. (Yeah, Pointshop) Lately players have pointed out that my leaderboards were no longer working so I checked the damage type and it turns out to be 8194 (DMG_ALWAYSGIB) when they were originally DMG_BULLET. What could cause the weapons to change damage type, even the stock/vanilla weapons?
---------------------------------
Update: I'll update my OP, but I installed a fresh new server, spawned bots, set up a hook on player death to print damagetype by the weapon, and I'm receiving 8194/4096 for stock/vanilla TTT weapons.
[CODE]hook.Add("DoPlayerDeath", "Test", function(ply, killer, dmginfo)
killer:PrintMessage(3, dmginfo:GetDamageType())
end)[/CODE]
I'm not sure what else it could be other than Gmod or TTT possibly updating lately? The reason I say that was that it worked a week ago.
Maybe it does something on the EntityTakeDamage hook (search for it)
[QUOTE=tommy228;46041897]Maybe it does something on the EntityTakeDamage hook (search for it)[/QUOTE]
By searching for it, what exactly do you mean? Searching through files for EntityTakeDamage, or using the hook to see what happens when a player takes damage by one of the weapons?
The ID it returns from dmginfo:GetDamageType() is 8194. I misstook it for DMG_ALWAYSGIB which is 8192.
[QUOTE=serfma;46041952]By searching for it, what exactly do you mean? Searching through files for EntityTakeDamage, or using the hook to see what happens when a player takes damage by one of the weapons?[/QUOTE]
Search through your files for EntityTakeDamage.
Here's every file I've found that has EntityTakeDamage.
TTTDamageLogs\lua\damagelog_events\damages.lua
[CODE]function event:EntityTakeDamage(ent, dmginfo)
local att = dmginfo:GetAttacker()
if not (ent.IsGhost and ent:IsGhost()) and ent:IsPlayer() and (IsValid(att) and att:IsPlayer()) and ent != att then
local damages = dmginfo:GetDamage()
if math.floor(damages) > 0 then
local tbl = {
[1] = ent:Nick(),
[2] = ent:GetRole(),
[3] = att:Nick(),
[4] = att:GetRole(),
[5] = math.Round(damages),
[6] = Damagelog:WeaponFromDmg(dmginfo),
[7] = ent:SteamID(),
[8] = att:SteamID()
}
if Damagelog:IsTeamkill(tbl[2], tbl[4]) then
tbl.icon = { "icon16/exclamation.png" }
else
local found_dmg = false
for k,v in pairs(Damagelog.DamageTable) do
if type(v) == "table" and Damagelog.events[v.id] and Damagelog.events[v.id].IsDamage then
if v.time >= Damagelog.Time - 10 and v.time <= Damagelog.Time then
found_dmg = true
break
end
end
end
if not found_dmg then
local first
local shoots = {}
for k,v in pairs(Damagelog.ShootTables[Damagelog.CurrentRound] or {}) do
if k >= Damagelog.Time - 10 and k <= Damagelog.Time then
shoots[k] = v
end
end
for k,v in pairs(shoots) do
if not first or k < first then
first = k
end
end
if shoots[first] then
for k,v in pairs(shoots[first]) do
if v[1] == ent:Nick() then
tbl.icon = { "icon16/exclamation.png", "The victim may have shot first (see the damage information section for more info!)" }
end
end
end
end
end
self.CallEvent(tbl)
end
end
end[/CODE]
TTTDamageLogs\lua\damagelog_events\fall_damage.lua
[CODE]function event:EntityTakeDamage(ent, dmginfo)
local att = dmginfo:GetAttacker()
if not (ent.IsGhost and ent:IsGhost()) and ent:IsPlayer() and att == game.GetWorld() and dmginfo:GetDamageType() == DMG_FALL then
local damages = dmginfo:GetDamage()
if math.floor(damages) > 0 then
local tbl = {
[1] = ent:Nick(),
[2] = ent:GetRole(),
[3] = math.Round(damages),
[4] = ent:SteamID()
}
local push = ent.was_pushed
if push and math.max(push.t or 0, push.hurt or 0) > CurTime() - 4 then
tbl[5] = true
tbl[6] = push.att:Nick()
tbl[7] = push.att:GetRole()
tbl[8] = push.att:SteamID()
self.CallEvent(tbl)
else
local timername = "timerFallDamage_"..tostring(ent:UniqueID())
if timer.Exists(timername) then
if ent.FallDamageTable then
ent.FallDamageTable[3] = math.Round(ent.FallDamageTable[3]+damages)
end
else
timer.Create(timername, 0.1, 1, function()
if IsValid(ent) and ent.FallDamageTable then
self.CallEvent(ent.FallDamageTable, 6, 7)
end
end)
tbl[5] = false
tbl[6] = Damagelog.Time
local index = Damagelog.DamageTable[1] == "empty" and #Damagelog.DamageTable or #Damagelog.DamageTable + 1
tbl[7] = index
Damagelog.DamageTable[index] = "ignore"
ent.FallDamageTable = tbl
end
end
end
end
end[/CODE]
terrortown/gamemode/player.lua
[CODE]function GM:EntityTakeDamage(ent, dmginfo)
if not IsValid(ent) then return end
local att = dmginfo:GetAttacker()
if not GAMEMODE:AllowPVP() then
-- if player vs player damage, or if damage versus a prop, then zero
if (ent:IsExplosive() or (ent:IsPlayer() and IsValid(att) and att:IsPlayer())) then
dmginfo:ScaleDamage(0)
dmginfo:SetDamage(0)
end
elseif ent:IsPlayer() then
GAMEMODE:PlayerTakeDamage(ent, dmginfo:GetInflictor(), att, dmginfo:GetDamage(), dmginfo)
elseif ent:IsExplosive() then
-- When a barrel hits a player, that player damages the barrel because
-- Source physics. This gives stupid results like a player who gets hit
-- with a barrel being blamed for killing himself or even his attacker.
if IsValid(att) and att:IsPlayer() and
dmginfo:IsDamageType(DMG_CRUSH) and
IsValid(ent:GetPhysicsAttacker()) then
dmginfo:SetAttacker(ent:GetPhysicsAttacker())
dmginfo:ScaleDamage(0)
dmginfo:SetDamage(0)
end
elseif ent.is_pinned and ent.OnPinnedDamage then
ent:OnPinnedDamage(dmginfo)
dmginfo:SetDamage(0)
end
end[/CODE]
Update: I'm using a test server and I'm going to install a fresh new gmod server and try it again and see what happens.
Update2: Everything is vanilla, yet I'm still getting weird damage types. Is it possible a GMod/TTT update broke this?
Sorry, you need to Log In to post a reply to this thread.