• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua How to get a best damage

darkmu

Well-Known Member
Joined
Aug 26, 2007
Messages
275
Solutions
1
Reaction score
50
Location
Paraná,Brazil
Can someone help, it's not accumulating the damage caused by the guild.

Lua:
local lastCrystal = CreatureEvent("LastCrystalOnHealthChange")

local guilds = {}

function lastCrystal.onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)

    if not creature:isMonster() then
        return primaryDamage, primaryType, secondaryDamage, secondaryType
    end
   
    local isGuild = false
    local damage = primaryDamage + secondaryDamage  
   
   if attacker:isPlayer() == false then
        if attacker:getMaster() == false then
            return
        end
       
        attacker = attacker:getMaster()
    end
   
    if attacker:getGuild() == nil then
        return
    end      
   
    for k,v in pairs(guilds) do
        if v[1] == attacker:getGuild():getId() then
            v = {v[1], v[2] + damage}
            isGuild = true          
            print(v[2] + damage)
            break
        end
    end          
   
    if not isGuild then
        guilds[#guilds+1] = {attacker:getGuild():getId(), damage}
    end  
   
    return primaryDamage, primaryType, secondaryDamage, secondaryType
end

lastCrystal:register()

~ Edit

But if anyone has something better, feel free.

Lua:
local lastCrystal = CreatureEvent("LastCrystalOnHealthChange")

local guilds = {}

function lastCrystal.onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)

    if not creature:isMonster() then
        return primaryDamage, primaryType, secondaryDamage, secondaryType
    end
    
    local isGuild = false
    local damage = math.abs(primaryDamage) + math.abs(secondaryDamage)
    
   if attacker:isPlayer() == false then
        if attacker:getMaster() == false then
            return
        end
        
        attacker = attacker:getMaster()
    end
    
    if attacker:getGuild() == nil then
        return
    end       
    
    for k,v in pairs(guilds) do
        if v[1] == attacker:getGuild():getId() then
            v = {v[1], v[2] + damage}
            guilds[v[1]][2] = v[2]
            isGuild = true   
            break
        end
    end       
    
    if not isGuild then
        guilds[#guilds+1] = {attacker:getGuild():getId(), damage}
    end   
    
    
    return primaryDamage, primaryType, secondaryDamage, secondaryType
end

lastCrystal:register()
 
Last edited:
I'd do something like this
Lua:
local lastCrystal = CreatureEvent("LastCrystalOnHealthChange")

local guilds = {
--	[guildId] = totalDamage
}

function lastCrystal.onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
	
	if not creature:isMonster() then
		return primaryDamage, primaryType, secondaryDamage, secondaryType
	end
	
	if not attacker:isPlayer() then
		local master = attacker:getMaster()
		if not master or not master:isPlayer() then
			return primaryDamage, primaryType, secondaryDamage, secondaryType
		end
		attacker = master
	end
	
	local guild = attacker:getGuild()
	if not guild then
		return primaryDamage, primaryType, secondaryDamage, secondaryType
	end
	
	local damage = math.abs(primaryDamage) + math.abs(secondaryDamage)
	local guildId = guild:getId()
	
	guilds[guildId] = guilds[guildId] and guilds[guildId] + damage or damage
	print("Guild ID: " .. guildId .. " - Total Damage: " .. guilds[guildId])
	
	return primaryDamage, primaryType, secondaryDamage, secondaryType
end

lastCrystal:register()
 
Back
Top