1. Александр Пользователь

    Регистрация:
    09.04.15
    Сообщения:
    54
    Симпатии:
    12
    Пол:
    Мужской
    Здравствуйте! Хочу добавить в AES от sf, чтобы опыт начислялся и за заражения человека..
    Например человек сделал n заражений, таким образом получает +1 опыт. Кто может подобное реализовать в всеми любимым AES ?) Думаю на многих зомби серверах его используют и такая функция очень не хватает..
    Буду очень благодарен за помощь!
     

    Вложения:

  2. windranger1337 Пользователь

    Регистрация:
    04.10.15
    Сообщения:
    303
    Симпатии:
    177
    Telegram:
    serfreeman1337
    Ты опубликовал эту тему в разделе скриптинг, значит у тебя есть знания в скриптинге, значит тебе нужно подсказать.
    Подсказываю: подключаешь инклюд от зп, там есть форвард zp_fw_core_infect_post. Подключаешь инклюд от аес, там есть aes_add_player_exp.
    Функцию aes_add_player_exp нужно вызвать для attacker в форваде zp_fw_core_infect_post.

    Кто сделает за него, тот член.
     
    Roman, Александр, Phantom и 2 другим нравится это.
  3. Александр Пользователь

    Регистрация:
    09.04.15
    Сообщения:
    54
    Симпатии:
    12
    Пол:
    Мужской
    За меня делать не нужно)
    Вообщем сделал так, как ты написал..
    Код:
    #include <amxmodx>
    #include <aes_main>
    #include <zombieplague>
    
    public zp_user_infected_post(id, infector){
    aes_add_player_exp(infector, 1)
    }
    Все отлично начисляется(1 опыт). Но я хочу начислять опыт, если игрок заразил 5 человек, ибо тут начисляет 1 опыт за каждое заражение. Подскажи, пожалуйста, как дальше там)
     
  4. windranger1337 Пользователь

    Регистрация:
    04.10.15
    Сообщения:
    303
    Симпатии:
    177
    Telegram:
    serfreeman1337
    5 подряд за раунд?
    1. Тебе нужна ГЛОБАЛЬНАЯ переменная для хранения кол-ва зараженных:
      Код:
      new woolka[33]
    2. Плюсуем эту переменную в zp_user_infected_post:
      Код:
      woolka[infector]++
    3. И сбрасываем в zp_round_started:
      Код:
      arrayset(woolka,0,sizeof woolka)
    4. В том же zp_user_infected_post её можно и проверить:
      Код:
      if(woolka[infector] >= 5) azazaza
    ИЗИ
     
    Александр нравится это.
  5. Александр Пользователь

    Регистрация:
    09.04.15
    Сообщения:
    54
    Симпатии:
    12
    Пол:
    Мужской
    Я где то ошибку допустил, или ты последнюю проверку чуть не правильно дал ? Получается, что опыт начисляется за каждое заражение после 5-го заражения.. Т.е. сначала я сделал 5 заражений и я получил 1 опыт, а дальше уже пошло за каждое заражение начисляться 1 опыт..
    Код:
    #include <amxmodx>
    #include <aes_main>
    #include <zombieplague>
    
    new woolka[33]
    
    public zp_round_started()
    {
    arrayset(woolka,0,sizeof woolka)
    }
    public zp_user_infected_post(id, infector)
    {
        if(is_user_alive(infector) && zp_get_user_zombie(infector) && woolka[infector] >= 5)
        {
            aes_add_player_exp(infector, 1)
        }
      
        woolka[infector]++
    }
     
  6. windranger1337 Пользователь

    Регистрация:
    04.10.15
    Сообщения:
    303
    Симпатии:
    177
    Telegram:
    serfreeman1337
    Лул
    Я не помню какое условие "каждое 5ое".
    Попробуй:
    Код:
    (woolka[infector] % 5)
    И прибавлять надо до проверки ))
     
  7. Александр Пользователь

    Регистрация:
    09.04.15
    Сообщения:
    54
    Симпатии:
    12
    Пол:
    Мужской
    неа, не сработало . Если ставить woolka[infector] % 5, то дается постоянно за каждое заражение +1 опыт.. Т.е. уже даже не ждет до 5-ти заражений..
    Код:
    public zp_user_infected_post(id, infector)
    {
        woolka[infector]++
    
        if(is_user_alive(infector) && zp_get_user_zombie(infector) && woolka[infector] % 5)
        {
                aes_add_player_exp(infector, 1)
        }
    }
    Почитал условия , так и не нашел "каждые" :(
     
    Последнее редактирование: 13.04.16
  8. windranger1337 Пользователь

    Регистрация:
    04.10.15
    Сообщения:
    303
    Симпатии:
    177
    Telegram:
    serfreeman1337
    Настало время отлаживать код!
    Код:
    client_print(0,print_console,"%d %% 5 = %.2f",woolka[infector],(woolka[infector] % 5))
    Посмотри чему будет равно при 5, 10, 15 ну ты понял )
    (выводится в консоль, если что)
     
  9. Александр Пользователь

    Регистрация:
    09.04.15
    Сообщения:
    54
    Симпатии:
    12
    Пол:
    Мужской
    Короче понаблюдал.. Та проверка, что ты дал(
    woolka[infector] % 5), означает пропускать выдачу опыта на 5-м заражении.. Т.е. я сделал 4 заражения, опыт давался, а на 5-м нет. И так по кругу)
    Вот. В консоли сервера 5 % 5 = 0.00
    А в игре опыта 4
    дальше 10 % 5 = 0.00, а в игре опыта 8.
    15 % 5 = 0.00 а в игре опыта 12..
    --- добавлено 13.04.16 ---
    я понял это по коду))
     
  10. windranger1337 Пользователь

    Регистрация:
    04.10.15
    Сообщения:
    303
    Симпатии:
    177
    Telegram:
    serfreeman1337
    Значит делаем так:
    Код:
    && ((woolka[infector] % 5) == 0.0)
    :D
     
    Александр нравится это.
  11. Александр Пользователь

    Регистрация:
    09.04.15
    Сообщения:
    54
    Симпатии:
    12
    Пол:
    Мужской
    Все отлично)
    Спасибо за помощь:drinks:
     
  12. Александр Пользователь

    Регистрация:
    09.04.15
    Сообщения:
    54
    Симпатии:
    12
    Пол:
    Мужской
    windranger1337, решил добавить, чтобы также бонусы начислялись за заражение(нужно сделать 50 заражений чтобы получить 1 бонус). Только сделал уже, чтобы обнуление было не каждый раунд, а только если человек покинул сервер.. Как лучше всего обнулять массив ? При подключении игрока или при отключении ?
    Вот вообщем, что у меня получилось.
    Код:
    #include <amxmodx>
    #include <aes_main>
    #include <zombieplague>
    #include <colorchat>
    
    new woolka[33]
    new woolka2[33]
    
    public client_connect(id)
    {
        arrayset(woolka2,0,sizeof woolka2)
    }
    
    public zp_round_started()
    {
        arrayset(woolka,0,sizeof woolka)
    }
    
    public zp_user_infected_post(id, infector)
    {
            woolka[infector]++
    
            if(is_user_alive(infector) && zp_get_user_zombie(infector) && ((woolka[infector] % 5) == 0.0))
            {
                aes_add_player_exp(infector, 1)
            }
    
        woolka2[infector]++
    
        if(is_user_alive(infector) && zp_get_user_zombie(infector) && ((woolka2[infector] % 50) == 0.0))
        {   
            aes_add_player_bonus(infector, 1)
            {
                ColorChat(infector, NORMAL, "^4[AES] ^1Вы заработали^4 1 ^1бонус(ы)")
            }
        }
    }
     
  13. windranger1337 Пользователь

    Регистрация:
    04.10.15
    Сообщения:
    303
    Симпатии:
    177
    Telegram:
    serfreeman1337
    arrayset устанавливает 0 для всех. Тебе нужно так:
    Код:
    public client_disconnect(id)
    {
       woolka2[id] = 0
    }
     
    Александр нравится это.
  14. Oper Пользователь

    Регистрация:
    10.06.15
    Сообщения:
    201
    Симпатии:
    28
    Пол:
    Мужской
    Skype:
    valera26032603
    Это называется здравствуй школа, досвиданья детский сад.
    Если ему помогут тот ..., бред сидой кабылы.
     
  15. Александр Пользователь

    Регистрация:
    09.04.15
    Сообщения:
    54
    Симпатии:
    12
    Пол:
    Мужской
    windranger1337, привет.
    Появился еще один вопрос связанный с AES. У меня стоит выдача бонусов в виде денег, брони, жизни при спавне за звание. Захотел, чтобы постоянно игроку выводилось сообщение в чат, что он получил бонус за звание. Например "Бонус за звание. Вы получили n денег, n брони, n жизней". Подскажи, как это сделать) Дай направление, а дальше я сам) Куда вообще нужно добавлять наш вывод. В главный aes_bonus_system или в плагин откуда и загружаются наши бонусы.