Ir para conteúdo
  • 0

Ter somente uma magia suprema liberada.


pedrizito15

Pergunta

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

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0


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())

 

Link para o comentário
Compartilhar em outros sites

  • 0

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....

Link para o comentário
Compartilhar em outros sites

  • 0

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
Ps: lá em cima, é a configuração.
Dá para colocar mais spells, se você entender de scripts.. O script ficou meio grande, pois você queria algo configurável .. Certo? kk'
Enfim, vou dá um exemplo de spell aqui:

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
Você vai me achar um mongol e me perguntar, "porque ele tá deixando essa spelll aq???" Bom, é para você ver um exemplo de:
 if (getPlayerStorageValue(cid, 465412) == 1) then
Ele checa se o player tem a storage "465412" se sim, ele faz executar a spell, se não, ele volta uma mensagem... ONDE O PLAYER GANHA ESSA STORAGE? Ham ? Ham ? Bom, lá no talkactions, você vai ver que na parte de:
magiasgroup1 = {magia1 = "exevo gran mas vis", magia2 = "exevo gran mas flam", storage = 465412},
Ele envia essa storage para o player, quando o player compra a spell pelo comando...
Mais especificamente dizendo:
 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 por christopher17288
Link para o comentário
Compartilhar em outros sites

  • 0

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
Link para o comentário
Compartilhar em outros sites

  • 0

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 por christopher17288
Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...