These are chat archives for ikkentim/SampSharp

3rd
May 2015
Tim Potze
@ikkentim
May 03 2015 13:59
I know right ! :sparkles:
Florian van Dillen
@fvandillen
May 03 2015 16:54
@ikkentim ik krijg trouwens wel wat errors als ik mijn createvehicle commando uitvoer sinds de update.
[03/05/2015 17:40:51] Exception thrownOnPlayerCommandText:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentNullException: Argument cannot be null.
Parameter name: type
  at System.Activator.CheckType (System.Type type) [0x00000] in <filename unknown>:0
En diezelfde error kom ik tegen in elke opeenvolgende callback voor die vehicle
[03/05/2015 17:40:51] Exception thrownOnVehicleStreamIn:
Tim Potze
@ikkentim
May 03 2015 16:55
Ik heb wat in het command system gewerkt. Waar staat je commando / welke parameters heeft het?
Florian van Dillen
@fvandillen
May 03 2015 16:55
[03/05/2015 17:40:51] Exception thrownOnUnoccupiedVehicleUpdate:
Allemaal op de parameter type
Tim Potze
@ikkentim
May 03 2015 16:56
heb je de volledige stack trace voor mij?
Florian van Dillen
@fvandillen
May 03 2015 16:56
namespace trinity.Commands { class Developer { [Command("createvehicle")] public static void createVehicle(Player player, int model, int col1, int col2) {
Ja, komt eraan
Tim Potze
@ikkentim
May 03 2015 16:56
okee
Het commando maakt heel simpel een voertuig, dus vandaar dat het begint bij OnPlayerCommandText
Tim Potze
@ikkentim
May 03 2015 16:57
Je heb een subclasse van GtaVehicle gemaakt?
Florian van Dillen
@fvandillen
May 03 2015 16:58
Ja, zelfde principe als je Rivershell voorbeeld
Tim Potze
@ikkentim
May 03 2015 16:58
Heb je deze nieuwe type ook geregisteerd? (Vehicle.Register<Vehicle>()) ?
Florian van Dillen
@fvandillen
May 03 2015 16:59
Ook goeiemorgen
Dat had ik wel even mogen checken :P
niet dus, die stond gecomment
Tim Potze
@ikkentim
May 03 2015 16:59
Hij zegt namelijk dat binner Pool<GtaVehicle>.Create() het type null is. Zou kunnen komen door niet registreren van het type
ja dus :)
Florian van Dillen
@fvandillen
May 03 2015 16:59
even testen
even kijken of hij nu ook het ORM stukje kan afhandelen
Florian van Dillen
@fvandillen
May 03 2015 17:04
Dit is kennelijk niet hoe ik het mag doen van hem
blob
This message was deleted
Tim Potze
@ikkentim
May 03 2015 17:05
Nope
Je moet ten minste een constructor met alleen 'id' hebben
die gebruikt de pool om instanties op basis van een id aan te maken.
Florian van Dillen
@fvandillen
May 03 2015 17:05
En hoe zorg ik er dan voor dat ik een reference naar mijn VehicleInfo klasse kan opnemen?
Tim Potze
@ikkentim
May 03 2015 17:06
maak nog een constructor met alleen 'id' als parameters
daarin kun je VehicleInfo setten met wat standaard waarden
Florian van Dillen
@fvandillen
May 03 2015 17:07
Probleem is dat ik die waarden haal uit het command
command is /createvehicle [model] [color1] [color2]
Tim Potze
@ikkentim
May 03 2015 17:11
Een voorbeeld van wat je kunt doen is in de standaard constructor VehicleInfo vullen met standaard waarden. Dan maak je daarnaast een static factory methode zoals:
public static Vehicle Create(VehicleModelType type,/* ...(meer dingen)..., */int color1, int color2)
{
    var vehicle = /*(roep de Create van GtaVehicle aan.)*/ as Vehicle;
    vehicle.VehicleInfo/*([ik zou het persoonlijk info noemen omdat je toch al in de Vehicle class zit])*/.Color1 = color1;
    vehicle.VehicleInfo.Color2 = color2;
    //etc
}
Florian van Dillen
@fvandillen
May 03 2015 17:12
en deze factory methode plaats ik in mijn eigen vehicle class?
Tim Potze
@ikkentim
May 03 2015 17:15
ja
dan roep je vanuit je command die factory aan
Florian van Dillen
@fvandillen
May 03 2015 17:25
Daarmee maakt hij ook automatisch een nieuw object aan en dergelijke?
(ik programmeer al heel lang maar veel van dit is nieuwe materie)
Tim Potze
@ikkentim
May 03 2015 17:26
var vehicle = /(roep de Create van GtaVehicle aan.)/ as Vehicle;
Florian van Dillen
@fvandillen
May 03 2015 17:26
Ah, dat zorgt ervoor, duidelijk
Tim Potze
@ikkentim
May 03 2015 17:26
jups.
var vehicle = Create(type, position, rotation, color1, color2, respawnDelay, addAlarm) as Vehicle;
Florian van Dillen
@fvandillen
May 03 2015 17:28
Ik ben er bijna, echter nog een vraag:
var Spawned = Vehicle.Create(model,new Vector(player.Position.X, player.Position.Y, player.Position.Z), player.Angle, col1, col2);

                // Put the player in the vehicle.
                player.PutInVehicle(Spawned);
whoops
Als ik hem zo aanmaak klaagt VS2013 niet, maar echter ziet hij hem wel als GtaVehicle waardoor ik dus niet bij mijn Info kan
Tim Potze
@ikkentim
May 03 2015 17:29
ips new Vector(.....) kun je ook gewoon player.Position doen
na .Create(...) moet je as Vehicle doen
as Vehicle
Florian van Dillen
@fvandillen
May 03 2015 17:30
Dat is echt pure magie
Dat is casten als ik het goed heb gelezen, toch?
Tim Potze
@ikkentim
May 03 2015 17:30
niet precies
Florian van Dillen
@fvandillen
May 03 2015 17:30
Gewoon bepaalde dingen als iets anders zien
Tim Potze
@ikkentim
May 03 2015 17:31
ja
GtaVehicle.Create returnt een GtaVehicle als typeGtaVehicle. Maar omdat Vehicle een subklasse er van is en je deze geregistreerd hebt returntGtaVehicle .Create een Vehicle als GtaVehicle. Om hem alsVehicle te zien moet je as Vehicle doen.
dem codeblocks:P
Florian van Dillen
@fvandillen
May 03 2015 17:33
Geniaal, haha
Florian van Dillen
@fvandillen
May 03 2015 17:39
Werkt perfect op nHibernate na, die klaagt dat het argument entity null is
Het command:
var Spawned = Vehicle.Create(model,player.Position, player.Angle, col1, col2) as Vehicle;

                // Put the player in the vehicle.
                player.PutInVehicle(Spawned);

                using (ISession database = Session.OpenSession())
                {
                    using (var tx = database.BeginTransaction())
                    {
                        database.Save(Spawned.Info);

                        tx.Commit();
                    }
                }
De vehicle class:
blob
Tim Potze
@ikkentim
May 03 2015 17:41
Welke regel/waar zegt nhibernate dat entity null is ? bij database.save?
Florian van Dillen
@fvandillen
May 03 2015 17:42
[03/05/2015 19:36:32] Exception thrownOnPlayerCommandText:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentNullException: attempt to create saveOrUpdate event with null entity
Parameter name: entity
  at NHibernate.Event.SaveOrUpdateEvent..ctor (System.Object entity, IEventSource source) [0x00000] in <filename unknown>:0 
  at NHibernate.Event.SaveOrUpdateEvent..ctor (System.String entityName, System.Object original, IEventSource source) [0x00000] in <filename unknown>:0 
  at NHibernate.Impl.SessionImpl.Save (System.Object obj) [0x00000] in <filename unknown>:0 
  at trinity.Commands.Developer.createVehicle (trinity.Player player, Int32 model, Int32 col1, Int32 col2) [0x00000] in <filename unknown>:0 
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
  --- End of inner exception stack trace ---
  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <filename unknown>:0 
  at SampSharp.GameMode.SAMP.Commands.DetectedCommand.RunCommand (SampSharp.GameMode.World.GtaPlayer player, System.String args) [0x00000] in <filename unknown>:0 
  at SampSharp.GameMode.Controllers.CommandController+<>c__DisplayClass8.<gameMode_PlayerCommandText>b__6 (System.Tuple`2 candidate) [0x00000] in <filename unknown>:0 
  at System.Linq.Enumerable.First[Tuple`2] (IEnumerable`1 source, System.Func`2 predicate, Fallback fallback) [0x00000] in <filename unknown>:0 
  at System.Linq.Enumerable.FirstOrDefault[Tuple`2] (IEnumerable`1 source, System.Func`2 predicate) [0x00000] in <filename unknown>:0 
  at SampSharp.GameMode.Controllers.CommandController.gameMode_PlayerCommandText (System.Object sender, SampSharp.GameMode.Events.CommandTextEventArgs e) [0x00000] in <filename unknown>:0 
  at (wrapper delegate-invoke) System.EventHandler`1<SampSharp.GameMode.Events.CommandTextEventArgs>:invoke_void_object_TEventArgs (object,SampSharp.GameMode.Events.CommandTextEventArgs)
  at SampSharp.GameMode.BaseMode.OnPlayerCommandText (SampSharp.GameMode.World.GtaPlayer player, SampSharp.GameMode.Events.CommandTextEventArgs e) [0x00000] in <filename unknown>:0 
  at SampSharp.GameMode.BaseMode.OnPlayerCommandText (Int32 playerid, System.String cmdtext) [0x00000] in <filename unknown>:0
Tim Potze
@ikkentim
May 03 2015 17:43
Kun je checken of Spawned.Info niet null is?
ik zie niet 1 2 3 welke entity hij het anders over heeft
Florian van Dillen
@fvandillen
May 03 2015 17:44
Kan, maar hij zou niet null mogen zijn toch als ik hem set in de factory methode?
Tim Potze
@ikkentim
May 03 2015 17:44
Idd..
tbh ik zie nergens in je vehicle class dat je Info set
Moet je in de constructor niet nog even Info = new VehicleInfo(); doen ?
Oh, en heb je het model van VehicleInfo geconfigureerd in nHibernate?
Florian van Dillen
@fvandillen
May 03 2015 17:46
Ja de mapping is helemaal geset, ik ga even kijken of new VehicleInfo werkt
Tim Potze
@ikkentim
May 03 2015 17:47
brb
Tim Potze
@ikkentim
May 03 2015 18:04
ben er weer
Florian van Dillen
@fvandillen
May 03 2015 18:05
yoyo
Alles werkt inmiddels
saving loading
Tim Potze
@ikkentim
May 03 2015 18:06
Mooi :) wat was het probleem?
Florian van Dillen
@fvandillen
May 03 2015 18:06
new VehicleInfo() stond op de verkeerde plek
Tim Potze
@ikkentim
May 03 2015 18:06
Ah :P
Florian van Dillen
@fvandillen
May 03 2015 18:06
en ik moet de properties van Info setten buiten de methode, anders zijn ze null
Tim Potze
@ikkentim
May 03 2015 18:07
?
Florian van Dillen
@fvandillen
May 03 2015 18:07
Ja dat is wel raar, maar hij schrijft alleen de goede waarden naar de database als ik dit doe:
```var Spawned = Vehicle.Create(model,player.Position, player.Angle, col1, col2) as Vehicle;
            Spawned.Info.Model = (int)model;
            Spawned.Info.x = player.Position.X;
            Spawned.Info.y = player.Position.Y;
            Spawned.Info.z = player.Position.Z;
            Spawned.Info.a = player.Angle;

            Spawned.Info.Color1 = col1;
            Spawned.Info.Color2 = col2;

            Spawned.Info.Fuel = 100.0f;

            // Put the player in the vehicle.
            player.PutInVehicle(Spawned);

            using (ISession database = Session.OpenSession())
            {
                using (var tx = database.BeginTransaction())
                {
                    database.Save(Spawned.Info);

                    tx.Commit();
                }
            }```
op het moment dat ik in Create() de Info waarden ga setten, schrijft hij null
Tim Potze
@ikkentim
May 03 2015 18:08
Doe je soms na Spawned = Vehicle.Create(...) not Spawn.Info = new VehicleInfo() oid?
Florian van Dillen
@fvandillen
May 03 2015 18:09
Nee dat gebeurt gewoon in de constructor van Vehicle
blob
Tim Potze
@ikkentim
May 03 2015 18:10
Dan is het inderdaad raar. Het zou dan gewoon moeten werken...
Florian van Dillen
@fvandillen
May 03 2015 18:10
Ja snap ik, dit werkt echter ook prima
Tim Potze
@ikkentim
May 03 2015 18:10
Ah ik snap het al
Als je doetVehicle.Create in je command roep je de static method aan GtaVehicle
Je moet of in Vehicle.Create een ander aantal parameters hebben (of van andere types) of je met het daar anders noemen
Als je vehicle eigenaren hebt moet je e.g. een Player owner parameter toe voegen aan je Vehicle.Create en dan zul je merken dat het wel werkt
Florian van Dillen
@fvandillen
May 03 2015 18:12
Ah op die manier
Echter mijn ownership is niet alleen gebasseerd op Players, maar ook op mijn eigen klasse Group
het kan dus of een player of een group zijn
Tim Potze
@ikkentim
May 03 2015 18:12
Dan doe je Group owner
zolang je maar andere parameters in je Create methode hebt als in die van GtaVehicle. Of je moet hem anders noemen, bijvoorbeeld Spawn.
Florian van Dillen
@fvandillen
May 03 2015 18:13
Oh dan noem ik hem gewoon anders
die ownership regel ik dan wel apart
Tim Potze
@ikkentim
May 03 2015 18:13
:+1: