Beiträge von Goldkiller

    Hi


    Ich habe in einer C ähnlichen Sprache gesehen, dass es die Funktion delete gibt, um Variabeln wieder aus dem Speicher zu löschen. Nun, wenn ich diese Funktion in den Editor schreibe, wird sie blau eingefärbt, es gibt aber ein Error aus. Weiss jemand genaueres darüber, ob diese Funktion in PAWN überhaupt exisitiert und warum sie blau eingefärbt wird ?


    MfG Simon


    Gibt es nicht. Für das Highlighten wurden wohl alle Keywords aus C++ übernommen.
    http://en.cppreference.com/w/cpp/keywords


    //Edit: Oder auch nicht alle aus C++. Aus C klappen aber alle beim Highlighten. Liegt an PAWNO ( bzw SynEdit ) . Kannst ja mal Quincy ausprobieren, die offizielle IDE zu PAWN.

    Selbst wenn es kopiert ist, gut ist es trotzdem nicht.
    Es ist sehr leicht damit den Objekt-Speicher des Server voll zu bekommen.


    new Bombe[MAX_PLAYERS];
    new Float:BX,Float:BY,Float:BZ;
    new object;


    Ich sag dir auch wie.
    Spieler 1 legt eine Bombe
    Spieler 2 legt noch eine Bombe
    Timer von Spieler 1 läuft ab
    --- Bombe von Spieler 1 sollte explodieren, es explodiert aber Bombe von Spieler 2
    --- Daraus folgt,dass auch das Objekt von Spieler 2 gelöscht wird
    Timer von Spieler 2 läuft ab
    --- Bombe von Spieler 2 explodiert erneut ( Eigentlich nur eine Explosion an der Position )
    --- Objekt von Spieler 2 kann nicht gelöscht werden, da es nicht mehr exisitier


    = DieBombe von Spieler 1 liegt immernoch in der Gegend.



    //Edit:
    Wozu ist überhaupt die Variable Bombe gut ?
    Beim benutzen von /placebomb wird es auf 1 gesetzt, beim ablaufen des Timers auf 0. Du nutzt es nie für eine Abfrage. Jeder Spieler kann also theoretisch so oft wie er lustig ist den Befehl hintereinander benutzen.

    GetDynamicObjectRot(LSARMYROT, RotX, RotY, RotZ);
    SetObjectRot(LSARMYROT, RotX, RotY, RotZ +2);
    Entweder beide mit Dynamic oder keine Funktion.
    Ich nehme aber mal an, du nutzt einen Streamer.
    GetDynamicObjectRot(LSARMYROT, RotX, RotY, RotZ);
    SetDynamicObjectRot(LSARMYROT, RotX, RotY, RotZ + 2);
    Weiss nicht ob es Probleme machen wird, wenn du RotZ immer um 2 gehöhst. Eigentlich macht es keinen Unterschied ob du RotZ von 360 , 720 , 1080 usw hast , man vermeidet es aber eigentlich :P.

    Endlich hab ich auch einen Thread,in dem sich Jemand über mich beschwert :).


    Du hast die PM um 20.15 verschickt. Um 20.24 diesen Thread hier aufgemacht. Hast mir also ganze 9 Minuten Zeit gegeben ... .
    Genial dann sowas zu schreiben:

    hatte ich schon gemacht kam keine Antwort,[...]


    8|


    Eigentlich hat InternetInk aka Benjamin schon alles geschrieben. In diesem Beitrag hat er dich schon zitiert, versteh also nicht wieso du jetzt meckerst.
    Wir sind kein Minecraft Forum, dafür haben wir aber einen Minecraft Sammelthread.

    Anstatt zu fragen,hättest du es testen können. Du hast dabei doch nichts geändert, wie soll es denn besser werden.
    Ich kanns dir aber auch so sagen,wird nicht funktionieren, denn :


    NACHARRAY[MAX_PLAYERS][50][nachenum];


    nachenum =
    enum nachrichtenenum
    {
    idm, //Ich meine ID und Inhalt reicht auch komplett da du die informationen über GetPlayerName oder andersherum bekommen kannst aber musst du selber wissen
    Empfängerm[MAX_PLAYER_NAME], //Ich weiß nicht, warum du 2 separate Variablen brauchst, um den Empfänger und Absender zu deklarieren.
    Absenderm[MAX_PLAYER_NAME],
    Inhaltm[128],
    listitemm //Was? Ich meine, das kannst du auch komplett weglassen, da beim [MAX_NACHRICHTEN] index der listitem schon vordefiniert sein wird
    }


    Und jetzt nehmen wir zB den Eintrag Empfängerm , Absenderm , Inhaltm.


    Zitat

    NACHARRAY [ 1 ][ 2 ][ 3 - Empfängerm / Absenderm / Inhaltm ][ 4 ]


    Wie du siehst sind wir wieder bei 4 , es geht aber nur bis 3.

    In PAWN sind maximal 3-Dimensionale Arrays möglich.
    Du versuchst aber 4-Dimensionale zu erstellen.


    NachArray[ 0 .. MAX_PLAYERS ][ 0 .. MAX_NACHRICHTEN ][ Empfängerm ][ 0 .. MAX_PLAYER_NAME ].

    Naja , Ich habe das gerade mal probiert. Das Problem ist, wie Gleitkommazahlen verarbeiten werden.
    stock Float:irgendwas( Float:fValue , iNachkomma = 2 ) {
    new
    Float:fReturn,
    sString[16];
    format( sString , sizeof(sString) ,"%.*f", iNachkomma , fValue);
    fReturn = floatstr( sString );
    return fReturn;
    }

    Weil Float: ein Tag ist, musst du die Funktion erst deklarieren bevor du sie nutzt. Sonst gibt es Fehlermeldungen. Als public wäre es auch möglich, dann muss die Funktion aber per forward erst deklariert werden, bevor du sie nutzt.


    Im Prinzip funktioniert das so , ich zeig dir aber mal ein Fälle, wo es nicht richtig klappt. Das wirst du aber auch nicht beheben können:


    printf(" %f ", irgendwas( 1.23456789 , 3 ) ); // 1.23399 - nicht gewünschtes Ergebnis
    printf(" %.3f ", irgendwas( 1.23456789 , 3 ) ); // 1.233 - nicht gewünschtes Ergebnis
    printf(" %f ", irgendwas( 1.43500000 , 3 ) ); // 1.434 - nicht gewünschtes Ergebnis
    printf(" %f ", irgendwas( 1.12345678 , 3 ) ); // 1.123000
    printf(" %f ", 1.234 ); // 1.23399 - nicht gewünschtes Ergebnis

    WIe du siehst, klappt da etwas nicht. Da kannst du aber nichts gegen machen, liegt an der Verarbeiung von Gleitkommazahlen. Exakt wirst du es in vielen Fälle nicht bekommen.

    Zitat

    mysql_GetString3("sms","Absender","ID","Empfänger",listitem,sendername)


    Zitat

    stock mysql_GetString3(Table[], Field[], Where[], Is, Is2[])


    Na ... fällt dir etwas auf ?

    Kenn mich mit dem streamer nicht so aus abr ich denke mal so:


    new cp[AnzahlAnCP's];


    cp[1] = CreateDynamicCP(blabla);
    cp[2] = .....


    Das hat n0skillg3t doch hier gezeigt.
    Hier aber noch von mir ein kleines Beispiel:


    new
    BurgerShot_CP;
    public OnGameModeInit() {
    BurgerShot_CP = CreateDynamicCP( 100.0 , 200.0 , 10.0 , 3.0 );
    return 1;
    }


    public OnPlayerEnterDynamicCP(playerid, checkpointid) {
    if( BurgerShot_CP == checkpointid ) {
    SendClientMessage(playerid,0xFFFF00FF,"Du hast Checkpoint 'BurgerShot_CP' betreten");
    }
    return 1;
    }

    Die brauchst du ja auch nicht. Der Checkpoint soll doch für alle sichtbar sein, oder nicht?


    Zitat

    native CreateDynamicCP(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1, Float:distance = 100.0);


    Du kannst also einfach folgendes machen:
    CreateDynamicCP( 100.0 , 200.0 , 10.0 , 3.0 );
    Erstellt einen Checkpoint der für alle Spieler sichtbar ist ( -1 ) , in allen Interiors ( -1 ) , in jeder Virtualworld ( -1 ) und sichtbar ab 100.0Units ( 100.0 ).


    Wenn der nur für eine bestimmten Spieler sichtbar sein soll ( zB ID 42 ) dann kann man folgendes machen:
    CreateDynamicCP( 100.0 , 200.0 , 10.0 , 3.0 , .playerid = 42 );

    Sowas nennt man Checkpoint Streamer.


    Einfach mal in der Forensuche oder bei Google Checkpoint Streamer eingeben, da findet man genug.
    Trotzdem würde ich dir das Streamer Plugin empfehlen , da es wirklich der Beste Streamer ist, den man für SA:MP kriegen kann.
    Enthält neben Checkpoints auch Pickups, Objekte, MapIcons und mehr.

    Es gibt keine wirkliche Tabelle dazu. Das sind Hexadezimalwerte.
    Dafür gibt es aber Tools, die dir jeden möglich Farbwert ausgeben.
    http://wiki.sa-mp.com/wiki/Color_Picker_Tool
    http://download.chip.eu/de/SA-MP-Colorpicker_5625356.html



    Eventuell meinst du aber auch die Standartfarbwerte:
    new const playerColors[200] =
    {
    0xFF8C13FF,0xC715FFFF,0x20B2AAFF,0xDC143CFF,0x6495EDFF,0xf0e68cFF,
    0x778899FF,0xFF1493FF,0xF4A460FF,0xEE82EEFF,0xFFD720FF,0x8b4513FF,
    0x4949A0FF,0x148b8bFF,0x14ff7fFF,0x556b2fFF,0x0FD9FAFF,0x10DC29FF,
    0x534081FF,0x0495CDFF,0xFF6CE8FF,0xBD34DAFF,0x247C1BFF,0x0C8E5DFF,
    0x635B03FF,0xCB7ED3FF,0x65ADEBFF,0x5C1ACCFF,0xF2F853FF,0x11F891FF,
    0x7B39AAFF,0x53EB10FF,0x54137DFF,0x275222FF,0xF09F5BFF,0x3D0A4FFF,
    0x22F767FF,0xD63034FF,0x9A6980FF,0xDFB935FF,0x3793FAFF,0x90239DFF,
    0xE9AB2FFF,0xAF2FF3FF,0x057F94FF,0xB98519FF,0x388EEAFF,0x028151FF,
    0xA55043FF,0x0DE018FF,0x93AB1CFF,0x95BAF0FF,0x369976FF,0x18F71FFF,
    0x4B8987FF,0x491B9EFF,0x829DC7FF,0xBCE635FF,0xCEA6DFFF,0x20D4ADFF,
    0x2D74FDFF,0x3C1C0DFF,0x12D6D4FF,0x48C000FF,0x2A51E2FF,0xE3AC12FF,
    0xFC42A8FF,0x2FC827FF,0x1A30BFFF,0xB740C2FF,0x42ACF5FF,0x2FD9DEFF,
    0xFAFB71FF,0x05D1CDFF,0xC471BDFF,0x94436EFF,0xC1F7ECFF,0xCE79EEFF,
    0xBD1FF2FF,0x93B7E4FF,0x3214AAFF,0x184D3BFF,0xAE4B99FF,0x7E49D7FF,
    0x4C436EFF,0xFA24CCFF,0xCE76BEFF,0xA04E0AFF,0x9F945CFF,0xDCDE3DFF,
    0x10C9C5FF,0x70524DFF,0x0BE472FF,0x8A2CD7FF,0x6152C2FF,0xCF72A9FF,
    0xE59338FF,0xEEDC2DFF,0xD8C762FF,0x3FE65CFF,0xFF8C13FF,0xC715FFFF,
    0x20B2AAFF,0xDC143CFF,0x6495EDFF,0xf0e68cFF,0x778899FF,0xFF1493FF,
    0xF4A460FF,0xEE82EEFF,0xFFD720FF,0x8b4513FF,0x4949A0FF,0x148b8bFF,
    0x14ff7fFF,0x556b2fFF,0x0FD9FAFF,0x10DC29FF,0x534081FF,0x0495CDFF,
    0xFF6CE8FF,0xBD34DAFF,0x247C1BFF,0x0C8E5DFF,0x635B03FF,0xCB7ED3FF,
    0x65ADEBFF,0x5C1ACCFF,0xF2F853FF,0x11F891FF,0x7B39AAFF,0x53EB10FF,
    0x54137DFF,0x275222FF,0xF09F5BFF,0x3D0A4FFF,0x22F767FF,0xD63034FF,
    0x9A6980FF,0xDFB935FF,0x3793FAFF,0x90239DFF,0xE9AB2FFF,0xAF2FF3FF,
    0x057F94FF,0xB98519FF,0x388EEAFF,0x028151FF,0xA55043FF,0x0DE018FF,
    0x93AB1CFF,0x95BAF0FF,0x369976FF,0x18F71FFF,0x4B8987FF,0x491B9EFF,
    0x829DC7FF,0xBCE635FF,0xCEA6DFFF,0x20D4ADFF,0x2D74FDFF,0x3C1C0DFF,
    0x12D6D4FF,0x48C000FF,0x2A51E2FF,0xE3AC12FF,0xFC42A8FF,0x2FC827FF,
    0x1A30BFFF,0xB740C2FF,0x42ACF5FF,0x2FD9DEFF,0xFAFB71FF,0x05D1CDFF,
    0xC471BDFF,0x94436EFF,0xC1F7ECFF,0xCE79EEFF,0xBD1FF2FF,0x93B7E4FF,
    0x3214AAFF,0x184D3BFF,0xAE4B99FF,0x7E49D7FF,0x4C436EFF,0xFA24CCFF,
    0xCE76BEFF,0xA04E0AFF,0x9F945CFF,0xDCDE3DFF,0x10C9C5FF,0x70524DFF,
    0x0BE472FF,0x8A2CD7FF,0x6152C2FF,0xCF72A9FF,0xE59338FF,0xEEDC2DFF,
    0xD8C762FF,0x3FE65CFF
    };

    Die sind aber nur für die ersten 200 playerids . Wo die Liste her ist weiss ich nicht mehr,ist jedenfalls schon alt.

    SetPVarInt(playerid,"Bankgeld",floatround(GetPVarInt(playerid,"Bankgeld")*0.10,floatround_round));
    0.10 = 10%
    Du willst dem Spieler aber 10% mehr geben,als er zur Zeit besitzt. Also brauchst du 110% bzw 1.1 .
    Eventuell mal in Mathe besser aufpassen.

    Mit einer Variable vielleicht ?
    Einfach eine Variable erstellen die den Wert ändert, falls per ShowPlayerDialog etwas angezeigt wird.
    if(strcmp(cmd, "/hack", true) == 0)
    {
    new
    bool:bNoCar = true,
    carid = GetPlayerVehicleID(playerid);
    for(new i = 0; i < sizeof(PolizeiVehs); i++)
    {
    if(IsPlayerInVehicle(playerid)
    {
    if(carid == PolizeiVehs[i])
    {
    bNoCar = false;
    ShowPlayerDialog(playerid,DIALOG_HACK_1,DIALOG_STYLE_LIST,"Hacking the Car","Wanteds\nClearen","Auswählen","Abbrechen");
    }
    }
    }
    for(new i = 0; i < sizeof(FBIVehs); i++)
    {
    if(IsPlayerInVehicle(playerid)
    {
    if(carid == FBIVehs[i])
    {
    bNoCar = false;
    ShowPlayerDialog(playerid,DIALOG_HACK_1,DIALOG_STYLE_LIST,"Hacking the Car","Wanteds\nClearen","Auswählen","Abbrechen");
    }
    }
    }
    for(new i = 0; i < sizeof(ArmyVehs); i++)
    {
    if(IsPlayerInVehicle(playerid)
    {
    if(carid == ArmyVehs[i])
    {
    bNoCar = false;
    ShowPlayerDialog(playerid,DIALOG_HACK_1,DIALOG_STYLE_LIST,"Hacking the Car","Wanteds\nClearen","Auswählen","Abbrechen");
    }
    }
    }
    if(bNoCar)
    {
    SendClientMessage(playerid,COLOR_GREY," Du bist in kein befügtes Auto!!!");
    }
    return 1;
    }


    PS:

    Zitat

    SendClientMessage(playerid,COLOR_GREY," Du bist in kein befügtes Auto!!!");


    Sehr geiles Deutsch.

    Nein,dass heisst das die Abfrage immer falsch ist.Somit geht der Code nicht weiter und es wird nie gespeichert.


    Was wird denn
    printf("INI_Open(%s)",accFormat);
    ausgegeben?
    Denn es sieht ganz so aus, als würde entweder accFormat falsch sein oder du hast zuvor die Datei nicht geschlossen,weshalb SII keine neue Datei öffnen kann.
    Bist du denn sicher,dass accFormat beim erstellen und speichern gleich ist bzw die Datei auch wirklich existiert?


    Weil ich damals auch damit Probleme hatte, hier mal ein fix.
    stock INI_Open(const filename[])
    {
    if (!filename[0]) return false;
    if (gFile[E_OPEN])
    {
    if (!strcmp(gFile[E_FILENAME], filename, true)) {
    return true;
    }
    printf("filename = '%s' | old = '%s'",filename,gFile[E_FILENAME]);
    INI_Close(); // FIX
    // return false;
    }
    new File: h;
    h = fopen(filename, io_readwrite);
    if (h)
    {
    INI_strcpy(gFile[E_FILENAME], filename, INI_MAX_FILENAME, INI_MAX_FILENAME);
    new line[INI_MAX_LINE];
    new ln = -1;
    new separator;
    while (((ln + 1) < INI_MAX_LINES) && (fread(h, line)))
    {
    ln ++;
    StripNewLine(line);
    separator = strfind(line, "=", false);
    if ((line[0] == ';') || (line[0] == '=') || (separator == -1) || (separator > INI_MAX_KEY))
    {
    if (line[0] == ';')
    {
    INI_strcpy(gCache[ln][E_VALUE], line, INI_MAX_VALUE, INI_MAX_VALUE);
    }
    else
    {
    INI_strcpy(gCache[ln][E_VALUE][1], line, INI_MAX_VALUE, INI_MAX_VALUE);
    gCache[ln][E_VALUE][0] = ';';
    }
    continue;
    }
    INI_strcpy(gCache[ln][E_KEY], line, separator, INI_MAX_KEY);
    INI_strcpy(gCache[ln][E_VALUE], line[separator + 1], INI_MAX_VALUE, INI_MAX_VALUE);
    if (!gCache[ln][E_VALUE][0]) gCache[ln][E_VALUE][0] = ' ';
    }
    fclose(h);
    gFile[E_OPEN] = true;
    return 1;
    }
    return 0;
    }
    Sollte es daran liegen,dass du die Datei zuvor nicht richtig geschlossen hast, ist der fix aber keine optimale Lösung.Du solltest dann lieber herrausfinden wo du ursprünglich nicht schließt.

    Debuggen ...


    printf("Player[playerid][eingeloggt] %d",Player[playerid][eingeloggt]);
    if(Player[playerid][eingeloggt] == 1)
    {
    printf("INI_Open(%s)",accFormat);
    if(INI_Open(accFormat))
    {
    printf("Schreibe Daten...");
    INI_WriteInt("Kills",Player[playerid][Kills]);
    INI_WriteInt("Points",Player[playerid][Pkt]);
    INI_WriteInt("Deaths",Player[playerid][Deaths]);
    INI_WriteInt("Geld",GetPlayerMoney(playerid));
    INI_WriteInt("Score",GetPlayerScore(playerid));
    INI_WriteInt("Wantedlevel",Player[playerid][Wantedlevel]);
    INI_WriteInt("Admin",Player[playerid][Admin]);
    INI_WriteInt("Drugs",Player[playerid][Drugs]);
    INI_WriteInt("Spawn",Player[playerid][spawnc]);
    INI_WriteInt("WantedVariable",Player[playerid][WVar]);
    INI_WriteInt("HausVariable",Player[playerid][HVar]);
    INI_WriteInt("Shotgunskill",Player[playerid][Shotgun]);
    INI_WriteInt("SawnOff",Player[playerid][SawnOff]);
    INI_WriteInt("Spas12",Player[playerid][Spas12]);
    INI_WriteInt("Premium",Player[playerid][VIP]);
    INI_WriteInt("Bank",Player[playerid][Bank]);
    INI_WriteInt("Verwarnungen",Player[playerid][Warns]);
    INI_WriteInt("GPS",Player[playerid][GPS]);
    INI_WriteString("Rank",string_rank );
    INI_WriteInt("Knastzeit",knastzeit[playerid]);


    INI_Save();
    printf("Speichere Daten...");
    INI_Close();
    printf("Schließe Datei...");
    }
    }


    So ähnlich auch beim erstellen der Datei, falls die Datei überhaupt nicht erstellt wird im scriptfiles Ordner.

    Wenn ich GTA install...


    Dauert es 2h download oda so... Ich habe modsobeite installiert weil ich mal testen wollte was man damit machen kann, seitdem gehts nicht mehr


    Hast doch selber die Lösung gepostet.Wie wäre es denn mit deinstallieren der Mod?