Ir para conteúdo
  • 0

[System] Anti-Trap Low Level


lucas502

Pergunta

aew galera, preciso de um sistema anti-trap low level sakam?

 

pra não acontecer de na war, os caras fazerem char low level (level menor que o pvp level) soh pra trapar os outros, uma coisa do tipo Swap Position ou sei la..

 

Qualquer coisa que evite esse "trap low level"... Vlw ;)

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Vai em data/creaturescripts/scripts, duplica um arquivo e nomeia para "antitrap" sem as aspas e nele cole:


function onThink(cid, interval)

if getTilePzInfo(getCreaturePosition(cid)) then
   return true
end

local minuto = 1 -- quantos minuto para atravesar o player.
local protectionLevel = 100 -- protection level do server.
local position = getPlayerPosition(cid)

if getPlayerLookDir(cid) == 0 then
   position = {x=position.x, y=position.y-1, z=position.z}
elseif getPlayerLookDir(cid) == 1 then
   position = {x=position.x+1, y=position.y, z=position.z}
elseif getPlayerLookDir(cid) == 2 then
   position = {x=position.x, y=position.y+1, z=position.z}
elseif getPlayerLookDir(cid) == 3 then
   position = {x=position.x-1, y=position.y, z=position.z}
end

for i = 0, 255 do
local o = 0
   position.stackpos = i
   local tile = getTileThingByPos(position)
   if isPlayer(tile.uid) and getPlayerLevel(tile.uid) < protectionLevel then
local o = 1
       setPlayerStorageValue(cid, 56421, getPlayerStorageValue(cid,56421)+1)
       if getPlayerStorageValue(cid, 56421) >= 120*minuto then
           setPlayerStorageValue(cid, 56421, 0)
           doTeleportThing(cid, getPlayerPosition(tile.uid))
       end
break
   elseif i == 255 and o == 0 then
setPlayerStorageValue(cid, 56421, 0)
end
end

return true
end

 

Depois em data/creaturescripts/creaturescripts.xml cole a tag:

<event type="think" name="AntiTrap" event="script" value="antitrap.lua"/>

 

E por último no arquivo data/creaturescripts/scripts/login.lua, antes do último "return true" cole:

registerCreatureEvent(cid, "AntiTrap")

 

---------------------------------------------

Vai funcionar assim, se tu ficar virado na direção do player por 1 minuto e o level dele for mais baixo que o level de proteção do server, seu char vai ser teleportado para a posição do char low level. Isso vai funcionar apenas fora de protection zones.

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

  • 0

nas source vai em

 

player.ccp

 

bool Player::canWalkthrough(const Creature* creature) const
{
if(!creature)
return true;

if(creature == this)
return false;

const Player* player = creature->getPlayer();
if(!player)
return false;

if(g_game.getWorldType() == WORLD_TYPE_NO_PVP && player->getTile()->ground
&& player->getTile()->ground->getID() != ITEM_GLOWING_SWITCH)
return true;

uint32_t protectionLevel = g_config.getNumber(ConfigManager::PROTECTION_LEVEL);
   if(player->getLevel() < protectionLevel && player->getTile()->ground
&& player->getTile()->ground->getID() != ITEM_GLOWING_SWITCH)
return true;

return player->isGhost() && getGhostAccess() < player->getGhostAccess();
}

 

 

ou

 

bool Player::canWalkthrough(const Creature* creature) const
{
if(!creature)
return true;

if(creature == this)
return false;

const Player* player = creature->getPlayer();
if(!player)
return false;

if(g_game.getWorldType() == WORLD_TYPE_NO_PVP && player->getTile()->ground
&& player->getTile()->ground->getID() != ITEM_GLOWING_SWITCH)
return true;

return player->isGhost() && getGhostAccess() < player->getGhostAccess();
}

Link para o comentário
Compartilhar em outros sites

  • 0

não funcionou aki, deu erro no script no distro:

 

(onthink)

antitrap.lua:25

Attempt to Compare boolean with number

Player not found when requesting player info #3

Link para o comentário
Compartilhar em outros sites

  • 0

É..esperamos a solução então..

E vodkart, obrigado por postar o sistema em source, mas como eu não sei compilar .. =\

 

mesmo assim, muito obrigado ;)

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado Jhon, sistema está funcionando, não ocorreu erros aqui por enquanto.. Visto que você conseguiu arrumar e nos ajudar REP + pra você! Obrigado..

Link para o comentário
Compartilhar em outros sites

  • 0

estranho...aki o script não deu nenhum erro no distro, mas eu fico virado pra frente do player low level e não é trocado as posições minha e dele..

 

(oq acontece, é que mesmo eu estando com skull ou pz locked, eu posso passar por dentro dele, como se fosse ghost de god)

 

estranho o.O

 

aah..mais um erro no distro (agora no 050-function) :

 

[error creaturescript interface]
<onthink>
<lua GetTile info> Tile Not Found

lib/050-function.lua:331   attempt to index a boolean value

stack traceback:
lib/050-function.lua:331  in function 'GetTilePZinfo'

Link para o comentário
Compartilhar em outros sites

  • 0

Não sei, pode ser erro na tua lib. Última chance, tenta usar esse:

function getTilePzInfoz(pos)
   return getTileInfo(pos).protection
end

function onThink(cid, interval)

if getTilePzInfoz(getCreaturePosition(cid)) then
   return true
end

local minuto = 1 -- quantos minuto para atravesar o player.
local protectionLevel = 100 -- protection level do server.
local position = getPlayerPosition(cid)

if getPlayerLookDir(cid) == 0 then
   position = {x=position.x, y=position.y-1, z=position.z}
elseif getPlayerLookDir(cid) == 1 then
   position = {x=position.x+1, y=position.y, z=position.z}
elseif getPlayerLookDir(cid) == 2 then
   position = {x=position.x, y=position.y+1, z=position.z}
elseif getPlayerLookDir(cid) == 3 then
   position = {x=position.x-1, y=position.y, z=position.z}
end

for i = 0, 255 do
local o = 0
   position.stackpos = i
   local tile = getTileThingByPos(position)
   if isPlayer(tile.uid) and getPlayerLevel(tile.uid) < protectionLevel then
local o = 1
    setPlayerStorageValue(cid, 56421, getPlayerStorageValue(cid,56421)+1)
    if getPlayerStorageValue(cid, 56421) >= 120*minuto then
	    setPlayerStorageValue(cid, 56421, 0)
	    doTeleportThing(cid, getPlayerPosition(tile.uid))
    end
break
   elseif i == 255 and o == 0 then
setPlayerStorageValue(cid, 56421, 0)
end
end

return true
end

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

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