public void OnMsgCreateHero(byte[] buffer) { PHeroAttr ret = Net.Deserialize <PHeroAttr>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.CREATE_HERO)) { return; } HeroInfo info = new HeroInfo(); info.Deserialize(ret, false); UserManager.Instance.HeroList.Add(info); Log.Info("添加英雄:" + ret.heroId); }
// 卸下装备 public bool RequestTakeOffEquip(long heroID, long itemID) { HeroInfo heroInfo = GetHeroInfo(heroID); if (heroInfo == null) { return(false); } PUseCommonItem builder = new PUseCommonItem(); builder.heroId = heroID; ItemInfo itemInfo = heroInfo.GetItem(itemID); if (itemInfo == null) { return(false); } PComItem ibuilder = new PComItem(); ibuilder.id = itemID; builder.comItem.Add(ibuilder); NetworkManager.Instance.Send(eCommand.FIT_DOWN_EQUIP, builder, (buffer) => { PHeroAttr ret = Net.Deserialize <PHeroAttr>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.FIT_DOWN_EQUIP)) { return; } // 把装备放到背包里 AddItem(itemInfo, false); heroInfo.Deserialize(ret, true); UIManager.Instance.RefreshWindow <UINewHeroView>(); UIManager.Instance.RefreshWindow <UINewHeroListView>(); }); return(true); }
//吃经验书增加英雄经验 public void RequestUseExpBook(long heroID, long itemID, int number) { HeroInfo info = GetHeroInfo(heroID); if (info == null) { return; } // 英雄等级不能超过玩家的等级 if (info.Level >= Level) { UIUtil.ShowMsgFormat("MSG_HERO_PLAYER_LEVEL_LIMIT"); return; } PUsedExpBook builder = new PUsedExpBook(); builder.heroId = heroID; builder.goodId = itemID; builder.goodNum = number; NetworkManager.Instance.Send(eCommand.USED_EXPBOOK, builder, (buffer) => { PHeroAttr ret = Net.Deserialize <PHeroAttr>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.USED_EXPBOOK)) { return; } info.Deserialize(ret, true); UseItem(itemID, number); UIManager.Instance.RefreshWindow <UINewHeroView>(); UIManager.Instance.RefreshWindow <UINewHeroListView>(); UIManager.Instance.RefreshWindow <UISelectHeroView>(); }); }
// 请求穿戴装备 public bool RequestEquipItem(long heroID, long itemID) { HeroInfo heroInfo = GetHeroInfo(heroID); if (heroInfo == null) { return(false); } if (heroInfo.GetItem(itemID) != null) { // 已经装备 return(false); } ItemInfo itemInfo = GetItem(itemID); if (itemInfo == null) { // 没有物品 return(false); } if (itemInfo.Cfg.Level > heroInfo.Level) { // 等级不足 UIUtil.ShowMsgFormat("MSG_HERO_LEVEL_LIMIT"); return(false); } PUseCommonItem builder = new PUseCommonItem(); builder.heroId = heroID; PComItem ibuilder = new PComItem(); ibuilder.id = itemInfo.EntityID; builder.comItem.Add(ibuilder); NetworkManager.Instance.Send(eCommand.FIT_UP_EQUIP, builder, (buffer) => { PHeroAttr ret = Net.Deserialize <PHeroAttr>(buffer); if (!Net.CheckErrorCode(ret.errorCode, eCommand.FIT_UP_EQUIP)) { return; } // 把旧装备放在背包里面 ItemInfo oldItemInfo = heroInfo.GetItemByType((ItemType)itemInfo.Cfg.Type); if (oldItemInfo != null) { AddItem(oldItemInfo, false); heroInfo.EquipedItem.Remove(oldItemInfo); } // 同步英雄属性 heroInfo.Deserialize(ret, true); // 移除背包内的装备 UseItem(itemID, 1); UIManager.Instance.RefreshWindow <UINewHeroView>(); UIManager.Instance.RefreshWindow <UINewHeroListView>(); }); return(true); }
// 英雄升星 public void RequestHeroUpgradeStar(long heroID) { HeroInfo info = GetHeroInfo(heroID); if (info == null) { return; } if (info.StarLevel >= GameConfig.MAX_HERO_STAR) { // 已经最高星了,无法继续升级 UIUtil.ShowMsgFormat("MSG_HERO_STAR_MAX"); return; } if (!CheckHeroUpgradeStarItem(info)) { UIUtil.ShowMsgFormat("MSG_HERO_UPGRADE_STAR_LIMIT"); return; } PCMLong builder = new PCMLong(); builder.arg = heroID; NetworkManager.Instance.Send(eCommand.HERO_UPGRADE_STAR, builder, (buffer) => { PHeroAttr ret = Net.Deserialize <PHeroAttr>(buffer); Log.Info("英雄升星成功"); if (!Net.CheckErrorCode(ret.errorCode, eCommand.HERO_UPGRADE_STAR)) { return; } HeroInfo heroInfo = GetHeroInfo(heroID); if (heroInfo == null) { return; } int starCost = GetHeroStarUpgradeCost(heroInfo.ConfigID, heroInfo.StarLevel); ItemInfo itemInfo = GetItemByConfigID(heroInfo.Cfg.Cost); if (itemInfo == null || itemInfo.Number < starCost) { Log.Error("碎片不足"); return; } HeroInfo oriHeroInfo = heroInfo.Clone(); // 同步服务器数据 主要是获取新的技能 heroInfo.Deserialize(ret, false); UseItemByConfigID(heroInfo.Cfg.Cost, starCost); UIManager.Instance.RefreshWindow <UINewHeroView>(); UIManager.Instance.RefreshWindow <UINewHeroListView>(); UIManager.Instance.OpenWindow <UIHeroStarRisingSuccView>(oriHeroInfo, heroInfo); }); }
public void Deserialize(PHeroAttr data, bool notifyChange) { EntityID = data.heroId; ConfigID = data.heroCfgId; StarLevel = data.starLv; FightingScore = data.fighting; Exp = data.xiuwei; Level = data.level; EquipedItem.Clear(); foreach (var item in data.fitups) { ItemInfo info = new ItemInfo(); info.Deserialize(item); EquipedItem.Add(info); } LearnedSkill.Clear(); foreach (var item in data.skillList) { SkillInfo info = new SkillInfo(); info.Deserialize(item); LearnedSkill.Add(info); } HeroProperty oldProperty = Property; if (data.basicAttr != null) { Property.Strength = data.basicAttr.strength; Property.Intelligence = data.basicAttr.Intelligence; Property.Leadership = data.basicAttr.LeaderShip; } if (data.battleAttr != null) { Property.Attack = data.battleAttr.physAtk; Property.MagicAttack = data.battleAttr.magicAtk; Property.Hp = data.battleAttr.hp; Property.Def = data.battleAttr.damReduce; Property.Critical = data.battleAttr.criticStrike; Property.Stum = data.battleAttr.damDeepen; Property.AttackSpeed = data.battleAttr.atkSpeed; Property.Cooldown = data.battleAttr.coolDown; } if (notifyChange) { const float delayTimeInterval = 0.2f; float delayTime = 0; if (Property.Strength != oldProperty.Strength) { AddFloatingMsg(Str.Get("ATTR_STR"), Property.Strength - oldProperty.Strength, delayTime); delayTime += delayTimeInterval; } if (Property.Intelligence != oldProperty.Intelligence) { AddFloatingMsg(Str.Get("ATTR_INT"), Property.Intelligence - oldProperty.Intelligence, delayTime); delayTime += delayTimeInterval; } if (Property.Leadership != oldProperty.Leadership) { AddFloatingMsg(Str.Get("ATTR_LEADER"), Property.Leadership - oldProperty.Leadership, delayTime); delayTime += delayTimeInterval; } if (Property.Attack != oldProperty.Attack) { AddFloatingMsg(Str.Get("ATTR_ATTACK"), Property.Attack - oldProperty.Attack, delayTime); delayTime += delayTimeInterval; } if (Property.MagicAttack != oldProperty.MagicAttack) { AddFloatingMsg(Str.Get("ATTR_MAGIC_ATTACK"), Property.MagicAttack - oldProperty.MagicAttack, delayTime); delayTime += delayTimeInterval; } if (Property.Hp != oldProperty.Hp) { AddFloatingMsg(Str.Get("ATTR_HP"), Property.Hp - oldProperty.Hp, delayTime); delayTime += delayTimeInterval; } if (Math.Abs(Property.Def - oldProperty.Def) > 0.01f) { AddFloatingMsg(Str.Get("ATTR_DEF"), Property.Def - oldProperty.Def, delayTime); delayTime += delayTimeInterval; } if (Math.Abs(Property.Critical - oldProperty.Critical) > 0.01f) { AddFloatingMsg(Str.Get("ATTR_CRIT"), Property.Critical - oldProperty.Critical, delayTime); delayTime += delayTimeInterval; } if (Math.Abs(Property.HpSorb - oldProperty.HpSorb) > 0.01f) { AddFloatingMsg(Str.Get("ATTR_HP_SORB"), Property.HpSorb - oldProperty.HpSorb, delayTime); delayTime += delayTimeInterval; } if (Math.Abs(Property.Stum - oldProperty.Stum) > 0.01f) { AddFloatingMsg(Str.Get("ATTR_STUM"), Property.Stum - oldProperty.Stum, delayTime); delayTime += delayTimeInterval; } if (Property.AttackSpeed != oldProperty.AttackSpeed) { AddFloatingMsg(Str.Get("ATTR_ATTACK_SPEED"), Property.AttackSpeed - oldProperty.AttackSpeed, delayTime); delayTime += delayTimeInterval; } if (Math.Abs(Property.Cooldown - oldProperty.Cooldown) > 0.01f) { AddFloatingMsg(Str.Get("ATTR_CD"), Property.Cooldown - oldProperty.Cooldown, delayTime); delayTime += delayTimeInterval; } } }