Script v1_7_1_0
- AI
- Animals
- Collections
- Contracts
- Debug
- Economy
- Elements
- EnvironmentalScore
- Errors
- Events
- GUI
- Handtools
- Hud
- I3d
- Input
- Jobs
- Maps
- Materials
- Misc
- Objects
- Parameters
- Placeables
- Placement
- Player
- Shop
- Sounds
- Specialization
- Specializations
- StateMachine
- Statistics
- Tasks
- Triggers
- Utils
- Vehicles
Engine v1_7_1_0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- general
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- NoteNode
- Overlays
- Particle System
- addParticleSystemSimulationTime
- getEmitStartTime
- getEmitStopTime
- getEmitterShape
- getEmitterShapeVelocityScale
- getParticleSystemAverageSpeed
- getParticleSystemLifespan
- resetEmitStartTimer
- resetEmitStopTimer
- resetNumOfEmittedParticles
- setEmitCountScale
- setEmitStartTime
- setEmitStopTime
- setEmitterShape
- setEmitterShapeVelocityScale
- setEmittingState
- setParticleSystemLifespan
- setParticleSystemTimeScale
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- VoiceChat
- XML
Foundation Reference
EnvironmentalScorePH
ParentEnvironmentalScoreValueFunctions
- addWorkedArea
- getScore
- initFarmlandData
- loadFarmlandData
- loadFromXML
- new
- onHarvestScoreReset
- overwriteGameFunctions
- readFarmlandDataFromStream
- saveFarmlandData
- update
- writeFarmlandDataToStream
addWorkedArea
DescriptionDefinitionaddWorkedArea()Code
130 | function EnvironmentalScorePH:addWorkedArea(farmlandId, area, nOffset) |
131 | area = area / EnvironmentalScorePH.COMPRESSION |
132 | nOffset = nOffset / EnvironmentalScorePH.COMPRESSION |
133 | |
134 | local farmlandData = self:getFarmlandData(farmlandId) |
135 | |
136 | if farmlandData.pendingReset then |
137 | farmlandData.harvestedArea = 0 |
138 | farmlandData.phOffsetSum = 0 |
139 | farmlandData.pendingReset = false |
140 | end |
141 | |
142 | farmlandData.harvestedArea = farmlandData.harvestedArea + area |
143 | farmlandData.phOffsetSum = farmlandData.phOffsetSum + area * nOffset |
144 | end |
getScore
DescriptionDefinitiongetScore()Code
66 | function EnvironmentalScorePH:getScore(farmlandId) |
67 | local farmlandData = self:getFarmlandData(farmlandId) |
68 | |
69 | if farmlandData.clientScore ~= nil then |
70 | return farmlandData.clientScore |
71 | end |
72 | |
73 | if farmlandData.harvestedArea > 0 then |
74 | local averageOffset = farmlandData.phOffsetSum / farmlandData.harvestedArea * EnvironmentalScorePH.COMPRESSION |
75 | return self.scoreCurve:get(averageOffset) |
76 | end |
77 | |
78 | return 0.5 |
79 | end |
initFarmlandData
DescriptionDefinitioninitFarmlandData()Code
83 | function EnvironmentalScorePH:initFarmlandData() |
84 | return { |
85 | harvestedArea = 0, |
86 | phOffsetSum = 0, |
87 | pendingReset = false, |
88 | } |
89 | end |
loadFarmlandData
DescriptionDefinitionloadFarmlandData()Code
93 | function EnvironmentalScorePH:loadFarmlandData(data, xmlFile, key) |
94 | data.harvestedArea = xmlFile:getFloat(key .. "#harvestedArea", data.harvestedArea) |
95 | data.phOffsetSum = xmlFile:getFloat(key .. "#phOffsetSum", data.phOffsetSum) |
96 | data.pendingReset = xmlFile:getBool(key .. "#pendingReset", data.pendingReset) |
97 | end |
loadFromXML
DescriptionDefinitionloadFromXML()Code
29 | function EnvironmentalScorePH:loadFromXML(xmlFile, key, baseDirectory, configFileName, mapFilename) |
30 | if not EnvironmentalScoreTillage:superClass().loadFromXML(self, xmlFile, key, baseDirectory, configFileName, mapFilename) then |
31 | return false |
32 | end |
33 | |
34 | self.scoreCurve = AnimCurve.new(linearInterpolator1) |
35 | |
36 | local i = 0 |
37 | while true do |
38 | local baseKey = string.format("%s.scoreMapping.scoreValue(%d)", key, i) |
39 | if not hasXMLProperty(xmlFile, baseKey) then |
40 | break |
41 | end |
42 | |
43 | local phOffset = getXMLFloat(xmlFile, baseKey .. "#phOffset") or 0 |
44 | local score = getXMLFloat(xmlFile, baseKey .. "#score") or 0 |
45 | |
46 | local pHMap = g_precisionFarming.pHMap |
47 | if pHMap ~= nil then |
48 | phOffset = phOffset / pHMap:getPhValueFromChangedStates(1) |
49 | end |
50 | |
51 | self.scoreCurve:addKeyframe({score, time=phOffset}) |
52 | |
53 | i = i + 1 |
54 | end |
55 | |
56 | return true |
57 | end |
new
DescriptionDefinitionnew()Code
19 | function EnvironmentalScorePH.new(pfModule, customMt) |
20 | local self = EnvironmentalScoreValue.new(pfModule, customMt or EnvironmentalScorePH_mt) |
21 | |
22 | self.xmlKey = "ph" |
23 | |
24 | return self |
25 | end |
onHarvestScoreReset
DescriptionDefinitiononHarvestScoreReset()Code
123 | function EnvironmentalScorePH:onHarvestScoreReset(farmlandId) |
124 | local farmlandData = self:getFarmlandData(farmlandId) |
125 | farmlandData.pendingReset = true |
126 | end |
overwriteGameFunctions
DescriptionDefinitionoverwriteGameFunctions()Code
148 | function EnvironmentalScorePH:overwriteGameFunctions(pfModule) |
149 | if g_server ~= nil then |
150 | pfModule:overwriteGameFunction(HarvestExtension, "setLastScoringValues", function(superFunc, harvestExtension, area, farmlandId, nActual, nTarget, pHActual, pHTarget, ignoreOverfertilization) |
151 | superFunc(harvestExtension, area, farmlandId, nActual, nTarget, pHActual, pHTarget, ignoreOverfertilization) |
152 | |
153 | if pHActual ~= nil and pHTarget ~= nil and area > 0 and farmlandId ~= nil then |
154 | self:addWorkedArea(farmlandId, area, pHActual-pHTarget) |
155 | end |
156 | end) |
157 | end |
158 | end |
readFarmlandDataFromStream
DescriptionDefinitionreadFarmlandDataFromStream()Code
109 | function EnvironmentalScorePH:readFarmlandDataFromStream(data, streamId, connection) |
110 | local score = MathUtil.round(streamReadUIntN(streamId, 8) / 255, 2) |
111 | data.clientScore = score |
112 | end |
saveFarmlandData
DescriptionDefinitionsaveFarmlandData()Code
101 | function EnvironmentalScorePH:saveFarmlandData(data, xmlFile, key) |
102 | xmlFile:setFloat(key .. "#harvestedArea", data.harvestedArea) |
103 | xmlFile:setFloat(key .. "#phOffsetSum", data.phOffsetSum) |
104 | xmlFile:setBool(key .. "#pendingReset", data.pendingReset) |
105 | end |
update
DescriptionDefinitionupdate()Code
61 | function EnvironmentalScorePH:update(dt) |
62 | end |
writeFarmlandDataToStream
DescriptionDefinitionwriteFarmlandDataToStream()Code
116 | function EnvironmentalScorePH:writeFarmlandDataToStream(data, streamId, connection) |
117 | local score = self:getScore(data.farmlandId) |
118 | streamWriteUIntN(streamId, score * 255, 8) |
119 | end |