FO
pedido

Condição de Ataque

Por Folspa, 02 de dez. de 2013 em Scripts

trainer
resolvido
script
25
3.3k
FolspaF
02 de dezembro de 2013 às 21:02

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á.

zipter98Z
02 de dezembro de 2013 às 21:42

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 por zipter98

BananaFightB
02 de dezembro de 2013 às 21:51

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 por BananaFight

FolspaF
02 de dezembro de 2013 às 21:58

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?

zipter98Z
02 de dezembro de 2013 às 22:01

Teoricamente, não.

FolspaF
02 de dezembro de 2013 às 22:33

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 2 por Folspa

BananaFightB
02 de dezembro de 2013 às 22:47

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

FolspaF
02 de dezembro de 2013 às 23:29

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.

KilluaK
03 de dezembro de 2013 às 00:07

Ele não ta falando de pz --'

 

mayNotMove funciona pra empurrao tb sera? Se funcionar pode por ai

SkymagnumS
03 de dezembro de 2013 às 00:11

Há uma função "onPushPlayer", só usar ela, ou seta a velocidade do player para 0, ou "mayNotMove" mesmo.

FolspaF
03 de dezembro de 2013 às 01:02

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.

SkymagnumS
03 de dezembro de 2013 às 01:04

Mande o script, e também qual tag você colocou no creaturescripts.xml, e no login.lua?.

FolspaF
03 de dezembro de 2013 às 01:17


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 por Folspa

zipter98Z
03 de dezembro de 2013 às 19:42

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 por zipter98

FolspaF
03 de dezembro de 2013 às 20:03

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?