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

Max lvl [C++ or lua]

Erexo

Kage
Premium User
Joined
Mar 27, 2010
Messages
743
Solutions
5
Reaction score
200
Location
Pr0land
GitHub
Erexo
Hello,
i wanna make max lvl on my ots.

When player get 300lvl, cant get more.

I cant make in exp stages 0, becouse i have pvp enforced + missions (doPlayerAddExp)...

Someone can help?
 
not the best way, but..

LUA:
function onKill(cid, target)
	if getCreatureLevel(cid) >= 300 then
		doPlayerAddExperience(cid, -(getPlayerExperience(cid) - 441084800))
	end
	return true
end

this should work :)
fyi, 441084800 is the exp required for level 300, change if you have a different levelling formula
 
I try make "-" in doPlayerAddExperience, but not work :(

I need in C++ or some kind of that, when player get 300, cant get more exp
 
I didnt understand it fully. Should the player be able to get exp from players and quests or shouldnt he get any exp?

In function:
int32_t LuaInterface::luaDoPlayerAddExperience(lua_State* L)

add this:
[cpp] if(player->getLevel() >= 300)
{
lua_pushboolean(L, false);
return 1;
} [/cpp]

After that:
[cpp] if(Player* player = env->getPlayerByUID(popNumber(L)))
{[/cpp]

In this function:
double Player::getGainedExperience(Creature* attacker) const

Add:
[cpp] if(attackerPlayer->getLevel() >= 300)
return 0;[/cpp]

After:
[cpp] Player* attackerPlayer = attacker->getPlayer();
if(!attackerPlayer || attackerPlayer == this)
return 0;[/cpp]
 
LUA:
 local config = {
	level = 300,
	skill = SKILL__LEVEL
}
function onAdvance(cid, skill, oldlevel, newlevel)
	if(skill == config.skill and newlevel >= config.level and getPlayerStorageValue(cid, 30215606) == -1) then
		setPlayerStorageValue(cid, 30215606, 1)
		doPlayerSetExperienceRate(cid, 0.0)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You've just advanced to the limit level!")
		doSendMagicEffect(getPlayerPosition(cid), 14)
	end
return TRUE
end
 
You need to create an 'onAdvance' script and an 'onLogin' script, because if a players gets lvl 300 it gets expStage = 0, but if player dies and loses levels, he won't be able to lvl up again.

LUA:
function onAdvance(cid, skill, oldlevel, newlevel)
	if(skill == SKILL__LEVEL and newlevel >= 300 then
		doPlayerSetExperienceRate(cid, 0.0)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You have reached the maximum level, you won't gain exp anymore!")
		doSendMagicEffect(getCreaturePosition(cid), 14)
	end
	return true
end


function onLogin(cid)

	if getPlayerLevel(cid) < 300 then
		return doPlayerSetExperienceRate(cid, getConfigValue("rateExperience"))
	end
	return true
end
 
Yes it works, just follow these steps below.
You need to create an 'onAdvance' script and an 'onLogin' script, because if a players gets lvl 300 it gets expStage = 0, but if player dies and loses levels, he won't be able to lvl up again.

LUA:
function onAdvance(cid, skill, oldlevel, newlevel)
	if(skill == SKILL__LEVEL and newlevel >= 300 then
		doPlayerSetExperienceRate(cid, 0.0)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You have reached the maximum level, you won't gain exp anymore!")
		doSendMagicEffect(getCreaturePosition(cid), 14)
	end
	return true
end


function onLogin(cid)

	if getPlayerLevel(cid) < 300 then
		return doPlayerSetExperienceRate(cid, getConfigValue("rateExperience"))
	end
	return true
end
 
Back
Top