DMA,
stock strmatch(const str1[], const str2[])
return (!strcmp(str1, str2)&&strlen(str1)==strlen(str2));
Ist auch ohne '?(true):(false)' noch schneller
@ BlackFoX ,
üff...Sehr langsam die funktion....
DMA,
stock strmatch(const str1[], const str2[])
return (!strcmp(str1, str2)&&strlen(str1)==strlen(str2));
Ist auch ohne '?(true):(false)' noch schneller
@ BlackFoX ,
üff...Sehr langsam die funktion....
Es gibt bereits ein Codeschnipsel für Animierte Kamerafahrten,Klick
Den Code bischen umschreiben und schon kann man die Kamera Position abfahren lassen.class selection for SA:MP
Die Funktionen funktionieren bestimmt nicht :
GetPlayerPosEx
GetPlayerWorld
GetPlayerEnergie
GetPlayerTeamEx
GetPlayerMoneyScore
GetPlayerInfos
Hab mir die Anderen jetzt nicht genau angeguckt.
Wenn die funktioneren sollen wie du es möchtest,musst du auch angeben dass der Wert an eine Variable übergeben werden soll die du als Parameter in der Funktion angibst.
Dazu brauchst du den '&' Operator im Funktionsheader,hier mal wie GetPlayerPosEx sein müsste.
native GetPlayerPosEx(playerid, &Float:x, &Float:y, &Float:z, &Float:a);
stock GetPlayerPosEx(playerid, &Float:x, &Float:y, &Float:z, &Float:a)
{
GetPlayerPos(playerid, x, y, z);
GetPlayerFacingAngle(playerid, a);
return 1;
}
Du solltest vor dem releasen auch die Funktionen testen :0.
Der Service kostet jetzt was soweit Ich weiss.
Nehm einfach dieses Tool:
[TOOL] AdvancedConverter
Würde nämlich sagen du brauchst gar keine playerid für so etwas.Denn dieser AllRountTimer (es wird mit d geschrieben,AllRound) soll für alle Spieler gleichzeit etwas aufrufen.CustomPickups(),SteamPickups(), etc. sind bestimmt dazu gedacht für jeden Spieler die Pickups zu streamen,nicht für einen bestimmten.
Versuch es mal so.
SetTimer("AllRountTimer",1000,1);
public AllRountTimer() // Wird Alle 1000 Aufgerufen
{
OtherTimer();
// OnPlayerUpdate(playerid); <-- völliger blödsinn
CustomPickups();
StreamPickups();
SyncUppunkt += 1;
FoodTimerpunkt +=1;
if(SyncUppunkt <= 60)
{
//SendClientMessage(playerid, COLOR_YELLOW,"Test SyncUp Geht");
print("Test SynchUp geht");
SyncUp();
SyncUppunkt =0;
}
if(FoodTimerpunkt <= 6)
{
//SendClientMessage(playerid, COLOR_YELLOW," test FoodTimer Geht");
print("Test FoodTimer geht");
FoodTimer();
FoodTimerpunkt = 0;
}
}
if(SyncUppunkt == 60 || SyncUppunkt > 60)
Das kannst du auch anders schreiben.
if(SyncUppunkt <= 60)
Das "else if" kannst du dir auch sparen.Denn es gibt ja den Fall das beide gleichzeit aufgerufen werden sollten.Nämlich jede Minute.
Zitatgarnichts davon... jetz habe ich ne Frage ist das überhaupt möglich ? geht es Leichter ?
Das geht natürlich.Ist auch vom Grundgerüst her richtig wie du es hast.
//Edit: Kannst mal sagen wieso es AllRountdTimer(playerid) ist,mich interessiert wieso du playerid brauchst.
Weiß einer vielleicht wie man alle dini auf einmal ändern/löschen kann?
Alle was ?
OnPLayerCommand Text
{
if(PlayerData[playerid][Level] >= 1) //da musste deine definitions von den Adminlvls einfügen
{
new name[MAX_PLAYER_NAME], s[180],tag,monat,jahr,std,minuten,sek;
GetPlayerName(playerid,name,sizeof(name));
getdate(tag,monat,jahr);
gettime(std,minuten,sek);
format(s,sizeof(s),"%s nutzte %s am %d.%d.%d um %d:%d:%dUhr\r\n",name,cmdtext,tag,monat,jahr,std,minuten,sek);
new File:gla=fopen("admcmds.txt",io_append);
if(gla) {
fwrite(gla,s);
fclose(gla);
}
}
return 1;
}
- string s würd ich größer machen
- gab keinen grund cmdtext[0] zu nehmen,cmdtext ist das Gleiche
- return 1; am ende solltest du weg lassen je nachdem wo du den Code in OnPlayerCommandText einfügt,lass es lieber weg und alles ist ok.
- Abfrage ob admcmds.txt erfolgeich geöffnet wurde kann nicht schaden.
AARRGGHHHH hab ne Zeile vergessen^^ sry
[...]
if(strcmp(cmdtext,"/announce",true,9)==0) {
if(!strlen(cmdtext[10])) return SendClientMessage(playerid,FARBE,"/announce Text");
GameTextForAll(cmdtext[10],5000,6);
return 1;
}
Variable s ist doch wohl unnötig.
Best CMD of teh Year!
kkthxbai do ya th1ng br0
Das Script ist ja ein richtiges Chaos.
Hier hast die gefixxte Version. -> Klick mich
Das Callback von OnPlayerCommandText() war nicht richtig geschlossen weil du an die falsche Stelle dcmd_kick eingefügt hast.
Nebenbei,das OnPlayerUpdate() - Callback ist nicht dazu gedacht großen Code auszuführen.Es wird ~30x pro Sekunden (Wenn man nicht gerade AFK ist) aufgerufen.Das ist totaler blödsinn hier immer wieder die Spielerstatistik zu speichern.Es reicht völlig wenn man alles speichert beim Verlassen des Servers.
Das es dabei zu laggs kommt sollte klar sein.Mit jedem Spieler wird es schlimmer auf deinem Server.
Klugscheißen sollte man nur,wenn man den Fehler auch behebt.Alleine schon vom lesen der Outputs (Fehler) siehst du dass das Problem eine undefinierte Variable ist.Englisch kann manchmal wirklich sehr,sehr schwer sein.
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
Solltet euch das mal merken,dass man immer die Fehlerlog lesen sollte falls es denn Fehler gibt.
Wahrscheinlich daran,dass jemand stirb .
Etwas mehr Infos vielleicht.
Jetzt mal nur vom Threadtitel her würde ich sagen du bist zu blöd
ZitatIch hab im englischen SA-MP Forum gelesen dass jemand ein Timeout System suchte und jemand ihm antwortete dass er mal nach gAdmin suchen solle, da es ein Timeout System enthält...stimmt das?..ich hab bis jetzt noch nichts davon gelesen, vielleicht hab ichs uebersehen
Ist schon richtig was du sagst.Sowas gibt es nicht direkt in gAdmin.
Was du möchtest ist das die Position gespeichert beim verlassen des Servers (Crash) und wenn man wieder joint,startet man an der Stelle wo man vor dem verlassen (crash) war.
ZitatIch hab auch schon versuch selbst was zusammen zu puzzlen das hat aber nie geklappt. War immer erfolglos :(...
Ich krieg zwar keine Warnings/Errors aber es funktioniert trotzdem nicht.
Zeigst mal :0 ?
Vielleicht mach ich später eine compile option rein die automatisch X,Y,Z beim verlassen des Servers speichert.
goldkiller ich glaube du hast iwie das selbe problem wie ich im icq xD
Schlimm sowas.Die meisten landen auch direkt auf Ignore nachdem die dumme Rückfrage kommt,wer ich bloß bin und warum ich denjenigen anschreibe X___0.
Hier wieder ein exemplar von Leuten die man nicht ernst nehmen kann in ICQ.
Schlag euch die Köpfe ein...Wer Lust hat kann auch seine ICQ Gespräche hier posten
ZitatAlles anzeigen
Haggi (15:21):
hi
kannst du samp scripten ich bräuchte einen scripter für einen kleinen auttrag
Haggi (21:22):
Du hast Haggi hinzugefügt
Daniel|Goldkiller (21:23):
mh
kleinen aufträck sagst
was wäre denn das kleines
Haggi (21:36):
???
wer bist du
// Notiz : Ok,wie ich solche Leute hasse.Adden einen und fragen dann doof nach "Wer bist du X___o"?
Daniel|Goldkiller (21:37):
Haggi (15:22):
kannst du samp scripten ich bräuchte einen scripter für einen kleinen auttrag
Daniel|Goldkiller (21:37):
du hast mich geaddet,nicht anders rum
Haggi (21:59):
ASOO
sry
also
kannst du mir ein autohaus scripten
Haggi (22:00):
bin kurz afk
Daniel|Goldkiller (22:03):
was bekomm ich dafür?
Haggi (22:12):
HM::
was willsten
geld bekommste nicht^^
Daniel|Goldkiller (22:12):
// Notiz : Hier wurde mir klar dass das ganze recht lustig werden könnte
wenn das so ist,geld
Haggi (22:15):
HAHA
wie alt bist du
Daniel|Goldkiller (22:15):
werde samstag 13
// Notiz : Eigentlich nicht aber gut
Haggi (22:16):
aha
du weißt wenn du geld willst, dass das strafbar ist?
// Notiz : I lol'd @ this 1
Daniel|Goldkiller (22:17):
wieso sollte sowas strafbar sein
sind dienstleistungen in deutschland verboten?
Haggi (22:17):
weil ich mich da bissel besser auskene
// Notiz : Merkt man bzw Ich.
ne
aber du bist nicht voljährig
+
keine lizensen
+
kein konto recht ohne elterliche zustimmung
// Notiz : Wow,ein Fachmann !
Daniel|Goldkiller (22:18):
Lizensen sind auch gültig sollte man nicht volljährig sein
Haggi (22:18):
+...
ne
aber
ach
vergiss es
Daniel|Goldkiller (22:18):
bist jurist
merk ich schon
Haggi (22:18):
scriptest du jetz
Daniel|Goldkiller (22:18):
nein,sonst wirst du noch strafanzeige erstatten gegen einen nicht volljährigen
// Notiz : Jaja ... Nehmt das ganze bloß nicht zu ernst
Haggi (22:18):
ne
oha
man ich bin 13
ey
hast du ein samp server
Daniel|Goldkiller (22:20):
ich hab keine lizensen für einen server
meine eltern lassen mich keinen haben
Haggi (22:20):
??
aso
ich und ein freund machen einen
wenn du gut scriptest
kannst mit machen
als scriptet
scripter
Daniel|Goldkiller (22:20):
träum weiter
mit dir mach ich keine geschäfte
Haggi (22:20):
Daniel|Goldkiller (22:20):
nachdem du mich so angreifst
// Notiz : ^____^
Haggi (22:20):
das war ein angebot
honk
du bist dan server admin
alda
Daniel|Goldkiller (22:21):
ich fühle mich auch geehrt
Haggi (22:21):
und du bekommst vitl auch eine teamspeak server von uns
Daniel|Goldkiller (22:21):
jetzt kommts
Haggi (22:21):
weil ich teamspeak sponsoring mach
Daniel|Goldkiller (22:21):
wie kannst du einen teamspeak server sponsorn
darfst du überhaupt einen besitzen?
Haggi (22:22):
jop
Daniel|Goldkiller (22:22):
und hast du auch bezahlt für deine rundfunk gebühren?
// Notiz : Huiii,hier wollte ich eigentlich los legen mit sinnlosen + falschen Regeln
Haggi (22:22):
dumm oder so
// Notiz : Jup
???
Daniel|Goldkiller (22:22):
du musst gebühren bezahlen wenn du einen teamspeak hostest
bzw eine lizenz kaufen
Haggi (22:23):
ne
v server
Daniel|Goldkiller (22:23):
das ändert nichts
Haggi (22:23):
darf teamspeak server vergeben
aber
Daniel|Goldkiller (22:23):
ob root oder v server,lizenzen brauch man
Haggi (22:23):
wenn ich so 15 aus geb
is es schlecht weil ich nur 10 darf
naja is nicht so rechtliche
aber wenn ich 15 oder 20 hab dan ist der v server/root überlastet
also bringts nichts so viel
// Notiz : bla bla bla?
Daniel|Goldkiller (22:24):
wenn du das sagst...
Haggi (22:26):
also
ich glaub du kennst dich nicht so gut aus oder
also wenn du mir was scriptestr dan sags
wenn nicht kannste mich löschen
Daniel|Goldkiller (22:28):
kkthxbai
Haggi (22:29):
alter
opfer
Bei dcmd + sscanf kann man noch viel mehr benutzten als nur die zwei (Name , Playerid)
Ich benutzt dcmd + sscanf.Es ist viel besser als die strtok - Variante die leider zu weit verbreitet ist.
Wenn du dir das Tutorial durchließt wirst du sehen das diese Methode besser ist.Hier wäre auch der Code wie man es damit schreiben könnte.
dcmd_givemoney(playerid,params[]){
new
giveid,
cash;
if (sscanf(params, "dd",giveid,cash)) {
return SendClientMessage(playerid,COLOR_SYSTEM,"USAGE: /givemoney [playerid] [Amount]");
}
else if(!IsPlayerConnected(giveid)){
return SendClientMessage(playerid,COLOR_RED2,"Ungültige Spieler ID");
}
else if(playerid==giveid) {
return SendClientMessage(playerid,COLOR_RED,"Du kannst die selber kein Geld schicken!");
}
else if(cash>GetPlayerMoney(playerid) || cash<0){
return SendClientMessage(playerid,COLOR_GREY,"money1");
}
else {
GivePlayerMoney(playerid,-cash);
GivePlayerMoney(giveid,cash);
// Nachricht kannst ja selbst schreiben
}
return 1;
}
Es geht auch viel einfacher + besser + schneller.
>> dcmd + sscanf
dcmd_kick(playerid,params[]) {
new
sGrund[128],
pID;
if(sscanf(params, "dz",pID,sGrund)) {
return SendClientMessage(playerid,COLOR_RED,"USAGE: /kick [playerid] ([grund],optional)");
}
if(!IsPlayerConnected(pID)) {
return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
}
new
ThePlayer[MAX_PLAYER_NAME],
string[128];
GetPlayerName(pID,ThePlayer,sizeof(ThePlayer));
format(string,sizeof(string),"%s (ID %d) wurde vom Server gekickt,Grund: %s",ThePlayer,pID,sGrund[0] ? sGrund : "<Kein Grund>");
SendClientMessageToAll(COLOR_YELLOW,string);
Kick(pID);
return 1;
}