14 Commits

Author SHA1 Message Date
a87f5bf697 update build tools 2022-09-13 04:36:39 +03:00
25e9d96b44 update build tools 2022-09-02 16:22:18 +03:00
2d2975b7ed Merge branch 'master' of https://github.com/GenZmeY/KF2-CustomTraderInventory 2022-09-02 15:30:27 +03:00
247eef02aa update build tools 2022-09-02 15:29:52 +03:00
a00d80918f Update description.txt 2022-09-02 11:48:27 +03:00
5e4086c861 fix false "error": "Cant destroy RepInfo" 2022-08-30 09:55:09 +03:00
f92bea7114 fix notify login/logout order 2022-08-30 08:26:40 +03:00
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
12 changed files with 138 additions and 37 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.psd
/ignore

View File

@ -243,7 +243,10 @@ public function NotifyLogin(Controller C)
{ {
`Log_Trace(); `Log_Trace();
CreateRepInfo(C); if (!CreateRepInfo(C))
{
`Log_Error("Can't create RepInfo for:" @ C);
}
} }
public function NotifyLogout(Controller C) public function NotifyLogout(Controller C)
@ -298,8 +301,8 @@ public function bool DestroyRepInfo(Controller C)
{ {
if (RepInfo.Owner == C) if (RepInfo.Owner == C)
{ {
RepInfo.SafeDestroy();
RepInfos.RemoveItem(RepInfo); RepInfos.RemoveItem(RepInfo);
RepInfo.SafeDestroy();
return true; return true;
} }
} }

View File

@ -15,19 +15,17 @@ public event PreBeginPlay()
foreach WorldInfo.DynamicActors(class'CTI', CTI) foreach WorldInfo.DynamicActors(class'CTI', CTI)
{ {
`Log_Base("Found 'CTI'");
break; break;
} }
if (CTI == None) if (CTI == None)
{ {
`Log_Base("Spawn 'CTI'");
CTI = WorldInfo.Spawn(class'CTI'); CTI = WorldInfo.Spawn(class'CTI');
} }
if (CTI == None) if (CTI == None)
{ {
`Log_Base("Can't Spawn 'CTI', Destroy..."); `Log_Base("FATAL: Can't Spawn 'CTI'");
SafeDestroy(); SafeDestroy();
} }
} }
@ -44,16 +42,16 @@ public function AddMutator(Mutator Mut)
public function NotifyLogin(Controller C) public function NotifyLogin(Controller C)
{ {
Super.NotifyLogin(C);
CTI.NotifyLogin(C); CTI.NotifyLogin(C);
Super.NotifyLogin(C);
} }
public function NotifyLogout(Controller C) public function NotifyLogout(Controller C)
{ {
Super.NotifyLogout(C);
CTI.NotifyLogout(C); CTI.NotifyLogout(C);
Super.NotifyLogout(C);
} }
DefaultProperties DefaultProperties

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

View File

@ -4,6 +4,7 @@ class _Logger extends Object
enum E_LogLevel enum E_LogLevel
{ {
LL_WrongLevel, LL_WrongLevel,
LL_None,
LL_Fatal, LL_Fatal,
LL_Error, LL_Error,
LL_Warning, 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] [h1]Features[/h1]
[list] [list]
@ -35,26 +35,40 @@ No. This mod is not whitelisted and will de-rank your server. Any XP gained will
[/olist] [/olist]
[h1]Setup (KFCTI.ini)[/h1] [h1]Setup (KFCTI.ini)[/h1]
Config will be created at the first start. Config will be created at the first start[b]*[/b].
[list] [list]
[*]Set [b]bPreloadContent=True[/b] to load weapon models in advance and have no lags during the game. [*]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]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: [*]Set [b]UnlockDLC[/b] to customize DLC weapon unlocks. Here are the possible values:
[b]False[/b] - disable DLC unlock. [list]
[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]False[/b] - disable DLC unlock.
[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]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]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. [*][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.
[*]Use [b][CTI.RemoveItems][/b] to remove items from the trader inventory. [*][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.
For example: [b]Item=KFGame.KFWeapDef_Mac10[/b] will remove MAC10 from sale. [/list]
[*]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. [*]Use [b][CTI.RemoveItems][/b] to remove items from 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=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.
example: [b]Item=WeaponPack.KFWeapDef_XM25[/b] will add [url=https://steamcommunity.com/sharedfiles/filedetails/?id=1147408497]XM25[/url] to sale.
[/list] [/list]
[h1]🔗 [url=https://steamcommunity.com/workshop/filedetails/discussion/2830826239/3409804177172972154]Weapon Packs Items[/url][/h1]
[h1]Notes[/h1] [h1]Notes[/h1]
📌 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. 📌 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). 📌 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] [h1]Sources[/h1]
[url=https://github.com/GenZmeY/KF2-CustomTraderInventory]https://github.com/GenZmeY/KF2-CustomTraderInventory[/url] [b](GNU GPLv3)[/b] [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 # 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 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 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) [![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) [![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/GenZmeY/KF2-CustomTraderInventory)](https://github.com/GenZmeY/KF2-CustomTraderInventory/tags)

View File

@ -11,6 +11,15 @@ StripSource="True"
PackageBuildOrder="CTI" PackageBuildOrder="CTI"
### Brew parameters ###
# Packages you want to brew using @peelz's patched KFEditor.
# Useful for cases where regular brew doesn't put *.upk inside the package.
# Specify them with a space as a separator,
# The order doesn't matter
PackagePeelzBrew=""
### Steam Workshop upload parameters ### ### Steam Workshop upload parameters ###
# Mutators that will be uploaded to the workshop # Mutators that will be uploaded to the workshop
@ -30,7 +39,7 @@ Map="KF-Nuked"
# Endless: KFGameContent.KFGameInfo_Endless # Endless: KFGameContent.KFGameInfo_Endless
# Objective: KFGameContent.KFGameInfo_Objective # Objective: KFGameContent.KFGameInfo_Objective
# Versus: KFGameContent.KFGameInfo_VersusSurvival # Versus: KFGameContent.KFGameInfo_VersusSurvival
Game="KFGameContent.KFGameInfo_Endless" Game="KFGameContent.KFGameInfo_Survival"
# Difficulty: # Difficulty:
# Normal: 0 # Normal: 0

2
tools

Submodule tools updated: 2f173aad7a...88b35bd7eb