Frage zur Umsetzung eines Scriptes?

Jaison
Posts: 1
Joined: Wed Aug 07, 2013 3:32 am

Frage zur Umsetzung eines Scriptes?

Post by Jaison »

Hi com,

Ich habe da eine Frage zur Umsetzung einer Idee die wie ich finde sehr gut durchdacht ist.

Und zwar wurde ich von einem User gefragt, ob es möglich sei einen Trigger(z.B ein Lager o.Ä), so ei zu grenzen das man dort nur alle 7 Tage eine bestimmte menge entnehmen kann.

Nun habe ich reichlich nachgedacht, und kam auf eine Möglichkeit das es machbar ist, da es ja auch ein Schiebetor zeit-geregelt("Hagenstedt-modified") gibt.

Dort ist der Script jedoch nicht lesbar(.luc) dann hätte man schauen können wie das dort gemacht wurde.

Im Grunde habe ich die Umsetzung schon im kopf, was mir aber fragen aufwirft, da ich eher Modeller bin und kein Scripter(lern erst noch!), möchte ich euch dazu fragen.

Und zwar wie bekommt man es hin das man den aktuellen Tag der "Entnahme" Speichert & den Füllstand auf "0"(dachte da an currentDay), und ihn erst in 7 Tagen wieder freigibt.

Also quasi folgendes Szenario: Ich fahre hin lade 150kg auf, lager ist dann also Leer, und nach 7 Tagen werden erst wieder 150kg hinzugefügt, in der Zwischenzeit soll eine Meldung angezeigt werden"z.B Lager ist leer, kommen sie in ...Tagen wieder!" wenn man hin fährt um was auf zu laden.

Der Füllstand und die Zeit(Tage/Stunden o.Ä) sollten dabei in einer xml Änderbar sein, wofür ich auch schon eine Lösung hätte, indem man die Variablen aus der xml liest.

Der Status jedoch, also der Füllstand & verbleibende Tage bis zur Nächsten Verfügbarkeit sollen beim Speichern des Games gespeichert werden,(careerSavegame.xml)
falls sogar möglich direkt, aber es reicht in der Savegame.

Hätte zum Thema currentDay auch die Möglichkeit es mit einem Timer zu machen, aber das wäre nicht ganz das was es soll.

ggf soll der Script ja, auch später noch so erweitert werden das er vtl auch noch Variable Füllstände bekommt, z.B wie bei den Preisen.

Die Zweite Frage die ich mir noch nicht beantworten konnte wäre die Umrechnung mit dem Füllstand, also wie viel umgerechnet 150 kg in ls sind,oder ist die Maßeinheit bereits in kg?

Währe echt supi wenn mir da jemand Tipps geben könnte.


Bisher habe ich ihn soweit:

Code: Select all

-- Time Controlled Filltrigger
-- Autor: Jaison
-- Datum: 12.12.2013
-- Web: http://strikygames-entertainment.de
-- Changes / re-use, exclusively only allowed with authorization!

-- 1 Sekunde = 1000 ms
-- 1 Minute = 60.000
-- 1 Stunde = 3.600.000 ms
-- 1 Tag = 86.400.000 ms
-- 7 Tage = 604.800.000 ms
-- !!In the script, without decimal places!!

timecontrollfilltrigger = {};


timecontrollfilltrigger.scriptName = "timecontrollfilltrigger";
timecontrollfilltrigger.version = 1;

function timecontrollfilltrigger.onCreate(id)
      g_currentMission:addUpdateable(timecontrollfilltrigger:new(id));

  end;
function timecontrollfilltrigger:load(xmlFile)

	self:initiate();
	self.savegamePath = getUserProfileAppPath() .. "savegame" .. g_careerScreen.selectedIndex;
	self.savegameFilename = timecontrollfilltrigger.savegamePath .. "/" .. timecontrollfilltrigger.scriptName ..".xml";

	local fillType = getXMLString(xmlFile, key .. "#fillType")
	local fillLevel = getXMLString(xmlFile, key .. "#fillLevel")
	local newFillLevel = getXMLString(xmlFile, key .. "#newFillLevel")
	local used = getXMLString(xmlFile, key .. "#used")
	local emptiedOnDay = getXMLString(xmlFile, key .. "#emptiedOnDay")
	local nextavailableDay = getXMLString(xmlFile, key .. "#nextavailableDay")
	local available =   getXMLBool	(xmlFile, key .. "#available")

	local path = Utils.getFilename("OverlayWarning.dds", self.baseDirectory);
	self.statusHud = Overlay:new("OverlayWarning", path, 0.8143, 0.8315, 0.176, 0.06638);

	
end;

local CareerScreenSaveSelectedGame = CareerScreen.saveSelectedGame; -- add Save Callback
CareerScreen.saveSelectedGame = function(self)
	if(self.debug) then
		print("Time Controll Filltrigger - DEBUG - CareerScreenSaveSelectedGame()");
	end;
	CareerScreenSaveSelectedGame(self);
	timecontrollfilltrigger:saveData();
end;

function timecontrollfilltrigger:saveData()

	if(self.debug) then
		print("Time Controll Filltrigger - DEBUG - saveData()");
	end;
    local xmlFile = createXMLFile("Timecontrollfilltrigger", self.savegameFilename, self.scriptName);
	if (xmlFile ~= nil) then

		setXMLFloat( xmlFile, self.scriptName.."#version", self.version);
		setXMLString( xmlFile, self.scriptName.."#author", "Jaison");
		local tag = self.scriptName..".timecontrollfilltrigger";
		setXMLFloat(xmlFile, tag.."#fillType", Utils.getNoNil(g_currentMission.Timecontrollfilltrigger.fillType, 0));
		setXMLFloat(xmlFile, tag.."#fillLevel", Utils.getNoNil(g_currentMission.Timecontrollfilltrigger.fillLevel, 0));
		setXMLFloat(xmlFile, tag.."#newFillLevel", Utils.getNoNil(g_currentMission.Timecontrollfilltrigger.newFillLevel, 0));
		setXMLFloat(xmlFile, tag.."#used", Utils.getNoNil(g_currentMission.Timecontrollfilltrigger.used, 0));
		setXMLFloat(xmlFile, tag.."#emptiedOnDay", Utils.getNoNil(g_currentMission.Timecontrollfilltrigger.emptiedOnDay, 0));
		setXMLFloat(xmlFile, tag.."#nextavailableDay", Utils.getNoNil(g_currentMission.Timecontrollfilltrigger.nextavailableDay, 0));
		setXMLBool(xmlFile,  tag.."#available", Utils.getNoNil(g_currentMission.Timecontrollfilltrigger.available, 0));
	end;
end;

function timecontrollfilltrigger:loadData(firstTimeLoad)

	getFiles(self.savegamePath, "getFilesCallback", self);
	if self.fileFound then

		local xmlFile = loadXMLFile(self.scriptName.."xml", self.savegameFilename);
		if (xmlFile ~= nil) then
			local version = getXMLFloat(xmlFile, self.scriptName.."#version");
			version = math.floor(version*1000)/1000;
			if (version <= self.version) then
				local tag = self.scriptName..".timecontrollfilltrigger";

				g_currentMission.Timecontrollfilltrigger.fillType = Utils.getNoNil(getXMLFloat(xmlFile, tag.."#fillType"), 0);
				g_currentMission.Timecontrollfilltrigger.fillLevel = Utils.getNoNil(getXMLFloat(xmlFile, tag.."#fillLevel"), 0);
				g_currentMission.Timecontrollfilltrigger.newFillLevel = Utils.getNoNil(getXMLFloat(xmlFile, tag.."#newFillLevel"), 0);
				g_currentMission.Timecontrollfilltrigger.used = Utils.getNoNil(getXMLFloat(xmlFile, tag.."#used"), 0);
				g_currentMission.Timecontrollfilltrigger.emptiedOnDay = Utils.getNoNil(getXMLFloat(xmlFile, tag.."#emptiedOnDay"), 0);
				g_currentMission.Timecontrollfilltrigger.nextavailableDay = Utils.getNoNil(getXMLFloat(xmlFile, tag.."#nextavailableDay"), 0);
				g_currentMission.Timecontrollfilltrigger.available = Utils.getNoNil(getXMLFloat(xmlFile, tag.."#available"), 0);

				self.firstRun = true;
				if(self.debug) then
					print("Time Controll Filltrigger - DEBUG - fillType:" .. g_currentMission.Timecontrollfilltrigger.fillType);
					print("Time Controll Filltrigger - DEBUG - fillLevel:" .. g_currentMission.Timecontrollfilltrigger.fillLevel);
					print("Time Controll Filltrigger - DEBUG - newFillLevel:" .. g_currentMission.Timecontrollfilltrigger.newFillLevel);
					print("Time Controll Filltrigger - DEBUG - used:" .. g_currentMission.Timecontrollfilltrigger.used);
					print("Time Controll Filltrigger - DEBUG - emptiedOnDay:" .. g_currentMission.Timecontrollfilltrigger.emptiedOnDay);
					print("Time Controll Filltrigger - DEBUG - nextavailableDay:" .. g_currentMission.Timecontrollfilltrigger.nextavailableDay);
					print("Time Controll Filltrigger - DEBUG - available:" .. g_currentMission.Timecontrollfilltrigger.available);
				end;
			end;
		end;
	end;
end;


function timecontrollfilltrigger:update(dt)
local available = false;
if(g_currentMission.environment.currentDay == (g_currentMission.Timecontrollfilltrigger.nextavailableDay))
	then
		available = true and filllevel == newFillLevel;
    end;

	if filllevel == 0 then

		g_currentMission.Timecontrollfilltrigger.nextavailableDay = g_currentMission.environment.currentDay + 7;

		available = false;
	end;
end;

function timecontrollfilltrigger:updateTick(dt)

end;

function Lely_Tornado:delete()
	if self.statusHud ~= nil then
		self.statusHud:delete();
	end;
end;

function timecontrollfilltrigger:draw()
	--TODO: GUI for unaviabele loading.
	if available == false then
	self.statusHud:render();
	setTextAlignment(RenderText.ALIGN_RIGHT);
	setTextBold(true);
	setTextColor(1, 1, 1, 1);
	renderText(0.9653, 0.849, 0.032, tostring("Derzeit ist das Lager leer!"));
	setTextAlignment(RenderText.ALIGN_LEFT);
	setTextBold(false);
end;
end;

function timecontrollfilltrigger:triggerCallback(triggerId, otherId, onEnter, onLeave, onStay)

	if onEnter and self.isEnabled then
		if available = false and then
			timecontrollfilltrigger:draw();
		end;
	end;

g_onCreateUtil.addOnCreateFunction("timecontrollfilltriggerOnCreate", timecontrollfilltrigger.onCreate);
Denke nicht das es so geht, daher frage ich ja, zudem ist er ja nicht fertig, getestet hab ich das bisher noch nicht.

LG Jai