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

Reward on Advance

bomba

Member
Joined
Feb 26, 2008
Messages
635
Reaction score
7
Location
Brazil
The player are'nt receiving the reward, only the msg:
"You won a reward for advance level."

Code:
function onAdvance(cid, skill, oldlevel, newlevel)
 local stor = 12301
  if ((oldlevel == "18") and (newlevel == "19") and (getPlayerStorageValue(cid, stor) == -1)) then
   if isSorcerer(cid) == TRUE then
    doPlayerAddItem(cid, 2188, 1)
     elseif isDruid(cid) == TRUE then
      doPlayerAddItem(cid, 2185, 1)
     elseif isPaladin(cid) == TRUE then
    doPlayerAddItem(cid, 7366, 10)
   else
  doPlayerAddItem(cid, 2515, 1)
 end
setPlayerStorageValue(cid, stor, 1)

local stor = 12302
 elseif ((oldlevel == "27") and (newlevel == "28") and (getPlayerStorageValue(cid, stor) == -1)) then
  if isSorcerer(cid) == TRUE then
   doPlayerAddItem(cid, 8871, 1)
    elseif isDruid(cid) == TRUE then
     doPlayerAddItem(cid, 8871, 1)
      elseif isPaladin(cid) == TRUE then
    doPlayerAddItem(cid, 8872, 1)
   else
  doPlayerAddItem(cid, 2476, 1)
 end
setPlayerStorageValue(cid, stor, 1)

local stor = 12303
 elseif ((oldlevel == "40") and (newlevel == "41") and (getPlayerStorageValue(cid, stor) == -1)) then
  if isSorcerer(cid) == TRUE then
   doPlayerAddItem(cid, 8900, 1)
    doPlayerAddItem(cid, 2187, 1)
     elseif isDruid(cid) == TRUE then
      doPlayerAddItem(cid, 8900, 1)
       doPlayerAddItem(cid, 2183, 1)
       elseif isPaladin(cid) == TRUE then
      doPlayerAddItem(cid, 7367, 15)
     doPlayerAddItem(cid, 2656, 1)
    else
   doPlayerAddItem(cid, 2477, 1)
  doPlayerAddItem(cid, 2536, 1)
 end
setPlayerStorageValue(cid, stor, 1)

local stor = 12304
 elseif ((oldlevel == "60") and (newlevel == "61") and (getPlayerStorageValue(cid, stor) == -1)) then
 doPlayerAddItem(cid, 2645, 2)
setPlayerStorageValue(cid, stor, 1)

end
 doPlayerSendTextMessage(cid, 22, "You won a reward for advance level.")
 return TRUE
end
Help-me :thumbup:
 
Lua:
function onAdvance(cid, skill, oldlevel, newlevel)
local stuff = {
	[12301] = {old = 18, new = 19, item = {2188, 2185, 7366, 2515}},
	[12302] = {old = 27, new = 28, item = {8871, 8871, 8872, 2476}},
	[12303] = {old = 40, new = 41, item = {{8900, 2187}, {8900, 2183}, {7367, 2656}, {2477, 2536}}},
	[12304] = {old = 60, new = 61, item = {2645, 2645, 2645, 2645}}
}


	for b=12301, 12304 do
		if ((oldlevel == stuff[b].old) and (newlevel == stuff[b].new) and (getPlayerStorageValue(cid, b == -1))) then
			if b == 12303 then
				for i=1, 2 do
					doPlayerAddItem(cid, stuff[b].item[getPlayerVocation(cid)][i], 1)
				end
			else
				doPlayerAddItem(cid, stuff[b].item[getPlayerVocation(cid)], 1)
			end
			setPlayerStorageValue(cid, stuff[b], 1)
	 		doPlayerSendTextMessage(cid, 22, "You won a reward for leveling up!")
		end
	end
	return 1
end

Loops. Making your job way shorter since.. loops.

Also, checking if the newlevel is the next level to the oldlevel is silly, because if the player gets two level [levels up from 40 to 42], he wouldn't get rewarded.
 
Last edited:
[13/12/2009 19:44:53] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/reward_.lua)
[13/12/2009 19:44:53] data/creaturescripts/scripts/reward_.lua:6: '=' expected near ','
Error =/
 
Cannot load script (data/creaturescript/scripts/reward_.lua)
data/creaturescript/scripts/reward_.lua: ')' expected near 'then'
 
Pardon my ignorance, but why? I usually do, but I suppose it's because I'm used to. Someone once told me to place it behind. Why should I?
 
Not Tested, Quickly Made

Lua:
local vocs = { 
		[1] = { new = 20, itemid = 5785 },
		[2] = { new = 20, itemid = 5785 },
		[3] = { new = 20, itemid = 5785 },
		[4] = { new = 20, itemid = 5785 }
	}
function onAdvance(cid, skill, oldLevel, newLevel)
	if (skill == SKILL__LEVEL) then
		for i = 1,4 do
			if(isInArray(vocs[i], getPlayerVocation(cid)) == true) then
				if(getPlayerLevel(cid) == vocs[i].new) then
					doPlayerAddItem(cid, vocs[i].itemid, 1)
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Congratulation on the new level! Here is a gift.")
					doSendMagicEffect(getCreaturePosition(cid), CONST_ME_GIFT_WRAPS)
				end
			end
			return true
		end
	end
end

If it doesn't work, I am sure Cykotitan will fix it <_<
 
You don't have to use loops here ://
Code:
local vocs = { 
	{new = 20, itemid = 5785},
	{new = 20, itemid = 5785},
	{new = 20, itemid = 5785},
	{new = 20, itemid = 5785}
}
function onAdvance(cid, skill, oldLevel, newLevel)
	local v = vocs[getPlayerVocation(cid)]
	if(skill == SKILL__LEVEL and v and getPlayerLevel(cid) == v.new) then
		doPlayerAddItem(cid, v.itemid, 1)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Congratulations on the new level! Here is a gift.")
		doSendMagicEffect(getCreaturePosition(cid), CONST_ME_GIFT_WRAPS)
	end
	return true
end
 
What if you want to give players a reward for every 5 levels?

Code:
function onAdvance(cid, skill, oldLevel, newLevel)
	if(skill == 8) then
		if(oldLevel == (9) and getPlayerStorageValue(cid, 20201) ~= 9) then
			doPlayerAddItem(cid, 2151, 1)
			setPlayerStorageValue(cid, 20201, 9)
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You got to level 10")
		end
	end
	return true
end

I have that right there, but it only does it for when you get to level 10. I tried to do it with a loop, but it gave the item seemingly at random...

Also, is it possible to set the storage value so it will never go below its current value? (So a player can't just kill themselves back 5 levels to get the reward over and over)
 
@Up
Lua:
function onAdvance(cid, skill, oldLevel, newLevel)
	if getPlayerStorageValue(cid, 20202) == 5 then
		if getPlayerStorageValue(cid, 20201) ~= newLevel then
			doPlayerAddItem(cid, 2151, 1)
			setPlayerStorageValue(cid, 20201, newLevel)
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You advanced 5 levels!")
		end
	end
	
	if getPlayerStorageValue(cid, 20202) == -1 then
		setPlayerStorageValue(cid, 20202, 1)
	elseif getPlayerStorageValue(cid, 20202) > -1 or getPlayerStorageValue(cid, 20202) < -1 then
		setPlayerStorageValue(cid, 20202, getPlayerStorageValue(cid, 20202)+1)
	else
		setPlayerStorageValue(cid, 20202, 0)
	end
end

And you'd have to add another script, onDeath:

Lua:
function onDeath(cid, corpse, deathList)
	if getPlayerStorageValue(cid, 20202) == 1 then
		setPlayerStorageValue(cid, 20202, -1)
	else
		setPlayerStorageValue(cid, 20202, getPlayerStorageValue(cid, 20202)-1)
	end
end

And on creaturescripts.xml, add:
PHP:
<event type="death" name="StorageChange" event="script" value="death.lua"/>

And on login.lua, after
Lua:
	registerCreatureEvent(cid, "ReportBug")

Add:
Lua:
	registerCreatureEvent(cid, "StorageChange")

It could be done by another way, checking if the player's level is divisible by 5, and some other stuff..
Would you like that instead? This one is as efficient, perhaps more efficient.

@Cykotitan
Answer plox? I think I figured it out, but the moar I know, the better.
 
@Up
Lua:
function onAdvance(cid, skill, oldLevel, newLevel)
	if getPlayerStorageValue(cid, 20202) == 5 then
		if getPlayerStorageValue(cid, 20201) ~= newLevel then
			doPlayerAddItem(cid, 2151, 1)
			setPlayerStorageValue(cid, 20201, newLevel)
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You advanced 5 levels!")
		end
	end
	
	if getPlayerStorageValue(cid, 20202) == -1 then
		setPlayerStorageValue(cid, 20202, 1)
	elseif getPlayerStorageValue(cid, 20202) > -1 or getPlayerStorageValue(cid, 20202) < -1 then
		setPlayerStorageValue(cid, 20202, getPlayerStorageValue(cid, 20202)+1)
	else
		setPlayerStorageValue(cid, 20202, 0)
	end
end

And you'd have to add another script, onDeath:

Lua:
function onDeath(cid, corpse, deathList)
	if getPlayerStorageValue(cid, 20202) == 1 then
		setPlayerStorageValue(cid, 20202, -1)
	else
		setPlayerStorageValue(cid, 20202, getPlayerStorageValue(cid, 20202)-1)
	end
end

And on creaturescripts.xml, add:
PHP:
<event type="death" name="StorageChange" event="script" value="death.lua"/>

And on login.lua, after
Lua:
	registerCreatureEvent(cid, "ReportBug")

Add:
Lua:
	registerCreatureEvent(cid, "StorageChange")

It could be done by another way, checking if the player's level is divisible by 5, and some other stuff..
Would you like that instead? This one is as efficient, perhaps more efficient.

@Cykotitan
Answer plox? I think I figured it out, but the moar I know, the better.

The best scripter, Thx! :peace:
 
Back
Top