if(strcmp(strget(cmdtext,0),"/gmx",true))//false steht für 0 ; true steht für alles andere
{
new ausgabe[128];
if(admin_eingeloggt[playerid]==1)
{
format(ausgabe,sizeof(ausgabe),"~w~Warnung!~n~~b~Server Neustart~n~~w~Grund: ~b~%s",cmdtext[5]);
GameTextForAll(ausgabe,15000,4);
}
else
{
SendClientMessage(playerid,RED,"Du bist nicht als Admin eingeloggt!");
}
return 1;
}
Müsste so gehen
Beiträge von KeksOfDeath
-
-
Ops, hab da was mit enum verwechselt... hier kommt an das letzte Segment ja kein Komma...
new Float:posdm1[][]={
{3000.9119,198.4665,89.7790},
{2980.2275,211.9329,101.4460}
};
new Float:posdm2[][]={
{464.5287,-2432.4907,10.7714},
{486.6236,-2425.6177,10.7888}
}; -
Ist es zufällig Error nummer 834.6?
Wenn nicht dann scahde, hab auch leider meine Glaskugel verloren
Du musst die Errors schonmal nennen -
Beispiel (Koordinaten sind ausgedacht):
new Float:posdm1[][]={
{485.4547,548.45646,215.687465},
{74.132486,894.2341,14.163},
};
new Float:posdm2[][]={
{564.464,489.56,465.1656},
{456.46,165.489,156.46},
};
Dann hast du halt deine Spawns:
//für DM1:
new a=random(sizeof(posdm1));
SetPlayerPos(playerid,posdm1[a][0],posdm1[a][1],posdm1[a][2]);
//und für DM2:
new a=random(sizeof(posdm2));
SetPlayerPos(playerid,posdm2[a][0],posdm2[a][1],posdm2[a][2]);
Ich hoffe, ich konnte es verständlich genug erklären -
Ist doch bereits so?
Sofern du dcmd definiert und "dcmd(ah,2,cmdtext);" im Callback OnPlayerCommandText stehen hast (und den Befehl von oben außerhalb eines Callbacks stehen hast) müsste es funktionen...
Asonsten tausche "dcmd_ah(playerid,prm[])" mit "if(strcmp(cmdtext,"/ah",true)==0)" aus, dies muss dann aber natürlich in OnPlayerCommandText stehen -
1) Mit "Caps" ist "Capslock" gemeint (anduaernde Großschrift)
2) Dazu benötigst du Checkpoints. Du kannst aber nur jeweils 1 Cechpoint und 1 Racecheckpoint gleichzeitig sichtbar haben -
Zu der Schrift: In OnPlayerRequestClass
//die classid abfragen (es ist eine einfache nummerierung und es wird bei 0 angefangen zu zählen
GameTextForPlayer(playerid,"z.b. groove",5000,5);
...
Zu den Spawns: In OnPlayerSpawn:
//skinid abfragen (GetPlayerSkin)
Beispiel: if(skinid==4) SetPlayerPos(...);
... -
Ich fasse mal zusammen: Du hast ein Problem mit dem Einloggen, jedoch steht in dem gezeigten Code nichts über das Einloggen?
PS: strcmp hat wohl Parameter -
1) Doppelposts verboten
2) Falscher Bereich (moved)
3) Dazu müsste man wissen, wie du die Nutzung der anderen Fahrzeuge verhinderst... Wenn du das über die Autoid machst ist es ganz klar -
Server neu gestartet?
Script compiliert?
Die .amx Datei danach auch in richtigen Ordner gepackt?
Den richtigen GM/FS geladen? -
Dir ist schon klar, dass du uns auch das Login/Register zeigen musst und nicht einfach den Punkt, wo man im Dialog was anklicken kann
Außerdem:
PlayerInfo[playerid][pFSkin] = 0;
PlayerInfo[playerid][pLevel] = 1;
dini_IntSet("/User/%s.ini", "passwort", pKey);//was soll denn die zeile? %s steht hier nicht für den namen... sondern für ein s
SendClientMessage(playerid, COLOR_WHITE, " "); -
Hallo, man kennt es wahrscheinlich... Manche Variablen, die nicht wirklich oft verwendet werden, aber dennoch... Ich sage es mal so: Viele Variablen brauchen
Nehmen wir als Beispiel mal
new abgeschlossen[MAX_VEHICLES];
Das sind 2000 Variablen, die dort benötigt werden, dabei wird in jede nur eine 1 oder eine 0 geschrieben, ist doch ein wenig Verschwendung oder?
new abgeschlossen[67];
Sieht doch schon besser aus, oder?
Dazu dienen 4 Funktionen... bekanntlich ist pawn ja eine 32 Bit Software, damit liegt die Maximale Integerwertgröße bei 2147483647 (und bei -2147483648), warum also den Rest ungebraucht lassen?
Hier sind erstmal du Funktionen, Erklärung und Beispiel steht weiter unten
stock GetMehrfach(var,d) {
new x[30], h[]= { 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912 }, i=29;
for(; i>=0; i--) if(var>=h[i]) { var-=h[i]; x[i]++; }
if(!d) for(i=0; i<30; i++) { if(!x[i]) return i; }
else { for(i=29; i>=0; i--) { if(!x[i]) return i; }}
return -1;
}
stock AddMehrfach(var,a) {
if(a<=29) {
new h[]= { 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912 };
return var+h[a]; }
return var;
}
stock RemoveMehrfach(var,a) {
if(a<=29) {
new h[]= { 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912 };
return var-h[a]; }
return var;
}
stock VonMehrfach(var,a) {
if(a<=29) {
new h[]= { 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912 };
return (var/h[a])%2; }
return -1;
}
Erklärung und Anwendung:Wir fangen mal an mit AddMehrfach(variable,wert);
Man hat jetzt z.B. wieder seine Autos, die man abschließen möchte, dazu haben wir ja unseren Variable "new abgeschlossen[67];"
Wenn man jetzt die Autoid 0 abschließt könnte man es so machen:
abgeschlossen[0]=AddMehrfach(abgeschlossen[0],0);//erklärung folgt später
//für autoid 1 dementsprechend:
abgeschlossen[0]=AddMehrfach(abgeschlossen[0],1);//bis 29
Es wird der Wert der Variable + der wertigkeit der entsprechenden Position zurückgegeben
Sollte es eine inkorrekte Eingabe sein, wird eine unveränderte Varaible zurückgegeben
Dies alles einzelnd zu machen ist ein wenig umständlich, mehr dazu aber späterRemoveMehrfach(variable,wert);
Ist das gleiche wie AddMehrfach, halt nur umgekehrt
Wenn jetzt ein Auto aufgeschlossen wird, wird der Wert einfach wieder abgezogen
abgeschlossen[0]=RemoveMehrfach(abgeschlossen[0],0);//autoid 0
//für autoid 1 dementsprechend:
abgeschlossen[0]=RemoveMehrfach(abgeschlossen[0],1);//bis 29
Sollte es eine inkorrekte Eingabe sein, wird eine unveränderte Varaible zurückgegebenVonMehrfach(variable,position);
Mit dieser Funktion lässt sich überprüfen, ob in einer Variable an n-ter Stelle (0<=n<=29)
Beispiel:
new a=VonMehrfach(abgeschlossen[0],0);//wenn der wert aus position 1 eine 1 ist, wird eine 1 zurückgegeben, sonst eine 0
Was für unser Beispiel jetzt heißt: Ist a eine 1, ist das Auto abgeschlossen
Sollte es eine inkorrekte Eingabe sein, wird eine -1 zurückgegebenDann gibt es noch die Funktion GetMehrfach(variable,kleingroß);
Dies überprüft halt, an welcher Position die erste 0 steht (von vorne oder hinten) und gibt die Position zurück
Wir haben jetzt z.b.:
abgeschlossen[0]=AddMehrfach(abgeschlossen[0],0);//position 0
abgeschlossen[0]=AddMehrfach(abgeschlossen[0],1);//position 1
abgeschlossen[0]=AddMehrfach(abgeschlossen[0],2);//position 2
So wäre ja an Position 3 unsere nächste 0, daher:
new a=GetMehrfach(abgeschlossen[0],0);
Die 0 als zweiter Parameter bestimmt, ob der kleinste oder größte Wert zurückgegeben werden soll, bei einer 0 wird der kleinste Wert zurückgegeben, was in diesem Falle eine 3 wäre, bei etwas anderem als einer 0 der größte, was in diesem Falle die 29 wäre
Bei Inkorrekter Eingabe wird auch hier eine -1 zurückgegebenZur Anwendung:
Dies andauernd mit abgeschlossen[0] und so ist ja sehr umständlich, daher kann mans auch errechnen lassen:
new a=vehicleid/30;
abgeschlossen[a]=AddMehrfach(abgeschlossen[a],vehicleid%30);
Wir haben als Beispiel die vehicleid 199...
199/30=6
199%30=19
Man rechnet zusammen: 6*30+19=199, stimmt alsoNun ein Anwendungsbeispiel beim abschließen von Türen bei Autos:
//ganz nach oben:
new abgeschlossen[67];
//OnPlayerCommandText:
if(strcmp(cmdtext,"/abschließen",true)==0) {
if(IsPlayerInAnyVehicle(playerid)) {
new aid=GetPlayerVehicleID(playerid), a=aid/30, b=aid%30;
if(!VonMehrfach(abgeschlossen[a],b)) {
abgeschlossen[a]=AddMehrfach(abgeschlossen[a],b);
//jetzt ist es halt abgeschlossen
}}
return 1;
}
if(strcmp(cmdtext,"/aufschließen",true)==0) {
if(IsPlayerInAnyVehicle(playerid)) {
new aid=GetPlayerVehicleID(playerid), a=aid/30, b=aid%30;
if(VonMehrfach(abgeschlossen[a],b)==1) {
abgeschlossen[a]=RemoveMehrfach(abgeschlossen[a],b);
//jetzt ist es halt aufgeschlossen
}}
return 1;
}
//OnPlayerEnterVehicle:
if(VonMehrfach(abgeschlossen[vehicleid/30],vehicleid%30)==1) {
SendClientMessage(playerid,FARBE,"Die Türen dieses Fahrzeuges sind abgeschlossen");
TogglePlayerControllable(playerid,0);
TogglePlayerControllable(playerid,1);
return 0;
}Ich weiß genau, dass ich hier jetzt noch was schreiben wollte, habs aber im Laufe der Zeit vergessen^^
Editier ich, wenns mir wieder einfällt... soferns mir wieder einfällt^^ -
Ich finds schonmal sehr gut, dass du die Information geliefert hast, wie das Adminlevel bei dir deklariert ist, leider fehlt noch die Information, wie du Parameter ausliest^^
Daher tippe ich einfach mal im Dunkel, mit Glück passts ja...
dcmd_auto(playerid,params[]) {
if(IsInAdmin[playerid]>=2) {
if(!params[0]) return SendClientMessage(plyerid,FARBE,"/auto ID");
new mid=strval(params);
if(mid>=400 && mid<=612) {
new Float:x, Float:y, Float:z, Float:za, i;
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,za);
i=CreateVehicle(mid,x,y,z,za,-1,-1,respawnzeit in millisekunden);
LinkVehicleToInterior(i,GetPlayerInterior(playerid)); }
else { /*falsche autoid*/ }}
else {/*Adminlevel nicht hoch genug*/ }
return 1;
}
Natürlich nicht das "dcmd(auto,4,cmdtext);" in OnPlayerCommandText vergessen, diesen Befehl in keinen Callback einfügen -
In OnGameModeInit gibt es doch gar kein playerid als Parameter?
OnGameModeInit wird auch nur aufgerufen (wie es auch der Name sagt), wenn der GameMode geladen (initialisiert) wird
Wenn Checkpoints sind, würd ich eher OnPlayerEnterCheckpoint verwendenPS: Man kann aber nur einen Checkpoint zurzeit anzeigen lassen
-
Du kannst ihn einfach spawnen lassen
SpawnPlayer(playerid); -
new s[100]="hallo bob hi";
for(new i, j=strlen(s); i<j; i++) {
if(strfind(s[i],"bob",true)==0) {
//an der position "i" steht das "b" von "bob"
PS: Doppelthreads sind verboten -
Indem du die forwards in dein Script einfügst, das von OnFIlterScriptInit fügst du in OnGameModeInit ein (sofern deins ein Gamemode ist)
Das von OnPlayerCommandText kommt in OnPlayerCommandText. Closegate111 und PlayerToPoint kommen ganz nach unten, sofern es nicht schon vorhanden ist -
Sie wollen 3 gelbe Bananen?
Es tut mir echt leid, aber ich versteh nicht, was du mit deiner Frage meinst -
Du erstellst nen Pickup, wie das geht weißt du, oder?
Dann gibt es einen public namens "OnPlayerPickUpPickup"
Dort wird als Parameter auch die Pickupid übergeben, die fragt man ab...
Beispiel:
AddStaticPickup(...);
if(pickupid==0) {//je nach dem, welche Pickupid es ist, es wird bei 0 angefangen zu zählen (oder due deklarierst es) -
Das hilft dir vllt