Альбедо
Для переводчиков - вытаскиваем текст из игры - Версия для печати

+- Альбедо (https://albedo.pw)
+-- Форум: Разработка, модификация и перевод игр (https://albedo.pw/forum-51.html)
+--- Форум: Гильдия переводчиков (https://albedo.pw/forum-131.html)
+--- Тема: Для переводчиков - вытаскиваем текст из игры (/thread-1080.html)



Для переводчиков - вытаскиваем текст из игры - dab92885 - 01.02.2016

Здравствуйте! Хотел рассказать вам как упростить перевод игры на платформе RPG MAKER, в частности об инструментарии. Для RPG MAKER есть скрипты позволяющие выполнить экспорт всего текста в отдельные файлы, а затем импорт. То есть мы при переводе будем работать не с редактором игры, а с обычным текстом, что дает нам возможность использовать программы для перевода и т.д., а так же последовательно обновлять перевод и распространять его в виде файлов текста, а не всей игры. Проверял я это все на RPG MAKER VX Ace, а в качестве подопытного выбрана Urban xLife, о работоспособности на других версиях RPG MAKER ничего не могу сказать, не проверял.
Итак, по порядку:
1 - Распаковка ресурсов
1.1 - Так как ресурсы большинства игр на RPG MAKER мы получаем в зашифрованном виде - файл " Game.rgss3a ", то нам нужна программа дешифратор " rgssad - rgss2a - rgss3a decrypter "!
1.2 - Копируем дешифратор в паку с игрой и запускаем.
1.3 - В окне программы нажимаем File -> Open File и открываем файл Game, затем нажимаем Tools -> Extract All Files, после распаковки нажимаем Generate Game.rvproj2,  закрываем дешифратор. В папке с игрой у нас появилась папка "Extract" содержащая папки: "Data" и "Graphics" и файл проекта RPG MAKER VX Ace - "Game.rvproj2".
1.4 - Папки "Data" и "Graphics" переносим в корневую папку игры, после папку "Extract" можно удалить, так же нужно удалить файл зашифрованных ресурсов "Game.rgss3a". В итоге мы должны получить такую структуру файлов и папок -
1.5 - Запускаем игру для проверки, все должно работать.
2 - Вставка скриптов
2.1 - Нам потребуется средство разработки RPG MAKER VX Ace, запускаем, выбираем Файл -> Открыть проект... и открываем наш проект "Game.rvproj2".
2.2 - Далее в меню выбираем Инструменты -> Редактор скриптов...
Теперь нам нужно вставить скрипты для вытаскивания текста (за скрипты отдельное спасибо товарищам: DeadElf79 и caveman). По разным рекомендациям скрипты нужно вставлять либо в начале, либо в конце всех скриптов. У меня в Urban xLife заработало только когда я вставил в секцию "▼ MENUS ▼", поехали...
2.3 - Идем в секцию "▼ MENUS ▼", нажимаем правой кнопкой на пустом месте в конце секции и добавляем 3 пустые строки  кнопкой "Добавить".
2.3 - Теперь добавляем скрипты в следующем порядке: Dial_Export, Dials module и Dial_Import. Становимся на пустую сроку в секции "▼ MENUS ▼", внизу есть поле для ввода названия скрипта, затем справа вставляем сам код скрипта!
Dial_Export
Код:
#===============================================================================
=begin
DIAL_EXPORT
Экспортер
Этот скрипт извлекает все сообщения и слова БД из проекта и записывает
в файл dials_<язык>.txt или же в несколько файлов
Авторы: DeadElf79, caveman
Версия: 1.07
История версий:
1.08 - добавлен экспорт закладки Terms
1.07 - изменен формат экспорта;
- добавлен экспорт для Общих событий (Common Events);
- добавлен экспорт базы данных;
- опционально: экспорт каждой карты в отдельный файл;
- опционально: экспорт базы данных в отдельный файл;
- опционально: экспорт общих событий в отдельный файл;
- добавлен модуль настроек Dials.
1.06 - оригинальный скрипт, вывод имени карты и сообщений построчно.
Ограничения:
- На одном из проектов не нашлось записи Vocab::surprise, что привело к
падению, решил добавлением в Vocab этой строки
=end
#===============================================================================
class Dial_Extract
attr_accessor :done
attr_accessor :error
def initialize
DataManager.init
$dials=Dials.new if $dials==nil

@file=File.open("dials_#{$dials.do_language}.txt","w")
if $dials.do_save_db
if $dials.do_db_is_file==false
export_database
else
@file.close
@file=File.open("dials_#{$dials.do_language}_DATABASE.txt","w")
export_database
@file.close
@file=File.open("dials_#{$dials.do_language}.txt","w")
end
end
if $dials.do_save_common
if $dials.do_common_is_file==false
export_common_events
else
@file.close
@file=File.open("dials_#{$dials.do_language}_COMMONEVENTS.txt","w")
export_common_events
@file.close
@file=File.open("dials_#{$dials.do_language}.txt","w")
end
end

if $dials.do_map_is_file!=false
@file.close
File.delete("dials_#{$dials.do_language}.txt")
end
for map in 1..$max_maps
if FileTest.exist?(sprintf("Data/Map%03d.rvdata2",map))
if $dials.do_map_is_file==false
export_map(map)
else
@file.close if @file.closed?!=true
$counter=0
@file=File.open(sprintf("dials_#{$dials.do_language}_Map%03d_"+
"#{$data_mapinfos[map].name}.txt",map),"w")
export_map(map)
@file.close
end
else
next
end
end
@file.close if @file.closed?!=true
@done=true
end

def export_database
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("||||||||||||||DATABASE||||||||||||||" + "\n")
else
@file.write("||||||||||||||База данных||||||||||||||" + "\n")
end
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("=================== ACTORS ===================" + "\n")
else
@file.write("=================== ГЕРОИ ===================" + "\n")
end
end
if $data_actors.size>2
for i in 1...$data_actors.size
text = i.to_s + ":" + $data_actors[i].name
@file.write(text + "\n")
end
else
if $data_actors[1].name.size>1
text = 1.to_s + ":" + $data_actors[1].name
@file.write(text + "\n")
else
@file.write("Ни одного героя не было создано" + "\n")
end
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("=================== CLASSES ===================" + "\n")
else
@file.write("=================== КЛАССЫ ===================" + "\n")
end
end
if $data_classes.size>2
for i in 1...$data_classes.size
text = i.to_s + ":" + $data_classes[i].name
@file.write(text + "\n")
end
else
if $data_classes[1].name.size>1
text = 1.to_s + ":" + $data_classes[1].name
@file.write(text + "\n")
else
@file.write("Ни одного класса не было создано" + "\n")
end
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("=================== SKILLS ===================" + "\n")
else
@file.write("=================== НАВЫКИ ===================" + "\n")
end
end
for i in 1...$data_skills.size
text = i.to_s + ":" + $data_skills[i].name
@file.write(text + "\n")
@file.write($data_skills[i].description + "\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("=================== ITEMS ===================" + "\n")
else
@file.write("=================== ПРЕДМЕТЫ ===================" + "\n")
end
end
for i in 1...$data_items.size
text = i.to_s + ":" + $data_items[i].name
@file.write(text + "\n")
@file.write($data_items[i].description + "\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
file.write("=================== WEAPONS ===================" + "\n")
else
@file.write("=================== ОРУЖИЕ ===================" + "\n")
end
end
for i in 1...$data_weapons.size
text = i.to_s + ":" + $data_weapons[i].name
@file.write(text + "\n")
@file.write($data_weapons[i].description + "\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("=================== ARMORS ===================" + "\n")
else
@file.write("=================== БРОНЯ ===================" + "\n")
end
end
for i in 1...$data_armors.size
text = i.to_s + ":" + $data_armors[i].name
@file.write(text + "\n")
@file.write($data_armors[i].description + "\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("=================== ENEMIES ===================" + "\n")
else
@file.write("=================== ПРОТИВНИКИ ===================" + "\n")
end
end
for i in 1...$data_enemies.size
text = i.to_s + ":" + $data_enemies[i].name
@file.write(text + "\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("=================== TROOPS ===================" + "\n")
else
@file.write("=================== ГРУППЫ ВРАГОВ ===================" + "\n")
end
end
for i in 1...$data_troops.size
text = i.to_s + ":" + $data_troops[i].name
@file.write(text + "\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("=================== STATES ===================" + "\n")
else
@file.write("=================== СТАТУСЫ ===================" + "\n")
end
end
for i in 1...$data_states.size
text = i.to_s + ":" + $data_states[i].name
@file.write(text + "\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("=================== ANIMATIONS ===================" + "\n")
else
@file.write("=================== ИМЕНА АНИМАЦИЙ ===================" + "\n")
end
end
for i in 1...$data_animations.size
text = i.to_s + ":" + $data_animations[i].name
@file.write(text + "\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("=================== TILESETS ===================" + "\n")
else
@file.write("=================== ТАЙЛСЕТЫ ===================" + "\n")
end
end
for i in 1...$data_tilesets.size
text = i.to_s + ":" + $data_tilesets[i].name
@file.write(text + "\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("=================== SYSTEM ===================" + "\n")
else
@file.write("=================== СИСТЕМНЫЕ СТРОКИ ===================\n")
end
end
@file.write("ShopBuy:#{Vocab::ShopBuy}\n")
@file.write("ShopSell:#{Vocab::ShopSell}\n")
@file.write("ShopCancel:#{Vocab::ShopCancel}\n")
@file.write("Possession:#{Vocab::Possession}\n")
@file.write("ExpTotal:#{Vocab::ExpTotal}\n")
@file.write("ExpNext:#{Vocab::ExpNext}\n")
@file.write("SaveMessage:#{Vocab::SaveMessage}\n")
@file.write("LoadMessage:#{Vocab::LoadMessage}\n")
@file.write("File:#{Vocab::File}\n")
@file.write("PartyName:#{Vocab::PartyName}\n")
@file.write("Emerge:#{Vocab::Emerge}\n")
@file.write("Preemptive:#{Vocab::Preemptive}\n")
@file.write("Surprise:#{Vocab::Surprise}\n")
@file.write("EscapeStart:#{Vocab::EscapeStart}\n")
@file.write("EscapeFailure:#{Vocab::EscapeFailure}\n")
@file.write("Victory:#{Vocab::Victory}\n")
@file.write("Defeat:#{Vocab::Defeat}\n")
@file.write("ObtainExp:#{Vocab::ObtainExp}\n")
@file.write("ObtainGold:#{Vocab::ObtainGold}\n")
@file.write("ObtainItem:#{Vocab::ObtainItem}\n")
@file.write("LevelUp:#{Vocab::LevelUp}\n")
@file.write("ObtainSkill:#{Vocab::ObtainSkill}\n")
@file.write("UseItem:#{Vocab::UseItem}\n")
@file.write("CrticalToEnemy:#{Vocab::CriticalToEnemy}\n")
@file.write("CriticalToActor:#{Vocab::CriticalToActor}\n")
@file.write("ActorDamage:#{Vocab::ActorDamage}\n")
@file.write("ActorRecovery:#{Vocab::ActorRecovery}\n")
@file.write("ActorGain:#{Vocab::ActorGain}\n")
@file.write("ActorLoss:#{Vocab::ActorLoss}\n")
@file.write("ActorDrain:#{Vocab::ActorDrain}\n")
@file.write("ActorNoDamage:#{Vocab::ActorNoDamage}\n")
@file.write("ActorNoHit:#{Vocab::ActorNoHit}\n")
@file.write("EnemyDamage:#{Vocab::EnemyDamage}\n")
@file.write("EnemyRecovery:#{Vocab::EnemyRecovery}\n")
@file.write("EnemyGain:#{Vocab::EnemyGain}\n")
@file.write("EnemyLoss:#{Vocab::EnemyLoss}\n")
@file.write("EnemyDrain:#{Vocab::EnemyDrain}\n")
@file.write("EnemyNoDamage:#{Vocab::EnemyNoDamage}\n")
@file.write("EnomyNoHit:#{Vocab::EnemyNoHit}\n")
@file.write("Evasion:#{Vocab::Evasion}\n")
@file.write("MagicEvasion:#{Vocab::MagicEvasion}\n")
@file.write("MagicReflection:#{Vocab::MagicReflection}\n")
@file.write("CounterAttack:#{Vocab::CounterAttack}\n")
@file.write("Substitute:#{Vocab::Substitute}\n")
@file.write("BuffAdd:#{Vocab::BuffAdd}\n")
@file.write("DebuffAdd:#{Vocab::DebuffAdd}\n")
@file.write("BuffRemove:#{Vocab::BuffRemove}\n")
@file.write("ActionFailure:#{Vocab::ActionFailure}\n")
@file.write("PlayerPosError:#{Vocab::PlayerPosError}\n")
@file.write("EventOverflow:#{Vocab::EventOverflow}\n")

if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("=================== TERMINS ===================" + "\n")
else
@file.write("=================== ТЕРМИНЫ ===================" + "\n")
end
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("ELEMENTS:" + "\n")
else
@file.write("ЭЛЕМЕНТЫ:" + "\n")
end
end
for i in 1...$data_system.elements.size
@file.write("#{i.to_s}:#{$data_system.elements[i]}\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("SKILL TYPES:" + "\n")
else
@file.write("ТИПЫ СКИЛЛОВ:" + "\n")
end
end
for i in 1...$data_system.skill_types.size
@file.write("#{i.to_s}:#{$data_system.skill_types[i]}\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("WEAPON TYPES:" + "\n")
else
@file.write("ТИПЫ ОРУЖИЯ:" + "\n")
end
end
for i in 1...$data_system.weapon_types.size
@file.write("#{i.to_s}:#{$data_system.weapon_types[i]}\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("ARMOR TYPES:" + "\n")
else
@file.write("ТИПЫ БРОНИ:" + "\n")
end
end
for i in 1...$data_system.armor_types.size
@file.write("#{i.to_s}:#{$data_system.armor_types[i]}\n")
end
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("TERMS:" + "\n")
else
@file.write("ТЕРМИНЫ:" + "\n")
end
end
# basic
@file.write("Level:#{$data_system.terms.basic[0]}\n")
@file.write("Level (short):#{$data_system.terms.basic[1]}\n")
@file.write("HP:#{$data_system.terms.basic[2]}\n")
@file.write("HP (short):#{$data_system.terms.basic[3]}\n")
@file.write("MP:#{$data_system.terms.basic[4]}\n")
@file.write("MP (short):#{$data_system.terms.basic[5]}\n")
@file.write("TP:#{$data_system.terms.basic[6]}\n")
@file.write("TP (short):#{$data_system.terms.basic[7]}\n")
# params
@file.write("MHP:#{$data_system.terms.params[0]}\n")
@file.write("MMP:#{$data_system.terms.params[1]}\n")
@file.write("ATK:#{$data_system.terms.params[2]}\n")
@file.write("DEF:#{$data_system.terms.params[3]}\n")
@file.write("MAT:#{$data_system.terms.params[4]}\n")
@file.write("MDF:#{$data_system.terms.params[5]}\n")
@file.write("AGI:#{$data_system.terms.params[6]}\n")
@file.write("LUK:#{$data_system.terms.params[7]}\n")
# etypes
@file.write("Weapon:#{$data_system.terms.etypes[0]}\n")
@file.write("Shield:#{$data_system.terms.etypes[1]}\n")
@file.write("Head:#{$data_system.terms.etypes[2]}\n")
@file.write("Body:#{$data_system.terms.etypes[3]}\n")
@file.write("Accessory:#{$data_system.terms.etypes[4]}\n")
# commands
@file.write("Fight:#{$data_system.terms.commands[0]}\n")
@file.write("Escape:#{$data_system.terms.commands[1]}\n")
@file.write("Attack:#{$data_system.terms.commands[2]}\n")
@file.write("Defend:#{$data_system.terms.commands[3]}\n")
@file.write("Item:#{$data_system.terms.commands[4]}\n")
@file.write("Skill:#{$data_system.terms.commands[5]}\n")
@file.write("Equip:#{$data_system.terms.commands[6]}\n")
@file.write("Status:#{$data_system.terms.commands[7]}\n")
@file.write("Sort:#{$data_system.terms.commands[8]}\n")
@file.write("Save:#{$data_system.terms.commands[9]}\n")
@file.write("Exit Game:#{$data_system.terms.commands[10]}\n")
@file.write("(not used):#{$data_system.terms.commands[11]}\n")
@file.write("Weapon:#{$data_system.terms.commands[12]}\n")
@file.write("Armor:#{$data_system.terms.commands[13]}\n")
@file.write("Key Item:#{$data_system.terms.commands[14]}\n")
@file.write("Change Equipment:#{$data_system.terms.commands[15]}\n")
@file.write("Ultimate Equipment:#{$data_system.terms.commands[16]}\n")
@file.write("Remove All:#{$data_system.terms.commands[17]}\n")
@file.write("New Game:#{$data_system.terms.commands[18]}\n")
@file.write("Continue:#{$data_system.terms.commands[19]}\n")
@file.write("Shut Down:#{$data_system.terms.commands[20]}\n")
@file.write("Go to Title:#{$data_system.terms.commands[21]}\n")
@file.write("Cancel:#{$data_system.terms.commands[22]}\n")

@file.write("\n\n")
end

def export_common_events
if $dials.do_comments
if $dials.do_comments_lang==false
@file.write("||||||||||||||COMMON EVENTS||||||||||||||" + "\n")
else
@file.write("||||||||||||||ОБЩИЕ СОБЫТИЯ||||||||||||||" + "\n")
end
end
for i in 1...$data_common_events.size
if $dials.do_comments_lang==false
ev_text = "common_event_id:" + i.to_s
else
ev_text = "Номер:" + i.to_s
end
@file.write(ev_text + "\n")

if $dials.do_comments_lang==false
ev_text = "common_event_name:" + $data_common_events[i].name
else
ev_text = "Название:" + $data_common_events[i].name
end
@file.write(ev_text + "\n")

list = $data_common_events[i].list
if list != nil
for command in list
str4=""
case command.code
when 101
wait_flag = true
$counter+=1
@file.write((sprintf("%07d",$counter))+":")
@file.write("#{command.parameters[0]}"+"\n")
when 401 #message
if wait_flag
@file.write("#{command.parameters[0]}"+"\n")
end
when 102 #choices
wait_flag = false
$counter+=1
@file.write((sprintf("%07d",$counter))+":")
if $dials.do_comments_lang==false
@file.write("CHOICE:"+"\n")
else
@file.write("Варианты выбора:\n")
end
for j in 0...command.parameters[0].size
@file.write("#{command.parameters[0][j]}"+"\n")
end
else
wait_flag = false
end
end
end
end

@file.write("\n\n")
end

#=============================================================================
#=============================================================================
#========================САМОЕ ГЛАВНОЕ В ЭТОМ СКРИПТЕ!========================
#=============================================================================
#=============================================================================
def export_map(map_id)
if $dials.do_comments_lang==false
@file.write(sprintf("||||||||||||||MAP %03d||||||||||||||",map_id) + "\n")
else
@file.write(sprintf("||||||||||||||КАРТА %03d||||||||||||||",map_id) + "\n")
end
if $dials.do_comments_lang==false
str4="[map name in editor=\"#{$data_mapinfos[map_id].name}\"]"
#str4="[map name in game=\"#{$data_maps[map_id].name}\"]"
else
str4="[имя карты в редакторе=\"#{$data_mapinfos[map_id].name}\"]"
#str4="[имя карты в игре=\"#{$data_mapinfos[map_id].display_name}\"]"
end
@file.write((sprintf("%07d",$counter))+":#{str4}\n")

$game_map = Game_Map.new
$game_map.setup(map_id)
events=$game_map.events

wait_flag = true

for i in 1..9999
if events[i]!=nil
if $dials.do_comments_lang==false
ev_text = "event_id:" + i.to_s
else
#name="smthng"
ev_text = "Событие №:" + i.to_s# + ":"+name#events[i].name
end
@file.write(ev_text + "\n")

for page in events[i].g_event.pages
unless page.list.nil?
for command in page.list
str4=""
case command.code
when 101
wait_flag = true
$counter+=1
@file.write((sprintf("%07d",$counter))+":")
@file.write("#{command.parameters[0]}"+"\n")
when 401 #message
if wait_flag
@file.write("#{command.parameters[0]}"+"\n")
end
when 102 #choices
wait_flag = false
$counter+=1
@file.write((sprintf("%07d",$counter))+":")
if $dials.do_comments_lang==false
@file.write("CHOICE:"+"\n")
else
@file.write("Варианты выбора:\n")
end
for j in 0...command.parameters[0].size
@file.write("#{command.parameters[0][j]}"+"\n")
end
else
wait_flag = false
end
end
end
end
end
end
@file.write("\n\n")
end
end
Dial_Import
Код:
#===============================================================================
=begin
DIAL_IMPORT
Импортер
Этот скрипт анализирует файлы экспорта и ипмортирует их,
заменяя текст сообщений и БД проекта на содержимое файлов.
Автор: DeadElf79, caveman
Версия: 1.02 Импорт БД, общих событий и карт
Ограничения:
- Импорт многострочных описаний в БД пока без переноса
- Нет импорта названий тайлсетов (да и не стоит)
- Нет импорта Vocab
=end
#===============================================================================

class Dial_Import
attr_accessor :done
attr_accessor :error

def initialize
DataManager.init
$dials=Dials.new if $dials==nil
@lines = []
@lines_db = []
@lines_common = []
@lines_map = []
@line_all = 0

if !FileTest.exist?("dials_#{$dials.do_language}.txt")
p "Файл с общими данными не найден"
@error = true
return
end

@file=File.open("dials_#{$dials.do_language}.txt","r")
@lines = @file.readlines
@file.close

if $dials.do_load_db
if !$dials.do_db_is_file
import_database
else
if !FileTest.exist?("dials_#{$dials.do_language}_DATABASE.txt")
p "Файл _DATABASE не найден"
@error = true
return
end
@file=File.open("dials_#{$dials.do_language}_DATABASE.txt","r")
@lines_db = @file.readlines
@file.close

import_database
end
end

if $dials.do_load_common
if !$dials.do_common_is_file
import_common_events
else
@file.close if @file.closed?!=true
if !FileTest.exist?("dials_#{$dials.do_language}_COMMONEVENTS.txt")
p "Файл _COMMONEVENTS не найден"
@error = true
return
end
@file=File.open("dials_#{$dials.do_language}_COMMONEVENTS.txt","r")
@lines_common = @file.readlines
@file.close

import_common_events
end
save_data($data_common_events, "Data/CommonEvents.rvdata2")
end

for map in 1..$max_maps
if FileTest.exist?(sprintf("Data/Map%03d.rvdata2",map))
if !$dials.do_map_is_file
import_map(map)
else
@file.close if @file.closed?!=true
if !FileTest.exist?(sprintf("dials_#{$dials.do_language}_Map%03d_"+
"#{$data_mapinfos[map].name}.txt",map))
p = "Файл карты" + map + ' не найден'
@error = true
return
end

@file=File.open(sprintf("dials_#{$dials.do_language}_Map%03d_"+
"#{$data_mapinfos[map].name}.txt",map),"r")
@lines_map = @file.readlines
@file.close

import_map(map)
end
save_data($game_map.g_map, sprintf("Data/Map%03d.rvdata2", map))
else
next
end
end
save_data($data_mapinfos, "Data/MapInfos.rvdata2")
@file.close if @file.closed?!=true
@done=true
end

def import_database
l = $dials.do_db_is_file ? 0 : @line_all
data = $dials.do_db_is_file ? @lines_db : @lines

l += 1 if $dials.do_comments #DATABASE

l += 1 if $dials.do_comments #ACTORS
for i in 1...$data_actors.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_actors[i].name = $2.to_s
end
l += 1
end

l += 1 if $dials.do_comments #CLASSES
for i in 1...$data_classes.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_classes[i].name = $2.to_s
end
l += 1
end

l += 1 if $dials.do_comments #SKILLS
for i in 1...$data_skills.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_skills[i].name = $2.to_s
end
l += 1
text = ""
while !data[l].include?(":") and !data[l].include?("==")
text += data[l] + " \n"
l += 1
end
$data_skills[i].description = text
end

l += 1 if $dials.do_comments #ITEMS
for i in 1...$data_items.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_items[i].name = $2.to_s
end
l += 1
text = ""
while !data[l].include?(":") and !data[l].include?("==")
text += data[l] + " \n"
l += 1
end
$data_items[i].description = text
end

l += 1 if $dials.do_comments #WEAPONS
for i in 1...$data_weapons.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_weapons[i].name = $2.to_s
end
l += 1
text = ""
while !data[l].include?(":") and !data[l].include?("==")
text += data[l] + " \n"
l += 1
end
$data_weapons[i].description = text
end

l += 1 if $dials.do_comments #ARMORS
for i in 1...$data_armors.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_armors[i].name = $2.to_s
end
l += 1
text = ""
while !data[l].include?(":") and !data[l].include?("==")
text += data[l] + " \n"
l += 1
end
$data_armors[i].description = text
end

l += 1 if $dials.do_comments #ENEMIES
for i in 1...$data_enemies.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_enemies[i].name = $2.to_s
end
l += 1
end

l += 1 if $dials.do_comments #TROOPS
for i in 1...$data_troops.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_troops[i].name = $2.to_s
end
l += 1
end

l += 1 if $dials.do_comments #STATES
for i in 1...$data_states.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_states[i].name = $2.to_s
end
l += 1
end

l += 1 if $dials.do_comments #ANIMATIONS
for i in 1...$data_animations.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_animations[i].name = $2.to_s
end
l += 1
end

l += 1 if $dials.do_comments #TILESETS
for i in 1...$data_tilesets.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_tilesets[i].name = $2.to_s
end
l += 1
end

l += 1 if $dials.do_comments #SYSTEM
l += 50 # словарь не импортим

l += 1 if $dials.do_comments #TERMS
l += 1 if $dials.do_comments #ELEMENTS
for i in 1...$data_system.elements.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.elements[i] = $2.to_s
end
l += 1
end
l += 1 if $dials.do_comments #SKILL TYPES
for i in 1...$data_system.skill_types.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.skill_types[i] = $2.to_s
end
l += 1
end
l += 1 if $dials.do_comments #WEAPON TYPES
for i in 1...$data_system.weapon_types.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.weapon_types[i] = $2.to_s
end
l += 1
end
l += 1 if $dials.do_comments #ARMOR TYPES
for i in 1...$data_system.armor_types.size
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.armor_types[i] = $2.to_s
end
l += 1
end

l += 1 if $dials.do_comments #TERMS
# basic
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.basic[0] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.basic[1] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.basic[2] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.basic[3] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.basic[4] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.basic[5] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.basic[6] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.basic[7] = $2.to_s
end
l += 1
# params
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.params[0] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.params[1] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.params[2] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.params[3] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.params[4] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.params[5] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.params[6] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.params[7] = $2.to_s
end
l += 1
# etypes
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.etypes[0] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.etypes[1] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.etypes[2] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.etypes[3] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.etypes[4] = $2.to_s
end
l += 1
# commands
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[0] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[1] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[2] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[3] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[4] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[5] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[6] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[7] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[8] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[9] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[10] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[11] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[12] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[13] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[14] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[15] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[16] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[17] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[18] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[19] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[20] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[21] = $2.to_s
end
l += 1
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_system.terms.commands[22] = $2.to_s
end
l += 3 # \n\n

save_data($data_actors, "Data/Actors.rvdata2")
save_data($data_classes, "Data/Classes.rvdata2")
save_data($data_skills, "Data/Skills.rvdata2")
save_data($data_items, "Data/Items.rvdata2")
save_data($data_weapons, "Data/Weapons.rvdata2")
save_data($data_armors, "Data/Armors.rvdata2")
save_data($data_enemies, "Data/Enemies.rvdata2")
save_data($data_troops, "Data/Troops.rvdata2")
save_data($data_states, "Data/States.rvdata2")
save_data($data_animations, "Data/Animations.rvdata2")
save_data($data_system, "Data/System.rvdata2")


@line_all = l if !$dials.do_db_is_file
end

def import_common_events
l = $dials.do_common_is_file ? 0 : @line_all
data = $dials.do_common_is_file ? @lines_common : @lines
l += 1 if $dials.do_comments #COMMON EVENTS
has_dials = false

choices = []
for i in 1...$data_common_events.size
l += 1 # common_event_id

# common_event_name
data[l].gsub(/\A(.+?)\:(.+?)\Z/) do
$data_common_events[i].name = $2.to_s
end
l += 1

list = $data_common_events[i].list
if list != nil
for command in list
case command.code
when 101 #message start
wait_flag = true
l += 1 # counter id
when 401 #message continue
if wait_flag
data[l].gsub(/\A(.+?)\n\Z/) do
command.parameters[0] = data[l] = $1.to_s
end
l += 1
has_dials = true
end
when 102 #choices list
wait_flag = false
p data[l]
l += 1 # counter id

for j in 0...command.parameters[0].size
data[l].gsub(/\A(.+?)\Z/) do
command.parameters[0][j] = $1.to_s
choices.push($1.to_s)
end
l += 1
end
choices.reverse! # нам нужен не стек, а очередь!
when 402 #choice
wait_flag = false
command.parameters[1] = choices.pop

else
wait_flag = false
end
end
end
end
l += 2 #\n\n
@line_all = l if !$dials.do_common_is_file
p @line_all
end

def import_map(map)
l = $dials.do_map_is_file ? 0 : @line_all
data = $dials.do_map_is_file ? @lines_map : @lines

l += 1 # == MAP map_id ==
$game_map = Game_Map.new
$game_map.setup(map)
events=$game_map.events
choices = []

p 'map: ' + data[l]
data[l].gsub(/\A(.+?)\:\[(.+?)\=\"(.+?)\"]\Z/) do
$data_mapinfos[map].name = $3.to_s
end
l += 1

wait_flag = false

for i in 1..9999
if events[i]!=nil
l += 1 # event_id

for page in events[i].g_event.pages
unless page.list.nil?
for command in page.list
case command.code
when 101 #message start
wait_flag = true
l += 1 # counter id
when 401 #message continue
if wait_flag
data[l].gsub(/\A(.+?)\n\Z/) do
command.parameters[0] = data[l] = $1.to_s
end
l += 1
end
when 102 #choices list
wait_flag = false
p data[l]
l += 1 # counter id

for j in 0...command.parameters[0].size
data[l].gsub(/\A(.+?)\Z/) do
command.parameters[0][j] = $1.to_s
choices.push($1.to_s)
end
l += 1
end
choices.reverse! # нам нужен не стек, а очередь!
when 402 #choice
wait_flag = false
command.parameters[1] = choices.pop

else
wait_flag = false
end
end
end
end
end
end
l += 2 #\n\n
@line_all = l if !$dials.do_map_is_file
end
end
Dials module
Код:
#===============================================================================
=begin
DIALS module
Экстрактор диалогов, часть третья
Этот скрипт необходим для настройки работы экспорта и импорта.
Автор: DeadElf79
Версия: 1.01 Добавлены настройки для импорта (caveman)
=end
#===============================================================================
class Dials
def initialize
#==========МЕНЯЕМ ТОЛЬКО ЗДЕСЬ==========
#возможность экспорта (true-вкл, false-выкл)
@do_export=true
#возможность импорта
@do_import=true
#включить экспорт базы данных
@do_save_db=true
#включить импорт базы данных
@do_load_db=true
#экспорт карт в отдельные файлы (сколько карт, столько и файлов)
#а также импорт из них
@do_map_is_file=false
#экспорт базы данных в отдельный файл(если do_save_db=true)
#а также импорт из него (если do_load_db=true)
@do_db_is_file=true
#экспорт данных из Общих событий
@do_save_common=true
#импорт данных из Общих событий
@do_load_common=true
#экспорт общих событий в отдельные файлы
#а также импорт из них
@do_common_is_file=false
#комментарии в файлах
@do_comments=true
#язык комментариев в файлах (true-русский, false-английский)
#только если do_comments=true
@do_comments_lang=true
#язык, на котором написаны данные в экспортируемом
#файле. необходимо для запуска в игре одного из нескольких
#по выбору.
#может быть одним из вариантов:
#rus eng deu fre jap
@do_language="rus"
#возможность экспорта/импорта прямо из титульного экрана
#если проект был запущен из редактора (то есть $DEBUG=true)
@do_title_debug=true
#==========ДАЛЬШЕ НЕ ТРОГАЕМ============
@options_button_name="Настройки"
@options_extractor_name="Экспортировать"
@options_import_name="Импортировать"
@options_cancel_name="Отмена"
end

attr_accessor :do_title_debug
attr_accessor :do_export
attr_accessor :do_import
attr_accessor :do_save_db
attr_accessor :do_load_db
attr_accessor :do_map_is_file
attr_accessor :do_db_is_file
attr_accessor :do_save_common
attr_accessor :do_load_common
attr_accessor :do_common_is_file
attr_accessor :do_comments_lang
attr_accessor :do_comments
attr_accessor :do_language
attr_reader :options_button_name
attr_reader :options_extractor_name
attr_reader :options_import_name
attr_reader :options_cancel_name
attr_reader :do_dir
end

$max_maps=999
$counter=0
class Game_Event
attr_accessor :erased
def g_event
return @event
end
end

class Game_Map
def g_map
return @map
end
end

class Window_TitleCommand
def make_command_list
add_command(Vocab::new_game, :new_game)
add_command(Vocab::continue, :continue, continue_enabled)
if $dials.do_title_debug
add_command($dials.options_button_name, :extractor)
end
add_command(Vocab::shutdown, :shutdown)
end
end

class Window_DialsCommand<Window_TitleCommand
def make_command_list
add_command($dials.options_extractor_name,:extract,$dials.do_export)
add_command($dials.options_import_name,:import,$dials.do_import)
add_command($dials.options_cancel_name,:cancel)
end
end

class Scene_Title
def start
super
SceneManager.clear
Graphics.freeze
create_background
create_foreground
$dials=Dials.new
create_command_window
create_extra_window
play_title_music
end

def create_command_window
@command_window = Window_TitleCommand.new
@command_window.set_handler(:new_game, method(:command_new_game))
@command_window.set_handler(:continue, method(:command_continue))
if $dials.do_title_debug
@command_window.set_handler(:extractor, method(:command_extractor))
end
@command_window.set_handler(:shutdown, method(:command_shutdown))
end

def create_extra_window
@extra=Window_DialsCommand.new
@extra.visible=false
@extra.x = (Graphics.width - @command_window.width) / 2+@extra.width
@extra.y = (Graphics.height * 1.6 - @command_window.height) / 2
@extra.set_handler(:extract, method(:command_extract))
@extra.set_handler(:import, method(:command_import))
@extra.set_handler(:cancel, method(:command_cancel))
end

def command_extractor
@extra.visible=true
@extra.openness=0
@extra.open
@command_window.active=false
@extra.active=true
end

def command_extract
extract=Dial_Extract.new
if extract.done then
@extra.close
msgbox "Операция успешно завершена!"
update until @extra.close?
@command_window.active=true
@extra.active=false
end
end

def command_import
extract=Dial_Import.new
if extract.done then
@extra.close
msgbox "Операция успешно завершена!"
update until @extra.close?
@command_window.active=true
@extra.active=false
end
end

def command_cancel
@extra.close
update until @extra.close?
@command_window.active=true
@extra.active=false
end
end
В итоге у нас должна получится вот такая картина -
Применяем, нажимаем "Ок" и выходим в основное окно редактора.
2.4 Сохраняем проект и запускаем, можно прям из окна редактора.
3 - Экспорт/Импорт
В главном меню игры появился пункт "Настройки", а в нём подпункты "Экспортировать" и "Импортировать".
3.1 При нажатии на "Экспортировать" в корневой папке игры появятся два файла со всем текстом игры: "dials_rus.txt" и "dials_rus_DATABASE.txt".
Вот эти файлы уже можно переводить, только сохраняйте структуру, иначе при импорте могут возникнуть проблемы!
3.1 При нажатии на "Импортировать" из файлов "dials_rus.txt" и "dials_rus_DATABASE.txt" происходит импорт текста в игру и сохранение проекта, импортировать достаточно один раз.
Ну вот вроде и все по основным моментам, если будут какие-то вопросы не стесняйтесь.
Спасибо!
p.s. Чуть позже сделаю пост по инструментарию переводчика на основе сегментации текста и "памяти переводов".


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 01.02.2016

http://www.ulmf.org/bbs/showthread.php?t=26944
и всё. для 90% игр этого достаточно...


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 01.02.2016

Gorb, хорошая и подробная инструкция, но ты знаешь про прогу RPGMakerTrans?
All Decrypter я описывал отдельной темой вот здесь:
Установка переводов с помощью ALL Decrypter
А дальнейший перевод и работа с файлами карт, вытянутых с помощью RPGMakerTrans описаны здесь:
Переводчикам игр RPGMaker


Для переводчиков - вытаскиваем текст из игры - dab92885 - 01.02.2016

b6badda7 писал(а):Gorb, хорошая и подробная инструкция, но ты знаешь про прогу RPGMakerTrans?
Век живи, век учись! Только узнал, из сообщения ntcntl. Прога проще, удобнее и она раскидывает текст по файлам, а не сливает все в один. В общем must have!


Для переводчиков - вытаскиваем текст из игры - dab92885 - 01.02.2016

Ладно, чуть позже сделаю пост про OmegaT


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 01.02.2016

dab92885 писал(а):Век живи, век учись! Только узнал, из сообщения ntcntl. Прога проще, удобнее и она раскидывает текст по файлам, а не сливает все в один. В общем must have!
Там её чувак с 2011-го года пилит и допиливает разные фишки, удобства и финтифлюшечки:
http://rpgmakertrans.bitbucket.org/
Но твой способ тоже хорош для некоторых игр, которые не берёт RPGMakerTrans. Как альтернатива.
dab92885 писал(а):Ладно, чуть позже сделаю пост про OmegaT
А вот это было бы очень интересно.
Я давно задумывался, учитывая современное развитие компов и устройств хранения инфы, не было бы логичней пилить автопереводчики не с помощью каких-то базовых скриптов и словарей, а заливать в базы данных целые предложения и словосочетания из разных источников, что в итоге давало бы весьма точный перевод, а с набором всё большего количества предложений в базе данных, точность только повышалась бы.


Для переводчиков - вытаскиваем текст из игры - dab92885 - 01.02.2016

b6badda7 писал(а):А вот это было бы очень интересно.
Я давно задумывался, учитывая современное развитие компов и устройств хранения инфы, не было бы логичней пилить автопереводчики не с помощью каких-то базовых скриптов и словарей, а заливать в базы данных целые предложения и словосочетания из разных источников, что в итоге давало бы весьма точный перевод, а с набором всё большего количества предложений в базе данных, точность только повышалась бы.
Там немного другой принцип, текст делится на сегменты и в процессе перевода каждого сегмента в "память переводов" сохраняется как ты перевел какой сегмент и сегменты со 100% совпадением переводятся автоматически, а при меньшем проценте программа предлагает варианты т.е. чем больше перевел тем проще. Так же очень удобно когда начал переводить раннюю версию игры, при выходе новых версий ты добавляешь в проект перевода с памятью новый файл и через минуту, тебе осталось перевести только новые сегменты.


Для переводчиков - вытаскиваем текст из игры - dab92885 - 01.02.2016

Так же удобно вести совместный перевод, т.к. общая "память переводов" и "глоссарий".
Вот пример окна программы где видно и совпадения и Яндексовкий машинный перевод


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 01.02.2016

dab92885 писал(а):Так же удобно вести совместный перевод, т.к. общая "память переводов" и "глоссарий".
Вот пример окна программы где видно и совпадения и Яндексовкий машинный перевод
И правда удобно.
А мы на гуглодоках переводим)


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 09.03.2016

dab92885 писал(а):Ладно, чуть позже сделаю пост про OmegaT
Попробовал упомянутую программу.
Из личных впечатлений: перевод происходит путем замены текста, так что использование с RPGMaker Trans довольно неудобно.
Так же проверил вариант со скриптами из первого сообщения: сам процесс перевода идет нормально, но когда доходит до оформления начинаю вылезать ошибки при необходимости заменить одну строку японского текста на две русского.


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 09.03.2016

ebe3a6c0 писал(а):Попробовал упомянутую программу.
Из личных впечатлений: перевод происходит путем замены текста, так что использование с RPGMaker Trans довольно неудобно.
Так же проверил вариант со скриптами из первого сообщения: сам процесс перевода идет нормально, но когда доходит до оформления начинаю вылезать ошибки при необходимости заменить одну строку японского текста на две русского.
Тот случай, когда в попытках сделать очень
удобную прогу перемудрили и создали трость для слепца с лазерным прицелом.


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 09.03.2016

Кстати скрипты при извлечении текста вполне себе извлекаю и метки, но при этом при импорте обратно в игру берет текст не по ним, а построчно. Соответственно происходит сдвиг и полная фигня.
Программа для перевода же видимо начинает становиться полезной набрав достаточный объем пользовательского перевода. Но для этого нужно именно переводить по словам/предложениям, а не ориентироваться практически на одну смысловую нагрузку эпизода.


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 09.03.2016

Кстати, ntcntl, слышал, что на ПЛе планируют создать с помощью администрации группу переводчиков?


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 09.03.2016

b6badda7 писал(а):Кстати, ntcntl, слышал, что на ПЛе планируют создать с помощью администрации группу переводчиков?
Я там даже отписался, что считаю стоящим туда набирать хотя бы со второго перевода, а то у меня к примеру за пол года после первой штуки 4 начатых, а достаточного для демонстрации результата (как с моей точки зрения) так пока и нет...


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 09.03.2016

ebe3a6c0 писал(а):Я там даже отписался, что считаю стоящим туда набирать хотя бы со второго перевода, а то у меня к примеру за пол года после первой штуки 4 начатых, а достаточного для демонстрации результата (как с моей точки зрения) так пока и нет...
Субъективная штука это количество переводов. Можно ж переводить игрушки по 2-3к блоков, а можно переводить на 150-200к блоков))))


Для переводчиков - вытаскиваем текст из игры - cc5f18c4 - 09.03.2016

4GunZ
ну это ты загнул "собираются",пока только дарк бучу поднимает smile
ntcntl
2 соло перевода - это вы батенька жестити,игры все же бывают разные по обьему,к примеру текста в опале2 раз в 20-30(а может и ещё больше), больше чем в рио4
так же ты забываешь,про групповые переводы,как было с опалой 2


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 09.03.2016

cc5f18c4 писал(а):2 соло перевода - это вы батенька жестити,игры все же бывают разные по обьему,к примеру текста в опале2 раз в 20-30(а может и ещё больше), больше чем в рио4
так же ты забываешь,про групповые переводы,как было с опалой 2
Ну за соло я и не утверждал, сложившиеся команды всё же в любом случае эффективней. Да и индивидуальный подход тоже рулит: к примеру те, кто переводит VH вполне заработали на признание вне зависимости от степени завершенности.


Для переводчиков - вытаскиваем текст из игры - cc5f18c4 - 09.03.2016

ntcntl
тогда извини,не правильно понял твою мысль


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 09.03.2016

ebe3a6c0 писал(а):Ну за соло я и не утверждал, сложившиеся команды всё же в любом случае эффективней. Да и индивидуальный подход тоже рулит: к примеру те, кто переводит VH вполне заработали на признание вне зависимости от степени завершенности.
VH щас переживает сложный период)) За месяц или два всего один процент перевели)
ИМХО, если администрация ПЛа возьмётся за дело, то уж правила приёма в эти группы они уж как-нибудь придумают. Главное, чтоб они собрались вообще.


Для переводчиков - вытаскиваем текст из игры - cc5f18c4 - 09.03.2016

4GunZ
ох,сколько же гемороя эта группа вызовет...


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 09.03.2016

cc5f18c4 писал(а):4GunZ
ох,сколько же гемороя эта группа вызовет...
Ну дак любая деятельность это гемор))


Для переводчиков - вытаскиваем текст из игры - 963c66a5 - 09.03.2016

Gorb
Один момент, строчек не добавлять не удалять нельзя, иначе всё отображаться будет в кривь и вкось)) Убежит строка
Второй момент, иногда в БД одна из строчек переносится на строку ниже какой-то подкласс оружия вроде, ну там смотреть надо)) Описывал в блоге))
Кстати работаешь с Maker'ом ?) Или так на скриптах сидишь)))))
Ничего я не поднимаю))) Пока беседую, с AllMore, а он уже оповещает их))) долгая система)))
OmegaT - не плохо)))
По поводу переводчиков было дело, но суть в том чтобы научить этому) Буду, кстати иметь тебя в виду, как переводчика))))))
ebe3a6c0 писал(а):А что по поводу группы: мое ИМХО если кого и приглашать, то при условии хотя бы двух переведенных игр ;) (а то я, например, вторую уже почти пол года не могу довести до конца, хотя начато штуки четыре, но без току...)



Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 09.03.2016

4GunZ
Кстати, я тут по листал: в разделе получаются 4 темы по автоматическому/ручному переводу. Может закрепишь отдельную тему хотя бы с ссылками на них? Что бы она висела вверху и не уезжала.



Для переводчиков - вытаскиваем текст из игры - b6badda7 - 09.03.2016

ntcntl, та даже хз. Темы-то все о разных вещах. Вторая и четвертая — это темы по конкретным программам, третья — это для простых игроков — проги для автоперевода переводчикам особо не нужны, а первая — конкретно для переводчиков.


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 09.03.2016

b6badda7 писал(а):Темы-то все о разных вещах.
Ну так я и не предлагаю что-то делать с темами, просто собрать ссылки на них в одном месте. А ту тему можно будет и закрыть, просто что бы новички быстро могли найти где обсуждается конкретный вопрос.


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 09.03.2016

ebe3a6c0 писал(а):Ну так я и не предлагаю что-то делать с темами, просто собрать ссылки на них в одном месте. А ту тему можно будет и закрыть, просто что бы новички быстро могли найти где обсуждается конкретный вопрос.
Думаешь, что раздел на какие-то 37 тем уже требует отдельной тему с навигацией по темам раздела?


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 09.03.2016

4GunZ
Ну к примеру Gorb создав эту тему про RPGMaker Trans тему видимо не видел, пока про него тут не написали... Проблема не в сложности поиска, а в том, что пока не ткнуть - никто и не пытается смотреть по сторонам :(


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 09.03.2016

ebe3a6c0 писал(а):4GunZ
Ну к примеру Gorb создав эту тему про RPGMaker Trans тему видимо не видел, пока про него тут не написали... Проблема не в сложности поиска, а в том, что пока не ткнуть - никто и не пытается смотреть по сторонам
Дык, может, банить всех, кто не пользуется поиском?))) Норм же тема получится)))


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 09.03.2016

Ну если отсеять тех, кто не знает что искать, от тех кто и не хочет пытаться - то почему бы и да? ;)


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 09.03.2016

ebe3a6c0 писал(а):Ну так я и не предлагаю что-то делать с темами, просто собрать ссылки на них в одном месте. А ту тему можно будет и закрыть, просто что бы новички быстро могли найти где обсуждается конкретный вопрос.
Я сделаль!
Быстрая навигация по разделу
ebe3a6c0 писал(а):Ну если отсеять тех, кто не знает что искать, от тех кто и не хочет пытаться - то почему бы и да?
Мечты...)))


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 09.03.2016

Хех, я нашел вариант когда скрипты удобней RPGMakerTrans'а - только что автозаменой посносил в одной игрушке теги создающие паузы при выводе текста...


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 09.03.2016

ebe3a6c0 писал(а):Хех, я нашел вариант когда скрипты удобней RPGMakerTrans'а - только что автозаменой посносил в одной игрушке теги создающие паузы при выводе текста...
Когда ты расстреливаешь людей из пулемёта, а на одном из них пулемёт ломается, то это не означает, что пулемёт хорош, только потому что из-за его поломки один человек случайно выжил)))


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 09.03.2016

Ну, для выжившего он вполне даже неплох smile
В принципе для каждого инструмента можно найти применение, главное не путаться в них ;)


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 09.03.2016

ebe3a6c0 писал(а):Ну, для выжившего он вполне даже неплох
В принципе для каждого инструмента можно найти применение, главное не путаться в них
Согласен. Ты исследуй-исследуй)) Авось потом остальных просветишь и мы ускорим скорость перевода и даже сможем полноценно переводить японские игры без знания японского))


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 10.03.2016

b6badda7 писал(а):и даже сможем полноценно переводить японские игры без знания японского))
Ну, если убрать слово "полноценно", то я этим типа и занимаюсь ;) Причем самое сложное для меня не "понять что там на японском было", а "как бы это написать по русски".
P.S. а с английского я не перевожу именно потому, что довольно фигово его знаю. в итоге текст получается не настолько качественней автоперевода, что бы имело смысл его пилить...


Для переводчиков - вытаскиваем текст из игры - cc5f18c4 - 10.03.2016

ebe3a6c0 писал(а):Ну, если убрать слово "полноценно", то я этим типа и занимаюсь  Причем самое сложное для меня не "понять что там на японском было", а "как бы это написать по русски".
золотые слова!


Для переводчиков - вытаскиваем текст из игры - 963c66a5 - 11.03.2016

Слушай, Gorb, а RPGMakerTrans умеет, каждую карту не в отдельный файл, а в один?
Просто некоторые сцены могут повторятся, а загонятся, если особенно на японском, не сильно хочется, где и когда эта сцена проскользнёт smile


Для переводчиков - вытаскиваем текст из игры - dab92885 - 11.03.2016

963c66a5 писал(а):Слушай, Gorb, а RPGMakerTrans умеет, каждую карту не в отдельный файл, а в один?
Просто некоторые сцены могут повторятся, а загонятся, если особенно на японском, не сильно хочется, где и когда эта сцена проскользнёт smile
Насколько я знаю нет, не умеет. По этому и удобен OmegaT, он каждый совпадающий сегмент переведет сразу во всех файлах!


Для переводчиков - вытаскиваем текст из игры - 963c66a5 - 11.03.2016

Gorb
Спасибо, щас "покурю" в эту сторону smile


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 11.03.2016

963c66a5 писал(а):Слушай, Gorb, а RPGMakerTrans умеет, каждую карту не в отдельный файл, а в один?
Просто некоторые сцены могут повторятся, а загонятся, если особенно на японском, не сильно хочется, где и когда эта сцена проскользнёт smile
Мне знакомый программист просто помог сгрузить все карты в таблицу экселя, чтоб каждая карта соответствовала отдельному листу и всё. Удобно переводить в несколько рук на гуглодоках.


Для переводчиков - вытаскиваем текст из игры - 963c66a5 - 11.03.2016

4GunZ
Блин, ещё с гуглодоками знакомится lol)
Спасибо приму к сведеньям))))


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 11.03.2016

963c66a5 писал(а):4GunZ
Блин, ещё с гуглодоками знакомится lol)
Спасибо приму к сведеньям))))
Если хочешь, то могу показать на примере перевода Обманки.


Для переводчиков - вытаскиваем текст из игры - 963c66a5 - 11.03.2016

4GunZ
Примеры это хорошо, только по ним и живуsmile (Практик нежели теоретик)
Так, если от меня нужно минимум действий, то я отойду (кушать хотЦа)


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 11.03.2016

963c66a5 писал(а):Просто некоторые сцены могут повторятся,
Если фраза повторяется полностью - RPGMakerTrans и так её выводит только 1 раз.



Для переводчиков - вытаскиваем текст из игры - 963c66a5 - 11.03.2016

ntcntl
Это не есть хорошо.
Простое слово, Yes. Примеры конечно есть и пострашнее, 2 из 3 строчек повторяются, но узнаешь ты об этом только позже...
В общем поаккуратнее с этим надо быть smile


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 11.03.2016

ляляля
В смысле? Не понял в чем проблема?
963c66a5 писал(а):Простое слово, Yes.
И? Если оно Используется только одно, то и значение у него по идее не меняется. Если с текстом - так оно и будет расположено с этим текстом.
963c66a5 писал(а):2 из 3 строчек повторяются, но узнаешь ты об этом только позже...
Этого вообще не понял...
RPGMakerTrans бьет текст не по строкам, а по фразам или, если это будет понятней - по экранам (хотя это тоже не верно, ибо может занимать и больше). В общем если в игре текст идет одним блоком - то и в файлах он будет в одном блоке...
Да и переводить не проверяя результат - имхо не есть айс...


Для переводчиков - вытаскиваем текст из игры - 963c66a5 - 11.03.2016

ntcntl
Бьёт блоками... Ладно смысл понял, но всё равно, что-то не нравиться, какой-то подводный камень, чую нутром smile
Ну ладно, когда дело дойдёт до какой-нибудь игрушки на RPG Maker VX, тогда узнаю, что же так не нравится smile

ebe3a6c0 писал(а):Да и переводить не проверяя результат - имхо не есть айс...
К этому надо стремиться smile
Кстати, в японском 1 символ может означать куда больше значений, чем одно smile


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 11.03.2016

963c66a5 писал(а):Кстати, в японском 1 символ может означать куда больше значений, чем одно smile
А ты переводишь сразу с японского или с английского?


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 12.03.2016

963c66a5 писал(а):Кстати, в японском 1 символ может означать куда больше значений, чем одно smile
А еще у них 3 варианта письменности, "и шо? ©" Я всё равно японского не знаю, а автопереводчикам пофиг.
Там другая сложность - разница в длине предложения на японском и русском бывает довольно существенная, именно поэтому скрипты с невозможностью переноса строки не рулят...


Для переводчиков - вытаскиваем текст из игры - 963c66a5 - 12.03.2016

4GunZ
Английских версий не так много, вон предыдущую, сразу с двух языков переводил, обплювался smile Но "скилл" японского тоже надо поднимать smile
ntcntl
А ещё они могут ошибаться в написании слов "и будет очень нехороШо ©" smile
Если конечно дословно переводить, то думаю и листа не хватит, на 10 строк smile
Скрипты может и не "рулят", но как альтернативный вариант хороши, ошибки бывают везде smile
И кстати он хорош тем, что может текст дёргать из VX smile
Слушай, а не подскажешь как избавится от
Код:
> CONTEXT: < UNTRANSLATED
> BEGIN STRING
> END STRING
Так, чтобы потом при минимальных телодвижениях, можно было засунуть текст обратно?


Для переводчиков - вытаскиваем текст из игры - ebe3a6c0 - 12.03.2016

963c66a5 писал(а):Так, чтобы потом при минимальных телодвижениях, можно было засунуть текст обратно?
"при минимальных телодвижениях" пожалуй что никак. это техническая инфа откуда взят (куда вставлять) текст.
разве что написать парсер по типу "взять текст между BEGIN STRING и CONTEXT: // вставить перевод между CONTEXT: и END STRING" но и там всё равно будут нужны метки, дабы определить что откуда...
Кстати с этой структурой и есть главное неудобство: если где-то её нарушить и не сделать бекап перед применением - можно потерять кусок перевода... :(
P.S.
963c66a5 писал(а):И кстати он хорош тем, что может текст дёргать из VX smile
и что тут такого? RPGMaker Trans пока что только с МВ не работает, это вон в пятой версии обещают. с остальными относительно нормально...
Свернутый текст
О, круглое число: 256 пост. юбилей ёпт smile



Для переводчиков - вытаскиваем текст из игры - 963c66a5 - 12.03.2016

ebe3a6c0 писал(а):если где-то её нарушить и не сделать бекап перед применением - можно потерять кусок перевода...
Знакомо smile
e2fa8f8f писал(а):RPGMaker Trans пока что только с МВ не работает, это вон в пятой версии обещают.
Что ж, будет хорошо smile
ebe3a6c0 писал(а):О, круглое число: 256 пост. юбилей ёпт
Поздравляю smile Очень хорошее число, а ещё день smile
Блин, попробовал на одной игрушке изменить пару строк, что-то не вышло.
Патч создал, в файлы для перевода залез (ну там пару строчек изменил, для проверки), ладно.
Запустил заново RPGMakerTrans, указал игру, теперь он сам определил патч и translated, нажал GO!, он финишировал, зашёл в игру, строчка не изменилась...
Что я упустил?


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 12.03.2016

963c66a5 писал(а):Знакомо smile
Что ж, будет хорошо smile
Поздравляю smile Очень хорошее число, а ещё день smile
Блин, попробовал на одной игрушке изменить пару строк, что-то не вышло.
Патч создал, в файлы для перевода залез (ну там пару строчек изменил, для проверки), ладно.
Запустил заново RPGMakerTrans, указал игру, теперь он сам определил патч и translated, нажал GO!, он финишировал, зашёл в игру, строчка не изменилась...
Что я упустил?
То же самое, что и я когда-то.
Ты внимательно прочитал мой мануал по RPGMakerTrans в этой теме
Переводчикам игр RPGMaker - программа RPGMaker Trans
?


Для переводчиков - вытаскиваем текст из игры - 963c66a5 - 12.03.2016

4GunZ
Честно - не успел ознакомится, просто спросили,  а я дверь тут красил smile Работа тонкая, чумазая, ну и не хотелось бы что либо пачкать smile
В любом случае спасибо, по картинке сразу понял где ошибку допустил ROFL


Для переводчиков - вытаскиваем текст из игры - b6badda7 - 12.03.2016

963c66a5 писал(а):4GunZ
Честно - не успел ознакомится, просто спросили,  а я дверь тут красил smile Работа тонкая, чумазая, ну и не хотелось бы что либо пачкать smile
В любом случае спасибо, по картинке сразу понял где ошибку допустил ROFL
Ага, а я часа полтора бился, пока не понял эту свою ошибку, когда впервые врубил RPGMakerTrans))


Для переводчиков - вытаскиваем текст из игры - 963c66a5 - 12.03.2016

4GunZ
Да, вроде смотришь всё понятно smile
Всё отписал, скоро ещё одна игра будет переведена на великий smile
Правда этот человек решил до переводить, в мейкере smile


RE: Для переводчиков - вытаскиваем текст из игры - 9fec0050 - 11.03.2017

Всем доброго времени суток!
Есть маленький вопрос, может не тут спрашиваю но всё же. Какой прогой можно вытащить текст для перевода игры, написанной на RPG Maker MV? Помимо как в самом RPG Maker MV. Спасибо!


RE: Для переводчиков - вытаскиваем текст из игры - b6badda7 - 11.03.2017

(11.03.2017, 10:57)9fec0050 писал(а): Всем доброго времени суток!
Есть маленький вопрос, может не тут спрашиваю но всё же. Какой прогой можно  вытащить текст для перевода игры, написанной на RPG Maker MV? Помимо как в самом RPG Maker MV. Спасибо!
https://albedo.pw/thread-776-post-190308.html#pid190308


RE: Для переводчиков - вытаскиваем текст из игры - 9fec0050 - 11.03.2017

(11.03.2017, 11:09)b6badda7 писал(а):
(11.03.2017, 10:57)9fec0050 писал(а): Всем доброго времени суток!
Есть маленький вопрос, может не тут спрашиваю но всё же. Какой прогой можно  вытащить текст для перевода игры, написанной на RPG Maker MV? Помимо как в самом RPG Maker MV. Спасибо!
https://albedo.pw/thread-776-post-190308.html#pid190308

Огромное спасибо! Видимо читал не внимательно....


Ещё вопрос!
Enigma-ой распаковал. Если я правильно понял, то файлы с картами и текстом лежат в папке www\data\.....json . Пробовал открывать Notepad++, полная чехарда, ничего не понятно что и где переводить . Нет ли проги что бы вытащить из них текст для перевода или чем их открыть, что бы было читабельно. Спасибо!


RE: Для переводчиков - вытаскиваем текст из игры - b6badda7 - 11.03.2017

(11.03.2017, 11:13)9fec0050 писал(а): Нет ли проги что бы вытащить из них текст для перевода или чем их открыть, что бы было читабельно. Спасибо!
Я о таких не слышал.


Разраб RPG Maker Trans habisian обещал в шестой версии поддержку переводов на MV.


RE: Для переводчиков - вытаскиваем текст из игры - 9fec0050 - 11.03.2017

(11.03.2017, 11:55)b6badda7 писал(а):
(11.03.2017, 11:13)9fec0050 писал(а): Нет ли проги что бы вытащить из них текст для перевода или чем их открыть, что бы было читабельно. Спасибо!
Я о таких не слушал.


Разраб RPG Maker Trans habisian обещал в шестой версии поддержку переводов на MV.

Спасибо за ответ!
Будем мучаться пока в Notepad++ smile


RE: Для переводчиков - вытаскиваем текст из игры - cc5f18c4 - 11.03.2017

(11.03.2017, 12:44)9fec0050 писал(а): Будем мучаться пока в Notepad++ smile
эмм, а это как?
сорри, если что прослоупочил, но насколько я знаю мв можно переводить только в самом редакторе...


RE: Для переводчиков - вытаскиваем текст из игры - 9fec0050 - 11.03.2017

(11.03.2017, 13:20)cc5f18c4 писал(а): эмм, а это как?
сорри, если что прослоупочил, но насколько я знаю мв можно переводить только в самом редакторе...
Вы не правы, я редактировал в Notepad++ чисто ради теста.... вот скрин....



RE: Для переводчиков - вытаскиваем текст из игры - cc5f18c4 - 11.03.2017

(11.03.2017, 14:55)9fec0050 писал(а): Вы не правы, я редактировал в Notepad++ чисто ради теста.... вот скрин....
ох блин, спасибо за инфу, буду знать, что можно и так smile
хотя, на мой взгляд, проще в самом мейкере переводить smile


RE: Для переводчиков - вытаскиваем текст из игры - 9fec0050 - 11.03.2017

(11.03.2017, 15:05)cc5f18c4 писал(а): ох блин, спасибо за инфу, буду знать, что можно и так smile
хотя, на мой взгляд, проще в самом мейкере переводить smile
Ну да там проще, только как загнать в него игру..... Ни как разобраться не могу.... Опыта ноль в RPG Maker MV. В Notepad++ удобно переводить одинаковые фразы или имена, по поиску с полной заменой.


RE: Для переводчиков - вытаскиваем текст из игры - cc5f18c4 - 11.03.2017

(11.03.2017, 15:13)9fec0050 писал(а): Ну да там проще, только как загнать в него игру..... Ни как разобраться не могу.... Опыта ноль в RPG Maker MV. В Notepad++ удобно переводить одинаковые фразы или имена, по поиску с полной заменой.
все просто:
1) устанавливаем рпг мейкер мв (могу дать ссылку на пиратку)
2) закидываем файлик Game.rpgproject (можно получить из пустого проекта) в папку www
3) запускаем этот файлик
в принципе все
если картинки игры зашифрованы в .rpgmvp(.rpgmvo), то их расшифровываем при помощи https://github.com/Petschko/Java-RPG-Maker-MV-Decrypter

как переводить напрямую в мейкере я вроде где-то писал, если нужно - могу поискать ссылку


RE: Для переводчиков - вытаскиваем текст из игры - 9fec0050 - 11.03.2017

@ce56dd87, Я пробовал так.... Только Game.rpgproject кидал в корень папки с игрой, выдавало ошибку...... Спасибо за подсказку......Попробую разобраться сам, но если не трудно поищи пожалуйста!


RE: Для переводчиков - вытаскиваем текст из игры - cc5f18c4 - 11.03.2017

@c1c592bf, вспомнил, я же относительно недавно олегану расписывал https://albedo.pw/thread-849-post-200470.html#pid200470
тут я вкратце описал как работать на рпг мейкер vx ace, на мв почти все тоже самое, за исключением vocab (в мв он лежит не в скриптах, а в базе данных)


RE: Для переводчиков - вытаскиваем текст из игры - 9fec0050 - 11.03.2017

@ce56dd87, Огромное спасибо!!! А то уже начал, на ютубе, уроки по мейкеру MV смотреть smile И огромное спасибо за прогу по расшифровке картинок, пришлась кстати.........!!!!!!


RE: Для переводчиков - вытаскиваем текст из игры - cc5f18c4 - 11.03.2017

@c1c592bf, пожалуйста, будут вопросы связанные с мейкером - обращайся smile


RE: Для переводчиков - вытаскиваем текст из игры - 9fec0050 - 18.03.2017

Подскажите, чем можно вытащить текст из игры на Unity4 ?...... Спасибо!


RE: Для переводчиков - вытаскиваем текст из игры - 4208b4fc - 04.01.2018

(11.03.2017, 15:41)cc5f18c4 писал(а): @Shuravi, пожалуйста, будут вопросы связанные с мейкером - обращайся
Буду очень признателен, если вы подскажете мне, где может располагаться (в каком файле) вот такой текст: http://j-p-g.net/if/2018/01/04/0390474001515052883.jpg (RPG MV). Вроде прошерстил (и перевел) все файлы Map001......141.json. Собственно все файлы *.json, а текст под CG точно игровой, но вот где он располагается найти не могу...:(


RE: Для переводчиков - вытаскиваем текст из игры - cc5f18c4 - 04.01.2018

(04.01.2018, 10:24)4208b4fc писал(а): Буду очень признателен, если вы подскажете мне, где может располагаться (в каком файле) вот такой текст: http://j-p-g.net/if/2018/01/04/0390474001515052883.jpg (RPG MV). Вроде прошерстил (и перевел) все файлы Map001......141.json. Собственно все файлы *.json, а текст под CG точно игровой, но вот где он располагается найти не могу...:(
как я понимаю, перевод идет не в мейкере, а с помощью открывания карт блокнотом
скорее всего (с вероятностью примерно 90%), нужный текст находится в CommonEvents.json
если же перевод ведется в в самом конструкторе, то текст лежит в БД->общие события


RE: Для переводчиков - вытаскиваем текст из игры - 4208b4fc - 04.01.2018

(04.01.2018, 13:27)cc5f18c4 писал(а):
(04.01.2018, 10:24)4208b4fc писал(а): Буду очень признателен, если вы подскажете мне, где может располагаться (в каком файле) вот такой текст: http://j-p-g.net/if/2018/01/04/0390474001515052883.jpg (RPG MV). Вроде прошерстил (и перевел) все файлы Map001......141.json. Собственно все файлы *.json, а текст под CG точно игровой, но вот где он располагается найти не могу...:(
как я понимаю, перевод идет не в мейкере, а с помощью открывания карт блокнотом
скорее всего (с вероятностью примерно 90%), нужный текст находится в CommonEvents.json
если же перевод ведется в в самом конструкторе, то текст лежит в БД->общие события
Именно так Notepad++. Спасибо пойду копать CommonEvents.


RE: Для переводчиков - вытаскиваем текст из игры - 30f828cd - 27.12.2018

Приветствую прошу помощи с переводом игры Succulence, при импорте dials_rus_DATABASE
появляется множество лишних пустых строк, из за этого текст "съезжает", первый раз при экспорте получаем 1500 строк, если не трогая файл залить его назад и снова экспортировать будет уже 2200 и тд. проблема только у этой игры а не у скриптов, в связи с этим вопрос есть ли какие либо автоматические тесты чтобы выявить и/или исправить проблему (хотябы автору напишу и попрошу исправить)
При попытке вытащить текст через RPGMakerTransv4.5выдал следующие ошибки
Свёрнутый текст:
Error parsing Script Yanfly Equip Engine: Cannot parse heredoc; leaving untranslated
Error parsing Script Shop Stock: String out of bounds: RubyParserState(string=..'d'.., index=4950, ruleStack=['Base', 'SingleQuote']) # 169:4943; leaving untranslated
Возможно ли исправить эти два скрипта и как?


RE: Для переводчиков - вытаскиваем текст из игры - cc5f18c4 - 27.12.2018

@fdaa2882, транс после выдачи ошибки закрывается или продолжает работу и в конце создаёт текстовые файлы?
Если 2-е - ничего страшного, можно спокойно переводить (у меня 4 из 5 игр транс выдаёт какие-то ошибкт, но всё равно выдерает и вставляет текст)
По поводу скриптов - нужно найти какие именно строчки съезжают (например, когда я редактировал аристократа, у меня по непонятной причине разбивались диалоги с выбором, после того как вручн всё поправил- стало нормально)


RE: Для переводчиков - вытаскиваем текст из игры - 30f828cd - 27.12.2018

(27.12.2018, 10:21)cc5f18c4 писал(а): @fdaa2882, транс после выдачи ошибки закрывается или продолжает работу и в конце создаёт текстовые файлы?
Если 2-е - ничего страшного, можно спокойно переводить (у меня 4 из 5 игр транс выдаёт какие-то ошибкт, но всё равно выдерает и вставляет текст)
По поводу скриптов - нужно найти какие именно строчки съезжают (например, когда я редактировал аристократа, у меня по непонятной причине разбивались диалоги с выбором, после того как вручн всё поправил- стало нормально)
нет папка игра патч пустая, программа зависает на 99 %


RE: Для переводчиков - вытаскиваем текст из игры - cc5f18c4 - 27.12.2018

@fdaa2882, удали скрипты (которыми извлекал текст) и после этого извлекай, должно нормально извлечь