Баг с патронами

rxki

Пользователь
Регистрация
5 Янв 2019
Сообщения
170
Симпатии
3
Пол
Мужской
#1
Наткнулся на закономерный баг в турели. Точнее, в патронах. Суть: после перемещения пустой турели (без патронов) - она продолжает стрелять (кол патронов при стрельбе идет в минусовое значение). Сначала пытался создать условие, которое не давало бы двигать турель при количестве патронов в ней <1. Но у меня оно не компилится. Думаю, есть какая то строка, которая рефрешит данные турели после ее обновы. Но что то не могу понять, как она прописывается. Вот паблики перемещения турели:

PHP:
public ShowMenuMoveTurret(id, iTurretIndex)
{
    new iMenu;

    if(g_TurretsMaxLevelData[  entity_get_int( g_PlayerTurretEnt[id][iTurretIndex], EV_INT_turret_type)][1] == 1)
        iMenu = menu_create("Куда переместить эту турель?^n\rРАДИУС НЕЛЬЗЯ ПРОКАЧАТЬ\w", "ShowMenuMoveTurretH")
    else
        iMenu = menu_create("Перемещение выбранной турели", "ShowMenuMoveTurretH")
   
    new szData[4];
    num_to_str(iTurretIndex, szData, 3)
   
    menu_additem(iMenu, "Переместить сюда", szData)
    menu_additem(iMenu, "Назад")
    menu_setprop(iMenu, MPROP_EXITNAME, "Назад");
   
    menu_display(id, iMenu);
}

public ShowMenuMoveTurretH(id, menu, item)
{
    new acces, szTurretIndex[4], szType[33], cb
    menu_item_getinfo(menu, 0, acces, szTurretIndex, 3, szType, 32, cb)
   
    new iTurretIndex = str_to_num(szTurretIndex)
    new iEnt = g_PlayerMovingTurretEntity[id] ;

    entity_get_string(iEnt, EV_SZ_turret_name, szType, 32);
   
    static Float:fActivateTime;
    if(!fActivateTime)
        fActivateTime = g_ConfigValuesFloat[CFG_FLOAT_MOVE_INSTALL_TIME];
   
    if(cs_get_user_money(id) < g_ConfigValues[CFG_TURRET_MOVE_COST] )
    {
        client_print(id, print_center, "У тебя нет %d$", g_ConfigValues[CFG_TURRET_MOVE_COST] );
        goto removeEffect;
    }
   
    if(item == MENU_EXIT || !is_user_alive(id) || item == 1)
    {  
        client_print_color(id, print_team_default, "%s^x01 Ты передумал перемещать турель, она станет активна через ^x04%0.1f сек^x01", CHAT_PREFIX, fActivateTime);
       
        removeEffect:
       
        // When player moving turret and he decide to not move, set old origin */
        g_PlayerMovingTurretEntity[id] = 0;
   
        entity_set_string(iEnt,     EV_SZ_classname, "turret");
        entity_set_int(iEnt,     EV_INT_solid, SOLID_TRIGGER)
       
        fm_set_rendering(iEnt, kRenderFxNone, 0, 0, 0, kRenderNormal, 0);
       
        new Float:fOldOrigin[3]
        entity_get_vector(iEnt, EV_VEC_turret_old_origin, fOldOrigin);
       
        entity_set_origin(iEnt, fOldOrigin);
        entity_set_vector(iEnt, EV_VEC_turret_old_origin, Float:{0.0, 0.0, 0.0});
       
        emit_sound(iEnt, CHAN_AUTO, g_SoundFile[SOUND_TURRET_PLANT], 1.0, 0.7, 0, PITCH_NORM);
       
        RemoveMoveEntity(iEnt);
       
        set_task(fActivateTime, "PlayerMoveTurretTaskInfo", iEnt + TASK_MOVE_TURRET, szType, 32);
       
        SetTurretModelByLevel(iEnt, entity_get_int(iEnt, EV_INT_turret_level));
        DestroyTurretRanger(iEnt);
        return PLUGIN_CONTINUE
    }
   
    new Float:fOrigin[3], entlist[3];
    entity_get_vector(iEnt, EV_VEC_origin, fOrigin)

    if(find_sphere_class(iEnt, "turret", 60.0, entlist, 2)
    || find_sphere_class(iEnt, "turret_reloading", 60.0, entlist, 2)
    || find_sphere_class(iEnt, "turret_upgrading", 60.0, entlist, 2))
    {
        client_print(id, print_center,"Ты не можешь поставить турель на другую турель");
        ShowMenuMoveTurret(id, iTurretIndex)
        return PLUGIN_CONTINUE
    }
    else if(find_sphere_class(iEnt, "func_illusionary", 10.0, entlist, 2) || !fm_is_ent_visible(id, iEnt)) {
        client_print(id, print_center, "Здесь нельзя установить турель")
        ShowMenuMoveTurret(id, iTurretIndex)
        return PLUGIN_CONTINUE
    }
    else if(find_sphere_class(iEnt, "slot_reservation", 60.0, entlist, 2)  &&iEnt!= entity_get_int(entlist[0], EV_INT_place_owner))
    {
        //entlist[0] - index of turret enity place owner
        new szName[33], szTurretName[33];
        get_user_name(entity_get_edict(entity_get_int(entlist[0], EV_INT_place_owner), EV_ENT_turret_owner), szName, 32);
        entity_get_string(entity_get_int(entlist[0], EV_INT_place_owner), EV_SZ_turret_name, szTurretName ,32);
       
        client_print(id, print_center, "Это место занято турелью %s (он двигает ее)", szTurretName, szName)
        ShowMenuMoveTurret(id, iTurretIndex)
        return PLUGIN_CONTINUE
    }
   
    g_PlayerMovingTurretEntity[id] = 0;
    cs_set_user_money(id, cs_get_user_money(id) - g_ConfigValues[CFG_TURRET_MOVE_COST] )
   
    entity_set_string(iEnt,     EV_SZ_classname, "turret");
    entity_set_int(iEnt,         EV_INT_solid, SOLID_TRIGGER)
    fm_set_rendering(iEnt,         kRenderFxNone, 0, 0, 0, kRenderNormal, 0);
    SetTurretModelByLevel(iEnt,     entity_get_int(iEnt, EV_INT_turret_level));
    RemoveMoveEntity(iEnt);
    entity_set_vector(iEnt,     EV_VEC_turret_old_origin, Float:{0.0, 0.0, 0.0});
   
    emit_sound(iEnt, CHAN_AUTO, g_SoundFile[SOUND_TURRET_PLANT], 1.0, 0.7, 0, PITCH_NORM);
   
    client_print_color(id, print_team_default, "%s^x01 Ты переместил турель ^x04%s^x01, она будет активна через ^x04%0.1f сек^x01", CHAT_PREFIX, szType, fActivateTime);
    set_task(fActivateTime, "PlayerMoveTurretTaskInfo", iEnt + TASK_MOVE_TURRET, szType, 32);
   
    DestroyTurretRanger(iEnt);
    return PLUGIN_CONTINUE;
}
Подскажите, как правильно сделать проверку на патроны после перемещения турели...
Ниже креплю оригинальный полный плагин
 

Вложения