Kaliber: Hab die AudioHide testweise rausgenommen, das Problem bleibt.
Auch mal alle Filterscripts unloaded? ![]()
Kaliber: Hab die AudioHide testweise rausgenommen, das Problem bleibt.
Auch mal alle Filterscripts unloaded? ![]()
wen es als gm genutzt wird muss immer ein return 1; am ende des public sohnst hat man auch fails und für mich sah es so aus als ob er an ende des public kein return 1; hat teste es ma an onplayerupdate dan wirst du sehen was für fails es geben kann brauchst ein 2ten user!
Bitte ließ dir das nochmal genau alles durch, mit den Callbacks und was diese Werte zu bedeuten haben, das ist nicht in jedem Callback gleich! ![]()
mfg. ![]()
Ist ein GM, includes sind eigentlich nur die Standardsachen: mysql, md5, sscanf2, AudioHideV2 und streamer. Keines, bei dem mir das Problem früher mal aufgefallen wäre.
Ich weiß zumindest, dass AudioHideV2 den Callback hookt...einfach mal zum testen, nehme das Include mal raus und probiere es ![]()
mfg. ![]()
format(string, sizeof(string), "%s", text);
SendClientMessageToAll(-1, string);
return 0;
sollte funktionieren (ungetestet)
Ist ja irgendwie das selbe...
kein return 0; ...
return 1; !
Das ist hier egal...da der Callback ja anscheinend eh nicht aufgerufen wird ![]()
Nun, vielleicht wird durch ein Include, der Callback gehookt bzw falsch gehookt sodass er im Rest-Script nicht mehr verwendet werden kann.
Oder Kp...reden wir hier überhaupt von einem GM oder einem FS?
mfg. ![]()
Wenn ich nicht ganz dumm bin, kommt am Ende davon ein ;
Auch und weil man sizeof nicht bei 2 Dimensionalen Arrays verwendet ![]()
Sprich, du musst es so schreiben:
format(SpielerInfo[playerid][pAlter],11,inputtext);
mfg. ![]()
Das sind beides nur Makros:
MAX_PLAYER_NAME = 24
MAX_PLAYERS = 500
und die ID ist playerid ![]()
mfg. ![]()
Bei mir auch... ![]()
Eine Frage noch, kann man in einem TextDraw einen String verwenden?
Natürlich ![]()
Schau dir diese Funktion an: TextDrawSetString
mfg. ![]()
Du musst die Variable so deklarieren:
new Text:Textdraw0;
mfg. ![]()
Du kannst dich an den hier wenden:
http://forum.sa-mp.com/member.php?u=3
Ob er auf dich reagieren wird, ist die andere Sache ![]()
PS: Wenn dann auf englisch schreiben ![]()
mfg. ![]()
Idiot! :DDDDDDDDD
Du musst das TextDraw erst erstellen, dann anzeigen lassen ![]()
Andersrum funktioniert das nicht, hahahahahaha ![]()
Da steht trotzdem nichts. Hat das was damit zu tun, dass ich den gesamten Block unter OnPlayerConnect habe? Sorry aber ich bin noch recht neu was Textdrwas angeht. Ich lerne nocht.
Nun, du musst dem Spieler das TextDraw dann auch anzeigen lassen...mit TextDrawShowForPlayer ![]()
Das musst du so machen:
new Name[MAX_PLAYER_NAME];
GetPlayerName(playerid,Name,MAX_PLAYER_NAME);
Textdraw17 = TextDrawCreate(266.666625, 273.362884, Name);
TextDrawLetterSize(Textdraw17, 0.449999, 1.600000);
TextDrawAlignment(Textdraw17, 1);
TextDrawColor(Textdraw17, -1);
TextDrawSetShadow(Textdraw17, 0);
TextDrawSetOutline(Textdraw17, 1);
TextDrawBackgroundColor(Textdraw17, 51);
TextDrawFont(Textdraw17, 1);
TextDrawSetProportional(Textdraw17, 1);
mfg. ![]()
Schreib deinen Befehl mal so:
ocmd:admins(playerid,params[]) {
if(!GetPVarInt(playerid,"LogIn"))return SendClientMessage(playerid,ROT,"Logge dich bitte zuerst ein.");
new string[128],adminrang[50];
for(new i,l=GetMaxPlayers(); i!=l; i++) {
if(!IsPlayerConnected(i) || !GetPVarInt(i,"Adminlevel"))continue;
switch(GetPVarInt(i,"Adminlevel")) {
case 1: adminrang = "{00F73}Supporter";
case 2: adminrang = "Moderator";
case 3: adminrang = "Super Moderator";
case 4: adminrang = "Admin";
case 5: adminrang = "{FE2E2E}Fulladmin";
}
format(string,sizeof(string),"%s %s",adminrang,SpielerName(i));
SendClientMessage(playerid,WEIß,string);
}
return 1;
}
mfg. ![]()
//Edit: so...jetzt^^
Einen gemoddeten oder einen, den es in SAMP schon so gibt? ![]()
Naja...ich habe da auch nochmal was:
stock format_money(string[], geld, charakter[]) {
if(geld <= 0) return 0;
valstr(string,geld);
for(new i=strlen(string)-3; i>=0; i-=3) strins(string,charakter,i,strlen(string)+11);
if(strcmp(string[0],charakter,true) == 7) strdel(string,0,1);
return 1;
}
Durch diese Funktion, kann man geld in einen String mit einen Zeichen seiner Wahl umwandeln, sprich so:
new string[32],geld=1000500;
format_money(string,geld,"."); //Wenn man hier anstatt dem . ein , macht, steht es auch so im string
printf("%s",string);
//->Gibt aus: 1.000.500
//Edit: War doch noch ein fehler..
//Edit²: Okay..jetzt gehts ![]()
//edit³:
Okay, ich habe mal wieder etwas lustiges.
Mir ist aufgefallen, das die Split Funktion (von wem auch immer) total langsam ist, also ich rede von dieser:
stock split(const strsrc[], strdest[][], delimiter)
{
new i, li, aNum, len;
while(i <= strlen(strsrc))
{
if(strsrc[i] == delimiter || i == strlen(strsrc))
{
len = strmid(strdest[aNum], strsrc, li, i, 128);
strdest[aNum][len] = 0;
li = i+1;
aNum++;
}
i++;
}
return 1;
}
Aus diesem Grund, habe ich die mal verbessert, schaut so aus:
stock f_split(const src[], dest[][], delimiter[]) {
new pos = strfind(src,delimiter),n_pos,num,bool:end;
for(;;) {
if(!num) strmid(dest[num], src, 0, pos, 128),num++;
else strmid(dest[num], src, n_pos+1, pos, 128),num++;
n_pos = strfind(src,delimiter,false,pos+1);
if(n_pos == -1) n_pos = strlen(src),end=true;
strmid(dest[num], src, pos+1, n_pos, 128),num++;
pos = strfind(src,delimiter,false,n_pos+1);
if(end) break;
}
return 1;
}
Hier ein paar Speedtests:
//Edit 4:
Also...mir ist wieder langweilig und ich habe mir überlegt...welche Funktionen schlecht sind und ich verbessern könnte.
Also und ich bin auf strtok gestoßen, diese Funktion ist sehr sehr langsam, aus diesen Grund, habe ich die Funktion mal sehr verbessert:
Alter Code:
stock strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
Mein Code:
stock _strtok(const string[], &index) {
new pos = strfind(string, " ", false, index+1),buffer[128];
if(pos == -1) pos = strlen(string);
strmid(buffer,string,index,pos,128),index = pos;
return buffer;
}
Also, damit ihr einen Vergleich habt, wie viel schneller meine Funktion ist, habe ich wieder ein paar Speedtests gemacht:
Viel Spaß eure Funktionen zu verschnellern.
mfg. ![]()
Dein Ernst? ![]()
Du hast Teile aus deinem Filterscript kopiert und hier eingefügt.
Und meine Vorschläge für das Filterscript wieder nicht beachtet.
Nun...ahja...okay ![]()
In deinem enum muss VehHealth einen Float Tag haben, sprich du musst es so in dein enum schreiben:
Float:VehHealth,
mfg. ![]()
Schreibe das unten in dein Script (habe ich selbst geschrieben...könnte sein, das es so gemeint ist):
stock substr(string[],p1,p2) {
new buffer[128];
strmid(buffer,string,p1,p2,128);
return buffer;
}
mfg. ![]()
Wozu gibt es eigentlich den Fehlerklärbär
gib da den Warning ein und du erhälst:
Variable bereits vorhanden
Die Variable wird bereits verwendet, eine einfache Umnennung der Definition einer der Variable und die dazugehörigen Anpassungen sollten das Problem lösen.
mfg. ![]()