FLResourceLibrary/FLResources/ResControl.cs
Dvurechensky 6e2bfe062d 1.0.1
2025-05-13 15:25:37 +03:00

224 lines
8.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 13 мая 2025 15:25:18
* Version: 1.0.1
*/
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}",
};
}
}
}
}