Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Информационная доска

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

1. Во время создания новой темы аккуратно оформляйте её, не допускайте грамматических ошибок.
2. Описывая проблему старайтесь, как можно больше рассказать о ней, а так же о действиях с сервером после которых она возникла, по возможности подкрепите информацию логами.
3. Если вопрос касается проблемы в работе сервера, то обязательно прикрепляйте список плагинов (введите в консоли сервера: meta list и amxx plugins), настройки server.cfg, логи. Так же указывайте операционную систему, версию HLDS (введите к консоли сервера: version) и где хостится сервер.

Длинную информацию скрывайте под спойлер.
3 страниц V   1 2 3

hlds_i686: corrupted double-linked list

, сервер падает с такой ошибкой
binky
сообщение 11.11.2014, 20:35
Сообщение #21
Стаж: 12 лет

Сообщений: 381
Благодарностей: 24
Полезность: 0

kritik,

Пожалуйста разьясните, вы говорите про эти строки плагина?

giszInfoTarget = engfunc( EngFunc_AllocString, "info_target" );
giszModelP = engfunc(EngFunc_AllocString, "models/molotov/p_molotov.mdl");
giszModelV = engfunc(EngFunc_AllocString, "models/molotov/v_molotov.mdl");


Что с ними сделать нужно?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 21.11.2014, 16:05
Сообщение #22
Стаж: 12 лет

Сообщений: 381
Благодарностей: 24
Полезность: 0

Ваш совет:
Цитата
Все функции с AllocString нужно переместить в plugin_precache.


AllocString встречается только в строчках:
Код:
        giszInfoTarget = engfunc( EngFunc_AllocString, "info_target" );
giszModelP = engfunc(EngFunc_AllocString, "models/molotov/p_molotov.mdl");
giszModelV = engfunc(EngFunc_AllocString, "models/molotov/v_molotov.mdl");


То есть мне нужно перебросить эти 3 строчки в функцию public plugin_precache()

В итоге получим:

Код:
public plugin_precache() {

firespr = precache_model("sprites/flame.spr");

smokespr[0] = precache_model("sprites/black_smoke3.spr");
smokespr[1] = precache_model("sprites/steam1.spr");

precache_sound("molotov/molotov_fire.wav");

precache_model("models/molotov/p_molotov.mdl");
precache_model("models/molotov/v_molotov.mdl");
precache_model("models/molotov/w_molotov.mdl");
precache_model("models/molotov/w_broke_molotov.mdl");

// А здесь дописал наши 3 строчки
giszInfoTarget = engfunc( EngFunc_AllocString, "info_target" );
giszModelP = engfunc(EngFunc_AllocString, "models/molotov/p_molotov.mdl");
giszModelV = engfunc(EngFunc_AllocString, "models/molotov/v_molotov.mdl");

}


Правильно???
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 21.11.2014, 16:56
Сообщение #23


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

в теории правильно
или в init

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 21.11.2014, 18:36
Сообщение #24
Стаж: 12 лет

Сообщений: 381
Благодарностей: 24
Полезность: 0

Или указанные 3 строчки в начало функции запихнуть?
если углубиться в алгоритм, то какая разница в какой функции они выполняются?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 21.11.2014, 18:47
Сообщение #25


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(binky @ 21.11.2014, 18:36) *
Или указанные 3 строчки в начало функции запихнуть?
если углубиться в алгоритм, то какая разница в какой функции они выполняются?

большая разница
вызывать один раз функцию или вызывать 1000 раз функцию
какая разница сколько ты присядешь
1 или 1000


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 21.11.2014, 18:53
Сообщение #26
Стаж: 12 лет

Сообщений: 381
Благодарностей: 24
Полезность: 0

plugin_precache вызывается 1 раз и plugin_init вызывается 1 раз...
где 1000?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 21.11.2014, 18:55
Сообщение #27


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

правильно

а какой-либо cur_weeapon 100500 раз вызывается
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 21.11.2014, 23:35
Сообщение #28
Стаж: 12 лет

Сообщений: 381
Благодарностей: 24
Полезность: 0

Указанные строчки с EngFunc_AllocString встречаются только в plugin_init (который вызывается 1 раз) и что толку если я их перенесу в plugin_precache (который тоже вызывается 1 раз)... В местах которые вызываются 100500 раз строчек с EngFunc_AllocString нет...
Что дальше?

Кстати что за странное значение??
set_pev(ent, pev_nextthink, 99999.0);


Отредактировал: binky, - 22.11.2014, 0:10
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 22.11.2014, 11:07
Сообщение #29
Стаж: 12 лет

Сообщений: 381
Благодарностей: 24
Полезность: 0

Кстати в версиях плагина до 3.1 эта строчка была
set_pev(ent, pev_nextthink, -1);
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
yukish
сообщение 23.11.2014, 12:13
Сообщение #30
Стаж: 12 лет

Сообщений: 596
Благодарностей: 29
Полезность: 0

Цитата(binky @ 22.11.2014, 0:35) *
Указанные строчки с EngFunc_AllocString встречаются только в plugin_init (который вызывается 1 раз) и что толку если я их перенесу в plugin_precache


Нету разницы. Обе функции вызываются по 1 разу.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 23.11.2014, 19:11
Сообщение #31
Стаж: 12 лет

Сообщений: 381
Благодарностей: 24
Полезность: 0

Ребята помогите, что делать с этим плагином, если обе функции вызываются по 1 разу, то смысл перебрасывать строчки.
В чем кривизна этого плагина??
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 23.11.2014, 22:33
Сообщение #32
Стаж: 12 лет

Сообщений: 381
Благодарностей: 24
Полезность: 0

СТОП. СТОП. СТОП!
Я НАШЁЛ МЕСТО ГЛЮКА!

Сравнивая строчки плагина со старыми версиями, я нашёл место глюка.
Если в нижеприведённой функции заменить
set_pev(ent, pev_nextthink, 99999.0); (такое значение в новых версиях - 3.20 и 3.30)
на
set_pev(ent, pev_nextthink, -1); (такое значение было в версии 3.1 этого плагина)
то параллельно с Молотовым начинает кидаться и НЕ-граната.

Но это не самое главное... Самое важное, что сервер после 6-10 бросков подряд тупо виснет. Всегда!
То есть глюк не нужно ждать часами, его можно получить за 1 минуту.

Короче глюк в этом значении. 100%
Какое его нужно ставить??? Что за величины такие странные то "99999.0" то "-1" ???


Здесь весь плагин - https://c-s.net.ua/forum/topic67908s0.html#entry681469

Вот глючащая функция:
Код:

public grenade_throw(id, ent, wid) {

if (!get_pcvar_num(pEnabled) || !is_user_connected(id) || wid != CSW_HEGRENADE) {
return PLUGIN_CONTINUE;
}

if (!g_hasMolotov[id] && !get_pcvar_num(pOverride)) {
return PLUGIN_CONTINUE;
}

g_hasMolotov[id]--;
engfunc(EngFunc_SetModel, ent, "models/molotov/w_molotov.mdl");
set_pev(ent, pev_nextthink, 99999.0);

return PLUGIN_CONTINUE;
}


Помогите добить этот глюк.

Отредактировал: binky, - 23.11.2014, 22:34
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 24.11.2014, 0:27
Сообщение #33


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

pev_nextthink время, через которое удален объект будет или вызван..
как-то так...


set_pev(ent, pev_nextthink, 99999.0);
попробуй так
Код:
 set_pev(ent, pev_nextthink, get_gametime() + get_pcvar_float(pFireTime) + 1.0);
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 24.11.2014, 12:25
Сообщение #34
Стаж: 12 лет

Сообщений: 381
Благодарностей: 24
Полезность: 0

Цитата(Legenda @ 23.11.2014, 23:27) *
pev_nextthink время, через которое удален объект будет или вызван..
как-то так...


set_pev(ent, pev_nextthink, 99999.0);
попробуй так
Код:
 set_pev(ent, pev_nextthink, get_gametime() + get_pcvar_float(pFireTime) + 1.0);


Глюк 100% здесь.
А зачем такое огромное значение забито???
Аж 99999.0 ????
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 24.11.2014, 19:37
Сообщение #35
Стаж: 12 лет

Сообщений: 381
Благодарностей: 24
Полезность: 0

Скриптеры. Подскажите!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 24.11.2014, 19:50
Сообщение #36


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

попробовал как я выше написал?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
binky
сообщение 24.11.2014, 22:20
Сообщение #37
Стаж: 12 лет

Сообщений: 381
Благодарностей: 24
Полезность: 0

Вместо
set_pev(ent, pev_nextthink, 99999.0);
поставил
set_pev(ent, pev_nextthink, get_gametime() + get_pcvar_float(pFireTime) + 1.0);
через 2 часа работы сервер упал.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 24.11.2014, 22:43
Сообщение #38


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(binky @ 24.11.2014, 22:20) *
Вместо
set_pev(ent, pev_nextthink, 99999.0);
поставил
set_pev(ent, pev_nextthink, get_gametime() + get_pcvar_float(pFireTime) );
через 2 часа работы сервер упал.

попробуй еще без + 1.0
Код:
set_pev( ent, pev_nextthink, get_gametime() + get_pcvar_float(pFireTime) );
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
csgamerok
сообщение 25.11.2014, 14:16
Сообщение #39
Стаж: 12 лет

Сообщений: 265
Благодарностей: 16
Полезность: 0

99999.0 секунд??? а зачем???
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
binky
сообщение 25.11.2014, 21:45
Сообщение #40
Стаж: 12 лет

Сообщений: 381
Благодарностей: 24
Полезность: 0

Цитата(Legenda @ 24.11.2014, 21:43) *
попробуй еще без + 1.0
Код:
set_pev( ent, pev_nextthink, get_gametime() + get_pcvar_float(pFireTime) );



Аналогично. Упал.
Нельзя ли эту функцию заменить, какой-то аналогичной?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
3 страниц V   1 2 3
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 2 гостей читают эту тему: