Otsoft.pl | Forum

Tę stronę ostatnio zmodyfikowano 17:41, 24 mar 2009.
Tę stronę obejrzano 123 razy.

» Funkcja:doPlayerAddExp
Strona Dyskusja Tekst źródłowy Historia i autorzy

Funkcja:doPlayerAddExp

<< Powrót do Listy funkcji LUA

Wersja silnika: OTserv 0.6.0, OTServ 0.7.0

Spis treści

Działanie

doPlayerAddExp ( Stworzenie cid, Liczba expRate, Liczba współczynnik)

Funkcja dodaje lub odejmuje punkty exprience graczowi o podanym cid w podanej ilości

Parametry

Stworzenie cid 
Identyfikator gracza
Liczba ilość 
ilość punktów do dodania/zabrania
Liczba expRate 
czy ilość expa ma zostać pomnożona przez expRate ustawiony na serverze (w config.lua) - domyślnie: 0 (nie), ustaw na 1 jeśli tak.
Liczba współczynnik 
czy ilość expa ma zostać pomożona przez współczynnik danego levela (stages.xml) - domyślnie 0 (nie), ustaw na 1 jeśli tak.

Zwracana Wartość

Zwraca LUA_ERROR, jeżeli gracz nie został odnaleziony.

Gdy funkcja wykonała się pomyślnie zwraca LUA_TRUE

Przykład

Przykład #1 Dodaje graczowi 500 expa

doPlayerAddExp(cid, 500)

Przykład #2 Dodaje graczowi 1000 expa, jednak jest mnożona przez expRate (jeśli expRate=3 to dodaje 3000expa)

doPlayerAddExp(cid, 1000, 1)

Przykład #3 Dodaje graczowi 1000 expa, używa expRate i dodatkowo exp mnożony jest przez współczynnik dla danego levela. (jeśli expRate =3, a współczynnik dla tego levela to 2, gracz dostaje 6000 expa).

doPlayerAddExp(cid, 1000, 1, 1)

Przykład #4 Dodaje graczowi 1000 expa. Exp mnożony jest przez współczynnik, ale nie przez expRate.

doPlayerAddExp(cid, 1000, 0, 1)

Implementacja w silniku

int LuaScriptInterface::luaDoPlayerAddExp(lua_State *L)
{
	//doPlayerAddExp(cid, exp, <optional: default: 0> useRate, <optional: default: 0> useMultiplier)
	int32_t parameters = lua_gettop(L);
 
    bool useMultiplier = false;
    bool useRate = false;
	if(parameters > 3){
        useMultiplier = (popNumber(L) >= 1);
    }
	if(parameters > 2){
		useRate = (popNumber(L) >= 1);
	}
 
	int64_t exp = (int64_t)popNumber(L);
	uint32_t cid = popNumber(L);
 
	ScriptEnviroment* env = getScriptEnv();
	Player* player = env->getPlayerByUID(cid);
	if(player){
		if(exp > 0){
            exp = int64_t(exp * (useMultiplier? double(player->exp_multiplier) : 1.0) * (useRate? g_config.getNumber(ConfigManager::RATE_EXPERIENCE) : 1.0));
			player->addExperience(exp);
			lua_pushnumber(L, LUA_TRUE);
		}
		else{
			lua_pushnumber(L, LUA_FALSE);
		}
	}
	else{
		reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_FOUND));
		lua_pushnumber(L, LUA_ERROR);
	}
	return 1;
}

Powered by MediaWiki
GNU Free Documentation License 1.2