Beiträge von Goldkiller

    Am besten ist es wenn du dir einige Selfmades mit z.B Anfänger in der Kopfzeile suchst...
    (e)
    Ich habe es so gelernt, das ich hauptsächlich GF und Selfmades gelesen habe einiges lernt man dadurch,...


    Deiner Definition nach ist GF also kein "Selfmade" ? Was ist denn deiner Definition nach ein "Selfmade "?



    Du lernst es am besten in dem du es alleine probierst. Scripten / Coden lernst du nicht nur durch lesen oder durch ständiges Fragen "Wieso klappt dies und jenes nicht?".

    Bevor ihr weiter spekuliert,hier mal was bei gtaforums die Runde machte:


    //Edit: Formatierung

    Ignorieren.
    Der Typ ist nicht der Erste und auch nicht der Letzte der mit einer Anzeige droht. Wieso sich so viele User davon beeindrucken lassen,versteh ich nicht. Bis jetzt habe ich in diesem Forum noch nicht mitbekommen,dass tatsächlich Jemand eine Anzeige bekommen hat.

    Ist das dein ernst?
    Ohne den Code geht sowieso nichts. Ich hab dir jetzt erklärt, wie du den Fehler selber findest. Klatsch den Code voll mit den Debugnachrichten und versuch herauszufinden wo es nicht so funktioniert, wie du es möchtest.

    Ist schlimm,dass man dir alles vor machen muss.
    key = 255.
    Ist "HouseInfo" überhaupt so groß,dass man als Index 255 verwenden kann ? Ich nehme an nicht.
    Denn du kannst ja mal irgendwo probieren folgendes zu machen:
    HouseInfo[255][hRent] = 24;
    // array index out of bounds



    Du hast in deinem PayDay() folgende Zeile:
    new key = PlayerInfo[playerid][pPhousekey];
    Vielleicht liegt das Problem hier.


    Könnte aber auch an folgende Abfrage liegen:
    if(PlayerInfo[playerid][pPhousekey] != 255 || PlayerInfo[playerid][pPbiskey] != 255)
    Ich weiss nicht wie es bei dir funktionieren soll,eventuell musst du anstatt dem || ODER auch einfach nur && UND machen.
    Gut möglich das der 2. Teil einfach nur raus muss aus der Abfrage, " PlayerInfo[playerid][pPbiskey] != 255" da er nicht direkt in Beziehung zu "key" steht.
    Denn selbst wenn "key" 255 ist ( "PlayerInfo[playerid][pPhousekey]" ) , wird der Code ausgeführt, wenn "PlayerInfo[playerid][pPbiskey]" nicht 255 ist.
    Ich denke es liegt an Letzterem.


    Wird wohl an "key" liegen.
    Mach folgendes rein:
    printf("Debug 3.8.3 key = %d",key);


    Dann mach doch mal das.


    Langsam solltest du aber das Prinzip hinter Debugnachrichten verstanden haben ... . Das es wohl an "key" liegt sollte dir wohl klar sein,denn in Beiden Zeilen kommt "key" vor. Ist bestimmt ein "Index out of Array Bounce".Daher zeig was key ausgibt. Musst einfach den Weg zurück verfolgen bis du den Fehler findest.
    In meiner Signatur ist übrigens noch ein Link zu einem Debugnachrichten-Tutorial.

    Das ist etwas komplizierter, da man beim Spawnen nicht die Klasse weiss, die der Spieler ausgewählt hat.
    Deshalb muss man dafür eine extra Variable anlegen.
    Heisst also,du legst eine Variable ( zb. Player_Class[MAX_PLAYERS] )für jeden Spieler an,die speichert,welche Klasse ausgewählt wurde.Dieser Variable weisst du dann die "classid" zu, immer wenn sich eine neue Klasse angeschaut wird ( OnPlayerRequestClass).
    Wenn der Spieler nun spawnt,OnPlayerSpawn, überprüfst du ob die Spielerklasse ( Player_Class ) der Klasse entspricht, die nun im Interior spawnen soll. Ist das der Fall,setzt du ihn ins Interior.


    new
    class_First,
    class_Second,
    class_Third;
    new
    PlayerClass[MAX_PLAYERS];

    public OnGameModeInit()
    {
    // ... Beispiel Klassen
    class_First = AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); // Nicht im Interior
    class_Second = AddPlayerClass(102, 286.800995 , -82.547600, 1001.539978, 269.1425, 0, 0, 0, 0, 0, 0); // Interior
    class_Third = AddPlayerClass(106, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); // Nicht im Interior
    return 1;
    }


    public OnPlayerRequestClass(playerid, classid)
    {
    // ...
    PlayerClass[playerid] = classid;
    return 1;
    }
    public OnPlayerSpawn(playerid) {
    if( PlayerClass[playerid] == class_Second ) {
    // Soll im Interior spawnen!
    SetPlayerInterior(playerid,4);
    }
    // ...
    }

    Zitat

    Was soll denn sonst dahin, anstatt 0.%d? :D


    Schon gut.

    Zitat

    Ab Debug 3.8.3 hängt er sich auf.
    Ich hab mal die GivePlayerMoney Zeile ausgeklammert und schaue jetzt nach. ;)


    Wird wohl an "key" liegen.
    Mach folgendes rein:
    printf("Debug 3.8.3 key = %d",key);

    Es gibt keine Beschränkung bei der Anzahl an print's.
    Also nochmal,
    print("Debug 3.1");
    format(string, sizeof(string), " Kontostand: $%d", PlayerInfo[playerid][pAccount]);
    print("Debug 3.2");
    SendClientMessage(playerid, COLOR_WHITE, string);
    print("Debug 3.3");
    format(string, sizeof(string), " Zinssrate: 0.%d Prozent",tmpintrate);
    print("Debug 3.4");
    SendClientMessage(playerid, COLOR_WHITE, string);
    print("Debug 3.5");
    format(string, sizeof(string), " Zinsen erhalten: $%d", interest);
    print("Debug 3.6");
    SendClientMessage(playerid, COLOR_WHITE, string);
    print("Debug 3.7");
    PlayerInfo[playerid][pAccount] += interest;
    print("Debug 3.8");
    if(PlayerInfo[playerid][pPhousekey] != 255 || PlayerInfo[playerid][pPbiskey] != 255)
    {
    print("Debug 3.8.1");
    format(string, sizeof(string), " Miete: -$%d", rent);
    print("Debug 3.8.2");
    SendClientMessage(playerid, COLOR_WHITE, string);
    print("Debug 3.8.3");
    GivePlayerMoney(playerid, -HouseInfo[key][hRent]);
    print("Debug 3.8.4");
    HouseInfo[key][hTakings] = HouseInfo[key][hTakings]+HouseInfo[key][hRent];
    print("Debug 3.8.5");
    }
    print("Debug4");


    0.%d
    Das soll funktionieren :-0 ?

    Die Funktion sieht nicht ganz so aus,wie du sie benutzen möchtest.
    stock dini_Get(filename[],key[])
    filename = "/gorns_battlemode/main.cfg"
    key = "Gamemode Name"
    ??? = gmn - Es gibt keinen 3. Parameter.


    Ich bin mir nicht ganz sicher,denke aber,dass der key keine Leerzeichen enthalten darf.Du solltest also als Erstes mal aus "Gamemode Name" "GamemodeName" machen.
    Würde dir format,strcat oder Ähnliches empfehlen um den String zu speichern. Daher,
    format( string , sizeof(string) , dini_Get("/gorns_battlemode/main.cfg","GamemodeName") );
    Folgendes geht auch:

    new string[ /*DINI_MAX_STRING*/ 256];
    string = dini_Get("/gorns_battlemode/main.cfg","GamemodeName");
    Das klappt aber nur, wenn string auch die Größe DINI_MAX_STRING hat. Müsste auf 256 definiert sein.
    Dann kannst den Gamemodenamen setzen.
    SetGameModeText(string);

    Hast du dir die Ausgabe mal genauer angesehen ? Weiter als Debug #3 geht es nie.
    Deswegen fügst du Debugnachrichten jetzt auch noch bei "PayDay(playerid)" ein, zeigst den Code und die Ausgabe.
    Denn bei den 155 Zeilen findet sicherlich keiner auf Anhieb den Fehler ;).

    Kenne das auch nur so wie BlackAce.
    Der reine Text in der Ausgabe darf maximal 128 Zeichen haben.Der komplette Text mit Farbcodes aber 144. Alles über 144 wird im Chat erst gar nicht dargestellt.So als würde die Nachricht über Send*Message erst gar nicht abgeschickt werden.

    Dann solltest du noch "PayDay(playerid);" zeigen.
    Ansonsten füg Debugnachrichten ein.


    forward PayDayCount(playerid);
    public PayDayCount(playerid)
    {
    print("PayDayCount Debug #1");
    PlayerInfo[playerid][pPayDayTime] ++;
    PlayerInfo[playerid][pConnectTimeM] ++;
    print("PayDayCount Debug #2");
    if(PlayerInfo[playerid][pPayDayTime] > 60)
    {
    print("PayDayCount Debug #3");
    PayDay(playerid);
    print("PayDayCount Debug #4");
    PlayerInfo[playerid][pPayDayTime] = 0;
    print("PayDayCount Debug #5");
    }
    print("PayDayCount Debug #6");
    }


    //OnPlayerLogin
    paydaycount[playerid] = SetTimerEx("PayDayCount", 60000, true, "i", playerid);
    Du zerstörst den Timer aber auch Irgendwann wieder,oder ?

    Musst das Tag auch angeben.
    stock Text:TextDrawCreateEx(Float:tdX, Float:tdY, text[])
    {
    count_TextDraws++;
    return TextDrawCreate(tdX, tdY, text);
    }


    stock Text:TextDrawDestroyEx(tdid)
    {
    count_TextDraws--;
    return TextDrawDestroy(tdid);
    }


    //Edit:

    Zitat

    Er ladet die Timer, und den ganzen Rest nichtmehr.. Er macht einfach nicht weiter.


    Schön, dann füg als erstes mal Debug-Notes ein. Ansonsten musst du uns sowieso den Code zeigen, damit dir Jemand helfen kann.