Вопросы

Здравствуйте, команда форума и его пользователи. Перепробовал разные способы сохранения здоровья в базу данных, но они не подходят для меня. Буду благодарен, если кто-то поделится данной системой.

Поделиться сообщением


Ссылка на сообщение

18 ответов на этот вопрос

  • 0

@Tookie Johnson, что конкретно пробовали, что не подходит? 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfeehttps://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://pawn.wiki/index.php%3F/topic/30348-sohranenie-zdorovja-i-broni-pri-vihode/&ved=2ahUKEwjRupq1l6WFAxWQGRAIHZz2CWYQFnoECA4QAQ&usg=AOvVaw1bm2L15SncC3uGm4AHbLBM

 

В Ютубе тоже смотрел. Делал также, ничего не сохранялось.

Я могу вам скинуть как у меня обновляется айпи в базе данных при авторизации, а мы попробуем разобраться, как на основе этого сделать сохранение хп.

Отредактировано пользователем Tookie Johnson

Поделиться сообщением


Ссылка на сообщение
  • 0

@Tookie Johnson, показывайте сохранение IP-адреса, коль уж можете.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee , доброе утро. Держите:

new string[256];
new lastip[15];
GetPlayerIp(playerid, lastip, 15);
format(string, sizeof(string), "UPDATE `accounts` SET `pLastIp` = '%s' WHERE `pName` = '%s'", lastip, pInfo[playerid][pName]);
mysql_function_query(database, string, 0"""");

 

Извините за такую подачу кода, не получается исправить 

Отредактировано пользователем Cawfee

Поделиться сообщением


Ссылка на сообщение
  • 0

@Tookie Johnson, превосходно. Вы по аналогии создали новый столбец в таблице accounts для хранения значения здоровья? В предложенном SQL-запросе изменили название поля и аргумент lastip на значение здоровья игрока? Куда вставляли полученный код? 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee , да. Дожидаясь ответа от вас сегодня, я попытался сделать систему сохранения хп, но я теперь умираю при спавне.

@Cawfee в public OnPlayerDisconnect. SetPlayerHealth(playerid, pInfo[playerid][pHealth] в public OnPlayerSpawn.

Я пробовал и %d и %f, не получилось.

В загрузку аккаунта тоже добавлял. Если надо записи в консоле, то скину могу скинуть 

Отредактировано пользователем Tookie Johnson

Поделиться сообщением


Ссылка на сообщение
  • 0

@Tookie Johnson, будет лучше, если покажете конкретные фрагменты кода с указанием места их размещения.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee, хорошо, 5 минут и всё будет здесь 

 

Уважаемый @Cawfee , простите меня за ваше потраченное время на меня. Не сохранялось всё из-за того, что я пробел поставил между Float: и pHealth. Я проверил, сохраняется. Ещё раз, извините меня, пожалуйста. В следующий раз буду обращаться на форум только если в крайнем случае нужно. Но спасибо вам за то, что явились на помощь и пытались помочь. 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Tookie Johnson, ничего страшного. Хорошо, что все хорошо. Но проблема навряд ли в пробеле.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee , я тут заметил, что после регистрации 0 хп и смерть, а когда снова вхожу в аккаунт, то всё хорошо 

 

Попробую добавить хп сохранение после регистрации 

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee , всё таки проблему не до конца решил. После регистрации умираю, но когда вхожу в этот аккаунт, всё уже работает.

Спойлер

enum player_information
{
    Float:pHealth
}

public OnPlayerDisconnect(playerid, reason)
{
    new string[256];
    new Float:health;
    GetPlayerHealth(playerid, health);
    format(string, sizeof(string), "UPDATE `accounts` SET `pHealth` = '%f' WHERE `pName` = '%s'", health, pInfo[playerid][pName]);
    mysql_function_query(database, string, 0"""");
    return 1;
}

public OnPlayerSpawn(playerid)
{
    SetPlayerHealth(playerid, pInfo[playerid][pHealth]);
    return 1;
}

forward p_login(playerid);
public p_login(playerid)
{
    new rows, fields;
    cache_get_data(rows, fields);
    if(rows)
    {
        pInfo[playerid][pHealth] = cache_get_field_content_float(0"pHealth");
        authorization[playerid] = true; SpawnPlayer(playerid);
    }
    else
    {
        static const fmt_str[] = "Добро пожаловать на {F2BC58}California RolePlay [#1]\n{FFFFFF}Аккаунт: {6EF83C}%s\n{FFFFFF}Пинг: {6EF83C}%d\n{FFFFFF}Ваш игровой аккаунт зарегистрирован. Если Вы не\n{FFFFFF}регистрировали этот аккаунт, то используйте другой\nникнейм.\n\n{C3C3C3}Введите пароль от Вашего аккаунта и нажмите 'Вход'.";
        new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME];
        format(string, sizeof(string), fmt_str, pInfo[playerid][pName], GetPlayerPing(playerid));
        ShowPlayerDialog(playerid, 4, DIALOG_STYLE_PASSWORD, "{F2BC58}Авторизация", string, "Далее""");
        SendClientMessage(playerid, -1"{FFFFFF}Вы успешно авторизировались. Желаем Вам приятной игры на {F2BC58}California Role Play{FFFFFF}!");
    }
}

 

 

В базе данных:

Столбец: pHealth

Тип: FLOAT

Как определено: 100

Спойлер

----------
Loaded log file: "server_log.txt".
----------
SA-MP Dedicated Server
----------------------
v0.3.7-R2, (C)2005-2015 SA-MP Team
[08:43:06] filterscripts = "" (string)
[08:43:06] weburl = "www.sa-mp.com" (string)
[08:43:06
[08:43:06] Server Plugins
[08:43:06] --------------
[08:43:06] Loading plugin: crashdetect.so
[08:43:06] CrashDetect plugin 4.19.4
[08:43:06] Loaded.
[08:43:06] Loading plugin: ColAndreas_static.so
[08:43:06] *********************
[08:43:06] ** Created By: **
[08:43:06] ** [uL]Chris42O **
[08:43:06] ** [uL]Slice **
[08:43:06] ** [uL]Pottus **
[08:43:06] *********************
[08:43:06] No collision data found.
[08:43:06] *********************
[08:43:06] ColAndreas Loaded
[08:43:06] v1.4.0
[08:43:06] *********************
[08:43:06] Loaded.
[08:43:06] Loading plugin: mysql_static.so
[08:43:06] plugin.mysql: R39-6 successfully loaded.
[08:43:06] Loaded.
[08:43:06] Loading plugin: pawnraknet.so
[08:43:06] Pawn.RakNet plugin v1.2.0 by urShadow loaded
[08:43:06] Loaded.
[08:43:06] Loading plugin: CRP.so
[08:43:06
[08:43:06] ______________________________________
[08:43:06] Convert Rus To Pwn v0.1.1 loaded
[08:43:06] ______________________________________
[08:43:06] By: Fro (c) Copyright <TBG 2009-2011
[08:43:06] ______________________________________
[08:43:06] Loaded.
[08:43:06] Loading plugin: pawncmd.so
[08:43:06] Pawn.CMD plugin v3.2.0 by urShadow has been loaded
[08:43:06] Loaded.
[08:43:06] Loading plugin: sscanf4.so
[08:43:06] [Vehicle/skin server limits] Loaded...
[08:43:06] Loaded.
[08:43:06] Loading plugin: sscanf.so
[08:43:06
[08:43:06] ===============================
[08:43:06] sscanf plugin loaded.     
[08:43:06] Version: 2.8.3        
[08:43:06] (c) 2018 Alex "Y_Less" Cole  
[08:43:06] ===============================
[08:43:06] Loaded.
[08:43:06] Loading plugin: streamer.so
[08:43:06

*** Streamer Plugin v2.8.2 by Incognito loaded ***
[08:43:06] Loaded.
[08:43:06] Loading plugin: TOTP.so
[08:43:06] TOTP plugin v1.0.1 by Games loaded.
[08:43:06] Loaded.
[08:43:06] Loaded 10 plugins.
[08:43:06
[08:43:06] Filterscripts
[08:43:06] ---------------
[08:43:06] Loaded 0 filterscripts.
[08:43:06
----------------------------------
[08:43:06] Blank Gamemode by your name here
[08:43:06] ----------------------------------
[08:43:06] Number of vehicle models: 0
[08:43:54] [connection] 85.26.235.46:21274 requests connection cookie.
[08:43:54] [connection] incoming connection: 85.26.235.46:21274 id: 0
[08:43:55] [join] Test_Account has joined the server (0:85.26.235.46)
[08:44:11] [death] Test_Account died 255
[08:44:15] [death] Test_Account died 255
[08:44:30] [part] Test_Account has left the server (0:0)

 

 

Отредактировано пользователем Cawfee

Поделиться сообщением


Ссылка на сообщение
  • 0

@Tookie Johnson, в личных сообщениях создайте диалог с собой (напишите сами себе) и попробуйте потренироваться со вставкой кода. Здесь описание.

 

Чем завершается регистрация? Где код последнего диалога?

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee, регистрация заканчивается после выбора пола.

 

Спойлер

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case 0:
        {
            if(!response)
                return Kick(playerid);
            if(!strlen(inputtext))
            {
                static const fmt_str[] = "{FFFFFF}Добро пожаловать на {F2BC58}California RolePlay [#1]\n{FFFFFF}Пинг: {6EF83C}%d\n{FFFFFF}Данный аккаунт {6EF83C}свободен {FFFFFF}для регистрации.\n\n{FFFFFF}Придумайте пароль для вашего будущего аккаунта.\n\n{C3C3C3}* Длина пароля должна составлять от от 4 до 30 символов.\n{C3C3C3}* Пароль может состоять из русских и латинских символов.";
                new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME];
                format(string, sizeof(string), fmt_str, pInfo[playerid][pName], GetPlayerPing(playerid));
                ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "{F2BC58}Регистрация", string, "Далее""");
                return 1;
            }
            if(strlen(inputtext) < 4 || strlen(inputtext) > 30)
                return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация""{FFFFFF}Пароль должен содержать от 4 до 30 символов и букв""Далее""");
            for(new i = strlen(inputtext); i != 0; --i)
            switch(inputtext[i])
            {
                case 'А'..'Я''а'..'я'' ':
                    return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация""{FFFFFF}Ваш пароль не должен содержать русских букв.""Далее""");
            }
            strmid(pInfo[playerid][pPassword], inputtext, 0, strlen(inputtext), 20);
            ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"{F2BC58}Регистрация","{FFFFFF}Введите Ваш действуйющий адрес электронной почты.\nУбедительно просим Вас ввести существующую почту, так как в дальнейшем\nона понадобится Вам для дополнительной защиты Вашего аккаунта.\n\n{C3C3C3}* Почта должна быть указана с символом '@'.\n{C3C3C3}* Почта может состоять максимум из 50 символов.""Далее","");
    }
    case 1:
    {
        if(response)
        {
            if(!strlen(inputtext)) return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"{F2BC58}Регистрация","{FFFFFF}Введите Ваш действуйющий адрес электронной почты.\nУбедительно просим Вас ввести существующую почту, так как в дальнейшем\nона понадобится Вам для дополнительной защиты Вашего аккаунта.\n\n{C3C3C3}* Почта должна быть указана с символом '@'.\n{C3C3C3}* Почта может состоять максимум из 50 символов.""Далее","");
            if(strfind(inputtext, "@"true) == -1 || strfind(inputtext, "\n"true) != -1 || strfind(inputtext, "."true) == -1)
            {
                ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"{F2BC58}Регистрация","{FFFFFF}Введите Ваш действуйющий адрес электронной почты.\nУбедительно просим Вас ввести существующую почту, так как в дальнейшем\nона понадобится Вам для дополнительной защиты Вашего аккаунта.\n\n{C3C3C3}* Почта должна быть указана с символом '@'.\n{C3C3C3}* Почта может состоять максимум из 50 символов.""Далее","");
                return true;
            }
            strmid(pInfo[playerid][pEmail], inputtext, 0, strlen(inputtext), 50);
            new st[100];
            format(st, sizeof(st), "SELECT * FROM `accounts` WHERE `pEmail` = '%s'", inputtext);
            mysql_function_query(database, st, true"FindPlayerEmale","i", playerid);
            new string[256];
            SendClientMessage(playerid, 0xFFFFFFFF, string);
            ShowPlayerDialog(playerid, 3, DIALOG_STYLE_MSGBOX, "{F2BC58}Регистрация""{FFFFFF}Выберите пол для Вашего будущего персонажа""Мужской""Женский");
        }
    }
    case 3:
    {
        if(!response)
        {
            pInfo[playerid][pSex] = 2;
            new RandomF = random(sizeof(gRandomF));
            SetPlayerSkin(playerid,gRandomF[RandomF]);
            pInfo[playerid][pSkin] = gRandomF[RandomF];
        }
        else
        {
            pInfo[playerid][pSex] = 1;
            new RandomM = random(sizeof(gRandomM));
            SetPlayerSkin(playerid,gRandomM[RandomM]);
            pInfo[playerid][pSkin] = gRandomM[RandomM];
        }
        pInfo[playerid][pLevel] = 1;
        authorization[playerid] = true;
        new Year, Month, Day;
        getdate(Year, Month, Day);
        new regdate[13];
        format(regdate, sizeof(regdate), "%02d.%02d.%d", Day, Month, Year);
        new Second, Minute, Hour;
        gettime(Second, Minute, Hour);
        new regtime[11];
        format(regtime, sizeof(regtime), "%02d:%02d:%02d", Second, Minute, Hour);
        new regip[15];
        GetPlayerIp(playerid, regip, 15);
        static const fmt_str[] = "INSERT INTO `accounts` (`pName`, `pPassword`, `pEmail`, `pSex`, `pSkin`, `pLevel`, `pRegDate`, `pRegTime`, `pRegIp`) VALUES ('%s', '%s', '%s', '%d', '%d', '%d', '%s', '%s', '%s')";
        new string[sizeof(fmt_str) + (-2+MAX_PLAYER_NAME)+(-2+20)+(-2+50+1)+(-2+1)+(-2+3)+(-2+4)+(-2+13)+(-2+11)+(-2+15)];
        format(string, sizeof(string), fmt_str, pInfo[playerid][pName], pInfo[playerid][pPassword], pInfo[playerid][pEmail], pInfo[playerid][pSex], pInfo[playerid][pSkin], pInfo[playerid][pLevel], regdate, regtime, regip);
        mysql_function_query(database, string, 0"""");
        format(string, sizeof(string),"{6EF83C}%s{FFFFFF}, вы прошли регистрацию. Желаем приятной игры на {F2BC58}California  Role Play{FFFFFF}!", pInfo[playerid][pName]);
        SendClientMessage(playerid, -1, string);
        SpawnPlayer(playerid);
    }
    case 4:
    {
        if(!response)
            return Kick(playerid);
        if(!strlen(inputtext))
        {
            static const fmt_str[] = "Добро пожаловать на {F2BC58}California RolePlay [#1]\n{FFFFFF}Аккаунт: {6EF83C}%s\n{FFFFFF}Пинг: {6EF83C}%d\n{FFFFFF}Ваш игровой аккаунт зарегистрирован. Если Вы не\n{FFFFFF}регистрировали этот аккаунт, то используйте другой\nникнейм.\n\n{C3C3C3}Введите пароль от Вашего аккаунта и нажмите 'Вход'.";
            new string[sizeof(fmt_str) + (-2+MAX_PLAYER_NAME)];
            format(string, sizeof(string), fmt_str, pInfo[playerid][pName], GetPlayerPing(playerid));
            ShowPlayerDialog(playerid, 4, DIALOG_STYLE_PASSWORD, "{F2BC58}Авторизация", string, "Далее""");
            SendClientMessage(playerid, -1"{FFFFFF}Вы успешно авторизировались. Желаем Вам приятной игры на {F2BC58}California  Role Play{FFFFFF}!");
            return 1;
        }
        static const fmt_str[] = "SELECT * FROM `accounts` WHERE `pName` = '%s' AND `pPassword` = '%s'";
        new string[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME - 2 + 20 + 1];
        format(string, sizeof(string), fmt_str, pInfo[playerid][pName], inputtext);
        mysql_function_query(database, string, 1"p_login""i", playerid);
    }
}
        return 1;
}}
        return 1;
}
        return 1;
}

 

case 3 - это выбор пола.

 

*Вместо 3-х ретюрнов у меня 1 (похоже баг кода тут).

Отредактировано пользователем Tookie Johnson

Поделиться сообщением


Ссылка на сообщение
  • 0
В 02.04.2024 в 19:14, Tookie Johnson сказал:

 сохранения здоровья в базу данных

для чего и кто это придумал :nini:

Поделиться сообщением


Ссылка на сообщение
  • 0

@ddrgtagfon, умные люди придумали для того, чтобы было.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Tookie Johnson, вы выставляете значение по умолчанию для здоровья игрока в базе данных, а в моде считываете это значение только при авторизации, но не регистрации. Вам нужно либо по окончании регистрации (перед SpawnPlayer) установить: pInfo[playerid][pHealth] = 100, либо после регистрации направлять игрока на авторизацию.

Поделиться сообщением


Ссылка на сообщение
  • 0

@Cawfee, я попробую сейчас, спасибо!

 

@Cawfee, спасибо! Огромное вам спасибо за информацию по вставке кода и ответ по решению проблемы, я запомню это и постараюсь не допускать подобные ошибки. Спасибо вам большое, я благодарен. Можете закрывать тему <3 (это сердечко).

 

Я благодарен вам, честно 

Поделиться сообщением


Ссылка на сообщение
  • 0
2 часа назад, Tookie Johnson сказал:

<3 (это сердечко)

По такому случаю добавил новый смайл (в следующий раз если наберете этот же символ и нажмете пробел, он автоматически подставится) :)

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • gooding
      От gooding


      Скачать файл America RP | БОНУСНЫЙ МОД | VEGAS RP
      Приветствую, уважаемый читатель. Я выложил на продажу игровой мод America RolePlay (Основа мода: VEGAS)
      Этот мод представляет из себя доработку старого мода Vegas RP.
       
      Лог изменений и добавлений:
      1. Добавлен красный никнейм для админов.
      2. Исправлено множество багов.
      3. Новый анти-чит.
      4. XL VIP.
      5. Основные привилегии. (Бесконечный VIP Gold, Прокачка Наркозависимости и тд)
      6. Топовые привилегии. (Радужный никнейм, бронированный автомобиль, Supreme наклейка, Неон на автомобиль, Джетпак, VIP-интерьер для дома, Мигающий цвет автомобиля, Анти-Реклама, скин CJ, Цветные скины на оружие)
      7. Исправлены работы. (Тренер, Продукты, Развозчик продуктов, Пожарный, Таксист, Механик)
      8. Новые квесты.
      9. DUBAI ISLAND.
      10. Обновленный интерьер у VIP-домов на DUBAI ISLAND.
      11. Новая админ-зона.
      12. Разнообразие контейнеров на пляже. (From RUSSIA/UAE/BELARUS/UKRAINE и другие)
      13. Кейсы. (Возможность выбить VIP-автомобиль, включая танк - Rhino или Hotring B)
      14. VIP-Автомобили. (Rhino, Monster-Truck, Tractor, Hotring A/B и тд)
      15. Обновленные интерьеры.
      16. Обновленный маппинг.
      17. Добавлены команды для поддерживания экономики. (/server_econom)
      18. Секретные промо-коды. (FREEHELPER, AMERICATOP, RECORD4000)
      19. Новая валюта Euro.
      20. Зарплата на работах выдается в Euro.
      21. Админ-донат. (Можно купить повышение админ-прав и приватные команды: /ban /warn /soz /banip /fdon /goadm /makeleader и другие)
      22. Разнообразие уровней ФД. (/fdon)
      23. Добавлены новые команды для администрации. (/soz, /idea, /ot, /pm)
      24. Умная система ботов. (pawnbots, fakeonline, метки на карте, npc bots)
       
      Добавил gooding Добавлено 30.04.2024 Категория Моды Автор vasёk, gooding  
    • gooding
      От gooding
      Приветствую, уважаемый читатель. Я выложил на продажу игровой мод America RolePlay (Основа мода: VEGAS)
      Этот мод представляет из себя доработку старого мода Vegas RP.
       
      Лог изменений и добавлений:
      1. Добавлен красный никнейм для админов.
      2. Исправлено множество багов.
      3. Новый анти-чит.
      4. XL VIP.
      5. Основные привилегии. (Бесконечный VIP Gold, Прокачка Наркозависимости и тд)
      6. Топовые привилегии. (Радужный никнейм, бронированный автомобиль, Supreme наклейка, Неон на автомобиль, Джетпак, VIP-интерьер для дома, Мигающий цвет автомобиля, Анти-Реклама, скин CJ, Цветные скины на оружие)
      7. Исправлены работы. (Тренер, Продукты, Развозчик продуктов, Пожарный, Таксист, Механик)
      8. Новые квесты.
      9. DUBAI ISLAND.
      10. Обновленный интерьер у VIP-домов на DUBAI ISLAND.
      11. Новая админ-зона.
      12. Разнообразие контейнеров на пляже. (From RUSSIA/UAE/BELARUS/UKRAINE и другие)
      13. Кейсы. (Возможность выбить VIP-автомобиль, включая танк - Rhino или Hotring B)
      14. VIP-Автомобили. (Rhino, Monster-Truck, Tractor, Hotring A/B и тд)
      15. Обновленные интерьеры.
      16. Обновленный маппинг.
      17. Добавлены команды для поддерживания экономики. (/server_econom)
      18. Секретные промо-коды. (FREEHELPER, AMERICATOP, RECORD4000)
      19. Новая валюта Euro.
      20. Зарплата на работах выдается в Euro.
      21. Админ-донат. (Можно купить повышение админ-прав и приватные команды: /ban /warn /soz /banip /fdon /goadm /makeleader и другие)
      22. Разнообразие уровней ФД. (/fdon)
      23. Добавлены новые команды для администрации. (/soz, /idea, /ot, /pm)
      24. Умная система ботов. (pawnbots, fakeonline, метки на карте, npc bots)
       
    • Bolotovka
      От Bolotovka
      Ку, короче при компиляции мода вылазит ошибка fatal error 100: cannot read from file: "gamemode/gardens" самого gardens нету, я бы хотел спросить есть ли он у кого то?