Also:
Ich habe nun das FS in den Gamemode kopiert. Ich kann doch eig. eine globale Variable deklarieren und bei "ErmittleZielperson" diese auf "Mörder setzen" und dann abfragen, ob Mörder ( glob. Variable ) Hitman usw. ist, oder?
Headshot-System?
- marcel97p
- 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
-
-
Also:
Ich habe nun das FS in den Gamemode kopiert. Ich kann doch eig. eine globale Variable deklarieren und bei "ErmittleZielperson" diese auf "Mörder setzen" und dann abfragen, ob Mörder ( glob. Variable ) Hitman usw. ist, oder?Klar geht das warum sollte das nicht gehen schau dir doch mal dein copy paste code an.
Du hast die playerid und die der zielperson.Als kleiner Tipp :
Die playerid ist der wo abdrückt mit der sniper
und die zielperson => Der wo die Kugel abbekommt -
Schei** bin ich blöd :O Habe das ganz übersehen. Habe das nun ganz anders gemacht, nun gut. Ich änder das um zu playerid
Vielen Dank!!( Es geht doch bei ErmittleZielperson das ich abfrage: if(PlayerInfo[playerid][pMember] == 8 PlayerInfo[playerid][pLeader] == und da den Rest drin ablaufen lasse, oder?
-
Schei** bin ich blöd :O Habe das ganz übersehen. Habe das nun ganz anders gemacht, nun gut. Ich änder das um zu playerid
Vielen Dank!!( Es geht doch bei ErmittleZielperson das ich abfrage: if(PlayerInfo[playerid][pMember] == 8 PlayerInfo[playerid][pLeader] == und da den Rest drin ablaufen lasse, oder?
Hm macht es wirklich sinn um die abfrage einzuleiten noch die funktion aufzurufen?
( ja geht schon)
Aber macht das doch dann bevor die funktion ErmittleZielperson aufgerufen wird. Wird wahrscheinlich bei OnPlayerKeyState passieren wenn der spieler abdrückt
zusätzlich denk ich mal das ist schon enthalten welche waffe der spieler benötigt um einen Headshot zu machen aufgrund( SendDeathMessage und id 34) jedoch sollte dem nicht so sein solltest du das auch noch abfragen ob er überhaupt die waffe gerade hat. -
Also: Habe mein stock ErmittleZielperson angepasst, es geht aber trotzdem nicht. Hier ist er:
stock Headshot_ErmittleZielperson(playerid) {
// Erstellen der Speicherstellen für die Koordinaten des Vektors und der Kamera
new Float:x,Float:y,Float:z,Float:FrontX,Float:FrontY,Float:FrontZ,Float:CamX,Float:CamY,Float:CamZ;
// Setzen der Koordinaten in die Variablen
// Funktionen werden im Tutorial erklärt
GetPlayerCameraFrontVector(playerid, FrontX, FrontY, FrontZ);
GetPlayerCameraPos(playerid, CamX, CamY, CamZ);
for(new Float:i = 0.0; i < 100; i = i + 0.5) {
// Berechnung der Koordinaten mit Hilfe einer bekannten Rechnung
x = FrontX * i + CamX; y = FrontY * i + CamY; z = FrontZ * i + CamZ;
for(new zielperson = 0; zielperson < MAX_PLAYERS; zielperson ++) {
if(IsPlayerConnected(zielperson)) {
// Spieler kann sich zwar nicht selber anschießen, aber wir gehen auf eine Nummer sicher
if(zielperson != playerid) {
// Falls die Zielperson geduckt
if(SPIELER_GEDUCKT(zielperson)) {
// Überprüfen, ob die Zielperson tatsächlich auf den berechneten Koodinaten ist
if(IsPlayerInRangeOfPoint(zielperson, 0.4, x, y, z)) {
GameTextForPlayer(playerid, "~r~HEADSHOT", 2000, 6); // GameText für den Spieler
GameTextForPlayer(zielperson, "~r~HEADSHOT!", 2000, 6); // GameText für die Zielperson
TOETESPIELER(zielperson); // Töten der Tielperson*
if(PlayerInfo[zielperson][pHeadValue] > 0)
{
if(IsPlayerConnected(zielperson))
{
if(PlayerInfo[playerid][pMember] == 8 || PlayerInfo[playerid][pLeader] == 8)
{
if(GoChase[playerid] == zielperson)
{
new string[128], name[MAX_PLAYER_NAME];
GetPlayerName(zielperson, name, sizeof(name));
ConsumingMoney[playerid] = 1;
new killerid[MAX_PLAYER_NAME];
GetPlayerName(playerid, killerid, sizeof(killerid));
GivePlayerMoney(playerid, PlayerInfo[zielperson][pHeadValue]);
format(string,sizeof(string),"<< Hitman %s hat den Auftrag an %s erfüllt und bekommt: $%d >>",killerid,name,PlayerInfo[zielperson][pHeadValue]);
SendFamilyMessage(8, COLOR_YELLOW, string);
PlayerInfo[zielperson][pHeadValue] = 0;
GotHit[zielperson] = 0;
GetChased[zielperson] = 999;
GoChase[playerid] = 999;
}
}
}
}
#if defined SENDE_NACHRICHT
SendDeathMessage(playerid, zielperson, 34);
#endif
}
}
// Falls die Zielperson steht
else {
// Überprüfen, ob die Zielperson tatsächlich auf den berechneten Koodinaten ist
if(IsPlayerInRangeOfPoint(zielperson, 0.4, x, y, z - 0.7)){
GameTextForPlayer(playerid, "~r~HEADSHOT", 2000, 6); // GameText für den Spieler
GameTextForPlayer(zielperson, "~r~HEADSHOT", 2000, 6); // GameText für die Zielperson
TOETESPIELER(zielperson); // Töten der Tielperson
#if defined SENDE_NACHRICHT
SendDeathMessage(playerid, zielperson, 34);
#endif
}
}
}
}
}
}
return 1;
}Mein Zeugs bei OnPlayerKeyStateChange;
Was dazu gehört (defines):
Code
Alles anzeigen//Headshot// #define SENDE_NACHRICHT // ausklammmern, falls unerwünscht #define WAFFE_9MM (22) #define WAFFE_9MMs (23) #define WAFFE_DEAGLE (24) #define WAFFE_GEWEHR (33) #define WAFFE_SNIPER (34) #define GEDRUECKT(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0))) #define SPIELER_GEDUCKT(%1) GetPlayerSpecialAction(%1) == SPECIAL_ACTION_DUCK #define HAT_GESCHOSSEN(%1) GetPVarInt(%1, "HEADSHOT_GESCHOSSEN") #define SETZE_GESCHOSSEN(%1) SetPVarInt(%1, "HEADSHOT_GESCHOSSEN", 1) #define SETZE_NICHT_GESCHOSSEN(%1) SetPVarInt(%1, "HEADSHOT_GESCHOSSEN", 0) #define TOETESPIELER(%1) SetPlayerHealth(%1, 0)
if(GEDRUECKT(KEY_FIRE) && ValideWaffe(playerid)) {
if(!HAT_GESCHOSSEN(playerid)) {
SETZE_GESCHOSSEN(playerid);
SetTimerEx("Headshot_AntiSpam", 1000, false, "d", playerid);
Headshot_ErmittleZielperson(playerid);
//headshooter = playerid;
}
} -
if(GEDRUECKT(KEY_FIRE) && ValideWaffe(playerid)) {
if(!HAT_GESCHOSSEN(playerid) && (PlayerInfo[playerid][pMember] == 8 || PlayerInfo[playerid][pLeader] == 8)) {
SETZE_GESCHOSSEN(playerid);
SetTimerEx("Headshot_AntiSpam", 1000, false, "d", playerid);
Headshot_ErmittleZielperson(playerid);
//headshooter = playerid;
}
}mal so eine Frage verstehst du überhaupt oder ist das nur so eine auf gut glück ihrgend ein zeug in sein code zu kopieren taktik.
Da sich hier noch else befindet und es wird geprüft ob der spieler geduckt ist oder nicht zu dem code über mir so wäre die abfrag am besten direkt dort abzufragen ob der spieler hitman ist oder nicht.
Zu dem wenn du meinst meine verfassten texte nicht zu lesen kannst ja mal hoffen das ein anderer dir hilft da ich das problem nicht habe und mir das auch hier egal sein kann. -
breadfish.de
Hat das Thema geschlossen.