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

C++

GarQet

Own3d!
Joined
Feb 10, 2009
Messages
1,381
Solutions
14
Reaction score
81
Trochę zacząłem modyfikować sobie źródła i napotkał mnie mały problem.
Co zrobiłem? W momencie gdy jakakolwiek osoba zaloguje na serwer i posiada ona większy access niż 1, to automatycznie zmienia mu nick, wypisując w nawiasie kwadratowym przed jego nickiem jego rangę na serwerze. Wszystko jest w porządku poza jedną rzeczą...
Mianowicie nie wiem gdzie powinienem jeszcze zadeklarować tę zmianę nicku by faktycznie ta osoba "istniała". W momencie kliknięcia na nią "look" widzę wszystko tak jak być powinno, ale gdy np. chcę wysłać wiadomość do tejże osoby wyskakuje błąd, że takowa osoba nie istnieje.

Moje pytanie brzmi: Gdzie powinienem zadeklarować tą zmianę by ta postać z takim nickiem faktycznie istniała, lub by była rozróżnialna (może być tylko do samego wylogowania) przez skrypty?
Z góry dziena.
 
Rozumiem, że owy prefix, który dodajesz do nicku to zmiana właściwości name klasy player
game.cpp
Code:
bool Game::playerOpenPrivateChannel(uint32_t playerId, std::string& receiver)
{
	Player* player = getPlayerByID(playerId);
	if(!player || player->isRemoved())
		return false;
#ifdef __NAME_CHANGER__
	if(getPlayerByName(receiver))
#else
	if(IOLoginData::getInstance()->playerExists(receiver))
#endif
		player->sendOpenPrivateChannel(receiver);
	else
		player->sendCancel("A player with this name does not exist.");

	return true;
}

Podobną modyfikacje trzeba również zrobić przy dodawaniu go do list VIP.
 
Last edited:
A nie lepiej zmienić funkcję getName()? Nie jestem pewny, czy zadziała, ale warto sprawdzić.
player.h
PHP:
virtual const std::string& getName() const {return name;}
PHP:
		virtual const std::string& getName() const 
		{
			if (getAccess() > 1)
				return "GM " + name;
			return name;
		}
 
Rozumiem, że owy prefix, który dodajesz do nicku to zmiana właściwości name klasy player
game.cpp
Code:
bool Game::playerOpenPrivateChannel(uint32_t playerId, std::string& receiver)
{
	Player* player = getPlayerByID(playerId);
	if(!player || player->isRemoved())
		return false;
#ifdef __NAME_CHANGER__
	if(getPlayerByName(receiver))
#else
	if(IOLoginData::getInstance()->playerExists(receiver))
#endif
		player->sendOpenPrivateChannel(receiver);
	else
		player->sendCancel("A player with this name does not exist.");

	return true;
}

Podobną modyfikacje trzeba również zrobić przy dodawaniu go do list VIP.

A jak się odwołać do takiego gracza w skrypcie lua? Bo ono pobiera normalne name bez nawiasu przez co skrypt pluje błędami.
 
powinno działać normalnie
LUA:
local p = getCreatureByName('[GM] ktos')
if (isPlayer(p)) then
end
 
Back
Top