feat: add experience info helper
This commit is contained in:
parent
8b27c84a9e
commit
f8b0b4b894
@ -15,6 +15,8 @@ using System.Reflection;
|
||||
using Client.Application.Views;
|
||||
using Client.Domain.ViewModels;
|
||||
using Client.Application.ViewModels;
|
||||
using Client.Domain.Helpers;
|
||||
using Client.Infrastructure.Helpers;
|
||||
|
||||
namespace Client
|
||||
{
|
||||
@ -57,7 +59,8 @@ namespace Client
|
||||
private void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
IConfiguration config = new ConfigurationBuilder()
|
||||
.AddJsonFile("config.json", optional: true, reloadOnChange: false)
|
||||
.AddJsonFile("config.json", optional: false, reloadOnChange: true)
|
||||
.AddJsonFile("experience.json", optional: false, reloadOnChange: true)
|
||||
.Build();
|
||||
|
||||
services
|
||||
@ -80,6 +83,7 @@ namespace Client
|
||||
config.GetValue<string>("ConnectionPipeName") ?? ""
|
||||
)
|
||||
)
|
||||
.AddSingleton(typeof(ExperienceHelperInterface), typeof(ConfigurationExperienceHelper))
|
||||
|
||||
.AddTransient(typeof(EntityFactoryInterface<Hero>), typeof(EntityFactory<Hero>))
|
||||
.AddTransient(typeof(EntityFactoryInterface<Drop>), typeof(EntityFactory<Drop>))
|
||||
|
@ -22,7 +22,7 @@ namespace Client.Application.ViewModels
|
||||
{
|
||||
get
|
||||
{
|
||||
//toto race string
|
||||
//todo race string
|
||||
return hero.Phenotype.Race.ToString();
|
||||
}
|
||||
}
|
||||
@ -34,13 +34,6 @@ namespace Client.Application.ViewModels
|
||||
return hero.Phenotype.Class.ToString();
|
||||
}
|
||||
}
|
||||
public string Level
|
||||
{
|
||||
get
|
||||
{
|
||||
return hero.ExperienceInfo.Level.ToString();
|
||||
}
|
||||
}
|
||||
public Vector3 Position
|
||||
{
|
||||
get
|
||||
@ -84,11 +77,7 @@ namespace Client.Application.ViewModels
|
||||
|
||||
private void ExperienceInfo_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == "Level")
|
||||
{
|
||||
OnPropertyChanged("Level");
|
||||
}
|
||||
if (e.PropertyName == "Exp" || e.PropertyName == "ExpToLevel")
|
||||
if (e.PropertyName == "Exp" || e.PropertyName == "ExpToLevel" || e.PropertyName == "Level")
|
||||
{
|
||||
OnPropertyChanged("Experience");
|
||||
}
|
||||
@ -102,23 +91,6 @@ namespace Client.Application.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
private void Hero_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == "Fullname")
|
||||
{
|
||||
OnPropertyChanged("Fullname");
|
||||
}
|
||||
if (e.PropertyName == "Phenotype")
|
||||
{
|
||||
OnPropertyChanged("Class");
|
||||
OnPropertyChanged("Race");
|
||||
}
|
||||
if (e.PropertyName == "ExperienceInfo")
|
||||
{
|
||||
OnPropertyChanged("Level");
|
||||
}
|
||||
}
|
||||
|
||||
private readonly Hero hero;
|
||||
}
|
||||
}
|
||||
|
@ -31,7 +31,7 @@
|
||||
<ListBox Grid.Row="1" Grid.Column="0" ItemsSource="{Binding ChatMessages, Mode=OneWay}">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock FontSize="12" Text="{Binding Path=Text, Mode=OneWay}" Foreground="{Binding Path=Color, Mode=OneWay}" />
|
||||
<TextBlock Text="{Binding Path=Text, Mode=OneWay}" Foreground="{Binding Path=Color, Mode=OneWay}" />
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
@ -97,26 +97,26 @@
|
||||
<StackPanel Grid.Row="1" Grid.Column="1" DataContext="{Binding Hero, Mode=OneWay}" Margin="4">
|
||||
<TextBlock FontSize="16" Text="{Binding Path=Fullname, Mode=OneWay}"></TextBlock>
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<TextBlock FontSize="12">
|
||||
<TextBlock>
|
||||
<TextBlock.Text>
|
||||
<MultiBinding StringFormat="{}{0}, {1} {2}lvl">
|
||||
<Binding Path="Race"/>
|
||||
<Binding Path="Class"/>
|
||||
<Binding Path="Level"/>
|
||||
<Binding Path="Experience.Level"/>
|
||||
</MultiBinding>
|
||||
</TextBlock.Text>
|
||||
</TextBlock>
|
||||
</StackPanel>
|
||||
<DockPanel>
|
||||
<StackPanel DockPanel.Dock="Left" Margin="0 0 5 0">
|
||||
<TextBlock FontSize="12" Padding="0 0 0 3">Position:</TextBlock>
|
||||
<TextBlock FontSize="12" Padding="0 0 0 3">Exp:</TextBlock>
|
||||
<TextBlock FontSize="12" Padding="0 0 0 3">Weight:</TextBlock>
|
||||
<TextBlock FontSize="12" Padding="0 0 0 3">Adena:</TextBlock>
|
||||
<TextBlock FontSize="12" Padding="0 0 0 3">Inv. slots:</TextBlock>
|
||||
<TextBlock Padding="0 0 0 3">Position:</TextBlock>
|
||||
<TextBlock Padding="0 0 0 3">Exp:</TextBlock>
|
||||
<TextBlock Padding="0 0 0 3">Weight:</TextBlock>
|
||||
<TextBlock Padding="0 0 0 3">Adena:</TextBlock>
|
||||
<TextBlock Padding="0 0 0 3">Inv. slots:</TextBlock>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock FontSize="12" Padding="0 0 0 3">
|
||||
<TextBlock Padding="0 0 0 3">
|
||||
<TextBlock.Text>
|
||||
<MultiBinding StringFormat="{}{0:F0}, {1:F0}, {2:F0}">
|
||||
<Binding Path="Position.X"/>
|
||||
@ -125,7 +125,7 @@
|
||||
</MultiBinding>
|
||||
</TextBlock.Text>
|
||||
</TextBlock>
|
||||
<TextBlock FontSize="12" Padding="0 0 0 3">
|
||||
<TextBlock Padding="0 0 0 3">
|
||||
<TextBlock.Text>
|
||||
<MultiBinding StringFormat="{}{0}/{1}">
|
||||
<Binding Path="Experience.Exp"/>
|
||||
@ -133,7 +133,7 @@
|
||||
</MultiBinding>
|
||||
</TextBlock.Text>
|
||||
</TextBlock>
|
||||
<TextBlock FontSize="12" Padding="0 0 0 3">
|
||||
<TextBlock Padding="0 0 0 3">
|
||||
<TextBlock.Text>
|
||||
<MultiBinding StringFormat="{}{0}/{1}">
|
||||
<Binding Path="Weight.Current"/>
|
||||
@ -141,8 +141,8 @@
|
||||
</MultiBinding>
|
||||
</TextBlock.Text>
|
||||
</TextBlock>
|
||||
<TextBlock FontSize="12" Text="{Binding Path=Money}" Padding="0 0 0 3"></TextBlock>
|
||||
<TextBlock FontSize="12" Padding="0 0 0 3">
|
||||
<TextBlock Text="{Binding Path=Money}" Padding="0 0 0 3"></TextBlock>
|
||||
<TextBlock Padding="0 0 0 3">
|
||||
<TextBlock.Text>
|
||||
<MultiBinding StringFormat="{}{0}/{1}">
|
||||
<Binding Path="Slots.Current"/>
|
||||
|
@ -12,6 +12,9 @@
|
||||
<Content Include="config.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="experience.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
13
Client/Domain/Helpers/ExperienceHelperInterface.cs
Normal file
13
Client/Domain/Helpers/ExperienceHelperInterface.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Client.Domain.Helpers
|
||||
{
|
||||
public interface ExperienceHelperInterface
|
||||
{
|
||||
ulong GetExperienceToLevel(uint level);
|
||||
}
|
||||
}
|
@ -30,7 +30,7 @@ namespace Client.Domain.Service
|
||||
if (entity != null && entities.ContainsKey(entity.Id))
|
||||
{
|
||||
factory.Update(entities[entity.Id], content);
|
||||
OnUpdate(entity);
|
||||
OnUpdate(entities[entity.Id]);
|
||||
}
|
||||
}
|
||||
else if (operation == MessageOperationEnum.Delete)
|
||||
|
@ -1,5 +1,6 @@
|
||||
using Client.Domain.Entities;
|
||||
using Client.Domain.Factories;
|
||||
using Client.Domain.Helpers;
|
||||
using Client.Domain.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -14,17 +15,29 @@ namespace Client.Domain.Service
|
||||
public override void OnCreate(Hero entity)
|
||||
{
|
||||
mainViewModel.CreateHero(entity);
|
||||
entity.ExperienceInfo.ExpToLevel = experienceHelper.GetExperienceToLevel(entity.ExperienceInfo.Level + 1);
|
||||
}
|
||||
|
||||
public override void OnUpdate(Hero entity)
|
||||
{
|
||||
if (entity.ExperienceInfo != null)
|
||||
{
|
||||
entity.ExperienceInfo.ExpToLevel = experienceHelper.GetExperienceToLevel(entity.ExperienceInfo.Level + 1);
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDelete(Hero entity)
|
||||
{
|
||||
mainViewModel.DeleteHero();
|
||||
}
|
||||
|
||||
public HeroHandler(EntityFactoryInterface<Hero> factory, MainViewModelInterface mainViewModel) : base(factory)
|
||||
public HeroHandler(EntityFactoryInterface<Hero> factory, MainViewModelInterface mainViewModel, ExperienceHelperInterface experienceHelper) : base(factory)
|
||||
{
|
||||
this.mainViewModel = mainViewModel;
|
||||
this.experienceHelper = experienceHelper;
|
||||
}
|
||||
|
||||
private readonly MainViewModelInterface mainViewModel;
|
||||
private readonly ExperienceHelperInterface experienceHelper;
|
||||
}
|
||||
}
|
||||
|
@ -7,16 +7,12 @@ namespace Client.Domain.ValueObjects
|
||||
private uint level;
|
||||
private uint exp;
|
||||
private uint sp;
|
||||
private ulong expToLevel;
|
||||
|
||||
public uint Level { get => level; set { if (value != level) { level = value; OnPropertyChanged("Level"); OnPropertyChanged("ExpToLevel"); } } }
|
||||
public uint Level { get => level; set { if (value != level) { level = value; OnPropertyChanged("Level"); } } }
|
||||
public uint Exp { get => exp; set { if (value != exp) { exp = value; OnPropertyChanged("Exp"); } } }
|
||||
public uint Sp { get => sp; set { if (value != sp) { sp = value; OnPropertyChanged("Sp"); } } }
|
||||
public uint ExpToLevel {
|
||||
get
|
||||
{
|
||||
return level * 200;
|
||||
}
|
||||
}
|
||||
public ulong ExpToLevel { get => expToLevel; set { if (value != expToLevel) { expToLevel = value; OnPropertyChanged("ExpToLevel"); } } }
|
||||
|
||||
public ExperienceInfo(uint level, uint exp, uint sp)
|
||||
{
|
||||
|
@ -0,0 +1,54 @@
|
||||
using Client.Domain.Helpers;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web;
|
||||
|
||||
namespace Client.Infrastructure.Helpers
|
||||
{
|
||||
public class ConfigurationExperienceHelper : ExperienceHelperInterface
|
||||
{
|
||||
public ulong GetExperienceToLevel(uint level)
|
||||
{
|
||||
if (experienceToLevel.Count == 0)
|
||||
{
|
||||
var items = configuration.GetSection("experience").Get<List<ExpInfo>>();
|
||||
if (items != null)
|
||||
{
|
||||
foreach (var item in items)
|
||||
{
|
||||
experienceToLevel[item.level] = item.toLevel;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (experienceToLevel.TryGetValue(level, out ulong result))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public ConfigurationExperienceHelper(IConfiguration configuration)
|
||||
{
|
||||
this.configuration = configuration;
|
||||
}
|
||||
|
||||
private readonly IConfiguration configuration;
|
||||
private Dictionary<uint, ulong> experienceToLevel = new Dictionary<uint, ulong>();
|
||||
|
||||
public class ExpInfo
|
||||
{
|
||||
public uint level { get; set; }
|
||||
public ulong toLevel { get; set; }
|
||||
|
||||
/* public ExpInfo(uint level, ulong toLevel)
|
||||
{
|
||||
this.level = level;
|
||||
this.toLevel = toLevel;
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
352
Client/experience.json
Normal file
352
Client/experience.json
Normal file
@ -0,0 +1,352 @@
|
||||
{
|
||||
"experience": [
|
||||
{
|
||||
"level": "1",
|
||||
"tolevel": "0"
|
||||
},
|
||||
{
|
||||
"level": "2",
|
||||
"tolevel": "68"
|
||||
},
|
||||
{
|
||||
"level": "3",
|
||||
"tolevel": "363"
|
||||
},
|
||||
{
|
||||
"level": "4",
|
||||
"tolevel": "1168"
|
||||
},
|
||||
{
|
||||
"level": "5",
|
||||
"tolevel": "2884"
|
||||
},
|
||||
{
|
||||
"level": "6",
|
||||
"tolevel": "6038"
|
||||
},
|
||||
{
|
||||
"level": "7",
|
||||
"tolevel": "11287"
|
||||
},
|
||||
{
|
||||
"level": "8",
|
||||
"tolevel": "19423"
|
||||
},
|
||||
{
|
||||
"level": "9",
|
||||
"tolevel": "31378"
|
||||
},
|
||||
{
|
||||
"level": "10",
|
||||
"tolevel": "48229"
|
||||
},
|
||||
{
|
||||
"level": "11",
|
||||
"tolevel": "71201"
|
||||
},
|
||||
{
|
||||
"level": "12",
|
||||
"tolevel": "101676"
|
||||
},
|
||||
{
|
||||
"level": "13",
|
||||
"tolevel": "141192"
|
||||
},
|
||||
{
|
||||
"level": "14",
|
||||
"tolevel": "191452"
|
||||
},
|
||||
{
|
||||
"level": "15",
|
||||
"tolevel": "254327"
|
||||
},
|
||||
{
|
||||
"level": "16",
|
||||
"tolevel": "331864"
|
||||
},
|
||||
{
|
||||
"level": "17",
|
||||
"tolevel": "426284"
|
||||
},
|
||||
{
|
||||
"level": "18",
|
||||
"tolevel": "539995"
|
||||
},
|
||||
{
|
||||
"level": "19",
|
||||
"tolevel": "675590"
|
||||
},
|
||||
{
|
||||
"level": "20",
|
||||
"tolevel": "835854"
|
||||
},
|
||||
{
|
||||
"level": "21",
|
||||
"tolevel": "1023775"
|
||||
},
|
||||
{
|
||||
"level": "22",
|
||||
"tolevel": "1242536"
|
||||
},
|
||||
{
|
||||
"level": "23",
|
||||
"tolevel": "1495531"
|
||||
},
|
||||
{
|
||||
"level": "24",
|
||||
"tolevel": "1786365"
|
||||
},
|
||||
{
|
||||
"level": "25",
|
||||
"tolevel": "2118860"
|
||||
},
|
||||
{
|
||||
"level": "26",
|
||||
"tolevel": "2497059"
|
||||
},
|
||||
{
|
||||
"level": "27",
|
||||
"tolevel": "2925229"
|
||||
},
|
||||
{
|
||||
"level": "28",
|
||||
"tolevel": "3407873"
|
||||
},
|
||||
{
|
||||
"level": "29",
|
||||
"tolevel": "3949727"
|
||||
},
|
||||
{
|
||||
"level": "30",
|
||||
"tolevel": "4555766"
|
||||
},
|
||||
{
|
||||
"level": "31",
|
||||
"tolevel": "5231213"
|
||||
},
|
||||
{
|
||||
"level": "32",
|
||||
"tolevel": "5981539"
|
||||
},
|
||||
{
|
||||
"level": "33",
|
||||
"tolevel": "6812472"
|
||||
},
|
||||
{
|
||||
"level": "34",
|
||||
"tolevel": "7729999"
|
||||
},
|
||||
{
|
||||
"level": "35",
|
||||
"tolevel": "8740372"
|
||||
},
|
||||
{
|
||||
"level": "36",
|
||||
"tolevel": "9850111"
|
||||
},
|
||||
{
|
||||
"level": "37",
|
||||
"tolevel": "11066012"
|
||||
},
|
||||
{
|
||||
"level": "38",
|
||||
"tolevel": "12395149"
|
||||
},
|
||||
{
|
||||
"level": "39",
|
||||
"tolevel": "13844879"
|
||||
},
|
||||
{
|
||||
"level": "40",
|
||||
"tolevel": "15422851"
|
||||
},
|
||||
{
|
||||
"level": "41",
|
||||
"tolevel": "17137002"
|
||||
},
|
||||
{
|
||||
"level": "42",
|
||||
"tolevel": "18995573"
|
||||
},
|
||||
{
|
||||
"level": "43",
|
||||
"tolevel": "21007103"
|
||||
},
|
||||
{
|
||||
"level": "44",
|
||||
"tolevel": "23180442"
|
||||
},
|
||||
{
|
||||
"level": "45",
|
||||
"tolevel": "25524751"
|
||||
},
|
||||
{
|
||||
"level": "46",
|
||||
"tolevel": "28049509"
|
||||
},
|
||||
{
|
||||
"level": "47",
|
||||
"tolevel": "30764519"
|
||||
},
|
||||
{
|
||||
"level": "48",
|
||||
"tolevel": "33679907"
|
||||
},
|
||||
{
|
||||
"level": "49",
|
||||
"tolevel": "36806133"
|
||||
},
|
||||
{
|
||||
"level": "50",
|
||||
"tolevel": "40153995"
|
||||
},
|
||||
{
|
||||
"level": "51",
|
||||
"tolevel": "45524865"
|
||||
},
|
||||
{
|
||||
"level": "52",
|
||||
"tolevel": "51262204"
|
||||
},
|
||||
{
|
||||
"level": "53",
|
||||
"tolevel": "57383682"
|
||||
},
|
||||
{
|
||||
"level": "54",
|
||||
"tolevel": "63907585"
|
||||
},
|
||||
{
|
||||
"level": "55",
|
||||
"tolevel": "70852742"
|
||||
},
|
||||
{
|
||||
"level": "56",
|
||||
"tolevel": "80700339"
|
||||
},
|
||||
{
|
||||
"level": "57",
|
||||
"tolevel": "91162131"
|
||||
},
|
||||
{
|
||||
"level": "58",
|
||||
"tolevel": "102265326"
|
||||
},
|
||||
{
|
||||
"level": "59",
|
||||
"tolevel": "114038008"
|
||||
},
|
||||
{
|
||||
"level": "60",
|
||||
"tolevel": "126509030"
|
||||
},
|
||||
{
|
||||
"level": "61",
|
||||
"tolevel": "146307211"
|
||||
},
|
||||
{
|
||||
"level": "62",
|
||||
"tolevel": "167243291"
|
||||
},
|
||||
{
|
||||
"level": "63",
|
||||
"tolevel": "189363788"
|
||||
},
|
||||
{
|
||||
"level": "64",
|
||||
"tolevel": "212716741"
|
||||
},
|
||||
{
|
||||
"level": "65",
|
||||
"tolevel": "237351413"
|
||||
},
|
||||
{
|
||||
"level": "66",
|
||||
"tolevel": "271973532"
|
||||
},
|
||||
{
|
||||
"level": "67",
|
||||
"tolevel": "308441375"
|
||||
},
|
||||
{
|
||||
"level": "68",
|
||||
"tolevel": "346825235"
|
||||
},
|
||||
{
|
||||
"level": "69",
|
||||
"tolevel": "387197529"
|
||||
},
|
||||
{
|
||||
"level": "70",
|
||||
"tolevel": "429632402"
|
||||
},
|
||||
{
|
||||
"level": "71",
|
||||
"tolevel": "474205751"
|
||||
},
|
||||
{
|
||||
"level": "72",
|
||||
"tolevel": "532692055"
|
||||
},
|
||||
{
|
||||
"level": "73",
|
||||
"tolevel": "606319094"
|
||||
},
|
||||
{
|
||||
"level": "74",
|
||||
"tolevel": "696376867"
|
||||
},
|
||||
{
|
||||
"level": "75",
|
||||
"tolevel": "804219972"
|
||||
},
|
||||
{
|
||||
"level": "76",
|
||||
"tolevel": "931275828"
|
||||
},
|
||||
{
|
||||
"level": "77",
|
||||
"tolevel": "1151275834"
|
||||
},
|
||||
{
|
||||
"level": "78",
|
||||
"tolevel": "1511275834"
|
||||
},
|
||||
{
|
||||
"level": "79",
|
||||
"tolevel": "2099275834"
|
||||
},
|
||||
{
|
||||
"level": "80",
|
||||
"tolevel": "4200000000"
|
||||
},
|
||||
{
|
||||
"level": "81",
|
||||
"tolevel": "6300000000"
|
||||
},
|
||||
{
|
||||
"level": "82",
|
||||
"tolevel": "8820000000"
|
||||
},
|
||||
{
|
||||
"level": "83",
|
||||
"tolevel": "11844000000"
|
||||
},
|
||||
{
|
||||
"level": "84",
|
||||
"tolevel": "15472800000"
|
||||
},
|
||||
{
|
||||
"level": "85",
|
||||
"tolevel": "19827360000"
|
||||
},
|
||||
{
|
||||
"level": "86",
|
||||
"tolevel": "25314105600"
|
||||
},
|
||||
{
|
||||
"level": "87",
|
||||
"tolevel": "32211728640"
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue
Block a user