예제 #1
0
    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);
    }
예제 #2
0
    // 卸下装备
    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);
    }
예제 #3
0
    //吃经验书增加英雄经验
    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>();
        });
    }
예제 #4
0
    // 请求穿戴装备
    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);
    }
예제 #5
0
    // 英雄升星
    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);
        });
    }
예제 #6
0
    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;
            }
        }
    }