예제 #1
0
        object ISaveable.CaptureState()
        {
            RemoveDestroyedDrops();
            var droppedItemsList = new List <DropRecord>();
            int buildIndex       = SceneManager.GetActiveScene().buildIndex;

            foreach (var scene in SceneManager.GetAllScenes())
            {
                if (scene.buildIndex != (int)Scenes.PersistantScene)
                {
                    buildIndex = scene.buildIndex;
                }
            }

            foreach (Pickup pickup in droppedItems)
            {
                var droppedItem = new DropRecord();
                droppedItem.itemID          = pickup.GetItem().GetItemID();
                droppedItem.position        = new SerializableVector3(pickup.transform.position);
                droppedItem.number          = pickup.GetNumber();
                droppedItem.sceneBuildIndex = buildIndex;
                droppedItemsList.Add(droppedItem);
            }
            droppedItemsList.AddRange(otherSceneDroppedItems);
            return(droppedItemsList);
        }
예제 #2
0
        ///////////////////////////// INTERFACES ////////////////////////////////////////////

        public object CaptureState()
        {
            //Makes sure we don't save destroyed items
            RemoveDestroyedDrops();

            //Create a new list and get the scene index
            var droppedItemList = new List <DropRecord>();
            var buildIndex      = SceneManager.GetActiveScene().buildIndex;

            //Loop through the drop items list and store items.
            foreach (Pickup pickup in m_DroppedItems)
            {
                var droppeditem = new DropRecord();

                droppeditem.itemID     = pickup.GetItem().GetItemID();
                droppeditem.position   = new SerializableVector3(pickup.transform.position);
                droppeditem.number     = pickup.GetNumber();
                droppeditem.sceneIndex = buildIndex;

                droppedItemList.Add(droppeditem);
            }

            //Merge with items from other scenes
            droppedItemList.AddRange(m_OtherSceneDroppedItems);
            return(droppedItemList);
        }
예제 #3
0
        object ISaveable.CaptureState()
        {
            RemoveDestroyedDrops();
            var droppedItemsList = new DropRecord[droppedItems.Count];

            for (int i = 0; i < droppedItemsList.Length; i++)
            {
                droppedItemsList[i].itemID   = droppedItems[i].GetItem().GetItemID();
                droppedItemsList[i].position = new SerializableVector3(droppedItems[i].transform.position);
                droppedItemsList[i].number   = droppedItems[i].GetNumber();
            }
            return(droppedItemsList);
        }
예제 #4
0
 //追加
 public static void AddDataBase(int dropshipid, int dropitemid, string mapname, string enemyfleetname)
 {
     if (AddingBlock) return;
     //戦闘状態のチェック
     BattleView view = APIBattle.BattleView;
     if (view == null) return;
     if (view.Situation != BattleSituation.EndBattle && view.Situation == BattleSituation.EndCombinedBattle) return;
     //追加を拒否している状態をチェック
     if (Config.DropRecordAddDisable) return;
     //infoチェック
     //名前とレベルゲット用の関数を作成
     Func<int, string> getShipName = delegate(int shipid)
     {
         if(shipid == -1) return "";
         if(!APIPort.ShipsDictionary.ContainsKey(shipid)) return "";
         ApiShip oship = APIPort.ShipsDictionary[shipid];
         if (oship.ShipName == null) return "";
         return oship.ShipName;
     };
     Func<int, int> getShipLevel = delegate(int shipid)
     {
         if(shipid == -1) return -1;
         if(!APIPort.ShipsDictionary.ContainsKey(shipid)) return -1;
         return APIPort.ShipsDictionary[shipid].api_lv;
     };
     //マップの難易度
     int difficulty = 0;
     if(APIGetMember.MapInfo != null)
     {
         var map_query = APIGetMember.MapInfo.Where(x => x.api_id == view.AreaID * 10 + view.MapID);
         if(map_query.Count() != 0)
         {
             var target_map = map_query.First();
             if (target_map.api_eventmap != null) difficulty = target_map.api_eventmap.api_selected_rank;
         }
     }
     //改造艦を含めて存在する個数
     int shipexists_remodeling = 0;
     if (dropshipid != -1)
     {
         //調査する船のID
         List<int> checkid = new List<int>();
         checkid.Add(dropshipid);
         //該当艦のノードを取る
         if (!KanmusuRemodelingTable.IsInited) KanmusuRemodelingTable.Init();
         KanmusuRemodelingTable.KanmusuRemodelingNode node;
         if(KanmusuRemodelingTable.Nodes.TryGetValue(dropshipid, out node))
         {
             var prev = node.Previous;
             while(prev != null)
             {
                 if (prev.Data == null) break;
                 checkid.Add(prev.Data.api_id);
                 prev = prev.Previous;
             }
             var next = node.Next;
             while(next != null)
             {
                 if (next.Data == null) break;//ループ改装対策の対策用
                 checkid.Add(next.Data.api_id);
                 next = next.Next;
             }
         }
         //存在する個数
         foreach(var check in checkid)
         {
             foreach(var x in APIPort.ShipsDictionary.Values)
             {
                 if (x.api_ship_id == check)
                 {
                     shipexists_remodeling++;
                 }
             }
         }
     }
     //ドロップアイテムが既に存在するか
     bool dropitemexsits = false;
     Useitem dropuseitemobj = null;
     if(dropitemid != -1 && dropitemid >= 0)
     {
         var query = APIGetMember.Useitems.Where(x => x.api_id == dropitemid);
         if(query.Count() >= 1)
         {
             dropuseitemobj = query.First();
             dropitemexsits = dropuseitemobj.api_count >= 1;
         }
     }
     //DBアイテムの作成
     DropRecord drop = new DropRecord()
     {
         //マップ情報
         MapAreaID = view.AreaID,
         MapInfoID = view.MapID,
         MapCellID = view.CellID,
         //ボス戦かどうか
         BossFlag = view.BossFlag == 2 ? true : false,//2がボス戦で1が雑魚戦
         WinRank = view.WinRank,
         //マップ関係
         HQLevel = APIPort.Basic.api_level,
         MapDifficulty = difficulty,
         //ドロップ(船)
         DropShipFlag = dropshipid != -1,
         DropShipID = dropshipid,
         DropShipAlreadyExists = (dropshipid != -1) ? APIPort.ShipsDictionary.Values.Select(x => x.api_ship_id).Contains(dropshipid) : false,
         DropShipAlreadyExistsContainsRemodeling = shipexists_remodeling > 0,//2016/2追加
         DropShipNumOfExistsContainsRemodeling = shipexists_remodeling,//2016/2追加
         //アイテム
         DropItemFlag = dropitemid != -1,
         DropItemID = dropitemid,
         DropItemAlreadyExists = dropitemexsits,//2015/10/10修正
         //艦隊所属艦
         FleetShipName = APIPort.DeckPorts[APIReqMap.SallyDeckPort -1 ].api_ship.Select(getShipName).Where(x => x != "").ToArray(),
         FleetShipLevel =APIPort.DeckPorts[APIReqMap.SallyDeckPort -1 ].api_ship.Select(getShipLevel).Where(x => x!= -1).ToArray(),
         //連合艦隊所属艦
         FleetCombinedShipName = !view.IsCombined ? null :
             APIPort.DeckPorts[Math.Min(APIReqMap.SallyDeckPort, APIPort.DeckPorts.Count -1)].api_ship.Select(getShipName).Where(x => x != "").ToArray(),
         FleetCombinedShipLevel = !view.IsCombined ? null :
             APIPort.DeckPorts[Math.Min(APIReqMap.SallyDeckPort, APIPort.DeckPorts.Count -1)].api_ship.Select(getShipLevel).Where(x => x!= -1).ToArray(),
         //日時
         DropDate = DateTime.Now,
         //敵のID
         //EnemyFleetID = view.EnemyID, 2015/7/17で廃止
         EnemyFleetLocalID = view.EnemyLocalID,
         EnemyFleetLocalShortID = view.EnemyLocalShortID,
         //ドロップを封じているかどうか
         DropDisabled = !((APIPort.ShipsDictionary.Count < APIPort.Basic.api_max_chara) && //キャラの条件
                          (APIPort.Basic.api_max_slotitem
                             - APIGetMember.GetSlotitemNumOnSortie()//装備空きが3より大きい場合落ちる(maxslot + 3 で最大装備数)
                             > 0)),
     };
     //DBに追加
     Collection.DataBase.Add(drop);
     //--マスターデータに船の名前を追加
     if(dropshipid != -1) Collection.MasterDropShipHeader[dropshipid] = APIMaster.MstShips[dropshipid].api_name;
     //--マスターデータにアイテムの名前を追加
     if (dropuseitemobj != null) Collection.MasterDropItemHeader[dropitemid] = dropuseitemobj.api_name;
     //--マスターデータのヘッダーに追加しインデックスの作成
     DropRecordCollection.MasterHeader mstheader = Collection.MasterMapHeader;
     //エリアの取得
     DropRecordCollection.MasterHeaderArea mstarea;
     if(!mstheader.ChildrenAreas.ContainsKey(view.AreaID))
     {
         mstarea = new DropRecordCollection.MasterHeaderArea();
         mstarea.ParentMaster = mstheader;
         mstheader.ChildrenAreas[view.AreaID] = mstarea;
     }
     else
     {
         mstarea = mstheader.ChildrenAreas[view.AreaID];
     }
     //マップの取得
     DropRecordCollection.MasterHeaderMap mstmap;
     if(!mstarea.ChildrenMaps.ContainsKey(view.MapID))
     {
         mstmap = new DropRecordCollection.MasterHeaderMap();
         mstmap.ParentArea = mstarea;
         mstmap.MapName = mapname;
         mstarea.ChildrenMaps[view.MapID] = mstmap;
     }
     else
     {
         mstmap = mstarea.ChildrenMaps[view.MapID];
     }
     //セルの取得
     DropRecordCollection.MasterHeaderCell mstcell;
     if(!mstmap.ChildrenCells.ContainsKey(view.CellID))
     {
         mstcell = new DropRecordCollection.MasterHeaderCell();
         mstcell.ParentMap = mstmap;
         mstcell.EnemyFleetName = enemyfleetname;
         mstcell.IsBoss = view.BossFlag == 2;
         mstmap.ChildrenCells[view.CellID] = mstcell;
     }
     else
     {
         mstcell = mstmap.ChildrenCells[view.CellID];
     }
     //敵編成ID取得の書き込み(もう少し丁寧に変更)
     var idcontains = mstcell.ChildrenLocalFleets.Where(x => x.LocalID == view.EnemyLocalID).ToList();
     //変わっている場合に限り変更
     if(idcontains.Count == 0)
     {
         var item = new DropRecordCollection.EnemyFleetTable()
         {
             LocalID = view.EnemyLocalID,
             LocalShortID = view.EnemyLocalShortID,
             OldID = 0,//悲しいけど
         };
         mstcell.ChildrenLocalFleets.Add(item);
     }
 }