Beiträge von Jeffry

    Bei id musst du nichts eintragen, darfst du auch nicht. ;)


    Warum?
    Du trägst es ja bei SetTimerEx im letzten Parameter ein, deshalb auch das "d", weil du die 1 als Integer (d) nach "id" übergibst.


    forward close(id);
    public close(id) //id = die 1 bzw. die 2 aus SetTimerEx
    {
    if(id == 1) MoveObject(TorL,1517.89, -1545.20, 12.57,4); //Wenn id=1, dann verschiebe TorL
    else if(id == 2) MoveObject(TorR,1529.67, -1545.20, 12.57,4); //Wenn id=2, dann verschiebe TorR
    return 1;
    }

    Ich denke nicht, denn du kannst durch diese ja problemlos durchlaufen, das heißt auch durchschießen, somit wird das Objekt eigentlich nicht getroffen.
    Mit Pflanzen wird den Vorhaben nicht klappen, du musst vielleicht ein Objekt in die Pflanze setzen, welches du durchsichtig machst.

    Gerne, immer fragen wenn was unklar ist, deshalb sind wir da! :)


    Das "d" steht für einen Integer (ganze Zahl) [in dem Fall die 1] der übergeben wird.
    Du kannst anstatt "d" auch "i" schreiben, das geht ebenfalls. d und i = Integer.

    Vielleicht liegt es auch an dem Objekt das du gesetzt hast.
    Ist es ein Objekt durch das man durchlaufen kann?


    Ändere den print auch mal zu:
    printf("playerid: %d | weaponid: %d | hittype: %d | hitid: %d | x:%f | y:%f | z:%f", playerid, weaponid, hittype, hitid, fX, fY, fZ);


    Dann weißt du genau was passiert, wenn du schießt.

    Du hast die falschen Koordinaten eingetragen.
    Ich habe jetzt mal versucht das zu erraten:


    Oben im Code:
    new torL;
    new torR;


    Bei OnGameModeInit:
    torL = CreateObject(971, 1517.89, -1545.20, 12.57, 0.00, 0.00, 90.00);
    torR = CreateObject(971, 1529.67, -1545.20, 12.57, 0.00, 0.00, 90.00);


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/auf", cmdtext, true) == 0)//Öffnet das Tor
    {
    if(IsPlayerInRangeOfPoint(playerid,30.0,1529.67, -1545.20, 12.57))
    {
    MoveObject(torL,1505.67, -1545.20, 12.571, 4);
    SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
    SetTimerEx("close", 5000,false, "d", 1);
    return 1;
    }
    else if(IsPlayerInRangeOfPoint(playerid,30.0,1517.89, -1545.20, 12.57))
    {
    MoveObject(torR,1541.67, -1545.20, 12.57, 4);
    SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
    SetTimerEx("close", 5000,false, "d", 2);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,Rot,"Es ist kein Tor in der Nähe");
    }
    return 1;
    }
    return 0;
    }


    forward close(id);
    public close(id)
    {
    if(id == 1) MoveObject(torL,1517.89, -1545.20, 12.57,4);
    else if(id == 2) MoveObject(torR,1529.67, -1545.20, 12.57,4);
    return 1;
    }

    Ok, sehr komisch. 8|


    Setze den print mal vor das "new query...".
    Dann gehe in den Server und probiere es mit verschiedenen Waffen. Wird das playerid dann mit irgendeiner Waffe geprintet?


    Wenn nein: Hast du auch den 0.3z Server, oder nutzt du nur dessen Includes?

    Hier eine nützliche Funktion, wenn ihr prüfen wollt, ob eine Zahl eine Primzahl ist.


    stock IstPrimzahl(zahl) //©Jeffry
    {
    if(zahl < 0) zahl *= -1;
    if(zahl < 2) return false;
    for(new i = 2; i <= zahl / 2; i++)
    {
    if(zahl % i == 0) return false;
    }
    return true;
    }


    Beispiel zur Nutzung:
    for(new i=0; i<100; i++) if(IstPrimzahl(i)) printf("%d ist eine Primzahl", i);


    Ausgabe:


    Extra Info:
    http://www.spiegel.de/wissensc…ne-primzahl-a-882646.html
    http://www.wissenschaft-aktuel…r_Zeiten___bisher___.html



    Keywords: IstPrimzahl, IsPrimeNumber, Primzahlen, Primenumbers, CheckPrimzahl, CheckPrime, CheckPrimenumber, auf Primzahl prüfen, ist Zahl Primzahl.

    Du darfst OnPlayerCommandText nicht zwei mal definieren.
    Außerdem waren die Klammern falsch gesetzt und es haben Definitionen gefehlt.


    Oben im Code:
    new torL;
    new torR;


    Bei OnGameModeInit:
    torL = CreateObject(971, 1529.67, -1545.20, 12.57, 0.00, 0.00, 90.00);
    torR = CreateObject(971, 1517.89, -1545.20, 12.57, 0.00, 0.00, 90.00);


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/auf", cmdtext, true) == 0)//Öffnet das Tor
    {
    if(IsPlayerInRangeOfPoint(playerid,30.0,1529.67, -1545.20, 12.57))
    {
    MoveObject(torL,1529.67, -1545.20, 12.571, 4);
    SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
    SetTimerEx("close", 5000,false, "d", 1);
    return 1;
    }
    else if(IsPlayerInRangeOfPoint(playerid,30.0,1517.89, -1545.20, 12.57))
    {
    MoveObject(torR,1529.67, -1545.20, 12.57, 4);
    SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
    SetTimerEx("close", 5000,false, "d", 2);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,Rot,"Es ist kein Tor in der Nähe");
    }
    return 1;
    }
    return 0;
    }


    forward close(id);
    public close(id)
    {
    if(id == 1) MoveObject(torL,1517.89, -1545.20, 12.57,4);
    else if(id == 2) MoveObject(torR,1529.67, -1545.20, 12.57,4);
    return 1;
    }

    Debugge es mal und poste dann was im Server Log steht (mit den Zeitstempeln bitte).
    printf("playerid: %d", playerid);
    if(hittype == BULLET_HIT_TYPE_OBJECT)
    {
    printf("amkaputtmachen: %d", amkaputtmachen[playerid]);
    if(amkaputtmachen[playerid] == 1)
    {
    for(new drug=0;drug<MAX_DROGEN;drug++)
    {
    printf("drug: %d -> druggepflanzt: %d", drug, DrogenInfo[drug][druggepflanzt]);
    if(IsPlayerInRangeOfPoint(playerid,3.5,DrogenInfo[drug][DrugX],DrogenInfo[drug][DrugY],DrogenInfo[drug][DrugZ]) && DrogenInfo[drug][druggepflanzt] == 1)
    {
    printf("In Range -> %d == %d (%d)", hitid, rogenInfo[drug][drugobjekt], IsValidObject(hitid));
    if(IsValidObject(hitid) && hitid == DrogenInfo[drug][drugobjekt])
    {
    printf("Passt.");
    DestroyObject(DrogenInfo[drug][drugobjekt]);
    Delete3DTextLabel(DrugText[drug]);
    format(query,sizeof(query),"DELETE FROM drogen WHERE drogenid = '%d'",DrogenInfo[drug][drogenid]);
    mysql_function_query(MYSQLVerbindung,query,false,"","");
    print("Aufruf bei Objekt getroffen!");
    print("Aufruf für return bei ValidObject");
    return true;
    }
    }
    }
    print("Ende for schleife");
    return true;
    }
    }

    if(hittype == BULLET_HIT_TYPE_PLAYER_OBJECT)
    {
    if(amkaputtmachen[playerid] == 1)
    {
    for(new drug=0;drug<MAX_DROGEN;drug++)
    {
    if(IsPlayerInRangeOfPoint(playerid,3.5,DrogenInfo[drug][DrugX],DrogenInfo[drug][DrugY],DrogenInfo[drug][DrugZ]) && DrogenInfo[drug][druggepflanzt] == 1)
    {
    if(IsValidObject(hitid) && hitid == DrogenInfo[drug][drugobjekt])
    {
    DestroyObject(DrogenInfo[drug][drugobjekt]);
    Delete3DTextLabel(DrugText[drug]);
    format(query,sizeof(query),"DELETE FROM drogen WHERE drogenid = '%d'",DrogenInfo[drug][drogenid]);
    mysql_function_query(MYSQLVerbindung,query,false,"","");
    print("Aufruf bei Objekt getroffen!");
    print("Aufruf für return bei ValidObject");
    return true;
    }
    }
    }
    print("Ende for schleife");
    return true;
    }
    } //hier hat noch eine Klammer gefehlt, vergessen zu kopieren nehme ich an.


    Der return muss unter die IsValidObject(hitid) - Abfrage, da sonst die Schleife nach dem ersten Durchlauf beendet wird.
    Wenn du es dort return'st dann wird der print ganz unten ("Ende for schleife") nicht mehr aufgerufen. Wenn der aufgerufen werden soll, musst du das "return true;" innerhalb der Schleife zu "break;" machen.

    Ok danke klappt :) Aber wo war nun der Fehler? ?(


    Du hast unten eine Klammer vergessen zu schließen, dadurch wurde das Callback nicht abgeschlossen.
    Dieser Fehler passiert dir nicht, wenn du pro Klammer einen Tab-Sprung als Einrückung machst, dann weißt du genau, wie viele Klammern du hast und wie viele wieder geschlossen werden müssen.

    Oh, sah so aus als wäre es nur der Anfang. :guckb:


    Schreibe es so:
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/tor1", cmdtext, true) == 0)
    {
    SendClientMessage(playerid,0x002FFF,"Das Tor hat sich geöffnet es schließt sich in 10 sekunden wieder!");
    //MoveObject(tor1,968,1139.9000244,-1674.3000488,13.6999998,00.0000000,00.0000000,90.0000000,2.0);
    SetObjectRot( tor1, 0.0000000,00.0000000,90.0000000);
    SetTimer ("tor1a",10000,false);
    return 1;
    }

    if (strcmp("/tor2", cmdtext, true) == 0)
    {
    SendClientMessage(playerid,0x002FFF,"Das Tor hat sich geöffnet es schließt sich in 10 sekunden wieder!");
    //MoveObject(tor2,1763.3000488,-1912.40002,5.2999985,2.0);
    SetObjectRot( tor2, 0.0000000,00.0000000,90.0000000);
    SetTimer ("tor2a",10000,false);
    return 1;
    }

    if (strcmp("/waffen", cmdtext, true) == 0)
    {
    SendClientMessage(playerid,0x002FFF,"Du hast die Waffen bekommen!");
    GivePlayerWeapon(playerid,22,400);
    GivePlayerWeapon(playerid,25,400);
    GivePlayerWeapon(playerid,26,400);
    GivePlayerWeapon(playerid,27,400);
    GivePlayerWeapon(playerid,28,400);
    GivePlayerWeapon(playerid,29,400);
    GivePlayerWeapon(playerid,30,400);
    GivePlayerWeapon(playerid,31,400);
    GivePlayerWeapon(playerid,32,400);
    GivePlayerWeapon(playerid,34,400);
    GivePlayerWeapon(playerid,35,400);
    GivePlayerWeapon(playerid,36,400);
    GivePlayerWeapon(playerid,37,400);
    GivePlayerWeapon(playerid,16,400);
    GivePlayerWeapon(playerid,17,400);
    GivePlayerWeapon(playerid,18,400);
    GivePlayerWeapon(playerid,3,400);
    GivePlayerWeapon(playerid,4,400);
    GivePlayerWeapon(playerid,5,400);
    GivePlayerWeapon(playerid,7,400);
    GivePlayerWeapon(playerid,8,400);
    return 1;
    }
    return 0;
    }


    Immer schön auf die Einrückung achten, und die Klammern schön untereinander schreiben, dann vergisst du keine.

    Poste bitte mal dein ganzes OnPlayerCommandText. Die paar Zeilen zeigen nur, dass du die Klammern anscheinend wahllos verteilst, aber nicht den direkten Fehler.


    Als Beispiel:
    {
    return 1;
    }
    sowas macht keinen Sinn.
    Das kannst du einfach als
    return 1;
    schreiben.

    das ist für kleien maps ich brauche was für große :o


    Du kannst die defines einfach ändern:
    #define PML_MAX_MAPS 128
    #define PML_MAX_MAP_OBJECTS 500
    #define PML_MAX_MAP_VEHICLES 128


    Mache es zum Beispiel zu:
    #define PML_MAX_MAPS 3
    #define PML_MAX_MAP_OBJECTS 5000
    #define PML_MAX_MAP_VEHICLES 1000


    Beachte aber, dass das Limit für Fahrzeuge 2000 ist, außer du nutzt diese modifizierte Streamer Version: http://forum.sa-mp.com/showthread.php?t=529389

    Ich habe hier mal die Errors aus der 1.5.3 Version entfernt: http://pastebin.com/AL5JqfM8


    Sharpadox:, du kannst ja bei Gelegenheit deinen Code mal auf Funktionalität testen, das heißt ob auch alles so klappt wie es klappen sollte, jetzt da die Errors weg sind.
    CapriZ: Du solltest jetzt eigentlich keine Probleme mehr beim kompilieren haben. Ob die Include funktioniert ist die andere Sache, ich habe nur nach der Syntax geschaut.

    Pille: Ich rette dich schon noch, keine Angst. ^^


    Poste bitte den Code so wie du es gemacht hast, dass es die Groß-/Kleinschreibung ändert.



    EDIT:
    Post unten:
    Pille: Hättest du mal alles gelesen. :D

    Zitat

    Als update kannst du ja einfach name=name machen,


    Alles klar dann!