- Регистрация
- 12 Янв 2024
- Сообщения
- 76
- Реакции
- 10
- Баллы
- 8
Итак, суть мутатора в следующем:
Игроку из Vip списка вручается некий предмет VipItem в момент появления его тушки (KFHumanPawn) в игре
Сам по себе мутатор ничего полезного не делает - он просто добавляет предмет в инвентарь.
Проверка наличия этого предмета впоследствии используется в другом коде.
Поэтому в конце поста будет обновляемый список ссылок на практическое применение этого мутатора
Мутатор самый простейший, никаких усложнений мутатора или Vip элемента я намеренно не делал
Алгоритм:
1. Игрок заходит в игру, у него создаётся тело KFHumanPawn - это отлавливается в CheckReplacement
2. Если тело есть в вип списке - создаётся объект VipItem и кладётся в Inventory игрока
Ини:
VipPlayers=(PlayerName="Flame",ID="76561198051378449")
VipPlayers=(PlayerName="FreshMeat",ID="76561198051378448")
PlayerName - чисто декоративная переменная, чтобы понимать чей это ID
ID - собственно ID вип игрока
VipItemMut
VipItem
Код для добавления на сервер:
VipItemMut.VipItemMut
Ссылка 1 или Ссылка 2
Автор Flame
Иная вариация этого мутатора.
В данной версии код попроще и можно выдавать различные предметы, расширяя тем самым возможности персонализации игрока.
INI
VipList=(PlayerName="Flame",PlayerID="76561198051378",VipItem="PersonalItemMut.PersonalItem")
VipList=(PlayerName="Essence",PlayerID="76561198051379",VipItem="PersonalItemMut.AnotherPersonalItem")
PlayerID - ID игрока.
VipItem - Путь к предмету, которой выдаётся игроку при появлении в игре и после оживления.
PlayerName - Для удобства, чтобы знать, чей ID.
PersonalItemMut
Код для добавления мутатора на сервер:
PersonalItemMut.PersonalItemMut
Ссылка
Ссылка 2
Игроку из Vip списка вручается некий предмет VipItem в момент появления его тушки (KFHumanPawn) в игре
Сам по себе мутатор ничего полезного не делает - он просто добавляет предмет в инвентарь.
Проверка наличия этого предмета впоследствии используется в другом коде.
Поэтому в конце поста будет обновляемый список ссылок на практическое применение этого мутатора
Мутатор самый простейший, никаких усложнений мутатора или Vip элемента я намеренно не делал
Алгоритм:
1. Игрок заходит в игру, у него создаётся тело KFHumanPawn - это отлавливается в CheckReplacement
2. Если тело есть в вип списке - создаётся объект VipItem и кладётся в Inventory игрока
Ини:
VipPlayers=(PlayerName="Flame",ID="76561198051378449")
VipPlayers=(PlayerName="FreshMeat",ID="76561198051378448")
PlayerName - чисто декоративная переменная, чтобы понимать чей это ID
ID - собственно ID вип игрока
VipItemMut
Код:
class VipItemMut extends Mutator config(VipItemMut);
//Поле PlayerName никак в коде не используется. Добавил его для удобства пользования - чтобы не вспоминать что за игрок по его ID
struct VipPlayersStruct
{
var config string ID;
var config string PlayerName;
};
var config array<VipPlayersStruct> VipPlayers;
var array<KFHumanPawn> PendingPlayers;
//SaveConfig тут для удобства - чтобы не создавать руками ini файл
function PostBeginPlay()
{
SaveConfig();
}
//Отлавливаем появление тела игрока
function bool CheckReplacement(Actor Other, out byte bSuperRelevant)
{
if (Other.IsA('KFHumanPawn'))
{
PendingPlayers[PendingPlayers.Length] = KFHumanPawn(Other);
SetTimer(0.1,false);
}
return Super.CheckReplacement(Other, bSuperRelevant);
}
//В таймере основной код. Если игрок в вип списке - даём ему экземпляр VipItem
function Timer()
{
local VipItem vItem;
local int i;
for(i=(PendingPlayers.Length-1);i>=0;--i)
{
if(PlayerInVipList(PendingPlayers[i]))
{
vItem = spawn(class'VipItem');
vItem.GiveTo(PendingPlayers[i]);
}
}
PendingPlayers.Length = 0;
}
//Принадлежность Vip списку
function bool PlayerInVipList(KFHumanPawn KFHP)
{
local int i;
if(KFHP==none || PlayerController(KFHP.Controller)==none)
return false;
for(i=0;i<VipPlayers.Length;i++)
{
if(VipPlayers[i].ID~=PlayerController(KFHP.Controller).GetPlayerIDHash())
return true;
}
return false;
}
defaultproperties
{
bAddToServerPackages=True
VipPlayers(0)=(PlayerName="Flame",ID="76561198051378449")
GroupName="VipItemMut"
FriendlyName="VipItemMut"
Description="Gives Vip Item to player"
}
VipItem
Код:
class VipItem extends Inventory;
defaultproperties
{
bOnlyRelevantToOwner=False
bAlwaysRelevant=True
bReplicateInstigator=True
}
Код для добавления на сервер:
VipItemMut.VipItemMut
Ссылка 1 или Ссылка 2
Автор Flame
Иная вариация этого мутатора.
В данной версии код попроще и можно выдавать различные предметы, расширяя тем самым возможности персонализации игрока.
INI
VipList=(PlayerName="Flame",PlayerID="76561198051378",VipItem="PersonalItemMut.PersonalItem")
VipList=(PlayerName="Essence",PlayerID="76561198051379",VipItem="PersonalItemMut.AnotherPersonalItem")
PlayerID - ID игрока.
VipItem - Путь к предмету, которой выдаётся игроку при появлении в игре и после оживления.
PlayerName - Для удобства, чтобы знать, чей ID.
PersonalItemMut
Код:
class PersonalItemMut extends Mutator config(PersonalItemMut);
struct VipStruct
{
var config string PlayerName;
var config string PlayerID;
var config string VipItem;
};
var config array<VipStruct> VipList;
function PostBeginPlay()
{
SaveConfig();
}
function ModifyPlayer(Pawn P)
{
Super.ModifyPlayer(P);
GivePersonalItemForVip(P);
}
function GivePersonalItemForVip(Pawn P)
{
local Class<Inventory> VipItem;
local PlayerController PC;
local Inventory VipInv;
local string Hash;
local int i;
if(P!=None)
PC=PlayerController(P.Controller);
if(PC!=None)
Hash=PC.GetPlayerIDHash();
for(i=0;i<VipList.Length;i++)
{
if(VipList[i].PlayerID~=Hash)
{
VipItem=Class<Inventory>(DynamicLoadObject(VipList[i].VipItem, Class'Class'));
VipInv=Spawn(VipItem);
P.AddInventory(VipInv);
}
}
}
defaultproperties
{
VipList(0)=(PlayerID="76561198051378",PlayerName="Flame",VipItem="PersonalItemMut.PersonalItem")
VipList(1)=(PlayerID="76561198051379",PlayerName="Essence",VipItem="PersonalItemMut.AnotherPersonalItem")
bAddToServerPackages=True
GroupName="KF-PersonalItemMut"
FriendlyName="PersonalItemMut"
Description="Give Personal Item By ID"}
Код для добавления мутатора на сервер:
PersonalItemMut.PersonalItemMut
Ссылка
Ссылка 2
Последнее редактирование: