Sprache Deutsch Language English

Script Dokumentation LS 2015 - FruitPreparerAreaEvent (Patch 1.3)

Script Dokumentation Übersicht

scripts/vehicles/specializations/FruitPreparerAreaEvent.lua

Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
1-- Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved.
2
3FruitPreparerAreaEvent = {};
4FruitPreparerAreaEvent_mt = Class(FruitPreparerAreaEvent, Event);
5
6InitStaticEventClass(FruitPreparerAreaEvent, "FruitPreparerAreaEvent", EventIds.EVENT_FRUIT_PREPARER_AREA);
7
8function FruitPreparerAreaEvent:emptyNew()
9 local self = Event:new(FruitPreparerAreaEvent_mt);
10 return self;
11end
12
13function FruitPreparerAreaEvent:new(areas, numAreas, fruitType)
14 local self = FruitPreparerAreaEvent:emptyNew()
15 self.areas = areas;
16 self.numAreas = numAreas;
17 self.fruitType = fruitType;
18 assert(numAreas <= 8 and numAreas > 0);
19 return self;
20end
21
22function FruitPreparerAreaEvent:readStream(streamId, connection)
23 local numAreas = streamReadUIntN(streamId, 3)+1;
24 local fruitType = streamReadUIntN(streamId, FruitUtil.sendNumBits);
25
26 local params = g_currentMission.areaCompressionParams;
27 local paramsRelative = g_currentMission.areaRelativeCompressionParams;
28 for i=1, numAreas do
29 local x = Utils.readCompressedWorldPosition(streamId, params);
30 local z = Utils.readCompressedWorldPosition(streamId, params);
31 local x1 = x + Utils.readCompressedWorldPosition(streamId, paramsRelative);
32 local z1 = z + Utils.readCompressedWorldPosition(streamId, paramsRelative);
33 local x2 = x + Utils.readCompressedWorldPosition(streamId, paramsRelative);
34 local z2 = z + Utils.readCompressedWorldPosition(streamId, paramsRelative);
35 if streamReadBool(streamId) then
36 local dx = x + Utils.readCompressedWorldPosition(streamId, paramsRelative);
37 local dz = z + Utils.readCompressedWorldPosition(streamId, paramsRelative);
38 local dx1 = x + Utils.readCompressedWorldPosition(streamId, paramsRelative);
39 local dz1 = z + Utils.readCompressedWorldPosition(streamId, paramsRelative);
40 local dx2 = x + Utils.readCompressedWorldPosition(streamId, paramsRelative);
41 local dz2 = z + Utils.readCompressedWorldPosition(streamId, paramsRelative);
42 Utils.updateFruitPreparerArea(fruitType, x, z, x1, z1, x2, z2, dx, dz, dx1, dz1, dx2, dz2);
43 else
44 Utils.updateFruitPreparerArea(fruitType, x, z, x1, z1, x2, z2, x, z, x1, z1, x2, z2);
45 end
46 end
47end
48
49function FruitPreparerAreaEvent:writeStream(streamId, connection)
50 streamWriteUIntN(streamId, self.numAreas-1, 3);
51 streamWriteUIntN(streamId, self.fruitType, FruitUtil.sendNumBits);
52
53 local params = g_currentMission.areaCompressionParams;
54 local paramsRelative = g_currentMission.areaRelativeCompressionParams;
55 for i=1, self.numAreas do
56 local area = self.areas[i];
57 Utils.writeCompressedWorldPosition(streamId, area.x, params);
58 Utils.writeCompressedWorldPosition(streamId, area.z, params);
59 Utils.writeCompressedWorldPosition(streamId, area.x1 - area.x, paramsRelative);
60 Utils.writeCompressedWorldPosition(streamId, area.z1 - area.z, paramsRelative);
61 Utils.writeCompressedWorldPosition(streamId, area.x2 - area.x, paramsRelative);
62 Utils.writeCompressedWorldPosition(streamId, area.z2 - area.z, paramsRelative);
63 if streamWriteBool(streamId, area.hasSeparateDropArea) then
64 Utils.writeCompressedWorldPosition(streamId, area.dx - area.x, paramsRelative);
65 Utils.writeCompressedWorldPosition(streamId, area.dz - area.z, paramsRelative);
66 Utils.writeCompressedWorldPosition(streamId, area.dx1 - area.x, paramsRelative);
67 Utils.writeCompressedWorldPosition(streamId, area.dz1 - area.z, paramsRelative);
68 Utils.writeCompressedWorldPosition(streamId, area.dx2 - area.x, paramsRelative);
69 Utils.writeCompressedWorldPosition(streamId, area.dz2 - area.z, paramsRelative);
70 end
71 end
72end
73
74function FruitPreparerAreaEvent:run(connection)
75 print("Error: Do not run FruitPreparerAreaEvent locally");
76end
77
78
79function FruitPreparerAreaEvent.runLocally(areas, numAreas, fruitType)
80
81 local params = g_currentMission.areaCompressionParams;
82 local paramsRelative = g_currentMission.areaRelativeCompressionParams;
83
84 local numAreasUsed = 0;
85 for i=1, numAreas do
86 local area = areas[i];
87
88 local x = Utils.simWriteCompressedWorldPosition(area.x, params);
89 local z = Utils.simWriteCompressedWorldPosition(area.z, params);
90 local x1 = x + Utils.simWriteCompressedWorldPosition(area.x1 - area.x, paramsRelative);
91 local z1 = z + Utils.simWriteCompressedWorldPosition(area.z1 - area.z, paramsRelative);
92 local x2 = x + Utils.simWriteCompressedWorldPosition(area.x2 - area.x, paramsRelative);
93 local z2 = z + Utils.simWriteCompressedWorldPosition(area.z2 - area.z, paramsRelative);
94
95 local areaChanged = 0;
96 if area.hasSeparateDropArea then
97 local dx = x + Utils.simWriteCompressedWorldPosition(area.dx - area.x, paramsRelative);
98 local dz = z + Utils.simWriteCompressedWorldPosition(area.dz - area.z, paramsRelative);
99 local dx1 = x + Utils.simWriteCompressedWorldPosition(area.dx1 - area.x, paramsRelative);
100 local dz1 = z + Utils.simWriteCompressedWorldPosition(area.dz1 - area.z, paramsRelative);
101 local dx2 = x + Utils.simWriteCompressedWorldPosition(area.dx2 - area.x, paramsRelative);
102 local dz2 = z + Utils.simWriteCompressedWorldPosition(area.dz2 - area.z, paramsRelative);
103
104 areaChanged = Utils.updateFruitPreparerArea(fruitType, x, z, x1, z1, x2, z2, dx, dz, dx1, dz1, dx2, dz2);
105 else
106 areaChanged = Utils.updateFruitPreparerArea(fruitType, x, z, x1, z1, x2, z2, x, z, x1, z1, x2, z2);
107 end
108
109 if areaChanged > 0 then
110 numAreasUsed = numAreasUsed + 1;
111 if numAreasUsed ~= i then
112 -- swap the areas so that we have all used areas at the beginning
113 areas[numAreasUsed], areas[i] = areas[i], areas[numAreasUsed];
114 end
115 end
116 end
117 return numAreasUsed;
118end
Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
Script Dokumentation Übersicht