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

Setplayerextraexp script

christiandb

Member
Joined
Feb 5, 2008
Messages
2,469
Reaction score
5
Location
010
I know you guys are kinda tired of my topics but I just need one last thing :p

I made this script:
Code:
function onUse(cid, item, fromPosition, itemEx, toPosition)
 
	local newrate = 100
	local normalrate = 10
       local fade = 60 -- in seconds
	if getPlayerExtraExpRate(cid) == newrate then
	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You already have the higher exp rate.')
	else	
setPlayerExtraExpRate(cid, newrate)
	doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You now have 100x extra exp above your normal exp rate.')
               addEvent(setPlayerExtraExpRate(cid, normalrate), (fade*1000))
	end
end

It ain't working well it only gives me 10x extra rate and the addevent is fucked up. I'd be nice if you could me it that it fades away after 30 minutes.

Thanks in advance

Chris~
 
Code:
local config = {
	newRate = 100,
	time = 60
}

local function revert(cid)
	setPlayerExtraExpRate(cid, 1)
	return TRUE
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerExtraExpRate(cid) == 1 then
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You already have the higher exp rate.')
	else	
		setPlayerExtraExpRate(cid, config.newRate)
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You now have 100x extra exp above your normal exp rate.')
                addEvent(revert, config.time * 1000, cid)
	end
	return TRUE
end

Login.lua:

Code:
	if getPlayerExtraExpRate(cid) ~= 1 then
		setPlayerExtraExpRate(cid, 1)
	end
 
If someone will logout having 100x extra exp rate and login later, he will not lose this extra exp rate.
 
Yea... extraExpRate 1 means that the exp will be given normaly (as stated in stages.xml or config.lua).
2 will double the normal exp, 3 - triple and so on...
 
ohh didn't knew that thanks or the help :)

I got this in login.lua
Code:
-- ### CONFIG ###
-- message send to player by script "type" (types you can check in "global.lua")
SHOP_MSG_TYPE = 19
-- time (in seconds) between connections to SQL database by shop script
SQL_interval = 30
-- ### END OF CONFIG ###
SQL_COMUNICATION_INTERVAL = SQL_interval * 1000
function onLogin(cid)
	if(InitShopComunication == 0) then
		local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, {})
		InitShopComunication = eventServ
	end
	registerCreatureEvent(cid, "PlayerDeath")
	return TRUE
end

function sql_communication(parameters)
	local result_plr = db.getResult("SELECT * FROM z_ots_comunication WHERE `type` = 'login';")
	if(result_plr:getID() ~= -1) then
		while(true) do
			id = tonumber(result_plr:getDataInt("id"))
            action = tostring(result_plr:getDataString("action"))
			delete = tonumber(result_plr:getDataInt("delete_it"))
			cid = getPlayerByName(tostring(result_plr:getDataString("name")))
			if isPlayer(cid) == TRUE then
				local itemtogive_id = tonumber(result_plr:getDataInt("param1"))
				local itemtogive_count = tonumber(result_plr:getDataInt("param2"))
				local container_id = tonumber(result_plr:getDataInt("param3"))
				local container_count = tonumber(result_plr:getDataInt("param4"))
				local add_item_type = tostring(result_plr:getDataString("param5"))
				local add_item_name = tostring(result_plr:getDataString("param6"))
	            local received_item = 0
	            local full_weight = 0
	            if add_item_type == 'container' then
	                container_weight = getItemWeightById(container_id, 1)
					if isItemRune(itemtogive_id) == TRUE then
						items_weight = container_count * getItemWeightById(itemtogive_id, 1)
					else
						items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count)
					end
	                full_weight = items_weight + container_weight
	            else
	                full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
					if isItemRune(itemtogive_id) == TRUE then
						full_weight = getItemWeightById(itemtogive_id, 1)
					else
						full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
					end
	            end
	            local free_cap = getPlayerFreeCap(cid)
	            if full_weight <= free_cap then
	                if add_item_type == 'container' then
	                    local new_container = doCreateItemEx(container_id, 1)
	                    local iter = 0
	                    while iter ~= container_count do
	                        doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
	                        iter = iter + 1
	                    end
	                    received_item = doPlayerAddItemEx(cid, new_container)
	                else
	                    local new_item = doCreateItemEx(itemtogive_id, itemtogive_count)
	                    received_item = doPlayerAddItemEx(cid, new_item)
	                end
	                if received_item == RETURNVALUE_NOERROR then
	                    doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop.')
	                    db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
						db.executeQuery("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
	                else
	                    doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.')
	                end
	            else
	                doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.')
	            end
	        end
			if not(result_plr:next()) then
				break
			end
		end
		result_plr:free()
    end
    local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, parameters)
end

Where to paste the login.lua part?
 
Code:
- ### CONFIG ###
-- message send to player by script "type" (types you can check in "global.lua")
SHOP_MSG_TYPE = 19
-- time (in seconds) between connections to SQL database by shop script
SQL_interval = 30
-- ### END OF CONFIG ###
SQL_COMUNICATION_INTERVAL = SQL_interval * 1000
function onLogin(cid)
        if getPlayerExtraExpRate(cid) ~= 1 then
		setPlayerExtraExpRate(cid, 1)
	end

	if(InitShopComunication == 0) then
		local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, {})
		InitShopComunication = eventServ
	end
	registerCreatureEvent(cid, "PlayerDeath")
	return TRUE
end

function sql_communication(parameters)
	local result_plr = db.getResult("SELECT * FROM z_ots_comunication WHERE `type` = 'login';")
	if(result_plr:getID() ~= -1) then
		while(true) do
			id = tonumber(result_plr:getDataInt("id"))
            action = tostring(result_plr:getDataString("action"))
			delete = tonumber(result_plr:getDataInt("delete_it"))
			cid = getPlayerByName(tostring(result_plr:getDataString("name")))
			if isPlayer(cid) == TRUE then
				local itemtogive_id = tonumber(result_plr:getDataInt("param1"))
				local itemtogive_count = tonumber(result_plr:getDataInt("param2"))
				local container_id = tonumber(result_plr:getDataInt("param3"))
				local container_count = tonumber(result_plr:getDataInt("param4"))
				local add_item_type = tostring(result_plr:getDataString("param5"))
				local add_item_name = tostring(result_plr:getDataString("param6"))
	            local received_item = 0
	            local full_weight = 0
	            if add_item_type == 'container' then
	                container_weight = getItemWeightById(container_id, 1)
					if isItemRune(itemtogive_id) == TRUE then
						items_weight = container_count * getItemWeightById(itemtogive_id, 1)
					else
						items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count)
					end
	                full_weight = items_weight + container_weight
	            else
	                full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
					if isItemRune(itemtogive_id) == TRUE then
						full_weight = getItemWeightById(itemtogive_id, 1)
					else
						full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
					end
	            end
	            local free_cap = getPlayerFreeCap(cid)
	            if full_weight <= free_cap then
	                if add_item_type == 'container' then
	                    local new_container = doCreateItemEx(container_id, 1)
	                    local iter = 0
	                    while iter ~= container_count do
	                        doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
	                        iter = iter + 1
	                    end
	                    received_item = doPlayerAddItemEx(cid, new_container)
	                else
	                    local new_item = doCreateItemEx(itemtogive_id, itemtogive_count)
	                    received_item = doPlayerAddItemEx(cid, new_item)
	                end
	                if received_item == RETURNVALUE_NOERROR then
	                    doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop.')
	                    db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
						db.executeQuery("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
	                else
	                    doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.')
	                end
	            else
	                doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.')
	            end
	        end
			if not(result_plr:next()) then
				break
			end
		end
		result_plr:free()
    end
    local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, parameters)
end
 
Code:
[10/12/2008 06:41:00] Warning: [Event::loadScript] Can not load script. data/creaturescripts/scripts/login.lua
[10/12/2008 06:41:00] data/creaturescripts/scripts/login.lua:1: unexpected symbol near '-'
 
try this

PHP:
local config = {
	newRate = 100,
	time = 1 * 60 * 1000,
  storage = 15200
	}


local function revert(cid, newRate, storage)
	doSetPlayerStorageValue(cid,config.storage)
	setPlayerExtraExpRate(cid,config.newRate)
	return TRUE
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerExtraExpRate(cid) == 1 and getPlayerStorageValue(cid,config.storage) == 1 then
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You already have the higher exp rate.')
	else	
		setPlayerExtraExpRate(cid, config.newRate)
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You now have 100x extra exp above your normal exp rate.')
                addEvent(revert, config.time, cid)
	end
	return TRUE
end
 
Try removing the storage then

PHP:
local config = {
    newRate = 100,
    time = 1 * 60 * 1000
    }


local function revert(cid, newRate)
    setPlayerExtraExpRate(cid,config.newRate)
    return TRUE
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getPlayerExtraExpRate(cid) == 1 and 
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You already have the higher exp rate.')
    else    
        setPlayerExtraExpRate(cid, config.newRate)
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You now have 100x extra exp above your normal exp rate.')
                addEvent(revert, config.time, cid)
    end
    return TRUE
end
 
Back
Top