Oh tut mir leid, ich kann ja auch mal Fehler machen!
Beiträge von malE
-
-
Versuchs so:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == hListDia)
{
if(!response)return 1;
new counter = -1;
for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
{
if(SpielerInfo[i][IstImKrankenhaus] == 1)
{
counter ++;
if(counter == listitem)
{
new Float:X, Float:Y, Float:Z;
x = GetPVarFloat(i, "gestorbenX");
y = GetPVarFloat(i, "gestorbenY");
z = GetPVarFloat(i, "gestorbenZ");
SetPlayerPos(playerid, X, Y, Z);
SendClientMessage(playerid, -1, "Ziel wurde soeben markiert!");
break;
}
}
}
return 1;
}
} -
#define FIRST_TEAM_COLOR_TAG "{610D96}VIOLET"
SendClientMessage(playerid, -1, ""#FIRST_TEAM_COLOR_TAG""); -
-
-
Dann stimmt anscheint der Pfad nicht. Kopiere den Pfad der "SAMP.ahk", mit einem Rechtsklick auf die Datei -> Eigenschaften -> Ort.
-
A_MyDocuments
-
Leider bringt die Variante den Compiler zum crashen.
Kann eigentlich nicht sein, bei mir funktioniert es problemlos. Genauso wie folgender Code problemlos bei mir läuft.
#define TEAM_NAME_1 "Cops"new const Float:MoneySpawns[][7]={
{-2335.7568,-2340.2905,-2023.9417,-2027.9861,270.0450,269.2450},//Violet
{-2279.4812,-2283.4812,-1286.3794,-1294.3794,258.9622,258.3622},//Yellow
{-2810.7144,-2819.3496,-1493.0504,-1495.6464,139.3078,138.9078},//Brown
{-2303.8931,-2337.4104,-1607.2054,-1644.9517,483.7031,482.9031}//Main
};main()
{
print(TEAM_NAME_1);
printf("%s", TEAM_NAME_1);
for(new i=0; i < sizeof(MoneySpawns); i++) printf("[X: %0.2f, Y: %0.2f, Z: %0.2f] [X: %0.2f, Y: %0.2f, Z: %0.2f]", MoneySpawns[i][0], MoneySpawns[i][1], MoneySpawns[i][2], MoneySpawns[i][3], MoneySpawns[i][4], MoneySpawns[i][5]);
} -
Du hast die Anführungszeichen vergessen.
#define TEAM_NAME_1 "Cops"
main()
{
print(TEAM_NAME_1);
printf("%s", TEAM_NAME_1);
} -
Versuch mal die "0" mit einem "false" zu ersetzen.
-
-
Das Mindestalter für das Kaufen und Verkaufen von Ware ist doch sowieso erst ab 18 erlaubt bei Ebay, oder nicht?
keine sorge ich bzw. wir sind schon volljährig. wollte nur fragen ob jemand weiß wie man artikel mit fsk 18 verkauft
-
-
Der Code ist auf jeden Fall noch verbesserungswürdig!
Wenn du sscanf benutzt solltest du immer string Parameter als letzten Parameter vorgeben, da ansonsten nach einem Leerzeichen, ungewollt der nächste Parameter aufgerufen wird.
Außerdem habe ich noch drei Abfragen hinzugefügt und die Länge deines strings auf 144 Zeichen erweitert, da SendClientMessage() max. 144 Zeichen ausgeben kann.
Bei einer Abfrage (ist markiert) musst du die Variable auf die Variable umändern, welche den Admin Rang des Spieler speichert.
ocmd:tban(playerid,params[])
{
if(!IsPlayerGM(playerid,2))return 1;
new pID,string[144],Grund[64],Dauer;
if(sscanf(params, "uis", pID,Dauer,Grund))return SendClientMessage(playerid, FARBE_ROT, "INFO: /tban [PlayerId] [Dauer (in Minuten)] [Grund]");
if(pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,FARBE_ROT,"Diese Spieler (ID) existiert nicht.");
if(pID == playerid)return SendClientMessage(playerid,FARBE_ROT,"Du kannst dich nicht selber Bannen!");
if(admin(playerid) <= admin(pID))return SendClientMessage(playerid, FARBE_ROT, "Du kannst keinen ranghöheren oder gleichrangigen Admin bannen!"); // variablen unbedingt ändern
if(Dauer <= 0)return SendClientMessage(playerid, FARBE_ROT, "Ungültige Dauer!");
if(!strlen(Grund) || strlen(Grund) > sizeof(Grund))return SendClientMessage(playerid, FARBE_ROT, "Ungültiger Grund!");
format(string,sizeof(string),"INFO: %s wurde von %s %s für %d Minuten gebannt.Grund: %s",getPlayerName(pID),GetGMRang(playerid),getPlayerName(playerid),Dauer,Grund);
SendClientMessageToAll(FARBE_ROT,string);
TBan(pID,Grund,Dauer,playerid);
return 1;
} -
Du kannst nicht überall die geschweiften Klammern ("{}") benutzen.
ocmd:aduty(playerid,params[])
{
if(!IsPlayerGM(playerid,1)) return 1;
if(!AdmOnDuty[playerid])
{
new string[128];
format(string,sizeof(string),"* %s ist nun als %s im Dienst! *",getPlayerName(playerid),GetGMRang(playerid));
SendClientMessageToAll(FARBE_BLAU,string);
SetPlayerColor(playerid, FARBE_ROT);
AdmOnDuty[playerid]=true;
CMDLog(string);
}
return 1;
} -
@Aaron1337 die Funktion ist so korrekt, diese vor allem so zu überprüfen ist unnötig.
@xPatrick zeig mir mal bitte wie und wo du die Funktion aufrufst.
-
GetGMRang(playerid)
{
new string[36];
switch(sInfo[playerid][Adminlevel]) {
case 1: string = "[GS]Gamesage";
case 2: string = "[GM]Gamemaster";
case 3: string = "[ADM]Admin";
}
return string;
} -
Kann ich folgenden Code eventuell effizienter oder besser schreiben, vorallem wegen der Kontrollstrukturen?
Ich moechte weiterhin folgendes umsetzen:
Ich will nicht dass ein Spieler das eigene "Bett" mit /blowup zerstoert.
Also will ich irgendwie ausschliessen dass der beispielsweise bedstateviolet auf -1 setzen kann wenn er selbst gPlayerTeamSelection[playerid] == TEAM_VIOLET ist.
Daher habe ich irgendwie das gefuehl dass ich alles umbauen muss, vielleicht hat jemand einen VorschlagC
Alles anzeigenif(strcmp(cmdtext, "/blowup", true) == 0) { for(new i = 0; i < sizeof(beds[]); i++) { new Float:health; GetPlayerHealth(playerid,health); if(running !=1 && IsPlayerInRangeOfPoint(playerid,10.0,beds[i][0],beds[i][1],beds[i][2]) && health != 0 && !IsPlayerInAnyVehicle(playerid)) // In this script we deal with players only { running = 1; if(i == 0 && bedstateviolet !=-1 && gPlayerTeamSelection[playerid] != TEAM_VIOLET) { bedstateviolet=-1; SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team {610D96}VIOLET"); } if(i == 1 && bedstateblue !=-1 && gPlayerTeamSelection[playerid] != TEAM_BROWN) { bedstateblue=-1; SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team {8B4513}BROWN"); } if(i == 2 && bedstateyellow !=-1 && gPlayerTeamSelection[playerid] != TEAM_YELLOW) { bedstateyellow=-1; SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team {FFFF00}YELLOW"); } if((i == 0 && bedstateviolet !=-1 && gPlayerTeamSelection[playerid] != TEAM_VIOLET) || (i == 1 && bedstateblue !=-1 && gPlayerTeamSelection[playerid] != TEAM_BROWN) || (i == 2 && bedstateyellow !=-1 && gPlayerTeamSelection[playerid] != TEAM_YELLOW)) { SendClientMessage(playerid, COLOR_WHITE, "SERVER: Planted Bomb Successfully. Lets Blow This Bed Up!"); SetPlayerScore(playerid, GetPlayerScore(playerid) + 1); SendClientMessage(playerid, COLOR_WHITE, "SERVER: Keep Running! Bed Will Blow Up In 5 seconds!"); GetPlayerPos(playerid, x1, y1, z1); ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.0, 1, 0, 0, 1, 1); for(new k = 0; k < MAX_PLAYERS; k++) { PlayerPlaySound(k,7416,x1,y1,z1); } SetTimer("BlowUpThisBed", bombtimer, false); CountDownTimer = SetTimer("CountDown", 1000, true); new Float:dist = GetDistance(beds[i][0],beds[i][1],beds[i][2],x1,y1,z1); printf("Distance to closest bed: %f, Index: %d", dist, i); } else { return 0; } return 1; } } return 0; }
Wenn jemand noch Zeit hat, auch folgenden Befehl
Ich kann dir nicht sagen, ob es funktioniert, da ich es logischerweise nicht testen kann.
new bedstate[3] = {-1,...}; // violet (0), blue / brown (1), yellow (2)if(strcmp(cmdtext, "/blowup", true) == 0)
{
for(new i = 0; i < sizeof(beds[]); i++)
{
new Float:health;
GetPlayerHealth(playerid,health);if(running !=1 && IsPlayerInRangeOfPoint(playerid,10.0,beds[i][0],beds[i][1],beds[i][2]) && health != 0 && !IsPlayerInAnyVehicle(playerid)) // In this script we deal with players only
{
running = 1;if(bedstate[i] != -1 && gPlayerTeamSelection[playerid] != i)
{
new stringTeam[68], string[145];
bedstate[i] = -1;
switch(gPlayerTeamSelection[playerid])
{
case 0: stringTeam = "{610D96}VIOLET";
case 1: stringTeam = "{8B4513}BROWN";
case 2: stringTeam = "{FFFF00}YELLOW";
}
format(string, sizeof(string), "SERVER: You are blowing up the bed of Team {610D96}%s!", stringTeam);
SendClientMessage(playerid, COLOR_WHITE, string);
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Planted Bomb Successfully. Lets Blow This Bed Up!");
SetPlayerScore(playerid, GetPlayerScore(playerid) + 1);
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Keep Running! Bed Will Blow Up In 5 seconds!");
GetPlayerPos(playerid, x1, y1, z1);
ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.0, 1, 0, 0, 1, 1);
for(new k = 0; k < MAX_PLAYERS; k++)
{
PlayerPlaySound(k,7416,x1,y1,z1);
}
SetTimer("BlowUpThisBed", bombtimer, false);
CountDownTimer = SetTimer("CountDown", 1000, true);
new Float:dist = GetDistance(beds[i][0],beds[i][1],beds[i][2],x1,y1,z1);
printf("Distance to closest bed: %f, Index: %d", dist, i);
break;
}
else if(gPlayerTeamSelection[playerid] == i)
{
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You can`t blow up your own bed.");
}
}
}
return 1;
}
Du musst allerdings die Variable gPlayerTeamSelection[] umdeklarieren. -
format(nPlate, sizeof(nPlate), "%s%s %d", toupper(playerName[0]), toupper(playerName[1]), PrivateVehicle[playerid][slot][vehID]);
zu
format(nPlate, sizeof(nPlate), "%c%c %d", toupper(playerName[0]), toupper(playerName[1]), PrivateVehicle[playerid][slot][vehID]); -
Du brauchst dafür Visual Studio und die Programmiersprachen für GTA:N sind C# bzw. CSharp (Server Side) und JS bzw. JavaScript (Client Side).