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

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

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

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

2 страниц V   1 2

Проблема с окончанием раунда, или наоборот :o

Статус пользователя AndrewZ
сообщение 3.6.2014, 8:59
Сообщение #1


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Добрый день! Такая проблема появилась: у меня есть древний зомбимод, и после первого заражения появляется 1 зомби (иногда больше, но чаще 1). И вот если этот зомби выйдет из игры, или его кикнут, то раунд не закончится, будут бегать кучи контртеррористов и ждать окончание раунда (пока кто-то не зайдет за терроров и не произойдет game commencing).

Ладно, подумал я, заражу случайного игрока, если зомбей не осталось. Ура, казалось бы, проблема решена, все удачно, игрок заразился... но, если при этом УБИТЬ или выкинуть с сервера ЛЮБОГО игрока, в какой бы команде он ни был, то произойдет чертов game commencing.

Игроки перемещаются между командами таким образом:

Код:
stock fm_set_user_team(index, team, update = 1)
{
set_pdata_int(index, OFFSET_TEAM, team)
if(update)
{
emessage_begin(MSG_ALL, g_msg_teaminfo)
ewrite_byte(index)
ewrite_string(g_teaminfo[team])
emessage_end()
}
return 1
}


Помогите, пожалуйста)


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя AndrewZ
сообщение 3.6.2014, 12:08
Сообщение #2


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Ну же, кто-нибудь


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя iLLuSioN
сообщение 3.6.2014, 12:50
Сообщение #3
Иконка группы

Стаж: 19 лет

Сообщений: 6911
Благодарностей: 7990
Полезность: 1639

Исходник мода давай


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 3.6.2014, 12:56
Сообщение #4
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Апать тему запрещено.

Ну да, дефолтное поведение CS - такое, это не баг. Просто выставления нужного оффсета и отправки месседжа TeamInfo маловато:
Цитата(s1lent)
движок мода не знает, что игра начата, т.к коннект, захода за тера не происходило, а тупо перевод кт за тера и рестарт. И поэтому когда кто-то погибает или заходит в игру, в этот момент в игре происходит тот самый GameCommencing

Используй AMXX-модуль Round Control, после fm_set_user_team() выполняй RC_GameCommencing() для блокировки 'ближайшего' Game_Commencing. Вначале мода вставь такой код:
Код
#tryinclude <roundcontrol>

#if !defined _roundcontrol_included
    #assert "Round Control AMXX module required for plugin!"
#endif

#pragma reqlib RoundControl
#if !defined AMXMODX_NOAUTOLOAD
    #pragma loadlib RoundControl
#endif

В modules.ini прописывать ничего не придётся.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 3.6.2014, 14:17
Сообщение #5


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Работает. Но почему, если сделать победу CT, то в следующем раунде им дается 500$, а ТТ аж 4000 (или 3)?!
Эм.. потому, что игрок как бы "не полностью" CT или TT? Бред какой-то.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 3.6.2014, 14:27
Сообщение #6


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

а не, кажется понял почему
идиотизм


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 3.6.2014, 14:40
Сообщение #7
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(AndrewZ @ 3.6.2014, 16:17) *
если сделать победу CT

О чём речь?

Цитата(AndrewZ @ 3.6.2014, 16:27) *
а не, кажется понял почему

И почему же? Если хорошо описать, в чём неудобство - мб у s1lent'а получится это скорректировать.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 3.6.2014, 15:06
Сообщение #8


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Safety1st,
Ну биохазард после конца раунда раскидывает кого за ТТ, кого за КТ, и если выиграли "выжившие", то есть КТ, (а деньги то выдаются в следующем раунде), то если ты был "выжившим", а био перенес тебя за терров и ты появился на респе ТТ за террористов, то фиг тебе :/ т.е тут получается, что не совсем модуля проблема (хотя хзхз).


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 3.6.2014, 15:09
Сообщение #9
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Ах, да) Ну, тогда Round Control тут не при чём.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 3.6.2014, 15:20
Сообщение #10


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Safety1st,
Как можно заблокировать выдачу денег? Проверять в конце количество денег и выдавать его в начале раунда, это вариант? Или мож как-то интереснее есть способ?


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 3.6.2014, 15:34
Сообщение #11


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Safety1st,
А кстати, как происходит вообще выдача денег, если, к примеру, сделать победу CT? Ведь деньги выдаются разное количество за задания/убийство всех.. Может, стоит сделать некий параметр, отвечающий за деньги?


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 3.6.2014, 16:04
Сообщение #12
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Мои идеи. Плагин из топика НЕ надо юзать ;) Да, один из очевидных вариантов: отключить дефолтную выдачу, самому решать, кто сколько получит.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 4.6.2014, 11:23
Сообщение #13


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Safety1st,
Что-то я не понял немного, как этот твой код использовать?


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 4.6.2014, 11:46
Сообщение #14
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Там главный функционал. Лови конец раунда, выполняй для каждого игрока. В новом раунде при спавне cs_set_user_money(), если нужно. Как-то так.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 4.6.2014, 11:52
Сообщение #15


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Safety1st,
number of arguments does not match definition

Код
set_pdata_int( id, get_pdata_int( id, m_boolsKilled ) | m_bNotReceivingMoneyNextRound )


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя sweet
сообщение 4.6.2014, 11:54
Сообщение #16
Стаж: 15 лет

Сообщений: 1920
Благодарностей: 597
Полезность: 431

Цитата(Safety1st @ 3.6.2014, 14:56) *
Апать тему запрещено.


А кроме как по другому - её никто не увидит. Инфа 99,9%.


//оффтоп
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 4.6.2014, 12:06
Сообщение #17
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(AndrewZ @ 4.6.2014, 13:52) *
Safety1st,
number of arguments does not match definition

Код
set_pdata_int( id, get_pdata_int( id, m_boolsKilled ) | m_bNotReceivingMoneyNextRound )

Ога, Ашибка. Правильно:
Код
set_pdata_int( id, m_boolsKilled, get_pdata_int( id, m_boolsKilled ) | m_bNotReceivingMoneyNextRound )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 4.6.2014, 12:11
Сообщение #18


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Код
set_pdata_int( id, 222, (1<<16) )

Я сделал так и работает. Что я сделал не так? =D


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 4.6.2014, 12:23
Сообщение #19


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

Стаж: 18 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Ну ладно, глупые вопросы c:
В общем, вроде как все работает и всё супер, спaсибочки :)


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 4.6.2014, 12:26
Сообщение #20
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(AndrewZ @ 4.6.2014, 14:11) *
Код
set_pdata_int( id, 222, (1<<16) )

Я сделал так и работает. Что я сделал не так? =D

Здесь код стал нечитаемым из-за магических чисел. И ты все прочие прочие биты обнуляешь у игрока. В оффсете не только m_bNotReceivingMoneyNextRound хранится.


Цитата(Safety1st @ 4.6.2014, 13:46) *
Лови конец раунда, выполняй для каждого игрока. В новом раунде при спавне cs_set_user_money(), если нужно. Как-то так.

А можно выставлять только у перемещённых игроков и только им в новом раунде выдавать 'вручную'. В wiki есть алгоритмы расчёта.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: