#2551 07-10-2010 15:35

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Один вопрос

0AA7: call_function 1@ num_params 2 pop 2 4 7 3@

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

Offline

#2552 07-10-2010 16:26

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Один вопрос

3@ - это не 3й параметр, а переменная для приема результата функции, тут все нормально.

Добавь проверки на загруженность dll и нахождение нужной процедуры.
И попробуй изменить в 0AA7 параметр pop на 0 и временно убрать запись в ини-файл (возможно вылет на этом опкоде).

Offline

#2553 07-10-2010 17:20

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Один вопрос

Спасибо, сейчас попробую

Offline

#2554 07-10-2010 17:34

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Один вопрос

Ошибка на стадии проверки на загруженность.

// 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

#2555 07-10-2010 17:35

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Один вопрос

@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

#2556 07-10-2010 17:44

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Один вопрос

@Sanchez
Хм, у меня с написанием длл пока что мало опыта... куда надо совать .def-файл? (работаю в VS2008)

Offline

#2557 07-10-2010 17:46

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Один вопрос

@Wire - просто добавь к проекту.

Файл определения модуля (.def) Visual C++

Last edited by Sanchez (07-10-2010 17:48)

Offline

#2558 07-10-2010 17:53

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Один вопрос

Всё так же не работает( Ничего не понимаю
Добавил .def, сделал все, как ты сказал, но все так же не загружает библиотеку.
Скрипт свой оставил без изменений, все таки тоже самое.

Offline

#2559 07-10-2010 17:55

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Один вопрос

Может, я неправильно добавил .def? Я не нашел, как его добавить через меню в студии, поэтому создал отдельно и присоединил к проекту.

Last edited by Wire (07-10-2010 17:55)

Offline

#2560 07-10-2010 17:59

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Один вопрос

@Wire - В свойствах проекта посмотри Соглашение о вызовах если __cdecl (/Gd), то pop 2, если __stdcall (/Gz), то pop 0.

Offline

#2561 07-10-2010 18:13

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Один вопрос

Там стоит __cdecl (/Gd), поставил pop 2, ничего не изменилось, скрипт всё так же не загружает библиотеку.

Offline

#2562 07-10-2010 18:35

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Один вопрос

Такс, разбил проверку на загруженность библиотеки и получение указателя на процедуру.
Библиотека загружается, а вот указатель не найден.

Offline

#2563 07-10-2010 19:14

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Один вопрос

Посмотри как выглядит экспортируемая функция, если как-то так: ?plus@@YAHHH@Z, то сделал что-то не то.
Прикрепил готовую dll и скрипт для примера.

Last edited by Sanchez (08-10-2010 05:17)

Offline

#2564 07-10-2010 19:18

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Один вопрос

...А где смотреть?
___
И можешь кинуть исходники?

Last edited by Wire (07-10-2010 20:02)

Offline

#2565 07-10-2010 20:12

LEX
Registered: 07-10-2010
Posts: 5

Re: Один вопрос

Всем привет. Никто не знает каким способом можно сидя в машине менять оружие? Если не влом то выложите код плиз)
Ах да - вот есть в сане режим драйвбая, если поместить игрока на пассажирском сидении в режим драйвбая в калашом, то калаш невидно( Можно ли как нить сделать так чтоб игра погружала модель оружия? Заранее СПС.

Offline

#2566 07-10-2010 20:17

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Один вопрос

Модели загружаются в память командой model.load(#модель), выгружаются - model.destroy(#модель)
Оружие можно поменять опкодом
01B9: set_actor $player_actor armed_weapon_to <номер оружия>

Offline

#2567 08-10-2010 11:01

LEX
Registered: 07-10-2010
Posts: 5

Re: Один вопрос

Не, вариант с загрузкой модели просто не пашет. Я пробовал сначала грузить, а потом проверять что модель загружена, но игра как упёртая не подгружала модель при драйвбае.
А тот опкод внатуре меняет оружие в авто? Если да, то он мне позарез то и нужен)

Offline

#2568 08-10-2010 11:12

LEX
Registered: 07-10-2010
Posts: 5

Re: Один вопрос

У меня просто суть такова, что если игрок сидит пассажиром, то на кнопки Q и E можно менять оружие, а так же при нажатии клавиши игрок помещается в драйвбай с выбранным оружием - оружие видно. Но я не смог понять как в авто поменять оружие, а так же как сделать чтобы игра принудительно подгружала модель любого оружия при драйвбае .

Offline

#2569 08-10-2010 12:06

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Один вопрос

Опкод 01B9 просто устанавливает текущее оружие. Модель, возможно, не видна, потому что дб с калашникова\м4 не предусмотрена игрой.

Offline

#2570 08-10-2010 12:44

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

LEX wrote:

Не, вариант с загрузкой модели просто не пашет. Я пробовал сначала грузить, а потом проверять что модель загружена, но игра как упёртая не подгружала модель при драйвбае.
А тот опкод внатуре меняет оружие в авто? Если да, то он мне позарез то и нужен)

Попробуй посмотреть скрипт driveby.cs

Offline

#2571 08-10-2010 13:19

LEX
Registered: 07-10-2010
Posts: 5

Re: Один вопрос

И так я глянул скрипт, но многое не понял. Для начала если кто знает пусть разъяснит мне эти опкоды:
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

#2572 08-10-2010 13:22

LEX
Registered: 07-10-2010
Posts: 5

Re: Один вопрос

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

Offline

#2573 08-10-2010 14:35

Wire
From: Днепр
Registered: 19-08-2009
Posts: 56

Re: Один вопрос

LEX wrote:

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

Сори, my fault grin

0A8C: write_memory 6601887 size 4 value -1869574000 virtual_protect 1

Опкод 0A8C записывает определенное значение в определенную ячейку памяти. Первый параметр - адрес ячейки, второй - число байт, передаваемых в ячейку, третий - само значение, которое нужно записать. Насчет виртуал протект я мало чего знаю, вроде бы это 1 это автоматическая очистка стека, а 0 - ручная.. Если что, поправьте.

И всё таки, Sanchez, не мог бы ты мне скинуть исходники своей дллки?

Offline

#2574 08-10-2010 14:43

Sanchez
Registered: 18-08-2006
Posts: 280

Re: Один вопрос

Offline

#2575 08-10-2010 15:25

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

Насчет виртуал протект я мало чего знаю

0 - для записи/чтения адресов типа data
1 - для записи/чтения адресов типа text

Offline

Board footer

Powered by FluxBB