• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

Lua Problem canWalkthrough DP

gmstrikker

Well-Known Member
Joined
Jul 30, 2014
Messages
458
Solutions
1
Reaction score
50
I edit on my source (searching here, on this forum), to players can walk on others players on safe zone, but it's dont work so fine, if im on DP and put item, other player can come and stole my item!!! How to fix it?

Code:
// players poderem entrar dentro do outro numa safezone
bool Player::canWalkthrough(const Creature* creature) const
{
   if(creature == this || creature->isWalkable() ||
   (creature->getMaster() && creature->getMaster() != this && canWalkthrough(creature->getMaster())))
   return true;

   const Player* player = creature->getPlayer();
   if(!player)
   return false;

   if(
   (
   (
   (
   (
   player->getVocation()->isAttackable() &&
   player->getLevel() < (uint32_t)g_config.getNumber(ConfigManager::PROTECTION_LEVEL)
   )
   || (
   player->getTile()->hasFlag(TILESTATE_PROTECTIONZONE) &&
   !player->getTile()->hasFlag(TILESTATE_HOUSE)
   )
   )
   ) && player->getTile()->ground &&
   player->getTile()->ground->getID() != 11063
   ) && (
   !player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges)
   || player->getAccess() <= getAccess()
   )
   ) return true;

   return (player->isGhost() && getGhostAccess() < player->getGhostAccess())
   || (isGhost() && getGhostAccess() > player->getGhostAccess());
}
 
It's something wrong with your script tile onStepIn to depot.
It should check if there is player and break if true.
Show your script movements/scripts/tiles.lua

Your bug happens probably because you or someone added in source that you can pass through players in safe zone but forgot about depot tiles.
 
I have it and have 2 problems:
1- GOD cant walk under monsters (its so bad)
2- You problem :(

I'm waiting your topic to fix my erros :(
 
So how about posting your scripts? example:
Code:
movements/scripts/tiles.lua
and show me your
Code:
data/XML/groups.xml
I can't help if i have no information about your server, its kinda impossible. In front of me is still a long way to become a wizard to guess your scripts.
Telling me your TFS version could help alot too.
 
I think error is on sources, but im noob, then idk...

groups.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<groups>
   <group id="1" name="Player"/>
   <group id="2" name="Tutor" flags="16809984" customFlags="2" access="1" violationReasons="4" nameViolationFlags="2"/>
   <group id="3" name="Senior Tutor" flags="68736352256" customFlags="14" access="2" violationReasons="10" nameViolationFlags="2" statementViolationFlags="63" maxVips="200"/>
   <group id="4" name="Gamemaster" flags="3808558964575" customFlags="257215" access="3" violationReasons="19" nameViolationFlags="10" statementViolationFlags="69" depotLimit="3000" maxVips="300" outfit="75"/>
   <group id="5" name="Community Manager" flags="3840774348794" customFlags="781823" access="4" violationReasons="23" nameViolationFlags="42" statementViolationFlags="213" depotLimit="4000" maxVips="400" outfit="266"/>
   <group id="6" name="God" flags="3845069447162" customFlags="50331647" access="5" violationReasons="23" nameViolationFlags="426" statementViolationFlags="469" depotLimit="5000" maxVips="500" outfit="302"/>
</groups>

data/movemments/scripts/tiles.lua
Code:
local config = {
   maxLevel = getConfigInfo('maximumDoorLevel')
}

local increasingItems = {[416] = 417, [426] = 425, [446] = 447, [3216] = 3217, [3202] = 3215, [11062] = 11063}
local decreasingItems = {[417] = 416, [425] = 426, [447] = 446, [3217] = 3216, [3215] = 3202, [11063] = 11062}
local depots = {2589, 2590, 2591, 2592}

local checkCreature = {isPlayer, isMonster, isNpc}
local function pushBack(cid, position, fromPosition, displayMessage)
   doTeleportThing(cid, fromPosition, false)
   doSendMagicEffect(position, CONST_ME_MAGIC_BLUE)
   if(displayMessage) then
     doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "The tile seems to be protected against unwanted intruders.")
   end
end

function onStepIn(cid, item, position, fromPosition)
   if(not increasingItems[item.itemid]) then
     return false
   end

   if(not isPlayerGhost(cid)) then
     doTransformItem(item.uid, increasingItems[item.itemid])
   end

   if(item.actionid >= 194 and item.actionid <= 196) then
     local f = checkCreature[item.actionid - 193]
     if(f(cid)) then
       pushBack(cid, position, fromPosition, false)
     end

     return true
   end

   if(item.actionid >= 191 and item.actionid <= 193) then
     local f = checkCreature[item.actionid - 190]
     if(not f(cid)) then
       pushBack(cid, position, fromPosition, false)
     end

     return true
   end

   if(not isPlayer(cid)) then
     return true
   end

   if(item.actionid == 189 and not isPremium(cid)) then
     pushBack(cid, position, fromPosition, true)
     return true
   end

   local gender = item.actionid - 186
   if(isInArray({PLAYERSEX_FEMALE,  PLAYERSEX_MALE, PLAYERSEX_GAMEMASTER}, gender)) then
     if(gender ~= getPlayerSex(cid)) then
       pushBack(cid, position, fromPosition, true)
     end

     return true
   end

   local skull = item.actionid - 180
   if(skull >= SKULL_NONE and skull <= SKULL_BLACK) then
     if(skull ~= getCreatureSkullType(cid)) then
       pushBack(cid, position, fromPosition, true)
     end

     return true
   end

   local group = item.actionid - 150
   if(group >= 0 and group < 30) then
     if(group > getPlayerGroupId(cid)) then
       pushBack(cid, position, fromPosition, true)
     end

     return true
   end

   local vocation = item.actionid - 100
   if(vocation >= 0 and vocation < 50) then
     local playerVocationInfo = getVocationInfo(getPlayerVocation(cid))
     if(playerVocationInfo.id ~= vocation and playerVocationInfo.fromVocation ~= vocation) then
       pushBack(cid, position, fromPosition, true)
     end

     return true
   end

   if(item.actionid >= 1000 and item.actionid <= config.maxLevel) then
     if(getPlayerLevel(cid) < item.actionid - 1000) then
       pushBack(cid, position, fromPosition, true)
     end

     return true
   end

   if(item.actionid ~= 0 and getPlayerStorageValue(cid, item.actionid) <= 0) then
     pushBack(cid, position, fromPosition, true)
     return true
   end

   if(getTileInfo(position).protection) then
     local depotPos, depot = getCreatureLookPosition(cid), {}
     depotPos.stackpos = STACKPOS_GROUND
     while(true) do
       if(not getTileInfo(depotPos).depot) then
         break
       end

       depotPos.stackpos = depotPos.stackpos + 1
       depot = getThingFromPos(depotPos)
       if(depot.uid == 0) then
         break
       end

       if(isInArray(depots, depot.itemid)) then
         local depotItems = getPlayerDepotItems(cid, getDepotId(depot.uid))
         doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, "Your depot contains " .. depotItems .. " item" .. (depotItems > 1 and "s" or "") .. ".")
         break
       end
     end

     return true
   end

   return false
end

function onStepOut(cid, item, position, fromPosition)
   if(not decreasingItems[item.itemid]) then
     return false
   end

   if(not isPlayerGhost(cid)) then
     doTransformItem(item.uid, decreasingItems[item.itemid])
     return true
   end

   return false
end
 
Back
Top