 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
[Manual] Создание территорий + захват
| |
| FiLE | Дата: Понедельник, 29.11.2010, 00:32 | Сообщение # 1 |
|
Группа:
Разработчики
Сообщений: 681
Награды: 70
Город: Одесса
Замечания: 0%
Статус: 
| Наверное каждый сталкивался с тем, что нужно сделать для банд кучу "gang" зон, за которые им прийдется воевать как в одиночной игре. Эта проблема более-менее решается. Порылся в нескольких модах\мануалах, склеил это дело, дописал и что-то получилось. Работающую версию мода Вы можете посмотреть на сервере:83.222.116.31:7801 Зоны будем делать для трех банд. Если нужно - расширяйте. Первое что Вам понадобится - создать сами зоны (координаты). В этом Вам поможет FS. Вот готовые 5 координат: Code 2361.524902,-2685.230468,2857.524902,-2317.230468 2409.545166,-1931.665161,2641.545166,-1619.665161 2400.000488,-2163.384277,2712.000488 ,-1931.384277 2637.094238,-1937.709960,2901.094238,-1665.709960 2713.993652,-2237.376220,2913.993652,-1933.376220 Вы должны занести их в массив и получится: Code new Float:Gangkoordinaten[5][4]={ {2361.524902,-2685.230468,2857.524902,-2317.230468}, {2409.545166,-1931.665161,2641.545166,-1619.665161}, {2400.000488,-2163.384277,27 12.000488,-1931.384277}, {2637.094238,-1937.709960,2901.094238,-1665.709960}, {2713.993652,-2237.376220,2913.993652,-1933.376220} } ; Понятно, что добавляя координаты зон, мы меняем значение 5 на большее. Добавлено (29.11.2010, 00:31) --------------------------------------------- Добавляем переменную с цветами. new GangColor[3]={0x00FF00D0,0x8000FFC9,0xFF0000C7}; И остальное Code new gangzone[5][1]; // 5 тоже меняем, если кол-во зон растет. new gzc[sizeof(Gangkoordinaten)]; new taketurfbackcount[MAX_PLAYERS]; new gangkillcount[MAX_PLAYERS]; new mainzones; new mainzones2; new otvetk; new otvetp; Идем в public OnPlayerDeath И почти в самое начало Code if(PlayerInfo[killerid][pLeader] == 13 || PlayerInfo[killerid][pLeader] == 14 || PlayerInfo[killerid][pLeader] == 15 || PlayerInfo[killerid][pLeader] == 16 || PlayerInfo[killerid][pLeader] == 17 || PlayerInfo[killerid][pLeader] == 18 || PlayerInfo[killerid][pMember] == 13 || PlayerInfo[killerid][pMember] == 14 || PlayerInfo[killerid][pMember] == 15 || PlayerInfo[killerid][pMember] == 16 || PlayerInfo[killerid][pMember] == 17 || PlayerInfo[killerid][pMember] == 18) { if(PlayerInfo[playerid][pLeader] == 13 || PlayerInfo[playerid][pLeader] == 14 || PlayerInfo[playerid][pLeader] == 15 || PlayerInfo[playerid][pLeader] == 16 || PlayerInfo[playerid][pLeader] == 17 || PlayerInfo[playerid][pLeader] == 18 || PlayerInfo[playerid][pMember] == 13 || PlayerInfo[playerid][pMember] == 14 || PlayerInfo[playerid][pMember] == 15 || PlayerInfo[playerid][pMember] == 16 || PlayerInfo[playerid][pMember] == 17 || PlayerInfo[playerid][pMember] == 18) { for(new h = 0; h < sizeof(Gangkoordinaten); h++) { if(IsPlayerInArea(killerid, Gangkoordinaten[h][0], Gangkoordinaten[h][1], Gangkoordinaten[h][2], Gangkoordinaten[h][3])) { if(PlayerInfo[killerid][pMember] == 0) { otvetk = PlayerInfo[killerid][pLeader]; } else if(PlayerInfo[killerid][pLeader] == 0) { otvetk = PlayerInfo[killerid][pMember]; } new str[256]; if(PlayerInfo[playerid][pMember] == 0) { otvetp = PlayerInfo[playerid][pLeader]; } else if(PlayerInfo[playerid][pLeader] == 0) { otvetp = PlayerInfo[playerid][pMember]; } if(otvetk == 13) { taketurfbackcount[killerid]++; if(taketurfbackcount[killerid] == REOWN_TURF) { GangZoneStopFlashForAll(gzc[h]); GangZoneHideForAll(gzc[h]); GangZoneShowForAll(gzc[h], GangColor[0]); //gangzone[h][mainzones] = 1; taketurfbackcount[killerid] = 0; } } if((otvetp != 13) && (otvetk == 13) && (killerid != INVALID_PLAYER_ID)) { gangkillcount[killerid]++; if(gangkillcount[killerid] == GANGAREA_WARNINGS) { if(gangzone[h][mainzones] == 1) { return 1; } SendClientMessageToAll(COLOR_RED,"Смотрящий: Территория атакована!"); GangZoneFlashForAll(gzc[h],GangColor[0]); } if(gangkillcount[killerid] == GANGAREA_TAKE) { if(gangzone[h][mainzones] == 1) { return 1; } new KillerName[30]; GetPlayerName(killerid, KillerName, 30); format(str, 256, "Смотрящий: %s Захватил территорию!", KillerName); SendClientMessageToAll(GangColor[0], str); GangZoneStopFlashForAll(gzc[h]); GangZoneHideForAll(gzc[h]); GangZoneShowForAll(gzc[h], GangColor[0]); gangzone[h][mainzones] = 1; gangzone[h][mainzones2] = 1; gangkillcount[killerid]=0; } } if(otvetk == 14) { taketurfbackcount[killerid]++; if(taketurfbackcount[killerid] == REOWN_TURF) { GangZoneStopFlashForAll(gzc[h]); GangZoneHideForAll(gzc[h]); GangZoneShowForAll(gzc[h], GangColor[1]); //gangzone[h][mainzones] = 1; taketurfbackcount[killerid] = 0; } } if((otvetp != 14) && (otvetk == 14) && (killerid != INVALID_PLAYER_ID)) { gangkillcount[killerid]++; if(gangkillcount[killerid] == GANGAREA_WARNINGS) { if(gangzone[h][mainzones] == 2) { return 1; } SendClientMessageToAll(COLOR_RED,"Смотрящий: Территория атакована!"); GangZoneFlashForAll(gzc[h],GangColor[1]); } if(gangkillcount[killerid] == GANGAREA_TAKE) { if(gangzone[h][mainzones] == 2) { return 1; } new KillerName[30]; GetPlayerName(killerid, KillerName, 30); format(str, 256, "Смотрящий: %s Захватил территорию!", KillerName); SendClientMessageToAll(GangColor[1], str); GangZoneStopFlashForAll(gzc[h]); GangZoneHideForAll(gzc[h]); GangZoneShowForAll(gzc[h], GangColor[1]); gangzone[h][mainzones] = 2; gangzone[h][mainzones2] = 2; gangkillcount[killerid]=0; } } if(otvetk == 15) { taketurfbackcount[killerid]++; if(taketurfbackcount[killerid] == REOWN_TURF) { GangZoneStopFlashForAll(gzc[h]); GangZoneHideForAll(gzc[h]); GangZoneShowForAll(gzc[h], GangColor[2]); //gangzone[h][mainzones] = 1; taketurfbackcount[killerid] = 0; } } if((otvetp != 15) && (otvetk == 15) && (killerid != INVALID_PLAYER_ID)) { gangkillcount[killerid]++; if(gangkillcount[killerid] == GANGAREA_WARNINGS) { if(gangzone[h][mainzones] == 3) { return 1; } SendClientMessageToAll(COLOR_RED,"Смотрящий: Территория атакована!"); GangZoneFlashForAll(gzc[h],GangColor[2]); } if(gangkillcount[killerid] == GANGAREA_TAKE) { if(gangzone[h][mainzones] == 2) { return 1; } new KillerName[30]; GetPlayerName(killerid, KillerName, 30); format(str, 256, "Смотрящий: %s Захватил территорию!", KillerName); SendClientMessageToAll(GangColor[2], str); GangZoneStopFlashForAll(gzc[h]); GangZoneHideForAll(gzc[h]); GangZoneShowForAll(gzc[h], GangColor[2]); gangzone[h][mainzones] = 3; gangzone[h][mainzones2] = 3; gangkillcount[killerid]=0; } } SaveZones(); } } } } Добавлено (29.11.2010, 00:32) --------------------------------------------- В public OnGameModeInit() Code for(new h = 0; h < sizeof(Gangkoordinaten); h++) { gzc[h] = GangZoneCreate(Gangkoordinaten[h][0], Gangkoordinaten[h][1], Gangkoordinaten[h][2], Gangkoordinaten[h][3]); } В public OnPlayerSpawn Code new gzcolor; for(new h = 0; h < sizeof(Gangkoordinaten); h++) { if (gangzone[h][mainzones] == 1) { gzcolor = GangColor[0]; } else if(gangzone[h][mainzones] == 2) { gzcolor = GangColor[1]; } else if(gangzone[h][mainzones] == 3) { gzcolor = GangColor[2]; } GangZoneShowForPlayer(playerid, gzc[h], gzcolor); } Добавляем паблики: Code public LoadZones() { new arrCoords[2][512]; new strFromFile2[512]; new File: file = fopen("gangzones.cfg", io_read); if (file) { new idx; while (idx < 5) { fread(file, strFromFile2); split(strFromFile2, arrCoords, '|');
gangzone[idx][mainzones] = strval(arrCoords[0]); gangzone[idx][mainzones2] = strval(arrCoords[1]);
printf("GANGZONE %d ",gangzone[idx][mainzones]); idx++; } fclose(file); // } return 1; } public SaveZones() { new idx; new File: file2; while (idx < 5) { new coordsstring[512]; format(coordsstring, sizeof(coordsstring), "%d|%d\n", gangzone[idx][mainzones], gangzone[idx][mainzones2] ); if(idx == 0) { file2 = fopen("gangzones.cfg", io_write); } else { file2 = fopen("gangzones.cfg", io_append); } fwrite(file2, coordsstring); idx++; fclose(file2); } 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; } Форварды к ним: Code forward LoadZones(); forward SaveZones(); Добавляем Дефайны в начало: Code #define REOWN_TURF 4 #define GANGAREA_WARNINGS 2 #define GANGAREA_TAKE 4 Лоадим (добавляем строчку) LoadZones(); в public OnGameModeInit() Создаем файл gangzones.cfg в скриптфайлах и заполняем Это 5 наших зон, разных цветов. (почему 2 раза - код не оптимизирован) Как заметили у нас 3 банды ID 13\14\15 На этом наверное все. Что забыл потом допишу.
Сообщение отредактировал FiLE - Понедельник, 29.11.2010, 01:28 |
| |
|
|
| Lacoste | Дата: Понедельник, 29.11.2010, 00:35 | Сообщение # 2 |
|
Группа:
Продвинутые
Сообщений: 844
Награды: 17
Город: Japan, Fukuoka
Репутация: 1140
Замечания: 20%
Статус: 
| Молодец! + заслужил
|
| |
|
|
| Andrejs | Дата: Понедельник, 29.11.2010, 01:03 | Сообщение # 3 |
|
Группа:
I'm V.I.P.
Сообщений: 1801
Награды: 37
Город: Tallinn
Репутация: 2282
Замечания: 20%
Статус: 
| Забыл добавить про дефайны
Сообщение отредактировал McSquizzy - Понедельник, 29.11.2010, 01:04 |
| |
|
|
| FiLE | Дата: Понедельник, 29.11.2010, 01:20 | Сообщение # 4 |
|
Группа:
Разработчики
Сообщений: 681
Награды: 70
Город: Одесса
Замечания: 0%
Статус: 
| McSquizzy, точна, спасибо.
|
| |
|
|
| Andrejs | Дата: Понедельник, 29.11.2010, 01:23 | Сообщение # 5 |
|
Группа:
I'm V.I.P.
Сообщений: 1801
Награды: 37
Город: Tallinn
Репутация: 2282
Замечания: 20%
Статус: 
| FiLE, ещё вроде otvetp и otvetk не понятно откуда беруться в public OnPlayerDeath
Сообщение отредактировал McSquizzy - Понедельник, 29.11.2010, 01:23 |
| |
|
|
| FiLE | Дата: Понедельник, 29.11.2010, 01:30 | Сообщение # 6 |
|
Группа:
Разработчики
Сообщений: 681
Награды: 70
Город: Одесса
Замечания: 0%
Статус: 
| McSquizzy, исправил. Просто создать переменные нужно. Система выбирает из какой банды игрок.
|
| |
|
|
| Andrejs | Дата: Понедельник, 29.11.2010, 01:33 | Сообщение # 7 |
|
Группа:
I'm V.I.P.
Сообщений: 1801
Награды: 37
Город: Tallinn
Репутация: 2282
Замечания: 20%
Статус: 
| FiLE, да я-то понимаю) Подсказываю просто, что исправить. Не все поймут что к чему
|
| |
|
|
| chopisdish | Дата: Понедельник, 29.11.2010, 09:29 | Сообщение # 8 |
|
Новенький
Группа:
Пользователи
Сообщений: 31
Награды: 0
Город: Riga
Репутация: 0
Замечания: 0%
Статус: 
| может есть где готовые координаты территорий?
|
| |
|
|
| DeaD_MaN | Дата: Понедельник, 29.11.2010, 19:57 | Сообщение # 9 |
|
Новенький
Группа:
Пользователи
Сообщений: 50
Награды: 0
Город: Солигорск
Репутация: 6
Замечания: 0%
Статус: 
| 1-ый ! молодчина
Мой сайт о Pawno (http://pawno.belarusforum.net/)
|
| |
|
|
| [exe]ecco | Дата: Понедельник, 29.11.2010, 21:15 | Сообщение # 10 |
|
Группа:
Пользователи
Сообщений: 559
Награды: 3
Город: Киев
Репутация: 4
Замечания: 0%
Статус: 
| молодец на + з работу
|
| |
|
|
| DiSE | Дата: Вторник, 30.11.2010, 16:24 | Сообщение # 11 |
|
Группа:
I'm V.I.P.
Сообщений: 1759
Награды: 23
Город: Уфа
Репутация: 337
Замечания: 80%
Статус: 
| Code SendClientMessageToAll(COLOR_RED,"Смотрящий: Территория атакована!"); Это как на GW? Молодец. Заслужил + Добавлено (30.11.2010, 16:24) ---------------------------------------------
Quote {2400.000488,-2163.384277,27 12.000488,-1931.384277}, ещё тут пробел огромный уберите, а то ошибка будет
|
| |
|
|
| FiLE | Дата: Вторник, 30.11.2010, 17:19 | Сообщение # 12 |
|
Группа:
Разработчики
Сообщений: 681
Награды: 70
Город: Одесса
Замечания: 0%
Статус: 
| DiSE, GW - gangwars? возможно т.к. перед созданием мануала его тоже листал.
|
| |
|
|
| DeaD_MaN | Дата: Пятница, 03.12.2010, 11:43 | Сообщение # 13 |
|
Новенький
Группа:
Пользователи
Сообщений: 50
Награды: 0
Город: Солигорск
Репутация: 6
Замечания: 0%
Статус: 
| нужно было бы сделать что бы показывала кто атаковал кого
Мой сайт о Pawno (http://pawno.belarusforum.net/)
|
| |
|
|
| Лето | Дата: Пятница, 03.12.2010, 12:10 | Сообщение # 14 |
|
Группа:
I'm V.I.P.
Сообщений: 507
Награды: 32
Город: Moscow
Репутация: 477
Замечания: 0%
Статус: 
| Quote (chopisdish) может есть где готовые координаты территорий? Есть, но это секрет фирмы. Конфэшмендыциальность P.S Nice, Plus
|
| |
|
|
| TURBO2 | Дата: Среда, 08.12.2010, 15:03 | Сообщение # 15 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 244
Награды: 1
Город: Peter
Репутация: 223
Замечания: 40%
Статус: 
| понадобиться
skype: nitrolatos
|
| |
|
|
|
 |
|
 | |
| |
|