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

TFS 1.X+ TFS 1.3 CTRL + ARROW for staff members ( NOT seeking onTurn event solutions! )

Snavy

Bakasta
Senator
Joined
Apr 1, 2012
Messages
1,249
Solutions
71
Reaction score
621
Location
Hell
I am trying to allow GM+ groups to be able to walk through solid objects as it has already been done in TFS 0.4.

I have found the following method in Game.cpp but I'm not sure how to modify it.

C++:
void Game::playerTurn(uint32_t playerId, Direction dir)
{
    Player* player = getPlayerByID(playerId);
    if (!player) {
        return;
    }

    if (!g_events->eventPlayerOnTurn(player, dir)) {
        return;
    }

    player->resetIdleTime();
    internalCreatureTurn(player, dir);
}


How can I allow GMs or higher groups to walk trough solid objects using CTRL + ARROW keys ?
 
Solution
Well I don't understand why you do not want to have it in lua.
However here's what you asked for.
C++:
void Game::playerTurn(uint32_t playerId, Direction dir)
{
    Player* player = getPlayerByID(playerId);
    if (!player) {
        return;
    }

    if (player->getGroup()->access) {
        if (player->getDirection() == dir) {
            auto pos = player->getPosition();
            auto nextPos = getNextPosition(dir, pos);
            internalTeleport(player, nextPos, true);
        }
    }

    if (!g_events->eventPlayerOnTurn(player, dir)) {
        return;
    }

    player->resetIdleTime();
    internalCreatureTurn(player, dir);
}
Well I don't understand why you do not want to have it in lua.
However here's what you asked for.
C++:
void Game::playerTurn(uint32_t playerId, Direction dir)
{
    Player* player = getPlayerByID(playerId);
    if (!player) {
        return;
    }

    if (player->getGroup()->access) {
        if (player->getDirection() == dir) {
            auto pos = player->getPosition();
            auto nextPos = getNextPosition(dir, pos);
            internalTeleport(player, nextPos, true);
        }
    }

    if (!g_events->eventPlayerOnTurn(player, dir)) {
        return;
    }

    player->resetIdleTime();
    internalCreatureTurn(player, dir);
}
 
Solution
Well I don't understand why you do not want to have it in lua.
However here's what you asked for.
C++:
void Game::playerTurn(uint32_t playerId, Direction dir)
{
    Player* player = getPlayerByID(playerId);
    if (!player) {
        return;
    }

    if (player->getGroup()->access) {
        if (player->getDirection() == dir) {
            auto pos = player->getPosition();
            auto nextPos = getNextPosition(dir, pos);
            internalTeleport(player, nextPos, true);
        }
    }

    if (!g_events->eventPlayerOnTurn(player, dir)) {
        return;
    }

    player->resetIdleTime();
    internalCreatureTurn(player, dir);
}


Lord pepe is very thankful to you, Master Evil hero
 
Well I don't understand why you do not want to have it in lua.
However here's what you asked for.
C++:
void Game::playerTurn(uint32_t playerId, Direction dir)
{
    Player* player = getPlayerByID(playerId);
    if (!player) {
        return;
    }

    if (player->getGroup()->access) {
        if (player->getDirection() == dir) {
            auto pos = player->getPosition();
            auto nextPos = getNextPosition(dir, pos);
            internalTeleport(player, nextPos, true);
        }
    }

    if (!g_events->eventPlayerOnTurn(player, dir)) {
        return;
    }

    player->resetIdleTime();
    internalCreatureTurn(player, dir);
}

I am not sure why, but at some places e.g mountain edges there are no tiles and yet I am able to walk a few more sqm's with CTRL+WALK.
Also I am suspecting that this might have been the cause of a few crashes where I could reproduce it atleast twice doing the same process.
( doesn't happen atm will keep lookin ).

Would It maybe be possible to not let the admin/gm walk onto places without any tiles?
 
that's already handled in internalTeleport function
C++:
Tile* toTile = map.getTile(newPos);
if (!toTile) {
    return RETURNVALUE_NOTPOSSIBLE;
}
Hit me up on Discord and show me how to reproduce it, might be able to find it out then
Evil Hero#8530
 
Back
Top