Archived copy of war3source.com, the War3Source forum (2009–2020), rebuilt from the Internet Archive by wc3mods.net. This page was captured on 2012-10-25 (original capture). Forum · All archived topics · Wiki · Bug tracker · Blog

War3:Source

General Discussion => War3: Source - Multilingual => Topic started by: Arturius on February 23, 2012, 07:02:52 AM



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>
#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;
}
LEFTFOOT и RIGHTFOOT в коде нигде значений не заимствовали и откуда они взялись - осталось для меня загадкой. Но не это главное. Главное суть самой идеи. Я пробовал подобный код, только с выборкой клиентов из массива clients[64]. Что-то мудрёное и в результате не получилось как надо. Вот только мне не приходило в голову использовать в качестве клиента параметр &entity, как это сделано здесь. Можно попробовать поэкспериментировать. Если у кого-то что-то получится, прошу отписаться)


Title: Re: [Russian] Как убрать звуки шагов?
Post by: Divix on February 24, 2012, 01:40:32 AM
Я далеко не силён в HookEvent и их работа для меня тёмный лес. Покопался по форумам на подобную тему, но окончательного решения так и не нашёл. Везде какие-то косяки или недоработки выскакивают. Но в одном файле, мне так кажется, есть нечто очень напоминающее работоспособный вариант. Правда он для ТФ2, но возможно и подойдёт. Приведу только интересующую нас часть кода, убрав всё лишнее:
Code:
#include <sourcemod>
#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;
}
LEFTFOOT и RIGHTFOOT в коде нигде значений не заимствовали и откуда они взялись - осталось для меня загадкой. Но не это главное. Главное суть самой идеи. Я пробовал подобный код, только с выборкой клиентов из массива clients[64]. Что-то мудрёное и в результате не получилось как надо. Вот только мне не приходило в голову использовать в качестве клиента параметр &entity, как это сделано здесь. Можно попробовать поэкспериментировать. Если у кого-то что-то получится, прошу отписаться)

Я тоже похожие методы пробовал... Но к сожалению 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)