Всем привет! Помогите пожалуйста. Проблема касается игры Counter-Strike. Вообщем хотел бы узнать, каким образом можно из своей программы отправить команду на выполнение в консоль CS, т.е. можно ли каким-нибудь образом проследить, какую функцию вызывает cs при вводе консольной команды и сделать так, чтобы моя программа смогла бы сэмулировать выполнение этой команды в самом CS. Пробовал эмуляцию нажатия клавиш, но этот способ неэффективный
Это не просто. Нужно точно понять как программа выполняет процесс - на пример, после того как комманда напечатана юзером в консоле, и юзер нажимает энтер - что происходит? Пересылается ли запрос на другую нить? Или запрос добаляется в какой-то очередной список (job queue)? После этого уже размышлять как в этот процесс внедрится...
Сама команда называется "playdemo" или другой вариант "viewdemo". При вводе команды должна воспроизвестить демка, т.е. должен произойти доступ к демо-файлу. Тут я не понял к сожалению. Я пробовал в Olly что-нибудь найти, но там ошибка появляется "Exception: **** Press Shift+F7/F8/F9 to pass" - что-то в этом роде. Также пробовал через API Logger v1.0 [black ninja], и там есть зацепка - функция "OutputDebugStringA", т.к. если запустить кс с параметром "+playdemo", то в консоли контера появляется надпись "Playing demo ****.dem". API Logger показал мне вот это: Теперь надо проверить эту функцию, но я, к сожалению, не знаю как это сделать (внедриться в процесс hl.exe и выполнить там эту функцию).
Ты что английский совсем не знаешь. Это просто вывод отладочного сообщения. Либо ты на поймал нужного API, либо вызов происходит "внутри" программы-игры и никакого специального API нет.
valterg[\b] просто человек пытается сразу решить задачу не имея общих знаний о данной области. Таких людей тысячи и большинство бросает это дело сразу, осознав свою малограмотность в этом вопросе. hunt[\b] начни с простого, почитай статьи и изучи инструмент. Ломать игры это не так просто, как придумывать идеи их модернизации.
hunt[\b] ..я делаю перехват функции в Контре.. хоть нету что тебе надо, но представления есть что как и почем.. Лучше ты скажи зачем это всьо надо тебе ? В OpenGL – wglSwapBuffers В DirecX8 - Present ... InjHdc.zip
Из общих соображений запуск демки - это запуск экзешника игры с какими-то ключами. Осталось найти их имена и формат задания Думаю эта инфа давно уже опубликована, т.к. не предсавляет "опасности"...
Вы не так поняли. Про параметры запуска я и так давно знаю про это. Мне нужно в уже в уже запущенный Counter-Strike отправить команду на выполнение.
Ну так вам сначала и написали, что это делается внутри программы и вряд ли там какие-то API. Просто команда анализируется и игра идет туда же(грубо говоря), куда она идет при вызове с ключом. Наверняка там есть простые антиотладочные приемы, вот Олли у вас глючит. А чтобы с Олли что-то найти надо хотя в общих чертах уметь программировать(или понимать принципы программирования). Все API которые там были "замурованы" в бинарный код и могут быть найдены именно глубоким анализом. Правда если есть какие-то "примочки" к игре, то можно их поизучать. Например читеры. Попробуйте для начала проанализировать что делает экзешник при запуске с ключом - это относительно просто. Если и это не получится, то как говорил тов. Бендер "плюньте товарищ ...". Если получится - вы найдете процедуру выполняющую демо. Теперь делает многотонный дизасм или ищем Олей вызов этой функции в экзешнике и трудимся дальше.
Ну и есть дедовский способ работы - по сообщениям об ошибках. Сначала смотрим какие ошибки бывают в консоли и лучше, связанные с ситаксисом команд. Далее по дизасму опять ищем где они вызываются - это и будет обработчик консоли(возможно придется делать более глубокий анализ). Ну а далее, либо вы станете подмастерье, либо займетесь делом, которое умеете делать. Либо будете досаждать очередными глупыми вопросами.