FLResourceLibrary/FLResources/ResControl.cs

216 lines
8.0 KiB
C#
Raw Normal View History

2025-05-13 15:23:06 +03:00
using FLCore;
using FLData;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Reflection;
using System.Resources;
namespace FLResources
{
public enum SearchDll
{
Resources = 65535,
InfoCards = 131071,
MiscText = 196607,
NameResources = 262143,
EquipResources = 327679,
OfferBribeResources = 393215,
MiscTextInfo2 = 458751,
SBM2 = 524287,
SBM3 = 589823,
SBM = 655359,
none
}
public class ResControl : IResources
{
public Dictionary<string, string> Data;
public List<int> Ids;
public ResControl()
{
Data = new Dictionary<string, string>();
}
/// <summary>
/// Подаём число из INI файла для ids_name или ids_info
///
/// получаем имя DLL файла и индекс строки с данными
/// </summary>
/// <param name="ids"></param>
/// <returns>DLL and id</returns>
public Dictionary<string, int> LoadIds(int ids)
{
try
{
if (ids >= 0 && ids <= (int)SearchDll.Resources)
{
var id = ids - 65536 * 0;
return new Dictionary<string, int> { { SearchDll.Resources.ToString(), id } };
}
if (ids >= (int)SearchDll.Resources && ids <= (int)SearchDll.InfoCards)
{
var id = ids - 65536 * 1;
return new Dictionary<string, int> { { SearchDll.InfoCards.ToString(), id } };
}
if (ids >= (int)SearchDll.InfoCards && ids <= (int)SearchDll.MiscText)
{
var id = ids - 65536 * 2;
return new Dictionary<string, int> { { SearchDll.MiscText.ToString(), id } };
}
if (ids >= (int)SearchDll.MiscText && ids <= (int)SearchDll.NameResources)
{
var id = ids - 65536 * 3;
return new Dictionary<string, int> { { SearchDll.NameResources.ToString(), id } };
}
if (ids >= (int)SearchDll.NameResources && ids <= (int)SearchDll.EquipResources)
{
var id = ids - 65536 * 4;
return new Dictionary<string, int> { { SearchDll.EquipResources.ToString(), id } };
}
if (ids >= (int)SearchDll.EquipResources && ids <= (int)SearchDll.OfferBribeResources)
{
var id = ids - 65536 * 5;
return new Dictionary<string, int> { { SearchDll.OfferBribeResources.ToString(), id } };
}
if (ids >= (int)SearchDll.OfferBribeResources && ids <= (int)SearchDll.MiscTextInfo2)
{
var id = ids - 65536 * 6;
return new Dictionary<string, int> { { SearchDll.MiscTextInfo2.ToString(), id } };
}
if (ids >= (int)SearchDll.MiscTextInfo2 && ids <= (int)SearchDll.SBM2)
{
var id = ids - 65536 * 7;
return new Dictionary<string, int> { { SearchDll.SBM2.ToString(), id } };
}
if (ids >= (int)SearchDll.SBM2 && ids <= (int)SearchDll.SBM3)
{
var id = ids - 65536 * 8;
return new Dictionary<string, int> { { SearchDll.SBM3.ToString(), id } };
}
if (ids >= (int)SearchDll.SBM3 && ids <= (int)SearchDll.SBM)
{
var id = ids - 65536 * 9;
return new Dictionary<string, int> { { SearchDll.SBM.ToString(), id } };
}
return new Dictionary<string, int> { { SearchDll.none.ToString(), -1 } };
}
catch
{
return new Dictionary<string, int> { { SearchDll.none.ToString(), -1 } };
}
}
/// <summary>
/// Получает значение ресурса по ключу из RESX файлов в Properties проекта
///
/// OfferBribeResources_name
/// NameResources_name
/// EquipResources_name
/// SBM3_name
/// SBM2_name
/// SBM_name
/// SBM_info
/// EquipResources_info
/// MiscTextInfo2_info
/// InfoCards_info
/// MiscText_info
/// SBM3_info
///
/// </summary>
/// <param name="id">Идентификатор ресурса</param>
/// <returns>StatusHandle</returns>
public StatusHandle GetData(string nameResources, int id)
{
try
{
//получаю всю информацию из ресурса
var code = GetAllResources(nameResources);
if(code.Code == ErrorCode.Error || code.Code == ErrorCode.Exception) return code;
//получаю конкретное значение из информации
if (Data.ContainsKey(id.ToString()))
{
return new StatusHandle()
{
Data = Data[id.ToString()].ToString(),
Code = ErrorCode.Ok,
Message = "OK",
};
}
else return new StatusHandle()
{
Data = null,
Code = ErrorCode.Error,
Message = "data not valid key: " + id,
};
}
catch (Exception exception)
{
return new StatusHandle()
{
Data = null,
Code = ErrorCode.Exception,
Message = $"[GetData] {exception.Message}",
};
}
}
public static Assembly GetAssemblyByName(string name)
{
Type[] typelist = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.Namespace == "FLResources.Properties").ToArray();
return typelist.SingleOrDefault(type => type.Name == name).Assembly;
}
private StatusHandle GetAllResources(string nameResources)
{
var nameRes = string.Empty;
Assembly assembly = null;
ResourceManager resource = null;
try
{
assembly = GetAssemblyByName(nameResources);
resource = new DataSetter().GetResource(nameResources, ResourceData.NamesResorces, "FLResources", assembly);
if (resource == null)
{
return new StatusHandle()
{
Data = null,
Code = ErrorCode.Error,
Message = $"resource not found: name - {nameResources} assembly - {assembly.FullName}",
};
}
var keys = resource.GetResourceSet(CultureInfo.InvariantCulture, true, true)
.Cast<DictionaryEntry>()
.Select(entry => entry.Key)
.Cast<string>();
Data = keys.ToDictionary(
key => key,
key => resource.GetString(key, CultureInfo.GetCultureInfo("de")));
Ids = Data.Keys.Select(int.Parse).ToList();
return new StatusHandle()
{
Data = null,
Code = ErrorCode.Ok,
Message = "OK",
};
}
catch (Exception exception)
{
return new StatusHandle()
{
Data = null,
Code = ErrorCode.Exception,
Message = $"[GetAllResources] {exception.Message}",
};
}
}
}
}