Beiträge von Goldkiller

    new bool:lastpos[MAX_VEHICLES][3];
    Lern die Grundlagen, bool ist für true / false Werte gedacht.Du brauchst aber Float

    new Float:lastpos[MAX_VEHICLES][3];


    Zitat

    GetVehiclePos(vehicleid, &Float:X, &Float:Y, &Float:Z)

    Dann wird PayDay vllt 2x hintereinander aufgerufen. Welche Nachricht bekommst du denn 2x gesendet ? Mal geprüft ob du nur die Textnachrichten 2x bekommst oder auch doppeltes Geld?


    Füg doch einfach Debug-Nachrichten ein.Denn an PayDay() ist nichts zu sehen, auch nicht bei ClientLanguageText.

    Du hast falsch kopiert.Für Checkpoints nehm Ich in dem Beispiel 4 Werte.
    enum e_Muell {
    Float:M_fX,
    Float:M_fY,
    Float:M_fZ,
    Float:M_fRad
    }


    Bei dir sind es aber 5.

    Zitat

    {-304.1485,1019.4240,19.3189,90.8649, 6.0},


    Der Durchgestrichene Wert ist wahrscheinlich die Blickrichtung, die du aber nicht brauchst.

    #include <a_samp>
    #include "ocmd"


    #if defined FILTERSCRIPT // Und ... ist FILTERSCRIPT definiert ? Nein
    #define CopColor 0x0069FFFF
    #define GangfightColor 0xFFD200FF
    #define GroveColor 0x19FF00FF


    new Flughafen;
    enum Userdateien
    {
    bool:imfight
    }


    new Gang[MAX_PLAYERS][Userdateien];


    public OnFilterScriptInit()
    {
    Flughafen = GangZoneCreate(1375.78, -2660.902, 2140.15, -2435.881);
    print("Gangfightsystem by Danny");
    return 1;
    }


    ...
    ...
    ...
    public OnPlayerConnect(playerid)
    {
    GangZoneShowForAll(Flughafen, 0xFFFF0096);
    return 1;
    }
    Die Zeile
    #if defined FILTERSCRIPT
    macht Probleme.Du hast zuvor FILTERSCRIPT nicht definiert.Entfern die Zeile einfach ( dann musst du aber noch #endif entfernen ) oder füge
    #define FILTERSCRIPT
    darüber ein.



    //Edit:
    Bin mir irgendwie nicht sicher,ob es bei dir ein Filterscript oder Gamemode werden soll.
    OnFilterscriptInit/Exit = Nur Filterscript
    OnGamemodeInit/Exit = Nur Gamemode


    Der Threadtitel ist ziemlich dämlich.

    Nein,2048 ist nicht das Limit. Es wird wahrscheinlich eines geben, vllt bei 0xFFFFFF(FF). Das ist aber deutlich über 2048.
    Was passiert denn bei der Formatierung ? megabiginput ist wie definiert ?

    stock Hausladen()
    {
    new Hausdatei[64];
    new besitzer = dini_Int(Hausdatei,"Besitzer"); // Hausdatei wurde noch nicht formatiert.Sicher das 'besitzer' nicht ein String/Text ist bzw sein soll?
    new Float:hx,Float:hy,Float:hz;
    format(Hausdatei,sizeof(Hausdatei),"/Houses/%s.txt"); // %s aber kein Parameter dafür vorganden
    new string[128];
    format(string,sizeof(string),"Besitzer:%s",besitzer); // (Noch ist ) 'besitzer' eine Zahl,formatierst aber als String


    hx = dini_Float(Hausdatei,"Haus-X");
    hy = dini_Float(Hausdatei,"Haus-Y");
    hz = dini_Float(Hausdatei,"Haus-Z");


    CreatePickup(1272,1,hx,hy,hz,0);
    Create3DTextLabel(string,GRUEN,hx,hy,hz,5,0,0);
    }


    Fang lieber klein an, da ist so einiges Falsch.

    Ich hab das gerade schon im IRC erwähnt.Im Forum wird schon seit langer Zeit das Wort dynamic / dynamisch überstrapaziert und hat schon seit langen seinen Sinn verloren. Wie seid ihr auf Dynamic Minecraft gekommen ? Ich selber spiele kein Minecraft, mich interessiert aber trotzdem was euren Server Dynamic macht.
    Vielleicht überzeugt mich deine Aussage dazu so sehr,dass ich auch mal Minecraft ausprobiere.



    //Edit: Ach ja , wir haben einen Minecraft Sammelthread :-0


    new bool:SendMSG;
    for(new i;i<MAX_PLAYERS;i++)
    {
    SendMSG = true;
    if(!IsPlayerConnected(i)) continue;
    format(string,sizeof(string),"Properties: $%d Zone/s: $%d (%d zone/s) Job: $%d",BMoney[i],iMoney[i], ( iMoney[i] / 300 ) , JMoney[i]);
    format(stringd,sizeof(stringd),"Unternehmen: $%d Gebiet/e: $%d (%d Gebiet/e) Job: $%d",BMoney[i],iMoney[i], ( iMoney[i] / 300 ) , JMoney[i]);
    if(SendMSG) {
    ClientLanguageText(i,COLOR_ORANGE,string,stringd);
    SendMSG = false;
    }
    }



    Abgesehen davon,dass es total beknackt ist ... Hier mal genauer.




    new
    bool:SendMSG;
    for(new i;i<MAX_PLAYERS;i++)
    {
    SendMSG = true;
    /* .. */
    if(SendMSG) {
    /* .. */
    SendMSG = false;
    }
    }

    Sinn ? SendMSG wird bei dir immer true sein. Somit macht die Abfrage keinen Sinn.


    Wie auch immer. Ich hab das mal überarbeiten. Habs nicht auf Fehler kompilieren lassen.
    Solltest du dabei Fehler bekommen, poste die mal.
    public PayDay()
    {
    new
    iMoney, // Wieso Array ?
    string[100],
    stringd[100],
    BMoney, // Wieso Array ?
    JMoney; // Wieso Array ?
    // bool:SendMSG; // brauchen wir nicht
    SendClientMessageToAll(COLOR_ORANGE,"______________________Payday______________________");
    for(new i;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i)) continue;
    // Alle Variablen "reseten"
    // Damit überprüfen, ob Geld dazu kommt oder nicht
    iMoney = 0;
    BMoney = 0;
    JMoney = 0;
    for(new g; g < sizeof(Gebiete); g++)//Damit alle gebiete durchlaufen werden
    {
    if(gTeam[i] == Gebiete[g][gOwner])
    {
    iMoney += 300;
    // Player[i][Bank] += iMoney;
    // Wenn man immer iMoney zu iBank hinzufügt
    // Dann vervielfältigt sich das immer
    // Beim 1x wird durch iMoney 300 mehr
    // danach ( beim 2x ) um 600 mehr
    // 3x - 900 mehr
    // usw
    // daher
    Player[i][Bank] += 300;
    }
    }
    if(Org[i][Member] == 4)
    {
    JMoney += 425;
    }
    if(Org[i][Member] == 5)
    {
    JMoney += 350;
    }
    if(Org[i][Member] == 6)
    {
    JMoney += 500;
    }
    if(Org[i][Member] == 7)
    {
    JMoney += 550;
    }
    Player[i][Bank] += JMoney;
    if(GetPVarInt(i, "Businessearnings") != 0)
    {
    BMoneyi = GetPVarInt(i, "Businessearnings");
    Player[i][Bank] += GetPVarInt(i, "Businessearnings");
    }
    // Wenn iMoney , BMoney oder JMoney nicht der Startwert ist ( 0 )
    // Dann wurde irgendwo Geld generiert.
    // Also kommt auch nur das in die Abfrage
    if( iMoney > 0 || BMoney > 0 || JMoney > 0 ) {
    // wir brauchen nicht formatieren, wenn wir die Nachricht sowieso
    // nicht senden wollen
    format(string,sizeof(string),"Properties: $%d Zone/s: $%d (%d zone/s) Job: $%d",BMoneyi,iMoney, ( iMoney / 300 ) , JMoney ) ;
    format(stringd,sizeof(stringd),"Unternehmen: $%d Gebiet/e: $%d (%d Gebiet/e) Job: $%d",BMoneyi,iMoney, ( iMoney / 300 ) , JMoney);
    ClientLanguageText(i,COLOR_ORANGE,stringd,string);
    }
    }
    SendClientMessageToAll(COLOR_ORANGE,"__________________________________________________");
    return 1;
    }


    Und tatsächlich, SendMSG machte auch hier immernoch keinen Sinn.


    Wer hat denn überhaupt die Idee gehabt, dass das ; dort einen Unterschied macht ? Das ist völlig egal, ob dort ein ; ist oder nicht.


    new Name[MAX_PLAYER_NAME] = GetPlayerName(playerid);
    Das ist schon mal falsch.


    stock GetMySQLID(playerid) {
    new
    Name[MAX_PLAYER_NAME];
    for (new i = 0; i < 200 ; i++) // Wieso hattest du hier 199 ?
    {
    GetPlayerName(playerid,Name,sizeof(Name));
    if( ( Players[i][Player_ID] == playerid ) &&
    ( Players[i][Player_IsUsed] == true ) &&
    ( !strcmp(Players[i][Player_Name],Name , true, MAX_PLAYER_NAME) )
    )
    {
    return i;
    }
    }
    return -1;
    }


    Wie auch immer,Ich versteh die Idee hinter deiner Player-Verwaltung nicht.Für mich sieht das nämlich nicht so aus, als würdest du mit einmaligen UserID's arbeiten.

    Es so zu machen ist ein wenig Fehlerhaft.
    Falls du in Slot<2> zB ItemID<5> hast, und möchtest jetzt noch zu ItemID<5> die Menge
    3 hinzufügen. Jetzt ist aber der Slot<0> leer. Jetzt wird in Slot<0> ItemID<5> hinzugefügt
    mit der Menge 3. Jetzt hast du aber in Slot<0> und Slot<5> ItemID<5> :/.




    #define INVENTAR_EMPTY_SLOT -1
    GiveItem(playerid,itemid,menge)
    {
    new
    i;
    // erst überprüfen ob das Item schon irgendwo im Inventar liegt
    for( i = 0; i < ITEMSLOTS; i++)
    {
    if( itemid == Inventar[playerid][Inv][i] )
    {
    Inventar[playerid][Menge][i] += menge;
    return 1;
    }
    }
    // noch nicht in inventar,also neuen slot suchen
    for( i = 0; i < ITEMSLOTS; i++)
    {
    if( itemid == INVENTAR_EMPTY_SLOT )
    {
    Inventar[playerid][Inv][i] = itemid;
    Inventar[playerid][Menge][i] = menge;
    return 1;
    }
    }
    return 0;
    }


    Ich nehm bei sowas nie 0 als leer / frei an. Denn 0 kann doch bestimmt
    eine ItemID bei dir sein.
    Das mit 0 wäre nur gut, wenn du immer bei 1
    mit dem Zählen anfängst. Macht man aber meistens nicht.

    Es geht mir gar nicht um den Befehl. Sieht aber jetzt eher danach aus,als willst du noch etwas neues.Ich meine den Ausgangspost.


    Zitat

    Hallo,


    würde gerne an einem bestimmten Ort ( Koordinaten sammeln ) durch einen Befehl ( /IRGENDWAS ) eine Explosion ( CreateExplosion ) hervorrufen. Genauer: Der Befehl wird eingegeben, dann 10 Sekunden ( SetTimerEx ) bis zur detonation ( CreateExplosion ) und siehe da das Tor ist offen ( MoveObject ) . Es handelt sich nämlich um die Tresortür ( var = CreateObject(__TRESORID__,... ) . Es sollte auch nur in der umgebung der Tür funktionieren ( IsPlayerInRangeOfPoint ) .
    Wäre einer so nett und würde mir das machen?


    Wo passt es denn bei dir nicht? Versuch es doch erstmal alleine, fragen kann man danach immernoch.

    Wie wäre es, wenn du den Ansatz alleine probierst? Dann kann man immernoch helfen.


    Du hast ja alles wichtige genannt, den Ansatz solltest du da schaffen.

    Das ist ja richtig nice! Was ist das denn für ein System? Könnte man sowas bald als Plugin entwickeln oder wie funktioniert das ganze genau?


    Das berechnet , wie Akmet geschrieben hat, den kürzesten Weg zwischen 2-Punkten in San Andreas. Plugin wäre aber besser als ein PAWN Version.


    Ich denke, er hat einfach die decompiled, entpackten nodes(x).dat in den "scriptfiles" Ordner kopiert und liest diese im Script aus.


    Dekompilieren alleine bringt nichts, weil man die Beziehung der Knoten noch herrausfinden muss.Knoten aus Area5 können mit Knoten aus Area21 verbunden sein.Da muss man erstmal alle Knoten richtig verbinden.
    Ich hab die Informationen ausgelesen und daraus die Knoten gebastelt und verbunden. Als Ich die dann als Knoten in meinem Graphen hatte, hab ich die in meinem Format gespeichert und lass die jetzt so auslesen. Denn wozu sollte Ich die aus den Nodes immer neu auslesen, wenn Ich die auch direkt in meinem Format habe.
    Nur als Beweis,dass Ich die auslesen kann, hier ein kleiner Auszug :p
    http://pastebin.com/qNEMfhdj
    Will den Quatsch ja noch releasen, daher behalt Ich den Rest erstmal für mich :whistling:

    Top :)


    Und noch ein Nachtrag :



    Das sind jetzt die Knotenpunkte aus gta-sa . Kann die nun auslesen und daraus einen Graph für Dijkstra basteln. Ist aber zur Zeit noch langsam ... , hab direkt das Video ausgenommen, nachdem das berechnen der Route funktionierte.

    >>


    Kann jetzt auch die Paths von GTA-SA auslesen und daraus die Knotenpunkte erstellen. Sind aber viel zu genau, rund 67000 Knotenpunkte sind es für Fahrzeuge + Fußgänger. Mal eine kleine Übersich ( Fußgänger Knotenpunkte werden nicht angezeigt ).


    Das verbinden der Knoten funktioniert teilweise, wie man in den Bilder eventuell sieht. Lila / Blau bedeutet,dass es eine dopplete Verbindung gibt zwischen den Knoten. Heisst,

    Zitat

    Knoten(AB) <-- > Knoten(XY)


    Problem ist das Laden und aufsetzen des Graphens,denn das dauert fast 5-Minuten.


    Hier mal eine Log beim lesen / erstellen, falls es wen interessiert :)
    http://goldkiller.kilu.de/SAMP/gdijkstra_log.pwn ( 12MB )

    Hammer, kann man nicht anders beschreiben.


    Hast du an jeder Kreuzung eine Koordinate erstellt? Dann möchte ich nicht wissen, wieviel Zeit allein das in Anspruch genommen hat...


    Ist ja nur ein kleiner Teil von San Fierro gewesen. Soll ja nur ein Test sein. Aber selbst bei dem bischen hat es schon zu lange gedauert.Hab das
    verbinden der Knoten jetzt vereinfach, geht jetzt um einiges schneller.Bisher sind es aber nur knapp 125 Knoten über die Innenstadt von San Fierro verteilt.



    Mehrere derartigen Systeme wurden aber schon gemacht, demonstriert und laufen auf diversen Servern.
    Neu ist das nicht ;)


    Ja, ich bin n Spielverderber, ich weiß :D


    Das es neu ist,hab ich aber nie gesagt.Ich weiss,dass es das schon gibt. Gibt dazu auch einen Thread im offiziellen sa-mp forum, nur gibt es dazu keinen Code.
    Natürlich versteh ich, wieso keiner den Code dazu releasen möchte.Wahrscheinlich entweder zu hardcoded oder dann ein doch zu gutes Feature , dass man es lieber für sich behält. Wie auch immer, auf dem NoV Server müsste es das geben. Dort hab ich es jedenfalls mal ausprobiert :-0.

    Ich poste dann auch mal etwas.
    Habe mal ein echtes GPS System angefangen, dass auf den Dijkstra Algorithmus basiert.
    Alle bisher releasten Navigations-Scripte funktionieren nicht so, wie echtes Navi funktionieren würde.
    Man hat einen Zielort und muss selber den Weg dort hin finden. Bei mir wirdaber eine
    Route aufgebaut, die den kürzesten Weg von Start zum Ziel berechnet.


    Ein Video dürfte es am besten beschreiben.

    Weil du nicht gemacht hast, was Ich geschrieben habe.
    Du hast gPlayerCheckpointStatus immernoch nicht als Globale Variable erstellt.


    Entfern

    Zitat

    new gPlayerCheckpointStatus[MAX_PLAYERS];

    bei

    Zitat

    public OnPlayerEnterCheckpoint(playerid)

    und füge es über

    Zitat

    main()

    bzw über

    Zitat

    OnFilterScriptInit()

    falls es ein Filterscript ist.


    Dir fehlen wohl einige Grundlagen.
    http://wiki.sa-mp.com/wiki/Scripting_Basics#Variables