por Valentine Ter Mar 23, 2021 8:11 pm
Correções de bugs da versão 2.1.3:
Correção do erro nas habilidades que adicionam estado:
No arquivo
game_battle.rb da pasta Scripts do SERVIDOR, substitua o
def item_apply por:
Versão COM SQL/MySQL: - Código:
def item_apply(user, item, animation_id, ani_index)
missed = (rand >= item_hit(user, item))
evaded = (!missed && rand < item_eva(user, item))
unless missed || evaded
if !item.damage.none?
critical = (rand < item_cri(user, item))
make_damage_value(user, item, critical, animation_id, ani_index)
elsif item.animation_id > 0
attacker_type = user.is_a?(Game_Client) ? 0 : 1
character_type = self.is_a?(Game_Client) ? Enums::Target::PLAYER : Enums::Target::ENEMY
$network.send_animation(self, item.animation_id, user.id, attacker_type, ani_index, character_type)
end
# Se o dano do item/habilidade causou a morte do usuário, o efeito,
#que é executado após o dano, não será aplicado nele
item.effects.each { |effect| item_effect_apply(user, item, effect) } unless dead?
end
end
Versão SEM SQL/MySQL: - Código:
def item_apply(user, item, animation_id, ani_index)
missed = (rand >= item_hit(user, item))
evaded = (!missed && rand < item_eva(user, item))
unless missed || evaded
if !item.damage.none?
critical = (rand < item_cri(user, item))
make_damage_value(user, item, critical, animation_id, ani_index)
elsif item.animation_id > 0
attacker_type = user.is_a?(Game_Client) ? 0 : 1
character_type = self.is_a?(Game_Client) ? Enums::Target::PLAYER : Enums::Target::ENEMY
$server.send_animation(self, item.animation_id, user.id, attacker_type, ani_index, character_type)
end
# Se o dano do item/habilidade causou a morte do usuário, o efeito,
#que é executado após o dano, não será aplicado nele
item.effects.each { |effect| item_effect_apply(user, item, effect) } unless dead?
end
end
Correção do erro dos paperdolls:
1) No script
[VS] Sprite_Character do CLIENTE, substitua o
def init_sprites por:
- Código:
def init_sprites
@message_duration = 0
@damage_sprites = []
@paperdoll_sprites = []
@paperdoll_oy = []
@last_equips = []
@name_sprite = nil
@guild_sprite = nil
@quest_sprite = nil
@tip_sprite = nil
@hp_sprite = nil
@message_sprite = nil
@last_guild = nil
@last_hp = nil
@last_mhp = nil
@last_sex = nil
end
2) Substitua o
def update_paperdolls por:
- Código:
def update_paperdolls
order_equips.each_with_index do |slot_id, index|
if @character.actor.equips[slot_id] && @character.actor.equips[slot_id].paperdoll_name
refresh_paperdoll(slot_id) unless @last_equips[slot_id] == @character.actor.equips[slot_id] && @last_sex == @character.actor.sex
pattern = @character.pattern < 3 ? @character.pattern : 1
paperdoll_index = @character.attack_animation? ? @character.character_index : @character.actor.equips[slot_id].paperdoll_index
sx = (paperdoll_index % 4 * 3 + pattern) * @cw
sy = (paperdoll_index / 4 * 4 + (@character.direction - 2) / 2) * @ch
@paperdoll_sprites[slot_id].src_rect.set(sx, sy, @cw, @ch)
@paperdoll_sprites[slot_id].x = x
@paperdoll_sprites[slot_id].y = y + index
#@paperdoll_sprites[slot_id].z = z + index
@paperdoll_sprites[slot_id].oy = @paperdoll_oy[slot_id] + index
else
dispose_paperdoll(slot_id)
end
end
@last_sex = @character.actor.sex
end
3) Substitua o
def refresh_paperdoll por:
- Código:
def refresh_paperdoll(slot_id)
@last_equips[slot_id] = @character.actor.equips[slot_id]
bitmap = Cache.paperdoll(@character.actor.equips[slot_id].paperdoll_name, @character.actor.sex)
@paperdoll_sprites[slot_id] ? @paperdoll_sprites[slot_id].bitmap.clear : create_paperdoll(slot_id, bitmap)
@paperdoll_sprites[slot_id].bitmap.blt(0, 0, bitmap, bitmap.rect)
sign = @character.actor.equips[slot_id].paperdoll_name[/^[\!\$]./]
if sign && sign.include?('$')
cw = bitmap.width / 3
ch = bitmap.height / 4
else
cw = bitmap.width / 12
ch = bitmap.height / 8
end
@paperdoll_sprites[slot_id].ox = cw / 2
@paperdoll_sprites[slot_id].oy = ch
@paperdoll_oy[slot_id] = ch
end
4) Substitua o
def create_paperdoll por:
- Código:
def create_paperdoll(slot_id, bitmap)
@paperdoll_sprites[slot_id] = Sprite.new(viewport)
@paperdoll_sprites[slot_id].bitmap = Bitmap.new(bitmap.width, bitmap.height)
@paperdoll_sprites[slot_id].z = z
end
Correção do erro ao sair do jogo enquanto está sendo atacado por inimigo:
1) No arquivo
game_battle.rb da pasta Scripts do SERVIDOR, substituia a linha:
- Código:
5 => :conditions_met_party_level?,
2) Por:
- Código:
5 => :conditions_met_level?,
Versão COM SQL/MySQL:3) Substitua o
def conditions_met_level? por:
- Código:
def conditions_met_level?(param1, param2)
$network.clients[@target.id] && valid_target?($network.clients[@target.id]) && $network.clients[@target.id].level >= param1
end
4) Substitua o
def conditions_met_switch? por:
- Código:
def conditions_met_switch?(param1, param2)
$network.clients[@target.id] && valid_target?($network.clients[@target.id]) && $network.clients[@target.id].switches[param1]
end
Versão SEM SQL/MySQL:3) Substitua o
def conditions_met_level? por:
- Código:
def conditions_met_level?(param1, param2)
$server.clients[@target.id] && valid_target?($server.clients[@target.id]) && $server.clients[@target.id].level >= param1
end
4) Substitua o
def conditions_met_switch? por:
- Código:
def conditions_met_switch?(param1, param2)
$server.clients[@target.id] && valid_target?($server.clients[@target.id]) && $server.clients[@target.id].switches[param1]
end
Correção do erro na contagem dos dias VIP adicionado:
Obs.: Esse erro só ocorre na versão COM SQL/MySQL!
No
database.rb da pasta Scripts do SERVIDOR, substitua o
def self.save_account por:
- Código:
def self.save_account(client, s_client)
# Carrega vip_time da conta no banco de dados, pois o jogador pode ter
#comprado vip na loja do site durante o jogo
vip_time = [s_client[:accounts].select(:vip_time).where(:id => client.account_id_db).single_value, Time.now.to_i].max
s_client[:accounts].where(:id => client.account_id_db).update(:vip_time => vip_time + client.added_vip_time)
# Atualiza o tempo VIP e reseta o tempo VIP adicionado caso o jogador
#vá para seleção de personagens e depois volte para o jogo
client.vip_time = Time.at(vip_time) + client.added_vip_time
friends = s_client[:account_friends].select(:name).where(:account_id => client.account_id_db).map(:name)
(friends - client.friends).each do |name|
s_client[:account_friends].where(:account_id => client.account_id_db, :name => name).delete
end
(client.friends - friends).each do |name|
s_client[:account_friends].insert(:account_id => client.account_id_db, :name => name)
end
end
Essas correções estarão na versão 2.1.4, que será lançada em breve.