|
Title: [Russian] Как убрать звуки шагов? Post by: Arturius on February 23, 2012, 07:02:52 AM Раз пошла такая пьянка... Тоже задам хитроумный вопрос ;D. Как можно назначить игроку двигаться шагом, как при нажатой клавише Shift? Нет, изменение скорости при помощи fSlow мне не подходит. Надо чтобы движение игрока определялось именно как "шагом".
Title: [Russian] Как убрать звуки шагов? Post by: Divix on February 23, 2012, 10:09:40 AM Раз пошла такая пьянка... Тоже задам хитроумный вопрос ;D. Как можно назначить игроку двигаться шагом, как при нажатой клавише Shift? Нет, изменение скорости при помощи fSlow мне не подходит. Надо чтобы движение игрока определялось именно как "шагом". Мне кажется в css это не возможно, т.к. при попытке установить MOVETYPE_STEP игрок просто стоит (естественно.. ведь я не моб), а при отправке команды клиенту он ее не воспринимает... Хотя возможно я делаю что-то не правильно. Разве что сделать простым способом: убрать звуки шагов и уменьшить скорость... Собственно напрашивается вопрос: а зачем это надо ? Title: [Russian] Как убрать звуки шагов? Post by: Arturius on February 23, 2012, 11:29:04 AM Разве что сделать простым способом: убрать звуки шагов и уменьшить скорость... А ты знаешь простой способ убрать звуки шагов? :) Только не надо предлагать то, что ты вставил в хэдкраба. Да, звуки шагов убираются, но только потому, что игрок считается не на земле, со всеми вытекающими отсюда последствиями. Изменять MOVETYPE тоже не вариант. Вот я и подумал, нет ли вариантов поиграться с кнопками, типа SetEntProp(client, Prop_Data, "m_nButtons", IN_WALK); ?Title: Re: [Russian] Как убрать звуки шагов? Post by: Divix on February 23, 2012, 12:37:33 PM Разве что сделать простым способом: убрать звуки шагов и уменьшить скорость... А ты знаешь простой способ убрать звуки шагов? :) Только не надо предлагать то, что ты вставил в хэдкраба. Да, звуки шагов убираются, но только потому, что игрок считается не на земле, со всеми вытекающими отсюда последствиями. Изменять MOVETYPE тоже не вариант. Вот я и подумал, нет ли вариантов поиграться с кнопками, типа SetEntProp(client, Prop_Data, "m_nButtons", IN_WALK); ?К сожалению нет. Испробовал несколько вариантов, но не получилось... Вот последний из них: Code: public OnPluginStart() { HookEvent("player_footstep", Event_FootStep, EventHookMode_Post); } public Action:Event_FootStep(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); for(new i=1; i <= 4; i++) { decl String:stepsound[128]; Format(stepsound, sizeof(stepsound), "player/footsteps/sand%i.wav", i); StopSound(client, SNDCHAN_AUTO, stepsound); } } Title: Re: [Russian] Как убрать звуки шагов? Post by: Arturius on February 23, 2012, 03:38:00 PM Я далеко не силён в HookEvent и их работа для меня тёмный лес. Покопался по форумам на подобную тему, но окончательного решения так и не нашёл. Везде какие-то косяки или недоработки выскакивают. Но в одном файле, мне так кажется, есть нечто очень напоминающее работоспособный вариант. Правда он для ТФ2, но возможно и подойдёт. Приведу только интересующую нас часть кода, убрав всё лишнее:
Code: #include <sourcemod> LEFTFOOT и RIGHTFOOT в коде нигде значений не заимствовали и откуда они взялись - осталось для меня загадкой. Но не это главное. Главное суть самой идеи. Я пробовал подобный код, только с выборкой клиентов из массива clients[64]. Что-то мудрёное и в результате не получилось как надо. Вот только мне не приходило в голову использовать в качестве клиента параметр &entity, как это сделано здесь. Можно попробовать поэкспериментировать. Если у кого-то что-то получится, прошу отписаться)#include <sdktools> public Plugin:myinfo = { name = "[TF2] Be a Cacodemon", author = "FlaminSarge [EDITED HEAVILY BY GAGE]", description = "Become the Cacodemon from Doom", version = PLUGIN_VERSION, url = "" } public OnPluginStart() { AddNormalSoundHook(HorsemannSH); } public Action:HorsemannSH(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags) { if (!IsValidClient(entity)) return Plugin_Continue; if (strncmp(sample, "player/footsteps/", 17, false) == 0) { if (StrContains(sample, "1.wav", false) != -1 || StrContains(sample, "3.wav", false) != -1) sample = LEFTFOOT; else if (StrContains(sample, "2.wav", false) != -1 || StrContains(sample, "4.wav", false) != -1) sample = RIGHTFOOT; EmitSoundToAll(sample, entity, _, 150); return Plugin_Changed; } return Plugin_Continue; } Title: Re: [Russian] Как убрать звуки шагов? Post by: Divix on February 24, 2012, 01:40:32 AM Я далеко не силён в HookEvent и их работа для меня тёмный лес. Покопался по форумам на подобную тему, но окончательного решения так и не нашёл. Везде какие-то косяки или недоработки выскакивают. Но в одном файле, мне так кажется, есть нечто очень напоминающее работоспособный вариант. Правда он для ТФ2, но возможно и подойдёт. Приведу только интересующую нас часть кода, убрав всё лишнее: Code: #include <sourcemod> LEFTFOOT и RIGHTFOOT в коде нигде значений не заимствовали и откуда они взялись - осталось для меня загадкой. Но не это главное. Главное суть самой идеи. Я пробовал подобный код, только с выборкой клиентов из массива clients[64]. Что-то мудрёное и в результате не получилось как надо. Вот только мне не приходило в голову использовать в качестве клиента параметр &entity, как это сделано здесь. Можно попробовать поэкспериментировать. Если у кого-то что-то получится, прошу отписаться)#include <sdktools> public Plugin:myinfo = { name = "[TF2] Be a Cacodemon", author = "FlaminSarge [EDITED HEAVILY BY GAGE]", description = "Become the Cacodemon from Doom", version = PLUGIN_VERSION, url = "" } public OnPluginStart() { AddNormalSoundHook(HorsemannSH); } public Action:HorsemannSH(clients[64], &numClients, String:sample[PLATFORM_MAX_PATH], &entity, &channel, &Float:volume, &level, &pitch, &flags) { if (!IsValidClient(entity)) return Plugin_Continue; if (strncmp(sample, "player/footsteps/", 17, false) == 0) { if (StrContains(sample, "1.wav", false) != -1 || StrContains(sample, "3.wav", false) != -1) sample = LEFTFOOT; else if (StrContains(sample, "2.wav", false) != -1 || StrContains(sample, "4.wav", false) != -1) sample = RIGHTFOOT; EmitSoundToAll(sample, entity, _, 150); return Plugin_Changed; } return Plugin_Continue; } Я тоже похожие методы пробовал... Но к сожалению return Plugin_Changed или return Plugin_Stop не чего не делают... PS Опять же повторюсь: я могу не правильно писать код... Title: Re: [Russian] Как убрать звуки шагов? Post by: Schmarotzer on March 18, 2012, 04:47:30 PM Насколько я помню это было сделано через оффсеты (http://wiki.alliedmods.net/CCSPlayer_Offset_List_(Counter-Strike:_Source)) в вкс. А после 35 апдейта ксс его убрали.
Но если все же хотите, то поковыряйте, я вот вижу : Code: 347 CCSPlayer::UpdateStepSound(surfacedata_t *,Vector const&,Vector const&) 348 CCSPlayer::PlayStepSound(Vector &,surfacedata_t *,float,bool) Title: Re: [Russian] Как убрать звуки шагов? Post by: Arturius on March 19, 2012, 02:28:42 AM Я совершенно не умею работать с оффсетами и даже приблизительно не имею понятия куда их втыкать ???.
Title: Re: [Russian] Как убрать звуки шагов? Post by: Divix on March 24, 2012, 01:36:12 PM А почему такой способ не работает ?
Code: new OffsTest; public OnPluginStart() { OffsTest=FindSendPropOffs("CFootstepControl", "m_flSimulationTime"); if(OffsTest == -1) LogError("Error: test offset"); HookEvent("player_footstep", Event_FootStep, EventHookMode_Pre); } public Action:Event_FootStep(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event, "userid")); SetEntDataFloat(client, OffsTest, 0.0, true); } PS Quote CFootstepControl: Sub-Class Table (1 Deep): DT_FootstepControl Sub-Class Table (2 Deep): DT_BaseEntity Sub-Class Table (3 Deep): DT_AnimTimeMustBeFirst -Member: m_flAnimTime (offset 40) -Member: AnimTimeMustBeFirst (offset 0) -Member: m_flSimulationTime (offset 44) -Member: m_vecOrigin (offset 796) -Member: m_nModelIndex (offset 30) Sub-Class Table (3 Deep): DT_CollisionProperty -Member: m_vecMins (offset 8) -Member: m_vecMaxs (offset 20) -Member: m_nSolidType (offset 41) -Member: m_usSolidFlags (offset 36) -Member: m_nSurroundType (offset 40) -Member: m_triggerBloat (offset 42) -Member: m_vecSpecifiedSurroundingMins (offset 44) -Member: m_vecSpecifiedSurroundingMaxs (offset 56) -Member: m_Collision (offset 236) -Member: m_nRenderFX (offset 28) -Member: m_nRenderMode (offset 29) -Member: m_fEffects (offset 108) -Member: m_clrRender (offset 32) -Member: m_iTeamNum (offset 520) -Member: m_CollisionGroup (offset 500) -Member: m_flElasticity (offset 640) -Member: m_flShadowCastDistance (offset 508) -Member: m_hOwnerEntity (offset 492) -Member: m_hEffectEntity (offset 496) -Member: moveparent (offset 224) -Member: m_iParentAttachment (offset 221) -Member: movetype (offset 222) -Member: movecollide (offset 223) -Member: m_angRotation (offset 808) -Member: m_iTextureFrameIndex (offset 684) Sub-Class Table (3 Deep): DT_PredictableId -Member: m_PredictableID (offset 52) -Member: m_bIsPlayerSimulated (offset 836) -Member: predictable_id (offset 0) -Member: m_bSimulatedEveryTick (offset 685) -Member: m_bAnimatedEveryTick (offset 686) -Member: m_bAlternateSorting (offset 687) -Member: baseclass (offset 0) -Member: m_source (offset 1068) -Member: m_destination (offset 1072) |