Re: Скриптинг курилка -
OKStyle - 05.10.2017
А это кто такой? Неужели старичков достойных не нашли?
Re: Скриптинг курилка -
Romz - 05.10.2017
Quote:
Originally Posted by OKStyle
А это кто такой? Неужели старичков достойных не нашли?
|
http://forum.sa-mp.com/member.php?u=103960
107 сообщений.
Я его тоже в первые вижу.
Re: Скриптинг курилка -
VVWVV - 05.10.2017
Quote:
Originally Posted by Romz
|
У него достаточно знаменитый RolePlay сервер. Наверное, 2-й после LS-RP.
Состав RedCounty RolePlayer
Re: Скриптинг курилка -
Kaperstone - 05.10.2017
Quote:
Originally Posted by VVWVV
|
у него больше чем "достаточно популарны ЕрПГ" у него технически играют все спамери Сампа, о ном толка и гаварят на Англиском Дискорде Сампа.
Re: Скриптинг курилка -
Eims - 06.10.2017
Есть кривой мод
(предположительно паблик), на котором периодически перестаёт синхронизировать игрока с сервером: все игроки в зоне стрима встают в афк, а объекты за зоной стрима просто не создаются. Все команды, завязанные на действиях с другими игроками
(например, слежка за игроком) так же отказываются работать. Работает только чат
(игрок получает сообщения от других и сам может их писать). И так до релога
(хоть даже собейтом сделать быстрый релог), после чего всё опять нормально.
Какую-то последовательность отловить не смог, собственно, поэтому обращаюсь к вам. Знает ли кто с чем это может быть связано?
P.S. OnPlayerUpdate всегда возвращает 1.
Re: Скриптинг курилка -
White_116 - 06.10.2017
Quote:
Originally Posted by Eims
Есть кривой мод (предположительно паблик), на котором периодически перестаёт синхронизировать игрока с сервером: все игроки в зоне стрима встают в афк, а объекты за зоной стрима просто не создаются. Все команды, завязанные на действиях с другими игроками (например, слежка за игроком) так же отказываются работать. Работает только чат (игрок получает сообщения от других и сам может их писать). И так до релога (хоть даже собейтом сделать быстрый релог), после чего всё опять нормально.
Какую-то последовательность отловить не смог, собственно, поэтому обращаюсь к вам. Знает ли кто с чем это может быть связано?
P.S. OnPlayerUpdate всегда возвращает 1.
|
Проверяй потерю пакетов. OnPlayerUpdate не всегда может выполнятся (ошибка в коде - выход за пределы массива)
Re: Скриптинг курилка -
Romz - 06.10.2017
Что значит "
[debug] Run time error 5: "Invalid memory access""?
Выхода за пределы массива нет, но ошибка есть.
Re: Скриптинг курилка -
Eims - 06.10.2017
Quote:
Originally Posted by White_116
OnPlayerUpdate не всегда может выполнятся (ошибка в коде - выход за пределы массива)
|
Я это понимаю, но там такой код, что даже выходу за пределы массива взяться неоткуда
PHP код:
public OnPlayerUpdate(playerid)
{
if(!PlayerInfo[playerid][bAdmin] && !IsPlayerDeimos(playerid))
{
switch(GetPlayerWeapon(playerid))
{
case 9, 16, 26, 27, 35, 36, 37, 38, 39, 44, 45:
OnPlayerCheat(playerid, AC_GUNHACK_code, AC_KICK);
}
}
pTemp[playerid][pAFK] = 0;
return true;
}
Условие, при котором вызывается OnPlayerCheat, не срабатывает в моменты рассинхрона, если что (да и тогда бы кикнуло сразу).
Касаемо потери пакетов: если речь о ошибках в консоли, то там всё чисто. А статистику канала связи чекну при следующем случае
Quote:
Originally Posted by Romz
Что значит "[debug] Run time error 5: "Invalid memory access""?
Выхода за пределы массива нет, но ошибка есть.
|
Скомпилируй мод в режиме отладки (ключ "-d3") и скажет более подробную информацию
Re: Скриптинг курилка -
Mcc - 06.10.2017
Quote:
Originally Posted by Romz
Что значит "[debug] Run time error 5: "Invalid memory access""?
Выхода за пределы массива нет, но ошибка есть.
|
Что-то где-то криво работает с памятью
Re: Скриптинг курилка -
VVWVV - 06.10.2017
Quote:
Originally Posted by Mcc
Что-то где-то криво работает с памятью
|
Совершенно верно.
1) Чаще всего проблема возникает в массивах (двумерных и выше), у которых не указан размер. Например:
pawn Код:
new buffer[][] = {{},{}};
buffer[0][100] = 100; // компилятор ничего на это не скажет.
2) #emit.
Re: Скриптинг курилка -
Romz - 06.10.2017
Quote:
Originally Posted by VVWVV
Совершенно верно.
1) Чаще всего проблема возникает в массивах (двумерных и выше), у которых не указан размер. Например:
pawn Код:
new buffer[][] = {{},{}}; buffer[0][100] = 100; // компилятор ничего на это не скажет.
2) #emit.
|
Думал на 1й вариант, всем массивам присвоил длину но все равно проблема осталась.
#emit не юзаю.
Re: Скриптинг курилка -
Eims - 06.10.2017
Quote:
Originally Posted by Eims
Quote:
Originally Posted by Romz
Что значит "[debug] Run time error 5: "Invalid memory access""?
Выхода за пределы массива нет, но ошибка есть.
|
Скомпилируй мод в режиме отладки (ключ "-d3") и скажет более подробную информацию
|
Так а с этим что?
Re: Скриптинг курилка -
Mcc - 06.10.2017
Quote:
Originally Posted by Romz
Думал на 1й вариант, всем массивам присвоил длину но все равно проблема осталась.
#emit не юзаю.
|
Там вариантов может быть от пуза, никто тебе в слепую не поможет тут, ищи сам свой косяк. -д3
Re: Скриптинг курилка -
Romz - 06.10.2017
У меня возникает такая ошибка:
Код:
[debug] Run time error 5: "Invalid memory access"
Есть массив для хранения лута на земле:
Код:
#define MAX_DROP (10000)
enum drop_info {
drop_item,
drop_amount,
Float:drop_pos[3],
drop_world,
drop_interior,
drop_object,
drop_time
};
new DropInfo[MAX_DROP][drop_info];
Код с ошибкой:
Код:
for(new id; id < MAX_DROP; id++) {
if(DropInfo[id][drop_item] == -1 || DropInfo[id][drop_amount] <= 0) { // Тут ошибка
}
}
Сижу над этим кодом с 7 утра, ну что может быть не так если раньше все работало и я уже около года тут ничего не менял?
Re: Скриптинг курилка -
stabker - 06.10.2017
Quote:
Originally Posted by Romz
У меня возникает такая ошибка:
Код:
[debug] Run time error 5: "Invalid memory access"
Есть массив для хранения лута на земле:
Код:
#define MAX_DROP (10000)
enum drop_info {
drop_item,
drop_amount,
Float:drop_pos[3],
drop_world,
drop_interior,
drop_object,
drop_time
};
new DropInfo[MAX_DROP][drop_info];
Код с ошибкой:
Код:
for(new id; id < MAX_DROP; id++) {
if(DropInfo[id][drop_item] == -1 || DropInfo[id][drop_amount] <= 0) { // Тут ошибка
}
}
Сижу над этим кодом с 7 утра, ну что может быть не так если раньше все работало и я уже около года тут ничего не менял?
|
Скиньте немного кода выше и ниже этой строки
Re: Скриптинг курилка -
Eims - 06.10.2017
А знает кто способ как заставить компилятор ругаться на все случаи несовпадения тега Float, а не подставлять функцию "float"?
Ну чтоб на что-то подобное
PHP код:
SetPlayerPos(playerid, 0, 0, 0);
Компилятор выплюнул предупреждение о несовпадении тегов
Re: Скриптинг курилка -
Romz - 07.10.2017
Как это возможно?
PHP код:
new mytext[10];
public OnGameModeInit() {
format(mytext, 102, "Чернила с поверхности папируса легко смывались, и лист мог использоваться вторично для новых записей.");
printf("%d - %s", sizeof(mytext), mytext);
return 1;
}
Почему оно не выдает никаких ошибок (crashdetect молчит) но при это выводит текст полностью?
Re: Скриптинг курилка -
Eims - 07.10.2017
Потому что это Windows. На Linux либо сервер просто крашнет, либо выплюнет ошибку о выходе за пределы массива.
И тут нет ничего удивительного. Объявляя массив, ты просто резервируешь определённый участок памяти под определённое имя переменной. Но от этого вся последующая память не становится недоступной. И это особенно хорошо видно как раз при работе с текстом.
Простой пример:
PHP код:
static //Помещаем оба массива в сегмент данных
str1[] = "Привет",
str2[] = " Как дела?";
printf("\n1) |%s|", str1);
printf("\n2) |%s|", str2);
str1[sizeof(str1)-1] = '.';//Заменяем нуль-символ в массиве на точку
printf("|%s|", str1);//Вновь выводим содержимое первого массива, но на выходе получаем содержимое двух массивов
Re: Скриптинг курилка -
Stepashka - 07.10.2017
Quote:
Originally Posted by Romz
Как это возможно?
PHP код:
new mytext[10];
public OnGameModeInit() {
format(mytext, 102, "Чернила с поверхности папируса легко смывались, и лист мог использоваться вторично для новых записей.");
printf("%d - %s", sizeof(mytext), mytext);
return 1;
}
Почему оно не выдает никаких ошибок (crashdetect молчит) но при это выводит текст полностью?
|
Потому что надо читать документацию.
Правильный код будет:
PHP код:
new mytext[10];
public OnGameModeInit() {
format(mytext, sizeof(mytext), "Чернила с поверхности папируса легко смывались, и лист мог использоваться вторично для новых записей.");
printf("%d - %s", sizeof(mytext), mytext);
return 1;
}
Re: Скриптинг курилка -
m1n1vv - 07.10.2017
Quote:
Originally Posted by Stepashka
Потому что надо читать документацию.
Правильный код будет:
PHP код:
new mytext[10];
public OnGameModeInit() {
format(mytext, sizeof(mytext), "Чернила с поверхности папируса легко смывались, и лист мог использоваться вторично для новых записей.");
printf("%d - %s", sizeof(mytext), mytext);
return 1;
}
|
Не вник в суть вопроса? Не лезь!