Триггеры API
Интеграция триггеров через SDK. Методы работы.
Список методов
Действия:
gp.triggers.claim()
- получить награду. +Lazy Sync Request
Свойства:
gp.triggers.list
- список триггеров. FREEgp.triggers.activatedList
- список активированных триггеров. FREEgp.triggers.getTrigger()
- получить информацию о триггере по ID или тегу. FREE
Проверки:
gp.triggers.isActivated()
- проверить активирован ли триггер. FREEgp.triggers.isClaimed()
- проверить начислена ли награда за триггер. FREE
События:
gp.triggers.on('activate')
- подписаться на момент активации триггера.gp.triggers.on('claim')
- подписаться на момент начисления награды триггера.gp.triggers.on('error:claim')
- подписаться на ошибку при начислении награды триггера.
Типы:
Trigger
- поля тригггера.
Правила работы с триггерами
Как происходит активация триггера:
- Игрок заходит в игру или сохраняется.
- На сервере проверяется выполнение условий.
- SDK получает ответ от сервера и уведомляет разработчика.
- Отправляется уведомление об активации триггера.
- Когда награда выдана:
- Отправляется уведомление о выдаче награды.
- Отправляется уведомление о получении награды.
- Отправляется уведомление о получении достижения.
- Отправляется уведомление о начислении покупки.
Как происходит выдача наград триггера:
- Если включена автоматическая выдача награды, то при выполнении условий игроку выдаются награды, покупки или достижения.
- Если стоит ручная выдача, то необходимо вызвать метод
gp.triggers.claim()
в любое время, чтобы получить все награды триггера. - При ручной выдаче наград происходит запрос на сохранение игрока, на сервере начисляются все награды и изменяются переменные игрока.
Так как консистентность данных и выдача бонусов обеспечиваются нами, нет необходимости участвовать в процессе на уровне кода.
Вам достаточно только подписаться на события выдачи наград и ждать срабатывания триггера.
Действия
Получить награду
+Lazy Sync RequestЧтобы получить награду за триггер, вам необходимо передать ID или тег триггера.
- JavaScript
- Unity
// По ID
gp.triggers.claim({ id: '646929f98abe970f54fb6274' });
// По Тегу
gp.triggers.claim({ tag: 'LEVEL_10' });
// По ID
GP_Triggers.Claim('646929f98abe970f54fb6274');
// По Тегу
GP_Triggers.Claim('LEVEL_10');
Метод возвращает триггер, статус активации, подтверждения награды:
- JavaScript
- Unity
const { trigger, isActivated, isClaimed } = await gp.triggers.claim({ tag: 'LEVEL_10' });
Не реализовано, для получения этих данных используйте GP_Trigger.GetTrigger()
Свойства
Список триггеров
FREEВам доступен весь список триггеров сразу при запуске игры. См. поля триггера.
- JavaScript
- Unity
gp.triggers.list.forEach((trigger) => {
// trigger.id
// trigger.tag
// trigger.isAutoClaim
// trigger.description
// trigger.conditions
// trigger.bonuses
});
//Получение списка триггеров
TriggerData[] triggers = GP_Triggers.List();
//Вывод данных по каждому триггеру
foreach(TriggerData trigger in triggers)
{
Debug.Log("ID: " + trigger.id);
Debug.Log("Tag: " + trigger.tag);
Debug.Log("AutoClaim: " + trigger.isAutoClaim);
Debug.Log("Descroption: " + trigger.description);
foreach (TriggerCondition condition in trigger.conditions)
{
Debug.Log("Condition: " + JsonUtility.ToJson(condition));
}
foreach (TriggerBonus bonus in trigger.bonuses)
{
Debug.Log("Bonus: " + JsonUtility.ToJson(bonus));
}
}
Список активированных триггеров
FREEВам доступен весь список активированных триггеров сразу при готовности игрока.
- JavaScript
- Unity
gp.triggers.activatedList.forEach((triggerId) => {
// Строковый ID триггера
// Получение триггера по ID
const { trigger, isActivated, isClaimed } = gp.triggers.getTrigger(triggerId);
});
//Получчение списка активированных триггеров
TriggerActive[] triggers = GP_Triggers.ActivatedList();
//Вывод данных по каждому активированному триггеру
foreach (TriggerActive trigger in triggers)
{
Debug.Log("ID: " + trigger.triggerId);
Debug.Log("Claimed: " + trigger.claimed);
}
Получение информации о триггере
FREEМетод возвращает триггер и статус активации:
- JavaScript
- Unity
// По ID
const { trigger, isActivated, isClaimed } = gp.triggers.getTrigger('646929f98abe970f54fb6274');
// По Тегу
const { trigger, isActivated, isClaimed } = gp.triggers.getTrigger('LEVEl_10');
// Триггера может не существовать, убедитесь, что он есть
if (trigger) {
console.info(trigger.id, isActivated, isClaimed);
}
// По ID
TriggerAllData data = GP_Triggers.GetTrigger('646929f98abe970f54fb6274');
// По Тегу
TriggerAllData data = GP_Triggers.GetTrigger('LEVEl_10');
Debug.Log(data.trigger);
Debug.Log(data.isActivated);
Debug.Log(data.isClaimed);
Проверки
Триггер активирован
gp.triggers.isActivated(idOrTag)
FREE
- JavaScript
- Unity
// По ID
const isActivated = gp.triggers.isActivated('646929f98abe970f54fb6274');
// По Тегу
const isActivated = gp.triggers.isActivated('LEVEl_10');
// Проверка
if (isActivated) {
// триггер LEVEl_10 активирован
}
// По ID
bool isActivated = GP_Triggers.IsActivated('646929f98abe970f54fb6274');
// По Тегу
bool isActivated = GP_Triggers.IsActivated('LEVEl_10');
// Проверка
if (isActivated) {
// триггер LEVEl_10 активирован
}
Награда начислена
gp.triggers.isClaimed(idOrTag)
FREE
- JavaScript
- Unity
// По ID
const isClaimed = gp.triggers.isClaimed('646929f98abe970f54fb6274');
// По Тегу
const isClaimed = gp.triggers.isClaimed('LEVEl_10');
// Проверка
if (isClaimed) {
// Награда за триггер LEVEl_10 начислена
}
// По ID
bool isClaimed = GP_Triggers.IsClaimed('646929f98abe970f54fb6274');
// По Тегу
bool isClaimed = GP_Triggers.IsClaimed('LEVEl_10');
// Проверка
if (isClaimed) {
// Награда за триггер LEVEl_10 начислена
}
События
Триггер активирован
Коллбек возвращает триггер:
- JavaScript
- Unity
gp.triggers.on('activate', ({ trigger }) => {
// доступна информация о триггере
});
//Подписаться на событие
private void OnEnable()
{
GP_Triggers.OnTriggerActivate += OnActivate;
}
//Отписаться от события
private void OnDisable()
{
GP_Triggers.OnTriggerActivate -= OnActivate;
}
//Обработать событие
public void OnActivate(TriggerData trigger)
{
Debug.Log(trigger.ToString());
}
Награда начислена
Коллбек возвращает триггер:
- JavaScript
- Unity
gp.triggers.on('claim', ({ trigger }) => {
// доступна информация о триггере
});
//Подписаться на событие
private void OnEnable()
{
GP_Triggers.OnTriggerClaim += OnClaim;
}
//Отписаться от события
private void OnDisable()
{
GP_Triggers.OnTriggerClaim -= OnClaim;
}
//Обработать событие
public void OnClaim(TriggerData trigger)
{
Debug.Log(trigger.ToString());
}
Ошибка начисления награды
Коллбек возвращает ошибку. См. коды ошибок:
- JavaScript
- Unity
gp.triggers.on('error:claim', (err) => {
// проверьте код ошибки
});
//Подписаться на событие
private void OnEnable()
{
GP_Triggers.OnTriggerClaimError += OnClaimError;
}
//Отписаться от события
private void OnDisable()
{
GP_Triggers.OnTriggerClaimError -= OnClaimError;
}
//Обработать событие
public void OnClaimError(string error)
{
Debug.LogError(error);
}
Типы
Поля триггера
Поле | Тип | Описание | Пример |
---|---|---|---|
id | string | ID триггера | 646929f98abe970f54fb6274 |
tag | string | Тег для помощи при выборе. Вы можете использовать его вместо ID | LEVEL_10 |
description | string | Описание триггера | Достигните 10 уровня |
isAutoClaim | boolean | Награда принимается автоматически при активации триггера | true |
conditions | Condition[][] | Список условий триггера | [] |
bonuses | Bonus[] | Список бонусов | [] |
Поля условия
Поле | Тип | Описание | Пример |
---|---|---|---|
type | ConditionType | Тип условия | PLAYER_FIELD |
key | string | Ключ переменной для сравнения | level |
operator | ConditionOperator | Тип оператора сравнения | EQ |
value | number[] / string[] / boolean[] | Проверяемое значение, через ИЛИ | [10,20] |
Пример полной структуры условий:
// Условия через И по полям игрока
// player.level >= 10
const playerLevelGte10: Condition = {
type: 'PLAYER_FIELD',
key: 'level',
operator: 'GTE',
value: [10],
};
// player.class === 'rouge' || player.class === 'mage'
const playerRogueOrMage: Condition = {
type: 'PLAYER_FIELD',
key: 'class',
operator: 'EQ',
value: ['rogue', 'mage'],
};
// player.level >= 10 && (player.class === 'rouge' || player.class === 'mage')
const playerANDConditions: Condition[] = [playerLevelGte10, playerRogueOrMage];
// Условия через И по статистике игрока
// playerStats.activeDays >= 5
const activeDaysGTE5: Condition = {
type: 'PLAYER_STAT',
key: 'activeDays',
operator: 'GTE',
value: [5],
};
// playerStats.playtimeAll >= 36000
const playtimeAllGTE360000: Condition = {
type: 'PLAYER_STAT',
key: 'playtimeAll',
operator: 'GTE',
value: [36000],
};
// playerStats.activeDays >= 5 && playerStats.playtimeAll >= 36000
const playerStatsANDConditions: Condition[] = [activeDaysGTE5, playtimeAllGTE360000];
// Условия через ИЛИ
// Триггер активируется, если пройдут И условия по полям, или И условия по статистике
const triggerORConditions: Condition[][] = [playerANDConditions, playerStatsANDConditions];
Типы условий
ConditionType
Тип | Описание |
---|---|
PLAYER_FIELD | Проверка поля игрока |
PLAYER_STAT | Проверка статистики игрока |
ENTITY_STAT | Проверка статистики из внешних модулей, например статистика в эвенте или планировщике |
Типы операторов сравнения
ConditionOperator
Тип | Описание |
---|---|
EQ | == равно |
NE | != не равно |
GT | > больше |
LT | < меньше |
GTE | >= больше либо равно |
LTE | <= меньше либо равно |
Поля бонуса
Bonus
Поле | Тип | Описание | Пример |
---|---|---|---|
type | BonusType | Тип бонуса | REWARD |
id | number | ID бонуса | 1122 |
Пример структур бонусов:
const bonuses: Bonus[] = [
{
type: 'REWARD',
id: 941,
},
{
type: 'PRODUCT',
id: 31,
},
];
Типы бонусов
BonusType
Тип | Описание |
---|---|
REWARD | Награда |
ACHIEVEMENT | Достижение |
PRODUCT | Покупка |
Коды ошибок
Ошибка | Описание ошибки |
---|---|
trigger_not_found | Триггер с таким ID или тегом не найден |
trigger_not_activated | Триггер не активирован |
trigger_already_claimed | Награда уже получена |
undefined | Непредвиденная ошибка (смотрите консоль) |
Оставайтесь на связи
С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.
Сообщество GamePush в Telegram
: @gs_community.
Для ваших обращений e-mail
: [email protected]
Желаем вам успехов!