What's new

Inne Straty ekwipunku po ?mierci

Status
Not open for further replies.

Wirox

User
Joined
Apr 29, 2009
Messages
31
Reaction score
0
Witam.
Po do?? d?ugiej przerwie postanowi?em wr?ci? do tworzenia OTS'a. Mam jednak kilka problem?w, a oto jeden z nich. Ot??, chcia?bym, aby ?mier? w grze by?a ostateczna i nieodwo?alna, niestety nie wiem jak zrobi?, aby traci?o si? ca?y ekwipunek po ?mierci. W configu jest jedynie wzmianka o procentowej stracie poziomu i skilli, jednak nie widzia?em tam nic o ekwipunku. Bardzo prosz? o wskaz?wk?, gdzie i jak mo?na to zmieni?. Korzystam z TFS'a 0.3.6 pod Tibi? 8.54.
Z g?ry dzi?kuj? za pomoc.
 

Placek

Blue Waffle
Joined
Sep 30, 2008
Messages
6,793
Reaction score
672
Age
9
Odp: Straty ekwipunku po ?mierci

Ja bym to zrobil inaczej...
Jesli postac po smierci ma sie restowac do 1 lvla i skille 10/10 i wszystko jak przy tworzeniu postaci to prosciej usunac wszystko co odpowiada za smierc i przy evencie ondeath dodac zapytanie do bazy danych ktore zmienia wszystko w postaci na domyslne, czyli takie jak w samplu, zostawiajac tylko nick... Tak by bylo najprosciej bo nie trzeba by bylo grzebac w wielu miejscach itp, a wystarczylo by napisac odpowiednie zapytanie do bazy.
Niestety w zapytaniach nie jestem zbyt dobry wiec do konca ci nie moge pomoc. Bo mozna skopiowac zpaytanie od dodawania sampli do bazy i zmienic tylko nick. Tylko nie wiem jak zrobic zeby pobieralo nick od gracza ktory akurat padl...
 

Wirox

User
Joined
Apr 29, 2009
Messages
31
Reaction score
0
Odp: Straty ekwipunku po ?mierci

Osobi?cie wola?bym, aby da? 100% szans? na utrat? ka?dego przedmiotu z ekwipunku, poniewa? je?li dobrze mi si? wydaje, usuni?cie wszystkich warunk?w przy ?mierci spowodowa?oby, ?e przedmioty martwego gracza zamiast znale?? si? w jego ciele, usun??yby si?. A chodzi mi g??wnie o to, aby morderca mia? dost?p do jego przedmiot?w, a nie, aby martwy gracz je straci?, poniewa? i tak jego spawn b?dzie mia? miejsce w niebie, z kt?rego nie b?dzie si? da?o wydosta?. I akurat wola?bym, aby skille (bo poziom zamierzam usun??) zosta?y bez zmian po ?mierci, aby gracz m?g? si? pochwali? do czego doszed? swoj? postaci?. Mo?e da?oby si? zrobi? strat? ekwipunku na podstawie bless?w, kt?re w?a?nie zmieniaj? procentow? szans? na strat? przedmiot?w. Tylko nie wiem gdzie znajduje si? skrypt odpowiadaj?cy za blessy.
 

Placek

Blue Waffle
Joined
Sep 30, 2008
Messages
6,793
Reaction score
672
Age
9
Odp: Straty ekwipunku po ?mierci

Za pomoca blesow nie bardzo bo one zmniejszaja % szanse na utrate od tej bazowej... A bazowa to jest chyba jakos 10% na item i 100% na bp...
Co do zostawienia skislli to mozna latwo zostawic w takim zapytaniu. Zamiast set skill =10 zostawic set skill =skill i tyle...
Co do zostawiania itemow to ciezko cos wymyslic... Za duzo juz jest w silniku odnosnie smierci, trzeba by pokasowac wszystko zostawiajac tylko itemy. I dodac taki event przy smierci ktory przenosi postaci, zostawia skille, zmienia lvl...

Btw. Przy tworzeniu takiego serwera napisz, ze sponrosujesz nowe klawiatury i ew. monitory dla graczy ktorzy padna np po miesiacu gry xd
 

Wirox

User
Joined
Apr 29, 2009
Messages
31
Reaction score
0
Odp: Straty ekwipunku po ?mierci

A je?li zrobi?bym, aby zmniejszenie szansy na utrat? ekwipunku by?o na minusie, to zwi?kszy?oby to w takim przypadku t? szans??
W pierwszym po?cie napisa?e?, ?e tamten spos?b jest najprostszy, ale mo?na to zrobi? inaczej, grzebi?c w r??nych miejscach. Wiesz mo?e gdzie s? te miejsca? 100-procentowe straty po ?mierci s? wa?n? zmian?, bo w innym wypadku nie wypali?by ca?y m?j koncept.

Edit:
Tak w og?le to masz podzi?kowanie za ch?? pomocy.
 
Last edited:

Aire Zena

Active User
Joined
Aug 23, 2010
Messages
126
Reaction score
3
Odp: Straty ekwipunku po ?mierci

W bazie danych ustaw warto?? (players) "save" z "1" na "0". Wtedy posta? jak zaliczy zgona b?dzie si? resetowa?a. Exp, skill, questy, eq itp.

Tutaj masz gotowe zapytanie do bazy danych co wszystkim graczom zmieni warto?? z 1 na 0.

UPDATE `nazwa_bazy_danych`.`players` SET `save` = '1'
 
Last edited:

Placek

Blue Waffle
Joined
Sep 30, 2008
Messages
6,793
Reaction score
672
Age
9
Odp: Straty ekwipunku po ?mierci

W bazie danych ustaw warto?? (players) "save" z "1" na "0". Wtedy posta? jak zaliczy zgona b?dzie si? resetowa?a. Exp, skill, questy, eq itp.

Tutaj masz gotowe zapytanie do bazy danych co wszystkim graczom zmieni warto?? z 1 na 0.

Przeczytales dokladnie o co chodzi?
Skille maja zostawac. Eq ma zostawac, a konkretniej spadac z postaci i byc w ciele...
Jak zmieni save to nie bedzie nic z tego calego pomyslu. Dlatego save musi zostac, albo musi byc zmieniony, zeby zapisywal tylko skille i eq.
 

Aire Zena

Active User
Joined
Aug 23, 2010
Messages
126
Reaction score
3
Odp: Straty ekwipunku po ?mierci

A no faktycznie ;)
To pozostaje edycja pliku death.lua, innej opcji raczej nie ma.
 

Placek

Blue Waffle
Joined
Sep 30, 2008
Messages
6,793
Reaction score
672
Age
9
Odp: Straty ekwipunku po ?mierci

A no faktycznie ;)
To pozostaje edycja pliku death.lua, innej opcji raczej nie ma.

Btw. W twoim pomysle wylaczenia save widze jeszcze jeden problem... Nie mozna sie wylogowac, a tracic postac ma sie podczas smierci a nie wylogowania...
@top
Czy w tym koncepcie wchodzi w gre edycja zrodel? Bo wydaje mi sie, ze bez tego ciezko bedzie grzebac w ten sposob zeby itemy zostaly w ciele(100%, ze spadna) a do tego zeby cofalo lvle, ale zostawialo tez skille itp...
Co do samych blessow to jest tam wykorzystane doPlayerAddBlessing.
A wyglada to tak:
Luascript.cpp
PHP:
int32_t LuaInterface::luaDoPlayerAddBlessing(lua_State* L)
{
	//doPlayerAddBlessing(cid, blessing)
	int16_t blessing = popNumber(L) - 1;
	ScriptEnviroment* env = getEnv();
	if(Player* player = env->getPlayerByUID(popNumber(L)))
	{
		if(!player->hasBlessing(blessing))
		{
			player->addBlessing(1 << blessing);
			lua_pushboolean(L, true);
		}
		else
			lua_pushboolean(L, false);
	}
	else
	{
		errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
		lua_pushboolean(L, false);
	}

	return 1;
}
Ale nie moge znalezc gdzie jeszcze jest to wykorzystane, konkretniej przy smierci... Ani gdzie w ogole jest tracenie itemow podczas smierci...
Ale generalnie, nie liczac itemow wszystko tak jak pisalem wczesniej, death.lua i dodac zapytanie ktore zmienia wszystko jak w samplach oprocz nick i skill...
Z tymi itemami to juz jest ciezej bo nie mam nic konkretnego na razie.

@edit
W sumie to mam cos:
Player.cpp
PHP:
void Player::dropLoot(Container* corpse)
{
	if(!corpse || lootDrop != LOOT_DROP_FULL)
		return;

	uint32_t loss = lossPercent[LOSS_CONTAINERS];
	if(g_config.getBool(ConfigManager::BLESSINGS))
	{
		uint32_t start = g_config.getNumber(ConfigManager::BLESS_REDUCTION_BASE), bless = getBlessings();
		while(bless > 0 && loss > 0)
		{
			loss -= start;
			start -= g_config.getNumber(ConfigManager::BLESS_REDUCTION_DECREMENT);
			bless--;
		}
	}

	uint32_t itemLoss = (uint32_t)std::floor((5. + loss) * lossPercent[LOSS_ITEMS] / 1000.);
	for(int32_t i = SLOT_FIRST; i < SLOT_LAST; ++i)
	{
		Item* item = inventory[i];
		if(!item)
			continue;

		uint32_t tmp = random_range(1, 100);
		if(skull > SKULL_WHITE || (item->getContainer() && tmp < loss) || (!item->getContainer() && tmp < itemLoss))
		{
			g_game.internalMoveItem(NULL, this, corpse, INDEX_WHEREEVER, item, item->getItemCount(), 0);
			sendRemoveInventoryItem((slots_t)i, inventory[(slots_t)i]);
		}
	}
}
Tu:
PHP:
uint32_t itemLoss = (uint32_t)std::floor((5. + loss) * lossPercent[LOSS_ITEMS] / 1000.);
Wystarczy usunac / 1000, lub zmienic na / 1(?). Chociaz nie wiem czy to starczy.
Mozna zmienic % spadania itemow bez blessow i z blessami...
Jesli to sobie dobrze ustawisz to mozna wszystko juz wykonac tak jak pisalem.
 
Last edited:

zygzagZ

Advanced User
Joined
Aug 14, 2008
Messages
281
Reaction score
34
Odp: Straty ekwipunku po ?mierci

W zasadzie mo?na to upro?ci? do tego:
Code:
void Player::dropLoot(Container* corpse) { 
    if(!corpse) 
        return; 
        
    for(int32_t i = SLOT_FIRST; i < SLOT_LAST; ++i) 
    { 
        Item* item = inventory[i]; 
        if(!item) 
            continue; 
            
        g_game.internalMoveItem(NULL, this, corpse, INDEX_WHEREEVER, item, item->getItemCount(), 0); 
        sendRemoveInventoryItem((slots_t)i, inventory[(slots_t)i]); 
    } 
}
Kod skanuje ekwipunek gracza i wszystkie przedmioty przenosi do cia?a (pod warunkiem ?e ono istnieje).
 

Wirox

User
Joined
Apr 29, 2009
Messages
31
Reaction score
0
Odp: Straty ekwipunku po ?mierci

Huh, nie wiedzia?em, ?e taka rzecz mo?e by? a? tak ci??ka. C??, na chwil? obecn? nie mam dost?pu do ?r?de?, ale je?li to jedyna mo?liwo??, to nie mam innego wyboru. Wielkie dzi?ki za pomoc, Kikimora. Masz jeszcze jedno podzi?kowanie. Temat mo?na ju? zamkn??.
 
Status
Not open for further replies.
Top