Revalto
Известный
- 532
- 225
Получить бы Хук)Хук цепляет только что пришедшие сообщения и не ловит клиентские(сообщения скриптов и т.д.).
Второй способ берет все, использовать надо так:
SF->getSAMP()->getChat()->chatEntry[номер строки].szText;
Получить бы Хук)Хук цепляет только что пришедшие сообщения и не ловит клиентские(сообщения скриптов и т.д.).
Второй способ берет все, использовать надо так:
SF->getSAMP()->getChat()->chatEntry[номер строки].szText;
Так и не решилнет .
Если не решишь , послезавтра студию поставлю , кину пример.
Код дай.
isKeyPressed проверяет ли нажата клавиша, а не эмулирует её нажатие. Для этого есть другие способы: передать синхру с нужным кодом клавиши (можешь тут поискать, были обсуждения на эту тему), или использовать keybd_event.
Нажатие на сервер можно отправлять через player sync. Поищи функцию нажатия в теме с функциямиКод:bool CALLBACK incomingRPC(stRakNetHookParams *params) { if (params->packetId == ScriptRPCEnumeration::RPC_ScrClientMessage) { uint32_t len, color; char msg[144]; params->bitStream->ResetReadPointer(); params->bitStream->Read(color); params->bitStream->Read(len); params->bitStream->Read(msg, len); msg[len] = '\0'; params->bitStream->ResetReadPointer(); if (toggle == true) { if (strstr(msg, "Депозит в банке: 13$")) //SF->getSAMP()->sendWastedNotification(0, SF->getSAMP()->getPlayers()->sLocalPlayerID); keybd_event('N', 0, 0, 0); keybd_event('N', 0, KEYEVENTF_KEYUP, 0); //SF->getSAMP()->getPlayers()->pLocalPlayer->Say("И тут появляется батя!"); } }; return true; }; void __stdcall cmd_toggle(string str) { toggle ^= true; if (toggle == true) SF->Log("{009ACD}[Скрипт]: Скрипт успешно запущен!"); else SF->Log("{009ACD}[Скрипт]: Скрипт успешно отключен!"); } void CALLBACK mainloop() { static bool init = false; if (!init) { if (!SF->getSAMP()->IsInitialized()) return; SF->getSAMP()->getChat()->AddChatMessage(0x009ACD, "[Скрипт]: Ловля домов by Nestro"); SF->Log("{009ACD}[Скрипт]: Ловля домов by Nestro"); SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC); SF->getSAMP()->registerChatCommand("arzbuy", cmd_toggle); SF->registerConsoleCommand("arzbuy", cmd_toggle); init = true; } } BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved) { if (dwReasonForCall == DLL_PROCESS_ATTACH) SF->initPlugin(mainloop, hModule); return TRUE; }
Это где?Нажатие на сервер можно отправлять через player sync. Поищи функцию нажатия в теме с функциями
Это где?
void EmulKey(int KeyId)
{
stOnFootData sync;
memset(&sync, 0, sizeof(stOnFootData));
sync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
sync.byteCurrentWeapon = KeyId;
BitStream bsActorSync;
bsActorSync.Write((BYTE)ID_PLAYER_SYNC);
bsActorSync.Write((PCHAR)&sync, sizeof(stOnFootData));
SF->getRakNet()->SendPacket(&bsActorSync);
memset(&bsActorSync, 0, sizeof(BitStream));
sync.byteCurrentWeapon = 0;
bsActorSync.Write((BYTE)ID_PLAYER_SYNC);
bsActorSync.Write((PCHAR)&sync, sizeof(stOnFootData));
SF->getRakNet()->SendPacket(&bsActorSync);
}
Благодарю, сейчас попробую подогнать под буковку N)C++:void EmulKey(int KeyId) { stOnFootData sync; memset(&sync, 0, sizeof(stOnFootData)); sync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData; sync.byteCurrentWeapon = KeyId; BitStream bsActorSync; bsActorSync.Write((BYTE)ID_PLAYER_SYNC); bsActorSync.Write((PCHAR)&sync, sizeof(stOnFootData)); SF->getRakNet()->SendPacket(&bsActorSync); memset(&bsActorSync, 0, sizeof(BitStream)); sync.byteCurrentWeapon = 0; bsActorSync.Write((BYTE)ID_PLAYER_SYNC); bsActorSync.Write((PCHAR)&sync, sizeof(stOnFootData)); SF->getRakNet()->SendPacket(&bsActorSync); }
Как узнать название файла плагина?
std::string PluginName = SF->getSAMP()->getPluginInfo()->getPluginName();
for(int i = 0; i < SAMP_MAX_3DTEXTS; i++)
{
if(SF->getSAMP()->getInfo()->pPools->pText3D->iIsListed[i] != 1)
continue;
/* делаешь то что тебе надо */
// SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[i].pText;
}
i - id 3d текста.Подскажите, как найти айди 3дтекста? Есть вот такой код, но что - то не получаетсяКод:for(int i = 0; i < SAMP_MAX_3DTEXTS; i++) { if(SF->getSAMP()->getInfo()->pPools->pText3D->iIsListed[i] != 1) continue; /* делаешь то что тебе надо */ // SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[i].pText; }
Не совсем про то, я пытался его найти. но не могу вывести его на экранi - id 3d текста.