Анимации при cl_lw 0

Сообщения
24
Реакции
25
Помог
1 раз(а)
Доброго времени суток. Для исправления руки с кастомным оружием мне понадобилось принудительно выставлять клиентам cl_lw 0, подробнее: https://dev-cs.ru/threads/6981/#post-62769. Теперь же у меня совсем нет анимаций в наблюдателях у всего оружия, кроме кастомного. Можно ли каким-либо способом принудительно отправлять анимации наблюдателям?
 
Сообщения
855
Реакции
532
Помог
13 раз(а)
r1ghty, например не использовать CD_ID, а cd_flnextattack и фильтровать с помощью pev'ы, например pev_impulse
 
Сообщения
24
Реакции
25
Помог
1 раз(а)
BalbuR, то есть с CD_ID не существует вариантов по исправлению анимаций?
 
Сообщения
145
Реакции
276
Помог
1 раз(а)
С чего вы взяли, что можно менять CD_ID в апдейтдате без последствий ? Его можно менять, если вы хотите стрелять из пистолета, а сделать эффекты как от awp например. В этом случае можно подменить ID и обмануть клиент.

В вашем случае, надо блокировать некстаттак, отправив на него значение 99999999.9 и уж вам точно не стоит лезть в клиент и ковыряться в его кварах, т.к. у игрока может быть протектор и вместо реального значение квара, вы получите дырку от бублика.
 
Сообщения
24
Реакции
25
Помог
1 раз(а)
SISA,
Код:
public FM_Hook_ClientUserInfoChanged(id) {
    static UserInfo[6] = "cl_lw", ClientValue[2], ServerValue[2] = "0";
    get_user_info(id, UserInfo, ClientValue, charsmax(ClientValue));
    
    if(strcmp(ClientValue, ServerValue)) {
        set_user_info(id, UserInfo, ServerValue);
        return FMRES_SUPERCEDE;
    }
    
    return FMRES_IGNORED;
}
Это не меняет квары на клиенте
 

Rey

Сообщения
197
Реакции
190
Помог
5 раз(а)
Но ведь квар cl_lw совсем же не для смены рук... ?
Как так то...
cl_righthand совсем не помогает? Значения -1, 0 и 1 например???

Для исправления руки с кастомным оружием мне понадобилось принудительно выставлять клиентам cl_lw 0
Бедные игроки ?

Эх...
 
Сообщения
24
Реакции
25
Помог
1 раз(а)
SISA, какой будет плюс если я сделаю тоже самое, но через NextAttack, если через CD_ID замена бодигруппы идеально работает и анимации обычного оружия в наблюдателях это единственный баг?
25 Июл 2019
Rey, предлагаете в момент взятия ножа и смены на кастомное оружие выставить другой cl_righthand, а затем вернуть обычное значение?
25 Июл 2019
Исправлено:
Код:
new WeaponNames[][] = { "weapon_knife", "weapon_glock18", "weapon_ak47", "weapon_aug", "weapon_awp", "weapon_c4", "weapon_deagle", "weapon_elite", "weapon_famas",
    "weapon_fiveseven", "weapon_flashbang", "weapon_g3sg1", "weapon_galil", "weapon_hegrenade", "weapon_m3", "weapon_xm1014", "weapon_m4a1", "weapon_m249", "weapon_mac10",
    "weapon_mp5navy", "weapon_p90", "weapon_p228", "weapon_scout", "weapon_sg550", "weapon_sg552", "weapon_smokegrenade", "weapon_tmp", "weapon_ump45", "weapon_usp" };

.....
for(new i = 0; i < 30; i++)
        RegisterHam(Ham_CS_Weapon_SendWeaponAnim, WeaponNames[i], "ham_CS_SendWeaponAnim");

.....

public ham_CS_SendWeaponAnim(Weapon, Anim, Skiplocal) {
    new id = get_member(Weapon, m_pPlayer);
    
    if(!IsCustomWeapon(Weapon))
        SendWeaponAnim(id, Anim, 0);
    else
        SendWeaponAnim(id, Anim, get_entvar(Weapon, var_body));
    
    return HAM_SUPERCEDE;
}
 
Сообщения
855
Реакции
532
Помог
13 раз(а)
какой будет плюс если я сделаю тоже самое, но через NextAttack, если через CD_ID замена бодигруппы идеально работает
не идеально, раз у вас появился баг с "руками"

CD_flNextAttack нам нужен для оверрайда предикшена клиента, т.е. чтобы он не выполнял действия заложенные движком без нашего ведома
Таким образом мы без проблема выставляем значения какие хотим(ну или почти). Например с выстрелом все чуть иначе - нужны дополнительные хуки, дабы стандартные звуки "не выпирали откуда попало".

Чтобы отобразить спектрам анимацию у определенного заданного игрока используют данный код SendWeaponAnim

PHP:
    set_entvar(pPlayer, var_weaponanim, iAnim);

    message_begin(MSG_ONE, SVC_WEAPONANIM, _, pPlayer);
    write_byte(iAnim);
    write_byte(iBody);
    message_end();

    new PlayersID[MAX_CLIENTS], pPlayerID, iPlayersNum;

    get_players(PlayersID, iPlayersNum, "bc");

    for(new i = 0; i < iPlayersNum; i++)
    {
        pPlayerID = PlayersID[i];

        if (get_entvar(pPlayerID, var_iuser1) != OBS_IN_EYE)
            continue;

        if(get_entvar(pPlayerID, var_iuser2) != pPlayer)
            continue;

        set_entvar(pPlayerID, var_weaponanim, iAnim);

        message_begin(MSG_ONE, SVC_WEAPONANIM, _, pPlayerID);
        write_byte(iAnim);
        write_byte(iBody);
        message_end();
    }
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
если через CD_ID замена бодигруппы идеально работает
Я далеко не спец, но насколько я припоминаю много пробовали сделать бодигрупы у оружия, и всегда вылазили разного рода косяки на клиенте. Знаю еще один вариант это атач доп ентити к игроку. Подробностей не знаю, но и в этмо способе куча гемороя с размещением оружия в руках у игрока.
Потмоу мне кажется, что проще положить болт на по питки завести все это дело и делать по старинке. Но я могу ошибся, и когда то найдут способ адекватно применять бодигрупы у оружия
 
Сообщения
145
Реакции
276
Помог
1 раз(а)
fantom, Способ - хардкод, в первую очередь из-за деплоя и проскакивания кадров (все пытаются фиксить это в апдейтдате, хотя там нужен пресинк). Потом будет баг с выбором оружия в HUD (это только в модели решается), потом будет куча жеского кода со спеками, скрытием модели, и т.д. Всё это решаемо, но под это нужно писать отдельную систему.

Я так понимаю, никто не тестирует код связанный с бодями на низким fps_max и cl_cmdrate клиента и желательно с высоким пингом. Там вылезает много "Приятных" сюрпризов...

2r1ghty
Ваш способ никогда нормально работать не будет, поверьте. Решив одну проблему, вы тут же напоритесь на другую и так до бесконечности. Тема с бодями v_ моделей обсасывается последние 10 лет и в этой области перепробованы все возможные способы и десятки умов бились над решением этой задачи в попытке найти простое и элегантное решение. И не забывайте, что мессага SVC_WEAPONANIM ограничена 254ю бодями, а модель 127ю костями, так что особо вы не разгуляетесь, даже решив все проблемы связанные с кодом.
 
Последнее редактирование:

Rey

Сообщения
197
Реакции
190
Помог
5 раз(а)
Ребят, я конечно слабо понимаю о чем вы сейчас говорите (совсем далека от анимации и 3д моделирования, не говоря уже о физических/программных аспектах этого вопроса). Но, зачем же так "хамски" (не нашла другого слова просто, более мягкого), cl_lw 0 впихивать игрокам? На кнайф серверах еще есть какой то смысл в этом, но на пабликах то? И все это ради "кастомной модельки" оружия? Честное слово, либо я чего то недопонимаю, ради чего так морочится изза каких то моделек, и стоят ли они на самом деле того. Или же "Зачем строить дом из говна и палок?" ведь он будет не прочнее чем у "Ниф-Нифа" из сказки о 3х хрюнях :dntknw:
P.s. Если что то лучше сразу скажите "Не лезь женщина!" или же "Не вникай", я дальше пойду и не буду вас морочить еще моим графоманством ?
25 Июл 2019
r1ghty, Нет нет, я не предлагаю, я просто хочу/пытаюсь понять, как так выходит что, cl_lw пользут ради "смены руки" =) (пока безуспешно) ?
 
Последнее редактирование:

d3m37r4

111111
Сообщения
1,454
Реакции
1,194
Помог
10 раз(а)
SISA,
Код:
public FM_Hook_ClientUserInfoChanged(id) {
    static UserInfo[6] = "cl_lw", ClientValue[2], ServerValue[2] = "0";
    get_user_info(id, UserInfo, ClientValue, charsmax(ClientValue));
   
    if(strcmp(ClientValue, ServerValue)) {
        set_user_info(id, UserInfo, ServerValue);
        return FMRES_SUPERCEDE;
    }
   
    return FMRES_IGNORED;
}
Это не меняет квары на клиенте
И чего set_user_info реально лезет и меняет данные?
25 Июл 2019
Rey, чего только не встретишь в попытке наколхозить:)
 

Rey

Сообщения
197
Реакции
190
Помог
5 раз(а)
d3m37r4, ну вот тут ты прав, хлебом не корми, дай поколхозить. А все Ленин виноват, он колхозы сделал мейнстримом xD До сих пор вот аукается)
(это шутеечка, никого не хотела зацепить или же подкинуть камушек кому либо в огородик)
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
cl_lw 0 впихивать игрокам
в даном случае он не меняется на клиенте (пример от простотемы). А сервер воспринимает так.
как так выходит что, cl_lw пользут ради "смены руки"
Он отключает клиент предикшн, который при кастомном оружии зачастую мешает. Но он чертовски нужен при деф оружии ибо помогает сгладить потери пакетов или высокий пинг.
 

Rey

Сообщения
197
Реакции
190
Помог
5 раз(а)
fantom, дк я вот об этом и говорю, все начинает считаться на сервере, а пока "туда-сюда" придет все, да еще и если задержка 50мс+ то, то еще удовольствие стрелять то xD Да и к том уже, если верить (а я вер... думаю что так и есть) ТЫК, ставя cl_lw 0, вместе с уходом "математики оружия" на сервер, отключается и лагокомпенсация, т.е. cl_lc (значение квара, визуально, остается как 1, но по факту - 0). Кстати были бы интересны и другие мнения на этот счет, но это я думаю уже другая тема.
Кварлист конечно, не самый свежий, но адекватнее я не находила.
 
Сообщения
145
Реакции
276
Помог
1 раз(а)
У полей setinfo есть лимит, так что с ними поаккуратнее надо + протектор может запретить запись данных в сетинфо.

в даном случае он не меняется на клиенте (пример от простотемы). А сервер воспринимает так.
Сервер не воспринимает клиентские квары. В лучшем случае, он может распознать поля сетинфо, некоторые из которых заложены в базовый комплект и снабжены оффсетами, типа "_vgui_menu".

r1ghty, по сути, обманывает клиент и изменяет поле setinfo. Т.е. зайдя на такой сервер, у меня сам квар останется в нормальном значении (cl_lw 1), но фактически клиент будет обрабатывать данные со значением (cl_lw 0) и таки нет, оно будет работать, пока игрок не перезапустит клиент. Так что зайдя на любой другой сервер без перезапуска клиента, игрок продолжит играть со значением cl_lw 0 недоумевая, почему у него визуально изменилась стрельба и нож перевалился в левую руку :smile3:
25 Июл 2019
И все это ради "кастомной модельки" оружия?
Ну, допустим, не одной. Таким образом можно объединить сотни моделей в несколько штук, существенно сократив их общий размер и скорость закачки игроку. Допустим, всё модели (v_ p_ w_) дефолтного оружия можно вообще объединить в одну модель.

да еще и если задержка 50мс+ то, то еще удовольствие стрелять то
Визуальная разница даже при 150мс особо не заметка. Зато, в отсутствии предикшена, вы точно видите куда летят пули и в какой момент времени.
 
Последнее редактирование:
Сообщения
24
Реакции
25
Помог
1 раз(а)
SISA, Согласен, благодаря этому я уместил 30 моделей в 35,4 мегабайта
 
Сообщения
106
Реакции
-4
SISA, какой будет плюс если я сделаю тоже самое, но через NextAttack, если через CD_ID замена бодигруппы идеально работает и анимации обычного оружия в наблюдателях это единственный баг?
25 Июл 2019
Rey, предлагаете в момент взятия ножа и смены на кастомное оружие выставить другой cl_righthand, а затем вернуть обычное значение?
25 Июл 2019
Исправлено:
Код:
new WeaponNames[][] = { "weapon_knife", "weapon_glock18", "weapon_ak47", "weapon_aug", "weapon_awp", "weapon_c4", "weapon_deagle", "weapon_elite", "weapon_famas",
    "weapon_fiveseven", "weapon_flashbang", "weapon_g3sg1", "weapon_galil", "weapon_hegrenade", "weapon_m3", "weapon_xm1014", "weapon_m4a1", "weapon_m249", "weapon_mac10",
    "weapon_mp5navy", "weapon_p90", "weapon_p228", "weapon_scout", "weapon_sg550", "weapon_sg552", "weapon_smokegrenade", "weapon_tmp", "weapon_ump45", "weapon_usp" };

.....
for(new i = 0; i < 30; i++)
        RegisterHam(Ham_CS_Weapon_SendWeaponAnim, WeaponNames[i], "ham_CS_SendWeaponAnim");

.....

public ham_CS_SendWeaponAnim(Weapon, Anim, Skiplocal) {
    new id = get_member(Weapon, m_pPlayer);
   
    if(!IsCustomWeapon(Weapon))
        SendWeaponAnim(id, Anim, 0);
    else
        SendWeaponAnim(id, Anim, get_entvar(Weapon, var_body));
   
    return HAM_SUPERCEDE;
}
Поделись полным источникам.
25 Июл 2019
Код:
public FM_Hook_ClientUserInfoChanged(id) {
    static UserInfo[6] = "cl_lw", ClientValue[2], ServerValue[2] = "0";
    get_user_info(id, UserInfo, ClientValue, charsmax(ClientValue));
   
    if(strcmp(ClientValue, ServerValue)) {
        set_user_info(id, UserInfo, ServerValue);
        return FMRES_SUPERCEDE;
    }
   
    return FMRES_IGNORED;
}
А как сделать чтобы нож в правом при cl_lw "0"
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу