[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global

3 participantes

Ir para baixo

[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global

Mensagem por Inato Seg maio 07, 2018 2:58 pm

Existe algo (ou que dê pra fazer) no NPCrystal que, ao um player morrer pelas mãos de outro player (no pvp por assim dizer), conte alguma variável?

Ou seja, se eu matei outro player, aumenta uma variável, se eu morrer, diminui uma variável. (eu sei que isso dá pra fazer com monstros, que usamos até para quests de matar mob, mas por player? Dá?)

O intuito é fazer um sistema de rank diferente dos de level que já tem no netplay, um que, ao contar uma certa quantidade de mortes, e consequentemente uma certa quantidade de pontos em variável, mostre uma imagem na tela uma espécie de emblema/brasão, algo que normalmente a gente ver no League of Legends, Clash Of Clans/Royale e similares.

Se existe já isso, alguém pode me dizer onde fica? E se não existe, dar uma idéia de como fazer? (pode ser pelos eventos simples/comuns mesmo).

Angel

[Edit: O que seria mais overpower era que esse emblema mostrasse em cima do nome do personagem, onde os outros players também conseguissem ver (como o que acontece com a guild)]

[Edit 2: Editei o título devido as novas regras postadas pelo Paulo Soreto]


Última edição por Inato em Ter maio 08, 2018 3:03 pm, editado 3 vez(es)
Inato
Inato
Iniciante
Iniciante

Mensagens : 76
Créditos : 7

Ficha do personagem
Nível: 1
Experiência:
[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Left_bar_bleue0/0[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty_bar_bleue  (0/0)
Vida:
[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Left_bar_bleue30/30[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global

Mensagem por Valentine Seg maio 07, 2018 3:19 pm

Tem algum script chamado pvp? Se tiver, posso ver alguma forma de fazer.
Valentine
Valentine
Administrador
Administrador

Medalhas : [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global ZgLkiRU
Mensagens : 5345
Créditos : 1164

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global

Mensagem por Inato Seg maio 07, 2018 3:27 pm

Valentine escreveu:Tem algum script chamado pvp? Se tiver, posso ver alguma forma de fazer.

O que tem de parecido com PVP é esse com nome de [ABS] PlayerVsPlayer*. 

Link https://pastebin.com/mwXpyB9u ou código abaixo:
Código:
#============================================================================
# *  Mr.Mo's ABS
#============================================================================
# Mr.Mo "Muhammet Sivri"
# Version 1
# 09.16.06
#============================================================================
#--------------------------------------------------------------------------
# * Begin SDK Enable Test
#--------------------------------------------------------------------------
if SDK.state("Mr.Mo's ABS") == true
  VICTORY = '002-Victory02' #THis is the ME that will be played when a player wins.
                            #You can change it if you want.
                            
  EXP_GAIN = 2              #How much EXP should the winner gain? IT works like this
                            #level * EXP_GAIN
                            #level = the loser's level
                            
  GOLD_GAIN = 0.2          #Get the looser's gold. The number is by percents.
                            #Gained_Gold = looser.gold*.10
                            #0 Would be nothing.
class MrMo_ABS
  #--------------------------------------------------------------------------
  # * Player Melee Attack
  #--------------------------------------------------------------------------
  def player_melee
    return $chat.texto("Equipe alguma arma para atacar") if $data_weapons[@actor.weapon_id] == nil
    return if attacked_monster?
    return if attacked_player?
  end
  #--------------------------------------------------------------------------
  # * Player Attacked a Monster?
  #--------------------------------------------------------------------------
  def attacked_monster?
    #Get all enemies
    for e in @enemies.values
      #Skip NIL values or dead enemies
      next if e == nil or e.dead?
      #Skip the enemy if its not close by or not facing
      next if !in_direction?($game_player, e.event) or !in_range?($game_player, e.event, 1)
      #Attack the enemy
      e.attack_effect(@actor)
      #Get Animation
      a = $data_weapons[@actor.weapon_id].animation2_id
      #Hit enemy if the attack succeeds
      hit_enemy(e, @actor, a) if e.damage != "Miss" and e.damage != 0
      #Animate the player
      if MELEE_ANIMATION[@actor.weapon_id] == nil
        animate($game_player, $game_player.character_name+"_melee") if @player_ani
      else
        m = MELEE_ANIMATION[@actor.weapon_id]
        animate($game_player, $game_player.character_name+m.to_s) if @player_ani
      end
      #Return if the enemy is dead
      return true if enemy_dead?(e,@actor)
      return true if !e.hate_group.include?(0)
      #Set the new target for the enemy
      e.attacking = $game_player
      #The enemy is now in battle
      e.in_battle = true
      #Setup movement
      setup_movement(e)
    end
    return false
  end
  #--------------------------------------------------------------------------
  # * Player Attacked a Player?
  #--------------------------------------------------------------------------
  def attacked_player?
    #Get all enemies
    for pl in Network::Main.mapplayers.values
      #Skip NIL values or dead enemies
      next if pl == nil or pl.hp == 0 or pl.map_id != $game_map.map_id
      #Skip the enemy if its not close by or not facing
      next if !in_direction?($game_player, pl) or !in_range?($game_player, pl, 1)
      next if pl.hp <= 0
      unless User_Edit::PVPMAPS.include?($game_map.map_id)
        $chat.texto("Você não pode atacar jogadores aqui!")
        return
      end
      #Attack the player
      damage = pl.attack_effect
      #Get Animation
      a = $data_weapons[@actor.weapon_id].animation2_id
      #Store the player's net id
      netid = pl.netid
      #Send the demage and aniamtion
      Network::Main.socket.send("<attack_id>#{netid}\n") if damage != "Miss" and damage != 0
      Network::Main.socket.send("<attack_effect>dam=#{damage}; ani=#{a} id=#{Network::Main.id}</attack_effect>\n") if damage != "Miss" and damage != 0
      pl.show_demage(damage,false) if damage != "Miss" and damage != 0
      #Hit enemy if the attack succeeds
      hit_enemy(pl, @actor, a) if damage != "Miss" and damage != 0
      #Animate the player
      if MELEE_ANIMATION[@actor.weapon_id] == nil
        animate($game_player, $game_player.character_name+"_melee") if @player_ani
      else
        m = MELEE_ANIMATION[@actor.weapon_id]
        animate($game_player, $game_player.character_name+m.to_s) if @player_ani
      end
      netplayer_killed(pl) if pl.hp <= 0
      return true
    end
    return false
  end
  #--------------------------------------------------------------------------
  # * Player Skill Attack
  #--------------------------------------------------------------------------
  def player_skill(id)
    #Get Skill
    skill = $data_skills[id]
    @actor = $game_party.actors[0] unless @actor
    #Return if the skill doesn't exist
    return if skill == nil
    #Return if the actor doesn't have the skill
    return if !@actor.skills.include?(skill.id)
    #Return if the actor can't use the skill
    return if !@actor.can_use_skill?(skill)
    #Animate
    if SKILL_ANIMATION.has_key?(id)
      l = SKILL_ANIMATION[id]
      animate($game_player, $game_player.character_name+l.to_s) if @player_ani
    else
      animate($game_player, $game_player.character_name+"_cast") if @player_ani
    end
    #Get the skill scope
    case skill.scope
    when 1 #Enemy
      #If the skill is ranged
      if RANGE_SKILLS.has_key?(skill.id)
        #Add to range
        @range.push(Game_Ranged_Skill.new($game_player, @actor, skill))
        range = RANGE_SKILLS[skill.id]
        Network::Main.socket.send("<10>self.range_sprite(#{$game_map.map_id},[#{$game_player.direction},#{$game_player.x},#{$game_player.y}],$game_party.actors[0],#{@actor.weapon_id},'#{range[2]}',#{range[1]},#{range[0]},#{Network::Main.id}, #{skill.id})</10>\n")
        #Take off SP
        @actor.sp -= skill.sp_cost
        return
      end
      #If the skill is not ranged
      enemies = []
      #Get all enemies
      for enemy in @enemies.values
        next if enemy == nil
        enemies.push(enemy)
      end
      #Get all players
      for player in Network::Main.mapplayers.values
        next if player == nil
        enemies.push(player)
      end
      #Order them from closest to the farthest
      enemies.sort! {|a,b|
      get_range(a.event,b.event) - get_range(b.event,a.event) }
      return if enemies[0] == nil
      #Attack the closest one
      enemies[0].effect_skill(@actor, skill)
      if enemies[0].is_a?(Game_NetPlayer)
        unless User_Edit::PVPMAPS.include?($game_map.map_id)
         $chat.texto("Você não pode atacar jogadores aqui!")
         return
        end
        damage = enemies[0].damage
        pl = enemies[0]
        a = skill.animation2_id
        #Store the player's net id
        netid = pl.netid
        #Send the demage and aniamtion
        Network::Main.socket.send("<attack_id>#{netid}\n") if damage != "Miss" and damage != 0
        Network::Main.socket.send("<attack_effect>dam=#{damage}; ani=#{a} id=#{Network::Main.id}</attack_effect>\n") if damage != "Miss" and damage != 0
        pl.show_demage(damage,false) if damage != "Miss" and damage != 0
      end
      #Take off SP
      @actor.sp -= skill.sp_cost
      #Show Animetion on enemy
      hit_enemy(enemies[0], @actor, skill.animation2_id) if enemies[0].damage != "Miss" and enemies[0].damage != 0
      #Return if enemy is dead
      return if enemy_dead?(enemies[0],@actor)
      return if !enemy.hate_group.include?(0)
      #If its alive, put it in battle
      enemies[0].in_battle = true
      #Make it attack the player
      enemies[0].attacking = $game_player
      #Setup movement
      setup_movement(enemies[0])
      return
    when 2 #All Emenies
      #Play the animation on player
      $game_player.animation_id = skill.animation2_id
      #Take off SP
      @actor.sp -= skill.sp_cost
      enemies = get_all_range
      #Get all enemies
      for e in enemies.values
        #Skip NIL values
        next if e == nil
        #Attack enemy
        e.effect_skill(@actor, skill)
        #Show Animetion on enemy
        hit_enemy(e, @actor, 0) if enemy.damage != "Miss" and enemy.damage != 0
        #Skip this enemy if its dead
        next if enemy_dead?(e,@actor)
        next if !e.hate_group.include?(0)
        #If its alive, put it in battle
        enemy.in_battle = true
        #Make it attack the player
        enemy.attacking = $game_player
        #Setup movement
        setup_movement(e)
      end
      return
    when 3..4, 7 #User
      unless $Manager["Top_Hud"].netplayer.nil?
        netid = $Manager["Top_Hud"].netid
        Network::Main.socket.send("<10> net_skill(#{id}, '#{netid}', '#{$game_party.actors[0].name}') </10> \n")
        return
      end
      #Use the skill on the player
      @actor.effect_skill(@actor, skill)
      #Take off SP
      @actor.sp -= skill.sp_cost
      #Play animation
      $game_player.animation_id = skill.animation2_id
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Get ALL Range(Element, Range)
  #--------------------------------------------------------------------------
  def get_all_range(element, range)
    objects = []
    for e in @enemies.values
      next if e == nil
      objects.push(e) if in_range?(element, e.event, range)
    end
    for player in Network::Main.mapplayers.values
      next if player == nil
      objects.push(player) if in_range?(element, player, range)
    end
    return objects
  end
  #--------------------------------------------------------------------------
  # * Netplayer Killed
  #--------------------------------------------------------------------------
  def netplayer_killed(player)
    #Audio.me_play("Audio/ME/" + VICTORY, 80, 100)
    actor = $game_party.actors[0]
    if actor.cant_get_exp? == false
      last_level = actor.level
      exp = player.level * EXP_GAIN
      actor.exp += player.level * EXP_GAIN
      if actor.level > last_level
        $game_player.show_demage("Level Up!",false)
        actor.hp = actor.maxhp
        actor.sp = actor.maxsp
      end
    end
    $chat.texto("Voce matou"+player.name)
    return if GOLD_GAIN <= 0
    return if player.gold <= 0
    gold = player.gold*GOLD_GAIN
    $game_party.gain_gold(gold.to_i)
  end
end

#============================================================================
# * Game Ranged Skill
#============================================================================
class Game_Ranged_Skill < Range_Base
  attr_reader    :skill
  attr_accessor  :stop
  def update
    super
    for range in $ABS.range
     next if range == self
     skill = range.skill
     next if skill.nil?
     if is_number?(skill)
       skill = $data_skills[skill]
     end
     if range.x == @x and range.y == @y
       if @skill.power > skill.power
         range.stop = true
       elsif @skill.power < skill.power
         @stop = true
       elsif @skill.power == skill.power
         @stop = true
         range.stop = true
       end
      @animation_id = 102
     end
   end
 end
  #--------------------------------------------------------------------------
  # * Check Event Trigger Touch(x,y)
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    return if @stop
    hit_player if x == $game_player.x and y == $game_player.y
    for event in $game_map.events.values
      if event.x == x and event.y == y
        if event.character_name == ""
          froce_movement
        else
          hit_event(event.id)
        end
      end
    end
    return if @parent.is_a?(Game_Event)
    #Check netplayer hit
    for player in Network::Main.mapplayers.values
      next if player == nil
      next if player.x != x or player.y != y
      hit_netplayer(player)
    end
  end
  #--------------------------------------------------------------------------
  # * Hit NetPlayer
  #--------------------------------------------------------------------------
  def hit_netplayer(player)
    unless User_Edit::PVPMAPS.include?($game_map.map_id)
      $chat.texto("Você não pode atacar jogadores aqui!")
      return
    end
    @stop = true
    #Get Actor
    actor = player
    #Get Enemy
    enemy = @actor
    #Attack Actor
    damage = actor.effect_skill(enemy, @skill)
    damage = player.damage
    #Store the player's net id
    netid = player.netid
    a = @skill.animation2_id
    player.jump(0,0) if damage != "Miss" and damage != 0
    #Send the demage and aniamtion
    Network::Main.socket.send("<attack_id>#{netid}\n") if damage != "Miss" and damage != 0
    Network::Main.socket.send("<attack_effect>dam=#{damage}; ani=#{a} id=#{Network::Main.id}</attack_effect>\n") if damage != "Miss" and damage != 0
    #Show animation on player
    player.animation_id = @skill.animation2_id if actor.damage != "Miss" and actor.damage != 0
    #Check if enemy is dead
    player.show_demage(player.damage,false) if damage != "Miss" and damage != 0
    $ABS.netplayer_killed(player) if player.hp <= 0
  end  
end
#============================================================================
# * Game Ranged Weapons
#============================================================================
class Game_Ranged_Weapon < Range_Base
  #--------------------------------------------------------------------------
  # * Check Event Trigger Touch(x,y)
  #--------------------------------------------------------------------------
  def check_event_trigger_touch(x, y)
    return if @stop
    hit_player if x == $game_player.x and y == $game_player.y
    for event in $game_map.events.values
      next if event.x != x or event.y != y
      if event.character_name == ""
        froce_movement
      else
        hit_event(event.id)
      end
    end
    return if @parent.is_a?(Game_Event)
    #Check netplayer hit
    for player in Network::Main.mapplayers.values
      next if player == nil
      next if player.x != x or player.y != y
      hit_netplayer(player)
    end
  end
  #--------------------------------------------------------------------------
  # * Hit NetPlayer
  #--------------------------------------------------------------------------
  def hit_netplayer(player)
    unless User_Edit::PVPMAPS.include?($game_map.map_id)
      $chat.texto("Você não pode atacar jogadores aqui!")
      return
    end
    @stop = true
    #Get Enemy
    enemy = @actor
    #Attack Actor
    damage = player.attack_effect(enemy)
    #Store the player's net id
    netid = player.netid
    a = @range_wepaon[2]
    player.jump(0,0) if damage != "Miss" and damage != 0
    #Send the demage and aniamtion
    Network::Main.socket.send("<attack_id>#{netid}\n") if damage != "Miss" and damage != 0
    Network::Main.socket.send("<attack_effect>dam=#{damage}; ani=#{a} id=#{Network::Main.id}</attack_effect>\n") if damage != "Miss" and damage != 0
    #Show animation on player
    player.animation_id = @range_wepaon[2] if player.damage != "Miss" and player.damage != 0
    #Check if enemy is dead
    player.show_demage(player.damage,false) if damage != "Miss" and damage != 0
    $ABS.netplayer_killed(player) if player.hp <= 0
  end  
end
#--------------------------------------------------------------------------
# * SDK End
#--------------------------------------------------------------------------
end


def net_skill(id, netid, player)
  @actor = $game_party.actors[0]
  if Network::Main.id == netid
    $chat.texto(player + " usou #{$data_skills[id].name} em você")
    @actor.effect_skill(@actor, $data_skills[id])
    @actor.sp -= $data_skills[id].sp_cost
    $game_player.animation_id = $data_skills[id].animation2_id
  end
end
Inato
Inato
Iniciante
Iniciante

Mensagens : 76
Créditos : 7

Ficha do personagem
Nível: 1
Experiência:
[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Left_bar_bleue0/0[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty_bar_bleue  (0/0)
Vida:
[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Left_bar_bleue30/30[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global

Mensagem por oraki Ter maio 08, 2018 4:52 pm

Sim, dá. Neste mesmo código que você disponibilizou dê CTRL + F e procure por:

Código:
$chat.texto("Voce matou"+player.name)
    return if GOLD_GAIN <= 0
    return if player.gold <= 0
    gold = player.gold*GOLD_GAIN
    $game_party.gain_gold(gold.to_i)

Por quê? Simples, nesta parte é enviado a mensagem ao matar o player, e claro, o ouro. Creio eu que você pode adicionar += 1 da game variable por lá também, assim sendo, sempre que matar alguém, aumenta em 1 da game_variable que você criou a condição.

Eu te mandaria o código certinho para adicionar, mas tô sem o NPC para fazer o teste. Se não conseguir, me manda PM dps.

_________________
[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Ingi84OB0MFdD
oraki
oraki
Iniciante
Iniciante

Mensagens : 37
Créditos : 9

Ir para o topo Ir para baixo

[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global

Mensagem por Inato Ter maio 08, 2018 6:15 pm

oraki escreveu:Sim, dá. Neste mesmo código que você disponibilizou dê CTRL + F e procure por:

Código:
$chat.texto("Voce matou"+player.name)
    return if GOLD_GAIN <= 0
    return if player.gold <= 0
    gold = player.gold*GOLD_GAIN
    $game_party.gain_gold(gold.to_i)

Por quê? Simples, nesta parte é enviado a mensagem ao matar o player, e claro, o ouro. Creio eu que você pode adicionar += 1 da game variable por lá também, assim sendo, sempre que matar alguém, aumenta em 1 da game_variable que você criou a condição.

Eu te mandaria o código certinho para adicionar, mas tô sem o NPC para fazer o teste. Se não conseguir, me manda PM dps.

Entendi, mas aí, se eu adicionar a game_variable aí, as quests de matar monstros que usam essa variavel também vai ser afetada né não? (pois eles usam isso) O meu intuito é contar outra variável, e consequentemente mostrar uma imagem em cima da cabeça do NPC quando uma quantidade de variável ser atingida (ou perdida)...  [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global 550459651
Inato
Inato
Iniciante
Iniciante

Mensagens : 76
Créditos : 7

Ficha do personagem
Nível: 1
Experiência:
[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Left_bar_bleue0/0[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty_bar_bleue  (0/0)
Vida:
[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Left_bar_bleue30/30[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global

Mensagem por oraki Ter maio 08, 2018 7:36 pm

Então, é só usar uma variável diferente da que você usa em outras partes do jogo.

Contanto que não seja global. Já em relação á essa imagem, é mais fácil criar por evento comum em processo paralelo. Ou pelo próprio código, enfim, depende da sua criatividade.

_________________
[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Ingi84OB0MFdD
oraki
oraki
Iniciante
Iniciante

Mensagens : 37
Créditos : 9

Ir para o topo Ir para baixo

[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global

Mensagem por Inato Ter maio 08, 2018 10:38 pm

oraki escreveu:Então, é só usar uma variável diferente da que você usa em outras partes do jogo.

Contanto que não seja global. Já em relação á essa imagem, é mais fácil criar por evento comum em processo paralelo. Ou pelo próprio código, enfim, depende da sua criatividade.

Vish, meu intuito era ser global, do mesmo jeito que a bandeira da guild é global... Bem, irei ver como faço nesse seu exemplo aí, ver se consigo acertar pelos eventos (e script), de qualquer forma obrigado por ter disponibilizado para ajudar   Indignity


Enquanto isso, vou aguardando o Valentine também, ele disse que iria ver algo pelo script, como sei que ele é muito ocupado nem irei apressar ele  Successful
Inato
Inato
Iniciante
Iniciante

Mensagens : 76
Créditos : 7

Ficha do personagem
Nível: 1
Experiência:
[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Left_bar_bleue0/0[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty_bar_bleue  (0/0)
Vida:
[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Left_bar_bleue30/30[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty_bar_bleue  (30/30)

Ir para o topo Ir para baixo

[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global Empty Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos