Beiträge von Jeffry

    Hab noch nie mit dem Objekt gearbeitet. Aber anstatt den unseriösen Vorpostern zu vertrauen, solltest du es lieber selbst ausprobieren.


    Das ist eine interessante Methode, wenn du es so sagst. Dein erster Post sah ja zu Anfangs auch nicht so aus, den hast du nach meinem Post noch geändert, sonst hätte die Sache etwas mehr Sinn ergeben, da stand aber nur "CreatePlayerObject" und das wars. ;)


    Wenn man das ganze so macht, dann würde ich noch
    PlayerPlaySound(playerid, 1159,x,y,z);
    hinzufügen, damit du den Sound hast.


    Wobei die Aussage immer noch gilt: Explosionen können nicht für einzelne Spieler angezeigt werden.
    Man kann jedoch eine Explosion nachbauen (Thx @ Aki für die Objekt ID).

    Also, das liegt daran, dass die Abfrage nie aufgerufen wird. Du musst folgendes machen:



    if(i == sizeof(TicketsUsed)) return SendClientMessage(playerid,COLOR_GRUEN,"Es sind gerade alle Ticket Slots belegt. Bitte versuche es später erneut.");
    Aus der schleife entfernen.


    freeID=-1;
    Vor die schleife setzen.


    if(freeID == - 1) return SendClientMessage(playerid,COLOR_GRUEN,"Es sind gerade alle Ticket Slots belegt. Bitte versuche es später erneut.");
    Nach der schleife einfügen.

    stock SendCNR(color, text)
    stock SendFree(color, text)


    zu:
    stock SendCNR(color, text[])
    stock SendFree(color, text[])


    text ist jeweils ein String und muss auch als solcher gekennzeichnet werden. :)

    Hei, wenn ich davor "else" mache also vor dem if kommen dann errors...


    Ja. Das kannst du dir ganz leicht merken, dass das nicht geht:


    Wenn (if) x, dann ({ }) y, ansonsten (else) z.
    Den Satz kannst du auch nicht umdrehen, und so ist es mit if und else. Erst if, dann else (falls nötig).

    new Float:DtcSonstiges[AUTOHAUSER][5][4] = { //Zahlen berichtigt.
    {//2Räder LS
    {1219.4432, -1427.3168, 13.3602, 0.0}, // Info Zeichen etc.
    {1219.3173, -1441.6929, 44.7522, 340.2388}, // LiveView Car
    {1212.9812, -1443.4077, 45.1510, 0.0}, // LiveView Cam
    {1209.7979, -1448.4766, 45.2224, 0.0}, // LiveView Player
    {1219.2841, -1421.4926, 13.2727, 178.5745} // LiveView Player Exit
    },
    {//LS CarSeller
    {2794.5720, -1087.7042, 30.7188, 0.0}, // Info Zeichen etc.
    {2793.1926, -1074.0157, 93.9885, 301.3163}, // LiveView Car
    {2795.6467, -1066.9978, 94.1871, 0.0}, // LiveView Cam
    {2803.5083, -1067.1490, 94.1871, 0.0}, // LiveView Player
    {2805.2322,-1089.1576,30.7310, 359.2809} // LiveView Player Exit
    },
    {//LS AIRPORT
    {1768.4802,-2433.6174,13.5547,358.4647}, // Info Zeichen etc.
    {1765.1451,-2286.7554,26.7960,313.5673}, // LiveView Car
    {1765.4340,-2271.0989,31.0900,181.3627}, // LiveView Cam
    {1765.4340,-2271.0989,31.0900,181.3627}, // LiveView Player
    {1778.3945,-2432.7996,13.5547,171.6871} // LiveView Player Exit
    },
    //bootautohaus
    {
    {-206.7942, -1778.8412, 1.8197, 0.0}, //Infozeichen
    {1248.7789, -2382.5952, 8.3920, 0.0}, // liveView Car
    {1241.7362, -2390.6350, 12.4744, 0.0}, //Campos
    {1222.8789, -2415.5544, 10.2585, 0.0},//playapos
    {-147.2765, -1789.9833, 1.1003, 0.0} //Exit view
    } //HIER HAB ICH DAS SEMIKOLON WEG GEMACHT!
    };


    Falls die anderen Errors damit nicht behoben sind, dann poste bitte den Teil mit dem Fehler komplett, also von "new" bis zur letzten "}". Mit so Schnipsel wie du bei "Zeilen davor" hast, kann man nichts anfangen.

    Ich glaube worauf er hinaus ist, ist ocmd. Da ich dich ja auch mal wegen sscanf gefragt hatte und du glaube ein schlechtes Bild über sscanf hast.


    Meines Wissens nach ist OCMD Ressourcenschonender, eigentlich alle (seriösen) Command Prozessoren sind schonender (wobei wir hier von Bruch-Millisekunden reden).


    Ja, stimmt. Ich habe ein schlechtes Bild von sscanf und das zurecht. Das hier aufzuführen würde aber zu lange dauern. Es muss jeder für sich selbst entscheiden es zu benutzen oder nicht. Ich rate davon ab.
    Aber kommen wir nicht vom Thema ab.


    Was er schlichtweg meinte, war, dass dieses gequetschte Zeugs schonender sei, und das stimmt nicht. Und schon zweimal nicht schonender für den, der den Code liest.


    Sigi: Du sagst du magst es nicht. Du bist doch der Herr des Scripts, mach es doch so wie du es magst, und nicht so wie es dir einer sagt, der zudem keine Ahnung hat. ;)

    Ich mags auch nicht so zu scripten Jeffry aber mir wurde gesagt wenn man es so scriptet das es ressourcerschonend ist ;o


    Absoluter Müll. Dem Compiler und Server ist es völlig wurscht wie viele Zeilenumbrüche du im Code hast. Du kannst auch 10 zwischen jede Zeile machen, das macht keinen Unterschied.
    Der, der dir das erzählt hat, hat dir entweder einen Streich gespielt, oder hat wirklich keine Ahnung. ;)

    Meine Güte. wer programmiert den so. Da erkennt man ja gar nichts mehr.


    Ich hab dir das mal ausgebessert. Wenn ich das richtig verstanden habe, was der Code machen sollte, dann waren da paar Dinge an der falschen Stelle, was bei dem Durcheinander auch kein Wunder ist.


    Code:

    Spoiler anzeigen
    if(strcmp(cmd,"/base",true) == 0)
    {
    new SpielerName[MAX_PLAYER_NAME],tmp[256];
    GetPlayerName(playerid,SpielerName,sizeof(SpielerName));
    tmp = strtok(cmdtext,idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid,COLOR_GREY,"FEHLER: /base [aufschließen/abschließen]");
    return 1;
    }
    if(strcmp(tmp,"aufschließen",true) == 0)
    {
    if(SpielerInFraktion(playerid,13))
    {
    //Yakuza Eingang
    if(SpielerInfo[playerid][pRank] >= 2)
    {
    if(YAKUZAEINGANGAUF == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid, 2,-2624.6577,1412.7295,7.0938))
    {
    format(string, sizeof string,"%s hat die Eingangstür aufgeschlossen.",SpielerName);
    SendClientMessage(playerid,COLOR_SPECIALBLUE,string);
    YAKUZAEINGANGAUF = 1;
    YAKUZAEINGANGZU = 0;
    }
    else SendClientMessage(playerid,COLOR_GREY,"Du bist nicht an dem Eingang, deiner Fraktionsbasis");
    }
    else SendClientMessage(playerid,COLOR_GREY,"Deine Base ist bereits aufgeschlossen.");
    }
    else SendClientMessage(playerid,COLOR_GREY,"Du hast nicht den benötigten Rank dafür.");
    }
    else if(SpielerInFraktion(playerid,14))
    {
    //LCN Eingang
    if(SpielerInfo[playerid][pRank] >= 2)
    {
    if(LCNEINGANGAUF == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid,2,1492.6390,748.6784,11.0234))
    {
    format(string,sizeof string,"%s hat die Eingangstür aufgeschlossen.",SpielerName);
    SendClientMessage(playerid,COLOR_SPECIALBLUE,string);
    LCNEINGANGAUF = 1;
    LCNEINGANGZU = 0;
    }
    else SendClientMessage(playerid,COLOR_GREY,"Du bist nicht an dem Eingang, deiner Fraktionsbasis");
    }
    else SendClientMessage(playerid,COLOR_GREY,"Deine Base ist bereits aufgeschlossen.");
    }
    else SendClientMessage(playerid,COLOR_GREY,"Du hast nicht den benötigten Rank dafür.");
    }
    else SendClientMessage(playerid,COLOR_GREY,"Du darfst dieses Befehl nicht benutzen.");
    }
    else if(strcmp(tmp,"abschließen",true) == 0)
    {
    if(SpielerInFraktion(playerid,13))
    {
    //YAKUZA EINGANG
    if(SpielerInfo[playerid][pRank] >= 2)
    {
    if(YAKUZAEINGANGZU == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid, 2, -2624.6577,1412.7295,7.0938))
    {
    format(string, sizeof string,"%s hat die Eingangstür abgeschlossen.", SpielerName);
    SendClientMessage(playerid,COLOR_SPECIALBLUE,string);
    YAKUZAEINGANGZU = 1;
    YAKUZAEINGANGAUF = 0;
    }
    else SendClientMessage(playerid,COLOR_GREY,"Du bist nicht an dem Eingang, deiner Fraktionsbasis!");
    }
    else SendClientMessage(playerid,COLOR_GREY,"Deine Base ist bereits abgeschlossen.");
    }
    else SendClientMessage(playerid,COLOR_GREY,"Du hast nicht den benötigten Rank dafür.");
    }
    else if(SpielerInFraktion(playerid,14))
    {
    //LCN Eingang
    if(SpielerInfo[playerid][pRank] >= 2)
    {
    if(LCNEINGANGZU == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid,2, 1492.6390,748.6784,11.0234))
    {
    format(string,sizeof string,"%s hat die Eingangstür abgeschlossen.", SpielerName);
    SendClientMessage(playerid, COLOR_SPECIALBLUE, string);
    LCNEINGANGZU = 1;
    LCNEINGANGAUF = 0;
    }
    else SendClientMessage(playerid,COLOR_GREY,"Du bist nicht an dem Eingang, deiner Fraktionsbasis!");
    }
    else SendClientMessage(playerid,COLOR_GREY,"Deine Base ist bereits abgeschlossen.");
    }
    else SendClientMessage(playerid,COLOR_GREY,"Du hast nicht den benötigten Rank dafür.");
    }
    else SendClientMessage(playerid,COLOR_GREY,"Du darfst dieses Befehl nicht benutzen.");
    }
    return 1;
    }



    Zwecks ocmd: Es ist völliger Schwachsinn zu sagen, dass man damit übersichtlicher scripten kann. Der Code würde mit ocmd, bis auf die erste Zeile, fast IDENTISCH aussehen!! :pinch:

    response kann nur 1 oder 0 sein. (1 = Enter/Click 0 = ESC)
    Au0erdem stehen die "else" an der falschen Stelle.


    Spoiler anzeigen
    if(dialogid == DIALOG_WF)
    {
    if(response == 1)
    {
    if(listitem == 0)
    {
    if(PlayerInfo[playerid][pCash] >= 1250)
    {
    GivePlayerWeapon(playerid, 22, 42);
    GivePlayerMoneys(playerid, -1250);
    }
    else
    {
    SendClientMessage(playerid, COLOR_ERRORTEXT, "***Ich kann mir das nicht leisten!");
    }
    }

    Spoiler anzeigen
    if(listitem == 1)
    {
    if(PlayerInfo[playerid][pCash] >= 1500)
    {
    GivePlayerWeapon(playerid, 24, 42);
    GivePlayerMoneys(playerid, -1500);
    }
    else
    {
    SendClientMessage(playerid, COLOR_ERRORTEXT, "***Ich kann mir das nicht leisten!");
    }
    }

    Spoiler anzeigen
    if(listitem == 2)
    {
    if(PlayerInfo[playerid][pCash] >= 2500)
    {
    GivePlayerWeapon(playerid, 25, 50);
    GivePlayerMoneys(playerid, -2500);
    }
    else
    {
    SendClientMessage(playerid, COLOR_ERRORTEXT, "***Ich kann mir das nicht leisten!");
    }
    }

    Spoiler anzeigen
    if(listitem == 3)
    {
    if(PlayerInfo[playerid][pCash] >= 3250)
    {
    GivePlayerWeapon(playerid, 28, 25);
    GivePlayerMoneys(playerid, -3250);
    }
    else
    {
    SendClientMessage(playerid, COLOR_ERRORTEXT, "***Ich kann mir das nicht leisten!");
    }
    }

    Spoiler anzeigen
    if(listitem == 4)
    {
    if(PlayerInfo[playerid][pCash] >= 3000)
    {
    GivePlayerWeapon(playerid, 27, 30);
    GivePlayerMoneys(playerid, -3000);
    }
    else
    {
    SendClientMessage(playerid, COLOR_ERRORTEXT, "***Ich kann mir das nicht leisten!");
    }
    }

    Spoiler anzeigen
    if(listitem == 5)
    {
    if(PlayerInfo[playerid][pCash] >=5000)
    {
    GivePlayerWeapon(playerid, 29, 75);
    GivePlayerMoneys(playerid, -5000);
    }
    else
    {
    SendClientMessage(playerid, COLOR_ERRORTEXT, "***Ich kann mir das nicht leisten!");
    }
    }

    Spoiler anzeigen
    if(listitem == 6)
    {
    if(PlayerInfo[playerid][pCash] >= 5250)
    {
    GivePlayerWeapon(playerid, 30, 100);
    GivePlayerMoneys(playerid, -5250);
    }
    else
    {
    SendClientMessage(playerid, COLOR_ERRORTEXT, "***Ich kann mir das nicht leisten!");
    }
    }

    Spoiler anzeigen
    if(listitem == 7)
    {
    if(PlayerInfo[playerid][pCash] >= 6750)
    {
    GivePlayerWeapon(playerid, 31, 125);
    GivePlayerMoneys(playerid, -6750);
    }
    else
    {
    SendClientMessage(playerid, COLOR_ERRORTEXT, "***Ich kann mir das nicht leisten!");
    }
    }

    Spoiler anzeigen
    if(listitem == 8)
    {
    if(PlayerInfo[playerid][pCash] >= 4650)
    {
    GivePlayerWeapon(playerid, 32, 57);
    GivePlayerMoneys(playerid, -4650);
    }
    else
    {
    SendClientMessage(playerid, COLOR_ERRORTEXT, "***Ich kann mir das nicht leisten!");
    }
    }

    Spoiler anzeigen
    if(listitem == 9)
    {
    if(PlayerInfo[playerid][pCash] >= 10000)
    {
    GivePlayerWeapon(playerid, 34, 10);
    GivePlayerMoneys(playerid, -10000);
    }
    else
    {
    SendClientMessage(playerid, COLOR_ERRORTEXT, "***Ich kann mir das nicht leisten!");
    }
    }
    }
    }
    return 1;
    }

    Alles klar, der Start des Timers stimmt. Ich bin nochmal alles Schritt für Schritt durchgegangen:


    Du musst das 3.
    return 1;
    von unten weg machen. Das beendet die Schleife nach einer Abfrage, was falsch ist.


    Code:

    Spoiler anzeigen
    public BusCountdown(playerid)
    {
    if(IsPlayerConnected(playerid))
    {
    new string[128];
    if(Spieler[playerid][Job] == 2)
    {
    for(new i=0;i<sizeof(buscars);i++)
    {
    new vID = GetPlayerVehicleID(playerid);
    if(vID == buscars[i])
    {
    if(IsPlayerInCheckpoint(playerid))
    {
    if(buscd[playerid] == 11)
    {
    buscd[playerid] = 10;
    GameTextForPlayer(playerid, "~w~Warten ...~n~~b~10", 500, 1);
    }
    else if(buscd[playerid] == 10)
    {
    buscd[playerid] = 9;
    GameTextForPlayer(playerid, "~w~Warten ...~n~~b~9", 500, 1);
    }
    else if(buscd[playerid] == 9)
    {
    buscd[playerid] = 8;
    GameTextForPlayer(playerid, "~w~Warten ...~n~~b~8", 500, 1);
    }
    else if(buscd[playerid] == 8)
    {
    buscd[playerid] = 7;
    GameTextForPlayer(playerid, "~w~Warten ...~n~~b~7", 500, 1);
    }
    else if(buscd[playerid] == 7)
    {
    buscd[playerid] = 6;
    GameTextForPlayer(playerid, "~w~Warten ...~n~~b~6", 500, 1);
    }
    else if(buscd[playerid] == 6)
    {
    buscd[playerid] = 5;
    GameTextForPlayer(playerid, "~w~Warten ...~n~~b~5", 500, 1);
    }
    else if(buscd[playerid] == 5)
    {
    buscd[playerid] = 4;
    GameTextForPlayer(playerid, "~w~Warten ...~n~~b~4", 500, 1);
    }
    else if(buscd[playerid] == 4)
    {
    buscd[playerid] = 3;
    GameTextForPlayer(playerid, "~w~Warten ...~n~~b~3", 500, 1);
    }
    else if(buscd[playerid] == 3)
    {
    buscd[playerid] = 1;
    GameTextForPlayer(playerid, "~w~Warten ...~n~~b~2", 500, 1);
    }
    else if(buscd[playerid] == 1)
    {
    buscd[playerid] = 0;
    GameTextForPlayer(playerid, "~w~Warten ...~n~~b~1", 500, 1);
    if(pCP[playerid] == CHECKPOINT_BUSSTART)
    {
    SetPlayerCheckpoint(playerid, 1203.0599,-934.3010,42.3596, 5.0);
    pCP[playerid] = CHECKPOINT_BUSCP1;
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Nächste Haltestelle: Vinewood.");
    }
    else if(pCP[playerid] == CHECKPOINT_BUSCP1)
    {
    SetPlayerCheckpoint(playerid, 742.7133,-1393.4297,13.0455, 5.0);
    pCP[playerid] = CHECKPOINT_BUSCP2;
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Nächste Haltestelle: Vinewood - Intercars.");
    }
    else if(pCP[playerid] == CHECKPOINT_BUSCP2)
    {
    SetPlayerCheckpoint(playerid, 301.2852,-1397.0028,13.5145, 5.0);
    pCP[playerid] = CHECKPOINT_BUSCP3;
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Nächste Haltestelle: Rodeo.");
    }
    else if(pCP[playerid] == CHECKPOINT_BUSCP3)
    {
    SetPlayerCheckpoint(playerid, 354.8143,-1648.1133,32.4861, 5.0);
    pCP[playerid] = CHECKPOINT_BUSCP4;
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Nächste Haltestelle: Rodeo.");
    }
    else if(pCP[playerid] == CHECKPOINT_BUSCP4)
    {
    SetPlayerCheckpoint(playerid, 678.2159,-1760.6434,12.9662, 5.0);
    pCP[playerid] = CHECKPOINT_BUSCP5;
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Nächste Haltestelle: Marina.");
    }
    else if(pCP[playerid] == CHECKPOINT_BUSCP5)
    {
    SetPlayerCheckpoint(playerid, 1153.5178,-1714.3553,13.4061, 5.0);
    pCP[playerid] = CHECKPOINT_BUSCP6;
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Nächste Haltestelle: Conference Center.");
    }
    else if(pCP[playerid] == CHECKPOINT_BUSCP6)
    {
    SetPlayerCheckpoint(playerid, 1479.6708,-1735.2942,13.0075, 5.0);
    pCP[playerid] = CHECKPOINT_BUSCP7;
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Nächste Haltestelle: Commerce.");
    }
    else if(pCP[playerid] == CHECKPOINT_BUSCP7)
    {
    SetPlayerCheckpoint(playerid, 1442.5582,-1524.2251,13.0075, 5.0);
    pCP[playerid] = CHECKPOINT_BUSCP8;
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Nächste Haltestelle: Commerce.");
    }
    else if(pCP[playerid] == CHECKPOINT_BUSCP8)
    {
    SetPlayerCheckpoint(playerid, 1483.9996,-1065.5348,23.2813, 5.0);
    pCP[playerid] = CHECKPOINT_BUSCPENDE;
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Nächste Haltestelle: Mulholland Intersection.");
    }
    else if(pCP[playerid] == CHECKPOINT_BUSCPENDE)
    {
    new rand = 3000 + random(5000);
    Spieler[playerid][PayDayGeld] += rand;
    format(string, sizeof(string), "Die Fahrt ist nun zuende. Du hast $%d verdient und erhälst es am nächsten Zahltag.", rand);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Bus-Erfahrungspunkte sind um 5 aufgestiegen.");
    Spieler[playerid][BusExp] += 5;
    }
    }
    }
    }
    }
    SendClientMessage(playerid, COLOR_GRAD2, "Du bist in keinem Bus.");
    buscd[playerid] = 11;
    KillTimer(bustimer[playerid]);
    return 1;
    }
    }
    return 1;
    }

    Was ist der unterschied zwischen CreateObject und CreateDynamicObject


    CreateObject ist die Standard Funktion von SA-MP um Objekte zu erstellen.


    CreateDynamicObject ist die Funktion zur Erstellung von Objekten mit dem Streamer Plugin: http://forum.sa-mp.com/showthread.php?t=102865


    => Streamer ermöglichen dir es, mehr Objekte in deinem Code zu haben. (Jedoch nicht, mehr Objekte darzustellen.)
    Es werden dir die Objekte angezeigt, denen du nahe bist.