-- @docclass Creature -- @docconsts @{ NpcIconNone = 0 NpcIconChat = 1 NpcIconTrade = 2 NpcIconQuest = 3 NpcIconTradeQuest = 4 NpcIconTraveler = 5 NpcIconHireling = 7 CreatureTypePlayer = 0 CreatureTypeMonster = 1 CreatureTypeNpc = 2 CreatureTypeSummonOwn = 3 CreatureTypeSummonOther = 4 CreatureTypeHidden = 5 VocationsServer = { None = 0, Sorcerer = 1, Druid = 2, Paladin = 3, Knight = 4, MasterSorcerer = 5, ElderDruid = 6, RoyalPaladin = 7, EliteKnight = 8, Monk = 9, ExaltedMonk = 10, Brujo = 11, -- OT-MMO Bardo = 12, -- OT-MMO Gunslinger = 13, -- OT-MMO } VocationsClient = { None = 0, Knight = 1, Paladin = 2, Sorcerer = 3, Druid = 4, Monk = 5, EliteKnight = 11, RoyalPaladin = 12, MasterSorcerer = 13, ElderDruid = 14, ExaltedMonk = 15, Brujo = 6, -- OT-MMO (clientid de vocations.xml) Bardo = 7, -- OT-MMO (clientid de vocations.xml) Gunslinger = 8, -- OT-MMO (clientid de vocations.xml) } -- @} function getNextSkullId(skullId) if skullId == SkullRed or skullId == SkullBlack then return SkullBlack end return SkullRed end function getSkullImagePath(skullId) local path if skullId == SkullYellow then path = '/images/game/skulls/skull_yellow' elseif skullId == SkullGreen then path = '/images/game/skulls/marca_grupo' -- OT-MMO: marca dorada #c7a86b en vez de la calavera verde del grupo elseif skullId == SkullWhite then path = '/images/game/skulls/skull_white' elseif skullId == SkullRed then path = '/images/game/skulls/skull_red' elseif skullId == SkullBlack then path = '/images/game/skulls/skull_black' elseif skullId == SkullOrange then path = '/images/game/skulls/skull_orange' end return path end function getShieldImagePathAndBlink(shieldId) local path, blink if shieldId == ShieldWhiteYellow then path, blink = '/images/game/shields/shield_yellow_white', false elseif shieldId == ShieldWhiteBlue then path, blink = '/images/game/shields/shield_blue_white', false elseif shieldId == ShieldBlue or shieldId == ShieldYellow or shieldId == ShieldBlueSharedExp or shieldId == ShieldYellowSharedExp or shieldId == ShieldBlueNoSharedExpBlink or shieldId == ShieldYellowNoSharedExpBlink or shieldId == ShieldBlueNoSharedExp or shieldId == ShieldYellowNoSharedExp then -- OT-MMO: el escudo de grupo se oculta (imagen vacia); la marca dorada va en el hueco de la calavera path, blink = '/images/game/skulls/vacio', false elseif shieldId == ShieldGray then path, blink = '/images/game/shields/shield_gray', false end return path, blink end function getEmblemImagePath(emblemId) local path if emblemId == EmblemGreen then path = '/images/game/emblems/emblem_green' elseif emblemId == EmblemRed then path = '/images/game/emblems/emblem_red' elseif emblemId == EmblemBlue then path = '/images/game/emblems/emblem_blue' elseif emblemId == EmblemMember then path = '/images/game/emblems/emblem_member' elseif emblemId == EmblemOther then path = '/images/game/emblems/emblem_other' end return path end function getTypeImagePath(creatureType) local path if creatureType == CreatureTypeSummonOwn then path = '/images/game/creaturetype/summon_own' elseif creatureType == CreatureTypeSummonOther then path = '/images/game/creaturetype/summon_other' end return path end function getIconImagePath(iconId) local path if iconId == NpcIconChat then path = '/images/game/npcicons/icon_chat' elseif iconId == NpcIconTrade then path = '/images/game/npcicons/icon_trade' elseif iconId == NpcIconQuest then path = '/images/game/npcicons/icon_quest' elseif iconId == NpcIconTradeQuest then path = '/images/game/npcicons/icon_tradequest' elseif iconId == NpcIconTraveler then path = '/images/game/npcicons/icon_traveler' elseif iconId == NpcIconHireling then path = '/images/game/npcicons/npc_hireling' end return path end function getIconsImagePath(category) if category == 1 then return '/images/game/creatureicons/modifications' end return '/images/game/creatureicons/quests' end function Creature:onIconsChange(icon, category, count) local imagePath = getIconsImagePath(category) if imagePath then local clipX = (icon - 1) * 11 self:setIconsTexture(imagePath, torect(clipX .. ' 0 11 11'), count) end -- Apply fiendish text shader only to monsters and only when the icon matches if type(self.isMonster) ~= 'function' or not self:isMonster() then return end if category == 1 and icon == 5 then self:setNameShader('Text - Gold Outline') elseif self.getNameShader and self:getNameShader() == 'Text - Gold Outline' then -- Reset only if we previously applied the fiendish shader self:setNameShader('Text - Default') end end function Creature:onSkullChange(skullId) local imagePath = getSkullImagePath(skullId) if imagePath then self:setSkullTexture(imagePath) end end function Creature:onShieldChange(shieldId) local imagePath, blink = getShieldImagePathAndBlink(shieldId) if imagePath then self:setShieldTexture(imagePath, blink) end end function Creature:onEmblemChange(emblemId) local imagePath = getEmblemImagePath(emblemId) if imagePath then self:setEmblemTexture(imagePath) end end function Creature:onTypeChange(typeId) local imagePath = getTypeImagePath(typeId) if imagePath then self:setTypeTexture(imagePath) end end function Creature:onIconChange(iconId) local imagePath = getIconImagePath(iconId) if imagePath then self:setIconTexture(imagePath) end end function Creature.isDruid(self) local vocation = self:getVocation() return vocation == VocationsClient.Druid or vocation == VocationsClient.ElderDruid end function Creature.isSorcerer(self) local vocation = self:getVocation() return vocation == VocationsClient.Sorcerer or vocation == VocationsClient.MasterSorcerer end function Creature.isPaladin(self) local vocation = self:getVocation() return vocation == VocationsClient.Paladin or vocation == VocationsClient.RoyalPaladin end function Creature.isKnight(self) local vocation = self:getVocation() return vocation == VocationsClient.Knight or vocation == VocationsClient.EliteKnight end function Creature.isMonk(self) local vocation = self:getVocation() return vocation == VocationsClient.Monk or vocation == VocationsClient.ExaltedMonk end