Beiträge von Goldkiller

    Schon mal auf die Idee gekommen,zu lesen was in der Fehlermeldung steht?


    Zitat

    error 021: symbol already defined: "GetVehicleName"


    Ist doch ganz klar wo der Fehler liegt.

    stock test(zahl)
    {
    new string[20];
    switch(zahl)
    {
    case 1: incstring="test";
    }
    return string;
    }
    Achte darauf wie du die Variablen nennst! Es gibt incstring und string bei dir.


    stock test(zahl)
    {
    new
    __string[20];
    switch(zahl)
    {
    case 1: __string="test";
    }
    return __string;
    }

    Das hat nichts mit public oder stock zu tun.


    Man kann Strings nur als Variablen zurück geben. Wenn ich mich richtig erinnere müsste es mit bsp 2. zu einem Compiler Crash kommen.

    // funktioniert
    stock StringR() {
    new
    string[] = "Test";
    return string;
    }
    //folgendes wird nicht funktionieren
    stock StringR() {
    return "Test";
    }


    //Edit:
    Doch,das geht auch.Nur musst du wie gesagt vorher den Text einer Variable zuweisen.


    case 1: string = "test";
    // zum Schliss
    return string;

    Wieso antwortest denn jetzt du darauf ?

    Achso.


    Daraus kannst du doch jetzt ablesen,was nicht funktioniert.
    Du hast einen leeren String,kein Text.Also wirst du auch nichts sehen.
    Irgendwas stimmt mit PlayerInfo[playerid][pLabel] nicht.


    new string[128];
    format(string, sizeof(string),"%s", PlayerInfo[playerid][pLabel]);
    printf("DEBUG: string '%s'",string);
    if(!string[0]) {
    string = "Wir haben ein Problem!";
    }
    PlayerLabel[playerid] = Create3DTextLabel(string, 0xFFFFFFFF ,0,0,0,30.0,-1,true);
    printf("DEBUG: PlayerLabel[%d] '%d'",playerid,_:PlayerLabel[playerid]);
    Attach3DTextLabelToPlayer(PlayerLabel[playerid], playerid, 0.0, 0.0, 0.45);

    Dann füg halt Debug Informationen ein und versuch selber den Fehler zu finden:
    new string[128];
    format(string, sizeof(string),"%s", PlayerInfo[playerid][pLabel]);
    printf("DEBUG: string '%s'",string);
    PlayerLabel[playerid] = Create3DTextLabel(string, 0xFFFFFFFF ,0,0,0,30.0,-1,true);
    printf("DEBUG: PlayerLabel[%d] '%d'",playerid,_:PlayerLabel[playerid]);
    Attach3DTextLabelToPlayer(PlayerLabel[playerid], playerid, 0.0, 0.0, 0.45);

    Was bekommst denn für Ergebnisse damit.

    Du solltest den Tank(timer) nicht auf den Spieler beziehen sondern auf das Fahrzeug.Dann kommt es auch nicht zu solchen Problemen.
    Ich denke du hast einfach zu viele Timer für den gleichen Spieler am laufen,weil du die Timer nicht an der richtigen Stelle löschst.

    Wenn schon,dann richtig.
    if(sscanf(params, "uS[128]", pID, sGrund)) {
    if(sscanf(params, "uS(Kein Grund)[128]", pID, sGrund)) { // optionaler Text


    Steht sogar in der von ihm gezeigten Log drin,

    Zitat

    sscanf warning: 'z' is deprecated, consider using 'S' instead.



    //Edit: Ich werd das mal im Tutorial anmerken,dass das für die PAWN Version von SSCANF ist,nicht die Plugin Version.
    //Edit2: Ist drin :-O

    Zitat

    SendMail( to[], sender_email[], sender_name[], subject[], message[] );


    sendMail( "stunt-dm.madahost.de", "nickman@stunt-dm.madahost.de", absender, "Test-mail", minhalt);


    Du solltest dir auch nochmal deine sscanf Zeile anschauen und wie du die Variable absender nutzt.Da stimmt etwas ebenfalls nicht.

    Nicht wirklich, außer dass 2048 der größtmögliche String ist...


    Wo haste denn die Information her.
    Abgesehen davon dass es eh ein Array ist,kann Ich bei mir welche erstellen die 14401 Felder haben :S .



    Darf man wissen wieso du den Ort als String unbedingt brauchst und nicht einfach anhand der Koordinaten den Ort berechnest?

    Dafür wäre es wohl am besten eine eigene Funktion zu schreiben.
    Ich würde dafür ein Array durchsuchen nach einem bestimmten Eintrag.
    new
    aVehicles[] = {
    445,
    602,
    429,
    422,
    401,
    541
    // usw
    };


    stock IsVehicleInArray(array[], model) {
    for(new i ; i < sizeof(array) ; i++) {
    if(model == array[i]) {
    return 1;
    }
    }
    return 0;
    }
    public OnDeineFunktion()
    {
    if(IsVehicleInArray(aVehicles,modelid)) {
    printf("in array");
    }
    else {
    printf("nicht in array");
    }
    return 1;
    }

    //Gangzonen
    new GFraktion,Float:GKoord1,Float:GKoord2,Float:GKoord3,Float:GKoord4;
    new File:gop = fopen(GangZoneDatei,io_read);
    new geingabe[256];
    if(gop)
    {
    printf("gop geöffnet!");
    while(fread(gop,geingabe))
    {
    // StripNL(geingabe) wäre hier gut
    printf("geingabe '%s'",geingabe);
    if( sscanf(geingabe,"p<,>iffff",GFraktion,GKoord1,GKoord2,GKoord3,GKoord4) ) {
    printf("-- Fehler bei sscanf");
    }
    printf("ZoneAmount %d",ZoneAmount);
    GangZoneInfo[ZoneAmount][gFraktion] = GFraktion;
    GangZoneInfo[ZoneAmount][gFarbe] = FraktionColor[GFraktion][0];
    GangZoneInfo[ZoneAmount][gKoord1] = GKoord1;
    GangZoneInfo[ZoneAmount][gKoord2] = GKoord2;
    GangZoneInfo[ZoneAmount][gKoord3] = GKoord3;
    GangZoneInfo[ZoneAmount][gKoord4] = GKoord4;
    printf("Frak: %d",GFraktion);
    printf("K1: %f",GKoord1);
    printf("K2: %f",GKoord2);
    printf("K3: %f",GKoord3);
    printf("K4: %f",GKoord4);
    GangZoneInfo[ZoneAmount][gZoneID] = GangZoneCreate(GangZoneInfo[ZoneAmount][gKoord1],GangZoneInfo[ZoneAmount][gKoord2],GangZoneInfo[ZoneAmount][gKoord3],GangZoneInfo[ZoneAmount][gKoord4]);
    printf("gZoneID %d",GangZoneInfo[ZoneAmount][gZoneID]); // <- NEU
    ZoneAmount ++;
    SendClientMessageToAll(COLOR_GREEN,"Gangzone geladen");
    }
    fclose(gop);
    }
    else {
    printf("gop konnte nicht geöffnet werden");
    }
    Bei dir ist aber auch miny mit maxy vertauscht.
    10,1160.214721,-877.017517,1240.978881,-950.182922
    -877.017517 ist größer als -950.182922 , daher musst du es auch vertauschen in der Datei. Du könntest natürlich auch n bischen scripten damit es automatisch getauscht wird, falls es falsch herrum angegenen wird.


    Also müsste in der Datei stehen:

    Zitat

    10,1160.214721,-950.182922 ,1240.978881,-877.017517


    Sollte es immernoch nicht angezeigt werden, schau nach ob du auch wirklich GangZoneShowForPlayer benutzt wenn der Spieler den Server betritt und es auch eine Farbe ist,die nicht unsichtbar ist.


    Poste auch direkt die Log falls es nicht geht.

    Dann knall doch den Code voll mit print() bzw Debug-Notes.


    //Gangzonen
    new GFraktion,Float:GKoord1,Float:GKoord2,Float:GKoord3,Float:GKoord4;
    new File:gop = fopen(GangZoneDatei,io_read);
    new geingabe[256];
    if(gop)
    {
    printf("gop geöffnet!");
    while(fread(gop,geingabe))
    {
    // StripNL(geingabe) wäre hier gut
    printf("geingabe '%s'",geingabe);
    if( sscanf(geingabe,"p<,>iffff",GFraktion,GKoord1,GKoord2,GKoord3,GKoord4) ) {
    printf("-- Fehler bei sscanf");
    }
    printf("ZoneAmount %d",ZoneAmount);
    GangZoneInfo[ZoneAmount][gFraktion] = GFraktion;
    GangZoneInfo[ZoneAmount][gFarbe] = FraktionColor[GFraktion][0];
    GangZoneInfo[ZoneAmount][gKoord1] = GKoord1;
    GangZoneInfo[ZoneAmount][gKoord2] = GKoord2;
    GangZoneInfo[ZoneAmount][gKoord3] = GKoord3;
    GangZoneInfo[ZoneAmount][gKoord4] = GKoord4;
    printf("Frak: %d",GFraktion);
    printf("K1: %f",GKoord1);
    printf("K2: %f",GKoord2);
    printf("K3: %f",GKoord3);
    printf("K4: %f",GKoord4);
    GangZoneInfo[ZoneAmount][gZoneID] = GangZoneCreate(GangZoneInfo[ZoneAmount][gKoord1],GangZoneInfo[ZoneAmount][gKoord2],GangZoneInfo[ZoneAmount][gKoord3],GangZoneInfo[ZoneAmount][gKoord4]);
    ZoneAmount ++;
    SendClientMessageToAll(COLOR_GREEN,"Gangzone geladen");
    }
    fclose(gop);
    }
    else {
    printf("gop konnte nicht geöffnet werden");
    }
    Versuch es auch mal so:
    #define GangZoneDatei "/Zones/Gangzones.ini"
    Ich würde auch schauen ob der Ordner wirklich Zones heisst und nicht zones oder Gangzones.ini und nicht gAnGzOnEs.INI.Groß & Klein-Schreibung kann wichtig sein.


    Man merkt,dass du C++ durcharbeitest. Ich habe mich auch mal durch ein Videotutorial ( Video2Brain C++ ) gearbeitet aber auch bemerkt,dass einiges absolut nicht so ist wie in PAWN.Deswegen halte Ich es für keine Gute Idee erst C++ zu lernen und daraus folgend PAWN. Vorallem soll ja C++ schwerer sein, deswegen würde Ich ja mit dem leichterem, in dem Fall PAWN anfangen.


    delete gibt es in PAWN nicht, dort wird es automatisch gelöscht.Soweit Ich mich erinnere gehörte in C++ new mit delete zusammen ( Dynm. Speicher Allc ? ), denn dort muss man Variablen immer selber löschen / zerstören. Hoffe mal das ist wenigstens halbwegs richtig, ist schon n' Weile her dass Ich mir C++ angeschaut habe.
    Wollte eigentlich schon viel früher hier posten, hab den Thread aber aus den Augen verloren :/