Beiträge von Goldkiller

    Wenn man auf etwas drauf klickt ?
    Wenn man etwas in einer Liste ( Dialog ) anklickt,ist es folgendes Callback:
    OnDialogResponse


    new Standart;
    // pickupid ???
    if(pickupid == Standart)
    {
    GivePlayerWeapon(playerid, 24, 500);
    GivePlayerWeapon(playerid, 29, 500);
    GivePlayerWeapon(playerid, 31, 500);
    SetPlayerArmour(playerid, 100);
    }

    Was das bringen sollen würde ich aber auch gernen wissen :-0. Sieht aber so aus, als möchte er immer 3. Namen in einen String und dann abschicken.


    public WantedTimer(){
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConencted(i) && WantedLevel[i] > 0) // i , nicht playerid
    {
    WantedLevel[i] -= 1; // Nicht playerid sondern i. Sollte eigentlich Fehler beim kompilieren geben.
    new wstring[128];
    format(wstring,sizeof(wstring),"Dein Wantedlevel ist gesunken! Momentanes Wantedlevel: %d",WantedLevel[i]); // Ebenfalls i statt playerid
    SendClientMessage(i,0xFFCC00FF,wstring); // Und hier auch i.
    }
    }
    }

    #define zielip


    Auch wenn die Fehlermeldung sagt undefined symbol "zielip" , heisst es nicht, das man zielip über #define definiert.


    new name[MAX_PLAYERS],string[80],zielip[16]; // Eigentlich macht man 16 anstatt MAX_PLAYERS ;)
    GetPlayerName(playerid,name,sizeof(name));
    GetPlayerIp(pID,zielip,sizeof(zielip));
    format(string,sizeof(string),"**%s hat den Server mit der IP %i betretten**",name,zielip);
    SendAdminMessage(0xFF6E00FF,string);
    So war das schon richtig bei [GeT]mIka96. zielip muss in diesem Falle ein Array sein / String.

    CallRemoteFunction("SetzeGeld","id",playerid,(CallRemoteFunction("BekommeGeld","i",playerid)-FactionBuylist[fbl][fbPrice]));
    Würde ich mal aufteilen. Kann mir gut vorstellen, dass es an dem 2. CallRemoteFunction liegt.
    new bekommegeld = CallRemoteFunction("BekommeGeld",...);
    bekommegeld -= FactionBuylist[..];
    CallRemoteFunction("SetzeGeld",..);

    Ließ was Ich in den Code geschrieben habe.
    Sollte es noch crashen, kannst du uns ja an Hand der print's zeigen bis wo der Code lief.
    forward countdown5();
    public countdown5()
    {
    print("countdown5");
    // Die Timer gehören nicht in den Loop!
    // Du erstellst nämlich #MAX_PLAYERS
    // Also 500 Timer. Heisst 500x wäre countdown4 aufgerufen werden.
    SetTimer("countdown4",1000,0);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    GameTextForPlayer(i,"4",1000,3);


    }
    }


    forward countdown4();
    public countdown4()
    {
    print("countdown4");
    // Wieder das Gleiche!
    // Du würdest jetzt 500 * 500 Timer erstellen!
    SetTimer("countdown3",1000,0);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    GameTextForPlayer(i,"3",1000,3);


    }
    }


    forward countdown3();
    public countdown3()
    {
    print("countdown3");
    // Wieder das Gleiche!
    // Du würdest jetzt 500 * 500 * 500 Timer erstellen!
    SetTimer("countdown2",1000,0);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    GameTextForPlayer(i,"2",1000,3);


    }
    }


    forward countdown2();
    public countdown2()
    {
    print("countdown2");
    // Wieder das Gleiche!
    // Du würdest jetzt 500 * 500 * 500 Timer erstellen!
    SetTimer("countdown1",1000,0);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    GameTextForPlayer(i,"1",1000,3);
    }
    }


    forward countdown1();
    public countdown1()
    {
    print("countdown1");
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    GameTextForPlayer(i,"GO !",1000,3);
    }
    // Das gehört nicht in den loop
    MoveObject(chilliardeventtor[0],-2309.60009766,-1652.34997559,485.00000000-10,2);
    MoveObject(chilliardeventtor[1],-2311.19921875,-1653.09960938,485.00000000-10,2);
    }

    Bei OnGameModeInit das zu machen ist bescheuert. Haust dir direkt den Speicher voll ohne das es eventuell je genutzt wird.
    Erstell die Textdraws bei OnPlayerConnect für den Spieler und zerstöre die Textdraws bei OnPlayerDisconnect wieder.


    public OnPlayerConnect(playerid)
    {
    Stats1[playerid] = TextDrawCreate(...);
    Stats2[playerid] = TextDrawCreate(...);
    usw.
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    TextDrawDestroy(Stats1[playerid]);
    TextDrawDestroy(Stats2[playerid]);
    usw
    return 1;
    }

    Du musst auch für jeden Spieler eigenen Textdraws erstellen,wenn jeder dort einen Anderen Text lesen soll.


    new Text:Stats0;
    new Text:Stats1;
    new Text:Stats2;
    new Text:Stats3;
    new Text:Stats4;
    new Text:Stats5;
    new Text:Stats6;
    new Text:Stats7;
    new Text:Stats8;
    new Text:Stats9;
    new Text:Stats10;
    new Text:Stats11;
    new Text:Stats12;
    new Text:Stats13;
    new Text:Stats14;
    new Text:Stats15;
    new Text:Stats16;
    new Text:Stats17;
    new Text:Stats18;
    new Text:Stats19;
    new Text:Stats20;
    new Text:Stats21;
    new Text:Stats22;
    Müssten alle für MAX_PLAYER sein. Jedenfalls der / die Textdraws, die einen individuellen Text anzeigen sollen.

    So auch nicht,Bubelbub. ( Denke hast vergessen die Zeile zu entfernen )
    Sendet immernoch eine PlayerMessage, deswegen wird auch wieder folgendes ausgegeben:

    Zitat

    blood: [0] blood: das was ich geschrieben habne


    Also so:
    public OnPlayerText(playerid, text[]) {
    new
    textv2[128],
    name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof (name));
    format(textv2, sizeof (textv2), "[%d] %s: {00FFFF}%s", playerid, name, text);
    SendClientMessageToAll( 0xFF0000FF /* ROT */ , textv2);
    return 0;
    }
    return 0 nicht vergessen.Ist wichtig damit die Ausgangsnachricht nicht gesendet wird.
    Eigentlich muss der String jetzt auch größer sein als 128 , denn der reine Ausgangstext kann ja schon 128 Zeichen sein.Dazu kommt noch "[%d] %s: {00FFFF}.
    Also 1 + 3 + 1 + 1 + MAX_PLAYER_NAME + 2 +8 + 128 .

    enum fBuylist{
    fbVehid,
    Float:fbX,
    Float:fbY,
    Float:fbZ,
    Float:fbA,
    fbPrice,
    fbCarid,
    Text3D:fbLabel
    };


    {560,870.9376,-1101.8865,24.0017,269.6273,933},
    {580,860.370361,-1102.119384,24.296875,1005},
    {550,850.421386,-1101.962402,24.296875,2000}


    Du hast also keine Werte für fbCarid,fbA ( 2x ) und fbLabel eingetragen. Wenn den Variablen erst später Werte zugewiesen werden, kannst du sie einfach auf INVALID setzen.
    Im falle von fbCarid ( Falls später dort CreateVehicle o.Ä benutzt ) INVALID_VEHICLE_ID und für fbLabel ( Falls CreateText3DLabel ) Text3D:INVALID_3DTEXT_ID. Das Tag ( Text3D ) muss angegeben werden,sonst gibt es wieder Tag Mismatch Warnung.
    Könntest auch einfach 0 eintragen.Es muss jedenfalls ein Wert angegeben werden.

    if(sccanf(params, "uus", pID, license, string)) // Der String ist der Grund


    Wieso denn uus :|





    Zitat

    [playerid] [licenses] [Grund]


    Kommt darauf an,wass du mit licenses meinst. Könnte man sowohl mit einer Zahl als auch einem Text realisieren.
    Beispiel für Zahl wäre z.B.


    1 = Führerschein-Klasse B // PKW
    2 = Führerschein-Klasse A // Motorrad
    3 = Führerschein-Klasse C // LKW
    ...


    new
    pID,
    iLicence,
    sGrund[32];
    if(sccanf(params, "uis", pID, iLicence, sGrund))



    Mit einem String ist das ähnlich.
    new
    pID,
    sLicence[32],
    sGrund[32];
    if(sccanf(params, "uss", pID, sLicence, sGrund))
    An dieser Stelle müsstest du aber wohl mit strcmp arbeiten. Denn du willst bestimmt aus dem String eine Variable ableiten bzw am String erkennen, mit welcher Variable du arbeiten sollst.