Пример #1
0
    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);
    }
Пример #2
0
    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);
            }
        }
    }
Пример #3
0
    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);
    }
Пример #4
0
    // 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;
            }
        }
    }
Пример #5
0
    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;
    }
Пример #6
0
 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);
 }
Пример #7
0
 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;
 }
Пример #8
0
 //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;
 }
Пример #9
0
 //キャラクタ除名
 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;
     }
 }
Пример #10
0
    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);
    }
Пример #11
0
 public ActionSaveData(Action action)
 {
     unit       = new UnitSaveData(action.unit);
     prev_pos   = action.prev_pos;
     follow_pos = action.follow_pos;
 }
Пример #12
0
    //ロード時のコンストラクタ
    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;
    }
Пример #13
0
 //ステージクリア後のキャラクタのアップデート
 public void UnitUpdate(int id, UnitSaveData updateunit)
 {
     id2unitdata[id].level = updateunit.level;
     id2unitdata[id].exp   = updateunit.exp;
 }
Пример #14
0
 public static void SaveUnit(UnitSaveData unitSaveData, string path)
 {
     JSONReadWrite.WriteToJsonFile(baseSavePath + "/" + path + ".json", unitSaveData);
 }