ГлавнаяФорумRPG MakerСкрипты/ПлагиныRPG Maker VX ACEИзменённые системы сообщенийСкрипт склонения системных сообщений
Войти на сайт
×
ТЕМА: Скрипт склонения системных сообщений
Скрипт склонения системных сообщений 11 мес. 1 нед. назад #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 |
Последнее редактирование: 8 мес. 2 нед. назад от rsv2.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: ajir
|
Модераторы: NeKotZima
Время создания страницы: 0.662 секунд