Ir para conteúdo
  • 0

Limite de efeitos


nociam

Pergunta

Bom pessoal segui esse topico sobre como liberar mais effect so que estou com um erro no cliente se alguem souber como arrumar ou o que pode estar acontecendo e me ajudar alis vai ajudar muita gente, outra quem tiver erro nas souces e porque tem que fazer rebuild f11 por isso muitos erro no action etc...

 

erro no otlient.

 

 

Exiting application..
== application started at Jan 15 2014 18:34:41
OTClient 0.6.2 rev 0 (devel) built on Apr 15 2013 for arch x86
ERROR: Unable to send extended opcode 1, extended opcodes are not enabled
ERROR: invalid effect id 36619
at:
[C++]: ProtocolGame::parseMagicEffect
ERROR: ProtocolGame parse message exception (159 bytes unread, last opcode is 50, prev opcode is 131): InputMessage eof reached
ERROR: ProtocolGame parse message exception (1 bytes unread, last opcode is 131, prev opcode is -1): InputMessage eof reached
ERROR: ProtocolGame parse message exception (1 bytes unread, last opcode is 131, prev opcode is -1): InputMessage eof reached
ERROR: ProtocolGame parse message exception (1 bytes unread, last opcode is 131, prev opcode is -1): InputMessage eof reached
ERROR: ProtocolGame parse message exception (1 bytes unread, last opcode is 131, prev opcode is -1): InputMessage eof reached
ERROR: ProtocolGame parse message exception (1 bytes unread, last opcode is 131, prev opcode is -1): InputMessage eof reached
Exiting application..

 

 

1- talvez na parte que estou mandando o arquivo do otclient seja o erro em game_things/things.lua

 

la no final estou colocando antes do ultimo end coloca isso g_game.enableFeature(GameMagicEffectU16)

 

thing.lua

 

filename = nil
loaded = false

function init()
connect(g_game, { onProtocolVersionChange = load })
end

function terminate()
disconnect(g_game, { onProtocolVersionChange = load })
end

function setFileName(name)
filename = name
end

function isLoaded()
return loaded
end

function load()
local version = g_game.getProtocolVersion()

local datPath, sprPath
if filename then
datPath = resolvepath('/things/' .. filename)
sprPath = resolvepath('/things/' .. filename)
else
datPath = resolvepath('/things/' .. version .. '/Tibia')
sprPath = resolvepath('/things/' .. version .. '/Tibia')
end

local errorMessage = ''
if not g_things.loadDat(datPath) then
errorMessage = errorMessage .. tr("Unable to load dat file, please place a valid dat in '%s'", datPath) .. '\n'
end
if not g_sprites.loadSpr(sprPath) then
errorMessage = errorMessage .. tr("Unable to load spr file, please place a valid spr in '%s'", sprPath)
end

loaded = (errorMessage:len() == 0)

if errorMessage:len() > 0 then
local messageBox = displayErrorBox(tr('Error'), errorMessage)
addEvent(function() messageBox:raise() messageBox:focus() end)

disconnect(g_game, { onProtocolVersionChange = load })
g_game.setProtocolVersion(0)
connect(g_game, { onProtocolVersionChange = load })
end
g_game.enableFeature(GameBlueNpcNameColor)
g_game.enableFeature(GameMagicEffectU16)
end

 

Editado por nociam
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Cara, cada tipo de variavel tem um numero especifico de bytes, quando voce troca o numero de bytes pro client ler, no seu caso de int8 pra int16, voce ta mudando de um pra dois bytes, mas o erro esta no seguinte, voce nao alterou no protocolgame.cpp/h o tipo da variavel, dai o server envia um byte e o cliente tenta ler dois, obvio que vai dar erros

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, cada tipo de variavel tem um numero especifico de bytes, quando voce troca o numero de bytes pro client ler, no seu caso de int8 pra int16, voce ta mudando de um pra dois bytes, mas o erro esta no seguinte, voce nao alterou no protocolgame.cpp/h o tipo da variavel, dai o server envia um byte e o cliente tenta ler dois, obvio que vai dar erros

Nas souces do servidor eu mudei isso

 

protocolgame.h

 

void sendMagicEffect(const Position& pos, uint16_t type);

 

protocolgame.cpp

 

void ProtocolGame::sendMagicEffect(const Position& pos, uint16_t type)

 

Agora no otclient nao eu sei que e nessa parte mais fazer o que nela

 

protocolgameparse.cpp

 

 

void ProtocolGame::parseMagicEffect(const InputMessagePtr& msg)

{

Position pos = getPosition(msg);

int effectId;

if(g_game.getFeature(Otc::GameMagicEffectU16))

effectId = msg->getU16();

else

effectId = msg->getU8();

 

if(!g_things.isValidDatId(effectId, ThingCategoryEffect)) {

g_logger.traceError(stdext::format("invalid effect id %d", effectId));

return;

}

 

EffectPtr effect = EffectPtr(new Effect());

effect->setId(effectId);

g_map.addThing(effect, pos);

}

 

Axei o erro dalv valeu pela diga

Pode fechar O Topico

Editado por nociam
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...