Beiträge von 085zehn

    enum leichen{
    Float:l_x,
    Float:l_y,
    Float:l_z,
    pickup,
    Text3D:NamenLabel,
    p_id,
    bool:IstSpielerTot
    }


    new leichenInfo[MAX_PLAYERS][leichen];
    new leiche[MAX_PLAYERS];


    ocmd:corpse(playerid,params[])
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 442)return SendClientMessage(playerid,C_Error,"Du bist nicht im Leichenwagen!");
    if(leiche[playerid] == 1) return SendClientMessage(playerid, C_Error, "Du hast bereits eine Leiche geladen. Bringe sie zuerst zum Friedhof.");
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(leichenInfo[i][IstSpielerTot] == true)
    {
    if(IsPlayerInRangeOfPoint(playerid,10.0,leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z]))
    {
    DestroyPickup(leichenInfo[i][pickup]);
    Delete3DTextLabel(leichenInfo[i][NamenLabel]);
    SendClientMessage(playerid,C_Blau,"Du hast eine Leiche eingesammelt.");
    SendClientMessage(playerid,C_Blau,"Fahre nun zum Friedhof, und geb dich Leiche dort ab.");
    leiche[playerid]=1;
    SetPlayerCheckpoint(playerid,927.4283,-1073.0220,24.2891,5.0);
    leichenInfo[playerid][IstSpielerTot] = false;
    return 1;
    }
    }
    }
    return SendClientMessage(playerid,C_Error,"Es ist keine Leiche in deiner Nähe!");
    }



    ocmd:findcorpse(playerid,params[])
    {
    GameTextForPlayer(playerid,"Leiche wird gesucht...",2000,3);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(leichenInfo[i][IstSpielerTot] == false) continue; // Arbeite normalerweise nicht mit continue. Alternative wäre: if(leichenInfo[i][IstSpielerTot] == true) und dann halt der untere Code
    SetPlayerCheckpoint(playerid,leichenInfo[i][l_x],leichenInfo[i][l_y],leichenInfo[i][l_z],5.0);
    SendClientMessage(playerid, C_Blau, "Du hast eine Leiche gefunden.");
    return 1;
    }
    return SendClientMessage(playerid,C_Error,"Es sind keine Leichen in der Umgebung!");
    }



    ocmd:unloadcorpse(playerid,params[])
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 442)return SendClientMessage(playerid,C_Error,"Du bist nicht im Leichenwagen!");
    if(leiche[playerid] ==0) return SendClientMessage(playerid, C_Error, "Du hast keine Leiche geladen!");
    if(!IsPlayerInRangeOfPoint(playerid,7.0,927.4283,-1073.0220,24.2891))return SendClientMessage(playerid,C_Error,"Du bist nicht am Friedhof!");
    if(leiche[playerid]==1)
    {
    SendClientMessage(playerid,C_Blau,"Du hast die Leiche erfolgreich abgeladen.");
    giveplayermoney(playerid,600);
    leiche[playerid]=0;
    return 1;
    }
    return 1;
    }
    public OnPlayerDeath(playerid, killerid, reason)
    {
    new namenstring[200];
    format(namenstring,sizeof(namenstring),"%s",getPlayerName(playerid));
    GetPlayerPos(playerid,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z]);
    leichenInfo[playerid][pickup] = CreatePickup(1254,1,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z],0);
    leichenInfo[playerid][NamenLabel] = Create3DTextLabel(namenstring,C_Weiß,leichenInfo[playerid][l_x],leichenInfo[playerid][l_y],leichenInfo[playerid][l_z],10.0,0,0);
    leichenInfo[playerid][IstSpielerTot] = true;
    }


    Probiers mal aus :)
    Ist ungetestet und unkompiliert.

    Es war ein verzweifelter Versuch den Fehler zu finden.


    Das Ding ist ja, dass bei
    GetPlayerPos die richtigen Koordinaten herauskommen. Ist ja klar, die Funktion funktioniert einwandfrei.
    Aber das auch nur wenn ich da neue Variablen wie xyz reinhaue.



    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);


    Falls ich aber meine bestehenden Variablen einsetze funktioniert es nicht.



    GetPlayerPos(playerid, PlayerCheckpoints[playerid][cp][cPos_x], PlayerCheckpoints[playerid][cp][cPos_y], PlayerCheckpoints[playerid][cp][cPos_z]);


    Da kommen dann wieder vollkommen komische Werte bei raus.



    Aber mein Enum sieht doch eigentlich ganz normal aus?



    enum spielercps
    {
    Float:cPos_x = 0.0,
    Float:cPos_y = 0.0,
    Float:cPos_z = 0.0,
    cName[64]
    }
    new PlayerCheckpoints[MAX_PLAYERS][4][spielercps];

    Hat sich erledigt :)

    Spoiler anzeigen
    Heyho liebe Community :)
    Ich wollte ein Checkpoint System machen (eigene Checkpoints), jedoch habe ich nun folgendes Problem:

    Spoiler anzeigen
    Wenn ich einen Checkpoint erstellen möchte (sprich, der eigegebene Name wird gespeichert und die Koordinaten an denen der Spieler sich gerade befindet),
    ist das Problem, dass ich diese Koordinaten nicht vernünftig speichern kann.

    Spoiler anzeigen
    Habe jetzt mal ein Beispiel aus meiner server.log genommen.
    Wundert euch nicht über die ganzen Print Befehle, die waren nur für den erfolglosen Versuch
    das Problem selbst zu lösen. Ich bin mir sicher ich übersehe etwas total simples...

    Spoiler anzeigen
    Mit Code ist alles einfacher:

    Spoiler anzeigen
    if(dialogid==DIALOG_CHECKPOINTS_ERSTELLEN)
    {
    if(!response) return 1;
    new cp = GetPVarInt(playerid, "EditierterCheckpoint"), Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);

    new Float:pos_x, Float:pos_y, Float:pos_z; // Ebenfalls ein (sogar relativ sinnloser und) erfolgloser Test. Dachte dass hier evtl die Koords falsch ausgelesen werden oder so ^.^
    pos_x = x;
    pos_y = y;
    pos_z = z;

    printf("Hier die anderen Koords: %f, %f, %f", pos_x, pos_y, pos_z); // Ergebnis laut sever.log -> Hier die anderen Koords: 958.378295, 1343.157226, 15.374607


    format(PlayerCheckpoints[playerid][cp][cName], 64, "%s", inputtext);
    PlayerCheckpoints[playerid][cp][cPos_x] = Float:pos_x;
    PlayerCheckpoints[playerid][cp][cPos_y] = Float:pos_y;
    PlayerCheckpoints[playerid][cp][cPos_z] = Float:pos_z;

    SendClientMessage(playerid, WEISS, "Du hast dir nun deinen Checkpoint gespeichert.");

    new str[128];
    format(str,128, "X:%f Y:%f Z:%f", x, y, z);

    printf("CP: %i", cp); // Ergebnis laut server.log -> CP: 0
    print(str); // Ergebnis laut server.log -> X:1958.378295 Y:1343.157226 Z:15.374607

    format(str,128, "X:%f Y:%f Z:%f", PlayerCheckpoints[playerid][cp][cPos_x], PlayerCheckpoints[playerid][cp][cPos_y], PlayerCheckpoints[playerid][cp][cPos_z]);
    print(str); // Ergebnis laut server.log -> X:15.374607 Y:15.374607 Z:15.374607

    return 1;

    }

    Spoiler anzeigen
    Ich habe es ausprobiert, falls ich diese Reihe vertausche

    Spoiler anzeigen

    PlayerCheckpoints[playerid][cp][cPos_x] = Float:pos_x;
    PlayerCheckpoints[playerid][cp][cPos_y] = Float:pos_y;
    PlayerCheckpoints[playerid][cp][cPos_z] = Float:pos_z;

    Spoiler anzeigen
    Ist bei dem letzten print Befehl jedes Ergebnis das, was bei den oberen 3 das letzte ist.

    PlayerCheckpoints[playerid][cp][cPos_y] = Float:pos_y;
    PlayerCheckpoints[playerid][cp][cPos_z] = Float:pos_z;
    PlayerCheckpoints[playerid][cp][cPos_x] = Float:pos_x;

    Spoiler anzeigen
    Hierbei wäre das Ergebnis am Ende
    X:pos_x Y:pos_x Z:pos_x

    Spoiler anzeigen
    Es muss an diesen Zeilen liegen, ich verstehe es einfach nicht wieso es nicht klappt ?(
    Hier mein enum:
    Spoiler anzeigen

    enum spielercps()
    {
    Float:cPos_x = 0.0,
    Float:cPos_y = 0.0,
    Float:cPos_z = 0.0,
    cName[64]
    }
    new PlayerCheckpoints[MAX_PLAYERS][4][spielercps];

    Spoiler anzeigen
    Spoiler anzeigen
    Habe ich auf 0 gesetzt, da ich so ermittle ob es den Checkpoint gibt oder nicht. Falls alle 3 = 0.0 sind wird er als "Nicht vorhanden" definiert.
    Werde ich noch auf nen boolean Wert ändern damit es schöner ist, tut aber denke ich hier nichts zur Sache :rolleyes: 

    Ich habe mir den Text durchgelesen und muss sagen, dass ich das gar nicht so schlecht finde, dass er die Geschichte/Laufbahn des Servers erklärt.
    Zudem erscheint mir das Reallife-Erzähl-/Schreibverhalten ziemlich sehr angenehm, ist halt mal was Anderes :)


    Auf der anderen Seite gebe ich dir Recht, da wesentliche Informationen fehlen (siehe die 3 Punkte im Zitat). Rechtschreibfehler sollten allerdings berichtigt werden.
    Wenn du Zeit für so einen langen Text hast, dann solltest du auch mal ein bisschen mehr auf deine Rechtschreibung und Grammatik achten, kommt halt besser rüber :P

    & wie hieß denn dein Projekt mit "Durchschnittlich 30-40 Usern "?
    Glaube das würde so einige mal Interessieren :P

    Würde mich auch interessieren um ggf. mehr über deine Erfahrung zu erfahren (^^).

    Wenn man vom Script her ein Limit setzt kann Möglichkeit 2 ebenfalls sinnvoll sein.
    Aber im Endeffekt kommt doch das gleiche bei heraus, oder etwa nicht?
    Ist der Unterschied nicht nur, dass zum einen das System die Person in den Knast bringt oder der Cop mit der gleichen Länge und der gleichen Geldstrafe?
    Nur hierbei können nunmal auch Tippfehler entstehen ^^.


    Falls Möglichkeit 2 ausgewählt wird, sollte man mal darüber nachdenken diesen Befehl evtl. gesondert zu loggen um beim Ausnutzen von Cop-Seite aus
    einen Beweis zu haben :)

    Ausschnitt aus deiner Sponsoren-Anfrage:

    Ausschnitt aus deinem Angebot als Scripter und Projektleiter zu arbeiten:

    ich hatte bisher nur eigene Projekte


    Mein letztes Projekt war vor 6 Monaten und wir hatten 30-40 Aktive user


    da Mein Sponsor sich aufgelöst hat müssten wir ein Neuen finden und wir hatten dann keinen mehr gefunden

    Zuerst waren es 30-40 aktive User und nach 4 Stunden plötzlich 70? :wacko:

    Mein Fehler, habe an dem Tag meine Mathe Abiturklausur geschrieben und bin da dann ein wenig durcheinander gekommen :D
    Ja, den "seid - seit" Fehler mache ich schon immer :rolleyes:


    B2T:
    #Reverse: Hast du denn Alles verstanden soweit oder gibt es noch Fragen? :)


    enum
    {
    pRated,
    pRatedAnzahl
    }


    Wenn du es berechnen möchtest:



    new Float:Durchschnitt = float(PlayerInfo[playerid][pRated])/float(PlayerInfo[playerid][pRatedAnzahl]);



    Dann ist die Variable "Durchschnitt" das was du haben möchtest :)


    Beispiel:
    pRated = 5
    pRatedAnzahl = 2


    Also wurde eine Person beispielsweise einmal mit 4 und einmal mit 1 bewertet. Oder halt einmal mit 2 und einmal mit 3.
    Dies wird in deinem Enum gespeichert (siehe oben als mögliches Beispiel). Um den Durchschnitt zu errechnen,
    erstellst du dir zuerst eine Variable (oben ist es "Durchschnitt"), die bei mir jetzt als Float deklariert ist. Das heißt,
    dass sie keine ganze Zahl ist wie z.B. 1 oder 2 oder 3 etc sondern diese kann auch Kommastellen haben ( 1,2 oder 4,1).
    Die weiteren "floats", also "float(PlayerInfo[playerid][pRated])" und das andere sind dazu da, dass der Compiler keine
    Probleme bekommt, denn aus einer ganzen Zahl (1 oder 2 etc) kann man nicht ohne weiteres eine Float Zahl
    (also die mit Kommastellen) errechnen. Deswegen muss man diese ganzen Zahlen erst in Floats umwandeln.
    Für den Wert der Zahl macht es keinen Unterschied. Eine 5 wird beispielsweise zur 5,00.
    Bezogen auf mein Beispiel wird 5 durch 2 geteilt, das Ergebnis (2,5) wird dann in die Variable "Durchschnitt" gespeichert.
    Diese kannst du dann für Texte, Einblendungen oder sonstigen Kram verwenden :)


    Könntest z.B. noch einen String erstellen und die Variable dann ausgeben lassen.



    new str[64];
    format(str,sizeof(str),"Deine Bewertung: %f",Durchschnitt);
    SendClientMessage(playerid, 0xFFFFFF, str);


    Dazu muss ich sagen, dass ich seit Monaten kein Script mehr in der Hand hatte und es ggf. Flüchtigkeitsfehler gibt,
    aber ich hoffe ich konnte dir das alles ein wenig näher bringen :)


    Falls Fehler vorhanden sind entschuldige ich mich ^^
    Jeffry: Kannst doch bestimmt mal eben schnell rüberschauen und mich ggf. korrigieren oder? :P
    Wollte es halt nur nochmal zusammenfassen und möglichst genau Schritt für Schritt erklären, damit
    man nicht nur kopiert sondern auch was draus lernen kann

    PlayerInfo[playerid][pRated] // Bewertungen
    PlayerInfo[playerid][pRatedAnzahl] // Anzahl an Bewertungen


    Bei einer Bewertung:


    PlayerInfo[playerid][pRated] = PlayerInfo[playerid][pRated] + VariableDieFürDieAngegebeneNoteSteht;
    PlayerINfo[playerid][pRatedAnzahl] ++;


    Durchschnitt berechnen:


    new Durchschnittsbewertung = PlayerInfo[playerid][pRated] / PlayerInfo[playerid][pRatedAnzahl];


    Ich glaube so ist es eine Möglichkeit :)

    Kommt drauf an welches MySQL Plugin du verwendest.
    Ich persöhnlich würde dir das Tutorial von Maddin sehr ans Herz legen,
    da dort alles einfach und detailliert erklärt wird.


    Bei deinem Problem fällt mir nur ein, dass du in der Datenbank mal schauen solltest,
    ob dort denn 0 steht oder ein anderer Wert. Wenn da 0 steht funktioniert ja alles,
    ansonsten weiß ich auch nicht unbedingt weiter. Aber wie gesagt, der Maddin hat
    ein sehr gutes Tutorial geschrieben.


    Zum Tutorial: Klick mich

    So kann das ja nicht funktionieren :)
    In der MYSQL Abfrage möchtest du den INT (Zahlen) Wert haben, aber bei deinem "new string[128]" möchtest du Strings haben und keine Zahlen (%s). Ersetze sie mal bei dem format(...) durch %i anstatt %s. Der Compiler hat
    bei den Rank Variablen Zahlen geladen aber du willst beim format Texte, also denkt er, dass die Variablen Texte sein müssen -> Fehlermeldung.


    Also das ist meine Vermutung :P

    Ich hoffe ich erzähle hier jetzt nicht totalen Mist, aber müsste man nicht, um die Position der Rauchgranate herauszufinden (wo sie hingeworfen wurde), den Punkt
    speichern, zu dem der Spieler beim werfen der Granate guckt und dementsprechend die Koordinaten des Punktes in den Timer einbauen (IsPlayerInRangeOfPoint(playerid, 5.0, rauchgranate_x, rauchgranate_y, rauchgranate_z))?


    /edit:
    Zumindest ist das die einzige/beste Methode, die mir gerade einfällt :)
    Ist aber viel arbeit :P