Beiträge von Artus


    Ganz einfach, das ist ein Stock der race include einfach #pragma unused unten im script reinknallen


    \pawno\include\ocmd.inc(36) : warning 201: redefinition of constant/macro (symbol "OnPlayerCommandText")
    \gamemodes\script.pwn(1643) : error 017: undefined symbol ""
    \gamemodes\script.pwn(1644) : warning 203: symbol is never used: "Langs_AddLanguage"

    Dann kommt nur 1 Error dazu.

    Okay danke. :) Werde es morgen mal darauf aufbauen und gucken, ob es geht.


    Ansonsten schreibe ich nochmal. :)
    ---------------------------------------------
    Habe nur "#include <YSI\y_races>" eingefügt und mal neu kompiliert. Folgende Warnings kamen.


    \pawno\include\ocmd.inc(36) : warning 201: redefinition of constant/macro (symbol "OnPlayerCommandText")
    script.pwn(1642) : warning 203: symbol is never used: "Langs_AddLanguage"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Warnings.


    Im Script habe ich nie "Langs_AddLanguage" definiert oder ähnliches und die Zeile ist die Letzte im Script und die ist leer.

    Mein Problem ist, dass ich nicht weiß, wie man das scriptet.


    Ich habe 2 Pickups, welche man mit Fahrzeugen aufnehmen kann.
    Ich hatte gedacht, dass wenn man ins 1. oder 2. Pickup fährt, dass man dann alle Spieler per Schleife durchgeht, ob einer in der Nähe des 1. / 2. Pickups ist.


    Wenn ja, dann startet es halt mit dem Countdown. Wenn nicht, dann wartet man halt bis ein anderer Spieler ins andere Pickup fährt.


    Wenn einer der beiden dann den gesetzten Checkpoint erreicht, dann sollen beide mit ihren Fahrzeugen an eine bestimmte Stelle geportet werden.


    Ich weiß insgesamt halt nicht, wie man das scriptet und habe es auch noch nie gemacht.


    Hoffe auf gute Antworten. :)


    Mit freundlichen Grüßen


    Artus


    Also es funktioniert, wenn man keinen Autoführerschein hat und in ein "Auto" steigt, dass das Script dann ausgeführt wird. Aber ich benenne es mal um.


    Edit: Klappt! Danke :thumbup:

    Meine Autos werden nicht als Autos erkannt. ?(


    new carid = GetPlayerVehicleID(playerid);


    if(Auto(carid))
    {
    bla bla bla....
    }
    else SendClientMessage(playerid, Rot, "DEBUG: Auto ist kein Auto. O.o "); // Diese Nachricht kommt IMMER! Also bei jedem Fahrzeugtyp. Egal ob Auto, Motorrad, etc.


    stock Auto(carid)
    {
    new modelid = GetVehicleModel(carid);
    if(modelid == 400 || modelid == 401 || modelid == 402 || modelid == 404 || modelid == 405 || modelid == 409 || modelid == 410 || modelid == 411 || modelid == 412 || modelid == 413 || modelid == 414 || modelid == 415 || modelid == 416)
    if(modelid == 418 || modelid == 419 || modelid == 420 || modelid == 421 || modelid == 422 || modelid == 423 || modelid == 424 || modelid == 426 || modelid == 427 || modelid == 428 || modelid == 429 || modelid == 434 || modelid == 436)
    if(modelid == 438 || modelid == 439 || modelid == 440 || modelid == 442 || modelid == 444 || modelid == 445 || modelid == 451 || modelid == 456 || modelid == 458 || modelid == 459 || modelid == 466 || modelid == 467 || modelid == 470)
    if(modelid == 474 || modelid == 475 || modelid == 477 || modelid == 478 || modelid == 479 || modelid == 480 || modelid == 482 || modelid == 483 || modelid == 489 || modelid == 490 || modelid == 491 || modelid == 492 || modelid == 494)
    if(modelid == 495 || modelid == 496 || modelid == 498 || modelid == 499 || modelid == 500 || modelid == 500 || modelid == 502 || modelid == 503 || modelid == 504 || modelid == 505 || modelid == 506 || modelid == 507 || modelid == 508)
    if(modelid == 516 || modelid == 517 || modelid == 518 || modelid == 525 || modelid == 526 || modelid == 527 || modelid == 528 || modelid == 529 || modelid == 533 || modelid == 534 || modelid == 535 || modelid == 536 || modelid == 540)
    if(modelid == 541 || modelid == 542 || modelid == 543 || modelid == 545 || modelid == 546 || modelid == 547 || modelid == 549 || modelid == 550 || modelid == 551 || modelid == 552 || modelid == 554 || modelid == 555 || modelid == 556)
    if(modelid == 557 || modelid == 558 || modelid == 559 || modelid == 560 || modelid == 561 || modelid == 562 || modelid == 565 || modelid == 567 || modelid == 568 || modelid == 575 || modelid == 576 || modelid == 579 || modelid == 580)
    if(modelid == 582 || modelid == 585 || modelid == 587 || modelid == 588 || modelid == 589 || modelid == 596 || modelid == 597 || modelid == 598 || modelid == 599 || modelid == 600 || modelid == 602 || modelid == 603 || modelid == 604)
    if(modelid == 605 || modelid == 609)
    {
    return 1;
    }
    return 0;
    }


    Edit: Keine Warnings oder Errors 8|


    Ja, dort war ich mir nicht sicher, ob er auch entfernt wird.


    Editiere ich gleich. :) Danke für die Rückmeldung.

    Ich möchte euch heute zeigen, wie ihr euren Rcon Login vor unautorisierten Zugriff schützen könnt. Dies ist mein erstes Tutorial, welches ich schreibe, also seid nicht so streng und gebt mir bitte viele Verbesserungsvorschläge und nützliche Kritik. :)


    Erstmal gehen wir zur Funktion, welche ausgeführt wird, wenn sich jemand als Rcon Administrator einloggt oder es versucht. Diese Funktion ist "OnRconLoginAttempt"


    public OnRconLoginAttempt(ip[], password[], success)
    Da sehen wir schonmal die Parameter:
    - ip[] --> Die IP, welche versucht sich als Rcon Administrator einzuloggen oder sich einloggt.
    - password[] --> Das Passwort, welches benutzt wurde, um sich einzuloggen oder es zu versuchen
    - success --> Ob der Login erfolgreich war oder nicht.


    Als erstes wollen wir herausfinden, welcher Spieler versucht hat sich als Rcon Administrator einzuloggen oder sich als dieser eingeloggt hat.
    Da es in dieser Funktion kein "playerid" gibt, müssen wir das leider auf eine andere Art und Weise herausfinden.


    Da sehen wir, dass wir ja die IP des Spielers haben. Deswegen werden wir jetzt alle Spieler nach ihrer IP-Adresse abfragen und diese dann mit der vorhandenen IP vergleichen.
    Das tun wir am besten mit einer Schleife.


    In dieser Schleife erstellen wir einen String mit dem Namen "pip" mit einer Länge von 16.
    Nun wollten wir ja alle IP Adressen der Spieler auf dem Server abfragen und dann mit der IP des Rcon Logins vergleichen.
    Um die IP-Adressen mit der anderen zu vergleichen, speichern wir zunächst immer die IP des Spielers in "pip".
    Danach fragen wir ab, ob die IP des jeweiligen Spielers mit der IP des Logins übereinstimmt.


    public OnRconLoginAttempt(ip[], password[], success)
    {
    for(new i=0; i<MAX_PLAYERS; i++) // Unsere Schleife, welche alle Spieler durchgeht und für jeden Spieler folgendes ausführt.
    {
    new pip[16]; // Hier wird der String "pip" erstellt.
    GetPlayerIp(i, pip, sizeof(pip)); // Hier erhalten wir vom jeweiligen Spieler die IP und speichern diese in den String "pip" ein.
    if(!strcmp(ip, pip, true)) // Abfrage, ob die IP-Adressen übereinstimmen.
    {


    }
    }
    return 1;
    }
    Nun findet das Script letzendlich heraus, welcher Spieler versucht hat sich als Rcon Administrator einzuloggen.
    Da wir wollen, dass der Übeltäter am Ende gebannt wird, wäre es angebracht abzufragen, ob der Täter ein Administrator ist.


    Denn einen Administrator wollen wir ja nicht bannen. Das wäre ja sonst ziemlich doof.
    Deswegen bauen wir noch eine Abfrage ein, ob der Spieler ein Administrator ist und führen dann noch ein Script aus, wenn er keiner ist.
    Die Administratorabfrage müsst ihr an euer Skript anpassen, sonst funktioniert es nicht!


    Aber nun erstmal zur Abfrage.


    public OnRconLoginAttempt(ip[], password[], success)
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    new pip[16];
    GetPlayerIp(i, pip, sizeof(pip));
    if(!strcmp(ip, pip, true))
    {
    if(!SpielerDaten[i][pAdmin]) // Wenn der Spieler KEIN Administrator ist, werden die in den nachfolgenden geschweiften Klammern eingefügten Befehle ausgeführt.
    {

    }
    }
    }
    return 1;
    }


    Jetzt müssen wir nur noch die Befehle einfügen, was mit dem Spieler passieren soll, welcher versucht hat, sich unautorisierten Zugriff zu Administratorrechten zu verschaffen.


    Wir nehmen die Funktion "BanEx". Diese Funktion bannt den Spieler und gibt zugleich noch einen Grund an.
    Natürlich könnt ihr die Bannfunktionen an euer Skript anpassen, was auch sehr angebracht wäre.
    Da ich aber nicht weiß, was für Skripte ihr benutzt, belasse ich es in diesem Tutorial bei einer Standardfunktion.
    Da wir den Spieler dann gebannt haben, muss die Schleife ja nicht weiter durchlaufen. Deswegen setzen wir unter "BanEx" noch ein "return 0;"


    public OnRconLoginAttempt(ip[], password[], success)
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    new pip[16];
    GetPlayerIp(i, pip, sizeof(pip));
    if(!strcmp(ip, pip, true))
    {
    if(!SpielerDaten[i][pAdmin])
    {
    BanEx(i,"Loginversuch als Rcon-Administrator"); // Hier bannen wir den Spieler und geben als Grund "Loginversuch als Rcon-Administrator" an.
    return 0;
    }
    }
    }
    return 1;
    }


    Fertig! Wir haben den Login als Rcon-Admin erfolgreich gegen unautorisierten Zugriff geschützt. :)


    Für Kritik und Verbesserungsvorschläge bin ich jederzeit offen. :)


    Mit freundlichen Grüßen


    Artus


    Bei dem Netzteil hatte ich jetzt Bedenken, wei die Grafikarte ordentlich frisst. Da stand sowas wie ca. 313W (unter Last) bei einem Test im Durchschnitt.


    Ja, habe mir das auf hardwareversand.de zusammengestellt. :)

    Ich habe mir folgenden PC zusammengestellt und wollte nun wissen, ob das so alles gut harmonieren würde. :) Also, ob zum Beispiel auch das Netzteil ausreicht. (Übertakten hatte ich noch nicht vor, später aber wahrscheinlich.)


    Konponenten:


    Prozessor: Intel Core i5-4670K Box, LGA1150


    CPU-Kühler: Thermalright HR-02 Macho Rev.A (BW)


    Mainboard: Gigabyte Z87-D3HP, ATX


    Arbeitsspeicher: 8GB-Kit Corsair Vengeance DDR3 1600 MHz CL9


    Grafikkarte: Gigabyte GeForce GTX 770 Windforce 3X OC, 2GB DDR5, 2x DVI, HDMI, DisplayPort


    Festplatte: Seagate Barracuda 7200 1000GB, SATA 6Gb/s


    SSD: Samsung SSD 840 120GB SATA 6Gb/s


    Gehäuse: Sharkoon T28 green (Window-Kit), ohne Netzteil


    Netzteil: be quiet! STRAIGHT POWER CM BQT E9-CM-480W 80+Gold


    Laufwerk: Samsung SH-224BB bare schwarz


    Betriebssystem: Windows 7 oder Windows 8


    Gesamtkosten (ohne Betriebssystem): ca. 1100€

    #define DIALOG_RCON_LOGIN_FALSE 2013


    public OnRconLoginAttempt(ip[], password[], success)
    {
    if(!success || success) // Wenn der Login fehlschlägt oder klappt
    {
    new pip[16]; // Erstellt den String pip mit einer Länge von 16
    for(new i=0; i<MAX_PLAYERS; i++) // Schleife welche alle Spieler durchgeht
    {
    GetPlayerIp(i, pip, sizeof(pip)); // Holt sich die IP Adressen von allen Spielern
    if(!strcmp(ip, pip, true)) // Wenn eine IP der Spieler mit der IP übereinstimmt, mit der versucht wurde sich als Rcon einzuloggen
    {
    if(!SpielerDaten[i][pAdmin]) // Wenn der Spieler kein Administrator ist
    {

    // Hier müsst ihr machen, dass der Spieler gebannt wird.

    new PW[16]; // Erstellt den String PW mit der Länge von 16
    format(PW, sizeof(PW), password); // Das Passwort mit dem der Login versucht wurde wird in dem String PW gespeichert
    new string[128]; // Erstellt den String "string".
    format(string, sizeof(string), "{FFFFFF}Du wurdest gebannt, weil du versucht hast dich als Rcon-Administrator anzumelden.\n\nVersuchtes Passwort: {FF0000}%s", PW); // Definiert was in dem String steht.
    ShowPlayerDialog(i, DIALOG_RCON_LOGIN_FALSE, DIALOG_STYLE_MSGBOX, "{FF0000}Bannung vom Server", string, "Okay", ""); // Schickt dem Spieler, welcher sich als Rcon eingeloggt hat den String, dass er gebannt ist.

    }
    }
    }
    }
    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch(dialogid)
    {
    case DIALOG_RCON_LOGIN_FALSE:
    {
    if(!response) return Kick(playerid);
    if(response) return Kick(playerid);
    }
    }
    return 1;
    }