01.12.2012, 22:37
(
Последний раз редактировалось AchievementMaster360; 02.12.2012 в 13:12.
)
Im trying to make this command for Ravens Roleplay Admin System Only But Im Not Sure How. This is made by Marricio
Код:
#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, "DynamicGates/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, "PlacedBy", GateInfo[i][gPlacedBy] ); } break; } } }