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: keiner ausser dir

 X-Force - Fight For Destiny - Forum —› X-Skript / Developer-Pack —› Probleme mit dem Aufruf einer Callbackfunktion

Seite: 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] .. [11] [12] >>

Autor Mitteilung
verfasst am: 09.01.2010, 11:45
Registrierdatum: 20.07.2005, 00:01

 Beitrge: 203
Hier ist der Code

program test;

procedure Getcredits(Sender: TOBJECT);
var
  NewBudget : LongInt;
  i : Integer;
begin

  savegame_api_Message('test',lmMissionMessage,Nil);
  
  for i := 0 to country_api_GetCountrycount - 1 do
  begin

  // Buggetberechnung Vertrauen des Landes*1000
  // also zwischen 0 und 100000
  // + Bevlkerungsbonus auch noch mal in Relation zum Vertrauen
  // so das nochmal 0 bis 50000 Bonus kommen knnen.
  // 50000 Bonus schafft aber nur China, die anderen Lndern drften
  // bei 20000 Bonus max. liegen fr Bevlkerungsbonus,
  // wenn Vertrauen auf 100 ist.
  
  // TODO: Schwierigkeitsgrad einarbeiten

  NewBudget := country_api_getCountryByIndex(i).Friendly*1000;
  NewBudget := NewBudget+round(country_api_getCountryByIndex(i).Friendly*country_api_ getCountryByIndex(i).Einwohner/2000000);
  country_api_ChangeBudget(i,NewBudget);
  end;

end;

procedure StartMission;
begin

   game_api_SetBoolean('Auto_Weekly_kbFiU',false);

   // register_special_event(@GetCredits,EVENT_SPECIAL_ONWEEKEND);
   
   register_special_event(@GetCredits,EVENT_SPECIAL_ONNEXTDAY);
   


   // Getcredits;
   
end;

begin
  MissionName:='Name';
  MissionType:=mzObjects;
end.



Mir fehlt hier glaube noch etwas das Verstndnis zu Sender: TOBJECT, aufjedenfall rhrt sich nichts, wenn der Event anschlagen soll?
verfasst am: 09.01.2010, 13:38
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beitrge: 5596
Der Fehler liegt woanders:

Du hast den Missionstyp "mzObjects", aber keine solchen definiert. Dadurch wird das Skript beendet, sobald es durchgelaufen ist...


mzUser: Skript bleibt im Speicher, bis es per mission-Befehl beendet wird.

mzObjects: Man registriert Spielobjekte wie z.B. UFOs oder Bodeneinstze mit dem register_object-Befehl, und das Skript luft bis alle registrierten Objekte gelscht worden sind. Das ist z.B. bei UFO-Skripten wichtig, damit die nach dem Abschuss des UFOs keinen unntzen Speicher mehr belegen.
verfasst am: 09.01.2010, 15:49 · Edited by: Kamor
Registrierdatum: 20.07.2005, 00:01

 Beitrge: 203
Super, wieder ein Schritt weiter. Meine GetCredit Routine wird jetzt ber die Timer aufgerufen.

Die Testmeldung bekomme ich zum gewnschten Zeitpunkt, aber das Script was als normale Prozedur erfolgreich die Budgets der Lnder gendert hatte, versagt sonst komplett, wenn es ber den Timer aufgerufen wird. :-/

Liegt das noch irgendwo an der Variablenstruktur?

Habe noch eine weitere Debugmeldung eingebaut. Also das Auslesen von Stdtedaten ber country_api_getCountryByIndex funktioniert einwandfrei, aber beim Schreiben der neuen Budgetwerte mit country_api_ChangeBudget weigert sich das Skript als Callbackfunktion dort reinzuschreiben?

hier meine Debugvernderungen

  NewBudget := country_api_getCountryByIndex(i).Friendly*1000;
  savegame_api_Message(inttostr(NewBudget),lmMissionMessage,Nil);

  // NewBudget := NewBudget+round(country_api_getCountryByIndex(i).Friendly*country_api_ getCountryByIndex(i).Einwohner/2000000);
  // country_api_ChangeBudget(i,NewBudget);
  country_api_ChangeBudget(i,1);

verfasst am: 09.01.2010, 16:07 · Edited by: sujin
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beitrge: 1185
country_api_ChangeBudget ndert, wie der Name schon sagt, nur das bestehende Buget. Deaktivierst du die Auszahlung des selbigen, passiert garnichts. Du msstest das Geld entweder direkt per Skript auszahlen lassen (und evtl. einen eigenen Bildschirm machen, der das anzeigt), oder du lsst Auto_Weekly_kbFiU unangetastet und nderst wie gehabt nur das Buget (dann ist allerdings ein krzerer Intervall als eine Woche sinnvoll, z.B. jeden Sonntag um 23:59 ^^).
Noch dazu ist der Budget-Parameter relativ, sprich wird zum aktuellen Buget addiert. Dein Testwert von 1 hat also keinen sprbaren Effekt, und wenn du NewBuget einfach draufaddierst, sind bald alle Geldsorgen pass ;-)
verfasst am: 09.01.2010, 16:30
Registrierdatum: 20.07.2005, 00:01

 Beitrge: 203
Danke, jetzt kommt mein Geldsegen auch ber die Timer. Dann lasse ich das Autobudget erstmal an und versuche meine Budgeterhhung ne Sekunde vor Wocheende zu platzieren. Ist zwar nicht die 100% Lsung, die ich mir dachte, aber erstmal funktionell. Dann suche ich mal den Timer, der um 23:59 anschlgt.
verfasst am: 09.01.2010, 18:51
Registrierdatum: 20.07.2005, 00:01

 Beitrge: 203
Eine Woche hat 10080 Minuten, also

Wochenstunde := 10080;

Meinen ersten Aufruf habe ich mit

register_timed_event(@GetCredits,NIL,10079);

gesetzt.

Jetzt stehe ich aber vor dem Problem, das ich einen Intervall brauche, wo sich der Aufruf wiederholt, bzw. diesen Intervall selber programmieren muss. Die theoretischen berlegungen sind soweit, das ich dann in der per Timer aufgerufenen Funktion einen neuen Timerbefehl setze.

Da wollte ich es mir einfach machen und habe nach einen Befehl gesucht, der mir die derzeitigen Stunden liefert, dann htte ich da nur 10080 draufaddiert und ab die Post in den Timer. Habe aber nur eine

function savegame_api_GetDate: TKD4Date;

gefunden. Hier msste ich leider selber die Stunden wieder zurckrechnen, bzw. htte ich noch die Alternative mir meinen eigenen Wochencounter anzulegen, den ich dann mit 10080 multipliziere.

Gibt es vielleicht doch noch ne Funktion die mir das derzeitige Datum in Gesamtstunden liefert?
verfasst am: 09.01.2010, 18:55
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beitrge: 3186
register_timed_event(@GetCredits,NIL,10079);

Ergebnis in Variable speichern, und repeated auf true setzen. Du musst nur beachten, dass du beim Ersten Aufruf das Intervall um eine Minute erhhst, sonst verlierst du jede Woche eine Minute.
verfasst am: 09.01.2010, 19:50 · Edited by: Kamor
Registrierdatum: 20.07.2005, 00:01

 Beitrge: 203
Super dann ist der jetzt Dank eurer Hilfe bis auf den Schwierigkeitsgrad fertig. Da kloppe ich noch ne Prozentberechnung von +/-40% rein.

program Laenderunterstuetzung;

const Wochenminuten = 10080;

var Credittimer : TTimerEvent;

procedure Getcredits(Sender: TOBJECT);
var
  NewBudget : LongInt;
  i : Integer;
begin
  Credittimer.Interval:=Wochenminuten;
  // savegame_api_Message(inttostr(Credittimer.Interval),lmMissionMessage,N il);
  
  for i := 0 to country_api_GetCountrycount - 1 do
  begin

  // Buggetberechnung Vertrauen des Landes*1000
  // also zwischen 0 und 100000 Credits
  // + Bevlkerungsbonus auch noch mal in Relation zum Vertrauen
  // so das nochmal 0 bis 50000 Bonuscredits kommen knnen.
  // 50000 Bonus schafft aber nur China, die anderen Lndern drften
  // bei 20000 Bonus max. liegen fr Bevlkerungsbonus,
  // wenn Vertrauen auf 100 ist.
  // das ganze geteilt durch drei, das anstatt 1.500.000 Gesamtetat
  // so ca. 500000 Gesamtetat extra kommen
  
  // TODO: Schwierigkeitsgrad einarbeiten
  // hier soll noch +40%/+20%/+-0%/-20%/-40% fr die Schwierigkeitsgrade rein.

  NewBudget := country_api_getCountryByIndex(i).Friendly*1000;
  NewBudget := NewBudget+round(country_api_getCountryByIndex(i).Friendly*country_api_ getCountryByIndex(i).Einwohner/2000000);
  NewBudget := round(NewBudget/3);
  
  // savegame_api_Message(inttostr(NewBudget),lmMissionMessage,Nil);

  country_api_ChangeBudget(i,NewBudget);

  end;

end;

procedure StartMission;

begin
   Credittimer := register_timed_event(@GetCredits,NIL,Wochenminuten-1);
   Credittimer.Repeated :=true;
end;

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

verfasst am: 09.01.2010, 19:50 · Edited by: DirkF
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beitrge: 5596
was Natter meint lautet komplett:

var
Wochentimer : TTimerEvent;

begin
Wochentimer:=register_timed_event(@GetCredits,NIL,10079);
Wochentimer.repeat:=true;

und dann beim ersten Aufruf das Interval auf 10080 erhhen.

http://doc.xforce-online.de/ger_pages/XSkriptReferenz/TypTTimerEvent.h tml

Edit: gleichzeitig geposted, ist unntig geworden ;-)
verfasst am: 09.01.2010, 19:51 · Edited by: Kamor
Registrierdatum: 20.07.2005, 00:01

 Beitrge: 203
:-) harhar war schneller, beide um 19:50 abgedrckt den Post :-P

Edit: Aber Wochentimer gefllt mir glaube besser, wie Credittimer, werde ich wohl noch ndern, also doch nicht umsonst dein Posting.
verfasst am: 09.01.2010, 21:56
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beitrge: 1185
Am einfachsten wre es, im Editor eine (Spielsatz-)Globale Variable wie ForschTime, ProdTime, etc zu erstellen und dort die Prozentwerte (60% ... 140%) zu speichern. Dann liefert dir
game_api_GetInteger('BugetBonus')/100

Immer den passenden Wert.
verfasst am: 10.01.2010, 10:21
Registrierdatum: 20.07.2005, 00:01

 Beitrge: 203
Jo, das wre elegant. Habe es aber noch nicht geschafft, da einen echten Prozentwert anzulegen, so wie Forschtime, ProdTime, bzw. bekomme ich da keine %Maske hin bei der Variablendefinition.

Da habe ich es mir erstmal einfach gemacht und den Wert Doom angezapt, der von 1 fr sehr leicht bis 5 fr sehr schwer gesetzt ist.

Newbudget=round(Newbudget/100*(160-Dooms*20));

Das wird aber noch gendert, in die Richtung, wo du vorgeschlagen hast, nur wrde ich da halt gerne ne schicke %Maske noch haben, damit das zu ForschTime und ProdTime passend ist. :-)
verfasst am: 10.01.2010, 10:37
Admin, Spielsatz GalWar

Registrierdatum: 31.08.2005, 21:51

 Beitrge: 5596
Die %-Masken sind intern von frher bernommen, man kann keinen eigenen Prozentwert anlegen. Mach das einfach so wie sujin vorgeschlagen hat. Denn ich glaube nicht das wir dafr nochmal in den Programmcode gehen um das zu ergnzen...
verfasst am: 22.11.2023, 10:21
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 47355
verfasst am: 01.12.2023, 11:59
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 47355
http://audiobookkeeper.ruhttp://cottagenet.ruhttp://eyesvision.ruhttp://eyesvisions.comhttp://factoringfee.ruhttp://filmzones.ruhttp://gadwall.ruhttp://gaffertape.ruhttp://gageboard.ruhttp://gagrule.ruhttp://gallduct.ruhttp://galvanometric.ruhttp://gangforeman.ruhttp://gangwayplatform.ruhttp://garbagechute.ruhttp://gardeningleave.ruhttp://gascautery.ruhttp://gashbucket.ruhttp://gasreturn.ruhttp://gatedsweep.ruhttp://gaugemodel.ruhttp://gaussianfilter.ruhttp://gearpitchdiameter.ru
http://geartreating.ruhttp://generalizedanalysis.ruhttp://generalprovisions.ruhttp://geophysicalprobe.ruhttp://geriatricnurse.ruhttp://getintoaflap.ruhttp://getthebounce.ruhttp://habeascorpus.ruhttp://habituate.ruhttp://hackedbolt.ruhttp://hackworker.ruhttp://hadronicannihilation.ruhttp://haemagglutinin.ruhttp://hailsquall.ruhttp://hairysphere.ruhttp://halforderfringe.ruhttp://halfsiblings.ruhttp://hallofresidence.ruhttp://haltstate.ruhttp://handcoding.ruhttp://handportedhead.ruhttp://handradar.ruhttp://handsfreetelephone.ru
http://hangonpart.ruhttp://haphazardwinding.ruhttp://hardalloyteeth.ruhttp://hardasiron.ruhttp://hardenedconcrete.ruhttp://harmonicinteraction.ruhttp://hartlaubgoose.ruhttp://hatchholddown.ruhttp://haveafinetime.ruhttp://hazardousatmosphere.ruhttp://headregulator.ruhttp://heartofgold.ruhttp://heatageingresistance.ruhttp://heatinggas.ruhttp://heavydutymetalcutting.ruhttp://jacketedwall.ruhttp://japanesecedar.ruhttp://jibtypecrane.ruhttp://jobabandonment.ruhttp://jobstress.ruhttp://jogformation.ruhttp://jointcapsule.ruhttp://jointsealingmaterial.ru
http://journallubricator.ruhttp://juicecatcher.ruhttp://junctionofchannels.ruhttp://justiciablehomicide.ruhttp://juxtapositiontwin.ruhttp://kaposidisease.ruhttp://keepagoodoffing.ruhttp://keepsmthinhand.ruhttp://kentishglory.ruhttp://kerbweight.ruhttp://kerrrotation.ruhttp://keymanassurance.ruhttp://keyserum.ruhttp://kickplate.ruhttp://killthefattedcalf.ruhttp://kilowattsecond.ruhttp://kingweakfish.ruhttp://kinozones.ruhttp://kleinbottle.ruhttp://kneejoint.ruhttp://knifesethouse.ruhttp://knockonatom.ruhttp://knowledgestate.ru
http://kondoferromagnet.ruhttp://labeledgraph.ruhttp://laborracket.ruhttp://labourearnings.ruhttp://labourleasing.ruhttp://laburnumtree.ruhttp://lacingcourse.ruhttp://lacrimalpoint.ruhttp://lactogenicfactor.ruhttp://lacunarycoefficient.ruhttp://ladletreatediron.ruhttp://laggingload.ruhttp://laissezaller.ruhttp://lambdatransition.ruhttp://laminatedmaterial.ruhttp://lammasshoot.ruhttp://lamphouse.ruhttp://lancecorporal.ruhttp://lancingdie.ruhttp://landingdoor.ruhttp://landmarksensor.ruhttp://landreform.ruhttp://landuseratio.ru
http://languagelaboratory.ruhttp://largeheart.ruhttp://lasercalibration.ruhttp://laserlens.ruhttp://laserpulse.ruhttp://laterevent.ruhttp://latrinesergeant.ru
verfasst am: 14.01.2024, 02:56
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 47355
verfasst am: 14.01.2024, 02:57
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 47355
verfasst am: 14.01.2024, 02:58
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 47355
verfasst am: 14.01.2024, 02:59
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 47355
verfasst am: 14.01.2024, 03:00
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 47355

Seite: 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] .. [11] [12] >>




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

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