Skip to content

Commit

Permalink
bugfix: kill tracking (#3861)
Browse files Browse the repository at this point in the history
Bugfix:
* returns `false` if it fails to set `monsterType` (instead of returning nil when it finds it)
* `monster:getType()` instead of `monster.getType()`

Optimizations:
* 1 function instead of 2
* Invokes `getType()` 1 time instead of 2 times.
* Invokes `getOutfit()` 1 time instead of 6 times.
* instantiate monsterType as a local
* no need to confirm that networkMessage is set in conditional statements, since it is created locally
* no need for `elseif`, or a conditional statement to determine need to send message to self, since it has already returned something otherwise.
  • Loading branch information
Znote committed Dec 18, 2021
1 parent 9b11664 commit b811fe6
Showing 1 changed file with 39 additions and 38 deletions.
77 changes: 39 additions & 38 deletions data/lib/core/player.lua
Original file line number Diff line number Diff line change
Expand Up @@ -313,43 +313,44 @@ function Player.getWeaponType(self)
return WEAPON_NONE
end

local function prepareUpdateKillTrackerMsg(monster, corpse)
monsterType = monster:getType()
if monsterType then
return nil
end
local networkMessage = NetworkMessage()
networkMessage:addByte(0xD1)
networkMessage:addString(monster:getName())
networkMessage:addU16(monsterType:getOutfit().lookType or 19)
networkMessage:addByte(monsterType:getOutfit().lookHead)
networkMessage:addByte(monsterType:getOutfit().lookBody)
networkMessage:addByte(monsterType:getOutfit().lookLegs)
networkMessage:addByte(monsterType:getOutfit().lookFeet)
networkMessage:addByte(monsterType:getOutfit().lookAddons)
networkMessage:addByte(corpse:getSize())
for a = corpse:getSize() - 1, 0, -1 do
local item = corpse:getItem(a)
networkMessage:addItem(item)
end
return networkMessage
end

function Player.updateKillTracker(self, monster, corpse)
monsterType = monster.getType()
msg = prepareUpdateKillTrackerMsg(monster, corpse)
if self:getParty() and msg then
msg:sendToPlayer(self:getParty():getLeader())
local membersList = self:getParty():getMembers()
for i = 1, #membersList do
local player = membersList[i]
if player then
msg:sendToPlayer(player)
end
end
msg:delete()
elseif msg then
msg:sendToPlayer(self)
msg:delete()
end
local monsterType = monster:getType()
if not monsterType then
return false
end

local monsterOutfit = monsterType:getOutfit()

local networkMessage = NetworkMessage()
networkMessage:addByte(0xD1)
networkMessage:addString(monster:getName())
networkMessage:addU16(monsterOutfit.lookType or 19)
networkMessage:addByte(monsterOutfit.lookHead)
networkMessage:addByte(monsterOutfit.lookBody)
networkMessage:addByte(monsterOutfit.lookLegs)
networkMessage:addByte(monsterOutfit.lookFeet)
networkMessage:addByte(monsterOutfit.lookAddons)
networkMessage:addByte(corpse:getSize())

for i = corpse:getSize() - 1, 0, -1 do
local item = corpse:getItem(i)
networkMessage:addItem(item)
end

if self:getParty() then
networkMessage:sendToPlayer(self:getParty():getLeader())
local membersList = self:getParty():getMembers()
for i = 1, #membersList do
local player = membersList[i]
if player then
networkMessage:sendToPlayer(player)
end
end
networkMessage:delete()
return true
end

networkMessage:sendToPlayer(self)
networkMessage:delete()
return true
end

0 comments on commit b811fe6

Please sign in to comment.