Autor |
Mitteilung |
Alk |
verfasst am: 09.11.2011, 09:49
|
|
Hallo miteinander,
ich weiß nicht was immo los is mit der page, dass ich mich nicht einloggen kann....
ich hab da ein kleines problem mit der item manipulation.
Zweck:
Ich habe ein normales Magazin mit 17 Patronen.
Da ich auch Patronen als ausgangsmaterial verwende, hab ich demnach 17 Patronen, welche ich für die Herstellung des Magazins benötige.
Zusätzlich hab ich upgrade levels aktiviert.
Wenn ich nun das Magazin upgrade, hab ich 18 schuss, obowhl ich nur 17 Patronen benötige, äußerst paradox :D
nun kam mir die idee, sämtliche magazine per script zu manipuluieren.
das script wird immer durchlaufen, wenn eine forschung beendet wurde udn führt folgende anweisung durch.
var
Item : TItem;
PRODItem : Array of TItemCount;
procedure Check (Sender : TObject);
begin
case science_api_GetLastCompleteID of
Glockmagazin:
begin
Item := storage_api_GetItemByID(Glockmagazin);
* PRODItem[0].ItemID := Kugel9mm;
PRODItem[0].Count := Item.Munition;
item.ProdItems := PRODItem;
end;
In der Mit * gekennzeichneten Zeile komtm der Fehler:
Out of Range
Wer kann mir hier helfen?
Danke, GreeZ.ALK |
|
verfasst am: 09.11.2011, 13:29
|
Registrierdatum: 22.08.2008, 15:51
Beiträge: 403
|
Hast du das Array irgendwo initialisiert(setarraylength)? Sonst hat das keine Länge und dann ist jeder Wert out of range. |
alk |
verfasst am: 09.11.2011, 13:31
|
|
da könntest du allerdings recht haben :D
wieso kann ich mich eigentlich nicht einloggen ?! |
|
verfasst am: 09.11.2011, 20:44
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Zitat: alk wieso kann ich mich eigentlich nicht einloggen ?!
Wahrscheinlich ein defektes Cookie - bitte mal den Browsercache leeren und dann neu versuchen |
|
verfasst am: 09.11.2011, 23:13
|
Registrierdatum: 01.10.2011, 15:10
Beiträge: 51
|
ja, hab mal die cookies gelöscht.
zum script:
hab das array auf die länge 1 begrenzt, fehler kommt keiner mehr, jedoch wird auch das item nicht verändert.
hab auch mal versucht, das item.munition duch eine konstante zu ersetzen... zeigte leider auch keine wirkung... |
|
verfasst am: 10.11.2011, 00:00
|
Programmierer, allgemeines
Registrierdatum: 06.06.2004, 17:19
Beiträge: 3186
|
Zitat: ALKOHOL fehler kommt keiner mehr, jedoch wird auch das item nicht verändert.
Was du da vor hast, kann so auch nicht funktionieren. Denn TItem ist ein Record. Folglich änderst du die Daten einer lokalen Kopie im Skript - auf die Daten im Programm hat das keine Auswirkungen. Was du machen willst, klappt nur mit Objekten (denn eine Objektvariable ist im wesentlichen nur ein Verweis auf die Speicherstelle im Arbeitsspeicher) - oder wenn es einen entsprechenden Befehl gibt, der ein Objekt auf Basis eines Records erstellt. Bei den Items gibt es da keine Möglichkeit. Du müsstest also den Weg über Itemersetzung gehen, statt die einfachen Updates zu verwenden. |
|
verfasst am: 10.11.2011, 09:24
|
Registrierdatum: 01.10.2011, 15:10
Beiträge: 51
|
versteh schon, du willst sagen auch wenn es eine read/write variable ist, dass ich dennoch nur auslesen kann?
des problem an der itemersetzung ist nur,
wenn ich das alte lvl2 magazin durch ein neues lvl1 magazin ersetze, hab ich zwar die neuen werte drin, aber ich kann selbst das neue wieder upgrade und das ganz läuft in einen teufelskreislauf...
ich hab das selbe problem auch bei meinem sensor, wo ich durch eine technologieforschung die reichweite verändern will.
ich hab dann die zeilen
room.sensorwidth := room.sensorwidth +300;
danach lese ich nur für testzwecke aus, auf welchem stand die reichweite nun ist, und des is auch richtig,
aber optisch ändert sich nicht.
vermutlich das gleiche problem?
dann werd ich das wohl vergessen können... schade :)
aber danke für die info natter.
GreeZ.ALK |
|
verfasst am: 10.11.2011, 14:59 · Edited by: Natter
|
Programmierer, allgemeines
Registrierdatum: 06.06.2004, 17:19
Beiträge: 3186
|
Zitat: ALKOHOL versteh schon, du willst sagen auch wenn es eine read/write variable ist, dass ich dennoch nur auslesen kann?
Nicht ganz. Also Ein TUFO ist z.B. ein Objekt. Eine solche Variable gehört dann auch zu einem ganz bestimmten UFO im Spiel. Über die TUFO-Variable greifst du dann direkt auf die Speicherstelle dieses UFOs zu. Folglich betreffen alle Änderungen das UFO im Spiel.
Anders sieht das bei einem Record wie TItem aus (oder auch bei TUFOModel). Alle TItems sind irgendwo in einer Liste als Record abgespeichert. Zugriff auf die Werte eines bestimmten Items im Spiel erfolgt dann z.B. über die ID. Wenn du nun storage_api_GetItemByID aufrufst, dann wird an Hand der ID in der Itemliste das passende Record gesucht, und alle Werte in die Recordvariable aus deinem Skript kopiert. Alles was du dann an deinem Record im Skript änderst (hier kannst du sehr wohl lesen und schreiben), hat nichts mit dem Record in der Itemliste zu tun. |
|
verfasst am: 10.11.2011, 16:02
|
Admin, Spielsatz GalWar
Registrierdatum: 31.08.2005, 21:51
Beiträge: 5596
|
Zitat: ALKOHOL des problem an der itemersetzung ist nur,
wenn ich das alte lvl2 magazin durch ein neues lvl1 magazin ersetze, hab ich zwar die neuen werte drin, aber ich kann selbst das neue wieder upgrade und das ganz läuft in einen teufelskreislauf...
Du bringst da glaube ich etwas durcheinander.
Die Upgrades per Levels und die Upgrades durch ersetzen sind voneinander unabhängig und beeinflussen sich gegenseitig nicht. Es ist zwar korrekt, dass ein neues "ersetztes" Item wieder per level upgegraded werden könnte, aber das ist keineswegs ein ewiger Kreislauf, denn es geht um verschiedene Items mit unterschiedlichen IDs.
Wenn man beide Upgrade-Systeme vermischt, springen die Werte zwar teilweise wild (weil das so nicht vorgesehen und berücksichtigt war), aber es ist selbst bei gleichen Werten kein Kreislauf, da die Veränderungen unabhängig sind und das "ersetzt" nicht rückgängig gemacht werden kann. |
|
verfasst am: 11.11.2011, 12:08
|
Programmierer, allgemeines
Registrierdatum: 06.06.2004, 17:19
Beiträge: 3186
|
Vielleicht sollte man noch erwähnen, dass du die normalen Upgrates per Level komplett deaktivieren kannst, wenn du auf das Upgrades durch Ersetzen wechselst. |
|
verfasst am: 11.11.2011, 12:51
|
Registrierdatum: 01.10.2011, 15:10
Beiträge: 51
|
und es somit als normale forschung anstatt upgrade forschung einbinden... das wäre eine einfachere möglichkeit denk ich
danke :) |
|
verfasst am: 25.01.2022, 08:52
|
Registrierdatum: 08.01.2022, 13:55
Beiträge: 142
|
|
|
verfasst am: 25.01.2022, 08:53
|
Registrierdatum: 08.01.2022, 13:55
Beiträge: 142
|
|
|
verfasst am: 25.01.2022, 08:54
|
Registrierdatum: 08.01.2022, 13:55
Beiträge: 142
|
|
|
verfasst am: 04.03.2022, 12:02
|
Registrierdatum: 27.01.2022, 13:07
Beiträge: 318
|
|
|
verfasst am: 24.11.2023, 02:46
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 47355
|
|
|
verfasst am: 03.12.2023, 17:51
|
Registrierdatum: 22.11.2023, 07:10
Beiträge: 47355
|
|