• Рекомендуем зарегистрироваться для просмотра контента и скачивания файлов!

Замена начального оружия (StartWeaponReplaceMut)

denfil777

Патриарх
Команда форума
Регистрация
12 Янв 2024
Сообщения
74
Реакции
10
Баллы
8
Хотим мы мутатор, который меняет оружие с которым спавнится перк

Настройки:


[StartWeaponReplaceMut.StartWeaponReplaceMut]
ReplaceList=(Perk="SRVetBerserker",OldWeapon="KFMod.Knife",newWeapon="KFMod.Katana",Weight=0,bKFNeverThrow=True)
ReplaceList=(Perk="SRVetSharpshooter",OldWeapon="KFMod.Single",newWeapon="KFMod.MK23Pistol",Weight=0,bKFNeverThrow=False)

Ну всё просто:
Perk - перк
OldWeapon - старое оружие в виде строки (полный адрес)
NewWeapon - новое оружие в виде строки (полный адрес)
Weight - вес, который мы хотим поставить новой пушке
bKFNeverThrow - может ли игрок выкидывать эту пушку
То есть в данном примере мы заменяем нож берсу на катану, вес катаны 0, выбросить её нельзя
Снайпер получает мк23 вместо беретты, вес мк23 - 0, выбросить можно.

Код под спойлером
Код:
class StartWeaponReplaceMut extends Mutator config(StartWeaponReplaceMut);

struct ReplaceStructure
{
var config string Perk;
var config string OldWeapon;
var config string NewWeapon;
var config int Weight;
var config bool bKFNeverThrow;
};
var config array<ReplaceStructure> ReplaceList;
var array<KFHumanPawn> PendingPlayers;

function PostBeginPlay()
{
SaveConfig();
class'KFMod.Single'.default.bKFNeverThrow=false;
Super.PostBeginPlay();
}

function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
{
if(KFHumanPawn(Other)!=none)
{
PendingPlayers[PendingPlayers.Length] = KFHumanPawn(Other);
SetTimer(0.2,false);
}
return true;
}

function Timer()
{
while( PendingPlayers.Length>0 )
{
if( PendingPlayers[0]!=None && PendingPlayers[0].PlayerReplicationInfo.PlayerID>0)
ReplaceWeapons(PendingPlayers[0]);
PendingPlayers.Remove(0,1);
}
}

function ReplaceWeapons(KFHumanPawn P)
{
local KFPlayerReplicationInfo KFPC;
local Name Veterancy;
local int i;
KFPC=KFPlayerReplicationInfo(P.PlayerReplicationInfo);
Veterancy=KFPC.ClientVeteranSkill.Name;
for(i=0;i<ReplaceList.Length;i++)
{
if(ReplaceList[i].Perk~=string(Veterancy))
{
ReplaceWeapon(P,ReplaceList[i].OldWeapon,ReplaceList[i].NewWeapon,ReplaceList[i].Weight,ReplaceList[i].bKFNeverThrow);
}
}
}

function ReplaceWeapon(KFHumanPawn P, string oldWeapon, string newWeapon, int Weight, bool bKFNeverThrow)
{
local Inventory inv;
local KFWeapon W;
local class<KFWeapon> aClass;
local bool bHasOldWeapon;
//Если уже есть такое оружие, то выходим
if( P!=None && P.Inventory!=None )
{
//потом может поправить возможность выкидывать
for(inv=P.Inventory; inv!=None; inv=inv.Inventory )
{
if(string(inv.Class)~=newWeapon)
return;
}

for(inv=P.Inventory; inv!=None; inv=inv.Inventory )
{
if(string(inv.Class)~=oldWeapon)
{
inv.Destroy();
bHasOldWeapon=true;
}
}
if(!bHasOldWeapon) return;
aClass = class<KFWeapon>(DynamicLoadObject(newWeapon, class'Class'));
if(aClass!=None)
{
W=Spawn(aClass);
W.Weight=Weight;
W.bKFNeverThrow=bKFNeverThrow;
W.GiveTo(P);
}
}
}

defaultproperties
{
ReplaceList(0)=(Perk="SRVetBerserker",OldWeapon="KFMod.Knife",newWeapon="KFMod.Katana",bKFNeverThrow=True,Weight=0)
ReplaceList(1)=(Perk="SRVetSharpshooter",OldWeapon="KFMod.Single",newWeapon="KFMod.MK23Pistol")
GroupName="KF-StartWeaponReplace"
FriendlyName="Start Weapon Replace"
Description="Replaces weapons"
}

Версия Essence (замена одной пушки на несколько)
Код под спойлером
Код:
class StartWeaponReplaceMut extends Mutator config(StartWeaponReplaceMut);

struct ReplaceStruct
{
    var config string Perk;
    var config string OldWeapon;
    var config array<string> NewWeapon;
};

var config array<ReplaceStruct> ReplaceList;
var array<KFHumanPawn> PendingPlayers;

function PostBeginPlay()
{
    SaveConfig();
    class'KFMod.Single'.default.bKFNeverThrow=False;
    Super.PostBeginPlay();
}

function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
{
    if(KFHumanPawn(Other)!=None)
    {
        PendingPlayers[PendingPlayers.Length]=KFHumanPawn(Other);
        SetTimer(0.1,false);
    }
    return true;
}

function Timer()
{
    while(PendingPlayers.Length>0)
    {
        if(PendingPlayers[0]!=None && PendingPlayers[0].PlayerReplicationInfo.PlayerID>0)
            ReplaceWeapons(PendingPlayers[0]);
        PendingPlayers.Remove(0,1);
    }
}

function ReplaceWeapons(KFHumanPawn P)
{
    local KFPlayerReplicationInfo KFPRI;
    local Name Veterancy;
    local int i, k;
    if(P!=None)
        KFPRI=KFPlayerReplicationInfo(P.PlayerReplicationInfo);
    if(KFPRI!=None)
        Veterancy=KFPRI.ClientVeteranSkill.Name;
    for(i=0;i<ReplaceList.Length;i++)
    {
        if(ReplaceList.Perk~=string(Veterancy))
        {
            for(k=0;k<ReplaceList.NewWeapon.Length;k++)
            {
                ReplaceWeapon(P,ReplaceList.OldWeapon,ReplaceList.NewWeapon[k]);
            }
            DeleteOldWeapon(P,ReplaceList.oldWeapon);
        }
    }
}

function ReplaceWeapon(KFHumanPawn P, string oldWeapon, string NewWeapon)
{
    local Inventory Inv;
    local KFWeapon KFW;
    local class<KFWeapon> KFWClass;
    local bool bHasOldWeapon;

    if(P!=None && P.Inventory!=None)
    {
        for(Inv=P.Inventory;Inv!=None;Inv=Inv.Inventory)
        {
            if(string(Inv.Class)~=NewWeapon)
                return;
        }
        for(Inv=P.Inventory;Inv!=None;Inv=Inv.Inventory)
        {
            if(string(Inv.Class)~=oldWeapon)
            {
                bHasOldWeapon=True;
            }
        }
        if(!bHasOldWeapon) return;
        KFWClass = class<KFWeapon>(DynamicLoadObject(NewWeapon, class'Class'));
        if(KFWClass!=None)
        {
            KFW=Spawn(KFWClass);
            KFW.GiveTo(P);
        }
    }
}

function DeleteOldWeapon(KFHumanPawn P, string oldWeapon)
{
    local PlayerController PC;
    local Inventory Inv;

    if(P!=None)
        PC=PlayerController(P.Controller);

    for(Inv=P.Inventory;Inv!=None;Inv=Inv.Inventory)
    {
        if(string(Inv.Class)~=oldWeapon)
        {
            Inv.Destroy();
        }
    }
    if(PC!=None && PC.Pawn!=None)
    {
        if(PC.Pawn.Weapon==None)
            PC.SwitchToBestWeapon();
    }
}

defaultproperties
{
    ReplaceList(0)=(Perk="KFVetBerserker",OldWeapon="KFMod.Knife",NewWeapon=("KFMod.Katana","KFMod.ClaymoreSword"))
    bAddToServerPackages=True
    GroupName="KF-StartWeaponReplace"
    FriendlyName="Start Weapon Replace"
    Description="Replaces weapons"
}


Ссылка Ссылка 2
StartWeaponReplaceMut.StartWeaponReplaceMut

Версия Essence
Ссылка
Ссылка 2

Авторы Flame и Essence
 
Последнее редактирование:
Сверху Снизу