Postado Dezembro 1, 2015 9 anos 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 Dezembro 2, 2015 9 anos 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 Dezembro 2, 2015 9 anos 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.