Перейти к содержанию
Авторизация  
АЛЕКСАНДР МАМАЕВ

таблица с аккаунтами

Рекомендуемые сообщения

АЛЕКСАНДР МАМАЕВ

В таблице с аккаунтами было много столбиков сохранение и загрузка не шла уменьшая столбики проверял тогда шло сделал 2 таблицу с аккаунтами с частью столбиков все загрузки прописал но её мод не хочет грузить коректно в чём может быть дело

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


Ссылка на сообщение
Поделиться на другие сайты
_krasnov_

Подгрузку сделай

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


Ссылка на сообщение
Поделиться на другие сайты
АЛЕКСАНДР МАМАЕВ

@_krasnov_,  получаеться вот дополнительная таблица ну строк немного для примера

public LoadPlayerData1(playerid)
{
	new rows, fields, temp[20];
	cache_get_data(rows, fields);
	if(rows)
	{
	    cache_get_field_content(0, "id", temp), PLAYER_DATA[playerid][data_ID] = strval (temp);
	    cache_get_field_content(0, "ud", temp), PLAYER_DATA[playerid][data_ud] = strval (temp);
		cache_get_field_content(0, "udhp", temp), PLAYER_DATA[playerid][data_udhp] = strval (temp);
	}
	return true;
}

а вот основная ну тоже несколько строк для примера:

public LoadPlayerData(playerid)
{
	new rows, fields, temp[64],login_ip[32];
	cache_get_data(rows, fields);
	if(rows)
	{
	
		cache_get_field_content(0, "id", temp), PLAYER_DATA[playerid][data_ID] = strval (temp);
		cache_get_field_content(0, "money", temp), PLAYER_DATA[playerid][data_MONEY] = strval (temp);
		cache_get_field_content(0, "donate", temp), PLAYER_DATA[playerid][data_DONATE] = strval (temp);
		cache_get_field_content(0, "sex", temp), PLAYER_DATA[playerid][data_SEX] = strval (temp);
		cache_get_field_content(0, "skin", temp), PLAYER_DATA[playerid][data_SKIN] = strval (temp);
		cache_get_field_content(0, "lvl", temp), PLAYER_DATA[playerid][data_LVL] = strval (temp);
		cache_get_field_content(0, "exp", temp), PLAYER_DATA[playerid][data_EXP] = strval (temp);
		cache_get_field_content(0, "member", temp), PLAYER_DATA[playerid][data_MEMBER] = strval (temp);
		new visit_str[128];
		format(visit_str, sizeof visit_str, "Urban History Role Play: {FFFFFF}Последний вход в аккаунт был выполнен: {DCF58A}< %s >", PLAYER_DATA[playerid][data_LASTVISIT]);
		SendClientMessage(playerid, 0x5BA0D4AA, visit_str);
		//==============================================================================
		if(PLAYER_DATA[playerid][data_VIP] != 0)
		{
			if(gettime() >= PLAYER_DATA[playerid][data_VIPTIME])
			{
				SendClientMessage(playerid, COLOR_ORANGE, "Срок действия Вашего VIP аккаунта закончился");
				PLAYER_DATA[playerid][data_VIP] = 0;
				PLAYER_DATA[playerid][data_VIPTIME] = 0;
			}
			else
			{
				new format_vip_text[128];

				format(format_vip_text, sizeof format_vip_text, "На Вашем аккаунте имеется VIP статус на %d дней. Истекает: %s", ((PLAYER_DATA[playerid][data_VIPTIME] - gettime()) / 86400) + 1, date("%dd.%mm.%yyyy / %hh:%ii:%ss", PLAYER_DATA[playerid][data_VIPTIME]));
				SendClientMessage(playerid, COLOR_ORANGE, format_vip_text);
			}
		}
		//==============================================================================
		new str[145];
		if(PLAYER_DATA[playerid][data_ADMLVL] > 1)
		{
		    gettimebox
			for(new i = 0; i < 9; i++) TextDrawShowForPlayer(playerid, CheatText[i]);
			format(str,sizeof(str),""timebox" ~g~[A] Администратор %s (%s) [admlvl: %d] авторизовался на сервере",hour, minute, second, PLAYER_DATA[playerid][data_NAME],PLAYER_DATA[playerid][data_LOGIN_IP],PLAYER_DATA[playerid][data_ADMLVL]);
			SendBoxMessage(str);
		}
        DeletePVar(playerid,"player_auth");
        PLAYER_DATA[playerid][data_LOGGED] = true;
        CancelSelectTextDraw(playerid);
        TogglePlayerControllable(playerid, true);
        for(new i; i<16; i++) TextDrawHideForPlayer(playerid, Mmtext[i]);
        SetPVarInt(playerid, "reglog", 0);
        TogglePlayerSpectating(playerid, false);
	}
	else
	{
	    new wrongtext[145];
        if (GetPVarInt(playerid, "WrongPassword") == 3) return Kick(playerid);
        SetPVarInt(playerid, "WrongPassword", GetPVarInt ( playerid, "WrongPassword") + 1);
		format(wrongtext,sizeof(wrongtext),"Вы ввели неправильный пароль! Осталось попыток %d/3",GetPVarInt(playerid,"WrongPassword"));
		SendClientMessage(playerid, 0xFF333300, wrongtext);
		Dialog_PLAYER_LOGIN(playerid);
	}
	return true;
}

а вот прогрузка выходит: 

forward LoadAcc(playerid);
public LoadAcc(playerid)
{
	new query[150];
	mysql_format(dbHandle, query, sizeof(query), "SELECT * FROM `accounts` WHERE `name` = '%e' AND `password` = %s",PLAYER_DATA[playerid][data_NAME],PLAYER_DATA[playerid][data_PASSWORD]);
	mysql_function_query(dbHandle, query, true, "LoadPlayerData", "d", playerid);
	return 1;
}

forward LoadAcc1(playerid);
public LoadAcc1(playerid)
{
	new query[150];
	mysql_format(dbHandle, query, sizeof(query), "SELECT * FROM `accounts` WHERE `name` = %s",PLAYER_DATA[playerid][data_NAME]);
	mysql_function_query(dbHandle, query, true, "LoadPlayerData1", "d", playerid);
	return 1;
}

и вот тут значиться: public CheckBan(playerid)
{
	new rows, fields,temp[256];
	cache_get_data(rows, fields);
	if(rows)
	{
		new dtext[256], day, text[50], id;
		cache_get_field_content(0, "id",temp), id = strval (temp);
		cache_get_field_content(0, "day",temp), day = strval (temp);
		cache_get_field_content(0, "text", text, dbHandle);
		format(dtext,sizeof(dtext),"{ffffff}BANID: %d\n???: %s\n??????? ??????????: %s\n??????? ????? ????????????? ????? %d ???/????",id,PLAYER_DATA[playerid][data_NAME],text,day);
		ShowPlayerDialogFix(playerid, dialog_BAN, DIALOG_STYLE_MSGBOX,"{FFCC00}?????? ????????????", dtext, "???????", "");
		Kick(playerid);
	}
	else
	{
		new query[150];
		mysql_format(dbHandle, query, sizeof(query), "SELECT * FROM `accounts` WHERE `name` = '%e' AND `password` = '%e'",PLAYER_DATA[playerid][data_NAME],PLAYER_DATA[playerid][data_PASSWORD]);
		mysql_function_query(dbHandle, query, true, "LoadPlayerData", "d", playerid);
		mysql_format(dbHandle, query, sizeof(query), "SELECT * FROM `accounts1` WHERE `name` = '%e'",PLAYER_DATA[playerid][data_NAME]);
		mysql_function_query(dbHandle, query, true, "LoadPlayerData1", "d", playerid);
	}
	return true;
}   и вот ещё: 
а вот ещё:
 
public CheckBan(playerid)
{
new rows, fields,temp[256];
cache_get_data(rows, fields);
if(!rows) return LoadAcc(playerid),LoadAcc1(playerid);
if(rows)
{
new dtext[360], bantime, unbantime, text[50], id, nameadm[MAX_PLAYER_NAME];
cache_get_field_content(0, "unbantime", temp), unbantime = strval (temp);
if(gettime() < unbantime)
{
cache_get_field_content(0, "id",temp), id = strval (temp);
cache_get_field_content(0, "bantime",temp), bantime = strval (temp);
cache_get_field_content(0, "text", text, dbHandle);
cache_get_field_content(0, "admin", nameadm, dbHandle);
format(dtext,sizeof(dtext),"{FF0000}ID бана: {FFFFFF}%d\n{FF0000}Имя: {FFFFFF}%s\n{FF0000}Ник администратора: {FFFFFF}%s\n{FF0000}Причина блокировки: {FFFFFF}%s\n{FF0000}Дата блокировки: {FFFFFF}%s\n{FF0000}Дата разблокировки: {FFFFFF}%s",
id,PLAYER_DATA[playerid][data_NAME],nameadm, text, date("%dd.%mm.%yyyy в %hh:%ii:%ss",bantime-10800), date("%dd.%mm.%yyyy в %hh:%ii:%ss",unbantime-10800));
ShowPlayerDialogFix(playerid, dialog_BAN, DIALOG_STYLE_MSGBOX,"{FFCC00}Аккаунт заблокирован", dtext, "Закрыть", "");
}
else if(gettime() >= unbantime)
{
new query[150];
mysql_format(dbHandle,query, sizeof(query), "DELETE FROM `banlist` WHERE `name` = '%s'", PLAYER_DATA[playerid][data_NAME]);
mysql_function_query(dbHandle, query, false, "", "");
}
}
return true;
}
Изменено пользователем АЛЕКСАНДР МАМАЕВ

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


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

Идеальная база данных - не база с малым количеством таблиц и огромным количеством столбцов в них, а база с огромным количеством таблиц и маленьким содержимым. В идеале у тебя должна быть таблица с аккаунтами, где прописано тупо id, name; должна быть таблица, где вся информация основная: телефон, почта, пароль, рефералы; таблица, содержащая информацию о работе (ранг, номер фракции, либо номер работы, стаж); содержащая информацию о тех же наказаниях (времени мута, пребывания в тюрьме, количество предупреждений и тому подобное)... Все, что останется, также в отдельную таблицу. Так скажем вспомогательную. Это лишь примерный вариант и не всегда он будет настолько идеален, насколько он есть на словах, но по крайней мере именно это подразумевает MySQL и именно так стоит оперировать с базой данных.


Ах, да, не нужно в каждой таблице записывать тот же ник забаненного, везде стоит использовать его ID, который есть в первой таблице. Тут тебе поможет LEFT JOIN. Вообще, поковыряйся в запросах, поразбирайся что да как. Вот, например, получение уровня игрока:

SELECT level FROM acc_users AS users LEFT JOIN acc_main AS main ON users.id = main.id WHERE users.name = 'ник'

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


Ссылка на сообщение
Поделиться на другие сайты
АЛЕКСАНДР МАМАЕВ

Ах, да, не нужно в каждой таблице записывать тот же ник забаненного, везде стоит использовать его ID я просто думал что тут if(!rows) return LoadAcc(playerid),LoadAcc1(playerid); после проверки бана грузяться аккаунты  мне просто на 2 разделить надо строки у меня все есть понимаешь просто в таблице аккаунтов много столбиков и за того что там в ней всё нужное: 

авто игрока а это 4 столба с ид 4 с бензином ещё 4 столбика с пробегом , 
8 столбиков с цветами авто,4 с тюнингом авто,
 4 с номерами авто, 4 с зарядкой аккумулятора и 4 с вир миром авто при парковке 
16 с координатами парковки ну на каждое авто 4 координата парковки ещё 
13 сохранениями для оружия и 13 для патронов ещё сигареты сохраняются 
это 3 столбика один есть ли они второй оставшиеся количество и 3 зажигалка 
ещё 3 столбика для рыбалки удочка , её здоровье чтобы ломалась со временем и червяки 
8 столбиков со скилами оружия 5 с паспортными датами там есть ли паспорт серия его,номер,
 дата получения  и возраст ещё 4 столбика login_ip, logdate_day,  logdate_month и logdate_year  
ещё в ней 4 столбика потребностей жажда,голод,сон и нужда 
ещё для телефона 4 столбика есть ли он,номер, баланс и селфипалка есть ли система селфи 
ещё 4 столбика m_online,n_online,a_online, 2 с лицензиями, 2 со скинами обычный и фракционный, 
3 с выговорами 1 выговор для лидера работникам, 2 для админам лидерам и 3 выговор админам, 
2 с вип 1 это есть ли вип и 2 вип время и также с тюрьмой два, трос для авто, военный билет, 
лидерка, ранг, фракция, 
6 столбиков если крашнуло чтоб восстановиться при входе 
crash,crashx, crashy, crashz, crashint и crashworld, 
1 столбик для автоматического автобуса когда билет покупаешь, 
2 для мута есть ли он и время и для варна 2, 2 для денег на руках и в банке  1 для доната и ещё regdate_day regdate_month regdate_year

и ещё вот эти столбики: 

                acc_int_strcat(query, sizeof(query), "lvl", PLAYER_DATA[playerid][data_LVL]);
		acc_int_strcat(query, sizeof(query), "exp", PLAYER_DATA[playerid][data_EXP]);
		acc_int_strcat(query, sizeof(query), "member", PLAYER_DATA[playerid][data_MEMBER]);
		acc_int_strcat(query, sizeof(query), "podmember", PLAYER_DATA[playerid][data_PODMEMBER]);
		acc_int_strcat(query, sizeof(query), "admlvl", PLAYER_DATA[playerid][data_ADMLVL]);
		acc_int_strcat(query, sizeof(query), "salary", PLAYER_DATA[playerid][data_SALARY]);
		acc_int_strcat(query, sizeof(query), "business", PLAYER_DATA[playerid][data_BUSINESS]);
		acc_int_strcat(query, sizeof(query), "house", PLAYER_DATA[playerid][data_HOUSE]);
		acc_int_strcat(query, sizeof(query), "kv", PLAYER_DATA[playerid][data_KV]);
		acc_int_strcat(query, sizeof(query), "padik", PLAYER_DATA[playerid][data_PADIK]);
		acc_int_strcat(query, sizeof(query), "ab", PLAYER_DATA[playerid][data_AB]);
		acc_int_strcat(query, sizeof(query), "patr", PLAYER_DATA[playerid][data_PATR]);
		acc_int_strcat(query, sizeof(query), "wanted", PLAYER_DATA[playerid][data_WANTED]);
		acc_float_strcat(query, sizeof(query), "hp", PLAYER_DATA[playerid][data_HP]);
		acc_float_strcat(query, sizeof(query), "arm", PLAYER_DATA[playerid][data_ARM]);
		acc_int_strcat(query, sizeof(query), "med", PLAYER_DATA[playerid][data_MED]);
		acc_int_strcat(query, sizeof(query), "spawn", PLAYER_DATA[playerid][data_SPAWN]);
		acc_int_strcat(query, sizeof(query), "hospital", PLAYER_DATA[playerid][data_HOSPITAL]);
		acc_int_strcat(query, sizeof(query), "job", PLAYER_DATA[playerid][data_JOB]);
		acc_int_strcat(query, sizeof(query), "polit", PLAYER_DATA[playerid][data_POLIT]);
		acc_int_strcat(query, sizeof(query), "golos", PLAYER_DATA[playerid][data_GOLOS]);
		acc_int_strcat(query, sizeof(query), "zakon", PLAYER_DATA[playerid][data_ZAKON]);
		acc_int_strcat(query, sizeof(query), "promocode", PLAYER_DATA[playerid][data_PROMOCODE]);
		acc_int_strcat(query, sizeof(query), "time", PLAYER_DATA[playerid][data_TIME]);
		acc_int_strcat(query, sizeof(query), "nark",PLAYER_DATA[playerid][data_NARKO]);
Изменено пользователем АЛЕКСАНДР МАМАЕВ

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


Ссылка на сообщение
Поделиться на другие сайты
noname_idk
@АЛЕКСАНДР МАМАЕВ, тебе нужнг тупо часть столбцов из обной таблицы в другую кинуть?

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


Ссылка на сообщение
Поделиться на другие сайты
АЛЕКСАНДР МАМАЕВ

, да  я два для примера кинул в новую создал таблицу но у меня пишет [10:58:24] [WARNING] cache_get_data - no active cache

[10:59:36] [ERROR] CMySQLQuery::Execute[] - (error #1054) Unknown column 'ud' in 'field list' ud в новую базу перенёс с udhp со старой и сохронениями из старой удалил почему пишет ошибки непойму
Изменено пользователем АЛЕКСАНДР МАМАЕВ

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


Ссылка на сообщение
Поделиться на другие сайты
АЛЕКСАНДР МАМАЕВ

, я вроде понел не хочет прогружаться таблица почемуто 

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


Ссылка на сообщение
Поделиться на другие сайты
АЛЕКСАНДР МАМАЕВ

, из второй таблице прогружает данные но похоже чтото с запросом ошибка осталась одна [12:21:22] [WARNING] cache_get_data - no active cache 

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


Ссылка на сообщение
Поделиться на другие сайты
noname_idk
@АЛЕКСАНДР МАМАЕВ, как дополнительная таблица называется?

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


Ссылка на сообщение
Поделиться на другие сайты
АЛЕКСАНДР МАМАЕВ

,  accounts1

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


Ссылка на сообщение
Поделиться на другие сайты
АЛЕКСАНДР МАМАЕВ

, всё я выеснил аккаунты вторая таблица грузиться нормально проблема в загрузке системы гаражей там чтото нетак 

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


Ссылка на сообщение
Поделиться на другие сайты
noname_idk

@АЛЕКСАНДР МАМАЕВ, покажи загрузку гаражей (участок кода, где формируется запрос и отправляется), а также функцию, в которой идет извлечение данных из кэша. 

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


Ссылка на сообщение
Поделиться на другие сайты
АЛЕКСАНДР МАМАЕВ

,

в public OnGameModeInit():
LoadGarage();
mysql_tquery(dbHandle, "SELECT * FROM `garage`", "LoadGarage", "");


forward LoadGarage();
public LoadGarage()
{
	new query[2000];
	new str[256];
	for(new i = 1; i <= ALLGARAGE; i++)
	{
		strmid(Garage[i][gOwner], "None", 0, strlen("None"), 24);
	}
	new rows, fields;
	cache_get_data(rows, fields);
	if(rows > 0)
	{
		for(new idx = 1; idx <= rows; idx++)
		{
			sscanf(query, "p<|>is[24]iiiffffffffffffffii",
			Garage[idx][gID],
			Garage[idx][gOwner],
			Garage[idx][gPrice],
			Garage[idx][gInter],
			Garage[idx][gVirtual],
			Garage[idx][gX1],
			Garage[idx][gY1],
			Garage[idx][gZ1],
			Garage[idx][gX2],
			Garage[idx][gY2],
			Garage[idx][gZ2],
			Garage[idx][gR2],
			Garage[idx][gX3],
			Garage[idx][gY3],
			Garage[idx][gZ3],
			Garage[idx][gR3],
			Garage[idx][gX4],
			Garage[idx][gY4],
			Garage[idx][gZ4],
			Garage[idx][gLock],
			Garage[idx][gUL]);
			ALLGARAGE++;
			if(!strcmp(Garage[idx][gOwner],"None",true))
			{
				format(str, 100, "{FFFFFF}Гараж №%d продается!\nСтоимость: %d", idx, Garage[idx][gPrice]);
				Garage[idx][gText] = Create3DTextLabel(str, -1, Garage[idx][gX1], Garage[idx][gY1], Garage[idx][gZ1], 10.0, 0, 1);
				Garage[idx][gPickup] = CreatePickup(1239, 23, Garage[idx][gX1], Garage[idx][gY1], Garage[idx][gZ1]);
			}
			else
			{
				format(str, 100, "{FFFFFF}Гараж №%d куплен!\nВладелец %s\nСтоимость: %d", idx, Garage[idx][gOwner], Garage[idx][gPrice]);
				Garage[idx][gText] = Create3DTextLabel(str, -1, Garage[idx][gX1], Garage[idx][gY1], Garage[idx][gZ1], 10.0, 0, 1);
				Garage[idx][gPickup] = CreatePickup(1239, 23, Garage[idx][gX1], Garage[idx][gY1], Garage[idx][gZ1]);
			}
		}
	}
	print("\n----------------------------------");
	return printf("Было загружено %d гаражей.", ALLGARAGE);
} 

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


Ссылка на сообщение
Поделиться на другие сайты
АЛЕКСАНДР МАМАЕВ

UP

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


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

  • Последние посетители   0 пользователей онлайн

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

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.