Beiträge von IPrototypeI


    Wieso es so ist weiss ich nicht,du musst aber bei der 3 Dimension die Größe der Strings angeben.


    Der Thread ist zwar älter jedoch wollte ich auch mal eine unklarheit bei dir aufdecken und zwar sind multidimensionale arrays nicht wirklich alle so wirklich multidimensional wie sie definiert wurden
    diese werden zu einem 2 dimensionalem array komprimiert beim compilen im klar text

    new array[5][20][40];


    wird als


    new array[20*40];


    compilt


    new Text3D:LinienbusLabel[sizeof(buscar)];
    for(new i;i < sizeof(buscar);i++){
    LinenbusLabel[i] = Create3DTextLabel("Leerfahrt",WEISS,0,0,0,25,0,1);
    Attach3DTextLabelToVehicle(LinenbusLabel[i],buscar[i],0,0,0);
    }
    if(dialogid == DIALOG_BUS){
    if(response){
    if(listitem == 0){
    new car = GetPlayerVehicleID(playerid);
    for(new i; i< sizeof(buscar); ++i){
    if(car == buscar[i])
    SendClientMessage(playerid,GELB,"Du hast die Buslinie 1 gestartet. N‰chste Haltestelle: Busbahnhof");
    BusInfo[playerid][BusAktiv] = true;
    BusInfo[playerid][Bus_Checkpoint]=0;
    BusInfo[playerid][Bus_ID] = car;
    BusInfo[playerid][Bus_Linie] = 1;
    SetPlayerCheckpoint(playerid,Bus_Stationen_L1[0][Bus_PosX],Bus_Stationen_L1[0][Bus_PosY],Bus_Stationen_L1[0][Bus_PosZ],5.0);
    return Update3DTextLabelText(LinienBusLabel[i],HELLBLAU,"Buslinie Los Santos 1");
    }
    }
    }
    }
    }


    so sollte das passen zu orientier dich bei der größe des arrays an der anzahl deiner busse.


    was ist eigentlich so schwierig für solche kleinen Sachen den PreProcessor zu benutzen

    #define SetPlayerPosF(%0,%1,%2,%3,%4) SetPlayerPos(%0,%1,%2,%3),SetPlayerFacingAngle(%0,%4)

    hau das ganze doch in ein array rein das ist übersichtlicher zu dem hast du noch genug fehler in dem code.


    generel schon hier

    if(IsPlayerInRangeOfPoint(playerid,3.0,HouseInfo[i][hExitx], HouseInfo[i][hExity], HouseInfo[i][hExitz]) && PlayerInfo[playerid][pLocal] == i)


    du schließt direkt die if abfrage

    es gibt zwei lösungen entweder du machst aus dem settimer ein settimerex da er den parameter playerid nicht erkannt hat und somit von 0 ausgegangen ist oder du verwendest eine schleife die für alle spieler gilt.


    Generel ein Timer dafür zu benutzen ist der größte schwachsinn dafür macht man eine extra funktion und ruft diese beim ändern der jeweiligen variabel auf.
    und SetTimerEx also für jeden spieler einen extra Timer ?
    Antwort: unnötig , dan ein loop + SetTimer

    Dafür gibts auch extra PlayerTextdraws


    //edit PlayerTextdraws haben ein anderes Limit als Normale Textdraws , welche per TextDrawCreate erstellt werden.
    Daher sind auch beide von den Limit her unabhängig daher benutze PlayerTextdraw
    new PlayerText:TextdrawName;

    Ahhh! So langsam hab ich geschnallt , vielen Dank ich denke ich habe in etwa verstanden was du meinst!


    Hier siehst du nochmal ein beispiel ist jedoch auf dem neuen Plugin von BlueG bassierend jedoch brauchst du dich davon nicht entmütigen lassen es kommt ja nur auf die
    SQL-Befehle an ^^.


    MySQL Plugin ???


    Jedoch hast du hier nicht viel auswahl möglichkeit im format der Zeit dazu siehe hier mehr http://dev.mysql.com/doc/refman/5.1/de/datetime.html
    Grunsätzlich YYYYMMDD wenn du das umgedreht haben willst geht das auch per SQL Befehl DATE_FORMAT
    hier nochmal nachzulesen


    http://www.electrictoolbox.com…l/format-date-time-mysql/


    Jedoch bin ich mir nicht sicher du kannst glaub ich per
    DATE_FORMAT(NOW(),'%d-%m-%Y')
    im INSERT query das auch als string speichern ich bin mir jedoch nicht sicher.

    Das ganze ist auch per SQL-Befehl ganz einfach zu lösen einfach die jeweilige Tabelle auf timestamp dazu noch das format einstellen/umstellen.
    Nun kannst du das Registrierungsdatum per NOW() in Verbindung beim neu erstellen des Accounts als wo du den Befehl INSERT ausführst hinzufügen. Nun steht auch das aktuelle Datum in der Tabelle. Dann kannst es bequem auch wieder auslesen (SELECT) und in einem Array (String) speichern und weiter verwenden .


    //edit Rechtschreibung verbessert

    Du kannst mit einer variabel arbeiten wo du beim treffen die id der killers zuweisst für den spieler der getötet wurde und das dort demenstsprechend abfrägst oder
    du kannst auf OnPlayerDeath 2mal aufrufen per CallLocalFunction jedoch weiß ich nicht gerade auswendig wie da das GF klar kommt besser ist es
    entweder beim einmal töten der spielers OnPlayerDeath zu beginn abbrechen zu lassen und danach nochmal aufzurufen per CallLocalFunction.


    //edit 3 möglichkeit beim töten direkt abfragen ob es ein hitman ist

    lass dir mal PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarPreis] ausgeben und schreibe den wert davon rein sollte dieser 0 sein so wird der preis des fahrzeugs nicht gespeichert es sei den er wird per array übermittelt jedoch gehe ich mal nicht davon aus . zu dem floatround wird nur bei floats benutzt ein integer wird durch das teilen durch 2 keine Float sondern rundet sich selbst.

    den wert von vehID musst du auch verändern der ist grundsätzlich 0 .
    Daher solltest du dir ausgeben lassen in welchem Fahrzeug der spieler sitzt von den Bussen.


    Daher benutz eine For-schleife geh durch alle Busse durch sollte der spieler in dem jeweiligen buss drinne sein ( if abfrage hier bei IsPlayerInvehicle( buscar[i]))
    so breche die schleife ab und setzte dan das jeweilige label auf den jeweiligen text.


    //edit


    zu dem mit == kannst du keinen wert übergeben sondern nur vergleichen in einer if abfrage daher entferne dort ein gleichzeichen


    LinenbusLabel[buscar[i]] == Create3DTextLabel("Leerfahrt",WEISS,0,0,0,25,0,1);


    LinenbusLabel[buscar[i]] = Create3DTextLabel("Leerfahrt",WEISS,0,0,0,25,0,1);

    stock ShowStats(playerid)
    {
    new string[128], frakname[20], rangname[25];
    switch(GetPVarInt(playerid, "Fraktion")){
    case 0:frakname = "Zivilist";
    case 1:frakname = "LS Police";
    }
    if(GetPVarInt(playerid, "Fraktion") == 0){
    if(GetPVarInt(playerid, "Rang") == 1) rangname = " - ";
    }else if(GetPVarInt(playerid, "Fraktion") == 1){
    switch(GetPVarInt(playerid, "Rang") ){
    case 1:rangname = "LS Anwärter";
    case 2:rangname = "LS Hauptwachtmeister";
    case 3:rangname = "LS Polizeimeister";
    }
    }
    format(string, 128, "Name: %s\n\nLevel: %i\nRespektpunkte: %i/15\nFraktion: %s Rang: %s\n", SpielerName(playerid), GetPlayerScore(playerid), GetPVarInt(playerid, "Respektpunkte"), frakname, rangname);
    ShowPlayerDialog(playerid, DIALOG_STATISTIK, DIALOG_STYLE_MSGBOX, "Deine Statistiken", string, "Ok", "");
    return 1;
    }


    Also für ein paar Zeichen ein string von der größe 258 ist nur dummheit genau so wie die deklaration von 1024.
    Nun gut von dem rest will ich jetzt garnicht anfangen.
    Die größe eines strings kannst du dir mit strlen(string[]) ausgeben lassen