• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Как работать с пабликом OnPlayerLeaveDynamicArea?

Привет, работаю с системами магнитофона и хочу сделать так чтобы если игрок отошел слишком далеко от него, то магнитофон убрался автоматически, но почему то не сработало, поставил код с /drecorder в паблик OnPlayerLeaveDynamicArea но он не срабатывает почему то.

Вот код как устанавливается и убирается магнитофон

C++:
CMD:recorder(playerid, params[])
{
    if(!GetPVarInt(playerid, "boomBox"))
        return SendClientMessage(playerid, -1, "У Вас нет магнитофона, купите его в 24/7");
        
    if(GetPVarInt(playerid, "PlacedBB"))
        return SendClientMessage(playerid, -1, "Вы уже установили магнитофон.");
        
    new Float:BBCoord[4];
    
    GetPlayerPos(playerid,
         BBCoord[0],
         BBCoord[1],
         BBCoord[2]
     );
    
    GetPlayerFacingAngle(playerid, BBCoord[3]);
    
    SetPVarFloat(playerid, "BBX", BBCoord[0]);
    SetPVarFloat(playerid, "BBY", BBCoord[1]);
    SetPVarFloat(playerid, "BBZ", BBCoord[2]);
    
    BBCoord[0] += (2 * floatsin(-BBCoord[3], degrees));
    BBCoord[1] += (2 * floatcos(-BBCoord[3], degrees));
    BBCoord[2] -= 1.0;
    
    foreach(new i: Player){
        if(!GetPVarType(i, "PlacedBB") || !IsPlayerInRangeOfPoint(playerid, 30.0, GetPVarFloat(i, "BBX"), GetPVarFloat(i, "BBY"), GetPVarFloat(i, "BBZ"))) continue;
        return SendClientMessage(playerid, C_BLUE, "Магнитофон установлен на землю");
    }
    
    format(stringer1, sizeof(stringer1), "%s установил магнитофон", PlayerInfo[playerid][pNames]);
    ProxDetector(playerid, 30.0, COLOR_PURPLE, stringer1);
    
    SendClientMessage(playerid, C_BLUE, "/setrecorder - управление магнитофоном");
    SendClientMessage(playerid, C_BLUE, "/drecorder - убрать магнитофон");
    
    SetPVarInt(playerid, "PlacedBB", CreateDynamicObject(2102, BBCoord[0], BBCoord[1], BBCoord[2], 0.0, 0.0, 0.0, .worldid = GetPlayerVirtualWorld(playerid), .interiorid = GetPlayerInterior(playerid)));
    format(stringer, 128, "{ffd800}Магнитофон\n{ffffff}Установил: {41a5dd}%s[%i]", PlayerInfo[playerid][pNames], playerid);
    
    SetPVarInt(playerid, "BBLabel", _:CreateDynamic3DTextLabel(stringer, -1, BBCoord[0], BBCoord[1], BBCoord[2]+0.6, 8, .worldid = GetPlayerVirtualWorld(playerid), .interiorid = GetPlayerInterior(playerid)));
    SetPVarInt(playerid, "BBArea", CreateDynamicSphere(BBCoord[0], BBCoord[1], BBCoord[2], 15.0, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid)));
    SetPVarInt(playerid, "BBInt", GetPlayerInterior(playerid));
    SetPVarInt(playerid, "BBVW", GetPlayerVirtualWorld(playerid));
    
    FIXES_ApplyAnimation(playerid,"BOMBER","BOM_Plant",4.0,0,0,0,0,0);
    
    return 1;
}
CMD:drecorder(playerid, params[])
{
    if(!GetPVarInt(playerid, "PlacedBB"))
        return SendClientMessage(playerid, -1, "Вы не ставили магнитофон");
        
    foreach(new i: Player){
        if(IsPlayerInDynamicArea(i, GetPVarInt(playerid, "BBArea"))) StopStream(i);
    }
    
    DeletePVar(playerid, "BBArea");
    DeletePVar(playerid, "PlacedBB");
    DeletePVar(playerid, "BBLabel");
    DeletePVar(playerid, "BBX");
    DeletePVar(playerid, "BBY");
    DeletePVar(playerid, "BBZ");
    DeletePVar(playerid, "BBInt");
    DeletePVar(playerid, "BBVW");
    DeletePVar(playerid, "BBStation");
    
    DestroyDynamicObject(GetPVarInt(playerid, "PlacedBB"));
    DestroyDynamic3DTextLabel(Text3D:GetPVarInt(playerid, "BBLabel"));
    
    SendClientMessage(playerid, -1, "Вы убрали магнитофон");
    return 1;
}

Вот как я хотел убрать его в паблике OnPlayerLeaveDynamicArea

C++:
public OnPlayerLeaveDynamicArea(playerid, areaid)
{
    if(areaid >= HouseInfo[0][hSquare] && areaid <= HouseInfo[290][hSquare]) SetPVarInt(playerid, "ExitHouse",0);
    else if(areaid >= PaynSpray[0] && areaid <= PaynSpray[MAX_PAYNSPRAY-1]) SetPVarInt(playerid,"playerUsePaynSpray",0);
    else if(areaid == spike_areas[playerid]) {}
    else {
        foreach(new i: Player)
        {
            if(areaid == GetPVarInt(i, "BBArea"))
            {
                StopStream(playerid);
                //SendClientMessage(playerid, C_BLUE, "Вы покинули зону магнитофона");
                break;
            }
        }
    }
    if(areaid == GetPVarInt(playerid, "PlacedBB"))
    {
        foreach(new i: Player)
        {
            if(IsPlayerInDynamicArea(i, GetPVarInt(playerid, "BBArea"))) StopStream(i);
        }
        DeletePVar(playerid, "BBArea");
        DestroyDynamicObject(GetPVarInt(playerid, "PlacedBB"));
        DestroyDynamic3DTextLabel(Text3D:GetPVarInt(playerid, "BBLabel"));
        DeletePVar(playerid, "PlacedBB"); DeletePVar(playerid, "BBLabel");
        DeletePVar(playerid, "BBX"); DeletePVar(playerid, "BBY"); DeletePVar(playerid, "BBZ");
        DeletePVar(playerid, "BBInt");
        DeletePVar(playerid, "BBVW");
        DeletePVar(playerid, "BBStation");
        SendClientMessage(playerid, -1, "Вы отошли слишком далеко от установленного Вами магнитафона, он был отключен");
    }
    return true;
}
 
Сверху Снизу