Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 16
  1. #1
    Аватар для wAx
    ¯\_(ツ)_/¯

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

    Система начисления 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
    Сообщений
    74
    Репутация:
    41 ±
    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,282
    Репутация:
    417 ±
    Цитата Сообщение от 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
    Сообщений
    74
    Репутация:
    41 ±
    Цитата Сообщение от Salvador Посмотреть сообщение
    Ваши переменные.
    Новички могут так и скопировать, а потом мучить всех "А что тут не так?"

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

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

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

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

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

    Steve Pavlina

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

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

  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 12 ПоследняяПоследняя

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

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

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

Ваши права

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