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
-
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
-
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
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
-
Hey,
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 WaffenKann 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.
-