Folspa 26 Postado Dezembro 2, 2013 Share Postado Dezembro 2, 2013 Preciso de um script, um monstro que só pode ser atacado se o jogador estiver em x posição, caso ele não estiver, aparecer uma mensagem falando que ele não pode atacar de onde está. Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/ Compartilhar em outros sites More sharing options...
0 zipter98 1102 Postado Dezembro 2, 2013 Share Postado Dezembro 2, 2013 (editado) Nunca mexi com onCombat, então não tenho certeza se dessa maneira irá funcionar. data/creaturescripts/scripts, crie um arquivo com extensão .lua, nomeie-o monsterattack, e coloque o seguinte conteúdo: function onCombat(cid, target) local pos = {x = xxx, y = yyy, z = zzz} --Posição que o player terá que estar. local name = "nome" --Nome do monstro. if isPlayer(cid) and getCreatureName(target) == name then if getThingPos(cid) ~= pos then doPlayerSendCancel(cid, "Você não pode atacar esse monstro na posição que se encontra...") return false end end return true end Adicione isso em login.lua: registerCreatureEvent(cid, "AttackPos") Tag: <event type="combat" name="AttackPos" event="script" value="monsterattack.lua" /> Editado Dezembro 2, 2013 por zipter98 Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588383 Compartilhar em outros sites More sharing options...
0 BananaFight 196 Postado Dezembro 2, 2013 Share Postado Dezembro 2, 2013 (editado) zipter98, O único problema que vejo, é que monstros com nomes iguais não poderiam ser atacados, e também desse modo só um player vai poder atacar o monstro, a menos que fiquem em stack... Folspa, Recomendo criar um script startUp para fazer o respow desse monstro, e nele setar um storage, ai dentro do script do zipter98, você bota um check storage no target para que possa atacar monstros com o mesmo nome... Editado Dezembro 2, 2013 por BananaFight Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588386 Compartilhar em outros sites More sharing options...
0 Folspa 26 Postado Dezembro 2, 2013 Autor Share Postado Dezembro 2, 2013 Está bom assim, apenas um player deve atacar um monstro. Só uma dúvida, se o player sair da posição que pode atacar, ele vai continuar a atacar? Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588392 Compartilhar em outros sites More sharing options...
0 zipter98 1102 Postado Dezembro 3, 2013 Share Postado Dezembro 3, 2013 Teoricamente, não. Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588397 Compartilhar em outros sites More sharing options...
0 Folspa 26 Postado Dezembro 3, 2013 Autor Share Postado Dezembro 3, 2013 (editado) Ah, mais uma coisa, o jogador não pode ser empurrado, quer dizer, outros jogadores não devem conseguir empurrar o jogador que estiver na posição. Editado Dezembro 3, 2013 por Folspa Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588406 Compartilhar em outros sites More sharing options...
0 BananaFight 196 Postado Dezembro 3, 2013 Share Postado Dezembro 3, 2013 Teoricamente não, mais na pratica acho que ele vai poder atacar depois de andar, e para ant move, tenta usar aqueles tiles de DP Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588419 Compartilhar em outros sites More sharing options...
0 Folspa 26 Postado Dezembro 3, 2013 Autor Share Postado Dezembro 3, 2013 Protect Zone? Não dá, se eu colocar, ele não vai poder atacar, se eu colocar em volta, ele vai poder ser empurrado, ele pode ser empurrado para dentro, mas não para fora, acho. Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588436 Compartilhar em outros sites More sharing options...
0 Killua 389 Postado Dezembro 3, 2013 Share Postado Dezembro 3, 2013 Ele não ta falando de pz --' mayNotMove funciona pra empurrao tb sera? Se funcionar pode por ai Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588446 Compartilhar em outros sites More sharing options...
0 Skymagnum 234 Postado Dezembro 3, 2013 Share Postado Dezembro 3, 2013 Há uma função "onPushPlayer", só usar ela, ou seta a velocidade do player para 0, ou "mayNotMove" mesmo. Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588449 Compartilhar em outros sites More sharing options...
0 Folspa 26 Postado Dezembro 3, 2013 Autor Share Postado Dezembro 3, 2013 Não está a funcionar. Como são três monstros diferentes, apenas troquei o nome e a pos, porém o primeiro monstro o jogador não ataca, aparece "Sorry, not possible." e nos outros dois ele ataca de qualquer lugar. Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588474 Compartilhar em outros sites More sharing options...
0 Skymagnum 234 Postado Dezembro 3, 2013 Share Postado Dezembro 3, 2013 Mande o script, e também qual tag você colocou no creaturescripts.xml, e no login.lua?. Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588476 Compartilhar em outros sites More sharing options...
0 Folspa 26 Postado Dezembro 3, 2013 Autor Share Postado Dezembro 3, 2013 (editado) function onCombat(cid, target) local pos = { [1] = {x = 35, y = 66, z = 7}, [2] = {x = 36, y = 66, z = 7}, } local name = "Easy" if isPlayer(cid) and getCreatureName(target) == name then if getThingPos(cid) ~= pos then doPlayerSendCancel(cid, "You must be in the mark to attack!") return false end end return true end function onCombat(cid, target) local pos = { [1] = {x = 33, y = 68, z = 7}, [2] = {x = 34, y = 68, z = 7}, } local name = "Medium" if isPlayer(cid) and getCreatureName(target) == name then if getThingPos(cid) ~= pos then doPlayerSendCancel(cid, "You must be in the mark to attack!") return false end end return true end function onCombat(cid, target) local pos = { [1] = {x = 31, y = 70, z = 7}, [2] = {x = 32, y = 70, z = 7}, } local name = "Hard" if isPlayer(cid) and getCreatureName(target) == name then if getThingPos(cid) ~= pos then doPlayerSendCancel(cid, "You must be in the mark to attack!") return false end end return true end <event type="combat" name="AttackPos" event="script" value="trainer_easy.lua"/> <event type="combat" name="AttackPos" event="script" value="trainer_medium.lua"/> <event type="combat" name="AttackPos" event="script" value="trainer_hard.lua"/> registerCreatureEvent(cid, "AttackPos") Editado Dezembro 3, 2013 por Folspa Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588481 Compartilhar em outros sites More sharing options...
0 zipter98 1102 Postado Dezembro 3, 2013 Share Postado Dezembro 3, 2013 (editado) Dessa vez eu testei. Após sair da posição configurada, o target irá continuar, porém o jogador não dará dano ao monstro. data/creaturescripts/scripts, cantattack.lua function onCombat(cid, target) local pos = {x = 1056, y = 1056, z = 7} --Posição que o player terá que estar. local name = "nome" --Nome do monstro. if isPlayer(cid) then if getCreatureName(target) == name then if getThingPos(cid).x ~= pos.x or getThingPos(cid).y ~= pos.y or getThingPos(cid).z ~= pos.z then doPlayerSendCancel(cid, "Você não pode atacar na posição que se encontra!") return false end end end return true end Tag: <event type="combat" name="AttackPos" event="script" value="cantattack.lua"/> Login: registerCreatureEvent(cid, "AttackPos") cantattacktwo.lua, ainda em data/creaturescripts/scripts function onTarget(cid, target) local pos = {x = 1056, y = 1056, z = 7} --Posição que o player terá que estar. local name = "nome" --Nome do monstro. if isPlayer(cid) then if getCreatureName(target) == name then if getThingPos(cid).x ~= pos.x or getThingPos(cid).y ~= pos.y or getThingPos(cid).z ~= pos.z then doPlayerSendCancel(cid, "Você não pode atacar na posição que se encontra!") return false end end end return true end Tag: <event type="target" name="AttackPosTwo" event="script" value="cantattacktwo.lua"/> Login: registerCreatureEvent(cid, "AttackPosTwo") OBS: Teste, primeiramente, com apenas 1 posição, e não com duas numa tabela (como você postou em outro tópico). Editado Dezembro 3, 2013 por zipter98 Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588722 Compartilhar em outros sites More sharing options...
0 Folspa 26 Postado Dezembro 3, 2013 Autor Share Postado Dezembro 3, 2013 Mas qual o motivo de ter 2 scripts? Não tem como apenas duplicar os scripts e mudar as posições/nomes? Quer dizer, não posso registrar no login.lua apenas 1 para 2 scripts diferentes? Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588729 Compartilhar em outros sites More sharing options...
0 zipter98 1102 Postado Dezembro 3, 2013 Share Postado Dezembro 3, 2013 (editado) O motivo, é porque um é onCombat (para enviar o cancel caso o jogador tente usar uma spell em área), e o outro é onTarget (como o próprio nome sugere, enviar um cancel caso o jogador tente targetar o monstro). E sobre sua outra pergunta, que eu saiba, não (a outra pergunta que me refiro, é a terceira). Como os dois scripts são distintos em relação à função main, deve-se criar para cada uma tag diferente, e, consequentemente, um registro diferente no login.lua. E, também, mesmo ambos os scripts só tendo como diferença, por exemplo, o nome do monstro, será necessário registrar uma tag diferente, tanto em creaturescripts.xml quando em login.lua. Ou, você pode criar um único arquivo .lua com 3 funções dentro (login, combat e target). Por exemplo, function onCombat(cid, target) local pos = {x = 1056, y = 1056, z = 7} --Posição que o player terá que estar. local name = "nome" --Nome do monstro. if isPlayer(cid) then if getCreatureName(target) == name then if getThingPos(cid).x ~= pos.x or getThingPos(cid).y ~= pos.y or getThingPos(cid).z ~= pos.z then doPlayerSendCancel(cid, "Você não pode atacar na posição que se encontra!") return false end end end return true end function onTarget(cid, target) local pos = {x = 1056, y = 1056, z = 7} --Posição que o player terá que estar. local name = "nome" --Nome do monstro. if isPlayer(cid) then if getCreatureName(target) == name then if getThingPos(cid).x ~= pos.x or getThingPos(cid).y ~= pos.y or getThingPos(cid).z ~= pos.z then doPlayerSendCancel(cid, "Você não pode atacar na posição que se encontra!") return false end end end return true end function onLogin(cid) registerCreatureEvent(cid, "AttackPos") registerCreatureEvent(cid, "AttackPosTwo") return true end Aí depois, bastaria registrar as três tags no creaturescripts.xml. (já que o registro do login.lua, já foi feito dentro do arquivo, na função onLogin.) <event type="target" name="AttackPos" event="script" value="cantattack.lua"/> <event type="combat" name="AttackPosTwo" event="script" value="cantattack.lua"/> <event type="login" name="AttackPosLogin" event="script" value="cantattack.lua"/> Editado Dezembro 3, 2013 por zipter98 Link para o comentário https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/#findComment-1588737 Compartilhar em outros sites More sharing options...
Pergunta
Folspa 26
Preciso de um script, um monstro que só pode ser atacado se o jogador estiver em x posição, caso ele não estiver, aparecer uma mensagem falando que ele não pode atacar de onde está.
Link para o comentário
https://xtibia.com/forum/topic/224901-condi%C3%A7%C3%A3o-de-ataque/Compartilhar em outros sites
24 respostass a esta questão
Posts Recomendados