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

"Licznik życia" przy nazwie potwora.

Hitsugaya

New Member
Joined
Mar 28, 2008
Messages
90
Reaction score
0
Location
Poland, Łódź, RTK
Witam, otóż chciałem dodać do OTSa taką drobnostkę w postaci You see a Dragon [Ilość HP/Ilość max HP]. Znalazłem odpowiednią linijkę w C++ :

Code:
void ProtocolGame::AddCreature(NetworkMessage_ptr msg, const Creature* creature, bool known, uint32_t remove)
{   
    msg->AddU16(0x61);
	if(!known)
	{
		msg->AddU16(0x61);
		msg->AddU32(remove);
		msg->AddU32(creature->getID());
		msg->AddString(creature->getHideName() ? "" : creature->getName());
		
	}
	else
	{
		msg->AddU16(0x62);
		msg->AddU32(creature->getID());
	}

W momencie dodania do linijki :
Code:
 msg->AddString(creature->getHideName() ? "" : creature->getName());

czegoś mniej więcej takiego :
Code:
msg->AddString(creature->getHideName() ? "" : creature->getName() + " [ "creature->getHealth()" / "creature->getMaxHealth()" ]");

Wyskakuje błąd o różnych typach danych int32_t i const char. Przeglądałem zdefiniowanie void AddString, które w ogóle nie przyjmuję liczb ;/

I teraz pytanko, co z tym zrobić ?

Dziękuję
 
Last edited:
hint:
Code:
stringstream
mozna pewnie tez przez jakies itoa/sprintf.
 
Code:
void ProtocolGame::AddCreature(NetworkMessage_ptr msg, const Creature* creature, bool known, uint32_t remove)
{   
    msg->AddU16(0x61);
	if(!known)
	{
        char Cstr[20];
        int zycie = creature->getMaxHealth();
		msg->AddU16(0x61);
		msg->AddU32(remove);
		msg->AddU32(creature->getID());
		msg->AddString(creature->getHideName() ? "" : creature->getName() + sprintf(Cstr, "%i", zycie));
		
	}
	else
	{
		msg->AddU16(0x62);
		msg->AddU32(creature->getID());
	}

I wywala błąd :

Code:
2665 \forgottenserver-0.3.6pl1.r80\0.3.6pl1.r80\protocolgame.cpp no match for 'operator+' in '(*(creature->Creature::_vptr$AutoId + 40u))(creature) + sprintf(((char*)(&Cstr)), ((const char*)"%i"), zycie)'
Hmm ...

Ps. W Lua będzie to. kiedy kliknie "look" na potworka, a to ma być jak tylko się widzi potworka.
 
lol.

Code:
if(creature->getHideName()) {
msg->AddString("");
} else {
std::stringstream herp;
herp << creature->getName() << " [ " << creature->getHealth() << " / " << creature->getMaxHealth() << " ]";
msg->AddString(herp.str().c_str());
}

Ale jeśli dobrze mi się wydaję, to to i tak nie będzie działało tak jak chcesz.
 
Code:
int Cstr[20];
sprintf(Cstr, "%d", creature->getMaxHealth());

...

msg->AddString(creature->getHideName() ? "" : creature->getName() + Cstr);

...


ale polecam stringstream/ostringstream bo sprintf AFAIR jest z C.

//edit
Swoja droga to bedziesz mial problem z odswiezaniem jak chcesz zeby health byl "live" przy nazwie moba. Klientowi tylko raz jest wysylana jest nazwa moba i siedzi sobie w pamieci klienta. Da sie to obejsc ale to wyzsza szkola jazdy.
 
Last edited:
Hmm no właśnie się tak zastanawiałem. Jest opcja przez look jak mówił Azi, ale ona jest tylko po "spojrzeniu" na potworka. Chyba tak uczynię. Btw. można by to obejść, jeśli ktoś trafi potworka to wtedy przeładuje skrypt. Może kiedyś ... na razie zrobię trochę gorszą metodą ; > Dziękuję wszystkim !
 
Hmm no właśnie się tak zastanawiałem. Jest opcja przez look jak mówił Azi, ale ona jest tylko po "spojrzeniu" na potworka. Chyba tak uczynię. Btw. można by to obejść, jeśli ktoś trafi potworka to wtedy przeładuje skrypt. Może kiedyś ... na razie zrobię trochę gorszą metodą ; > Dziękuję wszystkim !

"Przeładowanie skryptu" nic nie da. Nazwa moba wisi w pamięci klienta.
 
Sprawdź to:
Lua:
function onLook(cid, thing, position, lookDistance)
	doPlayerSetSpecialDescription(thing.uid, "[".. getCreatureHealth(thing.uid) .."/".. getCreatureMaxHealth(thing.uid) .."]")
	return true
end
Pisane na szybko, i nie wiem czy będzie taki efekt jak oczekiwałeś - ale warto spróbować.
 
Back
Top Bottom