Solved Throws error

chaochaoq9

Member
Member
Jul 27, 2014
102
4
16
9/9/2014 12:06:46 AM] [Error] Error invoking function On_PlayerDisconnected in Wiper plugin.
[9/9/2014 12:06:46 AM] [Exception] [ Invoke | OnPlayerDisconnected | PlayerDisconnect | uLink_OnPlayerDisconnected | SendMessage | #=qnBC8vvHltGiAoAcoGPaaAA== | #=qopOwgPOjk_HOzOwWVDsWIQ== | #=qM25p$Ei_tgo0VZPqr5NeJg== | #=qci4yStPzci5I7GmSgdUS$h7q7_OtsQ88SJIjP7mpdMc= | #=qeIkoHPOCzeu3tstua7_0A8geT5UgdNXo5qFnWV7f5wk= | #=q9Ox7MeTma6fxAsTig99GV6twoS8KYKSkq98q3ldn1AU= | #=qdSwDnRo$f5EQslih94YkOg== | #=qqJfJJIU5OocEzCry9eP0ew== | #=qK4rBLHQlJi1c$9ISNO6Z6w== | LateUpdate | ] Jint.Native.JsException: Exception of type 'Jint.Native.JsException' was thrown.
at Jint.ExecutionVisitor.Visit (Jint.Expressions.MethodCall methodCall) [0x00000] in <filename unknown>:0
at Jint.Expressions.MethodCall.Accept (IStatementVisitor visitor) [0x00000] in <filename unknown>:0
at Jint.ExecutionVisitor.Visit (Jint.Expressions.MemberExpression expression) [0x00000] in <filename unknown>:0
at Jint.Expressions.MemberExpression.Accept (IStatementVisitor visitor) [0x00000] in <filename unknown>:0
at Jint.ExecutionVisitor.Visit (Jint.Expressions.BinaryExpression expression) [0x00000] in <filename unknown>:0
at Jint.Expressions.BinaryExpression.Accept (IStatementVisitor visitor) [0x00000] in <filename unknown>:0
at Jint.ExecutionVisitor.Visit (Jint.Expressions.CommaOperatorStatement statement) [0x00000] in <filename unknown>:0
at Jint.Expressions.CommaOperatorStatement.Accept (IStatementVisitor visitor) [0x00000] in <filename unknown>:0
at Jint.ExecutionVisitor.Visit (Jint.Expressions.ExpressionStatement statement) [0x00000] in <filename unknown>:0
at Jint.Expressions.ExpressionStatement.Accept (IStatementVisitor visitor) [0x00000] in <filename unknown>:0
at Jint.ExecutionVisitor.Visit (Jint.Expressions.BlockStatement statement) [0x00000] in <filename unknown>:0
at Jint.Expressions.BlockStatement.Accept (IStatementVisitor visitor) [0x00000] in <filename unknown>:0
at Jint.ExecutionVisitor.Visit (Jint.Expressions.BlockStatement statement) [0x00000] in <filename unknown>:0
at Jint.Expressions.BlockStatement.Accept (IStatementVisitor visitor) [0x00000] in <filename unknown>:0
at Jint.Native.JsFunction.Execute (IJintVisitor visitor, Jint.Native.JsDictionaryObject that, Jint.Native.JsInstance[] parameters) [0x00000] in <filename unknown>:0
at Jint.ExecutionVisitor.ExecuteFunction (Jint.Native.JsFunction function, Jint.Native.JsDictionaryObject that, Jint.Native.JsInstance[] parameters, System.Type[] genericParameters) [0x00000] in <filename unknown>:0
at Jint.ExecutionVisitor.ExecuteFunction (Jint.Native.JsFunction function, Jint.Native.JsDictionaryObject that, Jint.Native.JsInstance[] parameters) [0x00000] in <filename unknown>:0
at Jint.JintEngine.CallFunction (Jint.Native.JsFunction function, System.Object[] args) [0x00000] in <filename unknown>:0
at Jint.JintEngine.CallFunction (System.String name, System.Object[] args) [0x00000] in <filename unknown>:0
at Fougerite.Plugin.Invoke (System.String func, System.Object[] obj) [0x00000] in <filename unknown>:0
[9/9/2014 12:09:13 AM] [Error] Error invoking function pingCheckCallback in AntiCheat plugin.
[9/9/2014 12:09:13 AM] [Exception] [ Invoke | OnTimerCB | _timer_Elapsed | Callback | ] System.ArgumentNullException: null key
Parameter name: key
at System.Collections.Hashtable.Find (object) <0x0015a>
at System.Collections.Hashtable.Contains (object) <0x00013>
at System.Collections.Hashtable.ContainsKey (object) <0x0001c>
at Fougerite.Data.AddTableValue (string,object,object) <0x000b2>
at (wrapper dynamic-method) Jint.Marshal.ProxyHelper.jsWrapper (Jint.Native.IGlobal,Jint.Native.JsInstance,Jint.Native.JsInstance[]) <0x0013c>
at Jint.Native.NativeMethod.Execute (Jint.Expressions.IJintVisitor,Jint.Native.JsDictionaryObject,Jint.Native.JsInstance[]) <0x00039>
at Jint.ExecutionVisitor.ExecuteFunction (Jint.Native.JsFunction,Jint.Native.JsDictionaryObject,Jint.Native.JsInstance[],System.Type[]) <0x0033c>
at Jint.ExecutionVisitor.Visit (Jint.Expressions.MethodCall) <0x0042c>
at Jint.Expressions.MethodCall.Accept (Jint.Expressions.IStatementVisitor) <0x0001e>
at Jint.ExecutionVisitor.Visit (Jint.Expressions.MemberExpression) <0x0003e>
at Jint.Expressions.MemberExpression.Accept (Jint.Expressions.IStatementVisitor) <0x0001e>
at Jint.ExecutionVisitor.Visit (Jint.Expressions.ExpressionStatement) <0x0001c>
at Jint.Expressions.ExpressionStatement.Accept (Jint.Expressions.IStatementVisitor) <0x0001e>
at Jint.ExecutionVisitor.Visit (Jint.Expressions.BlockStatement) <0x000b4>
at Jint.Expressions.BlockStatement.Accept (Jint.Expressions.IStatementVisitor) <0x0001e>
at Jint.ExecutionVisitor.Visit (Jint.Expressions.IfStatement) <0x0007d>
at Jint.Expressions.IfStatement.Accept (Jint.Expressions.IStatementVisitor) <0x0001e>
at Jint.ExecutionVisitor.Visit (Jint.Expressions.BlockStatement) <0x000b4>
at Jint.Expressions.BlockStatement.Accept (Jint.Expressions.IStatementVisitor) <0x0001e>
at Jint.ExecutionVisitor.Visit (Jint.Expressions.ForEachInStatement) <0x00377>
at Jint.Expressions.ForEachInStatement.Accept (Jint.Expressions.IStatementVisitor) <0x0001e>
at Jint.ExecutionVisitor.Visit (Jint.Expressions.BlockStatement) <0x000b4>
at Jint.Expressions.BlockStatement.Accept (Jint.Expressions.IStatementVisitor) <0x0001e>
at Jint.ExecutionVisitor.Visit (Jint.Expressions.BlockStatement) <0x000b4>
at Jint.Expressions.BlockStatement.Accept (Jint.Expressions.IStatementVisitor) <0x0001e>
at Jint.Native.JsFunction.Execute (Jint.Expressions.IJintVisitor,Jint.Native.JsDictionaryObject,Jint.Native.JsInstance[]) <0x0008c>
at Jint.ExecutionVisitor.ExecuteFunction (Jint.Native.JsFunction,Jint.Native.JsDictionaryObject,Jint.Native.JsInstance[],System.Type[]) <0x0033c>
at Jint.ExecutionVisitor.ExecuteFunction (Jint.Native.JsFunction,Jint.Native.JsDictionaryObject,Jint.Native.JsInstance[]) <0x0001b>
at Jint.JintEngine.CallFunction (Jint.Native.JsFunction,object[]) <0x00066>
at Jint.JintEngine.CallFunction (string,object[]) <0x00094>
at Fougerite.Plugin.Invoke (string,object[]) <0x00034>
  1. Version Fougerite.1.0.3G
 

mikec

Master Of All That I Survey
Retired Staff
Trusted Member
Jul 12, 2014
296
152
28
Los Angeles, California, USA
I guess I can do something about this one. if key == null, return null. Don't even botther passing it to the Hashtable.
I'll make it LogDebug so plugin authors can tell if their script isn't working because of passing a null key.
 

mikec

Master Of All That I Survey
Retired Staff
Trusted Member
Jul 12, 2014
296
152
28
Los Angeles, California, USA
This is fixed in MC3.

If the key is null for DataStore.Add, I add the string "NullReference" as the key.
If the key is null for DataStore.Get I return null. I don't return the value of the "NullReference" string key. That could be some other plugin's null key value.

You can call DataStore.ToIni(filename) and the Datastore tables will be dumped as sections, with each tables keys and values as strings, to a ini format file at the top level of the public folder. If no filename is given, the default is DataStore.ini. You can use this dump to troubleshoot adding null key bugs, or just to discover what the tablenames are, and what's in 'em.
 

Snake

Moderator
Moderator
Jul 13, 2014
288
174
28
This is fixed in MC3.

If the key is null for DataStore.Add, I add the string "NullReference" as the key.
If the key is null for DataStore.Get I return null. I don't return the value of the "NullReference" string key. That could be some other plugin's null key value.

You can call DataStore.ToIni(filename) and the Datastore tables will be dumped as sections, with each tables keys and values as strings, to a ini format file at the top level of the public folder. If no filename is given, the default is DataStore.ini. You can use this dump to troubleshoot adding null key bugs, or just to discover what the tablenames are, and what's in 'em.
I use in my code :

if (ds.Get("Whatever", "whatever") == null){
pl.Message("whatever");
}

Is this wrong in 1.0.5 ?
 

mikec

Master Of All That I Survey
Retired Staff
Trusted Member
Jul 12, 2014
296
152
28
Los Angeles, California, USA
Is the key null in your code? No. So it's not wrong. I am pretty sure people won't deliberately pass null as the key. Null as a value is perfectly OK to store.

But ds.Get("table", someMethod()) would be "wrong" if someMethod() returned null. In that case, DataStore now substitutes the string "NullReference" and stores the value at that key. It's broken, you didn't mean to store it under that key, but your method() returned null. I wanted to give some sign that an error had occurred, without throwing an exception.

Since you stored the value under what you assumed was a valid key, it's not right for DS to fetch that value under the substitute key. So instead, if DS.Get() is passed a null key, it will return null. There is no value in the DS stored under a null key. Null keys are not allowed by the Hashtable class.