Erbangelegenheiten

» Siedler Map Source Forum » Siedler DEdK Script Forum » Erbangelegenheiten

Seiten: 1

Flodder
#1
13.06.2010 15:44
Beiträge: 2608

Erbangelegenheiten

Es ist oft wie im richtigen Leben:
Euer virtuelle Vater ist stinkreich und -wie der glückliche Zufall es so will- auch schon recht alt. Ihr wiederum seid noch jung und voller Tatendrank, steckt aber noch in den Windeln. Ein Grund mehr für Euren virtuellen Vater, Euch die fette Kohle nicht unbedacht in den Rachen zu schmeissen, sondern wohlüberlegt auf ein schweizer Konto zu deponieren. Zu einem "moderaten" Zinssatz von 0.01 Prozent!! pro Abrechnungsperiode.

Auszahlung:
Nach Ableben des alten Herrn, bzw. nach Vollendung Eures 18. Lebensjahres. DAS KANN DAUERN! (...leider!)

Wie dem auch sei, 299 Abrechnungsperioden sind abzuwarten, vorher gibts keinen Cobra AC 427.

Wie macht man nun solch eine Zinsberechnung, die zudem ganz genau an jedem Abrechnungstag ausgewertet und auch ausgewiesen werden soll?

Zunächst in die FMA für eine einmalige Kontoeinlage von 10.000 Gold bei der schweizer Bank:

gvKo = 10000 --Anfangskapital
gvKp = gvKo * 0.01 --Zinsfuss in Prozent pro Abrechnungsperiode
gvKj = 0 --Startperiode
gvMission.Rob_SwKonto = StartSimpleJob("Rob_SwKonto")



Zur Abrechnungsfunktion pro Abrechnungsperiode:

function Rob_SwKonto()
      timeOut = timeOut or false
      bezahlt = bezahlt or false
      if Logic.GetPlayerPaydayTimeLeft(1) < 2000  then
      timeOut = true
      elseif Logic.GetPlayerPaydayTimeLeft(1) > 118000 then
      timeOut = false
      bezahlt = false
      end
      if timeOut and not bezahlt then
      gvKj = gvKj + 1
      if gvKj > 0 then
      gvKn = gvKo + (gvKj * gvKp) 
      Message("Eine Abrechnungsperiode ist um. "..
      "@cr @cr Euer Guthaben bei der schweizer Bank "..
          "@cr beträgt "..gvKn.." Gold incl. Zinsen.")
      bezahlt = true
      end	
   end
end 


0.01 Prozent mag wenig klingen. Bedenkt aber, dass eine Abrechnungsperiode ziemlich schnell rum ist. Da wird aus popeliegen 10.000 Gold recht schnell ein stolzes Sümmchen nebenher werden.

Auszahlungsbedingung:
Hier 299 Umrundungen. Kann aber genausogut an eine andere Bedingung gebunden sein. Da könnt Ihr Eurer Fantasie freien Lauf lassen.

Eine kleine, aber -denke ich zumindest- sehr vielseitige Funktion. Wird eingesetzt in der in Kürze erscheinenden Siedler_Team Map Der dreissigjährige Krieg part 2. Part zwei umfasst die gesammte Map und nicht nur den restlichen unbegehbaren Teil aus Part 1.

Ihr dürft obige Funktion gerne verwenden, oder auch nach Herzenslust abwandeln. Ich habe nur eine kleine Bitte:
Wenn Ihr sie verwendet, kommentiert kurz den Ersteller aus.

Vielen Dank und viel Spass!

____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

Dieser Beitrag wurde von Flodder am 13.06.2010 um 23:59 editiert.

warrior1024
#2
13.06.2010 19:45
Beiträge: 345

Das ist in meine Finger geraten...

... und das kam dabei raus:

--Idee by Flodder, Urversion by Flodder, Überarbeitung by warrior1024
function Init_SchwarzKonten()
	SchwarzeKonten = {}
	StartSimpleJob("SwKonto")
end
function CreateKonto(_t)
	assert(_t.zins ~= nil, "Schwarzkonten: Zinssatz fehlt :(")
	assert(_t.geld ~= nil, "Schwarzkonten: Startgeld fehlt :(")
	assert(_t.einzahlung ~= nil, "Schwarzkonten: Nicht bekannt, ob pro Zahltag was gezahlt wird :(")
	assert(_t.hohe ~= nil, "Schwarzkonten: Nicht bekannt, wieviel pro Zahltag eingezahlt wird :(")
	assert(_t.abbuchung ~= nil, "Schwarzkonten: Nicht bekannt, ob der Palyer die Einzahlung zahlen muss")
	table.insert(SchwarzeKonten, _t)
	return table.getn(SchwarzeKonten)
end
function SwKonto()
    for i = 1, table.getn(SchwarzeKonten), 1 do
		if SchwarzeKonten[i] ~= 1 then
			SchwarzeKonten[i].timeOut = SchwarzeKonten[i].timeOut or false
			SchwarzeKonten[i].bezahlt = SchwarzeKonten[i].bezahlt or false
			if Logic.GetPlayerPaydayTimeLeft(1) < 2000  then
				SchwarzeKonten[i].timeOut = true
			elseif Logic.GetPlayerPaydayTimeLeft(1) > 118000 then
				SchwarzeKonten[i].timeOut = false
				SchwarzeKonten[i].bezahlt = false
			end
			if SchwarzeKonten[i].timeOut and not SchwarzeKonten[i].bezahlt then
				SchwarzeKonten[i].geld = SchwarzeKonten[i].geld + (SchwarzeKonten[i].geld * SchwarzeKonten[i].zins) 
				if SchwarzeKonten[i].einzahlung then
					SchwarzeKonten[i].geld = SchwarzeKonten[i].geld + SchwarzeKonten[i].hohe
				end
				if SchwarzeKonten[i].abbuchung then
					AddGold(-SchwarzeKonten[i].hohe)
				end
				Message("Auf einem eurer Konten sind nun "..SchwarzeKonten[i].geld.." Taler.")
				SchwarzeKonten[i].bezahlt = true
			end
		end
	end
end 
function ZahleAus(_id)
	AddGold(SchwarzeKonten[_id].geld)
	SchwarzeKonten[_id] = 1
end


Jetzt zur Erklärung:
Per Init_SchwarzKonten() wird die ganze Funktion vorbereitet. Am besten in die FMA, bevor ein Konto erzeugt wird.
Die Erzeugung eines Kontos passiert wie folgt:

CreateKonto{
geld = 5000, --wieviel Geld soll von Anfang auf dem Konto sein?
zins = 1.005, --zu welchem Zins? Hier 0,5%
einzahlung = true, --soll pro Zahltag was eingezahlt werden? Hier: ja
hohe = 250, --wieviel soll eingezahlt werden? Muss vorhanden sein!
abbuchung = true, --soll die Einzahlung vom Player kommen? Muss vorhanden sein!
}


Hinweis:
Die Funktion gibt die ID zurück, mit der man die Auszahlung auslöst. ID unbedingt speichern!
Per ZahleAus(_id) wird das Geld ausgezahlt!
Achtung:
Wenn man nur 2,3373892... % Zins nimmt, verdoppelt sich das Vermögen innerhalb einer Stunde

____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal

Dieser Beitrag wurde von warrior1024 am 13.06.2010 um 19:50 editiert.

Flodder
#3
13.06.2010 23:51
Beiträge: 2608

Zitat von warrior1024:
... und das kam dabei raus...


Bravo warrior1024, klasse Variante! Ein Schwarzgeldkonto also.
Wie bereits in der "Urversion" von mir angedeutet, ist diese kleine Funktion unglaublich vielseitig verwendbar. Wie man sowas ausarbeiten und/oder variieren kann, hast Du hiermit brilliant bewiesen. Sowas freut mich sehr!

Bescheidene Frage:
Variante auf fehlerfreie Lauffähigkeit in allen erdenklichen Richtungen geprüft?

Edit
Die Wahl des Zinssatzes durch den Spieler scheint mir allerdings sehr bedenklich. In der freien Wirtschaft ist es eher so, dass die Bank den Zinssatz bestimmt. Wenn er "frei" nach Gutdünken einen Zinssatz eintragen kann, dann vermehrt sich sein Schwarzgeldkonto u.U. "explosiv"! Das wäre m.E. nicht Sinn einer kontrollierten "Geldvermehrung".

Hier scheint eine Auswahl zwischen bspw. drei Zinsangeboten angebracht zu sein. Der tatsächlich dem Spieler gewährte Zinssatz könnte sich dann wiederum nach der Einzahlungshöhe des erstmalig eingezahlten Startkapitals richten.

1.:
Geringes Startkapital (erstes Einzahlungskapital) = niedriger Zinssatz, aber lange Laufzeit (...Sperrfrist).

2.:
Mittleres Startkapital = etwas höherer Zinssatz bei mittlerer Laufzeit (....Sperrfrist)

3.:
Hohes Startkapital = Max. bspw. 10.000 hoher Zinssatz, aber geringe Laufzeit (...Sperrfrist).

Eine weitere Idee wäre es, den Spieler gleich zu Spielbeginn per mcBriefing entscheiden zu lassen, ob er das ihm zur Verfügung gestellte Startkapital sofort auf ein Schwarzgeldkonto "verschieben", oder damit arbeiten möchte.

De Fakto:
Zig Variantionsmöglichkeiten. (...und nicht nur mit Gold!!)

____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

Dieser Beitrag wurde von Flodder am 14.06.2010 um 01:34 editiert.

Mordred
#4
14.06.2010 14:01
Beiträge: 939

Sicher, dass bei manche Spielern Freude aufkommt,
wenn sie sich um sowas auch noch in einem Spiel kümmern müssen?

Noigi
#5
14.06.2010 15:32
Beiträge: 772

Bei meiner Siedler6-Karte konnten die Spieler in einen Hedge-Fonds investieren, und haben dann monatlich Dividenden bekommen (manchmal nicht, wenn sich die Fonds-Manager verzockt haben ).
Das ist eigentlich ganz gut angekommen, war aber auch kein zentrales Element der Map.

Seiten: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum