Всем привет, у меня собственно такая дилема.
Я хочу, чтобы патроны к глоку и к автомату мп5 в первой хл были раздельными. Чтобы у глока был свой калибр, у мп5 свой (у меня вместо мп5 стоит М16А2). Как их разделить?
***FantoM*** неа, не туда. Там описывается новый тип пуль. А патроны всё те же у револьвера остаются, 357-ые. Чтобы сменить тип патронов, нужно в функции
C++ Source Code:
int CMP5::GetItemInfo(ItemInfo *p)
написать в строке
C++ Source Code:
p->pszAmmo1 = "9mm";
свои патроны, например
C++ Source Code:
p->pszAmmo1 = "5_56x45mm";
Добавлено 12-05-2015 в 20:48:
И исправить все проверки в коде этого оружия. Например, там есть мерзкая штука:
C++ Source Code:
1
void CMP5::Reload( void )
2
{
3
if ( m_pPlayer->ammo_9mm <= 0 )
4
return;
5
6
DefaultReload( MP5_MAX_CLIP, MP5_RELOAD, 1.5 );
7
}
Которую надо поменять на православную:
C++ Source Code:
1
void CMP5::Reload( void )
2
{
3
if ( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 )
Ku2zoff писал: Которую надо поменять на православную:
Православие плохо сочетается со свободой и демократией. Ну, то есть, с предиктингом. Для предиктинга ещё придётся немного повозиться с передачей инвентаря на клиент.
XaeroX я тут пришёл к выводу, что клиентские пушки не нужны. В текущей реализации точно. Здесь либо переписывать систему, либо отказаться от неё вообще. Взять хотя бы вот эту самую передачу патронов на клиент: патроны передаются, но не весь функционал доделан, перезарядка, к примеру, всё равно серверная. А говнокод с переключением пушек? Ведь в hl_weapons.cpp присутствуют и CBasePlayer::SelectItem и CBasePlayer::SelectLastItem, только они не используются. Как я с этим делом не воевал, не получилось устранить мигание при работающей анимации holster.
Да, через дельту самый эффективный.
Правда, разрабы халфы чудаки - насоздавали кучи iuser-ов и сами же почти все их выюзали. Хотя имея сорцы движка, могли и отдельные переменные создать. Ну, торопились, наверное.
XaeroX писал: насоздавали кучи iuser-ов и сами же почти все их выюзали.
И стали юзать vuser-ы. Вузеры для передачи векторов, а не интеджеров. Но каждый из 3х компонетов вектора - флоат, так что можно их тоже юзать
Цитата:
XaeroX писал: Хотя имея сорцы движка, могли и отдельные переменные создать.
Меня всегда огорчало, что нельзя добавить собственные переменные в дельту. Для оружий, я считаю, нужна вообще отдельная структура. И она есть (weapon_data_t). Но почему-то всё продублировано через энтварсы игрока.
Добавлено 12-05-2015 в 23:00:
А стоп, не дублировано. У игрока - специфические переменные игрока. Почему бы не передавать патроны в weapon_data_t? Тогда можно будет выкинуть TabulateAmmo и отвязать патроны от игрока. И освободить вузеры и фузеры. Которые очень жалко тратить на пушки. Вот, к примеру, я заюзал iuser3 для ползания, как и авторы DoD. А fuser1 хочу заюзать под стамину.
Добавлено 12-05-2015 в 23:08:
Ох, ну как же выкинуть TabulateAmmo, если эта функция индексирует патроны! Чтобы передавать их как интеджеры.
Добавлено 12-05-2015 в 23:09:
Будет время, попробую передачу всех данных оружия, включая патроны, переместить в weapon_data_t. Не получится только переместить туда m_flNextAttack игрока, потому что при переключении пушки она наверное будет обнуляться.
Ku2zoff писал: Меня всегда огорчало, что нельзя добавить собственные переменные в дельту.
Можно. Но только в том случае, если они учтены в коде дельты в движке. То есть совсем-совсем собственные нельзя, да.
Цитата:
Ku2zoff писал: weapon_data_t
Ну вот в волатиле и будет всё по уму сделано. Тем более что мы, в отличие от вальвы, никуда не торопимся. У нас с вами впереди целая вечность, ну лет 30-40 точно есть в запасе.
XaeroX писал: если они учтены в коде дельты в движке. То есть совсем-совсем собственные нельзя, да.
Ну так я об этом и говорю. Да ладно с ними, с именами. Проблема в количестве. Что если их все переюзать? На пользовательские мессаги и эвенты переходить?
У меня пока ровно одна причина не отказываться от клиентских пушек. Так как разброс пуль и размер прицела я меняю динамически, в зависимости от скорости игрока (не путать с КС, там это дело зависит от порога скорости, т.е. после превышения определённых значений прицел увеличивается, у меня же он пропорционален скорости), то мне нужно этот размер прицела передавать как-то на клиент. Ни энтварсы, ни пользовательская мессага не дают нужного результата: у нелокального игрока прицел изменяет размер не плавно, а с подёргиваниями. Боюсь, что при высоком пинге будет вообще ад. Поэтому я завёл клиентское зеркало для рассчёта размера прицела. Оно работает для КЛИЕНТСКИХ пушек, поэтому даёт всегда плавный результат для любого игрока.
Ku2zoff
Клиентский расчёт визуального прицела - это нормальная практика. А то, что он на сервере рывками - это не заметно, он же только в функциях трейса используется.
Ku2zoff Твой месседж мне напомнил о том, что в бдефе я много мессаг переписал, потому что более половины того, что я передавал на клиент, можно было запросто считать на клиенте. Например, инвентарь: передаешь индекс предмета и пару параметров, а на клиенте читаешь индекс и пишешь к нему любое описание, название и т.д. Так же и поинты защиты у меня считались как защита с шлема и брони и я передавал конечное число на клиент, а потом я подумал, зачем это передавать, если я и так на клиенте знаю защиту брони и шлема. Минус 4 лишних байта в мессаге.