Funkcja:doPlayerAddExp
<< Powrót do Listy funkcji LUA
Wersja silnika: OTserv 0.6.0, OTServ 0.7.0
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;
}
|