Koen Ursem Software & Design
Portfolio english language Portfolio nederlandse taal

Programmas

Avanade 3D weergave van datacubes in Unity3D:

Voor mijn afstudeer stage van Stenden heb ik de mogelijkheid gevonden om iets met Unity en Datacubes te doen bij Avanade. Wanneer ik het project begon wist ik nog niks van datacubes en moest ik eerst onderzoek doen. Ik ben daarom gelijk vanaf de eerste dag vol aan het werk gegaan om de gestelde deadline te kunnen halen. En dat was geen makkelijke opgave! De eerste hindernis was om het daadwerkelijk een datacube op mijn eigen omgeving te kunnen draaien met bruikbare testdata. Hiervoor heb ik de MSSQL Anlyze service gebruikt van Microsoft.
Nu de datacube in de lucht was, werd het tijd om de datacube uit te kunnen lezen en de data in Unity te gebruiken. Hier was echter een probleem want de MSSQL service is alleen aanspreekbaar in het .net framework. En in de tijd dat ik aan dit project werkte ondersteunde Unity alleen nog Monodevelop als framework. En de code voor de analysis services was door microsoft zo goed ingedekt dat je eigen package maken niet echt mogelijk was. Dus bleef er nog 1 optie over, het maken van een tweede applicatie die zowel met Unity als met de MSSQL anlysis service kan praten. Hiermee werdt het toch mogelijk om queries vanuit Unity3D naar de tussen applicatie te sturen die vervolgens de data opvraagde uit de datacube en deze weer terug stuurde naar Unity3D. Met deze data kon ik vervolgens 3D weergaven in Unity3D. In het volgende filmpje is te zien hoe de tussenapplicatie werkt, en hoe de data vervolgens in Unity3D gebruikt wordt.

Mijn stage begeleider van Avanade was erg blij met mijn werk en de moeite die ik hiervoor heb moeten doen. Mijn uiteindelijke cijfer was dan ook een 7.9 hoewel mijn stage begeleider vondt dat ik minstens een 8 had moeten hebben omdat ik een goed verslag had en heel actief ben bezig geweest gedurende de hele stage. Helaas waren de leraren niet echt bekend met datacubes en was mij ook wel bekend dat er niet snel hoge cijfers gegeven worden. Daarnaast was ik zelf al erg blij met dit resultaat, en ik heb tijdens mijn stage heel veel kunnen leren!

Eigen bot programma voor Lineage2:

In mijn Lineage2 tijd was het nodig om heel veel te verzamelen in het spel om bij te blijven met de competitie. Omdat dit vaak veel tijd koste was het gewoon dat veel mensen programmas gebruiken die het spelen makkelijker maakte. Omdat een aantal servers deze bot programmas blokeerden en stiekem toegang verkochten aan sommige spelers voor deze programmas heb ik onderzocht of ik zelf iets kon maken.
De meeste programmas werkten door middel van een injectie in de code van Lineage2 wat servers konden detecteren. Daarom heb ik in mijn programma ervoor gekozen om zonder een injectie de directe geheugen adressen uit te lezen voor de waardes die ik nodig had (waardoor het nooit in de client te detecteren valt). Vervolgens verstuurde het programma dan gesimuleerde toetsaanslagen om de Lineage2 client aan te sturen. Het programma kon meerdere spel instanties uit elkaar houden en tegelijk aansturen, daarnaast kon je ook rustig in andere programmas tekst typen omdat de emulatie specifiek op de client werd gedaan.
De grootste uitdaging was het zoeken van de geheugen adressen in Lineage2. Omdat de code van de client beveiligd was moest ik gebruik maken van CheatEngine waarbij je de waardes in het geheugen op gaat zoeken, en vervolgens de verwijzingen naar dit gehuegenblok probeerd te achterhalen.
Ik krijg nog steeds af en toe vragen over mijn tool van oude clan leden, en het wordt dan ook nog steeds gebruikt. Screenshot van de soiiprofag botting tool.

Realtime schaap tegen wolf simulatie:

Voor mijn eind opdracht voor de eerste C# lessen op Stenden heb ik een kleine Realtime simulatie gemaakt. Wat bedoel ik met Realtime? Simpel gezecht in een normale simulatie worden de stappen voor iedere object in 1 loop tegelijk berekend, maar dat is niet wat we hier doen! Ieder object heeft zijn eigen thread en bepaald dus zelf wanneer er een actie gedaan wordt. Dit betekend wel dat de gedeelde gegevens tussen de threads beveiligd moeten worden door middel van een slot. Zodra een thread dus een gedeelde gegeven aanroept wordt deze op slot gezet en kan pas weer gebruikt worden als deze weer is vrij gegeven. Je kan duidelijk zien dat het realtime is aan de wijze waarop de wolven en schapen nooit echt op de milliseconde tegelijk zullen lopen.

Ik heb eerst een balans gemaakt waar de schapen en wolven alleblij vaak bleven overleven in de simulatie. Maar om eerlijk te zijn is dat niet realistisch als het veld beperkt is, daarom heb ik de simulatie aangepast aan de veld grote waardoor de wolven nu de schapen in veld afslachten en vervolgens verhongeren wat veel realistischer is.


K.U - Koen Ursem
© 2015 - 2018