[Пример] Хитмаркер

Reg1oxeN

Administrator
Staff member
Messages
1,517
JavaScript:
//заполняем информацию о нашем плагине
PluginInfo.name = "HitMarker";
PluginInfo.version = "1.0";
PluginInfo.author = "clientmod";

//создаем интерфейс гуи
var noesis_obj = api.noesis.Create();

//создаем представление для интерфейса и назначаем обратный вызов при его создании как InitViewModel
var viewmodel_obj = noesis_obj.CreateViewModel(InitViewModel);

//функция для создания интерфейса
function InitViewModel(obj)
{
    //создаем событие попадания по игроку
    obj.CreateEvent("PlayerHitsNormal");
    obj.CreateEvent("PlayerHitsHeadshot");
}

//и в конце загружаем наш документ для интерфейса
noesis_obj.LoadDocument("EnemyHitIndicator.xaml");

//функция попадания по игроку
function PlayerHitCallback(hit_obj)
{
    //воспроизводим звук при необходимости
    api.sounds.Play("sound_hit.mp3", 0.5);
  
    //определяем попадание в голову
    if (hit_obj.Headshot)
    {
        //отправляем событие PlayerHitsHeadshot в гуи для показа изображения
        viewmodel_obj.PlayerHitsHeadshot();
    }
    else
    {
        //отправляем событие PlayerHitsNormal в гуи для показа изображения
        viewmodel_obj.PlayerHitsNormal();
    }
}

//добавляем в обратный вызов попадания нашу функцию PlayerHitCallback
api.callback.Add("PlayerHit", PlayerHitCallback);
XML:
<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    xmlns:noesis="clr-namespace:NoesisGUIExtensions;assembly=NoesisGUI.GUI.Extensions"
  >
  <Grid.Resources>
    <!--создаем анимацию для обычного попадания-->
    <Storyboard x:Key="Normal_HitIndicatorStoryboard">
      <ObjectAnimationUsingKeyFrames  Storyboard.TargetProperty="Visibility" Storyboard.TargetName="Normal_HitIndicator">
        <!--резко показываем индикатор-->
        <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/>
        <!--и через 300мс сразу скрываем его-->
        <DiscreteObjectKeyFrame KeyTime="0:0:0.3" Value="{x:Static Visibility.Hidden}"/>
      </ObjectAnimationUsingKeyFrames>
    </Storyboard>

    <!--создаем анимацию для хедшот попадания-->
    <Storyboard x:Key="Headshot_HitIndicatorStoryboard">
      <ObjectAnimationUsingKeyFrames  Storyboard.TargetProperty="Visibility" Storyboard.TargetName="Headshot_HitIndicator">
        <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/>
        <DiscreteObjectKeyFrame KeyTime="0:0:0.3" Value="{x:Static Visibility.Hidden}"/>
      </ObjectAnimationUsingKeyFrames>
    </Storyboard>
  </Grid.Resources>

  <b:Interaction.Triggers>
    <!--создаем обработчик события PlayerHitsNormal из плагина-->
    <noesis:DataEventTrigger Source="{Binding plugin}" EventName="PlayerHitsNormal">
      <!--запускаем анимацию по событию-->
      <b:ControlStoryboardAction Storyboard="{StaticResource Normal_HitIndicatorStoryboard}"/>
    </noesis:DataEventTrigger>

    <!--создаем обработчик события PlayerHitsNormal из плагина-->
    <noesis:DataEventTrigger Source="{Binding plugin}" EventName="PlayerHitsHeadshot">
      <!--запускаем анимацию по событию-->
      <b:ControlStoryboardAction Storyboard="{StaticResource Headshot_HitIndicatorStoryboard}"/>
    </noesis:DataEventTrigger>
  </b:Interaction.Triggers>

  <Grid>
    <!--создаем изображение по центру экрана, фиксированного размера с попиксельным выравниванием, но заренее скрытым, чтобы показывать его через анимации-->
    <!--о том, где должны находиться текстуры - читайте в Noesis API, вкладка текстуры-->
    <Image x:Name="Normal_HitIndicator" Source="hitmarker.png" UseLayoutRounding="True" RenderTransformOrigin="0.5, 0.5" Margin="0, 0, 0, 0" HorizontalAlignment="Center" VerticalAlignment="Center" Width="25" Height="25" Visibility="Hidden"/>
    <Image x:Name="Headshot_HitIndicator" Source="hitmarker_headshot.png" UseLayoutRounding="True" RenderTransformOrigin="0.5, 0.5" Margin="0, 0, 0, 0" HorizontalAlignment="Center" VerticalAlignment="Center" Width="25" Height="25" Visibility="Hidden"/>
  </Grid>
</UserControl>

Как пользоваться плагинами - читайте тут: [ССЫЛКА]
Файл интерфейса располагается в папка noesis.
Папки плагина и интерфейса должны находится в cstrike или аналогичном расположении в подпапке cstrike_custom.
Куда звуки кидать надеюсь не надо объяснять?
 
Last edited:
Back
Top