Worked for TFS 0.3.6
Add it on creaturescripts:
Before:
Add:
Before:
Add:
Before:
Add:
before:
add:
Before:
uint32_t CreatureEvent::executeLogout(Player* player, bool forceLogout)
add:
Now on creaturescript.h
Before:
Add:
Before:
Add:
Now on game.cpp
Find function bool Game::playerMoveItem(uint32_t playerId, const Position& fromPos,...
Inside it find this:
And next add it:
Done
You can do it:
Remenber, you cant do it:
if frompos == {x=100,y=100,z=100} then
because frompos return a stackpos, so you have to do it:
if frompos == {x=100,y=100,z=100,stackpos=255} then
Add it on creaturescripts:
Before:
Code:
bool CreatureEvents::playerLogout(Player* player, bool forceLogout)
Code:
uint32_t CreatureEvents::executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos)
{
// fire global event if is registered
for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it)
{
if(it->second->getEventType() == CREATURE_EVENT_MOVEITEM){
if(!it->second->executeMoveItem(actor,item,frompos,pos))
return 0;
}
}
return 1;
}
Code:
else if(tmpStr == "kill")
m_type = CREATURE_EVENT_KILL;
Code:
else if(tmpStr == "moveitem")
m_type = CREATURE_EVENT_MOVEITEM;
Code:
case CREATURE_EVENT_DEATH:
return "onDeath";
Code:
case CREATURE_EVENT_MOVEITEM:
return "onMoveItem";
Code:
case CREATURE_EVENT_KILL:
return "cid, target, lastHit";
Code:
case CREATURE_EVENT_MOVEITEM:
return "moveItem, frompos, topos, cid";
uint32_t CreatureEvent::executeLogout(Player* player, bool forceLogout)
add:
Code:
uint32_t CreatureEvent::executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos)
{
//onMoveItem(moveItem, frompos, position, cid)
if(m_interface->reserveEnv())
{
ScriptEnviroment* env = m_interface->getEnv();
if(m_scripted == EVENT_SCRIPT_BUFFER)
{
env->setRealPos(pos);
std::stringstream scriptstream;
env->streamThing(scriptstream, "moveItem", item, env->addThing(item));
env->streamPosition(scriptstream, "position", frompos, 0);
env->streamPosition(scriptstream, "position", pos, 0);
scriptstream << "local cid = " << env->addThing(actor) << std::endl;
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[35];
sprintf(desc, "%s", player->getName().c_str());
env->setEventDesc(desc);
#endif
env->setScriptId(m_scriptId, m_interface);
env->setRealPos(pos);
lua_State* L = m_interface->getState();
m_interface->pushFunction(m_scriptId);
LuaScriptInterface::pushThing(L, item, env->addThing(item));
LuaScriptInterface::pushPosition(L, frompos, 0);
LuaScriptInterface::pushPosition(L, pos, 0);
lua_pushnumber(L, env->addThing(actor));
bool result = m_interface->callFunction(4);
m_interface->releaseEnv();
return result;
}
}
else
{
std::cout << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl;
return 0;
}
}
Before:
Code:
uint32_t executePrepareDeath(Creature* creature, DeathList deathList);
Code:
uint32_t executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos);
Code:
bool playerLogout(Player* player, bool forceLogout);
Code:
uint32_t executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos);
Find function bool Game::playerMoveItem(uint32_t playerId, const Position& fromPos,...
Inside it find this:
Code:
if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere))
{
player->sendCancelMessage(RET_CANNOTTHROW);
return false;
}
Code:
Item* tileItem = NULL;
if(!g_creatureEvents->executeMoveItems(player,item,mapFromPos, mapToPos)){
return false;
}
Done
You can do it:
Lua:
function onMoveItem(moveItem, frompos, position, cid)
if moveitem.itemid == 6500 then
doPlayerSendTextMessage(cid,25,'This item is blocked! you cannot move it!')
return false
end
end
if frompos == {x=100,y=100,z=100} then
because frompos return a stackpos, so you have to do it:
if frompos == {x=100,y=100,z=100,stackpos=255} then