Как сделать свои значки перков ServerPerksV7
Добавляем/заменяем код в SRVeterancyTypes
Снайпер (Sharpshooter) — перк точной стрельбы и хедшотов.
var Material VetStarGreenMaterial;
var Material VetStarBlueMaterial;
var Material VetStarSilverMaterial;
var Material VetStarBirMaterial;
var Material VetStarBordMaterial;
var Material VetStarPinkMaterial;
var Material VetStarYelMaterial;
var() texture OnHUDGreenIcon, OnHUDBlueIcon, OnHUDSilverIcon, OnHUDBirIcon, OnHUDBordIcon, OnHUDPinkIcon, OnHUDYelIcon;
var() localized string CustomLevelInfo;
var() localized array<string> SRLevelEffects; // Added in ver 5.00, dynamic array for level effects.
var() byte NumRequirements;
// ...
static function byte PreDrawPerk( Canvas C, byte Level, out Material PerkIcon, out Material StarIcon )
{
if ( Level>32 )
{
PerkIcon = Default.OnHUDBirIcon;
StarIcon = Class'SRVeterancyTypes'.Default.VetStarBirMaterial;
Level-=32;
C.SetDrawColor(255, 255, 255, C.DrawColor.A);
}
else if ( Level>28 )
{
PerkIcon = Default.OnHUDBordIcon;
StarIcon = Class'SRVeterancyTypes'.Default.VetStarBordMaterial;
Level-=28;
C.SetDrawColor(255, 255, 255, C.DrawColor.A);
}
else if ( Level>24 )
{
PerkIcon = Default.OnHUDSilverIcon;
StarIcon = Class'SRVeterancyTypes'.Default.VetStarSilverMaterial;
Level-=24;
C.SetDrawColor(255, 255, 255, C.DrawColor.A);
}
else if ( Level>20 )
{
PerkIcon = Default.OnHUDGoldIcon;
StarIcon = Class'HUDKillingFloor'.Default.VetStarGoldMaterial;
Level-=20;
C.SetDrawColor(255, 255, 255, C.DrawColor.A);
}
else if ( Level>16 )
{
PerkIcon = Default.OnHUDPinkIcon;
StarIcon = Class'SRVeterancyTypes'.Default.VetStarPinkMaterial;
Level-=16;
C.SetDrawColor(255, 255, 255, C.DrawColor.A);
}
else if ( Level>12 )
{
PerkIcon = Default.OnHUDBlueIcon;
StarIcon = Class'SRVeterancyTypes'.Default.VetStarBlueMaterial;
Level-=12;
C.SetDrawColor(255, 255, 255, C.DrawColor.A);
}
else if ( Level>8 )
{
PerkIcon = Default.OnHUDGreenIcon;
StarIcon = Class'SRVeterancyTypes'.Default.VetStarGreenMaterial;
Level-=8;
C.SetDrawColor(255, 255, 255, C.DrawColor.A);
}
else if ( Level>4 )
{
PerkIcon = Default.OnHUDYelIcon;
StarIcon = Class'SRVeterancyTypes'.Default.VetStarYelMaterial;
Level-=4;
C.SetDrawColor(255, 255, 255, C.DrawColor.A);
}
else
{
PerkIcon = Default.OnHUDIcon;
StarIcon = Class'HUDKillingFloor'.Default.VetStarMaterial;
C.SetDrawColor(255, 255, 255, C.DrawColor.A);
}
return Min(Level,5);
}
// ...
defaultproperties
{
VetStarGreenMaterial=Texture'perk.Hud_Perk_Star_Green'
VetStarBlueMaterial=Texture'perk.Hud_Perk_Star_Blue'
VetStarSilverMaterial=Texture'perk.Hud_Perk_Star_Silver'
VetStarBirMaterial=Texture'perk.Hud_Perk_Star_Bir'
VetStarBordMaterial=Texture'perk.Hud_Perk_Star_Bord'
VetStarPinkMaterial=Texture'perk.Hud_Perk_Star_Pink'
VetStarYelMaterial=Texture'perk.Hud_Perk_Star_Yel'
NumRequirements=1
}
defaultproperties
{
PerkIndex=4
OnHUDIcon=Texture'perk.Perk_Berserker'
OnHUDGoldIcon=Texture'perk.Perk_Berserker_Gold'
OnHUDGreenIcon=Texture'perk.Perk_Berserker_Green'
OnHUDBlueIcon=Texture'perk.Perk_Berserker_Blue'
OnHUDSilverIcon=Texture'perk.Perk_Berserker_Silver'
OnHUDBirIcon=Texture'perk.Perk_Berserker_Bir'
OnHUDBordIcon=Texture'perk.Perk_Berserker_Bord'
OnHUDPinkIcon=Texture'perk.Perk_Berserker_Pink'
OnHUDYelIcon=Texture'perk.Perk_Berserker_Yel'
}
Автор: LLIePLLIeHb
При таком способе звёздочки тоже нужно перекрасить под цвет соответствующей иконки.
Как нарисовать и подключить свою иконку
Из темы «Как сделать значок перка» на форуме killingfloor.ru (Gwyn, 2012):
- В графическом редакторе создайте картинку 256×256 пикселей и нарисуйте значок. Часть рисунка, которая должна быть прозрачной, сделайте альфа-каналом. Сохраните в
.dds(для Photoshop нужен плагин) или в.tga. - В редакторе карт (KF SDK) создайте пакет текстур и импортируйте туда значок.
- В исходниках ServerPerks откройте файл перка и замените путь к стандартной текстуре на свой. Стандартные значения выглядят так:
OnHUDIcon=Texture'KillingFloorHUD.Perks.Perk_Berserker'
OnHUDGoldIcon=Texture'KillingFloor2HUD.Perk_Icons.Perk_Berserker_Gold'
Вместо KillingFloor2HUD.Perk_Icons.Perk_Berserker_Gold укажите путь к своему рисунку, например:
OnHUDGoldIcon=Texture'MyTex.Perks.Bers'
- Скомпилируйте пакет.
OnHUDIcon используется для уровней 1–5, OnHUDGoldIcon — с 6-го. Отдельную иконку для более высоких уровней можно задать через новую переменную в SRVeterancyTypes и функцию PreDrawPerk:
var() texture ExampleTex;
static function byte PreDrawPerk( Canvas C, byte Level, out Material PerkIcon, out Material StarIcon )
В эту функцию добавьте:
if ( Level>8 ) // с 9 уровня
{
PerkIcon = Default.ExampleTex; // текстура
StarIcon = none; // без звёздочки
Level-=8;
C.SetDrawColor(255, 255, 255, C.DrawColor.A); // 255, 255, 255 - цвет не меняется
}
А в файле перка допишите ExampleTex=Texture'MyTex.Perks.Bers'. Полный вариант с отдельными иконками и звёздами на каждые 4 уровня приведён выше.
Что ещё делает PreDrawPerk
Из статьи «Значки перков (часть 2)» Flame и НАТАХИ (форум killingfloor.ru, тема «[цикл статей] Разное»):
- Число звёзд. Функция возвращает, сколько звёздочек рисовать в HUD и таблице счёта. За это отвечают строки вида
Level-=5;: на 6-м уровне после вычитания остаётся 1 звезда. - Предел 15 звёзд. Возвращается не
Level, аMin(Level,15), чтобы на условном 100-м уровне экран не был зарисован звёздами. Поправьте число, если хотите видеть больше или меньше звёзд. - Столбики по 5. Звёзды рисуются по 5 штук по вертикали, затем начинается новый столбик:
if( ++Counter==5 )
{
Counter = 0;
TempX+=VetStarSize;
}
Этот код есть в SRHUDKillingFloor.DrawPlayerInfo, аналогичный — в SRHUDKillingFloor.DrawHudPassA и SRScoreBoard.DrawPerkWithStars.
- Цвет.
C.SetDrawColor(R, G, B, C.DrawColor.A)задаёт цвет, которым рисуются иконка и звёзды; белый (255, 255, 255) оставляет цвет текстуры. Для перекраски лучше брать золотую иконку, а не красную: результат ближе к заданному цвету, хотя небольшая подгонка всё равно понадобится.
Иконки HUD (здоровье, броня, патроны)
Из темы «Редактирование иконок в игре» (форум killingfloor.ru). Путь к своей иконке перка задаётся в классе перка (OnHUDIcon=Texture'NewPerks.Perks.Perk_Berserker' в defaultproperties), а для остальных иконок HUD (здоровье, броня, патроны и т. п.) такой настройки в KF нет: по словам Dr_Killjoy, код для этого придётся писать самому. Иконки заданы переменными HUD (var() SpriteWidget HealthIcon;, ArmorIcon, ClipsIcon, WelderIcon, SyringeIcon, CashIcon и др.), а их текстуры и положение — в его defaultproperties, например:
HealthIcon=(WidgetTexture=Texture'KillingFloorHUD.HUD.Hud_Medical_Cross',RenderStyle=STY_Alpha,TextureCoords=(X2=64,Y2=64),TextureScale=0.16,DrawPivot=DP_UpperLeft,PosX=0.021,PosY=0.947,ScaleMode=SM_Right,Scale=1.000000,Tints[0]=(B=255,G=255,R=255,A=255),Tints[1]=(B=255,G=255,R=255,A=255))
Перерисованные иконки не стоит сохранять в стандартный KillingFloorHUD: автор темы отмечал, что у подключающихся игроков тогда будут ошибки с пакетами.