Ir para conteúdo
  • Cadastre-se

Normal Modificar um Sistema de Gemas


Posts Recomendados

Olá pessoal da Tk  :pirate: 

A algum tempo venho usando um sistema de gemas, ele funciona mais ou menos assim:

Você clica em um determinado item que é dividido entre vocações (Druid, Sorc, Kina e Pally), cada vocação tem a sua chamada "gema" e ao clicar nela ativa-se a sua função.

Gemas >0a20uB0.png   Efeito que sai ao usar (cada voc tem sua cor) > m5FjX29.png

 

Enfim, esse sistema funciona através de uma lib e um action e é aí que entra o meu pedido:

Gostaria de reproduzir esse mesmo sistema com as mesmas funções, más com um efeito diferente.

O script que eu tentei usar no lugar, faz com que saiam distanceEffects em volta do char, como mostra neste vídeo: 
https://www.youtube.com/watch?v=m0vt9NUCuiw

 

Eu tentei de vários modos, mas como eu não sou muito bom com scripts, não deu certo  :facepalm: , nessas tentativas eu usei uma parte do script do xWhiteWolf do post; http://www.tibiaking.com/forum/topic/47038-gran-castle-event-854/

 

function onLogin(cid)
if getPlayerGroupId(cid) >= 3 and isPlayer(cid) then
local events = {}
local sec = 0.5
local temp = getCreatureOutfit(cid)

if (type(temp) == "number") then
return true
end

local pos = getPlayerPosition (cid)
local effectPositions = {
{x = pos.x - 1, y = pos.y, z = pos.z},
{x = pos.x, y = pos.y + 1, z = pos.z},
{x = pos.x +1, y = pos.y, z = pos.z},
{x = pos.x, y = pos.y -1, z = pos.z}
}
doSendDistanceShoot(effectPositions[math.random(#effectPositions)], effectPositions[math.random(#effectPositions)], 31)
local event = addEvent(function()
if isCreature(cid) then
end
end, 3.0 * sec * 450)
events[cid] = event
end
return TRUE
end

Ou também:

function onLogin(cid)
if getPlayerGroupId(cid) >= 3 and isPlayer(cid) then
local tempo = 0.5 --- de quanto em quanto segundos ele solta o efeito
function loop (cid)
local pos = getPlayerPosition (cid)
local effectPositions = {
{x = pos.x - 1, y = pos.y, z = pos.z},
{x = pos.x, y = pos.y + 1, z = pos.z},
{x = pos.x +1, y = pos.y, z = pos.z},
{x = pos.x, y = pos.y -1, z = pos.z}
}
if not isPlayer(cid) then
stopEvent(loop)
end

doSendDistanceShoot(effectPositions[math.random(#effectPositions)], effectPositions[math.random(#effectPositions)], 31)
addEvent(function()
if isPlayer(cid) then
loop(cid)
end
end, 1000 * tempo)
return true
end
loop(cid)
end
return TRUE
end

 

O esquema seria assim:
A Gema de Kina (yellow gem id 2154) irá usar o distanceEffect 24 (WHIRLWINDSWORD)

A Gema de Pally (blue gem id 2158) irá usar o efeito18 (REDSTAR)

A Gema de Druid (Green gem id 2155) irá usar o efeito 31 (SUDDENDEATH)

A Gema de Sorc (Red gem 2156) irá usar o efeito 35 (ENERGYBALL) 

 

E aqui a lib e os scripts do sistema da Gema:

Lib:

gems = {
id = {2156, 2155, 2158, 2154, 2156, 2155, 2158, 2154, 2156, 2155, 2158, 2154},
storage = {5001, 5002, 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012},
interval = {600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600}
}

gemMsg = {
rnd = {"´ . ,", ". ´ ,", "` . ,", ", ´ ."},
colorDruid = {180,180},
colorSorcerer = {30,215},
colorPaladin = {251,10},
colorKnight = {204,212},
colorElderDruid = {180,180},
colorMasterSorcerer = {30,215},
colorRoyalPaladin = {251,10},
colorEliteKnight = {204,212}
}

function doRemoveGemEffect(cid)

local voc = getPlayerVocation(cid)

if getPlayerPromotionLevel(cid) > 0 then
voc = voc - (getPlayerPromotionLevel(cid) * 4)
end

if getPlayerStorageValue(cid, gems.storage[voc]) == -1 then
else
setPlayerStorageValue(cid, gems.storage[voc], 0)
end

end

function doUseGem(cid, item)

local level = getPlayerLevel(cid)
local voc = getPlayerVocation(cid)
local interval = gems.interval[voc]

if getPlayerPromotionLevel(cid) > 0 then
voc = voc - (getPlayerPromotionLevel(cid) * 4)
end

if item.itemid ~= gems.id[voc] or getPlayerStorageValue(cid, gems.storage[voc]) > 0 then
return FALSE
end

setPlayerStorageValue(cid, gems.storage[voc], 1)
sendGemEffect(cid, gems.storage[voc], gems.interval[voc])
doRemoveItem(item.uid, 1)

return TRUE
end

function sendGemEffect(cid, storage, interval)

if isPlayer(cid) == TRUE then

local pos = getThingPos(cid)
local voc = getPlayerVocation(cid)
local level = getPlayerLevel(cid)
local color = 1

if level > 199 then

if getPlayerPromotionLevel(cid) > 0 then
voc = voc - (getPlayerPromotionLevel(cid) * 4)
end
if voc == 1 then
color = gemMsg.colorDruid[math.random(1,#gemMsg.colorElderDruid)]
elseif voc == 2 then
color = gemMsg.colorSorcerer[math.random(1,#gemMsg.colorMasterSorcerer)]
elseif voc == 3 then
color = gemMsg.colorPaladin[math.random(1,#gemMsg.colorRoyalPaladin)]
elseif voc == 4 then
color = gemMsg.colorKnight[math.random(1,#gemMsg.colorEliteKnight)]
end

doSendAnimatedText(pos, gemMsg.rnd[math.random(1,#gemMsg.rnd)], color)
if getPlayerStorageValue(cid, gems.storage[voc]) >= 1 then
addEvent(sendGemEffect, interval, cid, storage, interval)
end

else
stopEvent(sendGemEffect)
end

end

function doRemoveAllGemEffect(cid)
for i = 1, table.maxn(gms.storage) do
setPlayerStorageValue(cid, gems.storage[i], 0)
end
return TRUE
end

function isGemActivated(cid)

local voc = getPlayerVocation(cid)

if getPlayerPromotionLevel(cid) > 0 then
voc = voc - (getPlayerPromotionLevel(cid) * 4)
end

if getPlayerStorageValue(cid, gems.storage[voc]) > 0 then
return TRUE
end
return FALSE
end

return TRUE
end

 

Action:

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

if getPlayerGroupId(cid) > 2 and getPlayerGroupId(cid) < 5 then return true end

local voc = getPlayerVocation(cid)
if getPlayerPromotionLevel(cid) > 0 then
voc = voc - (getPlayerPromotionLevel(cid) * 4)
end
gem = gems.id[voc]

if item.itemid == gem then

if getPlayerLevel(cid) < 200 then
doPlayerSendTextMessage(cid,22,"É necessário level 200 ou maior para absorver uma gema espiritual!")
else

if getPlayerPromotionLevel(cid) > 0 then

if getPlayerStorageValue(cid,21202) == -1 then
setPlayerStorageValue(cid,21202,1)
doUseGem(cid, item)
doPlayerSendTextMessage(cid,22,"Você absorveu uma gema espiritual!")
doSendMagicEffect(getPlayerPosition(cid),65)
else
doPlayerSendTextMessage(cid,22,"Você ainda possui uma gema espiritual absorvida.")
end

else
doPlayerSendTextMessage(cid,22,"Você precisa estar promovido para usar a gema.")
end

end

else
return false
end
return true
end  

 

E a tag no login.lua:

if getPlayerStorageValue(cid, 21202) > 0 then
            local voc = getPlayerVocation(cid)
            if getPlayerPromotionLevel(cid) > 0 then
              voc = voc - (getPlayerPromotionLevel(cid) * 4)
            end
            if getPlayerStorageValue(cid, gems.storage[voc]) > 0 then
                  sendGemEffect(cid, gems.storage[voc], gems.interval[voc])
            end   
      end 

@up :)

Editado por eviltox (veja o histórico de edições)

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

Usando meu vídeo como exemplo Hum. Ser gosta do foxworld que está on dnv.

-- Voltando ao Tópico --

vou fazer as mudança e testa no meu Server. Se funcionar eu posto aqui.

Se ti ajudei. Marque como Melhor Resposta e agradeça com um Rep+, clicando em Gostei!. Obrigado!

Link para o post
Compartilhar em outros sites

Ok, obrigado.
No aguardo :D

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

@Up

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

@Up 

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

Exatamente! :D

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

@Up

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

@up :/

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Jaurez
      .
    • Por Cat
      Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
       
      Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
      Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
                                                                                                                     
      Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
      Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
       
      Downloads
      https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333

      Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
       
    • Por danilo belato
      Fala Galera To Com um problema aki 
       
      quero exporta umas sprites de um server para colocar em outro 
       
      eu clico na sprites ai aparece tds a forma delas do lado de la >>
       
      ai eu clico nela e ponho a opiçao de export mais quando salvo a sprite ela n abri 
       
      aparece isso quando tento vê-la 
       
      visualização não disponível ( no formatos png e bitmap)
       
      Agora no formato idc fala que o paint n pode ler 
       
      me ajudem ae...
    • Por Vitor Bicaleto
      Galera to com o script do addon doll aqui, quando eu digito apenas "!addon" ele aparece assim: Digite novamente, algo está errado!"
      quando digito por exemplo: "!addon citizen" ele não funciona e não da nenhum erro
       
      mesma coisa acontece com o mount doll.. 
    • Por Ayron5
      Substitui uma stone no serve, deu tudo certo fora  esse  erro ajudem  Valendo  Rep+  Grato  

      Erro: data/actions/scripts/boost.lua:557: table index is nil
       [Warning - Event::loadScript] Cannot load script (data/actions/scripts/boost.lua)

      Script:
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo