426
订阅者
-224 小时
-37 天
-3130 天
帖子存档
Repost from N/a
🔧 В разработке — Pawn Compiler от FILIP GAMES!
Друзья! Мы начали разработку полезного инструмента для всего SAMP/CRMP сообщества!
📝 Pawn Compiler — простое и удобное приложение для компиляции .pwn файлов прямо на твоём Android-устройстве!
Что уже готово:
✅ Стильный интерфейс
✅ Поле для ввода кода
✅ Вывод результата компиляции
✅ Сохранение .amx в папку на телефоне
Зачем это нужно:
🎮 Разработчикам серверов SAMP/CRMP
📱 Компиляция без компьютера
🚀 Быстро, удобно, бесплатно
Релиз уже скоро! Следите за новостями!
🔥 Сливаю для вас имбовый фон для вашего CRMP проекта 💸
Автор слива = @FilipStudio
🥳 Крупный Конкурс с мощными призами!
1. Приватка FILIP STUDIO
2. Приватка FILIP STUDIO
3. Приватка FILIP STUDIO
4. Приватка FILIP STUDIO
5. Приватка FILIP STUDIO
Итоги конкурса на 50 тапов! ☺️😋
Условия — подписаться на @FilipStudio и @origincrmp
🥳 Крупный Конкурс с мощными призами!
1. Приватка FILIP STUDIO
2. Приватка FILIP STUDIO
3. Приватка FILIP STUDIO
4. Приватка FILIP STUDIO
5. Приватка FILIP STUDIO
Итоги конкурса на 50 тапов! ☺️😋
Условия — подписаться на @FilipStudio и @origincrmp
🥳 Крупный Конкурс с мощными призами!
1. Приватка FILIP STUDIO
2. Приватка FILIP STUDIO
3. Приватка FILIP STUDIO
4. Приватка FILIP STUDIO
5. Приватка FILIP STUDIO
Итоги конкурса на 50 тапов! ☺️😋
Условия — подписаться на @FilipStudio и @origincrmp
🥳 Крупный Конкурс с мощными призами!
1. Приватка FILIP STUDIO
2. Приватка FILIP STUDIO
3. Приватка FILIP STUDIO
4. Приватка FILIP STUDIO
5. Приватка FILIP STUDIO
Итоги конкурса на 50 тапов! ☺️😋
Условия — подписаться на @FilipStudio и @origincrmp
else
{
format(label, sizeof(label), "%s\nНейтральная", ZoneData[i][zName]);
}
Update3DTextLabelText(g_ZoneLabels[i], COLOR_WHITE, label);
}
return 1;
}
forward UpdateZoneMarkers();
public UpdateZoneMarkers()
{
UpdateZoneLabels();
return 1;
}
SendGangInfo(playerid)
{
if(!PlayerGang[playerid][pInGang]) return 1;
new gangID = PlayerGang[playerid][pGangID];
if(gangID < 0 gangID >= GangCount !GangData[gangID][gLoaded]) return 1;
new msg[128];
format(msg, sizeof(msg), "~w~Семья: ~g~%s~n~~w~Роль: ~y~%s~n~~w~Денег: ~g~$%d",
GangData[gangID][gName], PlayerGang[playerid][pRole], GangData[gangID][gMoney]);
GameTextForPlayer(playerid, msg, 5000, 3);
return 1;
}
GetZoneIDByName(const zonename[])
{
for(new i = 0; i < ZoneCount; i++)
{
if(strcmp(ZoneData[i][zName], zonename, true) == 0)
{
return i;
}
}
return -1;
}
GetPlayerIDByName(const playername[])
{
new name[MAX_PLAYER_NAME];
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
GetPlayerName(i, name, sizeof(name));
if(strcmp(name, playername, true) == 0)
{
return i;
}
}
return INVALID_PLAYER_ID;
}
GetPlayerNameEx(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
return name;
}
Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
{
return floatsqroot(floatpower(x1 - x2, 2.0) + floatpower(y1 - y2, 2.0) + floatpower(z1 - z2, 2.0));
}
stock max(a, b)
{
return (a > b) ? a : b;
}
’’’
(☝️этот код выше копируем, создаём на вашем устройстве файл gangwar.pwn и туда этот код.)
ПОДКЛЮЧЕНИЕ
В файле куда вы уже вставили код найдите строку
‘‘‘pawn
g_SQL = mysql_connect("localhost", "root", "password", "gang_database");
’’’
*Замени там:
localhost — на адрес твоего MySQL сервера.
*root — на имя пользователя (обычно root).
*password — на пароль (если есть).
*gang_database — если назвал базу по-другому, измени.
УСТАНОВКА НЕОБХОДИМЫХ ИНКЛУДОВ
Скачай и установи:
*MySQL Plugin R41+ для SA-MP.
Положи mysql.dll в plugins/ папку сервера.
Добавь mysql в server.cfg в строку plugins.
*sscanf2 плагин.
Положи sscanf.dll в plugins/.
Добавь sscanf в server.cfg.
*foreach инклуд (необязательно, но рекомендую).
Положи foreach.inc в pawno/include/.
КОМПИЛЯЦИЯ
*Открой pawno.exe. (желательно на пк, если андроид то ищите туторы тут по андроиду объяснять не буду.)
*открой файл который создал ранее(открой в pawno.exe, найди клавишу открытия на пк там)
*Нажми F5 (или кнопку "Compile").
*Убедись, что нет ошибок. Если есть — проверь пути к инклудам.
*В папке filterscripts/ появится файл gangwar.amx.
ЗАПУСК НА СЕРВЕРЕ
*В server.cfg добавь в строку filterscripts слово gangwar
*запусти сервер
*В консоли сервера должно появиться:
‘‘‘txt
Gang War System v1.0 Loaded
MySQL connected successfully!
Loaded gangs:
’’’
Далее зайди на сервер и проверь следующие команды:
/createfam [Название] [Тэг] — создать семью. Пример: /createfam Bandits BND
/gangs — список всех семей.
/ganginfo — информация о твоей семье.
/invite [Имя] — пригласить игрока.
/accept — принять приглашение.
/setvice [Имя] — назначить заместителя (только лидер).
/gangkick [Имя] — исключить из семьи.
/capture [Название зоны] — захватить территорию. Пример: /capture Grove Street
Поэтому система и масштабная тут можно создать что то типо банды, для профессионалов в сфере кодинга скажу, можете доделать сами, эта система больше для самп 0.3.7 движка, улицы все для захвата взяты именно оттуда с базовой карты гта са,
Вот зоны захвата:
Los Santos Bank 1406.0, -1524.0, 13.5
Grove Street 2495.0, -1680.0, 13.5
Ballas Hood 2300.0, -1200.0, 25.0
Pier 69 -1930.0, 850.0, 35.0
Jefferson Motel 1223.0, -1800.0, 16.0
Ganton Gym 2100.0, -1400.0, 25.0
Ocean Docks -1600.0, 700.0, 10.0
Verdant Bluffs 2800.0, -2000.0, 10.0
Надеюсь все всё поняли, если что задавайте вопрос в комментариях.
format(query, sizeof(query), "SELECT * FROM turfs");
mysql_query(g_SQL, query);
new rows = mysql_num_rows(g_SQL);
ZoneCount = sizeof(g_ZoneNames);
for(new i = 0; i < ZoneCount; i++)
{
format(ZoneData[i][zName], 32, "%s", g_ZoneNames[i]);
ZoneData[i][zX] = g_CapturePositions[i][0];
ZoneData[i][zY] = g_CapturePositions[i][1];
ZoneData[i][zZ] = g_CapturePositions[i][2];
ZoneData[i][zRadius] = g_CaptureRadius[i];
ZoneData[i][zOwner] = -1;
ZoneData[i][zCapturing] = false;
ZoneData[i][zCaptureProgress] = 0;
ZoneData[i][zCaptureTimer] = -1;
ZoneData[i][zCaptureGang] = -1;
}
if(rows > 0)
{
new row[128];
new field[32];
for(new i = 0; i < rows; i++)
{
mysql_fetch_row(g_SQL, row);
mysql_get_field("zone_name", field);
new zoneid = GetZoneIDByName(field);
if(zoneid != -1)
{
mysql_get_field("gang_id", field);
ZoneData[zoneid][zOwner] = strval(field);
}
}
}
mysql_free_result(g_SQL);
return 1;
}
LoadPlayerGang(playerid)
{
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, sizeof(pName));
new query[256];
format(query, sizeof(query), "SELECT gang_id, role FROM gang_members WHERE player_name = '%s'", pName);
mysql_query(g_SQL, query);
new rows = mysql_num_rows(g_SQL);
if(rows == 0)
{
mysql_free_result(g_SQL);
return 1;
}
new row[128];
new field[32];
mysql_fetch_row(g_SQL, row);
mysql_get_field("gang_id", field);
new gangID = strval(field);
if(gangID >= 0 && gangID < GangCount && GangData[gangID][gLoaded])
{
PlayerGang[playerid][pInGang] = true;
PlayerGang[playerid][pGangID] = gangID;
mysql_get_field("role", field);
format(PlayerGang[playerid][pRole], 16, "%s", field);
}
mysql_free_result(g_SQL);
return 1;
}
SavePlayerGang(playerid)
{
if(!PlayerGang[playerid][pInGang]) return 1;
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, sizeof(pName));
new query[256];
format(query, sizeof(query), "UPDATE gang_members SET role = '%s' WHERE player_name = '%s' AND gang_id = %d",
PlayerGang[playerid][pRole], pName, PlayerGang[playerid][pGangID]);
mysql_query(g_SQL, query);
return 1;
}
forward SaveAllGangs();
public SaveAllGangs()
{
for(new i = 0; i < GangCount; i++)
{
if(GangData[i][gLoaded])
{
new query[256];
format(query, sizeof(query), "UPDATE gangs SET level = %d, money = %d, turf = '%s' WHERE id = %d",
GangData[i][gLevel], GangData[i][gMoney], GangData[i][gTurf], GangData[i][gID]);
mysql_query(g_SQL, query);
}
}
print("[GangWar] All gangs saved to database.");
return 1;
}
UpdateGangMoney(gangID)
{
if(gangID < 0 || gangID >= GangCount) return 1;
if(!GangData[gangID][gLoaded]) return 1;
new query[128];
format(query, sizeof(query), "UPDATE gangs SET money = %d WHERE id = %d", GangData[gangID][gMoney], GangData[gangID][gID]);
mysql_query(g_SQL, query);
return 1;
}
CreateZoneLabels()
{
for(new i = 0; i < ZoneCount; i++)
{
new label[64];
format(label, sizeof(label), "%s\nТерритория", ZoneData[i][zName]);
g_ZoneLabels[i] = Create3DTextLabel(label, COLOR_WHITE,
ZoneData[i][zX], ZoneData[i][zY], ZoneData[i][zZ] + 3.0,
50.0, 0, 0);
}
UpdateZoneLabels();
return 1;
}
UpdateZoneLabels()
{
for(new i = 0; i < ZoneCount; i++)
{
new label[128];
if(ZoneData[i][zOwner] != -1 && GangData[ZoneData[i][zOwner]][gLoaded])
{
format(label, sizeof(label), "%s\nВладелец: %s",
ZoneData[i][zName], GangData[ZoneData[i][zOwner]][gName]);
}
progress = ZoneData[zoneid][zCaptureProgress];
if(progress > 100) progress = 100;
if(progress < 0) progress = 0;
if(progress >= 100)
{
CaptureZone(zoneid, gangID);
return 1;
}
if(progress % 10 == 0)
{
new msg[128];
format(msg, sizeof(msg), "[WAR] Захват %s: %d%%", ZoneData[zoneid][zName], progress);
SendClientMessageToAll(COLOR_YELLOW, msg);
}
return 1;
}
forward StopCapture(zoneid);
public StopCapture(zoneid)
{
if(zoneid < 0 || zoneid >= ZoneCount) return 1;
ZoneData[zoneid][zCapturing] = false;
ZoneData[zoneid][zCaptureProgress] = 0;
ZoneData[zoneid][zCaptureGang] = -1;
if(ZoneData[zoneid][zCaptureTimer] != -1)
{
KillTimer(ZoneData[zoneid][zCaptureTimer]);
ZoneData[zoneid][zCaptureTimer] = -1;
}
return 1;
}
forward CaptureZone(zoneid, gangID);
public CaptureZone(zoneid, gangID)
{
if(zoneid < 0 || zoneid >= ZoneCount) return 1;
if(gangID < 0 || gangID >= GangCount) return 1;
if(!GangData[gangID][gLoaded]) return 1;
new oldOwner = ZoneData[zoneid][zOwner];
ZoneData[zoneid][zOwner] = gangID;
format(GangData[gangID][gTurf], 32, "%s", ZoneData[zoneid][zName]);
new query[256];
format(query, sizeof(query), "UPDATE gangs SET turf = '%s' WHERE id = %d", ZoneData[zoneid][zName], gangID);
mysql_query(g_SQL, query);
format(query, sizeof(query), "INSERT INTO turfs (gang_id, zone_name) VALUES (%d, '%s') ON DUPLICATE KEY UPDATE gang_id = %d",
gangID, ZoneData[zoneid][zName], gangID);
mysql_query(g_SQL, query);
GangData[gangID][gMoney] += 5000;
UpdateGangMoney(gangID);
new msg[128];
format(msg, sizeof(msg), "[WAR] Территория %s захвачена семьей %s!", ZoneData[zoneid][zName], GangData[gangID][gName]);
SendClientMessageToAll(COLOR_GREEN, msg);
if(oldOwner != -1 && GangData[oldOwner][gLoaded])
{
format(msg, sizeof(msg), "[WAR] %s потеряла территорию %s!", GangData[oldOwner][gName], ZoneData[zoneid][zName]);
SendClientMessageToAll(COLOR_RED, msg);
GangData[oldOwner][gTurf] = "None";
}
StopCapture(zoneid);
UpdateZoneLabels();
return 1;
}
LoadGangsFromDB()
{
new query[128];
format(query, sizeof(query), "SELECT * FROM gangs");
mysql_query(g_SQL, query);
new rows = mysql_num_rows(g_SQL);
if(rows == 0)
{
mysql_free_result(g_SQL);
print("No gangs found in database.");
return 1;
}
new row[128];
new field[32];
new gangIndex = 0;
for(new i = 0; i < rows; i++)
{
mysql_fetch_row(g_SQL, row);
mysql_get_field("id", field);
GangData[gangIndex][gID] = strval(field);
mysql_get_field("name", field);
format(GangData[gangIndex][gName], 32, "%s", field);
mysql_get_field("tag", field);
format(GangData[gangIndex][gTag], 16, "%s", field);
mysql_get_field("leader", field);
format(GangData[gangIndex][gLeader], MAX_PLAYER_NAME, "%s", field);
mysql_get_field("level", field);
GangData[gangIndex][gLevel] = strval(field);
mysql_get_field("money", field);
GangData[gangIndex][gMoney] = strval(field);
mysql_get_field("turf", field);
format(GangData[gangIndex][gTurf], 32, "%s", field);
GangData[gangIndex][gLoaded] = true;
GangData[gangIndex][gMemberCount] = 0;
gangIndex++;
}
GangCount = gangIndex;
mysql_free_result(g_SQL);
for(new i = 0; i < GangCount; i++)
{
format(query, sizeof(query), "SELECT COUNT(*) FROM gang_members WHERE gang_id = %d", GangData[i][gID]);
mysql_query(g_SQL, query);
mysql_fetch_row(g_SQL, row);
GangData[i][gMemberCount] = strval(row);
mysql_free_result(g_SQL);
}
print("Loaded gangs: ");
return 1;
}
LoadZonesFromDB()
{
new query[256];
