DataRecord

来源:互联网 发布:网络机顶盒ir接口 编辑:程序博客网 时间:2024/05/27 21:08
using UnityEngine;using System.Collections;using System.Collections.Generic;using System.Security.Cryptography;using System.Text;using System;public class DataRecord : MonoBehaviour {        public  static  DataRecord self;    private static Hashtable table;// Use this for initialization    void Awake()    {        self = this;    }public static int AddPet(PetXmlData data)    {        Hashtable tmp = new Hashtable();        tmp.Add("id", data.id);        tmp.Add("name", data.name);        tmp.Add("level", data.level);        tmp.Add("hp", data.hp);        tmp.Add("attack", data.attack);        tmp.Add("catchcost", data.catchcost);        tmp.Add("worth", data.worth);        tmp.Add("probability", data.probability);        tmp.Add("headImage", data.headImage);        tmp.Add("curHp", data.hp); //当前血量        tmp.Add("isFight", 0); //是否出战        int index = 0;        foreach (DictionaryEntry var in table)        {            if (var.Key.ToString().Contains("FightId") || var.Key.ToString().Contains("secret key"))                continue;            if(index < int.Parse(var.Key.ToString()))                index = int.Parse(var.Key.ToString());        }        table.Add((index+1).ToString(), tmp);        Save();        return (index + 1);            }    public static Hashtable GetPet(int id)//人物宠物表table索引id(不同于xml中宠物唯一id)    {        Hashtable tmp = table[id.ToString()] as Hashtable;        return tmp;    }    /// <summary>    ///     /// </summary>    /// <param name="id">索引</param>    /// <returns></returns>    public static bool DelPet(int id)    {                        //索引id        if (table.Contains(id.ToString()))        {            table.Remove(id.ToString());            return true;        }        else            return false;    }          public static bool SetFight(int id, int index, bool Fight = true)    {                       //(拥有所有宠物列表中索引id,出战队伍索引位置index,是否出战Fight)        Hashtable tmp = table[id.ToString()] as Hashtable;        //if (int.Parse(tmp["isFight"].ToString()) == 1)//去掉后,即使选中已出战的宠物,也可继续(位置和你确认队伍一致)        //{        //    Debug.Log(id + "已出战");        //    return false;        //}        tmp["isFight"] = Fight ? 1 : 0;        table[id.ToString()] = tmp;        if (!table.ContainsKey("FightId" + index))            table.Add("FightId" + index, id);        else            table["FightId" + index] = id;        Save();        return true;    }    public static Hashtable GetFightData(int index)//位置    {        if(table.ContainsKey("FightId" + index))        {            int i = int.Parse(table["FightId" + index].ToString());            return GetPet(i);       }        else            return null;    }    public static int GetRecordIdByPos(int index)    {        if(table.ContainsKey("FightId" + index))        {            return int.Parse(table["FightId" + index].ToString());        }        return 0;    }    public static Hashtable GetPetList()    {        Hashtable tmp = new Hashtable();        foreach(DictionaryEntry var in table)        {            if (var.Key.ToString().Contains("FightId") || var.Key.ToString().Contains("secret key"))                continue;            Hashtable temp = var.Value as Hashtable;            tmp.Add(var.Key,temp);        }        return tmp;    }    public static bool GetFight(int id)    {        Hashtable tmp = table[id.ToString()] as Hashtable;        return  int.Parse(tmp["isFight"].ToString()) == 1 ;            }    public static void AddPetHp(int id,int add)//索引为id 的宠物数据中 Hp变化    {        Hashtable tmp = table[id.ToString()] as Hashtable;        int hp =  int.Parse(tmp["curHp"].ToString());        hp += add;        if (hp < 0) { hp = 0; }//hp小于0,置为0        tmp["curHp"] = hp;        table[id.ToString()] = tmp;        Save();    }    public static PetXmlData TranslateData(Hashtable data)    {        PetXmlData tmp = new PetXmlData();        tmp.id = int.Parse(data["id"].ToString());        tmp.hp = int.Parse(data["curHp"].ToString());        tmp.level = int.Parse(data["level"].ToString());        tmp.name = data["name"].ToString();        tmp.headImage = data["headImage"].ToString();        tmp.attack = int.Parse(data["attack"].ToString());        return tmp;    }    public static bool IsHavePet(int petID)//该宠物角色是否拥有    {        foreach(Hashtable tmp in table)        {            if(tmp.ContainsKey("id") && tmp["id"].ToString() == petID.ToString())            {                return true;            }        }        return false;    }        public static int GetPetHp(int id)    {        Hashtable tmp = table[id.ToString()] as Hashtable;        if(tmp !=null)            return int.Parse(tmp["curHp"].ToString());        return 0;    }    public static void Load()    {        if (PlayerPrefs.HasKey("data"))        {            string json = Decrypt(PlayerPrefs.GetString("data"));            if (!string.IsNullOrEmpty(json))            {                table = json.hashtableFromJson();#if UNITY_ANDROID                string identity = SystemInfo.deviceUniqueIdentifier;                if (string.IsNullOrEmpty(identity))                {                    identity = "datadata";                }                Debug.Log("device uniqueIdentifier = " + identity);                if (table.ContainsKey("secret key"))                {                    if ((string)table["secret key"] != identity)                    {                        ClearData();                    }                }                else                {                    table.Add("secret key", identity);                }#endif                return;            }            PlayerPrefs.DeleteKey("data");        }        table = new Hashtable();    }    public static void Save()    {        string json = table.toJson();        //Debug.Log("save data = " + json );        string encryptJson = Encrypt(json);        PlayerPrefs.SetString("data", encryptJson);        PlayerPrefs.Save();    }    public static void ClearData()    {        table.Clear();        Save();    }    private static string Encrypt(string toE)    {        //  Monodevelop9Unity1File8Edit2View        byte[] keyArray = UTF8Encoding.UTF8.GetBytes("Monodevelop9Unity1File8Edit2View");        RijndaelManaged rDel = new RijndaelManaged();        rDel.Key = keyArray;        rDel.Mode = CipherMode.ECB;        rDel.Padding = PaddingMode.PKCS7;        ICryptoTransform cTransform = rDel.CreateEncryptor();        byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toE);        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);        return Convert.ToBase64String(resultArray, 0, resultArray.Length);    }    private static string Decrypt(string toD)    {        byte[] keyArray = UTF8Encoding.UTF8.GetBytes("Monodevelop9Unity1File8Edit2View");        RijndaelManaged rDel = new RijndaelManaged();        rDel.Key = keyArray;        rDel.Mode = CipherMode.ECB;        rDel.Padding = PaddingMode.PKCS7;        ICryptoTransform cTransform = rDel.CreateDecryptor();        byte[] toEncryptArray = Convert.FromBase64String(toD);        try        {            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);            return UTF8Encoding.UTF8.GetString(resultArray);        }        catch (Exception ex)        {            Debug.Log("Decrypt data failed, reset data. " + ex.Message);            return null;        }    }}

2 0
原创粉丝点击