@@ -124,7 +124,7 @@ void actItem(Entity* my)
124
124
net_packet->len = 9 ;
125
125
sendPacketSafe (net_sock, -1 , net_packet, 0 );
126
126
}
127
- else if ( my->skill [10 ] == 0 && my->itemReceivedDetailsFromServer == 0 && players[clientnum] && players[clientnum]-> entity )
127
+ else if ( my->skill [10 ] == 0 && my->itemReceivedDetailsFromServer == 0 && players[clientnum] )
128
128
{
129
129
// request itemtype and beatitude
130
130
if ( ticks % (TICKS_PER_SECOND * 6 ) == my->getUID () % (TICKS_PER_SECOND * 6 ) )
@@ -265,7 +265,39 @@ void actItem(Entity* my)
265
265
{
266
266
if ( selectedEntity[i] == my || client_selected[i] == my )
267
267
{
268
- if ( inrange[i] && players[i] && players[i]->entity )
268
+ if ( inrange[i] && players[i] && players[i]->ghost .isActive () )
269
+ {
270
+ my->vel_x += 1.0 * cos (players[i]->ghost .my ->yaw );
271
+ my->vel_y += 1.0 * sin (players[i]->ghost .my ->yaw );
272
+ my->z = std::max (my->z - 0.1 , 0.0 );
273
+ my->vel_z = 2 * (-10 - local_rng.rand () % 20 ) * .01 ;
274
+ my->itemNotMoving = 0 ;
275
+ my->itemNotMovingClient = 0 ;
276
+ my->flags [USERFLAG1] = false ; // enable collision
277
+ if ( multiplayer == SERVER )
278
+ {
279
+ for ( int c = 1 ; c < MAXPLAYERS; c++ )
280
+ {
281
+ if ( client_disconnected[c] || players[c]->isLocalPlayer () )
282
+ {
283
+ continue ;
284
+ }
285
+ strcpy ((char *)net_packet->data , " GHOI" );
286
+ SDLNet_Write32 (my->getUID (), &net_packet->data [4 ]);
287
+ SDLNet_Write16 ((Sint16)(my->x * 32 ), &net_packet->data [8 ]);
288
+ SDLNet_Write16 ((Sint16)(my->y * 32 ), &net_packet->data [10 ]);
289
+ SDLNet_Write16 ((Sint16)(my->z * 32 ), &net_packet->data [12 ]);
290
+ SDLNet_Write16 ((Sint16)(my->vel_x * 32 ), &net_packet->data [14 ]);
291
+ SDLNet_Write16 ((Sint16)(my->vel_y * 32 ), &net_packet->data [16 ]);
292
+ SDLNet_Write16 ((Sint16)(my->vel_z * 32 ), &net_packet->data [18 ]);
293
+ net_packet->address .host = net_clients[c - 1 ].host ;
294
+ net_packet->address .port = net_clients[c - 1 ].port ;
295
+ net_packet->len = 20 ;
296
+ sendPacketSafe (net_sock, -1 , net_packet, c - 1 );
297
+ }
298
+ }
299
+ }
300
+ else if ( inrange[i] && players[i] && players[i]->entity )
269
301
{
270
302
bool trySalvage = false ;
271
303
if ( static_cast <Uint32>(my->itemAutoSalvageByPlayer ) == players[i]->entity ->getUID () )
@@ -365,68 +397,83 @@ void actItem(Entity* my)
365
397
}
366
398
}
367
399
400
+ my->removeLightField ();
401
+ switch ( my->sprite )
402
+ {
403
+ case 610 : // orbs (blue)
404
+ if ( !my->light )
405
+ {
406
+ my->light = addLight (my->x / 16 , my->y / 16 , " orb_blue" );
407
+ }
408
+ break ;
409
+ case 611 : // red
410
+ if ( !my->light )
411
+ {
412
+ my->light = addLight (my->x / 16 , my->y / 16 , " orb_red" );
413
+ }
414
+ break ;
415
+ case 612 : // purple
416
+ if ( !my->light )
417
+ {
418
+ my->light = addLight (my->x / 16 , my->y / 16 , " orb_purple" );
419
+ }
420
+ break ;
421
+ case 613 : // green
422
+ if ( !my->light )
423
+ {
424
+ my->light = addLight (my->x / 16 , my->y / 16 , " orb_green" );
425
+ }
426
+ break ;
427
+ case 1206 : // loot bags (yellow)
428
+ if ( !my->light )
429
+ {
430
+ my->light = addLight (my->x / 16 , my->y / 16 , " lootbag_yellow" );
431
+ }
432
+ break ;
433
+ case 1207 : // green
434
+ if ( !my->light )
435
+ {
436
+ my->light = addLight (my->x / 16 , my->y / 16 , " lootbag_green" );
437
+ }
438
+ break ;
439
+ case 1208 : // red
440
+ if ( !my->light )
441
+ {
442
+ my->light = addLight (my->x / 16 , my->y / 16 , " lootbag_red" );
443
+ }
444
+ break ;
445
+ case 1209 : // pink
446
+ if ( !my->light )
447
+ {
448
+ my->light = addLight (my->x / 16 , my->y / 16 , " lootbag_pink" );
449
+ }
450
+ break ;
451
+ case 1210 : // white
452
+ if ( !my->light )
453
+ {
454
+ my->light = addLight (my->x / 16 , my->y / 16 , " lootbag_white" );
455
+ }
456
+ break ;
457
+ default :
458
+ break ;
459
+ }
460
+
368
461
if ( my->itemNotMoving )
369
462
{
370
463
switch ( my->sprite )
371
464
{
372
465
case 610 : // orbs (blue)
373
466
my->spawnAmbientParticles (80 , my->sprite - 4 , 10 + local_rng.rand () % 40 , 1.0 , false );
374
- if ( !my->light )
375
- {
376
- my->light = addLight (my->x / 16 , my->y / 16 , " orb_blue" );
377
- }
378
467
break ;
379
468
case 611 : // red
380
469
my->spawnAmbientParticles (80 , my->sprite - 4 , 10 + local_rng.rand () % 40 , 1.0 , false );
381
- if ( !my->light )
382
- {
383
- my->light = addLight (my->x / 16 , my->y / 16 , " orb_red" );
384
- }
385
470
break ;
386
471
case 612 : // purple
387
472
my->spawnAmbientParticles (80 , my->sprite - 4 , 10 + local_rng.rand () % 40 , 1.0 , false );
388
- if ( !my->light )
389
- {
390
- my->light = addLight (my->x / 16 , my->y / 16 , " orb_purple" );
391
- }
392
473
break ;
393
474
case 613 : // green
394
475
my->spawnAmbientParticles (80 , my->sprite - 4 , 10 + local_rng.rand () % 40 , 1.0 , false );
395
- if ( !my->light )
396
- {
397
- my->light = addLight (my->x / 16 , my->y / 16 , " orb_green" );
398
- }
399
476
break ;
400
- case 1206 : // loot bags (yellow)
401
- if ( !my->light )
402
- {
403
- my->light = addLight (my->x / 16 , my->y / 16 , " lootbag_yellow" );
404
- }
405
- break ;
406
- case 1207 : // green
407
- if ( !my->light )
408
- {
409
- my->light = addLight (my->x / 16 , my->y / 16 , " lootbag_green" );
410
- }
411
- break ;
412
- case 1208 : // red
413
- if ( !my->light )
414
- {
415
- my->light = addLight (my->x / 16 , my->y / 16 , " lootbag_red" );
416
- }
417
- break ;
418
- case 1209 : // pink
419
- if ( !my->light )
420
- {
421
- my->light = addLight (my->x / 16 , my->y / 16 , " lootbag_pink" );
422
- }
423
- break ;
424
- case 1210 : // white
425
- if ( !my->light )
426
- {
427
- my->light = addLight (my->x / 16 , my->y / 16 , " lootbag_white" );
428
- }
429
- break ;
430
477
default :
431
478
break ;
432
479
}
@@ -482,6 +529,8 @@ void actItem(Entity* my)
482
529
}
483
530
}
484
531
532
+ my->flags [BURNING] = false ;
533
+
485
534
if ( my->z < groundheight )
486
535
{
487
536
// fall
0 commit comments