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

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #21
Re: [CSGO|CSS] dPInfo 2.0

В таком случае, стоит делать так:
PHP:
public VErtoe_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
{
	new attacker = GetClientOfUserId(GetEventInt(event, "attacker"));
	if (attacker && IsClientInGame(attacker))
	{
		new victim = GetClientOfUserId(GetEventInt(event, "userid"));
		if (victim && IsClientInGame(victim))
		//Дальнейший код.
	}
}
Что сначала стоит проверять (att или vic) - смотреть по коду далее.

А если attacker - мир? Или через консоль убили, к примеру.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #22
Re: [CSGO|CSS] dPInfo 2.0

Primo, тогда и твой и мой и его ошибочен)) т.к. на attacker > 0 надо проверять уже когда стату атакующего будем обрабатывать.

PHP:
public VErtoe_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) 
{ 
	new victim = GetClientOfUserId(GetEventInt(event, "userid")); 

	if(victim > 0 && IsClientInGame(victim)) 
	{
		Player[pDeaths][victim]++;

		new attacker = GetClientOfUserId(GetEventInt(event, "attacker")), 
		if(attacker > 0 && IsClientInGame(attacker)) 
		{
			if(IsFakeClient(victim)) 
			{ 
				Player[pBotKills][attacker]++; 
			} 

			Player[pKills][attacker]++; 
			if(EnCr == 1 && attacker != victim) Player[pCredit][attacker]++; 
			Player[pKillStreak][attacker]++; 

			if(EnLvl == 1) 
			{ 
				new nLVLxp = GetClientHealth(attacker)*Player[pLevel][victim]/10 ;
				nLVLxp = nLVLxp+Player[pEXP][attacker];
				Player[pEXP][attacker] = nLVLxp ;
				if(Player[pKillStreak][victim] > 0) 
				{ 
					new nLVLxp2 = Player[pLevel][victim]*Player[pKillStreak][victim]; 
					Player[pEXP][attacker] = Player[pEXP][attacker]+nLVLxp2;
					PrintToChat(attacker, "Вы получили дополнительно \x01\x04%d \x01\x05опыта за убившего \x01\x04\%d \x01\x05людей", nLVLxp2, Player[pKillStreak][victim]); 
				} 
				if(GetEventBool(event, "headshot")) 
				{ 
					Player[pEXP][attacker] = Player[pEXP][attacker]+50; 
					PrintToChat(attacker, "Вы получили \x01\x04 50\x01\x05 опыта за убийство в голову"); 
				} 
				CheckLevel(attacker); 	
			} 
		}
		Player[pKillStreak][victim] = 0;	
		CheckLevel(victim); 
	} 
}
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #23
Re: [CSGO|CSS] dPInfo 2.0

Primo, тогда и твой и мой и его ошибочен)) т.к. на attacker > 0 надо проверять уже когда стату атакующего будем обрабатывать

А зачем проверять?
Сам факт, что игрок умер, а атакующий, к примеру, мир, уже добавляет к его смертям значение.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #24
Re: [CSGO|CSS] dPInfo 2.0

А чё ж ты ставил проверку > 0, мы то откуда знаем, какие тебе надо ограничения от плагина?! :taunt:

Рассчитываю на телепатию) А вообще, зачем проверять victim и attacker вашим способом?
Если их индексы больше 0, то логично, что это не мир или консоль, значит они есть и будут использоваться далее.
 

Primo

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

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #27
Re: [CSGO|CSS] dPInfo 2.0

Primo, код исправил т.к. были недочеты.


Зачем проверять по-порядку, если можно сразу с самого начала проверить их индексы?
Если ты сначала сделаешь все проверки то если игрока убил мир ему не засчитает смерть не серия убийств тоже не будет остановлена.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #28
Re: [CSGO|CSS] dPInfo 2.0

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

Сразу проверил двух клиентов на их валидность, если они это не прошли, тогда отбой.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #29
Re: [CSGO|CSS] dPInfo 2.0

Это всё лень. А где были эти мысли, когда ты писал код?

А зачем создавать лишние операции, которые тоже требуют время обработки?

Хотя фактически и так и так получается одно и то же.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #30
Re: [CSGO|CSS] dPInfo 2.0

Primo, уверен?
Если игрок будет 0 и мы проверим IsClientInGame(victim) то в лог насыпет что индекс не валиден.


Сразу проверил двух клиентов на их валидность, если они это не прошли, тогда отбой.

Если ты сначала сделаешь все проверки то если игрока убил мир ему не засчитает смерть не серия убийств тоже не будет остановлена.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
  • Автор ресурса
  • #31
Re: [CSGO|CSS] dPInfo 2.0

Primo, уверен?
Если игрок будет 0 и мы проверим IsClientInGame(victim) то в лог насыпет что индекс не валиден.

Поэтому мы с самого начала проверяем attacker и victim на то, что они оба соответствуют условию attacker > 0 && victim > 0.
А дальше уже проверяем, в игре они оба, или нет.
А то, что не меняется значение смертей, если умер от мира, то это да, я не продумал.
 

Primo

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

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Re: [CSGO|CSS] dPInfo 2.0

самый актуальный код
Неа.
PHP:
public VErtoe_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) 
{ 
    new victim = GetClientOfUserId(GetEventInt(event, "userid")); 

    if(victim) 
    {
        Player[pDeaths][victim]++;

        new attacker = GetClientOfUserId(GetEventInt(event, "attacker")), 
        if(attacker) 
        {
И не надо лишних проверок.
переменные создал в самом начале
Тут я с R1KO полностью солидарен - глупо это.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #36
Re: [CSGO|CSS] dPInfo 2.0

AlmazON, аттакера надо проверять IsClientInGame.
Он кинул гранату, у него вылетела ксс (ну мало ли какая причина выхода, главное что он отключен), жертва умерла но атакера уже нет.
Хотя скорее всего юзер айди уже будет не действительным и при получении индекса вернет 0.
Тогда наверное if(attacker) хватит.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Re: [CSGO|CSS] dPInfo 2.0

Я про себя говорю
Так и я говорю, не повторяй одних и тех же ошибок)
юзер айди уже будет не действительным и при получении индекса вернет 0.
Именно! Всё из-за GetEventInt(event, "userid"), который ты мне как-то объяснял в таймере, когда я полуспал с недосыпа.
 

Primo

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

dPInfo 3.0

Изменен код. Исправлены ошибки.
 

Вложения

  • dPInfo 3.0.zip
    13.9 КБ · Просмотры: 4

Primo

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

Итак, я решил переделывать плагин, т.к. собираюсь делать систему админов и банов, т.к. стандартные не устраивают своим функционалом.
Что я хочу сделать:
- Сам dPInfo будет являться лишь ядром с нативами, и совершать подключение к бд, не более.
- С помощью нативов можно выполнять SQL запросы к бд.
- Некую модульность. Если сам dpinfo является ядром, то остальное, системы банов и т.п., будут отдельными плагинами, которые будут взаимодействовать с бд через dpinfo.
Сейчас хочу сделать такие нативы:
- Проверка на наличие столбика в таблице, возвращает его номер(индекс). Пойдёт в качестве элемента для модульности. Например, есть таблица dp_users, отдельный плагин(не dpinfo) проверяет через dpinfo наличие столбика, с которым он будет работать, его номер, чтобы получить данные.
- Получение данных из нужного столбика. Т.к. предыдущий натив позволяет получить номер столбца, то этот натив вернёт данные по номеру столбца.
- Запись данных. В любом случае понадобится запись данных.

Теперь о самих системках.
Баны:
- Запись банов будет происходить через dPInfo.
- Несколько вариантов времени проверки на бан игрока. Первый, при подключении. Второй, через n сек после подключения.
- Зависимость от системы админов (иммунитет, уровни доступа и т.п.)
- Никакой связи с командами SourceMod
- Ну и стандартные функции, типа банменю и т.д.
Конечно, это всё детали от велосипеда, но нужно же как-то описать, почему я решил делать системку.

Админы:
- Естественно, нужно сделать меню, причем все функции не будут связаны с командами(функциями админки) SourceMod.
- Уровень доступа. Не слишком меня привлекает система флагов, поэтому просто банальное число, чем оно больше, тем ниже уровень доступа. Соответственно, 1 - ROOT доступ, 100 - почти ничего. 0 - привилегий нет.
- Иммунитет. Он будет зависеть от уровня доступа.

P.S. Есть желание сделать чат (С помощью банального PrintToChat). Различного рода звания, выводимые в чате и т.п. Ну, и ваши идеи вы можете реализовать сами, раз модульность :D
Сегодня сидел калякал, совсем чуть-чуть сделал, не проверял, может будет работать.
 

Вложения

  • dpInfo.sp
    3.6 КБ · Просмотры: 3

R1KO

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

Primo,
PHP:
Format(sQuery, sizeof(sQuery) - 1, "SELECT '%s' FROM 'dp_users'", GetNativeString(1, nName, sizeof(nName)));
Это не верно! Не будет работать.

PHP:
GetNativeString(1, nName, sizeof(nName));
Format(sQuery, sizeof(sQuery) - 1, "SELECT '%s' FROM 'dp_users'", nName);

nName Почему n если это строка? s.

FormatEx быстрее.

Да и вообще весь этот натив работать будет не верно.

PHP:
public Native_dpIsFieldExist(Handle:plugin, numParams)
{
	decl String:sQuery[256];
	decl String:nName[64];
	Format(sQuery, sizeof(sQuery) - 1, "SELECT '%s' FROM 'dp_users'", GetNativeString(1, nName, sizeof(nName)));
	SQL_TQuery(db, SQL_IsFieldSetCB, sQuery, 0);
	return cIsSet;
}

Отправил запрос
PHP:
SQL_TQuery(db, SQL_IsFieldSetCB, sQuery, 0);
и сразу вернул значение
PHP:
return cIsSet;
Хотя запрос еще не выполнился.
Нужно делать функцию. Спроси меня как.

PHP:
SQL_TQuery(db, SQL_SelectPlayerCallback, sQuery, 0);

0 можно не писать.

PHP:
public SQL_SelectPlayerCallback(Handle:owner, Handle:hndl, const String:error[], any:client)
{
	if(hndl == INVALID_HANDLE)
	{
		LogError("Ошибка подключения к базе данных (%s)", error);
	}
	else
	{
		LogError("Подключение установлено");
	}
}

Может так?
PHP:
LogMessage("Подключение установлено");

PHP:
"INSERT INTO dp_users (Steam, Nick) VALUES ('%s', '%N') ON DUPLICATE KEY UPDATE Steam = '%s', Nick = '%N"

Зачем Steam = '%s' если он уникален и по нему есть совпадение, смысл его перезаписывать?
 
Сверху Снизу