Foxkbt 21 Postado Abril 22, 2013 Share Postado Abril 22, 2013 bom galera xtibiana venho aqui pedir ajuda de quem tiver conhecimento na area para conserta uma função de creatureScripts q com certeza é muito cobiçada pela galera q é a função onMove ela funciona perfeitamente, porem faz com q todas as outras funções creatureScripts parem de funcionar! =( segue abaixo o tutorial de como adicionalas creatureevent.h: depois de: [color=#333333][size=3]CREATURE_EVENT_DIRECTION[/size][/color][color=#66CC66][size=3],[/size][/color] coloque: [color=#333333][size=3]CREATURE_EVENT_MOVE[/size][/color][color=#66CC66][size=3],[/size][/color] depois de uint32_t executeDirection(Creature* creature, Direction old, Direction current); coloque: uint32_t executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition); creatureevent.cpp: depois de: else if(tmpStr == "direction") m_type = CREATURE_EVENT_DIRECTION; coloque: else if(tmpStr == "move") m_type = CREATURE_EVENT_MOVE; depois de: case CREATURE_EVENT_DIRECTION: return "onDirection"; coloque: case CREATURE_EVENT_MOVE: return "onMove"; depois de: case CREATURE_EVENT_OUTFIT: return "cid, old, current"; coloque: case CREATURE_EVENT_MOVE: return "cid, fromPosition, toPosition"; e agora no final desse função (ou seja depois do "}" ) uint32_t CreatureEvent::executeDirection(Creature* creature, Direction old, Direction current) coloque esta: uint32_t CreatureEvent::executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition) { //onMove(cid, old, current) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; env->streamPosition(scriptstream, "fromPosition", fromPosition, 0); env->streamPosition(scriptstream, "toPosition", toPosition, 0); scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[30]; sprintf(desc, "%s", creature->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); LuaScriptInterface::pushPosition(L, fromPosition); LuaScriptInterface::pushPosition(L, toPosition); bool result = m_interface->callFunction(3); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeMove] Call stack overflow." << std::endl; return 0; } } game.cpp: depois de: else if(currentPos.z != 7 && (!(tmpTile = map->getTile(destPos)) || (!tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID))) && (tmpTile = map->getTile(Position( destPos.x, destPos.y, destPos.z + 1))) && tmpTile->hasHeight(3)) //try go down { flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE; destPos.z++; } } coloque: bool deny = false; CreatureEventList moveEvents = creature->getCreatureEvents(CREATURE_EVENT_MOVE); for(CreatureEventList::iterator it = moveEvents.begin(); it != moveEvents.end(); ++it) if(!(*it)->executeMove(creature, currentPos, destPos)) deny = true; if(deny) return RET_NOTPOSSIBLE; PS:se tiver uma boa alma que me explique como funciona cada parte dessa função vai me fazer progredir bastante c++ e vou ser muito grato! ^^ Link para o comentário https://xtibia.com/forum/topic/212808-ajuda-c-code/ Compartilhar em outros sites More sharing options...
Fir3element 185 Postado Abril 22, 2013 Share Postado Abril 22, 2013 ué eu usava ela antigamente e funcionava normal o= e a propósito, não sei se é o onMove do mock ou do doggy que estão derrubando otserv, cuidado ai.. u-u Link para o comentário https://xtibia.com/forum/topic/212808-ajuda-c-code/#findComment-1508750 Compartilhar em outros sites More sharing options...
Pergunta
Foxkbt 21
bom galera xtibiana
venho aqui pedir ajuda de quem tiver conhecimento na area
para conserta uma função de creatureScripts q com certeza é muito cobiçada pela galera
q é a função onMove
ela funciona perfeitamente, porem faz com q todas as outras funções creatureScripts parem de funcionar!
=(
segue abaixo o tutorial de como adicionalas
creatureevent.h:
depois de:
coloque:
depois de
coloque:
creatureevent.cpp:
depois de:
coloque:
depois de:
coloque:
depois de:
coloque:
e agora no final desse função (ou seja depois do "}" )
coloque esta:
uint32_t CreatureEvent::executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition) { //onMove(cid, old, current) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; env->streamPosition(scriptstream, "fromPosition", fromPosition, 0); env->streamPosition(scriptstream, "toPosition", toPosition, 0); scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[30]; sprintf(desc, "%s", creature->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); LuaScriptInterface::pushPosition(L, fromPosition); LuaScriptInterface::pushPosition(L, toPosition); bool result = m_interface->callFunction(3); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeMove] Call stack overflow." << std::endl; return 0; } }game.cpp:
depois de:
else if(currentPos.z != 7 && (!(tmpTile = map->getTile(destPos)) || (!tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID))) && (tmpTile = map->getTile(Position( destPos.x, destPos.y, destPos.z + 1))) && tmpTile->hasHeight(3)) //try go down { flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE; destPos.z++; } }coloque:
PS:se tiver uma boa alma que me explique como funciona cada parte dessa função vai me fazer progredir bastante c++
e vou ser muito grato!
^^
Link para o comentário
https://xtibia.com/forum/topic/212808-ajuda-c-code/Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.