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

VipItemMut (Отслеживание вип игроков с помощью предмета в инвентаре)

denfil777

Патриарх
Команда форума
Регистрация
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
Код:
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
 
Последнее редактирование:
Сверху Снизу