加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
最近做游戏的时候遇到个问题,就是双手武器和双持武器的一些冲突,查找论坛里以前的老帖子,也没解决。然后自己花了点时间终于解决了,把代码发上来,大家帮我看看还可以怎么改进。
以下代码适用条件为人物已开启双刀流特性,但是可装备的武器里有单手武器和双手武器的情况。
Game_Actor.prototype.changeEquip = function(slotId, item) { if (this.tradeItemWithParty(item, this.equips()[slotId]) ){//为了增加代码可读性,我把原始的判定条件分拆了 if(item==null){//不装备的情况如下【不单独列出该条件则会发生null的错误】 this._equips[slotId].setObject(null); }else{ if(this.equipSlots()[slotId] === item.etypeId){ if(item.etypeId==1&&item.wtypeId==[b]6[/b]){//我的双手武器的wtypeId是6,你可以把加粗数字改成你的双手武器编号 if(slotId==0){//如果要装备的武器栏是第一条 this._equips[0].setObject(item);//则对武器栏1的武器进行调换 this.tradeItemWithParty(null,this.equips()[1]);//将武器栏2的物品放回背包 this._equips[1].setObject(null);//将武器栏2的武器强制卸除 }else if(slotId==1){//如果要装备的武器栏是第二条 this._equips[1].setObject(item);//则对武器栏2的武器进行调换 this.tradeItemWithParty(null,this.equips()[0]);//将武器栏1的物品放回背包 this._equips[0].setObject(null);//将武器栏1的武器强制卸除 } }else{ this._equips[slotId].setObject(item);//如果你要装备的栏位不是武器栏或者要装备的武器不是双手武器的情况,则进行正常装备操作 if(this.equips()[0]!=null&&this.equips()[1]!=null){//对两个武器栏进行判定,是否全都装备着武器【不单独列出该条件则会发生null的错误】 if(slotId==0&&this.equips()[1].wtypeId==[b]6[/b]){//如果要装备的栏位是1,并且武器栏2已装备的武器是双手武器,此处6为双手武器的编号 this.tradeItemWithParty(null,this.equips()[1]);//将武器栏2的双手武器放回背包 this._equips[1].setObject(null);//将武器栏2的双手武器强制卸除 }else if(slotId==1&&this.equips()[0].wtypeId==[b]6[/b]){//如果要装备的栏位是2,并且武器栏1已装备的武器是双手武器,此处6为双手武器的编号 this.tradeItemWithParty(null,this.equips()[0]);//将武器栏1的双手武器放回背包 this._equips[0].setObject(null);//将武器栏1的双手武器强制卸除 } } } } } this.refresh; } };
Game_Actor.prototype.changeEquip = function(slotId, item) {
if (this.tradeItemWithParty(item, this.equips()[slotId]) ){//为了增加代码可读性,我把原始的判定条件分拆了
if(item==null){//不装备的情况如下【不单独列出该条件则会发生null的错误】
this._equips[slotId].setObject(null);
}else{
if(this.equipSlots()[slotId] === item.etypeId){
if(item.etypeId==1&&item.wtypeId==[b]6[/b]){//我的双手武器的wtypeId是6,你可以把加粗数字改成你的双手武器编号
if(slotId==0){//如果要装备的武器栏是第一条
this._equips[0].setObject(item);//则对武器栏1的武器进行调换
this.tradeItemWithParty(null,this.equips()[1]);//将武器栏2的物品放回背包
this._equips[1].setObject(null);//将武器栏2的武器强制卸除
}else if(slotId==1){//如果要装备的武器栏是第二条
this._equips[1].setObject(item);//则对武器栏2的武器进行调换
this.tradeItemWithParty(null,this.equips()[0]);//将武器栏1的物品放回背包
this._equips[0].setObject(null);//将武器栏1的武器强制卸除
}
}else{
this._equips[slotId].setObject(item);//如果你要装备的栏位不是武器栏或者要装备的武器不是双手武器的情况,则进行正常装备操作
if(this.equips()[0]!=null&&this.equips()[1]!=null){//对两个武器栏进行判定,是否全都装备着武器【不单独列出该条件则会发生null的错误】
if(slotId==0&&this.equips()[1].wtypeId==[b]6[/b]){//如果要装备的栏位是1,并且武器栏2已装备的武器是双手武器,此处6为双手武器的编号
this.tradeItemWithParty(null,this.equips()[1]);//将武器栏2的双手武器放回背包
this._equips[1].setObject(null);//将武器栏2的双手武器强制卸除
}else if(slotId==1&&this.equips()[0].wtypeId==[b]6[/b]){//如果要装备的栏位是2,并且武器栏1已装备的武器是双手武器,此处6为双手武器的编号
this.tradeItemWithParty(null,this.equips()[0]);//将武器栏1的双手武器放回背包
this._equips[0].setObject(null);//将武器栏1的双手武器强制卸除
}
}
}
}
}
this.refresh;
}
};
另外,我想让角色装备双手武器的时候,默认的攻击选项变成全体攻击,我直接修改Game_BattlerBase.prototype.attackSkillId的话能起效,但是我不知道怎么把武器判定跟这个attackSkillId放在一起,望大神赐教。 |