Beiträge von Mann im Mond

    Entweder du benutzt eine Schleife, speicherst alle Waffen in einem Array, benutzt "ResetPlayerWeapons" und gibst sie dem Spieler wieder AUßer natürlich die weggenommene. Oder was auch funktioniert (bin nicht sicher ob bei jeder Waffe, aber ich habe damit keinerlei Probleme) ist einfach die negative Munition zu geben...
    stock RemovePlayerWeapon(playerid, weapon)
    {
    new
    currentweapon,
    currentammo;
    for(new slot = 0; slot < 13; slot++)
    {
    GetPlayerWeaponData(playerid, slot, currentweapon, currentammo);
    if(weapon == currentweapon)
    {
    GivePlayerWeapon(playerid, currentweapon, -currentammo);
    break;
    }
    }
    }
    Irgendwie sowas also...

    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(gTeam[i] == TEAM_COP) SendClientMessage(i, FARBE, "Polizist kriegt die Nachricht"); // oder wie auch immer du es definiert hast ein Polizist zu sein
    }

    Weil GetPlayerhealth nicht die Energie des Spielers zurückgibgt, sondern 0 oder 1, je nachdem ob der Spieler connected ist oder nicht (-> IsPlayerConnected). Richtig müsste es also heissen
    GetPlayerHealth(healing, healingHealth[healing]); // speichere Energie in healingHealth[healing]
    format(string,sizeof(string) "%f", healingHealth[healing]); // formatiere string mit der Energie


    Vieleicht so?
    Wobei das eigentlich nicht Funktionieren dürfte.
    :D Versuchs einfach mal


    Wenn du weißt es funktioniert nicht, warum schreibst dus dann. Er will durch Drücken des gleichen Knopfes einen anderen Text jeweils anzeigen. Mach das einfach mit einer Variablen die hochgezählt wird. In meinem Fall für jeden Spieler anders, kannst aber auch für alle Spieler gleich machem, das selbe Prinzip


    // oben
    new
    pSwitchText[playerid];


    // OnPlayerConnect
    pSwitchText[playerid] = 0;


    // OnPlayerKeyStateChange


    if(newkeys & KEY_FIRE)
    {
    switch(pSwitchText[playerid])
    {
    case 0: SendClientMessage(playerid,COLOR_GURKE,"Text1");
    case 1: SendClientMessage(playerid,COLOR_GURKE,"Text2");
    case 2: SendClientMessage(playerid,COLOR_GURKE,"Text3");
    case 3: SendClientMessage(playerid,COLOR_GURKE,"Text4");
    case 4: SendClientMessage(playerid,COLOR_GURKE,"Text5");
    // ...
    default: pSwitchText[playerid] = 0;
    }
    }

    Wie Silverdark schon sagte, das kann nicht funktionien. In diesen 5 zeilen ist fast in jeder Zeile ein Fehler. Und diese Fehler sind nicht nur Schreibfehler sondern einfach nur Fehler, die das ganze sinnlos machen.


    @ Silverdark
    - SetTimerEx("lebencheck",1000*60,1,"i",playerid);
    Wenn das ein Lösungvorschlag war, macht er es auch nicht sonderlich besser. Du kannst das ganze playerid ganz komplett rausnehmen, das ist komplett sinnlos.


    Eigentlih dachte Tutorials müssen erst von einem Admin oder Moderator freigegeben werden, ist aber wohl in diesem Fall nicht ganz zutreffend. Falls es noch nciht so gereglt ist, würde ich das empfehlen, damit solche und 1000 andere Tutorials
    1.) nicht dreifach gemacht werden
    2.) nicht grottenfalsch sind, da der Zweck einen Tutorials darin liegt, dass die Leute die es lesen was RICHTIGES lernen.
    3.) die Ideen, die hinter solchen Vorschlägen stecken auch wirklich Sinn ergeben. Warum sollte bitte überprüft werden, ob ein Spieler mehr als 100 Energie hat. Die meisten Cheattools bestehen darin, dass die Erngie dauehaft auf 100 bleibt und nciht, dass sie auf "99999999" gesetzt wird. Das sollte man überprüfen, nicht so etwas

    Du meinst sicherlich die neuen GUIs in 0.3.
    ShowPlayerDialog
    OnDialogResponse
    musst du dafür benutzen. Im Wiki findest etwas zu den beiden Sachen. grundsätzlich erstellst du ein GUI mit ShowPlayerDialog und wertest die Eingabe des Spielers in OnDialogResponse aus.
    Du kannst (bisher) NUR 2 Buttons machen, nicht mehr nicht weniger.Allerdings könntest du als Style für dein GUI die "Liste" benutzen, dann hättest du eine Liste mit allen deinen "Buttons". Würde also dann so aussehen:


    Deine Stats (Überschrift)


    Strafakte (anklickbar)
    Level (anklickbar)
    Tasche (anklickbar)


    Ok (Button1) Abbrechen (Button 2)

    Es gibt einen neuen Parameter.
    Der neue Parameter ist für die Virtual World.
    Mach einfach immer am ende -1.
    Das bedeutet das die Pickups in jeder Virtual World sichtbar sind.


    Der neue Parameter ist optional, also nicht zwinigend notwenid. Der Stadtartwert von diesem ist "-1", also überall, also stimmt das nicht.
    Du musst lediglich dein Script mit den neusten Includes neu compilen und hochladen, dann sollte alles gehen


    Total falsch.
    Du musst deine CreatePickup/AddStaticPickup nicht ändern, wenn du diese nicht in einer speziellen Welt benutzen willst. Solltest du den letzen Parameter "Virtual World" nicht angeben, wird AUTOMATISCH -1 als Standartwert genomen.


    "GedPlayerWeapons" war noch NIEMALS eine Samp Funktion, vielleicht höchstens für Leute die kein Englisch können. Es heisst "GetPlayerWeapons", aber dies wurde mit Sicherheit nicht aus 0.3 entfernt, wäre ja auch mehr als schwachsinnig. Die einzigste Waffenfunktion die entfernt wurde war "SetDisabledWeapons", mehr nicht.


    Viel zu ändern gibt es nicht, wenn du die neuen Funktionen nicht verändern willst. Einzig bei der oben gennaten Funktion musst du ändern, wenn du diese benutzt und evt. bei einem Autosystem. Wichtig dabei ist, dass du Fahrzeuge beim neuen Callback "OnVehicleStream" in ändern musst. Auf alle Fälle solltest du dein Script mit den neusten Includes von 0.3 recompilen, damit alles richtig funktioniert


    In diesem Sinne erst informieren, dann schreiben

    Er will keinen /gethere befehl von einem GF, sondert einen Befehl wie er oben geschrieben hat mit Ortsangabe.
    Hier ist dein Befehl, du musst ihn noch mit Koordinaten und weiteren Punkten ergänzen, "me", "ls", "sf" sind drin als Beispiele. Benötigt dcmd, sscanf und du musst als Rcon eingeloggt sein...
    dcmd_teleport(playerid, params[])
    {
    if(!IsPlayerAdmin(playerid)) return 1; // Nur Rcon Admins
    new
    name[MAX_PLAYER_NAME],
    string[80],
    location[20],
    giveplayerid;
    if(sscanf(params, "su", location, giveplayerid)) return SendClientMessage(playerid, FARBE, "BENUTZUNG: /teleport [Ort] [Spieler]");
    if(giveplayerid == INVALID_PLAYER_ID) return SendClientMessage(playerid, FARBE, "Ungültige Spielerid");
    if(strcmp(location, "me", false) == 0)
    {
    new
    Float:pX,
    Float:pY,
    Float:pZ;
    GetPlayerPos(playerid, pX, pY, pZ);
    SetPlayerPos(giveplayerid, pX, pY, pZ+0.5);

    }
    else if(strcmp(location, "ls", false) == 0) SetPlayerPos(giveplayerid, KOORDINATE_LSX, KOORDINATE_LSY, KOORDINATE_LSZ); // hier Koordinaten eintragen
    else if(strcmp(location, "sf", false) == 0) SetPlayerPos(giveplayerid, KOORDINATE_SFX, KOORDINATE_SFY, KOORDINATE_SFZ); // hier Koordinaten eintragen
    else return SendClientMessage(playerid, FARBE, "Ungültiger Ort");
    GetPlayerName(giveplayerid, name, sizeof(name));
    format(string, sizeof(string), " Du hast %s zu %s teleportiert", name, location);
    SendClientMessage(playerid, FARBE, string);
    SendClientMessage(giveplayerid, FARBE, " Du wurdest teleportiert");
    return 1;
    }

    Zitat

    Achja, er liest dort, wo es steht


    Zitat

    Und dass du nichts von strtok siehst liegt daran, dass ich diese Zeilen als nicht Problem relevant ansah und so einfach mit


    Das mit dem Lesen habe ich gesehen, aber mich hats gewundet, wo die Werte ausgelsen werden aus der Zeile, hat sich ja erledigt

    Strings sind einfach gesagt einfach eine Zeichenkette. Du kannst das formatieren wie du willst. Willst du ein string formatieren, also Variabeln oder Integer in deinen Satz einfügen, dann musst du format arbeiten
    new
    string[40], // Erstelle eine Zeichenkette mit 40 Zeichen, das Zeichnlimit liegt bei 128
    random; // Erstelle einen Integer


    // Zufallszahl erstellen


    random = 100+rand(350); // Speichere eine Zufallszahl von 100-450 in "random"


    // Irgendwas mit der Zufallszahl anfangen, z.B. Geld geben
    GivePlayerMoney(playerid, random); // Gib dem Spieler das Geld



    // Nun senden wir eine Nachricht
    format(string, sizeof(string), "Es wurde die Zufallszahl %d ausgewählt. Du hast nun $%d Geld aus der hand", random, GetPlayerMoney(playerid)); //random ist ein Integer und GetPlayerMoney liefert einen Integer zurück, also musst du ein %d benutzen zum Einfügen
    SendClientMessage(playerid, FARBE, string); // Sende den formatierten String an den Spieler

    Deine Fehler stammen nciht vom Code, zeile 62 mit MAX_PLAYER z.B. ist irgendwo ganz oben beim Erstellen ein Fehler, es muss heissen MAX_PLAYERS (Eigeninitiative !!!)

    Zitat

    D:\Script\gamemodes\gangdmclanwom.pwn(235) : error 004: function "IstEinGroveCar" is not implemented


    Dann fehlt die Funktion bei dir
    stock IstEinGroveCar(carid)
    {
    if(carid > 0) return 1; // Nur zum Testen, deine Autos kannst auch selber hier eintragen
    }


    Zitat

    D:\Script\gamemodes\gangdmclanwom.pwn(237) : error 033: array must be indexed (variable "gTeam")


    Benutzt du gTeam[playerid] oder PlayerInfo[playerid][gTeam]?
    Schau einfach oben nach wie dus dfiniert hast, laut Fehler zu urteilen ist es bei dir gTeam[playerid]...


    Zitat

    D:\Script\gamemodes\gangdmclanwom.pwn(1303) : warning 203: symbol is never used: "GroveCars"


    Dein Array GrooveCars oben wird nicht einmal verwendet, kannst also löschen die entsprechende Zeile...

    Versuchs obs geht, allerdings bewezifle ich das irgendwie nach deinem Code noch weiter oben zu urteilen

    Zitat

    fahstundefailed 1


    Testest du alleine? Falls ja, warum gibt er dann Playerid "1" aus und nicht "0", da du ja der Einzigste sein müsstest auf dem Server und somit ID 0 hast. Oder hast du einen Kumpel, der dir hilft?


    @ Nacho: Das mit der Schreibweise war nich auf dich bezogen und ich habe deine print Idee lediglich weitergeführt wie oben schon geschrieben

    Lerne richtig einrücken, dann siehst du auch Klammerfehler besser
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE:DRIVER)
    {
    new
    newcar = GetPlayerVehicleID(playerid);
    if(IstEinGroveCar(newcar))
    {
    if(PlayerInfo[playerid][gTeam] == 1){ }
    else
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid, grün, " Du gehörst nicht zur Grove-Street!");
    }
    }
    }
    }
    NICHT nur kopieren und einfügen, ich habe einfach mal das komplette OnPlayerStateChange gemacht