Pesquisar na Comunidade
Mostrando resultados para as tags ''shot effects''.
Encontrado 1 registro
-
Bom, ai vai um código para quem quer ou pretende utilizar muitos shotEffects em seu servidor. Após o tutorial o seu novo limite será de 65.534 shotEffects. No TFS 0.3.6 Vá em Protocolgame.cpp e procure por: void ProtocolGamesendDistanceShoot(const Position& from, const Position& to, uint8_t type) substitua por: void ProtocolGamesendDistanceShoot(const Position& from, const Position& to, uint16_t type) Ainda em Protocolgame.cpp procure a função: void ProtocolGameAddDistanceShoot(NetworkMessage_ptr msg, const Position& from, const Position& to, uint8_t type){ msg->AddByte(0x85); msg->AddPosition(from); msg->AddPosition(to); msg->AddByte(type + 1);} E substitua por: void ProtocolGameAddDistanceShoot(NetworkMessage_ptr msg, const Position& from, const Position& to, uint16_t type){ msg->AddByte(0x85); msg->AddPosition(from); msg->AddPosition(to); msg->AddU16(type + 1);} Agora em Protocolgame.h procure por: void AddDistanceShoot(NetworkMessage_ptr msg, const Position& from, const Position& to, uint8_t type); E substitua por: void AddDistanceShoot(NetworkMessage_ptr msg, const Position& from, const Position& to, uint16_t type); Depois procure por: void sendDistanceShoot(const Position& from, const Position& to, uint8_t type); E substitua por: void sendDistanceShoot(const Position& from, const Position& to, uint16_t type); Agora vamos em Game.cpp Procure por: void GameaddDistanceEffect(const Position& fromPos, const Position& toPos, uint8_t effect) E substitua por: void GameaddDistanceEffect(const Position& fromPos, const Position& toPos, uint16_t effect) Agora procure por: void GameaddDistanceEffect(const SpectatorVec& list, const Position& fromPos, const Position& toPos, uint8_t effect) E substitua por: void GameaddDistanceEffect(const SpectatorVec& list, const Position& fromPos, const Position& toPos, uint16_t effect) Agora vamos em Game.h Procure por: void addDistanceEffect(const SpectatorVec& list, const Position& fromPos, const Position& toPos, uint8_t effect); E substitua por: void addDistanceEffect(const SpectatorVec& list, const Position& fromPos, const Position& toPos, uint16_t effect); Agora procure por: void addDistanceEffect(const Position& fromPos, const Position& toPos, uint8_t effect); E substitua por: void addDistanceEffect(const Position& fromPos, const Position& toPos, uint16_t effect); Agora vamos em Player.h Procure por: void sendDistanceShoot(const Position& from, const Position& to, uint8_t type) const E substitua por: void sendDistanceShoot(const Position& from, const Position& to, uint16_t type) const Agora vamos até Const.h Procure por: enum ShootEffect_t E lá depois do ultimo ShotEffect adicione: SHOOT_EFFECT_SEMFIM = 0xFFFE, //65534 E altere o SHOT_EFFECT_LAST dessa forma: SHOOT_EFFECT_LAST = SHOOT_EFFECT_SEMFIM, Agora vamos em Tools.cpp Procure por: ShootTypeNames shootTypeNames[] = E lá depois de: {"cake", SHOOT_EFFECT_CAKE} Vocês adicionam: {"semfim", SHOOT_EFFECT_SEMFIM} Ficando assim: {"cake", SHOOT_EFFECT_CAKE}, {"semfim", SHOOT_EFFECT_SEMFIM} Compile e agora vamos no seu servidor data/lib/000-constant.lua Antes de: CONST_ANI_WEAPONTYPE Vocês adicionam: CONST_ANI_SEMFIM = 65534 Depois procure por: CONST_ANI_NONE E mudem para: CONST_ANI_NONE = 65534 Agora ache: CONST_ANI_LAST E deixe assim: CONST_ANI_LAST = CONST_ANI_SEMFIM Pronto, a parte do código de fonte/servidor está concluída. "Ah, então já posso usar inúmeros shotEffects.." NÃO! Vamos agora as modificações no nosso OTclient. Apenas uma observação: FFFE em decimal é 65534, ou seja, seu servidor irá ler shot Effects do 0 até o 65534, evitando trabalho de vocês adicionarem 1 à 1. Abra a source do seu OTclient com Microsoft Visual Studio ou CodeBlocks e vamos lá: Vá em Protocolgameparse.cpp Procure a função: void ProtocolGameparseDistanceMissile(const InputMessagePtr& msg){ Position fromPos = getPosition(msg); Position toPos = getPosition(msg); int shotId = msg->getU8(); if(!g_things.isValidDatId(shotId, ThingCategoryMissile)) { g_logger.traceError(stdextformat("invalid missile id %d", shotId)); return; } MissilePtr missile = MissilePtr(new Missile()); missile->setId(shotId); missile->setPath(fromPos, toPos); g_map.addThing(missile, fromPos);} Substitua por: void ProtocolGameparseDistanceMissile(const InputMessagePtr& msg){ Position fromPos = getPosition(msg); Position toPos = getPosition(msg); int shotId = msg->getU16(); if(!g_things.isValidDatId(shotId, ThingCategoryMissile)) { g_logger.traceError(stdextformat("invalid missile id %d", shotId)); return; } MissilePtr missile = MissilePtr(new Missile()); missile->setId(shotId); missile->setPath(fromPos, toPos); g_map.addThing(missile, fromPos);} Ainda na source do seu OTclient vá em Const.h Procure por: LastGameFeature = 101 E adicione antes: GameDistanceMissileU16 = 67, DETALHE: Observe o número anterior, o meu é 66, por isso o novo que usei foi 67. Feito isso, compile seu OTclient. Depois vão em OTclient/modules/things/things.lua E dentro da função: function load() Adicione a feature: g_game.enableFeature(GameDistanceMissileU16) Salvem e pronto, felicidades com seus 65534 ShotEffects. Atenciosamente, Douglas! Créditos Douglas (Lordbaxx) - Trabalhei no OTclient para fazer com que o código funcionasse sem estorva. KotZletY - Consegui entender mais sobre, graças á ele.