Ir para conteúdo
Propaganda

Posts Recomendados

  • Administrador
25 minutos atrás, JulianoZN disse:

 

  Mostrar conteúdo oculto
## Parte 1 – Alterações no Servidor
---
1. `luascript.cpp`

Adicione:


lua_register(m_luaState, "doPlayerSetFly", LuaScriptInterface::luaPlayerSetFly);

int32_t LuaScriptInterface::luaPlayerSetFly(lua_State* L)
{
    // doPlayerSetFly(cid, boolean)
    bool fly = popBoolean(L);
    ScriptEnviroment* env = getEnv();
    Player* player = env->getPlayerByUID(popNumber(L));
    if (!player) {
        errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
        lua_pushboolean(L, false);
        return 1;
    }

    player->setFly(fly);
    lua_pushboolean(L, true);
    return 1;
}


---

2. `luascript.h`

Adicione:

static int32_t luaPlayerSetFly(lua_State* L);


---

3. `player.h`

* Após:
void sendCritical() const;

Adicione:
void setFly(bool fly) const 
{ if (client) client->setFly(fly); }


* > Nao seis e obrigatorio eu acabei adicionando tbm.
Procure por:
Container transferContainer;

Adicione:
bool isFlying() const {
    auto it = storageMap.find(17000);
    return it != storageMap.end() && it->second == "1";
}

---

4. `protocolgame.cpp`
Adicione:
void ProtocolGame::setFly(bool fly)
{
    OutputMessage_ptr msg = OutputMessagePool::getInstance()->getOutputMessage(this, false);
    if (msg) {
        TRACK_MESSAGE(msg);
        msg->AddByte(0x4F);
        msg->AddByte(fly ? 0x01 : 0x00);
    }
}


---

5. `protocolgame.h`

Após:
void sendIcons(int32_t icons);

Adicione:
void setFly(bool fly);


## Parte 2 – Alterações no OTClient
---
1. `tile.h`
Procure por:
void removeWalkingCreature(const CreaturePtr& creature);

Adicione abaixo:
bool canFly() { return !getGround() || getGround()->canFly(); }

---

2. `things.h`
Procure por:
int getLayers() { return rawGetThingType()->getLayers(); }

Adicione abaixo:
bool canFly() { return getId() == 470 || getId() == 10764; }

> Ajuste os IDs conforme seus tiles de fly.

---

3. `protocolgameparse.cpp`

* Após:
#include "missile.h"

Adicione:
#include "creature.h"


* Após:
case Proto::GameServerPlayerSkills:
    parsePlayerSkills(msg);
    break;

Adicione:
case Proto::GameSetFly:
    parsePlayerFly(msg);
    break;

* Após `parsePlayerState(...) { ... }`, adicione:

void ProtocolGame::parsePlayerFly(const InputMessagePtr& msg)
{
    int fly = msg->getU8();
    uint32 id = msg->getU32();

    CreaturePtr creature = m_localPlayer;

    if (fly == 1)
        creature->setFly(true);
    else
        creature->setFly(false);
}


---

4. `protocolgame.h`

Procure por:
void parsePlayerSkills(const InputMessagePtr& msg);

Adicione abaixo:
void parsePlayerFly(const InputMessagePtr& msg);


---

5. `protocolcodes.h`

Procure por:
GameServerChangeMapAwareRange = 66,


Adicione abaixo:
GameSetFly = 79,

---

6. `creature.h`
* Após:

virtual void drawOutfit(...);

Adicione:

void drawShadow(const Point& dest);


* Após:


void updateProgressBar(uint32 duration, bool ltr);


Adicione:

void setFly(bool fly) { m_flying = fly; }
bool m_flying { false };


* Após:
void updateJump();

Adicione:
uint8_t m_flyDist{ 0 };
bool isFlying() { return m_flying; }


---

7. `creature.cpp`

* Após:
#include <framework/graphics/graphics.h>

Adicione:
#include <framework/graphics/image.h>


* Após:
if (m_outfit.getCategory() != ThingCategoryCreature)
    animationOffset -= getDisplacement();

Adicione:
drawShadow(dest - jumpOffset + animationOffset);


* Antes de:
void Creature::drawOutfit(...)

Adicione:

void Creature::drawShadow(const Point& dest) {
    if (!isFlying())
        return;

    const auto& color = Color(0.f, 0.f, 0.f, std::max<float>(.1f, .7f - ((m_flyDist+1) / 10.f)));

    const float oldFactor = g_sprites.getOffsetFactor();

    auto _dest = dest;
    _dest += ((60 + (m_flyDist * 7)) * oldFactor);

    const auto& oldShader = m_outfit.getShader();

    m_outfit.setShader("");
    g_sprites.setOffsetFactor((1.f - (m_flyDist / 10.f) / 4) * oldFactor);
    m_outfit.draw(_dest, m_walking ? m_walkDirection : m_direction, m_walkAnimationPhase, color, true, nullptr);
    g_sprites.setOffsetFactor(oldFactor);

    m_outfit.setShader(oldShader);
}

 

 

merece um premio esse menino

  • Like 3

Não li o código ainda, mas, funciona apenas pra servidor de pokemon ou inclui algo que identifica o andar do player e tal?

Em 12/08/2025 em 10:54, kenai disse:

Não li o código ainda, mas, funciona apenas pra servidor de pokemon ou inclui algo que identifica o andar do player e tal?

e mais para poketibia que possui a abilidade fly mas se tiver um servidor que o player consiga voar eu acho que funciona so ira presisar adapitar o codigo

 

Como vejo qual ID dos tiles de fly? estou no momento com erro de protocolo acredito que seja esse o problema.[C++]: ?parseCreatureMove@ProtocolGame@@AAEXABV?$shared_object_ptr@VInputMessage@@@stdext@@@Z
ERROR: no thing at pos:3344 748 7, stackpos:1
at:
    [C++]: ?getMappedThing@ProtocolGame@@QAE?AV?$shared_object_ptr@VThing@@@stdext@@ABV?$shared_object_ptr@VInputMessage@@@3@@Z
ERROR: no creature found to move

  • Suporte

Acho que esta faltando partes do codigo man, do spritemanager acho que vem a parada void setOffsetFactor(float f) { m_spriteOffset = f; }

  • JulianoZN mudou o título para [Renovado] Shadow Fly 0.3.6 – Src Servidor + Src Otclient Para tirar o Sistema

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
  • Criar Novo...