Kann es sein, dass du ein editiertes dcmd hast?
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
Kann es sein, dass du ein editiertes dcmd hast?
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
Du bist echt krass Das gleiche hab ich auch mal irgendwann versucht, aber hast wohl auch ne coole denkweise xD
dcmd_su(playerid,params[])
{
new sGrund[128], wps22, pID, ThePlayer[MAX_PLAYER_NAME],pname[MAX_PLAYER_NAME],i=-1, string[128], sinfo[10];
if(sscanf(params, "uds[128]",pID,wps22,sGrund)) return SendClientMessage(playerid,COLOR_LIGHTRED,"USAGE: /su [playerid] [wandets] ([grund],optional)");
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR_LIGHTRED,"[SYSTEM]: Kein Spieler mit angegebener ID Online");
if(PlayerInfo[playerid][fraktion] != 1 && PlayerInfo[playerid][fraktion] != 6) return 1;
if(!strlen(sGrund)) format(sGrund, sizeof(sGrund), "<Kein Grund");
if(PlayerInfo[pID][wps] > 60)
{
format(string, sizeof(string), "[SYSTEM]: Dieser Benutzer hat schon %d Wandets, es können ihm nicht mehr gegeben werden.",PlayerInfo[playerid][wps]);
return SendClientMessage(playerid,COLOR_LIGHTRED,string);
}
PlayerInfo[pID][wps] += wps22;
PlayerInfo[pID][wplevel] = PlayerInfo[pID][wps]/10;
GetPlayerName(playerid, pname, sizeof(pname)); GetPlayerName(pID,ThePlayer,sizeof(ThePlayer));
SendClientMessage(pID,COLOR_LIGHTRED,"[SYSTEM]: Du hast ein verbrechen begangen (%s), Reporter: %s.",sGrund,ThePlayer);
SendClientMessage(pID,COLOR_YELLOW,"[SYSTEM]: Aktuelles Wandetlevel: %d, %d Wandets.",PlayerInfo[pID][wplevel],PlayerInfo[pID][wps]);
if(PlayerInfo[playerid][fraktion] == 1) sinfo = "Officer";
else if(PlayerInfo[playerid][fraktion] == 6) sinfo = "Soldat";
while(i!=MAX_PLAYERS)
{
i++;
if(PlayerInfo[i][fraktion] != 1 && PlayerInfo[i][fraktion] != 6) continue;
format(string,sizeof(string),"[Polizei HQ]: %s %s hat %s %d Wandets gegeben. Grund: %s",sinfo,ThePlayer,pname,wps22,sGrund");
SendClientMessage(i,COLOR_LIGHTBLUE,string);
format(string,sizeof(string),"[Polizei HQ]: Wandetlevel %d, %d Wandets!",PlayerInfo[pID][wplevel], PlayerInfo[pID][wps]);
SendClientMessage(i,COLOR_LIGHTBLUE,string);
}
return 1;
}
Bitteschön, du verwendest es wirklich alles sehr komisch
ocmd:m(playerid, params[])
{
new msg[100],str[128],aname[MAX_PLAYER_NAME],Float:mx,Float:my,Float:mz;
GetPlayerName(playerid,aname,sizeof(aname));
if(sscanf(params,"s[100]",msg)) return SendClientMessage(playerid, COLOR_WHITE, "Nutze: /m [Message]");
if(Spielerinfo[playerid][Fraktion] != 1 && Spielerinfo[playerid][Fraktion] != 3 || Spielerinfo[playerid][Leader] != 1 && Spielerinfo[playerid][Leader] != 3) return SendClientMessage(playerid, 0xFF0000FF, "Du bist kein Staatsbeamter!");
format(str, sizeof(str), "[Megaphone]: %s: %s", aname, msg);
for(new i = 0; i < MAX_PLAYERS; i++)
{
GetPlayerPos(playerid,mx,my,mz);
if(!IsPlayerInRangeOfPoint(i,10.0,mx,my,mz)) continue;
SendClientMessage(i, COLOR_YELLOW, str);
}
return 1;
}
Indem du überprüft ob es ein Bike ist und dann es für Bikes einfach nicht erstellst? Hier ein kleiner Auszug aus nem GF....
IsABike(carid)
{
switch(GetVehicleModel(carid))
{
case 509, 481, 510: return true
}
return false;
}
Eine tolle Funktion mit dem es möglich ist, den Namen für andere unsichtbar zu machen:
Mich wunderts, dass hier keiner was geschrieben hat xD
Folgende Zeilen ins Forum posten:
Zeile 3888 - Da ich nicht genau sagen kann woran es liegt
Zeile 3260 - Höchstwahrscheinlich steht sowas wie Float:rX, Float:rY - Diese sollst du löschen.
Zeile 3263 - Falscher Tag, aber bitte ins Forum posten..
Zeile 3251 - Das gleiche wie bei Zeile 3260
Zeile 3254 - Gilt genau das gleiche wie für 3263
Zeile 90 - Du benützt ein #define zweimal mit gleichem Namen, entweder es ist das gleiche, oder du benennst login um in Login und alles was damit zusammenhängt auch
Nunja, jeder hat die Wahl, ober auf Gut Glück darauf hofft, dass ihm jemand im Forum den Fehler behebt oder es wirklich selbstständig löst.. Die Wahl wird bei vielen nach ner Zeit klar, andere hingegen machen sich bei der Wahl keinen Stress
public OnPlayerShootPlayer(shooter,target,damage)
{
if((PlayerInfo[shooter][pMember] >= 8 && PlayerInfo[shooter][pMember] <= 13 || PlayerInfo[shooter][pLeader] >= 8 && PlayerInfo[shooter][pLeader] <= 13) && GetPlayerWeapon(shooter) == 23)
{
TogglePlayerControllable(target,0);
new name[MAX_PLAYER_NAME],msg[80];
GetPlayerName(shooter,name,sizeof(name));
format(msg,sizeof(msg),"* %s hat dich mit seiner Tazerwaffe für 5 Sekunden getazert!",name);
SendClientMessage(target,0x33AA33AA,msg);
GetPlayerName(target,name,sizeof(name));
format(msg,sizeof(msg),"* Du hast %s getazert!",name);
SendClientMessage(shooter,0x33AA33AA,msg);
SetTimerEx("Tazer",5000,0,"d",target); //Platzhalter 'd' reicht eig. vollkommen aus, aber Geschmackssache
}
return 1;
}
public tazer(playerid) TogglePlayerControllable(playerid,1);
Es gäbe natürlich eine bessere Variante vielleicht, aber diese hier sollte die einfachste sein..
new gCurrentTime[3];
forward CheckHour();
public CheckHour()
{
gettime(gCurrentTime[0],gCurrentTime[1],gCurrentTime[2]);
if(gCurrentTime[0]!=0||gCurrentTime[1]!=59)
{
SetTimer("CheckHour", 30000, false); //Überprüft alle 30Sekunden...
return false;
}
GameModeExit();
return true;
}
public OnFilterScriptInit()
{
SetTimer("CheckHour", 120000, false); //Startet zum überprüfen erst in 2min...
return true;
}
Höchstwahrscheinlich ist er auch nicht 17, jedoch um dies zu testen kannst du deinen obigen Code mit folgendem ersetzen
printf("DEBUG Spieler %d spawnt mit Fraktion´s ID: %d", playerid, pInfo[playerid][fraktion]); //Wiedergibt nen Debug Text im Log
switch(pInfo[playerid][fraktion]) //Überprüft welche Fraktion Spieler ist
{
case 1: SetPlayerPos(playerid,1580.1251,-1635.4674,13.5604);
case 2: SetPlayerPos(playerid,-1616.4448,685.6295,7.1875);
case 3: SetPlayerPos(playerid,-2557.4812,662.7305,14.4531);
case 4: SetPlayerPos(playerid,2034.1553,-1403.5601,17.2816);
case 5: SetPlayerPos(playerid,-1616.4448,685.6295,7.1875);
case 6: SetPlayerPos(playerid,-2452.0681,503.3803,30.0827);
case 7: SetPlayerPos(playerid,-1521.9054,481.5855,7.1875);
case 8: SetPlayerPos(playerid,2256.7405,-1408.8368,24.0000);
case 9: SetPlayerPos(playerid,2499.5959,-1684.8195,13.4340);
case 10: SetPlayerPos(playerid,-2106.6504,-195.4614,35.3203);
case 11: SetPlayerPos(playerid,-2200.4988,646.3664,49.4375);
case 12: SetPlayerPos(playerid,2584.2241,-1104.3000,66.6413);
case 13: SetPlayerPos(playerid,-535.9175,-504.5012,25.5178);
case 14: SetPlayerPos(playerid,329.6980,-1511.2147,36.0391);
case 15: SetPlayerPos(playerid,-1876.4185,-150.8452,11.8984);
case 16: SetPlayerPos(playerid,2791.9575,-1427.7181,36.0938);
case 17: SetPlayerPos(playerid,-1026.1521,-714.3414,32.0078);
default: SetPlayerPos(playerid,1674.2616,-1915.5049,21.9542); //Wird aufgerufen, wenn Spieler nicht in der Fraktion von 1 bis 17 in dem Fall...
}
SetPlayerSkin(playerid,pInfo[playerid][skin]); //Setzt den Spielerskin
Sofern du gespawnt bist, schaust du in der server_log.txt nach, was im Debug Text steht und wenn dort die FraktionsID 0 ist, dann hast du irgendwo mit der Variable pInfo[playerid][fraktion] einen Fehler...
Wie Google es so schön förmlich sagen würde "Auf Gut Glück" xD
if(strcmp("/cc", cmd , true) == 0)
{
new string[256];
if(!IsPlayerInRangeOfPoint(playerid,5.0,1275.94458008,-1257.80810547,15.59458160)) return SendClientMessage(playerid, COLOR_YELLOW, "Du bist nicht in der Car-Color-Garage.");
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_YELLOW, "Du musst in einem deiner Privatfahrzeuge sein!");
for(new i = 0; i<MAX_VEHICLES; i++)
{
if(PlayerCar[i][vid] != GetPlayerVehicleID(playerid)) continue;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_YELLOW, "VERWENDUNG: /cc [Farbe 1] [Farbe 2]");
new color1 = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_YELLOW, "VERWENDUNG: /cc [Farbe 1] [Farbe 2]");
new color2 = strval(tmp);
if(color1 < 0 || color1 > 400) return SendClientMessage(playerid, COLOR_YELLOW, "Es gibt keine Farbe unter 0 und über 400!");
if(color2 < 0 || color2 > 400) return SendClientMessage(playerid, COLOR_YELLOW, "Es gibt keine Farbe unter 0 und über 400!");
ChangeVehicleColor(GetPlayerVehicleID(playerid), color1, color2);
PlayerCar[i][c1] = color1; PlayerCar[i][c2] = color2;
format(string, sizeof(string), "Fahrzeug-Farben geändert! [Farbe 1: %d || Farbe 2: %d]", color1, color2);
return SendClientMessage(playerid, COLOR_YELLOW, string);
}
return SendClientMessage(playerid, COLOR_YELLOW, "Du sitzt nicht in einem deiner Privatfahrzeuge drinnen...");
}
//Edit: Fehler ausgebessert...
Zunächst mal ist es sinnlos Parameter zu definieren, da sie sowieso gleich sind... Also reicht es einfach so
#define GivePlayerWeapon b_GivePlayerWeapon
#define GetPlayerWeaponData b_GetPlayerWeaponData
#define ResetPlayerWeapons b_GetPlayerWeapons
Dazu muss man sagen, dass man wissen sollte, wo du alles definiert hast. Sollte die Funktion b_GivePlayerWeapon und Co in einem Include sein, so fügst du diese drei Zeilen am Ende der Include und die Zeile, wo du im GM das Include definierst, sollte genau unterhalb von a_samp sein, um Konflikte mit anderen Includes zu vermeiden. Sollte jedoch die funktion in dein GM kopiert sein, so musst du diese Definitionen ganz oben zu den anderen hinzufügen, jedoch sollten Sie unterhalb der Funktionen sein. Sonst entsteht ein Dauer-Loop.
Bitteschön...
Nein 8D Nicht vID bekommt die ID von CreateVehicle zugewiesen, sondern die Variable Cars
Zig tausende.. Einfach im englischen Samp Forum nach "FileSystem" oder gleich nach "SII" suchen und du hast das Zeugs...
Äh Haxler, wieso willst du unnötig die SAMP-Limits ausnutzen? Wenns ned notwendig ist, muss man es auch ned erstellen lassen.
Langweiliger Fehler Es fehlt einfach folgendes in deinem Script:
main()
{
}
und das wars ^^, naja viel Spaß und "Gern Geschehen" für dein kommendes "Danke"
Naja der Typ da oben meint Anfangs das Richtige, jedoch am Ende kam nur ein Döner heraus. Was du machen kannst ist eine eigene VehicleID Strukturierung zu bauen, welche aber nichts mit GetPlayerVehicleID zu tun hat, bedeutet man kann die Samp erzeugten Variablen "derzeit" noch nicht intern verändern. Es fehlen uns einfach die Funktionen bzw. die enum Strukturierung dazu (sofern ein enum überhaupt benützt wird in SAMP ^^).
Also ein Beispiel wäre wie erfolgt im Anhang... Have Fun
Eigentlich ist das ein Godfather Problem, aber ok ausnahmsweise...
Das Godfather hat eine Variable welche "pLocal" sich nennt. Es wird überprüft, ob ein Spieler in einem Haus/Geschäft ist. Sollte der Spieler in Interior 0 sein und die Variable von ihm nicht auf 255 sein, so wird er automatisch zu diesem Haus/Geschäft geportet, welches in seiner Variable "pLocal" steht. Es ist aufjedenfall in einem Timer, jedoch wie er bei dir heißt, weiß ich nicht. Diese Lösung soll für beide deiner Punkte gelten und naja, ich finde es lustig, wenn Leute ein Projekt programmieren, welches Sie selbst nicht beherschen