//护甲格子点击回调 void OnArmorSlotClick(UIItemSlot slot, PointerEventData eventData) { LocalPlayer localPlayer = Helper.FindLocalPlayer(); if (localPlayer != null && bindEquipment != null) { MouseItem mouseItem = localPlayer.bag.mouseItem; if (mouseItem.hasItem) { //鼠标有物品,则尝试装备 if (mouseItem.item.Type.IsArmor) { ArmorProperties armorProp = EquipTable.GetArmorProp(mouseItem.item.Type.armorId); if (armorProp != null && armorProp.armorType == PlayerEquipment.armorTypes[slot.index]) { //护甲有效,护甲类型匹配,则装备 Item preArmor = null; bindEquipment.PutOnArmor(mouseItem.TakeItem(), slot.index, out preArmor); //穿上护甲 mouseItem.PutItem(preArmor); //鼠标放入之前格子里的护甲 } } else { //鼠标上的不是护甲,什么都不用做 } } else { //鼠标没物品,尝试取下武器,如果没武器,则会得到null mouseItem.PutItem(bindEquipment.TakeOffArmor(slot.index)); } Helper.ShowTips(bindEquipment.Armors[slot.index]); } Helper.MoveWndToFront(transform); }
//穿上装备,如果之前格子里有装备,会移除掉 public bool PutOnArmor(Item armor, int idx, out Item preArmor) { preArmor = null; if (armor == null || !armor.Type.IsArmor) { return(false); } ArmorProperties armorProp = EquipTable.GetArmorProp(armor.Type.armorId); if (armorProp != null && armorProp.armorType == armorTypes[idx]) { //存在装备配置,且类型相同 preArmor = Armors[idx]; Armors[idx] = armor; //加入已装备护甲列表 if (preArmor != null) { ArmorProperties preProp = EquipTable.GetArmorProp(preArmor.Type.armorId); if (preProp != null) { RemoveArmorProp(bindPlayer, preProp); } } AddArmorProp(bindPlayer, armorProp); RaiseEquipChanged(); } return(true); }
//根据类型穿装备,饰品就放在第一个格子里 public bool PutOnArmor(Item armor, out Item preArmor) { preArmor = null; if (armor != null && armor.Type.IsArmor) { ArmorProperties armorProp = EquipTable.GetArmorProp(armor.Type.armorId); for (int i = 0; i < armorTypes.Length; i++) { if (armorProp.armorType == armorTypes[i]) { PutOnArmor(armor, i, out preArmor); return(true); } } } return(false); }
//脱下装备 public Item TakeOffArmor(int idx) { Item preArmor = Armors[idx]; Armors[idx] = null; //从已装备列表中移除 //修改属性 if (preArmor != null) { ArmorProperties preProp = EquipTable.GetArmorProp(preArmor.Type.armorId); if (preProp != null) { RemoveArmorProp(bindPlayer, preProp); } } RaiseEquipChanged(); return(preArmor); }
//重新计算数值 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); } } }
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(); }