PDA

Просмотр полной версии : С/С++ Вопрос - Ответ


Страницы : 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Dark_Knight
25.12.2016, 16:36
Можно через событие WM_KEYUP в сообщениях окна.

iAmerican
25.12.2016, 20:57
Как проверить кнопку на однократное нажатие?
Желательно без огромных хуков клавиатуры.


Для работы с кнопками можно использовать метод GetAsyncKeyState(Байт_код), но с ней иногда бывают проблеммы(залипание, фантомное срабатывание иногда просто не действует), поэтому опишем свою функцию.

Прототип:

C++:






BOOL
State_Key
(
int
Key
,
DWORD dwTimeOut
)
;




Key - байт код клавиши

dwTimeOut - время до возможности повторного действия в Мсек(не совсем точное определение)

Определяем структуру.

C++:






static
struct
_Keys
{
bool
bPressed
;
DWORD dwStartTime
;
}
kPressingKeys
[
256
]
;




функа :

C++:






BOOL
State_Key
(
int
Key
,
DWORD dwTimeOut
)
{
if
(
HIWORD
(
GetKeyState
(
Key
)
)
)
{
if
(
!
kPressingKeys
[
Key
]
.
bPressed
||
(
kPressingKeys
[
Key
]
.
dwStartTime
&&
(
kPressingKeys
[
Key
]
.
dwStartTime
+
dwTimeOut
)

NULL
)
kPressingKeys
[
Key
]
.
dwStartTime
=
GetTickCount
(
)
;
return
TRUE
;
}
}
else
kPressingKeys
[
Key
]
.
bPressed
=
FALSE
;
return
FALSE
;
}




Ставишь в функе время, секунд 15 , думаю хватит.

Автор "крайслер"

Взято с zhyk.ru.

p.s. делал как то без времени , когда запаривался по поводу этого вопроса , но так как все свои сурсы проебал , не помню уже.

TheMY3
27.12.2016, 13:58
Кто нибудь компилил C++ для SAMPFUNCS на Ubuntu? У меня с инклудами проблема, нашел выход только поставить виртуалку и скачать VC 2012

SR_team
27.12.2016, 15:17
Кто нибудь компилил C++ для SAMPFUNCS на Ubuntu? У меня с инклудами проблема, нашел выход только поставить виртуалку и скачать VC 2012


mingw, winegcc, но нет нормального ассемблера

TheMY3
27.12.2016, 21:29
mingw, winegcc, но нет нормального ассемблера


Понял, а через CLion кто-то пробовал компилировать? Мне как то продукты JetBrains по душе, использую их давно, VS в новинку и не совсем привычно.

SR_team
27.12.2016, 22:12
Понял, а через CLion кто-то пробовал компилировать? Мне как то продукты JetBrains по душе, использую их давно, VS в новинку и не совсем привычно.


Тебе IDE нужна или компилятор?

TheMY3
27.12.2016, 23:07
Тебе IDE нужна или компилятор?


Ну IDE с компилятором хотелось бы, посмотрел что в СLion можно компилятор настроить, но пока буду в VS все делать, мне его достаточно

p1cador
28.12.2016, 00:20
Как ввести опред. текст в текстбокс и нажать кнопку ок из стороннего консольного приложения?

https://forum.antichat.xyz/attachments/27132513/

Сделал







C++:






HWND window
=
FindWindowEx
(
NULL
,
NULL
,
NULL
,
"Channel Password"
)
;




Получаю HWND, что делать с ним дальше - хз.

Пробовал чисто протестировтаь

C++:






SendMessage
(
window
,
WM_QUIT
,
0
,
0
)
;
PostMessage
(
window
,
WM_QUIT
,
0
,
0
)
;




Ноль реакции

Ссылки на гайды приветствуются

Woofing Giraffe
01.01.2017, 00:35
Код:






wcex.hInstance = hInstance;
wcex.hIcon = (HICON) ::LoadImage(hInstance, L"icon1.ico", IMAGE_ICON, 32, 32, LR_SHARED);




Пытаюсь установить иконку для приложения. Handle получается равен нулю. Что не так то?

TheMY3
04.01.2017, 20:17
Вопрос назрел, если я сделаю свой чат в игре который бы сохранял сообщения в бд, и выводил их с бд в игру другим игрокам у кого стоит тот же скрипт то админы сервера как то могут это заметить?

Sire Like
04.01.2017, 20:20
Вопрос назрел, если я сделаю свой чат в игре который бы сохранял сообщения в бд, и выводил их с бд в игру другим игрокам у кого стоит тот же скрипт то админы сервера как то могут это заметить?


ну если только не скачают его сами. лол. сначала сделай

TheMY3
04.01.2017, 20:33
ну если только не скачают его сами. лол. сначала сделай


Чисто теоретически не вижу ничего сложного, только как в базу удаленную добавлять записи вопрос, а так все остальное сделать не сложно же

Sire Like
04.01.2017, 20:34
Чисто теоретически не вижу ничего сложного, только как в базу удаленную добавлять записи вопрос, а так все остальное сделать не сложно же


подключись к бд, запрос хуес хуяк, потом туда сюда и всё, только пздц мне кажется бд старадать будет

Dark_Knight
05.01.2017, 00:04
Чисто теоретически не вижу ничего сложного, только как в базу удаленную добавлять записи вопрос, а так все остальное сделать не сложно же


Подключение напрямую к БД, второе - через ПХП запросы. Второй вариантом можно передавать шифрованные строки и не спалить ип удаленной базы.

TheMY3
05.01.2017, 03:23
подключись к бд, запрос хуес хуяк, потом туда сюда и всё, только пздц мне кажется бд старадать будет


Та Че ей страдать, я же не буду в вечном цикле запросы слать, 1 запрос на новые сообщения в пару секунд, вот как выводить когда на паузе игра или свернута, будет ли работать скрипт я хз

CarLCas
06.01.2017, 15:41
Не подскажите адрес функции, которая тпшит игрока на землю когда он достигает z = -100? Просто найти не получается, не сильно опытен в этом, учусь пока

Спасибо, больше не нужно, нашёл

#xz
06.01.2017, 17:37
При сборке проекта streamInfo и других вылазиют ошибки, хотя sdk стоит все вроде бы норм, обьясните че к чему, я не алё :C вот скрин https://www.blast.hk/attachments/6459/

#xz
06.01.2017, 18:02
Сломал на*** ПК, покупай новый


Ха ха, как смешно, вместо того что бы помочь ты ***ню несешь бля.

S0f4aR
13.01.2017, 20:44
помогите с ошибкой иза чего может произойти вот лог

Dark_Knight
13.01.2017, 20:49
Где ошибка?
https://forum.antichat.xyz/attachments/27134136/

Oppenhem
13.01.2017, 23:37
Как в SF API работать с метками на карте, которые на ПКМ ставить(не чекпоинты)?

S0f4aR
14.01.2017, 14:03
Где ошибка?


ты не видешь?? то что он простроен это не значит что все норм первые 2 строки смотри в этом и проблема

Dark_Knight
14.01.2017, 15:01
ты не видешь?? то что он простроен это не значит что все норм первые 2 строки смотри в этом и проблема


Это 2 строки связанные с путем компилированого файла. Ничего страшного в них нет. Просто укажи нормально путь в настройках проекта и все. Ошибок с код тут нет.

S0f4aR
14.01.2017, 18:36
Это 2 строки связанные с путем компилированого файла. Ничего страшного в них нет. Просто укажи нормально путь в настройках проекта и все. Ошибок с код тут нет.


это как тип где будет создаватся файл?

Potniy
14.01.2017, 19:02
это как тип где будет создаватся файл?


даа,

ishi
16.01.2017, 20:53
Скачал эту папку SFPlugin, закинул в папку для проектов, студия пишет что код из более ранней версии студии, предложила обновить его. Вроде как обновила, но он что не компилировался раньше, что не компилируется сейчас.(при этом ошибок в окне вывода нет)

Изменений в проекте я не делал.

Такое поведение - норма, или что-то сделал не так?

iAmerican
17.01.2017, 00:07
Скачал эту папку SFPlugin, закинул в папку для проектов, студия пишет что код из более ранней версии студии, предложила обновить его. Вроде как обновила, но он что не компилировался раньше, что не компилируется сейчас.(при этом ошибок в окне вывода нет)
Изменений в проекте я не делал.
Такое поведение - норма, или что-то сделал не так?


Скрин хотя бы покажи или что нибудь , не чего не понятно.

ishi
17.01.2017, 01:06
Скрин хотя бы покажи или что нибудь , не чего не понятно.


После твоего сообщения я внимательнее изучил вывод сборки, и заметил что у меня ошибка при сборке - не может найти файл d3dx9.h

Осмотрел директорию, такого действительно нету. Но откуда мне его взять? Я просто скинул папку в проекты и начал компилировать - файла тупо не было при загрузке

CarLCas
17.01.2017, 06:59
После твоего сообщения я внимательнее изучил вывод сборки, и заметил что у меня ошибка при сборке - не может найти файл d3dx9.h
Осмотрел директорию, такого действительно нету. Но откуда мне его взять? Я просто скинул папку в проекты и начал компилировать - файла тупо не было при загрузке


Direct SDK скачай.

ishi
17.01.2017, 14:23
Direct SDK скачай.


А куда устанавливать Direct SDK?

(если надо было просто перекинуть d3dx9.h в папку с gameApi>sdk, то я так и сделал, и всё теперь работает)

Shaurma
17.01.2017, 14:46
А куда устанавливать Direct SDK?

(если надо было просто перекинуть d3dx9.h в папку с gameApi>sdk, то я так и сделал, и всё теперь работает)



https://www.microsoft.com/en-us/download/details.aspx?id=6812 (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS9lbi11cy9kb3dubG 9hZC9kZXRhaWxzLmFzcHg_aWQ9NjgxMg)

ishi
17.01.2017, 15:39
https://www.microsoft.com/en-us/download/details.aspx?id=6812 (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS9lbi11cy9kb3dubG 9hZC9kZXRhaWxzLmFzcHg_aWQ9NjgxMg)


Я оттуда и скачал -.-

Woofing Giraffe
17.01.2017, 17:53
Я оттуда и скачал -.-


Установить просто надо

ishi
17.01.2017, 18:12
Установить просто надо


Спасибо с:

ishi
18.01.2017, 03:39
Как сместить радар у худа, или удалить его?

2Shae
19.01.2017, 16:57
Почему крашит, когда символов больше 11?

Код:






GetPrivateProfileStringA(LPCSTR(&szSection), LPCSTR(&szKey), LPCSTR(&szDefaultValue), LPSTR(&szResult), DWORD(256), LPCSTR("SAMPFUNCS\\hui.ini"));




hui.ini

Код:






allah=qwertyuiopas

NarutoUA
19.01.2017, 17:00
hui.ini


У тебя hui.ini не влазит в буффер 11 размера.

Dark_Knight
19.01.2017, 18:36
Советую для ини юзать Boost.PropertyTree. Нет зависимостей и куда удобней.

iAmerican
21.01.2017, 15:56
Советую для ини юзать Boost.PropertyTree. Нет зависимостей и куда удобней.


https://prime-hack.net/threads/cinimanager.2228/ (https://www.blast.hk/redirect/aHR0cHM6Ly9wcmltZS1oYWNrLm5ldC90aHJlYWRzL2NpbmltYW 5hZ2VyLjIyMjgv)

я думаю это куда удобнее.

Dark_Knight
21.01.2017, 16:26
Проще, но функционал мал.

https://habrahabr.ru/post/168951/ (https://www.blast.hk/redirect/aHR0cHM6Ly9oYWJyYWhhYnIucnUvcG9zdC8xNjg5NTEv)

http://www.boost.org/doc/libs/1_63_0/doc/html/property_tree.html (https://www.blast.hk/redirect/aHR0cDovL3d3dy5ib29zdC5vcmcvZG9jL2xpYnMvMV82M18wL2 RvYy9odG1sL3Byb3BlcnR5X3RyZWUuaHRtbA)

property_tree может работать сразу с ini, xml, json, info.

SPNN13
22.01.2017, 03:46
Как найти список всех операторов для написания .sf плагинов?

Sire Like
22.01.2017, 04:52
Как найти список всех операторов для написания .sf плагинов?


Мда, операторов, ахаххаахахахах

SPNN13
22.01.2017, 05:03
Мда, операторов, ахаххаахахахах


Охуительно полезный ответ. Поправь ошибку, если я не прав, и ответь по теме вопроса, если тебе есть что написать кроме стёба/флейма/флуда/ещё какой-нибудь ***ни этого рода

BlackKnigga
22.01.2017, 10:24
Охуительно полезный ответ. Поправь ошибку, если я не прав, и ответь по теме вопроса, если тебе есть что написать кроме стёба/флейма/флуда/ещё какой-нибудь ***ни этого рода


Нигде, функции sf api нигде особо не документированны. Можешь почитать гайды на бх вики.

SPNN13
22.01.2017, 15:36
Нигде, функции sf api нигде особо не документированны. Можешь почитать гайды на бх вики.


Спасибо и на том, значит сворачиваем поиски и ищем описание функционала в самих файлах эпи и сдк

SR_team
22.01.2017, 16:45
Нет зависимостей


А boost по твоему не зависимость?

Stas07
22.01.2017, 21:34
Mvc++ и ядро линукс, программа создается. Но при запуске ос возникает мерцания. Не знаете как исправить?

Dark_Knight
22.01.2017, 23:31
А boost по твоему не зависимость?


Для property_ptree не нужны либы и дллки. Я про это говорил.

SR_team
22.01.2017, 23:39
Для property_ptree не нужны либы и дллки. Я про это говорил.


Ну если dll-ки проблема, то можно все в статику укатать

Sire Like
24.01.2017, 17:45
Иди учись гуглить

Dark_Knight
24.01.2017, 19:22
А ты говори конкретнее, показывай код и т.д.

Dark_Knight
24.01.2017, 19:46
Лол.

for(int = 0; i

Dark_Knight
24.01.2017, 19:53
Ну тут уже тебе гугл скажет более точно скажет.. А так цил от нуля до 1023999 с шагом 1

Dark_Knight
26.01.2017, 21:06
Как читать структуры в плюсах?


http://ideone.com/pY7Oog (https://www.blast.hk/redirect/aHR0cDovL2lkZW9uZS5jb20vcFk3T29n)

Dark_Knight
27.01.2017, 02:52
Какой вопрос такой и ответ. Точнее пиши.

iAmerican
27.01.2017, 12:26
Огромное конечно спасибо, но без пояснений в коде мне это даёт лишь готовую функцию считывания (наверное), в которой я понимаю не намного больше, чем до того как ты её скинул, в любой другой такой же функции


в собейте посмотри , если нужны структуры сампа

Woofing Giraffe
30.01.2017, 16:38
Может кто написать функцию конвертирования RGBA в ARGB?

CarLCas
30.01.2017, 20:54
Может кто написать функцию конвертирования RGBA в ARGB?


alpha = rgba & 0xFF;

argb = (rgba >> 8) | (alpha

timur2345678910
01.02.2017, 15:40
А сложный ли язык программирования C++? Просто я новичок в этом всём. Раньше так, скачивал Cleo да играл, особо в этом не заморачивался. Потом зашёл на BlastHack и нечего не понял. Пожалуйста, помогите мне.

AWRage
01.02.2017, 15:55
А сложный ли язык программирования C++? Просто я новичок в этом всём. Раньше так, скачивал Cleo да играл, особо в этом не заморачивался. Потом зашёл на BlastHack и нечего не понял. Пожалуйста, помогите мне.


Если понятия не имеешь как все устроено, как работает SAMP, плагины, клео, то конечно тебе будет сложно. Тем более если нет опыта в программировании. Но можно быстро научиться , если хотеть и практиковать.

timur2345678910
01.02.2017, 16:52
Если понятия не имеешь как все устроено, как работает SAMP, плагины, клео, то конечно тебе будет сложно. Тем более если нет опыта в программировании. Но можно быстро научиться , если хотеть и практиковать.


А с чего тогда начать?

Dark_Knight
01.02.2017, 19:31
А с чего тогда начать?


С чтения книг и практике на консольных приложениях.

tropical5466
01.02.2017, 21:29
Как получить настоящее время добавления сообщения в чат во время афк?

Dark_Knight
01.02.2017, 21:32
Никак, если при этом ты в ескейпе.

AWRage
03.02.2017, 23:07
Почему функция time() на компе (C++) и на сервере (php) возвращает разные значения (разница в ~30 секунд).

Отправляю на сервер результат time(nullptr), а на сервере в php скрипте получаю другое значение. Почему так?

time - возвращает кол-во секунд от начала эпохи unix. Должно быть одинаково на всех машинах, поправьте если не так.

itsLegend
04.02.2017, 00:04
Почему функция time() на компе (C++) и на сервере (php) возвращает разные значения (разница в ~30 секунд).
Отправляю на сервер результат time(nullptr), а на сервере в php скрипте получаю другое значение. Почему так?

time - возвращает кол-во секунд от начала эпохи unix. Должно быть одинаково на всех машинах, поправьте если не так.


Судя по всему функция time возвращает разницу между 00:00 01.01.1970 и текущей датой. Возможно даже, что unix время зависит от выставленного времени на устройстве.

Вот сейчас открыл все найденные сервисы для получения текущего timestamp - различие от 3 до 15 секунд. В компиляторах онлайн отставание в 180 секунд.

В C++ (локально) time зависит от текущей даты на компьютере.

Так что делаем выводы сами.

AWRage
04.02.2017, 00:52
Судя по всему функция time возвращает разницу между 00:00 01.01.1970 и текущей датой. Возможно даже, что unix время зависит от выставленного времени на устройстве.
Вот сейчас открыл все найденные сервисы для получения текущего timestamp - различие от 3 до 15 секунд. В компиляторах онлайн отставание в 180 секунд.
В C++ (локально) time зависит от текущей даты на компьютере.
Так что делаем выводы сами.


Спасибо за ответ. Буду придумывать другую систему.

Dark_Knight
04.02.2017, 16:15
Что тебе надо?

AWRage
04.02.2017, 16:37
Что тебе надо?


Я хотел синхронизировать сообщения в чате таймстампом, но видимо придется придумать другую систему, либо отправлять таймстамп с сервера, как подсказал Тим.

SAMP666
07.02.2017, 09:30
у меня такой вопрос:

почему все нормально компилируется и плагины .asi и .sf

и RakSamp и собейт а конечный файл не появляется в папке bin

Dark_Knight
07.02.2017, 13:08
И что при этом пишет?

SAMP666
07.02.2017, 13:11
И что при этом пишет?


в том то и дело ничего все нормально компилирует ток файл готовый не появляется в папке bin

лан устанавливаю VS 2017 RC ее попробую мож там быстрее разберусь )

barspinoff
08.02.2017, 22:06
Как отправлять RPC в собейте?

Jack_Savage
23.02.2017, 00:49
Вот нашел функцию:

C++:






int
GetActorAnim
(
DWORD ActorID
)
{
if
(
CallSCM
(
&
is_valid_actor_handle
,
ActorID
)
)
{
int
i
;
while
(
!
CallSCM
(
&
is_actor_performing_anim
,
ActorID
,
i
)
)
{
i
++
;
}
return
i
;
}
return
0
;
}




CallSCM я так понимаю вызов опкода.

А какого ?

Потом нашел is_actor_performing_anim - 0611, "is" в него передают int и string. Каким образом в той функции визывается int ?

Или она не рабочия ?

BlackKnigga
23.02.2017, 00:54
Вот нашел функцию:

C++:






int
GetActorAnim
(
DWORD ActorID
)
{
if
(
CallSCM
(
&
is_valid_actor_handle
,
ActorID
)
)
{
int
i
;
while
(
!
CallSCM
(
&
is_actor_performing_anim
,
ActorID
,
i
)
)
{
i
++
;
}
return
i
;
}
return
0
;
}




CallSCM я так понимаю вызов опкода.
А какого ?
Потом нашел is_actor_performing_anim - 0611, "is" в него передают int и string. Каким образом в той функции визывается int ?
Или она не рабочия ?


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

Jack_Savage
23.02.2017, 01:03
Эта функция перебирает все анимки, пока не дойдет до той, что ты сейчас юзаешь. Только вот в опкоде юзается название анимации, а тут похоже ид.


То что она перебирает и вернет id я то понял... А вот что за магический опкод не понял)

BlackKnigga
23.02.2017, 01:23
То что она перебирает и вернет id я то понял... А вот что за магический опкод не понял)


Проверяет юзает ли такой то актер такую то анимку

Jack_Savage
23.02.2017, 01:27
Проверяет юзает ли такой то актер такую то анимку


Та я это понимаю.... Я не понимаю как... Как Карл тут юзается опкод с входным параметром String но в него передается int.

Может есть опкод который делает тоже то 0611 только не по названию а по ID ?

581174
25.02.2017, 03:13
Код:





[CODE]
while (mEntry.szModule != "samp.dll")
{
if (mEntry.szModule != "samp.dll")
{
cout



нУ почему оно НЕ ПЕРЕБИрАЕТ проклятые модули, а просто спамит ОДНИМ б1234 И ТЕМ ЖЕ?!

хелп, я уже подгораю

наверное, неправильно сохраняю следующий модуль, или ещё что

помогииите, котята :С

Dark_Knight
25.02.2017, 04:40
http://pastebin.com/7XLrsHHr (https://www.blast.hk/redirect/aHR0cDovL3Bhc3RlYmluLmNvbS83WExyc0hIcg)

581174
25.02.2017, 14:23
http://pastebin.com/7XLrsHHr (https://www.blast.hk/redirect/aHR0cDovL3Bhc3RlYmluLmNvbS83WExyc0hIcg)


while (Process32Next(processesSnapshot, &processInfo))

Как будет работать этот цикл?

Тут нет условия, что должно заставить цикл остановиться?

Или я что-то не понимаю?

Dark_Knight
25.02.2017, 14:53
Я тебе дал рабочую вещь. Юзай и не парся.

Цикл будет работать пока Process32Next будет возвращать истину.

_KeNy_
25.02.2017, 17:22
Ребят, есть проблема при включении аирбрейка собейт не держит Z координату, т.е. если спуститься под землю он будет медленно падать вниз.

C++:






void
func_air_brake
(
)
{
static
float
orig_pos
[
3
]
;
static
float
fall_speed_mult
;
static
int
vkl
=
0
;
actor_info
*
info
=
g_SAMP
->
getPlayers
(
)
->
pLocalPlayer
->
pSAMP_Actor
->
pGTA_Ped
;
if
(
isKeyPressed
(
VK_RSHIFT
)
)
menu
.
air_brake
^=
1
;
if
(
menu
.
air_brake
)
{
vect3_copy
(
&
info
->
base
.
matrix
[
4
*
3
]
,
orig_pos
)
;
fall_speed_mult
=
1.0f
;
vkl
=
1
;
}
if
(
!
menu
.
air_brake
&&
vkl
)
{
toggleSAMPCursor
(
0
)
;
TOGGLECURSOR
(
1
)
;
TOGGLECURSOR
(
0
)
;
vkl
=
0
;
}
if
(
menu
.
air_brake
)
{
float
*
matrix
=
info
->
base
.
matrix
;
// if there's no parachute
if
(
g_SAMP
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
!=
46
)
{
vect3_copy
(
orig_pos
,
&
info
->
base
.
matrix
[
4
*
3
]
)
;
vect3_zero
(
info
->
speed
)
;
SetIsStanding
(
1
)
;
float
d
[
4
]
=
{
0.0f
,
0.0f
,
0.0f
,
0.0002f
}
;
if
(
isKeyDown
(
'W'
)
)
d
[
0
]
+=
1.0f
;
if
(
isKeyDown
(
'S'
)
)
d
[
0
]
-=
1.0f
;
if
(
isKeyDown
(
'A'
)
)
d
[
1
]
+=
1.0f
;
if
(
isKeyDown
(
'D'
)
)
d
[
1
]
-=
1.0f
;
if
(
isKeyDown
(
VK_UP
)
)
d
[
2
]
+=
1.0f
;
if
(
isKeyDown
(
VK_DOWN
)
)
d
[
2
]
-=
1.0f
;
if
(
!
vect3_near_zero
(
d
)
)
{
float
vect
[
4
]
=
{
-
d
[
1
]
,
d
[
0
]
,
d
[
2
]
,
0.0f
}
;
float
out
[
4
]
;
/* out = matrix * norm(d) */
vect3_normalize
(
vect
,
vect
)
;
matrix_vect4_mult
(
matrix
,
vect
,
out
)
;
matrix
[
4
*
3
+
0
]
+=
out
[
0
]
*
d
[
3
]
;
matrix
[
4
*
3
+
1
]
+=
out
[
1
]
*
d
[
3
]
;
matrix
[
4
*
3
+
2
]
+=
out
[
2
]
*
d
[
3
]
;
}
}
vect3_copy
(
&
matrix
[
4
*
3
]
,
orig_pos
)
;
}
}

Jack_Savage
27.02.2017, 17:21
C++:






typedef
struct
RpClump
RpClump
;
typedef
RpClump
*
(
*
RpClumpCallback
)
(
RpClump
*
clump
,
void
*
data
)
;
struct
RwObject
{
unsigned
char
type
;
unsigned
char
subtype
;
unsigned
char
flags
;
unsigned
char
privateFlags
;
void
*
parent
;
// should be RwFrame with RpClump
}
;
struct
RwListEntry
{
RwListEntry
*
next
,
*
prev
;
}
;
struct
RwList
{
RwListEntry root
;
}
;
struct
RpClump
{
// RenderWare (plugin) Clump (used by GTA)
RwObject object
;
RwList atomics
;
RwList lights
;
RwList cameras
;
RwListEntry globalClumps
;
RpClumpCallback callback
;
}
;
list

m_Associations
;
CAnimBlendAssociation
*
GetAnimBlendAssociation
(
CAnimBlendAssociationSAInterface
*
pInterface
)
{
if
(
pInterface
)
{
list

::
iterator iter
=
m_Associations
.
begin
(
)
;
for
(
;
iter
!=
m_Associations
.
end
(
)
;
iter
++
)
{
if
(
(
*
iter
)
->
GetInterface
(
)
==
pInterface
)
{
return
*
iter
;
}
}
CAnimBlendAssociation
*
pAssociation
=
new
CAnimBlendAssociationSA
(
pInterface
)
;
m_Associations
.
push_back
(
pAssociation
)
;
return
pAssociation
;
}
return
NULL
;
}
CAnimBlendAssociation
*
RpAnimBlendClumpGetFirstAssociation
(
RpClump
*
pClump
)
{
if
(
!
pClump
)
return
NULL
;
CAnimBlendAssociationSAInterface
*
pInterface
;
DWORD dwFunc
=
FUNC_RpAnimBlendClumpGetFirstAssociation
;
_asm
{
push pClump
call dwFunc
mov pInterface
,
eax
add esp
,
0x4
}
return
GetAnimBlendAssociation
(
pInterface
)
;
}




Ну вот нашел код для получения анимации.

Только затык, как получить RpClump ?

Там где взял есть функция которая возвращает значение переменной.

А вот кто этой переменной присваивает значение не нашел

return
28.02.2017, 00:07
Ребят, есть проблема при включении аирбрейка собейт не держит Z координату, т.е. если спуститься под землю он будет медленно падать вниз.

C++:






void
func_air_brake
(
)
{
static
float
orig_pos
[
3
]
;
static
float
fall_speed_mult
;
static
int
vkl
=
0
;
actor_info
*
info
=
g_SAMP
->
getPlayers
(
)
->
pLocalPlayer
->
pSAMP_Actor
->
pGTA_Ped
;
if
(
isKeyPressed
(
VK_RSHIFT
)
)
menu
.
air_brake
^=
1
;
if
(
menu
.
air_brake
)
{
vect3_copy
(
&
info
->
base
.
matrix
[
4
*
3
]
,
orig_pos
)
;
fall_speed_mult
=
1.0f
;
vkl
=
1
;
}
if
(
!
menu
.
air_brake
&&
vkl
)
{
toggleSAMPCursor
(
0
)
;
TOGGLECURSOR
(
1
)
;
TOGGLECURSOR
(
0
)
;
vkl
=
0
;
}
if
(
menu
.
air_brake
)
{
float
*
matrix
=
info
->
base
.
matrix
;
// if there's no parachute
if
(
g_SAMP
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
!=
46
)
{
vect3_copy
(
orig_pos
,
&
info
->
base
.
matrix
[
4
*
3
]
)
;
vect3_zero
(
info
->
speed
)
;
SetIsStanding
(
1
)
;
float
d
[
4
]
=
{
0.0f
,
0.0f
,
0.0f
,
0.0002f
}
;
if
(
isKeyDown
(
'W'
)
)
d
[
0
]
+=
1.0f
;
if
(
isKeyDown
(
'S'
)
)
d
[
0
]
-=
1.0f
;
if
(
isKeyDown
(
'A'
)
)
d
[
1
]
+=
1.0f
;
if
(
isKeyDown
(
'D'
)
)
d
[
1
]
-=
1.0f
;
if
(
isKeyDown
(
VK_UP
)
)
d
[
2
]
+=
1.0f
;
if
(
isKeyDown
(
VK_DOWN
)
)
d
[
2
]
-=
1.0f
;
if
(
!
vect3_near_zero
(
d
)
)
{
float
vect
[
4
]
=
{
-
d
[
1
]
,
d
[
0
]
,
d
[
2
]
,
0.0f
}
;
float
out
[
4
]
;
/* out = matrix * norm(d) */
vect3_normalize
(
vect
,
vect
)
;
matrix_vect4_mult
(
matrix
,
vect
,
out
)
;
matrix
[
4
*
3
+
0
]
+=
out
[
0
]
*
d
[
3
]
;
matrix
[
4
*
3
+
1
]
+=
out
[
1
]
*
d
[
3
]
;
matrix
[
4
*
3
+
2
]
+=
out
[
2
]
*
d
[
3
]
;
}
}
vect3_copy
(
&
matrix
[
4
*
3
]
,
orig_pos
)
;
}
}





GTAfunc_LockActor(true);

p1cador
08.03.2017, 14:11
Почему не работает таймер?




https://pp.userapi.com/c637124/v637124232/3916a/l_z1Ii8gLDQ.jpg


Вместо (TIMERPROC)TimerProc делал &TimerProc - результат такой же.

Или как еще можно сделать постоянное выполнение опред. кода в dll, кроме потока с бесконечным циклом, т.к. при использовании такого потока проседает много фпс

BlackKnigga
08.03.2017, 14:32
Или как еще можно сделать постоянное выполнение опред. кода в dll, кроме потока с бесконечным циклом, т.к. при использовании такого потока проседает много фпс


WndProc

itsLegend
08.03.2017, 15:03
Почему не работает таймер?


l_z1Ii8gLDQ.jpgitsLegend · 8 Мар 2017 в 14:03' data-fancybox="lb-post-139568" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="/proxy.php?image=https%3A%2F%2Fpp.userapi.com%2Fc63 7124%2Fv637124232%2F3916a%2Fl_z1Ii8gLDQ.jpg&hash=8ecff658cef9f24b76951d6aacf82f49" style="cursor: pointer;" title="l_z1Ii8gLDQ.jpg">
https://pp.userapi.com/c637124/v637124232/3916a/l_z1Ii8gLDQ.jpg


Вместо (TIMERPROC)TimerProc делал &TimerProc - результат такой же.


Для того, чтобы работали таймеры, нужно будет обрабатывать очередь сообщений.

C++:






MSG msg
;
while
(
GetMessage
(
&
msg
,
NULL
,
0
,
0
)
)
{
TranslateMessage
(
&
msg
)
;
DispatchMessage
(
&
msg
)
;
}






Или как еще можно сделать постоянное выполнение опред. кода в dll, кроме потока с бесконечным циклом, т.к. при использовании такого потока проседает много фпс


Чтобы фпс не проседало, используй Sleep с задержкой ~100

kuleer
08.03.2017, 15:55
Добрый день. Хотел спросить, какую версию VS нужно скачать, для программирования под самп? Чтобы стабильно без ошибок. (с ссылкой желательно)

winrare
13.03.2017, 13:50
Возможно не в той теме спрашиваю.

Как написать бота, который будет работать без запуска GTA? Есть какие-то готовые средства?

MISTER_GONWIK
13.03.2017, 14:03
Возможно не в той теме спрашиваю.
Как написать бота, который будет работать без запуска GTA? Есть какие-то готовые средства?


раксамп (RakSAMP)

winrare
13.03.2017, 14:57
раксамп (RakSAMP)


Есть какой-нибудь мануал к нему? Что и где менять, чтобы бота написать.

MISTER_GONWIK
13.03.2017, 15:00
Есть какой-нибудь мануал к нему? Что и где менять, чтобы бота написать.


нет, сам думай

SecDet
13.03.2017, 19:04
Есть какой-нибудь мануал к нему? Что и где менять, чтобы бота написать.


Мануал? Нет. Всякие там мануалы только по павну могут быть.

winrare
16.03.2017, 18:46
Скачал исходники RakSAMP, компилирую, запускаю. И у меня не отображается диалог для ввода пароля. Функция обратного вызова зарегистрирована:

C++:






pRakClient
->
RegisterAsRemoteProcedureCall
(
&
RPC_ScrDialogBox
,
ScrDialogBox
)
;




В функции ScrDialogBox поставил точки останова, но они не срабатывают, значит эта функция просто не вызывается. В чем может быть проблема?

UPD: Сегодня пока отлаживал запустил RakSAMP и копался в коде. Примерно через минуты две внезапно вылез диалог. Ввел в него пароль, сразу вылез следующий диалог с вводом почты, а затем с ником пригласившего игрока. Это было на Advance. Выключил, запустил снова. Диалоги сразу же приходят, без проблем. Попробовал на Diamond, диалоги не идут. Ещё на одном сервере попробовал, тоже не идут, хотя ждал их долго. Почему так происходит?

Да, забыл уточнить, все сообщения в чате нормально приходят, только диалоги почему-то не приходят.

#ripper
19.03.2017, 00:33
написал я esp for csgo, писал с надеждой ноу вак банед, в итоге двоих похоронил, и *** с ним. вопрос вот в чем, писал я как бы асинхронно, без хука директа, тобишь dll не инжектил, а читал адреса и рендерил в topmost. итак, меня вак палил когда я читал адреса или же вак палил палил то что перед окошком его игры есть другое прозрачное окошко(topmost). есть еще третий для отбитых как я вариант, может вак чекает все активные процессы и их процедуры, и при подозрении банит?

p1cador
19.03.2017, 01:38
@#ripper (https://www.blast.hk/members/61605/)

Зачем для есп вообще что-либо рисовать, когда в кс го есть родной glow?

По поводу вака:

Насчет RPM - не могу ответить точно, но находил инфу, что у вольво может быть драйвер, который будет палить RPM. Даже тут, пару страниц назад, фип что-то подобное писал.

Окошко перед окошком , по моему, отлетает сразу, т.к. есть еще шадоуплей, фрапс, бандикам, овервульф, рк и еще куча всего разного.

Подозрительные процессы и процедуры - тут хз, скорей будет выкидывать в случае детектирования чего-то ОЧЕНЬ распространенного ( у меня вылетает из мм каток, если запущен чит энжин (даже не подключенный к кс:го). При этом никакого бана, просто пишет "нестабильное соединение с VAC".

Из собственного небольшого опыта: вак на много тупее, чем кажется. Не стоит бояться интернал-читов, пиши длл, инжекти в процесс и все будет нормально. Сам уже несколько месяцев так играю (самописные инжектор + сам чит). Никакого бана. И фпс, если юзать таймер WinAPI / хук окна, а не потоки, практически не проседает (в отличие от RPM).

пс сор, изменил пост, сразу не с компа писал

#ripper
19.03.2017, 16:20
буду-буду пробовать, надеюсь с dll будет все пучком

p1cador
20.03.2017, 02:05
Есть массив, содержащий hex .dll файла.




https://pp.userapi.com/c639722/v639722232/10361/JQBUxgFP-1I.jpg




Эту .dll можно как-нибудь заинжектить в игру? Заменить адрес файла указателем на этот массив в функции инжекта не прокатывает :D

C++:






bool
inject
(
DWORD pID
,
char
*
path
)
{
path
=
cHexCode
;
HANDLE proc_handle
;
LPVOID RemoteString
;
LPVOID LoadLibAddy
;
if
(
pID
==
0
)
return
false
;
proc_handle
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
false
,
pID
)
;
if
(
proc_handle
==
0
)
return
false
;
LoadLibAddy
=
GetProcAddress
(
GetModuleHandle
(
"kernel32.dll"
)
,
"LoadLibraryA"
)
;
RemoteString
=
VirtualAllocEx
(
proc_handle
,
NULL
,
strlen
(
path
)
,
MEM_RESERVE
|
MEM_COMMIT
,
PAGE_READWRITE
)
;
WriteProcessMemory
(
proc_handle
,
RemoteString
,
path
,
strlen
(
path
)
,
NULL
)
;
//запись DLL в память игры
CreateRemoteThread
(
proc_handle
,
NULL
,
NULL
,
(
LPTHREAD_START_ROUTINE
)
LoadLibAddy
,
RemoteString
,
NULL
,
NULL
)
;
CloseHandle
(
proc_handle
)
;
return
true
;
}

SR_team
20.03.2017, 09:13
Есть массив, содержащий hex .dll файла.



https://pp.userapi.com/c639722/v639722232/10361/JQBUxgFP-1I.jpg



Эту .dll можно как-нибудь заинжектить в игру? Заменить адрес файла указателем на этот массив в функции инжекта не прокатывает :D

C++:






bool
inject
(
DWORD pID
,
char
*
path
)
{
path
=
cHexCode
;
HANDLE proc_handle
;
LPVOID RemoteString
;
LPVOID LoadLibAddy
;
if
(
pID
==
0
)
return
false
;
proc_handle
=
OpenProcess
(
PROCESS_ALL_ACCESS
,
false
,
pID
)
;
if
(
proc_handle
==
0
)
return
false
;
LoadLibAddy
=
GetProcAddress
(
GetModuleHandle
(
"kernel32.dll"
)
,
"LoadLibraryA"
)
;
RemoteString
=
VirtualAllocEx
(
proc_handle
,
NULL
,
strlen
(
path
)
,
MEM_RESERVE
|
MEM_COMMIT
,
PAGE_READWRITE
)
;
WriteProcessMemory
(
proc_handle
,
RemoteString
,
path
,
strlen
(
path
)
,
NULL
)
;
//запись DLL в память игры
CreateRemoteThread
(
proc_handle
,
NULL
,
NULL
,
(
LPTHREAD_START_ROUTINE
)
LoadLibAddy
,
RemoteString
,
NULL
,
NULL
)
;
CloseHandle
(
proc_handle
)
;
return
true
;
}





Можно, но чую, что ты ***ню затеял, так что ни подсказки, ни готового кода (который есть) ты не получишь

NarutoUA
20.03.2017, 10:20
Можно, но чую, что ты ***ню затеял, так что ни подсказки, ни готового кода (который есть) ты не получишь


По скрину понял что там стиллер? Жостко.

SR_team
20.03.2017, 10:48
По скрину понял что там стиллер? Жостко.


по скрину понял, что файл не правильно в массив записан и работать при инжекте не будет. А мысли о стилере растут из самого вопроса

p1cador
20.03.2017, 10:55
Всего лишь вх от гейбена и других умников прячу

NarutoUA
20.03.2017, 10:57
Да придумали же инжекторы которые без драйверов не спалить.

CarLCas
20.03.2017, 20:46
MemoryLoadLibrary смотрел? Я сам не использовал, только читал про него, но вроде делает как раз то что тебе необходимо

2Shae
21.03.2017, 16:40
За что отвечает ID_TIMESTAMP в PacketEnumeration?

winrare
21.03.2017, 19:41
RakNet 4-ой версии совместим с SAMPом? Скачал отсюда https://github.com/OculusVR/RakNet, пытаюсь подключиться к серверу (для тестов использовал сервер RakSAMP), но он не подключается, выдает ID_CONNECTION_ATTEMPT_FAILED, а сервер говорит: [WARNING] Invalid checksum.

Это из-за разных версий или я просто неправильно подключаюсь?

Вообще я мог бы и на более ранних версиях писать, но в 4-ой сделали возможность писать на шарпе, что для меня очень удобно.

NarutoUA
21.03.2017, 19:49
RakNet 4-ой версии совместим с SAMPом? Скачал отсюда https://github.com/OculusVR/RakNet, пытаюсь подключиться к серверу (для тестов использовал сервер RakSAMP), но он не подключается, выдает ID_CONNECTION_ATTEMPT_FAILED, а сервер говорит: [WARNING] Invalid checksum.
Это из-за разных версий или я просто неправильно подключаюсь?
Вообще я мог бы и на более ранних версиях писать, но в 4-ой сделали возможность писать на шарпе, что для меня очень удобно.


В сампе старый и очень модифицированный ракнет. Тут или делать враппер старого ракнета или фиксить новый смотря на старый.

livarka1337
21.03.2017, 23:17
Для просмотра скрытого содержимого вы должны войти (https://www.blast.hk/login/) или зарегистрироваться (https://www.blast.hk/login/register).

CarLCas
22.03.2017, 16:29
А на*** поток под такое создавать? И на*** хайд ставить, вроде это не тот код который заслуживает хайд

livarka1337
22.03.2017, 16:52
А на*** поток под такое создавать? И на*** хайд ставить, вроде это не тот код который заслуживает хайд


просто хочу чтоб не все видели)

мне посоветовали поток

CarLCas
22.03.2017, 16:54
Ну как бы если делать поток, то надо изменить принцип.

А вообще можно и без дополнительного потока, при помощи таймера. Можешь поискать, тут точно должны быть примеры.

Dark_Knight
22.03.2017, 17:56
просто хочу чтоб не все видели)
мне посоветовали поток


Билять, топориками тебя надо на курдючное сало пустить.

Код:






static DWORD time = 0;
void afk_flood()
{
if (cheat_state->_generic.aflood){
if (GetTickCount() - time > 1050)
{
say("/unloading");
time = GetTickCount();
}
}
}

livarka1337
22.03.2017, 20:33
Билять, топориками тебя надо на курдючное сало пустить.

Код:






static DWORD time = 0;
void afk_flood()
{
if (cheat_state->_generic.aflood){
if (GetTickCount() - time > 1050)
{
say("/unloading");
time = GetTickCount();
}
}
}





и типо оно в афк флудить будет разве?)

Dark_Knight
22.03.2017, 22:33
Все от типа запуска ГТА зависит. Даже, если бы ты на поток вынес, то оно не работало бы.

iAmerican
23.03.2017, 10:45
Как сделать стремление к числу? К примеру , у меня в переменной сохраненное число 1 , в новых данных уже идёт число 32.

Надо что бы перезапись была сразу не на 32 , а постепенно от 1 до 32 прошло.

т.е. 1.2.3.4.5.6. и т.д. до 32.

Думаю как то с помощью цикла , только вот сообразить не могу(

MISTER_GONWIK
23.03.2017, 12:06
Как сделать стремление к числу? К примеру , у меня в переменной сохраненное число 1 , в новых данных уже идёт число 32.

Надо что бы перезапись была сразу не на 32 , а постепенно от 1 до 32 прошло.
т.е. 1.2.3.4.5.6. и т.д. до 32.
Думаю как то с помощью цикла , только вот сообразить не могу(



C++:





[CODE]
for
(
int
j
=
1
;
j

444555
25.03.2017, 16:38
В уроке по raknet фильтрация пакетов идёт по названию







Код:






params->packetId == PacketEnumeration::ID_PLAYER_SYNC




Можно ли указать вместо названия пакета его ид, в такой форме? (в уроке такой вариант не рассматривается, а мне так привычнее)

C:






params
->
packetId
==
78

itsLegend
25.03.2017, 16:41
Так и сравнивай



C:






params
->
packetId
==
78

Dark_Knight
25.03.2017, 16:44
В уроке по raknet фильтрация пакетов идёт по названию







Код:






params->packetId == PacketEnumeration::ID_PLAYER_SYNC




Можно ли указать вместо названия пакета его ид, в такой форме? (в уроке такой вариант не рассматривается, а мне так привычнее)

C:






params
->
packetId
==
78





Лучше указывай так, как в уроке ибо чтение кода будет куда проще.

444555
25.03.2017, 17:31
Тщетно, братцы, бытие. Мало того что дллки пишутся, оказывается, совсем не как экзешники,так ещё и ошибки оккупировали.

И самое обидное, что первая ошибка на строку вызвавшую её не указывает. Не знаю почему, но мне кажется что если я даже напрягу мозг и переводу описание ошибки, всё равно не смогу исправить. Так что прошу у Вас помощи, господа по мастерству превосходящие.



n/a

Насчёт третьей строки ошибки - вовсе без понятия. Делал всё по уроку, но почему-то студия ругается ._.

Тоже самое, что я делал вчера на клео. Должно срабатывать на входящий RPC, и если это SetPlayerMapIcon, слизать инфу и вывести в чат.



n/a

itsLegend
25.03.2017, 18:12
Колбэк iRPC нужно вставлять перед её применением (до mainloop, в твоём случае), либо объявить в .h.

Dark_Knight
25.03.2017, 18:58
Можно в том же файле обьявить, но обязательно перед

Код:





[CODE]
void Her();

void main(){
Her();
}

void Her(){
int i = 0;
std::cout

444555
25.03.2017, 20:58
Ещё вопрос возник. Не создаст ли утечку памяти то что при вызове коллбека создаются переменные, но не освобождаются?

Или они не будут выделять память заново, а просто перезапишутся?

itsLegend
25.03.2017, 21:09
Не создаст.

Переменная, объявленная внутри функции/цикла/..., автоматически уничтожается вместе с выходом из тела функции/цикла.

Если ты будешь использовать что-то вроде char* p = new char;, то это может повлечь утечку.

444555
25.03.2017, 23:43
Как определить корневую папку процесса, в котором загружена dll, если функция определения в этой самой dll?

itsLegend
25.03.2017, 23:53
GetModuleFileName пробовал?

Dark_Knight
26.03.2017, 13:21
GetCurrentDirectory - получает путь откуда был запущен процесс.

Dark_Knight
26.03.2017, 15:56
Ты это в длл используешь или в ехе?

Dark_Knight
26.03.2017, 16:15
Эта та функция, которая тебе нужна. Поверь.

Dark_Knight
26.03.2017, 17:23
Крч, похоже не удастся мне без костылей получить директорию. Буду через снапшоты и имена процессов искать саньку, и получать её папку.


И где же тут костыль?

C:





[CODE]
#include
#include
void
main
(
)
{
char
path
[
MAX_PATH
]
GetCurrentDirectory
(
MAX_PATH
,
path
)
;
std
::
cout

444555
26.03.2017, 20:50
C:






bool CALLBACK
iRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
56
)
{
byte iNumber
;
float
iX
;
float
iY
;
float
iZ
;
byte iI
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
iNumber
)
;
params
->
bitStream
->
Read
(
iX
)
;
params
->
bitStream
->
Read
(
iY
)
;
params
->
bitStream
->
Read
(
iZ
)
;
params
->
bitStream
->
Read
(
iI
)
;
params
->
bitStream
->
ResetReadPointer
(
)
;
WriteFile
(
miD
,
iNumber
,
sizeof
(
iNumber
)
,
sometrash
,
NULL
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
444444
,
"%d %f %f %f %d"
,
iNumber
,
iX
,
iY
,
iZ
,
iI
)
;





Должно записывать порядковый номер иконки в стриме, но записывает абракадабру, которая даже не отображается в окне ввода (не могу её прикрепить)

Что не так?

2Shae
27.03.2017, 11:08
C:






bool CALLBACK
iRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
56
)
{
byte iNumber
;
float
iX
;
float
iY
;
float
iZ
;
byte iI
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
iNumber
)
;
params
->
bitStream
->
Read
(
iX
)
;
params
->
bitStream
->
Read
(
iY
)
;
params
->
bitStream
->
Read
(
iZ
)
;
params
->
bitStream
->
Read
(
iI
)
;
params
->
bitStream
->
ResetReadPointer
(
)
;
WriteFile
(
miD
,
iNumber
,
sizeof
(
iNumber
)
,
sometrash
,
NULL
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
444444
,
"%d %f %f %f %d"
,
iNumber
,
iX
,
iY
,
iZ
,
iI
)
;





Должно записывать порядковый номер иконки в стриме, но записывает абракадабру, которая даже не отображается в окне ввода (не могу её прикрепить)
Что не так?


Считывать нужно следующее: BYTE iconID, float x, float y, float z, BYTE markerType, DWORD color, BYTE style. В таком же порядке.

444555
27.03.2017, 15:04
Считывать нужно следующее: BYTE iconID, float x, float y, float z, BYTE markerType, DWORD color, BYTE style. В таком же порядке.


чувак, я считал всё что мне нужно и сделал это правильно. На сайте сампа я нашёл пример пакета и логично подобрал форму заполнения. В чат всё выводит корректно, проблема с записью, которая не работает.

itsLegend
27.03.2017, 15:10
Используй fstream

BlackKnigga
28.03.2017, 16:44
RPC_ClientMessage

if (strstr(szMsg, "Текст")) как сделать проверку на цвет этого текста
{
say("blast.hk");
}


У этого рпц первый параметр цвет, dword

444555
29.03.2017, 20:45
Почему RegisterConsoleCommand в SF не принимает bool callback?

itsLegend
29.03.2017, 20:46
А зачем ему принимать bool?

444555
29.03.2017, 20:56
А зачем ему принимать bool?


А какой тип оно вообще принимает?

BlackKnigga
29.03.2017, 21:53
А какой тип оно вообще принимает?


void

Dark_Knight
29.03.2017, 21:54
А какой тип оно вообще принимает?


typedef void(__stdcall *CommandProc) (std::string params);

444555
30.03.2017, 15:11
void


воид же не возвращает никаких значений, как передавать параметры тогда?

itsLegend
30.03.2017, 15:27
Какие параметры?

Если б SF нужны были бы данные от колбэка, то функция была бы не void.

BlackKnigga
30.03.2017, 15:45
воид же не возвращает никаких значений, как передавать параметры тогда?


Так и передавать:

C++:






void
CALLBACK
cmd
(
std
::
string params
)

NIKO
01.04.2017, 10:25
Передаются ли какие-нибудь параметры в исходящий RPC_RequestClass?

BlackKnigga
01.04.2017, 10:49
Передаются ли какие-нибудь параметры в исходящий RPC_RequestClass?


Нет

livarka1337
02.04.2017, 21:29
как вызвать нужный мне патч в собе? хотел бы сделать в меню

типо

void patch()

{

вызываю нужный патч

}

BlackKnigga
02.04.2017, 22:26
как вызвать нужный мне патч в собе? хотел бы сделать в меню
типо
void patch()
{
вызываю нужный патч
}


Какой еще патч? Ноп что ли?

livarka1337
03.04.2017, 08:11
Какой еще патч? Ноп что ли?


Допустим disable (dl) distance limit

SR_team
03.04.2017, 09:24
как вызвать нужный мне патч в собе? хотел бы сделать в меню
типо
void patch()
{
вызываю нужный патч
}


в меню и так есть такое

winrare
03.04.2017, 17:19
Как получить id пикапа, если находишься в другом виртуальном мире? Я захожу в любой интерьер и меня перекидывает в другой виртуальный мир, но сам я остаюсь на месте, так как отклоняю пакеты с перемещением и сменой интерьера. После этого пикапы становятся не видны. Я все ещё могу их отловить через onCreatePickup, но не все, некоторые не появляются .

itsLegend
03.04.2017, 18:05
Как получить id пикапа, если находишься в другом виртуальном мире?.


Определить пикап из другого вирт. мира нельзя

winrare
03.04.2017, 18:20
Определить пикап из другого вирт. мира нельзя


А поднять его перебором id можно?

Dark_Knight
03.04.2017, 18:28
А поднять его перебором id можно?


А ты уверен, что он будет существовать и для пикапа не стоит проверка на вирт. мир?

winrare
03.04.2017, 18:54
А ты уверен, что он будет существовать и для пикапа не стоит проверка на вирт. мир?


Не уверен. Ну ладно, значит никак.

Есть ещё вопрос. Как сервер определяет, что я встал на маркер? С пикапом понятно, я отправляю пакет с его id. А вот исходящих пакетов с маркерами я в списке пакетов (который в events.lua) не нашел.

itsLegend
03.04.2017, 19:11
Это значит то, что сервер проверяет твою позицию с позицией маркера в определенном радиусе.

NarutoUA
04.04.2017, 02:15
что нужно сделать что-бы выстрел пуль не были видны при отправке пуль
визуально выстрел пули не видны, а если смотреть со стороны то выстрел пули видны

float vect3_null[3] = { 0.0f, 0.0f, 0.0f };
g_RakClient->SendFakeBulletSyncData(&self->base.matrix[12], vect3_null, &self->base.matrix[12], 0, -1);

void RakClient::SendFakeBulletSyncData(float aimHit[3], float bodyPos[3], float hitPos[3], BYTE hitType, uint16_t id)
{
stBulletData bSync;
ZeroMemory(&bSync, sizeof(bSync));
BitStream bsBulletSync;
bSync.fOrigin[0] = aimHit[0];
bSync.fOrigin[1] = aimHit[1];
bSync.fOrigin[2] = aimHit[2];
bSync.fCenter[0] = bodyPos[0];
bSync.fCenter[1] = bodyPos[1];
bSync.fCenter[2] = bodyPos[2];
bSync.fTarget[0] = hitPos[0];
bSync.fTarget[1] = hitPos[1];
bSync.fTarget[2] = hitPos[2];
bSync.byteType = hitType;
bSync.sTargetID = id;
bSync.byteWeaponID = g_Players->pLocalPlayer->byteCurrentWeapon;
bsBulletSync.Write((BYTE)ID_BULLET_SYNC);
bsBulletSync.Write((PCHAR)&bSync, sizeof(stBulletData));
g_RakClient->Send(&bsBulletSync, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);
}


А ты думаешь, что пули с твоего компьютера летят прямо в другой комп?

winrare
05.04.2017, 12:18
Как в C++ использовать скрипты на Lua? Погуглил, все советуют разное, кто-то LuaBridge, кто-то swig. Что все-таки лучше использовать?

Dark_Knight
05.04.2017, 12:55
Как в C++ использовать скрипты на Lua? Погуглил, все советуют разное, кто-то LuaBridge, кто-то swig. Что все-таки лучше использовать?


Собственно назревает вопрос. Нахуя?

winrare
05.04.2017, 14:07
Собственно назревает вопрос. Нахуя?


Есть класс описывающий игрока. Игроков много, каждый должен выполнять разные задачи. Удобнее это сделать, через скриптовый язык. У каждого игрока должен быть свой скрипт на Lua. Вызов определенных методов игрока должен вызывать соответствующие коллбэки в Lua. И наоборот, вызов определенных функций в Lua, должен вызывать методы в классе. Так я смогу легко прописать логику каждому игроку.

444555
05.04.2017, 14:51
Есть класс описывающий игрока. Игроков много, каждый должен выполнять разные задачи. Удобнее это сделать, через скриптовый язык. У каждого игрока должен быть свой скрипт на Lua. Вызов определенных методов игрока должен вызывать соответствующие коллбэки в Lua. И наоборот, вызов определенных функций в Lua, должен вызывать методы в классе. Так я смогу легко прописать логику каждому игроку.


я так и не понял, зачем вызывать колбеки в луа, если можно вызывать их в плюсах

winrare
05.04.2017, 15:02
я так и не понял, зачем вызывать колбеки в луа, если можно вызывать их в плюсах


Затем, что у меня много различных поведений для игроков. Каждый из них должен по разному реагировать на вызов колбека. Если я буду вызывать колбэки в луа, то у меня будет один универсальный класс для всех игроков, и у каждого игрока будет свой особый скрипт. Если же все писать в плюсах, то в каждом колбэке придется пихать код для всех типов игроков. Что-то типа switch(тип игрока) и 100 кейсов для каждого типа. И так в каждом колбеке. Лютый говнокод получится.

FYP
06.04.2017, 13:34
Как в C++ использовать скрипты на Lua? Погуглил, все советуют разное, кто-то LuaBridge, кто-то swig. Что все-таки лучше использовать?


sol2 (https://github.com/ThePhD/sol2) - очень годный враппер, используется в муне

444555
09.04.2017, 09:13
Указатели и их переменные выглядят вот так:

C:






int
dpId
;
byte dS
;
TCHAR title
;
TCHAR descr
;
TCHAR b1
;
TCHAR b2
;
int
*
dpIdP
=
&
dpId
;
byte
*
dSP
=
&
dS
;
TCHAR
*
titleP
=
&
title
;
TCHAR
*
descrP
=
&
descr
;
TCHAR
*
b1P
=
&
b1
;
TCHAR
*
b2P
=
&
b2
;




Вот так выглядит функция, которая использует один из указателей:

C:






bool CALLBACK
OP
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
61
)
{
params
->
bitStream
->
Read
(
*
dpIdP
)
;
params
->
bitStream
->
Read
(
*
dSP
)
;
params
->
bitStream
->
Read
(
*
titleP
)
;
params
->
bitStream
->
Read
(
*
descrP
)
;
params
->
bitStream
->
Read
(
*
b1P
)
;
params
->
bitStream
->
Read
(
*
b2P
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
444444
,
*
dpIdP
)
;
}
}




Вот так выглядит ошибка:

Код:






невозможно преобразовать аргумент 2 из "int" в "const char *"




Как вывести в чат сообщение через bool callback (хук), используя указатель на переменную вместо переменной?

Примечательно то, что если выводить не указатель а саму переменную, вывод будет нормальный не смотря на то что он не const char, однако в случае с указателем как раз на это ссылается студия.

И главный вопрос. В чём конкретно я ошибся?

BlackKnigga
09.04.2017, 10:03
Указатели и их переменные выглядят вот так:

C:






int
dpId
;
byte dS
;
TCHAR title
;
TCHAR descr
;
TCHAR b1
;
TCHAR b2
;
int
*
dpIdP
=
&
dpId
;
byte
*
dSP
=
&
dS
;
TCHAR
*
titleP
=
&
title
;
TCHAR
*
descrP
=
&
descr
;
TCHAR
*
b1P
=
&
b1
;
TCHAR
*
b2P
=
&
b2
;




Вот так выглядит функция, которая использует один из указателей:

C:






bool CALLBACK
OP
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
61
)
{
params
->
bitStream
->
Read
(
*
dpIdP
)
;
params
->
bitStream
->
Read
(
*
dSP
)
;
params
->
bitStream
->
Read
(
*
titleP
)
;
params
->
bitStream
->
Read
(
*
descrP
)
;
params
->
bitStream
->
Read
(
*
b1P
)
;
params
->
bitStream
->
Read
(
*
b2P
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
444444
,
*
dpIdP
)
;
}
}




Вот так выглядит ошибка:

Код:






невозможно преобразовать аргумент 2 из "int" в "const char *"




Как вывести в чат сообщение через bool callback (хук), используя указатель на переменную вместо переменной?
Примечательно то, что если выводить не указатель а саму переменную, вывод будет нормальный не смотря на то что он не const char, однако в случае с указателем как раз на это ссылается студия.

И главный вопрос. В чём конкретно я ошибся?


А зачем все это извращение?

444555
09.04.2017, 11:35
А зачем все это извращение?


Хороший вопрос :D

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

BlackKnigga
09.04.2017, 11:41
Так юзай обычные, зачем указатели?

Dark_Knight
09.04.2017, 21:34
Хороший вопрос :D
Да вот хотел на шести переменных организовать весь плагин, перезаписывая их. Ну, интереса ради, получится ли такое сделать


Опиши задачу.

444555
09.04.2017, 22:06
Опиши задачу.


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

Суть самого плагина: нужно при получении showDialog считать все его данные, а заодно вывести на экран чтобы убедиться что всё считало верно, и записало это всё дело в текстовый документ.

Но я не могу проверить валидность данных прямо в игре, т.к. addChatMessage не принимает в качестве строки разыменованный указатель.

BlackKnigga
09.04.2017, 22:17
Дело такое: решил попробовать написать плагин, который будет работать с памятью, которая не будет очищаться при каждом выходе из функции. Для этого я создал переменные и указатели на них.
Суть самого плагина: нужно при получении showDialog считать все его данные, а заодно вывести на экран чтобы убедиться что всё считало верно, и записало это всё дело в текстовый документ.
Но я не могу проверить валидность данных прямо в игре, т.к. addChatMessage не принимает в качестве строки разыменованный указатель.


Ну так зачем тебе указатели? Обычные глобальные юзай

444555
10.04.2017, 10:39
Ну так зачем тебе указатели? Обычные глобальные юзай


научи так делать :D

BlackKnigga
10.04.2017, 15:41
научи так делать :D


Перед main объявляй переменные и будут они работать во всех функциях

p1cador
10.04.2017, 15:44
который будет работать с памятью, которая не будет очищаться при каждом выходе из функции.


можешь еще обьявить перемненые как static

I0000M
14.04.2017, 16:01
В параметре keys (не left/right || up/down) синхры onfoot отправляются эти коды клавиш?

MISTER_GONWIK
14.04.2017, 16:24
В параметре keys (не left/right || up/down) синхры onfoot отправляются эти коды клавиш?


гуглить запрещено наверно

https://sampwiki.blast.hk/wiki/Keys

I0000M
14.04.2017, 20:46
Как реализовать xor из клео в c++?

В клео было очень удобно, переключать с 0 на 1 и т.д.

Гуглил, но куда не зайди, там xor не в роли логического переключателя - он сравнивает, и ничего больше не делает ._.

p1cador
14.04.2017, 21:02
@I0000M (https://www.blast.hk/members/129413/)

C++:






kek
=
!
kek
;

BlackKnigga
14.04.2017, 21:03
Как реализовать xor из клео в c++?
В клео было очень удобно, переключать с 0 на 1 и т.д.
Гуглил, но куда не зайди, там xor не в роли логического переключателя - он сравнивает, и ничего больше не делает ._.



C++:






boolVar
=
!
boolVar

iAmerican
14.04.2017, 21:20
Вообщем есть DLL'ка, моя. Хочу написать софтину к ней , что бы можно было в компилированной DLL'ке менять. 2 переменных и строку одну. (Не во время того как она работает, а вообще.)

DLL'ка моя. Т.е. все сурсы от нее есть. Софтину думаю надо exe. Но впринципе и без разницы какого формата , главное что бы менять можно было.

Подскажите в какую сторону копать хотя бы.

p1cador
14.04.2017, 21:29
@iAmerican (https://www.blast.hk/members/18641/), если не во время выполнения, то можно кое что сделать

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

ну это ток при условии, что она не будет загружена во время изменения

I0000M
15.04.2017, 00:11
Как сделать рендеренную сампфанксом текстуру кликабельной?

BlackKnigga
15.04.2017, 00:18
Как сделать рендеренную сампфанксом текстуру кликабельной?


По клику мыши проверять координаты курсора и если они в области текстуры - делать нужное действие.

I0000M
15.04.2017, 00:19
По клику мыши проверять координаты курсора и если они в области текстуры - делать нужное действие.


Звучит как костыль. Х)

Спасибо.

NarutoUA
15.04.2017, 00:20
Звучит как костыль. Х)
Спасибо.


Это и есть правильное решение, а не костыль.

I0000M
17.04.2017, 00:00
На этом скрине (https://www.blast.hk/redirect/aHR0cDovL2kxMi5waXhzLnJ1L3N0b3JhZ2UvMi83LzIvMTExMX BuZ185MTI5Mzc0XzI1ODk4MjcyLnBuZw) изображён лог RakLogger'а, и меня интересует каким образом сосчитать, сколько бит нужно пропустить в пакете, чтобы считать "LD_SPAC:white". Подсобите что ли, может формула какая есть

itsLegend
17.04.2017, 00:09
536 бит.

Слева (0040) указано смещение в шестнадцатеричной системе.

До "L" три символа => 43.

43 => 67 (десятичная)

67 * 8 = 536

Но это не применимо ко всем пакетам, особенно к тем у которых несколько строк. Там придется считать/читать данные полностью.

I0000M
17.04.2017, 12:27
536 бит.
Слева (0040) указано смещение в шестнадцатеричной системе.
До "L" три символа => 43.
43 => 67 (десятичная)
67 * 8 = 536

Но это не применимо ко всем пакетам, особенно к тем у которых несколько строк. Там придется считать/читать данные полностью.


Спасибо, сохраню-ка я это.

А вот насчёт считывания всего пакета, я примерно так и думал, когда заметил что один и тот же рпц со строчкой иногда выдаёт разный размер данных, разброс битов примерно +-20

А можно как-то автоматизировать пропуск битов? Ну допустим изначально пройтись по стандартному оффсету, и пропускать результат через коллбек-функцию с заготовками возможного текста, и если нет совпадений - отступать по одному биту назад, повторая пока функция не найдёт ожидаемый результат, либо пока биты не кончатся.

Меня просто волнует такая ситуация, что это (как мне кажется) полностью сожрёт фпс, а то и игру крашнет, поскольку текстдравов приходит очень много, и каждый обрабатывать - весьма затратно по ресурсам, с учётом того что там банальный перебор, и сколько он времени займёт неизвестно никому

p1cador
17.04.2017, 12:35
@I0000M

Не знаю, как можно реализовать то, что тебе нужно наиболее оптимальным способом, но касаемо твоей фразы про фпс - не надо параноить, комп работает гораздо быстрее, чем тебе кажется, а электроны "бегают" в полупроводниках в твоем процессоре со скоростью света, к тому же это не такое уж сложное вычисление

I0000M
17.04.2017, 12:47
@I0000M
Не надо параноить, комп работает гораздо быстрее, чем тебе кажется, а электроны "бегают" в полупроводниках в твоем процессоре со скоростью света


Ну, представь что разброс будет стандартный - 20 бит, и придётся на эти 20 бит поочерёдно сместиться назад и каждый раз проверять больше 1к вариантов содержимого, и всё это пока пакет висит на "рекейве" ._.

Уверен что это не нагрузит сильно?

FYP
17.04.2017, 14:10
Спасибо, сохраню-ка я это.
А вот насчёт считывания всего пакета, я примерно так и думал, когда заметил что один и тот же рпц со строчкой иногда выдаёт разный размер данных, разброс битов примерно +-20
А можно как-то автоматизировать пропуск битов? Ну допустим изначально пройтись по стандартному оффсету, и пропускать результат через коллбек-функцию с заготовками возможного текста, и если нет совпадений - отступать по одному биту назад, повторая пока функция не найдёт ожидаемый результат, либо пока биты не кончатся.
Меня просто волнует такая ситуация, что это (как мне кажется) полностью сожрёт фпс, а то и игру крашнет, поскольку текстдравов приходит очень много, и каждый обрабатывать - весьма затратно по ресурсам, с учётом того что там банальный перебор, и сколько он времени займёт неизвестно никому


в сампе почти во всех пакетах перед самой строкой пишется её длина

I0000M
18.04.2017, 15:28
в сампе почти во всех пакетах перед самой строкой пишется её длина


Так понимаю, это тип uint?

Попробую считать. Может получится.

Dark_Knight
18.04.2017, 17:04
Так понимаю, это тип uint?
Попробую считать. Может получится.


Иногда и байт может быть

Dark_Knight
21.04.2017, 12:14
Давай свой код. Ничего там не теряется.

Код:





[CODE]
char buffer[1024];
strcpy(buffer, "ТА ПІШОВ ТИ НАХУЙ");
std::string str(buffer);
std::cout

ishi
21.04.2017, 12:17
[QUOTE="Dark_Knight"]

Давай свой код. Ничего там не теряется.

Код:





[CODE]
char buffer[1024];
strcpy(buffer, "ТА ПІШОВ ТИ НАХУЙ");
std::string str(buffer);
std::cout

Dark_Knight
21.04.2017, 12:49
можно просто игнорировать тех, кто тебя чем-то раздражает, но конечно ты решишь что лучше показать свою нетерпимость. мудак


Я тебя попросил код, чтобы помочь. Написал код примера по приколу, а ты как маленькая девочка, все принял близко к сердцу. Так что давай свой код, который у тебя криво работает и будет разбираться.

Dark_Knight
21.04.2017, 23:50
Вообще, читаю РПЦ со строками не так. Так что я даже смотреть туда не буду.

Вот тебе рабочий вариант c ракнета.

https://github.com/P3ti/RakSAMP/blo...8803c14df486d48fe/client/src/netrpc.cpp#L1093 (https://github.com/P3ti/RakSAMP/blob/c5ddb3c79dbf974471bb5088803c14df486d48fe/client/src/netrpc.cpp#L1093)

Структура TEXT_DRAW_TRANSMIT

https://github.com/P3ti/RakSAMP/blob/c5ddb3c79dbf974471bb5088803c14df486d48fe/common/common.h#L203

ishi
22.04.2017, 13:31
В каком типе данных можно хранить цвет сообщений из чата?

MISTER_GONWIK
22.04.2017, 13:32
В каком типе данных можно хранить цвет сообщений из чата?


D3DCOLOR

ishi
22.04.2017, 13:33
D3DCOLOR


Блин, я не знал что это формат, прям удивил меня ._.

Спасибо!

MISTER_GONWIK
22.04.2017, 13:35
Блин, я не знал что это формат, прям удивил меня ._.
Спасибо!


какой формат? :scratch:

ishi
22.04.2017, 13:49
какой формат? :scratch:


Спецификатор типа -.-

Придираешься.

ishi
22.04.2017, 14:07
Немножко оффтоп, но всё же

Как в 13й студии включить показ времени, затраченного на сборку проекта?

И ещё. Как сделать так, чтобы выводило время, затраченное на выполнение коллбека? (ну, тип, начался отсчёт как он начнёт работать, и по возврату выдало время)

p.s. Гоголь не особо прошарен, всякая всячина по студии вылезла, но конкретно моего вопроса не выдало

BlackKnigga
22.04.2017, 14:09
Немножко оффтоп, но всё же
Как в 13й студии включить показ времени, затраченного на сборку проекта?
p.s. Гоголь не особо прошарен, всякая всячина по студии вылезла, но конкретно моего вопроса не выдало


Tools -> Options -> Projects and Solutions -> VC++ Project Settings -> Build Timing

Нашел в гугле с первого запроса. Проверяй

ishi
22.04.2017, 14:10
Tools -> Options -> Projects and Solutions -> VC++ Project Settings -> Build Timing
Нашел в гугле с первого запроса. Проверяй


Верю на слово, я же не чекаю каждую страницу, а читаю превьюхи

Пытаюсь сделать хук на входящие сообщения, проблема старая - не могу нормально считать строки. Думал проблема в том что буффер значительно больше строки, решил вычесть отступ в два байта (согласно логу рэклоггера) из общего размера пакета, чтобы получить размер строки, которая там будет находиться (ею кончается пакет, как я понял)

Но мне не разрешает выставлять переменную в качестве размера другой переменной.

Если же поставить как раньше - размер в 144 байта, будет выводиться пустая строка в чат

Сил уже нет никаких с этими строками воевать, скажите что я не так делаю-то, фыр

C++:






bool
CALLBACK
irpc
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
101
)
{
params
->
bitStream
->
ResetReadPointer
(
)
;
int
qwe
=
params
->
bitStream
->
GetNumberOfBitsUsed
(
)
;
int
qq
=
(
qwe
-
16
)
;
params
->
bitStream
->
IgnoreBits
(
16
)
;
int
ww
=
BITS_TO_BYTES
(
qq
)
;
char
ttt
[
ww
]
;
params
->
bitStream
->
Read
(
ttt
)
;
std
::
string
str
(
ttt
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"%s"
,
ttt
)
;
//byte packId;
//params->bitStream->Read(packId);
//D3DCOLOR color;
//params->bitStream->Read(color);
}
return
true
;
}

MISTER_GONWIK
22.04.2017, 15:10
Пытаюсь сделать хук на входящие сообщения, проблема старая - не могу нормально считать строки. Думал проблема в том что буффер значительно больше строки, решил вычесть отступ в два байта (согласно логу рэклоггера) из общего размера пакета, чтобы получить размер строки, которая там будет находиться (ею кончается пакет, как я понял)
Но мне не разрешает выставлять переменную в качестве размера другой переменной.
Если же поставить как раньше - размер в 144 байта, будет выводиться пустая строка в чат
Сил уже нет никаких с этими строками воевать, скажите что я не так делаю-то, фыр

C++:






bool
CALLBACK
irpc
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
101
)
{
params
->
bitStream
->
ResetReadPointer
(
)
;
int
qwe
=
params
->
bitStream
->
GetNumberOfBitsUsed
(
)
;
int
qq
=
(
qwe
-
16
)
;
params
->
bitStream
->
IgnoreBits
(
16
)
;
int
ww
=
BITS_TO_BYTES
(
qq
)
;
char
ttt
[
ww
]
;
params
->
bitStream
->
Read
(
ttt
)
;
std
::
string
str
(
ttt
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"%s"
,
ttt
)
;
//byte packId;
//params->bitStream->Read(packId);
//D3DCOLOR color;
//params->bitStream->Read(color);
}
return
true
;
}






C++:






D3DCOLOR color
=
-
1
;
int
length
=
0
;
char
message
[
256
]
{
0
}
;
param
->
bitStream
->
Read
(
color
)
;
param
->
bitStream
->
Read
(
length
)
;
param
->
bitStream
->
Read
(
message
,
length
)
;

ishi
22.04.2017, 15:20
C++:






D3DCOLOR color
=
-
1
;
int
length
=
0
;
char
message
[
256
]
{
0
}
;
param
->
bitStream
->
Read
(
color
)
;
param
->
bitStream
->
Read
(
length
)
;
param
->
bitStream
->
Read
(
message
,
length
)
;





Ну, согласно логгеру, там негде поместиться цвету и длине, серьёзно

Вот так выглядит лог сообщения в чат, когда я отправляю единицу:







Код:






[13:52:27.700] > [RPC Recv] RPC_Chat[101](length: 4 bytes, 32 bits)
> dump:
0000 00 00 01 31 ...1




Или первые два байта это цвет, а третий - длина?

Ответь пожалуйста, очень важно, я хочу наконец разобраться в теме

Dark_Knight
22.04.2017, 15:21
Пытаюсь сделать хук на входящие сообщения, проблема старая - не могу нормально считать строки. Думал проблема в том что буффер значительно больше строки, решил вычесть отступ в два байта (согласно логу рэклоггера) из общего размера пакета, чтобы получить размер строки, которая там будет находиться (ею кончается пакет, как я понял)
Но мне не разрешает выставлять переменную в качестве размера другой переменной.
Если же поставить как раньше - размер в 144 байта, будет выводиться пустая строка в чат
Сил уже нет никаких с этими строками воевать, скажите что я не так делаю-то, фыр

C++:






bool
CALLBACK
irpc
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
101
)
{
params
->
bitStream
->
ResetReadPointer
(
)
;
int
qwe
=
params
->
bitStream
->
GetNumberOfBitsUsed
(
)
;
int
qq
=
(
qwe
-
16
)
;
params
->
bitStream
->
IgnoreBits
(
16
)
;
int
ww
=
BITS_TO_BYTES
(
qq
)
;
char
ttt
[
ww
]
;
params
->
bitStream
->
Read
(
ttt
)
;
std
::
string
str
(
ttt
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"%s"
,
ttt
)
;
//byte packId;
//params->bitStream->Read(packId);
//D3DCOLOR color;
//params->bitStream->Read(color);
}
return
true
;
}





Первое. Не надо юзать иды при чтении РПЦ. Большинство просто не помнят все иды на изусть и не удобно так читать. Юзай значение с eNum.

Второе. Код вообще не правильный. Если irpc это входящие РПЦ, то если мне память не изменяет, то он только исходящий, но может быть и входящим тоже. Прочекаешь

Третье. Вот тебе страница со структурами РПЦ. https://docs.google.com/spreadsheets/d/1iIxEk7yR8r7ZLGiSAL4ndtz_N1k0p3Wt7TE5bei6ztU/edit#gid=1 (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2 QvMWlJeEVrN3lSOHI3WkxHaVNBTDRuZHR6X04xazBwM1d0N1RF NWJlaTZ6dFUvZWRpdCNnaWQ9MQ)

Четвертое. Вот тебе рабочий код и пример как вообще строки надо читать.

Код:






if (params->packetId == RPCEnumeration::RPC_ServerCommand) {
DWORD len;
char command[256];
BitStream *bs = params->bitStream;
bs->ResetReadPointer();
bs->Read(len);
bs->Read(command, len);
command[len] = '\0';
}

MISTER_GONWIK
22.04.2017, 15:23
Ну, согласно логгеру, там негде поместиться цвету и длине, серьёзно
Вот так выглядит лог сообщения в чат, когда я отправляю единицу:







Код:






[13:52:27.700] > [RPC Recv] RPC_Chat[101](length: 4 bytes, 32 bits)
> dump:
0000 00 00 01 31 ...1




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


ты чёт какой-то левый рпс ловишь, так-то над эт:

C++:






if
(
param
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrClientMessage
)
// id: 93
{
.
.
}




p.s. возможно у тебя старый раклоггер

ishi
22.04.2017, 15:25
Второе. Код вообще не правильный. Если irpc это входящие РПЦ, то если мне память не изменяет, то он только исходящий, но может быть и входящим тоже. Прочекаешь


В собейтовом .ini смотрел, он там одновременно и входящий и исходящий, ид и название идентичны

За справочку и пример огромное спасибо.



p.s. возможно у тебя старый раклоггер


отсюда логгер качал, тот что для 0.3.7

Dark_Knight
22.04.2017, 15:26
ты чёт какой-то левый рпс ловишь, так-то над эт:
p.s. возможно у тебя старый раклоггер


Если он ловит входящие сообщения от сервера, то РПЦ не правильный. Если только сообщения, которые он отправил в чат без команды, то верный ид. Для исходящих команд другой РПЦ.

MISTER_GONWIK
22.04.2017, 15:26
и на будущее,

C++:






.
.
->
ResetReadPointer
(
)
;




уже не нужно использовать



Если он ловит входящие сообщения от сервера, то РПЦ не правильный. Если только сообщения, которые он отправил в чат без команды, то верный ид. Для исходящих команд другой РПЦ.


если чё, то

https://puu.sh/vsqRR/81b81a276c.png

именно

C++:






RPC_ScrClientMessage




нужен для этого

Dark_Knight
22.04.2017, 15:28
и на будущее,

C++:






.
.
->
ResetReadPointer
(
)
;




уже не нужно использовать


Хз. Я привык юзать на всякий пожарный. Хотя надо в СФ глянуть как оно там)

MISTER_GONWIK
22.04.2017, 15:29
Хз. Я привык юзать на всякий пожарный. Хотя надо в СФ глянуть как оно там)


в сфе это уже давно исправлено, он сам сбивает

ishi
23.04.2017, 13:46
У меня вопрос. Таким образом я могу преобразовать чар в строку для одной конкретной функции, чтобы не выделять переменную?

Если нет, то что я делаю таким образом?

SF->getSAMP()->getChat()->AddChatMessage(555555, "%s", string(command))

MISTER_GONWIK
23.04.2017, 13:51
У меня вопрос. Таким образом я могу преобразовать чар в строку для одной конкретной функции, чтобы не выделять переменную?
Если нет, то что я делаю таким образом?
SF->getSAMP()->getChat()->AddChatMessage(555555, "%s", string(command))



C++:






SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"%s"
,
string
(
command
)
.
c_str
(
)
)

ishi
26.04.2017, 12:52
В уроке по рендеру через SF API показывали работу с рендером directX (как я понял), и у меня вот вопрос возник: это для какой версии dx?

И ещё. Если я разберусь в сдк, например, 12-го dx, смогу ли я через SF рендерить на нём, используя его SDK?

MISTER_GONWIK
26.04.2017, 13:47
В уроке по рендеру через SF API показывали работу с рендером directX (как я понял), и у меня вот вопрос возник: это для какой версии dx?
И ещё. Если я разберусь в сдк, например, 12-го dx, смогу ли я через SF рендерить на нём, используя его SDK?


directx 9, нет

ishi
26.04.2017, 21:26
Как создать поток, если необходимый для CWinThread header просто ломает код и создаёт ошибки, а std:thread не хочет работать, аргументируя тем, что "thread не является членом std"?

itsLegend
26.04.2017, 21:29
#include

Dark_Knight
26.04.2017, 22:27
Как создать поток, если необходимый для CWinThread header просто ломает код и создаёт ошибки, а std:thread не хочет работать, аргументируя тем, что "thread не является членом std"?


Только, если тебе нужно в потоке менять данные которые ты передаешь, то надо передавать ссылки через std::ref.

ishi
27.04.2017, 14:33
C++:






ofstream
fout
(
"yiffme"
,
ios
::
app
)
;




Объявить это дело глобально при помощи extern не удаётся, в связи с чем вопрос: каким образом объявить fout внутри функции глобальной переменной?

Dark_Knight
27.04.2017, 14:56
Создавай указатель.

ishi
27.04.2017, 15:12
Создавай указатель.



C++:






extern
int
*
ptr
=
&
fout
;




выдаёт







Код:






1>main.cpp(53): error C2205: ptr: невозможно инициализировать внешние переменные с областью видимости блока




Последние три слова мне вообще ничего не говорят ._.

гугл тоже не смог мне помочь. Всё плохо.

Dark_Knight
27.04.2017, 15:32
Не так надо.

Пример

C:






в main
.
h
extern
int
*
ptr
;
в main
.
cpp
int
*
ptr
=
nullptr
;
void
main
(
)
{
if
(
!
ptr
)
ptr
=
new
int
;
}

BlackKnigga
27.04.2017, 15:42
У меня такой штуки в "решении" нету. Её создать надо?


Да, и включить в main.cpp

ishi
27.04.2017, 15:54
в main.cpp:







C++:






int
*
ptr
=
nullptr
;




в main.h:







C++:






extern
int
*
ptr
;




В void callback mainloop:

C++:






*
ptr
=
&
fout
;




Ошибка:

Код:






error C2440: =: невозможно преобразовать "std::ofstream *" в "int"

BlackKnigga
27.04.2017, 16:01
в main.cpp:







C++:






int
*
ptr
=
nullptr
;




в main.h:







C++:






extern
int
*
ptr
;




В void callback mainloop:

C++:






*
ptr
=
&
fout
;




Ошибка:

Код:






error C2440: =: невозможно преобразовать "std::ofstream *" в "int"





Так ты объявляй ofstream, а не int

ishi
27.04.2017, 16:12
Так ты объявляй ofstream, а не int


main.h

Код:






extern ofstream *ptr;




main.cpp

C++:






ofstream
*
ptr
=
nullptr
;




void callback mainloop

C++:






*
ptr
=
&
fout
;




ошибки:

Код:






1>main.cpp(17): error C2371: ptr: переопределение; различные базовые типы
1> c:\users\snezh\documents\visual studio 2013\projects\aa\sfplugin\qwe\main.h(1): см. объявление "ptr"
1>main.cpp(53): error C2440: =: невозможно преобразовать "std::ofstream *" в "int"
1> Не существует контекста, в котором такое преобразование возможно
1>

MISTER_GONWIK
27.04.2017, 16:18
C++:






ofstream
fout
(
"yiffme"
,
ios
::
app
)
;




Объявить это дело глобально при помощи extern не удаётся, в связи с чем вопрос: каким образом объявить fout внутри функции глобальной переменной?



C++:






// main.cpp
ofstream
fout
(
"yiffme"
,
ios
::
app
)
;
// main.h
extern
ofstream fout
;

SR_team
27.04.2017, 16:25
невозможно преобразовать "std::ofstream *" в "int"


int a = reinterpret_cast(&fout);

ishi
27.04.2017, 16:40
int a = reinterpret_cast(&fout);


Это ведь можно использовать как сам fout, ссылаясь на него? Так примерно:

*a

Dark_Knight
27.04.2017, 17:17
Какая у тебя задача вообще ? А то щас настроеш код из говна и палок и потом хер разберешься почему у тебя крашит.

ishi
27.04.2017, 17:22
Какая у тебя задача вообще ? А то щас настроеш код из говна и палок и потом хер разберешься почему у тебя крашит.


Отлично сказано.

Да вот я хотел поставить условие на проверку существования файла для логов, и открывать файл создавая указатель для записи, в зависимости от его наличия - есть файл, пишем с конца . Нет файла - создаём заново. Вот. И поскольку заполнение лога идёт через хук, мне требуется создать указатель на файл, (fout) в mainloop, чтобы он был доступен коллбеку irpc, вот код если не понятно:




C++:






#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#include "SFAPI\SFRakNet.h"
#include
#include
#include
#include
#include
#include "qwe\main.h"
#pragma comment(lib, "shlwapi.lib")
using
namespace
std
;
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
int
*
a
=
nullptr
;
bool
CALLBACK
irpc
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrClientMessage
)
// id: 93 thanks for MISTER_GONWIK
{
D3DCOLOR color
=
-
1
;
int
length
=
0
;
char
message
[
144
]
{
0
}
;
params
->
bitStream
->
Read
(
color
)
;
params
->
bitStream
->
Read
(
length
)
;
params
->
bitStream
->
Read
(
message
,
length
)
;
//sss[len] = '\0';
if
(
strcmp
(
string
(
message
)
.
c_str
(
)
,
" "
)
==
0
)
return
false
;
else
{
//SF->getSAMP()->getChat()->AddChatMessage(555555, "%s", string(message).c_str());
//fout
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
init
=
true
;
char
meow
[
MAX_PATH
]
;
GetCurrentDirectory
(
sizeof
(
meow
)
,
meow
)
;
if
(
PathFileExists
(
strcat
(
meow
,
"/yiffme"
)
)
)
{
ofstream
fout
(
"yiffme"
,
ios
::
app
)
;
*
a
=
reinterpret_cast

(
&
fout
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"file exist"
)
;
}
else
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"file doesnt exist"
)
;
fout

getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
irpc
)
;
}
}

MISTER_GONWIK
27.04.2017, 19:21
Отлично сказано.
Да вот я хотел поставить условие на проверку существования файла для логов, и открывать файл создавая указатель для записи, в зависимости от его наличия - есть файл, пишем с конца . Нет файла - создаём заново. Вот. И поскольку заполнение лога идёт через хук, мне требуется создать указатель на файл, (fout) в mainloop, чтобы он был доступен коллбеку irpc, вот код если не понятно:



C++:






#include
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#include "SFAPI\SFRakNet.h"
#include
#include
#include
#include
#include
#include "qwe\main.h"
#pragma comment(lib, "shlwapi.lib")
using
namespace
std
;
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
int
*
a
=
nullptr
;
bool
CALLBACK
irpc
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrClientMessage
)
// id: 93 thanks for MISTER_GONWIK
{
D3DCOLOR color
=
-
1
;
int
length
=
0
;
char
message
[
144
]
{
0
}
;
params
->
bitStream
->
Read
(
color
)
;
params
->
bitStream
->
Read
(
length
)
;
params
->
bitStream
->
Read
(
message
,
length
)
;
//sss[len] = '\0';
if
(
strcmp
(
string
(
message
)
.
c_str
(
)
,
" "
)
==
0
)
return
false
;
else
{
//SF->getSAMP()->getChat()->AddChatMessage(555555, "%s", string(message).c_str());
//fout
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
init
=
true
;
char
meow
[
MAX_PATH
]
;
GetCurrentDirectory
(
sizeof
(
meow
)
,
meow
)
;
if
(
PathFileExists
(
strcat
(
meow
,
"/yiffme"
)
)
)
{
ofstream
fout
(
"yiffme"
,
ios
::
app
)
;
*
a
=
reinterpret_cast

(
&
fout
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"file exist"
)
;
}
else
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
555555
,
"file doesnt exist"
)
;
fout

getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
irpc
)
;
}
}









Это лишь пример накидал, но не пользуйся такими дерьмовыми функциями как:

C++:






GetCurrentDirectory
(
.
.
)
,
PathFileExists
(
.
.
)
и т
.
д
.




займись изучением чего-то более классного и функционального

C++:





[CODE]
// после всех инклудов
#include
namespace
fs
=
std
::
experimental
::
filesystem
;
// самой первой функцией
std
::
ofstream
&
log
(
)
{
static
std
::
ofstream logFile
;
if
(
logFile
.
is_open
(
)
==
false
)
{
fs
::
path workDirectoryPath
=
fs
::
current_path
(
)
/
"SAMPFUNCS"
/
"Meow"
;
if
(
!
fs
::
exists
(
workDirectoryPath
)
)
fs
::
create_directories
(
workDirectoryPath
)
;
fs
::
path logFilePath
=
workDirectoryPath
/
"yiffme.fr"
;
bool
fileExists
=
fs
::
exists
(
logFilePath
)
;
logFile
.
open
(
logFilePath
.
string
(
)
,
std
::
ios
::
app
)
;
if
(
fileExists
==
true
)
logFile



ну и mainloop в твоём случае должен выглядеть вот так:

C++:





[CODE]
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getRakNet
(
)
->
registerRakNetCallback
(
RakNetScriptHookType
::
RAKHOOK_TYPE_INCOMING_RPC
,
incomingRPC
)
;
log
(
)



а irpc

C++:





[CODE]
bool
CALLBACK
incomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrClientMessage
)
// id: 93 thanks for MISTER_GONWIK
{
D3DCOLOR color
=
-
1
;
int
length
=
0
;
char
message
[
144
]
{
0
}
;
params
->
bitStream
->
Read
(
color
)
;
params
->
bitStream
->
Read
(
length
)
;
params
->
bitStream
->
Read
(
message
,
length
)
;
if
(
!
strcmp
(
message
,
" "
)
)
return
false
;
log
(
)

winrare
28.04.2017, 09:09
Запустил через RakSAMP три бота на advance. Примерно через 10 минут двух ботов телепортировал к себе администратор, а ещё через минуту забанил всех трех за использование "песочницы".

Как он определил, что я использую "песочницу"? Скорее всего посмотрел, что одинаковые ip, но как тогда можно обмануть админов? Можно сделать, чтобы боты двигались, но администратор может телепортировать в любую точку и бот тупо может забежать в стену.

MISTER_GONWIK
28.04.2017, 09:26
Запустил через RakSAMP три бота на advance. Примерно через 10 минут двух ботов телепортировал к себе администратор, а ещё через минуту забанил всех трех за использование "песочницы".
Как он определил, что я использую "песочницу"? Скорее всего посмотрел, что одинаковые ip, но как тогда можно обмануть админов? Можно сделать, чтобы боты двигались, но администратор может телепортировать в любую точку и бот тупо может забежать в стену.


проще сказать, что никак.

winrare
28.04.2017, 09:42
проще сказать, что никак.


А если не проще? Я не ищу легких путей.

MISTER_GONWIK
28.04.2017, 10:08
А если не проще? Я не ищу легких путей.


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

winrare
28.04.2017, 10:28
для тебя это невозможно, хочешь чтоб бот бегал как человек, пиши систему путей, но учти, у тебя нет никакой карты коллизии


Такая система мне нужна в случае, если админ уже телепортировал меня. А что если просто не доходить до этого? Скорее всего он вычисляет меня по ip (если есть ещё варианты, скажи), значит если будут разные ip, то все будет нормально. Разные ip можно получить используя прокси, но я не знаю, поддерживает ли RakSAMP или хотя бы RakNet прокси.

MISTER_GONWIK
28.04.2017, 10:44
Такая система мне нужна в случае, если админ уже телепортировал меня. А что если просто не доходить до этого? Скорее всего он вычисляет меня по ip (если есть ещё варианты, скажи), значит если будут разные ip, то все будет нормально. Разные ip можно получить используя прокси, но я не знаю, поддерживает ли RakSAMP или хотя бы RakNet прокси.


1. обычный раксамп не поддерживает работу через прокси, но сделать можно, как это сделать, думай сам.

2. я не админ на сервере, так что могут сказать лишь предположительно, что есть команда, по которой отображаются текущие онлайн аккаунты с одного ип (как ты и подумал), для раксампа нужны прокси UDP, их ты не найдёшь, только если с помощью программ hotspot shield и прочих.

3. сомневаюсь что всё это спасёт тебя от банов, ведь они всё равно палятся (я про ботов)

winrare
28.04.2017, 11:25
ведь они всё равно палятся


Как они палятся? Я могу заставить бота бегать между точками, с анимацией бега, его все равно спалят?

ishi
28.04.2017, 12:50
GetCurrentDirectory(..), PathFileExists(..)


А чем плохи конкретно эти функции?



займись изучением чего-то более классного и функционального


Я делаю так, как в клео привык - составляю на бумажке примерный "план" проекта, расписывая все нужные функции, а затем разбиваю эти функции на другие функции, без которых предыдущие реализовать не получится, и просто ввожу желаемые действия функций в поиск, не забывая указывать site:microsoft.com. Так я и нахожу нужные функции, а насколько они хороши мне судить как-то рановато, мне ведь даже не каждую из них применить-то удаётся, сам толком ничего не умею Х)

Но конечно спасибо за совет, расширять кругозор точно не будет лишним

MISTER_GONWIK
28.04.2017, 13:13
А чем плохи конкретно эти функции?

Я делаю так, как в клео привык - составляю на бумажке примерный "план" проекта, расписывая все нужные функции, а затем разбиваю эти функции на другие функции, без которых предыдущие реализовать не получится, и просто ввожу желаемые действия функций в поиск, не забывая указывать site:microsoft.com. Так я и нахожу нужные функции, а насколько они хороши мне судить как-то рановато, мне ведь даже не каждую из них применить-то удаётся, сам толком ничего не умею Х)
Но конечно спасибо за совет, расширять кругозор точно не будет лишним


они устарели, я б сказал, что они больше С, а то что я скинул - С++

у std:: очень хороший функционал, изучай его

MISTER_GONWIK
28.04.2017, 13:19
Как они палятся? Я могу заставить бота бегать между точками, с анимацией бега, его все равно спалят?


ответ очень прост, боты не способны действовать как люди, их действия повторяются, они очень примитивные и т.д.

ishi
28.04.2017, 13:25
они устарели, я б сказал, что они больше С, а то что я скинул - С++
у std:: очень хороший функционал, изучай его


Немного оффтопа.

Слыхал я, си в разработке игр популярен, и тесно связан с ассемблером. Это правда?

ishi
28.04.2017, 14:28
#include
namespace fs = std::experimental::filesystem;


вот такую ошибку выдаёт:

1>main.cpp(17): error C3083: experimental: символ слева от "::" должен представлять тип

1>main.cpp(17): error C2039: filesystem: не является членом "std"

1>main.cpp(17): error C2878: filesystem: пространство имен или класс с таким именем не существует

FYP
28.04.2017, 15:39
Немного оффтопа.
Слыхал я, си в разработке игр популярен, и тесно связан с ассемблером. Это правда?


тесно связан с ассемблером - да. но в разработке игр чистый си очень не популярен, в разработке игр очень популярен c++. если не считать всякую early access ***ню в стиме и инди игры, то большинство написано именно на c++.



вот такую ошибку выдаёт:
1>main.cpp(17): error C3083: experimental: символ слева от "::" должен представлять тип
1>main.cpp(17): error C2039: filesystem: не является членом "std"
1>main.cpp(17): error C2878: filesystem: пространство имен или класс с таким именем не существует


filesystem появился в VS 2015.

iAmerican
29.04.2017, 23:09
Что гуглить что бы узнать об..

Например в SF->Log()

Можно делать так SF->Log("Текст")

А можно и так SF->Log("%s",string)

Как это реализуется ?

Смотрел в собейтике , но чё то там непонятно как то.

DarkP1xel
29.04.2017, 23:55
Это переменное число параметров для функции. Подробнее: http://www.c-cpp.ru/content/vastart-vaend-vaarg (https://www.blast.hk/redirect/aHR0cDovL3d3dy5jLWNwcC5ydS9jb250ZW50L3Zhc3RhcnQtdm FlbmQtdmFhcmc)

ishi
01.05.2017, 14:33
Можно как-нибудь сделать так, чтобы когда что-то попытается сделать запись по определённому адресу, предотвратить эту запись и обработать, и уже потом либо "разрешить" (просто сделать то, что что-то хотело), либо забыть и ничего не записывать? (да, это я пытаюсь хук придумать)