Иконка ресурса

[Achievements] Core 1.6

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #61
Если бы это была доработка оригинального кода BountyHunt, то её бы выложили как обновление к нему, логично? Но поскольку его выложили как отдельный ресурс, значит код был капитально или вообще с нуля написан.
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
  • Автор ресурса
  • #62
Если автор указал версию выше Вашей, значит на то есть веские причины.
@giSh5297, @Kruzya, Просто не хочется поддерживать в34 в плагине. А так вполне может работать и на более низких версиях сурсмода, т.к. плагин "абстрактный".
@Марина, @Romjke1, работаю над поиском причины ошибки SQL.
@giSh5297, @Марина, прикладываю промежуточную версию с возможно исправленным определением языка клиента (не могу проверить один).
@Kruzya, да, этот плагин сильно отличается по алгоритму работы от bountyhunt. Хоть обработка событий и одна и та же, отличия в хранении прогресса для игроков - в bountyhunt одно задание за раз, а тут сразу все. Поэтому различные структуры бд и хранения данных на сервере.
 

Вложения

  • achievements1_6_1.zip
    33.5 КБ · Просмотры: 25

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #63
@Марина, @Romjke1, работаю над поиском причины ошибки SQL.
44 строка файла sql.sp заменить:
PHP:
CREATE TABLE IF NOT EXISTS `progress` (`userid` INTEGER, `achivement` VARCHAR(64), `count` INTEGER, PRIMARY KEY(`userid`, `achivement`));
на
PHP:
CREATE TABLE IF NOT EXISTS `progress` (`userid` INTEGER, `achivement` VARCHAR(64), `count` INTEGER, UNIQUE(`userid`, `achivement`));
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
  • Автор ресурса
  • #64
@White Wolf, причина куда глубже - пока грузятся данные из бд, игрок успевает получить +1 к прогрессу достижения. Происходит попытка сохранить данные для игрока с айди (внутренним для плагина) 0, а такая запись с этим достижением уже есть (была записана первым игроком, который не успел загрузиться). Чтобы правильно её исправить, нужно запоминать запросы, которые не прошли, или задерживать их до тех пор, пока айди не станет нормальным (будет взят из бд).
 

Steammer

Участник
Сообщения
443
Реакции
187
Можно ли сделать объединение достижений в подкатегории, то есть:
C-подобный:
"achievements"
{
    "Exterminator"
    {
        "Exterminator I"                                        // название достижения (берется из файла перевода в трех видах: название, описание, награда)
        {
            "event"                "player_death"                    // событие, при котором можно получить это достижение
            "executor"            "attacker"                        // кто должен выполнить это событие (userid или attacker)
          
            "condition"            ""                                // условие получения этого достижения
            "count"                "50"                            // сколько раз необходимо сделать
          
            "reward"            "sm_givecredits #{uid} 5"        // награда. алиасы:
                                                                // {cid} - индекс клиента,
                                                                // {uid} - юзерайди клиента,
                                                                // {name} - имя игрока
        }
        "Exterminator II"
        {
            "event"                "player_death"
            "executor"            "attacker"
          
            "condition"            ""
            "count"                "500"
          
            "reward"            "sm_givecredits #{uid} 50"
        }
        "Exterminator III"
        {
            "event"                "player_death"
            "executor"            "attacker"
          
            "condition"            ""
            "count"                "5000"
          
            "reward"            "sm_givecredits #{uid} 500"
        }
    }
    "Headhunter"
    {
        "Headhunter I"
        {
            "event"                "player_death"
            "executor"            "attacker"
          
            "condition"            "headshot"
            "count"                "50"
          
            "reward"            "sm_givecredits #{uid} 10"
        }
        "Headhunter II"
        {
            "event"                "player_death"
            "executor"            "attacker"
          
            "condition"            "headshot"
            "count"                "500"
          
            "reward"            "sm_givecredits #{uid} 100"
        }
        "Headhunter III"
        {
            "event"                "player_death"
            "executor"            "attacker"
          
            "condition"            "headshot"
            "count"                "5000"
          
            "reward"            "sm_givecredits #{uid} 1000"
        }
    }
}

Ибо неудобно листать меню, когда 10 однотипных достижений, подкатегории - самое то.
 

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #66
@Reiko1231 добавь пожалуйста ключ "silent" в конфигурацию, чтобы уведомление о получении достижение не писало об этом в общий чат. Или как-то регулировать тот факт, что ядро пишет в чат при получении достижения. Я это к тому что сделал себе модуль для выдачи достижения когда игрок с определенным steamid заходит на сервер. В результате сильно спамит в чате. С помощью форварда получения достижения можно перехватывать получение достижения и писать в чат игроку о получении достижения лично.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #70
@Drimer, написать плагин для этого.
 

ResWerO

Участник
Сообщения
96
Реакции
28
Хотелось бы узнать, плагин сильно нагружает сервер?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #72
@ResWerO, профилировщик в руки.
А по теме, сильно не должен.
 

Fox1qqq

Крякнем, плюнем и надежно склеим скотчем!
Сообщения
247
Реакции
145
@White Wolf, причина куда глубже - пока грузятся данные из бд, игрок успевает получить +1 к прогрессу достижения. Происходит попытка сохранить данные для игрока с айди (внутренним для плагина) 0, а такая запись с этим достижением уже есть (была записана первым игроком, который не успел загрузиться). Чтобы правильно её исправить, нужно запоминать запросы, которые не прошли, или задерживать их до тех пор, пока айди не станет нормальным (будет взят из бд).
Есть решение ошибки sql?
C-подобный:
[achievements/achievements.smx] SQLT_OnInsertProgress failure: "columns userid, achivement are not unique"
 
Последнее редактирование:

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
  • Автор ресурса
  • #75
Пока выкладываю сюда промежуточную версию. Изменения:
  • Исправлена ошибка
    SQLT_OnInsertProgress failure: "columns userid, achivement are not unique"
  • Добавлено два квара:
    • sm_achievements_min_players - сколько игроков должно быть онлайн, чтобы подсчитывались достижения.
    • sm_achievements_notification_type - тип сообщения игроку при получении достижения, 2 - всем пишется что игрок получил достижение, 1 - только самому игроку, получившему достижение, 0 - никому.
  • Добавлен ключ "silent", при получении достижения с этим ключом игроку не будет выведено сообщение об его получении.
  • Добавлена возможность создавать кумулятивные достижения, т.е. достижения по типу "нанести 5000 урона с гранаты", "нанести 100 урона в голову".
  • Добавлены примеры достижений.
 

Вложения

  • achievements1_6_2b.zip
    37.3 КБ · Просмотры: 40

Fox1qqq

Крякнем, плюнем и надежно склеим скотчем!
Сообщения
247
Реакции
145
Пока выкладываю сюда промежуточную версию. Изменения:

  • Исправлена ошибка
    Добавлено два квара:

    • sm_achievements_min_players - сколько игроков должно быть онлайн, чтобы подсчитывались достижения.
      sm_achievements_notification_type - тип сообщения игроку при получении достижения, 2 - всем пишется что игрок получил достижение, 1 - только самому игроку, получившему достижение, 0 - никому.
    Добавлен ключ "silent", при получении достижения с этим ключом игроку не будет выведено сообщение об его получении.
    Добавлена возможность создавать кумулятивные достижения, т.е. достижения по типу "нанести 5000 урона с гранаты", "нанести 100 урона в голову".
    Добавлены примеры достижений.
Кумулятивные - это типо "counter" "dmg_health" ?
И если ключ silent удалить то ничего страшного не будет?
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
  • Автор ресурса
  • #77

Fox1qqq

Крякнем, плюнем и надежно склеим скотчем!
Сообщения
247
Реакции
145
Пока выкладываю сюда промежуточную версию. Изменения:

  • Исправлена ошибка
    Добавлено два квара:

    • sm_achievements_min_players - сколько игроков должно быть онлайн, чтобы подсчитывались достижения.
      sm_achievements_notification_type - тип сообщения игроку при получении достижения, 2 - всем пишется что игрок получил достижение, 1 - только самому игроку, получившему достижение, 0 - никому.
    Добавлен ключ "silent", при получении достижения с этим ключом игроку не будет выведено сообщение об его получении.
    Добавлена возможность создавать кумулятивные достижения, т.е. достижения по типу "нанести 5000 урона с гранаты", "нанести 100 урона в голову".
    Добавлены примеры достижений.
Осталась на месте:

C-подобный:
[achievements/achievements.smx] SQLT_OnInsertProgress failure: "columns userid, achivement are not unique"
--- Добавлено позже ---
P.S: Ошибка возникает как только заходишь на сервер и не только(Иногда из-за достижения которое выполняешь но только 1 раз пишет потом нет). При этом на сервере просто стоит чистый Sourcemod и больше ничего, то есть конфликты не причём.
P.S.S: Есть версия что бывает такое из-за количества символов в названии достижения или пробелов в нём. Просто не на все достижения так реагирует. Только на некоторые. Сделал такой вывод потому что, я поставил версию выше 1.6.1 и там вылезало такое же только из 1 достижения с большим название из 3 слов с пробелами , как только я сделал меньше название так сразу ошибка исчезла. Да и вообще если брать плагин ничего не добавляя то есть только с вашими примерами то он тоже работает без ошибок. А вот поставил 1.6.2b то там вообще странно реагирует , то выскакивает то нет.

Прикладываю свои достижения, вдруг где напортачил.
 

Вложения

  • achievements.phrases.txt
    62.4 КБ · Просмотры: 19
  • achievements.txt
    40.3 КБ · Просмотры: 31
Последнее редактирование:

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
  • Автор ресурса
  • #79
Забыл написать return, поэтому ошибка осталась (но уже просто в виде сообщения, прогресс игрока сохранялся).
В этой версии return дописан.
 

Вложения

  • achievements1_6_2c.zip
    37.3 КБ · Просмотры: 34

Fox1qqq

Крякнем, плюнем и надежно склеим скотчем!
Сообщения
247
Реакции
145
Забыл написать return, поэтому ошибка осталась (но уже просто в виде сообщения, прогресс игрока сохранялся).
В этой версии return дописан.

Ставлю вашу новую "1.6.2c" версию не добавляя цвета в исход(То есть сразу из коробки) , добавив новые достижения в кол-ве 174 , и заливаю на тестовый сервер и ошибок нету. Как только добавляю цвета в исходники и компилю, то сразу сыпит этими ошибками:
Есть версия что в архиве выше не все обновлённые файлы .

C-подобный:
L 06/05/2017 - 21:38:34: [SM] Exception reported: Invalid Handle 0 (error 4)
L 06/05/2017 - 21:38:34: [SM] Blaming: achievements/achievements.smx
L 06/05/2017 - 21:38:34: [SM] Call stack trace:
L 06/05/2017 - 21:38:34: [SM]   [0] GetTrieValue
L 06/05/2017 - 21:38:34: [SM]   [1] Line 40, achievements/events.sp::ProcessEvents
L 06/05/2017 - 21:38:34: [SM]   [2] Line 4, achievements/events.sp::Event_ClientCallback
L 06/05/2017 - 21:38:34: [achievements/achievements.smx] SQLT_OnInsertProgress failure: "columns userid, achivement are not unique"
L 06/05/2017 - 21:38:34: [achievements/achievements.smx] SQLT_OnInsertProgress failure: "columns userid, achivement are not unique"
L 06/05/2017 - 21:38:34: [achievements/achievements.smx] SQLT_OnInsertProgress failure: "columns userid, achivement are not unique"
L 06/05/2017 - 21:38:34: [achievements/achievements.smx] SQLT_OnInsertProgress failure: "columns userid, achivement are not unique"
L 06/05/2017 - 21:38:34: [achievements/achievements.smx] SQLT_OnInsertProgress failure: "columns userid, achivement are not unique"
L 06/05/2017 - 21:38:34: [achievements/achievements.smx] SQLT_OnInsertProgress failure: "columns userid, achivement are not unique"
 
Последнее редактирование:
Сверху Снизу