(Online) - Начинаем разработку онлайн функций #1 - Очки.

Elleyer

I never seen a white person before.
Сообщения
28
Симпатии
41
#1
Всем здарова. Помните, мы делали запись очков в память устройства? Так вот, теперь мы будет кидать всю эту инфу на сервак.
Для начала, у нас уже есть ДБ на сервере, где есть ID и логины игроков (MySQL) :
1540895236430.png
Мы должны создать колонку с любым именем типа INT/BIGINT, и лимит цифр :
1540895347969.png
Создали? Уважуха, резбя.
Теперь валим в студию/вашу среду, и редачим скрипт с названием RestartOnDeath (Тот, что мы редачили в предыдущем уроке)
C#:
void Start()
    {
        var ScoreDatas = Scores.Currently_score.ToString();
        WWWForm Server = new WWWForm();
        Server.AddField("scores", ScoreDatas);
        Server.AddField("username", PlayerPrefs.GetString("username"));
        string url = "Ссылка на скрипт (http://xxx.xx/score.php)";
        WWW www = new WWW(url, Server);
    }
Теперь буду объяснять : Всё это будет происходить после смерти игрока.
Код:
WWWForm Server = new WWWForm();
- скрипт создаст форму отправки на сервер ,
Код:
Scores.Currently_score.ToString();
- переводим число с другого скрипта (scores.cs) в строку, что-бы отправить на сервер.
Код:
Server.AddField("scores", ScoreDatas);
Server.AddField("username", PlayerPrefs.GetString("username"));
- Добавляем имя юзера, которому отправляем данные на сервак по ссылке, которую указали заранее,
C#:
WWW www = new WWW(url, Server);
- тут уже сама отправка, думаю, что понятно. Сейчас увидите скрипт пыхи со стороны сервака, который написан с помощью West - а :
PHP:
<?php

require_once 'config.php';

$conn = new mysqli($config['host'], $config['user'], $config['pass'], $config['db']); // Коннект к базе данных 

$score = htmlspecialchars($_POST['scores']);     // Принимает данные, отправленные с нашего CS скрипта (Заметили, что имена должны быть одинаковыми? Логично же =)  )
$username = htmlspecialchars($_POST['username']); // Смотрите выше

$esc_username = $conn->escape_string($username);

$q = $conn->query("SELECT `scores` FROM `users` WHERE `nick`='$esc_username'"); //Как я понял, ищет, какому юзеру добавлять очки (по "username")


$score_by_user = $q->fetch_array(MYSQLI_ASSOC); // Принимает те очки тому юзеру, который играл (фильтр)

$new_score = $score_by_user['scores'] + $score; // Суммирует все очки (постоянно прибавляет после игры)

$q2 = $conn->query("UPDATE `users` SET `scores`='$new_score' WHERE `nick`='$esc_username'"); //Обнова очков (как я понял)
В пыхе я еще не очень силён, надеюсь, West меня поправит.
После смерти игрока, оно отправит вам то количество очков, которое у вас было, и на ту юзерку, под которой вы вошли.
Я не знаю, что по безопасности такого метода отправки, и так далее. Это просто моё хобби, я делаю для себя, и рассказываю вам о том, что знаю. Спасибо за прочтение. Всё робит =)
 

West

Сообщения
59
Симпатии
45
#2
Поправки к комментариям в скрипте.
// Как я понял, ищет, какому юзеру добавлять очки (по "username")
Получает столбец scores, по юзернейму.
// Принимает те очки тому юзеру, который играл (фильтр)
Записывает в переменную score_by_user массив с полученными из БД данными.
// Суммирует все очки (постоянно прибавляет после игры)
Суммирует в переменную new_score полученное из БД кол-во очков у юзера, и то, сколько нужно добавить.
//Обнова очков (как я понял)
Обновление строки новыми данными.
Использование такого метода записи очков крайне небезопасно, т.к. узнав, как это дело работает, злоумышленник сможет легко накручивать в игре очки отправляя POST запрос на скрипт.

По поводу создания поля в базе, вполне должно хватит INT(от -2,147,483,648 до 2,147,483,647).

Пы.Сы: Соре за говнокод.
Пы.Сы2: Славик, пиши сервер.