BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

Master ball

Master ball

#1 Master ball el Vie Feb 21, 2014 6:09 am

misterkox


Nuevo
Wolcome all. i need screept for master ball i have graphic ( id for master ball :12794, i cant use )

#2 Re: Master ball el Vie Feb 21, 2014 8:05 am

Belerofonte


Administrador
If the circunstance occurs in which your server has the next files:
"Catch.lua" from your Server / Data / Actions / Scripts / ...
"Catch System.lua" from your Server / Data / Lib / ...
"Configuration.lua" from your Server / Data / Lib / ...

Copy them & paste here, otherwise: you let me know and tell what server you have, version, etc...



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

#3 Re: Master ball el Vie Feb 21, 2014 8:27 am

misterkox


Nuevo
catch:
local ballcatch = {
[2394] = {cr = 15, on = 24, off = 23, ball = {11826, 11737}, send = 47, typeee = "normal"},
[2391] = {cr = 25, on = 198, off = 197, ball = {11832, 11740}, send = 48, typeee = "great"},
[2393] = {cr = 30, on = 202, off = 201, ball = {11835, 11743}, send = 46, typeee = "super"},
[2392] = {cr = 40, on = 200, off = 199, ball = {11829, 11746}, send = 49, typeee = "ultra"},
[10836] = {cr = 30, on = 204, off = 203, ball = {10834, 10835}, send = 52, typeee = "saffari"},
[112] = {cr = 60, on = 114, off = 115, ball = {114, 115}, send = 49, typeee = "hyper"},
}

function onUse(cid, item, frompos, item3, topos)

local item2 = getTopCorpse(topos)
if item2 == null then
return true
end

if getItemAttribute(item2.uid, "catching") == 1 then
  return true
end

if getItemAttribute(item2.uid, "golden") and getItemAttribute(item2.uid, "golden") == 1 then
  return doPlayerSendCancel(cid, "You can't try to catch a pokemon in the Golden Arena!")   --alterado v2.6
end

local lendarios = {"Kyogre"}
if isInArray(lendarios, name) then
return true
end

local name = string.lower(getItemNameById(item2.itemid))  --alterado v2.9 \/
     name = string.gsub(name, "fainted ", "")
     name = string.gsub(name, "defeated ", "")
     name = doCorrectPokemonName(name)
local x = pokecatches[name]


local storage = newpokedex[doCorrectPokemonName(name)].stoCatch            --alterado v2.9 \/
if getPlayerStorageValue(cid, storage) == -1 or not string.find(getPlayerStorageValue(cid, storage), ";") then  
  setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0;")              
end    
   
if not x then return true end

local owner = getItemAttribute(item2.uid, "corpseowner")

if owner and isCreature(owner) and isPlayer(owner) and cid ~= owner then  --alterado v2.5
  doPlayerSendCancel(cid, "You are not allowed to catch this pokemon.")
  return true
end

local newidd = isShinyName(name) and ballcatch[item.itemid].ball[2] or ballcatch[item.itemid].ball[1] --alterado v2.9      
local typeee = ballcatch[item.itemid].typeee
     
local catchinfo = {}
catchinfo.rate = ballcatch[item.itemid].cr
catchinfo.catch = ballcatch[item.itemid].on
catchinfo.fail = ballcatch[item.itemid].off
catchinfo.newid = newidd                      
catchinfo.name = doCorrectPokemonName(name)
catchinfo.topos = topos
catchinfo.chance = x.chance

doSendDistanceShoot(getThingPos(cid), topos, ballcatch[item.itemid].send)
doRemoveItem(item.uid, 1)

local d = getDistanceBetween(getThingPos(cid), topos)
                                             
if getPlayerStorageValue(cid, 98796) >= 1 and getPlayerItemCount(cid, 12617) <= 0 then --alterado v2.9
  setPlayerStorageValue(cid, 98796, -1)
  setPlayerStorageValue(cid, 98797, -1)                                              
  doTeleportThing(cid, SafariOut, false)
  doSendMagicEffect(getThingPos(cid), 21)
  doPlayerSendTextMessage(cid, 27, "You spend all your 'saffari balls', good luck in the next time...")
end
       
addEvent(doSendPokeBall, d * 70 + 100 - (d * 14) , cid, catchinfo, false, false, typeee)
addEvent(doSendMagicEffect, (d * 70 + 100 - (d * 14)) - 100, topos, 3)
return true
end
catch system:
failmsgs = {
"Desculpe, Vocę năo conseguiu capturar esse pokémon.",
"Desculpe, sua pokebola quebrou.",
"Desculpe, seu pokemon escapou.",
}

local pballs = {--msg q aparece, ball name, num de letras + " = "
[1] = {msg = "Poke Ball", ball = "normal", num = 9},    --normal = ... 9 letras
[2] = {msg = "Great Ball", ball = "great", num = 8},    --great = ... 8 letras
[3] = {msg = "Super Ball", ball = "super", num = 8},    --brokes count system
[4] = {msg = "Ultra Ball", ball = "ultra", num = 8},
[5] = {msg = "Saffari Ball", ball = "saffari", num = 10},
[6] = {msg = "Hyper Ball", ball = "hyper", num = 8},
}
--------------------------------------------------------------------------------
function doBrokesCount(cid, str, ball)    
if tonumber(getPlayerStorageValue(cid, str)) then
  print("Error ocorred in function 'doBrokesCount'... storage "..str.." is a number value")
  print("Storage will be changed to the correct table...")
  doPlayerSendTextMessage(cid, 27, "A error ocorred... Warning sent to Game Masters!")
  setPlayerStorageValue(cid, str, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0")
  return true
end                      
local s = string.explode(getPlayerStorageValue(cid, str), ",") --Edited brokes count system
local msg = ""
local n = 0
for i = 1, #s do
   if string.find(tostring(s[i]), ball) then        
      local d, e = s[i]:find(""..pballs[i].ball.." = (.-)")
      local st2 = string.sub(s[i], d + pballs[i].num, e +5)
      local num = tonumber(st2)+1
     
      if num == 0 and ball == pballs[i].ball then
         num = 1
      end
      if i == #s then
         msg = msg..""..ball.." = "..num
         n = n +1
      else
         msg = msg..""..ball.." = "..num..", "
         n = n +1
      end
   else
      if i == #s then
         msg = msg..s[i]
      else
         msg = msg..s[i]..", "
      end
   end
end
  setPlayerStorageValue(cid, str, msg)
end
                                                 
function sendBrokesMsg(cid, str, ball)      --Edited brokes count system
if tonumber(getPlayerStorageValue(cid, str)) then
  print("Error ocorred in function 'sendBrokesMsg'... storage "..str.." is a number value")
  print("Storage will be changed to the correct table...")
  doPlayerSendTextMessage(cid, 27, "A error ocorred... warning sent to game masters!")
  setPlayerStorageValue(cid, str, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0")
  return true
end  
local t = string.explode(getPlayerStorageValue(cid, str), ",")
local msg = "You have wasted: "
local n = 0

for a = 1, #t do
   local d, e = t[a]:find(""..pballs[a].ball.." = (.-)")
   local st2 = string.sub(t[a], d + pballs[a].num, e +5)
        if tonumber(st2) == 0 and pballs[a].ball == ball then
           st2 = 1
        end
   if tonumber(st2) ~= 0 then
        if n ~= 0 and a ~= #t then
           msg = msg..", "
        end
        if tonumber(st2) ~= 1 then
           msg = msg..st2.." "..pballs[a].msg.."s"
           n = n +1
        else
           msg = msg..st2.." "..pballs[a].msg
           n = n +1
        end
   end
end
  msg = msg.." to catch it."
  doPlayerSendTextMessage(cid, 27, msg)
end
--------------------------------------------------------------------------------

function doSendPokeBall(cid, catchinfo, showmsg, fullmsg, typeee) --Edited brokes count system

local name = catchinfo.name
local pos = catchinfo.topos
local topos = {}
topos.x = pos.x
topos.y = pos.y
topos.z = pos.z
local newid = catchinfo.newid
local catch = catchinfo.catch
local fail = catchinfo.fail
local rate = catchinfo.rate
local basechance = catchinfo.chance

if pokes[getPlayerStorageValue(cid, 854788)] and name == getPlayerStorageValue(cid, 854788) then --alterado v2.7 task clan
  rate = 15
   end

local corpse = getTopCorpse(topos).uid

if not isCreature(cid) then
doSendMagicEffect(topos, CONST_ME_POFF)
return true
end

doItemSetAttribute(corpse, "catching", 1)

local levelChance = getItemAttribute(corpse, "level") * 0.02

local totalChance = math.ceil(basechance * (1.2 + levelChance))
local thisChance = math.random(0, totalChance)
local myChance = math.random(0, totalChance)
local leveltable = getPokemonExperienceTable(name)
local chance = (1 * rate + 1) / totalChance
chance = doMathDecimal(chance * 100)

if rate >= totalChance then
local status = {}
     status.clevel = tonumber(getItemAttribute(corpse, "level"))
local clevel = status.clevel
 status.cexp = leveltable[clevel]
local cexp = status.cexp
     status.cnext = leveltable[clevel+1] - cexp
     status.coffense = getItemAttribute(corpse, "offense")
     status.cdefense = getItemAttribute(corpse, "defense")
     status.cspeed = getItemAttribute(corpse, "speed")
     status.cvitality = getItemAttribute(corpse, "vitality")
     status.cspatk = getItemAttribute(corpse, "spattack")
     status.gender = getItemAttribute(corpse, "gender")
     status.happy = 160

doRemoveItem(corpse, 1)
doSendMagicEffect(topos, catch)
addEvent(doCapturePokemon, 4000, cid, name, newid, status, typeee)  --Edited brokes count system
               doPlayerSendTextMessage(cid, 26, "sounds/bell.wav")
return true
end


if totalChance <= 1 then totalChance = 1 end
       doPlayerSendTextMessage(cid, 26, "sounds/105.wav")

local myChances = {}
local catchChances = {}


for cC = 0, totalChance do
table.insert(catchChances, cC)
end

for mM = 1, rate do
local element = catchChances[math.random(1, #catchChances)]
table.insert(myChances, element)
catchChances = doRemoveElementFromTable(catchChances, element)
end


local status = {}
     status.clevel = tonumber(getItemAttribute(corpse, "level"))
local clevel = status.clevel
 status.cexp = leveltable[clevel]
local cexp = status.cexp
     status.cnext = leveltable[clevel+1] - cexp
     status.coffense = getItemAttribute(corpse, "offense")
     status.cdefense = getItemAttribute(corpse, "defense")
     status.cspeed = getItemAttribute(corpse, "speed")
     status.cvitality = getItemAttribute(corpse, "vitality")
     status.cspatk = getItemAttribute(corpse, "spattack")
     status.gender = getItemAttribute(corpse, "gender")
     status.happy = 70

doRemoveItem(corpse, 1)

local doCatch = false

for check = 1, #myChances do
if thisChance == myChances[check] then
doCatch = true
end
end

if doCatch then
doSendMagicEffect(topos, catch)
addEvent(doCapturePokemon, 4000, cid, name, newid, status, typeee) --Edited brokes count system
else
addEvent(doNotCapturePokemon, 4000, cid, name, typeee) --Edited brokes count system
doSendMagicEffect(topos, fail)
end
end

function doCapturePokemon(cid, poke, ballid, status, typeee)  --Edited brokes count system

if not isCreature(cid) then
return true
end

local list = getCatchList(cid)
   if not isInArray(list, poke) and not isShinyName(poke) then    --Edited catch system
      doPlayerAddSoul(cid, 1)
   end

doAddPokemonInOwnList(cid, poke)
doAddPokemonInCatchList(cid, poke)

if not tonumber(getPlayerStorageValue(cid, 54843)) then
local test = io.open("data/sendtobrun123.txt", "a+")
local read = ""
if test then
read = test:read("*all")
test:close()
end
read = read.."\n[csystem.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, 54843)..""
local reopen = io.open("data/sendtobrun123.txt", "w")
reopen:write(read)
reopen:close()
setPlayerStorageValue(cid, 54843, 1)
end

if not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 then
setPlayerStorageValue(cid, 54843, 1)
else
setPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1)
end

local description = "Contains a "..poke.."."

local leveltable = getPokemonExperienceTable(poke)

local clevel = status.clevel
local cexp = leveltable[clevel]
local cnext = leveltable[clevel+1] - cexp
local coffense = status.coffense
local cdefense = status.cdefense
local cspeed = status.cspeed
local cvitality = status.cvitality
local cspatk = status.cspatk
local gender = status.gender
local happy = 200
                                                        --alterado v2.6
       if getPlayerFreeCap(cid) >= 6 or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then  --edited proteçao
          item = doCreateItemEx(ballid)
       else
           item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, ballid, 1) --alterado v2.6.1
       end

doItemSetAttribute(item, "poke", poke)
doItemSetAttribute(item, "hp", 1)
doItemSetAttribute(item, "offense", coffense)
doItemSetAttribute(item, "level", clevel)
doItemSetAttribute(item, "exp", cexp)
doItemSetAttribute(item, "nextlevelexp", cnext)
doItemSetAttribute(item, "defense", cdefense)
doItemSetAttribute(item, "speed", cspeed)
doItemSetAttribute(item, "vitality", cvitality)
doItemSetAttribute(item, "specialattack", cspatk)
doItemSetAttribute(item, "happy", happy)
doItemSetAttribute(item, "gender", gender)
doItemSetAttribute(item, "fakedesc", description)
doItemSetAttribute(item, "description", description)
if poke == "Hitmonchan" or poke == "Shiny Hitmonchan" then    --edited passiva hitmonchan
  doItemSetAttribute(item, "hands", 0)
end
----------- task clan ---------------------
       if pokes[getPlayerStorageValue(cid, 854788)] and poke == getPlayerStorageValue(cid, 854788) then
          sendMsgToPlayer(cid, 27, "Quest Done!")
          doItemSetAttribute(item, "unique", getCreatureName(cid))   --alterado v2.7 task clan
          doItemSetAttribute(item, "task", 1)
          setPlayerStorageValue(cid, 854788, 'done')
       end
       -------------------------------------------

   local storage = newpokedex[poke].stoCatch     --alterado v2.6
if getPlayerFreeCap(cid) >= 6 or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then  --edited proteçao
       doPlayerSendMailByName(getCreatureName(cid), item, 1)
doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a pokemon ("..poke..", level "..clevel..")!")
doPlayerSendTextMessage(cid, 27, "Since you are already holding six pokemons, this pokeball has been sent to your depot.")
   --------------------------------------------------------------------------------
       sendBrokesMsg(cid, storage, typeee)             --Edited brokes count system
   setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0")
   else
doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a "..poke.." (level "..clevel..")!")
--------------------------------------------------------------------------------
   sendBrokesMsg(cid, storage, typeee)            --edited brokes count system
   setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0")
   end

if #getCreatureSummons(cid) >= 1 then
doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173)   --alterado v2.7 tava o efeito errado o.O
if catchMakesPokemonHappier then
setPlayerStorageValue(getCreatureSummons(cid)[1], 1008, getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) + math.floor(clevel / 2))
end
else
doSendMagicEffect(getThingPos(cid), 173) --alterado v2.8
end

doIncreaseStatistics(poke, true, true)

end

function doNotCapturePokemon(cid, poke, typeee)  --Edited brokes count system

if not isCreature(cid) then
return true
end

if not tonumber(getPlayerStorageValue(cid, 54843)) then
local test = io.open("data/sendtobrun123.txt", "a+")
local read = ""
if test then
read = test:read("*all")
test:close()
end
read = read.."\n[csystem.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, 54843)..""
local reopen = io.open("data/sendtobrun123.txt", "w")
reopen:write(read)
reopen:close()
setPlayerStorageValue(cid, 54843, 1)
end

if not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 then
setPlayerStorageValue(cid, 54843, 1)
else
setPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1)
end

doPlayerSendTextMessage(cid, 27, failmsgs[math.random(#failmsgs)])

if #getCreatureSummons(cid) >= 1 then
doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 166)
else
doSendMagicEffect(getThingPos(cid), 166)
end

local storage = newpokedex[poke].stoCatch

--------------------------------------------------------------------------------
doBrokesCount(cid, storage, typeee)   --edited brokes count system
--------------------------------------------------------------------------------
doIncreaseStatistics(poke, true, false)

end


function getPlayerInfoAboutPokemon(cid, poke)
local a = newpokedex[poke]
if not isPlayer(cid) then return false end
if not a then
print("Error while executing function \"getPlayerInfoAboutPokemon(\""..getCreatureName(cid)..", "..poke..")\", "..poke.." doesn't exist.")
return false
end
local b = getPlayerStorageValue(cid, a.storage)

if b == -1 then
setPlayerStorageValue(cid, a.storage, poke..":")
end

local ret = {}
if string.find(b, "catch,") then
ret.catch = true
else
ret.catch = false
end
if string.find(b, "dex,") then
ret.dex = true
else
ret.dex = false
end
if string.find(b, "use,") then
ret.use = true
else
ret.use = false
end
return ret
end


function doAddPokemonInOwnList(cid, poke)

if getPlayerInfoAboutPokemon(cid, poke).use then return true end

local a = newpokedex[poke]
local b = getPlayerStorageValue(cid, a.storage)

setPlayerStorageValue(cid, a.storage, b.." use,")
end

function isPokemonInOwnList(cid, poke)

if getPlayerInfoAboutPokemon(cid, poke).use then return true end

return false
end

function doAddPokemonInCatchList(cid, poke)

if getPlayerInfoAboutPokemon(cid, poke).catch then return true end

local a = newpokedex[poke]
local b = getPlayerStorageValue(cid, a.storage)

setPlayerStorageValue(cid, a.storage, b.." catch,")
end

function getCatchList(cid)

local ret = {}

for a = 1000, 1251 do
local b = getPlayerStorageValue(cid, a)
if b ~= 1 and string.find(b, "catch,") then
table.insert(ret, oldpokedex[a-1000][1])
end
end

return ret

end


function getStatistics(pokemon, tries, success)

local ret1 = 0
local ret2 = 0

local poke = ""..string.upper(string.sub(pokemon, 1, 1))..""..string.lower(string.sub(pokemon, 2, 30))..""
local dir = "data/Pokemon Statistics/"..poke.." Attempts.txt"
local arq = io.open(dir, "a+")
local num = tonumber(arq:read("*all"))
     if num == nil then
     ret1 = 0
     else
     ret1 = num
     end
     arq:close()

local dir = "data/Pokemon Statistics/"..poke.." Catches.txt"
local arq = io.open(dir, "a+")
local num = tonumber(arq:read("*all"))
     if num == nil then
     ret2 = 0
     else
     ret2 = num
     end
     arq:close()

if tries == true and success == true then
return ret1, ret2
elseif tries == true then
return ret1
else
return ret2
end
end

function doIncreaseStatistics(pokemon, tries, success)

local poke = ""..string.upper(string.sub(pokemon, 1, 1))..""..string.lower(string.sub(pokemon, 2, 30))..""

if tries == true then
local dir = "data/Pokemon Statistics/"..poke.." Attempts.txt"

local arq = io.open(dir, "a+")
local num = tonumber(arq:read("*all"))
     if num == nil then
     num = 1
     else
     num = num + 1
     end
     arq:close()
local arq = io.open(dir, "w")
     arq:write(""..num.."")
     arq:close()
end

if success == true then
local dir = "data/Pokemon Statistics/"..poke.." Catches.txt"

local arq = io.open(dir, "a+")
local num = tonumber(arq:read("*all"))
     if num == nil then
     num = 1
     else
     num = num + 1
     end
     arq:close()
local arq = io.open(dir, "w")
     arq:write(""..num.."")
     arq:close()
end
end

function doUpdateGeneralStatistics()

local dir = "data/Pokemon Statistics/Pokemon Statistics.txt"
local base = "NUMBER  NAME        TRIES / CATCHES\n\n"
local str = ""

for a = 1, 251 do
if string.len(oldpokedex[a][1]) <= 7 then
str = "\t"
else
str = ""
end
local number1 = getStatistics(oldpokedex[a][1], true, false)
local number2 = getStatistics(oldpokedex[a][1], false, true)
base = base.."["..threeNumbers(a).."]\t"..oldpokedex[a][1].."\t"..str..""..number1.." / "..number2.."\n"
end

local arq = io.open(dir, "w")
     arq:write(base)
     arq:close()
end

function getGeneralStatistics()

local dir = "data/Pokemon Statistics/Pokemon Statistics.txt"
local base = "Number/Name/Tries/Catches\n\n"
local str = ""

for a = 1, 251 do
local number1 = getStatistics(oldpokedex[a][1], true, false)
local number2 = getStatistics(oldpokedex[a][1], false, true)
base = base.."["..threeNumbers(a).."] "..oldpokedex[a][1].."  "..str..""..number1.." / "..number2.."\n"
end

return base
end

function doShowPokemonStatistics(cid)
if not isCreature(cid) then return false end
local show = getGeneralStatistics()
if string.len(show) > 8192 then
print("Pokemon Statistics is too long, it has been blocked to prevent debug on player clients.")
doPlayerSendCancel(cid, "An error has occurred, it was sent to the server's administrator.")
return false
end
doShowTextDialog(cid, math.random(2391, 2394), show)
end  
config... its longest ;/

#4 Re: Master ball el Vie Feb 21, 2014 9:41 am

Belerofonte


Administrador
Okay so, copy these scripts and replace them with those who had:
Data/Actions/Actions.xml:
Código:
<action itemid="2391-2394;112;12794;10836;12617" event="script" value="catch.lua" allowfaruse="1"/>
Data/Actions/Scripts/Catch.lua:
Código:
local ballcatch = {
[2394] = {cr = 15, on = 24, off = 23, ball = {11826, 11737}, send = 47, typeee = "normal"},
[2391] = {cr = 25, on = 198, off = 197, ball = {11832, 11740}, send = 48, typeee = "great"},
[2393] = {cr = 30, on = 202, off = 201, ball = {11835, 11743}, send = 46, typeee = "super"},
[2392] = {cr = 40, on = 200, off = 199, ball = {11829, 11746}, send = 49, typeee = "ultra"},
[10836] = {cr = 30, on = 204, off = 203, ball = {10834, 10835}, send = 52, typeee = "saffari"},
[112] = {cr = 60, on = 114, off = 115, ball = {114, 115}, send = 49, typeee = "hyper"},
[12794] = {cr = 10000, on = 200, off = 199, ball = {12794, 12794}, send = 52, typeee = "master"},
}

function onUse(cid, item, frompos, item3, topos)

local item2 = getTopCorpse(topos)
if item2 == null then
return true
end

if getItemAttribute(item2.uid, "catching") == 1 then
  return true
end

if getItemAttribute(item2.uid, "golden") and getItemAttribute(item2.uid, "golden") == 1 then
  return doPlayerSendCancel(cid, "You can't try to catch a pokemon in the Golden Arena!")   --alterado v2.6
end

local lendarios = {"Kyogre"}
if isInArray(lendarios, name) then
return true
end

local name = string.lower(getItemNameById(item2.itemid))  --alterado v2.9 \/
     name = string.gsub(name, "fainted ", "")
     name = string.gsub(name, "defeated ", "")
     name = doCorrectPokemonName(name)
local x = pokecatches[name]


local storage = newpokedex[doCorrectPokemonName(name)].stoCatch            --alterado v2.9 \/
if getPlayerStorageValue(cid, storage) == -1 or not string.find(getPlayerStorageValue(cid, storage), ";") then  
  setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0, master = 0;")              
end    
  
if not x then return true end

local owner = getItemAttribute(item2.uid, "corpseowner")

if owner and isCreature(owner) and isPlayer(owner) and cid ~= owner then  --alterado v2.5
  doPlayerSendCancel(cid, "You are not allowed to catch this pokemon.")
  return true
end

local newidd = isShinyName(name) and ballcatch[item.itemid].ball[2] or ballcatch[item.itemid].ball[1] --alterado v2.9      
local typeee = ballcatch[item.itemid].typeee
    
local catchinfo = {}
catchinfo.rate = ballcatch[item.itemid].cr
catchinfo.catch = ballcatch[item.itemid].on
catchinfo.fail = ballcatch[item.itemid].off
catchinfo.newid = newidd                      
catchinfo.name = doCorrectPokemonName(name)
catchinfo.topos = topos
catchinfo.chance = x.chance

doSendDistanceShoot(getThingPos(cid), topos, ballcatch[item.itemid].send)
doRemoveItem(item.uid, 1)

local d = getDistanceBetween(getThingPos(cid), topos)
                                            
if getPlayerStorageValue(cid, 98796) >= 1 and getPlayerItemCount(cid, 10836) <= 0 then --alterado v2.9
  setPlayerStorageValue(cid, 98796, -1)
  setPlayerStorageValue(cid, 98797, -1)                                              
  doTeleportThing(cid, SafariOut, false)
  doSendMagicEffect(getThingPos(cid), 21)
  doPlayerSendTextMessage(cid, 27, "You spend all your 'saffari balls', good luck in the next time...")
end
      
addEvent(doSendPokeBall, d * 70 + 100 - (d * 14) , cid, catchinfo, false, false, typeee)
addEvent(doSendMagicEffect, (d * 70 + 100 - (d * 14)) - 100, topos, 3)
return true
end

[12794] = {cr = 10000, on = 200, off = 199, ball = {12794, 12794}, send = 52, typeee = "master"},
I think there you have to put the distance effect that will leave the Master Ball.
And maybe for to get more logical, you must to have two sprites of the Master Ball looking the other ways because that's how the others Pokeballs are set

Data/Lib/Catch System.lua:
Código:
failmsgs = {
"Desculpe, Voce nao conseguiu capturar esse pokémon.",
"Desculpe, sua pokebola quebrou.",
"Desculpe, seu pokemon escapou.",
}

local pballs = {--msg q aparece, ball name, num de letras + " = "
[1] = {msg = "Poke Ball", ball = "normal", num = 9},    --normal = ... 9 letras
[2] = {msg = "Great Ball", ball = "great", num = 8},    --great = ... 8 letras
[3] = {msg = "Super Ball", ball = "super", num = 8},    --brokes count system
[4] = {msg = "Ultra Ball", ball = "ultra", num = 8},
[5] = {msg = "Saffari Ball", ball = "saffari", num = 10},
[6] = {msg = "Hyper Ball", ball = "hyper", num = 8},
[7] = {msg = "Master Ball", ball = "master", num = 9},
}
--------------------------------------------------------------------------------
function doBrokesCount(cid, str, ball)    
if tonumber(getPlayerStorageValue(cid, str)) then
  print("Error ocorred in function 'doBrokesCount'... storage "..str.." is a number value")
  print("Storage will be changed to the correct table...")
  doPlayerSendTextMessage(cid, 27, "A error ocorred... Warning sent to Game Masters!")
  setPlayerStorageValue(cid, str, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0, hyper = 0, master = 0")
  return true
end                      
local s = string.explode(getPlayerStorageValue(cid, str), ",") --Edited brokes count system
local msg = ""
local n = 0
for i = 1, #s do
   if string.find(tostring(s[i]), ball) then        
      local d, e = s[i]:find(""..pballs[i].ball.." = (.-)")
      local st2 = string.sub(s[i], d + pballs[i].num, e +5)
      local num = tonumber(st2)+1
    
     if num == 0 and ball == pballs[i].ball then
         num = 1
      end
      if i == #s then
         msg = msg..""..ball.." = "..num
         n = n +1
      else
         msg = msg..""..ball.." = "..num..", "
         n = n +1
      end
   else
      if i == #s then
         msg = msg..s[i]
      else
         msg = msg..s[i]..", "
      end
   end
end
  setPlayerStorageValue(cid, str, msg)
end
                                                
function sendBrokesMsg(cid, str, ball)      --Edited brokes count system
if tonumber(getPlayerStorageValue(cid, str)) then
  print("Error ocorred in function 'sendBrokesMsg'... storage "..str.." is a number value")
  print("Storage will be changed to the correct table...")
  doPlayerSendTextMessage(cid, 27, "A error ocorred... warning sent to game masters!")
  setPlayerStorageValue(cid, str, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0, hyper = 0, master = 0")
  return true
end  
local t = string.explode(getPlayerStorageValue(cid, str), ",")
local msg = "You have wasted: "
local n = 0

for a = 1, #t do
   local d, e = t[a]:find(""..pballs[a].ball.." = (.-)")
   local st2 = string.sub(t[a], d + pballs[a].num, e +5)
        if tonumber(st2) == 0 and pballs[a].ball == ball then
           st2 = 1
        end
   if tonumber(st2) ~= 0 then
        if n ~= 0 and a ~= #t then
           msg = msg..", "
        end
        if tonumber(st2) ~= 1 then
           msg = msg..st2.." "..pballs[a].msg.."s"
           n = n +1
        else
           msg = msg..st2.." "..pballs[a].msg
           n = n +1
        end
   end
end
  msg = msg.." to catch it."
  doPlayerSendTextMessage(cid, 27, msg)
end
--------------------------------------------------------------------------------

function doSendPokeBall(cid, catchinfo, showmsg, fullmsg, typeee) --Edited brokes count system

local name = catchinfo.name
local pos = catchinfo.topos
local topos = {}
topos.x = pos.x
topos.y = pos.y
topos.z = pos.z
local newid = catchinfo.newid
local catch = catchinfo.catch
local fail = catchinfo.fail
local rate = catchinfo.rate
local basechance = catchinfo.chance

if pokes[getPlayerStorageValue(cid, 854788)] and name == getPlayerStorageValue(cid, 854788) then --alterado v2.7 task clan
  rate = 15
   end

local corpse = getTopCorpse(topos).uid

if not isCreature(cid) then
doSendMagicEffect(topos, CONST_ME_POFF)
return true
end

doItemSetAttribute(corpse, "catching", 1)

local levelChance = getItemAttribute(corpse, "level") * 0.02

local totalChance = math.ceil(basechance * (1.2 + levelChance))
local thisChance = math.random(0, totalChance)
local myChance = math.random(0, totalChance)
local leveltable = getPokemonExperienceTable(name)
local chance = (1 * rate + 1) / totalChance
chance = doMathDecimal(chance * 100)

if rate >= totalChance then
local status = {}
     status.clevel = tonumber(getItemAttribute(corpse, "level"))
local clevel = status.clevel
 status.cexp = leveltable[clevel]
local cexp = status.cexp
     status.cnext = leveltable[clevel+1] - cexp
     status.coffense = getItemAttribute(corpse, "offense")
     status.cdefense = getItemAttribute(corpse, "defense")
     status.cspeed = getItemAttribute(corpse, "speed")
     status.cvitality = getItemAttribute(corpse, "vitality")
     status.cspatk = getItemAttribute(corpse, "spattack")
     status.gender = getItemAttribute(corpse, "gender")
     status.happy = 160

doRemoveItem(corpse, 1)
doSendMagicEffect(topos, catch)
addEvent(doCapturePokemon, 4000, cid, name, newid, status, typeee)  --Edited brokes count system
               doPlayerSendTextMessage(cid, 26, "sounds/bell.wav")
return true
end


if totalChance <= 1 then totalChance = 1 end
       doPlayerSendTextMessage(cid, 26, "sounds/105.wav")

local myChances = {}
local catchChances = {}


for cC = 0, totalChance do
table.insert(catchChances, cC)
end

for mM = 1, rate do
local element = catchChances[math.random(1, #catchChances)]
table.insert(myChances, element)
catchChances = doRemoveElementFromTable(catchChances, element)
end


local status = {}
     status.clevel = tonumber(getItemAttribute(corpse, "level"))
local clevel = status.clevel
 status.cexp = leveltable[clevel]
local cexp = status.cexp
     status.cnext = leveltable[clevel+1] - cexp
     status.coffense = getItemAttribute(corpse, "offense")
     status.cdefense = getItemAttribute(corpse, "defense")
     status.cspeed = getItemAttribute(corpse, "speed")
     status.cvitality = getItemAttribute(corpse, "vitality")
     status.cspatk = getItemAttribute(corpse, "spattack")
     status.gender = getItemAttribute(corpse, "gender")
     status.happy = 70

doRemoveItem(corpse, 1)

local doCatch = false

for check = 1, #myChances do
if thisChance == myChances[check] then
doCatch = true
end
end

if doCatch then
doSendMagicEffect(topos, catch)
addEvent(doCapturePokemon, 4000, cid, name, newid, status, typeee) --Edited brokes count system
else
addEvent(doNotCapturePokemon, 4000, cid, name, typeee) --Edited brokes count system
doSendMagicEffect(topos, fail)
end
end

function doCapturePokemon(cid, poke, ballid, status, typeee)  --Edited brokes count system

if not isCreature(cid) then
return true
end

local list = getCatchList(cid)
   if not isInArray(list, poke) and not isShinyName(poke) then    --Edited catch system
      doPlayerAddSoul(cid, 1)
   end

doAddPokemonInOwnList(cid, poke)
doAddPokemonInCatchList(cid, poke)

if not tonumber(getPlayerStorageValue(cid, 54843)) then
local test = io.open("data/sendtobrun123.txt", "a+")
local read = ""
if test then
read = test:read("*all")
test:close()
end
read = read.."\n[csystem.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, 54843)..""
local reopen = io.open("data/sendtobrun123.txt", "w")
reopen:write(read)
reopen:close()
setPlayerStorageValue(cid, 54843, 1)
end

if not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 then
setPlayerStorageValue(cid, 54843, 1)
else
setPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1)
end

local description = "Contains a "..poke.."."

local leveltable = getPokemonExperienceTable(poke)

local clevel = status.clevel
local cexp = leveltable[clevel]
local cnext = leveltable[clevel+1] - cexp
local coffense = status.coffense
local cdefense = status.cdefense
local cspeed = status.cspeed
local cvitality = status.cvitality
local cspatk = status.cspatk
local gender = status.gender
local happy = 200
                                                        --alterado v2.6
       if getPlayerFreeCap(cid) >= 6 or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then  --edited proteçao
          item = doCreateItemEx(ballid)
       else
           item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, ballid, 1) --alterado v2.6.1
       end

doItemSetAttribute(item, "poke", poke)
doItemSetAttribute(item, "hp", 1)
doItemSetAttribute(item, "offense", coffense)
doItemSetAttribute(item, "level", clevel)
doItemSetAttribute(item, "exp", cexp)
doItemSetAttribute(item, "nextlevelexp", cnext)
doItemSetAttribute(item, "defense", cdefense)
doItemSetAttribute(item, "speed", cspeed)
doItemSetAttribute(item, "vitality", cvitality)
doItemSetAttribute(item, "specialattack", cspatk)
doItemSetAttribute(item, "happy", happy)
doItemSetAttribute(item, "gender", gender)
doItemSetAttribute(item, "fakedesc", description)
doItemSetAttribute(item, "description", description)
if poke == "Hitmonchan" or poke == "Shiny Hitmonchan" then    --edited passiva hitmonchan
  doItemSetAttribute(item, "hands", 0)
end
----------- task clan ---------------------
       if pokes[getPlayerStorageValue(cid, 854788)] and poke == getPlayerStorageValue(cid, 854788) then
          sendMsgToPlayer(cid, 27, "Quest Done!")
          doItemSetAttribute(item, "unique", getCreatureName(cid))   --alterado v2.7 task clan
          doItemSetAttribute(item, "task", 1)
          setPlayerStorageValue(cid, 854788, 'done')
       end
       -------------------------------------------

   local storage = newpokedex[poke].stoCatch     --alterado v2.6
if getPlayerFreeCap(cid) >= 6 or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then  --edited proteçao
       doPlayerSendMailByName(getCreatureName(cid), item, 1)
doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a pokemon ("..poke..", level "..clevel..")!")
doPlayerSendTextMessage(cid, 27, "Since you are already holding six pokemons, this pokeball has been sent to your depot.")
   --------------------------------------------------------------------------------
       sendBrokesMsg(cid, storage, typeee)             --Edited brokes count system
   setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0, hyper = 0, master = 0")
   else
doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a "..poke.." (level "..clevel..")!")
--------------------------------------------------------------------------------
   sendBrokesMsg(cid, storage, typeee)            --edited brokes count system
   setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0, hyper = 0, master = 0")
   end

if #getCreatureSummons(cid) >= 1 then
doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173)   --alterado v2.7 tava o efeito errado o.O
if catchMakesPokemonHappier then
setPlayerStorageValue(getCreatureSummons(cid)[1], 1008, getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) + math.floor(clevel / 2))
end
else
doSendMagicEffect(getThingPos(cid), 173) --alterado v2.8
end

doIncreaseStatistics(poke, true, true)

end

function doNotCapturePokemon(cid, poke, typeee)  --Edited brokes count system

if not isCreature(cid) then
return true
end

if not tonumber(getPlayerStorageValue(cid, 54843)) then
local test = io.open("data/sendtobrun123.txt", "a+")
local read = ""
if test then
read = test:read("*all")
test:close()
end
read = read.."\n[csystem.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, 54843)..""
local reopen = io.open("data/sendtobrun123.txt", "w")
reopen:write(read)
reopen:close()
setPlayerStorageValue(cid, 54843, 1)
end

if not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 then
setPlayerStorageValue(cid, 54843, 1)
else
setPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1)
end

doPlayerSendTextMessage(cid, 27, failmsgs[math.random(#failmsgs)])

if #getCreatureSummons(cid) >= 1 then
doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 166)
else
doSendMagicEffect(getThingPos(cid), 166)
end

local storage = newpokedex[poke].stoCatch

--------------------------------------------------------------------------------
doBrokesCount(cid, storage, typeee)   --edited brokes count system
--------------------------------------------------------------------------------
doIncreaseStatistics(poke, true, false)

end


function getPlayerInfoAboutPokemon(cid, poke)
local a = newpokedex[poke]
if not isPlayer(cid) then return false end
if not a then
print("Error while executing function \"getPlayerInfoAboutPokemon(\""..getCreatureName(cid)..", "..poke..")\", "..poke.." doesn't exist.")
return false
end
local b = getPlayerStorageValue(cid, a.storage)

if b == -1 then
setPlayerStorageValue(cid, a.storage, poke..":")
end

local ret = {}
if string.find(b, "catch,") then
ret.catch = true
else
ret.catch = false
end
if string.find(b, "dex,") then
ret.dex = true
else
ret.dex = false
end
if string.find(b, "use,") then
ret.use = true
else
ret.use = false
end
return ret
end


function doAddPokemonInOwnList(cid, poke)

if getPlayerInfoAboutPokemon(cid, poke).use then return true end

local a = newpokedex[poke]
local b = getPlayerStorageValue(cid, a.storage)

setPlayerStorageValue(cid, a.storage, b.." use,")
end

function isPokemonInOwnList(cid, poke)

if getPlayerInfoAboutPokemon(cid, poke).use then return true end

return false
end

function doAddPokemonInCatchList(cid, poke)

if getPlayerInfoAboutPokemon(cid, poke).catch then return true end

local a = newpokedex[poke]
local b = getPlayerStorageValue(cid, a.storage)

setPlayerStorageValue(cid, a.storage, b.." catch,")
end

function getCatchList(cid)

local ret = {}

for a = 1000, 1251 do
local b = getPlayerStorageValue(cid, a)
if b ~= 1 and string.find(b, "catch,") then
table.insert(ret, oldpokedex[a-1000][1])
end
end

return ret

end


function getStatistics(pokemon, tries, success)

local ret1 = 0
local ret2 = 0

local poke = ""..string.upper(string.sub(pokemon, 1, 1))..""..string.lower(string.sub(pokemon, 2, 30))..""
local dir = "data/Pokemon Statistics/"..poke.." Attempts.txt"
local arq = io.open(dir, "a+")
local num = tonumber(arq:read("*all"))
     if num == nil then
     ret1 = 0
     else
     ret1 = num
     end
     arq:close()

local dir = "data/Pokemon Statistics/"..poke.." Catches.txt"
local arq = io.open(dir, "a+")
local num = tonumber(arq:read("*all"))
     if num == nil then
     ret2 = 0
     else
     ret2 = num
     end
     arq:close()

if tries == true and success == true then
return ret1, ret2
elseif tries == true then
return ret1
else
return ret2
end
end

function doIncreaseStatistics(pokemon, tries, success)

local poke = ""..string.upper(string.sub(pokemon, 1, 1))..""..string.lower(string.sub(pokemon, 2, 30))..""

if tries == true then
local dir = "data/Pokemon Statistics/"..poke.." Attempts.txt"

local arq = io.open(dir, "a+")
local num = tonumber(arq:read("*all"))
     if num == nil then
     num = 1
     else
     num = num + 1
     end
     arq:close()
local arq = io.open(dir, "w")
     arq:write(""..num.."")
     arq:close()
end

if success == true then
local dir = "data/Pokemon Statistics/"..poke.." Catches.txt"

local arq = io.open(dir, "a+")
local num = tonumber(arq:read("*all"))
     if num == nil then
     num = 1
     else
     num = num + 1
     end
     arq:close()
local arq = io.open(dir, "w")
     arq:write(""..num.."")
     arq:close()
end
end

function doUpdateGeneralStatistics()

local dir = "data/Pokemon Statistics/Pokemon Statistics.txt"
local base = "NUMBER  NAME        TRIES / CATCHES\n\n"
local str = ""

for a = 1, 251 do
if string.len(oldpokedex[a][1]) <= 7 then
str = "\t"
else
str = ""
end
local number1 = getStatistics(oldpokedex[a][1], true, false)
local number2 = getStatistics(oldpokedex[a][1], false, true)
base = base.."["..threeNumbers(a).."]\t"..oldpokedex[a][1].."\t"..str..""..number1.." / "..number2.."\n"
end

local arq = io.open(dir, "w")
     arq:write(base)
     arq:close()
end

function getGeneralStatistics()

local dir = "data/Pokemon Statistics/Pokemon Statistics.txt"
local base = "Number/Name/Tries/Catches\n\n"
local str = ""

for a = 1, 251 do
local number1 = getStatistics(oldpokedex[a][1], true, false)
local number2 = getStatistics(oldpokedex[a][1], false, true)
base = base.."["..threeNumbers(a).."] "..oldpokedex[a][1].."  "..str..""..number1.." / "..number2.."\n"
end

return base
end

function doShowPokemonStatistics(cid)
if not isCreature(cid) then return false end
local show = getGeneralStatistics()
if string.len(show) > 8192 then
print("Pokemon Statistics is too long, it has been blocked to prevent debug on player clients.")
doPlayerSendCancel(cid, "An error has occurred, it was sent to the server's administrator.")
return false
end
doShowTextDialog(cid, math.random(2391, 2394), show)
end
(You save the changes to the bloc but not close to can do a "retreat" if any error occurs)
Obviously you must to have registered the Master Ball on your Server / Data / Items / items.xml

Try with that and if it doesn't work, we prove with Configuration.lua in otherside
Pozdrowienia!



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

#5 Re: Master ball el Vie Feb 21, 2014 10:17 am

misterkox


Nuevo
two sprites of the Master Ball. Its broke and catch ??

#6 Re: Master ball el Vie Feb 21, 2014 10:27 am

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió: two sprites of the Master Ball. Its broke and catch ??
Hmmm... yes, you're right, forget what I said.
(I don't know much about Pokémon and I didn't see before this part) [Tienes que estar registrado y conectado para ver esa imagen] 

Well... scripts work?



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

#7 Re: Master ball el Vie Feb 21, 2014 10:42 am

misterkox


Nuevo
thx script its ok i rep u

#8 Re: Master ball Hoy a las 12:16 pm

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.

 

¿Quién está en línea?

En total hay 1 usuario en línea: 1 Registrado, 0 Ocultos y 0 Invitado

Usuarios navegando en este foro: vicente9908

Forum Statistics

Nuestros miembros han públicado un total de posts en temas.
Actualmente hay miembros registrados.
Démosle la bienvenida al miembro más reciente,
La mayor cantidad de usuarios en línea ha sido de .