@@ -89,6 +89,12 @@ static NetworkHandler()
89
89
handlers . Add ( 184 , new HandleTeamRespawnEventGetPlayers ( ) ) ;
90
90
handlers . Add ( 185 , new HandleTeamRespawnEventSetPlayers ( ) ) ;
91
91
handlers . Add ( 190 , new HandleDo ( ) ) ;
92
+ handlers . Add ( 191 , new HandleGiveItem ( ) ) ;
93
+ handlers . Add ( 192 , new HandleInventory ( ) ) ;
94
+ handlers . Add ( 193 , new HandleCurrentItem ( ) ) ;
95
+ handlers . Add ( 194 , new HandleUserGroup ( ) ) ;
96
+ handlers . Add ( 195 , new HandleDoApi ( ) ) ;
97
+ handlers . Add ( 196 , new HandleMapApi ( ) ) ;
92
98
}
93
99
public static void handleJsmod2 ( int id , String json , Dictionary < string , string > mapper , TcpClient client )
94
100
{
@@ -167,6 +173,13 @@ public static object getTypeValue(string val)
167
173
return i1 ;
168
174
}
169
175
176
+ long l1 ;
177
+ b = long . TryParse ( val , out l1 ) ;
178
+ if ( b )
179
+ {
180
+ return l1 ;
181
+ }
182
+
170
183
bool b1 ;
171
184
b = bool . TryParse ( val , out b1 ) ;
172
185
if ( b )
@@ -211,6 +224,309 @@ public static bool isCommon(Type returnType)
211
224
}
212
225
}
213
226
227
+ /**
228
+ * 为map定制的Handler
229
+ */
230
+ //value 值 字段 1
231
+ //args 参数 方法
232
+ //method 方法名
233
+ //field 字段名 1
234
+ //write 读 字段_赋值 方法_无返回值 1 0
235
+ //read 写 字段_得到值 方法_有返回值 1 0
236
+ //apiId 说明设置的值是api对象 1
237
+
238
+ //字段的输出包分为以下的要素
239
+ // field 字段
240
+ // value 值
241
+ //read write 可读性
242
+ // apiId 是否是api类型
243
+ //方法的输出包分为以下的要素
244
+ //method 方法
245
+ //args 参数
246
+ //write 可读性
247
+
248
+ public class HandleMapApi : Handler
249
+ {
250
+ public JsonSetting [ ] handle ( object api , Dictionary < string , string > mapper )
251
+ {
252
+ Map map = ProxyHandler . handler . Server . Map ;
253
+ Type type = typeof ( Map ) ;
254
+ if ( mapper . ContainsKey ( "field" ) ) //field
255
+ {
256
+ PropertyInfo info = type . GetProperty ( "field" ) ;
257
+ if ( info != null )
258
+ {
259
+ //两种情况 读写
260
+ if ( mapper . ContainsKey ( "write" ) ) //write
261
+ {
262
+ //赋值
263
+ if ( mapper . ContainsKey ( "apiId" ) )
264
+ {
265
+ info . SetValue ( map , ProxyHandler . handler . apiMapping [ mapper [ "value" ] ] ) ;
266
+ }
267
+ else
268
+ {
269
+ if ( Utils . isCommon ( info . PropertyType ) )
270
+ {
271
+ info . SetValue ( map , Utils . getTypeValue ( mapper [ "value" ] ) ) ;
272
+ }
273
+
274
+ }
275
+
276
+ return null ;
277
+ }
278
+ else //no write
279
+ {
280
+ //获得值
281
+ //字段只支持普通值
282
+ object obj = info . GetValue ( map ) ;
283
+ if ( Utils . isCommon ( obj . GetType ( ) ) )
284
+ {
285
+ return Utils . getOne ( mapper [ "id" ] , obj , null ) ;
286
+ }
287
+ else
288
+ {
289
+ return Utils . getOne ( mapper [ "id" ] , obj , null ) ;
290
+ }
291
+ }
292
+ }
293
+ }
294
+
295
+ if ( mapper . ContainsKey ( "method" ) ) //method
296
+ {
297
+ object obj ; //return
298
+ MethodInfo info = type . GetMethod ( mapper [ "method" ] ) ;
299
+ if ( info != null )
300
+ {
301
+ if ( mapper . ContainsKey ( "args" ) )
302
+ {
303
+ string [ ] args = Lib . getArray ( mapper [ "args" ] ) ;
304
+ object [ ] objs = new object [ args . Length ] ;
305
+ ParameterInfo [ ] infos = info . GetParameters ( ) ;
306
+ for ( int i = 0 ; i < args . Length ; i ++ )
307
+ {
308
+ if ( Utils . isCommon ( infos [ i ] . ParameterType ) )
309
+ {
310
+ objs [ i ] = Utils . getTypeValue ( args [ i ] ) ; //针对于普通值
311
+ }
312
+ else
313
+ {
314
+ if ( infos [ i ] . ParameterType == typeof ( Player ) )
315
+ {
316
+ objs [ i ] = ProxyHandler . handler . apiMapping [ args [ i ] ] ; //转换玩家对象
317
+ }
318
+ else
319
+ {
320
+ objs [ i ] = JsonConvert . SerializeObject ( args [ i ] ) ; //针对枚举值
321
+ }
322
+ }
323
+ }
324
+
325
+ obj = info . Invoke ( map , objs ) ;
326
+ }
327
+ else
328
+ {
329
+ obj = info . Invoke ( map , null ) ;
330
+ }
331
+ //有返回值
332
+ if ( mapper . ContainsKey ( "read" ) )
333
+ {
334
+ if ( Utils . isCommon ( info . ReturnType ) )
335
+ {
336
+ return Utils . getOne ( mapper [ "id" ] , obj , null ) ; //普通值
337
+ }
338
+
339
+ if ( obj is Enum )
340
+ {
341
+ return Utils . getOne ( mapper [ "id" ] , obj , null ) ; //枚举值
342
+ }
343
+ //特殊对象
344
+ if ( obj is List < Item > )
345
+ {
346
+ List < Item > items = ( List < Item > ) obj ;
347
+ JsonSetting [ ] settings = new JsonSetting [ items . Count ] ;
348
+ for ( int i = 0 ; i < settings . Length ; i ++ )
349
+ {
350
+ settings [ i ] = new JsonSetting ( Lib . getInt ( mapper [ "id" ] ) , null , new IdMapping ( ) . appendId ( Lib . ID , items [ i ] ) ) ;
351
+ }
352
+ return settings ;
353
+ }
354
+
355
+ if ( obj is List < Vector > || obj is Dictionary < Vector , Vector > )
356
+ {
357
+
358
+ return Utils . getOne ( mapper [ "id" ] , obj , null ) ;
359
+ }
360
+
361
+ if ( obj is List < Door > )
362
+ {
363
+ List < Door > doors = ( List < Door > ) obj ;
364
+ JsonSetting [ ] settings = new JsonSetting [ doors . Count ] ;
365
+ for ( int i = 0 ; i < settings . Length ; i ++ )
366
+ {
367
+ settings [ i ] = new JsonSetting ( Lib . getInt ( mapper [ "id" ] ) , null , new IdMapping ( )
368
+ . appendId ( Lib . ID , doors [ i ] )
369
+ ) ;
370
+ }
371
+
372
+ return settings ;
373
+ }
374
+
375
+ if ( obj is List < PocketDimensionExit > )
376
+ {
377
+ List < PocketDimensionExit > exits = ( List < PocketDimensionExit > ) obj ;
378
+ JsonSetting [ ] settings = new JsonSetting [ exits . Count ] ;
379
+ for ( int i = 0 ; i < settings . Length ; i ++ )
380
+ {
381
+ settings [ i ] = new JsonSetting ( Lib . getInt ( mapper [ "id" ] ) , null , new IdMapping ( )
382
+ . appendId ( Lib . ID , exits [ i ] )
383
+ ) ;
384
+ }
385
+ return settings ;
386
+ }
387
+
388
+ if ( obj is Generator [ ] )
389
+ {
390
+ Generator [ ] generators = ( Generator [ ] ) obj ;
391
+ JsonSetting [ ] settings = new JsonSetting [ generators . Length ] ;
392
+ for ( int i = 0 ; i < settings . Length ; i ++ )
393
+ {
394
+ settings [ i ] = new JsonSetting ( Lib . getInt ( mapper [ "id" ] ) , null , new IdMapping ( )
395
+ . appendId ( Lib . ID , generators [ i ] )
396
+ ) ;
397
+ }
398
+
399
+ return settings ;
400
+ }
401
+
402
+ if ( obj is Room [ ] )
403
+ {
404
+ Room [ ] rooms = ( Room [ ] ) obj ;
405
+ JsonSetting [ ] settings = new JsonSetting [ rooms . Length ] ;
406
+ for ( int i = 0 ; i < settings . Length ; i ++ )
407
+ {
408
+ settings [ i ] = new JsonSetting ( Lib . getInt ( mapper [ "id" ] ) , null , new IdMapping ( )
409
+ . appendId ( Lib . ID , rooms [ i ] )
410
+ ) ;
411
+ }
412
+
413
+ return settings ;
414
+ }
415
+
416
+ if ( obj is List < Elevator > )
417
+ {
418
+ List < Elevator > elevators = ( List < Elevator > ) obj ;
419
+ JsonSetting [ ] settings = new JsonSetting [ elevators . Count ] ;
420
+ for ( int i = 0 ; i < settings . Length ; i ++ )
421
+ {
422
+ settings [ i ] = new JsonSetting ( Lib . getInt ( mapper [ "id" ] ) , null , new IdMapping ( ) ) ;
423
+ }
424
+
425
+ return settings ;
426
+ }
427
+
428
+ if ( obj is List < TeslaGate > )
429
+ {
430
+ List < TeslaGate > teslaGates = ( List < TeslaGate > ) obj ;
431
+ JsonSetting [ ] settings = new JsonSetting [ teslaGates . Count ] ;
432
+ for ( int i = 0 ; i < settings . Length ; i ++ )
433
+ {
434
+ settings [ i ] = new JsonSetting ( Lib . getInt ( mapper [ "id" ] ) , null , new IdMapping ( ) . appendId ( Lib . ID , teslaGates [ i ] ) ) ;
435
+ }
436
+
437
+ return settings ;
438
+ }
439
+
440
+ if ( obj is Player )
441
+ {
442
+ //last
443
+ Player player = ( Player ) obj ;
444
+ return Utils . getOne ( mapper [ "id" ] , null , new IdMapping ( )
445
+ . appendId ( Lib . ID , Guid . NewGuid ( ) . ToString ( ) , player ) . appendId ( Lib . PLAYER_SCPDATA_ID , Guid . NewGuid ( ) . ToString ( ) , player . Scp079Data ) . appendId ( Lib . PLAYER_TEAM_ROLE_ID , Guid . NewGuid ( ) . ToString ( ) , player . TeamRole )
446
+ ) ;
447
+ }
448
+
449
+
450
+ }
451
+ else
452
+ {
453
+ //无返回值
454
+ return null ;
455
+ }
456
+ }
457
+
458
+
459
+ }
460
+
461
+ return null ;
462
+ }
463
+ }
464
+
465
+
466
+ /**
467
+ * 调用方法,可以设置api的值
468
+ */
469
+ public class HandleDoApi : Handler
470
+ {
471
+ public JsonSetting [ ] handle ( object api , Dictionary < string , string > mapper )
472
+ {
473
+ object value = ProxyHandler . handler . apiMapping [ mapper [ "value" ] ] ;
474
+ api . GetType ( ) . GetMethod ( mapper [ "method" ] ) . Invoke ( api , new [ ] { value } ) ;
475
+ return null ;
476
+ }
477
+ }
478
+
479
+ public class HandleUserGroup : Handler
480
+ {
481
+ public JsonSetting [ ] handle ( object api , Dictionary < string , string > mapper )
482
+ {
483
+ Player player = api as Player ;
484
+ TeamRole t = player . TeamRole ;
485
+ return Utils . getOne ( mapper [ "id" ] , null , new IdMapping ( ) . appendId ( Lib . ID , t ) ) ;
486
+ }
487
+ }
488
+
489
+ public class HandleGiveItem : Handler
490
+ {
491
+ public JsonSetting [ ] handle ( object api , Dictionary < string , string > mapper )
492
+ {
493
+ Player player = api as Player ;
494
+ ItemType type = ( ItemType ) JsonConvert . DeserializeObject ( mapper [ "item" ] , typeof ( ItemType ) ) ;
495
+ Item item = player . GiveItem ( type ) ;
496
+ return Utils . getOne ( mapper [ "id" ] , null , new IdMapping ( ) . appendId ( Lib . ID , item ) ) ;
497
+ }
498
+ }
499
+
500
+ public class HandleInventory : Handler
501
+ {
502
+ public JsonSetting [ ] handle ( object api , Dictionary < string , string > mapper )
503
+ {
504
+ Player player = api as Player ;
505
+ List < Item > items = player . GetInventory ( ) ;
506
+ JsonSetting [ ] settings = new JsonSetting [ items . Count ] ;
507
+ for ( int i = 0 ; i < items . Count ; i ++ )
508
+ {
509
+ settings [ i ] = new JsonSetting ( Lib . getInt ( mapper [ "id" ] ) , null , new IdMapping ( ) . appendId ( Lib . ID , items [ i ] ) ) ;
510
+ }
511
+
512
+ return settings ;
513
+ }
514
+ }
515
+
516
+ public class HandleCurrentItem : Handler
517
+ {
518
+ public JsonSetting [ ] handle ( object api , Dictionary < string , string > mapper )
519
+ {
520
+ Player player = api as Player ;
521
+ Item item = player . GetCurrentItem ( ) ;
522
+ return Utils . getOne ( mapper [ "id" ] , null , new IdMapping ( ) . appendId ( Lib . ID , item ) ) ;
523
+ }
524
+ }
525
+
526
+ /**
527
+ * 支持设置枚举值,基本类型值
528
+ * 返回基本类型和枚举值
529
+ */
214
530
public class HandleDo : Handler
215
531
{
216
532
public JsonSetting [ ] handle ( object api , Dictionary < string , string > mapper )
@@ -326,6 +642,10 @@ public JsonSetting[] handle(object api, Dictionary<string, string> mapper)
326
642
}
327
643
}
328
644
645
+ /**
646
+ * 可以设置基本类型值,api类型值,枚举值
647
+ * 可以返回基本类型值,枚举值
648
+ */
329
649
public class SimpleHandler : Handler
330
650
{
331
651
public JsonSetting [ ] handle ( object api , Dictionary < string , string > mapper )
0 commit comments