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

Kilka pytań

Erazma

Banned User
Joined
Sep 3, 2012
Messages
265
Reaction score
4
Witam, potrzebuję kodu na przedmiot który kasuje wszystkie storgi danego gracza który użyje przedmiotu. Czy jest to możliwe?
Mógłby ktoś coś takiego dodać?

Mam problem jeszcze z Account Data Warning prubowałem usunąć to w hex edytorze lecz bez skutku.
Potrzebowałbym jeszcze runę która usuwa wszystkie dni pacc oraz runę która daje (chodzi mi o samą funkcje doplayeradd czy coś :))
Dzięki
 
Last edited:
powiedz co w ten sposob chcesz osiagnac bo byc moze jest prostszy sposob niz kasowanie calego storage dla gracza
 
Chce po zrobic item dla gm ktory bd testowal questy ale potrzebuje cos co kasuje mu wszystkie storgi ;p bo czasami trzeba poprawiac i cofac sie do danego storga w bazie a to meczace troche ;p a teraz tak patrze mam klijenta 9.42 i data warning mi wyskakuje po wpisaniu czegos bo np w zdaniu mam litere/ cyfre wktor ajest taka sama jak w moim password do konta jak to usunac ? czy to wyskakuje tylko na koncie admina ?
 
Chce po zrobic item dla gm ktory bd testowal questy ale potrzebuje cos co kasuje mu wszystkie storgi ;p bo czasami trzeba poprawiac i cofac sie do danego storga w bazie a to meczace troche ;p a teraz tak patrze mam klijenta 9.42 i data warning mi wyskakuje po wpisaniu czegos bo np w zdaniu mam litere/ cyfre wktor ajest taka sama jak w moim password do konta jak to usunac ? czy to wyskakuje tylko na koncie admina ?

wg mnie znacznie latwiej dac dla gm save=0 i po klopocie, no chyba ze zalezy Ci na zapisywaniu itemow ktore masz przy sobie, skilli i tym podobnych
 
A tego nie wiedzialem a gdzie sie to ustawia te save 0?

Mam jeszcze wielki problem :( z klijentem mam pasy e/e i gdy na default napisze cos na e np Erazma... to wyskakuje account data warning jak to usunaC?
 
zmien passy na nieco dluzsze i nie bedzie problemu, a save 0 ustawiasz w tabeli players
 
No tak tylko nie kazdy bd robil w acc dluzsze pasy chyba ze sie zrobi blokade ze minimum musi byc x a masz jakis inny sposob na skasowanie waringa bo probuje hexem i dupa
 
ej
to cie ku4rw oczaruje ziom

wlasnietakczytamiczytamirozumiemproblemtwojiwymyslilemrozwiazanie

iles = 99999
for i = 1, iles do
setPlayerStorageValue(cid, , -1)
end



:) :) :)
 
Key może być o 0 do 2147483647 o ile się nie myle więc musiałby dać

for i = 1, 2147483647 do
setPlayerStorageValue(cid, i, -1)
end

ciekawe ile bedzie trwac wykonanie takiego czegos
 
Key może być o 0 do 2147483647 o ile się nie myle więc musiałby dać

for i = 1, 2147483647 do
setPlayerStorageValue(cid, i, -1)
end

ciekawe ile bedzie trwac wykonanie takiego czegos

Code:
int32_t LuaInterface::luaGetCreatureStorage(lua_State* L)
{
	//getCreatureStorage(cid, key)
	std::string key = popString(L);
	ScriptEnviroment* env = getEnv();
	if(Creature* creature = env->getCreatureByUID(popNumber(L)))
	{
		std::string strValue;
		if(creature->getStorage(key, strValue))
		{
			int32_t intValue = atoi(strValue.c_str());
			if(intValue || strValue == "0")
				lua_pushnumber(L, intValue);
			else
				lua_pushstring(L, strValue.c_str());
		}
		else
			lua_pushnumber(L, -1);
	}
	else
	{
		errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
		lua_pushboolean(L, false);
	}

	return 1;
}
w wg mnie tak samo key jak i value może być ciągiem znaków, więc nie wyzerujesz tak wszystkich storage
najlepszym sposobem bylby item po ktorego uzyciu save zmeinia sie na 0, usuwa za pomoca SQL wszystkie rekordy z storage dla gracza ktory uzyl przedmiotu, ustawia zalozmy toSave w players, wylogowuje gracza a po wlogowaniu onLogin zmienia toSave na 0 i save na 1, oczywiscie to sposob bez edycji zrodel
 
Code:
int32_t LuaInterface::luaGetCreatureStorage(lua_State* L)
{
	//getCreatureStorage(cid, key)
	std::string key = popString(L);
	ScriptEnviroment* env = getEnv();
	if(Creature* creature = env->getCreatureByUID(popNumber(L)))
	{
		std::string strValue;
		if(creature->getStorage(key, strValue))
		{
			int32_t intValue = atoi(strValue.c_str());
			if(intValue || strValue == "0")
				lua_pushnumber(L, intValue);
			else
				lua_pushstring(L, strValue.c_str());
		}
		else
			lua_pushnumber(L, -1);
	}
	else
	{
		errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
		lua_pushboolean(L, false);
	}

	return 1;
}
w wg mnie tak samo key jak i value może być ciągiem znaków, więc nie wyzerujesz tak wszystkich storage
najlepszym sposobem bylby item po ktorego uzyciu save zmeinia sie na 0, usuwa za pomoca SQL wszystkie rekordy z storage dla gracza ktory uzyl przedmiotu, ustawia zalozmy toSave w players, wylogowuje gracza a po wlogowaniu onLogin zmienia toSave na 0 i save na 1, oczywiscie to sposob bez edycji zrodel

po chuj od razu mulić bazę, lepiej zmulić łeb



#trans


własnie dałem zmienna iles, by sobie noob ustawił ile tam tych chce..

wgl to jak nie chcę dla każdego stora tak robic to może

for i=1,999999 do
if getPlayerStorageValue(cid, i) > -1 then
setPlayerStorageValue(cid, i, -1)
end
end

ale w sumie to po co sprawdzać? lepiej jebnąć wszystkie

albo wiemm oooo

wyzerowane_stg={}
for i=1, 999999999 do
if getPlayerStorageValue(cid, i) > 1 then
table.insert(wyzerowane_stg, i)
setPlayerStorageValue(cid, i , -1)
end
end
x = "Wyzerowane storagi:\n"
for i=1,# wyzerowane_stg do
x = x.."-->".. wyzerowane_stg .."\n"
end

i tutaj daj jakąś funkcje co ci wyświetli np.:
doShowTextDialog(cid, 1111, x)
 
Code:
int32_t LuaInterface::luaGetCreatureStorage(lua_State* L)
{
    //getCreatureStorage(cid, key)
    std::string key = popString(L);
    ScriptEnviroment* env = getEnv();
    if(Creature* creature = env->getCreatureByUID(popNumber(L)))
    {
        std::string strValue;
        if(creature->getStorage(key, strValue))
        {
            int32_t intValue = atoi(strValue.c_str());
            if(intValue || strValue == "0")
                lua_pushnumber(L, intValue);
            else
                lua_pushstring(L, strValue.c_str());
        }
        else
            lua_pushnumber(L, -1);
    }
    else
    {
        errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
        lua_pushboolean(L, false);
    }

    return 1;
}
w wg mnie tak samo key jak i value może być ciągiem znaków, więc nie wyzerujesz tak wszystkich storage
najlepszym sposobem bylby item po ktorego uzyciu save zmeinia sie na 0, usuwa za pomoca SQL wszystkie rekordy z storage dla gracza ktory uzyl przedmiotu, ustawia zalozmy toSave w players, wylogowuje gracza a po wlogowaniu onLogin zmienia toSave na 0 i save na 1, oczywiscie to sposob bez edycji zrodel

To nie lepiej po prostu zrobic funkcje ktora czysci mape ze storage danego gracza i ja wywolywac jakas komenda dla gm?

Key może być o 0 do 2147483647 o ile się nie myle więc musiałby dać
for i = 1, 2147483647 do
setPlayerStorageValue(cid, i, -1)
end

ciekawe ile bedzie trwac wykonanie takiego czegos


Zeby usunac storage trzeba ustawic wartosc na nil, w innym przypadku bedzie ono ustawione na -1, twoim sposobem zasra sobie baze milionami rekordow.
 
diath ale zauważ, że jak zmienisz storage na -1 to jakoś się nie pojawia w bazie danych, storage graczy idą do bazy po wylogowaniu się lub bo save czyli przy zapisie postaci, widać tfs domyślnie ma zrobione, że zmienia ujemne storage na brak wartości i nie wysyła tego storage do bazy, lub go usuwa jeśli jest taki storage

zapewne, niewiem dokładnie, tak poprostu sobie kombinuje po polskiemu
 
po chuj od razu mulić bazę, lepiej zmulić łeb






#trans




własnie dałem zmienna iles, by sobie noob ustawił ile tam tych chce..


wgl to jak nie chcę dla każdego stora tak robic to może


for i=1,999999 do
if getPlayerStorageValue(cid, i) > -1 then
setPlayerStorageValue(cid, i, -1)
end
end


ale w sumie to po co sprawdzać? lepiej jebnąć wszystkie


albo wiemm oooo


wyzerowane_stg={}
for i=1, 999999999 do
if getPlayerStorageValue(cid, i) > 1 then
table.insert(wyzerowane_stg, i)
setPlayerStorageValue(cid, i , -1)
end
end
x = "Wyzerowane storagi:\n"
for i=1,# wyzerowane_stg do
x = x.."-->".. wyzerowane_stg .."\n"
end


i tutaj daj jakąś funkcje co ci wyświetli np.:
doShowTextDialog(cid, 1111, x)



Zamiast robic petle po wszystkich kluczach, mozesz uzyc getCreatureStorageList(cid), ktora zwroci liste wszystkich kluczy w uzyciu dla danego gracza.




diath ale zauważ, że jak zmienisz storage na -1 to jakoś się nie pojawia w bazie danych, storage graczy idą do bazy po wylogowaniu się lub bo save czyli przy zapisie postaci, widać tfs domyślnie ma zrobione, że zmienia ujemne storage na brak wartości i nie wysyła tego storage do bazy, lub go usuwa jeśli jest taki storage


zapewne, niewiem dokładnie, tak poprostu sobie kombinuje po polskiemu
Chyba nie, z tego co patrze to -1 jest normalna wartoscia, a wymazywany storage jest tylko jezeli w doCreatureSetStorage dasz nil jako wartosc.
 
Ja bym proponował zrobić pętle od 0 do 2147483647 i potem z literami każdą kombinacje od 0 do 10 liter i na końcu na zmiane litery z cyframi. W ten sposób będzie pewność, że wszystkie się usuną.
 
Albo po prostu zrobić to w kodzie źródłowych - łatwiej, szybciej i przyjemniej :).
 
Code:
function onSay(cid, words, param)
	local t = string.explode(param, ",")
	if(not t[2]) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.")
		return true
	end

	local tid = getPlayerByNameWildcard(t[1])
	if(not tid or (isPlayerGhost(tid) and getPlayerGhostAccess(tid) > getPlayerGhostAccess(cid))) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. param .. " not found.")
		return true
	end

	if(not t[3]) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, " [" .. t[1] .. " - " .. t[2] .. "] = " .. getPlayerStorageValue(tid, t[2]))
	else
		setPlayerStorageValue(tid, t[2], t[3])
	end

	return true
end
/storage player, key, value

Uzywalismy tego do roznych rzeczy wydaje mi sie ze dobre rozwiazanie XD
 
Back
Top