Olá galera, hoje vim trazer um tutorial bem completinho para vocês do sistema de "Target Animada pela source do OTC" renovada para otcliente 0.6.6 e 0.6.7 e espero que gostem
Imagens do Target Azul;;
Imagens do Target Vermelho;;
VIÍDEO:;;
TUTORIAL
1° Vai na pasta do seu otcliente e ache a pasta da source dele otclient-0.6.6\src\client dentro dela abre o arquivo creature.cpp e procure;;
void Creature::draw(const Point& dest, float scaleFactor, bool animate, LightView *lightView)
{
if(!canBeSeen())
return;
Point animationOffset = animate ? m_walkOffset : Point(0,0);
if(m_showTimedSquare && animate) {
g_painter->setColor(m_timedSquareColor);
g_painter->drawBoundingRect(Rect(dest + (animationOffset - getDisplacement() + 2)*scaleFactor, Size(28, 28)*scaleFactor), std::max<int>((int)(2*scaleFactor), 1));
g_painter->setColor(Color::white);
}
if(m_showStaticSquare && animate) {
g_painter->setColor(m_staticSquareColor);
g_painter->drawBoundingRect(Rect(dest + (animationOffset - getDisplacement())*scaleFactor, Size(Otc::TILE_PIXELS, Otc::TILE_PIXELS)*scaleFactor), std::max<int>((int)(2*scaleFactor), 1));
g_painter->setColor(Color::white);
}
internalDrawOutfit(dest + animationOffset * scaleFactor, scaleFactor, animate, animate, m_direction);
m_footStepDrawn = true;
if(lightView) {
Light light = rawGetThingType()->getLight();
if(m_light.intensity != light.intensity || m_light.color != light.color)
light = m_light;
// local player always have a minimum light in complete darkness
if(isLocalPlayer() && (g_map.getLight().intensity < 64 || m_position.z > Otc::SEA_FLOOR)) {
light.intensity = std::max<uint8>(light.intensity, 3);
if(light.color == 0 || light.color > 215)
light.color = 215;
}
if(light.intensity > 0)
lightView->addLightSource(dest + (animationOffset + Point(16,16)) * scaleFactor, scaleFactor, light);
}
}
altere para;;
void Creature::draw(const Point& dest, float scaleFactor, bool animate, LightView *lightView)
{
if(!canBeSeen())
return;
Point animationOffset = animate ? m_walkOffset : Point(0,0);
/*
if(m_showTimedSquare && animate) {
g_painter->setColor(m_timedSquareColor);
g_painter->drawBoundingRect(Rect(dest + (animationOffset - getDisplacement() + 2)*scaleFactor, Size(28, 28)*scaleFactor), std::max<int>((int)(2*scaleFactor), 1));
g_painter->setColor(Color::white);
}
if(m_showStaticSquare && animate) {
g_painter->setColor(m_staticSquareColor);
g_painter->drawBoundingRect(Rect(dest + (animationOffset - getDisplacement())*scaleFactor, Size(Otc::TILE_PIXELS, Otc::TILE_PIXELS)*scaleFactor), std::max<int>((int)(2*scaleFactor), 1));
g_painter->setColor(Color::white);
}
*/
if(m_showTimedSquare && animate) {
/*ImagePtr L3K0Tt = Image::load("data/images/target.png"); //se preferir usar por imagem
TexturePtr L3K0T = TexturePtr(new Texture(L3K0Tt, false));
g_painter->drawTexturedRect(Rect(dest + (animationOffset - getDisplacement() + 2)*scaleFactor, Size(L3K0T->getHeight(), L3K0T->getWidth())*scaleFactor), L3K0T);*/
EffectPtr efeitoL3K0T = EffectPtr(new Effect());
efeitoL3K0T->setId(653); //id da sprite do efeito
g_painter->setColor(m_timedSquareColor);
Rect rect = Rect(dest + (animationOffset - getDisplacement())*scaleFactor, Size(Otc::TILE_PIXELS, Otc::TILE_PIXELS)*scaleFactor);
g_painter->drawTexturedRect(rect, efeitoL3K0T->getThingType()->getTexture(0));
g_painter->setColor(Color::white); g_painter->setColor(Color::white); // by L3K0T
g_painter->setOpacity(0.9);
}
if(m_showStaticSquare && animate) {
/*ImagePtr L3K0Tt = Image::load("data/images/target.png"); //se preferir usar por imagem
TexturePtr L3K0T = TexturePtr(new Texture(L3K0Tt, false));
g_painter->drawTexturedRect(Rect(dest + (animationOffset - getDisplacement() + 2)*scaleFactor, Size(L3K0T->getHeight(), L3K0T->getWidth())*scaleFactor), L3K0T);*/
EffectPtr efeitoL3K0T = EffectPtr(new Effect());
efeitoL3K0T->setId(653); //id da sprite do efeito
g_painter->setColor(m_staticSquareColor);
Rect rect = Rect(dest + (animationOffset - getDisplacement())*scaleFactor, Size(Otc::TILE_PIXELS, Otc::TILE_PIXELS)*scaleFactor);
g_painter->drawTexturedRect(rect, efeitoL3K0T->getThingType()->getTexture(0));
g_painter->setColor(Color::white); //1 para não piscar e fixar no vermelho
}
internalDrawOutfit(dest + animationOffset * scaleFactor, scaleFactor, animate, animate, m_direction);
m_footStepDrawn = true;
if(lightView) {
Light light = rawGetThingType()->getLight();
if(m_light.intensity != light.intensity || m_light.color != light.color)
light = m_light;
// local player always have a minimum light in complete darkness
if(isLocalPlayer() && (g_map.getLight().intensity < 64 || m_position.z > Otc::SEA_FLOOR)) {
light.intensity = std::max<uint8>(light.intensity, 3);
if(light.color == 0 || light.color > 215)
light.color = 215;
}
if(light.intensity > 0)
lightView->addLightSource(dest + (animationOffset + Point(16,16)) * scaleFactor, scaleFactor, light);
}
}
salve.
2° agora volte na pasta da source do otclient e abra o arquivo thingtype.h e procure por;;
const TexturePtr& getTexture(int animationPhase);
altere para
/*const TexturePtr& getTexture(int animationPhase);*/
depois ache;;
std::vector<int> getSprites() { return m_spritesIndex; }
abaixo cole;;
const TexturePtr& getTexture(int animationPhase);
dps é só abrir o object guilder e importar o efeito do target;; >>>>> effect_653.obd tem outras sprite doadas por mim segue o link
Depois de recortar é só por o efeito no otc e colocar o ID da sprite ali aonde tá o numero 653 no código.
Ajudei?? REP+
Créditos:;
-Eu por alterar outras coisas que faltou.
-Jair Kevick (código base)