Плохо! Плохо!:  0
Показано с 1 по 6 из 6

Тема: Падежи в навыках

  1. #1

    По умолчанию Падежи в навыках

    Здравствуйте.
    Занялся переводом одной игрушки и у меня возникла проблема. Суть в том что сообщения при использовании навыков расписаны в стиле:
    "\U кидает камень в \E.
    Камень попадает \E по голове."
    Из-за чего подобные предложения отображаются на русском языке в стиле "Моя твоя не понимать"
    Есть ли какие-нибудь средства или скрипты в мейкере, которые бы решили или помогли в решении этой проблемы?

  2. #2

    По умолчанию

    Мне кажется вносить скриптами правки в чужой законченный проект тот еще гемор.
    Так как по хорошему нужно расписать имена по падежам, сохранить варианты имен и вызывать их туда например \U1 - Именительный \U2 - Родительный и т.д. Но для этого нужно видеть проект и понимать какие скрипты там и как они работают.

    Самый простой вариант это переписать фразы так что бы при сохранении смысла падеж не влиял на фразу.
    Например:
    "\U кидает камень.
    \E получает удар камнем по голове."

  3. #3

    По умолчанию

    Цитата Сообщение от Lipton Посмотреть сообщение
    Мне кажется вносить скриптами правки в чужой законченный проект тот еще гемор.
    Так как по хорошему нужно расписать имена по падежам, сохранить варианты имен и вызывать их туда например \U1 - Именительный \U2 - Родительный и т.д. Но для этого нужно видеть проект и понимать какие скрипты там и как они работают.

    Самый простой вариант это переписать фразы так что бы при сохранении смысла падеж не влиял на фразу.
    Например:
    "\U кидает камень.
    \E получает удар камнем по голове."
    Приблизительно этот "гемор" мне и нужен(в смысле расписать имена по падежам и вызывать их туда). Проблема в том что я в скриптовании на руби не очень шарю.
    А самый простой вариант мной применялся пока я не дошел до навыков врагов, среди которых уж очень много тех, которые переписать таким образом затруднительно(если не невозможно).

  4. #4
    Познающий Аватар для Cvrtis
    Информация о пользователе
    Регистрация
    13.08.2013
    Сообщений
    305
    Записей в дневнике
    14
    Репутация: 14 Добавить или отнять репутацию

    По умолчанию

    Вставить слово "Персонаж" или "Герой" перед именем, нет?
    Данный способ, порой, используется в ММО-играх.
    Последний раз редактировалось Cvrtis; 28.02.2016 в 17:09.

  5. #5

    По умолчанию

    Приблизительно так и пришлось делать.
    В любом случае спасибо за ответы.

  6. #6

    По умолчанию

    Похоже, что этот вопрос поднимался только здесь на нейтральной, так что отпишусь сначала сюда.
    Тоже недавно заморочился склонениями имён и откопал свой старый скрипт из перевода одной флешки на ActionScript2
    Оригинал выглядел как-то так:
    Спойлер Код:

    Код:
    function slavenamePad()
       {
          if(_root.SlaveName.slice(-2) == "ка" || _root.SlaveName.slice(-2) == "ко" || _root.SlaveName.slice(-2) == "га")
          {
             this.SlaveVin = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "у";
             this.SlaveDat = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "е";
             this.SlaveRod = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "и";
             this.SlaveTvor = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "ой";
             this.SlavePred = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "е";
          }
          else if(_root.SlaveName.slice(-2) == "за" || _root.SlaveName.slice(-2) == "на" || _root.SlaveName.slice(-2) == "ма" || _root.SlaveName.slice(-2) == "та" || _root.SlaveName.slice(-2) == "фа" || _root.SlaveName.slice(-2) == "да" || _root.SlaveName.slice(-2) == "ра" || _root.SlaveName.slice(-2) == "са")
          {
             this.SlaveVin = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "у";
             this.SlaveDat = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "е";
             this.SlaveRod = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "ы";
             this.SlaveTvor = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "ой";
             this.SlavePred = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "е";
          }
          else if(_root.SlaveName.slice(-2) == "ия" || _root.SlaveName.slice(-2) == "уя" || _root.SlaveName.slice(-2) == "ля")
          {
             this.SlaveVin = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "ю";
             this.SlaveDat = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "е";
             this.SlaveRod = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "и";
             this.SlaveTvor = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "ей";
             this.SlavePred = _root.SlaveName.substring(0,_root.SlaveName.length - 1) + "е";
          }
          else if(_root.SlaveName.slice(-2) == "ён" || _root.SlaveName.slice(-2) == "ер")
          {
             this.SlaveVin = _root.SlaveName + "а";
             this.SlaveDat = _root.SlaveName + "у";
             this.SlaveRod = _root.SlaveName + "а";
             this.SlaveTvor = _root.SlaveName + "ом";
             this.SlavePred = _root.SlaveName + "е";
          }
          else
          {
             this.SlaveVin = _root.SlaveName;
             this.SlaveDat = _root.SlaveName;
             this.SlaveRod = _root.SlaveName;
             this.SlaveTvor = _root.SlaveName;
             this.SlavePred = _root.SlaveName;
          }
          if(_root.SlaveGender == 1)
          {
             this.Imen = "он";
             this.Vin = "его";
             this.Dat = "ему";
             this.Rod = "него";
             this.Tvor = "им";
             this.Pred = "нём";
          }
          else if(_root.SlaveGender == 2)
          {
             this.Imen = "она";
             this.Vin = "её";
             this.Dat = "ей";
             this.Rod = "неё";
             this.Tvor = "ей";
             this.Pred = "ней";
          }
          else if(_root.SlaveGender > 2)
          {
             this.Imen = "они";
             this.Vin = "их";
             this.Dat = "им";
             this.Rod = "их"; 
             this.Tvor = "ими";
             this.Pred = "них";
          }
       }

    Как можно понять, великий и могучий вполне подчиняется логике, т. е. можно создать словарь, и на основе одинаковых окончаний склонять любые имена(и не только) по падежам и родам.
    В игре было более сотни рабынь, но скрипт вполне справлялся со всеми. Правда есть один минус, с мужскими именами для той игры я практически не заморачивался за ненадобностью. Есть лишь варианты для ён и ер (Кён и ещё кто-то там).

    Сделал вариант скрипта для VX Ace, если героиня женщина, то наверно можно использовать без изменений. У меня всё работает.

    Имя персонажа: Мизуна

    Для мужского персонажа придётся указать в скрипте пол - isFem = false
    И тогда будет: Кён неожиданно атакова(н) (если один), либо Группа Кён(а) неожиданно атакова(на)

    Спойлер Скрипт Vocab:

    Код:
    #==============================================================================
    # ■ 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


    Спойлер Склонение по падежам:

    Код:
    ########################### Внезапное нападение #########################
    #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
    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
    end
    
    #Проверка падежа/пола.
    def isFem(fem)
      if fem == true
        return "%s неожиданно атакована!"
      else
        return "%s неожиданно атакован!"
      end
    end
    #Склонение имён по падежам.
    #Хэш: 2 последние буквы окончания => замена последней буквы окончания.
    def pad(actor, p)
      if p == "V"
        local = {"ка" => "у", "ко" => "у", "га" => "у", "за" => "у",
        "на" => "у", "ма" => "у", "та" => "у", "фа" => "у",
        "да" => "у", "ра" => "у", "са" => "у", "ия" => "ю",
        "уя" => "ю", "ля" => "ю", "ён" => "а", "ер" => "а",
        "ий" => "я", "ай" => "я", "ся" => "ю"}
      elsif p == "D"
        local = {"ка" => "е", "ко" => "е", "га" => "е", "за" => "е",
        "на" => "е", "ма" => "е", "та" => "е", "фа" => "е",
        "да" => "е", "ра" => "е", "са" => "е", "ия" => "е",
        "уя" => "е", "ля" => "е", "ён" => "у", "ер" => "у",
        "ий" => "ю", "ай" => "ю", "ся" => "е"}
      elsif p == "R"
        local = {"ка" => "и", "ко" => "и", "га" => "и", "за" => "ы",
        "на" => "ы", "ма" => "ы", "та" => "ы", "фа" => "ы",
        "да" => "ы", "ра" => "ы", "са" => "ы", "ия" => "и",
        "уя" => "и", "ля" => "и", "ён" => "а", "ер" => "а",
        "ий" => "я", "ай" => "я", "ся" => "и"}
      elsif p == "T"
        local = {"ка" => "ой", "ко" => "ой", "га" => "ой", "за" => "ой",
        "на" => "ой", "ма" => "ой", "та" => "ой", "фа" => "ой",
        "да" => "ой", "ра" => "ой", "са" => "ой", "ия" => "ей",
        "уя" => "ей", "ля" => "ей", "ён" => "ом", "ер" => "ом",
        "ий" => "ем", "ай" => "ем", "ся" => "ей"}
      elsif p == "P"
        local = {"ка" => "е", "ко" => "е", "га" => "е", "за" => "е",
        "на" => "е", "ма" => "е", "та" => "е", "фа" => "е",
        "да" => "е", "ра" => "е", "са" => "е", "ия" => "е",
        "уя" => "е", "ля" => "е", "ён" => "е", "ер" => "е",
        "ий" => "и", "ай" => "е", "ся" => "е"}
      else
        return actor
      end
      if(actor.slice(actor.length-2,2) == "ён" || actor.slice(actor.length-2,2) == "ер")
        return actor + local[actor.slice(actor.length-2,2)]
      else
        return actor.slice(0,actor.length-1) + local[actor.slice(actor.length-2,2)]
      end
    end


    Если тут нет склонений для вашего персонажа, то их можно легко дописать, добавив варианты замены окончаний в последний скрипт.
    Для системных сообщений требуется лишь винительный и родительный падежи. Но можно также назначить скриптом склонения на переменные и использовать их потом в игре как падежи для персонажей с изменяемыми именами.

    Просьба к коду сильно не придираться, я вообще в Ruby не спец.
    Если кто разбирается, то можно его дополнить и доработать.

    Вынес скрипт в отдельную тему Скрипт склонения системных сообщений по полу и падежам.
    Последний раз редактировалось rsv2; 26.12.2023 в 12:20.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Падежи в навыках