Русификатор OpenKore

Разработка новых функций.

Модератор: 4epT

Оно вообще надо? (в смысле русификации)

Ура! Как раз этого нам и не хватало!
26
53%
Нехай будет...
14
29%
Афтара в Бобруйск! English 4ever!
9
18%
 
Всего голосов: 49

barmagloth
Энтузиаст
Сообщения: 71
Зарегистрирован: Сб ноя 03, 2007 9:55 am

Русификатор OpenKore

Сообщение barmagloth »

Здоровая конкурренция переводу от Denizka.

Выгодные отличия:
1) Перевод от первого лица (т.е. от лица бота :wink:) с учётом контекста, попытка писать живым языком.
2) Переводится даже то, для чего не было строк в OpenKore.pot
3) Проект ещё не помер.

Инструкция по установке - в архиве.

--------------------------------

Крайняя версия перевода на 22.11.2007 достигла 31% (визуально это более 95% сообщений консоли, если конечно у вас нет гомункула :wink: ) и содержит в себе модификации ядра, направленные на исправление недоделок разработчиков в области возможностей перевода, посему крайне нежелательно пытаться ставить его на что-то помимо сборок SVN 2.0.5:6071-6073

Зы. Патчик для SVN выложен в теме. Однако, сдаётся мне, что он не последний на тему TF-образного безобразия.

Зы.Зы. Помощь приветствуется.
Вложения
OpenKoreRUS-005-alpha.rar
Крайняя версия перевода на 22.11.2007
(116.37 КБ) 299 скачиваний
Последний раз редактировалось barmagloth Пн дек 10, 2007 8:42 pm, всего редактировалось 14 раз.
Маньяк-мультовод с Raggame/Loki
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Сообщение Kissa2k »

Вроде кто-то уже пытался русифицировать Openkore.
Наверное В Бобруйск :ROFL:
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Re: Русификатор OpenKore

Сообщение piroJOKE »

barmagloth писал(а):"Кто тут, к примеру, в цари крайний? Никого? Тогда я первый буду!"
Уже было. Кто найдет ссылку, закиньте сюда в тему!

Добавлено спустя 1 минуту 38 секунд:

barmagloth
Сразу та же проблема, что и всегда: у любителей использовать /console/ в актомакросах - наверняка что-то поломаеццо. :ROFL:

Добавлено спустя 8 минут 46 секунд:

Ага, это труженик DeniZka брался за русификацию...

Предварительное обсуждение было тут:
viewtopic.php?p=29970#29970
А оригинальная тема с реальной русЕФЕкацией тут:
viewtopic.php?t=2662
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
barmagloth
Энтузиаст
Сообщения: 71
Зарегистрирован: Сб ноя 03, 2007 9:55 am

Сообщение barmagloth »

На русЕФЕкации у меня аллергия. Посему вышеозначенную не ставил и даже не пытался. Проще самому сделать заново.

Выдлядит вроде неплохо...
[ 87/ 21] Использую Double Strafe (ур. 10) на монстра Metaling (0) - Dmg: 776 (задержка 53.5)
[ 87/ 16] Использую Double Strafe (ур. 10) на монстра Metaling (0) - Dmg: 706 (задержка 53.5)
Получен опыт: 492/249 (0.48%/0.32%)
Появился предмет Iron Ore (1) x 1 (260, 291)
Появился предмет Jubilee (2) x 1 (261, 290)
Цель уничтожена.
Добавлено в инвентарь Iron Ore (9) x 1 - Non-usable
Добавлено в инвентарь Jubilee (7) x 1 - Non-usable
Атакую: Monster Metaling (0)
[ 87/ 7] Использую Double Strafe (ур. 10) на монстра Metaling (0) - Dmg: 710 (задержка 53.5)
[ 87/ 7] You attack Monster Metaling (0) - Dmg: 187 (delay 53.5)
Получен опыт: 492/249 (0.48%/0.32%)
Цель уничтожена.
Атакую: Monster Metaling (1)
[ 87/ 3] Использую Double Strafe (ур. 10) на монстра Metaling (1) - Dmg: 762 (задержка 53.5)
[ 87/ 3] You attack Monster Metaling (1) - Dmg: 186 (delay 53.5)
Цель уничтожена.
Получен опыт: 492/249 (0.48%/0.32%)
Сижу, отдыхаю.
А фразочки типа "You attack Monster" - это как раз то, что разработчики поленились вывести из кода в языковой файл.
Последний раз редактировалось barmagloth Пн ноя 19, 2007 9:05 pm, всего редактировалось 1 раз.
Маньяк-мультовод с Raggame/Loki
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

barmagloth, проще поставить, то что есть и подредактировать, поверь :wink:
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
barmagloth
Энтузиаст
Сообщения: 71
Зарегистрирован: Сб ноя 03, 2007 9:55 am

Сообщение barmagloth »

Неа, не проще. Я перевожу (и правлю), глядя на работающий бот. :D

Если на экране будет что-то вроде "Авто-генерация Пароля Администратора по-умолчанию...", то придётся долго чесать репу, думая, а что же имелось в виду?

Впрочем, если никому это не надо - прошу стереть тему. Сам в своё удовольствие попользуюсь. :twisted:
Маньяк-мультовод с Raggame/Loki
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

barmagloth
На самом деле Денизка поскромничал, его русЕфекация не так уж и плоха...

Добавлено спустя 1 минуту 33 секунды:

barmagloth
В объеме 17% это действительно никому не надо. Но кто знает, может ты как-нибудь на днях дернешь ботл пива, и у тебя появится это... как его... а, "вдохновение", во!
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
barmagloth
Энтузиаст
Сообщения: 71
Зарегистрирован: Сб ноя 03, 2007 9:55 am

Сообщение barmagloth »

Там уже 20% :D

Ладно, уговорил, посмотрю творчество конкуррента. 8)

Добавлено спустя 59 минут 22 секунды:

Нашёл, что именно генерит самую противную непереводимую строчку.

Файл misc.pm, строка 2857

Код: Выделить всё

	return TF("%s %s %s - Dmg: %s (delay %s)\n",
		$source->nameString,
		$source->verb('attack', 'attacks'),
		$target->nameString($source),
		$damage, $delay);
Осталось понять, как из этого "универсального" безобразия сделать две раздельных "return TF" для случаев "бот бьёт моба" и "моб бьёт бота".

Добавлено спустя 41 минуту 30 секунд:

Патчег. Возможно корявый, но у меня работает.

В misc.pm меняем суб attack_string к следующему виду:

Код: Выделить всё

sub attack_string {
	my ($source, $target, $damage, $delay) = @_;
	assert(UNIVERSAL::isa($source, 'Actor')) if DEBUG;
	assert(UNIVERSAL::isa($target, 'Actor')) if DEBUG;

	if ($source->isa('Actor::You')) {
		return TF("You attack %s - Dmg: %s (delay %s)\n", $target->nameString($source),
		$damage, $delay);
		} else {
		return TF("%s attacks you - Dmg: %s (delay %s)\n", $source->nameString,
		$damage, $delay);
		};
}
Не уверен, нужны ли для работы новых строчек русификации изменения в openkore.pot, но на всякий случай - одну строчку меняем на две:

Код: Выделить всё

#: ../Misc.pm:2858
#, perl-format
msgid "You attack %s - Dmg: %s (delay %s)\n"
msgstr ""

#: ../Misc.pm:2861
#, perl-format
msgid "%s attacks you - Dmg: %s (delay %s)\n"
msgstr ""
Перевод достиг 21,5% :wink:
Последний раз редактировалось barmagloth Вт ноя 20, 2007 12:56 pm, всего редактировалось 1 раз.
Маньяк-мультовод с Raggame/Loki
barmagloth
Энтузиаст
Сообщения: 71
Зарегистрирован: Сб ноя 03, 2007 9:55 am

Сообщение barmagloth »

В связи с переделкой кусочка misc.pm возник вопрос:

Может ли бот атаковать игроков? То есть в зоне ПвП или что-то в этом роде? От ответа будет зависеть алгоритм вывода лога и соответственно перевод сообщений об атаках.
Маньяк-мультовод с Raggame/Loki
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

barmagloth
Может. Команда kill.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
barmagloth
Энтузиаст
Сообщения: 71
Зарегистрирован: Сб ноя 03, 2007 9:55 am

Сообщение barmagloth »

Потихоньку, полегоньку, правлю недоделки разработчиков, которые заключаются в том, что им лениво написать TF("<сакраментальная фраза>") и они пишут просто "<сакраментальная фраза>".

Лог кусочка боя (перевод 23,5% ):

Код: Выделить всё

Вижу портал - moc_fild11 -> moc_fild17 (212, 29) - (0)
Смена карты - moc_fild17.gat (218, 366)
Вижу НПЦ - Следы боя#8 (213, 358) (ID 52627) - (0)
Вижу портал - moc_fild17 -> moc_fild11 (218, 369) - (0)
Монстр Frilldora (0) кастует Cloaking на себя (время 200ms)
Монстр Frilldora (0) применяет Cloaking на себя : Ур. 65535
[dist=17.2] Monster Frilldora (0): *?*
[dist=17.2] Monster Frilldora (0): *?*
Вычисляю произвольный маршрут до Sograt Desert(moc_fild17): 270, 214
Атакую: Monster Piere (0)
Навык Steal применён неудачно (Requirement)
[ 63/ 90] Атакую Piere - Урон: 268 (задержка 41.1)
[dist=unknown] Unknown #59068: *Sob*
[dist=unknown] Unknown #59068: *Sob*
[ 63/ 90] Атакую Piere - Урон: 146 (задержка 41.1)
[ 63/ 90] Piere атакует меня - Урон: Промах! (задержка 28.8)
[ 63/ 90] Атакую Piere - Урон: 147 (задержка 41.1)
[dist=14] Monster Magnolia (3): *Sob*
[dist=14] Monster Magnolia (3): *Sob*
[ 63/ 90] Атакую Piere - Урон: 122 (задержка 41.1)
[ 63/ 90] Piere атакует меня - Урон: Промах! (задержка 28.8)
[ 63/ 90] Атакую Piere - Урон: 118 (задержка 41.1)
Цель уничтожена.
Получен опыт: 122/78 (0.23%/0.18%)
Кто-то #59090 (0) кастует Cloaking на себя (время 200ms)
Кто-то #59090 (0) применяет Cloaking на себя : Ур. 65535
Атакую: Monster Magnolia (3)
Монстр Hode (1) кастует Cloaking на себя (время 200ms)
Кто-то #58984 (0) применяет Cloaking на себя : Ур. 65535
Навык Steal применён неудачно (Requirement)
Навык Steal применён неудачно (Requirement)
[ 63/ 76] Атакую Magnolia - Урон: 98 (задержка 41.1)
[ 63/ 76] Magnolia атакует меня - Урон: 106 (задержка 36)
[ 63/ 76] Атакую Magnolia - Урон: 123 (задержка 41.1)
Использован предмет Meat (3) x 1 , осталось 79 шт.
[ 63/ 76] Атакую Magnolia - Урон: 132 (задержка 41.1)
[ 63/ 76] Magnolia атакует меня - Урон: 103 (задержка 36)
[ 63/ 76] Атакую Magnolia - Урон: 338 (задержка 41.1)
Использован предмет Meat (3) x 1 , осталось 78 шт.
[ 61/ 79] Атакую Magnolia - Урон: 284 (задержка 41.1)
[ 61/ 79] Magnolia атакует меня - Урон: 107 (задержка 36)
[ 61/ 79] Атакую Magnolia - Урон: 113 (задержка 41.1)
Использован предмет Meat (3) x 1 , осталось 77 шт.
[ 60/ 79] Атакую Magnolia - Урон: 136 (задержка 41.1)
Монстр Magnolia (3) кастует Stun Attack на площадку (201, 294) - (время 1500ms)
[ 60/ 79] Атакую Magnolia - Урон: 124 (задержка 41.1)
[ 60/ 79] Frilldora атакует меня - Урон: 174 (задержка 72)
[ 60/ 79] Атакую Magnolia - Урон: 101 (задержка 41.1)
[dist=1] Monster Magnolia (3): *$!@#*
[ 39/ 79] Монстр Magnolia (3) использует Stun Attack на меня - Урон: 103 (delay 36)
Использован предмет Meat (3) x 1 , осталось 76 шт.
[ 40/ 79] Атакую Magnolia - Урон: 234 (задержка 41.1)
Использован предмет Meat (3) x 1 , осталось 75 шт.
[ 51/ 79] Frilldora атакует меня - Урон: 179 (задержка 72)
Использован предмет Meat (3) x 1 , осталось 74 шт.
[ 63/ 79] Атакую Magnolia - Урон: 234 (задержка 41.1)
[ 41/ 79] Magnolia атакует меня - Урон: 98 (задержка 36)
Использован предмет Meat (3) x 1 , осталось 73 шт.
[ 40/ 79] Атакую Magnolia - Урон: 158 (задержка 41.1)
[ 40/ 79] Frilldora атакует меня - Урон: 174 (задержка 72)
Использован предмет Meat (3) x 1 , осталось 72 шт.
Использован предмет Meat (3) x 1 , осталось 71 шт.
[ 64/ 79] Атакую Magnolia - Урон: 128 (задержка 41.1)
Монстр Frilldora (0) кастует Cloaking на себя (время 200ms)
[ 43/ 79] Magnolia атакует меня - Урон: Промах! (задержка 36)
Монстр Frilldora (0) применяет Cloaking на себя : Ур. 65535
Использован предмет Meat (3) x 1 , осталось 70 шт.
[ 57/ 83] Атакую Magnolia - Урон: 288 (задержка 41.1)
[ 57/ 83] Монстр Frilldora (0) использует Fire Attack на меня - Урон: Промах! (delay 72)
[ 57/ 83] Атакую Magnolia - Урон: 134 (задержка 41.1)
[ 57/ 83] Magnolia атакует меня - Урон: Промах! (задержка 36)
[ 58/ 83] Атакую Magnolia - Урон: 332 (задержка 41.1)
[ 58/ 83] Frilldora атакует меня - Урон: Промах! (задержка 72)
[ 58/ 83] Magnolia атакует меня - Урон: Промах! (задержка 36)
[ 58/ 83] Атакую Magnolia - Урон: 328 (задержка 41.1)
Получен опыт: 393/248 (0.74%/0.58%)
Обнаружен предмет Old Frying Pan (0) x 1 (200, 294)
Цель уничтожена.
Добавлено в инвентарь Old Frying Pan (12) x 1 - Non-usable
Маньяк-мультовод с Raggame/Loki
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Удовлетворительно, как на мой взгляд. :twisted:

Но, скажем прямо... этот лог - чистая эстетика.
"Да вы только посмотрите - у нас тут ВСЁ по-русски!"
Однако в реалиях жизни русский как раз нужен в менюшках,
которые вылазят РЕДКО, и поэтому незнакомы игроку
(и он не знает, как их понять - когда получает незнакомую фразу на английском). :(

Добавлено спустя 1 минуту 1 секунду:

ЗЫ: Рекомендую оставить только один из атачей выше в теме.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
barmagloth
Энтузиаст
Сообщения: 71
Зарегистрирован: Сб ноя 03, 2007 9:55 am

Сообщение barmagloth »

Пирожок, посмотри плиз кусок из misc.pm чуть выше и скажи, не налажал ли я с логикой. Если бот может атачить кого-то кроме мобов, то там надо писать по другому.


Зы. А этот движок позволяет менять аттачи?
Маньяк-мультовод с Raggame/Loki
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Меня другое смущает - а разве не эта же строчка будет вызываться, если на твоих глазах кого-то будут бить? (такое может быть в режиме отладки(?)).
Насчет misc.pm - если ты хочешь упоминать "себя", сделай на всякий 3 случая - еще один, когда ты в драке не участвуешь.
А ваще мне это не сильно нравится, изменять код ради перевода... :(
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
barmagloth
Энтузиаст
Сообщения: 71
Зарегистрирован: Сб ноя 03, 2007 9:55 am

Сообщение barmagloth »

А ваще мне это не сильно нравится, изменять код ради перевода...
Ну, извините. Проект предъявляет претензии на многоязычность и обязан соответствовать. Иначе какого фига "@A uses <skill> on @B" в файл-переводчик включено, а примитивное "@A attacks @B" нет?

Как править код - уже знаю. Копи-пастом с аналогичного блока "uses".

Смущает только то, что поедет половина привязок на misc.pm в openkore.pot... Ну да ладно, когда закончу с переводом - поправлю и его, тогда можно будет внедрять в SVN для удобства датчан и тайцев. :wink:

Добавлено спустя 49 минут 56 секунд:

Итак, новый вариант пагчега, который даёт много переводимых строчек для всех возможных вариантов кто-кого-лупит. 8)

Код: Выделить всё

sub attack_string {
	my ($source, $target, $damage, $delay) = @_;
	assert(UNIVERSAL::isa($source, 'Actor')) if DEBUG;
	assert(UNIVERSAL::isa($target, 'Actor')) if DEBUG;
	# You
	if ($source->isa('Actor::You')) {
		if ($target->isa('Actor::Player')) {
			return TF("You attack player %s (%d) - Dmg: %s (delay %s)\n", $target->name, $target->{binID}, $damage, $delay);
		} elsif ($target->isa('Actor::Monster')) {
			return TF("You attack monster %s (%d) - Dmg: %s (delay %s)\n", $target->name, $target->{binID}, $damage, $delay);
		} elsif ($target->isa('Actor::Unknown')) {
			return TF("You attack Unknown #%s (%d) - Dmg: %s (delay %s)\n", $target->{nameID}, $target->{binID}, $damage, $delay);
		}
	# Player
	} elsif ($source->isa('Actor::Player')) {
		if ($target->isa('Actor::You')) {
			return TF("Player %s (%d) attacks you - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $damage, $delay);
		} elsif ($target->isa('Actor::Player')) {
			return TF("Player %s (%d) attacks player %s (%d) - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $target->name, $target->{binID}, $damage, $delay);
		} elsif ($target->isa('Actor::Monster')) {
			return TF("Player %s (%d) attacks monster %s (%d) - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $target->name, $target->{binID}, $damage, $delay);
		} elsif ($target->isa('Actor::Unknown')) {
			return TF("Player %s (%d) attacks Unknown #%s (%d) - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $target->{nameID}, $target->{binID}, $damage, $delay);
		}
	# Monster
	} elsif ($source->isa('Actor::Monster')) {
		if ($target->isa('Actor::You')) {
			return TF("Monster %s (%d) attacks you - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $damage, $delay);
		} elsif ($target->isa('Actor::Player')) {
			return TF("Monster %s (%d) attacks player %s (%d) - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $target->name, $target->{binID}, $damage, $delay);
		} 

#	Not sure if monster can attack monster in RO	
#		elsif ($target->isa('Actor::Monster')) { return TF("Monster %s (%d) attacks monster %s (%d) - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $target->name, $target->{binID}, $damage, $delay); } 
		
		elsif ($target->isa('Actor::Unknown')) {
			return TF("Monster %s (%d) attacks Unknown #%s (%d) - Dmg: %s (time %s)\n", $source->name, $source->{binID}, $target->{nameID}, $target->{binID}, $damage, $delay);
		}
	# Unknown
	} elsif ($source->isa('Actor::Unknown')) {
		if ($target->isa('Actor::You')) {
			return TF("Unknown #%s (%d) attacks you - Dmg: %s (delay %s)\n", $source->{nameID},	$source->{binID}, $damage, $delay);
		} elsif ($target->isa('Actor::Player')) {
			return TF("Unknown #%s (%d) attacks player %s (%d) - Dmg: %s (delay %s)\n", $source->{nameID}, $source->{binID}, $target->name, $target->{binID}, $damage, $delay);
		} elsif ($target->isa('Actor::Monster')) {
			return TF("Unknown #%s (%d) attacks monster %s (%d) - Dmg: %s (delay %s)\n", $source->{nameID}, $source->{binID}, $target->name, $target->{binID}, $damage, $delay);
		} elsif ($target->isa('Actor::Unknown')) {
			return TF("Unknown #%s (%d) attacks Unknown #%s (%d) - Dmg: %s (delay %s)\n", $source->{nameID},	$source->{binID}, $target->{nameID}, $target->{binID}, $damage, $delay);
			} 
		}
	}
Как легко заметить, одна из строчек закомментирована, ибо я крайне сомневаюсь, что в РО моб может бить моба. Это ж вам не ВоВка, где волки правдоподобно охотятся на коров и зайцев. :wink:

Зы. Может возникнуть резонный вопрос - а где же гомункул? А вот нет его. Точнее есть, но где-то в другом месте прописан - НЕ ЗДЕСЬ.

Добавлено спустя 1 час 7 минут 22 секунды:

13:33 - Найдена потерянная разработчиками строчка ТF - "Item Exists: %s (%d) x %d\n"
Маньяк-мультовод с Raggame/Loki
Ответить