7 Commits

Author SHA1 Message Date
029b6fa144 add some logs 2022-08-24 19:26:18 +03:00
52507a24fd clean some logs 2022-08-24 19:14:28 +03:00
cb19485ea2 localization 2022-08-24 18:29:25 +03:00
e07e98020b update description and readme 2022-08-14 14:54:31 +03:00
3e4187efd4 update description 2022-08-14 14:49:55 +03:00
21b3d3aa0d update description 2022-07-19 13:30:41 +03:00
8b6e1243ce update logger 2022-07-19 13:30:30 +03:00
9 changed files with 120 additions and 26 deletions

View File

@ -243,14 +243,20 @@ public function NotifyLogin(Controller C)
{
`Log_Trace();
CreateRepInfo(C);
if (!CreateRepInfo(C))
{
`Log_Error("Can't create RepInfo for:" @ C);
}
}
public function NotifyLogout(Controller C)
{
`Log_Trace();
DestroyRepInfo(C);
if (!DestroyRepInfo(C))
{
`Log_Error("Can't destroy RepInfo of:" @ C);
}
}
public function bool CreateRepInfo(Controller C)

View File

@ -15,19 +15,17 @@ public event PreBeginPlay()
foreach WorldInfo.DynamicActors(class'CTI', CTI)
{
`Log_Base("Found 'CTI'");
break;
}
if (CTI == None)
{
`Log_Base("Spawn 'CTI'");
CTI = WorldInfo.Spawn(class'CTI');
}
if (CTI == None)
{
`Log_Base("Can't Spawn 'CTI', Destroy...");
`Log_Base("FATAL: Can't Spawn 'CTI'");
SafeDestroy();
}
}

View File

@ -0,0 +1,73 @@
class CTI_LocalMessage extends Object
abstract;
var const String SyncItemsDefault;
var private localized String SyncItems;
var const String SyncFinishedDefault;
var private localized String SyncFinished;
var const String WaitingGRIDefault;
var private localized String WaitingGRI;
var const String IncompatibleGRIDefault;
var private localized String IncompatibleGRI;
var const String DisconnectDefault;
var private localized String Disconnect;
var const String SecondsShortDefault;
var private localized String SecondsShort;
enum E_CTI_LocalMessageType
{
CTI_SyncItems,
CTI_SyncFinished,
CTI_WaitingGRI,
CTI_IncompatibleGRI,
CTI_Disconnect,
CTI_SecondsShort
};
public static function String GetLocalizedString(
E_LogLevel LogLevel,
E_CTI_LocalMessageType LMT,
optional String String1,
optional String String2,
optional String String3)
{
`Log_TraceStatic();
switch (LMT)
{
case CTI_SyncItems:
return (default.SyncItems != "" ? default.SyncItems : default.SyncItemsDefault);
case CTI_SyncFinished:
return (default.SyncFinished != "" ? default.SyncFinished : default.SyncFinishedDefault);
case CTI_WaitingGRI:
return (default.WaitingGRI != "" ? default.WaitingGRI : default.WaitingGRIDefault);
case CTI_IncompatibleGRI:
return (default.IncompatibleGRI != "" ? default.IncompatibleGRI : default.IncompatibleGRIDefault);
case CTI_Disconnect:
return (default.Disconnect != "" ? default.Disconnect : default.DisconnectDefault);
case CTI_SecondsShort:
return (default.SecondsShort != "" ? default.SecondsShort : default.SecondsShortDefault);
}
return "";
}
defaultproperties
{
SyncItemsDefault = "Sync items:"
SyncFinishedDefault = "Sync finished."
WaitingGRIDefault = "Waiting GRI..."
IncompatibleGRIDefault = "Incompatible GRI:"
DisconnectDefault = "Disconnect..."
SecondsShortDefault = "s"
}

View File

@ -1,6 +1,7 @@
class CTI_RepInfo extends ReplicationInfo;
const Trader = class'Trader';
const Trader = class'Trader';
const LocalMessage = class'CTI_LocalMessage';
var public bool PendingSync;
@ -119,7 +120,7 @@ private simulated function ShowReadyButton()
}
}
private simulated function UpdateNotification(String Title, String Downloading, String Remainig, int Percent)
private simulated function UpdateNotification(String Title, String Left, String Right, int Percent)
{
`Log_Trace();
@ -128,8 +129,8 @@ private simulated function UpdateNotification(String Title, String Downloading,
Notification.SetString("itemName", Title);
Notification.SetFloat("percent", Percent);
Notification.SetInt("queue", 0);
Notification.SetString("downLoading", Downloading);
Notification.SetString("remaining", Remainig);
Notification.SetString("downLoading", Left);
Notification.SetString("remaining", Right);
Notification.SetObject("notificationInfo", Notification);
Notification.SetVisible(true);
}
@ -164,8 +165,9 @@ private reliable client function ClientSync(class<KFWeaponDefinition> WeapDef, o
Recieved = RemoveItems.Length + AddItems.Length;
NotificationLeftText = WeapDef.static.GetItemName();
NotificationRightText = Recieved @ "/" @ SyncSize @ "(" $ (Remove ? "remove" : "add") $ ")";
NotificationHeaderText = (Remove ? "-" : "+") @ WeapDef.static.GetItemName();
NotificationLeftText = LocalMessage.static.GetLocalizedString(LogLevel, CTI_SyncItems);
NotificationRightText = Recieved @ "/" @ SyncSize;
if (SyncSize != 0)
{
NotificationPercent = (float(Recieved) / float(SyncSize)) * 100;
@ -199,8 +201,8 @@ private simulated reliable client function ClientSyncFinished()
if (WorldInfo.GRI == None)
{
`Log_Debug("ClientSyncFinished: Waiting GRI");
NotificationHeaderText = "Waiting for GameReplicationInfo...";
NotificationLeftText = String(++WaitingGRI) $ "s";
NotificationHeaderText = LocalMessage.static.GetLocalizedString(LogLevel, CTI_WaitingGRI);
NotificationLeftText = String(++WaitingGRI) $ LocalMessage.static.GetLocalizedString(LogLevel, CTI_SecondsShort);
NotificationRightText = "";
SetTimer(1.0f, false, nameof(ClientSyncFinished));
return;
@ -212,15 +214,15 @@ private simulated reliable client function ClientSyncFinished()
`Log_Fatal("Incompatible Replication info:" @ String(WorldInfo.GRI));
ClearTimer(nameof(KeepNotification));
UpdateNotification(
"Incompatible GRI:" @ String(WorldInfo.GRI),
"Disconnect...", "", 0);
LocalMessage.static.GetLocalizedString(LogLevel, CTI_IncompatibleGRI) @ String(WorldInfo.GRI),
LocalMessage.static.GetLocalizedString(LogLevel, CTI_Disconnect), "", 0);
Cleanup();
ConsoleCommand("Disconnect");
SafeDestroy();
return;
}
NotificationHeaderText = "Sync finished";
NotificationHeaderText = LocalMessage.static.GetLocalizedString(LogLevel, CTI_SyncFinished);
NotificationLeftText = "";
NotificationRightText = "";
NotificationPercent = 0;
@ -285,7 +287,6 @@ defaultproperties
PendingSync = false
Recieved = 0
NotificationHeaderText = "Sync trader items, please wait..."
NotificationPercent = 0
WaitingGRI = 0
}

View File

@ -4,6 +4,7 @@ class _Logger extends Object
enum E_LogLevel
{
LL_WrongLevel,
LL_None,
LL_Fatal,
LL_Error,
LL_Warning,

BIN
Localization/INT/CTI.int Normal file

Binary file not shown.

BIN
Localization/RUS/CTI.rus Normal file

Binary file not shown.

View File

@ -1,4 +1,4 @@
[img]https://img.shields.io/static/v1?logo=GitHub&labelColor=gray&color=blue&logoColor=white&label=&message=Open Source[/img] [img]https://img.shields.io/github/license/GenZmeY/KF2-CustomTraderInventory[/img] [img]https://img.shields.io/steam/subscriptions/2830826239[/img] [img]https://img.shields.io/steam/favorites/2830826239[/img] [img]https://img.shields.io/steam/update-date/2830826239[/img] [url=https://steamcommunity.com/sharedfiles/filedetails/changelog/2830826239][img]https://img.shields.io/github/v/tag/GenZmeY/KF2-CustomTraderInventory[/img][/url]
[img]https://img.shields.io/static/v1?logo=GitHub&labelColor=gray&color=blue&logoColor=white&label=&message=Open Source[/img] [img]https://img.shields.io/github/license/GenZmeY/KF2-CustomTraderInventory[/img] [img]https://img.shields.io/steam/downloads/2830826239[/img] [img]https://img.shields.io/steam/favorites/2830826239[/img] [img]https://img.shields.io/steam/update-date/2830826239[/img] [url=https://steamcommunity.com/sharedfiles/filedetails/changelog/2830826239][img]https://img.shields.io/github/v/tag/GenZmeY/KF2-CustomTraderInventory[/img][/url]
[h1]Features[/h1]
[list]
@ -35,20 +35,27 @@ No. This mod is not whitelisted and will de-rank your server. Any XP gained will
[/olist]
[h1]Setup (KFCTI.ini)[/h1]
Config will be created at the first start.
Config will be created at the first start[b]*[/b].
[list]
[*]Set [b]bPreloadContent=True[/b] to load weapon models in advance and have no lags during the game.
[*]Set [b]bOfficialWeaponsList=True[/b] to have an auto-updated list of all official weapons in the config (for a convenient copy-paste).
[*]Set [b]UnlockDLC[/b] to customize DLC weapon unlocks. Here are the possible values:
[b]False[/b] - disable DLC unlock.
[b]ReplaceFilter[/b] - changes the trader filter allowing you to buy original DLC weapons without restrictions, unlocks future DLCs as well (no need to update this mutator). However, it replaces the [b]KFGFxMoviePlayer_Manager[/b] class so it may not be compatible with mods that also replace it.
[b]ReplaceWeapons[/b] - replaces DLC weapons with their unlocked variants. Compatible with any mods, but may require a CTI update after the release of new DLC weapons.
[b]True[/b] or [b]Auto[/b] - selects the most appropriate option automatically. Recommend putting CTIMut last in the mutator load queue if you use this.
[list]
[*][b]False[/b] - disable DLC unlock.
[*][b]ReplaceFilter[/b] - changes the trader filter allowing you to buy original DLC weapons without restrictions, unlocks future DLCs as well (no need to update this mutator). However, it replaces the - [b]KFGFxMoviePlayer_Manager[/b] class so it may not be compatible with mods that also replace it.
[*][b]ReplaceWeapons[/b] - replaces DLC weapons with their unlocked variants. Compatible with any mods, but may require a CTI update after the release of new DLC weapons.
[*][b]True[/b] or [b]Auto[/b] - selects the most appropriate option automatically. Recommend putting CTIMut last in the mutator load queue if you use this.
[/list]
[*]Use [b][CTI.RemoveItems][/b] to remove items from the trader inventory.
For example: [b]Item=KFGame.KFWeapDef_Mac10[/b] will remove MAC10 from sale.
example: [b]Item=KFGame.KFWeapDef_Mac10[/b] will remove MAC10 from sale.
[*]Set [b]bAll=True[/b] if you want to remove all items (can be useful if you want to set the entire sale list in the [b][CTI.AddItems][/b] section yourself).
[*]Use [b][CTI.AddItems][/b] to add items to the trader inventory.
For example: [b]Item=WeaponPack.KFWeapDef_XM25[/b] will add [url=https://steamcommunity.com/sharedfiles/filedetails/?id=1147408497]XM25[/url] to sale.
example: [b]Item=WeaponPack.KFWeapDef_XM25[/b] will add [url=https://steamcommunity.com/sharedfiles/filedetails/?id=1147408497]XM25[/url] to sale.
[/list]
[h1]🔗 [url=https://steamcommunity.com/workshop/filedetails/discussion/2830826239/3409804177172972154]Weapon Packs Items[/url][/h1]
@ -56,5 +63,13 @@ For example: [b]Item=WeaponPack.KFWeapDef_XM25[/b] will add [url=https://steamco
📌 Mutator does not contain custom weapons. You must have the required weapon packs in your subscriptions to be able to add them to the trader.
📌 If you are using this mutator to add weapons, you should [b]not[/b] use mutators from weapon packs (just having them in subscriptions is enough).
[h1]Troubleshooting[/h1]
[b](*)[/b] If your config is not created for some reason, create it manually with the following content:
[b][CTI.CTI]
Version=0
[/b]
Then start the server and check the file again - config content should be generated.
[h1]Sources[/h1]
[url=https://github.com/GenZmeY/KF2-CustomTraderInventory]https://github.com/GenZmeY/KF2-CustomTraderInventory[/url] [b](GNU GPLv3)[/b]

View File

@ -1,7 +1,7 @@
# Custom Trader Inventory
[![Steam Workshop](https://img.shields.io/static/v1?message=workshop&logo=steam&labelColor=gray&color=blue&logoColor=white&label=steam%20)](https://steamcommunity.com/sharedfiles/filedetails/?id=2830826239)
[![Steam Subscriptions](https://img.shields.io/steam/subscriptions/2830826239)](https://steamcommunity.com/sharedfiles/filedetails/?id=2830826239)
[![Steam Downloads](https://img.shields.io/steam/downloads/2830826239)](https://steamcommunity.com/sharedfiles/filedetails/?id=2830826239)
[![Steam Favorites](https://img.shields.io/steam/favorites/2830826239)](https://steamcommunity.com/sharedfiles/filedetails/?id=2830826239)
[![Steam Update Date](https://img.shields.io/steam/update-date/2830826239)](https://steamcommunity.com/sharedfiles/filedetails/?id=2830826239)
[![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/GenZmeY/KF2-CustomTraderInventory)](https://github.com/GenZmeY/KF2-CustomTraderInventory/tags)