Logicky na pawn

    Share

    QWER
    Znalec

    Posts : 60
    Join date : 28.04.2011

    Logicky na pawn

    Odoslať pre QWER za So apríl 30, 2011 9:52 pm

    No, začnem tím že vás pozdravím xD ahojte.

    [size=150]Predslov alias O čom to je ?[/size]
    Na 99% vecí sa dá ísť logicky. Aby ste mohli takto fungovať musíte perfektne ovládať základy pwn. Potom netreba zakladať samé help-y kde sa budete pýtať ako robiť tamto a tamto.

    [size=150]Neviem spraviť niečo, ako teda na to ?[/size]
    Je to jednoduché, stačí porozmýšľať (žiadne "myslenie bolí a preto nemyslím" xD !). Začneme.
    [size=150]Teória[/size]
    príklad: Bol som na jednom servery kde bol odpočet, človek dak /3 a spustil sa odpočet na 3 sekundy (3,2,1,GO) a teraz neviem čo by mal obsahovať a ako asi funguje.
    Porozmýšľam čo je odpočet.
    "Je to vlastne číslo ktoré sa zmenšuje až príde k poslednému číslu, s pravidla je to štart/go...".
    Už viem čo je odpočet. Ako ho vyvolám ? Kebyže ho dám za sebou (npr. create 4 textdrawy a hned ich zničiť) tak by odpočet prešiel za stotinu sekundy Very Happy čo je blbosť.
    Z toho vyplíva že potrebujem Public ktorý bude vyvolaný Timerom.

    Už viem že použijem Timer & Public. Ale ako aby to sa to menilo za sekundu a nie za tisícinu sekundy. Odpoved je Premena.

    [size=150]Prax[/size]
    (kedže viem základy, tj. viem aj string) spravím si jednoduchý kód
    kód:

    new Count

    forward CountDown()

    public CountDown(){
    new s[5]
    if(Count > 0)
     format(s,5,"%d",Count)
    Count--;
    SetTimer("CountDown", 1000, 0);
    }else{
     format(s,5,"Go")
    }
    GameTextForAll(s,1000,3)
    }

    a do príkazu iba
    Count=cislo
    SetTimer("CountDown", 1000, 0);

    btw toto nekopírujte toto je iba orientačne ako funguje to ale ; atd...
    [size=150]Verdikt[/size]
    A to sme iba chvíľu premýšľali nad tým, ako to spraviť Smile a toto sme z 0 spravili.
    Teraz si iste poviete že to bolo jednoduché. Ale musím vám povedať že to jednoduché fakt bolo.

    Takto isto môžeme robiť všetko, môžete si to dávať do bodov npr. pri tvorbe bodoch o AC to môže vyzerať takto
    kód:
     Anti-Cheat Plán
    1. Anti Money Cheat
    - premena peniaze pre všetkých
    - stock na jednoduché pridávanie penazí cez vlastnú funkciu GivePlayerCash
    - public na získanie hráčovych penazí a následne porovnanie s premenou
    - timer ktorý búde spúšťať public
    - otestovať
    A KED DOKONČÍTE PRIDÁTE TAM
    verdikt: 100% funkčné

    A DALEJ

    2. Anti Teleport Cheat
    - float na pozíciu (x,y,z)
    - public na získanie pozície hrača
    - timer ktorý bude spúšťať public
    - new float na poziciu (x,y,z)
    - podmienka, ak je hráč daľej ako 50 (radius = isplayerinshere) prvé získanie pozície kick

    verdikt: 50% Nefunkčné
    Opravy:
    - premena na interier
    - kontrolovať interier
    - podmienka ak nevošiel do interieru

    verdikt 2: 100% Funkčné

    atd...
    Toto si môžete dať hore, nad include do
    /*
    */
    uvidíte že sa vám to zíde, nielen že viete čo a ako robiť ale aj nezabudnete Smile

    [size=150]Scripty na jeden riadok[/size]
    Aj vám sa páčia tie scripty na jeden riadok ? npr. CreateBank(x,y,z) ?
    Nepochybne. Ved kebyže to robíte do módu (normálne) tak premeny, môže vám to zasra* mód ak neviete ako to robiť účinné (nie cez 1 riadok)

    [size=150]Teória[/size]
    Ako to vlastne funguje ? Toto sa snad každý sám seba pýtal (Dokonca aj ja, všetci Smile), no aké bolo moje prekvapenie ked som otvoril CZproperty a tam nebolo nič také nepochopiteľné, ved iba premeny, ako teda na veci cez 1 riadok ?

    Videli ste v include, kde je niečo cez 1 riadok niečo takéto
    #define MAX_PROPERTY 100
    #define MAX_HOUSES 500
    #define MAX_OBJECTS 4000

    atd... videli ste to ? a potom bolo npr.
    new Sold]MAX_PROPERTY]; (sold = predaný)
    Toto je presne ten poháňací systém jedného riadka Smile
    ono to vlastne vytvorí toľko premien, koľko obsahuje definícia Smile
    čiže ak máte
    #define MAX_PROPERTY 500
    new Sold[MAX_PROPERTY]

    tak je to ako kebyže urobíte
    new Sold1
    new Sold2
    new Sold3
    ...
    new Sold500

    Potom je tam public/stock na 1 riadok Wink žiadny iný zázrak v tom nieje
    POZOR ! Čím vačšie číslo define obsahuje tým viac premien sa vytvorí a tým vačší je súbor (npr. z 500 kb máte zrazu 5 Mb)
    a teraz to na čo dlho čakáte

    [size=150]Prax[/size]
    Áno, prax scriptov cez 1 riadok.
    Hore si ako sme sa dozvedeli urobíme taký návod
    kód:
    /* Enter & Exit Interieror System  (EEIS xD)
    - premenné, ktoré použijeme sú: float:x float:y float:z interieror a vytvorenie pickupu.    + ešte čo nás napadne xD
    - stock na vkládanie cez 1 riadok
    */
    a ide sa na kód
    dáme si základ, tj. define
    kód:
    #define MAX_EEIS 50
    premenné
    kód:
    new Float:x[MAX_EEIS]// kde bude stáť pickup x
    new Float:y[MAX_EEIS]// ---------||----------- y
    new Float:z[MAX_EEIS]// ---------||----------- z
    new Float:telex[MAX_EEIS]// kam to hráča portne x
    new Float:teley[MAX_EEIS]// ----------||--------- y
    new Float:telez[MAX_EEIS]//----------||---------- z
    new Int[MAX_EEIS]// interier kam ho portne :D
    new Count // Počet :)
    new Pickup;// pickup xD
    a teraz ide základ, ten 1 riadok (ja rád používam stock takže použijeme stock)

    kód:
    stock CreateInterieror(id,Float:xx,Float:yy,Float:zz,Float:telexx,Float:teleyy,Float:telezz,Intt){
    if(Count > MAX_EEIS) return SendRconCommand("exit"); //ak dá viac ako nadefinované množstvo tak mu vypne server
    Count++;
    x[Count] = xx; // Count preto lebo každý interier dostané vlastnú hodnotu v premennej, takže ju využijeme
    y[Count] = yy;
    z[Count] = zz;
    telex[Count] = telexx;
    teley[Count] = teleyy;
    telez[Count] = telezz;
    Int[Count] = Intt;
    Pickup[Count] = CreatePickup(id, 1, xx, yy, zz, -1); // vytvorí pickup
    }
    vytvoríme si
    kód:
    forward OnPlayerPickUpPickupEEIS(playerid, pickupid)
    a niekam do INC
    kód:

    public OnPlayerPickUpPickupEEIS(playerid, pickupid){
    for(new i; i < Count; i++){
    if(IsPlayerInRangeOfPoint(playerid, 2, x[i],y[i],z[i]) == 1){
    SetPlayerPos(playerid,telex[i],teley[i],telez[i]);
    SetPlayerInterior(playerid, Int[i]);
    }}
    return 1;
    }
    A máme jednoduchý INC (Enter & Exit Interieror System) cez 1 riadok
    Naozaj to bolo také ťažké ? Jasne že že nie ! Stačilo iba porozmýšľať !
    Dúfam že si aspon niečo z tohto tut-u vezmete k srdcu.
    Nehovorím že tieto tuty niesu zlé, ano ked neviete npr. tu s CP tak hej ale ked tam je script a vy ho použijete v módu to není moc dobré. Potom to tak vyzerá, všetky módy sú podobné ako vajice vajicu. Sa nedivte že tam nikto nehrá.

    Dakujem že ste si prečítali tento TUT, dúfam že ste sa aspon kúštik naučili a všetko pochopili.
    avatar
    ylleron
    Admin

    Posts : 82
    Join date : 26.04.2011

    Re: Logicky na pawn

    Odoslať pre ylleron za Ne máj 01, 2011 4:36 am

    Niečo tu je čo mi nedá Very Happy new Sold]MAX_PROPERTY];. No ale pocelkovom hodnotení som prispel k záveru ze to pripnem Very Happy


    _________________
    Pripravujeme SexyCity
    * Sofistikovaný Gamemode s pokrocilimi funkciami a moznostami
    * Profesionalny administracni tym, ktory je vybrany s najlepsich hracov

      Práve je Ut august 21, 2018 6:45 pm