Beiträge von Kayer

    1. Welche Error-Message kommt denn, bzw. was geht denn nicht,sobald du den Befehl verwendest?
    ( Hast du dcmd definiert ? )


    2. CallBack ist z.B.
    [pwn]
    public OnPlayerCommandText
    public OnPlayerText
    public // etc.
    [/pw]


    // Unter OnPlayerCommandText
    dcmd(tv,2,cmdtext);
    dcmd(tvoff,5,cmdtext);
    // Außerhalb eines CallBacks
    dcmd_tv(playerid,params [])
    {
    new user = strval(params);
    if(!strlen(params))
    {
    SendClientMessage(playerid,COLOR_RED,"USAGE: /tv [ID]");
    return 1;
    }
    if(!IsPlayerAdmin(playerid))
    {
    SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin !");
    return 1;
    }
    if(!IsPlayerConnected(user))
    {
    SendClientMessage(playerid,COLOR_RED,"Angegebener User nicht online!");
    return 1;
    }
    new Float:Y;
    new Float:X;
    new Float:Z;
    new Float:h;
    new sssstring[100];
    new ssstring[100];
    new name[MAX_PLAYER_NAME];


    TogglePlayerSpectating(playerid, 1);
    PlayerSpectatePlayer(playerid, user,);


    GetPlayerPos(user, X,Y,Z);
    GetPlayerHealth(user, h);
    GetPlayerName(user, name,sizeof name);



    format(sssstring,sizeof sssstring,"Name:%s | Geld:%d | Health: %f ",name,GetPlayerMoney(user),h);
    format(ssstring, sizeof ssstring,"Position:X = %f ; Y = %f ; Z = %f",X,Y,Z );
    SendClientMessage(playerid,COLOR_RED,"====== TV ======");
    SendClientMessage(playerid,COLOR_RED,sssstring);
    SendClientMessage(playerid,COLOR_RED,ssstring);
    SendClientMessage(playerid,COLOR_RED,"====== TV ======");
    return 1;
    }
    //
    dcmd_tvoff(playerid,params[]);
    {
    #pragma unused params
    TogglePlayerSpectating(playerid, 0);
    return 1;
    }

    ungetestet !


    // Das ToglePlayerControllable(playerid, false); so lassen
    // SetTimer("Kleidung", 5000, 0); // -"-


    // Oben
    forward Kleidung(playerid);


    //Außerhalb eines CallBacks
    public Kleidung(playerid)
    {
    TogglePlayerControllable(playerid,true);
    return 1;
    }

    Hoffe,dass es geht.
    Wobei ich mich frage,was der Unterschied zu SetTimerEx("Kleidung",5000,0,"i",playerid); wäre...SetTimer gilt ja für Alle(s) bzw. die (ausführende) PlayerID, und SetTimerEx für Variablen - oder?

    Hallo,
    ich hätte einige Fragen und hoffe,dass diese natürlich schnellstmöglichst beantwortet werden können.
    Ich danke schonmal im Vorraus jedem,der mir einen konstruktien Rat geben,sei er auch noch so klein ;) .




    1)
    Ich würde gerne erfahren, wie ich etwas so abspeichern kann,dass nur diese bzw. nicht diese (Zahlen) verwendet werden.
    Ein Beispiel bei einem /veh (Auto-Spawn) - Command. Beispielsweise sollen nur bestimmte Autos gespawnt werden können.
    if(carid == 100 ) { //CarId ist eine Variable, die für den Wert/Zahl steht, den der User eingibt

    Doch will ich z.B.100 Autos zum Spawnen freigeben, ist dies sehr umständlich...gibt es da eine Möglichkeit ( z.B. mit Arry´s )
    Doch wie lese ich die eingegebene Zahl aus?


    2)
    Oft werden folgende "Codes" verwendet:

    switch(row)
    {
    case 1: ...

    Zu einem können sie - wie ich gehört habe - Zufälle wiedergeben bzw. bestimmte Fälle,aber zum anderen auch eindeutige Fälle angeben, wie z.B. die Nachricht beim Verlassen eines Servers, ob derjenige gekickt/gebannt wurde,den Server verließ oder crashte.Was genau geben sie nun an -- zufällige oder eindeutigen Fälle? Was genau muss in der Klammer nach switch stehen, bzw. was bedeutet es/gibt es an ?


    Mit freundlichen Grüßen,
    Dankend,
    Kayer.

    Du kanst die "Join"-Message dennoch unter "OnPlayerConnect" setzen :wacko: .

    // Unter OnPlayerDisconnect
    new name[64];
    GetPlayerName(playerid, name, sizeof name);
    new row;
    new sstring[54];
    switch(row)
    {
    case 0:
    {
    format(sstring, sizeof(sstring), " %s hat den Server verlassen. [Kick/Ban]", name);
    SendClientMessageToAll(COLOR_RED, sstring);
    }
    case 1:
    {
    format(sstring, sizeof(sstring), " %s hat den Server verlassen. [Verlassen]", name);
    SendClientMessageToAll(COLOR_RED, sstring);
    }
    case 2:
    {
    format(sstring, sizeof(sstring), " %s hat den Server verlassen. [Timeout]", name);
    SendClientMessageToAll(COLOR_RED, sstring);
    }
    }
    return 1;
    }

    Und nimm dir mal bitte ein wenig Zeit beim Verfassen deines Posts :D ;) .
    Hoffe,dass dies stimmt 8)


    // Unter OnPlayerCommandText
    dcmd(resetweapons,12,cmdtext)
    // Außerhalb eines CallBacks
    dcmd_resetweapons(playerid, params[])
    {
    new name[MAX_PLAYER_NAME],name2[MAX_PLAYER_NAME];
    new string3[64],string4[64];
    new playa = strval(params);
    if(!strlen(params))
    {
    SendClientMessage(playerid,COLOR_RED,"Verwende:/resetweapons [ID]");
    return 1;
    }
    if(IsPlayerConnected(playa))
    {
    if(IsPlayerAdmin(playerid))
    {
    ResetPlayerWeapons(playa);

    GetPlayerName(playerid, name, sizeof name);
    GetPlayerName(playa,name2, sizeof name2);
    format(string3,sizeof string3, "%s hat dir deine Waffen genommen",name);
    SendClientMessage(playa,COLOR_RED,string3);
    format(string4,sizeof string4,"Du hast %s seine Waffen genommen",name2);
    SendClientMessage(playerid,COLOR_RED,string4);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin");
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Angegebner User nicht online!");
    return 1;
    }
    }
    //Hier nochmal eine etwas veränderte Form
    if(strcmp(cmd, "/unarm", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GREY, "HILFE: /unarm [SpielerID]");
    return 1;
    }
    new gName[MAX_PLAYER_NAME];
    new fm[61];
    new pName[MAX_PLAYER_NAME];
    new gPlayer;
    gPlayer = ReturnUser(tmp);
    if(IsPlayerAdmin(playerid))
    {
    if(!IsPlayerConnected(gPlayer))
    {
    SendClientMessage(playerid,COLOR_GREY,"Spieler ist nicht online!");
    return 1;
    }
    if(gPlayer != INVALID_PLAYER_ID)
    {
    ResetPlayerWeapons(gPlayer);
    GetPlayerName(gPlayer, gName, sizeof(gName));
    GetPlayerName(playerid, pName, sizeof(pName));
    format(fm,sizeof(fm), "Du hast %s entwaffnet!", gName);
    SendClientMessage(playerid, COLOR_BLUE, fm);
    format(fm,sizeof(fm), "Du wurdest von %s entwaffnet!", pName);
    SendClientMessage(gPlayer, COLOR_BLUE, fm);
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"Falscher Name");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"Dazu hast du nicht genügend Rechte!");
    }
    }
    return 1;
    }

    dcmd bzw. sscanf ist kürzer bei Commands mit Parametern,doch bei Commands ohne Variablen erweist es umständlicher ;) .Nebenbei: Versteht man strtok, ist dies genau so einfach :|


    //dcmd(buygun,6,cmdtext); unter OnPlayerCommandText
    //Außerhalb eines CallBacks
    dcmd_buygun(playerid, params[])
    {


    new waffe[43];
    if(sscanf(params,"s",waffe))
    {
    SendClientMessage(playerid,COLOR_RED,"Verwende:/buygun [WAFFENNAME] ");
    return 1;
    }
    if(PlayerToPoint(4.0,playerid, 1958.33, 1343.12, 15.36))
    {
    if(strcmp(waffe,"9mm",true,strlen(waffe))==0) //
    {
    if(GetPlayerMoney(playerid) >= 500 )
    {
    GivePlayerWeapon(playerid,22,1000);
    GivePlayerWeapon(playerid,22,1000);
    SendClientMessage(playerid,COLOR_RED,"9mm gekauft");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Nicht genügend Geld");
    return 1;
    }
    } // --------
    else if(strcmp(waffe,"deagle",true,strlen(waffe))==0)
    {
    if(GetPlayerMoney(playerid) >= 800 )
    {
    GivePlayerWeapon(playerid,24,1000);
    GivePlayerWeapon(playerid,24,1000);
    SendClientMessage(playerid,COLOR_RED,"deagle gekauft");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"icht genügend Geld");
    return 1;
    }// -----
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Waffe existiert nicht");
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Nicht am/im Gunshop ");
    return 1;
    }
    }


    Ich hab dir mal einen Befehl entworfen,den du selbstverständlich erweitern kannst ( durch ----- gekennzeichnet )



    if(strcmp(cmdtext,"/enter",true)==0)
    {
    if(PlayerToPoint(4.0,playerid,X,Y,Z);
    {
    SetPlayerPos(playerid,X,Y,Z);
    return 1;
    }
    else {
    SendClientMessage(playerid,COLOR_RED,"Nicht nahe genug am Gunshop");
    return 1;
    }
    }
    //ebenso /exit gestalten


    Zunächst bitte ich dich,meine Posts vollständig zu lesen!
    Wahrscheinlich benutzen diese einen Streamer,da es mehr als 120 ( 150 ) Objekte sind, und sonst - wie bei dir - der Server crashen würde ( Link steht unten im alten - scheinbar ungelesenen ;) - Post).
    Lad dir die include herunter bzw. befolg die Anleitung im Link.

    1. Dies ist weder ein Thread, um Kritik am Verfasser auszuüben, noch irgendwelche sinnlosen Diskussionen zu führen.


    2. Ich bitte darum,dass einige sich mehr Zeit nehmen beim Erstellen eines Post und sie nutzen, um ihre Rechtschreibfehler bzw. denn Sinngehalt des Geschriebenen zu überprüfen :cursing: .Diese 1 Minute fehlt sicherlich keinem ;) und die restlichen User tuen sich wesentlich leichter :) .



    3. Zum eigentlichen Problem:
    Ich denke,dass du,da es schon einige mal erwähnt worden ist,weißt, wo es hingehört
    Ich bin mir nicht sicher, doch teste mal:

    // ...
    if(!killerid)
    {
    // ...
    if(killerid == INVALID_PLAYER_ID)
    {


    //ganz oben
    forward gehalt(playerid);


    // Im Befehl (bei /copls)
    SetTimerEx("gehalt",900000,1,"i",playerid);


    //Außerhalb eines CallBacks
    public gehalt(playerid)
    {
    GivePlayerMoney(playerid,1000); // 1000 Durch dein Gehalt ersetzen
    return 1;
    }

    Ohne den gesamten Code bzw. den Error ist dies wirklich schwer zu sagen.
    Hier mal ein kleines Beispiel:


    //unter OnPlayerCommandText(..)
    // falls keine da ist,hier diese Klammer setzen : {
    if(strcmp(cmdtext,"/hilfe",true) == 0)
    {
    SendClientMessage(playerid,0xC2A2DAAA,".............");
    return 1;
    }


    Du brauchst das "OnPlayerCommandText" natürlich nur einmal da zu haben, doch die einzelnen Befehle müssen (durch Klammern getrennt) dort stehen.
    Falls du einen Command mit Parametern möchtest, benötigst du strtok oder dcmd ( sscanf ).

    Wo fügt man eine map ein also bei den server ordner ?

    Wenn du Script´s meinst -> "Gamemodes" Ordner.


    "Maps"(=Objekte),die z.B. mit dem MTA: Map Editor erstellt worden sind,kommen bei "OnGameModInt" rein,jedoch.


    Wenn du "Virtual World" meinst, wodurch du "quasi" eine andere Map hast , dann benutz(im Script):

    SetPlayerVirtualWorld(playerid,worldid);

    Random

    //oben bei den Definitionen
    forward Biz();


    //bei OnGameModInt
    SetTimer("Biz",3600000,1);


    //außerhalb eines CallBacks
    new Rando = random(100000000) // falls eine so hohe Zahl unterstützt wird.
    //Da ich nicht weiß,wie dein "Biz(geld)" definiert ist, mach ich´s so:
    BizMoney += Rando;


    // ...


    if(strcmp(cmdtext,"/buygun",true) == 0)
    {
    if(PlayerToPoint(Radius,playerid,X,Y,Z); //oben definieren
    {
    ShowMenuForPlayer(playerid,waffenmenu);
    TogglePlayerControlAble(playerid,false);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,Farbe,"Du bist nicht in der GunShopZone");
    return 1;
    }
    return 1;
    }

    Hoffe,dass es so stimmt inetwa !

    Ich kann dir selbstverständlich so ein Script anfertigen, doch
    1. möchte ich wissen,ob du das GF verwendest,
    2. denke ich,dass dies der falsche Thread ist,da wir hier seine und nicht deine Fragen/Wünsche beantworten/erfüllen sollen.


    Einige nette,lehrreiche,leichte und gute ("Anfangs-")Scripts findest du beim "Server-Download-Packet" im SA:MP - Forum.Sonst meld dich bei mir !
    http://www.sa-mp.com

    :thumbup: Gute arbeit :thumbup:


    Doch eine Frage bzw. Anmerkung habe ich:
    //Kevin verwendet:
    giveplayerid = strval(tmp);
    // Wäre giveplayerid = ReturnUser(tmp) nicht besser,da man dann auch einen Teil des Namen eingeben kann ?