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 |
|
| |
|