hallo,
ich habe eine Frage und zwar ist es möglich abzurufen vom Fahrzeug was er für Schaden hat.
Also Reifen sind platt, motorschaden etc?
Wenn ja wie würde das Grundgerüst aufgebaut sein?
hallo,
ich habe eine Frage und zwar ist es möglich abzurufen vom Fahrzeug was er für Schaden hat.
Also Reifen sind platt, motorschaden etc?
Wenn ja wie würde das Grundgerüst aufgebaut sein?
wenn ich es richtig im kopf habe ist es
GetVehicleHealth(vehicleid,health);
abzurufen vom Fahrzeug was er für Schaden hat
Ja, hiermit:
https://wiki.sa-mp.com/wiki/GetVehicleDamageStatus
Beispiele für den Aufbau der Abfragen zum Auslesen der Informationen sind
@Nils24hero Damit kann man nur die Health des Fahrzeugs abfragen, nicht die Details der einzelnen Teile.
Weist du zufällig was ich falsch mache ? Wenn ich den befehl eingebe dann deaktiviert oder aktiviert er alle Befehle statt das er diese einzelnd macht..
COMMAND:abwehrsystem(playerid,params[])
{
#pragma unused params
if(ImTutorial[playerid] != 0)return SendClientMessage(playerid,GRAU,"Du kannst keine Befehle nutzen,da du im Tutorial bist.");
if(GetPVarInt(playerid,"Eingeloggt") == 0)return SendClientMessage(playerid,GRAU,"Du bist nicht eingeloggt!");
if(Spieler[playerid][pAWAYFROMKEYBOARD] == 1)return SendClientMessage(playerid,WRONGCMD,"Du bist im AFK-Modus und kannst somit keine Befehle nutzen."),SendClientMessage(playerid,WRONGCMD,"BENUTZE: /back");
if(Spieler[playerid][pInPrison] == 1)return SendClientMessage(playerid,GRAU,"Du bist im Prison.");
if(Spieler[playerid][pFriedhof] == 1)return SendClientMessage(playerid,GRAU,"Du bist Tot.");
if(Spieler[playerid][pDeath] == 1)return SendClientMessage(playerid,GRAU,"Du bist verletzt.");
if(Spieler[playerid][pJailed] != 0)return SendClientMessage(playerid,GRAU,"Du bist im Gefängnis.");
if(Spieler[playerid][pGangJailed] == 1)return SendClientMessage(playerid,GRAU,"Du befindest dich im GangJail.");
if(Spieler[playerid][pTazerd] == 1)return SendClientMessage(playerid,GRAU,"Du bist K.O/getazert.");
if(Spieler[playerid][pCuffed] == 1)return SendClientMessage(playerid,GRAU,"Du bist gefesselt.");
new cmd[10],cmd2[10];
if(sscanf(params,"s[25]s[6]",cmd,cmd))
{
return SendClientMessage(playerid,WRONGCMD,"BENUTZE: /abwehrsystem [Area|SFLuft|SFSee|AlkaLuft|AlkaSee|Alle] [an|aus(nur bei \"Alle\")]");
}
if(isPlayerInFrakt(playerid,1) || isPlayerInFrakt(playerid,2) || isPlayerInFrakt(playerid,6) || isPlayerInFrakt(playerid,16) || isPlayerAnAdmin(playerid,6) && Spieler[playerid][pAdminOnduty] == true)
{
if(strcmp(cmd2, "Area", true)==0)
{
if(AbwehrsystemTog[Area] == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "{CC0000}WARNUNG: {FF0000}Luftüberwachung der Area51 {00CC00}aktiviert{FFFFFF}!");
AbwehrsystemTog[Area]=1;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "{CC0000}WARNUNG: {FF0000}Luftüberwachung der Area51 {CC0000}deaktiviert{FFFFFF}!");
AbwehrsystemTog[Area]=0;
}
}
if(strcmp(cmd2, "SFLuft", true)==0)
{
if(AbwehrsystemTog[Luft_SF] == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "{CC0000}WARNUNG: {FF0000}Luftüberwachung des Flugzeugträgers {00CC00}aktiviert{FFFFFF}!");
AbwehrsystemTog[Luft_SF]=1;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "{CC0000}WARNUNG: {FF0000}Luftüberwachung des Flugzeugträger {CC0000}deaktiviert{FFFFFF}!");
AbwehrsystemTog[Luft_SF]=0;
}
}
if(strcmp(cmd2, "SFSee", true)==0)
{
if(AbwehrsystemTog[See_SF] == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "{CC0000}WARNUNG: {FF0000}Seeüberwachung des Flugzeugträgers {00CC00}aktiviert{FFFFFF}!");
AbwehrsystemTog[See_SF]=1;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "{CC0000}WARNUNG: {FF0000}Seeüberwachung des Flugzeugträger {CC0000}deaktiviert{FFFFFF}!");
AbwehrsystemTog[See_SF]=0;
}
}
if(strcmp(cmd2, "AlkaLuft", true)==0)
{
if(AbwehrsystemTog[Luft_Alka] == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "{CC0000}WARNUNG: {FF0000}Luftüberwachung des Gefängnisses Alkatraz {00CC00}aktiviert{FFFFFF}!");
AbwehrsystemTog[Luft_Alka]=1;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "{CC0000}WARNUNG: {FF0000}Luftüberwachung des Gefängnisses Alkatraz {CC0000}deaktiviert{FFFFFF}!");
AbwehrsystemTog[Luft_Alka]=0;
}
}
if(strcmp(cmd2, "AlkaSee", true)==0)
{
if(AbwehrsystemTog[See_Alka] == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "{CC0000}WARNUNG: {FF0000}Seeüberwachung des Gefängnisses Alkatraz {00CC00}aktiviert{FFFFFF}!");
AbwehrsystemTog[See_Alka]=1;
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "{CC0000}WARNUNG: {FF0000}Seeüberwachung des Gefängnisses Alkatraz {CC0000}deaktiviert{FFFFFF}!");
AbwehrsystemTog[See_Alka]=0;
}
}
if(strcmp(cmd2, "Alle", true)==0)
{
if(strcmp(cmd2, "an", true) == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "{CC0000}WARNUNG: {FF0000}Alle Abwehrsysteme {00CC00}aktiviert{FFFFFF}!");
AbwehrsystemTog[Area]=1;
AbwehrsystemTog[Luft_SF]=1;
AbwehrsystemTog[See_SF]=1;
AbwehrsystemTog[Luft_Alka]=1;
AbwehrsystemTog[See_Alka]=1;
}
if(strcmp(cmd2, "aus", true) == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "{CC0000}WARNUNG: {FF0000}Alle Abwehrsysteme {CC0000}deaktiviert{FFFFFF}!");
AbwehrsystemTog[Area]=0;
AbwehrsystemTog[Luft_SF]=0;
AbwehrsystemTog[See_SF]=0;
AbwehrsystemTog[Luft_Alka]=0;
AbwehrsystemTog[See_Alka]=0;
}
else
{
SendClientMessage(playerid,WRONGCMD,"BENUTZE: /abwehrsystem Alle [an|aus]");
return 1;
}
}
else
{
SendClientMessage(playerid,WRONGCMD,"BENUTZE: /abwehrsystem [Area|SFLuft|SFSee|AlkaLuft|AlkaSee|Alle] [an|aus|(nur bei Alle)]");
return 1;
}
}
return SendClientMessage(playerid,GRAU,"Du bist nicht in der jeweiligen Fraktion.");
}
Alles anzeigen
[(code]
if(dialogid == 2100)
{
if(response)
{
if(inputtext == "text")
{
}
}
}
Wieso geht das nicht?
Ziel ist es, abzufragen ob "text" eingegeben wurde.
C:\Users\Curious\Desktop\Mapping SAMP\SAMP Server\gamemodes\South-Coast.pwn(12187) : error 033: array must be indexed (variable "inputtext")
Schau dir mal folgende Funktion an
[wiki] strcmp[/wiki]
Ich habe eine Frage bezüglich des folgenden Stockes:
stock Check_If_Point_In_Triangle(playerid,Float:X,Float:Y,Float:Z,Float:R,Float:MAX_Z) // (c)IPrototypeI
{
new const Float:Winkel = 60.0;
new const Float:Weite = 30.0;
new Float:Pos[8];
GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
Pos[4] = Y+(Weite*floatsin(Winkel+R,degrees));
Pos[5] = Y-(Weite*floatsin(R-Winkel,degrees));
Pos[6] = X+(Weite*floatcos(Winkel+R,degrees));
Pos[7] = X-(Weite*floatcos(R-Winkel,degrees));
return (((Y-Pos[4])*(Pos[0]-X) + (Pos[6]-X)*(Pos[1]-Y)) <0 ||((Pos[4]-Pos[5])*(Pos[0]-Pos[6]) + (Pos[7]-Pos[6])*(Pos[1]-Pos[4])) <0 ||((Pos[5]-Y)*(Pos[0]-Pos[7]) + (X-Pos[7])*(Pos[1]-Pos[5])) <0 || Pos[2] > MAX_Z || Pos[2] < Z) ? 0:1;
}
Alles anzeigen
Wofür stehtFloat:R und Float:MAX_Z ?
( Float:R könnte ich mir denken für Radius ... )
R ist eigentlich die falsche Bezeichnung der Variable, die sollte "A" heißen, da es sich hier um den Drehwinkel (Angle) handelt (GetPlayerFacingAngle).
MAX_Z ist die maximale Höhe die in das Dreieck fällt.
http://forum.sa-mp.com/showpost.php?p=2538995&postcount=3961
Ein Code könnte also so aussehen:
new Float:x, Float:y, Float:z, Float:a;
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
if(Check_If_Point_In_Triangle(andereID, x, y, z-3.0, a, z+10.0))
{
//Im Bereich
}
z-3 damit der Spieler auch etwas unterhalb der playerid sein kann, und z+10 damit er auch oberhalb sein kann.
PS: Es ist übrigens nicht nur einfacher zu lesen, sondern auch von besserer Performance, wenn man auf Arrays bei Berechnungen von Positionen verzichtet. Ein Code wie die "return" Zeile des stocks geht an jeglicher Lesbarkeit vorbei und bringt keinen Performancevorteil, eher gegenteilig.
Hi, wie überprüfe ich korrekt ob eine Animation ausgeführt wird?
Keines meiner Beispiele funktioniert..
if(GetPlayerAnimationIndex(i))
{
new animlib[32];
new animname[32];
GetAnimationName (GetPlayerAnimationIndex(i), animlib, 128, animname, 128);
//if(strcmp(animlib, "Swim_Breast || SWIM_crawl || Swim_Tread", true) == 0)
if(strcmp(animlib, "SWIM_BREAST", true) == 0)
Nutze im strcmp den animname anstatt der animlib.
Alles anzeigenR ist eigentlich die falsche Bezeichnung der Variable, die sollte "A" heißen, da es sich hier um den Drehwinkel (Angle) handelt (GetPlayerFacingAngle).
MAX_Z ist die maximale Höhe die in das Dreieck fällt.
http://forum.sa-mp.com/showpost.php?p=2538995&postcount=3961
Ein Code könnte also so aussehen:
new Float:x, Float:y, Float:z, Float:a;GetPlayerPos(playerid, x, y, z);GetPlayerFacingAngle(playerid, a);if(Check_If_Point_In_Triangle(andereID, x, y, z-3.0, a, z+10.0)){ //Im Bereich}
z-3 damit der Spieler auch etwas unterhalb der playerid sein kann, und z+10 damit er auch oberhalb sein kann.
PS: Es ist übrigens nicht nur einfacher zu lesen, sondern auch von besserer Performance, wenn man auf Arrays bei Berechnungen von Positionen verzichtet. Ein Code wie die "return" Zeile des stocks geht an jeglicher Lesbarkeit vorbei und bringt keinen Performancevorteil, eher gegenteilig.
Gilt das jetzt für Blitzer?
Und die Faceing Angle muss vom Player gemessen werden und nicht vom Blitzer?
Wenn du abfragen willst, ob ein Spieler in dem Sichtfeld des Blitzers ist, dann musst du die x, y, z vom Blitzer nehmen, sowie die Angle vom Blitzer. Nur die playerid ist dann die ID des Spielers, der Überprüft werden soll.
Ich habe eine kurze Frage bezüglich der "for-Schleife".
Zurzeit arbeite ich an meinem AntiAFK System, nur wird mir die folgende Nachricht mehr mals gesenden ("Bitte bestätige deine Anwesenheit mit '/confirmafk'.")
Normal könnte man es ja mit einem return lösen, jedoch klappt das ja nicht in der "for-Schleife" da sonnst der Code beendet wird.
Wie kann ich den Code umschreiben das ich nur einmal die Nachricht gesendet bekomme?
Ausschnitt aus dem Code:
if(ServerData[sAntiAfk] == false){
if(pData[i][pAfk] == false){
GetPlayerPos(i, Pos[0], Pos[1], Pos[2]);
if(Pos[0] == pData[i][pAfkPos][0] && Pos[1] == pData[i][pAfkPos][1] && Pos[2] == pData[i][pAfkPos][2])
{
if(pData[i][pAfkCount] > ANTICHEAT_AFKTIME){
SCM(i,COLOR_RED, "["ANTICHEAT"]: Bitte bestätige deine Anwesenheit mit '/confirmafk'.");
pData[i][pAfkKickTimer] = SetTimerEx("AwayFromKeyboardKick", 20000, 0, "i", i);
}else{
pData[i][pAfkCount]++;
}
}
pData[i][pAfkPos][0] = Pos[0];
pData[i][pAfkPos][1] = Pos[1];
pData[i][pAfkPos][2] = Pos[2];
}
}
Alles anzeigen
Ein break; beendet die Schleife und führt den Code nach der Schleife weiter aus.
Füge also ein break nach der Nachricht ein.
Ein break; beendet die Schleife und führt den Code nach der Schleife weiter aus.
Füge also ein break nach der Nachricht ein.
Stimmt da war ja was ![]()
Vielen Dank ![]()
bei einer for-Schleife kannst du auch continue verwenden.
Damit kannst du die schleife elegant stoppen bzw. überspringen wenn diese durchgelaufen ist.
break wäre in dem Fall nicht gut da das genauso wie return 1; ist.
Nein, das stimmt nicht.
continue = Springe einen Schleifen-Step weiter
break = Beende die Schleife
return = Beende die Funktion (public/stock/...)
Break ist für das was er machen möchte der richtige Befehl.
Ist es möglich, dass beim Connecten geprüft wird ob der Spieler schon mit der IP registriert ist?
Weil man mit dem MySQL Statement soweit ich weiß nur SELECT * FROM laden kann, da ja alle Datengeladen werden müssen und anschließend mit WHERE der Namen herausgesucht wird.
Ist es aber möglich wenn ein neuer Spieler sich registriert das gecheckt wird, dass z.B. das die registrierten IP's mit seinem entsprechen?
PlayerEnum wäre da nicht geeignet oder mit einem MySQL Statement?
Bzw. wie könnte man am einfachsten soetwas Prüfen?
Das gleiche würde ich auch für die Email einstellen später....
Könnte mir jemand helfen? Bin noch am grübeln wie man das am geschicktesten machen könnte...
Dazu kannst du auch einfach einen SELECT machen, mit WHERE ip = xxx. Hat das Result mehr als 0 Zeilen, dann ist die IP bereits vorhanden.
Gleich bei der Mail.