Banner left   Banner center   Banner right

Germanenglish Home · News · Diary · Screenshots · Documentation (Wiki) · Downloads · Guestbook · Forum

Home · Benutzer registrieren · Suchen · Statistik · FAQ · Benutzerliste

Zur Zeit online: kein Gast, uskehqmw0p

 X-Force - Fight For Destiny - Forum —› Verbesserungsvorschläge/Ideen —› Finazierungsproblem -> Kredit?

Seite: 1 [2] >>

Autor Mitteilung
verfasst am: 09.12.2005, 19:45
Registrierdatum: 15.04.2005, 14:41

 Beiträge: 214
0001247

Nachdem ich nicht im Mantis diskutieren will, da es ja auf meine Mailbox geht! (gilt besonders für DirkF)

Zitat: tw01d023
Problem: Man will eine neue Basis/Ebene bauen aber hat die Credits derzeit nicht.

Lösungsvorschlag: Kredit

Features: mit täglicher? wöchentlicher? einstellbar? Rückzahlung
der Möglichkeit einer Soforttilgung der Restschulden
Kreditrahmen/Zinsen verändern sich mit Erfolg?
unterschiedliche Angebote von Lädern über Kredithöhe und Zinsen?


Zitat: DirkF
Da würde ich eher gegen stimmen.

Wieviel Credits man hat wird im Endeffekt durch den Spielsatz festgelegt - sowohl durch den Gewinn aus dem Verkauf von (hergestellter) ausrüstung alsauch durch Scripte und Punkteverteilungen (je mehr Punkte ein UFO-Abschuss bringt umso größer wird die Unterstützung durch die Länder).

Wenn man jetzt eine zusätzliche Variable in Form eines Kredits ins Spiel bringt, dann wird das Balancing eines Spielsatzes deutlich schwerer.

Denn letztendes soll ja zuwenig Geld entweder ein Hinweis auf eine verschwenderische Taktik oder ein Feature des Spielsatzes sein, wenn der Spielsatzersteller eine Basis als etwas besonderes lassen will.

Und jeder Spielsatzersteller kann ein Script einbauen wie ich bei meinem "Galaktischen Krieg" - die Startbasis hat einige Probleme und kann kaum vernünftig umgerüstet werden, aber sobald einige Forschungen für bessere Technologien abgeschlossen sind aktiviert sich das Script mit dem UNO-Befehl zum Bau einer neuen Basis, inklusive eines automatischen Geldbonus auf das Konto des Spielers um die Basis zu bezahlen...


Solange ich die Zahlungen durch die Punktevergabe nicht steueren kann müsste ich meine Preise dem erwarteten Gewinn der Spieler anpassen.
Natürlich ich könnte jetzt her gehen und Skripte schreiben:
Wieviele Punkte hat der Spieler im Moment? Oh zu wenige für meine geplante Berechungen, na da lass ich mal drei Ufos auftauchen ...

In fast jeder Wirtschaftssimulation kann man Kredite aufnehmen um Engpässe zu meistern, das bedeutet nicht das ich schlecht taktiere sondern einfach Pech hatte oder was probieren will.
verfasst am: 09.12.2005, 23:40
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: tw01d023
In fast jeder Wirtschaftssimulation

Nur ist X-Force nicht unbedingt eine Wirtschaftssimulation. Und es gibt genügend andere Spielkategorien, wo es aus gutem Grund keine Kredite gibt (z.B. Strategiespiele).
verfasst am: 10.12.2005, 00:46
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: tw01d023
Solange ich die Zahlungen durch die Punktevergabe nicht steueren kann

Im Spielsatz definierst Du wieviel Punkte der Spieler erhält - sei es direkt durch die Punkte für UFO-Abschuss oder indirekt über die Anzahl möglicher Aliens im Bodeneinsatz (=Werte der UFO-Besatzung).

Du hast zwar keine direkte Kontrolle darüber wieviel Credits der Spieler erhält, aber da dies mehr oder weniger linear mit der Anzahl der Punkte zusammenhängt hast Du sehr wohl eine Kontrolle darüber (und bald sogar noch verbesserte Möglichkeiten, lass Dich überraschen).
verfasst am: 10.12.2005, 08:44
Registrierdatum: 15.04.2005, 14:41

 Beiträge: 214
Naschön dann ist X-Force ein Taktik/Strategie/Wirtschaftsspiel aber ich sehe es im Moment mehr als Wirtschaftsspiel oder Taktikspiel da ich die meiste Zeit mit Ein/Verkaufen/Zuweisen von Personal/Projekt oder Bodeneinsatz beschäftigt bin.

Nungut ich definiere die Punkte für Aliens und Ufos.
Wieviele Credits bekomme ich pro Punkt oder ist das eine Formel? Dazu muss ich dann aber auch die Anzahl der auftauchenden Ufos steueren können sonst weis ich nicht wieviel Punkte der Spieler pro Woche bekommen kann.

Lass mich raten ich kann das dann mit Skripts machen?
"Seufz und ich dachte ich könnte ohne Skripte leben, schöner einfacher Spielsatz ade."
verfasst am: 10.12.2005, 10:55
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Zitat: tw01d023
Lass mich raten ich kann das dann mit Skripts machen?

Noch geht das auch mit Scripten nicht, man muss ausprobieren wieviel Credits man bei wieviel Punkten nach einem Bodeneinsatz oder am Ende der Woche bekommt.

Zitat: tw01d023
"Seufz und ich dachte ich könnte ohne Skripte leben, schöner einfacher Spielsatz ade."

Jein - man kann je nach Planungen mit wenigen Scripten auskommen, aber wenn alle Einstellungen im Editor vorzunehmen wären dann ist das mehr Arbeit für weniger Möglichkeiten.
Es ist "relativ" einfach eine interne Variable über einen Skriptbefehl änderbar zu machen, und dies hat dann auch den Vorteil das man diesen Wert mittenim Spiel dynamisch (mit zusätzlichen Scripten) verändern kann.
Will man dasselbe über eine Editoreingabe machen, dann muss der Editor für komplett neue Eingabefenster umprogrammiert werden, die Variable im Spielsatz extra gespeichert und ausgelesen werden (d.h. Gefahr einer inkompatiblen Version) und man hat dann lediglich einen veränderten Fixwert ohne dynamische Möglichkeiten.

Solche Werteveränderungen sind aber keine aufwendigen Scripte. Es wird ein Script vorgegeben das alle Werte beim Spielstart setzt, und man muss dann nur in dem passenden File die gewünschten Werte nacheditieren.
Erst wenn man mehr machen will (z.B. dynamische Änderungen im Spiel) wird es aufwendig - und dann hängt es auch davon ab was für Vorlagen und Beschreibungen es für die Scripte gibt...
verfasst am: 10.12.2005, 12:11
Registrierdatum: 15.04.2005, 14:41

 Beiträge: 214
Zitat: DirkF
Es wird ein Script vorgegeben das alle Werte beim Spielstart setzt, und man muss dann nur in dem passenden File die gewünschten Werte nacheditieren.

Hast mir meinen Wunsch schon vorweggenommen.

Gibt es irgendwo Vorlagen für verschiedene Skripte?

Das Kreditaufnehmen könnte man doch auch durch so ein Skript lösen. Die Frage ist nur wie triggere ich so was? Gibt es die Möglichkeit von regelmäßigen Triggern die nach einem Timeout (Tag,Woche,Monat) immer wieder kommen? Oder gibt es einen Trigger der bei negativem Kontostand aufgerufen wird?
verfasst am: 10.12.2005, 12:47 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Für einen Kredit per Script brauchst Du die globalen Variablen, die mit 910 eingeführt werden (zum übergreifenden Festhalten wieviel beliehen wurde)

eventtrigger sind schon jetzt möglich, aber nur Zeitgesteuert (notfalls Kontostand 1x am Tag prüfen)

Scriptbeispiele gibt es im Tutorial-Spielsatz, im XForce-Verzeichnis unter data/scripts, hier: http://doc.xforce-online.de/ger_pages/XSkriptTutorial/Inhalt.html , hier: http://doc.xforce-online.de/ger_pages/XSkriptHowTo/Inhalt.html und an verschiedenen Stellen im Forum verteilt.
verfasst am: 10.12.2005, 12:54
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: tw01d023

Gibt es irgendwo Vorlagen für verschiedene Skripte?

Im Ordner data/scripts gibt es schon eine Menke Beispielskripte. Darüber hinaus gibt es im Wiki ein Tutorial zu X-Skript, das auch absoluten Anfängern Schritt für Schritt den Einstieg in die Skriptsprache ermöglicht. Und es gibt im Wiki eine Rubrik "HowTos", wo Skripte für bestimmte Aufgaben erläutert werden. Die ist aber derzeit noch recht knapp gehalten. Ansonsten kannst du auch in den Tutorialspielsatz schauen, der verwendet auch eine ganze Reihe an Skripten (und in den nächsten Versionen werden es sicher noch mehr werden).

Zitat: tw01d023
Das Kreditaufnehmen könnte man doch auch durch so ein Skript lösen. Die Frage ist nur wie triggere ich so was? Gibt es die Möglichkeit von regelmäßigen Triggern die nach einem Timeout (Tag,Woche,Monat) immer wieder kommen?

Es gibt den Befehl register_timed_event(...). Damit ist es kein Problem, regelmäßige Ereignisse einzubauen. Ein Trigger für den Fall, dass die Credits oder das Alphatron ausgehen, wäre sicher eine Überlegung wert. Kannst du ja mal in Mantis übernehmen.
verfasst am: 10.12.2005, 12:57
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Ohh, da war DirkF wohl schneller als ich :D
Zitat: DirkF
Für einen Kredit per Script brauchst Du die globalen Variablen, die mit 910 eingeführt werden (zum übergreifenden Festhalten wieviel beliehen wurde)

Nicht unbedingt. Das Skript darf eben erst beendet werden, wenn der Kredit wieder abgezahlt ist (das dürfte schon wegen der Zinsen nötig sein). Dann kommt man problemlos ohne globale Variablen aus.
verfasst am: 10.12.2005, 13:07 · Edited by: Unrealer
Registrierdatum: 19.07.2004, 10:59

 Beiträge: 757
Oder man muss den Kredit an einem Tag ganz abzahlen, oder in 2 Raten und das Script "Kredit aufnahme" aktiviert nach einer gewissen Zeit automatisch das Script "Rate einfordern". Oder man macht als Vorrausetzung für "Rate einfordern" einfach 1 Monat nach dem Ereignis Aufrufung des Script "Kredit aufnehmen".

Allerdings hat der Kredit dann nur eine Feste höhe.
verfasst am: 10.12.2005, 13:49
Registrierdatum: 15.04.2005, 14:41

 Beiträge: 214
0001250 für den Credits,Aphatron Trigger hab ich eingetragen

Man könnte den tigger noch dahingehend erweitern das man die Grenze selbst einstellen kann.
Da könnte ich dann auch einen Trigger bei z.B. 2 Millionen setzen und dem Spieler dann ein Agebot schicken ob er nicht eine ausgebaute Basis im Land XYZ kaufen will.

register_timed_event(...) steht noch gar nicht in der Refernz und im Skripteditor seh ich es auch nicht, kommt die mit V0.910?
verfasst am: 10.12.2005, 13:59 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: tw01d023
register_timed_event(...) steht noch gar nicht in der Refernz und im Skripteditor seh ich es auch nicht, kommt die mit V0.910?

Ja (sorry, hatte ich vergessen). In der derzeitigen Version musst du event_register() verwenden. Dieser Befehl wird aber in Version 0.910 so nicht mehr verfügbar sein.
verfasst am: 10.12.2005, 16:24 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
So, hier mal ein Beispiel, wie ein Kredit für Version 0.900 aussehen könnte:
program Kredit;
const
  Zins = 0.05;        //Zinsen, die pro Zeitraum "ZinsDelay" fällig werden
  ZinsDelay = 1440;   // Zeit (in Minuten) in der Zinsen fällig werden. Standard ist 24 Stunden.
  Rate = 0.10;        // Teil vom aufgenommenen Kredit, die pro RateDelay zurückgezahlt werden müssen.
  RateDelay = 1440;   // Zeitraum, bis die nächste Rate gezahlt werden muss
  
  // Die nachfolgende Nachricht muss je nach obigen Konstanten erweitert werden.
  Angebot = 'Wir haben aus sicherer Quelle erfahren, dass sie derzeit finanzielle '
          + 'Probleme haben. Wir bieten ihnen daher gerne einen unserer günstigen '
          + 'Sofortkredite an. Sind sie interessiert?';

var
  Kredit : Integer;
  BetragRate : Integer;

procedure Zinsen();
begin
  Kredit := round(Kredit * (1 + Zins));
  
  game_api_MessageBox(IntToStr(Kredit));
  event_register(@Zinsen,ZinsDelay);
end;

procedure RateZahlen();
begin
  if BetragRate >= Kredit then
  begin
    savegame_api_NeedMoney(Kredit, kbFiU, true);
    Kredit := 0;
    game_api_MessageBox('Sie haben den Kredit vollständig zurückgezahlt.')
    mission_win;
  end;
  savegame_api_NeedMoney(BetragRate, kbFiU, false);
  Kredit := Kredit - BetragRate;
  game_api_messageBox('Die nächste Rate für ihren Kredit wurde fällig. Der Kredit umfasst derzeit noch ' + IntToStr(Kredit) + ' Credits');
  event_register(@RateZahlen,ZinsDelay);
end;

procedure KreditAuswahl;
var
  List : TStringList;
  Index : Integer;
  
begin
  List:=TStringList.Create;
  List.Add('10.000 Credits');
  List.Add('100.000 Credits');
  List.Add('1.000.000 Credits');
  Index := game_api_ChooseItemBox('Kredithöhe auswählen:',List);

  if Index = 0 then
  begin
    game_api_MessageBox('Sie haben sich für 10.000 Credits entschieden.');
    Kredit := 10000;
    BetragRate := round(Kredit * Rate);
    savegame_api_FreeMoney(Kredit, kbFiU); // Mit kbFiU wird der Kredit unter Finanzhilfe verbucht
  end
  else  // Hier darf kein Semikolon stehen, sonst funktioniert else nicht
  if Index = 1 then
  begin
    game_api_MessageBox('Sie haben sich für 100.000 Credits entschieden.');
    Kredit := 100000;
    BetragRate := round(Kredit * Rate);
    savegame_api_FreeMoney(Kredit, kbFiU);
  end
  else
  if Index = 2 then
  begin
    game_api_MessageBox('Sie haben sich für 1.000.000 Credits entschieden.');
    Kredit := 1000000;
    BetragRate := round(Kredit * Rate);
    savegame_api_FreeMoney(Kredit, kbFiU);
  end
  else
  mission_abort;
end;

procedure StartMission;
var
  Flag : Boolean;
begin
  Flag := game_api_Question(Angebot, 'Angebot');

  if not Flag then
  begin
    game_api_MessageBox('Nun, dann vielleicht ein andermal.');
    mission_abort;
  end;

  KreditAuswahl();
  
  event_register(@Zinsen,ZinsDelay);
  event_register(@RateZahlen,RateDelay);
  
end;

begin
  MissionName := 'Kredit';
  MissionType := mzUser;
end.


OK, die Berechnung der Zinsen und auch die Rate sind noch nicht optimal, aber das kann ja jeder anpassen wie er will (ich hatte keine Lust mehr, mir dafür noch was gescheites auszudenken - zumal ich garnicht weiß, wie das genau bei Krediten gehandhabt wird).
verfasst am: 10.12.2005, 16:35
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
PS: XForce hat scheinbar noch Probleme mit der Sortierung der Listenelemente in chooseItemBox. Die Reihenfolge unterscheidet sich zwischen Skripteditor und Ingame. Werde das mal mit Jim_Raynor abklären.
verfasst am: 10.12.2005, 21:46
Registrierdatum: 15.04.2005, 14:41

 Beiträge: 214
Danke
Das Beispielskript ist sehr hilfreich, ich werde da mal ein paar Sachen ausprobieren, zuerst ob ich das mit der Sofortrückzahlung mit reinbekomme.

Eine Frage vielleicht noch zu "event_register"
Du gibst es da zweimal hintereinander mit dem selben Zeitraum an.

Zitat: Natter

ZinsDelay = 1440;
RateDelay = 1440;
event_register(@Zinsen,ZinsDelay);
event_register(@RateZahlen,RateDelay);


Ist da vom Programm garantiert das das zuerstgenannte Event Zinsen auch immer als erstes ausgeführt wird oder sollte ich es besser so machen das ich Zinsen einmalig am Anfang mit 1439 starte und ab dem zweiten mal dann mit 1440 registriere um es immer 1 min vor RatenZahlen zu bekommen?

Und wenn ich jetzt im Spiel 1 Minute vor dem Zinstimeout bin und mit 4 (10 min) vorwärtsspringe kommt dann Zinsen trotzdem vor Ratenzahlen oder werden die Events einfach nur irgendwie aus einer Liste rausgeholt?
verfasst am: 10.12.2005, 23:23
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Das mit der Zeitsteuerung ist ein Problem - und wenn Du auf nummer sicher gehen willst, dann solltest Du in der aktuellen Version zwischen zwei verschiedenen Zeitfunktionen einen Abstand von mindestens 10 Minuten haben.

Jim will sich die entsprechende Programmroutine nochmal vornehmen, nachdem er bei Scriptdiskussionen mit mir vor ein paar Tagen festgestellt hat, dass es maximal einen Funktionsaufruf pro Funktion und pro Zeitschritt geben kann - und auf schnellster Stufe sind das 10 Minuten.

Würdest Du also ein
event_register(@Beispiel, 3);
eintragen, dann würde diese Funktion bei langsamster Geschwindigkeit dreimal in 10 Minuten aufgerufen werden, auf schnellster Geschwindigkeit aber nur einmal in 10 Minuten.

Das ist aber wie gesagt schon vorgesehen zu korrigieren - nur hab ich noch keine Info wann Jim dazu kommt und es gibt wichtigere Änderungen zu programmieren...
verfasst am: 10.12.2005, 23:57 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beiträge: 3186
Zitat: tw01d023
Ist da vom Programm garantiert das das zuerstgenannte Event Zinsen auch immer als erstes ausgeführt wird oder sollte ich es besser so machen das ich Zinsen einmalig am Anfang mit 1439 starte und ab dem zweiten mal dann mit 1440 registriere um es immer 1 min vor RatenZahlen zu bekommen?

Genau das meinte ich mit nicht optimaler Lösung bei den Zinsen. Besser wäre es, wenn die Zinsen relativ unabhängig von dem Event RateZahlen berechnet werden. Solange das Skript nicht mehr machen soll, als das was ich schon eingebaut habe, könnte man z.B. die Zinsen unabhängig vom aktuellen Kreditstand komplett in der Prozedur Zinsen ausrechnen. Das wird aber problematisch, sobald man Änderungen am Skript vornimmt, z.B. Sondertilgungen etc.

Alternativ könnte man die Zinsen auch deutlich öfter anrechnen (z.B. aller 20 Minuten), als die Ratenzahlung. Dadurch würde der eventuell gemachte Fehler durch Ratenzahlungen vernachlässigbar.
verfasst am: 11.12.2005, 10:18 · Edited by: tw01d023
Registrierdatum: 15.04.2005, 14:41

 Beiträge: 214
Also ich hatte jetzt Zeit mich etwas mit dem Kreditskript vertraut zu machen.
Mir scheint es als ob die Events in der etgegengesetzten Reihenfolge der Registrierung wieder aktiv werden.
Also so ein first in last out Prinzip. Ist das so oder irre ich mich.

Dann ist es möglich ein event wieder zu deregistrieren? Oder zu verhindern das die Methode doppelt registriert wird?

Ich hatte bei meinen Versuchen einmal den Fehler das ich ein Event in mehreren Funktionen registriert habe. Dadurch ist plötzlich die Startfunktion meines Skriptes mehrmals gestartet wärend ich noch mitten in der Abarbeitung eines vorherigen Startes war.
Gibt es Möglichkeiten einen doppelten Skriptstart zu verhindern. Das ich feststellen kann das Skript läuft gerade?
Zitat: Natter
PS: XForce hat scheinbar noch Probleme mit der Sortierung der Listenelemente in chooseItemBox. Die Reihenfolge unterscheidet sich zwischen Skripteditor und Ingame.

Das ist mir nicht aufgefallen, hat bei mir im Spiel soweit funktioniert.
verfasst am: 11.12.2005, 10:24 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beiträge: 5596
Ab der 910 auf jeden Fall, dann kannst Du eine globale Variable für "Script in Bearbeitung" setzen und bei jedem späteren Scriptstart abbrechen.

if script then
begin
  script:=true;
  // Script
  script:=false;
end;


Du brauchst dann für jedes derartige Script eine andere globale Variable.

Allerdings ist es ja gerade geplant das ein Script bei mehrfacher Registration auch mehrfach starten soll und muss so bleiben - für Funktionen wie register_event_UFOShootDown(@UFOShootDown, UFO) die bei jedem UFO-Abschuss nur immer mit einer anderen UFO-Variablen aufgerufen wird (Siehe Tutorial).
verfasst am: 17.04.2006, 17:06
Registrierdatum: 17.04.2006, 16:27

 Beiträge: 10
man müsste die Wirtschaft einfach erweitern

Seite: 1 [2] >>




Du musst dich registrieren um auf dieses Thema zu antworten.
Login :: » Name » Passwort

Ladezeit (sec.): 0.007 · Powered by miniBB 1.6 with parts of 1.7 © 2001-2003