[Sourcepawn] mysql

semjef

semjef.ru
Сообщения
993
Реакции
444
S1deX, я делаю вот это т.к. хочу интегрировать с магазином который на opencart, + научиться взаимодействию с базой))

Добавлено через 5 часов 1 минуту
выдает ошибку при компилировании((

C-подобный:
ReadColor(String:SteamId[]) 
{ 
	new color[4]; 
	new r, g, b, a; 	
//	new String:file[255]; 
	new String:query[512]; 
	Format(query, sizeof(query), "SELECT colorr, colorg, colorb, alpha FROM player WHERE steamid='%s'", SteamId); 
	new Handle:hquery = SQL_Query(g_hDb, query); 
	if (hquery == INVALID_HANDLE) return; // warning 209: function "ReadColor" should return a value
	if (SQL_FetchRow(hquery)) 
	{ 
	r = SQL_FetchInt(hquery, 0); 
	g = SQL_FetchInt(hquery, 1); 
	b = SQL_FetchInt(hquery, 2); 
	a = SQL_FetchInt(hquery, 3); 
	} 
	CloseHandle(hquery); 
	color[0] = r; 
	color[1] = g; 
	color[2] = b; 
	color[3] = a; 
	return color; //ругается на это: error 078: function uses both "return" and "return (value)"
}

и ещё, есть в нескольких местах ошибки "warning 217: loose indentation" как с этим бороться?
 
Последнее редактирование:

FrozDark

Участник
Сообщения
1,769
Реакции
2,050
warning 209: function "ReadColor" should return a value
поставь return -1 или какое нибудь значение

warning 217: loose indentation
Используй либо пробелы, либо табы в начале строки
 

S1deX

Скриптер ;)
Сообщения
129
Реакции
204
PHP:
ReadColor(String:SteamId[]) 
{ 
	new color[4]; 
	new r, g, b, a; 	
//	new String:file[255]; 
	new String:query[512]; 
	Format(query, sizeof(query), "SELECT colorr, colorg, colorb, alpha FROM player WHERE steamid='%s'", SteamId); 
	new Handle:hquery = SQL_Query(g_hDb, query); 
	if (hquery == INVALID_HANDLE) return {0,0,0,0}; // warning 209: function "ReadColor" should return a value
	if (SQL_FetchRow(hquery)) 
	{ 
	r = SQL_FetchInt(hquery, 0); 
	g = SQL_FetchInt(hquery, 1); 
	b = SQL_FetchInt(hquery, 2); 
	a = SQL_FetchInt(hquery, 3); 
	} 
	CloseHandle(hquery); 
	color[0] = r; 
	color[1] = g; 
	color[2] = b; 
	color[3] = a; 
	return color; //ругается на это: error 078: function uses both "return" and "return (value)"
}
 

semjef

semjef.ru
Сообщения
993
Реакции
444
но теперь опять в этой строчке ругается на error 039: constant symbol has no size
P.S.когда плагин доделаю в паблик выложу обязательно)))
 

FrozDark

Участник
Сообщения
1,769
Реакции
2,050
попробуй просто return color; ведь значение всё равно с самого начала у него 0 0 0 0

а вообще так не делается, ведь у тебя color состоит из нескольких рядов
лучше сделай так

PHP:
bool:ReadColor(String:SteamId[], color[4])  
{  
    new bool:result = false;
    new String:query[512];  
    Format(query, sizeof(query), "SELECT colorr, colorg, colorb, alpha FROM player WHERE steamid='%s'", SteamId);  
    new Handle:hquery = SQL_Query(g_hDb, query);  
    if (hquery == INVALID_HANDLE)
        return;
    if (SQL_FetchRow(hquery))  
    {  
        color[0] = SQL_FetchInt(hquery, 0);  
        color[1] = SQL_FetchInt(hquery, 1);  
        color[2] = SQL_FetchInt(hquery, 2);  
        color[3] = SQL_FetchInt(hquery, 3);
        result = true;
    }
    CloseHandle(hquery);
    return result;
}

а получать будешь так
PHP:
new color[4];
ReadColor("STEAM_0:0:12345", color)

можешь добавить условие
PHP:
new color[4];
if (ReadColor("STEAM_0:0:12345", color))
     PrintToChat(client, "Вам установлен цвет r %d, g %d, b %d, a %d", color[0], color[1], color[2], color[3]);
 

semjef

semjef.ru
Сообщения
993
Реакции
444
так вапще жесть((
если убираю return {0,0,0,0} в if (hquery == INVALID_HANDLE) return {0,0,0,0}; то выдаёт
error 036: empty statement

А если поставить то что предложено последним то это вапще жесть начинается(((
 

semjef

semjef.ru
Сообщения
993
Реакции
444
PHP:
ReadColor(String:SteamId[])  
{  
    new color[4];  
    new r, g, b, a;      
//  new String:file[255];  
    new String:query[512];  
    Format(query, sizeof(query), "SELECT colorr, colorg, colorb, alpha FROM player WHERE steamid='%s'", SteamId);  
    new Handle:hquery = SQL_Query(g_hDb, query);  
    if (hquery == INVALID_HANDLE); //return {0,0,0,0};  
    if (SQL_FetchRow(hquery))  
    {  
    r = SQL_FetchInt(hquery, 0);  
    g = SQL_FetchInt(hquery, 1);  
    b = SQL_FetchInt(hquery, 2);  
    a = SQL_FetchInt(hquery, 3);  
    }  
    CloseHandle(hquery);  
    color[0] = r;  
    color[1] = g;  
    color[2] = b;  
    color[3] = a;  
	return color;  
}  

public Action:Timer_Beacon(Handle:timer, any:client)
{
	new String:SteamId[64];
	GetClientAuthString(client, SteamId, sizeof(SteamId));
	if (IsPlayerAlive(client))
	SetupBeacon(client, ReadColor(SteamId));
}

SetupBeacon(client, color[4])
{
	new Float:vec[3];
	GetClientAbsOrigin(client, vec);
	vec[2] += 10;
	TE_SetupBeamRingPoint(vec, 50.0, 60.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.1, 10.0, 0.0, color, 10, 0);
	TE_SendToAll();
}
 

S1deX

Скриптер ;)
Сообщения
129
Реакции
204
Пробуй так
PHP:
bool:ReadColor(String:SteamId[], color[4])
{
    new r, g, b, a;
    new String:query[512];   
    Format(query, sizeof(query), "SELECT colorr, colorg, colorb, alpha FROM player WHERE steamid='%s'", SteamId);   
    new Handle:hquery = SQL_Query(g_hDb, query);   
    if (hquery == INVALID_HANDLE); return false;
    if (SQL_FetchRow(hquery))   
    {   
    r = SQL_FetchInt(hquery, 0);   
    g = SQL_FetchInt(hquery, 1);   
    b = SQL_FetchInt(hquery, 2);   
    a = SQL_FetchInt(hquery, 3);   
    }
    else return false;
    CloseHandle(hquery);   
    color[0] = r;   
    color[1] = g;   
    color[2] = b;   
    color[3] = a;
    return true;
}   

public Action:Timer_Beacon(Handle:timer, any:client) 
{ 
    new String:SteamId[64]; 
    GetClientAuthString(client, SteamId, sizeof(SteamId));
    new color[4];
    if (IsPlayerAlive(client) && ReadColor(SteamId, color))
    SetupBeacon(client, color); 
} 

SetupBeacon(client, color[4]) 
{ 
    new Float:vec[3]; 
    GetClientAbsOrigin(client, vec); 
    vec[2] += 10;
    TE_SetupBeamRingPoint(vec, 50.0, 60.0, g_BeamSprite, g_HaloSprite, 0, 15, 0.1, 10.0, 0.0, color, 10, 0); 
    TE_SendToAll(); 
}
 

semjef

semjef.ru
Сообщения
993
Реакции
444
когда прописываю glow_color 1 1 110 200 , ну или любые другие значения в базе значения ставит равными нулю, что нитак??

PHP:
public Action:Command_Color(client, args)
{
	if (args != 4)
	{
		PrintToConsole(client, "Incorrect usage! Usage: glow_color r g b a, where r g b - color, a - alpha.");
		return Plugin_Handled;
	}
	else
	{
	decl String:query[255];
	new String:SteamId[64];
	GetClientAuthString(client, SteamId, sizeof(SteamId));
	Format(query, sizeof(query), "SELECT * FROM player WHERE steamid ='%s'", SteamId);         
	new Handle:result = SQL_Query(g_hDb, query); 
	if (result != INVALID_HANDLE && SQL_FetchRow(result))    // нашел то... 
	{
	new String:Arg1[32], String:Arg2[32], String:Arg3[32], String:Arg4[32];
	
	
	GetCmdArg(1, Arg1, sizeof(Arg1));
	GetCmdArg(2, Arg2, sizeof(Arg2));
	GetCmdArg(3, Arg3, sizeof(Arg3));
	GetCmdArg(4, Arg4, sizeof(Arg4));
	//decl String:szSteamId[32];
	//GetClientAuthString(client, szSteamId, 32);
	
	
	decl String:szalpha[38];
	decl String:szcolorr[38];
	decl String:szcolorg[38];
	decl String:szcolorb[38];
	
	
	//заносим цвета в буфер
	Format(szalpha, 38, "%f",Arg4);
	Format(szcolorr, 38, "%f",Arg1);
	Format(szcolorg, 38, "%f",Arg2);
	Format(szcolorb, 38, "%f",Arg3);
	
	
	//обновляем в базе 
	db_updatePlayerColor(client, szalpha, szcolorr, szcolorg, szcolorb);
	
	}	
	else
	{
		PrintToChat(client, "%t","glow_cannot",LIGHTGREEN,YELLOW);
		return Plugin_Handled;
	}

	}
	return Plugin_Handled;
}

new String:sql_updatePlayerColor[] = "UPDATE player SET colorr = '%s', colorg = '%s', colorb = '%s', alpha = '%s' WHERE steamid = '%s';";


public db_updatePlayerColor(client, String:szalpha[], String:szcolorr[], String:szcolorg[], String:szcolorb[])
{

	decl String:szQuery[255];
	decl String:szSteamId[32];
	GetClientAuthString(client, szSteamId, 32);
	
	Format(szQuery, 255, sql_updatePlayerColor, szcolorr, szcolorg, szcolorb, szalpha, szSteamId);
	SQL_TQuery(g_hDb, SQL_CheckCallback, szQuery);
	
	//SQL_LockDatabase(g_hDb);
	//SQL_FastQuery(g_hDb, szQuery);
	//SQL_UnlockDatabase(g_hDb);
		
	PrintToChat(client, "%t", "glow_ok", LIGHTGREEN,YELLOW);

}




//-----------------//
// global callback //
//-----------------//
public SQL_CheckCallback(Handle:owner, Handle:hndl, const String:error[], any:data){
	if(hndl == INVALID_HANDLE)
		LogError("[aura] Error inserting into database (%s)", error);
}
 

S1deX

Скриптер ;)
Сообщения
129
Реакции
204
ты делаешь лишнее действие, причем делаешь его неправильно. Не надо форматировать строку из строки (а неправильно - %f форматирует флоат значения, а не строковые ;))
 

Iluminatte

Участник
Сообщения
17
Реакции
3
Ребят есть такой вопрос - Как сделать подтверждение Steam ID на сайте, к примеру, человек вводить стим айди и после этого его просят зайти на сервер и подтвердить его. Заранее спасибо!
 

semjef

semjef.ru
Сообщения
993
Реакции
444
нужна достаточно сложная интеграция с сайтом... тут нужно знание не только Sourcepawn, но и PHP
 

Andrey

пишу код за еду
Сообщения
3,386
Реакции
4,019
  • Команда форума
  • #39
Iluminatte, тебе сюда Услуги
А здесь задают мелкие вопросы, те кто умеют программировать. Твой же вопрос предполагает написание большого плагина с нуля. При этом своего кода написанного на данный момент ты не передоставил, значит хочешь чтобы за тебя всё сделали. При этом сам ты даже ничего сделать и не пытался.
 

Iluminatte

Участник
Сообщения
17
Реакции
3
Да, я действительно сам пока что не делал, так как мне интересно есть уже что-то похожее, будет жалко, если сделаешь то, что уже существует. Вроде это форум, а форум это обсуждение..
 
Сверху Снизу