Ir para conteúdo
Entre para seguir isso  
Krovitch

!comprar Skill/magic Level

Recommended Posts

Krovitch    0
Krovitch

Postei este script num outro fórum e agora estou postando aqui.

 

  • Nome: Comprar skill/magic level
  • Versão testada: TFS 0.4_SVN
  • Créditos: fireelement (eu) e apocarai
  • Exemplo de uso:
    1. !comprar skillclub
    2. !comprar magiclevel

     

    [*]Observação: A configuração do script está sendo explicada nele

 

 

Vá em data/talkactions/talkactions.xml e adicione esta tag:

 

<talkaction words="!comprar;/comprar" event="script" value="comprar.lua"/>

Agora vá em data/talkactions/scripts/ e crie um arquivo chamado comprar.lua e cole isto nele:

 

function onSay(cid, words, param, channel)
       local x = {
               item = 9971, -- Item que vai ser removido
               quantidade = 10, -- Quantidade de item que vai ser removido
               quantidadeskill = 10, -- Quantidade que o player irá comprar
               limiteskill = 340 -- Se o limite for 350, faz 350-10(quantidade de skill) = 340
       }

       local xml = {
               item = 9971, -- Item para poder comprar
               quantidade = 15, -- Quantidade de item que vai ser removido
               quantidademl = 5, -- Quantidade que o player irá comprar
               limitedeml = 195 -- Se o limite for 200, faz 200-5(quantidade de ml) = 195
       }

       local pid = getPlayerGUID(cid) -- Não mexa

       local id = {
               ["skillclub"] = 1, -- Não mexa
               ["skillsword"]= 2, -- Não mexa
               ["skillaxe"] = 3, -- Não mexa
               ["skilldistance"] = 4, -- Não mexa
               ["skillshielding"] = 5 -- Não mexa
       }

       local voc = {
               ["skillclub"] = {4, 8}, -- Vocações que irá comprar club
               ["skillsword"] = {4, 8}, -- Vocações que irá comprar sword
               ["skillaxe"] = {4, 8}, -- Vocações que irá comprar axe
               ["skilldistance"] = {3, 7}, -- Vocações que irá comprar distance
               ["skillshielding"] = {4, 8} -- Vocações que irá comprar shielding
      }

        local vocml = {1, 2, 5, 6} -- Vocações que irá comprar magic level

        local pz = "sim"

        if (pz == "sim") and (getTilePzInfo(getCreaturePosition(cid)) == false) then
           doPlayerSendCancel(cid, "Você precisa estar em protection zone pra poder comprar.")
           return true
        end

       if (param == '') then
          doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Como usar: !comprar skillclub.")
          return true
       end

       if (param == 'magiclevel') then
       if getPlayerMagLevel(cid) <= xml.limitedeml then
               if isInArray(vocml, getPlayerVocation(cid)) == true then
                       if doPlayerRemoveItem(cid, xml.item, xml.quantidade) then
                          doRemoveCreature(cid, true)
                          db.executeQuery("UPDATE `players` SET `maglevel` = `maglevel` + ".. xml.quantidademl .." WHERE `id` = ".. pid .. "")
                       else
                               doPlayerSendCancel(cid, "Você não tem o item requerido.")
                       end
               else
                          doPlayerSendCancel(cid, "Voce não pode comprar magic level.")
               end
       else
               doPlayerSendCancel(cid, "Você chegou no limite de magic level.")
       end
return true
end

               if(id[param:lower()]) then
               if(getPlayerSkill(cid, id[param:lower()]) <= x.limiteskill) then
               if isInArray(voc[param:lower()], getPlayerVocation(cid)) == true then
                               if doPlayerRemoveItem(cid, x.item, x.quantidade) then
                                  doRemoveCreature(cid, true)
                                  db.executeQuery("UPDATE `player_skills` SET `value` = `value` + ".. x.quantidadeskill .." WHERE `player_id` = ".. pid .. " and `skillid` = ".. id[param:lower()] ..";")
                               else
                                       doPlayerSendCancel(cid, "Você não tem o item requerido.")
                               end
                             else
                                doPlayerSendCancel(cid, "Voce não pode comprar este skill.")
                             end 
                       else            
                               doPlayerSendCancel(cid, "Você chegou no limite de skill.")
                       end
               else
                       doPlayerSendCancel(cid, "Skill desconhecida.")
               end
return true
end

Editado por Krovitch

Compartilhar este post


Link para o post
Socket    0
Socket

A idéia é bem legal, porém o script não foi muito bem desenvolvido, contendo tabelas desnecessárias. A utilização de query também foi desnecessária e não a melhor opção, visto que a remoção do usuário é necessária, a simples utilização de algumas funções poderia melhorar o processo.

Aqui está o seu script, refeito, com os erros que eu citei corrigidos:

local function doPlayerAddMagicLevel(cid, magicLevel)
   local level = getPlayerMagLevel(cid)
   local mana = getPlayerRequiredMana(cid, level + magicLevel)
   doPlayerAddSpentMana(cid, mana)
   return true
end

local function doPlayerAddSkillLevel(cid, skillId, skillLevel)
   if(skillId == SKILL__MAGLEVEL) then
       return doPlayerAddMagicLevel(cid, skillLevel)
   end
   local level = getPlayerSkillLevel(cid, skillId)
   local tries = getPlayerRequiredSkillTries(cid, skillId, level + skillLevel)
   doPlayerAddSkillTry(cid, skillId, tries)
   return true
end

local SKILL_CONFIG     = {9971, 10, 10, 350}
local ML_CONFIG        = {9971, 10, 10, 200}

local MELEE = {4, 8} 
local DIST    = {3, 7} 
local ML    = {1, 2, 5, 6} 
local ALL    = {1, 2, 3, 4, 5, 6, 7, 8} 

local config = {
   ["skillfist"]         = {SKILL_FIST,        ALL,    SKILL_CONFIG},
   ["skillclub"]         = {SKILL_CLUB,        MELEE,     SKILL_CONFIG},
   ["skillsword"]        = {SKILL_SWORD,        MELEE,     SKILL_CONFIG},
   ["skillaxe"]        = {SKILL_AXE,        MELEE,     SKILL_CONFIG},
   ["skilldistance"]    = {SKILL_DISTANCE,    DIST,      SKILL_CONFIG},
   ["skillshield"]        = {SKILL_SHIELD,    MELEE,     SKILL_CONFIG},
   ["skillfishing"]    = {SKILL_FISHING,    MELEE,     SKILL_CONFIG},
}
local pz = true -- true/false

function onSay(cid, words, param)
   local config = config[param]
   if(not config and param ~= "magiclevel") then
       doPlayerSendCancel(cid, "Skill not found.")
       return true
   end

   local id, voc, conf
   local level
   if(param == "magiclevel") then
       id, voc, conf = SKILL__MAGLEVEL, ML, ML_CONF
       level = getPlayerMagLevel(cid)
   else
       id, voc, conf = unpack(config)
       level = getPlayerSkillLevel(cid, id)
   end

   if(pz and not getTilePzInfo(getCreaturePosition(cid))) then
       doPlayerSendCancel(cid, "You're not on protection zone.")
       return true
   end
   if(level + conf[3] > conf[4]) then
       doPlayerSendCancel(cid, "You reached the maximum skill level.")
       return true
   end
   if(not isInArray(voc, getPlayerVocation(cid))) then
       doPlayerSendCancel(cid, "Your vocation cannot buy this skill.")
       return true
   end
   if(doPlayerRemoveItem(cid, conf[1], conf[2])) then
       doPlayerAddSkillLevel(cid, id, conf[3])
       doPlayerSendTextMessage(cid, 19, "Bought " .. conf[3] .. " skill level.")
       return true
   else
       doPlayerSendCancel(cid, "You do not have the required item.")
       return true
   end
end

Script não testado.

Eu irei aprovar seu script, porém espero que você o refaça.

 

Atenciosamente, Socket.

Compartilhar este post


Link para o post
Krovitch    0
Krovitch

Sim eu estava re-fazendo ele, retirando as querys e usando loops

 

for i = 1, 10 do
doPlayerAddSkill(cid, id, 1, true)
end

acho que iria funcionar

 

não sei muito sobre scripts por isso tem várias coisas meio inuteis xD

 

ah e pelo comando a skill so vai ate 202, por query vai ate quanto quiser, por isso eu utilizei ;x mas eu não sabia nada sobre o comando for tbm hehe

Editado por Krovitch

Compartilhar este post


Link para o post
ducklin    0
ducklin

aqui nao funciona nem 1 nem otro..

o Script do Krovitch nao adiciona o skill e o seu char toma dc

o Script do Socket funciona o skills mas ml nao, além disso ele ( pelo que eu vi ) da 33 de skill e nao tem como modificar pelo menos nao fala no script como muda

alguem sabe como arrumar esses erros?

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×