Другое С/С++ Вопрос - Ответ

вайега52

Налуашил состояние
Модератор
3,001
3,136
проблема есть я через RpGeometryForAllMaterials(atomic->geometry, material_callback, veh); крашу текстуру и все норм типо material->color нормально применяется, а если делать material->texture = texture; то в таком случае получается так что применяется на модель, а не на cvehicle и еще оно применяется только при спавне машины после спавна нельзя изменить текстуру. Как это можно исправить?
Нужно в каллбеке перед вызовом функции рендера изменять текстурой, а в каллбеке после вызова функции возвращать старую текстуру
 

TheLeftExit

Известный
38
26
Приветы, а можно как-то внутри C++ хука, зарегистрированного в registerChatCommand, асинхронно ждать внутри своего кода?
Допустим, у меня есть такое:
псевдокод:
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"1\"");
// спать 300
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"2\"");
// спать 300
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"3\"");

На деле код спит полсекунды и затем все три строки в чат одновременно выдаёт (и две из них отлетают антифлудом). Cleo/sampfuncs дают какой-то способ поставить свой код в очередь выполняться через X мс?

Или если я могу сам подождать в соседнем треде, а потом отправить остальной код выполняться в нужный (как Control.Invoke), так ещё лучше.

upd: похоже, я могу спокойно гонять callOpcode из соседнего треда, в котором sleep ничего не блокирует. Вопрос снят :)
 
Последнее редактирование:

TheLeftExit

Известный
38
26
Вопрос выше снова актуален. Оказывается, вызов клео из соседних тредов небезопасен; я в одной функции добавил вообщение в чат (AddChatMessage) и запустил тред, который добавляет другое сообщение в чат, и в итоге второе сообщение превратилось в какую-то юникодную букву (вылечилось только комментированием AddChatMessage из кода соседнего треда).

Либо в принципе как-то потоко-безопасно выполнять код, когда игрок нажмёт нужные мне кнопки. Я могу чекать в цикле isKeyPressed/isKeyDown, но непонятно как в C++ это делать и не блокировать игру. В Lua делают wait(0), я полагаю moonloader это интерпретирует как "вернуться к скрипту в следующий фрейм", вот мне надо как-то сделать то же самое в C++.
 
Последнее редактирование:

AdCKuY_DpO4uLa

Адский дрочер
Друг
374
825
Приветы, а можно как-то внутри C++ хука, зарегистрированного в registerChatCommand, асинхронно ждать внутри своего кода?
Допустим, у меня есть такое:
псевдокод:
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"1\"");
// спать 300
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"2\"");
// спать 300
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"3\"");

На деле код спит полсекунды и затем все три строки в чат одновременно выдаёт (и две из них отлетают антифлудом). Cleo/sampfuncs дают какой-то способ поставить свой код в очередь выполняться через X мс?

Или если я могу сам подождать в соседнем треде, а потом отправить остальной код выполняться в нужный (как Control.Invoke), так ещё лучше.

upd: похоже, я могу спокойно гонять callOpcode из соседнего треда, в котором sleep ничего не блокирует. Вопрос снят :)
Вопрос выше снова актуален. Оказывается, вызов клео из соседних тредов небезопасен; я в одной функции добавил вообщение в чат (AddChatMessage) и запустил тред, который добавляет другое сообщение в чат, и в итоге второе сообщение превратилось в какую-то юникодную букву (вылечилось только комментированием AddChatMessage из кода соседнего треда).

Либо в принципе как-то потоко-безопасно выполнять код, когда игрок нажмёт нужные мне кнопки. Я могу чекать в цикле isKeyPressed/isKeyDown, но непонятно как в C++ это делать и не блокировать игру. В Lua делают wait(0), я полагаю moonloader это интерпретирует как "вернуться к скрипту в следующий фрейм", вот мне надо как-то сделать то же самое в C++.
Изначально использовать клео опкоды в С/C++ - бред, когда у тебя под рукой есть возможность напрямую вызывать методы по адресам. Белиберда у тебя из-за того, что ты пытаешься из двух разных потоков писать/читать в одну область памяти, из-за чего происходит гонка потоков, которая вызывает UB. В обычном случае игра просто должна вылететь. Советую ознакомиться с std::mutex / std::lock_guard, но в твоем случае, можно и одним потоком обойтись, просто написав примитивный таймер на GetTickCount64() (win), либо std::chrono (под любую платформу)
 

RTD

Потужно
Модератор
410
486
Вопрос выше снова актуален. Оказывается, вызов клео из соседних тредов небезопасен; я в одной функции добавил вообщение в чат (AddChatMessage) и запустил тред, который добавляет другое сообщение в чат, и в итоге второе сообщение превратилось в какую-то юникодную букву (вылечилось только комментированием AddChatMessage из кода соседнего треда).

Либо в принципе как-то потоко-безопасно выполнять код, когда игрок нажмёт нужные мне кнопки. Я могу чекать в цикле isKeyPressed/isKeyDown, но непонятно как в C++ это делать и не блокировать игру. В Lua делают wait(0), я полагаю moonloader это интерпретирует как "вернуться к скрипту в следующий фрейм", вот мне надо как-то сделать то же самое в C++.
 

TheLeftExit

Известный
38
26
Спасибо за ответы. Мне в итоге не хватало понимания, что mainloop из SF шаблона гоняется не единожды, а на каждый фрейм. В итоге завёл очередь колбеков, кидаю туда колбеки из фоновых потоков, и в mainloop их запускаю (с блокировкой).

пофлекшу: https://www.blast.hk/threads/236901/#post-1611310
 
Последнее редактирование:

AdCKuY_DpO4uLa

Адский дрочер
Друг
374
825

loandel

Новичок
2
0
как сделать silent aim? пробовал смотреть луа там юзают пакеты пробовал менять позицию z что бы пуля летела не туда куда целюсь, но реакции 0.
Так же смотрел как это реализовано в финал проджекте тоже ничего не получилось. Если что юзаю https://github.com/DpO4uLa/SAMP_API
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
374
825
как сделать silent aim? пробовал смотреть луа там юзают пакеты пробовал менять позицию z что бы пуля летела не туда куда целюсь, но реакции 0.
Так же смотрел как это реализовано в финал проджекте тоже ничего не получилось. Если что юзаю https://github.com/DpO4uLa/SAMP_API
https://www.blast.hk/threads/47392/ -> https://nc.sr.team/s/NRRj85YKnm52aTp
Кто ищет, тот всегда найдет. На просторах сети полным полно разных реализаций, эти я нашел минуты за 3.
Если не ошибаюсь, то на бх есть гайды по мат. части того, как работает любой аим
 
  • Нравится
Реакции: undefine и loandel

TokyoQq

Новичок
20
4
есть ли структура у cef'a 252 пакета что то по типу stOnFootData
лучше конечно если есть на амазинг у них как я знаю он отличается от обычного
 
  • Клоун
Реакции: nmatez, fuflexxxx и bydko

вайега52

Налуашил состояние
Модератор
3,001
3,136
есть ли структура у cef'a 252 пакета что то по типу stOnFootData
лучше конечно если есть на амазинг у них как я знаю он отличается от обычного
252 пакет это кастомный пакет амайзинга, не продуманный изначально в сампе, соответственно у него структура полностью своя, при этом, насколько знаю, это еще работает в связке с дополнительным шифрованием, поэтому, так просто содержимое ты вряд-ли достанешь
 

TokyoQq

Новичок
20
4
как отключить поворот камеры скм ( назад ), q ( налево ), e ( направо )
они биндится в esc пытался найти в ida - ненашел, на форуме тоже
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
374
825
как отключить поворот камеры скм ( назад ), q ( налево ), e ( направо )
они биндится в esc пытался найти в ida - ненашел, на форуме тоже
15 минут в иде

incar/left -> 0x0053FDD8 -> patch 0xEB -> orig 0x75
incar/right -> 0x0053FE18 -> patch 0xEB -> orig 0x75
incar/behind -> 0x0053FE78 -> patch 0x90 0x90 -> orig 0x74 0x03
onfoot/behind -> 0x0053FEC8 -> patch 0x90 0x90 -> orig 0x74 0x03
 
  • Нравится
Реакции: вайега52

chromiusj

Известный
Модератор
6,018
4,334
как расшифровать пакет амз типо они каждый раз отправляют разные данные в цеф а если я буду испоьзовать данные которые они отправляли до то тогда меня просто кикнет сервер
у них пакет зашифрован потому что,нужно расшифровать пакет и зашифровать тем же методом что и у них