Beiträge von |-|auke

    carlos1710: Ich denke, dass du eine Wochentagsberechnung vor hast. Diesen Algorithmus gibt es in Pawn schon:

    // Aus dem englischem Forum
    stock GetDayName(day=0, month=0, year=0)
    {
    new weekday_str[12],j,e;
    if (month <= 2)
    {
    month += 12;
    --year;
    }


    j = year % 100;
    e = year / 100;


    switch ((day + (month+1)*26/10 + j + j/4 + e/4 - 2*e) % 7)
    {
    case 0: weekday_str = "Samstag";
    case 1: weekday_str = "Sonntag";
    case 2: weekday_str = "Montag";
    case 3: weekday_str = "Dienstag";
    case 4: weekday_str = "Mittwoch";
    case 5: weekday_str = "Donnerstag";
    case 6: weekday_str = "Freitag";
    }
    return weekday_str;
    }

    InternetInk aka Benjamin: Wie sieht´s aus mit der Map? Ist sie schon fertig? :)


    @Topic
    Ich habe nun angefangen das LoD Script neu zuschreiben. Ich denke dieses Script wird eine kleine Revolution im scripttechnischen Bereich. Es ist OOP ähnlich aufgebaut.
    Hier die bisherige Struktur des "LoD Cores", der alles verwaltet:


    Zum Beispiel eine Map erstellen kann ich damit ganz schnell und einfach:

    // Map erstellen
    new LosSantos[100];
    Core::Map->LoadFromTable(LosSantos, "map_los_santos");
    // Die Map wieder löschen
    Core::Map->Unload(LosSantos);


    Dieser LoD Core hat des Weiteren noch den Vorteil, dass ich neue Systeme komplett autark scripten kann.
    Ich kann ein neues System (z.B. ein Rennen) scripten, ohne dass ich das eigentliche Script bearbeiten muss.
    Die neuen Systeme können in den LoD Core "gehookt" werden. Sofern dieser Hook wieder entfernt wird, ist das System deaktiviert.
    Deshalb kann ich diese autarken Systeme während der Server läuft ohne Probleme ein- und ausschalten.


    Hier z.B. der Anfang eines Registersystems:

    // Ein hook-Eintrag, damit der Core das Register-System lädt
    CoreInitHooks()
    {
    Core::Misc->AddEvent(ON_GAME_MODE_INIT, "AccOnGameModeInit");
    }



    //=========================================
    //==== Das eigentliche Registersystem ====
    Event:AccOnGameModeInit()
    {
    Core::Player->AddEvent(ON_PLAYER_CONNECT, "AccOnPlayerConnect");
    Core::Player->AddEvent(ON_PLAYER_DIALOG_RESPONSE, "AccOnPlayerDialogResponse");
    }
    Event:AccOnPlayerConnect(PlayerID)
    {
    new Message[128];
    format(Message, sizeof Message, "Willkommen %s! Du befindest dich auf einem LoD Core basierenden Server!", CoreVar::Player->Name);
    SendClientMessage(PlayerID, 0xFFFFFF, Message);
    ShowPlayerDialog(PlayerID, 1, DIALOG_STYLE_PASSWORD, "Login", "Bitte gib dein Passwort ein", "OK", "");
    }
    Event:AccOnPlayerDialogResponse(PlayerID, DialogID, Response, ListItem, InputText[])
    {
    if(DialogID == 1)
    {
    SendClientMessage(playerid, 0xFFFFFF, "Bla bla bla");
    }
    }

    In der Funktion CoreInitHooks() können hooks erstellt werden, die schon am Start des Servers vorhanden sein sollen.
    Wie man sieht ist das Scripten dadurch nicht nur viel einfacher und sauberer, sondern auch noch performanter. Denn bestimmte Bereiche im Script können nur dann aufgerufen werden, wenn sie auch benötigt werden.



    Das war jetzt ein kleiner Einblick in das neue LoD Reallife Script.
    Damit möchte ich zudem bekannt geben, dass der Server wiedereröffnet wird, und komplett neu entwickelt wird.

    Wenn dir das klar gewesen wäre, dann hättest du das nicht gemacht... Fehler sind zum lernen da.


    Mit einer Abfrage des VehicleModels kannst du das einschränken:

    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 490)
    return 1;
    new blaulicht = CreateObject(19419,0,0,0,0,0,0,100);
    new vehicleid = GetPlayerVehicleID(playerid);
    AttachObjectToVehicle(blaulicht, blaulicht, -0.009999, 0.654999, 1.029999, 0.000000, 0.000000, 0.000000);

    Nicht die ID, die dir von den Funktionen zurückgegeben werden! Diese können sich immer ändern. So solltest in deiner Tabelle eine Spalte mit der eindeutigen ID des Fahrzeugs haben, und mit dieser beim Speichern und Laden arbeiten.

    Eher so:

    public OnVehicleDeath(vehicleid, killerid)
    {
    if(GetVehicleModel(vehicleid) == 441)
    return DestroyVehicle(vehicleid);
    }
    Allerdings werden somit alle Fahrzeuge dieses Models gelöscht.