Add creature type icons for summons
This commit is contained in:
		
							parent
							
								
									81a705096a
								
							
						
					
					
						commit
						3b23b787f3
					
				| 
		 Before Width: | Height: | Size: 283 B After Width: | Height: | Size: 283 B  | 
| 
		 Before Width: | Height: | Size: 283 B After Width: | Height: | Size: 283 B  | 
| 
						 | 
					@ -33,6 +33,12 @@ NpcIconTrade = 2
 | 
				
			||||||
NpcIconQuest = 3
 | 
					NpcIconQuest = 3
 | 
				
			||||||
NpcIconTradeQuest = 4
 | 
					NpcIconTradeQuest = 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CreatureTypePlayer = 0
 | 
				
			||||||
 | 
					CreatureTypeMonster = 1
 | 
				
			||||||
 | 
					CreatureTypeNpc = 2
 | 
				
			||||||
 | 
					CreatureTypeSummonOwn = 3
 | 
				
			||||||
 | 
					CreatureTypeSummonOther = 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- @}
 | 
					-- @}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function getNextSkullId(skullId)
 | 
					function getNextSkullId(skullId)
 | 
				
			||||||
| 
						 | 
					@ -104,6 +110,16 @@ function getEmblemImagePath(emblemId)
 | 
				
			||||||
  return path
 | 
					  return path
 | 
				
			||||||
end
 | 
					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)
 | 
					function getIconImagePath(iconId)
 | 
				
			||||||
  local path
 | 
					  local path
 | 
				
			||||||
  if iconId == NpcIconChat then
 | 
					  if iconId == NpcIconChat then
 | 
				
			||||||
| 
						 | 
					@ -139,6 +155,13 @@ function Creature:onEmblemChange(emblemId)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function Creature:onTypeChange(typeId)
 | 
				
			||||||
 | 
					  local imagePath = getTypeImagePath(typeId)
 | 
				
			||||||
 | 
					  if imagePath then
 | 
				
			||||||
 | 
					    self:setTypeTexture(imagePath)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function Creature:onIconChange(iconId)
 | 
					function Creature:onIconChange(iconId)
 | 
				
			||||||
  local imagePath = getIconImagePath(iconId)
 | 
					  local imagePath = getIconImagePath(iconId)
 | 
				
			||||||
  if imagePath then
 | 
					  if imagePath then
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,6 +53,7 @@ Creature::Creature() : Thing()
 | 
				
			||||||
    m_skull = Otc::SkullNone;
 | 
					    m_skull = Otc::SkullNone;
 | 
				
			||||||
    m_shield = Otc::ShieldNone;
 | 
					    m_shield = Otc::ShieldNone;
 | 
				
			||||||
    m_emblem = Otc::EmblemNone;
 | 
					    m_emblem = Otc::EmblemNone;
 | 
				
			||||||
 | 
					    m_type = Proto::CreatureTypeUnknown;
 | 
				
			||||||
    m_icon = Otc::NpcIconNone;
 | 
					    m_icon = Otc::NpcIconNone;
 | 
				
			||||||
    m_lastStepDirection = Otc::InvalidDirection;
 | 
					    m_lastStepDirection = Otc::InvalidDirection;
 | 
				
			||||||
    m_nameCache.setFont(g_fonts.getFont("verdana-11px-rounded"));
 | 
					    m_nameCache.setFont(g_fonts.getFont("verdana-11px-rounded"));
 | 
				
			||||||
| 
						 | 
					@ -309,6 +310,11 @@ void Creature::drawInformation(const Point& point, bool useGray, const Rect& par
 | 
				
			||||||
        Rect emblemRect = Rect(backgroundRect.x() + 13.5 + 12, backgroundRect.y() + 16, m_emblemTexture->getSize());
 | 
					        Rect emblemRect = Rect(backgroundRect.x() + 13.5 + 12, backgroundRect.y() + 16, m_emblemTexture->getSize());
 | 
				
			||||||
        g_painter->drawTexturedRect(emblemRect, m_emblemTexture);
 | 
					        g_painter->drawTexturedRect(emblemRect, m_emblemTexture);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if(m_type != Proto::CreatureTypeUnknown && m_typeTexture) {
 | 
				
			||||||
 | 
					        g_painter->setColor(Color::white);
 | 
				
			||||||
 | 
					        Rect typeRect = Rect(backgroundRect.x() + 13.5 + 12 + 12, backgroundRect.y() + 16, m_typeTexture->getSize());
 | 
				
			||||||
 | 
					        g_painter->drawTexturedRect(typeRect, m_typeTexture);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    if(m_icon != Otc::NpcIconNone && m_iconTexture) {
 | 
					    if(m_icon != Otc::NpcIconNone && m_iconTexture) {
 | 
				
			||||||
        g_painter->setColor(Color::white);
 | 
					        g_painter->setColor(Color::white);
 | 
				
			||||||
        Rect iconRect = Rect(backgroundRect.x() + 13.5 + 12, backgroundRect.y() + 5, m_iconTexture->getSize());
 | 
					        Rect iconRect = Rect(backgroundRect.x() + 13.5 + 12, backgroundRect.y() + 5, m_iconTexture->getSize());
 | 
				
			||||||
| 
						 | 
					@ -745,6 +751,12 @@ void Creature::setEmblem(uint8 emblem)
 | 
				
			||||||
    callLuaField("onEmblemChange", m_emblem);
 | 
					    callLuaField("onEmblemChange", m_emblem);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Creature::setType(uint8 type)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_type = type;
 | 
				
			||||||
 | 
					    callLuaField("onTypeChange", m_type);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Creature::setIcon(uint8 icon)
 | 
					void Creature::setIcon(uint8 icon)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_icon = icon;
 | 
					    m_icon = icon;
 | 
				
			||||||
| 
						 | 
					@ -776,12 +788,16 @@ void Creature::setEmblemTexture(const std::string& filename)
 | 
				
			||||||
    m_emblemTexture = g_textures.getTexture(filename);
 | 
					    m_emblemTexture = g_textures.getTexture(filename);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Creature::setTypeTexture(const std::string& filename)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    m_typeTexture = g_textures.getTexture(filename);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Creature::setIconTexture(const std::string& filename)
 | 
					void Creature::setIconTexture(const std::string& filename)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_iconTexture = g_textures.getTexture(filename);
 | 
					    m_iconTexture = g_textures.getTexture(filename);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
void Creature::setSpeedFormula(double speedA, double speedB, double speedC)
 | 
					void Creature::setSpeedFormula(double speedA, double speedB, double speedC)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_speedFormula[Otc::SpeedFormulaA] = speedA;
 | 
					    m_speedFormula[Otc::SpeedFormulaA] = speedA;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,10 +62,12 @@ public:
 | 
				
			||||||
    void setSkull(uint8 skull);
 | 
					    void setSkull(uint8 skull);
 | 
				
			||||||
    void setShield(uint8 shield);
 | 
					    void setShield(uint8 shield);
 | 
				
			||||||
    void setEmblem(uint8 emblem);
 | 
					    void setEmblem(uint8 emblem);
 | 
				
			||||||
 | 
					    void setType(uint8 type);
 | 
				
			||||||
    void setIcon(uint8 icon);
 | 
					    void setIcon(uint8 icon);
 | 
				
			||||||
    void setSkullTexture(const std::string& filename);
 | 
					    void setSkullTexture(const std::string& filename);
 | 
				
			||||||
    void setShieldTexture(const std::string& filename, bool blink);
 | 
					    void setShieldTexture(const std::string& filename, bool blink);
 | 
				
			||||||
    void setEmblemTexture(const std::string& filename);
 | 
					    void setEmblemTexture(const std::string& filename);
 | 
				
			||||||
 | 
					    void setTypeTexture(const std::string& filename);
 | 
				
			||||||
    void setIconTexture(const std::string& filename);
 | 
					    void setIconTexture(const std::string& filename);
 | 
				
			||||||
    void setPassable(bool passable) { m_passable = passable; }
 | 
					    void setPassable(bool passable) { m_passable = passable; }
 | 
				
			||||||
    void setSpeedFormula(double speedA, double speedB, double speedC);
 | 
					    void setSpeedFormula(double speedA, double speedB, double speedC);
 | 
				
			||||||
| 
						 | 
					@ -87,6 +89,7 @@ public:
 | 
				
			||||||
    uint8 getSkull() { return m_skull; }
 | 
					    uint8 getSkull() { return m_skull; }
 | 
				
			||||||
    uint8 getShield() { return m_shield; }
 | 
					    uint8 getShield() { return m_shield; }
 | 
				
			||||||
    uint8 getEmblem() { return m_emblem; }
 | 
					    uint8 getEmblem() { return m_emblem; }
 | 
				
			||||||
 | 
					    uint8 getType() { return m_type; }
 | 
				
			||||||
    uint8 getIcon() { return m_icon; }
 | 
					    uint8 getIcon() { return m_icon; }
 | 
				
			||||||
    bool isPassable() { return m_passable; }
 | 
					    bool isPassable() { return m_passable; }
 | 
				
			||||||
    Point getDrawOffset();
 | 
					    Point getDrawOffset();
 | 
				
			||||||
| 
						 | 
					@ -153,10 +156,12 @@ protected:
 | 
				
			||||||
    uint8 m_skull;
 | 
					    uint8 m_skull;
 | 
				
			||||||
    uint8 m_shield;
 | 
					    uint8 m_shield;
 | 
				
			||||||
    uint8 m_emblem;
 | 
					    uint8 m_emblem;
 | 
				
			||||||
 | 
					    uint8 m_type;
 | 
				
			||||||
    uint8 m_icon;
 | 
					    uint8 m_icon;
 | 
				
			||||||
    TexturePtr m_skullTexture;
 | 
					    TexturePtr m_skullTexture;
 | 
				
			||||||
    TexturePtr m_shieldTexture;
 | 
					    TexturePtr m_shieldTexture;
 | 
				
			||||||
    TexturePtr m_emblemTexture;
 | 
					    TexturePtr m_emblemTexture;
 | 
				
			||||||
 | 
					    TexturePtr m_typeTexture;
 | 
				
			||||||
    TexturePtr m_iconTexture;
 | 
					    TexturePtr m_iconTexture;
 | 
				
			||||||
    stdext::boolean<true> m_showShieldTexture;
 | 
					    stdext::boolean<true> m_showShieldTexture;
 | 
				
			||||||
    stdext::boolean<false> m_shieldBlink;
 | 
					    stdext::boolean<false> m_shieldBlink;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -456,6 +456,7 @@ void Client::registerLuaFunctions()
 | 
				
			||||||
    g_lua.bindClassMemberFunction<Creature>("getSkull", &Creature::getSkull);
 | 
					    g_lua.bindClassMemberFunction<Creature>("getSkull", &Creature::getSkull);
 | 
				
			||||||
    g_lua.bindClassMemberFunction<Creature>("getShield", &Creature::getShield);
 | 
					    g_lua.bindClassMemberFunction<Creature>("getShield", &Creature::getShield);
 | 
				
			||||||
    g_lua.bindClassMemberFunction<Creature>("getEmblem", &Creature::getEmblem);
 | 
					    g_lua.bindClassMemberFunction<Creature>("getEmblem", &Creature::getEmblem);
 | 
				
			||||||
 | 
					    g_lua.bindClassMemberFunction<Creature>("getType", &Creature::getType);
 | 
				
			||||||
    g_lua.bindClassMemberFunction<Creature>("getIcon", &Creature::getIcon);
 | 
					    g_lua.bindClassMemberFunction<Creature>("getIcon", &Creature::getIcon);
 | 
				
			||||||
    g_lua.bindClassMemberFunction<Creature>("setOutfit", &Creature::setOutfit);
 | 
					    g_lua.bindClassMemberFunction<Creature>("setOutfit", &Creature::setOutfit);
 | 
				
			||||||
    g_lua.bindClassMemberFunction<Creature>("getOutfit", &Creature::getOutfit);
 | 
					    g_lua.bindClassMemberFunction<Creature>("getOutfit", &Creature::getOutfit);
 | 
				
			||||||
| 
						 | 
					@ -469,6 +470,7 @@ void Client::registerLuaFunctions()
 | 
				
			||||||
    g_lua.bindClassMemberFunction<Creature>("setSkullTexture", &Creature::setSkullTexture);
 | 
					    g_lua.bindClassMemberFunction<Creature>("setSkullTexture", &Creature::setSkullTexture);
 | 
				
			||||||
    g_lua.bindClassMemberFunction<Creature>("setShieldTexture", &Creature::setShieldTexture);
 | 
					    g_lua.bindClassMemberFunction<Creature>("setShieldTexture", &Creature::setShieldTexture);
 | 
				
			||||||
    g_lua.bindClassMemberFunction<Creature>("setEmblemTexture", &Creature::setEmblemTexture);
 | 
					    g_lua.bindClassMemberFunction<Creature>("setEmblemTexture", &Creature::setEmblemTexture);
 | 
				
			||||||
 | 
					    g_lua.bindClassMemberFunction<Creature>("setTypeTexture", &Creature::setTypeTexture);
 | 
				
			||||||
    g_lua.bindClassMemberFunction<Creature>("setIconTexture", &Creature::setIconTexture);
 | 
					    g_lua.bindClassMemberFunction<Creature>("setIconTexture", &Creature::setIconTexture);
 | 
				
			||||||
    g_lua.bindClassMemberFunction<Creature>("showStaticSquare", &Creature::showStaticSquare);
 | 
					    g_lua.bindClassMemberFunction<Creature>("showStaticSquare", &Creature::showStaticSquare);
 | 
				
			||||||
    g_lua.bindClassMemberFunction<Creature>("hideStaticSquare", &Creature::hideStaticSquare);
 | 
					    g_lua.bindClassMemberFunction<Creature>("hideStaticSquare", &Creature::hideStaticSquare);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -278,7 +278,8 @@ namespace Proto {
 | 
				
			||||||
        CreatureTypeMonster,
 | 
					        CreatureTypeMonster,
 | 
				
			||||||
        CreatureTypeNpc,
 | 
					        CreatureTypeNpc,
 | 
				
			||||||
        CreatureTypeSummonOwn,
 | 
					        CreatureTypeSummonOwn,
 | 
				
			||||||
        CreatureTypeSummonOther
 | 
					        CreatureTypeSummonOther,
 | 
				
			||||||
 | 
					        CreatureTypeUnknown = 0xFF
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    enum CreaturesIdRange {
 | 
					    enum CreaturesIdRange {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2031,6 +2031,12 @@ void ProtocolGame::parseCreatureType(const InputMessagePtr& msg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint32 id = msg->getU32();
 | 
					    uint32 id = msg->getU32();
 | 
				
			||||||
    uint8 type = msg->getU8();
 | 
					    uint8 type = msg->getU8();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    CreaturePtr creature = g_map.getCreatureById(id);
 | 
				
			||||||
 | 
					    if(creature)
 | 
				
			||||||
 | 
					        creature->setType(type);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        g_logger.traceError("could not get creature");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ProtocolGame::setMapDescription(const InputMessagePtr& msg, int x, int y, int z, int width, int height)
 | 
					void ProtocolGame::setMapDescription(const InputMessagePtr& msg, int x, int y, int z, int width, int height)
 | 
				
			||||||
| 
						 | 
					@ -2262,8 +2268,9 @@ CreaturePtr ProtocolGame::getCreature(const InputMessagePtr& msg, int type)
 | 
				
			||||||
        int shield = msg->getU8();
 | 
					        int shield = msg->getU8();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // emblem is sent only when the creature is not known
 | 
					        // emblem is sent only when the creature is not known
 | 
				
			||||||
        int emblem = -1;
 | 
					        int8 emblem = -1;
 | 
				
			||||||
        int icon = -1;
 | 
					        int8 creatureType = -1;
 | 
				
			||||||
 | 
					        int8 icon = -1;
 | 
				
			||||||
        bool unpass = true;
 | 
					        bool unpass = true;
 | 
				
			||||||
        uint8 mark;
 | 
					        uint8 mark;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2271,7 +2278,7 @@ CreaturePtr ProtocolGame::getCreature(const InputMessagePtr& msg, int type)
 | 
				
			||||||
            emblem = msg->getU8();
 | 
					            emblem = msg->getU8();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(g_game.getFeature(Otc::GameThingMarks)) {
 | 
					        if(g_game.getFeature(Otc::GameThingMarks)) {
 | 
				
			||||||
            msg->getU8(); // creature type for summons
 | 
					            creatureType = msg->getU8();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(g_game.getFeature(Otc::GameCreatureIcons)) {
 | 
					        if(g_game.getFeature(Otc::GameCreatureIcons)) {
 | 
				
			||||||
| 
						 | 
					@ -2302,8 +2309,13 @@ CreaturePtr ProtocolGame::getCreature(const InputMessagePtr& msg, int type)
 | 
				
			||||||
            creature->setShield(shield);
 | 
					            creature->setShield(shield);
 | 
				
			||||||
            creature->setPassable(!unpass);
 | 
					            creature->setPassable(!unpass);
 | 
				
			||||||
            creature->setLight(light);
 | 
					            creature->setLight(light);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if(emblem != -1)
 | 
					            if(emblem != -1)
 | 
				
			||||||
                creature->setEmblem(emblem);
 | 
					                creature->setEmblem(emblem);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if(creatureType != -1)
 | 
				
			||||||
 | 
					                creature->setType(creatureType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if(icon != -1)
 | 
					            if(icon != -1)
 | 
				
			||||||
                creature->setIcon(icon);
 | 
					                creature->setIcon(icon);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue