Banner left   Banner center   Banner right

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

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

Zur Zeit online: keiner ausser dir

 X-Force - Fight For Destiny - Forum —› Spieler helfen Spielern —› Item Manipulation

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: 5595
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: 5595
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 :)



:: Benutzer
» Name » Passwort
:: Deine Antwort
User: Passwd:
Bold Style  Italic Style  Underlined Style  bug linking  Preformatted  Code  Image Link  Insert URL  Email Link  Abschalten * Hilfe
Hilfe
 

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