Показано с 1 по 10 из 21

Тема: Вопрос по написанию скриптов для VX Ace

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Создатель Аватар для Рольф
    Информация о пользователе
    Регистрация
    14.04.2008
    Адрес
    Южно- Сахалинск/Пенза
    Сообщений
    10,183
    Записей в дневнике
    2
    Репутация: 108 Добавить или отнять репутацию

    По умолчанию

    Тут пример в крадце будет, нету времени делать. Я в своем проекте делал.
    1. Суть такова создается массив. Его прописываем DataManager, чтобы он сохранялся и загружался. Приведу свой код, мой массив time.
    Спойлер 1:

    #================================================= =============================
    # ■ DataManager
    #------------------------------------------------------------------------------
    #  データベースとゲームオブジェク を管理するモジュールです。ゲーム 使用する
    # ほぼ全てのグローバル変数はこのモ ュールで初期化されます。
    #================================================= =============================

    module DataManager
    #--------------------------------------------------------------------------
    # ● モジュールのインスタンス変数
    #--------------------------------------------------------------------------
    @last_savefile_index = 0 # 最後にアクセスしたファイル
    #--------------------------------------------------------------------------
    # ● モジュール初期化
    #--------------------------------------------------------------------------
    def self.init
    @last_savefile_index = 0
    load_database
    create_game_objects
    setup_battle_test if $BTEST
    end
    #--------------------------------------------------------------------------
    # ● データベースのロード
    #--------------------------------------------------------------------------
    def self.load_database
    if $BTEST
    load_battle_test_database
    else
    load_normal_database
    check_player_location
    end
    end
    #--------------------------------------------------------------------------
    # ● 通常のデータベースをロード
    #--------------------------------------------------------------------------
    def self.load_normal_database
    $data_actors = load_data("Data/Actors.rvdata2")
    $data_classes = load_data("Data/Classes.rvdata2")
    $data_skills = load_data("Data/Skills.rvdata2")
    $data_items = load_data("Data/Items.rvdata2")
    $data_weapons = load_data("Data/Weapons.rvdata2")
    $data_armors = load_data("Data/Armors.rvdata2")
    $data_enemies = load_data("Data/Enemies.rvdata2")
    $data_troops = load_data("Data/Troops.rvdata2")
    $data_states = load_data("Data/States.rvdata2")
    $data_animations = load_data("Data/Animations.rvdata2")
    $data_tilesets = load_data("Data/Tilesets.rvdata2")
    $data_common_events = load_data("Data/CommonEvents.rvdata2")
    $data_system = load_data("Data/System.rvdata2")
    $data_mapinfos = load_data("Data/MapInfos.rvdata2")
    $time = load_data("Data/Time.rvdata2")
    end
    #--------------------------------------------------------------------------
    # ● 戦闘テスト用のデータベースをロー
    #--------------------------------------------------------------------------
    def self.load_battle_test_database
    $data_actors = load_data("Data/BT_Actors.rvdata2")
    $data_classes = load_data("Data/BT_Classes.rvdata2")
    $data_skills = load_data("Data/BT_Skills.rvdata2")
    $data_items = load_data("Data/BT_Items.rvdata2")
    $data_weapons = load_data("Data/BT_Weapons.rvdata2")
    $data_armors = load_data("Data/BT_Armors.rvdata2")
    $data_enemies = load_data("Data/BT_Enemies.rvdata2")
    $data_troops = load_data("Data/BT_Troops.rvdata2")
    $data_states = load_data("Data/BT_States.rvdata2")
    $data_animations = load_data("Data/BT_Animations.rvdata2")
    $data_tilesets = load_data("Data/BT_Tilesets.rvdata2")
    $data_common_events = load_data("Data/BT_CommonEvents.rvdata2")
    $data_system = load_data("Data/BT_System.rvdata2")
    end
    #--------------------------------------------------------------------------
    # ● プレイヤーの初期位置存在チェック
    #--------------------------------------------------------------------------
    def self.check_player_location
    if $data_system.start_map_id == 0
    msgbox(Vocab::PlayerPosError)
    exit
    end
    end
    #--------------------------------------------------------------------------
    # ● 各種ゲームオブジェクトの作成
    #--------------------------------------------------------------------------
    def self.create_game_objects
    $game_temp = Game_Temp.new
    $game_system = Game_System.new
    $game_timer = Game_Timer.new
    $game_message = Game_Message.new
    $game_switches = Game_Switches.new
    $game_variables = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_actors = Game_Actors.new
    $game_party = Game_Party.new
    $game_troop = Game_Troop.new
    $game_map = Game_Map.new
    $game_player = Game_Player.new
    end
    #--------------------------------------------------------------------------
    # ● ニューゲームのセットアップ
    #--------------------------------------------------------------------------
    def self.setup_new_game
    create_game_objects
    $game_party.setup_starting_members
    $game_map.setup($data_system.start_map_id)
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    $game_player.refresh
    Graphics.frame_count = 0
    end
    #--------------------------------------------------------------------------
    # ● 戦闘テストのセットアップ
    #--------------------------------------------------------------------------
    def self.setup_battle_test
    $game_party.setup_battle_test
    BattleManager.setup($data_system.test_troop_id)
    BattleManager.play_battle_bgm
    end
    #--------------------------------------------------------------------------
    # ● セーブファイルの存在判定
    #--------------------------------------------------------------------------
    def self.save_file_exists?
    !Dir.glob('Save*.rvdata2').empty?
    end
    #--------------------------------------------------------------------------
    # ● セーブファイルの最大数
    #--------------------------------------------------------------------------
    def self.savefile_max
    return 4
    end
    #--------------------------------------------------------------------------
    # ● ファイル名の作成
    # index : ファイルインデックス
    #--------------------------------------------------------------------------
    def self.make_filename(index)
    sprintf("Save%02d.rvdata2", index + 1)
    end
    #--------------------------------------------------------------------------
    # ● セーブの実行
    #--------------------------------------------------------------------------
    def self.save_game(index)
    begin
    save_game_without_rescue(index)
    rescue
    delete_save_file(index)
    false
    end
    end
    #--------------------------------------------------------------------------
    # ● ロードの実行
    #--------------------------------------------------------------------------
    def self.load_game(index)
    load_game_without_rescue(index) rescue false
    end
    #--------------------------------------------------------------------------
    # ● セーブヘッダのロード
    #--------------------------------------------------------------------------
    def self.load_header(index)
    load_header_without_rescue(index) rescue nil
    end
    #--------------------------------------------------------------------------
    # ● セーブの実行(例外処理なし)
    #--------------------------------------------------------------------------
    def self.save_game_without_rescue(index)
    File.open(make_filename(index), "wb") do |file|
    $game_system.on_before_save
    Marshal.dump(make_save_header, file)
    Marshal.dump(make_save_contents, file)
    @last_savefile_index = index
    end
    return true
    end
    #--------------------------------------------------------------------------
    # ● ロードの実行(例外処理なし)
    #--------------------------------------------------------------------------
    def self.load_game_without_rescue(index)
    File.open(make_filename(index), "rb") do |file|
    Marshal.load(file)
    extract_save_contents(Marshal.load(file))
    reload_map_if_updated
    @last_savefile_index = index
    end
    return true
    end
    #--------------------------------------------------------------------------
    # ● セーブヘッダのロード(例外処理な )
    #--------------------------------------------------------------------------
    def self.load_header_without_rescue(index)
    File.open(make_filename(index), "rb") do |file|
    return Marshal.load(file)
    end
    return nil
    end
    #--------------------------------------------------------------------------
    # ● セーブファイルの削除
    #--------------------------------------------------------------------------
    def self.delete_save_file(index)
    File.delete(make_filename(index)) rescue nil
    end
    #--------------------------------------------------------------------------
    # ● セーブヘッダの作成
    #--------------------------------------------------------------------------
    def self.make_save_header
    header = {}
    header[:characters] = $game_party.characters_for_savefile
    header[laytime_s] = $game_system.playtime_s
    header
    end
    #--------------------------------------------------------------------------
    # ● セーブ内容の作成
    #--------------------------------------------------------------------------
    def self.make_save_contents
    contents = {}
    contents[:system] = $game_system
    contents[:timer] = $game_timer
    contents[:message] = $game_message
    contents[:switches] = $game_switches
    contents[:variables] = $game_variables
    contents[:self_switches] = $game_self_switches
    contents[:actors] = $game_actors
    contents[arty] = $game_party
    contents[:troop] = $game_troop
    contents[:map] = $game_map
    contents[layer] = $game_player
    contents[:time] = $time
    contents
    end
    #--------------------------------------------------------------------------
    # ● セーブ内容の展開
    #--------------------------------------------------------------------------
    def self.extract_save_contents(contents)
    $game_system = contents[:system]
    $game_timer = contents[:timer]
    $game_message = contents[:message]
    $game_switches = contents[:switches]
    $game_variables = contents[:variables]
    $game_self_switches = contents[:self_switches]
    $game_actors = contents[:actors]
    $game_party = contents[arty]
    $game_troop = contents[:troop]
    $game_map = contents[:map]
    $game_player = contents[layer]
    $time = contents[:time]
    end
    #--------------------------------------------------------------------------
    # ● データが更新されている場合はマッ を再読み込み
    #--------------------------------------------------------------------------
    def self.reload_map_if_updated
    if $game_system.version_id != $data_system.version_id
    $game_map.setup($game_map.map_id)
    $game_player.center($game_player.x, $game_player.y)
    $game_player.make_encounter_count
    end
    end
    #--------------------------------------------------------------------------
    # ● セーブファイルの更新日時を取得
    #--------------------------------------------------------------------------
    def self.savefile_time_stamp(index)
    File.mtime(make_filename(index)) rescue Time.at(0)
    end
    #--------------------------------------------------------------------------
    # ● 更新日時が最新のファイルインデッ スを取得
    #--------------------------------------------------------------------------
    def self.latest_savefile_index
    savefile_max.times.max_by {|i| savefile_time_stamp(i) }
    end
    #--------------------------------------------------------------------------
    # ● 最後にアクセスしたファイルのイン ックスを取得
    #--------------------------------------------------------------------------
    def self.last_savefile_index
    @last_savefile_index
    end
    end


    2. Прописываешь после выбора языка нужный массив. Через выполнить скрипть. Вместо 1,2,3,4 названия меню. К примеру вместо 1 в русской версии предметы, в англлийской item. Массив может быть большой. Сам пользуюсь 8.
    $time = ['1','2','3','4']
    3. Обычно текст в меню указывается так, когда команда выбора:
    add_command(Vocab::game_end,:game_end)
    ты меняешь так
    add_command($time[1],:game_end)
    В скобках позиция где нужное название. В данном примере вместо конца покажет 1.
    4. Когда название в меню вставляется через текст:
    draw_text(140, 0, 50, line_height, $time[1])
    5. По ходу игры легко можно поменять через выполнить скрипт.
    $time = ['1','2','3','4']
    Последний раз редактировалось Рольф; 25.05.2015 в 13:23.

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

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

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

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

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

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

Ваши права

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