Beiträge von Inaktiv_Für_Immer

    Leider habe ich im Moment das Problem, das ich nicht weiß, wie ich die SpielerID aus deren Score herausfinden kann.


    Doch, ich kann lesen, nur verstehe ich nicht, was Du genau möchtest. Was meinst Du mit die Spieler ID aus deren Score herausfinden kann. Erklär mal ein wenig ausführlicher.

    Die ID vom Spieler herausfinden?


    Einfach hinter dem string "playerid" schreiben, dann haste die ID. Ein Beispiel:
    if(strcmp(cmdtext,"/myid",true)==0)
    {
    new string[20];
    format(string,sizeof(string),"Du hast die ID: %d", playerid);
    SendClientMessage(playerid,FARBE,string);
    return 1;
    }

    Irgendwo bei OnPlayerSpawn ist eine if Abfrage, ob pOrigin auf 1 ist. Dort ist auch der Spawn bestimmt, kannste dort ändern.


    Und die Skins sind oben im Script definiert, glaube CIV oder so, kp. War so in der Art, kann mich noch erinnern:


    new CIV[] = {SKINID,SKINID,SKINID};


    Gruß, Bunnyhopper

    Nettes TuT, aber man könnte das ja im Prinzip erweitern.


    Mit Dini abspeichern, mit einem enum die Owner setzen, z.B gOwner, die Farben definieren, also wenn Fraktion XY Owner ist wird die Gangzone mit der Farbe XY angezeigt.


    for(new i; i<sizeof(FightGebiete); i++)
    {
    new color;//Erstellt eine neue Variable
    if(FightGebiete[i][gOwner] == 5){color=/////;}
    if(FightGebiete[i][gOwner] == 6){color=/////;}
    GangZoneShowForPlayer(playerid, FightGebiete[i], color);
    }


    Dann müsste man ja noch die FightGebiete oben definieren:
    new Gebiete[5][gebiet] = {
    {blablablabla}
    {blablablabla}
    };


    Ich hatte es früher so gemacht, aber hab selbst kp mehr :D. Schon laange her, hehe.


    Gebe dir 10 von 10 Punkten, sehr hilfreiches Tutorial für die Pawno Einsteiger 8)

    Ganz einfach eigentlich:


    Um eine Gangzone zu erstellen, musst du GangZoneCreate nutzen, ein Beispiel:
    Definiertes = GangZoneCreate(minX,minY,maxX,maxY); // Kommt unter GameModeInit


    Eine Definierung für eine GangZone ist optional, wie bei einem Pickup, aber wenn Du dennoch einen Namen definieren möchtest, damit Du die Stelle leicht wieder finden kannst, musst Du ganz oben im Script folgendes eingeben:
    [pwn]new Definiertes; // also ein Name für deine GangZone und dann vor GangZoneCreate der Name und ein = schreiben[/pwn]


    Und da Du ja ein Textdraw anzeigen möchtest, musst Du erstmal die Koordinaten rausfinden, dafür empfehle ich dir folgende Seite: (http://bsndesign.webs.com/tde.htm)


    Wie Du ein Textdraw erstellst, und was Du alles einfügen möchtest, steht ebenfalls auf der Seite. Einfach mal durchlesen.


    Jetzt wollen wir überprüfen, ob der Spieler eine NO-DM Zone betretet bzw. in einer ist, das machen so:
    stock IsPlayerInArea(playerid,Float:minX,Float:minY,Float:maxX,Float:maxY)
    {
    new Float:pX,Float:pY,Float:pZ;
    GetPlayerPos(playerid,pX,pY,pZ);
    if(pX >= minX && pX <= maxX && pY >= minY && pY <= maxY) return 1;
    else return 0;
    }


    Einen stock erstellen. Dieser überprüft, ob der Spieler sich in einer bestimmten Zone befindet, fast so wie IsPlayerInRangeOfPoint, hier ein Beispiel:
    if(strcmp(cmdtext,"/hallo",true)==0)
    {
    if(IsPlayerInArea(playerid,minX,minY,maxX,maxY)) // befindet sich der Spieler in Zone minX,minY,maxX,maxY?
    {
    SendClientMessage(playerid,FARBE,"Hallo!");
    }
    else // wenn er sich nicht dort aufhält, bekommt er ne fette message :D
    {
    SendClientMessage(playerid,FARBE,"Hau bloß ab für dich gibts kein hi!");
    }
    }


    So jetzt wollen wir den Spieler einen TextDraw anzeigen, wenn er sich in der Zone aufhält, dafür erstellen wir einen Timer, der dies, alle 10 Sekunden (oder dein gewünschtes Interval) überprüft:
    Wann soll der Timer gestartet werden? Sagen wir mal, wenn der Spieler sich einloggt, also unter OnPlayerConnect:
    SetTimer("NDMZoneCheck",10000,true); // SetTimer("timername",interval,wiederholung?); true = wiederholung, false = keine


    Und für den Timer erstellen wir jetzt einen public:
    forward NDMZoneCheck(playerid);
    public NDMZoneCheck(playerid)
    {
    for (new i = 0; i < MAX_PLAYERS; i++) // oder GetMaxPlayers wenn du paar Ressourcen sparen möchtest, damit bekommen wir jeden Spieler
    {
    if(IsPlayerInArea(i,minX,minY,maxX,maxY)) // Wenn er in der NO DM Zone ist, wenn du mehrere NO dm Zonen hast einfach ein || und mit IsPlayerInArea weiter machen
    {
    TextDrawShowForPlayer(i,"dein "textdrawname"); // dein textdraw wird angezeigt wenn er die no dm zone betritt
    }
    else // und wenn nicht verstecken wir den textdraw
    {
    TextDrawHideForPlayer(i, "textdrawname"); // und weg isser
    }
    }
    return 1;
    }


    Bei weiteren Fragen, pn, hab das jetzt auf die schnelle geschrieben ^^


    PS: Ein Gangzone zeigst du mit GangZoneShowForPlayer (nur für den Spieler) oder GangZoneShowForAll (für alle) ein.


    // geht auch anders, aber so find ich es am leichtesten xD //

    new bool: tor;


    Bei deinem Befehl:
    if(strcmp(cmdtext,"blablablablablabla
    if(IsPlayerInRangeOfPoint(blablablabla))
    if(tor == false) // wir fragen ab ob das bool auf false ist
    {
    // Deine commands
    // deine commands
    tor = true; // hier setzen wir das bool auf true
    }
    else if(tor == true) // und hier fragen wir ob, ob das Bool auf true ist, wenn ja, dann schließt sich das tor
    {
    // deine commands
    // deine comands
    tor = false; // und hier setzen wir das bool wieder auf false
    }


    Verstanden?

    if(strcmp(cmdtext,"/Kaufen",true)==0)
    {
    if(IsPlayerInRangeOfPoint(playerid,3.0,19.311354,37.134351,93.4234213))
    {
    if(Kekse[playerid] == 0)
    {
    GivePlayerMoney(playerid, -150);
    SendClientMessage(playerid,0xFFFFFFFF, "Du hast Kekse gekauft. Esse deine Kekse mit /kekseessen");
    Kekse[playerid] = 1;


    }
    else // Hier wird Error gezeigt
    {
    SendClientMessage(playerid,0xFFFFFFFF, "Du hast bereits Kekse. Esse deine Kekse mit /kekseessen");
    }
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF, "Du bist nicht im Keksladen.");
    }
    }


    So muss es gehen

    Schau dir deins mal an, Atze:
    if(strcmp(cmdtext,"/Kaufen",true)==0)
    {
    if(IsPlayerInRangeOfPoint(playerid,3.0,19.311354,37.134351,93.4234213))
    {
    Kekse[playerid] = 0;
    { // wofür ist diese klammer?
    GivePlayerMoney(playerid, -150);
    SendClientMessage(playerid,0xFFFFFFFF, "Du hast Kekse gekauft. Esse deine Kekse mit /kekseessen");
    Kekse[playerid] = 1;


    }
    else // Hier wird Error gezeigt
    {
    SendClientMessage(playerid,0xFFFFFFFF, "Du hast bereits Kekse. Esse deine Kekse mit /kekseessen");
    }
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF, "Du bist nicht im Keksladen.");
    }
    }

    Ist mir ein bisschen zu "einfach", ich würde es so machen:
    if(strcmp(cmdtext,"/Kaufen",true)==0)
    {
    if(IsPlayerInRangeOfPoint(playerid,3.0,19.311354,37.134351,93.4234213))
    {
    if(Kekse(playerid) <= 5)
    {
    new string[128];
    Kekse[playerid] += 1;
    format(string,sizeof(string),"Du hast dir Kekse gekauft. Esse deine Kekse mit /keksessen, du besitzt %d Kekse.",Kekse);
    GivePlayerMoney(playerid, -150);
    SendClientMessage(playerid,0xFFFFFFFF, string);
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF, "Du hast schon mehr als 5 Kekse. Esse sie um neue zu kaufen.");
    }
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF, "Du bist nicht im Keksladen.");
    }
    }
    if(strcmp(cmdtext,"/Kekseessen",true)==0)
    {
    if(Kekse[playerid]== 5 || Kekse[playerid] == 4 || Kekse[playerid] == 3 || Kekse[playerid] == 2 || Kekse[playerid] == 1)
    {
    new string[128];
    Kekse[playerid] -= 1;
    format(string,sizeof(string),"Du hast einen Keks gegessen. Du hast noch %d Kekse.",Kekse);
    SetPlayerHealth(playerid, 100);
    SendClientMessage(playerid,0xFFFFFFFF, string);
    ApplyAnimation(playerid, "FOOD", "EAT_Burger", 3.0, 0, 0, 0, 0, 0); // Animation (Essen)
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF, "Du hast keine Kekse, kaufe Kekse im Keksladen.");
    }
    }


    Ansonsten nettes Tutorial ^^

    Wieso nutzt die nicht die neuen Funktionen von 0.3d 8)


    OnPlayerGiveDamage oder OnPlayerTakeDamage


    Ich würde es ungefähr so machen:
    public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
    {
    new string[128], opfer[MAX_PLAYER_NAME], angreifer[MAX_PLAYER_NAME];
    new weaponname[24];
    GetPlayerName(playerid, opfer, sizeof (opfer));
    GetPlayerName(issuerid, angreifer, sizeof (angreifer));

    GetWeaponName(weaponid, weaponname, sizeof (weaponname));
    if(weaponid == 38)
    {
    format(string, sizeof(string), "ANTI-CHEAT: %s griff %s mit einer %s an. Er wurde gebannt.", angreifer, opfer,weaponame);
    SendClientMessageToAll(COLOR_GREY,string);
    SendClientMessage(playerid,COLOR_RED," Du wurdest gebannt/gekickt, da Du dir eine Minigun ercheatest hast. ");
    Kick(issuerid);
    }
    return 1;
    }

    Kopier doch einfach das:
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp(cmdtext,"/portlspd",true)==0)
    {
    SetPlayerPos(playerid,1532.2133,-1654.6699,13.3828);
    SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest zum LSPD Teleportiert");
    return 1;
    }
    if(strcmp(cmdtext,"/portbsn",true)==0)
    {
    SetPlayerPos(playerid,4286,-929.3522,42.9395,103);
    SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest zum BSN Teleportiert ");
    return 1;
    }
    }


    Funktioniert, musst nur richtig reinrücken, falls Warnings kommen ;)