Ir para conteúdo
  • 0

Algumas passivas


Fjinst

Pergunta

Olá, eu gostaria de pedir uma ajuda a vocês.

Sempre tive uma curiosidade de se é possivel fazer o sistema de passivas por storages para alguns otservs

 

O sistema consistiria no seguinte, se o player tiver tal storage no seu char ele terá essa passiva.

 

 

As passivas nas quais eu estou pedindo seriam as:

 

Uma de block, ou seja o player tem uma chance de 10% de negar qualquer dano

 

Uma de imortalidade, que o player teria uma chance de 10% de ficar 5 minutos imune a qualquer dano.

 

Se vocês tiverem como me ajudar, agradeço!

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

a primeira é um creaturescript onStatsChange, pra cada dano q ele receber vc checa se tem a storage que vc quer e faz um math.random(1, 100), se for <= 10 então retorna falso, do contrário retorna true.

a segunda passiva ativaria ao ser atacado tb? pq se for a é a mesma coisa que a primeira só que ai eu verificaria três coisas:
1- vc checa se tem a storage1 que vc quer e faz um math.random(1, 100), se for <= 10 então muda o storage2 pra ser os.time() + 5 * 60 [5 MINUTOS]
2- checa se o storage2 - os.time() <= 0 e retorna true ou falso
3- na primeira checagem vc tem que checar se ela ja não está ativada. Pra não acabar re-ativando com ela já ativada.

Link para o comentário
Compartilhar em outros sites

  • 0

Eu só conheço a linguagem lua das versões 8.10 pra baixo, apartir da 8.2+ mudou totalmente, então meio que me perdi, Quando tento fazer esses scripts utilizando outros de outras pessoas acabo me perdendo e bugando tudo,

Versão TFS 0.36

Tibia: 8.54

Link para o comentário
Compartilhar em outros sites

  • 0

a primeira é um creaturescript onStatsChange, pra cada dano q ele receber vc checa se tem a storage que vc quer e faz um math.random(1, 100), se for <= 10 então retorna falso, do contrário retorna true.

 

a segunda passiva ativaria ao ser atacado tb? pq se for a é a mesma coisa que a primeira só que ai eu verificaria três coisas:

1- vc checa se tem a storage1 que vc quer e faz um math.random(1, 100), se for <= 10 então muda o storage2 pra ser os.time() + 5 * 60 [5 MINUTOS]

2- checa se o storage2 - os.time() <= 0 e retorna true ou falso

3- na primeira checagem vc tem que checar se ela ja não está ativada. Pra não acabar re-ativando com ela já ativada.

Desculpe a falta de noção...Wolf...mas,

onStatsChange é um callback certo? que ativa quando a criatura ou player perde hp/mana,

se fazer o script dessa forma não daria erro em bloquear? porque tecnicamente o dano já teria sido removido...

estou tentando aprender, portanto posso estar completamente errado :smile_positivo:

 

Quase sempre que faço um script da um erro de sintaxe ou na propria logica da programação...

por isso nem vou arriscar esse que parece bem mais complexo.

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

  • 0

@@Darkraus

statschange

quando é executada:
-Quando um player ou monstro ou ganha ou perde vida/mana de um combat ou uma função (combats não são só os das spells, mas também weapons/fist/melee... vale lembrar também que monstros não possuem mana)

Parametros:
- cid = creatureid do player ou monstro q ganha/perde vida/mana
- attacker = creatureid do player ou monstro que causou a mudança na health/mana
- type = tipo da mudança, sendo ela:Ganho de vida, perca de vida, ganho de mana e perca de mana vide tabela abaixo:

STATSCHANGE_HEALTHGAIN = 0
STATSCHANGE_HEALTHLOSS = 1
STATSCHANGE_MANAGAIN = 2
STATSCHANGE_MANALOSS = 3

- combat = o tipo de combat que causou a alteração, sendo esses tipos:

COMBAT_NONE = 0
COMBAT_PHYSICALDAMAGE = 1
COMBAT_ENERGYDAMAGE = 2
COMBAT_EARTHDAMAGE = 4
COMBAT_POISONDAMAGE = 4
COMBAT_FIREDAMAGE = 8
COMBAT_UNDEFINEDDAMAGE = 16
COMBAT_LIFEDRAIN = 32
COMBAT_MANADRAIN = 64
COMBAT_HEALING = 128
COMBAT_DROWNDAMAGE = 256
COMBAT_ICEDAMAGE = 512
COMBAT_HOLYDAMAGE = 1024
COMBAT_DEATHDAMAGE = 2048

- value = valor da mudança

quando está return false:
- O player ou o monstro não ganharão/perderão vida/mana no combat. Pode ser usado pra fazer ele ficar imortal por um certo período ou não ser capaz de tomar dano de certos players/creaturas

Registra creature event:

- Sim

type="statschange"
function onStatsChange(cid, attacker, type, combat, value)

Link para o comentário
Compartilhar em outros sites

  • 0

Eu estava com uma aba do navegador aberta neste tutorial seu. era uma duvida de interpretação mesmo.

 

 

Se eu tentasse fazer esse script que foi pedido assim :

 

local storage1 = xxx

local chance = math.random(1,100))

onStatsChange(cid, attacker, 1, 1, VALUE)

 

if getPlayerStorageValue(cid) == storage1 then
if chance =<10 then
return false
elseif
return true
end
end
end

 

----------- edit2

 

fiz umas ediçoes para arrumar erros do script...

dê uma olhada:

local storage1 = xxx
local storage2 = yyy
local chance = math.random(1,100)
function onStatsChange(cid, attacker, type, combat, value)

	if getPlayerStorageValue(cid) == storage1 then
		if chance <= 10 then
		doSendAnimatedText(getPlayerPosition(cid), Blocked, 180)
		return false
		else
		return true
        end
	end
end
Editado por Darkraus
Link para o comentário
Compartilhar em outros sites

  • 0

hmm, foi quase mas faltou algumas pequenas coisas:

local storage1 = xxx

function onStatsChange(cid, attacker, type, combat, value) -- isso aqui é padrão, oque vc pode é brincar com os parametros aqui embaixo:
	if type == STATSCHANGE_HEALTHLOSS or (type == STATSCHANGE_MANALOSS and getCreatureCondition(cid, CONDITION_MANASHIELD)) then
		if getPlayerStorageValue(cid, storage) >= 1 then -- a função estava sendo usada de forma errada
			local chance = math.random(1,100) -- a chance tem que ficar dentro do callback pra ser calculada toda vez que ele for executado, do contrário
			-- ela só vai ser calculada uma vez e ser aquele valor pra sempre até o servidor resetar
			if chance <= 10 then
				return false
			end
		end
	end
return true
end


--- forma alternativa:
local storage1 = xxx

function onStatsChange(cid, attacker, type, combat, value) 
	if type == STATSCHANGE_HEALTHLOSS or (type == STATSCHANGE_MANALOSS and getCreatureCondition(cid, CONDITION_MANASHIELD)) then
		if getPlayerStorageValue(cid, storage) >= 1 and math.random(1,100) <= 10 then 
			return false
		end
	end
return true
end
Link para o comentário
Compartilhar em outros sites

  • 0

		if getPlayerStorageValue(cid, storage) >= 1 and math.random(1,100) <= 10 then 

nossa, a função é completamente diferente do que eu pensei que fosse... acreditava que a função deveria retornar o valor.

mas aparentemente ela retorna se é verdadeiro ou não a igualdade...

mas fiquei com uma duvida:

 

se ">= 1" indica que "o player possui aquele storage.

"<=0" indicaria que o player não possui aquele storage?

 

por exemplo, supondo que eu precise fazer um script que a condição é justamente o contrario.

somente o jogador que tivesse o storage não pudesse participar. eu usaria:

if getPlayerStorageValue(cid, storage) == 0?

ou

if getPlayerStorageValue(cid, storage) <= 0?

não fui eu quem pedi o script porém, me serviu de aula haha.

obrigado Wolf.

( não testei o script, não posso dizer se funciona ou não )

Link para o comentário
Compartilhar em outros sites

  • 0

Genial, obrigado por esclarecer essas duvidas...

quando o autor do topico voltar acredito q ele confirmará a funcionalidade do script.

 

eu fiz um teste rapido, removi a linha que verifica o storage e o adicionei como creaturescripts em um monstro para teste.

o script cumpre o que foi proposto, ele bloquea um dano. simples, tentei deixa-lo mais bonito usando

 

doSendAnimatedText(getCreaturePosition(cid), Blocked, 180).

 

mas por algum motivo não reconhece, enfim.

Obrigado pela ajuda.

Wolf Rep +

Link para o comentário
Compartilhar em outros sites

  • 0

@@Darkraus,
doSendAnimatedText(getCreaturePosition(cid), Blocked, 180).

esse blocked deveria estar entre aspas pra denotar uma string, dessa forma q vc colocou ele está tentando soltar uma variável como mensagem.. Isso só daria certo se nessa variável estivesse escrito uma string.

local Blocked = "Você bloqueou" 
 doSendAnimatedText(getCreaturePosition(cid), Blocked, 180).

Sempre ande com um arquivo contendo as funções e os parâmetros que ela utiliza pra facilitar a sua vida.

Pra TFS 0.3.6 eu uso essa daqui:

 

[ LUA FUNCTIONS
	Project Name
		The Forgotten Server

	Version
		0.3.6

	Codenamed
		Crying Damson

	License
		GNU GPLv3

	Forum
		http://otland.net/
]

[ ABOUT
	List with all available Lua functions.
	You can read a short instruction for all of them;
		how to use them, what they return and see an usage examples.

	If some function parameters are in bracket ([]) - it means that these are optional
	E.g.
		doPlayerAddItem(uid, itemid[, count/subtype[, canDropOnMap]])
		Means that count/subtype + canDropOnMap parameters can but don't have to be specified
		Example:
			doPlayerAddItem(cid, 2160) --adds 1 crystal coin
			doPlayerAddItem(cid, 2160, 10, TRUE) --adds 10 crystal coins and allow item to be dropped on map if player can't lift it
]

[ "get" functions
	Introduction
		These functions will return a requested string or value.
		If specified thing is not found, function returns false. Example: getCreatureName(666) will return false, as creature with cid 666 doesn't exists.

	LIST
		*Creatures (means, that these are accessible for all players, monsters, npcs)
			getCreatureName(cid)
				Info
					This function checks creature name.

				Returns
					Creature name.

			getCreatureHealth(cid)
				Info
					This function checks creature current health points.

				Returns
					Creature current health points.

			getCreatureMaxHealth(cid)
				Info
					This function checks creature max health points.

				Returns
					Creature max health points.

			getCreatureMana(cid)
				Info
					This function checks creature current mana points.

				Returns
					Creature current mana points.

			getCreatureMaxMana(cid)
				Info
					This function checks creature max mana points.

				Returns
					Creature max mana points.

			getCreaturePosition(cid)
				Info
					This function checks creature current position.

				Returns
					Creature position.
					For example:
						{x = 127, y = 7, z = 9, stackpos = 1}
						{x = 396, y = 582, z = 13, stackpos = 2} (when creature is on an item)

				Example
					local pos = getCreaturePosition(cid)
					doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your current position is [X: "..pos.x.." | Y: "..pos.y.." | Z: "..pos.z.."].")

			getCreatureLookDirection(cid)
				Info
					This function checks creature direction.

				Returns
					Creature direction.
					For example:
						NORTH (0) - creature is looking up (north) (/\)
						EAST (1) - creature is looking right (east) (>)
						SOUTH (2) - creature is looking down (south) (\/)
						WEST (3) - creature is looking left (west) (<)

				Example
					local direction = getCreatureLookDirection(cid)
					if direction == NORTH then
						doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You are looking to north.")
					elseif direction == EAST then
						doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You are looking to east.")
					elseif direction == SOUTH then
						doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You are looking to south.")
					else --when west
						doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You are looking to west.")
					end

			getCreatureSkullType(cid)
				Info
					This function checks creature current skull.

				Returns
					Creature skull.
					For example:
						SKULL_NONE (0) - means, no SKULL_GREEN
						SKULL_YELLOW (1)
						SKULL_GREEN (2)
						SKULL_WHITE (3)
						SKULL_RED (4)
						SKULL_BLACK (5)

				Example
					local skullNames = {"Yellow", "Green", "White", "Red", "Black"}
					local creatureSkull = getCreatureSkullType(cid)
					if creatureSkull ~= SKULL_NONE then
						doPlayerSendTextMessage(cid, "Your current skull color is " .. skullNames[creatureSkull] .. ".")
					else
						doPlayerSendTextMessage(cid, "You don't have any skull :(")
					end

			getCreatureMaster(cid)
				Info
					This function checks creature master. Its used for summoned creatures, to check who has summoned it.

				Returns
					Creature master cid if found, otherwise self cid.

			getCreatureSummons(cid)
				Info
					This functions checks for creature summons list.

				Returns
					false if creature not found, otherwise table with creatures list (NOTE: Can be empty!)

				Example
					local summons = getCreatureSummons(cid)
					if(table.maxn(summons) <= 0) then -- no summons
						doPlayerSendCancel(cid, "You don't have any summons..")
						return false
					end

					-- remove all summons 
					for _, pid in ipairs(summons) do
						doRemoveCreature(pid)
					end

			getCreatureOutfit(cid)
				Info
					This function checks creature current outfit.

				Returns
					Creature outfit in array.
					For example:
						{lookType = 266, lookHead = 0, lookAddons = 0, lookLegs = 0, lookBody = 0, lookFeet = 0} --my current God outfit

				Example
					local myOutfit = getCreatureOutfit(cid)
					doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Im currently wearing outfit with lookType = " .. myOutfit.lookType .. ".")

			getCreatureByName(name)
				Info
					This function will search in current creatures list being in game for specified name.
					NOTE: this function is not case-sensitive. So searching for 'GM MASTER' is same as searching for 'GM Master'.

				Returns
					Creature cid, if creature has been found, otherwise false.
					For example:
						false - Creature with name 'asdasdasdasdasd' has not been found 
						268475687 - my current cid

				Example
					local firstDragonFound = getCreatureByName('Dragon')
					doSendMagicEffect(getCreaturePosition(firstDragonFound), CONST_ME_CAKE) --Lets display some effect on this creature 

		*Players
			getPlayerExperience(cid)
				Info
					This function checks player experience points.

				Returns
					Player experience points.

				Example
					doPlayerSendTextMessage(cid, "You have " .. getPlayerExperience(cid) .. " experience points!")

			getPlayerLevel(cid)
				Info
					This function checks player level.

				Returns
					Player level.

			getPlayerMagLevel(cid)
				Info
					This function checks player magic level.

				Returns
					Player magic level.

			getPlayerFood(cid)
				Info
					This function checks how many seconds a player is full.

				Returns
					Time in second for which player is full: 360.
						Ham - 360, Meat - 180, Fish - 145

			getPlayerAccess(cid)
				Info
					This function checks player access.

				Returns
					Player access.

			getPlayerSkillLevel(cid, skillid)
				Info
					This function checks player skill level.
						Skillid can be:
							SKILL_FIST (0) = Fist Fighting
							SKILL_CLUB (1) = Club Fighting
							SKILL_SWORD (2) = Sword Fighting
							SKILL_AXE (3) = Axe Fighting
							SKILL_DISTANCE (4) = Distance Fighting
							SKILL_SHIELD (5) = Shielding
							SKILL_FISHING (6) = Fishing

				Returns
					Player skill level.
					For Example
						37
						10

				Example
					if getPlayerSkillLevel(cid, SKILL_SWORD) >= 20 then --checking for sword skill value
						doPlayerAddItem(cid, 2376) --gives sword, when skill >= 20
					else
						doPlayerSendCancel(cid, "Sorry, your sword skill is not high enough.")
					end

			getPlayerTown(cid)
				Info
					This function checks player actually Town ID.

				Returns
					Player Town ID.
					For Example:
						1
						3

				Example
					local playerTown = getPlayerTown(cid)
					local playerPos = getCreaturePosition(cid)
					if playerTown == 1 then
						doSendAnimatedText(playerPos, 'I am living in a town with id 1 (Main City)! :)', TEXTCOLOR_GOLD)
					elseif playerTown == 2 then
						doSendAnimatedText(playerPos, 'I am living in a town with id 2 (Desert City)! :)', TEXTCOLOR_GOLD)
					end

			getPlayerVocation(cid)
				Info
					This function checks player Vocation ID.

				Returns
					Player Vocation ID.
					For Example:
						1 - when player vocation is Sorcerer
						7 - when player vocation is Royal Paladin

				Example
					local playerVoc = getPlayerVocation(cid)
					if playerVoc == 1 then --If Vocation is Sorcerer or Master Sorcerer then weapon = Wand
						weapon = 2190 --Wand of vortex
					elseif playerVoc == 2 then --If Voc == Druid or Elder Druid then weapon = Rod
						weapon = 2182 --Snakebite Rod
					elseif playerVoc == 3 then --If Voc == Paladin or Royal Paladin then weapon = Spear
						weapon== 2389 --Spear
					elseif playerVoc == 4 then --If Voc == Knight or Elite Knight then weapon = Sword
						weapon = 2412 --Katana
					end
					doPlayerAddItem(cid, weapon)

			getPlayerItemCount(cid, itemid)
				Info
					This function checks how much items with specified id is player holding.

				Returns
					A count of itemid.
						For Example:
							2 - when player have 2x royal spear
							73 - when player have 73 platinum coins

				Example
					local crystalCoins = getPlayerItemCount(cid, 2160)
					local platinumCoins = getPlayerItemCount(cid, 2152)
					local goldCoins = getPlayerItemCount(cid, 2148)
					money = crystalCoins * 10000 + platinumCoins * 100 + goldCoins
					doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your money: " .. money .. "gp")

			getPlayerSoul(cid)
				Info
					This function checks how much soul points player actually have.

				Returns
					Player actually soul points.
					For Example:
						27 - when player have 27 soul points
						134 - when player have 134 soul points

				Example
					doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your soul points: " .. getPlayerSoul(cid))

			getPlayerFreeCap(cid)
				Info
					This function checks how much free cap points player actually have.

				Returns
					Player actually cap points.
						For Example:
							181 - when player have 181 capacity
							1460 - when player have 1460 capacity

				Example
					local playerCap = getPlayerFreeCap(cid)
					local item = 2393 --Giant Sword
					local itemweight = getItemWeight(item, 1)
					if playerCap >= itemweight then
						doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a giant sword.')
						doPlayerAddItem(cid,item)
					else
						doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You have found a giant sword weighing ' ..itemweight.. ' oz it\'s too heavy.')

			getPlayerLight(cid)
				Info
					This function checks player actually light.

				Returns
					Player actually light.
					For Example:
						215 - after using "utevo gran lux"

			getPlayerSlotItem(cid, slot)
				Info
					This function checks what item player have actually in slot.
					Slot can be:
					CONST_SLOT_HEAD (1) = helmet
					CONST_SLOT_NECKLACE (2) = necklace slot (amulet of loss etc.)
					CONST_SLOT_BACKPACK (3) = backpack, bag
					CONST_SLOT_ARMOR (4) = armor
					CONST_SLOT_LEFT (5) = left hand (its really hand placed >> (right page on screen))
					CONST_SLOT_RIGHT (6) = right hand (its really hand placed << (left page on screen))
					CONST_SLOT_LEGS (7) = legs
					CONST_SLOT_FEET (8) = boots
					CONST_SLOT_RING (9) = ring slot
					CONST_SLOT_AMMO (10) = ammo slot (arrows etc.)

				Returns
					Array with item which is actually in slot. When slot is empty, then returns false
						For Example:
							{itemid = 2493, uid = 70001, actionid = 0} (demon helmet, slot = 1)

				Example
					if getPlayerSlotItem(cid, CONST_SLOT_NECKLACE).itemid == 2173 then  --checking if player have amulet of loss in necklace slot
						doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Ok, you can go.")
					else
						doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Sorry, you need amulet of loss to go.")
						doTeleportThing(cid, fromPosition, TRUE)
					end

			getPlayerDepotItems(cid, depotid)
				Info
					This function checks how much items (slots reserved, becouse 10cc = 1 slot) player have in depo.
						Depotid = number, which depo we want to check.

				Returns
					Busy slots in depot.
						For example:
							7 - when player have in depo:
								- sword
								- rope
								- 100 uh
								- parcel (inside: 10 crystal coins + label)
								- depot chest (standard, all players have it)

				Example
					depotItems = getPlayerDepotItems(cid, 3)  -- 3 = Desert City
					if depotItems < 2 then --When depo contains only 1 ITEM.
						doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Your depot contains 1 item.")
					else
						doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Your depot contains " ..depotItems.. " items.")
					end

			getPlayerSex(cid)
				Info
					This function checks player sex.

				Returns
					Player sex.
					For example:
						PLAYERSEX_FEMALE (0) - when player is female
						PLAYERSEX_MALE (1) - when player is male
						PLAYERSEX_GAMEMASTER (2) - gamemaster (Means if player have changed their sex to type = 2)

				Example
					local playerPos = getCreaturePosition(cid)
					local playerSex = getPlayerSex(cid)
					if playerSex == PLAYERSEX_FEMALE then --female
						doSendAnimatedText(playerPos, 'GiRl :*:*', TEXTCOLOR_GOLD)
					elseif playerSex == PLAYERSEX_MALE then --male
						doSendAnimatedText(playerPos, 'Wtf? I aM BoY.', TEXTCOLOR_GOLD)
					else --hermaphrodite
						doSendAnimatedText(playerPos, 'Who am I? :(', TEXTCOLOR_GOLD)
					end

			getPlayerGUID(cid)
				Info
					This function checks player guid.

				Returns
					Player id. When checked creature isn't player then returns false.
					For example:
						61 - when player id in database is 61
						false - when checked creature is NPC

				Example
					doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You are player with id: " .. getPlayerGUID(cid))

			getPlayerFlagValue(cid, flag)
				Info
					This function checks player flag value.

				Returns
					Return true if player have specified flag, otherwise false
					For example:
						true - checking GM for PlayerFlag_CannotBeAttacked
						false - checking player for PlayerFlag_CannotBeAttacked

				Example
					if getPlayerFlagValue(cid, PlayerFlag_CanSummonAll) then --if can
						doSummonCreature("Demon", fromPosition.x + 1)
					else --if cant
						doSummonCreature("Rat", fromPosition.x + 1)
					end

			getPlayerCustomFlagValue(cid, flag)
				Info
					Same as getPlayerFlagValue, but there are checked custom flags, which was introduced in TFS 0.3
					This function checks player custom flag value.

				Returns
					Return true if player have specified custom flag, otherwise false
					For example:
						true - checking GM for PlayerCustomFlag_CanLoginMultipleCharacters
						false - checking player for PlayerCustomFlag_CanLoginMultipleCharacters

			getPlayerGroupId(cid)
				Info
					This function checks player group ID.

				Returns
					Player group id.
					For example (using standard TFS groups):
						1 - when checked player is player
						2 - when checked player is gamemaster
						3 - when checked player is god

				Example
					local group = getPlayerGroupId(cid)
					if group == 3 then--when God
						doPlayerAddItem(cid, 2160, 100) --100 crystal coins
					elseif group == 2 then--when Gamemaster
						doPlayerAddItem(cid, 2160, 50) --50 crystal coins
					else
						doPlayerSendCancel(cid, "Sorry, cheats doesnt work for you."
					end

			getPlayerGuildId(cid)
				Info
					This function returns player's guild id.

				Returns
					Players guild id.
					For example
						21 - The guild the player is in has the guild id 21, as stored in the database.

				Example
					local guildId = getPlayerGuildId(cid)
					if guildId == 21 then
						doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Welcome in our guild hunting place!")
					elseif guildId == 22 then
						doPlayerSendCancel(cid, "This area is not for your guild!")
					end

			getPlayerGuildName(cid)
				Info
					Used to get player's guild name.

				Returns
					Players guild name in a string.
					For example
						"Lost Dragons"

				Example
					local guildName = getPlayerGuildName(cid)
					doSendAnimatedText(getCreaturePosition(cid),guildName, TEXTCOLOR_GOLD)

			getPlayerGuildRank(cid)
				Info
					Used to get player's rank name in a guild.

				Returns
					The players current rank in his guild in a string
					For example
						"Senator"

				Example
					local rank = getPlayerGuildRank(cid)
					doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You're a " .. rank .. " in your guild.")

			getPlayerGuildNick(cid)
				Info
					Used to get player's nick in his guild.

				Returns
					The players current nick in a string.
					For example
						"The protector"

				Example
					doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Your guild nick is " .. getPlayerGuildNick(cid) .. ".")
]

[ "set" functions
	Introduction
		These functions usually changes thing properties.

	List
		*Creatures
			setCreatureMaxHealth(cid, health)
				Info
					This function changes creature max health.

				Returns
					Returns true - if creature found and max health changed, otherwise return false

			setCreatureMaxMana(cid, mana)
				Info
					This function changes creature max mana.

				Returns
					Returns true - if creature found and max mana changed, otherwise return false

]

[ "do" functions
	Introduction
		These functions usually execute an action.

	List
		*Creatures

		*Players
			doPlayerSendCancel(cid, text)
				Info
					This function will send cancel message do player (visible in bottom of a screen)

				Returns
					Returns true - when msg was sent, false - when it was impossible.

				Example
					if getPlayerLevel(cid) >= 10 then --checking level
						doSummonCreature("Chicken", fromPosition.x + 1)
					else
						doPlayerSendCancel(cid, "Sorry, your level isnt enought to summon this monster.")
					end
]

[ LIST
	[ Note
		This list seems to be strongly outdated! Please come back on Gold release 
	]

	//get*
	getCreatureHealth(cid)
	getCreatureMaxHealth(cid)
	getCreatureHideHealth(cid)
	getCreatureMana(cid)
	getCreatureMaxMana(cid)
	getCreatureSpeakType(cid)
	getCreatureMaster(cid)
	getCreatureSummons(cid)
	getCreatureOutfit(cid)
	getCreaturePosition(cid)
	getCreatureLookDirection(cid)
	getCreatureName(cid)
	getCreatureSpeed(cid) //TODO
	getCreatureBaseSpeed(cid) //TODO
	getCreatureTarget(cid) //TODO
	getCreatureByName(name)
	getCreatureSkullType(cid)
	getCreatureCondition(cid, condition[, subId]) //TODO
	getCreatureNoMove(cid) //TODO
	getMonsterInfo(name)
	getMonsterHealingSpells(name) //TODO
	getMonsterAttackSpells(name) //TODO
	getMonsterLootList(name) //TODO
	getMonsterSummonList(name) //TODO
	getMonsterTargetList(cid) //TODO
	getMonsterFriendList(cid) //TODO
	getPlayerByNameWildcard(name~[, ret = false]) //TODO
	getPlayerLossSkill(cid) //TODO
	getPlayerLossPercent(cid, lossType) //TODO
	getPlayerGUIDByName(name[, multiworld = false]) //TODO
	getPlayerNameByGUID(guid[, multiworld = false[, displayError = true]]) //TODO
	getPlayerFood(cid)
	getPlayerLevel(cid)
	getPlayerExperience(cid)
	getPlayerMagLevel(cid[, ignoreBuffs = false]) //TODO
	getPlayerSpentMana(cid) //TODO
	getPlayerAccess(cid)
	getPlayerGhostAccess(cid)
	getPlayerSkillLevel(cid, skillId)
	getPlayerSkillTries(cid, skillId) //TODO
	getPlayerTown(cid)
	getPlayerVocation(cid)
	getPlayerRequiredMana(cid, magicLevel) //TODO
	getPlayerRequiredSkillTries(cid, skillId, skillLevel) //TODO
	getPlayerItemCount(cid, itemid[, subType = -1])
	getPlayerSoul(cid)
	getPlayerAccountId(cid) //TODO
	getPlayerAccount(cid) //TODO
	getPlayerIp(cid) //TODO
	getPlayerFreeCap(cid)
	getPlayerLight(cid)
	getPlayerSlotItem(cid, slot)
	getPlayerWeapon(cid[, ignoreAmmo = false]) //TODO
	getPlayerItemById(cid, deepSearch, itemId[, subType = -1]) //TODO
	getPlayerDepotItems(cid, depotid)
	getPlayerGuildId(cid)
	getPlayerGuildName(cid)
	getPlayerGuildRank(cid)
	getPlayerGuildNick(cid)
	getPlayerGuildLevel(cid) //TODO: From here, all bottoms
	getPlayerSex(cid)
	getPlayerStorageValue(uid, key)
	getPlayerGUID(cid)
	getPlayerFlagValue(cid, flag)
	getPlayerCustomFlagValue(cid, flag)
	getPlayerPromotionLevel(cid)
	getPlayerGroupId(cid)
	getPlayerLearnedInstantSpell(cid, name)
	getPlayerInstantSpellCount(cid)
	getPlayerInstantSpellInfo(cid, index)
	getPlayerBlessing(cid, blessing)
	getPlayerStamina(cid)
	getPlayerExtraExpRate(cid)
	getPlayerPartner(cid)
	getPlayerParty(cid)
	getPlayerPremiumDays(cid)
	getPlayerBalance(cid)
	getPlayerMoney(cid)
	getPlayerSkullTicks(cid, type)
	getPlayerRates(cid)
	getPlayerLastLogin(cid)
	getPlayerLastLoginSaved(cid)
	getPlayerAccountManager(cid)
	getInstantSpellInfo(cid, name)
	getPlayersByAccountId(accountNumber)
	getPlayersByIp(ip[, mask = 0xFFFFFFFF])
	getChannelUsers(channelId)
	getPlayersOnline()
	getPartyMembers(lid)
	getAccountIdByName(name)
	getAccountByName(name)
	getAccountIdByAccount(accName)
	getAccountByAccountId(accId)
	getIpByName(name)
	getItemRWInfo(uid)
	getItemProtection(uid)
	getItemDescriptionsById(itemid)
	getItemWeightById(itemid, count[, precise])
	getItemDescriptions(uid)
	getItemWeight(uid[, precise])
	getItemAttack(uid)
	getItemExtraAttack(uid)
	getItemDefense(uid)
	getItemExtraDefense(uid)
	getItemArmor(uid)
	getItemAttackSpeed(uid)
	getItemHitChance(uid)
	getItemShootRange(uid)
	getItemIdByName(name[, displayError = true])
	getItemLevelDoor(itemid)
	getItemWeaponType(uid)
	getFluidSourceType(type)
	getContainerSize(uid)
	getContainerCap(uid)
	getContainerCapById(itemid)
	getContainerItem(uid, slot)
	getDepotId(uid)
	getTileItemById(pos, itemId[, subType = -1])
	getTileItemByType(pos, type)
	getTileThingByPos(pos)
	getTileInfo(pos)
	getTopCreature(pos)
	getClosestFreeTile(cid, targetpos[, extended = false[, ignoreHouse = true]])
	getThingFromPos(pos)
	getThing(uid)
	getThingPos(uid)
	getHouseInfo(id)
	getHouseAccessList(houseid, listid)
	getHouseByPlayerGUID(playerGUID)
	getHouseFromPos(pos)
	getTownId(townName)
	getTownName(townId)
	getTownTemplePosition(townId)
	getTownHouses(townId)
	getWorldType()
	getWorldTime()
	getWorldLight()
	getWorldCreatures(type) //0 players, 1 monsters, 2 npcs, 3 all
	getWorldUpTime()
	getHighscoreString(skillId)
	getVocationInfo(id)
	getGuildId(guildName)
	getGuildMotd(guildId)
	getSpectators(centerPos, rangex, rangey[, multifloor = false])
	getSearchString(fromPosition, toPosition[, fromIsCreature = false[, toIsCreature = false]])
	getWaypointPosition(name)
	getGameState()
	getNotationsCount(accId)
	getBanData(value)
	getBanList(type[, value])
	getBanReason(id)
	getBanAction(id[, ipBanishment])
	getGlobalStorageValue(valueid)
	getExperienceStage(level)
	getConfigFile()
	getConfigValue(key)
	getModList()
	loadmodlib(libName)
	domodlib(libName)
	getLogsDir()
	getDataDir()
	getWaypointList()
	getTalkActionList()
	getExperienceStageList()

	//set*
	setCreatureMaxHealth(cid, health)
	setCreatureMaxMana(cid, mana)
	setHouseOwner(houseid, ownerGUID)
	setHouseAccessList(houseid, listid, listtext)
	setItemName(uid)
	setItemPluralName(uid)
	setItemArticle(uid)
	setItemAttack(uid, attack)
	setItemExtraAttack(uid, extraattack)
	setItemDefense(uid, defense)
	setItemArmor(uid, armor)
	setItemExtraDefense(uid, extradefense)
	setItemAttackSpeed(uid, attackspeed)
	setItemHitChance(uid, hitChance)
	setItemShootRange(uid, shootRange)
	setCombatArea(combat, area)
	setCombatCondition(combat, condition)
	setCombatParam(combat, key, value)
	setConditionParam(condition, key, value)
	setCombatCallBack(combat, key, function_name)
	setCombatFormula(combat, type, mina, minb, maxa, maxb)
	setConditionFormula(combat, mina, minb, maxa, maxb)
	setGlobalStorageValue(key, newValue)
	setWorldType(type)

	//do*
	doCreatureAddHealth(cid, health[, force])
	doCreatureAddMana(cid, mana)
	doCreatureSetDropLoot(cid, doDrop)
	doCreatureSetSkullType(cid, skull)
	doCreatureSetSpeakType
	doCreatureSetLookDirection(cid, dir)
	doPlayerSetMaxCapacity(cid, cap)
	doCreatureChangeOutfit(cid, outfit)
	doCreatureSay(uid, text, type[, ghost = false[, cid = 0[, pos]]])
	doCreatureSetNoMove(cid, cannotMove)
	doSetCreatureLight(cid, lightLevel, lightColor, time)
	doSetCreatureOutfit(cid, outfit, time)
	doRemoveCreature(cid[, executeLogout = true])
	doMoveCreature(cid, direction)
	doConvinceCreature(cid, target)
	doChallengeCreature(cid, target)
	doChangeSpeed(cid, delta)
	doSummonMonster(name, pos)
	doCreateMonster(name, pos)
	doMonsterChangeTarget(cid)
	doMonsterSetTarget(cid, target)
	doCreateNpc(name, pos)
	doSetMonsterOutfit(cid, name, time)
	doPlayerBroadcastMessage(cid, message[, type])
	doPlayerSetSex(cid, newSex)
	doPlayerSetTown(cid, townid)
	doPlayerSetVocation(cid, voc)
	doPlayerSetStorageValue(uid, key, newValue)
	doPlayerSetGroupId(cid, newGroupId)
	doPlayerSetPromotionLevel(cid, level)
	doPlayerSetStamina(cid, minutes)
	doPlayerSetBalance(cid, balance)
	doPlayerSetExtraExpRate(cid, value)
	doPlayerSetPartner(cid, guid)
	doPlayerRemoveItem(cid, itemid, count[, subtype])
	doPlayerAddExperience(cid, amount)
	doPlayerSetGuildId(cid, id)
	doPlayerSetGuildRank(cid, rank)
	doPlayerSetGuildNick(cid, nick)
	doPlayerAddOutfit(cid,looktype, addons)
	doPlayerRemoveOutfit(cid,looktype, addons)
	doPlayerSetRedSkullTicks(cid, amount)
	doPlayerSetLossPercent(cid, lossType, newPercent)
	doPlayerSetLossSkill(cid, doLose)
	doPlayerAddSkillTry(cid, skillid, n)
	doPlayerAddSpentMana(cid, amount)
	doPlayerAddSoul(cid, soul)
	doPlayerAddItem(uid, itemid[, count/subtype[, canDropOnMap = true]])
	doPlayerAddItemEx(cid, uid[, canDropOnMap = false])
	doPlayerSendTextMessage(cid, MessageClasses, message)
	doPlayerSendChannelMessage(cid, author, message, SpeakClasses, channel)
	doPlayerSendToChannel(cid, targetId, SpeakClasses, message, channel[, time])
	doPlayerAddMoney(cid, money)
	doPlayerRemoveMoney(cid, money)
	doPlayerTransferMoneyTo(cid, target, money)
	doPlayerPopupFYI(cid, message)
	doPlayerSendTutorial(cid, id)
	doPlayerAddMapMark(cid, pos, type[, description])
	doPlayerAddPremiumDays(cid, days)
	doPlayerAddBlessing(cid, blessing)
	doPlayerAddStamina(cid, minutes)
	doPlayerResetIdleTime(cid)
	doPlayerLearnInstantSpell(cid, name)
	doPlayerUnlearnInstantSpell(cid, name)
	doPlayerFeed(cid, food)
	doPlayerSendCancel(cid, text)
	doPlayerSendDefaultCancel(cid, ReturnValue)
	doPlayerSetRate(cid, type, value)
	doPlayerJoinParty(cid, lid)
	doPlayerSendOutfitWindow(cid)
	doPlayerSave(cid[, shallow = false])
	doCreateItem(itemid, type/count, pos)
	doCreateItemEx(itemid[, count/subtype])
	doAddContainerItemEx(uid, virtuid)
	doAddContainerItem(uid, itemid[, count/subtype])
	doChangeTypeItem(uid, newtype)
	doDecayItem(uid)
	doRemoveItem(uid[, count])
	doTransformItem(uid, toitemid[, count/subtype])
	doSetItemActionId(uid, actionid)
	doSetItemText(uid, text[, writer[, date]])
	doSetItemSpecialDescription(uid, desc)
	doSetItemOutfit(cid, item, time)
	doSetItemProtection(uid, value)
	doTileAddItemEx(pos, uid)
	doTileQueryAdd(uid, pos[, flags])
	doAddCondition(cid, condition)
	doRemoveCondition(cid, type[, subId])
	doRemoveConditions(cid[, onlyPersistent])
	doAreaCombatHealth(cid, type, pos, area, min, max, effect)
	doTargetCombatHealth(cid, target, type, min, max, effect)
	doAreaCombatMana(cid, pos, area, min, max, effect)
	doTargetCombatMana(cid, target, min, max, effect)
	doAreaCombatCondition(cid, pos, area, condition, effect)
	doTargetCombatCondition(cid, target, condition, effect)
	doAreaCombatDispel(cid, pos, area, type, effect)
	doTargetCombatDispel(cid, target, type, effect)
	doCombat(cid, combat, param)
	doTeleportThing(cid, newpos[, pushmove = true])
	doCreateTeleport(itemid, topos, createpos)
	doSendMagicEffect(pos, type[, player])
	doSendDistanceShoot(frompos, topos, type[, player])
	doSendAnimatedText(pos, text, color[, player])
	doShowTextDialog(cid, itemid, text)
	doRelocate(pos, toPos[, creatures = true])
	doBroadcastMessage(message, type)
	doWaypointAddTemporial(name, pos)
	doSetGameState(stateId)
	doAddIpBanishment(ip[, length[, comment[, admin]]])
	doAddNamelock(name[, reason[, action[, comment[, admin]]]])
	doAddBanishment(accId[, length[, reason[, action[, comment[, admin]]]]])
	doAddDeletion(accId[, reason[, action[, comment[, admin]]]]])
	doAddNotation(accId[, reason[, action[, comment[, admin]]]]])
	doRemoveIpBanishment(ip[, mask])
	doRemoveNamelock(name)
	doRemoveBanisment(accId)
	doRemoveDeletion(accId)
	doRemoveNotations(accId)
	doSaveServer()
	doReloadInfo(id[, cid])
	doCleanHouse(houseId)
	doCleanMap()
	doRefreshMap()

	//is*
	isCreature(cid)
	isMonster(uid)
	isNpc(uid)
	isPlayer(cid)
	isPlayerPzLocked(cid)
	isItemStackable(itemid)
	isItemRune(itemid)
	isItemMovable(itemid)
	isItemDoor(itemid)
	isItemContainer(itemid)
	isItemFluidContainer(itemid)
	isContainer(uid)
	isCorpse(uid)
	isMovable(uid)
	isSightClear(fromPos, toPos, floorCheck)
	isIpBanished(ip[, mask])
	isPlayerNamelocked(name)
	isAccountBanished(accId)
	isAccountDeleted(accId)
	isInArray({array}, value[, lower = true])

	//others
	registerCreatureEvent(uid, eventName)
	createCombatArea({area}[, {exArea}])
	createConditionObject(type[, ticks[, buff[, subId]]])
	addDamageCondition(condition, rounds, time, value)
	addOutfitCondition(condition, lookTypeEx, lookType, lookHead, lookBody, lookLegs, lookFeet)
	createCombatObject()
	numberToVariant(number)
	stringToVariant(string)
	positionToVariant(pos)
	targetPositionToVariant(pos)
	variantToNumber(var)
	variantToString(var)
	variantToPosition(var)
	canPlayerWearOutfit(cid, lookType, addons)
	executeRaid(name)
	addEvent(callback, delay, ...)
	stopEvent(eventid)
	hasProperty(uid)

	md5(str)
	sha1(str)

	//db table
	db.executeQuery(query)
	db.storeQuery(query)
	db.escapeString(str)
	db.escapeBlob(s, length)
	db.stringComparisonOperator()
	db.lastInsertId()

	//result table
	result.getDataInt(resId, s)
	result.getDataLong(resId, s)
	result.getDataString(resId, s)
	result.getDataStream(resId, s, length)
	result.next(resId)
	result.free(resId)

	//bit table
	#bit.cast
	bit.bnot(n)
	bit.band(type, n)
	bit.bor(type, n)
	bit.bxor(type, n)
	bit.lshift(type, n)
	bit.rshift(type, n)
	#bit.arshift
	#bit.ucast
	bit.ubnot(n)
	bit.uband(type, n)
	bit.ubor(type, n)
	bit.ubxor(type, n)
	bit.ulshift(type, n)
	bit.urshift(type, n)
	#bit.uarshift

	//compats
	table.getPos = table.find
	doSetCreatureDropLoot = doCreatureSetDropLoot
	doPlayerSay = doCreatureSay
	doPlayerAddMana = doCreatureAddMana
	playerLearnInstantSpell = doPlayerLearnInstantSpell
	doPlayerRemOutfit = doPlayerRemoveOutfit
	pay = doPlayerRemoveMoney
	broadcastMessage = doBroadcastMessage
	getPlayerName = getCreatureName
	getPlayerPosition = getCreaturePosition
	getCreaturePos = getCreaturePosition
	creatureGetPosition = getCreaturePosition
	getPlayerMana = getCreatureMana
	getPlayerMaxMana = getCreatureMaxMana
	hasCondition = getCreatureCondition
	isMoveable = isMovable
	isItemMoveable = isItemMovable
	saveData = saveServer
	savePlayers = saveServer
	getPlayerSkill = getPlayerSkillLevel
	getPlayerSkullType = getCreatureSkullType
	getCreatureSkull = getCreatureSkullType
	getAccountNumberByName = getAccountIdByName
	getIPByName = getIpByName
	getPlayersByIP = getPlayersByIp
	getThingfromPos = getThingFromPos
	getPlayersByAccountNumber = getPlayersByAccountId
	getIPByPlayerName = getIpByName
	getPlayersByIPNumber = getPlayersByIp
	getAccountNumberByPlayerName = getAccountIdByName
	convertIntToIP = doConvertIntegerToIp
	convertIPToInt = doConvertIpToInteger
	queryTileAddThing = doTileQueryAdd
	getTileHouseInfo = getHouseFromPos
	executeRaid = doExecuteRaid
	saveServer = doSaveServer
	cleanHouse = doCleanHouse
	cleanMap = doCleanMap
	shutdown = doShutdown
	mayNotMove = doCreatureSetNoMove
	doPlayerSetNoMove = doCreatureSetNoMove
	getPlayerNoMove = getCreatureNoMove
	getConfigInfo = getConfigValue
	doPlayerAddExp = doPlayerAddExperience
	isInArea = isInRange
	doPlayerSetSkillRate = doPlayerSetRate
	getCreatureLookDir = getCreatureLookDirection
	getPlayerLookDir = getCreatureLookDirection
	getPlayerLookDirection = getCreatureLookDirection
	doCreatureSetLookDir = doCreatureSetLookDirection
	getPlayerLookPos = getCreatureLookPosition
	setPlayerStamina = doPlayerSetStamina
	setPlayerPromotionLevel = doPlayerSetPromotionLevel
	setPlayerGroupId = doPlayerSetGroupId
	setPlayerPartner = doPlayerSetPartner
	setPlayerStorageValue = doPlayerSetStorageValue
	setPlayerBalance = doPlayerSetBalance
	doAddMapMark = doPlayerAddMapMark
	doSendTutorial = doPlayerSendTutorial

	//lua-made functions
	doPlayerGiveItem(cid, itemid, amount, subType)
	doPlayerTakeItem(cid, itemid, amount)
	doPlayerBuyItem(cid, itemid, count, cost, charges)
	doPlayerBuyItemContainer(cid, containerid, itemid, count, cost, charges)
	doPlayerSellItem(cid, itemid, count, cost)
	doPlayerWithdrawMoney(cid, money)
	doPlayerDepositMoney(cid, money)
	comparePos(pos, posEx)
	isInRange(pos, fromPos, toPos)
	getArea(pos, rangeX, rangeY)
	isPremium(cid)
	getMonthDayEnding(day)
	getMonthString(m)
	getArticle(str)
	isNumber(str)
	getDistanceBetweenPos(firstPos, secondPos)
	doPlayerAddAddons(cid, addon)
	isSorcerer(cid)
	isDruid(cid)
	isPaladin(cid)
	isKnight(cid)
	isRookie(cid)
	getDirectionTo(pos, posEx)
	getCreatureLookPosition(cid)
	getPosByDir(fromPosition, direction[, size])
	doPlayerWithdrawAllMoney(cid)
	doPlayerDepositAllMoney(cid)
	doPlayerTransferAllMoneyTo(cid, target)
	doPlayerAddLevel(cid, amount, round)
	doPlayerAddMagLevel(cid, amount)
	doPlayerAddSkill(cid, amount)
	playerExists(name)
	getTibiaTime()
	doWriteLogFile(file, text)
	isInArea(pos, fromPos, toPos)
	getExperienceForLevel(lv)
	doMutePlayer(cid, time)
	getPlayerGroupName(cid)
	getPlayerVocationName(cid)
	getPromotedVocation(vid)
	doPlayerRemovePremiumDays(cid, days)
	getPlayerMasterPos(cid)
	getHouseOwner(houseId)
	getHouseName(houseId)
	getHouseEntry(houseId)
	getHouseRent(houseId)
	getHousePrice(houseId)
	getHouseTown(houseId)
	getHouseTilesCount(houseId)
	getItemNameById(itemid)
	getItemPluralNameById(itemid)
	getItemArticleById(itemid)
	getItemName(uid)
	getItemPluralName(uid)
	getItemArticle(uid)
	getItemText(uid)
	getItemSpecialDescription(uid)
	getItemWriter(uid)
	getItemDate(uid)
	getTilePzInfo(pos)
	getTileZoneInfo(pos)
	debugPrint(text)
	doShutdown()
	doSummonCreature(name, pos)
	getOnlinePlayers()
	getPlayerByName(name)
	isPlayerGhost(cid)
	getPlayerFrags(cid)
	getPartyLeader(cid)
	isInParty(cid)
	isPrivateChannel(channelId)
	doConvertIntegerToIp(int, mask)
	doConvertIpToInteger(int, mask)
	getBooleanFromString(str)
	doCopyItem(item, attributes)
	exhaustion.check(cid, storage)
	exhaustion.get(cid, storage)
	exhaustion.set(cid, storage, time)
	exhaustion.make(cid, storage, time)
	table.find(table, value)
	table.isStrIn(txt, str)
	table.countElements(table, item)
	table.getCombinations(table, num)
	string.split(str)
	string.trim(str)
	string.explode(str, sep)
]

 



não contém todas mas quebra um galho.

e em data/lib/constant.lua vc acha um arquivo contendo várias informações sobre seu servidor, uma delas explica o motivo de vc ter colocado, 180 na função.

TEXTCOLOR_RED = 180

Isso implica que 180 é o numero associado à cor vermelha.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...