Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 16
  1. #1
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±

    Система начисления EXP по "чистому" времени

    В общем, в данном мануале, мы узнаем как начислять EXP по чисто-отыгранному времени игрока на сервере.

    Нам потребуется:
    - Любой мод с сохранением данных игрока

    Если вы не знаете как сохранять данные игрока и с помощью чего это сделать, воспользуйтесь одним из мануалов:
    mxINI
    SqLite
    MySQL

    Создаем переменную в начале мода. Она нам понадобится для записи UNIX_TIME_STAMP при коннекте игрока.
    PHP код:
    new p_unixtime[MAX_PLAYERS]; 
    Также в массиве игрока, создаем переменную для хранения EXP очков игрока и уровня, а также ранее отыгранного времени.

    PHP код:
    enum pvar {
    pExp,
    pLevel,
    pPlayed
    };
    new 
    PlayerInfo[MAX_PLAYERS][pvar]; 
    В момент загрузки аккаунта, или после регистрации (не знаю как у вас там устроено), в общем когда игрок уже точно авторизировался на сервере, записываем TIMESTAMP

    PHP код:
    p_unixtime[playerid] = gettime(); 
    Далее, ежесекундный таймер (общий / персональный - разницы нет), вставляем проверку на достижение отыгранного лимита времени:
    PHP код:
    if(gettime() - p_unixtime[playerid] + PlayerInfo[playerid][pPlayed] > 3600) {
    PlayerInfo[playerid][pPlayed] = 0;
    p_unixtime[playerid] = gettime();
    PlayerInfo[playerid][pExp] += 1;
    if(
    PlayerInfo[playerid][pExp] > (PlayerInfo[playerid][pLevel] + 1) * 4) {
    PlayerInfo[playerid][pExp] = 0;
    PlayerInfo[playerid][pLevel] += 1;
    }
    /* MYSQL*/
    new query[200];
    format(query,sizeof(query),"UPDATE `test` SET `exp` = '%d',  `level` = '%d', `played` = '0' WHERE `id` = '%d'",PlayerInfo[playerid][pExp], PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pPlayed], переменная_с_mysql_id_игрока);
    mysql_query(testbasequeryfalse);
    /* SQLITE */
    new query[200], name[24];
    GetPlayerName(playeridname24);
    format(query,sizeof(query),"UPDATE test SET exp = %d, level = %d, played = %d WHERE name = '%s'"PlayerInfo[playerid][pExp], PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pPlayed], name);
    db_query(dbquery);

    /* mxINI*/
    new string[200], Filename[24];
    GetPlayerName(playeridname24);
    format(string24"%s"name);
    File ini_openFile(string);
    if(!
    File) return print("Error");
    ini_setInteger(File,"Level",PlayerInfo[playerid][pLevel]);
    ini_setInteger(File,"Exp",PlayerInfo[playerid][pExp]);
    ini_setInteger(File,"Played",PlayerInfo[playerid][pPlayed]);


    И в OnPlayerDisconnect, записываем время отыгранное с последнего начисления EXP.

    PHP код:
    /* MySQL*/
    new query[150];
    PlayerInfo[playerid][pPlayed] = gettime() - p_unixtime[playerid];
    format(query,sizeof(query),"UPDATE `test` SET `played` = '%d' WHERE `id` = '%d'"PlayerInfo[playerid][pPlayed], переменная_с_mysql_id игрока);
    mysq_query(dbqueryfalse);

    /* SqLite*/
    new query[150],name[24];
    GetPlayerName(playeridname24);
    PlayerInfo[playerid][pPlayed] = gettime() - p_unixtime[playerid];
    format(query,sizeof(query), "UPDATE test SET played = '%d' WHERE name = '%s'"PlayerInfo[playerid][pPlayed], name);

    /*mxINI*/
    new string[200], Filename[24];
    GetPlayerName(playeridname24);
    format(string24"%s"name);
    File ini_openFile(string);
    if(!
    File) return print("Error");
    PlayerInfo[playerid][pPlayed] = gettime() - p_unixtime[playerid];
    ini_setInteger(File,"Played",PlayerInfo[playerid][pPlayed]); 
    Ну и при загрузке аккаунта получаем данные из этих столбцов. Не знаете как? Выше я разместил ссылки с мануалами различных систем записи данных, почитай!

    На этом все.
    Последний раз редактировалось wAx; 21.09.2014 в 08:35. Причина: убрал ...

  2. #2
    Аватар для Hidden
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    73
    Репутация:
    43 ±
    PHP код:
    /* MYSQL*/
    new query[200];
    format(query,sizeof(query),"UPDATE `test` SET `exp` = '%d',  `level` = '%d', `played` = '0' WHERE `id` = '%d'"...
    mysql_query(testbasequeryfalse);
    /* SQLITE */
    new query[200];
    format(query,sizeof(query),"UPDATE test SET exp = %d, level = %d, played = %d WHERE name = '%s'"...
    db_query(dbquery); 
    Что за точки в конце форматирования?

  3. #3
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Цитата Сообщение от Hidden Посмотреть сообщение
    PHP код:
    /* MYSQL*/
    new query[200];
    format(query,sizeof(query),"UPDATE `test` SET `exp` = '%d',  `level` = '%d', `played` = '0' WHERE `id` = '%d'"...
    mysql_query(testbasequeryfalse);
    /* SQLITE */
    new query[200];
    format(query,sizeof(query),"UPDATE test SET exp = %d, level = %d, played = %d WHERE name = '%s'"...
    db_query(dbquery); 
    Что за точки в конце форматирования?
    Ваши переменные.

  4. #4
    Аватар для Hidden
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.11.2013
    Сообщений
    73
    Репутация:
    43 ±
    Цитата Сообщение от Salvador Посмотреть сообщение
    Ваши переменные.
    Новички могут так и скопировать, а потом мучить всех "А что тут не так?"

  5. #5
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Цитата Сообщение от Hidden Посмотреть сообщение
    Новички могут так и скопировать, а потом мучить всех "А что тут не так?"
    Надеюсь наши посты увидит ТС.

  6. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    И надеюсь, что он не скажет "Так пусть учатся". Всё же в мануалах должен быть готовый код, а не куски
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  7. #7
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Без проблем ребят! Щас исправим!

  8. #8
    Аватар для SmitSon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.09.2014
    Сообщений
    3
    Репутация:
    0 ±
    Откуда взять?)
    PHP код:
    pinfo 
    pctime 
    И еще интересует в какое место вставить ежесекундный таймер?
    Последний раз редактировалось SmitSon; 20.09.2014 в 21:03.

  9. #9
    Аватар для MR_BEN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.01.2014
    Сообщений
    110
    Репутация:
    29 ±
    Чтобы новички не мучились сделайте переменные макросами, пусть они изменяют переменные под себя.

  10. #10
    Аватар для SmitSon
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.09.2014
    Сообщений
    3
    Репутация:
    0 ±
    Ну все же.. Помогите, интересная система )

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •