PDA

Просмотр полной версии : [Вопрос] OnPlayerDeath



Niko_Grey
15.06.2015, 18:38
Возникла проблема. В enum есть переменная gScore[2], т.е gScore[0] отвечает за очки 1 команды, gScore[1] за очки 2 команды.
Все бы ничего, но случилась беда: в OnPlayerDeath я делаю следующее:

gInfo[pInfo[killerid][pGame]][gScore][pInfo[killerid][pTeam]] ++;
Но почему-то происходят сбои (иногда просто напросто не прибавляется), особой закономерности нет, раз на раз, уже не знаю что делать..

Думаю все понятно, если нет, пишите - дополню.

L0ndl3m
15.06.2015, 19:27
Если игрок погибнет сам без участия противника, то значение переменной killerid будет = INVALID_PLAYER_ID ( 65535 ). То есть, если вызвать элемент массива с таким порядковым номером, то код не сработает из-за сбоя.

Вот такое решение могу предложить:


if(killerid != INVALID_PLAYER_ID)
gInfo[pInfo[killerid][pGame]][gScore][pInfo[killerid][pTeam]] ++;

Niko_Grey
15.06.2015, 19:38
Если игрок погибнет сам без участия противника, то значение переменной killerid будет = INVALID_PLAYER_ID ( 65535 ). То есть, если вызвать элемент массива с таким порядковым номером, то код не сработает из-за сбоя.

Вот такое решение могу предложить:


if(killerid != INVALID_PLAYER_ID)
gInfo[pInfo[killerid][pGame]][gScore][pInfo[killerid][pTeam]] ++;


Это я знаю..Тестили вдвоем с другом. Сейчас вот опять тестим все нормально, с чем мог быть связан сбой? Если убивал я не сам себя.

Daniel_Cortez
15.06.2015, 19:41
Просто оставлю это здесь:

http://pro-pawn.ru/showthread.php?2991-Crashdetect

Niko_Grey
15.06.2015, 19:41
Просто оставлю это здесь:

http://pro-pawn.ru/showthread.php?2991-Crashdetect

Детектил, ничего не показывает. Да и я думаю было бы все время.

$continue$
15.06.2015, 19:44
Детектил, ничего не показывает. Да и я думаю было бы все время.

А пользуетесь правильно? Откладка -d3 стоит?

Daniel_Cortez
15.06.2015, 19:47
У человека, читающего мысли на расстоянии через интернет, сегодня выходной.
Без кода OnPlayerDeath вряд ли что-то можно будет выяснить.

Niko_Grey
15.06.2015, 19:50
У человека, читающего мысли на расстоянии через интернет, сегодня выходной.
Без кода OnPlayerDeath вряд ли что-то можно будет выяснить.

Я, вроде все скинул..Больше в OnPlayerDeath у меня ничего нет.

L0ndl3m
15.06.2015, 19:54
Инициализацию массива тогда покажите.

Niko_Grey
15.06.2015, 19:58
Инициализацию массива тогда покажите.

Вы имели ввиду это?

enum game_information
{
gMap,
gTeam[2],
gScore[2]
};
new game_info[MAX_GAMES][game_information];

$continue$
15.06.2015, 20:02
Вы имели ввиду это?

enum game_information
{
gMap,
gTeam[2],
gScore[2]
};
new game_info[MAX_GAMES][game_information];

MAX_GAMES - показывайте

Niko_Grey
15.06.2015, 20:05
MAX_GAMES - показывайте

Она равна единице.

Daniel_Cortez
15.06.2015, 20:43
Вы имели ввиду это?

enum game_information
{
gMap,
gTeam[2],
gScore[2]
};
new game_info[MAX_GAMES][game_information];
Массив game_info - это переименованный gInfo из 1 поста?

Niko_Grey
16.06.2015, 06:42
Массив game_info - это переименованный gInfo из 1 поста?

Верно...Я использую более сокращенный вид через макросы, но думал вы запутаетесь.

DeimoS
17.06.2015, 06:11
if(IsPlayerConnected(killerid))
{
gInfo[pInfo[killerid][pGame]][gScore][pInfo[killerid][pTeam]] ++;
}
Если не поможет (хотя еще вариант Londlem'a должен был помочь в таком случае), залогируйте все используемые переменные. Например:

if(IsPlayerConnected(killerid))
{
gInfo[pInfo[killerid][pGame]][gScore][pInfo[killerid][pTeam]] ++;
new log[60];
format(log,sizeof(log), "killerid - %d, pGame - %d, gScore - %d, pTeam - %d", killerid, pInfo[killerid][pGame][gScore][pInfo[killerid][pTeam]], pInfo[killerid][pTeam]);
SendClientMessage(playerid, -1, log);
printf("%s", log);
}

Niko_Grey
17.06.2015, 06:25
if(IsPlayerConnected(killerid))
{
gInfo[pInfo[killerid][pGame]][gScore][pInfo[killerid][pTeam]] ++;
}

Да ну причем тут это..Я же говорю, с другом тестили, он явно был на сервере =_=
Сейчас вроде прекратились сбои, но так и не понял что было.. Тему можно закрывать

Попробую логировать, если еще раз появится проблема, спасибо.

DeimoS
17.06.2015, 06:34
Да ну причем тут это..Я же говорю, с другом тестили, он явно был на сервере =_=
Сейчас вроде прекратились сбои, но так и не понял что было.. Тему можно закрывать

Я не до конца пост написал. С телефона пишу и случайно отправил.
Проблема если и есть - она в данных, которые хранятся в переменных. Тут мы ничем не сможем помочь. Только тестирование и логирование