Заказать Плагин Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Гранаты липучки в CS:GO (breachcharge)
Гранаты липучки в CS:GO
polo79655 Дата: Понедельник, 01.04.2019, 16:05:46 | Сообщение # 1
Сообщений: 97
Репутация: -1 [ +/- ]
Привет всем smeh . С выходом опасной зоны, в кс го добавили гранаты липучки: breachcharge. Нажатием на E, эти гранаты можно деактивировать. Хотел бы узнать, есть какой-нибудь способ запретить их деактивировать? Или по крайней мере, запретить прикреплять их на игроков? Например, чтобы они сквозь модельки проходили. На alliedmods я не нашел вообще events связанных с этой гранатой slez . Думал, может отследить по тому, куда наводиться игрок при деактивации, но проблема в том, что не требуется навести прицел ровно на бомбочку, можно рядом, там по другому работает это. Может можно как-то отследить создание такой бомбочки и придать ей солидность, чтобы проходила сквозь игроков? Заранее спасибо за любую помощь gut
 
Sedge Дата: Вторник, 02.04.2019, 19:41:08 | Сообщение # 2
Сообщений: 14
Репутация: 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
Сообщений: 97
Репутация: -1 [ +/- ]
Цитата Sedge ()
Так можно узнать название этой гранаты

Благодарю klas . А есть какой-нибудь способ запретить ее деактивировать?
 
Sedge Дата: Среда, 03.04.2019, 12:24:51 | Сообщение # 4
Сообщений: 14
Репутация: 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
Сообщений: 97
Репутация: -1 [ +/- ]
Цитата Sedge ()
то блочить ему кнопку IN_USE

Я думал об этом, но проблема в том, что у меня постоянно используется эта кнопка на севрере. Вот если бы можно было как-нибудь определить, будет ли нажатие взаимодействовать с миной, и запрещать только тогда, было бы идеально prikol
 
Sedge Дата: Среда, 03.04.2019, 17:21:43 | Сообщение # 6
Сообщений: 14
Репутация: 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
Сообщений: 97
Репутация: -1 [ +/- ]
Цитата Sedge ()
Наверное так должно работать

1000000 благодарностей!!! klas klas klas klas klas klas klas klas klas smeh smeh . Это функция с определением прицела работает не очень хорошо, но общую суть я уловил. Огромное спасибо за отклик, пусть тебе тоже кто-нибудь поможет когда-нибудь) closed
 
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Гранаты липучки в CS:GO (breachcharge)
  • Страница 1 из 1
  • 1
Поиск: