LM² - No PvP Zone/Region
Alteração simples para criar uma zona não pvp dentro de um mapa pvp.
Impede que jogadores ataquem ou sejam atacados dentro das zonas.
Como meu pc está com problemas não tenho como gifar ou gravar um vídeo.
Como instalar:
Para instalar é bem simples, insira no módulo [VS] Configs no cliente e no configs.ini do servidor(esse passo é opcional segundo Val, porém melhor garantir) o seguinte código.
- Código:
# No PvP Zone (53 = ID da zona, marque o mapa com este ID de zona)
NO_PVP_ZONE = 53
Sendo 53 a region/região no mapa. Recomendo não alterar a menos que saiba o que esta fazendo.
No cliente, vá no [VS] Game_Player e procure por: def can_attack_normal? abaixo do trecho: return false
Adicione esse código:
elsif !$game_map.pvp
$error_msg = Vocab::NonPvP
return false
- Código:
# NO PvP Zone
elsif $game_map.pvp && $game_map.region_id(@x, @y) == Configs::NO_PVP_ZONE
$error_msg = Vocab::NonPvP
return false
elsif $game_map.pvp && $game_map.region_id(x, y) == Configs::NO_PVP_ZONE
$error_msg = Vocab::NonPvP
return false
No mesmo procure por: def valid_target?(range, aoe = 0) e add o código abaixo do trecho: return false
:
Adicione esse código:elsif @target.admin?
$error_msg = Vocab::AttackAdmin
return false
- Código:
# NO PvP Zone
elsif @target.is_a?(Game_NetPlayer) && $game_map.pvp && $game_map.region_id(@x, @y) == Configs::NO_PVP_ZONE
$error_msg = Vocab::NonPvP
return false
elsif @target.is_a?(Game_NetPlayer) && $game_map.pvp && $game_map.region_id(@target.x, @target.y) == Configs::NO_PVP_ZONE
$error_msg = Vocab::NonPvP
return false
No cliente é apenas isso.
Agora no servidor abra o game_client.rb dentro da subpasta Combat, que fica dentro da pasta Scripts
Procure por def attack_normal, abaixo do trecho:
Adicione esse código:next if !client&.in_game? || client.map_id != @map_id || !in_front?(client) || client.admin?
- Código:
#No PvP Zone
return if $network.maps[@map_id].region_id(client.x, client.y) == NO_PVP_ZONE
return if $network.maps[@map_id].region_id(@x, @y) == NO_PVP_ZONE
No mesmo(após a alteração acima), abaixo do trecho:
Adicione esse código:return unless target && in_range?(target, Configs::RANGE_WEAPONS[weapon_id][:range])
- Código:
#No PvP Zone
return if @target.type == Constants::TARGET_PLAYER && $network.maps[@map_id].region_id(target.x, target.y) == NO_PVP_ZONE
return if @target.type == Constants::TARGET_PLAYER && $network.maps[@map_id].region_id(@x, @y) == NO_PVP_ZONE
Isso é tudo.
Agradecimentos:
Valentine pelo VXA-OS.
FraN
LeonM² por fazer essa modificação.
Quem sugeriu esse sistema no server do discord do VXA-OS que eu não lembro.
Qualquer erro ou duvida, comentar no tópico ou deixar no server do VXA-OS.
Editado:
Atualizado para a versão 2.1.4.