Переходник FILIP GAMES
رفتن به کانال در Telegram
426
مشترکین
-224 ساعت
-37 روز
-3130 روز
آرشیو پست ها
заместителем!", targetname);
SendClientMessage(playerid, COLOR_GREEN, msg);
format(msg, sizeof(msg), "Вы назначены заместителем в семье %s!", GangData[PlayerGang[playerid][pGangID]][gName]);
SendClientMessage(targetid, COLOR_GREEN, msg);
return 1;
}
if(strcmp(cmdtext, "/gangkick", true, 9) == 0)
{
new targetname[MAX_PLAYER_NAME];
if(sscanf(cmdtext[9], "s[24]", targetname))
{
SendClientMessage(playerid, COLOR_WHITE, "Использование: /gangkick [Имя игрока]");
return 1;
}
if(!PlayerGang[playerid][pInGang])
{
SendClientMessage(playerid, COLOR_RED, "Вы не в семье!");
return 1;
}
if(strcmp(PlayerGang[playerid][pRole], "Leader") != 0 && strcmp(PlayerGang[playerid][pRole], "Vice") != 0)
{
SendClientMessage(playerid, COLOR_RED, "Нет прав!");
return 1;
}
new targetid = GetPlayerIDByName(targetname);
if(targetid == INVALID_PLAYER_ID)
{
SendClientMessage(playerid, COLOR_RED, "Игрок не найден!");
return 1;
}
if(!PlayerGang[targetid][pInGang] || PlayerGang[targetid][pGangID] != PlayerGang[playerid][pGangID])
{
SendClientMessage(playerid, COLOR_RED, "Этот игрок не в вашей семье!");
return 1;
}
if(strcmp(PlayerGang[targetid][pRole], "Leader") == 0)
{
SendClientMessage(playerid, COLOR_RED, "Нельзя кикнуть лидера!");
return 1;
}
new query[256];
format(query, sizeof(query), "DELETE FROM gang_members WHERE player_name = '%s' AND gang_id = %d",
targetname, PlayerGang[playerid][pGangID]);
mysql_query(g_SQL, query);
PlayerGang[targetid][pInGang] = false;
PlayerGang[targetid][pGangID] = -1;
PlayerGang[targetid][pRole] = "None";
GangData[PlayerGang[playerid][pGangID]][gMemberCount]--;
new msg[128];
format(msg, sizeof(msg), "%s исключен из семьи!", targetname);
SendClientMessage(playerid, COLOR_RED, msg);
format(msg, sizeof(msg), "Вас исключили из семьи %s!", GangData[PlayerGang[playerid][pGangID]][gName]);
SendClientMessage(targetid, COLOR_RED, msg);
return 1;
}
return 0;
}
forward ProcessCapture(zoneid);
public ProcessCapture(zoneid)
{
if(zoneid < 0 || zoneid >= ZoneCount) return 1;
if(!ZoneData[zoneid][zCapturing]) return 1;
new gangID = ZoneData[zoneid][zCaptureGang];
new attackers = 0;
new defenders = 0;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
new Float:x, Float:y, Float:z;
GetPlayerPos(i, x, y, z);
new Float:dist = GetDistanceBetweenPoints(x, y, z, ZoneData[zoneid][zX], ZoneData[zoneid][zY], ZoneData[zoneid][zZ]);
if(dist <= ZoneData[zoneid][zRadius])
{
if(PlayerGang[i][pInGang] && PlayerGang[i][pGangID] == gangID)
{
attackers++;
}
else if(PlayerGang[i][pInGang] && PlayerGang[i][pGangID] == ZoneData[zoneid][zOwner])
{
defenders++;
}
}
}
if(attackers == 0)
{
ZoneData[zoneid][zCaptureProgress] = 0;
SendClientMessageToAll(COLOR_RED, "[WAR] Захват прерван - нет атакующих в зоне!");
StopCapture(zoneid);
return 1;
}
if(defenders > 0)
{
ZoneData[zoneid][zCaptureProgress] = max(0, ZoneData[zoneid][zCaptureProgress] - (defenders * 2));
new msg[128];
format(msg, sizeof(msg), "[WAR] Защитники мешают захвату! Прогресс: %d%%", ZoneData[zoneid][zCaptureProgress] / 3);
SendClientMessageToAll(COLOR_RED, msg);
}
else
{
ZoneData[zoneid][zCaptureProgress] += (attackers * 3);
}
new
if(ZoneData[zoneid][zCapturing])
{
SendClientMessage(playerid, COLOR_RED, "Эта зона уже захватывается!");
return 1;
}
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
new Float:dist = GetDistanceBetweenPoints(x, y, z, ZoneData[zoneid][zX], ZoneData[zoneid][zY], ZoneData[zoneid][zZ]);
if(dist > ZoneData[zoneid][zRadius])
{
SendClientMessage(playerid, COLOR_RED, "Вы должны находиться внутри зоны для захвата!");
return 1;
}
ZoneData[zoneid][zCapturing] = true;
ZoneData[zoneid][zCaptureProgress] = 0;
ZoneData[zoneid][zCaptureGang] = PlayerGang[playerid][pGangID];
new msg[128];
format(msg, sizeof(msg), "[WAR] %s начал захват зоны %s!", GetPlayerNameEx(playerid), ZoneData[zoneid][zName]);
SendClientMessageToAll(COLOR_YELLOW, msg);
ZoneData[zoneid][zCaptureTimer] = SetTimerEx("ProcessCapture", 1000, 1, "i", zoneid);
return 1;
}
if(strcmp(cmdtext, "/gangs", true, 6) == 0)
{
SendClientMessage(playerid, COLOR_WHITE, "=== Список семей ===");
for(new i = 0; i < GangCount; i++)
{
if(GangData[i][gLoaded])
{
new msg[128];
format(msg, sizeof(msg), "%s [%s] | Участников: %d | Баланс: $%d",
GangData[i][gName], GangData[i][gTag], GangData[i][gMemberCount], GangData[i][gMoney]);
SendClientMessage(playerid, COLOR_WHITE, msg);
}
}
return 1;
}
if(strcmp(cmdtext, "/ganginfo", true, 9) == 0)
{
if(!PlayerGang[playerid][pInGang])
{
SendClientMessage(playerid, COLOR_RED, "Вы не в семье!");
return 1;
}
new gangID = PlayerGang[playerid][pGangID];
new msg[256];
format(msg, sizeof(msg), "=== %s [%s] ===", GangData[gangID][gName], GangData[gangID][gTag]);
SendClientMessage(playerid, COLOR_BLUE, msg);
format(msg, sizeof(msg), "Лидер: %s | Уровень: %d | Денег: $%d",
GangData[gangID][gLeader], GangData[gangID][gLevel], GangData[gangID][gMoney]);
SendClientMessage(playerid, COLOR_WHITE, msg);
format(msg, sizeof(msg), "Территория: %s | Участников: %d",
GangData[gangID][gTurf], GangData[gangID][gMemberCount]);
SendClientMessage(playerid, COLOR_WHITE, msg);
return 1;
}
if(strcmp(cmdtext, "/setvice", true, 8) == 0)
{
new targetname[MAX_PLAYER_NAME];
if(sscanf(cmdtext[8], "s[24]", targetname))
{
SendClientMessage(playerid, COLOR_WHITE, "Использование: /setvice [Имя игрока]");
return 1;
}
if(!PlayerGang[playerid][pInGang])
{
SendClientMessage(playerid, COLOR_RED, "Вы не в семье!");
return 1;
}
if(strcmp(PlayerGang[playerid][pRole], "Leader") != 0)
{
SendClientMessage(playerid, COLOR_RED, "Только лидер может назначать заместителя!");
return 1;
}
new targetid = GetPlayerIDByName(targetname);
if(targetid == INVALID_PLAYER_ID)
{
SendClientMessage(playerid, COLOR_RED, "Игрок не найден!");
return 1;
}
if(!PlayerGang[targetid][pInGang] || PlayerGang[targetid][pGangID] != PlayerGang[playerid][pGangID])
{
SendClientMessage(playerid, COLOR_RED, "Этот игрок не в вашей семье!");
return 1;
}
PlayerGang[targetid][pRole] = "Vice";
new query[256];
format(query, sizeof(query), "UPDATE gang_members SET role = 'Vice' WHERE player_name = '%s' AND gang_id = %d",
targetname, PlayerGang[playerid][pGangID]);
mysql_query(g_SQL, query);
new msg[128];
format(msg, sizeof(msg), "%s назначен
GetPlayerIDByName(targetname);
if(targetid == INVALID_PLAYER_ID)
{
SendClientMessage(playerid, COLOR_RED, "Игрок не найден!");
return 1;
}
if(targetid == playerid)
{
SendClientMessage(playerid, COLOR_RED, "Нельзя пригласить себя!");
return 1;
}
if(!PlayerGang[playerid][pInGang])
{
SendClientMessage(playerid, COLOR_RED, "Вы не в семье!");
return 1;
}
if(strcmp(PlayerGang[playerid][pRole], "Leader") != 0 && strcmp(PlayerGang[playerid][pRole], "Vice") != 0)
{
SendClientMessage(playerid, COLOR_RED, "Нет прав! Нужен Лидер или Зам.");
return 1;
}
if(PlayerGang[targetid][pInGang])
{
SendClientMessage(playerid, COLOR_RED, "Этот игрок уже в семье!");
return 1;
}
g_InvitePending[targetid] = 1;
g_InviteFrom[targetid] = playerid;
g_InviteGang[targetid] = PlayerGang[playerid][pGangID];
new msg[128];
format(msg, sizeof(msg), "[Приглашение] %s пригласил вас в семью! Используйте /accept", GetPlayerNameEx(playerid));
SendClientMessage(targetid, COLOR_YELLOW, msg);
format(msg, sizeof(msg), "Приглашение отправлено игроку %s", targetname);
SendClientMessage(playerid, COLOR_GREEN, msg);
return 1;
}
if(strcmp(cmdtext, "/accept", true, 7) == 0)
{
if(!g_InvitePending[playerid])
{
SendClientMessage(playerid, COLOR_RED, "У вас нет приглашений!");
return 1;
}
new gangID = g_InviteGang[playerid];
if(gangID == -1 || !GangData[gangID][gLoaded])
{
SendClientMessage(playerid, COLOR_RED, "Семья была расформирована!");
g_InvitePending[playerid] = 0;
return 1;
}
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, sizeof(pName));
new query[256];
format(query, sizeof(query), "INSERT INTO gang_members (gang_id, player_name, role) VALUES (%d, '%s', 'Member')", gangID, pName);
mysql_query(g_SQL, query);
PlayerGang[playerid][pInGang] = true;
PlayerGang[playerid][pGangID] = gangID;
PlayerGang[playerid][pRole] = "Member";
GangData[gangID][gMemberCount]++;
new msg[128];
format(msg, sizeof(msg), "Вы вступили в семью %s!", GangData[gangID][gName]);
SendClientMessage(playerid, COLOR_GREEN, msg);
format(msg, sizeof(msg), "%s вступил в вашу семью!", pName);
SendClientMessage(g_InviteFrom[playerid], COLOR_GREEN, msg);
g_InvitePending[playerid] = 0;
return 1;
}
if(strcmp(cmdtext, "/capture", true, 8) == 0)
{
new zonename[32];
if(sscanf(cmdtext[8], "s[32]", zonename))
{
SendClientMessage(playerid, COLOR_WHITE, "Использование: /capture [Название зоны]");
SendClientMessage(playerid, COLOR_WHITE, "Доступные зоны: Grove Street, Ballas Hood, Pier 69 и др.");
return 1;
}
if(!PlayerGang[playerid][pInGang])
{
SendClientMessage(playerid, COLOR_RED, "Вы не в семье!");
return 1;
}
if(strcmp(PlayerGang[playerid][pRole], "Leader") != 0 && strcmp(PlayerGang[playerid][pRole], "Vice") != 0)
{
SendClientMessage(playerid, COLOR_RED, "Нет прав! Нужен Лидер или Зам.");
return 1;
}
new zoneid = GetZoneIDByName(zonename);
if(zoneid == -1)
{
SendClientMessage(playerid, COLOR_RED, "Зона не найдена!");
return 1;
}
if(ZoneData[zoneid][zOwner] == PlayerGang[playerid][pGangID])
{
SendClientMessage(playerid, COLOR_RED, "Это уже ваша территория!");
return 1;
}
OnPlayerDeath(playerid, killerid, reason)
{
if(killerid != INVALID_PLAYER_ID && PlayerGang[playerid][pInGang] && PlayerGang[killerid][pInGang])
{
if(PlayerGang[playerid][pGangID] != PlayerGang[killerid][pGangID])
{
new gangID = PlayerGang[killerid][pGangID];
GangData[gangID][gMoney] += 500;
new msg[128];
format(msg, sizeof(msg), "~g~+$500~w~ за убийство врага!");
GameTextForPlayer(killerid, msg, 3000, 3);
UpdateGangMoney(gangID);
}
}
return 1;
}
public OnPlayerEnterDynamicCP(playerid, checkpointid)
{
for(new i = 0; i < ZoneCount; i++)
{
if(ZoneData[i][zOwner] != -1 && PlayerGang[playerid][pInGang])
{
if(ZoneData[i][zOwner] == PlayerGang[playerid][pGangID])
{
new msg[128];
format(msg, sizeof(msg), "~g~%s~n~~w~Территория вашей семьи", ZoneData[i][zName]);
GameTextForPlayer(playerid, msg, 3000, 3);
}
else
{
new msg[128];
format(msg, sizeof(msg), "~r~%s~n~~w~Территория врага!", ZoneData[i][zName]);
GameTextForPlayer(playerid, msg, 3000, 3);
}
}
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/createfam", true, 10) == 0)
{
new name[32], tag[16];
if(sscanf(cmdtext[10], "s[32]s[16]", name, tag))
{
SendClientMessage(playerid, COLOR_WHITE, "Использование: /createfam [Название] [Тэг]");
return 1;
}
if(PlayerGang[playerid][pInGang])
{
SendClientMessage(playerid, COLOR_RED, "Вы уже в семье!");
return 1;
}
if(strlen(name) < 3 || strlen(tag) < 2)
{
SendClientMessage(playerid, COLOR_RED, "Название или тэг слишком короткие!");
return 1;
}
new query[256];
format(query, sizeof(query), "SELECT id FROM gangs WHERE name = '%s' OR tag = '%s'", name, tag);
mysql_query(g_SQL, query);
new rows = mysql_num_rows(g_SQL);
mysql_free_result(g_SQL);
if(rows > 0)
{
SendClientMessage(playerid, COLOR_RED, "Такое название или тэг уже заняты!");
return 1;
}
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, sizeof(pName));
format(query, sizeof(query), "INSERT INTO gangs (name, tag, leader) VALUES ('%s', '%s', '%s')", name, tag, pName);
mysql_query(g_SQL, query);
new gangID = mysql_insert_id(g_SQL);
GangData[gangID][gID] = gangID;
format(GangData[gangID][gName], 32, "%s", name);
format(GangData[gangID][gTag], 16, "%s", tag);
format(GangData[gangID][gLeader], MAX_PLAYER_NAME, "%s", pName);
GangData[gangID][gLevel] = 1;
GangData[gangID][gMoney] = 0;
GangData[gangID][gTurf] = "None";
GangData[gangID][gMemberCount] = 1;
GangData[gangID][gLoaded] = true;
PlayerGang[playerid][pInGang] = true;
PlayerGang[playerid][pGangID] = gangID;
PlayerGang[playerid][pRole] = "Leader";
GangCount++;
format(query, sizeof(query), "INSERT INTO gang_members (gang_id, player_name, role) VALUES (%d, '%s', 'Leader')", gangID, pName);
mysql_query(g_SQL, query);
new msg[128];
format(msg, sizeof(msg), "[Семья] Семья '%s' успешно создана!", name);
SendClientMessage(playerid, COLOR_GREEN, msg);
return 1;
}
if(strcmp(cmdtext, "/invite", true, 7) == 0)
{
new targetname[MAX_PLAYER_NAME];
if(sscanf(cmdtext[7], "s[24]", targetname))
{
SendClientMessage(playerid, COLOR_WHITE, "Использование: /invite [Имя игрока]");
return 1;
}
new targetid =
‘‘‘sql
CREATE DATABASE IF NOT EXISTS gang_database;
USE gang_database;
CREATE TABLE IF NOT EXISTS
gangs (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(50) NOT NULL,
tag varchar(10) NOT NULL,
leader varchar(50) NOT NULL,
level int(11) DEFAULT '1',
money int(11) DEFAULT '0',
turf varchar(50) DEFAULT 'None',
PRIMARY KEY (`id`),
UNIQUE KEY name (`name`),
UNIQUE KEY tag (`tag`)
);
CREATE TABLE IF NOT EXISTS gang_members (
id int(11) NOT NULL AUTO_INCREMENT,
gang_id int(11) NOT NULL,
player_name varchar(50) NOT NULL,
role varchar(16) DEFAULT 'Member',
PRIMARY KEY (`id`),
KEY gang_id (`gang_id`)
);
CREATE TABLE IF NOT EXISTS turfs (
id int(11) NOT NULL AUTO_INCREMENT,
gang_id int(11) DEFAULT NULL,
zone_name varchar(50) NOT NULL,
captured_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY zone_name (`zone_name`)
);
’’’
(☝️выше код для базы)
ИНСТРУКЦИЯ ПО УСТАНОВКЕ ДЛЯ ЧАЙНИКА:
1) установка MYSQL
*Если у тебя нет MySQL, скачай XAMPP или MySQL Server.
*Запусти MySQL сервер.
*Открой phpMyAdmin (обычно http://localhost/phpmyadmin).Создай новую базу данных: gang_database.
*Перейди во вкладку SQL и вставь весь код выше, нажми "Выполнить".
‘‘‘pawn
#include <a_samp>
#include <a_mysql>
#include <sscanf2>
#include <foreach>
#define MAX_GANGS 50
#define MAX_ZONES 20
#define MAX_PLAYER_GANGS 500
#define COLOR_GREEN 0x00FF00AA
#define COLOR_RED 0xFF0000AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_BLUE 0x0088FFAA
enum GANG_DATA
{
gID,
gName[32],
gTag[16],
gLeader[MAX_PLAYER_NAME],
gLevel,
gMoney,
gTurf[32],
gMemberCount,
bool:gLoaded
}
enum ZONE_DATA
{
zName[32],
Float:zX,
Float:zY,
Float:zZ,
Float:zRadius,
zOwner,
bool:zCapturing,
zCaptureProgress,
zCaptureTimer,
zCaptureGang
}
enum PLAYER_GANG_DATA
{
pGangID,
pRole[16],
bool:pInGang
}
new GangData[MAX_GANGS][GANG_DATA];
new ZoneData[MAX_ZONES][ZONE_DATA];
new PlayerGang[MAX_PLAYERS][PLAYER_GANG_DATA];
new MySQL:g_SQL;
new ZoneCount = 0;
new GangCount = 0;
new Float:g_CapturePositions[MAX_ZONES][3] = {
{1406.0, -1524.0, 13.5},
{2495.0, -1680.0, 13.5},
{2300.0, -1200.0, 25.0},
{-1930.0, 850.0, 35.0},
{1223.0, -1800.0, 16.0},
{2100.0, -1400.0, 25.0},
{-1600.0, 700.0, 10.0},
{2800.0, -2000.0, 10.0}
};
new Float:g_CaptureRadius[MAX_ZONES] = {
30.0, 40.0, 35.0, 25.0, 30.0, 35.0, 40.0, 30.0
};
new g_ZoneNames[MAX_ZONES][32] = {
"Los Santos Bank",
"Grove Street",
"Ballas Hood",
"Pier 69",
"Jefferson Motel",
"Ganton Gym",
"Ocean Docks",
"Verdant Bluffs"
};
new g_InvitePending[MAX_PLAYERS];
new g_InviteFrom[MAX_PLAYERS];
new g_InviteGang[MAX_PLAYERS];
new Text3D:g_ZoneLabels[MAX_ZONES];
public OnFilterScriptInit()
{
print("Gang War System v1.0 Loaded");
print("Connecting to MySQL...");
g_SQL = mysql_connect("localhost", "root", "password", "gang_database");
if(mysql_errno(g_SQL) != 0)
{
print("MySQL connection failed!");
return 1;
}
print("MySQL connected successfully!");
LoadGangsFromDB();
LoadZonesFromDB();
CreateZoneLabels();
SetTimer("SaveAllGangs", 60000, 1);
SetTimer("UpdateZoneMarkers", 5000, 1);
return 1;
}
public OnFilterScriptExit()
{
SaveAllGangs();
mysql_close(g_SQL);
return 1;
}
public OnPlayerConnect(playerid)
{
PlayerGang[playerid][pInGang] = false;
PlayerGang[playerid][pGangID] = -1;
PlayerGang[playerid][pRole] = "None";
g_InvitePending[playerid] = 0;
g_InviteFrom[playerid] = INVALID_PLAYER_ID;
g_InviteGang[playerid] = -1;
LoadPlayerGang(playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(PlayerGang[playerid][pInGang])
{
SavePlayerGang(playerid);
}
return 1;
}
public OnPlayerSpawn(playerid)
{
SendGangInfo(playerid);
return 1;
}
publicПривет друзья, я подготовил очень масштабную систему войны семей. В течении 10 минут слив. Извините вчера занят сильно был, поэтому сегодня будет весело в плане этого.
👍 сливаю для вас отличный фон для вашего CRMP проекта
⚡️ Автор слива = @FilipStudio
Не менять авторство слива
Всем привет, так что насчёт системы, делаем первый вариант из комментариев.
Repost from N/a
Файл для скачивания тем,кто по каким то причинам не может скачать из RuStore/с сайта
Сливаю для вас приватный мод Ельдара который он продаёт за 300 рублей 💸
Что есть в моде? 🧐
Регистрация GUI
Технический Центр
Стайлинг Центр
Шиномонтажный Центр
Радиалка
Дома + квартиры
Донат
МЧС
ТК
Водолаз
Электрик
Шахта
Завод
Ка$
Кейсы
Блек пасс
Фулл Ворк Организации
Помощник для новичков
🥳 Автор слива = @FilipStudio
Скачать ниже 👇
на 30 лайков делаю слив на проект там есть обнова которая будет сегодня в блек раше этот проект как тест сервер!!!
Repost from N/a
Сайт обновлён!
Скачать версию 1.1.0 с сайта — sites.google.com/view/guessthenumber-filipgames
С RuStore — https://www.rustore.ru/catalog/app/com.guessthenumber.app
Repost from N/a
Версия 1.1.0 загружена в RuStore
Скачать — https://www.rustore.ru/catalog/app/com.guessthenumber.app
Понял, нужна битва семей, будет, а что то для самп может вам написать друзья? Что то уникальное чего нет ни у кого может быть? На вашу фантазию
