Beiträge von Kaliber

    (z.B. Desert Eagle, AK47 usw).


    Du kannst die Funktion die seit 0.3x verfügbar ist nutzen: TextDrawSetPreviewModel


    und dann kannste die modelids der Waffen nutzen um sie als TextDraw anzuzeigen ;)


    Kurzer ausschnitt:


    Quelle: http://wiki.sa-mp.com/wiki/Game_Object_ID_List


    mfg. :thumbup:

    Ich möchte gerne Feedback, Kritik und Verbesserungsvorschläge.


    Wenn du new zum deklarieren einer Variable benutzt, ist das in dem Fall suboptimal, da dann keine andere Variable im Gamemode so heißen kann.


    Deshalb solltest du static nehmen. Desweiteren ist dein else unnötig, da durch das return die Funktion eh beendet wird.


    Außerdem kannst du das zusammenfassen, dann wird der Code schneller, schau:


    //GetFuncSpeed by SynonymousZ Edit by Kaliber
    #if defined _GetFuncSpeed_included
    #endinput
    #endif
    #define _GetFuncSpeed_included
    static bool:getfuncspeed,count;
    stock GetFuncSpeed() {
    if(!getfuncspeed) return getfuncspeed=true,count=GetTickCount(),-1;
    return getfuncspeed=false,GetTickCount()-count;
    }


    Aber...ist jetzt nicht so spektakulär und nützlich die Funktion, da man auch ganz normal mit GetTickCount arbeiten kann und die Tatsache, dass du einen Funktionsaufruf machst, dass die Performance zwar nicht bei einem, aber zum Beispiel bei 10000 Aufrufen beeinflusst ;) Deshalb ist das evtl nicht ganz so gut, aber trotzdem nette Idee :D


    //Edit: Joa...das D hab ich wohl ausversehen gelöscht :rolleyes:


    mfg. :thumbup:

    //Edit: @RG: sry habe dein Edit nicht gesehen ^^


    test() {
    new string[] = "Hallo";
    return string;
    }


    Der String muss halt erstmal im Speicher liegen.


    Zudem liegt der Fehler, den er gemacht hat daran, dass man 2 unterschiedliche Typen an Variablen zurückgeben kann.


    Wenn dann nur Strings oder nur Integer, aber nicht gemischt ;)


    //Edit²: @Dark.Shadow: In diesem Fall wäre strcat oder strins wesentlich schneller als format :p


    mfg. :thumbup:

    Hier mal ein wenig umgeschrieben, ungetestet:


    Spoiler anzeigen
    /*
    * Simple Votekick & Voteban System by DJ Deagle...HARD EDIT by Kaliber
    */
    #include <a_samp>
    #include <ocmd>

    Spoiler anzeigen
    #define SCM SendClientMessage
    #define SCMT SendClientMessageToAll

    Spoiler anzeigen
    static bool:active[2],bool:did[MAX_PLAYERS char],vote[2],name[MAX_PLAYERS][MAX_PLAYER_NAME];

    Spoiler anzeigen
    public OnPlayerConnect(playerid) return GetPlayerName(playerid,name[playerid],MAX_PLAYER_NAME);
    public OnFilterScriptInit() return print("\n-------------------------------------- \nSimple Votekick & Voteban System by DJ Deagle (e) by Kaliber!\n--------------------------------------\n");

    Spoiler anzeigen
    ocmd:votekick(playerid,params[]) {
    if(active[0] || active[1]) return SCM(playerid,-1,"Es ist bereits ein Votekick oder Voteban aktiv, warte bis dieser abgelaufen ist!");
    new pID,string[144];
    if(sscanf(params,"us",pID,string))return SCM(playerid,-1,"Benutze: /votekick [Spieler-ID] [Grund]");
    format(string,sizeof string,"Der Spieler %s möchte den Spieler %s via Votekick vom Server kicken! Grund: %s",name[playerid],name[pID],string);
    SCMT(-1," "),SCMT(-1,string),SCMT(-1,"Um zu voten gebe nun /yes oder /no ein!"),SCMT(-1,"Dafür hast du 13 Sekunden Zeit.");
    return active[0]=true,vote[0]++,did{playerid}=true,SetTimerEx("@EndVote",13000,0,"d",pID);
    }
    ocmd:voteban(playerid,params[]) {
    if(active[0] || active[1]) return SCM(playerid,-1,"Es ist bereits ein Votekick oder Voteban aktiv, warte bis dieser abgelaufen ist!");
    new pID,string[144];
    if(sscanf(params,"us",pID,string)) return SCM(playerid,-1,"Benutze: /voteban [Spieler-ID] [Grund]");
    format(string,sizeof string,"Der Spieler %s möchte den Spieler %s via Voteban vom Server bannen! Grund: %s",name[playerid],name[pID],string);
    SCMT(-1," "),SCMT(-1,string),SCMT(-1,"Um zu voten gebe nun /yes oder /no ein!"),SCMT(-1,"Dafür hast du 13 Sekunden Zeit.");
    return active[1]=true,vote[0]++,did{playerid}=true,SetTimerEx("@EndVote",13000,0,"d",pID);
    }
    ocmd:yes(playerid,params[]) {
    if(did{playerid}) return SCM(playerid,-1,"Du kannst nur ein mal Voten!");
    if(!active[0] && !active[1])return SCM(playerid,-1,"Es ist kein Votekick oder Voteban aktiv!");
    return vote[0]++,did{playerid}=true,SCM(playerid,-1,"Du hast für Ja gevotet.");
    }
    ocmd:no(playerid,params[]) {
    if(did{playerid})return SCM(playerid,-1,"Du kannst nur ein mal Voten!");
    if(!active[0] && !active[1])return SCM(playerid,-1,"Es ist kein Votekick oder Voteban aktiv!");
    return vote[1]++,did{playerid}=true,SCM(playerid,-1,"Du hast für Nein gevotet.");
    }
    @EndVote(playerid);@EndVote(playerid) {
    new string[128];
    SCMT(-1,"Die Abstimmung wurde beendet und die Stimmen werden sortiert!"),SCMT(-1," ");
    format(string,sizeof string,"Es haben %d Spieler für Ja, und %d Spieler für Nein gestimmt!",vote[0],vote[1]),SCMT(-1,string);
    if(vote[0] > vote[1]){
    format(string,sizeof string,"Der Spieler %s wurde vom Server %s!",name[playerid],(active[0]) ? ("gekickt") : ("gebannt")),SCMT(-1,string);
    if(active[0]) Kick(playerid); else Ban(playerid);
    } else format(string,sizeof string,"Der Spieler %s wurde vom Server nicht %s!",name[playerid],(active[0]) ? ("gekickt") : ("gebannt")),SCMT(-1,string);
    return ResetVars();
    }
    stock ResetVars() {
    for(new i; i<MAX_PLAYERS; i++) if(did{i}) did{i}=false;
    return active[0]=false,active[1]=false,vote[0]=0,vote[1]=0;
    }
    stock sscanf(string[], format[], {Float,_}:...) {
    if (string[0] == 0 || (string[0] == 1 && string[1] == 0)) return format[0];
    new formatPos = 0,stringPos = 0,paramPos = 2,paramCount = numargs(),delim = ' ';
    while (string[stringPos] && string[stringPos] <= ' ') stringPos++;
    while (paramPos < paramCount && string[stringPos]) {
    switch (format[formatPos++]) {
    case '\0': return 0;
    case 'u': {
    new end = stringPos - 1,id = 0,bool:num = true,ch;
    while ((ch = string[++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
    string[end] = '\0',num = false,id = end - stringPos;
    foreach (Player, playerid) {
    if (!strcmp(name[playerid], string[stringPos], true, id)) {
    setarg(paramPos, 0, playerid),num = true;
    break;
    }
    }
    if (!num) setarg(paramPos, 0, INVALID_PLAYER_ID);
    string[end] = ch;
    #if defined __SSCANF_FOREACH__
    #undef foreach
    #undef __SSCANF_FOREACH__
    #endif
    }
    stringPos = end;
    }
    case 's', 'z': {
    new i = 0,ch;
    if (format[formatPos]) {
    while ((ch = string[stringPos++]) && ch != delim) setarg(paramPos, i++, ch);
    if (!i) return -1;
    }
    else {
    while ((ch = string[stringPos++]))setarg(paramPos, i++, ch);
    }
    stringPos--,setarg(paramPos, i, '\0');
    }
    default: continue;
    }
    while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ') stringPos++;
    while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' ')) stringPos++;
    paramPos++;
    }
    do {
    if ((delim = format[formatPos++]) > ' ') {
    if (delim == '\'') {
    while ((delim = format[formatPos++]) && delim != '\'') {}
    }
    else if (delim != 'z') return delim;
    }
    }
    while (delim > ' ');
    return 0;
    }


    Kannst ja mal schauen, ob dich das ein wenig inspiriert :D


    mfg. :thumbup:

    Hallo,


    Im pRP habe ich meine IP vom server (einmal mit und einmal ohne Port) eingetragen. Aber das Script meint, der Server wäre nicht darauf gebinded. Woran liegt das?
    mfg


    Ehm...poste doch mal die Fehler und schau ob das vom Script aus ausgegeben wird und wenn ja...wo und lösch das doch einfach?! :rolleyes:

    Versuche es mal so:


    if(!strcmp(cmdtext,"/sperrcar",true)) {
    if(SpielerInfo[playerid][sMember] != 18) return SCM(playerid,0xFF0000FF,"Du bist kein Ordnungsamtmitglied.");
    tmp = strtok(cmdtext,idx);
    if(!tmp[0]) return SCM(playerid,0xFF0000FF,"{33CCFF}FEHLER:{FFFFFF} /sperrcar [Kennzeichen] [Preis] [Grund]");
    new kz[32];strcat(kz,tmp,32);
    if(!KZExistiert(kz)) return SCM(playerid,0xFF0000FF,"Dieses Kennzeichen wurde nicht registriert.");
    tmp=strtok(cmdtext,idx);
    if(!tmp[0]) return format(string,128,"{33CCFF}FEHLER:{FFFFFF} /sperrcar %s [Sperrpreis] [Grund]",kz),SCM(playerid,0xFF0000FF,string);
    new preis = strval(tmp);
    if(preis < 1) return SCM(playerid,0xFF0000FF,"Der Sperrpreis darf nicht unter 0 sein.");
    tmp=strtok(cmdtext,idx);
    if(!tmp[0]) return format(string,128,"{33CCFF}FEHLER:{FFFFFF} /sperrcar %s %d [Grund]",kz,preis),SCM(playerid,0xFF0000FF,string);
    new grund[128],kzveh = GetCarFromKZ(kz);strcat(grund,tmp,128);
    if(IsDtCarGesperrt(kzveh)) return SCM(playerid,0xFF0000FF,"Dieses Fahrzeug ist bereits gesperrt.");
    new modell = GetVehicleModel(kzveh),gpid = GetOwner(kzveh),gpidname[MAX_PLAYER_NAME],pnn[MAX_PLAYER_NAME];
    GetPlayerName(gpid,gpidname,sizeof(gpidname));
    format(string,sizeof(string),"Du hast das Kennzeichen %s (User: %d || Name: %s || Fahrzeug: %s) für %d€ mit folgendem Grund gesperrt: %s",kz,gpid,gpidname,CarName[modell-400],preis,grund);
    SCM(playerid,0x00FFFFFF,string),GetPlayerName(playerid,pnn,sizeof(pnn));
    format(string,sizeof(string),"%s hat dein Fahrzeug %s mit dem Kennzeichen %s für %d€ mit folgendem Grund gesperrt: %s",pnn,CarName[modell-400],kz,preis,grund);
    for(new x;x<MaxVeh;x++) if(!strcmp(PlayerCar[gpid][x][CarNumber],kz,true)) PlayerCar[gpid][x][CarGesperrt] = 1,PlayerCar[gpid][x][CarSperrpreis]=preis;
    return SCM(gpid,0xFF0000FF,string);
    }


    Wenn jetzt da steht: Server Unknown Command...dann check mal deine Funktionen mit nem Print-Debug oder hau mal das Crashdetect Plugin rein ;)


    mfg. :thumbup: