Удаление всех гранат игрока

V-Rico

SM Скриптер (Skype: v-rico.95)
Сообщения
22
Реакции
9
Всем привет, столкнулся с маленькой проблемкой. Такой код:
C-подобный:
new weaponIndex;
				while ((weaponIndex = GetPlayerWeaponSlot(client, 3)) != -1)
				{
					RemovePlayerItem(client, weaponIndex);
					RemoveEdict(weaponIndex);
				}

Изначально у меня 4 гранаты: НЕ, дым, 2 слепы. После исполнения данного кода у меня остается одна флешка, а я хочу убрать все. Как реализовать?
 

V-Rico

SM Скриптер (Skype: v-rico.95)
Сообщения
22
Реакции
9
AlmazON, эм... flashlight отвечает за возможность использования фонарика, а не флешки :D
 

Scarface_slv

Участник
Сообщения
222
Реакции
47
Странно вроде код написан правильно, попробуй вместо != -1 так > 0 хотя разницы вроде нет)
или после кода снова проверь есть ли еще какая ни будь граната
weaponIndex = GetPlayerWeaponSlot(client, 3)
if(weaponIndex != -1) RemovePlayerItem(client, weaponIndex);
 

Impulse72

Участник
Сообщения
244
Реакции
163
PHP:
/* Plugin Template generated by Pawn Studio */

#include <sourcemod>
#pragma tabsize 0
#include <sdktools>

public Plugin:myinfo = 
{
	name = "DelGrenades",
	author = "Impulse",
	description = "",
	version = "1.0",
	url = ""
}

public OnPluginStart()
{
	RegConsoleCmd("del", Command_Test);
}

public Action:Command_Test(client, args)
{
	RemoveGrenades(client, "weapon_hegrenade");
	RemoveGrenades(client, "weapon_smokegrenade");
	RemoveGrenades(client, "weapon_flashbang");
}

RemoveGrenades(client, String:weapon[])
{
	new index = -1; new owner;
	while ((index = FindEntityByClassname(index, weapon)) >= 0)
	{
		if (!IsValidEdict(index))
			return;
		owner = GetEntPropEnt(index, Prop_Send, "m_hOwner");
		if (owner == client)
		AcceptEntityInput(index, "Kill");
	}
	return;
}

Удаляет все гранаты с персонажа при написании !del, ну это так... Примерчик.

Странно вроде код написан правильно, попробуй вместо != -1 так > 0 хотя разницы вроде нет)
-1 отсутствует, 0 и более присутствует. Вообще пустяк :)
 

V-Rico

SM Скриптер (Skype: v-rico.95)
Сообщения
22
Реакции
9
Impulse72, в твоём коде есть ошибка: будет постоянный цикл. Знаешь почему? У тебя же FindEntityByClassname вернет самое маленькое значение индекса гранаты, которая есть на сервере. Если она не будет принадлежать игроку, то у тебя будет этот цикл раз за разом повторяться. Жизненный пример: на сервере 2 флешки. Флешка с индексом 200 (лежит на полу) и флешка с индексом 201 (у игрока). Давай прокрутим цикл:
1)
C-подобный:
while ((index = FindEntityByClassname(index, weapon)) >= 0)
Вернёт 200.

2)
C-подобный:
if (!IsValidEdict(index)) 
return; 
owner = GetEntPropEnt(index, Prop_Send, "m_hOwner");
Думаю, что owner = 0 (или 1, или -1).

3)
C-подобный:
if (owner == client)
Проверка не пройдена, возвращаемся к while.

4)
C-подобный:
while ((index = FindEntityByClassname(index, weapon)) >= 0)
Снова вернёт 200.

5) см. выше
 

FrozDark

Участник
Сообщения
1,769
Реакции
2,050
Impulse72, в твоём коде есть ошибка: будет постоянный цикл. Знаешь почему? У тебя же FindEntityByClassname вернет самое маленькое значение индекса гранаты, которая есть на сервере. Если она не будет принадлежать игроку, то у тебя будет этот цикл раз за разом повторяться. Жизненный пример: на сервере 2 флешки. Флешка с индексом 200 (лежит на полу) и флешка с индексом 201 (у игрока). Давай прокрутим цикл:
1)
C-подобный:
while ((index = FindEntityByClassname(index, weapon)) >= 0)
Вернёт 200.

2)
C-подобный:
if (!IsValidEdict(index)) 
return; 
owner = GetEntPropEnt(index, Prop_Send, "m_hOwner");
Думаю, что owner = 0 (или 1, или -1).

3)
C-подобный:
if (owner == client)
Проверка не пройдена, возвращаемся к while.

4)
C-подобный:
while ((index = FindEntityByClassname(index, weapon)) >= 0)
Снова вернёт 200.

5) см. выше

(index = FindEntityByClassname(index, weapon))

значение index приравниваем 200, FindEntityByClassname(index) - если тут index == 200, то функция начнет с индекса 200, т.е. те что выше 200, и вернется флэшка под номером 201!!
 

V-Rico

SM Скриптер (Skype: v-rico.95)
Сообщения
22
Реакции
9
FrozDark, да, мой косяк. Невнимательно прочитал описание функции.
 

Impulse72

Участник
Сообщения
244
Реакции
163
ilga80, Оффтоп
 
Сверху Снизу