Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o tema • Voltar para a ficha do tema
[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global
3 participantes
Aldeia RPG :: RPG Maker :: Rpg Maker XP :: Dúvidas e pedidos
Página 1 de 1
[DÚVIDA NPCrystal] Sistema de rank PVP com imagem global
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).
[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]
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).
[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- Iniciante
- Mensagens : 76
Créditos : 7
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global
Tem algum script chamado pvp? Se tiver, posso ver alguma forma de fazer.
Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global
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- Iniciante
- Mensagens : 76
Créditos : 7
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global
Sim, dá. Neste mesmo código que você disponibilizou dê CTRL + F e procure por:
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.
- 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.
_________________
oraki- Iniciante
- Mensagens : 37
Créditos : 9
Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global
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)...
Inato- Iniciante
- Mensagens : 76
Créditos : 7
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global
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.
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.
_________________
oraki- Iniciante
- Mensagens : 37
Créditos : 9
Re: [DÚVIDA NPCrystal] Sistema de rank PVP com imagem global
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
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
Inato- Iniciante
- Mensagens : 76
Créditos : 7
Ficha do personagem
Nível: 1
Experiência:
(0/0)
Vida:
(30/30)
Tópicos semelhantes
» [DUVIDA] Erro no sistema de pet global
» [DUVIDA] Erro no sistema de pet global
» [Dúvida] Problema com o sistema de PET Global
» sistema de rank
» Sistema de Rank
» [DUVIDA] Erro no sistema de pet global
» [Dúvida] Problema com o sistema de PET Global
» sistema de rank
» Sistema de Rank
Aldeia RPG :: RPG Maker :: Rpg Maker XP :: Dúvidas e pedidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos