#include <a_samp>
#define ZONE 5
new Float: Zones [ ZONE ] [ 4 ] = {
{ 0.0, 0.0, 0.0, 0.0 }, // Zóna 1 koordinátái
{ 0.0, 0.0, 0.0, 0.0 }, // stb
{ 0.0, 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0, 0.0 }
};
new Float: Tele [ ZONE ] [ 3 ] = {
{ 0.0, 0.0, 0.0 }, // Ha a játékos Zóna1 ben van és parancsot használ ide teleportálja
{ 0.0, 0.0, 0.0 }, // stb
{ 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0 },
{ 0.0, 0.0, 0.0 }
};
// Nem jó koordináták
new Int [ ZONE ] = { 0, 0, 0, 0, 0 }; // A hely interiorja ahova a játékos teleportáljon
// Az 1. szám a 1. zónáé, a 2. szám a 2.-é így tovább
public OnPlayerCommandText ( playerid, cmdtext [ ] )
{
if ( strcmp ( \"/area\", cmdtext, true, 5 ) == 0 ) TeleportSystem ( playerid );
if ( strcmp ( \"/ch\", cmdtext, true, 3 ) == 0 ) TeleportSystem ( playerid );
if ( strcmp ( \"/dm\", cmdtext, true, 3 ) == 0 ) TeleportSystem ( playerid );
return 0;
}
forward TeleportSystem ( playerid );
public TeleportSystem ( playerid )
{
new zone;
GetPlayerZone ( playerid, zone );
for ( new i = 0; i < ZONE; i++ )
{
if ( zone == i )
{
SetPlayerPos ( playerid, Tele [ i ] [ 0 ], Tele [ i ] [ 1 ], Tele [ i ] [ 2 ] );
SetPlayerInterior ( playerid, Int [ i ] );
break;
}
}
return 1;
}
forward GetPlayerZone ( playerid, &zoneid );
public GetPlayerZone ( playerid, &zoneid )
{
for ( new i = 0; i < ZONE; i++ )
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos ( playerid, X, Y, Z );
if ( X >= Zones [ i ] [ 0 ] && X <= Zones [ i ] [ 2 ] && Y >= Zones [ i ] [ 1 ] && Y <= Zones [ i ] [ 3 ] )
{
zoneid = i;
break;
}
}
return 1;
}
/*
Ha a játékos x zónában van x zónába teleportálja egy megadott parancs használata során
*/
Nem teszteltem.
A zónák koordinátájának számolásához ajánlom a területszámítás programomat, ami bár törölve lett a fórumról.
http://www.rks-samp.tarhelyem.net/index.php?topic=38.0