• 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!
  • New resources must be posted under Resources tab. A discussion thread will be created automatically, you can't open threads manually anymore.

MoveEvent Slot system

@MrLipzZz
OMG! we found a TFS bug.
lets report :D

--- I am using this system on my server and it start to crash.
so i done it:
Lua:
function onEquip(cid, item, slot) --By mock the bear
	--[[if equips_lvl[item.itemid] then
		if (equips_lvl[item.itemid].lvl and equips_lvl[item.itemid].lvl > getPlayerLevel(cid))  or (#equips_lvl[item.itemid].voc > 0 and not isInArray(equips_lvl[item.itemid].voc,getPlayerVocation(cid))) then
			--return false
		end
	end]]
	if item.uid ~= 0 then
		local mm = getSlotType(getItemName(item.uid))
		if mm then
			addEvent(equip,100,cid)
		end
	end
	return true
end

function onDeEquip(cid, item, slot)
	if item.uid ~= 0 then
		local mm = getSlotType(getItemName(item.uid))
		if mm then
			addEvent(equip,100,cid)
		end
	end
end
and deleted the script of creaturescripts, so it stop crash :eek:!!!!
 
Last edited:
Yeah! we found a bug :D HAHAHA!
So, lets go by steps.
i need to put it on movements?
and delete the creature scripts?

This sript,is the end of Movements?

-------

Soo. mock O.O !! haha
i overwrite the end of section in the movenents, by this last script...
aaaan...hm....... eeeeh..
the same :X !
 
Try delete all script and set only it:
Lua:
function onEquip(cid, item, slot) --By mock the bear
        return true
end

function onDeEquip(cid, item, slot)

end

if it crash your server its because a tfs error
 
Last edited:
vo mi mata pa fala ingleis não SXD

vai pt mesmo :D

e ae tpw, ainda ta dando crash aqui :/
estranho que é so quando vc faiz a bota e ela cai direto no plaer usando. qdo ela cai no chão ou na bag o server não crash lol --' :x

to loko pa po esse script nu meu futuro serv que logo mais chega pa soma.
 
@pedralves
isso é erro do tfs
---
Its a TFS error
 
Released a version free of crashes!
Version free of crashes!

Because a TFS error if you use the function onEquip with lua it crash your server, so lets made a littre WOP (Workaround-oriented programming)
gambiarra_motor.jpg

Delete all tegs form this script on movements module and slot.lua on movements.

No open the login.lua and change it for this:
Lua:
local conditionMP,conditionHP,conditionML,conditionCLUB,conditionSHI,conditionDIST,conditionAMP = {},{},{},{},{},{},{}
for i=1,100 do ---Carrega as conditions
	--- HP
	conditionHP[i] = createConditionObject(CONDITION_ATTRIBUTES)
	setConditionParam(conditionHP[i], CONDITION_PARAM_TICKS, -1)
	setConditionParam(conditionHP[i], CONDITION_PARAM_STAT_MAXHEALTHPERCENT, 100+i)
	setConditionParam(conditionHP[i], CONDITION_PARAM_BUFF, true)
	setConditionParam(conditionHP[i], CONDITION_PARAM_SUBID, 50)
	--MANA
	conditionMP[i] = createConditionObject(CONDITION_ATTRIBUTES)
	setConditionParam(conditionMP[i], CONDITION_PARAM_TICKS, -1)
	setConditionParam(conditionMP[i], CONDITION_PARAM_STAT_MAXMANAPERCENT, 100+i)
	setConditionParam(conditionMP[i], CONDITION_PARAM_BUFF, true)
	setConditionParam(conditionMP[i], CONDITION_PARAM_SUBID, 51)
	--Magic level
	conditionML[i] = createConditionObject(CONDITION_ATTRIBUTES)
	setConditionParam(conditionML[i], CONDITION_PARAM_TICKS, -1)
	setConditionParam(conditionML[i], CONDITION_PARAM_STAT_MAGICLEVELPERCENT, 100+i)
	setConditionParam(conditionML[i], CONDITION_PARAM_BUFF, true)
	setConditionParam(conditionML[i], CONDITION_PARAM_SUBID, 52)
	--club axe sword
	conditionCLUB[i] = createConditionObject(CONDITION_ATTRIBUTES)
	setConditionParam(conditionCLUB[i], CONDITION_PARAM_TICKS, -1)
	setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_CLUBPERCENT, 100+i)
	setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_SWORDPERCENT, 100+i)
	setConditionParam(conditionCLUB[i], CONDITION_PARAM_SKILL_AXEPERCENT, 100+i)
	setConditionParam(conditionCLUB[i], CONDITION_PARAM_BUFF, true)
	setConditionParam(conditionCLUB[i], CONDITION_PARAM_SUBID, 53)
	--- shield
	conditionSHI[i] = createConditionObject(CONDITION_ATTRIBUTES)
	setConditionParam(conditionSHI[i], CONDITION_PARAM_TICKS, -1)
	setConditionParam(conditionSHI[i], CONDITION_PARAM_SKILL_SHIELDPERCENT, 100+i)
	setConditionParam(conditionSHI[i], CONDITION_PARAM_BUFF, true)
	setConditionParam(conditionSHI[i], CONDITION_PARAM_SUBID, 54)
	--- dist
	conditionDIST[i] = createConditionObject(CONDITION_ATTRIBUTES)
	setConditionParam(conditionDIST[i], CONDITION_PARAM_TICKS, -1)
	setConditionParam(conditionDIST[i], CONDITION_PARAM_SKILL_DISTANCEPERCENT, 100+i)
	setConditionParam(conditionDIST[i], CONDITION_PARAM_BUFF, true)
	setConditionParam(conditionDIST[i], CONDITION_PARAM_SUBID, 55)
end
function getSlotType(n) --By mock the bear
	if not n then
		return false
	end
	if n:match('%[(.+)%]') then
		n = n:match('%[(.+)%]')
		if n == '?' then
			return 0,n
		else
			return n:match('(.-)%.([+-])(%d+)%%')
		end
	else
		return false
	end

end
local function loadSet(cid)
	local t = {}
	for slot=1,9 do
		t[slot] = ''
		local s = getPlayerSlotItem(cid,slot).uid
		if s ~= 0  then
			t[slot] = getItemName(s)
		end
	end
	return t
end
function equip(cid,item,slot) --By mock the bear
	local HP = getCreatureHealth(cid)
	local MP = getCreatureMana(cid)
	local t = {}
	if item then
		local mm,sinal,qto = getSlotType(getItemName(item.uid))
		t[mm] = tonumber(qto)
	end
	for i=1,9 do -- Not on slot 10 > arrow
		if i ~= slot then
			if getPlayerSlotItem(cid,i).itemid ~= 0 then
				local aab = getPlayerSlotItem(cid,i).uid
				if aab then
					for _ in getItemName(aab):gmatch('(%[.-%])') do
						local mm,sinal,qto2 = getSlotType(_)
						if mm then
							if not t[mm] then
								t[mm] = 0
							end
							t[mm] = t[mm]+tonumber(qto2)
							print(mm,qto2)
							t[mm] = t[mm] > 100 and 100 or t[mm]
						end
					end
				end
			end
		end
	end
	local fu = 0
	local ca = {}
	local s = ''
	for sl,n in pairs(t) do
		fu = fu+1
		s = s..''..n..'% more of '..sl..'\n'
		if sl == 'hp' then
			doAddCondition(cid,conditionHP[tonumber(n)])
			doCreatureAddHealth(cid,HP-getCreatureHealth(cid))
			ca[50] = 1
			doPlayerSendTutorial(cid,19)
		elseif sl == 'mp' then
			doAddCondition(cid,conditionMP[tonumber(n)])
			doCreatureAddMana(cid,HP-getCreatureMana(cid))
			ca[51] = 1
			doPlayerSendTutorial(cid,19)
		elseif sl == 'ml' then
			doAddCondition(cid,conditionML[tonumber(n)])
			ca[52] = 1
		elseif sl == 'cas' then
			doAddCondition(cid,conditionCLUB[tonumber(n)])
			ca[53] = 1
		elseif sl == 'shield' then
			doAddCondition(cid,conditionSHI[tonumber(n)])
			ca[54] = 1
		elseif sl == 'dist' then
			doAddCondition(cid,conditionDIST[tonumber(n)])
			ca[55] = 1
		end
	end
	if fu > 0 then
		addEvent(doPlayerSendTextMessage,100,cid,24,'You have:\n'..s)
		for i=50,55 do
			if not ca[i] then
				doRemoveCondition(cid,CONDITION_ATTRIBUTES,i)
			end
		end
	else
		for i=50,55 do
			doRemoveCondition(cid,CONDITION_ATTRIBUTES,i)
		end
	end
	return true
end
function chk(cid,f) -- Wop ;DDDDD
	if not isPlayer(cid) then return end
	local t = loadSet(cid)
	for i=1,#f do
		if f[i] ~= t[i] then  -- If wold set is different form new it run equip function
			equip(cid,nil,slot)
			break
		end
	end
	addEvent(chk,2000,cid,t)
end
function onLogin(cid)
equip(cid,nil,slot)
	addEvent(chk,2000,cid,loadSet(cid)) -- Here we check!
	return TRUE
end

Realod and /mkick
:thumbup:
 
Back
Top