Ir para conteúdo
  • Cadastre-se

(Resolvido)[Ajuda] Talk Transform


Ir para solução Resolvido por xWhiteWolf,

Posts Recomendados

Pessoal, eu estava dando uma mexida numa talk, que tinha no meu serv dei uma aprimorada nela, porem não conseguir fazer com que o player ganhe hp em um determinado tempo, que no caso seria 10% a mais da total, eu tentei ajeitar mas acho que escrevi a função errada, ou sei lá , ela tá funcionando perfeitamente, a unica coisa que falta nela é o aumento de hp e mana em 10% do total em um determinado tempo, que já tá na script em local tempo.

Spoiler

local tempo = 60 * 1000
local config = {
--[vocation id] = { level, nova voc, looktype, efeito}
[1] = { 1, 2, 398, 13, 30, 10},
[2] = { 80, 3, 399, 13, 30, 10}
}
function onSay(cid, words, param, channel)
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
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))
setCreatureMaxHealthPercent(cid, 100 + voc[6])
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

Desde já agradeço pela contribuição !!

REP+

Link para o post
Compartilhar em outros sites

Tenta usar este:

 

local tempo = 60 * 1000
local config = {
--[vocation id] = { level, nova voc, looktype, efeito}
[1] = { 1, 2, 398, 13, 30, 10},
[2] = { 80, 3, 399, 13, 30, 10}
}
function onSay(cid, words, param, channel)
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
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
	local heal1 = getCreatureMaxHealth(cid)/10
	local life = getCreatureMaxHealth(cid)+heal1
	local mana1 = getCreatureMaxMana(cid)/10
	local mana = getCreatureMaxMana(cid)+mana1
	addEvent(setCreatureMaxMana, tempo, mana)
	addEvent(setCreatureMaxHealth, tempo, life)
    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))
setCreatureMaxHealthPercent(cid, 100 + voc[6])
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

Creio que funcione!

wq3bBzt.png
Pokémon Dust Evolution
 
É aonde começa sua nova aventura!! 

 

Facebook

 
Verifique Atualizações

 

Link para o post
Compartilhar em outros sites

Eu tentei maniw, creio que a script tá 100% só que n tá funcionando, n da erro nem nada, manjo mais ou menos em script, e sei que n tá errada. mas n adiciona nada de hp e mana. pode me ajudar?

a disto n deu nem um erro... tudo tranquilo as outras funções funcionaram normal menos a da hp e da mana.

Link para o post
Compartilhar em outros sites

Tenta essa :

 

Spoiler

local tempo = 60 * 1000
local config = {
--[vocation id] = { level, nova voc, looktype, efeito}
[1] = { 1, 2, 398, 13, 30, 10},
[2] = { 80, 3, 399, 13, 30, 10}
}
function onSay(cid, words, param, channel)
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
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))
setCreatureMaxHealthPercent(cid, 100 + voc[1])
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



 

giphy.gif

Link para o post
Compartilhar em outros sites

maniw nessa parte --- setCreatureMaxHealthPercent(cid, 100 + voc[1])  onde tem voc[1] é para ser executado aquela coluna, no caso o voc[1] ia ser as vocações desse forma /\ não a porcentagem da ultima coluna, eu creio que esse  setCreatureMaxHealthPercent não exista, eu só fiz uma tentativa com ele, mas pelo que entendi o erro da primeira script que me responderam, é que não foi indentificada a creatura, -- pois da tipo um erro na distro depois que passa o tempo, creature not font algo assim.

Link para o post
Compartilhar em outros sites
  • 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

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

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 +

Link para o post
Compartilhar em outros sites

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.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Ahaha, por isso n conseguia, mas tá tranquilo assim, valeu mesmo pela ajuda, depois vou tentar fazer essas gambiarras, mas tá ótimo amigo, parabéns pelo seu trabalho, sempre ajudando. Valeu pelos toques tbm.

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo