You are not logged in.
0AA7: call_function 1@ num_params 2 pop 2 4 7 3@
Почему ты указываешь кол-во параметров 2, когда их у тебя стоит три.
Offline
3@ - это не 3й параметр, а переменная для приема результата функции, тут все нормально.
Добавь проверки на загруженность dll и нахождение нужной процедуры.
И попробуй изменить в 0AA7 параметр pop на 0 и временно убрать запись в ини-файл (возможно вылет на этом опкоде).
Offline
Спасибо, сейчас попробую
Offline
Ошибка на стадии проверки на загруженность.
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007 {$VERSION 3.1.0027} {$CLEO .cs} thread 'dlltest' 0AA2: 0@ = load_library "CLEO\mydll.dll" // IF and SET 0AA4: 1@ = get_proc_address "plus" library 0@ // IF and SET :dll1 wait 0 if and 0AA2: 0@ = load_library "CLEO\mydll.dll" // IF and SET 0AA4: 1@ = get_proc_address "plus" library 0@ // IF and SET then 4@ = 1 else 4@ = 0 end 0AF1: write_int 4@ to_ini_file "cleo\mydll.ini" section "mydll" key "loaded" if and 4@ == 1 0AB0: 16 0AB0: 85 jf @dll1 0AA7: call_function 1@ num_params 2 pop 0 4 7 3@ //0AF1: write_int 3@ to_ini_file "cleo\mydll.ini" section "mydll" key "plus" wait 50000 jump @dll1
Last edited by Wire (07-10-2010 17:36)
Offline
@Wire -
mydll.cpp
__declspec(dllexport) int plus (int a, int b) { return a + b; }
mydll.def
EXPORTS plus
{$CLEO} 0000: while true wait 0 if 0AB0: key_pressed 0x73 then if 0AA2: 0@ = load_library "CLEO\mydll.dll" // IF and SET then if 0AA4: 1@ = get_proc_address "plus" library 0@ // IF and SET then 0AA7: call_function 1@ num_params 2 pop 0 1 2 2@ 0ACE: show_formatted_text_box "%d" 2@ end 0AA3: free_library 0@ end end end
---
__cdecl (/Gd) pop 2 __stdcall (/Gz) pop 0
Last edited by Sanchez (07-10-2010 17:43)
Offline
@Sanchez
Хм, у меня с написанием длл пока что мало опыта... куда надо совать .def-файл? (работаю в VS2008)
Offline
@Wire - просто добавь к проекту.
Файл определения модуля (.def) Visual C++
Last edited by Sanchez (07-10-2010 17:48)
Offline
Всё так же не работает( Ничего не понимаю
Добавил .def, сделал все, как ты сказал, но все так же не загружает библиотеку.
Скрипт свой оставил без изменений, все таки тоже самое.
Offline
Может, я неправильно добавил .def? Я не нашел, как его добавить через меню в студии, поэтому создал отдельно и присоединил к проекту.
Last edited by Wire (07-10-2010 17:55)
Offline
@Wire - В свойствах проекта посмотри Соглашение о вызовах если __cdecl (/Gd), то pop 2, если __stdcall (/Gz), то pop 0.
Offline
Там стоит __cdecl (/Gd), поставил pop 2, ничего не изменилось, скрипт всё так же не загружает библиотеку.
Offline
Такс, разбил проверку на загруженность библиотеки и получение указателя на процедуру.
Библиотека загружается, а вот указатель не найден.
Offline
Посмотри как выглядит экспортируемая функция, если как-то так: ?plus@@YAHHH@Z, то сделал что-то не то.
Прикрепил готовую dll и скрипт для примера.
Last edited by Sanchez (08-10-2010 05:17)
Offline
...А где смотреть?
___
И можешь кинуть исходники?
Last edited by Wire (07-10-2010 20:02)
Offline
Всем привет. Никто не знает каким способом можно сидя в машине менять оружие? Если не влом то выложите код плиз)
Ах да - вот есть в сане режим драйвбая, если поместить игрока на пассажирском сидении в режим драйвбая в калашом, то калаш невидно( Можно ли как нить сделать так чтоб игра погружала модель оружия? Заранее СПС.
Offline
Модели загружаются в память командой model.load(#модель), выгружаются - model.destroy(#модель)
Оружие можно поменять опкодом
01B9: set_actor $player_actor armed_weapon_to <номер оружия>
Offline
Не, вариант с загрузкой модели просто не пашет. Я пробовал сначала грузить, а потом проверять что модель загружена, но игра как упёртая не подгружала модель при драйвбае.
А тот опкод внатуре меняет оружие в авто? Если да, то он мне позарез то и нужен)
Offline
У меня просто суть такова, что если игрок сидит пассажиром, то на кнопки Q и E можно менять оружие, а так же при нажатии клавиши игрок помещается в драйвбай с выбранным оружием - оружие видно. Но я не смог понять как в авто поменять оружие, а так же как сделать чтобы игра принудительно подгружала модель любого оружия при драйвбае .
Offline
Опкод 01B9 просто устанавливает текущее оружие. Модель, возможно, не видна, потому что дб с калашникова\м4 не предусмотрена игрой.
Offline
Не, вариант с загрузкой модели просто не пашет. Я пробовал сначала грузить, а потом проверять что модель загружена, но игра как упёртая не подгружала модель при драйвбае.
А тот опкод внатуре меняет оружие в авто? Если да, то он мне позарез то и нужен)
Попробуй посмотреть скрипт driveby.cs
Offline
И так я глянул скрипт, но многое не понял. Для начала если кто знает пусть разъяснит мне эти опкоды:
0A8C: write_memory 6601887 size 4 value -1869574000 virtual_protect 1
0A8C: write_memory 6601891 size 4 value -1869574000 virtual_protect 1
0A8C: write_memory 6601895 size 1 value 144 virtual_protect 1
0A8C: write_memory 6609737 size 4 value -1869574000 virtual_protect 1
0A8C: write_memory 6609741 size 4 value -1869574000 virtual_protect 1
0A8C: write_memory 6609745 size 1 value 144 virtual_protect 1
0A8C: write_memory 5383203 size 2 value 37008 virtual_protect 1
И плиз желательно по подробней, а то с памятью никогда не работал)
И ещё вот это:
03C0: 25@ = actor $PLAYER_ACTOR car
0A96: 13@ = actor $PLAYER_ACTOR struct. Так же не смог понять откуда много переменных взято. Такое ощущение что изниоткуда)
Ах да - вот ещё опкод:
04B8: get_weapon_data_from_actor $PLAYER_ACTOR weapon_group 26@ weapon 24@ ammo 6@ model 6@
С английским у меня плохо, так что не больно смог понять его суть) вроде бы чё то про оружие.
Так же вот это:
0A8C: write_memory 12006502 size 1 value 0 virtual_protect 0
0A8C: write_memory 12006498 size 1 value 0 virtual_protect 0
Offline
Да и чуть не забыл. Драйвбай с калаша и т.п. оружие предусмтрен в игре. НПС как то же стреляет
Offline
Да и чуть не забыл. Драйвбай с калаша и т.п. оружие предусмтрен в игре. НПС как то же стреляет
Сори, my fault
0A8C: write_memory 6601887 size 4 value -1869574000 virtual_protect 1
Опкод 0A8C записывает определенное значение в определенную ячейку памяти. Первый параметр - адрес ячейки, второй - число байт, передаваемых в ячейку, третий - само значение, которое нужно записать. Насчет виртуал протект я мало чего знаю, вроде бы это 1 это автоматическая очистка стека, а 0 - ручная.. Если что, поправьте.
И всё таки, Sanchez, не мог бы ты мне скинуть исходники своей дллки?
Offline
Offline