Перейти к содержимому


Фотография

Пропадает модель дефибриллятора при использовании SDKHooks_DropWeapon


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 17 Ноябрь 2020 - 13:38

В общем, всю проблему, по сути, описал в заголовке. Уточню только то, что сам дефиб остается. То есть звук падения, и он даже лежит на земле, его можно бить прикладом и он будет отлетать и его можно будет подобрать, если понять где он примерно лежит. Но интересно то, что именно при использовании SDKHooks_DropWeapon исчезает модель дефибрилятора. Кто-нибудь с этим сталкивался, знает как это поправить?



#2 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 18 Ноябрь 2020 - 14:31

Сам разобрался как это исправить, если кому-то интересно, то алгоритм следующий:

1. Существующий дефибриллятор в слоте необходимо удалить через RemovePlayerItem(client, GetPlayerWeaponSlot(client, 3));

 

2. Принудительно меняем активный слот с помощью SetEntPropEnt(client, Prop_Send, "m_hActiveWeapon", GetPlayerWeaponSlot(client, 1)); (В данном случае принудительно делаем активный слот с пистолетами / рукопашкой).

 

3. Создаем новый дефибриллятор и экипируем им игрока:

int createdItem = CreateEntityByName("weapon_defibrillator");
float clientOrigin[3];
GetClientAbsOrigin(client, clientOrigin);
TeleportEntity(createdItem, clientOrigin, NULL_VECTOR, NULL_VECTOR);
DispatchSpawn(createdItem);
EquipPlayerWeapon(client, createdItem);

P.S. Менять активный слот на слот с дефибриллятором ни в коем случае не надо, иначе все бесполезно. Проблема и заключается в том, что как только вы берете в руки дефибриллятор, то он становится невидимым после выбрасывания, поэтому и приходится его удалять и создавать новый, а уже потом этот новый дефибриллятор выбрасывать не взяв его в руки.

 

4. Выбрасываем дефибриллятор - SDKHooks_DropWeapon(client, GetPlayerWeaponSlot(client, 3), NULL_VECTOR, NULL_VECTOR);



#3 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 18 Ноябрь 2020 - 15:03

 

Сам разобрался как это исправить, если кому-то интересно, то алгоритм следующий:

1. Существующий дефибриллятор в слоте необходимо удалить через RemovePlayerItem(client, GetPlayerWeaponSlot(client, 3));

 

2. Принудительно меняем активный слот с помощью SetEntPropEnt(client, Prop_Send, "m_hActiveWeapon", GetPlayerWeaponSlot(client, 1)); (В данном случае принудительно делаем активный слот с пистолетами / рукопашкой).

 

3. Создаем новый дефибриллятор и экипируем им игрока:

int createdItem = CreateEntityByName("weapon_defibrillator");
float clientOrigin[3];
GetClientAbsOrigin(client, clientOrigin);
TeleportEntity(createdItem, clientOrigin, NULL_VECTOR, NULL_VECTOR);
DispatchSpawn(createdItem);
EquipPlayerWeapon(client, createdItem);

P.S. Менять активный слот на слот с дефибриллятором ни в коем случае не надо, иначе все бесполезно. Проблема и заключается в том, что как только вы берете в руки дефибриллятор, то он становится невидимым после выбрасывания, поэтому и приходится его удалять и создавать новый, а уже потом этот новый дефибриллятор выбрасывать не взяв его в руки.

 

4. Выбрасываем дефибриллятор - SDKHooks_DropWeapon(client, GetPlayerWeaponSlot(client, 3), NULL_VECTOR, NULL_VECTOR);

 



Пример из !drop плагина

void DropWeapon(int client, int weapon)
{
	int ammo = GetPlayerReserveAmmo(client, weapon);
	SDKHooks_DropWeapon(client, weapon);
	SetPlayerReserveAmmo(client, weapon, 0);
	SetEntProp(weapon, Prop_Send, "m_iExtraPrimaryAmmo", ammo);
	
	char classname[32];
	GetEntityClassname(weapon, classname, sizeof(classname));
	if (StrEqual(classname, "weapon_defibrillator"))
	{
		int modelindex = GetEntProp(weapon, Prop_Data, "m_nModelIndex");
		SetEntProp(weapon, Prop_Send, "m_iWorldModelIndex", modelindex);
	}
}



#4 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 18 Ноябрь 2020 - 15:22

 


Пример из !drop плагина

void DropWeapon(int client, int weapon)
{
	int ammo = GetPlayerReserveAmmo(client, weapon);
	SDKHooks_DropWeapon(client, weapon);
	SetPlayerReserveAmmo(client, weapon, 0);
	SetEntProp(weapon, Prop_Send, "m_iExtraPrimaryAmmo", ammo);
	
	char classname[32];
	GetEntityClassname(weapon, classname, sizeof(classname));
	if (StrEqual(classname, "weapon_defibrillator"))
	{
		int modelindex = GetEntProp(weapon, Prop_Data, "m_nModelIndex");
		SetEntProp(weapon, Prop_Send, "m_iWorldModelIndex", modelindex);
	}
}

Спасибо, тоже интересно!




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных