Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Обнуление при снятие с лидерки - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

  • (3 Страниц) +
  • 1
  • 2
  • 3
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Pawn ]
Обнуление при снятие с лидерки

#1
Пользователь офлайн   cyb3rl00ser 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Во время снятия с лидерки, я обнуляю такие параментры как pLeader, pMember, pRang, pModel, и сохраняю это в бд, а они не обнуляются :(
                player_info[params[0]][pLeader] = 0;
		player_info[params[0]][pMember] = 0;
		player_info[params[0]][pRang] = 0;
		player_info[params[0]][pModel] = 0;
		SavePlayer(params[0], "leader", player_info[params[0]][pLeader], "d");
		SavePlayer(params[0], "member", player_info[params[0]][pMember], "d");
		SavePlayer(params[0], "rang", player_info[params[0]][pRang], "d");
		SavePlayer(params[0], "model", player_info[params[0]][pModel], "d");



Если думаете, что сток SavePlayer не правильно написан, то это не так, так как все остальное в него сохраняется, когда на Лидера ставлю человека, то все сохраняется, к примеру pLeader = 1, pMember = 1, pRang = 8, pModel = Skin, но вот почему-то не обнуляется...
Вот на всякий сток
stock SavePlayer(playerid, const field_name[], const set[], const type[])
{
	new string[128+1];
	if(!strcmp(type, "d", true))
	    mysql_format(dbHandle, string, sizeof(string), "UPDATE `accounts` SET `%s` = '%d' WHERE `ID` = '%d'", field_name, set, player_info[playerid][ID]);
	else if(!strcmp(type, "s", true))
	    mysql_format(dbHandle, string, sizeof(string), "UPDATE `accounts` SET `%s` = '%s' WHERE `ID` = '%d'", field_name, set, player_info[playerid][ID]);
	mysql_tquery(dbHandle, string, "", "");
}


0

#2
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
stock SavePlayer(playerid, const field_name[], e_PLAYER_INFO:set, type)// Вместо "e_PLAYER_INFO" вставь имя enum, в котором перечислены константы pLeader, pMember и т.п.
{
    new string[128+1];
    switch(type)
    {
        case 'd':
        {
            format(string, sizeof(string), 
                "UPDATE `accounts` SET `%s`=%d WHERE ID=%d", field_name, player_info[playerid][set], player_info[playerid][ID]);
        }
        case 's':
        {
            format(string, sizeof(string), 
                "UPDATE `accounts` SET `%s`='%s' WHERE ID=%d", field_name, player_info[playerid][set], player_info[playerid][ID]);
        }
        default:
        {
            return 0;
        }
    }
    mysql_tquery(dbHandle, string, "", "");
    return 1;
}


Пользоваться так:
SavePlayer(playerid, pLeader, 'd');


И да: такая функция нужна в тех случаях, когда нужно обновить данные одного столбца. Если обновлять нужно сразу несколько столбцов - составляй запрос вручную и сразу прописывай в него все нужные столбцы, чтоб не отправлять кучу запросов.
0

#3
Пользователь офлайн   cyb3rl00ser 

  • Новичок
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (02 Декабрь 2019 - 03:14) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Я понял, то есть если обнуляю, то не использую переменную указанную выше?
А эти 4 запроса много чего могут натворить?
0

#4
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияcyb3rl00ser (02 Декабрь 2019 - 09:11) писал:

Я понял, то есть если обнуляю, то не использую переменную указанную выше?


Не очень понимаю в чём суть вопроса.

Просмотр сообщенияcyb3rl00ser (02 Декабрь 2019 - 09:11) писал:

А эти 4 запроса много чего могут натворить?


Эти 4 запроса ничего не натворят, но если ты продолжишь так говнокодить, то ничего хорошего из этого не выйдет (лаги/баги не заставят себя ждать).

Сообщение отредактировал DeimoS: 02 Декабрь 2019 - 13:07

0

#5
Пользователь офлайн   cyb3rl00ser 

  • Новичок
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (02 Декабрь 2019 - 13:06) писал:

Не очень понимаю в чём суть вопроса.



Эти 4 запроса ничего не натворят, но если ты продолжишь так говнокодить, то ничего хорошего из этого не выйдет (лаги/баги не заставят себя ждать).


Всё равно не обнуляет параметры после того как я ввёл в игре /makeleader 0 0
                player_info[params[0]][pLeader] = 0;
		player_info[params[0]][pMember] = 0;
		player_info[params[0]][pRang] = 0;
		player_info[params[0]][pModel] = 0;
		static const fmt_query[] = "UPDATE `accounts` SET `leader` = '%d', `member` = '%d', `rang` = '%d', `model` = '%d' WHERE `ID` = '%d'";
		new query[sizeof(fmt_query)+(-2+2)+(-2+2)+(-2+2)+(-2+3)+(-2+11)];
		format(query, sizeof(query), fmt_query, player_info[params[0]][pLeader], player_info[params[0]][pMember], player_info[params[0]][pRang], player_info[params[0]][pModel], player_info[params[0]][ID]);
		mysql_query(dbHandle, query, false);



При этом мембер обнулился, а Лидер, ранг и модель нет....
https://imgur.com/a/97ZffDU

Сообщение отредактировал cyb3rl00ser: 03 Декабрь 2019 - 00:11

0

#6
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
А зачем ты вообще передаёшь значение переменных в строку, если и так известно, что их значение равно 0?

Скрин сделан после выхода с сервера или сразу после снятия? Добавь
print(query);

и попробуй выполнить запрос, который выдаст в логи, прямо в phpMyAdmin
0

#7
Пользователь офлайн   cyb3rl00ser 

  • Новичок
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияDeimoS (03 Декабрь 2019 - 01:50) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


То есть если они по умолчанию в бд стоят как 0, то не надо из преравнивать к нолю в коде?

Скрин сделан после снятия, но в бд ничего не меняется и после выхода
0

#8
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
Причём тут приравнивание к нулю в коде? Ты в format вызываешь переменные pLeader, pMember и т.п., получая их значение, хотя и без того известно, что оно будет равно нулю. Так почему сразу не прописать нули в запрос?
0

#9
Пользователь офлайн   cyb3rl00ser 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
ты предлагаешь сделать так?
static const fmt_query[] = “UPDATE `accounts` SET `leader` = '0', `member` = '0', `rang` = '0', `model` = '0' WHERE `ID` = '%d'”;
new query[sizeof(fmt_query)+(-2+2)+(-2+2)+(-2+2)+(-2+3)+(-2+11)];
format(query, sizeof(query), fmt_query, player_info[params[0]][ID]);
mysql_query(dbHandle, query, false);


Сообщение отредактировал cyb3rl00ser: 04 Декабрь 2019 - 05:35

0

#10
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
Да. Только формулу поправь. И кавычек лишних куча.
0

Поделиться темой:


  • (3 Страниц) +
  • 1
  • 2
  • 3
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика