Also, man muss dafür mit Sicherheit keine 1.000€ ausgeben.
Ehm...du solltest dich darüber besser informieren, so richtig gute Teile können bis zu 25000,00€ kosten!
mfg. ![]()
Also, man muss dafür mit Sicherheit keine 1.000€ ausgeben.
Ehm...du solltest dich darüber besser informieren, so richtig gute Teile können bis zu 25000,00€ kosten!
mfg. ![]()
Ehm...soll ich jetzt raten was mir das sagen soll oder ? ![]()
Du hast echt zuviel lange weile
Ja, da hast du recht ![]()
Naja, ich hoffe einige Leute können das für sich nutzen ![]()
mfg. ![]()
So guten Morgen euch allen,
ja ich bin es mal wieder, die Langeweile hat mich überrumpelt und aus diesem Grund kam diese Include ans Licht.
Es geht um ein Thema was ich schonmal versucht hatte zu machen aber gefailt habe...jetzt habe ich mir einen neuen Alogrithmus ausgedacht und dieser sollte funktionieren ![]()
Also hier nun einige Informationen über die Include:
Wozu dient die Include?
Also jeder von euch kennt das Problem MAX_PLAYERS ist eine Konstante die entweder einen Wert von 500 hat oder ihr euch einen anderen Wert definiert habt, aber sie hat nie den Wert der höchsten playerid+1 ![]()
So und nun kommt meine Include ins spiel, sie sorgt dafür, dass MAX_PLAYERS immer diesen Wert hat und sind Schleifen viel Schneller, da sie nicht mehr 500x durchlaufen sondern vielleicht nur noch 10x, jenachdem wie viele Spieler auf dem Server sind ![]()
Wie funktioniert das jetzt genau?
Also, da ich leider nicht direkt das Makro MAX_PLAYERS verändern sollte (da dies oft für Arrays genutzt wird) gibt es nun dieses Makro:
m_players
eine Spieler Schleife sähe also z.B. einfach so aus:
for(new i; i<m_players; i++) {
//Restcode
}
Download:
Source-Code: Pastebin
Direkter-Download: Mediafire
Würde mich über ein kleines Feedback freuen ![]()
mfg. ![]()
Downloadlinks
Downloadlinks²
Downlaoad³
Jetzt aber zum letzten mal...
So, noch eine Verschönerung dank BlackAce
Hast du einen Testserver ?
mfg. ![]()
Das kann absolut nicht sein.
Doch, habe doch den Test gemacht ![]()
Dein Code hat eine lausige effektivität, zumal %.3f bei dir nicht funktioniert.
Wer braucht das schon ![]()
Bitte, schreibe das so und verwende nicht in einem Array ^ ! ![]()
PS: Du vertauschst hier astring und string!
if(strcmp(x_s,"adac",true) == 0)
{
if(sSpieler[playerid][Fraktion] != 11) return SendClientMessage(playerid, Rot, "Sie sind kein Mitglied des ADACs.");
new counter = 0,pName[ MAX_PLAYER_NAME+1], astring[128];
for (new aplayer; aplayer < MAX_PLAYERS; aplayer++ ) {
if( ADACGerufen[aplayer] > 0) {
if ( !IsPlayerConnected ( aplayer ) ) continue;
PlayerDialogSelectBox[playerid][counter] = aplayer;
GetPlayerName ( aplayer , pName , MAX_PLAYER_NAME + 1);
format ( astring , sizeof astring , "%s\n%s" , astring , pName );
}
}
ShowPlayerDialog ( playerid , ADACDialog , DIALOG_STYLE_LIST , "Folgende Spieler benötigen einen ADAC" , astring, "Ok", "Abbruch");
}
mfg. ![]()
Alles anzeigenDoch das: (Und die Verwendung ist z.b. so:)
SendClientMessage(playerid, GELB, "Du hast %s in %s umbenannt (ID: %i)", oldname, newname, pID);
Die Funktion new stock
scm_buf[144];
Die Funktion native __SendClientMessage(playerid, color, const message[]) = SendClientMessage;
native __SendClientMessageToAll(color, const message[]) = SendClientMessageToAll;
Die Funktion #define SendClientMessage(%0,%1,%2,%3) \
(format(scm_buf, sizeof scm_buf, %2,%3), __SendClientMessage(%0,%1,scm_buf))
#define SendClientMessageToAll(%0,%1,%2) \
(format(scm_buf, sizeof scm_buf, %1,%2), __SendClientMessageToAll(%0,scm_buf))
Entschuldigung wenn ich diskret werde, aber bist du dumm ![]()
Ich habe doch folgendes geschrieben:
new str2[128];
#define formatEx(%0,%1,%2,%3) format(str2,128,%2,%3) && SendClientMessage(%0,%1,str2)
Zudem ist das da oben keine Funktion, sondern ein Makro !
mfg. ![]()
Nette Funktion. Könntest du evtl noch die restlichen Formatierungen einbauen?
Mhm, ganz ehrlich so wirklich die Nutzung davon würde ich nicht empfehlen ![]()
Es funktioniert zwar, jedoch ist eine das simple Makro besser:
new str2[128];
#define formatEx(%0,%1,%2,%3) format(str2,128,%2,%3) && SendClientMessage(%0,%1,str2)
Weil Pre-Prozessor und so ![]()
Ich habe auch gerade einen sscanf Code aus langeweile geschrieben:
stock sscanf(msg[],alt[],{Float,_}:...) {
new len=strlen(msg),i,count=1,len2 = (strlen(alt)+2);
for(; i<len; i++) {
if(msg[i] == '\0') return 0;
if(msg[i] != ' ') continue;
count++;
if(count > len2) return 0;
switch(alt[count-2]) {
case 's': {
new tmp[32],var;
for(new l=(i+1); l<32; l++) {
if(msg[l] == ' ' || msg[l] == '\0') break;
tmp[var] = msg[l],setarg(count,var,tmp[var]),var++;
}
}
case 'd','i': {
new tmp[32],var;
for(new l=(i+1); l<32; l++) {
if(msg[l] == ' ' || msg[l] == '\0') { setarg(count,0,strval(tmp)); break; }
tmp[var] = msg[l],var++;
}
}
case 'f': {
new tmp[32],var;
for(new l=(i+1); l<32; l++) {
if(msg[l] == ' ' || msg[l] == '\0') { setarg(count,0,_:floatstr(tmp)); break; }
tmp[var] = msg[l],var++;
}
}
}
}
return true;
}
Der Code ist auch um einiges kürzer als der sscanf Code jedoch langsamer, deshalb rate ich auch dazu das Plugin zu benutzen ![]()
Das sind von mir hier nur Beispiele wie man es machen könnte, zur kleinen und übersichtlicheren Veranschaulichung der Codes!
Kaliber hab dafür nen kürtzeren Code den findest du wenn du aufs Profil von "Double-O-Sven" gehst, der hatte das mal irgentwo gepostet.
Kürzer als 1ne Zeile ist nicht wirklich möglich ![]()
mfg. ![]()
Ja, meint er, das macht man so:
CreatePickup(1239,23,X,Y,Z);
mfg. ![]()
Aberkannst Du mir evtl. ein Beispielscript bzw. Codeschnipsel geben/schreiben damit ich dahinter steige?
Schau dir das mal an: mSelection
mfg. ![]()
Wie hast du lspdtor deklariert ![]()
Hallo Brotfische,
Wen man sich einloggt steht Da BYE in der mitte rot und dan Server Closed. ...
Ich hab es bei M_Bot.inc entfernt geht jedoch immer noch nicht.
Genial ![]()
Drück mal in deinem Skript STRG+F und suche nach BYE und dann lösche da einfach alles ![]()
mfg. ![]()
ich weiß, aber manche wollen sich das nicht kaufen.
Wenn sie einen Premium Account haben wollen, bleibt ihnen ja irgendwie keine andere Wahl ![]()
Also wie gesagt finde ich deinen Vorschlag sinnlos ![]()
mfg. ![]()
noch garkein PSC
Du weißt, dass PSC für PaySafeCard steht und du dir das an jeder Tankstelle kaufen kannst ![]()
mfg. ![]()
Aus Langeweile habe ich mal eine Funktion geschrieben, nämlich SendClientMessageEx, sieht so aus:
stock SendClientMessageEx(playerid,color,msg[],{Float,_}:...) {
new len=strlen(msg)+32,arg[10][32],args=3;
for(new i=0; i<len; i++) {
if(msg[i] == '\0') break;
switch(msg[i]) {
case '%': {
switch(msg[i+1]) {
case 's': {
for(new y; y<32; y++) {
if(getarg(args,y) == '\0') break;
arg[args][y] = getarg(args,y);
}
strdel(msg,i,i+2),strins(msg,arg[args],i,len),args++;
}
case 'd','i': format(arg[args],32,"%d",getarg(args,0)),strdel(msg,i,i+2),strins(msg,arg[args],i,len),args++;
case 'f': format(arg[args],32,"%.1f",getarg(args,0)),strdel(msg,i,i+2),strins(msg,arg[args],i,len),args++;
default: continue;
}
}
default: continue;
}
}
return SendClientMessage(playerid,color,msg);
}
Verwendet man z.B. so:
SendClientMessageEx(0,0xFF4800FF,"Hallo lieber %s. Test %d %d %d","Kaliber",1,2,3);
//Output-> Hallo lieber Kaliber. Test 1 2 3
Nun, in einem Test von mir ist diese Funktion, solange die Wiederholung unter 100 liegt schneller als dieses Makro:
new str2[128];
#define formatEx(%0,%1,%2,%3) format(str2,128,%2,%3) && SendClientMessage(%0,%1,str2)
Wollte nur mal den Code zeigen ![]()
mfg. ![]()
Dann sähe das so aus:
//Unter OnGameModeInit
SetTimer("Wantedablauf",1000*60*10,1);
//Der Callback
forward Wantedablauf();
public Wantedablauf() {
for(new i; i<MAX_PLAYERS; i++) {
if(!IsPlayerConnected(i) || !GetPlayerWantedLevel(i)) continue;
SetPlayerWantedLevel(i, GetPlayerWantedLevel(i)-1);
SendClientMessage(i,0xFF4800FF,"Dein Wantedlevel ist um 1 zurück gegangen !");
}
return 1;
}
mfg. ![]()
Bei mir funktioniert es Einwandfrei.
Dann hast du nicht alles getestet ![]()
Du hast das geschrieben:
|| strfind(RPName, "_", true) == -1)
und das ist falsch, da es != -1 heißen müsste, damit auch danach gesucht wird ![]()
und meine Version ist kürzer, zu dem hast du 2x GetPlayerName bei dir drinnen ![]()
mfg. ![]()
Naja, nichts wirklich tolles und du hast ein paar Fehler gemacht ![]()
Ich würde dir empfehlen den Callback so zu schreiben:
public OnPlayerConnect(playerid)
{
new RPName[MAX_PLAYER_NAME+1], String[128], bool:count;
GetPlayerName(playerid, RPName, MAX_PLAYER_NAME+1);
for(new i; i<10; i++) if(strfind(RPName,i,true) != -1 || strfind(RPName,".",true) != -1 || strfind(RPName,"_",true) != -1) { count = true; break; }
if(count == true) {
ShowPlayerDialog(playerid,FEHLER1,DIALOG_STYLE_MSGBOX,"RP Name nicht genehmigt!","{009BFF}Dein RP Name wurde nicht genehmigt, da der '{FFFA00}_{009BFF}' fehlt oder {FEFEFE}Zahlen{009BFF} und {FEFEFE}Sonderzeichen{009BFF} behinhaltet!\n\n{FF3C00}Hinweis:{009BFF} Dein RP Name muss so aussehen: {FEFEFE}Vorname_Nachname","Ok","");
format(String, sizeof(String), "%s wurde vom Server gekickt. Grund: {FF3C00}RP Name wurde nicht genehmigt!", RPName);
SendClientMessageToAll(Farbe, String);
Kick(playerid);
}
return 1;
}
mfg. ![]()
Erstelle das Objekt mit CreateObject und move es mit MoveObject ![]()
Also mach das Dynamic raus, bei Toren buggt manchmal der Streamer ![]()
mfg. ![]()