MY
dúvida

Como criar um item que da skill

Por mylorc, 23 de out. de 2013 em Scripts

como criar um item que da ml
resolvido
script
53
5.6k
mylorcM
23 de outubro de 2013 às 13:54

[Resolvido] Olá,galera preciso criar um iten que da skill,alguém pode ajudar?

Se tiver algum script poste porfavor,pode ser skill ML ,obrigado.

 

Obs:falo de um item tipo livro,em que você clicka e recebe o skill,e que pode usar uma vez só.

Editado Outubro 31 por mylorc

KilluaK
23 de outubro de 2013 às 13:59

Vc so tem que adicionar a tag no items.xml e registar no movements.xml

 

<attribute key="skillFist" value="5" />

Fist eh fist fighting e 5 eh o tanto de skill que adiciona

 

pode ser skillSword skillAxe skillClub skillDistance

 

e pra ml

 

<attribute key="magiclevelpoints" value="1" />

Dps registra o item no movements.xml, assim

 

<movevent type="Equip" itemid="2323" slot="head" event="function" value="onEquipItem">
<vocation id="1"/>
<vocation id="5" showInDescription="0"/>
<vocation id="2"/>
<vocation id="6" showInDescription="0"/>
</movevent>
<movevent type="DeEquip" itemid="2323" slot="head" event="function" value="onDeEquipItem"/>

no itemid vc coloca o id, no slot coloca onde o item fica, pode ser head, body, legs, hand.

mylorcM
23 de outubro de 2013 às 14:19

Não,não,falo de um item tipo livro,em que você clicka e recebe o skill,e que pode usar uma vez só.

LumusL
23 de outubro de 2013 às 14:24

Tenta com esse:

function onUse(cid, item, fromPosition, itemEx, toPosition)

local mglevel = 10

	if doPlayerAddMagLevel(cid, mglevel) then
		doRemoveItem(cid)
		doPlayerSendTextMessage(cid, 22, "Você recebeu " .. mglevel .. ".")
	end
return true
end
	
mylorcM
23 de outubro de 2013 às 15:02

1° ele o player não recebe 10 ml corretamente e 2° o item não some da Bp.

Pode corrigir isso?

zipter98Z
23 de outubro de 2013 às 15:08

Pra sumir da bp, só colocar

doRemoveItem(item.uid, 1)

no lugar de

doRemoveItem(cid)

eu não manjo de skills de tibia, e nem conheço muito bem as funções pra adiciona-las, mas se quiser tentar: e n, n testei

function onUse(cid, item, fromPosition, itemEx, toPosition)
 
local mglevel = 10
 
if getPlayerStorageValue(cid, 11296) >= 1 then
doPlayerSendCancel(cid, "vc já usou o item de ml.")
return true 
end
doRemoveItem(item.uid, 1)
setPlayerStorageValue(cid, 11296, 1)
doPlayerAddMagLevel(cid, mglevel)
doPlayerSendTextMessage(cid, 22, "Você recebeu 10 lvs de ml.")
return true
end

Editado Outubro 23 por zipter98

LumusL
23 de outubro de 2013 às 15:23

Se vai remover o item, pra que está setando storage?

zipter98Z
23 de outubro de 2013 às 15:25

Pq ele pode ganhar o item denovo, e tentar usá-lo. E também o cara disse q só quer q possa usar o item 1x.

Editado Outubro 23 por zipter98

LumusL
23 de outubro de 2013 às 15:29

Aah é esqueci disso kkk'

--Topic

 

Tenta assim:

function onUse(cid, item, fromPosition, itemEx, toPosition)

local pid = getPlayerGUID(cid)

	if getPlayerStorageValue(cid, 13180) >= 1 then
		doPlayerSendCancel(cid, "Você já usou este item.")
	else
		doRemoveItem(item.uid, 1)
		doRemoveCreature(cid)
                db.query("UPDATE `players` SET `maglevel` = `maglevel` + 10 WHERE `id` = "..pid)
                setPlayerStorageValue(cid, 13180, 1)
    end

    return true
end

Editado Outubro 23 por Fawz

AlexclusiveA
23 de outubro de 2013 às 15:55

 

Vo ti dar um exemplo de um Short que da ml ..

 

Em items.xml :

 

</item><item id="7464" article="a" name="VIP Shorts">  <attribute key="weight" value="150" />   <attribute key="skillDist" value="4" />  <attribute key="skillAxe" value="4" />  <attribute key="skillsword" value="4" />  <attribute key="skillclub" value="4" />  <attribute key="skillfist" value="4" />  <attribute key="magiclevelpoints" value="4" />  <attribute key="description" value="Esse short FAZ a diferenca (+4 de tds os skills)" />  <attribute key="slotType" value="legs" /></item>
<attribute key="magiclevelpoints" value="4" /> <-- Aqui voce muda quantos ela vai dar de ml.

 

Ae adicione essa tag em movements.xml :

 

<movevent type="Equip" itemid="7464" slot="legs" event="function" value="onEquipItem"/><movevent type="DeEquip" itemid="7464" slot="legs" event="function" value="onDeEquipItem"/> <!-- VIP SHORTS -->
Lembrando que esse foi so um exemplo..Ai voce altera os Id's e Slots!

Editado Outubro 23 por Alexclusive

mylorcM
27 de outubro de 2013 às 08:45

Não resolveu,tem que clicar no item e ganhar 10 de ml e ai o item some da back pack e você fica com 10 lvl de ml. Pode ajudar?

 

 

 

Aah é esqueci disso kkk'

--Topic

 

Tenta assim:

function onUse(cid, item, fromPosition, itemEx, toPosition)

local pid = getPlayerGUID(cid)

	if getPlayerStorageValue(cid, 13180) >= 1 then
		doPlayerSendCancel(cid, "Você já usou este item.")
	else
		doRemoveItem(item.uid, 1)
		doRemoveCreature(cid)
                db.query("UPDATE `players` SET `maglevel` = `maglevel` + 10 WHERE `id` = "..pid)
                setPlayerStorageValue(cid, 13180, 1)
    end

    return true
end
AlexclusiveA
27 de outubro de 2013 às 10:29

"Antes era só um item que da a ml" isso já foi te passado.

Aí depois você altera o pedido, fica difícil...

LumusL
27 de outubro de 2013 às 10:55

Tenta assim:

function onUse(cid, item, fromPosition, itemEx, toPosition)

local pid = getPlayerGUID(cid)

	if getPlayerStorageValue(cid, 13180) >= 1 then
		doPlayerSendCancel(cid, "Você já usou este item.")
	else
		doRemoveItem(item.uid, 1)
        doPlayerAddMagLevel(cid, 10)
        setPlayerStorageValue(cid, 13180, 1)
    end

    return true
end

Tem esse aqui do oneshot mas é por tempo:

local condition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_TICKS, 2 * 60 * 1000)
setConditionParam(condition, CONDITION_PARAM_STAT_MAGICLEVEL, 10)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_SUBID, 101)

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getCreatureCondition(cid, CONDITION_ATTRIBUTES, 101) then
		return doPlayerSendCancel(cid, "Você já usou o item, aguarde o efeito acabar.")
	end
	
	doSendMagicEffect(fromPosition, CONST_ME_MAGIC_GREEN)
	return doAddCondition(cid, condition)
end
LuckOakeL
27 de outubro de 2013 às 13:47
function onUse(cid, item, fromPosition, itemEx, toPosition)
 
local mglevel = 10
 
if getPlayerStorageValue(cid, 11296) >= 1 then
doPlayerSendCancel(cid, "vc já usou o item de ml.")
return true 
end
doRemoveItem(item.uid, 1)
setPlayerStorageValue(cid, 11296, 1)
doPlayerAddMagLevel(cid, mglevel)
doPlayerSendTextMessage(cid, 22, "Você recebeu 10 lvs de ml.")
return true
end

 

Engraçado é que esse script deveria funcionar. Você registrou no actions.xml?

Editado Outubro 27 por LuckOake

gonorreiaswatG
27 de outubro de 2013 às 13:59

Bom, pode ser pequenos erros ou source diferentes.

 

Por este script como exemplo:

 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

local pid = getPlayerGUID(cid)

if getPlayerStorageValue(cid, 13180) >= 1 then
doPlayerSendCancel(cid, "Você já usou este item.")
else
doRemoveItem(item.uid, 1)
doPlayerAddMagLevel(cid, 10) --- poderia ser assim doPlayerAddMagicLevel(cid, 10) por exemplo.
setPlayerStorageValue(cid, 13180, 1)
end

return true
end

 

E este, para ficar infinito, recomendo usar o valor "-1" no tempo.

 

local condition = createConditionObject(CONDITION_ATTRIBUTES)

setConditionParam(condition, CONDITION_PARAM_TICKS, 2 * 60 * 1000) -- com o valor definido para -1, seria tempo infinito.
setConditionParam(condition, CONDITION_PARAM_STAT_MAGICLEVEL, 10)
setConditionParam(condition, CONDITION_PARAM_BUFF, true)
setConditionParam(condition, CONDITION_PARAM_SUBID, 101)

function onUse(cid, item, fromPosition, itemEx, toPosition)
if getCreatureCondition(cid, CONDITION_ATTRIBUTES, 101) then
return doPlayerSendCancel(cid, "Você já usou o item, aguarde o efeito acabar.")
end

doSendMagicEffect
(fromPosition, CONST_ME_MAGIC_GREEN)
return doAddCondition(cid, condition)
end

 

Faça os testes das minhas sugestões, pois estão certo os script, só que recomendo que use o primeiro.

 

 

Boa sorte.