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

Olб pessoal do fуrum sa-mp eu andei procurando algum sistema de criar portгo ingame automatico na бrea inglesa mas os q eu testei ta bugado ou tem muitas includes que nгo consigo usar, se alguйm puder me ajudar com esse sistema de criar portгo ingame com password iria me ajudar muito, pode ser o algo mais simples que puder, obrigado galera
Reply
#2

Vocк pode usar DIALOG_STYLE_PASSWORD: https://sampforum.blast.hk/showthread.php?tid=571736
Criador de Portхes: https://sampforum.blast.hk/showthread.php?tid=386752
Reply
#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


Forum Jump:


Users browsing this thread: 1 Guest(s)