Beiträge von d0ma

    #define FREE_VW_OFFSET 10000000 //damit keine geringen IDs die meist schon im script verwendet werden genutzt werden
    stock SetPlayerInOwnWorld(playerid)
    {
    SetPlayerVirtualWorld(playerid, FREE_VW_OFFSET+playerid);
    }

    der OffSet um Überschneidungen zu vermeiden


    new PQuery[]="INSERT INTO blitzer (`Blitzerid`,`Blitzerx`,`Blitzery`,`Blitzerz`,`BlitzerRotz`,`Geschwindigkeit`,`Strafe`,`Punkte`,`LastBlitz`,`Filmabschnitte`, `Toleranz`,`Inuse`) VALUES ('%d','%f','%f','%f','%f','%d','%d','%d','%s','%d','%d','%d')";


    printf("%d",strlen(PQuery));


    was strlen ausgibt wirst du wohl wissen vergleich mal die größe mit der deines strings den du deklariert hast
    new query[128];


    Schwachsinn, für %f und %d werden andere Werte eingesetzt also ist das strlen nicht richtig


    einfach wie ich es oben beschrieben habe ;)

    new query[128];
    ist nicht genug platz, die abfrage hat mehr als 128 Zeichen, heißt soviel wie das die Abfrage abgeschnitten wird nach den 127 Zeichen


    ->


    new query[550]; wie bei LoadBlitzer ist warscheinlich ausreichend ?

    da fehlen { und } klammern bei dem if, das if besteht nur aus new Name[24]; da keine klammern da sind, so ist new Name[24]; unterhalb auch nicht definiert:
    So:
    ocmd:irc(playerid,params[])
    {
    new string[128],text[128];
    if(sscanf(params,"s",text))return SendClientMessage(playerid,-1,"Tippe: /irc [Text]");
    for(new i = 0; i < GetMaxPlayers(); i++)
    {
    if(irc[i] == irc[playerid])
    {
    new Name[24];
    GetPlayerName(playerid,Name,24);
    format(string,sizeof(string),"IRC: %s : %s",Name,text);
    SendClientMessage(i,-1,string);
    }
    return 1;
    }
    return 1;
    }

    Ihr und euere OnPlayerUpdate paranoya!!!!! Ihr lest einmal ein Tutorial und OnPlayerUpdate ist schlecht für immer und ewig, schwachsinn :sleeping: :wacko: ?(8|X(


    Also meiner Meinung nach ist das in OnPlayerUpdate besser aufgehoben....
    siehe http://forum.sa-mp.de/san-andr…ng-fragen-471#post1472729 als Grund

    Die Variable existiert schon, du musst sie umbennen.

    new Hour, _Minute, Second;
    gettime(Hour, _Minute, Second);
    if(Hour >= 22 && Hour <= 8)return SendClientMessage(playerid, -1, "Du kannst dich jetzt nicht registrieren, bitte versuch es später erneut.");


    Mit dem code kann man sich IMMER registrieren.
    Eine Zahl "Hour" kann nicht gleichzeitig >=22 und gleichzeitig <= 8 sein = Immer falsch die if Abfrage(egal zu welcher zeit)
    statt dem && muss man ein || schreiben

    Wer es genauer haben muss:

    Das hat nicht so lange gedauert, GTA-SA kam für den PC mitte 2005 raus und SA-MP gab es bereits im ersten Halbjahr von 2006


    Vorher wurde auch schon an VC:MP (Vice City) gearbeitet, was natürlich eine gute Basis für SA-MP war.

    Im Prinzip: Warum ein Objekt von LV einen Object slot nehmen lassen(von den 1000 möglichen) wenn der Spieler in LS ist, wo er das Objekt sowieso nicht sehen kann weil er soweit weg ist.
    Es gibt 1000 Objekt Slots, nun gibt es die Idee nur die Objekte um den Spieler herum zu laden.
    Also wird ständig überprüft welche Objekte aus einer Liste überhaupt in der Nähe des Spielers sind, die nah da sind werden mit CreatePlayerObject hinzugefügt, alle anderen die weit weg sind und vorher geladen waren werden mit DestroyPlayerObject entfernt.

    Hallo ich suche ein Säulenobjekt.
    Kann mir jemand die ID nennen?


    //edit alte Anfrage hat sich erledigt.


    "Column"(Säule): http://gta-sa-mp.de/object/?searchName=column
    scheinen aber mehrere zu sein


    Ich suche ein ring für ein kreisverkehr es sollte einer sein wo man nicht durchfahren kann.


    "fountain"(Brunnen): http://gta-sa-mp.de/object/?searchName=fountain kann man durchfahren aber schau dir mal die kleinen pflanzen hier an(unten): "plant" http://gta-sa-mp.de/object/?searchName=plant die kannst du rundrum setzen

    für was der for loop ? reichen nicht einfach die 2 Zeilen im inneren ?


    for(new i=1; i<MAX_PLAYERS; i++)
    {
    if(listitem==i)
    {
    ZeileZ[playerid]=listitem;
    SendClientMessageEx(playerid,Rot,"%i",ZeileZ[playerid]);
    break;
    }
    }
    und
    ZeileZ[playerid]=listitem;
    SendClientMessageEx(playerid,Rot,"%i",ZeileZ[playerid]);
    würden das gleiche macehn

    Das hier sollte die Lösung sein:
    sscanf teilt einen text mit dem suchen nach leerzeichen(" ") auf, deine datei hat aber kommas(",")


    entweder kommas in der datei durch leerzeichen ersetzen


    oder sscanf umschreiben zu:
    sscanf(line, "p<,>dffffff",....
    damit es auch nach kommas aufteilt

    Weiß jemand eine Formel um den Mittelpunkt einer Vierecks auszurechnen?


    wie liegt das Viereck vor ? 2D oder 3D, gedreht ? wenn es ein einfaches Viereck ist, das aus 2 Punkten aus aufgespannt wird(min und max), dann genügt das hier:
    SquareCenter2D(&Float:result_x, &Float:result_y, Float:min_x, Float:min_y, Float:max_x, Float:max_y)
    {
    result_x = floatdiv( floatsub( max_x, min_x ), 2.0);
    result_y = floatdiv( floatsub( max_y, min_y ), 2.0);
    return 1;
    }


    @[DT]Beavis: @Rawr:
    Ich finde die OnPlayerUpdate version um einiges besser als einen Timer...

    public timer()
    {
    for(new i=0; i< MAX_PLAYERS;i++)
    {
    if(IsPlayerInRangeOfPoint(...)
    {
    //.......
    //.......
    }
    }
    }
    = sagen wir mal für 200 Spieler eine range-Abfrage auf einen schlag(200x)


    oder so: (besser)
    public OnPlayerConnect(playerid)
    {
    lastRangeCheck[playerid] = GetTickCount();
    return 1;
    }


    new lastRangeCheck[MAX_PLAYERS];
    public OnPlayerUpdate(playerid)
    {
    new tick = GetTickCount(); // wird bei mir jedes mal mit OnPlayerUpdate ausgeführt
    if(tick - lastRangeCheck[playerid] > 100) // alle 100 ms
    {
    if(IsPlayerInRangeOfPoint(...)
    {
    //.......
    //.......
    }
    }
    }
    = für alle Spieler zu einem anderen Zeitpunkt


    so einfach kann man OnPlayerUpdate nutzen um 200 Aufgaben aufzuteilen