EventScripts PropsAdmin

Тема в разделе "Программирование / Скриптинг", создана пользователем alex2131, 1 ноя 2013.

  1. alex2131

    alex2131

    Сообщения:
    147
    Симпатии:
    16
    Добрый день. Я вот не могу понять команду получения SteamID'а игрока и внедрение его в сам скрипт, чтобы ТОЛЬКО человек с данным SteamID'ом мог открыть меню, сам плагин:
    PHP:
    block load
    {
        
    popup create propsadmin
        popup addline propsadmin 
    "---PropMenu для администраторов---"
        
    popup addline propsadmin "->1. Автомат с кокаколой"
        
    popup addline propsadmin "---PropMenu для администраторов---"
        
    popup menuselect propsadmin propsadmin/vending
        es_doblock propsadmin
    /cmd
    }
    block vending
    {
        if (
    server_var(_popup_choice) == 1) do
        {
       
    es_setinfo crate_maker 0
       es_getcmduserid crate_maker
       es_prop_dynamic_create server_var
    (crate_makerprops/cs_office/vending_machine.mdl
       es popup send propsadmin event_var
    (userid)
       
    es_tell server_var(_popup_userid#green "Успешно!"
        
    }
    }
    event player_say
    {
        if (
    event_var(text) == !propsend) do
        {
                
    es_getplayersteamid playersteamid event_var(es_steamid)
                
    es_setinfo playersteamid "STEAM_0:1:65833927;"
                
    es popup send propsadmin server_var(playersteamid)
        }
            else do
            {
            
    es_tell server_var(_popup_userid#green "Вы не админ!"
            
    }
    }
    block cmd
    {
        
    es_regclientcmd vending propsadmin/vending
    }
    block unload
    {
        
    es_unregclientcmd vending
    }
     
  2. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
  3. WeSTMan

    WeSTMan *Просто я - есть я*

    Сообщения:
    214
    Симпатии:
    39
    Извините, но eventscripts знаю больше.
     
  4. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    Оффтоп

    Вот исправленный код:
    Код:
    block load
    {
        // создали меню
        popup create propsadmin
        popup addline propsadmin "---PropMenu для администраторов---"
        popup addline propsadmin "->1. Автомат с кокаколой"
        popup addline propsadmin "---PropMenu для администраторов---"
        
        // указываем блок для обработки нажатий в меню
        popup menuselect propsadmin propsadmin/handle
        
        // зарегистрировали консольную команду 'vending'
        es_regclientcmd vending propsadmin/vending
    }
    
    block unload
    {
        // удалили команду 'vending'
        es_unregclientcmd vending
    }
    
    block vending
    {
        // обнулили переменные
        es_xset padmin_userid 0
        es_xset padmin_auth 0
        
        // получили userid вызвавшего команду
        es_getcmduserid padmin_userid
        // получили его стим
        es_getplayersteamid padmin_auth server_var(padmin_userid)
        
        // проверили его стим
        if (server_var(padmin_auth) = "STEAM_0:1:65833927") do
        {
            es popup send propsadmin server_var(padmin_userid)
        }
        else do
        {
            es_tell server_var(padmin_userid) #greenВы не администратор
        }
    }
    
    // блок для обработки нажатий в меню
    block handle
    {
        // если нажали '1' в меню
        if (server_var(_popup_choice) = 1) do
        {
            es_prop_dynamic_create server_var(_popup_userid) props/cs_office/vending_machine.mdl
            es popup send propsadmin server_var(_popup_userid)
            es_tell server_var(_popup_userid) #greenУспешно!
        }
    }
    
    event player_say
    {
        if (event_var(text) = "!propsend") do
        {
            es_xset padmin_auth 0
            es_getplayersteamid padmin_auth event_var(userid)
                
            if (server_var(padmin_auth) = "STEAM_0:1:65833927") do
            {
                es popup send propsadmin event_var(userid)
            }
            else do
            {
                es_tell event_var(userid) #greenВы не администратор
            }
        }
    }
    
    Кароч как-то так...
     
    alex2131 нравится это.
  5. WeSTMan

    WeSTMan *Просто я - есть я*

    Сообщения:
    214
    Симпатии:
    39
    Все ли работает?
    И последнее, как сделать так, чтобы на 2 удалял предмет, но только не через eventscripts, а через SM в меню eventscripts'a и чтобы можно было делать несколько администраторов в пропс админе
     
    Последнее редактирование: 2 ноя 2013
  6. wanted241

    wanted241 Real-Gamer.Ru

    Сообщения:
    783
    Симпатии:
    355
    Несколько:

    es_xset admins_list "STEAM_0:0:124124;STEAM_0:0:949291;...."

    Проверка:

    if (server_var(padmin_auth) in server_var(admins_list)) do
    {
    Open Menu.....
    }
     
  7. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    У такой проверки есть уязвимость:
    Допустим, у меня стим "STEAM_0:0:12412". И мой стим "in server_var(admins_list)", но между тем, у меня не должно быть доступа к админке. Лучше перед if делать так:
    Код:
    es_format padmin_auth "%1;" server_var(padmin_auth)
    Таким образом, код будет выглядеть так:
    Код:
    block load
    {
        // создали меню
        popup create propsadmin
        popup addline propsadmin "---PropMenu для администраторов---"
        popup addline propsadmin "->1. Автомат с кокаколой"
        popup addline propsadmin "---PropMenu для администраторов---"
        
        // указываем блок для обработки нажатий в меню
        popup menuselect propsadmin propsadmin/handle
        
        // зарегистрировали консольную команду 'vending'
        es_regclientcmd vending propsadmin/vending
        
        // прописываем стимы каждого админа, не забывая в конце добавить ';'
        es_xset admins_list "STEAM_0:0:124124;STEAM_0:0:949291;"
    }
    
    block unload
    {
        // удалили команду 'vending'
        es_unregclientcmd vending
    }
    
    block vending
    {
        // обнулили переменные
        es_xset padmin_userid 0
        es_xset padmin_auth 0
        
        // получили userid вызвавшего команду
        es_getcmduserid padmin_userid
        // получили его стим
        es_getplayersteamid padmin_auth server_var(padmin_userid)
        // добавили к стиму ';'
        es_format padmin_auth "%1;" server_var(padmin_auth)
        
        // проверили его стим
        if (server_var(padmin_auth) in server_var(admins_list)) do
        {
            es popup send propsadmin server_var(padmin_userid)
        }
        else do
        {
            es_tell server_var(padmin_userid) #greenВы не администратор
        }
    }
    
    // блок для обработки нажатий в меню
    block handle
    {
        // если нажали '1' в меню
        if (server_var(_popup_choice) = 1) do
        {
            es_prop_dynamic_create server_var(_popup_userid) props/cs_office/vending_machine.mdl
            es popup send propsadmin server_var(_popup_userid)
            es_tell server_var(_popup_userid) #greenУспешно!
        }
    }
    
    event player_say
    {
        if (event_var(text) = "!propsend") do
        {
            es_xset padmin_auth 0
            es_format padmin_auth "%1;" event_var(es_steamid)
                
            if (server_var(padmin_auth) in server_var(admins_list)) do
            {
                es popup send propsadmin event_var(userid)
            }
            else do
            {
                es_tell event_var(userid) #greenВы не администратор
            }
        }
    }

    А удалить предмет через ES используя чистый SM нельзя - в сурсмоде нет клиентской команды, позволяющей удалять предмет. Если только конечно не ставить какие-то дополнительные плагины, но об этом ничего не было сказано.
     
    alex2131 нравится это.
  8. alex2131

    alex2131

    Сообщения:
    147
    Симпатии:
    16
    хм.. А через EventScripts? Вот только вообще никак не понимаю этих групп и ключей. Добавите в скайп? в ЛС.
     
  9. Vit_ amin

    Vit_ amin BotManager001

    Сообщения:
    1.060
    Симпатии:
    345
    лучше всего использовать Authorthing basic для проверки Steam ID

    Добавлено через 21 минуту
    Зачем использвоать
    // зарегистрировали консольную команду 'vending'
    es_regclientcmd vending propsadmin/vending
    и событие player_say если ты уже зарегал client cmd ?
     
    Последнее редактирование: 2 ноя 2013
  10. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    Насколько я помню, ES, в отличии от SM, не регистрирует по консольной команде команду для чата, так что в этих целях две возможности открытия меню - через чат и через консоль.
     
  11. Vit_ amin

    Vit_ amin BotManager001

    Сообщения:
    1.060
    Симпатии:
    345
    event player_say по твоему для чего можно и так можно и этак ....

    Добавлено через 1 минуту
    Через индекс энтити eventscript_lastgive

    Добавлено через 4 минуты
    И чем по твоему SM лучше ES ? Если в функциональности Source Python Extension и проблема решена

    Добавлено через 7 минут
    Отвратительный код оптимизация нулевая и много условий нету ...
     
    Последнее редактирование: 2 ноя 2013
  12. hellgu

    hellgu

    Сообщения:
    119
    Симпатии:
    30
    Оффтоп
     
  13. Vit_ amin

    Vit_ amin BotManager001

    Сообщения:
    1.060
    Симпатии:
    345
    Хозяин - барин я ничего не говорю вот самый правильный и самый оптимизированный код
    Тебе надо только в папке eventscripts/examples/auth/basic_auth/basic_auth.py вписать свой SteamID
    После STEAM_ID_LAN
    Только папку в eventscripts создай prop_create иначе скрипт не запуститься
     

    Вложения:

    hellgu нравится это.