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

Jak zablokować zasypywanie depo i domków

Crypton3

Retired
Joined
Mar 13, 2010
Messages
549
Reaction score
139
Jak zablokować zasypywanie depo i domków?
Witam,
W tym poradniku opiszę jak zablokować zasypywanie depo i domków przez innych graczy.

Po dodaniu poniższego kodu tylko gracze, którzy stoją jedną kratkę od lockera będą mogli na niego rzucać przedmioty.
A więc tak:
W pliku game.cpp szukamy:
Code:
	if(playerPos.z < mapFromPos.z && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere))
	{
		player->sendCancelMessage(RET_FIRSTGODOWNSTAIRS);
		return false;
	}
I dodajemy pod tym:
Code:
	// Anty zasypywanie depo
	if (!Position::areInRange<1,1,0>(playerPos, mapToPos))
	{
		if (toCylinder->getTile()->hasFlag(TILESTATE_DEPOT))
		{
			player->sendCancelMessage(RET_NOTPOSSIBLE);
			return false;                                                            
		}                                               
	}

Czas na domki - po dodaniu tego kodu tylko gracz, który jest właścicielem domku będzie mógł do niego wrzucać przedmioty z zewnątrz.
W pliku game.cpp, pod powyższym kodem dodajemy:
Code:
	// Anty zasypywanie domków
	if (toCylinder->getTile()->hasFlag(TILESTATE_HOUSE))
	{
		// Blokujemy zasypywanie nie swoich domków z zewnątrz
		if (!fromCylinder->getTile()->hasFlag(TILESTATE_HOUSE))
		{
			House* tileHouse = toCylinder->getTile()->getHouse();                                  
			House* playerHouse = Houses::getInstance()->getHouseByPlayerId(player->getGUID());

			if (tileHouse != playerHouse)
			{
    				player->sendCancelMessage(RET_NOTPOSSIBLE);
    				return false;      
			}  
		}
		// Blokujemy zasypywanie cudzych domków z innego domku :D
		else
		{
			House* firstHouse = fromCylinder->getTile()->getHouse();
			House* secondHouse = toCylinder->getTile()->getHouse();
			if (firstHouse != secondHouse)
			{
    				player->sendCancelMessage(RET_NOTPOSSIBLE);
    				return false;      
			}
		}
	}

Gotowe
 
Last edited:
fajnie by było dodać friend liste, czyli odczytywanie np. z bazy czy z czegoś, czy dany gracz jest na friend liście, to wtedy ta osoba mogłaby nam rzucić coś na depo, takie niepotrzebne ale fajne ;p
 
Mała aktualizacja, dodałem do poradnika kod na blokadę zasypywania domków innych graczy ☺
 
Czy wystarczy że to podmienie i wyśle plik na serwer czy musze kompilowac od nowa wszystkie pliki?
 
Nic sie nie zepsuje jesli wylacze otsa i od nowa tylko zrobie make ??
Najlepiej abyś nawiązał nowe połączenie przez SSH, a następnie tam wykonał polecenie make. Jeśli wszystko pójdzie poprawnie i konsola nie wyrzuci ci żadnego błędu to znaczy, że możesz wyłączyć twój serwer i włączyć go od nowa (wtedy powinno odpalić nowy plik binarny).

Nie wiem jak jest w systemie Linux, czy używana aplikacja może zostać nadpisana. Jeśli kompilacja będzie miała problem z dostępem do pliku forgottenserver (theforgottenserver) to wystarczy, że wyłączysz serwer a następnie powtórzysz komendę.
 
puttyk.jpg
puttyk.jpg


Za pierwszym razem z domami nie chcialo wejsc, samo depo dziala :)
 
Szukając w plikach źródłowych TFS 0.3.6pl1, nie znalazłem tych linijek ;/
 
Fakt zasypywanie domków nie działa wywala błąd przy House *tile" jak dobrze pamiętam ;) natomiast depo działa znakomicie. :)
 
Kod jest dobry, ale z tego co widzę to masz reva, który nie obsługuje funkcji Tile.getHouse().
 
A co z gośćmi, subownerami? :C

Code:
  // Anty zasypywanie domków
   if(House* house = toCylinder->getTile()->getHouse())
   {
     if(house->getHouseAccessLevel(player) == HOUSE_NO_INVITED)
     {
       player->sendCancelMessage(RET_PLAYERISNOTINVITED);
       return false;   
     }  
   }

Tak z nudów w pracy, może komuś posłuży ;P
 
przy kompilacji domków na 0.4 3884 wypierdala
Code:
../game.cpp: In member function 'bool Game::playerMoveItem(uint32_t, const Position&, uint16_t, int16_t, const Position&, uint8_t)':
../game.cpp:1384: error: 'class Tile' has no member named 'getHouse'
../game.cpp:1396: error: 'class Tile' has no member named 'getHouse'
../game.cpp:1397: error: 'class Tile' has no member named 'getHouse'
 
Back
Top