/// <summary> /// 切换武器 /// </summary> /// <param name="idx"></param> /// <returns></returns> bool SwitchWeapon(int idx) { if (idx < 0 || idx >= weaponAmount) { return(false); } //移除当前使用武器的属性 if (_weapons[curWeaponIdx] != null) { WeaponProperties weaponProp = EquipTable.GetWeaponProp(_weapons[curWeaponIdx].Type.weaponId); if (weaponProp != null) { RemoveWeaponProp(bindPlayer, weaponProp); } } //添加要使用的武器的属性 if (Weapons[idx] != null) { WeaponProperties weaponProp = EquipTable.GetWeaponProp(_weapons[idx].Type.weaponId); if (weaponProp != null) { AddWeaponProp(bindPlayer, weaponProp); } } curWeaponIdx = idx; return(true); }
//重新计算数值 public void RecalcProperties() { if (bindPlayer != null) { bindPlayer.ResetProperties(); foreach (Item armor in Armors) { if (armor != null) { ArmorProperties armorProp = EquipTable.GetArmorProp(armor.Type.armorId); AddArmorProp(bindPlayer, armorProp); } } Item curWeapon = CurWeapon; if (curWeapon != null) { WeaponProperties weaponProp = EquipTable.GetWeaponProp(curWeapon.Type.weaponId); AddWeaponProp(bindPlayer, weaponProp); } } }
/// <summary> /// 装备武器 /// </summary> /// <param name="weapon"></param> /// <param name="idx"></param> /// <param name="preWeapon"></param> /// <returns></returns> public bool PutOnWeapon(Item weapon, int idx, out Item preWeapon) { preWeapon = null; if (idx < 0 || idx >= weaponAmount || weapon == null || !weapon.Type.IsWeapon) { return(false); } WeaponProperties weaponProp = EquipTable.GetWeaponProp(weapon.Type.weaponId); if (weaponProp != null) { //记下原来的武器 if (_weapons[idx] != null) { preWeapon = _weapons[idx]; } //装备新武器 _weapons[idx] = weapon; if (idx == curWeaponIdx) //如果切换的是当前使用武器,则要计算属性 { if (preWeapon != null) {//之前格子里有武器,则移除属性 WeaponProperties preProp = EquipTable.GetWeaponProp(preWeapon.Type.weaponId); if (preProp != null) { RemoveWeaponProp(bindPlayer, preProp); } } //加上新武器的属性 AddWeaponProp(bindPlayer, weaponProp); } RaiseEquipChanged(); } return(true); }
/// <summary> /// 取下武器 /// </summary> /// <param name="idx"></param> /// <returns></returns> public Item TakeOffWeapon(int idx) { if (idx < 0 || idx >= weaponAmount) { return(null); } Item preWeapon = Weapons[idx]; //之前装备的武器 Weapons[idx] = null; //从已装武器列表中移除 if (idx == curWeaponIdx && preWeapon != null) { WeaponProperties weaponProp = EquipTable.GetWeaponProp(preWeapon.Type.weaponId); if (weaponProp != null) { RemoveWeaponProp(bindPlayer, weaponProp); } } RaiseEquipChanged(); return(preWeapon); }
void GenTips(Item item, ShowPrice showPrice = ShowPrice.None) { //name StringBuilder build = new StringBuilder(); switch (item.Type.quality) { case ItemQuality.White: build.Append("<color=white>" + item.Type.itemName); break; case ItemQuality.Green: build.Append("<color=green>" + item.Type.itemName); break; case ItemQuality.Blue: build.Append("<color=blue>" + item.Type.itemName); break; case ItemQuality.Golden: build.Append("<color=orange>" + item.Type.itemName); break; case ItemQuality.Red: build.Append("<color=red>" + item.Type.itemName); break; case ItemQuality.Purple: build.Append("<color=purple>" + item.Type.itemName); break; default: build.Append("<color=white>" + item.Type.itemName); //默认用白色 break; } //叠加数量 if (item.Type.CanStack) { build.Append(" (" + item.amount + ")"); } build.Append("</color>"); build.Append("\n"); //这里附加装备信息 if (item.Type.IsWeapon) { WeaponProperties weaponProp = EquipTable.GetWeaponProp(item.Type.weaponId); if (weaponProp == null) { } else { build.Append("<color=white>"); //攻击 build.Append(string.Format(TextResources.atkFormat, weaponProp.minAtkBonus, weaponProp.maxAtkBonus)); //攻击速率,为间隔的倒数 build.Append(string.Format(TextResources.atkInvervalFormat, 1 / weaponProp.atkInterval)); if (weaponProp.crtlChanceBonus != 0) { //暴击率 build.Append(string.Format(TextResources.crtlChanceFormat, Mathf.Round(weaponProp.crtlChanceBonus * 100))); } if (weaponProp.crtlRateBonus != 0) { //暴击伤害 build.Append(string.Format(TextResources.crtlRateFormat, Mathf.Round(weaponProp.crtlRateBonus * 100))); } if (weaponProp.rcrBonus != 0) { //rcr build.Append(string.Format(TextResources.rcrFormat, Mathf.Round(weaponProp.rcrBonus * 100))); } build.Append("</color>"); } } else if (item.Type.IsArmor) { ArmorProperties armorProp = EquipTable.GetArmorProp(item.Type.armorId); if (armorProp == null) { } else { build.Append("<color=white>"); //防御 build.Append(string.Format(TextResources.defFormat, armorProp.defBonus)); if (armorProp.hpBonus != 0) { //血量 build.Append(string.Format(TextResources.hpFormat, armorProp.hpBonus)); } if (armorProp.minAtkBonus != 0 || armorProp.maxAtkBonus != 0) { //攻击 build.Append(string.Format(TextResources.atkFormat, armorProp.minAtkBonus, armorProp.maxAtkBonus)); } if (armorProp.atkSpdBonus != 0) { //攻速 build.Append(string.Format(TextResources.atkSpdFormat, Mathf.Round((armorProp.atkSpdBonus * 100)))); } if (armorProp.spdScaleBonus != 0) { //速度 build.Append(string.Format(TextResources.spdFormat, Mathf.Round(armorProp.spdScaleBonus * 100))); } if (armorProp.jmpScaleBonus != 0) { //跳跃 build.Append(string.Format(TextResources.jmpFormat, Mathf.Round(armorProp.jmpScaleBonus * 100))); } if (armorProp.crtlChanceBonus != 0) { //暴击率 build.Append(string.Format(TextResources.crtlChanceFormat, Mathf.Round(armorProp.crtlChanceBonus * 100))); } if (armorProp.crtlRateBonus != 0) { //暴击伤害 build.Append(string.Format(TextResources.crtlRateFormat, Mathf.Round(armorProp.crtlRateBonus * 100))); } if (armorProp.rcrBonus != 0) { //rcr build.Append(string.Format(TextResources.rcrFormat, Mathf.Round(armorProp.rcrBonus * 100))); } build.Append("</color>"); } } //附魔属性 //comment build.Append(item.Type.comment); build.Append("\n"); //usability if (item.Type.IsEquipment) { build.Append("equipment"); } if (item.Type.IsConsumable) { build.Append("&consumable"); } //if (item.Type.IsMaterial) //{ // build.Append("&material"); //} //价格显示 switch (showPrice) { case ShowPrice.None: break; case ShowPrice.Buy: build.Append("\n"); build.Append("<color=yellow>"); build.Append("买价: " + item.buyPrice); build.Append("</color>"); break; case ShowPrice.Sell: build.Append("\n"); build.Append("<color=white>"); build.Append("卖价: " + item.sellPrice); build.Append("</color>"); break; } txt.text = build.ToString(); }