Иконка ресурса

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #41
re: dPInfo 3.0

0 можно не писать.
Компилятор еррорил
Может, без интернета калякал :D



Отправил запрос
и сразу вернул значение
Хотя запрос еще не выполнился.
Нужно делать функцию. Спроси меня как.
Разве return не после callback будет вызван?

nName Почему n если это строка? s.
да какая разница :D название же

Это не верно! Не будет работать
Почему? Через функцию передаём, например, Kills, текст же.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #42
re: dPInfo 3.0

Почему? Через функцию передаём, например, Kills, текст же.
Потому что смотри
PHP:
Format(sQuery, sizeof(sQuery) - 1, "SELECT '%s' FROM 'dp_users'", GetNativeString(1, nName, sizeof(nName)));

Смотрим что возвращает GetNativeString - https://sm.alliedmods.net/new-api/functions/GetNativeString
Return Value

SP_ERROR_NONE on success, any other integer on failure.
Целое число, а у тебя мало того что %s, так еще и не то подставляешь. Видимо ты еще совсем понимаешь как работать со строками.

Чтобы проверить сделай так:
PHP:
// По своему
Format(sQuery, sizeof(sQuery) - 1, "SELECT '%s' FROM 'dp_users'", GetNativeString(1, nName, sizeof(nName)));
LogMessage(sQuery);

PHP:
// По моему
GetNativeString(1, nName, sizeof(nName));
FormatEx(sQuery, sizeof(sQuery) , "SELECT '%s' FROM 'dp_users'", nName);
LogMessage(sQuery);

И посмотри что будет в логе.

Разве return не после callback будет вызван?
Нет. Каллбек это уже ф-я и она вызывается когда прийдет ответ от сервера, к которому был отправлен запрос.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #43
re: dPInfo 3.0

Смотрим что возвращает GetNativeString
А, ну я затупил, причем сильно :D
Нет. Каллбек это уже ф-я и она вызывается когда прийдет ответ от сервера, к которому был отправлен запрос.
Есть другие варианты?
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #45
re: dPInfo 3.0

R1KO, как? :D Или это секретно, только лс?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #46
re: dPInfo 3.0

Primo, для начала узнай как определить есть ли колонка в таблице. Потому что SELECT 'column' FROM 'table' выдаст ошибку если её нет. Хотя можно этим воспользовать но не безопасно.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #47
re: dPInfo 3.0

R1KO, SQL_GetFieldCount(hndl) >= 1 на это рассчитываю.
Конечно, может быть неправильным то, что это идёт в else на ошибку...
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #48
re: dPInfo 3.0

Primo, просто проверь свой натив с полем, которого нет и увидишь.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #49
re: dPInfo 3.0

R1KO, я не проверял на работоспособность.
По логике "SELECT column_name FROM table_name", если column_name нет, то будет ошибка, либо ничего выделено не будет, следовательно, SQL_GetFieldCount(hndl) < 1, либо ошибка. Проще добавить проверку на ошибку, и выставить соответствующее значение переменной.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #50
re: dPInfo 3.0

Проще добавить проверку на ошибку, и выставить соответствующее значение переменной.
Об этом я и говорил.
Хотя можно этим воспользовать но не безопасно.
Но нужно проверять саму ошибку, а то мало ли что там может вылезти.
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Re: dPInfo 3.0

Как бы мне сделать так. Чем выше уровень,тем больше опыту нужно получить, чтобы апнуть уровень.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #52
Re: dPInfo 3.0

Как бы мне сделать так. Чем выше уровень,тем больше опыту нужно получить, чтобы апнуть уровень.

PHP:
public CheckLevel(client)
{
	if(EnLvl == 1) //Квар на включение\отключение системы уровней
	{
		new nexp = Player[pLevel][client]*ExpN; //Уровень игрока * квар требуемого опыта для повышения уровня.
		if(Player[pEXP][client] >= nexp) //Проверка имеющегося опыта
		{
			Player[pLevel][client]++; //Повышение уровня
			Player[pEXP][client] = 0; //Убираем весь опыт
		}
	}
}
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Re: dPInfo 3.0

PHP:
public CheckLevel(client)
{
	if(EnLvl == 1) //Квар на включение\отключение системы уровней
	{
		new nexp = Player[pLevel][client]*ExpN; //Уровень игрока * квар требуемого опыта для повышения уровня.
		if(Player[pEXP][client] >= nexp) //Проверка имеющегося опыта
		{
			Player[pLevel][client]++; //Повышение уровня
			Player[pEXP][client] = 0; //Убираем весь опыт
		}
	}
}

Все равно не понятно.
Пример:
1 уровень = 200 опыту.
2 уровень = 300 опыту. и т.д
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #54
Re: dPInfo 3.0

Hejter, Сейчас оно так:
Уровень * квар (стандартное значение 200)

1 уровень = 200
2 уровень = 400
3 уровень = 600
4 уровень = 800
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #56
Re: dPInfo 3.0

Hejter, ну да, прямая зависимость требуемого опыта от уровня.
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Re: dPInfo 3.0

Не сохраняется sqlite и mysql.
создается только ячейкa dp_users.
Версия dpinfo = 3.0
 

Kailo

Участник
Сообщения
194
Реакции
896
Re: dPInfo 3.0

Заметил вот такое:
В наборе есть переменная PlayerJoin.
Работа логики:
Когда игрок подключится PlayerJoin = 1 и отправляется запрос в БД о данных игрока. Если игрока нет в БД (предположим новый игрок), результат не получит строк и тогда условие if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl) && IsClientInGame(iClient)) в обработчике ответа от БД, SQL_SelectPlayerCallback, выдаст лож, и активирует условие else, которое установит PlayerJoin = 0. Когда игрок будет отключатся, перед отправкой проверяется условие if(Player[PlayerJoin][client] == 1 && !IsFakeClient(client)), которое будет ложным и заблокируется отправку статистики. В результате чего плагин не создает новых строк в таблице. Вероятно ошибка где-то в логике SQL_SelectPlayerCallback.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #59
Re: dPInfo 3.0

Заметил вот такое:
В наборе есть переменная PlayerJoin.
Работа логики:
Когда игрок подключится PlayerJoin = 1 и отправляется запрос в БД о данных игрока. Если игрока нет в БД (предположим новый игрок), результат не получит строк и тогда условие if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl) && IsClientInGame(iClient)) в обработчике ответа от БД, SQL_SelectPlayerCallback, выдаст лож, и активирует условие else, которое установит PlayerJoin = 0. Когда игрок будет отключатся, перед отправкой проверяется условие if(Player[PlayerJoin][client] == 1 && !IsFakeClient(client)), которое будет ложным и заблокируется отправку статистики. В результате чего плагин не создает новых строк в таблице. Вероятно ошибка где-то в логике SQL_SelectPlayerCallback.

Что верно, то верно. Залью новую версию позже.
 
Сверху Снизу