Ir para conteúdo
  • 0

Add Slot System, Pedido


JeanCristian

Pergunta

Bom, a uns anos atras eu procurei um script mais ninguem conseguiu fazer, talvez agora alguem consiga... lá vai!

um sistema de slot que pode ponhar slots nos seus items por exemplo até 3 slot em tal item ( configuravel o maximo de slots)

cada slot da atributos diferentes em porcentagem ( porcentagem configuravel)

sao separados em atributos por exemplo... hp,mp,CAS (Club, axe, sword) ,dist, ml.

para cada atributo existe uma gema, sao 6 gemas, por exemplo a gema de hp dá 15% de hp posso usar 3 slot em 1 item por exemplo um armor, entao se eu usar 3 gemas de hp eu fico com + 45% de hp, eu ja vi esse sistema entao é possivel que exista mais se conseguirem achar ( porque eu nao achei e procurei MUITO) eu dou rep e ajudo quem tiver esse mesmo pedido, agradeço desde já

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Bom, a uns anos atras eu procurei um script mais ninguem conseguiu fazer, talvez agora alguem consiga... lá vai!

um sistema de slot que pode ponhar slots nos seus items por exemplo até 3 slot em tal item ( configuravel o maximo de slots)

cada slot da atributos diferentes em porcentagem ( porcentagem configuravel)

sao separados em atributos por exemplo... hp,mp,CAS (Club, axe, sword) ,dist, ml.

para cada atributo existe uma gema, sao 6 gemas, por exemplo a gema de hp dá 15% de hp posso usar 3 slot em 1 item por exemplo um armor, entao se eu usar 3 gemas de hp eu fico com + 45% de hp, eu ja vi esse sistema entao é possivel que exista mais se conseguirem achar ( porque eu nao achei e procurei MUITO) eu dou rep e ajudo quem tiver esse mesmo pedido, agradeço desde já

Man se não me engano já vi este sistema postado, mas n lembro aonde ¬¬ se eu achar eu posto aq

Link para o comentário
Compartilhar em outros sites

  • 0

Olha, acho que é algo parecido com o que você quer:

 

Em data/actions/actions.xml adicione a seguinte tag:

<action itemid="8300" event="script" value="slot.lua"/>
Agora em data/actions/scripts crie um arquivo chamado slot.lua com o seguinte conteúdo:

 

--[[
Slot system 100% by mock \o
]]
---Config
local conf = {
	maxSlotCount=2,
	ignoredIds={}
}
--End

function choose(...) --- Function by mock.
	local arg = {...}
	return arg[math.random(1, #arg)]
end

if not getItemAttack then
	function getItemAttack(uid)
		return getItemAttribute(uid,'attack')
	end
	function getItemDefense(uid)
		return getItemAttribute(uid,'defense')
	end
end

local function isArmor(uid) -- Function by Mock the bear.
	if (getItemInfo(uid.itemid).armor ~= 0) and (getItemWeaponType(uid.uid) == 0) then
		return true
	end
	return false
end

local function isWeapon(uid) -- Function by Mock the bear.
	uid = uid or 0
	local f = getItemWeaponType(uid)
	if f == 1 or f == 2 or f == 3 then
		return true
	end
	return false
end

local function isShield(uid) -- Function by Mock the bear.
	uid = uid or 0
	if getItemWeaponType(uid) == 4 then
		return true
	end
	return false
end

local function isBow(uid) -- Function by Mock the bear.
	uid = uid or 0
	if getItemWeaponType(uid) == 5 and not isItemStackable(uid) then
		return true
	end
	return false
end

function onUse(cid, item, fromPosition, itemEx, toPosition) -- Script by mock the bear (MTB)
	if item.uid == 0 or item.itemid == 0 then return false end
	toPosition.stackpos = 255
	if item.uid == 0 or item.itemid == 0 then return false end
	toPosition.stackpos = 255
	if isInArray(conf.ignoredIds, itemEx.itemid)
	or (not getItemWeaponType(itemEx.uid) or getItemWeaponType(itemEx.uid) > 5)
	or (getItemWeaponType(itemEx.uid) == 0 and not isArmor(itemEx))
	or itemEx.itemid == 0 or itemEx.type > 1 or isItemStackable(itemEx.uid) then
		doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.")
		return true
	end
	if isCreature(itemEx.uid) then
		return false
	end
	
	local nam = getItemName(itemEx.uid)
	function getper()
		local n = 1
		for i=1,10 do
			n = n+math.random(0,10)
			if n < 8*i then
				break
			end
		end
		return n
	end
	
	function getSlotCount(nam)
		local c = 0
		for _ in nam:gmatch('%[(.-)%]') do
			c = c+1
		end
		return c
	end
	
	if getSlotCount(nam) < conf.maxSlotCount then
		local l = choose('hp','mp','ml','cas','shield','dist')
		local p = getper()

		doSendMagicEffect(toPosition,30)
		nam = nam..' ['..l..'.+'..p..'%]'
		doSendAnimatedText(toPosition,l..' '..p..'%',120)
		doItemSetAttribute(itemEx.uid,'name',nam)
		doRemoveItem(item.uid,1)
	else
		doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.")
	end
	return true
end

 

 

Agora em data/creaturescripts/creaturescripts.xml adicione a seguinte tag:

<event type="login" name="SlotLogin" script="slot.lua"/>
E para finalizar, em data/creaturescripts/scripts crie o arquivo slot.lua com o conteúdo abaixo:

 

---Script by mock the bear!
local conditionMP,conditionHP,conditionML,conditionCLUB,conditionSHI,conditionDIST,conditionAMP = {},{},{},{},{},{},{}

for i=1,100 do ---Carrega as conditions
	--- HP
	conditionHP = createConditionObject(CONDITION_ATTRIBUTES)
	setConditionParam(conditionHP, CONDITION_PARAM_TICKS, -1)
	setConditionParam(conditionHP, CONDITION_PARAM_STAT_MAXHEALTHPERCENT, 100+i)
	setConditionParam(conditionHP, CONDITION_PARAM_BUFF, true)
	setConditionParam(conditionHP, CONDITION_PARAM_SUBID, 50)
	--MANA
	conditionMP = createConditionObject(CONDITION_ATTRIBUTES)
	setConditionParam(conditionMP, CONDITION_PARAM_TICKS, -1)
	setConditionParam(conditionMP, CONDITION_PARAM_STAT_MAXMANAPERCENT, 100+i)
	setConditionParam(conditionMP, CONDITION_PARAM_BUFF, true)
	setConditionParam(conditionMP, CONDITION_PARAM_SUBID, 51)
	--Magic level
	conditionML = createConditionObject(CONDITION_ATTRIBUTES)
	setConditionParam(conditionML, CONDITION_PARAM_TICKS, -1)
	setConditionParam(conditionML, CONDITION_PARAM_STAT_MAGICLEVELPERCENT, 100+i)
	setConditionParam(conditionML, CONDITION_PARAM_BUFF, true)
	setConditionParam(conditionML, CONDITION_PARAM_SUBID, 52)
	--club axe sword
	conditionCLUB = createConditionObject(CONDITION_ATTRIBUTES)
	setConditionParam(conditionCLUB, CONDITION_PARAM_TICKS, -1)
	setConditionParam(conditionCLUB, CONDITION_PARAM_SKILL_CLUBPERCENT, 100+i)
	setConditionParam(conditionCLUB, CONDITION_PARAM_SKILL_SWORDPERCENT, 100+i)
	setConditionParam(conditionCLUB, 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 isInArray2(arr,var) -- Because in some servers it return 1 and 0 and others true and false
	for i,b in pairs(arr) do
		if var == b then
			return true
		end
	end
	return false
end

function check2(cid,i)
	if i == 5 or i == 6 then
		if isInArray({'head','necklace','backpack','body','legs','feet','ring'},getItemValue(getPlayerSlotItem(cid,i).itemid,'slotType') or '') then
			return false
		end
	end
	return true
end

function chk(cid,f)
	if not isPlayer(cid) then return end
	local t = loadSet(cid)
	for i=1,#f do
		if f[i] ~= t[i] then
			equip(cid,nil,slot)
			break
		end
	end
	addEvent(chk,2000,cid,t)
end

items = { ---- Only to get attr: slotType because getItemName dont return it -.-'
	_VERSION='1.0 By mock',
	XML_DIR='data/items/items.xml',
}
do
	local ia = os.clock()
	io.write('Loading items')
	local i = io.open(items.XML_DIR,'r')
	local u = i:read(-1)
	i:close()
	local u = u:match('<items>(.+)</items>')
	for mi,id,mid,name,data,me in u:gmatch('<(%a-)%s*id%s*=%s*"(%d+)"%s*(.-)%s*name%s*=%s*"(.-)"%s*>(.-)</(%a*)>') do
		if mi == 'item' and me == 'item' then
			local td = {name=name,id=id,type=1}
			for key,value in data:gmatch('<attribute key="(.-)" value="(.-)"/>') do
				td[key] = value
			end
			for key,value in mid:gmatch('(.-)="(.-)"') do
				td[key] = value
			end
			items[tonumber(id)] = td

			items[name] = td
		end
	end
	for mi,id,mid,name,data in u:gmatch('<(%a-)%s*id%s*=%s*"(%d*)"%s*(.-)%s*name%s*=%s*"(%a+)"%s*/>') do
		if mi == 'item' then
			local td = {name=name,id=id,type=2}
			for key,value in mid:gmatch('(.-)="(.-)"') do
				td[key] = value
			end
			items[tonumber(id)] = td
			items[name] = td
		end
	end
	io.write('[done '..os.clock()-ia..']\n')
end

function getItemValue(item,value)
	return items[item] and items[item][value]
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 and check2(cid,i) 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)
							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 onLogin(cid) ---Script by mock the bear!
	equip(cid,nil,slot)
	addEvent(chk, 2000, cid, loadSet(cid)) -- Here we check!
	return true
end

 

Link para o comentário
Compartilhar em outros sites

  • 0

esse dai usa 1 item só como gema, e o slot atributo é distribuido randomicamente,

eu quero um item para cada atributo, nao um item randomico, eu ja vi um servidor que tinha isso

acho que o dono dele pegou esse script e fez um atributo para cada id, e ponho uma porcentagem configuravel, esse ai a porcentagem nao é configuravel é randomica tambem.

tenso... só se uma pessoa que manja em script editar esse script por completo mesmo porque nao existiu nenhum post com esse script no ano passado para tras.. só se lançou esse ano


ninguem consegue me ajudar?

Link para o comentário
Compartilhar em outros sites

  • 0

action:

--[[
Slot system 100% by mock \o
]]
---Config
local conf = {
	maxSlotCount=2,
	ignoredIds={},
    items = {
        --[itemid] = {attr = "hp"/"mp"/"ml"/"cas"/"shield"/"dist", percent = x%},
        [4918] = {attr = "hp", percent = 5},
        [4920] = {attr = "dist", percent = 15},
        [4925] = {attr = "ml", percent = 5},
        --etc
    },
}
--End

function choose(...) --- Function by mock.
	local arg = {...}
	return arg[math.random(1, #arg)]
end

if not getItemAttack then
	function getItemAttack(uid)
		return getItemAttribute(uid,'attack')
	end
	function getItemDefense(uid)
		return getItemAttribute(uid,'defense')
	end
end

local function isArmor(uid) -- Function by Mock the bear.
	if (getItemInfo(uid.itemid).armor ~= 0) and (getItemWeaponType(uid.uid) == 0) then
		return true
	end
	return false
end

local function isWeapon(uid) -- Function by Mock the bear.
	uid = uid or 0
	local f = getItemWeaponType(uid)
	if f == 1 or f == 2 or f == 3 then
		return true
	end
	return false
end

local function isShield(uid) -- Function by Mock the bear.
	uid = uid or 0
	if getItemWeaponType(uid) == 4 then
		return true
	end
	return false
end

local function isBow(uid) -- Function by Mock the bear.
	uid = uid or 0
	if getItemWeaponType(uid) == 5 and not isItemStackable(uid) then
		return true
	end
	return false
end

function onUse(cid, item, fromPosition, itemEx, toPosition) -- Script by mock the bear (MTB)
	if item.uid == 0 or item.itemid == 0 then return false end
    local itemTable = conf.items[item.itemid]
    if not itemTable then
        return doPlayerSendCancel(cid, "You cannot use this item.")
    end
	toPosition.stackpos = 255
	if item.uid == 0 or item.itemid == 0 then return false end
	toPosition.stackpos = 255
	if isInArray(conf.ignoredIds, itemEx.itemid)
	or (not getItemWeaponType(itemEx.uid) or getItemWeaponType(itemEx.uid) > 5)
	or (getItemWeaponType(itemEx.uid) == 0 and not isArmor(itemEx))
	or itemEx.itemid == 0 or itemEx.type > 1 or isItemStackable(itemEx.uid) then
		doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.")
		return true
	end
	if isCreature(itemEx.uid) then
		return false
	end
	
	local nam = getItemName(itemEx.uid)
	
	function getSlotCount(nam)
		local c = 0
		for _ in nam:gmatch('%[(.-)%]') do
			c = c+1
		end
		return c
	end
	
	if getSlotCount(nam) < conf.maxSlotCount then
		local l = itemTable.attr
		local p = itemTable.percent

		doSendMagicEffect(toPosition,30)
		nam = nam..' ['..l..'.+'..p..'%]'
		doSendAnimatedText(toPosition,l..' '..p..'%',120)
		doItemSetAttribute(itemEx.uid,'name',nam)
		doRemoveItem(item.uid,1)
	else
		doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.")
	end
	return true
end
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

testando

nao querendo abusar ja abusando... vc sabe arrumar esse outro erro aki tambem?

cbkdws0.png


esse script que vc fez fico file ele esta dando os atributos aos items normalmente, mais nao esta funcionando tipo eu ponho o item que da hp ele nao da hp, o item de skills nao da skills, talvez seja esse erro ai que postei q esta causando isso

Editado por JeanCristian
Link para o comentário
Compartilhar em outros sites

  • 0

nao, provavelmente ja tinha antes de ponhar essa action é erro no script creature


vc consegue arrumar esse bug?


esse codigo foi feito em 2010 entao o tfs dele deve ser antigo eu uso o mapa 8.6 yurots sem ediçoes

entao alguma coisa ta errada no script do mock na parte creaturescripts


bom eu consegui resolver mt obrigado por me ajudar te devo + 1 rep pelo prometido ja te dei 3

Editado por JeanCristian
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...