|
определение кол-ва игроков в определенной области
|
|
| SanSay | Дата: Понедельник, 11.08.2008, 01:31 | Сообщение # 1 |
|
Долгожитель
Группа:
Продвинутые
Сообщений: 1662
Награды: 25
Город: Наб.Челны
Репутация: 280
Замечания: 0%
Статус: 
| мод Пенсел. есть определенная область... чтобы вы поняли приведу пример: например заправка, как известно заправки имеют определенный радиус действия, так вот как например можно узнать кол-во игроков которые в данный момент находятся в радиусе действия заправки? По сути важно узнать даже не кол-во, а например принадлежность к классу или какую нить инфу (ник, цвет и т.п.) у каждого игрока, если игроков больше чем один. Это как в ГТО, когда на точку кача заходит кто-то из другой банды, то игроку первому игроку об этом сообщается. функция может есть какая нить?
simhost.org:8888 Mode:PEN1(LS)+GTO(банды+кач) v4.23_SAMP_0.3с PEN1(LS)+GTO(банды+кач)v3.92_SAMP_0.3с(ifolder)*** AntiBot*** [FS] Car Export vs SanSay*** [FS] anti_s0beit_FakeKill_Ver2
Сообщение отредактировал SanSay - Понедельник, 11.08.2008, 07:00 |
| |
|
|
| OKStyle™ | Дата: Понедельник, 11.08.2008, 19:34 | Сообщение # 2 |
|
Мастер джэдай
Группа:
I'm V.I.P.
Сообщений: 2444
Награды: 16
Город: Оренбург
Репутация: 1174
Замечания: 40%
Статус: 
| SanSay, нет, только ручками и PlayerToPoint... задаёшь радиус, нужный тебе и делаешь проверку не на игрока, а на цикл i...
Да потому что когда человек делает на заказ он не старается. © kRiSyo Кланяимся нофаму королю анимаций =))))))) © Manusya В MTA - для вас все багоюзеры. Не юзают там +с только EFO и ACF. © SeWeR
|
| |
|
|
| AVANGARD | Дата: Понедельник, 11.08.2008, 19:39 | Сообщение # 3 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 197
Награды: 3
Город: Омск
Репутация: 51
Замечания: 0%
Статус: 
| Примерно так: Code for (new i=0; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { if(IsPlayerInSphere(i, X, Y, Z, RADIUS)) { PlayersToPoint++; return; } } } Значение PlayersToPoint и будет количеством игроков находящихся в области с координатами X, Y, Z и радиусом RADIUS!
Респект пацанам из SAMP! наш сайт http://www.joylife.ru/ [FS] ButtonEditor [GM] BattleField2[changemap] В разработке: [FS] NEW_Alkatras
Сообщение отредактировал AVANGARD - Понедельник, 11.08.2008, 19:41 |
| |
|
|
| OKStyle™ | Дата: Понедельник, 11.08.2008, 21:36 | Сообщение # 4 |
|
Мастер джэдай
Группа:
I'm V.I.P.
Сообщений: 2444
Награды: 16
Город: Оренбург
Репутация: 1174
Замечания: 40%
Статус: 
| AVANGARD, ну можно и радиус... просто PlayerToPoint более распространена, а с твоей ща будут просить её выложить =) В PTP есть же тоже радиус вокруг точки
Да потому что когда человек делает на заказ он не старается. © kRiSyo Кланяимся нофаму королю анимаций =))))))) © Manusya В MTA - для вас все багоюзеры. Не юзают там +с только EFO и ACF. © SeWeR
|
| |
|
|
| SanSay | Дата: Вторник, 12.08.2008, 00:23 | Сообщение # 5 |
|
Долгожитель
Группа:
Продвинутые
Сообщений: 1662
Награды: 25
Город: Наб.Челны
Репутация: 280
Замечания: 0%
Статус: 
| сделал... но возникла проблема: я сделал, чтобы проверка велась раз в секунду... отсюда вытекла проблема - он проверяет раз в секунду есть в зоне кто-нить или нет и если есть то прибавляет к PlayersToPoint единицу, а т.к. он проверяет это каждую секунду получается он одного и того же игрока и считает, т.е. кол-во игроков в точке постоянно растет, хотя стоит один игрок вопрос: куда впихнуть эту проверку чтобы она происходила только когда новый игрок входит в эту облась?
simhost.org:8888 Mode:PEN1(LS)+GTO(банды+кач) v4.23_SAMP_0.3с PEN1(LS)+GTO(банды+кач)v3.92_SAMP_0.3с(ifolder)*** AntiBot*** [FS] Car Export vs SanSay*** [FS] anti_s0beit_FakeKill_Ver2
|
| |
|
|
| OKStyle™ | Дата: Вторник, 12.08.2008, 08:35 | Сообщение # 6 |
|
Мастер джэдай
Группа:
I'm V.I.P.
Сообщений: 2444
Награды: 16
Город: Оренбург
Репутация: 1174
Замечания: 40%
Статус: 
| SanSay, давай всем входящим переменную: inzone[playerid]=1, а по выходу: inzone[playerid]=0. А в проверке условие: if(inzone[i]==0) PlayersToPoint++;
Да потому что когда человек делает на заказ он не старается. © kRiSyo Кланяимся нофаму королю анимаций =))))))) © Manusya В MTA - для вас все багоюзеры. Не юзают там +с только EFO и ACF. © SeWeR
Сообщение отредактировал OKStyle™ - Вторник, 12.08.2008, 08:36 |
| |
|
|
| AVANGARD | Дата: Вторник, 12.08.2008, 09:03 | Сообщение # 7 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 197
Награды: 3
Город: Омск
Репутация: 51
Замечания: 0%
Статус: 
| Скажи свою затею полностью тогда скажу как сделать а так не могу сообразить... Что то должно происходить когда в области будет определённое количество игроко? Добавлено (12.08.2008, 09:01) --------------------------------------------- OKStyle™, я такое же хотел написать, но тоже тупость получается... если игрок останется в области один хер PlayersToPoint будет увеличиваться каждую секунду! Добавлено (12.08.2008, 09:03) --------------------------------------------- Тут событие нужно какое нибудь по достижении определённого значения PlayersToPoint! Тогда можно в цыкл вставить обнуление
Респект пацанам из SAMP! наш сайт http://www.joylife.ru/ [FS] ButtonEditor [GM] BattleField2[changemap] В разработке: [FS] NEW_Alkatras
|
| |
|
|
| OKStyle™ | Дата: Вторник, 12.08.2008, 09:07 | Сообщение # 8 |
|
Мастер джэдай
Группа:
I'm V.I.P.
Сообщений: 2444
Награды: 16
Город: Оренбург
Репутация: 1174
Замечания: 40%
Статус: 
| Quote (AVANGARD) если игрок останется в области у него будет параметр 1, а подсчёт идёт на только-что вошедших с параметром 0. главное не перепутать очередность функций.
Да потому что когда человек делает на заказ он не старается. © kRiSyo Кланяимся нофаму королю анимаций =))))))) © Manusya В MTA - для вас все багоюзеры. Не юзают там +с только EFO и ACF. © SeWeR
|
| |
|
|
| AVANGARD | Дата: Вторник, 12.08.2008, 09:13 | Сообщение # 9 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 197
Награды: 3
Город: Омск
Репутация: 51
Замечания: 0%
Статус: 
| Так он и будет раз за разом прибавлять тех у кого 1 или 0.... я запутался Где этот автор вопроса?
Респект пацанам из SAMP! наш сайт http://www.joylife.ru/ [FS] ButtonEditor [GM] BattleField2[changemap] В разработке: [FS] NEW_Alkatras
Сообщение отредактировал AVANGARD - Вторник, 12.08.2008, 09:15 |
| |
|
|
| OKStyle™ | Дата: Вторник, 12.08.2008, 09:54 | Сообщение # 10 |
|
Мастер джэдай
Группа:
I'm V.I.P.
Сообщений: 2444
Награды: 16
Город: Оренбург
Репутация: 1174
Замечания: 40%
Статус: 
| AVANGARD, там смысл в том, что: Code if(игрок зашел в зону) { inzone[playerid]=1; if(inzone[playerid]==1) { PlayersToPoint++; inzone[playerid]=0; } }
Да потому что когда человек делает на заказ он не старается. © kRiSyo Кланяимся нофаму королю анимаций =))))))) © Manusya В MTA - для вас все багоюзеры. Не юзают там +с только EFO и ACF. © SeWeR
|
| |
|
|
| AVANGARD | Дата: Вторник, 12.08.2008, 10:40 | Сообщение # 11 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 197
Награды: 3
Город: Омск
Репутация: 51
Замечания: 0%
Статус: 
| Усё догнал я ход твоей мысли... надеюсь автор тоже поймёт о чом мы тут дискутировали
Респект пацанам из SAMP! наш сайт http://www.joylife.ru/ [FS] ButtonEditor [GM] BattleField2[changemap] В разработке: [FS] NEW_Alkatras
|
| |
|
|
| Spirit | Дата: Вторник, 12.08.2008, 11:17 | Сообщение # 12 |
|
Освоившийся
Группа:
Продвинутые
Сообщений: 129
Награды: 1
Город: Омск
Репутация: 14
Замечания: 0%
Статус: 
| И так судя по последнему коду у нас будет всё таже ситуация только с ещё одним непонятным массивом, поясню, игрок зашёл в зону его посчитали что он в зоне и в массиве опять показали что он не в зоне следующая проверка его опять посчитали если он там оказался, примерно так. Значит вообще если нам надо посчитать колличество игроков в области скажем по команде то таймером ничего делать не надо и необходимость в глобальной переменной отпадает пользуем код ниже. Code new PlayersToPoint; for (new i=0; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)&&IsPlayerInSphere(i, X, Y, Z, RADIUS)) PlayersToPoint++; } //Посчитали и ля-ля тополя дальше поехали Если делаем таймером и глобальной переменной то Code PlayersToPoint = 0;//Каждый раз обнуляем for (new i=0; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)&&IsPlayerInSphere(i, X, Y, Z, RADIUS)) PlayersToPoint++; } Если необходимо именно узнать то что зашёл игрок в зону, тоесть не колличество даже считаем, а то что зашёл ли игрок в зону то да можно отлепить массив, но обнулять элемент будем только тогда когда игрок вне зоны, а не при том когда его посчитали Code new inzone[MAX_PLAYERS];//Массив глобальный
for (new i=0; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { if(IsPlayerInSphere(i, X, Y, Z, RADIUS)) { inzone[i] = 1; //Ну типо игрок зашёл в зону, тревога грабят млядь!!! //Если считаем так колличество то PlayerToPoint++; } else if(inzone[i] == 1) { inzone[i] = 0;//Показываем что игрок из зоны вышел PlayerToPoint--;//Ну и раз на одного игрока в зоне стало меньше то это должно отразится на переменной } } }
Любиш садизм люби и мазахизм :)
Сообщение отредактировал Spirit - Вторник, 12.08.2008, 11:41 |
| |
|
|
| SanSay | Дата: Среда, 13.08.2008, 00:46 | Сообщение # 13 |
|
Долгожитель
Группа:
Продвинутые
Сообщений: 1662
Награды: 25
Город: Наб.Челны
Репутация: 280
Замечания: 0%
Статус: 
| парни нужно следующее: первый игрок заходит в зону и сидит там, если заходит следующий игрок, то у него нужно проверить, например цвет, если совпадает с первым то ок, если нет то тревога. кстати предыдущие ответы очень помогли... для решения другой задачи всем кому еще не ставил +, за помощь осталось решить первую задачу
simhost.org:8888 Mode:PEN1(LS)+GTO(банды+кач) v4.23_SAMP_0.3с PEN1(LS)+GTO(банды+кач)v3.92_SAMP_0.3с(ifolder)*** AntiBot*** [FS] Car Export vs SanSay*** [FS] anti_s0beit_FakeKill_Ver2
|
| |
|
|
| Spirit | Дата: Среда, 13.08.2008, 10:02 | Сообщение # 14 |
|
Освоившийся
Группа:
Продвинутые
Сообщений: 129
Награды: 1
Город: Омск
Репутация: 14
Замечания: 0%
Статус: 
| new zone = -1;//Щас зона никому не принадлежит //И теперь пишем для таймера new PlayerToPoint = 0 ; new Team1, Team2; for(new i=0;i<MAX_PLAYERS;i++) { if(IsPlayerConnected(i)&&IsPlayerInSphere(i, X, Y, Z, RADIUS)) { PlayerToPoint++; if(zone == -1) zone = PlayerTeam[i];//Зона как бы захвачена if(PlayerTeam[i] == 0) Team1++; else Team2++; } if(PlayerToPoint == 0&&zone != -1) { zone = -1; } if(zone == 0&&Team1 == 0&&Team 2 != 0) zone = 1; else if(zone == 1&&Team1 != 0&&Team 2 == 0) zone =0; if(zone == 0&&Team2 > 0) //Тревога else if(zone == 1&&Team1 > 0) //Тревога } Примерно вот так, хотя должен быть способ проще.
Любиш садизм люби и мазахизм :)
|
| |
|
|
| SanSay | Дата: Среда, 13.08.2008, 20:12 | Сообщение # 15 |
|
Долгожитель
Группа:
Продвинутые
Сообщений: 1662
Награды: 25
Город: Наб.Челны
Репутация: 280
Замечания: 0%
Статус: 
| короче сделал так: for(new i = 0; i <= MAX_PLAYERS; i++) { new string[64]; if(IsPlayerConnected(i)&&IsPlayerInSphere(i, 2095.7,-1691.8,13.5,3)) { if(zone == -1) //если зона ничья то ... { zone = PlayerInfo[i][значение]; //... то ее захват SendClientMessage(i, COLOR_YELLOW, " вы захватили зону"); дейсвия разные } else if(zone == PlayerInfo[i][значение]) //если зона принадлежит твоей банде { теже действия что и выше } else if(zone != PlayerInfo[i][pJailed]) //если зона принадлежит не твоей банде { SendClientMessage(i, COLOR_YELLOW, " зона чужая, захватите ее"); for(new g = 0; g == zone; g++) { SendClientMessage(zone, COLOR_LIGHTBLUE, "посторонний в зоне!"); //сообщение для тех, чья зона на текущий момент } } } } } и вопрос, как теперь вернуть зону в "ничейное" состояние если из нее ушли "захватчики"?
simhost.org:8888 Mode:PEN1(LS)+GTO(банды+кач) v4.23_SAMP_0.3с PEN1(LS)+GTO(банды+кач)v3.92_SAMP_0.3с(ifolder)*** AntiBot*** [FS] Car Export vs SanSay*** [FS] anti_s0beit_FakeKill_Ver2
Сообщение отредактировал SanSay - Среда, 13.08.2008, 20:46 |
| |
|
|