Esempio n. 1
0
        protected GCMapGetReward GetRewardById(int rewardId)
        {
            GCMapGetReward  reward        = new GCMapGetReward();
            PBAccountData   accountData   = GetSavedData <PBAccountData>(ACCOUNT_DATA_KEY);
            PBMapPlayerData mapPlayerData = GetSavedData <PBMapPlayerData>(MAP_PLAYER_DATA_KEY);

            reward.AccountId = accountData.Uid;
            reward.PlayerId  = mapPlayerData.PlayerData.PlayerId;
            reward.OldExp    = mapPlayerData.PlayerData.Exp;
            reward.OldLevel  = mapPlayerData.PlayerData.Level;
            RewardTableSetting rewardTable = RewardTableSettings.Get(rewardId);

            reward.AddedExp = rewardTable.exp;
            reward.Diamonds = rewardTable.diamond;
            reward.Gold     = rewardTable.gold;
            reward.Food     = rewardTable.food;
            for (int i = 0; i < rewardTable.ItemList.Count; i++)
            {
                if (UnityEngine.Random.Range(0, 10000) < rewardTable.RewardProbability[i])
                {
                    ItemTableSetting itemTable = ItemTableSettings.Get(rewardTable.ItemList[i]);
                    if (itemTable == null)
                    {
                        continue;
                    }
                    switch ((ItemType)itemTable.Type)
                    {
                    case ItemType.Card:
                        reward.Cards.Add(rewardTable.ItemList[i]);
                        reward.CardTemps.Add(rewardTable.Permanent[i]);
                        break;

                    case ItemType.Equip:
                        reward.Equips.Add(rewardTable.ItemList[i]);
                        reward.EquipTemps.Add(rewardTable.Permanent[i]);
                        break;

                    case ItemType.Skill:
                        //要改
                        reward.Buffs.Add(rewardTable.ItemList[i]);
                        reward.BuffTemps.Add(rewardTable.Permanent[i]);
                        break;

                    case ItemType.Consumable:
                        reward.Items.Add(rewardTable.ItemList[i]);
                        reward.ItemTemps.Add(rewardTable.Permanent[i]);
                        break;

                    default:
                        break;
                    }
                }
            }
            return(reward);
        }
Esempio n. 2
0
    public void Update(PBMapPlayerData mapPlayerData)
    {
        if (Id != mapPlayerData.PlayerData.PlayerId)
        {
            Debug.LogError(Id + "不是一个玩家的数据!" + mapPlayerData.PlayerData.PlayerId);
            return;
        }
        PlayerData playerData = new PlayerData();

        playerData.Update(mapPlayerData.PlayerData);

        if (playerData == null)
        {
            return;
        }
        Name  = playerData.Name;
        Level = playerData.Level;
        Exp   = playerData.Exp;
        LevelTableSetting levelTable = LevelTableSettings.Get(Level);

        if (levelTable != null)
        {
            MaxExp = levelTable.Exp[(int)playerData.ClassData.Type];
        }
        HP            = playerData.HP;
        MaxHP         = playerData.MaxHP;
        MP            = playerData.MP;
        MaxMP         = playerData.MaxMP;
        HeadIcon      = playerData.HeadIcon;
        MapSkillID    = playerData.MapSkillID;
        BattleSkillID = playerData.BattleSkillID;

        UsingCharacter = playerData.UsingCharacter;
        Food           = playerData.Food;
        MaxFood        = playerData.MaxFood;
        Gold           = playerData.Gold;
        for (int i = 0; i < mapPlayerData.Equips.Count; i++)
        {
            m_EquipList.Add(new NormalCard(mapPlayerData.Equips[i], false));
        }
        for (int i = 0; i < mapPlayerData.Buffs.Count; i++)
        {
            m_BuffList.Add(new NormalCard(mapPlayerData.Buffs[i], false));
        }
        m_Deck     = new Deck(mapPlayerData.Deck);
        m_CardList = m_Deck.Cards;
        for (int i = 0; i < mapPlayerData.Items.Count; i++)
        {
            m_ItemList.Add(new ItemData(mapPlayerData.Items[i]));
        }
        ClassData = playerData.ClassData;
    }
Esempio n. 3
0
    public override void Handle(object sender, IMessage packet)
    {
        base.Handle(sender, packet);
        CGExitInstance data = packet as CGExitInstance;
        //处理完数据和逻辑后,发送消息通知客户端
        PBAccountData      accountData      = GetSavedData <PBAccountData>(ACCOUNT_DATA_KEY);
        PBMapPlayerData    mapPlayerData    = GetSavedData <PBMapPlayerData>(MAP_PLAYER_DATA_KEY);
        PBPlayerData       playerData       = GetSavedData <PBPlayerData>(PLAYER_DATA_KEY);
        PBPlayerDetailData playerDetailData = GetSavedData <PBPlayerDetailData>(PLAYER_DETAIL_DATA_KEY);

        if (data.AccountId != accountData.Uid)
        {
            return;
        }
        if (data.PlayerId != playerData.PlayerId)
        {
            return;
        }

        AddExp(playerData, mapPlayerData.AddedExp);
        playerDetailData.Items.Clear();
        playerDetailData.Items.Add(mapPlayerData.Items);
        playerData.Gold += mapPlayerData.PlayerData.Gold;
        playerData.Food += mapPlayerData.PlayerData.Food;
        playerDetailData.Cards.Add(mapPlayerData.RewardCards);
        playerDetailData.Items.Add(mapPlayerData.RewardItems);

        SaveData(MAP_PLAYER_DATA_KEY, null);
        SaveData(PLAYER_DATA_KEY, playerData);
        SaveData(PLAYER_DETAIL_DATA_KEY, playerDetailData);

        GCExitInstance exitInstance = new GCExitInstance();

        exitInstance.AccountId = accountData.Uid;
        exitInstance.PlayerId  = playerData.PlayerId;
        exitInstance.Reason    = data.Reason;
        exitInstance.Gold      = mapPlayerData.PlayerData.Gold;
        exitInstance.Food      = mapPlayerData.PlayerData.Food;
        exitInstance.Cards.Add(mapPlayerData.RewardCards);
        exitInstance.Items.Add(mapPlayerData.RewardItems);

        SendToClient(MessageId_Receive.GCExitInstance, exitInstance);
        GCUpdatePlayerData updatePlayerData = new GCUpdatePlayerData();

        updatePlayerData.AccountData      = accountData;
        updatePlayerData.PlayerData       = playerData;
        updatePlayerData.PlayerDetailData = playerDetailData;
        SendToClient(MessageId_Receive.GCUpdatePlayerData, updatePlayerData);
    }
Esempio n. 4
0
 public void Update(PBMapPlayerData mapPlayerData)
 {
     CurPos = new MapCardPos(mapPlayerData.PlayerPosX, mapPlayerData.PlayerPosY);
     if (m_Data.Id == MapMgr.Instance.MyMapPlayer.Data.Id && m_Data.HP > mapPlayerData.PlayerData.Hp && mapPlayerData.PlayerData.Food == 0)
     {
         //食物没有了,扣血
         Messenger.Broadcast(MessageId.MAP_PLAYER_NO_FOOD_DAMAGE);
     }
     m_InstanceId = mapPlayerData.InstanceId;
     m_Data.Update(mapPlayerData);
     if (m_Data.HP <= 0)
     {
         Messenger.BroadcastAsync <ulong>(MessageId.MAP_PLAYER_DEAD, m_Data.Id);
     }
 }
Esempio n. 5
0
    public override void Handle(object sender, IMessage packet)
    {
        base.Handle(sender, packet);
        CGExitBattle data = packet as CGExitBattle;
        //处理完数据和逻辑后,发送消息通知客户端

        PBAccountData   accountData   = GetSavedData <PBAccountData>(ACCOUNT_DATA_KEY);
        PBMapPlayerData mapPlayerData = GetSavedData <PBMapPlayerData>(MAP_PLAYER_DATA_KEY);

        //战斗结果
        if (data.PlayerData != null)
        {
            mapPlayerData.PlayerData.Hp    = data.PlayerData.Hp;
            mapPlayerData.PlayerData.MaxHp = data.PlayerData.MaxHp;
            mapPlayerData.PlayerData.Mp    = data.PlayerData.Mp;
            mapPlayerData.PlayerData.MaxMp = data.PlayerData.MaxMp;
            mapPlayerData.Items.Clear();
            mapPlayerData.Items.Add(data.Items);
        }

        GCMapGetReward            reward        = null;
        BattleMonsterTableSetting battleMonster = BattleMonsterTableSettings.Get(data.MonsterId);

        switch (data.Reason)
        {
        case 3:    //对方放弃
        case 0:    //通关
            reward = GetRewardById(battleMonster.RewardId);
            break;

        case 1:    //失败
        case 2:    //逃跑,放弃
            reward = GetRewardById(battleMonster.LoseReward);
            break;

        default:
            break;
        }
        if (reward != null)
        {
            //存奖励
            mapPlayerData.AddedExp += reward.AddedExp;
            AddExp(mapPlayerData.PlayerData, reward.AddedExp);
            accountData.Diamonds          += reward.Diamonds;
            mapPlayerData.PlayerData.Gold += reward.Gold;
            mapPlayerData.PlayerData.Food += reward.Food;
            if (reward.Cards.Count > 0)
            {
                mapPlayerData.Cards.Add(reward.Cards);
            }
            if (reward.Equips.Count > 0)
            {
                mapPlayerData.Equips.Add(reward.Equips);
            }
            if (reward.Items.Count > 0)
            {
                mapPlayerData.Items.Add(reward.Items);
            }
            if (reward.Buffs.Count > 0)
            {
                mapPlayerData.Buffs.Add(reward.Items);
            }
            for (int i = 0; i < reward.Cards.Count; i++)
            {
                if (reward.CardTemps[i] == 1)
                {
                    mapPlayerData.RewardCards.Add(reward.Cards[i]);
                }
            }
            for (int i = 0; i < reward.Items.Count; i++)
            {
                if (reward.ItemTemps[i] == 1)
                {
                    mapPlayerData.RewardItems.Add(reward.Items[i]);
                }
            }
            SaveData(ACCOUNT_DATA_KEY, accountData);
            SaveData(MAP_PLAYER_DATA_KEY, mapPlayerData);

            SendToClient(MessageId_Receive.GCMapGetReward, reward);
        }

        GCExitBattle exitBattle = new GCExitBattle();

        exitBattle.MonsterId = data.MonsterId;
        exitBattle.Reason    = data.Reason;
        SendToClient(MessageId_Receive.GCExitBattle, exitBattle);

        GCUpdateMapPlayerData updateMapPlayerData = new GCUpdateMapPlayerData();

        updateMapPlayerData.MapPlayerData = mapPlayerData;
        updateMapPlayerData.PlayerId      = mapPlayerData.PlayerData.PlayerId;

        SendToClient(MessageId_Receive.GCUpdateMapPlayerData, updateMapPlayerData);
    }
    public override void Handle(object sender, IMessage packet)
    {
        base.Handle(sender, packet);
        CGMapApplyEffect data = packet as CGMapApplyEffect;
        //处理完数据和逻辑后,发送消息通知客户端
        PBAccountData      accountData      = GetSavedData <PBAccountData>(ACCOUNT_DATA_KEY);
        PBMapPlayerData    mapPlayerData    = GetSavedData <PBMapPlayerData>(MAP_PLAYER_DATA_KEY);
        PBPlayerData       playerData       = GetSavedData <PBPlayerData>(PLAYER_DATA_KEY);
        PBPlayerDetailData playerDetailData = GetSavedData <PBPlayerDetailData>(PLAYER_DETAIL_DATA_KEY);

        GCMapApplyEffect applyEffect = new GCMapApplyEffect();

        applyEffect.PlayerId = playerData.PlayerId;

        if (data.PlayerId != playerData.PlayerId)
        {
            applyEffect.Result = 1;
            SendToClient(MessageId_Receive.GCMapApplyEffect, applyEffect);
            return;
        }

        switch (data.Action)
        {
        //0结束
        case 0:
            break;

        //1下一个
        case 1:
            break;

        //2选择
        case 2:
            break;

        //3进入战斗
        case 3:
            GCEnterBattle enterBattle = new GCEnterBattle();
            enterBattle.MonsterId = data.Param;
            SendToClient(MessageId_Receive.GCEnterBattle, enterBattle);
            break;

        //4回血
        case 4:
            mapPlayerData.PlayerData.Hp = System.Math.Min(mapPlayerData.PlayerData.Hp + data.Param, mapPlayerData.PlayerData.MaxHp);
            GCUpdateMapPlayerData hpUpdate = new GCUpdateMapPlayerData();
            hpUpdate.PlayerId      = mapPlayerData.PlayerData.PlayerId;
            hpUpdate.MapPlayerData = mapPlayerData;
            SaveData(MAP_PLAYER_DATA_KEY, mapPlayerData);
            SendToClient(MessageId_Receive.GCUpdateMapPlayerData, hpUpdate);
            break;

        //5回魔
        case 5:
            mapPlayerData.PlayerData.Mp = System.Math.Min(mapPlayerData.PlayerData.Mp + data.Param, mapPlayerData.PlayerData.MaxMp);
            GCUpdateMapPlayerData mpUpdate = new GCUpdateMapPlayerData();
            mpUpdate.PlayerId      = mapPlayerData.PlayerData.PlayerId;
            mpUpdate.MapPlayerData = mapPlayerData;
            SaveData(MAP_PLAYER_DATA_KEY, mapPlayerData);
            SendToClient(MessageId_Receive.GCUpdateMapPlayerData, mpUpdate);
            break;

        //6回粮食
        case 6:
            mapPlayerData.PlayerData.Food = System.Math.Min(mapPlayerData.PlayerData.Food + data.Param, mapPlayerData.PlayerData.MaxFood);
            GCUpdateMapPlayerData foodUpdate = new GCUpdateMapPlayerData();
            foodUpdate.PlayerId      = mapPlayerData.PlayerData.PlayerId;
            foodUpdate.MapPlayerData = mapPlayerData;
            SaveData(MAP_PLAYER_DATA_KEY, mapPlayerData);
            SendToClient(MessageId_Receive.GCUpdateMapPlayerData, foodUpdate);
            break;

        //7进入商店
        case 7:
            GCMapEnterShop mapEnterShop = new GCMapEnterShop();
            mapEnterShop.Result = 0;
            mapEnterShop.ShopId = data.Param;
            SendToClient(MessageId_Receive.GCMapEnterShop, mapEnterShop);
            break;

        //8打开宝箱
        case 8:
            GCMapOpenBox openBox = new GCMapOpenBox();
            openBox.Result = 0;
            openBox.BoxId  = data.Param;
            SendToClient(MessageId_Receive.GCMapOpenBox, openBox);
            BoxTableSetting boxTable = BoxTableSettings.Get(data.Param);
            //switch (boxTable.RewardId)
            //{
            //    default:
            //        break;
            //}
            break;

        //9进入下一层
        case 9:
            break;

        default:
            break;
        }



        applyEffect.Result = 0;
        SendToClient(MessageId_Receive.GCMapApplyEffect, applyEffect);
    }
Esempio n. 7
0
    public override void Handle(object sender, IMessage packet)
    {
        base.Handle(sender, packet);
        CGMapPlayerMove data = packet as CGMapPlayerMove;
        //处理完数据和逻辑后,发送消息通知客户端
        GCMapPlayerMove mapPlayerMove = new GCMapPlayerMove();
        PBMapPlayerData mapPlayerData = GetSavedData <PBMapPlayerData>(MAP_PLAYER_DATA_KEY);
        PBMapLayerData  mapLayerData  = GetSavedData <PBMapLayerData>(MAP_LAYER_DATA_KEY);

        mapPlayerMove.PlayerId = mapPlayerData.PlayerData.PlayerId;
        int distance = System.Math.Abs(data.TargetX - mapPlayerData.PlayerPosX) + System.Math.Abs(data.TargetY - mapPlayerData.PlayerPosY);

        if (distance != 1)
        {
            mapPlayerMove.Result = 1;
            SendToClient(MessageId_Receive.GCMapPlayerMove, mapPlayerMove);
            return;
        }
        //位置更新
        mapPlayerData.PlayerPosX = data.TargetX;
        mapPlayerData.PlayerPosY = data.TargetY;
        mapPlayerMove.X          = data.TargetX;
        mapPlayerMove.Y          = data.TargetY;
        //食物血量
        if (mapPlayerData.PlayerData.Food > 0)
        {
            mapPlayerData.PlayerData.Food--;
            mapPlayerData.PlayerData.Hp = Math.Min(mapPlayerData.PlayerData.Hp + 1, mapPlayerData.PlayerData.MaxHp);
        }
        else
        {
            mapPlayerData.PlayerData.Hp--;
            mapPlayerData.PlayerData.Food = 0;
            if (mapPlayerData.PlayerData.Hp <= 0)
            {
                CGExitInstanceHandler exitInstanceHandler = new CGExitInstanceHandler();
                CGExitInstance        exitInstance        = new CGExitInstance();
                exitInstance.AccountId = GetSavedData <PBAccountData>(ACCOUNT_DATA_KEY).Uid;
                exitInstance.PlayerId  = mapPlayerData.PlayerData.PlayerId;
                exitInstance.Reason    = 1;
                exitInstanceHandler.Handle(this, exitInstance);
                return;
            }
        }


        //卡片地图的逻辑触发
        if (mapLayerData.PointState[data.TargetY * mapLayerData.Width + data.TargetX] == 0)
        {
            mapLayerData.PointState[data.TargetY * mapLayerData.Width + data.TargetX] = 1;
        }
        //保存
        SaveData(MAP_PLAYER_DATA_KEY, mapPlayerData);


        mapPlayerMove.Result = 0;
        SendToClient(MessageId_Receive.GCMapPlayerMove, mapPlayerMove);
        GCUpdateMapPlayerData updateMapPlayerData = new GCUpdateMapPlayerData();

        updateMapPlayerData.PlayerId      = mapPlayerData.PlayerData.PlayerId;
        updateMapPlayerData.MapPlayerData = mapPlayerData;
        SendToClient(MessageId_Receive.GCUpdateMapPlayerData, updateMapPlayerData);
    }