Ir para conteúdo
  • 0

[AJUDA PVP] Level alto atacando lvl baixo


Coiyote

Pergunta

Boa noite, como faço para colocar limite de lvl no pvp? um lvl 700 esta atacando um lvl 300, nao teria como colocar uma diferença entre um e outro para que nao haja desigualdade no pvp ??

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
  • Diretor

Esse Castle é separado por time, certo? Então pelo pouco que vi cada time tem sua storage. Tenta ai:

local lvl_different = 300 -- se a diferença de level for 300, não da pra atacar.  

function onCombat(cid, target)
    if not getPlayerStorageValue(cid, 140120) == 1 or not getPlayerStorageValue(cid, 140121) == 1 and isPlayer(cid) and isPlayer(target) then  
        return math.abs(getPlayerLevel(cid) - getPlayerLevel(target)) <= lvl_different
    end
    return true
end

Dessa forma o script não irá funcionar pra galerinha do Castle.

Caso não dê e eu esteja enganado. Tenta dessa maneira, mas ai não teria a diferença de level pra ninguém enquanto o castle estiver ativo.

local lvl_different = 300 -- se a diferença de level for 300, não da pra atacar.  

function onCombat(cid, target)
    if not getGlobalStorageValue(180400) == 1 and isPlayer(cid) and isPlayer(target) then  
        return math.abs(getPlayerLevel(cid) - getPlayerLevel(target)) <= lvl_different
    end
    return true
end

São pequenas gambi que pode ajudar kkkk

@EDIT

Bolei uma coisa melhor aqui. Na parte do seu mapa do castle deixa como PVP Zone igual eu tinha mencionado:

unknown.png

O script fica dessa maneira:

local lvl_different = 300 -- se a diferença de level for 300, não da pra atacar.  

function onCombat(cid, target)
    if not getTileInfo(getThingPos(cid)).hardcore and isPlayer(cid) and isPlayer(target) then  
        return math.abs(getPlayerLevel(cid) - getPlayerLevel(target)) <= lvl_different
    end
    return true
end

É isso ai haha, abração!

Link para o comentário
Compartilhar em outros sites

  • 0
  • Diretor

Creaturescript

local lvl_different = 300 -- se a diferença de level for 300, não da pra atacar.  

function onCombat(cid, target)
    if isPlayer(cid) and isPlayer(target) then  
        return math.abs(getPlayerLevel(cid) - getPlayerLevel(target)) <= lvl_different
    end
    return true
end

XML:

<event type="combat" name="LvL_Different" event="script" value="level_different.lua"/>

login.lua:

registerCreatureEvent(cid, "LvL_Different")

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Diretor
34 minutos atrás, Coiyote disse:

Muito obrigado Yan, mas uma dúvida, ele não vai dar problema na hora do castle ?

Puuts, bem provável que a diferença de level funcione lá também... Quando entra no castle o jogador recebe alguma storage? Porq aí poderíamos fazer com que a diferença de lvl não funcionasse com essa storage, caso exista... Se tu utiliza também aquelas opções de PvP do rme nesse seu castle, acho que daria pra fazer ignorar essa diferença de level em áreas assim.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde @Yan Liima, na pasta Lib eu achei isso e nele contem "storage", porem nao sei se é sobre isso que voce estava falando

 

Citar

_Lib_Battle_Info = {
Reward = {2160,100},
Reward2 = {12780,300},
TeamOne = {name = "Demonics", storage = 140120, pos = {x=696,y=647,z=15}},
TeamTwo = {name = "Saiyajins",storage = 140121,pos = {x=759,y=688,z=15}},
storage_count = 180400,
tpPos = {x=662, y=391, z=7},
limit_Time = 10 -- em minutos
}

function resetBattle()
return setGlobalStorageValue(_Lib_Battle_Info.TeamOne.storage, 0) and setGlobalStorageValue(_Lib_Battle_Info.TeamTwo.storage, 0)
end

function OpenWallBattle()
local B = {
-- Demonics
{1524,{x=695, y=664, z=15, stackpos = 1}},
{1524,{x=696, y=664, z=15, stackpos = 1}},
{1524,{x=697, y=664, z=15, stackpos = 1}},
{1524,{x=698, y=664, z=15, stackpos = 1}},
{1526,{x=708, y=660, z=15, stackpos = 1}},
{1526,{x=708, y=652, z=15, stackpos = 1}},
{1526,{x=708, y=651, z=15, stackpos = 1}},
{1526,{x=708, y=650, z=15, stackpos = 1}},
{1526,{x=708, y=649, z=15, stackpos = 1}},
-- Saiyajins
{1526,{x=744, y=691, z=15, stackpos = 1}},
{1526,{x=744, y=690, z=15, stackpos = 1}},
{1526,{x=744, y=689, z=15, stackpos = 1}},
{1526,{x=744, y=688, z=15, stackpos = 1}},
{1526,{x=744, y=679, z=15, stackpos = 1}},
{1524,{x=755, y=675, z=15, stackpos = 1}},
{1524,{x=756, y=675, z=15, stackpos = 1}},
{1524,{x=757, y=675, z=15, stackpos = 1}},
{1524,{x=758, y=675, z=15, stackpos = 1}}
}
for i = 1, #B do
if getTileItemById(B[2], B[1]).uid == 0 then
doCreateItem(B[1], 1, B[2])
else
doRemoveItem(getThingfromPos(B[2]).uid,1)
end
end
end

function doBroadCastBattle(type,msg)
local players = {}
for _, cid in pairs(getPlayersOnline()) do
if getPlayerStorageValue(cid, _Lib_Battle_Info.TeamOne.storage) == 1 or getPlayerStorageValue(cid, _Lib_Battle_Info.TeamTwo.storage) == 1 then
table.insert(players, cid)
end
end
for i = 1, #players do
doPlayerSendTextMessage(players,type,msg)
end
end

function removeBattleTp()
local t = getTileItemById(_Lib_Battle_Info.tpPos, 1387).uid
return t > 0 and doRemoveItem(t) and doSendMagicEffect(_Lib_Battle_Info.tpPos, CONST_ME_POFF)
end

function getWinnersBattle(storage)
local players,str = {},""
for _, cid in pairs(getPlayersOnline()) do
if getPlayerStorageValue(cid, storage) == 1 then
table.insert(players, cid)
end
end
str = str .. ""..#players.." Jogador"..(#players > 1 and "es" or "").." do time "..(getGlobalStorageValue(_Lib_Battle_Info.TeamOne.storage) == 0 and _Lib_Battle_Info.TeamTwo.name or _Lib_Battle_Info.TeamOne.name).." ganharam o evento Battlefield e receberam ".._Lib_Battle_Info.Reward[2].." "..getItemNameById(_Lib_Battle_Info.Reward[1]).." + ".._Lib_Battle_Info.Reward2[2].." "..getItemNameById(_Lib_Battle_Info.Reward2[1]).."!"
for i = 1, #players do
doPlayerAddItem(players, _Lib_Battle_Info.Reward[1], _Lib_Battle_Info.Reward[2])
doPlayerAddItem(players, _Lib_Battle_Info.Reward2[1], _Lib_Battle_Info.Reward2[2])
doRemoveCondition(players, CONDITION_OUTFIT)
doTeleportThing(players, getTownTemplePosition(getPlayerTown(players)))
setPlayerStorageValue(players, storage, -1)
end
resetBattle()
OpenWallBattle()
return doBroadcastMessage(str)
end

function CheckEvent(delay)
if delay > 0 and getGlobalStorageValue(_Lib_Battle_Info.storage_count) > 0 then
doBroadcastMessage("[BattleField] Estamos à espera de "..getGlobalStorageValue(_Lib_Battle_Info.storage_count).." jogadores para o Battlefield iniciar.")
elseif delay == 0 and getGlobalStorageValue(_Lib_Battle_Info.storage_count) > 0 then
local players = {}
for _, cid in pairs(getPlayersOnline()) do
if getPlayerStorageValue(cid, _Lib_Battle_Info.TeamOne.storage) == 1 or getPlayerStorageValue(cid, _Lib_Battle_Info.TeamTwo.storage) == 1 then
table.insert(players, cid)
end
end
for i = 1, #players do
doRemoveCondition(players, CONDITION_OUTFIT)
doTeleportThing(players, getTownTemplePosition(getPlayerTown(players)))
setPlayerStorageValue(players, getPlayerStorageValue(players, _Lib_Battle_Info.TeamOne.storage) == 1 and _Lib_Battle_Info.TeamOne.storage or _Lib_Battle_Info.TeamTwo.storage, -1)
end
doBroadcastMessage("O evento Battlefield não iniciou por não ter jogadores suficientes.")
setGlobalStorageValue(_Lib_Battle_Info.storage_count, 0)
resetBattle()
removeBattleTp()
end
addEvent(CheckEvent, 60000, delay-1)
end

 

Editado por Coiyote
Link para o comentário
Compartilhar em outros sites

  • 0
10 horas atrás, Yan Liima disse:

Esse Castle é separado por time, certo? Então pelo pouco que vi cada time tem sua storage. Tenta ai:


local lvl_different = 300 -- se a diferença de level for 300, não da pra atacar.  

function onCombat(cid, target)
    if not getPlayerStorageValue(cid, 140120) == 1 or not getPlayerStorageValue(cid, 140121) == 1 and isPlayer(cid) and isPlayer(target) then  
        return math.abs(getPlayerLevel(cid) - getPlayerLevel(target)) <= lvl_different
    end
    return true
end

Dessa forma o script não irá funcionar pra galerinha do Castle.

Caso não dê e eu esteja enganado. Tenta dessa maneira, mas ai não teria a diferença de level pra ninguém enquanto o castle estiver ativo.


local lvl_different = 300 -- se a diferença de level for 300, não da pra atacar.  

function onCombat(cid, target)
    if not getGlobalStorageValue(180400) == 1 and isPlayer(cid) and isPlayer(target) then  
        return math.abs(getPlayerLevel(cid) - getPlayerLevel(target)) <= lvl_different
    end
    return true
end

São pequenas gambi que pode ajudar kkkk

@EDIT

Bolei uma coisa melhor aqui. Na parte do seu mapa do castle deixa como PVP Zone igual eu tinha mencionado:

unknown.png

O script fica dessa maneira:


local lvl_different = 300 -- se a diferença de level for 300, não da pra atacar.  

function onCombat(cid, target)
    if not getTileInfo(getThingPos(cid)).hardcore and isPlayer(cid) and isPlayer(target) then  
        return math.abs(getPlayerLevel(cid) - getPlayerLevel(target)) <= lvl_different
    end
    return true
end

É isso ai haha, abração!

Muito obrigadooo!!! 

 

Só uma duvida, fica muito complicado de fazer "Stages" ??

Tipo, do lvl 100 ao 300 - 300 ao 600 e assim vai ?

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...