public static GameLevel_VictoryProto ToProto(byte[] buffer)
 {
     using (MMO_MemoryStream ms = new MMO_MemoryStream(buffer))
     {
         GameLevel_VictoryProto proto = new GameLevel_VictoryProto();
         proto.GameLevelId      = ms.ReadInt();
         proto.Grade            = (byte)ms.ReadByte();
         proto.Star             = (byte)ms.ReadByte();
         proto.Exp              = ms.ReadInt();
         proto.Gold             = ms.ReadInt();
         proto.KillMonsterCount = ms.ReadInt();
         for (int i = 0; i < proto.KillMonsterCount; i++)
         {
             MonsterItem monsterItem = new MonsterItem();
             monsterItem.MonsterId    = ms.ReadInt();
             monsterItem.MonsterCount = ms.ReadInt();
             proto.KillMonsterList.Add(monsterItem);
         }
         proto.ReceiveGoodsCount = ms.ReadInt();
         for (int i = 0; i < proto.ReceiveGoodsCount; i++)
         {
             ReceiveGoodsItem goodsItem = new ReceiveGoodsItem();
             goodsItem.GoodsType  = (byte)ms.ReadByte();
             goodsItem.GoodsId    = ms.ReadInt();
             goodsItem.GoodsCount = ms.ReadInt();
             proto.ReceiveGoodsList.Add(goodsItem);
         }
         return(proto);
     }
 }
    public static GameLevel_VictoryProto GetProto(byte[] buffer)
    {
        GameLevel_VictoryProto proto = new GameLevel_VictoryProto();

        using (MMO_MemoryStream ms = new MMO_MemoryStream(buffer))
        {
            proto.GameLevelId           = ms.ReadInt();
            proto.Grade                 = (byte)ms.ReadByte();
            proto.Star                  = (byte)ms.ReadByte();
            proto.Exp                   = ms.ReadInt();
            proto.Gold                  = ms.ReadInt();
            proto.KillTotalMonsterCount = ms.ReadInt();
            proto.KillMonsterList       = new List <MonsterItem>();
            for (int i = 0; i < proto.KillTotalMonsterCount; i++)
            {
                MonsterItem _KillMonster = new MonsterItem();
                _KillMonster.MonsterId    = ms.ReadInt();
                _KillMonster.MonsterCount = ms.ReadInt();
                proto.KillMonsterList.Add(_KillMonster);
            }
            proto.GoodsTotalCount = ms.ReadInt();
            proto.GetGoodsList    = new List <GoodsItem>();
            for (int i = 0; i < proto.GoodsTotalCount; i++)
            {
                GoodsItem _GetGoods = new GoodsItem();
                _GetGoods.GoodsType  = (byte)ms.ReadByte();
                _GetGoods.GoodsId    = ms.ReadInt();
                _GetGoods.GoodsCount = ms.ReadInt();
                proto.GetGoodsList.Add(_GetGoods);
            }
        }
        return(proto);
    }
예제 #3
0
    /// <summary>
    /// 打开关卡胜利页面
    /// </summary>
    private void OpenGameLevelVictoryView()
    {
        m_GameLevelVictoryView = UIViewUtil.Instance.OpenWindow(UIViewType.GameLevelVictory).GetComponent <UIGameLevelVictoryView>();
        m_GameLevelVictoryView.OnReturnWorldScene = OnClickGameLevelVictoryViewReturnWorldSceneButton;
        GameLevelEntity      levelEnitiy = GameLevelDBModel.Instance.Get(m_GameLevelSceneId);
        GameLevelGradeEntity gradeEnitiy = GameLevelGradeDBModel.Instance.GetEnityByLevelIdAndGrade(m_GameLevelSceneId, m_Garade);

        if (levelEnitiy == null || gradeEnitiy == null)
        {
            return;
        }
        DataTransfer data = new DataTransfer();

        data.SetData(ConstDefine.GameLevelRewardGold, gradeEnitiy.Gold);
        data.SetData(ConstDefine.GameLevelRewardExp, gradeEnitiy.Exp);
        data.SetData(ConstDefine.GameLevelPassTime, CurPassTime);
        int star = 1;

        if (CurPassTime < gradeEnitiy.Star2)
        {
            star = 3;
        }
        else if (CurPassTime < gradeEnitiy.Star1)
        {
            star = 2;
        }
        data.SetData(ConstDefine.GameLevelStarCount, star);

        List <GoodsEntity> rewards = new List <GoodsEntity>();

        //可以放在服务器里面计算,为了简单就直接在这计算了
        //装备
        rewards.Clear();
        int                ranmdom01   = UnityEngine.Random.Range(0, 100);
        DataTransfer       equipData   = new DataTransfer();
        List <GoodsEntity> equipEnitys = gradeEnitiy.RewardEquipList;

        for (int i = 0; i < equipEnitys.Count; i++)
        {
            if (ranmdom01 < equipEnitys[i].GoodsProbability)
            {
                rewards.Add(equipEnitys[i]);
            }
        }
        GoodsEntity equipEnity = equipEnitys[UnityEngine.Random.Range(0, rewards.Count)];

        if (equipEnity != null)
        {
            equipData.SetData(ConstDefine.GameLevelGoodsId, equipEnity.GoodsId);
            equipData.SetData(ConstDefine.GameLevelGoodsName, equipEnity.GoodsName);
            equipData.SetData(ConstDefine.GameLevelGoodsProbability, equipEnity.GoodsProbability);
            equipData.SetData(ConstDefine.GameLevelGoodsCount, equipEnity.GoodsCount);
            data.SetData(ConstDefine.GameLevelRewardEquip, equipData);
            CurGameLevelGetGoodsList.Add(new GetGoodsEntity()
            {
                GoodsId = equipEnity.GoodsId, GoodsCount = 1, GoodsType = 0
            });
        }


        //道具
        rewards.Clear();
        int                ranmdom02  = UnityEngine.Random.Range(0, 100);
        DataTransfer       itemData   = new DataTransfer();
        List <GoodsEntity> itemEnitys = gradeEnitiy.RewardItemList;

        for (int i = 0; i < itemEnitys.Count; i++)
        {
            if (ranmdom02 < itemEnitys[i].GoodsProbability)
            {
                rewards.Add(itemEnitys[i]);
            }
        }
        GoodsEntity itemEnity = itemEnitys[UnityEngine.Random.Range(0, rewards.Count)];

        if (itemEnity != null)
        {
            itemData.SetData(ConstDefine.GameLevelGoodsId, itemEnity.GoodsId);
            itemData.SetData(ConstDefine.GameLevelGoodsName, itemEnity.GoodsName);
            itemData.SetData(ConstDefine.GameLevelGoodsProbability, itemEnity.GoodsProbability);
            itemData.SetData(ConstDefine.GameLevelGoodsCount, itemEnity.GoodsCount);
            data.SetData(ConstDefine.GameLevelRewardItem, itemData);
            CurGameLevelGetGoodsList.Add(new GetGoodsEntity()
            {
                GoodsId = itemEnity.GoodsId, GoodsCount = 1, GoodsType = 1
            });
        }
        //材料
        rewards.Clear();
        int                ranmdom03     = UnityEngine.Random.Range(0, 100);
        DataTransfer       materiaData   = new DataTransfer();
        List <GoodsEntity> materiaEnitys = gradeEnitiy.RewardMateriaList;

        for (int i = 0; i < materiaEnitys.Count; i++)
        {
            if (ranmdom03 < materiaEnitys[i].GoodsProbability)
            {
                rewards.Add(materiaEnitys[i]);
            }
        }
        GoodsEntity materiaEnity = materiaEnitys[UnityEngine.Random.Range(0, rewards.Count)];

        if (materiaEnity != null)
        {
            materiaData.SetData(ConstDefine.GameLevelGoodsId, materiaEnity.GoodsId);
            materiaData.SetData(ConstDefine.GameLevelGoodsName, materiaEnity.GoodsName);
            materiaData.SetData(ConstDefine.GameLevelGoodsProbability, materiaEnity.GoodsProbability);
            materiaData.SetData(ConstDefine.GameLevelGoodsCount, materiaEnity.GoodsCount);
            data.SetData(ConstDefine.GameLevelRewardMaterial, materiaData);
            CurGameLevelGetGoodsList.Add(new GetGoodsEntity()
            {
                GoodsId = materiaEnity.GoodsId, GoodsCount = 1, GoodsType = 2
            });
        }
        m_GameLevelVictoryView.SetUI(data);

        CurGameLevelTotalExp  += gradeEnitiy.Exp;
        CurGameLevelTotalGold += gradeEnitiy.Gold;
        GameLevel_VictoryProto proto = new GameLevel_VictoryProto();

        proto.GameLevelId = m_GameLevelSceneId;
        proto.Grade       = (byte)m_Garade;
        proto.Star        = (byte)star;
        proto.Exp         = CurGameLevelTotalExp;
        proto.Gold        = CurGameLevelTotalGold;
        foreach (var item in CurGameLevelKillMonsterDic)
        {
            GameLevel_VictoryProto.MonsterItem monster = new GameLevel_VictoryProto.MonsterItem();
            monster.MonsterId    = item.Key;
            monster.MonsterCount = item.Value;
            proto.KillMonsterList.Add(monster);
        }
        foreach (var item in CurGameLevelGetGoodsList)
        {
            GameLevel_VictoryProto.ReceiveGoodsItem goods = new GameLevel_VictoryProto.ReceiveGoodsItem();
            goods.GoodsType  = item.GoodsType;
            goods.GoodsId    = item.GoodsId;
            goods.GoodsCount = item.GoodsCount;
            proto.ReceiveGoodsList.Add(goods);
        }
        NetWorkSocket.Instance.SendMsg(proto.ToArray());
    }