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.