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); }
///////////////////////////// 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); }
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); }
//追加 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); } }