Beiträge von Jeffry

    Ändere den Kopf mal zu:
    new SkinData[][e_SkinData] =


    Wenn es dann nicht geht dann brauchen wir das ganze Array. Entweder du postest es hier, oder, wie ich grade in deiner PN gesehen habe, schicke es mir per PN, wenn du es nicht komplett öffentlich haben willst.

    Also so ganz blick ich in deinem System noch nicht durch, daher kann ich nicht nachvollziehen warum sich das Objekt "klont", da müsste man mal den Code sehen, mit dem du das Objekt verschiebst.
    Zwecks dem angezeigten Pin, ändere mal folgende Dinge:


    new Pin = random(15);
    switch(Pin)
    {
    case 0: Pin = 1;//4564;
    case 1: Pin = 2;//4563;
    case 2: Pin = 3;//7456;
    case 3: Pin = 4;//4567;
    case 4: Pin = 5;//1047;
    case 5: Pin = 6;//4507;
    case 6: Pin = 7;//4467;
    case 7: Pin = 8;//3217;
    case 8: Pin = 9;//1454;
    case 9: Pin = 10;//4204;
    case 10: Pin = 11;//3448;
    case 11: Pin = 12;//4045;
    case 12: Pin = 13;//4254;
    case 13: Pin = 14;//6542;
    case 14: Pin = 15;//6542;
    case 15: Pin = 16;//6547;
    }
    SetPVarInt(playerid,"Pin",Pin);
    zu:
    SetPVarInt(playerid,"Pin",random(15)+1);
    Dann sparst du dir den switch.


    Und dann:
    format(string,sizeof(string),"[Pin: %i]",GetPVarInt(playerid,"Pin"));
    zu:
    format(string,sizeof(string),"[Pin: %s]",pin);


    Allerdings weiß ich nicht warum du das als String in "pin" speicherst.



    Die Timer musst du so ändern:
    SetTimer("Freiheit",1000,false);
    zu:
    SetTimerEx("Freiheit", 1000, false, "d", playerid);


    Sonst übergibst du die playerid nicht. Das musst du natürlich bei allen diesen Timern machen, auch bei Freiheit2 und Freiheitback.

    .Moersy:
    Das ist, hinsichtlich des Fehlers, egal, ein Leerzeichen ist dort möglich. Leerzeichen werden an vielen Stellen (natürlich nicht überall), genauso wie Zeilenumbrüche vom Compiler ignoriert.

    So:
    CMD:admins(playerid)
    {
    if(!IsLoggedIn(playerid)) return SendClientMessage(playerid,COLOR_GRAU,"Du bist nicht eingeloggt.");
    new string[145];
    SendClientMessage(playerid,COLOR_GRAU,"Aktive Team-Mitglieder:");
    for(new i=0,j=GetMaxPlayers();i<j;i++)
    {
    if(IsPlayerConnected(i) && Spieler[i][pLoggedIn] && Spieler[i][pAdmin] > 0)
    {
    format(string,sizeof(string),"%s: %s",GetName(i),GetPlayerAdminName(i));
    SendClientMessage(playerid,COLOR_GRAU,string);
    }
    }
    return 1;
    }

    Versuche es so:
    cmd:autoparken(playerid, params[])
    {
    printf("InVeh: %d", IsPlayerInAnyVehicle(playerid));
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, dunkelgrün, "Du bist in kein Auto!");
    new vID = GetPlayerVehicleID(playerid);
    for(new i = 0; i < sizeof(AutoInfo); i++)
    {
    printf("i: %d / vID: %d / Fahrzeugid: %d", i, vID, AutoInfo[i][Fahrzeugid]);
    if(vID == AutoInfo[i][Fahrzeugid])
    {
    printf("Besitzer: %s / Name: %s", AutoInfo[i][Besitzer], SpielerName(playerid));
    //Er sucht ab, ob der spieler ein auto besitzt, wenn ja:
    if(!strcmp(AutoInfo[i][Besitzer], SpielerName(playerid)))
    {
    new query[128];
    GetVehiclePos(vID, AutoInfo[i][c_x],AutoInfo[i][c_y],AutoInfo[i][c_z]);
    GetVehicleZAngle(vID,AutoInfo[i][c_r]);
    format(query, sizeof(query), "UPDATE Autos SET x='%f',y='%f',z='%f',r='%f' WHERE id='%i'",AutoInfo[i][c_x],AutoInfo[i][c_y],AutoInfo[i][c_z],AutoInfo[i][c_r],AutoInfo[i][db_id]);
    printf("query: %s", query);
    mysql_function_query(dbhandle,query,false," "," ");
    SendClientMessage(playerid, dunkelgrün, "Du hast dein Auto geparkt.");
    printf("Auto %d wurde geparkt.", i);
    return 1;
    }
    }
    }
    return SendClientMessage(playerid, dunkelgrün, "Du sitzt nicht in deinem Auto!");
    }
    Wenn es nicht geht, poste was im Server Log steht, wenn du den Befehl ausführst.

    SpielerInfo ist nicht deklariert. Es einfach so zu deklarieren macht ja keinen Sinn, weil dann ist es immer 0.
    Wie lädst du denn das Admin Level des Spielers aus der Datei bzw der Datenbank?

    Beim besten Willen, aber so ein Code hat für 99,9% der Leute hier nur einen Verwendungs-Nutzen und keinerlei Änderungs-Nutzen, da sie den Code nicht verstehen, und somit keine Änderungen vornehmen können, ohne alles kaputt zu machen. Zum einen kommt die überkomplizierte Schreibweise, und zum anderen kommt der komplett unübersichtliche Aufbau. Einen solchen Code würde dir in einer halbwegs seriösen Firma keiner abnehmen.
    Zudem gilt unter Programmieren die ungeschriebene Regel, dass pro Zeile nur eine Anweisung kommt. Eine Aneinander-Reihung mit Kommas bringt keinen Nutzen, das einzigste was du damit erreichst ist, dass der Code nicht mehr lesbar ist.
    http://de.wikipedia.org/wiki/Programmierstil



    Übrigens, es wurde bereits eine Version veröffentlicht die zum einen wesentlich mehr kann, und zum anderen ist der Code ist absolut einfach und verständlich gehalten, wie es sein muss.
    [WIP] PEDs Include (controllable GTA pedestrians, AI system, collisions...) - 0.3.7+

    legend: Unterlasse bitte die Vollzitate, besonders in diesem Thread ist das extrem störend.
    Außerdem muss die Funktion dann so aussehen, sonst bekommst du einen Error.


    stock IsPlayerNearVehicle(playerid, vehicleid, Float:range) //©Jeffry
    {
    new Float:x, Float:y, Float:z;
    GetVehiclePos(vehicleid, x, y, z);
    if(IsPlayerConnected(playerid) && GetPlayerDistanceFromPoint(playerid, x, y, z) <= range) return 1;
    return 0;
    }


    Man könnte auch noch abfragen, ob das Fahrzeug existiert, falls man das nicht schon davor macht.
    stock IsPlayerNearVehicle(playerid, vehicleid, Float:range) //©Jeffry
    {
    new Float:x, Float:y, Float:z;
    GetVehiclePos(vehicleid, x, y, z);
    if(IsValidVehicle(vehicleid) && IsPlayerConnected(playerid) && GetPlayerDistanceFromPoint(playerid, x, y, z) <= range) return 1;
    return 0;
    }

    Kleine Frage, wie kann ich abfragen ob einer in der nähe eines Fahrzeuges ist? :whistling:


    Hiermit:
    stock IsAnyPlayerNearVehicle(vehicleid, Float:range) //©Jeffry
    {
    new Float:x, Float:y, Float:z;
    GetVehiclePos(vehicleid, x, y, z);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(GetPlayerDistanceFromPoint(i, x, y, z) <= range) return 1;
    }
    return 0;
    }

    Schreibe es so:
    public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
    {
    switch(weaponid)
    {
    case 10..15, 28, 30..32, 34:
    {
    if(fX != 0.0 && fY != 0.0 && fZ != 0.0)
    {
    SetPlayerPos(playerid,fX,fY,fZ);
    }
    }
    }
    return 1;
    }
    Den return bei der if-Abfrage zu verwenden ist schlecht, denn wenn danach noch Code folgen sollte irgendwann, dann kann das zu Fehlern führen, an denen du ewig suchst wo das Problem liegt.
    Zwecks der mehreren Waffen, nutze den switch. In dem Beispiel gehen die IDs: 10,11,12,13,14,15,28,30,31,32,34
    Das ".." heißt "bis".

    1.) Du erstellst ein Dynamisches Objekt.
    2.) Du brauchst gar kein Objekt erstellen. ;)


    atobj = CreateDynamicObject(1265,0.0,0.0,0.0,0.0,0.0,0.0);
    SetPlayerAttachedObject(playerid,1,atobj,6,Pos[0], Pos[1], Pos[2], Pos[3], Pos[4], Pos[5]);
    zu:
    SetPlayerAttachedObject(playerid,1,1265,6,Pos[0], Pos[1], Pos[2], Pos[3], Pos[4], Pos[5]);