Контакты Поиск

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

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » AddNormalSoundHook (Не понимаю почему не работает)
AddNormalSoundHook
gamer-killer Дата: Понедельник, 18.02.2013, 18:41:20 | Сообщение # 1
Сообщений: 12
Репутация: 0 [ +/- ]
Здравствуйте!
Все знаете наверно плагин Метания ножей? djn http://forums.alliedmods.net/showthread.php?p=1160952
В общем я его педелал для зомби, добавил пару функций, все замечательно все работает, но при 40 человек, бывает и при меньшем народе, но зачемено при 30-40 человек на сервере, в общем в начале карты, ножи наносят поврждение противнику, но на этой же карте погут просто отскакивать от жертв, я понял что в плагине хукается звук повреждения ударом гранаты о игрока, но дописав туда функцию вывода в чат я понял что в момент когда ножи отскакивать начинают, звук вообще не хукается даже не заходит в нее, причем перезагрузка плагина не помогает, смена карты тоже, но потом каким-то чудом все становится в норме, даже может быть на этой же карте...
Мне приходит только одно ,что просто нет звука который ловится, т.е. повреждение не наносится...

Добавлено (14.02.2013, 17:05:27)
---------------------------------------------
Код
public Action:SoundsHook(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags) {

     
   if (GetConVarBool(g_CVarEnable) && StrEqual(sample, "weapons/flashbang/grenade_hit1.wav", false)) {
    new index = FindValueInArray(g_hLethalArray, entity);
      
    if (index != -1)   
    {
       
     volume = 0.2;
     RemoveFromArray(g_hLethalArray, index); // delethalize on first bounce
     new attacker = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity");
     static Float:fKnifePos[3], Float:fAttPos[3], Float:fVicEyePos[3];
     GetEntPropVector(entity, Prop_Data, "m_vecOrigin", fKnifePos);
     new victim = GetTraceHullEntityIndex(fKnifePos, attacker);
       
       
     if(IsClientIndex(victim) && IsClientInGame(attacker) && IsClientIndex(attacker) && IsClientInGame(victim) && ZR_IsClientZombie(victim))
     {
      g_iKnives[attacker]++;
     }
     if (IsClientIndex(victim) && IsClientInGame(attacker) && IsClientIndex(attacker) && IsClientInGame(victim) && ZR_IsClientHuman(victim)) {
      BlockEntity(entity);
      RemoveEdict(entity);
      if (GetConVarBool(g_CVarFF) || (GetClientTeam(victim) != GetClientTeam(attacker))) {
       GetClientAbsOrigin(attacker, fAttPos);
       GetClientEyePosition(victim, fVicEyePos);
       EmitAmbientSound(KNIFEHIT_SOUND, fKnifePos, victim, SNDLEVEL_NORMAL, _, 0.8);
       // HURT!
       if (IsValidEntity(g_iPointHurt) && ZR_IsClientHuman(victim))   
       {
        if(otravlen[victim] == false)
        {
         new bool:headShot = (FloatAbs(fKnifePos[2] - fVicEyePos[2]) < 4.7) ? true : false;
         // last chance to stop this thing were doing
         if (g_bDev) {
          new value;
          Call_StartForward(g_hKHForward);
          Call_PushCell(victim);
          Call_PushCell(attacker);
          Call_PushCell(headShot);
          Call_Finish(_:value);
          if (value != 0)
           return Plugin_Changed;
         }
         DispatchKeyValue(victim, "targetname", "hurt");
         DispatchKeyValue(g_iPointHurt, "Damage", (headShot) ? g_sHSDamage : g_sDamage);
         DispatchKeyValue(g_iPointHurt, "classname", (headShot) ? "weapon_tknifehs" : "weapon_tknife");
         TeleportEntity(g_iPointHurt, fAttPos, NULL_VECTOR, NULL_VECTOR);
         AcceptEntityInput(g_iPointHurt, "Hurt", attacker);
         DispatchKeyValue(g_iPointHurt, "classname", "point_hurt");
         DispatchKeyValue(victim, "targetname", "nohurt");
         //SetVariantString("BloodImpact");
         AcceptEntityInput(entity, "DispatchEffect");
           
         otravlen[victim] = true;
           
           
         if(IsValidEntity(victim))
         {
          CreateDrug(victim);
         }
           
           
           
         new String:nameattacker[64];
         GetClientName(attacker, nameattacker, sizeof(nameattacker));
           
         new String:namevictim[64];
         GetClientName(victim, namevictim, sizeof(namevictim));
      
         Client_PrintToChat(attacker, true, "{R}****{G} %s !", namevictim);
         Client_PrintToChatAll(true, "{OG}*****{R}*****{G}%s {OG}*****", namevictim);
           
        }else
        {
         Client_PrintToChat(attacker, true, "{R}****");
         g_iKnives[attacker]++;
         Client_PrintToChat(attacker, true, "{R}*****");
        }
       }
      }
     }
     else // didn't hit a player, kill itself in a few seconds
     {
      AcceptEntityInput(entity, "Kill");//"FireUser1");
     }
     return Plugin_Changed;
    }
    else if (GetEntProp(entity, Prop_Send, "m_nModelIndex") == g_iKnifeMI)   
    {
     volume = 0.2;
     return Plugin_Changed;
    }
   }
   return Plugin_Continue;
}

Добавлено (18.02.2013, 18:41:20)
---------------------------------------------
идей нет я так понял, просто я не могу понять почему не срабатывает функция....



Сообщение отредактировал gamer-killer - Четверг, 14.02.2013, 17:09:08
 
ThRunningMan Дата: Пятница, 23.08.2013, 11:56:44 | Сообщение # 2
Сообщений: 140
Репутация: 12 [ +/- ]
Не стал создавать новую тему, в общем Объясните как работает эта функция что такое clients[64] и что такое numClients и так далее и не надо ссылатсья на АПИ или ддавать описание отуда, я все эт очитал, там написано Аля КЭП clients[64] эт оказывается массив клиентов и т.д. этого не надо конкретнее если можно, я смотрел плагины, но многие либо используют упрощенный вариант типо появился звук и блокируем его, но я хочу сделать чтобы допустим контры не слышали звуков от Т и наоборот, одновременно...
 
_wS_ Дата: Четверг, 29.08.2013, 15:31:44 | Сообщение # 3
Код
public Action:NormalSHook(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags)

clients[64] - тут индексы игроков, которые должны услышать звук
numClients - сколько игроков

Код
decl client;
for (new i = 0; i < numClients; i++)
{
     client = clients[i];
}

sample - путь к звуку
entity - от какой entity будет исходить звук
channel - канал

Код
// Sound channels

SNDCHAN_REPLACE = -1,  /**< Unknown */
SNDCHAN_AUTO = 0,  /**< Auto */
SNDCHAN_WEAPON = 1,  /**< Weapons */
SNDCHAN_VOICE = 2,  /**< Voices */
SNDCHAN_ITEM = 3,  /**< Items */
SNDCHAN_BODY = 4,  /**< Player? */
SNDCHAN_STREAM = 5,  /**< "Stream channel from the static or dynamic area" */
SNDCHAN_STATIC = 6,  /**< "Stream channel from the static area" */
SNDCHAN_VOICE_BASE = 7,    /**< "Channel for network voice data" */
SNDCHAN_USER_BASE = 135    /**< Anything >= this is allocated to game code */

volume - громкость (от 0.0 до 1.0)
level - уровень звука

Код
// Различные предопределенные уровни звука в децибелах

SNDLEVEL_NONE = 0,  /**< None */
SNDLEVEL_RUSTLE = 20,  /**< Rustling leaves */
SNDLEVEL_WHISPER = 25,  /**< Whispering */
SNDLEVEL_LIBRARY = 30,  /**< In a library */
SNDLEVEL_FRIDGE = 45,  /**< Refridgerator */
SNDLEVEL_HOME = 50,  /**< Average home (3.9 attn) */
SNDLEVEL_CONVO = 60,  /**< Normal conversation (2.0 attn) */
SNDLEVEL_DRYER = 60,  /**< Clothes dryer */
SNDLEVEL_DISHWASHER = 65,    /**< Dishwasher/washing machine (1.5 attn) */
SNDLEVEL_CAR = 70,  /**< Car or vacuum cleaner (1.0 attn) */
SNDLEVEL_NORMAL = 75,  /**< Normal sound level */
SNDLEVEL_TRAFFIC = 75,  /**< Busy traffic (0.8 attn) */
SNDLEVEL_MINIBIKE = 80,  /**< Mini-bike, alarm clock (0.7 attn) */
SNDLEVEL_SCREAMING = 90,    /**< Screaming child (0.5 attn) */
SNDLEVEL_TRAIN = 100,  /**< Subway train, pneumatic drill (0.4 attn) */
SNDLEVEL_HELICOPTER = 105,    /**< Helicopter */
SNDLEVEL_SNOWMOBILE = 110,    /**< Snow mobile */
SNDLEVEL_AIRCRAFT = 120,    /**< Auto horn, aircraft */
SNDLEVEL_RAIDSIREN = 130,    /**< Air raid siren */
SNDLEVEL_GUNFIRE = 140,  /**< Gunshot, jet engine (0.27 attn) */
SNDLEVEL_ROCKET = 180,  /**< Rocket launching (0.2 attn) */

В общем, на этой странице нужно смотреть. И AddNormalSoundHook перехватывает не все звуки (как и AddAmbientSoundHook) - чтобы понять какие, тестировать надо.
 
ThRunningMan Дата: Четверг, 29.08.2013, 17:07:47 | Сообщение # 4
Сообщений: 140
Репутация: 12 [ +/- ]
_wS_, Спасибо за разъяснение я как раз и занимался тестированием, да этот хук не ловит выстрелы, пришлось разобрать плагин другого автора чтобы понять как она заглушает их, в общем сам бы я не додумался, там для меня лично был странный код)) ну ладно я ег опристроил как мне надо и работает...
Плагин кстати Toggle_weapon_sound по моему так, он отключает выстрелы и звуки связанные с оружием для того игрока который захочет отключить их для себя...


Сообщение отредактировал ThRunningMan - Четверг, 29.08.2013, 17:09:02
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » AddNormalSoundHook (Не понимаю почему не работает)
  • Страница 1 из 1
  • 1
Поиск: