Гранаты липучки в 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 [ +/- ]
|
|
|
|
| |
|