|
Форум Программирование в Pawno Готовые решения Создание Team и Gang Зон. |
Создание Team и Gang Зон. |
Для начала надо сделать команду или так сказать ТИМ.
В самое начало вписываем: Код 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) {//Указываем тим или банду захватываемой зоны в данный момент грув 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) {//Название тима в данный момент грув 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 < MAX_PLAYERS; 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]; Потом Код public OnPlayerDeath(playerid, killerid, reason) { if(killerid == INVALID_PLAYER_ID) { SendDeathMessage(INVALID_PLAYER_ID,playerid,reason); } else { if(gTeam [killerid]!= gTeam[playerid]) { SendDeathMessage(killerid,playerid,reason); SetPlayerScore(killerid,GetPlayerScore(killerid)+1); GivePlayerMoney(killerid, 1000); } //TEAM KILL else { SendClientMessage(killerid, COLOR_RED, "Не убивай своих!В следущий раз будь окуратнее!"); SendDeathMessage(killerid,playerid,reason); SetPlayerScore(killerid,GetPlayerScore(killerid)-1); GivePlayerMoney(killerid, -2000); SetPlayerHealth(killerid,0); tk [killerid]++; if(tk [killerid]== 2) { SendClientMessage(killerid, COLOR_RED, "еще раз убеш своего и тебя кикнут!"); } if(tk [killerid]>= 3) { new string[256]; new name[MAX_PLAYER_NAME]; GetPlayerName(killerid,name, sizeof(name)); printf(" -A.T.K Script-: %s kicked for teamkilling",name); Kick(killerid); format(string, sizeof(string), "АнтиТимКилл кикнула %s за убийство своих бандитов!",name); SendClientMessageToAll(COLOR_GREEN, string); } } } return 1; } Все готово система анти тим килл! И так я вам обещал научится пользыватся программой! Чтобы сделать координаты для ганг зоны делаем следующие Заходим в программу, выбераем нужный город где будете создавать ганг зону, с верху выбираем Draw Config, отмечаем на карте зону, вам вылазит окошко! выбираем там Gang Zones & World Boundaries! выбераем пункт Use Gang Zone в окошко вписываем название зоны и выбираем ее цвет Вот у вас получилось vagos = GangZoneCreate(1147,61, -1863,458, 1626,767, -1346,304); тут есть одно неудобство это запятые вместо точек! заменяем некоторые запятые на точки (1147.61, -1863.458, 1626.767, -1346.304); И еще то что там типо надо писать в public OnPlayerSpawn(playerid) пишем в public OnPlayerConnect(playerid)! собствено урок дан. Автор: Неизвестен Программист любитель :) |
| |||
| |||