| 
 
 
	
		
		
			| Гранаты липучки в CS:GO |  |  |  | 
| polo79655 | Дата: Понедельник, 01.04.2019, 16:05:46 | Сообщение # 1 |  |   
|  |  | Сообщений: 99 Репутация: -1 [ +/- ]
 |  | Привет всем  . С выходом опасной зоны, в кс го добавили гранаты липучки: breachcharge. Нажатием на E, эти гранаты можно деактивировать. Хотел бы узнать, есть какой-нибудь способ запретить их деактивировать? Или по крайней мере, запретить прикреплять их на игроков? Например, чтобы они сквозь модельки проходили. На alliedmods я не нашел вообще events связанных с этой гранатой  . Думал, может отследить по тому, куда наводиться игрок при деактивации, но проблема в том, что не требуется навести прицел ровно на бомбочку, можно рядом, там по другому работает это. Может можно как-то отследить создание такой бомбочки и придать ей солидность, чтобы проходила сквозь игроков? Заранее спасибо за любую помощь  |  |  |  |  |  | 
| Sedge | Дата: Вторник, 02.04.2019, 19:41:08 | Сообщение # 2 |  |   
|  |  | Сообщений: 16 Репутация: 9 [ +/- ]
 |  | Так можно узнать название этой гранаты
 Код public void OnEntityCreated(int Entity, const char[] Classname)
 {
 PrintToChatAll("%s", Classname);
 }
 
Ну и потом нужно будет изменить m_CollisionGroup скорее всего на 0
 
 Код public void OnEntityCreated(int Entity, const char[] Classname)
 {
 if(StrEqual(Classname, "projectile_arrow"))
 SetEntProp(Entity, Prop_Send, "m_CollisionGroup", 0);
 }
 
 |  |  |  |  |  | 
| polo79655 | Дата: Среда, 03.04.2019, 09:58:39 | Сообщение # 3 |  |   
|  |  | Сообщений: 99 Репутация: -1 [ +/- ]
 |  | Цитата Sedge (  )  Так можно узнать название этой гранатыБлагодарю
  . А есть какой-нибудь способ запретить ее деактивировать? |  |  |  |  |  | 
| Sedge | Дата: Среда, 03.04.2019, 12:24:51 | Сообщение # 4 |  |   
|  |  | Сообщений: 16 Репутация: 9 [ +/- ]
 |  | Тут я уже точно не знаю, в ксго не чего не делал, но можно сделать так, сначала узнать позицию этой гранаты а потом определить есть ли в определенном радиусе игрок и если есть то блочить ему кнопку IN_USE
 Код public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2])
 {
 if(IsPlayerAlive(client))
 {
 if ((buttons & IN_USE))
 {
 int ent = -1;
 while ((ent = FindEntityByClassname(ent, "npc_nmrih_shamblerzombie")) != INVALID_ENT_REFERENCE)
 {
 float target[3];
 float player[3];
 GetEntPropVector(ent, Prop_Send, "m_vecOrigin", target);
 GetEntPropVector(client, Prop_Send, "m_vecOrigin", player);
 if(GetVectorDistance(target, player) < 70.0)
 {
 buttons &= ~IN_USE;
 return Plugin_Handled;
 }
 }
 }
 }
 }
 
 |  |  |  |  |  | 
| polo79655 | Дата: Среда, 03.04.2019, 14:01:58 | Сообщение # 5 |  |   
|  |  | Сообщений: 99 Репутация: -1 [ +/- ]
 |  | Цитата Sedge (  )  то блочить ему кнопку IN_USEЯ думал об этом, но проблема в том, что у меня постоянно используется эта кнопка на севрере. Вот если бы можно было как-нибудь определить, будет ли нажатие взаимодействовать с миной, и запрещать только тогда, было бы идеально
  |  |  |  |  |  | 
| Sedge | Дата: Среда, 03.04.2019, 17:21:43 | Сообщение # 6 |  |   
|  |  | Сообщений: 16 Репутация: 9 [ +/- ]
 |  | Код public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2])
 {
 if(IsPlayerAlive(client))
 {
 if ((buttons & IN_USE))
 {
 int ent = -1;
 while ((ent = FindEntityByClassname(ent, "npc_nmrih_shamblerzombie")) != INVALID_ENT_REFERENCE)
 {
 float target[3];
 float player[3];
 GetEntPropVector(ent, Prop_Send, "m_vecOrigin", target);
 GetEntPropVector(client, Prop_Send, "m_vecOrigin", player);
 if(GetVectorDistance(target, player) < 70.0)
 {
 float vAngles[3];
 float vOrigin[3];
 float aOrigin[3];
 float EndPoint[3];
 float AnglesVec[3];
 float pos[3];
 GetClientEyePosition(client, vOrigin);
 GetClientAbsOrigin(client, aOrigin);
 GetClientEyeAngles(client, vAngles);
 GetAngleVectors(vAngles, AnglesVec, NULL_VECTOR, NULL_VECTOR);
 EndPoint[0] = vOrigin[0] + (AnglesVec[0]*50.0);
 EndPoint[1] = vOrigin[1] + (AnglesVec[1]*50.0);
 EndPoint[2] = vOrigin[2] + (AnglesVec[2]*50.0);
 Handle trace = TR_TraceRayFilterEx(vOrigin, EndPoint, MASK_SHOT, RayType_EndPoint, TraceEntityFilterPlayer, client);
 if(TR_DidHit(trace))
 {
 TR_GetEndPosition(pos, trace);
 }
 CloseHandle(trace);
 if ((GetVectorDistance(target, pos) < 30))
 {
 PrintToChatAll("%d", ent);
 buttons &= ~IN_USE;
 return Plugin_Handled;
 }
 }
 }
 }
 }
 }
 
 public bool TraceEntityFilterPlayer(int entity, int contentsMask, any data)
 {
 return data != entity;
 }
 
Наверное так должно работать, нужно только настроить под гранату
 |  |  |  |  |  | 
| polo79655 | Дата: Четверг, 04.04.2019, 12:54:56 | Сообщение # 7 |  |   
|  |  | Сообщений: 99 Репутация: -1 [ +/- ]
 |  |  |  |  |  |  |  
 |