ГлавнаяФорумRPG MakerСкрипты/ПлагиныRPG Maker VX ACEИзменённые системы сообщенийСкрипт склонения системных сообщений
																				Войти на сайт
×
			ТЕМА: Скрипт склонения системных сообщений
Скрипт склонения системных сообщений 1 год 10 мес. назад #129811
| 
 | 
		Скрипт склонения системных сообщений по полу и падежам. Информация: Автор: RSV2 Версия скрипта: 1.0 Версия мейкера: VX Ace Тип: Система вывода сообщений. Описание: Вообще, уже довольно давно раздражает невозможность склонять системные сообщения мукеров в переводах, так что сподобился слепить для себя костыль. К сожалению универсальным сделать его не удалось. Особенности: 
 Установка: Подготовка: Как оказалось, для обычных проектов, более-менее актуальны сообщения о внезапном нападении и о том, что кто-то кого-то защитил своим телом. Так же востребованы сообщения с разделением по половому признаку. К сожалению с этим проблема. По умолчанию пол героя нигде в данных мукеров не фигурирует. Так что ввёл свой "костыль" добавив метку "#fem#" для персонажей женского рода. (делается ручками для каждого персонажа). Так как многие игры используют поле "note" для скриптов, то наверно желательно, чтобы метка начиналась с заглушки "#". Скриншоты Далее будем собирать скрипт индивидуально под вашу игру. (Буду делать на примере своего перевода) Неизменяемые блоки просто копипастим не думая, то что требует изменений - делаем по указанным шаблонам. Неизменяемый Блок 1. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] ########################### Внезапное нападение #########################
#isFem: женщина - true;  мужчина - false
# Мизуна неожиданно атакова(на)/Василий неодиданно атакова(н)
# Группа Василия неожиданно атакова(на)
BattleManager_old = BattleManager.clone
module BattleManager
  def self.battle_start
    $game_system.battle_count += 1
    $game_party.on_battle_start
    $game_troop.on_battle_start
    $game_troop.enemy_names.each do |name|
      $game_message.add(sprintf(Vocab::Emerge, name))
    end
    if @preemptive
      $game_message.add(sprintf(Vocab::Preemptive, $game_party.name))
    elsif @surprise
      if $game_party.battle_members.size > 1
        $game_message.add(sprintf(isFem(true), $game_party.name))
      else
        #isFem Заменить на false, если персонаж мужчина.
        $game_message.add(sprintf(isFem(true), $game_party.name))
      end
    end
    wait_for_message
  end
  #Сообщение о внезапной атаке в зависимости от пола.
  def self.isFem(fem)
    if fem == true
      return "%s неожиданно атакована!"
    else
      return "%s неожиданно атакован!"
    end
  end
end
# Персонаж/Группа
# (Мизуна/Группа Мизун(ы))
class Game_Party < Game_Unit
  alias name_pad name
  def name
    return ""           if battle_members.size == 0
    return leader.name  if battle_members.size == 1
    return sprintf(Vocab::PartyName, pad(leader.name,"R"))
  end
end
 
class Window_BattleLog < Window_Selectable
# Сообщение о защите другого персонажа. "(Кот) прикрыл собой Мизун(у)"
  alias display_substitute_new display_substitute
  def display_substitute(substitute, target)
    add_text(sprintf(Vocab::Substitute, substitute.name, pad(target.name, "V")))
    wait
    back_one
  end
 
#[State] Сообщение о состоянии message3.
  alias display_current_state_new display_current_state
  def display_current_state(subject)
    isFem = subject.actor? ? subject.actor.note.include?("#fem#") : subject.enemy.note.include?("#fem#")
    unless subject.most_important_state_text(isFem).empty?
      add_text(subject.name + subject.most_important_state_text(isFem))
      wait
    end
  end
#[State]
  alias display_added_states_new display_added_states
  def display_added_states(target)
    isFem = target.actor? ? target.actor.note.include?("#fem#") : target.enemy.note.include?("#fem#")
    target.result.added_state_objects.each do |state|Пользовательские сообщения о добавлении конкретных состояний: Message1 - Добавление состояния персонажу Message2 - Добавление состояния врагу Для своей игры делайте свой список по указанному ниже шаблону. Все прочие состояния, не вошедшие в этот список будут добавляться как обычно. Если не нужно, то можно вообще его не добавлять. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ]       # Свои сообщения о добавлении состояний. Используйте id (порядковый номер в State)
      # Например state.id == 2 - это Яд.
      if state.id == 2
        if isFem
          # Цель женского рода.
          state.message1 = " отравлена"
          state.message2 = " отравлена"
        else
          # Цель мужского рода.
          state.message1 = " отравлен"
          state.message2 = " отравлен"
        end
      elsif state.id == 7
        if isFem
          # Цель женского рода.
          state.message1 = " парализована"
          state.message3 = " парализована"
        else
          # Цель мужского рода.
          state.message1 = " парализован"
          state.message3 = " парализован"
        end
      elsif state.id == 8
        if isFem
          # Цель женского рода.
          state.message1 = " сбита с ног"
          state.message2 = " сбита с ног"
        else
          # Цель мужского рода.
          state.message1 = " сбит с ног"
          state.message2 = " сбит с ног"
        end
      endНеизменяемый Блок 2. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ]       state_msg = target.actor? ? state.message1 : state.message2
      target.perform_collapse_effect if state.id == target.death_state_id
      next if state_msg.empty?
      # Своё сообщение о добавлении состояния. Отравление id = 2
      replace_text(target.name + state_msg)
      wait
      wait_for_effect
    end
  end
#[State]
  alias display_removed_states_new display_removed_states
  def display_removed_states(target)
    isFem = target.actor? ? target.actor.note.include?("#fem#") : target.enemy.note.include?("#fem#")
    target.result.removed_state_objects.each do |state|
      next if state.message4.empty? Аналогично добавлению состояний, делаем список удаления состояний: Message4 - Сообщение при удалении состояния. Все прочие состояния, не вошедшие в этот список будут добавляться как обычно. Если не нужно, то можно вообще его не добавлять. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ]       # Пользовательские сообщения об удалении состояний.
      if state.id == 2
        state.message4 = isFem ? " исцелилась от яда" : " исцелился от яда"
      elsif state.id == 7
        state.message4 = isFem ? " избавилась от паралича" : " избавился от паралича"
      elsif state.id == 8
        state.message4 = isFem ? " восстановила равновесие" : " восстановил равновесие"
      endНеизменяемый Блок 3. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ]       replace_text(target.name + state.message4)
      wait
    end
  end
#[Skill] Сообщения Skill & Item
  alias display_use_item_new display_use_item
  def display_use_item(subject, item)
    isFem = subject.actor? ? subject.actor.note.include?("#fem#") : subject.enemy.note.include?("#fem#")
    # Сообщение Skill
    if item.is_a?(RPG::Skill)Пользовательские сообщения активации навыков: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ]       # Своё сообщение Message1 для Skill № XX
      # Добавить через elsif сколько нужно для конкретной игры.
      if item.id == 8
        item.message1 = isFem ? add_text(subject.name + " кинула сюрикен!") : add_text(subject.name + " кинул сюрикен!")
      else
      # Стандартное сообщение Message1
        add_text(subject.name + item.message1)
      end
      unless item.message2.empty?
        wait
        # Своё сообщение Message2 для Skill № XX
        # Добавить через elsif сколько нужно для конкретной игры.
        if item.id == 8
          item.message2 = isFem ? add_text("Ваше сообщение Ж") : add_text("Ваше сообщение М")
        end
        # Стандартное сообщение Message2
        add_text(item.message2)
      endИЛИ Если не собираетесь добавлять никаких сообщений для навыков, то просто вставьте код ниже: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ]       add_text(subject.name + item.message1)
      unless item.message2.empty?
        wait
        add_text(item.message2)
      endНеизменяемый Блок 4. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ]     else
      add_text(sprintf(Vocab::UseItem, subject.name, item.name))
    end
  end
end
 
#[State] Для State Message3 Сообщение о продолжении состояния.
class Game_BattlerBase
  alias most_important_state_text_new most_important_state_text
  def most_important_state_text(isFem)
    states.each do |state|Пользовательский список течения состояний: Message3 - Сообщение о текущем состоянии персонажа. Если не нужно, то можно вообще его не добавлять. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ]       return state.message3 unless state.message3.empty?
    end
    return ""
  end
end
 
#Склонение имён по падежам.
#Исправление от 09.03.24
def pad(actor, p)
  if (actor.length <= 2)
    return actor
  end
  if p == "V"
    local = {
    # 2 буквы. Последняя А
    # Последняя А
    "ба" => "у", "ва" => "у", "га" => "у", "да" => "у", "жа" => "у", 
    "за" => "у", "ка" => "у", "ла" => "у", "ма" => "у", "на" => "у",
    "па" => "у", "ра" => "у", "са" => "у", "та" => "у", "фа" => "у",
    "ха" => "у", "ца" => "у", "ча" => "у", "ша" => "у", "ща" => "у",
    # ёк, ок
    "ёк" => "ька", "ок" => "ка",
    # 1 буква
    "б" => "а", "в" => "а", "г" => "а", "д" => "а", "ж" => "а", "з" => "а",
    "й" => "я", "к" => "а", "л" => "а", "м" => "а", "н" => "а", "п" => "а",
    "р" => "а", "с" => "а", "т" => "а", "ф" => "а", "х" => "а", "ц" => "а",
    "ч" => "а", "ш" => "а", "щ" => "а", "я" => "ю"}
  elsif p == "D"
    local = {
    # 2 буквы. Последняя А
    # Последняя А
    "ба" => "е", "ва" => "е", "га" => "е", "да" => "е", "жа" => "е", 
    "за" => "е", "ка" => "е", "ла" => "е", "ма" => "е", "на" => "е",
    "па" => "е", "ра" => "е", "са" => "е", "та" => "е", "фа" => "е",
    "ха" => "е", "ца" => "е", "ча" => "е", "ша" => "е", "ща" => "е",
    # ёк, ок
    "ёк" => "ьку", "ок" => "ку",
    # 1 буква
    "б" => "у", "в" => "у", "г" => "у", "д" => "у", "ж" => "у", "з" => "у",
    "й" => "ю", "к" => "у", "л" => "у", "м" => "у", "н" => "у", "п" => "у",
    "р" => "у", "с" => "у", "т" => "у", "ф" => "у", "х" => "у", "ц" => "у",
    "ч" => "у", "ш" => "у", "щ" => "у", "я" => "е"}
  elsif p == "R"
    local = {
    # 2 буквы. Последняя А
    # Последняя А
    "ба" => "ы", "ва" => "ы", "га" => "и", "да" => "ы", "жа" => "и", 
    "за" => "ы", "ка" => "и", "ла" => "ы", "ма" => "ы", "на" => "ы",
    "па" => "ы", "ра" => "ы", "са" => "ы", "та" => "ы", "фа" => "ы",
    "ха" => "и", "ца" => "ы", "ча" => "и", "ша" => "и", "ща" => "и",
    # ёк, ок
    "ёк" => "ька", "ок" => "ка",
    # 1 буква
    "б" => "а", "в" => "а", "г" => "а", "д" => "а", "ж" => "а", "з" => "а",
    "й" => "я", "к" => "а", "л" => "а", "м" => "а", "н" => "а", "п" => "а", 
    "р" => "а", "с" => "а", "т" => "а", "ф" => "а", "х" => "а", "ц" => "а",
    "ч" => "а", "ш" => "а", "щ" => "а", "я" => "и"}
  elsif p == "T"
    local = {
    # 2 буквы. Последняя А
    # Последняя А
    "ба" => "ой", "ва" => "ой", "га" => "ой", "да" => "ой", "жа" => "ей", 
    "за" => "ой", "ка" => "ой", "ла" => "ой", "ма" => "ой", "на" => "ой",
    "па" => "ой", "ра" => "ой", "са" => "ой", "та" => "ой", "фа" => "ой",
    "ха" => "ой", "ца" => "ей", "ча" => "ей", "ша" => "ей", "ща" => "ей",
    # ёк, ок
    "ёк" => "ьком", "ок" => "ком",
    # 1 буква
    "б" => "ом", "в" => "ом", "г" => "ом", "д" => "ом", "ж" => "ом", "з" => "ом",
    "й" => "ем", "к" => "ом", "л" => "ом", "м" => "ом", "н" => "ом", "п" => "ом",
    "р" => "ом", "с" => "ом", "т" => "ом", "ф" => "ом", "х" => "ом", "ц" => "ем",
    "ч" => "ом", "ш" => "ом", "щ" => "ом", "я" => "ей"}
  elsif p == "P"
    local = {
    # 2 буквы. Последняя А
    # Последняя А
    "ба" => "е", "ва" => "е", "га" => "е", "да" => "е", "жа" => "е", 
    "за" => "е", "ка" => "е", "ла" => "е", "ма" => "е", "на" => "е",
    "па" => "е", "ра" => "е", "са" => "е", "та" => "е", "фа" => "е",
    "ха" => "е", "ца" => "е", "ча" => "е", "ша" => "е", "ща" => "е",
    # ёк, ок
    "ёк" => "ьке", "ок" => "ке",
    # 1 буква
    "б" => "е", "в" => "е", "г" => "е", "д" => "е", "ж" => "е", "з" => "е",
    "й" => "е", "к" => "е", "л" => "е", "м" => "е", "н" => "е", "п" => "е",
    "р" => "е", "с" => "е", "т" => "е", "ф" => "е", "х" => "е", "ц" => "е",
    "ч" => "е", "ш" => "е", "щ" => "е", "я" => "е"}
  else
    return actor
  end
 
  if ((local.include?(actor.slice(actor.length-2,2)) == false) &&
    (local.include?(actor.slice(actor.length-1,1)) == false))
    return actor
  end
  if (actor.slice(actor.length-2,2) == "ок" ||
    actor.slice(actor.length-2,2) == "ёк" )
    return actor.slice(0,actor.length-2) + local[actor.slice(actor.length-2,2)]
  elsif (actor.slice(actor.length-1,1) == "й" ||
    actor.slice(actor.length-1,1) == "я")
    return actor.slice(0,actor.length-1) + local[actor.slice(actor.length-1,1)]
  elsif (actor.slice(actor.length-1,1) != "а" &&
    actor.slice(actor.length-1,1) != "о" &&
    actor.slice(actor.length-1,1) != "ь" &&
    actor.slice(actor.length-1,1) != "ъ" &&
    actor.slice(actor.length-1,1) != "э" &&
    actor.slice(actor.length-1,1) != "ю" &&
    actor.slice(actor.length-1,1) != "ё")
    return actor + local[actor.slice(actor.length-1,1)]
  else
    return actor.slice(0,actor.length-1) + local[actor.slice(actor.length-2,2)]
  end
endВсё, скрипт готов и его можно вставить в список скриптов вашей игры. Обратите внимание. Все сообщения указанных в скрипте состояний и навыков в базе данных, будут перехватываться скриптом. Поэтому можете их там не изменять. Как это выглядит в игре: В игре так же можно просклонять персонажа по падежам, назначив склонения например на переменные или имена актёров, а потом их использовать в тексте по мере надобности: Скрипт добавления падежей. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] $game_variables[100] = pad($game_actors[1].name, "V")
$game_variables[101] = pad($game_actors[1].name, "D")
$game_variables[102] = pad($game_actors[1].name, "R")
$game_variables[103] = pad($game_actors[1].name, "T")
$game_variables[104] = pad($game_actors[1].name, "P")Дополнительно: Мой скрипт с "унисекс" (по возможности) сообщениями. (если нужно) ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #==============================================================================
# ■ Vocab
#------------------------------------------------------------------------------
#  用語とメッセージを定義するモジュールです。定数でメッセージなどを直接定義す
# るほか、グローバル変数 $data_system から用語データを取得します。
#==============================================================================
module Vocab
 
  # ショップ画面
  # Shop Screen
  ShopBuy         = "Купить"
  ShopSell        = "Продать"
  ShopCancel      = "Отмена"
  Possession      = "В наличии"
 
  # Status Screen
  ExpTotal        = "Опыт"
  ExpNext         = "До повышения "
 
  # Save/Load Screen
  SaveMessage     = "Куда сохранить?"
  LoadMessage     = "Что загрузить?"
  File            = "Сохранение"
 
  # Display when there are multiple members
  PartyName       = "Группа %s"
 
  # Basic Battle Messages
  Emerge          = "%s вступает в бой!"
  Preemptive      = "%s наносит первый удар!"
  Surprise        = ""
  EscapeStart     = "%s пытается убежать!"
  EscapeFailure   = "Но побег не удался!"
 
  # Battle Ending Messages
  Victory         = "%s побеждает!"
  Defeat          = "%s терпит поражение."
  ObtainExp       = "Получено %s оч. опыта!"
  ObtainGold      = "Получено %s\\G!"
  ObtainItem      = "Получено %s!"
  LevelUp         = "%s получает новый %s %s!"
  ObtainSkill     = "Изучено: %s!"
 
  # Use Item
  UseItem         = "%s использует %s!"
 
  # Critical Hit
  CriticalToEnemy = "Критический урон!!!"
  CriticalToActor = "Критический урон!!!"
 
  # Results for Actions on Actors
  ActorDamage     = "%s получает %s оч. урона!"
  ActorRecovery   = "%s восстанавливает %s %s!"
  ActorGain       = "%s получает %s оч. %s!"
  ActorLoss       = "%s теряет %s оч. %s!"
  ActorDrain      = "%s поглощает %s оч. %s!"
  ActorNoDamage   = "%s не получает урона!"
  ActorNoHit      = "Промах! %s не получает урона!"
 
  # Results for Actions on Enemies
  EnemyDamage     = "%s получает %s оч. урона!"
  EnemyRecovery   = "%s восстанавливает %s %s!"
  EnemyGain       = "%s повышает %s %s!"
  EnemyLoss       = "%s теряет %s %s!"
  EnemyDrain      = "%s поглощает %s %s!"
  EnemyNoDamage   = "%s не получает урона!"
  EnemyNoHit      = "Мимо! %s не получает урона!"
 
  # Evasion/Reflection
  Evasion         = "%s уклоняется от атаки!"
  MagicEvasion    = "%s нейтрализует магию!"
  MagicReflection = "%s отражает магию!"
  CounterAttack   = "%s контратакует!"
  Substitute      = "%s защищает %s!"
 
  # Buff/Debuff
  BuffAdd         = "%s: повышение %s!"
  DebuffAdd       = "%s: понижение %s!"
  BuffRemove      = "%s: %s возвращается в норму."
 
  # Skill or Item Had No Effect
  ActionFailure   = "%s не ощущает никакого эффекта!"
 
  # Error Message
  PlayerPosError  = "Не установлена стартовая точка игрока."
  EventOverflow   = "Количество вызванных общих событий превысило лимит."
 
  # 基本ステータス
  def self.basic(basic_id)
    $data_system.terms.basic[basic_id]
  end
 
  # 能力値
  def self.param(param_id)
    $data_system.terms.params[param_id]
  end
 
  # 装備タイプ
  def self.etype(etype_id)
    $data_system.terms.etypes[etype_id]
  end
 
  # コマンド
  def self.command(command_id)
    $data_system.terms.commands[command_id]
  end
 
  # 通貨単位
  def self.currency_unit
    $data_system.currency_unit
  end
 
  #--------------------------------------------------------------------------
  def self.level;       basic(0);     end   # レベル
  def self.level_a;     basic(1);     end   # レベル (短)
  def self.hp;          basic(2);     end   # HP
  def self.hp_a;        basic(3);     end   # HP (短)
  def self.mp;          basic(4);     end   # MP
  def self.mp_a;        basic(5);     end   # MP (短)
  def self.tp;          basic(6);     end   # TP
  def self.tp_a;        basic(7);     end   # TP (短)
  def self.fight;       command(0);   end   # 戦う
  def self.escape;      command(1);   end   # 逃げる
  def self.attack;      command(2);   end   # 攻撃
  def self.guard;       command(3);   end   # 防御
  def self.item;        command(4);   end   # アイテム
  def self.skill;       command(5);   end   # スキル
  def self.equip;       command(6);   end   # 装備
  def self.status;      command(7);   end   # ステータス
  def self.formation;   command(8);   end   # 並び替え
  def self.save;        command(9);   end   # セーブ
  def self.game_end;    command(10);  end   # ゲーム終了
  def self.weapon;      command(12);  end   # 武器
  def self.armor;       command(13);  end   # 防具
  def self.key_item;    command(14);  end   # 大事なもの
  def self.equip2;      command(15);  end   # 装備変更
  def self.optimize;    command(16);  end   # 最強装備
  def self.clear;       command(17);  end   # 全て外す
  def self.new_game;    command(18);  end   # ニューゲーム
  def self.continue;    command(19);  end   # コンティニュー
  def self.shutdown;    command(20);  end   # シャットダウン
  def self.to_title;    command(21);  end   # タイトルへ
  def self.cancel;      command(22);  end   # やめる
  #--------------------------------------------------------------------------
end | 
| 
		
		Последнее редактирование: 1 год 7 мес. назад от  rsv2.			
		 
			Администратор запретил публиковать записи гостям.																								 
За этот пост поблагодарили: ajir  | 
	Время создания страницы: 0.662 секунд


 
		




