Код:
//-----------------------------------------------------------------------------------|
// [svGroups] |
// |
// |
// - You may not remove these credits |
// - You may not claim this script as yours |
// |
// |
// |
// [VERSION 1.3] Created by SuperViper |
//-----------------------------------------------------------------------------------|
#include <a_samp>
// ==================================== SETTINGS ================================== ///
// //|
/* Comment if you would like to use regular 'for' loops instead of foreach */ //|
#define USE_FOREACH //|
// //|
/* Comment if you would like to use regular 'ALS' hooks instead of y_hooks */ //|
#define USE_YHOOKS //|
// //|
/* Maximum amount of groups you need. The lower the amount, the less memory used */ //|
#define GROUP_AMOUNT 15 //|
// //|
// ================================================================================ ///
#if defined USE_FOREACH
#tryinclude <foreach>
#endif
#if defined USE_YHOOKS
#tryinclude <YSI\y_hooks>
#endif
#define SVCS_svGroups
forward svGroups_OnPlayerInBlockedCar(playerid, vehicleid, ispassenger, playergroupid);
enum e_svGroups_Data
{
svMembers,
Float: svSpawn[4],
svSpawnInterior,
svSpawnWorld,
bool: svUsingSkin,
svSkin,
Float: svHealth,
Float: svArmor,
svWeapons[5],
svWeaponAmmo[5],
svColor,
}
new svGroups_Data[GROUP_AMOUNT][e_svGroups_Data], svGroups_PlayerGroup[MAX_PLAYERS], bool: svGroups_Debugging;
new svGroups_VehicleGroup[MAX_VEHICLES][40];
#if defined USE_YHOOKS
hook OnPlayerConnect(playerid)
{
svGroups_PlayerGroup[playerid] = 0;
return 1;
}
hook OnPlayerDisconnect(playerid)
{
if(svGroups_PlayerGroup[playerid] > 0)
{
svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svMembers]--;
}
return 1;
}
hook OnPlayerSpawn(playerid)
{
if(svGroups_PlayerGroup[playerid] > 0)
{
if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][0] > 0.0 || svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][1] > 0.0 || svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][2] > 0.0 || svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][3] > 0.0)
{
SetPlayerVirtualWorld(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawnWorld]);
SetPlayerInterior(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawnInterior]);
SetPlayerPos(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][0], svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][1], svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][2]);
SetPlayerFacingAngle(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][3]);
}
if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svUsingSkin] == true)
{
SetPlayerSkin(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSkin]);
}
if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svHealth] > 0.0)
{
SetPlayerHealth(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svHealth]);
}
if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svArmor] > 0.0)
{
SetPlayerArmour(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svArmor]);
}
for(new i = 0; i < 5; i++)
{
if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeapons][i] > 0 && svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeaponAmmo][i] > 0)
{
GivePlayerWeapon(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeapons][i], svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeaponAmmo][i]);
}
}
}
return 1;
}
#else
forward svGroups_OnPlayerConnect();
public OnPlayerConnect(playerid)
{
svGroups_PlayerGroup[playerid] = 0;
return CallRemoteFunction("svGroups_OnPlayerConnect", "d", playerid);
}
#if defined _ALS_OnPlayerConnect
#undef OnPlayerConnect
#else
#define _ALS_OnPlayerConnect
#endif
#define OnPlayerConnect svGroups_OnPlayerConnect
forward svGroups_OnPlayerDisconnect();
public OnPlayerDisconnect(playerid)
{
if(svGroups_PlayerGroup[playerid] > 0)
{
svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svMembers]--;
}
return CallRemoteFunction("svGroups_OnPlayerDisconnect", "d", playerid);
}
#if defined _ALS_OnPlayerDisconnect
#undef OnPlayerDisconnect
#else
#define _ALS_OnPlayerDisconnect
#endif
#define OnPlayerDisconnect svGroups_OnPlayerDisconnect
forward svGroups_OnPlayerSpawn(playerid);
public OnPlayerSpawn(playerid)
{
if(svGroups_PlayerGroup[playerid] > 0)
{
if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][0] > 0.0 || svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][1] > 0.0 || svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][2] > 0.0 || svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][3] > 0.0)
{
SetPlayerVirtualWorld(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawnWorld]);
SetPlayerInterior(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawnInterior]);
SetPlayerPos(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][0], svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][1], svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][2]);
SetPlayerFacingAngle(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSpawn][3]);
}
if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svUsingSkin] == true)
{
SetPlayerSkin(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svSkin]);
}
if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svHealth] > 0.0)
{
SetPlayerHealth(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svHealth]);
}
if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svArmor] > 0.0)
{
SetPlayerArmour(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svArmor]);
}
for(new i = 0; i < 5; i++)
{
if(svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeapons][i] > 0 && svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeaponAmmo][i] > 0)
{
GivePlayerWeapon(playerid, svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeapons][i], svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svWeaponAmmo][i]);
}
}
}
return CallRemoteFunction("svGroups_OnPlayerSpawn", "d", playerid);
}
#if defined _ALS_OnPlayerSpawn
#undef OnPlayerSpawn
#else
#define _ALS_OnPlayerSpawn
#endif
#define OnPlayerSpawn svGroups_OnPlayerSpawn
forward svGroups_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(svGroups_VehicleGroup[vehicleid][0] != 'n')
{
new tempString[8];
format(tempString, sizeof(tempString), "[%d]", svGroups_PlayerGroup[playerid]);
if(strfind(VehicleGroup[vehicleid], tempString) == -1)
{
CallRemoteFunction("svGroups_OnPlayerInBlockedCar", "dddd", playerid, vehicleid, ispassenger, svGroups_PlayerGroup[playerid]);
ClearAnimations(playerid);
return 1;
}
}
return CallRemoteFunction("svGroups_OnPlayerEnterVehicle", "ddd", playerid, vehicleid, ispassenger);
}
#if defined _ALS_OnPlayerEnterVehicle
#undef OnPlayerEnterVehicle
#else
#define _ALS_OnPlayerEnterVehicle
#endif
#define OnPlayerEnterVehicle svGroups_OnPlayerEnterVehicle
#endif
stock svGroup_Debug(bool: togDebug)
{
if(togDebug == false)
{
print("(svGroups) Debugging has been turned off");
}
else if(togDebug == true)
{
print("(svGroups) Debugging has been turned on");
}
return svGroups_Debugging = togDebug;
}
stock svGroup_SetPlayer(playerid, groupid)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) SetPlayer(playerid = %d, groupid = %d)", playerid, groupid);
}
if(svGroups_PlayerGroup[playerid] > 0)
{
svGroups_Data[svGroups_PlayerGroup[playerid] - 1][svMembers]--;
}
if(groupid > 0)
{
svGroups_Data[groupid - 1][svMembers]++;
}
return svGroups_PlayerGroup[playerid] = groupid;
}
stock svGroup_GetPlayer(playerid)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) GetPlayer(playerid = %d)", playerid);
}
return svGroups_PlayerGroup[playerid];
}
stock svGroup_CountMembers(groupid)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) CountMembers(groupid = %d)", groupid);
}
return svGroups_Data[groupid - 1][svMembers];
}
stock svGroup_SetHealth(groupid, Float: Health)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) SetHealth(groupid = %d, Health = %f)", groupid, Health);
}
new playersInGroup;
#if defined USE_FOREACH
foreach(new i: Player)
{
if(svGroups_PlayerGroup[i] == groupid)
{
SetPlayerHealth(i, Health);
playersInGroup = 1;
}
}
#else
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(svGroups_PlayerGroup[i] == groupid)
{
SetPlayerHealth(i, Health);
playersInGroup = 1;
}
}
}
#endif
return playersInGroup;
}
stock svGroup_SetArmor(groupid, Float: Armor)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) SetArmor(groupid = %d, Armor = %f)", groupid, Armor);
}
new playersInGroup;
#if defined USE_FOREACH
foreach(new i: Player)
{
if(svGroups_PlayerGroup[i] == groupid)
{
SetPlayerArmour(i, Armor);
playersInGroup = 1;
}
}
#else
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(svGroups_PlayerGroup[i] == groupid)
{
SetPlayerArmour(i, Armor);
playersInGroup = 1;
}
}
}
#endif
return playersInGroup;
}
stock svGroup_SetSpawn(groupid, Float: sX, Float: sY, Float: sZ, sInterior = 0, sVirtualWorld = 0, Float: sA)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) SetSpawn(groupid = %d, sX = %f, sY = %f, sZ = %f, sInterior = %d, sVirtualWorld = %d, sA = %f)", groupid, sX, sY, sZ, sInterior, sVirtualWorld, sA);
}
return svGroups_Data[groupid - 1][svSpawn][0] = sX, svGroups_Data[groupid - 1][svSpawn][1] = sY, svGroups_Data[groupid - 1][svSpawn][2] = sZ, svGroups_Data[groupid - 1][svSpawnInterior] = sInterior, svGroups_Data[groupid - 1][svSpawnWorld] = sVirtualWorld, svGroups_Data[groupid - 1][svSpawn][3] = sA;
}
stock svGroup_SetSpawnInfo(groupid, skin, Float: sHealth = 0.0, Float: sArmor = 0.0, weapon1 = 0, weapon1ammo = 0, weapon2 = 0, weapon3ammo = 0, weapon4 = 0, weapon4ammo = 0, weapon5 = 0, weapon5ammo = 0, color = -1)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) SetSpawnInfo(groupid = %d, skin = %d, sHealth = %f, sArmor = %f, weapon1 = %d, weapon1ammo = %d, weapon2 = %d, weapon2ammo = %d, weapon3 = %d, weapon3ammo = %d, weapon4 = %d, weapon4ammo = %d, weapon5 = %d, weapon5ammo = %d, color = %d)", groupid, skin, sHealth, sArmor, weapon1, weapon1ammo, weapon2, weapon2ammo, weapon3, weapon3ammo, weapon4, weapon4ammo, weapon5, weapon5ammo, color);
}
return svGroups_Data[groupid - 1][svSkin] = skin, svGroups_Data[groupid - 1][svUsingSkin] = true, svGroups_Data[groupid - 1][svHealth] = sHealth, svGroups_Data[groupid - 1][svArmor] = sArmor, svGroups_Data[groupid - 1][svWeapons][0] = weapon1, svGroups_Data[groupid - 1][svWeaponAmmo][0] = weapon1ammo, svGroups_Data[groupid - 1][svWeapons][1] = weapon2, svGroups_Data[groupid - 1][svWeaponAmmo][1] = weapon2ammo, svGroups_Data[groupid - 1][svWeapons][2] = weapon3, svGroups_Data[groupid - 1][svWeaponAmmo][2] = weapon3ammo, svGroups_Data[groupid - 1][svWeapons][3] = weapon4, svGroups_Data[groupid - 1][svWeaponAmmo][3] = weapon4ammo, svGroups_Data[groupid - 1][svWeapons][4] = weapon5, svGroups_Data[groupid - 1][svWeaponAmmo][4] = weapon5ammo, svGroups_Data[groupid - 1][svColor] = color;
}
stock svGroup_ToggleControllable(groupid, bool: controllable)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) ToggleControllable(groupid = %d, controllable = %d)", groupid, controllable);
}
new playersInGroup;
#if defined USE_FOREACH
foreach(new i: Player)
{
if(svGroups_PlayerGroup[i] == groupid)
{
TogglePlayerControllable(i, controllable);
playersInGroup = 1;
}
}
#else
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(svGroups_PlayerGroup[i] == groupid)
{
TogglePlayerControllable(i, controllable);
playersInGroup = 1;
}
}
}
#endif
return playersInGroup;
}
stock svGroup_GiveMoney(groupid, money)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) GiveMoney(groupid = %d, money = %d)", groupid, money);
}
new playersInGroup;
#if defined USE_FOREACH
foreach(new i: Player)
{
if(svGroups_PlayerGroup[i] == groupid)
{
GivePlayerMoney(i, money);
playersInGroup = 1;
}
}
#else
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(svGroups_PlayerGroup[i] == groupid)
{
GivePlayerMoney(i, money);
playersInGroup = 1;
}
}
}
#endif
return playersInGroup;
}
stock svGroup_SetVehicleGroup(vehicleid, groupid)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) SetVehicleGroup(vehicleid = %d, groupid = %d)", vehicleid, groupid);
}
return (groupid > 0) ? format(svGroups_VehicleGroup[vehicleid], 40, "[%d]", groupid) : svGroups_VehicleGroup[vehicleid] = "n";
}
stock svGroup_AddVehicleToGroup(vehicleid, groupid)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) AddVehicleToGroup(vehicleid = %d, groupid = %d)", vehicleid, groupid);
}
return format(svGroups_VehicleGroup[vehicleid], 50, "%s[%d]", svGroups_VehicleGroup[vehicleid], groupid);
}
stock svGroup_RemoveVehicleFromGroup(vehicleid, groupid)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) RemoveVehicleFromGroup(vehicleid = %d, groupid = %d)", vehicleid, groupid);
}
new tempString[8], strFound;
format(tempString, sizeof(tempString), "[%d]", groupid);
strFound = strfind(svGroups_VehicleGroup[vehicleid], tempString);
return (strFound > -1) ? strdel(svGroups_VehicleGroup[vehicleid], strFound, strFound + strlen(tempString)) : -1;
}
stock svGroup_IsVehicleInGroup(vehicleid, groupid)
{
if(svGroups_Debugging == true)
{
printf("(svGroups) IsVehicleInGroup(vehicleid = %d, groupid = %d)", vehicleid, groupid);
}
new tempString[8];
format(tempString, sizeof(tempString), "[%d]", groupid);
return (strfind(svGroups_VehicleGroup[vehicleid], tempString) > -1) ? 1 : 0;
}
#if defined SVCS_svAddons
public OnVehicleCreate(vehicleid)
{
svGroups_VehicleGroup[vehicleid] = "n";
return 1;
}
#else
stock svGroups_CreateVehicle(vehicletype, Float: x, Float: y, Float: z, Float: rotation, color1, color2, respawn_delay)
{
new vehicleid = CreateVehicle(vehicletype, x, y, z, rotation, color1, color2, respawn_delay);
svGroups_VehicleGroup[vehicleid] = "n";
return vehicleid;
}
#if defined _ALS_CreateVehicle
#undef CreateVehicle
#else
#define _ALS_CreateVehicle
#endif
#define CreateVehicle svGroups_CreateVehicle
stock svGroups_AddStaticVehicle(modelid, Float: spawn_x, Float: spawn_y, Float: spawn_z, Float: z_angle, color1, color2)
{
new vehicleid = AddStaticVehicle(modelid, spawn_x, spawn_y, spawn_z, z_angle, color1, color2);
svGroups_VehicleGroup[vehicleid] = "n";
return vehicleid;
}
#if defined _ALS_AddStaticVehicle
#undef AddStaticVehicle
#else
#define _ALS_AddStaticVehicle
#endif
#define AddStaticVehicle svGroups_AddStaticVehicle
stock svGroups_AddStaticVehicleEx(modelid, Float: spawn_x, Float: spawn_y, Float: spawn_z, Float: z_angle, color1, color2, respawn_delay)
{
new vehicleid = AddStaticVehicleEx(modelid, spawn_x, spawn_y, spawn_z, z_angle, color1, color2, respawn_delay);
svGroups_VehicleGroup[vehicleid] = "n";
return vehicleid;
}
#if defined _ALS_AddStaticVehicleEx
#undef AddStaticVehicleEx
#else
#define _ALS_AddStaticVehicleEx
#endif
#define AddStaticVehicleEx svGroups_AddStaticVehicleEx
#endif