bitoca1995 0 #1 Postado 28 Fevereiro, 2018 Boa noite, eu utilizo o TFS 0.4 rev 3884 e ao colocar a função onmoveitem ( https://otland.net/threads/creatureevent-onmove-very-advanced.134016/ ) ele retorna esse erro na compilação: alguém poderia me ajudar por favor? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
0 Majesty 1755 #2 Postado 28 Fevereiro, 2018 Segui a função (https://otland.net/threads/creatureevent-onmove-very-advanced.134016/) e consegui compilar. Provavelmente você errou ao substituir o código no game.cpp. Siga a instalação dos códigos novamente com atenção e quando chegar até o game.cpp substitua a função inteira abaixo pela função que o usuário disponibilizou no tópico. Spoiler bool Game::playerMoveItem(uint32_t playerId, const Position& fromPos, uint16_t spriteId, int16_t fromStackpos, const Position& toPos, uint8_t count) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved() || player->hasFlag(PlayerFlag_CannotMoveItems)) return false; if(!player->canDoAction()) { uint32_t delay = player->getNextActionTime(); SchedulerTask* task = createSchedulerTask(delay, boost::bind(&Game::playerMoveItem, this, playerId, fromPos, spriteId, fromStackpos, toPos, count)); player->setNextActionTask(task); return false; } player->setNextActionTask(NULL); Cylinder* fromCylinder = internalGetCylinder(player, fromPos); uint8_t fromIndex = 0; if(fromPos.x == 0xFFFF) { if(fromPos.y & 0x40) fromIndex = static_cast<uint8_t>(fromPos.z); else fromIndex = static_cast<uint8_t>(fromPos.y); } else fromIndex = fromStackpos; Thing* thing = internalGetThing(player, fromPos, fromIndex, spriteId, STACKPOS_MOVE); if(!thing || !thing->getItem()) { player->sendCancelMessage(RET_NOTPOSSIBLE); return false; } Item* item = thing->getItem(); Cylinder* toCylinder = internalGetCylinder(player, toPos); uint8_t toIndex = 0; if(toPos.x == 0xFFFF) { if(toPos.y & 0x40) toIndex = static_cast<uint8_t>(toPos.z); else toIndex = static_cast<uint8_t>(toPos.y); } if(!fromCylinder || !toCylinder || !item || item->getClientID() != spriteId) { player->sendCancelMessage(RET_NOTPOSSIBLE); return false; } if(!player->hasCustomFlag(PlayerCustomFlag_CanPushAllItems) && (!item->isPushable() || (item->isLoadedFromMap() && (item->getUniqueId() != 0 || (item->getActionId() != 0 && item->getContainer()))))) { player->sendCancelMessage(RET_NOTMOVABLE); return false; } const Position &mapToPos = toCylinder->getTile()->getPosition(), &playerPos = player->getPosition(), &mapFromPos = fromCylinder->getTile()->getPosition(); if(playerPos.z > mapFromPos.z && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_FIRSTGOUPSTAIRS); return false; } if(playerPos.z < mapFromPos.z && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_FIRSTGODOWNSTAIRS); return false; } if(!Position::areInRange<1,1,0>(playerPos, mapFromPos) && !player->hasCustomFlag(PlayerCustomFlag_CanMoveFromFar)) { //need to walk to the item first before using it std::list<Direction> listDir; if(getPathToEx(player, item->getPosition(), listDir, 0, 1, true, true)) { Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::playerAutoWalk, this, player->getID(), listDir))); SchedulerTask* task = createSchedulerTask(std::max((int32_t)SCHEDULER_MINTICKS, player->getStepDuration()), boost::bind(&Game::playerMoveItem, this, playerId, fromPos, spriteId, fromStackpos, toPos, count)); player->setNextWalkActionTask(task); return true; } player->sendCancelMessage(RET_THEREISNOWAY); return false; } //hangable item specific code if(item->isHangable() && toCylinder->getTile()->hasProperty(SUPPORTHANGABLE)) { //destination supports hangable objects so need to move there first if(toCylinder->getTile()->hasProperty(ISVERTICAL)) { if(player->getPosition().x + 1 == mapToPos.x) { player->sendCancelMessage(RET_NOTPOSSIBLE); return false; } } else if(toCylinder->getTile()->hasProperty(ISHORIZONTAL)) { if(player->getPosition().y + 1 == mapToPos.y) { player->sendCancelMessage(RET_NOTPOSSIBLE); return false; } } if(!Position::areInRange<1,1,0>(playerPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanMoveFromFar)) { Position walkPos = mapToPos; if(toCylinder->getTile()->hasProperty(ISVERTICAL)) walkPos.x -= -1; if(toCylinder->getTile()->hasProperty(ISHORIZONTAL)) walkPos.y -= -1; Position itemPos = fromPos; int16_t itemStackpos = fromStackpos; if(fromPos.x != 0xFFFF && Position::areInRange<1,1,0>(mapFromPos, player->getPosition()) && !Position::areInRange<1,1,0>(mapFromPos, walkPos)) { //need to pickup the item first Item* moveItem = NULL; ReturnValue ret = internalMoveItem(player, fromCylinder, player, INDEX_WHEREEVER, item, count, &moveItem); if(ret != RET_NOERROR) { player->sendCancelMessage(ret); return false; } //changing the position since its now in the inventory of the player internalGetPosition(moveItem, itemPos, itemStackpos); } std::list<Direction> listDir; if(map->getPathTo(player, walkPos, listDir)) { Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::playerAutoWalk, this, player->getID(), listDir))); SchedulerTask* task = createSchedulerTask(std::max((int32_t)SCHEDULER_MINTICKS, player->getStepDuration()), boost::bind(&Game::playerMoveItem, this, playerId, itemPos, spriteId, itemStackpos, toPos, count)); player->setNextWalkActionTask(task); return true; } player->sendCancelMessage(RET_THEREISNOWAY); return false; } } if(!player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { if((std::abs(playerPos.x - mapToPos.x) > item->getThrowRange()) || (std::abs(playerPos.y - mapToPos.y) > item->getThrowRange()) || (std::abs(mapFromPos.z - mapToPos.z) * 4 > item->getThrowRange())) { player->sendCancelMessage(RET_DESTINATIONOUTOFREACH); return false; } } if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } ReturnValue ret = internalMoveItem(player, fromCylinder, toCylinder, toIndex, item, count, NULL); if(ret == RET_NOERROR) return true; player->sendCancelMessage(ret); return false; } Quando compilar, irá ocorrer um erro então basta apenas localizar o código e substituir: if(m_scriptData) scriptstream << *m_scriptData; Por: scriptstream << m_scriptData; O resultado deverá ser este: *Testado com TFS 0.4 rev 3884. Observação: Utilizei o Stian's Dev-Cpp 64 bits que pode ser encontrado para download neste tutorial: ----- Caso você continue com problemas, segue o download do game.cpp com a função substituída: http://www.mediafire.com/file/i7pj0qpuyprgq0v/game.cpp Uma maneira de você saber como substituir códigos, é abrir o arquivo com Notepad++ e clicar em uma '{' ou '}' , ficará selecionado em vermelho todo o código que tiver dentro de "{ }". Compartilhar este post Link para o post Compartilhar em outros sites
0 bitoca1995 0 #3 Postado 28 Fevereiro, 2018 cara, com teu game.cpp deu alguns erros, mas acho que era modificações que não tinham no meu, então só precisei alterar algumas coisas, mas no fim deu certo, muito obrigado.. agora precisava de uma creaturescripts pra 0.4 de antitrash house, não jogar lixo se n for o dono da casa, vc sabe algum 100% por favor? Compartilhar este post Link para o post Compartilhar em outros sites
0 Majesty 1755 #4 Postado 28 Fevereiro, 2018 É claro que não tinha mais modificações no game.cpp porque só modifiquei com a função onmoveitem do tópico do usuário da OTLand. Anti house trash para TFS 0.4 (8.6): https://otland.net/threads/searching-anti-house-trash-system-p.245283/#post-2385810 Compartilhar este post Link para o post Compartilhar em outros sites
0 bitoca1995 0 #5 Postado 28 Fevereiro, 2018 esse script tá dando o seguinte erro: no valid type for creature event.moveitem no distro quando do load na creaturescript Compartilhar este post Link para o post Compartilhar em outros sites
0 Majesty 1755 #6 Postado 28 Fevereiro, 2018 Este servidor TFS 0.4 rev3777 (8.6) editado por Fir3element possui o anti house trash, veja como funciona e tente adaptar no seu servidor: https://otland.net/threads/8-60-the-forgotten-server-0-4.240240/ A questão principal neste tópico de suporte foi respondida e o autor do tópico resolveu a questão. Este tópico está fechado agora. Se você tiver outras perguntas, crie um novo tópico. Compartilhar este post Link para o post Compartilhar em outros sites
Boa noite,
eu utilizo o TFS 0.4 rev 3884 e ao colocar a função onmoveitem ( https://otland.net/threads/creatureevent-onmove-very-advanced.134016/ ) ele retorna esse erro na compilação:
alguém poderia me ajudar por favor?
Obrigado.
Compartilhar este post
Link para o post
Compartilhar em outros sites