Seite 1 von 1

Scheiß Debuger

Verfasst: 14 Dez 2004, 15:31
von shadow the deat
kann mir mal einer Erklären was der debuger mit illegal use of the type as an expression meint

übersetzt kommt da nur müll raus

bitte es ist sehr wichtig denn das ist ca 70 % aller Errors die kommen :confused:

Verfasst: 14 Dez 2004, 19:13
von Azrael
shadow the deat hat geschrieben:kann mir mal einer Erklären was der debuger mit illegal use of the type as an expression meint
Sicher, dass du nicht vielleicht Compiler statt Debugger meinst?
Du könntest ja mal die entsprechenden Zeilen aus dem Quelltext ins Forum kopieren. So ganz ohne Quelltext zu raten, warum das Programm nicht läuft, ist nicht schön.

Verfasst: 14 Dez 2004, 19:30
von shadow the deat
ok mach ich

thx ja ich meinte den debuger des compiler



[PHP]BOOLEAN ReadInWeaponStats()
{
FILE *CSV;
CSV = fopen("TABLEDATA\\Weapons.csv", "r");
while((fscanf(CSV,"%d,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
WEAPONTYPE.uiIndex,WEAPONTYPE.szWeaponName,WEAPONTYPE.ubWeaponClass,
WEAPONTYPE.ubWeaponType,WEAPONTYPE.ubCalibre,WEAPONTYPE.ubReadyTime,
WEAPONTYPE.ubShotsPer4Turns,WEAPONTYPE.ubShotsPerBurst,
WEAPONTYPE.ubBurstPenalty,WEAPONTYPE.ubBulletSpeed,WEAPONTYPE.ubImpact,
WEAPONTYPE.ubDeadliness,WEAPONTYPE.bAccuracy,WEAPONTYPE.ubMagSize,
WEAPONTYPE.usRange,WEAPONTYPE.usReloadDelay,WEAPONTYPE.ubAttackVolume,
WEAPONTYPE.ubHitVolume,WEAPONTYPE.sSound,WEAPONTYPE.sBurstSound,
WEAPONTYPE.sReloadSound,WEAPONTYPE.sLocknLoadSound,
WEAPONTYPE.bBaseAutofireCost,WEAPONTYPE.bAutofireShotsPerFiveAP)) != EOF )
fclose(CVS);
return 0;
}[/PHP] ich verwende den CSV

es kommt immer im Zusammenhang mit WEAPONTYPE.uiIndex


:erdbeerteechug: erstmal für die Hilfe :D

Verfasst: 15 Dez 2004, 00:56
von Azrael
shadow the deat hat geschrieben: es kommt immer im Zusammenhang mit WEAPONTYPE.uiIndex
Was ist denn WEAPONTYPE? Hast du eventuell ein struct mit dem Namen WEAPONTYPE definiert und gar keine Variable dieses Typs angelegt?

Es müsste übrigens am Ende fclose(CSV); heissen. ;)

Verfasst: 15 Dez 2004, 14:37
von Mysterious Dr.X
Howdy Rowdies!

Also wenn du die Bear's Pit-Dateien meinst, ist eigentlich CVS und nicht CSV korrekt, aber das ist wohl nur ein Schönheitsfehler ;).

Das mit dem Index könnte damit zusammenhängen, da die Index-Nummer ja eigentlich in Items.c und nicht in der Weapons.c steckt. Nach den Variablen die du da erwähnst, hab ich jetzt einfach mal darauf geschlossen, dass du das anstelle der Waffentabelle in der Weapons.c reinkopiert hast. Auch daran gedacht, dass z.B. ASRIFLE verschieden viele Variablen wie z.B. SN_RIFLE oder BLADE haben? Das sind auch immer wieder potentielle Fehlerquellen.


Dr.X

Verfasst: 15 Dez 2004, 16:57
von shadow the deat
Azrael hat geschrieben:Was ist denn WEAPONTYPE? Hast du eventuell ein struct mit dem Namen WEAPONTYPE definiert und gar keine Variable dieses Typs angelegt?

Es müsste übrigens am Ende fclose(CSV); heissen. ;)

das ist original in der weapon.h normaler weise müsste es so gehn

@fclose jo hab ich auch mitbekommen :D
[PHP]typedef struct
{
UINT8 ubWeaponClass; // handgun/shotgun/rifle/knife
UINT8 ubWeaponType; // exact type (for display purposes)
UINT8 ubCalibre; // type of ammunition needed
UINT8 ubReadyTime; // APs to ready/unready weapon
UINT8 ubShotsPer4Turns; // maximum (mechanical) firing rate
UINT8 ubShotsPerBurst;
UINT8 ubBurstPenalty; // % penalty per shot after first
UINT8 ubBulletSpeed; // bullet's travelling speed
UINT8 ubImpact; // weapon's max damage impact (size & speed)
UINT8 ubDeadliness; // comparative ratings of guns
INT8 bAccuracy; // accuracy or penalty
UINT8 ubMagSize;
UINT16 usRange;
UINT16 usReloadDelay;
UINT8 ubAttackVolume;
UINT8 ubHitVolume;
UINT16 sSound;
UINT16 sBurstSound;
UINT16 sReloadSound;
UINT16 sLocknLoadSound;
UINT8 bBaseAutofireCost;
UINT8 bAutofireShotsPerFiveAP;

INT8 szWeaponName[MAX_WEAPON_NAME_LENGTH+1]; //+1 for the null terminator
UINT32 uiIndex;
} WEAPONTYPE;[/PHP]

@ Mysterious Dr.X

daran liegst es nicht da die werte die er nicht brauch mit 0 belegt sind und somit das funktioniert schau dir mal das XML von Digi an daran kann man es sehn

und @ CSV CVS jo da komm ich immer durcheinander das eine ist der Source da andere ein Datenformat :azzangel:


aber trotzdem danke zwar hats mir noch nicht geholfen aber egal :keks:

Verfasst: 15 Dez 2004, 19:20
von Azrael
shadow the deat hat geschrieben: typedef struct
{
...
} WEAPONTYPE;
Danke, danach habe ich gesucht.
Also: Das struct WEAPONTYPE ist ein _Datentyp_ und keine Variable. Du kannst den Datentyp nicht an die Funktion fscanf übergeben, sondern musst vorher eine Variable des Typs anlegen, also zum Beispiel
WEAPONTYPE myWeapon;
Danach kannst du dann myWeapon.uiIndex usw. an fscanf übergeben.

Ich habe gerade gesehen, dass in der Weapon.h auch noch der Array
extern WEAPONTYPE Weapon[ MAX_WEAPONS ];
definiert ist. Da du ja anscheinend die Waffendaten aus einer Datei laden willst, macht es eventuell Sinn, direkt in den Array zu schreiben.

Verfasst: 16 Dez 2004, 13:46
von shadow the deat
jo thx genau das hat mit gefehlt

da merkt man mal das Programmer immer was neues lernen und nie aufhören können was neues zu lernen :erdbeerteechug:


so ich denk mal das ihr bis Weihnachten externe Waffen habt :D


€edit

jetzt gibt er den gleichen Fehler

WEAPONTYPE Weapon[ MAX_WEAPONS ] =
{
FILE *CSV;
WEAPONTYPE waffen;
CSV = fopen("TABLEDATA\\Weapons.csv", "r");
while((fscanf(CSV,"%d,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
waffen.uiIndex,waffen.szWeaponName,waffen.ubWeaponClass,
waffen.ubWeaponType,waffen.ubCalibre,waffen.ubReadyTime,
waffen.ubShotsPer4Turns,waffen.ubShotsPerBurst,
waffen.ubBurstPenalty,waffen.ubBulletSpeed,waffen.ubImpact,
waffen.ubDeadliness,waffen.bAccuracy,waffen.ubMagSize,
waffen.usRange,waffen.usReloadDelay,waffen.ubAttackVolume,
waffen.ubHitVolume,waffen.sSound,waffen.sBurstSound,
waffen.sReloadSound,waffen.sLocknLoadSound,
waffen.bBaseAutofireCost,waffen.bAutofireShotsPerFiveAP)) != EOF )
fclose(CSV);
return 0;
}

aus also langsam hab ich wirklich kein Plan mehr :confused:

Verfasst: 16 Dez 2004, 20:45
von Mysterious Dr.X
Howdy Rowdies!

Eben das gefällt mir nicht, dass deine Version für Werte die nicht gebraucht werden eine 0 einfügt. Probier's doch mal aus und bau ein neues Messer per Hand ein. Alle Werte, die du nicht brauchst füllst du mit "0,". Wirst sehen das es nicht funktioniert. In der Ja2.exe - und damit auch bei WEdit - steht da später halt "0", aber im Source musst du das sensibler behandeln! Wenn du dir nicht wirklich sicher bist, ob das nicht das Problem ist, dann forsche mal mehr in die Richtung :).


Dr.X

Verfasst: 17 Dez 2004, 00:14
von Azrael
Du kannst so auch keinen Array initialisieren.

Ich würde das folgendermassen machen:
Die ganze Array-Initialisierung (ab Zeile 120 in der originalen Weapons.c) duch die Zeile
WEAPONTYPE Weapon[ MAX_WEAPONS ];
ersetzen.

Dann schreibst du dir eine Funktion, die den Array mit Werten aus der Textdatei belegt (der Code ist ungetestet, keine Ahnung, ob da noch Fehler drin sind):

void InitWeapons() {
int i=0;
CSV = fopen("TABLEDATA\\Weapons.csv", "r");
while( (!feof(CSV)) && (i<MAX_WEAPONS)) {

fscanf(CSV,"%d,%s,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", Weapon.uiIndex,Weapon.szWeaponName, ...); // usw. für die restlichen Waffenwerte
i++;
}

fclose(CSV);
}

Dann musst du dir nur noch die passende Stelle suchen, in der du die Methode zur Belegung des Arrays aufrufst.

Verfasst: 17 Dez 2004, 14:03
von shadow the deat
thx

das sieht man mal das ich an einigen Stellen dolle Defiziede habe *lol*


naja egal man lernt halt aus Fehlern

ich teste es Sonntag eher komme ich nicht zu


:erdbeerteechug: