Различные вопросы к кодерам от непонимающего Санька!

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Всем привет.
Хочу добавить ещё одну колонку в БД. Но как это сделать без потери данных и проблем для пользователей без SqlLiteStudio.
Проблемо восновном в том, что я не знаю как это реализовать через плагин. А именно , как проверить есть она или база ещё голая, как добавить если база есть, а колонки нет.
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
Re: Как работать с базами данных?

Саша Шеин,
C-подобный:
ALTER TABLE table_name ADD field_name parametrs
table_name
- имя таблицы, в которой будет вставлен новый столбец;
field_name
- имя вставляемого столбца;
parametrs
- параметры, описывающие вставляемый столбец.
 

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Re: Как работать с базами данных?

Саша Шеин,
C-подобный:
ALTER TABLE table_name ADD field_name parametrs

Спасибо, но ещё вопрос как узнать есть этот столбец в базе или его нет?

Добавлено через 46 секунд
И дабы не создавать кучу тем напишу здесь.

Надо убрать нумерацию из меню, но как это сделать?
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
Re: Как работать с базами данных?

Спасибо, но ещё вопрос как узнать есть этот столбец в базе или его нет?
PHP:
SHOW TABLES;

или

PHP:
IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'table_name' AND COLUMN_NAME = 'some_column') ...

Надо убрать нумерацию из меню, но как это сделать?
панель
 
Последнее редактирование:

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Re: Как работать с базами данных?

Дабы не создовать много тем.
Напишу сдесь.

SELECT `name`,
`kills`,`irank`,`deaths`,(kills/deaths)
FROM `army_ranks` ORDER BY 3
DESC LIMIT %d, 7;

%d = g_iTemp[iClient]*7

Сдесь идёт сортировка по irank,
но первый идёт тот кто попал
первым под этот запрос надо как
то добавить условие: Если irank
одинаковый то проверяем kills (У
кого килов больше тот и первее) Вот так. Заранее спасибо!
 

DexKekcuk #13

Участник
Сообщения
628
Реакции
69
Re: Как работать с базами данных?

Вот данный код который скидывал Шеин, только в нормальном виде..

PHP:
SendTopPanel(iClient)
{
	decl String:sQuery[256];
	KvRewind(hKv);
	g_iTopType = KvGetNum(hKv,"TopType",1);
	switch(g_iTopType)
	{
		case 0: Format(sQuery, sizeof(sQuery), "SELECT `name`, `kills`,`irank`,`deaths`,(kills/deaths) FROM `army_ranks` ORDER BY 2 DESC LIMIT %d, 7;", g_iTemp[iClient]*7);
		case 1: Format(sQuery, sizeof(sQuery), "SELECT `name`, `kills`,`irank`,`deaths`,(kills/deaths) FROM `army_ranks` ORDER BY 3 DESC LIMIT %d, 7;", g_iTemp[iClient]*7);
		case 2: Format(sQuery, sizeof(sQuery), "SELECT `name`, `kills`,`irank`,`deaths`,(kills/deaths) FROM `army_ranks` ORDER BY 5 DESC LIMIT %d, 7;", g_iTemp[iClient]*7);
	}	
	SQL_TQuery(g_hSQLdb, SQLT_OnTopDisplay, sQuery, GetClientUserId(iClient));
}

public SQLT_OnTopDisplay(Handle:hOwner, Handle:hQuery, const String:sError[], any:iUserId)
{
	new iClient = GetClientOfUserId(iUserId);
	if ( !iClient )
	{
		return;
	}
	
	if ( !hQuery )
	{
		LogError("SQLT_OnTopDisplay: %s", sError);
	}
	
	new Handle:hTopPanel = CreatePanel(), iCount = 0;
	
	decl String:sBuffer[256];
	decl String:Name[256];
	Format(sBuffer, sizeof(sBuffer), "%T", "Top Title",iClient);
	SetPanelTitle(hTopPanel, sBuffer);
	
	decl String:sRank[32], iRank, iKills,iDeath,Float:KshareD;
	while ( SQL_FetchRow(hQuery) )
	{
		SQL_FetchString(hQuery, 0, Name, sizeof(Name));
		iKills = SQL_FetchInt(hQuery, 1);
		iRank  = SQL_FetchInt(hQuery, 2);
		iDeath  = SQL_FetchInt(hQuery, 3);
		KshareD  = SQL_FetchFloat(hQuery, 4);
		if(iRank < GetArraySize(g_hArray_iKills)-1)GetArrayString(g_hArray_sRanks, iRank, sRank, sizeof(sRank));
		else GetArrayString(g_hArray_sRanks, iRank-1, sRank, sizeof(sRank));
		Format(sBuffer, sizeof(sBuffer), "%T", "Top Menu",iClient, g_iTemp[iClient]*7 + iCount + 1, Name, sRank, KshareD,iKills,iDeath);
		DrawPanelText(hTopPanel, sBuffer);
		
		iCount++;
	}
	DrawPanelText(hTopPanel, " ");
	SetPanelCurrentKey(hTopPanel, 8);
	DrawPanelItem(hTopPanel, "Назад");
	if(iCount>=7)
	{
		SetPanelCurrentKey(hTopPanel, 9);
		DrawPanelItem(hTopPanel, "Далее");
	}
	else DrawPanelText(hTopPanel, " ");
	SetPanelCurrentKey(hTopPanel, 10);
	DrawPanelItem(hTopPanel, "Выход");
	SendPanelToClient(hTopPanel,iClient,Handle_TopMenu,MENU_TIME_FOREVER);
}
 

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Вообщем дабы не создавать новые темы переименную эту.

Вопросы:
1) Как защититься от декомпила?
Знаю что можно это сделать подобным кодом:
C-подобный:
new var = 1;
if (var != var)
{
do {
if (var == 1)
{
var = 2;
}
else
{
if (var == 2)
{
var = 1;
}
}
}
}
Но вот интересно проверка типа 1!=1 будет грузить сервак?

Добавлено через 4 минуты
2) Как граматно сделать проверку на то какая игра? Пробывал через SDK:
C-подобный:
switch(GetEngineVersion())
{
case Engine_Source SDK2006: return
GAME_CSS_34;
case Engine_CSS: return GAME_CSS;
case Engine_CSGO: return
GAME_CSGO;
}
 
Последнее редактирование:

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Вообщем дабы не создавать новые темы переименную эту.

Вопросы:
1) Как защититься от декомпила?
Знаю что можно это сделать подобным кодом:
C-подобный:
new var = 1;
if (var != var)
{
do {
if (var == 1)
{
var = 2;
}
else
{
if (var == 2)
{
var = 1;
}
}
}
}
Но вот интересно проверка типа 1!=1 будет грузить сервак?

Если ты ее поставишь в OnGameFrame то я думаю ответ на твой вопрос будет очевиден.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
проверка типа 1!=1 будет грузить сервак?
Всякое действие будет "грузить" сервер, ибо оно - операция для процессора. Другое дело, что проверка эта столь проста (редко исполняемая), что нагрузка не выразится и в миллиардных долях от общей.
сделать проверку на то какая игра
Ещё со старых версий SM использовали GetGameFolderName.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #12
Саша Шеин, зависит от см.

Из VIP
PHP:
UTIL_GetGameType()
{
	if (GetFeatureStatus(FeatureType_Native, "GetEngineVersion") == FeatureStatus_Available)
	{
		switch(GetEngineVersion())
		{
			case Engine_SourceSDK2006:	return GAME_CSS_34;
			case Engine_CSS:					return GAME_CSS;
			case Engine_CSGO:				return GAME_CSGO;
		}
	}
	else if (GetFeatureStatus(FeatureType_Native, "GuessSDKVersion") == FeatureStatus_Available)
	{
		switch(GetEngineVersion())
		{
			case SOURCE_SDK_EPISODE1:			return GAME_CSS_34;
			case SOURCE_SDK_CSS:			return GAME_CSS;
			case SOURCE_SDK_CSGO:			return GAME_CSGO;
		}
	}

	return GAME_UNKNOWN;
}

и не забудь
PHP:
MarkNativeAsOptional("GuessSDKVersion");
	MarkNativeAsOptional("GetEngineVersion");
 

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Почему не вмещается такое название сервера:
| Army Ranks | Паблик нового поколения | DD2 Only |
 

максимка27

Участник
Сообщения
513
Реакции
213
Саша Шеин, представь что 1 русская буква равняются к 2 английским, вот и не влазит название в нормы
 

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Объясните что делают выделенные фрагменты?

C-подобный:
//1
stock OffsLib_AddEntityFlag(entity, flag)
{
    new flags = GetEntityFlags(entity);

[B]    if (flag & ~flags)
        flags |= flag;[/B]
    
    SetEntProp(entity, Prop_Data, "m_fFlags", flags);
}
//2
stock OffsLib_RemoveEntityFlag(entity, flag)
{
    new flags = GetEntityFlags(entity);

[B]    if (flags & flag)
        flags &= ~flag;[/B]
    
    SetEntProp(entity, Prop_Data, "m_fFlags", flags);
}
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #18
Саша Шеин,
Это кажется тоже самое что и
PHP:
if (!(flags & flag))

Это
Добавляет flag в flags.

if (flags & flag)
flags &= ~flag;
Наоборот. Если оно было - удаляет.
 

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
AlmazON, а как? Я имею ввиду чтобы он остался когда убирут такую фитчу.
 
Сверху Снизу