- Регистрация
- 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, выбросить можно.
Код под спойлером
Версия Essence (замена одной пушки на несколько)
Код под спойлером
Ссылка Ссылка 2
StartWeaponReplaceMut.StartWeaponReplaceMut
Версия Essence
Ссылка Ссылка 2
Авторы Flame и Essence
Настройки:
[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
Последнее редактирование: