Suporte ao desenvolvimento de jogos


1 Resultado encontrado para No

FraN

LM² - No PvP Zone/Region (2.1.4) - Sex Abr 09, 2021 7:25 pm



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




    elsif !$game_map.pvp
      $error_msg = Vocab::NonPvP
      return false


Adicione esse código:



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

:

        elsif @target.admin?

            $error_msg = Vocab::AttackAdmin

      return false

Adicione esse código:


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:


  next if !client&.in_game? || client.map_id != @map_id || !in_front?(client) || client.admin?

Adicione esse código:
        

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:

        
            
return unless target && in_range?(target, Configs::RANGE_WEAPONS[weapon_id][:range])
        
Adicione esse código:
        
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.


Ir para o topo

Data/hora atual: Dom maio 19, 2024 8:41 am