Gå til innhold

dkProfiler - et simuleringsverktøy for Death Knights


Anbefalte innlegg

Som emnetittelen hinter sterkt mot, er dkProfiler navnet på prosjektet. dkProfiler er et verktøy for World of Warcraft-spillere, nærmere bestemt spillere av classen Death Knight. Målet med prosjektet er å lage en slags blanding av profilverktøy (Wowhead Profiler/chardev) og simuleringsverktøy (Kahorie's DK Simulator).

 

Bakgrunnen er at jeg lekte meg med Kahorie's DK Simulator, og irriterte meg litt over mangelen på en skikkelig profilbygger. Koden til KDKS ligger riktignok ute på google code, men den er skrevet i VB, så jeg følte ikke for å forsøke å bidra der. Jeg så heller muligheten til å ha et læringsprosjekt med konkrete målsetninger, der jeg får trent meg på en del ting jeg ønsker å lære meg bedre, blant annet bruken av et versjonskontrollsystem og en iterativ utviklingsprosess.

 

Det benytter seg av C#, WPF og .NET 4.0 Client Profile. Koden ligger ute under Mozilla Public License 1.1, og prosjektet har en egen side på google code:

 

https://code.google.com/p/dkprofiler/

 

Den planlagte funksjonaliteten er i grove trekk som følger:

 

  • Oppsett av profiler med gear, enchants, gems, talents og glyphs
  • Oversikt over stats og analyse av endringer når man forandrer på gear/talents
  • Simulering av relative verdier for stats og endringen i disse
  • Simulering av DPS/TPS i et tidssegment
  • Detaljert analyse av det simulerte segmentet (a la worldoflogs)

 

Jeg deler prosjektet opp i mindre deler, eller iterasjoner, og kommer til å bygge på med mer og mer funksjonalitet etter hvert som jeg kommer meg videre. Jeg liker at jeg på denne måten kan sette kortsiktige delmål og planlegge rundt dem, i stedet for å prøve å implementere hele funksjonsspekteret samtidig så det bare blir rot og tull.

 

Den første iterasjonen er nå ferdig, og var i bunn og grunn bare en oppstart av prosjektet, med oppsett av filer og fundamental struktur. Enkel åpning og lagring av profiler er implementert, med grunnlag for bakoverkompatibilitet. Jeg har også lært meg å bruke Mercurial til versjonskontroll nå, digg det!

 

Det var alt for nå. Planleggingen av neste iterasjon er i gang, og jeg kommer til å poste planen og utførelsen her så snart det er klart.

Lenke til kommentar
Videoannonse
Annonse

Jeg ville få inn et smooth og intuitivt brukergrensesnitt til denne iterasjonen, og etter flere forsøk med forskjellig posisjonering av elementer føler jeg at jeg har fått ting på plass der de stort sett vil fortsette å være i programmets levetid. Det er nå et panel med stats på venstresiden, mens innstillinger, valg av gear osv. vil ta opp resten av vinduet i en TabControl.

 

En annen ting som i utgangspunktet ikke var planlagt, var at jeg byttet ut hele systemet for lagring og lasting av profiler. I starten av prosjektet prøvde jeg meg med XML-serialisering, men programmet krasjet fordi dkProfiler.XmlSerializers.dll manglet. Jeg kunne ikke skjønne hvorfor, da alt av innstillinger og så videre så ut til å stemme, og google var heller ikke særlig behjelpelig der og da. Så jeg endte opp med å bruke en BinaryFormatter til serialiseringen, men det endte opp med å skape massevis av trøbbel med bakoverkompatibilitet som ikke virket som det skulle osv. Så jeg trålet google videre i dag, og kom over følgende løsning for å få generert .dll'en; åpne .csproj-filen med en XML-editor, og legge til:

 

<Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
  <Delete Files="$(TargetDir)$(TargetName).XmlSerializers.dll" ContinueOnError="true" />
  <SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)">
     <Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
  </SGen>
</Target>

Og vips, så genererte den dkProfiler.XmlSerializers.dll. God stemning og en langt mer strømlinjeformet løsning for lagring/lasting av profiler!

Lenke til kommentar

Ting har grunnstøtt en smule, da jeg har møtt på problemet med XmlSerializers igjen. Det merkelige er at det skjedde mellom to builds, der det eneste jeg gjorde var å endre på litt kode som ikke hadde noe med serialiseringen å gjøre. Jeg revertet til versjonen før endringen der det hadde fungert, men nope, fremdeles i dass.

 

Thrown: "Could not load file or assembly 'dkProfiler.XmlSerializers, Version=0.3.1.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)" (System.IO.FileLoadException)

 

Begynner å bli ganske oppgitt over Visual Studio nå, greit nok at jeg ikke er superdreven med det men likevel, det burde da ikke slutte å fungere helt på måfå? Som om det ikke var ille nok at jeg måtte inn og trikse med prosjektfilen for å i det hele tatt få nødvendig funksjonalitet, har VS tydeligvis rett og slett bare et innebygget ønske om å slå seg vrang. Bleh.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...