Урок по створенню Ганг зон!

Привіт всім я навчу вас робити Ганг зони з захопленням
Тож почнемо:
Для початку треба зробити команду або так сказати ТІМ.
У самий початок вписуємо:

new gTeam [MAX_PLAYERS]; // Це для відмінності тім або банд.
#define TEAM_BALLA_COLOR 0x80008096 // колір для вашої тім команди або банди
#define TEAM_GROVE 1 // назву тім команди або банди! обязатльно вказуйте при створенні нової банди її номер якщо хочете створити ще 1 банду допустимо балас пишіть так
#define TEAM_BALLA 2 // обов'язково перенумеровувати

Тепер для вашої банди або тім потрібно при виборі зробити скіни (які скіни відноситься до якої банді)
У паблік суем.

public OnPlayerRequestClass (playerid, classid)
<
if (classid == 5) // 5 номер скіна! Але вважати треба від нуля
<
gTeam [playerid] = TEAM_GROVE; // Тут вказуємо для якої тім скін
GameTextForPlayer (playerid, "GROVE", 1000, 3); // Ну і тексдрав для відмінності
>
retirn 1;
>

Також повторюємо з іншими тімамі або бандами як вам зручно.

Тепер приступимо робити Ганг зони!
Припустимо зробимо зону для грув стріт.

У самий початок пхає це:

new taketurfbackcount [MAX_PLAYERS];
new gangkillcount [MAX_PLAYERS];
#define REOWN_TURF 4
#define GANGAREA_WARNINGS 2
#define GANGAREA_TAKE 4
new grove; // назва зони або території для захоплення.

Тепер вставляємо нижче вказане.

public OnGameModeInit ()
<
grove = GangZoneCreate (2197.193, -1887.144,2630.716, -1381.833); // grove- ця назва ваше зони на початку ми вказували її назву.
В дужках вказано (2197.193, -1887.144,2630.716, -1381.833)

2197.193 - мінімум по Х
-1887.144 - мінімум по У
2630.716 - максимум по Х
-1381.833 - максимум по У

Для цього я використовую зручну програму Xtreme Vehicle Plotter.Как їй користуватися покажу пізніше.
Для того щоб на карті було видно зони в нижче вказаний паблік пхає: GangZoneShowForPlayer (playerid, grove, 0x24FF0AB9);

public OnPlayerConnect (playerid)
<
GangZoneShowForPlayer (playerid, grove, COLOR_GREEN); // Щоб на карті було видно зони.grove - назва зони в даний момент ми робимо грув. і відповідно її цвет.Желательно вказувати колір вашої банди для якої ви це робите в даний момент грув.
return 1;
>

Для того щоб коли інші гравці захоплюють зони "захоплююча зона" кліпала, робимо нижче вказане.

public OnPlayerDeath (playerid, killerid, reason)
<
if (gTeam [killerid] == TEAM_GROVE) taketurfbackcount [killerid] ++;
if (taketurfbackcount [killerid] == REOWN_TURF) <
GangZoneStopFlashForAll (grove); // вказуємо в дужках назву зони яка буде блимати в даний момент це grove
GangZoneHideForAll (grove); // Вставляємо в дужки назва зони в даний момент грув grove
GangZoneShowForAll (grove, GetPlayerColor (killerid)); // Це коли гравець захопив зону! буде перефарбовуватися в його колір, вставляємо в дужки назва зони в даний момент grove.
taketurfbackcount [killerid] = 0;
>
>

// Тепер зробимо щоб писало то що зона захоплюється або захоплена!
Для цього в цьому ж паблік пишемо.

new str [256];
if (gTeam [killerid] == TEAM_GROVE) taketurfbackcount [killerid] ++;
if (taketurfbackcount [killerid] == REOWN_TURF) <
GangZoneStopFlashForAll (grove); // назву захвачеемой території в даний момент grove
GangZoneHideForAll (grove); // назву захвачеемой території в даний момент grove
GangZoneShowForAll (grove, GetPlayerColor (killerid)); // назву захвачеемой території в даний момент grove
taketurfbackcount [killerid] = 0;
>
>
if (IsPlayerInArea (playerid, 2383.532, -1748.974, 2543.251, -1618.698)) // Координати зони в даний момент зони grove
<
if ((gTeam [playerid] == TEAM_GROVE) (GTeam [killerid]! = TEAM_GROVE) (Killerid! = INVALID_PLAYER_ID)) // Вказуємо назву тім або банди в даний момент TEAM_GROVE
<
gangkillcount [playerid] ++;
if (gangkillcount [playerid] == GANGAREA_WARNINGS)
<
SendClientMessageToAll (COLOR_RED, "Бандит: Територія банди Grove атакована!"); // Повідомлення в заг. чат то що база атакована
GangZoneFlashForAll (grove, GetPlayerColor (killerid)); // Вказуємо назву зони в даний момент grove
>
if (gangkillcount [playerid] == GANGAREA_TAKE)
<
new KillerName [30];
GetPlayerName (killerid, KillerName, 30);
format (str, 256, "Бандит:% s Захопив територію банди Grove!", KillerName); // Пишеться гравцям то що певні гравець захопив зону
SendClientMessageToAll (GetPlayerColor (killerid), str);
GangZoneStopFlashForAll (grove); // Вказуємо захоплювану зону в даний момент grove
GangZoneHideForAll (grove); // Вказуємо захоплювану зону в даний момент grove
GangZoneShowForAll (grove, GetPlayerColor (killerid)); // Вказуємо захоплювану зону в даний момент grove
gangkillcount [playerid] = 0;
>
>
>
return 1;
>

ну і в вільне місце пхає

stock IsPlayerInArea (playerid, Float: min_x, Float: min_y, Float: max_x, Float: max_y)
<
new Float: X, Float: Y, Float: Z;
GetPlayerPos (playerid, X, Y, Z);
if (X <= max_x && X>= min_x Y <= max_y && Y>= Min_y) return 1;
return 0;
>

Думаю ваша бандити зі своїми Ганг зонами готові.

додатково:
Якщо хочете щоб у вашій банди був закритий чат тільки для неї тоді робимо нижче вказане.

public OnPlayerText (playerid, text [])
<
if (text [0] == '!')
<
new name [24], string [256];
GetPlayerName (playerid, name, 24);
strdel (text, 0,1);
format (string, sizeof (string), "Чат банди% s:% s", name, text);
printf ( "% s", string);
for (new i = 0; i <
if (IsPlayerConnected (i))
<
if (gTeam [i] == gTeam [playerid])
SendClientMessage (i, GetPlayerColor (playerid), string);
>
>
return 0;
>
return 1;
>

Тепер у вас є тім чат для кожної команди, щоб в нього писати всього лиш варто поставити на початку тексту "!" знак оклику І далі пишіть що хочете.

Якщо хочете щоб гравці однієї банди за вбивство свого дружнього бандита соответствено каралися робимо так.

У самий початок пхає

#define COLOR_RED 0xAA3333AA // RED
#define COLOR_GREEN 0x33AA33FF // GREEN
new tk [MAX_PLAYERS];

Все готово система анти тім Кілл!
Допоміг поставте +

Схожі статті