purebasic.info

PureBasic forum
Текущее время: Вт дек 11, 2018 5:43 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
СообщениеДобавлено: Пн дек 21, 2015 12:28 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
Думаю многие играли в сталкера или хотя бы слышали о нем. В игре есть ограничение на переносимый вес из-за чего приходится оставлять много полезных вещей...
Для обхода этого ограничения написал небольшую DLL.
Код:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
EnableExplicit
Global hLib=0, ThreadID, WinAPI_DirectInput8Create=0
 
Procedure.s Get_SpecialFolderLocation(Valeur.l)
  Protected SpecialFolderLocation.s, Dossier_ID
 
  If SHGetSpecialFolderLocation_(0, Valeur, @Dossier_ID) = 0
    SpecialFolderLocation.s = Space(#MAX_PATH)
    SHGetPathFromIDList_(Dossier_ID, @SpecialFolderLocation)
    If SpecialFolderLocation
      If Right(SpecialFolderLocation, 1) <> "\"
        SpecialFolderLocation + "\"
      EndIf
    EndIf
  EndIf
  ProcedureReturn SpecialFolderLocation.s
EndProcedure
 
Procedure.b TestMemory(*Pointer, Size)
  Protected mbi.MEMORY_BASIC_INFORMATION
  Protected Result.b = #False, dwWrote
 
  If *Pointer And Size
    dwWrote = VirtualQuery_(*Pointer, @mbi, SizeOf(MEMORY_BASIC_INFORMATION))
    If dwWrote
      If mbi\BaseAddress+mbi\RegionSize >= *Pointer+Size
        If mbi\Protect & (#PAGE_READONLY | #PAGE_READWRITE | #PAGE_EXECUTE_READ | #PAGE_EXECUTE_READWRITE)
          Result = #True
        EndIf
      EndIf
    EndIf
  EndIf
 
  ProcedureReturn Result
EndProcedure
 
Procedure.i GetPointer(*Base)
  Protected *Point=0
   
  *Base+$5602E8
 
  *Point=*Base
  If TestMemory(*Point, 4)
    *Point=PeekI(*Point)+$3B8
    If TestMemory(*Point, 4)
      *Point=PeekI(*Point)
      If TestMemory(*Point, 4)
        *Point=PeekI(*Point)+$88
        If TestMemory(*Point, 4)
          *Point=PeekI(*Point)+$6C
          If TestMemory(*Point, 4)=0
            *Point=0
          EndIf
        Else
          *Point=0
        EndIf
      Else
        *Point=0
      EndIf
    Else
      *Point=0
    EndIf
  Else
    *Point=0
  EndIf
 
  ProcedureReturn *Point
EndProcedure
 
Procedure Thread(*x)
  Protected CountBreak, Var.f, Count, *BaseCoreDLL=0
  Protected *Massa=0, *Base
 
  Repeat
    *Base = GetModuleHandle_("xrGame.dll")
    Delay(100)
  Until *Base
   
  Repeat
   
    *Massa=GetPointer(*Base) ; Вес
    If TestMemory(*Massa, 4)
      PokeF(*Massa, 10)
    EndIf
       
    Delay(500)
  ForEver
EndProcedure
 
Prototype pDirectInput8Create(hinst, dwVersion.l, riidltf, *ppvOut, *punkOuter)
 
ProcedureDLL AttachProcess(Instance)
 
  ThreadID=CreateThread(@Thread(), 0)
  hLib=OpenLibrary(0, Get_SpecialFolderLocation(37)+"Dinput8.dll")
  If hLib
    WinAPI_DirectInput8Create.pDirectInput8Create = GetFunction(0, "DirectInput8Create")
  EndIf
EndProcedure
 
ProcedureDLL DetachProcess(Instance)
  If ThreadID
    KillThread(ThreadID)
    ThreadID=0
  EndIf
  hLib=0
  WinAPI_DirectInput8Create=0
  CloseLibrary(0)
EndProcedure
 
ProcedureDLL DirectInput8Create(hinst, dwVersion.l, riidltf, *ppvOut, *punkOuter)
  Protected Result=0
 
  If WinAPI_DirectInput8Create
    ProcedureReturn WinAPI_DirectInput8Create(hinst, dwVersion, riidltf, *ppvOut, *punkOuter)
  EndIf
 
  ProcedureReturn Result
EndProcedure
 

Нужно скомпилировать этот код и сохранить под именем dinput8.dll и поместить в папку bin игры.


Вложения:
сталкер тень чернобыля.zip [5.97 KiB]
Скачиваний: 182

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн дек 21, 2015 12:45 am 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Пётр, по моему ты немного запоздал :D
На за пример спасибо, пригодится.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн мар 21, 2016 9:48 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
Значит Тень Чернобыля прошел. Под конец игры было несколько тонн всего и около 700 тысяч рублей... :D
Теперь пришла очередь чистого неба. :)
DLL для S.T.A.L.K.E.R. Clear Sky снимающая ограничение на переносимый вес.
Код:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
; Для S.T.A.L.K.E.R. Clear Sky (Сталкер чистое небо). Версия игры 1.5.10
 
EnableExplicit
Global hLib=0, ThreadID, WinAPI_DirectInput8Create=0
 
Procedure.s Get_SpecialFolderLocation(Valeur.l)
  Protected SpecialFolderLocation.s, Dossier_ID
 
  If SHGetSpecialFolderLocation_(0, Valeur, @Dossier_ID) = 0
    SpecialFolderLocation.s = Space(#MAX_PATH)
    SHGetPathFromIDList_(Dossier_ID, @SpecialFolderLocation)
    If SpecialFolderLocation
      If Right(SpecialFolderLocation, 1) <> "\"
        SpecialFolderLocation + "\"
      EndIf
    EndIf
  EndIf
  ProcedureReturn SpecialFolderLocation.s
EndProcedure
 
Procedure.b TestMemory(*Pointer, Size)
  Protected mbi.MEMORY_BASIC_INFORMATION
  Protected Result.b = #False, dwWrote
 
  If *Pointer And Size
    dwWrote = VirtualQuery_(*Pointer, @mbi, SizeOf(MEMORY_BASIC_INFORMATION))
    If dwWrote
      If mbi\BaseAddress+mbi\RegionSize >= *Pointer+Size
        If mbi\Protect & (#PAGE_READONLY | #PAGE_READWRITE | #PAGE_EXECUTE_READ | #PAGE_EXECUTE_READWRITE)
          Result = #True
        EndIf
      EndIf
    EndIf
  EndIf
 
  ProcedureReturn Result
EndProcedure
 
 
Procedure.i GetPointer(*Point)
 
  If TestMemory(*Point, 4)
    *Point=PeekI(*Point)+$2D4
    If TestMemory(*Point, 4)
      *Point=PeekI(*Point)+$58
      If TestMemory(*Point, 4)=0
        *Point=0
      EndIf
    Else
      *Point=0
    EndIf
  Else
    *Point=0
  EndIf
 
  ProcedureReturn *Point
EndProcedure
 
Procedure Thread(*x)
  Protected CountBreak, Var.f, Count, *BaseCoreDLL=0
  Protected *Massa=0, *Base
 
  Repeat
    *Base = GetModuleHandle_("xrGame.dll")
    Delay(100)
  Until *Base
 
  *Base+$00606334
 
  Repeat
   
   
    If GetAsyncKeyState_(#VK_F10) = -32767
      MessageBeep_(#MB_ICONINFORMATION)
      CountBreak+1
      If CountBreak>4
        ExitProcess_(0)
        ProcedureReturn
      EndIf
    ElseIf CountBreak<>0
      CountBreak=0
    EndIf
   
   
    ; Вес
   
    *Massa=GetPointer(*Base)
    If TestMemory(*Massa, 4)
      PokeF(*Massa, 10)
    EndIf
 
   
    Delay(500)
  ForEver
EndProcedure
 
Prototype pDirectInput8Create(hinst, dwVersion.l, riidltf, *ppvOut, *punkOuter)
 
ProcedureDLL AttachProcess(Instance)
 
  ThreadID=CreateThread(@Thread(), 0)
  hLib=OpenLibrary(0, Get_SpecialFolderLocation(37)+"Dinput8.dll")
  If hLib
    WinAPI_DirectInput8Create.pDirectInput8Create = GetFunction(0, "DirectInput8Create")
  EndIf
EndProcedure
 
; Процедура вызывается системой при выгрузке DLL.
ProcedureDLL DetachProcess(Instance)
  If ThreadID
    KillThread(ThreadID)
    ThreadID=0
  EndIf
  hLib=0
  WinAPI_DirectInput8Create=0
  CloseLibrary(0)
EndProcedure
 
ProcedureDLL DirectInput8Create(hinst, dwVersion.l, riidltf, *ppvOut, *punkOuter)
  Protected Result=0
 
  If WinAPI_DirectInput8Create
    ProcedureReturn WinAPI_DirectInput8Create(hinst, dwVersion, riidltf, *ppvOut, *punkOuter)
  EndIf
 
  ProcedureReturn Result
EndProcedure
 

Нужно скомпилировать этот код и сохранить под именем dinput8.dll и поместить в папку bin игры.


Вложения:
S.T.A.L.K.E.R. Clear Sky.zip [6.85 KiB]
Скачиваний: 149

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт мар 22, 2016 6:46 am 
Не в сети
док

Зарегистрирован: Сб окт 31, 2009 7:44 am
Сообщений: 168
Благодарил (а): 92 раз.
Поблагодарили: 5 раз.
Пункты репутации: 0
рекомендую народную солянку! Вот эту:
http://vip-tor.org/torrent/229444/s.t.a.l.k.e.r-narodnaja-soljanka-dmx-oop.ma.k-2012-pc-repack-by-serega-lus
из плюсов перед оригиналом: куча оружия и брони, варка артов, море квестов и бескрайний мир..


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср мар 23, 2016 8:51 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
SGM MOD 2,2 на сталкера, классная штука. Там по моему только на зов Припяти. Я в тень Чернобыля и чистое небо не играл, так чуть чуть только, а вот в ЗП с этим модом раза три прошёл. Только там читерить не особо хочется, там за мной отряд альфа всю игру охотился, мне больше нравилось бегать и с ними сражаться, но это только в моде. Кстати там ещё есть такая штука, ESC - F1 и можно всё что угодно, режим бога, хочешь, вес изменяй, хочешь бегай, как арабский скакун, или безсмертие.

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн апр 25, 2016 2:34 pm 
Не в сети
профессор

Зарегистрирован: Сб авг 18, 2007 1:38 pm
Сообщений: 232
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Я сейчас прохожу STALKER Lost Alpha это даже не мод, а отдельная игра с большим количеством локаций большого размера. Топать приходится много, но встречается транспорт на котором можно ездить, правда бензин быстро кончается...


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн апр 25, 2016 6:39 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
SAM писал(а):
встречается транспорт на котором можно ездить
Он переворачивается...

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт апр 26, 2016 9:56 pm 
Не в сети
профессор

Зарегистрирован: Вт янв 13, 2009 2:41 pm
Сообщений: 370
Благодарил (а): 3 раз.
Поблагодарили: 17 раз.
Пункты репутации: 8
Так чтобы не переворачивался педаль в пол давить не надо и на поворотах по-плавнее и помедленней. Ну и сохраняться в начале карты не забывать.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт апр 26, 2016 11:16 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
Когда в темной долине с вертолета стреляют, не до плавной езды...

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб июн 24, 2017 2:12 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11336
Благодарил (а): 4 раз.
Поблагодарили: 443 раз.
Для S.T.A.L.K.E.R. Lost Alpha. Версия игры 1.3003.


Вложения:
Lost_Alpha_1.3003.zip [6.94 KiB]
Скачиваний: 62

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB