[TUTORIAL]Creare un Cancello senza CMD per basi By Rock

« Older   Newer »
 
  Share  
.
  1. Black_Rock
        +1   +1   -1
     
    .

    User deleted


    Rifaccio la guida su come creare un casello o un cancello apribile senza comando ma usando IsPlayerInRangeOfPoint.
    Prima di tutto per chiarirci faccio vedere delle screen.
    Cancello chiuso quando sei lontano dal cancello:


    Cancello che si sta aprendo perchè sei vicino al cancello


    Cancello Aperto


    Cancello Richiuso perchè ti sei allontanato dal Cancello


    Ok, Adesso iniziamo a scriptare...
    gli include che ci interessano sono 2:
    CITAZIONE
    #include <streamer>
    #include <a_samp>

    dopo aver messo gli include subito sotto gli include dovete mettere le forwards, che servono per aiutarci dopo per lo scritp.
    Le Forwards devono essere lo stesso numero dei cancelli che vuoi aprire sennò lo script non va.
    Per esempio, se i cancelli sono 4 debbo scrivere
    CITAZIONE
    forward TollGameOpen01();
    forward TollGameOpen02();
    forward TollGameOpen03();
    forward TollGameOpen04();

    ma in questo tutorial ne useremo solo 1 di cancello quindi sotto le Include dovete mettere
    CITAZIONE
    forward TollGameOpen01();

    e poi la stessa cosa per le New, devono essere lo stesso numero dei cancelli, quindi scrivete sotto le forward
    CITAZIONE
    new TollGate1;
    #if defined FILTERSCRIPT

    OKK, ora passiamo a definire a cosa servono le new e le forwards.
    Quindi sotto OnFilterScriptInit dovete mettere tutti gli object della vostra base esclusi i cancelli.
    I cancelli li dovete scrivere in modo particolare:
    se il cancello è
    CITAZIONE
    CreateDynamicObject(974, 3181, 510.20001, 6.4, 0, 0, 90);

    voi dovete scrivere
    CITAZIONE
    TollGate1 = CreateDynamicObject(974, 3181, 510.20001, 6.4, 0, 0, 90);

    e poi usiamo adesso le forward scrivendo sotto tutti gli object:
    CITAZIONE
    SetTimer("TollGameOpen01", 1000, 1);

    che sarebbe
    CITAZIONE
    SetTimer("ForWard", Intervallo in millisencondi, ripetizioni);

    ora inizia il bello ehehehehe
    apriamo un nuovo public che sarebbe:
    CITAZIONE
    public TollGameOpen01()

    e scriviamoci dentro
    CITAZIONE
    {

    new open;
    for(new i=GetMaxPlayers(); i > -1; i--)
    {

    poi qui iniziamo ad usare IsPlayerInRangeOfPoint quindi dovete prendere delle coordinate vicino al cancello dove il player deve stare per aprire il cancello ad esempio:
    CITAZIONE
    if(IsPlayerInRangeOfPoint(i, 8.0, 3184.69995,510.39999,3.8665))

    che sta per
    CITAZIONE
    (i, il range lasciate 8.0, coordinata X, coordinata Y, coordinata Z)

    poi se volete che il cancello si apra solo quando il player ha una tag specifica dovete mettere:
    CITAZIONE
    {
    if(DoesPlayerHasTag(i,"[TAG DEL CAN"))

    poi il messaggio di apertura
    CITAZIONE
    {
    SendClientMessage(i,0xFFFFFFFF,"Apertura in corso...");

    e adesso dovete specificare il movimento che deve fare il cancello per poter aprirsi quindi
    CITAZIONE
    open = 1;
    MoveDynamicObject(TollGate1, 3181, 510.20001, 0, 2.0); /* qui lo spostamento che deve fare il cancello del casello */
    break;

    }

    che sta per:
    CITAZIONE
    MoveDynamicObject(OBJECT, coordinata X, coordinata Y, coordinata Z, Velocità "Più grande è il numero, più è veloce");

    e adesso dobbiamo fare in modo che il cancello si richiuda quando noi ce ne andiamo quindi
    CITAZIONE
    }
    if(!open)
    MoveDynamicObject(TollGate1, 3181, 510.20001, 6.4, 2.0); /* qui lo spostamento che deve fare il cancello del casello per ritornare come era prima*/

    }
    }

    in pratica dovete rimettere le coordinate standard del cancello.
    Poi ricordatevi di mettere lo stock alla fine dello script che è
    CITAZIONE
    stock DoesPlayerHasTag(playerid,tag[]) {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    return (strfind(name,tag,true) != -1);
    }

    se non avete capito come scriptarla vi metto l'anteprima dello scritp così capite se avete sbagliato:
    #define FILTERSCRIPT
    #include <streamer>
    #include <a_samp>

    /* FORWARDS per il tempo */
    forward TollGameOpen01();


    /* NEW(Tollgate o Caselli per essere elaborati) "Tollgate o caselli sono la stessa cosa" */
    new TollGate1;

    #if defined FILTERSCRIPT

    public OnFilterScriptInit()
    {

    /* Qui gli object per bloccare il casello, io Ho usato l'object 974 ma non siete obbligati a fare per forza 974, funziona con tutti gli object */

    TollGate1 = CreateDynamicObject(974, 3181, 510.20001, 6.4, 0, 0, 90);


    /* Tempo che deve stare il player sotto il casello per aprirsi*/

    SetTimer("TollGameOpen01", 1000, 1);



    /* Qui mettete tutti gli object della vostra base */
    CreateDynamicObject(3997, 3102.7998, 404.69922, 3.6, 0, 0, 0);
    CreateDynamicObject(3997, 3103, 524.59998, 3.6, 0, 0, 0);
    CreateDynamicObject(3866, 3033.69922, 357.89941, 11.4, 0, 0, 87.99);
    CreateDynamicObject(3887, 3032, 386.5, 10.9, 0, 0, 0);

    AddStaticVehicleEx(560,3080.1999500,506.5000000,4.4000000,0.0000000,0,0,15); //Sultan
    AddStaticVehicleEx(560,3074.1999500,506.6000100,4.4000000,0.0000000,0,0,15); //Sultan



    Create3DTextLabel("Base BlackBloc, difendetela con cura e astuzia", 0x00000000, 3084.19995,418.29999, 2.0, 40.0, 0, 0);




    return 1;
    }


    #else

    main()
    {}

    #endif

    public TollGameOpen01()
    {

    new open;
    for(new i=GetMaxPlayers(); i > -1; i--)
    {
    /* qui devi scrivere le coordinate dove il player si deve trovare per aprirsi il casello*/
    if(IsPlayerInRangeOfPoint(i, 8.0, 3184.69995,510.39999,3.8665)) /* (i, il range lasciate 8.0, coordinata X, coordinata Y, coordinata Z)*/
    {
    if(DoesPlayerHasTag(i,"[BlackBloc")) /* al posto di [BlackBloc mettete la tag del vostro Clan */
    {
    SendClientMessage(i,0xFFFFFFFF,"Apertura in corso...");
    open = 1;
    MoveDynamicObject(TollGate1, 3181, 510.20001, 0, 2.0); /* qui lo spostamento che deve fare il cancello del casello */
    break;

    }
    }
    if(!open)
    MoveDynamicObject(TollGate1, 3181, 510.20001, 6.4, 2.0); /* qui lo spostamento che deve fare il cancello del casello per ritornare come era prima*/

    }
    }


    public OnFilterScriptExit()
    {
    return 1;
    }

    /* !!!!!!!!ATTENZIONE!!!!!!!! RICORDATEVI DI METTERE QUESTO STOCK SOTTO LO SCRITP SENNò NON FUNGE NIENTE*/
    stock DoesPlayerHasTag(playerid,tag[]) {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    return (strfind(name,tag,true) != -1);
    }

    Guida by Rock, copiata da nessuno, tutorial tutto a parole mie e sono sorpreso che nessuno e neanche inglesi e russi non abbiano fatto un tutorial per cancelli apribili senza cmd.
    VIETATO FARE IL COPIA E INCOLLA DI TUTTA LA GUIDA E SPACCIARVI CHE LA GUIDA è VOSTRA.
    Aggiornato 27/10/2013

    Edited by Guido_La.Vespa - 27/10/2013, 00:03
     
    .
  2.     +1   -1
     
    .
    Avatar

    Advanced Member

    Group
    Pensionati
    Posts
    3,912
    Reputazione
    +2,126

    Status
    Offline
    Bravo...bella guida.
     
    .
  3. -Tommy-
        +1   -1
     
    .

    User deleted


    si però appena passa uno del clan ci vanno dentro tutti ! XD
    cmq importantizzo guida! ;)
     
    .
2 replies since 4/8/2013, 17:01   585 views
  Share  
.
Top