du solltest hier genauer nachlesen wie man strings ladet u.s.w ....
[ SCRIPTING ] Dateiensystem dini - Dateien erstellen, löschen, speichern, laden
du solltest hier genauer nachlesen wie man strings ladet u.s.w ....
[ SCRIPTING ] Dateiensystem dini - Dateien erstellen, löschen, speichern, laden
ehm das letzte ist umständlich es geht auch so
statt dem
return 0;
einfach ein
return SendClientMessage(playerid,COLOR_RED,"[ACHTUNG]Unbekannter Befehl-/hilfe");
zeig mal wie du die sachen aus der datei rausliest ... oder mach einfach zu test einen debug befehl z.B:
dcmd_debug(playerid,params[])
{
new string[128];
format(string,sizeof(string),"Wohnort:%s Alter:%d",pInfo[playerid][pWohnort],Alter);
SendClientMessage(playerid,COLOR,string);
return 1;
}
wenn da nix kommt dann weißt du dass ein fehler beim rauslesen(aus der datei in die variable) ist ...
hmm werde wenn ihr wollt ein paar mysql sachen abliefern die ihr dann unter euren Projekt veröffentlichen könnt aber tolle Sache , die Potenzial hat
Hallo leute in diesem Tutorial will ich euch den Timestamp vorstellen , vor allem Beispiele wie man ihn sinnvoll in einem Gamemode benutzen kann.
Zuerst mal was ist ein Timestamp(Zeitstempel) ?
Ein Timestamp zu deutsch Zeitstempel genannt ist nichts anderes als ein Datum das was in einem bestimmten Format angegeben wird .
Ja ok ein datum ? Super oder ... natürlich muss auch gesagt werden welches Datum ? Es wird bei bestimmten Ereignissen benutzt ein gutes Beispiel ist z.B: ein Textdokument auf euren PC
hier habt ihr einen Zeitstempel wann das Dokument das letzte mal Bearbeitet worden ist , oder wann es erstellt worden ist u.s.w ....
Ich hoffe ihr versteht was ich meine
Viele fragen euch sicher was euch so ein Timestamp hilft ... doch ich werde euch hier von einem bestimmten Timestamp erzählen
Das ist der Unix-Timestamp(Unixzeit) , dieser Timestamp kennzeichnet den tag 1970 1.Januar 00:00 Uhr er wird in Sekunden angeben .
Ihr fragt euch sicher wie das gemeint ist , ganz einfach es sind die Sekunden von 1970 bis jetzt .
Wie kann man den Unix-Timestamp sinvoll in einem Gamemode nutzen ?
Zuerst ein mal hier ein gutes Beispiel .
Der Spieler X darf einmal pro "echte" stunde den befehl /selbstmord eingeben . Manche würden hierzu ein Timer nehmen .
Aber wenn der Server off geht dann ist ende im gelände und der timer ist weg. Also können wir hier gemütlich den Timestamp nutzen
Hier das beispiel:
Zuerst brauchen wir mal ne timestamp funktion , wir nutzen wie gesagt die Unix Timestamp funktion .Jetzt fragen sich viele warum,
ganz einfach weil diese sehr verbreitet ist und z.B: auch in php seinen einsatz findet(wenn ihr z.B ein gamemode mit euren ucp verwendet wollt und dem spieler anzeigen lassen wollt wann er das nächste mal /selbstmord benutzen kann)
Hier die funktion (credits an mabako)
stock mktime(hour,minute,second,day,month,year)
{
new timestamp2;
timestamp2 = second + (minute * 60) + (hour * 3600);
new days_of_month[12];
if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) {
days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31}; // Schaltjahr
} else {
days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31}; // keins
}
new days_this_year = 0;
days_this_year = day;
if(month > 1) { // No January Calculation, because its always the 0 past months
for(new i=0; i<month-1;i++) {
days_this_year += days_of_month[i];
}
}
timestamp2 += days_this_year * 86400;
for(new j=1970;j<year;j++) {
timestamp2 += 31536000;
if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp2 += 86400; // Schaltjahr + 1 Tag
}
return timestamp2;
}
stock Now()
{
new hour,minute,second,year,month,day;
gettime(hour, minute, second);
getdate(year, month, day);
return mktime(hour,minute,second,day,month,year);
}
also bekommen wir mit Now() den aktuellen Unix-Zeitstempel
so jetzt brauchen wir ne Variable für den Spieler , das machen wir ganz oben
mit new NextKill[MAX_PLAYERS];
so und für den befehl nutze ich mal ocmd(danke kleiner_opa )
ocmd:selbstmord(playerid,params[])
{
if(Now()<NextKill[playerid]) return SendClientMessage(playerid,COLOR,"Sie können nur alle 60Minuten /selbstmord machen!");//jetzt überprüfen wir ob NextKill größer als der der Aktuelle Zeitstempel ist , wenn ja sind die 60 minuten noch nicht um
NextKill[playerid]=Now()+3600;//Hier zählen wir die 60Minuten dazu (in Sekunden natürlich)
SetPlayerHealth(playerid,0);
SendClientMessage(playerid,COLOR,"Du hast selbstmord begangen!");
return 1;
}
Jetzt müsst ihr natürlich den NextKill wert irgendwo speichern , damit er noch vorhanden ist wenn der Spieler Off geht
so das war ein beispiel von vielen !
Man kann es auch z.B; bei einem Taxi fahrer machen wo man die "Abrechnung" in sekunden macht , oder bei einem WaffenTransport der nur einmal pro tag gehen soll u.s.w
Der Vorteil ist ein Timestamp verbraucht keine Ressourcen ,man braucht dazu nur eine Variable im Gegensatz zu einem Timer der sehr viel Ressourcen braucht.
Ich hoffe , dass ich euch hier den Timestamp gut erklärt habe und ihr ihn öfters nutzen werdet , ich bedanke mich auch bei php_exec der mir den Timestamp so gut und ausführlich gezeigt hat.
wenn du später dann mit sscanf mehr machen willst dann empfehle ich das plugin (im englischen forum suchen ) ist auch von der Performance her gut
sind nur 20 sek zum umschreiben (wenn nicht weniger) in DCMD
ocmd:invite(playerid,params[])
{
new pID;
if(sscanf(params,"u",pID)) return SendClientMessage(playerid,COLOR,"Benutzung invite [PLAYER] ");
if(Spieler[playerid][Leader]==0) return SendClientMessage(playerid,COLOR,"Sie sind kein Leader");
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR,"Spieler nicht online");
Spieler[pID][Fraktion]=Spieler[playerid][Fraktion];
return 1;
}
btw: mehr infos das nächste mal ....über deine variablen
static gleader kann weg .....weil du es schon im enum hast
da du nicht geschrieben hast ob du dcmd oder etwas anderes benutzt mache ich es mal in ocmd...
ocmd:makeleader(playerid,params[])
{
new pID,fID;
if(sscanf(params,"ud",pID,fID)) return SendClientMessage(playerid,COLOR,"Benutzung: makeleader [ID] [FraktionsID]");
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR,"Spieler nicht online!");
Spielerinfo[pID][Leader]=fID;
return 1;
}
und ich hab keine Ahnung was du mit dem speichern meinst ...
Zitatversuche es mal umzunnene (kleinschrift)
du bist glaub ich mehr auf koks , wenn du die 2 warnings weg haben willst hast du 2 Möglichkeiten
1. Irgendwo benutzen
2. #undef [VARIABLE]
edit:verbessert
if(strcmp(strget(cmdtext,0), "/port", true) ==0)
{
if(!strlen(strget(cmdtext,1))) return SendClientMessage(playerid, FARBE_WEISS, "Benutze: /port [ort]");
new i;
for(;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
new txt[256];
txt = strval(strget(cmdtext,1));
if(strcmp(txt,"pns",true)==0)
{
SetPlayerPos(i, 1025.2003,-1032.2845,31.9213);
}
}
}
return 1;
}
edit:als pwn code makiert
oder du machst das man mit enter drücken ,wenn man im pickup ist die "Funktion" die das pickup hat ausgeführt wird
da du keine weiteren angaben gemacht hast , mache ich es mal mit ocmd+sscanf und du hast auch nicht die Sufu benutzt
ocmd:setteam(playerid,params[])
{
new pID,fID;
if(sscanf(params,"ud",pID,fID)) return SendClientMessage(playerid,COLOR,"Benutzung: /setteam [ID] [FraktionsID]");
Team[pID]=fID;//sorry übersehen ^^
return 1;
}
edit1: verbessert
edit2: nochmal verbessert
Es gibt eine Sufu funktion und doppelposts werden mit einer Verwarnung bestraft !
sorry aber das ist lächerlich , so ein Tutorial zu machen , das ist eher ein codeschnipsel oder sonstwas
Zitatstrcmp(cmd = hier sagen wird das es ein command gibt
epic fail ... wenn du es schon erklärst dann auch richtig , strcmp vergleicht 2 Strings also kommt deine Erklärung gar nicht hin
ZitatAlles anzeigenErklärung:
return 1 = wir wiederhohlen es 1 mal.
; = hier ist der Befehl vorbei
} = wir beenden diesen Befehl
omg , ich kann da auch return 2 eingeben oder 5 ... er wiederholt es nicht 1 mal sondern er gibt 1 zurück und das macht man nicht um ein Befehl zu "beenden" sondern bei commands macht man das ,damit er "Unkown Command" nicht ausgibt sonst hat es hier keine größere Bedeutung .
Bitte lern zuerst selber die Basics bevor du ein Tutorial schreibst , wo du neue Spieler nur mehr verwirrst .....
edit:verbessert
edit2: verbesser
zuerst muss SetSpawnInfo gemacht werden(bevor SpawnPlayer) und für was einen Timer? Sinnloser geht es echt nicht mehr ...
wurde gefixxt
tor1 = CreateObject(Object id,2720.501953125 , -2409.619140625, 12.560000419617, 0, 0,90 );
für Object ID muss die ID des Objektes einfügen was du erstellen willst , ist ja logisch -.-