Ir para conteúdo

[Talkaction] Comprando Summon


Posts Recomendados

Faaala galerinha de sempre! Tudo tranquilo? :smile_positivo: Esses dias eu queria fazer meu próprio pet system, mas ai eu comecei a fazer e me deu preguiça, então eu dei uma ajeitada e fiz tipo de uma compra de summon.

 

Como funciona: Você deve criar os monstros e depois adiciona-los ao script para poderem ser comprados.

 

Palavras:

 

!summon - Sumona o seu summon por certo tempo gastando uma certa quantidade de soul, caso você tenha comprado ele já..

!buysummon - Compra o summon por um preço.

!sellsummon - Vende o summon por metade do preço que você comprou ele.

!offer - Checa as ofertas de summons a venda.

 

Talkaction:

 

function onSay(cid, words, param)

local buyprice = {
['rat'] = {price = 1000, message = "Parabéns, você comprou o Rat, cuide bem dele.", seconds = 10, soul = 30},
['skeleton'] = {price = 10000, message = "Parabéns, você comprou o Skeleton, cuide bem dele.", seconds = 30, soul = 40},
['demon'] = {price = 100000, message = "Parabéns, você comprou o Demon, cuide bem dele.", seconds = 60, soul = 50},
}
local offert = ""

if words == "!summon" then
if getPlayerStorageValue(cid, 22000) ~= -1 then
if #getCreatureSummons(cid) == 0 then
if getPlayerSoul(cid) >= buyprice[getPlayerStorageValue(cid, 22000)].soul then
doSummonPet(cid, getPlayerStorageValue(cid, 22000), buyprice[getPlayerStorageValue(cid, 22000)].seconds)
doPlayerSendTextMessage(cid, 4, "Você usou seu summon, dentro de ".. buyprice[getPlayerStorageValue(cid, 22000)].seconds .." ele irá ser removido.")
doPlayerAddSoul(cid, - (buyprice[getPlayerStorageValue(cid, 22000)].soul))
else
doPlayerSendCancel(cid, "Você não tem soul suficiente.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
else
doPlayerSendCancel(cid, "Você não pode mais sumonar.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
else
doPlayerSendCancel(cid, "Você ainda não possui um summon.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
end

if words == "!buysummon" then
if param ~= "" then
if getPlayerStorageValue(cid, 22000) == -1 then
if getPlayerMoney(cid) >= buyprice[string.lower(param)].price then
setPlayerStorageValue(cid, 22000, string.lower(param))
doPlayerSendTextMessage(cid, 4, buyprice[string.lower(param)].message)
doPlayerRemoveMoney(cid, buyprice[string.lower(param)].price)
else
doPlayerSendCancel(cid, "Você não tem dinheiro suficiente para comprar este summon.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
else
doPlayerSendCancel(cid, "Você já possui um summon.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
else
doPlayerSendCancel(cid, "Escolha o summon a ser comprado.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
end

if words == "!sellsummon" then
if getPlayerStorageValue(cid, 22000) ~= -1 then
doPlayerAddMoney(cid, (buyprice[getPlayerStorageValue(cid, 22000)].price)*5/10)
doPlayerSendTextMessage(cid, 4, "Summon vendido com sucesso.")
setPlayerStorageValue(cid, 22000, -1)
else
doPlayerSendCancel(cid, "Você não possui um summon.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
end

if words == "!offer" then
for name, _ in pairs(buyprice) do
offert = offert == "" and "Summons: \n\n" .. name .. " " .. buyprice[name].price or offert .. "\n" .. name .. " " .. buyprice[name].price
end
doShowTextDialog(cid, 2160, offert)
end

return TRUE
end

 

Tag:

 

<talkaction words="!summon;!buysummon;!sellsummon;!offer" script="NomeDoArquivo.lua" />

 

Como adicionar mais monstros:

 

 

local buyprice = {
['rat'] = {price = 1000, message = "Parabéns, você comprou o Rat, cuide bem dele.", seconds = 10, soul = 30},
['skeleton'] = {price = 10000, message = "Parabéns, você comprou o Skeleton, cuide bem dele.", seconds = 30, soul = 40},
['demon'] = {price = 100000, message = "Parabéns, você comprou o Demon, cuide bem dele.", seconds = 60, soul = 50},
}

 

Adicionando:

 

['rat'] = {price = 1000, message = "Parabéns, você comprou o Rat, cuide bem dele.", seconds = 10, soul = 30},

 

Price é o preço para comprar o summon,

Message é a mensagem que irá aparecer quando o summon for comprado.

Seconds é o tempo que o summon durará quando for sumonado. Se desejar que seja infinito, coloque seconds = FALSE

Soul é quanto que gastará de soul para sumonar o monstro.

 

 

Funções:

 

function doSummonPet(cid, name, time)

if getMonsterInfo(name) then
local sum = doSummonMonster(cid, name)
if type(time) == "number" then
addEvent(doRemovePet, time*1000, cid, name)
end
end
end

function doRemovePet(cid, name)

for y, x in ipairs(getCreatureSummons(cid)) do
if isCreature(x) then
if string.lower(getCreatureName(x)) == name then
doRemoveCreature(x)
break
end
end
end
end

 

Adicione isso em data/lib/functions

 

Bom, é isso, creio que melhorarei o sistema depois. Até.

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

Só não entendi o uso de 2 tabelas para o script demonzinho caolho ):

se você usar in pairs você faz sóv com uma :bigode:

 

 

 

deixa só essa:

local buyprice = { 
['rat'] = {price = 1000, value = 1, message = "Parabéns, você comprou o Rat, cuide bem dele.", seconds = 10, soul = 30}, 
['skeleton'] = {price = 10000, value = 2, message = "Parabéns, você comprou o Skeleton, cuide bem dele.", seconds = 30, soul = 40}, 
['demon'] = {price = 100000, value = 3, message = "Parabéns, você comprou o Demon, cuide bem dele.", seconds = 60, soul = 50}, 
} 

 

ai

if words == "!offer" then 
local str = ""
str = str .. "Summons para Venda:\n\n"
for a, b in pairs(buyprice) do 
str = str..a.."("..b.price..")\n"
end
str = str .. ""  
return doShowTextDialog(cid, 2160, str)  
end

 

OBS: usa elseif dá para salvar algumas linhas :T

 

 

 

abraços

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

@Subwat

 

Qualquer vocação está apta para comprar a talkaction.

 

@Vodkart

 

Como eu disse, originalmente era um projeto de pet, por isso eu estava usando duas tabelas e esqueci de remove-las, jájá edito pra deixar uma tabela só, e quanto ao elseif não me traria grandes vantagens, só meu pouparia o uso de alguns end.

 

EDIT:

 

Pronto, em uma tabela só agora amiguinhos. kkkk

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

Humm... A ideia é boa mas o script podia ser melhor se voce usa-se in pairs

Pra que botar function na lib? Soh sao 2 functions '-'

 

Eu falei que ia refazer sou mal:

 

 

function alreadyHaveSummon(cid, configs)
   for i,x in pairs(configs) do
       if getPlayerStorageValue(cid, x.storage) >= 1 then
           return i, x.storage
       end
   end
return false
end

function onSay(cid, words, param)
   local configs = {
   ['Rat'] = {price = 1000, storage = 22001, message = "Parabéns, você comprou o Rat, cuide bem dele.", seconds = 10, soul = 30},
   ['Skeleton'] = {price = 10000, storage = 22002, message = "Parabéns, você comprou o Skeleton, cuide bem dele.", seconds = 30, soul = 40},
   ['Demon'] = {price = 100000, storage = 22003, message = "Parabéns, você comprou o Demon, cuide bem dele.", seconds = 60, soul = 50},
   }
   local lol,lawl = alreadyHaveSummon(cid, configs)

   if words == "!summon" then
       if configs[lol] then
           if #getCreatureSummons(cid) >= 1 then
               return doPlayerSendCancel(cid, "You already have summoned a monster.")
           end
           local summon = doSummonCreature(lol, getThingPosition(cid))
           doConvinceCreature(cid, summon)
           doPlayerSendTextMessage(cid, 4, "You have used your summon, it will disapear in " .. configs[lol].seconds .. " seconds.")
           addEvent(function() if isCreature(summon) then doRemoveCreature(summon) end end, configs[lol].seconds*1000)
       else
           return doPlayerSendCancel(cid, "You don't have a summon.")
       end
   elseif words == "!sellsummon" then
       if configs[lol] then
           setPlayerStorageValue(cid, lawl, 0)
           doPlayerAddMoney(cid, configs[lol].price/2)
       else
           return doPlayerSendCancel(cid, "You don't have a summon.")
       end
   end


   for i,x in pairs(configs) do
       if words == "!buysummon" then
           if i:lower() == param:lower() then
               if not lol then
                   if doPlayerRemoveMoney(cid, x.price) then
                       setPlayerStorageValue(cid, x.storage, 1)
                       return doPlayerSendTextMessage(cid, 4, x.message)
                   else
                       return doPlayerSendCancel(cid, "You need " .. x.price .. " gold coins to buy this summon.")
                   end
               else
                   return doPlayerSendCancel(cid, "You already have a summon.")
               end
           end
       elseif words == "!offerts" then
           str = str and str .. i .. " /// " .. x.price .. "\n" or "Name /// Price\n\n" .. i .. " /// " .. x.price .. "\n"
       end
   end
return words == "!offerts" and doPlayerPopupFYI(cid, str) or TRUE
end

 

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

Eu preferi adicionar na lib pois essas funções são quase que extensões de uma função que eu tinha postado, simplesmente por isso mesmo. Qualquer coisa é só adicionar no próprio script que irá dar certo.

 

EDIT: Alguns scripts eu faço para funcionalidade, já outros para testar minhas habilidades, neste caso foi para funcionalidade.

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

  • 2 months later...

Kra ta dando esse erro aqui não sei porque

 

 

[Error - TalkAction Interface]

[30/06/2011 19:46:42] data/talkactions/scripts/buysummon.lua:onSay

[30/06/2011 19:46:42] Description:

[30/06/2011 19:46:42] data/lib/050-function.lua:28: Creature not found!

[30/06/2011 19:46:42] stack traceback:

[30/06/2011 19:46:42] [C]: in function 'error'

[30/06/2011 19:46:42] data/lib/050-function.lua:28: in function 'doSummonPet'

[30/06/2011 19:46:42] data/talkactions/scripts/buysummon.lua:14: in function <data/talkactions/scripts/buysummon.lua:1>

 

 

se vc acha alguma coisa me fala

Link para o comentário
Compartilhar em outros sites

  • 4 weeks later...

Parabéns Kra perfeito script, em otima forma !!

 

vouu colocar pra player sumona Bazir opkadspkdopkdsaokp

 

muito bomm vlw msm !!!

 

to montando um baiak, com todas as melhores scripts... e essa ja faz parte tbm.. vlws :thumbsupsmiley:

 

 

post-324054-0-91930300-1311852922_thumb.jpg

Sangue Friio :diablo:

Link para o comentário
Compartilhar em outros sites

Parceiro esse script ta bugando em uma coisa

quando vc usa o comando "!sellsummon"

o summon continua com vc...

so sai quando vc desconecta...

tirando isso ta tudo ok...

pelo menos ak em ksa

kkk

testei em global 8.6...

 

e tem como sumonar 2?

tipo ter 2 sumons nesse modo?

 

vale rep+ :D

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

×
×
  • Criar Novo...