Beiträge von Jeffry

    public OnPlayerRequestClass(playerid,classid)
    {
    switch(classid)
    {
    case 0: GameTextForPlayer(...);
    case 1: GameTextForPlayer(...);
    case 2: GameTextForPlayer(...);
    case 3: GameTextForPlayer(...);
    }
    return 1;
    }

    new query[128];
    format(query, sizeof(query), "SELECT pName FROM users WHERE id = '%d'", id);
    mysql_tquery(handle, query, "OnUserNameFetched", "ii", playerid, id);



    forward OnUserNameFetched(playerid, id);
    public OnUserNameFetched(playerid, id)
    {
    new string[128];
    if(cache_get_row_count() > 0)
    {
    cache_get_row(0,0,string);
    format(string, sizeof(string), "Nutzername von Datenbank-ID %i: %s", id, string);
    }
    else format(string, sizeof(string), "Nutzername von Datenbank-ID %i: ***Unbekannt***", id);
    return SendClientMessage(playerid, 0xFF0000FF, string);
    }


    Beispielsweise so.

    Möglicherweise reicht es schon, wenn du
    new playercp = Bergarbeiter[playerid][berg_Checkpoint];
    zu:
    new playercp = Bergarbeiter[playerid][berg_Checkpoint]+1;
    änderst.


    Falls nicht, poste nochmal den Debug Log.

    Diese drei Abfragen müssen nach der IsPlayerInRangeOfPoint Abfrage kommen.
    if(hInfo[i][Gekauft] != 0) return SendClientMessage(playerid, error, "Dieses Haus steht nicht zum verkauf!");//hier
    if(hInfo[i][Level] > SpielerInfo[playerid][pLevel]) return SendClientMessage(playerid, error, "Dein Level ist zu gering!");
    if(hInfo[i][Kaufpreis] > SpielerInfo[playerid][pGeld]) return SendClientMessage(playerid, error, "Dein Geld ist zu gering!");
    Also in der Ebene die IsPlayerInRangeOfPoint öffnet.

    Ach, hatte vergessen, dass du es auf leer gestellt hast.
    public PayDay(playerid)
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    new string[128],string1[128], gehalt = GiveFrakGehalt(playerid);
    SendClientMessage(playerid,info,"|____________Zahltag___________|");
    format(string, sizeof(string), "Gehalt: %i$",gehalt);
    SendClientMessage(playerid,hinweis,string);
    SpielerInfo[playerid][pPayday] = 0;
    SpielerInfo[playerid][Kontostand] += gehalt;
    for(new i=0; i<MAX_HOUSE; i++)
    {
    format(string1,sizeof(string1),"Deine Miete beträgt: %d",hInfo[i][Mietpreis]);
    if((!strcmp(SpielerName(playerid), hInfo[i][Mieter1]) && strlen(hInfo[i][Mieter1])) || (!strcmp(SpielerName(playerid), hInfo[i][Mieter2]) && strlen(hInfo[i][Mieter2])) || (!strcmp(SpielerName(playerid), hInfo[i][Mieter3]) && strlen(hInfo[i][Mieter3])))
    {
    GivePlayerMoney(playerid, -hInfo[i][Mietpreis]), SendClientMessage(playerid, info, string1);
    break;
    }
    }
    SetPVarInt(playerid, "pLevelPunkte", GetPVarInt(playerid, "pLevelPunkte")+1);
    if(GetPVarInt(playerid, "pLevelPunkte") == RequiredPoints(playerid))
    {
    GivePlayerScore(playerid,1);
    SetPVarInt(playerid, "pLevelPunkte", 0);
    SpielerInfo[playerid][pLevel] ++;
    SendClientMessage(playerid,erfolg,"Herzlichen Glückwunsch, du bist ein Level gestiegen!");
    }
    }
    return 1;
    }


    Gleiches Prinzip beim mieten:
    if((!strcmp(SpielerName(playerid), hInfo[i][Mieter1]) && strlen(hInfo[i][Mieter1])) || (!strcmp(SpielerName(playerid), hInfo[i][Mieter2]) && strlen(hInfo[i][Mieter2])) || (!strcmp(SpielerName(playerid), hInfo[i][Mieter3]) && strlen(hInfo[i][Mieter3])) || (!strcmp(SpielerName(playerid), hInfo[i][Besitzer]) && strlen(hInfo[i][Besitzer])))

    ocmd:carpark(playerid,params[])
    {
    new vID,seat,Float:x,Float:y,Float:z,Float:r;
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,RED,"Du bist in keinem Fahrzeug!");
    seat = GetPlayerVehicleSeat(playerid);
    if(seat != 0)
    {
    SendClientMessage(playerid,RED,"Du musst der Fahrer deines Fahrzeugs sein, um dieses zu speichern!");
    }
    else
    {
    vID = GetPlayerVehicleID(playerid);
    printf("vID = %i",vID);
    GetVehiclePos(vID,x,y,z);
    cInfo[vID][c_x] = x;
    cInfo[vID][c_y] = y;
    cInfo[vID][c_z] = z;
    GetVehicleZAngle(vID,r);
    cInfo[vID][c_r] = r;
    printf("x = %f y=%f z=%f r=%F",x,y,z,r);
    SendClientMessage(playerid,CL_ORANGE,"Dein Auto wird gespeichert. Dieser Vorgang dauert ca 10 Sekunden!");
    SendClientMessage(playerid,CL_ORANGE,"[Hinweis]: Du bist solange gefreezed!");
    SetTimerEx("UodateCarInDB",10000,false,"ii",vID,playerid);
    //
    //Sicher, dass es UodateCarInDB heißt, und nicht UpdateCarInDB ?
    //
    printf("playerid = %i vID = %i",playerid,vID);
    }
    return 1;
    }


    Und:
    new cInfo[MAX_VEHICLES][carEnum];

    Um von einem Name auf eine ID schließen zu können kannst du das hier verwenden:
    stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(!strcmp(l_name,l_PlayerName, true)) return i;
    }
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(strfind(l_name,l_PlayerName,true)!=-1) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }


    new id = ReturnPlayerID("NAME_DES_BOTS");

    Das dynamic verhindert, dass die Meldung kommt, und diese Meldung kommt, weil du zu viele Variablen mit zu großer Größe verwendest, sprich du verbrauchst viel Speicher. Durch das dynamic hast du die Möglichkeit mehr Speicher zu belegen.

    return GivePlayerMoney(playerid, -hInfo[playerid][Mietpreis]);
    Zu
    return GivePlayerMoney(playerid, -hInfo[i][Mietpreis]);


    Bzw
    GivePlayerMoney(playerid, -hInfo[i][Mietpreis]);
    Falls man sich in mehrere Häuser einmieten kann.