Lordbaxx 291 Postado Dezembro 21, 2016 Share Postado Dezembro 21, 2016 (editado) 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. Editado Dezembro 22, 2016 por Lordbaxx Link para o comentário Compartilhar em outros sites More sharing options...
samlecter 133 Postado Dezembro 22, 2016 Share Postado Dezembro 22, 2016 Vlw, rep+ Uma dúvida, não teria como tirar esse limite apenas com a source do server, mesmo que tivesse que adicionar cada ShotEffect novo? (do jeito que é feito com MagicEffect) Se tiver como, eu tenho os MagicEfffects configurados já, daí só copiar e renomear p/ os missiles, seria muito útil p/ os que não possuem source do otc. Link para o comentário Compartilhar em outros sites More sharing options...
Deadpool 862 Postado Dezembro 22, 2016 Share Postado Dezembro 22, 2016 15 horas atrás, samlecter disse: Vlw, rep+ Uma dúvida, não teria como tirar esse limite apenas com a source do server, mesmo que tivesse que adicionar cada ShotEffect novo? (do jeito que é feito com MagicEffect) Se tiver como, eu tenho os MagicEfffects configurados já, daí só copiar e renomear p/ os missiles, seria muito útil p/ os que não possuem source do otc. Acho que iria dá big no log do seu otc. Porque se ele não reconhecesse o efeito, ele iria spawmar vários erros no terminal do otc, o que iria causar "lag" no otc. Vlw lord, ótimo conteúdo como sempre. Link para o comentário Compartilhar em outros sites More sharing options...
Lordbaxx 291 Postado Dezembro 22, 2016 Autor Share Postado Dezembro 22, 2016 Obrigado @Deadpool! @samlecter, como o Deadpool falou, daria um log de erros enorme no seu OTclient. Mas aí vai um conselho, se tem um projeto que há foco em crescimento e longividade, trabalhe com um OTclient open source junto ao seu servidor, isso te facilita imensamente. Pois se não for agora, em um futuro próximo você precisará da source para efetuar alguma modificação com um requerimento profundo. Link para o comentário Compartilhar em outros sites More sharing options...
samlecter 133 Postado Dezembro 23, 2016 Share Postado Dezembro 23, 2016 Blz, vlw. Eu tenho a source do otc, mas compilar otc é bem chato, se o q eu disse antes funcionasse sem problemas, seria mais fácil pra mim. (configurei até 1500 effects em hexadecimal ) Link para o comentário Compartilhar em outros sites More sharing options...
Lordbaxx 291 Postado Dezembro 24, 2016 Autor Share Postado Dezembro 24, 2016 10 horas atrás, samlecter disse: Blz, vlw. Eu tenho a source do otc, mas compilar otc é bem chato, se o q eu disse antes funcionasse sem problemas, seria mais fácil pra mim. (configurei até 1500 effects em hexadecimal ) AHH, show de bola!! Com o CodeBlocks pode ser um pouco mais complicado sim, mas tenta com visual studio e as libs, é fácil de utilizar e bem prático também. Boa sorte, abraço! Link para o comentário Compartilhar em outros sites More sharing options...
Drakopoulos 219 Postado Dezembro 24, 2016 Share Postado Dezembro 24, 2016 Ótimo conteúdo Lord! Link para o comentário Compartilhar em outros sites More sharing options...
Lordbaxx 291 Postado Dezembro 24, 2016 Autor Share Postado Dezembro 24, 2016 Agora, Drakopoulos disse: Ótimo conteúdo Lord! Obrigado, amigo!! Super recomendo o uso, caso tenha interesse pode utilizar sem ficar com um pé atrás. Quem sabe em breve trago maiores modificações legais no OTclient. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados