Project1

标题: 请问如何设置角色装备一个物品后改职业 [打印本页]

作者: ccArtermices    时间: 2019-7-25 17:12
标题: 请问如何设置角色装备一个物品后改职业
请问如何设置角色装备一个物品后改职业,然后卸下后变回原来职业?
作者: 白嫩白嫩的    时间: 2019-7-25 21:22
公共事件分歧判断

当装备【空虚飞机杯】 时  转换职业 为 假面骑士

否则 转换职业为  原职业 【剑客】

但这样子好像要一直扫描判断,比较消耗资源  
作者: ccArtermices    时间: 2019-7-26 19:42
白嫩白嫩的 发表于 2019-7-25 21:22
公共事件分歧判断

当装备【空虚飞机杯】 时  转换职业 为 假面骑士

我试了不行,而且如你所说要一直扫描,这样很消耗资源
作者: 多卡多卡    时间: 2019-7-26 20:38
本帖最后由 多卡多卡 于 2019-7-26 21:00 编辑

JAVASCRIPT 代码复制
  1. var slot_Id = 1;
  2. var _Game_Actor_changeEquip = Game_Actor.prototype.changeEquip;
  3. Game_Actor.prototype.changeEquip = function (slotId, item) {
  4.     slotId == (slot_Id - 1) ? (item == null ? this._classId = 1 : (this.actorId() == 1 ? (item.wtypeId != undefined ? (item.id == 1 ? this._classId = 2 : this._classId = 1) : 0) : 0)) : 0;
  5.     _Game_Actor_changeEquip.call(this, slotId, item);
  6. }
  7.  
  8. var _Game_Actor_discardEquip = Game_Actor.prototype.discardEquip;
  9. Game_Actor.prototype.discardEquip = function (item) {
  10.     (slot_Id - 1) == this.equips().indexOf(item) ? (item == null ? this._classId = 1 : 0) : 0;
  11.     _Game_Actor_discardEquip.call(this, item);
  12. };

slot_Id = 1,1为第几个装备栏
item.wtypeId,武器为wtypeId,防具为atypeId。
this._classId = 1,1为原来的职业,2为更改后的职业。
this.actorId() == 1,1为角色Id。
根据需要自己修改就行了

作者: ccArtermices    时间: 2019-7-27 10:19
多卡多卡 发表于 2019-7-26 20:38
var slot_Id = 1;
var _Game_Actor_changeEquip = Game_Actor.prototype.changeEquip;
Game_Actor.prototy ...

好的,谢谢!
作者: ccArtermices    时间: 2019-7-28 15:54
多卡多卡 发表于 2019-7-26 20:38
var slot_Id = 1;
var _Game_Actor_changeEquip = Game_Actor.prototype.changeEquip;
Game_Actor.prototy ...

你好,我的项目是有很多个防具,然后这些防具都对应一个职业,装备了之后变成这个职业,但是大神你给我的脚本好像不能实现这个功能,我改成了ifelse格式也不行哦
  1. /* @help
  2. * =========================================================
  3. * 该脚本可以让角色装备某一准备后更改状态
  4. * 目前是更改职业
  5. * 2019.7.27
  6. * from project 1 多卡多卡
  7. * slot_Id = 1,1为第几个装备栏
  8. * item.wtypeId,武器为wtypeId,防具为atypeId。
  9. * this._classId = 1,1为原来的职业,2为更改后的职业。
  10. * this.actorId() == 1,1为角色Id。
  11. * 根据需要自己修改就行了
  12. * =========================================================
  13. */

  14. var slot_Id = 5; //1:武器;2:盾;3.头部;4.身体;5: 职业金属;6.饰品
  15. var _Game_Actor_changeEquip = Game_Actor.prototype.changeEquip;
  16. Game_Actor.prototype.changeEquip = function (slotId, item) {
  17.     slotId == (slot_Id - 1) ? (item == null ? this._classId = 15 : (this.actorId() == 1 ? (item.atypeId != undefined ? (item.id == 2 ? this._classId = 16 : this._classId = 1) : 0) : 0)) : 0;
  18.                 slotId == (slot_Id - 1) ? (item == null ? this._classId = 15 : (this.actorId() == 1 ? (item.atypeId != undefined ? (item.id == 3 ? this._classId = 17 : this._classId = 1) : 0) : 0)) : 0;

  19. //    if(slotId == (slot_Id - 1)){
  20. //            if(item==null){
  21. //                    this._classId=15;
  22. //            }else{
  23. //                    if(this.actorId()==1){
  24. //                            // sb
  25. //                            if(item.atypeId != undefined){
  26. //                                    if(item.id == 2){
  27. //                                            this._classId = 16;
  28. //                                    }else{
  29. //                                            this._classId = 15;
  30. //                                    }
  31. //                            }else{
  32. //                                    slotId=0;
  33. //                            }
  34. //                    }else if(this.actorId()==7){
  35. //                            // Kima Sett
  36. //                           
  37. //                    }else if(this.actorId()==8){
  38. //                            // Sheejack Lee
  39. //                           
  40. //                    }else if(this.actorId()==9){
  41. //                            // Tanny Pabick
  42. //                           
  43. //                    }else if(this.actorId()==10){
  44. //                            // Suchen Nara
  45. //                           
  46. //                    }else{
  47. //                           
  48. //                            slotId=0;
  49. //                    }
  50. //                   
  51. //            }
  52. //    }else{
  53. //            slotId=0;
  54. //    }
  55.     _Game_Actor_changeEquip.call(this, slotId, item);
  56. }

  57. var _Game_Actor_discardEquip = Game_Actor.prototype.discardEquip;
  58. Game_Actor.prototype.discardEquip = function (item) {
  59.     (slot_Id - 1) == this.equips().indexOf(item) ? (item == null ? this._classId = 15 : 0) : 0;
  60.     _Game_Actor_discardEquip.call(this, item);
  61. };
复制代码

作者: 多卡多卡    时间: 2019-7-28 16:10
ccArtermices 发表于 2019-7-28 15:54
你好,我的项目是有很多个防具,然后这些防具都对应一个职业,装备了之后变成这个职业,但是大神你给我的 ...

如果要实现换一个防具就切换一个职业的话,这个实现起来就比较困难了,我试试看能不能做出来
作者: ccArtermices    时间: 2019-7-28 19:26
多卡多卡 发表于 2019-7-28 16:10
如果要实现换一个防具就切换一个职业的话,这个实现起来就比较困难了,我试试看能不能做出来 ...

好的,谢谢!
作者: 多卡多卡    时间: 2019-7-28 20:47
本帖最后由 多卡多卡 于 2019-7-31 22:30 编辑

这个就可以实现切换装备的同时切换职业了,如果脱下装备或者换了普通的装备,就会切回原来的职业。
JAVASCRIPT 代码复制
  1. //=============================================================================
  2. // Doka_ChangeClassWithEquip.js
  3. // by 多卡多卡 on 2019/7/28
  4. //=============================================================================
  5.  
  6. /*:
  7.  * @plugindesc 换装切换职业
  8.  * @author 多卡多卡
  9.  *
  10.  * @param 装备-1
  11.  * @type struct<Equip>
  12.  * @desc 装备的详细配置信息。
  13.  * @default
  14.  *
  15.  * @param 装备-2
  16.  * @type struct<Equip>
  17.  * @desc 装备的详细配置信息。
  18.  * @default
  19.  *
  20.  * @param 装备-3
  21.  * @type struct<Equip>
  22.  * @desc 装备的详细配置信息。
  23.  * @default
  24.  *
  25.  * @param 装备-4
  26.  * @type struct<Equip>
  27.  * @desc 装备的详细配置信息。
  28.  * @default
  29.  *
  30.  * @param 装备-5
  31.  * @type struct<Equip>
  32.  * @desc 装备的详细配置信息。
  33.  * @default
  34.  *
  35.  * @param 装备-6
  36.  * @type struct<Equip>
  37.  * @desc 装备的详细配置信息。
  38.  * @default
  39.  *
  40.  * @param 装备-7
  41.  * @type struct<Equip>
  42.  * @desc 装备的详细配置信息。
  43.  * @default
  44.  *
  45.  * @param 装备-8
  46.  * @type struct<Equip>
  47.  * @desc 装备的详细配置信息。
  48.  * @default
  49.  *
  50.  * @param 装备-9
  51.  * @type struct<Equip>
  52.  * @desc 装备的详细配置信息。
  53.  * @default
  54.  *
  55.  * @param 装备-10
  56.  * @type struct<Equip>
  57.  * @desc 装备的详细配置信息。
  58.  * @default
  59.  *
  60.  * @param 装备-11
  61.  * @type struct<Equip>
  62.  * @desc 装备的详细配置信息。
  63.  * @default
  64.  *
  65.  * @param 装备-12
  66.  * @type struct<Equip>
  67.  * @desc 装备的详细配置信息。
  68.  * @default
  69.  *
  70.  * @param 装备-13
  71.  * @type struct<Equip>
  72.  * @desc 装备的详细配置信息。
  73.  * @default
  74.  *
  75.  * @param 装备-14
  76.  * @type struct<Equip>
  77.  * @desc 装备的详细配置信息。
  78.  * @default
  79.  *
  80.  * @param 装备-15
  81.  * @type struct<Equip>
  82.  * @desc 装备的详细配置信息。
  83.  * @default
  84.  *
  85.  * @param 装备-16
  86.  * @type struct<Equip>
  87.  * @desc 装备的详细配置信息。
  88.  * @default
  89.  *
  90.  * @param 装备-17
  91.  * @type struct<Equip>
  92.  * @desc 装备的详细配置信息。
  93.  * @default
  94.  *
  95.  * @param 装备-18
  96.  * @type struct<Equip>
  97.  * @desc 装备的详细配置信息。
  98.  * @default
  99.  *
  100.  * @param 装备-19
  101.  * @type struct<Equip>
  102.  * @desc 装备的详细配置信息。
  103.  * @default
  104.  *
  105.  * @param 装备-20
  106.  * @type struct<Equip>
  107.  * @desc 装备的详细配置信息。
  108.  * @default
  109.  *
  110.  * @help
  111.  * 切换装备可以同时切换职业
  112.  * 当换上一件装备时,如果可以变更职业,
  113.  * 那么职业将会转变成装备对应的职业。
  114.  * 如果脱下装备或换上一件普通的装备,
  115.  * 那么职业将会切换会原来的职业
  116.  */
  117. /*~struct~Equip:
  118.  *
  119.  * @param 切换职业
  120.  * @desc 切换装备后的职业
  121.  * @type class
  122.  * @default 0  
  123.  *
  124.  * @param 装备类型
  125.  * @type boolean
  126.  * @on 武器
  127.  * @off 防具
  128.  * @desc 装备的类型
  129.  * @default true
  130.  *
  131.  * @param ----装备Id----
  132.  * @default
  133.  *
  134.  * @param 武器Id
  135.  * @parent ----装备Id----
  136.  * @type weapon
  137.  * @desc 武器的Id(仅当装备类型为武器时生效)
  138.  * @default 0
  139.  *
  140.  * @param 防具Id
  141.  * @parent ----装备Id----
  142.  * @type armor
  143.  * @desc 防具的Id(仅当装备类型为防具时生效)
  144.  * @default 0
  145.  */
  146.  
  147. var Imported = Imported || {};
  148. Imported.Doka_ChangeClassWithEquip = true;
  149. var Doka_ChangeClassWithEquip = Doka_ChangeClassWithEquip || {};
  150.  
  151. Doka_ChangeClassWithEquip.parameters = PluginManager.parameters('Doka_ChangeClassWithEquip');
  152. Doka_ChangeClassWithEquip.MaxEquip = 20;
  153. Doka_ChangeClassWithEquip.Equips = [];
  154.  
  155. for (var i = 0; i < Doka_ChangeClassWithEquip.MaxEquip; i++) {
  156.     if (Doka_ChangeClassWithEquip.parameters['装备-' + String(i + 1)] != "") {
  157.         Doka_ChangeClassWithEquip.Equips[i] = JSON.parse(Doka_ChangeClassWithEquip.parameters['装备-' + String(i + 1)]);  //不知道这个有什么用,先抄下来
  158.         Doka_ChangeClassWithEquip.Equips[i]['Later Class'] = Number(Doka_ChangeClassWithEquip.Equips[i]['切换职业']);
  159.         Doka_ChangeClassWithEquip.Equips[i]['Type'] = String(Doka_ChangeClassWithEquip.Equips[i]["装备类型"] || "true") == "true";
  160.         Doka_ChangeClassWithEquip.Equips[i]['Weapon Id'] = Number(Doka_ChangeClassWithEquip.Equips[i]['武器Id']);
  161.         Doka_ChangeClassWithEquip.Equips[i]['Armor Id'] = Number(Doka_ChangeClassWithEquip.Equips[i]['防具Id']);
  162.     }
  163.     else {
  164.         Doka_ChangeClassWithEquip.Equips[i] = [];
  165.     }
  166. }
  167.  
  168. var Doka_Game_Actor_initMembers = Game_Actor.prototype.initMembers;
  169. Game_Actor.prototype.initMembers = function () {
  170.     Doka_Game_Actor_initMembers.call(this);
  171.     this.initOriginClass();
  172. };
  173.  
  174. Game_Actor.prototype.initOriginClass = function () {
  175.     if (!this._originClass) {
  176.         this._originClass = 0;
  177.     }
  178. };
  179.  
  180. var Doka_Game_Actor_changeEquip = Game_Actor.prototype.changeEquip;
  181. Game_Actor.prototype.changeEquip = function (slotId, item) {
  182.     for (var i = 0; i <= Doka_ChangeClassWithEquip.MaxEquip; i++) {
  183.         if (i < Doka_ChangeClassWithEquip.MaxEquip && this.equips()[slotId] != null && Doka_ChangeClassWithEquip.Equips[i]['Type'] != undefined) {
  184.             if ((Doka_ChangeClassWithEquip.Equips[i]['Type'] && (this.equips()[slotId].wtypeId != undefined && this.equips()[slotId].id != Doka_ChangeClassWithEquip.Equips[i]['Weapon Id']))
  185.                 || (!Doka_ChangeClassWithEquip.Equips[i]['Type'] && (this.equips()[slotId].atypeId != undefined && this.equips()[slotId].id != Doka_ChangeClassWithEquip.Equips[i]['Armor Id'])))
  186.             this._originClass = this._classId;
  187.         }
  188.     }
  189.     Doka_Game_Actor_changeEquip.call(this, slotId, item);
  190.     for (var i = 0; i <= Doka_ChangeClassWithEquip.MaxEquip; i++) {
  191.         if (i < Doka_ChangeClassWithEquip.MaxEquip && this.equips()[slotId] != null && Doka_ChangeClassWithEquip.Equips[i]['Type'] != undefined)
  192.         {
  193.             if ((Doka_ChangeClassWithEquip.Equips[i]['Type'] && this.equips()[slotId].wtypeId != undefined && this.equips()[slotId].id == Doka_ChangeClassWithEquip.Equips[i]['Weapon Id'])
  194.                 || (!Doka_ChangeClassWithEquip.Equips[i]['Type'] && this.equips()[slotId].atypeId != undefined && this.equips()[slotId].id == Doka_ChangeClassWithEquip.Equips[i]['Armor Id']))
  195.             {
  196.                 this._originClass = this._classId;
  197.                 this._classId = Doka_ChangeClassWithEquip.Equips[i]['Later Class']; break;
  198.             }
  199.         }
  200.         Doka_ChangeClassWithEquip.MaxEquip == i ? this._classId = this._originClass : 0;
  201.     }  
  202. }


如果20个装备不够的话,可以自己加

Doka_ChangeClassWithEquip.zip

1.41 KB, 下载次数: 126


作者: ccArtermices    时间: 2019-7-31 21:25
多卡多卡 发表于 2019-7-28 20:47
这个就可以实现切换装备的同时切换职业了,如果脱下装备或者换了普通的装备,就会切回原来的职业。
//===== ...

多神,这个脚本使用后只要角色一装备物品就会出现 cannot read property 'params' of null的错误,如何破啊?
作者: 多卡多卡    时间: 2019-7-31 21:59
本帖最后由 多卡多卡 于 2019-7-31 22:29 编辑
ccArtermices 发表于 2019-7-31 21:25
多神,这个脚本使用后只要角色一装备物品就会出现 cannot read property 'params' of null的错误,如何破 ...


要将角色原来的职业储存起来比较麻烦,现在改过了不会报错了,并且关闭后重新读档也能切回原来的职业,可以看看之前的代码,已经改过了
(临时变量果然不靠谱,还是全局变量稳些)

作者: ccArtermices    时间: 2019-8-1 09:31
多卡多卡 发表于 2019-7-31 21:59
要将角色原来的职业储存起来比较麻烦,现在改过了不会报错了,并且关闭后重新读档也能切回原来的职业,可 ...

好的,我再回去试试看
作者: 中华国哥    时间: 2019-8-1 09:35
口以试一下waynee95的插件,WAY_CustonOnEquipEval(还需way的核心插件),口以设定装备或脱下装备时执行某些脚本。

<Custom On Equip Eval>
code
</Custom On Equip Eval>

https://github.com/waynee95/mv-plugins/tree/master/dist
作者: ccArtermices    时间: 2019-8-14 20:34
多卡多卡 发表于 2019-7-31 21:59
要将角色原来的职业储存起来比较麻烦,现在改过了不会报错了,并且关闭后重新读档也能切回原来的职业,可 ...

多神,还是不行,还是会报那个错,而这个报错一般是发生在没有装备可以改变职业的物品的角色上,这些角色的默认职业是“无职业”,这些“无职业”的角色装备上一些武器或者准备空的武器对象就会报这个错
作者: ccArtermices    时间: 2019-8-14 20:53
中华国哥 发表于 2019-8-1 09:35
口以试一下waynee95的插件,WAY_CustonOnEquipEval(还需way的核心插件),口以设定装备或脱下装备时执行某 ...

我看不是很懂这些脚本的help,可以解释一下吗?比如我要在code中设置更改actor的职业,应该怎么写?a.xx=yy吗?
作者: 多卡多卡    时间: 2019-8-14 21:38
ccArtermices 发表于 2019-8-14 20:34
多神,还是不行,还是会报那个错,而这个报错一般是发生在没有装备可以改变职业的物品的角色上,这些角色 ...

当初你要求脱下装备恢复原来的职业,在制作时就在换装前记录下原来的职业。如果原来就是无职业,那么肯定就会报错了。所以建议保留基础职业(村民,新手之类的),再进行转职操作,而不是从无职业开始。
作者: battlehero    时间: 2020-5-3 16:34
偶然间看到大神的那个换装备切换职业的脚本 正好用得上但是有一个问题 如果因为某个装备改变了职业 脱下来后 职业不会变化 而且仅仅只是改变了职业的称呼 技能啥的都没有变化 并且 改了职业后 无法获得经验值 至少我通过事件无法获得经验




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1