[Pedido] Criador de portгo com senha ingame
#3

Sу que esse do fort so serve pra criar e por na gm queria um com salvamento e tal :S eu n sei como fazer Aki achei um criador de portгo na area inglesa sу que ele tem um bug, para poder deletar o 2° portгo criado precisa deletar o primeiro e queria fazer o portгo abrir e fechar automaticamente depois de alguns segundos

Код:
#include a_samp
#include zcmd
#include Dini
 
#define MAX_GATES                       20
#define GATE_OBJECT                     980
#define GATE_STATE_CLOSED       0
#define GATE_STATE_OPEN         1
 
enum fs_gates
{
        gCreated,
        Float:gX,
        Float:gY,
        Float:gZ,
        Float:gA,
        gObject,
        gPlacedBy[24],
        gStatus,
        gPassword
}
 
new GateInfo[MAX_GATES][fs_gates];
 
CMD:placegate( playerid, params[] )
{
        if( isnull( params) )
            return SendClientMessage( playerid, -1, "Syntax: /placegate [password]" );
           
        if( !strval( params ) )
            return SendClientMessage( playerid, -1, "You need to input numbers." );
           
        if( IsPlayerInAnyVehicle( playerid ) )
            return SendClientMessage( playerid, -1, "You need to exit your vehicle." );
 
        new Float:pPos[4];
        GetPlayerPos( playerid, pPos[0], pPos[1], pPos[2] );
        GetPlayerFacingAngle( playerid, pPos[3] );
        CreateGate( playerid, strval( params ), pPos[0], pPos[1], pPos[2], pPos[3] );
        SendClientMessage( playerid, -1, "You succesfully created a movable gate. Use /gopen or /gclose." );
 
        return 1;
}
 
CMD:gopen( playerid, params[] )
{
        if( isnull( params ) )
            return SendClientMessage( playerid, -1, "Syntax: /gopen [password]" );
           
        new szName[24], gate = -1;
        GetPlayerName( playerid, szName, 24 );
        for( new i = 0; i != MAX_GATES; i++ )
                if( GateInfo[i][gCreated] == 1 )
                        if( strval( params ) == GateInfo[i][gPassword] )
                                { gate = i; break; }
 
        if( gate != -1 )
        {
            if( !IsObjectMoving( GateInfo[gate][gObject] ) )
            {
                if( IsPlayerInRangeOfPoint( playerid, 10.0, GateInfo[gate][gX], GateInfo[gate][gY], GateInfo[gate][gZ] ) )
                        {
                                if( GateInfo[gate][gStatus] == GATE_STATE_CLOSED )
                        {
                                    MoveObject( GateInfo[gate][gObject], GateInfo[gate][gX], GateInfo[gate][gY], GateInfo[gate][gZ]-5.3, 7.0 );
                                        SendClientMessage( playerid, -1, "You opened the gate." );
                                }
 
                                else
                                return SendClientMessage( playerid, -1, "The gate is already open." );
                        }
 
                        else
                        return SendClientMessage( playerid, -1, "You're not near any gate." );
        }
 
        else
                return SendClientMessage( playerid, -1, "You must wait untill the gate has moved." );
        }
 
        else
            return SendClientMessage( playerid, -1, "Invalid password." );
 
        return 1;
}
 
CMD:gclose( playerid, params[] )
{
        if( isnull( params ) )
            return SendClientMessage( playerid, -1, "Syntax: /gclose [password]" );
           
        new szName[24], gate = -1;
        GetPlayerName( playerid, szName, 24 );
        for( new i = 0; i != MAX_GATES; i++ )
                if( GateInfo[i][gCreated] == 1 )
                        if( strval( params ) == GateInfo[i][gPassword] )
                                { gate = i; break; }
 
        if( gate != -1 )
        {
            if( !IsObjectMoving( GateInfo[gate][gObject] ) )
            {
                if( IsPlayerInRangeOfPoint( playerid, 10.0, GateInfo[gate][gX], GateInfo[gate][gY], GateInfo[gate][gZ] ) )
                        {
                                if( GateInfo[gate][gStatus] == GATE_STATE_OPEN )
                        {
                                    MoveObject( GateInfo[gate][gObject], GateInfo[gate][gX], GateInfo[gate][gY], GateInfo[gate][gZ]+5.3, 7.0 );
                                        SendClientMessage( playerid, -1, "You closed the gate." );
                                }
 
                                else
                                return SendClientMessage( playerid, -1, "The gate is already closed." );
                        }
                       
                        else
                                return SendClientMessage( playerid, -1, "You're not near any gate." );
        }
 
        else
                return SendClientMessage( playerid, -1, "You must wait untill the gate has moved." );
        }
 
        else
            return SendClientMessage( playerid, -1, "Invalid password." );
 
        return 1;
}
 
CMD:removegate( playerid, params[] )
{
        for( new i = 0; i != MAX_GATES; i++ )
        {
                if( GateInfo[i][gCreated] == 1 )
                {
                    if( IsPlayerInRangeOfPoint( playerid, 10.0, GateInfo[i][gX], GateInfo[i][gY], GateInfo[i][gZ] ) )
                        {
                                new szName[24];
                                GetPlayerName( playerid, szName, 24 );
                                if( !strcmp( szName, GateInfo[i][gPlacedBy], true ) || IsPlayerAdmin( playerid ) )
                                {
                                        DestroyObject( GateInfo[i][gObject] );
                                        format( GateInfo[i][gPlacedBy], 24, "None" );
                                GateInfo[i][gCreated] = 0;
                                GateInfo[i][gX] = 0.0;
                                GateInfo[i][gY] = 0.0;
                                GateInfo[i][gZ] = 0.0;
                                GateInfo[i][gA] = 0.0;
                                GateInfo[i][gPassword] = 0;
                                GateInfo[i][gStatus] = GATE_STATE_CLOSED;
                                SendClientMessage( playerid, -1, "You removed the gate." );
 
                                        new file[32];
                                        format( file, 32, "Gates/gate_%d.ini", i );
                                        if( dini_Exists( file ) )
                                        dini_Remove( file );
                                        break;
                }
               
                                else
                                        return SendClientMessage( playerid, -1, "You don't own this gate." );
                        }
                       
                        else
                                return SendClientMessage( playerid, -1, "You're not near any gate." );
        }
    }
 
        return 1;
}
 
CMD:gateinfo( playerid, params[] )
{
        if( IsPlayerAdmin( playerid ) )
        {
                for( new i = 0; i != MAX_GATES; i++ )
                {
                        if( GateInfo[i][gCreated] == 1 )
                        {
                            if( IsPlayerInRangeOfPoint( playerid, 5.0, GateInfo[i][gX], GateInfo[i][gY], GateInfo[i][gZ] ) )
                                {
                                        new szString[128];
                                        format( szString, 128, "Gate Info( Placed by: %s | Password: %d)", GateInfo[i][gPlacedBy], GateInfo[i][gPassword] );
                                        SendClientMessage( playerid, -1, szString );
                                        return 1;
                                }
 
                                else
                                        return SendClientMessage( playerid, -1, "You're not near any gate." );
                }
            }
    }
   
        else
                return SendClientMessage( playerid, -1, "You're not an admin." );
        return 1;
}
 
public OnFilterScriptInit( )
{
        for( new i = 0; i != MAX_GATES; i++ )
        {
            if( GateInfo[i][gCreated] == 0 )
            {
                        new file[64];
                        format( file, 64, "Gates/gate_%d.ini", i );
                        if( fexist( file ) )
                        {
                            GateInfo[i][gCreated] = 1;
                                GateInfo[i][gX] = dini_Float( file, "X" );
                                GateInfo[i][gY] = dini_Float( file, "Y" );
                                GateInfo[i][gZ] = dini_Float( file, "Z" );
                                GateInfo[i][gA] = dini_Float( file, "A" );
                                GateInfo[i][gStatus] = dini_Int( file, "Status" );
                                GateInfo[i][gPassword] = dini_Int( file, "Password" );
                                format( GateInfo[i][gPlacedBy], 24, dini_Get( file, "PlacedBy" ) );
                                GateInfo[i][gObject] = CreateObject( GATE_OBJECT, GateInfo[i][gX], GateInfo[i][gY], GateInfo[i][gZ], 0, 0, GateInfo[i][gA] );
            }
        }
    }
 
        return 1;
}
 
public OnFilterScriptExit( )
{
        for( new i = 0; i != MAX_GATES; i++ )
        {
            if( GateInfo[i][gCreated] == 1 )
            {
                        new file[64];
                        format( file, 64, "Gates/gate_%d.ini", i );
                        if( fexist( file ) )
                        {
                                dini_IntSet( file, "Object", GateInfo[i][gObject] );
                                dini_FloatSet( file, "X", GateInfo[i][gX] );
                                dini_FloatSet( file, "Y", GateInfo[i][gY] );
                                dini_FloatSet( file, "Z", GateInfo[i][gZ] );
                                dini_FloatSet( file, "A", GateInfo[i][gA] );
                                dini_IntSet( file, "Status", GateInfo[i][gStatus] );
                                dini_IntSet( file, "Password", GateInfo[i][gPassword] );
                                dini_Set( file, "PlacedBy", GateInfo[i][gPlacedBy] );
                                DestroyObject( GateInfo[i][gObject] );
                                format( GateInfo[i][gPlacedBy], 24, "None" );
                        GateInfo[i][gCreated] = 0;
                        GateInfo[i][gX] = 0.0;
                        GateInfo[i][gY] = 0.0;
                        GateInfo[i][gZ] = 0.0;
                        GateInfo[i][gA] = 0.0;
                        GateInfo[i][gStatus] = GATE_STATE_CLOSED;
            }
        }
    }
   
        return 1;
}
 
public OnObjectMoved( objectid )
{
        for( new i = 0; i != MAX_GATES; i++ )
        {
            if( GateInfo[i][gCreated] == 1 )
            {
                if( GateInfo[i][gObject] == objectid )
                {
                    if( GateInfo[i][gStatus] == GATE_STATE_CLOSED )
                        GateInfo[i][gStatus] = GATE_STATE_OPEN;
                                else if( GateInfo[i][gStatus] == GATE_STATE_OPEN )
                                    GateInfo[i][gStatus] = GATE_STATE_CLOSED;
 
                                // Update the variables.
                                new Float:oPos[3];
                                GetObjectPos( objectid, oPos[0], oPos[1], oPos[2] );
                                GateInfo[i][gX] = oPos[0];
                        GateInfo[i][gY] = oPos[1];
                        GateInfo[i][gZ] = oPos[2];
                                break;
            }
        }
    }
   
    return 1;
}
 
stock CreateGate( playerid, password, Float:x, Float:y, Float:z, Float:a )
{
        for( new i = 0; i != MAX_GATES; i++ )
        {
            if( GateInfo[i][gCreated] == 0 )
            {
                        new szName[24];
                        GetPlayerName( playerid, szName, 24 );
                       
                        GateInfo[i][gObject] = CreateObject( GATE_OBJECT, x, y, z+1.5, 0, 0, a );
                        format( GateInfo[i][gPlacedBy], 24, "%s", szName );
                GateInfo[i][gCreated] = 1;
                GateInfo[i][gX] = x;
                GateInfo[i][gY] = y;
                GateInfo[i][gZ] = z+1.5; // comment the +1.5 if you're not using object 980.
                GateInfo[i][gA] = a;
                        GateInfo[i][gStatus] = GATE_STATE_CLOSED;
                        GateInfo[i][gPassword] = password;
                        SetPlayerPos( playerid, x+1, y+1, z );
                       
                        new file[64];
                        format( file, 64, "Gates/gate_%d.ini", i );
                        if( !fexist( file ) )
                        {
                            dini_Create( file );
                                dini_IntSet( file, "Object", GateInfo[i][gObject] );
                                dini_FloatSet( file, "X", GateInfo[i][gX] );
                                dini_FloatSet( file, "Y", GateInfo[i][gY] );
                                dini_FloatSet( file, "Z", GateInfo[i][gZ] );
                                dini_FloatSet( file, "A", GateInfo[i][gA] );
                                dini_IntSet( file, "Status", GateInfo[i][gStatus] );
                                dini_Set( file, "Password", GateInfo[i][gPassword] );
                                dini_Set( file, "PlacedBy", GateInfo[i][gPlacedBy] );
                        }
                        break;
        }
    }
}
Reply


Messages In This Thread
Criador de portгo com senha ingame - by rodrigo147 - 18.01.2016, 18:04
Re: Criador de portгo com senha ingame - by Coringa_Vilao - 18.01.2016, 18:12
Re: Criador de portгo com senha ingame - by rodrigo147 - 18.01.2016, 18:40

Forum Jump:


Users browsing this thread: 1 Guest(s)