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

kasowanie all AddEvent.

sturnusek

hehe
Joined
May 6, 2010
Messages
52
Reaction score
1
Location
lufbra
Witam chciałbym przerobić funkcje StopEvent, aby kasowała każdy event który gracz ma rozpoczęty bo niestety tak się nie dzieje. Przykład: mamy rozpoczęty na graczu 1 addevent i zaczniemy 2 to 1 i tak zostanie wykonany, chciałbym aby był był nadpisany "nowy" no albo po prostu all czyściło zrobi się nową funkcje i wsio oraz najlepiej dodać nowy parametr ze dla danego gracza.

o to funkcja

Code:
int32_t LuaInterface::luaStopEvent(lua_State* L)
{
	//stopEvent(eventid)
	uint32_t eventId = popNumber(L);
	ScriptEnviroment* env = getEnv();

	LuaInterface* interface = env->getInterface();
	if(!interface)
	{
		errorEx("No valid script interface!");
		lua_pushboolean(L, false);
		return 1;
	}

	LuaTimerEvents::iterator it = interface->m_timerEvents.find(eventId);
	if(it != interface->m_timerEvents.end())
	{
		Scheduler::getInstance().stopEvent(it->second.eventId);
		for(std::list<int32_t>::iterator lt = it->second.parameters.begin(); lt != it->second.parameters.end(); ++lt)
			luaL_unref(interface->m_luaState, LUA_REGISTRYINDEX, *lt);

		it->second.parameters.clear();
		luaL_unref(interface->m_luaState, LUA_REGISTRYINDEX, it->second.function);

		interface->m_timerEvents.erase(it);
		lua_pushboolean(L, true);
	}
	else
		lua_pushboolean(L, false);

	return 1;
}

Czy ktoś wie jak to szybko napisać ? nie chce kombinować wiec postanowiłem napisać na forum?

Proszę o pomoc.
 
hi,

id każdego eventu sobie zapisuj w storage, a potem pobieraj jego id ze storage i wklepuj stopEvent.

nie wiem co tam za gówna uzywasz, pewnie rev chujwie jaki 1000 letni, ale w 0.4 mozesz sobie kulturalnie tablice zapisać w storage.
 
no to mam tak na arenach
v[9] = addEvent(kickEvent, 5 * 10 * 1000, cid)

później przy wychodzeniu z areny \/

StopEvent(v[9])


w tablicy v[9] = 0 do każdej areny


no i nie kasuje o czym zapomniałem jeszcze?
 
Nadpisujesz wartosc tablicy, rob cos w stylu:
Code:
v[guid_gracza] = id_eventu
Napisał każdy event, czyli z tego wynika, że może być ich więcej niż jeden, więc to co napisałeś nadaje się wyłącznie do śmieci - niby nadpisuje to event ale go nie wyłącza. Zrób to tak:
LUA:
stopEvent(v[guid_gracza])
v[guid_gracza] = id_eventu
Albo możesz trzymać wszystkie eventy w tablicy i zatrzymywać wszystkie na raz, wystarczy stworzyć tylko pod tablicę.
 
Napisał każdy event, czyli z tego wynika, że może być ich więcej niż jeden, więc to co napisałeś nadaje się wyłącznie do śmieci - niby nadpisuje to event ale go nie wyłącza. Zrób to tak:
LUA:
stopEvent(v[guid_gracza])
v[guid_gracza] = id_eventu
Albo możesz trzymać wszystkie eventy w tablicy i zatrzymywać wszystkie na raz, wystarczy stworzyć tylko pod tablicę.

wut
 
Niech stracę, obiecałem sobie że nie dam mu gotowca tak od ręki - ale widzę, że go tutaj marnujecie. Sprawdź sobie to:
LUA:
Event = {}
-- function callback(params)
--     print(params.sample, params.others)
-- end
function Event:new(cid, time, callback, params)
	doCreatureSetStorage(cid, 1000, addEvent(callback, time, params))
end

function Event:stop(cid)
	stopEvent(getCreatureStorage(cid, 1000))
	doCreatureSetStorage(cid, 1000, -1)
end

function Event:get(cid)
	return getCreatureStorage(cid, 1000) != -1
end
Jeśli chodzi o użycie, to działa to chronologicznie, przykład:
LUA:
function doCallback(params)
	print(params.cid, params.name)
end

-- Start
function onUse(cid, ...)
	Event:new(cid, 10 * 60 * 1000, doCallback, {cid = cid, name = getCreatureName(cid)})
	return true
end

-- Stop
function onUse(cid, ...)
	if (Event:get(cid)) then
		Event:stop(cid)
	end
end
Oczywiście pisane na szybko, i nie testowane.
 
Back
Top