Beiträge von Jeffry

    So mach ich es:


    ocmd:makeleader(playerid,params[])
    {
    new pID, ldlv, string[128], tmp[256], tmp2[256], idx;
    tmp = strtok(params, idx); tmp2 = strtok(params, idx);
    if(!IsNumeric(tmp2))return SendClientMessage(playerid, COLOR_GRAD2, "FEHLER: /makeleader [SpielerID/Name] [FrakID](/fraktionen)");
    if(IsNumeric(tmp)) pID = strval(tmp);
    else pID = ReturnPlayerID(tmp);
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_WHITE, "Spieler ist nicht online");
    ldlv = strval(tmp2);
    new ldtext[46];
    if(ldlv == 0){ ldtext ="Zivilist-Leader"; if(Spieler[pID][Geschlecht] == 1){ Spieler[pID][Skin] = 12;} else if(Spieler[pID][Geschlecht] == 2){ Spieler[pID][Skin] = 2;}}
    else if(ldlv == 1){ ldtext ="SAPD-Leader"; Spieler[pID][Skin] = 283;}
    else if(ldlv == 2){ ldtext ="FBI-Leader"; Spieler[pID][Skin] = 286;}
    else if(ldlv == 3){ ldtext ="Sanitäter-Leader"; Spieler[pID][Skin]=274;}
    else if(ldlv == 4){ ldtext ="Hitman-Leader"; Spieler[pID][Skin]=294;}
    else if(ldlv == 5){ ldtext ="News Reporter-Leader"; Spieler[pID][Skin]=57;}
    else if(ldlv == 6){ ldtext ="Transport GmbH-Leader"; Spieler[pID][Skin]=133;}
    else if(ldlv == 7){ ldtext ="Ordnungsamt-Leader"; Spieler[pID][Skin]=50;}
    else if(ldlv == 8){ ldtext ="Russenmafia-Leader"; Spieler[pID][Skin]=124;}
    else if(ldlv == 9){ ldtext ="Yakuza-Leader"; Spieler[pID][Skin] = 186;}
    else if(ldlv == 10){ ldtext ="Ballas-Leader"; Spieler[pID][Skin] = 102;}
    else if(ldlv == 11){ ldtext ="Grove Street-Leader"; Spieler[pID][Skin] = 105;}
    else if(ldlv == 12){ ldtext ="San Fierro Rifas-Leader";Spieler[pID][Skin]=116;}
    SetPlayerSkin(pID, Spieler[playerid][Skin]);
    Spieler[pID][Leader] = ldlv;
    Spieler[pID][Team] = ldlv;
    Spieler[pID][Rank] = 6;
    format(string, sizeof(string), "* Head-Administrator %s hat dich zum %s gemacht.", SpielerName(playerid), ldtext);
    SendClientMessage(pID, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "* Du hast %s zum %s gemacht.", SpielerName(pID), ldtext);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    SpawnPlayer(pID);
    new da, mont, yea, hou, minut;
    getdate(yea, mont, da);
    gettime(hou, minut);
    format(string, sizeof(string), "%s macht %s zum %s (%d) Date: %d.%d.%d Time: %02d:%02d", SpielerName(playerid), SpielerName(pID), ldtext, ldlv, da, mont, yea, hou, minut);
    MakeLeaderLog(string);
    return 1;
    }


    Und einfach das 1x im Code deklarieren:
    stock ReturnPlayerID(PlayerName[])
    {
    for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) if(!strcmp(pName(i),PlayerName, true)) return i;
    for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) if(strfind(pName(i),PlayerName,true)!=-1) return i;
    return INVALID_PLAYER_ID;
    }


    stock IsNumeric(const string[]) {
    new l=strlen(string);
    if(l==0) return false;
    for(new i = 0; i < l; i++) if ((string[i] > '9' || string[i] < '0') return false;
    return true;
    }


    //From dutils.inc
    stock strtok(const string[], &index,seperator=' ')
    {
    new length = strlen(string);
    new offset = index;
    new result[256];
    while ((index < length) && (string[index] != seperator) && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    if ((index < length) && (string[index] == seperator))
    {
    index++;
    }
    return result;
    }


    Ja, ich benutze strtok und ich stehe dazu. Weil es meiner Meinung nach besser ist.

    Delete3DTextLabel(Jobinfos[playerid]);
    Jobinfos[playerid] = Text3D:-1;


    Delete3DTextLabel(Printer[PlayerPrinterID[playerid]][PrinterLabel]);
    Printer[PlayerPrinterID[playerid]][PrinterLabel] = Text3D:-1;


    Warum du das machen solltest? Steht hier, am Beispiel von Autos:
    carrespawn bug + vehicle ID verschiebung vermeiden


    Ob das dein Problem löst kann ich dir nicht sicher sagen, aber es wäre gut möglich. Es ist aber auf alle Fälle hilfreich dies so zu machen.


    Jo das ist schon richtig. Ich habs auch falsch ausgedrückt.


    Um es mal darzustellen, meinst du es so:


    Cheetah1 wird erstellt, und erhält die ID 1234.
    Cheetah1 wird gelöscht, behält aber die ID 1234 in der variable, die ändert sich ja bei DestroyVehicle nicht.
    Infernus1 wird erstellt, und erhält nun ID 1234, da diese frei geworden ist.


    OnPlayerEnterVehicle:
    Spieler geht in den Infernus1:
    if(vehicleid == Cheetah1) SCM(playerid, rot, "Hallo im Cheetah1");
    Tatsächlich bin ich aber in den Infernus1 eingestiegen, und habe trotzdem die Nachricht bekommen, ich sei in dem Cheetah1.


    Ist das was du gemeint hast? Wenn ja, dann wäre das auch das was ich meinte, und dies kann verhindert werden, wenn ich Cheetah1 = -1 setzen, nach DestroyVehicle.

    Es gibt nicht umsonst die Funktion GetPlayerVehicleID
    Kannst dir ja mal die richtig vom Server festgelegten Fahrzeug Nummerierungen ausgeben :thumbup:


    Ist mir schon klar, aber wenn er z.B. bei OnGameModeInit ein, sagen wir Cheetah1 erstellt, der die ID 1234 bekommt, dann hat die Variable Cheetah1 den Wert 1234 und zwar solange bis man sie per script ändert. Der Cheetah (also das Auto) wird auch immer, bis er gelöscht wird, die ID 1234 haben. Auch wenn ich ID 1000-1100 lösche, bleibt mein Cheetah auf ID 1234.
    Die ID von Spielern ändert sich ja auch nicht einfach so.


    Deshalb hab ich nach dem Topic gefragt, außer du kannst es darstellen, wie diese "Verschiebung" gemeint ist.

    Ich habe noch nie erlebt, dass sich die VehicleIDs verschieben. Das macht auch keinen Sinn und wäre total unpraktisch. Mir ModelIDs zu arbeiten wird dir nicht gelingen.
    Das Einzige was du machen musst, um Fehler zu vermeiden ist, wenn du ein Vehicle/Objekt/Pickup/etc... Löschst (Destroy...), die dazugehörige Variable zu -1 zu setzen. Dann wirst du keine Probleme mehr haben. Ich hatte damit Probleme, hab die Variablen beim destroyen zu -1 gesetzt, Problem behoben.


    Grundätzlich "verschieben" sich aber IDs nicht, solange der Server läuft.


    Zwecks des Codes:
    Zeig doch bitte noch die LoadFraktionAutoBeiDeath und LoadPrivatAuto Funktionen.

    Wenn du willst kannst du mir deinen gesamten GameMode per PN schicken, dann seh ich es mir mal an. Ich hab mir mal selber einen Code geschrieben, der die Indentation in Scripts richtig macht. Hat mit meinem damals 50.000 Zeilen Code perfekt funktioniert. Damit kann ich auch Klammerfehler ganz einfach finden. Also wenn du willst, kannst du es mir gerne senden.
    Falls du eine Absicherung willst, dass ich deinen Skript nicht "stehle": Der Server in meiner Signatur ist meiner, ich hätte keinen Grund zur Verwendung, noch würde ich ihn wegen meines Rufs weitergeben.

    ocmd:einladung(playerid,params[])
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 0)return SendClientMessage(playerid,WHITE,"Du bist nicht Eingeloggt");
    if(eingeladen[playerid] >= 1)return SendClientMessage(playerid,WHITE,"Du bist nicht eingeladen");
    if(strcmp(params,"annehmen",true) == 0)
    {
    SpielerInfo[playerid][pMember] = eingeladen[playerid];
    SpielerInfo[playerid][pRank] = 1;
    eingeladen[playerid] = 0;
    }
    return 1;
    }


    In dem Fall das Gleiche.

    mysql_format(mycon,query,sizeof(query),"INSERT INTO `User` (`Name`, `Passwort`, `Punkte`,`Rank`, `Leben`, `LastLogin`) VALUES('%e','%e',0',0','0','0')",User[playerid][Username],inputtext);

    mysql_format(mycon,query,sizeof(query),"INSERT INTO `User` (`Name`,`Passwort`,`Punkte`,`Rank`,`LastLogin`) VALUES ('%e','%e','0','0','%e')",User[playerid][Username],inputtext,query);


    Ich denke mal, dass es so geht.
    Falls nicht, könntest du die strings auch manuell escapen und mit %s dann setzen.

    Du kannst die Warnings ignorieren lassen:
    #pragma unused log
    #pragma unused logtext


    Einfach über den stock setzen.


    Der stock ist allerdings auch sinnlos, aber wenn es errors gibt wenn du ihn rausmachst, dann lass den Compiler einfach die Warnings ignorieren.

    Was????
    Ist doch ganz klar:


    50 von 70 ist auf alle Fälle mehr als 50% Also kann 35% nicht sein!


    Nimm dir bitte einen Taschenrechner und teste es aus.


    (100 / MAX) * STAND = Prozent
    ^Das ist richtig.

    Jo, und das ist falsch. Ganz einfach zu beweisen:


    (70 / 100) * 70 = 49
    Das ist aber falsch. Wenn der Tank ein Fassungsvermögen von 70 hat und 70 drinnen sind entsprechen das 100% .
    Daher:


    (100 / 70) * 50


    ---> (100 / MAX) * STAND

    Vor dem SendClientMessage fehlt halt noch: if(rang == PlayerInfo[i][pRang])
    Eben mit deinen Variablen Namen.


    Sonst sehen alle die message.

    Geht meines Wissens nach nicht für einzelne Spieler. Entweder für alle oder für keinen, eben mit der Funktion die du ja schon kennst.
    Man könnte es über ApplyAnimation machen, und dem Spieler eine Lauf-Animation geben, dann würde er aber pausenlos laufen. Unter Umständen wäre es vielleicht sogar möglich damit jedem Spieler einen anderen Lauf-Modus zu geben, das wäre aber definitiv sehr aufwendig und ich kann dir nicht sicher sagen ob es geht. Mäglicherweise eine Anregung für jemandem dem gerade langweilig ist.

    Was? Du musst das TextDraw erst einmal erstellen:
    http://wiki.sa-mp.com/wiki/TextDrawCreate
    (+++siehe Related Functions für die Einstellungen)


    Nachdem du es erstellt hast, kannst du den Text des TextDraws mit TextDrawSetString verändern. Was du machen willst kann nicht funktionieren.


    Einen Tipp wenn du Errors dieser Art bekommst: Schau dir zuerst mal das wiki an, das hilft meistens.