Você criou dois tópicos iguais, cuidado rsrs
Ter somente uma magia suprema liberada.
Por pedrizito15, 20 de nov. de 2015 em Scripts
info
Grupo: Administrador
Registrado: 08/07/05
Posts: 5.8k
Reputação: +1.4k
Gênero: Outro

Editado Novembro 20 por Daniel
info
Grupo: Campones
Registrado: 17/06/13
Posts: 39
Reputação: +13
Gênero: Masculino

Passa mais informações... Ele dá use em algum item e troca x item por x magia? Ele compra por comando ? Ele compra de Npc?
info
Grupo: Cavaleiro
Registrado: 01/12/10
Posts: 158
Reputação: +4
Char no Tibia: Pedro Tacador De Bolt

@UP
A magia vai ser comprada por npc, não será possível trocar a magia depois que ela for escolhida.
local spells = {
--["spell_name"] = price,
["exevo gran mas flam"] = 100000,
["exevo gran mas vis"] = 200000,
}
local spell_list, storage = "*** SUPREME SPELLS ***", 40201
for spell_name, spell_price in pairs(spells) do
spell_list = spell_list.."\n"..spell_name.." - "..spell_price.." gold"
end
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
msg = msg:lower()
if not npcHandler:isFocused(cid) then
return false
end
if msgcontains(msg, "spell") or msgcontains(msg, "trade") then
selfSay("I sell the following supreme spells. If you like any of them, just tell me the name.", cid)
doPlayerPopupFYI(cid, spell_list)
talkState[talkUser] = 1
elseif spells[msg] and talkState[talkUser] == 1 then
if getPlayerStorageValue(cid, storage) > -1 then
selfSay("You already bought a supreme spell.", cid)
elseif doPlayerRemoveMoney(cid, spells[msg]) then
selfSay("Congratulations, you bought {"..msg.."}!", cid)
doPlayerLearnInstantSpell(cid, msg)
setPlayerStorageValue(cid, storage, 1)
else
selfSay("You don't have enough money ({"..spells[msg].."}).", cid)
end
talkState[talkUser] = 0
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
info
Grupo: Cavaleiro
Registrado: 01/12/10
Posts: 158
Reputação: +4
Char no Tibia: Pedro Tacador De Bolt

Acredito ter feito o npc certinho, não dá erro mas quando fala o nomes das magias, não acontece nada. Troquei as palavras de invocação "exevo gran mas flam" para ''Hells core", nome correto e mesmo assim não deu em nada, Teria como fazer ou grupo de magias no mesmo npc para não ter que ficar fazendo vários? Por Exemplo no level 60 ele escolhe entre "exevo gran mas flam" ou "exevo gran mas vis", no level 100 ele pode escolher entre "exevo gran mas mort" ou "exevo gran mas san".
Se por talkaction ficar mais fácil pode ser por comando também.
Agradeço....
info
Grupo: Campones
Registrado: 17/06/13
Posts: 39
Reputação: +13
Gênero: Masculino

Fiz o script, mas por falta de atenção minha, eu fiz de um jeito diferente do que você pediu .. rs' Só 1 min.. Vou modifica-lo.
@edit !
Bem, aqui voltamos nós.. rsrsrs'
A primeira configuração, é opcional, mas acho que seria uma boa ... Uma boa mesmo ! "Para o System que tu quer" ... Tanto que fiz. rsrs'
Bem, o primeiro System, é de o player receber mensagens ao ele chegar em X level, onde ele já possa comprar X magia.
Assim:
Bom.. Vamos lá, caso queira essa mensagenzinha, vá em: data/creaturescripts/creaturescript.xml e cole a
Tag:
<event type="advance" name="AdvanceLevel" event="script" value="checarlevel.lua"/>
Registre-a no login.lua com:
registerCreatureEvent(cid, "AdvanceLevel")
Ainda em data/creaturescripts vá em /scripts e copie um arquivo.lua qualquer, cole lá mesmo e renomeie para: "checarlevel"
Logo em seguida, isso dentro:
local config = {
levelgrupos = {grupo1 = 60, grupo2 = 100},
magiasgrupo1 = {magia1 = "exevo gran mas vis", magia2 = "exevo gran mas flam"},
magiasgrupo2 = {magia1 = "exevo gran mas mort", magia2 = "exevo gran mas san"}
}
function onAdvance(cid, skill, oldLevel, newLevel)
if getPlayerLevel(cid) == config.levelgrupos.grupo1 then
return doPlayerSendTextMessage(cid, 27, "Parabéns, você atingiu ao level ["..getPlayerLevel(cid).."] e ingressou ao Group1 ! Agora você pode obeter a ["..config.magiasgrupo1.magia1.."] ou ["..config.magiasgrupo1.magia2.."], utilize o comando !buysupreme+nomemagia para compra-la. Ex: !buysupreme "..config.magiasgrupo1.magia1..". Para mais informações, utilize o comando !buysupreme")
end
if getPlayerLevel(cid) == config.levelgrupos.grupo2 then
return doPlayerSendTextMessage(cid, 27, "Você chegou ao level ["..getPlayerLevel(cid).."] e recebeu as opções de compra das supremes magias ["..config.magiasgrupo2.magia1.."] ou ["..config.magiasgrupo2.magia2.."], utilize o comando !buysupreme+nome magia para compra-la. Ex: !buysupreme "..config.magiasgrupo2.magia1..". Para mais informações, utilize o comando !buysupreme")
end
return true
end
Agora, mudando de rumo, vamos à: data/talkactions/talkactions.xml e colocar:
<talkaction log="yes" words="!buysupreme" event="script" value="buyspells.lua"/>
Depois, vamos em talkactions/scripts e copiar um qualquer lá, renomear para "buyspells" e colcar isso dentro:
local config = {
levelgroup1 = 60, --Level Group1.
levelgroup2 = 100, --Level Group2.
magiasgroup1 = {magia1 = "exevo gran mas vis", magia2 = "exevo gran mas flam", storage = 465412}, --Magias Grupo 1. Lembrete: Você pode adicionar mais magias, se souber..
magiasgroup2 = {magia1 = "exevo gran mas mort", magia2 = "exevo gran mas san", storage = 456422}, --Magias Grupo 2. Lembrete: Você pode adicionar mais magias, se souber..
moneymagiasgroup1 = 20000, --Quanto vai Custar cada Magia do Grupo 1.
moneymagiasgroup2 = 40000, --Quanto vai Custar cada Magia do Grupo 2.
}
function onSay(cid, words, param)
if param == '' then
local str = ("SUPREME SPELLS:\n\n[Group 1] (Level "..config.levelgroup1.."): "..config.moneymagiasgroup1.." golds\n"..config.magiasgroup1.magia1.."\n"..config.magiasgroup1.magia2.."\n------------------------\n[Group 2] (Level "..config.levelgroup2.."): "..config.moneymagiasgroup2.." golds\n"..config.magiasgroup2.magia1.."\n"..config.magiasgroup2.magia2.."\n------------------------\n")
doShowTextDialog(cid, 1821, str)
return true
end
if param == config.magiasgroup1.magia1 then
if getPlayerStorageValue(cid, config.magiasgroup1.storage) == 1 then
return doPlayerSendTextMessage(cid, 27, "Você já comprou magias deste grupo.")
end
if getPlayerLevel(cid) >= config.levelgroup1 then
if doPlayerRemoveMoney(cid, config.moneymagiasgroup1) then
doPlayerSendTextMessage(cid,27, "Parabéééns! :V Você comprou a magia "..param..".")
setPlayerStorageValue(cid, config.magiasgroup1.storage, 1)
doSendMagicEffect(getPlayerPosition(cid), CONST_ME_FIREWORK_BLUE)
return doSendAnimatedText(getPlayerPosition(cid), "Buy Magia", 18)
else
return doPlayerSendTextMessage(cid, 27, "Você não possui dinheiro suficiente para comprar esta magia.")
end
else
return doPlayerSendTextMessage(cid, 27, "Você não possuir level suficiente para comprar esta magia. Utilize o comando !buysupreme para informações.")
end
elseif param == config.magiasgroup1.magia2 then
if getPlayerStorageValue(cid, config.magiasgroup1.storage) == 1 then
return doPlayerSendTextMessage(cid, 27, "Você já comprou magias deste grupo.")
end
if getPlayerLevel(cid) >= config.levelgroup1 then
if doPlayerRemoveMoney(cid, config.moneymagiasgroup1) then
doPlayerSendTextMessage(cid,27, "Parabéééns! :V Você comprou a magia "..param..".")
setPlayerStorageValue(cid, config.magiasgroup1.storage, 1)
doSendMagicEffect(getPlayerPosition(cid), CONST_ME_FIREWORK_BLUE)
return doSendAnimatedText(getPlayerPosition(cid), "Buy Magia", 18)
else
return doPlayerSendTextMessage(cid, 27, "Você não possui dinheiro suficiente para comprar esta magia.")
end
else
return doPlayerSendTextMessage(cid, 27, "Você não possuir level suficiente para comprar esta magia. Utilize o comando !buysupreme para informações.")
end
elseif param == config.magiasgroup2.magia1 then
if getPlayerStorageValue(cid, config.magiasgroup2.storage) == 1 then
return doPlayerSendTextMessage(cid, 27, "Você já comprou magias deste grupo.")
end
if getPlayerLevel(cid) >= config.levelgroup2 then
if doPlayerRemoveMoney(cid, config.moneymagiasgroup2) then
doPlayerSendTextMessage(cid,27, "Parabéééns! :V Você comprou a magia "..param..".")
setPlayerStorageValue(cid, config.magiasgroup2.storage, 1)
doSendMagicEffect(getPlayerPosition(cid), CONST_ME_FIREWORK_BLUE)
return doSendAnimatedText(getPlayerPosition(cid), "Buy Magia", 18)
else
return doPlayerSendTextMessage(cid, 27, "Você não possui dinheiro suficiente para comprar esta magia.")
end
else
return doPlayerSendTextMessage(cid, 27, "Você não possui level suficiente para comprar esta magia.")
end
elseif param == config.magiasgroup2.magia2 then
if getPlayerStorageValue(cid, config.magiasgroup2.storage) == 1 then
return doPlayerSendTextMessage(cid, 27, "Você já comprou magias deste grupo.")
end
if getPlayerLevel(cid) >= config.levelgroup2 then
if doPlayerRemoveMoney(cid, config.moneymagiasgroup2) then
doPlayerSendTextMessage(cid,27, "Parabéééns! :V Você comprou a magia "..param..".")
setPlayerStorageValue(cid, config.magiasgroup2.storage, 1)
doSendMagicEffect(getPlayerPosition(cid), CONST_ME_FIREWORK_BLUE)
return doSendAnimatedText(getPlayerPosition(cid), "Buy Magia", 18)
else
return doPlayerSendTextMessage(cid, 27, "Você não possui dinheiro suficiente para comprar esta magia.")
end
else
return doPlayerSendTextMessage(cid, 27, "Você não possui level suficiente para comprar esta magia.")
end
else
doPlayerSendTextMessage(cid, 27, "Esta magia não faz parte de nenhum grupo, utilize o comando: !buysupreme para informações.")
end
return true
end
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGYBALL)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -120.5, -30, -120.1, 0)
local condition = createConditionObject(CONDITION_HASTE)
setConditionParam(condition, CONDITION_PARAM_TICKS, 22000)
setConditionFormula(condition, -1.1, -1, -1.2, -1)
setCombatCondition(combat, condition)
local arr = {
{0, 0, 1, 1, 1, 0, 0},
{0, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 3, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1},
{0, 1, 1, 1, 1, 1, 0},
{0, 0, 1, 1, 1, 0, 0}
}
local area = createCombatArea(arr)
setCombatArea(combat, area)
function onCastSpell(cid, var)
if (getPlayerStorageValue(cid, 465412) == 1) then
doCombat(cid, combat, var)
return doCreatureSay(cid, "Exevo Gram Mas Vis", TALKTYPE_ORANGE_1)
else
doPlayerSendCancel(cid,"Você precisa de level 60 e precisa ter comprado esta magia.")
doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
end
return true
end
if (getPlayerStorageValue(cid, 465412) == 1) then
magiasgroup1 = {magia1 = "exevo gran mas vis", magia2 = "exevo gran mas flam", storage = 465412},setPlayerStorageValue(cid, config.magiasgroup1.storage, 1)
:V
Era pra ser um comando, eu acabei criando um system .. hahaha'
Mais uma coisinha, se você usar o comando "!buysupreme" sem ter nada na frente, ele abre um popup, assim:
De acordo com as configurações que você fizer no local config.
Bom, testa aí, dps responde aí em baixo, aqui funcionou perfeitamente.. :V
(Se não souber adicionar mais spells no script, comenta aí.. Que eu ou alguém adc pra você.. rs')
Flw!
Editado Novembro 23 por christopher17288
info
Grupo: Cavaleiro
Registrado: 01/12/10
Posts: 158
Reputação: +4
Char no Tibia: Pedro Tacador De Bolt

Gostei de mais, muito bom mesmo, mas quando eu tento usar a magia fala que eu tenho que aprender ela antes.
Não da nenhum erro ,e quando tentar comprar novamente fala que a magia já foi comprada.
Acho que instalei corretamente, se eu errei foi na spells :
<instant name="Rage of the Skies" words="exevo gran mas vis" lvl="55" mana="600" prem="1" selftarget="1" exhaustion="2000" groups="4,2000" icon="119" needlearn="1" event="script" value="attack/rage of the skies.lua"> <vocation id="1;5"/> </instant>
O needlearn tem que ficar marcado correto ? se não o player não precisaria aprender
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS) setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 5, 12) local area = createCombatArea(AREA_CROSS6X6) setCombatArea(combat, area) function onCastSpell(cid, var) if (getPlayerStorageValue(cid, 465412) == 1) then doCombat(cid, combat, var) return doCreatureSay(cid, "Exevo Gram Mas Vis", TALKTYPE_ORANGE_1) else doPlayerSendCancel(cid,"Você precisa de level 60 e precisa ter comprado esta magia.") doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) end return true end
info
Grupo: Campones
Registrado: 17/06/13
Posts: 39
Reputação: +13
Gênero: Masculino

Eu não entendi muito oque você disse.. '-' kkk'
Não é essa a intenção ? Cada player só poder comprar 1 magia de cada grupo ?
O Script roda assim: Tem 2 grupos, com 2 spells cada, se você chegar ao nivel 60 e comprar uma magia do grupo 1, você não pode mais comprar nenhuma outra magia do grupo 1.
Mas, ao chegar level 100, você já ingressa no grupo 2 e pode comprar outras magias do level 100. Quando você usa "!buysupreme" dá para checar os leveis e as magias que podem ser compradas.. Em X Level, por X de grana.
Não era isso que você queria? kkk '
Suas falas:
'-'
E veja se está tudo configurado certinho, tanto no script da creaturescripts quanto no da talkactions...
Lembrando, a storage que você por no script de talkactions, tem que ser a mesma da Spell..
Assim como fiz nos exemplos acima.. '-'
Caso queira, manda os nomes das magias pra mim, e os nomes do arquivo.lua que elas ficam, q eu configuro no script pra você..
Editado Novembro 23 por christopher17288
info
Grupo: Cavaleiro
Registrado: 01/12/10
Posts: 158
Reputação: +4
Char no Tibia: Pedro Tacador De Bolt

Man tipo : depois que você usa o comando, você não aprende a magia sacou, você usa o comando !buysupreme exevo gran mas flam, o dinheiro some, mas você não consegue usar a spell entedeu ? Se você tenta comprar de novo aparece : "Você já comprou uma spells desse grupo", ou seja ta funcionando só não está "ensinando" a spell para o player.
<instant name="Rage of the Skies" words="exevo gran mas vis" lvl="55" mana="600" prem="1" selftarget="1" exhaustion="2000" groups="4,2000" icon="119" needlearn="1" event="script" value="attack/rage of the skies.lua"> <vocation id="1;5"/> </instant>
o "needlearn="1" significa que a magia tem que ser ensinada(comprada) Com "needlearn="0" não precisa comprar a spells, ao chegar no nível ele consegue usar, eu testei e se você deixar o "needlearn="0" o jogador consegue usar a spell independe do sistema que você criou. Sacou ?
Obrigado pela atenção que você está me dando :x





info
Grupo: Cavaleiro
Registrado: 01/12/10
Posts: 158
Reputação: +4
Char no Tibia: Pedro Tacador De Bolt
Galera eu precisava de um script que não permitisse que o jogador comprasse 2 spells supremas, exemplo se ele comprar "Exevo gran mas flam" ele não pode comprar "Exevo gran mas vis". Se possível funcionar com mais de duas spells, porque estou fazendo outra além dessas...
Servidor ; Allisow OTS 5.0//// versão 9.83