Salik_Davince
14.07.2019, 17:54
Здравствуйте, приступлю к делу, наверное многие знают что существует баг SA:MP'a с функцией RemoveObject (удалением объектов), в моем сервере при реконнекте игрока кикало, я поискал в офф.форуме решение, все таки нашел но в текстовом формате, решение было таковым: Подключается игрок - телепортируется в определенный участок где имеется стандартный объект (при первом заходе этот объект и удаляется), после всего проверяет игрока на анимацию плавания (2й коннект - объекта нету - плавает), думаю вы догнали суть фикса.
Вот так я провожу данные проверки в OnPlayerConnect, вызываю таймер с 2300мс, после вызывается функция но узнать позицию/анимацию никак не получается, либо что то еще имеется?
Устанавливаем позицию при коннекте
set_pos(playerid, 258.18, 2938.75, 1.77, .angle = 0.0, .interior = 0, .world = 0);
toggle_controlable(playerid, true);//Размораживаю из за того что в самой функции set_pos имеется фриз предзагрузки объектов
Устанавливаем таймер
SetTimerEx("CheckPlayerRemovedObjects", 2300, false, "d", playerid);
Вызываем функцию по истечении времени
function CheckPlayerRemovedObjects(playerid)
{
if(IsPlayerConnected(playerid))
{
new
animLib[32],
animName[32];
new
Float: tempX,
Float: tempY,
Float: tempZ;
GetPlayerPos(playerid, tempX, tempY, tempZ);
printf("#Тест позиции %f %f %f", tempX, tempY, tempZ);
GetAnimationName(GetPlayerAnimationIndex(playerid), animLib, sizeof(animLib), animName, sizeof(animName));
printf("CheckPlayerRemovedObject = AnimLib = %s | AnimName = %s", animLib, animName);
if(strcmp(animLib, "SWIM", false)) {
//none;
print("CheckPlayerRemovedObjects | Плавает");
}
else {
print("CheckPlayerRemovedObjects | Не Плавает");
RemovePlayerObjects(playerid);
}
TogglePlayerSpectating(playerid, true);//Нужен для дальнейшего показа
new query_string[80 + MAX_PLAYER_NAME];
format(query_string, sizeof query_string, "SELECT `u_id` FROM `users` WHERE `u_name` = '%s' LIMIT 1", Player[playerid][name]);
mysql_tquery(sql_connection, query_string, "CheckPlayerRegistered", "i", playerid);
}
return true;
}
https://ibb.co/71gsKTS - Сам объект (удаленный).
Выводит в логах: Position: 0.000 0.000 0.000 | Анимация: пусто
Вот так я провожу данные проверки в OnPlayerConnect, вызываю таймер с 2300мс, после вызывается функция но узнать позицию/анимацию никак не получается, либо что то еще имеется?
Устанавливаем позицию при коннекте
set_pos(playerid, 258.18, 2938.75, 1.77, .angle = 0.0, .interior = 0, .world = 0);
toggle_controlable(playerid, true);//Размораживаю из за того что в самой функции set_pos имеется фриз предзагрузки объектов
Устанавливаем таймер
SetTimerEx("CheckPlayerRemovedObjects", 2300, false, "d", playerid);
Вызываем функцию по истечении времени
function CheckPlayerRemovedObjects(playerid)
{
if(IsPlayerConnected(playerid))
{
new
animLib[32],
animName[32];
new
Float: tempX,
Float: tempY,
Float: tempZ;
GetPlayerPos(playerid, tempX, tempY, tempZ);
printf("#Тест позиции %f %f %f", tempX, tempY, tempZ);
GetAnimationName(GetPlayerAnimationIndex(playerid), animLib, sizeof(animLib), animName, sizeof(animName));
printf("CheckPlayerRemovedObject = AnimLib = %s | AnimName = %s", animLib, animName);
if(strcmp(animLib, "SWIM", false)) {
//none;
print("CheckPlayerRemovedObjects | Плавает");
}
else {
print("CheckPlayerRemovedObjects | Не Плавает");
RemovePlayerObjects(playerid);
}
TogglePlayerSpectating(playerid, true);//Нужен для дальнейшего показа
new query_string[80 + MAX_PLAYER_NAME];
format(query_string, sizeof query_string, "SELECT `u_id` FROM `users` WHERE `u_name` = '%s' LIMIT 1", Player[playerid][name]);
mysql_tquery(sql_connection, query_string, "CheckPlayerRegistered", "i", playerid);
}
return true;
}
https://ibb.co/71gsKTS - Сам объект (удаленный).
Выводит в логах: Position: 0.000 0.000 0.000 | Анимация: пусто