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

Blokada przechodzenia przez graczy

Jest to w source/player.cpp, lecz nie mam pojęcia jak to przerobić by zablokować przechodzenie.
Code:
bool Player::canWalkthrough(const Creature* creature) const
{
   if(creature == this || hasCustomFlag(PlayerCustomFlag_CanWalkthrough) || creature->isWalkable() ||
     (creature->getMaster() && creature->getMaster() != this && canWalkthrough(creature->getMaster())))
     return true;

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

   if((((g_game.getWorldType() == WORLDTYPE_OPTIONAL && !player->isEnemy(this, true) &&
     player->getVocation()->isAttackable()) || player->getTile()->hasFlag(TILESTATE_PROTECTIONZONE) || (player->getVocation()->isAttackable() &&
     player->getLevel() < (uint32_t)g_config.getNumber(ConfigManager::PROTECTION_LEVEL))) && player->getTile()->ground &&
     Item::items[player->getTile()->ground->getID()].walkStack) && (!player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges)
     || player->getAccess() <= getAccess()))
     return true;

   return (player->isGhost() && getGhostAccess() < player->getGhostAccess())
     || (isGhost() && getGhostAccess() > player->getGhostAccess());
}


Działa to tak, że w pz każdy może przechodzić przez siebie, poza pz levele wyższe niż 25(PROTECTION LEVEL) przez levele niższe niż 25.
 
Podpowiem ci:
* LUA: player->getTile()->ground->getID() != 11060
 
To jest prosty skrypt ja dla Ciebie nie będę go pisał bo mam na głowie swój serwer który i tak jest jak gówno dlatego nie mam czasu :(
 
Jest to w source/player.cpp, lecz nie mam pojęcia jak to przerobić by zablokować przechodzenie.
Code:
bool Player::canWalkthrough(const Creature* creature) const
{
   if(creature == this || hasCustomFlag(PlayerCustomFlag_CanWalkthrough) || creature->isWalkable() ||
     (creature->getMaster() && creature->getMaster() != this && canWalkthrough(creature->getMaster())))
     return true;

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

   if((((g_game.getWorldType() == WORLDTYPE_OPTIONAL && !player->isEnemy(this, true) &&
     player->getVocation()->isAttackable()) || player->getTile()->hasFlag(TILESTATE_PROTECTIONZONE) || (player->getVocation()->isAttackable() &&
     player->getLevel() < (uint32_t)g_config.getNumber(ConfigManager::PROTECTION_LEVEL))) && player->getTile()->ground &&
     Item::items[player->getTile()->ground->getID()].walkStack) && (!player->hasCustomFlag(PlayerCustomFlag_GamemasterPrivileges)
     || player->getAccess() <= getAccess()))
     return true;

   return (player->isGhost() && getGhostAccess() < player->getGhostAccess())
     || (isGhost() && getGhostAccess() > player->getGhostAccess());
}


Działa to tak, że w pz każdy może przechodzić przez siebie, poza pz levele wyższe niż 25(PROTECTION LEVEL) przez levele niższe niż 25.

Usun cala zawartosc metody i wpisz return false; - w ten sposob zablokujesz przechodzenie dla wszystkich, wszedzie.
 
Dziękuję bardzo, działa! :)

@EDIT
Po restarcie ots'a znów to samo. :O
Co mogę robić źle?

Po kompilacji otrzymuje taką informację:
9ngulc.png
 
Last edited:
W ustawieniach projektu (bodajże flagi), o ile dobrze pamietam, -D__USE_MYSQL__
No chyba że chcesz SQLite, to zamiast MYSQL wpisz SQLITE
 
Poradziłem sobie, jeszcze raz dzięki za pomoc! :)
Mój błąd, nie wziąłem pliku .exe z folderu dev.
 
Last edited:
Back
Top