Beiträge von FACE

    Mal zum Grundsinn dieser Funktion..
    Ich verstehe nicht, warum du zweimal direkt hintereinander dasselbe abfragst..
    if(SpielerInfo[i][Fraktion] == 4)//Zeile 7
    und
    if(SpielerInfo[i][Fraktion] == 4)//Zeile 13


    Auch der tiefere Sinn dieser Formattierungs-Zeile entzieht sich meines Verständnisses:
    format(string,sizeof(string),"%s %i$\n%s %i$\n%s %i$\n%s %i$\n%s %i$\n%s %i$\n%s %i$\n%s %i$\n%s %i$\n",SpielerName(i),SpielerInfo[i][Kopfgeld]);
    Womit sollen denn diese ganzen Parameter befüllt werden, wenn du nur den Spielernamen und sein Kopfgeld einsetzt ?


    Ich hätte mir jetzt aus meiner gezaubert, dass du eine Liste mit allen Spielern haben möchtest, die ein Kopfgeld haben, oder ?
    Dann machen wir das wie folgt:

    ocmd:contractlist(playerid,params[])
    {
    if(SpielerInfo[playerid][Fraktion] == 4)
    {
    new string[600];
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(SpielerInfo[i][Kopfgeld]>0){format(string,sizeof(string),"%s\n%s %i$",string,SpielerName(i),SpielerInfo[i][Kopfgeld]);}//Wir nehmen den bisherigen String und fügen die nächste Zeile an..
    }
    ShowPlayerDialog(playerid,DIALOG_Contract,DIALOG_STYLE_MSGBOX,"Contractliste",string,"0K","");//Wir senden den Dialog EINMAL!!!!
    //Vielleicht ist es als Liste übersichtlicher =)
    }
    return 1;
    }

    Das ist ja auch relativ logisch, dass sein Fahrzeug trotzdem respawnt wird. Geht aus dem Code hervor.
    Du musst also die Fahrzeug ID in der sich ein Spieler befindet überspringen..


    Dafür gibt es "continue"...

    ocmd:fahrzeugerespawnen(playerid,params[])
    {
    new bool:benutzt[MAX_VEHICLES];//Variable für alle Vehicle. Standartmäßig auf "false"
    for(new p=0;p<GetMaxPlayers();p++)
    {
    if(GetPlayerState(p)==PLAYER_STATE_DRIVER){benutzt[GetPlayerVehicleID]=true;}/*Es kann immer nur einen Fahrer eines Vehicles geben, wenn Fahrer, dann für Vehicle ID die Variable auf "true" setzen.*/
    }


    //Jetzt der VehicleLoop
    for(new v=0;v<MAX_VEHICLES;v++)
    {
    if(benutzt[v]==true){continue;}//Ausnahme-schleife (überspringt schleifenaktionen für wert von v und geht zum nächsten)
    SetVehicleToRespawn(v);


    }
    return 1;
    }



    Wie immer voll aus dem Kopf geschrieben. Garantiere für nix um die Zeit ;)


    (Anbei war deine Herangehensweise nicht gerade Vorteilhaft.
    Du loopst einmal durch alle Spieler und während jedes Durchganges noch durch alle Fahrzeuge ^^ )

    Du liest einen Namen aus, keine ID.
    if(sscanf(params,"uds",pID,wanteds,grund)) return SendClientMessage(playerid,weiß,"Verwendung: /su [playerid] [Wanteds] [Grund]");


    Siehe den Part mit "uds"
    pID ist aber ein Integer, also --> "dds"

    @ Saboh: Koordinaten werden in Dezimalzahlen angegeben --> Float
    Definiere also bitte die Werte für Totx, Toty und Totz als Floats in deinem enum.


    @ apoolecu: letzteres ;)
    Als kleines Beispiel dazu können wir ja mal einen Blick ins Sa-mp Wiki werfen:
    Nehmen wir einfach mal die Funktion String-Insert ..

    strins(string[],const substr[],pos,maxlength=sizeof string)


    string[] The string you want to insert substr in.
    const substr[] The string you want to insert into string.
    pos The position to start inserting.
    maxlength=sizeof string


    Gedankenexperiment:
    -Wir haben einen String der Länge x (lässt sich übrigens ermitteln mit der funktion "strlen").
    -Wir setzen einen String der Länge 0 in unseren ersten String ein.
    Also starten wir an der Position 0 und hören an der Position 0 wieder auf.
    Tjojo, so einfach sit das :D

    Wenn man noch ein lieber Mensch ist, dann rundet man immer schön auf.
    Also..

    public PayDay(playerid)
    {
    ..
    new zinsen = floatround(SpielerInfo[playerid][Bank] * 0.001, floatround_ceil);
    ..
    }


    MFG FACE ;)

    Frage wäre nur, ob es überhaupt sinnvoll ist, die Ampeln zu steuern.
    Mit dem Hintergedanken: " Bei Überfahren einer roten Ampel gibt es einen Wanted dazu."


    Das impliziert auch noch eine Abfrage, ob der Spieler an der Position ist, die Ampel auf rot steht, er Fahrer eines Fahrzeuges ist, etc..


    Das wird serverseitig völliger Mist. Sorry, aber das würde mir persönlich viel zu viel ziehen.
    Ich hätte das lieber von der Userseite aus geregelt gelassen und fertig.


    Und wie BlackAce bereits angesprochen hat, sind maximal 1000 Objekte zu entfernen. Das mag vielleicht für alle Ampeln gerade so hinkommen, aber dann kannst du
    auch nichts anderes mehr entfernen.
    Abgesehen davon müsste man ja alle Ampeln neu setzen, diese dann mit Texturen belegen und "dann" (jaja es geht noch weiter ;) ) Timer starten und die Ampelphasen bestimmen.
    Folglich bedeutet das auch eine Menge an neuen Objekten. Da das Objekt-Limit auch bei 1000 liegt, wären dann auch alle anderen Mapping-Geschichten dahin.
    Es würde sich also imho nicht rentieren..

    Zum Thema Ampeln vom Script aus kontrollieren:
    Nein, das ist leider nicht möglich....
    Im englischen Sa-mp Forum gibts auch einen Thread dazu. ( http://forum.sa-mp.com/showthread.php?t=301328 )
    Es wurde vorgeschlagen, aber bisher imho nie umgesetzt.


    Zur Alternativlösung:
    -Textdraws wurden ja bereits genannt. Aber für jede Ampel ein Textdraw + evtl. Timer (man kann ja mehrere zusammenpacken)?! (Da stellt sich der Server aber quer Freunde)
    -Die Ampeln sind doch bereits synchronisiert. Eine Kontrolle von der Spielerseite aus sollte somit kein Problem darstellen. (zb. Police)
    -Eine letzte Lösung wäre: Alle Ampeln entfernen (RemoveBuildingForPlayer) und auf Rechts-Vor-Links (Straßen-Verkehrs-Ordnung) setzen.
    :thumbup:

    Füge einfach im Script unter dem Callback "OnGameModeInit()" , sprich wenn der GameMode geladen wird, ein,
    dass das Wetter auf 10 gesetzt wird.
    Dasselbe kannst du auch für die Tageszeit machen (sofern du diese nicht in irgendeiner Weise später ändern möchtest).


    Wetter geht zu ändern mit : SetWeather(10);


    Die Zeit mit : SetWorldTime(3);//Beispiesweise 3


    Kleine Anmerkung an die anderen Poster,
    Ihr solltet etwas mehr Erklären statt nur mal eben eine Zeile reinzuhauen oder als nur auf einen Command zu verweisen.


    Zitat

    OnGameModeInit => SetWeather() ?


    Nicht böse gemeint, aber dadurch lernt der "Unwissende" nicht, warum er dort etwas einfügen soll...
    (Die nächsten Fragen sind damit vorprogammiert ^^ )


    MFG FACE

    Definiere mal "besser".
    Letzten Endes schließt man dadurch mögliche Fehlerquellen aus.. (connection zum datenbankserver; der sql-server selbst, etc..)


    Aber ich merk schon anhand deines Ausdrucks, dass du nicht gerade ein Freund des, von sa-mp mitgebrachten, lokalen speichersystems bist.

    Im Grundgedanken sind Datenbanken nichts weiter als Tabellen die verschiedene Werte miteinander Verknüpfen.
    Ich kann den mySQL - Hype nicht ganz nachvollziehen. Eine lokale Datenbank, welche man selbst "bauen" kann, finde ich im Zweifelsfall immernoch
    besser, aber das soll jedem selbst überlassen bleiben.

    sorry, aber nichtmehr um die zeit ^^


    aber ich geb dir nen kleinen hint:

    do
    {
    ..
    }
    while(...)//Fußgesteuerte While-schleife bietet sich an.


    Array erstellen und auslesen im Script solltest du ja noch hinkriegen ;)

    setz doch einfach eine globale Variable.
    Wenn ein Spieler in den interior geht, kommt er in die 1, der zweite in die 2 ..... etc ;)
    Auf die Gefahr hin, dass die Zahlen allzugroß werden, kann ich dich beruhigen.
    Wir bauen einfach eine kleine for-schleife, diese wird unterbrochen, sobald die erste
    freie VirtualWorld gefunden wurde.


    Schreibe also einfach die VirtualWorld IDs in ein Array, welches du dann ausläst und
    immer neu beschreibst beim eintreten und beim austreten den eintrag wieder löschst.


    Beispiel zum Aufbau:

    Code
    1
    2
    3
    4
    5
    7
    8


    Die erste freie wird die 6 sein, die nächste die 9.
    (Wir zählen von 1 hoch und schauen, welche Welt halt noch nicht "bewohnt" ist)

    Mal abgesehen davon ist immer gut Party auf der Gamescom ;)
    (Leider kann ich dieses Jahr nicht dabei sein, da eine gute Freundin Geburtstag feiert -.- )