设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 76|回复: 0

[转载发布] Skill Seal v1.0

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    2026-7-12 04:10
  • 签到天数: 209 天

    连续签到: 2 天

    [LV.7]常住居民III

    7959

    主题

    864

    回帖

    3万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    29925
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    38778

    灌水之王

    发表于 3 天前 | 显示全部楼层 |阅读模式
    Introduction
    Allows for more control over sealing skills. Additionally, sealed skills may be unsealed, allowing them to be used as per normal.

    How to use
    Save it as APHO_SkillSeal.js and put it in your plugin folder.
    The following notetags are available:
    Skill notetags:
    1. <sealed>
    复制代码
    The skill will always be sealed by default, and may only be used if another effect unseals it.

    Skills, Actors, Classes, Enemies, & States notetags:
    1. <nullseal>
    复制代码
    Nullifies all 'seal skill' or 'seal skill type' effects.
    For skills, affects only that skill; otherwise, affects all user's skills.

    Actors, Classes, Enemies, & States notetags:
    1. <sealp>
    复制代码
    ,
    1. <sealm>
    复制代码
    ,
    1. <sealc>
    复制代码
    Seals all physical, magical, or certain hit skills.
    Excludes skills in the list specified in the plugin parameters.
    1. <sealtag:x>
    复制代码
    Seals all skills with the notetag
    1. <x>
    复制代码
    . Separate multiple tags with a comma.
    1. <sealeval>
    复制代码
    1. //code
    复制代码
    1. </sealeval>
    复制代码
    Evaluates code to determine if skills should be sealed.
    You may use 'skill' for the skill object, 'a' for the skill's user, or excludelist for the exclude list defined in the plugin parameters.
    Must evaluate to either true (sealed) or false (not sealed).
    Spoiler: EXAMPLES
    1. <sealeval>
    复制代码
    1. skill.id % 2 == 0
    复制代码
    1. </sealeval>
    复制代码
    This will seal all skills with an ID divisible by 2 (even ID skills).
    Odd ID skills will still be usable.
    1. <sealeval>
    复制代码
    1. a.hpRate() < 0.5
    复制代码
    1. </sealeval>
    复制代码
    This will seal all skills while the user's HP is below 50%.
    1. <sealeval>
    复制代码
    1. !excludelist.includes(skill.id)
    复制代码
    1. </sealeval>
    复制代码
    If excludelist is not excluded from seal eval, this will seal all skills except those in the excludelist.
    1. <unseal:x>
    复制代码
    Unseals skill ID x. Separate multiple values with a comma.
    1. <unsealtype:x>
    复制代码
    Unseals all skills of skill type x. x is the number of the skill type.
    Separate multiple values with a comma.
    1. <unsealp>
    复制代码
    ,
    1. <unsealm>
    复制代码
    ,
    1. <unsealc>
    复制代码
    Unseals all physical, magical, or certain hit skills.
    1. <unsealtag:x>
    复制代码
    Unseals all skills with the notetag
    1. <x>
    复制代码
    . Separate multiple tags with a comma.
    1. <unsealeval>
    复制代码
    1. //code
    复制代码
    1. </unsealeval>
    复制代码
    Evaluates code to determine if skills should be unsealed.
    You may use 'skill' for the skill object, 'a' for the skill's user, or excludelist for the exclude list defined in the plugin parameters.
    Must evaluate to either true (unsealed) or false (not unsealed).

    Script
    Spoiler: code
                    JavaScript:       
    1. //==========================================
    2. // APHO_SkillSeal.js
    3. //==========================================
    4. /*:
    5. * @title Skill Seal
    6. * @author Apho
    7. * @plugindesc v1.0 Allows for more control over sealing skills.
    8. *
    9. * @param ExcludeFromSeal
    10. * @text Exclude from Sealing
    11. * @type string
    12. * @desc List of skills that should be excluded from sealing. Separate values with a comma. See notes for more details.
    13. * @default 1,2
    14. *
    15. * @param ExcludeFromEval
    16. * @parent ExcludeFromSeal
    17. * @text Exclude from <sealeval>
    18. * @type boolean
    19. * @desc Also exclude from <sealeval>?
    20. * @default true
    21. *
    22. * @help
    23. * Allows for more control over sealing skills. Additionally, sealed skills may
    24. * be unsealed, allowing them to be used as per normal.
    25. *
    26. * The following notetags are available:
    27. * Skill notetags:
    28. * <sealed>
    29. * The skill will always be sealed by default, and may only be used if another
    30. * effect unseals it.
    31. *
    32. * Skills, Actors, Classes, Enemies, & States notetags:
    33. * <nullseal>
    34. * Nullifies all 'seal skill' or 'seal skill type' effects.
    35. * For skills, affects only that skill; otherwise, affects all user's skills.
    36. *
    37. * Actors, Classes, Enemies, & States notetags:
    38. * <sealp>, <sealm>, <sealc>
    39. * Seals all physical, magical, or certain hit skills.
    40. * Excludes skills in the list specified in the plugin parameters.
    41. *
    42. * <sealtag:x>
    43. * Seals all skills with the notetag <x>. Separate multiple tags with a comma.
    44. *
    45. * <sealeval>
    46. * //code
    47. * </sealeval>
    48. * Evaluates code to determine if skills should be sealed.
    49. * You may use 'skill' for the skill object, 'a' for the skill's user, or
    50. * excludelist for the exclude list defined in the plugin parameters.
    51. * Must evaluate to either true (sealed) or false (not sealed).
    52. *
    53. * EXAMPLES:
    54. * <sealeval>
    55. * skill.id % 2 == 0
    56. * </sealeval>
    57. * This will seal all skills with an ID divisible by 2 (even ID skills).
    58. * Odd ID skills will still be usable.
    59. *
    60. * <sealeval>
    61. * a.hpRate() < 0.5
    62. * </sealeval>
    63. * This will seal all skills while the user's HP is below 50%.
    64. *
    65. * <sealeval>
    66. * !excludelist.includes(skill.id)
    67. * </sealeval>
    68. * If excludelist is not excluded from seal eval, this will seal all skills
    69. * except those in the excludelist.
    70. *
    71. * <unseal:x>
    72. * Unseals skill ID x. Separate multiple values with a comma.
    73. *
    74. * <unsealtype:x>
    75. * Unseals all skills of skill type x. x is the number of the skill type.
    76. * Separate multiple values with a comma.
    77. *
    78. * <unsealp>, <unsealm>, <unsealc>
    79. * Unseals all physical, magical, or certain hit skills.
    80. *
    81. * <unsealtag:x>
    82. * Unseals all skills with the notetag <x>. Separate multiple tags with a comma.
    83. *
    84. * <unsealeval>
    85. * //code
    86. * </unsealeval>
    87. * Evaluates code to determine if skills should be unsealed.
    88. * You may use 'skill' for the skill object, 'a' for the skill's user, or
    89. * excludelist for the exclude list defined in the plugin parameters.
    90. * Must evaluate to either true (unsealed) or false (not unsealed).
    91. *
    92. * NOTES
    93. * - Unsealing takes priority over sealing.
    94. * - 'Exclude from Sealing' applies only to sealp/m/c, as well as <sealeval>
    95. * if specified in plugin parameters. You can still seal the skills via the
    96. * default 'seal skill/skill type' functionality or by using any of the other
    97. * sealing notetags.
    98. *
    99. * TERMS OF USE
    100. * - Free for commercial and non-commercial use, as long as I get a free copy
    101. *   of the game.
    102. * - Edits allowed for personal use.
    103. * - Do not repost or claim as your own, even if edited.
    104. *
    105. * VERSION HISTORY
    106. * v1.1 - 2023/12/29 - Compatibility fix for actor cooldowns with Skill Cooldowns Visustella MZ.
    107. * v1.0 - 2023/07/18 - Initial release.
    108. */
    109. (function(){
    110.     var parameters = PluginManager.parameters('APHO_SkillSeal');
    111.     var ExcludeFromSeal = parameters['ExcludeFromSeal'].split(",").map(Number);
    112.     var ExcludeFromEval = JSON.parse(parameters['ExcludeFromEval']);
    113.     var Imported_VisuMZ_3_SkillCooldowns = $plugins.filter(function(p) { return p.name === 'VisuMZ_3_SkillCooldowns' && p.status === true; }).length > 0
    114.     CheckSealEval = function(notetag, skill, a)
    115.     {
    116.         let excludelist = ExcludeFromSeal;
    117.         if(ExcludeFromEval && excludelist.includes(skill.id)) return false;
    118.         const SealEvalOpen = '<sealeval>';
    119.         const SealEvalClose = '</sealeval>';
    120.         let ReadSealEval = false;
    121.         let SealEvalInfo = "";
    122.         for (var n = 0; n < notetag.length; n++)
    123.         {
    124.             let NoteData = notetag.split(/[\r\n]+/);
    125.             let line = NoteData[n];
    126.             if (line && line.match(SealEvalOpen))
    127.             {
    128.                 ReadSealEval = true;
    129.             }
    130.             else if (line && line.match(SealEvalClose))
    131.             {
    132.                 ReadSealEval = false;
    133.             }
    134.             else if (ReadSealEval == true)
    135.             {
    136.                 SealEvalInfo += line + '\n';
    137.             }
    138.         }
    139.         return eval(SealEvalInfo)
    140.     };
    141.     CheckUnsealEval = function(notetag, skill, a)
    142.     {
    143.         let excludelist = ExcludeFromSeal;
    144.         const UnsealEvalOpen = '<unsealeval>';
    145.         const UnsealEvalClose = '</unsealeval>';
    146.         let ReadUnsealEval = false;
    147.         let UnsealEvalInfo = "";
    148.         for (var n = 0; n < notetag.length; n++)
    149.         {
    150.             let NoteData = notetag.split(/[\r\n]+/);
    151.             let line = NoteData[n];
    152.             if (line && line.match(UnsealEvalOpen))
    153.             {
    154.                 ReadUnsealEval = true;
    155.             }
    156.             else if (line && line.match(UnsealEvalClose))
    157.             {
    158.                 ReadUnsealEval = false;
    159.             }
    160.             else if (ReadUnsealEval == true)
    161.             {
    162.                 UnsealEvalInfo += line + '\n';
    163.             }
    164.         }
    165.         return eval(UnsealEvalInfo)
    166.     };
    167.     const Game_BattlerBase_meetsSkillConditions = Game_BattlerBase.prototype.meetsSkillConditions;
    168.     Game_BattlerBase.prototype.meetsSkillConditions = function(skill) {
    169.         if(Imported_VisuMZ_3_SkillCooldowns)
    170.         {
    171.             try
    172.             {
    173.                 if((this.isActor() && $actorGetSkillCooldown(this._actorId, skill.id) > 0))
    174.                 {
    175.                     return false;
    176.                 }
    177.             }catch(e){console.log('VS Skill Cooldown MZ Compatibility Error')}
    178.         }
    179.         let seal = skill.meta.sealed || false;
    180.         if(this.isEnemy())
    181.         {
    182.             if((this.enemy().meta.sealp && skill.hitType == 1) || (this.enemy().meta.sealm && skill.hitType == 2) || (this.enemy().meta.sealc && skill.hitType == 0))
    183.             {
    184.                 if(!ExcludeFromSeal.includes(skill.id)) seal = true;
    185.             }
    186.             if(this.enemy().meta.sealtag)
    187.             {
    188.                 let TagsToSeal = this.enemy().meta.sealtag.split(",");
    189.                 for(var n1 = 0; n1 < TagsToSeal.length; n1++)
    190.                 {
    191.                     if(TagsToSeal[n1] in skill.meta)
    192.                     {
    193.                         seal = true;
    194.                         break;
    195.                     }
    196.                 }
    197.             }
    198.             if(this.enemy().meta.sealeval && !seal) seal = CheckSealEval(this.enemy().note, skill, this);
    199.         }else if(this.isActor())
    200.         {
    201.             if((this.actor().meta.sealp && skill.hitType == 1) || (this.actor().meta.sealm && skill.hitType == 2) || (this.actor().meta.sealc && skill.hitType == 0))
    202.             {
    203.                 if(!ExcludeFromSeal.includes(skill.id)) seal = true;
    204.             }
    205.             if(($dataClasses[this._classId].meta.sealp && skill.hitType == 1) || ($dataClasses[this._classId].meta.sealm && skill.hitType == 2) || ($dataClasses[this._classId].meta.sealc && skill.hitType == 0))
    206.             {
    207.                 if(!ExcludeFromSeal.includes(skill.id)) seal = true;
    208.             }
    209.             if(this.actor().meta.sealtag)
    210.             {
    211.                 let TagsToSeal = this.actor().meta.sealtag.split(",");
    212.                 for(var n1 = 0; n1 < TagsToSeal.length; n1++)
    213.                 {
    214.                     if(TagsToSeal[n1] in skill.meta)
    215.                     {
    216.                         seal = true;
    217.                         break;
    218.                     }
    219.                 }
    220.             }
    221.             if($dataClasses[this._classId].meta.sealtag)
    222.             {
    223.                 let TagsToSeal = $dataClasses[this._classId].meta.sealtag.split(",");
    224.                 for(var n1 = 0; n1 < TagsToSeal.length; n1++)
    225.                 {
    226.                     if(TagsToSeal[n1] in skill.meta)
    227.                     {
    228.                         seal = true;
    229.                         break;
    230.                     }
    231.                 }
    232.             }
    233.             if(this.actor().meta.sealeval && !seal) seal = CheckSealEval(this.actor().note, skill, this);
    234.             if($dataClasses[this._classId].meta.sealeval && !seal) seal = CheckSealEval($dataClasses[this._classId].note, skill, this);
    235.         }
    236.         if(!seal)
    237.         {
    238.             for(var n = 0; n < this.states().length; n++)
    239.             {
    240.                 if((this.states()[n].meta.sealp && skill.hitType == 1) || (this.states()[n].meta.sealm && skill.hitType == 2) || (this.states()[n].meta.sealc && skill.hitType == 0))
    241.                 {
    242.                     if(!ExcludeFromSeal.includes(skill.id))
    243.                     {
    244.                         seal = true;
    245.                         break;
    246.                     }
    247.                 }
    248.                 if(this.states()[n].meta.sealtag)
    249.                 {
    250.                     let TagsToSeal = this.states()[n].meta.sealtag.split(",");
    251.                     for(var n1 = 0; n1 < TagsToSeal.length; n1++)
    252.                     {
    253.                         if(TagsToSeal[n1] in skill.meta)
    254.                         {
    255.                             seal = true;
    256.                             break;
    257.                         }
    258.                         if(seal) break;
    259.                     }
    260.                 }
    261.                 if(this.states()[n].meta.sealeval && !seal)
    262.                 {
    263.                     seal = CheckSealEval(this.states()[n].note, skill, this);
    264.                     if(seal) break;
    265.                 }
    266.             }
    267.         }
    268.         if(!Game_BattlerBase_meetsSkillConditions.call(this, skill) || seal)
    269.         {
    270.             let unseal = skill.meta.nullseal || false;
    271.             if(this.isEnemy())
    272.             {
    273.                 if(this.enemy().meta.nullseal || (this.enemy().meta.unsealp && skill.hitType == 1) || (this.enemy().meta.unsealm && skill.hitType == 2) || (this.enemy().meta.unsealc && skill.hitType == 0)) unseal = true;
    274.                 if(this.enemy().meta.unseal)
    275.                 {
    276.                     let SkillsToUnseal = this.enemy().meta.unseal.split(",");
    277.                     for(var n1 = 0; n1 < SkillsToUnseal.length; n1++)
    278.                     {
    279.                         if(SkillsToUnseal[n1] == skill.id)
    280.                         {
    281.                             unseal = true;
    282.                             break;
    283.                         }
    284.                     }
    285.                 }
    286.                 if(this.enemy().meta.unsealtype)
    287.                 {
    288.                     let TypesToUnseal = this.enemy().meta.unsealtype.split(",");
    289.                     for(var n1 = 0; n1 < TypesToUnseal.length; n1++)
    290.                     {
    291.                         if(TypesToUnseal[n1] == skill.stypeId)
    292.                         {
    293.                             unseal = true;
    294.                             break;
    295.                         }
    296.                     }
    297.                 }
    298.                 if(this.enemy().meta.unsealtag)
    299.                 {
    300.                     let TagsToUnseal = this.enemy().meta.unsealtag.split(",");
    301.                     for(var n1 = 0; n1 < TagsToUnseal.length; n1++)
    302.                     {
    303.                         if(TagsToUnseal[n1] in skill.meta)
    304.                         {
    305.                             unseal = true;
    306.                             break;
    307.                         }
    308.                     }
    309.                 }
    310.                 if(this.enemy().meta.unsealeval && !unseal) unseal = CheckUnsealEval(this.enemy().note, skill, this);
    311.             }else if(this.isActor())
    312.             {
    313.                 if(this.actor().meta.nullseal || $dataClasses[this._classId].meta.nullseal) unseal = true;
    314.                 if(skill.hitType == 1 && (this.actor().meta.unsealp || $dataClasses[this._classId].meta.unsealp)) unseal = true;
    315.                 if(skill.hitType == 2 && (this.actor().meta.unsealm || $dataClasses[this._classId].meta.unsealm)) unseal = true;
    316.                 if(skill.hitType == 0 && (this.actor().meta.unsealc || $dataClasses[this._classId].meta.unsealc)) unseal = true;
    317.                 if(this.actor().meta.unseal)
    318.                 {
    319.                     let SkillsToUnseal = this.actor().meta.unseal.split(",");
    320.                     for(var n1 = 0; n1 < SkillsToUnseal.length; n1++)
    321.                     {
    322.                         if(SkillsToUnseal[n1] == skill.id)
    323.                         {
    324.                             unseal = true;
    325.                             break;
    326.                         }
    327.                     }
    328.                 }
    329.                 if($dataClasses[this._classId].meta.unseal)
    330.                 {
    331.                     let SkillsToUnseal = $dataClasses[this._classId].meta.unseal.split(",");
    332.                     for(var n1 = 0; n1 < SkillsToUnseal.length; n1++)
    333.                     {
    334.                         if(SkillsToUnseal[n1] == skill.id)
    335.                         {
    336.                             unseal = true;
    337.                             break;
    338.                         }
    339.                     }
    340.                 }
    341.                 if(this.actor().meta.unsealtype)
    342.                 {
    343.                     let TypesToUnseal = this.actor().meta.unsealtype.split(",");
    344.                     for(var n1 = 0; n1 < TypesToUnseal.length; n1++)
    345.                     {
    346.                         if(TypesToUnseal[n1] == skill.stypeId)
    347.                         {
    348.                             unseal = true;
    349.                             break;
    350.                         }
    351.                     }
    352.                 }
    353.                 if($dataClasses[this._classId].meta.unsealtype)
    354.                 {
    355.                     let TypesToUnseal = $dataClasses[this._classId].meta.unsealtype.split(",");
    356.                     for(var n1 = 0; n1 < TypesToUnseal.length; n1++)
    357.                     {
    358.                         if(TypesToUnseal[n1] == skill.id)
    359.                         {
    360.                             unseal = true;
    361.                             break;
    362.                         }
    363.                     }
    364.                 }
    365.                 if(this.actor().meta.unsealtag)
    366.                 {
    367.                     let TagsToUnseal = this.actor().meta.unsealtag.split(",");
    368.                     for(var n1 = 0; n1 < TagsToUnseal.length; n1++)
    369.                     {
    370.                         if(TagsToUnseal[n1] in skill.meta)
    371.                         {
    372.                             unseal = true;
    373.                             break;
    374.                         }
    375.                     }
    376.                 }
    377.                 if($dataClasses[this._classId].meta.unsealtag)
    378.                 {
    379.                     let TagsToUnseal = $dataClasses[this._classId].meta.unsealtag.split(",");
    380.                     for(var n1 = 0; n1 < TagsToUnseal.length; n1++)
    381.                     {
    382.                         if(TagsToUnseal[n1] in skill.meta)
    383.                         {
    384.                             unseal = true;
    385.                             break;
    386.                         }
    387.                     }
    388.                 }
    389.                 if(this.actor().meta.unsealeval && !unseal) unseal = CheckUnsealEval(this.actor().note, skill, this);
    390.                 if($dataClasses[this._classId].meta.unseal && !unseal) unseal = CheckUnsealEval($dataClasses[this._classId].note, skill, this);
    391.             }
    392.             if(!unseal)
    393.             {
    394.                 for(var n = 0; n < this.states().length; n++)
    395.                 {
    396.                     if((this.states()[n].meta.nullseal) || (this.states()[n].meta.unsealp && skill.hitType == 1) || (this.states()[n].meta.unsealm && skill.hitType == 2) || (this.states()[n].meta.unsealc && skill.hitType == 0))
    397.                     {
    398.                         unseal = true;
    399.                         break;
    400.                     }
    401.                     if(this.states()[n].meta.unseal)
    402.                     {
    403.                         let SkillsToUnseal = this.states()[n].meta.unseal.split(",");
    404.                         for(var n1 = 0; n1 < SkillsToUnseal.length; n1++)
    405.                         {
    406.                             if(SkillsToUnseal[n1] == skill.id)
    407.                             {
    408.                                 unseal = true;
    409.                                 break;
    410.                             }
    411.                         }
    412.                         if(unseal) break;
    413.                     }
    414.                     if(this.states()[n].meta.unsealtype)
    415.                     {
    416.                         let TypesToUnseal = this.states()[n].meta.unsealtype.split(",");
    417.                         for(var n1 = 0; n1 < TypesToUnseal.length; n1++)
    418.                         {
    419.                             if(TypesToUnseal[n1] == skill.stypeId)
    420.                             {
    421.                                 unseal = true;
    422.                                 break;
    423.                             }
    424.                         }
    425.                         if(unseal) break;
    426.                     }
    427.                     if(this.states()[n].meta.unsealtag)
    428.                     {
    429.                         let TagsToUnseal = this.states()[n].meta.unsealtag.split(",");
    430.                         for(var n1 = 0; n1 < TagsToUnseal.length; n1++)
    431.                         {
    432.                             if(TagsToUnseal[n1] in skill.meta)
    433.                             {
    434.                                 unseal = true;
    435.                                 break;
    436.                             }
    437.                         }
    438.                         if(unseal) break;
    439.                     }
    440.                     if(this.states()[n].meta.unsealeval && !unseal)
    441.                     {
    442.                         unseal = CheckUnsealEval(this.states()[n].note, skill, this);
    443.                         if(unseal) break;
    444.                     }
    445.                 }
    446.             }
    447.             if(!unseal)
    448.             {
    449.                 return false;
    450.             }else if((this.meetsUsableItemConditions(skill) &&
    451.             this.isSkillWtypeOk(skill) && this.canPaySkillCost(skill)))
    452.             {
    453.                 return true;
    454.             }
    455.         }
    456.         return Game_BattlerBase_meetsSkillConditions.call(this, skill);
    457.     };
    458. })();
    复制代码


    Notes

    • Unsealing takes priority over sealing.
    • 'Exclude from Sealing' applies only to sealp/m/c, as well as
      1. <sealeval>
      复制代码
      if specified in plugin parameters. You can still seal the skills via the default 'seal skill/skill type' functionality or by using any of the other sealing notetags.
    Terms of use

    • Free for commercial and non-commercial use, as long as I get a free copy of the game.
    • Edits allowed for personal use.
    • Do not repost or claim as your own, even if edited.
    • Do not use for training AI models. This includes, but is not limited to, inputting the plugin contents or part thereof into AI models that train on user input.
    Version history
    v1.1 - 2023/12/29 - Compatibility fix for actor cooldowns with Skill Cooldowns Visustella MZ.
    v1.0 - 2023/7/18- Initial release.

    Download link
    GitHub


    本贴来自国际rpgmaker官方论坛作者:AphoticAmaranth处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/skill-seal-v1-0.159448/

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-8-1 01:34 , Processed in 0.125873 second(s), 53 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表