Ir para conteúdo
  • Cadastre-se

(Resolvido)Não sei porque esse script não está dando certo


Ir para solução Resolvido por Danves,

Posts Recomendados

Seguinte, eu abri o exani tera e editei para que ele pudesse ser usado em todos os sqm ao redor do tile de saida, mas ele ainda só funciona se tiver embaixo.

Segue o script.

local SPOTS = {384, 418, 8278, 8592}




function onCastSpell(cid, var)


local position = getThingPosition(cid)


position.stackpos = 0


-- posicoes ao redor do buraco
local position2 = position
position2.y = position2.y + 1
local position3 = position
position3.y = position3.y - 1
local position4 = position
position4.x = position4.x + 1
local position5 = position
position5.x = position5.x - 1
local position6 = position
position6.y = position6.y + 1
position6.x = position6.x + 1
local position7 = position
position7.y = position7.y - 1
position7.x = position7.x - 1
local position8 = position
position8.y = position8.y + 1
position8.x = position8.x - 1
local position9 = position
position9.y = position9.y - 1
position9.x = position9.x + 1
-- 
local ground = getThingFromPos(position)
local ground2 = getThingFromPos(position2)
local ground3 = getThingFromPos(position3)
local ground4 = getThingFromPos(position4)
local ground5 = getThingFromPos(position5)
local ground6 = getThingFromPos(position6)
local ground7 = getThingFromPos(position7)
local ground8 = getThingFromPos(position8)
local ground9 = getThingFromPos(position9)
if(isInArray(SPOTS, ground.itemid) or isInArray(SPOTS, ground2.itemid) or isInArray(SPOTS, ground3.itemid) or isInArray(SPOTS, ground4.itemid) or isInArray(SPOTS, ground5.itemid) or isInArray(SPOTS, ground6.itemid) or isInArray(SPOTS, ground7.itemid) or isInArray(SPOTS, ground8.itemid) or isInArray(SPOTS, ground9.itemid)) then


local newPosition = position


newPosition.y = newPosition.y + 1


newPosition.z = newPosition.z - 1




doTeleportThing(cid, newPosition, false)


doSendMagicEffect(position, CONST_ME_TELEPORT)


return true


else


doPlayerSendCancel(cid, "Você precisa estar perto da saída (embaixo do buraco) para usar este feitiço.")


doSendMagicEffect(position, CONST_ME_POFF)


return false 
end


end


Se eu edito tipo position2.y = 400
Ele só vai conseguir usar a spell se no Y 399 do mapa tiver a tile de saída..
Então qualquer position tá mexendo em todos, não sei porque.

Editado por Danves (veja o histórico de edições)



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites

Se eu edito tipo position2.y = 400 Ele só vai conseguir usar a spell se no Y 399 do mapa tiver a tile de saída..


vc não coloca position2.y = 400.. vc coloca tudo em função da posição atual igualzinho tá 

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

Ainda não entendi. Eu coloquei um doPlayerSendTextMessage mostrando a nova pos de cada um e todos dão a posição atual do meu personagem..
Então fiz o seguinte:

doPlayerSendTextMessage(cid,27,""..alok1.." Y "..alok2.."")
position.stackpos = 0
 
-- posicoes ao redor do buraco
local pos2 = position
pos2.y = pos2.y + 1
local pos3 = position
pos3.y = pos3.y - 2
local pos4 = position
pos4.x = pos4.x + 3
local pos5 = position
pos5.x = pos5.x - 4
local pos6 = position
pos6.y = pos6.y + 5
pos6.x = pos6.x + 5
local pos7 = position
pos7.y = pos7.y - 6
pos7.x = pos7.x - 6
local alok3 = pos7.x
local alok4 = pos7.y
doPlayerSendTextMessage(cid,27,""..alok3.." Y "..alok4.."")


E as coordenadas deram o seguinte:
03:37 703 Y 402(minha verdadeira pos)
03:37 701 Y 400(pos do 7)
ou seja chegou a variar em 2 na pos7 pra minha posição verdadeira
Ainda não sei porque um influencia em outro

@edit: o const_me_poff tá indo na pos X702 Y 399


@Edit2: o y = 400 que eu disse era so pra mostrar como um pos tava fazendo todas mudarem

@Edit3:  Adicionei um 

local alok5 = position.x
local alok6 = position.y
doPlayerSendTextMessage(cid,27,""..alok5.." Y "..alok6.."")
no final
e percebi que o position realmente foi modificado. Porque diabos mexer em outras variaveis tá mexendo na position..
Editado por Danves (veja o histórico de edições)



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites

Se eu edito tipo position2.y = 400 Ele só vai conseguir usar a spell se no Y 399 do mapa tiver a tile de saída.. Então qualquer position tá mexendo em todos, não sei porque.

Pelo que vi, você não precisa alterar nada no script, além dos IDS da tabela com a string SPOTS:
local SPOTS = {384, 418, 8278, 8592}

Que no caso, quando você estiver no sqm exatamente abaixo do buraco (sqms de ID: 384 ou 418 ou 8278 ou 8592), o player poderá usar a spell e subir como se tivesse usado uma rope.

Se te ajudei com o que postei, clique em liked.png
Bizzle

Link para o post
Compartilhar em outros sites

Eu quero mudar para não precisar estar exatamente embaixo do buraco, e sim tanto ao redor quanto embaixo. Dei um edit no script e agora as coordenadas tão certas, mas ainda só funciona estando embaixo.

local SPOTS = {384, 418, 8278, 8592}




function onCastSpell(cid, var)


local position = getThingPosition(cid)



position.stackpos = 0


-- posicoes ao redor do buraco
local pos2 = getThingPosition(cid)


pos2.y = pos2.y + 1
local pos3 = getThingPosition(cid)


pos3.y = pos3.y - 1
local pos4 = getThingPosition(cid)


pos4.x = pos4.x + 1
local pos5 = getThingPosition(cid)


pos5.x = pos5.x - 1
local pos6 = getThingPosition(cid)


pos6.y = pos6.y + 1
pos6.x = pos6.x + 1
local pos7 = getThingPosition(cid)


pos7.y = pos7.y - 1
pos7.x = pos7.x - 1
doPlayerSendTextMessage(cid,27,""..alok3.." Y "..alok4.."")
local pos8 = getThingPosition(cid)


pos8.y = pos8.y + 1
pos8.x = pos8.x - 1
local pos9 = getThingPosition(cid)


pos9.y = pos9.y - 1
pos9.x = pos9.x + 1
doPlayerSendTextMessage(cid,27,""..alok5.." Y "..alok6.."")
-- 
local ground = getThingFromPos(position)
local ground2 = getThingFromPos(pos2)
local ground3 = getThingFromPos(pos3)
local ground4 = getThingFromPos(pos4)
local ground5 = getThingFromPos(pos5)
local ground6 = getThingFromPos(pos6)
local ground7 = getThingFromPos(pos7)
local ground8 = getThingFromPos(pos8)
local ground9 = getThingFromPos(pos9)
if(isInArray(SPOTS, ground.itemid) or isInArray(SPOTS, ground2.itemid) or isInArray(SPOTS, ground3.itemid) or isInArray(SPOTS, ground4.itemid) or isInArray(SPOTS, ground5.itemid) or isInArray(SPOTS, ground6.itemid) or isInArray(SPOTS, ground7.itemid) or isInArray(SPOTS, ground8.itemid) or isInArray(SPOTS, ground9.itemid)) then


local newPosition = position


newPosition.y = newPosition.y + 1


newPosition.z = newPosition.z - 1




doTeleportThing(cid, newPosition, false)


doSendMagicEffect(position, CONST_ME_TELEPORT)


return true


else


doPlayerSendCancel(cid, "Você precisa estar perto da saída (embaixo do buraco) para usar este feitiço.")


doSendMagicEffect(position, CONST_ME_POFF)


return false 
end


end


@edit:
percebi ao verificaro itemid das ground que só a ground diz o que ta embaixo de mim, as demais o itemid é "0", não entendo porque.


Solucionei, bastava adicionar stackpos em cada posição (não sei o que é essa função mas percebi vendo que tinha isso na position)
Segue o script funcionando:

local SPOTS = {384, 418, 8278, 8592}




function onCastSpell(cid, var)


local position = getThingPosition(cid)



position.stackpos = 0


-- posicoes ao redor do buraco
local pos2 = getThingPosition(cid)


pos2.y = pos2.y + 1
local pos3 = getThingPosition(cid)


pos3.y = pos3.y - 1
local pos4 = getThingPosition(cid)


pos4.x = pos4.x + 1
local pos5 = getThingPosition(cid)


pos5.x = pos5.x - 1
local pos6 = getThingPosition(cid)


pos6.y = pos6.y + 1
pos6.x = pos6.x + 1
local pos7 = getThingPosition(cid)


pos7.y = pos7.y - 1
pos7.x = pos7.x - 1

local pos8 = getThingPosition(cid)


pos8.y = pos8.y + 1
pos8.x = pos8.x - 1
local pos9 = getThingPosition(cid)


pos9.y = pos9.y - 1
pos9.x = pos9.x + 1

-- 
pos2.stackpos = 0
pos3.stackpos = 0
pos4.stackpos = 0
pos5.stackpos = 0
pos6.stackpos = 0
pos7.stackpos = 0
pos8.stackpos = 0
pos9.stackpos = 0


local ground = getThingFromPos(position)
local ground2 = getThingFromPos(pos2)
local ground3 = getThingFromPos(pos3)
local ground4 = getThingFromPos(pos4)
local ground5 = getThingFromPos(pos5)
local ground6 = getThingFromPos(pos6)
local ground7 = getThingFromPos(pos7)
local ground8 = getThingFromPos(pos8)
local ground9 = getThingFromPos(pos9)
if(isInArray(SPOTS, ground.itemid) or isInArray(SPOTS, ground2.itemid) or isInArray(SPOTS, ground3.itemid) or isInArray(SPOTS, ground4.itemid) or isInArray(SPOTS, ground5.itemid) or isInArray(SPOTS, ground6.itemid) or isInArray(SPOTS, ground7.itemid) or isInArray(SPOTS, ground8.itemid) or isInArray(SPOTS, ground9.itemid)) then


local newPosition = position


newPosition.y = newPosition.y + 1


newPosition.z = newPosition.z - 1




doTeleportThing(cid, newPosition, false)


doSendMagicEffect(position, CONST_ME_TELEPORT)


return true


else


doPlayerSendCancel(cid, "Você precisa estar perto da saída (embaixo do buraco) para usar este feitiço.")


doSendMagicEffect(position, CONST_ME_POFF)


return false 
end


end

Editado por Danves (veja o histórico de edições)



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites
Editado por Danves, Hoje, 03:20.

Ah sim..agora você explicou melhor, editou o tópico. Eu tinha lido o de recém postagem.

Creio que isso poderá ser um problema, de certa forma..pense em um buraco de uma caverna. Você tem 8 sqms (sem contar o do meio, que são os da tabela do script) para poder subir, correto?

Imagine que por exemplo, acima do buraco há espaço para 3 sqms e os outros restantes tem paredes ou rochas nas posições. O player iria parar bugado entre um desses itens..a menos que alguém faça uma função de reconhecimento do que há nos sqms superiores pra impedir que suba em locais com objetos acima (apenas dei uma idéia geral pra quem estiver lendo). Boa sorte.

Editado por Bizzle (veja o histórico de edições)

Se te ajudei com o que postei, clique em liked.png
Bizzle

Link para o post
Compartilhar em outros sites

Basta um editzinho na função Newposition para se basear na posição do buraco ao invés da posição do player. 



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites
Basta um editzinho na função Newposition para se basear na posição do buraco ao invés da posição do player.

Também, mas creio que dará mais trabalho e resultará em um script extenso, enfim..

Editado por Bizzle (veja o histórico de edições)

Se te ajudei com o que postei, clique em liked.png
Bizzle

Link para o post
Compartilhar em outros sites
  • Solução

Que nada, eu levei só 10minutos a mais. 
Bom, não tava afim de postar, mas se alguém quiser usar esse sistema:

local SPOTS = {384, 418, 8278, 8592} -- COLOQUE OS IDS DOS PISOS QUE PODE-SE USAR ROPE








function onCastSpell(cid, var)
local position = getThingPosition(cid)
position.stackpos = 0




local pos2 = getThingPosition(cid)
pos2.y = pos2.y + 1
local pos3 = getThingPosition(cid)
pos3.y = pos3.y - 1
local pos4 = getThingPosition(cid)
pos4.x = pos4.x + 1
local pos5 = getThingPosition(cid)
pos5.x = pos5.x - 1
local pos6 = getThingPosition(cid)
pos6.y = pos6.y + 1
pos6.x = pos6.x + 1
local pos7 = getThingPosition(cid)
pos7.y = pos7.y - 1
pos7.x = pos7.x - 1
local pos8 = getThingPosition(cid)
pos8.y = pos8.y + 1
pos8.x = pos8.x - 1
local pos9 = getThingPosition(cid)
pos9.y = pos9.y - 1
pos9.x = pos9.x + 1


-- 
pos2.stackpos = 0
pos3.stackpos = 0
pos4.stackpos = 0
pos5.stackpos = 0
pos6.stackpos = 0
pos7.stackpos = 0
pos8.stackpos = 0
pos9.stackpos = 0


local ground = getThingFromPos(position)
local ground2 = getThingFromPos(pos2)
local ground3 = getThingFromPos(pos3)
local ground4 = getThingFromPos(pos4)
local ground5 = getThingFromPos(pos5)
local ground6 = getThingFromPos(pos6)
local ground7 = getThingFromPos(pos7)
local ground8 = getThingFromPos(pos8)
local ground9 = getThingFromPos(pos9)


if(isInArray(SPOTS, ground.itemid)) then 
local newPosition = position
newPosition.y = newPosition.y + 1
newPosition.z = newPosition.z - 1
doTeleportThing(cid, newPosition, false)
doSendMagicEffect(position, CONST_ME_TELEPORT)
doCreatureSay(cid, "Exani tera", TALKTYPE_ORANGE_1) 
return true


elseif(isInArray(SPOTS, ground2.itemid)) then 
local newPosition = pos2
newPosition.y = newPosition.y + 1
newPosition.z = newPosition.z - 1
doTeleportThing(cid, newPosition, false)
doSendMagicEffect(pos2, CONST_ME_TELEPORT)
doCreatureSay(cid, "Exani tera", TALKTYPE_ORANGE_1) 
return true


elseif(isInArray(SPOTS, ground3.itemid)) then 
local newPosition = pos3
newPosition.y = newPosition.y + 1
newPosition.z = newPosition.z - 1
doTeleportThing(cid, newPosition, false)
doSendMagicEffect(pos3, CONST_ME_TELEPORT)
doCreatureSay(cid, "Exani tera", TALKTYPE_ORANGE_1) 
return true


elseif(isInArray(SPOTS, ground4.itemid)) then 
local newPosition = pos4
newPosition.y = newPosition.y + 1
newPosition.z = newPosition.z - 1
doTeleportThing(cid, newPosition, false)
doSendMagicEffect(pos4, CONST_ME_TELEPORT)
doCreatureSay(cid, "Exani tera", TALKTYPE_ORANGE_1) 
return true


elseif(isInArray(SPOTS, ground5.itemid)) then 
local newPosition = pos5
newPosition.y = newPosition.y + 1
newPosition.z = newPosition.z - 1
doTeleportThing(cid, newPosition, false)
doSendMagicEffect(pos5, CONST_ME_TELEPORT)
doCreatureSay(cid, "Exani tera", TALKTYPE_ORANGE_1) 
return true


elseif(isInArray(SPOTS, ground6.itemid)) then 
local newPosition = pos6
newPosition.y = newPosition.y + 1
newPosition.z = newPosition.z - 1
doTeleportThing(cid, newPosition, false)
doSendMagicEffect(pos6, CONST_ME_TELEPORT)
doCreatureSay(cid, "Exani tera", TALKTYPE_ORANGE_1) 
return true


elseif(isInArray(SPOTS, ground7.itemid)) then 
local newPosition = pos7
newPosition.y = newPosition.y + 1
newPosition.z = newPosition.z - 1
doTeleportThing(cid, newPosition, false)
doSendMagicEffect(pos7, CONST_ME_TELEPORT)
doCreatureSay(cid, "Exani tera", TALKTYPE_ORANGE_1) 
return true


elseif(isInArray(SPOTS, ground8.itemid)) then 
local newPosition = pos8
newPosition.y = newPosition.y + 1
newPosition.z = newPosition.z - 1
doTeleportThing(cid, newPosition, false)
doSendMagicEffect(pos8, CONST_ME_TELEPORT)
doCreatureSay(cid, "Exani tera", TALKTYPE_ORANGE_1) 
return true


elseif(isInArray(SPOTS, ground9.itemid)) then 
local newPosition = pos9
newPosition.y = newPosition.y + 1
newPosition.z = newPosition.z - 1
doTeleportThing(cid, newPosition, false)
doSendMagicEffect(pos9, CONST_ME_TELEPORT)
doCreatureSay(cid, "Exani tera", TALKTYPE_ORANGE_1) 
return true




else
doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)


doSendMagicEffect(position, CONST_ME_POFF)
return false 
end
end



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

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