Ir para conteúdo

Featured Replies

  • Respostas 10
  • Visualizações 518
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • tenta assim local from,to = {x=1001, y=705, z=7},{x=1031, y=737, z=7} -- começo e final do mapa local from2,to2 = {x=1011, y=705, z=6},{x=1031, y=738, z=6} -- começo e final do mapa local from

Postado
  • Solução

tenta assim

local from,to = {x=1001, y=705, z=7},{x=1031, y=737, z=7} -- começo e final do mapa
local from2,to2 = {x=1011, y=705, z=6},{x=1031, y=738, z=6} -- começo e final do mapa
local from3,to3 = {x=1012, y=706, z=5},{x=1032, y=739, z=5} -- começo e final do mapa
local from4,to4 = {x=985, y=598, z=7},{x=1044, y=652, z=7} -- começo e final do mapa
local from5,to5 = {x=986, y=615, z=6},{x=1039, y=647, z=7} -- começo e final do mapa
local from6,to6 = {x=990, y=616, z=5},{x=1040, y=647, z=5} -- começo e final do mapa

local config = {
--[vocation id] = { level, nova voc, looktype}
[1] = { 1, 2, 398, 13, 30},
[2] = { 80, 3, 399, 13, 30}
}

local tempo = 60 * 1000

local condition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_TICKS, tempo)
setConditionParam(condition, CONDITION_PARAM_STAT_MAXHEALTHPERCENT, 110) -- 110% da vida
setConditionParam(condition, CONDITION_PARAM_BUFF, true)

function onSay(cid, words, param, channel)
	if isInRange(getCreaturePosition(cid), from, to) or isInRange(getCreaturePosition(cid), from2, to2) or isInRange(getCreaturePosition(cid), from3, to3) or isInRange(getCreaturePosition(cid), from4, to4) or isInRange(getCreaturePosition(cid), from5, to5) or isInRange(getCreaturePosition(cid), from6, to6) then
		doPlayerSendCancel(cid, "Você não pode se Transformar nesta área!") 
		return true
	end
	
	doPlayerSay(cid, "transformar")
	local voc = config[getPlayerVocation(cid)]

	if voc then
		if getPlayerLevel(cid) >= voc[1] then
			registerCreatureEvent(cid, "stordeath")
			setPlayerStorageValue(cid, voc_stor, getPlayerVocation(cid))
			doPlayerSetVocation(cid, voc[2])
			addEvent(doPlayerSetVocation,tempo,cid,getPlayerStorageValue(cid, voc_stor))
			addEvent(setPlayerStorageValue,tempo,cid,voc_stor,0)
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você Transformou!")
			local outfit = {lookType = voc[3]}
			doSetCreatureOutfit(cid, outfit, tempo)
			doSendMagicEffect(getCreaturePosition(cid), voc[4])
			local efeito = voc[5]
			local function meffect(cid,t)
				if isPlayer(cid) and t ~= 0 then
					doSendMagicEffect(getThingPos(cid), efeito)
					addEvent(meffect, 1000, cid, (t - 1))
				end
			end
			meffect(cid,(tempo/1000))	
			doAddCondition(cid, condition)
		else
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você precisa estar no level " .. voc[1] .. " para transformar.")
		end
	else
		doPlayerSendCancel(cid, "Você não pode se Transformar!")
	end
return true
end
Postado
  • Autor

Man funcionou perfeitamente, mas queria que a porcentegem tbm fosse executada na tabela, pq seria especifico para cada vocação, mas ficou muito bom achei muito massa tentei até mudar algumas coisas pra ver se conseguia, queria que executasse assim  setConditionParam(condition, CONDITION_PARAM_STAT_MAXHEALTHPERCENT, 100 + voc[6]) -- mas pra isso teria que mudar eu sei, por que a função onsay , n executa isso, --' mas ficou bacana, ótimo trabalho, bastante dedicado !! Rep +

Postado

eu percebi que esse era o intuito porém pra fazer isso vc teria que fazer uma das gambiarras abaixo.

Primeira gambiarra: criar várias conditions com % de vida pré-definidas e selecionar dentro do script qual aplicar (o motivo disso é q vc tem que criar as conditions quando o server abre, por isso elas ficam fora do escopo do script (fora do callback))

Segunda gambiarra: Utilizar a função setCreatureMaxHealth e colocar um addEvent pra setar a vida de volta ao normal. O problema desse segundo caso é q se vc tiver qualquer magia/script/mount que aumente a vida máxima do player vai dar pra ele usar esses dois combinados pra aumentar o tamanho da vida dele permanentemente.

Se um dia vc for fazer alguma delas, sugiro que faça a primeira. Fica muito feio no código mas é a que tem menos chance de cagar, além do mais, player não vê script.

Participe da conversa

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

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo