Ir para conteúdo
  • 0

Pokemon Male/Female


BrunoMaciel

Pergunta

Estou com um leve problema!!

 

Queria saber onde tiro o simbolo de male/female dos pokemons.

 

Eu ja tirei do OTClient na pasta porem na sprite do cliente em si nao consigo tirar queria saber como tiro o simbolo de male/female??

 

OBS: lembrando que na pasta do OTClient eu ja tirei ^^

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

Posts Recomendados

  • 0

da ctrl f no seu notepad++ e deixe assim dps que procurar tudo relacionado ao gender, só ir comentando com " -- " (sem os aspas) as linhas que tiver o gender
hzP1v7f.png

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

  • 0

Entao no meu server eu ja tirei o male/female porem no cliente o simbolo ainda ta e no otclient eu tirei tbem!!

 

nao sei se falto pra min tirar algo no server ou no otclient mais essa print e look do pokemon.

 

 

1.png

8 horas atrás, Kal El disse:

creaturescrip/spawn, procura lá ou posta ai

da uma olhada no que mandei.

 

mandei a print ^^

Link para o comentário
Compartilhar em outros sites

  • 0
13 horas atrás, BrunoMaciel disse:

Entao no meu server eu ja tirei o male/female porem no cliente o simbolo ainda ta e no otclient eu tirei tbem!!

 

nao sei se falto pra min tirar algo no server ou no otclient mais essa print e look do pokemon.

 

 

1.png

da uma olhada no que mandei.

 

mandei a print ^^

posta ai teu look do creaturescript, e o teu level system da lib

Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Kal El disse:

posta ai teu look do creaturescript, e o teu level system da lib

local addons = {
	[12892] = {pokemon= "Golem" , looktype = 1902, count = 1},
	[13027] = {pokemon= "Aggron" , looktype = 1903, count = 1},
	[12941] = {pokemon= "Aggron" , looktype = 1904, count = 1},
	[13002] = {pokemon= "Snorlax" , looktype = 1905, count = 1},
	[12865] = {pokemon= "Kangaskhan" , looktype = 1906, count = 1},
	[12948] = {pokemon= "Shiny Electivire" , looktype = 1907, count = 1},
	[12949] = {pokemon= "Shiny Electabuzz" , looktype = 1908, count = 1},
	[12901] = {pokemon= "Mr. Mime" , looktype = 1909, count = 1},
	[12942] = {pokemon= "Miltank" , looktype = 1910, count = 1},
	[12909] = {pokemon= "Blissey" , looktype = 1912, count = 1},
	[12943] = {pokemon= "Xatu" , looktype = 1913, count = 1},
	[13014] = {pokemon= "Meganium" , looktype = 1914, count = 1},
	[13016] = {pokemon= "Feraligatr" , looktype = 1916, count = 1},
	[13021] = {pokemon= "Feraligatr" , looktype = 1918, count = 1},
	[13013] = {pokemon= "Typhlosion" , looktype = 1919, count = 1},
	[12913] = {pokemon= "Electivire" , looktype = 1920, count = 1},
	[12961] = {pokemon= "Gengar" , looktype = 1921, count = 1},
	[12959] = {pokemon= "Jinx" , looktype = 1922, count = 1},
	[12945] = {pokemon= "Gardevoir" , looktype = 1923, count = 1},
	[12877] = {pokemon= "Scyther" , looktype = 1924, count = 1},
	[12960] = {pokemon= "Jinx" , looktype = 1926, count = 1},
	[12988] = {pokemon= "Snorlax" , looktype = 1927, count = 1},
	[12876] = {pokemon= "Scyther" , looktype = 1928, count = 1},
	[12875] = {pokemon= "Scyther" , looktype = 1930, count = 1},
	[12914] = {pokemon= "Omanyte" , looktype = 1932, count = 1},
	[12989] = {pokemon= "Snorlax" , looktype = 1934, count = 1},
	[13026] = {pokemon= "Hitmonchan" , looktype = 1950, count = 1},
	[12923] = {pokemon= "Blaziken" , looktype = 1951, count = 1},
	[12992] = {pokemon= "Scizor" , looktype = 1952, count = 1},
	[13000] = {pokemon= "Miltank" , looktype = 1954, count = 1},
	[12998] = {pokemon= "Gardevoir" , looktype = 1955, count = 1},
	[12999] = {pokemon= "Miltank" , looktype = 1956, count = 1},
	[12996] = {pokemon= "Swampert" , looktype = 1957, count = 1},
	[12993] = {pokemon= "Electabuzz" , looktype = 1958, count = 1},
	[12995] = {pokemon= "Magmar" , looktype = 1960, count = 1},
	[12997] = {pokemon= "Tyranitar" , looktype = 1963, count = 1},
	[13007] = {pokemon= "Gardevoir" , looktype = 1964, count = 1},
	[13008] = {pokemon= "Gardevoir" , looktype = 1965, count = 1},
	[13009] = {pokemon= "Gardevoir" , looktype = 1966, count = 1},
	[13199] = {pokemon= "Gardevoir" , looktype = 1967, count = 1},
	[13029] = {pokemon= "Typhlosion" , looktype = 1969, count = 1},
	[13020] = {pokemon= "Feraligatr" , looktype = 1970, count = 1},
	[13037] = {pokemon= "Hitmontop" , looktype = 1973, count = 1},
	[12967] = {pokemon= "Crobat" , looktype = 1974, count = 1},
	[13004] = {pokemon= "Aggron" , looktype = 1976, count = 1},
	[12950] = {pokemon= "Shiny Charizard" , looktype = 1982, count = 1},
	[13025] = {pokemon= "Shiny Vileplume" , looktype = 1983, count = 1},
	[13038] = {pokemon= "Lapras" , looktype = 1989, count = 1},
	[13039] = {pokemon= "Tentacruel" , looktype = 1991, count = 1},
	[12921] = {pokemon= "Nidoking" , looktype = 1999, count = 1},
	[13040] = {pokemon= "Lapras" , looktype = 1893, count = 1},
	[12946] = {pokemon= "Gardevoir" , looktype = 1894, count = 1},
	[13041] = {pokemon= "Arcanine" , looktype = 1895, count = 1},
	[13042] = {pokemon= "Aggron" , looktype = 1896, count = 1},
	[12990] = {pokemon= "Snorlax" , looktype = 1897, count = 1},
	[13046] = {pokemon= "Charizard" , looktype = 1898, count = 1},
	[13045] = {pokemon= "Charizard" , looktype = 2000, count = 1},
	[13043] = {pokemon= "Charizard" , looktype = 2001, count = 1},
	[13047] = {pokemon= "Gengar" , looktype = 2003, count = 1},
	[13048] = {pokemon= "Gengar" , looktype = 2004, count = 1},
	[13049] = {pokemon= "Gengar" , looktype = 2005, count = 1},
	[12900] = {pokemon= "Alakazam" , looktype = 2006, count = 1},
	[13050] = {pokemon= "Alakazam" , looktype = 2007, count = 1},
	[12899] = {pokemon= "Alakazam" , looktype = 2008, count = 1},
	[13051] = {pokemon= "Alakazam" , looktype = 2009, count = 1},
	[12890] = {pokemon= "Shiny Gengar" , looktype = 2011, count = 1},
	[12889] = {pokemon= "Shiny Gengar" , looktype = 2012, count = 1},
	[13052] = {pokemon= "Shiny Raichu" , looktype = 2013, count = 1},
	[13058] = {pokemon= "Shiny Raichu" , looktype = 2014, count = 1},
	[12893] = {pokemon= "Golem" , looktype = 2025, count = 1},
	[13053] = {pokemon= "Shiny Abra" , looktype = 2027, count = 1},
	[13057] = {pokemon= "Shiny Alakazam" , looktype = 2028, count = 1},
	[13054] = {pokemon= "Shiny Alakazam" , looktype = 2029, count = 1},
	[13056] = {pokemon= "Shiny Alakazam" , looktype = 2030, count = 1},
	[13055] = {pokemon= "Shiny Alakazam" , looktype = 2031, count = 1},
	[12871] = {pokemon= "Shiny Electabuzz" , looktype = 2039, count = 1},
	[12912] = {pokemon= "Shiny Electabuzz" , looktype = 2040, count = 1},
	[13059] = {pokemon= "Shiny Jinx" , looktype = 2043, count = 1},
	[13060] = {pokemon= "Shiny Jinx" , looktype = 2044, count = 1},
	[12907] = {pokemon= "Shiny Pidgeot" , looktype = 2063, count = 1},
	[12908] = {pokemon= "Shiny Pidgeot" , looktype = 2064, count = 1},
	[12906] = {pokemon= "Shiny Pidgeot" , looktype = 2065, count = 1},
	[12872] = {pokemon= "Machamp" , looktype = 2067, count = 1},
	[12940] = {pokemon= "Shiny Charizard" , looktype = 2086, count = 1},
	[13308] = {pokemon= "Shiny Charizard" , looktype = 2084, count = 1},
	[12938] = {pokemon= "Ursaring" , looktype = 2088, count = 1},
	[12937] = {pokemon= "Shiny Gengar" , looktype = 2078, count = 1},
	[12939] = {pokemon= "Gengar" , looktype = 2080, count = 1},
	[12883] = {pokemon= "Shiny Gengar" , looktype = 2081, count = 1},
}

local NPCBattle = {
	["Brock"] = {artig = "He is", cidbat = "Pewter"},
	["Misty"] = {artig = "She is", cidbat = "Cerulean"},
	["Blaine"] = {artig = "He is", cidbat = "Cinnabar"},
	["Sabrina"] = {artig = "She is", cidbat = "Saffron"},         --alterado v1.9 \/ peguem tudo!
	["Kira"] = {artig = "She is", cidbat = "Viridian"},
	["Koga"] = {artig = "He is", cidbat = "Fushcia"},
	["Erika"] = {artig = "She is", cidbat = "Celadon"},
	["Surge"] = {artig = "He is", cidbat = "Vermilion"},
}

function onLook(cid, thing, position, lookDistance)
	local str = {}
	if not isCreature(thing.uid) then
		if not isPokeball(thing.itemid) then
			if priceList[getItemInfo(thing.itemid).name] then
				price = priceList[getItemInfo(thing.itemid).name].price

				if thing.type > 1 then
					str = "You see "..thing.type.." "..getItemInfo(thing.itemid).plural.."."
					price = price * thing.type
				else
					str = "You see "..getItemInfo(thing.itemid).article.." "..getItemInfo(thing.itemid).name.."."
				end

				str = str.." Price: $"..price.."."
				if getItemAttribute(thing.uid, "description") then
					str = str.."\n"..getItemAttribute(thing.uid, "description").."."
				end

				if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then
					str = str.."\nItemID: ["..thing.itemid.."]."                                                      --alterado v1.7
					local pos = getThingPos(thing.uid)
					str = str.."\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]"
				end

				doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str)
				return false
			end
		end

		local iname = getItemInfo(thing.itemid)
		if isPokeball(thing.itemid) and getItemAttribute(thing.uid, "poke") then
			unLock(thing.uid)
			local lock = getItemAttribute(thing.uid, "lock")
			local pokename = getItemAttribute(thing.uid, "poke")
			table.insert(str, "You see "..iname.article.." "..iname.name..".")

			if getItemAttribute(thing.uid, "unique") then
				table.insert(str, " It's an unique item.")
			end

			table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename..".\n")
			if lock and lock > 0 then
				table.insert(str, "It will unlock in ".. os.date("%d/%m/%y %X", lock)..".\n")
			end

			local boost = getItemAttribute(thing.uid, "boost") or 0
			if boost > 0 then
				table.insert(str, "Boost level: +"..boost..".\n")
			end

			if getItemAttribute(thing.uid, "nick") then
				table.insert(str, "It's nickname is: "..getItemAttribute(thing.uid, "nick")..".\n")
			end

			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
			return false
		elseif string.find(iname.name, "fainted") or string.find(iname.name, "defeated") then
			table.insert(str, "You see a "..string.lower(iname.name)..". ")

			if isContainer(thing.uid) then
				table.insert(str, "(Vol: "..getContainerCap(thing.uid)..")")
			end

			table.insert(str, "\n")

			if getItemAttribute(thing.uid, "gender") == SEX_MALE then
				table.insert(str, "It is male.")
			elseif getItemAttribute(thing.uid, "gender") == SEX_FEMALE then
				table.insert(str, "It is female.")
			else
				table.insert(str, "It is genderless.")
			end

			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
			return false
		elseif isContainer(thing.uid) then     --containers
			if iname.name == "dead human" and getItemAttribute(thing.uid, "pName") then
				table.insert(str, "You see a dead human (Vol:"..getContainerCap(thing.uid).."). ")
				table.insert(str, "You recognize ".. getItemAttribute(thing.uid, "pName")..". ".. getItemAttribute(thing.uid, "article").." was killed by a ")
				table.insert(str, getItemAttribute(thing.uid, "attacker")..".")
			else
				table.insert(str, "You see "..iname.article.." "..iname.name..". (Vol:"..getContainerCap(thing.uid)..").")
			end

			if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then
				table.insert(str, "\nItemID: ["..thing.itemid.."]")
				local pos = getThingPos(thing.uid)
				table.insert(str, "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]")
			end

			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
			return false
		elseif getItemAttribute(thing.uid, "unique") then
			local p = getThingPos(thing.uid)

			table.insert(str, "You see ")
			if thing.type > 1 then
				table.insert(str, thing.type.." "..iname.plural..".")
			else
				table.insert(str, iname.article.." "..iname.name..".")
			end

			table.insert(str, " It's an unique item.\n"..iname.description)
		  
			if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then
				table.insert(str, "\nItemID: ["..thing.itemid.."]")
				table.insert(str, "\nPosition: ["..p.x.."]["..p.y.."]["..p.z.."]")
			end

			sendMsgToPlayer(cid, MESSAGE_INFO_DESCR, table.concat(str))
			return false
		else
			return true
		end
	end

	local npcname = getCreatureName(thing.uid)
	if ehNPC(thing.uid) and NPCBattle[npcname] then    --npcs duel
		table.insert(str, "You see "..npcname..". "..NPCBattle[npcname].artig.." leader of the gym from "..NPCBattle[npcname].cidbat..".")
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
		return false
	end

	if getPlayerStorageValue(thing.uid, 697548) ~= -1 then
		table.insert(str, getPlayerStorageValue(thing.uid, 697548))
		local pos = getThingPos(thing.uid)
		if youAre[getPlayerGroupId(cid)] then
			table.insert(str, "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]")
		end
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
		return false
	end

	if not isPlayer(thing.uid) and not isMonster(thing.uid) then    --outros npcs
		table.insert(str, "You see "..getCreatureName(thing.uid)..".")
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
		return false
	end

	if isPlayer(thing.uid) then     --player
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, getPlayerDesc(cid, thing.uid, false))
		return false
	end

	if getCreatureName(thing.uid) == "Evolution" then
		return false
	end

	if not isSummon(thing.uid) then   --monstros
		table.insert(str, "You see a wild "..string.lower(getCreatureName(thing.uid))..".\n")
		table.insert(str, "Hit Points: "..getCreatureHealth(thing.uid).." / "..getCreatureMaxHealth(thing.uid)..".\n")

		if getPokemonGender(thing.uid) == SEX_MALE then
			table.insert(str, "It is male.")
		elseif getPokemonGender(thing.uid) == SEX_FEMALE then
			table.insert(str, "It is female.")
		else
			table.insert(str, "It is genderless.")
		end

		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
		return false
	elseif isSummon(thing.uid) and not isPlayer(thing.uid) then  --summons
		local boostlevel = getItemAttribute(getPlayerSlotItem(getCreatureMaster(thing.uid), 8).uid, "boost") or 0
		if getCreatureMaster(thing.uid) == cid then
			local myball = getPlayerSlotItem(cid, 8).uid
			table.insert(str, "You see your "..string.lower(getCreatureName(thing.uid))..".")
			if boostlevel > 0 then
				table.insert(str, "\nBoost level: +"..boostlevel..".")
			end
			table.insert(str, "\nHit points: "..getCreatureHealth(thing.uid).."/"..getCreatureMaxHealth(thing.uid)..".")
			table.insert(str, "\n"..getPokemonHappinessDescription(thing.uid))
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
		else
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You see a "..string.lower(getCreatureName(thing.uid))..".\nIt belongs to "..getCreatureName(getCreatureMaster(thing.uid))..".")
		end
		return false
	end
	return true
end

Look /\ 

 

level system \/

function adjustWildPoke(cid, optionalLevel)
if isMonster(cid) and pokes[getCreatureName(cid)] then

    local level = (optionalLevel and optionalLevel >= 1) and optionalLevel or getPokemonLevel(cid)  --alterado v1.8


	setPlayerStorageValue(cid, 1000, level) --alterado v1.8
    setPlayerStorageValue(cid, 1001, pokes[getCreatureName(cid)].offense * level)
	setPlayerStorageValue(cid, 1002, pokes[getCreatureName(cid)].defense)
	setPlayerStorageValue(cid, 1003, pokes[getCreatureName(cid)].agility)                                  
	setPlayerStorageValue(cid, 1004, pokes[getCreatureName(cid)].vitality * level)
	setPlayerStorageValue(cid, 1005, pokes[getCreatureName(cid)].specialattack * level)
	
	
    doRegainSpeed(cid)	     --alterado!
    setCreatureMaxHealth(cid, (getVitality(cid) * HPperVITwild)) 
    doCreatureAddHealth(cid,  getCreatureMaxHealth(cid))
   
    if pokes[getCreatureName(cid)].exp then
       local exp = pokes[getCreatureName(cid)].exp * baseExpRate + pokes[getCreatureName(cid)].vitality * pokemonExpPerLevelRate
       setPlayerStorageValue(cid, 1006, (exp * generalExpRate/2)*10)
       if getPlayerStorageValue(cid, 22546) == 1 then
          setPlayerStorageValue(cid, 1006, 750)
          doSetCreatureDropLoot(cid, false)      
       end   
	end
end
end       

function getPokemonXMLOutfit(name)                --alterado v1.9 \/
local path = "data/monster/pokes/Shiny/"..name..".xml"
local tpw = io.type(io.open(path))

if not tpw then
   path = "data/monster/pokes/geracao 1/"..name..".xml"
   tpw = io.type(io.open(path))
end
if not tpw then
   path = "data/monster/pokes/geracao 2/"..name..".xml"
   tpw = io.type(io.open(path))
end
if not tpw then
   path = "data/monster/pokes/geracao 3/"..name..".xml"
   tpw = io.type(io.open(path))
end
if not tpw then
   path = "data/monster/pokes/geracao 4/"..name..".xml"
   tpw = io.type(io.open(path))
end
if not tpw then
   path = "data/monster/pokes/"..name..".xml"
   tpw = io.type(io.open(path))
end   
if not tpw then
   return print("[getPokemonXMLOutfit] Poke with name: "..name.." ins't in any paste on monster/pokes/") and 2
end
   local arq = io.open(path, "a+")
   local txt = arq:read("*all")
   arq:close()
   local a, b = txt:find('look type="(.-)"')
   txt = string.sub(txt, a + 11, b - 1)
return tonumber(txt)
end 

function doEvolutionOutfit(cid, oldout, outfit)
	if not isCreature(cid) then return true end
		if getCreatureOutfit(cid).lookType == oldout then
			doSetCreatureOutfit(cid, {lookType = outfit}, -1)
		else
			doSetCreatureOutfit(cid, {lookType = oldout}, -1)
		end
end

function doSendEvolutionEffect(cid, pos, evolution, turn, ssj, evolve, f, h)
	if not isCreature(cid) then
		doSendAnimatedText(pos, "CANCEL", 215)
	    return true 
    end
	if evolve then
		doEvolvePokemon(getCreatureMaster(cid), {uid = cid}, evolution, 0, 0)
	return true
	end
	doSendMagicEffect(pos, 18)
		if ssj then
			sendSSJEffect(evo)
		end
	doEvolutionOutfit(cid, f, h)
	addEvent(doSendEvolutionEffect, math.pow(1900, turn/20), cid, getThingPos(cid), evolution, turn - 1, turn == 19, turn == 2, f, h)
end

function sendSSJEffect(cid)
	if not isCreature(cid) then return true end
	local pos1 = getThingPos(cid)
	local pos2 = getThingPos(cid)
	pos2.x = pos2.x + math.random(-1, 1)
	pos2.y = pos2.y - math.random(1, 2)
	doSendDistanceShoot(pos1, pos2, 37)
	addEvent(sendSSJEffect, 45, cid)
end

function sendFinishEvolutionEffect(cid, alternate)
	if not isCreature(cid) then return true end
	local pos1 = getThingPos(cid)

	if alternate then
		local pos = {
		[1] = {-2, 0},
		[2] = {-1, -1},
		[3] = {0, -2},
		[4] = {1, -1},
		[5] = {2, 0},
		[6] = {1, 1},
		[7] = {0, 2},
		[8] = {-1, 1}}
		for a = 1, 8 do
			local pos2 = getThingPos(cid)
			pos2.x = pos2.x + pos[a][1]
			pos2.y = pos2.y + pos[a][2]
			local pos = getThingPos(cid)
			doSendDistanceShoot(pos2, pos, 37)
			addEvent(doSendDistanceShoot, 300, pos, pos2, 37)
		end
	else
		for a = 0, 3 do
			doSendDistanceShoot(pos1, getPosByDir(pos1, a), 37)
		end
		for a = 4, 7 do
			addEvent(doSendDistanceShoot, 600, pos1, getPosByDir(pos1, a), 37)
		end
	end
end

function doEvolvePokemon(cid, item2, theevo, stone1, stone2)

	if not isCreature(cid) then return true end

	if not pokes[theevo] or not pokes[theevo].offense then
	doReturnPokemon(cid, item2.uid, getPlayerSlotItem(cid, 8), pokeballs[getPokeballType(getPlayerSlotItem(cid, 8).itemid)].effect, false, true)
	return true
	end

	local owner = getCreatureMaster(item2.uid)
	local pokeball = getPlayerSlotItem(cid, 8)
	local description = "Contains a "..theevo.."."
	local pct = getCreatureHealth(item2.uid) / getCreatureMaxHealth(item2.uid)

		doItemSetAttribute(pokeball.uid, "hp", pct)

		doItemSetAttribute(pokeball.uid, "poke", theevo)
		doItemSetAttribute(pokeball.uid, "description", "Contains a "..theevo..".")

		doPlayerSendTextMessage(cid, 27, "Congratulations! Your "..getPokeName(item2.uid).." evolved into a "..theevo.."!")		

		doSendMagicEffect(getThingPos(item2.uid), 18)
		doTransformItem(getPlayerSlotItem(cid, 7).uid, fotos[theevo])
		doSendMagicEffect(getThingPos(cid), 173)

		local oldpos = getThingPos(item2.uid)
		local oldlod = getCreatureLookDir(item2.uid)
		doRemoveCreature(item2.uid)

		doSummonMonster(cid, theevo)
		local pk = getCreatureSummons(cid)[1]

		doTeleportThing(pk, oldpos, false)
		doCreatureSetLookDir(pk, oldlod)

		sendFinishEvolutionEffect(pk, true)
		addEvent(sendFinishEvolutionEffect, 550, pk, true)
		addEvent(sendFinishEvolutionEffect, 1050, pk)
		
		doPlayerRemoveItem(cid, stone1, 1)
		doPlayerRemoveItem(cid, stone2, 1)

		doAddPokemonInOwnList(cid, theevo)

		local happy = getItemAttribute(pokeball.uid, "happy")

		doItemSetAttribute(pokeball.uid, "happy", happy + happyGainedOnEvolution)

		if happy + happyGainedOnEvolution > 255 then
			doItemSetAttribute(pokeball.uid, "happy", 255)
		end

		adjustStatus(pk, pokeball.uid, true, false)

		if useKpdoDlls then
			doUpdateMoves(cid)
		end
end

function doMathDecimal(number, casas)

	if math.floor(number) == number then return number end

	local c = casas and casas + 1 or 3

	for a = 0, 10 do
		if math.floor(number) < math.pow(10, a) then
			local str = string.sub(""..number.."", 1, a + c)
			return tonumber(str)	
		end
	end

return number
end

function doAdjustWithDelay(cid, pk, health, vit, status)
if isCreature(cid) then                                   
   adjustStatus(pk, getPlayerSlotItem(cid, 8).uid, health, vir, status)
end
end

function adjustStatus(pk, item, health, vite, conditions)

	if not isCreature(pk) then return true end

	local gender = getItemAttribute(item, "gender") and getItemAttribute(item, "gender") or 0
	addEvent(doCreatureSetSkullType, 10, pk, gender)

    setPlayerStorageValue(pk, 1001, pokes[getCreatureName(pk)].offense * (getMasterLevel(pk) + getPokemonBoost(pk)))
	setPlayerStorageValue(pk, 1002, pokes[getCreatureName(pk)].defense)             
	setPlayerStorageValue(pk, 1003, pokes[getCreatureName(pk)].agility)
	setPlayerStorageValue(pk, 1004, pokes[getCreatureName(pk)].vitality * (getMasterLevel(pk) + getPokemonBoost(pk)))
	setPlayerStorageValue(pk, 1005, pokes[getCreatureName(pk)].specialattack * (getMasterLevel(pk) + getPokemonBoost(pk)))
	
	if vite == true then
		local pct = getCreatureHealth(pk) / getCreatureMaxHealth(pk)
		local vit = getVitality(pk)
		setCreatureMaxHealth(pk, ( vit * HPperVITsummon ))
		doCreatureAddHealth(pk, pct * vit * HPperVITsummon)
	end
                                                                      
	doRegainSpeed(pk)  

	local nick = getItemAttribute(item, "poke")

    if isGhostPokemon(pk) then
       setPlayerStorageValue(pk, 8981, 1)
       updateGhostWalk(pk)
    end
    	
	if string.find(tostring(nick), "Shiny") then
	   nick = tostring(nick):match("Shiny (.*)")
    end

	if getItemAttribute(item, "nick") then
		nick = getItemAttribute(item, "nick")
	end

	setPlayerStorageValue(pk, 1007, nick)

	doCreatureSetNick(pk, nick)

	if not getItemAttribute(item, "happy") then
		doItemSetAttribute(item, "happy", 120)
	end

	if not getItemAttribute(item, "hunger") then
		doItemSetAttribute(item, "hunger", 5)
	end

	local happy = getItemAttribute(item, "happy")
		if happy < 0 then
			happy = 1
		end
	setPlayerStorageValue(pk, 1008, happy)

	local hunger = getItemAttribute(item, "hunger")
	setPlayerStorageValue(pk, 1009, hunger)

	if health == true then
		local mh = HPperVITsummon * getVitality(pk)
		local rd = 1 - (tonumber(getItemAttribute(item, "hp")))
		setCreatureMaxHealth(pk, mh)                                  
		doCreatureAddHealth(pk, getCreatureMaxHealth(pk))
		doCreatureAddHealth(pk, -(getCreatureMaxHealth(pk) * rd))
	end

	if isSummon(pk) and conditions then
		local burn = getItemAttribute(item, "burn")   
		if burn and burn >= 0 then
		   local ret = {id = pk, cd = burn, check = false, damage = getItemAttribute(item, "burndmg"), cond = "Burn"}
		   addEvent(doCondition2, 3500, ret)
		end

		local poison = getItemAttribute(item, "poison")
		if poison and poison >= 0 then
		   local ret = {id = pk, cd = poison, check = false, damage = getItemAttribute(item, "poisondmg"), cond = "Poison"}
		   addEvent(doCondition2, 1500, ret)
		end

        local confuse = getItemAttribute(item, "confuse")
		if confuse and confuse >= 0 then
		   local ret = {id = pk, cd = confuse, check = false, cond = "Confusion"}
		   addEvent(doCondition2, 1200, ret)                                                
		end

        local sleep = getItemAttribute(item, "sleep")
		if sleep and sleep >= 0 then
		   local ret = {id = pk, cd = sleep, check = false, first = true, cond = "Sleep"}
		   doCondition2(ret)
		end
		
		local miss = getItemAttribute(item, "miss")     
		if miss and miss >= 0 then      
          local ret = {id = pk, cd = miss, eff = getItemAttribute(item, "missEff"), check = false, spell = getItemAttribute(item, "missSpell"), cond = "Miss"}
          doCondition2(ret)
        end
        
        local fear = getItemAttribute(item, "fear")
        if fear and fear >= 0 then
           local ret = {id = pk, cd = fear, check = false, skill = getItemAttribute(item, "fearSkill"), cond = "Fear"}
           doCondition2(ret)
        end
        
        local silence = getItemAttribute(item, "silence")
        if silence and silence >= 0 then      
           local ret = {id = pk, cd = silence, eff = getItemAttribute(item, "silenceEff"), check = false, cond = "Silence"}
           doCondition2(ret)
        end                                     
        
        local stun = getItemAttribute(item, "stun")
        if stun and stun >= 0 then
           local ret = {id = pk, cd = stun, eff = getItemAttribute(item, "stunEff"), check = false, spell = getItemAttribute(item, "stunSpell"), cond = "Stun"}
           doCondition2(ret)
        end 
                                                       
        local paralyze = getItemAttribute(item, "paralyze")
        if paralyze and paralyze >= 0 then
           local ret = {id = pk, cd = paralyze, eff = getItemAttribute(item, "paralyzeEff"), check = false, first = true, cond = "Paralyze"}
           doCondition2(ret)
        end  
                                                     
        local slow = getItemAttribute(item, "slow")
        if slow and slow >= 0 then
           local ret = {id = pk, cd = slow, eff = getItemAttribute(item, "slowEff"), check = false, first = true, cond = "Slow"}
           doCondition2(ret)
        end                                              
        
        local leech = getItemAttribute(item, "leech")
        if leech and leech >= 0 then
           local ret = {id = pk, cd = leech, attacker = 0, check = false, damage = getItemAttribute(item, "leechdmg"), cond = "Leech"}
           doCondition2(ret)
        end                               
        
        for i = 1, 3 do
            local buff = getItemAttribute(item, "Buff"..i)
            if buff and buff >= 0 then
               local ret = {id = pk, cd = buff, eff = getItemAttribute(item, "Buff"..i.."eff"), check = false, 
               buff = getItemAttribute(item, "Buff"..i.."skill"), first = true, attr = "Buff"..i}
               doCondition2(ret)
            end
        end
               
	end
	                                                                      --alterado v1.9
    if getItemAttribute(item, "boost") and getItemAttribute(item, "boost") >= 50 and getItemAttribute(item, "aura") then
       sendAuraEffect(pk, auraSyst[getItemAttribute(item, "aura")])        
    end
    
    if getPlayerStorageValue(getCreatureMaster(pk), 6598754) >= 1 then
        setPlayerStorageValue(pk, 6598754, 1)                               
    elseif getPlayerStorageValue(getCreatureMaster(pk), 6598755) >= 1 then
        setPlayerStorageValue(pk, 6598755, 1)
    end

return true
end

function getOffense(cid)
	if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1001))
end

function getDefense(cid)
	if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1002))
end

function getSpeed(cid)
	if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1003))
end

function getVitality(cid)
	if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1004))
end

function getSpecialAttack(cid)
	if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1005))
end

function getHappiness(cid)
	if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1008))
end

function getSpecialDefense(cid)
	if not isCreature(cid) then return 0 end
return getSpecialAttack(cid) * 0.85 + getDefense(cid) * 0.2      
end

function getPokemonLevel(cid, dex)
if not isCreature(cid) then return 0 end 
    if not dex then                      --alterado v1.9
       if ehMonstro(cid) and getPlayerStorageValue(cid, 1000) > 0 then  
          return getPlayerStorageValue(cid, 1000)
       elseif ehMonstro(cid) then 
          return pokes[getCreatureName(cid)].wildLvl             
       end
    end   
return pokes[getCreatureName(cid)].level
end

function getPokemonLevelByName(name)
return pokes[name] and pokes[name].level or 0  --alterado v1.9
end

function getMasterLevel(poke)
    if not isSummon(poke) then return 0 end
return getPlayerLevel(getCreatureMaster(poke))
end

function getPokemonBoost(poke)
    if not isSummon(poke) then return 0 end
return getItemAttribute(getPlayerSlotItem(getCreatureMaster(poke), 8).uid, "boost") or 0
end

function getPokeballBoost(ball)
    if not isPokeball(ball.itemid) then return 0 end  --alterado v1.8
return getItemAttribute(ball.uid, "boost") or 0
end

function getPokeName(cid)
	if not isSummon(cid) then return getCreatureName(cid) end
	if getCreatureName(cid) == "Evolution" then return getPlayerStorageValue(cid, 1007) end
	
local item = getPlayerSlotItem(getCreatureMaster(cid), 8)
	if getItemAttribute(item.uid, "nick") then
	   return getItemAttribute(item.uid, "nick")
	end
	if string.find(tostring(getCreatureName(cid)), "Shiny") then
      local newName = tostring(getCreatureName(cid)):match("Shiny (.*)")
      return newName
    end
return getCreatureName(cid)
end

function getPokeballName(item, truename)
if not truename and getItemAttribute(item, "nick") then
return getItemAttribute(item, "nick")
end
return getItemAttribute(item, "poke")
end

function getPokemonName(cid)
return getCreatureName(cid)
end

function getPokemonGender(cid) --alterado v1.9
return getCreatureSkullType(cid)
end

function setPokemonGender(cid, gender)
if isCreature(cid) and gender then        --alterado v1.8
   doCreatureSetSkullType(cid, gender)
   return true
end
return false
end

function getWildPokemonExp(cid)
return getPlayerStorageValue(cid, 1006)
end

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
Agora, Kal El disse:

posta teu catch system da lib tambem

failmsgs = {
"Sorry, you didn't catch that pokemon.",
"Sorry, your pokeball broke.",
"Sorry, the pokemon escaped.",
}

function doBrokesCount(cid, str, ball)   --alterado v1.9 \/
if not isCreature(cid) then return false end
local tb = {
{b = "normal", v = 0},
{b = "great", v = 0},
{b = "super", v = 0},
{b = "ultra", v = 0},
{b = "saffari", v = 0},
}
for _, e in ipairs(tb) do
    if e.b == ball then
       e.v = 1
       break
    end
end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
local t2 = ""

for n, g, s, u, s2 in string:gmatch(t) do
    t2 = "normal = "..(n+tb[1].v)..", great = "..(g+tb[2].v)..", super = "..(s+tb[3].v)..", ultra = "..(u+tb[4].v)..", saffari = "..(s2+tb[5].v)..";"    
end
return setPlayerStorageValue(cid, str, string:gsub(t, t2))
end

function sendBrokesMsg(cid, str, ball)
if not isCreature(cid) then return false end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
local msg = {}
table.insert(msg, "You have wasted: ")

for n, g, s, u in string:gmatch(t) do
    if tonumber(n) and tonumber(n) > 0 then 
       table.insert(msg, tostring(n).." Poke ball".. (tonumber(n) > 1 and "s" or "")) 
    end
    if tonumber(g) and tonumber(g) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(g).." Great ball".. (tonumber(g) > 1 and "s" or "")) 
    end
    if tonumber(s) and tonumber(s) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s).." Super ball".. (tonumber(s) > 1 and "s" or "")) 
    end
    if tonumber(u) and tonumber(u) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(u).." Ultra ball".. (tonumber(u) > 1 and "s" or "")) 
    end
    if tonumber(s2) and tonumber(s2) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s2).." Saffari ball".. (tonumber(s2) > 1 and "s" or "")) 
    end
end
if #msg == 1 then
   return true
end
if string.sub(msg[#msg], 1, 1) == "," then
   msg[#msg] = " and".. string.sub(msg[#msg], 2, #msg[#msg])
end
table.insert(msg, " trying to catch it.")
sendMsgToPlayer(cid, 27, table.concat(msg))
end                                                             --alterado v1.9 /\
--------------------------------------------------------------------------------

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 
       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 chance = (1 * rate + 1) / totalChance
        chance = doMathDecimal(chance * 100)

    if rate >= totalChance then
        local status = {}
              status.gender = getItemAttribute(corpse, "gender")
              status.happy = 160

        doRemoveItem(corpse, 1)
        doSendMagicEffect(topos, catch)
        addEvent(doCapturePokemon, 3000, cid, name, newid, status, typeee)  
    return true
    end


    if totalChance <= 1 then totalChance = 1 end

    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.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, 3000, cid, name, newid, status, typeee) 
    else
        addEvent(doNotCapturePokemon, 3000, cid, name, typeee) 
        doSendMagicEffect(topos, fail)
    end
end

function doCapturePokemon(cid, poke, ballid, status, typeee)  

    if not isCreature(cid) then
    return true
    end
    
local list = getCatchList(cid)
    if not isInArray(list, poke) and not isShinyName(poke) then    
       doPlayerAddSoul(cid, 1)
    end

    doAddPokemonInOwnList(cid, poke)
    doAddPokemonInCatchList(cid, poke)
        CW_Count(cid, poke, typeee)
        CW_Caught(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 gender = status.gender
local happy = 200
                                                   --alterado v1.9  \/                  
        if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
           item = doCreateItemEx(ballid)
        else
            item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, ballid, 1) 
        end

        doItemSetAttribute(item, "poke", poke)
        doItemSetAttribute(item, "hp", 1)
        doItemSetAttribute(item, "happy", happy)
        doItemSetAttribute(item, "gender", gender)
        doItemSetAttribute(item, "fakedesc", description)
        doItemSetAttribute(item, "description", description)
        if poke == "Hitmonchan" or poke == "Shiny Hitmonchan" then    
           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))  
           doItemSetAttribute(item, "task", 1)
           setPlayerStorageValue(cid, 854788, 'done')
        end
        -------------------------------------------                                  --alterado v1.9 \/ 
    if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then   
        doPlayerSendMailByName(getCreatureName(cid), item, 1)   
        doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a pokemon ("..poke..")!")
        doPlayerSendTextMessage(cid, 27, "Since you are already holding six pokemons, this pokeball has been sent to your depot.")     
    else
        doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a ("..poke..")!")
    end
    
    local storage = newpokedex[poke].stoCatch 
    sendBrokesMsg(cid, storage, typeee)             
    setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0;") --alterado v1.9 /\

    if #getCreatureSummons(cid) >= 1 then
        doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173) 
            if catchMakesPokemonHappier then
                setPlayerStorageValue(getCreatureSummons(cid)[1], 1008, getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) + 20)
            end
    else
        doSendMagicEffect(getThingPos(cid), 173) 
    end

doIncreaseStatistics(poke, true, true)

end

function doNotCapturePokemon(cid, poke, typeee)  

    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)   
doIncreaseStatistics(poke, true, false)
CW_Count(cid, poke, typeee)

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

failmsgs = {
"Sorry, you didn't catch that pokemon.",
"Sorry, your pokeball broke.",
"Sorry, the pokemon escaped.",
}

function doBrokesCount(cid, str, ball)   --alterado v1.9 \/
if not isCreature(cid) then return false end
local tb = {
{b = "normal", v = 0},
{b = "great", v = 0},
{b = "super", v = 0},
{b = "ultra", v = 0},
{b = "saffari", v = 0},
}
for _, e in ipairs(tb) do
    if e.b == ball then
       e.v = 1
       break
    end
end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
local t2 = ""

for n, g, s, u, s2 in string:gmatch(t) do
    t2 = "normal = "..(n+tb[1].v)..", great = "..(g+tb[2].v)..", super = "..(s+tb[3].v)..", ultra = "..(u+tb[4].v)..", saffari = "..(s2+tb[5].v)..";"    
end
return setPlayerStorageValue(cid, str, string:gsub(t, t2))
end

function sendBrokesMsg(cid, str, ball)
if not isCreature(cid) then return false end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
local msg = {}
table.insert(msg, "You have wasted: ")

for n, g, s, u in string:gmatch(t) do
    if tonumber(n) and tonumber(n) > 0 then 
       table.insert(msg, tostring(n).." Poke ball".. (tonumber(n) > 1 and "s" or "")) 
    end
    if tonumber(g) and tonumber(g) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(g).." Great ball".. (tonumber(g) > 1 and "s" or "")) 
    end
    if tonumber(s) and tonumber(s) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s).." Super ball".. (tonumber(s) > 1 and "s" or "")) 
    end
    if tonumber(u) and tonumber(u) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(u).." Ultra ball".. (tonumber(u) > 1 and "s" or "")) 
    end
    if tonumber(s2) and tonumber(s2) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s2).." Saffari ball".. (tonumber(s2) > 1 and "s" or "")) 
    end
end
if #msg == 1 then
   return true
end
if string.sub(msg[#msg], 1, 1) == "," then
   msg[#msg] = " and".. string.sub(msg[#msg], 2, #msg[#msg])
end
table.insert(msg, " trying to catch it.")
sendMsgToPlayer(cid, 27, table.concat(msg))
end                                                             --alterado v1.9 /\
--------------------------------------------------------------------------------

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 
	   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 chance = (1 * rate + 1) / totalChance
		chance = doMathDecimal(chance * 100)

	if rate >= totalChance then
		local status = {}
		      status.gender = getItemAttribute(corpse, "gender")
		      status.happy = 160

		doRemoveItem(corpse, 1)
		doSendMagicEffect(topos, catch)
		addEvent(doCapturePokemon, 3000, cid, name, newid, status, typeee)  
	return true
	end


	if totalChance <= 1 then totalChance = 1 end

	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.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, 3000, cid, name, newid, status, typeee) 
	else
		addEvent(doNotCapturePokemon, 3000, cid, name, typeee) 
		doSendMagicEffect(topos, fail)
	end
end

function doCapturePokemon(cid, poke, ballid, status, typeee)  

	if not isCreature(cid) then
	return true
	end
	
local list = getCatchList(cid)
    if not isInArray(list, poke) and not isShinyName(poke) then    
       doPlayerAddSoul(cid, 1)
    end

	doAddPokemonInOwnList(cid, poke)
	doAddPokemonInCatchList(cid, poke)
        CW_Count(cid, poke, typeee)
        CW_Caught(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 gender = status.gender
local happy = 200
                                                   --alterado v1.9  \/                  
        if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
           item = doCreateItemEx(ballid)
        else
            item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, ballid, 1) 
        end

		doItemSetAttribute(item, "poke", poke)
		doItemSetAttribute(item, "hp", 1)
		doItemSetAttribute(item, "happy", happy)
		doItemSetAttribute(item, "gender", gender)
		doItemSetAttribute(item, "fakedesc", description)
		doItemSetAttribute(item, "description", description)
		if poke == "Hitmonchan" or poke == "Shiny Hitmonchan" then    
		   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))  
           doItemSetAttribute(item, "task", 1)
           setPlayerStorageValue(cid, 854788, 'done')
        end
        -------------------------------------------                                  --alterado v1.9 \/ 
	if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then   
        doPlayerSendMailByName(getCreatureName(cid), item, 1)   
		doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a pokemon ("..poke..")!")
		doPlayerSendTextMessage(cid, 27, "Since you are already holding six pokemons, this pokeball has been sent to your depot.")     
    else
		doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a ("..poke..")!")
    end
    
    local storage = newpokedex[poke].stoCatch 
    sendBrokesMsg(cid, storage, typeee)             
    setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0;") --alterado v1.9 /\

	if #getCreatureSummons(cid) >= 1 then
		doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173) 
			if catchMakesPokemonHappier then
				setPlayerStorageValue(getCreatureSummons(cid)[1], 1008, getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) + 20)
			end
	else
		doSendMagicEffect(getThingPos(cid), 173) 
	end

doIncreaseStatistics(poke, true, true)

end

function doNotCapturePokemon(cid, poke, typeee)  

	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)   
doIncreaseStatistics(poke, true, false)
CW_Count(cid, poke, typeee)

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  

 

1 minuto atrás, Kal El disse:

posta teu catch system da lib tambem

failmsgs = {
"Sorry, you didn't catch that pokemon.",
"Sorry, your pokeball broke.",
"Sorry, the pokemon escaped.",
}

function doBrokesCount(cid, str, ball)   --alterado v1.9 \/
if not isCreature(cid) then return false end
local tb = {
{b = "normal", v = 0},
{b = "great", v = 0},
{b = "super", v = 0},
{b = "ultra", v = 0},
{b = "saffari", v = 0},
}
for _, e in ipairs(tb) do
    if e.b == ball then
       e.v = 1
       break
    end
end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
local t2 = ""

for n, g, s, u, s2 in string:gmatch(t) do
    t2 = "normal = "..(n+tb[1].v)..", great = "..(g+tb[2].v)..", super = "..(s+tb[3].v)..", ultra = "..(u+tb[4].v)..", saffari = "..(s2+tb[5].v)..";"    
end
return setPlayerStorageValue(cid, str, string:gsub(t, t2))
end

function sendBrokesMsg(cid, str, ball)
if not isCreature(cid) then return false end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
local msg = {}
table.insert(msg, "You have wasted: ")

for n, g, s, u in string:gmatch(t) do
    if tonumber(n) and tonumber(n) > 0 then 
       table.insert(msg, tostring(n).." Poke ball".. (tonumber(n) > 1 and "s" or "")) 
    end
    if tonumber(g) and tonumber(g) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(g).." Great ball".. (tonumber(g) > 1 and "s" or "")) 
    end
    if tonumber(s) and tonumber(s) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s).." Super ball".. (tonumber(s) > 1 and "s" or "")) 
    end
    if tonumber(u) and tonumber(u) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(u).." Ultra ball".. (tonumber(u) > 1 and "s" or "")) 
    end
    if tonumber(s2) and tonumber(s2) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s2).." Saffari ball".. (tonumber(s2) > 1 and "s" or "")) 
    end
end
if #msg == 1 then
   return true
end
if string.sub(msg[#msg], 1, 1) == "," then
   msg[#msg] = " and".. string.sub(msg[#msg], 2, #msg[#msg])
end
table.insert(msg, " trying to catch it.")
sendMsgToPlayer(cid, 27, table.concat(msg))
end                                                             --alterado v1.9 /\
--------------------------------------------------------------------------------

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 
	   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 chance = (1 * rate + 1) / totalChance
		chance = doMathDecimal(chance * 100)

	if rate >= totalChance then
		local status = {}
		      status.gender = getItemAttribute(corpse, "gender")
		      status.happy = 160

		doRemoveItem(corpse, 1)
		doSendMagicEffect(topos, catch)
		addEvent(doCapturePokemon, 3000, cid, name, newid, status, typeee)  
	return true
	end


	if totalChance <= 1 then totalChance = 1 end

	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.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, 3000, cid, name, newid, status, typeee) 
	else
		addEvent(doNotCapturePokemon, 3000, cid, name, typeee) 
		doSendMagicEffect(topos, fail)
	end
end

function doCapturePokemon(cid, poke, ballid, status, typeee)  

	if not isCreature(cid) then
	return true
	end
	
local list = getCatchList(cid)
    if not isInArray(list, poke) and not isShinyName(poke) then    
       doPlayerAddSoul(cid, 1)
    end

	doAddPokemonInOwnList(cid, poke)
	doAddPokemonInCatchList(cid, poke)
        CW_Count(cid, poke, typeee)
        CW_Caught(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 gender = status.gender
local happy = 200
                                                   --alterado v1.9  \/                  
        if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
           item = doCreateItemEx(ballid)
        else
            item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, ballid, 1) 
        end

		doItemSetAttribute(item, "poke", poke)
		doItemSetAttribute(item, "hp", 1)
		doItemSetAttribute(item, "happy", happy)
		doItemSetAttribute(item, "gender", gender)
		doItemSetAttribute(item, "fakedesc", description)
		doItemSetAttribute(item, "description", description)
		if poke == "Hitmonchan" or poke == "Shiny Hitmonchan" then    
		   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))  
           doItemSetAttribute(item, "task", 1)
           setPlayerStorageValue(cid, 854788, 'done')
        end
        -------------------------------------------                                  --alterado v1.9 \/ 
	if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then   
        doPlayerSendMailByName(getCreatureName(cid), item, 1)   
		doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a pokemon ("..poke..")!")
		doPlayerSendTextMessage(cid, 27, "Since you are already holding six pokemons, this pokeball has been sent to your depot.")     
    else
		doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a ("..poke..")!")
    end
    
    local storage = newpokedex[poke].stoCatch 
    sendBrokesMsg(cid, storage, typeee)             
    setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0;") --alterado v1.9 /\

	if #getCreatureSummons(cid) >= 1 then
		doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173) 
			if catchMakesPokemonHappier then
				setPlayerStorageValue(getCreatureSummons(cid)[1], 1008, getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) + 20)
			end
	else
		doSendMagicEffect(getThingPos(cid), 173) 
	end

doIncreaseStatistics(poke, true, true)

end

function doNotCapturePokemon(cid, poke, typeee)  

	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)   
doIncreaseStatistics(poke, true, false)
CW_Count(cid, poke, typeee)

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  

 

3 minutos atrás, Kal El disse:

posta teu catch system da lib tambem

failmsgs = {
"Sorry, you didn't catch that pokemon.",
"Sorry, your pokeball broke.",
"Sorry, the pokemon escaped.",
}

function doBrokesCount(cid, str, ball)   --alterado v1.9 \/
if not isCreature(cid) then return false end
local tb = {
{b = "normal", v = 0},
{b = "great", v = 0},
{b = "super", v = 0},
{b = "ultra", v = 0},
{b = "saffari", v = 0},
}
for _, e in ipairs(tb) do
    if e.b == ball then
       e.v = 1
       break
    end
end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
local t2 = ""

for n, g, s, u, s2 in string:gmatch(t) do
    t2 = "normal = "..(n+tb[1].v)..", great = "..(g+tb[2].v)..", super = "..(s+tb[3].v)..", ultra = "..(u+tb[4].v)..", saffari = "..(s2+tb[5].v)..";"    
end
return setPlayerStorageValue(cid, str, string:gsub(t, t2))
end

function sendBrokesMsg(cid, str, ball)
if not isCreature(cid) then return false end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
local msg = {}
table.insert(msg, "You have wasted: ")

for n, g, s, u in string:gmatch(t) do
    if tonumber(n) and tonumber(n) > 0 then 
       table.insert(msg, tostring(n).." Poke ball".. (tonumber(n) > 1 and "s" or "")) 
    end
    if tonumber(g) and tonumber(g) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(g).." Great ball".. (tonumber(g) > 1 and "s" or "")) 
    end
    if tonumber(s) and tonumber(s) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s).." Super ball".. (tonumber(s) > 1 and "s" or "")) 
    end
    if tonumber(u) and tonumber(u) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(u).." Ultra ball".. (tonumber(u) > 1 and "s" or "")) 
    end
    if tonumber(s2) and tonumber(s2) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s2).." Saffari ball".. (tonumber(s2) > 1 and "s" or "")) 
    end
end
if #msg == 1 then
   return true
end
if string.sub(msg[#msg], 1, 1) == "," then
   msg[#msg] = " and".. string.sub(msg[#msg], 2, #msg[#msg])
end
table.insert(msg, " trying to catch it.")
sendMsgToPlayer(cid, 27, table.concat(msg))
end                                                             --alterado v1.9 /\
--------------------------------------------------------------------------------

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 
	   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 chance = (1 * rate + 1) / totalChance
		chance = doMathDecimal(chance * 100)

	if rate >= totalChance then
		local status = {}
		      status.gender = getItemAttribute(corpse, "gender")
		      status.happy = 160

		doRemoveItem(corpse, 1)
		doSendMagicEffect(topos, catch)
		addEvent(doCapturePokemon, 3000, cid, name, newid, status, typeee)  
	return true
	end


	if totalChance <= 1 then totalChance = 1 end

	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.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, 3000, cid, name, newid, status, typeee) 
	else
		addEvent(doNotCapturePokemon, 3000, cid, name, typeee) 
		doSendMagicEffect(topos, fail)
	end
end

function doCapturePokemon(cid, poke, ballid, status, typeee)  

	if not isCreature(cid) then
	return true
	end
	
local list = getCatchList(cid)
    if not isInArray(list, poke) and not isShinyName(poke) then    
       doPlayerAddSoul(cid, 1)
    end

	doAddPokemonInOwnList(cid, poke)
	doAddPokemonInCatchList(cid, poke)
        CW_Count(cid, poke, typeee)
        CW_Caught(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 gender = status.gender
local happy = 200
                                                   --alterado v1.9  \/                  
        if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
           item = doCreateItemEx(ballid)
        else
            item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, ballid, 1) 
        end

		doItemSetAttribute(item, "poke", poke)
		doItemSetAttribute(item, "hp", 1)
		doItemSetAttribute(item, "happy", happy)
		doItemSetAttribute(item, "gender", gender)
		doItemSetAttribute(item, "fakedesc", description)
		doItemSetAttribute(item, "description", description)
		if poke == "Hitmonchan" or poke == "Shiny Hitmonchan" then    
		   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))  
           doItemSetAttribute(item, "task", 1)
           setPlayerStorageValue(cid, 854788, 'done')
        end
        -------------------------------------------                                  --alterado v1.9 \/ 
	if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then   
        doPlayerSendMailByName(getCreatureName(cid), item, 1)   
		doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a pokemon ("..poke..")!")
		doPlayerSendTextMessage(cid, 27, "Since you are already holding six pokemons, this pokeball has been sent to your depot.")     
    else
		doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a ("..poke..")!")
    end
    
    local storage = newpokedex[poke].stoCatch 
    sendBrokesMsg(cid, storage, typeee)             
    setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0;") --alterado v1.9 /\

	if #getCreatureSummons(cid) >= 1 then
		doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173) 
			if catchMakesPokemonHappier then
				setPlayerStorageValue(getCreatureSummons(cid)[1], 1008, getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) + 20)
			end
	else
		doSendMagicEffect(getThingPos(cid), 173) 
	end

doIncreaseStatistics(poke, true, true)

end

function doNotCapturePokemon(cid, poke, typeee)  

	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)   
doIncreaseStatistics(poke, true, false)
CW_Count(cid, poke, typeee)

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  

 

Link para o comentário
Compartilhar em outros sites

  • 0
1 minuto atrás, Kal El disse:

eu quis dizer somefunctions.. e em talkactions, manda o createpoke

Some Functions \/

function addPokeToPlayer(cid, pokemon, boost, gender, ball, unique)             --alterado v1.9 \/ peguem ele todo...
local genders = {
["male"] = 4,
["female"] = 3,
[1] = 4,
[0] = 3,
[4] = 4,
[3] = 3,
}
if not isCreature(cid) then return false end

local pokemon = doCorrectString(pokemon)
if not pokes[pokemon] then return false end

   local GENDER = (gender and genders[gender]) and genders[gender] or getRandomGenderByName(pokemon)
   local btype = (ball and pokeballs[ball]) and ball or isShinyName(pokemon) and "shinynormal" or "normal"
   local happy = 250

   if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
      item = doCreateItemEx(11826)
   else
      item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, 11826, 1)   
   end
   if not item then return false end

   doItemSetAttribute(item, "poke", pokemon)
   doItemSetAttribute(item, "hp", 1)
   doItemSetAttribute(item, "happy", happy)
   doItemSetAttribute(item, "gender", GENDER)
   doSetItemAttribute(item, "hands", 0)
   doItemSetAttribute(item, "description", "Contains a "..pokemon..".")
   doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") 
   if boost and tonumber(boost) and tonumber(boost) > 0 and tonumber(boost) <= 50 then
      doItemSetAttribute(item, "boost", boost)
   end
   if unique then
      doItemSetAttribute(item, "unique", getCreatureName(cid))
   end
                                                                             
   if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then
      doPlayerSendMailByName(getCreatureName(cid), item, 1)
      sendMsgToPlayer(cid, 27, "You are already holding six pokemons, so your new pokemon was sent to your depot.")
   end
   if (isShinyName(pokemon) or (boost and tonumber(boost) and tonumber(boost) >= 10)) and pokeballs["shiny"..btype] then
      doTransformItem(item, pokeballs["shiny"..btype].on)
   else
      doTransformItem(item, pokeballs[btype].on)
   end
return true
end 
---------------------------

function unLock(ball)                                                             
if not ball or ball <= 0 then return false end
if getItemAttribute(ball, "lock") and getItemAttribute(ball, "lock") > 0 then
   local vipTime = getItemAttribute(ball, "lock")
   local timeNow = os.time()
   local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60))
   if days <= 0 then
      doItemEraseAttribute(ball, "lock")    
      doItemEraseAttribute(ball, "unique")
      return true
   end
end
return false
end

function getGuildMembersOnline(GuildId)
local players = {}
for _, pid in pairs(getPlayersOnline()) do
    if getPlayerGuildId(pid) == tonumber(GuildId) then
       table.insert(players, pid)
    end
end                                                   --by Vodkart
return #players > 0 and players or false
end

function getGuildMembers(GuildId)
local players,query = {},db.getResult("SELECT `name` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " .. GuildId .. ");")
if (query:getID() ~= -1) then  
   repeat
         table.insert(players,query:getDataString("name"))
   until not query:next()                           --by Vodkart
   query:free()
end
return #players > 0 and players or false
end 
--/////////////////////////////////////////////////////////////////////////////////---
function sendMsgToPlayer(cid, tpw, msg)      --alterado v1.7 \/\/\/
if not isCreature(cid) or not tpw or not msg then return true end
return doPlayerSendTextMessage(cid, tpw, msg)
end

function getPlayerDesc(cid, thing, TV)
if (not isCreature(cid) or not isCreature(thing)) and not TV then return "" end

local pos = getThingPos(thing)
local ocup = youAre[getPlayerGroupId(thing)]
local rank = (getPlayerStorageValue(thing, 86228) <= 0) and "a Pokemon Trainer" or lookClans[getPlayerStorageValue(thing, 86228)][getPlayerStorageValue(thing, 862281)]
local name = thing == cid and "yourself" or getCreatureName(thing)     
local art = thing == cid and "You are" or (getPlayerSex(thing) == 0 and "She is" or "He is")
   
local str = {}
table.insert(str, "You see "..name..". "..art.." ")
if youAre[getPlayerGroupId(thing)] then
   table.insert(str, (ocup).." and "..rank.." from ".. getTownName(getPlayerTown(thing))..".")       
else
   table.insert(str, (rank).." from ".. getTownName(getPlayerTown(thing))..".")
end
if getPlayerGuildId(thing) > 0 then
   table.insert(str, " "..art.." "..getPlayerGuildRank(thing).." from the "..getPlayerGuildName(thing)..".")
end
if TV then
   table.insert(str, " "..art.." watching TV.")
end
table.insert(str, ((isPlayer(cid) and youAre[getPlayerGroupId(cid)]) and "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]" or "")) 

return table.concat(str) 
end
-------------------------------------------------------------------------------------------------   /\/\
function getLivePokeballs(cid, container, duel) 
    if not isCreature(cid) then return {} end     
	if not isContainer(container) then return {} end
	local items = {}
	---
	local ballSlot = getPlayerSlotItem(cid, 8)
    if ballSlot.uid ~= 0 then
       for a, b in pairs (pokeballs) do
           if ballSlot.itemid == b.on or ballSlot.itemid == b.use then
              if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(ballSlot.uid, "poke")].level + getPokeballBoost(ballSlot)) then
                 table.insert(items, ballSlot.uid)                                                                      --alterado v1.8
              elseif not duel then
                 table.insert(items, ballSlot.uid)
              end
           end
       end
    end
    ---     
	if isContainer(container) and getContainerSize(container) > 0 then      
		for slot=0, (getContainerSize(container)-1) do
			local item = getContainerItem(container, slot)
				if isContainer(item.uid) then
					local itemsbag = getPokeballsInContainer(item.uid)
					for i=0, #itemsbag do
						if not isInArray(items, itemsbag[i]) then
                           table.insert(items, itemsbag[i])
                        end
					end
				elseif isPokeball(item.itemid) then
				    for a, b in pairs (pokeballs) do
                        if item.itemid == b.on then
                           if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(item.uid, "poke")].level + getPokeballBoost(item)) then    
					          table.insert(items, item.uid)                                            --alterado v1.8
                           elseif not duel then
                              table.insert(items, item.uid)
                           end
	                    end
                    end
				end
		end
	end
return items
end

function addItemInFreeBag(container, item, num)
if not isContainer(container) or not item then return false end                                             
if not num or num <= 0 then num = 1 end                                            --alterado v1.6.1
if getContainerSize(container) < getContainerCap(container) then
   return doAddContainerItem(container, item, num)
else
   for slot = 0, (getContainerSize(container)-1) do
       local container2 = getContainerItem(container, slot)
       if isContainer(container2.uid) and getContainerSize(container2.uid) < getContainerCap(container2.uid) then
          return doAddContainerItem(container2.uid, item, num)
       end
   end
end
return false
end
------------------------------------------------------------------------------------------------------
function pokeHaveReflect(cid)
if not isCreature(cid) then return false end
local table = getTableMove(cid, "Reflect")
if table and table.name then     --alterado v1.6
   return true 
end
return false
end
------------------------------------------------------------------------------------------------------
function nextHorario(cid)
    horarioAtual = os.date("%X")
    horario = string.explode(horarioAtual, ":")
    
    for i = 1, #horas do
        horarioComparacao = horas[i]
        horarioComp = string.explode(horarioComparacao, ":")
        ---------------
        if tonumber(horarioComp[1]) > tonumber(horario[1]) then
           return horarioComparacao                                
        elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then
           return horarioComparacao
        end
    end 
    return horas[1]                                  
end                                                               

function getTimeDiff(timeDiff)
local dateFormat = {
{'hour', timeDiff / 60 / 60}, --6%
{'min', timeDiff / 60 % 60},
}
local out = {}                                   
for k, t in ipairs(dateFormat) do
    local v = math.floor(t[2])
    if(v > -1) then
         table.insert(out, (k < #dateFormat and '' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s"))
    end
end
if tonumber(dateFormat[1][2]) == 0 and tonumber(dateFormat[2][2]) == 0 then
   return "seconds"
end
return table.concat(out)
end

function getTimeDiff2(timeDiff)
local dateFormat = {
{'hour', timeDiff / 60 / 60}, --6%
{'min', timeDiff / 60 % 60},
{'sec', timeDiff % 60},
}
local out = {}                                  
for k, t in ipairs(dateFormat) do
    local v = math.floor(t[2])
    if(v > 0) then
         table.insert(out, (k < #dateFormat and ' ' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s"))
    end
end
return table.concat(out)
end 

function showTimeDiff(timeComp)
local b = string.explode(os.date("%X"), ":")
local c = string.explode(timeComp, ":")
    ---
    local d, m, y = os.date("%d"), os.date("%m"), os.date("%Y")
    local hAtual, mAtual = tonumber(b[1]), tonumber(b[2])
    local hComp, mComp = tonumber(c[1]), tonumber(c[2])
    ---
    local t = os.time{year= y, month= m, day= d, hour= hAtual, min= mAtual}
    local t1 = os.time{year= y, month= m, day= d, hour= hComp, min= mComp}
    ---                                                                       
    comparacao = t1-t
    if hComp < hAtual then
       v = os.time{year= y, month= m, day= d, hour= 24, min= 0}
       v2 = os.time{year= y, month= m, day= d, hour= 0, min= 0}
       comparacao = (v-t)+(t1-v2)
    end
return getTimeDiff(comparacao)
end
-------------------------------------------------------------------------
function cleanCMcds(item)
if item ~= 0 then
   for c = 1, 15 do              --alterado v1.5
      local str = "cm_move"..c
      setCD(item, str, 0)
   end
end
end

function ehNPC(cid)   --alterado v1.9
return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid)
end

function ehMonstro(cid)   --alterado v1.9
return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cid
end                                                       --alterado v1.9.1 /\

function doAppear(cid)    --Faz um poke q tava invisivel voltar a ser visivel...
if not isCreature(cid) then return true end
	doRemoveCondition(cid, CONDITION_INVISIBLE)
    doRemoveCondition(cid, CONDITION_OUTFIT)
	doCreatureSetHideHealth(cid, false)
	if getCreatureName(cid) == "Ditto" and pokes[getPlayerStorageValue(cid, 1010)] and getPlayerStorageValue(cid, 1010) ~= "Ditto" then
       if isSummon(cid) then
          local item = getPlayerSlotItem(getCreatureMaster(cid), 8)
          doSetCreatureOutfit(cid, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1)   --alterado v1.6.1
       end
    end 
end

function doDisapear(cid)   --Faz um pokemon ficar invisivel
if not isCreature(cid) then return true end
doCreatureAddCondition(cid, permanentinvisible)
doCreatureSetHideHealth(cid, true)
doSetCreatureOutfit(cid, {lookType = 2}, -1)
end

function hasTile(pos)    --Verifica se tem TILE na pos
pos.stackpos = 0
if getTileThingByPos(pos).itemid >= 1 then
   return true
end
return false
end

function getThingFromPosWithProtect(pos)  --Pega uma creatura numa posiçao com proteçoes
if hasTile(pos) then
   if isCreature(getRecorderCreature(pos)) then
      return getRecorderCreature(pos)
   else
      pos.stackpos = 253
      pid = getThingfromPos(pos).uid
   end
else
   pid = getThingfromPos({x=1,y=1,z=10,stackpos=253}).uid
end
return pid
end

function getTileThingWithProtect(pos)    --Pega um TILE com proteçoes
if hasTile(pos) then
pos.stackpos = 0
   pid = getTileThingByPos(pos)
else
   pid = getTileThingByPos({x=1,y=1,z=10,stackpos=0})
end
return pid
end

function canAttackOther(cid, pid)         --Function q verifica se um poke/player pode atacar outro poke/player

if not isCreature(cid) or not isCreature(pid) then return "Cant" end

local master1 = isSummon(cid) and getCreatureMaster(cid) or cid
local master2 = isSummon(pid) and getCreatureMaster(pid) or pid
   
   ----             
   if getPlayerStorageValue(master1, 6598754) >= 5 and getPlayerStorageValue(master2, 6598754) >= 5 then
      if getPlayerStorageValue(master1, 6598754) ~= getPlayerStorageValue(master2, 6598754) then
         if isDuelingAgainst(master1, master2) then   --alterado v1.8
            if isSummon(cid) and isPlayer(pid) then
               return "Cant"
            else
               return "Can"
            end
         end
      end
   end
   ----              pvp system
   if getPlayerStorageValue(master1, 6598754) >= 1 and getPlayerStorageValue(master2, 6598755) >= 1 then
      return "Can" 
   end
   if getPlayerStorageValue(master1, 6598755) >= 1 and getPlayerStorageValue(master2, 6598754) >= 1 then  ---estar em times diferentes
      return "Can"
   end
   ----
   if ehMonstro(cid) and ehMonstro(pid) then 
      return "Can"
   end

return "Cant"
end
   
      
function stopNow(cid, time)   
if not isCreature(cid) or not tonumber(time) or isSleeping(cid) then return true end
                                                        --alterado v1.9.1 \/
local function podeMover(cid)                         
if isPlayer(cid) then 
   mayNotMove(cid, false) 
elseif isCreature(cid) then 
   doRegainSpeed(cid) 
end
end

if isPlayer(cid) then mayNotMove(cid, true) else doChangeSpeed(cid, -getCreatureSpeed(cid)) end
addEvent(podeMover, time, cid)
end

function doReduceStatus(cid, off, def, agi)   --reduz os status
if not isCreature(cid) then return true end
local A = getOffense(cid)
local B = getDefense(cid)
local C = getSpeed(cid)

if off > 0 then
   setPlayerStorageValue(cid, 1001, A - off)
end
if def > 0 then
   setPlayerStorageValue(cid, 1002, B - def)
end
if agi > 0 then
   setPlayerStorageValue(cid, 1003, C - agi)
   if getCreatureSpeed(cid) ~= 0 then
      doRegainSpeed(cid)
   end                                              --alterado v1.5  functions arrumadas...
end
end

function doRaiseStatus(cid, off, def, agi, time)  
if not isCreature(cid) then return true end
local A = getOffense(cid)
local B = getDefense(cid)
local C = getSpeed(cid)

if off > 0 then
   setPlayerStorageValue(cid, 1001, A * off)
end
if def > 0 then
   setPlayerStorageValue(cid, 1002, B * def)
end
if agi > 0 then
   setPlayerStorageValue(cid, 1003, C + agi)
   if getCreatureSpeed(cid) ~= 0 then
      doRegainSpeed(cid)
   end
end

local D = getOffense(cid)
local E = getDefense(cid)
local F = getSpeed(cid)
---------------------------
local G = D - A
local H = E - B
local I = F - C

addEvent(doReduceStatus, time*1000, cid, G, H, I)
end


function BackTeam(cid)          
  if isCreature(cid) then
     local summon = getCreatureSummons(cid)   --alterado v1.6
     for i = 2, #summon do
         doSendMagicEffect(getThingPos(summon[i]), 211)
         doRemoveCreature(summon[i])
     end
     setPlayerStorageValue(cid, 637501, -1)
  end  
end
    
function choose(...) -- by mock
    local arg = {...}
    return arg[math.random(1,#arg)]
end

function AddPremium(cid, days)
local function removerPlayer(cid)
if isCreature(cid) then
   doRemoveCreature(cid)
end
end

db.executeQuery("UPDATE `accounts` SET `premdays` = '"..days.."' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
doPlayerSendTextMessage(cid,25,"Você será kickado em 5 segundos.")    
addEvent(removerPlayer, 5*1000, cid)     
return TRUE
end

function isShiny(cid) 
return isCreature(cid) and string.find(getCreatureName(cid), "Shiny")  --alterado v1.9
end

function isShinyName(name)        
return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v1.9
end

function doConvertTypeToStone(type, string)
local t = {
["fly"] = {heart, "heart"},
["flying"] = {heart, "heart"},
["normal"] = {heart, "heart"},
["fire"] = {fire, "fire"},
["grass"] = {leaf, "leaf"},
["leaf"] = {leaf, "leaf"},
["water"] = {water, "water"},
["poison"] = {venom, "venom"},
["venom"] = {venom, "venom"},
["electric"] = {thunder, "thunder"},
["thunder"] = {thunder, "thunder"},
["rock"] = {rock, "rock"},
["fight"] = {punch, "punch"},
["fighting"] = {punch, "punch"},
["bug"] = {coccon, "coccon"},
["dragon"] = {crystal, "crystal"},
["dark"] = {dark, "dark"},
["ghost"] = {dark, "dark"},
["ground"] = {earth, "earth"},
["earth"] = {earth, "earth"},
["psychic"] = {enigma, "enigma"},
["steel"] = {metal, "metal"},
["metal"] = {metal, "metal"},
["ice"] = {ice, "ice"},
["boost"] = {boostStone, "boost"},  --alterado v1.9
}

if string then
return t[type][2]
else
return t[type][1]
end
end

function doConvertStoneIdToString(stoneID)
local t = {
[11453] = "Heart Stone",
[11441] = "Leaf Stone",
[11442] = "Water Stone",
[11443] = "Venom Stone",
[11444] = "Thunder Stone",
[11445] = "Rock Stone",
[11446] = "Punch Stone", 
[11447] = "Fire Stone",               --alterado v1.6
[11448] = "Cocoon Stone", 
[11449] = "Crystal Stone",
[11450] = "Darkess Stone", 
[11451] = "Earth Stone",
[11452] = "Enigma Stone",
[11454] = "Ice Stone", 
[12244] = "King's Rock",
[12232] = "Metal Stone",
[12242] = "Sun Stone",
[12401] = "Shiny Fire Stone",
[12402] = "Shiny Water Stone",
[12403] = "Shiny Leaf Stone",
[12404] = "Shiny Heart Stone",
[12405] = "Shiny Enigma Stone",
[12406] = "Shiny Rock Stone",
[12407] = "Shiny Venom Stone", 
[12408] = "Shiny Ice Stone",
[12409] = "Shiny Thunder Stone",
[12410] = "Shiny Crystal Stone",
[12411] = "Shiny Cocoon Stone",
[12412] = "Shiny Darkness Stone",
[12413] = "Shiny Punch Stone",
[12414] = "Shiny Earth Stone",
[boostStone] = "Boost Stone",  --alterado v1.9
}
if t[stoneID] then
return t[stoneID]
else
return ""
end
end

function isStone(id)
if id >= leaf and id <= ice then
return true
end
if id == boostStone then  --alterado v1.9
return true
end
if id == 12232 or id == 12242 or id == 12244 or id == 12245 then
return true                                 
end
if (id >= sfire and id <= searth) or id == 12417 or id == 12419 then
return true 
end
return false
end

function isWater(id)
return tonumber(id) and id >= 4820 and id <= 4825 --alterado v1.9
end

function getTopCorpse(position)
local pos = position
for n = 1, 255 do
    pos.stackpos = n
    local item = getTileThingByPos(pos)
    if item.itemid >= 2 and (string.find(getItemNameById(item.itemid), "fainted ") or string.find(getItemNameById(item.itemid), "defeated ")) then
       return getTileThingByPos(pos)
    end
end
return null
end

bpslot = CONST_SLOT_BACKPACK

function hasPokemon(cid)
	if not isCreature(cid) then return false end
	if getCreatureMana(cid) <= 0 then return false end
	if #getCreatureSummons(cid) >= 1 then return true end
	local item = getPlayerSlotItem(cid, CONST_SLOT_FEET)
	local bp = getPlayerSlotItem(cid, bpslot)
	for a, b in pairs (pokeballs) do
        if item.itemid == b.on or item.itemid == b.use then
        return true                              --alterado v1.4
        end
        if #getItemsInContainerById(bp.uid, b.on) >= 1 then
        return true
        end
	end
return false
end

function isNpcSummon(cid)
return isNpc(getCreatureMaster(cid))
end

function getPokemonHappinessDescription(cid)
	if not isCreature(cid) then return true end
	local str = {}
	if getPokemonGender(cid) == SEX_MALE then
		table.insert(str, "He")
	elseif getPokemonGender(cid) == SEX_FEMALE then
		table.insert(str, "She")
	else
		table.insert(str, "It")
	end
	local h = getPlayerStorageValue(cid, 1008)
	if h >= tonumber(getConfigValue('PokemonStageVeryHappy')) then
		table.insert(str, " is very happy with you!")
	elseif h >= tonumber(getConfigValue('PokemonStageHappy')) then
		table.insert(str, " is happy.")
	elseif h >= tonumber(getConfigValue('PokemonStageOK')) then
		table.insert(str, " is unhappy.")
	elseif h >= tonumber(getConfigValue('PokemonStageSad')) then
		table.insert(str, " is sad.")
	elseif h >= tonumber(getConfigValue('PokemonStageMad')) then
		table.insert(str, " is mad.")
	else
		table.insert(str, " is very mad at you!")
	end
return table.concat(str)
end

function doSetItemAttribute(item, key, value)
doItemSetAttribute(item, key, value)
end

function deTransform(cid, check)
	if not isCreature(cid) then return true end

	local m = getCreatureMaster(cid)
	local p = getPlayerSlotItem(m, 8)

	if getItemAttribute(p.uid, "transTurn") ~= check then return true end

	setPlayerStorageValue(cid, 1010, getCreatureName(cid) == "Ditto" and "Ditto" or "Shiny Ditto")        --edited
	doRemoveCondition(cid, CONDITION_OUTFIT)
	doSendMagicEffect(getThingPos(cid), 184)
	doCreatureSay(cid, "DITTO!", TALKTYPE_MONSTER)
	doItemSetAttribute(p.uid, "transBegin", 0)
	doItemSetAttribute(p.uid, "transLeft", 0)
	doItemEraseAttribute(p.uid, "transName")
	adjustStatus(cid, p.uid, true, true, true)
end

function isTransformed(cid)
return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010))  --alterado v1.9
end

function doSendFlareEffect(pos)
	local random = {28, 29, 79}
	doSendMagicEffect(pos, random[math.random(1, 3)])
end

function isDay()
	local a = getWorldTime()
	if a >= 360 and a < 1080 then
	return true
	end
return false
end

function doPlayerSendTextWindow(cid, p1, p2)
	if not isCreature(cid) then return true end
	local item = 460
	local text = ""
	if type(p1) == "string" then
		doShowTextDialog(cid, item, p1)
	else
		doShowTextDialog(cid, p1, p2)
	end
end

function getClockString(tw)
	local a = getWorldTime()
	local b = a / 60
	local hours = math.floor(b)
	local minut = a - (60 * hours)

	if not tw then
		if hours < 10 then
			hours = "0"..hours..""
		end
		if minut < 10 then
			minut = "0"..minut..""
		end
	return hours..":"..minut
	else
		local sm = "a.m"
		if hours >= 12 then
			hours = hours - 12
			sm = "p.m"
		end
		if hours < 10 then
			hours = "0"..hours..""
		end
		if minut < 10 then
			minut = "0"..minut..""
		end
	return hours..":"..minut.." "..sm
	end
end

function doCorrectPokemonName(poke)
return doCorrectString(poke)
end

function doCorrectString(str)
local name = str:explode(" ")  --alterado v1.9
local final = {}
for _, s in ipairs(name) do
    table.insert(final, s:sub(1, 1):upper()..s:sub(2, #s):lower())
end
return table.concat(final, (name[2] and " " or ""))
end   

function getHappinessRate(cid)
	if not isCreature(cid) then return 1 end
	local a = getPlayerStorageValue(cid, 1008)
		if a == -1 then return 1 end
	if a >= getConfigValue('PokemonStageVeryHappy') then
		return happinessRate[5].rate
	elseif a >= getConfigValue('PokemonStageHappy') then
		return happinessRate[4].rate
	elseif a >= getConfigValue('PokemonStageOK') then
		return happinessRate[3].rate
	elseif a >= getConfigValue('PokemonStageSad') then
		return happinessRate[2].rate
	else
		return happinessRate[1].rate
	end
return 1
end

function doBodyPush(cid, target, go, pos)
	if not isCreature(cid) or not isCreature(target) then
		doRegainSpeed(cid)
		doRegainSpeed(target)
	return true
	end
		if go then
			local a = getThingPos(cid)
			doChangeSpeed(cid, -getCreatureSpeed(cid))
				if not isPlayer(target) then
					doChangeSpeed(target, -getCreatureSpeed(target))
				end
			doChangeSpeed(cid, 800)
			doTeleportThing(cid, getThingPos(target))
			doChangeSpeed(cid, -800)
			addEvent(doBodyPush, 350, cid, target, false, a)
		else
			doChangeSpeed(cid, 800)
			doTeleportThing(cid, pos)
			doRegainSpeed(cid)
			doRegainSpeed(target)
		end
end

function doReturnPokemon(cid, pokemon, pokeball, effect, hideeffects, blockevo)

    --////////////////////////////////////////////////////////////////////////////////////////--
	checkDuel(cid)                                                                      --alterado v1.6 duel system
    --////////////////////////////////////////////////////////////////////////////////////////--
    if getPlayerStorageValue(cid, 52480) >= 1 and getPlayerStorageValue(cid, 52484) ~= 10 then
       return sendMsgToPlayer(cid, 27, "You can't do that while the duel don't begins!")        --alterado v1.8
    end
    --////////////////////////////////////////////////////////////////////////////////////////--
    
    if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then     --alterado v1.6
       if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then  
          BackTeam(cid)       
       end
    end
    -----------------
	local edit = true

	if not pokeball then
		pokeball = getPlayerSlotItem(cid, 8)
	end

	if blockevo then
		edit = false
		doPlayerSendCancel(cid, "Your pokemon couldn't evolve due to server mistakes, please wait until we fix the problem.")
	end

	local happy = getPlayerStorageValue(pokemon, 1008)
	local hunger = getPlayerStorageValue(pokemon, 1009)
	local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon))

	if edit then
		doItemSetAttribute(pokeball.uid, "happy", happy)
		doItemSetAttribute(pokeball.uid, "hunger", hunger)
		doItemSetAttribute(pokeball.uid, "hp", pokelife)
	end

	if getCreatureName(pokemon) == "Ditto" then
		if isTransformed(pokemon) then
			local left = getItemAttribute(pokeball.uid, "transLeft") - (os.clock() - getItemAttribute(pokeball.uid, "transBegin"))
			doItemSetAttribute(pokeball.uid, "transLeft", left)
		end
	end

	if hideeffects then
		doRemoveCreature(pokemon)
	return true
	end

	local pokename = getPokeName(pokemon)

	local mbk = gobackmsgs[math.random(1, #gobackmsgs)].back:gsub("doka", pokename)

	if getCreatureCondition(cid, CONDITION_INFIGHT) then
		if isCreature(getCreatureTarget(cid)) then
			doItemSetAttribute(pokeball.uid, "happy", happy - 5)
		else
			doItemSetAttribute(pokeball.uid, "happy", happy - 2)
		end
	end

	doTransformItem(pokeball.uid, pokeball.itemid-1)
	doCreatureSay(cid, mbk, TALKTYPE_SAY)

	doSendMagicEffect(getCreaturePosition(pokemon), effect)

	doRemoveCreature(pokemon)

    unLock(pokeball.uid) --alterado v1.8
    
    if useOTClient then
       doPlayerSendCancel(cid, '12//,hide')  --alterado v1.7
    end
    
	if useKpdoDlls then
		doUpdateMoves(cid)
	end

end

local EFFECTS = {
	--[OutfitID] = {Effect}
	["Magmar"] = 35,                --alterado v1.5
	["Jynx"] = 17,   
	["Shiny Jynx"] = 17,    
	["Piloswine"] = 205,  --alterado v1.8
    ["Swinub"] = 205, 
}

function doGoPokemon(cid, item)

	if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then
	return true
	end
---------------------------------------------------------------
local ballName = getItemAttribute(item.uid, "poke")

   btype = getPokeballType(item.itemid)                   

	local effect = pokeballs[btype].effect
		if not effect then
			effect = 21
		end
-----------------------------------------------------------------
	if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then
		doPlayerSendCancel(cid, "You must put your pokeball in the correct place!")
	return TRUE
	end

	local thishp = getItemAttribute(item.uid, "hp")

	if thishp <= 0 then
		if isInArray(pokeballs[btype].all, item.itemid) then
			doTransformItem(item.uid, pokeballs[btype].off)
			doItemSetAttribute(item.uid, "hp", 0)
			doPlayerSendCancel(cid, "This pokemon is fainted.")
		    return true
		end
	end

	local pokemon = getItemAttribute(item.uid, "poke")

	if not pokes[pokemon] then
	return true
	end

----------------------- Sistema de nao poder carregar mais que 3 pokes lvl baixo e + q 1 poke de lvl medio/alto ---------------------------------
if not isInArray({5, 6}, getPlayerGroupId(cid)) then
   local balls = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid)      --alterado v1.9 \/
   local low = {}
   local lowPokes = {"Rattata", "Caterpie", "Weedle", "Oddish", "Pidgey", "Paras", "Poliwag", "Bellsprout", "Magikarp", "Hoppip", "Sunkern"}
   if #balls >= 1 then
      for _, uid in ipairs(balls) do
          local nome = getItemAttribute(uid, "poke")
          if not isInArray(lowPokes, pokemon) and nome == pokemon then
             return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry two pokemons equals!")
          else
             if nome == pokemon then
                table.insert(low, nome)
             end
          end
      end
   end
if #low >= 3 then
   return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry more than three pokemons equals of low level!")
end   
end
---------------------------------------------------------------------------------------------------------------------------------------------------

	local x = pokes[pokemon]
	local boosts = getItemAttribute(item.uid, "boost") or 0

	if getPlayerLevel(cid) < (x.level + boosts) then   --alterado v1.8 \/
	doPlayerSendCancel(cid, "You need level "..(x.level + boosts).." to use this pokemon.")
	return true
	end
	
	--------------------------------------------------------------------------------------
	shinysClan = {
	["Shiny Fearow"] = {4, "Wingeon"},
	["Shiny Flareon"] = {1, "Volcanic"},
	["Shiny Vaporeon"] = {2, "Seavel"}, 
	["Shiny Jolteon"] = {9, "Raibolt"},
	["Shiny Hypno"] = {7, "Psycraft"},
	["Shiny Golem"] = {3, "Orebound"},         
	["Shiny Vileplume"] = {8, "Naturia"},
	["Shiny Nidoking"] = {5, "Malefic"},
	["Shiny Hitmontop"] = {6, "Gardestrike"},   
	}
	
	if shinysClan[pokemon] and (getPlayerGroupId(cid) < 4 or getPlayerGroupId(cid) > 6) then --alterado v1.9
	   if getPlayerStorageValue(cid, 86228) ~= shinysClan[pokemon][1] then
	      doPlayerSendCancel(cid, "You need be a member of the clan "..shinysClan[pokemon][2].." to use this pokemon!")
	      return true   
       elseif getPlayerStorageValue(cid, 862281) ~= 5 then
          doPlayerSendCancel(cid, "You need be atleast rank 5 to use this pokemon!")
	      return true
       end
    end
    --------------------------------------------------------------------------------------

	doSummonMonster(cid, pokemon)

	local pk = getCreatureSummons(cid)[1]
	if not isCreature(pk) then return true end
	
	------------------------passiva hitmonchan------------------------------
	if isSummon(pk) then                                                  --alterado v1.8 \/
       if pokemon == "Shiny Hitmonchan" or pokemon == "Hitmonchan" then
          if not getItemAttribute(item.uid, "hands") then
             doSetItemAttribute(item.uid, "hands", 0)
          end
          local hands = getItemAttribute(item.uid, "hands")
          doSetCreatureOutfit(pk, {lookType = hitmonchans[pokemon][hands].out}, -1)
       end
    end
	-------------------------------------------------------------------------
    ---------movement magmar, jynx-------------
    if EFFECTS[getCreatureName(pk)] then     
       markPosEff(pk, getThingPos(pk))
       sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk))   
    end
    --------------------------------------------------------------------------  

	if getCreatureName(pk) == "Ditto" then

		local left = getItemAttribute(item.uid, "transLeft")
		local name = getItemAttribute(item.uid, "transName")

		if left and left > 0 then
			setPlayerStorageValue(pk, 1010, name)
			doSetCreatureOutfit(pk, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1)
			addEvent(deTransform, left * 1000, pk, getItemAttribute(item.uid, "transTurn"))
			doItemSetAttribute(item.uid, "transBegin", os.clock())
		else
			setPlayerStorageValue(pk, 1010, "Ditto")
		end
	end

	if isGhostPokemon(pk) then doTeleportThing(pk, getPosByDir(getThingPos(cid), math.random(0, 7)), false) end

	doCreatureSetLookDir(pk, 2)

	adjustStatus(pk, item.uid, true, true, true)
	doAddPokemonInOwnList(cid, pokemon)

	doTransformItem(item.uid, item.itemid+1)

	local pokename = getPokeName(pk) --alterado v1.7

	local mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", pokename)
	doCreatureSay(cid, mgo, TALKTYPE_SAY)

	doSendMagicEffect(getCreaturePosition(pk), effect)

    unLock(item.uid) --alterado v1.8

	if useKpdoDlls then
		doUpdateMoves(cid)
	end
end

function doRegainSpeed(cid)              --alterado v1.9 \/
if not isCreature(cid) then return true end

   local speed = PlayerSpeed
   if isMonster(cid) then
      speed = getSpeed(cid)
   elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then
      speed = 200*getPlayerGroupId(cid) 
   end
   
   doChangeSpeed(cid, -getCreatureSpeed(cid))
   if getCreatureCondition(cid, CONDITION_PARALYZE) == true then
      doRemoveCondition(cid, CONDITION_PARALYZE)
      addEvent(doAddCondition, 10, cid, paralizeArea2)             
   end
    
doChangeSpeed(cid, speed)
return speed
end

function isPosEqualPos(pos1, pos2, checkstackpos)
	if pos1.x ~= pos2.x or pos1.y ~= pos2.y and pos1.z ~= pos2.z then
	return false
	end
	if checkstackpos and pos1.stackpos and pos2.stackpos and pos1.stackpos ~= pos2.stackpos then
	return false
	end
return true
end

function getRandomGenderByName(name)
local rate = newpokedex[name]
	if not rate then return 0 end
	rate = rate.gender
	if rate == 0 then
		gender = 3
	elseif rate == 1000 then
		gender = 4
	elseif rate == -1 then
		gender = 0
	elseif math.random(1, 1000) <= rate then
		gender = 4
	else
		gender = 3
	end
return gender
end

function getRecorderPlayer(pos, cid)
	local ret = 0
	if cid and isPosEqual(getThingPos(cid), pos) then   --alterado v1.9
	   return cid
	end
	local s = {}
	s.x = pos.x
	s.y = pos.y
	s.z = pos.z
		for a = 0, 255 do
			s.stackpos = a
			local b = getTileThingByPos(s).uid
			if b > 1 and isPlayer(b) and getCreatureOutfit(b).lookType ~= 814 then
				ret = b
			end
		end
return ret
end

function getRecorderCreature(pos, cid)
	local ret = 0
	if cid and isPosEqual(getThingPos(cid), pos) then   --alterado v1.9
	   return cid
	end
	local s = {}
	s.x = pos.x
	s.y = pos.y
	s.z = pos.z
		for a = 0, 255 do
			s.stackpos = a
			local b = getTileThingByPos(s).uid
			if b > 1 and isCreature(b) and getCreatureOutfit(b).lookType ~= 814 then
				ret = b
			end
		end
return ret
end

function doCreatureSetOutfit(cid, outfit, time)
	doSetCreatureOutfit(cid, outfit, time)
end

function doMagicalFlower(cid, away)
	if not isCreature(cid) then return true end
	for x = -3, 3 do
		for y = -3, 3 do
		local a = getThingPos(cid)
		a.x = a.x + x
		a.y = a.y + y
			if away then
				doSendDistanceShoot(a, getThingPos(cid), 21)
			else
				doSendDistanceShoot(getThingPos(cid), a, 21)
			end
		end
	end
end		

function isItemPokeball(item)         --alterado v1.9 \/
if not item then return false end
for a, b in pairs (pokeballs) do
	if isInArray(b.all, item) then return true end
end
return false
end

function isPokeball(item)
return isItemPokeball(item)
end                                    --/\

function getPokeballType(id)
	for a, b in pairs (pokeballs) do
		if isInArray(b.all, id) then
			return a
		end
	end
return "none"
end

randomdiagonaldir = {
[NORTHEAST] = {NORTH, EAST},
[SOUTHEAST] = {SOUTH, EAST},
[NORTHWEST] = {NORTH, WEST},
[SOUTHWEST] = {SOUTH, WEST}}

function doFaceOpposite(cid)
local a = getCreatureLookDir(cid)
local d = {
[NORTH] = SOUTH,
[SOUTH] = NORTH,
[EAST] = WEST,
[WEST] = EAST,
[NORTHEAST] = SOUTHWEST,
[NORTHWEST] = SOUTHEAST,
[SOUTHEAST] = NORTHWEST,
[SOUTHWEST] = NORTHEAST}
doCreatureSetLookDir(cid, d[a])
end

function doFaceRandom(cid)
local a = getCreatureLookDir(cid)
local d = {
[NORTH] = {SOUTH, WEST, EAST},
[SOUTH] = {NORTH, WEST, EAST},
[WEST] = {SOUTH, NORTH, EAST},
[EAST] = {SOUTH, WEST, NORTH}}
doChangeSpeed(cid, 1)
doCreatureSetLookDir(cid, d[a][math.random(1, 3)])
doChangeSpeed(cid, -1)
end

function getFaceOpposite(dir)
local d = {
[NORTH] = SOUTH,
[SOUTH] = NORTH,
[EAST] = WEST,
[WEST] = EAST,
[NORTHEAST] = SOUTHWEST,
[NORTHWEST] = SOUTHEAST,
[SOUTHEAST] = NORTHWEST,
[SOUTHWEST] = NORTHEAST}
return d[dir]
end

function getResistance(cid, combat)
	if isPlayer(cid) then return false end
local poketype1 = pokes[getCreatureName(cid)].type
local poketype2 = pokes[getCreatureName(cid)].type2
local multiplier = 1
	if effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype1) then
		multiplier = multiplier * 2
	end
	if poketype2 and effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype2) then
		multiplier = multiplier * 2
	end
	if effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype1) then
		multiplier = multiplier * 0.5
	end
	if poketype2 and effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype2) then
		multiplier = multiplier * 0.5
	end
	if effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype1) then
		multiplier = multiplier * 0
	end
	if poketype2 and effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype2) then
		multiplier = multiplier * 0
	end

	if multiplier == 0.25 then
		multiplier = 0.5
	elseif multiplier == 4 then
		multiplier = 2
	end

return multiplier
end

function getCreatureDirectionToTarget(cid, target, ranged)
	if not isCreature(cid) then return true end
	if not isCreature(target) then return getCreatureLookDir(cid) end
	local dirs = {
	[NORTHEAST] = {NORTH, EAST},
	[SOUTHEAST] = {SOUTH, EAST},
	[NORTHWEST] = {NORTH, WEST},
	[SOUTHWEST] = {SOUTH, WEST}}
	local x = getDirectionTo(getThingPos(cid), getThingPos(target), false)
		if x <= 3 then return x
		else
			local xdistance = math.abs(getThingPos(cid).x - getThingPos(target).x)
			local ydistance = math.abs(getThingPos(cid).y - getThingPos(target).y)
				if xdistance > ydistance then
					return dirs[x][2]
				elseif ydistance > xdistance then
					return dirs[x][1]
				elseif isInArray(dirs[x], getCreatureLookDir(cid)) then
					return getCreatureLookDir(cid)
				else
					return dirs[x][math.random(1, 2)]
				end
		end
end

function getSomeoneDescription(cid)
	if isPlayer(cid) then return getPlayerNameDescription(cid) end
return getMonsterInfo(getCreatureName(cid)).description
end
	

function isGhostPokemon(cid)
	if not isCreature(cid) then return false end
	local ghosts = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Shiny Abra"}
return isInArray(ghosts, getCreatureName(cid))
end

function updateGhostWalk(cid)
	if not isCreature(cid) then return false end
	local pos = getThingPos(cid)
	pos.x = pos.x + 1
	pos.y = pos.y + 1
	local ret = getThingPos(cid)
	doTeleportThing(cid, pos, false)
	doTeleportThing(cid, ret, false)
return true
end

function doRemoveElementFromTable(t, e)
	local ret = {}
	for a = 1, #t do
		if t[a] ~= e then
		table.insert(ret, t[a])
		end
	end
return ret
end

function doFaceCreature(sid, pos)
if not isCreature(sid) then return true end
	if getThingPos(sid).x == pos.x and getThingPos(sid).y == pos.y then return true end
	local ret = 0

	local ld = getCreatureLookDir(sid)
	local dir = getDirectionTo(getThingPos(sid), pos)
	local al = {
	[NORTHEAST] = {NORTH, EAST},
	[NORTHWEST] = {NORTH, WEST},
	[SOUTHEAST] = {SOUTH, EAST},
	[SOUTHWEST] = {SOUTH, WEST}}

	if dir >= 4 and isInArray(al[dir], ld) then return true end

	doChangeSpeed(sid, 1)
		if dir == 4 then
			ret = math.random(2, 3)
		elseif dir == 5 then
			ret = math.random(1, 2)
		elseif dir == 6 then
			local dirs = {0, 3}
			ret = dirs[math.random(1, 2)]
		elseif dir == 7 then
			ret = math.random(0, 1)
		else
			ret = getDirectionTo(getThingPos(sid), pos)
		end
doCreatureSetLookDir(sid, ret)
doChangeSpeed(sid, -1)
return true
end

function doCreatureAddCondition(cid, condition)
if not isCreature(cid) then return true end
doAddCondition(cid, condition)
end

function doCreatureRemoveCondition(cid, condition)
if not isCreature(cid) then return true end
doRemoveCondition(cid, condition)
end

function setCD(item, tipo, tempo)

	if not tempo or not tonumber(tempo) then
		doItemEraseAttribute(item, tipo)
	return true
	end

	doItemSetAttribute(item, tipo, "cd:"..(tempo + os.time()).."")
return tempo + os.time()
end

function getCD(item, tipo, limite)

	if not getItemAttribute(item, tipo) then
	return 0
	end

	local string = getItemAttribute(item, tipo):gsub("cd:", "")
	local number = tonumber(string) - os.time()

	if number <= 0 then
	return 0
	end

	if limite and limite < number then
		return 0
	end

return number
end

function doSendMoveEffect(cid, target, effect)
if not isCreature(cid) or not isCreature(target) then return true end
doSendDistanceShoot(getThingPos(cid), getThingPos(target), effect)
return true
end

function doSetItemActionId(uid, actionid)
doItemSetAttribute(uid, "aid", actionid)
return true
end

function threeNumbers(number)
	if number <= 9 then
	return "00"..number..""
	elseif number <= 99 then
	return "0"..number..""
	end
return ""..number..""
end

function isBr(cid)
if getPlayerStorageValue(cid, 105505) ~= -1 then
return true
end
return false
end

function isBeingUsed(ball)            
if not ball then return false end
for a, b in pairs (pokeballs) do           --alterado v1.9
    if b.use == ball then return true end
end
return false
end

function doRemoveTile(pos)-- Script by mock
pos.stackpos = 0
local sqm = getTileThingByPos(pos)
doRemoveItem(sqm.uid,1)
end

function doCreateTile(id,pos) -- By mock
doAreaCombatHealth(0,0,pos,0,0,0,CONST_ME_NONE)
doCreateItem(id,1,pos)
end

function hasSqm(pos)
local f = getTileThingByPos(pos)
if f.itemid ~= 0 and f.itemid ~= 1 then
return true
end
return false
end

function getPosDirs(p, dir) -- By MatheusMkalo
return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
end

function canWalkOnPos(pos, creature, pz, water, sqm, proj)
if not pos then return false end
if not pos.x then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end
if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false end
    local n = not proj and 3 or 2                                    --alterado v1.6
    for i = 0, 255 do
        pos.stackpos = i                           
        local tile = getTileThingByPos(pos)        
        if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then     --edited
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end   
return true
end

function canWalkOnPos2(pos, creature, pz, water, sqm, proj)     --alterado v1.6
if not pos then return false end
if not pos.x then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end
if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false end
    --[[local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i                           --edited pra retirar um bug.. ;x
        local tile = getTileThingByPos(pos)        
        if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then     --edited
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end ]]  
return true
end

function getFreeTile(pos, cid)
	if canWalkOnPos(pos, true, false, true, true, false) then
		return pos
	end
	local positions = {}
	for a = 0, 7 do
		if canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then
		table.insert(positions, pos)
		end
	end
	if #positions >= 1 then
		if isCreature(cid) then
			local range = 1000
			local ret = getThingPos(cid)
			for b = 1, #positions do
				if getDistanceBetween(getThingPos(cid), positions[b]) < range then
					ret = positions[b]
					range = getDistanceBetween(getThingPos(cid), positions[b])
				end
			end
			return ret
		else
			return positions[math.random(#positions)]
		end
	end
return getThingPos(cid)
end

function isWalkable(pos, creature, proj, pz, water)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end


function isPlayerSummon(cid, uid)
return getCreatureMaster(uid) == cid  --alterado v1.9
end

function isSummon(sid)
return isCreature(sid) and getCreatureMaster(sid) ~= sid and isPlayer(getCreatureMaster(sid))   --alterado v1.9
end 

function getItemsInContainerById(container, itemid) -- Function By Kydrai
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
   for slot=0, (getContainerSize(container)-1) do
       local item = getContainerItem(container, slot)
       if isContainer(item.uid) then
          local itemsbag = getItemsInContainerById(item.uid, itemid)
          for i=0, #itemsbag do
              table.insert(items, itemsbag[i])
          end
       else
          if itemid == item.itemid then
             table.insert(items, item.uid)
          end
       end
   end
end
return items
end

function getPokeballsInContainer(container) -- Function By Kydrai
	if not isContainer(container) then return {} end
	local items = {}
	if isContainer(container) and getContainerSize(container) > 0 then
		for slot=0, (getContainerSize(container)-1) do
			local item = getContainerItem(container, slot)
				if isContainer(item.uid) then
					local itemsbag = getPokeballsInContainer(item.uid)
					for i=0, #itemsbag do
						table.insert(items, itemsbag[i])
					end
				elseif isPokeball(item.itemid) then
					table.insert(items, item.uid)
				end
		end
	end
return items
end

function getItensUniquesInContainer(container)    --alterado v1.6
if not isContainer(container) then return {} end
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
   for slot=0, (getContainerSize(container)-1) do
       local item = getContainerItem(container, slot)
       if isContainer(item.uid) then
          local itemsbag = getItensUniquesInContainer(item.uid)
          for i=0, #itemsbag do
	          table.insert(items, itemsbag[i])
          end
       elseif getItemAttribute(item.uid, "unique") then
          table.insert(items, item)
       end
   end
end
return items
end

function hasSpaceInContainer(container)                --alterado v1.6
if not isContainer(container) then return false end
if getContainerSize(container) < getContainerCap(container) then return true end

for slot = 0, (getContainerSize(container)-1) do
    local item = getContainerItem(container, slot)
    if isContainer(item.uid) then
       if hasSpaceInContainer(item.uid) then
          return true
       end
    end
end
return false
end

function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo
local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
local piles = 0
if #item > 0 then
   for i,x in pairs(item) do
       if getThing(x).type < 100 then
          local it = getThing(x)
          doTransformItem(it.uid, itemid, it.type+quant)
          if it.type+quant > 100 then
             doPlayerAddItem(cid, itemid, it.type+quant-100)
          end
       else
          piles = piles+1
       end
   end
else
   return doPlayerAddItem(cid, itemid, quant)
end
if piles == #item then
   doPlayerAddItem(cid, itemid, quant)
end
end

function getSmeargleMoveTable(master)
  local ball = getPlayerSlotItem(master, 8).uid
  local moves = {}
  local skts = {"skt1", "skt2", "skt3", "skt4", "skt5", "skt6", "skt7", "skt8"}
  for x=1, #skts do
    moves["move"..x] = getItemAttribute(ball, skts[x]) and movestable[getItemAttribute(ball, skts[x])]["move"..x] and movestable[getItemAttribute(ball, skts[x])]["move"..x] ~= -1 and movestable[getItemAttribute(ball, skts[x])]["move"..x] or movestable["Smeargle"]["move"..x]
  end
  return moves
  end

function smeargleHaveSpell(cid, spellname)
local has = false
local moves = getSmeargleMoveTable(cid)
 local ball = getPlayerSlotItem(cid, 8).uid
local skts = {"skt1", "skt2", "skt3", "skt4", "skt5", "skt6", "skt7", "skt8"}
for x=1, #skts do
if getItemAttribute(ball, skts[x]) and moves["move"..x].name == spellname then
has = true
break
end
end
return has
end 

function doPlayerAddItemStacking(cid, itemid, quant) 
local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
local piles = 0
if #item > 0 then
for i,x in pairs(item) do
if getThing(x).type < 100 then
local it = getThing(x)
doTransformItem(it.uid, itemid, it.type+quant)
if it.type+quant > 100 then
doPlayerAddItem(cid, itemid, it.type+quant-100)
end
else
piles = piles+1
end
break
end
else
return doPlayerAddItem(cid, itemid, quant)
end
if piles == #item then
doPlayerAddItem(cid, itemid, quant)
end
end       

Creatpoke

local typess = {       --alterado v2.9 \/  TUDO!!
[1] = "normal",
[2] = "great",
[3] = "super",
[4] = "ultra",
[5] = "saffari",
}
function onSay(cid, words, param)

if param == "" or param == " " then
   doPlayerSendCancel(cid, 'Command needs parameters, function structure: "/cb [Pokemon Name], [boost], [Gender], [ball type]".')
   return false
end

local t = string.explode(param, ",")
--
local name = ""
local btype = (tostring(t[4]) and pokeballs[t[4]]) and t[4] or typess[math.random(1, #typess)] 
local gender = (t[3] and tonumber(t[3])) and tonumber(t[3]) or t[3] and t[3] or nil              

if tostring(t[1]) then
	name = doCorrectString(t[1])   
	if not pokes[name] then
	   doPlayerSendCancel(cid, "Sorry, a pokemon with the name "..name.." doesn't exists.")
	   return true
	end
print(""..name.." ball has been created by "..getPlayerName(cid)..".")
end

addPokeToPlayer(cid, name, (t[2] and tonumber(t[2]) or 0), gender, btype)

return true
end

 

Link para o comentário
Compartilhar em outros sites

  • 0

ok... copia esses, e susbistitui pelos teus..

look.lua(creaturescript)

Spoiler

local addons = {
    [12892] = {pokemon= "Golem" , looktype = 1902, count = 1},
    [13027] = {pokemon= "Aggron" , looktype = 1903, count = 1},
    [12941] = {pokemon= "Aggron" , looktype = 1904, count = 1},
    [13002] = {pokemon= "Snorlax" , looktype = 1905, count = 1},
    [12865] = {pokemon= "Kangaskhan" , looktype = 1906, count = 1},
    [12948] = {pokemon= "Shiny Electivire" , looktype = 1907, count = 1},
    [12949] = {pokemon= "Shiny Electabuzz" , looktype = 1908, count = 1},
    [12901] = {pokemon= "Mr. Mime" , looktype = 1909, count = 1},
    [12942] = {pokemon= "Miltank" , looktype = 1910, count = 1},
    [12909] = {pokemon= "Blissey" , looktype = 1912, count = 1},
    [12943] = {pokemon= "Xatu" , looktype = 1913, count = 1},
    [13014] = {pokemon= "Meganium" , looktype = 1914, count = 1},
    [13016] = {pokemon= "Feraligatr" , looktype = 1916, count = 1},
    [13021] = {pokemon= "Feraligatr" , looktype = 1918, count = 1},
    [13013] = {pokemon= "Typhlosion" , looktype = 1919, count = 1},
    [12913] = {pokemon= "Electivire" , looktype = 1920, count = 1},
    [12961] = {pokemon= "Gengar" , looktype = 1921, count = 1},
    [12959] = {pokemon= "Jinx" , looktype = 1922, count = 1},
    [12945] = {pokemon= "Gardevoir" , looktype = 1923, count = 1},
    [12877] = {pokemon= "Scyther" , looktype = 1924, count = 1},
    [12960] = {pokemon= "Jinx" , looktype = 1926, count = 1},
    [12988] = {pokemon= "Snorlax" , looktype = 1927, count = 1},
    [12876] = {pokemon= "Scyther" , looktype = 1928, count = 1},
    [12875] = {pokemon= "Scyther" , looktype = 1930, count = 1},
    [12914] = {pokemon= "Omanyte" , looktype = 1932, count = 1},
    [12989] = {pokemon= "Snorlax" , looktype = 1934, count = 1},
    [13026] = {pokemon= "Hitmonchan" , looktype = 1950, count = 1},
    [12923] = {pokemon= "Blaziken" , looktype = 1951, count = 1},
    [12992] = {pokemon= "Scizor" , looktype = 1952, count = 1},
    [13000] = {pokemon= "Miltank" , looktype = 1954, count = 1},
    [12998] = {pokemon= "Gardevoir" , looktype = 1955, count = 1},
    [12999] = {pokemon= "Miltank" , looktype = 1956, count = 1},
    [12996] = {pokemon= "Swampert" , looktype = 1957, count = 1},
    [12993] = {pokemon= "Electabuzz" , looktype = 1958, count = 1},
    [12995] = {pokemon= "Magmar" , looktype = 1960, count = 1},
    [12997] = {pokemon= "Tyranitar" , looktype = 1963, count = 1},
    [13007] = {pokemon= "Gardevoir" , looktype = 1964, count = 1},
    [13008] = {pokemon= "Gardevoir" , looktype = 1965, count = 1},
    [13009] = {pokemon= "Gardevoir" , looktype = 1966, count = 1},
    [13199] = {pokemon= "Gardevoir" , looktype = 1967, count = 1},
    [13029] = {pokemon= "Typhlosion" , looktype = 1969, count = 1},
    [13020] = {pokemon= "Feraligatr" , looktype = 1970, count = 1},
    [13037] = {pokemon= "Hitmontop" , looktype = 1973, count = 1},
    [12967] = {pokemon= "Crobat" , looktype = 1974, count = 1},
    [13004] = {pokemon= "Aggron" , looktype = 1976, count = 1},
    [12950] = {pokemon= "Shiny Charizard" , looktype = 1982, count = 1},
    [13025] = {pokemon= "Shiny Vileplume" , looktype = 1983, count = 1},
    [13038] = {pokemon= "Lapras" , looktype = 1989, count = 1},
    [13039] = {pokemon= "Tentacruel" , looktype = 1991, count = 1},
    [12921] = {pokemon= "Nidoking" , looktype = 1999, count = 1},
    [13040] = {pokemon= "Lapras" , looktype = 1893, count = 1},
    [12946] = {pokemon= "Gardevoir" , looktype = 1894, count = 1},
    [13041] = {pokemon= "Arcanine" , looktype = 1895, count = 1},
    [13042] = {pokemon= "Aggron" , looktype = 1896, count = 1},
    [12990] = {pokemon= "Snorlax" , looktype = 1897, count = 1},
    [13046] = {pokemon= "Charizard" , looktype = 1898, count = 1},
    [13045] = {pokemon= "Charizard" , looktype = 2000, count = 1},
    [13043] = {pokemon= "Charizard" , looktype = 2001, count = 1},
    [13047] = {pokemon= "Gengar" , looktype = 2003, count = 1},
    [13048] = {pokemon= "Gengar" , looktype = 2004, count = 1},
    [13049] = {pokemon= "Gengar" , looktype = 2005, count = 1},
    [12900] = {pokemon= "Alakazam" , looktype = 2006, count = 1},
    [13050] = {pokemon= "Alakazam" , looktype = 2007, count = 1},
    [12899] = {pokemon= "Alakazam" , looktype = 2008, count = 1},
    [13051] = {pokemon= "Alakazam" , looktype = 2009, count = 1},
    [12890] = {pokemon= "Shiny Gengar" , looktype = 2011, count = 1},
    [12889] = {pokemon= "Shiny Gengar" , looktype = 2012, count = 1},
    [13052] = {pokemon= "Shiny Raichu" , looktype = 2013, count = 1},
    [13058] = {pokemon= "Shiny Raichu" , looktype = 2014, count = 1},
    [12893] = {pokemon= "Golem" , looktype = 2025, count = 1},
    [13053] = {pokemon= "Shiny Abra" , looktype = 2027, count = 1},
    [13057] = {pokemon= "Shiny Alakazam" , looktype = 2028, count = 1},
    [13054] = {pokemon= "Shiny Alakazam" , looktype = 2029, count = 1},
    [13056] = {pokemon= "Shiny Alakazam" , looktype = 2030, count = 1},
    [13055] = {pokemon= "Shiny Alakazam" , looktype = 2031, count = 1},
    [12871] = {pokemon= "Shiny Electabuzz" , looktype = 2039, count = 1},
    [12912] = {pokemon= "Shiny Electabuzz" , looktype = 2040, count = 1},
    [13059] = {pokemon= "Shiny Jinx" , looktype = 2043, count = 1},
    [13060] = {pokemon= "Shiny Jinx" , looktype = 2044, count = 1},
    [12907] = {pokemon= "Shiny Pidgeot" , looktype = 2063, count = 1},
    [12908] = {pokemon= "Shiny Pidgeot" , looktype = 2064, count = 1},
    [12906] = {pokemon= "Shiny Pidgeot" , looktype = 2065, count = 1},
    [12872] = {pokemon= "Machamp" , looktype = 2067, count = 1},
    [12940] = {pokemon= "Shiny Charizard" , looktype = 2086, count = 1},
    [13308] = {pokemon= "Shiny Charizard" , looktype = 2084, count = 1},
    [12938] = {pokemon= "Ursaring" , looktype = 2088, count = 1},
    [12937] = {pokemon= "Shiny Gengar" , looktype = 2078, count = 1},
    [12939] = {pokemon= "Gengar" , looktype = 2080, count = 1},
    [12883] = {pokemon= "Shiny Gengar" , looktype = 2081, count = 1},
}

local NPCBattle = {
    ["Brock"] = {artig = "He is", cidbat = "Pewter"},
    ["Misty"] = {artig = "She is", cidbat = "Cerulean"},
    ["Blaine"] = {artig = "He is", cidbat = "Cinnabar"},
    ["Sabrina"] = {artig = "She is", cidbat = "Saffron"},         --alterado v1.9 \/ peguem tudo!
    ["Kira"] = {artig = "She is", cidbat = "Viridian"},
    ["Koga"] = {artig = "He is", cidbat = "Fushcia"},
    ["Erika"] = {artig = "She is", cidbat = "Celadon"},
    ["Surge"] = {artig = "He is", cidbat = "Vermilion"},
}

function onLook(cid, thing, position, lookDistance)
    local str = {}
    if not isCreature(thing.uid) then
        if not isPokeball(thing.itemid) then
            if priceList[getItemInfo(thing.itemid).name] then
                price = priceList[getItemInfo(thing.itemid).name].price

                if thing.type > 1 then
                    str = "You see "..thing.type.." "..getItemInfo(thing.itemid).plural.."."
                    price = price * thing.type
                else
                    str = "You see "..getItemInfo(thing.itemid).article.." "..getItemInfo(thing.itemid).name.."."
                end

                str = str.." Price: $"..price.."."
                if getItemAttribute(thing.uid, "description") then
                    str = str.."\n"..getItemAttribute(thing.uid, "description").."."
                end

                if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then
                    str = str.."\nItemID: ["..thing.itemid.."]."                                                      --alterado v1.7
                    local pos = getThingPos(thing.uid)
                    str = str.."\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]"
                end

                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str)
                return false
            end
        end

        local iname = getItemInfo(thing.itemid)
        if isPokeball(thing.itemid) and getItemAttribute(thing.uid, "poke") then
            unLock(thing.uid)
            local lock = getItemAttribute(thing.uid, "lock")
            local pokename = getItemAttribute(thing.uid, "poke")
            table.insert(str, "You see "..iname.article.." "..iname.name..".")

            if getItemAttribute(thing.uid, "unique") then
                table.insert(str, " It's an unique item.")
            end

            table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename..".\n")
            if lock and lock > 0 then
                table.insert(str, "It will unlock in ".. os.date("%d/%m/%y %X", lock)..".\n")
            end

            local boost = getItemAttribute(thing.uid, "boost") or 0
            if boost > 0 then
                table.insert(str, "Boost level: +"..boost..".\n")
            end

            if getItemAttribute(thing.uid, "nick") then
                table.insert(str, "It's nickname is: "..getItemAttribute(thing.uid, "nick")..".\n")
            end

            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
            return false
        elseif string.find(iname.name, "fainted") or string.find(iname.name, "defeated") then
            table.insert(str, "You see a "..string.lower(iname.name)..". ")

            if isContainer(thing.uid) then
                table.insert(str, "(Vol: "..getContainerCap(thing.uid)..")")
            end

            table.insert(str, "\n")

            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
            return false
        elseif isContainer(thing.uid) then     --containers
            if iname.name == "dead human" and getItemAttribute(thing.uid, "pName") then
                table.insert(str, "You see a dead human (Vol:"..getContainerCap(thing.uid).."). ")
                table.insert(str, "You recognize ".. getItemAttribute(thing.uid, "pName")..". ".. getItemAttribute(thing.uid, "article").." was killed by a ")
                table.insert(str, getItemAttribute(thing.uid, "attacker")..".")
            else
                table.insert(str, "You see "..iname.article.." "..iname.name..". (Vol:"..getContainerCap(thing.uid)..").")
            end

            if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then
                table.insert(str, "\nItemID: ["..thing.itemid.."]")
                local pos = getThingPos(thing.uid)
                table.insert(str, "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]")
            end

            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
            return false
        elseif getItemAttribute(thing.uid, "unique") then
            local p = getThingPos(thing.uid)

            table.insert(str, "You see ")
            if thing.type > 1 then
                table.insert(str, thing.type.." "..iname.plural..".")
            else
                table.insert(str, iname.article.." "..iname.name..".")
            end

            table.insert(str, " It's an unique item.\n"..iname.description)
          
            if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then
                table.insert(str, "\nItemID: ["..thing.itemid.."]")
                table.insert(str, "\nPosition: ["..p.x.."]["..p.y.."]["..p.z.."]")
            end

            sendMsgToPlayer(cid, MESSAGE_INFO_DESCR, table.concat(str))
            return false
        else
            return true
        end
    end

    local npcname = getCreatureName(thing.uid)
    if ehNPC(thing.uid) and NPCBattle[npcname] then    --npcs duel
        table.insert(str, "You see "..npcname..". "..NPCBattle[npcname].artig.." leader of the gym from "..NPCBattle[npcname].cidbat..".")
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
        return false
    end

    if getPlayerStorageValue(thing.uid, 697548) ~= -1 then
        table.insert(str, getPlayerStorageValue(thing.uid, 697548))
        local pos = getThingPos(thing.uid)
        if youAre[getPlayerGroupId(cid)] then
            table.insert(str, "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]")
        end
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
        return false
    end

    if not isPlayer(thing.uid) and not isMonster(thing.uid) then    --outros npcs
        table.insert(str, "You see "..getCreatureName(thing.uid)..".")
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
        return false
    end

    if isPlayer(thing.uid) then     --player
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, getPlayerDesc(cid, thing.uid, false))
        return false
    end

    if getCreatureName(thing.uid) == "Evolution" then
        return false
    end

    if not isSummon(thing.uid) then   --monstros
        table.insert(str, "You see a wild "..string.lower(getCreatureName(thing.uid))..".\n")
        table.insert(str, "Hit Points: "..getCreatureHealth(thing.uid).." / "..getCreatureMaxHealth(thing.uid)..".\n")

        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
        return false
    elseif isSummon(thing.uid) and not isPlayer(thing.uid) then  --summons
        local boostlevel = getItemAttribute(getPlayerSlotItem(getCreatureMaster(thing.uid), 8).uid, "boost") or 0
        if getCreatureMaster(thing.uid) == cid then
            local myball = getPlayerSlotItem(cid, 8).uid
            table.insert(str, "You see your "..string.lower(getCreatureName(thing.uid))..".")
            if boostlevel > 0 then
                table.insert(str, "\nBoost level: +"..boostlevel..".")
            end
            table.insert(str, "\nHit points: "..getCreatureHealth(thing.uid).."/"..getCreatureMaxHealth(thing.uid)..".")
            table.insert(str, "\n"..getPokemonHappinessDescription(thing.uid))
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
        else
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You see a "..string.lower(getCreatureName(thing.uid))..".\nIt belongs to "..getCreatureName(getCreatureMaster(thing.uid))..".")
        end
        return false
    end
    return true
end

 

level system.lua(lib)

Spoiler

function adjustWildPoke(cid, optionalLevel)
if isMonster(cid) and pokes[getCreatureName(cid)] then

    local level = (optionalLevel and optionalLevel >= 1) and optionalLevel or getPokemonLevel(cid)  --alterado v1.8


    setPlayerStorageValue(cid, 1000, level) --alterado v1.8
    setPlayerStorageValue(cid, 1001, pokes[getCreatureName(cid)].offense * level)
    setPlayerStorageValue(cid, 1002, pokes[getCreatureName(cid)].defense)
    setPlayerStorageValue(cid, 1003, pokes[getCreatureName(cid)].agility)                                  
    setPlayerStorageValue(cid, 1004, pokes[getCreatureName(cid)].vitality * level)
    setPlayerStorageValue(cid, 1005, pokes[getCreatureName(cid)].specialattack * level)
    
    
    doRegainSpeed(cid)         --alterado!
    setCreatureMaxHealth(cid, (getVitality(cid) * HPperVITwild)) 
    doCreatureAddHealth(cid,  getCreatureMaxHealth(cid))
   
    if pokes[getCreatureName(cid)].exp then
       local exp = pokes[getCreatureName(cid)].exp * baseExpRate + pokes[getCreatureName(cid)].vitality * pokemonExpPerLevelRate
       setPlayerStorageValue(cid, 1006, (exp * generalExpRate/2)*10)
       if getPlayerStorageValue(cid, 22546) == 1 then
          setPlayerStorageValue(cid, 1006, 750)
          doSetCreatureDropLoot(cid, false)      
       end   
    end
end
end       

function getPokemonXMLOutfit(name)                --alterado v1.9 \/
local path = "data/monster/pokes/Shiny/"..name..".xml"
local tpw = io.type(io.open(path))

if not tpw then
   path = "data/monster/pokes/geracao 1/"..name..".xml"
   tpw = io.type(io.open(path))
end
if not tpw then
   path = "data/monster/pokes/geracao 2/"..name..".xml"
   tpw = io.type(io.open(path))
end
if not tpw then
   path = "data/monster/pokes/geracao 3/"..name..".xml"
   tpw = io.type(io.open(path))
end
if not tpw then
   path = "data/monster/pokes/geracao 4/"..name..".xml"
   tpw = io.type(io.open(path))
end
if not tpw then
   path = "data/monster/pokes/"..name..".xml"
   tpw = io.type(io.open(path))
end   
if not tpw then
   return print("[getPokemonXMLOutfit] Poke with name: "..name.." ins't in any paste on monster/pokes/") and 2
end
   local arq = io.open(path, "a+")
   local txt = arq:read("*all")
   arq:close()
   local a, b = txt:find('look type="(.-)"')
   txt = string.sub(txt, a + 11, b - 1)
return tonumber(txt)
end 

function doEvolutionOutfit(cid, oldout, outfit)
    if not isCreature(cid) then return true end
        if getCreatureOutfit(cid).lookType == oldout then
            doSetCreatureOutfit(cid, {lookType = outfit}, -1)
        else
            doSetCreatureOutfit(cid, {lookType = oldout}, -1)
        end
end

function doSendEvolutionEffect(cid, pos, evolution, turn, ssj, evolve, f, h)
    if not isCreature(cid) then
        doSendAnimatedText(pos, "CANCEL", 215)
        return true 
    end
    if evolve then
        doEvolvePokemon(getCreatureMaster(cid), {uid = cid}, evolution, 0, 0)
    return true
    end
    doSendMagicEffect(pos, 18)
        if ssj then
            sendSSJEffect(evo)
        end
    doEvolutionOutfit(cid, f, h)
    addEvent(doSendEvolutionEffect, math.pow(1900, turn/20), cid, getThingPos(cid), evolution, turn - 1, turn == 19, turn == 2, f, h)
end

function sendSSJEffect(cid)
    if not isCreature(cid) then return true end
    local pos1 = getThingPos(cid)
    local pos2 = getThingPos(cid)
    pos2.x = pos2.x + math.random(-1, 1)
    pos2.y = pos2.y - math.random(1, 2)
    doSendDistanceShoot(pos1, pos2, 37)
    addEvent(sendSSJEffect, 45, cid)
end

function sendFinishEvolutionEffect(cid, alternate)
    if not isCreature(cid) then return true end
    local pos1 = getThingPos(cid)

    if alternate then
        local pos = {
        [1] = {-2, 0},
        [2] = {-1, -1},
        [3] = {0, -2},
        [4] = {1, -1},
        [5] = {2, 0},
        [6] = {1, 1},
        [7] = {0, 2},
        [8] = {-1, 1}}
        for a = 1, 8 do
            local pos2 = getThingPos(cid)
            pos2.x = pos2.x + pos[a][1]
            pos2.y = pos2.y + pos[a][2]
            local pos = getThingPos(cid)
            doSendDistanceShoot(pos2, pos, 37)
            addEvent(doSendDistanceShoot, 300, pos, pos2, 37)
        end
    else
        for a = 0, 3 do
            doSendDistanceShoot(pos1, getPosByDir(pos1, a), 37)
        end
        for a = 4, 7 do
            addEvent(doSendDistanceShoot, 600, pos1, getPosByDir(pos1, a), 37)
        end
    end
end

function doEvolvePokemon(cid, item2, theevo, stone1, stone2)

    if not isCreature(cid) then return true end

    if not pokes[theevo] or not pokes[theevo].offense then
    doReturnPokemon(cid, item2.uid, getPlayerSlotItem(cid, 8), pokeballs[getPokeballType(getPlayerSlotItem(cid, 8).itemid)].effect, false, true)
    return true
    end

    local owner = getCreatureMaster(item2.uid)
    local pokeball = getPlayerSlotItem(cid, ?
    local description = "Contains a "..theevo.."."
    local pct = getCreatureHealth(item2.uid) / getCreatureMaxHealth(item2.uid)

        doItemSetAttribute(pokeball.uid, "hp", pct)

        doItemSetAttribute(pokeball.uid, "poke", theevo)
        doItemSetAttribute(pokeball.uid, "description", "Contains a "..theevo..".")

        doPlayerSendTextMessage(cid, 27, "Congratulations! Your "..getPokeName(item2.uid).." evolved into a "..theevo.."!")        

        doSendMagicEffect(getThingPos(item2.uid), 18)
        doTransformItem(getPlayerSlotItem(cid, 7).uid, fotos[theevo])
        doSendMagicEffect(getThingPos(cid), 173)

        local oldpos = getThingPos(item2.uid)
        local oldlod = getCreatureLookDir(item2.uid)
        doRemoveCreature(item2.uid)

        doSummonMonster(cid, theevo)
        local pk = getCreatureSummons(cid)[1]

        doTeleportThing(pk, oldpos, false)
        doCreatureSetLookDir(pk, oldlod)

        sendFinishEvolutionEffect(pk, true)
        addEvent(sendFinishEvolutionEffect, 550, pk, true)
        addEvent(sendFinishEvolutionEffect, 1050, pk)
        
        doPlayerRemoveItem(cid, stone1, 1)
        doPlayerRemoveItem(cid, stone2, 1)

        doAddPokemonInOwnList(cid, theevo)

        local happy = getItemAttribute(pokeball.uid, "happy")

        doItemSetAttribute(pokeball.uid, "happy", happy + happyGainedOnEvolution)

        if happy + happyGainedOnEvolution > 255 then
            doItemSetAttribute(pokeball.uid, "happy", 255)
        end

        adjustStatus(pk, pokeball.uid, true, false)

        if useKpdoDlls then
            doUpdateMoves(cid)
        end
end

function doMathDecimal(number, casas)

    if math.floor(number) == number then return number end

    local c = casas and casas + 1 or 3

    for a = 0, 10 do
        if math.floor(number) < math.pow(10, a) then
            local str = string.sub(""..number.."", 1, a + c)
            return tonumber(str)    
        end
    end

return number
end

function doAdjustWithDelay(cid, pk, health, vit, status)
if isCreature(cid) then                                   
   adjustStatus(pk, getPlayerSlotItem(cid, 8).uid, health, vir, status)
end
end

function adjustStatus(pk, item, health, vite, conditions)

    if not isCreature(pk) then return true end


    setPlayerStorageValue(pk, 1001, pokes[getCreatureName(pk)].offense * (getMasterLevel(pk) + getPokemonBoost(pk)))
    setPlayerStorageValue(pk, 1002, pokes[getCreatureName(pk)].defense)             
    setPlayerStorageValue(pk, 1003, pokes[getCreatureName(pk)].agility)
    setPlayerStorageValue(pk, 1004, pokes[getCreatureName(pk)].vitality * (getMasterLevel(pk) + getPokemonBoost(pk)))
    setPlayerStorageValue(pk, 1005, pokes[getCreatureName(pk)].specialattack * (getMasterLevel(pk) + getPokemonBoost(pk)))
    
    if vite == true then
        local pct = getCreatureHealth(pk) / getCreatureMaxHealth(pk)
        local vit = getVitality(pk)
        setCreatureMaxHealth(pk, ( vit * HPperVITsummon ))
        doCreatureAddHealth(pk, pct * vit * HPperVITsummon)
    end
                                                                      
    doRegainSpeed(pk)  

    local nick = getItemAttribute(item, "poke")

    if isGhostPokemon(pk) then
       setPlayerStorageValue(pk, 8981, 1)
       updateGhostWalk(pk)
    end
        
    if string.find(tostring(nick), "Shiny") then
       nick = tostring(nick):match("Shiny (.*)")
    end

    if getItemAttribute(item, "nick") then
        nick = getItemAttribute(item, "nick")
    end

    setPlayerStorageValue(pk, 1007, nick)

    doCreatureSetNick(pk, nick)

    if not getItemAttribute(item, "happy") then
        doItemSetAttribute(item, "happy", 120)
    end

    if not getItemAttribute(item, "hunger") then
        doItemSetAttribute(item, "hunger", 5)
    end

    local happy = getItemAttribute(item, "happy")
        if happy < 0 then
            happy = 1
        end
    setPlayerStorageValue(pk, 1008, happy)

    local hunger = getItemAttribute(item, "hunger")
    setPlayerStorageValue(pk, 1009, hunger)

    if health == true then
        local mh = HPperVITsummon * getVitality(pk)
        local rd = 1 - (tonumber(getItemAttribute(item, "hp")))
        setCreatureMaxHealth(pk, mh)                                  
        doCreatureAddHealth(pk, getCreatureMaxHealth(pk))
        doCreatureAddHealth(pk, -(getCreatureMaxHealth(pk) * rd))
    end

    if isSummon(pk) and conditions then
        local burn = getItemAttribute(item, "burn")   
        if burn and burn >= 0 then
           local ret = {id = pk, cd = burn, check = false, damage = getItemAttribute(item, "burndmg"), cond = "Burn"}
           addEvent(doCondition2, 3500, ret)
        end

        local poison = getItemAttribute(item, "poison")
        if poison and poison >= 0 then
           local ret = {id = pk, cd = poison, check = false, damage = getItemAttribute(item, "poisondmg"), cond = "Poison"}
           addEvent(doCondition2, 1500, ret)
        end

        local confuse = getItemAttribute(item, "confuse")
        if confuse and confuse >= 0 then
           local ret = {id = pk, cd = confuse, check = false, cond = "Confusion"}
           addEvent(doCondition2, 1200, ret)                                                
        end

        local sleep = getItemAttribute(item, "sleep")
        if sleep and sleep >= 0 then
           local ret = {id = pk, cd = sleep, check = false, first = true, cond = "Sleep"}
           doCondition2(ret)
        end
        
        local miss = getItemAttribute(item, "miss")     
        if miss and miss >= 0 then      
          local ret = {id = pk, cd = miss, eff = getItemAttribute(item, "missEff"), check = false, spell = getItemAttribute(item, "missSpell"), cond = "Miss"}
          doCondition2(ret)
        end
        
        local fear = getItemAttribute(item, "fear")
        if fear and fear >= 0 then
           local ret = {id = pk, cd = fear, check = false, skill = getItemAttribute(item, "fearSkill"), cond = "Fear"}
           doCondition2(ret)
        end
        
        local silence = getItemAttribute(item, "silence")
        if silence and silence >= 0 then      
           local ret = {id = pk, cd = silence, eff = getItemAttribute(item, "silenceEff"), check = false, cond = "Silence"}
           doCondition2(ret)
        end                                     
        
        local stun = getItemAttribute(item, "stun")
        if stun and stun >= 0 then
           local ret = {id = pk, cd = stun, eff = getItemAttribute(item, "stunEff"), check = false, spell = getItemAttribute(item, "stunSpell"), cond = "Stun"}
           doCondition2(ret)
        end 
                                                       
        local paralyze = getItemAttribute(item, "paralyze")
        if paralyze and paralyze >= 0 then
           local ret = {id = pk, cd = paralyze, eff = getItemAttribute(item, "paralyzeEff"), check = false, first = true, cond = "Paralyze"}
           doCondition2(ret)
        end  
                                                     
        local slow = getItemAttribute(item, "slow")
        if slow and slow >= 0 then
           local ret = {id = pk, cd = slow, eff = getItemAttribute(item, "slowEff"), check = false, first = true, cond = "Slow"}
           doCondition2(ret)
        end                                              
        
        local leech = getItemAttribute(item, "leech")
        if leech and leech >= 0 then
           local ret = {id = pk, cd = leech, attacker = 0, check = false, damage = getItemAttribute(item, "leechdmg"), cond = "Leech"}
           doCondition2(ret)
        end                               
        
        for i = 1, 3 do
            local buff = getItemAttribute(item, "Buff"..i)
            if buff and buff >= 0 then
               local ret = {id = pk, cd = buff, eff = getItemAttribute(item, "Buff"..i.."eff"), check = false, 
               buff = getItemAttribute(item, "Buff"..i.."skill"), first = true, attr = "Buff"..i}
               doCondition2(ret)
            end
        end
               
    end
                                                                          --alterado v1.9
    if getItemAttribute(item, "boost") and getItemAttribute(item, "boost") >= 50 and getItemAttribute(item, "aura") then
       sendAuraEffect(pk, auraSyst[getItemAttribute(item, "aura")])        
    end
    
    if getPlayerStorageValue(getCreatureMaster(pk), 6598754) >= 1 then
        setPlayerStorageValue(pk, 6598754, 1)                               
    elseif getPlayerStorageValue(getCreatureMaster(pk), 6598755) >= 1 then
        setPlayerStorageValue(pk, 6598755, 1)
    end

return true
end

function getOffense(cid)
    if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1001))
end

function getDefense(cid)
    if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1002))
end

function getSpeed(cid)
    if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1003))
end

function getVitality(cid)
    if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1004))
end

function getSpecialAttack(cid)
    if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1005))
end

function getHappiness(cid)
    if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1008))
end

function getSpecialDefense(cid)
    if not isCreature(cid) then return 0 end
return getSpecialAttack(cid) * 0.85 + getDefense(cid) * 0.2      
end

function getPokemonLevel(cid, dex)
if not isCreature(cid) then return 0 end 
    if not dex then                      --alterado v1.9
       if ehMonstro(cid) and getPlayerStorageValue(cid, 1000) > 0 then  
          return getPlayerStorageValue(cid, 1000)
       elseif ehMonstro(cid) then 
          return pokes[getCreatureName(cid)].wildLvl             
       end
    end   
return pokes[getCreatureName(cid)].level
end

function getPokemonLevelByName(name)
return pokes[name] and pokes[name].level or 0  --alterado v1.9
end

function getMasterLevel(poke)
    if not isSummon(poke) then return 0 end
return getPlayerLevel(getCreatureMaster(poke))
end

function getPokemonBoost(poke)
    if not isSummon(poke) then return 0 end
return getItemAttribute(getPlayerSlotItem(getCreatureMaster(poke), 8).uid, "boost") or 0
end

function getPokeballBoost(ball)
    if not isPokeball(ball.itemid) then return 0 end  --alterado v1.8
return getItemAttribute(ball.uid, "boost") or 0
end

function getPokeName(cid)
    if not isSummon(cid) then return getCreatureName(cid) end
    if getCreatureName(cid) == "Evolution" then return getPlayerStorageValue(cid, 1007) end
    
local item = getPlayerSlotItem(getCreatureMaster(cid), ?
    if getItemAttribute(item.uid, "nick") then
       return getItemAttribute(item.uid, "nick")
    end
    if string.find(tostring(getCreatureName(cid)), "Shiny") then
      local newName = tostring(getCreatureName(cid)):match("Shiny (.*)")
      return newName
    end
return getCreatureName(cid)
end

function getPokeballName(item, truename)
if not truename and getItemAttribute(item, "nick") then
return getItemAttribute(item, "nick")
end
return getItemAttribute(item, "poke")
end

function getPokemonName(cid)
return getCreatureName(cid)
end

function getWildPokemonExp(cid)
return getPlayerStorageValue(cid, 1006)
end
 

 

catch system.lua(lib)

Spoiler

failmsgs = {
"Sorry, you didn't catch that pokemon.",
"Sorry, your pokeball broke.",
"Sorry, the pokemon escaped.",
}

function doBrokesCount(cid, str, ball)   --alterado v1.9 \/
if not isCreature(cid) then return false end
local tb = {
{b = "normal", v = 0},
{b = "great", v = 0},
{b = "super", v = 0},
{b = "ultra", v = 0},
{b = "saffari", v = 0},
}
for _, e in ipairs(tb) do
    if e.b == ball then
       e.v = 1
       break
    end
end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
local t2 = ""

for n, g, s, u, s2 in string:gmatch(t) do
    t2 = "normal = "..(n+tb[1].v)..", great = "..(g+tb[2].v)..", super = "..(s+tb[3].v)..", ultra = "..(u+tb[4].v)..", saffari = "..(s2+tb[5].v)..";"    
end
return setPlayerStorageValue(cid, str, string:gsub(t, t2))
end

function sendBrokesMsg(cid, str, ball)
if not isCreature(cid) then return false end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
local msg = {}
table.insert(msg, "You have wasted: ")

for n, g, s, u in string:gmatch(t) do
    if tonumber(n) and tonumber(n) > 0 then 
       table.insert(msg, tostring(n).." Poke ball".. (tonumber(n) > 1 and "s" or "")) 
    end
    if tonumber(g) and tonumber(g) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(g).." Great ball".. (tonumber(g) > 1 and "s" or "")) 
    end
    if tonumber(s) and tonumber(s) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s).." Super ball".. (tonumber(s) > 1 and "s" or "")) 
    end
    if tonumber(u) and tonumber(u) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(u).." Ultra ball".. (tonumber(u) > 1 and "s" or "")) 
    end
    if tonumber(s2) and tonumber(s2) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s2).." Saffari ball".. (tonumber(s2) > 1 and "s" or "")) 
    end
end
if #msg == 1 then
   return true
end
if string.sub(msg[#msg], 1, 1) == "," then
   msg[#msg] = " and".. string.sub(msg[#msg], 2, #msg[#msg])
end
table.insert(msg, " trying to catch it.")
sendMsgToPlayer(cid, 27, table.concat(msg))
end                                                             --alterado v1.9 /\
--------------------------------------------------------------------------------

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 
       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 chance = (1 * rate + 1) / totalChance
        chance = doMathDecimal(chance * 100)

    if rate >= totalChance then
        local status = {}
              status.happy = 160

        doRemoveItem(corpse, 1)
        doSendMagicEffect(topos, catch)
        addEvent(doCapturePokemon, 3000, cid, name, newid, status, typeee)  
    return true
    end


    if totalChance <= 1 then totalChance = 1 end

    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.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, 3000, cid, name, newid, status, typeee) 
    else
        addEvent(doNotCapturePokemon, 3000, cid, name, typeee) 
        doSendMagicEffect(topos, fail)
    end
end

function doCapturePokemon(cid, poke, ballid, status, typeee)  

    if not isCreature(cid) then
    return true
    end
    
local list = getCatchList(cid)
    if not isInArray(list, poke) and not isShinyName(poke) then    
       doPlayerAddSoul(cid, 1)
    end

    doAddPokemonInOwnList(cid, poke)
    doAddPokemonInCatchList(cid, poke)
        CW_Count(cid, poke, typeee)
        CW_Caught(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 happy = 200
                                                   --alterado v1.9  \/                  
        if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
           item = doCreateItemEx(ballid)
        else
            item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, ballid, 1) 
        end

        doItemSetAttribute(item, "poke", poke)
        doItemSetAttribute(item, "hp", 1)
        doItemSetAttribute(item, "happy", happy)
        doItemSetAttribute(item, "fakedesc", description)
        doItemSetAttribute(item, "description", description)
        if poke == "Hitmonchan" or poke == "Shiny Hitmonchan" then    
           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))  
           doItemSetAttribute(item, "task", 1)
           setPlayerStorageValue(cid, 854788, 'done')
        end
        -------------------------------------------                                  --alterado v1.9 \/ 
    if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then   
        doPlayerSendMailByName(getCreatureName(cid), item, 1)   
        doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a pokemon ("..poke..")!")
        doPlayerSendTextMessage(cid, 27, "Since you are already holding six pokemons, this pokeball has been sent to your depot.")     
    else
        doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a ("..poke..")!")
    end
    
    local storage = newpokedex[poke].stoCatch 
    sendBrokesMsg(cid, storage, typeee)             
    setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0;") --alterado v1.9 /\

    if #getCreatureSummons(cid) >= 1 then
        doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173) 
            if catchMakesPokemonHappier then
                setPlayerStorageValue(getCreatureSummons(cid)[1], 1008, getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) + 20)
            end
    else
        doSendMagicEffect(getThingPos(cid), 173) 
    end

doIncreaseStatistics(poke, true, true)

end

function doNotCapturePokemon(cid, poke, typeee)  

    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)   
doIncreaseStatistics(poke, true, false)
CW_Count(cid, poke, typeee)

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  

 

some functions.lua(lib)

Spoiler

function addPokeToPlayer(cid, pokemon, boost, ball, unique)             --alterado v1.9 \/ peguem ele todo...
if not isCreature(cid) then return false end

local pokemon = doCorrectString(pokemon)
if not pokes[pokemon] then return false end

   local btype = (ball and pokeballs[ball]) and ball or isShinyName(pokemon) and "shinynormal" or "normal"
   local happy = 250

   if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
      item = doCreateItemEx(11826)
   else
      item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, 11826, 1)   
   end
   if not item then return false end

   doItemSetAttribute(item, "poke", pokemon)
   doItemSetAttribute(item, "hp", 1)
   doItemSetAttribute(item, "happy", happy)
   doSetItemAttribute(item, "hands", 0)
   doItemSetAttribute(item, "description", "Contains a "..pokemon..".")
   doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") 
   if boost and tonumber(boost) and tonumber(boost) > 0 and tonumber(boost) <= 50 then
      doItemSetAttribute(item, "boost", boost)
   end
   if unique then
      doItemSetAttribute(item, "unique", getCreatureName(cid))
   end
                                                                             
   if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then
      doPlayerSendMailByName(getCreatureName(cid), item, 1)
      sendMsgToPlayer(cid, 27, "You are already holding six pokemons, so your new pokemon was sent to your depot.")
   end
   if (isShinyName(pokemon) or (boost and tonumber(boost) and tonumber(boost) >= 10)) and pokeballs["shiny"..btype] then
      doTransformItem(item, pokeballs["shiny"..btype].on)
   else
      doTransformItem(item, pokeballs[btype].on)
   end
return true
end 
---------------------------

function unLock(ball)                                                             
if not ball or ball <= 0 then return false end
if getItemAttribute(ball, "lock") and getItemAttribute(ball, "lock") > 0 then
   local vipTime = getItemAttribute(ball, "lock")
   local timeNow = os.time()
   local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60))
   if days <= 0 then
      doItemEraseAttribute(ball, "lock")    
      doItemEraseAttribute(ball, "unique")
      return true
   end
end
return false
end

function getGuildMembersOnline(GuildId)
local players = {}
for _, pid in pairs(getPlayersOnline()) do
    if getPlayerGuildId(pid) == tonumber(GuildId) then
       table.insert(players, pid)
    end
end                                                   --by Vodkart
return #players > 0 and players or false
end

function getGuildMembers(GuildId)
local players,query = {},db.getResult("SELECT `name` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " .. GuildId .. ");")
if (query:getID() ~= -1) then  
   repeat
         table.insert(players,query:getDataString("name"))
   until not query:next()                           --by Vodkart
   query:free()
end
return #players > 0 and players or false
end 
--/////////////////////////////////////////////////////////////////////////////////---
function sendMsgToPlayer(cid, tpw, msg)      --alterado v1.7 \/\/\/
if not isCreature(cid) or not tpw or not msg then return true end
return doPlayerSendTextMessage(cid, tpw, msg)
end

function getPlayerDesc(cid, thing, TV)
if (not isCreature(cid) or not isCreature(thing)) and not TV then return "" end

local pos = getThingPos(thing)
local ocup = youAre[getPlayerGroupId(thing)]
local rank = (getPlayerStorageValue(thing, 86228) <= 0) and "a Pokemon Trainer" or lookClans[getPlayerStorageValue(thing, 86228)][getPlayerStorageValue(thing, 862281)]
local name = thing == cid and "yourself" or getCreatureName(thing)     
local art = thing == cid and "You are" or (getPlayerSex(thing) == 0 and "She is" or "He is")
   
local str = {}
table.insert(str, "You see "..name..". "..art.." ")
if youAre[getPlayerGroupId(thing)] then
   table.insert(str, (ocup).." and "..rank.." from ".. getTownName(getPlayerTown(thing))..".")       
else
   table.insert(str, (rank).." from ".. getTownName(getPlayerTown(thing))..".")
end
if getPlayerGuildId(thing) > 0 then
   table.insert(str, " "..art.." "..getPlayerGuildRank(thing).." from the "..getPlayerGuildName(thing)..".")
end
if TV then
   table.insert(str, " "..art.." watching TV.")
end
table.insert(str, ((isPlayer(cid) and youAre[getPlayerGroupId(cid)]) and "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]" or "")) 

return table.concat(str) 
end
-------------------------------------------------------------------------------------------------   /\/\
function getLivePokeballs(cid, container, duel) 
    if not isCreature(cid) then return {} end     
    if not isContainer(container) then return {} end
    local items = {}
    ---
    local ballSlot = getPlayerSlotItem(cid, ?
    if ballSlot.uid ~= 0 then
       for a, b in pairs (pokeballs) do
           if ballSlot.itemid == b.on or ballSlot.itemid == b.use then
              if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(ballSlot.uid, "poke")].level + getPokeballBoost(ballSlot)) then
                 table.insert(items, ballSlot.uid)                                                                      --alterado v1.8
              elseif not duel then
                 table.insert(items, ballSlot.uid)
              end
           end
       end
    end
    ---     
    if isContainer(container) and getContainerSize(container) > 0 then      
        for slot=0, (getContainerSize(container)-1) do
            local item = getContainerItem(container, slot)
                if isContainer(item.uid) then
                    local itemsbag = getPokeballsInContainer(item.uid)
                    for i=0, #itemsbag do
                        if not isInArray(items, itemsbag) then
                           table.insert(items, itemsbag)
                        end
                    end
                elseif isPokeball(item.itemid) then
                    for a, b in pairs (pokeballs) do
                        if item.itemid == b.on then
                           if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(item.uid, "poke")].level + getPokeballBoost(item)) then    
                              table.insert(items, item.uid)                                            --alterado v1.8
                           elseif not duel then
                              table.insert(items, item.uid)
                           end
                        end
                    end
                end
        end
    end
return items
end

function addItemInFreeBag(container, item, num)
if not isContainer(container) or not item then return false end                                             
if not num or num <= 0 then num = 1 end                                            --alterado v1.6.1
if getContainerSize(container) < getContainerCap(container) then
   return doAddContainerItem(container, item, num)
else
   for slot = 0, (getContainerSize(container)-1) do
       local container2 = getContainerItem(container, slot)
       if isContainer(container2.uid) and getContainerSize(container2.uid) < getContainerCap(container2.uid) then
          return doAddContainerItem(container2.uid, item, num)
       end
   end
end
return false
end
------------------------------------------------------------------------------------------------------
function pokeHaveReflect(cid)
if not isCreature(cid) then return false end
local table = getTableMove(cid, "Reflect")
if table and table.name then     --alterado v1.6
   return true 
end
return false
end
------------------------------------------------------------------------------------------------------
function nextHorario(cid)
    horarioAtual = os.date("%X")
    horario = string.explode(horarioAtual, ":")
    
    for i = 1, #horas do
        horarioComparacao = horas
        horarioComp = string.explode(horarioComparacao, ":")
        ---------------
        if tonumber(horarioComp[1]) > tonumber(horario[1]) then
           return horarioComparacao                                
        elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then
           return horarioComparacao
        end
    end 
    return horas[1]                                  
end                                                               

function getTimeDiff(timeDiff)
local dateFormat = {
{'hour', timeDiff / 60 / 60}, --6%
{'min', timeDiff / 60 % 60},
}
local out = {}                                   
for k, t in ipairs(dateFormat) do
    local v = math.floor(t[2])
    if(v > -1) then
         table.insert(out, (k < #dateFormat and '' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s"))
    end
end
if tonumber(dateFormat[1][2]) == 0 and tonumber(dateFormat[2][2]) == 0 then
   return "seconds"
end
return table.concat(out)
end

function getTimeDiff2(timeDiff)
local dateFormat = {
{'hour', timeDiff / 60 / 60}, --6%
{'min', timeDiff / 60 % 60},
{'sec', timeDiff % 60},
}
local out = {}                                  
for k, t in ipairs(dateFormat) do
    local v = math.floor(t[2])
    if(v > 0) then
         table.insert(out, (k < #dateFormat and ' ' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s"))
    end
end
return table.concat(out)
end 

function showTimeDiff(timeComp)
local b = string.explode(os.date("%X"), ":")
local c = string.explode(timeComp, ":")
    ---
    local d, m, y = os.date("%d"), os.date("%m"), os.date("%Y")
    local hAtual, mAtual = tonumber(b[1]), tonumber(b[2])
    local hComp, mComp = tonumber(c[1]), tonumber(c[2])
    ---
    local t = os.time{year= y, month= m, day= d, hour= hAtual, min= mAtual}
    local t1 = os.time{year= y, month= m, day= d, hour= hComp, min= mComp}
    ---                                                                       
    comparacao = t1-t
    if hComp < hAtual then
       v = os.time{year= y, month= m, day= d, hour= 24, min= 0}
       v2 = os.time{year= y, month= m, day= d, hour= 0, min= 0}
       comparacao = (v-t)+(t1-v2)
    end
return getTimeDiff(comparacao)
end
-------------------------------------------------------------------------
function cleanCMcds(item)
if item ~= 0 then
   for c = 1, 15 do              --alterado v1.5
      local str = "cm_move"..c
      setCD(item, str, 0)
   end
end
end

function ehNPC(cid)   --alterado v1.9
return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid)
end

function ehMonstro(cid)   --alterado v1.9
return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cid
end                                                       --alterado v1.9.1 /\

function doAppear(cid)    --Faz um poke q tava invisivel voltar a ser visivel...
if not isCreature(cid) then return true end
    doRemoveCondition(cid, CONDITION_INVISIBLE)
    doRemoveCondition(cid, CONDITION_OUTFIT)
    doCreatureSetHideHealth(cid, false)
    if getCreatureName(cid) == "Ditto" and pokes[getPlayerStorageValue(cid, 1010)] and getPlayerStorageValue(cid, 1010) ~= "Ditto" then
       if isSummon(cid) then
          local item = getPlayerSlotItem(getCreatureMaster(cid), ?
          doSetCreatureOutfit(cid, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1)   --alterado v1.6.1
       end
    end 
end

function doDisapear(cid)   --Faz um pokemon ficar invisivel
if not isCreature(cid) then return true end
doCreatureAddCondition(cid, permanentinvisible)
doCreatureSetHideHealth(cid, true)
doSetCreatureOutfit(cid, {lookType = 2}, -1)
end

function hasTile(pos)    --Verifica se tem TILE na pos
pos.stackpos = 0
if getTileThingByPos(pos).itemid >= 1 then
   return true
end
return false
end

function getThingFromPosWithProtect(pos)  --Pega uma creatura numa posiçao com proteçoes
if hasTile(pos) then
   if isCreature(getRecorderCreature(pos)) then
      return getRecorderCreature(pos)
   else
      pos.stackpos = 253
      pid = getThingfromPos(pos).uid
   end
else
   pid = getThingfromPos({x=1,y=1,z=10,stackpos=253}).uid
end
return pid
end

function getTileThingWithProtect(pos)    --Pega um TILE com proteçoes
if hasTile(pos) then
pos.stackpos = 0
   pid = getTileThingByPos(pos)
else
   pid = getTileThingByPos({x=1,y=1,z=10,stackpos=0})
end
return pid
end

function canAttackOther(cid, pid)         --Function q verifica se um poke/player pode atacar outro poke/player

if not isCreature(cid) or not isCreature(pid) then return "Cant" end

local master1 = isSummon(cid) and getCreatureMaster(cid) or cid
local master2 = isSummon(pid) and getCreatureMaster(pid) or pid
   
   ----             
   if getPlayerStorageValue(master1, 6598754) >= 5 and getPlayerStorageValue(master2, 6598754) >= 5 then
      if getPlayerStorageValue(master1, 6598754) ~= getPlayerStorageValue(master2, 6598754) then
         if isDuelingAgainst(master1, master2) then   --alterado v1.8
            if isSummon(cid) and isPlayer(pid) then
               return "Cant"
            else
               return "Can"
            end
         end
      end
   end
   ----              pvp system
   if getPlayerStorageValue(master1, 6598754) >= 1 and getPlayerStorageValue(master2, 6598755) >= 1 then
      return "Can" 
   end
   if getPlayerStorageValue(master1, 6598755) >= 1 and getPlayerStorageValue(master2, 6598754) >= 1 then  ---estar em times diferentes
      return "Can"
   end
   ----
   if ehMonstro(cid) and ehMonstro(pid) then 
      return "Can"
   end

return "Cant"
end
   
      
function stopNow(cid, time)   
if not isCreature(cid) or not tonumber(time) or isSleeping(cid) then return true end
                                                        --alterado v1.9.1 \/
local function podeMover(cid)                         
if isPlayer(cid) then 
   mayNotMove(cid, false) 
elseif isCreature(cid) then 
   doRegainSpeed(cid) 
end
end

if isPlayer(cid) then mayNotMove(cid, true) else doChangeSpeed(cid, -getCreatureSpeed(cid)) end
addEvent(podeMover, time, cid)
end

function doReduceStatus(cid, off, def, agi)   --reduz os status
if not isCreature(cid) then return true end
local A = getOffense(cid)
local B = getDefense(cid)
local C = getSpeed(cid)

if off > 0 then
   setPlayerStorageValue(cid, 1001, A - off)
end
if def > 0 then
   setPlayerStorageValue(cid, 1002, B - def)
end
if agi > 0 then
   setPlayerStorageValue(cid, 1003, C - agi)
   if getCreatureSpeed(cid) ~= 0 then
      doRegainSpeed(cid)
   end                                              --alterado v1.5  functions arrumadas...
end
end

function doRaiseStatus(cid, off, def, agi, time)  
if not isCreature(cid) then return true end
local A = getOffense(cid)
local B = getDefense(cid)
local C = getSpeed(cid)

if off > 0 then
   setPlayerStorageValue(cid, 1001, A * off)
end
if def > 0 then
   setPlayerStorageValue(cid, 1002, B * def)
end
if agi > 0 then
   setPlayerStorageValue(cid, 1003, C + agi)
   if getCreatureSpeed(cid) ~= 0 then
      doRegainSpeed(cid)
   end
end

local D = getOffense(cid)
local E = getDefense(cid)
local F = getSpeed(cid)
---------------------------
local G = D - A
local H = E - B
local I = F - C

addEvent(doReduceStatus, time*1000, cid, G, H, I)
end


function BackTeam(cid)          
  if isCreature(cid) then
     local summon = getCreatureSummons(cid)   --alterado v1.6
     for i = 2, #summon do
         doSendMagicEffect(getThingPos(summon), 211)
         doRemoveCreature(summon)
     end
     setPlayerStorageValue(cid, 637501, -1)
  end  
end
    
function choose(...) -- by mock
    local arg = {...}
    return arg[math.random(1,#arg)]
end

function AddPremium(cid, days)
local function removerPlayer(cid)
if isCreature(cid) then
   doRemoveCreature(cid)
end
end

db.executeQuery("UPDATE `accounts` SET `premdays` = '"..days.."' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
doPlayerSendTextMessage(cid,25,"Você será kickado em 5 segundos.")    
addEvent(removerPlayer, 5*1000, cid)     
return TRUE
end

function isShiny(cid) 
return isCreature(cid) and string.find(getCreatureName(cid), "Shiny")  --alterado v1.9
end

function isShinyName(name)        
return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v1.9
end

function doConvertTypeToStone(type, string)
local t = {
["fly"] = {heart, "heart"},
["flying"] = {heart, "heart"},
["normal"] = {heart, "heart"},
["fire"] = {fire, "fire"},
["grass"] = {leaf, "leaf"},
["leaf"] = {leaf, "leaf"},
["water"] = {water, "water"},
["poison"] = {venom, "venom"},
["venom"] = {venom, "venom"},
["electric"] = {thunder, "thunder"},
["thunder"] = {thunder, "thunder"},
["rock"] = {rock, "rock"},
["fight"] = {punch, "punch"},
["fighting"] = {punch, "punch"},
["bug"] = {coccon, "coccon"},
["dragon"] = {crystal, "crystal"},
["dark"] = {dark, "dark"},
["ghost"] = {dark, "dark"},
["ground"] = {earth, "earth"},
["earth"] = {earth, "earth"},
["psychic"] = {enigma, "enigma"},
["steel"] = {metal, "metal"},
["metal"] = {metal, "metal"},
["ice"] = {ice, "ice"},
["boost"] = {boostStone, "boost"},  --alterado v1.9
}

if string then
return t[type][2]
else
return t[type][1]
end
end

function doConvertStoneIdToString(stoneID)
local t = {
[11453] = "Heart Stone",
[11441] = "Leaf Stone",
[11442] = "Water Stone",
[11443] = "Venom Stone",
[11444] = "Thunder Stone",
[11445] = "Rock Stone",
[11446] = "Punch Stone", 
[11447] = "Fire Stone",               --alterado v1.6
[11448] = "Cocoon Stone", 
[11449] = "Crystal Stone",
[11450] = "Darkess Stone", 
[11451] = "Earth Stone",
[11452] = "Enigma Stone",
[11454] = "Ice Stone", 
[12244] = "King's Rock",
[12232] = "Metal Stone",
[12242] = "Sun Stone",
[12401] = "Shiny Fire Stone",
[12402] = "Shiny Water Stone",
[12403] = "Shiny Leaf Stone",
[12404] = "Shiny Heart Stone",
[12405] = "Shiny Enigma Stone",
[12406] = "Shiny Rock Stone",
[12407] = "Shiny Venom Stone", 
[12408] = "Shiny Ice Stone",
[12409] = "Shiny Thunder Stone",
[12410] = "Shiny Crystal Stone",
[12411] = "Shiny Cocoon Stone",
[12412] = "Shiny Darkness Stone",
[12413] = "Shiny Punch Stone",
[12414] = "Shiny Earth Stone",
[boostStone] = "Boost Stone",  --alterado v1.9
}
if t[stoneID] then
return t[stoneID]
else
return ""
end
end

function isStone(id)
if id >= leaf and id <= ice then
return true
end
if id == boostStone then  --alterado v1.9
return true
end
if id == 12232 or id == 12242 or id == 12244 or id == 12245 then
return true                                 
end
if (id >= sfire and id <= searth) or id == 12417 or id == 12419 then
return true 
end
return false
end

function isWater(id)
return tonumber(id) and id >= 4820 and id <= 4825 --alterado v1.9
end

function getTopCorpse(position)
local pos = position
for n = 1, 255 do
    pos.stackpos = n
    local item = getTileThingByPos(pos)
    if item.itemid >= 2 and (string.find(getItemNameById(item.itemid), "fainted ") or string.find(getItemNameById(item.itemid), "defeated ")) then
       return getTileThingByPos(pos)
    end
end
return null
end

bpslot = CONST_SLOT_BACKPACK

function hasPokemon(cid)
    if not isCreature(cid) then return false end
    if getCreatureMana(cid) <= 0 then return false end
    if #getCreatureSummons(cid) >= 1 then return true end
    local item = getPlayerSlotItem(cid, CONST_SLOT_FEET)
    local bp = getPlayerSlotItem(cid, bpslot)
    for a, b in pairs (pokeballs) do
        if item.itemid == b.on or item.itemid == b.use then
        return true                              --alterado v1.4
        end
        if #getItemsInContainerById(bp.uid, b.on) >= 1 then
        return true
        end
    end
return false
end

function isNpcSummon(cid)
return isNpc(getCreatureMaster(cid))
end

function getPokemonHappinessDescription(cid)
    if not isCreature(cid) then return true end
    local str = {}
    local h = getPlayerStorageValue(cid, 1008)
    if h >= tonumber(getConfigValue('PokemonStageVeryHappy')) then
        table.insert(str, " is very happy with you!")
    elseif h >= tonumber(getConfigValue('PokemonStageHappy')) then
        table.insert(str, " is happy.")
    elseif h >= tonumber(getConfigValue('PokemonStageOK')) then
        table.insert(str, " is unhappy.")
    elseif h >= tonumber(getConfigValue('PokemonStageSad')) then
        table.insert(str, " is sad.")
    elseif h >= tonumber(getConfigValue('PokemonStageMad')) then
        table.insert(str, " is mad.")
    else
        table.insert(str, " is very mad at you!")
    end
return table.concat(str)
end

function doSetItemAttribute(item, key, value)
doItemSetAttribute(item, key, value)
end

function deTransform(cid, check)
    if not isCreature(cid) then return true end

    local m = getCreatureMaster(cid)
    local p = getPlayerSlotItem(m, ?

    if getItemAttribute(p.uid, "transTurn") ~= check then return true end

    setPlayerStorageValue(cid, 1010, getCreatureName(cid) == "Ditto" and "Ditto" or "Shiny Ditto")        --edited
    doRemoveCondition(cid, CONDITION_OUTFIT)
    doSendMagicEffect(getThingPos(cid), 184)
    doCreatureSay(cid, "DITTO!", TALKTYPE_MONSTER)
    doItemSetAttribute(p.uid, "transBegin", 0)
    doItemSetAttribute(p.uid, "transLeft", 0)
    doItemEraseAttribute(p.uid, "transName")
    adjustStatus(cid, p.uid, true, true, true)
end

function isTransformed(cid)
return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010))  --alterado v1.9
end

function doSendFlareEffect(pos)
    local random = {28, 29, 79}
    doSendMagicEffect(pos, random[math.random(1, 3)])
end

function isDay()
    local a = getWorldTime()
    if a >= 360 and a < 1080 then
    return true
    end
return false
end

function doPlayerSendTextWindow(cid, p1, p2)
    if not isCreature(cid) then return true end
    local item = 460
    local text = ""
    if type(p1) == "string" then
        doShowTextDialog(cid, item, p1)
    else
        doShowTextDialog(cid, p1, p2)
    end
end

function getClockString(tw)
    local a = getWorldTime()
    local b = a / 60
    local hours = math.floor(b)
    local minut = a - (60 * hours)

    if not tw then
        if hours < 10 then
            hours = "0"..hours..""
        end
        if minut < 10 then
            minut = "0"..minut..""
        end
    return hours..":"..minut
    else
        local sm = "a.m"
        if hours >= 12 then
            hours = hours - 12
            sm = "p.m"
        end
        if hours < 10 then
            hours = "0"..hours..""
        end
        if minut < 10 then
            minut = "0"..minut..""
        end
    return hours..":"..minut.." "..sm
    end
end

function doCorrectPokemonName(poke)
return doCorrectString(poke)
end

function doCorrectString(str)
local name = str:explode(" ")  --alterado v1.9
local final = {}
for _, s in ipairs(name) do
    table.insert(final, s:sub(1, 1):upper()..s:sub(2, #s):lower())
end
return table.concat(final, (name[2] and " " or ""))
end   

function getHappinessRate(cid)
    if not isCreature(cid) then return 1 end
    local a = getPlayerStorageValue(cid, 1008)
        if a == -1 then return 1 end
    if a >= getConfigValue('PokemonStageVeryHappy') then
        return happinessRate[5].rate
    elseif a >= getConfigValue('PokemonStageHappy') then
        return happinessRate[4].rate
    elseif a >= getConfigValue('PokemonStageOK') then
        return happinessRate[3].rate
    elseif a >= getConfigValue('PokemonStageSad') then
        return happinessRate[2].rate
    else
        return happinessRate[1].rate
    end
return 1
end

function doBodyPush(cid, target, go, pos)
    if not isCreature(cid) or not isCreature(target) then
        doRegainSpeed(cid)
        doRegainSpeed(target)
    return true
    end
        if go then
            local a = getThingPos(cid)
            doChangeSpeed(cid, -getCreatureSpeed(cid))
                if not isPlayer(target) then
                    doChangeSpeed(target, -getCreatureSpeed(target))
                end
            doChangeSpeed(cid, 800)
            doTeleportThing(cid, getThingPos(target))
            doChangeSpeed(cid, -800)
            addEvent(doBodyPush, 350, cid, target, false, a)
        else
            doChangeSpeed(cid, 800)
            doTeleportThing(cid, pos)
            doRegainSpeed(cid)
            doRegainSpeed(target)
        end
end

function doReturnPokemon(cid, pokemon, pokeball, effect, hideeffects, blockevo)

    --////////////////////////////////////////////////////////////////////////////////////////--
    checkDuel(cid)                                                                      --alterado v1.6 duel system
    --////////////////////////////////////////////////////////////////////////////////////////--
    if getPlayerStorageValue(cid, 52480) >= 1 and getPlayerStorageValue(cid, 52484) ~= 10 then
       return sendMsgToPlayer(cid, 27, "You can't do that while the duel don't begins!")        --alterado v1.8
    end
    --////////////////////////////////////////////////////////////////////////////////////////--
    
    if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then     --alterado v1.6
       if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then  
          BackTeam(cid)       
       end
    end
    -----------------
    local edit = true

    if not pokeball then
        pokeball = getPlayerSlotItem(cid, ?
    end

    if blockevo then
        edit = false
        doPlayerSendCancel(cid, "Your pokemon couldn't evolve due to server mistakes, please wait until we fix the problem.")
    end

    local happy = getPlayerStorageValue(pokemon, 1008)
    local hunger = getPlayerStorageValue(pokemon, 1009)
    local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon))

    if edit then
        doItemSetAttribute(pokeball.uid, "happy", happy)
        doItemSetAttribute(pokeball.uid, "hunger", hunger)
        doItemSetAttribute(pokeball.uid, "hp", pokelife)
    end

    if getCreatureName(pokemon) == "Ditto" then
        if isTransformed(pokemon) then
            local left = getItemAttribute(pokeball.uid, "transLeft") - (os.clock() - getItemAttribute(pokeball.uid, "transBegin"))
            doItemSetAttribute(pokeball.uid, "transLeft", left)
        end
    end

    if hideeffects then
        doRemoveCreature(pokemon)
    return true
    end

    local pokename = getPokeName(pokemon)

    local mbk = gobackmsgs[math.random(1, #gobackmsgs)].back:gsub("doka", pokename)

    if getCreatureCondition(cid, CONDITION_INFIGHT) then
        if isCreature(getCreatureTarget(cid)) then
            doItemSetAttribute(pokeball.uid, "happy", happy - 5)
        else
            doItemSetAttribute(pokeball.uid, "happy", happy - 2)
        end
    end

    doTransformItem(pokeball.uid, pokeball.itemid-1)
    doCreatureSay(cid, mbk, TALKTYPE_SAY)

    doSendMagicEffect(getCreaturePosition(pokemon), effect)

    doRemoveCreature(pokemon)

    unLock(pokeball.uid) --alterado v1.8
    
    if useOTClient then
       doPlayerSendCancel(cid, '12//,hide')  --alterado v1.7
    end
    
    if useKpdoDlls then
        doUpdateMoves(cid)
    end

end

local EFFECTS = {
    --[OutfitID] = {Effect}
    ["Magmar"] = 35,                --alterado v1.5
    ["Jynx"] = 17,   
    ["Shiny Jynx"] = 17,    
    ["Piloswine"] = 205,  --alterado v1.8
    ["Swinub"] = 205, 
}

function doGoPokemon(cid, item)

    if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then
    return true
    end
---------------------------------------------------------------
local ballName = getItemAttribute(item.uid, "poke")

   btype = getPokeballType(item.itemid)                   

    local effect = pokeballs[btype].effect
        if not effect then
            effect = 21
        end
-----------------------------------------------------------------
    if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then
        doPlayerSendCancel(cid, "You must put your pokeball in the correct place!")
    return TRUE
    end

    local thishp = getItemAttribute(item.uid, "hp")

    if thishp <= 0 then
        if isInArray(pokeballs[btype].all, item.itemid) then
            doTransformItem(item.uid, pokeballs[btype].off)
            doItemSetAttribute(item.uid, "hp", 0)
            doPlayerSendCancel(cid, "This pokemon is fainted.")
            return true
        end
    end

    local pokemon = getItemAttribute(item.uid, "poke")

    if not pokes[pokemon] then
    return true
    end

----------------------- Sistema de nao poder carregar mais que 3 pokes lvl baixo e + q 1 poke de lvl medio/alto ---------------------------------
if not isInArray({5, 6}, getPlayerGroupId(cid)) then
   local balls = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid)      --alterado v1.9 \/
   local low = {}
   local lowPokes = {"Rattata", "Caterpie", "Weedle", "Oddish", "Pidgey", "Paras", "Poliwag", "Bellsprout", "Magikarp", "Hoppip", "Sunkern"}
   if #balls >= 1 then
      for _, uid in ipairs(balls) do
          local nome = getItemAttribute(uid, "poke")
          if not isInArray(lowPokes, pokemon) and nome == pokemon then
             return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry two pokemons equals!")
          else
             if nome == pokemon then
                table.insert(low, nome)
             end
          end
      end
   end
if #low >= 3 then
   return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry more than three pokemons equals of low level!")
end   
end
---------------------------------------------------------------------------------------------------------------------------------------------------

    local x = pokes[pokemon]
    local boosts = getItemAttribute(item.uid, "boost") or 0

    if getPlayerLevel(cid) < (x.level + boosts) then   --alterado v1.8 \/
    doPlayerSendCancel(cid, "You need level "..(x.level + boosts).." to use this pokemon.")
    return true
    end
    
    --------------------------------------------------------------------------------------
    shinysClan = {
    ["Shiny Fearow"] = {4, "Wingeon"},
    ["Shiny Flareon"] = {1, "Volcanic"},
    ["Shiny Vaporeon"] = {2, "Seavel"}, 
    ["Shiny Jolteon"] = {9, "Raibolt"},
    ["Shiny Hypno"] = {7, "Psycraft"},
    ["Shiny Golem"] = {3, "Orebound"},         
    ["Shiny Vileplume"] = {8, "Naturia"},
    ["Shiny Nidoking"] = {5, "Malefic"},
    ["Shiny Hitmontop"] = {6, "Gardestrike"},   
    }
    
    if shinysClan[pokemon] and (getPlayerGroupId(cid) < 4 or getPlayerGroupId(cid) > 6) then --alterado v1.9
       if getPlayerStorageValue(cid, 86228) ~= shinysClan[pokemon][1] then
          doPlayerSendCancel(cid, "You need be a member of the clan "..shinysClan[pokemon][2].." to use this pokemon!")
          return true   
       elseif getPlayerStorageValue(cid, 862281) ~= 5 then
          doPlayerSendCancel(cid, "You need be atleast rank 5 to use this pokemon!")
          return true
       end
    end
    --------------------------------------------------------------------------------------

    doSummonMonster(cid, pokemon)

    local pk = getCreatureSummons(cid)[1]
    if not isCreature(pk) then return true end
    
    ------------------------passiva hitmonchan------------------------------
    if isSummon(pk) then                                                  --alterado v1.8 \/
       if pokemon == "Shiny Hitmonchan" or pokemon == "Hitmonchan" then
          if not getItemAttribute(item.uid, "hands") then
             doSetItemAttribute(item.uid, "hands", 0)
          end
          local hands = getItemAttribute(item.uid, "hands")
          doSetCreatureOutfit(pk, {lookType = hitmonchans[pokemon][hands].out}, -1)
       end
    end
    -------------------------------------------------------------------------
    ---------movement magmar, jynx-------------
    if EFFECTS[getCreatureName(pk)] then     
       markPosEff(pk, getThingPos(pk))
       sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk))   
    end
    --------------------------------------------------------------------------  

    if getCreatureName(pk) == "Ditto" then

        local left = getItemAttribute(item.uid, "transLeft")
        local name = getItemAttribute(item.uid, "transName")

        if left and left > 0 then
            setPlayerStorageValue(pk, 1010, name)
            doSetCreatureOutfit(pk, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1)
            addEvent(deTransform, left * 1000, pk, getItemAttribute(item.uid, "transTurn"))
            doItemSetAttribute(item.uid, "transBegin", os.clock())
        else
            setPlayerStorageValue(pk, 1010, "Ditto")
        end
    end

    if isGhostPokemon(pk) then doTeleportThing(pk, getPosByDir(getThingPos(cid), math.random(0, 7)), false) end

    doCreatureSetLookDir(pk, 2)

    adjustStatus(pk, item.uid, true, true, true)
    doAddPokemonInOwnList(cid, pokemon)

    doTransformItem(item.uid, item.itemid+1)

    local pokename = getPokeName(pk) --alterado v1.7

    local mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", pokename)
    doCreatureSay(cid, mgo, TALKTYPE_SAY)

    doSendMagicEffect(getCreaturePosition(pk), effect)

    unLock(item.uid) --alterado v1.8

    if useKpdoDlls then
        doUpdateMoves(cid)
    end
end

function doRegainSpeed(cid)              --alterado v1.9 \/
if not isCreature(cid) then return true end

   local speed = PlayerSpeed
   if isMonster(cid) then
      speed = getSpeed(cid)
   elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then
      speed = 200*getPlayerGroupId(cid) 
   end
   
   doChangeSpeed(cid, -getCreatureSpeed(cid))
   if getCreatureCondition(cid, CONDITION_PARALYZE) == true then
      doRemoveCondition(cid, CONDITION_PARALYZE)
      addEvent(doAddCondition, 10, cid, paralizeArea2)             
   end
    
doChangeSpeed(cid, speed)
return speed
end

function isPosEqualPos(pos1, pos2, checkstackpos)
    if pos1.x ~= pos2.x or pos1.y ~= pos2.y and pos1.z ~= pos2.z then
    return false
    end
    if checkstackpos and pos1.stackpos and pos2.stackpos and pos1.stackpos ~= pos2.stackpos then
    return false
    end
return true
end

function getRecorderPlayer(pos, cid)
    local ret = 0
    if cid and isPosEqual(getThingPos(cid), pos) then   --alterado v1.9
       return cid
    end
    local s = {}
    s.x = pos.x
    s.y = pos.y
    s.z = pos.z
        for a = 0, 255 do
            s.stackpos = a
            local b = getTileThingByPos(s).uid
            if b > 1 and isPlayer(b) and getCreatureOutfit(b).lookType ~= 814 then
                ret = b
            end
        end
return ret
end

function getRecorderCreature(pos, cid)
    local ret = 0
    if cid and isPosEqual(getThingPos(cid), pos) then   --alterado v1.9
       return cid
    end
    local s = {}
    s.x = pos.x
    s.y = pos.y
    s.z = pos.z
        for a = 0, 255 do
            s.stackpos = a
            local b = getTileThingByPos(s).uid
            if b > 1 and isCreature(b) and getCreatureOutfit(b).lookType ~= 814 then
                ret = b
            end
        end
return ret
end

function doCreatureSetOutfit(cid, outfit, time)
    doSetCreatureOutfit(cid, outfit, time)
end

function doMagicalFlower(cid, away)
    if not isCreature(cid) then return true end
    for x = -3, 3 do
        for y = -3, 3 do
        local a = getThingPos(cid)
        a.x = a.x + x
        a.y = a.y + y
            if away then
                doSendDistanceShoot(a, getThingPos(cid), 21)
            else
                doSendDistanceShoot(getThingPos(cid), a, 21)
            end
        end
    end
end        

function isItemPokeball(item)         --alterado v1.9 \/
if not item then return false end
for a, b in pairs (pokeballs) do
    if isInArray(b.all, item) then return true end
end
return false
end

function isPokeball(item)
return isItemPokeball(item)
end                                    --/\

function getPokeballType(id)
    for a, b in pairs (pokeballs) do
        if isInArray(b.all, id) then
            return a
        end
    end
return "none"
end

randomdiagonaldir = {
[NORTHEAST] = {NORTH, EAST},
[SOUTHEAST] = {SOUTH, EAST},
[NORTHWEST] = {NORTH, WEST},
[SOUTHWEST] = {SOUTH, WEST}}

function doFaceOpposite(cid)
local a = getCreatureLookDir(cid)
local d = {
[NORTH] = SOUTH,
[SOUTH] = NORTH,
[EAST] = WEST,
[WEST] = EAST,
[NORTHEAST] = SOUTHWEST,
[NORTHWEST] = SOUTHEAST,
[SOUTHEAST] = NORTHWEST,
[SOUTHWEST] = NORTHEAST}
doCreatureSetLookDir(cid, d[a])
end

function doFaceRandom(cid)
local a = getCreatureLookDir(cid)
local d = {
[NORTH] = {SOUTH, WEST, EAST},
[SOUTH] = {NORTH, WEST, EAST},
[WEST] = {SOUTH, NORTH, EAST},
[EAST] = {SOUTH, WEST, NORTH}}
doChangeSpeed(cid, 1)
doCreatureSetLookDir(cid, d[a][math.random(1, 3)])
doChangeSpeed(cid, -1)
end

function getFaceOpposite(dir)
local d = {
[NORTH] = SOUTH,
[SOUTH] = NORTH,
[EAST] = WEST,
[WEST] = EAST,
[NORTHEAST] = SOUTHWEST,
[NORTHWEST] = SOUTHEAST,
[SOUTHEAST] = NORTHWEST,
[SOUTHWEST] = NORTHEAST}
return d[dir]
end

function getResistance(cid, combat)
    if isPlayer(cid) then return false end
local poketype1 = pokes[getCreatureName(cid)].type
local poketype2 = pokes[getCreatureName(cid)].type2
local multiplier = 1
    if effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype1) then
        multiplier = multiplier * 2
    end
    if poketype2 and effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype2) then
        multiplier = multiplier * 2
    end
    if effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype1) then
        multiplier = multiplier * 0.5
    end
    if poketype2 and effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype2) then
        multiplier = multiplier * 0.5
    end
    if effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype1) then
        multiplier = multiplier * 0
    end
    if poketype2 and effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype2) then
        multiplier = multiplier * 0
    end

    if multiplier == 0.25 then
        multiplier = 0.5
    elseif multiplier == 4 then
        multiplier = 2
    end

return multiplier
end

function getCreatureDirectionToTarget(cid, target, ranged)
    if not isCreature(cid) then return true end
    if not isCreature(target) then return getCreatureLookDir(cid) end
    local dirs = {
    [NORTHEAST] = {NORTH, EAST},
    [SOUTHEAST] = {SOUTH, EAST},
    [NORTHWEST] = {NORTH, WEST},
    [SOUTHWEST] = {SOUTH, WEST}}
    local x = getDirectionTo(getThingPos(cid), getThingPos(target), false)
        if x <= 3 then return x
        else
            local xdistance = math.abs(getThingPos(cid).x - getThingPos(target).x)
            local ydistance = math.abs(getThingPos(cid).y - getThingPos(target).y)
                if xdistance > ydistance then
                    return dirs[x][2]
                elseif ydistance > xdistance then
                    return dirs[x][1]
                elseif isInArray(dirs[x], getCreatureLookDir(cid)) then
                    return getCreatureLookDir(cid)
                else
                    return dirs[x][math.random(1, 2)]
                end
        end
end

function getSomeoneDescription(cid)
    if isPlayer(cid) then return getPlayerNameDescription(cid) end
return getMonsterInfo(getCreatureName(cid)).description
end
    

function isGhostPokemon(cid)
    if not isCreature(cid) then return false end
    local ghosts = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Shiny Abra"}
return isInArray(ghosts, getCreatureName(cid))
end

function updateGhostWalk(cid)
    if not isCreature(cid) then return false end
    local pos = getThingPos(cid)
    pos.x = pos.x + 1
    pos.y = pos.y + 1
    local ret = getThingPos(cid)
    doTeleportThing(cid, pos, false)
    doTeleportThing(cid, ret, false)
return true
end

function doRemoveElementFromTable(t, e)
    local ret = {}
    for a = 1, #t do
        if t[a] ~= e then
        table.insert(ret, t[a])
        end
    end
return ret
end

function doFaceCreature(sid, pos)
if not isCreature(sid) then return true end
    if getThingPos(sid).x == pos.x and getThingPos(sid).y == pos.y then return true end
    local ret = 0

    local ld = getCreatureLookDir(sid)
    local dir = getDirectionTo(getThingPos(sid), pos)
    local al = {
    [NORTHEAST] = {NORTH, EAST},
    [NORTHWEST] = {NORTH, WEST},
    [SOUTHEAST] = {SOUTH, EAST},
    [SOUTHWEST] = {SOUTH, WEST}}

    if dir >= 4 and isInArray(al[dir], ld) then return true end

    doChangeSpeed(sid, 1)
        if dir == 4 then
            ret = math.random(2, 3)
        elseif dir == 5 then
            ret = math.random(1, 2)
        elseif dir == 6 then
            local dirs = {0, 3}
            ret = dirs[math.random(1, 2)]
        elseif dir == 7 then
            ret = math.random(0, 1)
        else
            ret = getDirectionTo(getThingPos(sid), pos)
        end
doCreatureSetLookDir(sid, ret)
doChangeSpeed(sid, -1)
return true
end

function doCreatureAddCondition(cid, condition)
if not isCreature(cid) then return true end
doAddCondition(cid, condition)
end

function doCreatureRemoveCondition(cid, condition)
if not isCreature(cid) then return true end
doRemoveCondition(cid, condition)
end

function setCD(item, tipo, tempo)

    if not tempo or not tonumber(tempo) then
        doItemEraseAttribute(item, tipo)
    return true
    end

    doItemSetAttribute(item, tipo, "cd:"..(tempo + os.time()).."")
return tempo + os.time()
end

function getCD(item, tipo, limite)

    if not getItemAttribute(item, tipo) then
    return 0
    end

    local string = getItemAttribute(item, tipo):gsub("cd:", "")
    local number = tonumber(string) - os.time()

    if number <= 0 then
    return 0
    end

    if limite and limite < number then
        return 0
    end

return number
end

function doSendMoveEffect(cid, target, effect)
if not isCreature(cid) or not isCreature(target) then return true end
doSendDistanceShoot(getThingPos(cid), getThingPos(target), effect)
return true
end

function doSetItemActionId(uid, actionid)
doItemSetAttribute(uid, "aid", actionid)
return true
end

function threeNumbers(number)
    if number <= 9 then
    return "00"..number..""
    elseif number <= 99 then
    return "0"..number..""
    end
return ""..number..""
end

function isBr(cid)
if getPlayerStorageValue(cid, 105505) ~= -1 then
return true
end
return false
end

function isBeingUsed(ball)            
if not ball then return false end
for a, b in pairs (pokeballs) do           --alterado v1.9
    if b.use == ball then return true end
end
return false
end

function doRemoveTile(pos)-- Script by mock
pos.stackpos = 0
local sqm = getTileThingByPos(pos)
doRemoveItem(sqm.uid,1)
end

function doCreateTile(id,pos) -- By mock
doAreaCombatHealth(0,0,pos,0,0,0,CONST_ME_NONE)
doCreateItem(id,1,pos)
end

function hasSqm(pos)
local f = getTileThingByPos(pos)
if f.itemid ~= 0 and f.itemid ~= 1 then
return true
end
return false
end

function getPosDirs(p, dir) -- By MatheusMkalo
return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
end

function canWalkOnPos(pos, creature, pz, water, sqm, proj)
if not pos then return false end
if not pos.x then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end
if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false end
    local n = not proj and 3 or 2                                    --alterado v1.6
    for i = 0, 255 do
        pos.stackpos = i                           
        local tile = getTileThingByPos(pos)        
        if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then     --edited
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end   
return true
end

function canWalkOnPos2(pos, creature, pz, water, sqm, proj)     --alterado v1.6
if not pos then return false end
if not pos.x then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end
if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false end
    --[[local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i                           --edited pra retirar um bug.. ;x
        local tile = getTileThingByPos(pos)        
        if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then     --edited
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end ]]  
return true
end

function getFreeTile(pos, cid)
    if canWalkOnPos(pos, true, false, true, true, false) then
        return pos
    end
    local positions = {}
    for a = 0, 7 do
        if canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then
        table.insert(positions, pos)
        end
    end
    if #positions >= 1 then
        if isCreature(cid) then
            local range = 1000
            local ret = getThingPos(cid)
            for b = 1, #positions do
                if getDistanceBetween(getThingPos(cid), positions) < range then
                    ret = positions
                    range = getDistanceBetween(getThingPos(cid), positions)
                end
            end
            return ret
        else
            return positions[math.random(#positions)]
        end
    end
return getThingPos(cid)
end

function isWalkable(pos, creature, proj, pz, water)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end


function isPlayerSummon(cid, uid)
return getCreatureMaster(uid) == cid  --alterado v1.9
end

function isSummon(sid)
return isCreature(sid) and getCreatureMaster(sid) ~= sid and isPlayer(getCreatureMaster(sid))   --alterado v1.9
end 

function getItemsInContainerById(container, itemid) -- Function By Kydrai
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
   for slot=0, (getContainerSize(container)-1) do
       local item = getContainerItem(container, slot)
       if isContainer(item.uid) then
          local itemsbag = getItemsInContainerById(item.uid, itemid)
          for i=0, #itemsbag do
              table.insert(items, itemsbag)
          end
       else
          if itemid == item.itemid then
             table.insert(items, item.uid)
          end
       end
   end
end
return items
end

function getPokeballsInContainer(container) -- Function By Kydrai
    if not isContainer(container) then return {} end
    local items = {}
    if isContainer(container) and getContainerSize(container) > 0 then
        for slot=0, (getContainerSize(container)-1) do
            local item = getContainerItem(container, slot)
                if isContainer(item.uid) then
                    local itemsbag = getPokeballsInContainer(item.uid)
                    for i=0, #itemsbag do
                        table.insert(items, itemsbag)
                    end
                elseif isPokeball(item.itemid) then
                    table.insert(items, item.uid)
                end
        end
    end
return items
end

function getItensUniquesInContainer(container)    --alterado v1.6
if not isContainer(container) then return {} end
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
   for slot=0, (getContainerSize(container)-1) do
       local item = getContainerItem(container, slot)
       if isContainer(item.uid) then
          local itemsbag = getItensUniquesInContainer(item.uid)
          for i=0, #itemsbag do
              table.insert(items, itemsbag)
          end
       elseif getItemAttribute(item.uid, "unique") then
          table.insert(items, item)
       end
   end
end
return items
end

function hasSpaceInContainer(container)                --alterado v1.6
if not isContainer(container) then return false end
if getContainerSize(container) < getContainerCap(container) then return true end

for slot = 0, (getContainerSize(container)-1) do
    local item = getContainerItem(container, slot)
    if isContainer(item.uid) then
       if hasSpaceInContainer(item.uid) then
          return true
       end
    end
end
return false
end

function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo
local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
local piles = 0
if #item > 0 then
   for i,x in pairs(item) do
       if getThing(x).type < 100 then
          local it = getThing(x)
          doTransformItem(it.uid, itemid, it.type+quant)
          if it.type+quant > 100 then
             doPlayerAddItem(cid, itemid, it.type+quant-100)
          end
       else
          piles = piles+1
       end
   end
else
   return doPlayerAddItem(cid, itemid, quant)
end
if piles == #item then
   doPlayerAddItem(cid, itemid, quant)
end
end

function getSmeargleMoveTable(master)
  local ball = getPlayerSlotItem(master, 8).uid
  local moves = {}
  local skts = {"skt1", "skt2", "skt3", "skt4", "skt5", "skt6", "skt7", "skt8"}
  for x=1, #skts do
    moves["move"..x] = getItemAttribute(ball, skts[x]) and movestable[getItemAttribute(ball, skts[x])]["move"..x] and movestable[getItemAttribute(ball, skts[x])]["move"..x] ~= -1 and movestable[getItemAttribute(ball, skts[x])]["move"..x] or movestable["Smeargle"]["move"..x]
  end
  return moves
  end

function smeargleHaveSpell(cid, spellname)
local has = false
local moves = getSmeargleMoveTable(cid)
 local ball = getPlayerSlotItem(cid, 8).uid
local skts = {"skt1", "skt2", "skt3", "skt4", "skt5", "skt6", "skt7", "skt8"}
for x=1, #skts do
if getItemAttribute(ball, skts[x]) and moves["move"..x].name == spellname then
has = true
break
end
end
return has
end 

function doPlayerAddItemStacking(cid, itemid, quant) 
local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
local piles = 0
if #item > 0 then
for i,x in pairs(item) do
if getThing(x).type < 100 then
local it = getThing(x)
doTransformItem(it.uid, itemid, it.type+quant)
if it.type+quant > 100 then
doPlayerAddItem(cid, itemid, it.type+quant-100)
end
else
piles = piles+1
end
break
end
else
return doPlayerAddItem(cid, itemid, quant)
end
if piles == #item then
doPlayerAddItem(cid, itemid, quant)
end
end  

 

createpoke.lua(talkactions)

Spoiler

local typess = {       --alterado v2.9 \/  TUDO!!
[1] = "normal",
[2] = "great",
[3] = "super",
[4] = "ultra",
[5] = "saffari",
}
function onSay(cid, words, param)

if param == "" or param == " " then
   doPlayerSendCancel(cid, 'Command needs parameters, function structure: "/cb [Pokemon Name], [boost], [ball type]".')
   return false
end

local t = string.explode(param, ",")
--
local name = ""
local btype = (tostring(t[4]) and pokeballs[t[4]]) and t[4] or typess[math.random(1, #typess)]       

if tostring(t[1]) then
    name = doCorrectString(t[1])   
    if not pokes[name] then
       doPlayerSendCancel(cid, "Sorry, a pokemon with the name "..name.." doesn't exists.")
       return true
    end
print(""..name.." ball has been created by "..getPlayerName(cid)..".")
end

addPokeToPlayer(cid, name, (t[2] and tonumber(t[2]) or 0), btype)

return true
end

 

qualquer coisa, se der erro posta ai e me marca

Link para o comentário
Compartilhar em outros sites

  • 0
16 minutos atrás, Kal El disse:

ok... copia esses, e susbistitui pelos teus..

look.lua(creaturescript)

  Mostrar conteúdo oculto

local addons = {
    [12892] = {pokemon= "Golem" , looktype = 1902, count = 1},
    [13027] = {pokemon= "Aggron" , looktype = 1903, count = 1},
    [12941] = {pokemon= "Aggron" , looktype = 1904, count = 1},
    [13002] = {pokemon= "Snorlax" , looktype = 1905, count = 1},
    [12865] = {pokemon= "Kangaskhan" , looktype = 1906, count = 1},
    [12948] = {pokemon= "Shiny Electivire" , looktype = 1907, count = 1},
    [12949] = {pokemon= "Shiny Electabuzz" , looktype = 1908, count = 1},
    [12901] = {pokemon= "Mr. Mime" , looktype = 1909, count = 1},
    [12942] = {pokemon= "Miltank" , looktype = 1910, count = 1},
    [12909] = {pokemon= "Blissey" , looktype = 1912, count = 1},
    [12943] = {pokemon= "Xatu" , looktype = 1913, count = 1},
    [13014] = {pokemon= "Meganium" , looktype = 1914, count = 1},
    [13016] = {pokemon= "Feraligatr" , looktype = 1916, count = 1},
    [13021] = {pokemon= "Feraligatr" , looktype = 1918, count = 1},
    [13013] = {pokemon= "Typhlosion" , looktype = 1919, count = 1},
    [12913] = {pokemon= "Electivire" , looktype = 1920, count = 1},
    [12961] = {pokemon= "Gengar" , looktype = 1921, count = 1},
    [12959] = {pokemon= "Jinx" , looktype = 1922, count = 1},
    [12945] = {pokemon= "Gardevoir" , looktype = 1923, count = 1},
    [12877] = {pokemon= "Scyther" , looktype = 1924, count = 1},
    [12960] = {pokemon= "Jinx" , looktype = 1926, count = 1},
    [12988] = {pokemon= "Snorlax" , looktype = 1927, count = 1},
    [12876] = {pokemon= "Scyther" , looktype = 1928, count = 1},
    [12875] = {pokemon= "Scyther" , looktype = 1930, count = 1},
    [12914] = {pokemon= "Omanyte" , looktype = 1932, count = 1},
    [12989] = {pokemon= "Snorlax" , looktype = 1934, count = 1},
    [13026] = {pokemon= "Hitmonchan" , looktype = 1950, count = 1},
    [12923] = {pokemon= "Blaziken" , looktype = 1951, count = 1},
    [12992] = {pokemon= "Scizor" , looktype = 1952, count = 1},
    [13000] = {pokemon= "Miltank" , looktype = 1954, count = 1},
    [12998] = {pokemon= "Gardevoir" , looktype = 1955, count = 1},
    [12999] = {pokemon= "Miltank" , looktype = 1956, count = 1},
    [12996] = {pokemon= "Swampert" , looktype = 1957, count = 1},
    [12993] = {pokemon= "Electabuzz" , looktype = 1958, count = 1},
    [12995] = {pokemon= "Magmar" , looktype = 1960, count = 1},
    [12997] = {pokemon= "Tyranitar" , looktype = 1963, count = 1},
    [13007] = {pokemon= "Gardevoir" , looktype = 1964, count = 1},
    [13008] = {pokemon= "Gardevoir" , looktype = 1965, count = 1},
    [13009] = {pokemon= "Gardevoir" , looktype = 1966, count = 1},
    [13199] = {pokemon= "Gardevoir" , looktype = 1967, count = 1},
    [13029] = {pokemon= "Typhlosion" , looktype = 1969, count = 1},
    [13020] = {pokemon= "Feraligatr" , looktype = 1970, count = 1},
    [13037] = {pokemon= "Hitmontop" , looktype = 1973, count = 1},
    [12967] = {pokemon= "Crobat" , looktype = 1974, count = 1},
    [13004] = {pokemon= "Aggron" , looktype = 1976, count = 1},
    [12950] = {pokemon= "Shiny Charizard" , looktype = 1982, count = 1},
    [13025] = {pokemon= "Shiny Vileplume" , looktype = 1983, count = 1},
    [13038] = {pokemon= "Lapras" , looktype = 1989, count = 1},
    [13039] = {pokemon= "Tentacruel" , looktype = 1991, count = 1},
    [12921] = {pokemon= "Nidoking" , looktype = 1999, count = 1},
    [13040] = {pokemon= "Lapras" , looktype = 1893, count = 1},
    [12946] = {pokemon= "Gardevoir" , looktype = 1894, count = 1},
    [13041] = {pokemon= "Arcanine" , looktype = 1895, count = 1},
    [13042] = {pokemon= "Aggron" , looktype = 1896, count = 1},
    [12990] = {pokemon= "Snorlax" , looktype = 1897, count = 1},
    [13046] = {pokemon= "Charizard" , looktype = 1898, count = 1},
    [13045] = {pokemon= "Charizard" , looktype = 2000, count = 1},
    [13043] = {pokemon= "Charizard" , looktype = 2001, count = 1},
    [13047] = {pokemon= "Gengar" , looktype = 2003, count = 1},
    [13048] = {pokemon= "Gengar" , looktype = 2004, count = 1},
    [13049] = {pokemon= "Gengar" , looktype = 2005, count = 1},
    [12900] = {pokemon= "Alakazam" , looktype = 2006, count = 1},
    [13050] = {pokemon= "Alakazam" , looktype = 2007, count = 1},
    [12899] = {pokemon= "Alakazam" , looktype = 2008, count = 1},
    [13051] = {pokemon= "Alakazam" , looktype = 2009, count = 1},
    [12890] = {pokemon= "Shiny Gengar" , looktype = 2011, count = 1},
    [12889] = {pokemon= "Shiny Gengar" , looktype = 2012, count = 1},
    [13052] = {pokemon= "Shiny Raichu" , looktype = 2013, count = 1},
    [13058] = {pokemon= "Shiny Raichu" , looktype = 2014, count = 1},
    [12893] = {pokemon= "Golem" , looktype = 2025, count = 1},
    [13053] = {pokemon= "Shiny Abra" , looktype = 2027, count = 1},
    [13057] = {pokemon= "Shiny Alakazam" , looktype = 2028, count = 1},
    [13054] = {pokemon= "Shiny Alakazam" , looktype = 2029, count = 1},
    [13056] = {pokemon= "Shiny Alakazam" , looktype = 2030, count = 1},
    [13055] = {pokemon= "Shiny Alakazam" , looktype = 2031, count = 1},
    [12871] = {pokemon= "Shiny Electabuzz" , looktype = 2039, count = 1},
    [12912] = {pokemon= "Shiny Electabuzz" , looktype = 2040, count = 1},
    [13059] = {pokemon= "Shiny Jinx" , looktype = 2043, count = 1},
    [13060] = {pokemon= "Shiny Jinx" , looktype = 2044, count = 1},
    [12907] = {pokemon= "Shiny Pidgeot" , looktype = 2063, count = 1},
    [12908] = {pokemon= "Shiny Pidgeot" , looktype = 2064, count = 1},
    [12906] = {pokemon= "Shiny Pidgeot" , looktype = 2065, count = 1},
    [12872] = {pokemon= "Machamp" , looktype = 2067, count = 1},
    [12940] = {pokemon= "Shiny Charizard" , looktype = 2086, count = 1},
    [13308] = {pokemon= "Shiny Charizard" , looktype = 2084, count = 1},
    [12938] = {pokemon= "Ursaring" , looktype = 2088, count = 1},
    [12937] = {pokemon= "Shiny Gengar" , looktype = 2078, count = 1},
    [12939] = {pokemon= "Gengar" , looktype = 2080, count = 1},
    [12883] = {pokemon= "Shiny Gengar" , looktype = 2081, count = 1},
}

local NPCBattle = {
    ["Brock"] = {artig = "He is", cidbat = "Pewter"},
    ["Misty"] = {artig = "She is", cidbat = "Cerulean"},
    ["Blaine"] = {artig = "He is", cidbat = "Cinnabar"},
    ["Sabrina"] = {artig = "She is", cidbat = "Saffron"},         --alterado v1.9 \/ peguem tudo!
    ["Kira"] = {artig = "She is", cidbat = "Viridian"},
    ["Koga"] = {artig = "He is", cidbat = "Fushcia"},
    ["Erika"] = {artig = "She is", cidbat = "Celadon"},
    ["Surge"] = {artig = "He is", cidbat = "Vermilion"},
}

function onLook(cid, thing, position, lookDistance)
    local str = {}
    if not isCreature(thing.uid) then
        if not isPokeball(thing.itemid) then
            if priceList[getItemInfo(thing.itemid).name] then
                price = priceList[getItemInfo(thing.itemid).name].price

                if thing.type > 1 then
                    str = "You see "..thing.type.." "..getItemInfo(thing.itemid).plural.."."
                    price = price * thing.type
                else
                    str = "You see "..getItemInfo(thing.itemid).article.." "..getItemInfo(thing.itemid).name.."."
                end

                str = str.." Price: $"..price.."."
                if getItemAttribute(thing.uid, "description") then
                    str = str.."\n"..getItemAttribute(thing.uid, "description").."."
                end

                if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then
                    str = str.."\nItemID: ["..thing.itemid.."]."                                                      --alterado v1.7
                    local pos = getThingPos(thing.uid)
                    str = str.."\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]"
                end

                doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str)
                return false
            end
        end

        local iname = getItemInfo(thing.itemid)
        if isPokeball(thing.itemid) and getItemAttribute(thing.uid, "poke") then
            unLock(thing.uid)
            local lock = getItemAttribute(thing.uid, "lock")
            local pokename = getItemAttribute(thing.uid, "poke")
            table.insert(str, "You see "..iname.article.." "..iname.name..".")

            if getItemAttribute(thing.uid, "unique") then
                table.insert(str, " It's an unique item.")
            end

            table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename..".\n")
            if lock and lock > 0 then
                table.insert(str, "It will unlock in ".. os.date("%d/%m/%y %X", lock)..".\n")
            end

            local boost = getItemAttribute(thing.uid, "boost") or 0
            if boost > 0 then
                table.insert(str, "Boost level: +"..boost..".\n")
            end

            if getItemAttribute(thing.uid, "nick") then
                table.insert(str, "It's nickname is: "..getItemAttribute(thing.uid, "nick")..".\n")
            end

            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
            return false
        elseif string.find(iname.name, "fainted") or string.find(iname.name, "defeated") then
            table.insert(str, "You see a "..string.lower(iname.name)..". ")

            if isContainer(thing.uid) then
                table.insert(str, "(Vol: "..getContainerCap(thing.uid)..")")
            end

            table.insert(str, "\n")

            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
            return false
        elseif isContainer(thing.uid) then     --containers
            if iname.name == "dead human" and getItemAttribute(thing.uid, "pName") then
                table.insert(str, "You see a dead human (Vol:"..getContainerCap(thing.uid).."). ")
                table.insert(str, "You recognize ".. getItemAttribute(thing.uid, "pName")..". ".. getItemAttribute(thing.uid, "article").." was killed by a ")
                table.insert(str, getItemAttribute(thing.uid, "attacker")..".")
            else
                table.insert(str, "You see "..iname.article.." "..iname.name..". (Vol:"..getContainerCap(thing.uid)..").")
            end

            if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then
                table.insert(str, "\nItemID: ["..thing.itemid.."]")
                local pos = getThingPos(thing.uid)
                table.insert(str, "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]")
            end

            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
            return false
        elseif getItemAttribute(thing.uid, "unique") then
            local p = getThingPos(thing.uid)

            table.insert(str, "You see ")
            if thing.type > 1 then
                table.insert(str, thing.type.." "..iname.plural..".")
            else
                table.insert(str, iname.article.." "..iname.name..".")
            end

            table.insert(str, " It's an unique item.\n"..iname.description)
          
            if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then
                table.insert(str, "\nItemID: ["..thing.itemid.."]")
                table.insert(str, "\nPosition: ["..p.x.."]["..p.y.."]["..p.z.."]")
            end

            sendMsgToPlayer(cid, MESSAGE_INFO_DESCR, table.concat(str))
            return false
        else
            return true
        end
    end

    local npcname = getCreatureName(thing.uid)
    if ehNPC(thing.uid) and NPCBattle[npcname] then    --npcs duel
        table.insert(str, "You see "..npcname..". "..NPCBattle[npcname].artig.." leader of the gym from "..NPCBattle[npcname].cidbat..".")
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
        return false
    end

    if getPlayerStorageValue(thing.uid, 697548) ~= -1 then
        table.insert(str, getPlayerStorageValue(thing.uid, 697548))
        local pos = getThingPos(thing.uid)
        if youAre[getPlayerGroupId(cid)] then
            table.insert(str, "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]")
        end
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
        return false
    end

    if not isPlayer(thing.uid) and not isMonster(thing.uid) then    --outros npcs
        table.insert(str, "You see "..getCreatureName(thing.uid)..".")
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
        return false
    end

    if isPlayer(thing.uid) then     --player
        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, getPlayerDesc(cid, thing.uid, false))
        return false
    end

    if getCreatureName(thing.uid) == "Evolution" then
        return false
    end

    if not isSummon(thing.uid) then   --monstros
        table.insert(str, "You see a wild "..string.lower(getCreatureName(thing.uid))..".\n")
        table.insert(str, "Hit Points: "..getCreatureHealth(thing.uid).." / "..getCreatureMaxHealth(thing.uid)..".\n")

        doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
        return false
    elseif isSummon(thing.uid) and not isPlayer(thing.uid) then  --summons
        local boostlevel = getItemAttribute(getPlayerSlotItem(getCreatureMaster(thing.uid), 8).uid, "boost") or 0
        if getCreatureMaster(thing.uid) == cid then
            local myball = getPlayerSlotItem(cid, 8).uid
            table.insert(str, "You see your "..string.lower(getCreatureName(thing.uid))..".")
            if boostlevel > 0 then
                table.insert(str, "\nBoost level: +"..boostlevel..".")
            end
            table.insert(str, "\nHit points: "..getCreatureHealth(thing.uid).."/"..getCreatureMaxHealth(thing.uid)..".")
            table.insert(str, "\n"..getPokemonHappinessDescription(thing.uid))
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str))
        else
            doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You see a "..string.lower(getCreatureName(thing.uid))..".\nIt belongs to "..getCreatureName(getCreatureMaster(thing.uid))..".")
        end
        return false
    end
    return true
end

 

level system.lua(lib)

  Mostrar conteúdo oculto

function adjustWildPoke(cid, optionalLevel)
if isMonster(cid) and pokes[getCreatureName(cid)] then

    local level = (optionalLevel and optionalLevel >= 1) and optionalLevel or getPokemonLevel(cid)  --alterado v1.8


    setPlayerStorageValue(cid, 1000, level) --alterado v1.8
    setPlayerStorageValue(cid, 1001, pokes[getCreatureName(cid)].offense * level)
    setPlayerStorageValue(cid, 1002, pokes[getCreatureName(cid)].defense)
    setPlayerStorageValue(cid, 1003, pokes[getCreatureName(cid)].agility)                                  
    setPlayerStorageValue(cid, 1004, pokes[getCreatureName(cid)].vitality * level)
    setPlayerStorageValue(cid, 1005, pokes[getCreatureName(cid)].specialattack * level)
    
    
    doRegainSpeed(cid)         --alterado!
    setCreatureMaxHealth(cid, (getVitality(cid) * HPperVITwild)) 
    doCreatureAddHealth(cid,  getCreatureMaxHealth(cid))
   
    if pokes[getCreatureName(cid)].exp then
       local exp = pokes[getCreatureName(cid)].exp * baseExpRate + pokes[getCreatureName(cid)].vitality * pokemonExpPerLevelRate
       setPlayerStorageValue(cid, 1006, (exp * generalExpRate/2)*10)
       if getPlayerStorageValue(cid, 22546) == 1 then
          setPlayerStorageValue(cid, 1006, 750)
          doSetCreatureDropLoot(cid, false)      
       end   
    end
end
end       

function getPokemonXMLOutfit(name)                --alterado v1.9 \/
local path = "data/monster/pokes/Shiny/"..name..".xml"
local tpw = io.type(io.open(path))

if not tpw then
   path = "data/monster/pokes/geracao 1/"..name..".xml"
   tpw = io.type(io.open(path))
end
if not tpw then
   path = "data/monster/pokes/geracao 2/"..name..".xml"
   tpw = io.type(io.open(path))
end
if not tpw then
   path = "data/monster/pokes/geracao 3/"..name..".xml"
   tpw = io.type(io.open(path))
end
if not tpw then
   path = "data/monster/pokes/geracao 4/"..name..".xml"
   tpw = io.type(io.open(path))
end
if not tpw then
   path = "data/monster/pokes/"..name..".xml"
   tpw = io.type(io.open(path))
end   
if not tpw then
   return print("[getPokemonXMLOutfit] Poke with name: "..name.." ins't in any paste on monster/pokes/") and 2
end
   local arq = io.open(path, "a+")
   local txt = arq:read("*all")
   arq:close()
   local a, b = txt:find('look type="(.-)"')
   txt = string.sub(txt, a + 11, b - 1)
return tonumber(txt)
end 

function doEvolutionOutfit(cid, oldout, outfit)
    if not isCreature(cid) then return true end
        if getCreatureOutfit(cid).lookType == oldout then
            doSetCreatureOutfit(cid, {lookType = outfit}, -1)
        else
            doSetCreatureOutfit(cid, {lookType = oldout}, -1)
        end
end

function doSendEvolutionEffect(cid, pos, evolution, turn, ssj, evolve, f, h)
    if not isCreature(cid) then
        doSendAnimatedText(pos, "CANCEL", 215)
        return true 
    end
    if evolve then
        doEvolvePokemon(getCreatureMaster(cid), {uid = cid}, evolution, 0, 0)
    return true
    end
    doSendMagicEffect(pos, 18)
        if ssj then
            sendSSJEffect(evo)
        end
    doEvolutionOutfit(cid, f, h)
    addEvent(doSendEvolutionEffect, math.pow(1900, turn/20), cid, getThingPos(cid), evolution, turn - 1, turn == 19, turn == 2, f, h)
end

function sendSSJEffect(cid)
    if not isCreature(cid) then return true end
    local pos1 = getThingPos(cid)
    local pos2 = getThingPos(cid)
    pos2.x = pos2.x + math.random(-1, 1)
    pos2.y = pos2.y - math.random(1, 2)
    doSendDistanceShoot(pos1, pos2, 37)
    addEvent(sendSSJEffect, 45, cid)
end

function sendFinishEvolutionEffect(cid, alternate)
    if not isCreature(cid) then return true end
    local pos1 = getThingPos(cid)

    if alternate then
        local pos = {
        [1] = {-2, 0},
        [2] = {-1, -1},
        [3] = {0, -2},
        [4] = {1, -1},
        [5] = {2, 0},
        [6] = {1, 1},
        [7] = {0, 2},
        [8] = {-1, 1}}
        for a = 1, 8 do
            local pos2 = getThingPos(cid)
            pos2.x = pos2.x + pos[a][1]
            pos2.y = pos2.y + pos[a][2]
            local pos = getThingPos(cid)
            doSendDistanceShoot(pos2, pos, 37)
            addEvent(doSendDistanceShoot, 300, pos, pos2, 37)
        end
    else
        for a = 0, 3 do
            doSendDistanceShoot(pos1, getPosByDir(pos1, a), 37)
        end
        for a = 4, 7 do
            addEvent(doSendDistanceShoot, 600, pos1, getPosByDir(pos1, a), 37)
        end
    end
end

function doEvolvePokemon(cid, item2, theevo, stone1, stone2)

    if not isCreature(cid) then return true end

    if not pokes[theevo] or not pokes[theevo].offense then
    doReturnPokemon(cid, item2.uid, getPlayerSlotItem(cid, 8), pokeballs[getPokeballType(getPlayerSlotItem(cid, 8).itemid)].effect, false, true)
    return true
    end

    local owner = getCreatureMaster(item2.uid)
    local pokeball = getPlayerSlotItem(cid, ?
    local description = "Contains a "..theevo.."."
    local pct = getCreatureHealth(item2.uid) / getCreatureMaxHealth(item2.uid)

        doItemSetAttribute(pokeball.uid, "hp", pct)

        doItemSetAttribute(pokeball.uid, "poke", theevo)
        doItemSetAttribute(pokeball.uid, "description", "Contains a "..theevo..".")

        doPlayerSendTextMessage(cid, 27, "Congratulations! Your "..getPokeName(item2.uid).." evolved into a "..theevo.."!")        

        doSendMagicEffect(getThingPos(item2.uid), 18)
        doTransformItem(getPlayerSlotItem(cid, 7).uid, fotos[theevo])
        doSendMagicEffect(getThingPos(cid), 173)

        local oldpos = getThingPos(item2.uid)
        local oldlod = getCreatureLookDir(item2.uid)
        doRemoveCreature(item2.uid)

        doSummonMonster(cid, theevo)
        local pk = getCreatureSummons(cid)[1]

        doTeleportThing(pk, oldpos, false)
        doCreatureSetLookDir(pk, oldlod)

        sendFinishEvolutionEffect(pk, true)
        addEvent(sendFinishEvolutionEffect, 550, pk, true)
        addEvent(sendFinishEvolutionEffect, 1050, pk)
        
        doPlayerRemoveItem(cid, stone1, 1)
        doPlayerRemoveItem(cid, stone2, 1)

        doAddPokemonInOwnList(cid, theevo)

        local happy = getItemAttribute(pokeball.uid, "happy")

        doItemSetAttribute(pokeball.uid, "happy", happy + happyGainedOnEvolution)

        if happy + happyGainedOnEvolution > 255 then
            doItemSetAttribute(pokeball.uid, "happy", 255)
        end

        adjustStatus(pk, pokeball.uid, true, false)

        if useKpdoDlls then
            doUpdateMoves(cid)
        end
end

function doMathDecimal(number, casas)

    if math.floor(number) == number then return number end

    local c = casas and casas + 1 or 3

    for a = 0, 10 do
        if math.floor(number) < math.pow(10, a) then
            local str = string.sub(""..number.."", 1, a + c)
            return tonumber(str)    
        end
    end

return number
end

function doAdjustWithDelay(cid, pk, health, vit, status)
if isCreature(cid) then                                   
   adjustStatus(pk, getPlayerSlotItem(cid, 8).uid, health, vir, status)
end
end

function adjustStatus(pk, item, health, vite, conditions)

    if not isCreature(pk) then return true end


    setPlayerStorageValue(pk, 1001, pokes[getCreatureName(pk)].offense * (getMasterLevel(pk) + getPokemonBoost(pk)))
    setPlayerStorageValue(pk, 1002, pokes[getCreatureName(pk)].defense)             
    setPlayerStorageValue(pk, 1003, pokes[getCreatureName(pk)].agility)
    setPlayerStorageValue(pk, 1004, pokes[getCreatureName(pk)].vitality * (getMasterLevel(pk) + getPokemonBoost(pk)))
    setPlayerStorageValue(pk, 1005, pokes[getCreatureName(pk)].specialattack * (getMasterLevel(pk) + getPokemonBoost(pk)))
    
    if vite == true then
        local pct = getCreatureHealth(pk) / getCreatureMaxHealth(pk)
        local vit = getVitality(pk)
        setCreatureMaxHealth(pk, ( vit * HPperVITsummon ))
        doCreatureAddHealth(pk, pct * vit * HPperVITsummon)
    end
                                                                      
    doRegainSpeed(pk)  

    local nick = getItemAttribute(item, "poke")

    if isGhostPokemon(pk) then
       setPlayerStorageValue(pk, 8981, 1)
       updateGhostWalk(pk)
    end
        
    if string.find(tostring(nick), "Shiny") then
       nick = tostring(nick):match("Shiny (.*)")
    end

    if getItemAttribute(item, "nick") then
        nick = getItemAttribute(item, "nick")
    end

    setPlayerStorageValue(pk, 1007, nick)

    doCreatureSetNick(pk, nick)

    if not getItemAttribute(item, "happy") then
        doItemSetAttribute(item, "happy", 120)
    end

    if not getItemAttribute(item, "hunger") then
        doItemSetAttribute(item, "hunger", 5)
    end

    local happy = getItemAttribute(item, "happy")
        if happy < 0 then
            happy = 1
        end
    setPlayerStorageValue(pk, 1008, happy)

    local hunger = getItemAttribute(item, "hunger")
    setPlayerStorageValue(pk, 1009, hunger)

    if health == true then
        local mh = HPperVITsummon * getVitality(pk)
        local rd = 1 - (tonumber(getItemAttribute(item, "hp")))
        setCreatureMaxHealth(pk, mh)                                  
        doCreatureAddHealth(pk, getCreatureMaxHealth(pk))
        doCreatureAddHealth(pk, -(getCreatureMaxHealth(pk) * rd))
    end

    if isSummon(pk) and conditions then
        local burn = getItemAttribute(item, "burn")   
        if burn and burn >= 0 then
           local ret = {id = pk, cd = burn, check = false, damage = getItemAttribute(item, "burndmg"), cond = "Burn"}
           addEvent(doCondition2, 3500, ret)
        end

        local poison = getItemAttribute(item, "poison")
        if poison and poison >= 0 then
           local ret = {id = pk, cd = poison, check = false, damage = getItemAttribute(item, "poisondmg"), cond = "Poison"}
           addEvent(doCondition2, 1500, ret)
        end

        local confuse = getItemAttribute(item, "confuse")
        if confuse and confuse >= 0 then
           local ret = {id = pk, cd = confuse, check = false, cond = "Confusion"}
           addEvent(doCondition2, 1200, ret)                                                
        end

        local sleep = getItemAttribute(item, "sleep")
        if sleep and sleep >= 0 then
           local ret = {id = pk, cd = sleep, check = false, first = true, cond = "Sleep"}
           doCondition2(ret)
        end
        
        local miss = getItemAttribute(item, "miss")     
        if miss and miss >= 0 then      
          local ret = {id = pk, cd = miss, eff = getItemAttribute(item, "missEff"), check = false, spell = getItemAttribute(item, "missSpell"), cond = "Miss"}
          doCondition2(ret)
        end
        
        local fear = getItemAttribute(item, "fear")
        if fear and fear >= 0 then
           local ret = {id = pk, cd = fear, check = false, skill = getItemAttribute(item, "fearSkill"), cond = "Fear"}
           doCondition2(ret)
        end
        
        local silence = getItemAttribute(item, "silence")
        if silence and silence >= 0 then      
           local ret = {id = pk, cd = silence, eff = getItemAttribute(item, "silenceEff"), check = false, cond = "Silence"}
           doCondition2(ret)
        end                                     
        
        local stun = getItemAttribute(item, "stun")
        if stun and stun >= 0 then
           local ret = {id = pk, cd = stun, eff = getItemAttribute(item, "stunEff"), check = false, spell = getItemAttribute(item, "stunSpell"), cond = "Stun"}
           doCondition2(ret)
        end 
                                                       
        local paralyze = getItemAttribute(item, "paralyze")
        if paralyze and paralyze >= 0 then
           local ret = {id = pk, cd = paralyze, eff = getItemAttribute(item, "paralyzeEff"), check = false, first = true, cond = "Paralyze"}
           doCondition2(ret)
        end  
                                                     
        local slow = getItemAttribute(item, "slow")
        if slow and slow >= 0 then
           local ret = {id = pk, cd = slow, eff = getItemAttribute(item, "slowEff"), check = false, first = true, cond = "Slow"}
           doCondition2(ret)
        end                                              
        
        local leech = getItemAttribute(item, "leech")
        if leech and leech >= 0 then
           local ret = {id = pk, cd = leech, attacker = 0, check = false, damage = getItemAttribute(item, "leechdmg"), cond = "Leech"}
           doCondition2(ret)
        end                               
        
        for i = 1, 3 do
            local buff = getItemAttribute(item, "Buff"..i)
            if buff and buff >= 0 then
               local ret = {id = pk, cd = buff, eff = getItemAttribute(item, "Buff"..i.."eff"), check = false, 
               buff = getItemAttribute(item, "Buff"..i.."skill"), first = true, attr = "Buff"..i}
               doCondition2(ret)
            end
        end
               
    end
                                                                          --alterado v1.9
    if getItemAttribute(item, "boost") and getItemAttribute(item, "boost") >= 50 and getItemAttribute(item, "aura") then
       sendAuraEffect(pk, auraSyst[getItemAttribute(item, "aura")])        
    end
    
    if getPlayerStorageValue(getCreatureMaster(pk), 6598754) >= 1 then
        setPlayerStorageValue(pk, 6598754, 1)                               
    elseif getPlayerStorageValue(getCreatureMaster(pk), 6598755) >= 1 then
        setPlayerStorageValue(pk, 6598755, 1)
    end

return true
end

function getOffense(cid)
    if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1001))
end

function getDefense(cid)
    if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1002))
end

function getSpeed(cid)
    if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1003))
end

function getVitality(cid)
    if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1004))
end

function getSpecialAttack(cid)
    if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1005))
end

function getHappiness(cid)
    if not isCreature(cid) then return 0 end
return tonumber(getPlayerStorageValue(cid, 1008))
end

function getSpecialDefense(cid)
    if not isCreature(cid) then return 0 end
return getSpecialAttack(cid) * 0.85 + getDefense(cid) * 0.2      
end

function getPokemonLevel(cid, dex)
if not isCreature(cid) then return 0 end 
    if not dex then                      --alterado v1.9
       if ehMonstro(cid) and getPlayerStorageValue(cid, 1000) > 0 then  
          return getPlayerStorageValue(cid, 1000)
       elseif ehMonstro(cid) then 
          return pokes[getCreatureName(cid)].wildLvl             
       end
    end   
return pokes[getCreatureName(cid)].level
end

function getPokemonLevelByName(name)
return pokes[name] and pokes[name].level or 0  --alterado v1.9
end

function getMasterLevel(poke)
    if not isSummon(poke) then return 0 end
return getPlayerLevel(getCreatureMaster(poke))
end

function getPokemonBoost(poke)
    if not isSummon(poke) then return 0 end
return getItemAttribute(getPlayerSlotItem(getCreatureMaster(poke), 8).uid, "boost") or 0
end

function getPokeballBoost(ball)
    if not isPokeball(ball.itemid) then return 0 end  --alterado v1.8
return getItemAttribute(ball.uid, "boost") or 0
end

function getPokeName(cid)
    if not isSummon(cid) then return getCreatureName(cid) end
    if getCreatureName(cid) == "Evolution" then return getPlayerStorageValue(cid, 1007) end
    
local item = getPlayerSlotItem(getCreatureMaster(cid), ?
    if getItemAttribute(item.uid, "nick") then
       return getItemAttribute(item.uid, "nick")
    end
    if string.find(tostring(getCreatureName(cid)), "Shiny") then
      local newName = tostring(getCreatureName(cid)):match("Shiny (.*)")
      return newName
    end
return getCreatureName(cid)
end

function getPokeballName(item, truename)
if not truename and getItemAttribute(item, "nick") then
return getItemAttribute(item, "nick")
end
return getItemAttribute(item, "poke")
end

function getPokemonName(cid)
return getCreatureName(cid)
end

function getWildPokemonExp(cid)
return getPlayerStorageValue(cid, 1006)
end
 

 

catch system.lua(lib)

  Mostrar conteúdo oculto

failmsgs = {
"Sorry, you didn't catch that pokemon.",
"Sorry, your pokeball broke.",
"Sorry, the pokemon escaped.",
}

function doBrokesCount(cid, str, ball)   --alterado v1.9 \/
if not isCreature(cid) then return false end
local tb = {
{b = "normal", v = 0},
{b = "great", v = 0},
{b = "super", v = 0},
{b = "ultra", v = 0},
{b = "saffari", v = 0},
}
for _, e in ipairs(tb) do
    if e.b == ball then
       e.v = 1
       break
    end
end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
local t2 = ""

for n, g, s, u, s2 in string:gmatch(t) do
    t2 = "normal = "..(n+tb[1].v)..", great = "..(g+tb[2].v)..", super = "..(s+tb[3].v)..", ultra = "..(u+tb[4].v)..", saffari = "..(s2+tb[5].v)..";"    
end
return setPlayerStorageValue(cid, str, string:gsub(t, t2))
end

function sendBrokesMsg(cid, str, ball)
if not isCreature(cid) then return false end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
local msg = {}
table.insert(msg, "You have wasted: ")

for n, g, s, u in string:gmatch(t) do
    if tonumber(n) and tonumber(n) > 0 then 
       table.insert(msg, tostring(n).." Poke ball".. (tonumber(n) > 1 and "s" or "")) 
    end
    if tonumber(g) and tonumber(g) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(g).." Great ball".. (tonumber(g) > 1 and "s" or "")) 
    end
    if tonumber(s) and tonumber(s) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s).." Super ball".. (tonumber(s) > 1 and "s" or "")) 
    end
    if tonumber(u) and tonumber(u) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(u).." Ultra ball".. (tonumber(u) > 1 and "s" or "")) 
    end
    if tonumber(s2) and tonumber(s2) > 0 then 
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s2).." Saffari ball".. (tonumber(s2) > 1 and "s" or "")) 
    end
end
if #msg == 1 then
   return true
end
if string.sub(msg[#msg], 1, 1) == "," then
   msg[#msg] = " and".. string.sub(msg[#msg], 2, #msg[#msg])
end
table.insert(msg, " trying to catch it.")
sendMsgToPlayer(cid, 27, table.concat(msg))
end                                                             --alterado v1.9 /\
--------------------------------------------------------------------------------

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 
       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 chance = (1 * rate + 1) / totalChance
        chance = doMathDecimal(chance * 100)

    if rate >= totalChance then
        local status = {}
              status.happy = 160

        doRemoveItem(corpse, 1)
        doSendMagicEffect(topos, catch)
        addEvent(doCapturePokemon, 3000, cid, name, newid, status, typeee)  
    return true
    end


    if totalChance <= 1 then totalChance = 1 end

    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.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, 3000, cid, name, newid, status, typeee) 
    else
        addEvent(doNotCapturePokemon, 3000, cid, name, typeee) 
        doSendMagicEffect(topos, fail)
    end
end

function doCapturePokemon(cid, poke, ballid, status, typeee)  

    if not isCreature(cid) then
    return true
    end
    
local list = getCatchList(cid)
    if not isInArray(list, poke) and not isShinyName(poke) then    
       doPlayerAddSoul(cid, 1)
    end

    doAddPokemonInOwnList(cid, poke)
    doAddPokemonInCatchList(cid, poke)
        CW_Count(cid, poke, typeee)
        CW_Caught(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 happy = 200
                                                   --alterado v1.9  \/                  
        if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
           item = doCreateItemEx(ballid)
        else
            item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, ballid, 1) 
        end

        doItemSetAttribute(item, "poke", poke)
        doItemSetAttribute(item, "hp", 1)
        doItemSetAttribute(item, "happy", happy)
        doItemSetAttribute(item, "fakedesc", description)
        doItemSetAttribute(item, "description", description)
        if poke == "Hitmonchan" or poke == "Shiny Hitmonchan" then    
           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))  
           doItemSetAttribute(item, "task", 1)
           setPlayerStorageValue(cid, 854788, 'done')
        end
        -------------------------------------------                                  --alterado v1.9 \/ 
    if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then   
        doPlayerSendMailByName(getCreatureName(cid), item, 1)   
        doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a pokemon ("..poke..")!")
        doPlayerSendTextMessage(cid, 27, "Since you are already holding six pokemons, this pokeball has been sent to your depot.")     
    else
        doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a ("..poke..")!")
    end
    
    local storage = newpokedex[poke].stoCatch 
    sendBrokesMsg(cid, storage, typeee)             
    setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0;") --alterado v1.9 /\

    if #getCreatureSummons(cid) >= 1 then
        doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173) 
            if catchMakesPokemonHappier then
                setPlayerStorageValue(getCreatureSummons(cid)[1], 1008, getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) + 20)
            end
    else
        doSendMagicEffect(getThingPos(cid), 173) 
    end

doIncreaseStatistics(poke, true, true)

end

function doNotCapturePokemon(cid, poke, typeee)  

    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)   
doIncreaseStatistics(poke, true, false)
CW_Count(cid, poke, typeee)

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  

 

some functions.lua(lib)

  Mostrar conteúdo oculto

function addPokeToPlayer(cid, pokemon, boost, ball, unique)             --alterado v1.9 \/ peguem ele todo...
if not isCreature(cid) then return false end

local pokemon = doCorrectString(pokemon)
if not pokes[pokemon] then return false end

   local btype = (ball and pokeballs[ball]) and ball or isShinyName(pokemon) and "shinynormal" or "normal"
   local happy = 250

   if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
      item = doCreateItemEx(11826)
   else
      item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, 11826, 1)   
   end
   if not item then return false end

   doItemSetAttribute(item, "poke", pokemon)
   doItemSetAttribute(item, "hp", 1)
   doItemSetAttribute(item, "happy", happy)
   doSetItemAttribute(item, "hands", 0)
   doItemSetAttribute(item, "description", "Contains a "..pokemon..".")
   doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") 
   if boost and tonumber(boost) and tonumber(boost) > 0 and tonumber(boost) <= 50 then
      doItemSetAttribute(item, "boost", boost)
   end
   if unique then
      doItemSetAttribute(item, "unique", getCreatureName(cid))
   end
                                                                             
   if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then
      doPlayerSendMailByName(getCreatureName(cid), item, 1)
      sendMsgToPlayer(cid, 27, "You are already holding six pokemons, so your new pokemon was sent to your depot.")
   end
   if (isShinyName(pokemon) or (boost and tonumber(boost) and tonumber(boost) >= 10)) and pokeballs["shiny"..btype] then
      doTransformItem(item, pokeballs["shiny"..btype].on)
   else
      doTransformItem(item, pokeballs[btype].on)
   end
return true
end 
---------------------------

function unLock(ball)                                                             
if not ball or ball <= 0 then return false end
if getItemAttribute(ball, "lock") and getItemAttribute(ball, "lock") > 0 then
   local vipTime = getItemAttribute(ball, "lock")
   local timeNow = os.time()
   local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60))
   if days <= 0 then
      doItemEraseAttribute(ball, "lock")    
      doItemEraseAttribute(ball, "unique")
      return true
   end
end
return false
end

function getGuildMembersOnline(GuildId)
local players = {}
for _, pid in pairs(getPlayersOnline()) do
    if getPlayerGuildId(pid) == tonumber(GuildId) then
       table.insert(players, pid)
    end
end                                                   --by Vodkart
return #players > 0 and players or false
end

function getGuildMembers(GuildId)
local players,query = {},db.getResult("SELECT `name` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " .. GuildId .. ");")
if (query:getID() ~= -1) then  
   repeat
         table.insert(players,query:getDataString("name"))
   until not query:next()                           --by Vodkart
   query:free()
end
return #players > 0 and players or false
end 
--/////////////////////////////////////////////////////////////////////////////////---
function sendMsgToPlayer(cid, tpw, msg)      --alterado v1.7 \/\/\/
if not isCreature(cid) or not tpw or not msg then return true end
return doPlayerSendTextMessage(cid, tpw, msg)
end

function getPlayerDesc(cid, thing, TV)
if (not isCreature(cid) or not isCreature(thing)) and not TV then return "" end

local pos = getThingPos(thing)
local ocup = youAre[getPlayerGroupId(thing)]
local rank = (getPlayerStorageValue(thing, 86228) <= 0) and "a Pokemon Trainer" or lookClans[getPlayerStorageValue(thing, 86228)][getPlayerStorageValue(thing, 862281)]
local name = thing == cid and "yourself" or getCreatureName(thing)     
local art = thing == cid and "You are" or (getPlayerSex(thing) == 0 and "She is" or "He is")
   
local str = {}
table.insert(str, "You see "..name..". "..art.." ")
if youAre[getPlayerGroupId(thing)] then
   table.insert(str, (ocup).." and "..rank.." from ".. getTownName(getPlayerTown(thing))..".")       
else
   table.insert(str, (rank).." from ".. getTownName(getPlayerTown(thing))..".")
end
if getPlayerGuildId(thing) > 0 then
   table.insert(str, " "..art.." "..getPlayerGuildRank(thing).." from the "..getPlayerGuildName(thing)..".")
end
if TV then
   table.insert(str, " "..art.." watching TV.")
end
table.insert(str, ((isPlayer(cid) and youAre[getPlayerGroupId(cid)]) and "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]" or "")) 

return table.concat(str) 
end
-------------------------------------------------------------------------------------------------   /\/\
function getLivePokeballs(cid, container, duel) 
    if not isCreature(cid) then return {} end     
    if not isContainer(container) then return {} end
    local items = {}
    ---
    local ballSlot = getPlayerSlotItem(cid, ?
    if ballSlot.uid ~= 0 then
       for a, b in pairs (pokeballs) do
           if ballSlot.itemid == b.on or ballSlot.itemid == b.use then
              if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(ballSlot.uid, "poke")].level + getPokeballBoost(ballSlot)) then
                 table.insert(items, ballSlot.uid)                                                                      --alterado v1.8
              elseif not duel then
                 table.insert(items, ballSlot.uid)
              end
           end
       end
    end
    ---     
    if isContainer(container) and getContainerSize(container) > 0 then      
        for slot=0, (getContainerSize(container)-1) do
            local item = getContainerItem(container, slot)
                if isContainer(item.uid) then
                    local itemsbag = getPokeballsInContainer(item.uid)
                    for i=0, #itemsbag do
                        if not isInArray(items, itemsbag) then
                           table.insert(items, itemsbag)
                        end
                    end
                elseif isPokeball(item.itemid) then
                    for a, b in pairs (pokeballs) do
                        if item.itemid == b.on then
                           if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(item.uid, "poke")].level + getPokeballBoost(item)) then    
                              table.insert(items, item.uid)                                            --alterado v1.8
                           elseif not duel then
                              table.insert(items, item.uid)
                           end
                        end
                    end
                end
        end
    end
return items
end

function addItemInFreeBag(container, item, num)
if not isContainer(container) or not item then return false end                                             
if not num or num <= 0 then num = 1 end                                            --alterado v1.6.1
if getContainerSize(container) < getContainerCap(container) then
   return doAddContainerItem(container, item, num)
else
   for slot = 0, (getContainerSize(container)-1) do
       local container2 = getContainerItem(container, slot)
       if isContainer(container2.uid) and getContainerSize(container2.uid) < getContainerCap(container2.uid) then
          return doAddContainerItem(container2.uid, item, num)
       end
   end
end
return false
end
------------------------------------------------------------------------------------------------------
function pokeHaveReflect(cid)
if not isCreature(cid) then return false end
local table = getTableMove(cid, "Reflect")
if table and table.name then     --alterado v1.6
   return true 
end
return false
end
------------------------------------------------------------------------------------------------------
function nextHorario(cid)
    horarioAtual = os.date("%X")
    horario = string.explode(horarioAtual, ":")
    
    for i = 1, #horas do
        horarioComparacao = horas
        horarioComp = string.explode(horarioComparacao, ":")
        ---------------
        if tonumber(horarioComp[1]) > tonumber(horario[1]) then
           return horarioComparacao                                
        elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then
           return horarioComparacao
        end
    end 
    return horas[1]                                  
end                                                               

function getTimeDiff(timeDiff)
local dateFormat = {
{'hour', timeDiff / 60 / 60}, --6%
{'min', timeDiff / 60 % 60},
}
local out = {}                                   
for k, t in ipairs(dateFormat) do
    local v = math.floor(t[2])
    if(v > -1) then
         table.insert(out, (k < #dateFormat and '' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s"))
    end
end
if tonumber(dateFormat[1][2]) == 0 and tonumber(dateFormat[2][2]) == 0 then
   return "seconds"
end
return table.concat(out)
end

function getTimeDiff2(timeDiff)
local dateFormat = {
{'hour', timeDiff / 60 / 60}, --6%
{'min', timeDiff / 60 % 60},
{'sec', timeDiff % 60},
}
local out = {}                                  
for k, t in ipairs(dateFormat) do
    local v = math.floor(t[2])
    if(v > 0) then
         table.insert(out, (k < #dateFormat and ' ' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s"))
    end
end
return table.concat(out)
end 

function showTimeDiff(timeComp)
local b = string.explode(os.date("%X"), ":")
local c = string.explode(timeComp, ":")
    ---
    local d, m, y = os.date("%d"), os.date("%m"), os.date("%Y")
    local hAtual, mAtual = tonumber(b[1]), tonumber(b[2])
    local hComp, mComp = tonumber(c[1]), tonumber(c[2])
    ---
    local t = os.time{year= y, month= m, day= d, hour= hAtual, min= mAtual}
    local t1 = os.time{year= y, month= m, day= d, hour= hComp, min= mComp}
    ---                                                                       
    comparacao = t1-t
    if hComp < hAtual then
       v = os.time{year= y, month= m, day= d, hour= 24, min= 0}
       v2 = os.time{year= y, month= m, day= d, hour= 0, min= 0}
       comparacao = (v-t)+(t1-v2)
    end
return getTimeDiff(comparacao)
end
-------------------------------------------------------------------------
function cleanCMcds(item)
if item ~= 0 then
   for c = 1, 15 do              --alterado v1.5
      local str = "cm_move"..c
      setCD(item, str, 0)
   end
end
end

function ehNPC(cid)   --alterado v1.9
return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid)
end

function ehMonstro(cid)   --alterado v1.9
return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cid
end                                                       --alterado v1.9.1 /\

function doAppear(cid)    --Faz um poke q tava invisivel voltar a ser visivel...
if not isCreature(cid) then return true end
    doRemoveCondition(cid, CONDITION_INVISIBLE)
    doRemoveCondition(cid, CONDITION_OUTFIT)
    doCreatureSetHideHealth(cid, false)
    if getCreatureName(cid) == "Ditto" and pokes[getPlayerStorageValue(cid, 1010)] and getPlayerStorageValue(cid, 1010) ~= "Ditto" then
       if isSummon(cid) then
          local item = getPlayerSlotItem(getCreatureMaster(cid), ?
          doSetCreatureOutfit(cid, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1)   --alterado v1.6.1
       end
    end 
end

function doDisapear(cid)   --Faz um pokemon ficar invisivel
if not isCreature(cid) then return true end
doCreatureAddCondition(cid, permanentinvisible)
doCreatureSetHideHealth(cid, true)
doSetCreatureOutfit(cid, {lookType = 2}, -1)
end

function hasTile(pos)    --Verifica se tem TILE na pos
pos.stackpos = 0
if getTileThingByPos(pos).itemid >= 1 then
   return true
end
return false
end

function getThingFromPosWithProtect(pos)  --Pega uma creatura numa posiçao com proteçoes
if hasTile(pos) then
   if isCreature(getRecorderCreature(pos)) then
      return getRecorderCreature(pos)
   else
      pos.stackpos = 253
      pid = getThingfromPos(pos).uid
   end
else
   pid = getThingfromPos({x=1,y=1,z=10,stackpos=253}).uid
end
return pid
end

function getTileThingWithProtect(pos)    --Pega um TILE com proteçoes
if hasTile(pos) then
pos.stackpos = 0
   pid = getTileThingByPos(pos)
else
   pid = getTileThingByPos({x=1,y=1,z=10,stackpos=0})
end
return pid
end

function canAttackOther(cid, pid)         --Function q verifica se um poke/player pode atacar outro poke/player

if not isCreature(cid) or not isCreature(pid) then return "Cant" end

local master1 = isSummon(cid) and getCreatureMaster(cid) or cid
local master2 = isSummon(pid) and getCreatureMaster(pid) or pid
   
   ----             
   if getPlayerStorageValue(master1, 6598754) >= 5 and getPlayerStorageValue(master2, 6598754) >= 5 then
      if getPlayerStorageValue(master1, 6598754) ~= getPlayerStorageValue(master2, 6598754) then
         if isDuelingAgainst(master1, master2) then   --alterado v1.8
            if isSummon(cid) and isPlayer(pid) then
               return "Cant"
            else
               return "Can"
            end
         end
      end
   end
   ----              pvp system
   if getPlayerStorageValue(master1, 6598754) >= 1 and getPlayerStorageValue(master2, 6598755) >= 1 then
      return "Can" 
   end
   if getPlayerStorageValue(master1, 6598755) >= 1 and getPlayerStorageValue(master2, 6598754) >= 1 then  ---estar em times diferentes
      return "Can"
   end
   ----
   if ehMonstro(cid) and ehMonstro(pid) then 
      return "Can"
   end

return "Cant"
end
   
      
function stopNow(cid, time)   
if not isCreature(cid) or not tonumber(time) or isSleeping(cid) then return true end
                                                        --alterado v1.9.1 \/
local function podeMover(cid)                         
if isPlayer(cid) then 
   mayNotMove(cid, false) 
elseif isCreature(cid) then 
   doRegainSpeed(cid) 
end
end

if isPlayer(cid) then mayNotMove(cid, true) else doChangeSpeed(cid, -getCreatureSpeed(cid)) end
addEvent(podeMover, time, cid)
end

function doReduceStatus(cid, off, def, agi)   --reduz os status
if not isCreature(cid) then return true end
local A = getOffense(cid)
local B = getDefense(cid)
local C = getSpeed(cid)

if off > 0 then
   setPlayerStorageValue(cid, 1001, A - off)
end
if def > 0 then
   setPlayerStorageValue(cid, 1002, B - def)
end
if agi > 0 then
   setPlayerStorageValue(cid, 1003, C - agi)
   if getCreatureSpeed(cid) ~= 0 then
      doRegainSpeed(cid)
   end                                              --alterado v1.5  functions arrumadas...
end
end

function doRaiseStatus(cid, off, def, agi, time)  
if not isCreature(cid) then return true end
local A = getOffense(cid)
local B = getDefense(cid)
local C = getSpeed(cid)

if off > 0 then
   setPlayerStorageValue(cid, 1001, A * off)
end
if def > 0 then
   setPlayerStorageValue(cid, 1002, B * def)
end
if agi > 0 then
   setPlayerStorageValue(cid, 1003, C + agi)
   if getCreatureSpeed(cid) ~= 0 then
      doRegainSpeed(cid)
   end
end

local D = getOffense(cid)
local E = getDefense(cid)
local F = getSpeed(cid)
---------------------------
local G = D - A
local H = E - B
local I = F - C

addEvent(doReduceStatus, time*1000, cid, G, H, I)
end


function BackTeam(cid)          
  if isCreature(cid) then
     local summon = getCreatureSummons(cid)   --alterado v1.6
     for i = 2, #summon do
         doSendMagicEffect(getThingPos(summon), 211)
         doRemoveCreature(summon)
     end
     setPlayerStorageValue(cid, 637501, -1)
  end  
end
    
function choose(...) -- by mock
    local arg = {...}
    return arg[math.random(1,#arg)]
end

function AddPremium(cid, days)
local function removerPlayer(cid)
if isCreature(cid) then
   doRemoveCreature(cid)
end
end

db.executeQuery("UPDATE `accounts` SET `premdays` = '"..days.."' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
doPlayerSendTextMessage(cid,25,"Você será kickado em 5 segundos.")    
addEvent(removerPlayer, 5*1000, cid)     
return TRUE
end

function isShiny(cid) 
return isCreature(cid) and string.find(getCreatureName(cid), "Shiny")  --alterado v1.9
end

function isShinyName(name)        
return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v1.9
end

function doConvertTypeToStone(type, string)
local t = {
["fly"] = {heart, "heart"},
["flying"] = {heart, "heart"},
["normal"] = {heart, "heart"},
["fire"] = {fire, "fire"},
["grass"] = {leaf, "leaf"},
["leaf"] = {leaf, "leaf"},
["water"] = {water, "water"},
["poison"] = {venom, "venom"},
["venom"] = {venom, "venom"},
["electric"] = {thunder, "thunder"},
["thunder"] = {thunder, "thunder"},
["rock"] = {rock, "rock"},
["fight"] = {punch, "punch"},
["fighting"] = {punch, "punch"},
["bug"] = {coccon, "coccon"},
["dragon"] = {crystal, "crystal"},
["dark"] = {dark, "dark"},
["ghost"] = {dark, "dark"},
["ground"] = {earth, "earth"},
["earth"] = {earth, "earth"},
["psychic"] = {enigma, "enigma"},
["steel"] = {metal, "metal"},
["metal"] = {metal, "metal"},
["ice"] = {ice, "ice"},
["boost"] = {boostStone, "boost"},  --alterado v1.9
}

if string then
return t[type][2]
else
return t[type][1]
end
end

function doConvertStoneIdToString(stoneID)
local t = {
[11453] = "Heart Stone",
[11441] = "Leaf Stone",
[11442] = "Water Stone",
[11443] = "Venom Stone",
[11444] = "Thunder Stone",
[11445] = "Rock Stone",
[11446] = "Punch Stone", 
[11447] = "Fire Stone",               --alterado v1.6
[11448] = "Cocoon Stone", 
[11449] = "Crystal Stone",
[11450] = "Darkess Stone", 
[11451] = "Earth Stone",
[11452] = "Enigma Stone",
[11454] = "Ice Stone", 
[12244] = "King's Rock",
[12232] = "Metal Stone",
[12242] = "Sun Stone",
[12401] = "Shiny Fire Stone",
[12402] = "Shiny Water Stone",
[12403] = "Shiny Leaf Stone",
[12404] = "Shiny Heart Stone",
[12405] = "Shiny Enigma Stone",
[12406] = "Shiny Rock Stone",
[12407] = "Shiny Venom Stone", 
[12408] = "Shiny Ice Stone",
[12409] = "Shiny Thunder Stone",
[12410] = "Shiny Crystal Stone",
[12411] = "Shiny Cocoon Stone",
[12412] = "Shiny Darkness Stone",
[12413] = "Shiny Punch Stone",
[12414] = "Shiny Earth Stone",
[boostStone] = "Boost Stone",  --alterado v1.9
}
if t[stoneID] then
return t[stoneID]
else
return ""
end
end

function isStone(id)
if id >= leaf and id <= ice then
return true
end
if id == boostStone then  --alterado v1.9
return true
end
if id == 12232 or id == 12242 or id == 12244 or id == 12245 then
return true                                 
end
if (id >= sfire and id <= searth) or id == 12417 or id == 12419 then
return true 
end
return false
end

function isWater(id)
return tonumber(id) and id >= 4820 and id <= 4825 --alterado v1.9
end

function getTopCorpse(position)
local pos = position
for n = 1, 255 do
    pos.stackpos = n
    local item = getTileThingByPos(pos)
    if item.itemid >= 2 and (string.find(getItemNameById(item.itemid), "fainted ") or string.find(getItemNameById(item.itemid), "defeated ")) then
       return getTileThingByPos(pos)
    end
end
return null
end

bpslot = CONST_SLOT_BACKPACK

function hasPokemon(cid)
    if not isCreature(cid) then return false end
    if getCreatureMana(cid) <= 0 then return false end
    if #getCreatureSummons(cid) >= 1 then return true end
    local item = getPlayerSlotItem(cid, CONST_SLOT_FEET)
    local bp = getPlayerSlotItem(cid, bpslot)
    for a, b in pairs (pokeballs) do
        if item.itemid == b.on or item.itemid == b.use then
        return true                              --alterado v1.4
        end
        if #getItemsInContainerById(bp.uid, b.on) >= 1 then
        return true
        end
    end
return false
end

function isNpcSummon(cid)
return isNpc(getCreatureMaster(cid))
end

function getPokemonHappinessDescription(cid)
    if not isCreature(cid) then return true end
    local str = {}
    local h = getPlayerStorageValue(cid, 1008)
    if h >= tonumber(getConfigValue('PokemonStageVeryHappy')) then
        table.insert(str, " is very happy with you!")
    elseif h >= tonumber(getConfigValue('PokemonStageHappy')) then
        table.insert(str, " is happy.")
    elseif h >= tonumber(getConfigValue('PokemonStageOK')) then
        table.insert(str, " is unhappy.")
    elseif h >= tonumber(getConfigValue('PokemonStageSad')) then
        table.insert(str, " is sad.")
    elseif h >= tonumber(getConfigValue('PokemonStageMad')) then
        table.insert(str, " is mad.")
    else
        table.insert(str, " is very mad at you!")
    end
return table.concat(str)
end

function doSetItemAttribute(item, key, value)
doItemSetAttribute(item, key, value)
end

function deTransform(cid, check)
    if not isCreature(cid) then return true end

    local m = getCreatureMaster(cid)
    local p = getPlayerSlotItem(m, ?

    if getItemAttribute(p.uid, "transTurn") ~= check then return true end

    setPlayerStorageValue(cid, 1010, getCreatureName(cid) == "Ditto" and "Ditto" or "Shiny Ditto")        --edited
    doRemoveCondition(cid, CONDITION_OUTFIT)
    doSendMagicEffect(getThingPos(cid), 184)
    doCreatureSay(cid, "DITTO!", TALKTYPE_MONSTER)
    doItemSetAttribute(p.uid, "transBegin", 0)
    doItemSetAttribute(p.uid, "transLeft", 0)
    doItemEraseAttribute(p.uid, "transName")
    adjustStatus(cid, p.uid, true, true, true)
end

function isTransformed(cid)
return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010))  --alterado v1.9
end

function doSendFlareEffect(pos)
    local random = {28, 29, 79}
    doSendMagicEffect(pos, random[math.random(1, 3)])
end

function isDay()
    local a = getWorldTime()
    if a >= 360 and a < 1080 then
    return true
    end
return false
end

function doPlayerSendTextWindow(cid, p1, p2)
    if not isCreature(cid) then return true end
    local item = 460
    local text = ""
    if type(p1) == "string" then
        doShowTextDialog(cid, item, p1)
    else
        doShowTextDialog(cid, p1, p2)
    end
end

function getClockString(tw)
    local a = getWorldTime()
    local b = a / 60
    local hours = math.floor(b)
    local minut = a - (60 * hours)

    if not tw then
        if hours < 10 then
            hours = "0"..hours..""
        end
        if minut < 10 then
            minut = "0"..minut..""
        end
    return hours..":"..minut
    else
        local sm = "a.m"
        if hours >= 12 then
            hours = hours - 12
            sm = "p.m"
        end
        if hours < 10 then
            hours = "0"..hours..""
        end
        if minut < 10 then
            minut = "0"..minut..""
        end
    return hours..":"..minut.." "..sm
    end
end

function doCorrectPokemonName(poke)
return doCorrectString(poke)
end

function doCorrectString(str)
local name = str:explode(" ")  --alterado v1.9
local final = {}
for _, s in ipairs(name) do
    table.insert(final, s:sub(1, 1):upper()..s:sub(2, #s):lower())
end
return table.concat(final, (name[2] and " " or ""))
end   

function getHappinessRate(cid)
    if not isCreature(cid) then return 1 end
    local a = getPlayerStorageValue(cid, 1008)
        if a == -1 then return 1 end
    if a >= getConfigValue('PokemonStageVeryHappy') then
        return happinessRate[5].rate
    elseif a >= getConfigValue('PokemonStageHappy') then
        return happinessRate[4].rate
    elseif a >= getConfigValue('PokemonStageOK') then
        return happinessRate[3].rate
    elseif a >= getConfigValue('PokemonStageSad') then
        return happinessRate[2].rate
    else
        return happinessRate[1].rate
    end
return 1
end

function doBodyPush(cid, target, go, pos)
    if not isCreature(cid) or not isCreature(target) then
        doRegainSpeed(cid)
        doRegainSpeed(target)
    return true
    end
        if go then
            local a = getThingPos(cid)
            doChangeSpeed(cid, -getCreatureSpeed(cid))
                if not isPlayer(target) then
                    doChangeSpeed(target, -getCreatureSpeed(target))
                end
            doChangeSpeed(cid, 800)
            doTeleportThing(cid, getThingPos(target))
            doChangeSpeed(cid, -800)
            addEvent(doBodyPush, 350, cid, target, false, a)
        else
            doChangeSpeed(cid, 800)
            doTeleportThing(cid, pos)
            doRegainSpeed(cid)
            doRegainSpeed(target)
        end
end

function doReturnPokemon(cid, pokemon, pokeball, effect, hideeffects, blockevo)

    --////////////////////////////////////////////////////////////////////////////////////////--
    checkDuel(cid)                                                                      --alterado v1.6 duel system
    --////////////////////////////////////////////////////////////////////////////////////////--
    if getPlayerStorageValue(cid, 52480) >= 1 and getPlayerStorageValue(cid, 52484) ~= 10 then
       return sendMsgToPlayer(cid, 27, "You can't do that while the duel don't begins!")        --alterado v1.8
    end
    --////////////////////////////////////////////////////////////////////////////////////////--
    
    if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then     --alterado v1.6
       if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then  
          BackTeam(cid)       
       end
    end
    -----------------
    local edit = true

    if not pokeball then
        pokeball = getPlayerSlotItem(cid, ?
    end

    if blockevo then
        edit = false
        doPlayerSendCancel(cid, "Your pokemon couldn't evolve due to server mistakes, please wait until we fix the problem.")
    end

    local happy = getPlayerStorageValue(pokemon, 1008)
    local hunger = getPlayerStorageValue(pokemon, 1009)
    local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon))

    if edit then
        doItemSetAttribute(pokeball.uid, "happy", happy)
        doItemSetAttribute(pokeball.uid, "hunger", hunger)
        doItemSetAttribute(pokeball.uid, "hp", pokelife)
    end

    if getCreatureName(pokemon) == "Ditto" then
        if isTransformed(pokemon) then
            local left = getItemAttribute(pokeball.uid, "transLeft") - (os.clock() - getItemAttribute(pokeball.uid, "transBegin"))
            doItemSetAttribute(pokeball.uid, "transLeft", left)
        end
    end

    if hideeffects then
        doRemoveCreature(pokemon)
    return true
    end

    local pokename = getPokeName(pokemon)

    local mbk = gobackmsgs[math.random(1, #gobackmsgs)].back:gsub("doka", pokename)

    if getCreatureCondition(cid, CONDITION_INFIGHT) then
        if isCreature(getCreatureTarget(cid)) then
            doItemSetAttribute(pokeball.uid, "happy", happy - 5)
        else
            doItemSetAttribute(pokeball.uid, "happy", happy - 2)
        end
    end

    doTransformItem(pokeball.uid, pokeball.itemid-1)
    doCreatureSay(cid, mbk, TALKTYPE_SAY)

    doSendMagicEffect(getCreaturePosition(pokemon), effect)

    doRemoveCreature(pokemon)

    unLock(pokeball.uid) --alterado v1.8
    
    if useOTClient then
       doPlayerSendCancel(cid, '12//,hide')  --alterado v1.7
    end
    
    if useKpdoDlls then
        doUpdateMoves(cid)
    end

end

local EFFECTS = {
    --[OutfitID] = {Effect}
    ["Magmar"] = 35,                --alterado v1.5
    ["Jynx"] = 17,   
    ["Shiny Jynx"] = 17,    
    ["Piloswine"] = 205,  --alterado v1.8
    ["Swinub"] = 205, 
}

function doGoPokemon(cid, item)

    if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then
    return true
    end
---------------------------------------------------------------
local ballName = getItemAttribute(item.uid, "poke")

   btype = getPokeballType(item.itemid)                   

    local effect = pokeballs[btype].effect
        if not effect then
            effect = 21
        end
-----------------------------------------------------------------
    if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then
        doPlayerSendCancel(cid, "You must put your pokeball in the correct place!")
    return TRUE
    end

    local thishp = getItemAttribute(item.uid, "hp")

    if thishp <= 0 then
        if isInArray(pokeballs[btype].all, item.itemid) then
            doTransformItem(item.uid, pokeballs[btype].off)
            doItemSetAttribute(item.uid, "hp", 0)
            doPlayerSendCancel(cid, "This pokemon is fainted.")
            return true
        end
    end

    local pokemon = getItemAttribute(item.uid, "poke")

    if not pokes[pokemon] then
    return true
    end

----------------------- Sistema de nao poder carregar mais que 3 pokes lvl baixo e + q 1 poke de lvl medio/alto ---------------------------------
if not isInArray({5, 6}, getPlayerGroupId(cid)) then
   local balls = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid)      --alterado v1.9 \/
   local low = {}
   local lowPokes = {"Rattata", "Caterpie", "Weedle", "Oddish", "Pidgey", "Paras", "Poliwag", "Bellsprout", "Magikarp", "Hoppip", "Sunkern"}
   if #balls >= 1 then
      for _, uid in ipairs(balls) do
          local nome = getItemAttribute(uid, "poke")
          if not isInArray(lowPokes, pokemon) and nome == pokemon then
             return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry two pokemons equals!")
          else
             if nome == pokemon then
                table.insert(low, nome)
             end
          end
      end
   end
if #low >= 3 then
   return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry more than three pokemons equals of low level!")
end   
end
---------------------------------------------------------------------------------------------------------------------------------------------------

    local x = pokes[pokemon]
    local boosts = getItemAttribute(item.uid, "boost") or 0

    if getPlayerLevel(cid) < (x.level + boosts) then   --alterado v1.8 \/
    doPlayerSendCancel(cid, "You need level "..(x.level + boosts).." to use this pokemon.")
    return true
    end
    
    --------------------------------------------------------------------------------------
    shinysClan = {
    ["Shiny Fearow"] = {4, "Wingeon"},
    ["Shiny Flareon"] = {1, "Volcanic"},
    ["Shiny Vaporeon"] = {2, "Seavel"}, 
    ["Shiny Jolteon"] = {9, "Raibolt"},
    ["Shiny Hypno"] = {7, "Psycraft"},
    ["Shiny Golem"] = {3, "Orebound"},         
    ["Shiny Vileplume"] = {8, "Naturia"},
    ["Shiny Nidoking"] = {5, "Malefic"},
    ["Shiny Hitmontop"] = {6, "Gardestrike"},   
    }
    
    if shinysClan[pokemon] and (getPlayerGroupId(cid) < 4 or getPlayerGroupId(cid) > 6) then --alterado v1.9
       if getPlayerStorageValue(cid, 86228) ~= shinysClan[pokemon][1] then
          doPlayerSendCancel(cid, "You need be a member of the clan "..shinysClan[pokemon][2].." to use this pokemon!")
          return true   
       elseif getPlayerStorageValue(cid, 862281) ~= 5 then
          doPlayerSendCancel(cid, "You need be atleast rank 5 to use this pokemon!")
          return true
       end
    end
    --------------------------------------------------------------------------------------

    doSummonMonster(cid, pokemon)

    local pk = getCreatureSummons(cid)[1]
    if not isCreature(pk) then return true end
    
    ------------------------passiva hitmonchan------------------------------
    if isSummon(pk) then                                                  --alterado v1.8 \/
       if pokemon == "Shiny Hitmonchan" or pokemon == "Hitmonchan" then
          if not getItemAttribute(item.uid, "hands") then
             doSetItemAttribute(item.uid, "hands", 0)
          end
          local hands = getItemAttribute(item.uid, "hands")
          doSetCreatureOutfit(pk, {lookType = hitmonchans[pokemon][hands].out}, -1)
       end
    end
    -------------------------------------------------------------------------
    ---------movement magmar, jynx-------------
    if EFFECTS[getCreatureName(pk)] then     
       markPosEff(pk, getThingPos(pk))
       sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk))   
    end
    --------------------------------------------------------------------------  

    if getCreatureName(pk) == "Ditto" then

        local left = getItemAttribute(item.uid, "transLeft")
        local name = getItemAttribute(item.uid, "transName")

        if left and left > 0 then
            setPlayerStorageValue(pk, 1010, name)
            doSetCreatureOutfit(pk, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1)
            addEvent(deTransform, left * 1000, pk, getItemAttribute(item.uid, "transTurn"))
            doItemSetAttribute(item.uid, "transBegin", os.clock())
        else
            setPlayerStorageValue(pk, 1010, "Ditto")
        end
    end

    if isGhostPokemon(pk) then doTeleportThing(pk, getPosByDir(getThingPos(cid), math.random(0, 7)), false) end

    doCreatureSetLookDir(pk, 2)

    adjustStatus(pk, item.uid, true, true, true)
    doAddPokemonInOwnList(cid, pokemon)

    doTransformItem(item.uid, item.itemid+1)

    local pokename = getPokeName(pk) --alterado v1.7

    local mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", pokename)
    doCreatureSay(cid, mgo, TALKTYPE_SAY)

    doSendMagicEffect(getCreaturePosition(pk), effect)

    unLock(item.uid) --alterado v1.8

    if useKpdoDlls then
        doUpdateMoves(cid)
    end
end

function doRegainSpeed(cid)              --alterado v1.9 \/
if not isCreature(cid) then return true end

   local speed = PlayerSpeed
   if isMonster(cid) then
      speed = getSpeed(cid)
   elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then
      speed = 200*getPlayerGroupId(cid) 
   end
   
   doChangeSpeed(cid, -getCreatureSpeed(cid))
   if getCreatureCondition(cid, CONDITION_PARALYZE) == true then
      doRemoveCondition(cid, CONDITION_PARALYZE)
      addEvent(doAddCondition, 10, cid, paralizeArea2)             
   end
    
doChangeSpeed(cid, speed)
return speed
end

function isPosEqualPos(pos1, pos2, checkstackpos)
    if pos1.x ~= pos2.x or pos1.y ~= pos2.y and pos1.z ~= pos2.z then
    return false
    end
    if checkstackpos and pos1.stackpos and pos2.stackpos and pos1.stackpos ~= pos2.stackpos then
    return false
    end
return true
end

function getRecorderPlayer(pos, cid)
    local ret = 0
    if cid and isPosEqual(getThingPos(cid), pos) then   --alterado v1.9
       return cid
    end
    local s = {}
    s.x = pos.x
    s.y = pos.y
    s.z = pos.z
        for a = 0, 255 do
            s.stackpos = a
            local b = getTileThingByPos(s).uid
            if b > 1 and isPlayer(b) and getCreatureOutfit(b).lookType ~= 814 then
                ret = b
            end
        end
return ret
end

function getRecorderCreature(pos, cid)
    local ret = 0
    if cid and isPosEqual(getThingPos(cid), pos) then   --alterado v1.9
       return cid
    end
    local s = {}
    s.x = pos.x
    s.y = pos.y
    s.z = pos.z
        for a = 0, 255 do
            s.stackpos = a
            local b = getTileThingByPos(s).uid
            if b > 1 and isCreature(b) and getCreatureOutfit(b).lookType ~= 814 then
                ret = b
            end
        end
return ret
end

function doCreatureSetOutfit(cid, outfit, time)
    doSetCreatureOutfit(cid, outfit, time)
end

function doMagicalFlower(cid, away)
    if not isCreature(cid) then return true end
    for x = -3, 3 do
        for y = -3, 3 do
        local a = getThingPos(cid)
        a.x = a.x + x
        a.y = a.y + y
            if away then
                doSendDistanceShoot(a, getThingPos(cid), 21)
            else
                doSendDistanceShoot(getThingPos(cid), a, 21)
            end
        end
    end
end        

function isItemPokeball(item)         --alterado v1.9 \/
if not item then return false end
for a, b in pairs (pokeballs) do
    if isInArray(b.all, item) then return true end
end
return false
end

function isPokeball(item)
return isItemPokeball(item)
end                                    --/\

function getPokeballType(id)
    for a, b in pairs (pokeballs) do
        if isInArray(b.all, id) then
            return a
        end
    end
return "none"
end

randomdiagonaldir = {
[NORTHEAST] = {NORTH, EAST},
[SOUTHEAST] = {SOUTH, EAST},
[NORTHWEST] = {NORTH, WEST},
[SOUTHWEST] = {SOUTH, WEST}}

function doFaceOpposite(cid)
local a = getCreatureLookDir(cid)
local d = {
[NORTH] = SOUTH,
[SOUTH] = NORTH,
[EAST] = WEST,
[WEST] = EAST,
[NORTHEAST] = SOUTHWEST,
[NORTHWEST] = SOUTHEAST,
[SOUTHEAST] = NORTHWEST,
[SOUTHWEST] = NORTHEAST}
doCreatureSetLookDir(cid, d[a])
end

function doFaceRandom(cid)
local a = getCreatureLookDir(cid)
local d = {
[NORTH] = {SOUTH, WEST, EAST},
[SOUTH] = {NORTH, WEST, EAST},
[WEST] = {SOUTH, NORTH, EAST},
[EAST] = {SOUTH, WEST, NORTH}}
doChangeSpeed(cid, 1)
doCreatureSetLookDir(cid, d[a][math.random(1, 3)])
doChangeSpeed(cid, -1)
end

function getFaceOpposite(dir)
local d = {
[NORTH] = SOUTH,
[SOUTH] = NORTH,
[EAST] = WEST,
[WEST] = EAST,
[NORTHEAST] = SOUTHWEST,
[NORTHWEST] = SOUTHEAST,
[SOUTHEAST] = NORTHWEST,
[SOUTHWEST] = NORTHEAST}
return d[dir]
end

function getResistance(cid, combat)
    if isPlayer(cid) then return false end
local poketype1 = pokes[getCreatureName(cid)].type
local poketype2 = pokes[getCreatureName(cid)].type2
local multiplier = 1
    if effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype1) then
        multiplier = multiplier * 2
    end
    if poketype2 and effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype2) then
        multiplier = multiplier * 2
    end
    if effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype1) then
        multiplier = multiplier * 0.5
    end
    if poketype2 and effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype2) then
        multiplier = multiplier * 0.5
    end
    if effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype1) then
        multiplier = multiplier * 0
    end
    if poketype2 and effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype2) then
        multiplier = multiplier * 0
    end

    if multiplier == 0.25 then
        multiplier = 0.5
    elseif multiplier == 4 then
        multiplier = 2
    end

return multiplier
end

function getCreatureDirectionToTarget(cid, target, ranged)
    if not isCreature(cid) then return true end
    if not isCreature(target) then return getCreatureLookDir(cid) end
    local dirs = {
    [NORTHEAST] = {NORTH, EAST},
    [SOUTHEAST] = {SOUTH, EAST},
    [NORTHWEST] = {NORTH, WEST},
    [SOUTHWEST] = {SOUTH, WEST}}
    local x = getDirectionTo(getThingPos(cid), getThingPos(target), false)
        if x <= 3 then return x
        else
            local xdistance = math.abs(getThingPos(cid).x - getThingPos(target).x)
            local ydistance = math.abs(getThingPos(cid).y - getThingPos(target).y)
                if xdistance > ydistance then
                    return dirs[x][2]
                elseif ydistance > xdistance then
                    return dirs[x][1]
                elseif isInArray(dirs[x], getCreatureLookDir(cid)) then
                    return getCreatureLookDir(cid)
                else
                    return dirs[x][math.random(1, 2)]
                end
        end
end

function getSomeoneDescription(cid)
    if isPlayer(cid) then return getPlayerNameDescription(cid) end
return getMonsterInfo(getCreatureName(cid)).description
end
    

function isGhostPokemon(cid)
    if not isCreature(cid) then return false end
    local ghosts = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Shiny Abra"}
return isInArray(ghosts, getCreatureName(cid))
end

function updateGhostWalk(cid)
    if not isCreature(cid) then return false end
    local pos = getThingPos(cid)
    pos.x = pos.x + 1
    pos.y = pos.y + 1
    local ret = getThingPos(cid)
    doTeleportThing(cid, pos, false)
    doTeleportThing(cid, ret, false)
return true
end

function doRemoveElementFromTable(t, e)
    local ret = {}
    for a = 1, #t do
        if t[a] ~= e then
        table.insert(ret, t[a])
        end
    end
return ret
end

function doFaceCreature(sid, pos)
if not isCreature(sid) then return true end
    if getThingPos(sid).x == pos.x and getThingPos(sid).y == pos.y then return true end
    local ret = 0

    local ld = getCreatureLookDir(sid)
    local dir = getDirectionTo(getThingPos(sid), pos)
    local al = {
    [NORTHEAST] = {NORTH, EAST},
    [NORTHWEST] = {NORTH, WEST},
    [SOUTHEAST] = {SOUTH, EAST},
    [SOUTHWEST] = {SOUTH, WEST}}

    if dir >= 4 and isInArray(al[dir], ld) then return true end

    doChangeSpeed(sid, 1)
        if dir == 4 then
            ret = math.random(2, 3)
        elseif dir == 5 then
            ret = math.random(1, 2)
        elseif dir == 6 then
            local dirs = {0, 3}
            ret = dirs[math.random(1, 2)]
        elseif dir == 7 then
            ret = math.random(0, 1)
        else
            ret = getDirectionTo(getThingPos(sid), pos)
        end
doCreatureSetLookDir(sid, ret)
doChangeSpeed(sid, -1)
return true
end

function doCreatureAddCondition(cid, condition)
if not isCreature(cid) then return true end
doAddCondition(cid, condition)
end

function doCreatureRemoveCondition(cid, condition)
if not isCreature(cid) then return true end
doRemoveCondition(cid, condition)
end

function setCD(item, tipo, tempo)

    if not tempo or not tonumber(tempo) then
        doItemEraseAttribute(item, tipo)
    return true
    end

    doItemSetAttribute(item, tipo, "cd:"..(tempo + os.time()).."")
return tempo + os.time()
end

function getCD(item, tipo, limite)

    if not getItemAttribute(item, tipo) then
    return 0
    end

    local string = getItemAttribute(item, tipo):gsub("cd:", "")
    local number = tonumber(string) - os.time()

    if number <= 0 then
    return 0
    end

    if limite and limite < number then
        return 0
    end

return number
end

function doSendMoveEffect(cid, target, effect)
if not isCreature(cid) or not isCreature(target) then return true end
doSendDistanceShoot(getThingPos(cid), getThingPos(target), effect)
return true
end

function doSetItemActionId(uid, actionid)
doItemSetAttribute(uid, "aid", actionid)
return true
end

function threeNumbers(number)
    if number <= 9 then
    return "00"..number..""
    elseif number <= 99 then
    return "0"..number..""
    end
return ""..number..""
end

function isBr(cid)
if getPlayerStorageValue(cid, 105505) ~= -1 then
return true
end
return false
end

function isBeingUsed(ball)            
if not ball then return false end
for a, b in pairs (pokeballs) do           --alterado v1.9
    if b.use == ball then return true end
end
return false
end

function doRemoveTile(pos)-- Script by mock
pos.stackpos = 0
local sqm = getTileThingByPos(pos)
doRemoveItem(sqm.uid,1)
end

function doCreateTile(id,pos) -- By mock
doAreaCombatHealth(0,0,pos,0,0,0,CONST_ME_NONE)
doCreateItem(id,1,pos)
end

function hasSqm(pos)
local f = getTileThingByPos(pos)
if f.itemid ~= 0 and f.itemid ~= 1 then
return true
end
return false
end

function getPosDirs(p, dir) -- By MatheusMkalo
return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
end

function canWalkOnPos(pos, creature, pz, water, sqm, proj)
if not pos then return false end
if not pos.x then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end
if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false end
    local n = not proj and 3 or 2                                    --alterado v1.6
    for i = 0, 255 do
        pos.stackpos = i                           
        local tile = getTileThingByPos(pos)        
        if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then     --edited
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end   
return true
end

function canWalkOnPos2(pos, creature, pz, water, sqm, proj)     --alterado v1.6
if not pos then return false end
if not pos.x then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end
if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false end
    --[[local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i                           --edited pra retirar um bug.. ;x
        local tile = getTileThingByPos(pos)        
        if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then     --edited
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end ]]  
return true
end

function getFreeTile(pos, cid)
    if canWalkOnPos(pos, true, false, true, true, false) then
        return pos
    end
    local positions = {}
    for a = 0, 7 do
        if canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then
        table.insert(positions, pos)
        end
    end
    if #positions >= 1 then
        if isCreature(cid) then
            local range = 1000
            local ret = getThingPos(cid)
            for b = 1, #positions do
                if getDistanceBetween(getThingPos(cid), positions) < range then
                    ret = positions
                    range = getDistanceBetween(getThingPos(cid), positions)
                end
            end
            return ret
        else
            return positions[math.random(#positions)]
        end
    end
return getThingPos(cid)
end

function isWalkable(pos, creature, proj, pz, water)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end


function isPlayerSummon(cid, uid)
return getCreatureMaster(uid) == cid  --alterado v1.9
end

function isSummon(sid)
return isCreature(sid) and getCreatureMaster(sid) ~= sid and isPlayer(getCreatureMaster(sid))   --alterado v1.9
end 

function getItemsInContainerById(container, itemid) -- Function By Kydrai
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
   for slot=0, (getContainerSize(container)-1) do
       local item = getContainerItem(container, slot)
       if isContainer(item.uid) then
          local itemsbag = getItemsInContainerById(item.uid, itemid)
          for i=0, #itemsbag do
              table.insert(items, itemsbag)
          end
       else
          if itemid == item.itemid then
             table.insert(items, item.uid)
          end
       end
   end
end
return items
end

function getPokeballsInContainer(container) -- Function By Kydrai
    if not isContainer(container) then return {} end
    local items = {}
    if isContainer(container) and getContainerSize(container) > 0 then
        for slot=0, (getContainerSize(container)-1) do
            local item = getContainerItem(container, slot)
                if isContainer(item.uid) then
                    local itemsbag = getPokeballsInContainer(item.uid)
                    for i=0, #itemsbag do
                        table.insert(items, itemsbag)
                    end
                elseif isPokeball(item.itemid) then
                    table.insert(items, item.uid)
                end
        end
    end
return items
end

function getItensUniquesInContainer(container)    --alterado v1.6
if not isContainer(container) then return {} end
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
   for slot=0, (getContainerSize(container)-1) do
       local item = getContainerItem(container, slot)
       if isContainer(item.uid) then
          local itemsbag = getItensUniquesInContainer(item.uid)
          for i=0, #itemsbag do
              table.insert(items, itemsbag)
          end
       elseif getItemAttribute(item.uid, "unique") then
          table.insert(items, item)
       end
   end
end
return items
end

function hasSpaceInContainer(container)                --alterado v1.6
if not isContainer(container) then return false end
if getContainerSize(container) < getContainerCap(container) then return true end

for slot = 0, (getContainerSize(container)-1) do
    local item = getContainerItem(container, slot)
    if isContainer(item.uid) then
       if hasSpaceInContainer(item.uid) then
          return true
       end
    end
end
return false
end

function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo
local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
local piles = 0
if #item > 0 then
   for i,x in pairs(item) do
       if getThing(x).type < 100 then
          local it = getThing(x)
          doTransformItem(it.uid, itemid, it.type+quant)
          if it.type+quant > 100 then
             doPlayerAddItem(cid, itemid, it.type+quant-100)
          end
       else
          piles = piles+1
       end
   end
else
   return doPlayerAddItem(cid, itemid, quant)
end
if piles == #item then
   doPlayerAddItem(cid, itemid, quant)
end
end

function getSmeargleMoveTable(master)
  local ball = getPlayerSlotItem(master, 8).uid
  local moves = {}
  local skts = {"skt1", "skt2", "skt3", "skt4", "skt5", "skt6", "skt7", "skt8"}
  for x=1, #skts do
    moves["move"..x] = getItemAttribute(ball, skts[x]) and movestable[getItemAttribute(ball, skts[x])]["move"..x] and movestable[getItemAttribute(ball, skts[x])]["move"..x] ~= -1 and movestable[getItemAttribute(ball, skts[x])]["move"..x] or movestable["Smeargle"]["move"..x]
  end
  return moves
  end

function smeargleHaveSpell(cid, spellname)
local has = false
local moves = getSmeargleMoveTable(cid)
 local ball = getPlayerSlotItem(cid, 8).uid
local skts = {"skt1", "skt2", "skt3", "skt4", "skt5", "skt6", "skt7", "skt8"}
for x=1, #skts do
if getItemAttribute(ball, skts[x]) and moves["move"..x].name == spellname then
has = true
break
end
end
return has
end 

function doPlayerAddItemStacking(cid, itemid, quant) 
local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
local piles = 0
if #item > 0 then
for i,x in pairs(item) do
if getThing(x).type < 100 then
local it = getThing(x)
doTransformItem(it.uid, itemid, it.type+quant)
if it.type+quant > 100 then
doPlayerAddItem(cid, itemid, it.type+quant-100)
end
else
piles = piles+1
end
break
end
else
return doPlayerAddItem(cid, itemid, quant)
end
if piles == #item then
doPlayerAddItem(cid, itemid, quant)
end
end  

 

createpoke.lua(talkactions)

  Mostrar conteúdo oculto

local typess = {       --alterado v2.9 \/  TUDO!!
[1] = "normal",
[2] = "great",
[3] = "super",
[4] = "ultra",
[5] = "saffari",
}
function onSay(cid, words, param)

if param == "" or param == " " then
   doPlayerSendCancel(cid, 'Command needs parameters, function structure: "/cb [Pokemon Name], [boost], [ball type]".')
   return false
end

local t = string.explode(param, ",")
--
local name = ""
local btype = (tostring(t[4]) and pokeballs[t[4]]) and t[4] or typess[math.random(1, #typess)]       

if tostring(t[1]) then
    name = doCorrectString(t[1])   
    if not pokes[name] then
       doPlayerSendCancel(cid, "Sorry, a pokemon with the name "..name.." doesn't exists.")
       return true
    end
print(""..name.." ball has been created by "..getPlayerName(cid)..".")
end

addPokeToPlayer(cid, name, (t[2] and tonumber(t[2]) or 0), btype)

return true
end

 

qualquer coisa, se der erro posta ai e me marca

Deu esse ERRO 

Spoiler

[26/01/2020 13:03:50] [Error - CreatureScript Interface] 
[26/01/2020 13:03:50] data/creaturescripts/scripts/pokeexp.lua:onDeath
[26/01/2020 13:03:50] Description: 
[26/01/2020 13:03:50] data/creaturescripts/scripts/pokeexp.lua:94: attempt to call global 'getPokemonGender' (a nil value)
[26/01/2020 13:03:50] stack traceback:
[26/01/2020 13:03:50]     data/creaturescripts/scripts/pokeexp.lua:94: in function <data/creaturescripts/scripts/pokeexp.lua:29>

Quando eu mato o pokemon o corpo dele some nao fica no chao pra poder capturar simplesmente some ai da esse ERRO 

Link para o comentário
Compartilhar em outros sites

  • 0
Agora, BrunoMaciel disse:

Deu esse ERRO 

  Ocultar conteúdo

[26/01/2020 13:03:50] [Error - CreatureScript Interface] 
[26/01/2020 13:03:50] data/creaturescripts/scripts/pokeexp.lua:onDeath
[26/01/2020 13:03:50] Description: 
[26/01/2020 13:03:50] data/creaturescripts/scripts/pokeexp.lua:94: attempt to call global 'getPokemonGender' (a nil value)
[26/01/2020 13:03:50] stack traceback:
[26/01/2020 13:03:50]     data/creaturescripts/scripts/pokeexp.lua:94: in function <data/creaturescripts/scripts/pokeexp.lua:29>

Quando eu mato o pokemon o corpo dele some nao fica no chao pra poder capturar simplesmente some ai da esse ERRO 

vai em creaturescript e manda o pokeexp

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...