Чат



Описание рекордов и достижений и их использование

Рекорды

Рекорды - статистические данные в игре которые учитываются для зарегистрированных пользователей. Например, наибольшее количество заработанных в игре очков или наименьшее время проезда трассы и т.п. Чтобы в игре учитывались рекорды нужно при загрузки игры указывать что есть рекорды, задав тип и название и из флеш игры вызвать код для отправки на сервер данных для данного игрока.

Сущестует 4 типа рекордов которые можно добавить

  • max - береться максимальное значение для данного игрока и сохраняется в рекордах
  • min - береться минимальное значение для данного игрока и сохраняется в рекордах
  • add - добавляются все сообщения, а отображаются последние добавленные
  • replace - заменяются сущесвтующие значение, если такие есть

Пример отправки рекордов:
создаем рекод с типом max в игре "тетрис". И когда в игре при очередном достижении уровня вызываем функцию

import flash.external.ExternalInterface;
if (game_id && user_id) sendDataToServerAS2(game_id, user_id, 'add_score', 'de8ka94c75f4j9d9123fe0edds4h736', 'score', sb_score);

для отправки результатов на сервер с последующим их сохранением
, где
if (game_id && user_id) - переменные переданные во флеш игру. Обязательное условие. Без них не будет работать сохранение рекордов
sendDataToServerAS2 - определена ниже
add_score - константа, добавление рекордов в игру
score - название созданного рекорда (задается на шаге 2 добавление игры, только английские буквы и цифры)
sb_score - переменная, текущая скорость во флеш игре
de8ka94c75f4j9d9123fe0edds4h736 - api ключ который необходимо вызывать чтоб иметь доступ для вставки результатов.


Достижения

Достижения - это некие этапы в игре при достижении которых начисляется опыт зарегистрированным пользователям. Они разбиваются на группы, в которых входят 1-5 разных целей которых нужно достигнуть чтобы пройти эту группу достижений и получить опыт. Каждое достижение может иметь уровень сложности, то насколько легко его достигнуть. Сущесвтуют следующие уровни:

  • Легкий - довольно легко достигнуть, не составит труда его пройти даже с первого раза для новичка. Дается 3 очка опыта
  • Средний - посложнее в достижении, чтобы его достигнуть нужны опрделенные навыки в игре и продолжительное количество времени. Дается 5 очков опыта
  • Сложный - серъезное испытание которое можно пройти лишь изрядно потренировавшись. Дается 10 очков опыта
  • Невозможный - этот этап может пройти только ярый фанат игры который долго и упорно тренировался. Дается 20 очков опыта

Пример проверки на достижения:
создаем достижение с именем "score10000" в котором надо достигнуть 10000 очков в игре "тетрис. И в игре при очередном достижении уровня вызываем функцию

import flash.external.ExternalInterface;
if (game_id && user_id) sendDataToServerAS2(game_id, user_id, "add_achievement", 'de8ka94c75f4j9d9123fe0edds4h736', 'score10000');

, где
if (game_id && user_id) - переменные переданные во флеш игру. Обязательное условие. Без не будет работать сохранение
sendDataToServerAS2 - определена ниже
add_achievement - константа, добавление достижений в игру
score10000 - название созданного достижения (задается на шаге 2 добавление игры, только английские буквы и цифры)
de8ka94c75f4j9d9123fe0edds4h736 - api ключ который необходимо вызывать чтоб иметь доступ для вставки результатов

Если игрок достиг определенного этапа вызывается функция которая сохраняет на сервере то, что игрок прошел этот этап в достижении. И если пройдены все этапы, то достижения считается пройденным и игроку дается опыт за прохождение.

Также можно показывать сколько, например очков, осталось чтобы достичь то или иное достижения.
Пример отображения как далеко еще для достижения этапа:
создаем достижение с именем "score10000" в котором надо достигнуть 10000 очков в игре "тетрис. И в игре при очередном наборе очков вызываем функцию

import flash.external.ExternalInterface;
ExternalInterface.call("flash_achievement_far", 'score10000', (10000 - sb_score));

, где
flash_achievement_far - имя функции javascript куда передаем параметры
score10000 - название созданного достижения (задается на шаге 2 добавление игры, только английские буквы и цифры)
(10000 - sb_score) - сколько осталось очков чтобы достигнуть это достижение




Вспомогательные функции для отправки данных на сервер
// для ActionScript 3
function sendDataToServerAS3(game_id, user_id, action, hash, score, val)
{
	//import flash.net.*;
	// путь для скрипта
	var url:URLRequest = new URLRequest("/flash/"+action);
	// создаём объект данных, которые будем отправлять
	var variables:URLVariables = new URLVariables();
	variables.game_id = game_id;
	variables.user_id = user_id;
	variables.type = score;
	variables.hash = hash;
	variables.value = val;
	// присваиваем объект данных variables в качестве передаваемых данных
	url.data = variables;
	// указываем метод отправки
	url.method = URLRequestMethod.POST;
	// создаём объект URLLoader
	var loader:URLLoader = new URLLoader();
	// даём знать что возвращённые данный будут текстом
	loader.dataFormat = URLLoaderDataFormat.TEXT;
	
	loader.addEventListener(Event.COMPLETE, handleLoadSuccessful);
	// отправляем
	loader.load(url);
}
function handleLoadSuccessful(event:Event)
{
	var variables:URLVariables = new URLVariables(event.target.data);
	if (variables.success) ExternalInterface.call(variables.funct);
}

// для ActionScript 2
function sendDataToServerAS2(game_id, user_id, action, hash, score, val)
{
	var variables:LoadVars = new LoadVars();
	variables.game_id = game_id;
	variables.user_id = user_id;
	variables.type = score;
	variables.hash = hash;
	variables.value = val;
		
	variables.onLoad = function (resp) {
		if (resp && this.success) ExternalInterface.call(this.funct);
	}
		
	variables.sendAndLoad("/flash/"+action, variables, "POST");
}