private void SaveUnit(Unit unit, string fileName) { // load the old database _saveDatabase = JsonSaveLoadIO.LoadAllUnits(UnitsSaveFileName); // create new unitSaveData List <ItemSlotData> occupiedItemSlots = unit.unitInventory.Where(x => x.Item != null).ToList(); IEnumerable <string> unitAbilities = unit.abilities.Select(x => { foreach (KeyValuePair <string, Ability> pair in StaticData.AbilityReference) { if (pair.Value.Equals(x)) { return(pair.Key); } } return(null); }); var unitSaveData = new UnitSaveData(unit.characterName, unit.characterClass, unit.level, occupiedItemSlots, ConvertStatsToBaseInt(unit.stats), unitAbilities.ToList()); // update old database with new unitSaveData _saveDatabase[unit.characterName] = unitSaveData; // write out to file // Debug.Log(JsonSaveLoadIO.SaveUnit(unitSaveData, fileName)); JsonSaveLoadIO.SaveAllUnits(_saveDatabase, fileName); }
public List <string> partysetting_string_serialize = new List <string>(); //セーブ用 //キャラクタ加入 public void UnitAdd(UnitSaveData unit, int initlevel = 0) { //仮;ユニットがすでに加入されている場合は加入処理を飛ばす foreach (UnitSaveData tempunit in playerUnitList) { if (unit.scobj == tempunit.scobj) { return; } } if (initlevel != 0) { unit.level = initlevel; } playerUnitList.Add(unit); //もしもパーティメンバーの設定上IDと紐づけられているキャラが加入した場合 if (partySettings.party_charalist.ContainsValue(unit.scobj)) { int key = -1; foreach (KeyValuePair <int, string> kvp in partySettings.party_charalist) { if (kvp.Value == unit.scobj) { key = kvp.Key; } } if (key != -1) { JointId2Unit(key, unit); } } }
private void SaveUnit(UnitData unit, string fileName) { // load the old database _saveDatabase = JsonSaveLoadIO.LoadAllUnits(UnitsSaveFileName); // get old unitSaveData UnitSaveData oldUnitSaveData; if (!_saveDatabase.ContainsKey(unit.unitID)) { Debug.LogError("Unit not found in database. Updating with firstSave info."); _saveDatabase = JsonSaveLoadIO.LoadAllUnits("firstSave"); oldUnitSaveData = _saveDatabase[unit.unitID]; } else { oldUnitSaveData = _saveDatabase[unit.unitID]; } // create new unitSaveData from old unitSaveData var unitSaveData = new UnitSaveData(oldUnitSaveData, unit.unitItems, ConvertStatsToBaseInt(unit.stats)); // update old database with new unitSaveData _saveDatabase[unit.unitID] = unitSaveData; // write out to file // Debug.Log(JsonSaveLoadIO.SaveUnit(unitSaveData, fileName)); JsonSaveLoadIO.SaveAllUnits(_saveDatabase, fileName); }
// Start is called before the first frame update void Start() { if (!Debug.isDebugBuild) { return; //リリース時は以下を読み込まない } //GameValの設定 GameVal.masterSave.playerUnitList = new List <UnitSaveData>(); GameVal.masterSave.id2unitdata = new Dictionary <int, UnitSaveData>(); //debugPartySettings.string2Dictionary(); GameVal.masterSave.partySettings = ScriptableObject.CreateInstance <PartySettings>(); //パーティメンバーの設定を行う GameVal.masterSave.partySettings.party_settings_string = new List <string>(debugPartySettings.party_settings_string); GameVal.masterSave.partySettings.string2Dictionary(); foreach (KeyValuePair <int, string> kvp in GameVal.masterSave.partySettings.party_charalist) { //もし初期加入になっている場合 if (GameVal.masterSave.partySettings.party_addmission[kvp.Key]) { UnitSaveData temp = new UnitSaveData(kvp.Value, kvp.Key); GameVal.masterSave.UnitAdd(temp); } } for (int i = 0; i < debuglevel.Count; i++) { string[] temp = debuglevel[i].Split(','); if (int.Parse(temp[1]) != 0 && GameVal.masterSave.id2unitdata.ContainsKey(int.Parse(temp[0]))) { int templevel = int.Parse(temp[1]); int tempid = int.Parse(temp[0]); GameVal.masterSave.id2unitdata[tempid].level = templevel; } } }
public void SetUnit(UnitSaveData unitSave, bool isForceSortie, bool isForbiddenSortie, bool is_unitcheck = false) { unit = new Unitdata(unitSave, false, is_unitcheck); //HPとスキル使用回数の回復 unit.hp = unit.status.maxhp; foreach (Skill skill in unit.skills) { skill.use = skill.maxuse; } textName.text = unit.charaname; textLevel.text = string.Format("Lv:{0}", unit.status.level); //LvMAX判定 if (unit.status.level >= 99) { unit.status.level = 99; //メモリ改ざんとか対策 textExp.text = string.Format("MAX"); textExp.color = Color.red; expGauge.GetComponent <RectTransform>().sizeDelta = new Vector2(expGaugeParent.GetComponent <RectTransform>().sizeDelta.x, expGaugeParent.GetComponent <RectTransform>().sizeDelta.y); } else { textExp.text = string.Format("あと{0}", unit.status.needexp - unit.status.exp); textExp.color = Color.white; expGauge.GetComponent <RectTransform>().sizeDelta = new Vector2((float)unit.status.exp / (float)unit.status.needexp * expGaugeParent.GetComponent <RectTransform>().sizeDelta.x, expGaugeParent.GetComponent <RectTransform>().sizeDelta.y); } if (isForceSortie) { sortiestate = SortieState.FORCE; //強制出撃の場合、すでにマップ上に存在する該当キャラクターとunitの指し示す先が一致する必要がある。 foreach (Unitdata tempunit in BattleVal.unitlist) { if (tempunit.savescobj == unit.savescobj) { unit = tempunit; } } } else if (isForbiddenSortie) { sortiestate = SortieState.FORBIDDEN; } else { sortiestate = SortieState.NONE; } if (is_unitcheck) { buttonIsSortie.gameObject.SetActive(false); } unitcheckflag = is_unitcheck; }
public UnitLoadData(UnitSaveData unitSaveData, ItemDataBase itemDataBase) { unitName = unitSaveData.unitName; unitClass = unitSaveData.unitClass; unitLevel = unitSaveData.unitLevel; unitExp = unitSaveData.unitExp; unitAbilities = unitSaveData.unitAbilities; unitStats = unitSaveData.unitStats; unitInventory = unitSaveData.unitInventory.GetCopyOfItems(itemDataBase); }
public UnitSaveData(UnitSaveData oldUnitSaveData, List <Item> items, Dictionary <StatString, int> stats) { unitName = oldUnitSaveData.unitName; unitClass = oldUnitSaveData.unitClass; unitLevel = oldUnitSaveData.unitLevel; unitExp = oldUnitSaveData.unitExp; unitInventory = new ItemContainerSaveData(items.Count); unitInventory.AddItems(items); unitStats = stats; unitAbilities = oldUnitSaveData.unitAbilities; }
//IDとユニットの紐づけ public void JointId2Unit(int id, UnitSaveData unit) { //念のため if (!playerUnitList.Contains(unit)) { UnitAdd(unit); } if (!id2unitdata.ContainsKey(id)) { id2unitdata.Add(id, unit); } unit.partyid = id; //加入状況の更新 partySettings.party_addmission[id] = true; }
//キャラクタ除名 public void UnitRemove(UnitSaveData unit) { playerUnitList.Remove(unit); //もし紐づけされたキャラなら if (id2unitdata.ContainsValue(unit)) { int key = -1; foreach (KeyValuePair <int, UnitSaveData> kvp in id2unitdata) { if (kvp.Value.scobj == unit.scobj) { key = kvp.Key; } } if (key != -1) { id2unitdata.Remove(key); } partySettings.party_addmission[key] = false; } }
public void PushButton() { //GameValの設定 GameVal.nextscenename = firstSceneName; GameVal.masterSave.partySettings = initPartySettings; GameVal.masterSave.playerUnitList = new List <UnitSaveData>(); GameVal.masterSave.id2unitdata = new Dictionary <int, UnitSaveData>(); initPartySettings.string2Dictionary(); //パーティメンバーの設定を行う foreach (KeyValuePair <int, string> kvp in initPartySettings.party_charalist) { //もし初期加入になっている場合 if (initPartySettings.party_addmission[kvp.Key]) { UnitSaveData temp = new UnitSaveData(kvp.Value, kvp.Key); GameVal.masterSave.UnitAdd(temp); } } Debug.Log(GameVal.masterSave.id2unitdata[1].scobj); }
public ActionSaveData(Action action) { unit = new UnitSaveData(action.unit); prev_pos = action.prev_pos; follow_pos = action.follow_pos; }
//ロード時のコンストラクタ public Unitdata(UnitSaveData save, bool instantiateflag = true, bool is_unitcheck = false) { CharaData loaddata = ScriptableObject.Instantiate(Resources.Load(string.Format("BattleChara/{0}", save.scobj)) as CharaData); id = 0; //戦闘パートの場合 if (!is_unitcheck) { //idcount中に未使用があるかを探索する for (int tempid = 1; tempid < idcount; tempid++) { bool contflag = false; foreach (Unitdata tempunit in BattleVal.unitlist) { if (tempunit.id == tempid) { contflag = true; break; } } if (contflag) { continue; } //ここに到達したという事は、そのtempidは使用されていない id = tempid; } if (id == 0) { id = idcount + 1; idcount++; } } charaname = loaddata.charaname; jobname = loaddata.jobname; attackrange = loaddata.attackrange; attackeffect = loaddata.attackeffect; status = loaddata.init_status; faceimage = loaddata.faceimage; team = loaddata.init_team; gobj_prefab = loaddata.gobj; if (instantiateflag) { gobj = MonoBehaviour.Instantiate(gobj_prefab, new Vector3(), Quaternion.identity); } zocflag = loaddata.zocflag; zoclevel = loaddata.zoclevel; skillTrees = loaddata.skillTrees; //skills = loaddata.skills; /* * foreach (Skill skill in skills) * skill.use = skill.maxuse; */ routin = loaddata.routin; //初期設定ファイルからの変更を獲得 savescobj = save.scobj; status.level = save.level; x = save.x; y = save.y; hp = save.hp; status.exp = save.exp; skills = new List <Skill>(); foreach (SkillTree skilltree in loaddata.skillTrees) { if (status.level >= skilltree.getlevel) { skills.Add(ScriptableObject.Instantiate <Skill>(skilltree.skill)); } } //スキル使用回数 if (skills.Count > 0) { for (int numskill = 0; numskill < save.skilluses.Count; numskill++) { //スキル名の一致するスキルを探索し、使用回数をロードする。 foreach (Skill skill in skills) { if (skill.skillname == save.skillname[numskill]) { skill.use = save.skilluses[numskill]; break; } } } } movable = save.movable; atackable = save.atackable; partyid = save.partyid; }
//ステージクリア後のキャラクタのアップデート public void UnitUpdate(int id, UnitSaveData updateunit) { id2unitdata[id].level = updateunit.level; id2unitdata[id].exp = updateunit.exp; }
public static void SaveUnit(UnitSaveData unitSaveData, string path) { JSONReadWrite.WriteToJsonFile(baseSavePath + "/" + path + ".json", unitSaveData); }