DataRecord

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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值