mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-10-10 00:13:42 -04:00
Merged projectswg/holocore into quality_assurance
This commit is contained in:
Binary file not shown.
@@ -118,7 +118,7 @@ weapon_npe_carbine_spy_03_01 object/weapon/ranged/carbine/carbine_dh17_black_npe
|
||||
weapon_npe_commando_carbine_03_01 object/weapon/ranged/carbine/carbine_dh17_black_npe.iff weapon Commando Carbine 1 1000 20 40 ranged_weapon CARBINE energy none 0 60 100 0 35 - 50 50 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 1 commando 1 1 1 1 1 0 0 0 0 0 - 0 250 0 0 3 1 level 1 npe NOTE these dps are higher than average -
|
||||
weapon_npe_d44_quest_reward_01_01 object/weapon/ranged/pistol/pistol_dl44_metal_static.iff weapon Alliance DL44 1 1000 24 49 ranged_weapon PISTOL energy none 0 40 100 0 35 - 91 91 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 7 - 1 1 1 1 1 0 0 0 0 0 - 0 400 0 0 2 1 Quest reward for a GCW quest in the NPE -
|
||||
weapon_npe_e11_quest_reward_01_01 object/weapon/ranged/carbine/carbine_e11_static.iff weapon Imperial Issue Carbine 1 1000 37 73 ranged_weapon CARBINE energy none 0 60 100 0 35 - 91 92 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 7 - 1 1 1 1 1 0 0 0 0 0 - 0 400 0 0 2 1 Quest reward for a GCW quest in the NPE -
|
||||
weapon_npe_grenade_frag_02_01 object/weapon/ranged/grenade/grenade_fragmentation_generic.iff weapon Fragmentation Grenade 1 1000 80 160 ranged_weapon THROWN kinetic none 0 100 100 0 35 - 120 120 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 1 - 1 1 1 1 1 0 0 0 0 0 - 0 0 0 5 2 1 level 12 int:reuseTimer=5,string:effect_class=fragmentation
|
||||
weapon_npe_grenade_frag_02_01 object/weapon/ranged/grenade/grenade_fragmentation_generic.iff weapon Fragmentation Grenade 1 1000 80 160 ranged_weapon THROWN kinetic none 0 1000 100 0 35 - 120 120 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 1 - 1 1 1 1 1 0 0 0 0 0 - 0 0 0 5 2 1 level 12 int:reuseTimer=5,string:effect_class=fragmentation
|
||||
weapon_npe_knuckler_fs_03_01 object/weapon/melee/special/vibroknuckler_npe.iff weapon Rydel's Knuckler 1 1000 32 99 melee_weapon UNARMED kinetic none 0 100 100 0 5 - 66 66 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 3 - 1 1 1 1 1 0 0 0 0 0 - 0 250 0 0 3 1 level 1 npe NOTE these dps are higher than average -
|
||||
weapon_npe_lightsaber_02_01 object/weapon/melee/sword/crafted_saber/generic_sword_lightsaber_one_handed_gen1.iff weapon First Generation Lightsaber 1 1000 100 200 melee_weapon ONE_HANDED_SABER energy none 0 100 100 0 5 - 405 150 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 29 force_sensitive 1 1 1 1 1 0 0 0 0 0 - 0 0 0 0 2 1 - int:jedi.saber.base_stats.min_dmg=200,int:jedi.saber.base_stats.max_dmg=400,float:jedi.saber.base_stats.speed=1.00,float:jedi.saber.base_stats.wound=1.0,int:jedi.saber.base_stats.attack_cost=100,float:jedi.saber.base_stats.damage=0.0
|
||||
weapon_npe_lightsaber_02_02 object/weapon/melee/sword/crafted_saber/generic_sword_lightsaber_training.iff weapon Training Lightsaber 1 1000 167 333 melee_weapon ONE_HANDED_SABER energy none 0 100 100 0 5 - 250 250 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 26 force_sensitive 1 1 1 1 1 0 0 0 0 0 - 0 0 0 0 2 1 lvl 26 int:jedi.saber.base_stats.min_dmg=167,int:jedi.saber.base_stats.max_dmg=333,float:jedi.saber.base_stats.speed=1.00,float:jedi.saber.base_stats.wound=1.0,int:jedi.saber.base_stats.attack_cost=100,float:jedi.saber.base_stats.damage=0.0
|
||||
@@ -317,4 +317,51 @@ weapon_tow_sword_junti_04_01 object/weapon/melee/sword/sword_mace_junti_generic.
|
||||
weapon_tow_sword_rsf_04_01 object/weapon/melee/sword/sword_rsf_generic.iff weapon OR-5's Sword 1 1000 683 1366 melee_weapon ONE_HANDED_MELEE kinetic none 0 100 100 0 5 - 1000 1025 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 88 - 1 1 1 1 1 0 0 0 0 0 - 0 6500 0 0 4 1 ToW expansion -
|
||||
weapon_unarmed_04_01 object/weapon/melee/special/vibroknuckler_npe.iff weapon Modified Vibroblade 1 1000 85 170 melee_weapon UNARMED kinetic none 0 100 100 0 5 - 128 128 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 13 - 1 1 1 1 1 0 0 0 0 0 - 0 400 0 0 4 1 level 13 npe -
|
||||
weapon_westar_pistol_04_01 object/weapon/ranged/pistol/pistol_westar_34.iff weapon WESTAR-34 Blaster Pistol 1 1000 215 425 ranged_weapon PISTOL energy heat 20 40 100 0 35 - 900 900 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 75 - 1 1 1 1 1 0 0 0 0 0 - 0 1000 0 0 4 1 pvp BF reward -
|
||||
weapon_westar_rifle_04_01 object/weapon/ranged/rifle/rifle_westar_m5.iff weapon WESTAR-M5 Blaster Rifle 1 1000 425 945 ranged_weapon RIFLE energy cold 20 80 100 0 64 - 900 906 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 75 - 1 1 1 1 1 0 0 0 0 0 - 0 1000 0 0 4 1 pvp BF reward -
|
||||
weapon_westar_rifle_04_01 object/weapon/ranged/rifle/rifle_westar_m5.iff weapon WESTAR-M5 Blaster Rifle 1 1000 425 945 ranged_weapon RIFLE energy cold 20 80 100 0 64 - 900 906 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 75 - 1 1 1 1 1 0 0 0 0 0 - 0 1000 0 0 4 1 pvp BF reward -
|
||||
sword_2h_avatar_wke_toothpick object/weapon/melee/2h_sword/2h_sword_avatar_wke_toothpick.iff weapon Wookiee Toothpick 1 1000 597 1193 melee_weapon TWO_HANDED_MELEE kinetic none 0 100 100 0 4 - 895 895 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_executer object/weapon/melee/2h_sword/ep3_loot_executer.iff weapon N-K Executer 1 1000 597 1193 melee_weapon TWO_HANDED_MELEE kinetic none 0 100 100 0 4 - 895 895 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_lifeblood object/weapon/melee/2h_sword/ep3_loot_lifeblood.iff weapon Lifeblood Cleaver 1 1000 458 915 melee_weapon TWO_HANDED_MELEE kinetic none 0 100 100 0 4 - 687 687 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_sickle object/weapon/melee/2h_sword/ep3_loot_sickle.iff weapon Darstai'is Sickle 1 1000 527 1054 melee_weapon TWO_HANDED_MELEE kinetic none 0 100 100 0 4 - 791 791 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
baton_avatar_trando_stun_stick object/weapon/melee/baton/baton_avatar_trando_stun_stick.iff weapon Blackscale Stun Stick 1 1000 597 1193 melee_weapon ONE_HANDED_MELEE kinetic none 0 100 100 0 4 - 895 895 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_blackbane object/weapon/melee/knife/ep3_loot_blackbane.iff weapon Blackbane Nail 1 1000 458 915 melee_weapon ONE_HANDED_MELEE kinetic none 0 100 100 0 4 - 687 687 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_pestilence object/weapon/melee/polearm/ep3_loot_pestilence.iff weapon Pestilence 1 1000 527 1054 melee_weapon POLEARM_MELEE kinetic none 0 100 100 0 4 - 791 791 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_poisonspike object/weapon/melee/polearm/ep3_loot_poisonspike.iff weapon Poisonspike 1 1000 597 1193 melee_weapon POLEARM_MELEE kinetic none 0 100 100 0 4 - 895 895 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_strike object/weapon/melee/polearm/ep3_loot_strike.iff weapon Strike Assault Lance 1 1000 458 915 melee_weapon POLEARM_MELEE kinetic none 0 100 100 0 4 - 687 687 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
lance_avatar_wke_heartlance object/weapon/melee/polearm/lance_avatar_wke_heartlance.iff weapon Wookiee Heartlance 1 1000 597 1193 melee_weapon POLEARM_MELEE energy none 0 100 100 0 4 - 895 895 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_heartstriker object/weapon/melee/special/ep3_loot_heartstriker.iff weapon Sayormi Heartstriker 1 1000 458 915 melee_weapon UNARMED kinetic none 0 100 100 0 4 - 687 687 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_necrosis object/weapon/melee/special/ep3_loot_necrosis.iff weapon Necrosis Nightblade 1 1000 597 1193 melee_weapon UNARMED kinetic none 0 100 100 0 4 - 895 895 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_soulstinger object/weapon/melee/special/ep3_loot_soulstinger.iff weapon Sayormi Soulstinger 1 1000 527 1054 melee_weapon UNARMED energy none 0 100 100 0 4 - 791 791 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_eventide object/weapon/melee/sword/ep3_loot_eventide.iff weapon Eventide Smasher 1 1000 527 1054 melee_weapon UNARMED kinetic none 0 100 100 0 4 - 791 791 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_ripper object/weapon/melee/sword/ep3_loot_ripper.iff weapon Bloodshot Ripper 1 1000 597 1193 melee_weapon UNARMED kinetic none 0 100 100 0 4 - 895 895 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
sword_avatar_wke_spiritblade object/weapon/melee/sword/sword_avatar_wke_spiritblade.iff weapon Kashyyyk Spiritblade 1 1000 597 1193 melee_weapon ONE_HANDED_MELEE kinetic none 0 100 100 0 4 - 895 895 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
carbine_avatar_trando object/weapon/ranged/carbine/carbine_avatar_trando.iff weapon Blackscale "Hall Sweeper" Carbine 1 1000 338 676 ranged_weapon CARBINE kinetic cold 35 60 100 0 50 - 507 507 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_corestrike object/weapon/ranged/carbine/ep3_loot_corestrike.iff weapon Corestrike Rancor 1 1000 300 600 ranged_weapon CARBINE energy none 0 60 100 0 35 - 450 450 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_firestar object/weapon/ranged/carbine/ep3_loot_firestar.iff weapon Firestar 10-K 1 1000 300 600 ranged_weapon CARBINE energy none 0 60 100 0 60 - 450 450 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_grievance object/weapon/ranged/carbine/ep3_loot_grievance.iff weapon Grievance Striker 1 1000 338 675 ranged_weapon CARBINE energy none 0 60 100 0 35 - 507 507 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_mark object/weapon/ranged/carbine/ep3_loot_mark.iff weapon Exemplar's Mark 1 1000 300 600 ranged_weapon CARBINE energy none 0 60 100 0 35 - 450 450 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_retribution object/weapon/ranged/carbine/ep3_loot_retribution.iff weapon Retribution 1 1000 300 600 ranged_weapon CARBINE energy none 0 60 100 0 35 - 450 450 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_rilctur object/weapon/ranged/carbine/ep3_loot_rilctur.iff weapon Rilctur Carbine 1 1000 263 525 ranged_weapon CARBINE energy none 0 60 100 0 35 - 394 394 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
grenade_imperial_detonator object/weapon/ranged/grenade/grenade_imperial_detonator.iff weapon Imperial Detonator 1 1000 721 1442 ranged_weapon THROWN energy none 0 1000 100 0 40 - 108 108 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_corellian object/weapon/ranged/heavy/ep3_loot_corellian.iff weapon Corellian Destroyer 1 1000 450 900 ranged_weapon DIRECTIONAL_TARGET_WEAPON energy none 0 80 100 0 55 - 675 675 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_void object/weapon/ranged/heavy/ep3_loot_void.iff weapon The Void 1 1000 515 1030 ranged_weapon DIRECTIONAL_TARGET_WEAPON kinetic none 0 80 100 0 64 - 773 773 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
heavy_acid_beam object/weapon/ranged/heavy/heavy_acid_beam.iff weapon Acid Stream Launcher 1 1000 290 580 ranged_weapon DIRECTIONAL_TARGET_WEAPON kinetic acid 242 80 100 0 64 - 435 435 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
heavy_avatar_acid_beam object/weapon/ranged/heavy/heavy_avatar_acid_beam.iff weapon Blackscale Acid Launcher 1 1000 356 711 ranged_weapon DIRECTIONAL_TARGET_WEAPON kinetic acid 242 80 100 0 64 - 534 534 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_blackhand object/weapon/ranged/pistol/ep3_loot_blackhand.iff weapon Blackhand Annihilator 1 1000 200 400 ranged_weapon PISTOL kinetic none 0 40 100 0 35 - 300 300 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_calibrated object/weapon/ranged/pistol/ep3_loot_calibrated.iff weapon Perfectly-Calibrated Pistol 1 1000 205 410 ranged_weapon PISTOL energy none 0 40 100 0 25 - 770 769 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_deathrain object/weapon/ranged/pistol/ep3_loot_deathrain.iff weapon Deathrain D-50 1 1000 225 450 ranged_weapon PISTOL energy none 0 40 100 0 35 - 338 338 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_dragoneye object/weapon/ranged/pistol/ep3_loot_dragoneye.iff weapon C-10 "Dragoneye Reaper" 1 1000 175 350 ranged_weapon PISTOL energy none 0 40 100 0 25 - 263 263 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_hydra object/weapon/ranged/pistol/ep3_loot_hydra.iff weapon Red Hydra Z-5 1 1000 175 350 ranged_weapon PISTOL energy none 0 40 100 0 25 - 263 263 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_liquidsilver object/weapon/ranged/pistol/ep3_loot_liquidsilver.iff weapon Liquidsilver L7 1 1000 175 350 ranged_weapon PISTOL energy none 0 40 100 0 25 - 263 263 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_quicktrigger object/weapon/ranged/pistol/ep3_loot_quicktrigger.iff weapon Quicktrigger Countermand 1 1000 200 400 ranged_weapon PISTOL energy none 0 40 100 0 25 - 300 300 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_rhiss object/weapon/ranged/pistol/ep3_loot_rhiss.iff weapon Rhiss Mark-20 1 1000 175 350 ranged_weapon PISTOL energy none 0 40 100 0 25 - 263 263 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_silencer object/weapon/ranged/pistol/ep3_loot_silencer.iff weapon The Silencer 1 1000 200 400 ranged_weapon PISTOL kinetic none 0 40 100 0 25 - 300 300 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
pistol_avatar_trando_special object/weapon/ranged/pistol/pistol_avatar_trando_special.iff weapon DL44 "Dosh Special" Pistol 1 1000 225 450 ranged_weapon PISTOL energy none 0 40 100 0 35 - 338 338 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 72 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_darksting object/weapon/ranged/rifle/ep3_loot_darksting.iff weapon Darksting Assassin 1 1000 225 450 ranged_weapon RIFLE energy none 0 80 100 0 25 - 338 338 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_dawnsorrow object/weapon/ranged/rifle/ep3_loot_dawnsorrow.iff weapon Dawnsorrow Rifle 1 1000 450 900 ranged_weapon RIFLE energy none 0 80 100 0 60 - 675 675 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_nullifier object/weapon/ranged/rifle/ep3_loot_nullifier.iff weapon Nullifier X 1 1000 581 1161 ranged_weapon RIFLE energy none 0 80 100 0 55 - 871 871 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_retaliation object/weapon/ranged/rifle/ep3_loot_retaliation.iff weapon Covert Retaliation 1 1000 450 900 ranged_weapon RIFLE energy none 0 80 100 0 60 - 675 675 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
ep3_loot_sharpshooter object/weapon/ranged/rifle/ep3_loot_sharpshooter.iff weapon Vershyi Sharpshooter 1 1000 350 700 ranged_weapon RIFLE energy none 0 80 100 0 60 - 525 525 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 64 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
rifle_naktra_crystal object/weapon/ranged/rifle/ep3/rifle_naktra_crystal.iff weapon Nak'tra Crystal Rifle 1 1000 450 900 ranged_weapon RIFLE energy none 0 80 100 0 64 - 675 675 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
rifle_avatar_laser_trando object/weapon/ranged/rifle/rifle_avatar_laser_trando.iff weapon Trandoshan Laser Rifle 1 1000 450 900 ranged_weapon RIFLE energy none 0 80 100 0 64 - 675 675 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
rifle_proton object/weapon/ranged/rifle/rifle_proton.iff weapon Proton Rifle 1 1000 450 900 ranged_weapon RIFLE energy none 0 80 100 0 64 - 675 675 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
rifle_t21 object/weapon/ranged/rifle/rifle_t21.iff weapon T21 Rifle 1 1000 450 900 ranged_weapon RIFLE energy none 0 80 100 0 64 - 675 675 0 - 0 - 0 0 - - - 0 - - - - - - - - - - 0 0 - - - 0 - 80 - 1 1 1 1 1 0 0 0 1 0 - 0 1000 0 0 4 1 - -
|
||||
File diff suppressed because one or more lines are too long
@@ -30,6 +30,7 @@ package main;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.Thread.State;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -42,6 +43,7 @@ import org.junit.runner.notification.Failure;
|
||||
|
||||
import com.projectswg.common.concurrency.Delay;
|
||||
import com.projectswg.common.control.IntentManager;
|
||||
import com.projectswg.common.control.IntentManager.IntentSpeedRecord;
|
||||
import com.projectswg.common.debug.Log;
|
||||
import com.projectswg.common.debug.Log.LogLevel;
|
||||
import com.projectswg.common.debug.log_wrapper.ConsoleLogWrapper;
|
||||
@@ -130,6 +132,16 @@ public class ProjectSWG {
|
||||
for (Thread thread : threads) {
|
||||
Log.i(" Thread: %s", thread.getName());
|
||||
}
|
||||
List<IntentSpeedRecord> intentTimes = IntentManager.getInstance().getSpeedRecorder().getAllTimes();
|
||||
Collections.sort(intentTimes);
|
||||
Log.i(" Intent Times: [%d]", intentTimes.size());
|
||||
Log.i(" %-30s%-40s%-10s%s", "Intent", "Receiver", "Count", "Time");
|
||||
for (IntentSpeedRecord record : intentTimes) {
|
||||
String receiverName = record.getConsumer().getClass().getName();
|
||||
if (receiverName.indexOf('$') != -1)
|
||||
receiverName = receiverName.substring(0, receiverName.indexOf('$'));
|
||||
Log.i(" %-30s%-40s%-10s%.6fms", record.getIntent().getSimpleName(), receiverName, Long.toString(record.getCount()), record.getTime() / 1E6);
|
||||
}
|
||||
}
|
||||
|
||||
private static Result verifyTestCases() {
|
||||
@@ -250,7 +262,7 @@ public class ProjectSWG {
|
||||
private void loop() {
|
||||
setStatus((manager.getGalaxyStatus() == GalaxyStatus.UP) ? ServerStatus.OPEN : ServerStatus.LOCKED);
|
||||
while (!shutdownRequested && !manager.isShutdownRequested() && manager.isOperational()) {
|
||||
if (Delay.sleepMicro(50))
|
||||
if (Delay.sleepMilli(50))
|
||||
throw new CoreException("Main Thread Interrupted");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,17 +29,19 @@ package resources.objects;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArraySet;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import com.projectswg.common.concurrency.SynchronizedMap;
|
||||
import com.projectswg.common.concurrency.SynchronizedSet;
|
||||
import com.projectswg.common.data.CRC;
|
||||
import com.projectswg.common.data.location.Location;
|
||||
import com.projectswg.common.data.location.Terrain;
|
||||
@@ -79,11 +81,11 @@ public abstract class SWGObject extends BaselineObject implements Comparable<SWG
|
||||
|
||||
private final long objectId;
|
||||
private final InstanceLocation location = new InstanceLocation();
|
||||
private final Set<SWGObject> containedObjects= new SynchronizedSet<>();
|
||||
private final Set<SWGObject> containedObjects= new CopyOnWriteArraySet<>();
|
||||
private final Map <String, SWGObject> slots = new SynchronizedMap<>();
|
||||
private final Map <String, String> attributes = new SynchronizedMap<>(new LinkedHashMap<>());
|
||||
private final ObjectAware awareness = new ObjectAware(this);
|
||||
private final Map <ObjectDataAttribute, Object> dataAttributes = new SynchronizedMap<>();
|
||||
private final Map <ObjectDataAttribute, Object> dataAttributes = new ConcurrentHashMap<>();
|
||||
private final AtomicInteger updateCounter = new AtomicInteger(1);
|
||||
|
||||
private ObjectClassification classification = ObjectClassification.GENERATED;
|
||||
@@ -121,12 +123,10 @@ public abstract class SWGObject extends BaselineObject implements Comparable<SWG
|
||||
public void addObject(SWGObject object) {
|
||||
object.setSlotArrangement(getArrangementId(object));
|
||||
if (object.getSlotArrangement() == -1) {
|
||||
synchronized (containedObjects) {
|
||||
containedObjects.add(object);
|
||||
|
||||
// We need to adjust the volume of our container accordingly!
|
||||
setVolume(getVolume() + object.getVolume() + 1);
|
||||
}
|
||||
containedObjects.add(object);
|
||||
|
||||
// We need to adjust the volume of our container accordingly!
|
||||
setVolume(getVolume() + object.getVolume() + 1);
|
||||
} else {
|
||||
for (String requiredSlot : object.getArrangement().get(object.getSlotArrangement() - 4)) {
|
||||
setSlot(requiredSlot, object);
|
||||
@@ -143,12 +143,10 @@ public abstract class SWGObject extends BaselineObject implements Comparable<SWG
|
||||
*/
|
||||
protected void removeObject(SWGObject object) {
|
||||
if (object.getSlotArrangement() == -1) {
|
||||
synchronized (containedObjects) {
|
||||
containedObjects.remove(object);
|
||||
|
||||
// We need to adjust the volume of our container accordingly!
|
||||
setVolume(getVolume() - object.getVolume() - 1);
|
||||
}
|
||||
containedObjects.remove(object);
|
||||
|
||||
// We need to adjust the volume of our container accordingly!
|
||||
setVolume(getVolume() - object.getVolume() - 1);
|
||||
} else {
|
||||
for (String requiredSlot : object.getArrangement().get(object.getSlotArrangement() - 4)) {
|
||||
setSlot(requiredSlot, null);
|
||||
@@ -198,7 +196,8 @@ public abstract class SWGObject extends BaselineObject implements Comparable<SWG
|
||||
AwarenessUtilities.callForSameObserver(oldObservers, newObservers, (observer) -> observer.sendPacket(update));
|
||||
AwarenessUtilities.callForNewObserver(oldObservers, newObservers, (observer) -> createObject(observer));
|
||||
AwarenessUtilities.callForOldObserver(oldObservers, newObservers, (observer) -> destroyObject(observer));
|
||||
new ContainerTransferIntent(this, container).broadcast();
|
||||
if (parent != container)
|
||||
new ContainerTransferIntent(this, container).broadcast();
|
||||
return ContainerResult.SUCCESS;
|
||||
}
|
||||
|
||||
@@ -275,9 +274,7 @@ public abstract class SWGObject extends BaselineObject implements Comparable<SWG
|
||||
* @return The {@link SWGObject} occupying the slot. Returns null if there is nothing in the slot or it doesn't exist.
|
||||
*/
|
||||
public SWGObject getSlottedObject(String slotName) {
|
||||
synchronized (slots) {
|
||||
return slots.get(slotName);
|
||||
}
|
||||
return slots.get(slotName);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -286,21 +283,15 @@ public abstract class SWGObject extends BaselineObject implements Comparable<SWG
|
||||
* @return An unmodifiable {@link Collection} of {@link SWGObject}'s in the container
|
||||
*/
|
||||
public Collection<SWGObject> getContainedObjects() {
|
||||
synchronized (containedObjects) {
|
||||
return new ArrayList<>(containedObjects);
|
||||
}
|
||||
return Collections.unmodifiableSet(containedObjects);
|
||||
}
|
||||
|
||||
public boolean hasSlot(String slotName) {
|
||||
synchronized (slots) {
|
||||
return slots.containsKey(slotName);
|
||||
}
|
||||
return slots.containsKey(slotName);
|
||||
}
|
||||
|
||||
public void setSlot(String name, SWGObject value) {
|
||||
synchronized (slots) {
|
||||
slots.put(name, value);
|
||||
}
|
||||
slots.put(name, value);
|
||||
}
|
||||
|
||||
public Map<String, SWGObject> getSlots() {
|
||||
@@ -358,16 +349,12 @@ public abstract class SWGObject extends BaselineObject implements Comparable<SWG
|
||||
|
||||
private void updateChildrenTerrain() {
|
||||
Terrain terrain = getTerrain();
|
||||
synchronized (containedObjects) {
|
||||
for (SWGObject child : containedObjects) {
|
||||
child.setTerrain(terrain);
|
||||
}
|
||||
for (SWGObject child : containedObjects) {
|
||||
child.setTerrain(terrain);
|
||||
}
|
||||
synchronized (slots) {
|
||||
for (SWGObject child : slots.values()) {
|
||||
if (child != null)
|
||||
child.setTerrain(terrain);
|
||||
}
|
||||
for (SWGObject child : slots.values()) {
|
||||
if (child != null)
|
||||
child.setTerrain(terrain);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -598,14 +585,12 @@ public abstract class SWGObject extends BaselineObject implements Comparable<SWG
|
||||
|
||||
public double getLoadRange() {
|
||||
double bubble = getPrefLoadRange();
|
||||
synchronized (containedObjects) {
|
||||
for (SWGObject contained : containedObjects) {
|
||||
double x = contained.getX();
|
||||
double z = contained.getZ();
|
||||
double dist = Math.sqrt(x*x+z*z) + contained.getLoadRange();
|
||||
if (dist > bubble)
|
||||
bubble = dist;
|
||||
}
|
||||
for (SWGObject contained : containedObjects) {
|
||||
double x = contained.getX();
|
||||
double z = contained.getZ();
|
||||
double dist = Math.sqrt(x*x+z*z) + contained.getLoadRange();
|
||||
if (dist > bubble)
|
||||
bubble = dist;
|
||||
}
|
||||
return bubble;
|
||||
}
|
||||
@@ -628,10 +613,8 @@ public abstract class SWGObject extends BaselineObject implements Comparable<SWG
|
||||
* @return Arrangement ID for the object
|
||||
*/
|
||||
public int getArrangementId(SWGObject object) {
|
||||
synchronized (slots) {
|
||||
if (slots.size() == 0 || object.getArrangement() == null)
|
||||
return -1;
|
||||
}
|
||||
if (slots.size() == 0 || object.getArrangement() == null)
|
||||
return -1;
|
||||
|
||||
int arrangementId = 4;
|
||||
int filledId = -1;
|
||||
@@ -901,21 +884,17 @@ public abstract class SWGObject extends BaselineObject implements Comparable<SWG
|
||||
}
|
||||
|
||||
private void createChildrenObjects(Player target) {
|
||||
synchronized (slots) {
|
||||
for (SWGObject slotObject : slots.values()) {
|
||||
if (slotObject != null) {
|
||||
slotObject.createObject(target);
|
||||
}
|
||||
for (SWGObject slotObject : slots.values()) {
|
||||
if (slotObject != null) {
|
||||
slotObject.createObject(target);
|
||||
}
|
||||
}
|
||||
|
||||
synchronized (containedObjects) {
|
||||
for (SWGObject containedObject : containedObjects) {
|
||||
Assert.notNull(containedObject);
|
||||
if (containedObject instanceof CreatureObject && ((CreatureObject) containedObject).isLoggedOutPlayer())
|
||||
continue; // If it's a player, but that's logged out
|
||||
containedObject.createObject(target);
|
||||
}
|
||||
for (SWGObject containedObject : containedObjects) {
|
||||
Assert.notNull(containedObject);
|
||||
if (containedObject instanceof CreatureObject && ((CreatureObject) containedObject).isLoggedOutPlayer())
|
||||
continue; // If it's a player, but that's logged out
|
||||
containedObject.createObject(target);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1034,14 +1013,9 @@ public abstract class SWGObject extends BaselineObject implements Comparable<SWG
|
||||
stream.addAscii(e.getValue());
|
||||
});
|
||||
}
|
||||
Set<SWGObject> contained;
|
||||
synchronized (containedObjects) {
|
||||
contained = new HashSet<>(containedObjects);
|
||||
}
|
||||
synchronized (slots) {
|
||||
contained.addAll(slots.values());
|
||||
contained.remove(null);
|
||||
}
|
||||
Set<SWGObject> contained = new HashSet<>(containedObjects);
|
||||
contained.addAll(slots.values());
|
||||
contained.remove(null);
|
||||
stream.addList(contained, (c) -> SWGObjectFactory.save(c, stream));
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ public class AwarenessHandler implements AutoCloseable {
|
||||
|
||||
public void moveObject(SWGObject obj, Location requestedLocation) {
|
||||
// Remove from previous awareness
|
||||
if (obj.getTerrain() != requestedLocation.getTerrain()) {
|
||||
if (obj.getTerrain() != requestedLocation.getTerrain() && obj.getTerrain() != null) {
|
||||
TerrainMap oldTerrainMap = getTerrainMap(obj.getTerrain());
|
||||
if (oldTerrainMap != null)
|
||||
oldTerrainMap.removeWithoutUpdate(obj);
|
||||
|
||||
@@ -31,8 +31,7 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import com.projectswg.common.concurrency.SynchronizedSet;
|
||||
import java.util.concurrent.CopyOnWriteArraySet;
|
||||
|
||||
import resources.objects.SWGObject;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
@@ -46,7 +45,7 @@ class TerrainMapChunk {
|
||||
private final double maxZ;
|
||||
|
||||
public TerrainMapChunk(double minX, double minZ, double maxX, double maxZ) {
|
||||
objects = new SynchronizedSet<>(); // There will be some expanding and shrinking
|
||||
objects = new CopyOnWriteArraySet<>(); // There will be some expanding and shrinking
|
||||
this.minX = minX;
|
||||
this.minZ = minZ;
|
||||
this.maxX = maxX;
|
||||
@@ -79,11 +78,9 @@ class TerrainMapChunk {
|
||||
|
||||
public void getWithinAwareness(SWGObject obj, Collection<SWGObject> withinRange) {
|
||||
double loadRange = obj.getLoadRange();
|
||||
synchronized (objects) {
|
||||
for (SWGObject test : objects) {
|
||||
if (isValidWithinRange(obj, test, loadRange))
|
||||
withinRange.add(test);
|
||||
}
|
||||
for (SWGObject test : objects) {
|
||||
if (isValidWithinRange(obj, test, loadRange))
|
||||
withinRange.add(test);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -69,7 +69,6 @@ public final class ConfigWatcher {
|
||||
} catch (IOException e) {
|
||||
this.watcher = null;
|
||||
}
|
||||
watcherThread.setInterruptOnStop(true);
|
||||
}
|
||||
|
||||
public void start() {
|
||||
@@ -79,7 +78,7 @@ public final class ConfigWatcher {
|
||||
|
||||
public void stop() {
|
||||
running.set(false);
|
||||
watcherThread.stop();
|
||||
watcherThread.stop(true);
|
||||
watcherThread.awaitTermination(1000);
|
||||
}
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ class TravelHelper {
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
travelExecutor.stop();
|
||||
travelExecutor.stop(false);
|
||||
}
|
||||
|
||||
public void addTravelPoint(TravelPoint point) {
|
||||
|
||||
@@ -304,15 +304,13 @@ public class ObjectAwareness extends Service implements TerrainMapCallback {
|
||||
}
|
||||
|
||||
private void moveObjectWithTransform(SWGObject obj, SWGObject parent, Location requestedLocation, double speed, int update) {
|
||||
SWGObject oldParent = obj.getParent();
|
||||
Location oldLocation = obj.getLocation();
|
||||
moveObject(obj, parent, requestedLocation);
|
||||
if (parent == null)
|
||||
dataTransformHandler.handleMove(obj, speed, update);
|
||||
else
|
||||
dataTransformHandler.handleMove(obj, parent, speed, update);
|
||||
if (obj instanceof CreatureObject && ((CreatureObject) obj).isLoggedInPlayer())
|
||||
new PlayerTransformedIntent((CreatureObject) obj, oldParent, parent, oldLocation, requestedLocation).broadcast();
|
||||
new PlayerTransformedIntent((CreatureObject) obj, obj.getParent(), parent, obj.getLocation(), requestedLocation).broadcast();
|
||||
}
|
||||
|
||||
private void disappearObject(SWGObject obj, boolean disappearObjects, boolean disappearCustom) {
|
||||
|
||||
@@ -27,8 +27,8 @@
|
||||
***********************************************************************************/
|
||||
package services.objects;
|
||||
|
||||
import java.util.Hashtable;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import com.projectswg.common.control.Manager;
|
||||
@@ -76,7 +76,7 @@ public class ObjectManager extends Manager {
|
||||
staticItemService = new StaticItemService();
|
||||
|
||||
database = new CachedObjectDatabase<>("odb/objects.db", SWGObjectFactory::create, SWGObjectFactory::save);
|
||||
objectMap = new Hashtable<>(16*1024);
|
||||
objectMap = new ConcurrentHashMap<>(128*1024);
|
||||
started = new AtomicBoolean(false);
|
||||
|
||||
addChildService(objectAwareness);
|
||||
@@ -94,17 +94,13 @@ public class ObjectManager extends Manager {
|
||||
|
||||
@Override
|
||||
public boolean initialize() {
|
||||
synchronized (objectMap) {
|
||||
objectMap.putAll(clientBuildoutService.loadClientObjects());
|
||||
}
|
||||
objectMap.putAll(clientBuildoutService.loadClientObjects());
|
||||
if (!loadObjects())
|
||||
return false;
|
||||
synchronized (database) {
|
||||
database.traverse((obj) -> loadObject(obj));
|
||||
}
|
||||
synchronized (objectMap) {
|
||||
objectMap.forEach((id, obj) -> new ObjectCreatedIntent(obj).broadcast());
|
||||
}
|
||||
objectMap.forEach((id, obj) -> new ObjectCreatedIntent(obj).broadcast());
|
||||
return super.initialize();
|
||||
}
|
||||
|
||||
@@ -150,24 +146,20 @@ public class ObjectManager extends Manager {
|
||||
|
||||
@Override
|
||||
public boolean start() {
|
||||
synchronized (objectMap) {
|
||||
for (SWGObject obj : objectMap.values()) {
|
||||
if (obj instanceof AIObject)
|
||||
((AIObject) obj).aiStart();
|
||||
}
|
||||
started.set(true);
|
||||
for (SWGObject obj : objectMap.values()) {
|
||||
if (obj instanceof AIObject)
|
||||
((AIObject) obj).aiStart();
|
||||
}
|
||||
started.set(true);
|
||||
return super.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stop() {
|
||||
synchronized (objectMap) {
|
||||
started.set(false);
|
||||
for (SWGObject obj : objectMap.values()) {
|
||||
if (obj instanceof AIObject)
|
||||
((AIObject) obj).aiStop();
|
||||
}
|
||||
started.set(false);
|
||||
for (SWGObject obj : objectMap.values()) {
|
||||
if (obj instanceof AIObject)
|
||||
((AIObject) obj).aiStop();
|
||||
}
|
||||
return super.stop();
|
||||
}
|
||||
@@ -191,20 +183,16 @@ public class ObjectManager extends Manager {
|
||||
}
|
||||
if (!(obj instanceof AIObject))
|
||||
return;
|
||||
synchronized (objectMap) {
|
||||
if (started.get())
|
||||
((AIObject) obj).aiStart();
|
||||
}
|
||||
if (started.get())
|
||||
((AIObject) obj).aiStart();
|
||||
}
|
||||
|
||||
private void processDestroyObjectIntent(DestroyObjectIntent doi) {
|
||||
destroyObject(doi.getObject());
|
||||
if (!(doi.getObject() instanceof AIObject))
|
||||
return;
|
||||
synchronized (objectMap) {
|
||||
if (started.get())
|
||||
((AIObject) doi.getObject()).aiStop();
|
||||
}
|
||||
if (started.get())
|
||||
((AIObject) doi.getObject()).aiStop();
|
||||
}
|
||||
|
||||
private void processGalacticPacketIntent(GalacticPacketIntent gpi) {
|
||||
@@ -220,17 +208,13 @@ public class ObjectManager extends Manager {
|
||||
}
|
||||
|
||||
public SWGObject getObjectById(long objectId) {
|
||||
synchronized (objectMap) {
|
||||
return objectMap.get(objectId);
|
||||
}
|
||||
return objectMap.get(objectId);
|
||||
}
|
||||
|
||||
private void putObject(SWGObject object) {
|
||||
synchronized (objectMap) {
|
||||
SWGObject replaced = objectMap.put(object.getObjectId(), object);
|
||||
if (replaced != null && replaced != object)
|
||||
Log.e("Replaced object in object map! Old: %s New: %s", replaced, object);
|
||||
}
|
||||
SWGObject replaced = objectMap.put(object.getObjectId(), object);
|
||||
if (replaced != null && replaced != object)
|
||||
Log.e("Replaced object in object map! Old: %s New: %s", replaced, object);
|
||||
}
|
||||
|
||||
private SWGObject destroyObject(SWGObject object) {
|
||||
@@ -247,10 +231,8 @@ public class ObjectManager extends Manager {
|
||||
if (database.remove(object))
|
||||
database.save();
|
||||
}
|
||||
synchronized (objectMap) {
|
||||
objectMap.remove(object.getObjectId());
|
||||
}
|
||||
|
||||
objectMap.remove(object.getObjectId());
|
||||
|
||||
return object;
|
||||
}
|
||||
|
||||
|
||||
@@ -142,6 +142,7 @@ public class TestAwarenessHandler {
|
||||
awaitCallbacks(awareness);
|
||||
callback.testAssert(0, 0, 1, 0);
|
||||
callback.set(0, 0, 0, 0);
|
||||
creature.setPosition(Terrain.TATOOINE, 0, 0, 0);
|
||||
awareness.moveObject(creature, starport.getCellByNumber(1), new Location(0, 0, 0, Terrain.TATOOINE));
|
||||
awaitCallbacks(awareness);
|
||||
callback.testAssert(0, 0, 0, 0);
|
||||
|
||||
Reference in New Issue
Block a user