public MissionModel(User_MissionFmt fmt, DeckModel deck)
 {
     this._id    = fmt.MissionId;
     this._state = fmt.State;
     this._mst   = Mst_DataManager.Instance.Mst_mission.get_Item(this._id);
     this._deck  = deck;
 }
예제 #2
0
 public MissionModel(User_MissionFmt fmt, DeckModel deck)
 {
     _id    = fmt.MissionId;
     _state = fmt.State;
     _mst   = Mst_DataManager.Instance.Mst_mission[_id];
     _deck  = deck;
 }
        public Api_Result <int> Stop(int deck_rid)
        {
            Api_Result <int> api_Result  = new Api_Result <int>();
            Mem_deck         mem_deck    = Comm_UserDatas.Instance.User_deck.get_Item(deck_rid);
            Mst_mission2     mst_mission = Mst_DataManager.Instance.Mst_mission.get_Item(mem_deck.Mission_id);
            int    num        = mst_mission.Time - (mem_deck.StartTime - mem_deck.CompleteTime);
            double num2       = Math.Ceiling((double)(mst_mission.Time + num) / 2.0);
            int    total_turn = Comm_UserDatas.Instance.User_turn.Total_turn;
            int    num3       = ((double)(total_turn - mem_deck.StartTime) >= num2) ? 2 : 1;
            double num4;

            if (num3 == 1)
            {
                num4 = (double)(total_turn - mem_deck.StartTime);
            }
            else
            {
                num4 = (double)(mem_deck.CompleteTime - total_turn);
            }
            num4 = Math.Ceiling(num4 / 3.0);
            int newEndTime = (int)((double)total_turn + num4);

            mem_deck.MissionStop(newEndTime);
            api_Result.data = mem_deck.StartTime - mem_deck.CompleteTime;
            return(api_Result);
        }
예제 #4
0
        public Api_Result <Mem_deck> Start(int deck_rid, int mission_id, int tankerNum)
        {
            Api_Result <Mem_deck> api_Result = new Api_Result <Mem_deck>();
            Mst_mission2          value      = null;

            if (mission_id > 0)
            {
                if (!Mst_DataManager.Instance.Mst_mission.TryGetValue(mission_id, out value))
                {
                    api_Result.state = Api_Result_State.Parameter_Error;
                    return(api_Result);
                }
            }
            else
            {
                List <Mst_mission2> supportResistedData = Mst_DataManager.Instance.GetSupportResistedData(Comm_UserDatas.Instance.User_deck[deck_rid].Area_id);
                value = ((mission_id != -1) ? supportResistedData[1] : supportResistedData[0]);
            }
            Mem_deck value2 = null;

            if (!Comm_UserDatas.Instance.User_deck.TryGetValue(deck_rid, out value2))
            {
                api_Result.state = Api_Result_State.Parameter_Error;
                return(api_Result);
            }
            if (mission_id > 0 && !Comm_UserDatas.Instance.User_missioncomp.ContainsKey(mission_id))
            {
                Mem_missioncomp mem_missioncomp = new Mem_missioncomp(mission_id, value.Maparea_id, MissionClearKinds.NOTCLEAR);
                mem_missioncomp.Insert();
            }
            if (!value2.MissionStart(value))
            {
                api_Result.state = Api_Result_State.Parameter_Error;
                return(api_Result);
            }
            if (tankerNum > 0)
            {
                IEnumerable <Mem_tanker> enumerable = Mem_tanker.GetFreeTanker(Comm_UserDatas.Instance.User_tanker).Take(tankerNum);
                List <Mem_tanker>        list       = new List <Mem_tanker>();
                foreach (Mem_tanker item in enumerable)
                {
                    if (!item.MissionStart(value.Maparea_id, deck_rid))
                    {
                        list.ForEach(delegate(Mem_tanker x)
                        {
                            x.MissionTerm();
                        });
                        api_Result.state = Api_Result_State.Parameter_Error;
                        return(api_Result);
                    }
                    list.Add(item);
                }
            }
            api_Result.data = value2;
            QuestMission questMission = new QuestMission(value.Id, value2, MissionResultKinds.FAILE);

            questMission.ExecuteCheck();
            return(api_Result);
        }
예제 #5
0
 public Exec_MissionResult(Mem_deck deck, Dictionary <int, int> mst_level, Dictionary <int, int> mst_userlevel)
 {
     this.daihatuNum    = 0;
     this.drumNum       = 0;
     this.drumShipNum   = 0;
     this.mem_deck      = deck;
     this.mst_level     = mst_level;
     this.mst_userlevel = mst_userlevel;
     this.mem_ships     = deck.Ship.getMemShip();
     this.mst_mission   = Mst_DataManager.Instance.Mst_mission.get_Item(deck.Mission_id);
     this.missionTanker = Enumerable.ToList <Mem_tanker>(Enumerable.Where <Mem_tanker>(Comm_UserDatas.Instance.User_tanker.get_Values(), (Mem_tanker x) => x.Mission_deck_rid == deck.Rid));
     this.randInstance  = new Random();
 }
예제 #6
0
 public Exec_MissionResult(Mem_deck deck, Dictionary <int, int> mst_level, Dictionary <int, int> mst_userlevel)
 {
     daihatuNum         = 0;
     drumNum            = 0;
     drumShipNum        = 0;
     mem_deck           = deck;
     this.mst_level     = mst_level;
     this.mst_userlevel = mst_userlevel;
     mem_ships          = deck.Ship.getMemShip();
     mst_mission        = Mst_DataManager.Instance.Mst_mission[deck.Mission_id];
     missionTanker      = (from x in Comm_UserDatas.Instance.User_tanker.Values
                           where x.Mission_deck_rid == deck.Rid
                           select x).ToList();
     randInstance = new Random();
 }
예제 #7
0
        public Api_Result <int> Stop(int deck_rid)
        {
            Api_Result <int> api_Result  = new Api_Result <int>();
            Mem_deck         mem_deck    = Comm_UserDatas.Instance.User_deck[deck_rid];
            Mst_mission2     mst_mission = Mst_DataManager.Instance.Mst_mission[mem_deck.Mission_id];
            int    num        = mst_mission.Time - (mem_deck.StartTime - mem_deck.CompleteTime);
            double num2       = Math.Ceiling((double)(mst_mission.Time + num) / 2.0);
            int    total_turn = Comm_UserDatas.Instance.User_turn.Total_turn;
            int    num3       = ((double)(total_turn - mem_deck.StartTime) < num2) ? 1 : 2;
            double num4       = (num3 != 1) ? ((double)(mem_deck.CompleteTime - total_turn)) : ((double)(total_turn - mem_deck.StartTime));

            num4 = Math.Ceiling(num4 / 3.0);
            int newEndTime = (int)((double)total_turn + num4);

            mem_deck.MissionStop(newEndTime);
            api_Result.data = mem_deck.StartTime - mem_deck.CompleteTime;
            return(api_Result);
        }
예제 #8
0
        public static void MissionOpenToMissionId(int missionId)
        {
            Mst_mission2           master          = Mst_DataManager.Instance.Mst_mission[missionId];
            Mem_missioncomp        mem_missioncomp = new Mem_missioncomp(master.Id, master.Maparea_id, MissionClearKinds.CLEARED);
            List <User_MissionFmt> activeMission   = mem_missioncomp.GetActiveMission();

            if (activeMission.Any((User_MissionFmt x) => x.MissionId == master.Id))
            {
                Mem_missioncomp value = null;
                if (Comm_UserDatas.Instance.User_missioncomp.TryGetValue(missionId, out value))
                {
                    mem_missioncomp.Update();
                }
                else
                {
                    mem_missioncomp.Insert();
                }
                mem_missioncomp.GetActiveMission();
            }
        }
예제 #9
0
        public static void MissionOpenToArea(int areaId)
        {
            IEnumerable <Mst_mission2> enumerable = Enumerable.Where <Mst_mission2>(Mst_DataManager.Instance.Mst_mission.get_Values(), (Mst_mission2 x) => x.Maparea_id == areaId);

            using (IEnumerator <Mst_mission2> enumerator = enumerable.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    Mst_mission2    current         = enumerator.get_Current();
                    Mem_missioncomp mem_missioncomp = new Mem_missioncomp(current.Id, areaId, MissionClearKinds.CLEARED);
                    if (!Comm_UserDatas.Instance.User_missioncomp.ContainsKey(current.Id))
                    {
                        mem_missioncomp.Insert();
                    }
                    else
                    {
                        mem_missioncomp.Update();
                    }
                }
            }
        }
예제 #10
0
        public static void MissionOpenToMissionId(int missionId)
        {
            Mst_mission2           master          = Mst_DataManager.Instance.Mst_mission.get_Item(missionId);
            Mem_missioncomp        mem_missioncomp = new Mem_missioncomp(master.Id, master.Maparea_id, MissionClearKinds.CLEARED);
            List <User_MissionFmt> activeMission   = mem_missioncomp.GetActiveMission();

            if (!Enumerable.Any <User_MissionFmt>(activeMission, (User_MissionFmt x) => x.MissionId == master.Id))
            {
                return;
            }
            Mem_missioncomp mem_missioncomp2 = null;

            if (Comm_UserDatas.Instance.User_missioncomp.TryGetValue(missionId, ref mem_missioncomp2))
            {
                mem_missioncomp.Update();
            }
            else
            {
                mem_missioncomp.Insert();
            }
            mem_missioncomp.GetActiveMission();
        }
예제 #11
0
        public HashSet <IsGoCondition> ValidStart(int deck_rid, int mission_id, int tankerNum)
        {
            HashSet <IsGoCondition> ret         = new HashSet <IsGoCondition>();
            Mst_mission2            mst_mission = null;

            if (mission_id > 0)
            {
                if (!Mst_DataManager.Instance.Mst_mission.TryGetValue(mission_id, out mst_mission))
                {
                    ret.Add(IsGoCondition.Invalid);
                    return(ret);
                }
            }
            else
            {
                if (mission_id != -1 && mission_id != -2)
                {
                    ret.Add(IsGoCondition.Invalid);
                    return(ret);
                }
                List <Mst_mission2> supportResistedData = Mst_DataManager.Instance.GetSupportResistedData(Comm_UserDatas.Instance.User_deck[deck_rid].Area_id);
                mst_mission = ((mission_id != -1) ? supportResistedData[1] : supportResistedData[0]);
            }
            Mem_deck value = null;

            if (!Comm_UserDatas.Instance.User_deck.TryGetValue(deck_rid, out value))
            {
                ret.Add(IsGoCondition.InvalidDeck);
                return(ret);
            }
            if (value.Ship.Count() == 0)
            {
                ret.Add(IsGoCondition.InvalidDeck);
                return(ret);
            }
            if (value.MissionState != 0)
            {
                ret.Add(IsGoCondition.Mission);
            }
            if (value.IsActionEnd)
            {
                ret.Add(IsGoCondition.ActionEndDeck);
                return(ret);
            }
            Mem_ship value2 = null;

            if (!Comm_UserDatas.Instance.User_ship.TryGetValue(value.Ship[0], out value2))
            {
                ret.Add(IsGoCondition.Invalid);
                return(ret);
            }
            if (value2.Get_DamageState() == DamageState.Taiha)
            {
                ret.Add(IsGoCondition.FlagShipTaiha);
            }
            Mem_deck mem_deck = Comm_UserDatas.Instance.User_deck.Values.FirstOrDefault((Mem_deck x) => (x.Mission_id == mission_id) ? true : false);

            if (mem_deck != null)
            {
                ret.Add(IsGoCondition.OtherDeckMissionRunning);
            }
            int destroy_ship = 0;

            value.Ship.getMemShip().ForEach(delegate(Mem_ship deck_ship)
            {
                if (deck_ship.Stype == 2)
                {
                    destroy_ship++;
                }
                Mst_ship mst_ship = Mst_DataManager.Instance.Mst_ship[deck_ship.Ship_id];
                if (deck_ship.Fuel <= 0 || deck_ship.Bull <= 0)
                {
                    ret.Add(IsGoCondition.NeedSupply);
                }
                if (mst_mission.IsSupportMission() && (deck_ship.Fuel < mst_ship.Fuel_max || deck_ship.Bull < mst_ship.Bull_max))
                {
                    ret.Add(IsGoCondition.ReqFullSupply);
                }
                if (Comm_UserDatas.Instance.User_ndock.Values.Any((Mem_ndock ndock) => ndock.Ship_id == deck_ship.Rid))
                {
                    ret.Add(IsGoCondition.HasRepair);
                }
                if (deck_ship.IsBlingShip())
                {
                    ret.Add(IsGoCondition.HasBling);
                }
            });
            if (mst_mission.IsSupportMission() && destroy_ship < 2)
            {
                ret.Add(IsGoCondition.NecessaryStype);
            }
            List <Mem_tanker> freeTanker = Mem_tanker.GetFreeTanker(Comm_UserDatas.Instance.User_tanker);

            if (freeTanker.Count < tankerNum)
            {
                ret.Add(IsGoCondition.Tanker);
            }
            return(ret);
        }
        public HashSet <IsGoCondition> ValidStart(int deck_rid, int mission_id, int tankerNum)
        {
            HashSet <IsGoCondition> ret         = new HashSet <IsGoCondition>();
            Mst_mission2            mst_mission = null;

            if (mission_id > 0)
            {
                if (!Mst_DataManager.Instance.Mst_mission.TryGetValue(mission_id, ref mst_mission))
                {
                    ret.Add(IsGoCondition.Invalid);
                    return(ret);
                }
            }
            else
            {
                if (mission_id != -1 && mission_id != -2)
                {
                    ret.Add(IsGoCondition.Invalid);
                    return(ret);
                }
                List <Mst_mission2> supportResistedData = Mst_DataManager.Instance.GetSupportResistedData(Comm_UserDatas.Instance.User_deck.get_Item(deck_rid).Area_id);
                mst_mission = ((mission_id != -1) ? supportResistedData.get_Item(1) : supportResistedData.get_Item(0));
            }
            Mem_deck mem_deck = null;

            if (!Comm_UserDatas.Instance.User_deck.TryGetValue(deck_rid, ref mem_deck))
            {
                ret.Add(IsGoCondition.InvalidDeck);
                return(ret);
            }
            if (mem_deck.Ship.Count() == 0)
            {
                ret.Add(IsGoCondition.InvalidDeck);
                return(ret);
            }
            if (mem_deck.MissionState != MissionStates.NONE)
            {
                ret.Add(IsGoCondition.Mission);
            }
            if (mem_deck.IsActionEnd)
            {
                ret.Add(IsGoCondition.ActionEndDeck);
                return(ret);
            }
            Mem_ship mem_ship = null;

            if (!Comm_UserDatas.Instance.User_ship.TryGetValue(mem_deck.Ship[0], ref mem_ship))
            {
                ret.Add(IsGoCondition.Invalid);
                return(ret);
            }
            if (mem_ship.Get_DamageState() == DamageState.Taiha)
            {
                ret.Add(IsGoCondition.FlagShipTaiha);
            }
            Mem_deck mem_deck2 = Enumerable.FirstOrDefault <Mem_deck>(Comm_UserDatas.Instance.User_deck.get_Values(), (Mem_deck x) => x.Mission_id == mission_id);

            if (mem_deck2 != null)
            {
                ret.Add(IsGoCondition.OtherDeckMissionRunning);
            }
            int destroy_ship = 0;

            mem_deck.Ship.getMemShip().ForEach(delegate(Mem_ship deck_ship)
            {
                if (deck_ship.Stype == 2)
                {
                    destroy_ship++;
                }
                Mst_ship mst_ship = Mst_DataManager.Instance.Mst_ship.get_Item(deck_ship.Ship_id);
                if (deck_ship.Fuel <= 0 || deck_ship.Bull <= 0)
                {
                    ret.Add(IsGoCondition.NeedSupply);
                }
                if (mst_mission.IsSupportMission() && (deck_ship.Fuel < mst_ship.Fuel_max || deck_ship.Bull < mst_ship.Bull_max))
                {
                    ret.Add(IsGoCondition.ReqFullSupply);
                }
                if (Enumerable.Any <Mem_ndock>(Comm_UserDatas.Instance.User_ndock.get_Values(), (Mem_ndock ndock) => ndock.Ship_id == deck_ship.Rid))
                {
                    ret.Add(IsGoCondition.HasRepair);
                }
                if (deck_ship.IsBlingShip())
                {
                    ret.Add(IsGoCondition.HasBling);
                }
            });
            if (mst_mission.IsSupportMission() && destroy_ship < 2)
            {
                ret.Add(IsGoCondition.NecessaryStype);
            }
            List <Mem_tanker> freeTanker = Mem_tanker.GetFreeTanker(Comm_UserDatas.Instance.User_tanker);

            if (freeTanker.get_Count() < tankerNum)
            {
                ret.Add(IsGoCondition.Tanker);
            }
            return(ret);
        }
        public Api_Result <Mem_deck> Start(int deck_rid, int mission_id, int tankerNum)
        {
            Api_Result <Mem_deck> api_Result  = new Api_Result <Mem_deck>();
            Mst_mission2          mst_mission = null;

            if (mission_id > 0)
            {
                if (!Mst_DataManager.Instance.Mst_mission.TryGetValue(mission_id, ref mst_mission))
                {
                    api_Result.state = Api_Result_State.Parameter_Error;
                    return(api_Result);
                }
            }
            else
            {
                List <Mst_mission2> supportResistedData = Mst_DataManager.Instance.GetSupportResistedData(Comm_UserDatas.Instance.User_deck.get_Item(deck_rid).Area_id);
                mst_mission = ((mission_id != -1) ? supportResistedData.get_Item(1) : supportResistedData.get_Item(0));
            }
            Mem_deck mem_deck = null;

            if (!Comm_UserDatas.Instance.User_deck.TryGetValue(deck_rid, ref mem_deck))
            {
                api_Result.state = Api_Result_State.Parameter_Error;
                return(api_Result);
            }
            if (mission_id > 0 && !Comm_UserDatas.Instance.User_missioncomp.ContainsKey(mission_id))
            {
                Mem_missioncomp mem_missioncomp = new Mem_missioncomp(mission_id, mst_mission.Maparea_id, MissionClearKinds.NOTCLEAR);
                mem_missioncomp.Insert();
            }
            if (!mem_deck.MissionStart(mst_mission))
            {
                api_Result.state = Api_Result_State.Parameter_Error;
                return(api_Result);
            }
            if (tankerNum > 0)
            {
                IEnumerable <Mem_tanker> enumerable = Enumerable.Take <Mem_tanker>(Mem_tanker.GetFreeTanker(Comm_UserDatas.Instance.User_tanker), tankerNum);
                List <Mem_tanker>        list       = new List <Mem_tanker>();
                using (IEnumerator <Mem_tanker> enumerator = enumerable.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        Mem_tanker current = enumerator.get_Current();
                        if (!current.MissionStart(mst_mission.Maparea_id, deck_rid))
                        {
                            list.ForEach(delegate(Mem_tanker x)
                            {
                                x.MissionTerm();
                            });
                            api_Result.state = Api_Result_State.Parameter_Error;
                            return(api_Result);
                        }
                        list.Add(current);
                    }
                }
            }
            api_Result.data = mem_deck;
            QuestMission questMission = new QuestMission(mst_mission.Id, mem_deck, MissionResultKinds.FAILE);

            questMission.ExecuteCheck();
            return(api_Result);
        }