Beiträge von Kaliber

    Zitat

    Metin2 ist mit mehreren Sprachen geschrieben, welche zusammen ein Programm ergeben.
    Metin2 wurde ursprünglich für Windows2000/XP entwickelt. Bisher sind keine Mac oder Linux Versionen erschienen.
    Die .exe-Datei welche das Programm an sich ist, wurde in C++ verfasst. Die Version ist noch unbekannt, aber es liegt auch noch kein offizieller Source der .exe vor und wird wahrscheinlich auch nicht publiziert werden.
    Die anderen Dateien die wir im 1. Unterpunkt entpackt haben und sich im Root-Archiv befanden sind in Python 2.2 geschrieben.
    Selbst die Fenster die man bei Metin2 sieht (Inventarfenster usw.) haben eine eigene Sprache. Beziehungsweise wurden sie so programmiert, dass sie zwar keine eigenständigen Programme hervorbingen können, aber vom Client interpretiert und angezeigt werden.
    Serverseitig wurde Metin2 für die Plattform FreeBSD entwickelt welche auf UNIX basiert.


    Quelle: http://www.elitepvpers.com/for…grammierung-teil-1-a.html


    mfg. :thumbup:

    also so?:


    Nein, so:


    //Oben ins Script
    new objID;


    //Dein CMD
    if(!strcmp("/sperre", cmdtext, true))
    {
    if(!IstSpielerInFraktion(playerid, 0)) return SendClientMessage(playerid,DROT,"Du darfst diesen Befehl nicht benutzen!");
    if(objID) return DestroyObject(objID),objID=0,SendClientMessage(playerid,DROT,"Du hast das Objekt erfolgreich entfernt!");
    new Float:Q[6];
    GetCamerFrontVector(0,Q[0],Q[1],Q[2],Q[3],Q[4],Q[5],5.0); //5.0 ist die distanz wenn du sie erhöhst, ist das Objekt weiter entfernt!
    objID = CreateObject([modelid des Objekts], Q[0], Q[1], Q[2], 0.0, 0.0, 0.0);
    return 1;
    }


    und dann nur noch die modelid eintragen und fertig ;)


    //Edit: hatte noch was vergessen ^^


    mfg. :thumbup:

    Jetzt muss nur noch das so gemacht werden, dass vor einem das Objekt steht, aber wie?


    Ich bin mal so freundlich und helfe dir ;)


    //Schreibe das oben in dein Script
    #define GetCamerFrontVector(%0,%1,%2,%3,%4,%5,%6,%7) \
    GetPlayerCameraPos(%0,%1,%2,%3),GetPlayerCameraFrontVector(%0,%4,%5,%6), \
    (%1)+=floatmul(%4,%7),(%2)+=floatmul(%5,%7),(%3)+=floatmul(%6,%7)


    //Und dann dein Command
    if(!strcmp("/sperre", cmdtext, true))
    {
    if(!IstSpielerInFraktion(playerid, 0)) return SendClientMessage(playerid,DROT,"Du darfst diesen Befehl nicht benutzen!");
    new Float:Q[6];
    GetCamerFrontVector(0,Q[0],Q[1],Q[2],Q[3],Q[4],Q[5],5.0); //5.0 ist die distanz wenn du sie erhöhst, ist das Objekt weiter entfernt!
    CreateObject([modelid des Objekts], Q[0], Q[1], Q[2], 0.0, 0.0, 0.0);
    return 1;
    }


    Ist aus dem Kopf geschrieben, sollte allerdings funktionieren ^^


    mfg. :thumbup:

    Die Funktion sollte so aussehen:


    stock GetPlayerID(const accname[]) {
    new sname[MAX_PLAYER_NAME],i;
    for(; i<MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i)) continue;
    GetPlayerName(i,sname,sizeof(sname));
    if(!strcmp(accname,sname)) return i;
    }
    return -1;
    }


    mfg. :thumbup:

    Das liegt daran, dass du eine Klammer weglöschst, einfach so löschen, dann geht es:


    Function CreateRoadblock(Object,Float:x,Float:y,Float:z,Float:Angle)
    {
    /*for(new i = 0; i < sizeof(Roadblocks); i++)
    {
    if(Roadblocks[i][sCreated] == 0)
    {
    Roadblocks[i][sCreated] = 1;
    Roadblocks[i][sX] = x;
    Roadblocks[i][sY] = y;
    Roadblocks[i][sZ] = z-0.7;
    Roadblocks[i][sObject] = CreateDynamicObject(Object, x, y, z-0.9, 0, 0, Angle);
    return 1;
    }
    } */
    return 0;
    }


    mfg. :thumbup:

    Mal so nebenbei, dein Code ist ziemlich...umständlich geschrieben, das was du eigentlich machst ist mehr oder weniger ein Codeschnipsel und lässt sich auch in knapp 50 Zeilen...zeigen...


    Hier mal ein Vorschlag: http://pastebin.com/M92ydF4k


    Mal nur so als Vergleich, beide Codes machen das selbe...


    Deine Zeilen: 317


    Meine Zeilen: 54


    ...ja ich weiß vieles liegt an den unnötigen Callbacks und 5 Zeilen an den Kommentaren, trotzdem...würde das noch einen großen Unterschied machen.


    Ich will hier keine Kritik äußern und blöd rummeckern, ich wollte nur mal zeigen, dass man das hätte auch anders schreiben können.
    Mein Code soll dich nur mal zum Nachdenken anregen und vielleicht lernst du daraus noch etwas...


    PS: Die Include sscanf2 wird gar nicht genutzt...


    mfg. :thumbup:

    Schreib es so:


    new const ChangeDrawText[6][] = {
    {"~w~TEAMSPEAK: ~y~"},
    {"~w~FORUM: ~r~"},
    {"~w~CONTROL PANEL: ~y~"},
    {"~w~SUPPORT: ~g~/REPORT"},
    {"~w~HILFE: ~b~/HILFE"},
    {"~w~HOSTING: ~g~www.Stephanexe.de"}
    };


    mfg. :thumbup: