查看: 6852|回复: 6

[已经解决] 关于变量设置

[复制链接]
梦石
0
星屑
72
在线时间
14 小时
注册时间
2016-5-28
回帖
9
发表于 2016-5-28 03:41:59 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
关于变量有两个问题想要请教大神们。
1.变量的表示可否带入非数字?就是 \V[n] 的表示方法,我希望让变量的数字为1时对话时表示为A,2时为B以此类推,虽然使用条件分歧也可以,但是无法直接表示吗?

2.是否能够做出关闭游戏之后也不会变化的变量?类似二周目那种,通关之后再开游戏也依然不会重置的变量?
梦石
2
星屑
34497
在线时间
614 小时
注册时间
2014-7-18
回帖
647

MZ评测员开拓者

发表于 2016-5-28 12:13:33 | 显示全部楼层
1不能
2只要还是一个存档,变量就不会变
回复

使用道具 举报

梦石
0
星屑
6963
在线时间
1557 小时
注册时间
2011-6-14
回帖
425
发表于 2016-5-29 00:41:02 来自手机 | 显示全部楼层
YEP.104 – New Game+ – RPG Maker MV
Introduction
This plugin requires YEP_SaveCore. Make sure this plugin is located under YEP_SaveCore in the plugin list.

这个插件需要YEP_SaveCore,确保它放在YEP_SaveCore下面

New Game+ is a great way to provide replay value for your game. It lets the player re-experience the game in a different way with either carried over items, to carried over party members, to carried over skills, switches, and variables even. There exists many options to change how New Game+ will work for your game.

新游戏拓展是一个很好的方式来提供游戏重玩的初始值。它可以让玩家重新体验游戏,但是可以携带之前的物品,角色,技能,甚至开关或者变量。这里有很多游戏来设置你的二周目游戏。

Notetags
There are some notetags you can utilize with a few database objects.

这里是一些你可以设置的标签

Actor, Item, Weapon, Armor Notetag
复制代码
– This will prevent the item, weapon, or armor from being carried over to New Game+. If this is used on an actor, the actor will be in its default state as if a new game started.

这可以阻止特定的物品,武器,护甲被携带到二周目。如果用于角色,则这个角色将会在游戏开始时初始化。
回复

使用道具 举报

梦石
0
星屑
72
在线时间
14 小时
注册时间
2016-5-28
回帖
9
 楼主| 发表于 2016-5-29 11:32:22 | 显示全部楼层
347780682 发表于 2016-5-29 00:41
YEP.104 – New Game+ – RPG Maker MV
Introduction
This plugin requires YEP_SaveCore. Make sure this  ...

这个插件似乎正是我所需要的,
请问大神能够提供一下详细的用法吗?
我希望的只是将某个特定的变量或开关带到二周目。
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2016-5-29 12:21:14 | 显示全部楼层
http://utakata-no-yume.net/gallery/plugin/tkmv/cmn_save/
共有セーブデータ
CU32P.png
CommonSave load         共有セーブデータからスイッチ・変数を読み込み反映させます。
任意のタイミングで共有セーブデータのロードを行いたい場合に使用します。
CommonSave save         共有セーブデータにスイッチ・変数の状態を記録します。
共有セーブデータが存在しない場合は新規に生成します。
任意のタイミングで共有セーブデータのセーブを行いたい場合に使用します。
CommonSave remove         共有セーブデータを削除します。
共有セーブデータの状態をリセットしたい場合に使用します。
CommonSave setTrace [true|false]         (ver1.20にて実装)
コンソールにトレースを出力するかを設定します。
ゲーム実行中にトレース状態を切り替えたい場合に使用します。
(例) CommonSave setTrace true
=> コンソールにトレースを出力するように。
CommonSave check         (ver1.20にて実装)
共有状態になっているスイッチ・変数番号をコンソールに表示し確認します。




UTA_CommonSave.js[pre lang="javascript"]//=============================================================================
// UTA_CommonSave.js
//=============================================================================
// Version    : 1.20
// LastUpdate : 2016.05.11
// Author     : T.Akatsuki
// Website    : http://utakata-no-yume.net/
// License    : MIT License(http://opensource.org/licenses/mit-license.php)
//=============================================================================

//=============================================================================
/*:
* @plugindesc Create a share save data. Share state of game switch and variables between each save data.
* @author T.Akatsuki
*
* @param Target Switches
* @desc Set target switch index number.
* If you want to set multiple, put comma between indexes.
* Using "-", the range can be specified.
* (ex) 1-3,11,12,13,20,21
* @default
*
* @param Target Variables
* @desc Set target variable index number.
* If you want to set multiple, put comma between indexes.
* Using "-", the range can be specified.
* (ex) 1-5,11,12,13,23,24
* @default
*
* @param Is Auto
* @desc Automatically to set save / load common save data on save / load timing.
* true  : Automatically common save data is saved/loaded on save / load timing.
* false : Save and load of common save data you do manually.
* @default true
*
* @param Auto on Gameover
* @desc If auto saving common save data is enabled , it automatically saves common save data on gameover.
* true  : It save common save data on game over.
* false : It do nothing on game over.
* @default false
*
* @param Show Trace
* @desc Set state traces display.
* true  : Show trace., false : Don't show trace.
* @default false
*
* @help # Overview
* Create a share save data. Share state of game switch and variables between each save data.
* If you use plugin command, you can operate common save data at any time.
*
* Common save data will be saved with a name "common.rpgsave" below save directory.
*
* # Parameters
*   Target Switches [Switch No, ...]
*     Set target switch index number.
*     If you want to set multiple, put comma between indexes.
*     Using "-", the range can be specified.
*     (Ex) 1-3,11,12,13,20,21
*            => number 1,2,3,11,12,13,20,21 switches are target.
*
*   Target Variables [Valiable No, ...]
*     Set target variable index number.
*     If you want to set multiple, put comma between indexes.
*     Using "-", the range can be specified.
*     (Ex) 1-3,11,12,13,14,15
*            => number 1,2,3,11,12,13,14,15 variables are target.
*
*   Is Auto [true|false]
*     Automatically to set save / load common save data on save / load timing.
*
*   Auto on Gameover [true|false]
*     If auto saving common save data is enabled , it automatically saves common save data on gameover.
*
*   Show Trace [true|false]
*     Set whether the issue a trace for debugging.
*
* # Plugin Command
*   CommonSave load                  # Read GameSwitches and GameVariables from common save data and apply game data.
*                                    # This command is used when you want to load common save data at any time.
*   CommonSave save                  # Save target GameSwitches and GameVariables common save data.
*                                    # This command is used when you want to save in common save data at any time.
*   CommonSave remove                # Remove common save data file.
*
*   CommonSave setTrace [true|false] # Setting to enabled trace on console.
*
*   CommonSave check                 # Show sharing target switches and variables to console.
*
* # Change Log
*   ver 1.20 (2016.05.11)
*     Using "-", the range can be specified.
*     Add setTrace plugin command.
*     Add check plugin command.
*
*   ver 1.10 (Fed 17, 2016)
*     Rename to UTA_CommonSave.js.
*     To be able to set trace in the parameter.
*
*   ver1.01 (Jan 14, 2016)
*     Fixed bug where could not share variables.
*
*   ver1.00 (Dec 31, 2015)
*     To ver1.00 according to the Japanese version of RPG Maker MV.
*
*   ver0.01 (Nov 05, 2015)
*     Initial release.
*/

/*:ja
* @plugindesc 共有のセーブデータを作成し、指定したスイッチ・変数の状態をセーブデータ間で共有します。
* @author 赤月 智平
*
* @param Target Switches
* @desc 対象となるスイッチの番号を指定します。
* カンマ区切りで複数指定、ハイフンで範囲指定が可能です。
* (例) 1-3,11,12,13,20,21
* @default
*
* @param Target Variables
* @desc 対象となる変数の番号を指定します。
* カンマ区切りで複数指定、ハイフンで範囲指定が可能です。
* (例) 1-5,11,12,13,23,24
* @default
*
* @param Is Auto
* @desc セーブ・ロード時に自動的に共通セーブデータのセーブ・ロードを行うかを設定します。
*       true  : セーブ・ロード時に自動的に共有セーブデータにデータのセーブ・ロードを行う。
*       false : 共通セーブデータのセーブ・ロードは手動で行う。
* @default true
*
* @param Auto on Gameover
* @desc 自動セーブ設定がONの時にゲームオーバー時に共有セーブデータの自動セーブを行うかを設定します。
*       true  : ゲームオーバー時に自動共有セーブを行う。
*       false : ゲームオーバー時は自動共有セーブを行わない。
* @default false
*
* @param Show Trace
* @desc デバッグ用のトレースを出すかを設定します。
* true: トレースを表示, false: トレースを表示しない
* @default false
*
* @help ■概要
* CommonSaveプラグインは共有セーブデータを作成し、指定したスイッチ・変数の状態をセーブデータ間で共有する事ができます。
* 基本的にはセーブ・ロード時に設定に応じて自動的に処理してくれます。
* プラグインコマンドを利用すると、任意のタイミングで共有セーブデータの操作を行う事ができます。
*
* 共有セーブデータはsaveディレクトリ以下に「common.rpgsave」という名前で保存されます。
*
* ■パラメータの説明
*   Target Switches [スイッチ番号, ...]
*     共有したいスイッチの番号を指定します。「,」で区切り複数の値を指定する事ができます。
*     「-」で数値の範囲を指定する事も可能です。
*     (例) 1-3,11,12,13,20,21
*            => 1,2,3,11,12,13,20,21番のスイッチが対象になる。
*
*   Target Variables [変数番号, ...]
*     共有したい変数の番号を指定します。「,」で区切り複数の値を指定する事ができます。
*     「-」で数値の範囲を指定する事も可能です。
*     (例) 1-3,11,12,13,14,15
*            => 1,2,3,11,12,13,14,15番の変数が対象になる。
*
*   Is Auto [true|false]
*     セーブ・ロード時に自動的に共通セーブデータのセーブ・ロードを行うかを設定します。
*     デフォルトではtrue(セーブ・ロード時に自動的に共有セーブ・ロードを行う)になっています。
*
*   Auto on Gameover [true|false]
*     自動セーブ設定がONの時にゲームオーバー時に共有セーブデータの自動セーブを行うかを設定します。
*     デフォルトではfalse(ゲームオーバー時に自動共有セーブを行わない)になっています。
*
*   Show Trace [true|false]
*     デバッグ用のトレースを出すかを設定します。
*
* ■プラグインコマンド
*   CommonSave load                  # 共有セーブデータからスイッチ・変数を読み込み反映させます。
*                                    # 任意のタイミングで共有セーブデータのロードを行いたい場合に使用します。
*   CommonSave save                  # 共有セーブデータにスイッチ・変数の状態を記録します。
*                                    # 任意のタイミングで共有セーブデータのセーブを行いたい場合に使用します。
*   CommonSave remove                # 共有セーブデータを削除します。
*                                    # 共有セーブデータをリセットしたい場合に使用します。
*   CommonSave setTrace [true|false] # コンソールにトレースを出力するかを設定します。
*                                    # ゲーム実行中にトレース状態を切り替えたい場合に使用します。
*   CommonSave check                 # 共有状態になっているスイッチ・変数番号をコンソールに表示し確認します。
*
* ■更新履歴
*   ver 1.20 (2016.05.11)
*     スイッチ・変数の指定の際に「-」を使う事で範囲指定を可能に。
*     トレース状態を動的に変えられるように setTrace プラグインコマンドを追加。
*     共有対象になっているスイッチ・変数を確認できる check プラグインコマンドを追加。
*
*   ver 1.10 (2016.02.17)
*     ファイル名をUTA_CommonSave.jsに変更。
*     トレース出力の有無をパラメータで設定できるように。
*
*   ver 1.01 (2016.01.14)
*     変数の共有が上手くできていないバグの修正。
*
*   ver 1.00 (2015.12.31)
*     日本語版RPGツクールMVの発売に合わせver1.00に。
*
*   ver 0.01 (2015.11.05)
*     初版。
*/
//=============================================================================

//name space
var utakata = utakata || (utakata = {});

//-----------------------------------------------------------------------------
// class CommonSaveManager
//-----------------------------------------------------------------------------
(function(utakata){
    var CommonSaveManager = (function(){
        //constructor
        function CommonSaveManager(){
            //member variables
            this._targetSwitchList = [];
            this._targetVariableList = [];

            this._showTrace = false;
            this._tr = null;

            this.initialize();
        }

        //private methods
        CommonSaveManager.prototype.initialize = function(){
            this.parameters = PluginManager.parameters('UTA_CommonSave');

            this._showTrace = (String(this.parameters['Show Trace']) === "true");

            this._tr = function(s){
                        if(!this._showTrace){ return; }
                        var str = "CommonSaveManager: " + s; console.log(str);
            };

            var targetSwitchStr = String(this.parameters['Target Switches']);
            var targetVariableStr = String(this.parameters['Target Variables']);

            this._targetSwitchList = this._parseTargetNumber(targetSwitchStr);
            this._targetVariableList = this._parseTargetNumber(targetVariableStr);
        };

        CommonSaveManager.prototype._parseTargetNumber = function(str){
            if(typeof str === "undefined" || str === "undefined"){ return []; }

            str = str.replace(/\s+/g, "");

            var split_str = ',';
            var rgn_split_str = '-';

            var indexes = str.split(split_str, -1);
            var ret = [];

            var parseTargetNumbersFromRegion = function(rgn_target){
                var ret = [];
                var target_number = rgn_target.split(rgn_split_str, -1);
                if(typeof target_number[0] === "undefined" || typeof target_number[1] === "undefined"){ return []; }

                var s_number = parseInt(target_number[0]);
                if(s_number !== s_number){
                    this._tr("_parseTargetNumber getTargetNumbersFromRegion: Setting parameter is invalid.");
                    return [];
                }

                var e_number = parseInt(target_number[1]);
                if(e_number !== e_number){
                    this._tr("_parseTargetNumber getTargetNumbersFromRegion: Setting parameter is invalid.");
                    return [];
                }

                for(var i = s_number; i <= e_number; i++){
                    ret.push(i);
                }

                return ret;
            };

            for(var i = 0; i < indexes.length; i++){
                var rgn_target = indexes.match(/\d+-\d+/g);
                if(!!rgn_target){
                    var parseIndexes = parseTargetNumbersFromRegion(rgn_target[0]);
                    if(parseIndexes.length <= 0){ continue; }

                    ret = ret.concat(parseIndexes);
                }else{
                    var parseIndex = parseInt(indexes);
                    if(parseIndex !== parseIndex){
                        this._tr("_parseTargetNumber: Setting parameter is invalid.");
                        continue;
                    }
                    ret.push(parseIndex);
                }
            }
            return ret;
        };

        CommonSaveManager.prototype._getTargetSwitchJson = function(){
            var json = { };

            for(var i = 0; i < this._targetSwitchList.length; i++){
                var idx = this._targetSwitchList.toString();
                var value = $gameSwitches.value(idx);
                json[idx] = value;
            }

            return json;
        };

        CommonSaveManager.prototype._getTargetVariableJson = function(){
            var json = { };

            for(var i = 0; i < this._targetVariableList.length; i++){
                var idx = this._targetVariableList.toString();
                var value = $gameVariables.value(idx);
                json[idx] = value;
            }

            return json;
        };

        CommonSaveManager.prototype.setLoadSwitches = function(switches){
            for(var key in switches){
                var idx = parseInt(key);
                var value = switches[key];
                $gameSwitches.setValue(idx, value);
            }
        };

        CommonSaveManager.prototype.setLoadVariables = function(variables){
            for(var key in variables){
                var idx = parseInt(key);
                var value = variables[key];
                $gameVariables.setValue(idx, value);
            }
        };

        //public methods
        CommonSaveManager.prototype.load = function(){
            this._tr("load common save data.");

            if(!this.exists()){ return false; }

            var loadData = DataManager.loadCommonSave();

            if("gameSwitches" in loadData){
                this.setLoadSwitches(loadData["gameSwitches"]);
            }
            if("gameVariables" in loadData){
                this.setLoadVariables(loadData["gameVariables"]);
            }
        };

        CommonSaveManager.prototype.save = function(){
            this._tr("save common save data.");

            var switchesJson = this._getTargetSwitchJson();
            var variablesJson = this._getTargetVariableJson();

            var json = { "gameSwitches": switchesJson,
                         "gameVariables": variablesJson };

            DataManager.saveCommonSave(json);
        };

        CommonSaveManager.prototype.exists = function(){
            this._tr("check exists common save data.");
            return StorageManager.existsCommonSave();
        };

        CommonSaveManager.prototype.remove = function(){
            this._tr("remove common save data.");
            StorageManager.removeCommonSave();
        };

        CommonSaveManager.prototype.setShowTrace = function(args){
            if(!args){ return; }
            var enabled = String(args[1]) === "true" ? true : false;
            this._tr("setShowTrace: " + this._showTrace);
            this._showTrace = enabled;
        };

        CommonSaveManager.prototype.check = function(){
            var str = "CommonSaveManager: \n";
            str += " # Share switch targets : \n";
            str += JSON.stringify(this._targetSwitchList);

            str += "\n # Share variable targets : \n";
            str += JSON.stringify(this._targetVariableList);

            console.log(str);
        };

        CommonSaveManager.prototype.isAuto = function(){
            return String(this.parameters['Is Auto']) === "true";
        };

        CommonSaveManager.prototype.isAutoOnGameOver = function(){
            return String(this.parameters['Auto on Gameover']) === "true";
        };

        return CommonSaveManager;
    })();
    utakata.CommonSaveManager = new CommonSaveManager();

})(utakata || (utakata = {}));

(function(){
    //parse and dispatch plugin command
    var _Game_Interpreter_pluginCommand =
            Game_Interpreter.prototype.pluginCommand;
    Game_Interpreter.prototype.pluginCommand = function(command, args){
        _Game_Interpreter_pluginCommand.call(this, command, args);
        if(command === 'CommonSave'){
            switch(args[0]){
                case 'load':
                    utakata.CommonSaveManager.load();
                    break;
                case 'save':
                    utakata.CommonSaveManager.save();
                    break;
                case 'exists':
                    utakata.CommonSaveManager.exists();
                    break;
                case 'remove':
                    utakata.CommonSaveManager.remove();
                    break;
                case 'setTrace':
                    utakata.CommonSaveManager.setShowTrace(args);
                    break;
                case 'check':
                    utakata.CommonSaveManager.check();
                    break;
                default:
                    break;
            }
        }
    };

    //-----------------------------------------------------------------------------
    // DataManager
    //-----------------------------------------------------------------------------
    // # extension
    var _Data_Manager_loadGame = DataManager.loadGame;
    DataManager.loadGame = function(savefileId){
        var ret = _Data_Manager_loadGame.call(this, savefileId);

        if(utakata.CommonSaveManager.isAuto()){ utakata.CommonSaveManager.load(); }
        return ret;
    };

    var _Data_Manager_saveGame = DataManager.saveGame;
    DataManager.saveGame = function(savefileId){
        var ret = _Data_Manager_saveGame.call(this, savefileId);

        if(utakata.CommonSaveManager.isAuto()){ utakata.CommonSaveManager.save(); }
        return ret;
    };

    var _Data_Manager_setupNewGame = DataManager.setupNewGame;
    DataManager.setupNewGame = function(){
        _Data_Manager_setupNewGame.call(this);
        if(utakata.CommonSaveManager.isAuto()){ utakata.CommonSaveManager.load(); }
    };

    // # add methods
    DataManager.loadCommonSave = function(){
        var json;
        try{
            json = StorageManager.loadCommonSave();
        }catch(e){
            console.error(e);
            return [];
        }
        if(json){
            var commonInfo = JSON.parse(json);
            return commonInfo;
        }else{
            return [];
        }
    };

    DataManager.saveCommonSave = function(json){
        var jsonStr = JsonEx.stringify(json);
        if(jsonStr.length >= 200000){
            console.warn('Common Save too big!');
        }
        StorageManager.saveCommonSave(jsonStr);
        return true;
    };

    //-----------------------------------------------------------------------------
    // StorageManager
    //-----------------------------------------------------------------------------
    //load methods ----------------------------------------------------------------
    StorageManager.loadCommonSave = function(){
        if(this.isLocalMode()){
            return this.loadFromLocalFileCommonSave();
        }else{
            return this.loadFromWebStorageCommonSave();
        }
    };

    StorageManager.loadFromLocalFileCommonSave = function(){
        var data = null;
        var fs = require('fs');
        var filePath = this.localFilePathCommonSave();
        if (fs.existsSync(filePath)) {
            data = fs.readFileSync(filePath, { encoding: 'utf8' });
        }
        return LZString.decompressFromBase64(data);
    };

    StorageManager.loadFromWebStorageCommonSave = function(){
        var key = this.webStorageKeyCommonSave();
        var data = localStorage.getItem(key);
        return LZString.decompressFromBase64(data);
    };

    // save methods ---------------------------------------------------------------
    StorageManager.saveCommonSave = function(json){
        if(this.isLocalMode()){
            this.saveToLocalFileCommonSave(json);
        }else{
            this.saveToWebStorageCommonSave(json);
        }
    };

    StorageManager.saveToLocalFileCommonSave = function(json){
        var data = LZString.compressToBase64(json);
        var fs = require('fs');
        var dirPath = this.localFileDirectoryPath();
        var filePath = this.localFilePathCommonSave();
        if (!fs.existsSync(dirPath)) {
            fs.mkdirSync(dirPath);
        }
        fs.writeFileSync(filePath, data);
    };

    StorageManager.saveToWebStorageCommonSave = function(json){
        var key = this.webStorageKeyCommonSave();
        var data = LZString.compressToBase64(json);
        localStorage.setItem(key, data);
    };

    //check exists ----------------------------------------------------------------
    StorageManager.existsCommonSave = function(){
        if(this.isLocalMode()){
            return this.localFileExistsCommonSave();
        }else{
            return this.webStorageExistsCommonSave();
        }
    };

    StorageManager.localFileExistsCommonSave = function(){
        var fs = require('fs');
        return fs.existsSync(this.localFilePathCommonSave());
    };

    StorageManager.webStorageExistsCommonSave = function(){
        var key = this.webStorageKeyCommonSave();
        return !!localStorage.getItem(key);
    };

    //remove ----------------------------------------------------------------------
    StorageManager.removeCommonSave = function(){
        if(this.isLocalMode()){
            this.removeLocalFileCommonSave();
        }else{
            this.removeWebStorageCommonSave();
        }
    };

    StorageManager.removeLocalFileCommonSave = function(){
        var fs = require('fs');
        var filePath = this.localFilePathCommonSave();
        if(fs.existsSync(filePath)){
            fs.unlinkSync(filePath);
        }
    };

    StorageManager.removeWebStorageCommonSave = function(){
        var key = this.webStorageKeyCommonSave();
        localStorage.removeItem(key);
    };

    StorageManager.localFilePathCommonSave = function(){ return this.localFileDirectoryPath() + 'common.rpgsave'; };
    StorageManager.webStorageKeyCommonSave = function(){ return 'RPG Common'; };


    //-----------------------------------------------------------------------------
    // Scene_Gameover
    //-----------------------------------------------------------------------------
    var _Scene_Gameover_Start = Scene_Gameover.prototype.start;
    Scene_Gameover.prototype.start = function(){
        if(utakata.CommonSaveManager.isAutoOnGameOver()){
            utakata.CommonSaveManager.save();
        }
        _Scene_Gameover_Start.call(this);
    };

})();
[/pre]

评分

参与人数 1星屑 +266 收起 理由
余烬之中 + 266 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
72
在线时间
14 小时
注册时间
2016-5-28
回帖
9
 楼主| 发表于 2016-5-30 07:54:43 | 显示全部楼层
tseyik 发表于 2016-5-29 12:21
http://utakata-no-yume.net/gallery/plugin/tkmv/cmn_save/
共有セーブデータ

非常感谢!!看起来正是我所需要的东西!!
马上去试试看!
回复

使用道具 举报

梦石
0
星屑
72
在线时间
14 小时
注册时间
2016-5-28
回帖
9
 楼主| 发表于 2016-5-30 19:31:13 | 显示全部楼层
tseyik 发表于 2016-5-29 12:21
http://utakata-no-yume.net/gallery/plugin/tkmv/cmn_save/
共有セーブデータ

太感谢啦!这个变量设置真心好用!
收集要素或是二周目设定什么的都简单的就能实现,
非常感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部