CS
pedido

Comando pvp on

Por cs007, 26 de jan. de 2014 em Scripts

otserv
16
5.3k
cs007C
26 de janeiro de 2014 às 16:16

Bom pessoal, no meu otserv tenho visto muito problema com players fazendo outros pegar red por está de bot, teria como criar um comando !pvp on e !pvp off

 

Com esse comando ativado o player pode ser morto mas não pode atacar players mesmo com spells de área.

 

 

Abraço e obrigado.

LordfireL
26 de janeiro de 2014 às 17:02

Talvez que seu servidor já tenha. Tente:

 

 

/pvp optional
/pvp open
RastaLegionR
26 de janeiro de 2014 às 17:32

ou então tente /mode 1 /mode 2 :D

Editado Janeiro 26 por RastaLegion

cs007C
26 de janeiro de 2014 às 18:19

 

Talvez que seu servidor já tenha. Tente:

/pvp optional
/pvp open

No caso não é para mudar o tipo de pvp do ot lek, é para o player usar quando for upar, se eu usar isso mudo do ot todo. =/

zipter98Z
26 de janeiro de 2014 às 19:29

data/talkactions/scripts

local msg = "Agora seu sistema PvP está %s."
function onSay(cid, words, param)
local _table = {
    ["on"] = {"ativado", 1},
    ["off"] = {"desativado", 0},
}
    if _table[param:lower()] then
        local mode = _table[param:lower()]
        setPlayerStorageValue(cid, 91821, mode[2])
        doPlayerSendTextMessage(cid, 27, msg:format(mode[1]))
    end
    return true
end

data/creaturescripts/scripts

 

--[[
    Tags:
    <event type="statschange" name="PvPStats" event="script" value="nome do arquivo.lua"/>
    <event type="target" name="PvPTarget" event="script" value="nome do arquivo.lua"/> 
    <event type="login" name="PvPLogin" event="script" value="nome do arquivo.lua"/> 
]]--
 
function onTarget(cid, target)
    if isPlayer(target) and isPlayer(cid) then
        if getPlayerStorageValue(cid, 91821) < 1 then
            doPlayerSendCancel(cid, "Você está com o modo PvP desligado. Se quiser atacar outros jogadores, ative-o.")
            return false
        end
    end
    return true
end
 
function onStatsChange(cid, attacker, type, combat, value)
    if isPlayer(cid) and isPlayer(attacker) and type == STATSCHANGE_HEALTHLOSS then
        if getPlayerStorageValue(attacker, 91821) < 1 then
            doPlayerSendCancel(attacker, "Você está com o modo PvP desligado. Se quiser atacar outros jogadores, ative-o.")
            return false
        end
    end
    return true
end
 
function onLogin(cid)
    registerCreatureEvent(cid, "PvPTarget")
    registerCreatureEvent(cid, "PvPStats")
    return true
end

Editado Fevereiro 4 por zipter98

totonho18T
26 de janeiro de 2014 às 20:00

Zipter esse script é util pro meu server tb,porém eu n entendi nada,pode me explicar melhor oq é pra fazer???

vc passou o script,mas no xml? e essa creaturescript com tags do xml,login e o script em si tudo misturado???

zipter98Z
26 de janeiro de 2014 às 20:31

A única coisa que não citei foi a tag da talkaction, que achei desnecessário criar, pois pensei que o autor seria capaz de criá-la.

E há 3 funções main juntas num mesmo código (eu optei por fazer assim para não precisar criar 3 arquivos, ao invés de apenas um). Portanto, são 3 tags. Como você pôde ver, eu informei as 3 no início do código.

E, também, como você não entendeu? Ué, cria um arquivo na pasta citada com extensão .lua, e então coloque o código lá. As tags, no arquivo .xml da respectiva pasta (talkactions - talkactions.xml/creaturescripts - creaturescripts.xml).

Editado Janeiro 26 por zipter98

cs007C
28 de janeiro de 2014 às 22:39

 

data/talkactions/scripts

local msg = "Agora seu sistema PvP está %s."
function onSay(cid, words, param)
local _table = {
    ["on"] = {"ativado", 1},
    ["off"] = {"desativado", 0},
}
    if _table[param:lower()] then
        local mode = _table[param:lower()]
        setPlayerStorageValue(cid, 91821, mode[2])
        doPlayerSendTextMessage(cid, 27, msg:format(mode[1]))
    end
    return true
end

data/creaturescripts/scripts

--[[
    Tags:
    <event type="statschange" name="PvPStats" event="script" value="nome do arquivo.lua"/>
    <event type="target" name="PvPTarget" event="script" value="nome do arquivo.lua"/> 
    <event type="login" name="PvPLogin" event="script" value="nome do arquivo.lua"/> 
]]--
 
function onTarget(cid, target)
    if isPlayer(target) and isPlayer(cid) then
        if getPlayerStorageValue(target, 91821) < 1 or getPlayerStorageValue(cid, 91821) < 1 then
            doPlayerSendCancel(cid, "Você não pode atacar jogadores que estão com o PvP desativado.")
            return false
        end
    end
    return true
end
 
function onStatsChange(cid, attacker, type, combat, value)
    if isPlayer(cid) and isPlayer(attacker) then
        if getPlayerStorageValue(cid, 91821) < 1 or getPlayerStorageValue(attacker, 91821) < 1 then
            doPlayerSendCancel(attacker, "Você não pode atacar jogadores que estão com o PvP desativado.")
            return false
        end
    end
    return true
end
 
function onLogin(cid)
    registerCreatureEvent(cid, "PvPTarget")
    registerCreatureEvent(cid, "PvPStats")
    return true
end

 

Valeu cara, vou testar ainda hoje e já edito :D

Ainda não testei mas me tira uma dúvida por favor, no caso eu quero que o cara que esteja upando não attack outros players com spells, o que me parace que esse comando não permite o players ser atacado. Obrigado

zipter98Z
28 de janeiro de 2014 às 23:24

O jogador que desativa a opção de PvP não pode nem ser atacado, nem atacar outros jogadores.

Editado Janeiro 28 por zipter98

cs007C
29 de janeiro de 2014 às 00:02

O jogador que desativa a opção de PvP não pode nem ser atacado, nem atacar outros jogadores.

Não tem como por para ele só não atacar os outros? Se não ele vai deixar de bot e ninguém vai matar. Se for possível é claro :D Desde já agradeço. abraço

zipter98Z
29 de janeiro de 2014 às 15:07

OK. Editei meu comentário logo acima com o código alterado.

cs007C
29 de janeiro de 2014 às 15:19

Perfeito cara, parabéns! Irei testar :D

cs007C
02 de fevereiro de 2014 às 23:32

Funcionou direitinho amigo, muito obrigado. Podem fechar :D


OK. Editei meu comentário logo acima com o código alterado.

 

 

@EDIT

 

Só ocorreu um problema lek, não está dando para curar. =/ tem como ver isso? Obrigado

zipter98Z
04 de fevereiro de 2014 às 20:04

Desculpe, tive problemas em casa e não pude respondê-lo anteriormente. Alterei meu código acima com uma possível correção.

cs007C
04 de fevereiro de 2014 às 22:27

Valeu cara :D