SA-MP Forums Archive
Скриптинг курилка - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Скриптинг курилка (/showthread.php?tid=111279)



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
Посмотреть сообщение
http://forum.sa-mp.com/member.php?u=103960
107 сообщений.

Я его тоже в первые вижу.
У него достаточно знаменитый RolePlay сервер. Наверное, 2-й после LS-RP.
Состав RedCounty RolePlayer


Re: Скриптинг курилка - Kaperstone - 05.10.2017

Quote:
Originally Posted by VVWVV
Посмотреть сообщение
У него достаточно знаменитый RolePlay сервер. Наверное, 2-й после LS-RP.
Состав RedCounty RolePlayer
у него больше чем "достаточно популарны ЕрПГ" у него технически играют все спамери Сампа, о ном толка и гаварят на Англиском Дискорде Сампа.


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 
916262735363738394445:
                
OnPlayerCheat(playeridAC_GUNHACK_codeAC_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(playerid000); 
Компилятор выплюнул предупреждение о несовпадении тегов


Re: Скриптинг курилка - Romz - 07.10.2017

Как это возможно?



PHP код:
new mytext[10];
public 
OnGameModeInit() {
    
format(mytext102"Чернила с поверхности папируса легко смывались, и лист мог использоваться вторично для новых записей.");
    
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(mytext102"Чернила с поверхности папируса легко смывались, и лист мог использоваться вторично для новых записей.");
    
printf("%d - %s"sizeof(mytext), mytext);
    return 
1;

Почему оно не выдает никаких ошибок (crashdetect молчит) но при это выводит текст полностью?
Потому что надо читать документацию.
Правильный код будет:
PHP код:
new mytext[10]; 
public 
OnGameModeInit() { 
    
format(mytextsizeof(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(mytextsizeof(mytext), "Чернила с поверхности папируса легко смывались, и лист мог использоваться вторично для новых записей."); 
    
printf("%d - %s"sizeof(mytext), mytext); 
    return 
1

Не вник в суть вопроса? Не лезь!