для внедрения такого перебора требуется сборка интерфейса(скачать сам сборщик можно в подписи профиля), а именно замена скрипта в данном случае это LoadingWnd_e.uc, имена подгружаемых картинок и в каком паке они должны быть думаю понять не сложно из скрипта.
в архиве добавлен типичный интерфейс.ю с этой заменой. и пак картинок который наскрёб с разных клиентов.
если у вас кастомный то придётся имплементировать.
видео самой работы скрипта
если интересует только скрипт, комментарии тут есть, думаю будет понятно ( для билда их можно удалить )
в архиве добавлен типичный интерфейс.ю с этой заменой. и пак картинок который наскрёб с разных клиентов.
если у вас кастомный то придётся имплементировать.
видео самой работы скрипта
если интересует только скрипт, комментарии тут есть, думаю будет понятно ( для билда их можно удалить )
Код:
class LoadingWnd_e extends LoadingWnd;
var int ValidIndexes[100]; // список индексов реально существующих текстур
var int ValidCount; // количество найденных текстур
var int UsedIndexes[100]; // флаги использованных текстур
var int UsedCount; // сколько уже показано
const TIMER_ID = 1;
const TIMER_DELAY = 500;
//------------------------------------------------------
// ИНИЦИАЛИЗАЦИЯ
//------------------------------------------------------
function OnLoad()
{
RegisterEvent(EV_Restart);
class'UIAPI_WINDOW'.static.SetUITimer("LoadingWnd", TIMER_ID, TIMER_DELAY);
BuildValidTextureList(); // автопроверка и сбор списка текстур
}
//------------------------------------------------------
// СОБЫТИЯ
//------------------------------------------------------
function OnEvent(int Event_ID, string param)
{
if (Event_ID == EV_Restart)
{
UpdateBackground();
}
}
//------------------------------------------------------
// ТАЙМЕР
//------------------------------------------------------
function OnTimer(int TimerID)
{
if (TimerID == TIMER_ID)
{
UpdateBackground();
}
}
//------------------------------------------------------
// СБОР СПИСКА СУЩЕСТВУЮЩИХ ТЕКСТУР
//------------------------------------------------------
function BuildValidTextureList()
{
local int i;
local string texName;
ValidCount = 0;
for (i = 0; i < 100; i++)
{
texName = GetTextureName(i);
if (TextureExists(texName))
{
ValidIndexes[ValidCount] = i;
ValidCount++;
}
}
if (ValidCount > 0)
Debug("✅ Found " $ string(ValidCount) $ " valid loading textures.");
else
Debug("⚠ No valid textures found in range 0..99!");
}
//------------------------------------------------------
// ОБНОВЛЕНИЕ ФОНА
//------------------------------------------------------
function UpdateBackground()
{
local string tex;
local int idx;
idx = GetNextValidIndex();
if (idx >= 0)
{
tex = GetTextureName(idx);
class'UIAPI_TEXTURECTRL'.static.SetTexture("LoadingWnd.BackTex", tex);
Debug("🖼 Loaded texture: " $ tex);
}
else
{
tex = GetFallbackTexture();
class'UIAPI_TEXTURECTRL'.static.SetTexture("LoadingWnd.BackTex", tex);
Debug("🔁 Using fallback texture: " $ tex);
}
}
//------------------------------------------------------
// ПОЛУЧЕНИЕ СЛЕДУЮЩЕГО СЛУЧАЙНОГО ИНДЕКСА
//------------------------------------------------------
function int GetNextValidIndex()
{
local int randomIdx, tries;
if (ValidCount == 0)
return -1;
// если все уже использованы — сбросим перед новым циклом
if (UsedCount >= ValidCount)
{
Debug("🔄 All textures shown. Resetting used list...");
ResetUsedIndexes();
}
for (tries = 0; tries < 100; tries++)
{
randomIdx = Rand(ValidCount);
if (UsedIndexes[randomIdx] == 0)
{
UsedIndexes[randomIdx] = 1;
UsedCount++;
return ValidIndexes[randomIdx];
}
}
// если вдруг не нашлось (не должно случиться)
return -1;
}
//------------------------------------------------------
// ПОМОЩНИКИ
//------------------------------------------------------
// Формирует имя текстуры по индексу
function string GetTextureName(int idx)
{
return "L2loading.loading" $ Right("00" $ idx, 2);
}
// Проверяет наличие текстуры в ресурсах
function bool TextureExists(string texName)
{
local Texture t;
t = Texture(DynamicLoadObject(texName, class'Texture', true));
return t != None;
}
// Сброс использованных индексов
function ResetUsedIndexes()
{
local int i;
for (i = 0; i < 100; i++)
UsedIndexes[i] = 0;
UsedCount = 0;
Debug("🔁 Reset used texture list");
}
// Резервная текстура
function string GetFallbackTexture()
{
return "L2Font-e.loading_02-e";
}
defaultproperties
{
}