format(string, 256, "SetPlayerCameraPos(playerid, %f, %f, %f);", x, y, z);
So muss das sein!
 
			
									
		Nützliche Codeschnipsel
- breadfish
- Geschlossen
											
										
					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				
		
		- 
			
- 
			bindet alle skins ins spiel ein (steht in der .com wiki) 
 public OnPlayerRequestClass(playerid, classid)
 {
 new i = 0;
 for(; i < 299; i++)
 {
 if(IsValidSkin(i))
 {
 AddPlayerClass(i,0.0,0.0,0.0,0.0,-1,-1,-1,-1,-1,-1);
 }
 }
 return 1;
 }
 IsValidSkin(skinid)
 {
 new i = 0;
 #define MAX_BAD_SKINS 22
 new badSkins[MAX_BAD_SKINS] =
 { 3, 4, 5, 6, 8, 42, 65, 74, 86, 119, 149, 208, 268, 273, 289 };
 if (skinid < 0 || skinid > 299) return false;
 for (; i < MAX_BAD_SKINS; i++) { if (skinid == badSkins[i]) return false; }
 #undef MAX_BAD_SKINS
 //------------------------------
 return 1;
 }//edit 
 Fährt den Server ingame herunter und speichert den namen in der logfile
 if(strcmp(cmdtext, "/shutdown", true) == 0)
 {
 if(IsPlayerConnected(playerid))
 {
 //if (PlayerInfo[playerid][pAdmin] >= 5)
 //{
 GetPlayerName(playerid, playername, sizeof(playername));
 printf("%s hat hat den Server InGame heruntergefahren.", playername);
 SendRconCommand("exit");
 //}
 }
 return 1;
 }
- 
			stock RespawnAllCars() { for(new veh = 0; veh < MAX_VEHICLES; veh++) SetVehicleToRespawn(veh); return 1; } - Respawn alle Autos für jeden Spieler
- Ganz Easy
 Anwendung: 
 if(strcmp(cmd, "/respawn", true) == 0) {
 if(IsPlayerAdmin(playerid)) {
 RespawnAllCars(); //Hier xD
 SendClientMessage(i, COLOR_DEFINE, "RCON-Admin hat die Cars Respawned"); }
 } else {
 SendClientMessage(playerid, COLOR_DEFINE, "Du bist kein RCON Admin"); }
 return 1; }RespawnAllCars - Man kann auch nen Timer erstellen der dann den Callback aufruft und halt jeden Payday oder so die Cars respawned! PS: Meine erste stock funktion ganz easy  
- 
			stock RepairThatVehicle() { if(IsPlayerInAnyVehicle(playerid)) { SetVehicleHealth(GetPlayerVehicleID(playerid), 1000.0); RepairVehicle(GetPlayerVehicleID(playerid)); } return 1; } Anwendung: 
 if(strcmp(cmd, "/repair", true) == 0) { RepairThatVehicle(); SendClientMessage(playerid, COLOR, "Vehicle repaired"); return 1; }Ist Falsch xD 
- 
			Durch diesen Code kann man den Server unzugänglich/zugänglich für normale Spieler machen. new bool:ServerOpen = true; 
 #define COLORSERVER (0xFFFFFFFF)forward EnableCommandUse(playerid); public OnPlayerConnect(playerid) 
 {
 SetPVarInt(playerid, "CanUseCommand", 1);
 SetPVarInt(playerid, "CommandCounter", 0);
 if(!ServerOpen && !IsPlayerAdmin(playerid))
 {
 new nachricht[128];
 format(nachricht, sizeof(nachricht), "* Der Server ist leider nicht offen. Versuche es Später!");
 SendClientMessage(playerid, COLORSERVER, nachricht);
 return Kick(playerid);
 }
 return 1;
 }public OnPlayerCommandText(playerid, cmdtext[]) 
 {
 if(!strcmp(cmdtext, "/ocserver", true))
 {
 if(IsPlayerAdmin(playerid))
 {
 if(GetPVarInt(playerid, "CanUseCommand") == 0)
 {
 new nachricht[128];
 format(nachricht, sizeof(nachricht), "* Dafür musst du noch %d Sekunden warten.", GetPVarInt(playerid, "CommandCounter"));
 return SendClientMessage(playerid, COLORSERVER, nachricht);
 }
 if(ServerOpen)
 {
 new nachricht[128];
 format(nachricht, sizeof(nachricht), "* Der Server wird jetzt durch Admin %s geschlossen.", pName(playerid));
 SendClientMessageToAll(COLORSERVER, nachricht);
 ServerOpen = false;
 SetPVarInt(playerid, "CommandCounter", 30);
 SetPVarInt(playerid, "CanUseCommand", 0);
 SetTimerEx("EnableCommandUse", 1000, 0, "d", playerid);
 return KickNormalPlayers();
 }
 else
 {
 new nachricht[128];
 format(nachricht, sizeof(nachricht), "* Der Server wird jetzt durch Admin %s geöffnet.", pName(playerid));
 SendClientMessageToAll(COLORSERVER, nachricht);
 ServerOpen = true;
 SetPVarInt(playerid, "CommandCounter", 30);
 SetPVarInt(playerid, "CanUseCommand", 0);
 SetTimerEx("EnableCommandUse", 1000, 0, "d", playerid);
 return 1;
 }
 }
 return 1;
 }
 return 1;
 }stock pName(playerid) 
 {
 new id_name[MAX_PLAYER_NAME];
 GetPlayerName(playerid, id_name, MAX_PLAYER_NAME);
 return id_name;
 }stock KickNormalPlayers() 
 {
 for(new i=0; i<MAX_PLAYERS; i++)
 {
 if(!IsPlayerConnected(i)) continue;
 if(IsPlayerAdmin(i)) continue;
 Kick(i);
 }
 return 1;
 }public EnableCommandUse(playerid) 
 {
 if(GetPVarInt(playerid, "CommandCounter") > 0)
 {
 SetPVarInt(playerid, "CommandCounter", (GetPVarInt(playerid, "CommandCounter")-1));
 if(!GetPVarInt(playerid, "CommandCounter"))
 return SetPVarInt(playerid, "CanUseCommand", 1);
 return SetTimerEx("EnableCommandUse", 1000, 0, "d", playerid);
 }
 SetPVarInt(playerid, "CommandCounter", 0);
 SetPVarInt(playerid, "CanUseCommand", 1);
 return 1;
 }Als RCON Admin einfach /ocserver benutzen, für das ein- und ausschalten. 
- 
			
 stock IsPlayerInRangeOfPlayer(inrangeofplayer,player,Float:distance)
 {
 new Float:PX,Float:PY,Float:PZ;
 GetPlayerPos(inrangeofplayer,PX,PY,PZ);
 return IsPlayerInRangeOfPoint(player,distance,PX,PY,PZ);
 }Gibt zurück ob der Spieler in einem bestimmten Radius zum anderen Spieler ist. LG 
- 
			Alles anzeigen
 stock IsPlayerInRangeOfPlayer(inrangeofplayer,player,Float:distance)
 {
 new Float:PX,Float:PY,Float:PZ;
 GetPlayerPos(inrangeofplayer,PX,PY,PZ);
 return IsPlayerInRangeOfPoint(player,distance,PX,PY,PZ);
 }Gibt zurück ob der Spieler in einem bestimmten Radius zum anderen Spieler ist. LG 
 Gab es schon.
 http://forum.sa-mp.de/wbb/san-andreas-multiplayer/scripting-base/p194402-nützliche-codeschnipsel/#post194402
- 
			stock KickNormalPlayers() 
 {
 for(new i=0; i<MAX_PLAYERS; i++)
 {
 if(!IsPlayerConnected(i)) continue;
 if(IsPlayerAdmin(i)) continue;
 Kick(i);
 }
 return 1;
 }
- 
			if(!IsPlayerConnected(i)) continue; 
 if(IsPlayerAdmin(i)) continue;
 Kick(i);
 Tipp so etwas muss nicht immer schneller sein also immer schauen, überspringen sollte man nur wenn mehr als 3 Linien folgen sprich
 immer Logisch denkenif(IsPlayerConnected (i) && IsPlayerAdmin(i))Kick(i); Zugriff - Schauen ob Spieler verbunden ( Wenn dies schon nicht stimmt & der Operator && gefunden wurde wird die Abfrage als Falsch erkannt also wird Falsch wiedergegeben & es wird der nächste Schritt eingeleitet )
- Als nächstes Administrator Status prüfen , wenn der vorige Status stimmt
- Spieler vom Server werfen.
 
 Deine Zugriffe
 if(!IsPlayerConnected(i)) continue;
 if(IsPlayerAdmin(i)) continue;
 Kick(i);- Überprüfen ob Spieler verbunden ist ( wenn nicht überspringen )
- ggf. überspringen
- Prüfen Ob Spieler Administrator ist
- ggf. überspringen
- Spieler vom Server werfen
 Im Endeffekt können diese Schritte schneller sein aber nicht in allen fällen. Wollte nur mal zeigen wie einfach das ganze ist ohne Schritte einzuleiten die nicht gebraucht werden & das ganze letztendlich langsamer machen als es sein kann. Genau das gleichen bei solchen Rückgaben if(Statement(...))return 1; 
 else return 0;Zu lang ... return Statement(...); // << Gibt Direkt wieder ob Wahr oder Falsch Genau das gleiche wieder hier 
 if(Statement(...))
 {
 DoSomething();
 }
 else
 {
 Test();
 }Bei Kommandos sprich Direkten Aktionen braucht man keine Bereiche eingrenzen da es sich hierbei nicht um mehrere Aktionen hintereinander handelt sprich 
 Array Bereiche weisen immer darauf hin das mehrere Werte folgen.if(Statement(...))DoSomething(); 
 else Test();Direkt & schneller Hier mal ein Hinweis auf auf Dinge dieser Art ... 
 if(!strlen(string))
 {
 SendClientMessage(...);
 return 1;
 }Zu indirekt & zu viele Schritte ... if(!strlen(string))return SendClientMessage(...); // SendCMessage gibt bei erfolgreichem ausführen 1 wieder soll der Wert umgekehrt wiedergegeben werden also aus 1 , 0 werden aus Wahr > Falsch if(!strlen(string))return !SendClientMessage(...); // << Wie man es gewohnt ist den Umkehr Operator verwenden Fakten dazu new var = (wert1 == wert2) // << Wird in Boolean gewandelt als Wahr / Falsch gibt je nach dem 0 & 1 wieder wie man sieht die Sprache selber kann auch selber etwas nachdenken & entscheidet dann bei gewissen zusammenhängen selber. 
- 
			stock iniwegmachen(str[])for(new i;i<strlen(i);i++) 
 {
 if(str[i]=='.'&&str[i+4]=='\0')
 {
 str[i]='\0';
 return;
 }
 }macht aus blabla.ini --> blabla
- 
						
- 
			stock RepairThatVehicle() { if(IsPlayerInAnyVehicle(playerid)) { SetVehicleHealth(GetPlayerVehicleID(playerid), 1000.0); RepairVehicle(GetPlayerVehicleID(playerid)); } return 1; } Und woher kommt "playerid" bei "RepairThatVehicle();" ? 
- 
			Simples Anti Spawnkill 
 Ganz Oben:
 #define SPAWNTIME 10
 Bei OnPlayerSpawn:
 SetTimerEx("GiveWeapons", SPAWNTIME*1000, false, "i", playerid);
 SetPlayerHealth(playerid, 1000.0);
 Ganz unten im Skript:
 forward GiveWeapons(playerid);
 public GiveWeapons(playerid)
 {
 SetPlayerHealth(playerid, 100.0);
 return 1;
 }- Ungetestet 
- 
			Da einer der Benutzer ( Ich erwähne Extra keine Namen ) mir sagt das ReturnUser nicht mehr Funktioniert, 
 sprich aus teilen der Wörter den Benutzer fischen, hab ich mal eine eigene Gebaut, falls sie noch jemand braucht , BitteschönReturnUser(string[]) 
 {
 new retuser = -1,
 nameplayer[MAX_PLAYER_NAME];
 if(!strlen(string))return retuser;
 for(new i = 0;i<MAX_PLAYERS;i++)
 {
 if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
 GetPlayerName(i,nameplayer,sizeof nameplayer);
 if(strlen(string) > strlen(nameplayer))continue;
 for(new j = 0;j<((strlen(nameplayer)-strlen(string))+1);j++)
 {
 if(strcmp(string,nameplayer[j],true,strlen(string)))continue;
 retuser = i;
 break;
 }
 if(retuser!=-1)break;
 }
 return retuser;
 }Verwendung 
 // Angenommen der Nutzer heißt ,,TestNutzer´´
 new integerwert = ReturnUser("test");- Gibt die ID des Nutzers wieder
 
- 
			Alles anzeigenSimples Anti Spawnkill 
 Ganz Oben:
 #define SPAWNTIME 10
 Bei OnPlayerSpawn:
 SetTimerEx("GiveWeapons", SPAWNTIME*1000, false, "i", playerid);
 SetPlayerHealth(playerid, 1000.0);
 Ganz unten im Skript:
 forward GiveWeapons(playerid);
 public GiveWeapons(playerid)
 {
 SetPlayerHealth(playerid, 100.0);
 return 1;
 }- Ungetestet Jetzt mal ne Sau dumme Frage : 
 Warum heißt dein public GiveWeapons, der Spieler wird doch auf 100 HP gesetzt und bekommt keine Waffen 
- 
			Sry  
 Falscher Thread
- 
			Du kannst nicht einfach IsPlayerAdmin machen. Ich glaube du musst if(ISPLayerAdmin(playerid);==true){} machen oder so in der art @T.Bone: < und > verwechselt  
- 
			Alles anzeigenHey, 
 Ich habe eine funktion die ein Textdraw erscheinen lässt wenn sich der Spieler etwas Kauft!
 Aber dieses Textdraw zeigt er nur bei Id 0 an...
 Hier die Public die dafür zuständig ist den Textdraw anzuzeigen.
 public moneyabzug(playerid)
 {
 new money = GetPlayerMoney(playerid);
 if((money - PMoney[playerid]) < 0)
 {
 new MStringy[128];
 valstr(MStringy,money - PMoney[playerid]);
 if(strlen(MStringy)<=8)
 {
 new Stringy[128];
 format(Stringy,sizeof(Stringy),"%08d",money - PMoney[playerid]);
 TextDrawSetString(MoneyText[playerid],Stringy);
 TextDrawShowForPlayer(playerid,MoneyText[playerid]);
 KillTimer(MoneyHide[playerid]);
 MoneyHide[playerid]=SetTimerEx("HideMoneyText",4000,0,"i",playerid);
 }
 }
 PMoney[playerid] = money;
 return 1;
 }Mfg T.Bone Ja nur der Textdraw "MoneyText" fehlt noch und HideMoneyText usw.  
- 
			Jetzt mal ne Sau dumme Frage : 
 Warum heißt dein public GiveWeapons, der Spieler wird doch auf 100 HP gesetzt und bekommt keine Waffen Kann man auch anders nennen, war ja nur ein Grobes Beispiel. 
- 
			wie kriege ich nen Timer in mein tor rein?.... 
 also das es nach ner bestimmten zeit wieder runter fährt...
- 
			forward CloseGate(); 
 public CloseGate()
 {
 // MoveObject(...); zum Gate schließen.
 }Im Command dann: 
 SendClientMessage(playerid,farbe,"Tor wird in 9 Sekunden automatisch geschlossen.");
 SetTimer("CloseGate",9000,0);Dürfte so gehen ;D Lange nicht mehr gemacht.  
- 
						
 
		 
		
		
	
