Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Как получить инфу типа float

[РЕШЕНО]
Статус пользователя filip
сообщение 5.9.2015, 23:32
Сообщение #1


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

Как получить из MySQL базы значение с типом float? (в самой базе)
Пытался преобразовывать полученные значения через floatround - в результате при компиляции лезет ошибка tag mismatch

Если получать обычные числовые значения без запятой, все работает, только мне нужно значение, которое с запятой.
Код ниже компилируется без ошибок, но при работе на сервере выдает
Цитата
L 09/06/2015 - 00:01:54: [MySQL] No result set in this query!
L 09/06/2015 - 00:01:54: [AMXX] Displaying debug trace (plugin "test.amxx")
L 09/06/2015 - 00:01:54: [AMXX] Run time error 10: native error (native "SQL_ReadResult")
L 09/06/2015 - 00:01:54: [AMXX] [0] test.sma::FirstTimeHandle (line 62)

Ну а в игре я имею 0 вместо нужного значения.
Код:
#include <amxmodx>
#include <engine>
#include <cstrike>
#include <sqlx>

#define PLUGIN "plugin"
#define VERSION "1.0"
#define AUTHOR "author"

#define HOST "localhost"
#define USER "user"
#define PASS "pass"
#define DBASE "dbase"

new Handle:SQL_Tuple
new Handle:SQL_Connection
new account_money[33]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /test", "MainMenu")
register_clcmd("say /ttt", "qqq")

set_task(1.0, "mysql_connection")
}
public client_putinserver(id)
{
set_task(0.1, "CheckUser", id);
}
public mysql_connection(id)
{
new err, error[256]

SQL_Tuple = SQL_MakeDbTuple (HOST, USER, PASS, DBASE)
SQL_Connection = SQL_Connect(SQL_Tuple, err, error, charsmax(error))

if(SQL_Connection != Empty_Handle)
{
log_amx("[connect ok]")
}else{
log_amx("[SQLX sql error] %s ",error)
}
}
public CheckUser(id)
{
new SteamId[35], szTemp[512]
new Data[1]
Data[0] = id
get_user_authid(id, SteamId, charsmax(SteamId))
format(szTemp, charsmax(szTemp), "SELECT `eco_points` FROM `ipb_pfields_content` WHERE `field_11` = '%s'", SteamId)
SQL_ThreadQuery (SQL_Tuple, "CheckUserHandle", szTemp, Data, 1)
}

public CheckUserHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
new id
id = Data[0]
new money[33]
new i_money = SQL_FieldNameToNum(Query, "eco_points")
account_money[id] = SQL_ReadResult(Query, i_money, money, 32)
}
public qqq(id)
{
client_print(id,print_center,"Значение равно %f", account_money[id])
}

Может кто подсказать, как из MySQL получить дробное число и преобразовать его в обычное.
Изменить тип данных в MySQL нельзя, веб часть сыпится.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя ykpon
сообщение 5.9.2015, 23:37
Сообщение #2


Стаж: 12 лет

Сообщений: 328
Благодарностей: 200
Полезность: < 0

А если new account_money[33] поменять на new Float:account_money[33]?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 5.9.2015, 23:40
Сообщение #3


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

Цитата(ykpon @ 6.9.2015, 0:33) *
А если new account_money[33] поменять на new Float:account_money[33]?

test.sma(62 -- 63) : warning 213: tag mismatch
Плагин то работает, только вместо требуемого значения в игре ноль выдает.

Отредактировал: filip, - 5.9.2015, 23:41
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя trofian
сообщение 6.9.2015, 8:01
Сообщение #4


Стаж: 13 лет

Сообщений: 72
Благодарностей: 41
Полезность: 438

это делается так
Код
public CheckUserHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    new Float:money, field
    field = SQL_FieldNameToNum(Query, "eco_points")
    SQL_ReadResult(Query, field, money)
    
    account_money[Data[0]] = floatround(money)
}


но по идее можно сразу получить целое, у тебя не получилось это сделать т.к. ты брал данные как строку (т.е. срабатывал вот этот кейс с 4 параметрами https://github.com/alliedmodders/amxmodx/bl...ic_sql.cpp#L260 и в итоге функция должна была возвращать 1, а в money записывать текстовое представление)
Код
public CheckUserHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
    new field = SQL_FieldNameToNum(Query, "eco_points")
    account_money[Data[0]] = SQL_ReadResult(Query, field)
}


Отредактировал: trofian, - 6.9.2015, 8:05
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя filip
сообщение 6.9.2015, 8:27
Сообщение #5


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

РАБОТАЕТ!!!!!!!!!!
Игорь, тысяча благодарностей!!!! Я вчера весь вечер потратил на это!!!!!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: