Beiträge von Hagi

    Jemand ne Idee wie ich abfragen kann ob ein in einer Variable gespeicherter 3d Text eistiert ?
    Weil wenn ich noch kein 3dText erstellt habe, ist meine variable auto3d[vehicleid] ja null. Ich will aber nicht den Text mit der ID 0 löschen.

    Hab mir die Frage gestellt, welche Möglichkeit in Ressourcennutzung und Laufzeit besser ist.


    Einen Timer nach
    a)
    SetTimerEx("blub",time,1,"i",playerid); // bei OnPlayerConnect
    public blub(playerid)
    {
    //blablabla
    }


    b)
    SetTimer("blub",time,1);
    public blub()
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    //blablabla
    }
    }
    }


    ------------------------------------------------------------


    Außerdem hab ich mich gefragt ob ein Timer mit Wiederholung 1 besser oder schlechter ist als ein Timer, welcher sich rekursiv aufruft.


    Wenn jemand eine gute Antwort auf meine beiden Fragen kennt, würd ich mich über einen Post sehr freuen.
    MFG
    Hagi


    edit: Push nach Forenregeln, letzter Edit am Samstag, 19. Mai 2012, 16:46.
    Das Thema interessiert mich eigentlich immer noch. Also wenn wer was dazu zu sagen hat wärs schön, wenn er es postet.

    danke Benjamin funktioniert super.


    edit: 10.05.2012 - 20:22
    So neues Problemchen:


    Meine MYSQL Query
    format(query,sizeof(query),"SELECT Name, LastIP FROM User WHERE `LastIP` LIKE '%%s%'",newip); mit newip als die IP bestehend aus drei Blöcken funktioniert nicht.
    Gebe Ich die Abfrage so in die SQL Zeile in PHPMyAdmin ein, so erhalte ich minestend einen Eintrag und zwar meinen eigenen.
    Führe ich die Query jedoch übers Script aus, so werden keine Datensätze zurückgegeben.


    Ich habe so den Verdacht, dass die Prozentzeichen bezüglich des Enthaltens eines Strings vom Pawn Compiler falsch interpretiert werden, sodass eine falsche Query gesendet wird.
    Kennt da jemand eine Lösung oder Alternative ?
    Ich habe schon an escapen von den Zeichen gedacht, aber damit kenne ich mich leider nicht aus.


    Wenn ich es so versuche (glaub so \% ist das Prozentzeichen escaped)
    format(query,sizeof(query),"SELECT Name, LastIP FROM User WHERE `LastIP` LIKE '\%%s\%'",newip);
    dann crasht der Server.


    Schonmal Danke für eure Hilfe.


    edit(12.05.2012_13:10): push nach Forenregeln

    Zitat von Forenregeln

    III.2 Damit sind insbesondere solche Beiträge oder Bearbeitungen von Beiträgen
    unzulässig, die ausschließlich dazu dienen sollen, das jeweilige Thema
    zu pushen.


    Dies gilt nicht, wenn der letzte Beitrag des Themas bereits seit 48 Stunden besteht.


    edit(17.05.2012_11:39): push nach Forenregeln

    Zitat von Forenregeln

    III.2 Damit sind insbesondere solche Beiträge oder Bearbeitungen von Beiträgen
    unzulässig, die ausschließlich dazu dienen sollen, das jeweilige Thema
    zu pushen.


    Dies gilt nicht, wenn der letzte Beitrag des Themas bereits seit 48 Stunden besteht.


    edit(19.05.2012_16:34): push nach Forenregeln

    Zitat von Forenregeln

    III.2 Damit sind insbesondere solche Beiträge oder Bearbeitungen von Beiträgen
    unzulässig, die ausschließlich dazu dienen sollen, das jeweilige Thema
    zu pushen.


    Dies gilt nicht, wenn der letzte Beitrag des Themas bereits seit 48 Stunden besteht.

    Guten Nachmittag Breadfisher,
    folgender Code soll jedes Auto mit einem 3D Text versehen.
    Alle Autos werden im Stock getVehForSale erstellt, welcher die ID zurückgibt.
    Allen Autos wird das Nummernschild gesetzt. Jedoch nur das letzte Autos erhält auch den 3D Text. Eigentlich sollen aber alle Autos einen 3D Text erhalten. Deshalb wird auch für jedes Autos in einem Array die 3D Text ID gespeichert (autoverkauf3d).


    Warum erhält aber nur das letzte Auto den 3DText ?


    maxplatz ist übrigens auch der maximale Index für die beiden Arrays autoverkauf und autoverkauf3d.



    for(new i = 0;i<maxplatz;i++)
    {
    autoverkauf[i] = getVehForSale(autoverkaufplatz[i][iverkauf],autoverkaufplatz[i][ix],autoverkaufplatz[i][iy],autoverkaufplatz[i][iz],autoverkaufplatz[i][iangle]);
    SetVehicleNumberPlate(autoverkauf[i], "VERKAUF");
    SetVehicleToRespawn(autoverkauf[i]);
    new string[96];
    format(string,96,"Name: %s\nTankvolumen: %dLiter\nVerbrauch: %dLiter/100Km\nBatterie: %d Volt",pAuto[autoverkauf[i]][iname],pAuto[autoverkauf[i]][imaxfuel],pAuto[autoverkauf[i]][iverbrauch],pAuto[autoverkauf[i]][imaxbatterie]);
    autoverkauf3d[i] = Create3DTextLabel(string, weis, autoverkaufplatz[i][ix],autoverkaufplatz[i][iy], autoverkaufplatz[i][iz],10.0 , 0, 0);
    Attach3DTextLabelToVehicle(autoverkauf3d[i],autoverkauf[i],0,0,1.5);
    }


    edit: 18.05.2012 kein push


    Habe eine Lösung gefunden. Anstatt die 3D Texte immer zu zerstören und neu zu createn, erstelle ich bei OnGameModeInit alle einmal und ändere im Callback dann immer nur noch den String und attache diese neu.
    Das Problem resultierte demnach aus dem Destroyen und neu erstellen.


    *close*

    Sieht jemand den Fehler ?



    new data[18][32];
    /* [...] data mit strings füllen [...] */
    new id = CreateVehicle(strval([data[17]),floatstr(data[1]),floatstr(data[2]),floatstr(data[3]),floatstr(data[4]),strval(data[5]),strval(data[6]),-1); // errorzeile


    Zitat

    C:\~.pwn(1743) : error 029: invalid expression, assumed zero
    C:\~.pwn(1743) : warning 215: expression has no effect
    C:\~.pwn(1743) : error 001: expected token: ";", but found ")"
    C:\~.pwn(1743) : error 029: invalid expression, assumed zero
    C:\~.pwn(1743) : fatal error 107: too many error messages on one line


    edit: ah gefunden: beim Model Parameter vor data ein [

    Okai, danke keinen Error mehr. Eigentlich hätte ich da auch selber drauf kommen können. War mir bis jetzt aber nicht bekannt, dass man den Rückgabewert im Methodennamen mit angeben kann.


    Hätt aber noch noch frage warum ich jetzt die forward brauche. Für andere stocks welche ich nutze brauch ich keine.

    In des Stats kannst du ja nochmal durch 1000 dividieren (für Sekunden) und dann am besten das ganze noch runden, damit du keine Kommazahl bekommst.

    Guten Tag Breadfisher.
    Hab ein kleines Problem:


    ich habe hier folgende Funktion:


    SetPVarFloat(playerid,PGELD_KEY,mysql_GetFloat("accounts", "Geld", "Name",pName));
    mit folgendem stock


    stock mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:sqlfloat;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT %s FROM %s WHERE %s = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(sqlfloat);
    mysql_free_result();
    return sqlfloat;
    }
    Wie man sehen kann wird eine float per return an SetPVarFloat zurückgegeben. Jedoch erhalte ich in der Zeile "return sqlfloat;" einen Tag Missmatch Error.
    Sieht jemand den Fehler ? Das Plugin ist das MYSQL Plugin von BlueG

    Ja genau, da der Unix Timestamp in Sekunden zählt. Du kannst natürlich durch 60 dividieren um die Minuten zu erhalten....

    GetTime() ist nur eine Funktion , die die Globalen Zeit sagt.
    Das wäre nicht so passend wenn man ein Timer hat der über Stunden und Minuten geht :)


    Nach dem Wiki von GetTime()

    Zitat von Wiki

    Returns The function itself returns a Unix Timestamp, however if arguments are specified then the hours, minutes and seconds for the current time are returned.


    gibt die Funktion den UnixTimestamp aus. GGf kann man hier noch einen stock nutzen, welcher die drei Variablen in einen Interger umwandelt. Dieser ist wie von BloodyEric noch nicht in Gefahr über die 32bit Grenze zu laufen. Mit diesem in Sekunden laufendem Timestamp kann man ganz einfach mit einer Subtraktion die verstrichene Zeit in Sekunden rausfinden.


    Also:


    public OnPlayerEnterDynamicRaceCP(playerid, checkpointid)
    {
    if(checkpointid == funcheckp1)
    {
    new year,month,day,hour,minute,second;
    getdate(year,month,day);
    gettime(hour,minute,second);
    SetpVarInt(playerid,"timestamp",mktime(hour,minute,second,day,month,year));
    return 1;


    }
    if(checkpointid == funcheckp2)
    {
    new year,month,day,hour,minute,second;
    getdate(year,month,day);
    gettime(hour,minute,second);
    newtimestamp = mktime(hour,minute,second,day,month,year);
    dif = newtimestamp - GetpVarInt(playerid,"timestamp");
    SendClientMessage(.....
    return 1;
    }
    return 1;
    }
    stock mktime(hour,minute,second,day,month,year)
    {
    new timestamp2, days_of_month[12];


    timestamp2 = second + (minute * 60) + (hour * 3600);
    if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
    days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31};
    } else {
    days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31};
    }
    new days_this_year = 0;
    days_this_year = day;
    if(month > 1) {
    for(new i=0; i<month-1;i++) {
    days_this_year += days_of_month[i];
    }
    }
    timestamp2 += days_this_year * 86400;
    for(new j=1970;j<year;j++) {
    timestamp2 += 31536000;
    if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) timestamp2 += 86400;
    }
    return timestamp2;
    }

    noch weiter vorkaun?
    Du musst das ganze als einen Befehl erstellen



    if(!strcmp(cmdtext, "/gefängnis", true) && strlen(cmdtext) != 0)
    {
    if(PlayerInfo[playerid][Job] == Cop)
    {
    new pName[MAX_PLAYER_NAME],string[64];
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    GetPlayerName(i,pName,sizeof(pName));
    if(PlayerInfo[i][pJailed] == 2) // Alkatraz
    {
    format(string,sizeof(string),"Alkatraz: %s",pName);
    }
    else if(PlayerInfo[i][pJailed] == 1) // Knast
    {
    format(string,sizeof(string),"Knast: %s",pName);
    }
    SendClientMessage(playerid,COLOR,string);
    }
    }
    }
    }
    #


    edit: MAX_PLAYER -> MAX_PLAYERS


    new pName[MAX_PLAYER_NAME],string[64];
    for(new i = 0;i<MAX_PLAYER;i++)
    {
    if(IsPlayerConnected(i))
    {
    GetPlayerName(i,pName,sizeof(pName));
    if(PlayerInfo[i][pJailed] == 2) // Alkatraz
    {
    format(string,sizeof(string),"Alkatraz: %s",pName);
    }
    else if(PlayerInfo[i][pJailed] == 1) // Knast
    {
    format(string,sizeof(string),"Knast: %s",pName);
    }
    SendClientMessage(playerid,COLOR,string);
    }
    }

    Wenn du SAMP machen willst dann pawn
    Wenn du MTA machen willst dann LUA


    Musst dich halt entscheiden. Beide MP-Versionen haben ihre eigenen Vor und Nachteile. Aber jetzt bitte hier nicht wieder ne Diskussion losbrechen.

    Also die neuen Objekte sind dann natürlich da.
    Alle Objekte die nicht mehr da sein sollen und nicht von GTA stammen, dennoch da sind, müssen zwangsläufig in deinem GM sein.
    Demnach einfach mal alle CreateObjects die zu der Stadthalle gehören rausmachen und dann nur noch die neuen Objekte einfügen.

    So wie ich das jetzt verstanden habe, wird bei jedem Spieler über ein Array gespeichert in welchem Knast er ist, bzw ob er gar nicht drin ist.
    Dann musst du einfach mit einer for-loop alle Spieler durchgehen und bei jedem bei dem die If zutrifft den Namen an den die Command ausführende ID senden.

    Stimmt, du hast praktisch jetzt den zweiten Index als Stringlänge definiert.
    so
    new RadioStations[][][16] =
    {
    {"Name1", "Link1"},
    {"Name2", "Link2"}
    };
    Sollte das ganze funktionieren. Dann ist der reste Index die Reihe, der zweite die Spalte und der dritte die Größe der Strings.