Also,
Ich möchte gerne, dass ein Admin mit einem Befehl alle Cars respawnen kann.
Mein Code funktioniert aber nicht, kann jemand helfen?
Beiträge von KTP
-
-
Die Car ID 100 gibt es nicht!
Man muss schon welche nehmen, die es gibt:
http://wiki.sa-mp.com/wiki/Vehicle_Model_ID_List -
Nochmal Edit.
Ich habe ein Filterscript dafür gefunden http://forum.sa-mp.com/showthread.php?t=127354 -
Im SAMP Wiki:http://wiki.sa-mp.com/wiki/PlayerSpectatePlayer gibt es sowas, aber als ich es versuchte einzubauen klappte es nicht. Sprich der Spieler schaute irgendwo hin.
-
Danke ich schau kurz nach und melde mich dann wieder.
-
Hallo,
Wie die Überschrift schon sagt suche ich derzeit nach einem /tv Script für Admins.
Könnte mir da vielleicht jemand aushelfen?
Wäre nett.PS: Wen es der falsche Bereich ist sagt es mir bitte,dann verschieb ich es.
-
Hallo,
In diesem Tutorial werde ich euch zeigen wie ihr ganz einfach mit einem Befehl
ein Auto in eure nähe spawnt.
Der fertige Befehl wird am ende so aussehen: /v [VehicleID]Was brauchen wir?
Wir benötigen für diesen Befehl einmal sscanf und denInclude ocmd.
Diese findet ihr hier:
[ SCRIPTING ] Game Text Script für AdminsSo nach den Vorbereitungen geht es nun endlich los.
Ihr fügt einach irgendwo im Script (nicht in einem Plublic,Stock,ect.) diesen Blanko Code ein:Nun setzen wir den Namen des Befehls fest.
Ändert einfach den Text da wo momentan noch NameDesBefehls steht in ein einfaches
kleines v.Nun kommen ein paar Definitionen in Form eines News:
Dies definiert einfach die Vehicle ID.
Nun kommt noch:Damit können wir nachher die Position des Spielers dem Server geben.
Float:X,Y,Z heißt einfach Position X,Y,Z.
Float:ZA heißt in welche Richtung der Spieler blickt.Nun benötigen wir unser sscanf.
Fügt diesen Code unter die News ein:Wir sehen anders als im letzten Tutorial mit den Game Texten steht hier nun ein i in den ".
Das i steht für eine Zahl, die eingegeben wird (i=Integer auf deutsch einfach Zahl).
Das Vehicleid dahinter sagt dem Script für was das i bzw. die Zahl, die der Spieler später im Spiel eingibt
steht.Um nun die Position und die Blickrichtung des Spielers zu bekommen, um dann nacher das Auto nicht
an einem Punkt, sondern am Punkt des Spielers zu spawnen, geben wir dem Script
die X,Y,Z und ZA Koordinate.Damit währe schon die X,Y und Z Koordinate geklär, aber es fehlt immernoch die ZA Koordinate.
Diese stellen wir so fest:Die Blickrichtung des Spielers braucht gleich das CreateVehicle als Parameter, darum müssen wir sie auch fassen.
Nun kommt der letzte Schritt.
Wir spawnen das Auto an der Stelle des Spielers.
Dies ist eigentlich ganz einfach, wir geben im Script ein:CodeDer Code besagt einfach: Erstelle ein Vehicel, das der Spieler aussuchte, das an der Position des Spielers gespawnt werden soll, das in die Richtung des Spielers stehen soll, dessen zwei Farben Farb ID 1 und 1 sind, dessen Respawnzeit -1 beträgt.
Die Farbe und die Respawnzeit kann man natürlich noch ändern.
Will man jetzt noch, dass der Spieler direkt in das Auto reingesetzt wird,schreibt man noch das:Die 0 am Ende ist der Autositz.
0 ist Fahrer, 1ist Beifahrer und 3 und 4 sind Plätze hinten.So das wars wieder von mir.
Ich hoffe ich konnte euch eingige Funktionen etwas näher bringen, besonders den Anfängern.//Edit Korrektur
-
Wie gesagt möchte ich hier nur den leichten weg nehmen.
Der Command klappt problemlos. -
Hallo und Guten Tag,
Ich möchte ihnen nun mit Hilfe eines Tutorials alles erklären, was man für einen Game Text dessen Inhalt man selbst bestimmen kann, braucht und wie man es aufbaut.
Ich habe mich entschlossen diesen Befehl nicht wie üblich mit cmdtext zu machen sondern mit ocmd.
Ocmd ist ein Include bzw. man muss ein Include besitzen um ocmd nutzen zu können. Der download dieses Includes befindet sich hier: [Include] OCMDWas brauchen wir noch?
Als nächstes brauchen wir den sscanf stock. Dieser befindet sicher hier drunter. Einfach unten im Script einfügen und fertig.
Code
Alles anzeigenstock sscanf(sstring[], format[], {Float,_}:...) { #if defined isnull if (isnull(sstring)) #else if (sstring[0] == 0 || (sstring[0] == 1 && sstring[1] == 0)) #endif { return format[0]; } #pragma tabsize 4 new formatPos = 0, sstringPos = 0, paramPos = 2, paramCount = numargs(), delim = ' '; while (sstring[sstringPos] && sstring[sstringPos] <= ' ') { sstringPos++; } while (paramPos < paramCount && sstring[sstringPos]) { switch (format[formatPos++]) { case '\0': { return 0; } case 'i', 'd': { new neg = 1, num = 0, ch = sstring[sstringPos]; if (ch == '-') { neg = -1; ch = sstring[++sstringPos]; } do { sstringPos++; if ('0' <= ch <= '9') { num = (num * 10) + (ch - '0'); } else { return -1; } } while ((ch = sstring[sstringPos]) > ' ' && ch != delim); setarg(paramPos, 0, num * neg); } case 'h', 'x': { new num = 0, ch = sstring[sstringPos]; do { sstringPos++; switch (ch) { case 'x', 'X': { num = 0; continue; } case '0' .. '9': { num = (num << 4) | (ch - '0'); } case 'a' .. 'f': { num = (num << 4) | (ch - ('a' - 10)); } case 'A' .. 'F': { num = (num << 4) | (ch - ('A' - 10)); } default: { return -1; } } } while ((ch = sstring[sstringPos]) > ' ' && ch != delim); setarg(paramPos, 0, num); } case 'c': { setarg(paramPos, 0, sstring[sstringPos++]); } case 'f': { new changestr[16], changepos = 0, strpos = sstringPos; while(changepos < 16 && sstring[strpos] && sstring[strpos] != delim) { changestr[changepos++] = sstring[strpos++]; } changestr[changepos] = '\0'; setarg(paramPos,0,_:floatstr(changestr)); } case 'p': { delim = format[formatPos++]; continue; } case '\'': { new end = formatPos - 1, ch; while ((ch = format[++end]) && ch != '\'') {} if (!ch) { return -1; } format[end] = '\0'; if ((ch = strfind(sstring, format[formatPos], false, sstringPos)) == -1) { if (format[end + 1]) { return -1; } return 0; } format[end] = '\''; sstringPos = ch + (end - formatPos); formatPos = end + 1; } case 'u': { new end = sstringPos - 1, id = 0, bool:num = true, ch; while ((ch = sstring[++end]) && ch != delim) { if (num) { if ('0' <= ch <= '9') { id = (id * 10) + (ch - '0'); } else { num = false; } } } if (num && IsPlayerConnected(id)) { setarg(paramPos, 0, id); } else { #if !defined foreach #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2)) #define __SSCANF_FOREACH__ #endif sstring[end] = '\0'; num = false; new name[MAX_PLAYER_NAME]; id = end - sstringPos; foreach (Player, playerid) { GetPlayerName(playerid, name, sizeof (name)); if (!strcmp(name, sstring[sstringPos], true, id)) { setarg(paramPos, 0, playerid); num = true; break; } } if (!num) { setarg(paramPos, 0, INVALID_PLAYER_ID); } sstring[end] = ch; #if defined __SSCANF_FOREACH__ #undef foreach #undef __SSCANF_FOREACH__ #endif } sstringPos = end; } case 's', 'z': { new i = 0, ch; if (format[formatPos]) { while ((ch = sstring[sstringPos++]) && ch != delim) { setarg(paramPos, i++, ch); } if (!i) { return -1; } } else { while ((ch = sstring[sstringPos++])) { setarg(paramPos, i++, ch); } } sstringPos--; setarg(paramPos, i, '\0'); } default: { continue; } } while (sstring[sstringPos] && sstring[sstringPos] != delim && sstring[sstringPos] > ' ') { sstringPos++; } while (sstring[sstringPos] && (sstring[sstringPos] == delim || sstring[sstringPos] <= ' ')) { sstringPos++; } paramPos++; } do { if ((delim = format[formatPos++]) > ' ') { if (delim == '\'') { while ((delim = format[formatPos++]) && delim != '\'') {} } else if (delim != 'z') { return delim; } } } while (delim > ' '); return 0; }
Das letzte was wir brauchen wäre dann noch der stock SpielerName. Den auch unten ins Script einfügen:
Codestock SpielerName(playerid) { new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name)); return name; }
So das waren die Vorbereitungen, nun kommt der eigentliche Teil:
Ähnlich wie ein cmdtext wird auch ein ocmd erstellt.
Der reine ocmd sieht so aus:Anders als bei cmdtext muss man den Namen des Befehls nicht mit / angeben sondern man muss nur den Namen angeben:
Statt:
Wir nennen den Befehl nun: gt für GameText.
Das erste was wir machen müssen/sollten ist den Befehl nur einem Admin bzw. in diesem Fall einen Rcon Admin zu erlauben.
Darum fügen wir in die Klammern über return 1; dies ein:Wenn das kein Script sondern eine normale Sprache wäre, hieße dies in deutsch:
Ist der Spieler kein Admin, dann sende ihm die Nachricht"..."!
Weiter gehts.
Nun kommt eine Definition in Form eines new:Dies bedeutet einfach (meines wissens nach), dass string und reason maximal 128 Zeichen in Form von Buchstaben, Zahlen, ect. haben dürfen.
Nun kommt unser eben eingeügtes sscanf zum Einsatz:
Dies ist etwas komplexer.
Das "s" was wir dort sehen steht für den Text, den der Spieler eingibt. Ich werde demnächst ein weiteres Tutorial dazu machen und den Link dann hier drunter stellen.Nun kommen wir doch zum nächsten Schritt.
Nun legen wir fest, was letztendlich alles angezeigt werden soll.Der Text, der in den Klammern steht ist der Text der letztendlich angezeigt wird.
Wir können ihn beliebig ändern. Das %s, dass im moment dort steht lässt den angegebenen Text des Spielers hinter /gt
anzeigen.
Nach den " sehen wir ein reason, diesed benutze ich dafür.
Wahrscheinlich gibt es mehr Methoden. reason heißt jetzt einfach, dass in die erste %s Stelle der Text des Spielers kommt.
Möchte ich angeben wer den Text geschriebn hat kann ich hinzufügen:Zusammengefasst zeigt die erste Stelle hinter den " das erste %s an, das zweite die zweite usw.
Kommen wir zum letzten Schritt.
Bis jetzt weiß das Script alles nötige, aber es wird noch nichts angezeigt.
Der einfache Mann denkt jetzt:
"Ok ganz einfach! Ich mache einfach
"
Und schon steht ein Problem fest:
Wir wissen nicht wie wir den eben verfassten Text in die Klammern bekommen.
Das ist eigentlich ganz einfach.Das string an der Stelle des Textes bedeutet, dass das Script den Text aus dem string nimmt.
So das wars.
Ich hoffe ich konnte euch ein paar Dinge näher bringen.//Edit Korrektur
-
Hört sich gut an Mike, Fraps ist eigentlich nur für Gamer Pcs gedacht.
Darum würde ich Fraps nicht empfehlen, weil ich auch immer arge Probleme mit dem Aufnahmeprogramm habe -
Als hätten die nichts besseres zu tun als in SA:MP nach nem Server zu suchen, der ihren Namen geklaut hat
-
Versuch es doch erstmal mit IsPlayerInRangeOfPoint.
-
Geh gar nicht auf ihn ein und lösche am besten seine Nachrichten. Dann hört er von allein auf.
-
Hallo,
Ich habe ein Problem und zwar: Der Adminlevel des Spielers wird wenn er offline geht nicht gespeichert.
Hier der Code:Codestock SpielerSpeicher { dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel")); }
Nicht wundern wenn bei dem Code etwas fehlt, es geht ja nur um dini_IntSet Adminlevel.
Unter OnPlayerDisconnect steht:Das Geld und der Level wird abgespeichert, was ist das Problem?
Jedes mal wenn ich mich dann wieder zum Admin machen will muss ich mich dann per rCon Admin einloggen.
Bitte um Hilfe. -
Hallo, ich bin es nochmal:
Und zwar gibt Pawno mir keinen Error/Warn, aber weder Waffe noch Munition werden im Spielerspeicher gespeichert und erst gar nicht im Spiel wieder gegeben.
Was muss ich noch änderen? -
Ok vielen Dank für die gute Erklärung
-
@.syN was bist du eigentlich so geldgeil? Das ist nichts großes GTA zu downloaden...
Dafür hast du normal kein Geld verdient. -
Ok, und wie mach ich das genau mit der Munition?
Ich habe schon ein paar Dinge ausprobiert, aber nichts hat geklappt. -
Hallo,
ich habe ein Problem, undzwar möchte ich wenn der Spieler off geht, dass seine Waffen gespeichert werden.Im Script kommt aber immerCodeJ:\Server\gamemodes\Visual.pwn(1052) : warning 202: number of arguments does not match definition Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase 1 Warning.
Wo ist das Problem?
Hier ist der Code: -
alles falsch, das kann ja nit sein