
08.07.2018, 15:19
|
|
Участник форума
Регистрация: 17.12.2017
Сообщений: 110
С нами:
4423953
Репутация:
68
|
|
как сымитировать нажатие клавишы на клавиатуре?
|
|
|

08.07.2018, 15:53
|
|
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами:
6908018
Репутация:
213
|
|
|
|
|

09.07.2018, 08:41
|
|
Участник форума
Регистрация: 17.12.2017
Сообщений: 110
С нами:
4423953
Репутация:
68
|
|
в чем ошибка? крашит игру
C++:
Код:
std
::
string businnes_name
[
45
]
[
]
=
{
"Alhambra"
,
"PigPen"
,
"Misty Club"
,
"Casino Bellagio"
,
"Grove Street Bar"
,
"Sobrino de Botin"
,
"Vinewood Burger"
,
"Marina Burger"
,
"Idlewood Pizza"
,
"Downtown Cluc"
,
"Marina Cluc"
,
"Idelwood 24/7"
,
"Flint 24/7"
,
"Easter 24/7"
,
"Mullholand 24/7"
,
"Jizzy"
,
"Redsands West 24/7"
,
"Julius 24/7"
,
"Lil\"Probe\"inn"
,
"Idelwood Gas"
,
"Mullholang Gas"
,
"Whetstone 24/7"
,
"East Cluc"
,
"WillowField Cluc"
,
"Flats Cluc"
,
"Financial Pizza"
,
"Come-A-Lot Gas"
,
"FortCarson Gas"
,
"BoneCountry Gas"
,
"Julius Gas"
,
"PricklePine Gas"
,
"Flint Gas"
,
"Easter Gas"
,
"Doherty Gas"
,
"Juniper 24/7"
,
"Juniper Gas"
,
"Emerald Isle 24/7"
,
"Emerald Isle Gas"
,
"Redsands-West Gas"
,
"ElGuebrabos Gas"
,
"TierraRobada Gas"
,
"AngelPine Gas"
,
"WhetStone Gas"
,
"Dilimore Gas"
,
"Montgomery Gas"
,
}
;
void
CALLBACK
biz_check
(
std
::
string param
)
{
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
COLOR_GREY
,
"%s"
,
businnes_name
[
i
]
)
;
}
}
|
|
|

09.07.2018, 09:16
|
|
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами:
6921957
Репутация:
183
|
|
businnes_name.c_str() юзай.
|
|
|

09.07.2018, 10:23
|
|
Участник форума
Регистрация: 17.12.2017
Сообщений: 110
С нами:
4423953
Репутация:
68
|
|
в конце последнего биза в списке выдает один раз такие иероглифы
C++:
Код:
void
CALLBACK
biz_check
(
std
::
string param
)
{
char
str
[
45
]
[
30
]
=
{
"Alhambra"
,
"PigPen"
,
"Misty Club"
,
"Casino Bellagio"
,
"Grove Street Bar"
,
"Sobrino de Botin"
,
"Vinewood Burger"
,
"Marina Burger"
,
"Idlewood Pizza"
,
"Downtown Cluc"
,
"Marina Cluc"
,
"Idelwood 24/7"
,
"Flint 24/7"
,
"Easter 24/7"
,
"Mullholand 24/7"
,
"Jizzy"
,
"Redsands West 24/7"
,
"Julius 24/7"
,
"Lil\"Probe\"inn"
,
"Idelwood Gas"
,
"Mullholang Gas"
,
"Whetstone 24/7"
,
"East Cluc"
,
"WillowField Cluc"
,
"Flats Cluc"
,
"Financial Pizza"
,
"Come-A-Lot Gas"
,
"FortCarson Gas"
,
"BoneCountry Gas"
,
"Julius Gas"
,
"PricklePine Gas"
,
"Flint Gas"
,
"Easter Gas"
,
"Doherty Gas"
,
"Juniper 24/7"
,
"Juniper Gas"
,
"Emerald Isle 24/7"
,
"Emerald Isle Gas"
,
"Redsands-West Gas"
,
"ElGuebrabos Gas"
,
"TierraRobada Gas"
,
"AngelPine Gas"
,
"WhetStone Gas"
,
"Dilimore Gas"
,
"Montgomery Gas"
}
;
for
(
int
i
=
0
;
i
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
COLOR_GREY
,
"%s"
,
str
[
i
]
)
;
}
}
|
|
|

09.07.2018, 10:41
|
|
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами:
6921957
Репутация:
183
|
|
Ты проверяешь 46 елементов. Юзай вектора, они удобнее. Инклуды только подключи.
C++:
Код:
vector
Strings
=
{
"Alhambra"
,
"PigPen"
,
"Misty Club"
,
"Casino Bellagio"
,
"Grove Street Bar"
,
"Sobrino de Botin"
,
"Vinewood Burger"
,
"Marina Burger"
,
"Idlewood Pizza"
,
"Downtown Cluc"
,
"Marina Cluc"
,
"Idelwood 24/7"
,
"Flint 24/7"
,
"Easter 24/7"
,
"Mullholand 24/7"
,
"Jizzy"
,
"Redsands West 24/7"
,
"Julius 24/7"
,
"Lil\"Probe\"inn"
,
"Idelwood Gas"
,
"Mullholang Gas"
,
"Whetstone 24/7"
,
"East Cluc"
,
"WillowField Cluc"
,
"Flats Cluc"
,
"Financial Pizza"
,
"Come-A-Lot Gas"
,
"FortCarson Gas"
,
"BoneCountry Gas"
,
"Julius Gas"
,
"PricklePine Gas"
,
"Flint Gas"
,
"Easter Gas"
,
"Doherty Gas"
,
"Juniper 24/7"
,
"Juniper Gas"
,
"Emerald Isle 24/7"
,
"Emerald Isle Gas"
,
"Redsands-West Gas"
,
"ElGuebrabos Gas"
,
"TierraRobada Gas"
,
"AngelPine Gas"
,
"WhetStone Gas"
,
"Dilimore Gas"
,
"Montgomery Gas"
}
;
for
(
auto
it
:
Strings
)
{
chat
->
AddChatMessage
(
-
1
,
it
.
c_str
(
)
)
;
}
|
|
|

09.07.2018, 11:20
|
|
Постоянный
Регистрация: 15.12.2013
Сообщений: 412
С нами:
6530249
Репутация:
133
|
|
Сообщение от Dark_Knight
Юзай вектора, они удобнее.
Ему же явно нужен неизменяемый C массив строк, он не использовал new, а значит все возможности аллокатора попросту не нужны. Более того, при каждом вызове функции будет вызываться конструктор на кучу элементов и забирать много рантайма
P.S а вообще это все должно быть в GXT игры
Код:
Код:
#if __cplusplus > 201402L
#include
#else
#include
namespace std {
template
constexpr std::size_t size(const Type (&input_array)[Num]) noexcept {
return Num;
}
}
#endif
void CALLBACK biz_check(std::string param) {
static const char str[][50] {
"Alhambra",
"PigPen",
"Misty Club",
"Casino Bellagio",
"Grove Street Bar",
"Sobrino de Botin",
"Vinewood Burger",
"Marina Burger",
"Idlewood Pizza",
"Downtown Cluc",
"Marina Cluc",
"Idelwood 24/7",
"Flint 24/7",
"Easter 24/7",
"Mullholand 24/7",
"Jizzy",
"Redsands West 24/7",
"Julius 24/7",
"Lil\"Probe\"inn",
"Idelwood Gas",
"Mullholang Gas",
"Whetstone 24/7",
"East Cluc",
"WillowField Cluc",
"Flats Cluc",
"Financial Pizza",
"Come-A-Lot Gas",
"FortCarson Gas",
"BoneCountry Gas",
"Julius Gas",
"PricklePine Gas",
"Flint Gas",
"Easter Gas",
"Doherty Gas",
"Juniper 24/7",
"Juniper Gas",
"Emerald Isle 24/7",
"Emerald Isle Gas",
"Redsands-West Gas",
"ElGuebrabos Gas",
"TierraRobada Gas",
"AngelPine Gas",
"WhetStone Gas",
"Dilimore Gas",
"Montgomery Gas"
};
for (auto i = 0; i getSAMP()->getChat()->AddChatMessage(COLOR_GREY, "-> %s", str[i]);
}
|
|
|

09.07.2018, 12:56
|
|
Познающий
Регистрация: 13.11.2014
Сообщений: 41
С нами:
6050727
Репутация:
58
|
|
Повторюсь с вопросом,так как уже заебался...
Происходит конфликт двух плагинов,а то есть перезапись хука HandleRPCPacketFunc,как исправить данную хурму?
Сообщение от Спойлер
Код:
Код:
#define SAMP_HOOKENTER_HANDLE_RPC 0x3743D
#define SAMP_HOOKENTER_HANDLE_RPC2 0x373C9
#define SAMP_HOOKEXIT_HANDLE_RPC 0x37443
#define SAMP_HOOKEXIT_HANDLE_RPC2 0x37451
void HandleRPCPacketFunc(unsigned char id, RPCParameters *rpcParams, void(*callback) (RPCParameters *))
{
if (rpcParams != nullptr && rpcParams->numberOfBitsOfData >= 8)
{
BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
switch (id)
{
case RPC_DeathMessage:
{
pSAMP->addMessageToChat(-1, "plugin ONE");
int16_t plaerid, killerid;
int8_t resaon;
bsData.ResetReadPointer();
bsData.Read(killerid);
bsData.Read(plaerid);
bsData.Read(resaon);
break;
}
}
}
callback(rpcParams);
}
void _declspec (naked) hook_handle_rpc_packet(void)
{
static RPCParameters *pRPCParams = nullptr;
static RPCNode *pRPCNode = nullptr;
static DWORD dwTmp = 0;
__asm pushad;
__asm mov pRPCParams, eax;
__asm mov pRPCNode, edi;
HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC;
__asm popad;
__asm add esp, 4
__asm jmp dwTmp;
}
void _declspec (naked) hook_handle_rpc_packet2(void)
{
static RPCParameters *pRPCParams = nullptr;
static RPCNode *pRPCNode = nullptr;
static DWORD dwTmp = 0;
__asm pushad;
__asm mov pRPCParams, ecx;
__asm mov pRPCNode, edi;
HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC2;
__asm popad;
__asm jmp dwTmp;
}
void InstallAllHooks()
{
static int iSAMPHooksInstalled;
if (!iSAMPHooksInstalled)
{
if (pSAMP->getInfo() == NULL)
return;
/*
https://github.com/sr-tream/UniLib/blob/master/UniLib/CHooks.hpp
*/
HookRPC1 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC, hook_handle_rpc_packet, 6); //
HookRPC2 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC2, hook_handle_rpc_packet2, 8);
iSAMPHooksInstalled = 1;
}
}
|
|
|

09.07.2018, 13:21
|
|
Постоянный
Регистрация: 26.05.2013
Сообщений: 692
С нами:
6822856
Репутация:
213
|
|
Сообщение от #CJ
Повторюсь с вопросом,так как уже заебался...
Происходит конфликт двух плагинов,а то есть перезапись хука HandleRPCPacketFunc,как исправить данную хурму?
Сообщение от Спойлер
Код:
Код:
#define SAMP_HOOKENTER_HANDLE_RPC 0x3743D
#define SAMP_HOOKENTER_HANDLE_RPC2 0x373C9
#define SAMP_HOOKEXIT_HANDLE_RPC 0x37443
#define SAMP_HOOKEXIT_HANDLE_RPC2 0x37451
void HandleRPCPacketFunc(unsigned char id, RPCParameters *rpcParams, void(*callback) (RPCParameters *))
{
if (rpcParams != nullptr && rpcParams->numberOfBitsOfData >= 8)
{
BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
switch (id)
{
case RPC_DeathMessage:
{
pSAMP->addMessageToChat(-1, "plugin ONE");
int16_t plaerid, killerid;
int8_t resaon;
bsData.ResetReadPointer();
bsData.Read(killerid);
bsData.Read(plaerid);
bsData.Read(resaon);
break;
}
}
}
callback(rpcParams);
}
void _declspec (naked) hook_handle_rpc_packet(void)
{
static RPCParameters *pRPCParams = nullptr;
static RPCNode *pRPCNode = nullptr;
static DWORD dwTmp = 0;
__asm pushad;
__asm mov pRPCParams, eax;
__asm mov pRPCNode, edi;
HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC;
__asm popad;
__asm add esp, 4
__asm jmp dwTmp;
}
void _declspec (naked) hook_handle_rpc_packet2(void)
{
static RPCParameters *pRPCParams = nullptr;
static RPCNode *pRPCNode = nullptr;
static DWORD dwTmp = 0;
__asm pushad;
__asm mov pRPCParams, ecx;
__asm mov pRPCNode, edi;
HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC2;
__asm popad;
__asm jmp dwTmp;
}
void InstallAllHooks()
{
static int iSAMPHooksInstalled;
if (!iSAMPHooksInstalled)
{
if (pSAMP->getInfo() == NULL)
return;
/*
https://github.com/sr-tream/UniLib/blob/master/UniLib/CHooks.hpp
*/
HookRPC1 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC, hook_handle_rpc_packet, 6); //
HookRPC2 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC2, hook_handle_rpc_packet2, 8);
iSAMPHooksInstalled = 1;
}
}
Парсишь адрес функции которую вызывает хук и вызываешь в своём хуке (работает только если твой плагин грузится после первого), или ставишь хук в другом месте
|
|
|

09.07.2018, 13:38
|
|
Новичок
Регистрация: 13.11.2014
Сообщений: 7
С нами:
6050727
Репутация:
58
|
|
Сообщение от NarutoUA
Парсишь адрес функции которую вызывает хук и вызываешь в своём хуке (работает только если твой плагин грузится после первого), или ставишь хук в другом месте
Можешь помочь мне? Сообщение выше
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|