Пусть у нас есть мутатор NewWeapons и мы хотим перекинуть какое-нибудь оружие из него в ServerPerks.
Декомпилируем NewWeapons, берём файлы относящиеся к оружию, копируем их в папку с файлами ServerPerks (пусть для простоты ServerPerks декомпилируется в одну папку, как и было до 5.10 версии)
В новых файлах заменяем все ссылки NewWeapons.* на ServerPerks.* Всевозможные NewWeapons.WeaponPickup заменяем на ServerPerks.WeaponPickup и тому подобное
После этого спокойно прописываем оружие в нужный SRVet* (например, оружие снайпера в SRVetSharpshooter и т.д) В общем то всё
Во время компиляции ServerPerks желательно удалить пакет NewWeapons.u Чтобы сразу было ясно - остались не поправленные ссылки или нет
Бонусы Каждый перк имеет свой .uc файл. Например у коммандоса - это SRVetCommando.uc. Что бы правильно прописать бонусы нужно знать семантику классов Я взял в пример АК47
Как привязать бонус к оружию (увеличение патронов в рожке)
Находим функцию GetMagCapacityMod - там видим пример кода. AK47AssaultRifle(Other) != none - на какое оружие действует if ( KFPRI.ClientVeteranSkillLevel == 1 ) - на каком уровне действует return 1.10; - на сколько идёт увеличение патронов в рожке
Как привязать бонус к оружию (увеличение переносимых патронов)
Находим функцию AddExtraAmmoFor - там видим пример кода. AmmoType == class'AK47Ammo' - на какое оружие действует if ( KFPRI.ClientVeteranSkillLevel == 1 ) - на каком уровне действует return 1.10; - на сколько идёт увеличение переносимых патронов
Как привязать бонус к оружию (увеличение подбираемых патронов из ящиков)
Находим функцию GetAmmoPickupMod - там видим пример кода. AK47Ammo(Other) != none - на какое оружие действует if ( KFPRI.ClientVeteranSkillLevel == 1 ) - на каком уровне действует return 1.10; - на сколько идёт увеличение подбираемых патронов из ящиков
Как привязать бонус к оружию (увеличение урона от оружия)
Находим функцию AddDamage - там видим пример кода. DmgType == class'DamTypeAK47AssaultRifle' - на какое оружие действует if ( KFPRI.ClientVeteranSkillLevel == 0 ) - на каком уровне действует return float(InDamage) * 1.05; - на сколько идёт увеличение урона return float(InDamage) * (1.00 + (0.10 * float(Min(KFPRI.ClientVeteranSkillLevel, 5)))); - формула увеличения урона
Как привязать бонус к оружию (скидка на оружие)
Находим функцию GetCostScaling - там видим пример кода. Item == class'AK47Pickup' - на какое оружие действует
Как привязать бонус к оружию (скидка на патроны)
Находим функцию GetAmmoCostScaling - там видим пример кода. Item == class'AK47Pickup' - на какое оружие действует return FMax(0.25 - (0.03 * float(KFPRI.ClientVeteranSkillLevel)),0.01f); - формула скидки на патроны
final function SetCategoryNum( int N ) { if( ActiveCategory==N ) ActiveCategory = -1; else ActiveCategory = N; SelectionOffset = (N+1); UpdateForSaleBuyables(); Index = N; }
заменяем на: final function SetCategoryNum( int N );
if ( ForSalePickup==None || class<KFWeapon>(ForSalePickup.default.InventoryType).default.bKFNeverThrow || IsInInventory(ForSalePickup) ) continue;
Заменяем функцию DrawInvItem(Canvas Canvas, int CurIndex, float X, float Y, float Width, float Height, bool bSelected, bool bPending) на более стандартный вариант с подменой KFGameType на ClientPerkRepLink:
function DrawInvItem(Canvas Canvas, int CurIndex, float X, float Y, float Width, float Height, bool bSelected, bool bPending) { local float TempX, TempY, TempHeight; local float StringHeight, StringWidth; local ClientPerkRepLink KFLR; OnClickSound=CS_Click;
// Offset for the Background TempX = X; TempY = Y + ItemSpacing / 2.0;
Подскажите пожалуйста, у меня на 1047 медик бросает гранаты которые хиляют и наносят урон зомбакам. Но когда я добавляю Серверперкс 6.1 мед бросает обычные гранаты. Как это исправить?
Добавь в ServerPerksP.SRVetFieldMedic данную функцию: (или отредактируй уже имеющуюся) Spoiler