Beiträge von Jeffry

    Das Arbeiten mit Bits ist bei heutigen Prozessoren meist unnötig und nur eine komplizierte Schreibweise, die zudem meistens langsamer ist. Ich würde das so nicht empfehlen, wenn jemand wirklich auf die Laufzeitperformance achtet.


    Sondern:
    new bool:Hut[MAX_PLAYERS];
    new bool:Shirt[MAX_PLAYERS];
    new bool:Tasche[MAX_PLAYERS];
    new bool:Fahrrad[MAX_PLAYERS];


    #define GivePlayerItem(%0,%1) %1[%0] = true
    #define RemovePlayerItem(%0,%1) %1[%0] = false
    #define HasItem(%0,%1) %1[%0]
    #define ResetAllItems(%0) Hut[%0] = Shirt[%0] = Tasche[%0] = Fahrrad[%0] = false


    GivePlayerItem(playerid,Hut);


    Mal vom ResetAllItems abgesehen, das ist nicht sooo schön.
    Das egalisiert sich aber durch den Performancegewinn am Rest, denn die Bit-Methode ist knappe 25% langsamer beim schreiben, und 15% beim Lesen und die Tatsache, dass man kein 32er Limit an Items hat.


    Und nebenbei, einfacher zu verstehen ist es auch :klugs:

    1.)
    format(query,sizeof query,"UPDATE user SET level='%d',geschlecht='%d',money='%d',skin='%d',palter='%d',persoantrag='%d'persot='%d',perso='%d',Ip='%d' WHERE id='%d'",
    zu:
    format(query,sizeof query,"UPDATE user SET level='%d',geschlecht='%d',money='%d',skin='%d',palter='%d',persoantrag='%d',persot='%d',perso='%d',Ip='%d' WHERE id='%d'",


    2.)
    if(sscanf(params,"params[40]",veh)) return SendClientMessageEx(playerid,ROT,"Benutze: {D6D6D6}/rent Roller/Bmx/Bike/Mountain Bike/löschen");
    zu:
    if(sscanf(params,"s[40]",veh)) return SendClientMessageEx(playerid,ROT,"Benutze: {D6D6D6}/rent Roller/Bmx/Bike/Mountain Bike/löschen");


    3.)
    In dem Code sehe ich kein sscanf.

    if(dialogid==DIALOG_FAUTOHAUS)
    {
    if(response)
    {
    new id=GetPVarInt(playerid,"buyCarID");
    if(GetPlayerMoney(playerid)<fahCars[id][fa_preis])
    {
    SendClientMessageEx(playerid,ROT,"Du hast nicht genügend Geld");
    RemovePlayerFromVehicle(playerid);
    return 1;
    }
    new query[128];
    format(query,sizeof(query),"SELECT Count(*) FROM fracvehicles WHERE FracID = '%d'", sInfo[playerid][fraktion]);
    mysql_function_query(dbhandle,query,false,"OnCountCheck","d",playerid);
    }
    else
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessageEx(playerid,ROT,"Dann eben nicht ...");
    }
    return 1;
    }



    forward OnCountCheck(playerid);
    public OnCountCheck(playerid)
    {
    if(cache_get_row_int(0,0,dbhandle) < 15)
    {
    GivePlayerMoney(playerid,-fahCars[id][fa_preis]);
    new Float:x, Float:y, Float:z, Float:a;
    fahCars[id][fc_modelID] = fahCars[id][fa_model];
    fahCars[id][fa_x] = x;
    fahCars[id][fa_y] = y;
    fahCars[id][fa_z] = z;
    fahCars[id][fa_r] = a;
    fcars[id][fc_fracID] = sInfo[playerid][fraktion];
    format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, PosX, PosY, PosZ, PosA, Color1, Color2, FracID) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
    id, fcars[id][fc_modelID], fcars[id][fc_x], fcars[id][fc_y], fcars[id][fc_z], fcars[id][fc_a], fcars[id][fc_color1], fcars[id][fc_color2], fcars[id][fc_fracID]);
    mysql_tquery(dbhandle, query);
    fcars[id][fc_vID] = CreateVehicle(fcars[id][fc_modelID], fcars[id][fc_x], fcars[id][fc_y], fcars[id][fc_z], fcars[id][fc_a], -1, -1, -1);
    new str[10],plate;
    plate = GetFreeNumberPlate();
    fcars[id][e_plate] = plate;
    format(str, sizeof(str), "SA-%d", fcars[id][e_plate]);
    SetVehicleNumberPlate(fcars[id][fc_vID],str);
    PutPlayerInVehicle(playerid, fcars[id][fc_vID], 0);
    RemovePlayerFromVehicle(playerid);
    return 1;
    }
    else
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,ROT,"Deine Fraktion hat genug Fahrzeuge!");
    }
    return 1;
    }



    Versuche es so.

    Im PayPay:
    if(pInfo[i][pPremium] == 1)
    {
    SendClientMessage(i,GRAU,"{00FF64}EXP System{FEFEFE}: Du hast soeben 150 EXP +5000$ erhalten (Grund: Premium+)");
    EXErhalten[i] = Create3DTextLabel("{00FF64}150 EXP{FEFEFE} erhalten", 0x00F5FFFF, 30.0, 40.0, 50.0, 40.0, 0);
    Attach3DTextLabelToPlayer(EXErhalten[i], i, 0.0, 0.0, 0.7);
    pInfo[i][pExp]+= 150;
    GivePlayerMoney(i,5000);
    GameTextForPlayer(i, "~y~Zahltag", 5000, 3);
    format(string, sizeof(string), "Neuer Kontostand: $%d", pInfo[i][pBankGeld]);
    SendClientMessage(i, GRAU, string);
    return 1;
    }

    zu:
    if(pInfo[i][pPremium] == 1)
    {
    SendClientMessage(i,GRAU,"{00FF64}EXP System{FEFEFE}: Du hast soeben 150 EXP +5000$ erhalten (Grund: Premium+)");
    EXErhalten[i] = Create3DTextLabel("{00FF64}150 EXP{FEFEFE} erhalten", 0x00F5FFFF, 30.0, 40.0, 50.0, 40.0, 0);
    Attach3DTextLabelToPlayer(EXErhalten[i], i, 0.0, 0.0, 0.7);
    pInfo[i][pExp]+= 150;
    GivePlayerMoney(i,5000);
    GameTextForPlayer(i, "~y~Zahltag", 5000, 3);
    format(string, sizeof(string), "Neuer Kontostand: $%d", pInfo[i][pBankGeld]);
    SendClientMessage(i, GRAU, string);
    pInfo[i][pPlayMinutes] = 0;
    continue;
    }

    Wenn du die Funktion aus dem Link nutzt, sollte es auch so klappen.
    Ansonsten, dort ist auch die Liste mit den Nummern dabei:


    Code
    char	GTASA code pointÀ	128Á	129Â	130Ä	131Æ	132Ç	133È	134É	135Ê	136Ë	137Ì	138Í	139Î	140Ï	141Ò	142Ó	143Ô	144Ö	145Ù	146Ú	147Û	148Ü	149ß	150à	151á	152â	153ä	154æ	155ç	156è	157é	158ê	159ë	160ì	161í	162î	163ï	164ò	165ó	166ô	167ö	168ù	169ú	170û	171ü	172Ñ	173ñ	174¿	175¡	94°	124

    Also so wie DJ Deagle: schon vorgeschlagen hat geht es auf jeden Fall, das habe ich gerade getestet.
    PlayerTextDrawSetString(playerid,Job[playerid], "M\172;lltonnen Geleert 0/10");



    Mein Test-Code:
    new PlayerText:Job[MAX_PLAYERS];
    public OnPlayerSpawn(playerid)
    {
    PlayerTextDrawDestroy(playerid, Job[playerid]);
    Job[playerid] = CreatePlayerTextDraw(playerid,515.000000, 210.500000, "Packete Eingelagert 10");
    PlayerTextDrawBackgroundColor(playerid,Job[playerid], 255);
    PlayerTextDrawFont(playerid,Job[playerid], 1);
    PlayerTextDrawLetterSize(playerid,Job[playerid], 0.259999, 1.100000);
    PlayerTextDrawColor(playerid,Job[playerid], -65281);
    PlayerTextDrawSetOutline(playerid,Job[playerid], 0);
    PlayerTextDrawSetProportional(playerid,Job[playerid], 1);
    PlayerTextDrawSetShadow(playerid,Job[playerid], 1);
    PlayerTextDrawUseBox(playerid,Job[playerid], 1);
    PlayerTextDrawBoxColor(playerid,Job[playerid], 0x00000077);
    PlayerTextDrawTextSize(playerid,Job[playerid], 630.000000, 230.000000);
    PlayerTextDrawSetSelectable(playerid,Job[playerid], 1);
    PlayerTextDrawShow(playerid, Job[playerid]);
    PlayerTextDrawSetString(playerid,Job[playerid], "M\172;lltonnen Geleert 0/10");
    return 1;
    }

    Setze die ID in der Tabelle auf AUTO_INCREMENT (A_I) und leere die Tabelle nochmal, falls Daten drin sind.
    Wenn du keine ID-Spalte hast, lege sie an.

    ocmd:corpse(playerid)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 442)return SendClientMessage(playerid,C_Error,"Du bist nicht im Leichenwagen!");
    if(leiche[playerid] == 1) return SendClientMessage(playerid, C_Error, "Du hast bereits eine Leiche geladen. Bringe sie zuerst zum Friedhof.");
    for(new i=0; i<MAX_LEICHEN; i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,10.0,leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z]) || leichenInfo[i][existiert] != 1) continue;
    Delete3DTextLabel(leichenInfo[i][NamenLabel]);
    DestroyPickup(leichenInfo[i][pickup]);
    SendClientMessage(playerid,C_Blau,"Du hast eine Leiche eingesammelt.");
    SendClientMessage(playerid,C_Blau,"Fahre nun zum Friedhof, und geb die Leiche dort ab.");
    leiche[playerid]=1;
    leichenInfo[i][existiert]=0;
    SetPlayerCheckpoint(playerid,927.4283,-1073.0220,24.2891,5.0);
    return 1;
    }
    return SendClientMessage(playerid,C_Error,"Hier ist keine Leiche!");
    }