Schalldämpfer
Moderator: Flashy
Schalldämpfer
Ich versuche dem Schalldämpfer die Eigenschaft zu geben, dass er die Reichweite der Waffe verringern soll.
Der Schalldämpfer wird bei der Laufverlängerung mit eingebunden, bei einem anderen Reichweiten Bonus/Malus natürlich. Aber trotz fehlerfreiem erstellen der exe verringert der Schalldämpfer die Reichweite im Spiel nicht. Was mache ich falsch?
Tactical\Weapons.h
#define SILENCER_RANGE_MALUS -10
Tactical\Weapons.c
// used to determine whether the bullet will go through someone
UINT8 BodyImpactReduction[4] = { 0, 15, 30, 23 };
UINT16 GunRange( OBJECTTYPE * pObj )
{
INT8 bAttachPos;
if ( Item[ pObj->usItem ].usItemClass & IC_WEAPON )
{
bAttachPos = FindAttachment( pObj, GUN_BARREL_EXTENDER );
if ( bAttachPos == ITEM_NOT_FOUND )
{
return( Weapon[ pObj->usItem ].usRange );
}
else
{
return( Weapon[ pObj->usItem ].usRange + (GUN_BARREL_RANGE_BONUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 ) );
}
//NEU
bAttachPos = FindAttachment( pObj, SILENCER );
if ( bAttachPos == ITEM_NOT_FOUND )
{
return( Weapon[ pObj->usItem ].usRange );
}
else
{
return( Weapon[ pObj->usItem ].usRange + (SILENCER_RANGE_MALUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 ) );
}
}
//ENDE
else
{
// return a minimal value of 1 tile
return( CELL_X_SIZE );
}
}
Mfg...
Der Schalldämpfer wird bei der Laufverlängerung mit eingebunden, bei einem anderen Reichweiten Bonus/Malus natürlich. Aber trotz fehlerfreiem erstellen der exe verringert der Schalldämpfer die Reichweite im Spiel nicht. Was mache ich falsch?
Tactical\Weapons.h
#define SILENCER_RANGE_MALUS -10
Tactical\Weapons.c
// used to determine whether the bullet will go through someone
UINT8 BodyImpactReduction[4] = { 0, 15, 30, 23 };
UINT16 GunRange( OBJECTTYPE * pObj )
{
INT8 bAttachPos;
if ( Item[ pObj->usItem ].usItemClass & IC_WEAPON )
{
bAttachPos = FindAttachment( pObj, GUN_BARREL_EXTENDER );
if ( bAttachPos == ITEM_NOT_FOUND )
{
return( Weapon[ pObj->usItem ].usRange );
}
else
{
return( Weapon[ pObj->usItem ].usRange + (GUN_BARREL_RANGE_BONUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 ) );
}
//NEU
bAttachPos = FindAttachment( pObj, SILENCER );
if ( bAttachPos == ITEM_NOT_FOUND )
{
return( Weapon[ pObj->usItem ].usRange );
}
else
{
return( Weapon[ pObj->usItem ].usRange + (SILENCER_RANGE_MALUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 ) );
}
}
//ENDE
else
{
// return a minimal value of 1 tile
return( CELL_X_SIZE );
}
}
Mfg...
Du hast Probleme mit dem "grünen Rand" (Item-Dateien)? Sinclair hat die Lösung -> Guckst Du hier!
Code: Alles auswählen
if ( bAttachPos == ITEM_NOT_FOUND )
{
return( Weapon[ pObj->usItem ].usRange );
}
else
{
return( Weapon[ pObj->usItem ].usRange + (GUN_BARREL_RANGE_BONUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 ) );
}
Daher ist die Funktion schon beendet, bevor dein Code überhaupt erreicht wird.
Lösungsvorschlag:
Eine Variable einsetzen, die die Reichweite erhält, aber erst ganz am Ende der Funktion zurückgegeben wird.
Code: Alles auswählen
// used to determine whether the bullet will go through someone
UINT8 BodyImpactReduction[4] = { 0, 15, 30, 23 };
UINT16 GunRange( OBJECTTYPE * pObj )
{
INT8 bAttachPos;
[highlight]UINT16 usGunRange = 0;[/highlight]
if ( Item[ pObj->usItem ].usItemClass & IC_WEAPON )
{
bAttachPos = FindAttachment( pObj, GUN_BARREL_EXTENDER );
if ( bAttachPos == ITEM_NOT_FOUND )
{
[highlight]usGunRange += Weapon[ pObj->usItem ].usRange;[/highlight]
}
else
{
[highlight]usGunRange += Weapon[ pObj->usItem ].usRange + (GUN_BARREL_RANGE_BONUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 );[/highlight]
}
//NEU
bAttachPos = FindAttachment( pObj, SILENCER );
if ( bAttachPos == ITEM_NOT_FOUND )
{
[highlight]usGunRange += Weapon[ pObj->usItem ].usRange;[/highlight]
}
else
{
[highlight]usGunRange += Weapon[ pObj->usItem ].usRange + (SILENCER_RANGE_MALUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 );[/highlight]
}
[highlight]return usGunRange;[/highlight]
}
//ENDE
else
{
// return a minimal value of 1 tile
return( CELL_X_SIZE );
}
}
Danke Realist,
es gibt da aber ein Problem bei der Reichweitenberechnung!
Die Waffen haben auf einmal, ohne Laufverlängerung oder Schalldämpfer, eine höhere Reichweite als vorher. Eine Pistole z.b. hat jetzt eine Reichweite von 18, anstatt 9, also das doppelte.
HALT!
Hab den Fehler gefunden, die Additionszeichen müssen weg!
if ( bAttachPos == ITEM_NOT_FOUND )
{
usGunRange += Weapon[ pObj->usItem ].usRange;
}
else
{
usGunRange += Weapon[ pObj->usItem ].usRange + (GUN_BARREL_RANGE_BONUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 );
}
//NEU
bAttachPos = FindAttachment( pObj, SILENCER );
if ( bAttachPos == ITEM_NOT_FOUND )
{
usGunRange += Weapon[ pObj->usItem ].usRange;
}
else
{
usGunRange += Weapon[ pObj->usItem ].usRange + (SILENCER_RANGE_MALUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 );
}
return usGunRange;
Nein, jetzt hat die Laufverlängerung keine Funktion mehr - schei...!
Mfg...
es gibt da aber ein Problem bei der Reichweitenberechnung!
Die Waffen haben auf einmal, ohne Laufverlängerung oder Schalldämpfer, eine höhere Reichweite als vorher. Eine Pistole z.b. hat jetzt eine Reichweite von 18, anstatt 9, also das doppelte.
HALT!
Hab den Fehler gefunden, die Additionszeichen müssen weg!
if ( bAttachPos == ITEM_NOT_FOUND )
{
usGunRange += Weapon[ pObj->usItem ].usRange;
}
else
{
usGunRange += Weapon[ pObj->usItem ].usRange + (GUN_BARREL_RANGE_BONUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 );
}
//NEU
bAttachPos = FindAttachment( pObj, SILENCER );
if ( bAttachPos == ITEM_NOT_FOUND )
{
usGunRange += Weapon[ pObj->usItem ].usRange;
}
else
{
usGunRange += Weapon[ pObj->usItem ].usRange + (SILENCER_RANGE_MALUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 );
}
return usGunRange;
Nein, jetzt hat die Laufverlängerung keine Funktion mehr - schei...!
Mfg...
Du hast Probleme mit dem "grünen Rand" (Item-Dateien)? Sinclair hat die Lösung -> Guckst Du hier!
Ich bin ja auch ein Depp.
Äh, nach 5 Stunden Matheklausur war die Konzentration ein wenig weniger.
Code: Alles auswählen
// used to determine whether the bullet will go through someone
UINT8 BodyImpactReduction[4] = { 0, 15, 30, 23 };
UINT16 GunRange( OBJECTTYPE * pObj )
{
INT8 bAttachPos;
[highlight]UINT16 usGunRange = 0;[/highlight]
if ( Item[ pObj->usItem ].usItemClass & IC_WEAPON )
{
[highlight]usGunRange += Weapon[ pObj->usItem ].usRange;[/highlight]
bAttachPos = FindAttachment( pObj, GUN_BARREL_EXTENDER );
if ( bAttachPos != ITEM_NOT_FOUND )
{
[highlight]usGunRange += Weapon[ pObj->usItem ].usRange + (GUN_BARREL_RANGE_BONUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 );[/highlight]
}
//NEU
bAttachPos = FindAttachment( pObj, SILENCER );
if ( bAttachPos != ITEM_NOT_FOUND )
{
[highlight]usGunRange += Weapon[ pObj->usItem ].usRange + (SILENCER_RANGE_MALUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 );[/highlight]
}
[highlight]return usGunRange;[/highlight]
}
//ENDE
else
{
// return a minimal value of 1 tile
return( CELL_X_SIZE );
}
}
Äh, leider immer noch nicht!:uhoh:
Ich habe zum testen den GUN_BARREL_RANGE_BONUS und SILENCER_RANGE_BONUS beide den Wert 100 gegeben.
Nun hat die Pistole (Reichweite 9) mit Laufverlängerung oder Schalldämpfer eine Reichweite von 28.
Es sollte aber, bei einem Wert von 100, nur Reichweite 19 dabei rauskommen!
Ich habe zum testen den GUN_BARREL_RANGE_BONUS und SILENCER_RANGE_BONUS beide den Wert 100 gegeben.
Nun hat die Pistole (Reichweite 9) mit Laufverlängerung oder Schalldämpfer eine Reichweite von 28.
Es sollte aber, bei einem Wert von 100, nur Reichweite 19 dabei rauskommen!
Du hast Probleme mit dem "grünen Rand" (Item-Dateien)? Sinclair hat die Lösung -> Guckst Du hier!
-
- Scharfschütze
- Beiträge: 2381
- Registriert: 06 Mär 2004, 18:09
- Wohnort: Nähe von ...
Kann sein, dass ich falsch liege. So gut sind meine Kenntnisse des Quellcodes nicht, aber:
Macht in der Summe 9+9+10=28.
In der 1. Zeile wird die normale Waffenreichweite festgelegt. Dann wird aber die Waffenreichweite + die Laufverlängerung addiert. Also müsste die 2. Addition der Reichweite gestrichen werden?!?
Code: Alles auswählen
usGunRange += Weapon[ pObj->usItem ].usRange; ([COLOR=MediumTurquoise]Reichweite ist jetzt bei 9 (nach Wulfys Beispiel)[/COLOR]
bAttachPos = FindAttachment( pObj, GUN_BARREL_EXTENDER );
if ( bAttachPos != ITEM_NOT_FOUND )
{
usGunRange += Weapon[ pObj->usItem ].usRange [COLOR=MediumTurquoise](nochmals +9)[/COLOR]+ (GUN_BARREL_RANGE_BONUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100 ) [COLOR=MediumTurquoise](und noch +10 für die Verlängerung)[/COLOR];
In der 1. Zeile wird die normale Waffenreichweite festgelegt. Dann wird aber die Waffenreichweite + die Laufverlängerung addiert. Also müsste die 2. Addition der Reichweite gestrichen werden?!?
jawoll, commandant.
schätze heute bin ich zu gar nix zu gebrauchen.
also nochmal:
schätze heute bin ich zu gar nix zu gebrauchen.
also nochmal:
Code: Alles auswählen
// used to determine whether the bullet will go through someone
UINT8 BodyImpactReduction[4] = { 0, 15, 30, 23 };
UINT16 GunRange( OBJECTTYPE * pObj )
{
INT8 bAttachPos;
[highlight]UINT16 usGunRange = 0;[/highlight]
if ( Item[ pObj->usItem ].usItemClass & IC_WEAPON )
{
[highlight]usGunRange += Weapon[ pObj->usItem ].usRange;[/highlight]
bAttachPos = FindAttachment( pObj, GUN_BARREL_EXTENDER );
if ( bAttachPos != ITEM_NOT_FOUND )
{
[highlight]usGunRange += GUN_BARREL_RANGE_BONUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100;[/highlight]
}
//NEU
bAttachPos = FindAttachment( pObj, SILENCER );
if ( bAttachPos != ITEM_NOT_FOUND )
{
[highlight]usGunRange += SILENCER_RANGE_MALUS * WEAPON_STATUS_MOD(pObj->bAttachStatus[ bAttachPos ]) / 100;[/highlight]
}
[highlight]return usGunRange;[/highlight]
}
//ENDE
else
{
// return a minimal value of 1 tile
return( CELL_X_SIZE );
}
}
-
- Scharfschütze
- Beiträge: 2381
- Registriert: 06 Mär 2004, 18:09
- Wohnort: Nähe von ...
@commandant
Von wegen schlechte Kenntnisse des Quellcodes.
@Realist
Trotz 5 Stunden Mathe, hast du es immer noch drauf!
Danke Realist und commandant!:hail:
[font=Verdana][font="][font=Verdana]Eine kleine Änderung hätte ich da noch.[/font]
[font=Verdana] Der Schalldämpfer darf, egal wie beschädigt er ist den Reichweiten Malus nicht verändern.[/font][/font][/font][font=Verdana]
[/font]
Ist es so richtig?
if ( bAttachPos != ITEM_NOT_FOUND )
{
usGunRange += SILENCER_RANGE_MALUS;
}
Mfg...
Von wegen schlechte Kenntnisse des Quellcodes.
@Realist
Trotz 5 Stunden Mathe, hast du es immer noch drauf!
Danke Realist und commandant!:hail:
[font=Verdana][font="][font=Verdana]Eine kleine Änderung hätte ich da noch.[/font]
[font=Verdana] Der Schalldämpfer darf, egal wie beschädigt er ist den Reichweiten Malus nicht verändern.[/font][/font][/font][font=Verdana]
[/font]
Ist es so richtig?
if ( bAttachPos != ITEM_NOT_FOUND )
{
usGunRange += SILENCER_RANGE_MALUS;
}
Mfg...
Du hast Probleme mit dem "grünen Rand" (Item-Dateien)? Sinclair hat die Lösung -> Guckst Du hier!
-
- Scharfschütze
- Beiträge: 2381
- Registriert: 06 Mär 2004, 18:09
- Wohnort: Nähe von ...
Sorry bin nicht mehr so ganz in der materie Ja2 drinne. Aber könnte das hier mal jemand nochmal in einem Tutorial zusammen bringen damit ich mein Headquarter aktuell halten kann.
DANKÖ
Puma
DANKÖ
Puma
last update: 11.12.07
!!!Das Headquarter braucht Dich immernoch als Admin!!!
@Bad Puma
Na Logo, Tutorial ist im Anhang!
Mfg...
Na Logo, Tutorial ist im Anhang!
Mfg...
- Dateianhänge
-
- Schalldämpfer verringert Reichweite.doc
- (20.5 KiB) 1328-mal heruntergeladen
Du hast Probleme mit dem "grünen Rand" (Item-Dateien)? Sinclair hat die Lösung -> Guckst Du hier!
Danke Wulfy
mfg
Puma
mfg
Puma
last update: 11.12.07
!!!Das Headquarter braucht Dich immernoch als Admin!!!