Merged projectswg/holocore into quality_assurance

This commit is contained in:
Tacef Ine
2017-06-15 12:29:52 +02:00
12 changed files with 160 additions and 150 deletions
Binary file not shown.
+49 -2
View File
@@ -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
+13 -1
View File
@@ -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");
}
}
+43 -69
View File
@@ -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);
}
}
+1 -2
View File
@@ -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);
}
+1 -1
View File
@@ -84,7 +84,7 @@ class TravelHelper {
}
public void stop() {
travelExecutor.stop();
travelExecutor.stop(false);
}
public void addTravelPoint(TravelPoint point) {
+1 -3
View File
@@ -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) {
+22 -40
View File
@@ -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);