ASI [Неактуален] SFSpawnFix | Фикс sampIsLocalPlayerSpawned()

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Автор темы
Всефорумный модератор
2,633
2,479
Версия SA-MP
  1. 0.3.7-R3
Плагин исправляет опкод 0B61 (sampIsLocalPlayerSpawned()).
Нужен только для SAMP 0.3.7-R3-1!
Установка: перекинуть в корневую папку с игрой.

C++:
rtdhook_call* hook;

void __fastcall CScriptThread__SetCondResult(void* ecx, uintptr_t localPlayer, bool a3)
{
    bool ret = *reinterpret_cast<void**>(localPlayer) != nullptr // m_pPed
        && *reinterpret_cast<BOOL*>(localPlayer + 0x141)  // m_bClearedToSpawn
        && *reinterpret_cast<BOOL*>(localPlayer + 0x17B); // m_bHasSpawnInfo
    reinterpret_cast<void(__thiscall*)(void*, bool)>(hook->getHookedFunctionAddress())(ecx, ret);
}

__declspec(naked) void __fastcall CScriptThread__SetCondResult_Naked()
{
    __asm {
        mov edx, eax
        jmp CScriptThread__SetCondResult
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
    {
        uintptr_t handle;
        if (handle = reinterpret_cast<uintptr_t>(GetModuleHandleA("SAMPFUNCS.asi")), handle != 0)
        {
            hook = new rtdhook_call(handle + 0x866F8, &CScriptThread__SetCondResult_Naked);
            hook->install();
        }
    }
    return TRUE;
}
 

Вложения

  • SFSpawnFix.asi
    9.5 KB · Просмотры: 1,809
Последнее редактирование:

AnWu

Guardian of Order
Всефорумный модератор
4,683
5,129
опиши в чем баг, я первый раз слышу
 
  • Bug
Реакции: Loocking
D

deleted-user-422095

Гость
опиши в чем баг, я первый раз слышу
@MISTER_GONWIK функция sampIsLocalPlayerSpawned() некорректно работает. Всегда возвращает false.
Сегодня очередной раз Аризона что-то придумала и в лаунчере изменила версию клиента сампа на R3 и тут настало время проверить SAMPFUNCS под R3.
 

Hatiko

Известный
Проверенный
1,469
610
Если будет установлен на R1, если вдруг впихивать плагин в комплект скриптов, для их работы на R3, но чел установит на стандартную сборку, где R1? Проигнорится или нельзя прям. Если нельзя, то сделай проверку на версию на всякий случай.
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Автор темы
Всефорумный модератор
2,633
2,479
Если будет установлен на R1, если вдруг впихивать плагин в комплект скриптов, для их работы на R3, но чел установит на стандартную сборку, где R1? Проигнорится или нельзя прям. Если нельзя, то сделай проверку на версию на всякий случай.
крашнет
 

Dark.

Известный
1,750
768
Норм штука, фиксит много чего на лаунчере. Можно через мастерскую связаться с разрабами, возможно это добавят в лаунчер.
 
  • Ха-ха
Реакции: madrasso

Lobber

Известный
178
57
Хорошо что один из старых нерабочих опкодов SF пофиксили, молодец. Может быть руки дойдут и до 0B25: samp 2@ = get_player_health? Это было бы шикарно, ибо на данный момент приходится костылями на R3 получать хп перса :(
 

Hatiko

Известный
Проверенный
1,469
610
Хорошо что один из старых нерабочих опкодов SF пофиксили, молодец. Может быть руки дойдут и до 0B25: samp 2@ = get_player_health? Это было бы шикарно, ибо на данный момент приходится костылями на R3 получать хп перса :(
Используй рациональный аналог опкод 0226: 1@ = actor 0@ health, который корректно работает.
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Автор темы
Всефорумный модератор
2,633
2,479
Используй рациональный аналог опкод 0226: 1@ = actor 0@ health, который корректно работает.
Потому что у тебя стоит плагин, который фиксит данный момент, без него самп устанавливает всем 1000хп
Хорошо что один из старых нерабочих опкодов SF пофиксили, молодец. Может быть руки дойдут и до 0B25: samp 2@ = get_player_health? Это было бы шикарно, ибо на данный момент приходится костылями на R3 получать хп перса :(
Не слышал об этой проблеме, гляну
 

Lobber

Известный
178
57
Используй рациональный аналог опкод 0226: 1@ = actor 0@ health, который корректно работает.
Единственный метод как заставить эту структуру работать на R3, это ActiveHitpoints [R1/R3], и он возвращает не идеально точное количество здоровья перса. Погрешность в +- 6 хп, если и использовать 0226: 1@ = actor 0@ health, что не допустимо в некоторых моих скриптах. Там нужна предельная точность, и такое может дать только 0B25: samp 2@ = get_player_health. Потому и написал об этом.