- Messages
- 1,523
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: