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

[release] onAdvance

Does this script work for 0.2.7 TFS?
Because I cant get it to work and it's getting me real pissed :/

I get the following error:
erroradvance.jpg
 
I guess that I may look like a bloody idiot when you see this code.. but i've got no choice but to embarrasse myself to get it working.
 
Last edited:
Inb4 Cykotitan

OmiGod! You did guess right!

Lua:
local SHOP_MSG_TYPE = 19
local SQL_interval = 30
local SQL_COMUNICATION_INTERVAL = SQL_interval * 1000

dofile("./petConfig.lua")

function onLogin(cid)
	if(InitShopComunication == 0) then
		local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL)
		InitShopComunication = eventServ
	end

	registerCreatureEvent(cid, "PlayerThink")
	registerCreatureEvent(cid, "Killed")
	registerCreatureEvent(cid, "ReputationFromMonsters")
	registerCreatureEvent(cid, "PlayerDeath")
	registerCreatureEvent(cid, "ArenaBattle")

	OLD_LEVELS[cid] = getPlayerLevel(cid)
	OLD_MAGLEVELS[cid] = getPlayerMagLevel(cid)
	OLD_FIST[cid] = getPlayerSkill(cid, SKILL_FIST)
	OLD_CLUB[cid] = getPlayerSkill(cid, SKILL_CLUB)
	OLD_AXE[cid] = getPlayerSkill(cid, SKILL_AXE)
	OLD_SWORD[cid] = getPlayerSkill(cid, SKILL_SWORD)
	OLD_DISTANCE[cid] = getPlayerSkill(cid, SKILL_DISTANCE)
	OLD_SHIELD[cid] = getPlayerSkill(cid, SKILL_SHIELD)
	OLD_FISHING[cid] = getPlayerSkill(cid, SKILL_FISHING)

	return TRUE
end

function onLogout(cid)
	if isCreature(getPlayerStorageValue(cid, storages.petUid)) == 1 and getPlayerStorageValue(cid, storages.petIsOnline) == 2 then
		setPlayerStorageValue(cid, storages.petIsOnline, 1)
	end
	return TRUE
end  


dofile("./config.lua")

function sql_communication()
	env = assert(luasql.mysql())
	con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
	result_plr = assert(con:execute("SELECT * FROM z_ots_comunication WHERE `type` = 'login';"))
	todo = result_plr:fetch({}, "a")
	while todo do
		local id = tonumber(todo.id)
		local action = tostring(todo.action)
		local delete = tonumber(todo.delete_it)
		local cid = getPlayerByName(tostring(todo.name))
		if isPlayer(cid) == TRUE then
			local itemtogive_id = tonumber(todo.param1)
			local itemtogive_count = tonumber(todo.param2)
			local container_id = tonumber(todo.param3)
			local container_count = tonumber(todo.param4)
			local add_item_type = tostring(todo.param5)
			local add_item_name = tostring(todo.param6)
			local full_weight = 0
			local container_weight, items_weight, received_item
			if add_item_type == 'container' then
				container_weight = getItemWeight(container_id, 1)
				items_weight = container_count * getItemWeight(itemtogive_id, isItemRune(itemtogive_id) == TRUE and 1 or itemtogive_count)
				full_weight = items_weight + container_weight
			else
				full_weight = getItemWeight(itemtogive_id, isItemRune(itemtogive_id) == TRUE and 1 or itemtogive_count)
			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.')
					delete = assert(con:execute("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. " LIMIT 1;"))
					assert(con:execute("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. " LIMIT 1;"))
				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
		todo = result_plr:fetch (todo, "a")
	end
	con:close()
	env:close()
	local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL)
end
 
Last edited:
Then I guess this looks like shit aswell, its my think.lua

Code:
function onThink(cid, interval)
	dofile("./data/creaturescripts/scripts/onAdvance.lua")
	onAdvanceController(cid)
	return TRUE
end

Works! Thanks! :D
 
Last edited:
1st. Srry my english.

Without this system u can make a script like:
function onAdvance(cid, skill, oldlevel, newlevel)
if skill == 3 and newlevel == 11 then
doPlayerSendTextMessage(cid, 22, "You just got your first Axe Fighting skill!")
end
if skill == 4 and newlevel == 11 then
doPlayerSendTextMessage(cid, 22, "You just got your first Distance Fighting skill!")
end
end


I think this function is useless.
 
0.2 doesn't have advance in creaturecripts. :p hahaha disregard, it does as of 0.2.10
 
Last edited:
does this still work for newer versions of Mystic Spirit? If not is there a different alternative?
 
Really? Because we try using the onAdvance feature with scripts but they never end up working :p
 
Back
Top