Autoswitch

Тема в разделе "Программирование / Скриптинг", создана пользователем Hejter, 30 июл 2015.

  1. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Есть код, нужно его оптимизировать и пофиксить ошибку с автосменой или предложить другой вариант автосмены.
    Суть бага: Если игрок кидает флешку, то бывает что берется нож (авто.) и флешку больше выкинуть нельзя, решается, путем смены на нож и ждать 2-3 сек, потом обратно на флешку.


    PHP:
    new bool:gB_OnGround[MAXPLAYERS+1];

    public 
    OnPluginStart(){
        
    HookEvent("weapon_fire"Weapon_Fire);
    }

    public 
    Action:Weapon_Fire(Handle:event, const String:name[], bool:dB)
    {
        
        new 
    userid GetEventInt(event"userid");
        new 
    client GetClientOfUserId(userid);
        
        if(!
    IsValidClient(clienttrue))
        {
            return 
    Plugin_Continue;
        }
        
        new 
    String:weapon[64];
        
    GetEventString(event"weapon"weapon64);
        
        if(
    StrEqual(weapon"flashbang"))
        {
                
    gB_OnGround[client] = bool:(GetEntityFlags(client) & FL_ONGROUND);

                new 
    serial GetClientSerial(client);
                    
    //int client = g_capt1;
                    
                
    CreateTimer(0.1AutoSwitchTimerserial);
        }
        
        return 
    Plugin_Continue;
    }

    public 
    Action:AutoSwitchTimer(Handle:Timerany:serial)
    {
        new 
    client GetClientFromSerial(serial);
        
        if(!
    IsValidClient(clienttrue))
        {
            return 
    Plugin_Handled;
        }
        
        
    FakeClientCommand(client"use weapon_knife");
        
    FakeClientCommand(client"use weapon_flashbang");
        
        return 
    Plugin_Handled;
    }

    public 
    OnClientDisconnect(client)
    {
        
    reset(client);
    }

    public 
    OnClientPutInServer(client)
    {
        if(!
    IsValidClient(client))
        {
            return;
        }
        
        
    reset(client);
    }

    stock reset(client)
    {
        
    gB_OnGround[client] = true;
    }

    // Stocks
    stock bool:IsValidClient(clientbool:alive false)
    {
        return (
    client >= && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client) && (alive == false || IsPlayerAlive(client)));
    }

    Добавлено через 7 часов 6 минут
    бамп
     
    Последнее редактирование: 30 июл 2015
  2. SourceGod

    SourceGod

    Сообщения:
    47
    Симпатии:
    0
    Через повторяющий попробуй таймер!
     
  3. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Это как?
     
  4. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    У меня в trikz моде, все закономерно, при выкидывание флешки -> дается новая. (автофлеш). Решил свою проблему, значение таймера чуть увеличил и больше не заедает.
    Тут-же удалять флешку нельзя так, ибо тогда флешка не будет, подкидывать..а просто будет удаляться.
     
  5. SourceGod

    SourceGod

    Сообщения:
    47
    Симпатии:
    0
    Hejter,
    PHP:
    CreateTimer(2.0Timer_Func_TIMER_REPEAT);