Beiträge von ErikSon

    Hey,
    habe ein System gescriptet, womit man Objekte ingame erstellen und bearbeiten kann.
    Beim Bearbeiten habe ich jedoch ein Problem, und zwar ändert sich die Rotation und Position nicht.
    else if(newkeys == KEY_ANALOG_DOWN) //Numpad 2
    {
    if(Spieler[playerid][EObj] <= 0)return 1;
    new obj = Spieler[playerid][EObj];
    new Float:rx,Float:ry,Float:rz; GetDynamicObjectRot(Objekt[obj][o_obj],rx,ry,rz);
    SetDynamicObjectRot(Objekt[obj][o_obj],rx+0.5,ry,rz);
    return StopDynamicObject(Objekt[obj][o_obj]);
    }
    else if(newkeys == KEY_ANALOG_LEFT) //Numpad 4
    {
    if(Spieler[playerid][EObj] <= 0)return 1;
    new obj = Spieler[playerid][EObj];
    new Float:rx,Float:ry,Float:rz; GetDynamicObjectRot(Objekt[obj][o_obj],rx,ry,rz);
    SetDynamicObjectRot(Objekt[obj][o_obj],rx,ry,rz-0.5);
    return StopDynamicObject(Objekt[obj][o_obj]);

    Bei der Veränderung mit "Numpad 4" klappt es, mit "Numpad 2" jedoch nicht..
    Ist dort irgendwas dran falsch?

    Das ist kein Error, sondern ein Warning..
    Du hast es nicht richtig eingerückt..
    Machs so:

    if(IsPlayerConnected(player1) && player1 != INVALID_PLAYER_ID)
    {
    if(AccInfo[player1][LoggedIn] == 1)
    {
    if(level > AccInfo[playerid][Level])
    {
    format(string,sizeof(string), "You can't use /setlevel on %s .", pName(player1));
    return SendClientMessage(playerid, yellow, string);
    }


    if(level > ServerInfo[MaxAdminLevel]) return SendClientMessage(playerid,red,"** Admin has already this Level!"); // [(2452) : warning 217: loose indentation]
    format(string,sizeof(string),"* Admin %s has granted premanent Administrator Level %d to %s.", pName(playerid), level, pName(player1));
    MessageToAdmins(yellow, string);


    GetPlayerName(player1, playername, sizeof(playername));
    GetPlayerName(playerid, adminname, sizeof(adminname));
    new year,month,day;
    new hour,minute,second;
    getdate(year, month, day);
    gettime(hour,minute,second);
    //hier dann dein weiterer Code


    Mach es doch so:
    if(killerid != INVALID_PLAYER_ID)
    {
    SetPlayerPos(playerid,2044.4293,-1402.7386,68.3260);
    SetPlayerCameraPos(playerid,1996.2949,-1451.4928,13.5547);
    SetPlayerCameraLookAt(playerid,1998.0272,-1449.7122,13.5594+1);
    TogglePlayerControllable(playerid, 0);
    }


    Der andere Teil war das Problem..

    Naja wenn du die ATM's 1,2,3,4,5 erstellst (ID), und den ATM 4 löschst hast du nur noch 1,2,3,5 - 4 existiert nicht, ist aber größer als 0, also wird die ID auch durchgelaufen ^^
    Also mach es wie Cireyses:
    ErikSon:


    Ich vermute, dass er die ID von 4 dann auf 0 setzt, mit ID meint er einen Wert vom Enum nicht die vom Array. - Vermute ich.


    Richtig..
    Wenn ich es so machen würde, wie @Paradoxon:, würde das Ganze ja gar keinen Sinn ergeben ;)

    Ich habe in meinem Enum immer eine Variable bool:Used,
    beim erstellen eines Objektes wird dieser auf true gesetzt, beim zerstören wieder auf false.
    Damit kannst du dann eine Schleife durchgehe mit nur den benutzten Objeckten (..[][Used] == true).
    Oder bei einem Befehl wo du die ID vom z.B. dem ATM eingeben musst, kannst du abfragen ob
    es überhaupt existiert.


    Achso..
    Genau die Variante benutze ich auch ;)
    Ich frage ab, ob die ID des Automaten > 0 sein muss..
    Wenn man einen Automaten erstellt, hat er direkt die ID 1..
    Ist also genau das Gleiche..
    Trdm danke dir!

    Bin mir nicht ganz sicher, hatte diesen Fehler noch nie, aber schau dir die DICK geschrieben Zeichen an

    Versuch mal einen Wert von z.B 5 rein zuschreiben.


    Stimmt, habe den Wert nicht definiert..
    Kann man es nicht auch ohne den Wert?


    PS:

    Es gibt auch andere Wege nur die ATMs durchzufragen die auch vorhanden sind.


    Kenne ein Paar, jedoch will ich gerne mal wissen, welche du meinst ;)
    Wäre nett, wenn du welche postest, jedoch nicht unbedingt nötig!

    Hey,
    habe einen Fehler in diesem Code:
    new ATM[][EATM]; // So definiert ( EATM ist ein "enum" )
    for(new i = 1; i<sizeof(ATM); i++) //Fehlerzeile


    Fehler: indeterminate array size in "sizeof" expression


    Möchte halt, dass er nur die Automaten durchgeht, die auch existieren..
    Wenn ich jetzt z.B. anstatt "sizeof(ATM)" - "MAX_ATM" hinpacken würde, würde der ja auch unnötige Automaten durchgehen.
    Man könnte ja auch abfragen, ob die ATM-ID <= 0 ist, jedoch möchte ich es lieber so haben, wenn es geht..


    Wo liegt der Fehler?

    Ich weiß, der Thread ist alt, jedoch klappt bei mir die Auto-Complete-Funktion nicht.
    Habe es auch schon mehrmals versucht und auch alles genauso gemacht, wie es hier steht, jedoch klappts iwi nicht ;)
    Also es kommt nichts, wenn ich etwas eingebe..


    Du hast trdm n Fehler drin..
    Du erhöhst die Variable des Automaten und fragst erst danach ab, ob er schon mehr als 15000$ hat..


    Versuch es mal so:
    ocmd:moneydrop(playerid)
    {
    new vehid, string[136];
    if(PlayerInfo[playerid][pJob] != 22)return SendClientMessage(playerid, -1, "Du bist kein Geldlieferant.");
    if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)return SendClientMessage(playerid, -1, "Du sitzt in keinem Fahrzeug.");
    new carid = GetPlayerVehicleID(playerid);
    if(!IsASecuricar(carid))return SendClientMessage(playerid, -1, "Du sitzt in keinem Geldtransporter.");
    for ( new i; i < sizeof(Lieferantveh); i++)
    {
    if(carid != Lieferantveh[i])continue;
    vehid = i;
    }
    if(MoneyLoad[vehid] == 0)return SendClientMessage(playerid, -1, "Der Geldtransporter ist nicht beladen.");
    for(new i;i<sizeof(aInfo);i++){
    if(!IsPlayerInRangeOfPoint(playerid, 3.0, aInfo[i][a_x], aInfo[i][a_y], aInfo[i][a_z]))continue;
    else if(aInfo[i][LoadValue] > 15000)return SendClientMessage(playerid, -1, "Der Automat hat bereits, $15.000");
    aInfo[i][LoadValue] += 100;
    }
    new rand = 300 + random(200);
    GivePlayerMoney(playerid, rand), MoneyLoad[vehid] = 0;
    format(string, sizeof(string), "ERFOLGREICH: {FFFFFF}Du hast den Geldtransporter erfolgreich entladen. Verdienst: $i", rand);
    return SendClientMessage(playerid, COLOR_GREEN, string);
    }

    Was genau funktioniert denn nicht?


    for(new i;i<sizeof(aInfo);i++){
    if(!IsPlayerInRangeOfPoint(playerid, 3.0, aInfo[i][a_x], aInfo[i][a_y], aInfo[i][a_z]))continue;
    aInfo[/*?*/][LoadValue] += 100; // Hier
    }
    if(aInfo[tmp_id][LoadValue] > 15000)return SendClientMessage(playerid, -1, "Der Automat hat bereits, $15.000");
    aInfo[tmp_id][LoadValue] += 100; // Hier


    Warum ist das doppelt?

    Hey,
    habe hier nen Code:
    new dir:dHandle = dir_open("./scriptfiles/Accounts/");
    new item[40], type;


    while(dir_list(dHandle, item, type))
    {
    if(type == FM_FILE)
    {
    printf("%s / Adminlevel = %d",item,dInt(item,"Admin"));
    if(dInt(item,"Geld") >= 0)printf("%s hat Geld!",item);
    }
    }
    dir_close(dHandle);
    Jedoch steht immer, dass ich Adminlevel 0 habe und es kommt auch nicht die Nachricht, dass ich Geld habe..
    Ich habe das ganze unter OnGameModeInit gemacht, um mit der Funktion erstmal klar zukommen, jedoch klappts nicht ;)
    Wie gesagt, er zeigt an, dass ich nichts besitze, obwohl ichs besitze..
    Woran liegt das?