Skip to content

Commit 4c7aea1

Browse files
Merge pull request #22 from TheCodingDad-TisonK/fix/mp-dedicated-server
fix: MP dedicated server — route economy operations through server event
2 parents b4a205c + 4086c31 commit 4c7aea1

4 files changed

Lines changed: 54 additions & 4 deletions

File tree

main.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ source(modDirectory .. "src/core/CTTriggerActivatable.lua")
4747
source(modDirectory .. "src/core/CTWorldManager.lua")
4848
source(modDirectory .. "src/core/CTMarkerManager.lua")
4949

50+
-- =========================================================
51+
-- Network events
52+
-- =========================================================
53+
source(modDirectory .. "src/CTCNetworkEvent.lua")
54+
5055
-- =========================================================
5156
-- Triggers
5257
-- =========================================================

modDesc.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
22
<modDesc descVersion="105">
33
<author>TisonK</author>
4-
<version>1.0.5.1</version>
4+
<version>1.0.7.0</version>
55
<modName>FS25_CustomTriggerCreator</modName>
66
<title>
77
<en>Custom Trigger Creator</en>
@@ -11,7 +11,7 @@
1111
<en>Create, configure, and manage custom interaction triggers in-game — no XML or Lua required. Supports basic and advanced multi-step chained trigger flows.</en>
1212
<de>Erstelle, konfiguriere und verwalte benutzerdefinierte Interaktionsauslöser im Spiel — kein XML oder Lua erforderlich. Unterstützt einfache und erweiterte mehrstufige Auslöserketten.</de>
1313
</description>
14-
<iconFilename>icon.png</iconFilename>
14+
<iconFilename>icon.dds</iconFilename>
1515

1616
<l10n filenamePrefix="translations/translation" defaultLanguage="en" />
1717

src/CTCNetworkEvent.lua

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
-- =========================================================
2+
-- CTCNetworkEvent.lua -- FS25_CustomTriggerCreator
3+
-- Routes economy addMoney calls from client to server.
4+
-- Only used when the local machine is a client (not the server).
5+
-- =========================================================
6+
7+
CTCNetworkEvent = {}
8+
CTCNetworkEvent_mt = Class(CTCNetworkEvent, Event)
9+
InitEventClass(CTCNetworkEvent, "CTCNetworkEvent")
10+
11+
function CTCNetworkEvent.emptyNew()
12+
local self = Event.new(CTCNetworkEvent_mt)
13+
return self
14+
end
15+
16+
---@param farmId number Farm to receive/pay the money
17+
---@param amount number Positive = farm receives, negative = farm pays
18+
function CTCNetworkEvent.new(farmId, amount)
19+
local self = CTCNetworkEvent.emptyNew()
20+
self.farmId = farmId
21+
self.amount = amount
22+
return self
23+
end
24+
25+
function CTCNetworkEvent:writeStream(streamId, connection)
26+
streamWriteInt32(streamId, self.farmId or 0)
27+
streamWriteInt32(streamId, self.amount or 0)
28+
end
29+
30+
function CTCNetworkEvent:readStream(streamId, connection)
31+
self.farmId = streamReadInt32(streamId)
32+
self.amount = streamReadInt32(streamId)
33+
self:run(connection)
34+
end
35+
36+
-- Server-side: apply the money operation
37+
function CTCNetworkEvent:run(connection)
38+
if not g_currentMission:getIsServer() then return end
39+
if not self.farmId or self.farmId <= 0 then return end
40+
g_currentMission:addMoney(self.amount, self.farmId, MoneyType.OTHER, true)
41+
end

src/triggers/EconomyTrigger.lua

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ function EconomyTrigger:_applyMoney(delta)
4747
local farmId = self:_getPlayerFarmId()
4848
if not farmId then return BaseTrigger.RESULT.ERROR end
4949

50-
-- Check balance for fees
50+
-- Check balance for fees (local check — server will be authoritative)
5151
if delta < 0 then
5252
local farm = g_farmManager and g_farmManager:getFarmById(farmId)
5353
local balance = farm and farm.money or 0
@@ -57,7 +57,11 @@ function EconomyTrigger:_applyMoney(delta)
5757
end
5858
end
5959

60-
g_currentMission:addMoney(delta, farmId, MoneyType.OTHER, true)
60+
if g_currentMission:getIsServer() then
61+
g_currentMission:addMoney(delta, farmId, MoneyType.OTHER, true)
62+
else
63+
g_client:getServerConnection():sendEvent(CTCNetworkEvent.new(farmId, delta))
64+
end
6165

6266
local label = delta >= 0 and ("+" .. delta .. "$") or (delta .. "$")
6367
self:_notify(label, delta >= 0 and "SUCCESS" or "INFO")

0 commit comments

Comments
 (0)