Ограничения для одного игрока
#1

Привет ребят пилю системку дуэлей
не как не могу придумать как сделать ограничитель, т.е что бы игрок не мог вызвать другова на дуэль, если вызовший этого сам не захочет.
Т.е я игрок. наберу к примеру /b 2
и игрок с идом номер 2 не сможет вызвать меня на дуэль.
Подскажите пожалуйста. Как это риализовать
Reply
#2

Эм..

Создаём массив, типа block[MAX_PLAYER][MAX_PLAYER] = {INVALID_PLAYER_ID, ...};.
При добавлении циклом находим свободную ячейку и пишем туда id заблокированного игрока.
При проверке циклом приходимся по массиву и ищем ID игрока.
Хранить массив в файл\базе в виде перечисления, аля: "1,3,4,5,8".

Только я думаю нужно не по ID это делать а по нику, ибо стоит перезайти игрокам и получиться каша.
Reply
#3

Я так понял вы о согласии насчет дуэли? Тогда просто в PVar запоминайте кто кому отправил и тому кого вызвали показывайте диалог с выбором Да или Нет, если жмет да то удаляются PVar's и отправляет их на дуаэль, если нет, то тоже удаляются пвары и пишет что игрока отказался. Ничего сложного )
Reply
#4

Quote:
Originally Posted by -Stranger-
Посмотреть сообщение
Эм..

Создаём массив, типа block[MAX_PLAYER][MAX_PLAYER] = {INVALID_PLAYER_ID, ...};.
При добавлении циклом находим свободную ячейку и пишем туда id заблокированного игрока.
При проверке циклом приходимся по массиву и ищем ID игрока.
Хранить массив в файл\базе в виде перечисления, аля: "1,3,4,5,8".

Только я думаю нужно не по ID это делать а по нику, ибо стоит перезайти игрокам и получиться каша.
хм, не мне нужно чтобы сохранял на файл. Это просто так...

ну а если я вас правельно понял то код должен выглядить так.

PHP код:
new block[MAX_PLAYER][MAX_PLAYER] = {INVALID_PLAYER_ID, ...};
COMMAND:love(playerid,params[])
{
    if(
sscanf(params"d"params[0])) return SendClientMessage(playerid,0xFFB0FFAA,"правка: /block [id]");
    
block[playerid][params[0]] = 1;

так или я как то не правельно понял ?
Reply
#5

Quote:
Originally Posted by -Stranger-
Посмотреть сообщение
Эм..

Создаём массив, типа block[MAX_PLAYER][MAX_PLAYER] = {INVALID_PLAYER_ID, ...};.
При добавлении циклом находим свободную ячейку и пишем туда id заблокированного игрока.
При проверке циклом приходимся по массиву и ищем ID игрока.
Хранить массив в файл\базе в виде перечисления, аля: "1,3,4,5,8".

Только я думаю нужно не по ID это делать а по нику, ибо стоит перезайти игрокам и получиться каша.
Создаем двумерный массив [MAX_PLAYERS][MAX_PLAYERS] а потом ещё и циклом перебирать что то?

Quote:
Originally Posted by AnGeL_KRAMER
Посмотреть сообщение
PHP код:
new block[MAX_PLAYER][MAX_PLAYER] = {INVALID_PLAYER_ID, ...};
COMMAND:love(playerid,params[])
{
    if(
sscanf(params"d"params[0])) return SendClientMessage(playerid,0xFFB0FFAA,"правка: /block [id]");
    
block[playerid][params[0]] = 1;

так или я как то не правельно понял ?
Да, только проверяйте входящие данные, есть ли игрок на сервере и т.д. В sscanf используй ключ r, что бы можно было использовать /block id или /block vasya
Reply
#6

AirKite, не нравиться мой вариант, - предложи свой. Нету своего варианта, - молчи...
Reply
#7

Quote:
Originally Posted by -Stranger-
Посмотреть сообщение
AirKite, не нравиться мой вариант, - предложи свой. Нету своего варианта, - молчи...
У тебя всё в порядке с головой? Какие тут варианты ещё? Я задал вопрос, зачем ему цикл в двумерном массиве по MAX_PLAYERS?

Касательно предложений, ТС как бы сам всё верно написал. Накатай свой код, двумерный массив о котором говорилось выше и цикл. Хоть посмотрим
Reply
#8

AirKite, цикл как минимум нужен при сохранении и загрузке. А то, что сохранять это не требуется было написано ПОСЛЕ моего поста.
Два, время поста посмотри, а потом говори.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)