Ja meinte ich. Zeig mal OnPlayerPickUpPickup
Waffe nach Tod als CreatePickup
- Dachdecker
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
} -
Ich schaetze, dass Du das Pickup beim Tod aufhebst. Setz mal den Pickup Type auf 1 zum Testen. Wie Dus dann dennoch aufheben kannst sag ich Dir gleich.
-
Es erstellt sich dennoch kein Pickup.
Hab jetzt auch grad nen Problem mit den RemoveBuilding... fahre gegen unsichtbare Wände..
-
Zeig mal bitte Dein komplettes OnPlayerDeath
-
public OnPlayerDeath(playerid, killerid, reason)
{
new Float: Tod_X, Float: Tod_Y, Float: Tod_Z, waffe;
GetPlayerPos(playerid, Tod_X, Tod_Y, Tod_Z);
waffe = GetPlayerWeapon(playerid);
CreatePickup(GetWeaponPickup(waffe), 1, Tod_X, Tod_Y, Tod_Z, GetPlayerVirtualWorld(playerid));
return 1;
} -
Debug mal bitte GetWeaponPickup(waffe). Ich gehe mal davon aus, dass Du auch eine valide Waffe in der Hand hattest die auch in GetWeaponPickup erkannt wird.
-
Hab jetzt grad nochmal getestet. Das Pickup wurde erstellt.
Jetzt möchte ich die Waffe noch aufnehmen wenn ich im "schleichmodus (Taste c drücken)" aufnehmen
-
if( GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_DUCK )
Bei OnPlayerPickUpPickup -
Hab jetzt grad nochmal getestet. Das Pickup wurde erstellt.
Jetzt möchte ich die Waffe noch aufnehmen wenn ich im "schleichmodus (Taste c drücken)" aufnehmen
wie hast du es gefixt ich baue es mir grade auch
-
Du musst aber dann noch zu der Abfrage von hav0K das Pickup loeschen und dem Spieler die Waffe geben. Versuch aber mal bitte ob nicht doch der Pickup Type 2 den Trick tut. Wenn nicht, dann musst Du wohl oder uebel die Pickups in einem Array speichern und sagen was fuer ein Inhalt sich in dem Pickup befindet (welche Waffe). Anders kannst Du nicht rausfinden, was fuer eine Art von Pickup der Spieler gerade aufgehoben hat bzw. aufheben will.
-
wie hast du es gefixt ich baue es mir grade auch
Ich habe am Code eigentlich nicht geändert:
new Float: Tod_X, Float: Tod_Y, Float: Tod_Z, waffe; GetPlayerPos(playerid, Tod_X, Tod_Y, Tod_Z); waffe = GetPlayerWeapon(playerid); CreatePickup(GetWeaponPickup(waffe), 1, Tod_X, Tod_Y, Tod_Z, GetPlayerVirtualWorld(playerid));
Du musst aber dann noch zu der Abfrage von hav0K das Pickup loeschen und dem Spieler die Waffe geben. Versuch aber mal bitte ob nicht doch der Pickup Type 2 den Trick tut. Wenn nicht, dann musst Du wohl oder uebel die Pickups in einem Array speichern und sagen was fuer ein Inhalt sich in dem Pickup befindet (welche Waffe). Anders kannst Du nicht rausfinden, was fuer eine Art von Pickup der Spieler gerade aufgehoben hat bzw. aufheben will.
Mir stellt sich die Frage, die Waffe wird ja mit einer gewissen Schusszahl liegengelassen durch den tod, wie gebe ich die Schusszahl an den Spieler, welcher die Waffe aufhebt und soll ich lieber eine [MAX_PLAYERS] variable machen für das CreatePickup oder eine für alle Spieler?
EDIT:::
Ich habe die WaffenID mit einem SetPVarInt gespeichert und mit GetPVarInt ausgegeben - funktioniert auch.
Mit den Schuss bin ich noch nicht weiter.Habe eine Variable für alle erstellt new WaffedurchTod;
-
Ich wuerde das so machen: In OnPlayerDeath noch neben der Waffen ID die Munition des Spielers abspeichern. Dann erstellst Du Dir ein globales Array meinetwegen wie folgt:
#define MAX_WEAPON_PICKUPS 300enum t_WeaponPickups
{
WeaponPickupID,
WeaponPickupWeaponID,
WeaponPickupAmmo
};new WeaponPickups[MAX_WEAPON_PICKUPS][t_WeaponPickups];
Jetzt iterierst Du in OnPlayerDeath durch das Array WeaponPickups und wenn ein Eintrag mit "WeaponPickupID == 0" gefunden wurdest, kannst Du in diesen Index die ID des erstellten Pickups schreiben, die Waffe und die Ammo. Danach die Schleife direkt unterbrechen, damit nicht das mehrmals ausgefuehrt wird - sondern nur, wenn WeaponPickupID == 0 ist bei einem Slot.
Bei OnPlayerPickUpPickup iterierst Du ebenfalls durch Dein WeaponPickups Array und wenn er die "pickupid == WeaponPickupID" hat, dann liest Du aus dem Index die Weapon ID und die Ammo aus und gibst dem Spieler mit GivePlayerWeapon die Waffe. Aber loesch das Pickup und setze die Indexe auf 0 zurueck, damit der Platz frei wird fuer ein neues Pickup in OnPlayerDeath. Sonst laeuft das Array ja voll und irgendwann gibts nach 300 Pickups keine mehr weil das Array voll ist.
-
Ich wuerde das so machen: In OnPlayerDeath noch neben der Waffen ID die Munition des Spielers abspeichern. Dann erstellst Du Dir ein globales Array meinetwegen wie folgt:
#define MAX_WEAPON_PICKUPS 300enum t_WeaponPickups{WeaponPickupID,WeaponPickupWeaponID,WeaponPickupAmmo};new WeaponPickups[MAX_WEAPON_PICKUPS][t_WeaponPickups];
Jetzt iterierst Du in OnPlayerDeath durch das Array WeaponPickups und wenn ein Eintrag mit "WeaponPickupID == 0" gefunden wurdest, kannst Du in diesen Index die ID des erstellten Pickups schreiben, die Waffe und die Ammo. Danach die Schleife direkt unterbrechen, damit nicht das mehrmals ausgefuehrt wird - sondern nur, wenn WeaponPickupID == 0 ist bei einem Slot.
Bei OnPlayerPickUpPickup iterierst Du ebenfalls durch Dein WeaponPickups Array und wenn er die "pickupid == WeaponPickupID" hat, dann liest Du aus dem Index die Weapon ID und die Ammo aus und gibst dem Spieler mit GivePlayerWeapon die Waffe. Aber loesch das Pickup und setze die Indexe auf 0 zurueck, damit der Platz frei wird fuer ein neues Pickup in OnPlayerDeath. Sonst laeuft das Array ja voll und irgendwann gibts nach 300 Pickups keine mehr weil das Array voll ist.
Okei, 2 Fragen: Wie unterbreche ich eine schleife und wie komme ich an die Ammo der Waffe?
-
Mit break; brichst Du nur die Schleife ab und der Code ausserhalb der Schleife wird fortgefuehrt. Mit return; brichst Du die Schleife und die Funktion, in der die Schleife laeuft ab. Ammo: [wiki]GetPlayerAmmo[/wiki]
-
Kann ich die Ammo nicht auch mit Set und GetPVarint weitergeben?
-
Wieso solltest Du das wollen? PVars machen hier keinen Sinn.
-
Wieso machen sie keinen Sinn?
Also ingame funktioniert es mit den PVars.. -
Ich weiss ehrlich gesagt nicht was Du mit PVars hier anfangen willst. Zeig mal bitte wie und wo Du die einsetzt.
-
public OnPlayerDeath(playerid, killerid, reason)
{
new Float: Tod_X, Float: Tod_Y, Float: Tod_Z, waffe,ammo;
GetPlayerPos(playerid, Tod_X, Tod_Y, Tod_Z);
waffe = GetPlayerWeapon(playerid);
SetPVarInt(playerid, "waffenid",waffe);
ammo = GetPlayerAmmo(playerid);
SetPVarInt(playerid, "ammmo", ammo);
WaffendurchTot = CreatePickup(GetWeaponPickup(waffe), 1, Tod_X, Tod_Y, Tod_Z, GetPlayerVirtualWorld(playerid));
return 1;
}
if( GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_DUCK )
{
DestroyPickup(WaffendurchTot);
new waffe = GetPVarInt(playerid,"waffenid"),
ammo = GetPVarInt(playerid,"ammmo");
GivePlayerWeapon(playerid, waffe, ammo);
}