• 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!

[TFS1.3] magic walls safe mode

nighor

New Member
Joined
Aug 5, 2019
Messages
5
Reaction score
0
Hello,
I set wild growths and magic walls to safe mode (11098, 11099).
I can walk trough them but problem is that monsters walk trough them too.
Any idea how to fix it?
 
data/scripts/monsterdeterrent.lua
Lua:
monsterDeterrent = MoveEvent()

monstersCantWalkOnTheseItemIds = {11098, 11099}
for _,itemid in pairs(monstersCantWalkOnTheseItemIds) do
    monsterDeterrent:id(itemid)
end

function monsterDeterrent.onStepIn(creature, item, position, fromPosition)
    if creature:isMonster() then
        creature:teleportTo(fromPosition, false)
    end
    return false
end

monsterDeterrent:register()
 
data/scripts/monsterdeterrent.lua
Lua:
monsterDeterrent = MoveEvent()

monstersCantWalkOnTheseItemIds = {11098, 11099}
for _,itemid in pairs(monstersCantWalkOnTheseItemIds) do
    monsterDeterrent:id(itemid)
end

function monsterDeterrent.onStepIn(creature, item, position, fromPosition)
    if creature:isMonster() then
        creature:teleportTo(fromPosition, false)
    end
    return false
end

monsterDeterrent:register()

Not really good solution since monster still have those tiles in their path finding structures and this may probably break monster walking completely. Best way would be to edit function in tile.cpp: Tile::queryAdd
 
data/scripts/monsterdeterrent.lua
Lua:
monsterDeterrent = MoveEvent()

monstersCantWalkOnTheseItemIds = {11098, 11099}
for _,itemid in pairs(monstersCantWalkOnTheseItemIds) do
    monsterDeterrent:id(itemid)
end

function monsterDeterrent.onStepIn(creature, item, position, fromPosition)
    if creature:isMonster() then
        creature:teleportTo(fromPosition, false)
    end
    return false
end

monsterDeterrent:register()
I've tried something like that already, but creatures still "think" they can pass trough wall and they all getting stacked on 1 square.
Just like on this video:
 
As Gunz sugessted I edited tile.cpp, queryADD function,
I'm trying to add something like that
Code:
ReturnValue Tile::queryAdd(int32_t, const Thing& thing, uint32_t, uint32_t flags, Creature*) const
{
***
            const Item* item = thing.getItem();
            if (const Monster* monster = creature->getMonster()) {
            if ((item->getID() == 11099 || item->getID() == 110098) && !monster->isPet()) {
                return RETURNVALUE_NOTPOSSIBLE;
            }
            }
***
}
Maybe someone have idea what i should modify in it becouse its not working.
I recive "Segmentation fault" in console on launch OT
 
As Gunz sugessted I edited tile.cpp, queryADD function,
I'm trying to add something like that
Code:
ReturnValue Tile::queryAdd(int32_t, const Thing& thing, uint32_t, uint32_t flags, Creature*) const
{
***
            const Item* item = thing.getItem();
            if (const Monster* monster = creature->getMonster()) {
            if ((item->getID() == 11099 || item->getID() == 110098) && !monster->isPet()) {
                return RETURNVALUE_NOTPOSSIBLE;
            }
            }
***
}
Maybe someone have idea what i should modify in it becouse its not working.
I recive "Segmentation fault" in console on launch OT
got fixed?
 
Back
Top