Изменение звёзд рядом со значком перка на цифры

Тема в разделе "Игровое редактирование", создана пользователем eXes1ze`, 7 апр 2014.

  1. eXes1ze`

    eXes1ze` Соучастник

    Всем доброго времени суток, у меня возник такой вопрос,как сделать чтобы вместо звёзд справа от перка, отображались цифры, т.е с каждым новым левлом появлялись цифры 1,2,3 и т.д ,как показано на скриншоте:


    Upd. Решение
     

    Вложения:

  2. Strit_Striker

    Strit_Striker Солдат

    Юзай HUD sp ну или можешь глянуть как у них это реализавано , там все есть .
     
    Xan нравится это.
  3. eXes1ze`

    eXes1ze` Соучастник

    Объясни пожалусто поподробнее
     
  4. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Делай нормальные сервера без 100 уровней и даже мысль такая в голову не придёт.
     
    Strit_Striker нравится это.
  5. eXes1ze`

    eXes1ze` Соучастник

    Я не 100 левлов делать буду а 30-50 не больше
     
  6. Винни

    Винни Мододел

    Он ведь не просит, что и как ему лучше сделать. Он задал вполне нормальный вопрос, на который кодеры могли бы дать ответ здесь.
     
    Willghost, ЛОХМАТЫЙ и Plrip нравится это.
  7. warpel

    warpel Солдат

    Могу подсказать что реализация идет через худ, в замену рисовки звезд.
     
  8. Dr_Killjoy

    Dr_Killjoy Заблокированные

    Почему я должен за него координаты рисовать? Пусть сам это делает. Я ему предложил другой вариант, успокоиться и оставить красивую историю со значками как она изначально была сделана в кф.

    Вот и я о том же, конкретно делать эту историю многим геморно, поэтому никто тут готовое решение не будет выкладывать. Ток если Флейму вдруг не влом будет. Я лично с худом не очень дружу.
     
  9. Flame

    Flame -Заслуженый кодер форума-

    Я себе такое сделаю для одного из серваков )
    Только я не решил ещё - делать через текстурки 0-9 или отрисовывать текстом
    Так что могу и сюда написать заодно
    Если не забуду - вечерком может напишу)
     
    denfil777 нравится это.
  10. warpel

    warpel Солдат

    Если у меня остались исходы , я кому то такое уже делал.Отображал текстом.
     
  11. Rainishе

    Rainishе Солдат

    ну если честно то всё ето очень легко сделать.потрошите сп,там куча подсказок и примеров.
     
  12. FORYOU

    FORYOU Новенький

    Не забыли?
     
  13. warpel

    warpel Солдат

    Делается заменой отображения звездочки в худе сп.
    Разберусь немного в хламе и попробую написать.
     
  14. Shadow5

    Shadow5 Бандит

    Видать никто не напишет инструкцию, как изменить звёзды на цифры.
     
  15. Flame

    Flame -Заслуженый кодер форума-

    ыы))

    Я помогаю прежде всего тем, кто сам пытается что-то делать и у него не получается
    Те кто просто сидят и ждут - подождут

    Буду себе сервак делать с циферками - тогда и выложу
     
    3xzet нравится это.
  16. Flame

    Flame -Заслуженый кодер форума-

    Так. Вот и добрался я до звёздочек с циферками.

    1. SRHUDKillingFloor
    Правим звёздочки над головой игроков
    Функция DrawPlayerInfo
    Добавим переменные
    Код:
    local int cLevel;
    local byte R,G,B,A;
    
    И поправим кусок функции
    Добавим
    Код:
    	C.Style = ERenderStyle.STY_Alpha;
    	C.Font = GetNewConsoleFont(C,3);
    	cLevel = KFPlayerReplicationInfo(P.PlayerReplicationInfo).ClientVeteranSkillLevel;
    	SetLevelColor(cLevel,R,G,B,A);
    	C.SetDrawColor(R,G,B,BeaconAlpha);
    	C.SetPos(TempX + TempSize * 0.7, TempY + TempSize * 0.7);
    	C.DrawTextClipped(cLevel);
    
    И закомментируем или удалим всё что отвечает за отрисовку звёздочек
    Код:
    /*
    	TempX += (TempSize - (VetStarSize * 0.75));
    	TempY += (TempSize - (VetStarSize * 1.5));
    
    	for ( i = 0; i < TempLevel; i++ )
    	{
    		C.SetPos(TempX, TempY-(Counter*VetStarSize*0.7f));
    		C.DrawTile(TempStarMaterial, VetStarSize * 0.7, VetStarSize * 0.7, 0, 0, TempStarMaterial.MaterialUSize(), TempStarMaterial.MaterialVSize());
    		if( ++Counter==5 )
    		{
    			Counter = 0;
    			TempX+=VetStarSize;
    		}
    	}
    */
    
    Кроме того добавим 2 функции в SRHUDKillingFloor
    Код:
    static function SetLevelColor(int cLevel, out byte R, out byte G, out byte B, out byte A)
    {
    	if(cLevel>15)
    	{
    		R=64;
    		G=64;
    		B=255;
    		A=255;
    	}
    	else if(cLevel>10)
    	{
    		R=0;
    		G=255;
    		B=0;
    		A=255;
    	}
    	else if(cLevel>5)
    	{
    		R=255;
    		G=215;
    		B=0;
    		A=255;
    	}
    	else
    	{
    		R=255;
    		G=0;
    		B=0;
    		A=255;
    	}
    }
    static function font GetNewConsoleFont(Canvas C,int shift)
    {
    	local int FontSize;
    
    	if( default.OverrideConsoleFontName != "" )
    	{
    		if( default.OverrideConsoleFont != None )
    			return default.OverrideConsoleFont;
    		default.OverrideConsoleFont = Font(DynamicLoadObject(default.OverrideConsoleFontName, class'Font'));
    		if( default.OverrideConsoleFont != None )
    			return default.OverrideConsoleFont;
    		Log("Warning: HUD couldn't dynamically load font "$default.OverrideConsoleFontName);
    		default.OverrideConsoleFontName = "";
    	}
    
    	FontSize = Default.ConsoleFontSize;
    	if ( C.ClipX < 640 )
    		FontSize++;
    	if ( C.ClipX < 800 )
    		FontSize++;
    	if ( C.ClipX < 1024 )
    		FontSize++;
    	if ( C.ClipX < 1280 )
    		FontSize++;
    	if ( C.ClipX < 1600 )
    		FontSize++;
    	return LoadFontStatic(Min(8,FontSize+shift));
    }
    
    Функция SetLevelColor подбирает цвета для отрисовки числового значения уровня
    У меня там прописан стандартный набор из ServerPerks соответствующий тому, что прописано в
    ServerPerks.SRVeterancyTypes.PreDrawPerk
    То есть с 1 по 5 уровень красный цвет перков, с 6 по 10 золотой, с 11 по 15 зелёный и больше 15 - тёмносиний
    Если у вас другие цвета - поправьте функции SetLevelColor
    здесь и в SRScoreBoard

    Функция GetNewConsoleFont нужна для того, чтобы уменьшить стандартный шрифт для отрисовки чисел
    Она напрямую получена из стандартной GetConsoleFont, только во входных параметрах добавлен сдвиг
    Теперь поправим отображение звёздочек слева снизу в HUD
    Ищем функцию DrawHudPassA
    И делаем то же самое:
    Добавляем переменные
    Код:
    	local int cLevel;
    	local byte R,G,B,A;
    
    И код
    Код:
    	C.Style = ERenderStyle.STY_Alpha;
    	C.Font = GetNewConsoleFont(C,3);
    	cLevel = KFPlayerReplicationInfo(PlayerOwner.PlayerReplicationInfo).ClientVeteranSkillLevel;
    	SetLevelColor(cLevel,R,G,B,A);
    	C.SetDrawColor(R,G,B,C.DrawColor.A);
    	C.SetPos(TempX + TempSize * 0.7, TempY + TempSize * 0.7);
    	C.DrawTextClipped(cLevel);
    
    Комментируем отрисовку звёздочек
    Код:
    /*
    	TempX += (TempSize - VetStarSize);
    	TempY += (TempSize - (2.0 * VetStarSize));
    	for ( i = 0; i < TempLevel; i++ )
    	{
    		C.SetPos(TempX, TempY-(Counter*VetStarSize*0.8f));
    		C.DrawTile(TempStarMaterial, VetStarSize, VetStarSize, 0, 0, TempStarMaterial.MaterialUSize(), TempStarMaterial.MaterialVSize());
    		if( ++Counter==5 )
    		{
    			Counter = 0;
    			TempX+=VetStarSize;
    		}
    	}
    */
    
    2. SRScoreBoard
    Правим функцию UpdateScoreBoard
    Заменяем
    Код:
    DrawPerkWithStars(Canvas,VetXPos,YL,PlayerBoxSizeY,Stars,VeterancyBox,StarBox);
    на
    Код:
    DrawPerkWithDigits(KFPRI,Canvas,VetXPos,YL,PlayerBoxSizeY,VeterancyBox);
    Добавляем следующие 2 функции
    Код:
    simulated final function DrawPerkWithDigits(KFPlayerReplicationInfo KFPRI, Canvas C, float X, float Y, float Scale, Material PerkIcon)
    {
    	local byte i;
    	local byte R,G,B,A;
    	local Font LvlFont,OrigFont;
    	local string S;
    
    	C.SetPos(X,Y);
    	C.DrawTile(PerkIcon, Scale, Scale, 0, 0, PerkIcon.MaterialUSize(), PerkIcon.MaterialVSize());
    
    	Y+=Scale*0.6f;
    	X+=Scale*0.8f;
    
    	OrigFont=C.Font;
    	LvlFont = Font(DynamicLoadObject("ROFontsTwo.ROArial7DS", class'Font'));
    	//class'ROHud'.static.LoadMenuFontStatic(7);
    	C.SetPos(X, Y);
    	C.Font = LvlFont;
    	SetLevelColor(KFPRI.ClientVeteranSkillLevel,R,G,B,A);
    	C.DrawColor.R=R;
    	C.DrawColor.G=G;
    	C.DrawColor.B=B;
    	C.DrawColor.A=A;
    	S = string(KFPRI.ClientVeteranSkillLevel);
    	C.DrawTextClipped(S);
    	C.Font = OrigFont;
    }
    
    Код:
    static function SetLevelColor(int cLevel, out byte R, out byte G, out byte B, out byte A)
    {
    	if(cLevel>15)
    	{
    		R=64;
    		G=64;
    		B=255;
    		A=255;
    	}
    	else if(cLevel>10)
    	{
    		R=0;
    		G=255;
    		B=0;
    		A=255;
    	}
    	else if(cLevel>5)
    	{
    		R=255;
    		G=215;
    		B=0;
    		A=255;
    	}
    	else
    	{
    		R=255;
    		G=0;
    		B=0;
    		A=255;
    	}
    }
    
    В функции DrawPerkWithDigits мы отрисовываем значок перка и число
    А функция SetLevelColor идентична той, что упомянута в SRHUDKillingFloor
    (вообще говоря нехорошо, что я использую 2 идентичные функции вместо вызова 1 функции, но и так сойдёт )
    Результат выглядит так

    Теперь немного про настройку шрифта и местоположения чисел
    Для SRHUDKillingFloor за местоположение отвечает такая строчка
    Код:
    C.SetPos(TempX + TempSize * 0.7, TempY + TempSize * 0.7);
    Советую настраивать его меняя коэфициенты 0.7 на другие значения
    например,
    Код:
    C.SetPos(TempX + TempSize * 0.6, TempY + TempSize * 0.8);
    За шрифт же в SRHUDKillingFloor у нас отвечает GetNewConsoleFont(C,3);
    Хотите меньше шрифт - пишите число побольше и наоборот

    Для SRScoreBoard за местоположение отвечает строчка
    Код:
    C.SetPos(X, Y);
    
    где
    Код:
    Y+=Scale*0.6f;
    X+=Scale*0.8f;
    
    Соответственное чтобы здесь поменять местоположение - советую править коэфициенты 0.6 и 0.8
    За размер и тип шрифта отвечает строчка
    Код:
    LvlFont = Font(DynamicLoadObject("ROFontsTwo.ROArial7DS", class'Font'));
    
    В принципе можно использовать функцию
    Код:
    LvlFont = class'ROHud'.static.LoadMenuFontStatic(7)
    
    (Заменяя 7 на другие числа)
    Или открыть класс ROEngine.ROHud и глянуть там в defaultproperties разные названия шрифтов
    И вписать их вместо "ROFontsTwo.ROArial7DS"
    Ссылка на уже поправленный SP
     
    AkycTuk, Denkul999, ЛОХМАТЫЙ и 5 другим нравится это.
  17. key

    key Солдат

    В сервперкс 510 ругается на


    F:\KFServer\ServerPerksV5zm\Classes\SRScoreBoard.uc(197) : Error, Call to 'DrawPerkWithDigits': bad or missing parameter 1

    Вот на неё
    Код:
    DrawPerkWithDigits(KFPRI,Canvas,VetXPos,YL,PlayerBoxSizeY,VeterancyBox);
    
     
  18. Flame

    Flame -Заслуженый кодер форума-

    Вот же вы беспомощные)
    Ну раз ругается на KFPRI, значит нет там KFPRI
    Создай или передавай так
    Код:
    DrawPerkWithDigits(KFPlayerReplicationInfo(PRI),Canvas,VetXPos,YL,PlayerBoxSizeY,VeterancyBox);
    
     
    key нравится это.
  19. key

    key Солдат

    Вроде всё правильно делал.
    В сервперкс510 компилируется без ошибок, но вместо звёздочек ничего и нигде (ни в таблице, ни снизу, ни на игроках) не показывает.
     
  20. Flame

    Flame -Заслуженый кодер форума-

    Не знаю)
    У Swer'а всё заработало тож на стареньком SP
    Так что не представляю что там у тебя )