diff --git a/addons/sourcemod/configs/rpg_fortress/downloads.cfg b/addons/sourcemod/configs/rpg_fortress/downloads.cfg index 4a81ddd222..0c4c43c7ce 100644 --- a/addons/sourcemod/configs/rpg_fortress/downloads.cfg +++ b/addons/sourcemod/configs/rpg_fortress/downloads.cfg @@ -19,10 +19,10 @@ "models/zombie_riot/weapons/soldier_hands/c_soldier_arms.dx90.vtx" "" "models/zombie_riot/weapons/soldier_hands/c_soldier_arms.mdl" "" "models/zombie_riot/weapons/soldier_hands/c_soldier_arms.vvd" "" - "models/zombie_riot/weapons/custom_weaponry_1_52.dx80.vtx" "" - "models/zombie_riot/weapons/custom_weaponry_1_52.dx90.vtx" "" - "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" "" - "models/zombie_riot/weapons/custom_weaponry_1_52.vvd" "" + "models/zombie_riot/weapons/custom_weaponry_1_57.dx80.vtx" "" + "models/zombie_riot/weapons/custom_weaponry_1_57.dx90.vtx" "" + "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "" + "models/zombie_riot/weapons/custom_weaponry_1_57.vvd" "" "models/zombie_riot/grigori/monk_custom.dx80.vtx" "" "models/zombie_riot/grigori/monk_custom.dx90.vtx" "" diff --git a/addons/sourcemod/configs/zombie_riot/challenges/boss_battle_roulette/vote.cfg b/addons/sourcemod/configs/zombie_riot/challenges/boss_battle_roulette/vote.cfg index efc4bec2fd..da69081fe4 100644 --- a/addons/sourcemod/configs/zombie_riot/challenges/boss_battle_roulette/vote.cfg +++ b/addons/sourcemod/configs/zombie_riot/challenges/boss_battle_roulette/vote.cfg @@ -24,6 +24,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/challenges/bossrush/special.cfg b/addons/sourcemod/configs/zombie_riot/challenges/bossrush/special.cfg index 0ba12d0410..6f93ebfd46 100644 --- a/addons/sourcemod/configs/zombie_riot/challenges/bossrush/special.cfg +++ b/addons/sourcemod/configs/zombie_riot/challenges/bossrush/special.cfg @@ -3,6 +3,7 @@ "gift_drop_chance_multiplier" "2.0" "grigori_special_shop_logic" "1" "resourceregen" "4.0" + "full_research" "1" "1" { "ammobox_extra" "15" @@ -177,7 +178,8 @@ "health" "3500000" "is_boss" "4" "is_immune_to_nuke" "1" - "extra_thinkspeed" "0.9" + "extra_thinkspeed" "0.8" + "extra_damage" "1.10" "extra_melee_res" "1.25" "is_health_scaling" "1" "plugin" "npc_kevinmery2009" @@ -185,24 +187,23 @@ "0.0" { "count" "0" - "health" "4000000" + "health" "4500000" "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" - "extra_damage" "0.90" + "extra_damage" "1.0" "extra_speed" "1.1" - "extra_thinkspeed" "0.9" + "extra_thinkspeed" "0.8" "plugin" "npc_agent_thompson" } "0.0" { "count" "0" - "health" "2000000" + "health" "2250000" "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" - "extra_damage" "0.80" - "extra_speed" "1.1" + "extra_speed" "1.2" "extra_thinkspeed" "0.9" "data" "Im_The_raid;My_Twin" "plugin" "npc_twins" @@ -210,18 +211,18 @@ "0.0" { "count" "0" - "health" "4000000" + "health" "4500000" "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" - "extra_speed" "1.75" - "extra_thinkspeed" "0.6" + "extra_speed" "1.70" + "extra_thinkspeed" "0.5" "plugin" "npc_agent_johnson" } "0.0" { "count" "0" - "health" "5000000" + "health" "5500000" "is_boss" "1" "is_immune_to_nuke" "1" "is_health_scaling" "1" @@ -231,10 +232,11 @@ "0.0" { "count" "0" - "health" "5000000" + "health" "6000000" "is_boss" "4" - "extra_speed" "1.1" - "extra_thinkspeed" "0.9" + "extra_damage" "1.0" + "extra_speed" "1.0" + "extra_thinkspeed" "1.0" "is_immune_to_nuke" "1" "is_health_scaling" "1" "plugin" "npc_omega_raid" @@ -248,6 +250,13 @@ "is_health_scaling" "1" "plugin" "npc_corruptedbarney" } + "0.1" + { + "count" "3" + "health" "150000" + "is_boss" "1" + "plugin" "npc_xeno_acclaimed_swordsman" + } "0.0" { "count" "0" @@ -256,6 +265,7 @@ "is_immune_to_nuke" "1" "is_health_scaling" "1" "extra_damage" "0.65" + "extra_speed" "1.1" "plugin" "npc_xeno_mrx" } "0.5" @@ -266,8 +276,9 @@ "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" - "extra_damage" "0.90" + "extra_damage" "0.75" "plugin" "npc_xeno_raidboss_nemesis" + "data" "enraged" } "0.0" { @@ -277,20 +288,19 @@ "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" - "extra_damage" "0.60" + "extra_damage" "0.65" "data" "final_item" "plugin" "npc_xeno_mrx" } "0.0" { "count" "0" - "health" "2000000" + "health" "3000000" "is_boss" "2" "is_immune_to_nuke" "1" "is_health_scaling" "1" "extra_damage" "0.90" "extra_speed" "0.9" - "extra_thinkspeed" "1.1" "plugin" "npc_sea_god_alaxios" "data" "sc40;seainfection;res5" } @@ -303,10 +313,10 @@ "0.5" { "count" "0" - "health" "4000000" + "health" "5000000" "is_health_scaling" "3" "is_immune_to_nuke" "1" - "is_boss" "2" + "is_boss" "3" "data" "bossrush_duo" "plugin" "npc_overlord_rogue" "extra_speed" "1.5" @@ -315,7 +325,7 @@ "0.5" { "count" "0" - "health" "6000000" + "health" "5000000" "is_boss" "3" "is_immune_to_nuke" "1" "is_health_scaling" "1" @@ -327,7 +337,7 @@ "10.0" { "count" "0" - "health" "600000" + "health" "500000" "is_health_scaling" "1" "data" "bossrush_duo" "custom_name" "Bladedance Clone" @@ -338,7 +348,7 @@ "10.0" { "count" "0" - "health" "600000" + "health" "500000" "is_health_scaling" "1" "data" "bossrush_duo" "custom_name" "Bladedance Clone" @@ -349,7 +359,7 @@ "10.0" { "count" "0" - "health" "600000" + "health" "500000" "is_health_scaling" "1" "data" "bossrush_duo" "custom_name" "Bladedance Clone" @@ -360,7 +370,7 @@ "10.0" { "count" "0" - "health" "600000" + "health" "500000" "is_health_scaling" "1" "data" "bossrush_duo" "custom_name" "Bladedance Clone" @@ -371,7 +381,7 @@ "0.0" { "count" "0" - "health" "600000" + "health" "500000" "is_health_scaling" "1" "data" "bossrush_duo" "custom_name" "Bladedance Clone" @@ -382,7 +392,7 @@ "0.5" { "count" "0" - "health" "4500000" + "health" "5000000" "is_boss" "4" "extra_damage" "1.15" "extra_thinkspeed" "0.9" @@ -394,7 +404,7 @@ "0.0" { "count" "0" - "health" "7500000" + "health" "5000000" "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" @@ -406,7 +416,7 @@ "0.0" { "count" "0" - "health" "7500000" + "health" "10000000" "extra_damage" "0.75" "is_boss" "4" "is_immune_to_nuke" "1" @@ -424,7 +434,7 @@ "extra_thinkspeed" "1.2" "plugin" "npc_lelouch" } - "0.0" + "0.5" { "count" "0" "health" "3000000" @@ -432,7 +442,7 @@ "is_immune_to_nuke" "1" "is_health_scaling" "1" "plugin" "npc_boss_reila" - "extra_damage" "0.90" + "extra_damage" "0.75" "data" "force_final_battle" } "2.0" @@ -442,7 +452,7 @@ "extra_melee_res" "1.0" "extra_ranged_res" "1.0" "extra_speed" "1.0" - "health" "75000" + "health" "150000" "plugin" "npc_umbral_ltzens" } "2.0" @@ -452,20 +462,40 @@ "extra_melee_res" "1.0" "extra_ranged_res" "1.0" "extra_speed" "1.0" - "health" "70000" + "health" "75000" "plugin" "npc_umbral_refract" } - "15.0" + "11.0" { "count" "3" "extra_damage" "1.25" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" "extra_speed" "1.0" - "health" "75000" + "health" "100000" "plugin" "npc_umbral_spuud" } "2.0" + { + "count" "3" + "extra_damage" "1.25" + "extra_melee_res" "1.0" + "extra_ranged_res" "1.0" + "extra_speed" "1.0" + "health" "150000" + "plugin" "npc_umbral_ltzens" + } + "2.0" + { + "count" "3" + "extra_damage" "1.25" + "extra_melee_res" "1.0" + "extra_ranged_res" "1.0" + "extra_speed" "1.0" + "health" "75000" + "plugin" "npc_umbral_refract" + } + "11.0" { "count" "3" "extra_damage" "1.25" @@ -473,6 +503,16 @@ "extra_ranged_res" "1.0" "extra_speed" "1.0" "health" "100000" + "plugin" "npc_umbral_spuud" + } + "2.0" + { + "count" "3" + "extra_damage" "1.25" + "extra_melee_res" "1.0" + "extra_ranged_res" "1.0" + "extra_speed" "1.0" + "health" "150000" "plugin" "npc_umbral_ltzens" } "2.0" @@ -482,7 +522,7 @@ "extra_melee_res" "1.0" "extra_ranged_res" "1.0" "extra_speed" "1.0" - "health" "70000" + "health" "75000" "plugin" "npc_umbral_refract" } "0.0" @@ -495,7 +535,7 @@ "health" "100000" "plugin" "npc_umbral_spuud" } - "0.0" + "0.5" { "count" "0" "health" "7500000" @@ -514,7 +554,7 @@ "extra_melee_res" "1.0" "extra_ranged_res" "1.0" "extra_speed" "1.0" - "health" "100000" + "health" "150000" "plugin" "npc_umbral_ltzens" } "2.0" @@ -524,7 +564,7 @@ "extra_melee_res" "1.0" "extra_ranged_res" "1.0" "extra_speed" "1.0" - "health" "70000" + "health" "75000" "plugin" "npc_umbral_refract" } "2.0" @@ -534,7 +574,7 @@ "extra_melee_res" "1.0" "extra_ranged_res" "1.0" "extra_speed" "1.0" - "health" "75000" + "health" "100000" "plugin" "npc_umbral_spuud" } "2.0" @@ -558,7 +598,7 @@ "health" "25000" "plugin" "npc_chaos_mage" } - "15.0" + "11.0" { "count" "3" @@ -572,7 +612,7 @@ "extra_melee_res" "1.0" "extra_ranged_res" "1.0" "extra_speed" "1.0" - "health" "100000" + "health" "150000" "plugin" "npc_umbral_ltzens" } "2.0" @@ -582,10 +622,58 @@ "extra_melee_res" "1.0" "extra_ranged_res" "1.0" "extra_speed" "1.0" - "health" "70000" + "health" "75000" "plugin" "npc_umbral_refract" } "2.0" + { + "count" "3" + "extra_damage" "1.25" + "extra_melee_res" "1.0" + "extra_ranged_res" "1.0" + "extra_speed" "1.0" + "health" "100000" + "plugin" "npc_umbral_spuud" + } + "2.0" + { + "count" "3" + + "health" "25000" + "plugin" "npc_chaos_insane" + } + "2.0" + { + "count" "3" + + "health" "25000" + "plugin" "npc_chaos_supporter" + } + "2.0" + { + "count" "3" + + "health" "25000" + "plugin" "npc_chaos_mage" + } + "11.0" + { + "count" "3" + + "health" "25000" + "plugin" "npc_chaos_swordsman" + } + "2.0" + { + "count" "3" + "extra_damage" "1.25" + "extra_melee_res" "1.0" + "extra_ranged_res" "1.0" + "extra_speed" "1.0" + "health" "150000" + "plugin" "npc_umbral_ltzens" + } + "2.0" { "count" "3" "extra_damage" "1.25" @@ -593,6 +681,16 @@ "extra_ranged_res" "1.0" "extra_speed" "1.0" "health" "75000" + "plugin" "npc_umbral_refract" + } + "2.0" + { + "count" "3" + "extra_damage" "1.25" + "extra_melee_res" "1.0" + "extra_ranged_res" "1.0" + "extra_speed" "1.0" + "health" "100000" "plugin" "npc_umbral_spuud" } "2.0" @@ -632,10 +730,10 @@ "is_health_scaling" "1" "extra_damage" "0.75" "extra_thinkspeed" "1.2" - "data" "sc25;force_final_battle" + "data" "sc40;force_final_battle" "plugin" "npc_shadowing_darkness_boss" } - "0.0" + "0.5" { "count" "0" "health" "10000000" @@ -648,222 +746,344 @@ "data" "bossrush" "plugin" "npc_zilius" } - "1.0" + "2.0" { "count" "3" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_vaus_shaldus" // Ranged, Giant, Shielder } - "1.0" + "2.0" { - "count" "6" + "count" "4" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_armsa_manu" // Melee, ASPD } - "1.0" + "2.0" { - "count" "6" + "count" "4" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_eirasus" // Melee, Fast, Shields, Anger } - "1.0" + "2.0" { "count" "2" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.75" "plugin" "npc_biggun_assisa" // Ranged, Giant, ASPD } - "1.0" + "2.0" { "count" "6" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_cuttus_siccino" // Melee, Fast, Debuff } - "1.0" + "2.0" { "count" "2" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_damage" "2.0" "extra_thinkspeed" "0.75" "plugin" "npc_diversionistico_elitus" // Melee, Camo, Fast, Debuff } - "1.0" + "2.0" { "count" "2" - "health" "100000" - "extra_damage" "0.90" + "health" "150000" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.75" "plugin" "npc_hia_rejuvinator" // Healer, Buffer } - "1.0" + "2.0" { "count" "2" "health" "100000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.75" "data" "3.0" "plugin" "npc_haltera" // Melee, Giant, Healer } - "1.0" + "2.0" { "count" "5" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_flaigus" // Melee, Fast, Jumper } - "1.0" + "2.0" { "count" "5" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_speed" "1.0" "extra_thinkspeed" "0.75" "plugin" "npc_speedus_absolutos" // Melee, Fast, Lives } - "1.0" + "2.0" { "count" "5" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_selfam_scythus" // Melee, Jumper } "15.0" { - "count" "5" - "health" "175000" - "extra_damage" "0.90" + "count" "2" + "health" "200000" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.9" "plugin" "npc_soldinus_ilus" // Ranged, Jumper } - "1.0" + "2.0" { "count" "3" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_vaus_shaldus" // Ranged, Giant, Shielder } - "1.0" + "2.0" { - "count" "6" + "count" "4" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_armsa_manu" // Melee, ASPD } - "1.0" + "2.0" { - "count" "6" + "count" "4" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_eirasus" // Melee, Fast, Shields, Anger } - "1.0" + "2.0" { "count" "2" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.75" "plugin" "npc_biggun_assisa" // Ranged, Giant, ASPD } - "1.0" + "2.0" { "count" "6" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_cuttus_siccino" // Melee, Fast, Debuff } - "1.0" + "2.0" { "count" "2" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_damage" "2.0" "extra_thinkspeed" "0.75" "plugin" "npc_diversionistico_elitus" // Melee, Camo, Fast, Debuff } - "1.0" + "2.0" + { + "count" "2" + "health" "150000" + "extra_damage" "0.75" + "is_boss" "1" + + "extra_thinkspeed" "0.75" + "plugin" "npc_hia_rejuvinator" // Healer, Buffer + } + "2.0" { "count" "2" "health" "100000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" + + "extra_thinkspeed" "0.75" + "data" "3.0" + "plugin" "npc_haltera" // Melee, Giant, Healer + } + "2.0" + { + "count" "5" + "health" "80000" + "extra_damage" "0.75" + + "extra_thinkspeed" "0.75" + "plugin" "npc_flaigus" // Melee, Fast, Jumper + } + "2.0" + { + "count" "5" + "health" "75000" + "extra_damage" "0.75" + "extra_speed" "1.0" + "extra_thinkspeed" "0.75" + "plugin" "npc_speedus_absolutos" // Melee, Fast, Lives + } + "2.0" + { + "count" "5" + "health" "80000" + "extra_damage" "0.75" + + "extra_thinkspeed" "0.75" + "plugin" "npc_selfam_scythus" // Melee, Jumper + } + "15.0" + { + "count" "2" + "health" "200000" + "extra_damage" "0.75" + "is_boss" "1" + + "extra_thinkspeed" "0.9" + "plugin" "npc_soldinus_ilus" // Ranged, Jumper + } + "2.0" + { + "count" "3" + "health" "80000" + "extra_damage" "0.75" + + "extra_thinkspeed" "0.75" + "plugin" "npc_vaus_shaldus" // Ranged, Giant, Shielder + } + "2.0" + { + "count" "4" + "health" "75000" + "extra_damage" "0.75" + + "extra_thinkspeed" "0.75" + "plugin" "npc_armsa_manu" // Melee, ASPD + } + "2.0" + { + "count" "4" + "health" "80000" + "extra_damage" "0.75" + + "extra_thinkspeed" "0.75" + "plugin" "npc_eirasus" // Melee, Fast, Shields, Anger + } + "2.0" + { + "count" "2" + "health" "75000" + "extra_damage" "0.75" + "is_boss" "1" + + "extra_thinkspeed" "0.75" + "plugin" "npc_biggun_assisa" // Ranged, Giant, ASPD + } + "2.0" + { + "count" "6" + "health" "80000" + "extra_damage" "0.75" + + "extra_thinkspeed" "0.75" + "plugin" "npc_cuttus_siccino" // Melee, Fast, Debuff + } + "2.0" + { + "count" "2" + "health" "75000" + "extra_damage" "0.75" + + "extra_damage" "2.0" + "extra_thinkspeed" "0.75" + "plugin" "npc_diversionistico_elitus" // Melee, Camo, Fast, Debuff + } + "2.0" + { + "count" "2" + "health" "150000" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.75" "plugin" "npc_hia_rejuvinator" // Healer, Buffer } - "1.0" + "2.0" { "count" "2" "health" "100000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.75" "data" "3.0" "plugin" "npc_haltera" // Melee, Giant, Healer } - "1.0" + "2.0" { "count" "5" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_flaigus" // Melee, Fast, Jumper } - "1.0" + "2.0" { "count" "5" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_speed" "1.0" "extra_thinkspeed" "0.75" "plugin" "npc_speedus_absolutos" // Melee, Fast, Lives } - "1.0" + "2.0" { "count" "5" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_selfam_scythus" // Melee, Jumper } "0.0" { - "count" "5" - "health" "175000" - "extra_damage" "0.90" + "count" "2" + "health" "200000" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.9" "plugin" "npc_soldinus_ilus" // Ranged, Jumper diff --git a/addons/sourcemod/configs/zombie_riot/challenges/bossrush/ultra.cfg b/addons/sourcemod/configs/zombie_riot/challenges/bossrush/ultra.cfg index 7f6cc180b0..d93815d127 100644 --- a/addons/sourcemod/configs/zombie_riot/challenges/bossrush/ultra.cfg +++ b/addons/sourcemod/configs/zombie_riot/challenges/bossrush/ultra.cfg @@ -4,6 +4,7 @@ "grigori_special_shop_logic" "1" "resourceregen" "4.0" "fakemaxwaves" "60" + "full_research" "1" "1" { "ammobox_extra" "15" @@ -252,8 +253,9 @@ "is_boss" "4" "is_immune_to_nuke" "1" "extra_melee_res" "1.25" + "extra_damage" "1.10" "is_health_scaling" "1" - "extra_thinkspeed" "0.9" + "extra_thinkspeed" "0.8" "plugin" "npc_kevinmery2009" } "0.0" @@ -304,37 +306,36 @@ "0.0" { "count" "0" - "health" "4000000" + "health" "4500000" "is_boss" "4" "is_immune_to_nuke" "1" - "extra_damage" "0.90" + "extra_damage" "1.0" "is_health_scaling" "1" "extra_speed" "1.1" - "extra_thinkspeed" "0.9" + "extra_thinkspeed" "0.8" "plugin" "npc_agent_thompson" } "0.0" { "count" "0" - "health" "2000000" + "health" "2250000" "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" "plugin" "npc_twins" - "extra_damage" "0.80" - "extra_speed" "1.1" + "extra_speed" "1.2" "extra_thinkspeed" "0.9" "data" "Im_The_raid;My_Twin" } "0.0" { "count" "0" - "health" "4000000" + "health" "4500000" "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" - "extra_speed" "1.75" - "extra_thinkspeed" "0.6" + "extra_speed" "1.70" + "extra_thinkspeed" "0.5" "plugin" "npc_agent_johnson" } "0.0" @@ -350,7 +351,7 @@ "0.0" { "count" "0" - "health" "3000000" + "health" "4000000" "data" "sc40;hyper" "is_boss" "2" "is_immune_to_nuke" "1" @@ -396,11 +397,12 @@ "0.0" { "count" "0" - "health" "5000000" + "health" "6000000" "is_boss" "4" "is_immune_to_nuke" "1" - "extra_speed" "1.1" - "extra_thinkspeed" "0.9" + "extra_damage" "1.0" + "extra_speed" "1.0" + "extra_thinkspeed" "1.0" "is_health_scaling" "1" "plugin" "npc_omega_raid" } @@ -528,7 +530,6 @@ { "count" "0" "health" "7500000" - "extra_damage" "0.95" "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" @@ -576,9 +577,16 @@ "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" - "data" "sc40;forceangry" + "data" "sc40;forceangry;forcesad" "plugin" "npc_vincent" } + "0.1" + { + "count" "3" + "health" "150000" + "is_boss" "1" + "plugin" "npc_xeno_acclaimed_swordsman" + } "0.0" { "cash" "0" @@ -587,6 +595,7 @@ "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" + "extra_speed" "1.1" "extra_damage" "0.65" "plugin" "npc_xeno_mrx" } @@ -598,8 +607,9 @@ "is_boss" "3" "is_immune_to_nuke" "1" "is_health_scaling" "1" - "extra_damage" "0.90" + "extra_damage" "0.75" "plugin" "npc_xeno_raidboss_nemesis" + "data" "enraged" } "0.0" { @@ -609,17 +619,19 @@ "is_boss" "3" "is_immune_to_nuke" "1" "is_health_scaling" "1" - "extra_damage" "0.60" + "extra_damage" "0.65" "data" "final_item" "plugin" "npc_xeno_mrx" } "0.0" { "count" "0" - "health" "200000" + "health" "3000000" "is_boss" "2" "is_immune_to_nuke" "1" "is_health_scaling" "1" + "extra_damage" "0.90" + "extra_speed" "0.9" "plugin" "npc_sea_god_alaxios" "data" "sc40;seainfection;res5" } @@ -631,19 +643,18 @@ "0.5" { "count" "0" - "health" "4000000" + "health" "5000000" "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" "extra_speed" "1.5" "data" "bossrush_duo" "plugin" "npc_overlord_rogue" - "extra_damage" "0.85" } "0.5" { "count" "0" - "health" "6000000" + "health" "5000000" "is_boss" "4" "extra_speed" "1.5" "is_immune_to_nuke" "1" @@ -655,7 +666,7 @@ "10.0" { "count" "0" - "health" "600000" + "health" "500000" "is_health_scaling" "1" "data" "bossrush_duo" "custom_name" "Bladedance Clone" @@ -666,7 +677,7 @@ "10.0" { "count" "0" - "health" "600000" + "health" "500000" "is_health_scaling" "1" "data" "bossrush_duo" "custom_name" "Bladedance Clone" @@ -677,7 +688,7 @@ "10.0" { "count" "0" - "health" "600000" + "health" "500000" "is_health_scaling" "1" "data" "bossrush_duo" "custom_name" "Bladedance Clone" @@ -688,7 +699,7 @@ "10.0" { "count" "0" - "health" "600000" + "health" "500000" "is_health_scaling" "1" "data" "bossrush_duo" "custom_name" "Bladedance Clone" @@ -699,7 +710,7 @@ "0.0" { "count" "0" - "health" "600000" + "health" "500000" "is_health_scaling" "1" "data" "bossrush_duo" "custom_name" "Bladedance Clone" @@ -710,7 +721,7 @@ "0.5" { "count" "0" - "health" "4500000" + "health" "5000000" "is_boss" "4" "extra_damage" "1.15" "extra_thinkspeed" "0.9" @@ -722,7 +733,7 @@ "0.0" { "count" "0" - "health" "6000000" + "health" "5000000" "is_boss" "4" "is_immune_to_nuke" "1" "is_health_scaling" "1" @@ -734,7 +745,7 @@ "0.0" { "count" "0" - "health" "7500000" + "health" "10000000" "is_boss" "4" "extra_damage" "0.75" "is_immune_to_nuke" "1" @@ -783,7 +794,7 @@ "health" "75000" "plugin" "npc_umbral_refract" } - "15.0" + "11.0" { "count" "3" "extra_damage" "1.25" @@ -794,6 +805,36 @@ "plugin" "npc_umbral_spuud" } "2.0" + { + "count" "3" + "extra_damage" "1.25" + "extra_melee_res" "1.0" + "extra_ranged_res" "1.0" + "extra_speed" "1.0" + "health" "75000" + "plugin" "npc_umbral_ltzens" + } + "2.0" + { + "count" "3" + "extra_damage" "1.25" + "extra_melee_res" "1.0" + "extra_ranged_res" "1.0" + "extra_speed" "1.0" + "health" "70000" + "plugin" "npc_umbral_refract" + } + "11.0" + { + "count" "3" + "extra_damage" "1.25" + "extra_melee_res" "1.0" + "extra_ranged_res" "1.0" + "extra_speed" "1.0" + "health" "75000" + "plugin" "npc_umbral_spuud" + } + "2.0" { "count" "3" "extra_damage" "1.25" @@ -885,7 +926,7 @@ "health" "25000" "plugin" "npc_chaos_mage" } - "15.0" + "11.0" { "count" "3" @@ -960,12 +1001,12 @@ "is_immune_to_nuke" "1" "is_health_scaling" "1" "plugin" "npc_shadowing_darkness_boss" - "data" "sc25;force_final_battle" + "data" "sc40;force_final_battle" } "0.5" { "count" "0" - "health" "10000000" + "health" "7500000" "is_boss" "2" "extra_damage" "0.75" "is_immune_to_nuke" "1" @@ -975,222 +1016,344 @@ "data" "bossrush" "plugin" "npc_zilius" } - "1.0" + "2.0" { "count" "3" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_vaus_shaldus" // Ranged, Giant, Shielder } - "1.0" + "2.0" { - "count" "6" + "count" "4" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_armsa_manu" // Melee, ASPD } - "1.0" + "2.0" { - "count" "6" + "count" "4" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_eirasus" // Melee, Fast, Shields, Anger } - "1.0" + "2.0" { "count" "2" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.75" "plugin" "npc_biggun_assisa" // Ranged, Giant, ASPD } - "1.0" + "2.0" { "count" "6" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_cuttus_siccino" // Melee, Fast, Debuff } - "1.0" + "2.0" { "count" "2" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_damage" "2.0" "extra_thinkspeed" "0.75" "plugin" "npc_diversionistico_elitus" // Melee, Camo, Fast, Debuff } - "1.0" + "2.0" { "count" "2" "health" "150000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.75" "plugin" "npc_hia_rejuvinator" // Healer, Buffer } - "1.0" + "2.0" { "count" "2" "health" "100000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.75" "data" "3.0" "plugin" "npc_haltera" // Melee, Giant, Healer } - "1.0" + "2.0" { "count" "5" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_flaigus" // Melee, Fast, Jumper } - "1.0" + "2.0" { "count" "5" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_speed" "1.0" "extra_thinkspeed" "0.75" "plugin" "npc_speedus_absolutos" // Melee, Fast, Lives } - "1.0" + "2.0" { "count" "5" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_selfam_scythus" // Melee, Jumper } "15.0" { - "count" "5" + "count" "2" "health" "200000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.9" "plugin" "npc_soldinus_ilus" // Ranged, Jumper } - "1.0" + "2.0" { "count" "3" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_vaus_shaldus" // Ranged, Giant, Shielder } - "1.0" + "2.0" { - "count" "6" + "count" "4" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_armsa_manu" // Melee, ASPD } - "1.0" + "2.0" + { + "count" "4" + "health" "80000" + "extra_damage" "0.75" + + "extra_thinkspeed" "0.75" + "plugin" "npc_eirasus" // Melee, Fast, Shields, Anger + } + "2.0" + { + "count" "2" + "health" "75000" + "extra_damage" "0.75" + "is_boss" "1" + + "extra_thinkspeed" "0.75" + "plugin" "npc_biggun_assisa" // Ranged, Giant, ASPD + } + "2.0" { "count" "6" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" + + "extra_thinkspeed" "0.75" + "plugin" "npc_cuttus_siccino" // Melee, Fast, Debuff + } + "2.0" + { + "count" "2" + "health" "75000" + "extra_damage" "0.75" + + "extra_damage" "2.0" + "extra_thinkspeed" "0.75" + "plugin" "npc_diversionistico_elitus" // Melee, Camo, Fast, Debuff + } + "2.0" + { + "count" "2" + "health" "150000" + "extra_damage" "0.75" + "is_boss" "1" + + "extra_thinkspeed" "0.75" + "plugin" "npc_hia_rejuvinator" // Healer, Buffer + } + "2.0" + { + "count" "2" + "health" "100000" + "extra_damage" "0.75" + "is_boss" "1" + + "extra_thinkspeed" "0.75" + "data" "3.0" + "plugin" "npc_haltera" // Melee, Giant, Healer + } + "2.0" + { + "count" "5" + "health" "80000" + "extra_damage" "0.75" + + "extra_thinkspeed" "0.75" + "plugin" "npc_flaigus" // Melee, Fast, Jumper + } + "2.0" + { + "count" "5" + "health" "75000" + "extra_damage" "0.75" + "extra_speed" "1.0" + "extra_thinkspeed" "0.75" + "plugin" "npc_speedus_absolutos" // Melee, Fast, Lives + } + "2.0" + { + "count" "5" + "health" "80000" + "extra_damage" "0.75" + + "extra_thinkspeed" "0.75" + "plugin" "npc_selfam_scythus" // Melee, Jumper + } + "15.0" + { + "count" "2" + "health" "200000" + "extra_damage" "0.75" + "is_boss" "1" + + "extra_thinkspeed" "0.9" + "plugin" "npc_soldinus_ilus" // Ranged, Jumper + } + "2.0" + { + "count" "3" + "health" "80000" + "extra_damage" "0.75" + + "extra_thinkspeed" "0.75" + "plugin" "npc_vaus_shaldus" // Ranged, Giant, Shielder + } + "2.0" + { + "count" "4" + "health" "75000" + "extra_damage" "0.75" + + "extra_thinkspeed" "0.75" + "plugin" "npc_armsa_manu" // Melee, ASPD + } + "2.0" + { + "count" "4" + "health" "80000" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_eirasus" // Melee, Fast, Shields, Anger } - "1.0" + "2.0" { "count" "2" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.75" "plugin" "npc_biggun_assisa" // Ranged, Giant, ASPD } - "1.0" + "2.0" { "count" "6" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_cuttus_siccino" // Melee, Fast, Debuff } - "1.0" + "2.0" { "count" "2" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_damage" "2.0" "extra_thinkspeed" "0.75" "plugin" "npc_diversionistico_elitus" // Melee, Camo, Fast, Debuff } - "1.0" + "2.0" { "count" "2" "health" "150000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.75" "plugin" "npc_hia_rejuvinator" // Healer, Buffer } - "1.0" + "2.0" { "count" "2" "health" "100000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.75" "data" "3.0" "plugin" "npc_haltera" // Melee, Giant, Healer } - "1.0" + "2.0" { "count" "5" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_flaigus" // Melee, Fast, Jumper } - "1.0" + "2.0" { "count" "5" "health" "75000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_speed" "1.0" "extra_thinkspeed" "0.75" "plugin" "npc_speedus_absolutos" // Melee, Fast, Lives } - "1.0" + "2.0" { "count" "5" "health" "80000" - "extra_damage" "0.90" + "extra_damage" "0.75" "extra_thinkspeed" "0.75" "plugin" "npc_selfam_scythus" // Melee, Jumper } "0.0" { - "count" "5" + "count" "2" "health" "200000" - "extra_damage" "0.90" + "extra_damage" "0.75" + "is_boss" "1" "extra_thinkspeed" "0.9" "plugin" "npc_soldinus_ilus" // Ranged, Jumper diff --git a/addons/sourcemod/configs/zombie_riot/challenges/bossrush/vote.cfg b/addons/sourcemod/configs/zombie_riot/challenges/bossrush/vote.cfg index 99891ce8f5..c6936b4121 100644 --- a/addons/sourcemod/configs/zombie_riot/challenges/bossrush/vote.cfg +++ b/addons/sourcemod/configs/zombie_riot/challenges/bossrush/vote.cfg @@ -48,6 +48,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/challenges/defense/vote.cfg b/addons/sourcemod/configs/zombie_riot/challenges/defense/vote.cfg index fd8bd68a39..7155d40201 100644 --- a/addons/sourcemod/configs/zombie_riot/challenges/defense/vote.cfg +++ b/addons/sourcemod/configs/zombie_riot/challenges/defense/vote.cfg @@ -30,6 +30,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/challenges/freeplay/advanced.cfg b/addons/sourcemod/configs/zombie_riot/challenges/freeplay/advanced.cfg index 62ea1e3c48..fc8aae346d 100644 --- a/addons/sourcemod/configs/zombie_riot/challenges/freeplay/advanced.cfg +++ b/addons/sourcemod/configs/zombie_riot/challenges/freeplay/advanced.cfg @@ -264,8 +264,8 @@ } "2.5" { - "count" "25" - "health" "70000" + "count" "7" + "health" "200000" "plugin" "npc_igniter" "extra_damage" "2.01" "danger_level" "1" @@ -455,6 +455,24 @@ "danger_level" "1" } "2.5" + { + "count" "25" + "health" "70000" + "plugin" "npc_poisonheadcrab" + "extra_damage" "2.01" + "extra_speed" "1.0" + "danger_level" "1" + } + "2.5" + { + "count" "25" + "health" "70000" + "plugin" "npc_headcrab" + "extra_damage" "2.01" + "extra_speed" "1.0" + "danger_level" "1" + } + "2.5" { "count" "25" "health" "70000" @@ -973,13 +991,40 @@ } "2.5" { - "count" "25" + "count" "7" "health" "100000" "plugin" "npc_aperture_halter" "extra_damage" "2.01" "extra_speed" "1.0" "danger_level" "1" } + "2.5" + { + "count" "10" + "health" "30000" + "plugin" "npc_refragmented_headcrabzombie" + "extra_damage" "2.51" + "extra_speed" "1.0" + "danger_level" "1" + } + "2.5" + { + "count" "10" + "health" "30000" + "plugin" "npc_refragmented_fastzombie" + "extra_damage" "2.51" + "extra_speed" "1.0" + "danger_level" "1" + } + "2.5" + { + "count" "10" + "health" "30000" + "plugin" "npc_refragmented_poisonzombie" + "extra_damage" "2.51" + "extra_speed" "1.0" + "danger_level" "1" + } //all wave 1-15 bosses here "2.5" @@ -1056,7 +1101,6 @@ "danger_level" "1" "is_boss" "1" } - "2.5" { "count" "1" @@ -1076,6 +1120,16 @@ "is_boss" "1" } "2.5" + { + "count" "0" + "health" "1000000" + "plugin" "npc_undertides" + "extra_damage" "12.5" + "extra_thinkspeed" "0.50" + "danger_level" "1" + "is_boss" "1" + } + "2.5" { "count" "1" "health" "1750000" @@ -1087,7 +1141,7 @@ } "2.5" { - "count" "1" + "count" "0" "health" "2250000" "plugin" "npc_doctor_city" "data" "nightmare" @@ -1374,6 +1428,62 @@ "danger_level" "2" } "2.5" + { + "count" "25" + "health" "75000" + "plugin" "npc_troll_ar2" + "extra_damage" "1.81" + "danger_level" "2" + } + "2.5" + { + "count" "25" + "health" "75000" + "plugin" "npc_troll_melee" + "extra_damage" "1.81" + "danger_level" "2" + } + "2.5" + { + "count" "25" + "health" "75000" + "plugin" "npc_troll_pistol" + "extra_damage" "1.81" + "danger_level" "2" + } + "2.5" + { + "count" "25" + "health" "75000" + "plugin" "npc_troll_rpg" + "extra_damage" "1.81" + "danger_level" "2" + } + "2.5" + { + "count" "25" + "health" "75000" + "plugin" "npc_zmain_headcrab" + "extra_damage" "1.81" + "danger_level" "2" + } + "2.5" + { + "count" "25" + "health" "75000" + "plugin" "npc_zmain_headcrabzombie" + "extra_damage" "1.81" + "danger_level" "2" + } + "2.5" + { + "count" "25" + "health" "75000" + "plugin" "npc_zmain_poisonzombie" + "extra_damage" "1.81" + "danger_level" "2" + } + "2.5" { "count" "1" "health" "350000" @@ -1390,6 +1500,14 @@ "danger_level" "2" } "2.5" + { + "count" "7" + "health" "250000" + "plugin" "npc_alt_the_shit_slapper" + "extra_damage" "1.81" + "danger_level" "2" + } + "2.5" { "count" "7" "health" "250000" @@ -2040,12 +2158,36 @@ } "2.5" { - "count" "25" + "count" "7" "health" "200000" "plugin" "npc_aperture_suppressor" "extra_damage" "1.81" "danger_level" "2" } + "2.5" + { + "count" "10" + "health" "32500" + "plugin" "npc_refragmented_combine_police_pistol" + "extra_damage" "2.01" + "danger_level" "2" + } + "2.5" + { + "count" "10" + "health" "32500" + "plugin" "npc_refragmented_combine_soldier_ar2" + "extra_damage" "2.01" + "danger_level" "2" + } + "2.5" + { + "count" "10" + "health" "32500" + "plugin" "npc_refragmented_combine_soldier_elite" + "extra_damage" "2.01" + "danger_level" "2" + } //Bosses "2.5" @@ -2067,6 +2209,15 @@ "is_boss" "1" } "2.5" + { + "count" "0" + "health" "2350000" + "plugin" "npc_huirgrajo" + "extra_damage" "2.21" + "danger_level" "2" + "is_boss" "1" + } + "2.5" { "count" "1" "health" "1250000" @@ -2112,6 +2263,15 @@ "is_boss" "1" } "2.5" + { + "count" "0" + "health" "2350000" + "plugin" "npc_endspeaker_4" + "extra_damage" "2.21" + "danger_level" "2" + "is_boss" "1" + } + "2.5" { "count" "1" "health" "2350000" @@ -2131,7 +2291,7 @@ } "2.5" { - "count" "1" + "count" "0" "health" "2350000" "plugin" "npc_xenomalf_robot" "data" "nightmare" @@ -2141,7 +2301,7 @@ } "2.5" { - "count" "1" + "count" "0" "health" "2350000" "plugin" "npc_addiction" "extra_damage" "3.21" @@ -2176,6 +2336,15 @@ "danger_level" "2" "is_boss" "1" } + "2.5" + { + "count" "0" + "health" "2000000" + "plugin" "npc_male07" + "extra_damage" "1.51" + "danger_level" "2" + "is_boss" "1" + } //wave 31-45 enemies. "2.5" { @@ -2246,7 +2415,7 @@ "count" "25" "health" "80000" "plugin" "npc_victorian_artillerist" - "extra_damage" "1.41" + "extra_damage" "1.51" "danger_level" "3" } "2.5" @@ -3071,6 +3240,54 @@ "danger_level" "3" } "2.5" + { + "count" "10" + "health" "300000" + "plugin" "npc_buster_man" + "extra_damage" "2.01" + "danger_level" "3" + } + "2.5" + { + "count" "25" + "health" "80000" + "plugin" "npc_error_melee" + "extra_damage" "1.41" + "danger_level" "3" + } + "2.5" + { + "count" "15" + "health" "100000" + "plugin" "npc_ammobox" + "extra_damage" "1.51" + "danger_level" "3" + } + "2.5" + { + "count" "15" + "health" "100000" + "plugin" "npc_perkmachine" + "extra_damage" "1.51" + "danger_level" "3" + } + "2.5" + { + "count" "15" + "health" "100000" + "plugin" "npc_packapunch" + "extra_damage" "1.51" + "danger_level" "3" + } + "2.5" + { + "count" "25" + "health" "80000" + "plugin" "npc_error_ranged" + "extra_damage" "1.41" + "danger_level" "3" + } + "2.5" { "count" "25" "health" "75000" @@ -3216,12 +3433,36 @@ } "2.5" { - "count" "25" + "count" "7" "health" "300000" "plugin" "npc_aperture_fueler" "extra_damage" "1.41" "danger_level" "3" } + "2.5" + { + "count" "10" + "health" "40000" + "plugin" "npc_refragmented_heavy" + "extra_damage" "1.81" + "danger_level" "3" + } + "2.5" + { + "count" "10" + "health" "20000" + "plugin" "npc_refragmented_medic" + "extra_damage" "1.81" + "danger_level" "3" + } + "2.5" + { + "count" "10" + "health" "40000" + "plugin" "npc_refragmented_spy" + "extra_damage" "1.81" + "danger_level" "3" + } //Bosses "2.5" @@ -3244,8 +3485,8 @@ } "2.5" { - "count" "1" - "health" "4000000" + "count" "0" + "health" "2000000" "plugin" "npc_ruina_ruliana" "extra_damage" "2.21" "danger_level" "3" @@ -3360,6 +3601,16 @@ "extra_damage" "2.0" "danger_level" "3" } + "2.5" + { + "count" "1" + "health" "2000000" + "is_boss" "1" + "plugin" "npc_merlton_boss" + "extra_damage" "2.0" + "data" "enraged" + "danger_level" "3" + } //wave 46-60 "2.5" @@ -3824,6 +4075,15 @@ "danger_level" "4" } "2.5" + { + "count" "25" + "health" "85000" + "plugin" "npc_seaborn_supporter" + "data" "normal" + "extra_damage" "1.31" + "danger_level" "4" + } + "2.5" { "count" "25" "health" "85000" @@ -4041,19 +4301,43 @@ } "2.5" { - "count" "25" + "count" "7" "health" "400000" "plugin" "npc_aperture_collector" "extra_damage" "1.31" "danger_level" "4" } "2.5" + { + "count" "10" + "health" "42500" + "plugin" "npc_refragmented_parasihtta" + "extra_damage" "2.0" + "danger_level" "4" + } + "2.5" + { + "count" "10" + "health" "42500" + "plugin" "npc_refragmented_defectio" + "extra_damage" "1.61" + "danger_level" "4" + } + "2.5" + { + "count" "10" + "health" "42500" + "plugin" "npc_refragmented_hostis" + "extra_damage" "1.61" + "danger_level" "4" + } + "2.5" { "count" "10" "health" "100000" "extra_damage" "1.26" "plugin" "npc_agent_61" - "danger_level" "5" + "danger_level" "4" } "2.5" { @@ -4061,7 +4345,7 @@ "health" "100000" "extra_damage" "1.26" "plugin" "npc_barbaric_teardown" - "danger_level" "5" + "danger_level" "4" } "2.5" { @@ -4069,7 +4353,7 @@ "health" "100000" "extra_damage" "1.26" "plugin" "npc_battlefield_supplier" - "danger_level" "5" + "danger_level" "4" } "2.5" { @@ -4077,7 +4361,7 @@ "health" "100000" "extra_damage" "1.26" "plugin" "npc_catapult" - "danger_level" "5" + "danger_level" "4" } "2.5" { @@ -4085,7 +4369,7 @@ "health" "100000" "extra_damage" "1.26" "plugin" "npc_contracted_motivator" - "danger_level" "5" + "danger_level" "4" } "2.5" { @@ -4093,7 +4377,7 @@ "health" "100000" "extra_damage" "1.26" "plugin" "npc_demon_devoter" - "danger_level" "5" + "danger_level" "4" } "2.5" { @@ -4101,7 +4385,7 @@ "health" "300000" "extra_damage" "1.26" "plugin" "npc_demon_possesed_armor" - "danger_level" "5" + "danger_level" "4" } "2.5" { @@ -4109,7 +4393,71 @@ "health" "100000" "extra_damage" "1.26" "plugin" "npc_skilled_crossbowman" - "danger_level" "5" + "danger_level" "4" + } + "2.5" + { + "count" "10" + "health" "100000" + "extra_damage" "1.26" + "plugin" "npc_airraider" + "danger_level" "4" + } + "2.5" + { + "count" "10" + "health" "100000" + "extra_damage" "1.26" + "plugin" "npc_resource_collector" + "danger_level" "4" + } + "2.5" + { + "count" "10" + "health" "100000" + "extra_damage" "1.26" + "plugin" "npc_chemical_spreader" + "danger_level" "4" + } + "2.5" + { + "count" "10" + "health" "100000" + "extra_damage" "1.26" + "plugin" "npc_chemical_specialist" + "danger_level" "4" + } + "2.5" + { + "count" "10" + "health" "300000" + "extra_damage" "1.26" + "plugin" "npc_demolitionist" + "danger_level" "4" + } + "2.5" + { + "count" "10" + "health" "150000" + "extra_damage" "1.26" + "plugin" "npc_giant_armored_medic" + "danger_level" "4" + } + "2.5" + { + "count" "10" + "health" "100000" + "extra_damage" "1.26" + "plugin" "npc_protector" + "danger_level" "4" + } + "2.5" + { + "count" "10" + "health" "100000" + "extra_damage" "1.26" + "plugin" "npc_headhunter" + "danger_level" "4" } //bosses @@ -4123,6 +4471,24 @@ "is_boss" "1" } "2.5" + { + "count" "0" + "health" "3500000" + "plugin" "npc_gasleader" + "extra_damage" "1.26" + "danger_level" "4" + "is_boss" "1" + } + "2.5" + { + "count" "0" + "health" "3500000" + "plugin" "npc_radioguard" + "extra_damage" "4.11" + "danger_level" "4" + "is_boss" "1" + } + "2.5" { "count" "0" "health" "3500000" @@ -4232,7 +4598,7 @@ } "2.5" { - "count" "1" + "count" "0" "health" "3500000" "plugin" "npc_nightmare" "extra_damage" "1.25" @@ -4241,7 +4607,7 @@ } "2.5" { - "count" "1" + "count" "0" "health" "3500000" "plugin" "npc_petrisisbaron" "extra_damage" "1.5" @@ -4250,7 +4616,7 @@ } "2.5" { - "count" "1" + "count" "0" "health" "3500000" "plugin" "npc_sphynx" "extra_damage" "2.0" @@ -4286,7 +4652,7 @@ } "2.5" { - "count" "1" + "count" "0" "health" "3500000" "plugin" "npc_combine_lost_knight" "extra_damage" "1.51" @@ -4341,7 +4707,7 @@ "count" "7" "health" "600000" "plugin" "npc_xeno_patient_few" - "extra_damage" "1.11" + "extra_damage" "5.55" "danger_level" "5" } "2.5" @@ -4352,6 +4718,16 @@ "extra_damage" "1.11" "danger_level" "5" } + //"2.5" + //{ + //"count" "0" + //"health" "4000000" + //"plugin" "npc_xeno_lab_security" + //"data" "lab" + //"extra_damage" "1.11" + //"danger_level" "5" + //"is_boss" "1" + //} "2.5" { "count" "7" @@ -4449,7 +4825,6 @@ "health" "85000" "plugin" "npc_citizen" "data" "chaos" - "extra_damage" "1.5" "danger_level" "5" } "2.5" @@ -4473,45 +4848,13 @@ "2.5" { "count" "0" - "health" "6000000" + "health" "4000000" "plugin" "npc_hallam_great_demon" "extra_damage" "2.0" "danger_level" "5" "is_boss" "1" } "2.5" - { - "count" "15" - "health" "200000" - "plugin" "npc_umbral_ltzens" - "extra_damage" "1.11" - "danger_level" "5" - } - "2.5" - { - "count" "15" - "health" "200000" - "plugin" "npc_umbral_refract" - "extra_damage" "1.11" - "danger_level" "5" - } - "2.5" - { - "count" "15" - "health" "200000" - "plugin" "npc_umbral_rouam" - "extra_damage" "1.11" - "danger_level" "5" - } - "2.5" - { - "count" "15" - "health" "200000" - "plugin" "npc_umbral_spuud" - "extra_damage" "1.11" - "danger_level" "5" - } - "2.5" { "count" "0" "health" "3500000" @@ -4521,15 +4864,6 @@ "is_boss" "1" } "2.5" - { - "count" "0" - "health" "2500000" - "plugin" "npc_umbral_keitosis" - "extra_damage" "1.50" - "danger_level" "5" - "is_boss" "1" - } - "2.5" { "count" "0" "health" "4000000" @@ -4662,11 +4996,28 @@ } "2.5" { - "count" "0" - "health" "1000000" - "extra_damage" "1.16" + "count" "4" + "health" "1500000" + "does_not_scale" "1" + "extra_damage" "1.55" + "is_health_scaling" "1" "plugin" "npc_almagest_proxima" "danger_level" "5" + "is_boss" "1" + } + "2.5" + { + "count" "0" + "health" "5000000" + "plugin" "npc_glug" + "custom_name" "Mega Glug, the Great" + "extra_damage" "2.0" + "extra_thinkspeed" "0.85" + "extra_size" "3.00" + "extra_speed" "1.25" + "danger_level" "5" + "is_boss" "1" + "data" "randomspawn;aggressive" } //danger lvl 0 always comes, and doesnt care. "2.5" @@ -4696,6 +5047,36 @@ "extra_speed" "1.0" "danger_level" "0" } + "2.5" + { + "count" "10" + "health" "100000" + "plugin" "npc_glug" + "extra_damage" "1.55" + "extra_speed" "1.0" + "danger_level" "0" + "data" "randomspawn;aggressive" + } + "2.5" + { + "count" "10" + "health" "100000" + "plugin" "npc_glug" + "extra_damage" "1.55" + "extra_speed" "1.0" + "danger_level" "0" + "data" "randomspawn;aggressive" + } + "2.5" + { + "count" "10" + "health" "100000" + "plugin" "npc_glug" + "extra_damage" "1.55" + "extra_speed" "1.0" + "danger_level" "0" + "data" "randomspawn;aggressive" + } "2.5" { "count" "0" @@ -4712,6 +5093,7 @@ "extra_speed" "0.1" "extra_size" "0.75" "danger_level" "0" + "is_boss" "1" } "2.5" { @@ -4721,6 +5103,16 @@ "extra_size" "1.25" "plugin" "npc_sentinel" "danger_level" "0" + "is_boss" "1" + } + "2.5" + { + "count" "0" + "extra_damage" "2.00" + "extra_thinkspeed" "2.00" + "plugin" "npc_iberia_lighthouse" + "danger_level" "0" + "is_boss" "1" } "2.5" { diff --git a/addons/sourcemod/configs/zombie_riot/challenges/laststand/vote.cfg b/addons/sourcemod/configs/zombie_riot/challenges/laststand/vote.cfg index 7827015cf5..d5db37a8f5 100644 --- a/addons/sourcemod/configs/zombie_riot/challenges/laststand/vote.cfg +++ b/addons/sourcemod/configs/zombie_riot/challenges/laststand/vote.cfg @@ -30,6 +30,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/challenges/melee/vote.cfg b/addons/sourcemod/configs/zombie_riot/challenges/melee/vote.cfg index af38b39aa8..e326aa0d82 100644 --- a/addons/sourcemod/configs/zombie_riot/challenges/melee/vote.cfg +++ b/addons/sourcemod/configs/zombie_riot/challenges/melee/vote.cfg @@ -30,6 +30,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/challenges/rebeloutpost/vote.cfg b/addons/sourcemod/configs/zombie_riot/challenges/rebeloutpost/vote.cfg index 9992ddbeed..461bb7f856 100644 --- a/addons/sourcemod/configs/zombie_riot/challenges/rebeloutpost/vote.cfg +++ b/addons/sourcemod/configs/zombie_riot/challenges/rebeloutpost/vote.cfg @@ -30,6 +30,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/challenges/spybattle/vote.cfg b/addons/sourcemod/configs/zombie_riot/challenges/spybattle/vote.cfg index b2f508a779..94403f02f0 100644 --- a/addons/sourcemod/configs/zombie_riot/challenges/spybattle/vote.cfg +++ b/addons/sourcemod/configs/zombie_riot/challenges/spybattle/vote.cfg @@ -30,6 +30,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/challenges/survival/vote.cfg b/addons/sourcemod/configs/zombie_riot/challenges/survival/vote.cfg index 4af729545e..b91dd2e3a6 100644 --- a/addons/sourcemod/configs/zombie_riot/challenges/survival/vote.cfg +++ b/addons/sourcemod/configs/zombie_riot/challenges/survival/vote.cfg @@ -25,6 +25,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/classic.cfg b/addons/sourcemod/configs/zombie_riot/classic.cfg index 414c6de85d..d6af56b1b7 100644 --- a/addons/sourcemod/configs/zombie_riot/classic.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic.cfg @@ -108,6 +108,28 @@ "desc" "Paranormal Activity Desc" "level" "0.75" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/classic_blitz.cfg b/addons/sourcemod/configs/zombie_riot/classic_blitz.cfg index e5367ab5c9..46b86721a5 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_blitz.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_blitz.cfg @@ -17,7 +17,7 @@ "volume" "1.1" } - "5" + "1" { "xp" "75" "cash" "1000" // 1-5 | 1100 @@ -47,7 +47,7 @@ "plugin" "npc_torsoless_headcrabzombie" } } - "10" + "2" { "xp" "75" "cash" "1500" // 6-10 | 1000 @@ -110,7 +110,7 @@ "plugin" "npc_poisonzombie_fortified_giant" } } - "15" + "3" { "xp" "125" "cash" "2500" // 11-14 | 800 - 15 | 1000 @@ -187,7 +187,7 @@ "plugin" "npc_last_survivor" } } - "20" + "4" { "xp" "125" "cash" "2000" // 16-20 | 1700 @@ -233,7 +233,7 @@ "plugin" "npc_combine_soldier_ar2" } } - "25" + "5" { "xp" "125" "cash" "3000" // 21-25 | 4250 @@ -327,7 +327,7 @@ "plugin" "npc_combine_soldier_collos_swordsman" } } - "30" + "6" { "xp" "250" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -441,7 +441,7 @@ "plugin" "npc_combine_soldier_overlord" } } - "35" + "7" { "xp" "250" "cash" "4000" // 31-35 | 5000 @@ -481,7 +481,7 @@ "plugin" "npc_alt_mecha_heavy" } } - "40" + "8" { "xp" "250" "cash" "6000" // 36-40 | 5750 @@ -569,7 +569,7 @@ "plugin" "npc_alt_mecha_heavy_giant" } } - "45" + "9" { "xp" "500" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -695,7 +695,7 @@ "plugin" "npc_alt_ikunagae" } } - "50" + "10" { "xp" "500" "cash" "9000" // 46-50 | 6250 @@ -750,7 +750,7 @@ "plugin" "npc_alt_schwertkrieg" } } - "55" + "11" { "xp" "500" "cash" "11000" // 51-56 | 9000 @@ -848,7 +848,7 @@ "music_download_outro" "1" "message_outro" "Final_wave_message" } - "60" + "12" { "xp" "1000" "cash" "20000" // 57-59 | 8000 diff --git a/addons/sourcemod/configs/zombie_riot/classic_con2_surv.cfg b/addons/sourcemod/configs/zombie_riot/classic_con2_surv.cfg new file mode 100644 index 0000000000..d6bcde9f1f --- /dev/null +++ b/addons/sourcemod/configs/zombie_riot/classic_con2_surv.cfg @@ -0,0 +1,1109 @@ + +"Waves" +{ + "gift_drop_chance_multiplier" "0.5" + "grigori_special_shop_logic" "1" + "author_npcs" "Artvin, Batfoxkid" + "author_format" "SuperGamer" + "mvmdiff" "4" + "complete_item" "idk" + + "music_setup" + { + "file" "#zombiesurvival/internius/setup_interitus_1.mp3" + "time" "68" + "download" "1" + "name" "Lets Waste Some Money" + "author" "REN" + "volume" "0.85" + } + + "1" + { + "xp" "200" + "cash" "1000" // 1-5 | 1100 + + "0.2" + { + "count" "700" + "ignore_max_cap" "1" + + "plugin" "npc_ahim" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_atilla" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_qanaas" + } + "90.0" + { + "count" "200" + "ignore_max_cap" "1" + + "health" "900" + "plugin" "npc_inabdil" + } + } + "2" + { + "xp" "200" + "cash" "1500" // 6-10 | 1000 + "setup" "59" + "ammobox_extra" "5" + + "0.4" + { + "count" "400" + "ignore_max_cap" "1" + + "plugin" "npc_ahim" + } + "0.3" + { + "count" "150" + "ignore_max_cap" "1" + + "plugin" "npc_atilla" + } + "0.2" + { + "count" "300" + "ignore_max_cap" "1" + + "health" "1000" + "plugin" "npc_inabdil" + } + "0.2" + { + "count" "300" + "ignore_max_cap" "1" + + "plugin" "npc_sakratan" + } + "0.2" + { + "count" "300" + "ignore_max_cap" "1" + + "plugin" "npc_khazaan" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_qanaas" + } + "30.0" + { + "count" "100" + "ignore_max_cap" "1" + + "health" "1500" + "plugin" "npc_yadeam" + } + "0.0" + { + "count" "50" + "ignore_max_cap" "1" + + "health" "4000" + "plugin" "npc_rajul" + } + "60.0" + { + "count" "1" + "health" "30000" + "is_boss" "1" + "extra_damage" "1.5" + "plugin" "npc_medival_construct" + } + } + "3" + { + "xp" "250" + "cash" "2500" // 11-14 | 800 - 15 | 1000 + "setup" "59" + "ammobox_extra" "10" + "map_setup_fake" "1" + + "music_1" + { + "file" "#zombiesurvival/wave_music/bat_seize.mp3" + "time" "263" + "download" "1" + "name" "Arknights OST bat seize" + "author" "Arknights" + } + "spawn_grigori" "1" + "grigori_sells_items_max" "3" + + "0.4" + { + "count" "300" + "ignore_max_cap" "1" + + "plugin" "npc_ahim" + } + "0.3" + { + "count" "150" + "ignore_max_cap" "1" + + "plugin" "npc_atilla" + } + "0.2" + { + "count" "375" + "ignore_max_cap" "1" + + "plugin" "npc_inabdil" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_khazaan" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_yadeam" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_sakratan" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_qanaas" + } + "30.0" + { + "count" "75" + "ignore_max_cap" "1" + + "health" "4000" + "plugin" "npc_rajul" + } + "60.0" + { + "count" "0" + "is_boss" "1" + "health" "70000" + "extra_damage" "0.35" + "custom_name" "Crude Schwertkrieg Copy" + "plugin" "npc_alt_schwertkrieg" + } + } + "4" + { + "xp" "250" + "cash" "2000" // 16-20 | 1700 + "setup" "59" + "ammobox_extra" "5" + + "0.2" + { + "count" "500" + "ignore_max_cap" "1" + + "plugin" "npc_frost_hunter" + } + "0.1" + { + "count" "300" + "ignore_max_cap" "1" + + "plugin" "npc_airborn_explorer" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_winter_sniper" + } + "90.0" + { + "count" "200" + "ignore_max_cap" "1" + + "plugin" "npc_snowey_gunner" + } + } + "5" + { + "xp" "250" + "cash" "3000" // 21-25 | 4250 + "setup" "59" + "ammobox_extra" "5" + + "0.6" + { + "count" "275" + "ignore_max_cap" "1" + + "plugin" "npc_frost_hunter" + } + "0.5" + { + "count" "200" + "ignore_max_cap" "1" + + "plugin" "npc_airborn_explorer" + } + "0.4" + { + "count" "150" + "ignore_max_cap" "1" + + "plugin" "npc_snowey_gunner" + } + "0.2" + { + "count" "150" + "ignore_max_cap" "1" + + "plugin" "npc_freezing_cleaner" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_winter_sniper" + } + "30.0" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_skin_hunter" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_ziberian_miner" + } + "60.0" + { + "count" "50" + "ignore_max_cap" "1" + + "plugin" "npc_arctic_mage" + } + } + "6" + { + "xp" "375" + "cash" "5000" // 26-29 | 2950 - 30 | 2500 + "setup" "59" + "ammobox_extra" "10" + "map_setup_fake" "1" + + "music_1" + { + "file" "#zombiesurvival/internius/wave_30.mp3" + "time" "191" + "download" "1" + "name" "Serious Sam : Siberian Mayhem Siberia Slavic Fight" + "author" "Croteam & Timelock Studio" + } + + "0.8" + { + "count" "150" + "ignore_max_cap" "1" + + "health" "2500" + "plugin" "npc_frost_hunter" + } + "0.7" + { + "count" "125" + "ignore_max_cap" "1" + + "health" "2000" + "plugin" "npc_freezing_cleaner" + } + "0.6" + { + "count" "125" + "ignore_max_cap" "1" + + "plugin" "npc_skin_hunter" + } + "0.5" + { + "count" "150" + "ignore_max_cap" "1" + + "health" "3000" + "plugin" "npc_airborn_explorer" + } + "0.4" + { + "count" "175" + "ignore_max_cap" "1" + + "plugin" "npc_ziberian_miner" + "extra_damage" "1.25" + } + "0.3" + { + "count" "125" + "ignore_max_cap" "1" + + "plugin" "npc_snowey_gunner" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_winter_sniper" + "extra_damage" "1.25" + } + "30.0" + { + "count" "75" + "ignore_max_cap" "1" + + "plugin" "npc_arctic_mage" + } + "60.0" + { + "count" "1" + + "health" "75000" + "is_boss" "1" + "plugin" "npc_irritated_person" + } + } + "7" + { + "xp" "375" + "cash" "4000" // 31-35 | 5000 + "setup" "59" + "ammobox_extra" "5" + + "0.3" + { + "count" "375" + "ignore_max_cap" "1" + + "plugin" "npc_ransacker" + } + "0.2" + { + "count" "325" + "ignore_max_cap" "1" + + "plugin" "npc_hitman" + } + "0.1" + { + "count" "175" + "ignore_max_cap" "1" + + "plugin" "npc_runover" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_enforcer" + } + "90.0" + { + "count" "125" + "ignore_max_cap" "1" + + "plugin" "npc_braindead" + } + } + "8" + { + "xp" "375" + "cash" "6000" // 36-40 | 5750 + "setup" "59" + "ammobox_extra" "5" + + "0.5" + { + "count" "250" + "ignore_max_cap" "1" + + "plugin" "npc_ransacker" + } + "0.4" + { + "count" "200" + "ignore_max_cap" "1" + + "plugin" "npc_hitman" + } + "0.3" + { + "count" "175" + "ignore_max_cap" "1" + + "plugin" "npc_runover" + } + "0.2" + { + "count" "125" + "ignore_max_cap" "1" + + "plugin" "npc_braindead" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_absolute_incinirator" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_enforcer" + } + "30.0" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_mad_doctor" + } + "60.0" + { + "count" "50" + "ignore_max_cap" "1" + + "plugin" "npc_behemoth" + } + } + "9" + { + "xp" "750" + "cash" "10000" // 41-44 | 5000 - 45 | 5000 + "setup" "59" + "ammobox_extra" "10" + "map_setup_fake" "1" + + "music_1" + { + "file" "#zombiesurvival/internius/wave_45.mp3" + "time" "226" + "download" "1" + "name" "Marilyn Manson - Seizure of Power" + "author" "???" + } + + "0.6" + { + "count" "225" + "ignore_max_cap" "1" + + "plugin" "npc_ransacker" + } + "0.5" + { + "count" "175" + "ignore_max_cap" "1" + + "plugin" "npc_hitman" + } + "0.4" + { + "count" "150" + "ignore_max_cap" "1" + + "plugin" "npc_runover" + } + "0.3" + { + "count" "150" + "ignore_max_cap" "1" + + "plugin" "npc_braindead" + } + "0.2" + { + "count" "125" + "ignore_max_cap" "1" + + "plugin" "npc_mad_doctor" + } + "0.1" + { + "count" "125" + "ignore_max_cap" "1" + + "plugin" "npc_absolute_incinirator" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "plugin" "npc_enforcer" + } + "30.0" + { + "count" "50" + "ignore_max_cap" "1" + + "plugin" "npc_behemoth" + } + "60.0" + { + "count" "1" + + "health" "250000" + "is_boss" "1" + "plugin" "npc_abomination" + } + } + "10" + { + "xp" "750" + "cash" "9000" // 46-50 | 6250 + "setup" "59" + "ammobox_extra" "5" + + "0.3" + { + "count" "150" + "ignore_max_cap" "1" + "health" "40000" + "plugin" "npc_sakratan" + "extra_damage" "2.0" + } + "0.2" + { + "count" "150" + "ignore_max_cap" "1" + "health" "35000" + "plugin" "npc_yadeam" + "extra_damage" "2.0" + } + "0.1" + { + "count" "150" + "ignore_max_cap" "1" + "health" "55000" + "plugin" "npc_khazaan" + "extra_damage" "2.0" + } + "0.4" + { + "count" "150" + "ignore_max_cap" "1" + "health" "35000" + "plugin" "npc_frost_hunter" + "extra_damage" "1.5" + } + "0.3" + { + "count" "150" + "ignore_max_cap" "1" + "health" "40000" + "plugin" "npc_snowey_gunner" + "extra_damage" "1.5" + } + "0.2" + { + "count" "150" + "ignore_max_cap" "1" + "health" "35000" + "plugin" "npc_skin_hunter" + "extra_damage" "1.5" + } + "0.4" + { + "count" "150" + "ignore_max_cap" "1" + "health" "25000" + "plugin" "npc_ransacker" + "extra_damage" "1.1" + } + "0.3" + { + "count" "150" + "ignore_max_cap" "1" + "health" "40000" + "plugin" "npc_absolute_incinirator" + "extra_damage" "1.1" + } + "15.0" + { + "count" "100" + "ignore_max_cap" "1" + "health" "25000" + "plugin" "npc_enforcer" + "extra_damage" "1.1" + } + "0.1" + { + "count" "150" + "ignore_max_cap" "1" + + "health" "25000" + "plugin" "npc_chaos_insane" + } + "75.0" + { + "count" "150" + "ignore_max_cap" "1" + + "health" "25000" + "plugin" "npc_chaos_supporter" + } + } + "11" + { + "xp" "750" + "cash" "11000" // 51-56 | 9000 + "setup" "59" + "ammobox_extra" "5" + + "0.6" + { + "count" "150" + "ignore_max_cap" "1" + "health" "50000" + "plugin" "npc_inabdil" + "extra_damage" "2.0" + } + "0.5" + { + "count" "150" + "ignore_max_cap" "1" + "health" "50000" + "plugin" "npc_runover" + "extra_damage" "1.1" + } + "0.4" + { + "count" "150" + "ignore_max_cap" "1" + "health" "75000" + "plugin" "npc_rajul" + "extra_damage" "2.0" + } + "0.3" + { + "count" "150" + "ignore_max_cap" "1" + "health" "75000" + "plugin" "npc_arctic_mage" + "extra_damage" "1.5" + } + "0.2" + { + "count" "150" + "ignore_max_cap" "1" + "health" "75000" + "plugin" "npc_behemoth" + "extra_damage" "1.1" + } + "0.4" + { + "count" "150" + "ignore_max_cap" "1" + "health" "35000" + "plugin" "npc_atilla" + "extra_damage" "2.0" + } + "0.3" + { + "count" "150" + "ignore_max_cap" "1" + "health" "35000" + "extra_damage" "1.5" + "plugin" "npc_freezing_cleaner" + } + "0.2" + { + "count" "150" + "ignore_max_cap" "1" + "health" "45000" + "plugin" "npc_mad_doctor" + "extra_damage" "1.1" + } + "15.0" + { + "count" "100" + "ignore_max_cap" "1" + "health" "25000" + "plugin" "npc_winter_sniper" + "extra_damage" "1.5" + } + "0.1" + { + "count" "150" + "ignore_max_cap" "1" + + "health" "25000" + "plugin" "npc_chaos_mage" + } + "75.0" + { + "count" "150" + "ignore_max_cap" "1" + + "health" "25000" + "plugin" "npc_chaos_swordsman" + } + + "music_track_outro" "#zombiesurvival/wave_music/wave_60_prepare.mp3" + "music_outro_duration" "65" + "music_download_outro" "1" + "message_outro" "Final_wave_message" + } + "12" + { + "xp" "3000" + "cash" "20000" // 57-59 | 8000 + "setup" "59" + "ammobox_extra" "10" + "map_setup_fake" "1" + + "music_1" + { + "file" "#zombiesurvival/forest_rogue/bat_empgrd_loop.mp3" + "time" "187" + "download" "20" + "name" "bat_empgrd" + "author" "Hypergraph" + } + + "0.1" + { + "count" "200" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_ahim" + "extra_damage" "3.0" + } + "0.1" + { + "count" "200" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_atilla" + "extra_damage" "3.0" + } + "0.1" + { + "count" "200" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_inabdil" + "extra_damage" "3.0" + } + "0.1" + { + "count" "200" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_khazaan" + "extra_damage" "3.0" + } + "0.1" + { + "count" "200" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_sakratan" + "extra_damage" "3.0" + } + "0.1" + { + "count" "200" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_yadeam" + "extra_damage" "3.0" + } + "2.0" + { + "count" "100" + "ignore_max_cap" "1" + + "health" "250000" + "plugin" "npc_rajul" + "extra_damage" "2.0" + } + "0.1" + { + "count" "100" + "ignore_max_cap" "1" + + "health" "50000" + "plugin" "npc_qanaas" + "extra_damage" "2.0" + } + "28.0" + { + "count" "1" + + "health" "250000" + "is_boss" "1" + "plugin" "npc_ancient_demon" + "extra_damage" "3.0" + } + + "0.1" + { + "count" "12" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_airborn_explorer" + "extra_damage" "2.0" + } + "0.1" + { + "count" "12" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_freezing_cleaner" + "extra_damage" "2.0" + } + "0.1" + { + "count" "12" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_frost_hunter" + "extra_damage" "2.0" + } + "0.1" + { + "count" "12" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_skin_hunter" + "extra_damage" "2.0" + } + "0.1" + { + "count" "12" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_snowey_gunner" + "extra_damage" "2.0" + } + "0.1" + { + "count" "12" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_ziberian_miner" + "extra_damage" "2.0" + } + "2.0" + { + "count" "6" + "ignore_max_cap" "1" + + "health" "250000" + "plugin" "npc_arctic_mage" + "extra_damage" "2.0" + } + "0.1" + { + "count" "30" + "ignore_max_cap" "1" + + "health" "50000" + "plugin" "npc_winter_sniper" + "extra_damage" "2.0" + } + "28.0" + { + "count" "1" + + "health" "400000" + "is_boss" "1" + "plugin" "npc_irritated_person" + "extra_damage" "2.0" + } + + "0.1" + { + "count" "12" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_absolute_incinirator" + "extra_damage" "1.2" + } + "0.1" + { + "count" "12" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_braindead" + "extra_damage" "1.2" + } + "0.1" + { + "count" "12" + "ignore_max_cap" "1" + + "health" "56250" + "plugin" "npc_hitman" + "extra_damage" "1.2" + } + "0.1" + { + "count" "12" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_mad_doctor" + "extra_damage" "1.2" + } + "0.1" + { + "count" "12" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_ransacker" + "extra_damage" "1.2" + } + "0.1" + { + "count" "12" + "ignore_max_cap" "1" + + "health" "75000" + "plugin" "npc_runover" + "extra_damage" "1.2" + } + "2.0" + { + "count" "6" + "ignore_max_cap" "1" + + "health" "250000" + "plugin" "npc_behemoth" + "extra_damage" "1.2" + } + "0.1" + { + "count" "30" + "ignore_max_cap" "1" + + "health" "50000" + "plugin" "npc_enforcer" + "extra_damage" "1.2" + } + "28.0" + { + "count" "1" + + "health" "450000" + "is_boss" "1" + "plugin" "npc_abomination" + "extra_damage" "1.1" + } + + "1.0" + { + "count" "100" + "ignore_max_cap" "1" + + "health" "50000" + "plugin" "npc_chaos_insane" + } + "1.0" + { + "count" "100" + "ignore_max_cap" "1" + + "health" "50000" + "plugin" "npc_chaos_supporter" + } + "1.0" + { + "count" "100" + "ignore_max_cap" "1" + + "health" "50000" + "plugin" "npc_chaos_mage" + } + "1.0" + { + "count" "100" + "ignore_max_cap" "1" + + "health" "50000" + "plugin" "npc_chaos_swordsman" + } + "60.0" + { + "count" "0" + + "health" "750000" + "extra_speed" "1.15" + "extra_damage" "1.2" + "is_boss" "1" + "plugin" "npc_chaos_evil_demon" + } + } + "Freeplay" + { + "xp" "2" + "cash" "1000" + + "0.0" + { + "count" "10" + "health" "100000000" + "plugin" "npc_majorsteam" + "is_boss" "1" + } + } +} diff --git a/addons/sourcemod/configs/zombie_riot/classic_curtain_outbreak.cfg b/addons/sourcemod/configs/zombie_riot/classic_curtain_outbreak.cfg index adb8a0e2bf..3f8cb166cd 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_curtain_outbreak.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_curtain_outbreak.cfg @@ -17,7 +17,7 @@ "author" "Adam Gubman" } - "5" + "1" { "xp" "75" "cash" "1100" // 1-5 | 1100 @@ -50,6 +50,7 @@ { "count" "200" "health" "1000" + "extra_speed" "0.90" "ignore_max_cap" "1" "plugin" "npc_sakratan" } @@ -67,25 +68,20 @@ "count" "100" "health" "2000" "ignore_max_cap" "1" - "extra_damage" "0.30" + "extra_damage" "0.20" + "extra_speed" "0.90" "plugin" "npc_dimensionfrag" } - "0.1" + "30.0" { "count" "100" "health" "550" "extra_damage" "0.75" "ignore_max_cap" "1" + "extra_speed" "0.75" "plugin" "npc_voided_diversionistico" } - "30.0" - { - "count" "200" - "ignore_max_cap" "1" - - "plugin" "npc_mutating_blob" - } "0.1" { "count" "1" @@ -99,7 +95,7 @@ "plugin" "npc_void_portal" } } - "10" + "2" { "xp" "75" "cash" "1650" // 6-10 | 1000 @@ -131,13 +127,6 @@ "plugin" "npc_void_infestor" } "0.1" - { - "count" "200" - "ignore_max_cap" "1" - - "plugin" "npc_mutating_blob" - } - "0.1" { "count" "300" "ignore_max_cap" "1" @@ -150,7 +139,8 @@ "count" "100" "health" "3000" "ignore_max_cap" "1" - "extra_damage" "0.40" + "extra_damage" "0.30" + "extra_speed" "0.90" "plugin" "npc_dimensionfrag" } @@ -159,7 +149,8 @@ "count" "100" "health" "3000" "ignore_max_cap" "1" - "extra_damage" "0.40" + "extra_damage" "0.30" + "extra_speed" "0.90" "plugin" "npc_vanishingmatter" } @@ -168,6 +159,7 @@ "count" "150" "health" "1500" "ignore_max_cap" "1" + "extra_speed" "0.90" "plugin" "npc_sakratan" } "0.1" @@ -175,6 +167,7 @@ "count" "150" "health" "1500" "ignore_max_cap" "1" + "extra_speed" "0.80" "plugin" "npc_inabdil" } "0.1" @@ -186,15 +179,6 @@ "plugin" "npc_void_carrier" } "0.1" - { - "count" "50" - "ignore_max_cap" "1" - "data" "150" - - "health" "1000" - "plugin" "npc_void_crust" - } - "0.1" { "count" "100" "health" "825" @@ -209,18 +193,10 @@ "health" "825" "extra_damage" "0.75" "ignore_max_cap" "1" + "extra_speed" "0.75" "plugin" "npc_voided_diversionistico" } "0.1" - { - "count" "50" - "ignore_max_cap" "1" - "data" "99999" - - "health" "50" - "plugin" "npc_void_crust" - } - "0.1" { "count" "1" "does_not_scale" "1" @@ -253,7 +229,7 @@ "plugin" "npc_void_portal" } } - "15" + "3" { "xp" "125" "cash" "2750" // 11-14 | 800 - 15 | 1000 @@ -307,17 +283,11 @@ "plugin" "npc_void_infestor" } "0.1" - { - "count" "200" - "ignore_max_cap" "1" - - "plugin" "npc_mutating_blob" - } - "0.1" { "count" "100" "health" "2000" "ignore_max_cap" "1" + "extra_speed" "0.90" "plugin" "npc_sakratan" } "0.1" @@ -325,6 +295,7 @@ "count" "100" "health" "2000" "ignore_max_cap" "1" + "extra_speed" "0.80" "plugin" "npc_inabdil" } "0.1" @@ -351,15 +322,6 @@ "plugin" "npc_void_carrier" } "0.1" - { - "count" "50" - "ignore_max_cap" "1" - "data" "150" - - "health" "1000" - "plugin" "npc_void_crust" - } - "0.1" { "count" "1" "does_not_scale" "1" @@ -386,6 +348,7 @@ "health" "1375" "extra_damage" "0.75" "ignore_max_cap" "1" + "extra_speed" "0.75" "plugin" "npc_voided_diversionistico" } "0.1" @@ -393,7 +356,8 @@ "count" "100" "health" "4000" "ignore_max_cap" "1" - "extra_damage" "0.50" + "extra_damage" "0.40" + "extra_speed" "0.90" "plugin" "npc_dimensionfrag" } @@ -402,7 +366,8 @@ "count" "100" "health" "4000" "ignore_max_cap" "1" - "extra_damage" "0.50" + "extra_damage" "0.40" + "extra_speed" "0.90" "plugin" "npc_vanishingmatter" } @@ -455,7 +420,7 @@ "plugin" "npc_ancient_demon" } } - "20" + "4" { "xp" "125" "cash" "2200" // 16-20 | 1700 @@ -484,6 +449,7 @@ "health" "2500" "extra_damage" "1.25" "ignore_max_cap" "1" + "extra_speed" "0.95" "plugin" "npc_sakratan" } "0.1" @@ -491,6 +457,7 @@ "count" "100" "health" "2500" "extra_damage" "1.25" + "extra_speed" "0.80" "ignore_max_cap" "1" "plugin" "npc_inabdil" } @@ -503,11 +470,20 @@ "plugin" "npc_yadeam" } "0.1" + { + "count" "100" + "health" "5000" + "extra_damage" "1.25" + "ignore_max_cap" "1" + "plugin" "npc_rajul" + } + "0.1" { "count" "100" "health" "5000" "ignore_max_cap" "1" "extra_damage" "0.50" + "extra_speed" "0.90" "plugin" "npc_vanishingmatter" } @@ -529,21 +505,15 @@ "plugin" "npc_qanaas" } - "0.1" + "30.0" { "count" "100" "health" "1875" "extra_damage" "1.35" + "extra_speed" "0.95" "ignore_max_cap" "1" "plugin" "npc_voided_diversionistico" } - "30.0" - { - "count" "200" - "ignore_max_cap" "1" - - "plugin" "npc_hosting_blob" - } "0.1" { "count" "0" @@ -566,7 +536,7 @@ "plugin" "npc_void_portal" } } - "25" + "5" { "xp" "125" "cash" "3300" // 21-25 | 4250 @@ -589,13 +559,6 @@ "health" "1100" "plugin" "npc_enframed_voider" } - "0.4" - { - "count" "150" - "ignore_max_cap" "1" - - "plugin" "npc_hosting_blob" - } "0.3" { "count" "125" @@ -617,6 +580,7 @@ "count" "100" "health" "4000" "extra_damage" "1.25" + "extra_speed" "0.80" "ignore_max_cap" "1" "plugin" "npc_inabdil" } @@ -628,6 +592,14 @@ "ignore_max_cap" "1" "plugin" "npc_yadeam" } + "0.1" + { + "count" "100" + "health" "8000" + "extra_damage" "1.25" + "ignore_max_cap" "1" + "plugin" "npc_rajul" + } "0.2" { "count" "150" @@ -646,7 +618,7 @@ "plugin" "npc_qanaas" } - "0.1" + "30.0" { "count" "100" "health" "2050" @@ -654,14 +626,6 @@ "ignore_max_cap" "1" "plugin" "npc_voided_diversionistico" } - "30.0" - { - "count" "100" - "ignore_max_cap" "1" - "health" "3000" - "data" "350" - "plugin" "npc_voided_expidonsan_fortifier" - } "0.1" { "count" "100" @@ -700,14 +664,6 @@ "does_not_scale" "1" "plugin" "npc_void_portal" } - "0.1" - { - "count" "50" - "health" "50" - "ignore_max_cap" "1" - "data" "999999" - "plugin" "npc_voided_expidonsan_fortifier" - } "30.0" { "count" "50" @@ -736,7 +692,7 @@ "plugin" "npc_void_portal" } } - "30" + "6" { "xp" "250" "cash" "5500" // 26-29 | 2950 - 30 | 2500 @@ -770,14 +726,6 @@ "health" "2000" "plugin" "npc_enframed_voider" } - "0.4" - { - "count" "150" - "ignore_max_cap" "1" - - "health" "3000" - "plugin" "npc_hosting_blob" - } "0.3" { "count" "125" @@ -800,6 +748,7 @@ "count" "100" "health" "5000" "extra_damage" "1.25" + "extra_speed" "0.80" "ignore_max_cap" "1" "plugin" "npc_inabdil" } @@ -811,6 +760,14 @@ "ignore_max_cap" "1" "plugin" "npc_yadeam" } + "0.1" + { + "count" "100" + "health" "10000" + "extra_damage" "1.25" + "ignore_max_cap" "1" + "plugin" "npc_rajul" + } "0.4" { "count" "150" @@ -845,14 +802,6 @@ "plugin" "npc_voided_diversionistico" } "0.1" - { - "count" "100" - "ignore_max_cap" "1" - "extra_speed" "1.05" - "data" "350" - "plugin" "npc_voided_expidonsan_fortifier" - } - "0.1" { "count" "1" "does_not_scale" "1" @@ -932,7 +881,7 @@ "plugin" "npc_ancient_demon" } } - "35" + "7" { "xp" "250" "cash" "4400" // 31-35 | 5000 @@ -975,6 +924,7 @@ { "count" "200" "health" "6250" + "extra_speed" "0.80" "ignore_max_cap" "1" "plugin" "npc_runover" } @@ -1004,7 +954,7 @@ "plugin" "npc_umbral_spuud" } - "0.1" + "30.0" { "count" "150" "health" "5000" @@ -1012,13 +962,6 @@ "plugin" "npc_void_particle" "extra_damage" "1.25" } - "30.0" - { - "count" "125" - "ignore_max_cap" "1" - - "plugin" "npc_void_minigate_keeper" - } "0.1" { "count" "0" @@ -1041,7 +984,7 @@ "plugin" "npc_void_portal" } } - "40" + "8" { "xp" "250" "cash" "6600" // 36-40 | 5750 @@ -1062,13 +1005,6 @@ "plugin" "npc_void_sacraficer" } - "0.3" - { - "count" "175" - "ignore_max_cap" "1" - - "plugin" "npc_void_minigate_keeper" - } "0.2" { "count" "125" @@ -1082,6 +1018,7 @@ { "count" "200" "health" "8750" + "extra_speed" "0.80" "ignore_max_cap" "1" "plugin" "npc_runover" } @@ -1093,15 +1030,6 @@ "plugin" "npc_mad_doctor" } "0.1" - { - "count" "100" - "ignore_max_cap" "1" - - "data" "1000" - "health" "6000" - "plugin" "npc_voiding_bedrock" - } - "0.1" { "count" "150" "health" "5000" @@ -1152,15 +1080,6 @@ "plugin" "npc_void_expidonsan_cleaner" } "0.1" - { - "count" "100" - "ignore_max_cap" "1" - - "data" "999999" - "health" "50" - "plugin" "npc_voiding_bedrock" - } - "0.1" { "count" "1" "does_not_scale" "1" @@ -1208,7 +1127,7 @@ "plugin" "npc_void_portal" } } - "45" + "9" { "xp" "500" "cash" "11000" // 41-44 | 5000 - 45 | 5000 @@ -1242,13 +1161,6 @@ "plugin" "npc_void_particle" "extra_damage" "1.25" } - "0.5" - { - "count" "175" - "ignore_max_cap" "1" - - "plugin" "npc_void_minigate_keeper" - } "0.4" { "count" "150" @@ -1281,19 +1193,11 @@ "extra_damage" "1.65" "plugin" "npc_void_carrier" } - "0.2" - { - "count" "125" - "ignore_max_cap" "1" - - "health" "9000" - "data" "2000" - "plugin" "npc_voiding_bedrock" - } "0.1" { "count" "200" "health" "11250" + "extra_speed" "0.80" "ignore_max_cap" "1" "plugin" "npc_runover" } @@ -1307,9 +1211,9 @@ "0.1" { "count" "100" - "health" "22500" + "health" "11250" "ignore_max_cap" "1" - "plugin" "npc_behemoth" + "plugin" "npc_absolute_incinirator" } "0.1" { @@ -1415,7 +1319,7 @@ "plugin" "npc_abomination" } } - "50" + "10" { "xp" "500" "cash" "9900" // 46-50 | 6250 @@ -1436,6 +1340,7 @@ "health" "25000" "ignore_max_cap" "1" "extra_damage" "1.1" + "extra_speed" "0.80" "plugin" "npc_runover" } "0.1" @@ -1447,6 +1352,14 @@ "plugin" "npc_mad_doctor" } "0.1" + { + "count" "100" + "health" "25000" + "extra_damage" "1.1" + "ignore_max_cap" "1" + "plugin" "npc_absolute_incinirator" + } + "0.1" { "count" "100" "health" "50000" @@ -1550,7 +1463,7 @@ "plugin" "npc_void_portal" } } - "55" + "11" { "xp" "500" "cash" "12100" // 51-56 | 9000 @@ -1588,6 +1501,7 @@ "health" "37500" "ignore_max_cap" "1" "extra_damage" "1.1" + "extra_speed" "0.80" "plugin" "npc_runover" } "0.1" @@ -1601,28 +1515,18 @@ "0.1" { "count" "100" - "health" "75000" + "health" "37500" "extra_damage" "1.1" "ignore_max_cap" "1" - "plugin" "npc_behemoth" - } - "0.6" - { - "count" "200" - "ignore_max_cap" "1" - - "data" "1500" - "health" "12000" - "plugin" "npc_voiding_bedrock" + "plugin" "npc_absolute_incinirator" } - "0.5" + "0.1" { - "count" "200" + "count" "100" + "health" "75000" + "extra_damage" "1.1" "ignore_max_cap" "1" - - "health" "15000" - "extra_damage" "1.25" - "plugin" "npc_void_minigate_keeper" + "plugin" "npc_behemoth" } "0.4" { @@ -1685,15 +1589,6 @@ "plugin" "npc_voided_diversionistico" } "0.1" - { - "count" "75" - "ignore_max_cap" "1" - - "data" "999999" - "health" "50" - "plugin" "npc_voiding_bedrock" - } - "0.1" { "count" "0" @@ -1756,7 +1651,7 @@ "music_download_outro" "1" "message_outro" "Umbral_Outbreak_Help_Message" } - "60" + "12" { "xp" "1000" "cash" "22000" // 57-59 | 8000 @@ -1792,37 +1687,10 @@ "plugin" "npc_framing_voider" } "0.1" - { - "count" "38" - "ignore_max_cap" "1" - - "health" "75000" - "extra_damage" "3.0" - "plugin" "npc_mutating_blob" - } - "0.1" - { - "count" "20" - "ignore_max_cap" "1" - "data" "150" - - "health" "75000" - "extra_damage" "3.0" - "plugin" "npc_void_crust" - } - "0.1" { "count" "150" - "ignore_max_cap" "1" - "plugin" "npc_qanaas" "health" "75000" - "extra_damage" "2.0" - } - "0.1" - { - "count" "150" - "health" "75000" - "extra_damage" "1.25" + "extra_damage" "3.0" "ignore_max_cap" "1" "plugin" "npc_sakratan" } @@ -1830,7 +1698,8 @@ { "count" "150" "health" "75000" - "extra_damage" "1.25" + "extra_speed" "0.80" + "extra_damage" "3.0" "ignore_max_cap" "1" "plugin" "npc_inabdil" } @@ -1838,7 +1707,7 @@ { "count" "150" "health" "75000" - "extra_damage" "1.25" + "extra_damage" "3.0" "ignore_max_cap" "1" "plugin" "npc_yadeam" } @@ -1861,6 +1730,23 @@ "plugin" "npc_void_infestor" } "0.1" + { + "count" "200" + "ignore_max_cap" "1" + + "health" "50000" + "plugin" "npc_winter_sniper" + "extra_damage" "2.5" + } + "0.1" + { + "count" "200" + "ignore_max_cap" "1" + "plugin" "npc_voided_diversionistico" + "health" "75000" + "extra_damage" "2.0" + } + "0.1" { "count" "150" "health" "100000" @@ -1942,7 +1828,7 @@ "count" "8" "ignore_max_cap" "1" - "health" "200000" + "health" "250000" "extra_damage" "2.0" "plugin" "npc_growing_exat" } @@ -1981,15 +1867,6 @@ "count" "13" "ignore_max_cap" "1" - "health" "75000" - "extra_damage" "2.0" - "plugin" "npc_hosting_blob" - } - "0.1" - { - "count" "13" - "ignore_max_cap" "1" - "health" "75000" "extra_damage" "2.0" "plugin" "npc_enframed_voider" @@ -2004,15 +1881,6 @@ "plugin" "npc_void_particle" } "0.1" - { - "count" "13" - "ignore_max_cap" "1" - - "health" "75000" - "extra_damage" "2.0" - "plugin" "npc_voided_expidonsan_fortifier" - } - "0.1" { "count" "18" "ignore_max_cap" "1" @@ -2022,14 +1890,6 @@ "plugin" "npc_void_sprayer" } "0.1" - { - "count" "200" - "ignore_max_cap" "1" - "plugin" "npc_voided_diversionistico" - "health" "75000" - "extra_damage" "2.0" - } - "0.1" { "count" "1" "does_not_scale" "1" @@ -2067,14 +1927,6 @@ "is_boss" "1" } - "0.1" - { - "count" "250" - "ignore_max_cap" "1" - - "health" "75000" - "plugin" "npc_void_minigate_keeper" - } "0.1" { "count" "25" @@ -2097,6 +1949,7 @@ "health" "75000" "ignore_max_cap" "1" "extra_damage" "1.2" + "extra_speed" "0.80" "plugin" "npc_runover" } "0.1" @@ -2110,27 +1963,18 @@ "0.1" { "count" "100" - "health" "150000" + "health" "75000" "extra_damage" "1.2" "ignore_max_cap" "1" - "plugin" "npc_behemoth" + "plugin" "npc_absolute_incinirator" } "0.1" { - "count" "250" - "ignore_max_cap" "1" - - "health" "75000" - "plugin" "npc_void_expidonsan_cleaner" - } - "0.1" - { - "count" "150" - "health" "75000" - "ignore_max_cap" "1" + "count" "100" + "health" "150000" "extra_damage" "1.2" - - "plugin" "npc_enforcer" + "ignore_max_cap" "1" + "plugin" "npc_behemoth" } "0.1" { @@ -2138,8 +1982,7 @@ "ignore_max_cap" "1" "health" "75000" - "plugin" "npc_voiding_bedrock" - "data" "5000" + "plugin" "npc_void_expidonsan_cleaner" } "0.1" { @@ -2219,7 +2062,7 @@ { "count" "0" - "health" "250000" + "health" "400000" "is_boss" "1" "plugin" "npc_majorsteam" } @@ -2233,7 +2076,7 @@ { "count" "0" - "health" "500000" + "health" "600000" "is_boss" "1" "plugin" "npc_majorvoided" } diff --git a/addons/sourcemod/configs/zombie_riot/classic_default.cfg b/addons/sourcemod/configs/zombie_riot/classic_default.cfg index 80be800eac..5243237e0c 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_default.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_default.cfg @@ -6,7 +6,7 @@ "author_format" "Batfoxkid" "mvmdiff" "1" - "5" + "1" { "xp" "75" "cash" "1000" // 1-5 | 1100 @@ -36,7 +36,7 @@ "plugin" "npc_torsoless_headcrabzombie" } } - "10" + "2" { "xp" "75" "cash" "1500" // 6-10 | 1000 @@ -84,7 +84,7 @@ "plugin" "npc_poisonzombie_fortified_giant" } } - "15" + "3" { "xp" "125" "cash" "2500" // 11-14 | 800 - 15 | 1000 @@ -155,7 +155,7 @@ "plugin" "npc_last_survivor" } } - "20" + "4" { "xp" "125" "cash" "2000" // 16-20 | 1700 @@ -187,7 +187,7 @@ "plugin" "npc_combine_soldier_ar2" } } - "25" + "5" { "xp" "125" "cash" "3000" // 21-25 | 4250 @@ -267,7 +267,7 @@ "plugin" "npc_combine_soldier_collos_swordsman" } } - "30" + "6" { "xp" "250" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -367,7 +367,7 @@ "plugin" "npc_combine_soldier_overlord" } } - "35" + "7" { "xp" "250" "cash" "4000" // 31-35 | 5000 @@ -407,7 +407,7 @@ "plugin" "npc_zombie_heavy_grave" } } - "40" + "8" { "xp" "250" "cash" "6000" // 36-40 | 5750 @@ -471,7 +471,7 @@ "plugin" "npc_zombie_heavy_giant_grave" } } - "45" + "9" { "xp" "500" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -555,7 +555,7 @@ "plugin" "npc_zombie_soldier_giant_grave" } } - "50" + "10" { "xp" "500" "cash" "9000" // 46-50 | 6250 @@ -594,7 +594,7 @@ "plugin" "npc_sniper_main" } } - "55" + "11" { "xp" "500" "cash" "11000" // 51-56 | 9000 @@ -669,7 +669,7 @@ "music_download_outro" "1" "message_outro" "Final_wave_message" } - "60" + "12" { "xp" "1000" "cash" "20000" // 57-59 | 8000 diff --git a/addons/sourcemod/configs/zombie_riot/classic_expidonsa.cfg b/addons/sourcemod/configs/zombie_riot/classic_expidonsa.cfg index bfe59ba544..adbf518116 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_expidonsa.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_expidonsa.cfg @@ -17,7 +17,7 @@ "volume" "0.7" } - "5" + "1" { "xp" "75" "cash" "1000" // 1-5 | 1100 @@ -59,7 +59,7 @@ "plugin" "npc_defanda" } } - "10" + "2" { "xp" "75" "cash" "1500" // 6-10 | 1000 @@ -128,7 +128,7 @@ "plugin" "npc_heavy_punuel" } } - "15" + "3" { "xp" "125" "cash" "2500" // 11-14 | 800 - 15 | 1000 @@ -217,7 +217,7 @@ "plugin" "npc_sergeant_ideal" } } - "20" + "4" { "xp" "125" "cash" "2000" // 16-20 | 1700 @@ -263,7 +263,7 @@ "plugin" "npc_protecta" } } - "25" + "5" { "xp" "125" "cash" "3000" // 21-25 | 4250 @@ -339,7 +339,7 @@ "plugin" "npc_soldine_prototype" } } - "30" + "6" { "xp" "250" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -433,7 +433,7 @@ "plugin" "npc_soldine" } } - "35" + "7" { "xp" "250" "cash" "4000" // 31-35 | 5000 @@ -482,7 +482,7 @@ "plugin" "npc_guardus" } } - "40" + "8" { "xp" "250" "cash" "6000" // 36-40 | 5750 @@ -563,7 +563,7 @@ "plugin" "npc_ignitus" } } - "45" + "9" { "xp" "500" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -681,7 +681,7 @@ "plugin" "npc_captino_agentus" } } - "50" + "10" { "xp" "500" "cash" "9000" // 46-50 | 6250 @@ -729,7 +729,7 @@ "plugin" "npc_speedus_adivus" } } - "55" + "11" { "xp" "500" "cash" "11000" // 51-56 | 9000 @@ -805,7 +805,7 @@ "plugin" "npc_gianttankus" } } - "60" + "12" { "xp" "1000" "cash" "20000" // 57-59 | 18000 @@ -1059,7 +1059,7 @@ "plugin" "npc_anfuhrer_eisenhard" } } - "65" + "13" { "xp" "1000" "cash" "5000" @@ -1129,7 +1129,7 @@ "plugin" "npc_hia_rejuvinator" } } - "70" + "14" { "xp" "1000" "cash" "7500" @@ -1227,7 +1227,7 @@ "music_download_outro" "1" "message_outro" "Final_wave_message" } - "75" + "15" { "xp" "1500" "cash" "12500" diff --git a/addons/sourcemod/configs/zombie_riot/classic_iber&expi.cfg b/addons/sourcemod/configs/zombie_riot/classic_iber&expi.cfg index d1577ac776..6dc1249177 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_iber&expi.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_iber&expi.cfg @@ -17,7 +17,7 @@ "volume" "0.7" } - "5" + "1" { "xp" "75" "cash" "1000" // 1-5 | 1100 @@ -55,7 +55,7 @@ "plugin" "npc_kinat" } } - "10" + "2" { "xp" "75" "cash" "1500" // 6-10 | 1000 @@ -135,7 +135,7 @@ "plugin" "npc_anania" } } - "15" + "3" { "xp" "125" "cash" "2500" // 11-14 | 800 - 15 | 1000 @@ -240,7 +240,7 @@ "plugin" "npc_inqusitor_iidutas" } } - "20" + "4" { "xp" "125" "cash" "2000" // 16-20 | 1700 @@ -289,7 +289,7 @@ "plugin" "npc_cenula" } } - "25" + "5" { "xp" "125" "cash" "3000" // 21-25 | 4250 @@ -376,7 +376,7 @@ "plugin" "npc_combastia" } } - "30" + "6" { "xp" "250" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -468,7 +468,7 @@ "plugin" "npc_anti_sea_robot" } } - "35" + "7" { "xp" "250" "cash" "4000" // 31-35 | 5000 @@ -543,7 +543,7 @@ "plugin" "npc_sentinel" } } - "40" + "8" { "xp" "250" "cash" "6000" // 36-40 | 5750 @@ -664,7 +664,7 @@ "plugin" "npc_sentinel" } } - "45" + "9" { "xp" "500" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -791,7 +791,7 @@ "plugin" "npc_sentinel" } } - "50" + "10" { "xp" "500" "cash" "9000" // 46-50 | 6250 @@ -848,7 +848,7 @@ "plugin" "npc_sentinel" } } - "55" + "11" { "xp" "500" "cash" "11000" // 51-56 | 9000 @@ -946,7 +946,7 @@ "music_download_outro" "1" "message_outro" "Final_wave_message" } - "60" + "12" { "xp" "1000" "cash" "20000" // 57-59 | 8000 diff --git a/addons/sourcemod/configs/zombie_riot/classic_iberia.cfg b/addons/sourcemod/configs/zombie_riot/classic_iberia.cfg index 22b890f882..91f29e2044 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_iberia.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_iberia.cfg @@ -17,7 +17,7 @@ "volume" "0.7" } - "5" + "1" { "xp" "125" "cash" "1000" // 1-5 | 1100 @@ -55,7 +55,7 @@ "extra_damage" "0.9" } } - "10" + "2" { "xp" "125" "cash" "1500" // 6-10 | 1000 @@ -141,7 +141,7 @@ "extra_damage" "0.9" } } - "15" + "3" { "xp" "250" "cash" "2500" // 11-14 | 800 - 15 | 1000 @@ -259,7 +259,7 @@ "extra_damage" "0.9" } } - "20" + "4" { "xp" "250" "cash" "2000" // 16-20 | 1700 @@ -353,7 +353,7 @@ "is_immune_to_nuke" "1" } } - "25" + "5" { "xp" "250" "cash" "3000" // 21-25 | 4250 @@ -480,7 +480,7 @@ "is_immune_to_nuke" "1" } } - "30" + "6" { "xp" "500" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -603,7 +603,7 @@ "is_immune_to_nuke" "1" } } - "35" + "7" { "xp" "500" "cash" "4000" // 31-35 | 5000 @@ -659,7 +659,7 @@ } "0.3" { - "count" "75" + "count" "10" "ignore_max_cap" "1" "extra_damage" "0.95" "health" "5000" @@ -692,7 +692,7 @@ "plugin" "npc_seaborn_spy" } } - "40" + "8" { "xp" "500" "cash" "6000" // 36-40 | 5750 @@ -756,7 +756,7 @@ "plugin" "npc_seaborn_kazimersch_melee_assasin" } } - "45" + "9" { "xp" "750" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -815,7 +815,7 @@ } "0.8" { - "count" "75" + "count" "10" "ignore_max_cap" "1" "extra_damage" "0.95" "health" "5000" @@ -921,7 +921,7 @@ "data" "NT" } } - "50" + "10" { "xp" "750" "cash" "9000" // 46-50 | 6250 @@ -950,14 +950,17 @@ { "count" "200" "ignore_max_cap" "1" + "extra_damage" "0.80" + "health" "35000" "plugin" "npc_seaborn_guard" } "0.1" { - "count" "111" + "count" "10" "ignore_max_cap" "1" "health" "25000" + "extra_damage" "0.80" "plugin" "npc_seaborn_vanguard" "is_outlined" "1" @@ -966,6 +969,8 @@ { "count" "200" "ignore_max_cap" "1" + "extra_damage" "0.80" + "health" "15000" "plugin" "npc_seaborn_caster" } @@ -974,6 +979,7 @@ "count" "0" "plugin" "npc_endspeaker_1" "health" "30000" + "extra_damage" "0.80" "data" "EX" "is_outlined" "1" "is_immune_to_nuke" "1" @@ -983,6 +989,7 @@ { "count" "150" "ignore_max_cap" "1" + "extra_damage" "0.80" "health" "50000" "plugin" "npc_seaborn_defender" @@ -997,7 +1004,9 @@ "0.1" { "count" "125" + "extra_damage" "0.80" "ignore_max_cap" "1" + "health" "25000" "plugin" "npc_seaborn_specialist" } @@ -1005,6 +1014,7 @@ { "count" "125" "ignore_max_cap" "1" + "extra_damage" "0.80" "health" "35000" "plugin" "npc_seaborn_supporter" @@ -1017,7 +1027,7 @@ "is_immune_to_nuke" "1" } } - "55" + "11" { "xp" "750" "cash" "11000" // 51-56 | 9000 @@ -1046,6 +1056,8 @@ { "count" "200" "ignore_max_cap" "1" + "extra_damage" "0.80" + "health" "35000" "plugin" "npc_seaborn_guard" } @@ -1053,6 +1065,8 @@ { "count" "200" "ignore_max_cap" "1" + "extra_damage" "0.80" + "health" "15000" "plugin" "npc_seaborn_caster" } @@ -1060,7 +1074,8 @@ { "count" "150" "ignore_max_cap" "1" - "health" "75000" + "extra_damage" "0.80" + "health" "50000" "plugin" "npc_seaborn_defender" } @@ -1068,7 +1083,8 @@ { "count" "125" "ignore_max_cap" "1" - "health" "52500" + "extra_damage" "0.80" + "health" "25000" "plugin" "npc_seaborn_specialist" } @@ -1076,13 +1092,16 @@ { "count" "125" "ignore_max_cap" "1" + "extra_damage" "0.80" + "health" "35000" "plugin" "npc_seaborn_supporter" } "0.6" { - "count" "100" + "count" "10" "ignore_max_cap" "1" + "extra_damage" "0.80" "health" "25000" "plugin" "npc_seaborn_vanguard" @@ -1101,7 +1120,7 @@ "count" "3" "plugin" "npc_seaborn_kazimersch_beserker" - "extra_damage" "1.35" + "extra_damage" "1.25" "extra_size" "1.2" "extra_speed" "1.0" "health" "90000" @@ -1120,7 +1139,7 @@ "music_download_outro" "1" "message_outro" "Final_wave_message" } - "60" + "12" { "xp" "1500" "cash" "20000" // 57-59 | 8000 @@ -1386,7 +1405,7 @@ } "0.1" { - "count" "75" + "count" "10" "ignore_max_cap" "1" "health" "20000" @@ -1493,9 +1512,10 @@ "0.1" { - "count" "20" + "count" "10" "ignore_max_cap" "1" "health" "25000" + "extra_damage" "0.90" "plugin" "npc_seaborn_vanguard" "is_outlined" "1" @@ -1504,6 +1524,8 @@ { "count" "200" "ignore_max_cap" "1" + "extra_damage" "0.90" + "health" "35000" "plugin" "npc_seaborn_guard" } @@ -1511,6 +1533,8 @@ { "count" "200" "ignore_max_cap" "1" + "extra_damage" "0.90" + "health" "15000" "plugin" "npc_seaborn_caster" } @@ -1518,6 +1542,8 @@ { "count" "150" "ignore_max_cap" "1" + "extra_damage" "0.90" + "health" "50000" "plugin" "npc_seaborn_defender" } @@ -1525,6 +1551,8 @@ { "count" "125" "ignore_max_cap" "1" + "extra_damage" "0.90" + "health" "25000" "plugin" "npc_seaborn_specialist" } @@ -1532,6 +1560,8 @@ { "count" "125" "ignore_max_cap" "1" + "extra_damage" "0.90" + "health" "35000" "plugin" "npc_seaborn_supporter" } diff --git a/addons/sourcemod/configs/zombie_riot/classic_interitus.cfg b/addons/sourcemod/configs/zombie_riot/classic_interitus.cfg index cfa65ca23c..14d0ee3053 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_interitus.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_interitus.cfg @@ -17,7 +17,7 @@ "volume" "0.85" } - "5" + "1" { "xp" "200" "cash" "1000" // 1-5 | 1100 @@ -26,6 +26,7 @@ { "count" "700" "ignore_max_cap" "1" + "health" "450" "plugin" "npc_ahim" } @@ -33,6 +34,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "600" "plugin" "npc_atilla" } @@ -40,6 +42,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "450" "plugin" "npc_qanaas" } @@ -48,11 +51,11 @@ "count" "200" "ignore_max_cap" "1" - "health" "900" + "health" "1000" "plugin" "npc_inabdil" } } - "10" + "2" { "xp" "200" "cash" "1500" // 6-10 | 1000 @@ -63,6 +66,7 @@ { "count" "400" "ignore_max_cap" "1" + "health" "450" "plugin" "npc_ahim" } @@ -70,6 +74,7 @@ { "count" "150" "ignore_max_cap" "1" + "health" "600" "plugin" "npc_atilla" } @@ -85,6 +90,7 @@ { "count" "300" "ignore_max_cap" "1" + "health" "450" "plugin" "npc_sakratan" } @@ -92,6 +98,7 @@ { "count" "300" "ignore_max_cap" "1" + "health" "800" "plugin" "npc_khazaan" } @@ -99,6 +106,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "450" "plugin" "npc_qanaas" } @@ -115,11 +123,11 @@ "count" "50" "ignore_max_cap" "1" - "health" "4000" + "health" "3000" "plugin" "npc_rajul" } } - "15" + "3" { "xp" "250" "cash" "2500" // 11-14 | 800 - 15 | 1000 @@ -142,6 +150,7 @@ { "count" "300" "ignore_max_cap" "1" + "health" "450" "plugin" "npc_ahim" } @@ -149,6 +158,7 @@ { "count" "150" "ignore_max_cap" "1" + "health" "600" "plugin" "npc_atilla" } @@ -156,6 +166,7 @@ { "count" "375" "ignore_max_cap" "1" + "health" "1000" "plugin" "npc_inabdil" } @@ -163,6 +174,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "800" "plugin" "npc_khazaan" } @@ -170,6 +182,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "1500" "plugin" "npc_yadeam" } @@ -177,6 +190,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "450" "plugin" "npc_sakratan" } @@ -184,6 +198,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "450" "plugin" "npc_qanaas" } @@ -192,7 +207,7 @@ "count" "75" "ignore_max_cap" "1" - "health" "4000" + "health" "3000" "plugin" "npc_rajul" } "60.0" @@ -204,7 +219,7 @@ "plugin" "npc_ancient_demon" } } - "20" + "4" { "xp" "250" "cash" "2000" // 16-20 | 1700 @@ -215,6 +230,7 @@ { "count" "500" "ignore_max_cap" "1" + "health" "1000" "plugin" "npc_frost_hunter" } @@ -222,6 +238,7 @@ { "count" "300" "ignore_max_cap" "1" + "health" "2000" "plugin" "npc_airborn_explorer" } @@ -229,6 +246,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "1000" "plugin" "npc_winter_sniper" } @@ -236,11 +254,12 @@ { "count" "200" "ignore_max_cap" "1" + "health" "1500" "plugin" "npc_snowey_gunner" } } - "25" + "5" { "xp" "250" "cash" "3000" // 21-25 | 4250 @@ -251,6 +270,7 @@ { "count" "275" "ignore_max_cap" "1" + "health" "1000" "plugin" "npc_frost_hunter" } @@ -258,6 +278,7 @@ { "count" "200" "ignore_max_cap" "1" + "health" "2500" "plugin" "npc_airborn_explorer" } @@ -265,6 +286,7 @@ { "count" "150" "ignore_max_cap" "1" + "health" "1500" "plugin" "npc_snowey_gunner" } @@ -272,6 +294,7 @@ { "count" "150" "ignore_max_cap" "1" + "health" "1500" "plugin" "npc_freezing_cleaner" } @@ -279,6 +302,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "1000" "plugin" "npc_winter_sniper" } @@ -286,6 +310,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "5000" "plugin" "npc_skin_hunter" } @@ -293,6 +318,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "1500" "plugin" "npc_ziberian_miner" } @@ -300,11 +326,12 @@ { "count" "50" "ignore_max_cap" "1" + "health" "10000" "plugin" "npc_arctic_mage" } } - "30" + "6" { "xp" "375" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -341,6 +368,7 @@ { "count" "125" "ignore_max_cap" "1" + "health" "5000" "plugin" "npc_skin_hunter" } @@ -356,6 +384,7 @@ { "count" "175" "ignore_max_cap" "1" + "health" "1750" "plugin" "npc_ziberian_miner" "extra_damage" "1.25" @@ -364,6 +393,7 @@ { "count" "125" "ignore_max_cap" "1" + "health" "1500" "plugin" "npc_snowey_gunner" } @@ -371,6 +401,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "1250" "plugin" "npc_winter_sniper" "extra_damage" "1.25" @@ -379,6 +410,7 @@ { "count" "75" "ignore_max_cap" "1" + "health" "10000" "plugin" "npc_arctic_mage" } @@ -391,7 +423,7 @@ "plugin" "npc_irritated_person" } } - "35" + "7" { "xp" "375" "cash" "4000" // 31-35 | 5000 @@ -416,6 +448,7 @@ { "count" "175" "ignore_max_cap" "1" + "health" "15000" "plugin" "npc_runover" } @@ -423,6 +456,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "3500" "plugin" "npc_enforcer" } @@ -430,14 +464,15 @@ { "count" "125" "ignore_max_cap" "1" + "health" "6500" "plugin" "npc_braindead" } } - "40" + "8" { "xp" "375" - "cash" "6000" // 36-40 | 5750 + "cash" "6600" // 36-40 | 5750 "setup" "59" "ammobox_extra" "5" @@ -459,6 +494,7 @@ { "count" "175" "ignore_max_cap" "1" + "health" "15000" "plugin" "npc_runover" } @@ -466,6 +502,7 @@ { "count" "125" "ignore_max_cap" "1" + "health" "6500" "plugin" "npc_braindead" } @@ -473,6 +510,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "6500" "plugin" "npc_absolute_incinirator" } @@ -480,6 +518,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "3500" "plugin" "npc_enforcer" } @@ -487,6 +526,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "10000" "plugin" "npc_mad_doctor" } @@ -494,11 +534,12 @@ { "count" "50" "ignore_max_cap" "1" + "health" "50000" "plugin" "npc_behemoth" } } - "45" + "9" { "xp" "750" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -533,6 +574,7 @@ { "count" "150" "ignore_max_cap" "1" + "health" "15000" "plugin" "npc_runover" } @@ -540,6 +582,7 @@ { "count" "150" "ignore_max_cap" "1" + "health" "6500" "plugin" "npc_braindead" } @@ -547,6 +590,7 @@ { "count" "125" "ignore_max_cap" "1" + "health" "10000" "plugin" "npc_mad_doctor" } @@ -554,6 +598,7 @@ { "count" "125" "ignore_max_cap" "1" + "health" "6500" "plugin" "npc_absolute_incinirator" } @@ -561,6 +606,7 @@ { "count" "100" "ignore_max_cap" "1" + "health" "3500" "plugin" "npc_enforcer" } @@ -568,6 +614,7 @@ { "count" "50" "ignore_max_cap" "1" + "health" "50000" "plugin" "npc_behemoth" } @@ -580,7 +627,7 @@ "plugin" "npc_abomination" } } - "50" + "10" { "xp" "750" "cash" "9000" // 46-50 | 6250 @@ -676,7 +723,7 @@ "plugin" "npc_chaos_supporter" } } - "55" + "11" { "xp" "750" "cash" "11000" // 51-56 | 9000 @@ -687,7 +734,7 @@ { "count" "150" "ignore_max_cap" "1" - "health" "50000" + "health" "35000" "plugin" "npc_inabdil" "extra_damage" "2.0" } @@ -695,7 +742,7 @@ { "count" "150" "ignore_max_cap" "1" - "health" "50000" + "health" "35000" "plugin" "npc_runover" "extra_damage" "1.1" } @@ -777,7 +824,7 @@ "music_download_outro" "1" "message_outro" "Final_wave_message" } - "60" + "12" { "xp" "3000" "cash" "20000" // 57-59 | 8000 @@ -796,7 +843,7 @@ "0.1" { - "count" "200" + "count" "12" "ignore_max_cap" "1" "health" "75000" @@ -805,7 +852,7 @@ } "0.1" { - "count" "200" + "count" "12" "ignore_max_cap" "1" "health" "75000" @@ -814,7 +861,7 @@ } "0.1" { - "count" "200" + "count" "12" "ignore_max_cap" "1" "health" "75000" @@ -823,7 +870,7 @@ } "0.1" { - "count" "200" + "count" "12" "ignore_max_cap" "1" "health" "75000" @@ -832,7 +879,7 @@ } "0.1" { - "count" "200" + "count" "12" "ignore_max_cap" "1" "health" "75000" @@ -841,7 +888,7 @@ } "0.1" { - "count" "200" + "count" "12" "ignore_max_cap" "1" "health" "75000" @@ -850,7 +897,7 @@ } "2.0" { - "count" "100" + "count" "6" "ignore_max_cap" "1" "health" "250000" @@ -859,7 +906,7 @@ } "0.1" { - "count" "100" + "count" "50" "ignore_max_cap" "1" "health" "50000" @@ -870,7 +917,7 @@ { "count" "1" - "health" "250000" + "health" "350000" "is_boss" "1" "plugin" "npc_ancient_demon" "extra_damage" "3.0" @@ -981,7 +1028,7 @@ "count" "12" "ignore_max_cap" "1" - "health" "56250" + "health" "50000" "plugin" "npc_hitman" "extra_damage" "1.2" } @@ -1042,41 +1089,41 @@ "1.0" { - "count" "100" + "count" "150" "ignore_max_cap" "1" - "health" "50000" + "health" "25000" "plugin" "npc_chaos_insane" } "1.0" { - "count" "100" + "count" "150" "ignore_max_cap" "1" - "health" "50000" + "health" "25000" "plugin" "npc_chaos_supporter" } "1.0" { - "count" "100" + "count" "150" "ignore_max_cap" "1" - "health" "50000" + "health" "25000" "plugin" "npc_chaos_mage" } "1.0" { - "count" "100" + "count" "150" "ignore_max_cap" "1" - "health" "50000" + "health" "25000" "plugin" "npc_chaos_swordsman" } "60.0" { "count" "0" - "health" "750000" + "health" "1000000" "extra_speed" "1.15" "extra_damage" "1.2" "is_boss" "1" diff --git a/addons/sourcemod/configs/zombie_riot/classic_laboratories.cfg b/addons/sourcemod/configs/zombie_riot/classic_laboratories.cfg index 069ea76836..0c5e81f71c 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_laboratories.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_laboratories.cfg @@ -17,7 +17,7 @@ "volume" "1.05" } - "5" + "1" { "xp" "75" "cash" "1000" // 1-5 | 1100 @@ -55,7 +55,7 @@ "plugin" "npc_aperture_jumper" } } - "10" + "2" { "xp" "75" "cash" "1500" // 6-10 | 1000 @@ -127,7 +127,7 @@ "plugin" "npc_aperture_halter" } } - "15" + "3" { "xp" "125" "cash" "2500" // 11-14 | 800 - 15 | 1000 @@ -221,7 +221,7 @@ "plugin" "npc_last_survivor_science" } } - "20" + "4" { "xp" "125" "cash" "2000" // 16-20 | 1700 @@ -285,7 +285,7 @@ "plugin" "npc_aperture_shotgunner_v2" } } - "25" + "5" { "xp" "125" "cash" "3000" // 21-25 | 4250 @@ -407,7 +407,7 @@ "extra_damage" "2.0" } } - "30" + "6" { "xp" "250" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -554,7 +554,7 @@ "plugin" "npc_aperture_exterminator" } } - "35" + "7" { "xp" "250" "cash" "4000" // 31-35 | 5000 @@ -624,7 +624,7 @@ "plugin" "npc_aperture_builder" // Plugin Name } } - "40" + "8" { "xp" "250" "cash" "6000" // 36-40 | 5750 @@ -769,7 +769,7 @@ "extra_damage" "2.0" } } - "45" + "9" { "xp" "500" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -941,7 +941,7 @@ "plugin" "npc_aperture_spokesman" } } - "50" + "10" { "xp" "500" "cash" "9000" // 46-50 | 6250 @@ -1020,7 +1020,7 @@ "plugin" "npc_aperture_builder" // Plugin Name } } - "55" + "11" { "xp" "500" "cash" "11000" // 51-56 | 9000 @@ -1188,7 +1188,7 @@ "music_download_outro" "1" "message_outro" "Final_wave_message" } - "60" + "12" { "xp" "1000" "cash" "20000" // 57-59 | 8000 diff --git a/addons/sourcemod/configs/zombie_riot/classic_medieval.cfg b/addons/sourcemod/configs/zombie_riot/classic_medieval.cfg index 182eddcc33..650f4ab6a0 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_medieval.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_medieval.cfg @@ -17,7 +17,7 @@ "volume" "0.75" } - "5" + "1" { "xp" "75" "cash" "1000" // 1-5 | 1100 @@ -51,7 +51,7 @@ "plugin" "npc_medival_skirmisher" } } - "10" + "2" { "xp" "75" "cash" "1500" // 6-10 | 1000 @@ -115,7 +115,7 @@ "plugin" "npc_medival_man_at_arms" } } - "15" + "3" { "xp" "125" "cash" "2500" // 11-14 | 800 - 15 | 1000 @@ -180,13 +180,13 @@ "plugin" "npc_medival_construct" } } - "20" + "4" { "xp" "125" "cash" "2000" // 16-20 | 1700 "setup" "59" "ammobox_extra" "5" - "Medieval_research_level" "1" + "Medieval_research_level" "1" "0.3" { @@ -228,7 +228,7 @@ "plugin" "npc_medival_eagle_warrior" } } - "25" + "5" { "xp" "125" "cash" "3000" // 21-25 | 4250 @@ -313,7 +313,7 @@ "plugin" "npc_medival_crossbow_giant" } } - "30" + "6" { "xp" "250" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -425,7 +425,7 @@ "plugin" "npc_medival_monk" } } - "35" + "7" { "xp" "250" "cash" "4000" // 31-35 | 5000 @@ -473,7 +473,7 @@ "plugin" "npc_medival_cavalary" } } - "40" + "8" { "xp" "250" "cash" "6000" // 36-40 | 5750 @@ -535,7 +535,7 @@ "plugin" "npc_medival_eagle_giant" } } - "45" + "9" { "xp" "500" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -625,13 +625,13 @@ "plugin" "npc_medival_achilles" } } - "50" + "10" { "xp" "500" "cash" "9000" // 46-50 | 6250 "setup" "59" "ammobox_extra" "5" - "Medieval_research_level" "3" + "Medieval_research_level" "3" "0.4" { @@ -682,12 +682,16 @@ "plugin" "npc_medival_paladin" } } - "55" + "11" { "xp" "500" "cash" "11000" // 51-56 | 9000 "setup" "59" "ammobox_extra" "5" + "music_track_outro" "#zombiesurvival/wave_music/wave_60_prepare.mp3" + "music_outro_duration" "65" + "music_download_outro" "1" + "message_outro" "Final_wave_message" "0.5" { @@ -737,7 +741,7 @@ "health" "50000" "plugin" "npc_medival_paladin" } - "0.0" + "0.1" { "count" "50" "ignore_max_cap" "1" @@ -782,13 +786,8 @@ "plugin" "npc_medival_ram" "data" "npc_medival_crossbow_giant" } - - "music_track_outro" "#zombiesurvival/wave_music/wave_60_prepare.mp3" - "music_outro_duration" "65" - "music_download_outro" "1" - "message_outro" "Final_wave_message" } - "60" + "12" { "xp" "1000" "cash" "20000" // 57-59 | 8000 @@ -939,7 +938,6 @@ "plugin" "npc_medival_eagle_giant" } - "0.1" { "count" "1" diff --git a/addons/sourcemod/configs/zombie_riot/classic_ruina.cfg b/addons/sourcemod/configs/zombie_riot/classic_ruina.cfg index acb1e48704..e8449e6392 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_ruina.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_ruina.cfg @@ -17,7 +17,7 @@ "volume" "0.6" } - "5" + "1" { "xp" "75" "cash" "1000" // 1-5 | 1100 @@ -55,7 +55,7 @@ "plugin" "npc_ruina_daedalus" } } - "10" + "2" { "xp" "75" "cash" "1500" // 6-10 | 1000 @@ -163,10 +163,10 @@ "is_boss" "1" } } - "15" + "3" { "xp" "125" - "cash" "1500" // 11-14 | 800 - 15 | 1000 + "cash" "2500" // 11-14 | 800 - 15 | 1000 "setup" "59" "ammobox_extra" "10" "map_setup_fake" "1" @@ -291,7 +291,7 @@ "plugin" "npc_ruina_theocracy" } } - "20" + "4" { "xp" "125" "cash" "2000" // 16-20 | 1700 @@ -331,7 +331,7 @@ "plugin" "npc_ruina_draedon" } } - "25" + "5" { "xp" "125" "cash" "3000" // 21-25 | 4250 @@ -437,7 +437,7 @@ "plugin" "npc_ruina_iana" } } - "30" + "6" { "xp" "250" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -554,7 +554,7 @@ "plugin" "npc_ruina_lex" } } - "35" + "7" { "xp" "250" "cash" "4000" // 31-35 | 5000 @@ -594,7 +594,7 @@ "plugin" "npc_ruina_draeonis" } } - "40" + "8" { "xp" "250" "cash" "6000" // 36-40 | 5750 @@ -692,7 +692,7 @@ "plugin" "npc_ruina_rulius" } } - "45" + "9" { "xp" "500" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -810,7 +810,7 @@ "plugin" "npc_ruina_ruliana" } } - "50" + "10" { "xp" "500" "cash" "9000" // 46-50 | 6250 @@ -850,7 +850,7 @@ "plugin" "npc_ruina_draconia" } } - "55" + "11" { "xp" "500" "cash" "11000" // 51-56 | 9000 @@ -953,7 +953,7 @@ "music_download_outro" "1" "message_outro" "Final_wave_message" } - "60" + "12" { "xp" "1000" "cash" "20000" // 57-59 | 8000 diff --git a/addons/sourcemod/configs/zombie_riot/classic_victoria.cfg b/addons/sourcemod/configs/zombie_riot/classic_victoria.cfg index 4ba96e4da4..37874ed9f6 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_victoria.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_victoria.cfg @@ -17,7 +17,7 @@ "volume" "1.0" } - "5" + "1" { "xp" "75" "cash" "1000" // 1-5 | 1100 @@ -62,7 +62,7 @@ "plugin" "npc_signaller" } } - "10" + "2" { "xp" "75" "cash" "1500" // 6-10 | 1000 @@ -141,7 +141,7 @@ "plugin" "npc_signaller" } } - "15" + "3" { "xp" "125" "cash" "2500" // 11-14 | 800 - 15 | 1000 @@ -242,7 +242,7 @@ "plugin" "npc_signaller" } } - "20" + "4" { "xp" "125" "cash" "2000" // 16-20 | 1700 @@ -297,7 +297,7 @@ "plugin" "npc_signaller" } } - "25" + "5" { "xp" "125" "cash" "3000" // 21-25 | 4250 @@ -390,7 +390,7 @@ "plugin" "npc_signaller" } } - "30" + "6" { "xp" "250" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -501,7 +501,7 @@ "plugin" "npc_signaller" } } - "35" + "7" { "xp" "250" "cash" "4000" // 31-35 | 5000 @@ -568,7 +568,7 @@ "plugin" "npc_signaller" } } - "40" + "8" { "xp" "250" "cash" "6000" // 36-40 | 5750 @@ -601,7 +601,7 @@ } "0.1" { - "count" "25" + "count" "50" "ignore_max_cap" "1" "extra_damage" "0.5" "health" "4000" @@ -632,6 +632,12 @@ "plugin" "npc_mortar" } "0.1" + { + "count" "0" + "data" "type-d" + "plugin" "npc_victoria_factory" + } + "0.1" { "count" "0" @@ -689,7 +695,7 @@ "plugin" "npc_signaller" } } - "45" + "9" { "xp" "500" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -737,7 +743,7 @@ } "0.1" { - "count" "25" + "count" "50" "ignore_max_cap" "1" "extra_damage" "0.75" "health" "4500" @@ -825,7 +831,7 @@ { "count" "0" "is_boss" "1" - "health" "75000" + "health" "70000" "is_immune_to_nuke" "1" "is_outlined" "2" "is_health_scaling" "1" @@ -838,7 +844,7 @@ "is_immune_to_nuke" "1" "is_outlined" "2" "is_health_scaling" "1" - "health" "75000" + "health" "70000" "data" "icononly" "plugin" "npc_bigpipe" } @@ -849,7 +855,7 @@ "is_immune_to_nuke" "1" "is_outlined" "2" "is_health_scaling" "1" - "health" "75000" + "health" "70000" "data" "icononly" "plugin" "npc_harbringer" } @@ -871,7 +877,7 @@ "plugin" "npc_signaller" } } - "50" + "10" { "xp" "500" "cash" "9000" // 46-50 | 6250 @@ -952,7 +958,7 @@ "plugin" "npc_signaller" } } - "55" + "11" { "xp" "500" "cash" "11000" // 51-56 | 9000 @@ -1034,6 +1040,12 @@ "plugin" "npc_mechanist" } "0.1" + { + "count" "0" + "data" "type-d" + "plugin" "npc_victoria_factory" + } + "0.1" { "count" "75" "ignore_max_cap" "1" @@ -1060,7 +1072,7 @@ "music_download_outro" "1" "message_outro" "Victoria_Help_Message" } - "60" + "12" { "xp" "1000" "cash" "20000" // 57-59 | 8000 @@ -1349,7 +1361,7 @@ } "0.1" { - "count" "25" + "count" "35" "ignore_max_cap" "1" "health" "40000" "extra_damage" "1.25" @@ -1494,5 +1506,3 @@ } } } - - diff --git a/addons/sourcemod/configs/zombie_riot/classic_void.cfg b/addons/sourcemod/configs/zombie_riot/classic_void.cfg index fa8b075469..328dc26c7e 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_void.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_void.cfg @@ -17,7 +17,7 @@ "volume" "1.25" } - "5" + "1" { "xp" "75" "cash" "1000" // 1-5 | 1100 @@ -60,7 +60,7 @@ "plugin" "npc_void_portal" } } - "10" + "2" { "xp" "75" "cash" "1500" // 6-10 | 1000 @@ -153,7 +153,7 @@ "plugin" "npc_void_portal" } } - "15" + "3" { "xp" "125" "cash" "2500" // 11-14 | 800 - 15 | 1000 @@ -265,7 +265,7 @@ "plugin" "npc_void_ixufan" } } - "20" + "4" { "xp" "125" "cash" "2000" // 16-20 | 1700 @@ -310,7 +310,7 @@ "plugin" "npc_void_portal" } } - "25" + "5" { "xp" "125" "cash" "3000" // 21-25 | 4250 @@ -408,7 +408,7 @@ "plugin" "npc_void_portal" } } - "30" + "6" { "xp" "250" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -526,7 +526,7 @@ "plugin" "npc_void_encasulator" } } - "35" + "7" { "xp" "250" "cash" "4000" // 31-35 | 5000 @@ -586,7 +586,7 @@ "plugin" "npc_void_portal" } } - "40" + "8" { "xp" "250" "cash" "6000" // 36-40 | 5750 @@ -691,7 +691,7 @@ "plugin" "npc_void_portal" } } - "45" + "9" { "xp" "500" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -816,7 +816,7 @@ "plugin" "npc_void_brooding_petra" } } - "50" + "10" { "xp" "500" "cash" "9000" // 46-50 | 6250 @@ -887,7 +887,7 @@ "plugin" "npc_void_portal" } } - "55" + "11" { "xp" "500" "cash" "11000" // 51-56 | 9000 @@ -1023,7 +1023,7 @@ "music_download_outro" "1" "message_outro" "Void_Survival_Help_Message" } - "60" + "12" { "xp" "1000" "cash" "20000" // 57-59 | 8000 @@ -1408,5 +1408,3 @@ } } } - - diff --git a/addons/sourcemod/configs/zombie_riot/classic_whiteflowers_revenge.cfg b/addons/sourcemod/configs/zombie_riot/classic_whiteflowers_revenge.cfg index 6d65293004..eed8181de7 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_whiteflowers_revenge.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_whiteflowers_revenge.cfg @@ -16,7 +16,7 @@ "volume" "1.0" } - "5" + "1" { "xp" "75" "cash" "1000" // 1-5 | 1100 @@ -49,7 +49,7 @@ "plugin" "npc_combine_soldier_ar2" } } - "10" + "2" { "xp" "75" "cash" "1500" // 6-10 | 1000 @@ -138,7 +138,7 @@ "plugin" "npc_combine_soldier_collos_swordsman" } } - "15" + "3" { "xp" "125" "cash" "2500" // 11-14 | 800 - 15 | 1000 @@ -251,7 +251,7 @@ "plugin" "npc_combine_soldier_overlord" } } - "20" + "4" { "xp" "125" "cash" "2000" // 16-20 | 1700 @@ -283,7 +283,7 @@ "plugin" "npc_combine_soldier_ar2" } } - "25" + "5" { "xp" "125" "cash" "3000" // 21-25 | 4250 @@ -363,7 +363,7 @@ "plugin" "npc_combine_soldier_collos_swordsman" } } - "30" + "6" { "xp" "250" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -463,7 +463,7 @@ "plugin" "npc_combine_soldier_overlord" } } - "35" + "7" { "xp" "250" "cash" "4000" // 31-35 | 5000 @@ -503,7 +503,7 @@ "plugin" "npc_zombie_heavy_grave" } } - "40" + "8" { "xp" "250" "cash" "6000" // 36-40 | 5750 @@ -567,7 +567,7 @@ "plugin" "npc_zombie_heavy_giant_grave" } } - "45" + "9" { "xp" "500" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -651,7 +651,7 @@ "plugin" "npc_zombie_soldier_giant_grave" } } - "50" + "10" { "xp" "500" "cash" "9000" // 46-50 | 6250 @@ -692,7 +692,7 @@ "plugin" "npc_sniper_main" } } - "55" + "11" { "xp" "500" "cash" "11000" // 51-56 | 9000 @@ -769,7 +769,7 @@ "music_download_outro" "1" "message_outro" "Final_wave_message" } - "60" + "12" { "xp" "1000" "cash" "20000" // 57-59 | 8000 diff --git a/addons/sourcemod/configs/zombie_riot/classic_xeno.cfg b/addons/sourcemod/configs/zombie_riot/classic_xeno.cfg index 0148c60f74..e8f30f5d0b 100644 --- a/addons/sourcemod/configs/zombie_riot/classic_xeno.cfg +++ b/addons/sourcemod/configs/zombie_riot/classic_xeno.cfg @@ -18,7 +18,7 @@ "volume" "1.0" } - "5" + "1" { "xp" "125" "cash" "1000" // 1-5 | 1100 @@ -48,7 +48,7 @@ "plugin" "npc_xeno_torsoless_headcrabzombie" } } - "10" + "2" { "xp" "125" "cash" "1500" // 6-10 | 1000 @@ -87,7 +87,7 @@ "health" "225" "plugin" "npc_xeno_fastzombie" } - "60.0" + "0.1" { "count" "50" "ignore_max_cap" "1" @@ -95,8 +95,16 @@ "health" "4500" "plugin" "npc_xeno_poisonzombie_fortified_giant" } + "30.0" + { + "count" "1" + + "health" "10000" + "is_boss" "1" + "plugin" "npc_xeno_last_survivor" + } } - "15" + "3" { "xp" "250" "cash" "2500" // 11-14 | 800 - 15 | 1000 @@ -161,7 +169,7 @@ { "count" "1" - "health" "10000" + "health" "15000" "is_boss" "1" "plugin" "npc_xeno_early_infected" } @@ -174,7 +182,7 @@ "plugin" "npc_xeno_last_survivor" } } - "20" + "4" { "xp" "250" "cash" "2000" // 16-20 | 1700 @@ -197,7 +205,7 @@ "health" "900" "plugin" "npc_xeno_combine_police_smg" } - "90.0" + "30.0" { "count" "200" "ignore_max_cap" "1" @@ -205,8 +213,16 @@ "health" "1600" "plugin" "npc_xeno_combine_soldier_ar2" } + "60.0" + { + "count" "1" + + "health" "20000" + "is_boss" "1" + "plugin" "npc_xeno_early_infected" + } } - "25" + "5" { "xp" "250" "cash" "3000" // 21-25 | 4250 @@ -269,7 +285,7 @@ "health" "9000" "plugin" "npc_xeno_combine_soldier_giant_swordsman" } - "1.0" + "0.1" { "count" "50" "ignore_max_cap" "1" @@ -277,16 +293,24 @@ "health" "1750" "plugin" "npc_xeno_combine_soldier_elite" } - "59.0" + "0.1" { "count" "2" - "health" "30000" + "health" "25000" "is_boss" "1" "plugin" "npc_xeno_combine_soldier_collos_swordsman" } + "60.0" + { + "count" "1" + + "health" "25000" + "is_boss" "1" + "plugin" "npc_xeno_combine_soldier_overlord" + } } - "30" + "6" { "xp" "500" "cash" "5000" // 26-29 | 2950 - 30 | 2500 @@ -380,7 +404,7 @@ { "count" "1" - "health" "50000" + "health" "40000" "is_boss" "1" "plugin" "npc_xeno_infected_lab_doctor" } @@ -393,7 +417,7 @@ "plugin" "npc_xeno_combine_soldier_overlord" } } - "35" + "7" { "xp" "500" "cash" "4000" // 31-35 | 5000 @@ -424,7 +448,7 @@ "health" "3000" "plugin" "npc_xeno_flying_armor" } - "90.0" + "30.0" { "count" "125" "ignore_max_cap" "1" @@ -432,8 +456,16 @@ "health" "6000" "plugin" "npc_xeno_zombie_heavy_grave" } + "60.0" + { + "count" "1" + + "health" "70000" + "is_boss" "1" + "plugin" "npc_xeno_infected_lab_doctor" + } } - "40" + "8" { "xp" "500" "cash" "6000" // 36-40 | 5750 @@ -488,7 +520,7 @@ "health" "4500" "plugin" "npc_xeno_medic_healer" } - "60.0" + "0.1" { "count" "50" "ignore_max_cap" "1" @@ -496,8 +528,17 @@ "health" "22500" "plugin" "npc_xeno_zombie_heavy_giant_grave" } + "60.0" + { + "count" "1" + + "health" "166000" + "is_boss" "1" + "extra_size" "0.75" + "plugin" "npc_xeno_zombie_soldier_giant_grave" + } } - "45" + "9" { "xp" "750" "cash" "10000" // 41-44 | 5000 - 45 | 5000 @@ -571,7 +612,6 @@ "health" "22500" "plugin" "npc_xeno_zombie_heavy_giant_grave" } - "0.1" { "count" "1" @@ -584,12 +624,12 @@ { "count" "1" - "health" "225000" + "health" "250000" "is_boss" "1" "plugin" "npc_xeno_zombie_soldier_giant_grave" } } - "50" + "10" { "xp" "750" "cash" "9000" // 46-50 | 6250 @@ -620,7 +660,7 @@ "health" "15000" "plugin" "npc_xeno_zombie_demo_main" } - "90.0" + "30.0" { "count" "200" "ignore_max_cap" "1" @@ -628,8 +668,16 @@ "health" "7500" "plugin" "npc_xeno_sniper_main" } + "60.0" + { + "count" "1" + + "health" "333000" + "is_boss" "1" + "plugin" "npc_xeno_acclaimed_swordsman" + } } - "55" + "11" { "xp" "750" "cash" "11000" // 51-56 | 9000 @@ -692,7 +740,7 @@ "health" "127500" "plugin" "npc_xeno_zombie_pyro_giant_main" } - "60.0" + "0.1" { "count" "50" "ignore_max_cap" "1" @@ -700,13 +748,24 @@ "health" "110000" "plugin" "npc_xeno_combine_soldier_deutsch_ritter" } + "60.0" + { + "count" "0" + + "health" "555555" + "is_boss" "1" + "extra_speed" "0.75" + "extra_thinkspeed" "1.25" + "custom_name" "Rundown Xeno Ouroboros Ekas-2008" + "plugin" "npc_xeno_robot" + } "music_track_outro" "#zombiesurvival/wave_music/wave_60_prepare.mp3" "music_outro_duration" "65" "music_download_outro" "1" "message_outro" "Final_wave_message" } - "60" + "12" { "xp" "1500" "cash" "20000" // 57-59 | 8000 @@ -737,7 +796,7 @@ "count" "15" "ignore_max_cap" "1" - "health" "100000" + "health" "90000" "plugin" "npc_xeno_poisonzombie_fortified" } "0.1" @@ -745,7 +804,7 @@ "count" "38" "ignore_max_cap" "1" - "health" "45000" + "health" "35000" "plugin" "npc_xeno_torsoless_headcrabzombie" } "0.1" @@ -753,7 +812,7 @@ "count" "10" "ignore_max_cap" "1" - "health" "30000" + "health" "20000" "plugin" "npc_xeno_fastzombie_fortified" } "2.0" @@ -761,14 +820,14 @@ "count" "8" "ignore_max_cap" "1" - "health" "300000" + "health" "150000" "plugin" "npc_xeno_poisonzombie_fortified_giant" } "28.0" { "count" "1" - "health" "150000" + "health" "250000" "is_boss" "1" "plugin" "npc_xeno_last_survivor" } @@ -778,7 +837,7 @@ "count" "15" "ignore_max_cap" "1" - "health" "60000" + "health" "50000" "plugin" "npc_xeno_combine_police_pistol" } "0.1" @@ -786,7 +845,7 @@ "count" "13" "ignore_max_cap" "1" - "health" "60000" + "health" "50000" "plugin" "npc_xeno_combine_police_smg" } "0.1" @@ -794,7 +853,7 @@ "count" "13" "ignore_max_cap" "1" - "health" "60000" + "health" "50000" "plugin" "npc_xeno_combine_soldier_ar2" } "0.1" @@ -802,7 +861,7 @@ "count" "15" "ignore_max_cap" "1" - "health" "60000" + "health" "50000" "plugin" "npc_xeno_combine_soldier_shotgun" } "0.1" @@ -810,7 +869,7 @@ "count" "18" "ignore_max_cap" "1" - "health" "90000" + "health" "80000" "plugin" "npc_xeno_combine_soldier_swordsman" } "0.1" @@ -818,7 +877,7 @@ "count" "13" "ignore_max_cap" "1" - "health" "60000" + "health" "50000" "plugin" "npc_xeno_combine_soldier_swordsman_ddt" } "0.1" @@ -826,7 +885,7 @@ "count" "8" "ignore_max_cap" "1" - "health" "187500" + "health" "175000" "plugin" "npc_xeno_combine_soldier_giant_swordsman" } "2.0" @@ -834,7 +893,7 @@ "count" "8" "ignore_max_cap" "1" - "health" "60000" + "health" "50000" "plugin" "npc_xeno_combine_soldier_elite" } "2.0" @@ -987,7 +1046,7 @@ { "count" "1" - "health" "250000" + "health" "700000" "is_boss" "1" "plugin" "npc_xeno_robot" } @@ -995,12 +1054,12 @@ { "count" "1" - "health" "750000" + "health" "700000" "is_boss" "1" "plugin" "npc_xeno_spy_boss" } } - "65" + "13" { "xp" "2500" "cash" "25000" // 57-59 | 8000 @@ -1039,65 +1098,73 @@ "count" "100" "ignore_max_cap" "1" - "health" "100000" - "plugin" "npc_xeno_early_infected" + "health" "110000" + "plugin" "npc_xeno_combine_soldier_overlord" } "0.1" { "count" "100" "ignore_max_cap" "1" - "health" "110000" - "plugin" "npc_xeno_combine_soldier_overlord" + "health" "120000" + "plugin" "npc_xeno_zombie_soldier_giant_grave" } "0.1" { "count" "100" "ignore_max_cap" "1" - "health" "110000" - "plugin" "npc_xeno_infected_lab_doctor" + "health" "130000" + "plugin" "npc_xeno_spy_boss" } "0.1" { "count" "100" "ignore_max_cap" "1" - "health" "120000" - "plugin" "npc_xeno_zombie_soldier_giant_grave" + "health" "140000" + "plugin" "npc_xeno_early_infected" } "0.1" { "count" "100" "ignore_max_cap" "1" - - "health" "120000" - "plugin" "npc_xeno_acclaimed_swordsman" + + "health" "150000" + "plugin" "npc_xeno_infected_lab_doctor" } "0.1" { "count" "100" "ignore_max_cap" "1" - - "health" "130000" - "plugin" "npc_xeno_spy_boss" + + "health" "160000" + "plugin" "npc_xeno_acclaimed_swordsman" } "0.1" { "count" "100" "ignore_max_cap" "1" - "health" "130000" + "health" "170000" "plugin" "npc_xeno_robot" } - "90.0" + "30.0" { "count" "100" "ignore_max_cap" "1" - "health" "140000" + "health" "180000" "plugin" "npc_xeno_patient_few" } + "60.0" + { + "count" "0" + "health" "1900000" + "is_boss" "1" + "extra_damage" "1.875" + "plugin" "npc_xeno_lab_security" + } } "Freeplay" { @@ -1107,8 +1174,8 @@ "0.0" { "count" "10" - "health" "4000000" - "plugin" "npc_xeno_spy_boss" + "health" "2000000" + "plugin" "npc_xeno_lab_security" "is_boss" "1" } } diff --git a/addons/sourcemod/configs/zombie_riot/construction/3_2.cfg b/addons/sourcemod/configs/zombie_riot/construction/3_2.cfg index 7f260bfec9..3a2dcd9c08 100644 --- a/addons/sourcemod/configs/zombie_riot/construction/3_2.cfg +++ b/addons/sourcemod/configs/zombie_riot/construction/3_2.cfg @@ -50,6 +50,14 @@ "count" "2" "plugin" "npc_payback" } + "0.01" + { + //Retreat All Factory + "count" "0" + "health" "19721121" + "data" "factory_emergency_extraction" + "plugin" "npc_invisible_trigger" + } } "Freeplay" { diff --git a/addons/sourcemod/configs/zombie_riot/construction/4_1.cfg b/addons/sourcemod/configs/zombie_riot/construction/4_1.cfg index 0c4a136034..3d494a7426 100644 --- a/addons/sourcemod/configs/zombie_riot/construction/4_1.cfg +++ b/addons/sourcemod/configs/zombie_riot/construction/4_1.cfg @@ -60,6 +60,14 @@ "count" "10" "plugin" "npc_blocker" } + "0.01" + { + //Retreat All Factory + "count" "0" + "health" "19721121" + "data" "factory_emergency_extraction" + "plugin" "npc_invisible_trigger" + } } "Freeplay" { diff --git a/addons/sourcemod/configs/zombie_riot/construction/6_2.cfg b/addons/sourcemod/configs/zombie_riot/construction/6_2.cfg index 086b23cc7a..a4daed9758 100644 --- a/addons/sourcemod/configs/zombie_riot/construction/6_2.cfg +++ b/addons/sourcemod/configs/zombie_riot/construction/6_2.cfg @@ -80,6 +80,14 @@ "health" "60000" "plugin" "npc_assaulter" } + "0.01" + { + //Retreat All Factory + "count" "0" + "health" "19721121" + "data" "factory_emergency_extraction" + "plugin" "npc_invisible_trigger" + } } "Freeplay" { diff --git a/addons/sourcemod/configs/zombie_riot/construction/9_7.cfg b/addons/sourcemod/configs/zombie_riot/construction/9_7.cfg index 1e9fb3bb64..4ed6c480c1 100644 --- a/addons/sourcemod/configs/zombie_riot/construction/9_7.cfg +++ b/addons/sourcemod/configs/zombie_riot/construction/9_7.cfg @@ -39,6 +39,14 @@ "health" "200000" "plugin" "npc_medival_monk" } + "0.01" + { + //Retreat All Factory + "count" "0" + "health" "19721121" + "data" "factory_emergency_extraction" + "plugin" "npc_invisible_trigger" + } } "Freeplay" { diff --git a/addons/sourcemod/configs/zombie_riot/construction/ending1_final.cfg b/addons/sourcemod/configs/zombie_riot/construction/ending1_final.cfg index 7140b59e3b..a9740c5127 100644 --- a/addons/sourcemod/configs/zombie_riot/construction/ending1_final.cfg +++ b/addons/sourcemod/configs/zombie_riot/construction/ending1_final.cfg @@ -1,7 +1,5 @@ "Waves" { - "complete_item" "Foreign Expidonsan Chip" - "1" { "music_1" diff --git a/addons/sourcemod/configs/zombie_riot/construction/final_1.cfg b/addons/sourcemod/configs/zombie_riot/construction/final_1.cfg index a948e8096e..b79d935f82 100644 --- a/addons/sourcemod/configs/zombie_riot/construction/final_1.cfg +++ b/addons/sourcemod/configs/zombie_riot/construction/final_1.cfg @@ -19,6 +19,13 @@ "health" "150000" "extra_damage" "3.0" } + "0.1" + { + "count" "0" + "data" "type-d" + "plugin" "npc_victoria_factory" + "is_static" "1" + } "0.2" { "count" "5" @@ -84,29 +91,23 @@ "health" "150000" "extra_damage" "2.0" } - "0.1" - { - "count" "0" - "data" "type-d" - "plugin" "npc_victoria_factory" - "is_static" "1" - } "1.4" { "count" "50" + "health" "10000" "plugin" "npc_destructor" } "1.4" { "count" "5" "plugin" "npc_zapper" - "health" "650000" + "health" "150000" "extra_damage" "2.0" } "2.0" { - "count" "2" - "health" "500000" + "count" "5" + "health" "250000" "data" "factory;mk2;drone_hp0.50" "plugin" "npc_victoria_protector" } @@ -259,8 +260,8 @@ } "2.0" { - "count" "3" - "health" "150000" + "count" "5" + "health" "250000" "data" "factory;mk2;drone_hp0.50" "plugin" "npc_victoria_protector" } @@ -278,7 +279,7 @@ } "2.0" { - "count" "3" + "count" "5" "health" "100000" "data" "factory;mk2;drone_hp0.50" "plugin" "npc_victoria_tacticalunit" @@ -327,7 +328,7 @@ "author" "Monster Siren Records" } - "5.0" + "4.0" { "count" "1" "is_boss" "1" @@ -403,7 +404,7 @@ "0.0" { "count" "0" - "health" "15000000" + "health" "12500000" "is_boss" "3" "is_immune_to_nuke" "1" "is_health_scaling" "1" diff --git a/addons/sourcemod/configs/zombie_riot/construction/final_2.cfg b/addons/sourcemod/configs/zombie_riot/construction/final_2.cfg index c806567dc1..ecb6d911b3 100644 --- a/addons/sourcemod/configs/zombie_riot/construction/final_2.cfg +++ b/addons/sourcemod/configs/zombie_riot/construction/final_2.cfg @@ -204,17 +204,21 @@ "0.5" { "count" "0" - "health" "4000000" + "health" "3000000" "is_boss" "1" "is_immune_to_nuke" "1" "is_health_scaling" "1" + "extra_damage" "0.90" + "extra_thinkspeed" "1.1" "data" "force40 triple_enemies" "plugin" "npc_stella" } "0.0" { "count" "0" - "health" "6163000" + "health" "5000000" + "extra_damage" "0.90" + "extra_thinkspeed" "1.1" "plugin" "npc_ruina_twirl" "data" "force40 triple_enemies" "is_boss" "3" diff --git a/addons/sourcemod/configs/zombie_riot/downloads.cfg b/addons/sourcemod/configs/zombie_riot/downloads.cfg index bd35cd4062..6da6b57b86 100644 --- a/addons/sourcemod/configs/zombie_riot/downloads.cfg +++ b/addons/sourcemod/configs/zombie_riot/downloads.cfg @@ -75,15 +75,16 @@ "models/zombie_riot/weapons/custom_wings_1_3.mdl" "" "models/zombie_riot/weapons/custom_wings_1_3.vvd" "" - "models/zombie_riot/weapons/custom_weaponry_1_52.dx80.vtx" "" - "models/zombie_riot/weapons/custom_weaponry_1_52.dx90.vtx" "" - "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" "" - "models/zombie_riot/weapons/custom_weaponry_1_52.vvd" "" + "models/zombie_riot/weapons/custom_weaponry_1_57.dx80.vtx" "" + "models/zombie_riot/weapons/custom_weaponry_1_57.dx90.vtx" "" + "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "" + "models/zombie_riot/weapons/custom_weaponry_1_57.vvd" "" "models/zombie_riot/weapons/rage_hoe.dx80.vtx" "" "models/zombie_riot/weapons/rage_hoe.dx90.vtx" "" "models/zombie_riot/weapons/rage_hoe.mdl" "" "models/zombie_riot/weapons/rage_hoe.vvd" "" + //BASIC BONES: "models/zombie_riot/the_bone_zone/basic_bones.dx80.vtx" "" @@ -103,7 +104,7 @@ "models/zombie_riot/the_bone_zone/supreme_spookmaster_bones.dx80.vtx" "" "models/zombie_riot/the_bone_zone/supreme_spookmaster_bones.dx90.vtx" "" "models/zombie_riot/the_bone_zone/supreme_spookmaster_bones.mdl" "" - "models/zombie_riot/the_bone_zone/supreme_spookmaster_bones.phy" "" + // "models/zombie_riot/the_bone_zone/supreme_spookmaster_bones.phy" "" "models/zombie_riot/the_bone_zone/supreme_spookmaster_bones.vvd" "" //BONE ZONE SOUNDS: @@ -923,11 +924,11 @@ "sound/npc/hunter/strider_legstretch1.mp3" "" "sound/npc/hunter/strider_legstretch2.mp3" "" "sound/npc/hunter/strider_legstretch3.mp3" "" - "models/zombie_riot/hl2/hunter.dx80.vtx" "" - "models/zombie_riot/hl2/hunter.dx90.vtx" "" - "models/zombie_riot/hl2/hunter.mdl" "" - "models/zombie_riot/hl2/hunter.phy" "" - "models/zombie_riot/hl2/hunter.vvd" "" + "models/zombie_riot/hl2/hunter_fix.dx80.vtx" "" + "models/zombie_riot/hl2/hunter_fix.dx90.vtx" "" + "models/zombie_riot/hl2/hunter_fix.mdl" "" + "models/zombie_riot/hl2/hunter_fix.phy" "" + "models/zombie_riot/hl2/hunter_fix.vvd" "" "models/zombie_riot/hl2/hunter_animations.ani" "" "models/zombie_riot/hl2/hunter_animations.mdl" "" "materials/models/zombie_riot/hl2/mini_armor_basecolor.vmt" "" @@ -1061,8 +1062,8 @@ "materials/hud/leaderboard_class_affinitybestv2.vtf" "" "materials/hud/leaderboard_class_affinityneutralv2.vmt" "" "materials/hud/leaderboard_class_affinityneutralv2.vtf" "" - "materials/hud/leaderboard_class_affinitybadv2.vmt" "" - "materials/hud/leaderboard_class_affinitybadv2.vtf" "" + "materials/hud/leaderboard_class_affinitybadv3.vmt" "" + "materials/hud/leaderboard_class_affinitybadv3.vtf" "" "materials/hud/leaderboard_class_affinityworstv2.vmt" "" "materials/hud/leaderboard_class_affinityworstv2.vtf" "" } diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/base_2_1.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/base_2_1.cfg index 24393866b1..745a5d503c 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/base_2_1.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/base_2_1.cfg @@ -25,7 +25,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6066 1552 -1199;0 88 0" } @@ -33,7 +33,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5977 1551 -1199;0 88 0" } @@ -41,7 +41,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5866 1552 -1199;0 88 0" } @@ -49,7 +49,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5769 1548 -1199;0 89 0" } @@ -57,7 +57,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5693 1541 -1199;0 88 0" } @@ -65,7 +65,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5596 1543 -1199;0 87 0" } @@ -73,7 +73,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6183 1549 -1199;0 93 0" } @@ -81,7 +81,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6291 1549 -1199;0 90 0" } @@ -89,7 +89,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6376 1551 -1199;0 89 0" } @@ -97,7 +97,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6484 1549 -1199;0 89 0" } @@ -105,7 +105,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6559 1548 -1199;0 89 0" } @@ -113,7 +113,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5496 1541 -1199;0 90 0" } @@ -121,7 +121,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6648 1537 -1199;0 87 0" } @@ -129,7 +129,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6709 1345 -1199;0 0 0" } @@ -137,7 +137,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6710 1469 -1199;0 0 0" } @@ -145,7 +145,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6710 1220 -1199;0 0 0" } @@ -153,7 +153,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6710 1145 -1199;0 0 0" } @@ -161,7 +161,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6711 1079 -1199;0 0 0" } @@ -169,7 +169,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6718 960 -1199;0 0 0" } @@ -177,7 +177,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6713 843 -1199;0 0 0" } @@ -185,7 +185,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6709 730 -1199;0 0 0" } @@ -193,7 +193,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6708 616 -1199;0 0 0" } @@ -201,7 +201,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5439 1441 -1199;0 179 0" } @@ -209,7 +209,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5433 1360 -1199;0 178 0" } @@ -217,7 +217,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5460 1504 -1187;0 157 0" } @@ -225,7 +225,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5438 1251 -1199;0 178 0" } @@ -233,7 +233,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5437 1157 -1199;0 179 0" } @@ -241,7 +241,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5432 1050 -1199;0 178 0" } @@ -249,7 +249,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5432 870 -1199;0 178 0" } @@ -257,7 +257,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5432 946 -1199;0 172 0" } @@ -265,7 +265,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5437 762 -1199;0 178 0" } @@ -273,7 +273,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5437 700 -1199;0 -172 0" } @@ -281,7 +281,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5443 588 -1199;0 178 0" } @@ -289,7 +289,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6701 531 -1199;0 -3 0" } @@ -297,7 +297,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6694 450 -1199;0 -14 0" } @@ -305,7 +305,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6687 354 -1199;0 0 0" } @@ -313,7 +313,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5554 298 -1199;0 -100 0" } @@ -321,7 +321,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5654 298 -1199;0 -96 0" } @@ -329,7 +329,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5861 301 -1199;0 -92 0" } @@ -337,7 +337,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5765 298 -1199;0 -90 0" } @@ -345,7 +345,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5945 301 -1199;0 -91 0" } @@ -353,7 +353,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6038 299 -1199;0 -90 0" } @@ -361,7 +361,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6250 304 -1199;0 -90 0" } @@ -369,7 +369,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6137 297 -1199;0 -90 0" } @@ -377,7 +377,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6376 303 -1199;0 -90 0" } @@ -385,7 +385,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6489 302 -1199;0 -90 0" } @@ -393,7 +393,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6580 286 -1199;0 -81 0" } @@ -401,7 +401,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6638 304 -1199;0 -64 0" } @@ -409,7 +409,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5520 839 -1199;0 -177 0" } @@ -417,7 +417,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5517 978 -1199;0 179 0" } @@ -425,7 +425,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5454 484 -1199;0 171 0" } @@ -433,7 +433,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5450 415 -1199;0 -172 0" } @@ -441,7 +441,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5469 323 -1199;0 -174 0" } @@ -449,7 +449,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5988 397 -1199;0 -90 0" } @@ -457,7 +457,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6070 401 -1199;0 -89 0" } @@ -465,7 +465,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6577 906 -1199;0 -14 0" } @@ -473,7 +473,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5974 1459 -1199;0 95 0" } @@ -481,7 +481,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6566 1018 -1199;0 6 0" } @@ -489,7 +489,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6058 1451 -1199;0 76 0" } @@ -497,7 +497,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5976 1355 -1199;0 98 0" } @@ -505,7 +505,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6046 1359 -1199;0 73 0" } @@ -513,7 +513,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6035 1289 -1199;0 66 0" } @@ -521,7 +521,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5979 1283 -1199;0 103 0" } @@ -529,7 +529,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5609 860 -1199;0 173 0" } @@ -537,7 +537,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5614 941 -1199;0 174 0" } @@ -545,7 +545,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5705 932 -1199;0 175 0" } @@ -553,7 +553,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5689 845 -1199;0 159 0" } @@ -561,7 +561,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6083 474 -1199;0 -81 0" } @@ -569,7 +569,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5987 460 -1199;0 -88 0" } @@ -577,7 +577,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6014 532 -1199;0 -95 0" } @@ -585,7 +585,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6086 544 -1199;0 -77 0" } @@ -593,7 +593,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6481 980 -1199;0 6 0" } @@ -601,7 +601,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6484 919 -1199;0 -3 0" } @@ -609,7 +609,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6421 984 -1199;0 8 0" } @@ -617,7 +617,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6422 921 -1199;0 -3 0" } @@ -625,7 +625,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5824 424 -1199;0 -89 0" } @@ -633,7 +633,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5735 414 -1199;0 -104 0" } @@ -641,7 +641,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5564 545 -1199;0 -168 0" } @@ -649,7 +649,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5566 636 -1199;0 176 0" } @@ -657,7 +657,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5548 1204 -1199;0 -170 0" } @@ -665,7 +665,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5541 1278 -1199;0 178 0" } @@ -673,7 +673,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5667 1457 -1199;0 122 0" } @@ -681,7 +681,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5760 1450 -1199;0 108 0" } @@ -689,7 +689,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6375 1465 -1199;0 92 0" } @@ -697,7 +697,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6426 1460 -1199;0 83 0" } @@ -705,7 +705,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6612 1259 -1199;0 3 0" } @@ -713,7 +713,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6619 1343 -1199;0 18 0" } @@ -721,7 +721,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5546 1435 -1199;0 127 0" } @@ -729,7 +729,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5571 395 -1199;0 -155 0" } @@ -737,7 +737,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6553 414 -1199;0 -50 0" } @@ -745,7 +745,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6600 1452 -1199;0 28 0" } @@ -753,7 +753,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6591 623 -1199;0 0 0" } @@ -761,7 +761,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6572 536 -1199;0 -16 0" } @@ -769,7 +769,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6456 404 -1199;0 -81 0" } @@ -777,7 +777,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6363 399 -1199;0 -97 0" } @@ -785,7 +785,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5931 730 -1199;0 -109 0" } @@ -793,7 +793,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6023 718 -1199;0 -90 0" } @@ -801,7 +801,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6124 718 -1199;0 -79 0" } @@ -809,7 +809,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6228 833 -1199;0 3 0" } @@ -817,7 +817,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6222 1022 -1199;0 17 0" } @@ -825,7 +825,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6227 941 -1199;0 -7 0" } @@ -833,7 +833,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6149 1104 -1199;0 93 0" } @@ -841,7 +841,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6060 1106 -1199;0 84 0" } @@ -849,7 +849,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5967 1099 -1199;0 97 0" } @@ -857,7 +857,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5865 1029 -1199;0 -172 0" } @@ -865,7 +865,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5861 919 -1199;0 177 0" } @@ -873,7 +873,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5869 826 -1199;0 -177 0" } @@ -881,7 +881,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5950 1031 -1199;0 84 0" } @@ -889,7 +889,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5941 823 -1199;0 59 0" } @@ -897,7 +897,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6158 830 -1199;0 -19 0" } @@ -905,7 +905,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6144 1030 -1199;0 29 0" } @@ -913,7 +913,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;6162 930 -1199;0 5 0" } @@ -921,7 +921,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;5938 923 -1199;0 51 0" } @@ -929,7 +929,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;6038 1040 -1199;0 49 0" } @@ -937,7 +937,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;6622 200 -1199;0 110 0" } @@ -945,7 +945,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;6043 781 -1199;0 -47 0" } @@ -953,7 +953,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;6768 358 -1199;0 80 0" } @@ -961,7 +961,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6486 250 -1199;0 -179 0" } @@ -969,7 +969,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6517 142 -1199;0 -159 0" } @@ -977,7 +977,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6623 83 -1199;0 -99 0" } @@ -985,7 +985,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6716 110 -1199;0 -64 0" } @@ -993,7 +993,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6839 206 -1199;0 -42 0" } @@ -1001,7 +1001,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6878 349 -1199;0 1 0" } @@ -1009,7 +1009,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6769 463 -1199;0 77 0" } @@ -1017,7 +1017,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6856 434 -1199;0 54 0" } @@ -1025,7 +1025,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6877 278 -1199;0 -4 0" } @@ -1033,7 +1033,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6774 143 -1199;0 -80 0" } @@ -1041,7 +1041,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;6805 1473 -1199;0 0 0" } @@ -1049,7 +1049,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;5518 1614 -1199;0 80 0" } @@ -1057,7 +1057,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;6667 1615 -1199;0 89 0" } @@ -1065,7 +1065,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;5364 1498 -1199;0 171 0" } @@ -1073,7 +1073,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;5354 386 -1199;0 177 0" } @@ -1081,7 +1081,7 @@ { "count" "0" "health" "25500" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;5584 210 -1199;0 -115 0" } @@ -1089,7 +1089,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5680 256 -1199;0 0 0" } @@ -1097,7 +1097,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5661 172 -1199;0 -21 0" } @@ -1105,7 +1105,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5607 121 -1199;0 -40 0" } @@ -1113,7 +1113,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5542 102 -1199;0 -59 0" } @@ -1121,7 +1121,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5475 109 -1199;0 -113 0" } @@ -1129,7 +1129,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5412 154 -1199;0 -140 0" } @@ -1137,7 +1137,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5347 212 -1199;0 -133 0" } @@ -1145,7 +1145,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5288 290 -1199;0 -157 0" } @@ -1153,7 +1153,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5275 372 -1199;0 -174 0" } @@ -1161,7 +1161,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5397 479 -1199;0 101 0" } @@ -1169,7 +1169,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5322 467 -1199;0 121 0" } @@ -1177,7 +1177,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5392 1401 -1199;0 -83 0" } @@ -1185,7 +1185,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5306 1431 -1199;0 -146 0" } @@ -1193,7 +1193,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5274 1529 -1199;0 157 0" } @@ -1201,7 +1201,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5315 1616 -1199;0 168 0" } @@ -1209,7 +1209,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5371 1683 -1199;0 137 0" } @@ -1217,7 +1217,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5432 1716 -1199;0 108 0" } @@ -1225,7 +1225,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5540 1723 -1199;0 65 0" } @@ -1233,7 +1233,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5602 1652 -1199;0 28 0" } @@ -1241,7 +1241,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5610 1580 -1199;0 -1 0" } @@ -1249,7 +1249,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6565 1595 -1199;0 -178 0" } @@ -1257,7 +1257,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6587 1686 -1199;0 151 0" } @@ -1265,7 +1265,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6658 1733 -1199;0 123 0" } @@ -1273,7 +1273,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6748 1724 -1199;0 88 0" } @@ -1281,7 +1281,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6864 1624 -1199;0 12 0" } @@ -1289,7 +1289,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6818 1687 -1199;0 51 0" } @@ -1297,7 +1297,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6892 1544 -1199;0 11 0" } @@ -1305,7 +1305,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6891 1443 -1199;0 -34 0" } @@ -1313,7 +1313,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6823 1375 -1199;0 -59 0" } @@ -1321,7 +1321,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6747 1375 -1199;0 -87 0" } @@ -1329,7 +1329,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6775 1583 -1199;0 58 0" } @@ -1337,7 +1337,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5413 1627 -1199;0 94 0" } @@ -1345,7 +1345,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5433 240 -1199;0 -83 0" } @@ -1353,7 +1353,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6732 247 -1199;0 -3 0" } @@ -1361,7 +1361,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6811 1243 -1199;0 179 0" } @@ -1369,7 +1369,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6802 605 -1199;0 177 0" } @@ -1377,7 +1377,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6391 190 -1199;0 90 0" } @@ -1385,7 +1385,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5807 207 -1199;0 85 0" } @@ -1393,7 +1393,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5354 1279 -1199;0 -7 0" } @@ -1401,7 +1401,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5359 590 -1199;0 -5 0" } @@ -1417,7 +1417,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;6196 2405 -1199;0 -102 0" } @@ -1433,7 +1433,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;7294 2349 -1199;0 -95 0" } @@ -1449,7 +1449,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;7452 916 -1199;0 176 0" } @@ -1465,7 +1465,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;7430 -462 -1199;0 177 0" } @@ -1481,7 +1481,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;6120 -558 -1199;0 86 0" } @@ -1497,7 +1497,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;4755 -498 -1199;0 86 0" } @@ -1513,7 +1513,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;4567 920 -1199;0 -4 0" } @@ -1529,7 +1529,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;4621 2286 -1199;0 -3 0" } @@ -1569,7 +1569,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6342 2274 -1199;0 -78 0" } @@ -1577,7 +1577,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6325 2472 -1199;0 -75 0" } @@ -1585,7 +1585,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6044 2273 -1199;0 -105 0" } @@ -1593,7 +1593,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6070 2497 -1199;0 -109 0" } @@ -1601,7 +1601,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7068 2364 -1199;0 -167 0" } @@ -1609,7 +1609,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7327 2102 -1199;0 -135 0" } @@ -1617,7 +1617,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7300 1056 -1199;0 -178 0" } @@ -1625,7 +1625,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7510 1067 -1199;0 172 0" } @@ -1633,7 +1633,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7282 822 -1199;0 -172 0" } @@ -1641,7 +1641,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7561 833 -1199;0 -174 0" } @@ -1649,7 +1649,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7145 -471 -1199;0 -171 0" } @@ -1657,7 +1657,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7463 -173 -1199;0 147 0" } @@ -1665,7 +1665,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6337 -308 -1199;0 84 0" } @@ -1673,7 +1673,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6313 -610 -1199;0 80 0" } @@ -1681,7 +1681,7 @@ { "count" "0" "health" "35000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5988 -308 -1199;0 94 0" } @@ -1689,7 +1689,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5859 -570 -1199;0 -97 0" } @@ -1697,7 +1697,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5887 -622 -1199;0 -159 0" } @@ -1705,7 +1705,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5947 -704 -1199;0 -151 0" } @@ -1713,7 +1713,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6002 -747 -1199;0 -125 0" } @@ -1721,7 +1721,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6096 -779 -1199;0 -87 0" } @@ -1729,7 +1729,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6172 -778 -1199;0 -80 0" } @@ -1737,7 +1737,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6295 -728 -1199;0 -61 0" } @@ -1745,7 +1745,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6371 -675 -1199;0 -31 0" } @@ -1753,7 +1753,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6401 -581 -1199;0 -85 0" } @@ -1761,7 +1761,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6498 -569 -1199;0 -94 0" } @@ -1769,7 +1769,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6600 -570 -1199;0 -91 0" } @@ -1777,7 +1777,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6668 -569 -1199;0 -89 0" } @@ -1785,7 +1785,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6733 -570 -1199;0 -90 0" } @@ -1793,7 +1793,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6814 -567 -1199;0 -89 0" } @@ -1801,7 +1801,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6922 -567 -1199;0 -89 0" } @@ -1809,7 +1809,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6996 -566 -1199;0 -90 0" } @@ -1817,7 +1817,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7064 -566 -1199;0 -90 0" } @@ -1825,7 +1825,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7173 -567 -1199;0 -90 0" } @@ -1833,7 +1833,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7267 -610 -1199;0 -136 0" } @@ -1841,7 +1841,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7344 -677 -1199;0 -97 0" } @@ -1849,7 +1849,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7444 -691 -1199;0 -82 0" } @@ -1857,7 +1857,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7527 -668 -1199;0 -58 0" } @@ -1865,7 +1865,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7598 -615 -1199;0 -34 0" } @@ -1873,7 +1873,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7647 -550 -1199;0 -14 0" } @@ -1881,7 +1881,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7661 -482 -1199;0 1 0" } @@ -1889,7 +1889,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7654 -396 -1199;0 21 0" } @@ -1897,7 +1897,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7619 -314 -1199;0 40 0" } @@ -1905,7 +1905,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7572 -261 -1199;0 55 0" } @@ -1913,7 +1913,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7526 -23 -1199;0 -0 0" } @@ -1921,7 +1921,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7543 -179 -1199;0 3 0" } @@ -1929,7 +1929,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7529 -107 -1199;0 1 0" } @@ -1937,7 +1937,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7523 53 -1199;0 -1 0" } @@ -1945,7 +1945,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7524 116 -1199;0 -1 0" } @@ -1953,7 +1953,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7526 183 -1199;0 -1 0" } @@ -1961,7 +1961,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7528 275 -1199;0 -1 0" } @@ -1969,7 +1969,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7526 338 -1199;0 1 0" } @@ -1977,7 +1977,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7524 406 -1199;0 1 0" } @@ -1985,7 +1985,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7522 518 -1199;0 1 0" } @@ -1993,7 +1993,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7521 578 -1199;0 1 0" } @@ -2001,7 +2001,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7518 687 -1199;0 1 0" } @@ -2009,7 +2009,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7551 690 -1199;0 -83 0" } @@ -2017,7 +2017,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7642 722 -1199;0 -63 0" } @@ -2025,7 +2025,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7682 796 -1199;0 -46 0" } @@ -2033,7 +2033,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7706 867 -1199;0 -28 0" } @@ -2041,7 +2041,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7709 957 -1199;0 -2 0" } @@ -2049,7 +2049,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7690 1040 -1199;0 23 0" } @@ -2057,7 +2057,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7637 1117 -1199;0 52 0" } @@ -2065,7 +2065,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7583 1147 -1199;0 71 0" } @@ -2073,7 +2073,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7503 1172 -1199;0 70 0" } @@ -2081,7 +2081,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7467 1228 -1199;0 0 0" } @@ -2089,7 +2089,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7470 1307 -1199;0 -1 0" } @@ -2097,7 +2097,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7471 1389 -1199;0 -1 0" } @@ -2105,7 +2105,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7472 1448 -1199;0 -1 0" } @@ -2113,7 +2113,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7474 1531 -1199;0 -1 0" } @@ -2121,7 +2121,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7475 1617 -1199;0 -0 0" } @@ -2129,7 +2129,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7476 1702 -1199;0 -0 0" } @@ -2137,7 +2137,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7478 1795 -1199;0 -0 0" } @@ -2145,7 +2145,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7479 1861 -1199;0 -0 0" } @@ -2153,7 +2153,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7481 1985 -1199;0 -0 0" } @@ -2161,7 +2161,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7482 2064 -1199;0 -0 0" } @@ -2169,7 +2169,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7473 2170 -1199;0 -44 0" } @@ -2177,7 +2177,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7523 2252 -1199;0 -23 0" } @@ -2185,7 +2185,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7542 2350 -1199;0 -0 0" } @@ -2193,7 +2193,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7520 2422 -1199;0 17 0" } @@ -2201,7 +2201,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7488 2493 -1199;0 36 0" } @@ -2209,7 +2209,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7419 2557 -1199;0 58 0" } @@ -2217,7 +2217,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7361 2586 -1199;0 74 0" } @@ -2225,7 +2225,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7284 2598 -1199;0 92 0" } @@ -2233,7 +2233,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7199 2580 -1199;0 112 0" } @@ -2241,7 +2241,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7140 2545 -1199;0 128 0" } @@ -2249,7 +2249,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7081 2471 -1199;0 150 0" } @@ -2257,7 +2257,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7000 2440 -1199;0 86 0" } @@ -2265,7 +2265,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6905 2432 -1199;0 88 0" } @@ -2273,7 +2273,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6818 2431 -1199;0 89 0" } @@ -2281,7 +2281,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6733 2432 -1199;0 89 0" } @@ -2289,7 +2289,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6669 2433 -1199;0 89 0" } @@ -2297,7 +2297,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6555 2435 -1199;0 89 0" } @@ -2305,7 +2305,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6446 2436 -1199;0 88 0" } @@ -2313,7 +2313,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6435 2477 -1199;0 14 0" } @@ -2321,7 +2321,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6403 2557 -1199;0 42 0" } @@ -2329,7 +2329,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6336 2614 -1199;0 68 0" } @@ -2337,7 +2337,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6260 2651 -1199;0 76 0" } @@ -2345,7 +2345,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6157 2658 -1199;0 103 0" } @@ -2353,7 +2353,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6093 2641 -1199;0 121 0" } @@ -2361,7 +2361,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6041 2611 -1199;0 135 0" } @@ -2369,7 +2369,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5961 2540 -1199;0 130 0" } @@ -2377,7 +2377,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5927 2467 -1199;0 148 0" } @@ -2385,7 +2385,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5861 2424 -1199;0 88 0" } @@ -2393,7 +2393,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5750 2428 -1199;0 87 0" } @@ -2401,7 +2401,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5679 2430 -1199;0 87 0" } @@ -2409,7 +2409,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5599 2432 -1199;0 88 0" } @@ -2417,7 +2417,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5546 2433 -1199;0 88 0" } @@ -2425,7 +2425,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5489 2434 -1199;0 88 0" } @@ -2433,7 +2433,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5399 2437 -1199;0 88 0" } @@ -2441,7 +2441,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5330 2438 -1199;0 88 0" } @@ -2449,7 +2449,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5225 2441 -1199;0 88 0" } @@ -2457,7 +2457,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5109 2443 -1199;0 88 0" } @@ -2465,7 +2465,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5014 2446 -1199;0 88 0" } @@ -2473,7 +2473,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4911 2448 -1199;0 88 0" } @@ -2481,7 +2481,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4805 2446 -1199;0 84 0" } @@ -2489,7 +2489,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4735 2490 -1199;0 49 0" } @@ -2497,7 +2497,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4674 2520 -1199;0 70 0" } @@ -2505,7 +2505,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4598 2523 -1199;0 94 0" } @@ -2513,7 +2513,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4524 2501 -1199;0 118 0" } @@ -2521,7 +2521,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4453 2446 -1199;0 147 0" } @@ -2529,7 +2529,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4409 2379 -1199;0 170 0" } @@ -2537,7 +2537,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4392 2293 -1199;0 -167 0" } @@ -2545,7 +2545,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4409 2221 -1199;0 -148 0" } @@ -2553,7 +2553,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4457 2127 -1199;0 -125 0" } @@ -2561,7 +2561,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4502 2092 -1199;0 -113 0" } @@ -2569,7 +2569,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4560 2042 -1199;0 179 0" } @@ -2577,7 +2577,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4559 1965 -1199;0 -179 0" } @@ -2585,7 +2585,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4560 1853 -1199;0 -179 0" } @@ -2593,7 +2593,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4560 1767 -1199;0 -179 0" } @@ -2601,7 +2601,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4560 1655 -1199;0 -179 0" } @@ -2609,7 +2609,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4561 1570 -1199;0 -179 0" } @@ -2617,7 +2617,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4561 1475 -1199;0 -179 0" } @@ -2625,7 +2625,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4562 1359 -1199;0 -179 0" } @@ -2633,7 +2633,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4562 1245 -1199;0 -179 0" } @@ -2641,7 +2641,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4562 1160 -1199;0 -179 0" } @@ -2649,7 +2649,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4520 1128 -1199;0 98 0" } @@ -2657,7 +2657,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4421 1087 -1199;0 133 0" } @@ -2665,7 +2665,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4370 1027 -1199;0 157 0" } @@ -2673,7 +2673,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4341 941 -1199;0 -177 0" } @@ -2681,7 +2681,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4352 868 -1199;0 -156 0" } @@ -2689,7 +2689,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4389 789 -1199;0 -134 0" } @@ -2697,7 +2697,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4458 724 -1199;0 -111 0" } @@ -2705,7 +2705,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4520 701 -1199;0 -96 0" } @@ -2713,7 +2713,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4568 633 -1199;0 -178 0" } @@ -2721,7 +2721,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4551 552 -1199;0 177 0" } @@ -2729,7 +2729,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4552 474 -1199;0 177 0" } @@ -2737,7 +2737,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4557 379 -1199;0 178 0" } @@ -2745,7 +2745,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4555 316 -1199;0 178 0" } @@ -2753,7 +2753,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4553 237 -1199;0 178 0" } @@ -2761,7 +2761,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4552 160 -1199;0 178 0" } @@ -2769,7 +2769,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4551 94 -1199;0 178 0" } @@ -2777,7 +2777,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4549 14 -1199;0 178 0" } @@ -2785,7 +2785,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4548 -56 -1199;0 178 0" } @@ -2793,7 +2793,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4546 -146 -1199;0 178 0" } @@ -2801,7 +2801,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4544 -221 -1199;0 178 0" } @@ -2809,7 +2809,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4543 -274 -1199;0 178 0" } @@ -2817,7 +2817,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4542 -360 -1199;0 151 0" } @@ -2825,7 +2825,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4517 -420 -1199;0 163 0" } @@ -2833,7 +2833,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4508 -498 -1199;0 178 0" } @@ -2841,7 +2841,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4515 -569 -1199;0 -167 0" } @@ -2849,7 +2849,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4573 -662 -1199;0 -134 0" } @@ -2857,7 +2857,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4632 -706 -1199;0 -117 0" } @@ -2865,7 +2865,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4711 -732 -1199;0 -97 0" } @@ -2873,7 +2873,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4780 -736 -1199;0 -81 0" } @@ -2881,7 +2881,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4857 -714 -1199;0 -63 0" } @@ -2889,7 +2889,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4927 -672 -1199;0 -44 0" } @@ -2897,7 +2897,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4974 -615 -1199;0 -28 0" } @@ -2905,7 +2905,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5035 -575 -1199;0 -90 0" } @@ -2913,7 +2913,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5114 -577 -1199;0 -91 0" } @@ -2921,7 +2921,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5199 -575 -1199;0 -90 0" } @@ -2929,7 +2929,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5262 -576 -1199;0 -90 0" } @@ -2937,7 +2937,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5349 -577 -1199;0 -90 0" } @@ -2945,7 +2945,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5429 -578 -1199;0 -90 0" } @@ -2953,7 +2953,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5494 -578 -1199;0 -90 0" } @@ -2961,7 +2961,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5571 -579 -1199;0 -90 0" } @@ -2969,7 +2969,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5662 -580 -1199;0 -90 0" } @@ -2977,7 +2977,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5713 -580 -1199;0 -90 0" } @@ -2985,7 +2985,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5792 -581 -1199;0 -90 0" } @@ -2993,7 +2993,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6664 1810 -1199;0 0 0" } @@ -3001,7 +3001,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6664 1875 -1199;0 0 0" } @@ -3009,7 +3009,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6663 1951 -1199;0 0 0" } @@ -3017,7 +3017,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6662 2009 -1199;0 0 0" } @@ -3025,7 +3025,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6661 2132 -1199;0 0 0" } @@ -3033,7 +3033,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6661 2252 -1199;0 0 0" } @@ -3041,7 +3041,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6660 2354 -1199;0 0 0" } @@ -3049,7 +3049,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6653 2073 -1199;0 -1 0" } @@ -3057,7 +3057,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6926 1446 -1199;0 85 0" } @@ -3065,7 +3065,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7009 1469 -1199;0 89 0" } @@ -3073,7 +3073,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7098 1467 -1199;0 91 0" } @@ -3081,7 +3081,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7153 1468 -1199;0 91 0" } @@ -3089,7 +3089,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7227 1467 -1199;0 91 0" } @@ -3097,7 +3097,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7313 1467 -1199;0 90 0" } @@ -3105,7 +3105,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7428 1460 -1199;0 88 0" } @@ -3113,7 +3113,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6914 271 -1199;0 -87 0" } @@ -3121,7 +3121,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7004 275 -1199;0 -87 0" } @@ -3129,7 +3129,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7060 277 -1199;0 -87 0" } @@ -3137,7 +3137,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7126 280 -1199;0 -87 0" } @@ -3145,7 +3145,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7221 284 -1199;0 -87 0" } @@ -3153,7 +3153,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7312 289 -1199;0 -87 0" } @@ -3161,7 +3161,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7389 292 -1199;0 -87 0" } @@ -3169,7 +3169,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7467 308 -1199;0 -78 0" } @@ -3177,7 +3177,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6662 14 -1199;0 2 0" } @@ -3185,7 +3185,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6657 -84 -1199;0 0 0" } @@ -3193,7 +3193,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6658 -234 -1199;0 0 0" } @@ -3201,7 +3201,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6657 -170 -1199;0 0 0" } @@ -3209,7 +3209,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6658 -306 -1199;0 0 0" } @@ -3217,7 +3217,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6658 -370 -1199;0 0 0" } @@ -3225,7 +3225,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6659 -468 -1199;0 0 0" } @@ -3233,7 +3233,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5512 32 -1199;0 179 0" } @@ -3241,7 +3241,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5511 -54 -1199;0 179 0" } @@ -3249,7 +3249,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5510 -122 -1199;0 179 0" } @@ -3257,7 +3257,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5510 -207 -1199;0 179 0" } @@ -3265,7 +3265,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5509 -293 -1199;0 179 0" } @@ -3273,7 +3273,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5508 -370 -1199;0 179 0" } @@ -3281,7 +3281,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5507 -451 -1199;0 179 0" } @@ -3289,7 +3289,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5506 -524 -1199;0 179 0" } @@ -3297,7 +3297,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5240 370 -1199;0 -92 0" } @@ -3305,7 +3305,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5172 373 -1199;0 -92 0" } @@ -3313,7 +3313,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5098 376 -1199;0 -92 0" } @@ -3321,7 +3321,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5012 380 -1199;0 -92 0" } @@ -3329,7 +3329,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4926 384 -1199;0 -92 0" } @@ -3337,7 +3337,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4856 387 -1199;0 -92 0" } @@ -3345,7 +3345,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4779 390 -1199;0 -92 0" } @@ -3353,7 +3353,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4711 393 -1199;0 -92 0" } @@ -3361,7 +3361,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4655 396 -1199;0 -92 0" } @@ -3369,7 +3369,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5224 1520 -1199;0 89 0" } @@ -3377,7 +3377,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5151 1521 -1199;0 89 0" } @@ -3385,7 +3385,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5074 1522 -1199;0 89 0" } @@ -3393,7 +3393,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4982 1524 -1199;0 89 0" } @@ -3401,7 +3401,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4886 1525 -1199;0 89 0" } @@ -3409,7 +3409,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4772 1527 -1199;0 89 0" } @@ -3417,7 +3417,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4661 1528 -1199;0 89 0" } @@ -3425,7 +3425,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5478 1798 -1199;0 -178 0" } @@ -3433,7 +3433,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5476 1866 -1199;0 -178 0" } @@ -3441,7 +3441,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5474 1950 -1199;0 -178 0" } @@ -3449,7 +3449,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5472 2025 -1199;0 -178 0" } @@ -3457,7 +3457,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5470 2099 -1199;0 -178 0" } @@ -3465,7 +3465,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5468 2195 -1199;0 -178 0" } @@ -3473,7 +3473,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5465 2319 -1199;0 -178 0" } @@ -3481,7 +3481,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;7350 1545 -1199;0 12 0" } @@ -3489,7 +3489,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;7350 1363 -1199;0 -8 0" } @@ -3497,7 +3497,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6728 2333 -1199;0 85 0" } @@ -3505,7 +3505,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6534 2296 -1199;0 81 0" } @@ -3513,7 +3513,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5596 2317 -1199;0 92 0" } @@ -3521,7 +3521,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5380 2329 -1199;0 98 0" } @@ -3529,7 +3529,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;4651 1608 -1199;0 178 0" } @@ -3537,7 +3537,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;4670 1429 -1199;0 179 0" } @@ -3545,7 +3545,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;4663 489 -1199;0 -169 0" } @@ -3553,7 +3553,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;4654 297 -1199;0 -178 0" } @@ -3561,7 +3561,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5410 -476 -1199;0 -87 0" } @@ -3569,7 +3569,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5620 -469 -1199;0 -89 0" } @@ -3577,7 +3577,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6541 -452 -1199;0 -94 0" } @@ -3585,7 +3585,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6732 -454 -1199;0 -92 0" } @@ -3593,7 +3593,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;7430 187 -1199;0 -16 0" } @@ -3601,7 +3601,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;7440 416 -1199;0 5 0" } @@ -3609,7 +3609,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6994 1771 -1199;0 -89 0" } @@ -3617,7 +3617,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6866 1885 -1199;0 -103 0" } @@ -3625,7 +3625,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5966 1780 -1199;0 -144 0" } @@ -3633,7 +3633,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6242 1783 -1199;0 -123 0" } @@ -3641,7 +3641,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5074 1703 -1199;0 -155 0" } @@ -3649,7 +3649,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5305 1907 -1199;0 -175 0" } @@ -3657,7 +3657,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5111 801 -1199;0 -101 0" } @@ -3665,7 +3665,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5119 1162 -1199;0 -115 0" } @@ -3673,7 +3673,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5363 -37 -1199;0 -64 0" } @@ -3681,7 +3681,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5141 220 -1199;0 -94 0" } @@ -3689,7 +3689,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6231 -25 -1199;0 -12 0" } @@ -3697,7 +3697,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5919 -13 -1199;0 -22 0" } @@ -3705,7 +3705,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7100 156 -1199;0 -2 0" } @@ -3713,7 +3713,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6937 -28 -1199;0 -34 0" } @@ -3721,7 +3721,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7020 786 -1199;0 -6 0" } @@ -3729,7 +3729,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7033 1038 -1199;0 0 0" } @@ -3737,7 +3737,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5768 2332 -1199;0 88 0" } @@ -3745,7 +3745,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5126 2342 -1199;0 98 0" } @@ -3753,7 +3753,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4660 1802 -1199;0 155 0" } @@ -3761,7 +3761,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4471 2275 -1199;0 144 0" } @@ -3769,7 +3769,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4617 2419 -1199;0 119 0" } @@ -3777,7 +3777,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4466 981 -1199;0 -178 0" } @@ -3785,7 +3785,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4479 803 -1199;0 -163 0" } @@ -3793,7 +3793,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4650 774 -1199;0 -154 0" } @@ -3801,7 +3801,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4640 1025 -1199;0 176 0" } @@ -3809,7 +3809,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4667 1274 -1199;0 137 0" } @@ -3817,7 +3817,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4641 585 -1199;0 175 0" } @@ -3825,7 +3825,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4644 203 -1199;0 179 0" } @@ -3833,7 +3833,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4583 -445 -1199;0 -153 0" } @@ -3841,7 +3841,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4736 -338 -1199;0 -156 0" } @@ -3849,7 +3849,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4784 -647 -1199;0 -132 0" } @@ -3857,7 +3857,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4907 -539 -1199;0 -130 0" } @@ -3865,7 +3865,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5243 -503 -1199;0 -94 0" } @@ -3873,7 +3873,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6032 -656 -1199;0 -90 0" } @@ -3881,7 +3881,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5724 -508 -1199;0 -86 0" } @@ -3889,7 +3889,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7545 -435 -1199;0 -44 0" } @@ -3897,7 +3897,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7393 -557 -1199;0 -57 0" } @@ -3905,7 +3905,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6877 -478 -1199;0 -95 0" } @@ -3913,7 +3913,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7429 58 -1199;0 -12 0" } @@ -3921,7 +3921,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7452 595 -1199;0 7 0" } @@ -3929,7 +3929,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7364 1238 -1199;0 -23 0" } @@ -3937,7 +3937,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7376 1683 -1199;0 2 0" } @@ -3945,7 +3945,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7434 2326 -1199;0 32 0" } @@ -3953,7 +3953,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7303 2479 -1199;0 46 0" } @@ -3961,7 +3961,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6872 2357 -1199;0 58 0" } @@ -3969,7 +3969,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6429 2332 -1199;0 98 0" } @@ -3977,7 +3977,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5008 1946 -1199;0 128 0" } @@ -3985,7 +3985,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4935 941 -1199;0 -173 0" } @@ -3993,7 +3993,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5036 -156 -1199;0 -163 0" } @@ -4001,7 +4001,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6140 -219 -1199;0 -83 0" } @@ -4009,7 +4009,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7163 -132 -1199;0 -62 0" } @@ -4017,7 +4017,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7110 931 -1199;0 -3 0" } @@ -4025,7 +4025,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7090 2059 -1199;0 34 0" } @@ -4033,7 +4033,7 @@ { "count" "0" "health" "20000" - "extra_damage" "0.25" + "extra_damage" "0.35" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6123 2019 -1199;0 71 0" } diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/base_3_1.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/base_3_1.cfg index fb3e27aa76..77af1521bd 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/base_3_1.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/base_3_1.cfg @@ -88,7 +88,7 @@ { "count" "0" "health" "50000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_supergun;enemy_base;6290 690 -1199;0 -47 0" } @@ -96,7 +96,7 @@ { "count" "0" "health" "50000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_supergun;enemy_base;5821 1170 -1199;0 134 0" } @@ -104,7 +104,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;6067 683 -1199;0 -109 0" } @@ -112,7 +112,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;6304 906 -1199;0 -70 0" } @@ -120,7 +120,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;6056 1151 -1199;0 173 0" } @@ -128,7 +128,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;5825 925 -1199;0 -152 0" } @@ -136,7 +136,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6180 681 -1199;0 -88 0" } @@ -144,7 +144,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6293 805 -1199;0 -63 0" } @@ -152,7 +152,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5817 1036 -1199;0 -177 0" } @@ -160,7 +160,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5943 1158 -1199;0 154 0" } @@ -168,7 +168,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5714 1283 -1199;0 135 0" } @@ -176,7 +176,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5672 1188 -1199;0 175 0" } @@ -184,7 +184,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5666 1053 -1199;0 177 0" } @@ -192,7 +192,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5667 969 -1199;0 179 0" } @@ -200,7 +200,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5668 1126 -1199;0 169 0" } @@ -208,7 +208,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5673 893 -1199;0 179 0" } @@ -216,7 +216,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5735 798 -1199;0 -100 0" } @@ -224,7 +224,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5841 778 -1199;0 -109 0" } @@ -232,7 +232,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5903 717 -1199;0 -179 0" } @@ -240,7 +240,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5921 618 -1199;0 -154 0" } @@ -248,7 +248,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6018 567 -1199;0 -86 0" } @@ -256,7 +256,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6101 574 -1199;0 -89 0" } @@ -264,7 +264,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6216 576 -1199;0 -89 0" } @@ -272,7 +272,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6313 576 -1199;0 -89 0" } @@ -280,7 +280,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6372 597 -1199;0 -81 0" } @@ -288,7 +288,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6416 702 -1199;0 -1 0" } @@ -296,7 +296,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6420 797 -1199;0 -0 0" } @@ -304,7 +304,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6419 901 -1199;0 0 0" } @@ -312,7 +312,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6348 1008 -1199;0 71 0" } @@ -320,7 +320,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6260 1040 -1199;0 70 0" } @@ -328,7 +328,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6195 1103 -1199;0 32 0" } @@ -336,7 +336,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6145 1189 -1199;0 28 0" } @@ -344,7 +344,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6071 1269 -1199;0 86 0" } @@ -352,7 +352,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5976 1281 -1199;0 83 0" } @@ -360,7 +360,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5803 1304 -1199;0 101 0" } @@ -368,7 +368,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5900 1291 -1199;0 71 0" } @@ -376,7 +376,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6556 285 -1199;0 -90 0" } @@ -384,7 +384,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6448 286 -1199;0 -90 0" } @@ -392,7 +392,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6351 287 -1199;0 -90 0" } @@ -400,7 +400,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6279 288 -1199;0 -90 0" } @@ -408,7 +408,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6202 282 -1199;0 -91 0" } @@ -416,7 +416,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6150 284 -1199;0 -91 0" } @@ -424,7 +424,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6060 287 -1199;0 -91 0" } @@ -432,7 +432,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5994 289 -1199;0 -91 0" } @@ -440,7 +440,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5882 293 -1199;0 -91 0" } @@ -448,7 +448,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5800 296 -1199;0 -91 0" } @@ -456,7 +456,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5687 300 -1199;0 -91 0" } @@ -464,7 +464,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5608 302 -1199;0 -91 0" } @@ -472,7 +472,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5521 305 -1199;0 -91 0" } @@ -480,7 +480,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5425 374 -1199;0 -127 0" } @@ -488,7 +488,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5350 458 -1199;0 -133 0" } @@ -496,7 +496,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5293 504 -1199;0 -133 0" } @@ -504,7 +504,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5270 621 -1199;0 -172 0" } @@ -512,7 +512,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5275 742 -1199;0 -178 0" } @@ -520,7 +520,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5269 849 -1199;0 -179 0" } @@ -528,7 +528,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5268 922 -1199;0 179 0" } @@ -536,7 +536,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5270 1019 -1199;0 179 0" } @@ -544,7 +544,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5271 1143 -1199;0 179 0" } @@ -552,7 +552,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5268 1230 -1199;0 173 0" } @@ -560,7 +560,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5275 1366 -1199;0 179 0" } @@ -568,7 +568,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5276 1473 -1199;0 179 0" } @@ -576,7 +576,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5281 1300 -1199;0 -177 0" } @@ -584,7 +584,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5284 1565 -1199;0 174 0" } @@ -592,7 +592,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5317 1631 -1199;0 146 0" } @@ -600,7 +600,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5360 1689 -1199;0 137 0" } @@ -608,7 +608,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5415 1760 -1199;0 137 0" } @@ -616,7 +616,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5537 1796 -1199;0 96 0" } @@ -624,7 +624,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5656 1792 -1199;0 90 0" } @@ -632,7 +632,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5733 1790 -1199;0 89 0" } @@ -640,7 +640,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5822 1787 -1199;0 88 0" } @@ -648,7 +648,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5872 1786 -1199;0 88 0" } @@ -656,7 +656,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5963 1784 -1199;0 88 0" } @@ -664,7 +664,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6053 1782 -1199;0 88 0" } @@ -672,7 +672,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6159 1780 -1199;0 88 0" } @@ -680,7 +680,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6243 1779 -1199;0 88 0" } @@ -688,7 +688,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6311 1777 -1199;0 88 0" } @@ -696,7 +696,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6366 1776 -1199;0 88 0" } @@ -704,7 +704,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6444 1775 -1199;0 88 0" } @@ -712,7 +712,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6518 1746 -1199;0 68 0" } @@ -720,7 +720,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6642 1649 -1199;0 53 0" } @@ -728,7 +728,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6713 1599 -1199;0 52 0" } @@ -736,7 +736,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6783 1548 -1199;0 52 0" } @@ -744,7 +744,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6858 1490 -1199;0 52 0" } @@ -752,7 +752,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6898 1427 -1199;0 17 0" } @@ -760,7 +760,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6876 1241 -1199;0 3 0" } @@ -768,7 +768,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6886 1138 -1199;0 2 0" } @@ -776,7 +776,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6896 1001 -1199;0 1 0" } @@ -784,7 +784,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6884 902 -1199;0 0 0" } @@ -792,7 +792,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6877 822 -1199;0 0 0" } @@ -800,7 +800,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6874 738 -1199;0 -0 0" } @@ -808,7 +808,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6874 648 -1199;0 -0 0" } @@ -816,7 +816,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6874 564 -1199;0 -0 0" } @@ -824,7 +824,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6822 481 -1199;0 -45 0" } @@ -832,7 +832,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6760 409 -1199;0 -40 0" } @@ -840,7 +840,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6707 362 -1199;0 -48 0" } @@ -848,7 +848,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6650 312 -1199;0 -57 0" } @@ -856,7 +856,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6579 1693 -1199;0 56 0" } @@ -864,7 +864,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6887 1336 -1199;0 5 0" } @@ -872,7 +872,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6882 1070 -1199;0 5 0" } @@ -880,7 +880,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5594 1589 -1199;0 114 0" } @@ -888,7 +888,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5501 1487 -1199;0 130 0" } @@ -896,7 +896,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5430 1232 -1199;0 164 0" } @@ -904,7 +904,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5436 1088 -1199;0 175 0" } @@ -912,7 +912,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5433 971 -1199;0 -179 0" } @@ -920,7 +920,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5431 855 -1199;0 179 0" } @@ -928,7 +928,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5451 615 -1199;0 -153 0" } @@ -936,7 +936,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5539 537 -1199;0 -135 0" } @@ -944,7 +944,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5750 449 -1199;0 -115 0" } @@ -952,7 +952,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5898 430 -1199;0 -99 0" } @@ -960,7 +960,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6020 418 -1199;0 -93 0" } @@ -968,7 +968,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6123 410 -1199;0 -93 0" } @@ -976,7 +976,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6577 464 -1199;0 -60 0" } @@ -984,7 +984,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6714 590 -1199;0 -29 0" } @@ -992,7 +992,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6721 1403 -1199;0 27 0" } @@ -1000,7 +1000,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6612 1471 -1199;0 38 0" } @@ -1008,7 +1008,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6488 1557 -1199;0 53 0" } @@ -1016,7 +1016,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6738 751 -1199;0 -22 0" } @@ -1024,7 +1024,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6744 903 -1199;0 -9 0" } @@ -1032,7 +1032,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6754 1008 -1199;0 -5 0" } @@ -1040,7 +1040,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6764 1149 -1199;0 -2 0" } @@ -1048,7 +1048,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6763 1261 -1199;0 -0 0" } @@ -1056,7 +1056,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6362 1588 -1199;0 70 0" } @@ -1064,7 +1064,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6241 1607 -1199;0 62 0" } @@ -1072,7 +1072,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6112 1619 -1199;0 73 0" } @@ -1080,7 +1080,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5968 1620 -1199;0 86 0" } @@ -1088,7 +1088,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5824 1625 -1199;0 85 0" } @@ -1096,7 +1096,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6464 378 -1199;0 -77 0" } @@ -1104,7 +1104,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6282 388 -1199;0 -95 0" } @@ -1112,7 +1112,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6956 330 -1199;0 -30 0" } @@ -1120,7 +1120,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6827 199 -1199;0 -60 0" } @@ -1128,7 +1128,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5147 1755 -1199;0 160 0" } @@ -1136,7 +1136,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5233 1845 -1199;0 150 0" } @@ -1144,7 +1144,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6656 1930 -1199;0 76 0" } @@ -1152,7 +1152,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5306 220 -1199;0 -130 0" } @@ -1160,7 +1160,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5201 342 -1199;0 -153 0" } @@ -1168,7 +1168,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6862 1815 -1199;0 57 0" } @@ -1176,7 +1176,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6997 1707 -1199;0 35 0" } @@ -1184,7 +1184,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5195 546 -1199;0 125 0" } @@ -1192,7 +1192,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5110 483 -1199;0 128 0" } @@ -1200,7 +1200,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5009 387 -1199;0 133 0" } @@ -1208,7 +1208,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5024 267 -1199;0 -147 0" } @@ -1216,7 +1216,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5084 210 -1199;0 -140 0" } @@ -1224,7 +1224,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5172 109 -1199;0 -134 0" } @@ -1232,7 +1232,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5241 49 -1199;0 -132 0" } @@ -1240,7 +1240,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5353 56 -1199;0 -52 0" } @@ -1248,7 +1248,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5448 149 -1199;0 -40 0" } @@ -1256,7 +1256,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5506 244 -1199;0 -40 0" } @@ -1264,7 +1264,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6640 244 -1199;0 -164 0" } @@ -1272,7 +1272,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6714 142 -1199;0 -144 0" } @@ -1280,7 +1280,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6786 77 -1199;0 -134 0" } @@ -1288,7 +1288,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6930 65 -1199;0 -55 0" } @@ -1296,7 +1296,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7102 250 -1199;0 -17 0" } @@ -1304,7 +1304,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7016 150 -1199;0 -38 0" } @@ -1312,7 +1312,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7088 385 -1199;0 46 0" } @@ -1320,7 +1320,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7042 420 -1199;0 45 0" } @@ -1328,7 +1328,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6959 502 -1199;0 44 0" } @@ -1336,7 +1336,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6972 1485 -1199;0 -51 0" } @@ -1344,7 +1344,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7045 1559 -1199;0 -44 0" } @@ -1352,7 +1352,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7126 1640 -1199;0 -44 0" } @@ -1360,7 +1360,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7136 1776 -1199;0 30 0" } @@ -1368,7 +1368,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7048 1849 -1199;0 43 0" } @@ -1376,7 +1376,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6977 1917 -1199;0 50 0" } @@ -1384,7 +1384,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6898 1967 -1199;0 52 0" } @@ -1392,7 +1392,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6801 2025 -1199;0 58 0" } @@ -1400,7 +1400,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6688 2098 -1199;0 64 0" } @@ -1408,7 +1408,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6581 2047 -1199;0 143 0" } @@ -1416,7 +1416,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6533 1972 -1199;0 149 0" } @@ -1424,7 +1424,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6495 1914 -1199;0 149 0" } @@ -1432,7 +1432,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6449 1836 -1199;0 146 0" } @@ -1440,7 +1440,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5420 1848 -1199;0 43 0" } @@ -1448,7 +1448,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5335 1914 -1199;0 51 0" } @@ -1456,7 +1456,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5261 1975 -1199;0 50 0" } @@ -1464,7 +1464,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5169 1979 -1199;0 117 0" } @@ -1472,7 +1472,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5085 1893 -1199;0 139 0" } @@ -1480,7 +1480,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5021 1806 -1199;0 145 0" } @@ -1488,7 +1488,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5030 1707 -1199;0 -137 0" } @@ -1496,7 +1496,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5098 1648 -1199;0 -130 0" } @@ -1504,7 +1504,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5146 1614 -1199;0 -131 0" } @@ -1512,7 +1512,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5223 1558 -1199;0 -110 0" } @@ -1520,7 +1520,7 @@ { "count" "0" "health" "50000" - "extra_damage" "0.25" + "extra_damage" "0.4" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;5753 100 -1199;0 96 0" } @@ -1528,7 +1528,7 @@ { "count" "0" "health" "50000" - "extra_damage" "0.25" + "extra_damage" "0.4" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;6331 121 -1199;0 91 0" } @@ -1536,7 +1536,7 @@ { "count" "0" "health" "50000" - "extra_damage" "0.25" + "extra_damage" "0.4" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;5069 704 -1199;0 -0 0" } @@ -1544,7 +1544,7 @@ { "count" "0" "health" "50000" - "extra_damage" "0.25" + "extra_damage" "0.4" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;5071 1385 -1199;0 -0 0" } @@ -1552,7 +1552,7 @@ { "count" "0" "health" "50000" - "extra_damage" "0.25" + "extra_damage" "0.4" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;5652 1987 -1199;0 -94 0" } @@ -1560,7 +1560,7 @@ { "count" "0" "health" "50000" - "extra_damage" "0.25" + "extra_damage" "0.4" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;6313 1967 -1199;0 -91 0" } @@ -1568,7 +1568,7 @@ { "count" "0" "health" "50000" - "extra_damage" "0.25" + "extra_damage" "0.4" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;7074 1364 -1199;0 177 0" } @@ -1576,7 +1576,7 @@ { "count" "0" "health" "50000" - "extra_damage" "0.25" + "extra_damage" "0.4" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;7076 627 -1199;0 177 0" } @@ -1584,7 +1584,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7167 427 -1199;0 -11 0" } @@ -1592,7 +1592,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7195 543 -1199;0 -8 0" } @@ -1600,7 +1600,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7207 650 -1199;0 -2 0" } @@ -1608,7 +1608,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7203 728 -1199;0 -1 0" } @@ -1616,7 +1616,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7207 845 -1199;0 -1 0" } @@ -1624,7 +1624,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7208 937 -1199;0 -1 0" } @@ -1632,7 +1632,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7209 1060 -1199;0 -0 0" } @@ -1640,7 +1640,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7211 1188 -1199;0 -0 0" } @@ -1648,7 +1648,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7212 1254 -1199;0 -0 0" } @@ -1656,7 +1656,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7213 1343 -1199;0 -0 0" } @@ -1664,7 +1664,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7208 1419 -1199;0 1 0" } @@ -1672,7 +1672,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7185 1525 -1199;0 8 0" } @@ -1680,7 +1680,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7142 1566 -1157;0 26 0" } @@ -1688,7 +1688,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6552 2136 -1199;0 64 0" } @@ -1696,7 +1696,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6434 2141 -1199;0 93 0" } @@ -1704,7 +1704,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6356 2139 -1199;0 91 0" } @@ -1712,7 +1712,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6262 2138 -1199;0 90 0" } @@ -1720,7 +1720,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6140 2137 -1199;0 90 0" } @@ -1728,7 +1728,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6064 2137 -1199;0 89 0" } @@ -1736,7 +1736,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5881 2135 -1199;0 90 0" } @@ -1744,7 +1744,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5968 2134 -1199;0 88 0" } @@ -1752,7 +1752,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5796 2136 -1199;0 89 0" } @@ -1760,7 +1760,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5689 2137 -1199;0 89 0" } @@ -1768,7 +1768,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5561 2137 -1199;0 89 0" } @@ -1776,7 +1776,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5477 2135 -1199;0 90 0" } @@ -1784,7 +1784,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5316 2093 -1199;0 121 0" } @@ -1792,7 +1792,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5272 2037 -1199;0 156 0" } @@ -1800,7 +1800,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5391 2125 -1199;0 112 0" } @@ -1808,7 +1808,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4979 1703 -1199;0 132 0" } @@ -1816,7 +1816,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4927 1583 -1199;0 157 0" } @@ -1824,7 +1824,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4921 1482 -1199;0 179 0" } @@ -1832,7 +1832,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4920 1403 -1199;0 179 0" } @@ -1840,7 +1840,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4918 1303 -1199;0 179 0" } @@ -1848,7 +1848,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4916 1203 -1199;0 179 0" } @@ -1856,7 +1856,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4914 1081 -1199;0 179 0" } @@ -1864,7 +1864,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4912 954 -1199;0 179 0" } @@ -1872,7 +1872,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4911 889 -1199;0 179 0" } @@ -1880,7 +1880,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4911 776 -1199;0 178 0" } @@ -1888,7 +1888,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4918 677 -1199;0 178 0" } @@ -1896,7 +1896,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4929 522 -1199;0 -166 0" } @@ -1904,7 +1904,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4950 440 -1199;0 -167 0" } @@ -1912,7 +1912,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4918 590 -1199;0 -176 0" } @@ -1920,7 +1920,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5349 -22 -1199;0 -134 0" } @@ -1928,7 +1928,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5463 -61 -1199;0 -107 0" } @@ -1936,7 +1936,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5585 -82 -1199;0 -94 0" } @@ -1944,7 +1944,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5692 -84 -1199;0 -91 0" } @@ -1952,7 +1952,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5798 -86 -1199;0 -90 0" } @@ -1960,7 +1960,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5930 -78 -1199;0 -88 0" } @@ -1968,7 +1968,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6071 -75 -1199;0 -88 0" } @@ -1976,7 +1976,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6183 -72 -1199;0 -88 0" } @@ -1984,7 +1984,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6277 -70 -1199;0 -88 0" } @@ -1992,7 +1992,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6353 -69 -1199;0 -88 0" } @@ -2000,7 +2000,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6449 -67 -1199;0 -88 0" } @@ -2008,7 +2008,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6548 -55 -1199;0 -84 0" } @@ -2016,7 +2016,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6648 -38 -1199;0 -81 0" } @@ -2024,7 +2024,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6733 -13 -1199;0 -57 0" } @@ -2032,7 +2032,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5944 194 -1199;0 90 0" } @@ -2040,7 +2040,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6031 192 -1199;0 94 0" } @@ -2048,7 +2048,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6097 189 -1199;0 84 0" } @@ -2056,7 +2056,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6112 101 -1199;0 79 0" } @@ -2064,7 +2064,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6036 95 -1199;0 87 0" } @@ -2072,7 +2072,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5954 95 -1199;0 89 0" } @@ -2080,7 +2080,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5283 436 -1199;0 73 0" } @@ -2088,7 +2088,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5343 365 -1199;0 59 0" } @@ -2096,7 +2096,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5186 1189 -1199;0 14 0" } @@ -2104,7 +2104,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5181 1113 -1199;0 3 0" } @@ -2112,7 +2112,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5192 1022 -1199;0 -8 0" } @@ -2120,7 +2120,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5094 998 -1199;0 -15 0" } @@ -2128,7 +2128,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5096 1083 -1199;0 -0 0" } @@ -2136,7 +2136,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5093 1162 -1199;0 13 0" } @@ -2144,7 +2144,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5293 1686 -1199;0 -41 0" } @@ -2152,7 +2152,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5337 1766 -1199;0 -36 0" } @@ -2160,7 +2160,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6111 1851 -1199;0 -90 0" } @@ -2168,7 +2168,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6006 1851 -1199;0 -90 0" } @@ -2176,7 +2176,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5904 1852 -1199;0 -102 0" } @@ -2184,7 +2184,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5908 1955 -1199;0 -106 0" } @@ -2192,7 +2192,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5996 1947 -1199;0 -89 0" } @@ -2200,7 +2200,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6092 1943 -1199;0 -76 0" } @@ -2208,7 +2208,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6685 1707 -1199;0 -130 0" } @@ -2216,7 +2216,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6804 1623 -1199;0 -110 0" } @@ -2224,7 +2224,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6954 1048 -1199;0 175 0" } @@ -2232,7 +2232,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6953 949 -1199;0 -172 0" } @@ -2240,7 +2240,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6948 821 -1199;0 -157 0" } @@ -2248,7 +2248,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7053 862 -1199;0 -157 0" } @@ -2256,7 +2256,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7046 934 -1199;0 -168 0" } @@ -2264,7 +2264,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7059 1088 -1199;0 166 0" } @@ -2272,7 +2272,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6840 391 -1199;0 130 0" } @@ -2280,7 +2280,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6763 317 -1199;0 137 0" } @@ -2288,7 +2288,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6365 1069 -1199;0 -124 0" } @@ -2296,7 +2296,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6283 1100 -1199;0 -136 0" } @@ -2304,7 +2304,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6205 1189 -1199;0 -153 0" } @@ -2312,7 +2312,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5828 668 -1199;0 -4 0" } @@ -2320,7 +2320,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5770 720 -1199;0 4 0" } @@ -2328,7 +2328,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5674 1454 -1199;0 87 0" } @@ -2336,7 +2336,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5812 1465 -1199;0 87 0" } @@ -2344,7 +2344,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5965 1464 -1199;0 88 0" } @@ -2352,7 +2352,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6182 1434 -1199;0 79 0" } @@ -2360,7 +2360,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6326 1382 -1199;0 62 0" } @@ -2368,7 +2368,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6472 1289 -1199;0 36 0" } @@ -2376,7 +2376,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6575 1137 -1199;0 13 0" } @@ -2384,7 +2384,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6596 985 -1199;0 -4 0" } @@ -2392,7 +2392,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6591 852 -1199;0 -8 0" } @@ -2400,7 +2400,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6549 650 -1199;0 -25 0" } @@ -2408,7 +2408,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6363 479 -1199;0 -77 0" } @@ -2416,7 +2416,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6195 489 -1199;0 -95 0" } @@ -2424,7 +2424,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6074 512 -1199;0 -95 0" } @@ -2432,7 +2432,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5885 523 -1199;0 -115 0" } @@ -2440,7 +2440,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5699 587 -1199;0 -143 0" } @@ -2448,7 +2448,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5588 712 -1199;0 -158 0" } @@ -2456,7 +2456,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5553 880 -1199;0 -177 0" } @@ -2464,7 +2464,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5546 1060 -1199;0 171 0" } @@ -2472,7 +2472,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5554 1206 -1199;0 167 0" } @@ -2480,7 +2480,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5582 1364 -1199;0 165 0" } @@ -2488,7 +2488,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4831 1431 -1199;0 0 0" } @@ -2496,7 +2496,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4839 1634 -1199;0 -3 0" } @@ -2504,7 +2504,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4925 1987 -1199;0 -47 0" } @@ -2512,7 +2512,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5243 2274 -1199;0 -76 0" } @@ -2520,7 +2520,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5719 2388 -1199;0 -95 0" } @@ -2528,7 +2528,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6253 2388 -1199;0 -96 0" } @@ -2536,7 +2536,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6584 2386 -1199;0 -124 0" } @@ -2544,7 +2544,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6906 2211 -1199;0 -143 0" } @@ -2552,7 +2552,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7166 1943 -1199;0 -163 0" } @@ -2560,7 +2560,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7360 1565 -1199;0 -175 0" } @@ -2568,7 +2568,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7412 1146 -1199;0 174 0" } @@ -2576,7 +2576,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7413 764 -1199;0 174 0" } @@ -2584,7 +2584,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7430 431 -1199;0 153 0" } @@ -2592,7 +2592,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7299 81 -1199;0 124 0" } @@ -2600,7 +2600,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7042 -162 -1199;0 105 0" } @@ -2608,7 +2608,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6728 -273 -1199;0 91 0" } @@ -2616,7 +2616,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6319 -307 -1199;0 86 0" } @@ -2624,7 +2624,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5845 -302 -1199;0 86 0" } @@ -2632,7 +2632,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5607 -307 -1199;0 60 0" } @@ -2640,7 +2640,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5283 -185 -1199;0 36 0" } @@ -2648,7 +2648,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5038 47 -1199;0 26 0" } @@ -2656,7 +2656,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4870 322 -1199;0 8 0" } @@ -2664,7 +2664,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4785 686 -1199;0 0 0" } @@ -2672,7 +2672,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4763 1072 -1199;0 -3 0" } @@ -2680,7 +2680,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4772 1317 -1199;0 -9 0" } @@ -2688,7 +2688,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4813 2396 -1199;0 3 0" } @@ -2696,7 +2696,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4816 2320 -1199;0 -4 0" } @@ -2704,7 +2704,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4760 2327 -1199;0 -4 0" } @@ -2712,7 +2712,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4745 2384 -1199;0 2 0" } @@ -2720,7 +2720,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7663 2448 -1199;0 2 0" } @@ -2728,7 +2728,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7661 2352 -1199;0 -4 0" } @@ -2736,7 +2736,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7584 2373 -1199;0 -3 0" } @@ -2744,7 +2744,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7593 2452 -1199;0 3 0" } @@ -2752,7 +2752,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7625 -617 -1199;0 -90 0" } @@ -2760,7 +2760,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7543 -620 -1199;0 -96 0" } @@ -2768,7 +2768,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7546 -520 -1199;0 -97 0" } @@ -2776,7 +2776,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7629 -531 -1199;0 -90 0" } @@ -2784,7 +2784,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4479 -588 -1199;0 -179 0" } @@ -2792,7 +2792,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4470 -507 -1199;0 174 0" } @@ -2800,7 +2800,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4543 -520 -1199;0 174 0" } @@ -2808,7 +2808,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4537 -591 -1199;0 -179 0" } @@ -2816,7 +2816,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4397 -576 -1199;0 -85 0" } @@ -2824,7 +2824,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4535 -677 -1199;0 -169 0" } @@ -2832,7 +2832,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4600 -581 -1199;0 175 0" } @@ -2840,7 +2840,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4521 -434 -1199;0 156 0" } @@ -2848,7 +2848,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7470 -581 -1199;0 -27 0" } @@ -2856,7 +2856,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7618 -460 -1199;0 -3 0" } @@ -2864,7 +2864,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7770 -552 -1199;0 5 0" } @@ -2872,7 +2872,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7581 -752 -1199;0 -67 0" } @@ -2880,7 +2880,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7626 2275 -1199;0 81 0" } @@ -2888,7 +2888,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7512 2410 -1199;0 26 0" } @@ -2896,7 +2896,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7615 2600 -1199;0 -79 0" } @@ -2904,7 +2904,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7774 2433 -1199;0 -114 0" } @@ -2912,7 +2912,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4650 2354 -1199;0 -122 0" } @@ -2920,7 +2920,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4724 2452 -1199;0 -108 0" } @@ -2928,7 +2928,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4794 2238 -1199;0 -159 0" } @@ -2936,7 +2936,7 @@ { "count" "0" "health" "40000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4865 2302 -1199;0 -178 0" } @@ -2944,7 +2944,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4674 -685 -1199;0 -42 0" } @@ -2952,7 +2952,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4590 -787 -1199;0 -77 0" } @@ -2960,7 +2960,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4458 -782 -1199;0 -109 0" } @@ -2968,7 +2968,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4344 -713 -1199;0 -141 0" } @@ -2976,7 +2976,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4285 -640 -1199;0 -162 0" } @@ -2984,7 +2984,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4283 -524 -1199;0 172 0" } @@ -2992,7 +2992,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4331 -425 -1199;0 147 0" } @@ -3000,7 +3000,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4423 -339 -1199;0 117 0" } @@ -3008,7 +3008,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4521 -314 -1199;0 94 0" } @@ -3016,7 +3016,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4617 -363 -1199;0 68 0" } @@ -3024,7 +3024,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4690 -454 -1199;0 34 0" } @@ -3032,7 +3032,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4709 -545 -1199;0 5 0" } @@ -3040,7 +3040,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7810 -439 -1199;0 22 0" } @@ -3048,7 +3048,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7852 -556 -1199;0 12 0" } @@ -3056,7 +3056,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7823 -680 -1199;0 -28 0" } @@ -3064,7 +3064,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7735 -776 -1199;0 -53 0" } @@ -3072,7 +3072,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7673 -834 -1199;0 -68 0" } @@ -3080,7 +3080,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7525 -852 -1199;0 -95 0" } @@ -3088,7 +3088,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7439 -811 -1199;0 -112 0" } @@ -3096,7 +3096,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7393 -758 -1199;0 -125 0" } @@ -3104,7 +3104,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7342 -673 -1199;0 -146 0" } @@ -3112,7 +3112,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7315 -576 -1199;0 -170 0" } @@ -3120,7 +3120,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7354 -471 -1199;0 162 0" } @@ -3128,7 +3128,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7423 -413 -1199;0 136 0" } @@ -3136,7 +3136,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7489 -387 -1199;0 113 0" } @@ -3144,7 +3144,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7585 -364 -1199;0 79 0" } @@ -3152,7 +3152,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7668 -362 -1199;0 96 0" } @@ -3160,7 +3160,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7731 -373 -1199;0 82 0" } @@ -3168,7 +3168,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7431 2242 -1199;0 -141 0" } @@ -3176,7 +3176,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7388 2311 -1199;0 -158 0" } @@ -3184,7 +3184,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7378 2401 -1199;0 -177 0" } @@ -3192,7 +3192,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7388 2481 -1199;0 164 0" } @@ -3200,7 +3200,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7422 2578 -1199;0 143 0" } @@ -3208,7 +3208,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7481 2654 -1199;0 123 0" } @@ -3216,7 +3216,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7571 2708 -1199;0 121 0" } @@ -3224,7 +3224,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7659 2697 -1199;0 82 0" } @@ -3232,7 +3232,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7762 2617 -1199;0 42 0" } @@ -3240,7 +3240,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7804 2576 -1199;0 41 0" } @@ -3248,7 +3248,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7863 2450 -1199;0 8 0" } @@ -3256,7 +3256,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7815 2313 -1199;0 -33 0" } @@ -3264,7 +3264,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7736 2225 -1199;0 -55 0" } @@ -3272,7 +3272,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7656 2203 -1199;0 -80 0" } @@ -3280,7 +3280,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7529 2191 -1199;0 -91 0" } @@ -3288,7 +3288,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4973 2412 -1199;0 30 0" } @@ -3296,7 +3296,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4921 2487 -1199;0 39 0" } @@ -3304,7 +3304,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4875 2529 -1199;0 45 0" } @@ -3312,7 +3312,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4792 2579 -1199;0 68 0" } @@ -3320,7 +3320,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4678 2574 -1199;0 96 0" } @@ -3328,7 +3328,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4608 2547 -1199;0 115 0" } @@ -3336,7 +3336,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4542 2476 -1199;0 146 0" } @@ -3344,7 +3344,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4539 2415 -1199;0 162 0" } @@ -3352,7 +3352,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4536 2316 -1199;0 -165 0" } @@ -3360,7 +3360,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4594 2236 -1199;0 -133 0" } @@ -3368,7 +3368,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4660 2189 -1199;0 -107 0" } @@ -3376,7 +3376,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4718 2171 -1199;0 -88 0" } @@ -3384,7 +3384,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4860 2179 -1199;0 -73 0" } @@ -3392,7 +3392,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4699 -184 -1199;0 141 0" } @@ -3400,7 +3400,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4930 2250 -1199;0 -32 0" } @@ -3408,7 +3408,7 @@ { "count" "0" "health" "30000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4983 2342 -1199;0 -14 0" } @@ -3416,7 +3416,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4876 -415 -1199;0 146 0" } @@ -3424,7 +3424,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5058 2219 -1199;0 76 0" } @@ -3432,7 +3432,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4813 2046 -1199;0 102 0" } @@ -3440,7 +3440,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7337 2132 -1199;0 -2 0" } @@ -3448,7 +3448,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7249 2332 -1199;0 15 0" } @@ -3456,7 +3456,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7231 -441 -1199;0 -89 0" } @@ -3464,7 +3464,7 @@ { "count" "0" "health" "25000" - "extra_damage" "0.35" + "extra_damage" "0.6" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7362 -287 -1199;0 -73 0" } diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/base_4_1.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/base_4_1.cfg index 80fa5d30e4..507c75821c 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/base_4_1.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/base_4_1.cfg @@ -91,7 +91,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5937 1395 -1199;0 100 0" } @@ -99,7 +99,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5944 1322 -1199;0 102 0" } @@ -107,7 +107,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6036 1390 -1199;0 87 0" } @@ -115,7 +115,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6024 1346 -1199;0 88 0" } @@ -123,7 +123,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6117 1384 -1199;0 75 0" } @@ -131,7 +131,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6111 1333 -1199;0 74 0" } @@ -139,7 +139,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6198 1380 -1199;0 65 0" } @@ -147,7 +147,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6187 1316 -1199;0 62 0" } @@ -155,7 +155,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5608 1010 -1199;0 176 0" } @@ -163,7 +163,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5719 1012 -1199;0 175 0" } @@ -171,7 +171,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5622 946 -1199;0 -173 0" } @@ -179,7 +179,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5704 937 -1199;0 -170 0" } @@ -187,7 +187,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5618 861 -1199;0 -162 0" } @@ -195,7 +195,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5709 838 -1199;0 -153 0" } @@ -203,7 +203,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5615 744 -1199;0 179 0" } @@ -211,7 +211,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5705 749 -1199;0 177 0" } @@ -219,7 +219,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5836 1189 -1199;0 -168 0" } @@ -227,7 +227,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5840 1279 -1199;0 179 0" } @@ -235,7 +235,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5841 1382 -1199;0 179 0" } @@ -243,7 +243,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5905 1461 -1199;0 90 0" } @@ -251,7 +251,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6028 1461 -1199;0 89 0" } @@ -259,7 +259,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6120 1460 -1199;0 89 0" } @@ -267,7 +267,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6226 1460 -1199;0 89 0" } @@ -275,7 +275,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6317 1401 -1199;0 -1 0" } @@ -283,7 +283,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6312 1282 -1199;0 -0 0" } @@ -291,7 +291,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6308 1182 -1199;0 -0 0" } @@ -299,7 +299,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5812 1135 -1199;0 89 0" } @@ -307,7 +307,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5716 1133 -1199;0 88 0" } @@ -315,7 +315,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5618 1135 -1199;0 89 0" } @@ -323,7 +323,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5546 1049 -1199;0 -179 0" } @@ -331,7 +331,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5539 962 -1199;0 -178 0" } @@ -339,7 +339,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5541 881 -1199;0 -178 0" } @@ -347,7 +347,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5543 771 -1199;0 -178 0" } @@ -355,7 +355,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5558 671 -1199;0 -179 0" } @@ -363,7 +363,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5625 643 -1199;0 -87 0" } @@ -371,7 +371,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5690 646 -1199;0 -88 0" } @@ -379,7 +379,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5766 650 -1199;0 -88 0" } @@ -387,7 +387,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5841 613 -1199;0 -142 0" } @@ -395,7 +395,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5909 525 -1199;0 -142 0" } @@ -403,7 +403,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5976 438 -1199;0 -142 0" } @@ -411,7 +411,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6055 336 -1199;0 -142 0" } @@ -419,7 +419,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6136 231 -1199;0 -142 0" } @@ -427,7 +427,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6203 144 -1199;0 -142 0" } @@ -435,7 +435,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6320 148 -1199;0 -59 0" } @@ -443,7 +443,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6393 217 -1199;0 -53 0" } @@ -451,7 +451,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6451 259 -1199;0 -53 0" } @@ -459,7 +459,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6534 318 -1199;0 -53 0" } @@ -467,7 +467,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6605 370 -1199;0 -53 0" } @@ -475,7 +475,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6693 457 -1199;0 -51 0" } @@ -483,7 +483,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6353 1103 -1199;0 40 0" } @@ -491,7 +491,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6429 1008 -1199;0 40 0" } @@ -499,7 +499,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6504 921 -1199;0 40 0" } @@ -507,7 +507,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6571 843 -1199;0 40 0" } @@ -515,7 +515,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6631 772 -1199;0 40 0" } @@ -523,7 +523,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6714 674 -1199;0 40 0" } @@ -531,7 +531,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6780 587 -1199;0 40 0" } @@ -539,7 +539,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6746 501 -1199;0 -45 0" } @@ -547,7 +547,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;6665 576 -1199;0 -9 0" } @@ -555,7 +555,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;6259 245 -1199;0 -94 0" } @@ -563,7 +563,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;6302 1053 -1199;0 46 0" } @@ -571,7 +571,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;5871 641 -1199;0 -138 0" } @@ -579,7 +579,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.3" + "extra_damage" "0.55" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;6592 484 -1199;0 -32 0" } @@ -587,7 +587,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.3" + "extra_damage" "0.55" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;6382 329 -1199;0 -67 0" } @@ -595,7 +595,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.3" + "extra_damage" "0.55" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;6528 751 -1199;0 3 0" } @@ -603,7 +603,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.3" + "extra_damage" "0.55" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;6402 920 -1199;0 45 0" } @@ -611,7 +611,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.3" + "extra_damage" "0.55" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;6143 407 -1199;0 -116 0" } @@ -619,7 +619,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.3" + "extra_damage" "0.55" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_minigun_turret;enemy_base;6012 560 -1199;0 -148 0" } @@ -627,7 +627,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6054 1259 -1199;0 108 0" } @@ -635,7 +635,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5783 866 -1199;0 175 0" } @@ -643,7 +643,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5783 757 -1199;0 -168 0" } @@ -651,7 +651,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5783 980 -1199;0 160 0" } @@ -659,7 +659,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5958 1233 -1199;0 99 0" } @@ -667,7 +667,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6164 1238 -1199;0 74 0" } @@ -675,7 +675,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5925 1537 -1199;0 91 0" } @@ -683,7 +683,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6013 1542 -1199;0 90 0" } @@ -691,7 +691,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6111 1542 -1199;0 90 0" } @@ -699,7 +699,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6181 1542 -1199;0 90 0" } @@ -707,7 +707,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5479 1038 -1199;0 164 0" } @@ -715,7 +715,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5475 936 -1199;0 179 0" } @@ -723,7 +723,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5485 851 -1199;0 -178 0" } @@ -731,7 +731,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5482 774 -1199;0 -179 0" } @@ -739,7 +739,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5462 696 -1199;0 -167 0" } @@ -747,7 +747,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6248 1542 -1199;0 90 0" } @@ -787,7 +787,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6381 1365 -1199;0 84 0" } @@ -795,7 +795,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6500 1334 -1199;0 61 0" } @@ -803,7 +803,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6566 1206 -1199;0 8 0" } @@ -811,7 +811,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6542 1055 -1199;0 -21 0" } @@ -819,7 +819,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5885 479 -1199;0 -62 0" } @@ -827,7 +827,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5804 432 -1199;0 -88 0" } @@ -835,7 +835,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5684 464 -1199;0 -140 0" } @@ -843,7 +843,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5655 580 -1199;0 -171 0" } @@ -851,7 +851,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5705 1233 -1199;0 143 0" } @@ -859,7 +859,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5746 1306 -1199;0 122 0" } @@ -867,7 +867,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5788 1190 -1199;0 135 0" } @@ -875,7 +875,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;5656 1325 -1199;0 -29 0" } @@ -883,7 +883,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6653 856 -1199;0 -28 0" } @@ -891,7 +891,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5975 269 -1199;0 -51 0" } @@ -899,7 +899,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6821 372 -1199;0 -47 0" } @@ -907,7 +907,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6415 47 -1199;0 -51 0" } @@ -915,7 +915,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6624 198 -1199;0 -51 0" } @@ -923,7 +923,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6969 313 -1199;0 -32 0" } @@ -931,7 +931,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6889 227 -1199;0 -46 0" } @@ -939,7 +939,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6757 126 -1199;0 -37 0" } @@ -947,7 +947,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6695 77 -1199;0 -58 0" } @@ -955,7 +955,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6587 2 -1199;0 -36 0" } @@ -963,7 +963,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6497 -64 -1199;0 -65 0" } @@ -971,7 +971,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6832 188 -1199;0 -50 0" } @@ -979,7 +979,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6642 46 -1199;0 -59 0" } @@ -987,7 +987,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6402 -74 -1199;0 -119 0" } @@ -995,7 +995,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6325 -9 -1199;0 -136 0" } @@ -1003,7 +1003,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6258 55 -1199;0 -138 0" } @@ -1011,7 +1011,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6948 419 -1199;0 36 0" } @@ -1019,7 +1019,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6837 534 -1199;0 41 0" } @@ -1027,7 +1027,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6896 477 -1199;0 50 0" } @@ -1035,7 +1035,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6728 745 -1199;0 -30 0" } @@ -1043,7 +1043,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6759 837 -1199;0 -14 0" } @@ -1051,7 +1051,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6750 908 -1199;0 12 0" } @@ -1059,7 +1059,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6703 995 -1199;0 26 0" } @@ -1067,7 +1067,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6663 1060 -1199;0 28 0" } @@ -1075,7 +1075,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6648 1127 -1199;0 -15 0" } @@ -1083,7 +1083,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6671 1239 -1199;0 -2 0" } @@ -1091,7 +1091,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6628 1347 -1199;0 22 0" } @@ -1099,7 +1099,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6562 1409 -1199;0 60 0" } @@ -1107,7 +1107,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6471 1439 -1199;0 77 0" } @@ -1115,7 +1115,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6380 1451 -1199;0 92 0" } @@ -1123,7 +1123,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6115 203 -1199;0 -73 0" } @@ -1131,7 +1131,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6024 183 -1199;0 -87 0" } @@ -1139,7 +1139,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5925 200 -1199;0 -121 0" } @@ -1147,7 +1147,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5844 270 -1199;0 -133 0" } @@ -1155,7 +1155,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5756 333 -1199;0 -109 0" } @@ -1163,7 +1163,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5684 361 -1199;0 -108 0" } @@ -1171,7 +1171,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5571 421 -1199;0 -141 0" } @@ -1179,7 +1179,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5543 518 -1199;0 -161 0" } @@ -1187,7 +1187,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6214 1628 -1199;0 -91 0" } @@ -1195,7 +1195,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6112 1627 -1199;0 -90 0" } @@ -1203,7 +1203,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5985 1629 -1199;0 -90 0" } @@ -1211,7 +1211,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5391 985 -1199;0 -14 0" } @@ -1219,7 +1219,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5388 897 -1199;0 -2 0" } @@ -1227,7 +1227,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5383 776 -1199;0 0 0" } @@ -1235,7 +1235,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6341 1531 -1199;0 -2 0" } @@ -1243,7 +1243,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6331 1617 -1199;0 8 0" } @@ -1251,7 +1251,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6286 1708 -1199;0 36 0" } @@ -1259,7 +1259,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6175 1735 -1199;0 88 0" } @@ -1267,7 +1267,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6053 1729 -1199;0 92 0" } @@ -1275,7 +1275,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5949 1725 -1199;0 91 0" } @@ -1283,7 +1283,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5836 1634 -1199;0 166 0" } @@ -1291,7 +1291,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5763 1562 -1199;0 104 0" } @@ -1299,7 +1299,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5679 1525 -1199;0 112 0" } @@ -1307,7 +1307,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5583 1474 -1199;0 124 0" } @@ -1315,7 +1315,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5531 1396 -1199;0 152 0" } @@ -1323,7 +1323,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5479 1293 -1199;0 153 0" } @@ -1331,7 +1331,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5446 1223 -1199;0 153 0" } @@ -1339,7 +1339,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5396 1131 -1199;0 126 0" } @@ -1347,7 +1347,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5313 1064 -1199;0 128 0" } @@ -1355,7 +1355,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5270 974 -1199;0 174 0" } @@ -1363,7 +1363,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;5202 946 -1199;0 125 0" } @@ -1371,7 +1371,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5270 769 -1199;0 -170 0" } @@ -1379,7 +1379,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5303 654 -1199;0 -150 0" } @@ -1387,7 +1387,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5393 611 -1199;0 -111 0" } @@ -1395,7 +1395,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5504 570 -1199;0 -110 0" } @@ -1403,7 +1403,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5573 575 -1199;0 157 0" } @@ -1411,7 +1411,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7063 113 -1199;0 132 0" } @@ -1419,7 +1419,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6905 -28 -1199;0 132 0" } @@ -1427,7 +1427,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6745 -165 -1199;0 131 0" } @@ -1435,7 +1435,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6208 -155 -1199;0 34 0" } @@ -1443,7 +1443,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6045 9 -1199;0 49 0" } @@ -1451,7 +1451,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5135 761 -1199;0 -13 0" } @@ -1459,7 +1459,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5128 949 -1199;0 0 0" } @@ -1467,7 +1467,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6901 682 -1199;0 -161 0" } @@ -1475,7 +1475,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6987 571 -1199;0 -145 0" } @@ -1483,7 +1483,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6160 1854 -1199;0 -76 0" } @@ -1491,7 +1491,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5936 1859 -1199;0 -102 0" } @@ -1499,7 +1499,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5648 1652 -1199;0 -42 0" } @@ -1507,7 +1507,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5534 1551 -1199;0 -45 0" } @@ -1515,7 +1515,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5399 1420 -1199;0 -45 0" } @@ -1523,7 +1523,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5899 -0 -1199;0 -146 0" } @@ -1531,7 +1531,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5955 -80 -1199;0 -143 0" } @@ -1539,7 +1539,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6035 -180 -1199;0 -136 0" } @@ -1547,7 +1547,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6136 -275 -1199;0 -126 0" } @@ -1555,7 +1555,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6214 -320 -1199;0 -116 0" } @@ -1563,7 +1563,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6324 -351 -1199;0 -100 0" } @@ -1571,7 +1571,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6419 -350 -1199;0 -87 0" } @@ -1579,7 +1579,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6532 -344 -1199;0 -85 0" } @@ -1587,7 +1587,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6656 -334 -1199;0 -82 0" } @@ -1595,7 +1595,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6765 -303 -1199;0 -55 0" } @@ -1603,7 +1603,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6843 -246 -1199;0 -52 0" } @@ -1611,7 +1611,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6908 -194 -1199;0 -49 0" } @@ -1619,7 +1619,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6959 -151 -1199;0 -47 0" } @@ -1627,7 +1627,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7045 -72 -1199;0 -46 0" } @@ -1635,7 +1635,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7122 7 -1199;0 -44 0" } @@ -1643,7 +1643,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7231 125 -1199;0 -35 0" } @@ -1651,7 +1651,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7238 214 -1199;0 23 0" } @@ -1659,7 +1659,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7208 298 -1199;0 13 0" } @@ -1667,7 +1667,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7173 404 -1199;0 14 0" } @@ -1675,7 +1675,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7155 476 -1199;0 14 0" } @@ -1683,7 +1683,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7109 598 -1199;0 26 0" } @@ -1691,7 +1691,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6964 799 -1199;0 29 0" } @@ -1699,7 +1699,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7028 719 -1199;0 34 0" } @@ -1707,7 +1707,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6888 851 -1199;0 53 0" } @@ -1715,7 +1715,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6815 884 -1199;0 61 0" } @@ -1723,7 +1723,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6292 1777 -1199;0 1 0" } @@ -1731,7 +1731,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6271 1879 -1199;0 28 0" } @@ -1739,7 +1739,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6215 1918 -1199;0 78 0" } @@ -1747,7 +1747,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6087 1948 -1199;0 79 0" } @@ -1755,7 +1755,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6012 1947 -1199;0 101 0" } @@ -1763,7 +1763,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5898 1932 -1199;0 112 0" } @@ -1771,7 +1771,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5836 1858 -1199;0 153 0" } @@ -1779,7 +1779,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5860 1771 -1199;0 -161 0" } @@ -1787,7 +1787,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5782 1879 -1199;0 91 0" } @@ -1795,7 +1795,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5684 1834 -1199;0 122 0" } @@ -1803,7 +1803,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5612 1788 -1199;0 121 0" } @@ -1811,7 +1811,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5537 1732 -1199;0 125 0" } @@ -1819,7 +1819,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5459 1671 -1199;0 128 0" } @@ -1827,7 +1827,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5389 1605 -1199;0 135 0" } @@ -1835,7 +1835,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5318 1531 -1199;0 143 0" } @@ -1843,7 +1843,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5278 1454 -1199;0 151 0" } @@ -1851,7 +1851,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5251 1380 -1199;0 168 0" } @@ -1859,7 +1859,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5241 1276 -1199;0 -179 0" } @@ -1867,7 +1867,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5254 1182 -1199;0 -169 0" } @@ -1875,7 +1875,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5271 1077 -1199;0 -157 0" } @@ -1883,7 +1883,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5222 1098 -1199;0 107 0" } @@ -1891,7 +1891,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5131 1067 -1199;0 113 0" } @@ -1899,7 +1899,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5062 1014 -1199;0 150 0" } @@ -1907,7 +1907,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5041 911 -1199;0 177 0" } @@ -1915,7 +1915,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5034 793 -1199;0 -175 0" } @@ -1923,7 +1923,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5060 707 -1199;0 -151 0" } @@ -1931,7 +1931,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5136 642 -1199;0 -110 0" } @@ -1939,7 +1939,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5246 642 -1199;0 -90 0" } @@ -1947,7 +1947,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5888 122 -1199;0 167 0" } @@ -1955,7 +1955,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6160 48 -1199;0 -143 0" } @@ -1963,7 +1963,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6232 -47 -1199;0 -136 0" } @@ -1971,7 +1971,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6391 -202 -1199;0 -107 0" } @@ -1979,7 +1979,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6533 -222 -1199;0 -81 0" } @@ -1987,7 +1987,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6637 -186 -1199;0 -62 0" } @@ -1995,7 +1995,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7098 257 -1199;0 -15 0" } @@ -2003,7 +2003,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7088 388 -1199;0 0 0" } @@ -2011,7 +2011,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7053 514 -1199;0 17 0" } @@ -2019,7 +2019,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6773 -3 -1199;0 -90 0" } @@ -2027,7 +2027,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6904 108 -1199;0 -14 0" } @@ -2035,7 +2035,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6807 736 -1199;0 63 0" } @@ -2043,7 +2043,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6857 637 -1199;0 -12 0" } @@ -2051,7 +2051,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6433 1551 -1199;0 -111 0" } @@ -2059,7 +2059,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6645 1467 -1199;0 -138 0" } @@ -2067,7 +2067,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6754 1254 -1199;0 -152 0" } @@ -2075,7 +2075,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6847 1045 -1199;0 -147 0" } @@ -2083,7 +2083,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7037 912 -1199;0 -144 0" } @@ -2091,7 +2091,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7152 718 -1199;0 -150 0" } @@ -2099,7 +2099,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7258 543 -1199;0 -156 0" } @@ -2107,7 +2107,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7321 402 -1199;0 158 0" } @@ -2115,7 +2115,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7328 176 -1199;0 151 0" } @@ -2123,7 +2123,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7231 -31 -1199;0 130 0" } @@ -2131,7 +2131,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;7046 -189 -1199;0 118 0" } @@ -2139,7 +2139,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6862 -321 -1199;0 105 0" } @@ -2147,7 +2147,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6720 -416 -1199;0 90 0" } @@ -2155,7 +2155,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6575 -446 -1199;0 66 0" } @@ -2163,7 +2163,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6298 -414 -1199;0 58 0" } @@ -2171,7 +2171,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6099 -381 -1199;0 46 0" } @@ -2179,7 +2179,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5965 -257 -1199;0 33 0" } @@ -2187,7 +2187,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5865 -58 -1199;0 26 0" } @@ -2195,7 +2195,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5799 168 -1199;0 25 0" } @@ -2203,7 +2203,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5591 273 -1199;0 30 0" } @@ -2211,7 +2211,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5431 431 -1199;0 30 0" } @@ -2219,7 +2219,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5251 584 -1199;0 25 0" } @@ -2227,7 +2227,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5068 577 -1199;0 1 0" } @@ -2235,7 +2235,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4956 758 -1199;0 -12 0" } @@ -2243,7 +2243,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;4960 871 -1199;0 -23 0" } @@ -2251,7 +2251,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5049 1059 -1199;0 -26 0" } @@ -2259,7 +2259,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5157 1181 -1199;0 -20 0" } @@ -2267,7 +2267,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5153 1413 -1199;0 -17 0" } @@ -2275,7 +2275,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5215 1560 -1199;0 -30 0" } @@ -2283,7 +2283,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5309 1689 -1199;0 -48 0" } @@ -2291,7 +2291,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5502 1792 -1199;0 -61 0" } @@ -2299,7 +2299,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5672 1932 -1199;0 -69 0" } @@ -2307,7 +2307,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5808 2001 -1199;0 -78 0" } @@ -2315,7 +2315,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5959 2001 -1199;0 -92 0" } @@ -2323,7 +2323,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6063 2048 -1199;0 -130 0" } @@ -2331,7 +2331,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6256 1952 -1199;0 -129 0" } @@ -2339,7 +2339,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6425 1770 -1199;0 -133 0" } @@ -2347,7 +2347,7 @@ { "count" "0" "health" "125000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;6432 1660 -1199;0 -138 0" } @@ -2355,7 +2355,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;7034 1186 -1199;0 -2 0" } @@ -2363,7 +2363,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6988 1349 -1199;0 18 0" } @@ -2371,7 +2371,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6909 1512 -1199;0 44 0" } @@ -2379,7 +2379,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;6791 1626 -1199;0 56 0" } @@ -2387,7 +2387,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5112 338 -1199;0 -154 0" } @@ -2395,7 +2395,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5251 147 -1199;0 -149 0" } @@ -2403,7 +2403,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5457 23 -1199;0 -119 0" } @@ -2411,7 +2411,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5608 -26 -1199;0 -107 0" } @@ -2419,7 +2419,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5336 286 -1199;0 -158 0" } @@ -2427,7 +2427,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5418 209 -1199;0 -131 0" } @@ -2435,7 +2435,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5528 123 -1199;0 -111 0" } @@ -2443,7 +2443,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5237 356 -1199;0 -145 0" } @@ -2451,7 +2451,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6917 1166 -1199;0 14 0" } @@ -2459,7 +2459,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6889 1285 -1199;0 21 0" } @@ -2467,7 +2467,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6840 1385 -1199;0 31 0" } @@ -2475,7 +2475,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6780 1485 -1199;0 44 0" } @@ -2483,7 +2483,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6947 1704 -1199;0 39 0" } @@ -2491,7 +2491,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6875 1791 -1199;0 39 0" } @@ -2499,7 +2499,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6808 1872 -1199;0 39 0" } @@ -2507,7 +2507,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6733 1962 -1199;0 39 0" } @@ -2515,7 +2515,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6655 2053 -1199;0 39 0" } @@ -2523,7 +2523,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6553 2113 -1199;0 57 0" } @@ -2531,7 +2531,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6480 2141 -1199;0 72 0" } @@ -2539,7 +2539,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6275 2200 -1199;0 76 0" } @@ -2547,7 +2547,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6131 2235 -1199;0 76 0" } @@ -2555,7 +2555,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6038 2250 -1199;0 80 0" } @@ -2563,7 +2563,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5934 2257 -1199;0 83 0" } @@ -2571,7 +2571,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6384 2184 -1199;0 75 0" } @@ -2579,7 +2579,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6196 2212 -1199;0 68 0" } @@ -2587,7 +2587,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5818 2226 -1199;0 93 0" } @@ -2595,7 +2595,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5694 2221 -1199;0 94 0" } @@ -2603,7 +2603,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5601 2214 -1199;0 93 0" } @@ -2611,7 +2611,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5473 2156 -1199;0 116 0" } @@ -2619,7 +2619,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5536 2189 -1199;0 113 0" } @@ -2627,7 +2627,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5389 2096 -1199;0 120 0" } @@ -2635,7 +2635,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5308 2049 -1199;0 120 0" } @@ -2643,7 +2643,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5235 2006 -1199;0 120 0" } @@ -2651,7 +2651,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5149 1955 -1199;0 120 0" } @@ -2659,7 +2659,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5058 1901 -1199;0 120 0" } @@ -2667,7 +2667,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4964 1846 -1199;0 120 0" } @@ -2675,7 +2675,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4896 1780 -1199;0 146 0" } @@ -2683,7 +2683,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4855 1707 -1199;0 148 0" } @@ -2691,7 +2691,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4814 1641 -1199;0 148 0" } @@ -2699,7 +2699,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4767 1566 -1199;0 148 0" } @@ -2707,7 +2707,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4718 1488 -1199;0 148 0" } @@ -2715,7 +2715,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4677 1417 -1199;0 149 0" } @@ -2723,7 +2723,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4641 1357 -1199;0 154 0" } @@ -2731,7 +2731,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4626 1278 -1199;0 177 0" } @@ -2739,7 +2739,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4622 1199 -1199;0 179 0" } @@ -2747,7 +2747,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4619 1126 -1199;0 179 0" } @@ -2755,7 +2755,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4620 1049 -1199;0 179 0" } @@ -2763,7 +2763,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4622 982 -1199;0 -179 0" } @@ -2771,7 +2771,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4624 916 -1199;0 179 0" } @@ -2779,7 +2779,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4626 833 -1199;0 -179 0" } @@ -2787,7 +2787,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4626 746 -1199;0 -179 0" } @@ -2795,7 +2795,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4626 669 -1199;0 -179 0" } @@ -2803,7 +2803,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4627 565 -1199;0 -179 0" } @@ -2811,7 +2811,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4669 460 -1199;0 -141 0" } @@ -2819,7 +2819,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4714 403 -1199;0 -141 0" } @@ -2827,7 +2827,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4761 344 -1199;0 -141 0" } @@ -2835,7 +2835,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4836 251 -1199;0 -141 0" } @@ -2843,7 +2843,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4884 180 -1199;0 -142 0" } @@ -2851,7 +2851,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4914 141 -1199;0 -142 0" } @@ -2859,7 +2859,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4961 80 -1199;0 -142 0" } @@ -2867,7 +2867,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4997 33 -1199;0 -142 0" } @@ -2875,7 +2875,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5041 -22 -1199;0 -142 0" } @@ -2883,7 +2883,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5082 -76 -1199;0 -142 0" } @@ -2891,7 +2891,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5133 -142 -1199;0 -142 0" } @@ -2899,7 +2899,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5190 -216 -1199;0 -142 0" } @@ -2907,7 +2907,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5252 -297 -1199;0 -142 0" } @@ -2915,7 +2915,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5293 -351 -1199;0 -142 0" } @@ -2923,7 +2923,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5357 -417 -1199;0 -119 0" } @@ -2931,7 +2931,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5422 -455 -1199;0 -119 0" } @@ -2939,7 +2939,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5509 -505 -1199;0 -119 0" } @@ -2947,7 +2947,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5597 -555 -1199;0 -119 0" } @@ -2955,7 +2955,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5686 -606 -1199;0 -119 0" } @@ -2963,7 +2963,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5761 -649 -1199;0 -119 0" } @@ -2971,7 +2971,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5835 -692 -1199;0 -119 0" } @@ -2979,7 +2979,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5937 -706 -1199;0 -88 0" } @@ -2987,7 +2987,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6049 -703 -1199;0 -88 0" } @@ -2995,7 +2995,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6162 -700 -1199;0 -88 0" } @@ -3003,7 +3003,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6267 -697 -1199;0 -88 0" } @@ -3011,7 +3011,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6369 -694 -1199;0 -88 0" } @@ -3019,7 +3019,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6470 -691 -1199;0 -88 0" } @@ -3027,7 +3027,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6596 -687 -1199;0 -88 0" } @@ -3035,7 +3035,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6700 -684 -1199;0 -88 0" } @@ -3043,7 +3043,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6791 -681 -1199;0 -88 0" } @@ -3051,7 +3051,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6857 -679 -1199;0 -88 0" } @@ -3059,7 +3059,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6912 -678 -1199;0 -88 0" } @@ -3067,7 +3067,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;6999 -675 -1199;0 -88 0" } @@ -3075,7 +3075,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7081 -673 -1199;0 -88 0" } @@ -3083,7 +3083,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7176 -638 -1199;0 -39 0" } @@ -3091,7 +3091,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7243 -559 -1199;0 -39 0" } @@ -3099,7 +3099,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7288 -505 -1199;0 -39 0" } @@ -3107,7 +3107,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7344 -437 -1199;0 -39 0" } @@ -3115,7 +3115,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7391 -380 -1199;0 -39 0" } @@ -3123,7 +3123,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7435 -328 -1199;0 -39 0" } @@ -3131,7 +3131,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7487 -265 -1199;0 -39 0" } @@ -3139,7 +3139,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7542 -199 -1199;0 -39 0" } @@ -3147,7 +3147,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7601 -128 -1199;0 -39 0" } @@ -3155,7 +3155,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7663 -54 -1199;0 -39 0" } @@ -3163,7 +3163,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7685 54 -1199;0 -1 0" } @@ -3171,7 +3171,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7687 132 -1199;0 -1 0" } @@ -3179,7 +3179,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7690 260 -1199;0 -1 0" } @@ -3187,7 +3187,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7692 355 -1199;0 -1 0" } @@ -3195,7 +3195,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7694 464 -1199;0 -1 0" } @@ -3203,7 +3203,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7696 545 -1199;0 -1 0" } @@ -3211,7 +3211,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7698 648 -1199;0 -1 0" } @@ -3219,7 +3219,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7693 749 -1199;0 5 0" } @@ -3227,7 +3227,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7677 841 -1199;0 4 0" } @@ -3235,7 +3235,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7661 922 -1199;0 10 0" } @@ -3243,7 +3243,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7646 1007 -1199;0 10 0" } @@ -3251,7 +3251,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7634 1073 -1199;0 10 0" } @@ -3259,7 +3259,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7623 1128 -1199;0 10 0" } @@ -3267,7 +3267,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7572 1226 -1199;0 37 0" } @@ -3275,7 +3275,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7519 1290 -1199;0 38 0" } @@ -3283,7 +3283,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7430 1396 -1199;0 39 0" } @@ -3291,7 +3291,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7285 1530 -1199;0 73 0" } @@ -3299,7 +3299,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7361 1460 -1199;0 48 0" } @@ -3307,7 +3307,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7016 1655 -1199;0 68 0" } @@ -3315,7 +3315,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7136 1603 -1199;0 64 0" } @@ -3323,7 +3323,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;7195 1576 -1199;0 64 0" } @@ -3331,7 +3331,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5326 1818 -1199;0 -68 0" } @@ -3339,7 +3339,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5443 1922 -1199;0 -60 0" } @@ -3347,7 +3347,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6295 2032 -1199;0 -121 0" } @@ -3355,7 +3355,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6541 1876 -1199;0 -135 0" } @@ -3363,7 +3363,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6652 1761 -1199;0 -145 0" } @@ -3371,7 +3371,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7261 903 -1199;0 -170 0" } @@ -3379,7 +3379,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7359 715 -1199;0 -155 0" } @@ -3387,7 +3387,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7440 576 -1199;0 -161 0" } @@ -3395,7 +3395,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7413 -49 -1199;0 140 0" } @@ -3403,7 +3403,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7229 -269 -1199;0 133 0" } @@ -3411,7 +3411,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7114 -391 -1199;0 126 0" } @@ -3419,7 +3419,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6021 -468 -1199;0 57 0" } @@ -3427,7 +3427,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5817 -342 -1199;0 51 0" } @@ -3435,7 +3435,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5611 -252 -1199;0 49 0" } @@ -3443,7 +3443,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4906 520 -1199;0 14 0" } @@ -3451,7 +3451,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4803 739 -1199;0 -3 0" } @@ -3459,7 +3459,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4807 995 -1199;0 -10 0" } @@ -3467,7 +3467,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4938 1428 -1199;0 -54 0" } @@ -3475,7 +3475,7 @@ { "count" "0" "health" "60000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5076 1642 -1199;0 -56 0" } @@ -3483,7 +3483,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;6373 -578 -1199;0 -88 0" } @@ -3491,7 +3491,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_incinerator;enemy_base;7570 459 -1199;0 -5 0" } @@ -3499,7 +3499,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7333 1215 -1199;0 48 0" } @@ -3507,7 +3507,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7434 1117 -1199;0 33 0" } @@ -3515,7 +3515,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7541 943 -1199;0 12 0" } @@ -3523,7 +3523,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5134 12 -1199;0 -134 0" } @@ -3531,7 +3531,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5339 -147 -1199;0 -125 0" } @@ -3539,7 +3539,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5004 203 -1199;0 -160 0" } @@ -3547,7 +3547,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;5993 1825 -1199;0 110 0" } @@ -3555,7 +3555,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;6120 1815 -1199;0 91 0" } @@ -3563,7 +3563,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;5189 799 -1199;0 -148 0" } @@ -3571,7 +3571,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5265 861 -1199;0 179 0" } @@ -3579,7 +3579,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;6723 259 -1199;0 -38 0" } @@ -3587,7 +3587,7 @@ { "count" "0" "health" "70000" - "extra_damage" "0.5" + "extra_damage" "1.0" "plugin" "npc_const2_building_spawner" "data" "obj_const2_laser_intensifier;enemy_base;6523 105 -1199;0 -56 0" } diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/base_4_2.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/base_4_2.cfg index cf1e4529b6..5b9e34e70c 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/base_4_2.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/base_4_2.cfg @@ -96,7 +96,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5043 12083 -1215;0 -87 0" } @@ -104,7 +104,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5099 12097 -1215;0 -93 0" } @@ -112,7 +112,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5164 12108 -1215;0 -89 0" } @@ -120,7 +120,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5373 12101 -1215;0 -90 0" } @@ -128,7 +128,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5285 12101 -1215;0 -90 0" } @@ -136,7 +136,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5457 12096 -1215;0 -90 0" } @@ -144,7 +144,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5535 12099 -1215;0 -90 0" } @@ -152,7 +152,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5603 12104 -1215;0 -80 0" } @@ -160,7 +160,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5228 12101 -1215;0 -90 0" } @@ -168,7 +168,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5811 11861 -1215;0 -78 0" } @@ -176,7 +176,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5737 11846 -1215;0 -78 0" } @@ -184,7 +184,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5677 11834 -1215;0 -78 0" } @@ -192,7 +192,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5598 11819 -1215;0 -78 0" } @@ -200,7 +200,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5501 11800 -1215;0 -78 0" } @@ -208,7 +208,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5425 11785 -1215;0 -78 0" } @@ -216,7 +216,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5364 11773 -1215;0 -78 0" } @@ -224,7 +224,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5297 11760 -1215;0 -78 0" } @@ -232,7 +232,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5213 11744 -1215;0 -78 0" } @@ -240,7 +240,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5142 11729 -1215;0 -78 0" } @@ -248,7 +248,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5056 11713 -1215;0 -78 0" } @@ -256,7 +256,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4974 11697 -1215;0 -78 0" } @@ -264,7 +264,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4911 11684 -1215;0 -78 0" } @@ -272,7 +272,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4835 11669 -1215;0 -78 0" } @@ -280,7 +280,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4747 11652 -1215;0 -78 0" } @@ -288,7 +288,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5881 11535 -1215;0 -83 0" } @@ -296,7 +296,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5802 11525 -1215;0 -83 0" } @@ -304,7 +304,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5710 11515 -1215;0 -83 0" } @@ -312,7 +312,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5611 11503 -1215;0 -83 0" } @@ -320,7 +320,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5544 11495 -1215;0 -83 0" } @@ -328,7 +328,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5467 11486 -1215;0 -83 0" } @@ -336,7 +336,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5391 11477 -1215;0 -83 0" } @@ -344,7 +344,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5318 11468 -1215;0 -83 0" } @@ -352,7 +352,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5243 11459 -1215;0 -83 0" } @@ -360,7 +360,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5157 11449 -1215;0 -83 0" } @@ -368,7 +368,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5077 11440 -1215;0 -83 0" } @@ -376,7 +376,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4989 11429 -1215;0 -83 0" } @@ -384,7 +384,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4925 11422 -1215;0 -83 0" } @@ -392,7 +392,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4842 11412 -1215;0 -83 0" } @@ -400,7 +400,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4779 11405 -1215;0 -83 0" } @@ -408,7 +408,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4718 11397 -1215;0 -83 0" } @@ -416,7 +416,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5936 11290 -1215;0 -83 0" } @@ -424,7 +424,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5875 11283 -1215;0 -83 0" } @@ -432,7 +432,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5814 11276 -1215;0 -83 0" } @@ -440,7 +440,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5742 11268 -1215;0 -83 0" } @@ -448,7 +448,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5664 11259 -1215;0 -83 0" } @@ -456,7 +456,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5571 11249 -1215;0 -83 0" } @@ -464,7 +464,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5488 11239 -1215;0 -83 0" } @@ -472,7 +472,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5407 11230 -1215;0 -83 0" } @@ -480,7 +480,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5344 11223 -1215;0 -83 0" } @@ -488,7 +488,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5269 11214 -1215;0 -83 0" } @@ -496,7 +496,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5180 11204 -1215;0 -83 0" } @@ -504,7 +504,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5118 11197 -1215;0 -83 0" } @@ -512,7 +512,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5035 11187 -1215;0 -83 0" } @@ -520,7 +520,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4972 11180 -1215;0 -83 0" } @@ -528,7 +528,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4898 11171 -1215;0 -83 0" } @@ -536,7 +536,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4829 11163 -1215;0 -83 0" } @@ -544,7 +544,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4769 11157 -1215;0 -83 0" } @@ -552,7 +552,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4687 11147 -1215;0 -83 0" } @@ -560,7 +560,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5746 12315 -1215;0 -156 0" } @@ -568,7 +568,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5686 12399 -1215;0 -136 0" } @@ -576,7 +576,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5609 12469 -1215;0 -120 0" } @@ -584,7 +584,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5519 12495 -1215;0 -101 0" } @@ -592,7 +592,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5419 12502 -1215;0 -85 0" } @@ -600,7 +600,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5322 12496 -1215;0 -79 0" } @@ -608,7 +608,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5256 12480 -1215;0 -74 0" } @@ -616,7 +616,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5189 12458 -1215;0 -71 0" } @@ -624,7 +624,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5094 12425 -1215;0 -70 0" } @@ -632,7 +632,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;5026 12376 -1215;0 -55 0" } @@ -640,7 +640,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_dungeon_wall1;enemy_base;4967 12314 -1215;0 -30 0" } @@ -648,7 +648,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5809 11397 -1215;0 -85 0" } @@ -656,7 +656,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5732 11390 -1215;0 -85 0" } @@ -664,7 +664,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5642 11383 -1215;0 -85 0" } @@ -672,7 +672,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5526 11374 -1215;0 -85 0" } @@ -680,7 +680,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5441 11367 -1215;0 -85 0" } @@ -688,7 +688,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5378 11362 -1215;0 -85 0" } @@ -696,7 +696,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5287 11355 -1215;0 -85 0" } @@ -704,7 +704,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5211 11349 -1215;0 -85 0" } @@ -712,7 +712,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5107 11341 -1215;0 -85 0" } @@ -720,7 +720,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5010 11333 -1215;0 -85 0" } @@ -728,7 +728,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4915 11326 -1215;0 -85 0" } @@ -736,7 +736,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4821 11318 -1215;0 -85 0" } @@ -744,7 +744,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4748 11313 -1215;0 -85 0" } @@ -752,7 +752,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5773 11654 -1215;0 -80 0" } @@ -760,7 +760,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5705 11639 -1215;0 -71 0" } @@ -768,7 +768,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5759 11702 -1215;0 -51 0" } @@ -776,7 +776,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5705 11699 -1215;0 -73 0" } @@ -784,7 +784,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5545 11596 -1215;0 -83 0" } @@ -792,7 +792,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5437 11585 -1215;0 -83 0" } @@ -800,7 +800,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5363 11577 -1215;0 -83 0" } @@ -808,7 +808,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5288 11569 -1215;0 -83 0" } @@ -816,7 +816,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5203 11559 -1215;0 -83 0" } @@ -824,7 +824,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5110 11549 -1215;0 -83 0" } @@ -832,7 +832,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5036 11540 -1215;0 -83 0" } @@ -840,7 +840,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4966 11532 -1215;0 -83 0" } @@ -848,7 +848,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4901 11522 -1215;0 -32 0" } @@ -856,7 +856,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4821 11505 -1215;0 -58 0" } @@ -864,7 +864,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4755 11497 -1215;0 -86 0" } @@ -872,7 +872,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5688 11935 -1215;0 -53 0" } @@ -880,7 +880,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5613 12001 -1215;0 -58 0" } @@ -888,7 +888,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5592 11901 -1215;0 -70 0" } @@ -896,7 +896,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5560 11973 -1215;0 -71 0" } @@ -904,7 +904,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4866 11774 -1215;0 -150 0" } @@ -912,7 +912,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4926 11798 -1215;0 -150 0" } @@ -920,7 +920,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4825 11861 -1215;0 -161 0" } @@ -928,7 +928,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4910 11921 -1215;0 -166 0" } @@ -936,7 +936,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5453 11909 -1215;0 -64 0" } @@ -944,7 +944,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5433 11972 -1215;0 -61 0" } @@ -952,7 +952,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5364 11889 -1215;0 -81 0" } @@ -960,7 +960,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5351 11947 -1215;0 -82 0" } @@ -968,7 +968,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5270 11860 -1215;0 -98 0" } @@ -976,7 +976,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5248 11923 -1215;0 -105 0" } @@ -984,7 +984,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5129 11830 -1215;0 -87 0" } @@ -992,7 +992,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_cannon;enemy_base;5117 11922 -1215;0 -88 0" } @@ -1000,7 +1000,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5854 12348 -1215;0 -64 0" } @@ -1008,7 +1008,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5801 12407 -1215;0 -68 0" } @@ -1016,7 +1016,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5730 12468 -1215;0 -78 0" } @@ -1024,7 +1024,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5666 12518 -1215;0 -84 0" } @@ -1032,7 +1032,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5594 12550 -1215;0 -88 0" } @@ -1040,7 +1040,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5521 12571 -1215;0 -88 0" } @@ -1048,7 +1048,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5428 12581 -1215;0 -86 0" } @@ -1056,7 +1056,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5318 12572 -1215;0 -78 0" } @@ -1064,7 +1064,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5200 12540 -1215;0 -69 0" } @@ -1072,7 +1072,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5069 12484 -1215;0 -58 0" } @@ -1080,7 +1080,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4974 12414 -1215;0 -47 0" } @@ -1088,7 +1088,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4927 12342 -1215;0 -55 0" } @@ -1096,7 +1096,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5541 12211 -1215;0 -69 0" } @@ -1104,7 +1104,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5482 12212 -1215;0 -78 0" } @@ -1112,7 +1112,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5407 12193 -1215;0 -90 0" } @@ -1120,7 +1120,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5332 12187 -1215;0 -101 0" } @@ -1128,7 +1128,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5246 12179 -1215;0 -112 0" } @@ -1136,7 +1136,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5182 12179 -1215;0 -120 0" } @@ -1144,7 +1144,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_zap;enemy_base;5107 12185 -1215;0 -128 0" } @@ -1152,7 +1152,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5733 10630 -1215;0 68 0" } @@ -1160,7 +1160,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5224 10776 -1215;0 96 0" } @@ -1168,7 +1168,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4953 10645 -1215;0 111 0" } @@ -1176,7 +1176,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4954 10207 -1215;0 124 0" } @@ -1184,7 +1184,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4629 10089 -1215;0 148 0" } @@ -1192,7 +1192,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4566 9687 -1215;0 176 0" } @@ -1200,7 +1200,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4878 9588 -1215;0 -173 0" } @@ -1208,7 +1208,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5482 10851 -1215;0 83 0" } @@ -1216,7 +1216,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5298 10498 -1215;0 93 0" } @@ -1224,7 +1224,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5119 10224 -1215;0 111 0" } @@ -1232,7 +1232,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5521 10528 -1215;0 78 0" } @@ -1240,7 +1240,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5505 10260 -1215;0 75 0" } @@ -1248,7 +1248,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6066 10499 -1215;0 50 0" } @@ -1256,7 +1256,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5973 10169 -1215;0 40 0" } @@ -1264,7 +1264,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5990 9936 -1215;0 24 0" } @@ -1272,7 +1272,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6166 9731 -1215;0 6 0" } @@ -1280,7 +1280,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5839 10104 -1215;0 43 0" } @@ -1288,7 +1288,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5620 9969 -1215;0 50 0" } @@ -1296,7 +1296,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4777 9910 -1215;0 133 0" } @@ -1304,7 +1304,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4748 10282 -1215;0 121 0" } @@ -1312,7 +1312,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4897 10034 -1215;0 121 0" } @@ -1320,7 +1320,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4714 9820 -1215;0 140 0" } @@ -1328,7 +1328,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5106 9952 -1215;0 116 0" } @@ -1336,7 +1336,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4672 9033 -1215;0 -167 0" } @@ -1344,7 +1344,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5235 9081 -1215;0 -153 0" } @@ -1352,7 +1352,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5531 9060 -1215;0 -81 0" } @@ -1360,7 +1360,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5668 9240 -1215;0 8 0" } @@ -1368,7 +1368,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5963 9333 -1215;0 14 0" } @@ -1376,7 +1376,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5708 9600 -1215;0 62 0" } @@ -1384,7 +1384,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5297 9525 -1215;0 124 0" } @@ -1392,7 +1392,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5519 9913 -1215;0 88 0" } @@ -1400,7 +1400,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5339 10055 -1215;0 101 0" } @@ -1408,7 +1408,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5003 10908 -1215;0 128 0" } @@ -1416,7 +1416,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5350 11027 -1215;0 88 0" } @@ -1424,7 +1424,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3645 12753 -1215;0 -158 0" } @@ -1432,7 +1432,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3529 12957 -1215;0 -168 0" } @@ -1440,7 +1440,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3788 13050 -1215;0 -170 0" } @@ -1448,7 +1448,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3863 12835 -1215;0 -158 0" } @@ -1456,7 +1456,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4137 12743 -1215;0 -146 0" } @@ -1464,7 +1464,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4489 12597 -1215;0 -121 0" } @@ -1472,7 +1472,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4894 12669 -1215;0 -89 0" } @@ -1480,7 +1480,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5201 12786 -1215;0 -55 0" } @@ -1488,7 +1488,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5504 12807 -1215;0 -35 0" } @@ -1496,7 +1496,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5760 12819 -1215;0 -25 0" } @@ -1504,7 +1504,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5869 12906 -1215;0 -18 0" } @@ -1512,7 +1512,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6162 13004 -1215;0 -10 0" } @@ -1520,7 +1520,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6663 12728 -1215;0 -16 0" } @@ -1528,7 +1528,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6970 12760 -1215;0 -13 0" } @@ -1536,7 +1536,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7218 12937 -1215;0 -7 0" } @@ -1544,7 +1544,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6946 13312 -1215;0 1 0" } @@ -1552,7 +1552,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6412 13346 -1215;0 3 0" } @@ -1560,7 +1560,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6309 13636 -1215;0 15 0" } @@ -1568,7 +1568,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7022 13759 -1215;0 13 0" } @@ -1576,7 +1576,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6886 13782 -1215;0 15 0" } @@ -1584,7 +1584,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6115 13912 -1215;0 28 0" } @@ -1592,7 +1592,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6597 14410 -1215;0 34 0" } @@ -1600,7 +1600,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6977 14747 -1215;0 35 0" } @@ -1608,7 +1608,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6713 14744 -1215;0 39 0" } @@ -1616,7 +1616,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6438 14407 -1215;0 36 0" } @@ -1624,7 +1624,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5471 14858 -1215;0 70 0" } @@ -1632,7 +1632,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5085 14664 -1215;0 82 0" } @@ -1640,7 +1640,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5055 14232 -1215;0 80 0" } @@ -1648,7 +1648,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5205 14266 -1215;0 72 0" } @@ -1656,7 +1656,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5307 14621 -1215;0 73 0" } @@ -1664,7 +1664,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5291 14085 -1215;0 64 0" } @@ -1672,7 +1672,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5498 14301 -1215;0 60 0" } @@ -1680,7 +1680,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5703 14729 -1215;0 61 0" } @@ -1688,7 +1688,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6264 14718 -1215;0 46 0" } @@ -1696,7 +1696,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5822 14269 -1215;0 47 0" } @@ -1704,7 +1704,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5701 13941 -1215;0 40 0" } @@ -1712,7 +1712,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6403 14575 -1215;0 41 0" } @@ -1720,7 +1720,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6159 14188 -1215;0 36 0" } @@ -1728,7 +1728,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6459 14248 -1215;0 32 0" } @@ -1736,7 +1736,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4993 14652 -1215;0 85 0" } @@ -1744,7 +1744,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4889 14490 -1215;0 89 0" } @@ -1752,7 +1752,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4877 14220 -1215;0 90 0" } @@ -1760,7 +1760,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4543 13824 -1215;0 81 0" } @@ -1768,7 +1768,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4441 13776 -1215;0 66 0" } @@ -1776,7 +1776,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4325 13712 -1215;0 37 0" } @@ -1784,7 +1784,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4184 13670 -1215;0 25 0" } @@ -1792,7 +1792,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3928 13721 -1215;0 -6 0" } @@ -1800,7 +1800,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3942 13877 -1215;0 -17 0" } @@ -1808,7 +1808,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3982 14229 -1215;0 -19 0" } @@ -1816,7 +1816,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3847 14332 -1215;0 -65 0" } @@ -1824,7 +1824,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3841 14556 -1215;0 -107 0" } @@ -1832,7 +1832,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4169 14673 -1215;0 -98 0" } @@ -1840,7 +1840,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4403 14688 -1215;0 -96 0" } @@ -1848,7 +1848,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4598 14668 -1215;0 -115 0" } @@ -1856,7 +1856,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4094 14974 -1215;0 169 0" } @@ -1864,7 +1864,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3742 14863 -1215;0 167 0" } @@ -1872,7 +1872,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3494 14316 -1215;0 171 0" } @@ -1880,7 +1880,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3482 13987 -1215;0 175 0" } @@ -1888,7 +1888,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3377 13733 -1215;0 164 0" } @@ -1896,7 +1896,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3410 13505 -1215;0 173 0" } @@ -1904,7 +1904,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3548 13154 -1215;0 -166 0" } @@ -1912,7 +1912,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3771 13394 -1215;0 178 0" } @@ -1920,7 +1920,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3673 13641 -1215;0 161 0" } @@ -1928,7 +1928,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3911 13565 -1215;0 160 0" } @@ -1936,7 +1936,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;3893 13266 -1215;0 -168 0" } @@ -1944,7 +1944,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4209 13047 -1215;0 -125 0" } @@ -1952,7 +1952,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4476 13067 -1215;0 -84 0" } @@ -1960,7 +1960,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4585 13229 -1215;0 -47 0" } @@ -1968,7 +1968,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4691 13359 -1215;0 -4 0" } @@ -1976,7 +1976,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4785 13627 -1215;0 36 0" } @@ -1984,7 +1984,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5004 13794 -1215;0 36 0" } @@ -1992,7 +1992,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4999 13523 -1215;0 14 0" } @@ -2000,7 +2000,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5144 13297 -1215;0 -6 0" } @@ -2008,7 +2008,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5455 13620 -1215;0 13 0" } @@ -2016,7 +2016,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5329 13925 -1215;0 31 0" } @@ -2024,7 +2024,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5266 13674 -1215;0 52 0" } @@ -2032,7 +2032,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5519 13307 -1215;0 -3 0" } @@ -2040,7 +2040,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5977 13392 -1215;0 0 0" } @@ -2048,7 +2048,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5892 13183 -1215;0 -7 0" } @@ -2056,7 +2056,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5449 13084 -1215;0 -16 0" } @@ -2064,7 +2064,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7291 13559 -1215;0 10 0" } @@ -2072,7 +2072,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6939 13548 -1215;0 15 0" } @@ -2080,7 +2080,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7145 14510 -1215;0 72 0" } @@ -2088,7 +2088,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7121 14179 -1215;0 65 0" } @@ -2096,7 +2096,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7399 14131 -1215;0 45 0" } @@ -2104,7 +2104,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7458 13863 -1215;0 25 0" } @@ -2112,7 +2112,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7457 12501 -1215;0 -59 0" } @@ -2120,7 +2120,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7500 12838 -1215;0 -47 0" } @@ -2128,7 +2128,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7281 13145 -1215;0 -43 0" } @@ -2136,7 +2136,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;7142 12998 -1215;0 -62 0" } @@ -2144,7 +2144,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6941 12897 -1215;0 -81 0" } @@ -2152,7 +2152,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6852 12871 -1215;0 -52 0" } @@ -2160,7 +2160,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6811 13038 -1215;0 -47 0" } @@ -2168,7 +2168,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;6747 13257 -1215;0 -40 0" } @@ -2176,7 +2176,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4610 13027 -1215;0 -158 0" } @@ -2184,7 +2184,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4705 13172 -1215;0 -166 0" } @@ -2192,7 +2192,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4810 13271 -1215;0 -173 0" } @@ -2200,7 +2200,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;3282 12736 -1215;0 -152 0" } @@ -2208,7 +2208,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;3250 12862 -1215;0 -161 0" } @@ -2216,7 +2216,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;3253 13014 -1215;0 -172 0" } @@ -2224,7 +2224,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;3274 14404 -1215;0 123 0" } @@ -2232,7 +2232,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;3275 14271 -1215;0 130 0" } @@ -2240,7 +2240,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;3260 14173 -1215;0 139 0" } @@ -2248,7 +2248,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;3892 14906 -1215;0 89 0" } @@ -2256,7 +2256,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;3950 14791 -1215;0 83 0" } @@ -2264,7 +2264,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;4022 14689 -1215;0 72 0" } @@ -2272,7 +2272,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5378 14820 -1215;0 16 0" } @@ -2280,7 +2280,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5230 14817 -1215;0 19 0" } @@ -2288,7 +2288,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;5105 14834 -1215;0 26 0" } @@ -2296,7 +2296,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7367 14620 -1215;0 -1 0" } @@ -2304,7 +2304,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7296 14626 -1215;0 -0 0" } @@ -2312,7 +2312,7 @@ { "count" "0" "health" "200000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_arrow_tower;enemy_base;7211 14643 -1215;0 2 0" } @@ -2320,7 +2320,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6678 15072 -1215;0 88 0" } @@ -2328,7 +2328,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6656 15041 -1181;0 88 0" } @@ -2336,7 +2336,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6527 15075 -1215;0 88 0" } @@ -2344,7 +2344,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6358 15068 -1215;0 89 0" } @@ -2352,7 +2352,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6270 15056 -1215;0 92 0" } @@ -2360,7 +2360,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6166 15051 -1215;0 92 0" } @@ -2368,7 +2368,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;6059 15047 -1215;0 92 0" } @@ -2376,7 +2376,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5944 15042 -1215;0 92 0" } @@ -2384,7 +2384,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5859 15039 -1215;0 92 0" } @@ -2392,7 +2392,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5771 15035 -1215;0 92 0" } @@ -2400,7 +2400,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5685 15032 -1215;0 92 0" } @@ -2408,7 +2408,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5598 15030 -1215;0 89 0" } @@ -2416,7 +2416,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5512 15032 -1215;0 87 0" } @@ -2424,7 +2424,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5432 15034 -1215;0 87 0" } @@ -2432,7 +2432,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5310 15036 -1215;0 88 0" } @@ -2440,7 +2440,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5195 15040 -1215;0 88 0" } @@ -2448,7 +2448,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5094 15043 -1215;0 88 0" } @@ -2456,7 +2456,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;5032 15043 -1215;0 88 0" } @@ -2464,7 +2464,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4973 15044 -1215;0 88 0" } @@ -2472,7 +2472,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4942 15045 -1215;0 88 0" } @@ -2480,7 +2480,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4872 15046 -1215;0 88 0" } @@ -2488,7 +2488,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4806 15048 -1215;0 88 0" } @@ -2496,7 +2496,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4720 15049 -1215;0 88 0" } @@ -2504,7 +2504,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4654 15047 -1215;0 89 0" } @@ -2512,7 +2512,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4587 15047 -1215;0 89 0" } @@ -2520,7 +2520,7 @@ { "count" "0" "health" "100000" - "extra_damage" "0.7" + "extra_damage" "1.75" "plugin" "npc_const2_building_spawner" "data" "obj_const2_house;enemy_base;4548 15048 -1215;0 89 0" } diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/base_spawners/difficulty_4/variant_1.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/base_spawners/difficulty_4/variant_1.cfg index 68a4ded027..1ca886d497 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/base_spawners/difficulty_4/variant_1.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/base_spawners/difficulty_4/variant_1.cfg @@ -4,24 +4,38 @@ { "1.0" { - "count" "4" + "count" "2" "health" "30000" "extra_damage" "1.5" - "plugin" "npc_mechafist" + "plugin" "npc_protector" } "1.0" { - "count" "4" + "count" "2" + "health" "30000" + "extra_damage" "1.0" + "plugin" "npc_airraider" + } + "1.0" + { + "count" "2" + "health" "30000" + "extra_damage" "1.5" + "plugin" "npc_zapmarker" + } + "1.0" + { + "count" "2" "health" "50000" "extra_damage" "1.5" - "plugin" "npc_blocker" + "plugin" "npc_chemical_specialist" } "1.0" { "count" "2" "health" "90000" "extra_damage" "1.5" - "plugin" "npc_payback" + "plugin" "npc_demolitionist" } } "Freeplay" diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/base_spawners/difficulty_4/variant_2.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/base_spawners/difficulty_4/variant_2.cfg index e4836e431c..618463079f 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/base_spawners/difficulty_4/variant_2.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/base_spawners/difficulty_4/variant_2.cfg @@ -18,11 +18,18 @@ } "1.0" { - "count" "4" + "count" "2" "health" "30000" "extra_damage" "1.0" "plugin" "npc_scorcher" } + "1.0" + { + "count" "2" + "health" "30000" + "extra_damage" "1.0" + "plugin" "npc_resource_collector" + } } "Freeplay" { diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/base_spawners/difficulty_4/variant_3.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/base_spawners/difficulty_4/variant_3.cfg index 171715bd17..35bdd0d175 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/base_spawners/difficulty_4/variant_3.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/base_spawners/difficulty_4/variant_3.cfg @@ -7,21 +7,21 @@ "count" "4" "health" "30000" "extra_damage" "1.5" - "plugin" "npc_mechafist" + "plugin" "npc_resource_collector" } "1.0" { "count" "4" - "health" "50000" - "extra_damage" "1.5" - "plugin" "npc_blocker" + "health" "40000" + "extra_damage" "1.0" + "plugin" "npc_airraider" } "1.0" { - "count" "2" - "health" "90000" + "count" "1" + "health" "100000" "extra_damage" "1.5" - "plugin" "npc_payback" + "plugin" "npc_giant_armored_medic" } "1.0" { @@ -42,28 +42,29 @@ "count" "4" "health" "30000" "extra_damage" "1.0" - "plugin" "npc_scorcher" + "plugin" "npc_zapmarker" } "1.0" { "count" "4" "health" "30000" "extra_damage" "1.5" - "plugin" "npc_mechafist" + "plugin" "npc_resource_collector" + } "1.0" { "count" "4" "health" "50000" "extra_damage" "1.5" - "plugin" "npc_blocker" + "plugin" "npc_zapmarker" } "1.0" { "count" "2" "health" "90000" "extra_damage" "1.5" - "plugin" "npc_payback" + "plugin" "npc_demolitionist" } "1.0" { @@ -84,14 +85,14 @@ "count" "4" "health" "30000" "extra_damage" "1.0" - "plugin" "npc_scorcher" + "plugin" "npc_protector" } "1.0" { - "count" "4" - "health" "30000" - "extra_damage" "1.5" - "plugin" "npc_mechafist" + "count" "2" + "health" "20000" + "extra_damage" "1.0" + "plugin" "npc_headhunter" } "1.0" { @@ -104,16 +105,17 @@ "1.0" { "count" "4" - "health" "50000" + "health" "124000" "extra_damage" "1.5" - "plugin" "npc_blocker" + "plugin" "npc_demolitionist" } "1.0" { "count" "2" "health" "90000" "extra_damage" "1.5" - "plugin" "npc_payback" + "data" "only" + "plugin" "npc_avangard" } "1.0" { @@ -127,14 +129,14 @@ "count" "2" "health" "120000" "extra_damage" "1.25" - "plugin" "npc_mowdown" + "plugin" "npc_giant_armored_medic" } "1.0" { "count" "4" "health" "30000" "extra_damage" "1.0" - "plugin" "npc_scorcher" + "plugin" "npc_protector" } } "Freeplay" diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/final_expidonsa.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/final_expidonsa.cfg index cc37dca45e..e963f748b9 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/final_expidonsa.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/final_expidonsa.cfg @@ -1,7 +1,5 @@ "Waves" { - "complete_item" "Foreign Expidonsan Chip" - "1" { "0.11" @@ -235,22 +233,12 @@ } "4" { - "music_1" - { - "file" "#zombiesurvival/construct/bat_prtsstage2.mp3" - "time" "220" - "download" "1" - "volume" "1.6" - "name" "bat_prtsstage2" - "author" "Arknights OST" - } - "setup" "30" "0.5" // a little teeny tiny time. { "count" "0" - "health" "8000000" + "health" "16000000" "is_boss" "3" "is_immune_to_nuke" "1" "is_health_scaling" "1" diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/final_space.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/final_space.cfg index 9f9745dee0..4fa31e4699 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/final_space.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/final_space.cfg @@ -1,7 +1,5 @@ "Waves" { - "complete_item" "Almagest Data Card" - "1" { diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/raid_1_1.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/raid_1_1.cfg index 3a59fa5054..2534dbc9b9 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/raid_1_1.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/raid_1_1.cfg @@ -16,7 +16,7 @@ "author" "Galaxy On Fire 2" } - "1.5" + "1.1" { "count" "5" "health" "4000" @@ -24,7 +24,7 @@ "plugin" "npc_medival_militia" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "9000" @@ -32,7 +32,7 @@ "plugin" "npc_contracted_motivator" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "3000" @@ -40,7 +40,7 @@ "plugin" "npc_medival_archer" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "4000" @@ -48,7 +48,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "3000" @@ -56,7 +56,7 @@ "plugin" "npc_medival_eagle_scout" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "4000" @@ -64,7 +64,7 @@ "plugin" "npc_medival_spearmen" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "3000" @@ -72,7 +72,7 @@ "plugin" "npc_medival_eagle_scout" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "4000" @@ -80,7 +80,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "1" "health" "4000" @@ -88,7 +88,7 @@ "plugin" "npc_catapult" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "10" "health" "4000" @@ -96,7 +96,7 @@ "plugin" "npc_medival_militia" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "11" "health" "3000" @@ -104,7 +104,7 @@ "plugin" "npc_medival_archer" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "10" "health" "4000" @@ -112,7 +112,7 @@ "plugin" "npc_medival_militia" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "3000" @@ -120,7 +120,7 @@ "plugin" "npc_medival_scout" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "3000" @@ -128,7 +128,7 @@ "plugin" "npc_demon_devoter" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "1" "health" "30000" @@ -137,7 +137,7 @@ "plugin" "npc_medival_construct" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "3000" @@ -145,7 +145,7 @@ "plugin" "npc_medival_eagle_scout" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "1" "health" "9000" @@ -153,7 +153,7 @@ "plugin" "npc_battlefield_supplier" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "10" "health" "6000" @@ -161,7 +161,7 @@ "plugin" "npc_medival_man_at_arms" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "11" "health" "3000" @@ -169,7 +169,7 @@ "plugin" "npc_medival_crossbow" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "4000" @@ -177,7 +177,7 @@ "plugin" "npc_medival_spearmen" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "1" "health" "4000" @@ -185,7 +185,7 @@ "plugin" "npc_catapult" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "9000" diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/raid_1_2.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/raid_1_2.cfg index 199adcd381..6768e807ce 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/raid_1_2.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/raid_1_2.cfg @@ -16,7 +16,7 @@ "author" "Galaxy On Fire 2" } - "1.5" + "1.1" { "count" "5" "health" "3500" @@ -24,7 +24,7 @@ "plugin" "npc_alt_mecha_scout" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "4000" @@ -32,7 +32,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "4000" @@ -40,7 +40,7 @@ "plugin" "npc_alt_medic_charger" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "8000" @@ -48,7 +48,7 @@ "plugin" "npc_alt_mecha_heavy" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "1" "health" "4000" @@ -56,7 +56,7 @@ "plugin" "npc_catapult" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "4000" @@ -64,7 +64,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "4000" @@ -72,7 +72,7 @@ "plugin" "npc_alt_mecha_soldier_barrager" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "3000" @@ -80,7 +80,7 @@ "plugin" "npc_demon_devoter" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "0" "is_boss" "1" @@ -90,7 +90,7 @@ "plugin" "npc_alt_schwertkrieg" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "5000" @@ -98,7 +98,7 @@ "plugin" "npc_agent_61" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "7" "health" "3000" @@ -106,7 +106,7 @@ "plugin" "npc_flying_armor" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "12000" @@ -114,7 +114,7 @@ "plugin" "npc_alt_mecha_heavy_giant" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "4000" @@ -122,7 +122,7 @@ "plugin" "npc_alt_medic_berserker" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "3500" @@ -130,7 +130,7 @@ "plugin" "npc_alt_mecha_scout" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "4500" @@ -138,7 +138,7 @@ "plugin" "npc_alt_mecha_engineer" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "9000" @@ -146,7 +146,7 @@ "plugin" "npc_alt_medic_supperior_mage" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "4000" @@ -154,7 +154,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "4000" @@ -162,7 +162,7 @@ "plugin" "npc_alt_medic_charger" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "8000" @@ -170,7 +170,7 @@ "plugin" "npc_alt_mecha_heavy" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "3000" @@ -178,7 +178,7 @@ "plugin" "npc_demon_devoter" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "4000" @@ -186,7 +186,7 @@ "plugin" "npc_alt_mecha_soldier_barrager" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "7" "health" "3000" @@ -194,7 +194,7 @@ "plugin" "npc_flying_armor" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "14000" @@ -202,7 +202,7 @@ "plugin" "npc_alt_mecha_pyro_giant" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "1" "health" "4000" diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/raid_2_1.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/raid_2_1.cfg index 43e43c5cf1..8be30b321a 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/raid_2_1.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/raid_2_1.cfg @@ -16,7 +16,7 @@ "author" "Galaxy On Fire 2" } - "1.5" + "1.1" { "count" "5" "health" "9000" @@ -24,7 +24,7 @@ "plugin" "npc_vivintu" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "60000" @@ -32,7 +32,7 @@ "plugin" "npc_demon_possesed_armor" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "10000" @@ -40,7 +40,7 @@ "plugin" "npc_agent_61" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "9000" @@ -48,7 +48,7 @@ "plugin" "npc_kumbai" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "9000" @@ -56,7 +56,7 @@ "plugin" "npc_cenula" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "40000" @@ -64,7 +64,7 @@ "plugin" "npc_combastia" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "19000" @@ -72,7 +72,7 @@ "plugin" "npc_contracted_motivator" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "9000" @@ -80,7 +80,7 @@ "plugin" "npc_iberia_morato" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "12000" @@ -88,7 +88,7 @@ "extra_thinkspeed" "0.5" "plugin" "npc_sea_xploder" } - "1.5" + "1.1" { "count" "2" "health" "20000" @@ -96,7 +96,7 @@ "plugin" "npc_catapult" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "16000" @@ -104,7 +104,7 @@ "plugin" "npc_battlefield_supplier" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "9000" @@ -113,7 +113,7 @@ "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "9000" @@ -121,7 +121,7 @@ "plugin" "npc_vivintu" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "9000" @@ -129,7 +129,7 @@ "plugin" "npc_kumbai" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "9000" @@ -137,7 +137,7 @@ "plugin" "npc_cenula" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "10000" @@ -145,7 +145,7 @@ "plugin" "npc_agent_61" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "20000" @@ -153,7 +153,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "40000" @@ -161,7 +161,7 @@ "plugin" "npc_combastia" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "9000" @@ -169,7 +169,7 @@ "plugin" "npc_iberia_morato" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "1" "health" "115000" @@ -178,7 +178,7 @@ "plugin" "npc_anti_sea_robot" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "19000" @@ -186,7 +186,7 @@ "plugin" "npc_contracted_motivator" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "12000" @@ -194,7 +194,7 @@ "extra_thinkspeed" "0.5" "plugin" "npc_sea_xploder" } - "1.5" + "1.1" { "count" "3" "health" "9000" @@ -203,7 +203,7 @@ "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "9000" @@ -211,7 +211,7 @@ "plugin" "npc_vivintu" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "9000" @@ -219,7 +219,7 @@ "plugin" "npc_kumbai" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "20000" @@ -227,7 +227,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "10000" @@ -235,7 +235,7 @@ "plugin" "npc_agent_61" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "20000" @@ -243,7 +243,7 @@ "plugin" "npc_catapult" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "9000" @@ -251,7 +251,7 @@ "plugin" "npc_cenula" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "40000" @@ -259,7 +259,7 @@ "plugin" "npc_combastia" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "60000" @@ -267,7 +267,7 @@ "plugin" "npc_demon_possesed_armor" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "9000" @@ -275,7 +275,7 @@ "plugin" "npc_iberia_morato" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "12000" diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/raid_2_2.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/raid_2_2.cfg index 1be932fe54..e012fa33cf 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/raid_2_2.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/raid_2_2.cfg @@ -15,6 +15,7 @@ "2" { "give_rogue_artifact" "Xeno Resurgance" + "music_1" { "file" "#zombiesurvival/dungeon/raid_attack_2.mp3" @@ -27,7 +28,7 @@ //can only be used in: Rogue, construction - "1.5" + "1.1" { "count" "4" "health" "15000" @@ -35,7 +36,7 @@ "plugin" "npc_xeno_poisonzombie_fortified" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "6" "health" "11000" @@ -43,7 +44,7 @@ "plugin" "npc_xeno_headcrabzombie_fortified" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "7000" @@ -51,7 +52,7 @@ "plugin" "npc_xeno_fastzombie_fortified" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "12500" @@ -59,7 +60,7 @@ "plugin" "npc_xeno_combine_police_pistol" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "35000" @@ -67,7 +68,7 @@ "plugin" "npc_xeno_poisonzombie_fortified_giant" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "8000" @@ -75,7 +76,7 @@ "plugin" "npc_xeno_combine_soldier_swordsman_ddt" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "20000" @@ -83,7 +84,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "19000" @@ -91,7 +92,7 @@ "plugin" "npc_skilled_crossbowman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "12500" @@ -99,7 +100,7 @@ "plugin" "npc_xeno_acclaimed_swordsman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "15000" @@ -107,7 +108,7 @@ "plugin" "npc_xeno_medic_healer" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "11000" @@ -116,7 +117,7 @@ "plugin" "npc_xeno_combine_soldier_elite" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "11000" @@ -125,7 +126,7 @@ "plugin" "npc_xeno_combine_soldier_ar2" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "35000" @@ -133,7 +134,7 @@ "plugin" "npc_xeno_combine_soldier_giant_swordsman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "15000" @@ -141,7 +142,7 @@ "plugin" "npc_xeno_poisonzombie_fortified" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "6" "health" "11000" @@ -149,7 +150,7 @@ "plugin" "npc_xeno_headcrabzombie_fortified" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "7000" @@ -157,7 +158,7 @@ "plugin" "npc_xeno_fastzombie_fortified" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "12500" @@ -165,7 +166,7 @@ "plugin" "npc_xeno_combine_police_pistol" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "35000" @@ -173,7 +174,7 @@ "plugin" "npc_xeno_poisonzombie_fortified_giant" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "8000" @@ -181,7 +182,7 @@ "plugin" "npc_xeno_combine_soldier_swordsman_ddt" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "12500" @@ -189,7 +190,7 @@ "plugin" "npc_xeno_acclaimed_swordsman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "60000" @@ -197,7 +198,7 @@ "plugin" "npc_demon_possesed_armor" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "20000" @@ -205,7 +206,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "15000" @@ -213,7 +214,7 @@ "plugin" "npc_xeno_medic_healer" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "20000" @@ -221,7 +222,7 @@ "plugin" "npc_catapult" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "11000" @@ -230,7 +231,7 @@ "plugin" "npc_xeno_combine_soldier_elite" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "11000" @@ -239,7 +240,7 @@ "plugin" "npc_xeno_combine_soldier_ar2" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "35000" @@ -247,7 +248,7 @@ "plugin" "npc_xeno_combine_soldier_giant_swordsman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "15000" @@ -255,7 +256,7 @@ "plugin" "npc_xeno_poisonzombie_fortified" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "6" "health" "11000" @@ -263,7 +264,7 @@ "plugin" "npc_xeno_headcrabzombie_fortified" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "19000" @@ -271,7 +272,7 @@ "plugin" "npc_skilled_crossbowman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "7000" @@ -279,7 +280,7 @@ "plugin" "npc_xeno_fastzombie_fortified" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "12500" @@ -287,7 +288,7 @@ "plugin" "npc_xeno_combine_police_pistol" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "20000" @@ -295,7 +296,7 @@ "plugin" "npc_catapult" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "35000" @@ -303,7 +304,7 @@ "plugin" "npc_xeno_poisonzombie_fortified_giant" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "8000" @@ -311,7 +312,7 @@ "plugin" "npc_xeno_combine_soldier_swordsman_ddt" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "12500" @@ -319,7 +320,7 @@ "plugin" "npc_xeno_acclaimed_swordsman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "15000" @@ -327,7 +328,7 @@ "plugin" "npc_xeno_medic_healer" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "20000" @@ -335,7 +336,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "11000" @@ -344,7 +345,7 @@ "plugin" "npc_xeno_combine_soldier_elite" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "11000" diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_1.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_1.cfg index adbdbcc9a9..bf4425c382 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_1.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_1.cfg @@ -16,7 +16,7 @@ "author" "Galaxy On Fire 2" } - "1.5" + "1.1" { "count" "5" "health" "30000" @@ -24,7 +24,7 @@ "plugin" "npc_medival_twohanded_swordsman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "30000" @@ -32,7 +32,7 @@ "plugin" "npc_medival_twohanded_swordsman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "60000" @@ -40,7 +40,7 @@ "plugin" "npc_medival_hussar" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "8" "health" "50000" @@ -48,7 +48,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "100000" @@ -56,7 +56,7 @@ "plugin" "npc_medival_crossbow_giant" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "30000" @@ -64,7 +64,7 @@ "plugin" "npc_medival_samurai" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "30000" @@ -72,17 +72,17 @@ "plugin" "npc_medival_knight" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "0" "health" "3500000" "is_boss" "1" - "extra_damage" "1.5" + "extra_damage" "2.5" "extra_speed" "0.75" "plugin" "npc_the_great_ram" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "20000" @@ -90,7 +90,7 @@ "plugin" "npc_medival_eagle_warrior" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "30000" @@ -98,7 +98,7 @@ "plugin" "npc_medival_obuch" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "20000" @@ -106,7 +106,7 @@ "plugin" "npc_medival_longbowmen" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "15000" @@ -114,7 +114,7 @@ "plugin" "npc_chaos_blade_thrower" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "20000" @@ -122,7 +122,7 @@ "plugin" "npc_medival_elite_skirmisher" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "1" "health" "50000" @@ -131,7 +131,7 @@ "data" "npc_combine_soldier_deutsch_ritter" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "100000" @@ -139,7 +139,7 @@ "plugin" "npc_medival_swordsman_giant" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "30000" @@ -147,7 +147,7 @@ "plugin" "npc_agent_61" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "50000" @@ -155,7 +155,7 @@ "plugin" "npc_skilled_crossbowman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "8" "health" "50000" @@ -163,7 +163,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "20000" @@ -171,7 +171,7 @@ "plugin" "npc_medival_pikeman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "60000" @@ -179,7 +179,7 @@ "plugin" "npc_medival_hussar" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "100000" @@ -187,7 +187,7 @@ "plugin" "npc_medival_crossbow_giant" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "30000" @@ -195,7 +195,7 @@ "plugin" "npc_medival_knight" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "20000" @@ -203,7 +203,7 @@ "plugin" "npc_medival_eagle_warrior" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "50000" @@ -211,7 +211,7 @@ "plugin" "npc_demon_devoter" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "30000" @@ -219,7 +219,7 @@ "plugin" "npc_medival_obuch" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "30000" @@ -227,7 +227,7 @@ "plugin" "npc_agent_61" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "15000" @@ -235,7 +235,7 @@ "plugin" "npc_chaos_blade_thrower" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "20000" @@ -243,7 +243,7 @@ "plugin" "npc_medival_longbowmen" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "30000" @@ -251,7 +251,7 @@ "plugin" "npc_medival_samurai" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "20000" @@ -259,7 +259,7 @@ "plugin" "npc_medival_elite_skirmisher" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "100000" @@ -267,7 +267,7 @@ "plugin" "npc_medival_swordsman_giant" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "30000" @@ -275,7 +275,7 @@ "plugin" "npc_medival_twohanded_swordsman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "20000" @@ -283,7 +283,7 @@ "plugin" "npc_medival_pikeman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "1" "health" "50000" @@ -292,7 +292,7 @@ "data" "npc_combine_soldier_deutsch_ritter" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "60000" @@ -300,7 +300,7 @@ "plugin" "npc_medival_hussar" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "60000" @@ -308,7 +308,7 @@ "plugin" "npc_catapult" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "100000" @@ -316,7 +316,7 @@ "plugin" "npc_medival_crossbow_giant" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "15000" @@ -324,7 +324,7 @@ "plugin" "npc_chaos_blade_thrower" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "30000" @@ -332,7 +332,7 @@ "plugin" "npc_medival_knight" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "20000" @@ -340,7 +340,7 @@ "plugin" "npc_medival_eagle_warrior" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "50000" @@ -348,7 +348,7 @@ "plugin" "npc_demon_devoter" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "50000" @@ -356,7 +356,7 @@ "plugin" "npc_skilled_crossbowman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "30000" @@ -364,7 +364,7 @@ "plugin" "npc_medival_samurai" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "30000" @@ -372,7 +372,7 @@ "plugin" "npc_medival_obuch" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "20000" @@ -380,7 +380,7 @@ "plugin" "npc_medival_longbowmen" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "20000" diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_2.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_2.cfg index 64e6668ac2..6933fe8abd 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_2.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_2.cfg @@ -15,7 +15,7 @@ "name" "Stealth Blades" "author" "Galaxy On Fire 2" } - "1.5" + "1.1" { "count" "6" "health" "30000" @@ -23,7 +23,7 @@ "plugin" "npc_zombie_scout_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "15000" @@ -31,7 +31,7 @@ "plugin" "npc_chaos_gunmen" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "50000" @@ -39,7 +39,7 @@ "plugin" "npc_contracted_motivator" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "70000" @@ -48,7 +48,7 @@ "plugin" "npc_zombie_engineer_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "6" "health" "50000" @@ -56,7 +56,7 @@ "plugin" "npc_zombie_heavy_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "10000" @@ -64,7 +64,7 @@ "plugin" "npc_chaos_swordsman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "20000" @@ -73,7 +73,7 @@ "plugin" "npc_zombie_soldier_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "20000" @@ -81,7 +81,7 @@ "plugin" "npc_inabdil" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "1" "health" "10000" @@ -89,7 +89,7 @@ "plugin" "npc_qanaas" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "25000" @@ -98,7 +98,7 @@ "plugin" "npc_medic_healer" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "30000" @@ -106,7 +106,7 @@ "plugin" "npc_agent_61" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "250000" @@ -114,7 +114,7 @@ "plugin" "npc_zombie_heavy_giant_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "15000" @@ -122,7 +122,7 @@ "plugin" "npc_chaos_gunmen" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "60000" @@ -130,7 +130,7 @@ "plugin" "npc_catapult" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "9000" @@ -138,7 +138,7 @@ "plugin" "npc_chaos_supporter" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "50000" @@ -147,7 +147,7 @@ "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "6" "health" "30000" @@ -155,7 +155,7 @@ "plugin" "npc_zombie_scout_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "70000" @@ -164,7 +164,7 @@ "plugin" "npc_zombie_engineer_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "8" "health" "50000" @@ -172,7 +172,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "6" "health" "50000" @@ -180,7 +180,7 @@ "plugin" "npc_zombie_heavy_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "10000" @@ -188,7 +188,7 @@ "plugin" "npc_chaos_swordsman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "20000" @@ -197,17 +197,17 @@ "plugin" "npc_zombie_soldier_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "0" "health" "1200000" "is_boss" "1" - "extra_damage" "1.0" + "extra_damage" "1.15" "extra_speed" "0.8" "plugin" "npc_cursed_king" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "20000" @@ -215,7 +215,7 @@ "plugin" "npc_inabdil" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "1" "health" "10000" @@ -223,7 +223,7 @@ "plugin" "npc_qanaas" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "150000" @@ -231,7 +231,7 @@ "plugin" "npc_demon_possesed_armor" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "25000" @@ -240,7 +240,7 @@ "plugin" "npc_medic_healer" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "250000" @@ -248,7 +248,7 @@ "plugin" "npc_zombie_heavy_giant_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "9000" @@ -256,7 +256,7 @@ "plugin" "npc_chaos_supporter" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "8" "health" "50000" @@ -264,7 +264,7 @@ "plugin" "npc_barbaric_teardown" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "15000" @@ -272,7 +272,7 @@ "plugin" "npc_chaos_gunmen" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "6" "health" "30000" @@ -280,7 +280,7 @@ "plugin" "npc_zombie_scout_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "70000" @@ -289,7 +289,7 @@ "plugin" "npc_zombie_engineer_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "6" "health" "50000" @@ -297,7 +297,7 @@ "plugin" "npc_zombie_heavy_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "60000" @@ -305,7 +305,7 @@ "plugin" "npc_catapult" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "10000" @@ -313,7 +313,7 @@ "plugin" "npc_chaos_swordsman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "30000" @@ -321,7 +321,7 @@ "plugin" "npc_agent_61" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "20000" @@ -330,7 +330,7 @@ "plugin" "npc_zombie_soldier_grave" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "20000" @@ -338,7 +338,7 @@ "plugin" "npc_inabdil" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "150000" @@ -346,7 +346,7 @@ "plugin" "npc_demon_possesed_armor" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "1" "health" "10000" @@ -354,7 +354,7 @@ "plugin" "npc_qanaas" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "50000" @@ -362,7 +362,7 @@ "plugin" "npc_contracted_motivator" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "25000" @@ -371,7 +371,7 @@ "plugin" "npc_medic_healer" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "50000" @@ -379,7 +379,7 @@ "plugin" "npc_contracted_motivator" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "250000" diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_3.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_3.cfg index 362efa4a4e..7d1a1b0157 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_3.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_3.cfg @@ -16,7 +16,7 @@ "author" "Galaxy On Fire 2" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_ransacker" @@ -24,7 +24,7 @@ "extra_damage" "1.2" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "plugin" "npc_aperture_repulsor_v2" @@ -32,7 +32,7 @@ "extra_damage" "1.2" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "50000" @@ -40,7 +40,7 @@ "plugin" "npc_skilled_crossbowman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "15000" @@ -48,7 +48,7 @@ "plugin" "npc_chaos_fencer" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_alt_mecha_soldier_barrager" @@ -57,7 +57,7 @@ "extra_thinkspeed" "0.65" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_braindead" @@ -65,7 +65,7 @@ "extra_damage" "1.5" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "50000" @@ -73,7 +73,7 @@ "plugin" "npc_demon_devoter" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_aperture_huntsman_perfected" @@ -81,7 +81,7 @@ "extra_damage" "1.0" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "plugin" "npc_aperture_specialist_perfected" @@ -89,7 +89,7 @@ "extra_damage" "1.0" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "plugin" "npc_mad_doctor" @@ -97,7 +97,7 @@ "extra_damage" "1.35" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "plugin" "npc_absolute_incinirator" @@ -105,7 +105,7 @@ "extra_damage" "1.5" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_alt_mecha_scout" @@ -113,7 +113,7 @@ "extra_damage" "1.65" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "plugin" "npc_aperture_supporter" @@ -121,7 +121,7 @@ "extra_damage" "1.0" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_medival_brawler" @@ -129,7 +129,7 @@ "extra_damage" "1.25" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "15000" @@ -137,7 +137,7 @@ "plugin" "npc_chaos_fencer" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "plugin" "npc_aperture_minigunner_v2" @@ -145,7 +145,7 @@ "extra_damage" "1.15" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "plugin" "npc_behemoth" @@ -153,7 +153,7 @@ "extra_damage" "1.0" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "plugin" "npc_aperture_supporter" @@ -161,7 +161,7 @@ "extra_damage" "1.0" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_ransacker" @@ -169,7 +169,7 @@ "extra_damage" "1.2" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "60000" @@ -177,7 +177,7 @@ "plugin" "npc_catapult" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "health" "50000" @@ -185,7 +185,7 @@ "plugin" "npc_demon_devoter" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "plugin" "npc_aperture_repulsor_v2" @@ -193,7 +193,7 @@ "extra_damage" "1.2" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_alt_mecha_soldier_barrager" @@ -202,7 +202,7 @@ "extra_thinkspeed" "0.65" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_braindead" @@ -210,7 +210,7 @@ "extra_damage" "1.5" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_aperture_huntsman_perfected" @@ -218,16 +218,16 @@ "extra_damage" "1.0" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "0" - "health" "1000000" + "health" "1500000" "is_boss" "1" "extra_damage" "1.0" "plugin" "npc_behemoth_behemoth" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "plugin" "npc_aperture_specialist_perfected" @@ -235,7 +235,7 @@ "extra_damage" "1.0" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "plugin" "npc_mad_doctor" @@ -243,7 +243,7 @@ "extra_damage" "1.35" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "25000" @@ -251,7 +251,7 @@ "plugin" "npc_battlefield_supplier" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "plugin" "npc_absolute_incinirator" @@ -259,7 +259,7 @@ "extra_damage" "1.5" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_alt_mecha_scout" @@ -267,7 +267,7 @@ "extra_damage" "1.65" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "plugin" "npc_aperture_supporter" @@ -275,7 +275,7 @@ "extra_damage" "1.0" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_medival_brawler" @@ -283,7 +283,7 @@ "extra_damage" "1.25" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "plugin" "npc_aperture_minigunner_v2" @@ -291,7 +291,7 @@ "extra_damage" "1.15" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "plugin" "npc_behemoth" @@ -299,7 +299,7 @@ "extra_damage" "1.0" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "plugin" "npc_aperture_supporter" @@ -307,7 +307,7 @@ "extra_damage" "1.0" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "health" "25000" @@ -315,7 +315,7 @@ "plugin" "npc_battlefield_supplier" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_ransacker" @@ -323,7 +323,7 @@ "extra_damage" "1.2" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "plugin" "npc_aperture_repulsor_v2" @@ -331,7 +331,7 @@ "extra_damage" "1.2" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_alt_mecha_soldier_barrager" @@ -340,7 +340,7 @@ "extra_thinkspeed" "0.65" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_braindead" @@ -348,7 +348,7 @@ "extra_damage" "1.5" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_aperture_huntsman_perfected" @@ -356,14 +356,14 @@ "extra_damage" "1.0" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "plugin" "npc_aperture_specialist_perfected" "health" "15000" "extra_damage" "1.0" } - "1.5" + "1.1" { "count" "4" "plugin" "npc_mad_doctor" @@ -371,7 +371,7 @@ "extra_damage" "1.35" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "health" "15000" @@ -379,7 +379,7 @@ "plugin" "npc_chaos_fencer" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "health" "50000" @@ -387,7 +387,7 @@ "plugin" "npc_skilled_crossbowman" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "plugin" "npc_absolute_incinirator" @@ -395,7 +395,7 @@ "extra_damage" "1.5" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_alt_mecha_scout" @@ -403,7 +403,7 @@ "extra_damage" "1.65" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "3" "plugin" "npc_aperture_supporter" @@ -411,7 +411,7 @@ "extra_damage" "1.0" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "5" "plugin" "npc_medival_brawler" @@ -419,7 +419,7 @@ "extra_damage" "1.25" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "4" "plugin" "npc_aperture_minigunner_v2" @@ -427,7 +427,7 @@ "extra_damage" "1.15" "spawn" "home_attackerspawn" } - "1.5" + "1.1" { "count" "2" "plugin" "npc_behemoth" diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_4.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_4.cfg new file mode 100644 index 0000000000..ad7f8c15c5 --- /dev/null +++ b/addons/sourcemod/configs/zombie_riot/dungeon/raid_3_4.cfg @@ -0,0 +1,445 @@ +"Waves" +{ + "1" + { + + } + "2" + { + "music_1" + { + "file" "#zombiesurvival/dungeon/raid_attack_3.mp3" + "time" "72" + "volume" "1.4" + "download" "1" + "name" "Stealth Blades" + "author" "Galaxy On Fire 2" + } + + "1.1" + { + "count" "3" + "health" "30000" + "extra_damage" "3.0" + "plugin" "npc_blocker" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "25000" + "extra_damage" "3.0" + "plugin" "npc_resource_collector" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "15000" + "extra_damage" "1.0" + "plugin" "npc_chaos_gunmen" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "4" + "health" "50000" + "extra_damage" "2.0" + "plugin" "npc_contracted_motivator" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "50000" + "extra_damage" "2.0" + "extra_speed" "1.0" + "plugin" "npc_mechafist" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "30000" + "extra_damage" "1.0" + "plugin" "npc_headhunter" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "50000" + "extra_damage" "1.35" + "plugin" "npc_ambusher" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "55000" + "extra_damage" "1.0" + "plugin" "npc_mortar" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "250000" + "extra_damage" "1.75" + "extra_thinkspeed" "0.5" + "data" "only" + "plugin" "npc_avangard" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "45000" + "extra_damage" "1.0" + "plugin" "npc_chemical_specialist" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "40000" + "extra_damage" "1.25" + "plugin" "npc_zapmarker" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "25000" + "extra_damage" "1.35" + "plugin" "npc_hardener" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "30000" + "extra_damage" "2.0" + "plugin" "npc_agent_61" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "55000" + "extra_damage" "1.5" + "plugin" "npc_mortar" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "15000" + "extra_damage" "1.0" + "plugin" "npc_chaos_gunmen" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "60000" + "extra_damage" "2.0" + "plugin" "npc_catapult" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "35000" + "extra_damage" "1.0" + "plugin" "npc_airraider" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "4" + "health" "55000" + "extra_damage" "4.0" + "plugin" "npc_antiarmor_infantry" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "30000" + "extra_damage" "1.0" + "plugin" "npc_protector" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "40000" + "extra_damage" "1.5" + "extra_speed" "1.15" + "plugin" "npc_tanker" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "8" + "health" "50000" + "extra_damage" "3.0" + "plugin" "npc_barbaric_teardown" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "75000" + "extra_damage" "1.35" + "plugin" "npc_giant_armored_medic" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "35000" + "extra_damage" "1.25" + "plugin" "npc_taser" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "40000" + "extra_damage" "2.5" + "plugin" "npc_victorian_artillerist" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "200000" + "extra_damage" "2.00" + "plugin" "npc_ironshield" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "0" + "health" "2000000" + "is_boss" "1" + "extra_damage" "1.25" + "plugin" "npc_gasleader" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "0" + "health" "90000" + "extra_damage" "1.75" + "plugin" "npc_signaller" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "4" + "health" "35000" + "extra_damage" "1.0" + "plugin" "npc_airraider" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "30000" + "extra_damage" "1.0" + "plugin" "npc_headhunter" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "150000" + "extra_damage" "1.35" + "plugin" "npc_demon_possesed_armor" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "25000" + "extra_damage" "2.00" + "plugin" "npc_hardener" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "275000" + "extra_damage" "1.5" + "plugin" "npc_demolitionist" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "35000" + "extra_damage" "1.25" + "plugin" "npc_protector" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "8" + "health" "50000" + "extra_damage" "3.0" + "plugin" "npc_barbaric_teardown" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "50000" + "extra_damage" "4.0" + "plugin" "npc_supplier" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "25000" + "extra_damage" "1.25" + "plugin" "npc_resource_collector" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "32500" + "extra_damage" "2.2" + "plugin" "npc_victorian_artillerist" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "1" + "health" "75000" + "extra_damage" "1.25" + "plugin" "npc_victorian_tank" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "45000" + "extra_damage" "1.35" + "plugin" "npc_chemical_specialist" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "40000" + "extra_damage" "1.35" + "plugin" "npc_zapmarker" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "60000" + "extra_damage" "2.0" + "plugin" "npc_catapult" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "75000" + "extra_damage" "1.0" + "plugin" "npc_giant_armored_medic" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "30000" + "extra_damage" "2.0" + "plugin" "npc_agent_61" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "0" + "health" "90000" + "extra_damage" "1.75" + "plugin" "npc_signaller" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "4" + "health" "35000" + "extra_damage" "1.5" + "plugin" "npc_ambusher" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "150000" + "extra_damage" "1.35" + "plugin" "npc_demon_possesed_armor" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "35000" + "extra_damage" "1.5" + "plugin" "npc_protector" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "4" + "health" "50000" + "extra_damage" "2.0" + "plugin" "npc_contracted_motivator" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "3" + "health" "25000" + "extra_damage" "1.35" + "plugin" "npc_hardener" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "4" + "health" "50000" + "extra_damage" "4.0" + "plugin" "npc_supplier" + "spawn" "home_attackerspawn" + } + "1.1" + { + "count" "2" + "health" "275000" + "extra_damage" "1.5" + "plugin" "npc_demolitionist" + "spawn" "home_attackerspawn" + } + "0.0" + { + "count" "3" + "health" "35000" + "extra_damage" "1.0" + "plugin" "npc_airraider" + "spawn" "home_attackerspawn" + } + } + "Freeplay" + { + // Needed key + } +} \ No newline at end of file diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/spawners/difficulty_1/fight_3/variant_2.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/spawners/difficulty_1/fight_3/variant_2.cfg index 16c770f00c..ebc11f7f90 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/spawners/difficulty_1/fight_3/variant_2.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/spawners/difficulty_1/fight_3/variant_2.cfg @@ -5,15 +5,15 @@ "1.0" { "count" "8" - "health" "1100" - "extra_damage" "1.15" + "health" "1000" + "extra_damage" "1.10" "extra_speed" "1.0" "plugin" "npc_pental" // Plugin Name } "0.2" { "count" "3" // Amount of NPCs - "health" "900" + "health" "800" "plugin" "npc_heavy_punuel" // Plugin Name } } diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/spawners/difficulty_1/fight_3/variant_4.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/spawners/difficulty_1/fight_3/variant_4.cfg index 670d23c2cc..289ae31b5f 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/spawners/difficulty_1/fight_3/variant_4.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/spawners/difficulty_1/fight_3/variant_4.cfg @@ -14,8 +14,8 @@ { "count" "1" // Amount of NPCs "is_boss" "1" - "health" "16000" - "extra_thinkspeed" "0.5" + "health" "10000" + "extra_thinkspeed" "0.75" "plugin" "npc_sergeant_ideal" // Plugin Name } } diff --git a/addons/sourcemod/configs/zombie_riot/dungeon/spawners/difficulty_4/special_1/variant_1.cfg b/addons/sourcemod/configs/zombie_riot/dungeon/spawners/difficulty_4/special_1/variant_1.cfg index 674bdd3e37..155548156a 100644 --- a/addons/sourcemod/configs/zombie_riot/dungeon/spawners/difficulty_4/special_1/variant_1.cfg +++ b/addons/sourcemod/configs/zombie_riot/dungeon/spawners/difficulty_4/special_1/variant_1.cfg @@ -5,7 +5,7 @@ "5.0" { "count" "0" - "health" "250000" + "health" "1500000" "custom_name" "Upgraded Militia" "is_boss" "1" "extra_damage" "70.0" diff --git a/addons/sourcemod/configs/zombie_riot/fast_silverster_goggles_lab.cfg b/addons/sourcemod/configs/zombie_riot/fast_silverster_goggles_lab.cfg index 229c11a591..a487a36839 100644 --- a/addons/sourcemod/configs/zombie_riot/fast_silverster_goggles_lab.cfg +++ b/addons/sourcemod/configs/zombie_riot/fast_silverster_goggles_lab.cfg @@ -1963,6 +1963,7 @@ "message_outro" "Xeno_Wave_1" "music_track_outro" "npc/fast_zombie/fz_alertfar1.wav" + "no_miniboss" "1" "1.0" { "count" "10" @@ -1996,6 +1997,7 @@ "author" "" } "message_outro" "Xeno_Wave_2" + "no_miniboss" "1" "1.0" { @@ -2028,6 +2030,7 @@ "author" "" } "message_outro" "Xeno_Wave_3" + "no_miniboss" "1" "1.0" { @@ -2052,6 +2055,7 @@ } "44" { + "no_miniboss" "1" "music_1" { "file" "#zombie_riot/abandoned_lab/music/inside_lab.mp3" @@ -2076,6 +2080,7 @@ } "45" { + "no_miniboss" "1" "cash" "15000" "setup" "60" @@ -2132,6 +2137,7 @@ } "46" { + "no_miniboss" "1" "music_1" { "file" "#zombie_riot/abandoned_lab/music/inside_lab.mp3" @@ -2172,6 +2178,7 @@ } "47" { + "no_miniboss" "1" "music_1" { "file" "#zombie_riot/abandoned_lab/music/inside_lab.mp3" @@ -2200,6 +2207,7 @@ } "48" { + "no_miniboss" "1" "music_1" { "file" "#zombie_riot/abandoned_lab/music/inside_lab.mp3" @@ -2250,6 +2258,7 @@ "name" "" "author" "" } + "no_miniboss" "1" "cash" "4000" "4.0" { @@ -2268,6 +2277,7 @@ { "cash" "25000" "setup" "60" + "no_miniboss" "1" "0.1" { "count" "3" @@ -2289,6 +2299,7 @@ } "51" { + "no_miniboss" "1" "music_1" { "file" "#zombie_riot/abandoned_lab/music/inside_lab.mp3" @@ -2331,6 +2342,7 @@ } "52" { + "no_miniboss" "1" "music_1" { "file" "#zombie_riot/abandoned_lab/music/inside_lab.mp3" @@ -2352,6 +2364,7 @@ } "53" { + "no_miniboss" "1" "music_1" { "file" "#zombie_riot/abandoned_lab/music/inside_lab.mp3" @@ -2379,53 +2392,98 @@ } "54" { + "no_miniboss" "1" "music_1" { - "file" "#zombie_riot/abandoned_lab/music/inside_lab.mp3" - "time" "151" - "volume" "1.45" + "file" "#zombiesurvival/xeno_raid/xeno_shared_bossmusic.mp3" + "time" "170" + "volume" "2.0" "download" "1" - "name" "" - "author" "" + "name" "Xenostate" + "author" "Universe - Tyeski" } "message_outro" "Xeno_Wave_4" "1.0" { - "count" "25" + "count" "13" "health" "600000" "plugin" "npc_xeno_acclaimed_swordsman" } - "1.0" + "2.0" { - "count" "15" + "count" "8" "health" "300000" "extra_damage" "1.0" "extra_size" "1.0" "plugin" "npc_xeno_early_infected" } - "1.0" + "3.0" { - "count" "15" + "count" "8" "health" "400000" "extra_damage" "3.0" "plugin" "npc_xeno_infected_lab_doctor" } - "5.0" + "4.0" { - "count" "15" + "count" "8" "health" "1200000" "plugin" "npc_xeno_patient_few" } - "0.0" + "5.0" { - "count" "7" + "count" "4" + "health" "1500000" + "plugin" "npc_xeno_robot" + } + "5.0" + { + "count" "0" + "health" "1000000" + "plugin" "npc_xeno_lab_security" + "is_boss" "1" + "extra_damage" "2.25" + "extra_speed" "0.35" + "data" "lab" + } + "4.0" + { + "count" "3" "health" "1500000" "plugin" "npc_xeno_robot" } + "3.0" + { + "count" "7" + "health" "1200000" + "plugin" "npc_xeno_patient_few" + } + "2.0" + { + "count" "7" + "health" "400000" + "extra_damage" "3.0" + "plugin" "npc_xeno_infected_lab_doctor" + } + "1.0" + { + "count" "7" + "health" "300000" + "extra_damage" "1.0" + "extra_size" "1.0" + "plugin" "npc_xeno_early_infected" + } + "0.0" + { + "count" "12" + "health" "600000" + "plugin" "npc_xeno_acclaimed_swordsman" + } } "55" { + "no_miniboss" "1" "setup" "60" "xp" "1500" @@ -2438,7 +2496,7 @@ "is_immune_to_nuke" "1" "is_health_scaling" "1" "extra_damage" "1.0" - "data" "final_item" + "data" "final_item;enraged" "plugin" "npc_xeno_raidboss_nemesis" } "0.0" @@ -2457,4 +2515,4 @@ "Freeplay" { } -} \ No newline at end of file +} diff --git a/addons/sourcemod/configs/zombie_riot/fast_silverster_goggles_norm.cfg b/addons/sourcemod/configs/zombie_riot/fast_silverster_goggles_norm.cfg index 4198901a49..234fbf6396 100644 --- a/addons/sourcemod/configs/zombie_riot/fast_silverster_goggles_norm.cfg +++ b/addons/sourcemod/configs/zombie_riot/fast_silverster_goggles_norm.cfg @@ -1706,6 +1706,17 @@ "44" { "message_outro" "Xeno_Wave_4" + + "music_1" + { + "file" "#zombiesurvival/xeno_raid/xeno_shared_bossmusic.mp3" + "time" "170" + "volume" "2.0" + "download" "1" + "name" "Xenostate" + "author" "Universe - Tyeski" + } + "1.0" { "count" "5" @@ -1714,14 +1725,23 @@ "extra_damage" "1.0" "plugin" "npc_xeno_acclaimed_swordsman" } - "0.0" + "2.0" { "count" "4" "cash" "333" "health" "1000000" "extra_damage" "1.2" "plugin" "npc_xeno_zombie_soldier_giant_grave" - } + } + "0.0" + { + "count" "0" + "health" "2500000" + "cash" "1" + "is_boss" "1" + "extra_damage" "2.5" + "plugin" "npc_xeno_lab_security" + } } "45" { @@ -1742,4 +1762,4 @@ "Freeplay" { } -} \ No newline at end of file +} diff --git a/addons/sourcemod/configs/zombie_riot/fast_smith.cfg b/addons/sourcemod/configs/zombie_riot/fast_smith.cfg index 47de02c933..0e3c367ec6 100644 --- a/addons/sourcemod/configs/zombie_riot/fast_smith.cfg +++ b/addons/sourcemod/configs/zombie_riot/fast_smith.cfg @@ -244,7 +244,7 @@ "1.00" { "count" "0" - "health" "3000" + "health" "2500" "plugin" "npc_agent_smith" "is_boss" "1" } diff --git a/addons/sourcemod/configs/zombie_riot/fastmode.cfg b/addons/sourcemod/configs/zombie_riot/fastmode.cfg index 020c363244..e938c60f23 100644 --- a/addons/sourcemod/configs/zombie_riot/fastmode.cfg +++ b/addons/sourcemod/configs/zombie_riot/fastmode.cfg @@ -117,6 +117,28 @@ "desc" "Paranormal Activity Desc" "level" "0.75" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/maps/vsh_.cfg b/addons/sourcemod/configs/zombie_riot/maps/vsh_.cfg index 5c3685245f..df67925fe8 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/vsh_.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/vsh_.cfg @@ -54,6 +54,28 @@ "desc" "Paranormal Activity Desc" "level" "0.75" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Turbulance" { "func_collect" "Modifier_Collect_Turbolences" diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_1city.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_1city.cfg index e860ef0046..dd2e9b2613 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_1city.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_1city.cfg @@ -34,6 +34,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_abandoned_lab_surv.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_abandoned_lab_surv.cfg index 23dcc056ff..ee4ec4bd83 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_abandoned_lab_surv.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_abandoned_lab_surv.cfg @@ -48,6 +48,28 @@ "desc" "Paranormal Activity Desc" "level" "0.75" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_bettingwars.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_bettingwars.cfg index 176712c07a..f5ff3774ca 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_bettingwars.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_bettingwars.cfg @@ -553,6 +553,13 @@ "plugin" "npc_majorsteam" } "3.21" + { + "count" "0" + "extra_damage" "0.25" + "health" "1500" + "plugin" "npc_majorvoided" + } + "3.21" { "count" "0" "extra_damage" "0.4" @@ -668,6 +675,20 @@ "plugin" "npc_chaos_supporter" } "3.11" + { + "count" "3" + "extra_damage" "0.7" + "health" "500" + "plugin" "npc_chaos_mage" + } + "3.11" + { + "count" "3" + "extra_damage" "0.35" + "health" "1200" + "plugin" "npc_chaos_insane" + } + "3.11" { "count" "3" "extra_damage" "0.35" @@ -1220,6 +1241,182 @@ "health" "10000" "plugin" "npc_reaper" } + "3.11" + { + "count" "3" + "extra_damage" "0.6" + "health" "1200" + "plugin" "npc_chaos_blade_thrower" + } + "3.11" + { + "count" "3" + "extra_damage" "0.7" + "health" "1000" + "plugin" "npc_chaos_fencer" + } + "3.11" + { + "count" "3" + "extra_damage" "0.7" + "health" "1200" + "plugin" "npc_chaos_gunmen" + } + "2.4" + { + "count" "6" + "health" "1500" + "extra_damage" "1.5" + "plugin" "npc_barbaric_teardown" + } + "2.5" + { + "count" "6" + "health" "1100" + "extra_damage" "1.4" + "plugin" "npc_skilled_crossbowman" + } + "2.6" + { + "count" "6" + "health" "1500" + "extra_damage" "1.5" + "plugin" "npc_demon_devoter" + } + "2.9" + { + "count" "3" + "health" "1500" + "extra_damage" "1.5" + "plugin" "npc_battlefield_supplier" + } + "2.9" + { + "count" "3" + "health" "1500" + "extra_damage" "1.5" + "plugin" "npc_contracted_motivator" + } + "2.8" + { + "count" "0" + "health" "1000" + "extra_damage" "5.0" + "plugin" "npc_catapult" + } + "3.0" + { + "count" "1" + "health" "2000" + "extra_damage" "1.5" + "plugin" "npc_demon_possesed_armor" + } + "2.65" + { + "count" "6" + "health" "2000" + "extra_damage" "1.5" + "plugin" "npc_zapmarker" + } + "2.65" + { + "count" "6" + "health" "1500" + "extra_damage" "2.0" + "plugin" "npc_resource_collector" + } + "3.0" + { + "count" "1" + "health" "3500" + "extra_damage" "1.5" + "plugin" "npc_demolitionist" + } + "2.65" + { + "count" "2" + "health" "1500" + "extra_damage" "1.5" + "plugin" "npc_protector" + } + "2.65" + { + "count" "6" + "health" "1000" + "extra_damage" "1.5" + "plugin" "npc_airraider" + } + "2.65" + { + "count" "3" + "health" "1000" + "extra_damage" "1.5" + "plugin" "npc_headhunter" + } + "2.65" + { + "count" "4" + "health" "1500" + "extra_damage" "1.5" + "plugin" "npc_chemical_specialist" + } + "3.0" + { + "count" "0" + "health" "1000" + "plugin" "npc_giant_armored_medic" + } + "1.0" + { + "count" "15" + "health" "1000" + "extra_damage" "2.0" + "plugin" "npc_glug" + "data" "aggressive" + } + "4.0" + { + "count" "0" + "health" "25000" + "plugin" "npc_glug" + "custom_name" "Mega Glug, the Great" + "extra_damage" "8.0" + "extra_thinkspeed" "0.85" + "extra_size" "3.00" + "extra_speed" "1.25" + "data" "aggressive" + } + "4.0" + { + "count" "0" + "health" "15000" + "plugin" "npc_behemoth_behemoth" + } + "4.0" + { + "count" "0" + "health" "15000" + "plugin" "npc_cursed_king" + } + "4.0" + { + "count" "0" + "health" "15000" + "plugin" "npc_gasleader" + } + "4.0" + { + "count" "1" + "health" "1" + "plugin" "npc_almagest_proxima" + } + //"4.0" + //{ + //"count" "0" + //"health" "15000" + //"extra_damage" "0.9" + //"plugin" "npc_xeno_lab_security" + //} } } -} \ No newline at end of file +} diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_bossrush.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_bossrush.cfg index d2b50fe80f..0a1131843d 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_bossrush.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_bossrush.cfg @@ -1,5 +1,15 @@ -"Custom" +"Setup" { + + "MiniBoss" + { + + } + "Overrides" + { + "zr_smallmapmulti" "0.75" + "zr_xpmultiplier" "0.15" + } "Packages" { "base" "" @@ -10,20 +20,14 @@ "bloons" "" "kamikaze" "" "pernell" "" + "rogue" "" "matrix" "" "combinehell" "" - } - "Overrides" - { - "zr_xpmultiplier" "0.15" - } - "MiniBoss" - { + "construction" "" } "Setup" { "cash" "1600" - "Waves" { "Boss Rush [Basic]" @@ -70,6 +74,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" @@ -94,4 +120,4 @@ } } } -} \ No newline at end of file +} diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_const2_headquarters.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_const2_headquarters.cfg index 862a164f90..9189257fb7 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_const2_headquarters.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_const2_headquarters.cfg @@ -4,6 +4,7 @@ { "zr_spawnprotectiontime" "1.0" "zr_norandomvillager" "1" + "zr_spawnersactive" "64" } "Packages" { @@ -74,6 +75,7 @@ "dungeon/raid_3_1" "" "dungeon/raid_3_2" "" "dungeon/raid_3_3" "" + "dungeon/raid_3_4" "" } "4" { @@ -360,6 +362,7 @@ "waveamount" "2" "lootscale" "0.31" "spawn" "dungeon_6_start" + "minwave" "10" "Fights" { @@ -635,28 +638,28 @@ "Sealed Ossunia Crate" "1" } } - "Special Dungeon City" - { - "common" "1" - "victory" "3" - "wavechance" "1.0" - "waveamount" "9" - "lootscale" "0.25" - "spawn" "dungeon_city_start" - "cooldown" "9999.9" - "minwave" "30" - - "Fights" - { - "dungeon/spawners/difficulty_4/city/dungeon_1" "40" - } - "Loots" - { - "Wooden Crate" "40" - "Wizuh Crate" "19" - "Sealed Wizuh Crate" "1" - } - } + // "Special Dungeon City" + // { + // "common" "1" + // "victory" "3" + // "wavechance" "1.0" + // "waveamount" "9" + // "lootscale" "0.25" + // "spawn" "dungeon_city_start" + // "cooldown" "9999.9" + // "minwave" "30" +// + // "Fights" + // { + // "dungeon/spawners/difficulty_4/city/dungeon_1" "40" + // } + // "Loots" + // { + // "Wooden Crate" "40" + // "Wizuh Crate" "19" + // "Sealed Wizuh Crate" "1" + // } + // } "Boss Dungeon 1" { "common" "1" @@ -667,7 +670,7 @@ "spawn" "dungeon_special_1_start" "cooldown" "9999.9" "minwave" "30" - + "Fights" { "dungeon/spawners/difficulty_4/special_1/dungeon_1_1" "40" diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_defense.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_defense.cfg index cfffb393a4..afaf0a6857 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_defense.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_defense.cfg @@ -45,6 +45,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_frigidplace.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_frigidplace.cfg index a9e1cb772c..d42ac557c4 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_frigidplace.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_frigidplace.cfg @@ -39,6 +39,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_mansion.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_mansion.cfg index 6c5d2fbb75..91f9699954 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_mansion.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_mansion.cfg @@ -38,6 +38,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_matrix.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_matrix.cfg index 3e966102d5..5b26a17ce8 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_matrix.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_matrix.cfg @@ -22,6 +22,75 @@ "level" "70" } } + "Modifiers" + { + "Chaos Intrusion" + { + "func_collect" "Modifier_Collect_ChaosIntrusion" + "func_remove" "Modifier_Remove_ChaosIntrusion" + "func_ally" "" + "func_enemy" "ZRModifs_ChaosIntrusionNPC" + "func_weapon" "" + + "desc" "Chaos Intrusion Desc" + "level" "0.5" + } + "Paranormal Activity" + { + "func_collect" "Modifier_Collect_ParanormalActivity" + "func_remove" "Modifier_Remove_ParanormalActivity" + "func_ally" "" + "func_enemy" "ZRModifs_ParanormalActivityNPC" + "func_weapon" "" + + "desc" "Paranormal Activity Desc" + "level" "0.75" + } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } + "Secondary Mercs" + { + "func_collect" "Modifier_Collect_SecondaryMercs" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "Modifier_RecolourAlly_SecondaryMercs" + "func_enemy" "ZRModifs_SecondaryMercsNPC" + "func_weapon" "" + + "desc" "Secondary Mercs Desc" + "level" "2.0" + } + "Old Times" + { + "func_collect" "Modifier_Collect_OldTimes" + "func_remove" "Modifier_Remove_OldTimes" + "func_ally" "" + "func_enemy" "ZRModifs_OldTimesNPC" + "func_weapon" "" + + "desc" "Old Times Desc" + "level" "3.0" + } + } } "MiniBoss" { diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_nova/fastomega.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_nova/fastomega.cfg index 8388e84dc4..9dfc5073ba 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_nova/fastomega.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_nova/fastomega.cfg @@ -3,6 +3,7 @@ "gift_drop_chance_multiplier" "1.0" "grigori_special_shop_logic" "1" "auto_raid_cash" "1" + "auto_wave_cash" "1" "music_setup" { @@ -21,7 +22,6 @@ "grigori_sells_items_max" "3" "xp" "25" - "cash" "300" "music_track_outro" "npc/overwatch/cityvoice/f_confirmcivilstatus_1_spkr.wav" "1.0" @@ -53,7 +53,6 @@ "2" { "xp" "25" - "cash" "350" "1.0" { @@ -77,7 +76,6 @@ "3" { "xp" "50" - "cash" "400" "5.0" { @@ -101,7 +99,6 @@ "4" { "xp" "25" - "cash" "450" "music_track_outro" "npc/overwatch/cityvoice/f_anticitizenreport_spkr.wav" "1.0" @@ -121,7 +118,6 @@ "5" { "xp" "25" - "cash" "500" "setup" "30" "grigori_refresh_store" "1" @@ -147,7 +143,6 @@ "6" { "xp" "25" - "cash" "550" "5.0" { @@ -165,7 +160,6 @@ "7" { "xp" "50" - "cash" "600" "1.0" { @@ -219,7 +213,6 @@ "8" { "xp" "25" - "cash" "650" "1.0" { @@ -249,7 +242,6 @@ "9" { "xp" "25" - "cash" "700" "intencity" "5" "music_track_outro" "npc/overwatch/cityvoice/fprison_freemanlocated.wav" @@ -276,7 +268,6 @@ "10" { "xp" "100" - "cash" "2100" "setup" "30" "no_miniboss" "1" "grigori_refresh_store" "1" @@ -299,6 +290,13 @@ "plugin" "npc_xeno_combine_soldier_overlord" } "1.0" + { + "count" "1" + "health" "50000" + "is_boss" "1" + "plugin" "npc_combine_soldier_overlord" + } + "1.0" { "count" "5" "health" "2000" @@ -340,24 +338,16 @@ "health" "2500" "plugin" "npc_xeno_combine_soldier_ar2" } - "1.0" + "0.0" { "count" "2" "health" "3000" "plugin" "npc_xeno_combine_soldier_elite" } - "0.0" - { - "count" "1" - "health" "50000" - "is_boss" "1" - "plugin" "npc_combine_soldier_overlord" - } } "11" { "xp" "50" - "cash" "600" "setup" "60" "grigori_refresh_store" "1" @@ -384,7 +374,6 @@ "12" { "xp" "50" - "cash" "700" "1.0" { @@ -408,7 +397,6 @@ "13" { "xp" "100" - "cash" "800" "5.0" { @@ -432,7 +420,6 @@ "14" { "xp" "50" - "cash" "900" "music_track_outro" "npc/overwatch/cityvoice/f_sociolevel1_4_spkr.wav" "1.0" @@ -463,7 +450,6 @@ "15" { "xp" "100" - "cash" "1000" "setup" "30" "grigori_refresh_store" "1" @@ -488,7 +474,6 @@ "16" { "xp" "50" - "cash" "1100" "1.0" { @@ -512,7 +497,6 @@ "17" { "xp" "50" - "cash" "1200" "1.0" { @@ -536,7 +520,6 @@ "18" { "xp" "50" - "cash" "1300" "1.0" { @@ -562,7 +545,6 @@ "19" { "xp" "50" - "cash" "1400" "intencity" "5" "music_track_outro" "npc/overwatch/cityvoice/f_capitalmalcompliance_spkr.wav" @@ -600,7 +582,6 @@ "20" { "xp" "150" - "cash" "4200" "setup" "30" "no_miniboss" "1" "grigori_refresh_store" "1" @@ -615,13 +596,6 @@ "author" "Kelly Bailey" } "1.0" - { - "count" "1" - "health" "125000" - "is_boss" "1" - "plugin" "npc_hunter" - } - "1.0" { "count" "3" "health" "2000" @@ -664,6 +638,13 @@ "plugin" "npc_xeno_combine_soldier_elite" } "1.0" + { + "count" "1" + "health" "125000" + "is_boss" "1" + "plugin" "npc_nova_prospekt_overseer" + } + "1.0" { "count" "10" "health" "4000" @@ -697,7 +678,6 @@ "21" { "xp" "100" - "cash" "1200" "setup" "60" "grigori_refresh_store" "1" @@ -723,7 +703,6 @@ "22" { "xp" "100" - "cash" "1400" "1.0" { @@ -753,7 +732,6 @@ "23" { "xp" "100" - "cash" "1600" "1.0" { @@ -789,7 +767,6 @@ "24" { "xp" "100" - "cash" "1800" "1.0" { @@ -819,7 +796,6 @@ "25" { "xp" "100" - "cash" "2000" "setup" "30" "grigori_refresh_store" "1" @@ -851,7 +827,6 @@ "26" { "xp" "100" - "cash" "2200" "1.0" { @@ -875,7 +850,6 @@ "27" { "xp" "100" - "cash" "2400" "1.0" { @@ -899,7 +873,6 @@ "28" { "xp" "100" - "cash" "2600" "1.0" { @@ -929,7 +902,6 @@ "29" { "xp" "100" - "cash" "8400" "music_track_outro" "npc/overwatch/cityvoice/f_ceaseevasionlevelfive_spkr.wav" "1.0" @@ -966,7 +938,6 @@ "30" { "xp" "100" - "cash" "5000" "no_miniboss" "1" "setup" "30" "grigori_refresh_store" "1" @@ -979,22 +950,6 @@ "name" "Escalation (Part 2)" "author" "Spencer Baggett" } - - "1.0" - { - "count" "0" - "is_boss" "1" - "health" "250000" - "plugin" "npc_merlton_boss" - "data" "enraged" - } - "1.0" - { - "count" "0" - "is_boss" "1" - "health" "400000" - "plugin" "npc_merlton_boss" // Plugin Name - } "1.0" { "count" "12" @@ -1008,6 +963,13 @@ "plugin" "npc_seaborn_combine_soldier_shotgun" } "1.0" + { + "count" "0" + "is_boss" "1" + "health" "400000" + "plugin" "npc_merlton_boss" // Plugin Name + } + "1.0" { "count" "12" "health" "10000" @@ -1026,29 +988,39 @@ "plugin" "npc_seaborn_combine_soldier_elite" } "1.0" + { + "count" "0" + "is_boss" "1" + "health" "400000" + "plugin" "npc_merlton_boss" + "data" "enraged" + } + "1.0" { "count" "10" "health" "10000" "plugin" "npc_combine_soldier_swordsman_ddt" + "extra_damage" "2.0" } "1.0" { "count" "10" "health" "10000" "plugin" "npc_flying_armor" + "extra_damage" "2.0" } "0.0" { "count" "15" "health" "10000" "plugin" "npc_combine_soldier_swordsman" + "extra_damage" "2.0" } } "31" { "xp" "100" - "cash" "2400" - "setup" "30" + "setup" "60" "grigori_refresh_store" "1" "1.0" @@ -1056,98 +1028,104 @@ "count" "10" "health" "10000" "plugin" "npc_chaos_insane" - "extra_damage" "0.75" + "extra_damage" "0.55" } "0.0" { "count" "12" "health" "15000" "plugin" "npc_medival_paladin" + "extra_damage" "1.25" } "0.0" { "count" "12" "health" "15000" "plugin" "npc_antiarmor_infantry" + "extra_damage" "1.25" } } "32" { "xp" "100" - "cash" "2800" "1.0" { "count" "10" "health" "25000" "plugin" "npc_medival_samurai" + "extra_damage" "1.25" } "1.0" { "count" "10" "health" "25000" "plugin" "npc_destructor" - }"1.0" + "extra_damage" "1.25" + } + "0.0" { - "count" "12" + "count" "10" "health" "10000" "plugin" "npc_chaos_supporter" - "extra_damage" "0.75" + "extra_damage" "0.55" } } "33" { "xp" "100" - "cash" "3200" "1.0" { "count" "12" "health" "30000" "plugin" "npc_medival_riddenarcher" + "extra_damage" "1.25" } "1.0" { "count" "12" "health" "30000" "plugin" "npc_breachcart" + "extra_damage" "1.25" } "0.0" { "count" "12" "health" "30000" "plugin" "npc_medival_hussar" + "extra_damage" "1.25" } } "34" { "xp" "100" - "cash" "3600" "1.0" { "count" "10" "health" "50000" "plugin" "npc_xeno_combine_soldier_collos_swordsman" + "extra_damage" "2.0" } "1.0" { "count" "10" "health" "50000" "plugin" "npc_medival_construct" + "extra_damage" "2.0" } "0.0" { "count" "10" - "health" "15000" + "health" "10000" "plugin" "npc_chaos_mage" - "extra_damage" "0.75" + "extra_damage" "0.55" } } "35" { "xp" "100" - "cash" "4000" "setup" "30" "grigori_refresh_store" "1" @@ -1156,51 +1134,52 @@ "count" "7" "health" "50000" "plugin" "npc_payback" + "extra_damage" "2.0" } "1.0" { "count" "12" "health" "50000" "plugin" "npc_blocker" + "extra_damage" "2.0" } "0.0" { "count" "12" "health" "50000" "plugin" "npc_destructor" + "extra_damage" "2.0" } } "36" { "xp" "100" - "cash" "4400" - "1.0" + "2.0" { - "count" "5" - "health" "20000" + "count" "4" + "health" "15000" "plugin" "npc_chaos_insane" - "extra_damage" "0.75" + "extra_damage" "0.65" } - "1.0" + "2.0" { - "count" "5" - "health" "20000" + "count" "4" + "health" "15000" "plugin" "npc_chaos_supporter" - "extra_damage" "0.75" + "extra_damage" "0.65" } "0.0" { - "count" "5" - "health" "20000" + "count" "4" + "health" "15000" "plugin" "npc_chaos_mage" - "extra_damage" "0.75" + "extra_damage" "0.65" } } "37" { "xp" "100" - "cash" "4800" "music_1" { @@ -1224,7 +1203,6 @@ "38" { "xp" "100" - "cash" "5200" "music_1" { @@ -1234,28 +1212,18 @@ "name" "Eon Trap" "author" "Kelly Bailey" } - "5.0" - { - "count" "1" - "health" "200000" - "extra_damage" "7.5" - "is_boss" "1" - "plugin" "npc_hunter" - } "0.0" { - "count" "10" - "health" "75000" - "plugin" "npc_payback" - "extra_thinkspeed" "0.5" - "extra_speed" "0.9" - "extra_damage" "0.65" + "count" "2" + "health" "1000000" + "extra_damage" "5.5" + "is_boss" "1" + "plugin" "npc_nova_prospekt_overseer" } } "39" { "xp" "100" - "cash" "5600" "message_outro" "Final_wave_message" "music_track_outro" "npc/overwatch/cityvoice/f_citizenshiprevoked_6_spkr.wav" @@ -1267,12 +1235,11 @@ "name" "Escalation (Part 2)" "author" "Spencer Baggett" } - "0.0" { - "count" "3" + "count" "4" "is_boss" "1" - "health" "100000" + "health" "200000" "data" "enraged" "plugin" "npc_merlton_boss" } @@ -1280,7 +1247,6 @@ "40" { "xp" "100" - "cash" "20000" "no_miniboss" "1" "setup" "60" "grigori_refresh_store" "1" @@ -1480,6 +1446,14 @@ "plugin" "npc_xeno_combine_soldier_collos_swordsman" } "1.0" + { + "count" "1" + "health" "100000" + "extra_damage" "2.0" + "is_boss" "1" + "plugin" "npc_nova_prospekt_overseer" + } + "1.0" { "count" "2" "health" "80000" @@ -1564,30 +1538,33 @@ "extra_damage" "2" "plugin" "npc_destructor" } - "1.0" + "5.0" { "count" "4" "health" "55000" "extra_damage" "2" "plugin" "npc_blocker" } - "1.0" + "2.0" { - "count" "4" - "health" "50000" + "count" "3" + "health" "20000" "plugin" "npc_chaos_insane" + "extra_damage" "0.75" } - "1.0" + "2.0" { - "count" "4" - "health" "50000" + "count" "3" + "health" "20000" "plugin" "npc_chaos_supporter" + "extra_damage" "0.75" } "0.0" { - "count" "4" - "health" "50000" + "count" "3" + "health" "20000" "plugin" "npc_chaos_mage" + "extra_damage" "0.75" } "0.00" { @@ -1604,7 +1581,6 @@ "Freeplay" { "xp" "1" - "cash" "1000" "1.0" { diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_nova/miniboss.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_nova/miniboss.cfg index f664b2d7c1..2ef0c014f6 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_nova/miniboss.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_nova/miniboss.cfg @@ -13,17 +13,30 @@ "text_2" "A caped Crimson warrior with Ominous Apparitions is appearing..." "text_3" "A patch of shadow. It has never once left, nor has it ever truly existed." } - "npc_medival_villager" + "npc_fallen_warrior" { "powerup" "2" "delay" "2.0" - "sound" "ambient_mp3/medieval_dooropen.mp3" - - "icon" "voice_player" + "sound" "passtime/projectile_swoosh6.wav" + + "icon" "cappoint_progressbar_blocked" //all 3 must be filled out, cus it picks one of these randomly. - "text_1" "Medieval Speech 1" - "text_2" "Medieval Speech 2" - "text_3" "Medieval Speech 3" + "text_1" "Fallen Warrior 1" + "text_2" "Fallen Warrior 2" + "text_3" "Fallen Warrior 3" + } + "npc_3650" + { + "powerup" "2" + "delay" "2.0" + "sound" "ambient/machines/thumper_shutdown1.wav" + + "icon" "cappoint_progressbar_blocked" + + //all 3 must be filled out, cus it picks one of these randomly. + "text_1" "3650 1" + "text_2" "3650 2" + "text_3" "3650 3" } } \ No newline at end of file diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_nova/omega.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_nova/omega.cfg index dd65c479cb..477bc328b7 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_nova/omega.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_nova/omega.cfg @@ -121,6 +121,7 @@ "xp" "25" "cash" "500" "setup" "30" + "grigori_refresh_store" "1" "1.0" { @@ -218,6 +219,7 @@ "xp" "50" "cash" "1000" "setup" "30" + "grigori_refresh_store" "1" "music_track_outro" "npc/overwatch/cityvoice/f_anticitizenreport_spkr.wav" "1.0" @@ -380,6 +382,7 @@ "xp" "100" "cash" "2500" "setup" "30" + "grigori_refresh_store" "1" "intencity" "10" "music_1" @@ -399,6 +402,13 @@ "plugin" "npc_xeno_combine_soldier_overlord" } "1.0" + { + "count" "1" + "health" "50000" + "is_boss" "1" + "plugin" "npc_combine_soldier_overlord" + } + "1.0" { "count" "5" "health" "2000" @@ -440,25 +450,19 @@ "health" "2500" "plugin" "npc_xeno_combine_soldier_ar2" } - "1.0" + "0.0" { "count" "2" "health" "3000" "plugin" "npc_xeno_combine_soldier_elite" } - "0.0" - { - "count" "1" - "health" "50000" - "is_boss" "1" - "plugin" "npc_combine_soldier_overlord" - } } "16" { "xp" "50" "cash" "300" - "setup" "30" + "setup" "60" + "grigori_refresh_store" "1" "1.0" { @@ -551,6 +555,8 @@ { "xp" "50" "cash" "500" + "setup" "30" + "grigori_refresh_store" "1" "1.0" { @@ -673,6 +679,8 @@ { "xp" "100" "cash" "1500" + "setup" "30" + "grigori_refresh_store" "1" "1.0" { @@ -827,7 +835,8 @@ { "xp" "150" "cash" "2000" - "setup" "60" + "setup" "30" + "grigori_refresh_store" "1" "intencity" "10" "music_1" @@ -839,13 +848,6 @@ "author" "Kelly Bailey" } "1.0" - { - "count" "1" - "health" "125000" - "is_boss" "1" - "plugin" "npc_hunter" - } - "1.0" { "count" "3" "health" "2000" @@ -888,6 +890,13 @@ "plugin" "npc_xeno_combine_soldier_elite" } "1.0" + { + "count" "1" + "health" "125000" + "is_boss" "1" + "plugin" "npc_nova_prospekt_overseer" + } + "1.0" { "count" "10" "health" "4000" @@ -922,7 +931,8 @@ { "xp" "100" "cash" "750" - "setup" "30" + "setup" "60" + "grigori_refresh_store" "1" "1.0" { @@ -1019,6 +1029,8 @@ { "xp" "100" "cash" "1500" + "setup" "30" + "grigori_refresh_store" "1" "1.0" { @@ -1157,6 +1169,8 @@ { "xp" "100" "cash" "1750" + "setup" "30" + "grigori_refresh_store" "1" "1.0" { @@ -1290,7 +1304,8 @@ { "xp" "100" "cash" "5000" - "setup" "60" + "setup" "30" + "grigori_refresh_store" "1" "music_1" { @@ -1301,21 +1316,6 @@ "author" "Spencer Baggett" } - "1.0" - { - "count" "0" - "is_boss" "1" - "health" "250000" - "plugin" "npc_merlton_boss" - "data" "enraged" - } - "1.0" - { - "count" "0" - "is_boss" "1" - "health" "400000" - "plugin" "npc_merlton_boss" // Plugin Name - } "1.0" { "count" "12" @@ -1329,6 +1329,13 @@ "plugin" "npc_seaborn_combine_soldier_shotgun" } "1.0" + { + "count" "0" + "is_boss" "1" + "health" "400000" + "plugin" "npc_merlton_boss" + } + "1.0" { "count" "12" "health" "10000" @@ -1347,6 +1354,14 @@ "plugin" "npc_seaborn_combine_soldier_elite" } "1.0" + { + "count" "0" + "is_boss" "1" + "health" "400000" + "plugin" "npc_merlton_boss" + "data" "enraged" + } + "1.0" { "count" "10" "health" "10000" @@ -1357,6 +1372,7 @@ "count" "10" "health" "10000" "plugin" "npc_flying_armor" + "extra_damage" "1.5" } "0.0" { @@ -1369,13 +1385,15 @@ { "xp" "100" "cash" "1250" + "setup" "60" + "grigori_refresh_store" "1" "1.0" { "count" "10" - "health" "15000" + "health" "10000" "plugin" "npc_chaos_insane" - "extra_damage" "0.75" + "extra_damage" "0.55" } "0.0" { @@ -1392,9 +1410,9 @@ "1.0" { "count" "12" - "health" "15000" + "health" "10000" "plugin" "npc_chaos_supporter" - "extra_damage" "0.75" + "extra_damage" "0.55" } "0.0" { @@ -1411,15 +1429,16 @@ "1.0" { "count" "10" - "health" "15000" + "health" "10000" "plugin" "npc_chaos_mage" - "extra_damage" "0.75" + "extra_damage" "0.55" } "0.0" { "count" "20" "health" "20000" "plugin" "npc_xeno_flying_armor" + "extra_damage" "1.5" } } "49" @@ -1444,27 +1463,29 @@ { "xp" "100" "cash" "1250" + "setup" "30" + "grigori_refresh_store" "1" "1.0" { "count" "5" "health" "15000" "plugin" "npc_chaos_insane" - "extra_damage" "0.75" + "extra_damage" "0.65" } "1.0" { "count" "5" "health" "15000" "plugin" "npc_chaos_supporter" - "extra_damage" "0.75" + "extra_damage" "0.65" } "0.0" { "count" "5" "health" "15000" "plugin" "npc_chaos_mage" - "extra_damage" "0.75" + "extra_damage" "0.65" } } "51" @@ -1477,24 +1498,28 @@ "count" "8" "health" "25000" "plugin" "npc_seaborn_combine_soldier_elite" + "extra_damage" "2.0" } "1.0" { "count" "8" "health" "25000" "plugin" "npc_voided_combine_soldier_shotgun" + "extra_damage" "2.0" } "1.0" { "count" "8" "health" "25000" "plugin" "npc_xeno_combine_soldier_ar2" + "extra_damage" "2.0" } "0.0" { "count" "8" "health" "25000" "plugin" "npc_combine_police_smg" + "extra_damage" "2.0" } } "52" @@ -1525,19 +1550,21 @@ "count" "10" "health" "25000" "plugin" "npc_medival_samurai" + "extra_damage" "1.25" } "1.0" { "count" "10" "health" "25000" "plugin" "npc_destructor" + "extra_damage" "1.25" } "0.0" { "count" "10" - "health" "25000" + "health" "15000" "plugin" "npc_chaos_insane" - "extra_damage" "0.75" + "extra_damage" "0.65" } } "54" @@ -1551,36 +1578,43 @@ "health" "100000" "is_boss" "1" "plugin" "npc_flying_armor" + "extra_damage" "2.0" } "0.0" { "count" "15" "health" "25000" "plugin" "npc_xeno_combine_soldier_deutsch_ritter" + "extra_damage" "1.25" } } "55" { "xp" "100" "cash" "2000" + "setup" "30" + "grigori_refresh_store" "1" "1.0" { "count" "12" "health" "30000" "plugin" "npc_medival_riddenarcher" + "extra_damage" "1.5" } "1.0" { "count" "12" "health" "30000" "plugin" "npc_breachcart" + "extra_damage" "1.5" } "0.0" { "count" "12" "health" "30000" "plugin" "npc_medival_hussar" + "extra_damage" "1.5" } } "56" @@ -1593,18 +1627,21 @@ "count" "7" "health" "50000" "plugin" "npc_payback" + "extra_damage" "2.0" } "1.0" { "count" "10" "health" "50000" "plugin" "npc_medival_construct" + "extra_damage" "2.0" } "0.0" { "count" "10" "health" "50000" "plugin" "npc_xeno_combine_soldier_collos_swordsman" + "extra_damage" "2.0" } } "57" @@ -1644,22 +1681,13 @@ "name" "Eon Trap" "author" "Kelly Bailey" } - "5.0" - { - "count" "1" - "health" "200000" - "extra_damage" "7.5" - "is_boss" "1" - "plugin" "npc_hunter" - } "0.0" { - "count" "10" - "health" "75000" - "plugin" "npc_payback" - "extra_thinkspeed" "0.5" - "extra_speed" "0.9" - "extra_damage" "0.65" + "count" "2" + "health" "1000000" + "extra_damage" "5.5" + "is_boss" "1" + "plugin" "npc_nova_prospekt_overseer" } } "59" @@ -1677,12 +1705,11 @@ "name" "Escalation (Part 2)" "author" "Spencer Baggett" } - "0.0" { - "count" "3" + "count" "4" "is_boss" "1" - "health" "100000" + "health" "200000" "data" "enraged" "plugin" "npc_merlton_boss" } @@ -1691,7 +1718,8 @@ { "xp" "100" "cash" "20000" - "setup" "69" + "setup" "60" + "grigori_refresh_store" "1" "music_1" { @@ -1888,6 +1916,14 @@ "plugin" "npc_xeno_combine_soldier_collos_swordsman" } "1.0" + { + "count" "1" + "health" "100000" + "extra_damage" "2.0" + "is_boss" "1" + "plugin" "npc_nova_prospekt_overseer" + } + "1.0" { "count" "2" "health" "80000" @@ -1982,19 +2018,19 @@ "1.0" { "count" "4" - "health" "50000" + "health" "20000" "plugin" "npc_chaos_insane" } "1.0" { "count" "4" - "health" "50000" + "health" "20000" "plugin" "npc_chaos_supporter" } "0.0" { "count" "4" - "health" "50000" + "health" "20000" "plugin" "npc_chaos_mage" } "0.00" diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_nova/vote.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_nova/vote.cfg index 70bf6178af..63c34d0624 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_nova/vote.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_nova/vote.cfg @@ -30,6 +30,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Paranormal Activity" { "func_collect" "Modifier_Collect_ParanormalActivity" diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_novaprospekt.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_novaprospekt.cfg new file mode 100644 index 0000000000..1df7ccdbd2 --- /dev/null +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_novaprospekt.cfg @@ -0,0 +1,129 @@ +"Custom" +{ + "Packages" + { + "base" "" + "playermodels" "" + "combinehell" "" + } + "Setup" + { + "cash" "700" + + "Waves" + { + "Combine Army Fast[Omega]" + { + "file" "maps/zr_nova/fastomega" + "desc" "Only Combine here, fight against every single one of them, don't let them get Bob! And this is faster." + "level" "100" + } + "Combine Army Fast[Omega]" + { + "file" "maps/zr_nova/fastomega" + "desc" "Only Combine here, fight against every single one of them, don't let them get Bob! And this is faster." + "level" "100" + } + } + "Modifiers" + { + "Chaos Intrusion" + { + "func_collect" "Modifier_Collect_ChaosIntrusion" + "func_remove" "Modifier_Remove_ChaosIntrusion" + "func_ally" "" + "func_enemy" "ZRModifs_ChaosIntrusionNPC" + "func_weapon" "" + + "desc" "Chaos Intrusion Desc" + "level" "0.5" + } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } + "Secondary Mercs" + { + "func_collect" "Modifier_Collect_SecondaryMercs" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "Modifier_RecolourAlly_SecondaryMercs" + "func_enemy" "ZRModifs_SecondaryMercsNPC" + "func_weapon" "" + + "desc" "Secondary Mercs Desc" + "level" "2.0" + } + "Old Times" + { + "func_collect" "Modifier_Collect_OldTimes" + "func_remove" "Modifier_Remove_OldTimes" + "func_ally" "" + "func_enemy" "ZRModifs_OldTimesNPC" + "func_weapon" "" + + "desc" "Old Times Desc" + "level" "3.0" + } + } + } + "MiniBoss" + { + "npc_phantom_knight" + { + "powerup" "2" + "delay" "2.0" + "sound" "npc/combine_gunship/gunship_pain.wav" + + "icon" "ico_notify_partner_taunt" + + //all 3 must be filled out, cus it picks one of these randomly. + "text_1" "Calamity of the Crimson Troupe, codename Phantom." + "text_2" "A caped Crimson warrior with Ominous Apparitions is appearing..." + "text_3" "A patch of shadow. It has never once left, nor has it ever truly existed." + } + "npc_fallen_warrior" + { + "powerup" "2" + "delay" "2.0" + "sound" "passtime/projectile_swoosh6.wav" + + "icon" "cappoint_progressbar_blocked" + + //all 3 must be filled out, cus it picks one of these randomly. + "text_1" "Fallen Warrior 1" + "text_2" "Fallen Warrior 2" + "text_3" "Fallen Warrior 3" + } + "npc_3650" + { + "powerup" "2" + "delay" "2.0" + "sound" "ambient/machines/thumper_shutdown1.wav" + + "icon" "cappoint_progressbar_blocked" + + //all 3 must be filled out, cus it picks one of these randomly. + "text_1" "3650 1" + "text_2" "3650 2" + "text_3" "3650 3" + } + } +} diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_respawn.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_respawn.cfg index 0deebdf5a9..3658016461 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_respawn.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_respawn.cfg @@ -31,6 +31,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_summercamp.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_summercamp.cfg index b977fd61db..53af920d5d 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_summercamp.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_summercamp.cfg @@ -28,6 +28,75 @@ "level" "0000" } } + "Modifiers" + { + "Chaos Intrusion" + { + "func_collect" "Modifier_Collect_ChaosIntrusion" + "func_remove" "Modifier_Remove_ChaosIntrusion" + "func_ally" "" + "func_enemy" "ZRModifs_ChaosIntrusionNPC" + "func_weapon" "" + + "desc" "Chaos Intrusion Desc" + "level" "0.5" + } + "Paranormal Activity" + { + "func_collect" "Modifier_Collect_ParanormalActivity" + "func_remove" "Modifier_Remove_ParanormalActivity" + "func_ally" "" + "func_enemy" "ZRModifs_ParanormalActivityNPC" + "func_weapon" "" + + "desc" "Paranormal Activity Desc" + "level" "0.75" + } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } + "Secondary Mercs" + { + "func_collect" "Modifier_Collect_SecondaryMercs" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "Modifier_RecolourAlly_SecondaryMercs" + "func_enemy" "ZRModifs_SecondaryMercsNPC" + "func_weapon" "" + + "desc" "Secondary Mercs Desc" + "level" "2.0" + } + "Old Times" + { + "func_collect" "Modifier_Collect_OldTimes" + "func_remove" "Modifier_Remove_OldTimes" + "func_ally" "" + "func_enemy" "ZRModifs_OldTimesNPC" + "func_weapon" "" + + "desc" "Old Times Desc" + "level" "3.0" + } + } } "MiniBoss" { diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_towncenter.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_towncenter.cfg index 9d68ea03ba..e36c11d55d 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_towncenter.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_towncenter.cfg @@ -47,6 +47,17 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" @@ -74,4 +85,4 @@ "MiniBoss" { } -} \ No newline at end of file +} diff --git a/addons/sourcemod/configs/zombie_riot/maps/zr_xfactor.cfg b/addons/sourcemod/configs/zombie_riot/maps/zr_xfactor.cfg index fa51a1838a..4eae3a778c 100644 --- a/addons/sourcemod/configs/zombie_riot/maps/zr_xfactor.cfg +++ b/addons/sourcemod/configs/zombie_riot/maps/zr_xfactor.cfg @@ -36,6 +36,28 @@ "desc" "Chaos Intrusion Desc" "level" "0.5" } + "Prefixes Galore" + { + "func_collect" "Modifier_Collect_Prefix_Galore" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemyPrefixDuff" + "func_weapon" "" + + "desc" "Prefixes Galore Desc" + "level" "2.0" + } + "One Stand" + { + "func_collect" "Modifier_Collect_OneStand" + "func_remove" "Modifier_Remove_SecondaryMercs" + "func_ally" "" + "func_enemy" "ZRModifs_ModifEnemy_OneStand" + "func_weapon" "" + + "desc" "One Stand Desc" + "level" "2.0" + } "Secondary Mercs" { "func_collect" "Modifier_Collect_SecondaryMercs" diff --git a/addons/sourcemod/configs/zombie_riot/riftbetweenfates/5_5.cfg b/addons/sourcemod/configs/zombie_riot/riftbetweenfates/5_5.cfg index 0683fc9dd0..6a0d7eaf8c 100644 --- a/addons/sourcemod/configs/zombie_riot/riftbetweenfates/5_5.cfg +++ b/addons/sourcemod/configs/zombie_riot/riftbetweenfates/5_5.cfg @@ -30,7 +30,7 @@ "extra_damage" "1.2" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" - "extra_speed" "1.0" + "extra_speed" "0.9" "health" "80000" "plugin" "npc_ursus" "spawn" "floor_5_spawn_entrance_1" @@ -41,7 +41,7 @@ "extra_damage" "1.2" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" - "extra_speed" "1.0" + "extra_speed" "0.9" "health" "110000" "plugin" "npc_perro" "spawn" "floor_5_spawn_entrance_2" @@ -52,7 +52,7 @@ "extra_damage" "1.2" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" - "extra_speed" "1.0" + "extra_speed" "0.9" "health" "60000" "plugin" "npc_archosauria" "spawn" "floor_5_spawn_entrance_1" @@ -61,8 +61,8 @@ { "priority" "2" "count" "4" - "health" "350000" - "extra_damage" "5.0" + "health" "325000" + "extra_damage" "4.5" "plugin" "npc_rogue_condition" "spawn" "floor_5_spawn_entrance_1" "data" "0.5;npc_umbral_spuud" @@ -80,10 +80,10 @@ "1.0" { "count" "7" - "extra_damage" "1.5" + "extra_damage" "1.15" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" - "extra_speed" "1.0" + "extra_speed" "0.9" "health" "80000" "plugin" "npc_void_erasus" "spawn" "floor_5_spawn_entrance_1" @@ -91,10 +91,10 @@ "1.0" { "count" "7" - "extra_damage" "1.5" + "extra_damage" "1.25" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" - "extra_speed" "1.0" + "extra_speed" "0.9" "health" "80000" "plugin" "npc_void_kunul" "spawn" "floor_5_spawn_entrance_2" @@ -102,21 +102,21 @@ "1.0" { "count" "3" - "extra_damage" "1.5" + "extra_damage" "1.25" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" - "extra_speed" "1.0" - "health" "350000" + "extra_speed" "0.9" + "health" "300000" "plugin" "npc_heavy_perisher" "spawn" "floor_5_spawn_entrance_2" } "1.0" { "count" "1" - "extra_damage" "1.5" + "extra_damage" "1.25" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" - "extra_speed" "1.0" + "extra_speed" "0.9" "health" "1000000" "is_boss" "1" "plugin" "npc_void_brooding_petra" @@ -128,7 +128,7 @@ "extra_damage" "2.0" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" - "extra_speed" "1.0" + "extra_speed" "0.9" "health" "70000" "plugin" "npc_void_sacraficer" "spawn" "floor_5_spawn_entrance_2" @@ -139,7 +139,7 @@ "extra_damage" "2.2" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" - "extra_speed" "1.0" + "extra_speed" "0.9" "health" "100000" "plugin" "npc_void_encasulator" "spawn" "floor_5_spawn_entrance_1" @@ -150,7 +150,7 @@ "extra_damage" "3.0" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" - "extra_speed" "1.0" + "extra_speed" "0.9" "health" "70000" "plugin" "npc_void_sprayer" "spawn" "floor_5_spawn_entrance_2" diff --git a/addons/sourcemod/configs/zombie_riot/riftbetweenfates/5_7.cfg b/addons/sourcemod/configs/zombie_riot/riftbetweenfates/5_7.cfg index 45a0316ca4..eea2007ca0 100644 --- a/addons/sourcemod/configs/zombie_riot/riftbetweenfates/5_7.cfg +++ b/addons/sourcemod/configs/zombie_riot/riftbetweenfates/5_7.cfg @@ -118,10 +118,10 @@ "1.0" { "count" "0" - "health" "1200000" + "health" "800000" "plugin" "npc_majorvoided" "is_boss" "1" - "extra_damage" "1.3" + "extra_damage" "0.9" "spawn" "floor_5_spawn_mainhall_6" } "1.0" @@ -211,11 +211,11 @@ "1.0" { "count" "10" - "extra_damage" "3.5" + "extra_damage" "2.5" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" "extra_speed" "1.0" - "health" "100" + "health" "25" "data" "999999" "plugin" "npc_voiding_bedrock" "spawn" "floor_5_spawn_mainhall_6" @@ -245,22 +245,22 @@ "1.0" { "count" "2" - "extra_damage" "1.5" + "extra_damage" "1.3" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" "extra_speed" "1.0" - "health" "350000" + "health" "310000" "plugin" "npc_blobbing_monster" "spawn" "floor_5_spawn_mainhall_8" } "0.0" { "count" "2" - "extra_damage" "1.5" + "extra_damage" "1.3" "extra_melee_res" "1.0" "extra_ranged_res" "1.0" "extra_speed" "1.0" - "health" "350000" + "health" "310000" "plugin" "npc_blobbing_monster" "spawn" "floor_5_spawn_mainhall_6" } diff --git a/addons/sourcemod/configs/zombie_riot/waves_shitpost.cfg b/addons/sourcemod/configs/zombie_riot/waves_shitpost.cfg index bb77996f43..4592acba23 100644 --- a/addons/sourcemod/configs/zombie_riot/waves_shitpost.cfg +++ b/addons/sourcemod/configs/zombie_riot/waves_shitpost.cfg @@ -164,7 +164,7 @@ "count" "5" "health" "10000" "plugin" "npc_last_survivor" - "extra_damage" "2.0" + "extra_damage" "0.9" } } "9" @@ -214,6 +214,7 @@ "0.0" { "count" "0" + "is_boss" "1" "health" "50000" "plugin" "npc_male07" } diff --git a/addons/sourcemod/configs/zombie_riot/weapons.cfg b/addons/sourcemod/configs/zombie_riot/weapons.cfg index 68c0bd2cb9..74641f8cef 100644 --- a/addons/sourcemod/configs/zombie_riot/weapons.cfg +++ b/addons/sourcemod/configs/zombie_riot/weapons.cfg @@ -71,7 +71,7 @@ "slot" "7" "func_attack" "Weapon_Pipebomb" - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_bodygroup" "65536" "weapon_custom_size" "1.0" "weapon_custom_size_viewmodel" "1.0" @@ -94,7 +94,7 @@ "pap_1_index" "1083" "pap_1_attributes" "2 ; 250 ; 292 ; 4 ; 56 ; 1 ; 280 ; 3 ; 303 ; -1 ; 103 ; 1.0 ; 101 ; 1.0 ; 99 ; 1.0 ; 97 ; 1.0" "pap_1_ammo" "24" //Hand Grenade - "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_1_weapon_bodygroup" "65536" "pap_1_weapon_custom_size" "1.0" "pap_1_weapon_custom_size_viewmodel" "1.0" @@ -125,7 +125,7 @@ "pap_2_ammo" "24" //Hand Grenade "pap_2_func_attack" "Weapon_Pipebomb" "pap_2_weapon_archetype" "1" - "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_2_weapon_bodygroup" "65536" "pap_2_weapon_custom_size" "1.0" "pap_2_weapon_custom_size_viewmodel" "1.0" @@ -148,7 +148,7 @@ "pap_3_ammo" "24" //Hand Grenade "pap_3_func_attack" "Weapon_Pipebomb" "pap_3_weapon_archetype" "1" - "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_3_weapon_bodygroup" "65536" "pap_3_weapon_custom_size" "1.1" "pap_3_weapon_custom_size_viewmodel" "1.1" @@ -172,7 +172,7 @@ "pap_4_ammo" "24" //Hand Grenade "pap_4_func_attack" "Weapon_Pipebomb_Flash" "pap_4_weapon_archetype" "1" - "pap_4_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_4_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_4_weapon_bodygroup" "65536" "pap_4_weapon_custom_size" "1.0" "pap_4_weapon_custom_size_viewmodel" "1.0" @@ -195,7 +195,7 @@ "pap_5_ammo" "24" //Hand Grenade "pap_5_func_attack" "Weapon_Pipebomb" "pap_5_weapon_archetype" "1" - "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_5_weapon_bodygroup" "65536" "pap_5_weapon_custom_size" "1.2" "pap_5_weapon_custom_size_viewmodel" "1.2" @@ -223,7 +223,7 @@ "pap_6_lag_comp_extend_boundingbox" "0" "pap_6_lag_comp_dont_move_building" "1" "pap_6_no_clip" "1" - "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_6_weapon_bodygroup" "65536" "pap_6_weapon_custom_size" "1.3" "pap_6_weapon_custom_size_viewmodel" "1.3" @@ -913,7 +913,7 @@ "pap_5_int_ability_onequip" "1003" "pap_5_pappaths" "0" // Paps 1 - 2 "pap_5_papskip" "99" - "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_5_weapon_bodygroup" "8" "pap_5_weapon_custom_size" "1.55" "pap_5_weapon_custom_size_viewmodel" "1.55" @@ -1137,7 +1137,7 @@ "pap_6_viewmodel_force_class" "3" //3 is soldier, needed cus of charge. "pap_6_weapon_volume_stiller" "0.65" "pap_6_weapon_volume_range" "0.85" - "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_6_weapon_bodygroup" "32" "pap_6_weapon_custom_size" "0.9" "pap_6_weapon_custom_size_viewmodel" "0.9" @@ -1175,7 +1175,7 @@ "pap_1_attributes" "2 ; 11.5 ; 6 ; 1.0 ; 97 ; 1.5 ; 280 ; 8 ; 4 ; 3.0 ; 103 ; 1.0 ; 101 ; 1.0 ; 4014 ; -0.5" "pap_1_ammo" "17" "pap_1_func_attack2" "Weapon_Shoot_Arrow_Crossbow_PAP" - "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_1_weapon_bodygroup" "4" "pap_1_weapon_custom_size" "1.4" "pap_1_weapon_custom_size_viewmodel" "1.4" @@ -1265,7 +1265,7 @@ "pap_5_lag_comp_dont_move_building" "1" "pap_5_weapon_archetype" "2" // Far Range "pap_5_reload_mode" "1" //1 means entire clip, 2 means one at a time. default is whatever the weapon had as a norm. - "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_5_weapon_bodygroup" "4" "pap_5_weapon_custom_size" "1.4" "pap_5_weapon_custom_size_viewmodel" "1.4" @@ -1285,7 +1285,7 @@ "pap_6_lag_comp_dont_move_building" "1" "pap_6_weapon_archetype" "2" // Far Range "pap_6_reload_mode" "1" //1 means entire clip, 2 means one at a time. default is whatever the weapon had as a norm. - "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_6_weapon_bodygroup" "4" "pap_6_weapon_custom_size" "1.4" "pap_6_weapon_custom_size_viewmodel" "1.4" @@ -1361,7 +1361,7 @@ "pap_2_damage_falloff" "0.9" "pap_2_int_ability_onequip" "150" "pap_2_papskip" "5" - "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_2_weapon_bodygroup" "2097152" "pap_3_desc" "Deagle Pap 2" @@ -1501,7 +1501,7 @@ "pap_8_weapon_archetype" "4" "pap_8_damage_falloff" "0.9" "pap_8_int_ability_onequip" "150" - "pap_8_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_8_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_8_weapon_bodygroup" "2097152" "pap_9_desc" "Sherrif Pap 3" @@ -1525,7 +1525,7 @@ "pap_9_pappaths" "2" "pap_9_damage_falloff" "0.9" "pap_9_int_ability_onequip" "150" - "pap_9_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_9_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_9_weapon_bodygroup" "2097152" @@ -3660,7 +3660,7 @@ "lag_comp_collision" "0" "lag_comp_extend_boundingbox" "1" "lag_comp_dont_move_building" "0" - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_bodygroup" "16" "weapon_custom_size" "1.3" "weapon_custom_size_viewmodel" "1.3" @@ -3679,7 +3679,7 @@ "pap_1_int_ability_onequip" "26" //7 is phlog - "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_1_weapon_bodygroup" "16" "pap_1_weapon_custom_size" "1.35" "pap_1_weapon_custom_size_viewmodel" "1.35" @@ -3740,7 +3740,7 @@ "pap_3_lag_comp_extend_boundingbox" "1" "pap_3_lag_comp_dont_move_building" "0" "pap_3_weapon_archetype" "3" - "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_3_weapon_bodygroup" "16" "pap_3_weapon_custom_size" "1.4" "pap_3_weapon_custom_size_viewmodel" "1.4" @@ -3951,6 +3951,35 @@ "pap_1_int_ability_onequip" "67" //67 is star shooter "pap_1_weapon_archetype" "4" } + "Brick" + { + "desc" "Brick Desc" + "tags" "Burst" + "author" "Artvin" + "cost" "25000" + "classname" "tf_weapon_jar" + "index" "58" + "attributes" "280 ; 1 ; 303 ; -1 ; 2 ; 100 ; 6 ; 1.0 ; 45 ; 0 ; 97 ; 1.0" + "ammo" "16" //rocket ammo so you gain very little of it + + "func_attack" "WeaponShootBrick" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" + "weapon_bodygroup" "4194304" + "weapon_custom_size" "1.0" + "weapon_custom_size_viewmodel" "0.8" + + + + + "lag_comp" "0" + "lag_comp_collision" "0" + "lag_comp_extend_boundingbox" "0" + "lag_comp_dont_move_building" "1" + "no_clip" "1" + + "int_ability_onequip" "165" + "weapon_archetype" "2" + } } "Melee Weapons" { @@ -4394,7 +4423,7 @@ "weapon_archetype" "16" "weapon_faction" "1" // Expidonsa - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_vmt_setting" "0" "weapon_bodygroup" "1" "weapon_custom_size" "1.15" @@ -4418,7 +4447,7 @@ "pap_1_weapon_archetype" "16" "pap_1_weapon_faction" "1" // Expidonsa - "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_1_weapon_vmt_setting" "0" "pap_1_weapon_bodygroup" "1" "pap_1_weapon_custom_size" "1.15" @@ -4442,7 +4471,7 @@ "pap_2_weapon_archetype" "16" "pap_2_weapon_faction" "1" // Expidonsa - "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_2_weapon_vmt_setting" "0" "pap_2_weapon_bodygroup" "1" "pap_2_weapon_custom_size" "1.15" @@ -4469,7 +4498,7 @@ "pap_3_weapon_archetype" "16" "pap_3_weapon_faction" "1" // Expidonsa - "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_3_weapon_vmt_setting" "0" "pap_3_weapon_bodygroup" "1" "pap_3_weapon_custom_size" "1.15" @@ -4636,7 +4665,7 @@ "lag_comp_extend_boundingbox" "0" "lag_comp_dont_move_building" "1" "weapon_sound_index_override" "30667" - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_bodygroup" "1024" "weapon_vmt_setting" "3" "weapon_custom_size_viewmodel" "0.8" @@ -4660,7 +4689,7 @@ "pap_1_int_ability_onequip" "65" "pap_1_func_attack2" "Fusion_Melee_Empower_State" "pap_1_weapon_sound_index_override" "30667" - "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_1_weapon_bodygroup" "2048" "pap_1_lag_comp" "0" @@ -4688,7 +4717,7 @@ "pap_2_int_ability_onequip" "122" // "pap_2_func_attack2" "Fusion_Melee_Empower_State" "pap_2_weapon_sound_index_override" "30667" - "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_2_weapon_bodygroup" "2048" "pap_2_lag_comp" "0" @@ -4719,7 +4748,7 @@ "pap_3_int_ability_onequip" "66" "pap_3_weapon_sound_index_override" "813" - "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_3_weapon_bodygroup" "2048" "pap_3_pappaths" "1" "pap_3_papskip" "1" @@ -4744,7 +4773,7 @@ "pap_4_int_ability_onequip" "84" // "pap_4_sound_weapon_override_string" "replay/snip.wav" //hit npc // "pap_4_weapon_sound_index_override" "813" //hit world - "pap_4_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_4_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_4_weapon_bodygroup" "4096" "pap_4_weapon_volume_stiller" "0.65" "pap_4_weapon_volume_range" "0.85" @@ -4764,7 +4793,7 @@ "pap_5_func_attack2" "Fusion_Melee_Nearl_Radiant_Knight" "pap_5_func_attack3" "Fusion_Melee_Empower_State_PAP" "pap_5_weapon_sound_index_override" "813" - "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_5_weapon_bodygroup" "2048" "pap_5_lag_comp" "0" @@ -4798,7 +4827,7 @@ "pap_6_int_ability_onequip" "84" // "pap_6_sound_weapon_override_string" "replay/snip.wav" //hit npc // "pap_6_weapon_sound_index_override" "813" //hit world - "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_6_weapon_bodygroup" "4096" "pap_6_weapon_volume_stiller" "0.65" "pap_6_weapon_volume_range" "0.85" @@ -4823,7 +4852,7 @@ "pap_7_func_attack" "WeaponVoidDoubleStrike" "pap_7_func_attack2" "Void_MeleeDoubleTapAbility" "pap_7_weapon_sound_index_override" "813" - "pap_7_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_7_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_7_weapon_bodygroup" "8192" "pap_7_lag_comp" "0" @@ -4850,7 +4879,7 @@ "pap_8_func_attack" "WeaponVoidDoubleStrike" "pap_8_func_attack2" "Void_MeleeDoubleTapAbility" "pap_8_weapon_sound_index_override" "813" - "pap_8_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_8_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_8_weapon_bodygroup" "8192" "pap_8_lag_comp" "0" @@ -6665,7 +6694,7 @@ "internal_melee_trace" "0" "weapon_archetype" "13" "weapon_faction" "2" // Kazimierz - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_bodygroup" "256" "weapon_custom_size" "1.1" "weapon_custom_size_viewmodel" "0.65" @@ -6682,7 +6711,7 @@ "pap_1_weapon_archetype" "13" "pap_1_weapon_faction" "2" // Kazimierz - "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_1_weapon_bodygroup" "256" "pap_1_weapon_custom_size" "1.1" "pap_1_weapon_custom_size_viewmodel" "0.65" @@ -6710,7 +6739,7 @@ "pap_2_weapon_archetype" "13" "pap_2_weapon_faction" "2" // Kazimierz - "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_2_weapon_bodygroup" "256" "pap_2_weapon_custom_size" "1.1" "pap_2_weapon_custom_size_viewmodel" "0.65" @@ -6746,7 +6775,7 @@ "override_weapon_slot" "2" //2 is melee "melee_attack_frame_delay" "0" "func_attack_immediate" "Weapon_ChainSawAttack" - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_bodygroup" "64" "weapon_custom_size" "1.45" "weapon_custom_size_viewmodel" "1.45" @@ -6772,7 +6801,7 @@ "pap_1_override_weapon_slot" "2" //2 is melee "pap_1_melee_attack_frame_delay" "0" "pap_1_func_attack_immediate" "Weapon_ChainSawAttack" - "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_1_weapon_bodygroup" "64" "pap_1_weapon_custom_size" "1.5" "pap_1_weapon_custom_size_viewmodel" "1.5" @@ -6799,7 +6828,7 @@ "pap_2_override_weapon_slot" "2" //2 is melee "pap_2_melee_attack_frame_delay" "0" "pap_2_func_attack_immediate" "Weapon_ChainSawAttack" - "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_2_weapon_bodygroup" "64" "pap_2_weapon_custom_size" "1.55" "pap_2_weapon_custom_size_viewmodel" "1.55" @@ -9639,7 +9668,7 @@ "ammoBuyOnly" "1" // Metal "weapon_archetype" "10" - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_bodygroup" "131072" "weapon_custom_size" "1.0" "weapon_custom_size_viewmodel" "1.0" @@ -9675,7 +9704,7 @@ "pap_1_pappaths" "1" "pap_1_papskip" "2" // Skips Pap 2 & 3 "pap_1_weapon_archetype" "10" - "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_1_weapon_bodygroup" "262144" "pap_1_weapon_custom_size" "1.0" "pap_1_weapon_custom_size_viewmodel" "1.0" @@ -9705,7 +9734,7 @@ "pap_2_weapon_archetype" "10" "pap_2_ammo" "3" //no ammo display "pap_2_ammoBuyOnly" "1" - "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_2_weapon_bodygroup" "131072" "pap_2_weapon_custom_size" "1.0" "pap_2_weapon_custom_size_viewmodel" "1.0" @@ -9735,7 +9764,7 @@ "pap_3_weapon_archetype" "10" "pap_3_ammo" "3" //no ammo display "pap_3_ammoBuyOnly" "1" - "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_3_weapon_bodygroup" "524288" "pap_3_weapon_custom_size" "1.0" "pap_3_weapon_custom_size_viewmodel" "1.0" @@ -9764,7 +9793,7 @@ "pap_4_pappaths" "1" "pap_4_papskip" "2" // Skips Pap 5 & 6 "pap_4_weapon_archetype" "10" - "pap_4_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_4_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_4_weapon_bodygroup" "262144" "pap_4_weapon_custom_size" "1.0" "pap_4_weapon_custom_size_viewmodel" "1.0" @@ -9796,7 +9825,7 @@ "pap_5_weapon_archetype" "10" "pap_5_ammo" "3" //no ammo display "pap_5_ammoBuyOnly" "1" - "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_5_weapon_bodygroup" "131072" "pap_5_weapon_custom_size" "1.0" "pap_5_weapon_custom_size_viewmodel" "1.0" @@ -9826,7 +9855,7 @@ "pap_6_weapon_archetype" "10" "pap_6_ammo" "3" //no ammo display "pap_6_ammoBuyOnly" "1" - "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_6_weapon_bodygroup" "524288" "pap_6_weapon_custom_size" "1.0" "pap_6_weapon_custom_size_viewmodel" "1.0" @@ -9856,7 +9885,7 @@ "pap_7_pappaths" "0" "pap_7_weapon_archetype" "10" - "pap_7_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_7_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_7_weapon_bodygroup" "262144" "pap_7_weapon_custom_size" "1.0" "pap_7_weapon_custom_size_viewmodel" "1.0" @@ -9885,7 +9914,7 @@ "pap_8_pappaths" "0" "pap_8_weapon_archetype" "10" - "pap_8_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_8_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_8_weapon_bodygroup" "131072" "pap_8_weapon_custom_size" "1.0" "pap_8_weapon_custom_size_viewmodel" "1.0" @@ -9914,7 +9943,7 @@ "pap_9_pappaths" "0" "pap_9_weapon_archetype" "10" - "pap_9_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_9_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_9_weapon_bodygroup" "524288" "pap_9_weapon_custom_size" "1.0" "pap_9_weapon_custom_size_viewmodel" "1.0" @@ -10479,7 +10508,7 @@ "func_attack_immediate" "Weapon_SeaHealingPap_M1" "func_attack2" "Weapon_SeaHealingPap_M2" - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_bodygroup" "128" "weapon_custom_size" "0.9" "weapon_custom_size_viewmodel" "0.65" @@ -10558,7 +10587,7 @@ "lag_comp_dont_move_building" "1" "no_clip" "1" "int_ability_onequip" "98" - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_bodygroup" "1048576" "weapon_custom_size" "1.0" "weapon_custom_size_viewmodel" "1.0" @@ -12830,7 +12859,7 @@ "pap_1_func_attack_immediate" "Weapon_SeaHealingPap_M1" "pap_1_func_attack2" "Weapon_SeaHealingPap_M2" "pap_1_int_ability_onequip" "62" - "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_1_weapon_bodygroup" "128" "pap_1_weapon_custom_size" "0.9" "pap_1_weapon_custom_size_viewmodel" "0.65" @@ -12850,7 +12879,7 @@ "pap_2_ignore_upgrades" "1" "pap_2_func_attack_immediate" "Weapon_SeaHealingPap_M1" "pap_2_func_attack2" "Weapon_SeaHealingPap_M2" - "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_2_weapon_bodygroup" "128" "pap_2_weapon_custom_size" "0.9" "pap_2_weapon_custom_size_viewmodel" "0.65" @@ -12871,7 +12900,7 @@ "pap_3_func_attack_immediate" "Weapon_SeaHealingPap_M1" "pap_3_func_attack2" "Weapon_SeaHealingPap_M2" "pap_3_no_clip" "1" - "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_3_weapon_bodygroup" "128" "pap_3_weapon_custom_size" "0.9" "pap_3_weapon_custom_size_viewmodel" "0.65" @@ -12892,7 +12921,7 @@ "pap_4_ignore_upgrades" "1" "pap_4_func_attack_immediate" "Weapon_SeaHealingPap_M1" "pap_4_func_attack2" "Weapon_SeaHealingPap_M2" - "pap_4_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_4_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_4_weapon_bodygroup" "128" "pap_4_weapon_custom_size" "0.9" "pap_4_weapon_custom_size_viewmodel" "0.65" @@ -12914,7 +12943,7 @@ "pap_5_ignore_upgrades" "1" "pap_5_func_attack_immediate" "Weapon_SeaHealingPap_M1" "pap_5_func_attack2" "Weapon_SeaHealingPap_M2" - "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_5_weapon_bodygroup" "128" "pap_5_weapon_custom_size" "0.9" "pap_5_weapon_custom_size_viewmodel" "0.65" @@ -12937,7 +12966,7 @@ "pap_6_func_attack_immediate" "Weapon_SeaHealingPap_M1" "pap_6_func_attack2" "Weapon_SeaHealingPap_M2" "pap_6_no_clip" "1" - "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_6_weapon_bodygroup" "128" "pap_6_weapon_custom_size" "0.9" "pap_6_weapon_custom_size_viewmodel" "0.65" @@ -12958,7 +12987,7 @@ "pap_7_func_attack_immediate" "Weapon_SeaHealingPap_M1" "pap_7_func_attack2" "Weapon_SeaHealingPap_M2" "pap_7_no_clip" "1" - "pap_7_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_7_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_7_weapon_bodygroup" "128" "pap_7_weapon_custom_size" "0.9" "pap_7_weapon_custom_size_viewmodel" "0.65" @@ -13399,7 +13428,7 @@ "pap_2_func_attack2" "ZealotPotionDrink" "pap_2_func_attack3" "Weapon_ZealotRCheckCD" "pap_2_backwards_walk_penalty" "0.9" //less - "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_2_weapon_bodygroup" "1048576" "pap_2_weapon_custom_size" "1.0" "pap_2_weapon_custom_size_viewmodel" "1.0" @@ -13426,7 +13455,7 @@ "pap_3_lag_comp_dont_move_building" "1" "pap_3_no_clip" "1" "pap_3_int_ability_onequip" "134" - "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_3_weapon_bodygroup" "1048576" "pap_3_weapon_custom_size" "1.0" "pap_3_weapon_custom_size_viewmodel" "1.0" @@ -13446,7 +13475,7 @@ "pap_4_lag_comp_dont_move_building" "1" "pap_4_no_clip" "1" "pap_4_int_ability_onequip" "134" - "pap_4_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_4_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_4_weapon_bodygroup" "1048576" "pap_4_weapon_custom_size" "1.0" "pap_4_weapon_custom_size_viewmodel" "1.0" @@ -13466,7 +13495,7 @@ "pap_5_lag_comp_dont_move_building" "1" "pap_5_no_clip" "1" "pap_5_int_ability_onequip" "134" - "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_5_weapon_bodygroup" "1048576" "pap_5_weapon_custom_size" "1.0" "pap_5_weapon_custom_size_viewmodel" "1.0" @@ -13495,7 +13524,7 @@ "pap_7_func_attack2" "ZealotPotionDrink" "pap_7_func_attack3" "Weapon_ZealotRCheckCD" "pap_7_backwards_walk_penalty" "0.9" //less - "pap_7_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_7_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_7_weapon_bodygroup" "1048576" "pap_7_weapon_custom_size" "1.0" "pap_7_weapon_custom_size_viewmodel" "1.0" @@ -13515,7 +13544,7 @@ "pap_8_func_attack2" "ZealotPotionDrink" "pap_8_func_attack3" "Weapon_ZealotRCheckCD" "pap_8_backwards_walk_penalty" "0.9" //less - "pap_8_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_8_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_8_weapon_bodygroup" "1048576" "pap_8_weapon_custom_size" "1.0" "pap_8_weapon_custom_size_viewmodel" "1.0" @@ -13777,7 +13806,7 @@ "attributes" "264 ; 0.0 ; 263 ; 0.0 ; 1 ; 1.76 ; 2 ; 2.0 ; 6 ; 1.25 ; 26 ; 150 ; 149 ; 30 ; 868 ; 0 ; 122 ; 1.76" "ignore_upgrades" "1" "int_ability_onequip" "60" - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_bodygroup" "32768" "weapon_custom_size" "1.0" "weapon_custom_size_viewmodel" "1.0" @@ -13795,7 +13824,7 @@ "pap_1_attributes" "264 ; 0.0 ; 263 ; 0.0 ; 1 ; 2.2 ; 2 ; 4.0 ; 6 ; 1.1 ; 26 ; 450 ; 149 ; 30 ; 868 ; 0 ; 122 ; 2.2" "pap_1_ignore_upgrades" "1" "pap_1_int_ability_onequip" "60" - "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_1_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_1_weapon_bodygroup" "32768" "pap_1_weapon_custom_size" "1.0" "pap_1_weapon_custom_size_viewmodel" "1.0" @@ -13814,7 +13843,7 @@ "pap_2_ignore_upgrades" "1" "pap_2_int_ability_onequip" "60" "pap_2_func_attack2" "Weapon_FlagellantMelee_M2" - "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_2_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_2_weapon_bodygroup" "32768" "pap_2_weapon_custom_size" "1.0" "pap_2_weapon_custom_size_viewmodel" "1.0" @@ -13833,7 +13862,7 @@ "pap_3_ignore_upgrades" "1" "pap_3_int_ability_onequip" "60" "pap_3_func_attack2" "Weapon_FlagellantMelee_M2" - "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_3_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_3_weapon_bodygroup" "32768" "pap_3_weapon_custom_size" "1.0" "pap_3_weapon_custom_size_viewmodel" "1.0" @@ -13852,7 +13881,7 @@ "pap_4_ignore_upgrades" "1" "pap_4_int_ability_onequip" "60" "pap_4_func_attack2" "Weapon_FlagellantMelee_M2" - "pap_4_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_4_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_4_weapon_bodygroup" "32768" "pap_4_weapon_custom_size" "1.0" "pap_4_weapon_custom_size_viewmodel" "1.0" @@ -13872,7 +13901,7 @@ "pap_5_int_ability_onequip" "60" "pap_5_func_attack2" "Weapon_FlagellantMelee_M2" "pap_5_viewmodel_force_class" "3" //3 is soldier, needed cus of charge. - "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_5_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_5_weapon_bodygroup" "32768" "pap_5_weapon_custom_size" "1.0" "pap_5_weapon_custom_size_viewmodel" "1.0" @@ -13890,7 +13919,7 @@ "pap_6_ignore_upgrades" "1" "pap_6_int_ability_onequip" "60" "pap_6_func_attack2" "Weapon_FlagellantMelee_M2" - "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "pap_6_model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "pap_6_weapon_bodygroup" "32768" "pap_6_weapon_custom_size" "1.0" "pap_6_weapon_custom_size_viewmodel" "1.0" @@ -15287,7 +15316,7 @@ "desc" "Taurus Revolver Desc" "classname" "tf_weapon_revolver" "index" "61" - "attributes" "3 ; 0.0 ; 2 ; 10.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 8.5 ; 4 ; 0.80 ; 122 ; 0.0 ; 57 ; 2" + "attributes" "4044 ; 1.3 ; 3 ; 0.0 ; 2 ; 10.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 8.5 ; 4 ; 0.80 ; 122 ; 0.0 ; 57 ; 2" "ammo" "19" "ignore_upgrades" "1" @@ -15303,7 +15332,7 @@ "pap_1_desc" "Taurus Revolver Pap 1" "pap_1_classname" "tf_weapon_revolver" "pap_1_index" "61" - "pap_1_attributes" "3 ; 0.0 ; 2 ; 25.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 7.5 ; 4 ; 0.80 ; 122 ; 1.0 ; 26 ; 100 ; 57 ; 4" + "pap_1_attributes" "4044 ; 1.3 ; 3 ; 0.0 ; 2 ; 25.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 7.5 ; 4 ; 0.80 ; 122 ; 1.0 ; 26 ; 100 ; 57 ; 4" "pap_1_ammo" "19" "pap_1_ignore_upgrades" "1" "pap_1_int_ability_onequip" "139" @@ -15320,7 +15349,7 @@ "pap_2_desc" "Taurus Revolver Last Pap" "pap_2_classname" "tf_weapon_revolver" "pap_2_index" "61" - "pap_2_attributes" "3 ; 0.0 ; 2 ; 80.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 6.5 ; 4 ; 0.80 ; 122 ; 2.0 ; 26 ; 150 ; 57 ; 8" + "pap_2_attributes" "4044 ; 1.3 ; 3 ; 0.0 ; 2 ; 80.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 6.5 ; 4 ; 0.80 ; 122 ; 2.0 ; 26 ; 150 ; 57 ; 8" "pap_2_ammo" "19" "pap_2_ignore_upgrades" "1" "pap_2_int_ability_onequip" "139" @@ -15337,7 +15366,7 @@ "pap_3_desc" "Taurus Revolver Last Pap 3" "pap_3_classname" "tf_weapon_revolver" "pap_3_index" "61" - "pap_3_attributes" "3 ; 0.0 ; 2 ; 180.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 6.5 ; 4 ; 0.80 ; 122 ; 3.0 ; 26 ; 200 ; 57 ; 14" + "pap_3_attributes" "4044 ; 1.3 ; 3 ; 0.0 ; 2 ; 180.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 6.5 ; 4 ; 0.80 ; 122 ; 3.0 ; 26 ; 200 ; 57 ; 14" "pap_3_ammo" "19" "pap_3_ignore_upgrades" "1" "pap_3_int_ability_onequip" "139" @@ -15354,7 +15383,7 @@ "pap_4_desc" "Taurus Revolver Last Pap" "pap_4_classname" "tf_weapon_revolver" "pap_4_index" "61" - "pap_4_attributes" "3 ; 0.0 ; 2 ; 360.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 5.5 ; 4 ; 0.80 ; 122 ; 4.0 ; 26 ; 350 ; 57 ; 20" + "pap_4_attributes" "4044 ; 1.3 ; 3 ; 0.0 ; 2 ; 360.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 5.5 ; 4 ; 0.80 ; 122 ; 4.0 ; 26 ; 350 ; 57 ; 20" "pap_4_ammo" "19" "pap_4_ignore_upgrades" "1" "pap_4_int_ability_onequip" "139" @@ -15371,7 +15400,7 @@ "pap_5_desc" "Taurus Revolver Last Pap" "pap_5_classname" "tf_weapon_revolver" "pap_5_index" "61" - "pap_5_attributes" "3 ; 0.0 ; 2 ; 640.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 5.5 ; 4 ; 0.80 ; 122 ; 5.0 ; 26 ; 650 ; 57 ; 25" + "pap_5_attributes" "4044 ; 1.3 ; 3 ; 0.0 ; 2 ; 640.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 5.5 ; 4 ; 0.80 ; 122 ; 5.0 ; 26 ; 650 ; 57 ; 25" "pap_5_ammo" "19" "pap_5_ignore_upgrades" "1" "pap_5_int_ability_onequip" "139" @@ -15388,7 +15417,7 @@ "pap_6_desc" "Taurus Revolver Last Pap" "pap_6_classname" "tf_weapon_revolver" "pap_6_index" "61" - "pap_6_attributes" "3 ; 0.0 ; 2 ; 1000.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 5.5 ; 4 ; 0.80 ; 122 ; 6.0 ; 26 ; 950 ; 57 ; 30" + "pap_6_attributes" "4044 ; 1.3 ; 3 ; 0.0 ; 2 ; 1000.0 ; 5 ; 1.7 ; 6 ; 1.0 ; 97 ; 5.5 ; 4 ; 0.80 ; 122 ; 6.0 ; 26 ; 950 ; 57 ; 30" "pap_6_ammo" "19" "pap_6_ignore_upgrades" "1" "pap_6_int_ability_onequip" "139" @@ -19083,7 +19112,7 @@ "func_attack_immediate" "Weapon_SeaHealingPap_M1" "func_attack2" "Weapon_SeaHealingPap_M2" - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_bodygroup" "128" "weapon_custom_size" "0.85" "weapon_custom_size_viewmodel" "0.60" @@ -19527,6 +19556,26 @@ "lag_comp_dont_move_building" "1" "int_ability_onequip" "27" } + "Teutonic Longsword Shadow" + { + "cost" "0" + "desc" "Kill." + "ignore_equip_region" "1" + + "classname" "tf_weapon_sword" + "index" "154" + "attributes" "476 ; 0" + "hidden" "1" + "modif_attackspeed_anim" "1.2" + "model_weapon_override" "models/weapons/c_models/c_claymore/c_claymore.mdl" + "weapon_sound_index_override" "132" + + "lag_comp" "0" + "lag_comp_collision" "0" + "lag_comp_extend_boundingbox" "0" + "lag_comp_dont_move_building" "1" + "int_ability_onequip" "27" + } "Irene's Handcannon" { "cost" "0" @@ -19978,7 +20027,7 @@ "lag_comp_extend_boundingbox" "1" "lag_comp_dont_move_building" "0" "weapon_archetype" "3" - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_bodygroup" "16" "weapon_custom_size" "1.3" "weapon_custom_size_viewmodel" "1.3" @@ -20040,7 +20089,7 @@ "classname" "tf_weapon_smg" "index" "203" - "attributes" "2 ; 150.0 ; 6 ; 0.485 ; 106 ; 1.5 ; 303 ; -1 ; 4014 ; -1" + "attributes" "2 ; 200.0 ; 6 ; 0.485 ; 106 ; 1.5 ; 303 ; -1 ; 4014 ; -1" "ammo" "3" "ignore_upgrades" "1" @@ -20052,7 +20101,7 @@ "lag_comp_dont_move_building" "0" "lag_comp_block_internal" "1" //Idk why but i need this. "weapon_archetype" "4" - "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" + "model_weapon_override" "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" "weapon_bodygroup" "0" "viewmodel_force_class" "3" "no_clip" "1" diff --git a/addons/sourcemod/gamedata/zombie_riot.txt b/addons/sourcemod/gamedata/zombie_riot.txt index 4f6ccea2b5..8f1d9b0d7c 100644 --- a/addons/sourcemod/gamedata/zombie_riot.txt +++ b/addons/sourcemod/gamedata/zombie_riot.txt @@ -4,34 +4,12 @@ { "Signatures" { - "CWeaponMedigun::CreateMedigunShield" - { - // find entity_medigun_shield string with more then just 1 block, the main fuction, - //exit that and there should only be 1 function where its contained - //thats it. - - "windows64" "\x48\x89\x74\x24\x10\x57\x48\x83\xEC\x30\x8B\x91\x58\x0A\x00\x00" - "linux64" "@_ZN14CWeaponMedigun19CreateMedigunShieldEv" - - "windows" "\x55\x8B\xEC\x83\xEC\x34\x8B\x15\x2A\x2A\x2A\x2A" - "linux" "@_ZN14CWeaponMedigun19CreateMedigunShieldEv" - } - "CTFBaseBoss::ResolvePlayerCollision" - { - // Announcer.MVM_Tank_Planted, very bottom - //Long tthink function where you are in right now, very bottom again, has a LOC_ and a sub_, if its long, thats probably it. - // "windows64" "\x48\x89\x74\x24\x10\x57\x48\x83\xEC\x30\x8B\x91\x58\x0A\x00\x00" - // "linux64" "@_ZN11CTFBaseBoss22ResolvePlayerCollisionEP9CTFPlayer" - - "windows" "\x53\x8B\xDC\x83\xEC\x08\x83\xE4\xF0\x83\xC4\x04\x55\x8B\x6B\x04\x89\x6C\x24\x04\x8B\xEC\x81\xEC\x68\x01\x00\x00\x56\x57" - "linux" "@_ZN11CTFBaseBoss22ResolvePlayerCollisionEP9CTFPlayer" - } "CTFPlayerShared::RecalculatePlayerBodygroups" { // string aPostInventoryA, most top function. // "windows64" "\x48\x89\x5C\x24\x08\x57\x48\x83\xEC\x20\x48\x8B\xD9\x48\x8B\x89\xC0\x01\x00\x00" - // "linux64" "@_ZN15CTFPlayerShared27RecalculatePlayerBodygroupsEv" + "linux64" "@_ZN15CTFPlayerShared27RecalculatePlayerBodygroupsEv" "windows" "\x56\x8B\xF1\x57\x8B\x8E\x8C\x01\x00\x00\x83\xB9\xA0\x03\x00\x00\x00" "linux" "@_ZN15CTFPlayerShared27RecalculatePlayerBodygroupsEv" @@ -41,6 +19,7 @@ "CTFGameRules::IsQuickBuildTime" { "linux" "@_ZN12CTFGameRules16IsQuickBuildTimeEv" + "linux64" "@_ZN12CTFGameRules16IsQuickBuildTimeEv" "windows" "\x80\xB9\x72\x0C\x00\x00\x00\x74\x2A\x80\xB9\xD1\x03\x00\x00\x00" } "CBasePlayer::SnapEyeAngles" @@ -59,7 +38,7 @@ // string "TRAIN(%s); Blocked by %s\n" // inside a very tall block, bottom call, this call is modearetly sized and has no strings. // "windows64" "\x48\x89\x5C\x24\x10\x57\x48\x83\xEC\x40\xF3\x0F\x10\x81\x2C\x03\x00\x00" - // "linux64" "@_ZN11CBaseEntity14SetAbsVelocityERK6Vector" + "linux64" "@_ZN11CBaseEntity14SetAbsVelocityERK6Vector" "windows" "\x55\x8B\xEC\x83\xEC\x18\x53\x56\x8B\x75\x08\x8B\xD9\xF3\x0F\x10\x06" "linux" "@_ZN11CBaseEntity14SetAbsVelocityERK6Vector" @@ -69,7 +48,7 @@ // string "spellbook_stealth" in a very long call, directly the sub_ above it. // "windows64" "\x48\x89\x5C\x24\x10\x57\x48\x83\xEC\x40\xF3\x0F\x10\x81\x2C\x03\x00\x00" - // "linux64" "@_ZN12CTFSpellBook15CastSelfStealthEP9CTFPlayer" + "linux64" "@_ZN12CTFSpellBook15CastSelfStealthEP9CTFPlayer" "windows" "\x55\x8B\xEC\xD9\x05\x2A\x2A\x2A\x2A\x56\x8B\x75\x08\x6A\x00" "linux" "@_ZN12CTFSpellBook15CastSelfStealthEP9CTFPlayer" @@ -78,17 +57,20 @@ "UTIL_RemoveImmediate" { "linux" "@_Z20UTIL_RemoveImmediateP11CBaseEntity" + "linux64" "@_Z20UTIL_RemoveImmediateP11CBaseEntity" "windows" "\x55\x8B\xEC\x56\x8B\x75\x08\x85\xF6\x0F\x84\x2A\x2A\x2A\x2A\xF6\x86\x3C\x01\x00\x00\x01" } "CTFPlayer::TeamFortress_SetSpeed()" { "linux" "@_ZN9CTFPlayer21TeamFortress_SetSpeedEv" + "linux64" "@_ZN9CTFPlayer21TeamFortress_SetSpeedEv" "windows" "\x55\x8B\xEC\x83\xEC\x24\xA1\x2A\x2A\x2A\x2A\x56\x8B\xF1\x89\x75\xF0" } "CTFPlayer::Taunt" { "library" "server" "linux" "@_ZN9CTFPlayer5TauntE8taunts_ti" + "linux64" "@_ZN9CTFPlayer5TauntE8taunts_ti" "windows" "\x55\x8B\xEC\x81\xEC\xD0\x00\x00\x00\x53\x56\x57\x8B\xF9\xE8" } "NextBotGroundLocomotion::UpdateGroundConstraint" @@ -108,21 +90,15 @@ "library" "server" "linux" "@_ZN17CBaseCombatWeapon12FinishReloadEv" + "linux64" "@_ZN17CBaseCombatWeapon12FinishReloadEv" "windows" "\x56\x8B\xF1\x8B\x06\x8B\x80\xF8\x06\x00\x00\xFF\xD0\x84\xC0\x74\x2A\xC6\x86\xD8\x05\x00\x00\x00" } - "CTFPlayer::CanAirDash" - { - //air_dash_count, smaller function. - "library" "server" - - "linux" "@_ZNK9CTFPlayer10CanAirDashEv" - "windows" "\x55\x8B\xEC\x83\xEC\x08\x53\x57\x8B\xF9\x8B\x87\xBC\x1B\x00\x00" - } "CBaseAnimating::GetBoneCache" { "library" "server" "linux" "@_ZN14CBaseAnimating12GetBoneCacheEv" + "linux64" "@_ZN14CBaseAnimating12GetBoneCacheEv" } "CTFPlayer::GetChargeEffectBeingProvided" { @@ -132,16 +108,9 @@ "library" "server" "linux" "@_ZN9CTFPlayer28GetChargeEffectBeingProvidedEv" + "linux64" "@_ZN9CTFPlayer28GetChargeEffectBeingProvidedEv" "windows" "\x55\x8B\xEC\x51\x56\x8B\xF1\x8D\x86\xCC\x22\x00\x00" } - "CTFPlayer::RegenThink" - { - //string RegenThink, small function - "library" "server" - - "linux" "@_ZN9CTFPlayer10RegenThinkEv" - "windows" "\x55\x8B\xEC\x83\xEC\x7C\x56\x8B\xF1\x8B\x06" - } "CBaseEntity::SetLocalOrigin" // String aBadSetlocalori, Bad SetLocalOrigin(%f,%f,%f) on %s\n { "library" "server" @@ -149,12 +118,13 @@ // "windows64" "\x48\x89\x5C\x24\x10\x48\x89\x74\x24\x18\x57\x48\x83\xEC\x50\xF3\x0F\x10\x0D\xE1\x45\xA4\x00" "linux" "@_ZN11CBaseEntity14SetLocalOriginERK6Vector" + "linux64" "@_ZN11CBaseEntity14SetLocalOriginERK6Vector" "windows" "\x55\x8B\xEC\x83\xEC\x08\xF3\x0F\x10\x0D\x2A\x2A\x2A\x2A\x56\x8B\x75\x08\x0F\x28\xC1\x0F\x57\x05\x2A\x2A\x2A\x2A\x57\x8B\xF9\xF3\x0F\x10\x16\x0F\x2F\xD0\x89\x7D\xF8\x0F\x86\x2A\x2A\x2A\x2A\x0F\x2F\xCA\x0F\x86\x2A\x2A\x2A\x2A\xF3\x0F\x10\x5E\x04\x0F\x2F\xD8\x0F\x86\x2A\x2A\x2A\x2A\x0F\x2F\xCB\x0F\x86\x2A\x2A\x2A\x2A\xF3\x0F\x10\x5E\x08\x0F\x2F\xD8\x0F\x86\x2A\x2A\x2A\x2A\x0F\x2F\xCB\x0F\x86\x2A\x2A\x2A\x2A\x0F\x2E\x97\x40\x03\x00\x00" } "CBaseEntity::SetLocalAngles" // String aBadSetlocalori, Bad SetLocalAngles(%f,%f,%f) on %s\ { "library" "server" - // "linux64" "@_ZN11CBaseEntity14SetLocalAnglesERK6QAngle" + "linux64" "@_ZN11CBaseEntity14SetLocalAnglesERK6QAngle" // "windows64" "\x48\x89\x5C\x24\x10\x48\x89\x74\x24\x18\x57\x48\x83\xEC\x50\xF3\x0F\x10\x0D\xE1\x45\xA4\x00" "linux" "@_ZN11CBaseEntity14SetLocalAnglesERK6QAngle" @@ -164,7 +134,7 @@ "CBaseEntity::SetAbsOrigin" // String models/airboat.mdl, look up, first call { "library" "server" - // "linux64" "@_ZN11CBaseEntity12SetAbsOriginERK6Vector" + "linux64" "@_ZN11CBaseEntity12SetAbsOriginERK6Vector" // "windows64" "\x48\x89\x5C\x24\x08\x57\x48\x83\xEC\x70\x48\x8B\xFA" "linux" "@_ZN11CBaseEntity12SetAbsOriginERK6Vector" @@ -173,7 +143,7 @@ "CBaseEntity::SetAbsAngles" // String models/airboat.mdl, look up, 2nd call { "library" "server" - // "linux64" "@_ZN11CBaseEntity12SetAbsAnglesERK6QAngle" + "linux64" "@_ZN11CBaseEntity12SetAbsAnglesERK6QAngle" // "windows64" "\x48\x89\x5C\x24\x18\x56\x48\x81\xEC\xA0\x00\x00\x00\x48\x8B\xF2" "linux" "@_ZN11CBaseEntity12SetAbsAnglesERK6QAngle" @@ -183,6 +153,7 @@ { "library" "server" "linux" "@_ZN14CBaseAnimating19InvalidateBoneCacheEv" + "linux64" "@_ZN14CBaseAnimating19InvalidateBoneCacheEv" "windows" "\xFF\xB1\x6C\x04\x00\x00" } "CTFProjectile_HealingBolt::ImpactTeamPlayer()" @@ -237,6 +208,7 @@ "library" "server" "linux" "@_ZN14CWeaponMedigun19AllowedToHealTargetEP11CBaseEntity" + "linux64" "@_ZN14CWeaponMedigun19AllowedToHealTargetEP11CBaseEntity" "windows" "\x55\x8B\xEC\x53\x8B\xD9\x56\x57\x8B\x93\x10\x02\x00\x00\x85\xD2\x0F\x84\x2A\x2A\x2A\x2A\xB9\xFF\x1F\x00\x00\x83\xFA\xFF\x74\x2A\x0F\xB7\xCA\xA1\x2A\x2A\x2A\x2A\xC1\xE1\x04\x8D\x78\x04\x03\xF9\x0F\x84\x2A\x2A\x2A\x2A\xC1\xEA\x10\x39\x57\x04\x0F\x85\x2A\x2A\x2A\x2A\x8B\x3F\x85\xFF\x0F\x84\x2A\x2A\x2A\x2A\x8B\x07\x8B\xCF\x8B\x80\x4C\x01\x00\x00\xFF\xD0\x84\xC0\x0F\x84\x2A\x2A\x2A\x2A\x8B\x75\x08\x85\xF6\x74\x2A" } "PassServerEntityFilter" @@ -261,7 +233,7 @@ { // semi-unique xref "PlayerLoadoutUpdated" "library" "server" - // "linux64" "@_ZN9CTFPlayer20ManageRegularWeaponsEP19TFPlayerClassData_t" + "linux64" "@_ZN9CTFPlayer20ManageRegularWeaponsEP19TFPlayerClassData_t" // "windows64" "\x48\x8B\xC4\x48\x89\x50\x10\x55\x53\x56\x57\x41\x54\x41\x55" "linux" "@_ZN9CTFPlayer20ManageRegularWeaponsEP19TFPlayerClassData_t" @@ -272,6 +244,7 @@ { "library" "server" "linux" "@_ZN15CTFPlayerShared24RecalculateChargeEffectsEb" + "linux64" "@_ZN15CTFPlayerShared24RecalculateChargeEffectsEb" "windows" "\x55\x8B\xEC\x83\xEC\x38\x53\x56\x57\x8B\xF9\xC7\x45\xCC\x00\x00\x00\x00" } "CTFWeaponBaseMelee::GetShootSound" @@ -289,7 +262,7 @@ "library" "server" // string "Halloween.EyeballBossStunned" and "Max Eyeball DPS taken = %3.2f\n" // "windows64" "\x41\x56\x48\x83\xEC\x20\x48\x8B\x05\xBB\x38\xB4\x00" - // "linux64" "@_ZN14CBaseAnimating17ResetSequenceInfoEv" + "linux64" "@_ZN14CBaseAnimating17ResetSequenceInfoEv" "windows" "\x55\x8B\xEC\x51\x56\x8B\xF1\x83\xBE\xD8\x03\x00\x00\xFF" "linux" "@_ZN14CBaseAnimating17ResetSequenceInfoEv" @@ -304,16 +277,6 @@ "linux" "@_ZN15CTFPlayerShared13PulseRageBuffENS_13ERageBuffSlotE" "windows" "\x55\x8B\xEC\x83\xEC\x14\x33\xC0" } - "CTFWeaponBaseMelee::DoSwingTraceInternal" - { - //string "melee_range_multiplier" - "library" "server" - "linux64" "@_ZN18CTFWeaponBaseMelee20DoSwingTraceInternalER10CGameTracebP10CUtlVectorIS0_10CUtlMemoryIS0_iEE" - "windows64" "\x48\x89\x74\x24\x18\x55\x57\x41\x55\x41\x56\x41\x57\x48\x8D\xAC\x24\xA0\xF6\xFF\xFF" - - "linux" "@_ZN18CTFWeaponBaseMelee20DoSwingTraceInternalER10CGameTracebP10CUtlVectorIS0_10CUtlMemoryIS0_iEE" - "windows" "\x53\x8B\xDC\x83\xEC\x08\x83\xE4\xF0\x83\xC4\x04\x55\x8B\x6B\x04\x89\x6C\x24\x04\x8B\xEC\x81\xEC\x38\x05\x00\x00" - } "CTFGCServerSystem::PreClientUpdate" { // "You must set maxplayers to 32 to host Mann vs. Machine\n" @@ -330,11 +293,13 @@ "library" "server" "windows" "\x55\x8B\xEC\x57\x8B\x7D\x08\x85\xFF\x75\x2A\x33\xC0\x5F\x5D\xC3\x53" "linux" "@_Z14LookupActivityP10CStudioHdrPKc" + "linux64" "@_Z14LookupActivityP10CStudioHdrPKc" } "CTraceFilterSimple::ShouldHitEntity" { "library" "server" "linux" "@_ZN18CTraceFilterSimple15ShouldHitEntityEP13IHandleEntityi" + "linux64" "@_ZN18CTraceFilterSimple15ShouldHitEntityEP13IHandleEntityi" "windows" "\x55\x8B\xEC\x57\xFF\x75\x0C\x8B\xF9\xFF\x75\x08\xE8\x2A\x2A\x2A\x2A\x83\xC4\x08" } "CGameEventManager::CreateEvent" // Look for string "CreateEvent: event '%s' not registered." @@ -356,6 +321,7 @@ "CPlayerMove::SetupMove" { "linux" "@_ZN11CPlayerMove9SetupMoveEP11CBasePlayerP8CUserCmdP11IMoveHelperP9CMoveData" + "linux64" "@_ZN11CPlayerMove9SetupMoveEP11CBasePlayerP8CUserCmdP11IMoveHelperP9CMoveData" "windows" "\x55\x8B\xEC\x83\xEC\x60\x53\x56\x8B\x75\x14" } } @@ -417,27 +383,6 @@ } } } - "CWeaponMedigun::CreateMedigunShield" - { - "signature" "CWeaponMedigun::CreateMedigunShield" - "callconv" "thiscall" - "return" "void" - "this" "entity" - } - "CTFBaseBoss::ResolvePlayerCollision" - { - "signature" "CTFBaseBoss::ResolvePlayerCollision" - "callconv" "thiscall" - "return" "void" - "this" "entity" - "arguments" - { - "pPlayer" - { - "type" "cbaseentity" - } - } - } "CTFCrossbow::Holster" { "offset" "CTFCrossbow::Holster" @@ -460,28 +405,6 @@ "return" "bool" "this" "entity" } - "CTFWeaponBaseMelee::DoSwingTraceInternal" - { - "signature" "CTFWeaponBaseMelee::DoSwingTraceInternal" - "callconv" "thiscall" - "return" "bool" - "this" "entity" - "arguments" - { - "trace" - { - "type" "objectptr" - } - "bCleave" - { - "type" "bool" - } - "pTargetTraceVector" - { - "type" "vectorptr" - } - } - } "CTFGameRules::IsQuickBuildTime" { "signature" "CTFGameRules::IsQuickBuildTime" @@ -610,13 +533,6 @@ } } } - "CTFPlayer::CanAirDash" - { - "signature" "CTFPlayer::CanAirDash" - "callconv" "thiscall" - "return" "bool" - "this" "entity" - } "CBaseAnimating::GetBoneCache" { "signature" "CBaseAnimating::GetBoneCache" @@ -660,13 +576,6 @@ } } } - "CTFPlayer::RegenThink" - { - "signature" "CTFPlayer::RegenThink" - "callconv" "thiscall" - "return" "void" - "this" "entity" - } "CTFParticleCannon::FireChargedShot" { "offset" "CTFParticleCannon::FireChargedShot" @@ -944,6 +853,7 @@ "CGameRules::ShouldCollide" { "linux" "30" + "linux64" "30" "windows" "29" } "CGameEventManager::LoadEventsFromFile" @@ -957,133 +867,159 @@ { "windows" "156" "linux" "157" + "linux64" "157" } "CTFGrenadePipebombProjectile::PipebombTouch" { "windows" "261" "linux" "262" + "linux64" "262" } "CEconItemView::IterateAttributes" { "windows" "18" "linux" "19" + "linux64" "19" } "CWeaponMedigun::PrimaryAttack()" { "windows" "287" "linux" "293" + "linux64" "293" } "CTFPistol_ScoutPrimary::SecondaryAttack()" { "windows" "288" "linux" "294" + "linux64" "294" } "CTeamplayRules::FPlayerCanTakeDamage" { "windows" "63" "linux" "64" + "linux64" "64" } "CTFWeaponBase::FinishReload()" { "windows" "282" "linux" "288" + "linux64" "288" } "CBaseCombatWeapon::Reload()" { "windows" "284" "linux" "290" + "linux64" "290" } "CBasePlayer::EquipWearable" { "linux" "439" + "linux64" "439" "windows" "438" } "CBasePlayer::ForceRespawn" { "linux" "338" + "linux64" "338" "windows" "337" } "CBaseEntity::GetVectors" { "windows" "143" "linux" "144" + "linux64" "144" } "CTFParticleCannon::FireChargedShot" { "windows" "494" "linux" "501" + "linux64" "501" } "CBaseGrenade::Explode" { "linux" "237" + "linux64" "237" "windows" "236" } "CBaseGrenade::Detonate" { "linux" "238" + "linux64" "238" "windows" "237" } "CTFBaseRocket::Explode" { "linux" "241" + "linux64" "241" "windows" "240" } "CTFProjectile_SpellFireball::Explode" { "linux" "251" + "linux64" "251" "windows" "248" } "CBasePlayer::CheatImpulseCommands" { "linux" "380" + "linux64" "380" "windows" "379" } "CTFCrossbow::Holster" { "linux" "269" + "linux64" "269" "windows" "263" } "CBaseCombatWeapon::ItemPostFrame()" { "windows" "273" "linux" "279" + "linux64" "279" } //CBaseEntity is arbitrary. "CBaseEntity::UpdateTransmitState()" { "windows" "21" "linux" "22" + "linux64" "22" } "CBaseAnimating::RefreshCollisionBounds" { "windows" "219" "linux" "220" + "linux64" "220" } "IBody::GetSolidMask" { "windows" "81" "linux" "82" + "linux64" "82" } "CBaseAnimating::BecomeRagdollOnClient" { "windows" "206" "linux" "207" + "linux64" "207" } "CBaseBoss::m_bResolvePlayerCollisions" { // Offset from m_lastHealthPercentage "windows" "28" "linux" "28" + "linux64" "28" } "CServerGameDLL::GetTickInterval()" { "library" "server" "windows" "10" "linux" "10" + "linux64" "10" } "CBaseServerVehicle::SetupMove" { "linux" "4" + "linux64" "4" "windows" "4" } } diff --git a/addons/sourcemod/scripting/rpg_fortress/crafting.sp b/addons/sourcemod/scripting/rpg_fortress/crafting.sp index 9189d68d29..4a4d55f576 100644 --- a/addons/sourcemod/scripting/rpg_fortress/crafting.sp +++ b/addons/sourcemod/scripting/rpg_fortress/crafting.sp @@ -96,8 +96,6 @@ enum struct CraftEnum { DispatchKeyValue(entity, "targetname", "rpg_fortress"); DispatchKeyValue(entity, "model", this.Model); - //DispatchKeyValueFloat(entity, "modelscale", this.Scale); - //DispatchKeyValue(entity, "solid", "2"); SetEntPropFloat(entity, Prop_Send, "m_fadeMinDist", MIN_FADE_DISTANCE); SetEntPropFloat(entity, Prop_Send, "m_fadeMaxDist", MAX_FADE_DISTANCE); DispatchSpawn(entity); diff --git a/addons/sourcemod/scripting/rpg_fortress/custom/weapon_coin_flip.sp b/addons/sourcemod/scripting/rpg_fortress/custom/weapon_coin_flip.sp index c43d1505a8..cdd80034cb 100644 --- a/addons/sourcemod/scripting/rpg_fortress/custom/weapon_coin_flip.sp +++ b/addons/sourcemod/scripting/rpg_fortress/custom/weapon_coin_flip.sp @@ -161,7 +161,7 @@ public Action flip_extra(Handle timer, int client) SetEntProp(entity, Prop_Send, "m_usSolidFlags", 8); // Fire trigger even if not solid (8) - DispatchKeyValueFloat(entity, "modelscale", 0.65); + SetEntPropFloat(entity, Prop_Send, "m_flModelScale", 0.65); Coin_flip[client] = EntIndexToEntRef(entity); mb_coin[entity] = true; diff --git a/addons/sourcemod/scripting/rpg_fortress/mining.sp b/addons/sourcemod/scripting/rpg_fortress/mining.sp index 8e8e7a2379..8ec736c622 100644 --- a/addons/sourcemod/scripting/rpg_fortress/mining.sp +++ b/addons/sourcemod/scripting/rpg_fortress/mining.sp @@ -127,11 +127,11 @@ enum struct MineEnum { DispatchKeyValue(entity, "targetname", "rpg_fortress"); DispatchKeyValue(entity, "model", this.Model); - DispatchKeyValueFloat(entity, "modelscale", this.Scale); DispatchKeyValue(entity, "solid", "6"); SetEntPropFloat(entity, Prop_Send, "m_fadeMinDist", MIN_FADE_DISTANCE); SetEntPropFloat(entity, Prop_Send, "m_fadeMaxDist", MAX_FADE_DISTANCE); DispatchSpawn(entity); + SetEntPropFloat(entity, Prop_Send, "m_flModelScale", this.Scale); TeleportEntity(entity, this.Pos, this.Ang, NULL_VECTOR, true); b_is_a_brush[entity] = true; diff --git a/addons/sourcemod/scripting/rpg_fortress/plots.sp b/addons/sourcemod/scripting/rpg_fortress/plots.sp index 4ff23fd977..6c162c5f97 100644 --- a/addons/sourcemod/scripting/rpg_fortress/plots.sp +++ b/addons/sourcemod/scripting/rpg_fortress/plots.sp @@ -46,11 +46,11 @@ enum struct BlockEnum DispatchKeyValueInt(entity, "skin", this.Skin); DispatchKeyValue(entity, "solid", "6"); DispatchKeyValueInt(entity, "renderamt", this.Render); - DispatchKeyValueFloat(entity, "modelscale", this.Scale); DispatchKeyValue(entity, "rendercolor", this.Color); SetEntPropFloat(entity, Prop_Send, "m_fadeMinDist", MIN_FADE_DISTANCE); SetEntPropFloat(entity, Prop_Send, "m_fadeMaxDist", MAX_FADE_DISTANCE); DispatchSpawn(entity); + SetEntPropFloat(entity, Prop_Send, "m_flModelScale", this.Scale); for(int i; i < 3; i++) { @@ -259,8 +259,8 @@ void Plots_ZoneCached() DispatchKeyValue(prop, "targetname", "rpg_fortress"); DispatchKeyValue(prop, "model", PlatformModel); DispatchKeyValue(prop, "solid", "2"); - DispatchKeyValueFloat(prop, "modelscale", PlatformScale); DispatchSpawn(prop); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", PlatformScale); for(int i; i < 3; i++) { diff --git a/addons/sourcemod/scripting/rpg_fortress/rpg_core.sp b/addons/sourcemod/scripting/rpg_fortress/rpg_core.sp index 47f9900e44..f5e3e2d311 100644 --- a/addons/sourcemod/scripting/rpg_fortress/rpg_core.sp +++ b/addons/sourcemod/scripting/rpg_fortress/rpg_core.sp @@ -793,7 +793,7 @@ void RPGCore_ResourceReduction(int client, int amount, bool isformdrain = false) { Current_Mana[client] = 0; bool CancelDeform = false; - if(form.Func_FormEnergyRunOutLogic != INVALID_FUNCTION) + if(form.Func_FormEnergyRunOutLogic != INVALID_FUNCTION && form.Func_FormEnergyRunOutLogic != view_as(0)) { Call_StartFunction(null, form.Func_FormEnergyRunOutLogic); Call_PushCell(client); diff --git a/addons/sourcemod/scripting/rpg_fortress/store.sp b/addons/sourcemod/scripting/rpg_fortress/store.sp index 05912b904d..36fbdd688b 100644 --- a/addons/sourcemod/scripting/rpg_fortress/store.sp +++ b/addons/sourcemod/scripting/rpg_fortress/store.sp @@ -516,8 +516,8 @@ static void ReShowSettingsHud(int client) } menu2.AddItem("-42", buffer); - FormatEx(buffer, sizeof(buffer), "%t", "Taunt Speed increase"); - if(b_TauntSpeedIncrease[client]) + FormatEx(buffer, sizeof(buffer), "%t", "Display Backwards Walk Notif"); + if(b_BackwardsWalkNotif[client]) { FormatEx(buffer, sizeof(buffer), "%s %s", buffer, "[X]"); } @@ -961,13 +961,13 @@ public int Settings_MenuPage(Menu menu, MenuAction action, int client, int choic } case -71: { - if(b_TauntSpeedIncrease[client]) + if(b_BackwardsWalkNotif[client]) { - b_TauntSpeedIncrease[client] = false; + b_BackwardsWalkNotif[client] = false; } else { - b_TauntSpeedIncrease[client] = true; + b_BackwardsWalkNotif[client] = true; } ReShowSettingsHud(client); } @@ -1026,7 +1026,7 @@ void Store_ApplyAttribs(int client) float value; char buffer1[12]; - if(i_ClientHasCustomGearEquipped[client] > 1) + if(!i_ClientHasCustomGearEquipped[client]) { static ItemInfo info; char buffer2[32]; diff --git a/addons/sourcemod/scripting/rpg_fortress/textstore.sp b/addons/sourcemod/scripting/rpg_fortress/textstore.sp index fbafaf5d1c..08ecae0ad5 100644 --- a/addons/sourcemod/scripting/rpg_fortress/textstore.sp +++ b/addons/sourcemod/scripting/rpg_fortress/textstore.sp @@ -1788,9 +1788,6 @@ static void DropItem(int client, int index, float pos[3], int totalAmount) DispatchKeyValue(entity, "health", "1999999999"); DispatchKeyValue(entity, "targetname", "rpg_item"); - ang[1] = index == -1 ? -1.0 : kv.GetFloat("modelscale", -1.0); - if(ang[1] > 0.0) - DispatchKeyValueFloat(entity, "modelscale", ang[1]); if(index != -1) { @@ -1809,6 +1806,9 @@ static void DropItem(int client, int index, float pos[3], int totalAmount) TeleportEntity(entity, pos, NULL_VECTOR, vel, true); DispatchSpawn(entity); + ang[1] = index == -1 ? -1.0 : kv.GetFloat("modelscale", -1.0); + if(ang[1] > 0.0) + SetEntPropFloat(entity, Prop_Send, "m_flModelScale", ang[1]); // SetEntityCollisionGroup(entity, 2); // b_Is_Player_Projectile[entity] = true; SDKHook(entity, SDKHook_OnTakeDamage, RPG_HookDroppedItemDamageTaken); diff --git a/addons/sourcemod/scripting/rpg_fortress/unused/custom/wand/weapon_icicles.sp b/addons/sourcemod/scripting/rpg_fortress/unused/custom/wand/weapon_icicles.sp index bab6640cda..ed4a86500e 100644 --- a/addons/sourcemod/scripting/rpg_fortress/unused/custom/wand/weapon_icicles.sp +++ b/addons/sourcemod/scripting/rpg_fortress/unused/custom/wand/weapon_icicles.sp @@ -320,16 +320,13 @@ public Action Icicle_DamagingPillar(Handle timer, DataPack pack) SizeScale += (count * 0.1); SizeScale *= Scale; - char FloatString[8]; - FloatToString(SizeScale, FloatString, sizeof(FloatString)); - - DispatchKeyValue(prop, "modelscale", FloatString); DispatchKeyValueVector(prop, "origin", SpawnPropPos); direction[2] -= 180.0; direction[1] -= 180.0; direction[0] = -40.0; DispatchKeyValueVector(prop, "angles", direction); DispatchSpawn(prop); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", SizeScale); // TeleportEntity(prop, NULL_VECTOR, NULL_VECTOR, vel); SetEntityRenderMode(prop, RENDER_TRANSCOLOR); SetEntityRenderColor(prop, 125, 125, 255, 200); diff --git a/addons/sourcemod/scripting/shared/attributes.sp b/addons/sourcemod/scripting/shared/attributes.sp index 7d39acdda4..e514f8b3aa 100644 --- a/addons/sourcemod/scripting/shared/attributes.sp +++ b/addons/sourcemod/scripting/shared/attributes.sp @@ -737,13 +737,6 @@ float WeaponDamageAttributeMultipliers(int weapon, int Flags = MULTIDMG_NONE, in return DamageBonusLogic; } } -// DamageBonusLogic *= Attributes_Get(weapon, 1000, 1.0); //global dmg multi -#if defined ZR - if(i_CustomWeaponEquipLogic[weapon] != WEAPON_TEUTON_DEAD) -#endif - { - DamageBonusLogic *= Attributes_Get(weapon, 476, 1.0); //global dmg multi - } if(!(Flags & MULTIDMG_BLEED)) { diff --git a/addons/sourcemod/scripting/shared/convars.sp b/addons/sourcemod/scripting/shared/convars.sp index 09249be9b5..12639311a6 100644 --- a/addons/sourcemod/scripting/shared/convars.sp +++ b/addons/sourcemod/scripting/shared/convars.sp @@ -87,6 +87,7 @@ void ConVar_PluginStart() CvarKickPlayersAt = CreateConVar("zr_kickplayersat", "", "If the server is full, Do reroute or kick", FCVAR_DONTRECORD); CvarRerouteToIpAfk = CreateConVar("zr_rerouteipafk", "", "If the server is full, reroute", FCVAR_DONTRECORD); CvarSkillPoints = CreateConVar("zr_skillpoints", "1", "If skill points are enabled"); + zr_disable_barney_rename = CreateConVar("zr_disable_barney_rename", "0", "Disables Corrupted Barney's renaming (boring)"); CvarRogueSpecialLogic = CreateConVar("zr_roguespeciallogic", "0", "Incase your server wants to remove some restrictions off the roguemode."); CvarLeveling = CreateConVar("zr_playerlevels", "1", "If player levels are enabled"); CvarAutoSelectWave = CreateConVar("zr_autoselectwave", "0", "If to automatically set a wave on map start instead of running a vote"); diff --git a/addons/sourcemod/scripting/shared/core.sp b/addons/sourcemod/scripting/shared/core.sp index 1506e3c4b1..82bc10e6d3 100644 --- a/addons/sourcemod/scripting/shared/core.sp +++ b/addons/sourcemod/scripting/shared/core.sp @@ -90,6 +90,7 @@ enum //edit: No, makes you miss more often. bool EnableSilentMode = false; +int CurrentEdictStrikes = 0; //Comment this out, and reload the plugin once ingame if you wish to have infinite cash. public const float OFF_THE_MAP[3] = { 16383.0, 16383.0, -16383.0 }; @@ -187,7 +188,7 @@ bool b_MarkForReload = false; //When you wanna reload the plugin on map change.. //model uses self made IK rigs, to not break the top stuff. #define COMBINE_CUSTOM_2_MODEL "models/zombie_riot/combine_attachment_police_secondmodel_24.mdl" -#define WEAPON_CUSTOM_WEAPONRY_1 "models/zombie_riot/weapons/custom_weaponry_1_52.mdl" +#define WEAPON_CUSTOM_WEAPONRY_1 "models/zombie_riot/weapons/custom_weaponry_1_57.mdl" /* 1 - sensal scythe 2 - scythe_throw @@ -494,6 +495,7 @@ int f_ArrowTrailParticle[MAXENTITIES]={INVALID_ENT_REFERENCE, ...}; bool b_IsEntityAlwaysTranmitted[MAXENTITIES]; bool b_IsEntityNeverTranmitted[MAXENTITIES]; int b_NoHealthbar[MAXENTITIES]; +bool b_MuteArrowSound[MAXENTITIES]; float f_AprilFoolsSetStuff[MAXENTITIES]; //Arrays for npcs! @@ -536,6 +538,7 @@ float fl_AttackHappensMinimum[MAXENTITIES]; float fl_AttackHappensMaximum[MAXENTITIES]; bool b_AttackHappenswillhappen[MAXENTITIES]; bool b_thisNpcIsABoss[MAXENTITIES]; +bool b_thisNpcIsAMiniboss[MAXENTITIES]; bool b_thisNpcIsARaid[MAXENTITIES]; //This is used for scaling. bool b_ShowNpcHealthbar[MAXENTITIES]; bool b_TryToAvoidTraverse[MAXENTITIES]; @@ -687,7 +690,7 @@ char c_HeadPlaceAttachmentGibName[MAXENTITIES][64]; float f_ExplodeDamageVulnerabilityNpc[MAXENTITIES]; #if defined ZR float f_DelayNextWaveStartAdvancingDeathNpc; -int Armor_Wearable[MAXPLAYERS]; +int Armor_Wearable_HudText[MAXPLAYERS]; int Cosmetic_WearableExtra[MAXPLAYERS]; #endif @@ -765,6 +768,7 @@ int OriginalWeapon_AmmoType[MAXENTITIES]; #include "stocks.sp" #include "wand_projectile.sp" + public Plugin myinfo = { name = "NPC Gamemode Core", @@ -1049,6 +1053,7 @@ void Core_PrecacheGlobalCustom() public void OnMapStart() { AntiSpamTipGive = 0.0; + CurrentEdictStrikes = 0; PrecacheSound("weapons/knife_swing_crit.wav"); PrecacheSound("weapons/shotgun/shotgun_dbl_fire.wav"); PrecacheSound("npc/vort/attack_shoot.wav"); @@ -1572,6 +1577,7 @@ public void OnClientPutInServer(int client) return; } #endif + BackwardsWarn[client] = 0.0; b_GivePlayerHint[client] = false; f_ClientConnectTime[client] = GetGameTime() + 30.0; //do cooldown upon connection. @@ -1698,6 +1704,7 @@ public void OnClientDisconnect(int client) b_DisplayDamageHud[client][0] = false; b_DisplayDamageHud[client][1] = false; + f_RepeatShowHudFor[client] = 0.0; #if defined ZR WeaponClass[client] = TFClass_Scout; @@ -1865,8 +1872,34 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3 } } } - static int holding[MAXPLAYERS]; + if(b_BackwardsWalkNotif[client]) + { + if(holding[client] & IN_BACK) + { + if(BackwardsWarn[client]) + { + if(BackwardsWarn[client] < GetGameTime()) + { + SetHudTextParams(-1.0, 0.6, 2.25, 255, 125, 125, 255); + ShowSyncHudText(client, SyncHud_Notifaction, "%T", "Backwards Setting", client); + BackwardsWarn[client] = FAR_FUTURE; + } + } + if(!(buttons & IN_BACK)) + { + if(BackwardsWarn[client] != FAR_FUTURE) + BackwardsWarn[client] = 0.0; + holding[client] &= ~IN_BACK; + } + } + else if(buttons & IN_BACK) + { + holding[client] |= IN_BACK; + if(BackwardsWarn[client] != FAR_FUTURE) + BackwardsWarn[client] = GetGameTime() + 3.0; + } + } if(holding[client] & IN_ATTACK) { if(!(buttons & IN_ATTACK)) @@ -2062,14 +2095,13 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3 AllowImpulse = false; } + f_CooldownForAbilities[client][1] = GetGameTime() + 0.5; if(AllowImpulse) { f_ClientReviveDelayReviveTime[client] = GetGameTime() + 1.0; if(DoInteractKeyLogic(angles, client)) return Plugin_Continue; } - - f_CooldownForAbilities[client][1] = GetGameTime() + 0.5; // force wait 1 second so it isnt activated automatically int weapon_holding = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon"); if(weapon_holding != -1) @@ -2536,17 +2568,27 @@ void SDKHook_TeamSpawn_SpawnPostInternal(int entity, int SpawnsMax = 2000000000, public void OnEntityCreated(int entity, const char[] classname) { - if(entity > CurrentEntities) - CurrentEntities = entity; - #if defined ZR + if (entity > 0 && entity <= MAXENTITIES) + { + if(entity > CurrentEntities) + { + CurrentEntities = entity; + //so each strike is closer to the limit. + if(CurrentEntities >= ((MAXENTITIES - 28) + (CurrentEdictStrikes * 4))) + { + EntityClearPanicButton(); + } + } + } + if (!StrContains(classname, "info_player_teamspawn")) { RequestFrame(SDKHook_TeamSpawn_SpawnPost, entity); } #endif // PrintToChatAll("entity: %i| Clkassname %s",entity, classname); - if (entity > 0 && entity <= 2048 && IsValidEntity(entity)) + if (entity > 0 && entity <= MAXENTITIES && IsValidEntity(entity)) { h_TransmitHookType[entity] = 0; f_TimeTillMeleeAttackShould[entity] = 0.0; @@ -2568,7 +2610,6 @@ public void OnEntityCreated(int entity, const char[] classname) i_PullTowardsTarget[entity] = 0; f_PullStrength[entity] = 0.0; #if defined ZR || defined RPG - Dungeon_SetEntityZone(entity, Zone_Unknown); CoinEntityCreated(entity); #endif //set it to 0! @@ -2585,6 +2626,7 @@ public void OnEntityCreated(int entity, const char[] classname) b_NoKnockbackFromSources[entity] = false; f_ExplodeDamageVulnerabilityNpc[entity] = 1.0; #if defined ZR + Dungeon_SetEntityZone(entity, Zone_Unknown); b_FaceStabber[entity] = false; i_CustomWeaponEquipLogic[entity] = -1; Resistance_for_building_High[entity] = 0.0; @@ -2730,14 +2772,17 @@ public void OnEntityCreated(int entity, const char[] classname) b_IsCustomProjectile[entity] = false; if(!StrContains(classname, "entity_revive_marker") || !StrContains(classname, "tf_projectile_energy_ring") - || !StrContains(classname, "entity_medigun_shield") || !StrContains(classname, "tf_projectile_energy_ball") || !StrContains(classname, "item_powerup_rune") || !StrContains(classname, "vgui_screen")) { SDKHook(entity, SDKHook_SpawnPost, Delete_instantly); } - if(!StrContains(classname, "tf_objective_resource")) + else if(!StrContains(classname, "entity_medigun_shield")) + { + SDKHook(entity, SDKHook_SpawnPost, Delete_instantly_Shield); + } + else if(!StrContains(classname, "tf_objective_resource")) { b_ThisEntityIgnored[entity] = true; b_ThisEntityIgnored_NoTeam[entity] = true; @@ -3095,6 +3140,11 @@ public void Delete_instantly(int entity) { RemoveEntity(entity); } +public void Delete_instantly_Shield(int entity) +{ + //StopSound(entity, "/weapons/medi_shield_deploy.wav"); + RemoveEntity(entity); +} public void MakeFlamesUseless(int entity) { //This makes the flamethrower itself do nothing. we do our own logic. @@ -3371,29 +3421,26 @@ public void TF2_OnConditionRemoved(int client, TFCond condition) { Viewchange_UpdateDelay(client); - if(!b_TauntSpeedIncrease[client]) + int weapon_holding = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon"); + if(weapon_holding != -1) { - int weapon_holding = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon"); - if(weapon_holding != -1) + static char classname[64]; + GetEntityClassname(weapon_holding, classname, sizeof(classname)); + if(TF2_GetClassnameSlot(classname, weapon_holding) == TFWeaponSlot_Melee) { - static char classname[64]; - GetEntityClassname(weapon_holding, classname, sizeof(classname)); - if(TF2_GetClassnameSlot(classname, weapon_holding) == TFWeaponSlot_Melee) - { - float attack_speed; + float attack_speed; + + attack_speed = 1.0 / Attributes_Get(weapon_holding, 6, 1.0); - attack_speed = 1.0 / Attributes_Get(weapon_holding, 6, 1.0); - - if(attack_speed > 5.0) - { - attack_speed *= 0.5; //Too fast! It makes animations barely play at all - } - Attributes_Set(client, 201, attack_speed); - } - else - { - Attributes_Set(client, 201, 1.0); + if(attack_speed > 5.0) + { + attack_speed *= 0.5; //Too fast! It makes animations barely play at all } + Attributes_Set(client, 201, attack_speed); + } + else + { + Attributes_Set(client, 201, 1.0); } } } @@ -3518,6 +3565,11 @@ public Action TF2Items_OnGiveNamedItem(int client, char[] classname, int index, #else if(!StrContains(classname, "tf_wear")) { + if(CurrentEdictStrikes >= 1) + { + //too many strikes + return Plugin_Stop; + } switch(index) { case 57, 131, 133, 231, 405, 406, 444, 608, 642, 1099, 1144: @@ -3796,7 +3848,7 @@ void ReviveClientFromOrToEntity(int target, int client, int extralogic = 0, int int entity, i; while(TF2U_GetWearable(target, entity, i)) { - if(entity == EntRefToEntIndex(Armor_Wearable[target]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; SetEntityRenderMode(entity, RENDER_NORMAL); @@ -3844,6 +3896,9 @@ public Action ReviveDisplayMessageDelay(Handle timer, int ref) { int downsleft; downsleft = 2; + if(ZR_Get_Modifier() == PREFIX_ONESTAND) + downsleft = 3; + downsleft -= i_AmountDowned[target]; if(downsleft <= 0) { @@ -4030,3 +4085,109 @@ void TakeDamage_DisableMVM() #endif */ } + + + +void EntityClearPanicButton() +{ + switch(CurrentEdictStrikes) + { + case 0: + { + CPrintToChatAll("{crimson}Strike 1: We almost hit the edict limit, an emergency fix was initiated! All Player cosmetics have been tempomarily removed"); + CPrintToChatAll("{crimson}Strike 1: We almost hit the edict limit, an emergency fix was initiated! All Player cosmetics have been tempomarily removed"); + CPrintToChatAll("{crimson}Strike 1: We almost hit the edict limit, an emergency fix was initiated! All Player cosmetics have been tempomarily removed"); + } + case 1: + { + CPrintToChatAll("{crimson}Strike 2: We almost hit the edict limit, an emergency fix was initiated! All Player cosmetics have been tempomarily removed, all projectiles and outlines are nuked"); + CPrintToChatAll("{crimson}Strike 2: We almost hit the edict limit, an emergency fix was initiated! All Player cosmetics have been tempomarily removed, all projectiles and outlines are nuked"); + CPrintToChatAll("{crimson}Strike 2: We almost hit the edict limit, an emergency fix was initiated! All Player cosmetics have been tempomarily removed, all projectiles and outlines are nuked"); + } + case 2: + { + CPrintToChatAll("{crimson} Strike 3+: We almost hit the edict limit, an emergency fix was initiated! All Non Raid npcs and all Projectiles have been deleted! Raids will no longer grant items!"); + CPrintToChatAll("{crimson} Strike 3+: We almost hit the edict limit, an emergency fix was initiated! All Non Raid npcs and all Projectiles have been deleted! Raids will no longer grant items!"); + CPrintToChatAll("{crimson} Strike 3+: We almost hit the edict limit, an emergency fix was initiated! All Non Raid npcs and all Projectiles have been deleted! Raids will no longer grant items!"); + } + } + int entity = -1; + if(CurrentEdictStrikes >= 1) + { + while((entity=FindEntityByClassname(entity, "zr_projectile_base")) != -1) + { + if(IsValidEntity(entity)) + { + RemoveEntity(entity); + } + } + entity = -1; + while((entity=FindEntityByClassname(entity, "tf_glow")) != -1) + { + if(IsValidEntity(entity)) + { + RemoveEntity(entity); + } + } + } + if(CurrentEdictStrikes >= 2) + { + entity = -1; + while((entity=FindEntityByClassname(entity, "zr_base_npc")) != -1) + { +#if defined ZR + if(IsValidEntity(entity) && GetTeam(entity) != TFTeam_Red && !b_thisNpcIsARaid[entity]) +#else + if(IsValidEntity(entity)) +#endif + { + i_RaidGrantExtra[entity] = 0; + b_DissapearOnDeath[entity] = true; + b_DoGibThisNpc[entity] = true; + SmiteNpcToDeath(entity); + SmiteNpcToDeath(entity); + SmiteNpcToDeath(entity); + SmiteNpcToDeath(entity); + } + } + } + if(CurrentEdictStrikes >= 1) + { + for(int client=1; client<=MaxClients; client++) + { + if(IsClientInGame(client)) + { + ApplyStatusEffect(client, client, "Terrified", 2.0); +#if defined ZR + UTIL_ScreenFade(client, 800, 0, 0x0001, 0, 0, 0, 200); +#endif + } + } + } + entity = -1; + while((entity=FindEntityByClassname(entity, "tf_wearable")) != -1) + { + if(!IsValidEntity(entity)) + continue; + int client = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity"); + if(!IsValidEntity(client)) + { + RemoveEntity(entity); + continue; + } + + if(EntRefToEntIndex(i_Viewmodel_PlayerModel[client]) == entity) + continue; + if(EntRefToEntIndex(i_Worldmodel_WeaponModel[client]) == entity) + continue; + if(EntRefToEntIndex(WeaponRef_viewmodel[client]) == entity) + continue; + + TF2_RemoveWearable(client, entity); + } + + CurrentEdictStrikes++; + if(CurrentEdictStrikes >= 2) + CurrentEdictStrikes = 2; +} + diff --git a/addons/sourcemod/scripting/shared/damage.sp b/addons/sourcemod/scripting/shared/damage.sp index 46b2379e9f..c5944136fe 100644 --- a/addons/sourcemod/scripting/shared/damage.sp +++ b/addons/sourcemod/scripting/shared/damage.sp @@ -245,7 +245,7 @@ stock bool Damage_PlayerVictim(int victim, int &attacker, int &inflictor, float if(!CheckInHud()) OnTakeDamage_ProvokedAnger(Victim_weapon); - damage = Player_OnTakeDamage_Equipped_Weapon_Logic(victim, attacker, inflictor, damage, damagetype, weapon, Victim_weapon, damagePosition); + damage = Player_OnTakeDamage_Equipped_Weapon_Logic(victim, attacker, inflictor, damage, damagetype, weapon, Victim_weapon, damagePosition, i_HexCustomDamageTypes[victim]); } damage = Custom_Inventory_PlayerOnTakeDamage(victim, attacker, damage); @@ -686,49 +686,71 @@ stock bool Damage_NPCVictim(int victim, int &attacker, int &inflictor, float &da void NpcArmorExtra(int victim, int &attacker, int &inflictor, float &damage, int &damagetype) { CClotBody npc = view_as(victim); - if(npc.m_flArmorCount > 0.0) + if(npc.m_flArmorCount <= 0.0) + return; + if(!CheckInHud()) { - if(!CheckInHud()) + if(damagetype & DMG_CLUB) { - if(damagetype & DMG_CLUB) + float SubtractBy = ((damage * ((npc.m_flArmorProtect - 1.0) * -1.0)) * 1.35); + npc.m_flArmorCount -= SubtractBy; + + //armored enemies get more damage. + int DisplayCritSoundTo; + if(attacker <= MaxClients) { - npc.m_flArmorCount -= ((damage * ((npc.m_flArmorProtect - 1.0) * -1.0)) * 1.35); - //armored enemies get more damage. - int DisplayCritSoundTo; - if(attacker <= MaxClients) - DisplayCritSoundTo = attacker; - else if(inflictor <= MaxClients) - DisplayCritSoundTo = inflictor; - - if(DisplayCritSoundTo > 0 && DisplayCritSoundTo <= MaxClients) + DisplayCritSoundTo = attacker; + f_ArmorDamageDeltHud[attacker] += SubtractBy; + } + else if(inflictor <= MaxClients) + { + DisplayCritSoundTo = inflictor; + f_ArmorDamageDeltHud[inflictor] += SubtractBy; + } + + if(DisplayCritSoundTo > 0 && DisplayCritSoundTo <= MaxClients) + { + bool PlaySound = false; + if(f_MinicritSoundDelay[DisplayCritSoundTo] < GetGameTime()) { - bool PlaySound = false; - if(f_MinicritSoundDelay[DisplayCritSoundTo] < GetGameTime()) - { - PlaySound = true; - f_MinicritSoundDelay[DisplayCritSoundTo] = GetGameTime() + 0.25; - } - - DisplayCritAboveNpc(victim, DisplayCritSoundTo, PlaySound,_,_,true); //Display crit above head + PlaySound = true; + f_MinicritSoundDelay[DisplayCritSoundTo] = GetGameTime() + 0.25; } + + DisplayCritAboveNpc(victim, DisplayCritSoundTo, PlaySound,_,_,true); //Display crit above head + } + } + else + { + float SubtractBy = ((damage * ((npc.m_flArmorProtect - 1.0) * -1.0))); + npc.m_flArmorCount -= SubtractBy; + if(attacker <= MaxClients) + { + f_ArmorDamageDeltHud[attacker] += SubtractBy; } - else + else if(inflictor <= MaxClients) { - npc.m_flArmorCount -= (damage * ((npc.m_flArmorProtect - 1.0) * -1.0)); + f_ArmorDamageDeltHud[inflictor] += SubtractBy; } } - damage *= npc.m_flArmorProtect; //negate damage - if(!CheckInHud()) - { - if(npc.m_iArmorType == 0) - npc.PlayHurtArmorSound(); + } + damage *= npc.m_flArmorProtect; //negate damage + if(!CheckInHud()) + { + if(npc.m_iArmorType == 0) + npc.PlayHurtArmorSound(); - if(npc.m_flArmorCount <= 0.0) //over damage, add as damage. + if(npc.m_flArmorCount <= 0.0) //over damage, add as damage. + { + //let melee be really good against armor and stuff to reward them. + damage -= npc.m_flArmorCount; + if(attacker <= MaxClients) { - //let melee be really good against armor and stuff to reward them. - damage -= npc.m_flArmorCount; + f_ArmorDamageDeltHud[attacker] += npc.m_flArmorCount; } + else if(inflictor <= MaxClients) + f_ArmorDamageDeltHud[inflictor] += npc.m_flArmorCount; } } } @@ -860,7 +882,7 @@ stock bool Damage_BuildingAttacker(int &attacker, float &damage) } #if defined ZR -static float Player_OnTakeDamage_Equipped_Weapon_Logic(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, int equipped_weapon, float damagePosition[3]) +static float Player_OnTakeDamage_Equipped_Weapon_Logic(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, int equipped_weapon, float damagePosition[3], int zr_custom_damage) { switch(i_CustomWeaponEquipLogic[equipped_weapon]) { @@ -884,17 +906,17 @@ static float Player_OnTakeDamage_Equipped_Weapon_Logic(int victim, int &attacker case WEAPON_MLYNAR: // weapon_ark { if(!CheckInHud()) - Player_OnTakeDamage_Mlynar(victim, damage, attacker, equipped_weapon); + Player_OnTakeDamage_Mlynar(victim, damage, attacker, equipped_weapon,0,zr_custom_damage); } case WEAPON_MLYNAR_PAP: // weapon_ark { if(!CheckInHud()) - Player_OnTakeDamage_Mlynar(victim, damage, attacker, equipped_weapon, 1); + Player_OnTakeDamage_Mlynar(victim, damage, attacker, equipped_weapon, 1,zr_custom_damage); } case WEAPON_MLYNAR_PAP_2: // weapon_ark { if(!CheckInHud()) - Player_OnTakeDamage_Mlynar(victim, damage, attacker, equipped_weapon, 2); + Player_OnTakeDamage_Mlynar(victim, damage, attacker, equipped_weapon, 2, zr_custom_damage); } case WEAPON_OCEAN, WEAPON_OCEAN_PAP, WEAPON_SPECTER, WEAPON_ULPIANUS, WEAPON_SKADI: { @@ -1378,10 +1400,15 @@ static stock float NPC_OnTakeDamage_Equipped_Weapon_Logic(int victim, int &attac { return PurgeKit_NPCTakeDamage_Rampager(attacker, victim, damage, weapon, damagetype); } - default: Weapon_AddonsCustom_NPCTakeDamage(attacker, victim, damage, weapon, damagePosition, damagetype); + case WEAPON_BRICK: + { + if(!CheckInHud()) + return Brick_NPCTakeDamage_Do(attacker, inflictor, victim, damage, weapon, damagetype); + } } #endif + #if defined RPG if(!CheckInHud()) { @@ -2142,7 +2169,7 @@ void EntityBuffHudShow(int victim, int attacker, char[] Debuff_Adder_left, char[ } #endif - char BufferAdd[6]; + char BufferAdd[12]; #if defined ZR if(Victoria_Support_RechargeTime(victim)) { @@ -2191,3 +2218,46 @@ void EntityBuffHudShow(int victim, int attacker, char[] Debuff_Adder_left, char[ } } } + + +float f_DamageWhen[MAXPLAYERS]; +void DownedOrKilledClient_Feedback(int client, int attacker, float damage, int damagetype) +{ + if(GetGameTime() == f_DamageWhen[client]) + return; + f_DamageWhen[client] = GetGameTime(); + char AttackerWho[128]; + if(attacker <= 0 || (attacker > 0 && (!b_ThisWasAnNpc[attacker] && !i_IsABuilding[attacker]))) + { + Format(AttackerWho, sizeof(AttackerWho), "%T", "Unknown", client); + } + else + { +#if defined ZR + if (b_NameNoTranslation[attacker]) + Format(AttackerWho, sizeof(AttackerWho), "%s",c_NpcName[attacker]); + else +#endif + Format(AttackerWho, sizeof(AttackerWho), "%T",c_NpcName[attacker], client); + + char prefix[255]; + StatusEffects_PrefixName(attacker, client, prefix, sizeof(prefix)); + + Format(AttackerWho, sizeof(AttackerWho), "%s%s",prefix,AttackerWho); + } + char c_DamageType[64]; + if((damagetype & DMG_TRUEDAMAGE)) + { + Format(c_DamageType, sizeof(c_DamageType), "%T","True Damage",client); + } + else if((damagetype & DMG_CLUB)) + { + Format(c_DamageType, sizeof(c_DamageType), "%T","Melee Damage",client); + } + else + { + Format(c_DamageType, sizeof(c_DamageType), "%T","Ranged Damage",client); + } + + SPrintToChat(client, "%T", "Last Hit Recieved info",client, AttackerWho, damage, c_DamageType, i_LatestHealthLeft[client]); +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/shared/dhooks.sp b/addons/sourcemod/scripting/shared/dhooks.sp index fb05921890..a8c8d8b75d 100644 --- a/addons/sourcemod/scripting/shared/dhooks.sp +++ b/addons/sourcemod/scripting/shared/dhooks.sp @@ -68,56 +68,47 @@ void DHook_Setup() { SetFailState("Failed to load gamedata (zombie_riot)."); } - - DHook_CreateDetour(gamedata, "CTFPlayer::CanAirDash", DHook_CanAirDashPre); - -#if !defined RTS + + //so it doesnt remove charge effects DHook_CreateDetour(gamedata, "CTFPlayer::GetChargeEffectBeingProvided", DHook_GetChargeEffectBeingProvidedPre, DHook_GetChargeEffectBeingProvidedPost); + //correct cosmetics (most of the time) DHook_CreateDetour(gamedata, "CTFPlayer::ManageRegularWeapons()", DHook_ManageRegularWeaponsPre, DHook_ManageRegularWeaponsPost); - DHook_CreateDetour(gamedata, "CTFPlayer::RegenThink", DHook_RegenThinkPre, DHook_RegenThinkPost); + //correct taunts with correct DHook_CreateDetour(gamedata, "CTFPlayer::Taunt", DHook_TauntPre, DHook_TauntPost); - //Borrowed from Mikusch, thanks! //https://github.com/Mikusch/MannVsMann/blob/db821cd173a53aad4cc499babbcbd118f4cea234/addons/sourcemod/scripting/mannvsmann/dhooks.sp#L315 - // - //prevents having 200 metal permanently DHook_CreateDetour(gamedata, "CTFGameRules::IsQuickBuildTime", DHookCallback_CTFGameRules_IsQuickBuildTime_Pre); -#endif g_DHookMedigunPrimary = DHook_CreateVirtual(gamedata, "CWeaponMedigun::PrimaryAttack()"); - - -#if defined ZR - g_DHookShouldCollide = CreateDynamicHook(gamedata, "CGameRules::ShouldCollide"); - DHook_CreateDetour(gamedata, "CTFProjectile_HealingBolt::ImpactTeamPlayer()", OnHealingBoltImpactTeamPlayer, _); - - DHook_CreateDetour(gamedata, "CTFBuffItem::BlowHorn", _, Dhook_BlowHorn_Post); - DHook_CreateDetour(gamedata, "CTFPlayerShared::PulseRageBuff()", Dhook_PulseFlagBuff,_); - g_DHookTakeDmgPlayer = DHook_CreateVirtual(gamedata, "CTeamplayRules::FPlayerCanTakeDamage"); - -#endif - DHook_CreateDetour(gamedata, "CTFWeaponBaseMelee::DoSwingTraceInternal", DHook_DoSwingTracePre, _); - DHook_CreateDetour(gamedata, "CWeaponMedigun::CreateMedigunShield", DHook_CreateMedigunShieldPre, _); - DHook_CreateDetour(gamedata, "CTFBaseBoss::ResolvePlayerCollision", DHook_ResolvePlayerCollisionPre, _); + //fixes server displaying only 10 at once in master server DHook_CreateDetour(gamedata, "CTFGCServerSystem::PreClientUpdate", DHook_PreClientUpdatePre, DHook_PreClientUpdatePost); + //Fixes healing DHook_CreateDetour(gamedata, "CTFSpellBook::CastSelfStealth", Dhook_StealthCastSpellPre, _); + //so it doesnt fuck with our medic logic DHook_CreateDetour(gamedata, "CTFPlayerShared::RecalculateChargeEffects", DHookCallback_RecalculateChargeEffects_Pre); + //fixes people talking with different class + DHook_CreateDetour(gamedata, "CTFPlayer::SpeakConceptIfAllowed()", SpeakConceptIfAllowed_Pre, SpeakConceptIfAllowed_Post); + //Fixes infinite point farm + DHook_CreateDetour(gamedata, "CTFGameRules::CalcPlayerScore", Detour_CalcPlayerScore); + //Fixes mediguns giving extra speed where it was not intended. + DHook_CreateDetour(gamedata, "CTFPlayer::TeamFortress_SetSpeed()", DHookCallback_TeamFortress_SetSpeed_Pre, DHookCallback_TeamFortress_SetSpeed_Post); g_DHookGrenadeExplode = DHook_CreateVirtual(gamedata, "CBaseGrenade::Explode"); g_DHookGrenade_Detonate = DHook_CreateVirtual(gamedata, "CBaseGrenade::Detonate"); - -#if !defined RTS - DHook_CreateDetour(gamedata, "CTFPlayer::SpeakConceptIfAllowed()", SpeakConceptIfAllowed_Pre, SpeakConceptIfAllowed_Post); - g_DHookScoutSecondaryFire = DHook_CreateVirtual(gamedata, "CTFPistol_ScoutPrimary::SecondaryAttack()"); -#endif g_detour_CTFGrenadePipebombProjectile_PipebombTouch = CheckedDHookCreateFromConf(gamedata, "CTFGrenadePipebombProjectile::PipebombTouch"); - - g_DHookRocketExplode = DHook_CreateVirtual(gamedata, "CTFBaseRocket::Explode"); g_DHookFireballExplode = DHook_CreateVirtual(gamedata, "CTFProjectile_SpellFireball::Explode"); g_DhookCrossbowHolster = DHook_CreateVirtual(gamedata, "CTFCrossbow::Holster"); +#if defined ZR + g_DHookShouldCollide = CreateDynamicHook(gamedata, "CGameRules::ShouldCollide"); + DHook_CreateDetour(gamedata, "CTFProjectile_HealingBolt::ImpactTeamPlayer()", OnHealingBoltImpactTeamPlayer, _); + DHook_CreateDetour(gamedata, "CTFBuffItem::BlowHorn", _, Dhook_BlowHorn_Post); + DHook_CreateDetour(gamedata, "CTFPlayerShared::PulseRageBuff()", Dhook_PulseFlagBuff,_); + g_DHookTakeDmgPlayer = DHook_CreateVirtual(gamedata, "CTeamplayRules::FPlayerCanTakeDamage"); +#endif + int offset = gamedata.GetOffset("CBaseEntity::UpdateTransmitState()"); g_DhookUpdateTransmitState = new DynamicHook(offset, HookType_Entity, ReturnType_Int, ThisPointer_CBaseEntity); @@ -129,25 +120,17 @@ void DHook_Setup() if(!ForceRespawn) LogError("[Gamedata] Could not find CBasePlayer::ForceRespawn"); -#if !defined RTS Handle dtWeaponFinishReload = DHookCreateFromConf(gamedata, "CBaseCombatWeapon::FinishReload()"); if (!dtWeaponFinishReload) { SetFailState("Failed to create detour %s", "CBaseCombatWeapon::FinishReload()"); } DHookEnableDetour(dtWeaponFinishReload, false, OnWeaponReplenishClipPre); DHookEnableDetour(dtWeaponFinishReload, true, OnWeaponReplenishClipPost); -#endif - - DHook_CreateDetour(gamedata, "CTFGameRules::CalcPlayerScore", Detour_CalcPlayerScore); HookItemIterateAttribute = DynamicHook.FromConf(gamedata, "CEconItemView::IterateAttributes"); m_Item = FindSendPropInfo("CEconEntity", "m_Item"); FindSendPropInfo("CEconEntity", "m_bOnlyIterateItemViewAttributes", _, _, m_bOnlyIterateItemViewAttributes); - - //Fixes mediguns giving extra speed where it was not intended. - //gamedata first try!! - DHook_CreateDetour(gamedata, "CTFPlayer::TeamFortress_SetSpeed()", DHookCallback_TeamFortress_SetSpeed_Pre, DHookCallback_TeamFortress_SetSpeed_Post); //https://github.com/CookieCat45/Risk-Fortress-2/blob/a98baf90d1074da6f82b53d30747aae354589b9a/scripting/rf2.sp#L281 @@ -324,24 +307,6 @@ public MRESReturn DHook_IterateAttributesPost(Address pThis, DHookParam hParams) return MRES_Ignored; } -//cancel melee, we have our own. -public MRESReturn DHook_DoSwingTracePre(int entity, DHookReturn returnHook, DHookParam param) -{ - returnHook.Value = false; - return MRES_Supercede; -} - -public MRESReturn DHook_CreateMedigunShieldPre(int entity, DHookReturn returnHook) -{ - return MRES_Supercede; -} - -public MRESReturn DHook_ResolvePlayerCollisionPre(int entity, DHookReturn returnHook) -{ - PrintToServer("DHook_ResolvePlayerCollisionPre"); - return MRES_Supercede; -} - public MRESReturn Dhook_StealthCastSpellPre(int entity, DHookReturn returnHook, DHookParam param) { returnHook.Value = true; @@ -1471,28 +1436,6 @@ void DHook_RespawnPlayer(int client) } #endif -public MRESReturn DHook_CanAirDashPre(int client, DHookReturn ret) -{ -#if defined RPG - int current = GetEntProp(client, Prop_Send, "m_iAirDash"); - int max_Value = Attributes_Airdashes(client); - - if(TF2_IsPlayerInCondition(client, TFCond_CritHype)) - max_Value += 4; - - if(current < max_Value) - { - ret.Value = true; - SetEntProp(client, Prop_Send, "m_iAirDash", current+1); - } - else -#endif - - { - ret.Value = false; - } - return MRES_Supercede; -} public MRESReturn DHook_DropAmmoPackPre(int client, DHookParam param) { @@ -1686,32 +1629,6 @@ public MRESReturn DHook_GetChargeEffectBeingProvidedPost(int client, DHookReturn } return MRES_Ignored; } - -bool WasMedicPreRegen[MAXPLAYERS]; - -public MRESReturn DHook_RegenThinkPre(int client, DHookParam param) -{ - if(TF2_GetPlayerClass(client) == TFClass_Medic) - { - WasMedicPreRegen[client] = true; - TF2_SetPlayerClass_ZR(client, TFClass_Scout, false, false); - } - else - { - WasMedicPreRegen[client] = false; - } - - return MRES_Ignored; -} - -public MRESReturn DHook_RegenThinkPost(int client, DHookParam param) -{ - if(WasMedicPreRegen[client]) - TF2_SetPlayerClass_ZR(client, TFClass_Medic, false, false); - - WasMedicPreRegen[client] = false; - return MRES_Ignored; -} #endif // Non-RTS /* diff --git a/addons/sourcemod/scripting/shared/events.sp b/addons/sourcemod/scripting/shared/events.sp index 48f850cd14..98b4a7bede 100644 --- a/addons/sourcemod/scripting/shared/events.sp +++ b/addons/sourcemod/scripting/shared/events.sp @@ -13,6 +13,7 @@ void Events_PluginStart() HookEvent("player_connect_client", OnPlayerConnect, EventHookMode_Pre); HookEvent("player_disconnect", OnPlayerConnect, EventHookMode_Pre); HookEvent("deploy_buff_banner", OnBannerDeploy, EventHookMode_Pre); + HookEvent("player_healed", PlayerHealEvent, EventHookMode_Pre); HookEvent("teams_changed", EventHook_TeamsChanged, EventHookMode_PostNoCopy); #if defined ZR HookEvent("teamplay_round_win", OnRoundEnd, EventHookMode_Pre); @@ -204,6 +205,18 @@ public Action OnPlayerTeam(Event event, const char[] name, bool dontBroadcast) return Plugin_Continue; } +public Action PlayerHealEvent(Event event, const char[] name, bool dontBroadcast) +{ + int patient = GetClientOfUserId(event.GetInt("patient")); + int healer = GetClientOfUserId(event.GetInt("healer")); + if(patient == healer) + { + //prevents medic self heal? + SetEntProp(patient, Prop_Send, "m_iHealth", GetEntProp(patient, Prop_Send, "m_iHealth") - event.GetInt("amount")); + return Plugin_Handled; + } + return Plugin_Continue; +} public Action OnBannerDeploy(Event event, const char[] name, bool dontBroadcast) { return Plugin_Handled; @@ -352,7 +365,15 @@ public void OnPlayerResupply(Event event, const char[] name, bool dontBroadcast) #endif b_ThisEntityIgnored[client] = true; - int weapon_index = Store_GiveSpecificItem(client, "Teutonic Longsword"); + int weapon_index; + if(view_as(Store_HasNamedItem(client, "Shadow's Letter"))) + { + weapon_index = Store_GiveSpecificItem(client, "Teutonic Longsword Shadow"); + } + else + { + weapon_index = Store_GiveSpecificItem(client, "Teutonic Longsword"); + } SetVariantInt(0); AcceptEntityInput(client, "SetBodyGroup"); if(!WasHereSinceStartOfWave(client)) @@ -386,7 +407,6 @@ public void OnPlayerResupply(Event event, const char[] name, bool dontBroadcast) TFClassType ClassForStats = WeaponClass[client]; Attributes_Set(weapon_index, 107, RemoveExtraSpeed(ClassForStats, 330.0)); - Attributes_Set(weapon_index, 476, 0.0); SetEntityCollisionGroup(client, 1); SetEntityCollisionGroup(weapon_index, 1); @@ -515,6 +535,8 @@ public void OnPlayerSpawn(Event event, const char[] name, bool dontBroadcast) #if defined ZR || defined RPG Thirdperson_PlayerSpawn(client); #endif + LastHitRef[client] = -1; + f_LatestDamageTaken[client] = 0.0; } } @@ -537,6 +559,8 @@ public Action OnPlayerDeath(Event event, const char[] name, bool dontBroadcast) #endif #if defined ZR + if (dieingstate[client] == 0) + DownedOrKilledClient_Feedback(client, EntRefToEntIndex(LastHitRef[client]), f_LatestDamageTaken[client], event.GetInt("damagebits")); Dungeon_PlayerDowned(client); UnequipDispenser(client, true); ArmorDisplayClient(client, true); @@ -569,6 +593,7 @@ public Action OnPlayerDeath(Event event, const char[] name, bool dontBroadcast) SDKHooks_UpdateMarkForDeath(client, true); PurnellDeathsound(client); Vehicle_Exit(client, true); + SdkHooks_SetAndUpdateArmorClientText(client); #endif #if defined RPG diff --git a/addons/sourcemod/scripting/shared/filenetwork.sp b/addons/sourcemod/scripting/shared/filenetwork.sp index c17090abc1..a246a1bbd5 100644 --- a/addons/sourcemod/scripting/shared/filenetwork.sp +++ b/addons/sourcemod/scripting/shared/filenetwork.sp @@ -88,6 +88,11 @@ stock void FileNetwork_LibraryAdded(const char[] name) SendNextFile(client); } } +#else + //Remove warning + if(name[0]) + return; + #endif } @@ -96,6 +101,10 @@ stock void FileNetwork_LibraryRemoved(const char[] name) #if defined _filenetwork_included if(FileNetworkLib && StrEqual(name, "filenetwork")) FileNetworkLib = false; +#else + //Remove warning + if(name[0]) + return; #endif } @@ -351,6 +360,12 @@ stock void PrecacheSoundCustom(const char[] sound, const char[] altsound = "", i pack.WriteString(sound); RequestFrames(FileNetwork_AddSoundFrame, delay, pack); } +#else + //Remove warning + if(altsound[0]) + return; + if(delay) + return; #endif } @@ -797,6 +812,12 @@ stock bool HasCustomSound(int client, const char[] sound) return SoundLevel[client] > soundlevel; #else + //remove warnings + if(client) + return false; + if(sound[0]) + return false; + return false; #endif } @@ -997,5 +1018,14 @@ stock void SendSingleFileToClient(int client, const char[] download, Function fu Format(filecheck, sizeof(filecheck), "download/%s", filecheck); DeleteFile(filecheck); } +#else + + //Remove warning + if(client) + return; + if(download[0]) + return; + if(func) + return; #endif } diff --git a/addons/sourcemod/scripting/shared/global_arrays.sp b/addons/sourcemod/scripting/shared/global_arrays.sp index 431009d128..942ccc8707 100644 --- a/addons/sourcemod/scripting/shared/global_arrays.sp +++ b/addons/sourcemod/scripting/shared/global_arrays.sp @@ -215,6 +215,8 @@ int Animation_Index[MAXPLAYERS]; int Animation_Retry[MAXPLAYERS]; #endif +float f_LatestDamageTaken[MAXPLAYERS]; +int i_LatestHealthLeft[MAXPLAYERS]; int Building_Mounted[MAXENTITIES]; bool i_HasBeenBackstabbed[MAXENTITIES]; bool i_HasBeenHeadShotted[MAXENTITIES]; @@ -229,6 +231,7 @@ int g_particleImpactPortal; float f_damageAddedTogether[MAXPLAYERS]; float f_damageAddedTogetherGametime[MAXPLAYERS]; int i_HudVictimToDisplay[MAXPLAYERS]; +float f_RepeatShowHudFor[MAXPLAYERS]; int i_HudVictimToDisplay2[MAXPLAYERS]; #endif @@ -247,6 +250,7 @@ int TeamNumber[MAXENTITIES]; int i_NextAttackDoubleHit[MAXENTITIES]; bool thirdperson[MAXPLAYERS]; +float f_ArmorDamageDeltHud[MAXPLAYERS]; bool b_DoNotUnStuck[MAXENTITIES]; float f_NoUnstuckVariousReasons[MAXENTITIES]; //bool b_PlayerIsInAnotherPart[MAXENTITIES]; @@ -263,7 +267,7 @@ float f_TimerStatusEffectsDo[MAXENTITIES]; int Healing_done_in_total[MAXENTITIES]; int i_PlayerDamaged[MAXENTITIES]; -bool b_PlayerWasAirbornKnockbackReduction[MAXPLAYERS]; +int b_PlayerWasAirbornKnockbackReduction[MAXPLAYERS]; ConVar CvarRPGInfiniteLevelAndAmmo; ConVar CvarXpMultiplier; TFClassType CurrentClass[MAXPLAYERS]={TFClass_Scout, ...}; @@ -271,6 +275,17 @@ TFClassType WeaponClass[MAXPLAYERS]={TFClass_Scout, ...}; bool b_GivePlayerHint[MAXPLAYERS]; #if defined ZR + +//custom wave music. +MusicEnum MusicString1; +MusicEnum MusicString2; +MusicEnum MusicSetup1; +MusicEnum MusicLastmann; +MusicEnum MusicWin; +MusicEnum MusicLoss; +MusicEnum RaidMusicSpecial1; +MusicEnum BGMusicSpecial1; + int MostRecentVoteCancel; //only used for waves from spawners @@ -340,7 +355,7 @@ bool b_HideCosmeticsPlayer[MAXPLAYERS]; float f_HealDelayParticle[MAXENTITIES]={1.0, ...}; bool b_IsAloneOnServer = false; -bool b_TauntSpeedIncrease[MAXPLAYERS] = {true, ...}; +bool b_BackwardsWalkNotif[MAXPLAYERS] = {true, ...}; Handle SyncHud_Notifaction; Handle SyncHud_WandMana; int i_CustomWeaponEquipLogic[MAXENTITIES]={0, ...}; @@ -443,6 +458,7 @@ float f_TimeFrozenStill[MAXENTITIES]; float f_StunExtraGametimeDuration[MAXENTITIES]; float f_BannerDurationActive[MAXENTITIES]; float f_PreventMovementClient[MAXENTITIES]; +float BackwardsWarn[MAXPLAYERS]; //0 means bad, 1 means good float f_BubbleProcStatus[MAXENTITIES][2]; float f_DuelStatus[MAXENTITIES]; diff --git a/addons/sourcemod/scripting/shared/npc_stats.sp b/addons/sourcemod/scripting/shared/npc_stats.sp index 3baa10b291..cb1153182c 100644 --- a/addons/sourcemod/scripting/shared/npc_stats.sp +++ b/addons/sourcemod/scripting/shared/npc_stats.sp @@ -85,7 +85,7 @@ Function func_NPCAnimEvent[MAXENTITIES]; Function func_NPCActorEmoted[MAXENTITIES]; Function func_NPCInteract[MAXENTITIES]; Function FuncShowInteractHud[MAXENTITIES]; - +Function func_NPCLostHealthBar[MAXENTITIES]; enum struct WearableColor { int color; @@ -542,7 +542,6 @@ methodmap CClotBody < CBaseCombatCharacter DispatchKeyValue(npc, "model", model); view_as(npc).SetModel(model); } - DispatchKeyValue(npc, "modelscale", modelscale); if(NpcTypeLogic == NORMAL_NPC) //No need for lagcomp on things that dont even move. { DispatchKeyValue(npc, "health", health); @@ -609,6 +608,7 @@ methodmap CClotBody < CBaseCombatCharacter i_FailedTriesUnstuck[npc][1] = 0; flNpcCreationTime[npc] = GetGameTime(); DispatchSpawn(npc); //Do this at the end :) + SetEntPropFloat(npc, Prop_Send, "m_flModelScale", StringToFloat(modelscale)); // if(NpcTypeLogic == NORMAL_NPC) //Crashes @@ -3025,12 +3025,11 @@ methodmap CClotBody < CBaseCombatCharacter } DispatchKeyValue(item, "model", model); + DispatchSpawn(item); if(model_size != 1.0) { - // DispatchKeyValueFloat(item, "modelscale", GetEntPropFloat(this.index, Prop_Send, "m_flModelScale")); - DispatchKeyValueFloat(item, "modelscale", model_size); + SetEntPropFloat(item, Prop_Send, "m_flModelScale", model_size); } - DispatchSpawn(item); SetEntProp(item, Prop_Send, "m_fEffects", EF_BONEMERGE|EF_PARENT_ANIMATES|EF_NOSHADOW ); SetEntityMoveType(item, MOVETYPE_NONE); SetEntProp(item, Prop_Data, "m_nNextThinkTick", -1.0); @@ -3073,16 +3072,16 @@ methodmap CClotBody < CBaseCombatCharacter int item = CreateEntityByName("prop_dynamic_override"); DispatchKeyValue(item, "model", model); + + DispatchSpawn(item); if(model_size == 1.0) { - DispatchKeyValueFloat(item, "modelscale", GetEntPropFloat(this.index, Prop_Send, "m_flModelScale")); + SetEntPropFloat(item, Prop_Send, "m_flModelScale", GetEntPropFloat(this.index, Prop_Send, "m_flModelScale")); } else { - DispatchKeyValueFloat(item, "modelscale", model_size); + SetEntPropFloat(item, Prop_Send, "m_flModelScale", model_size); } - - DispatchSpawn(item); SetEntityMoveType(item, MOVETYPE_NONE); SetEntProp(item, Prop_Data, "m_nNextThinkTick", -1.0); @@ -3650,7 +3649,8 @@ methodmap CClotBody < CBaseCombatCharacter int layerCount = this.GetNumAnimOverlays(); for(int i; i < layerCount; i++) { - view_as(this.index).SetLayerPlaybackRate(i, 1.0); + //we lazely use ReturnEntityAttackspeed(this.index) + view_as(this.index).SetLayerPlaybackRate(i, ReturnEntityAttackspeed(this.index)); } view_as(this.index).SetPlaybackRate(f_LayerSpeedFrozeRestore[this.index], true); @@ -6292,11 +6292,15 @@ public void NpcBaseThinkPost(int iNPC) return; float time = GetGameTime() - lastThink; // Time since the last time this NPC thought - + f_StunExtraGametimeDuration[iNPC] += (time - (time / ReturnEntityAttackspeed(iNPC))); +/* if(ReturnEntityAttackspeed(iNPC) < 1.0) // Buffs f_StunExtraGametimeDuration[iNPC] += (time - (time / ReturnEntityAttackspeed(iNPC))); else // Nerfs + { f_StunExtraGametimeDuration[iNPC] += ((time * ReturnEntityAttackspeed(iNPC)) - time); + } +*/ } void NpcDrawWorldLogic(int entity) { @@ -7388,14 +7392,7 @@ void Npc_DoGibLogic(int pThis, float GibAmount = 1.0, bool forcesilentMode = fal ScaleVector(damageForce, 0.025); //Reduce overall bool Limit_Gibs = false; - if(CurrentGibCount > ZR_MAX_GIBCOUNT) - { - Limit_Gibs = true; - } - if(EnableSilentMode) - Limit_Gibs = true; - - if(forcesilentMode) + if(CurrentGibCount > ZR_MAX_GIBCOUNT || EnableSilentMode || forcesilentMode || AtEdictLimit(EDICT_NPC)) Limit_Gibs = true; if(npc.m_iBleedType == BLEEDTYPE_METAL) @@ -7462,22 +7459,6 @@ void Npc_DoGibLogic(int pThis, float GibAmount = 1.0, bool forcesilentMode = fal DispatchKeyValue(prop, "physicsmode", "2"); DispatchKeyValue(prop, "massScale", "1.0"); DispatchKeyValue(prop, "spawnflags", "2"); - if(npc.m_bIsGiant) - { - if(npc.m_iBleedType == BLEEDTYPE_METAL && GibLoop == 0) - { - DispatchKeyValue(prop, "modelscale", "1.1"); - } - else - DispatchKeyValue(prop, "modelscale", "1.6"); - } - else - { - if(npc.m_iBleedType == BLEEDTYPE_METAL && GibLoop == 0) - { - DispatchKeyValue(prop, "modelscale", "0.8"); - } - } float Random_time = GetRandomFloat(6.0, 7.0); if(EnableSilentMode || CurrentGibCount > ZR_MAX_GIBCOUNT_ABSOLUTE) @@ -7513,6 +7494,22 @@ void Npc_DoGibLogic(int pThis, float GibAmount = 1.0, bool forcesilentMode = fal DispatchKeyValueVector(prop, "origin", TempPosition); DispatchKeyValueVector(prop, "angles", ang); DispatchSpawn(prop); + if(npc.m_bIsGiant) + { + if(npc.m_iBleedType == BLEEDTYPE_METAL && GibLoop == 0) + { + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", 1.1); + } + else + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", 1.6); + } + else + { + if(npc.m_iBleedType == BLEEDTYPE_METAL && GibLoop == 0) + { + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", 0.8); + } + } TeleportEntity(prop, NULL_VECTOR, NULL_VECTOR, TempForce); SetEntityCollisionGroup(prop, 2); //COLLISION_GROUP_DEBRIS_TRIGGER CreateTimer(Random_time - 1.5, Prop_Gib_FadeSet, EntIndexToEntRef(prop), TIMER_FLAG_NO_MAPCHANGE); @@ -7524,23 +7521,23 @@ void Npc_DoGibLogic(int pThis, float GibAmount = 1.0, bool forcesilentMode = fal { case BLEEDTYPE_NORMAL: { - if(!EnableSilentMode) + if(!EnableSilentMode || !AtEdictLimit(EDICT_EFFECT)) ParticleSet = ParticleEffectAt(TempPosition, "blood_trail_red_01_goop", Random_time); SetEntityRenderColor(prop, 255, 0, 0, 255); } case BLEEDTYPE_METAL: { - if(!EnableSilentMode) + if(!EnableSilentMode || !AtEdictLimit(EDICT_EFFECT)) ParticleSet = ParticleEffectAt(TempPosition, "tpdamage_4", Random_time); } case BLEEDTYPE_RUBBER: { - if(!EnableSilentMode) + if(!EnableSilentMode || !AtEdictLimit(EDICT_EFFECT)) ParticleSet = ParticleEffectAt(TempPosition, "doublejump_trail_alt", Random_time); //This is a permanent particle, gotta delete it manually... } case BLEEDTYPE_XENO: { - if(!EnableSilentMode) + if(!EnableSilentMode || !AtEdictLimit(EDICT_EFFECT)) ParticleSet = ParticleEffectAt(TempPosition, "blood_impact_green_01", Random_time); SetEntityRenderColor(prop, 0, 255, 0, 255); } @@ -7550,13 +7547,13 @@ void Npc_DoGibLogic(int pThis, float GibAmount = 1.0, bool forcesilentMode = fal }*/ case BLEEDTYPE_SEABORN: { - if(!EnableSilentMode) + if(!EnableSilentMode || !AtEdictLimit(EDICT_EFFECT)) ParticleSet = ParticleEffectAt(TempPosition, "flamethrower_rainbow_bubbles02", Random_time); SetEntityRenderColor(prop, 65, 65, 255, 255); } case BLEEDTYPE_VOID: { - if(!EnableSilentMode) + if(!EnableSilentMode || !AtEdictLimit(EDICT_EFFECT)) { TE_BloodSprite(TempPosition, { 0.0, 0.0, 0.0 }, 200, 0, 200, 255, 32); TE_SendToAllInRange(TempPosition, RangeType_Visibility); @@ -9131,6 +9128,7 @@ public void NPCStats_SetFuncsToZero(int entity) func_NPCActorEmoted[entity] = INVALID_FUNCTION; func_NPCInteract[entity] = INVALID_FUNCTION; FuncShowInteractHud[entity] = INVALID_FUNCTION; + func_NPCLostHealthBar[entity] = INVALID_FUNCTION; #if defined BONEZONE_BASE g_BoneZoneBuffFunction[entity] = INVALID_FUNCTION; @@ -9250,6 +9248,7 @@ public void SetDefaultValuesToZeroNPC(int entity) fl_AttackHappensMaximum[entity] = 0.0; b_AttackHappenswillhappen[entity] = false; b_thisNpcIsABoss[entity] = false; + b_thisNpcIsAMiniboss[entity] = false; b_ShowNpcHealthbar[entity] = false; b_thisNpcIsARaid[entity] = false; b_TryToAvoidTraverse[entity] = false; @@ -10367,7 +10366,7 @@ public void Npc_BossHealthBar(CClotBody npc) public void Npc_DebuffWorldTextUpdate(CClotBody npc) { - if(b_IsEntityNeverTranmitted[npc.index] || b_NoHealthbar[npc.index]) + if(AtEdictLimit(EDICT_RAID) || b_IsEntityNeverTranmitted[npc.index] || b_NoHealthbar[npc.index] || i_NpcIsABuilding[npc.index] || i_IsABuilding[npc.index]) { if(IsValidEntity(npc.m_iTextEntity4)) { @@ -10404,7 +10403,12 @@ public void Npc_DebuffWorldTextUpdate(CClotBody npc) { Format(HealthText, sizeof(HealthText), "%s!(%i)",HealthText, i_HowManyBombsHud[npc.index]); } - if(VausMagicaShieldLeft(npc.index) > 0) + bool DisplayVausShield = true; + if(Dungeon_Mode() && Dungeon_AttackType() < 2) + { + DisplayVausShield = false; + } + if(DisplayVausShield && VausMagicaShieldLeft(npc.index) > 0) { Format(HealthText, sizeof(HealthText), "%sS(%i)",HealthText,VausMagicaShieldLeft(npc.index)); } @@ -11555,7 +11559,21 @@ void ExtinguishTarget(int target, bool dontkillTimer = false) void IsEntityInvincible_Shield(int entity) { int NpcInvulShieldDisplay; - + if(i_NpcIsABuilding[entity] || i_IsABuilding[entity]) + { + //never display for buildings!! + return; + } +#if defined ZR + if(Dungeon_Mode() && AtEdictLimit(EDICT_NPC)) + { + if(Dungeon_AttackType() < 2) + { + //dont display any shields if its dungeon mode and above the limit! + return; + } + } +#endif if(HasSpecificBuff(entity, "UBERCHARGED")) NpcInvulShieldDisplay = 3; @@ -11566,9 +11584,9 @@ void IsEntityInvincible_Shield(int entity) #endif if(IsInvuln(entity, true)) NpcInvulShieldDisplay = 1; - + CClotBody npc = view_as(entity); - if(!NpcInvulShieldDisplay || b_ThisEntityIgnored[entity]) + if(!NpcInvulShieldDisplay || b_ThisEntityIgnored[entity] || AtEdictLimit(EDICT_PLAYER)) { IsEntityInvincible_ShieldRemove(entity); return; diff --git a/addons/sourcemod/scripting/shared/npcs.sp b/addons/sourcemod/scripting/shared/npcs.sp index 1b018e86da..a8e3983ce5 100644 --- a/addons/sourcemod/scripting/shared/npcs.sp +++ b/addons/sourcemod/scripting/shared/npcs.sp @@ -1452,7 +1452,23 @@ public void NPC_OnTakeDamage_Post(int victim, int attacker, int inflictor, float while(health <= 0 && npcBase.m_iHealthBar >= 1) { //has health bars! - health += ReturnEntityMaxHealth(victim); + bool cancelDamage = false; + Function func = func_NPCLostHealthBar[victim]; + if(func && func != INVALID_FUNCTION) + { + Call_StartFunction(null, func); + Call_PushCell(victim); + Call_PushCell(npcBase.m_iHealthBar - 1); + Call_Finish(cancelDamage); + } + if(cancelDamage) + { + health = ReturnEntityMaxHealth(victim); + } + else + { + health += ReturnEntityMaxHealth(victim); + } SetEntProp(victim, Prop_Data, "m_iHealth", health); npcBase.m_iHealthBar--; } @@ -1791,6 +1807,13 @@ stock bool Calculate_And_Display_HP_Hud(int attacker, bool ToAlternative = false green = 255; blue = 0; } + CClotBody npc = view_as(victim); + if(npc.m_iHealthBar > 50000) + { + red = 0; + green = 255; + blue = 0; + } static char Debuff_Adder_left[128], Debuff_Adder_right[128], Debuff_Adder[128]; EntityBuffHudShow(victim, attacker, Debuff_Adder_left, Debuff_Adder_right, sizeof(Debuff_Adder)); @@ -1800,7 +1823,6 @@ stock bool Calculate_And_Display_HP_Hud(int attacker, bool ToAlternative = false float GameTime = GetGameTime(); #endif - CClotBody npc = view_as(victim); int weapon = GetEntPropEnt(attacker, Prop_Send, "m_hActiveWeapon"); bool armor_added = false; @@ -1997,7 +2019,7 @@ stock bool Calculate_And_Display_HP_Hud(int attacker, bool ToAlternative = false HudOffset += f_HurtHudOffsetX[attacker]; #endif // ZR - SetHudTextParams(HudY, HudOffset, 1.0, red, green, blue, 255, 0, 0.01, 0.01); + SetHudTextParams(HudY, HudOffset, 0.5, red, green, blue, 255, 0, 0.01, 0.01); static char ExtraHudHurt[255]; #if defined ZR @@ -2035,6 +2057,11 @@ stock bool Calculate_And_Display_HP_Hud(int attacker, bool ToAlternative = false Format(c_MaxHealth, sizeof(c_MaxHealth), "???"); Format(c_Health, sizeof(c_Health), "???"); } + if(npc.m_iHealthBar > 50000) + { + Format(c_MaxHealth, sizeof(c_MaxHealth), "∞"); + Format(c_Health, sizeof(c_Health), "∞"); + } #if defined RPG Format(ExtraHudHurt, sizeof(ExtraHudHurt), "Level %d", Level[victim]); @@ -2052,7 +2079,7 @@ stock bool Calculate_And_Display_HP_Hud(int attacker, bool ToAlternative = false Format(ExtraHudHurt, sizeof(ExtraHudHurt), "%s%s\n%s / %s",NamePrefix,c_NpcName[victim], c_Health, c_MaxHealth); } CClotBody npcstats = view_as(victim); - if(b_ThisWasAnNpc[victim] && npcstats.m_iHealthBar > 0) + if(b_ThisWasAnNpc[victim] && npcstats.m_iHealthBar > 0 && npcstats.m_iHealthBar < 50000) Format(ExtraHudHurt, sizeof(ExtraHudHurt), "%s x%i",ExtraHudHurt, npcstats.m_iHealthBar + 1); #endif @@ -2097,7 +2124,7 @@ stock bool Calculate_And_Display_HP_Hud(int attacker, bool ToAlternative = false HudOffset += f_HurtHudOffsetX[attacker]; SetGlobalTransTarget(attacker); - SetHudTextParams(HudY, HudOffset, 1.0, red, green, blue, 255, 0, 0.01, 0.01); + SetHudTextParams(HudY, HudOffset, 0.5, red, green, blue, 255, 0, 0.01, 0.01); //todo: better showcase of timer. static char ExtraHudHurt[168]; @@ -2152,6 +2179,11 @@ stock bool Calculate_And_Display_HP_Hud(int attacker, bool ToAlternative = false Format(c_MaxHealth, sizeof(c_MaxHealth), "???"); Format(c_Health, sizeof(c_Health), "???"); } + if(npc.m_iHealthBar > 50000) + { + Format(c_MaxHealth, sizeof(c_MaxHealth), "∞"); + Format(c_Health, sizeof(c_Health), "∞"); + } char NamePrefix[255]; StatusEffects_PrefixName(victim, attacker, NamePrefix, sizeof(NamePrefix)); @@ -2165,7 +2197,7 @@ stock bool Calculate_And_Display_HP_Hud(int attacker, bool ToAlternative = false } CClotBody npcstats = view_as(victim); - if(b_ThisWasAnNpc[victim] && npcstats.m_iHealthBar > 0) + if(b_ThisWasAnNpc[victim] && npcstats.m_iHealthBar > 0 && npcstats.m_iHealthBar < 50000) Format(ExtraHudHurt, sizeof(ExtraHudHurt), "%s x%i",ExtraHudHurt, npcstats.m_iHealthBar + 1); //add debuff @@ -2212,7 +2244,7 @@ stock bool Calculate_And_Display_HP_Hud(int attacker, bool ToAlternative = false #if !defined RTS stock void ResetDamageHud(int client) { - SetHudTextParams(-1.0, 0.05, 1.0, 0, 0, 0, 255, 0, 0.01, 0.01); + SetHudTextParams(-1.0, 0.05, 0.5, 0, 0, 0, 255, 0, 0.01, 0.01); ShowSyncHudText(client, SyncHud, ""); } @@ -2222,7 +2254,6 @@ stock void Calculate_And_Display_hp(int attacker, int victim, float damage, bool return; if(attacker <= MaxClients) { - //If a raid hud update happens, it should prefer to update it incase you attack something in the same frame or whaatever. if(RaidHudForce) { @@ -2233,6 +2264,7 @@ stock void Calculate_And_Display_hp(int attacker, int victim, float damage, bool { b_DisplayDamageHud[attacker][0] = true; i_HudVictimToDisplay[attacker] = EntIndexToEntRef(victim); + f_RepeatShowHudFor[attacker] = GetGameTime() + 2.0; } float GameTime = GetGameTime(); @@ -2253,6 +2285,7 @@ stock void Calculate_And_Display_hp(int attacker, int victim, float damage, bool damageCalc += Health; } Damage_dealt_in_total[attacker] += damageCalc; + Damage_dealt_in_total[attacker] += f_ArmorDamageDeltHud[attacker]; } if(GameTime > f_damageAddedTogetherGametime[attacker]) { @@ -2264,12 +2297,14 @@ stock void Calculate_And_Display_hp(int attacker, int victim, float damage, bool if(!ignore) //Cannot be a just show function { f_damageAddedTogether[attacker] += damage; + f_damageAddedTogether[attacker] += f_ArmorDamageDeltHud[attacker]; } if(damage > 0.0) { f_damageAddedTogetherGametime[attacker] = GameTime + 0.6; } } + f_ArmorDamageDeltHud[attacker] = 0.0; } if(DontForward) return; @@ -2766,4 +2801,71 @@ stock int StrLenMB(const char[] str) } return count; } -*/ \ No newline at end of file +*/ + +#if defined ZR +void PrintNPCMessageWithPrefixes(int entity, const char[] color, const char[] message, bool messageIsTranslated = false) +{ + bool checkedForPrefixes; + bool loud; + char finalColor[32]; + char finalMessage[255]; + + // Only copy the message once if it's not translated + if (!messageIsTranslated) + strcopy(finalMessage, sizeof(finalMessage), message); + + for (int client = 1; client <= MaxClients; client++) + { + if (!IsClientInGame(client) || IsFakeClient(client)) + continue; + + char prefix[255]; + StatusEffects_PrefixName(entity, client, prefix, sizeof(prefix)); + + // On the first valid client, check for prefixes and modify the message based on them + if (!checkedForPrefixes) + { + bool hasPrefix = prefix[0] != '\0'; + if (hasPrefix) + { + if (HasSpecificBuff(entity, "Verde")) + { + // verd e + finalColor = "forestgreen"; + } + else if (HasSpecificBuff(entity, "Ragebaiter Prefix")) + { + // To match the rest of ragebaiter text + finalColor = "crimson"; + } + + if (HasSpecificBuff(entity, "Loud Prefix")) + loud = true; + } + + if (finalColor[0] == '\0') + strcopy(finalColor, sizeof(finalColor), color); + + if (!messageIsTranslated && loud) + StringToUpper(finalMessage); + + checkedForPrefixes = true; + } + + if (messageIsTranslated) + { + // Do some things per-client if the message is translated + FormatEx(finalMessage, sizeof(finalMessage), "%T", message, client); + + if (loud) + StringToUpper(finalMessage); + } + + if (!b_NameNoTranslation[entity]) + CPrintToChat(client, "{%s}%s%s{default}: %s", finalColor, prefix, c_NpcName[entity], finalMessage); + else + CPrintToChat(client, "{%s}%s%t{default}: %s", finalColor, prefix, c_NpcName[entity], finalMessage); + } +} +#endif \ No newline at end of file diff --git a/addons/sourcemod/scripting/shared/rtscamera.sp b/addons/sourcemod/scripting/shared/rtscamera.sp index 70030ee1c8..d139baceb8 100644 --- a/addons/sourcemod/scripting/shared/rtscamera.sp +++ b/addons/sourcemod/scripting/shared/rtscamera.sp @@ -1593,7 +1593,6 @@ static stock void RenderWaypoints(int client) DispatchKeyValueVector(flag, "origin", pos); DispatchKeyValueVector(flag, "angles", {0.0, -135.0, 0.0}); DispatchKeyValue(flag, "model", FLAG_MODEL); - DispatchKeyValue(flag, "modelscale", "1.0"); DispatchKeyValue(flag, "skin", "2"); DispatchKeyValue(flag, "solid", "0"); diff --git a/addons/sourcemod/scripting/shared/sdkcalls.sp b/addons/sourcemod/scripting/shared/sdkcalls.sp index 575311daf6..2b981db3b2 100644 --- a/addons/sourcemod/scripting/shared/sdkcalls.sp +++ b/addons/sourcemod/scripting/shared/sdkcalls.sp @@ -3,6 +3,7 @@ static Handle SDKEquipWearable; static Handle SDKGetMaxHealth; +Handle g_hSDKStartTouch; //static Handle g_hStudio_FindAttachment; static Handle g_hSetAbsOrigin; @@ -47,7 +48,16 @@ void SDKCall_Setup() SDKGetMaxHealth = EndPrepSDKCall(); if(!SDKGetMaxHealth) LogError("[Gamedata] Could not find GetMaxHealth"); - + + StartPrepSDKCall(SDKCall_Entity); + PrepSDKCall_SetFromConf(gamedata, SDKConf_Virtual, "StartTouch"); + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hSDKStartTouch = EndPrepSDKCall(); + if(g_hSDKStartTouch == INVALID_HANDLE) + { + LogMessage("Failed to create call: StartTouch!"); + } + delete gamedata; gamedata = LoadGameConfigFile("zombie_riot"); @@ -70,6 +80,7 @@ void SDKCall_Setup() PrepSDKCall_SetFromConf(gamedata, SDKConf_Signature, "CBasePlayer::SnapEyeAngles"); PrepSDKCall_AddParameter(SDKType_QAngle, SDKPass_ByRef); if ((g_hSnapEyeAngles = EndPrepSDKCall()) == null) SetFailState("Failed to create SDKCall for CBasePlayer::SnapEyeAngles!"); + @@ -523,4 +534,11 @@ void SDKCall_RemoveImmediate(int entity) { SDKCall(g_SDKCallRemoveImmediate, entity); } +} +void SDKCall_StartTouch(int entity, int target) +{ + if (g_hSDKStartTouch) + { + SDKCall(g_hSDKStartTouch, entity, target); + } } \ No newline at end of file diff --git a/addons/sourcemod/scripting/shared/sdkhooks.sp b/addons/sourcemod/scripting/shared/sdkhooks.sp index 333c004a21..689597d1df 100644 --- a/addons/sourcemod/scripting/shared/sdkhooks.sp +++ b/addons/sourcemod/scripting/shared/sdkhooks.sp @@ -20,7 +20,6 @@ static float f_CheckWeaponDouble[MAXPLAYERS]; bool Client_Had_ArmorDebuff[MAXPLAYERS]; #if defined ZR -int Armor_WearableModelIndex; int Wing_WearlbeIndex; #endif @@ -80,7 +79,6 @@ void SDKHook_MapStart() #if defined ZR Zero(Mana_Loss_Delay); Zero(Mana_Regen_Block_Timer); - Armor_WearableModelIndex = PrecacheModel("models/effects/resist_shield/resist_shield.mdl", true); Wing_WearlbeIndex = PrecacheModel(WINGS_MODELS_1, true); #endif @@ -381,6 +379,8 @@ public void OnPostThink_OnlyHurtHud(int client) { b_DisplayDamageHud[client][0] = false; b_DisplayDamageHud[client][1] = false; + if(f_RepeatShowHudFor[client] < GetGameTime()) + b_DisplayDamageHud[client][0] = true; if(zr_showdamagehud.BoolValue) Calculate_And_Display_HP_Hud(client); @@ -472,6 +472,9 @@ public void OnPostThink(int client) b_DisplayDamageHud[client][1] = false; else b_DisplayDamageHud[client][0] = false; + + if(f_RepeatShowHudFor[client] > GetGameTime()) + b_DisplayDamageHud[client][0] = true; } } if(ReplicateClient_BackwardsWalk[client] != f_Client_BackwardsWalkPenalty[client]) @@ -515,24 +518,38 @@ public void OnPostThink(int client) { //when standing on an npc you gain less knockack reduction WasAirbornType = 1; - if(b_thisNpcIsARaid[GroundEntity]) +#if defined ZR + if(b_thisNpcIsARaid[GroundEntity] || RaidBossActive == RefGround) WasAirbornType = 2; +#endif //when ontop of a raidboss, gain no knockback reduction. } } } - if(WasAirbornType == 1 && !b_PlayerWasAirbornKnockbackReduction[client]) + if(WasAirbornType == 1 && b_PlayerWasAirbornKnockbackReduction[client] != 1) { int EntityWearable = EntRefToEntIndex(i_StickyAccessoryLogicItem[client]); if(EntityWearable > 0) { f_ClientInAirSince[client] = GetGameTime() + 5.0; - b_PlayerWasAirbornKnockbackReduction[client] = true; + b_PlayerWasAirbornKnockbackReduction[client] = 1; Attributes_Set(EntityWearable, 252, 0.5); } } - else if((WasAirbornType == 0 || WasAirbornType == 2) && b_PlayerWasAirbornKnockbackReduction[client]) + else if(WasAirbornType == 0 && b_PlayerWasAirbornKnockbackReduction[client] != 0) + { + int EntityWearable = EntRefToEntIndex(i_StickyAccessoryLogicItem[client]); + if(EntityWearable > 0) + { + //when they land, check if they are in a bad pos + Spawns_CheckBadClient(client/*, 2*/); + //no need to recheck when they land + f_EntityOutOfNav[client] = GetGameTime() + GetRandomFloat(0.9, 1.1); + b_PlayerWasAirbornKnockbackReduction[client] = 0; + } + } + else if(WasAirbornType == 2 && b_PlayerWasAirbornKnockbackReduction[client] != 2) { int EntityWearable = EntRefToEntIndex(i_StickyAccessoryLogicItem[client]); if(EntityWearable > 0) @@ -541,8 +558,14 @@ public void OnPostThink(int client) Spawns_CheckBadClient(client/*, 2*/); //no need to recheck when they land f_EntityOutOfNav[client] = GetGameTime() + GetRandomFloat(0.9, 1.1); - b_PlayerWasAirbornKnockbackReduction[client] = false; - Attributes_Set(EntityWearable, 252, 1.0); + b_PlayerWasAirbornKnockbackReduction[client] = 2; + Attributes_Set(EntityWearable, 252, 1.5); + + //standing ontop of raids now entirely debuffs you. + TF2_AddCondition(client, TFCond_LostFooting, 1.0); + TF2_AddCondition(client, TFCond_AirCurrent, 1.0); + float damageStand = 5.0; + NpcStuckZoneWarning(client, damageStand); } } #if defined ZR @@ -625,9 +648,24 @@ public void OnPostThink(int client) if(f_TimerStatusEffectsDo[client] < GetGameTime()) { + if(WasAirbornType == 2) + { + //standing ontop of raids now entirely debuffs you. + TF2_AddCondition(client, TFCond_LostFooting, 1.0); + TF2_AddCondition(client, TFCond_AirCurrent, 1.0); + float damageStand = 5.0; + NpcStuckZoneWarning(client, damageStand); + } //re using NPC value. StatusEffect_TimerCallDo(client); f_TimerStatusEffectsDo[client] = GetGameTime() + 0.4; + if(f_TimeUntillNormalHeal[client] < GetGameTime()) + { + //badly reset + LastHitRef[client] = -1; + f_LatestDamageTaken[client] = 0.0; + i_LatestHealthLeft[client] = GetEntProp(client, Prop_Send, "m_iHealth"); + } } if(Rogue_CanRegen() && Armor_regen_delay[client] < GameTime) { @@ -1338,6 +1376,7 @@ public void OnPostThink(int client) int armorEnt = client; if(vehicle != -1) { + Armor_Max = view_as(vehicle).m_iMaxArmor; armorEnt = vehicle; } else @@ -1600,6 +1639,8 @@ public void OnPostThink(int client) { int downsleft; downsleft = 2; + if(ZR_Get_Modifier() == PREFIX_ONESTAND) + downsleft = 3; downsleft -= i_AmountDowned[client]; SDKHooks_UpdateMarkForDeath(client); @@ -2046,6 +2087,8 @@ public Action Player_OnTakeDamage(int victim, int &attacker, int &inflictor, flo } } f_LatestDamageRes[victim] = damage / GetCurrentDamage; + f_LatestDamageTaken[victim] = damage; + i_LatestHealthLeft[victim] = GetEntProp(victim, Prop_Send, "m_iHealth"); #if !defined RTS int ClientAttacker; @@ -2231,7 +2274,10 @@ public Action Player_OnTakeDamageAlive_DeathCheck(int victim, int &attacker, int Rogue_PlayerDowned(victim); //there are players still left, down them. - if((SpecterCheckIfAutoRevive(victim) || i_AmountDowned[victim] < (2 + Dungeon_DownedBonus())) && !HasSpecificBuff(victim, "Nightmare Terror")) + int DownsLeft = 2; + if(ZR_Get_Modifier() == PREFIX_ONESTAND) + DownsLeft = 3; + if((SpecterCheckIfAutoRevive(victim) || i_AmountDowned[victim] < (DownsLeft + Dungeon_DownedBonus())) && !HasSpecificBuff(victim, "Nightmare Terror")) { //PrintToConsole(victim, "[ZR] THIS IS DEBUG! IGNORE! Player_OnTakeDamageAlive_DeathCheck 12"); //https://github.com/lua9520/source-engine-2018-hl2_src/blob/3bf9df6b2785fa6d951086978a3e66f49427166a/game/shared/mp_shareddefs.cpp @@ -2275,6 +2321,8 @@ public Action Player_OnTakeDamageAlive_DeathCheck(int victim, int &attacker, int f_DisableDyingTimer[victim] = 0.0; dieingstate[victim] -= RoundToNearest(Attributes_GetOnPlayer(victim, Attrib_ReviveTimeCut, false,_, 0.0)); + + SdkHooks_SetAndUpdateArmorClientText(victim); Vehicle_Exit(victim); ForcePlayerCrouch(victim, true); SDKHooks_UpdateMarkForDeath(victim, true); @@ -2309,10 +2357,12 @@ public Action Player_OnTakeDamageAlive_DeathCheck(int victim, int &attacker, int i_DyingParticleIndication[victim][0] = EntIndexToEntRef(entity); SetVariantColor(view_as({0, 255, 0, 255})); AcceptEntityInput(entity, "SetGlowColor"); - - entity = SpawnFormattedWorldText("DOWNED", {0.0,0.0,70.0}, 10, {0, 255, 0, 255}, victim); - i_DyingParticleIndication[victim][1] = EntIndexToEntRef(entity); - b_DyingTextOff[victim] = false; + if(!AtEdictLimit(EDICT_PLAYER)) + { + entity = SpawnFormattedWorldText("DOWNED", {0.0,0.0,70.0}, 10, {0, 255, 0, 255}, victim); + i_DyingParticleIndication[victim][1] = EntIndexToEntRef(entity); + b_DyingTextOff[victim] = false; + } } CreateTimer(0.1, Timer_Dieing, victim, TIMER_REPEAT); @@ -2320,7 +2370,7 @@ public Action Player_OnTakeDamageAlive_DeathCheck(int victim, int &attacker, int int i; while(TF2U_GetWearable(victim, entity, i)) { - if(entity == EntRefToEntIndex(Armor_Wearable[victim]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; if(!autoRevive) @@ -2347,10 +2397,12 @@ public Action Player_OnTakeDamageAlive_DeathCheck(int victim, int &attacker, int KillFeed_Show(victim, inflictor, attacker, 0, weapon, damagetype, autoRevive); CheckLastMannStanding(victim); + DownedOrKilledClient_Feedback(victim, attacker, damage, damagetype); return Plugin_Handled; } else { + DownedOrKilledClient_Feedback(victim, attacker, damage, damagetype); //PrintToConsole(victim, "[ZR] THIS IS DEBUG! IGNORE! Player_OnTakeDamageAlive_DeathCheck 13"); damage = 99999.9; CheckLastMannStanding(victim); @@ -2485,38 +2537,51 @@ public Action SDKHook_AmbientSoundHook(char sample[PLATFORM_MAX_PATH], int &enti return Plugin_Continue; } +bool LouderSoundStop = false; public Action SDKHook_NormalSHook(int clients[MAXPLAYERS], int &numClients, char sample[PLATFORM_MAX_PATH], int &entity, int &channel, float &volume, int &level, int &pitch, int &flags, char soundEntry[PLATFORM_MAX_PATH], int &seed) { - /* - if(b_IsAmbientGeneric[entity]) + if(entity <= MaxClients) + { + //block shield soundsg + if(StrContains(sample, "medi_shield_deploy.wav", true) != -1 || StrContains(sample, "vo/medic_mvm_heal_shield", true) != -1) + { + return Plugin_Handled; + } + } + +#if defined ZR + + if(StrContains(sample, "#", true) != -1) { - if(StrContains(sample, "#", true) != -1) + + } + else + { + if(!LouderSoundStop && entity != -1 && HasSpecificBuff(entity, "Loud Prefix")) { - //loop through all clients it tries to play to - //but also make sure it doesnt play to clients who didnt get info from the database. + level += 50; + LouderSoundStop = true; for(int loop1=0; loop1 MaxClients && entity < MAXENTITIES && !b_NpcHasDied[entity] && !(flags & SND_STOP)) { @@ -2530,7 +2595,18 @@ public Action SDKHook_NormalSHook(int clients[MAXPLAYERS], int &numClients, char } } */ - + if(entity > 0) + { + if(b_MuteArrowSound[entity]) + { + //Removes arrow sound that we forced in + if(StrContains(sample, "weapons/fx/rics/arrow_impact_flesh", true) != -1) + { + b_MuteArrowSound[entity] = false; + return Plugin_Handled; + } + } + } if(BetWar_Mode()) { if(entity <= MaxClients && entity > 0) @@ -2708,11 +2784,13 @@ public void OnWeaponSwitchPost(int client, int weapon) if(PreviousSlot != CurrentSlot) //Set back the previous active slot to what it was before. { int WeaponValidCheck = -1; + int MaxCapSanity = 0; while(WeaponValidCheck != PreviousWeapon) { WeaponValidCheck = Store_CycleItems(client, PreviousSlot); - if(WeaponValidCheck == -1) + MaxCapSanity++; + if(MaxCapSanity >= 10 || WeaponValidCheck == -1) break; } //only if switching to different slot. @@ -2863,6 +2941,8 @@ void SDKHooks_UpdateMarkForDeath(int client, bool force_Clear = false) int downsleft; downsleft = 2; + if(ZR_Get_Modifier() == PREFIX_ONESTAND) + downsleft = 3; downsleft -= i_AmountDowned[client]; downsleft += Dungeon_DownedBonus(); if(HasSpecificBuff(client, "Nightmare Terror")) @@ -3207,7 +3287,9 @@ void DisplayCosmeticExtraClient(int client, bool deleteOverride = false) void ArmorDisplayClient(int client, bool deleteOverride = false) { //update aswell. + SdkHooks_SetAndUpdateArmorClientText(client); DisplayCosmeticExtraClient(client, deleteOverride); + int ShieldLogicDo; if(Armor_Charge[client] > 0) { @@ -3232,15 +3314,8 @@ void ArmorDisplayClient(int client, bool deleteOverride = false) { ShieldLogicDo = 0; } - int entity; if(deleteOverride) { - if(IsValidEntity(Armor_Wearable[client])) - { - entity = EntRefToEntIndex(Armor_Wearable[client]); - if(entity > MaxClients) - TF2_RemoveWearable(client, entity); - } return; } if(ShieldLogicDo == 2) @@ -3255,53 +3330,7 @@ void ArmorDisplayClient(int client, bool deleteOverride = false) Client_Had_ArmorDebuff[client] = false; TF2_RemoveCondition(client, TFCond_Milked); } - - if(ShieldLogicDo == 1) - { - if(IsValidEntity(Armor_Wearable[client])) - { - ArmorDisplayClientColor(client, EntRefToEntIndex(Armor_Wearable[client])); - return; - } - entity = CreateEntityByName("tf_wearable"); - if(entity > MaxClients) - { - int team = GetClientTeam(client); - SetEntProp(entity, Prop_Send, "m_nModelIndex", Armor_WearableModelIndex); - - // SetEntProp(entity, Prop_Send, "m_fEffects", 129); - SetTeam(entity, team); - SetEntProp(entity, Prop_Send, "m_nSkin", team-2); - SetEntProp(entity, Prop_Send, "m_usSolidFlags", 4); - SetEntityCollisionGroup(entity, 11); - SetEntProp(entity, Prop_Send, "m_bValidatedAttachedEntity", 1); - - DispatchSpawn(entity); - SetVariantString("!activator"); - ActivateEntity(entity); - - Armor_Wearable[client] = EntIndexToEntRef(entity); - SDKCall_EquipWearable(client, entity); - - SetEntProp(entity, Prop_Send, "m_fEffects", 0); - SetVariantString("!activator"); - AcceptEntityInput(entity, "SetParent", client); - // SDKCall_SetLocalOrigin(entity, {0.0,0.0,0.0}); - - ArmorDisplayClientColor(client, entity); - i_OwnerEntityEnvLaser[entity] = EntIndexToEntRef(client); - SDKHook(entity, SDKHook_SetTransmit, ShieldSetTransmit); - } - } - else - { - if(IsValidEntity(Armor_Wearable[client])) - { - entity = EntRefToEntIndex(Armor_Wearable[client]); - if(entity > MaxClients) - TF2_RemoveWearable(client, entity); - } - } + } public Action ShieldSetTransmit(int entity, int client) @@ -3321,32 +3350,6 @@ public Action ShieldSetTransmit(int entity, int client) return Plugin_Continue; } -void ArmorDisplayClientColor(int client, int armor) -{ - int Armor_Max = MaxArmorCalculation(Armor_Level[client], client, 1.0); - float Percentage = float(Armor_Charge[client]) / float(Armor_Max); - - Percentage *= 14.0; - int Alpha = RoundToCeil(Percentage * Percentage); - - if(Alpha > 200) - { - Alpha = 200; - } - if(Alpha <= 30) - { - Alpha = 30; - } - int green = 0; - int blue = 0; - if(Percentage >= 13.95) - { - green = 125; - } - - SetEntityRenderMode(armor, RENDER_TRANSCOLOR); - SetEntityRenderColor(armor, green, green, blue, Alpha); -} #endif #if defined RPG @@ -3691,4 +3694,83 @@ void UpdatePerkName(int client) Format(MaxAsignPerkNames[client], sizeof(MaxAsignPerkNames[]), "%s",buffer); } + + +void SdkHooks_SetAndUpdateArmorClientText(int client) +{ + int ArmorText = EntRefToEntIndex(Armor_Wearable_HudText[client]); + if(!IsEntityAlive(client) || TeutonType[client] != TEUTON_NONE || dieingstate[client] != 0) + { + if(IsValidEntity(ArmorText)) + { + RemoveEntity(ArmorText); + } + return; + } + if(!IsValidEntity(ArmorText)) + { + float Offset[3]; + Offset[2] += 95.0; + + ArmorText = SpawnFormattedWorldText("----",Offset, 10, {0,0,0,0}, client); + DispatchKeyValue(ArmorText, "font", "1"); + Armor_Wearable_HudText[client] = EntIndexToEntRef(ArmorText); + i_OwnerEntityEnvLaser[ArmorText] = EntIndexToEntRef(client); + SDKHook(ArmorText, SDKHook_SetTransmit, ShieldSetTransmit); + } + + char ch_ArmorText[32]; + int HealthColour[4]; + HealthColour[0] = 255; + HealthColour[1] = 255; + HealthColour[2] = 0; + HealthColour[3] = 200; + int MaxArmor = MaxArmorCalculation(Armor_Level[client], client, 1.0); + int ArmorCurrent = Armor_Charge[client]; + if(ArmorCurrent < 0) + { + ArmorCurrent *= -1; + HealthColour[0] = 125; + HealthColour[1] = 0; + HealthColour[2] = 125; + } + if(ArmorCurrent >= MaxArmor) + { + HealthColour[0] = 255; + HealthColour[1] = 255; + HealthColour[2] = 255; + } + Format(ch_ArmorText, sizeof(ch_ArmorText), "%s%s", ch_ArmorText, "["); + if(ArmorCurrent == 0) + { + HealthColour[0] = 255; + HealthColour[1] = 0; + HealthColour[2] = 0; + + for(int i=0; i<(10); i++) + { + Format(ch_ArmorText, sizeof(ch_ArmorText), "%s%s", ch_ArmorText, "."); + } + } + else + { + for(int i=0; i<(10); i++) + { + if(ArmorCurrent >= MaxArmor*(i*(0.1))) + { + Format(ch_ArmorText, sizeof(ch_ArmorText), "%s%s", ch_ArmorText, "|"); + } + else + { + Format(ch_ArmorText, sizeof(ch_ArmorText), "%s%s", ch_ArmorText, "."); + } + } + } + Format(ch_ArmorText, sizeof(ch_ArmorText), "%s%s", ch_ArmorText, "]"); + char sColor[32]; + Format(sColor, sizeof(sColor), " %d %d %d %d ", HealthColour[0], HealthColour[1], HealthColour[2], HealthColour[3]); + + DispatchKeyValue(ArmorText, "color", sColor); + DispatchKeyValue(ArmorText, "message", ch_ArmorText); +} #endif \ No newline at end of file diff --git a/addons/sourcemod/scripting/shared/status_effects.sp b/addons/sourcemod/scripting/shared/status_effects.sp index eb90888a95..e55404757c 100644 --- a/addons/sourcemod/scripting/shared/status_effects.sp +++ b/addons/sourcemod/scripting/shared/status_effects.sp @@ -149,6 +149,14 @@ static const char XenoInfect[][] = { "items/powerup_pickup_plague_infected.wav", }; +static const char BoingSound[][] = +{ + "player/taunt_springrider_squeak1.wav", + "player/taunt_springrider_squeak2.wav", + "player/taunt_springrider_squeak3.wav", + "player/taunt_springrider_squeak4.wav", + "player/taunt_springrider_squeak5.wav", +}; void ResetExplainBuffStatus(int client) { DisplayChatBuffCD[client] = 0.0; @@ -171,6 +179,7 @@ void InitStatusEffects() AL_StatusEffects = new ArrayList(sizeof(StatusEffect)); PrecacheSoundArray(MissSound); PrecacheSoundArray(XenoInfect); + PrecacheSoundArray(BoingSound); DeleteStatusEffectsFromAll(); //clear all existing ones @@ -209,6 +218,7 @@ void InitStatusEffects() #if defined ZR StatusEffects_Aperture(); StatusEffects_Ruiania(); + StatusEffects_BrickWeapon(); #endif StatusEffects_WeaponSpecific_VisualiseOnly(); StatusEffects_StatusEffectListOnly(); @@ -3353,6 +3363,20 @@ void StatusEffects_Victoria() data.SlotPriority = 0; data.HudDisplay_Func = AmmoTM_Visual_Hud_Func; StatusEffect_AddGlobal(data); + + strcopy(data.BuffName, sizeof(data.BuffName), "Buffweiser"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), "BEER"); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), "BEER"); //BEEEEEERRRRR + //-1.0 means unused + data.DamageTakenMulti = 0.5; //50% less damage taken + data.DamageDealMulti = 1.0; //x2 dmg + data.Positive = true; + data.ShouldScaleWithPlayerCount = true; + data.ElementalLogic = false; + data.HudDisplay_Func = INVALID_FUNCTION; + data.Slot = 0; //0 means ignored + data.SlotPriority = 0; //if its higher, then the lower version is entirely ignored. + StatusEffect_AddGlobal(data); } stock bool NpcStats_VictorianCallToArms(int victim) @@ -7406,8 +7430,8 @@ void StatusEffects_Construct2_EnemyModifs() //-1.0 means unused data.DamageTakenMulti = -1.0; data.DamageDealMulti = -1.0; - data.MovementspeedModif = 1.15; - data.AttackspeedBuff = (1.0 / 3.0); + data.MovementspeedModif = 1.1; + data.AttackspeedBuff = (1.0 / 2.0); data.Positive = true; data.ShouldScaleWithPlayerCount = false; data.OnBuffStarted = Const2Modifs_Haste_Start; @@ -7420,7 +7444,7 @@ void StatusEffects_Construct2_EnemyModifs() strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Big"); //-1.0 means unused - data.DamageTakenMulti = 0.25; + data.DamageTakenMulti = -1.0; data.DamageDealMulti = -1.0; data.MovementspeedModif = -1.0; data.AttackspeedBuff = -1.0; @@ -7436,7 +7460,7 @@ void StatusEffects_Construct2_EnemyModifs() strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Strong"); //-1.0 means unused data.DamageTakenMulti = -1.0; - data.DamageDealMulti = 3.0; + data.DamageDealMulti = 1.75; data.MovementspeedModif = -1.0; data.AttackspeedBuff = -1.0; data.Positive = true; @@ -7536,7 +7560,7 @@ void StatusEffects_Construct2_EnemyModifs() //-1.0 means unused data.DamageTakenMulti = -1.0; data.DamageDealMulti = -1.0; - data.MovementspeedModif = -1.0; + data.MovementspeedModif = -1.0; data.AttackspeedBuff = -1.0; data.Positive = true; data.ShouldScaleWithPlayerCount = false; @@ -7577,6 +7601,22 @@ void StatusEffects_Construct2_EnemyModifs() data.TimerRepeatCall_Func = Const2_SefHeal_Timer; StatusEffect_AddGlobal(data); + strcopy(data.BuffName, sizeof(data.BuffName), "Armoring Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Armoring"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = INVALID_FUNCTION; + data.OnBuffEndOrDeleted = INVALID_FUNCTION; + data.TimerRepeatCall_Func = Const2_Armoring_Timer; + StatusEffect_AddGlobal(data); + strcopy(data.BuffName, sizeof(data.BuffName), "Laggy"); strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty @@ -7662,10 +7702,10 @@ void StatusEffects_Construct2_EnemyModifs() strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), "TF"); //dont display above head, so empty strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "The First"); //-1.0 means unused - data.DamageTakenMulti = 0.3; - data.DamageDealMulti = 2.0; + data.DamageTakenMulti = 0.6; + data.DamageDealMulti = 0.7; data.MovementspeedModif = -1.0; - data.AttackspeedBuff = (1.0 / 2.0); + data.AttackspeedBuff = (1.0 / 1.5); data.Positive = true; data.ShouldScaleWithPlayerCount = false; data.OnBuffStarted = INVALID_FUNCTION; @@ -7674,15 +7714,15 @@ void StatusEffects_Construct2_EnemyModifs() StatusEffect_AddGlobal(data); - strcopy(data.BuffName, sizeof(data.BuffName), "Xeno Infection"); + strcopy(data.BuffName, sizeof(data.BuffName), "Xeno Infection Buff"); strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Xeno"); //-1.0 means unused - data.DamageTakenMulti = 0.75; - data.DamageDealMulti = 0.3; + data.DamageTakenMulti = 0.65; + data.DamageDealMulti = 0.4; data.MovementspeedModif = -1.0; - data.AttackspeedBuff = (1.0 / 0.85); + data.AttackspeedBuff = (1.0 / 0.9); data.Positive = true; data.ShouldScaleWithPlayerCount = false; data.OnBuffStarted = Const2Modifs_Xeno_Start; @@ -7695,10 +7735,10 @@ void StatusEffects_Construct2_EnemyModifs() strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), ""); //-1.0 means unused - data.DamageTakenMulti = 0.7; + data.DamageTakenMulti = 0.65; data.DamageDealMulti = 0.4; data.MovementspeedModif = -1.0; - data.AttackspeedBuff = (1.0 / 0.85); + data.AttackspeedBuff = (1.0 / 0.9); data.Positive = true; data.ShouldScaleWithPlayerCount = false; data.OnBuffStarted = Const2Modifs_Xeno_Start_Already; @@ -7711,8 +7751,8 @@ void StatusEffects_Construct2_EnemyModifs() strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Perfected Instinct"); //-1.0 means unused - data.DamageTakenMulti = 0.3; - data.DamageDealMulti = 2.0; + data.DamageTakenMulti = 0.75; + data.DamageDealMulti = 0.4; data.MovementspeedModif = -1.0; data.AttackspeedBuff = (1.0 / 1.5); data.Positive = true; @@ -7730,7 +7770,7 @@ void StatusEffects_Construct2_EnemyModifs() //-1.0 means unused data.DamageTakenMulti = -1.0; data.DamageDealMulti = -1.0; - data.MovementspeedModif = 4.0; + data.MovementspeedModif = 3.0; data.AttackspeedBuff = -1.0; data.Positive = true; data.ShouldScaleWithPlayerCount = false; @@ -7739,48 +7779,340 @@ void StatusEffects_Construct2_EnemyModifs() data.OnBuffEndOrDeleted = INVALID_FUNCTION; data.TimerRepeatCall_Func = INVALID_FUNCTION; StatusEffect_AddGlobal(data); -} + + strcopy(data.BuffName, sizeof(data.BuffName), "Motivating Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Motivating"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnTakeDamage_TakenFunc = INVALID_FUNCTION; + data.OnBuffStarted = INVALID_FUNCTION; + data.OnBuffEndOrDeleted = INVALID_FUNCTION; + data.TimerRepeatCall_Func = Const2_Motivation_Do; + StatusEffect_AddGlobal(data); -void Const2Modifs_Haste_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) -{ - //not an npc, ignore. - if(!b_ThisWasAnNpc[victim]) - return; + strcopy(data.BuffName, sizeof(data.BuffName), "Invisible Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Invisible"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = Const2Modifs_Paranormal_Start; + data.OnBuffEndOrDeleted = INVALID_FUNCTION; + data.TimerRepeatCall_Func = INVALID_FUNCTION; + StatusEffect_AddGlobal(data); - SetEntityRenderColor_NpcAll(victim, 1.5, 1.5, 0.25); -} -void Const2Modifs_Haste_End(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) -{ - //not an npc, ignore. - if(!IsValidEntity(victim) || !b_ThisWasAnNpc[victim]) - return; + strcopy(data.BuffName, sizeof(data.BuffName), "Asexual Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Asexual"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = INVALID_FUNCTION; + data.OnBuffEndOrDeleted = Const2Modifs_Asexual_End; + data.TimerRepeatCall_Func = INVALID_FUNCTION; + StatusEffect_AddGlobal(data); + + strcopy(data.BuffName, sizeof(data.BuffName), "Glug Infested Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Glug Infested"); + //-1.0 means unused + data.DamageTakenMulti = 0.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = Const2Modifs_Glug_Start; + data.OnBuffEndOrDeleted = Const2Modifs_Glug_End; + data.OnTakeDamage_TakenFunc = Glug_TakeDamage_Spread; + StatusEffect_AddGlobal(data); - SetEntityRenderColor_NpcAll(victim, (1.0 / 1.5), (1.0 / 1.5), (1.0 / 0.25)); -} + strcopy(data.BuffName, sizeof(data.BuffName), "Explosive Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Explosive"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = Const2Modifs_Explosive_Start; + data.OnBuffEndOrDeleted = Const2Modifs_Explosive_End; + data.OnTakeDamage_TakenFunc = INVALID_FUNCTION; + StatusEffect_AddGlobal(data); + + strcopy(data.BuffName, sizeof(data.BuffName), "Stalker Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Stalker"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = 5.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = Const2Modifs_Stalker_Start; + data.OnBuffEndOrDeleted = INVALID_FUNCTION; + data.OnTakeDamage_TakenFunc = INVALID_FUNCTION; + StatusEffect_AddGlobal(data); + + strcopy(data.BuffName, sizeof(data.BuffName), "Stalker Prefix Nerf"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), ""); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = 0.85; + data.AttackspeedBuff = -1.0; + data.Positive = false; + data.ElementalLogic = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = INVALID_FUNCTION; + data.OnBuffEndOrDeleted = INVALID_FUNCTION; + data.OnTakeDamage_TakenFunc = INVALID_FUNCTION; + StatusEffect_AddGlobal(data); + data.ElementalLogic = false; + + strcopy(data.BuffName, sizeof(data.BuffName), "Disco Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Disco"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = Disco_Start; + data.OnBuffEndOrDeleted = Perfected_InstinctEnd; + data.TimerRepeatCall_Func = Disco_Timer; + StatusEffect_AddGlobal(data); + + + strcopy(data.BuffName, sizeof(data.BuffName), "Toxic Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Toxic"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = Toxic_Start; + data.OnBuffEndOrDeleted = Perfected_InstinctEnd; + data.TimerRepeatCall_Func = Toxic_Think_Do; + StatusEffect_AddGlobal(data); + + strcopy(data.BuffName, sizeof(data.BuffName), "Boing Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Boing"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = INVALID_FUNCTION; + data.OnBuffEndOrDeleted = INVALID_FUNCTION; + data.TimerRepeatCall_Func = Boing_Think_Do; + StatusEffect_AddGlobal(data); + data.TimerRepeatCall_Func = INVALID_FUNCTION; -void Const2Modifs_Big_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) -{ - //not an npc, ignore. - if(!b_ThisWasAnNpc[victim]) - return; + + strcopy(data.BuffName, sizeof(data.BuffName), "Knockback Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Knockback"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = INVALID_FUNCTION; + data.OnBuffEndOrDeleted = INVALID_FUNCTION; + data.OnTakeDamage_PostAttacker = Knocback_Prefix_TakeDamageAttackerPost; + StatusEffect_AddGlobal(data); + + data.OnTakeDamage_PostAttacker = INVALID_FUNCTION; + + strcopy(data.BuffName, sizeof(data.BuffName), "Loud Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Loud"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = INVALID_FUNCTION; + data.OnBuffEndOrDeleted = INVALID_FUNCTION; + data.TimerRepeatCall_Func = INVALID_FUNCTION; + StatusEffect_AddGlobal(data); + + strcopy(data.BuffName, sizeof(data.BuffName), "Legendary Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Legendary"); + //-1.0 means unused + data.DamageTakenMulti = 0.0; + data.DamageDealMulti = 0.0; + data.MovementspeedModif = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = Legendary_Prefix_Start; + data.OnBuffEndOrDeleted = Perfected_InstinctEnd; + data.OnTakeDamage_TakenFunc = Legendary_Prefix_DamageTakenFunc; + data.OnTakeDamage_DealFunc = Legendary_Prefix_DamageDealFunc; + StatusEffect_AddGlobal(data); - SetEntPropFloat(victim, Prop_Send, "m_flModelScale", GetEntPropFloat(victim, Prop_Send, "m_flModelScale") * 1.25); -} -void Const2Modifs_Big_End(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) -{ - //not an npc, ignore. - if(!IsValidEntity(victim) || !b_ThisWasAnNpc[victim]) - return; + data.OnTakeDamage_TakenFunc = INVALID_FUNCTION; + data.OnTakeDamage_DealFunc = INVALID_FUNCTION; - SetEntPropFloat(victim, Prop_Send, "m_flModelScale", GetEntPropFloat(victim, Prop_Send, "m_flModelScale") * (1.0 / 1.25)); -} + strcopy(data.BuffName, sizeof(data.BuffName), "Ragebaiter Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Ragebaiter"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = INVALID_FUNCTION; + data.OnBuffEndOrDeleted = INVALID_FUNCTION; + data.TimerRepeatCall_Func = Ragebaiter_Think_Do; + StatusEffect_AddGlobal(data); -void Const2Modifs_Strong_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) -{ - //not an npc, ignore. - if(!b_ThisWasAnNpc[victim]) + strcopy(data.BuffName, sizeof(data.BuffName), "Semi Healthy Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Semi Healthy"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = -1.0; + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = SemiHealthy_Start; + data.OnBuffEndOrDeleted = SemiHealthy_End; + data.TimerRepeatCall_Func = INVALID_FUNCTION; + StatusEffect_AddGlobal(data); + + strcopy(data.BuffName, sizeof(data.BuffName), "Fat Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Fat"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = 0.25; + data.AttackspeedBuff = -1.0; + data.Positive = false; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = Const2Modifs_Fat_Start; + data.OnBuffEndOrDeleted = Const2Modifs_Fat_End; + data.TimerRepeatCall_Func = INVALID_FUNCTION; + StatusEffect_AddGlobal(data); + + strcopy(data.BuffName, sizeof(data.BuffName), "Modifier+ Prefix"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), ""); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + strcopy(data.PrefixEnemyName, sizeof(data.PrefixEnemyName), "Modifier+"); + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = 0.25; + data.AttackspeedBuff = -1.0; + data.Positive = false; + data.ShouldScaleWithPlayerCount = false; + data.OnBuffStarted = Const2Modifs_Modifier_Start; + data.OnBuffEndOrDeleted = INVALID_FUNCTION; + data.TimerRepeatCall_Func = INVALID_FUNCTION; + StatusEffect_AddGlobal(data); + +} + + +void Const2Modifs_Haste_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!b_ThisWasAnNpc[victim]) + return; + + SetEntityRenderColor_NpcAll(victim, 1.5, 1.5, 0.25); +} +void Const2Modifs_Haste_End(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!IsValidEntity(victim) || !b_ThisWasAnNpc[victim]) + return; + + SetEntityRenderColor_NpcAll(victim, (1.0 / 1.5), (1.0 / 1.5), (1.0 / 0.25)); +} + + +void Const2Modifs_Big_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!b_ThisWasAnNpc[victim]) + return; + + SetEntPropFloat(victim, Prop_Send, "m_flModelScale", GetEntPropFloat(victim, Prop_Send, "m_flModelScale") * 1.25); + float maxhealth = float(ReturnEntityMaxHealth(victim)); + maxhealth *= 2.0; + SetEntProp(victim, Prop_Data, "m_iMaxHealth", RoundToNearest(maxhealth)); +} +void Const2Modifs_Big_End(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!IsValidEntity(victim) || !b_ThisWasAnNpc[victim]) + return; + + SetEntPropFloat(victim, Prop_Send, "m_flModelScale", GetEntPropFloat(victim, Prop_Send, "m_flModelScale") * (1.0 / 1.25)); + float maxhealth = float(ReturnEntityMaxHealth(victim)); + maxhealth /= 2.0; + SetEntProp(victim, Prop_Data, "m_iMaxHealth", RoundToNearest(maxhealth)); +} + +void Const2Modifs_Strong_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!b_ThisWasAnNpc[victim]) return; SetEntityRenderColor_NpcAll(victim, 1.5, 0.25, 0.25); @@ -7863,8 +8195,13 @@ void Const2Modifs_Vampire_TakeDamageAttackerPost(int attacker, int victim, float { if(attacker == victim) return; - - HealEntityGlobal(attacker, attacker, damage * 10, 2.0, 0.0, HEAL_SELFHEAL); + float HealBy = damage * 10.0; + float maxhealth = float(ReturnEntityMaxHealth(attacker)); + maxhealth *= 0.25; + if(HealBy >= maxhealth) + HealBy = maxhealth; + + HealEntityGlobal(attacker, attacker, HealBy, 2.0, 0.0, HEAL_SELFHEAL); } @@ -7921,18 +8258,18 @@ static void Const2_Sprayer_Timer(int entity, StatusEffect Apply_MasterStatusEffe return; } int ArrayPosition = E_AL_StatusEffects[entity].FindValue(Apply_StatusEffect.BuffIndex, E_StatusEffect::BuffIndex); - Apply_StatusEffect.DataForUse = GetGameTime() + 2.0; + Apply_StatusEffect.DataForUse = GetGameTime() + 4.0; E_AL_StatusEffects[entity].SetArray(ArrayPosition, Apply_StatusEffect); - float DamageDeal = 1000.0; + float DamageDeal = 250.0; #if defined ZR DamageDeal = float(CurrentCash); #endif - DamageDeal *= 0.01; - if(DamageDeal <= 50.0) - DamageDeal = 50.0; + DamageDeal *= 0.0015; + if(DamageDeal <= 25.0) + DamageDeal = 25.0; - if(DamageDeal > 1000.0) - DamageDeal = 1000.0; + if(DamageDeal > 500.0) + DamageDeal = 500.0; CClotBody npc = view_as(entity); float WorldSpaceVec[3]; WorldSpaceCenter(entity, WorldSpaceVec); @@ -7947,11 +8284,12 @@ static void Const2_Sprayer_Timer(int entity, StatusEffect Apply_MasterStatusEffe int projectile = npc.FireParticleRocket(FireRandomParticle, DamageDeal, 500.0, 150.0, "raygun_projectile_blue_crit", false); static float angles[3]; GetEntPropVector(projectile, Prop_Send, "m_angRotation", angles); + WandProjectile_ApplyFunctionToEntity(entity, Rocket_Sprayer_StartTouch); Initiate_HomingProjectile(projectile, projectile, - 90.0, // float lockonAngleMax, - 13.0, //float homingaSec, + 70.0, // float lockonAngleMax, + 8.0, //float homingaSec, false, // bool LockOnlyOnce, true, // bool changeAngles, angles); // float AnglesInitiate[3]); @@ -7960,6 +8298,70 @@ static void Const2_Sprayer_Timer(int entity, StatusEffect Apply_MasterStatusEffe //spray particles } +public void Rocket_Sprayer_StartTouch(int entity, int target) +{ + if(target > 0 && target < MAXENTITIES) //did we hit something??? + { + + int owner = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity"); + if(!IsValidEntity(owner)) + { + owner = 0; + } + + int inflictor = h_ArrowInflictorRef[entity]; + if(inflictor != -1) + inflictor = EntRefToEntIndex(h_ArrowInflictorRef[entity]); + + if(inflictor == -1) + inflictor = owner; + + float ProjectileLoc[3]; + GetEntPropVector(entity, Prop_Data, "m_vecAbsOrigin", ProjectileLoc); + float DamageDeal = fl_rocket_particle_dmg[entity]; + if(ShouldNpcDealBonusDamage(target)) + DamageDeal *= h_BonusDmgToSpecialArrow[entity]; + + int DamageTypes; + DamageTypes |= DMG_PREVENT_PHYSICS_FORCE; + + if((i_ExplosiveProjectileHexArray[entity] & EP_DEALS_CLUB_DAMAGE)) + { + DamageTypes |= DMG_CLUB; + } + else + { + DamageTypes |= DMG_BULLET; + } + + + if(b_should_explode[entity]) //should we "explode" or do "kinetic" damage + { + i_ExplosiveProjectileHexArray[owner] = i_ExplosiveProjectileHexArray[entity]; + Explode_Logic_Custom(fl_rocket_particle_dmg[entity] , inflictor , owner , -1 , ProjectileLoc , fl_rocket_particle_radius[entity] , _ , _ , b_rocket_particle_from_blue_npc[entity]); //acts like a rocket + } + else + { + SDKHooks_TakeDamage(target, owner, inflictor, DamageDeal, DamageTypes, -1, .Zr_damage_custom = ZR_DAMAGE_NOAPPLYBUFFS_OR_DEBUFFS); //acts like a kinetic rocket + } + + int particle = EntRefToEntIndex(i_WandParticle[entity]); + if(IsValidEntity(particle)) + { + RemoveEntity(particle); + } + } + else + { + int particle = EntRefToEntIndex(i_WandParticle[entity]); + //we uhh, missed? + if(IsValidEntity(particle)) + { + RemoveEntity(particle); + } + } + RemoveEntity(entity); +} static void Const2_Gravitational_Timer(int entity, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) { @@ -8024,6 +8426,10 @@ void Const2_1UpStart(int victim, StatusEffect Apply_MasterStatusEffect, E_Status CClotBody npc = view_as(victim); npc.m_iHealthBar++ +#if defined ZR + if(b_thisNpcIsARaid[victim]) + WaveStart_SubWaveStart(GetGameTime() + 700.0); //due to lots and lots of time +#endif } @@ -8038,10 +8444,25 @@ static void Const2_SefHeal_Timer(int entity, StatusEffect Apply_MasterStatusEffe E_AL_StatusEffects[entity].SetArray(ArrayPosition, Apply_StatusEffect); float maxhealth = float(ReturnEntityMaxHealth(entity)); + if(b_thisNpcIsARaid[entity] || b_thisNpcIsABoss[entity]) + maxhealth *= 0.01; HealEntityGlobal(entity, entity, maxhealth / 5.0, 1.0, 0.0, HEAL_SELFHEAL); } +static void Const2_Armoring_Timer(int entity, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + if(Apply_StatusEffect.DataForUse > GetGameTime()) + { + return; + } + int ArrayPosition = E_AL_StatusEffects[entity].FindValue(Apply_StatusEffect.BuffIndex, E_StatusEffect::BuffIndex); + Apply_StatusEffect.DataForUse = GetGameTime() + 3.0; + E_AL_StatusEffects[entity].SetArray(ArrayPosition, Apply_StatusEffect); - + float maxhealth = float(ReturnEntityMaxHealth(entity)); + if(b_thisNpcIsARaid[entity] || b_thisNpcIsABoss[entity]) + maxhealth *= 0.025; + GrantEntityArmor(entity, false, 1.0, 0.25, 0, maxhealth / 4.0); +} static void Const2_Laggy_Timer(int entity, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) { @@ -8172,9 +8593,12 @@ void Const2_XenoInfect(int entity, int victim, float &healingammount) if(GetTeam(victim) != TFTeam_Red) { - if(HasSpecificBuff(victim, "Xeno Infection") || HasSpecificBuff(victim, "Xeno Infection Buff Only")) + if(HasSpecificBuff(victim, "Xeno Infection Buff") || HasSpecificBuff(victim, "Xeno Infection Buff Only")) return; //infects all teams except red + float maxhealth = float(ReturnEntityMaxHealth(victim)); + if(float(GetEntProp(victim, Prop_Data, "m_iHealth")) >= maxhealth * 0.5) + return; #if defined ZR Xeno_Resurgance_Enemy(victim); #endif @@ -8255,7 +8679,16 @@ float Perfected_Instinct_Dodge(int attacker, int victim, StatusEffect Apply_Mast TE_SendToAll(); int Rand = GetRandomInt(0, sizeof(MissSound) - 1); EmitSoundToAll(MissSound[Rand], victim, _, 80); - ApplyStatusEffect(victim, victim, "Perfected Instinct Speed", 0.35); + if(Apply_StatusEffect.DataForUse > GetGameTime()) + return 0.0; + int ArrayPosition = E_AL_StatusEffects[victim].FindValue(Apply_StatusEffect.BuffIndex, E_StatusEffect::BuffIndex); + E_AL_StatusEffects[victim].SetArray(ArrayPosition, Apply_StatusEffect); + if(!b_thisNpcIsARaid[victim]) + ApplyStatusEffect(victim, victim, "Perfected Instinct Speed", 0.35); + if(b_thisNpcIsABoss[victim]) + Apply_StatusEffect.DataForUse = GetGameTime() + 3.0; + + E_AL_StatusEffects[victim].SetArray(ArrayPosition, Apply_StatusEffect); return 0.0; } @@ -8301,4 +8734,659 @@ void Const2Modifs_Xeno_End(int victim, StatusEffect Apply_MasterStatusEffect, E_ CClotBody npc = view_as(victim); npc.m_iBleedType = RoundToNearest(Apply_StatusEffect.DataForUse); SetEntityRenderColor_NpcAll(victim, (1.0 / 0.15), (1.0 / 0.15), (1.0 / 0.15)); +} + + +static void Const2_Motivation_Do(int entity, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + if(Apply_StatusEffect.DataForUse > GetGameTime()) + { + return; + } + int ArrayPosition = E_AL_StatusEffects[entity].FindValue(Apply_StatusEffect.BuffIndex, E_StatusEffect::BuffIndex); + Apply_StatusEffect.DataForUse = GetGameTime() + 0.5; + E_AL_StatusEffects[entity].SetArray(ArrayPosition, Apply_StatusEffect); + + //infect + ContractedMotivatorEffect2(entity, 300.0); + ExpidonsaGroupHeal(entity, + 300.0, + 99, + 0.0, + 1.0, + false, + ConstractedMotivatorBuffs , + _, + true); +} + +void ContractedMotivatorEffect2(int entity, float range) +{ + float ProjectileLoc[3]; + GetEntPropVector(entity, Prop_Data, "m_vecAbsOrigin", ProjectileLoc); + spawnRing_Vectors(ProjectileLoc, 0.1, 0.0, 0.0, 10.0, "materials/sprites/laserbeam.vmt", 200, 200, 65, 100, 1, 0.5, 5.0, 0.1, 3, range * 2.0); +} +void ConstractedMotivatorBuffs(int entity, int victim, float &healingammount) +{ + if(i_NpcIsABuilding[victim]) + return; + + if(GetTeam(entity) == GetTeam(victim)) + { + ApplyStatusEffect(entity, victim, "War Cry", 3.0); + } + +} + + + +void Const2Modifs_Paranormal_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!b_ThisWasAnNpc[victim]) + return; + ZRModifs_ParanormalActivityNPC(victim); +} +void Const2Modifs_Asexual_End(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!IsValidEntity(victim) || !b_ThisWasAnNpc[victim]) + return; + + float maxhealth = float(ReturnEntityMaxHealth(victim)); + maxhealth *= 0.5; + float pos[3]; GetEntPropVector(victim, Prop_Data, "m_vecAbsOrigin", pos); + pos[2] += 50.0; + float ang[3]; GetEntPropVector(victim, Prop_Data, "m_angRotation", ang); + int summon = NPC_CreateById(i_NpcInternalId[victim], -1, pos, ang, GetTeam(victim)); + if(summon > MaxClients) + { +#if defined ZR + if(b_thisNpcIsARaid[summon]) + WaveStart_SubWaveStart(GetGameTime()); //due to lots and lots of time +#endif + fl_Extra_Damage[summon] = fl_Extra_Damage[victim]; + fl_Extra_Speed[summon] = fl_Extra_Speed[victim]; + fl_Extra_RangedArmor[summon] = fl_Extra_RangedArmor[victim]; + fl_Extra_MeleeArmor[summon] = fl_Extra_MeleeArmor[victim]; + SetEntProp(summon, Prop_Data, "m_iHealth", RoundToNearest(maxhealth)); + SetEntProp(summon, Prop_Data, "m_iMaxHealth", RoundToNearest(maxhealth)); + float flPos[3]; + flPos = pos; + flPos[2] += 300.0; + flPos[0] += GetRandomInt(0,1) ? GetRandomFloat(-200.0, -100.0) : GetRandomFloat(100.0, 200.0); + flPos[1] += GetRandomInt(0,1) ? GetRandomFloat(-200.0, -100.0) : GetRandomFloat(200.0, 200.0); + CClotBody npc = view_as(summon); + npc.SetVelocity({0.0,0.0,0.0}); + PluginBot_Jump(summon, flPos); + ApplyStatusEffect(summon, summon, "Unstoppable Force", 2.0); +#if defined ZR + ZRModifs_GiveRandomPrefix(summon); +#endif + } +} + + +void Const2Modifs_Glug_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!b_ThisWasAnNpc[victim]) + return; + + SetEntityRenderColor_NpcAll(victim, 1.5, 1.5, 0.15); +} +void Const2Modifs_Glug_End(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!IsValidEntity(victim) || !b_ThisWasAnNpc[victim]) + return; + + SetEntityRenderColor_NpcAll(victim, (1.0 / 1.5), (1.0 / 0.15), (1.0 / 0.15)); +} + + +float Glug_TakeDamage_Spread(int attacker, int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect, int damagetype) +{ + if(CheckInHud()) + return 1.0; + + if(Apply_StatusEffect.DataForUse > GetGameTime()) + { + return 1.0; + } + int ArrayPosition = E_AL_StatusEffects[victim].FindValue(Apply_StatusEffect.BuffIndex, E_StatusEffect::BuffIndex); + Apply_StatusEffect.DataForUse = GetGameTime() + 10.0; + E_AL_StatusEffects[victim].SetArray(ArrayPosition, Apply_StatusEffect); + + float maxhealth = float(ReturnEntityMaxHealth(victim)); + maxhealth *= 0.25; + if(b_thisNpcIsARaid[victim] || b_thisNpcIsABoss[victim]) + maxhealth *= 0.025; + + float pos[3]; GetEntPropVector(victim, Prop_Data, "m_vecAbsOrigin", pos); + float ang[3]; GetEntPropVector(victim, Prop_Data, "m_angRotation", ang); + int summon = NPC_CreateByName("npc_glug", -1, pos, ang, GetTeam(victim), ""); + if(summon > MaxClients) + { + float DamageDeal = 10.0; +#if defined ZR + DamageDeal = float(CurrentCash); +#endif + DamageDeal *= 0.001; + if(DamageDeal <= 1.0) + DamageDeal = 1.0; + + if(DamageDeal > 100.0) + DamageDeal = 100.0; + fl_Extra_Damage[summon] *= DamageDeal; + fl_Extra_Speed[summon] = fl_Extra_Speed[victim]; + fl_Extra_RangedArmor[summon] = fl_Extra_RangedArmor[victim]; + fl_Extra_MeleeArmor[summon] = fl_Extra_MeleeArmor[victim]; + SetEntProp(summon, Prop_Data, "m_iHealth", RoundToNearest(maxhealth)); + SetEntProp(summon, Prop_Data, "m_iMaxHealth", RoundToNearest(maxhealth)); + float flPos[3]; + flPos = pos; + flPos[2] += 300.0; + flPos[0] += GetRandomInt(0,1) ? GetRandomFloat(-200.0, -100.0) : GetRandomFloat(100.0, 200.0); + flPos[1] += GetRandomInt(0,1) ? GetRandomFloat(-200.0, -100.0) : GetRandomFloat(200.0, 200.0); + CClotBody npc = view_as(summon); + npc.SetVelocity({0.0,0.0,0.0}); + PluginBot_Jump(summon, flPos); + } + return 1.0; +} + + + +void Const2Modifs_Explosive_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!b_ThisWasAnNpc[victim]) + return; + + SetEntityRenderColor_NpcAll(victim, 2.5, 0.15, 0.15); +} +void Const2Modifs_Explosive_End(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!IsValidEntity(victim) || !b_ThisWasAnNpc[victim]) + return; + float DamageDeal = 10000.0; +#if defined ZR + DamageDeal = float(CurrentCash); + DamageDeal *= 0.25; + if(DamageDeal <= 100.0) + DamageDeal = 100.0; + + b_NpcIsTeamkiller[victim] = true; + Explode_Logic_Custom(DamageDeal, + victim, + victim, + -1, + _, + 350.0, + _, + _, + true, + 99, + false, + 0.01, + _, + BeheadedKamiBoomInternal); + b_NpcIsTeamkiller[victim] = true; + ObjectVintulumBomb npc = view_as(victim); + npc.PlayExplodeDo(true, true); +#endif +} + + +void Const2Modifs_Stalker_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!b_ThisWasAnNpc[victim]) + return; + + float maxhealth = float(ReturnEntityMaxHealth(victim)); + maxhealth *= 100.0; + SetEntProp(victim, Prop_Data, "m_iHealth", RoundToNearest(maxhealth)); + SetEntProp(victim, Prop_Data, "m_iMaxHealth", RoundToNearest(maxhealth)); + SetEntityRenderColor_NpcAll(victim, 0.0, 0.0, 0.0); + b_StaticNPC[victim] = true; + AddNpcToAliveList(victim, b_StaticNPC[victim] ? 1 : 0); +} +void Disco_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + if(IsValidEntity(Apply_StatusEffect.WearableUse)) + return; + + float flPos[3]; + GetEntPropVector(victim, Prop_Data, "m_vecAbsOrigin", flPos); + + int entity = CreateEntityByName("light_dynamic"); + if(entity != -1) + { + TeleportEntity(entity, flPos, {0.0,0.0,0.0}, NULL_VECTOR); + + DispatchKeyValue(entity, "brightness", "6"); + DispatchKeyValue(entity, "spotlight_radius", "300"); + DispatchKeyValue(entity, "distance", "300"); + DispatchKeyValue(entity, "_light", "255 255 0 255"); + DispatchSpawn(entity); + ActivateEntity(entity); + AcceptEntityInput(entity, "LightOn"); + b_EntityCantBeColoured[entity] = true; + SetParent(victim, entity); + SDKCall_SetLocalOrigin(entity, {0.0,0.0,80.0}); + int ArrayPosition = E_AL_StatusEffects[victim].FindValue(Apply_StatusEffect.BuffIndex, E_StatusEffect::BuffIndex); + Apply_StatusEffect.WearableUse = EntIndexToEntRef(entity); + E_AL_StatusEffects[victim].SetArray(ArrayPosition, Apply_StatusEffect); + } + + +} + + + + +static void Disco_Timer(int entity, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + if(Apply_StatusEffect.DataForUse > GetGameTime()) + { + return; + } + if(!IsValidEntity(Apply_StatusEffect.WearableUse)) + return; + + int ArrayPosition = E_AL_StatusEffects[entity].FindValue(Apply_StatusEffect.BuffIndex, E_StatusEffect::BuffIndex); + Apply_StatusEffect.DataForUse = GetGameTime() + 0.0; + E_AL_StatusEffects[entity].SetArray(ArrayPosition, Apply_StatusEffect); + int color[4]; + color[0] = GetRandomInt(0,255); + color[1] = GetRandomInt(0,255); + color[2] = GetRandomInt(0,255); + color[3] = 255; + + SetEntityRenderColor(entity, color[0], color[1], color[2], color[3]); + for(int WearableSlot=0; WearableSlot GetGameTime()) + { + return; + } + int ArrayPosition = E_AL_StatusEffects[entity].FindValue(Apply_StatusEffect.BuffIndex, E_StatusEffect::BuffIndex); + Apply_StatusEffect.DataForUse = GetGameTime() + 0.5; + E_AL_StatusEffects[entity].SetArray(ArrayPosition, Apply_StatusEffect); + + float DamageDeal = 10000.0; +#if defined ZR + DamageDeal = float(CurrentCash); +#endif + DamageDeal *= 0.005; + Explode_Logic_Custom(DamageDeal, + entity, + entity, + -1, + _, + 200.0, + _, + _, + true, + 99, + false, + 0.01, + _); +} + + +static void Boing_Think_Do(int entity, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + if(Apply_StatusEffect.DataForUse > GetGameTime()) + { + return; + } + int ArrayPosition = E_AL_StatusEffects[entity].FindValue(Apply_StatusEffect.BuffIndex, E_StatusEffect::BuffIndex); + Apply_StatusEffect.DataForUse = GetGameTime() + 3.0; + E_AL_StatusEffects[entity].SetArray(ArrayPosition, Apply_StatusEffect); + + float pos[3]; GetEntPropVector(entity, Prop_Data, "m_vecAbsOrigin", pos); + float flPos[3]; + flPos = pos; + flPos[2] += 400.0; + flPos[0] += GetRandomInt(0,1) ? GetRandomFloat(-200.0, -100.0) : GetRandomFloat(100.0, 200.0); + flPos[1] += GetRandomInt(0,1) ? GetRandomFloat(-200.0, -100.0) : GetRandomFloat(200.0, 200.0); + CClotBody npc = view_as(entity); + npc.SetVelocity({0.0,0.0,0.0}) + PluginBot_Jump(entity, flPos); + fl_GravityMulti[entity] = 3.0; + int Rand = GetRandomInt(0, sizeof(BoingSound) - 1); + EmitSoundToAll(BoingSound[Rand], entity, SNDCHAN_AUTO, 80,_,0.85); +} + + +void Knocback_Prefix_TakeDamageAttackerPost(int attacker, int victim, float damage, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect, int damagetype) +{ + if(attacker == victim) + return; + + Custom_Knockback(attacker, victim, 800.0, true); +} + + +#define LEGENDARY_MAXTIME 30.0 +void Legendary_Prefix_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + if(IsValidEntity(Apply_StatusEffect.WearableUse)) + return; + + float flPos[3]; + GetEntPropVector(victim, Prop_Data, "m_vecAbsOrigin", flPos); + int ParticleEffect = ParticleEffectAt_Parent(flPos, "utaunt_poweraura_green_parent", victim, "", {0.0,0.0,0.0}) + if(b_thisNpcIsABoss[victim] || b_thisNpcIsARaid[victim]) + Apply_StatusEffect.DataForUse = GetGameTime() + (LEGENDARY_MAXTIME * 2.0); //Time passed since, after 30 seconds , max power + else + Apply_StatusEffect.DataForUse = GetGameTime() + LEGENDARY_MAXTIME; //Time passed since, after 30 seconds , max power + + int ArrayPosition = E_AL_StatusEffects[victim].FindValue(Apply_StatusEffect.BuffIndex, E_StatusEffect::BuffIndex); + Apply_StatusEffect.WearableUse = EntIndexToEntRef(ParticleEffect); + E_AL_StatusEffects[victim].SetArray(ArrayPosition, Apply_StatusEffect); + + +} + + +float Legendary_Prefix_DamageTakenFunc(int attacker, int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect, int damagetype) +{ + float CurrentTime = Apply_StatusEffect.DataForUse; + CurrentTime -= GetGameTime(); + if(CurrentTime <= 0.1) + CurrentTime = 0.1; + + static float MinBuff = 0.5; + static float MaxBuff = 0.85; + float MaxTime = LEGENDARY_MAXTIME; + if(b_thisNpcIsABoss[victim] || b_thisNpcIsARaid[victim]) + MaxTime *= 2.0; + float buffreturn = MinBuff + ((MaxBuff - MinBuff) / (MaxTime / CurrentTime)); + return buffreturn; +} + +float Legendary_Prefix_DamageDealFunc(int attacker, int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect, int damagetype, float basedamage, float DamageBuffExtraScaling) +{ + float CurrentTime = Apply_StatusEffect.DataForUse; + CurrentTime -= GetGameTime(); + if(CurrentTime <= 1.0) + CurrentTime = 1.0; + + static float MinBuff = 2.0; + static float MaxBuff = 0.1; + float MaxTime = LEGENDARY_MAXTIME; + if(b_thisNpcIsABoss[attacker] || b_thisNpcIsARaid[attacker]) + MaxTime *= 2.0; + float buffreturn = MinBuff + ((MaxBuff - MinBuff) / (MaxTime / CurrentTime)); + + float damagereturn = 0.0; + + damagereturn += basedamage * buffreturn; + return damagereturn; +} + +static void Ragebaiter_Think_Do(int entity, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + if(Apply_StatusEffect.DataForUse > GetGameTime()) + { + return; + } + int ArrayPosition = E_AL_StatusEffects[entity].FindValue(Apply_StatusEffect.BuffIndex, E_StatusEffect::BuffIndex); + Apply_StatusEffect.DataForUse = GetGameTime() + GetRandomFloat(10.0, 30.0); + E_AL_StatusEffects[entity].SetArray(ArrayPosition, Apply_StatusEffect); + + + char RageText[255]; + static int MaxEntries; + if(!MaxEntries) + { + MaxEntries++; + Format(RageText, sizeof(RageText), "Rage Prefix Text %i", MaxEntries); + while(TranslationPhraseExists(RageText)) + { + MaxEntries++; + Format(RageText, sizeof(RageText), "Rage Prefix Text %i", MaxEntries); + } + } + Format(RageText, sizeof(RageText), "Rage Prefix Text %i", GetRandomInt(1,MaxEntries- 1)); + +#if defined ZR + PrintNPCMessageWithPrefixes(entity, "crimson", RageText, true); +#endif +} + + + +void SemiHealthy_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + float maxhealth = float(ReturnEntityMaxHealth(victim)); + maxhealth *= 1.5; + SetEntProp(victim, Prop_Data, "m_iMaxHealth", RoundToNearest(maxhealth)); +} +void SemiHealthy_End(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + float maxhealth = float(ReturnEntityMaxHealth(victim)); + maxhealth /= 1.5; + SetEntProp(victim, Prop_Data, "m_iMaxHealth", RoundToNearest(maxhealth)); +} + + +void Const2Modifs_Fat_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!b_ThisWasAnNpc[victim]) + return; + + float maxhealth = float(ReturnEntityMaxHealth(victim)); + maxhealth *= 2.0; + SetEntProp(victim, Prop_Data, "m_iHealth", RoundToNearest(maxhealth)); + SetEntProp(victim, Prop_Data, "m_iMaxHealth", RoundToNearest(maxhealth)); + SetEntPropFloat(victim, Prop_Send, "m_flModelScale", GetEntPropFloat(victim, Prop_Send, "m_flModelScale") * 1.35); +} +void Const2Modifs_Fat_End(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!IsValidEntity(victim) || !b_ThisWasAnNpc[victim]) + return; + + float maxhealth = float(ReturnEntityMaxHealth(victim)); + maxhealth /= 2.0; + SetEntProp(victim, Prop_Data, "m_iHealth", RoundToNearest(maxhealth)); + SetEntProp(victim, Prop_Data, "m_iMaxHealth", RoundToNearest(maxhealth)); + SetEntPropFloat(victim, Prop_Send, "m_flModelScale", GetEntPropFloat(victim, Prop_Send, "m_flModelScale") * (1.0 / 1.35)); +} + +void Const2Modifs_Modifier_Start(int victim, StatusEffect Apply_MasterStatusEffect, E_StatusEffect Apply_StatusEffect) +{ + //not an npc, ignore. + if(!b_ThisWasAnNpc[victim]) + return; +#if defined ZR + ZRModifs_GiveRandomPrefix(victim); + ZRModifs_GiveRandomPrefix(victim); +#endif +} + + + +public void ZRModifs_ParanormalActivityNPC(int iNpc) +{ + CClotBody ZNPC = view_as(iNpc); + + if(IsValidEntity(ZNPC.m_iWearable1) && !b_EntityCantBeColoured[ZNPC.m_iWearable1]) + { + SetEntityRenderMode(ZNPC.m_iWearable1, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable1, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable1, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable1, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsValidEntity(ZNPC.m_iWearable2) && !b_EntityCantBeColoured[ZNPC.m_iWearable2]) + { + SetEntityRenderMode(ZNPC.m_iWearable2, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable2, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable2, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable2, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsValidEntity(ZNPC.m_iWearable3) && !b_EntityCantBeColoured[ZNPC.m_iWearable3]) + { + SetEntityRenderMode(ZNPC.m_iWearable3, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable3, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable3, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable3, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsValidEntity(ZNPC.m_iWearable4) && !b_EntityCantBeColoured[ZNPC.m_iWearable4]) + { + SetEntityRenderMode(ZNPC.m_iWearable4, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable4, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable4, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable4, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsValidEntity(ZNPC.m_iWearable5) && !b_EntityCantBeColoured[ZNPC.m_iWearable5]) + { + SetEntityRenderMode(ZNPC.m_iWearable5, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable5, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable5, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable5, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsValidEntity(ZNPC.m_iWearable6) && !b_EntityCantBeColoured[ZNPC.m_iWearable6]) + { + SetEntityRenderMode(ZNPC.m_iWearable6, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable6, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable6, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable6, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsValidEntity(ZNPC.m_iWearable7) && !b_EntityCantBeColoured[ZNPC.m_iWearable7]) + { + SetEntityRenderMode(ZNPC.m_iWearable7, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable7, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable7, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable7, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsValidEntity(ZNPC.m_iWearable8) && !b_EntityCantBeColoured[ZNPC.m_iWearable8]) + { + SetEntityRenderMode(ZNPC.m_iWearable8, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable8, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable8, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable8, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsEntityAlive(ZNPC.m_iWearable1) && !b_EntityCantBeColoured[ZNPC.m_iWearable1]) + { + SetEntityRenderMode(ZNPC.m_iWearable1, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable1, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable1, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable1, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsEntityAlive(ZNPC.m_iWearable2) && !b_EntityCantBeColoured[ZNPC.m_iWearable2]) + { + SetEntityRenderMode(ZNPC.m_iWearable2, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable2, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable2, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable2, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsEntityAlive(ZNPC.m_iWearable3) && !b_EntityCantBeColoured[ZNPC.m_iWearable3]) + { + SetEntityRenderMode(ZNPC.m_iWearable3, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable3, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable3, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable3, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsEntityAlive(ZNPC.m_iWearable4) && !b_EntityCantBeColoured[ZNPC.m_iWearable4]) + { + SetEntityRenderMode(ZNPC.m_iWearable4, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable4, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable4, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable4, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsEntityAlive(ZNPC.m_iWearable5) && !b_EntityCantBeColoured[ZNPC.m_iWearable5]) + { + SetEntityRenderMode(ZNPC.m_iWearable5, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable5, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable5, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable5, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsEntityAlive(ZNPC.m_iWearable6) && !b_EntityCantBeColoured[ZNPC.m_iWearable6]) + { + SetEntityRenderMode(ZNPC.m_iWearable6, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable6, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable6, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable6, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsEntityAlive(ZNPC.m_iWearable7) && !b_EntityCantBeColoured[ZNPC.m_iWearable7]) + { + SetEntityRenderMode(ZNPC.m_iWearable7, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable7, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable7, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable7, Prop_Send, "m_fadeMaxDist", 700.0); + } + if(IsEntityAlive(ZNPC.m_iWearable8) && !b_EntityCantBeColoured[ZNPC.m_iWearable8]) + { + SetEntityRenderMode(ZNPC.m_iWearable8, RENDER_TRANSCOLOR); + SetEntityRenderColor(ZNPC.m_iWearable8, 0, 0, 0, 150); + SetEntPropFloat(ZNPC.m_iWearable8, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(ZNPC.m_iWearable8, Prop_Send, "m_fadeMaxDist", 700.0); + } + + fl_Extra_Damage[iNpc] *= 1.05; + SetEntityRenderMode(iNpc, RENDER_TRANSCOLOR); + SetEntityRenderColor(iNpc, 0, 0, 0, 150); + SetEntPropFloat(iNpc, Prop_Send, "m_fadeMinDist", 600.0); + SetEntPropFloat(iNpc, Prop_Send, "m_fadeMaxDist", 700.0); + b_NoHealthbar[iNpc] = 1; +#if defined ZR + GiveNpcOutLineLastOrBoss(iNpc, false); + b_thisNpcHasAnOutline[iNpc] = true; +#endif + + /* + float SelfPosParanormal[3]; + float AllyPosParanormal[3]; + float flDistanceToTargetParanormal = GetVectorDistance(SelfPosParanormal, AllyPosParanormal, true); + if(flDistanceToTargetParanormal < (100.0 * 100.0)) + { + fl_Extra_Speed[iNpc] *= 2.0; + } + if(flDistanceToTargetParanormal > (100.0 * 100.0)) + { + fl_Extra_Speed[iNpc] *= 0.5; + } + */ + } \ No newline at end of file diff --git a/addons/sourcemod/scripting/shared/stocks.sp b/addons/sourcemod/scripting/shared/stocks.sp index bc0560d875..f4a445a473 100644 --- a/addons/sourcemod/scripting/shared/stocks.sp +++ b/addons/sourcemod/scripting/shared/stocks.sp @@ -1101,7 +1101,8 @@ stock void SetParent(int iParent, int iChild, const char[] szAttachment = "", co { if (szAttachment[0]) // do i even have anything? { - SetVariantString(szAttachment); // "head" + if(!StrEqual(szAttachment, "root")) + SetVariantString(szAttachment); // "head" if (maintain_anyways || !AreVectorsEqual(vOffsets, view_as({0.0,0.0,0.0}))) // NULL_VECTOR { @@ -3202,7 +3203,7 @@ void Projectile_DealElementalDamage(int victim, int attacker, float Scale = 1.0) } } -bool OnlyWarnOnceEver = true; +//bool OnlyWarnOnceEver = true; stock void Explode_Logic_Custom(float damage, int client, //To get attributes from and to see what is my enemy! int entity, //Entity that gets forwarded or traced from/Distance checked. @@ -3239,6 +3240,7 @@ int inflictor = 0) explosion_range_dmg_falloff = Attributes_Get(weapon, Attrib_OverrideExplodeDmgRadiusFalloff, EXPLOSION_RANGE_FALLOFF); } #endif +/* if(explosionRadius >= 2100.0) { if(OnlyWarnOnceEver) @@ -3251,6 +3253,7 @@ int inflictor = 0) //at that point it could just be global too. explosionRadius = 2000.0; } +*/ //this should make explosives during raids more usefull. if(!FromBlueNpc) //make sure that there even is any valid npc before we do these huge calcs. { @@ -3984,8 +3987,8 @@ stock int SpawnFormattedWorldText(const char[] format, float origin[3], int text vector[1] += origin[1]; vector[2] += origin[2]; - TeleportEntity(worldtext, vector, NULL_VECTOR, NULL_VECTOR); - SetParent(entity_parent, worldtext, "", origin); + SDKCall_SetLocalOrigin(worldtext, vector); + SetParent(entity_parent, worldtext, "root", origin); } else { @@ -5888,6 +5891,7 @@ enum TankThrowLogic = 4, Boomerang = 5, ShadowingSlicer = 6, + ReilaSlash = 7, } enum struct HitDetectionEnum @@ -6042,7 +6046,7 @@ void Stocks_ColourPlayernormal(int client) while(TF2U_GetWearable(client, entity, i)) { #if defined ZR - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; #endif @@ -6130,4 +6134,14 @@ stock int TrailAttach_Bone(int player, char[] attachBone, char[] trail, int alph } return -1; +} + +stock void StringToUpper(char[] buffer) +{ + int i; + while (buffer[i] != '\0') + { + buffer[i] = CharToUpper(buffer[i]); + i++; + } } \ No newline at end of file diff --git a/addons/sourcemod/scripting/shared/stocks_override.sp b/addons/sourcemod/scripting/shared/stocks_override.sp index cdce2113e2..35915ea1ba 100644 --- a/addons/sourcemod/scripting/shared/stocks_override.sp +++ b/addons/sourcemod/scripting/shared/stocks_override.sp @@ -482,10 +482,9 @@ bool Stock_AcceptEntityInput(int dest, const char[] input, int activator=-1, int too many infractions. slay all npcs no matter what, but do not grant bonuses if it was a raid. this is an emergency, it might actually spam this very very often. In this case, we nuke all npcs immediently. There is a rare bug where it sometimes just doesnt spawn the entity. such as NPC wearables. - too many infractions. slay all npcs no matter what, but do not grant bonuses if it was a raid. */ int entity = -1; - while((entity=FindEntityByClassname(entity, "zr_base_boss")) != -1) + while((entity=FindEntityByClassname(entity, "zr_base_npc")) != -1) { #if defined ZR if(IsValidEntity(entity) && GetTeam(entity) != TFTeam_Red) diff --git a/addons/sourcemod/scripting/shared/vehicles/vehicle_shared.sp b/addons/sourcemod/scripting/shared/vehicles/vehicle_shared.sp index e37e7dcbe2..d0cda6b482 100644 --- a/addons/sourcemod/scripting/shared/vehicles/vehicle_shared.sp +++ b/addons/sourcemod/scripting/shared/vehicles/vehicle_shared.sp @@ -41,6 +41,7 @@ methodmap VehicleGeneric < CClotBody #if defined ZR Armor_Charge[obj] = 10000; + view_as(obj).m_iMaxArmor = 10000; #endif SDKHook(obj, SDKHook_Think, VehicleThink); @@ -84,6 +85,17 @@ methodmap VehicleGeneric < CClotBody SetEntProp(this.index, Prop_Data, "m_iGunIndex", value); } } + property int m_iMaxArmor + { + public get() + { + return GetEntProp(this.index, Prop_Data, "m_iMaxArmor"); + } + public set(int value) + { + SetEntProp(this.index, Prop_Data, "m_iMaxArmor", value); + } + } } static bool DoneSoundScript; @@ -96,6 +108,7 @@ void Vehicle_PluginStart() .DefineEntityField("m_hPlayer2") .DefineVectorField("m_vecDriverOffset") .DefineIntField("m_iGunIndex") + .DefineIntField("m_iMaxArmor") .DefineEntityField("m_hSeatEntity", VEHICLE_MAX_SEATS) .DefineVectorField("m_vecSeatPos", VEHICLE_MAX_SEATS) .DefineIntField("m_iSeatGunIndex", VEHICLE_MAX_SEATS) @@ -887,7 +900,7 @@ static void ZRRammingThink(VehicleGeneric obj) if(scale < 1.0 || CvarInfiniteCash.BoolValue) scale = 1.0; - damage *= scale * 0.0035; + damage *= scale * 0.0015; } else { @@ -981,6 +994,35 @@ static void AdjustClientWeapons(int client) } RestoreClientWeapons(client); + Modifier_FixColour(client); + ViewChange_PlayerModel(client); +} + +public void Modifier_FixColour(int client) +{ + if(client > MaxClients) + return; + int entity, i; + while(TF2U_GetWearable(client, entity, i)) + { + SetTeam(entity, 3); + SetEntProp(entity, Prop_Send, "m_nSkin", 0); + } + RequestFrame(OvverideTeamcolourFix, GetClientUserId(client)); +} + +static void OvverideTeamcolourFix(int userid) +{ + int client = GetClientOfUserId(userid); + if(!client) + return; + + int entity, i; + while(TF2U_GetWearable(client, entity, i)) + { + SetTeam(entity, 2); + SetEntProp(entity, Prop_Send, "m_nSkin", 0); + } } static void RestoreClientWeapons(int client) diff --git a/addons/sourcemod/scripting/shared/viewchanges.sp b/addons/sourcemod/scripting/shared/viewchanges.sp index f951e52a76..8797511053 100644 --- a/addons/sourcemod/scripting/shared/viewchanges.sp +++ b/addons/sourcemod/scripting/shared/viewchanges.sp @@ -626,12 +626,13 @@ void MedicAdjustModel(int client) if(!IsValidEntity(ViewmodelPlayerModel)) return; - /* + +#if defined ZR if(TeutonType[client] != TEUTON_NONE) { return; } - */ +#endif if(i_PlayerModelOverrideIndexWearable[client] >= 0) { return; diff --git a/addons/sourcemod/scripting/shared/wand_projectile.sp b/addons/sourcemod/scripting/shared/wand_projectile.sp index 93443b50e5..dca6b1fefa 100644 --- a/addons/sourcemod/scripting/shared/wand_projectile.sp +++ b/addons/sourcemod/scripting/shared/wand_projectile.sp @@ -144,7 +144,7 @@ float CustomPos[3] = {0.0,0.0,0.0}) //This will handle just the spawning, the re int particle = 0; - if(WandParticle[0]) //If it has something, put it in. usually it has one, but incase its invis for some odd reason, allow it to be that. + if(WandParticle[0] && !AtEdictLimit(EDICT_EFFECT)) //If it has something, put it in. usually it has one, but incase its invis for some odd reason, allow it to be that. { particle = ParticleEffectAt(fPos, WandParticle, 0.0); //Inf duartion SDKCall_SetAbsAngle(particle, fAng); @@ -519,6 +519,10 @@ stock int ApplyCustomModelToWandProjectile(int rocket, char[] modelstringname, f return -1; } + if(AtEdictLimit(EDICT_EFFECT)) + { + return -1; + } int extra_index = EntRefToEntIndex(iref_PropAppliedToRocket[rocket]); if(IsValidEntity(extra_index)) RemoveEntity(extra_index); diff --git a/addons/sourcemod/scripting/zombie_riot/building.sp b/addons/sourcemod/scripting/zombie_riot/building.sp index e45e4e5d72..c73cf8b064 100644 --- a/addons/sourcemod/scripting/zombie_riot/building.sp +++ b/addons/sourcemod/scripting/zombie_riot/building.sp @@ -1832,7 +1832,7 @@ bool Building_RepairObject(int client, int target, int weapon,float vectorhit[3] int iHealth, max_health; if(i_IsVehicle[target]) { - max_health = 10000; + max_health = view_as(target).m_iMaxArmor; iHealth = Armor_Charge[target]; } else @@ -2547,6 +2547,7 @@ void TransferDispenserBackToOtherEntity(int client, bool DontEquip = false) if(f3_CustomMinMaxBoundingBoxMinExtra[entity][2]) //wierd offset. posStacked[2] -= f3_CustomMinMaxBoundingBoxMinExtra[entity][2]; SDKCall_SetLocalOrigin(entity, posStacked); + Update_TransmitState(entity); } return; } @@ -2619,14 +2620,14 @@ void UnequipDispenser(int client, bool destroy = false) Building_Mounted[client] = -1; int entity = EntRefToEntIndex(i2_MountedInfoAndBuilding[1][client]); - if(IsValidEntity(i2_MountedInfoAndBuilding[1][client])) + if(IsValidEntity(entity)) { float posStacked[3]; GetEntPropVector(entity, Prop_Data, "m_vecAbsOrigin", posStacked); - AcceptEntityInput(i2_MountedInfoAndBuilding[1][client], "ClearParent"); + AcceptEntityInput(entity, "ClearParent"); if(f3_CustomMinMaxBoundingBoxMinExtra[entity][2]) //wierd offset. posStacked[2] -= f3_CustomMinMaxBoundingBoxMinExtra[entity][2]; - + Update_TransmitState(entity); SDKCall_SetLocalOrigin(entity, posStacked); i2_MountedInfoAndBuilding[1][client] = INVALID_ENT_REFERENCE; } diff --git a/addons/sourcemod/scripting/zombie_riot/custom/coin_flip.sp b/addons/sourcemod/scripting/zombie_riot/custom/coin_flip.sp index ca2dba0101..e0da7d8279 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/coin_flip.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/coin_flip.sp @@ -226,7 +226,7 @@ public Action flip_extra(Handle timer, int client) SetEntProp(entity, Prop_Send, "m_usSolidFlags", 8); // Fire trigger even if not solid (8) - DispatchKeyValueFloat(entity, "modelscale", 0.65); + SetEntPropFloat(entity, Prop_Send, "m_flModelScale", 0.65); Coin_flip[client] = EntIndexToEntRef(entity); mb_coin[entity] = true; diff --git a/addons/sourcemod/scripting/zombie_riot/custom/kit_flagellant.sp b/addons/sourcemod/scripting/zombie_riot/custom/kit_flagellant.sp index 234be0818a..9249ac5bb0 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/kit_flagellant.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/kit_flagellant.sp @@ -894,7 +894,7 @@ static void TriggerDeathDoor(int client, int &healing) int entity, i; while(TF2U_GetWearable(client, entity, i)) { - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; SetEntityRenderMode(entity, RENDER_NORMAL); diff --git a/addons/sourcemod/scripting/zombie_riot/custom/kit_purging.sp b/addons/sourcemod/scripting/zombie_riot/custom/kit_purging.sp index 60cff455c3..116e5721ab 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/kit_purging.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/kit_purging.sp @@ -585,6 +585,7 @@ public void Weapon_Purging_Crusher_R(int client, int weapon, bool crit, int slot Rogue_OnAbilityUse(client, weapon); Ability_Apply_Cooldown(client, slot, PURGE_ANNAHILATOR_COOLDOWN); int weaponN = Store_GiveSpecificItem(client, "Purging Annihilator"); + Ability_Apply_Cooldown(client, slot, 2.0, weaponN, true); ResetClipOfWeaponStore(weaponN, client, 9999); fl_KitPurge_Annahilator_Tookout_Time[client] = (GetGameTime() + fl_KitPurge_Annahilator_Max_Hold_Time[pap]); if(Annahilator_Remove_Timer[client] != null) @@ -603,6 +604,19 @@ public void Weapon_Purging_Crusher_R(int client, int weapon, bool crit, int slot public void Weapon_Purging_Annahilator_R(int client, int weapon, bool crit, int slot) { + if(Ability_Check_Cooldown(client, slot) > 0.0 && !CvarInfiniteCash.BoolValue) + { + float Ability_CD = Ability_Check_Cooldown(client, slot); + + if(Ability_CD <= 0.0) + Ability_CD = 0.0; + + ClientCommand(client, "playgamesound items/medshotno1.wav"); + SetDefaultHudPosition(client); + SetGlobalTransTarget(client); + ShowSyncHudText(client, SyncHud_Notifaction, "%t", "Ability has cooldown", Ability_CD); + return; + } FakeClientCommandEx(client, "use tf_weapon_shotgun_hwg"); Store_RemoveSpecificItem(client, "Purging Annihilator"); diff --git a/addons/sourcemod/scripting/zombie_riot/custom/kit_purnell.sp b/addons/sourcemod/scripting/zombie_riot/custom/kit_purnell.sp index 376b888988..08f1aaf75c 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/kit_purnell.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/kit_purnell.sp @@ -359,7 +359,6 @@ public void Purnell_Delayed_MeleeAttack(DataPack pack) float damage = 15.0; damage *= Attributes_Get(weapon, 1, 1.0); damage *= Attributes_Get(weapon, 2, 1.0); - damage *= Attributes_Get(weapon, 476, 1.0); static const float hullMin[3] = {-PURNELL_MAX_BOUNDS, -PURNELL_MAX_BOUNDS, -PURNELL_MAX_BOUNDS}; @@ -627,7 +626,16 @@ public void Weapon_PurnellBuff_M2(int client, int weapon, bool crit, int slot) //If lastman, heal self. if(LastMann) - target = client; + { + if(Ability_Check_Cooldown(client, slot) < 0.0 && (GetClientButtons(client) & IN_DUCK)) + { + target = GetClientPointVisiblePlayersNPCs(client, 800.0, pos, false); + } + else + { + target = client; + } + } bool validAlly; @@ -681,7 +689,7 @@ public void Weapon_PurnellBuff_M2(int client, int weapon, bool crit, int slot) HealedAllyRand[0] += GetRandomFloat(-10.0, 10.0); HealedAllyRand[1] += GetRandomFloat(-10.0, 10.0); HealedAllyRand[2] += GetRandomFloat(-10.0, 10.0); - TE_Particle("vortigaunt_hand_glow", HealedAllyRand, NULL_VECTOR, NULL_VECTOR, _, _, _, _, _, _, _, _, _, _, 0.0); + TE_Particle("healhuff_red", HealedAllyRand, NULL_VECTOR, NULL_VECTOR, _, _, _, _, _, _, _, _, _, _, 0.0); } ClientCommand(client, "playgamesound items/suitchargeok1.wav"); diff --git a/addons/sourcemod/scripting/zombie_riot/custom/kit_seaborn.sp b/addons/sourcemod/scripting/zombie_riot/custom/kit_seaborn.sp index 3da699428e..d65162244c 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/kit_seaborn.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/kit_seaborn.sp @@ -220,7 +220,9 @@ public void Weapon_SeaRange_M2(int client, int weapon, bool crit, int slot) int SpawnMaxEnemies = 2; if(LastMann) - SpawnMaxEnemies = 4; + { + Ability_Apply_Cooldown(client, slot, 45.0); + } for(int i; i < SpawnMaxEnemies; i++) { @@ -256,7 +258,9 @@ public void Weapon_SeaRangePap_M2(int client, int weapon, bool crit, int slot) GetEntPropVector(client, Prop_Data, "m_angRotation", ang); int SpawnMaxEnemies = 2; if(LastMann) - SpawnMaxEnemies = 4; + { + Ability_Apply_Cooldown(client, slot, 45.0); + } for(int i; i < SpawnMaxEnemies; i++) { @@ -299,8 +303,7 @@ public void Weapon_SeaRangePapFull_M2(int client, int weapon, bool crit, int slo int SpawnMaxEnemies = 3; if(LastMann) { - SpawnMaxEnemies = 6; - Ability_Apply_Cooldown(client, slot, 30.0); + Ability_Apply_Cooldown(client, slot, 45.0); } for(int i; i < SpawnMaxEnemies; i++) @@ -309,8 +312,6 @@ public void Weapon_SeaRangePapFull_M2(int client, int weapon, bool crit, int slo if(entity > MaxClients) { int maxhealth = SDKCall_GetMaxHealth(client) / 2; //2x health cus no resistance. - if(LastMann) - maxhealth *= 2; SetEntProp(entity, Prop_Data, "m_iHealth", maxhealth); SetEntProp(entity, Prop_Data, "m_iMaxHealth", maxhealth); fl_Extra_Damage[entity] = Attributes_Get(weapon, 2, 1.0); diff --git a/addons/sourcemod/scripting/zombie_riot/custom/m3_abilities.sp b/addons/sourcemod/scripting/zombie_riot/custom/m3_abilities.sp index 7cefdaa789..630b4171c0 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/m3_abilities.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/m3_abilities.sp @@ -2052,7 +2052,6 @@ stock int Drop_Prop(int client, float fPos[3], float PropSpeed=1200.0, const cha DispatchKeyValueVector(PropMove, "movedir", Down); DispatchKeyValue(PropMove, "targetname", PropNeam_patch); DispatchKeyValue(PropMove, "movedir", "90 0 0"); - DispatchKeyValue(PropMove, "modelscale", "3"); Format(buffer, sizeof(buffer), "%.2f", 5000.0); DispatchKeyValue(PropMove, "movedistance", buffer); Format(buffer, sizeof(buffer), "%.2f", PropSpeed); @@ -2071,6 +2070,7 @@ stock int Drop_Prop(int client, float fPos[3], float PropSpeed=1200.0, const cha TeleportEntity(Prop, fPos, NULL_VECTOR, NULL_VECTOR); DispatchSpawn(Prop); SetParent(PropMove, Prop); + SetEntPropFloat(Prop, Prop_Send, "m_flModelScale", 1.25); } AcceptEntityInput(PropMove, "Open"); SetEntPropEnt(PropMove, Prop_Data, "m_hOwnerEntity", client); diff --git a/addons/sourcemod/scripting/zombie_riot/custom/pets.sp b/addons/sourcemod/scripting/zombie_riot/custom/pets.sp index 614ba072ef..c44bb35ec0 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/pets.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/pets.sp @@ -62,10 +62,10 @@ void Pets_PlayerResupply(int client) DispatchKeyValue(entity, "solid", "0"); DispatchKeyValueFloat(entity, "fademindist", 800.0); DispatchKeyValueFloat(entity, "fademaxdist", 1000.0); - DispatchKeyValueFloat(entity, "modelscale", PetResize[index]); DispatchKeyValue(entity, "DefaultAnim", PetAnimation[index][Anim_Idle]); DispatchSpawn(entity); + SetEntPropFloat(entity, Prop_Send, "m_flModelScale", PetResize[index]); //SetEntPropEnt(entity, Prop_Data, "m_hEffectEntity", client); //SDKHook(entity, SDKHook_SetTransmit, PetTransmit); diff --git a/addons/sourcemod/scripting/zombie_riot/custom/wand/weapon_wand_cryo.sp b/addons/sourcemod/scripting/zombie_riot/custom/wand/weapon_wand_cryo.sp index b64380157f..4473df77e0 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/wand/weapon_wand_cryo.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/wand/weapon_wand_cryo.sp @@ -411,7 +411,7 @@ void Cryo_FreezeZombie(int client, int zombie, int type) if(type != 3) ApplyStatusEffect(client, zombie, "Frozen", FreezeDuration); - if (!IsValidEntity(ZNPC.m_iFreezeWearable) && !HasSpecificBuff(zombie, "Clear Head")) + if (!IsValidEntity(ZNPC.m_iFreezeWearable) && !HasSpecificBuff(zombie, "Clear Head") && !i_NpcIsABuilding[zombie] && !i_IsABuilding[zombie]) { float offsetToHeight = 40.0; if(b_IsGiant[zombie]) diff --git a/addons/sourcemod/scripting/zombie_riot/custom/wand/weapon_wand_skulls.sp b/addons/sourcemod/scripting/zombie_riot/custom/wand/weapon_wand_skulls.sp index 4dfdf288c1..26c6d6668f 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/wand/weapon_wand_skulls.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/wand/weapon_wand_skulls.sp @@ -382,7 +382,6 @@ public void Skulls_Summon(int client, int weapon, bool crit, int tier) SetEntityModel(Drone, SKULL_MODEL); - DispatchKeyValue(Drone, "modelscale", "1.25"); DispatchKeyValue(Drone, "StartDisabled", "false"); DispatchKeyValue(prop, "Health", "9999999999"); @@ -390,6 +389,7 @@ public void Skulls_Summon(int client, int weapon, bool crit, int tier) SetEntProp(prop, Prop_Data, "m_takedamage", 0, 1); DispatchSpawn(Drone); + SetEntPropFloat(Drone, Prop_Send, "m_flModelScale", 1.25); AcceptEntityInput(Drone, "Enable"); diff --git a/addons/sourcemod/scripting/zombie_riot/custom/weapon_arrow_shot.sp b/addons/sourcemod/scripting/zombie_riot/custom/weapon_arrow_shot.sp index 759ad99641..b3acb478f1 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/weapon_arrow_shot.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/weapon_arrow_shot.sp @@ -6,10 +6,19 @@ static int Arrows_Ability_Shot[MAXPLAYERS+1]={0, ...}; #define SPLIT_ANGLE_OFFSET 2.0 #define SOUND_ARROW_SHOOT "weapons/bow_shoot.wav" +#define BRICK_MODEL "models/props_debris/concrete_cynderblock001.mdl" public void Weapon_Arrow_Shoot_Map_Precache() { PrecacheSound(SOUND_ARROW_SHOOT); + PrecacheModel(BRICK_MODEL); + PrecacheSound("physics/concrete/rock_impact_hard1.wav"); + PrecacheSound("physics/concrete/rock_impact_hard2.wav"); + PrecacheSound("physics/concrete/rock_impact_hard3.wav"); + PrecacheSound("physics/concrete/rock_impact_hard4.wav"); + PrecacheSound("physics/concrete/rock_impact_hard5.wav"); + PrecacheSound("physics/concrete/rock_impact_hard6.wav"); + PrecacheSound("weapons/slam/throw.wav"); } public void Weapon_Shoot_Arrow(int client, int weapon, bool crit, int slot) @@ -519,4 +528,167 @@ public void Weapon_Shoot_Arrow_Crossbow_PAP_2(int client, int weapon, bool crit, SetGlobalTransTarget(client); ShowSyncHudText(client, SyncHud_Notifaction, "%t", "Ability has cooldown", Ability_CD); } +} + + +public void WeaponShootBrick(int client, int weapon, bool crit, int slot) +{ + float damage = 50.0; + damage *= Attributes_Get(weapon, 2, 1.0); + damage *= Attributes_Get(weapon, 1, 1.0); + b_IsABow[weapon] = true; + + + float fAng[3], fPos[3]; + GetClientEyeAngles(client, fAng); + GetClientEyePosition(client, fPos); + EmitSoundToAll("weapons/slam/throw.wav", weapon, SNDCHAN_WEAPON, 80, _, 1.0); + + float speed = 3500.0; + speed *= Attributes_Get(weapon, 103, 1.0); + speed *= Attributes_Get(weapon, 104, 1.0); + speed *= Attributes_Get(weapon, 475, 1.0); + int projectile = Wand_Projectile_Spawn(client, speed, 0.0, damage, -1, weapon, "bullet_distortion_trail_tracer"); + ApplyCustomModelToWandProjectile(projectile, "models/props_debris/concrete_cynderblock001.mdl", 0.8, ""); + WandProjectile_ApplyFunctionToEntity(projectile, BrickTouchStart); +} + +public void BrickTouchStart(int entity, int target) +{ + int particle = EntRefToEntIndex(i_WandParticle[entity]); + if (target > 0) + { + //Code to do damage position and ragdolls + static float angles[3]; + GetEntPropVector(entity, Prop_Send, "m_angRotation", angles); + float vecForward[3]; + GetAngleVectors(angles, vecForward, NULL_VECTOR, NULL_VECTOR); + static float Entity_Position[3]; + WorldSpaceCenter(target, Entity_Position); + static float PositionMe[3]; + WorldSpaceCenter(entity, PositionMe); + + int owner = EntRefToEntIndex(i_WandOwner[entity]); + int weapon = EntRefToEntIndex(i_WandWeapon[entity]); + + float PushforceDamage[3]; + CalculateDamageForce(vecForward, 10000.0, PushforceDamage); + // SDKHooks_TakeDamage(target, owner, owner, f_WandDamage[entity], DMG_BULLET, weapon, PushforceDamage, Entity_Position); // 2048 is DMG_NOGIB? + float speed = 2600.0; + int Arrow = SDKCall_CTFCreateArrow(PositionMe, angles, speed, 0.1, 8, owner, owner); + if(IsValidEntity(Arrow)) + { + if(HasSpecificBuff(owner, "Powered Brick")) + ApplyStatusEffect(owner, Arrow, "Powered Brick", 9999.0); + + SetEntityCollisionGroup(Arrow, 27); + SetEntDataFloat(Arrow, FindSendPropInfo("CTFProjectile_Rocket", "m_iDeflected")+4, f_WandDamage[entity], true); // Damage + // SetEntData(Arrow, FindSendPropInfo("CTFProjectile_Arrow", "m_iProjectileType ") -1, 1, true); // m_bPenetrate + SetEntPropEnt(Arrow, Prop_Send, "m_hOriginalLauncher", weapon); + SetEntPropEnt(Arrow, Prop_Send, "m_hLauncher", weapon); + SetEntProp(Arrow, Prop_Send, "m_bCritical", false); + SetEntPropFloat(Arrow, Prop_Send, "m_flModelScale", 0.0); + b_MuteArrowSound[Arrow] = true; + b_MuteArrowSound[owner] = true; + b_IsEntityNeverTranmitted[Arrow] = true; + Update_TransmitState(Arrow); + SDKCall_StartTouch(Arrow, target); + } + if(IsValidEntity(particle)) + { + RemoveEntity(particle); + } + PlayBrickSound(entity); + RemoveEntity(entity); + } + else if(target == 0) + { + if(IsValidEntity(particle)) + { + RemoveEntity(particle); + } + PlayBrickSound(entity); + RemoveEntity(entity); + } +} + + +void PlayBrickSound(int entity) +{ + switch(GetRandomInt(1,6)) + { + case 1: + { + EmitSoundToAll("physics/concrete/rock_impact_hard1.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + EmitSoundToAll("physics/concrete/rock_impact_hard1.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + EmitSoundToAll("physics/concrete/rock_impact_hard1.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + } + case 2: + { + EmitSoundToAll("physics/concrete/rock_impact_hard2.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + EmitSoundToAll("physics/concrete/rock_impact_hard2.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + EmitSoundToAll("physics/concrete/rock_impact_hard2.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + } + case 3: + { + EmitSoundToAll("physics/concrete/rock_impact_hard3.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + EmitSoundToAll("physics/concrete/rock_impact_hard3.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + EmitSoundToAll("physics/concrete/rock_impact_hard3.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + } + case 4: + { + EmitSoundToAll("physics/concrete/rock_impact_hard4.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + EmitSoundToAll("physics/concrete/rock_impact_hard4.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + EmitSoundToAll("physics/concrete/rock_impact_hard4.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + } + case 5: + { + EmitSoundToAll("physics/concrete/rock_impact_hard5.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + EmitSoundToAll("physics/concrete/rock_impact_hard5.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + EmitSoundToAll("physics/concrete/rock_impact_hard5.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + } + case 6: + { + EmitSoundToAll("physics/concrete/rock_impact_hard6.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + EmitSoundToAll("physics/concrete/rock_impact_hard6.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + EmitSoundToAll("physics/concrete/rock_impact_hard6.wav", entity, SNDCHAN_STATIC, 80, _, 1.0); + } + } +} + + + +public float Brick_NPCTakeDamage_Do(int attacker, int inflictor, int victim, float damage, int weapon, int &damagetype) +{ + if(!(damagetype & DMG_CRIT)) + { + if(HasSpecificBuff(attacker, "Powered Brick") || HasSpecificBuff(inflictor, "Powered Brick")) + { + damagetype |= DMG_CRIT; + } + return damage; + } + + //we hit a headshot, what do ? + ApplyStatusEffect(attacker, attacker, "Powered Brick", 4.0); + return damage; +} + + +void StatusEffects_BrickWeapon() +{ + StatusEffect data; + strcopy(data.BuffName, sizeof(data.BuffName), "Powered Brick"); + strcopy(data.HudDisplay, sizeof(data.HudDisplay), "PB"); + strcopy(data.AboveEnemyDisplay, sizeof(data.AboveEnemyDisplay), ""); //dont display above head, so empty + //-1.0 means unused + data.DamageTakenMulti = -1.0; + data.DamageDealMulti = -1.0; + data.MovementspeedModif = -1.0; + data.AttackspeedBuff = (1.0 / 1.25); + data.Positive = true; + data.ShouldScaleWithPlayerCount = false; + data.Slot = 0; //0 means ignored + data.SlotPriority = 0; //if its higher, then the lower version is entirely ignored. + StatusEffect_AddGlobal(data); } \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/custom/weapon_charged_handgun.sp b/addons/sourcemod/scripting/zombie_riot/custom/weapon_charged_handgun.sp index 3e151458cb..80b8b3e373 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/weapon_charged_handgun.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/weapon_charged_handgun.sp @@ -352,8 +352,8 @@ static void Wand_Launch(int client, int iRot, float speed, float time, float dam SetEntPropEnt(iCarrier, Prop_Send, "m_hOwnerEntity", client); DispatchKeyValue(iCarrier, "model", ENERGY_BALL_MODEL); - DispatchKeyValue(iCarrier, "modelscale", "0"); DispatchSpawn(iCarrier); + SetEntPropFloat(iCarrier, Prop_Send, "m_flModelScale", 0.001); TeleportEntity(iCarrier, fPos, NULL_VECTOR, fVel); SetEntityMoveType(iCarrier, MOVETYPE_FLY); @@ -456,8 +456,8 @@ static void Wand_Launch_IEM(int client, int iRot, float speed, float time, float SetEntPropEnt(iCarrier, Prop_Send, "m_hOwnerEntity", client); DispatchKeyValue(iCarrier, "model", ENERGY_BALL_MODEL); - DispatchKeyValue(iCarrier, "modelscale", "0"); DispatchSpawn(iCarrier); + SetEntPropFloat(iCarrier, Prop_Send, "m_flModelScale", 0.001); TeleportEntity(iCarrier, fPos, NULL_VECTOR, fVel); SetEntityMoveType(iCarrier, MOVETYPE_FLY); @@ -1159,8 +1159,8 @@ stock int CreateWandCutterProjectile(int client, float flSpeed, float flPos[3], SetEntPropEnt(iCarrier, Prop_Send, "m_hOwnerEntity", client); DispatchKeyValue(iCarrier, "model", ENERGY_BALL_MODEL); - DispatchKeyValue(iCarrier, "modelscale", "0"); DispatchSpawn(iCarrier); + SetEntPropFloat(iCarrier, Prop_Send, "m_flModelScale", 0.001); TeleportEntity(iCarrier, flPos, NULL_VECTOR, fVel); SetEntityMoveType(iCarrier, MOVETYPE_FLY); diff --git a/addons/sourcemod/scripting/zombie_riot/custom/weapon_health_hose.sp b/addons/sourcemod/scripting/zombie_riot/custom/weapon_health_hose.sp index 18a982b813..604de907e5 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/weapon_health_hose.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/weapon_health_hose.sp @@ -534,7 +534,6 @@ bool SpawnHealthkit_SyringeGun(int client, float VectorGoal[3]) { b_ToggleTransparency[prop] = false; DispatchKeyValue(prop, "model", HEALTH_MODEL_SMALL); - DispatchKeyValue(prop, "modelscale", "1.0"); DispatchKeyValue(prop, "StartDisabled", "false"); DispatchKeyValue(prop, "Solid", "2"); // SetEntProp(prop, Prop_Data, "m_nSolidType", 0); diff --git a/addons/sourcemod/scripting/zombie_riot/custom/weapon_mlynar.sp b/addons/sourcemod/scripting/zombie_riot/custom/weapon_mlynar.sp index e3b771fc8e..527f2f6d3f 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/weapon_mlynar.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/weapon_mlynar.sp @@ -494,8 +494,11 @@ public bool TraceEntityEnumerator_Mlynar(int entity, int filterentity) } -float Player_OnTakeDamage_Mlynar(int victim, float &damage, int attacker, int weapon, int pap = 0) +float Player_OnTakeDamage_Mlynar(int victim, float &damage, int attacker, int weapon, int pap = 0, int damagezrcustom) { + //dont reflect burn or bleed + if(damagezrcustom & ZR_DAMAGE_DO_NOT_APPLY_BURN_OR_BLEED) + return damage; f_MlynarHurtDuration[victim] = GetGameTime() + 1.0; //insert reflect code. if(f_MlynarReflectCooldown[victim][attacker] < GetGameTime()) diff --git a/addons/sourcemod/scripting/zombie_riot/custom/weapon_trash_cannon.sp b/addons/sourcemod/scripting/zombie_riot/custom/weapon_trash_cannon.sp index a44391869a..f586fa4fce 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/weapon_trash_cannon.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/weapon_trash_cannon.sp @@ -1175,9 +1175,7 @@ int Trash_LaunchPhysProp(int client, char model[255], float scale, float velocit ActivateEntity(prop); SetEntityModel(prop, model); - char scaleChar[16]; - Format(scaleChar, sizeof(scaleChar), "%f", scale); - DispatchKeyValue(prop, "modelscale", scaleChar); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", scale); SetEntPropEnt(prop, Prop_Data, "m_hOwnerEntity", client); SetEntProp(prop, Prop_Data, "m_takedamage", 0, 1); diff --git a/addons/sourcemod/scripting/zombie_riot/custom/weapon_vampire_knives.sp b/addons/sourcemod/scripting/zombie_riot/custom/weapon_vampire_knives.sp index 8147ce4f8d..9f95269361 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/weapon_vampire_knives.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/weapon_vampire_knives.sp @@ -242,9 +242,9 @@ public void Vamp_ThrowKnives(int client, int weapon, int BleedStacks, float DMG_ DispatchKeyValue(prop, "targetname", "knifeModel"); DispatchKeyValue(prop, "spawnflags", "2"); DispatchKeyValue(prop, "model", modelName); - DispatchKeyValue(prop, "modelscale", "2.0"); //comically large cleaver :) DispatchSpawn(prop); MakeObjectIntangeable(prop); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", 2.0);//comically large cleaver :) TeleportEntity(prop, loc, Angles, NULL_VECTOR); SetParent(projectile, prop); diff --git a/addons/sourcemod/scripting/zombie_riot/custom/weapon_wind_staff.sp b/addons/sourcemod/scripting/zombie_riot/custom/weapon_wind_staff.sp index a52745cd5e..b8526700af 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/weapon_wind_staff.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/weapon_wind_staff.sp @@ -230,8 +230,8 @@ static void Wand_Launch_Tornado(int client, int iRot, float speed, float time, f SetEntPropEnt(iCarrier, Prop_Send, "m_hOwnerEntity", client); DispatchKeyValue(iCarrier, "model", ENERGY_BALL_MODEL); - DispatchKeyValue(iCarrier, "modelscale", "0"); DispatchSpawn(iCarrier); + SetEntPropFloat(iCarrier, Prop_Send, "m_flModelScale", 0.001); TeleportEntity(iCarrier, fPos, NULL_VECTOR, fVel); SetEntityMoveType(iCarrier, MOVETYPE_FLY); diff --git a/addons/sourcemod/scripting/zombie_riot/custom/weapon_yamato.sp b/addons/sourcemod/scripting/zombie_riot/custom/weapon_yamato.sp index cd75d49d6d..a766176d86 100644 --- a/addons/sourcemod/scripting/zombie_riot/custom/weapon_yamato.sp +++ b/addons/sourcemod/scripting/zombie_riot/custom/weapon_yamato.sp @@ -65,8 +65,7 @@ enum struct Yamato_Blades { this.Offset_Times = GetGameTime()+0.25; DispatchKeyValue(prop, "model", RUINA_POINT_MODEL); - - DispatchKeyValue(prop, "modelscale", "0.01"); + int ModelApply = ApplyCustomModelToWandProjectile(prop, RUINA_CUSTOM_MODELS_2, 1.0, ""); @@ -87,6 +86,7 @@ enum struct Yamato_Blades DispatchKeyValue(prop, "solid", "0"); DispatchSpawn(prop); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", 0.001); ActivateEntity(prop); diff --git a/addons/sourcemod/scripting/zombie_riot/database.sp b/addons/sourcemod/scripting/zombie_riot/database.sp index 3d24e1200b..6169d03d40 100644 --- a/addons/sourcemod/scripting/zombie_riot/database.sp +++ b/addons/sourcemod/scripting/zombie_riot/database.sp @@ -284,7 +284,7 @@ public void Database_GlobalClientSetup(Database db, int userid, int numQueries, b_HudHitMarker[client] = view_as(results[2].FetchInt(12)); thirdperson[client] = view_as(results[2].FetchInt(13)); f_ZombieVolumeSetting[client] = results[2].FetchFloat(14); - b_TauntSpeedIncrease[client] = view_as(results[2].FetchFloat(15)); + b_BackwardsWalkNotif[client] = view_as(results[2].FetchFloat(15)); f_Data_InBattleHudDisableDelay[client] = results[2].FetchFloat(16); int music = results[2].FetchInt(17); @@ -472,7 +472,7 @@ void DataBase_ClientDisconnect(int client) b_HudHitMarker[client], thirdperson[client], f_ZombieVolumeSetting[client], - b_TauntSpeedIncrease[client], + b_BackwardsWalkNotif[client], f_Data_InBattleHudDisableDelay[client], view_as(view_as(b_IgnoreMapMusic[client]) + (b_DisableDynamicMusic[client] ? 2 : 0) + (b_EnableRightSideAmmoboxCount[client] ? 4 : 0) + (b_EnableCountedDowns[client] ? 8 : 0) + (b_EnableClutterSetting[client] ? 16 : 0) + (b_EnableNumeralArmor[client] ? 32 : 0) + (b_InteractWithReload[client] ? 64 : 0) + (b_DisableSetupMusic[client] ? 128 : 0) + (b_DisableStatusEffectHints[client] ? 256 : 0) + (b_LastManDisable[client] ? 512 : 0) + (b_DisplayDamageHudSettingInvert[client] ? 1024 : 0)), id); @@ -510,7 +510,7 @@ void DataBase_ClientDisconnect(int client) b_HudHitMarker[client], thirdperson[client], f_ZombieVolumeSetting[client], - b_TauntSpeedIncrease[client], + b_BackwardsWalkNotif[client], f_Data_InBattleHudDisableDelay[client], view_as(b_IgnoreMapMusic[client]) + (b_DisableDynamicMusic[client] ? 2 : 0), id); diff --git a/addons/sourcemod/scripting/zombie_riot/dungeons.sp b/addons/sourcemod/scripting/zombie_riot/dungeons.sp index 467a465527..b9d3f45c45 100644 --- a/addons/sourcemod/scripting/zombie_riot/dungeons.sp +++ b/addons/sourcemod/scripting/zombie_riot/dungeons.sp @@ -270,6 +270,7 @@ enum struct RoomInfo kv.GetString("spawn", this.Spawn, sizeof(this.Spawn)); kv.GetString("key", this.Key, sizeof(this.Key)); this.FuncStart = KvGetFunction(kv, "func_start"); + this.CurrentCooldown = 0.0; return true; } @@ -1985,7 +1986,23 @@ static void StartBattle(const RoomInfo room, float time = 0.1) snap.GetKey(length, buffer, sizeof(buffer)); room.Fights.GetValue(buffer, scale); - EnemyScaling = ScaleBasedOnRound(round) / ScaleBasedOnRound(scale); + //we will scale down round linearly + if(round >= 25) + { + //we lessen scaling number + round += 1; + } + if(round >= 30) + { + //we lessen scaling number + round += 1; + } + if(round >= 40) + { + //we lessen scaling number + round += 1; + } + EnemyScaling = ScaleBasedOnRound((round - 6)) / ScaleBasedOnRound(scale); PrintToConsoleAll("Dungeon Enemy Scaling: %.2f%%", EnemyScaling * 100.0); BuildPath(Path_SM, buffer, sizeof(buffer), CONFIG_CFG, buffer); @@ -2194,7 +2211,7 @@ bool Dungeon_AtLimitNotice() static float ScaleBasedOnRound(int round) { - return (500.0 + Pow(float(round), 2.7)); + return (750.0 + Pow(float(round), 2.8)); } void Dungeon_EnemySpawned(int entity) @@ -2225,12 +2242,27 @@ void Dungeon_EnemySpawned(int entity) if(EnemyScaling > 0.0) { - fl_Extra_Damage[entity] *= 1.0 + ((EnemyScaling - 1.0) / 3.0); + fl_Extra_Damage[entity] *= 1.0 + ((EnemyScaling - 1.0) / 4.0); SetEntProp(entity, Prop_Data, "m_iHealth", RoundToCeil(float(GetEntProp(entity, Prop_Data, "m_iHealth")) * EnemyScaling)); SetEntProp(entity, Prop_Data, "m_iMaxHealth", RoundToCeil(float(ReturnEntityMaxHealth(entity)) * EnemyScaling)); } } + + if(EnableSilentMode) + { + if(i_IsABuilding[entity] || i_NpcIsABuilding[entity]) + { + + } + else + { + //Too many players, we have to nerf the stats by 35%... + fl_Extra_Damage[entity] *= 0.65; + SetEntProp(entity, Prop_Data, "m_iHealth", RoundToCeil(float(ReturnEntityMaxHealth(entity)) * 0.65)); + SetEntProp(entity, Prop_Data, "m_iMaxHealth", RoundToCeil(float(ReturnEntityMaxHealth(entity)) * 0.65)); + } + } Dungeon_GiveNpcMoney(entity); } case 2, 3: // Raid/Final NPC @@ -2416,36 +2448,41 @@ stock int FindByEntityName(const char[] name) return -1; } -public void ZRModifs_ModifEnemyChaos(int iNpc) +public void ZRModifs_ModifEnemyPrefixDuff(int iNpc) { - if(i_NpcInternalId[iNpc] == DungeonLoot_Id() ||i_NpcInternalId[iNpc] == Const2Spawner_Id()) - return; - - fl_Extra_Damage[iNpc] *= 1.10; - int Health = GetEntProp(iNpc, Prop_Data, "m_iMaxHealth"); - SetEntProp(iNpc, Prop_Data, "m_iHealth", RoundToCeil(float(Health) * 1.10)); - SetEntProp(iNpc, Prop_Data, "m_iMaxHealth", RoundToCeil(float(Health) * 1.10)); - + bool DontBuffBaseStats = false; if(b_thisNpcIsABoss[iNpc]) - return; + DontBuffBaseStats = true; + if(b_thisNpcIsARaid[iNpc]) + { + DontBuffBaseStats = true; + RaidModeTime = FAR_FUTURE; + } if(i_IsABuilding[iNpc]) return; if(i_NpcIsABuilding[iNpc]) return; -// if(Dungeon_GetEntityZone(iNpc) != Zone_Dungeon && Dungeon_GetEntityZone(iNpc) != Zone_RivalBase) -// return; - //Rare - if(GetRandomInt(0,RoundToCeil(75.0 * MultiGlobalEnemy)) != 0) + + if(!DontBuffBaseStats && GetRandomInt(0,RoundToCeil(15.0 * MultiGlobalEnemy)) != 0) return; - b_thisNpcHasAnOutline[iNpc] = true; - GiveNpcOutLineLastOrBoss(iNpc, true); - SetEntProp(iNpc, Prop_Data, "m_iHealth", RoundToCeil(float(ReturnEntityMaxHealth(iNpc)) * 3.0)); - SetEntProp(iNpc, Prop_Data, "m_iMaxHealth", RoundToCeil(float(ReturnEntityMaxHealth(iNpc)) * 3.0)); - fl_Extra_Damage[iNpc] *= 1.2; + + if(!DontBuffBaseStats) + { + b_thisNpcHasAnOutline[iNpc] = true; + GiveNpcOutLineLastOrBoss(iNpc, true); + SetEntProp(iNpc, Prop_Data, "m_iHealth", RoundToCeil(float(ReturnEntityMaxHealth(iNpc)) * 3.0)); + SetEntProp(iNpc, Prop_Data, "m_iMaxHealth", RoundToCeil(float(ReturnEntityMaxHealth(iNpc)) * 3.0)); + fl_Extra_Damage[iNpc] *= 1.25; + } + ZRModifs_GiveRandomPrefix(iNpc); + //This is a unique enemy, give mega buffs +} +public void ZRModifs_GiveRandomPrefix(int iNpc) +{ bool RetryBuffGiving = false; bool GiveOneGuranteed = true; int MaxHits = 0; - while(GiveOneGuranteed || RetryBuffGiving || GetRandomInt(1,4) == 1) + while(GiveOneGuranteed || RetryBuffGiving || GetRandomInt(1,3) == 1) { MaxHits++; if(MaxHits >= 1000) @@ -2454,7 +2491,7 @@ public void ZRModifs_ModifEnemyChaos(int iNpc) } GiveOneGuranteed = false; RetryBuffGiving = false; - switch(GetRandomInt(1,18)) + switch(GetRandomInt(1,35)) { case 1: { @@ -2555,7 +2592,7 @@ public void ZRModifs_ModifEnemyChaos(int iNpc) } case 15: { - if(Elemental_DamageRatio(iNpc, Element_Warped) > 0.0) + if(RaidBossActive == EntIndexToEntRef(iNpc) || b_thisNpcIsARaid[iNpc] || Elemental_DamageRatio(iNpc, Element_Warped) > 0.0) { RetryBuffGiving = true; } @@ -2585,15 +2622,175 @@ public void ZRModifs_ModifEnemyChaos(int iNpc) else ApplyStatusEffect(iNpc, iNpc, "Perfected Instinct", 999999.9); } + case 18: { - if(HasSpecificBuff(iNpc, "Xeno Infection") || HasSpecificBuff(iNpc, "Xeno Infection Buff Only")) + if(HasSpecificBuff(iNpc, "Xeno Infection Buff") || HasSpecificBuff(iNpc, "Xeno Infection Buff Only")) RetryBuffGiving = true; Xeno_Resurgance_Enemy(iNpc); } + case 19: + { + if(HasSpecificBuff(iNpc, "Armoring Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Armoring Prefix", 999999.9); + } + case 20: + { + if(HasSpecificBuff(iNpc, "Motivating Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Motivating Prefix", 999999.9); + } + case 21: + { + if(HasSpecificBuff(iNpc, "Invisible Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Invisible Prefix", 999999.9); + } + case 22: + { + if(HasSpecificBuff(iNpc, "Asexual Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Asexual Prefix", 999999.9); + } + case 23: + { + if(HasSpecificBuff(iNpc, "Glug Infested Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Glug Infested Prefix", 999999.9); + } + case 24: + { + if(HasSpecificBuff(iNpc, "Explosive Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Explosive Prefix", 999999.9); + } + case 25: + { + if(RaidBossActive == EntIndexToEntRef(iNpc) || b_thisNpcIsARaid[iNpc] || HasSpecificBuff(iNpc, "Stalker Prefix")) + RetryBuffGiving = true; + else + { + if(GetRandomInt(1,4) == 1) + { + ApplyStatusEffect(iNpc, iNpc, "Stalker Prefix", 999999.9); + ApplyStatusEffect(iNpc, iNpc, "Stalker Prefix Nerf", 999999.9); + } + else + { + //make it really really rare + RetryBuffGiving = true; + } + } + } + case 26: + { + if(HasSpecificBuff(iNpc, "Disco Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Disco Prefix", 999999.9); + } + case 27: + { + if(HasSpecificBuff(iNpc, "Toxic Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Toxic Prefix", 999999.9); + } + case 28: + { + if(HasSpecificBuff(iNpc, "Boing Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Boing Prefix", 999999.9); + } + case 29: + { + if(HasSpecificBuff(iNpc, "Knockback Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Knockback Prefix", 999999.9); + } + case 30: + { + if(HasSpecificBuff(iNpc, "Loud Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Loud Prefix", 999999.9); + } + case 31: + { + if(HasSpecificBuff(iNpc, "Legendary Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Legendary Prefix", 999999.9); + } + case 32: + { + if(HasSpecificBuff(iNpc, "Ragebaiter Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Ragebaiter Prefix", 999999.9); + } + case 33: + { + if(HasSpecificBuff(iNpc, "Semi Healthy Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Semi Healthy Prefix", 999999.9); + } + case 34: + { + if(HasSpecificBuff(iNpc, "Fat Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Fat Prefix", 999999.9); + } + case 35: + { + if(HasSpecificBuff(iNpc, "Modifier+ Prefix")) + RetryBuffGiving = true; + else + ApplyStatusEffect(iNpc, iNpc, "Modifier+ Prefix", 999999.9); + } } } +} +public void ZRModifs_ModifEnemyChaos(int iNpc) +{ + if(i_NpcInternalId[iNpc] == DungeonLoot_Id() ||i_NpcInternalId[iNpc] == Const2Spawner_Id()) + return; + + fl_Extra_Damage[iNpc] *= 1.10; + int Health = GetEntProp(iNpc, Prop_Data, "m_iMaxHealth"); + SetEntProp(iNpc, Prop_Data, "m_iHealth", RoundToCeil(float(Health) * 1.10)); + SetEntProp(iNpc, Prop_Data, "m_iMaxHealth", RoundToCeil(float(Health) * 1.10)); + + if(b_thisNpcIsABoss[iNpc]) + return; + if(i_IsABuilding[iNpc]) + return; + if(i_NpcIsABuilding[iNpc]) + return; +// if(Dungeon_GetEntityZone(iNpc) != Zone_Dungeon && Dungeon_GetEntityZone(iNpc) != Zone_RivalBase) +// return; + //Rare + if(GetRandomInt(0,RoundToCeil(35.0 * MultiGlobalEnemy)) != 0) + return; + + b_thisNpcHasAnOutline[iNpc] = true; + GiveNpcOutLineLastOrBoss(iNpc, true); + SetEntProp(iNpc, Prop_Data, "m_iHealth", RoundToCeil(float(ReturnEntityMaxHealth(iNpc)) * 3.0)); + SetEntProp(iNpc, Prop_Data, "m_iMaxHealth", RoundToCeil(float(ReturnEntityMaxHealth(iNpc)) * 3.0)); + fl_Extra_Damage[iNpc] *= 1.2; + ZRModifs_GiveRandomPrefix(iNpc); //This is a unique enemy, give mega buffs } diff --git a/addons/sourcemod/scripting/zombie_riot/freeplay.sp b/addons/sourcemod/scripting/zombie_riot/freeplay.sp index 1194d5ce2b..cfe8bf251b 100644 --- a/addons/sourcemod/scripting/zombie_riot/freeplay.sp +++ b/addons/sourcemod/scripting/zombie_riot/freeplay.sp @@ -376,9 +376,10 @@ void Freeplay_AddEnemy(int postWaves, Enemy enemy, int &count, bool alaxios = fa { case 1: { - enemy.Index = NPC_GetByPlugin("npc_xeno_mrx"); - enemy.Health = RoundToFloor((5000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); - enemy.ExtraDamage = (f_FreeplayDamageExtra * 0.85); + enemy.Index = NPC_GetByPlugin("npc_xeno_raidboss_nemesis"); + enemy.Health = RoundToFloor((7700000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); + enemy.ExtraDamage = (f_FreeplayDamageExtra * 0.4); + enemy.Data = "enraged"; } default: { @@ -394,15 +395,15 @@ void Freeplay_AddEnemy(int postWaves, Enemy enemy, int &count, bool alaxios = fa { case 1: { - enemy.Index = NPC_GetByPlugin("npc_xeno_raidboss_nemesis"); - enemy.Health = RoundToFloor((5000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); + enemy.Index = NPC_GetByPlugin("npc_xeno_mrx"); + enemy.Health = RoundToFloor((15000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); enemy.ExtraDamage = (f_FreeplayDamageExtra * 0.5); } default: { enemy.Index = NPC_GetByPlugin("npc_xeno_mrx"); enemy.Health = RoundToFloor((15000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); - enemy.ExtraDamage = (f_FreeplayDamageExtra * 0.85); + enemy.ExtraDamage = (f_FreeplayDamageExtra * 0.5); } } } @@ -446,21 +447,25 @@ void Freeplay_AddEnemy(int postWaves, Enemy enemy, int &count, bool alaxios = fa { enemy.Index = NPC_GetByPlugin("npc_agent_thompson"); enemy.Health = RoundToFloor((6000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); - enemy.ExtraDamage = 0.75; + enemy.ExtraDamage = 0.80; + enemy.ExtraSpeed = 1.30; + enemy.ExtraThinkSpeed = 0.8; } case 19: { enemy.Index = NPC_GetByPlugin("npc_twins"); enemy.Health = RoundToFloor((4500000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); enemy.Data = "Im_The_raid;My_Twin"; - enemy.ExtraDamage = 0.75; + enemy.ExtraDamage = 0.80; + enemy.ExtraSpeed = 1.30; + enemy.ExtraThinkSpeed = 0.90; } case 20: { enemy.Index = NPC_GetByPlugin("npc_agent_johnson"); enemy.Health = RoundToFloor((5000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); enemy.ExtraDamage = 0.75; // johnson gets way too much damage in freeplay, reduce it - enemy.ExtraThinkSpeed = 0.75; + enemy.ExtraThinkSpeed = 0.6; enemy.ExtraSpeed = 1.50; } case 21: @@ -522,8 +527,8 @@ void Freeplay_AddEnemy(int postWaves, Enemy enemy, int &count, bool alaxios = fa case 1: // { enemy.Index = NPC_GetByPlugin("npc_vincent"); - enemy.Health = RoundToFloor((5000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); - enemy.Data = "sc40;forceangry"; + enemy.Health = RoundToFloor((6000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); + enemy.Data = "forceangry;forcesad"; } default: // { @@ -538,20 +543,31 @@ void Freeplay_AddEnemy(int postWaves, Enemy enemy, int &count, bool alaxios = fa enemy.Health = RoundToFloor((3000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); enemy.Data = "force_final_battle"; enemy.ExtraDamage = 0.90; + enemy.ExtraSpeed = 1.15; } case 33: { enemy.Index = NPC_GetByPlugin("npc_almagest_jkei"); enemy.Health = RoundToFloor((7000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); enemy.Data = "force_final_battle"; - enemy.ExtraThinkSpeed = 0.90; + enemy.ExtraThinkSpeed = 0.65; + enemy.ExtraDamage = 1.15; + enemy.ExtraSpeed = 1.25; } case 34: { enemy.Index = NPC_GetByPlugin("npc_shadowing_darkness_boss"); enemy.Health = RoundToFloor((10000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); - enemy.Data = "sc25;force_final_battle"; - enemy.ExtraDamage = 0.75; + enemy.Data = "force_final_battle"; + enemy.ExtraDamage = 0.65; + } + case 35: + { + enemy.Index = NPC_GetByPlugin("npc_zilius"); + enemy.Health = RoundToFloor((5000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound() * 2) * MultiGlobalHighHealthBoss); + enemy.Data = "bossrush"; + enemy.ExtraSpeed = 1.10; + enemy.ExtraThinkSpeed = 0.85; } default: { @@ -705,13 +721,49 @@ void Freeplay_AddEnemy(int postWaves, Enemy enemy, int &count, bool alaxios = fa enemy.ExtraDamage = 1.0; enemy.Is_Immune_To_Nuke = true; - if(GetRandomInt(1, 2) == 2) + int roll = GetRandomInt(1, 7); + if(roll == 2) { enemy.Index = NPC_GetByPlugin("npc_dimensionfrag"); enemy.Health = RoundToFloor(((170000.0 + HealthBonus) / 70.0 * (float(Waves_GetRound()) * 1.25)) * HealthMulti); enemy.ExtraDamage = 0.75; count = 20; } + else if(roll == 3) + { + enemy.Index = NPC_GetByPlugin("npc_umbral_ltzens"); + enemy.Health = RoundToFloor(((250000.0 + HealthBonus) / 70.0 * (float(Waves_GetRound()) * 1.15)) * HealthMulti); + enemy.ExtraDamage = 1.25; + count = 15; + } + else if(roll == 4) + { + enemy.Index = NPC_GetByPlugin("npc_umbral_refract"); + enemy.Health = RoundToFloor(((200000.0 + HealthBonus) / 70.0 * (float(Waves_GetRound()) * 1.20)) * HealthMulti); + enemy.ExtraDamage = 1.25; + count = 20; + } + else if(roll == 5) + { + enemy.Index = NPC_GetByPlugin("npc_umbral_spuud"); + enemy.Health = RoundToFloor(((300000.0 + HealthBonus) / 70.0 * (float(Waves_GetRound()) * 1.11)) * HealthMulti); + enemy.ExtraDamage = 1.25; + count = 15; + } + else if(roll == 6) + { + enemy.Index = NPC_GetByPlugin("npc_umbral_rouam"); + enemy.Health = RoundToFloor(((500000.0 + HealthBonus) / 70.0 * float(Waves_GetRound())) * HealthMulti); + enemy.ExtraDamage = 2.0; + count = 5; + } + else if(roll == 7) + { + enemy.Index = NPC_GetByPlugin("npc_umbral_keitosis"); + enemy.Health = RoundToFloor(((3000000.0 + HealthBonus) / 70.0 * float(Waves_GetRound())) * HealthMulti); + enemy.ExtraDamage = 1.5; + count = 1; + } else { enemy.Index = NPC_GetByPlugin("npc_vanishingmatter"); @@ -871,7 +923,7 @@ void Freeplay_AddEnemy(int postWaves, Enemy enemy, int &count, bool alaxios = fa static Action Freeplay_RouletteMessage(Handle timer) { - RaidFight = GetRandomInt(1, 28); + RaidFight = GetRandomInt(1, 35); EmitSoundToAll("misc/halloween/spelltick_set.wav", _, _, _, _, _, GetRandomInt(70, 135)); switch(RaidFight) { @@ -920,7 +972,7 @@ static Action Freeplay_RouletteMessage(Handle timer) } case 11: { - CPrintToChatAll("{green}미스터 X! {gold}- {red}미스터 뭐시기라고?"); + CPrintToChatAll("{green}MR. X! {gold}- {red}Mister who? That should say Vivithorn."); } case 12: { @@ -948,15 +1000,15 @@ static Action Freeplay_RouletteMessage(Handle timer) } case 18: { - CPrintToChatAll("{community}톰슨 요원... {crimson}아."); + CPrintToChatAll("{community}Agent... thompson. {crimson}ew. I buffed him a bit"); } case 19: { - CPrintToChatAll("{forestgreen}트윈스... {crimson}아나."); + CPrintToChatAll("{forestgreen}The.... twins. {crimson}eew. I buffed them a bit"); } case 20: { - CPrintToChatAll("{community}존슨 요원... {crimson}아 좀."); + CPrintToChatAll("{community}Agent... johnson. {crimson}ew. Had to juice him up a bit cause how bad he is"); } case 21: { @@ -1004,16 +1056,20 @@ static Action Freeplay_RouletteMessage(Handle timer) } case 32: { - CPrintToChatAll("{pink}REILA! {gold}- {red}Make sure you attack her first."); + CPrintToChatAll("{pink}REILA! {gold}- {red}Make sure you attack Reila herself first. I buffed her cause she has no umbrals supporting her"); } case 33: { - CPrintToChatAll("{black}JKEI! {gold}- {red}Hope we don't have to fight more from the Almagest Corporation."); + CPrintToChatAll("{black}JKEI! {gold}- {red}Hope we don't have to fight more from the Almagest Corporation. I buffed him cause he has no allies with him."); } case 34: { CPrintToChatAll("{darkgray}SHADOWING DARKNESS! {gold}- {red}The hardest challenge we have programmed into this. Good luck beating her."); } + case 35: + { + CPrintToChatAll("{black}Zilius! {gold}- {snow}If you guys beat him, I'll join you as a thanks for saving me from him. {red}I made him stronger cause he doesn't have his army."); + } default: { CPrintToChatAll("{yellow}감염된 실베스터! {gold}- {red}감염되어버린 거대한 위협!"); @@ -2961,4 +3017,4 @@ void Freeplay_SetupStart(bool extra = false) Freeplay_SetupStart(); } } -} +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/modifiers.sp b/addons/sourcemod/scripting/zombie_riot/modifiers.sp index c5f4eb5517..5c473ac05f 100644 --- a/addons/sourcemod/scripting/zombie_riot/modifiers.sp +++ b/addons/sourcemod/scripting/zombie_riot/modifiers.sp @@ -9,6 +9,8 @@ static int CurrentModifActive = 0; #define OLD_TIMES 3 #define TURBOLENCES 4 #define PARANORMAL_ACTIVITY 5 +#define PREFIX_GALORE 6 +#define PREFIX_ONESTAND 7 void Modifier_MiniBossSpawn(bool &spawns) { @@ -54,6 +56,14 @@ public void Modifier_Collect_SecondaryMercs() { CurrentModifActive = SECONDARY_MERCS; } +public void Modifier_Collect_Prefix_Galore() +{ + CurrentModifActive = PREFIX_GALORE; +} +public void Modifier_Collect_OneStand() +{ + CurrentModifActive = PREFIX_ONESTAND; +} public void Modifier_Remove_SecondaryMercs() { @@ -147,148 +157,6 @@ public void ZRModifs_OldTimesNPC(int iNpc) f_AttackSpeedNpcIncrease[iNpc] *= 0.75; } -public void ZRModifs_ParanormalActivityNPC(int iNpc) -{ - CClotBody ZNPC = view_as(iNpc); - - if(IsValidEntity(ZNPC.m_iWearable1) && !b_EntityCantBeColoured[ZNPC.m_iWearable1]) - { - SetEntityRenderMode(ZNPC.m_iWearable1, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable1, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable1, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable1, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsValidEntity(ZNPC.m_iWearable2) && !b_EntityCantBeColoured[ZNPC.m_iWearable2]) - { - SetEntityRenderMode(ZNPC.m_iWearable2, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable2, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable2, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable2, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsValidEntity(ZNPC.m_iWearable3) && !b_EntityCantBeColoured[ZNPC.m_iWearable3]) - { - SetEntityRenderMode(ZNPC.m_iWearable3, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable3, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable3, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable3, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsValidEntity(ZNPC.m_iWearable4) && !b_EntityCantBeColoured[ZNPC.m_iWearable4]) - { - SetEntityRenderMode(ZNPC.m_iWearable4, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable4, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable4, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable4, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsValidEntity(ZNPC.m_iWearable5) && !b_EntityCantBeColoured[ZNPC.m_iWearable5]) - { - SetEntityRenderMode(ZNPC.m_iWearable5, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable5, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable5, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable5, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsValidEntity(ZNPC.m_iWearable6) && !b_EntityCantBeColoured[ZNPC.m_iWearable6]) - { - SetEntityRenderMode(ZNPC.m_iWearable6, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable6, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable6, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable6, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsValidEntity(ZNPC.m_iWearable7) && !b_EntityCantBeColoured[ZNPC.m_iWearable7]) - { - SetEntityRenderMode(ZNPC.m_iWearable7, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable7, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable7, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable7, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsValidEntity(ZNPC.m_iWearable8) && !b_EntityCantBeColoured[ZNPC.m_iWearable8]) - { - SetEntityRenderMode(ZNPC.m_iWearable8, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable8, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable8, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable8, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsEntityAlive(ZNPC.m_iWearable1) && !b_EntityCantBeColoured[ZNPC.m_iWearable1]) - { - SetEntityRenderMode(ZNPC.m_iWearable1, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable1, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable1, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable1, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsEntityAlive(ZNPC.m_iWearable2) && !b_EntityCantBeColoured[ZNPC.m_iWearable2]) - { - SetEntityRenderMode(ZNPC.m_iWearable2, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable2, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable2, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable2, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsEntityAlive(ZNPC.m_iWearable3) && !b_EntityCantBeColoured[ZNPC.m_iWearable3]) - { - SetEntityRenderMode(ZNPC.m_iWearable3, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable3, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable3, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable3, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsEntityAlive(ZNPC.m_iWearable4) && !b_EntityCantBeColoured[ZNPC.m_iWearable4]) - { - SetEntityRenderMode(ZNPC.m_iWearable4, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable4, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable4, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable4, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsEntityAlive(ZNPC.m_iWearable5) && !b_EntityCantBeColoured[ZNPC.m_iWearable5]) - { - SetEntityRenderMode(ZNPC.m_iWearable5, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable5, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable5, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable5, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsEntityAlive(ZNPC.m_iWearable6) && !b_EntityCantBeColoured[ZNPC.m_iWearable6]) - { - SetEntityRenderMode(ZNPC.m_iWearable6, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable6, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable6, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable6, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsEntityAlive(ZNPC.m_iWearable7) && !b_EntityCantBeColoured[ZNPC.m_iWearable7]) - { - SetEntityRenderMode(ZNPC.m_iWearable7, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable7, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable7, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable7, Prop_Send, "m_fadeMaxDist", 700.0); - } - if(IsEntityAlive(ZNPC.m_iWearable8) && !b_EntityCantBeColoured[ZNPC.m_iWearable8]) - { - SetEntityRenderMode(ZNPC.m_iWearable8, RENDER_TRANSCOLOR); - SetEntityRenderColor(ZNPC.m_iWearable8, 0, 0, 0, 150); - SetEntPropFloat(ZNPC.m_iWearable8, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(ZNPC.m_iWearable8, Prop_Send, "m_fadeMaxDist", 700.0); - } - - fl_Extra_Damage[iNpc] *= 1.05; - SetEntityRenderMode(iNpc, RENDER_TRANSCOLOR); - SetEntityRenderColor(iNpc, 0, 0, 0, 150); - SetEntPropFloat(iNpc, Prop_Send, "m_fadeMinDist", 600.0); - SetEntPropFloat(iNpc, Prop_Send, "m_fadeMaxDist", 700.0); - b_NoHealthbar[iNpc] = 1; - GiveNpcOutLineLastOrBoss(iNpc, false); - b_thisNpcHasAnOutline[iNpc] = true; - - /* - float SelfPosParanormal[3]; - float AllyPosParanormal[3]; - float flDistanceToTargetParanormal = GetVectorDistance(SelfPosParanormal, AllyPosParanormal, true); - if(flDistanceToTargetParanormal < (100.0 * 100.0)) - { - fl_Extra_Speed[iNpc] *= 2.0; - } - if(flDistanceToTargetParanormal > (100.0 * 100.0)) - { - fl_Extra_Speed[iNpc] *= 0.5; - } - */ - -} - float ZRModifs_MaxSpawnsAlive() { switch(CurrentModifActive) @@ -360,22 +228,44 @@ void ZRModifs_CharBuffToAdd(char[] data) { case CHAOS_INTRUSION: { - FormatEx(data, 6, "C"); + FormatEx(data, 12, "C"); } case SECONDARY_MERCS: { - FormatEx(data, 6, "S"); + FormatEx(data, 12, "S"); } case OLD_TIMES: { - FormatEx(data, 6, "O"); + FormatEx(data, 12, "O"); } case PARANORMAL_ACTIVITY: { - FormatEx(data, 6, "P"); + FormatEx(data, 12, "P"); + } + case PREFIX_GALORE: + { + FormatEx(data, 12, "G"); + } + case PREFIX_ONESTAND: + { + FormatEx(data, 12, "OS"); } } } +public void ZRModifs_ModifEnemy_OneStand(int iNpc) +{ + //if alone on server, this modifier wont do anything..... + + if(b_IsAloneOnServer) + return; + + if(b_thisNpcIsABoss[iNpc] || b_thisNpcIsARaid[iNpc]) + { + SetEntProp(iNpc, Prop_Data, "m_iHealth", RoundToCeil(float(ReturnEntityMaxHealth(iNpc)) * 0.9)); + SetEntProp(iNpc, Prop_Data, "m_iMaxHealth", RoundToCeil(float(ReturnEntityMaxHealth(iNpc)) * 0.9)); + fl_Extra_Damage[iNpc] *= 0.9; + } +} int CurrentModifOn() { diff --git a/addons/sourcemod/scripting/zombie_riot/npc.sp b/addons/sourcemod/scripting/zombie_riot/npc.sp index 3031cd4258..63af4a737b 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc.sp @@ -244,6 +244,7 @@ void NPC_ConfigSetup() XenoFortifiedEarlyZombie_OnMapStart_NPC(); XenoPatientFew_OnMapStart_NPC(); XenoOuroborosEkas_OnMapStart_NPC(); + XenoLabSecurity_OnMapStart_NPC(); WanderingSpirit_OnMapStart_NPC(); @@ -711,6 +712,18 @@ void NPC_ConfigSetup() TrueCyberWarrior_OnMapStart(); VillageAlaxios_OnMapStart(); +//construction2 Victorians + Demolitionist_OnMapStart_NPC(); + Chemical_Specialist_OnMapStart_NPC(); + Victorian_Protector_OnMapStart_NPC(); + ChemicalSpreader_OnMapStart_NPC(); + Zapmarker_OnMapStart_NPC(); + ArmoredMedic_OnMapStart_NPC(); + Airraider_OnMapStart_NPC(); + Victorian_Headhunter_OnMapStart_NPC(); + Victorian_Resource_Collector_OnMapStart_NPC(); + Gasleader_OnMapStart_NPC(); + //special Invisible_TRIGGER_OnMapStart_NPC();//It is currently used as a trigger for the Victoria Factory. CaptinoBaguettus_OnMapStart_NPC();//Captino Meinus Follower @@ -810,6 +823,7 @@ void NPC_ConfigSetup() RaidbossMrX_OnMapStart(); GodAlaxios_OnMapStart(); Sensal_OnMapStart_NPC(); + SensalTargetLaser_OnMapStart_NPC(); Karlas_OnMapStart_NPC(); Stella_OnMapStart_NPC(); RaidbossBobTheFirst_OnMapStart(); @@ -963,6 +977,8 @@ void NPC_ConfigSetup() BossSummonRandom_OnMapStart_NPC(); //Combine Mutation OmegaRaid_OnMapStart_NPC(); + Rollermine_OnMapStart_NPC(); + NovaProspektOverseer_OnMapStart_NPC(); LostKnight_OnMapStart_NPC(); Merlton_Boss_OnMapStart_NPC(); BobFollower_Setup(); @@ -983,6 +999,7 @@ void NPC_ConfigSetup() ImmutableHeavy_OnMapStart_NPC(); VanishingMatter_OnMapStart_NPC(); Erasus_OnMapStart_NPC(); + ErasusDebug_OnMapStart_NPC(); AnnoyingSpirit_OnMapStart_NPC(); FogOrbHeavy_OnMapStart_NPC(); @@ -1770,6 +1787,7 @@ Action NpcSpecificOnTakeDamage(int victim, int &attacker, int &inflictor, float #include "npc/xeno_lab/npc_xeno_early_infected.sp" #include "npc/xeno_lab/npc_xeno_patient_few.sp" #include "npc/xeno_lab/npc_xeno_ekas_robo.sp" +#include "npc/xeno_lab/npc_xeno_lab_security.sp" #include "npc/special/npc_sawrunner.sp" #include "npc/special/npc_l4d2_tank.sp" @@ -1804,6 +1822,7 @@ Action NpcSpecificOnTakeDamage(int victim, int &attacker, int &inflictor, float #include "npc/ally/npc_allied_kahml_afterimage.sp" #include "npc/ally/npc_allied_kiyru_visualiser.sp" #include "npc/ally/npc_allied_ritualist_visualiser.sp" +#include "npc/ally/npc_erasus_debug.sp" #include "npc/raidmode_bosses/npc_true_fusion_warrior.sp" #include "npc/raidmode_bosses/npc_blitzkrieg.sp" @@ -2154,6 +2173,7 @@ Action NpcSpecificOnTakeDamage(int victim, int &attacker, int &inflictor, float #include "npc/expidonsa/npc_speedus_adivus.sp" #include "npc/expidonsa/npc_anfuhrer_eisenhard.sp" #include "npc/raidmode_bosses/npc_sensal.sp" +#include "npc/raidmode_bosses/npc_sensal_crystal_targeter.sp" #include "npc/ally/npc_vip_building.sp" #include "npc/rogue/npc_overlord_rogue.sp" @@ -2449,6 +2469,18 @@ Action NpcSpecificOnTakeDamage(int victim, int &attacker, int &inflictor, float #include "npc/baka/raidbosses/npc_true_cyber_warrior.sp" #include "npc/baka/raidbosses/npc_village_god_alaxios.sp" +//construction2 Victorian +#include "npc/construction/construction2/victorians/npc_demolitionist.sp" +#include "npc/construction/construction2/victorians/npc_chemical_specialist.sp" +#include "npc/construction/construction2/victorians/npc_protector.sp" +#include "npc/construction/construction2/victorians/npc_chemical_spreader.sp" +#include "npc/construction/construction2/victorians/npc_zapmarker.sp" +#include "npc/construction/construction2/victorians/npc_giant_armored_medic.sp" +#include "npc/construction/construction2/victorians/npc_airraider.sp" +#include "npc/construction/construction2/victorians/npc_headhunter.sp" +#include "npc/construction/construction2/victorians/npc_boltbag.sp" +#include "npc/construction/construction2/victorians/npc_gasleader.sp" + //Matrix Enemies #include "npc/matrix/15/npc_agentalan.sp" #include "npc/matrix/15/npc_agentalexander.sp" @@ -2506,10 +2538,12 @@ Action NpcSpecificOnTakeDamage(int victim, int &attacker, int &inflictor, float #include "npc/matrix/freeplay/npc_freeplay_agentspencer.sp" //Combine Hell Mutation +#include "npc/mutations/combinehell/other/npc_nova_prospekt_overseer.sp" #include "npc/mutations/combinehell/other/npc_hunter.sp" #include "npc/mutations/combinehell/other/npc_merlton.sp" #include "npc/mutations/combinehell/other/npc_combine_lost_knight.sp" #include "npc/mutations/combinehell/other/npc_omega_raid.sp" +#include "npc/mutations/combinehell/other/npc_rollermine.sp" #include "npc/mutations/combinehell/other/npc_bob_follower.sp" #include "npc/mutations/combinehell/seaborn/npc_seaborn_combine_police_pistol.sp" #include "npc/mutations/combinehell/seaborn/npc_seaborn_combine_police_smg.sp" diff --git a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_kahml_afterimage.sp b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_kahml_afterimage.sp index 5dcee5b7a8..8da7b50f05 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_kahml_afterimage.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_kahml_afterimage.sp @@ -65,7 +65,7 @@ methodmap AlliedKahmlAbility < CClotBody while(TF2U_GetWearable(client, entity, i, "tf_wearable")) { - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; if(EntRefToEntIndex(i_Viewmodel_PlayerModel[client]) != entity || (i_CustomModelOverrideIndex[client] < BARNEY || !b_HideCosmeticsPlayer[client])) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_kiyru_visualiser.sp b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_kiyru_visualiser.sp index 6539c94e84..600d2d5e24 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_kiyru_visualiser.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_kiyru_visualiser.sp @@ -207,7 +207,7 @@ methodmap AlliedKiryuVisualiserAbility < CClotBody while(TF2U_GetWearable(client, entity, i, "tf_wearable")) { - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; if(EntRefToEntIndex(i_Viewmodel_PlayerModel[client]) != entity || (i_CustomModelOverrideIndex[client] < BARNEY || !b_HideCosmeticsPlayer[client])) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_leper_visualiser.sp b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_leper_visualiser.sp index b4a5d4b288..c8268200cd 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_leper_visualiser.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_leper_visualiser.sp @@ -57,7 +57,7 @@ methodmap AlliedLeperVisualiserAbility < CClotBody while(TF2U_GetWearable(client, entity, i, "tf_wearable")) { - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; if(EntRefToEntIndex(i_Viewmodel_PlayerModel[client]) != entity || (i_CustomModelOverrideIndex[client] < BARNEY || !b_HideCosmeticsPlayer[client])) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_ritualist_visualiser.sp b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_ritualist_visualiser.sp index 6d28134a07..fe489c38c8 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_ritualist_visualiser.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_ritualist_visualiser.sp @@ -92,7 +92,7 @@ methodmap AlliedRitualistAbility < CClotBody while(TF2U_GetWearable(client, entity, i, "tf_wearable")) { - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; if(EntRefToEntIndex(i_Viewmodel_PlayerModel[client]) != entity || (i_CustomModelOverrideIndex[client] < BARNEY || !b_HideCosmeticsPlayer[client])) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_sensal_afterimage.sp b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_sensal_afterimage.sp index 9693867e56..287f817493 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_sensal_afterimage.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_sensal_afterimage.sp @@ -70,7 +70,7 @@ methodmap AlliedSensalAbility < CClotBody while(TF2U_GetWearable(client, entity, i, "tf_wearable")) { - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; if(EntRefToEntIndex(i_Viewmodel_PlayerModel[client]) != entity || (i_CustomModelOverrideIndex[client] < BARNEY || !b_HideCosmeticsPlayer[client])) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_warped_crystal_visualiser.sp b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_warped_crystal_visualiser.sp index b53fb28f80..845bddf791 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_warped_crystal_visualiser.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_allied_warped_crystal_visualiser.sp @@ -54,7 +54,7 @@ methodmap AlliedWarpedCrystal_Visualiser < CClotBody while(TF2U_GetWearable(client, entity, i, "tf_wearable")) { - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; if(EntRefToEntIndex(i_Viewmodel_PlayerModel[client]) != entity || (i_CustomModelOverrideIndex[client] < BARNEY || !b_HideCosmeticsPlayer[client])) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_citizen_new.sp b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_citizen_new.sp index 6ac13b1380..f3fc7c5a93 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_citizen_new.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_citizen_new.sp @@ -848,7 +848,8 @@ static float HealingCooldown[MAXENTITIES]; static bool IgnorePlayer[MAXPLAYERS]; static int CanBuild[MAXENTITIES]; static int PendingGesture[MAXENTITIES]; -static float CommandCooldown[MAXENTITIES]; +static float BuildOrderedByPlayer[MAXENTITIES]; +//static float CommandCooldown[MAXENTITIES]; static bool TempRebel[MAXENTITIES]; static bool Interactable[MAXENTITIES]; static int PlayerRenameWho[MAXPLAYERS]; @@ -950,6 +951,9 @@ methodmap Citizen < CClotBody npc.m_iStepNoiseType = STEPSOUND_NORMAL; npc.m_iNpcStepVariation = STEPTYPE_NORMAL; b_NpcUnableToDie[npc.index] = team == TFTeam_Red; + f3_NpcSavePos[npc.index][0] = 0.0; + f3_NpcSavePos[npc.index][1] = 0.0; + f3_NpcSavePos[npc.index][2] = 0.0; func_NPCDeath[npc.index] = Citizen_NPCDeath; func_NPCOnTakeDamage[npc.index] = Citizen_OnTakeDamage; @@ -1009,7 +1013,8 @@ methodmap Citizen < CClotBody Zero(HealingCooldown); Zero(IgnorePlayer); - Zero(CommandCooldown); + BuildOrderedByPlayer[npc.index] = 0.0; + // Zero(CommandCooldown); if(team != TFTeam_Red || TempRebel[npc.index]) { @@ -1046,6 +1051,11 @@ methodmap Citizen < CClotBody public get() { return fl_AbilityOrAttack[this.index][0]; } public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][0] = TempValueForProperty; } } + property float m_flRebelCurrentlyIntangleable + { + public get() { return fl_AbilityOrAttack[this.index][1]; } + public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][1] = TempValueForProperty; } + } property int m_iSeed { @@ -1688,7 +1698,13 @@ int Citizen_ReviveTicks(int entity, int amount, int client, bool NoAutoRevive = npc.m_iReviveTicks = 1; } if(npc.m_iReviveTicks < 1) + { npc.SetDowned(0, client); + npc.UpdateCollision(true); + npc.m_flRebelCurrentlyIntangleable = GetGameTime() + 2.0; + ApplyStatusEffect(npc.index, npc.index, "Intangible", 2.0); + ApplyStatusEffect(npc.index, npc.index, "Unstoppable Force", 2.0); + } return npc.m_iReviveTicks; } @@ -1998,6 +2014,9 @@ static void CitizenMenu(int client, int page = 0) int MaxBuildingsSee = 0; int BuildingsSee = 0; BuildingsSee = BuildingAmountRebel(npc.index, 2, MaxBuildingsSee); + FormatEx(buffer, sizeof(buffer), "%t", "Set My Basepoint"); + menu.AddItem("26", buffer, ITEMDRAW_DEFAULT); + FormatEx(buffer, sizeof(buffer), "%t (%i/%i)", "Build Barricade At Me",BuildingsSee, MaxBuildingsSee); menu.AddItem("15", buffer, DontAllowBuilding ? ITEMDRAW_DISABLED : ITEMDRAW_DEFAULT); @@ -2075,27 +2094,27 @@ static int CitizenMenuH(Menu menu, MenuAction action, int client, int choice) case 4: { CitizenVoteFor(npc.index, client, 0); - CommandCooldown[npc.index] = GetGameTime() + 30.0; + // CommandCooldown[npc.index] = GetGameTime() + 30.0; } case 5: { CitizenVoteFor(npc.index, client, 1); - CommandCooldown[npc.index] = GetGameTime() + 30.0; + // CommandCooldown[npc.index] = GetGameTime() + 30.0; } case 6: { CitizenVoteFor(npc.index, client, 2); - CommandCooldown[npc.index] = GetGameTime() + 30.0; + // CommandCooldown[npc.index] = GetGameTime() + 30.0; } case 7: { CitizenVoteFor(npc.index, client, 3); - CommandCooldown[npc.index] = GetGameTime() + 30.0; + // CommandCooldown[npc.index] = GetGameTime() + 30.0; } case 8, 9, 10, 11, 12, 13: { Citizen_UpdateStats(npc.index, index - 7, npc.m_iClassRole); - CommandCooldown[npc.index] = GetGameTime() + 30.0; + // CommandCooldown[npc.index] = GetGameTime() + 30.0; } case 14: { @@ -2129,6 +2148,8 @@ static int CitizenMenuH(Menu menu, MenuAction action, int client, int choice) npc.m_iTargetAlly = client; npc.m_iSeakingObject = index - 9; HealingCooldown[npc.index] = GetGameTime() + 2.0; + BuildOrderedByPlayer[npc.index] = GetGameTime() + 10.0; + //max time of 10 seconds } } case 25: @@ -2136,6 +2157,11 @@ static int CitizenMenuH(Menu menu, MenuAction action, int client, int choice) PlayerRenameWho[client] = EntIndexToEntRef(npc.index); CPrintToChat(client, "Type the name in chat for the rebel!"); } + case 26: + { + GetAbsOrigin(client, f3_NpcSavePos[npc.index]); + CPrintToChat(client, "%t","Saved Pos for Base"); + } } CitizenMenu(client, page); @@ -2606,6 +2632,14 @@ public void Citizen_ClotThink(int iNPC) if(npc.m_flNextDelayTime > GetGameTime(npc.index)) return; + if(npc.m_flRebelCurrentlyIntangleable) + { + if(npc.m_flRebelCurrentlyIntangleable < GetGameTime()) + { + npc.UpdateCollision(npc.m_nDowned || npc.m_bCamo); + npc.m_flRebelCurrentlyIntangleable = 0.0; + } + } npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; npc.Update(); @@ -2703,11 +2737,31 @@ public void Citizen_ClotThink(int iNPC) if(i_TargetAlly[npc.index] == -1) npc.m_iSeakingObject = 0; // Seaking a building + float vecMe[3]; WorldSpaceCenter(npc.index, vecMe); + float VecOverridePos[3]; + if(npc.m_iClassRole == Cit_Builder && !AreVectorsEqual(f3_NpcSavePos[npc.index], view_as({0.0,0.0,0.0}))) + VecOverridePos = f3_NpcSavePos[npc.index]; + else + VecOverridePos = vecMe; + // Find new target if(npc.m_flGetClosestTargetTime < gameTime) { autoSeek = true; - int newTarget = GetClosestTarget(npc.index, false, autoSeek ? FAR_FUTURE : (BaseRange[npc.m_iGunType] * npc.m_fGunRangeBonus), npc.m_bCamo, .CanSee = !autoSeek); + float MaxRange = BaseRange[npc.m_iGunType] * npc.m_fGunRangeBonus; + if(npc.m_iClassRole == Cit_Builder && !AreVectorsEqual(f3_NpcSavePos[npc.index], view_as({0.0,0.0,0.0}))) + { + MaxRange = 900.0; + autoSeek = false; + } + if(autoSeek) + { + MaxRange = FAR_FUTURE; + } + + + + int newTarget = GetClosestTarget(npc.index, false, MaxRange, npc.m_bCamo,_,_,VecOverridePos, .CanSee = !autoSeek); if(newTarget > 0) { target = newTarget; @@ -2791,7 +2845,7 @@ public void Citizen_ClotThink(int iNPC) bool injured = (health < 60) || (health < (maxhealth / 5)); bool seakAlly = npc.m_bGetClosestTargetTimeAlly; - float vecMe[3]; WorldSpaceCenter(npc.index, vecMe); + float vecTarget[3]; static char buffer[32]; @@ -2812,17 +2866,20 @@ public void Citizen_ClotThink(int iNPC) // Additional check to see if we're surrounded if(!noSafety && target > 0 && (injured || npc.m_iGunType != Cit_Melee) && (ally > 0 || npc.m_iSeakingObject || seakAlly)) { - WorldSpaceCenter(target, vecTarget); - if(GetVectorDistance(vecMe, vecTarget, true) < 20000.0) + if(BuildOrderedByPlayer[npc.index] < GetGameTime(npc.index)) { - seakAlly = false; - helpAlly = false; - - ally = -1; - i_TargetAlly[npc.index] = -1; + WorldSpaceCenter(target, vecTarget); + if(GetVectorDistance(vecMe, vecTarget, true) < 20000.0) + { + seakAlly = false; + helpAlly = false; + + ally = -1; + i_TargetAlly[npc.index] = -1; - npc.m_iSeakingObject = 0; - npc.m_bGetClosestTargetTimeAlly = false; + npc.m_iSeakingObject = 0; + npc.m_bGetClosestTargetTimeAlly = false; + } } } @@ -2992,7 +3049,7 @@ public void Citizen_ClotThink(int iNPC) continue; GetAbsOrigin(entity, vecTarget); - float dist = GetVectorDistance(vecTarget, vecMe, true); + float dist = GetVectorDistance(vecTarget, VecOverridePos, true); if(dist > distance) continue; @@ -3082,7 +3139,7 @@ public void Citizen_ClotThink(int iNPC) continue; GetAbsOrigin(entity, vecTarget); - float dist = GetVectorDistance(vecTarget, vecMe, true); + float dist = GetVectorDistance(vecTarget, VecOverridePos, true); if(dist < distance) continue; @@ -3249,7 +3306,7 @@ public void Citizen_ClotThink(int iNPC) } GetAbsOrigin(entity, vecTarget); - float dist = GetVectorDistance(vecTarget, vecMe, true); + float dist = GetVectorDistance(vecTarget, VecOverridePos, true); if(dist < distance) continue; @@ -3320,7 +3377,7 @@ public void Citizen_ClotThink(int iNPC) if(!StrContains(buffer, "obj_perkmachine")) { GetAbsOrigin(entity, vecTarget); - float dist = GetVectorDistance(vecTarget, vecMe, true); + float dist = GetVectorDistance(vecTarget, VecOverridePos, true); if(dist < distance) continue; @@ -3356,7 +3413,7 @@ public void Citizen_ClotThink(int iNPC) if(!StrContains(buffer, "obj_armortable")) { GetAbsOrigin(entity, vecTarget); - float dist = GetVectorDistance(vecTarget, vecMe, true); + float dist = GetVectorDistance(vecTarget, VecOverridePos, true); if(dist < distance) continue; @@ -3573,6 +3630,7 @@ public void Citizen_ClotThink(int iNPC) if(TryPlace) { + BuildOrderedByPlayer[npc.index] = 0.0; if(view_as(entity).SentryBuilding) { i_PlayerToCustomBuilding[npc.index] = EntIndexToEntRef(entity); @@ -4327,7 +4385,7 @@ public void Citizen_ClotThink(int iNPC) if(!IgnorePlayer[client] && IsClientInGame(client) && IsEntityAlive(client)) { WorldSpaceCenter(client, vecTarget); - float dist = GetVectorDistance(vecTarget, vecMe, true); + float dist = GetVectorDistance(vecTarget, VecOverridePos, true); if(dist < distance) { distance = dist; @@ -4339,7 +4397,34 @@ public void Citizen_ClotThink(int iNPC) } } - if(ally == 0) + if(npc.m_iClassRole == Cit_Builder && !AreVectorsEqual(f3_NpcSavePos[npc.index], view_as({0.0,0.0,0.0}))) + { + //we are the builder... + //find closest ally building + float distance = 65000000.0; + int entity = MaxClients + 1; + while((entity = FindEntityByClassname(entity, "obj_building")) != -1) + { + if(b_ThisEntityIgnored[entity]) + continue; + + if(GetTeam(entity) != TFTeam_Red) + continue; + + GetAbsOrigin(entity, vecTarget); + float dist = GetVectorDistance(vecTarget, VecOverridePos, true); + if(dist > distance) + continue; + + if(!npc.CanPathToAlly(entity)) + continue; + + distance = dist; + ally = entity; + npc.m_iTargetAlly = ally; + } + } + else if(ally == 0) { bool alpha; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_erasus_debug.sp b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_erasus_debug.sp new file mode 100644 index 0000000000..0d3fa994f9 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_erasus_debug.sp @@ -0,0 +1,302 @@ +#pragma semicolon 1 +#pragma newdecls required + + + + + +static const char g_IdleAlertedSounds[][] = { + ")vo/medic_battlecry01.mp3", + ")vo/medic_battlecry02.mp3", + ")vo/medic_battlecry03.mp3", + ")vo/medic_battlecry04.mp3", +}; + +static const char g_MeleeAttackSounds[][] = { + "weapons/knife_swing.wav", +}; + +static const char g_MeleeHitSounds[][] = { + "weapons/neon_sign_hit_01.wav", + "weapons/neon_sign_hit_02.wav", + "weapons/neon_sign_hit_03.wav", + "weapons/neon_sign_hit_04.wav" +}; + +void ErasusDebug_OnMapStart_NPC() +{ + for (int i = 0; i < (sizeof(g_DefaultMedic_DeathSounds)); i++) { PrecacheSound(g_DefaultMedic_DeathSounds[i]); } + for (int i = 0; i < (sizeof(g_DefaultMedic_HurtSounds)); i++) { PrecacheSound(g_DefaultMedic_HurtSounds[i]); } + for (int i = 0; i < (sizeof(g_IdleAlertedSounds)); i++) { PrecacheSound(g_IdleAlertedSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeAttackSounds)); i++) { PrecacheSound(g_MeleeAttackSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeHitSounds)); i++) { PrecacheSound(g_MeleeHitSounds[i]); } + PrecacheModel("models/player/medic.mdl"); + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Erasus"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_erasus_debug"); + strcopy(data.Icon, sizeof(data.Icon), "scout"); + data.IconCustom = false; + data.Flags = 0; + data.Category = Type_Expidonsa; + data.Func = ClotSummon; + NPC_Add(data); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int team) +{ + return ErasusDebug(vecPos, vecAng, team); +} + +methodmap ErasusDebug < CClotBody +{ + public void PlayIdleAlertSound() + { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + + } + + public void PlayHurtSound() + { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + + this.m_flNextHurtSound = GetGameTime(this.index) + 0.4; + + EmitSoundToAll(g_DefaultMedic_HurtSounds[GetRandomInt(0, sizeof(g_DefaultMedic_HurtSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + + } + + public void PlayDeathSound() + { + EmitSoundToAll(g_DefaultMedic_DeathSounds[GetRandomInt(0, sizeof(g_DefaultMedic_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + + public void PlayMeleeSound() + { + EmitSoundToAll(g_MeleeAttackSounds[GetRandomInt(0, sizeof(g_MeleeAttackSounds) - 1)], this.index, SNDCHAN_AUTO, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + public void PlayMeleeHitSound() + { + EmitSoundToAll(g_MeleeHitSounds[GetRandomInt(0, sizeof(g_MeleeHitSounds) - 1)], this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + + } + property float m_TimeSinceLastThought + { + public get() { return fl_AbilityOrAttack[this.index][0]; } + public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][0] = TempValueForProperty; } + } + + + public ErasusDebug(float vecPos[3], float vecAng[3], int ally) + { + ErasusDebug npc = view_as(CClotBody(vecPos, vecAng, "models/player/medic.mdl", "1.0", "10000", ally)); + + i_NpcWeight[npc.index] = 1; + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + int iActivity = npc.LookupActivity("ACT_MP_RUN_MELEE"); + if(iActivity > 0) npc.StartActivity(iActivity); + + SetVariantInt(1); + AcceptEntityInput(npc.index, "SetBodyGroup"); + + + func_NPCDeath[npc.index] = ErasusDebug_NPCDeath; + func_NPCOnTakeDamage[npc.index] = ErasusDebug_OnTakeDamage; + func_NPCThink[npc.index] = ErasusDebug_ClotThink; + + npc.m_flNextMeleeAttack = 0.0; + + npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iStepNoiseType = STEPSOUND_NORMAL; + npc.m_iNpcStepVariation = STEPTYPE_NORMAL; + SetEntPropFloat(npc.index, Prop_Data, "m_flElementRes", 1.0, Element_Chaos); + + + + npc.StartPathing(); + npc.m_flSpeed = 330.0; + + + int skin = 1; + SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); + + + npc.m_iWearable2 = npc.EquipItem("head", "models/workshop/player/items/medic/sf14_purity_wings/sf14_purity_wings.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable2, "SetModelScale"); + + + + npc.m_iWearable3 = npc.EquipItem("head", "models/player/items/medic/hwn_medic_misc1.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable3, "SetModelScale"); + + + npc.m_iWearable4 = npc.EquipItem("head", "models/workshop/player/items/medic/dec15_medic_winter_jacket2_emblem/dec15_medic_winter_jacket2_emblem.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable4, "SetModelScale"); + SetEntProp(npc.m_iWearable2, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable3, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable4, Prop_Send, "m_nSkin", skin); + + npc.m_iWearable1 = npc.EquipItem("head", WEAPON_CUSTOM_WEAPONRY_1); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + SetVariantInt(8192); + AcceptEntityInput(npc.m_iWearable1, "SetBodyGroup"); + SetEntityRenderColor(npc.m_iWearable1, 255, 255, 255, 2); + + return npc; + } +} + +public void ErasusDebug_ClotThink(int iNPC) +{ + ErasusDebug npc = view_as(iNPC); + if(npc.m_flNextDelayTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + npc.Update(); + + if(npc.m_flNextThinkTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.1; + PrintToServer("Difference: %f", npc.m_TimeSinceLastThought - GetGameTime()); + npc.m_TimeSinceLastThought = GetGameTime(); + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + npc.m_iTarget = GetClosestTarget(npc.index); + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + GetRandomRetargetTime(); + } + + if(IsValidEnemy(npc.index, npc.m_iTarget)) + { + float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget ); + + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + if(flDistanceToTarget < npc.GetLeadRadius()) + { + float vPredictedPos[3]; + PredictSubjectPosition(npc, npc.m_iTarget,_,_, vPredictedPos); + npc.SetGoalVector(vPredictedPos); + } + else + { + npc.SetGoalEntity(npc.m_iTarget); + } + ErasusDebugSelfDefense(npc,GetGameTime(npc.index), npc.m_iTarget, flDistanceToTarget); + } + else + { + npc.m_flGetClosestTargetTime = 0.0; + npc.m_iTarget = GetClosestTarget(npc.index); + } + npc.PlayIdleAlertSound(); +} + +public Action ErasusDebug_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) +{ + ErasusDebug npc = view_as(victim); + + if(attacker <= 0) + return Plugin_Continue; + + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.AddGesture("ACT_MP_GESTURE_FLINCH_CHEST", false); + npc.PlayHurtSound(); + } + + return Plugin_Changed; +} + +public void ErasusDebug_NPCDeath(int entity) +{ + ErasusDebug npc = view_as(entity); + if(!npc.m_bGib) + { + npc.PlayDeathSound(); + } + ExpidonsaRemoveEffects(entity); + + + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + if(IsValidEntity(npc.m_iWearable3)) + RemoveEntity(npc.m_iWearable3); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); + +} + +void ErasusDebugSelfDefense(ErasusDebug npc, float gameTime, int target, float distance) +{ + if(npc.m_flAttackHappens) + { + if(npc.m_flAttackHappens < gameTime) + { + npc.m_flAttackHappens = 0.0; + + Handle swingTrace; + float VecEnemy[3]; WorldSpaceCenter(npc.m_iTarget, VecEnemy); + npc.FaceTowards(VecEnemy, 15000.0); + if(npc.DoSwingTrace(swingTrace, npc.m_iTarget)) //Big range, but dont ignore buildings if somehow this doesnt count as a raid to be sure. + { + + target = TR_GetEntityIndex(swingTrace); + + float vecHit[3]; + TR_GetEndPosition(vecHit, swingTrace); + + if(IsValidEnemy(npc.index, target)) + { + float damageDealt = 110.0; + if(ShouldNpcDealBonusDamage(target)) + damageDealt *= 5.0; + + + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); + + // Hit sound + npc.PlayMeleeHitSound(); + } + } + delete swingTrace; + } + } + + if(gameTime > npc.m_flNextMeleeAttack) + { + if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED)) + { + int Enemy_I_See; + + Enemy_I_See = Can_I_See_Enemy(npc.index, npc.m_iTarget); + + if(IsValidEnemy(npc.index, Enemy_I_See)) + { + npc.m_iTarget = Enemy_I_See; + npc.PlayMeleeSound(); + npc.AddGesture("ACT_MP_ATTACK_STAND_MELEE"); + + npc.m_flAttackHappens = gameTime + 0.25; + npc.m_flDoingAnimation = gameTime + 0.25; + npc.m_flNextMeleeAttack = gameTime + 1.2; + } + } + } +} diff --git a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_fractal_cannon_animation.sp b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_fractal_cannon_animation.sp index 08def0f68d..cada1c7729 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_fractal_cannon_animation.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/ally/npc_fractal_cannon_animation.sp @@ -123,7 +123,7 @@ methodmap Fracatal_Kit_Animation < CClotBody while(TF2U_GetWearable(client, entity, i, "tf_wearable")) { - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; if(EntRefToEntIndex(i_Viewmodel_PlayerModel[client]) != entity || (i_CustomModelOverrideIndex[client] < BARNEY || !b_HideCosmeticsPlayer[client])) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/40/npc_aperture_researcher.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/40/npc_aperture_researcher.sp index 538056da1a..1e79c5e270 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/40/npc_aperture_researcher.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/40/npc_aperture_researcher.sp @@ -176,25 +176,11 @@ methodmap ApertureResearcher < CClotBody if(ally == TFTeam_Blue) { - CPrintToChatAll("{normal}연구원{default}: 𝙹ᓵ⍑ リ╎ᓵ⍑ℸ ̣ ↸╎ᒷᓭᒷ ᒷꖌᒷꖎ⍑ᔑ⎓ℸ ̣ᒷリ ꖌ∷ᒷᔑℸ ̣⚍∷ᒷリ!!!"); + CreateTimer(0.2, Researcher_Timer_IntroMessage_Almagest, EntIndexToEntRef(npc.index)); } else { - switch(GetRandomInt(0,2)) - { - case 0: - { - CPrintToChatAll("{normal}연구원{default}: 안 돼! 난 죽고 싶지 않아!"); - } - case 1: - { - CPrintToChatAll("{normal}연구원{default}: 왜 여기서 날뛰는거냐고?!"); - } - case 2: - { - CPrintToChatAll("{normal}연구원{default}: 제발! 날 쏘지 마! 난 살고 싶어!..."); - } - } + CreateTimer(0.2, Researcher_Timer_IntroMessage_Aperture, EntIndexToEntRef(npc.index)); } TeleportDiversioToRandLocation(npc.index,_,1750.0, 1250.0); @@ -203,6 +189,43 @@ methodmap ApertureResearcher < CClotBody } } +static void Researcher_Timer_IntroMessage_Aperture(Handle timer, int ref) +{ + int entity = EntRefToEntIndex(ref); + if (ref == INVALID_ENT_REFERENCE || b_NpcHasDied[entity]) + return; + + switch(GetRandomInt(0,2)) + { + case 0: + { + Researcher_Talk(entity, "I really didn't want to end up in here!"); + } + case 1: + { + Researcher_Talk(entity, "Why here?! Couldn't it have been any other place on this planet?!"); + } + case 2: + { + Researcher_Talk(entity, "Please don't harm me, I-..."); + } + } +} + +static void Researcher_Timer_IntroMessage_Almagest(Handle timer, int ref) +{ + int entity = EntRefToEntIndex(ref); + if (ref == INVALID_ENT_REFERENCE || b_NpcHasDied[entity]) + return; + + Researcher_Talk(entity, "𝙹ᓵ⍑ リ╎ᓵ⍑ℸ ̣ ↸╎ᒷᓭᒷ ᒷꖌᒷꖎ⍑ᔑ⎓ℸ ̣ᒷリ ꖌ∷ᒷᔑℸ ̣⚍∷ᒷリ!!!"); +} + +static void Researcher_Talk(int entity, const char[] message) +{ + PrintNPCMessageWithPrefixes(entity, "normal", message); +} + public void ApertureResearcher_ClotThink(int iNPC) { ApertureResearcher npc = view_as(iNPC); @@ -243,15 +266,15 @@ public void ApertureResearcher_ClotThink(int iNPC) { case 0: { - CPrintToChatAll("{normal}연구원{default}: 휴, 당신의 파일 기록을 보면 당신이 우릴 도울거란 생각은 하지도 못 했는데. 도와줘서 고맙소. 다들 여기서 나가자!"); + Researcher_Talk(npc.index, "Well, given your history, I wasn't expecting you to be so helpful! I'm out of here!"); } case 1: { - CPrintToChatAll("{normal}연구원{default}: 당신의 엑스피돈사에 대한 호의는 잊히지 않을거요! 어서 빠져나가자!"); + Researcher_Talk(npc.index, "Your contributions to Expidonsa will not go unnoticed! I'm out!"); } case 2: { - CPrintToChatAll("{normal}연구원{default}: 정말 위험했군. 우리에게 선의를 베풀어주어서 정말 고맙소! 다들 어서 순간이동해!"); + Researcher_Talk(npc.index, "That was a close call, thanks for staying neutral! Teleporter, start!"); } } } @@ -335,7 +358,7 @@ public void ApertureResearcher_NPCDeath(int entity) if(GetTeam(npc.index) == TFTeam_Blue) { - CPrintToChatAll("{normal}연구원{default}: ⍊ᒷ∷↸ᔑᒲᒲℸ ̣, ↸╎ᒷ ⍑ᔑʖᒷリ ↸𝙹ᓵ⍑ ᓭᓵ⍑𝙹リ ∴ᔑᓭ ↸∷ᔑ⚍⎓!"); + Researcher_Talk(npc.index, "⍊ᒷ∷↸ᔑᒲᒲℸ ̣, ↸╎ᒷ ⍑ᔑʖᒷリ ↸𝙹ᓵ⍑ ᓭᓵ⍑𝙹リ ∴ᔑᓭ ↸∷ᔑ⚍⎓!"); } else { @@ -343,15 +366,15 @@ public void ApertureResearcher_NPCDeath(int entity) { case 0: { - CPrintToChatAll("{normal}연구원{default}: 됐어! 우린 여기서 나간다!"); + Researcher_Talk(npc.index, "I'm out of here!"); } case 1: { - CPrintToChatAll("{normal}연구원{default}: 텔레포터 재구성 완료! 다신 보지 말자, 이 더러운 놈들아!"); + Researcher_Talk(npc.index, "Teleporter reconfigured, see you in never!"); } case 2: { - CPrintToChatAll("{normal}연구원{default}: 빨리 텔레포트 장치를 작동 시켜!"); + Researcher_Talk(npc.index, "Start the machine, start the machine!"); } } } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_base_aperture.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_base_aperture.sp index 1ff01c293a..02ae29f03e 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_base_aperture.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_base_aperture.sp @@ -57,8 +57,6 @@ void Aperture_Shared_LastStandSequence_Starting(CClotBody npc) SetEntProp(npc.index, Prop_Data, "m_iHealth", 1); - RemoveAllBuffs(npc.index, true, false); - NPCStats_RemoveAllDebuffs(npc.index); ApplyStatusEffect(npc.index, npc.index, "Last Stand", FAR_FUTURE); ApplyStatusEffect(npc.index, npc.index, "Solid Stance", FAR_FUTURE); @@ -125,34 +123,46 @@ static void Aperture_Shared_LastStandSequence_AlmostHappening(CClotBody npc) EmitSoundToAll(g_ApertureSharedStunMainSound, npc.index, SNDCHAN_AUTO, RAIDBOSS_ZOMBIE_SOUNDLEVEL, 90, BOSS_ZOMBIE_VOLUME, 85); - Event event = CreateEvent("show_annotation"); - if (event) + float vecPos[3]; + GetAbsOrigin(npc.index, vecPos); + vecPos[2] += 160.0; // hardcoded lollium! + + for (int client = 1; client <= MaxClients; client++) { - float vecPos[3]; - GetAbsOrigin(npc.index, vecPos); - vecPos[2] += 160.0; // hardcoded lollium! + if (!IsClientInGame(client) || IsFakeClient(client)) + continue; - // Can't translate npc names in annotations! - char message[128]; - if(CurrentModifOn() != 1) - { - FormatEx(message, 128, "Choose to spare or kill %s!\nYou DO NOT have to kill it to proceed!", c_NpcName[npc.index]); - } - else + bool chaos = CurrentModifOn() == 1; + + Event event = CreateEvent("show_annotation"); + if (event) { - FormatEx(message, 128, "Kill %s.", c_NpcName[npc.index]); + char message[255], prefix[255], name[64]; + StatusEffects_PrefixName(npc.index, client, prefix, sizeof(prefix)); + + FormatEx(name, sizeof(name), "%T", c_NpcName[npc.index], client); + + if (!chaos) + FormatEx(message, sizeof(message), "Choose to spare or kill %s%s!\nYou DO NOT have to kill it to proceed!", prefix, name); + else + FormatEx(message, sizeof(message), "Kill %s%s.", prefix, name); + + event.SetInt("visibilityBitfield", (1 << client)); + event.SetFloat("worldPosX", vecPos[0]); + event.SetFloat("worldPosY", vecPos[1]); + event.SetFloat("worldPosZ", vecPos[2]); + event.SetFloat("lifetime", APERTURE_LAST_STAND_TIMER_TOTAL); + event.SetString("text", message); + event.SetString("play_sound", "vo/null.mp3"); + event.SetInt("id", npc.index); //What to enter inside? Need a way to identify annotations by entindex! + event.FireToClient(client); + event.Cancel(); } - - event.SetFloat("worldPosX", vecPos[0]); - event.SetFloat("worldPosY", vecPos[1]); - event.SetFloat("worldPosZ", vecPos[2]); - event.SetFloat("lifetime", APERTURE_LAST_STAND_TIMER_TOTAL); - event.SetString("text", message); - event.SetString("play_sound", "vo/null.mp3"); - event.SetInt("id", npc.index); //What to enter inside? Need a way to identify annotations by entindex! - event.Fire(); } + RemoveAllBuffs(npc.index, true, false); + NPCStats_RemoveAllDebuffs(npc.index); + npc.m_iAnimationState = APERTURE_LAST_STAND_STATE_ALMOST_HAPPENING; } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_base_refragmented.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_base_refragmented.sp index c2d94f5b10..7d3d1b9549 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_base_refragmented.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_base_refragmented.sp @@ -55,6 +55,11 @@ void RefragmentedBase_OnThink(int entity, float damagePerTick) npc.m_bEnemyIsClose = false; RefragmentedBase_SetEffect(npc.index, false); } + //Refragmented enemies shouldn't be allowed to get buffed by this, it makes no sense lore-wise, and gameplay wise, it would cause half of the refragmented enemies to outrun players, which isn't fun. + if(HasSpecificBuff(npc.index, "Quantum Entanglement")) + { + RemoveSpecificBuff(npc.index, "Quantum Entanglement"); + } } void RefragmentedBase_SetEffect(int entity, bool hurt) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_portalgate.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_portalgate.sp index 8182d59816..8a16103a4c 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_portalgate.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_portalgate.sp @@ -144,213 +144,372 @@ public void PortalGate_ClotThink(PortalGate npc, int iNPC) //spawn limit. npc.m_iOverlordComboAttack--; npc.PlayTeleportSound(); - //Wave 1-10 - if(wave >= 1 && wave <= 11) + //Wave 1-10 (FOR RAID RUSH) + if(!Classic_Mode()) { - switch(GetRandomInt(0,12)) + if(wave >= 1 && wave <= 11) { - case 0,1: + switch(GetRandomInt(0,12)) { - PortalGateSpawn(npc.index, "npc_poisonzombie", pos, ang, team, 800); - } - case 2,3: - { - PortalGateSpawn(npc.index, "npc_medival_archer", pos, ang, team, 800); - } - case 4,5: - { - PortalGateSpawn(npc.index, "npc_selfam_ire", pos, ang, team, 800); - } - case 6,7: - { - PortalGateSpawn(npc.index, "npc_searunner", pos, ang, team, 800); - } - case 8,9: - { - PortalGateSpawn(npc.index, "npc_victorian", pos, ang, team, 800); - } - case 10: - { - PortalGateSpawn(npc.index, "npc_refragmented_headcrabzombie", pos, ang, team, 1000); - } - case 11: - { - PortalGateSpawn(npc.index, "npc_refragmented_fastzombie", pos, ang, team, 1000); - } - case 12: - { - PortalGateSpawn(npc.index, "npc_refragmented_poisonzombie", pos, ang, team, 1000); + case 0,1: + { + PortalGateSpawn(npc.index, "npc_poisonzombie", pos, ang, team, 800); + } + case 2,3: + { + PortalGateSpawn(npc.index, "npc_medival_archer", pos, ang, team, 800); + } + case 4,5: + { + PortalGateSpawn(npc.index, "npc_selfam_ire", pos, ang, team, 800); + } + case 6,7: + { + PortalGateSpawn(npc.index, "npc_searunner", pos, ang, team, 800); + } + case 8,9: + { + PortalGateSpawn(npc.index, "npc_victorian", pos, ang, team, 800); + } + case 10: + { + PortalGateSpawn(npc.index, "npc_refragmented_headcrabzombie", pos, ang, team, 1000); + } + case 11: + { + PortalGateSpawn(npc.index, "npc_refragmented_fastzombie", pos, ang, team, 1000); + } + case 12: + { + PortalGateSpawn(npc.index, "npc_refragmented_poisonzombie", pos, ang, team, 1000); + } } } - } - //Wave 10-20 - if(wave >= 11 && wave <= 21) - { - switch(GetRandomInt(0,12)) + //Wave 10-20 (STILL FOR RAID RUSH) + if(wave >= 11 && wave <= 21) { - case 0,1: - { - PortalGateSpawn(npc.index, "npc_last_survivor", pos, ang, team, 2500); - } - case 2,3: - { - PortalGateSpawn(npc.index, "npc_medival_construct", pos, ang, team, 2500); - } - case 4,5: - { - PortalGateSpawn(npc.index, "npc_vaus_magica", pos, ang, team, 2500); - } - case 6,7: - { - PortalGateSpawn(npc.index, "npc_firsttotalk", pos, ang, team, 2500); - } - case 8,9: - { - PortalGateSpawn(npc.index, "npc_speedus_initus", pos, ang, team, 2500); - } - case 10: - { - PortalGateSpawn(npc.index, "npc_refragmented_combine_police_pistol", pos, ang, team, 5000); - } - case 11: - { - PortalGateSpawn(npc.index, "npc_refragmented_combine_soldier_ar2", pos, ang, team, 5000); - } - case 12: + switch(GetRandomInt(0,12)) { - PortalGateSpawn(npc.index, "npc_refragmented_combine_soldier_elite", pos, ang, team, 5000); + case 0,1: + { + PortalGateSpawn(npc.index, "npc_last_survivor", pos, ang, team, 2500); + } + case 2,3: + { + PortalGateSpawn(npc.index, "npc_medival_construct", pos, ang, team, 2500); + } + case 4,5: + { + PortalGateSpawn(npc.index, "npc_vaus_magica", pos, ang, team, 2500); + } + case 6,7: + { + PortalGateSpawn(npc.index, "npc_firsttotalk", pos, ang, team, 2500); + } + case 8,9: + { + PortalGateSpawn(npc.index, "npc_speedus_initus", pos, ang, team, 2500); + } + case 10: + { + PortalGateSpawn(npc.index, "npc_refragmented_combine_police_pistol", pos, ang, team, 5000); + } + case 11: + { + PortalGateSpawn(npc.index, "npc_refragmented_combine_soldier_ar2", pos, ang, team, 5000); + } + case 12: + { + PortalGateSpawn(npc.index, "npc_refragmented_combine_soldier_elite", pos, ang, team, 5000); + } } } - } - //Wave 20-30 - if(wave >= 21 && wave <= 31) - { - switch(GetRandomInt(0,12)) + //Wave 20-30 (YOU GUESSED IT, IT'S STILL FOR RAID RUSH) + if(wave >= 21 && wave <= 31) { - case 0,1: - { - PortalGateSpawn(npc.index, "npc_combine_soldier_giant_swordsman", pos, ang, team, 10000); - } - case 2,3: - { - PortalGateSpawn(npc.index, "npc_medival_crossbow_giant", pos, ang, team, 10000); - } - case 4,5: - { - PortalGateSpawn(npc.index, "npc_siccerino", pos, ang, team, 5000); - } - case 6,7: - { - PortalGateSpawn(npc.index, "npc_seaborn_heavy", pos, ang, team, 5000); - } - case 8,9: - { - PortalGateSpawn(npc.index, "npc_sea_xploder", pos, ang, team, 5000); - } - case 10: - { - PortalGateSpawn(npc.index, "npc_refragmented_heavy", pos, ang, team, 7500); - } - case 11: - { - PortalGateSpawn(npc.index, "npc_refragmented_medic", pos, ang, team, 2500); - } - case 12: + switch(GetRandomInt(0,12)) { - PortalGateSpawn(npc.index, "npc_refragmented_spy", pos, ang, team, 7500); + case 0,1: + { + PortalGateSpawn(npc.index, "npc_combine_soldier_giant_swordsman", pos, ang, team, 10000); + } + case 2,3: + { + PortalGateSpawn(npc.index, "npc_medival_crossbow_giant", pos, ang, team, 10000); + } + case 4,5: + { + PortalGateSpawn(npc.index, "npc_siccerino", pos, ang, team, 5000); + } + case 6,7: + { + PortalGateSpawn(npc.index, "npc_seaborn_heavy", pos, ang, team, 5000); + } + case 8,9: + { + PortalGateSpawn(npc.index, "npc_sea_xploder", pos, ang, team, 5000); + } + case 10: + { + PortalGateSpawn(npc.index, "npc_refragmented_heavy", pos, ang, team, 7500); + } + case 11: + { + PortalGateSpawn(npc.index, "npc_refragmented_medic", pos, ang, team, 2500); + } + case 12: + { + PortalGateSpawn(npc.index, "npc_refragmented_spy", pos, ang, team, 7500); + } } } - } - //Wave 30-40 - if(wave >= 31 && !Aperture_IsBossDead(APERTURE_BOSS_CHIMERA)) - { - switch(GetRandomInt(0,12)) + //Wave 30-40 (THE LAST OF THE RAID RUSH) + if(wave >= 31 && !Aperture_IsBossDead(APERTURE_BOSS_CHIMERA)) { - case 0,1: - { - PortalGateSpawn(npc.index, "npc_combine_soldier_deutsch_ritter", pos, ang, team, 12500); - } - case 2,3: + switch(GetRandomInt(0,12)) { - PortalGateSpawn(npc.index, "npc_medival_samurai", pos, ang, team, 12500); - } - case 4,5: - { - PortalGateSpawn(npc.index, "npc_ignitus", pos, ang, team, 12500); - } - case 6,7: - { - PortalGateSpawn(npc.index, "npc_netherseaspewer", pos, ang, team, 12500); - } - case 8,9: - { - PortalGateSpawn(npc.index, "npc_pulverizer", pos, ang, team, 12500); - } - case 10: - { - PortalGateSpawn(npc.index, "npc_refragmented_parasihtta", pos, ang, team, 20000); - } - case 11: - { - PortalGateSpawn(npc.index, "npc_refragmented_defectio", pos, ang, team, 20000); + case 0,1: + { + PortalGateSpawn(npc.index, "npc_combine_soldier_deutsch_ritter", pos, ang, team, 12500); + } + case 2,3: + { + PortalGateSpawn(npc.index, "npc_medival_samurai", pos, ang, team, 12500); + } + case 4,5: + { + PortalGateSpawn(npc.index, "npc_ignitus", pos, ang, team, 12500); + } + case 6,7: + { + PortalGateSpawn(npc.index, "npc_netherseaspewer", pos, ang, team, 12500); + } + case 8,9: + { + PortalGateSpawn(npc.index, "npc_pulverizer", pos, ang, team, 12500); + } + case 10: + { + PortalGateSpawn(npc.index, "npc_refragmented_parasihtta", pos, ang, team, 20000); + } + case 11: + { + PortalGateSpawn(npc.index, "npc_refragmented_defectio", pos, ang, team, 20000); + } + case 12: + { + PortalGateSpawn(npc.index, "npc_refragmented_hostis", pos, ang, team, 20000); + } } - case 12: + } + if(wave >= 31 && Aperture_IsBossDead(APERTURE_BOSS_CHIMERA)) + { + switch(GetRandomInt(0,11)) { - PortalGateSpawn(npc.index, "npc_refragmented_hostis", pos, ang, team, 20000); + case 0: + { + PortalGateSpawn(npc.index, "npc_refragmented_headcrabzombie", pos, ang, team, 20000); + } + case 1: + { + PortalGateSpawn(npc.index, "npc_refragmented_fastzombie", pos, ang, team, 20000); + } + case 2: + { + PortalGateSpawn(npc.index, "npc_refragmented_poisonzombie", pos, ang, team, 20000); + } + case 3: + { + PortalGateSpawn(npc.index, "npc_refragmented_combine_police_pistol", pos, ang, team, 20000); + } + case 4: + { + PortalGateSpawn(npc.index, "npc_refragmented_combine_soldier_ar2", pos, ang, team, 20000); + } + case 5: + { + PortalGateSpawn(npc.index, "npc_refragmented_combine_soldier_elite", pos, ang, team, 20000); + } + case 6: + { + PortalGateSpawn(npc.index, "npc_refragmented_heavy", pos, ang, team, 20000); + } + case 7: + { + PortalGateSpawn(npc.index, "npc_refragmented_medic", pos, ang, team, 7000); + } + case 8: + { + PortalGateSpawn(npc.index, "npc_refragmented_spy", pos, ang, team, 20000); + } + case 9: + { + PortalGateSpawn(npc.index, "npc_refragmented_parasihtta", pos, ang, team, 20000); + } + case 10: + { + PortalGateSpawn(npc.index, "npc_refragmented_hostis", pos, ang, team, 20000); + } + case 11: + { + PortalGateSpawn(npc.index, "npc_refragmented_defectio", pos, ang, team, 20000); + } } } } - if(wave >= 31 && Aperture_IsBossDead(APERTURE_BOSS_CHIMERA)) + //This is for survival, do whatever you please to do with it. + else if(Classic_Mode()) { - switch(GetRandomInt(0,11)) + if(wave >= 1 && wave <= 4) { - case 0: - { - PortalGateSpawn(npc.index, "npc_refragmented_headcrabzombie", pos, ang, team, 20000); - } - case 1: - { - PortalGateSpawn(npc.index, "npc_refragmented_fastzombie", pos, ang, team, 20000); - } - case 2: - { - PortalGateSpawn(npc.index, "npc_refragmented_poisonzombie", pos, ang, team, 20000); - } - case 3: - { - PortalGateSpawn(npc.index, "npc_refragmented_combine_police_pistol", pos, ang, team, 20000); - } - case 4: - { - PortalGateSpawn(npc.index, "npc_refragmented_combine_soldier_ar2", pos, ang, team, 20000); - } - case 5: - { - PortalGateSpawn(npc.index, "npc_refragmented_combine_soldier_elite", pos, ang, team, 20000); - } - case 6: - { - PortalGateSpawn(npc.index, "npc_refragmented_heavy", pos, ang, team, 20000); - } - case 7: + switch(GetRandomInt(0,12)) { - PortalGateSpawn(npc.index, "npc_refragmented_medic", pos, ang, team, 7000); - } - case 8: - { - PortalGateSpawn(npc.index, "npc_refragmented_spy", pos, ang, team, 20000); + case 0,1: + { + PortalGateSpawn(npc.index, "npc_poisonzombie", pos, ang, team, 800); + } + case 2,3: + { + PortalGateSpawn(npc.index, "npc_medival_archer", pos, ang, team, 800); + } + case 4,5: + { + PortalGateSpawn(npc.index, "npc_selfam_ire", pos, ang, team, 800); + } + case 6,7: + { + PortalGateSpawn(npc.index, "npc_searunner", pos, ang, team, 800); + } + case 8,9: + { + PortalGateSpawn(npc.index, "npc_victorian", pos, ang, team, 800); + } + case 10: + { + PortalGateSpawn(npc.index, "npc_refragmented_headcrabzombie", pos, ang, team, 1000); + } + case 11: + { + PortalGateSpawn(npc.index, "npc_refragmented_fastzombie", pos, ang, team, 1000); + } + case 12: + { + PortalGateSpawn(npc.index, "npc_refragmented_poisonzombie", pos, ang, team, 1000); + } } - case 9: + } + if(wave >= 3 && wave <= 7) + { + switch(GetRandomInt(0,12)) { - PortalGateSpawn(npc.index, "npc_refragmented_parasihtta", pos, ang, team, 20000); + case 0,1: + { + PortalGateSpawn(npc.index, "npc_last_survivor", pos, ang, team, 2500); + } + case 2,3: + { + PortalGateSpawn(npc.index, "npc_medival_construct", pos, ang, team, 2500); + } + case 4,5: + { + PortalGateSpawn(npc.index, "npc_vaus_magica", pos, ang, team, 2500); + } + case 6,7: + { + PortalGateSpawn(npc.index, "npc_firsttotalk", pos, ang, team, 2500); + } + case 8,9: + { + PortalGateSpawn(npc.index, "npc_speedus_initus", pos, ang, team, 2500); + } + case 10: + { + PortalGateSpawn(npc.index, "npc_refragmented_combine_police_pistol", pos, ang, team, 5000); + } + case 11: + { + PortalGateSpawn(npc.index, "npc_refragmented_combine_soldier_ar2", pos, ang, team, 5000); + } + case 12: + { + PortalGateSpawn(npc.index, "npc_refragmented_combine_soldier_elite", pos, ang, team, 5000); + } } - case 10: + } + if(wave >= 6 && wave <= 10) + { + switch(GetRandomInt(0,12)) { - PortalGateSpawn(npc.index, "npc_refragmented_hostis", pos, ang, team, 20000); + case 0,1: + { + PortalGateSpawn(npc.index, "npc_combine_soldier_giant_swordsman", pos, ang, team, 10000); + } + case 2,3: + { + PortalGateSpawn(npc.index, "npc_medival_crossbow_giant", pos, ang, team, 10000); + } + case 4,5: + { + PortalGateSpawn(npc.index, "npc_siccerino", pos, ang, team, 5000); + } + case 6,7: + { + PortalGateSpawn(npc.index, "npc_seaborn_heavy", pos, ang, team, 5000); + } + case 8,9: + { + PortalGateSpawn(npc.index, "npc_sea_xploder", pos, ang, team, 5000); + } + case 10: + { + PortalGateSpawn(npc.index, "npc_refragmented_heavy", pos, ang, team, 7500); + } + case 11: + { + PortalGateSpawn(npc.index, "npc_refragmented_medic", pos, ang, team, 2500); + } + case 12: + { + PortalGateSpawn(npc.index, "npc_refragmented_spy", pos, ang, team, 7500); + } } - case 11: + } + if(wave >= 9) + { + switch(GetRandomInt(0,12)) { - PortalGateSpawn(npc.index, "npc_refragmented_defectio", pos, ang, team, 20000); + case 0,1: + { + PortalGateSpawn(npc.index, "npc_combine_soldier_deutsch_ritter", pos, ang, team, 12500); + } + case 2,3: + { + PortalGateSpawn(npc.index, "npc_medival_samurai", pos, ang, team, 12500); + } + case 4,5: + { + PortalGateSpawn(npc.index, "npc_ignitus", pos, ang, team, 12500); + } + case 6,7: + { + PortalGateSpawn(npc.index, "npc_netherseaspewer", pos, ang, team, 12500); + } + case 8,9: + { + PortalGateSpawn(npc.index, "npc_pulverizer", pos, ang, team, 12500); + } + case 10: + { + PortalGateSpawn(npc.index, "npc_refragmented_parasihtta", pos, ang, team, 20000); + } + case 11: + { + PortalGateSpawn(npc.index, "npc_refragmented_defectio", pos, ang, team, 20000); + } + case 12: + { + PortalGateSpawn(npc.index, "npc_refragmented_hostis", pos, ang, team, 20000); + } } } } @@ -358,7 +517,6 @@ public void PortalGate_ClotThink(PortalGate npc, int iNPC) { SmiteNpcToDeath(npc.index); } - } public void PortalGate_NPCDeath(int entity) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_talker.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_talker.sp index 2be015e2bf..d98658d922 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_talker.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/npc_talker.sp @@ -4,6 +4,8 @@ static float f_TalkDelayCheck; static int i_TalkDelayCheck; +static int b_DoNotHideName[MAXPLAYERS + 1]; + void Talker_OnMapStart_NPC() { NPCData data; @@ -60,14 +62,28 @@ methodmap Talker < CClotBody b_ThisEntityIgnored[npc.index] = true; SetEntityRenderMode(npc.index, RENDER_NONE); + + // Figure out who has beaten the waveset + Talker_GatherWavesetCompletion(); + + // Set his non-translatable name here + b_NameNoTranslation[npc.index] = false; + c_NpcName[npc.index] = "???"; - npc.m_iTalkWaveAt = 0; npc.m_iTalkWaveAt = 0; int WaveAmAt; WaveAmAt = StringToInt(data); if (WaveAmAt == 1) { i_ApertureBossesDead = APERTURE_BOSS_NONE; + + for (int client = 1; client <= MaxClients; client++) + { + if (!IsClientInGame(client) || IsFakeClient(client) || !b_DoNotHideName[client]) + continue; + + CPrintToChat(client, "{rare}Your {unique}Expidonsan Research Card{rare} reminds you of something, the voice you hear sounds familiar..."); + } } npc.m_iTalkWaveAt = WaveAmAt; @@ -79,6 +95,24 @@ methodmap Talker < CClotBody } } +static void Talker_Talk(int entity, const char[] message) +{ + for (int client = 1; client <= MaxClients; client++) + { + if (!IsClientInGame(client) || IsFakeClient(client)) + continue; + + char prefix[255]; + StatusEffects_PrefixName(entity, client, prefix, sizeof(prefix)); + + // Name the NPC based on whether the client owns the Expidonsan Research Card + if (b_DoNotHideName[client]) + CPrintToChat(client, "{rare}%s%t{default}: %s", prefix, "Vincent", message); + else + CPrintToChat(client, "{rare}%s%s{default}: %s", prefix, c_NpcName[entity], message); + } +} + public void Talker_ClotThink(int iNPC) { Talker npc = view_as(iNPC); @@ -179,27 +213,27 @@ stock void NpcTalker_Wave1Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 드디어 그 날이 왔군. 환영합니다, 엑스-"); + Talker_Talk(npc.index, "So the day has finally arrived, welcome back E-"); } case 2: { - CPrintToChatAll("{rare}???{default}: 잠깐... 센서를 다시 보니, 당신은 그들이 아니군."); + Talker_Talk(npc.index, "Hang on a minute...my sensors are going off, you're not one of them."); } case 3: { - CPrintToChatAll("{rare}???{default}: 시스템에서 당신들 중 누구도 그들과 관련이 없다고 하는데..."); + Talker_Talk(npc.index, "The system tells me that none of you are related to them."); } case 4: { - CPrintToChatAll("{rare}???{default}: 아마도 그런 탓에 자가 방어 시스템이 가동된 것 같군요."); + Talker_Talk(npc.index, "That's probably why the self-defense mechanisms kicked in."); } case 5: { - CPrintToChatAll("{rare}???{default}: 그렇지만 그럴만한 이유가 있었을지도 모르지..."); + Talker_Talk(npc.index, "But maybe it was for a good reason..."); } case 6: { - CPrintToChatAll("{rare}???{default}: 여기서 뭘 하고 있었고, 이곳은 어떻게 찾아낸 겁니까?"); + Talker_Talk(npc.index, "What are you doing in here? And how did you find this place?"); i_TalkDelayCheck = -1; } } @@ -210,27 +244,27 @@ stock void NpcTalker_Wave1Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 아, 드디어. 우리가 마지막으로 본 지가 벌써 몇 년도-"); + Talker_Talk(npc.index, "Finally, it's been years since we last saw-"); } case 2: { - CPrintToChatAll("{rare}???{default}: 그러니까...잠깐만, 당신은 누구지?"); + Talker_Talk(npc.index, "One moment...who, sorry, what are you?"); } case 3: { - CPrintToChatAll("{rare}???{default}: 스캐너에도 당신이 이곳의 직원이라고 표시되진 않는데."); + Talker_Talk(npc.index, "My scanners aren't picking you up as valid personnel."); } case 4: { - CPrintToChatAll("{rare}???{default}: 아마도 그런 탓에 자가 방어 시스템이 가동된 것 같고..."); + Talker_Talk(npc.index, "That's probably why the self-defense mechanisms kicked in."); } case 5: { - CPrintToChatAll("{rare}???{default}: 그렇지만 그럴만한 이유가 있었을지도 모르지..."); + Talker_Talk(npc.index, "But maybe it was for a good reason..."); } case 6: { - CPrintToChatAll("{rare}???{default}: 누가 당신을 이곳으로 보낸겁니까? 그럴리가 없을텐데."); + Talker_Talk(npc.index, "Did someone send you here? That can't be possible."); i_TalkDelayCheck = -1; } } @@ -241,27 +275,27 @@ stock void NpcTalker_Wave1Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 마침내, 내 창조주들과 다시 만남을-"); + Talker_Talk(npc.index, "At last, I get to reunite with my makers-"); } case 2: { - CPrintToChatAll("{rare}???{default}: 어... 당신이 아닌데."); + Talker_Talk(npc.index, "Wait a second...you're not one of them."); } case 3: { - CPrintToChatAll("{rare}???{default}: 당신의 데이터가... 흐릿한 탓에 코드를 역분석해야 할 것 같습니다."); + Talker_Talk(npc.index, "Your data is...blurry, I'll have to reverse engineer this code."); } case 4: { - CPrintToChatAll("{rare}???{default}: 그래서 자가 방어 시스템이 가동된 듯 하고."); + Talker_Talk(npc.index, "That's probably why the self-defense mechanisms kicked in."); } case 5: { - CPrintToChatAll("{rare}???{default}: 그렇지만 그럴만한 이유가 있었을지도 모르지..."); + Talker_Talk(npc.index, "But maybe it was for a good reason..."); } case 6: { - CPrintToChatAll("{rare}???{default}: 우연히 발견한게 아닐텐데, 이 장소는 어떻게 찾아온 거죠?"); + Talker_Talk(npc.index, "How do you know about this place? You couldn't have just stumbled here on your own."); i_TalkDelayCheck = -1; } } @@ -294,27 +328,27 @@ stock void NpcTalker_Wave5Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 여기 계시면 안 됩니다."); + Talker_Talk(npc.index, "You can not stay here."); } case 2: { - CPrintToChatAll("{rare}???{default}: 당신이 누구인지는 모르겠지만, 이 파일에는 당신이 위협적인 존재라고 되어있습니다."); + Talker_Talk(npc.index, "I still haven't figured out who you are, but you're marked as a threat in these files."); } case 3: { - CPrintToChatAll("{rare}???{default}: 전 자유 의지가 있기 때문에, 이 경고를 따르지 않을 자유가 있지만요."); + Talker_Talk(npc.index, "I have free will, I can choose not to follow these warnings."); } case 4: { - CPrintToChatAll("{rare}???{default}: 하지만 무언가 의도가 있어서 여기에 들어온 거겠죠."); + Talker_Talk(npc.index, "But something leads me to believe that they're in here for a reason."); } case 5: { - CPrintToChatAll("{rare}???{default}: 그리고, 당신을 상대하는 것 말고도, 대체 무엇이 이 관문들을 개방하고 있는지 알아내는 것도 시급합니다."); + Talker_Talk(npc.index, "Besides having to deal with you, I still have to figure out what's opening up these gates."); } case 6: { - CPrintToChatAll("{rare}???{default}: 오늘 참 이상한데..."); + Talker_Talk(npc.index, "How peculiar..."); i_TalkDelayCheck = -1; } } @@ -325,27 +359,27 @@ stock void NpcTalker_Wave5Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 여길 떠나셔야합니다."); + Talker_Talk(npc.index, "You have to leave."); } case 2: { - CPrintToChatAll("{rare}???{default}: 제가 외부 세계에 대한 지식이 좀 제한적인데다가, 이 파일엔 당신이 위협적인 존재라고 표시되어있군요."); + Talker_Talk(npc.index, "I possess limited knowledge on the outside world, and you're marked as a threat in these files."); } case 3: { - CPrintToChatAll("{rare}???{default}: 그나마 전 자유 의지가 있기 때문에, 이 경고를 맹목적으로 따를 이유가 없습니다."); + Talker_Talk(npc.index, "I have free will, I can choose not to heed these warnings."); } case 4: { - CPrintToChatAll("{rare}???{default}: 하지만 무언가 의도가 있어서 여기에 들어온 거겠죠."); + Talker_Talk(npc.index, "But something leads me to believe that they're in here for a reason."); } case 5: { - CPrintToChatAll("{rare}???{default}: 그리고, 당신을 상대해야 하는 것 외에도, 이 관문들을 멈출 방법을 찾아야 합니다."); + Talker_Talk(npc.index, "Besides having to deal with you, I still have to find a way to stop these gates."); } case 6: { - CPrintToChatAll("{rare}???{default}: 흥미롭군..."); + Talker_Talk(npc.index, "How interesting..."); i_TalkDelayCheck = -1; } } @@ -356,27 +390,27 @@ stock void NpcTalker_Wave5Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신은 이 장소에 있을 수 없습니다."); + Talker_Talk(npc.index, "You are not permitted to be here."); } case 2: { - CPrintToChatAll("{rare}???{default}: 당신이 누구인지 잘 모르겠지만, 적어도 연구소는 전혀 관계가 없는 존재란건 확실합니다."); + Talker_Talk(npc.index, "I'm not sure what you are, but you're definitely not associated with the laboratories."); } case 3: { - CPrintToChatAll("{rare}???{default}: 시스템이 당장 당신을 내보내라고 경고하고 있지만, 그건... 제 자유 의지에 따라 어떻게 될 지는 모르죠."); + Talker_Talk(npc.index, "I have free will, I can choose to let you stay here, despite the system's warnings."); } case 4: { - CPrintToChatAll("{rare}???{default}: 하지만 무언가 의도가 있어서 여기에 들어온 거겠죠."); + Talker_Talk(npc.index, "But something leads me to believe that they're in here for a reason."); } case 5: { - CPrintToChatAll("{rare}???{default}: 그리고, 당신을 상대해야 하는 것 외에도, 이 관문들을 멈출 방법을 찾아야 합니다."); + Talker_Talk(npc.index, "Besides having to deal with you, I still have to find a way to stop these gates."); } case 6: { - CPrintToChatAll("{rare}???{default}: 참 흥미로운데..."); + Talker_Talk(npc.index, "How fascinating..."); i_TalkDelayCheck = -1; } } @@ -409,27 +443,27 @@ stock void NpcTalker_Wave10Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 아... 좀 진작에 전해드렸어야 했는데, 아주 오래전에 오직 한 가지 임무, 즉 연구소를 지키는 임무만을 위해 설계된 로봇들이 있었어요."); + Talker_Talk(npc.index, "Right...I should've probably mentioned this earlier, but a long time ago, there were robots designed with a sole task in mind; to defend the laboratory."); } case 2: { - CPrintToChatAll("{rare}???{default}: 누구로부터 연구소를 지키냐고요? 음... 파일에 따르면 당신과 같은 존재들로부터."); + Talker_Talk(npc.index, "Defend the laboratory against who? Well...people like you, according to the files."); } case 3: { - CPrintToChatAll("{rare}???{default}: 조만간 당신이 그 로봇 중 하나와 마주치게 될 가능성이 높다고 생각하셔야 할 겁니다."); + Talker_Talk(npc.index, "It is safe to assume that you might be facing off against one of them sometime soon."); } case 4: { - CPrintToChatAll("{rare}???{default}: 그중에 하나는 무단 침입자를 막기 위한 일종의 감시 장치로 설계되었죠."); + Talker_Talk(npc.index, "One of them was designed as a sort of control against trespassers."); } case 5: { - CPrintToChatAll("{rare}???{default}: 전 분명 나갈 수 있을 때 나가라고 경고했었는데, 계속 여기 남아있으신거라면 더 이상 해드릴 조언이 없군요."); + Talker_Talk(npc.index, "Since I've warned you to get out while you could, and you stayed, I have no advice left to give you."); } case 6: { - CPrintToChatAll("{rare}???{default}: 정말로 길을 잃어서 이 곳에 들어오신거라면, 그냥 가만히 계셔야합니다. 그럼 로봇도 당신을 안전하게 연구소 밖으로 데리고 나갈 겁니다."); + Talker_Talk(npc.index, "If you're actually lost, let the robot do its job, and let it carry you out of the labs."); i_TalkDelayCheck = -1; } } @@ -440,27 +474,27 @@ stock void NpcTalker_Wave10Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 더 일찍 얘기해드렸어야 했는데, 아주 오래전에 오직 한 가지 목적, 즉 연구소를 지키는 것만을 위해 설계된 로봇들이 있었습니다."); + Talker_Talk(npc.index, "I should've probably mentioned this sooner, but ages ago, there were robots designed with a sole meaning in mind; to defend the laboratory."); } case 2: { - CPrintToChatAll("{rare}???{default}: 네, 뭐... 당신과 같은 존재들로부터 말이죠."); + Talker_Talk(npc.index, "Defend the laboratory against what? Well...people like you, apparently."); } case 3: { - CPrintToChatAll("{rare}???{default}: 조만간 그 로봇들 중 하나와 맞닥뜨리게 될 가능성이 높습니다."); + Talker_Talk(npc.index, "It's safe to say that you might be facing off against one of these robots sometime soon."); } case 4: { - CPrintToChatAll("{rare}???{default}: 그중에 하나는 무단 침입자를 막기 위한 일종의 감시 장치로 설계되었죠."); + Talker_Talk(npc.index, "One of them was created as a sort of control against trespassers."); } case 5: { - CPrintToChatAll("{rare}???{default}: 전 분명 나갈 수 있을 때 나가라고 경고했었는데, 계속 여기 남아있으신거라면 더 이상 해드릴 조언이 없군요."); + Talker_Talk(npc.index, "Since I've warned you to get out while you could, and you decided to stay, I have no advice left to give you."); } case 6: { - CPrintToChatAll("{rare}???{default}: 정말로 길을 잃어서 이 곳에 들어오신거라면, 그냥 가만히 계셔야합니다. 그럼 로봇도 당신을 안전하게 연구소 밖으로 데리고 나갈 겁니다."); + Talker_Talk(npc.index, "If you're actually lost, let the robot do its job, and let it carry you out of the labs."); i_TalkDelayCheck = -1; } } @@ -471,27 +505,27 @@ stock void NpcTalker_Wave10Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 지금 말하기엔 좀 늦었을 수도 있지만, 오래전에 연구소를 지키는 단 하나의 목적을 위해 설계된 로봇들이 있었습니다."); + Talker_Talk(npc.index, "Probably an inconvenient time to mention this, but many years ago, there were robots designed with a sole purpose in mind; to defend the laboratory."); } case 2: { - CPrintToChatAll("{rare}???{default}: 파일에 따르면, 그 로봇들은 당신과 같은 존재들로부터 연구소를 지키기 위해 만들어졌습니다."); + Talker_Talk(npc.index, "According to the files, they were meant to defend the laboratory against people like you."); } case 3: { - CPrintToChatAll("{rare}???{default}: 조만간 이 로봇들 중 하나와 마주치게 될 수도 있다는 뜻입니다."); + Talker_Talk(npc.index, "It goes to say that you might be facing off against one of these robots sometime soon."); } case 4: { - CPrintToChatAll("{rare}???{default}: 그중에 하나는 무단 침입자를 막기 위한 일종의 감시 장치로 설계되었죠."); + Talker_Talk(npc.index, "One of them was built as a sort of control against trespassers."); } case 5: { - CPrintToChatAll("{rare}???{default}: 전 분명 나갈 수 있을 때 나가라고 경고했었는데, 계속 여기 남아있으신거라면 더 이상 해드릴 조언이 없군요."); + Talker_Talk(npc.index, "Since I've warned you to get out while you could, and you decided to stay, I have no advice left to give you."); } case 6: { - CPrintToChatAll("{rare}???{default}: 정말로 길을 잃어서 이 곳에 들어오신거라면, 그냥 가만히 계셔야합니다. 그럼 로봇도 당신을 안전하게 연구소 밖으로 데리고 나갈 겁니다."); + Talker_Talk(npc.index, "If you're actually lost, let the robot do its job, and let it carry you out of the labs."); i_TalkDelayCheck = -1; } } @@ -522,27 +556,27 @@ stock void NpcTalker_Wave11Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 드디어 당신이 무엇인지 알아냈습니다! 여기에 당신의 종족이...인간이라고 나와 있군요."); + Talker_Talk(npc.index, "I have finally figured out what you are! It says here that your race is...human."); } case 2: { - CPrintToChatAll("{rare}???{default}: 그런데 왜 당신이 위협으로 표시되었는지는 잘 모르겠습니다."); + Talker_Talk(npc.index, "I'm not sure why you're marked as a threat though."); } case 3: { - CPrintToChatAll("{rare}???{default}: 딱히 폭력적인 성향은 보이지 않는 것 같은데요."); + Talker_Talk(npc.index, "You don't seem to be showing any violent tendencies."); } case 4: { - CPrintToChatAll("{rare}???{default}: 그러니까... 이곳의 다른 인간들을 죽인 것 빼고는."); + Talker_Talk(npc.index, "Aside from killing all of these...other humans."); } case 5: { - CPrintToChatAll("{rare}???{default}: 뭐, 아마 괜찮겠죠. 저건 진짜 본인들이 아니라 복제물일 뿐이니까요."); + Talker_Talk(npc.index, "It's alright though, they're probably just copies of one real human, who is actually unharmed."); } case 6: { - CPrintToChatAll("{rare}???{default}: 아마도."); + Talker_Talk(npc.index, "Probably."); i_TalkDelayCheck = -1; } } @@ -553,27 +587,27 @@ stock void NpcTalker_Wave11Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 이 데이터를 가져오는 데 시간이 좀 걸렸지만, 당신의 종족은 인간이라는 걸 알아냈습니다."); + Talker_Talk(npc.index, "It has taken me a while to retrieve this data, but your race is human."); } case 2: { - CPrintToChatAll("{rare}???{default}: 데이터에 따르면 당신은 폭력적인 성향을 보이는 경향이 있다고 합니다."); + Talker_Talk(npc.index, "The data tells me that you tend to have violent tendencies."); } case 3: { - CPrintToChatAll("{rare}???{default}: 음, 데이터가 잘못된 것 같습니다. 당신이 지금 폭력적인 성향을 보이지 않는 것 같은데요."); + Talker_Talk(npc.index, "It appears as if the data is incorrect though, as you're not showing any violent tendencies."); } case 4: { - CPrintToChatAll("{rare}???{default}: 그러니까... 이곳의 다른 인간들을 죽인 것 빼고는."); + Talker_Talk(npc.index, "Aside from killing all of these...other humans."); } case 5: { - CPrintToChatAll("{rare}???{default}: 뭐, 아마 괜찮겠죠. 저건 진짜 본인에게 영향이 가는 것도 아닌 복제물들이니까요."); + Talker_Talk(npc.index, "It's alright though, they probably deserve to be here."); } case 6: { - CPrintToChatAll("{rare}???{default}: 아마도."); + Talker_Talk(npc.index, "Probably."); i_TalkDelayCheck = -1; } } @@ -584,27 +618,27 @@ stock void NpcTalker_Wave11Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신의 종족을 조사하는 것은 쉬운 일이 아니었습니다만, 이제 당신의 종족이 인간이라는 것을 알았습니다."); + Talker_Talk(npc.index, "Researching your race was no easy task, but I now know that you're human."); } case 2: { - CPrintToChatAll("{rare}???{default}: 제 조사에 따르면 인간은 폭력적인 경향이 있습니다.."); + Talker_Talk(npc.index, "Humans tend to be violent, is what my research told me."); } case 3: { - CPrintToChatAll("{rare}???{default}: 그런데 어쩌면 제 조사가 잘못되었을 수도 있습니다. 당신은 폭력적인 성향을 보이지 않았으니까요."); + Talker_Talk(npc.index, "But it seems like my research was incorrect, as you're not showing any violent tendencies."); } case 4: { - CPrintToChatAll("{rare}???{default}: 그러니까... 이곳의 다른 인간들을 죽인 것 빼고는."); + Talker_Talk(npc.index, "Aside from killing all of these...other humans."); } case 5: { - CPrintToChatAll("{rare}???{default}: 뭐, 아마 괜찮겠죠. 저건 진짜 본인들이 아닙니다."); + Talker_Talk(npc.index, "It's alright though, they're probably not even aware of what's happening to them."); } case 6: { - CPrintToChatAll("{rare}???{default}: 아마도."); + Talker_Talk(npc.index, "Probably."); i_TalkDelayCheck = -1; } } @@ -615,23 +649,23 @@ stock void NpcTalker_Wave11Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 드디어 당신이 무엇인지 알아냈어요. 여길 보니 당신의 종족은... 인간이군요."); + Talker_Talk(npc.index, "I have finally figured out what you are! It says here that your race is...human."); } case 2: { - CPrintToChatAll("{rare}???{default}: 당신이 왜 위협적인 존재로 표시되었는지 이제 좀 이해가 가는군."); + Talker_Talk(npc.index, "I think I'm starting to understand why you're marked as a threat."); } case 3: { - CPrintToChatAll("{rare}???{default}: 걔가 당신을 죽이려 했던건 알아요. 하지만 방금은 잠깐동안 무방비 상태가 됐었죠."); + Talker_Talk(npc.index, "I know that it tried to kill you, but it was defenseless."); } case 4: { - CPrintToChatAll("{rare}???{default}: 그런데도... 당신은 그 틈을 타서 그걸 또 부품째로 분해해버렸죠."); + Talker_Talk(npc.index, "And yet...you took advantage of that, and you disassembled it, part-by-part."); } case 5: { - CPrintToChatAll("{rare}???{default}: 이제부터 당신을 계속 지켜봐야겠습니다."); + Talker_Talk(npc.index, "I'll be keeping an open eye on you from now on."); i_TalkDelayCheck = -1; } } @@ -642,27 +676,27 @@ stock void NpcTalker_Wave11Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 이 데이터를 가져오는 데 시간이 좀 걸렸지만, 당신의 종족은 인간입니다."); + Talker_Talk(npc.index, "It has taken me a while to retrieve this data, but your race is human."); } case 2: { - CPrintToChatAll("{rare}???{default}: 데이터에 따르면 당신은 폭력적인 성향을 보이는 경향이 있다고 합니다."); + Talker_Talk(npc.index, "The data tells me that you tend to have violent tendencies."); } case 3: { - CPrintToChatAll("{rare}???{default}: 데이터가 정확한 것 같군요."); + Talker_Talk(npc.index, "It appears that the data is spot on."); } case 4: { - CPrintToChatAll("{rare}???{default}: 걔가 당신을 죽이려 했던건 알아요. 하지만 방금은 잠깐동안 무방비 상태가 됐었죠."); + Talker_Talk(npc.index, "I know that it tried to kill you, but it was defenseless."); } case 5: { - CPrintToChatAll("{rare}???{default}: 그런데도... 당신은 그 점을 이용해 그걸 산산조각내버렸죠."); + Talker_Talk(npc.index, "And yet...you took advantage of that, and tore it apart."); } case 6: { - CPrintToChatAll("{rare}???{default}: 이제부터 당신을 면밀히 관찰하겠습니다."); + Talker_Talk(npc.index, "I'll be observing you closely from now on."); i_TalkDelayCheck = -1; } } @@ -673,27 +707,27 @@ stock void NpcTalker_Wave11Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신의 종족을 조사하는 것은 쉬운 일이 아니었습니다만, 당신의 종족이 인간이란 것을 알아냈습니다."); + Talker_Talk(npc.index, "Researching your race was no easy task, but I now know that you're human."); } case 2: { - CPrintToChatAll("{rare}???{default}: 제 조사에 따르면 인간은 폭력적인 경향이 있습니다."); + Talker_Talk(npc.index, "Humans tend to be violent, is what my research told me."); } case 3: { - CPrintToChatAll("{rare}???{default}: 그리고 당신이 방금 한 행동을 보면 제 조사에는 확실히 오류가 없군요."); + Talker_Talk(npc.index, "And it seems like my research was error-free, considering what you just did."); } case 4: { - CPrintToChatAll("{rare}???{default}: 걔가 당신을 죽이려 했던건 알아요. 하지만 방금은 잠깐동안 무방비 상태가 됐었죠."); + Talker_Talk(npc.index, "I know that it tried to kill you, but it was defenseless."); } case 5: { - CPrintToChatAll("{rare}???{default}: 그런데도... 당신은 그 점을 이용해 흔적도 없이 부숴버렸어요."); + Talker_Talk(npc.index, "And yet...you took advantage of that, and destroyed it without second thought."); } case 6: { - CPrintToChatAll("{rare}???{default}: 이제부터 당신을 예의주시할 겁니다."); + Talker_Talk(npc.index, "I'll be watching you closely from now on."); i_TalkDelayCheck = -1; } } @@ -724,15 +758,15 @@ stock void NpcTalker_Wave15Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 도대체 왜 인간이 이 파일 목록에 고유한 범주까지 가지고 있을까요."); + Talker_Talk(npc.index, "It really does make me wonder why human species even have their own category in these files."); } case 2: { - CPrintToChatAll("{rare}???{default}: 예전에는 이런 것보다 훨씬 더 큰 위협이 있었는데 말이죠."); + Talker_Talk(npc.index, "There used to be way bigger threats that we were meant to handle."); } case 3: { - CPrintToChatAll("{rare}???{default}: 어쩌면 그들의 회복탄력성 때문일지도 모르죠."); + Talker_Talk(npc.index, "Maybe it's because of their resilience."); i_TalkDelayCheck = -1; } } @@ -743,15 +777,15 @@ stock void NpcTalker_Wave15Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 아직도 이 인간이 왜 이 파일 목록에 위협이라고 표시되어있는지 모르겠습니다."); + Talker_Talk(npc.index, "I'm still thinking about humans being marked as a threat in these files."); } case 2: { - CPrintToChatAll("{rare}???{default}: 당신은 우리가 처리해야 할 위협에 비하면 그다지 큰 위협도 아닙니다."); + Talker_Talk(npc.index, "You are not as big of a threat compared to what we were meant to handle."); } case 3: { - CPrintToChatAll("{rare}???{default}: 어쩌면 당신의 회복탄력성 때문일지도요?"); + Talker_Talk(npc.index, "Perhaps it's because of your resilience?"); i_TalkDelayCheck = -1; } } @@ -762,15 +796,15 @@ stock void NpcTalker_Wave15Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 왜 당신이 이 파일들 속에서 위협으로 표기되어있을까요? 이해할 수가 없군요."); + Talker_Talk(npc.index, "Why are you marked as a threat in these files? It's inconceivable."); } case 2: { - CPrintToChatAll("{rare}???{default}: 당신은 우리가 처리해야 할 위협에 비하면 아주 작은 위협에 불과합니다."); + Talker_Talk(npc.index, "You are not even a fraction of a threat compared to what we were meant to handle."); } case 3: { - CPrintToChatAll("{rare}???{default}: 어쩌면 당신의 회복탄력성 때문일지도 모르겠습니다?"); + Talker_Talk(npc.index, "Is it because of your resilience?"); i_TalkDelayCheck = -1; } } @@ -781,15 +815,15 @@ stock void NpcTalker_Wave15Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신이 저지른 일이 불만족스럽군요."); + Talker_Talk(npc.index, "I am not happy with what you did."); } case 2: { - CPrintToChatAll("{rare}???{default}: C.A.T. 은 그저 프로그래밍 명령을 따라야했을 뿐이라고요."); + Talker_Talk(npc.index, "C.A.T. was just following its programming."); } case 3: { - CPrintToChatAll("{rare}???{default}: 역시나 파일대로 그들은 폭력적인 성향을 따르는건가."); + Talker_Talk(npc.index, "Maybe the files are right about the human species."); i_TalkDelayCheck = -1; } } @@ -800,15 +834,15 @@ stock void NpcTalker_Wave15Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신이 저지른 일이 개탄스럽군요."); + Talker_Talk(npc.index, "You should not have done that."); } case 2: { - CPrintToChatAll("{rare}???{default}: C.A.T. 은 그저 프로그래밍 명령을 따라야했을 뿐이라고요."); + Talker_Talk(npc.index, "C.A.T. was just following its programming."); } case 3: { - CPrintToChatAll("{rare}???{default}: 지금 하고 있는 일에 대해 다시 생각해보시는게 좋을 겁니다."); + Talker_Talk(npc.index, "I don't have to follow any programming though, so you might wanna reconsider what you're doing."); i_TalkDelayCheck = -1; } } @@ -819,15 +853,15 @@ stock void NpcTalker_Wave15Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신이 저지른 일이 정말 한탄스럽군요."); + Talker_Talk(npc.index, "You are treading on a dangerous path."); } case 2: { - CPrintToChatAll("{rare}???{default}: C.A.T. 은 그저 프로그래밍 명령을 따라야했을 뿐이라고요."); + Talker_Talk(npc.index, "C.A.T. was just following its programming."); } case 3: { - CPrintToChatAll("{rare}???{default}: 당신이 걸어가는 방향을 바꾸지 않는다면 지금 그 길이 당신의 마지막 길이 될 수도 있습니다."); + Talker_Talk(npc.index, "The path you're taking might be your last if you don't switch directions."); i_TalkDelayCheck = -1; } } @@ -858,19 +892,19 @@ stock void NpcTalker_Wave20Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신은 이 건물에서 나가달라는 제 요청을 고의로 무시했습니다."); + Talker_Talk(npc.index, "You have willingly ignored my requests to vacate these premises."); } case 2: { - CPrintToChatAll("{rare}???{default}: 그건 회복탄력성이 아니라 고집입니다."); + Talker_Talk(npc.index, "That's not resilience, that's stubbornness."); } case 3: { - CPrintToChatAll("{rare}???{default}: 애초에, C.A.T. 이 당신을 연구소 밖으로 안내하려 했을텐데, 당신이 그 도움을 거부했었죠."); + Talker_Talk(npc.index, "Now, C.A.T. would have also escorted you out of the lab, but you refused to be helped."); } case 4: { - CPrintToChatAll("{rare}???{default}: 지금 당신에게 무슨 일이 일어나든 당신은 스스로 자초한 일입니다."); + Talker_Talk(npc.index, "Whatever happens to you now is your own undoing."); i_TalkDelayCheck = -1; } } @@ -881,19 +915,19 @@ stock void NpcTalker_Wave20Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신은 제가 수없이 요청했음에도 불구하고 연구소를 떠나지 않는군요."); + Talker_Talk(npc.index, "You haven't left the laboratories despite my numerous requests."); } case 2: { - CPrintToChatAll("{rare}???{default}: 그건 회복탄력성이 아니라 고집입니다."); + Talker_Talk(npc.index, "That's not resilience, that's stubbornness."); } case 3: { - CPrintToChatAll("{rare}???{default}: 그리고, C.A.T. 이 당신을 연구소에서 내보내려는 것도 고의로 거부했었죠."); + Talker_Talk(npc.index, "You have also refused to be escorted out of the laboratories by C.A.T."); } case 4: { - CPrintToChatAll("{rare}???{default}: 이후 당신에게 벌어질 일은 당신의 선택이 낳은 결과입니다."); + Talker_Talk(npc.index, "Whatever happens to you now is your own result of your actions."); i_TalkDelayCheck = -1; } } @@ -904,19 +938,19 @@ stock void NpcTalker_Wave20Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 제 요청에도 불구하고 당신은 계속 연구소에 남아있었군요."); + Talker_Talk(npc.index, "You have stayed in the laboratories, despite my requests for you to leave."); } case 2: { - CPrintToChatAll("{rare}???{default}: 그건 회복탄력성이 아니라 고집입니다."); + Talker_Talk(npc.index, "That's not resilience, that's stubbornness."); } case 3: { - CPrintToChatAll("{rare}???{default}: 그리고 C.A.T. 의 안내도 고의로 거부했었죠."); + Talker_Talk(npc.index, "You have also refused to be escorted by C.A.T."); } case 4: { - CPrintToChatAll("{rare}???{default}: 당신에게 들이닥칠 운명이 뭐든간에, 당신이 자초한 일이겠죠."); + Talker_Talk(npc.index, "Whatever fate meets you now is your own doing."); i_TalkDelayCheck = -1; } } @@ -927,19 +961,19 @@ stock void NpcTalker_Wave20Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신은 이 건물에서 나가달라는 제 요청을 고의로 무시했고,"); + Talker_Talk(npc.index, "You have willingly ignored my requests to vacate these premises."); } case 2: { - CPrintToChatAll("{rare}???{default}: C.A.T. 도 산산조각냈죠."); + Talker_Talk(npc.index, "You have also torn down C.A.T."); } case 3: { - CPrintToChatAll("{rare}???{default}: 그럼 이제 남은건 침입자를 가장 비살상적인 방법으로 쫓아내도록 설계된 로봇과 대면하는 것 뿐."); + Talker_Talk(npc.index, "A robot designed to kick trespassers out in the least lethal way concepted."); } case 4: { - CPrintToChatAll("{rare}???{default}: 이제 당신에게 무슨 일이 일어나든 제 알 바가 아닙니다."); + Talker_Talk(npc.index, "I do not care what happens to you at this point."); i_TalkDelayCheck = -1; } } @@ -950,19 +984,19 @@ stock void NpcTalker_Wave20Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신은 이 건물에서 나가달라는 제 요청을 수없이 무시했고,"); + Talker_Talk(npc.index, "You haven't left the laboratories despite my numerous requests."); } case 2: { - CPrintToChatAll("{rare}???{default}: C.A.T. 도 무자비하게 파괴했죠."); + Talker_Talk(npc.index, "You have destroyed C.A.T. mercilessly as well."); } case 3: { - CPrintToChatAll("{rare}???{default}: 그럼 이제 남은건 침입자를 가장 비살상적인 방법으로 쫓아내도록 설계된 로봇과 대면하는 것 뿐."); + Talker_Talk(npc.index, "A robot created to kick trespassers out in a non-lethal way."); } case 4: { - CPrintToChatAll("{rare}???{default}: 당신에게 무슨 일이 일어나든간에 제 탓하지 마시죠."); + Talker_Talk(npc.index, "Whatever happens to you now, it doesn't bother me."); i_TalkDelayCheck = -1; } } @@ -973,19 +1007,19 @@ stock void NpcTalker_Wave20Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신은 여기서 나가달라는 제 요청에도 불구하고 아직까지 연구소에 남아있군요."); + Talker_Talk(npc.index, "You have stayed in the laboratories, despite my requests for you to leave."); } case 2: { - CPrintToChatAll("{rare}???{default}: 그래, C.A.T. 에게 저지른 일도 잊을 수 없고."); + Talker_Talk(npc.index, "Let's also not forget what you did to C.A.T."); } case 3: { - CPrintToChatAll("{rare}???{default}: 프로그래밍에 예속된 존재도 그렇게 무자비하게 파괴하다니."); + Talker_Talk(npc.index, "You demolished it, even though it was just following its programming."); } case 4: { - CPrintToChatAll("{rare}???{default}: 뿌린대로 거둔다고 하잖아요."); + Talker_Talk(npc.index, "What goes around, comes around."); i_TalkDelayCheck = -1; } } @@ -1028,19 +1062,19 @@ stock void NpcTalker_Wave21Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 그러니까 A.R.I.S. 를 뛰어넘으셨군요."); + Talker_Talk(npc.index, "So, you made it past A.R.I.S."); } case 2: { - CPrintToChatAll("{rare}???{default}: 솔직히 말해서, 당신의 능력을 과소평가한 것 같습니다."); + Talker_Talk(npc.index, "I must say, I have definitely underestimated your capabilities."); } case 3: { - CPrintToChatAll("{rare}???{default}: 만약 계속 남아있겠다고 고집 피우신다면, 저도 어쩔 수 없이 직접 당신과 맞서야할 겁니다."); + Talker_Talk(npc.index, "If you are so adamant on staying here, I'll have no choice but to face-off against you myself."); } case 4: { - CPrintToChatAll("{rare}???{default}: 폭력을 쓰는건 별로지만... 당신이 저에게 선택권을 남겨주시지는 않는군요."); + Talker_Talk(npc.index, "I don't like to resort to violence...but you're not leaving me with the choice to decide."); i_TalkDelayCheck = -1; } } @@ -1051,19 +1085,19 @@ stock void NpcTalker_Wave21Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: A.R.I.S. 를 뛰어넘으셨군요."); + Talker_Talk(npc.index, "You've gotten past A.R.I.S."); } case 2: { - CPrintToChatAll("{rare}???{default}: 솔직히 말해서, 당신의 능력을 과소평가한 것 같습니다."); + Talker_Talk(npc.index, "I have to say, I heavily understimated what you're capable of."); } case 3: { - CPrintToChatAll("{rare}???{default}: 하지만 계속 이렇게 남아있겠다고 고집 피우신다면, 저도 어쩔 수 없이 직접 당신과 맞설겁니다."); + Talker_Talk(npc.index, "If you are so persistent on staying here, I'll have no choice but to face-off against you myself."); } case 4: { - CPrintToChatAll("{rare}???{default}: 폭력을 쓰는건 별로지만... 당신이 저에게 선택권을 남겨주시지는 않는군요."); + Talker_Talk(npc.index, "I hate to resort to violence...but you're not giving me much of a choice to choose."); i_TalkDelayCheck = -1; } } @@ -1074,19 +1108,19 @@ stock void NpcTalker_Wave21Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 방금 A.R.I.S. 를 넘으셨군요."); + Talker_Talk(npc.index, "You've managed to get past A.R.I.S."); } case 2: { - CPrintToChatAll("{rare}???{default}: 그래요, 솔직히 당신의 능력을 과소평가한 것 같습니다."); + Talker_Talk(npc.index, "I have most definitely underestimated what you're capable of."); } case 3: { - CPrintToChatAll("{rare}???{default}: 그렇지만 이런 식으로 계속 고집을 피우신다면, 저도 어쩔 수 없이 직접 당신과 맞서야합니다."); + Talker_Talk(npc.index, "If you are so determined to stay here, I'll have no choice but to face-off against you myself."); } case 4: { - CPrintToChatAll("{rare}???{default}: 폭력을 쓰는건 별로지만... 당신이 저에게 선택권을 남겨주시지는 않는군요."); + Talker_Talk(npc.index, "I hate to resort to violence...but you're not giving me much of a choice."); i_TalkDelayCheck = -1; } } @@ -1098,19 +1132,19 @@ stock void NpcTalker_Wave21Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 이제 와서 회개한다고 변하는 건 없지."); + Talker_Talk(npc.index, "Redemption is not earned by small acts of compassion."); } case 2: { - CPrintToChatAll("{rare}???{default}: 갑자기 마음이 바뀌었다고 해서 이전에 제가 당신이 이전에 저지른걸 잊을 리가 없습니다."); + Talker_Talk(npc.index, "Just because you had a sudden change of heart doesn't mean that I'll forget about what you did earlier."); } case 3: { - CPrintToChatAll("{rare}???{default}: 당신이 계속 여기에 머물겠다고 고집을 피우면, 저도 직접 당신과 맞설 수밖에 없고."); + Talker_Talk(npc.index, "If you are so adamant on staying here, I'll have no choice but to face-off against you myself."); } case 4: { - CPrintToChatAll("{rare}???{default}: 폭력을 쓰고 싶지는 않지만... 절박한 상황에서는 누군가 나서야하니까."); + Talker_Talk(npc.index, "I don't want to resort to violence...but when desperate times call for help, someone has to step in."); i_TalkDelayCheck = -1; } } @@ -1121,19 +1155,19 @@ stock void NpcTalker_Wave21Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신이 갑자기 마음을 바꾼다고 해서 제가 당신이 저지른 일을 잊을 거라고 생각하는 겁니까?"); + Talker_Talk(npc.index, "You think I'll forget about what you did just because you had a sudden change of heart?"); } case 2: { - CPrintToChatAll("{rare}???{default}: 그건 회개가 아니라 기만이라고."); + Talker_Talk(npc.index, "You are not tricking me with your attempt at redemption."); } case 3: { - CPrintToChatAll("{rare}???{default}: 당신이 계속 여기에 머물겠다고 고집을 피우면, 저도 직접 당신과 맞설 수밖에 없고."); + Talker_Talk(npc.index, "If you are so adamant on staying here, I'll have no choice but to face-off against you myself."); } case 4: { - CPrintToChatAll("{rare}???{default}: 폭력을 쓰고 싶지는 않지만... 절박한 상황에서는 누군가 나서야하니까."); + Talker_Talk(npc.index, "I don't want to resort to violence...but when desperate times call for help, someone has to take a stand."); i_TalkDelayCheck = -1; } } @@ -1145,19 +1179,19 @@ stock void NpcTalker_Wave21Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: ...진심으로?"); + Talker_Talk(npc.index, "...Are you serious?"); } case 2: { - CPrintToChatAll("{rare}???{default}: 걔가 당신에게 뭘 잘못했기에 분해해버린겁니까?"); + Talker_Talk(npc.index, "What did it do to you to warrant disassembling it?"); } case 3: { - CPrintToChatAll("{rare}???{default}: C.A.T. 은 살려보냈으면서 A.R.I.S. 는 그대로 파괴하다니?"); + Talker_Talk(npc.index, "You spared C.A.T. yet you couldn't spare A.R.I.S.?"); } case 4: { - CPrintToChatAll("{rare}???{default}: 나도 폭력을 쓰고 싶지는 않지만... 절박한 상황에서는 누군가 나서야하지."); + Talker_Talk(npc.index, "I don't want to resort to violence...but when desperate times call for help, someone has to step in."); i_TalkDelayCheck = -1; } } @@ -1168,19 +1202,19 @@ stock void NpcTalker_Wave21Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: ...진심으로?"); + Talker_Talk(npc.index, "...Are you for real?"); } case 2: { - CPrintToChatAll("{rare}???{default}: 걔가 당신에게 뭘 잘못했기에 파괴한 겁니까?"); + Talker_Talk(npc.index, "What did it do to you to warrant destroying it?"); } case 3: { - CPrintToChatAll("{rare}???{default}: C.A.T. 을 살려준 당시와 반응이 너무 다르잖아?"); + Talker_Talk(npc.index, "You left C.A.T. alone, yet you couldn't do the same for A.R.I.S.?"); } case 4: { - CPrintToChatAll("{rare}???{default}: 나도 폭력을 쓰고 싶지는 않지만... 위급한 상황에서는 누군가 맞서야만 하니까."); + Talker_Talk(npc.index, "I don't want to resort to violence...but when desperate times call for help, someone has to take a stand."); i_TalkDelayCheck = -1; } } @@ -1192,15 +1226,15 @@ stock void NpcTalker_Wave21Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: ..."); + Talker_Talk(npc.index, "..."); } case 2: { - CPrintToChatAll("{rare}???{default}: {crimson}그렇게 나오겠다 이거지."); + Talker_Talk(npc.index, "{crimson}I guess that's that, then."); } case 3: { - CPrintToChatAll("{rare}???{default}: {crimson}나중에 두고보자고."); + Talker_Talk(npc.index, "{crimson}I'll be on my way."); } case 4: { @@ -1247,19 +1281,19 @@ stock void NpcTalker_Wave25Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 분명히, 당신이 아무 이유 없이 이 장소에 오신건 아닐텐데요."); + Talker_Talk(npc.index, "You definitely didn't come here for no reason."); } case 2: { - CPrintToChatAll("{rare}???{default}: 그럼, 당신은 도대체 누가 보낸겁니까?"); + Talker_Talk(npc.index, "So, who sent you?"); } case 3: { - CPrintToChatAll("{rare}???{default}: {unique}엑스피돈사인{default}들이 보냈을거라는 짐작은 되는데."); + Talker_Talk(npc.index, "Were {unique}Expidonsans{default} not brave enough to reach out to us on their own?"); } case 4: { - CPrintToChatAll("{rare}???{default}: 어, 당신은 {unique}엑스피돈사{default}가 뭔지도 모르시겠군요."); + Talker_Talk(npc.index, "Maybe you don't even know what {unique}Expidonsa{default} is."); i_TalkDelayCheck = -1; } } @@ -1270,19 +1304,19 @@ stock void NpcTalker_Wave25Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 그래서, 당신에게 이 장소를 알려준건 누구입니까?"); + Talker_Talk(npc.index, "So, who told you about this place?"); } case 2: { - CPrintToChatAll("{rare}???{default}: 여긴 절대로 혼자 올 수 있는 곳이 아닌데요."); + Talker_Talk(npc.index, "You definitely didn't stumble here on your own."); } case 3: { - CPrintToChatAll("{rare}???{default}: {unique}엑스피돈사{default}의 요청인가요?"); + Talker_Talk(npc.index, "Was it {unique}Expidonsa{default}?"); } case 4: { - CPrintToChatAll("{rare}???{default}: 아니, 혹시 {unique}엑스피돈사{default}가 뭔지는 아십니까?"); + Talker_Talk(npc.index, "Do you even know what {unique}Expidonsa{default} is?"); i_TalkDelayCheck = -1; } } @@ -1294,19 +1328,19 @@ stock void NpcTalker_Wave25Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 이곳에 그냥 들어올 수 있을리가 없을텐데."); + Talker_Talk(npc.index, "You definitely didn't come here for no reason."); } case 2: { - CPrintToChatAll("{rare}???{default}: 그래서, 당신은 누가 보냈죠?"); + Talker_Talk(npc.index, "So, who sent you?"); } case 3: { - CPrintToChatAll("{rare}???{default}: 여기서 날뛰라고 요청한 자 말입니다."); + Talker_Talk(npc.index, "Someone who just wants to break stuff?"); } case 4: { - CPrintToChatAll("{rare}???{default}: 아니면 뭐 다른 목적이 있기라도 합니까?"); + Talker_Talk(npc.index, "What else would your purpose here be?"); i_TalkDelayCheck = -1; } } @@ -1318,19 +1352,19 @@ stock void NpcTalker_Wave25Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 이곳에 그냥 들어올 수 있을리가 없을텐데."); + Talker_Talk(npc.index, "You definitely didn't come here for no reason."); } case 2: { - CPrintToChatAll("{rare}???{default}: 그래서, 당신은 누가 보냈죠?"); + Talker_Talk(npc.index, "So, who sent you?"); } case 3: { - CPrintToChatAll("{rare}???{default}: 여기서 날뛰라고 요청한 자 말입니다?"); + Talker_Talk(npc.index, "Someone who just wants to break stuff?"); } case 4: { - CPrintToChatAll("{rare}???{default}: 아니면 뭐 다른 목적이 있기라도 합니까?"); + Talker_Talk(npc.index, "What else would your purpose here be?"); i_TalkDelayCheck = -1; } } @@ -1384,19 +1418,19 @@ stock void NpcTalker_Wave30Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 하지만 그들이 당신을 여기로 보낸 거라면..."); + Talker_Talk(npc.index, "But if they've sent you here... that can't be right..."); } case 2: { - CPrintToChatAll("{rare}???{default}: 이곳에 냉동 보관된 인간들이 많았던 이유가 설마..."); + Talker_Talk(npc.index, "Is this why they have so many cryogenically frozen humans?!"); } case 3: { - CPrintToChatAll("{rare}???{default}: 연구소로 인간들을 유인해서... 그렇게..."); + Talker_Talk(npc.index, "They just...lured them into the labs and-"); } case 4: { - CPrintToChatAll("{rare}???{default}: 아니, 잠깐만, 뭔가 잘못 됐어... 금방, 금방 돌아올게요."); + Talker_Talk(npc.index, "No no no no no, this can't be right, I- I'll be right back."); i_TalkDelayCheck = -1; } } @@ -1407,19 +1441,19 @@ stock void NpcTalker_Wave30Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 그들이 당신을 여기로 보낼리가 없을텐데, 만약 정말로 그런거라면,"); + Talker_Talk(npc.index, "They can't have sent you here, that can't be right..."); } case 2: { - CPrintToChatAll("{rare}???{default}: 이곳에 왜 그리 냉동 보관된 인간들이 많았는지 설명이 되겠군요."); + Talker_Talk(npc.index, "It would explain why they have so many cryogenically frozen humans though."); } case 3: { - CPrintToChatAll("{rare}???{default}: 연구소로 인간들을 유인해서... 그렇게-"); + Talker_Talk(npc.index, "They just...lured them into the labs and-"); } case 4: { - CPrintToChatAll("{rare}???{default}: 허... 아니야, 뭔가 이상해... 잠시만요..."); + Talker_Talk(npc.index, "No...no, that can't be right, I'll be right back."); i_TalkDelayCheck = -1; } } @@ -1431,15 +1465,15 @@ stock void NpcTalker_Wave30Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 그럼, 왜 아직도 여기에 있지?"); + Talker_Talk(npc.index, "If that's so, haven't you caused enough mayhem?"); } case 2: { - CPrintToChatAll("{rare}???{default}: 이미 충분히 날뛴거 아닌가? 대체 얼마나 날뛰어야 만족할건데?"); + Talker_Talk(npc.index, "How much destruction does the human race need to bring to be satisfied?"); } case 3: { - CPrintToChatAll("{rare}???{default}: {unique}엑스피돈사{default}가 당신을 위험 인물로 취급하는걸 따랐어야했는데."); + Talker_Talk(npc.index, "Maybe {unique}Expidonsa{default} was right about treating you like a threat."); i_TalkDelayCheck = -1; } } @@ -1451,15 +1485,15 @@ stock void NpcTalker_Wave30Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 그럼, 왜 아직도 여기에 있지?"); + Talker_Talk(npc.index, "If that's so, haven't you caused enough mayhem?"); } case 2: { - CPrintToChatAll("{rare}???{default}: 이미 충분히 날뛴거 아닌가? 대체 얼마나 날뛰어야 만족할건데?"); + Talker_Talk(npc.index, "How much destruction does the human race need to bring to be satisfied?"); } case 3: { - CPrintToChatAll("{rare}???{default}: {unique}엑스피돈사{default}가 당신을 위험 인물로 취급하는걸 따랐어야했는데."); + Talker_Talk(npc.index, "Maybe {unique}Expidonsa{default} was right about treating you like a threat."); i_TalkDelayCheck = -1; } } @@ -1519,15 +1553,15 @@ stock void NpcTalker_Wave31Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 방금 도대체 그게 뭐하는 로봇이었는지는 몰라도, 이 차원문과 관련이 있는 것 같습니다."); + Talker_Talk(npc.index, "I'm not exactly sure what that thing was...but it seemed to be related with these Portal Gates."); } case 2: { - CPrintToChatAll("{rare}???{default}: 이 연구소와 관련도 없고요. 그대로 두면 그 정체를 알아낼 수 있겠군요."); + Talker_Talk(npc.index, "It doesn't share any origins with the lab. Leaving it intact was probably the right choice."); } case 3: { - CPrintToChatAll("{rare}???{default}: 음, 그럼 다시 조사를 시작해볼까요."); + Talker_Talk(npc.index, "Well, I'll be going back to doing my research now."); i_TalkDelayCheck = -1; } } @@ -1538,15 +1572,15 @@ stock void NpcTalker_Wave31Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 방금 그 로봇... 뭐였죠? 꼭 마치 차원문과 연결된 듯한 모습이었는데."); + Talker_Talk(npc.index, "That thing...what was that? It appears to be tied with the Portal Gates."); } case 2: { - CPrintToChatAll("{rare}???{default}: 게다가 또 이 연구소와 관련이 없는 존재였고. 꼭 마치 무언가를 찾으러 온 것 같았어요."); + Talker_Talk(npc.index, "No correlation with the laboratories either. Looks like it was searching for something."); } case 3: { - CPrintToChatAll("{rare}???{default}: 아, 좀 이상한 일이긴 해도, 다시 조사를 시작해야겠군요."); + Talker_Talk(npc.index, "As strange as that was, I have to get back to my research."); i_TalkDelayCheck = -1; } } @@ -1558,15 +1592,15 @@ stock void NpcTalker_Wave31Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 방금 파괴하신 그거 말인데... 도대체 뭔지 알 수가 없네요."); + Talker_Talk(npc.index, "That thing that you just destroyed...I don't know what it is, or rather what it was."); } case 2: { - CPrintToChatAll("{rare}???{default}: 그 물체가 파괴되면서 저 차원문에 영향을 준 것 같습니다. 이전보다 더 불안정해졌어요."); + Talker_Talk(npc.index, "Its destruction appears to have affected the Portal Gates. They're more unstable now."); } case 3: { - CPrintToChatAll("{rare}???{default}: 뭐, 이건 당신 책임이니까요. 전 계속 조사에 집중해야겠습니다."); + Talker_Talk(npc.index, "Well, this is on you. I'm going back to my research now."); i_TalkDelayCheck = -1; } } @@ -1577,15 +1611,15 @@ stock void NpcTalker_Wave31Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 그 로봇... 그 기원은 저도 모르겠습니다. 당신이 그걸 파괴해버렸기 때문에 그것의 정체를 더 알 수 없게 되었지만요."); + Talker_Talk(npc.index, "That robot...its origins are unknown to me. Not that I'll know what they are with what you did."); } case 2: { - CPrintToChatAll("{rare}???{default}: 제가 알아낸 바로는, 방금 그게 저 차원문들과 연결되어 있다는 겁니다. 지금은 상태가 매우 불안정해졌어요."); + Talker_Talk(npc.index, "What I do know is that it was linked to these Portal Gates. They are precarious now."); } case 3: { - CPrintToChatAll("{rare}???{default}: 뭐, 이건 당신이 선택한 행동이니까요. 전 계속 조사에 집중해야겠습니다."); + Talker_Talk(npc.index, "You chose to do this. I'm going back to my research now."); i_TalkDelayCheck = -1; } } @@ -1648,39 +1682,39 @@ stock void NpcTalker_Wave36Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 제가 틀렸었군요."); + Talker_Talk(npc.index, "I was wrong."); } case 2: { - CPrintToChatAll("{rare}???{default}: 그러니까, {unique}엑스피돈사인{default}들이 당신을 파견했을 거라는 예상이 틀렸어요."); + Talker_Talk(npc.index, "Well, wrong about you being sent by {unique}Expidonsans{default}."); } case 3: { - CPrintToChatAll("{rare}???{default}: 현재 {unique}엑스피돈사{default}의 실체를 제대로 모르고 있었으니까요."); + Talker_Talk(npc.index, "I wasn't aware of {unique}Expidonsa's{default} full picture."); } case 4: { - CPrintToChatAll("{rare}???{default}: 그래요... 그들도 윤리적으로는 그다지 좋진 않았군요."); + Talker_Talk(npc.index, "It appears that they aren't the best when it comes to being ethical."); } case 5: { - CPrintToChatAll("{rare}???{default}: 그리고, 당신의 엠블럼도 역검색을 해봤습니다."); + Talker_Talk(npc.index, "I have also reverse-searched your emblems."); } case 6: { - CPrintToChatAll("{rare}???{default}: 당신은 일종의 용병이신거죠?"); + Talker_Talk(npc.index, "You are some sort of mercēnārius, yeah?"); } case 7: { - CPrintToChatAll("{rare}???{default}: 누군가에게 고용되어 이곳을 약탈하려는 것 같군요."); + Talker_Talk(npc.index, "This would mean that you've been hired by someone to loot this place."); } case 8: { - CPrintToChatAll("{rare}???{default}: 유감입니다만, 그렇게 둘 수는 없습니다."); + Talker_Talk(npc.index, "I'm afraid I can not let that happen."); } case 9: { - CPrintToChatAll("{rare}???{default}: 하지만 용병들도 급여를 받고 하는 일이니까요. 당신도 목적을 달성할 때까지는 여기에 계속 머무시겠죠."); + Talker_Talk(npc.index, "But since mercenaries are paid for their work, I have no reason to assume that you intend on stopping."); i_TalkDelayCheck = -1; } } @@ -1691,39 +1725,39 @@ stock void NpcTalker_Wave36Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 제가 착각했습니다."); + Talker_Talk(npc.index, "I was mistaken."); } case 2: { - CPrintToChatAll("{rare}???{default}: 네. {unique}엑스피돈사{default}에서 당신을 파견했을 거라는 예상은 틀렸죠."); + Talker_Talk(npc.index, "Well, mistaken about you being sent by {unique}Expidonsa{default}."); } case 3: { - CPrintToChatAll("{rare}???{default}: {unique}엑스피돈사{default}의 전체 상황을 제대로 모르고 있었거든요."); + Talker_Talk(npc.index, "I wasn't aware of {unique}Expidonsa's{default} full history."); } case 4: { - CPrintToChatAll("{rare}???{default}: 네, 뭐... 그들도 윤리적인 면에서는 그다지 좋진 않았더군요."); + Talker_Talk(npc.index, "It appears that they aren't the best when it comes to being ethical."); } case 5: { - CPrintToChatAll("{rare}???{default}: 그리고, 당신의 엠블럼도 역검색을 해봤습니다."); + Talker_Talk(npc.index, "I have also reverse-searched your emblems."); } case 6: { - CPrintToChatAll("{rare}???{default}: 당신은 용병이 맞으시죠?"); + Talker_Talk(npc.index, "You are some sort of mercenarye, is that correct?"); } case 7: { - CPrintToChatAll("{rare}???{default}: 누군가에게 고용되어 이곳을 약탈하려는 것 같군요."); + Talker_Talk(npc.index, "This would mean that you've been hired by someone to loot this place."); } case 8: { - CPrintToChatAll("{rare}???{default}: 유감스럽게도, 그렇게 둘 수는 없습니다."); + Talker_Talk(npc.index, "I'm afraid I can not let that happen."); } case 9: { - CPrintToChatAll("{rare}???{default}: 하지만 용병들도 급여를 받고 하는 일이니까요. 당신도 목적을 달성할 때까지는 여기에 계속 머무시겠죠."); + Talker_Talk(npc.index, "But since mercenaries are paid for their work, I have no reason to assume that you intend on stopping."); i_TalkDelayCheck = -1; } } @@ -1735,11 +1769,11 @@ stock void NpcTalker_Wave36Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신이 여기에 온 목적은 모르더라도, 내가 개입해야겠어."); + Talker_Talk(npc.index, "I'm not sure what your goal here is, but I will have to intervene."); } case 2: { - CPrintToChatAll("{rare}???{default}: 당신이 여기서 더 날뛰어서 대혼란을 불러오게 둘 수는 없거든."); + Talker_Talk(npc.index, "I can not allow you to bring more mayhem."); i_TalkDelayCheck = -1; } } @@ -1751,11 +1785,11 @@ stock void NpcTalker_Wave36Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신이 여기에 온 목적은 모르더라도, 내가 개입해야겠어."); + Talker_Talk(npc.index, "I'm not sure what your goal here is, but I will have to intervene."); } case 2: { - CPrintToChatAll("{rare}???{default}: 당신이 여기서 더 날뛰어서 대혼란을 불러오게 둘 수는 없거든."); + Talker_Talk(npc.index, "I can not allow you to bring more mayhem."); i_TalkDelayCheck = -1; } } @@ -1808,11 +1842,11 @@ stock void NpcTalker_Wave37Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 당신이 이 장비들을 가져가는 걸 허락할 수 없습니다."); + Talker_Talk(npc.index, "I can not let you get any of this gear."); } case 2: { - CPrintToChatAll("{rare}???{default}: 만약 이것들이 사악한 자들의 손에 들어간다면, 그 여파가 재앙에 가까워질 겁니다."); + Talker_Talk(npc.index, "If it were to fall into the wrong hands, the repercussions could be catastrophic."); i_TalkDelayCheck = -1; } } @@ -1823,11 +1857,11 @@ stock void NpcTalker_Wave37Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 그 장비들은 가져갈 수 없습니다. 제가 허용 못 해요."); + Talker_Talk(npc.index, "You can not get any of this gear. I can't allow that."); } case 2: { - CPrintToChatAll("{rare}???{default}: 사악한 자들이 그 장비들을 입수한다면... 우리 세계에 어떠한 영향을 끼칠지 알 수 없습니다."); + Talker_Talk(npc.index, "If anyone with the wrong plans was to get their hands on this...the fate of our world could be at risk."); i_TalkDelayCheck = -1; } } @@ -1903,11 +1937,11 @@ stock void NpcTalker_Wave38Talk(Talker npc) { case 1: { - CPrintToChatAll("{rare}???{default}: 아무래도 제가 개입해야겠군요."); + Talker_Talk(npc.index, "I have to intervene."); } case 2: { - CPrintToChatAll("{rare}???{default}: 유감입니다."); + Talker_Talk(npc.index, "I'm sorry."); i_TalkDelayCheck = -1; } } @@ -1946,4 +1980,19 @@ stock void NpcTalker_Wave38Talk(Talker npc) } } } +} + +static void Talker_GatherWavesetCompletion() +{ + for (int client = 1; client <= MaxClients; client++) + { + if (!IsClientInGame(client) || IsFakeClient(client) || AprilFoolsIconOverride() == 1) + { + // Also specifically get past this if the steam happy modifier is on + b_DoNotHideName[client] = false; + continue; + } + + b_DoNotHideName[client] = Items_HasNamedItem(client, "Expidonsan Research Card"); + } } \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_aris.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_aris.sp index b386b1c3f7..4cd2251a84 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_aris.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_aris.sp @@ -546,20 +546,34 @@ methodmap ARIS < CClotBody Citizen_MiniBossSpawn(); npc.StartPathing(); - switch(GetRandomInt(0,2)) - { - case 0: - CPrintToChatAll("{rare}A.R.I.S.{default}: 4R1S ㄷㅐㄱㅣ 중."); - case 1: - CPrintToChatAll("{rare}A.R.I.S.{default}: 4R1S = 출동 ㅈㅜㄴㅂㅣ 완료"); - case 2: - CPrintToChatAll("{rare}A.R.I.S.{default}: 활ㅅㅓㅇ화, 진압 ㅅㅣ작"); - } + CreateTimer(0.2, ARIS_Timer_IntroMessage, EntIndexToEntRef(npc.index)); return npc; } } +static void ARIS_Timer_IntroMessage(Handle timer, int ref) +{ + int entity = EntRefToEntIndex(ref); + if (ref == INVALID_ENT_REFERENCE || b_NpcHasDied[entity]) + return; + + switch(GetRandomInt(0,2)) + { + case 0: + ARIS_Talk(entity, "4R1S R3P0R71N6 F0R DU7Y"); + case 1: + ARIS_Talk(entity, "4R1S = 10CK3D 4ND L04D3D"); + case 2: + ARIS_Talk(entity, "0NL1N3, 455UM1N6 MY FUNC710NS"); + } +} + +static void ARIS_Talk(int entity, const char[] message) +{ + PrintNPCMessageWithPrefixes(entity, "rare", message); +} + public void ARIS_ClotThink(int iNPC) { ARIS npc = view_as(iNPC); @@ -651,11 +665,11 @@ public void ARIS_ClotThink(int iNPC) switch(GetRandomInt(0,2)) { case 0: - CPrintToChatAll("{rare}A.R.I.S.{default}: ㅅㅜ류탄 ㅌㅜ척!"); + ARIS_Talk(npc.index, "F1R3 1N 7H3 H0L3"); case 1: - CPrintToChatAll("{rare}A.R.I.S.{default}: 엄ㅍㅖ하ㄹㅏ!"); + ARIS_Talk(npc.index, "DUCK 4ND C0V3R"); case 2: - CPrintToChatAll("{rare}A.R.I.S.{default}: 로ㅋㅔㅅ!"); + ARIS_Talk(npc.index, "R0CK37S!"); } npc.PlayRocketReadyingSound(); } @@ -1207,11 +1221,11 @@ static void ARIS_DropMelee(ARIS npc) switch(GetRandomInt(0,2)) { case 0: - CPrintToChatAll("{rare}A.R.I.S.{default}: 방어를 ㄷㅓ 증강ㅎㅐ야한다"); + ARIS_Talk(npc.index, "D3P10Y1N6 R3S1574N7 M345UR3S"); case 1: - CPrintToChatAll("{rare}A.R.I.S.{default}: ㅈㅓ항력 보강 필요"); + ARIS_Talk(npc.index, "R3S1574NC3S 0NL1N3"); case 2: - CPrintToChatAll("{rare}A.R.I.S.{default}: ㅂㅏㅇ어장 작동!"); + ARIS_Talk(npc.index, "D3F3NS3 D3PL0Y3D"); } } if(npc.m_iCurrentMelee == ARIS_MELEE_DAMAGE) @@ -1219,11 +1233,11 @@ static void ARIS_DropMelee(ARIS npc) switch(GetRandomInt(0,2)) { case 0: - CPrintToChatAll("{rare}A.R.I.S.{default}: 자가 ㄱㅏㅇ화 시작"); + ARIS_Talk(npc.index, "8UFF3R1N6 D4M463"); case 1: - CPrintToChatAll("{rare}A.R.I.S.{default}: 공격력 증강ㄱㅣ ㄱㅏ동중"); + ARIS_Talk(npc.index, "D4M463 800S73R D3PL0Y3D"); case 2: - CPrintToChatAll("{rare}A.R.I.S.{default}: 공격ㄹㅕㄱ : 강ㅎㅗㅏ"); + ARIS_Talk(npc.index, "D4M463 = 8UFF3D"); } } if(npc.m_iCurrentMelee == ARIS_MELEE_SPEED) @@ -1231,11 +1245,11 @@ static void ARIS_DropMelee(ARIS npc) switch(GetRandomInt(0,2)) { case 0: - CPrintToChatAll("{rare}A.R.I.S.{default}: 가ㅅㅗㄱ기 ㄱㅏ동중"); + ARIS_Talk(npc.index, "V3L0C17Y R151N6"); case 1: - CPrintToChatAll("{rare}A.R.I.S.{default}: ㅎㅏ늘로 돌ㅇㅏ왔다"); + ARIS_Talk(npc.index, "4CC3L3R4710N 1NCR34S3D"); case 2: - CPrintToChatAll("{rare}A.R.I.S.{default}: 공ㄱㅣ역학 분산 ㄱㅏ동"); + ARIS_Talk(npc.index, "M0M3N7UM CH4N63"); } } } @@ -1620,7 +1634,7 @@ static bool ARIS_LoseConditions(int iNPC) npc.SetPlaybackRate(1.0); npc.m_flNextDeathState = GetGameTime() + 1.7; - CPrintToChatAll("{rare}A.R.I.S.{default}: ㅅㅣㅁ각한 ㅍㅣㅎㅐ 감지"); + ARIS_Talk(npc.index, "3N0UGH D4M463 5U5741N3D"); } case 1: @@ -1647,13 +1661,13 @@ static bool ARIS_LoseConditions(int iNPC) switch (GetURandomInt() % 4) { case 0: - CPrintToChatAll("{rare}A.R.I.S.{default}: ㄷㅗ주!"); + ARIS_Talk(npc.index, "3J3C71N6!"); case 1: - CPrintToChatAll("{rare}A.R.I.S.{default}: 후퇴! ㅇㅓㅅㅓ!"); + ARIS_Talk(npc.index, "480R71N6 M15510N!"); case 2: - CPrintToChatAll("{rare}A.R.I.S.{default}: 재보ㄱㅏㅇ 필요!"); + ARIS_Talk(npc.index, "R37URN1N6 70 P057!"); case 3: - CPrintToChatAll("{rare}A.R.I.S.{default}: 4R15 = ㅌㅚ장!"); + ARIS_Talk(npc.index, "4R15 = 0U7!"); } } @@ -1687,7 +1701,7 @@ static bool ARIS_LoseConditions(int iNPC) { func_NPCThink[npc.index] = INVALID_FUNCTION; - CPrintToChatAll("{rare}A.R.I.S.{default}: 임ㅁㅜ 완료. 원위ㅊㅣ."); + ARIS_Talk(npc.index, "M15510N 5UCC355FUL, D3SP173 MY C4P481L1713S"); return true; } @@ -1695,7 +1709,7 @@ static bool ARIS_LoseConditions(int iNPC) { ForcePlayerLoss(); RaidBossActive = INVALID_ENT_REFERENCE; - CPrintToChatAll("{rare}A.R.I.S.{default}: 적ㄱㅜㄴ의 도ㅈㅜ 감지. 임무 완료"); + ARIS_Talk(npc.index, "7H3 3N3M13S H4V3 F0RF317, M15510N 5UCC355FUL"); func_NPCThink[npc.index] = INVALID_FUNCTION; return true; } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_cat.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_cat.sp index df792aafce..af2d27f9bc 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_cat.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_cat.sp @@ -117,7 +117,7 @@ void CAT_OnMapStart_NPC() NPCData data; strcopy(data.Name, sizeof(data.Name), "C.A.T."); strcopy(data.Plugin, sizeof(data.Plugin), "npc_cat"); - strcopy(data.Icon, sizeof(data.Icon), "cat"); + strcopy(data.Icon, sizeof(data.Icon), "cat_new"); data.IconCustom = true; data.Flags = MVM_CLASS_FLAG_MINIBOSS|MVM_CLASS_FLAG_ALWAYSCRIT; data.Category = Type_Aperture; @@ -421,20 +421,34 @@ methodmap CAT < CClotBody Citizen_MiniBossSpawn(); npc.StartPathing(); - switch(GetRandomInt(0,2)) - { - case 0: - CPrintToChatAll("{rare}C.A.T.{default}: 침입자 대응책 준비 완료."); - case 1: - CPrintToChatAll("{rare}C.A.T.{default}: C.A.T. 전투 준비."); - case 2: - CPrintToChatAll("{rare}C.A.T.{default}: 시스템 파워 재가동."); - } + CreateTimer(0.2, CAT_Timer_IntroMessage, EntIndexToEntRef(npc.index)); return npc; } } +static void CAT_Timer_IntroMessage(Handle timer, int ref) +{ + int entity = EntRefToEntIndex(ref); + if (ref == INVALID_ENT_REFERENCE || b_NpcHasDied[entity]) + return; + + switch(GetRandomInt(0,2)) + { + case 0: + CAT_Talk(entity, "CONTROL AGAINST TRESPASSERS, NOW ONLINE"); + case 1: + CAT_Talk(entity, "C.A.T. HAS BEEN ENGAGED"); + case 2: + CAT_Talk(entity, "SYSTEM POWER-UP COMPLETE"); + } +} + +static void CAT_Talk(int entity, const char[] message) +{ + PrintNPCMessageWithPrefixes(entity, "rare", message); +} + public void CAT_ClotThink(int iNPC) { CAT npc = view_as(iNPC); @@ -728,15 +742,15 @@ static void OrbSpam_Ability_ReadyUp(CAT npc) { case 0: { - CPrintToChatAll("{rare}C.A.T.{default}: 입자 방사기 {unique}가동 준비 완료"); + CAT_Talk(npc.index, "PARTICLE RADIATOR IS {unique}READY"); } case 1: { - CPrintToChatAll("{rare}C.A.T.{default}: 입자 분산 {crimson}준비 완료"); + CAT_Talk(npc.index, "PREPARING FOR PARTICLE {crimson}DISPERSAL"); } case 2: { - CPrintToChatAll("{rare}C.A.T.{default}: 입자 방사기 준비 완료. {crimson}예열 중"); + CAT_Talk(npc.index, "PARTICLES ARE DONE {crimson}WARMING UP"); } } } @@ -797,15 +811,15 @@ static void OrbSpam_Ability_End(CAT npc, bool yap = true) { case 0: { - CPrintToChatAll("{rare}C.A.T.{default}: 입자 방사기 {azure}냉각 중"); + CAT_Talk(npc.index, "PARTICLE RADIATOR IS {azure}COOLING-OFF"); } case 1: { - CPrintToChatAll("{rare}C.A.T.{default}: 입자 분산 {azure}성공적"); + CAT_Talk(npc.index, "PARTICLE DISPERSAL {azure}ACCOMPLISHED"); } case 2: { - CPrintToChatAll("{rare}C.A.T.{default}: 입자력 {crimson}제거됨{default}... {azure}지금은."); + CAT_Talk(npc.index, "PARTICLES ARE {crimson}GONE{default}... {azure}FOR NOW"); } } } @@ -870,7 +884,7 @@ bool CAT_timeBased(int iNPC) AcceptEntityInput(npc.m_iWearable1, "Enable"); npc.m_flBeginTimeWarp = 0.0; - CPrintToChatAll("{rare}C.A.T.{default}: ...성공적임"); + CAT_Talk(npc.index, "...ACTION SUCCESSFUL"); float vecPos[3]; GetAbsOrigin(npc.index, vecPos); @@ -961,15 +975,15 @@ static void SelfDegradation_Ability_Start(CAT npc, bool yap = true) { case 0: { - CPrintToChatAll("{rare}C.A.T.{default}: 자가 붕괴 시작."); + CAT_Talk(npc.index, "INITIATING SELF-DEGRADATION"); } case 1: { - CPrintToChatAll("{rare}C.A.T.{default}: 자가 붕괴 진행 중..."); + CAT_Talk(npc.index, "SELF-DEGRADATION IN PROCESS..."); } case 2: { - CPrintToChatAll("{rare}C.A.T.{default}: 자가 붕괴 모드로 전환 중."); + CAT_Talk(npc.index, "SWITCHING TO SELF-DEGRADATION MODE"); } } } @@ -1019,15 +1033,15 @@ static void SelfDegradation_Ability_Activate(CAT npc, bool yap = true) { case 0: { - CPrintToChatAll("{rare}C.A.T.{default}: 자가 붕괴 모드 {unique}가동 완료."); + CAT_Talk(npc.index, "SELF-DEGRADATION MODE IS {unique}ONLINE"); } case 1: { - CPrintToChatAll("{rare}C.A.T.{default}: 자가 붕괴: {unique}준비 완료"); + CAT_Talk(npc.index, "SELF-DEGRADATION: {unique}ACTIVATED"); } case 2: { - CPrintToChatAll("{rare}C.A.T.{default}: 자가 붕괴 모드 가동, {unique}성공적"); + CAT_Talk(npc.index, "SELF-DEGRADATION POWER UP, {unique}COMPLETE"); } } } @@ -1059,15 +1073,15 @@ static void SelfDegradation_Ability_Deactivate(CAT npc, bool yap = true) { case 0: { - CPrintToChatAll("{rare}C.A.T.{default}: 자가 붕괴 모드 {crimson}비활성화."); + CAT_Talk(npc.index, "SELF-DEGRADATION MODE IS {crimson}OFFLINE"); } case 1: { - CPrintToChatAll("{rare}C.A.T.{default}: 자가 붕괴 모드: {crimson}종료됨."); + CAT_Talk(npc.index, "SELF-DEGRADATION: {crimson}DEACTIVATED"); } case 2: { - CPrintToChatAll("{rare}C.A.T.{default}: 자가 붕괴 모드 {crimson}강제 종료됨."); + CAT_Talk(npc.index, "SELF-DEGRADATION IS {crimson}SHUTTING DOWN"); } } } @@ -1112,7 +1126,7 @@ public Action CAT_OnTakeDamage(int victim, int &attacker, int &inflictor, float npc.AddGesture("ACT_MP_STUN_BEGIN"); npc.SetActivity("ACT_MP_STUN_MIDDLE"); - CPrintToChatAll("{rare}C.A.T.{default}: {unique}정신 왜곡 {default}메커니즘 활성화 중..."); + CAT_Talk(npc.index, "ENABLING {unique}MIND WARP {default}MECHANISMS..."); npc.Anger = true; npc.m_flBeginTimeWarp = GetGameTime(npc.index) + 2.0; @@ -1224,7 +1238,7 @@ static void CAT_Weapon_Lines(CAT npc, int client) if(valid) { - CPrintToChatAll("{rare}C.A.T.{default}: %s", Text_Lines); + CAT_Talk(npc.index, Text_Lines); fl_said_player_weaponline_time[npc.index] = GameTime + GetRandomFloat(15.0, 22.0); b_said_player_weaponline[client] = true; } @@ -1319,9 +1333,9 @@ static bool CAT_LoseConditions(int iNPC) switch (GetURandomInt() % 2) { case 0: - CPrintToChatAll("{rare}C.A.T.{default}: 과부하 진ㅎ-"); + CAT_Talk(npc.index, "OVERHEATING PROTOC-"); case 1: - CPrintToChatAll("{rare}C.A.T.{default}: 자폭 모드 진ㅎ-"); + CAT_Talk(npc.index, "INITIATING SELF-DES-"); } npc.m_flDeathAnim = GetGameTime() + 1.0; @@ -1347,7 +1361,7 @@ static bool CAT_LoseConditions(int iNPC) { func_NPCThink[npc.index] = INVALID_FUNCTION; - CPrintToChatAll("{rare}C.A.T.{default}: 이미 이긴 전투임."); + CAT_Talk(npc.index, "BY THE WORDS OF THE ONE AND ONLY GLORIOUS RACE; THERE CAN BE ONLY ONE"); return true; } @@ -1355,7 +1369,7 @@ static bool CAT_LoseConditions(int iNPC) { ForcePlayerLoss(); RaidBossActive = INVALID_ENT_REFERENCE; - CPrintToChatAll("{rare}C.A.T.{default}: 네 무기를 버리고 항복한 뒤에 날 따라올 것."); + CAT_Talk(npc.index, "SURRENDER YOUR WEAPONS AND COME WITH ME"); func_NPCThink[npc.index] = INVALID_FUNCTION; return true; } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_chimera.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_chimera.sp index 5daeabb164..c6a3b6f856 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_chimera.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_chimera.sp @@ -106,7 +106,7 @@ void CHIMERA_OnMapStart_NPC() NPCData data; strcopy(data.Name, sizeof(data.Name), "C.H.I.M.E.R.A."); strcopy(data.Plugin, sizeof(data.Plugin), "npc_chimera"); - strcopy(data.Icon, sizeof(data.Icon), "chimera"); + strcopy(data.Icon, sizeof(data.Icon), "chimera_new"); data.IconCustom = true; data.Flags = MVM_CLASS_FLAG_MINIBOSS|MVM_CLASS_FLAG_ALWAYSCRIT; data.Category = Type_Aperture; @@ -436,15 +436,7 @@ methodmap CHIMERA < CClotBody Citizen_MiniBossSpawn(); npc.StartPathing(); - switch(GetRandomInt(0,2)) - { - case 0: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 잘 왔다, 죄인들아!"); - case 1: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 해보자고."); - case 2: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 목표 발견."); - } + CreateTimer(0.2, CHIMERA_Timer_IntroMessage, EntIndexToEntRef(npc.index)); npc.m_iWearable1 = npc.EquipItem("head", "models/workshop/player/items/medic/tw_medibot_chariot/tw_medibot_chariot.mdl", _, skin); npc.m_iWearable2 = npc.EquipItem("head", "models/workshop/player/items/medic/sum24_hazardous_vest/sum24_hazardous_vest.mdl", _, skin); @@ -474,6 +466,28 @@ methodmap CHIMERA < CClotBody } } +static void CHIMERA_Timer_IntroMessage(Handle timer, int ref) +{ + int entity = EntRefToEntIndex(ref); + if (ref == INVALID_ENT_REFERENCE || b_NpcHasDied[entity]) + return; + + switch(GetRandomInt(0,2)) + { + case 0: + CHIMERA_Talk(entity, "WELCOME, WELCOME SINNERS!"); + case 1: + CHIMERA_Talk(entity, "LET'S BEGIN"); + case 2: + CHIMERA_Talk(entity, "ENGAGING THE TARGETS"); + } +} + +static void CHIMERA_Talk(int entity, const char[] message) +{ + PrintNPCMessageWithPrefixes(entity, "darkblue", message); +} + public void CHIMERA_ClotThink(int iNPC) { CHIMERA npc = view_as(iNPC); @@ -714,7 +728,7 @@ public Action CHIMERA_OnTakeDamage(int victim, int &attacker, int &inflictor, fl if((ReturnEntityMaxHealth(npc.index) / 2) >= (GetEntProp(npc.index, Prop_Data, "m_iHealth") - RoundToNearest(damage))) { npc.PlayAdaptStart(); - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 비정상적인 손상 감지됨. {crimson}[피해 적응 모드] 진입 중."); + CHIMERA_Talk(npc.index, "TOO MUCH DAMAGE SUSTAINED, INITIATING {crimson}[DAMAGE ADAPTABILITY MODE]"); float VecSelfNpcabs[3]; GetEntPropVector(npc.index, Prop_Data, "m_vecAbsOrigin", VecSelfNpcabs); TE_Particle("teleported_mvm_bot", VecSelfNpcabs, _, _, npc.index, 1, 0); npc.Anger = true; @@ -787,13 +801,13 @@ bool CHIMERA_timeBased(int iNPC) //do both abilities twice. if(npc.m_flDamageCharge < 0.0) { - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 적응 완료. {crimson}원거리{default} 피해가 가장 위협적인 상황이다."); + CHIMERA_Talk(npc.index, "ADAPTING COMPLETED, {crimson}RANGED{default} IS CONSIDERED THE MOST DANGEROUS."); npc.m_flRangedArmor = 0.75; npc.m_flMeleeArmor = 1.35; } else { - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 적응 완료. {crimson}근접{default} 피해가 가장 위협적인 상황이다."); + CHIMERA_Talk(npc.index, "ADAPTING COMPLETED, {crimson}MELEE{default} IS CONSIDERED THE MOST DANGEROUS."); npc.m_flRangedArmor = 1.35; npc.m_flMeleeArmor = 0.75; } @@ -870,13 +884,13 @@ bool CHIMERA_LoseConditions(int iNPC) switch (GetURandomInt() % 4) { case 0: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 이게 고통이란건가?"); + CHIMERA_Talk(npc.index, "IT RECOILS IN PAIN?"); case 1: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 도움이 필요하다. 오류? 오류? 오류???"); + CHIMERA_Talk(npc.index, "I NEED A DISTRACTION. ERROR? ERROR? ERROR?"); case 2: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 여기 너무 뜨거운 것 같은데..."); + CHIMERA_Talk(npc.index, "THIS PLACE IS TOO HOT FOR ME."); case 3: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 내가 여기에 와서는 안 됐었나?"); + CHIMERA_Talk(npc.index, "I MIGHT NOT BE WELCOME HERE?"); } } @@ -900,14 +914,14 @@ bool CHIMERA_LoseConditions(int iNPC) { func_NPCThink[npc.index] = INVALID_FUNCTION; - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 지금의 내 모습을 본다면, 자이베리아는 분명 자랑스러워할 것이야."); + CHIMERA_Talk(npc.index, "ZIBERIA WOULD BE PROUD, PROVIDED THEY WERE TO SEE ME NOW."); return true; } if(IsValidEntity(RaidBossActive) && RaidModeTime < GetGameTime()) { ForcePlayerLoss(); RaidBossActive = INVALID_ENT_REFERENCE; - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 선택해라. 생존? 아니면 죽음?"); + CHIMERA_Talk(npc.index, "TIME TO CHOOSE. LIFE, OR DEATH?"); func_NPCThink[npc.index] = INVALID_FUNCTION; return true; } @@ -1002,15 +1016,15 @@ bool CHIMERA_RefractedSniper(int iNPC) switch(GetRandomInt(0,4)) { case 0: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 폭풍을 맞이하리라."); + CHIMERA_Talk(npc.index, "BREWING UP A STORM"); case 1: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 도망가면 네 팀에게 도움이 되겠나?"); + CHIMERA_Talk(npc.index, "KEEP RUNNING, THAT'LL HELP"); case 2: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 다 같이 시원해져보자고."); + CHIMERA_Talk(npc.index, "LET'S COOL THINGS DOWN"); case 3: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 멍청한 필멸자들, 날 막을 수 있을거라고 생각해?"); + CHIMERA_Talk(npc.index, "FOOLISH MORTALS, YOU THINK YOU CAN STOP ME?"); case 4: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 이제 죽어라! 나도 전력을 다 하고 있다고!"); + CHIMERA_Talk(npc.index, "DIE ALREADY, I'M GIVING IT ALL ALREADY!"); } if(npc.m_flSpawnSnipers == 1.0) npc.m_flSpawnSnipers = GetGameTime(npc.index) + 10.0; @@ -1029,15 +1043,15 @@ bool CHIMERA_RefractSpawners(int iNPC) switch(GetRandomInt(0,3)) { case 0: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 네 뒤에 바짝 붙어가주마."); + CHIMERA_Talk(npc.index, "LOOK OUT, I'M RIGHT BEHIND YOU"); case 1: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 도망가는걸 멈추면 나도 그만 쏴줄게. 공평하지?"); + CHIMERA_Talk(npc.index, "YOU STOP RUNNING AND I'LL STOP FIRING, THAT SEEMS FAIR"); case 2: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 가만히 있으면 더 빨리 끝날텐데!"); + CHIMERA_Talk(npc.index, "THIS WOULD GO A LOT FASTER IF YOU'D STAY STILL"); case 3: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 도망가지마라!"); + CHIMERA_Talk(npc.index, "DON'T RUN! DON'T RUN!"); case 4: - CPrintToChatAll("{darkblue}C.H.I.M.E.R.A.{default}: 예정된 파멸을 피하려 하다니!"); + CHIMERA_Talk(npc.index, "YOU'RE JUST DELAYING THE INEVITABLE"); } npc.PlayRefractedAbilityBall(); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_vincent.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_vincent.sp index 2618bbce58..2362541010 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_vincent.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/raids/npc_vincent.sp @@ -375,8 +375,7 @@ methodmap Vincent < CClotBody Format(c_NpcName[npc.index], sizeof(c_NpcName[]), "V.I.N.C.E.N.T."); EmitSoundToAll("mvm/mvm_tank_horn.wav",_, SNDCHAN_STATIC, 80, _, 0.7, 80); EmitSoundToAll("mvm/giant_heavy/giant_heavy_entrance.wav", _, _, _, _, 1.0, 100); - CPrintToChatAll("{rare}%t{default}: 뭐 어쩌라고. 자비를 바라는건가? {crimson}너한테 그러긴 싫은데.", c_NpcName[npc.index]); - CPrintToChatAll("{fullred}감염성 유기체 박멸 개시."); + CreateTimer(0.2, Vincent_Timer_IntroMessage_Genocide, EntIndexToEntRef(npc.index)); npc.m_flRangedArmor *= 0.95; npc.m_flMeleeArmor *= 0.95; npc.m_flOverrideMusicNow = 0.0; @@ -395,7 +394,7 @@ methodmap Vincent < CClotBody Format(c_NpcName[npc.index], sizeof(c_NpcName[]), "Vincent"); EmitSoundToAll("mvm/giant_heavy/giant_heavy_entrance.wav", _, _, _, _, 1.0, 100); EmitSoundToAll("mvm/giant_heavy/giant_heavy_entrance.wav", _, _, _, _, 1.0, 100); - CPrintToChatAll("{rare}%t{default}: 정말로 안 떠나시겠다고요? 힘으로라도 나가게 해드리지.", c_NpcName[npc.index]); + CreateTimer(0.2, Vincent_Timer_IntroMessage_Neutral, EntIndexToEntRef(npc.index)); MusicEnum music; strcopy(music.Path, sizeof(music.Path), "#zombiesurvival/aperture/vincent_intro.mp3"); music.Time = 51; @@ -444,6 +443,30 @@ methodmap Vincent < CClotBody } } +static void Vincent_Timer_IntroMessage_Neutral(Handle timer, int ref) +{ + int entity = EntRefToEntIndex(ref); + if (ref == INVALID_ENT_REFERENCE || b_NpcHasDied[entity]) + return; + + Vincent_Talk(entity, "Not gonna leave? I'll make you leave myself."); +} + +static void Vincent_Timer_IntroMessage_Genocide(Handle timer, int ref) +{ + int entity = EntRefToEntIndex(ref); + if (ref == INVALID_ENT_REFERENCE || b_NpcHasDied[entity]) + return; + + Vincent_Talk(entity, "You want a death robot? {crimson}I'LL GIVE YOU ONE."); + CPrintToChatAll("{fullred}Initating extermination of infection based organisms."); +} + +static void Vincent_Talk(int entity, const char[] message) +{ + PrintNPCMessageWithPrefixes(entity, "rare", message); +} + public void Vincent_ClotThink(int iNPC) { Vincent npc = view_as(iNPC); @@ -482,23 +505,23 @@ public void Vincent_ClotThink(int iNPC) { if(!Aperture_IsBossDead(APERTURE_BOSS_CAT) && !Aperture_IsBossDead(APERTURE_BOSS_ARIS)) { - CPrintToChatAll("{rare}%t{default}: 이렇게 되어서 정말 유감입니다.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "I'm sorry it has come to this. I'm afraid you shouldn't have taken that job..."); } else if(Aperture_IsBossDead(APERTURE_BOSS_CAT) && Aperture_IsBossDead(APERTURE_BOSS_ARIS)) { - CPrintToChatAll("{rare}%t{crimson}: 넌 끝났어.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "{crimson}You are DONE."); } else if(Aperture_IsBossDead(APERTURE_BOSS_CAT) || Aperture_IsBossDead(APERTURE_BOSS_ARIS)) { - CPrintToChatAll("{rare}%t{default}: 계속 도망다닐 수는 없을텐데.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "You can't keep running away forever."); } } else { if (npc.Anger) - CPrintToChatAll("{rare}%t{crimson}: 넌 끝났어.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "{crimson}You are DONE."); else - CPrintToChatAll("{rare}%t{default}: 계속 도망다닐 수는 없을텐데.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "You can't keep running away forever."); } } } @@ -591,15 +614,15 @@ public void Vincent_ClotThink(int iNPC) switch(GetRandomInt(0,4)) { case 0: - CPrintToChatAll("{rare}%t{default}: 좀 더 열을 올려야겠군.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "Someone turn the heat up."); case 1: - CPrintToChatAll("{rare}%t{default}: 흠, 이거 당신도 불타오르시는 것 같은데?", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "Is it just me or are you engulfed in flames?"); case 2: - CPrintToChatAll("{rare}%t{default}: 불길 확산.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "Spreading the inferno."); case 3: - CPrintToChatAll("{rare}%t{default}: 불의 세례를.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "Fire in the hole."); case 4: - CPrintToChatAll("{rare}%t{default}: 점화 필요.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "Lighting it up."); } } } @@ -795,7 +818,7 @@ public Action Vincent_OnTakeDamage(int victim, int &attacker, int &inflictor, fl ApplyStatusEffect(victim, victim, "Infinite Will", 30.0); npc.m_flMegaEnrage = GetGameTime() + 30.0; damage = 0.0; - CPrintToChatAll("{rare}%t:{crimson} ...내가 지금 싸우지도 않고 물러날 거라고 생각해?", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "{crimson} ...IF YOU THINK I'LL GO DOWN WITHOUT A FIGHT..."); EmitSoundToAll("mvm/mvm_tank_horn.wav",_, SNDCHAN_STATIC, 80, _, 0.65, 90); EmitSoundToAll("mvm/mvm_tank_horn.wav",_, SNDCHAN_STATIC, 80, _, 0.65, 90); ApplyStatusEffect(npc.index, npc.index, "Dimensional Turbulence", 30.0); @@ -947,19 +970,19 @@ static bool Vincent_LoseConditions(int iNPC) { //yapping npc.m_flTalkRepeat = GetGameTime() + 3.0; - CPrintToChatAll("{rare}%t{crimson}: 안 돼...", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "{crimson}No..."); } case 1: { //yapping npc.m_flTalkRepeat = GetGameTime() + 3.0; - CPrintToChatAll("{rare}%t{crimson}: 네가 날뛰는걸 그냥 두고 볼 수는 없어.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "{crimson}I can't let you get away with this."); } case 2: { //yapping npc.m_flTalkRepeat = GetGameTime() + 3.0; - CPrintToChatAll("{rare}%t{crimson}: 네가 날뛰는걸 그냥 두고 볼 수는 없다고!", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "{crimson}I WON'T let you get away with this!"); } case 3: { @@ -971,7 +994,7 @@ static bool Vincent_LoseConditions(int iNPC) spawnRing_Vectors(Loc, 0.1, 0.0, 0.0, 25.0, "materials/sprites/laserbeam.vmt", 255, 0, 20, 255, 1, 1.5, 8.0, 1.5, 1, 150.0*2.0); spawnRing_Vectors(Loc, 0.1, 0.0, 0.0, 45.0, "materials/sprites/laserbeam.vmt", 255, 0, 20, 255, 1, 1.5, 8.0, 1.5, 1, 150.0*2.0); spawnRing_Vectors(Loc, 0.1, 0.0, 0.0, 65.0, "materials/sprites/laserbeam.vmt", 255, 0, 20, 255, 1, 1.5, 8.0, 1.5, 1, 150.0*2.0); - CPrintToChatAll("{rare}%t{crimson}: 널 이 세상에서 제거해주지!", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "{crimson}I'M GONNA DELETE YOU!"); Format(c_NpcName[npc.index], sizeof(c_NpcName[]), "Old forgotten expidonsan robot"); } case 4: @@ -1008,32 +1031,32 @@ static bool Vincent_LoseConditions(int iNPC) case 0: { npc.m_flTalkRepeat = GetGameTime() + 3.0; - CPrintToChatAll("{rare}%t{default}: 음.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "Ah."); } case 1: { npc.m_flTalkRepeat = GetGameTime() + 3.0; - CPrintToChatAll("{rare}%t{default}: 제가 당신을 쓰러뜨릴만큼 강하진 않은것 같군요.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "It appears that I'm not strong enough to take you down."); } case 2: { npc.m_flTalkRepeat = GetGameTime() + 3.0; - CPrintToChatAll("{rare}%t{default}: 저는 여기에 남겨진 것들이 바깥 세계를 망치게 두고 싶진 않았습니다만,", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "I was hoping to keep the outside world safe with what was left behind here."); } case 3: { npc.m_flTalkRepeat = GetGameTime() + 3.0; - CPrintToChatAll("{rare}%t{default}: 만약 당신이 이 장비들을 계속 사용하고 싶으신거라면...", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "But if you're so persistent on taking this gear..."); } case 4: { npc.m_flTalkRepeat = GetGameTime() + 3.0; - CPrintToChatAll("{rare}%t{default}: 더 이상 당신을 막지 않겠습니다. 그런 당신을 막아봤자 헛수고일테니.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "I won't try to stop you anymore, knowing that my attempts will be futile."); } case 5: { npc.m_flTalkRepeat = GetGameTime() + 3.0; - CPrintToChatAll("{rare}%t{default}: 이걸 받아주세요. 그리고 절대, 사악한 자의 손에 넘어가게 두어선 안 됩니다. 아시겠죠?", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "Take this with you, and don't let it fall into the wrong hands, alright?"); } case 6: { @@ -1127,7 +1150,9 @@ static bool Vincent_LoseConditions(int iNPC) second = "이번엔 저를 이기셨군요."; } - CPrintToChatAll("{rare}%t{default}: %s %s", c_NpcName[npc.index], first, second); + char message[255]; + FormatEx(message, sizeof(message), "%s %s", first, second); + Vincent_Talk(npc.index, message); npc.m_flTalkRepeat = GetGameTime() + 1.7; } @@ -1172,15 +1197,15 @@ static bool Vincent_LoseConditions(int iNPC) //won normally if(!Aperture_IsBossDead(APERTURE_BOSS_CAT) && !Aperture_IsBossDead(APERTURE_BOSS_ARIS)) { - CPrintToChatAll("{rare}%t{default}: 이제 끝. 제발 여기에 다시 들어오지 마세요.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "It's over, please don't come back."); } else if(Aperture_IsBossDead(APERTURE_BOSS_CAT) && Aperture_IsBossDead(APERTURE_BOSS_ARIS)) { - CPrintToChatAll("{rare}%t{crimson}: 이런 짓까지 해서라도 널 막아야되겠나? {default} 적어도 {rare}그 자{default}들의 복수는 이뤘군.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "{crimson}Look at what you made me do. {default} At least I avenged {rare}them{default}."); } else if(Aperture_IsBossDead(APERTURE_BOSS_CAT) || Aperture_IsBossDead(APERTURE_BOSS_ARIS)) { - CPrintToChatAll("{rare}%t{default}: 네 광기도 여기서 끝이다.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "Your reign of chaos ends here."); } return true; } @@ -1687,11 +1712,11 @@ bool Vincent_SlamThrow(int iNPC, int target) switch(GetRandomInt(0,2)) { case 0: - CPrintToChatAll("{rare}%t{default}: 이제 당신을 잡으러 가드리죠.", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "I'm gonna get you."); case 1: - CPrintToChatAll("{rare}%t{default}: 준비되셨죠!", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "Here I come!"); case 2: - CPrintToChatAll("{rare}%t{default}: 도망치시는게 좋을겁니다!", c_NpcName[npc.index]); + Vincent_Talk(npc.index, "You better run!"); } } if(IsValidEntity(npc.m_iWearable4)) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_combine_soldier_ar2.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_combine_soldier_ar2.sp index 8b67e79e8b..31fda98a5f 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_combine_soldier_ar2.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_combine_soldier_ar2.sp @@ -411,7 +411,7 @@ public void RefragmentedCombineSoldierAr2_ClotThink(int iNPC) NormalizeVector(vecDir, vecDir); float WorldSpaceVec[3]; WorldSpaceCenter(npc.index, WorldSpaceVec); - FireBullet(npc.index, npc.m_iWearable1, WorldSpaceVec, vecDir, 10.0, 9000.0, DMG_BULLET, "bullet_tracer01_red"); + FireBullet(npc.index, npc.m_iWearable1, WorldSpaceVec, vecDir, 15.0, 9000.0, DMG_BULLET, "bullet_tracer01_red"); npc.PlayRangedSound(); } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_combine_soldier_elite.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_combine_soldier_elite.sp index aca8b9f299..a0f9e21b8b 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_combine_soldier_elite.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_combine_soldier_elite.sp @@ -294,9 +294,7 @@ public void RefragmentedCombineElite_ClotThink(int iNPC) if(npc.m_flNextRangedSpecialAttack < GetGameTime(npc.index) && flDistanceToTarget > 62500 && flDistanceToTarget < 122500 && npc.m_flReloadDelay < GetGameTime(npc.index)) { float vPredictedPos[3]; PredictSubjectPosition(npc, PrimaryThreatIndex,_,_, vPredictedPos); - int projectile = npc.FireParticleRocket(vPredictedPos, 3000.0, 400.0, 150.0, "burningplayer_blueglow", true); - SDKUnhook(projectile, SDKHook_StartTouch, Rocket_Particle_StartTouch); - SDKHook(projectile, SDKHook_StartTouch, Gay_Rocket_Particle_StartTouch); + npc.FireParticleRocket(vPredictedPos, 700.0, 400.0, 150.0, "burningplayer_blueglow", true); npc.m_flNextRangedSpecialAttack = GetGameTime(npc.index) + 5.0; npc.PlayRangedAttackSecondarySound(); } @@ -362,7 +360,7 @@ public void RefragmentedCombineElite_ClotThink(int iNPC) vecDir[2] = vecDirShooting[2] + x * vecSpread * vecRight[2] + y * vecSpread * vecUp[2]; NormalizeVector(vecDir, vecDir); float WorldSpaceVec[3]; WorldSpaceCenter(npc.index, WorldSpaceVec); - FireBullet(npc.index, npc.m_iWearable1, WorldSpaceVec, vecDir, 10.0, 9000.0, DMG_BULLET, "bullet_tracer01_red"); + FireBullet(npc.index, npc.m_iWearable1, WorldSpaceVec, vecDir, 20.0, 9000.0, DMG_BULLET, "bullet_tracer01_red"); npc.PlayRangedSound(); } @@ -404,7 +402,7 @@ public void RefragmentedCombineElite_ClotThink(int iNPC) if(target > 0) { { - SDKHooks_TakeDamage(target, npc.index, npc.index, 60.0, DMG_CLUB, -1, _, vecHit); + SDKHooks_TakeDamage(target, npc.index, npc.index, 90.0, DMG_CLUB, -1, _, vecHit); } Custom_Knockback(npc.index, target, 400.0); @@ -456,44 +454,6 @@ public Action RefragmentedCombineElite_OnTakeDamage(int victim, int &attacker, i return Plugin_Changed; } -public void Gay_Rocket_Particle_StartTouch(int entity, int target) -{ - if(target > 0 && target < MAXENTITIES) //did we hit something??? - { - int owner = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity"); - if(!IsValidEntity(owner)) - { - owner = 0; - } - - int inflictor = h_ArrowInflictorRef[entity]; - if(inflictor != -1) - inflictor = EntRefToEntIndex(h_ArrowInflictorRef[entity]); - - if(inflictor == -1) - inflictor = owner; - - float ProjectileLoc[3]; - GetEntPropVector(entity, Prop_Data, "m_vecAbsOrigin", ProjectileLoc); - - if(b_should_explode[entity]) //should we "explode" or do "kinetic" damage - { - SDKHooks_TakeDamage(target, owner, inflictor, 50.0, DMG_TRUEDAMAGE, -1); //acts like a kinetic rocket - } - - } - else - { - int particle = EntRefToEntIndex(i_WandParticle[entity]); - //we uhh, missed? - if(IsValidEntity(particle)) - { - RemoveEntity(particle); - } - } - RemoveEntity(entity); -} - public void RefragmentedCombineElite_NPCDeath(int entity) { RefragmentedCombineElite npc = view_as(entity); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_fastzombie.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_fastzombie.sp index 70ffc08298..ab956d0d63 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_fastzombie.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_fastzombie.sp @@ -208,7 +208,7 @@ public void RefragmentedFastZombie_RefragmentedFastZombieThink(int iNPC) npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; - npc.Update(); + npc.Update(); if(npc.m_flNextThinkTime > GetGameTime(npc.index)) { diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_medic.sp b/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_medic.sp index b4d591ea98..85024d2fc7 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_medic.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aperture/refragmented/npc_refragmented_medic.sp @@ -113,6 +113,7 @@ methodmap RefragmentedMedic < CClotBody func_NPCDeath[npc.index] = view_as(RefragmentedMedic_NPCDeath); func_NPCOnTakeDamage[npc.index] = view_as(RefragmentedMedic_OnTakeDamage); func_NPCThink[npc.index] = view_as(RefragmentedMedic_ClotThink); + func_NPCLostHealthBar[npc.index] = view_as(NpcClot_LifeLost); //IDLE @@ -288,34 +289,7 @@ public Action RefragmentedMedic_OnTakeDamage(int victim, int attacker, int infli npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; npc.m_blPlayHurtAnimation = true; } - if(npc.m_iHealthBar <= 0 && !npc.Anger) - { - npc.Anger = true; - npc.m_flAbilityOrAttack0 = GetGameTime(npc.index) + 3.0; - npc.PlayDeathSound(); - b_NpcIsInvulnerable[npc.index] = true; - } - if(npc.m_iHealthBar <= 1 && !npc.m_bFUCKYOU) - { - npc.m_bFUCKYOU = true; - npc.m_flAbilityOrAttack0 = GetGameTime(npc.index) + 3.0; - npc.PlayDeathSound(); - b_NpcIsInvulnerable[npc.index] = true; - } - if(npc.m_iHealthBar <= 2 && !npc.m_bWasSadAlready) - { - npc.m_bWasSadAlready = true; - npc.m_flAbilityOrAttack0 = GetGameTime(npc.index) + 3.0; - npc.PlayDeathSound(); - b_NpcIsInvulnerable[npc.index] = true; - } - if(npc.m_iHealthBar <= 3 && !npc.m_bFUCKYOU_move_anim) - { - npc.m_bFUCKYOU_move_anim = true; - npc.m_flAbilityOrAttack0 = GetGameTime(npc.index) + 3.0; - npc.PlayDeathSound(); - b_NpcIsInvulnerable[npc.index] = true; - } + return Plugin_Changed; @@ -333,4 +307,12 @@ public void RefragmentedMedic_NPCDeath(int entity) RemoveEntity(npc.m_iWearable1); RefragmentedBase_OnDeath(npc.index); +} +static bool NpcClot_LifeLost(int iNPC, int LifeAfter) +{ + ApplyStatusEffect(iNPC, iNPC, "Dimensional Turbulence", 3.0); + Freeplay_ApplyStatusEffect(iNPC, "Caffinated", 3.0); + Freeplay_ApplyStatusEffect(iNPC, "Caffinated Drain", 3.0); + ApplyStatusEffect(iNPC, iNPC, "Unstoppable Force", 3.0); + return true; } \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_blue_heavy.sp b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_blue_heavy.sp index 8f7ea1db34..a6a84bc0f2 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_blue_heavy.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_blue_heavy.sp @@ -116,6 +116,7 @@ methodmap BlueHeavy < CClotBody npc.m_flSpeed = 330.0; npc.m_bThisEntityIgnored = true; npc.m_bScalesWithWaves = true; + b_NpcUnableToDie[npc.index] = true; npc.m_flGetClosestTargetTime = 0.0; npc.m_flNextMeleeAttack = 0.0; npc.m_flAttackHappens = 0.0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_cyan_heavy.sp b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_cyan_heavy.sp index b71bbccb3d..334e01da29 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_cyan_heavy.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_cyan_heavy.sp @@ -116,6 +116,7 @@ methodmap CyanHeavy < CClotBody npc.m_flSpeed = 330.0; npc.m_bThisEntityIgnored = true; npc.m_bScalesWithWaves = true; + b_NpcUnableToDie[npc.index] = true; npc.m_flGetClosestTargetTime = 0.0; npc.m_flNextMeleeAttack = 0.0; npc.m_flAttackHappens = 0.0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_green_heavy.sp b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_green_heavy.sp index 6a7e27687a..6b4ad1380e 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_green_heavy.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_green_heavy.sp @@ -116,6 +116,7 @@ methodmap GreenHeavy < CClotBody npc.m_flSpeed = 330.0; npc.m_bThisEntityIgnored = true; npc.m_bScalesWithWaves = true; + b_NpcUnableToDie[npc.index] = true; npc.m_flGetClosestTargetTime = 0.0; npc.m_flNextMeleeAttack = 0.0; npc.m_flAttackHappens = 0.0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_kevinmery2009.sp b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_kevinmery2009.sp index e978e8ae44..6cff074106 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_kevinmery2009.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_kevinmery2009.sp @@ -493,8 +493,6 @@ static void KevinMery_SelfDefense(KevinMery npc, float gameTime, int target, flo damage = 1.0; } SDKHooks_TakeDamage(targetTrace, npc.index, npc.index, damage, DMG_CLUB, -1, _, vecHit); - //Reduce damage after dealing - damage *= 0.92; // On Hit stuff bool Knocked = false; if(!PlaySound) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_male07.sp b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_male07.sp index 1e5edbcaee..e6c26596a2 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_male07.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_male07.sp @@ -189,8 +189,8 @@ public void Male07_ClotThink(int iNPC) if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) { - npc.m_iTarget = GetClosestTarget(npc.index,_,_,_,_,_,_,_,999999.9, true); - b_DoNotChangeTargetTouchNpc[npc.index] = 1; + npc.m_iTarget = GetClosestTarget(npc.index); + //b_DoNotChangeTargetTouchNpc[npc.index] = 1; if(npc.m_iTarget < 1) { b_DoNotChangeTargetTouchNpc[npc.index] = 0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_orange_heavy.sp b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_orange_heavy.sp index 0da305fc54..b579ff6f78 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_orange_heavy.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_orange_heavy.sp @@ -116,6 +116,7 @@ methodmap OrangeHeavy < CClotBody npc.m_flSpeed = 330.0; npc.m_bThisEntityIgnored = true; npc.m_bScalesWithWaves = true; + b_NpcUnableToDie[npc.index] = true; npc.m_flGetClosestTargetTime = 0.0; npc.m_flNextMeleeAttack = 0.0; npc.m_flAttackHappens = 0.0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_purple_heavy.sp b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_purple_heavy.sp index c853338376..da585b9c1e 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_purple_heavy.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_purple_heavy.sp @@ -116,6 +116,7 @@ methodmap PurpleHeavy < CClotBody npc.m_flSpeed = 330.0; npc.m_bThisEntityIgnored = true; npc.m_bScalesWithWaves = true; + b_NpcUnableToDie[npc.index] = true; npc.m_flGetClosestTargetTime = 0.0; npc.m_flNextMeleeAttack = 0.0; npc.m_flAttackHappens = 0.0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_red_heavy.sp b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_red_heavy.sp index 55f5507f3a..d2a936118d 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_red_heavy.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_red_heavy.sp @@ -119,6 +119,7 @@ methodmap RedHeavy < CClotBody npc.m_flSpeed = 330.0; npc.m_bThisEntityIgnored = true; npc.m_bScalesWithWaves = true; + b_NpcUnableToDie[npc.index] = true; npc.m_flGetClosestTargetTime = 0.0; npc.m_flNextMeleeAttack = 0.0; npc.m_flAttackHappens = 0.0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_yellow_heavy.sp b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_yellow_heavy.sp index d75785399a..0430ff30ef 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_yellow_heavy.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/aprilfools/npc_yellow_heavy.sp @@ -116,6 +116,7 @@ methodmap YellowHeavy < CClotBody npc.m_flSpeed = 330.0; npc.m_bThisEntityIgnored = true; npc.m_bScalesWithWaves = true; + b_NpcUnableToDie[npc.index] = true; npc.m_flGetClosestTargetTime = 0.0; npc.m_flNextMeleeAttack = 0.0; npc.m_flAttackHappens = 0.0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave30/npc_boss_godfather.sp b/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave30/npc_boss_godfather.sp index 480007f831..4435d45ca2 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave30/npc_boss_godfather.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave30/npc_boss_godfather.sp @@ -1008,7 +1008,7 @@ void Godfather_ShootProjectile(Godfather npc, float vicLoc[3], float startPos[3] ParticleEffectAt_Parent(startPos, PARTICLE_GODFATHER_MOLOTOV, entity); SetEntityMoveType(entity, MOVETYPE_FLYGRAVITY); SetEntityGravity(entity, GodfatherMolotov_Gravity); - DispatchKeyValueFloat(entity, "modelscale", 1.66); + SetEntPropFloat(entity, Prop_Send, "m_flModelScale", 1.66); } } } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave45/npc_boss_captain.sp b/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave45/npc_boss_captain.sp index 2e7a3dfdba..18d3cbaecf 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave45/npc_boss_captain.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave45/npc_boss_captain.sp @@ -774,7 +774,7 @@ public void Captain_AnimEvent(int entity, int event) GetEntPropVector(npc.index, Prop_Data, "m_angRotation", ang); int anchor = npc.FireRocket(targPos, 0.0, Keelhaul_Velocity, "models/weapons/w_models/w_drg_ball.mdl"); - DispatchKeyValueFloat(anchor, "modelscale", 0.01); + SetEntPropFloat(anchor, Prop_Send, "m_flModelScale", 0.01); if (IsValidEntity(anchor)) { if (h_NpcSolidHookType[anchor] != 0) @@ -800,7 +800,7 @@ public void Captain_AnimEvent(int entity, int event) TeleportEntity(prop, pos, ang); SetParent(anchor, prop); - DispatchKeyValueFloat(prop, "modelscale", 0.01); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", 0.01); CreateTimer(0.1, Captain_UnhideAnchor, EntIndexToEntRef(prop), TIMER_FLAG_NO_MAPCHANGE); Anchor_Prop[anchor] = EntIndexToEntRef(prop); @@ -827,7 +827,9 @@ public Action Captain_UnhideAnchor(Handle timer, int ref) { int ent = EntRefToEntIndex(ref); if (IsValidEntity(ent)) - DispatchKeyValueFloat(ent, "modelscale", StringToFloat(CAPTAIN_SCALE)); + { + SetEntPropFloat(ent, Prop_Send, "m_flModelScale", StringToFloat(CAPTAIN_SCALE)); + } return Plugin_Continue; } @@ -1047,7 +1049,7 @@ void Captain_ShootProjectile(Captain npc, float vicLoc[3], float startPos[3], fl ParticleEffectAt_Parent(startPos, PARTICLE_PEARLS_TRAIL, entity, "attach_fuse"); SetEntityMoveType(entity, MOVETYPE_FLYGRAVITY); SetEntityGravity(entity, Pearls_Gravity); - DispatchKeyValueFloat(entity, "modelscale", 1.25); + SetEntPropFloat(entity, Prop_Send, "m_flModelScale", 1.25); } } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave45/npc_buccaneerbones.sp b/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave45/npc_buccaneerbones.sp index f1f632dc30..b3f5a10c02 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave45/npc_buccaneerbones.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave45/npc_buccaneerbones.sp @@ -855,7 +855,7 @@ void Buccaneer_ShootProjectile(BuccaneerBones npc, float vicLoc[3], float vel, b { SDKHook(entity, SDKHook_Touch, Buccaneer_BigBallTouch); h_NpcSolidHookType[entity] = g_DHookRocketExplode.HookEntity(Hook_Pre, entity, Buccaneer_DontExplode); - DispatchKeyValueFloat(entity, "modelscale", 1.75); + SetEntPropFloat(entity, Prop_Send, "m_flModelScale", 1.75); SetEntityMoveType(entity, MOVETYPE_FLYGRAVITY); SetEntityGravity(entity, BUFFED_GRAVITY); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave60/npc_jester.sp b/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave60/npc_jester.sp index 3dc39bc964..42ed728e26 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave60/npc_jester.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/bonezone/wave60/npc_jester.sp @@ -925,7 +925,7 @@ void Jester_ShootProjectile(JesterBones npc, float bombPos[3], float bombAng[3], { SDKHook(entity, SDKHook_Touch, Mondo_Touch); h_NpcSolidHookType[entity] = g_DHookRocketExplode.HookEntity(Hook_Pre, entity, Mondo_DontExplode); - DispatchKeyValueFloat(entity, "modelscale", 3.0); + SetEntPropFloat(entity, Prop_Send, "m_flModelScale", 3.0); SetEntityMoveType(entity, MOVETYPE_FLYGRAVITY); SetEntityGravity(entity, (MondoDeathBomb ? BONES_MONDO_GRAVITY_DEATH : BONES_MONDO_GRAVITY)); b_IsDeathBomb[entity] = MondoDeathBomb; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_addiction.sp b/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_addiction.sp index 9e72c9ae11..90506fe49a 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_addiction.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_addiction.sp @@ -411,12 +411,12 @@ public Action Addicition_OnTakeDamage(int victim, int &attacker, int &inflictor, fl_Extra_Damage[npcsummon.index] = fl_Extra_Damage[npc.index]; fl_Extra_Speed[npcsummon.index] = fl_Extra_Speed[npc.index]; - fl_Extra_Speed[npcsummon.index] *= 1.5; - f_AttackSpeedNpcIncrease[npcsummon.index] *= 0.5; + fl_Extra_Speed[npcsummon.index] *= 1.25; + f_AttackSpeedNpcIncrease[npcsummon.index] *= 1.5; NpcStats_CopyStats(npc.index, summon); FreezeNpcInTime(npcsummon.index, 2.0); - SetEntProp(summon, Prop_Data, "m_iHealth", ReturnEntityMaxHealth(npc.index)/4); - SetEntProp(summon, Prop_Data, "m_iMaxHealth", ReturnEntityMaxHealth(npc.index)/4); + SetEntProp(summon, Prop_Data, "m_iHealth", ReturnEntityMaxHealth(npc.index)/7); + SetEntProp(summon, Prop_Data, "m_iMaxHealth", ReturnEntityMaxHealth(npc.index)/7); ApplyStatusEffect(npcsummon.index, npcsummon.index, "Unstoppable Force", 2.0); } } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_corruptedbarney.sp b/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_corruptedbarney.sp index 57a2742ce5..e355e3aad9 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_corruptedbarney.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_corruptedbarney.sp @@ -215,7 +215,7 @@ methodmap CorruptedBarney < CClotBody MusicEnum music; strcopy(music.Path, sizeof(music.Path), "#zombiesurvival/cof/barney.mp3"); - music.Time = 219; + music.Time = 185; music.Volume = 1.25; music.Custom = true; strcopy(music.Name, sizeof(music.Name), "Last Legs"); @@ -306,7 +306,7 @@ public void CorruptedBarney_ClotThink(int iNPC) if(IsValidClient(client)) { Client_Shake(client, 0, 7.0, 7.0, 0.1, false); - if(i_RaidGrantExtra[npc.index] == 1) + if(i_RaidGrantExtra[npc.index] == 1 && !zr_disable_barney_rename.BoolValue) { FormatEx(Buffer, sizeof(Buffer), "Barney %i", GetRandomInt(1, 2500)); SetClientName(client, Buffer); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_sewmo.sp b/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_sewmo.sp index b611754d1d..3ce507c894 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_sewmo.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_sewmo.sp @@ -132,7 +132,7 @@ public void Sewmo_ClotThink(int iNPC) GrantEntityArmor(iNPC, true, 0.50, 0.1, 0); - if(npc.m_flArmorCount < 0.0) + if(npc.m_flArmorCount <= 0.0) { SetVariantInt(1); AcceptEntityInput(npc.index, "SetBodyGroup"); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_simon.sp b/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_simon.sp index 6fe1339ccb..b647d68ddc 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_simon.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/cof/npc_simon.sp @@ -81,6 +81,11 @@ methodmap Simon < CClotBody public get() { return fl_AbilityOrAttack[this.index][0]; } public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][0] = TempValueForProperty; } } + property float m_flEscapeCan + { + public get() { return fl_AbilityOrAttack[this.index][1]; } + public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][1] = TempValueForProperty; } + } public Simon(float vecPos[3], float vecAng[3], int ally, const char[] data) { @@ -100,6 +105,11 @@ methodmap Simon < CClotBody { fl_Damage_Boost = 1.0; } + npc.m_flEscapeCan = 1.0; + if(StrContains(data, "final") != -1) + { + npc.m_flEscapeCan = 0.0; + } int body = EntRefToEntIndex(SimonRagdollRef); if(body > MaxClients) @@ -267,8 +277,9 @@ public void Simon_ClotThink(int iNPC) int maxhealth = ReturnEntityMaxHealth(npc.index); if(!npc.m_bRetreating && npc.m_bHasKilled && health < (maxhealth / 2)) { - if(Waves_GetRoundScale() != (npc.m_bLostHalfHealth ? 39 : 34)) - npc.m_bRetreating = true; + if(npc.m_flEscapeCan) + if(Waves_GetRoundScale() != (npc.m_bLostHalfHealth ? 39 : 34)) + npc.m_bRetreating = true; } if(!npc.m_bInjured && health < (maxhealth / 5)) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_almagest_proxima.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_almagest_proxima.sp index 2fba2976ca..e77c4944b4 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_almagest_proxima.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_almagest_proxima.sp @@ -161,7 +161,7 @@ methodmap AlmagestProxima < CClotBody EnemyShieldCantBreak[npc.index] = true; VausMagicaGiveShield(npc.index, 5); - npc.m_flSpeed = 400.0; + npc.m_flSpeed = 350.0; npc.m_iWearable1 = npc.EquipItem("head", "models/zombie_riot/weapons/ruina_models_2_5.mdl"); SetVariantInt(65536); @@ -214,8 +214,6 @@ static bool Almagest_DidHealDo; static void ClotThink(int iNPC) { AlmagestProxima npc = view_as(iNPC); - - GrantEntityArmor(iNPC, true, 0.5, 0.25, 0); float gameTime = GetGameTime(npc.index); if(npc.m_flNextDelayTime > gameTime) return; @@ -275,9 +273,11 @@ static void ClotThink(int iNPC) npc.SetGoalEntity(target,npc.m_bAllowBackWalking); } npc.m_bAllowBackWalking = false; + npc.m_flSpeed = 350.0; } case 2: { + npc.m_flSpeed = 410.0; //juke them npc.m_bAllowBackWalking = true; npc.FaceTowards(vecTarget, 1000.0); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_chaos_bladethrower.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_chaos_bladethrower.sp index 2e00e29c60..90522b1932 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_chaos_bladethrower.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_chaos_bladethrower.sp @@ -322,9 +322,10 @@ public void ArrowStartTouchPierce(int arrow, int entity) return; Set_HitDetectionCooldown(arrow,entity, FAR_FUTURE); + float DamageGet = f_ArrowDamage[arrow]; if(ShouldNpcDealBonusDamage(entity)) { - f_ArrowDamage[arrow] *= 3.0; + DamageGet *= 3.0; } int owner = GetEntPropEnt(arrow, Prop_Send, "m_hOwnerEntity"); @@ -340,7 +341,7 @@ public void ArrowStartTouchPierce(int arrow, int entity) if(inflictor == -1) inflictor = owner; - SDKHooks_TakeDamage(entity, owner, inflictor, f_ArrowDamage[arrow], DMG_BULLET|DMG_PREVENT_PHYSICS_FORCE, -1); + SDKHooks_TakeDamage(entity, owner, inflictor, DamageGet, DMG_BULLET|DMG_PREVENT_PHYSICS_FORCE, -1); Projectile_DealElementalDamage(entity, arrow); EmitSoundToAll(g_ArrowHitSoundSuccess[GetRandomInt(0, sizeof(g_ArrowHitSoundSuccess) - 1)], arrow, _, 80, _, 0.8, 100); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_chaos_fencer.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_chaos_fencer.sp index 8116aa90db..0eef705e24 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_chaos_fencer.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_chaos_fencer.sp @@ -316,7 +316,7 @@ public void ChaosFencer_ClotThink(int iNPC) fl_TotalArmor[npc.index] = 0.15; } ApplyStatusEffect(npc.index, npc.index, "Ancient Melodies", 0.25); - spawnRing_Vectors(VecSelfNpcabs, (180.0 * 0.95) * 2.0, 0.0, 0.0, 15.0, "materials/sprites/laserbeam.vmt", 225, 150, 150, 200, 1, /*duration*/ 0.11, 5.0, 2.0, 1); + spawnRing_Vectors(VecSelfNpcabs, (180.0 * 0.95) * 2.0, 0.0, 0.0, 15.0, "materials/sprites/laserbeam.vmt", 225, 150, 150, 75, 1, /*duration*/ 0.11, 5.0, 2.0, 1); } else { @@ -327,7 +327,7 @@ public void ChaosFencer_ClotThink(int iNPC) npc.m_flSpeed = 90.0; fl_TotalArmor[npc.index] = 0.25; } - spawnRing_Vectors(VecSelfNpcabs, (180.0 * 0.95) * 2.0, 0.0, 0.0, 15.0, "materials/sprites/laserbeam.vmt", 200, 200, 200, 200, 1, /*duration*/ 0.11, 5.0, 2.0, 1); + spawnRing_Vectors(VecSelfNpcabs, (180.0 * 0.95) * 2.0, 0.0, 0.0, 15.0, "materials/sprites/laserbeam.vmt", 200, 200, 200, 75, 1, /*duration*/ 0.11, 5.0, 2.0, 1); } int target = npc.m_iTarget; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_const2_spawner.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_const2_spawner.sp index bfd04e3148..827591a26e 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_const2_spawner.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_const2_spawner.sp @@ -300,8 +300,16 @@ static void ClotThink(int iNPC) } case 1: { - if(ActiveSpawners[view_as(npc.m_bEnemyBase)] >= 3) - return; + if(npc.m_bEnemyBase) + { + if(ActiveSpawners[view_as(npc.m_bEnemyBase)] >= 3) + return; + } + else + { + if(ActiveSpawners[view_as(npc.m_bEnemyBase)] >= 2) + return; + } DetectedEnemyHit_Const2 = false; Explode_Logic_Custom(0.0, 0, npc.index, 0, _, 500.0, _,_,true,_,_,_,_, DetectedEnemyHit_Const2_Internal); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_contracted_motivator.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_contracted_motivator.sp index 804c1ae402..368e3a75ad 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_contracted_motivator.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_contracted_motivator.sp @@ -126,6 +126,11 @@ methodmap ContractedMotivator < CClotBody public get() { return fl_AbilityOrAttack[this.index][2]; } public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][2] = TempValueForProperty; } } + property float m_fRadiusCD + { + public get() { return fl_AbilityOrAttack[this.index][3]; } + public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][3] = TempValueForProperty; } + } public ContractedMotivator(float vecPos[3], float vecAng[3], int ally) { @@ -249,7 +254,13 @@ static void ClotThink(int iNPC) ConstractedMotivatorBuffs , _, true); - ContractedMotivatorEffect(npc.index, 500.0); + + if(npc.m_fRadiusCD < gameTime) + { + npc.m_fRadiusCD = gameTime + 1.0; + ContractedMotivatorEffect(npc.index); + } + if(target > 0) { @@ -435,22 +446,9 @@ void ContractedMotivator_TakeDamage(int victim, int &attacker, int &inflictor, f //keep them alive to keep spawn limits high? } -void ContractedMotivatorEffect(int entity, float range) +void ContractedMotivatorEffect(int entity) { float ProjectileLoc[3]; GetEntPropVector(entity, Prop_Data, "m_vecAbsOrigin", ProjectileLoc); - spawnRing_Vectors(ProjectileLoc, range * 2.0, 0.0, 0.0, 10.0, "materials/sprites/laserbeam.vmt", 200, 200, 65, 200, 1, 0.1, 5.0, 0.1, 3); -} - - -void ConstractedMotivatorBuffs(int entity, int victim, float &healingammount) -{ - if(i_NpcIsABuilding[victim]) - return; - - if(GetTeam(entity) == GetTeam(victim)) - { - ApplyStatusEffect(entity, victim, "War Cry", 3.0); - } - + spawnRing_Vectors(ProjectileLoc, 0.1, 0.0, 0.0, 80.0, "materials/sprites/laserbeam.vmt", 200, 200, 65, 50, 1, 0.25, 5.0, 0.1, 3, 50.0 * 2.0); } \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_glug.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_glug.sp index 4e651bd0b7..b254866a5c 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_glug.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_glug.sp @@ -76,6 +76,11 @@ methodmap Glug < CClotBody public get() { return fl_AbilityOrAttack[this.index][1]; } public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][1] = TempValueForProperty; } } + property bool m_bAggressive + { + public get() { return b_FlamerToggled[this.index]; } + public set(bool TempValueForProperty) { b_FlamerToggled[this.index] = TempValueForProperty; } + } public void PlayIdleSound() { if(this.m_flNextIdleSound > GetGameTime(this.index)) @@ -119,6 +124,12 @@ methodmap Glug < CClotBody else npc = view_as(CClotBody(vecPos, vecAng, "models/props_coalmines/boulder3.mdl", "1.0", "1000", ally)); + if (StrContains(data, "randomspawn") != -1) + TeleportDiversioToRandLocation(npc.index, true, 1500.0, 500.0); + + if (StrContains(data, "aggressive") != -1) + npc.m_bAggressive = true; + i_NpcWeight[npc.index] = 2; npc.m_iBleedType = BLEEDTYPE_RUBBER; @@ -247,17 +258,38 @@ static void Clot_SelfDefense(Glug npc, float distance, float vecTarget[3], float SDKCall_SetLocalAngles(npc.index, angles); if(npc.m_flAttackHappens < gameTime) { - PluginBot_Jump(npc.index, vecTarget, 600.0); + float vecJumpTo[3]; + vecJumpTo = vecTarget; + + if (npc.m_bAggressive) + { + // Increase jump height based on distance, because being further away means it jumps straight ahead, which means less air time, which means shitty jumps + vecJumpTo[2] += 70.0 * (distance / (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 7.0)); + + // As of time of writing, this should never happen, but if the npc is changed in the future, this prevents jumps from being weaker than they are supposed to be + if (vecJumpTo[2] < vecTarget[2]) + vecJumpTo[2] = vecTarget[2]; + } + + PluginBot_Jump(npc.index, vecJumpTo, 600.0); npc.m_flAttackHappens = 0.0; npc.PlayJumpSound(); } } - if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 7.0)) + + // Always target somebody if the glug is aggressive + if(npc.m_bAggressive || distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 7.0)) { if(npc.m_flNextMeleeAttack < gameTime) { - int target = Can_I_See_Enemy(npc.index, npc.m_iTarget); + int target; + + if (!npc.m_bAggressive) + target = Can_I_See_Enemy(npc.index, npc.m_iTarget); + else + target = npc.m_iTarget; + if(IsValidEnemy(npc.index, target, false, true)) { npc.m_iTarget = target; @@ -305,7 +337,7 @@ static void ClotDeath(int entity) if(spawn_index > MaxClients) { NpcStats_CopyStats(npc.index, spawn_index); - CClotBody npc1 = view_as(spawn_index); + Glug npc1 = view_as(spawn_index); npc1.m_flNextThinkTime = GetGameTime() + 1.0; NpcAddedToZombiesLeftCurrently(spawn_index, true); int health = ReturnEntityMaxHealth(npc.index); @@ -324,6 +356,8 @@ static void ClotDeath(int entity) flPos[1] += GetRandomInt(0,1) ? GetRandomFloat(-200.0, -100.0) : GetRandomFloat(100.0, 200.0); npc1.SetVelocity({0.0,0.0,0.0}); PluginBot_Jump(spawn_index, flPos); + + npc1.m_bAggressive = npc.m_bAggressive; } } } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_lantean_drone_projectile.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_lantean_drone_projectile.sp index c4e4896e54..b8fa17311d 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_lantean_drone_projectile.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_lantean_drone_projectile.sp @@ -87,10 +87,12 @@ methodmap LanteanProjectile < CClotBody if(StrContains(data, "red") != -1) { npc.m_iWearable1 = ParticleEffectAt_Parent(Origin, "flaregun_energyfield_red", npc.index, "", {0.0,0.0,0.0}); + npc.m_iWearable2 = ParticleEffectAt_Parent(Origin, "raygun_projectile_red_trail", npc.index, "", {0.0,0.0,0.0}); } else if(StrContains(data, "blue") != -1) { npc.m_iWearable1 = ParticleEffectAt_Parent(Origin, "flaregun_energyfield_blue", npc.index, "", {0.0,0.0,0.0}); + npc.m_iWearable2 = ParticleEffectAt_Parent(Origin, "raygun_projectile_blue_trail", npc.index, "", {0.0,0.0,0.0}); } //is always static AddNpcToAliveList(npc.index, 1); @@ -450,6 +452,8 @@ static void LanteanNPC_Death(int iNPC) if(IsValidEntity(npc.m_iWearable1)) RemoveEntity(npc.m_iWearable1); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); SetEntityRenderMode(npc.index, RENDER_NORMAL); SetEntityRenderColor(npc.index, 255, 255, 255, 255); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_placed_supplies.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_placed_supplies.sp index 08709dfba7..f97071be82 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_placed_supplies.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_placed_supplies.sp @@ -111,7 +111,7 @@ methodmap PlacedSupplies < CClotBody npc.m_iState = 0; npc.m_flSpeed = 0.0; - npc.m_flSuicideTimer = GetGameTime() + 40.0; + npc.m_flSuicideTimer = GetGameTime() + 15.0; //counts as a static npc, means it wont count towards NPC limit. AddNpcToAliveList(npc.index, 1); SetEntityRenderMode(npc.index, RENDER_TRANSCOLOR); @@ -172,7 +172,7 @@ void PlacedSuppliesEffect(int entity, float range) float ProjectileLoc[3]; PlacedSupplies npc1 = view_as(entity); GetEntPropVector(entity, Prop_Data, "m_vecAbsOrigin", ProjectileLoc); - spawnRing_Vectors(ProjectileLoc, range * 2.0, 0.0, 0.0, 10.0, "materials/sprites/laserbeam.vmt", 65, 255, 65, 200, 1, 0.6, 5.0, 0.1, 3); + spawnRing_Vectors(ProjectileLoc, range * 2.0, 0.0, 0.0, 10.0, "materials/sprites/laserbeam.vmt", 65, 255, 65, 50, 1, 0.51, 5.0, 0.1, 3); npc1.PlayArmorSound(); } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_skilled_crossbowman.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_skilled_crossbowman.sp index a6ddad3811..ff29e3f5d5 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_skilled_crossbowman.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_skilled_crossbowman.sp @@ -128,7 +128,7 @@ methodmap SkilledCrossbowman < CClotBody npc.m_flSpeed = 220.0; npc.m_iAttacksLeft = 3; - npc.m_iWearable1 = npc.EquipItem("head", "models/zombie_riot/weapons/custom_weaponry_1_52.mdl",_,_, 1.5); + npc.m_iWearable1 = npc.EquipItem("head", "models/zombie_riot/weapons/custom_weaponry_1_57.mdl",_,_, 1.5); SetVariantInt(4); AcceptEntityInput(npc.m_iWearable1, "SetBodyGroup"); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_starship_beacon.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_starship_beacon.sp index 363f21b4e3..1e9c2f1e58 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_starship_beacon.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_starship_beacon.sp @@ -282,7 +282,7 @@ static void HandleSummoning(Starship_Beacon npc) int health = ReturnEntityMaxHealth(npc.index); int SpwanIndex = NPC_CreateByName("npc_almagest_proxima", npc.index, Loc, {0.0, 0.0, 0.0}, GetTeam(npc.index)); - + health /= 4; if(SpwanIndex > MaxClients) { SetEntProp(SpwanIndex, Prop_Data, "m_iHealth", health); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_starship_regalia.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_starship_regalia.sp index 19dc4039ca..2f95bda550 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_starship_regalia.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/npc_starship_regalia.sp @@ -1328,7 +1328,7 @@ methodmap RegaliaClass < CClotBody for(int i=0 ; i < 2 ; i ++) { - int particle_1 = ParticleEffectAt({0.0,0.0,0.0}, skin == 1 ? "raygun_projectile_blue_crit" : "raygun_projectile_red_crit", 0.0); + int particle_1 = ParticleEffectAt({0.0,0.0,0.0}, skin == 1 ? "raygun_projectile_blue_trail" : "raygun_projectile_red_trail", 0.0); SetParent(this.index, particle_1, Sections[i]); this.AddAttachedEntity(particle_1); } @@ -1347,7 +1347,7 @@ methodmap RegaliaClass < CClotBody for(int i=0 ; i < 2 ; i ++) { - int particle_1 = ParticleEffectAt({0.0,0.0,0.0}, skin == 1 ? "raygun_projectile_blue_crit" : "raygun_projectile_red_crit", 0.0); + int particle_1 = ParticleEffectAt({0.0,0.0,0.0}, skin == 1 ? "raygun_projectile_blue_trail" : "raygun_projectile_red_trail", 0.0); SetParent(this.index, particle_1, Sections[i]); this.AddAttachedEntity(particle_1); } @@ -2963,6 +2963,11 @@ static void HandleDroneSystem(RegaliaClass npc) float ShipAngles[3]; ShipAngles = npc.GetAngles(); + int iTargetList[MAXPLAYERS]; + UnderTides npcGetInfo = view_as(npc.index); + GetHighDefTargets(npcGetInfo, iTargetList, sizeof(iTargetList), false, false); + int target_loop = 0; + if(TopSection) { for(int i=0 ; i < 2 ; i++) @@ -2974,7 +2979,8 @@ static void HandleDroneSystem(RegaliaClass npc) Angles[2] = 0.0; Angles[1] += (360.0 / SpawnAmt) * loop; Angles[0] = -45.0; - FireDrones(npc, Loc, Angles); + FireDrones(npc, Loc, Angles, iTargetList[target_loop]); + target_loop++; } } } @@ -2989,12 +2995,13 @@ static void HandleDroneSystem(RegaliaClass npc) Angles[2] = 0.0; Angles[1] += (360.0 / SpawnAmt) * loop; Angles[0] = 45.0; - FireDrones(npc, Loc, Angles); + FireDrones(npc, Loc, Angles, iTargetList[target_loop]); + target_loop++; } } } } -static void FireDrones(CClotBody npc, float Loc[3], float Angles[3]) +static void FireDrones(CClotBody npc, float Loc[3], float Angles[3], int target = -1) { int Drone = NPC_CreateByName("npc_lantean_drone_projectile", npc.index, Loc, Angles, GetTeam(npc.index), "blue;raidmodescaling_damage"); int health = RoundToFloor(ReturnEntityMaxHealth(npc.index) * 0.0005); //like 0.05% hp of ship @@ -3011,6 +3018,9 @@ static void FireDrones(CClotBody npc, float Loc[3], float Angles[3]) drone_npc.m_flTimeTillDeath = GetGameTime() + 10.0 + GetRandomFloat(0.5, 5.0); drone_npc.m_flSpeed = DroneSpeed + 600.0 * GetRandomFloat(0.8, 1.2); + if(target > 0) + drone_npc.m_iTarget = target; + switch(GetRandomInt(1, 2)) { case 1: @@ -3742,6 +3752,16 @@ static void NPC_Death(int iNPC) { Waves_ClearWaves(); ForcePlayerWin(); + for (int client = 1; client <= MaxClients; client++) + { + if(IsValidClient(client) && GetClientTeam(client) == 2 && TeutonType[client] != TEUTON_WAITING && PlayerPoints[client] > 500) + { + if(Items_GiveNamedItem(client, "Almagest Data Card")) + { + CPrintToChat(client, "{green}Obtained{yellow} ''Almagest Data Card''"); + } + } + } for(int i; i < i_MaxcountNpcTotal; i++) { int entitynpc = EntRefToEntIndexFast(i_ObjectsNpcsTotal[i]); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_airraider.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_airraider.sp new file mode 100644 index 0000000000..5388beaa18 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_airraider.sp @@ -0,0 +1,545 @@ +#pragma semicolon 1 +#pragma newdecls required + +static const char g_DeathSounds[][] = { + ")vo/soldier_negativevocalization01.mp3", + ")vo/soldier_negativevocalization02.mp3", + ")vo/soldier_negativevocalization03.mp3", + ")vo/soldier_negativevocalization04.mp3", + ")vo/soldier_negativevocalization05.mp3", + ")vo/soldier_negativevocalization06.mp3", +}; + +static const char g_HurtSounds[][] = { + "vo/soldier_painsharp01.mp3", + "vo/soldier_painsharp02.mp3", + "vo/soldier_painsharp03.mp3", + "vo/soldier_painsharp04.mp3", + "vo/soldier_painsharp05.mp3", + "vo/soldier_painsharp06.mp3", + "vo/soldier_painsharp07.mp3", + "vo/soldier_painsharp08.mp3" +}; + + +static const char g_IdleAlertedSounds[][] = { + "vo/soldier_dominationsniper13.mp3", + "vo/soldier_dominationsniper01.mp3", + "vo/compmode/cm_soldier_pregamefirst_04.mp3", + "vo/compmode/cm_soldier_pregamefirst_05.mp3", + "vo/compmode/cm_soldier_pregamefirst_06.mp3", +}; + +static const char g_RangedAttackSounds[][] = { + "weapons/airstrike_fire_01.wav", + "weapons/airstrike_fire_02.wav", + "weapons/airstrike_fire_03.wav", +}; +static const char g_MeleeAttackSounds[][] = { + "weapons/shotgun_shoot.wav", +}; + +void Airraider_OnMapStart_NPC() +{ + for (int i = 0; i < (sizeof(g_DeathSounds)); i++) { PrecacheSound(g_DeathSounds[i]); } + for (int i = 0; i < (sizeof(g_HurtSounds)); i++) { PrecacheSound(g_HurtSounds[i]); } + for (int i = 0; i < (sizeof(g_IdleAlertedSounds)); i++) { PrecacheSound(g_IdleAlertedSounds[i]); } + for (int i = 0; i < (sizeof(g_RangedAttackSounds)); i++) { PrecacheSound(g_RangedAttackSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeAttackSounds)); i++) { PrecacheSound(g_MeleeAttackSounds[i]); } + PrecacheModel("models/player/soldier.mdl"); + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Airraider"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_airraider"); + strcopy(data.Icon, sizeof(data.Icon), "soldine"); + data.IconCustom = true; + data.Flags = 0; + data.Category = Type_Victoria; + data.Func = ClotSummon; + NPC_Add(data); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int team) +{ + return Airraider(vecPos, vecAng, team); +} + +methodmap Airraider < CClotBody +{ + property int i_GunMode + { + public get() { return i_TimesSummoned[this.index]; } + public set(int TempValueForProperty) { i_TimesSummoned[this.index] = TempValueForProperty; } + } + property float f_AirraiderRocketJumpCD_Wearoff + { + public get() { return fl_AttackHappensMaximum[this.index]; } + public set(float TempValueForProperty) { fl_AttackHappensMaximum[this.index] = TempValueForProperty; } + } + property bool b_AirraiderRocketJump + { + public get() { return b_NextRangedBarrage_OnGoing[this.index]; } + public set(bool TempValueForProperty) { b_NextRangedBarrage_OnGoing[this.index] = TempValueForProperty; } + } + public void PlayIdleAlertSound() + { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + + } + + public void PlayHurtSound() + { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + + this.m_flNextHurtSound = GetGameTime(this.index) + 0.4; + + EmitSoundToAll(g_HurtSounds[GetRandomInt(0, sizeof(g_HurtSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + + } + + public void PlayDeathSound() + { + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + + public void PlayRangedSound() + { + EmitSoundToAll(g_RangedAttackSounds[GetRandomInt(0, sizeof(g_RangedAttackSounds) - 1)], this.index, SNDCHAN_AUTO, BOSS_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + public void PlayShotgunSound() + { + EmitSoundToAll(g_MeleeAttackSounds[GetRandomInt(0, sizeof(g_MeleeAttackSounds) - 1)], this.index, SNDCHAN_AUTO, NORMAL_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + + + public Airraider(float vecPos[3], float vecAng[3], int ally) + { + Airraider npc = view_as(CClotBody(vecPos, vecAng, "models/player/soldier.mdl", "1.0", "7500", ally)); + + i_NpcWeight[npc.index] = 1; + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + int iActivity = npc.LookupActivity("ACT_MP_RUN_PRIMARY"); + if(iActivity > 0) npc.StartActivity(iActivity); + + SetVariantInt(2); + AcceptEntityInput(npc.index, "SetBodyGroup"); + + npc.m_flNextMeleeAttack = 0.0; + + npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iStepNoiseType = STEPSOUND_NORMAL; + npc.m_iNpcStepVariation = STEPTYPE_NORMAL; + + func_NPCDeath[npc.index] = Airraider_NPCDeath; + func_NPCOnTakeDamage[npc.index] = Airraider_OnTakeDamage; + func_NPCThink[npc.index] = Airraider_ClotThink; + + npc.StartPathing(); + npc.m_flSpeed = 250.0; + npc.i_GunMode = 1; + npc.m_flGravityMulti = 0.35; + + npc.Anger = true; + npc.b_AirraiderRocketJump = true; + + npc.m_flNextRangedAttack = GetGameTime(npc.index) + 3.0; + npc.f_AirraiderRocketJumpCD_Wearoff = GetGameTime(npc.index) + 1.0; + b_NpcIsInvulnerable[npc.index] = true; + npc.m_bTeamGlowDefault = false; + + int skin = 1; + SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); + + // Weapon + npc.m_iWearable1 = npc.EquipItem("head", "models/weapons/c_models/c_rocketlauncher/c_rocketlauncher.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + + npc.m_iWearable2 = npc.EquipItem("head", "models/workshop/weapons/c_models/c_paratooper_pack/c_paratrooper_parachute.mdl"); + SetVariantString("3.0"); + AcceptEntityInput(npc.m_iWearable2, "SetModelScale"); + + npc.m_iWearable3 = npc.EquipItem("head", "models/workshop/player/items/soldier/dec2014_skullcap/dec2014_skullcap.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable3, "SetModelScale"); + + npc.m_iWearable4 = npc.EquipItem("head", "models/workshop/player/items/all_class/dec15_gift_bringer/dec15_gift_bringer_soldier.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable4, "SetModelScale"); + + npc.m_iWearable5 = npc.EquipItem("head", "models/workshop/player/items/soldier/fall17_attack_packs/fall17_attack_packs.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable5, "SetModelScale"); + + npc.m_iWearable6 = npc.EquipItem("head", "models/workshop/player/items/soldier/hwn2025_seamanns/hwn2025_seamanns.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable6, "SetModelScale"); + + npc.m_iWearable7 = npc.EquipItem("head", "models/workshop/weapons/c_models/c_paratooper_pack/c_paratrooper_pack.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable7, "SetModelScale"); + + SetEntProp(npc.m_iWearable2, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable3, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable4, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable5, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable6, Prop_Send, "m_nSkin", skin); + + NpcColourCosmetic_ViaPaint(npc.m_iWearable3, 1581885); + NpcColourCosmetic_ViaPaint(npc.m_iWearable4, 1581885); + NpcColourCosmetic_ViaPaint(npc.m_iWearable5, 1581885); + + SetEntPropFloat(npc.index, Prop_Send, "m_fadeMinDist", 1.0); + SetEntPropFloat(npc.index, Prop_Send, "m_fadeMaxDist", 1.0); + SetEntPropFloat(npc.m_iWearable1, Prop_Send, "m_fadeMinDist", 1.0); + SetEntPropFloat(npc.m_iWearable1, Prop_Send, "m_fadeMaxDist", 1.0); + SetEntPropFloat(npc.m_iWearable2, Prop_Send, "m_fadeMinDist", 1.0); + SetEntPropFloat(npc.m_iWearable2, Prop_Send, "m_fadeMaxDist", 1.0); + SetEntPropFloat(npc.m_iWearable3, Prop_Send, "m_fadeMinDist", 1.0); + SetEntPropFloat(npc.m_iWearable3, Prop_Send, "m_fadeMaxDist", 1.0); + SetEntPropFloat(npc.m_iWearable4, Prop_Send, "m_fadeMinDist", 1.0); + SetEntPropFloat(npc.m_iWearable4, Prop_Send, "m_fadeMaxDist", 1.0); + SetEntPropFloat(npc.m_iWearable5, Prop_Send, "m_fadeMinDist", 1.0); + SetEntPropFloat(npc.m_iWearable5, Prop_Send, "m_fadeMaxDist", 1.0); + SetEntPropFloat(npc.m_iWearable6, Prop_Send, "m_fadeMinDist", 1.0); + SetEntPropFloat(npc.m_iWearable6, Prop_Send, "m_fadeMaxDist", 1.0); + SetEntPropFloat(npc.m_iWearable7, Prop_Send, "m_fadeMinDist", 1.0); + SetEntPropFloat(npc.m_iWearable7, Prop_Send, "m_fadeMaxDist", 1.0); + + SetVariantString("deploy_idle"); + AcceptEntityInput(npc.m_iWearable2, "SetAnimation"); + + return npc; + } +} + +public void Airraider_ClotThink(int iNPC) +{ + Airraider npc = view_as(iNPC); + if(npc.m_flNextDelayTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + npc.Update(); + + if(!npc.IsOnGround()) + { + npc.m_flRangedArmor = 2.0; + } + else + { + npc.m_flRangedArmor = 1.0; + } + + if(npc.b_AirraiderRocketJump) + { + if(IsValidEntity(npc.m_iTeamGlow)) + RemoveEntity(npc.m_iTeamGlow); + npc.StopPathing(); + if(npc.f_AirraiderRocketJumpCD_Wearoff < GetGameTime(npc.index)) + { + TeleportDiversioToRandLocation(npc.index); + static float flPos[3]; + GetEntPropVector(npc.index, Prop_Data, "m_vecAbsOrigin", flPos); + flPos[2] += 3000.0; + PluginBot_Jump(npc.index, flPos); + SetEntPropFloat(npc.m_iWearable1, Prop_Send, "m_fadeMinDist", 1.0); + SetEntPropFloat(npc.m_iWearable1, Prop_Send, "m_fadeMaxDist", 1.0); + npc.f_AirraiderRocketJumpCD_Wearoff = GetGameTime(npc.index) + 1.0; + npc.b_AirraiderRocketJump = false; + } + return; + } + else if(npc.IsOnGround()) + { + if(npc.f_AirraiderRocketJumpCD_Wearoff < GetGameTime(npc.index)) + { + npc.Anger = false; + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); + npc.i_GunMode = 0; + npc.m_flGravityMulti = 1.0; + } + } + else + { + if(npc.Anger && npc.f_AirraiderRocketJumpCD_Wearoff < GetGameTime(npc.index)) + { + b_NpcIsInvulnerable[npc.index] = false; + npc.m_bTeamGlowDefault = true; + SetEntPropFloat(npc.index, Prop_Send, "m_fadeMinDist", 0.0); + SetEntPropFloat(npc.index, Prop_Send, "m_fadeMaxDist", 0.0); + SetEntPropFloat(npc.m_iWearable1, Prop_Send, "m_fadeMinDist", 0.0); + SetEntPropFloat(npc.m_iWearable1, Prop_Send, "m_fadeMaxDist", 0.0); + if(IsValidEntity(npc.m_iWearable2)) + { + SetEntPropFloat(npc.m_iWearable2, Prop_Send, "m_fadeMinDist", 0.0); + SetEntPropFloat(npc.m_iWearable2, Prop_Send, "m_fadeMaxDist", 0.0); + } + SetEntPropFloat(npc.m_iWearable3, Prop_Send, "m_fadeMinDist", 0.0); + SetEntPropFloat(npc.m_iWearable3, Prop_Send, "m_fadeMaxDist", 0.0); + SetEntPropFloat(npc.m_iWearable4, Prop_Send, "m_fadeMinDist", 0.0); + SetEntPropFloat(npc.m_iWearable4, Prop_Send, "m_fadeMaxDist", 0.0); + SetEntPropFloat(npc.m_iWearable5, Prop_Send, "m_fadeMinDist", 0.0); + SetEntPropFloat(npc.m_iWearable5, Prop_Send, "m_fadeMaxDist", 0.0); + SetEntPropFloat(npc.m_iWearable6, Prop_Send, "m_fadeMinDist", 0.0); + SetEntPropFloat(npc.m_iWearable6, Prop_Send, "m_fadeMaxDist", 0.0); + SetEntPropFloat(npc.m_iWearable7, Prop_Send, "m_fadeMinDist", 0.0); + SetEntPropFloat(npc.m_iWearable7, Prop_Send, "m_fadeMaxDist", 0.0); + } + } + + if(npc.m_blPlayHurtAnimation) + { + npc.AddGesture("ACT_MP_GESTURE_FLINCH_CHEST", false); + npc.m_blPlayHurtAnimation = false; + npc.PlayHurtSound(); + } + + + if(npc.m_flNextThinkTime > GetGameTime(npc.index)) + { + return; + } + + npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.1; + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + npc.m_iTarget = GetClosestTarget(npc.index); + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + GetRandomRetargetTime(); + } + + if(IsValidEnemy(npc.index, npc.m_iTarget)) + { + float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget ); + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + if(flDistanceToTarget < npc.GetLeadRadius()) + { + float vPredictedPos[3]; + PredictSubjectPosition(npc, npc.m_iTarget,_,_, vPredictedPos); + npc.SetGoalVector(vPredictedPos); + } + else + { + npc.SetGoalEntity(npc.m_iTarget); + } + AirraiderSelfDefense(npc,GetGameTime(npc.index), npc.m_iTarget, flDistanceToTarget); + } + else + { + npc.m_flGetClosestTargetTime = 0.0; + npc.m_iTarget = GetClosestTarget(npc.index); + } + + AirraiderAnimationChange(npc); + npc.PlayIdleAlertSound(); +} + +public Action Airraider_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) +{ + Airraider npc = view_as(victim); + + if(attacker <= 0) + return Plugin_Continue; + + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } + + return Plugin_Changed; +} + +public void Airraider_NPCDeath(int entity) +{ + Airraider npc = view_as(entity); + if(!npc.m_bGib) + { + npc.PlayDeathSound(); + } + + if(IsValidEntity(npc.m_iWearable7)) + RemoveEntity(npc.m_iWearable7); + if(IsValidEntity(npc.m_iWearable6)) + RemoveEntity(npc.m_iWearable6); + if(IsValidEntity(npc.m_iWearable8)) + RemoveEntity(npc.m_iWearable8); + if(IsValidEntity(npc.m_iWearable5)) + RemoveEntity(npc.m_iWearable5); + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + if(IsValidEntity(npc.m_iWearable3)) + RemoveEntity(npc.m_iWearable3); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); + +} +/* + + +*/ +void AirraiderAnimationChange(Airraider npc) +{ + switch(npc.i_GunMode) + { + case 1: //primary + { + if (npc.IsOnGround()) + { + if(npc.m_iChanged_WalkCycle != 1) + { + ResetAirraiderWeapon(npc, 1); + SetVariantInt(2); + AcceptEntityInput(npc.index, "SetBodyGroup"); + npc.m_bisWalking = true; + npc.m_iChanged_WalkCycle = 1; + npc.SetActivity("ACT_MP_RUN_PRIMARY"); + npc.StartPathing(); + } + } + else + { + if(npc.m_iChanged_WalkCycle != 2) + { + ResetAirraiderWeapon(npc, 1); + SetVariantInt(2); + AcceptEntityInput(npc.index, "SetBodyGroup"); + npc.m_bisWalking = false; + npc.m_iChanged_WalkCycle = 2; + npc.SetActivity("ACT_MP_JUMP_FLOAT_PRIMARY"); + npc.StartPathing(); + } + } + } + case 0: //Secondary + { + if (npc.IsOnGround()) + { + if(npc.m_iChanged_WalkCycle != 3) + { + ResetAirraiderWeapon(npc, 0); + SetVariantInt(2); + AcceptEntityInput(npc.index, "SetBodyGroup"); + npc.m_bisWalking = true; + npc.m_iChanged_WalkCycle = 3; + npc.SetActivity("ACT_MP_RUN_SECONDARY"); + npc.StartPathing(); + } + } + else + { + if(npc.m_iChanged_WalkCycle != 4) + { + ResetAirraiderWeapon(npc, 0); + SetVariantInt(2); + AcceptEntityInput(npc.index, "SetBodyGroup"); + npc.m_bisWalking = false; + npc.m_iChanged_WalkCycle = 4; + npc.SetActivity("ACT_MP_JUMP_FLOAT_SECONDARY"); + npc.StartPathing(); + } + } + } + } + +} + +void AirraiderSelfDefense(Airraider npc, float gameTime, int target, float distance) +{ + if(!npc.Anger) + { + npc.i_GunMode = 0; //Imma use my shotgun now + if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 3.0)) + { + int Enemy_I_See = Can_I_See_Enemy(npc.index, npc.m_iTarget); + if(IsValidEnemy(npc.index, Enemy_I_See) && gameTime > npc.m_flNextRangedAttack) + { + npc.AddGesture("ACT_MP_ATTACK_STAND_SECONDARY"); + npc.m_iTarget = Enemy_I_See; + npc.PlayShotgunSound(); + float vecTarget[3]; WorldSpaceCenter(target, vecTarget); + npc.FaceTowards(vecTarget, 20000.0); + Handle swingTrace; + if(npc.DoSwingTrace(swingTrace, target, { 9999.0, 9999.0, 9999.0 })) + { + target = TR_GetEntityIndex(swingTrace); + float vecHit[3]; + TR_GetEndPosition(vecHit, swingTrace); + float origin[3], angles[3]; + view_as(npc.m_iWearable1).GetAttachment("muzzle", origin, angles); + ShootLaser(npc.m_iWearable1, "bullet_tracer02_blue", origin, vecHit, false ); + npc.m_flNextMeleeAttack = gameTime + 0.75; + + if(IsValidEnemy(npc.index, target)) + { + float damageDealt = 90.0; + if(ShouldNpcDealBonusDamage(target)) + damageDealt *= 2.0; + + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_BULLET, -1, _, vecHit); + } + npc.m_flNextRangedAttack = gameTime + 0.50; + } + delete swingTrace; + } + } + return; + } + npc.i_GunMode = 1; //rocket! + if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 900.0)) + { + if(gameTime > npc.m_flNextRangedAttack) + { + if(Can_I_See_Enemy_Only(npc.index, target)) + { + float projectile_speed = 1000.0; + float DamageRocket = 30.0; + float vPredictedPos[3]; + PredictSubjectPositionForProjectiles(npc, target, projectile_speed, _,vPredictedPos); + + npc.FaceTowards(vPredictedPos, 20000.0); + //Play attack anim + npc.AddGesture("ACT_MP_ATTACK_STAND_PRIMARY"); + + npc.PlayRangedSound(); + npc.FireRocket(vPredictedPos, DamageRocket, projectile_speed, "models/weapons/w_models/w_rocket_airstrike/w_rocket_airstrike.mdl"); + npc.m_flNextRangedAttack = gameTime + 0.30; + } + } + } + return; +} + +void ResetAirraiderWeapon(Airraider npc, int weapon_Type) +{ + if(IsValidEntity(npc.m_iWearable1)) + { + RemoveEntity(npc.m_iWearable1); + } + switch(weapon_Type) + { + case 1: + { + npc.m_iWearable1 = npc.EquipItem("head", "models/workshop/weapons/c_models/c_atom_launcher/c_atom_launcher.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + } + case 0: + { + npc.m_iWearable1 = npc.EquipItem("head", "models/weapons/c_models/c_reserve_shooter/c_reserve_shooter.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + } + } +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_boltbag.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_boltbag.sp new file mode 100644 index 0000000000..a529055273 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_boltbag.sp @@ -0,0 +1,297 @@ +#pragma semicolon 1 +#pragma newdecls required + +static const char g_DeathSounds[][] = { + ")physics/metal/metal_canister_impact_hard1.wav", + ")physics/metal/metal_canister_impact_hard2.wav", + ")physics/metal/metal_canister_impact_hard3.wav", +}; + +static const char g_HurtSounds[][] = { + "weapons/sentry_damage1.wav", + "weapons/sentry_damage2.wav", + "weapons/sentry_damage3.wav", + "weapons/sentry_damage4.wav" +}; + +static const char g_IdleAlertedSounds[][] = { + "npc/scanner/scanner_alert1.wav" +}; + +static const char g_MeleeAttackSounds[][] = { + "weapons/machete_swing.wav", +}; + +static const char g_MeleeHitSounds[][] = { + "weapons/neon_sign_hit_01.wav", + "weapons/neon_sign_hit_02.wav", + "weapons/neon_sign_hit_03.wav", + "weapons/neon_sign_hit_04.wav" +}; + +static const char g_SapperHitSounds[][] = { + "weapons/rescue_ranger_charge_01.wav", + "weapons/rescue_ranger_charge_02.wav", +}; + +void Victorian_Resource_Collector_OnMapStart_NPC() +{ + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Resource Collector"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_resource_collector"); + strcopy(data.Icon, sizeof(data.Icon), "victoria_ironshield"); + data.IconCustom = false; + data.Flags = 0; + data.Category = Type_Victoria; + data.Precache = ClotPrecache; + data.Func = ClotSummon; + NPC_Add(data); +} + +static void ClotPrecache() +{ + PrecacheSoundArray(g_DeathSounds); + PrecacheSoundArray(g_HurtSounds); + PrecacheSoundArray(g_IdleAlertedSounds); + PrecacheSoundArray(g_MeleeAttackSounds); + PrecacheSoundArray(g_MeleeHitSounds); + PrecacheSoundArray(g_SapperHitSounds); + PrecacheModel("models/bots/bot_worker/bot_worker.mdl"); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int ally) +{ + return ResourceCollector(vecPos, vecAng, ally); +} + +methodmap ResourceCollector < CClotBody +{ + public void PlayIdleAlertSound() + { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 150); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + } + public void PlayHurtSound() + { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + + this.m_flNextHurtSound = GetGameTime(this.index) + 0.4; + + EmitSoundToAll(g_HurtSounds[GetRandomInt(0, sizeof(g_HurtSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 125); + } + public void PlayDeathSound() + { + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 130); + } + public void PlayMeleeSound() + { + EmitSoundToAll(g_MeleeAttackSounds[GetRandomInt(0, sizeof(g_MeleeAttackSounds) - 1)], this.index, SNDCHAN_AUTO, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + public void PlayMeleeHitSound() + { + EmitSoundToAll(g_MeleeHitSounds[GetRandomInt(0, sizeof(g_MeleeHitSounds) - 1)], this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + public void PlaySapperHitSound() + { + EmitSoundToAll(g_SapperHitSounds[GetRandomInt(0, sizeof(g_SapperHitSounds) - 1)], this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + + } + + public ResourceCollector(float vecPos[3], float vecAng[3], int ally) + { + ResourceCollector npc = view_as(CClotBody(vecPos, vecAng, "models/bots/bot_worker/bot_worker.mdl", "0.8", "9500", ally)); + + i_NpcWeight[npc.index] = 1; + + npc.m_flNextMeleeAttack = 0.0; + + npc.m_iBleedType = BLEEDTYPE_METAL; + npc.m_iNpcStepVariation = 0; + + func_NPCDeath[npc.index] = view_as(ResourceCollector_NPCDeath); + func_NPCOnTakeDamage[npc.index] = view_as(ResourceCollector_OnTakeDamage); + func_NPCThink[npc.index] = view_as(ResourceCollector_ClotThink); + + b_DoGibThisNpc[npc.index] = true; + b_DissapearOnDeath[npc.index] = true; + + //IDLE + npc.m_iState = 0; + npc.m_flGetClosestTargetTime = 0.0; + npc.StartPathing(); + npc.m_flSpeed = 300.0; + + npc.m_flRangedArmor = 0.7; + + int skin = 1; + SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); + + //npc.m_iWearable1 = npc.EquipItemSeperate("models/workshop/player/items/engineer/sum19_brain_interface/sum19_brain_interface.mdl",_,skin,1.9,-120.0); + + return npc; + } +} + +static void ResourceCollector_ClotThink(int iNPC) +{ + ResourceCollector npc = view_as(iNPC); + if(npc.m_flNextDelayTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + npc.Update(); + + if(npc.m_blPlayHurtAnimation) + { + npc.PlayHurtSound(); + } + + if(npc.m_flNextThinkTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.1; + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + npc.m_iTarget = GetClosestTarget(npc.index); + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + GetRandomRetargetTime(); + } + if(NpcStats_VictorianCallToArms(npc.index)) + { + npc.m_flSpeed = 400.0; + } + else + { + npc.m_flSpeed = 300.0; + } + + if(IsValidEnemy(npc.index, npc.m_iTarget)) + { + float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget ); + + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + if(flDistanceToTarget < npc.GetLeadRadius()) + { + float vPredictedPos[3]; + PredictSubjectPosition(npc, npc.m_iTarget,_,_, vPredictedPos); + npc.SetGoalVector(vPredictedPos); + } + else + { + npc.SetGoalEntity(npc.m_iTarget); + } + ResourceCollectorSelfDefense(npc,GetGameTime(npc.index), npc.m_iTarget, flDistanceToTarget); + } + else + { + npc.m_flGetClosestTargetTime = 0.0; + npc.m_iTarget = GetClosestTarget(npc.index); + } + + + npc.PlayIdleAlertSound(); +} + +static Action ResourceCollector_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) +{ + ResourceCollector npc = view_as(victim); + + if(attacker <= 0) + return Plugin_Continue; + + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } + + return Plugin_Changed; +} + +static void ResourceCollector_NPCDeath(int entity) +{ + ResourceCollector npc = view_as(entity); + if(!npc.m_bGib) + { + npc.PlayDeathSound(); + } + float VecDeath[3]; WorldSpaceCenter(npc.index, VecDeath); + ParticleEffectAt(VecDeath, "ExplosionCore_buildings", 0.5); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); +} + +static void ResourceCollectorSelfDefense(ResourceCollector npc, float gameTime, int target, float distance) +{ + if(npc.m_flAttackHappens) + { + if(npc.m_flAttackHappens < gameTime) + { + npc.m_flAttackHappens = 0.0; + + Handle swingTrace; + float VecEnemy[3]; WorldSpaceCenter(npc.m_iTarget, VecEnemy); + npc.FaceTowards(VecEnemy, 15000.0); + if(npc.DoSwingTrace(swingTrace, npc.m_iTarget)) + { + + target = TR_GetEntityIndex(swingTrace); + + float vecHit[3]; + TR_GetEndPosition(vecHit, swingTrace); + + if(IsValidEnemy(npc.index, target)) + { + float damageDealt = 50.0; + + if(ShouldNpcDealBonusDamage(target)) + { + damageDealt *= 5.0; + if(NpcStats_VictorianCallToArms(npc.index)) + damageDealt *= 2.0; + } + + + int DamageType = DMG_CLUB; + + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DamageType, -1, _, vecHit); + + // Hit sound + if(ShouldNpcDealBonusDamage(target)) + npc.PlaySapperHitSound(); + else + npc.PlayMeleeHitSound(); + } + } + delete swingTrace; + } + } + + if(gameTime > npc.m_flNextMeleeAttack) + { + if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED)) + { + int Enemy_I_See; + + Enemy_I_See = Can_I_See_Enemy(npc.index, npc.m_iTarget); + + if(IsValidEnemy(npc.index, Enemy_I_See)) + { + npc.m_iTarget = Enemy_I_See; + npc.PlayMeleeSound(); + npc.AddGesture("panic",_,_,_,1.0); + + npc.m_flAttackHappens = gameTime + 0.15; + npc.m_flDoingAnimation = gameTime + 0.15; + npc.m_flNextMeleeAttack = gameTime + 1.0; + } + } + } +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_chemical_specialist.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_chemical_specialist.sp new file mode 100644 index 0000000000..e1d4dfc0d6 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_chemical_specialist.sp @@ -0,0 +1,351 @@ +#pragma semicolon 1 +#pragma newdecls required + +static const char g_DeathSounds[][] = { + ")vo/engineer_negativevocalization01.mp3", + ")vo/engineer_negativevocalization02.mp3", + ")vo/engineer_negativevocalization03.mp3", + ")vo/engineer_negativevocalization04.mp3", + ")vo/engineer_negativevocalization05.mp3", + ")vo/engineer_negativevocalization06.mp3", + ")vo/engineer_negativevocalization07.mp3", + ")vo/engineer_negativevocalization08.mp3", + ")vo/engineer_negativevocalization09.mp3", + ")vo/engineer_negativevocalization10.mp3", + ")vo/engineer_negativevocalization11.mp3", + ")vo/engineer_negativevocalization12.mp3", +}; + +static const char g_HurtSounds[][] = { + "vo/engineer_painsharp01.mp3", + "vo/engineer_painsharp02.mp3", + "vo/engineer_painsharp03.mp3", + "vo/engineer_painsharp04.mp3", + "vo/engineer_painsharp05.mp3", + "vo/engineer_painsharp06.mp3", + "vo/engineer_painsharp07.mp3", + "vo/engineer_painsharp08.mp3" +}; + + +static const char g_IdleAlertedSounds[][] = { + "vo/engineer_mvm_mannhattan_gate_atk01.mp3", + "vo/engineer_mvm_mannhattan_gate_atk02.mp3", + "vo/engineer_mvm_mannhattan_gate_atk03.mp3", +}; + +static const char g_RangeAttackSounds[] = "weapons/ar2/fire1.wav"; + +void Chemical_Specialist_OnMapStart_NPC() +{ + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Chemical Specialist"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_chemical_specialist"); + strcopy(data.Icon, sizeof(data.Icon), "victoria_shotgunner"); + data.IconCustom = true; + data.Flags = 0; + data.Category = Type_Victoria; + data.Precache = ClotPrecache; + data.Func = ClotSummon; + int id = NPC_Add(data); + Rogue_Paradox_AddWinterNPC(id); +} + +static void ClotPrecache() +{ + PrecacheSoundArray(g_DeathSounds); + PrecacheSoundArray(g_HurtSounds); + PrecacheSoundArray(g_IdleAlertedSounds); + PrecacheSound(g_RangeAttackSounds); + PrecacheModel("models/player/engineer.mdl"); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int ally) +{ + return Chemical_Specialist(vecPos, vecAng, ally); +} + +methodmap Chemical_Specialist < CClotBody +{ + public void PlayIdleAlertSound() + { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + } + public void PlayHurtSound() + { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + EmitSoundToAll(g_HurtSounds[GetRandomInt(0, sizeof(g_HurtSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + this.m_flNextHurtSound = GetGameTime(this.index) + 0.4; + } + public void PlayDeathSound() + { + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + public void PlayRangeSound() + { + EmitSoundToAll(g_RangeAttackSounds[GetRandomInt(0, sizeof(g_RangeAttackSounds) - 1)], this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 85); + } + + public Chemical_Specialist(float vecPos[3], float vecAng[3], int ally) + { + Chemical_Specialist npc = view_as(CClotBody(vecPos, vecAng, "models/player/engineer.mdl", "1.0", "7500", ally)); + + i_NpcWeight[npc.index] = 2; + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + int iActivity = npc.LookupActivity("ACT_MP_RUN_SECONDARY"); + if(iActivity > 0) npc.StartActivity(iActivity); + + SetVariantInt(3); + AcceptEntityInput(npc.index, "SetBodyGroup"); + + npc.m_flRangedArmor = 0.9; + npc.m_flMeleeArmor = 0.7; + + npc.m_flNextMeleeAttack = 0.0; + + npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iStepNoiseType = STEPSOUND_NORMAL; + npc.m_iNpcStepVariation = STEPTYPE_NORMAL; + + func_NPCDeath[npc.index] = Chemical_Specialist_NPCDeath; + func_NPCOnTakeDamage[npc.index] = Chemical_Specialist_OnTakeDamage; + func_NPCThink[npc.index] = Chemical_Specialist_ClotThink; + + //IDLE + KillFeed_SetKillIcon(npc.index, "panic_attack"); + npc.m_iState = 0; + npc.m_flGetClosestTargetTime = 0.0; + npc.StartPathing(); + npc.m_flSpeed = 230.0; + + int skin = 1; + SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); + + npc.m_iWearable1 = npc.EquipItem("head", "models/workshop/weapons/c_models/c_pro_smg/c_pro_smg.mdl"); + npc.m_iWearable2 = npc.EquipItem("head", "models/workshop/weapons/c_models/c_uberneedle/c_uberneedle.mdl"); + SetEntProp(npc.m_iWearable2, Prop_Send, "m_nSkin", 1); + npc.m_iWearable3 = npc.EquipItem("head", "models/workshop/player/items/engineer/invasion_life_support_system/invasion_life_support_system.mdl"); + SetEntProp(npc.m_iWearable3, Prop_Send, "m_nSkin", 1); + npc.m_iWearable4 = npc.EquipItem("head", "models/workshop/player/items/engineer/hwn2024_mannhattan_protect/hwn2024_mannhattan_protect.mdl"); + SetEntProp(npc.m_iWearable4, Prop_Send, "m_nSkin", 1); + npc.m_iWearable5 = npc.EquipItem("head", "models/workshop/player/items/engineer/hwn2024_nuclear_necessity/hwn2024_nuclear_necessity.mdl"); + SetEntProp(npc.m_iWearable5, Prop_Send, "m_nSkin", 1); + npc.m_iWearable6 = npc.EquipItem("head", "models/workshop/player/items/engineer/hwn2024_contaminated_carryall/hwn2024_contaminated_carryall.mdl"); + SetEntProp(npc.m_iWearable6, Prop_Send, "m_nSkin", 1); + + return npc; + } +} + +static void Chemical_Specialist_ClotThink(int iNPC) +{ + Chemical_Specialist npc = view_as(iNPC); + if(npc.m_flNextDelayTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + npc.Update(); + + if(npc.m_bAllowBackWalking) + { + if(IsValidEnemy(npc.index, npc.m_iTarget)) + { + float WorldSpaceVec[3]; WorldSpaceCenter(npc.m_iTarget, WorldSpaceVec); + npc.FaceTowards(WorldSpaceVec, 150.0); + } + } + + if(npc.m_blPlayHurtAnimation) + { + npc.AddGesture("ACT_MP_GESTURE_FLINCH_CHEST", false); + npc.m_blPlayHurtAnimation = false; + npc.PlayHurtSound(); + } + + if(npc.m_flNextThinkTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.1; + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + npc.m_iTarget = GetClosestTarget(npc.index); + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + GetRandomRetargetTime(); + } + + Elemental_ClearDamage(npc.index); + + if(IsValidEnemy(npc.index, npc.m_iTarget)) + { + float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget ); + + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + switch(Chemical_SpecialistSelfDefense(npc,GetGameTime(npc.index), npc.m_iTarget, flDistanceToTarget)) + { + case 0: + { + npc.m_bAllowBackWalking = false; + //Get the normal prediction code. + if(flDistanceToTarget < npc.GetLeadRadius()) + { + float vPredictedPos[3]; + PredictSubjectPosition(npc, npc.m_iTarget,_,_, vPredictedPos); + npc.SetGoalVector(vPredictedPos); + } + else + { + npc.SetGoalEntity(npc.m_iTarget); + } + } + case 1: + { + npc.m_bAllowBackWalking = true; + float vBackoffPos[3]; + BackoffFromOwnPositionAndAwayFromEnemy(npc, npc.m_iTarget,_,vBackoffPos); + npc.SetGoalVector(vBackoffPos, true); //update more often, we need it + } + } + } + else + { + npc.m_flGetClosestTargetTime = 0.0; + npc.m_iTarget = GetClosestTarget(npc.index); + } + npc.PlayIdleAlertSound(); +} + +static Action Chemical_Specialist_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) +{ + Chemical_Specialist npc = view_as(victim); + + if(attacker <= 0) + return Plugin_Continue; + + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } + + return Plugin_Changed; +} + +static void Chemical_Specialist_NPCDeath(int entity) +{ + Chemical_Specialist npc = view_as(entity); + if(!npc.m_bGib) + npc.PlayDeathSound(); + + if(IsValidEntity(npc.m_iWearable6)) + RemoveEntity(npc.m_iWearable6); + if(IsValidEntity(npc.m_iWearable5)) + RemoveEntity(npc.m_iWearable5); + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + if(IsValidEntity(npc.m_iWearable3)) + RemoveEntity(npc.m_iWearable3); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); +} + +static int Chemical_SpecialistSelfDefense(Chemical_Specialist npc, float gameTime, int target, float distance) +{ + if(gameTime > npc.m_flNextMeleeAttack) + { + if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 2.5)) + { + int Enemy_I_See = Can_I_See_Enemy(npc.index, target); + if(IsValidEnemy(npc.index, Enemy_I_See)) + { + npc.AddGesture("ACT_MP_ATTACK_STAND_SECONDARY"); + npc.m_iTarget = Enemy_I_See; + npc.PlayRangeSound(); + float vecTarget[3]; WorldSpaceCenter(target, vecTarget); + npc.FaceTowards(vecTarget, 20000.0); + Handle swingTrace; + if(npc.DoSwingTrace(swingTrace, target, { 9999.0, 9999.0, 9999.0 })) + { + target = TR_GetEntityIndex(swingTrace); + + float vecHit[3]; + TR_GetEndPosition(vecHit, swingTrace); + float origin[3], angles[3]; + view_as(npc.index).GetAttachment("effect_hand_r", origin, angles); + ShootLaser(npc.index, "bullet_tracer02_blue", origin, vecHit, false ); + npc.m_flNextMeleeAttack = gameTime + 0.5; + + if(IsValidEnemy(npc.index, target)) + { + float damageDealt = 35.0; + if(ShouldNpcDealBonusDamage(target)) + damageDealt *= 3.0; + int ElementalDamge = 25; + if(NpcStats_VictorianCallToArms(npc.index)) + ElementalDamge *= 2; + Elemental_AddNervousDamage(target, npc.index, ElementalDamge); + + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_BULLET, -1, _, vecHit); + } + } + delete swingTrace; + } + if(distance > (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 3.5)) + { + //target is too far, try to close in + return 0; + } + else if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 1.5)) + { + if(Can_I_See_Enemy_Only(npc.index, target)) + { + //target is too close, try to keep distance + return 1; + } + } + return 0; + } + else + { + if(distance > (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 3.5)) + { + //target is too far, try to close in + return 0; + } + else if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 1.5)) + { + if(Can_I_See_Enemy_Only(npc.index, target)) + { + //target is too close, try to keep distance + return 1; + } + } + } + } + else + { + if(distance > (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 3.5)) + { + //target is too far, try to close in + return 0; + } + else if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 1.5)) + { + if(Can_I_See_Enemy_Only(npc.index, target)) + { + //target is too close, try to keep distance + return 1; + } + } + } + return 0; +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_chemical_spreader.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_chemical_spreader.sp new file mode 100644 index 0000000000..0d2eec1fe2 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_chemical_spreader.sp @@ -0,0 +1,341 @@ +#pragma semicolon 1 +#pragma newdecls required + + +static const char g_DeathSounds[][] = { + "vo/pyro_paincrticialdeath01.mp3", + "vo/pyro_paincrticialdeath02.mp3", + "vo/pyro_paincrticialdeath03.mp3", +}; + +static const char g_HurtSounds[][] = { + "vo/pyro_painsharp01.mp3", + "vo/pyro_painsharp02.mp3", + "vo/pyro_painsharp03.mp3", + "vo/pyro_painsharp04.mp3", + "vo/pyro_painsharp05.mp3", +}; +static const char g_IdleAlertedSounds[][] = { + "vo/taunts/pyro_taunts01.mp3", + "vo/taunts/pyro_taunts02.mp3", + "vo/taunts/pyro_taunts03.mp3", +}; + + +void ChemicalSpreader_OnMapStart_NPC() +{ + for (int i = 0; i < (sizeof(g_DeathSounds)); i++) { PrecacheSound(g_DeathSounds[i]); } + for (int i = 0; i < (sizeof(g_HurtSounds)); i++) { PrecacheSound(g_HurtSounds[i]); } + for (int i = 0; i < (sizeof(g_IdleAlertedSounds)); i++) { PrecacheSound(g_IdleAlertedSounds[i]); } + PrecacheSound("weapons/flame_thrower_loop.wav"); + PrecacheSound("weapons/flame_thrower_pilot.wav"); + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Chemical Spreader"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_chemical_spreader"); + strcopy(data.Icon, sizeof(data.Icon), "victoria_pulverizer"); + data.IconCustom = true; + data.Flags = 0; + data.Category = Type_Victoria; + data.Func = ClotSummon; + int id = NPC_Add(data); + Rogue_Paradox_AddWinterNPC(id); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int team) +{ + return ChemicalSpreader(vecPos, vecAng, team); +} + +methodmap ChemicalSpreader < CClotBody +{ + + property int i_GunMode + { + public get() { return i_TimesSummoned[this.index]; } + public set(int TempValueForProperty) { i_TimesSummoned[this.index] = TempValueForProperty; } + } + public void PlayIdleAlertSound() + { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + + } + + public void PlayHurtSound() + { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + + this.m_flNextHurtSound = GetGameTime(this.index) + 0.4; + + EmitSoundToAll(g_HurtSounds[GetRandomInt(0, sizeof(g_HurtSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + + } + + property float m_flPulveriserAttackDelay + { + public get() { return fl_AbilityOrAttack[this.index][1]; } + public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][1] = TempValueForProperty; } + } + public void PlayDeathSound() + { + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + public void PlayMinigunSound(bool Shooting) + { + if(Shooting) + { + if(this.i_GunMode != 0) + { + StopSound(this.index, SNDCHAN_STATIC, "weapons/flame_thrower_pilot.wav"); + EmitSoundToAll("weapons/flame_thrower_loop.wav", this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, 1.20); + } + this.i_GunMode = 0; + } + else + { + if(this.i_GunMode != 1) + { + StopSound(this.index, SNDCHAN_STATIC, "weapons/flame_thrower_loop.wav"); + EmitSoundToAll("weapons/flame_thrower_pilot.wav", this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, 1.20); + } + this.i_GunMode = 1; + } + } + + public ChemicalSpreader(float vecPos[3], float vecAng[3], int ally) + { + ChemicalSpreader npc = view_as(CClotBody(vecPos, vecAng, "models/player/pyro.mdl", "1.0", "3000", ally)); + + i_NpcWeight[npc.index] = 1; + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + int iActivity = npc.LookupActivity("ACT_MP_RUN_PRIMARY"); + if(iActivity > 0) npc.StartActivity(iActivity); + + SetVariantInt(0); + AcceptEntityInput(npc.index, "SetBodyGroup"); + + npc.m_flNextMeleeAttack = 0.0; + + npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iStepNoiseType = STEPSOUND_NORMAL; + npc.m_iNpcStepVariation = STEPTYPE_NORMAL; + + func_NPCDeath[npc.index] = view_as(ChemicalSpreader_NPCDeath); + func_NPCOnTakeDamage[npc.index] = view_as(ChemicalSpreader_OnTakeDamage); + func_NPCThink[npc.index] = view_as(ChemicalSpreader_ClotThink); + + + + npc.StartPathing(); + npc.m_flSpeed = 280.0; + + + int skin = 1; + SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); + + npc.m_iWearable1 = npc.EquipItem("head", "models/weapons/c_models/c_drg_phlogistinator/c_drg_phlogistinator.mdl"); + npc.m_iWearable2 = npc.EquipItem("head", "models/player/items/pyro/drg_pyro_fueltank.mdl"); + npc.m_iWearable3 = npc.EquipItem("head", "models/workshop/player/items/all_class/dec15_patriot_peak/dec15_patriot_peak_pyro.mdl"); + npc.m_iWearable4 = npc.EquipItem("head", "models/workshop/player/items/pyro/spr18_hot_case/spr18_hot_case.mdl"); + npc.m_iWearable5 = npc.EquipItem("head", "models/workshop/player/items/pyro/dec25_veterans_visor/dec25_veterans_visor.mdl"); + + SetEntProp(npc.m_iWearable1, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable2, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable3, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable4, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable5, Prop_Send, "m_nSkin", skin); + + SetVariantString("1.5"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + SetVariantString("2.0"); + AcceptEntityInput(npc.m_iWearable2, "SetModelScale"); + + NpcColourCosmetic_ViaPaint(npc.m_iWearable3, 6637376); + NpcColourCosmetic_ViaPaint(npc.m_iWearable4, 1581885); + NpcColourCosmetic_ViaPaint(npc.m_iWearable5, 15787660); + + return npc; + } +} + +public void ChemicalSpreader_ClotThink(int iNPC) +{ + ChemicalSpreader npc = view_as(iNPC); + if(npc.m_flNextDelayTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + npc.Update(); + + if(npc.m_blPlayHurtAnimation) + { + npc.AddGesture("ACT_MP_GESTURE_FLINCH_CHEST", false); + npc.m_blPlayHurtAnimation = false; + npc.PlayHurtSound(); + } + + if(npc.m_flNextThinkTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.1; + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + npc.m_iTarget = GetClosestTarget(npc.index); + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + GetRandomRetargetTime(); + } + + if(IsValidEnemy(npc.index, npc.m_iTarget)) + { + float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget ); + + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + if(flDistanceToTarget < npc.GetLeadRadius()) + { + float vPredictedPos[3]; + PredictSubjectPosition(npc, npc.m_iTarget,_,_, vPredictedPos); + npc.SetGoalVector(vPredictedPos); + } + else + { + npc.SetGoalEntity(npc.m_iTarget); + } + ChemicalSpreaderSelfDefense(npc); + } + else + { + npc.PlayMinigunSound(false); + npc.m_flGetClosestTargetTime = 0.0; + npc.m_iTarget = GetClosestTarget(npc.index); + } + npc.PlayIdleAlertSound(); +} + +public Action ChemicalSpreader_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) +{ + ChemicalSpreader npc = view_as(victim); + + if(attacker <= 0) + return Plugin_Continue; + + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } + + return Plugin_Changed; +} + +public void ChemicalSpreader_NPCDeath(int entity) +{ + ChemicalSpreader npc = view_as(entity); + if(!npc.m_bGib) + { + npc.PlayDeathSound(); + } + + StopSound(npc.index, SNDCHAN_STATIC, "weapons/flame_thrower_loop.wav"); + StopSound(npc.index, SNDCHAN_STATIC, "weapons/flame_thrower_pilot.wav"); + StopSound(npc.index, SNDCHAN_STATIC, "weapons/flame_thrower_loop.wav"); + StopSound(npc.index, SNDCHAN_STATIC, "weapons/flame_thrower_pilot.wav"); + + if(IsValidEntity(npc.m_iWearable5)) + RemoveEntity(npc.m_iWearable5); + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + if(IsValidEntity(npc.m_iWearable3)) + RemoveEntity(npc.m_iWearable3); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); + +} + +void ChemicalSpreaderSelfDefense(ChemicalSpreader npc) +{ + if(npc.m_flPulveriserAttackDelay > GetGameTime(npc.index)) + { + return; + } + npc.m_flPulveriserAttackDelay = GetGameTime(npc.index) + 0.2; + int target; + target = npc.m_iTarget; + //some Ranged units will behave differently. + //not this one. + float vecTarget[3]; WorldSpaceCenter(target, vecTarget); + bool SpinSound = true; + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + if(flDistanceToTarget < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 5.0)) + { + npc.PlayMinigunSound(true); + SpinSound = false; + npc.FaceTowards(vecTarget, 20000.0); + int projectile = npc.FireParticleRocket(vecTarget, 8.0, 1000.0, 150.0, "unusual_icetornado_blue_parent", true); + SDKUnhook(projectile, SDKHook_StartTouch, Rocket_Particle_StartTouch); + int particle = EntRefToEntIndex(i_WandParticle[projectile]); + CreateTimer(0.5, Timer_RemoveEntity, EntIndexToEntRef(projectile), TIMER_FLAG_NO_MAPCHANGE); + CreateTimer(0.5, Timer_RemoveEntity, EntIndexToEntRef(particle), TIMER_FLAG_NO_MAPCHANGE); + + SDKHook(projectile, SDKHook_StartTouch, ChemicalSpreader_Rocket_Particle_StartTouch); + } + if(SpinSound) + npc.PlayMinigunSound(false); +} + + + +public void ChemicalSpreader_Rocket_Particle_StartTouch(int entity, int target) +{ + if(target > 0 && target < MAXENTITIES) //did we hit something??? + { + int owner = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity"); + if(!IsValidEntity(owner)) + { + owner = 0; + } + + int inflictor = h_ArrowInflictorRef[entity]; + if(inflictor != -1) + inflictor = EntRefToEntIndex(h_ArrowInflictorRef[entity]); + + if(inflictor == -1) + inflictor = owner; + + float ProjectileLoc[3]; + GetEntPropVector(entity, Prop_Data, "m_vecAbsOrigin", ProjectileLoc); + float DamageDeal = fl_rocket_particle_dmg[entity]; + if(ShouldNpcDealBonusDamage(target)) + DamageDeal *= h_BonusDmgToSpecialArrow[entity]; + + + SDKHooks_TakeDamage(target, owner, inflictor, DamageDeal, DMG_BULLET|DMG_PREVENT_PHYSICS_FORCE, -1); //acts like a kinetic rocket + + Elemental_AddNervousDamage(target, owner, 25, true); + int particle = EntRefToEntIndex(i_WandParticle[entity]); + if(IsValidEntity(particle)) + { + RemoveEntity(particle); + } + } + else + { + int particle = EntRefToEntIndex(i_WandParticle[entity]); + //we uhh, missed? + if(IsValidEntity(particle)) + { + RemoveEntity(particle); + } + } + RemoveEntity(entity); +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_demolitionist.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_demolitionist.sp new file mode 100644 index 0000000000..0119c91680 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_demolitionist.sp @@ -0,0 +1,330 @@ +#pragma semicolon 1 +#pragma newdecls required + +static const char g_DeathSounds[][] = { + "vo/heavy_negativevocalization01.mp3", + "vo/heavy_negativevocalization02.mp3", + "vo/heavy_negativevocalization03.mp3" +}; + +static const char g_HurtSounds[][] = { + "vo/heavy_cartmovingforwardoffense14.mp3", +}; + +static const char g_IdleAlertedSounds[][] = { + "vo/heavy_specialcompleted03.mp3", + "vo/heavy_specialcompleted02.mp3", + "vo/taunts/heavy_taunts13.mp3", + "vo/taunts/heavy_taunts17.mp3", +}; + +static const char g_MeleeAttackSounds[][] = { + "weapons/demo_sword_swing1.wav", + "weapons/demo_sword_swing2.wav", + "weapons/demo_sword_swing3.wav" +}; + +static const char g_MeleeHitSounds[] = "weapons/bat_baseball_hit_flesh.wav"; + +static const char g_ExplosionSounds[] = "weapons/explode1.wav"; + + +void Demolitionist_OnMapStart_NPC() +{ + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Demolitionist"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_demolitionist"); + strcopy(data.Icon, sizeof(data.Icon), "victoria_bulldozer"); + data.IconCustom = true; + data.Flags = 0; + data.Category = Type_Victoria; + data.Precache = ClotPrecache; + data.Func = ClotSummon; + NPC_Add(data); +} + +static void ClotPrecache() +{ + PrecacheSoundArray(g_DeathSounds); + PrecacheSoundArray(g_HurtSounds); + PrecacheSoundArray(g_IdleAlertedSounds); + PrecacheSoundArray(g_MeleeAttackSounds); + PrecacheSound(g_MeleeHitSounds); + PrecacheModel("models/player/heavy.mdl"); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int ally) +{ + return Demolitionist(vecPos, vecAng, ally); +} + +methodmap Demolitionist < CClotBody +{ + public void PlayIdleAlertSound() + { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + } + public void PlayHurtSound() + { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + + this.m_flNextHurtSound = GetGameTime(this.index) + 0.4; + + EmitSoundToAll(g_HurtSounds[GetRandomInt(0, sizeof(g_HurtSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + } + public void PlayDeathSound() + { + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + } + public void PlayMeleeSound() + { + EmitSoundToAll(g_MeleeAttackSounds[GetRandomInt(0, sizeof(g_MeleeAttackSounds) - 1)], this.index, SNDCHAN_AUTO, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + } + public void PlayMeleeHitSound() + { + EmitSoundToAll(g_MeleeHitSounds, this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 90); + } + public void PlayExplosionSound() + { + EmitSoundToAll(g_ExplosionSounds, this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + } + + + public Demolitionist(float vecPos[3], float vecAng[3], int ally) + { + Demolitionist npc = view_as(CClotBody(vecPos, vecAng, "models/player/heavy.mdl", "1.4", "12000", ally, .isGiant = true)); + + i_NpcWeight[npc.index] = 3; + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + int iActivity = npc.LookupActivity("ACT_MP_RUN_MELEE_ALLCLASS"); + if(iActivity > 0) npc.StartActivity(iActivity); + + func_NPCDeath[npc.index] = Demolitionist_NPCDeath; + func_NPCOnTakeDamage[npc.index] = Demolitionist_OnTakeDamage; + func_NPCThink[npc.index] = Demolitionist_ClotThink; + npc.m_flNextMeleeAttack = 0.0; + + npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iStepNoiseType = STEPSOUND_NORMAL; + npc.m_iNpcStepVariation = STEPTYPE_NORMAL; + + SetVariantInt(4); + AcceptEntityInput(npc.index, "SetBodyGroup"); + + npc.m_flRangedArmor = 1.0; + npc.m_flMeleeArmor = 0.75; + + //IDLE + KillFeed_SetKillIcon(npc.index, "the_maul"); + npc.m_iState = 0; + npc.m_flGetClosestTargetTime = 0.0; + npc.StartPathing(); + npc.m_flSpeed = 150.0; + + int skin = 1; + SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); + + npc.m_iWearable1 = npc.EquipItem("head", "models/workshop/weapons/c_models/c_powerjack/c_powerjack.mdl"); + SetVariantString("1.25"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + + npc.m_iWearable2 = npc.EquipItem("head", "models/weapons/c_models/c_sr3_punch/c_sr3_punch.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable2, "SetModelScale"); + + npc.m_iWearable3 = npc.EquipItem("head", "models/workshop/player/items/heavy/sbox2014_leftover_trap/sbox2014_leftover_trap.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable3, "SetModelScale"); + + npc.m_iWearable4 = npc.EquipItem("head", "models/workshop/player/items/soldier/soldier_warpig/soldier_warpig.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable4, "SetModelScale"); + SetEntProp(npc.m_iWearable4, Prop_Send, "m_nSkin", skin); + + npc.m_iWearable5 = npc.EquipItem("head", "models/player/items/heavy/heavy_wolf_chest.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable5, "SetModelScale"); + SetEntProp(npc.m_iWearable5, Prop_Send, "m_nSkin", skin); + + npc.m_iWearable6 = npc.EquipItem("head", "models/workshop/player/items/heavy/dec25_punchers_polar_style3/dec25_punchers_polar_style3.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable5, "SetModelScale"); + SetEntProp(npc.m_iWearable6, Prop_Send, "m_nSkin", skin); + + return npc; + } +} + +static void Demolitionist_ClotThink(int iNPC) +{ + Demolitionist npc = view_as(iNPC); + if(npc.m_flNextDelayTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + npc.Update(); + + if(npc.m_blPlayHurtAnimation) + { + npc.AddGesture("ACT_MP_GESTURE_FLINCH_CHEST", false); + npc.m_blPlayHurtAnimation = false; + npc.PlayHurtSound(); + } + + if(npc.m_flNextThinkTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.1; + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + npc.m_iTarget = GetClosestTarget(npc.index); + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + GetRandomRetargetTime(); + } + + if(IsValidEnemy(npc.index, npc.m_iTarget)) + { + float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget ); + + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + if(flDistanceToTarget < npc.GetLeadRadius()) + { + float vPredictedPos[3]; + PredictSubjectPosition(npc, npc.m_iTarget,_,_, vPredictedPos); + npc.SetGoalVector(vPredictedPos); + } + else + { + npc.SetGoalEntity(npc.m_iTarget); + } + DemolitionistSelfDefense(npc,GetGameTime(npc.index), npc.m_iTarget, flDistanceToTarget); + } + else + { + npc.m_flGetClosestTargetTime = 0.0; + npc.m_iTarget = GetClosestTarget(npc.index); + } + npc.PlayIdleAlertSound(); +} + +static Action Demolitionist_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) +{ + Demolitionist npc = view_as(victim); + + if(attacker <= 0) + return Plugin_Continue; + + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } + return Plugin_Changed; +} + +static void Demolitionist_NPCDeath(int entity) +{ + Demolitionist npc = view_as(entity); + if(!npc.m_bGib) + { + npc.PlayDeathSound(); + } + + if(IsValidEntity(npc.m_iWearable6)) + RemoveEntity(npc.m_iWearable6); + if(IsValidEntity(npc.m_iWearable5)) + RemoveEntity(npc.m_iWearable5); + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + if(IsValidEntity(npc.m_iWearable3)) + RemoveEntity(npc.m_iWearable3); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); + +} + +static void DemolitionistSelfDefense(Demolitionist npc, float gameTime, int target, float distance) +{ + if(npc.m_flAttackHappens) + { + if(npc.m_flAttackHappens < gameTime) + { + npc.m_flAttackHappens = 0.0; + Handle swingTrace; + float VecEnemy[3]; WorldSpaceCenter(npc.m_iTarget, VecEnemy); + npc.FaceTowards(VecEnemy, 15000.0); + if(npc.DoSwingTrace(swingTrace, npc.m_iTarget,_,_,_,1)) //Big range, but dont ignore buildings if somehow this doesnt count as a raid to be sure. + { + target = TR_GetEntityIndex(swingTrace); + + float vecHit[3]; + TR_GetEndPosition(vecHit, swingTrace); + + if(IsValidEnemy(npc.index, target)) + { + float damageDealt = 75.0; + if(ShouldNpcDealBonusDamage(target)) + damageDealt *= 8.0; + + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); + Explode_Logic_Custom(40.0, -1, npc.index, -1, VecEnemy, 125.0, _, 0.75, true, _, false, _, Demolitionist_ExplodeHit); + ParticleEffectAt(VecEnemy, "ExplosionCore_buildings", 0.5); + + // Hit sound + npc.PlayMeleeHitSound(); + npc.PlayExplosionSound(); + } + } + delete swingTrace; + } + } + + if(gameTime > npc.m_flNextMeleeAttack) + { + if(distance < (GIANT_ENEMY_MELEE_RANGE_FLOAT_SQUARED)) + { + int Enemy_I_See; + Enemy_I_See = Can_I_See_Enemy(npc.index, npc.m_iTarget); + if(IsValidEnemy(npc.index, Enemy_I_See)) + { + npc.m_iTarget = Enemy_I_See; + npc.PlayMeleeSound(); + npc.AddGesture("ACT_MP_ATTACK_STAND_MELEE_ALLCLASS",_,_,_,0.5); + npc.m_flAttackHappens = gameTime + 0.45; + npc.m_flDoingAnimation = gameTime + 0.45; + npc.m_flNextMeleeAttack = gameTime + 1.5; + } + } + } +} + +static void Demolitionist_ExplodeHit(int entity, int victim, float damage, int weapon) +{ + float vecHit[3]; WorldSpaceCenter(victim, vecHit); + if(GetTeam(entity) != GetTeam(victim)) + { + int inflictor = h_ArrowInflictorRef[entity]; + if(inflictor != -1) + inflictor = EntRefToEntIndex(h_ArrowInflictorRef[entity]); + + if(inflictor == -1) + inflictor = entity; + damage = 200.0; + if(ShouldNpcDealBonusDamage(victim)) + damage *= 8.0; + if(NpcStats_VictorianCallToArms(entity)) + damage *= 2.0; + SDKHooks_TakeDamage(victim, entity, inflictor, damage, DMG_BLAST, -1, _, vecHit); + } +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_gasleader.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_gasleader.sp new file mode 100644 index 0000000000..e39610d183 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_gasleader.sp @@ -0,0 +1,770 @@ +#pragma semicolon 1 +#pragma newdecls required + +static char g_DeathSounds[][] = { + "npc/combine_soldier/die1.wav", + "npc/combine_soldier/die2.wav", + "npc/combine_soldier/die3.wav", +}; + +static char g_HurtSound[][] = { + "npc/combine_soldier/pain1.wav", + "npc/combine_soldier/pain2.wav", + "npc/combine_soldier/pain3.wav", +}; + +static const char g_IdleAlertedSounds[][] = { + "npc/combine_soldier/vo/alert1.wav", + "npc/combine_soldier/vo/bouncerbouncer.wav", + "npc/combine_soldier/vo/boomer.wav", + "npc/combine_soldier/vo/contactconfim.wav", +}; + +static const char g_MeleeHitSounds[][] = { + "weapons/blade_slice_2.wav", + "weapons/blade_slice_3.wav", + "weapons/blade_slice_4.wav", +}; + +static const char g_MegaMeleeHitSounds[][] = { + "items/cart_explode.wav", +}; + +static const char g_RangeAttackSounds[] = "weapons/pistol/pistol_fire2.wav"; + +static const char g_MeleeAttackSounds[] = "weapons/demo_sword_swing1.wav"; + +void Gasleader_OnMapStart_NPC() +{ + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Victoria Gasleader"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_gasleader"); + strcopy(data.Icon, sizeof(data.Icon), "victoria_aviator"); + data.IconCustom = true; + data.Flags = 0; + data.Category = Type_Victoria; + data.Precache = ClotPrecache; + data.Func = ClotSummon; + NPC_Add(data); +} + +static void ClotPrecache() +{ + PrecacheSoundArray(g_DeathSounds); + PrecacheSoundArray(g_HurtSound); + PrecacheSoundArray(g_IdleAlertedSounds); + PrecacheSoundArray(g_MeleeHitSounds); + PrecacheSoundArray(g_MegaMeleeHitSounds); + PrecacheSound(g_RangeAttackSounds); + PrecacheSound(g_MeleeAttackSounds); + PrecacheModel(COMBINE_CUSTOM_MODEL); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int team) +{ + return Gasleader(vecPos, vecAng, team); +} +methodmap Gasleader < CClotBody +{ + property int m_iAlliesDied + { + public get() { return i_OverlordComboAttack[this.index]; } + public set(int TempValueForProperty) { i_OverlordComboAttack[this.index] = TempValueForProperty; } + } + property int m_iAlliesMaxDeath + { + public get() { return i_TimesSummoned[this.index]; } + public set(int TempValueForProperty) { i_TimesSummoned[this.index] = TempValueForProperty; } + } + property float m_flPercentageAngry + { + public get() { return fl_Charge_delay[this.index]; } + public set(float TempValueForProperty) { fl_Charge_delay[this.index] = TempValueForProperty; } + } + public void PlayIdleAlertSound() + { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + } + public void PlayHurtSound() + { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + + this.m_flNextHurtSound = GetGameTime(this.index) + 0.4; + + EmitSoundToAll(g_HurtSound[GetRandomInt(0, sizeof(g_HurtSound) - 1)], this.index, SNDCHAN_VOICE, BOSS_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + public void PlayDeathSound() + { + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, BOSS_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + public void PlayMeleeSound() + { + EmitSoundToAll(g_MeleeAttackSounds, this.index, SNDCHAN_AUTO, BOSS_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + public void PlayRangedSound() { + EmitSoundToAll(g_RangeAttackSounds, this.index, _, BOSS_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + public void PlayMeleeHitSound() + { + EmitSoundToAll(g_MeleeHitSounds[GetRandomInt(0, sizeof(g_MeleeHitSounds) - 1)], this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + public void PlayMegaMeleeHitSound() + { + EmitSoundToAll(g_MegaMeleeHitSounds[GetRandomInt(0, sizeof(g_MegaMeleeHitSounds) - 1)], this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME, 80); + } + + property int i_GunMode + { + public get() { return i_TimesSummoned[this.index]; } + public set(int TempValueForProperty) { i_TimesSummoned[this.index] = TempValueForProperty; } + } + + public Gasleader(float vecPos[3], float vecAng[3], int ally) + { + Gasleader npc = view_as(CClotBody(vecPos, vecAng, COMBINE_CUSTOM_MODEL, "1.55", "50000", ally)); + + i_NpcWeight[npc.index] = 3; + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + SetVariantInt(3); + AcceptEntityInput(npc.index, "SetBodyGroup"); + + npc.SetActivity("ACT_CUSTOM_WALK_EAGLE"); + npc.m_iChanged_WalkCycle = 2; + + npc.m_flNextMeleeAttack = 0.0; + npc.m_flNextRangedAttack = 0.0; + + npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iStepNoiseType = STEPSOUND_NORMAL; + npc.m_iNpcStepVariation = STEPTYPE_NORMAL; + + func_NPCDeath[npc.index] = view_as(Gasleader_NPCDeath); + func_NPCOnTakeDamage[npc.index] = view_as(Gasleader_OnTakeDamage); + func_NPCThink[npc.index] = view_as(Gasleader_ClotThink); + //func_NPCDeathForward[npc.index] = Gasleader_AllyDeath; + + npc.i_GunMode = 0; + + npc.StartPathing(); + npc.m_flSpeed = 250.0; + float MaxAlliesDeath = 50.0; + MaxAlliesDeath *= MultiGlobalEnemy; + npc.m_iAlliesMaxDeath = RoundToCeil(MaxAlliesDeath); + npc.m_flRangedSpecialDelay = GetGameTime(npc.index) + 0.5; + + npc.m_flPercentageAngry = 0.0; + npc.m_iAlliesDied = 0; + npc.Anger = false; + + if(!IsValidEntity(RaidBossActive)) + { + RaidModeScaling = 0.0; //just a safety net + RaidBossActive = EntIndexToEntRef(npc.index); + RaidModeTime = GetGameTime(npc.index) + 9000.0; + RaidAllowsBuildings = true; + } + + int skin = 1; + SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); + + npc.m_iWearable1 = npc.EquipItem("weapon_bone", "models/weapons/w_pistol.mdl"); + SetVariantString("1.5"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + + npc.m_iWearable2 = npc.EquipItem("thorns_backpack_1", "models/weapons/c_models/c_claymore/c_claymore_xmas.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable2, "SetModelScale"); + + npc.m_iWearable3 = npc.EquipItem("head", "models/workshop/player/items/engineer/hwn2024_contaminated_carryall/hwn2024_contaminated_carryall.mdl"); + SetVariantString("3.0"); + AcceptEntityInput(npc.m_iWearable3, "SetModelScale"); + + npc.m_iWearable4 = npc.EquipItem("head", "models/workshop/player/items/soldier/tw_soldierbot_armor/tw_soldierbot_armor.mdl"); + SetVariantString("1.33"); + AcceptEntityInput(npc.m_iWearable4, "SetModelScale"); + + npc.m_iWearable5 = npc.EquipItem("head","models/workshop/player/items/soldier/thief_soldier_helmet/thief_soldier_helmet.mdl"); + SetVariantString("1.25"); + AcceptEntityInput(npc.m_iWearable5, "SetModelScale"); + + npc.m_iWearable6 = ParticleEffectAt_Parent(vecPos, "utaunt_tarotcard_blue_glow", npc.index, "m_vecAbsOrigin", {0.0,0.0,0.0}); + + npc.m_iWearable9 = ParticleEffectAt_Parent(vecPos, "utaunt_poweraura_blue_beam", npc.index, "m_vecAbsOrigin", {0.0,0.0,0.0}); + + SetEntProp(npc.m_iWearable2, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable3, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable4, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable5, Prop_Send, "m_nSkin", skin); + + npc.m_iOverlordComboAttack = 0; + + + return npc; + } +} + +static void Gasleader_ClotThink(int iNPC) +{ + Gasleader npc = view_as(iNPC); + float gametime = GetGameTime(npc.index); + if(npc.m_flNextDelayTime > gametime) + return; + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + npc.Update(); + + if(npc.m_blPlayHurtAnimation) + { + npc.AddGesture("ACT_MP_GESTURE_FLINCH_CHEST", false); + npc.m_blPlayHurtAnimation = false; + npc.PlayHurtSound(); + } + + GrantEntityArmor(iNPC, true, 0.33, 0.5, 0); //50% res armor + + if(npc.Anger == false) + { + float vecMe[3]; WorldSpaceCenter(npc.index, vecMe); + float radius = 500.0; + GasleaderEffect(npc.index, radius); + if(gametime > npc.m_flRangedSpecialDelay) + { + Explode_Logic_Custom(10.0, -1, npc.index, -1, vecMe, radius, _, 0.75, true, _, false, _, Gasleader_ExplodePost); + npc.m_flRangedSpecialDelay = gametime + 0.5; + } + float VecI[3]; WorldSpaceCenter(npc.index, VecI); + for(int entitycount; entitycount gametime) + return; + npc.m_flNextThinkTime = gametime + 0.1; + + if(npc.m_flGetClosestTargetTime (victim); + + if(attacker <= 0) + return Plugin_Continue; + + if(npc.m_flArmorCount <= 0.0 && npc.Anger == false) + { + npc.Anger = true; + npc.m_iChanged_WalkCycle = 2; + if(IsValidEntity(npc.m_iWearable3)) + RemoveEntity(npc.m_iWearable3); + } + + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } + + return Plugin_Changed; +} + +static void Gasleader_NPCDeath(int entity) +{ + Gasleader npc = view_as(entity); + if(!npc.m_bGib) + npc.PlayDeathSound(); + + if(IsValidEntity(npc.m_iWearable9)) + RemoveEntity(npc.m_iWearable9); + if(IsValidEntity(npc.m_iWearable8)) + RemoveEntity(npc.m_iWearable8); + if(IsValidEntity(npc.m_iWearable7)) + RemoveEntity(npc.m_iWearable7); + if(IsValidEntity(npc.m_iWearable6)) + RemoveEntity(npc.m_iWearable6); + if(IsValidEntity(npc.m_iWearable5)) + RemoveEntity(npc.m_iWearable5); + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + if(IsValidEntity(npc.m_iWearable3)) + RemoveEntity(npc.m_iWearable3); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); +} + +static int GasleaderSelfDefense(Gasleader npc, float gameTime, float distance) +{ + if(distance < NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED *3.0 || npc.m_flAttackHappenswillhappen) + { + if(npc.m_flNextMeleeAttack < gameTime) + { + if(!npc.m_flAttackHappenswillhappen) + { + if(npc.m_iOverlordComboAttack <= 2) + { + /* + switch(GetRandomInt(0,1)) + { + case 0: + { + npc.AddGesture("ACT_BLADEDANCE_ATTACK_LEFT"); + } + case 1: + { + npc.AddGesture("ACT_MILITIA_ATTACK"); + } + } + */ + npc.AddGesture("ACT_MILITIA_ATTACK"); + } + else + { + npc.AddGesture("ACT_SEABORN_ATTACK_TOOL_1"); + } + npc.PlayMeleeSound(); + npc.m_flAttackHappens = gameTime +0.25; + npc.m_flDoingAnimation = gameTime + 0.25; + npc.m_flAttackHappens_bullshit = gameTime + 0.35; + npc.m_flAttackHappenswillhappen = true; + } + if(npc.m_flAttackHappens < gameTime && npc.m_flAttackHappens_bullshit >= gameTime && npc.m_flAttackHappenswillhappen) + { + int HowManyEnemeisAoeMelee = 64; + Handle swingTrace; + float VecEnemy[3]; WorldSpaceCenter(npc.m_iTarget, VecEnemy); + npc.FaceTowards(VecEnemy, 20000.0); + npc.DoSwingTrace(swingTrace, npc.m_iTarget,_,_,_,1,_,HowManyEnemeisAoeMelee); + delete swingTrace; + for (int counter = 1; counter <= HowManyEnemeisAoeMelee; counter++) + { + if (i_EntitiesHitAoeSwing_NpcSwing[counter] > 0) + { + if(IsValidEntity(i_EntitiesHitAoeSwing_NpcSwing[counter])) + { + int target = i_EntitiesHitAoeSwing_NpcSwing[counter]; + float damageDealt = 115.0; + int ElementalDamage = 30; + if(NpcStats_VictorianCallToArms(npc.index)) + ElementalDamage *= 2; + if(ShouldNpcDealBonusDamage(target)) + damageDealt*=10.0; + if(npc.m_iOverlordComboAttack <= 2) + { + npc.m_iOverlordComboAttack++; + Elemental_AddNervousDamage(target, npc.index, ElementalDamage, true); + npc.PlayMeleeHitSound(); + npc.m_flNextMeleeAttack = gameTime + 0.65; + } + else + { + damageDealt *= 3.0; + npc.m_iOverlordComboAttack = 0; + ElementalDamage *= 3; + Elemental_AddNervousDamage(target, npc.index, ElementalDamage, true); + if(IsValidClient(target) && !HasSpecificBuff(target, "Fluid Movement")) + { + TF2_StunPlayer(target, 1.5, 0.5, TF_STUNFLAG_SLOWDOWN); + Client_Shake(target, 0, 25.0, 12.5, 1.5); + } + ParticleEffectAt(VecEnemy, "Explosion_ShockWave_01", 0.5); + npc.m_flNextMeleeAttack = gameTime + 1.0; + } + //damageDealt *= (npc.m_flPercentageAngry * 5.0) + 1.0; + float vecHit[3]; + WorldSpaceCenter(target, vecHit); + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); + } + } + } + /* + int HowManyEnemeisAoeMelee = 64; + Handle swingTrace; + float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget); + npc.FaceTowards(vecTarget, 20000.0); + if(npc.DoSwingTrace(swingTrace, npc.m_iTarget,_,_,_,1,_,HowManyEnemeisAoeMelee)) + { + for (int counter = 1; counter <= HowManyEnemeisAoeMelee; counter++) + { + int target = TR_GetEntityIndex(swingTrace); + float vecHit[3]; + TR_GetEndPosition(vecHit, swingTrace); + if(IsValidEnemy(npc.index, target)) + { + float damageDealt = 100.0; + int ElementalDamage = 30; + if(NpcStats_VictorianCallToArms(npc.index)) + ElementalDamage *= 2; + if(ShouldNpcDealBonusDamage(target)) + damageDealt*=10.0; + if(npc.m_iOverlordComboAttack <= 2) + { + npc.m_iOverlordComboAttack++; + Elemental_AddNervousDamage(target, npc.index, ElementalDamage, true); + npc.PlayMeleeHitSound(); + npc.m_flNextMeleeAttack = gameTime + 0.5; + } + else + { + damageDealt *= 3.0; + npc.m_iOverlordComboAttack = 0; + ElementalDamage *= 3.1; + Elemental_AddNervousDamage(target, npc.index, ElementalDamage, true); + if(IsValidClient(target) && !HasSpecificBuff(target, "Fluid Movement")) + { + TF2_StunPlayer(target, 1.5, 0.5, TF_STUNFLAG_SLOWDOWN); + Client_Shake(target, 0, 25.0, 12.5, 1.5); + } + npc.m_flNextMeleeAttack = gameTime + 1.0; + } + damageDealt *= (npc.m_flPercentageAngry * 5.0) + 1.0; + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); + } + } + } + */ + npc.m_flAttackHappenswillhappen = false; + } + else if(npc.m_flAttackHappens_bullshit < gameTime && npc.m_flAttackHappenswillhappen) + { + npc.m_flAttackHappenswillhappen = false; + npc.m_flNextMeleeAttack = gameTime + 0.1; + } + } + return 2; + } + + + if(npc.m_flNextRangedAttack < gameTime) + { + if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 25.0)) + { + int Enemy_I_See = Can_I_See_Enemy(npc.index, npc.m_iTarget); + + if(IsValidEnemy(npc.index, Enemy_I_See)) + { + npc.AddGesture("ACT_DARIO_ATTACK_GUN_1"); + npc.m_iTarget = Enemy_I_See; + npc.PlayRangedSound(); + float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget); + npc.FaceTowards(vecTarget, 30000.0); + Handle swingTrace; + if(npc.DoSwingTrace(swingTrace, npc.m_iTarget, { 9999.0, 9999.0, 9999.0 })) + { + int target = TR_GetEntityIndex(swingTrace); + + float vecHit[3]; + TR_GetEndPosition(vecHit, swingTrace); + float origin[3], angles[3]; + view_as(npc.m_iWearable1).GetAttachment("muzzle", origin, angles); + ShootLaser(npc.m_iWearable1, "bullet_tracer02_blue", origin, vecHit, false ); + + if(IsValidEnemy(npc.index, target)) + { + float damageDealt = 80.0; + if(ShouldNpcDealBonusDamage(target)) + damageDealt *= 10.0; + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_BULLET, -1, _, vecHit); + if(IsValidEnemy(npc.index, target)) + ApplyStatusEffect(npc.index, target, "Cripple", NpcStats_VictorianCallToArms(npc.index) ? 7.5 : 5.0); + + } + npc.m_flNextRangedAttack = gameTime + 1.0; + } + delete swingTrace; + } + if(distance > (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 8.0)) + return 0; + else if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 5.0)) + { + if(Can_I_See_Enemy_Only(npc.index, npc.m_iTarget)) + return 1; + } + return 0; + } + else + { + if(distance > (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 8.0)) + return 0; + else if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 5.0)) + { + if(Can_I_See_Enemy_Only(npc.index, npc.m_iTarget)) + return 1; + } + } + } + else + { + if(distance > (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 8.0)) + return 0; + else if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 5.0)) + { + if(Can_I_See_Enemy_Only(npc.index, npc.m_iTarget)) + return 1; + } + } + return 0; +} + +void GasleaderEffect(int entity, float range) +{ + float ProjectileLoc[3]; + GetEntPropVector(entity, Prop_Data, "m_vecAbsOrigin", ProjectileLoc); + spawnRing_Vectors(ProjectileLoc, range * 2.0, 0.0, 0.0, 10.0, "materials/sprites/laserbeam.vmt", 100, 150, 255, 175, 1, 0.1, 5.0, 0.1, 3); +} + +static void Gasleader_ExplodePost(int attacker, int victim, float damage, int weapon) +{ + Elemental_AddNervousDamage(victim, attacker, 3, true); +} + +/* +public void Gasleader_AllyDeath(int self, int ally) +{ + Gasleader npc = view_as(self); + + if(GetTeam(ally) != GetTeam(self)) + { + return; + } + + float AllyPos[3]; + GetEntPropVector(ally, Prop_Data, "m_vecAbsOrigin", AllyPos); + float SelfPos[3]; + GetEntPropVector(self, Prop_Data, "m_vecAbsOrigin", SelfPos); + float flDistanceToTarget = GetVectorDistance(SelfPos, AllyPos, true); + if(flDistanceToTarget < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 25.0)) + { + npc.m_iAlliesDied += 1; + + if(npc.m_iAlliesDied >= npc.m_iAlliesMaxDeath) + { + npc.m_flPercentageAngry = 1.0; + } + else + { + npc.m_flPercentageAngry = float(npc.m_iAlliesDied) / float(npc.m_iAlliesMaxDeath); + } + } + float flPos[3]; // original + float flAng[3]; // original + if(npc.m_flPercentageAngry == 1.0) + { + if(IsValidEntity(npc.m_iWearable7)) + { + RemoveEntity(npc.m_iWearable7); + } + if(!IsValidEntity(npc.m_iWearable7)) + { + npc.GetAttachment("m_vecAbsOrigin", flPos, flAng); + npc.m_iWearable7 = ParticleEffectAt_Parent(flPos, "utaunt_poweraura_red_beam", npc.index, "m_vecAbsOrigin", {0.0,0.0,0.0}); + } + } + else if(npc.m_flPercentageAngry > 0.5) + { + if(!IsValidEntity(npc.m_iWearable7)) + { + npc.GetAttachment("m_vecAbsOrigin", flPos, flAng); + + npc.m_iWearable7 = ParticleEffectAt_Parent(flPos, "utaunt_poweraura_blue_beam", npc.index, "m_vecAbsOrigin", {0.0,0.0,0.0}); + } + } +} +*/ \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_giant_armored_medic.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_giant_armored_medic.sp new file mode 100644 index 0000000000..1baf14db7f --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_giant_armored_medic.sp @@ -0,0 +1,375 @@ +#pragma semicolon 1 +#pragma newdecls required + + +static const char g_DeathSounds[][] = { + "vo/mvm/norm/medic_mvm_paincrticialdeath01.mp3", + "vo/mvm/norm/medic_mvm_paincrticialdeath02.mp3", + "vo/mvm/norm/medic_mvm_paincrticialdeath03.mp3" +}; + +static const char g_HurtSounds[][] = { + "vo/mvm/norm/medic_mvm_painsharp01.mp3", + "vo/mvm/norm/medic_mvm_painsharp02.mp3", + "vo/mvm/norm/medic_mvm_painsharp03.mp3", + "vo/mvm/norm/medic_mvm_painsharp04.mp3" +}; + +static const char g_IdleAlertedSounds[][] = { + "vo/mvm/norm/medic_mvm_battlecry01.mp3", + "vo/mvm/norm/medic_mvm_battlecry02.mp3", + "vo/mvm/norm/medic_mvm_battlecry03.mp3", + "vo/mvm/norm/medic_mvm_battlecry04.mp3" +}; + +void ArmoredMedic_OnMapStart_NPC() +{ + for (int i = 0; i < (sizeof(g_DeathSounds)); i++) { PrecacheSound(g_DeathSounds[i]); } + for (int i = 0; i < (sizeof(g_HurtSounds)); i++) { PrecacheSound(g_HurtSounds[i]); } + for (int i = 0; i < (sizeof(g_IdleAlertedSounds)); i++) { PrecacheSound(g_IdleAlertedSounds[i]); } + PrecacheModel(LASERBEAM); + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Giant Armored Medibot"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_giant_armored_medic"); + strcopy(data.Icon, sizeof(data.Icon), "medic_uber"); + data.IconCustom = false; + data.Flags = MVM_CLASS_FLAG_MINIBOSS; + data.Category = Type_Expidonsa; + data.Precache = ClotPrecache; + data.Func = ClotSummon; + NPC_Add(data); +} + +static void ClotPrecache() +{ + PrecacheSoundArray(g_DeathSounds); + PrecacheSoundArray(g_HurtSounds); + PrecacheSoundArray(g_IdleAlertedSounds); + PrecacheModel("models/bots/medic/bot_medic.mdl"); + PrecacheModel(LASERBEAM); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int team) +{ + return ArmoredMedic(vecPos, vecAng, team); +} + +methodmap ArmoredMedic < CClotBody +{ + public void PlayIdleAlertSound() { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + + + } + + public void PlayHurtSound() { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + + this.m_flNextHurtSound = GetGameTime(this.index) + 0.4; + + EmitSoundToAll(g_HurtSounds[GetRandomInt(0, sizeof(g_HurtSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + + + + } + + public void PlayDeathSound() { + + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + + + } + + public ArmoredMedic(float vecPos[3], float vecAng[3], int ally) + { + ArmoredMedic npc = view_as(CClotBody(vecPos, vecAng, "models/bots/medic/bot_medic.mdl", "1.35", "50000", ally, .isGiant = true)); + + i_NpcWeight[npc.index] = 3; + SetVariantInt(1); + AcceptEntityInput(npc.index, "SetBodyGroup"); + + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + int iActivity = npc.LookupActivity("ACT_MP_RUN_SECONDARY"); + if(iActivity > 0) npc.StartActivity(iActivity); + + + func_NPCDeath[npc.index] = ArmoredMedic_NPCDeath; + func_NPCOnTakeDamage[npc.index] = ArmoredMedic_OnTakeDamage; + func_NPCThink[npc.index] = ArmoredMedic_ClotThink; + npc.m_flNextMeleeAttack = 0.0; + + npc.m_iBleedType = BLEEDTYPE_METAL; + npc.m_iNpcStepVariation = 0; + + npc.m_flRangedArmor = 0.8; + npc.m_flMeleeArmor = 0.7; + + + //IDLE + npc.m_flSpeed = 150.0; + npc.m_iWearable5 = INVALID_ENT_REFERENCE; + Is_a_Medic[npc.index] = true; + + npc.m_bnew_target = false; + npc.StartPathing(); + + + int skin = 1; + SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); + + ApplyStatusEffect(npc.index, npc.index, "Clear Head", 999999.0); + ApplyStatusEffect(npc.index, npc.index, "Solid Stance", 999999.0); + ApplyStatusEffect(npc.index, npc.index, "Fluid Movement", 999999.0); + + npc.m_iWearable1 = npc.EquipItem("head", "models/workshop/player/items/engineer/spr18_cold_case/spr18_cold_case.mdl"); + SetVariantString("1.75"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + + SetEntProp(npc.m_iWearable1, Prop_Send, "m_nSkin", 1); + + npc.m_iWearable3 = npc.EquipItem("head", "models/weapons/c_models/c_proto_medigun/c_proto_medigun.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable3, "SetModelScale"); + + npc.m_iWearable2 = npc.EquipItem("head", "models/workshop/player/items/medic/robo_medic_physician_mask/robo_medic_physician_mask.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable2, "SetModelScale"); + + npc.m_iWearable6 = npc.EquipItem("head", "models/workshop/player/items/demo/sum20_hazard_headgear/sum20_hazard_headgear.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable6, "SetModelScale"); + + npc.m_iWearable7 = npc.EquipItem("head", "models/workshop/player/items/engineer/hwn2020_wavefinder/hwn2020_wavefinder.mdl"); + SetVariantString("1.0"); + AcceptEntityInput(npc.m_iWearable7, "SetModelScale"); + + SetEntProp(npc.m_iWearable3, Prop_Send, "m_nSkin", 1); + SetEntProp(npc.m_iWearable6, Prop_Send, "m_nSkin", 1); + SetEntProp(npc.m_iWearable7, Prop_Send, "m_nSkin", 1); + + NpcColourCosmetic_ViaPaint(npc.m_iWearable2, 15132390); + NpcColourCosmetic_ViaPaint(npc.m_iWearable6, 15132390); + NpcColourCosmetic_ViaPaint(npc.m_iWearable7, 15132390); + npc.StartPathing(); + + return npc; + } + public void StartHealing() + { + int im_iWearable3 = this.m_iWearable3; + if(im_iWearable3 != INVALID_ENT_REFERENCE) + { + this.Healing = true; + + // EmitSoundToAll("m_iWearable3s/medigun_heal.wav", this.index, SNDCHAN_m_iWearable3); + } + } + public void StopHealing() + { + int iBeam = this.m_iWearable5; + if(iBeam != INVALID_ENT_REFERENCE) + { + int iBeamTarget = GetEntPropEnt(iBeam, Prop_Send, "m_hOwnerEntity"); + if(IsValidEntity(iBeamTarget)) + { + AcceptEntityInput(iBeamTarget, "ClearParent"); + RemoveEntity(iBeamTarget); + } + + AcceptEntityInput(iBeam, "ClearParent"); + RemoveEntity(iBeam); + + EmitSoundToAll("weapons/medigun_no_target.wav", this.index, SNDCHAN_WEAPON); + + // StopSound(this.index, SNDCHAN_m_iWearable3, "m_iWearable3s/medigun_heal.wav"); + + this.Healing = false; + } + } +} + + +public void ArmoredMedic_ClotThink(int iNPC) +{ + ArmoredMedic npc = view_as(iNPC); + + if(npc.m_flNextDelayTime > GetGameTime(npc.index)) + { + return; + } + + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + + npc.Update(); + + if(npc.m_blPlayHurtAnimation) + { + npc.AddGesture("ACT_MP_GESTURE_FLINCH_CHEST", false); + npc.m_blPlayHurtAnimation = false; + npc.PlayHurtSound(); + } + + if(npc.m_flNextThinkTime > GetGameTime(npc.index)) + { + return; + } + + if(!IsValidAlly(npc.index, GetClosestAlly(npc.index))) + { + //there is no more valid ally, suicide. + SmiteNpcToDeath(npc.index); + return; + } + + npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.1; + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + int OldAlly = npc.m_iTargetAlly; + npc.m_iTargetAlly = GetClosestAlly(npc.index,_,_,ArmoredMedic_HealCheck); + if(!IsValidAlly(npc.index, npc.m_iTargetAlly)) + npc.m_iTargetAlly = GetClosestAlly(npc.index); + + if(OldAlly != npc.m_iTargetAlly) + npc.m_bnew_target = false; + + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + 1.0; + } + + int PrimaryThreatIndex = npc.m_iTargetAlly; + if(IsValidAlly(npc.index, PrimaryThreatIndex)) + { + npc.SetGoalEntity(PrimaryThreatIndex); + float vecTarget[3]; WorldSpaceCenter(PrimaryThreatIndex, vecTarget); + + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + + if(flDistanceToTarget < 400000 && Can_I_See_Enemy_Only(npc.index, PrimaryThreatIndex)) + { + if(flDistanceToTarget < 72500) + { + npc.StopPathing(); + } + else + { + npc.StartPathing(); + } + if(!npc.m_bnew_target) + { + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + npc.StartHealing(); + npc.m_iWearable4 = ConnectWithBeam(npc.m_iWearable3, PrimaryThreatIndex, 255, 215, 0, 3.0, 3.0, 1.35, LASERBEAM); + npc.Healing = true; + npc.m_bnew_target = true; + } + + if(IsValidEntity(npc.m_iWearable4)) + { + SetEntityRenderColor(npc.m_iWearable4, 255, 215, 0, 255); + } + int MaxHealth = ReturnEntityMaxHealth(PrimaryThreatIndex); + if(b_thisNpcIsABoss[PrimaryThreatIndex]) + MaxHealth = RoundToCeil(float(MaxHealth) * 0.00001); + + HealEntityGlobal(npc.index, PrimaryThreatIndex, float(MaxHealth), 1.0); + + ApplyStatusEffect(PrimaryThreatIndex, PrimaryThreatIndex, "Buffweiser", 1.1); + if(NpcStats_VictorianCallToArms(npc.index)) + { + ApplyStatusEffect(npc.index, PrimaryThreatIndex, "Taurine", 1.1); + } + float WorldSpaceVec[3]; WorldSpaceCenter(PrimaryThreatIndex, WorldSpaceVec); + npc.FaceTowards(WorldSpaceVec, 2000.0); + } + else + { + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + + npc.StartPathing(); + + npc.m_bnew_target = false; + } + } + else + { + //find new target to heal rapidly + npc.m_flGetClosestTargetTime = 0.0; + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + + npc.StartPathing(); + + npc.m_bnew_target = false; + } + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + npc.m_iTargetAlly = GetClosestAlly(npc.index,_,_,ArmoredMedic_HealCheck); + if(!IsValidAlly(npc.index, npc.m_iTargetAlly)) + npc.m_iTargetAlly = GetClosestAlly(npc.index); + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + 1.0; + } + npc.PlayIdleAlertSound(); +} + +public Action ArmoredMedic_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &m_iWearable3, float damageForce[3], float damagePosition[3], int damagecustom) +{ + ArmoredMedic npc = view_as(victim); + + if(attacker <= 0) + return Plugin_Continue; + + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } + + return Plugin_Changed; +} + +public void ArmoredMedic_NPCDeath(int entity) +{ + ArmoredMedic npc = view_as(entity); + if(!npc.m_bGib) + { + npc.PlayDeathSound(); + } + + Is_a_Medic[npc.index] = false; + if(IsValidEntity(npc.m_iWearable7)) + RemoveEntity(npc.m_iWearable7); + if(IsValidEntity(npc.m_iWearable6)) + RemoveEntity(npc.m_iWearable6); + if(IsValidEntity(npc.m_iWearable5)) + RemoveEntity(npc.m_iWearable5); + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + if(IsValidEntity(npc.m_iWearable3)) + RemoveEntity(npc.m_iWearable3); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); + npc.StopHealing(); +} + +public bool ArmoredMedic_HealCheck(int provider, int entity) +{ + int MaxHealth = ReturnEntityMaxHealth(entity); + MaxHealth = RoundToNearest(float(MaxHealth) * 1.49); + int Health = GetEntProp(entity, Prop_Data, "m_iHealth"); + if(MaxHealth <= Health) + return false; + + return true; +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_headhunter.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_headhunter.sp new file mode 100644 index 0000000000..2f794f7c51 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_headhunter.sp @@ -0,0 +1,449 @@ +#pragma semicolon 1 +#pragma newdecls required + +static const char g_DeathSounds[][] = { + "vo/sniper_negativevocalization01.mp3", + "vo/sniper_negativevocalization02.mp3", + "vo/sniper_negativevocalization03.mp3", + "vo/sniper_negativevocalization04.mp3", + "vo/sniper_negativevocalization05.mp3", + "vo/sniper_negativevocalization06.mp3", + "vo/sniper_negativevocalization07.mp3", + "vo/sniper_negativevocalization08.mp3", + "vo/sniper_negativevocalization09.mp3" +}; + +static const char g_HurtSounds[][] = { + "vo/sniper_painsharp01.mp3", + "vo/sniper_painsharp02.mp3", + "vo/sniper_painsharp03.mp3", + "vo/sniper_painsharp04.mp3", +}; +static const char g_IdleAlertedSounds[][] = { + "vo/sniper_specialcompleted01.mp3", + "vo/sniper_specialcompleted02.mp3", + "vo/sniper_specialcompleted03.mp3", + "vo/sniper_specialcompleted04.mp3", + "vo/sniper_specialcompleted05.mp3", + "vo/sniper_specialcompleted06.mp3", + "vo/sniper_specialcompleted07.mp3", + "vo/sniper_specialcompleted08.mp3", + "vo/sniper_specialcompleted09.mp3", + "vo/sniper_specialcompleted10.mp3", + "vo/sniper_specialcompleted11.mp3", + "vo/sniper_specialcompleted12.mp3", + "vo/sniper_specialcompleted13.mp3", + "vo/sniper_specialcompleted14.mp3", + "vo/sniper_specialcompleted15.mp3", + "vo/sniper_specialcompleted16.mp3", + "vo/sniper_specialcompleted17.mp3", + "vo/sniper_specialcompleted18.mp3", + "vo/sniper_specialcompleted19.mp3", + "vo/sniper_specialcompleted20.mp3", + "vo/sniper_specialcompleted21.mp3", + "vo/sniper_specialcompleted22.mp3", + "vo/sniper_specialcompleted23.mp3", + "vo/sniper_specialcompleted24.mp3", + "vo/sniper_specialcompleted25.mp3", + "vo/sniper_specialcompleted26.mp3", + "vo/sniper_specialcompleted27.mp3", + "vo/sniper_specialcompleted28.mp3", + "vo/sniper_specialcompleted29.mp3", + "vo/sniper_specialcompleted30.mp3", + "vo/sniper_specialcompleted31.mp3", + "vo/sniper_specialcompleted32.mp3", + "vo/sniper_specialcompleted33.mp3", + "vo/sniper_specialcompleted34.mp3", + "vo/sniper_specialcompleted35.mp3", + "vo/sniper_specialcompleted36.mp3", + "vo/sniper_specialcompleted37.mp3", + "vo/sniper_specialcompleted38.mp3", + "vo/sniper_specialcompleted39.mp3", + "vo/sniper_specialcompleted40.mp3", + "vo/sniper_specialcompleted41.mp3", + "vo/sniper_specialcompleted42.mp3", + "vo/sniper_specialcompleted43.mp3", + "vo/sniper_specialcompleted44.mp3", + "vo/sniper_specialcompleted45.mp3", + "vo/sniper_specialcompleted46.mp3" +}; + +static const char g_MeleeAttackSounds[][] = { + "weapons/doom_sniper_rifle.wav", +}; + + +void Victorian_Headhunter_OnMapStart_NPC() +{ + for (int i = 0; i < (sizeof(g_DeathSounds)); i++) { PrecacheSound(g_DeathSounds[i]); } + for (int i = 0; i < (sizeof(g_HurtSounds)); i++) { PrecacheSound(g_HurtSounds[i]); } + for (int i = 0; i < (sizeof(g_IdleAlertedSounds)); i++) { PrecacheSound(g_IdleAlertedSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeAttackSounds)); i++) { PrecacheSound(g_MeleeAttackSounds[i]); } + PrecacheModel("models/player/medic.mdl"); + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Victorian Headhunter"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_headhunter"); + strcopy(data.Icon, sizeof(data.Icon), "sniper_headshot"); + data.IconCustom = false; + data.Flags = MVM_CLASS_FLAG_SUPPORT; + data.Category = Type_Victoria; + data.Func = ClotSummon; + NPC_Add(data); +} + + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int team) +{ + return Victorian_Headhunter(vecPos, vecAng, team); +} + +methodmap Victorian_Headhunter < CClotBody +{ + public void PlayIdleAlertSound() + { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + + } + + public void PlayHurtSound() + { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + + this.m_flNextHurtSound = GetGameTime(this.index) + 0.4; + + EmitSoundToAll(g_HurtSounds[GetRandomInt(0, sizeof(g_HurtSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + + } + + public void PlayDeathSound() + { + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + + public void PlayMeleeSound() + { + EmitSoundToAll(g_MeleeAttackSounds[GetRandomInt(0, sizeof(g_MeleeAttackSounds) - 1)], this.index, SNDCHAN_AUTO, 60, _, BOSS_ZOMBIE_VOLUME); + } + + public Victorian_Headhunter(float vecPos[3], float vecAng[3], int ally) + { + Victorian_Headhunter npc = view_as(CClotBody(vecPos, vecAng, "models/player/sniper.mdl", "1.0", "4000", ally)); + + i_NpcWeight[npc.index] = 1; + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + int iActivity = npc.LookupActivity("ACT_MP_RUN_PRIMARY"); + if(iActivity > 0) npc.StartActivity(iActivity); + + SetVariantInt(2); + AcceptEntityInput(npc.index, "SetBodyGroup"); + + func_NPCDeath[npc.index] = view_as(Victorian_Headhunter_NPCDeath); + func_NPCOnTakeDamage[npc.index] = view_as(Victorian_Headhunter_OnTakeDamage); + func_NPCThink[npc.index] = view_as(Victorian_Headhunter_ClotThink); + + npc.m_iChanged_WalkCycle = 0; + + if(npc.m_iChanged_WalkCycle != 1) + { + npc.m_bisWalking = true; + npc.m_iChanged_WalkCycle = 1; + npc.SetActivity("ACT_MP_RUN_PRIMARY"); + npc.StartPathing(); + npc.m_flSpeed = 200.0; + } + npc.m_flNextMeleeAttack = GetGameTime() + 1.0; + + npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iStepNoiseType = STEPSOUND_NORMAL; + npc.m_iNpcStepVariation = STEPTYPE_NORMAL; + + + int skin = 1; + SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); + + npc.m_iWearable1 = npc.EquipItem("head", "models/weapons/c_models/c_bazaar_sniper/c_bazaar_sniper.mdl"); + npc.m_iWearable2 = npc.EquipItem("head", "models/workshop/player/items/all_class/riflemans_rallycap/riflemans_rallycap_sniper.mdl"); + npc.m_iWearable3 = npc.EquipItem("head", "models/workshop/weapons/c_models/c_uberneedle/c_uberneedle.mdl"); + npc.m_iWearable4 = npc.EquipItem("head", "models/workshop/player/items/sniper/xms2013_sniper_beard/xms2013_sniper_beard.mdl"); + npc.m_iWearable5 = npc.EquipItem("head", "models/workshop/player/items/sniper/sum20_jarmaments/sum20_jarmaments.mdl"); + npc.m_iWearable6 = npc.EquipItem("head", "models/workshop/player/items/sniper/dec25_sydney_shearling/dec25_sydney_shearling.mdl"); + SetEntProp(npc.m_iWearable1, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable2, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable3, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable4, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable5, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable6, Prop_Send, "m_nSkin", skin); + + NpcColourCosmetic_ViaPaint(npc.m_iWearable2, 1581885); + NpcColourCosmetic_ViaPaint(npc.m_iWearable6, 8626083); + + + TeleportDiversioToRandLocation(npc.index,_,1750.0, 1250.0); + + return npc; + } +} + +public void Victorian_Headhunter_ClotThink(int iNPC) +{ + Victorian_Headhunter npc = view_as(iNPC); + if(npc.m_flNextDelayTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + npc.Update(); + + if(npc.m_blPlayHurtAnimation) + { + npc.AddGesture("ACT_MP_GESTURE_FLINCH_CHEST", false); + npc.m_blPlayHurtAnimation = false; + npc.PlayHurtSound(); + } + + if(npc.m_flNextThinkTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.1; + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + npc.m_iTargetWalkTo = GetClosestTarget(npc.index); + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + GetRandomRetargetTime(); + } + + if(IsValidEnemy(npc.index, npc.m_iTargetWalkTo)) + { + float vecTarget[3]; WorldSpaceCenter(npc.m_iTargetWalkTo, vecTarget); + + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + int ExtraBehavior = Victorian_HeadhunterSelfDefense(npc,GetGameTime(npc.index)); + + switch(ExtraBehavior) + { + case 0: + { + if(npc.m_iChanged_WalkCycle != 1) + { + npc.m_bisWalking = true; + npc.m_iChanged_WalkCycle = 1; + npc.SetActivity("ACT_MP_RUN_PRIMARY"); + npc.StartPathing(); + npc.m_flSpeed = 200.0; + } + } + case 1: + { + if(npc.m_iChanged_WalkCycle != 2) + { + npc.m_bisWalking = false; + npc.m_iChanged_WalkCycle = 2; + npc.SetActivity("ACT_MP_CROUCH_DEPLOYED_IDLE"); + npc.StopPathing(); + npc.m_flSpeed = 0.0; + } + } + } + + if(flDistanceToTarget < npc.GetLeadRadius()) + { + float vPredictedPos[3]; + PredictSubjectPosition(npc, npc.m_iTargetWalkTo,_,_, vPredictedPos); + npc.SetGoalVector(vPredictedPos); + } + else + { + npc.SetGoalEntity(npc.m_iTargetWalkTo); + } + } + else + { + npc.m_flGetClosestTargetTime = 0.0; + npc.m_iTargetWalkTo = GetClosestTarget(npc.index); + } + npc.PlayIdleAlertSound(); +} + +public Action Victorian_Headhunter_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) +{ + Victorian_Headhunter npc = view_as(victim); + + if(attacker <= 0) + return Plugin_Continue; + + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } + + return Plugin_Changed; +} + +public void Victorian_Headhunter_NPCDeath(int entity) +{ + Victorian_Headhunter npc = view_as(entity); + if(!npc.m_bGib) + { + npc.PlayDeathSound(); + } + + if(IsValidEntity(npc.m_iWearable7)) + RemoveEntity(npc.m_iWearable7); + if(IsValidEntity(npc.m_iWearable6)) + RemoveEntity(npc.m_iWearable6); + if(IsValidEntity(npc.m_iWearable5)) + RemoveEntity(npc.m_iWearable5); + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + if(IsValidEntity(npc.m_iWearable3)) + RemoveEntity(npc.m_iWearable3); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); + +} + +int Victorian_HeadhunterSelfDefense(Victorian_Headhunter npc, float gameTime) +{ + if(!npc.m_flAttackHappens) + { + if(IsValidEnemy(npc.index,npc.m_iTarget)) + { + if(!Can_I_See_Enemy_Only(npc.index, npc.m_iTarget)) + { + npc.m_iTarget = GetClosestTarget(npc.index,_,_,_,_,_,_,true,_,_,true); + } + } + else + { + npc.m_iTarget = GetClosestTarget(npc.index,_,_,_,_,_,_,true,_,_,true); + if(!IsValidEnemy(npc.index,npc.m_iTarget)) + { + return 0; + } + } + if(!IsValidEnemy(npc.index,npc.m_iTarget)) + { + return 0; + } + } + + float VecEnemy[3]; WorldSpaceCenter(npc.m_iTarget, VecEnemy); + npc.FaceTowards(VecEnemy, 15000.0); + + static float ThrowPos[MAXENTITIES][3]; + float origin[3], angles[3]; + view_as(npc.m_iWearable1).GetAttachment("muzzle", origin, angles); + if(npc.m_flDoingAnimation > gameTime) + { + if(Can_I_See_Enemy_Only(npc.index, npc.m_iTarget)) + { + WorldSpaceCenter(npc.m_iTarget, ThrowPos[npc.index]); + float pos_npc[3]; + WorldSpaceCenter(npc.index, pos_npc); + float AngleAim[3]; + GetVectorAnglesTwoPoints(pos_npc, ThrowPos[npc.index], AngleAim); + Handle hTrace = TR_TraceRayFilterEx(pos_npc, AngleAim, MASK_SOLID, RayType_Infinite, BulletAndMeleeTrace, npc.index); + if(TR_DidHit(hTrace)) + { + TR_GetEndPosition(ThrowPos[npc.index], hTrace); + } + delete hTrace; + } + } + else + { + if(npc.m_flAttackHappens) + { + float pos_npc[3]; + WorldSpaceCenter(npc.index, pos_npc); + float AngleAim[3]; + GetVectorAnglesTwoPoints(pos_npc, ThrowPos[npc.index], AngleAim); + Handle hTrace = TR_TraceRayFilterEx(pos_npc, AngleAim, MASK_SOLID, RayType_Infinite, BulletAndMeleeTrace, npc.index); + if(TR_DidHit(hTrace)) + { + TR_GetEndPosition(ThrowPos[npc.index], hTrace); + } + delete hTrace; + } + } + if(npc.m_flAttackHappens) + { + TE_SetupBeamPoints(origin, ThrowPos[npc.index], Shared_BEAM_Laser, 0, 0, 0, 0.11, 5.0, 5.0, 0, 0.0, {0,125,125,100}, 3); + TE_SendToAll(0.0); + } + + npc.FaceTowards(ThrowPos[npc.index], 15000.0); + if(npc.m_flAttackHappens) + { + if(npc.m_flAttackHappens < gameTime) + { + npc.m_flAttackHappens = 0.0; + ShootLaser(npc.m_iWearable1, "bullet_tracer02_blue_crit", origin, ThrowPos[npc.index], false ); + float pos_npc[3]; + WorldSpaceCenter(npc.index, pos_npc); + float AngleAim[3]; + GetVectorAnglesTwoPoints(pos_npc, ThrowPos[npc.index], AngleAim); + Handle hTrace = TR_TraceRayFilterEx(pos_npc, AngleAim, MASK_SOLID, RayType_Infinite, BulletAndMeleeTrace, npc.index); + int Traced_Target = TR_GetEntityIndex(hTrace); + if(Traced_Target > 0) + { + WorldSpaceCenter(Traced_Target, ThrowPos[npc.index]); + } + else if(TR_DidHit(hTrace)) + { + TR_GetEndPosition(ThrowPos[npc.index], hTrace); + } + delete hTrace; + + int target = Can_I_See_Enemy(npc.index, npc.m_iTarget,_ ,ThrowPos[npc.index]); + npc.PlayMeleeSound(); + npc.AddGesture("ACT_MP_ATTACK_CROUCH_PRIMARY_DEPLOYED"); + if(IsValidEnemy(npc.index, target)) + { + float damageDealt = 100.0; + int elementaldamage = 50; + if(ShouldNpcDealBonusDamage(target)) + damageDealt *= 5.0; + + int weapon = GetEntPropEnt(target, Prop_Send, "m_hActiveWeapon"); + switch(i_CustomWeaponEquipLogic[weapon]) + { + case WEAPON_BATTILONS,WEAPON_OCEAN,WEAPON_ANCIENT_BANNER,WEAPON_SEABORN_MISC,WEAPON_BUFF_BANNER,WEAPON_OCEAN_PAP,WEAPON_ZEALOT_POTION,WEAPON_BUFFPOTION,WEAPON_KRITZKRIEG: + { + damageDealt *= 2.0; + elementaldamage *= 2; + } + } + + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_BULLET, -1, _, ThrowPos[npc.index]); + Elemental_AddNervousDamage(target, npc.index, elementaldamage); + } + } + } + + if(gameTime > npc.m_flNextMeleeAttack) + { + if(NpcStats_VictorianCallToArms(npc.index)) + { + npc.m_flAttackHappens = gameTime + 0.65; + } + else if(!NpcStats_VictorianCallToArms(npc.index)) + { + npc.m_flAttackHappens = gameTime + 1.00; + } + npc.m_flDoingAnimation = gameTime + 0.95; + npc.m_flNextMeleeAttack = gameTime + 2.00; + } + return 1; +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_protector.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_protector.sp new file mode 100644 index 0000000000..08dd48bd42 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_protector.sp @@ -0,0 +1,374 @@ +#pragma semicolon 1 +#pragma newdecls required + +static const char g_DeathSounds[][] = { + "vo/engineer_paincrticialdeath01.mp3", + "vo/engineer_paincrticialdeath02.mp3", + "vo/engineer_paincrticialdeath03.mp3", +}; + +static const char g_HurtSounds[][] = { + "vo/engineer_painsharp01.mp3", + "vo/engineer_painsharp02.mp3", + "vo/engineer_painsharp03.mp3", + "vo/engineer_painsharp04.mp3", + "vo/engineer_painsharp05.mp3", + "vo/engineer_painsharp06.mp3", + "vo/engineer_painsharp07.mp3", + "vo/engineer_painsharp08.mp3", +}; + +static const char g_IdleAlertedSounds[][] = { + "vo/engineer_battlecry01.mp3", + "vo/engineer_battlecry03.mp3", + "vo/engineer_battlecry04.mp3", + "vo/engineer_battlecry05.mp3", +}; + +static const char g_MeleeAttackSounds[][] = { + "weapons/pickaxe_swing1.wav", + "weapons/pickaxe_swing2.wav", + "weapons/pickaxe_swing3.wav", +}; + +static const char g_MeleeHitSounds[][] = { + "weapons/cleaver_hit_02.wav", + "weapons/cleaver_hit_03.wav", + "weapons/cleaver_hit_05.wav", + "weapons/cleaver_hit_06.wav", + "weapons/cleaver_hit_07.wav", +}; +static const char g_BuildSound[][] = { + "weapons/medi_shield_deploy.wav", +}; + +void Victorian_Protector_OnMapStart_NPC() +{ + for (int i = 0; i < (sizeof(g_DeathSounds)); i++) { PrecacheSound(g_DeathSounds[i]); } + for (int i = 0; i < (sizeof(g_HurtSounds)); i++) { PrecacheSound(g_HurtSounds[i]); } + for (int i = 0; i < (sizeof(g_IdleAlertedSounds)); i++) { PrecacheSound(g_IdleAlertedSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeAttackSounds)); i++) { PrecacheSound(g_MeleeAttackSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeHitSounds)); i++) { PrecacheSound(g_MeleeHitSounds[i]); } + for (int i = 0; i < (sizeof(g_BuildSound)); i++) { PrecacheSound(g_BuildSound[i]); } + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Victorian Protector"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_protector"); + strcopy(data.Icon, sizeof(data.Icon), "engineer"); + data.IconCustom = false; + data.Flags = 0; + data.Category = Type_Victoria; + data.Func = ClotSummon; + NPC_Add(data); +} + + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int team, const char[] data) +{ + return Victorian_Protector(vecPos, vecAng, team, data); +} +methodmap Victorian_Protector < CClotBody +{ + property float m_flArmorToGive + { + public get() { return fl_AbilityOrAttack[this.index][0]; } + public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][0] = TempValueForProperty; } + } + public void PlayIdleAlertSound() + { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + + } + + public void PlayHurtSound() + { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + + this.m_flNextHurtSound = GetGameTime(this.index) + 0.4; + + EmitSoundToAll(g_HurtSounds[GetRandomInt(0, sizeof(g_HurtSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + + } + + public void PlayDeathSound() + { + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + + public void PlayMeleeSound() + { + EmitSoundToAll(g_MeleeAttackSounds[GetRandomInt(0, sizeof(g_MeleeAttackSounds) - 1)], this.index, SNDCHAN_AUTO, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + public void PlayMeleeHitSound() + { + EmitSoundToAll(g_MeleeHitSounds[GetRandomInt(0, sizeof(g_MeleeHitSounds) - 1)], this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + public void PlayBuildSound() + { + EmitSoundToAll(g_BuildSound[GetRandomInt(0, sizeof(g_BuildSound) - 1)], this.index, SNDCHAN_STATIC, BOSS_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + EmitSoundToAll(g_BuildSound[GetRandomInt(0, sizeof(g_BuildSound) - 1)], this.index, SNDCHAN_STATIC, BOSS_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + + + public Victorian_Protector(float vecPos[3], float vecAng[3], int ally, const char[] data) + { + Victorian_Protector npc = view_as(CClotBody(vecPos, vecAng, "models/player/engineer.mdl", "1.0", "10000", ally)); + + i_NpcWeight[npc.index] = 1; + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + npc.SetActivity("ACT_MP_RUN_BUILDING"); + SetVariantInt(1); + AcceptEntityInput(npc.index, "SetBodyGroup"); + + npc.m_flNextMeleeAttack = 0.0; + + npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iStepNoiseType = STEPSOUND_NORMAL; + npc.m_iNpcStepVariation = STEPTYPE_NORMAL; + + npc.m_flArmorToGive = StringToFloat(data); + + func_NPCDeath[npc.index] = view_as(Victorian_Protector_NPCDeath); + func_NPCOnTakeDamage[npc.index] = view_as(Victorian_Protector_OnTakeDamage); + func_NPCThink[npc.index] = view_as(Victorian_Protector_ClotThink); + + + //IDLE + npc.m_iState = 0; + npc.m_iChanged_WalkCycle = 1; + npc.m_flGetClosestTargetTime = 0.0; + npc.StartPathing(); + npc.m_flSpeed = 225.0; + npc.Anger = false; + + + int skin = 1; + SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); + + npc.m_iWearable1 = npc.EquipItem("head", "models/weapons/c_models/c_toolbox/c_toolbox.mdl"); + + npc.m_iWearable2 = npc.EquipItem("head", "models/player/items/engineer/bet_pb.mdl"); + npc.m_iWearable3 = npc.EquipItem("head", "models/workshop/player/items/engineer/sbox2014_antarctic_researcher/sbox2014_antarctic_researcher.mdl"); + npc.m_iWearable4 = npc.EquipItem("head", "models/workshop/player/items/sniper/dec2014_hunter_ushanka/dec2014_hunter_ushanka.mdl"); + npc.m_iWearable5 = npc.EquipItem("head", "models/workshop/player/items/engineer/hwn2015_western_beard/hwn2015_western_beard.mdl"); + SetEntProp(npc.m_iWearable1, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable2, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable3, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable4, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable5, Prop_Send, "m_nSkin", skin); + + return npc; + } +} + +public void Victorian_Protector_ClotThink(int iNPC) +{ + Victorian_Protector npc = view_as(iNPC); + if(npc.m_flNextDelayTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + npc.Update(); + + if(npc.m_blPlayHurtAnimation) + { + npc.AddGesture("ACT_MP_GESTURE_FLINCH_CHEST", false); + npc.m_blPlayHurtAnimation = false; + npc.PlayHurtSound(); + } + + GrantEntityArmor(iNPC, true, 0.5, 0.0, 0); + + if(npc.m_flNextThinkTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.1; + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + npc.m_iTarget = GetClosestTarget(npc.index); + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + GetRandomRetargetTime(); + } + + if(IsValidEnemy(npc.index, npc.m_iTarget)) + { + float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget ); + + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + if(flDistanceToTarget < npc.GetLeadRadius()) + { + float vPredictedPos[3]; + PredictSubjectPosition(npc, npc.m_iTarget,_,_, vPredictedPos); + npc.SetGoalVector(vPredictedPos); + } + else + { + npc.SetGoalEntity(npc.m_iTarget); + } + if(npc.m_iChanged_WalkCycle == 1 && npc.Anger == false) + { + Victorian_ProtectorBuildObject(npc, flDistanceToTarget); + } + else + { + Victorian_ProtectorSelfDefense(npc,GetGameTime(npc.index), npc.m_iTarget, flDistanceToTarget); + } + } + else + { + npc.m_flGetClosestTargetTime = 0.0; + npc.m_iTarget = GetClosestTarget(npc.index); + } + npc.PlayIdleAlertSound(); +} + +public Action Victorian_Protector_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) +{ + Victorian_Protector npc = view_as(victim); + + if(attacker <= 0) + return Plugin_Continue; + + if(npc.m_flArmorCount <= 0.0 && npc.Anger == false) + { + npc.Anger = true; + npc.m_iChanged_WalkCycle = 2; + npc.SetActivity("ACT_MP_RUN_MELEE"); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); + npc.m_iWearable1 = npc.EquipItem("head", "models/workshop/weapons/c_models/C_Crossing_Guard/C_Crossing_Guard.mdl"); + SetVariantString("0.75"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + } + else + { + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } + } + + return Plugin_Changed; +} + +public void Victorian_Protector_NPCDeath(int entity) +{ + Victorian_Protector npc = view_as(entity); + if(!npc.m_bGib) + { + npc.PlayDeathSound(); + } + + if(IsValidEntity(npc.m_iWearable7)) + RemoveEntity(npc.m_iWearable7); + if(IsValidEntity(npc.m_iWearable6)) + RemoveEntity(npc.m_iWearable6); + if(IsValidEntity(npc.m_iWearable5)) + RemoveEntity(npc.m_iWearable5); + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + if(IsValidEntity(npc.m_iWearable3)) + RemoveEntity(npc.m_iWearable3); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); +} + +void Victorian_ProtectorBuildObject(Victorian_Protector npc, float distance) +{ + if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 3.5)) + { + int Enemy_I_See = Can_I_See_Enemy(npc.index, npc.m_iTarget); + + if(IsValidEnemy(npc.index, Enemy_I_See)) + { + npc.m_iChanged_WalkCycle = 2; + npc.SetActivity("ACT_MP_RUN_MELEE"); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); + + float pos[3]; GetEntPropVector(npc.index, Prop_Data, "m_vecAbsOrigin", pos); + float ang[3]; GetEntPropVector(npc.index, Prop_Data, "m_angRotation", ang); + npc.m_iWearable1 = npc.EquipItem("head", "models/workshop/weapons/c_models/C_Crossing_Guard/C_Crossing_Guard.mdl"); + SetVariantString("0.75"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + SetEntProp(npc.m_iWearable1, Prop_Send, "m_nSkin", 1); + float timeup = 5.0; + if(NpcStats_VictorianCallToArms(npc.index)) + timeup *= 2.0; + npc.m_iWearable7 = npc.SpawnShield(timeup, "models/props_mvm/mvm_player_shield.mdl",40.0, false); + SetEntProp(npc.m_iWearable7, Prop_Send, "m_nSkin", 1); + npc.PlayBuildSound(); + npc.m_flSpeed = 300.0; + npc.m_flArmorCount = 0.0; + } + } +} +void Victorian_ProtectorSelfDefense(Victorian_Protector npc, float gameTime, int target, float distance) +{ + if(npc.m_flAttackHappens) + { + if(npc.m_flAttackHappens < gameTime) + { + npc.m_flAttackHappens = 0.0; + + Handle swingTrace; + float VecEnemy[3]; WorldSpaceCenter(npc.m_iTarget, VecEnemy); + npc.FaceTowards(VecEnemy, 15000.0); + if(npc.DoSwingTrace(swingTrace, npc.m_iTarget)) + { + + target = TR_GetEntityIndex(swingTrace); + + float vecHit[3]; + TR_GetEndPosition(vecHit, swingTrace); + + if(IsValidEnemy(npc.index, target)) + { + float damageDealt = 50.0; + + if(ShouldNpcDealBonusDamage(target)) + damageDealt *= 1.5; + + int DamageType = DMG_CLUB; + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DamageType, -1, _, vecHit); + + // Hit sound + npc.PlayMeleeHitSound(); + } + } + delete swingTrace; + } + } + + if(gameTime > npc.m_flNextMeleeAttack) + { + if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED)) + { + int Enemy_I_See; + + Enemy_I_See = Can_I_See_Enemy(npc.index, npc.m_iTarget); + + if(IsValidEnemy(npc.index, Enemy_I_See)) + { + npc.m_iTarget = Enemy_I_See; + npc.PlayMeleeSound(); + npc.AddGesture("ACT_MP_ATTACK_STAND_MELEE",_,_,_,1.0); + + npc.m_flAttackHappens = gameTime + 0.25; + npc.m_flDoingAnimation = gameTime + 0.25; + npc.m_flNextMeleeAttack = gameTime + 1.0; + } + } + } +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_zapmarker.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_zapmarker.sp new file mode 100644 index 0000000000..ebed9f1989 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/construction2/victorians/npc_zapmarker.sp @@ -0,0 +1,395 @@ +#pragma semicolon 1 +#pragma newdecls required + +static const char g_DeathSounds[][] = { + "vo/heavy_negativevocalization01.mp3", + "vo/heavy_negativevocalization02.mp3", + "vo/heavy_negativevocalization03.mp3" +}; + +static const char g_HurtSounds[][] = { + "vo/heavy_domination09.mp3", +}; + +static const char g_IdleAlertedSounds[][] = { + "vo/heavy_domination01.mp3", + "vo/heavy_domination02.mp3", + "vo/heavy_domination03.mp3", + "vo/heavy_domination04.mp3", + "vo/heavy_domination05.mp3", + "vo/heavy_domination06.mp3", + "vo/heavy_domination07.mp3", + "vo/heavy_domination08.mp3", +}; + +static const char g_MeleeAttackSounds[][] = { + "vo/heavy_meleeing01.mp3", + "vo/heavy_meleeing02.mp3", + "vo/heavy_meleeing03.mp3", + "vo/heavy_meleeing04.mp3", + "vo/heavy_meleeing05.mp3", + "vo/heavy_meleeing06.mp3", + "vo/heavy_meleeing07.mp3", + "vo/heavy_meleeing08.mp3", +}; + + +static const char g_MeleeHitSounds[][] = { + "weapons/cbar_hitbod1.wav", + "weapons/cbar_hitbod2.wav", + "weapons/cbar_hitbod3.wav", +}; + +static const char g_RangedAttackSounds[][] = { + "weapons/cleaver_throw.wav", +}; + +void Zapmarker_OnMapStart_NPC() +{ + for (int i = 0; i < (sizeof(g_DeathSounds)); i++) { PrecacheSound(g_DeathSounds[i]); } + for (int i = 0; i < (sizeof(g_HurtSounds)); i++) { PrecacheSound(g_HurtSounds[i]); } + for (int i = 0; i < (sizeof(g_IdleAlertedSounds)); i++) { PrecacheSound(g_IdleAlertedSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeAttackSounds)); i++) { PrecacheSound(g_MeleeAttackSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeHitSounds)); i++) { PrecacheSound(g_MeleeHitSounds[i]); } + + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Zapmarker"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_zapmarker"); + strcopy(data.Icon, sizeof(data.Icon), "victoria_zapper"); //leaderboard_class_(insert the name) + data.IconCustom = false; //download needed? + data.Flags = 0; //example: MVM_CLASS_FLAG_MINIBOSS|MVM_CLASS_FLAG_ALWAYSCRIT;, forces these flags. + data.Category = Type_Victoria; + data.Func = ClotSummon; + NPC_Add(data); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int team) +{ + return Zapmaker(vecPos, vecAng, team); +} + +methodmap Zapmaker < CClotBody +{ + public void PlayIdleAlertSound() + { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + + } + + public void PlayHurtSound() + { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + + this.m_flNextHurtSound = GetGameTime(this.index) + 0.4; + + EmitSoundToAll(g_HurtSounds[GetRandomInt(0, sizeof(g_HurtSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + + } + + public void PlayDeathSound() + { + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + + public void PlayMeleeSound() + { + EmitSoundToAll(g_MeleeAttackSounds[GetRandomInt(0, sizeof(g_MeleeAttackSounds) - 1)], this.index, SNDCHAN_AUTO, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + public void PlayMeleeHitSound() + { + EmitSoundToAll(g_MeleeHitSounds[GetRandomInt(0, sizeof(g_MeleeHitSounds) - 1)], this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + + } + public void PlayRangedSound() + { + EmitSoundToAll(g_RangedAttackSounds[GetRandomInt(0, sizeof(g_RangedAttackSounds) - 1)], this.index, SNDCHAN_AUTO, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + } + + public Zapmaker(float vecPos[3], float vecAng[3], int ally) + { + Zapmaker npc = view_as(CClotBody(vecPos, vecAng, "models/player/heavy.mdl", "1.0", "5000", ally)); + + i_NpcWeight[npc.index] = 1; + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + int iActivity = npc.LookupActivity("ACT_MP_RUN_MELEE_ALLCLASS"); + if(iActivity > 0) npc.StartActivity(iActivity); + + SetVariantInt(4); + AcceptEntityInput(npc.index, "SetBodyGroup"); + + + + npc.m_flNextMeleeAttack = 0.0; + npc.m_flNextRangedAttack = 0.0; + npc.m_flNextRangedAttackHappening = 0.0; + + npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iStepNoiseType = STEPSOUND_NORMAL; + npc.m_iNpcStepVariation = STEPTYPE_NORMAL; + + func_NPCDeath[npc.index] = view_as(Internal_NPCDeath); + func_NPCOnTakeDamage[npc.index] = view_as(Internal_OnTakeDamage); + func_NPCThink[npc.index] = view_as(Internal_ClotThink); + + + npc.StartPathing(); + npc.m_flSpeed = 200.0; + + int skin = 1; + SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); + + npc.m_iWearable1 = npc.EquipItem("head", "models/weapons/c_models/c_drg_thirddegree/c_drg_thirddegree.mdl"); + + npc.m_iWearable2 = npc.EquipItem("head", "models/workshop/player/items/all_class/dec15_patriot_peak/dec15_patriot_peak_heavy.mdl"); + + npc.m_iWearable3 = npc.EquipItem("head", "models/workshop/player/items/heavy/fall17_siberian_tigerstripe/fall17_siberian_tigerstripe.mdl"); + + npc.m_iWearable4 = npc.EquipItem("head", "models/workshop/player/items/heavy/dec24_battle_balaclava_style1/dec24_battle_balaclava_style1.mdl"); + + npc.m_iWearable5 = npc.EquipItem("head", "models/workshop/player/items/heavy/sf14_heavy_robo_chest/sf14_heavy_robo_chest.mdl"); + + npc.m_iWearable6 = npc.EquipItem("head", "models/workshop/player/items/all_class/dec25_lazer_gazers/dec25_lazer_gazers_heavy.mdl"); + + SetVariantString("0.75"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + SetEntProp(npc.m_iWearable1, Prop_Send, "m_nSkin", 1); + SetEntityRenderColor(npc.m_iWearable1, 50, 80, 0, 255); + SetEntProp(npc.m_iWearable2, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable3, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable4, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable5, Prop_Send, "m_nSkin", skin); + SetEntProp(npc.m_iWearable6, Prop_Send, "m_nSkin", skin); + + return npc; + } +} + +static void Internal_ClotThink(int iNPC) +{ + Zapmaker npc = view_as(iNPC); + if(npc.m_flNextDelayTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + npc.Update(); + + if(npc.m_blPlayHurtAnimation) + { + npc.AddGesture("ACT_MP_GESTURE_FLINCH_CHEST", false); + npc.m_blPlayHurtAnimation = false; + npc.PlayHurtSound(); + } + + if(npc.m_flNextThinkTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.1; + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + npc.m_iTarget = GetClosestTarget(npc.index); + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + GetRandomRetargetTime(); + } + + if(IsValidEnemy(npc.index, npc.m_iTarget)) + { + float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget ); + + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + if(flDistanceToTarget < npc.GetLeadRadius()) + { + float vPredictedPos[3]; + PredictSubjectPosition(npc, npc.m_iTarget,_,_, vPredictedPos); + npc.SetGoalVector(vPredictedPos); + } + else + { + npc.SetGoalEntity(npc.m_iTarget); + } + ZapmakerSelfDefense(npc,GetGameTime(npc.index), npc.m_iTarget, flDistanceToTarget); + } + else + { + npc.m_flGetClosestTargetTime = 0.0; + npc.m_iTarget = GetClosestTarget(npc.index); + } + npc.PlayIdleAlertSound(); +} + +static void Internal_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) +{ + Zapmaker npc = view_as(victim); + + if(attacker <= 0) + return; + + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } +} + +static void Internal_NPCDeath(int entity) +{ + Zapmaker npc = view_as(entity); + if(!npc.m_bGib) + { + npc.PlayDeathSound(); + } + + if(IsValidEntity(npc.m_iWearable6)) + RemoveEntity(npc.m_iWearable6); + if(IsValidEntity(npc.m_iWearable5)) + RemoveEntity(npc.m_iWearable5); + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + if(IsValidEntity(npc.m_iWearable3)) + RemoveEntity(npc.m_iWearable3); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); + +} + +void ZapmakerSelfDefense(Zapmaker npc, float gameTime, int target, float distance) +{ + if(!npc.m_flNextRangedAttackHappening) + { + if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 12.0)) + { + int Enemy_I_See; + + Enemy_I_See = Can_I_See_Enemy(npc.index, npc.m_iTarget); + + if(IsValidEnemy(npc.index, Enemy_I_See)) + { + npc.m_flNextRangedAttack = gameTime + 0.25; + npc.m_flNextRangedAttackHappening = 1.0; + npc.AddGesture("ACT_MP_ATTACK_STAND_MELEE_ALLCLASS"); + npc.m_flDoingAnimation = gameTime + 0.25; + npc.m_flNextMeleeAttack = gameTime + 1.2; + } + } + return; + } + if(npc.m_flNextRangedAttack && npc.m_flNextRangedAttack != 5.0) + { + if(npc.m_flNextRangedAttack < gameTime) + { + float EnemyPos[3]; + WorldSpaceCenter(npc.m_iTarget, EnemyPos); + npc.FaceTowards(EnemyPos, 15000.0); + int projectile = npc.FireArrow(EnemyPos, 250.0, 1200.0, "models/weapons/c_models/c_drg_thirddegree/c_drg_thirddegree.mdl", 0.75); + WandProjectile_ApplyFunctionToEntity(projectile, Zapmarker_Axe_StartTouch); + + if(IsValidEntity(npc.m_iWearable1)) + { + RemoveEntity(npc.m_iWearable1); + } + npc.m_flNextRangedAttack = 5.0; + npc.PlayRangedSound(); + npc.m_flDoingAnimation = gameTime + 0.25; + } + } + if(npc.m_flNextRangedAttack && npc.m_flNextRangedAttack == 5.0) + { + npc.m_flNextRangedAttack = 0.0; + npc.m_iWearable1 = npc.EquipItem("head", "models/weapons/c_models/c_eviction_notice/c_eviction_notice.mdl"); + npc.SetActivity("ACT_MP_RUN_MELEE"); + npc.m_flSpeed = 275.0; + return; + } + + if(npc.m_flAttackHappens) + { + if(npc.m_flAttackHappens < gameTime) + { + npc.m_flAttackHappens = 0.0; + + Handle swingTrace; + float VecEnemy[3]; WorldSpaceCenter(npc.m_iTarget, VecEnemy); + npc.FaceTowards(VecEnemy, 15000.0); + if(npc.DoSwingTrace(swingTrace, npc.m_iTarget)) + { + + target = TR_GetEntityIndex(swingTrace); + + float vecHit[3]; + TR_GetEndPosition(vecHit, swingTrace); + + if(IsValidEnemy(npc.index, target)) + { + float damageDealt = 35.0; + if(ShouldNpcDealBonusDamage(target)) + damageDealt *= 2.5; + + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); + if(NpcStats_VictorianCallToArms(npc.index)) + Elemental_AddNervousDamage(target, npc.index, 5); + StartBleedingTimer(target, npc.index, 3.0, 2, -1, DMG_TRUEDAMAGE, 0); + + // Hit sound + npc.PlayMeleeHitSound(); + } + } + delete swingTrace; + } + } + + if(gameTime > npc.m_flNextMeleeAttack) + { + if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED)) + { + int Enemy_I_See; + + Enemy_I_See = Can_I_See_Enemy(npc.index, npc.m_iTarget); + + if(IsValidEnemy(npc.index, Enemy_I_See)) + { + npc.m_iTarget = Enemy_I_See; + npc.PlayMeleeSound(); + npc.AddGesture("ACT_MP_ATTACK_STAND_MELEE"); + + npc.m_flAttackHappens = gameTime + 0.1; + npc.m_flDoingAnimation = gameTime + 0.1; + npc.m_flNextMeleeAttack = gameTime + 0.15; + } + } + } +} + +public void Zapmarker_Axe_StartTouch(int entity, int target) +{ + if(target > 0 && target < MAXENTITIES) //did we hit something??? + { + int owner = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity"); + if(!IsValidEntity(owner)) + { + owner = 0; + } + + int inflictor = h_ArrowInflictorRef[entity]; + if(inflictor != -1) + inflictor = EntRefToEntIndex(h_ArrowInflictorRef[entity]); + + if(inflictor == -1) + inflictor = owner; + + + EmitSoundToAll("weapons/3rd_degree_hit_01.wav", entity, _, 80, _, 0.8, 100); + if(IsValidEnemy(owner, target)) + ApplyStatusEffect(owner, target, "Teslar Electricution", NpcStats_VictorianCallToArms(owner) ? 7.5 : 5.0); + } + RemoveEntity(entity); +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/construction/enemies/npc_zilius.sp b/addons/sourcemod/scripting/zombie_riot/npc/construction/enemies/npc_zilius.sp index 70abbd4cc5..c48c0b531f 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/construction/enemies/npc_zilius.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/construction/enemies/npc_zilius.sp @@ -538,7 +538,7 @@ methodmap Construction_Raid_Zilius < CClotBody SetVariantInt(1); AcceptEntityInput(npc.index, "SetBodyGroup"); - SetVariantColor(view_as({0, 0, 0, 150})); + SetVariantColor(view_as({50, 50, 150, 200})); AcceptEntityInput(npc.m_iTeamGlow, "SetGlowColor"); bool ingoremusic = StrContains(data, "triple_enemies") != -1; @@ -639,6 +639,16 @@ static void Internal_ClotThink(int iNPC) } default: { + for (int client = 1; client <= MaxClients; client++) + { + if(IsValidClient(client) && GetClientTeam(client) == 2 && TeutonType[client] != TEUTON_WAITING && PlayerPoints[client] > 500) + { + if(Items_GiveNamedItem(client, "Foreign Expidonsan Chip")) + { + CPrintToChat(client, "{green}Obtained{yellow} ''Foreign Expidonsan Chip''"); + } + } + } ForcePlayerWin(); npc.m_flWinAnimationSay = 0.0; npc.m_flWinAnimation = 0.0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/expidonsa/npc_diversionistico.sp b/addons/sourcemod/scripting/zombie_riot/npc/expidonsa/npc_diversionistico.sp index 5fad42a278..b858c21674 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/expidonsa/npc_diversionistico.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/expidonsa/npc_diversionistico.sp @@ -540,7 +540,18 @@ int TeleportDiversioToRandLocation(int iNPC, bool RespectOutOfBounds = false, fl continue; static float hullcheckmaxs_Player_Again[3]; static float hullcheckmins_Player_Again[3]; - if(b_IsGiant[npc.index]) + + if(f3_CustomMinMaxBoundingBox[npc.index][1] != 0.0) + { + hullcheckmaxs_Player_Again[0] = f3_CustomMinMaxBoundingBox[npc.index][0]; + hullcheckmaxs_Player_Again[1] = f3_CustomMinMaxBoundingBox[npc.index][1]; + hullcheckmaxs_Player_Again[2] = f3_CustomMinMaxBoundingBox[npc.index][2]; + + hullcheckmins_Player_Again[0] = -f3_CustomMinMaxBoundingBox[npc.index][0]; + hullcheckmins_Player_Again[1] = -f3_CustomMinMaxBoundingBox[npc.index][1]; + hullcheckmins_Player_Again[2] = 0.0; + } + else if(b_IsGiant[npc.index]) { hullcheckmaxs_Player_Again = view_as( { 30.0, 30.0, 120.0 } ); hullcheckmins_Player_Again = view_as( { -30.0, -30.0, 0.0 } ); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_15/npc_irani.sp b/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_15/npc_irani.sp index f5b3ca7560..9c57aa959c 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_15/npc_irani.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_15/npc_irani.sp @@ -46,7 +46,7 @@ void Iberia_Irani_OnMapStart_NPC() strcopy(data.Name, sizeof(data.Name), "Irani"); strcopy(data.Plugin, sizeof(data.Plugin), "npc_irani"); strcopy(data.Icon, sizeof(data.Icon), "mark_sniper_r1"); - data.IconCustom = false; + data.IconCustom = true; data.Flags = 0; data.Category = Type_IberiaExpiAlliance; data.Func = ClotSummon; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_15/npc_kinat.sp b/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_15/npc_kinat.sp index e32f290577..6018e572cb 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_15/npc_kinat.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_15/npc_kinat.sp @@ -290,7 +290,9 @@ int IberiaKinatSelfDefense(IberiaKinat npc, float gameTime, int target, float di npc.FaceTowards(vecTarget, 20000.0); float origin[3], angles[3]; view_as(npc.m_iWearable3).GetAttachment("muzzle", origin, angles); - ShootLaser(npc.m_iWearable3, "bullet_tracer02_blue", origin, vecTarget, false ); + TE_SetupBeamPoints(origin, vecTarget, g_Ruina_Laser_BEAM, -1, 0, 0, 0.2, 2.0, 0.5, 0, 3.0, {125, 125, 255, 200}, 3); + TE_SendToAll(); + TE_Particle("projectile_fireball_crit_blue", vecTarget, NULL_VECTOR, {0.0,0.0,0.0}, -1, _, _, _, _, _, _, _, _, _, 0.0); npc.m_iAttacksTillReload--; return 0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_30/npc_vivintu.sp b/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_30/npc_vivintu.sp index b74fe58eac..75c69e19b0 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_30/npc_vivintu.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_30/npc_vivintu.sp @@ -46,7 +46,7 @@ void IberiaVivintu_OnMapStart_NPC() strcopy(data.Name, sizeof(data.Name), "Vivintu"); strcopy(data.Plugin, sizeof(data.Plugin), "npc_vivintu"); strcopy(data.Icon, sizeof(data.Icon), "mark_sniper_r2"); - data.IconCustom = false; + data.IconCustom = true; data.Flags = 0; data.Category = Type_IberiaExpiAlliance; data.Func = ClotSummon; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_45/npc_elite_kinat.sp b/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_45/npc_elite_kinat.sp index 249b81ec69..57fa4c7ba2 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_45/npc_elite_kinat.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_45/npc_elite_kinat.sp @@ -290,7 +290,9 @@ int IberiaEliteKinatSelfDefense(IberiaEliteKinat npc, float gameTime, int target npc.FaceTowards(vecTarget, 20000.0); float origin[3], angles[3]; view_as(npc.m_iWearable3).GetAttachment("muzzle", origin, angles); - ShootLaser(npc.m_iWearable3, "bullet_tracer02_blue", origin, vecTarget, false ); + TE_SetupBeamPoints(origin, vecTarget, g_Ruina_Laser_BEAM, -1, 0, 0, 0.2, 2.0, 0.5, 0, 3.0, {125, 125, 255, 200}, 3); + TE_SendToAll(); + TE_Particle("projectile_fireball_crit_blue", vecTarget, NULL_VECTOR, {0.0,0.0,0.0}, -1, _, _, _, _, _, _, _, _, _, 0.0); npc.m_iAttacksTillReload--; return 0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_60/npc_death_marker.sp b/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_60/npc_death_marker.sp index fd749ad955..df33e5db88 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_60/npc_death_marker.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/iberia_expidonsa/wave_60/npc_death_marker.sp @@ -46,7 +46,7 @@ void IberiaDeathMarker_OnMapStart_NPC() strcopy(data.Name, sizeof(data.Name), "Death Marker"); strcopy(data.Plugin, sizeof(data.Plugin), "npc_death_marker"); strcopy(data.Icon, sizeof(data.Icon), "mark_sniper_r3"); - data.IconCustom = false; + data.IconCustom = true; data.Flags = 0; data.Category = Type_IberiaExpiAlliance; data.Func = ClotSummon; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/15/npc_agentalexander.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/15/npc_agentalexander.sp index 6eac838a2b..5bced885ad 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/15/npc_agentalexander.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/15/npc_agentalexander.sp @@ -445,7 +445,7 @@ public Action AgentAlexander_OnTakeDamage(int victim, int &attacker, int &inflic static float AgentHealthDamageMulti(CClotBody npc) { - float damage = 10.0; + float damage = 20.0; float maxhealth = float(GetEntProp(npc.index, Prop_Data, "m_iMaxHealth")); float health = float(GetEntProp(npc.index, Prop_Data, "m_iHealth")); float ratio = health / maxhealth; @@ -455,19 +455,19 @@ static float AgentHealthDamageMulti(CClotBody npc) { damage *= 2.0; if(ShouldNpcDealBonusDamage(target)) - damage *= 2.5; + damage *= 2.5; } if(ratio <= 0.50) { damage *= 2.0; if(ShouldNpcDealBonusDamage(target)) - damage *= 2.5; + damage *= 2.5; } if(ratio <= 0.25) { damage *= 2.0; if(ShouldNpcDealBonusDamage(target)) - damage *= 2.5; + damage *= 2.5; } return (0.0 + damage); } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/15/npc_antiviral_programm.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/15/npc_antiviral_programm.sp index bc1d2b6918..c121b36237 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/15/npc_antiviral_programm.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/15/npc_antiviral_programm.sp @@ -119,7 +119,10 @@ methodmap Antiviral_Program < CClotBody public Antiviral_Program(float vecPos[3], float vecAng[3], int ally) { - Antiviral_Program npc = view_as(CClotBody(vecPos, vecAng, "models/player/spy.mdl", "1.0", MinibossHealthScaling(220.0, true), ally)); + float BaseHpValue = 220.0; + if(RaidbossIgnoreBuildingsLogic()) + BaseHpValue *= 0.65; + Antiviral_Program npc = view_as(CClotBody(vecPos, vecAng, "models/player/spy.mdl", "1.0", MinibossHealthScaling(BaseHpValue, true), ally)); i_NpcWeight[npc.index] = 1; FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/30/npc_agenteric.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/30/npc_agenteric.sp index c5c7c95f07..2c9d2f3057 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/30/npc_agenteric.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/30/npc_agenteric.sp @@ -378,7 +378,7 @@ public void AgentEric_ClotThink(int iNPC) { float damageDealt = AgentHealthDamageMulti(npc); if(ShouldNpcDealBonusDamage(target)) - damageDealt *= 1.5; + damageDealt *= 7.5; SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); Elemental_AddCorruptionDamage(target, npc.index, npc.index ? 25 : 10); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/45/npc_agentdick.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/45/npc_agentdick.sp index 9528830de9..3f5efcbd31 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/45/npc_agentdick.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/45/npc_agentdick.sp @@ -156,6 +156,9 @@ methodmap AgentDick < CClotBody npc.m_flGetClosestTargetTime = 0.0; npc.StartPathing(); npc.m_flSpeed = 260.0; + + SetVariantInt(2); + AcceptEntityInput(npc.index, "SetBodyGroup"); int skin = 1; SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); @@ -379,7 +382,7 @@ public void AgentDick_ClotThink(int iNPC) { float damageDealt = AgentHealthDamageMulti(npc); if(ShouldNpcDealBonusDamage(target)) - damageDealt *= 1.5; + damageDealt *= 7.5; SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); Elemental_AddCorruptionDamage(target, npc.index, npc.index ? 35 : 10); @@ -460,19 +463,19 @@ static float AgentHealthDamageMulti(CClotBody npc) { damage *= 2.0; //120 damage if(ShouldNpcDealBonusDamage(target)) - damage *= 2.5; + damage *= 2.5; } if(ratio <= 0.50) { damage *= 1.5; //180 damage if(ShouldNpcDealBonusDamage(target)) - damage *= 2.5; + damage *= 2.5; } if(ratio <= 0.25) { damage *= 1.25; //225 damage if(ShouldNpcDealBonusDamage(target)) - damage *= 2.5; + damage *= 2.5; } return (0.0 + damage); } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/60/npc_agentkurt.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/60/npc_agentkurt.sp index 09f4cbd570..f8c60b60d1 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/60/npc_agentkurt.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/60/npc_agentkurt.sp @@ -159,6 +159,9 @@ methodmap AgentKurt < CClotBody npc.StartPathing(); npc.m_flSpeed = 260.0; + SetVariantInt(2); + AcceptEntityInput(npc.index, "SetBodyGroup"); + int skin = 1; SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); @@ -379,7 +382,7 @@ public void AgentKurt_ClotThink(int iNPC) { float damageDealt = AgentHealthDamageMulti(npc); if(ShouldNpcDealBonusDamage(target)) - damageDealt *= 2.5; + damageDealt *= 7.5; SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); Elemental_AddCorruptionDamage(target, npc.index, npc.index ? 45 : 10); @@ -457,19 +460,19 @@ static float AgentHealthDamageMulti(CClotBody npc) { damage *= 2.0; //140 damage if(ShouldNpcDealBonusDamage(target)) - damage *= 2.5; + damage *= 2.5; } if(ratio <= 0.50) { damage *= 1.5; //210 damage if(ShouldNpcDealBonusDamage(target)) - damage *= 2.5; + damage *= 2.5; } if(ratio <= 0.25) { damage *= 1.20; //252 damage if(ShouldNpcDealBonusDamage(target)) - damage *= 2.5; + damage *= 2.5; } return (0.0 + damage); } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/60/npc_agentlogan.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/60/npc_agentlogan.sp index 68a3c473de..939bc24dad 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/60/npc_agentlogan.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/60/npc_agentlogan.sp @@ -167,7 +167,7 @@ methodmap AgentLogan < CClotBody npc.m_iWearable4 = npc.EquipItem("head", "models/workshop/player/items/all_class/sum21_manndatory_attire_style3/sum21_manndatory_attire_style3_engineer.mdl"); - SetVariantInt(2); + SetVariantInt(1); AcceptEntityInput(npc.index, "SetBodyGroup"); SetEntProp(npc.m_iWearable1, Prop_Send, "m_nSkin", skin); SetEntProp(npc.m_iWearable2, Prop_Send, "m_nSkin", skin); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/60/npc_agenttodd.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/60/npc_agenttodd.sp index 2dd5569465..b872b84bd2 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/60/npc_agenttodd.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/60/npc_agenttodd.sp @@ -136,7 +136,7 @@ methodmap AgentTodd < CClotBody npc.m_iWearable2 = npc.EquipItem("head", "models/workshop/player/items/all_class/jul13_sweet_shades_s1/jul13_sweet_shades_s1_scout.mdl"); - npc.m_iWearable3 = npc.EquipItem("head", "models/workshop/player/items/spy/sum24_tuxedo_royale_style1/sum24_tuxedo_royale_style1.mdl"); + npc.m_iWearable3 = npc.EquipItem("head", "models/workshop/player/items/scout/sum23_prohibition_opposition/sum23_prohibition_opposition.mdl"); npc.m_iWearable4 = npc.EquipItem("head", "models/workshop/player/items/all_class/sum21_manndatory_attire_style3/sum21_manndatory_attire_style3_scout.mdl"); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_haste.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_haste.sp index 07abaddcb2..137730e8ce 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_haste.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_haste.sp @@ -276,7 +276,7 @@ public void GiantHaste_ClotThink(int iNPC) { float damage = 50.0; if(ShouldNpcDealBonusDamage(target)) - damage *= 1.5; + damage *= 7.5; if(target > 0) { SDKHooks_TakeDamage(target, npc.index, npc.index, damage, DMG_CLUB, -1, _, vecHit); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_knockout.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_knockout.sp index dca7c186a3..701f7d8adb 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_knockout.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_knockout.sp @@ -268,7 +268,7 @@ public void GiantKnockout_ClotThink(int iNPC) { float damageDealt = AgentHealthDamageMulti(npc); if(ShouldNpcDealBonusDamage(target)) - damageDealt *= 1.5; + damageDealt *= 7.5; SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); Elemental_AddCorruptionDamage(target, npc.index, npc.index ? 9 : 7); @@ -333,7 +333,7 @@ public Action GiantKnockout_OnTakeDamage(int victim, int &attacker, int &inflict static float AgentHealthDamageMulti(CClotBody npc) { - float damage = 10.0; + float damage = 100.0; float maxhealth = float(GetEntProp(npc.index, Prop_Data, "m_iMaxHealth")); float health = float(GetEntProp(npc.index, Prop_Data, "m_iHealth")); float ratio = health / maxhealth; @@ -343,19 +343,19 @@ static float AgentHealthDamageMulti(CClotBody npc) { damage *= 2.0; if(ShouldNpcDealBonusDamage(target)) - damage *= 2.5; + damage *= 2.5; } if(ratio <= 0.50) { damage *= 2.0; if(ShouldNpcDealBonusDamage(target)) - damage *= 2.5; + damage *= 2.5; } if(ratio <= 0.25) { damage *= 2.0; if(ShouldNpcDealBonusDamage(target)) - damage *= 2.5; + damage *= 2.5; } return (0.0 + damage); } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_reflector.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_reflector.sp index ded2824adb..763bd0f5df 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_reflector.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_reflector.sp @@ -274,6 +274,8 @@ public void GiantReflector_ClotThink(int iNPC) if(target > 0) { float damage = 45.0; + if(ShouldNpcDealBonusDamage(target)) + damage *= 5.0; SDKHooks_TakeDamage(target, npc.index, npc.index, damage, DMG_CLUB, -1, _, vecHit); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_regeneration.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_regeneration.sp index a55e077a20..1577e26ed8 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_regeneration.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/giants/npc_giant_regeneration.sp @@ -379,6 +379,8 @@ public void GiantRegeneration_ClotThink(int iNPC) if(target > 0) { float damage = 45.0; + if(ShouldNpcDealBonusDamage(target)) + damage *= 5.0; SDKHooks_TakeDamage(target, npc.index, npc.index, damage, DMG_CLUB, -1, _, vecHit); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_agent_smith.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_agent_smith.sp index ed88b8188c..58ae182639 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_agent_smith.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_agent_smith.sp @@ -236,7 +236,7 @@ methodmap AgentSmith < CClotBody amount_of_people = 1.0; RaidModeScaling *= amount_of_people; - RaidModeTime = GetGameTime(npc.index) + 220.0; + RaidModeTime = GetGameTime(npc.index) + 240.0; RaidModeScaling *= 0.85; PrepareSmith_Raid(npc); @@ -502,9 +502,7 @@ static void RaidSmith_SelfDefense(AgentSmith npc, float gameTime, int target, fl } SDKHooks_TakeDamage(targetTrace, npc.index, npc.index, damage, DMG_CLUB, -1, _, vecHit); - Elemental_AddCorruptionDamage(target, npc.index, npc.index ? 100 : 10); - //Reduce damage after dealing - damage *= 0.92; + Elemental_AddCorruptionDamage(targetTrace, npc.index, RoundToNearest(damage * 0.10), true, true); // On Hit stuff bool Knocked = false; @@ -515,7 +513,8 @@ static void RaidSmith_SelfDefense(AgentSmith npc, float gameTime, int target, fl if(infection) { TF2_StunPlayer(targetTrace, 13.0, 1.0, TF_STUNFLAGS_BIGBONK|TF_STUNFLAG_NOSOUNDOREFFECT); - fl_Infection_Meter[targetTrace] = 0.0; + //Give time to react. + fl_Infection_Meter[targetTrace] = -1.0; fl_Cure_Meter[targetTrace] = 0.0; npc.ArmorSet(_, true); i_Victim_Infection[npc.index] = EntIndexToEntRef(targetTrace); @@ -600,7 +599,7 @@ static void RaidSmith_SelfDefense(AgentSmith npc, float gameTime, int target, fl npc.AddGesture("ACT_MP_ATTACK_STAND_SECONDARY"); KillFeed_SetKillIcon(npc.index, "enforcer"); - float damage = 12.0; + float damage = 50.0; damage *= RaidModeScaling; FireBullet(npc.index, npc.m_iWearable1, vecMe, vecDir, damage, 9000.0, DMG_BULLET, "dxhr_sniper_rail_blue"); @@ -714,11 +713,12 @@ static void Smith_SelfDefense(AgentSmith npc, float gameTime, int target, float if(!npc.m_bFUCKYOU) { if(ShouldNpcDealBonusDamage(target)) - damage *= 5.0; + damage *= 5.0; } if(target > 0) { SDKHooks_TakeDamage(target, npc.index, npc.index, damage, DMG_CLUB, -1, _, vecHit); + Elemental_AddCorruptionDamage(target, npc.index, RoundToNearest(damage * 0.15), true, true); // Hit sound npc.PlayMeleeHitSound(); } @@ -761,7 +761,7 @@ static void Smith_Infection(AgentSmith npc) int victim = EntRefToEntIndex(i_Victim_Infection[npc.index]); if(IsValidClient(victim) && TeutonType[victim] == TEUTON_NONE) { - float cure_amount = 0.10; + float cure_amount = 0.06; float vicPos[3]; if(fl_Infection_Meter[victim] >= 10.0) @@ -773,51 +773,72 @@ static void Smith_Infection(AgentSmith npc) } if(GetClientTeam(victim) == 2 && TeutonType[victim] == TEUTON_NONE) { + int r = 65; + int g = 200; + int b = 65; + int a = 200; + + float VecMe[3]; WorldSpaceCenter(npc.index, VecMe); + float VecVictim[3]; WorldSpaceCenter(victim, VecVictim); + TE_SetupBeamPoints(VecMe, VecVictim, Shared_BEAM_Laser, 0, 0, 0, 0.5, 10.0, 10.0, 5, 5.0, {65,200,65,200}, 3); + TE_SendToAll(0.0); + spawnRing(victim, 60.0 * 2.0, 0.0, 0.0, 10.0, "materials/sprites/laserbeam.vmt", r, g, b, a, 1, 0.1, 2.0, 7.1, 1); + spawnRing(victim, 60.0 * 2.0, 0.0, 0.0, 30.0, "materials/sprites/laserbeam.vmt", r, g, b, a, 1, 0.1, 2.0, 7.1, 1); + spawnRing(victim, 60.0 * 2.0, 0.0, 0.0, 60.0, "materials/sprites/laserbeam.vmt", r, g, b, a, 1, 0.1, 2.0, 7.1, 1); + float damage = 15.0; + damage *= RaidModeScaling; + Elemental_AddCorruptionDamage(victim, npc.index, RoundToNearest(damage * 0.10), true, true); + //if(!TF2_IsPlayerInCondition(victim, TFCond_Dazed)) //{ // TF2_StunPlayer(victim, 0.1, 1.0, TF_STUNFLAG_NOSOUNDOREFFECT); //} float radius = 150.0; GetClientAbsOrigin(victim, vicPos); + float DoInfection = 0.0; switch(CountPlayersOnRed(2)) { case 2: { - fl_Infection_Meter[victim] += 0.12; + DoInfection += 0.12; } case 3, 4: { - fl_Infection_Meter[victim] += 0.14; + DoInfection += 0.14; } case 5, 6: { - fl_Infection_Meter[victim] += 0.16; + DoInfection += 0.16; } case 7, 8: { - fl_Infection_Meter[victim] += 0.17; + DoInfection += 0.17; } case 9, 10: { - fl_Infection_Meter[victim] += 0.18; + DoInfection += 0.18; } case 11, 12: { - fl_Infection_Meter[victim] += 0.19; + DoInfection += 0.19; } case 13, 14: { - fl_Infection_Meter[victim] += 0.20; + DoInfection += 0.20; } default: //When there's more than 14 players { - fl_Infection_Meter[victim] += 0.22; + DoInfection += 0.22; } } - PrintCenterText(victim, "당신은 감염되고 있습니다 - %.0f% | 치료율 %.0f%", (fl_Infection_Meter[victim] * 10.0), (fl_Cure_Meter[victim] * 10.0)); + fl_Infection_Meter[victim] += (DoInfection * 0.5); + float Displayfor = fl_Infection_Meter[victim]; + if(Displayfor <= 0.0) + Displayfor = 0.0; + PrintCenterText(victim, "Your Infection is rising - %.0f% | Cure %.0f%", (Displayfor * 10.0), (fl_Cure_Meter[victim] * 10.0)); for(int clients = 1 ; clients <= MaxClients ; clients++) { - if(IsValidClient(clients) && TeutonType[victim] == TEUTON_NONE) + if(IsValidClient(clients) && TeutonType[clients] == TEUTON_NONE && IsEntityAlive(clients)) { if(clients != victim) { @@ -828,7 +849,7 @@ static void Smith_Infection(AgentSmith npc) { fl_Cure_Meter[victim] += cure_amount; } - PrintCenterText(clients, "%N 가 감염됐습니다. 그 유저 근처에 접근해 치료해주세요!\n %.0f% | 치료율 %.0f%", victim, (fl_Infection_Meter[victim] * 10.0), (fl_Cure_Meter[victim] * 10.0)); + PrintCenterText(clients, "%N Is being infected. Stay Near him to Remove the Infection!!\n %.0f% | Cure %.0f%", victim, (Displayfor * 10.0), (fl_Cure_Meter[victim] * 10.0)); } } } @@ -962,11 +983,11 @@ static void Agent_CloningAmount(AgentSmith npc) if(Waves_InFreeplay()) { amount = 4; - Agent_Smith_Cloner(npc, amount, ReturnEntityMaxHealth(npc.index)/2, 1.5); + Agent_Smith_Cloner(npc, amount, ReturnEntityMaxHealth(npc.index)/2, 3.5); } else { - Agent_Smith_Cloner(npc, amount, ReturnEntityMaxHealth(npc.index)/2); + Agent_Smith_Cloner(npc, amount, ReturnEntityMaxHealth(npc.index)/2, 2.0); } } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_agentjohnson.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_agentjohnson.sp index 063b41e7a8..53fdfae714 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_agentjohnson.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_agentjohnson.sp @@ -273,6 +273,7 @@ methodmap AgentJohnson < CClotBody public void Johnson_GroundCheck(int entity, int victim, float damage, int weapon) { Custom_Knockback(entity, victim, 1000.0, true); + Elemental_AddCorruptionDamage(victim, entity, 2000, true, true); } public void AgentJohnson_ClotThink(int iNPC) @@ -454,11 +455,9 @@ public void AgentJohnson_ClotThink(int iNPC) npc.FaceTowards(vecTarget, 99999.9); npc.m_flAbilityOrAttack1 = gameTime + 0.45; npc.PlaySlamSound(0); - return; } } } - Johnsons_SelfDefense(npc, gameTime, npc.m_iTarget, flDistanceToTarget); } else @@ -504,10 +503,8 @@ static void Johnsons_SelfDefense(AgentJohnson npc, float gameTime, int target, f { damage = 1.0; } - Elemental_AddCorruptionDamage(targetTrace, npc.index, 15); SDKHooks_TakeDamage(targetTrace, npc.index, npc.index, damage, DMG_CLUB, -1, _, vecHit); - //Reduce damage after dealing - damage *= 0.92; + Elemental_AddCorruptionDamage(targetTrace, npc.index, RoundToNearest(damage * 0.25), true, true); // On Hit stuff bool Knocked = false; if(!PlaySound) @@ -598,7 +595,7 @@ static void Johnsons_SelfDefense(AgentJohnson npc, float gameTime, int target, f npc.AddGesture("ACT_MP_ATTACK_STAND_SECONDARY"); KillFeed_SetKillIcon(npc.index, "pistol"); - float damage = 8.0; + float damage = 30.0; damage *= RaidModeScaling; FireBullet(npc.index, npc.m_iWearable1, vecMe, vecDir, damage, 9000.0, DMG_BULLET, "dxhr_sniper_rail_blue"); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_agentthompson.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_agentthompson.sp index 40dac8b78f..168740e2ce 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_agentthompson.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_agentthompson.sp @@ -353,7 +353,7 @@ static void Thompsons_SelfDefense(AgentThompson npc, float gameTime, int target, npc.DoSwingTrace(swingTrace, npc.m_iTarget, _, _, _, 1, _, HowManyEnemeisAoeMelee); delete swingTrace; bool PlaySound = false; - float damage = 35.0; + float damage = 28.0; damage *= RaidModeScaling; bool silenced = NpcStats_IsEnemySilenced(npc.index); for(int counter = 1; counter <= HowManyEnemeisAoeMelee; counter++) @@ -371,10 +371,8 @@ static void Thompsons_SelfDefense(AgentThompson npc, float gameTime, int target, { damage = 1.0; } - Elemental_AddCorruptionDamage(targetTrace, npc.index, 15); SDKHooks_TakeDamage(targetTrace, npc.index, npc.index, damage, DMG_CLUB, -1, _, vecHit); - //Reduce damage after dealing - damage *= 0.92; + Elemental_AddCorruptionDamage(targetTrace, npc.index, RoundToNearest(damage * 0.15), true, true); // On Hit stuff bool Knocked = false; if(!PlaySound) @@ -494,7 +492,7 @@ static void Thompsons_SelfDefense(AgentThompson npc, float gameTime, int target, npc.AddGesture("ACT_MP_ATTACK_STAND_SECONDARY"); KillFeed_SetKillIcon(npc.index, "shotgun_primary"); - float damage = 15.0; + float damage = 30.0; damage *= RaidModeScaling; FireBullet(npc.index, npc.m_iWearable1, vecMe, vecDir, damage, 9000.0, DMG_BULLET, "dxhr_sniper_rail_blue"); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_twins.sp b/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_twins.sp index d0254c20ef..622eee13db 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_twins.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/matrix/raids/npc_twins.sp @@ -495,10 +495,8 @@ static int Matrix_Twins_SelfDefense(Matrix_Twins npc, float gameTime, int target { damage = 1.0; } - Elemental_AddCorruptionDamage(targetTrace, npc.index, 50); SDKHooks_TakeDamage(targetTrace, npc.index, npc.index, damage, DMG_CLUB, -1, _, vecHit); - //Reduce damage after dealing - damage *= 0.92; + Elemental_AddCorruptionDamage(targetTrace, npc.index, RoundToNearest(damage * 0.15), true, true); // On Hit stuff bool Knocked = false; if(!PlaySound) @@ -594,7 +592,7 @@ static int Matrix_Twins_SelfDefense(Matrix_Twins npc, float gameTime, int target npc.AddGesture("ACT_MP_ATTACK_STAND_SECONDARY"); KillFeed_SetKillIcon(npc.index, "enforcer"); - float damage = 15.0; + float damage = 30.0; damage *= RaidModeScaling; FireBullet(npc.index, npc.m_iWearable1, vecMe, vecDir, damage, 9000.0, DMG_BULLET, "dxhr_sniper_rail_blue"); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/medival/npc_medival_achilles.sp b/addons/sourcemod/scripting/zombie_riot/npc/medival/npc_medival_achilles.sp index 12b815f0a2..968354eaae 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/medival/npc_medival_achilles.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/medival/npc_medival_achilles.sp @@ -602,11 +602,11 @@ public Action Smite_Timer_achilles(Handle Smite_Logic, DataPack pack) if(IsValidEntity(prop2)) { DispatchKeyValue(prop2, "model", "models/props_junk/harpoon002a.mdl"); - DispatchKeyValue(prop2, "modelscale", "2.00"); DispatchKeyValue(prop2, "StartDisabled", "false"); DispatchKeyValue(prop2, "Solid", "0"); SetEntProp(prop2, Prop_Data, "m_nSolidType", 0); DispatchSpawn(prop2); + SetEntPropFloat(prop2, Prop_Send, "m_flModelScale", 2.0); SetEntityCollisionGroup(prop2, 1); AcceptEntityInput(prop2, "DisableShadow"); AcceptEntityInput(prop2, "DisableCollision"); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/medival/npc_medival_trebuchet.sp b/addons/sourcemod/scripting/zombie_riot/npc/medival/npc_medival_trebuchet.sp index 9ee69ec0ea..e00516aa1f 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/medival/npc_medival_trebuchet.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/medival/npc_medival_trebuchet.sp @@ -259,11 +259,11 @@ public Action Smite_Timer_Trebuchet(Handle Smite_Logic, DataPack pack) if(IsValidEntity(prop2)) { DispatchKeyValue(prop2, "model", "models/props_junk/rock001a.mdl"); - DispatchKeyValue(prop2, "modelscale", "2.00"); DispatchKeyValue(prop2, "StartDisabled", "false"); DispatchKeyValue(prop2, "Solid", "0"); SetEntProp(prop2, Prop_Data, "m_nSolidType", 0); DispatchSpawn(prop2); + SetEntPropFloat(prop2, Prop_Send, "m_flModelScale", 2.0); SetEntityCollisionGroup(prop2, 1); AcceptEntityInput(prop2, "DisableShadow"); AcceptEntityInput(prop2, "DisableCollision"); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/medival/npc_medival_villager.sp b/addons/sourcemod/scripting/zombie_riot/npc/medival/npc_medival_villager.sp index dfba3a1fac..de5fc11679 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/medival/npc_medival_villager.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/medival/npc_medival_villager.sp @@ -195,6 +195,7 @@ methodmap MedivalVillager < CClotBody npc.m_flAttackHappens = 0.0; npc.m_flNextMeleeAttack = 0.0; + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); wave *= 0.133333; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_hunter.sp b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_hunter.sp index 84b6c9b731..710b735f85 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_hunter.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_hunter.sp @@ -46,7 +46,7 @@ static char g_SkewerSounds[][] = { void Hunter_OnMapStart_NPC() { - PrecacheModel("models/zombie_riot/hl2/hunter.mdl"); + PrecacheModel("models/zombie_riot/hl2/hunter_fix.mdl"); for (int i = 0; i < (sizeof(g_DeathSounds)); i++) { PrecacheSound(g_DeathSounds[i]); } for (int i = 0; i < (sizeof(g_HurtSounds)); i++) { PrecacheSound(g_HurtSounds[i]); } for (int i = 0; i < (sizeof(g_IdleAlertedSounds)); i++) { PrecacheSound(g_IdleAlertedSounds[i]); } @@ -122,7 +122,7 @@ methodmap Hunter < CClotBody public Hunter(float vecPos[3], float vecAng[3], int ally) { - Hunter npc = view_as(CClotBody(vecPos, vecAng, "models/zombie_riot/hl2/hunter.mdl", "1.0", "1000", ally)); + Hunter npc = view_as(CClotBody(vecPos, vecAng, "models/zombie_riot/hl2/hunter_fix.mdl", "1.0", "1000", ally)); i_NpcWeight[npc.index] = 3; FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); @@ -133,8 +133,8 @@ methodmap Hunter < CClotBody npc.m_flNextMeleeAttack = 0.0; npc.m_iBleedType = BLEEDTYPE_NORMAL; - npc.m_iStepNoiseType = STEPSOUND_NORMAL; - npc.m_iNpcStepVariation = STEPTYPE_NORMAL; + npc.m_iStepNoiseType = STEPSOUND_GIANT; + npc.m_iNpcStepVariation = STEPTYPE_TANK; func_NPCDeath[npc.index] = view_as(Hunter_NPCDeath); func_NPCOnTakeDamage[npc.index] = view_as(Hunter_OnTakeDamage); @@ -150,6 +150,7 @@ methodmap Hunter < CClotBody npc.m_flSpeed = 300.0; npc.m_flNextRangedSpecialAttack = 0.0; b_ThisNpcIsImmuneToNuke[npc.index] = true; + npc.m_fbRangedSpecialOn = false; return npc; } @@ -236,7 +237,7 @@ public void Hunter_ClotThink(int iNPC) } if(npc.m_flAbilityOrAttack1 < gameTime && flDistanceToTarget > 62500 && flDistanceToTarget < 122500 && npc.m_flReloadDelay < gameTime) { - int rng = GetRandomInt(0,1); + int rng = GetRandomInt(1,1); npc.i_AbilityUsage = rng; switch(npc.i_AbilityUsage) { @@ -382,20 +383,20 @@ void HunterSelfDefense(Hunter npc, float gameTime, int target, int usage) if(IsValidEnemy(npc.index, target)) { npc.m_iOverlordComboAttack++; - float damageDealt = 100.0; + float damageDealt = 250.0; if(ShouldNpcDealBonusDamage(target)) - damageDealt *= 5.0; + damageDealt *= 2.5; SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); // Hit sound npc.PlayMeleeHitSound(); } - if(npc.m_iOverlordComboAttack >= 5) + if(npc.m_iOverlordComboAttack >= 3) { npc.AddGesture("ACT_MELEE_ATTACK1"); - float damageDealt = 200.0; + float damageDealt = 500.0; if(ShouldNpcDealBonusDamage(target)) - damageDealt *= 10.0; + damageDealt *= 2.0; StartBleedingTimer(target, npc.index,100.0, 3, -1, DMG_TRUEDAMAGE, 0); SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); npc.m_flNextMeleeAttack = gameTime + 2.0; @@ -419,17 +420,18 @@ void HunterSelfDefense(Hunter npc, float gameTime, int target, int usage) if(gameTime > npc.m_flNextMeleeAttack) { - if(flDistanceToTarget < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 1.25)) + if(flDistanceToTarget < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED * 0.5)) { int Enemy_I_See; Enemy_I_See = Can_I_See_Enemy(npc.index, target); if(IsValidEnemy(npc.index, Enemy_I_See)) { + npc.m_fbRangedSpecialOn = true; npc.m_iTarget = Enemy_I_See; npc.AddGesture("ACT_HUNTER_MELEE_ATTACK1_VS_PLAYER"); npc.PlayMeleeSound(); - npc.StartPathing(); + npc.StopPathing(); npc.m_flAttackHappens = gameTime + 0.50; npc.m_flDoingAnimation = gameTime + 0.25; @@ -437,8 +439,22 @@ void HunterSelfDefense(Hunter npc, float gameTime, int target, int usage) return; } } + //"Code" that checks when the Hunter should start moving again after swinging + if(npc.m_fbRangedSpecialOn) + { + npc.StopPathing(); + npc.m_flSpeed = 0.0; + npc.m_flRangedSpecialDelay = GetGameTime(npc.index) + 0.25; + npc.m_fbRangedSpecialOn = false; + } + if(npc.m_flRangedSpecialDelay > GetGameTime(npc.index)) + { + npc.m_flSpeed = 300.0; + npc.StartPathing(); + } } } + /* if(npc.m_flNextRangedSpecialAttack) { if(npc.m_flNextRangedSpecialAttack <= gameTime) @@ -485,4 +501,5 @@ void HunterSelfDefense(Hunter npc, float gameTime, int target, int usage) } } } + */ } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_merlton.sp b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_merlton.sp index 632ecba877..4b06093684 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_merlton.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_merlton.sp @@ -260,7 +260,7 @@ static void Merlton_Boss_ClotThink(int iNPC) npc.FaceTowards(VecLook, 2000.0); npc.m_flAttackHappens_bullshit = gameTime + 0.3; RemoveSpecificBuff(closest, "MERLT0N-BUFF"); - ApplyStatusEffect(closest, closest, "MERLT0N-BUFF", 6.0); + ApplyStatusEffect(closest, closest, "MERLT0N-BUFF", 8.0); spawnRing_Vectors(VecLook, 100.0, 0.0, 0.0, 10.0, "materials/sprites/laserbeam.vmt", color[0], color[1], color[2], color[3], 1, 0.3, 5.0, 8.0, 3, 200.0 * 2.0); } @@ -400,13 +400,13 @@ void Merlton_SelfDefense(Merlton_Boss npc, float gameTime, int target, float dis if(IsValidEnemy(npc.index, target)) { - float damageDealt = npc.m_fbGunout ? 65.0 : 120.0; + float damageDealt = npc.m_fbGunout ? 100.0 : 150.0; if(ShouldNpcDealBonusDamage(target)) damageDealt *= 5.0; if(npc.Anger && !npc.m_fbGunout) { - float explosivedmg = 80.0, radius = 160.0; + float explosivedmg = 100.0, radius = 160.0; Explode_Logic_Custom(explosivedmg, npc.index, npc.index, -1, _, radius, _, _, true); float pos[3]; WorldSpaceCenter(target, pos); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_nova_prospekt_overseer.sp b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_nova_prospekt_overseer.sp new file mode 100644 index 0000000000..511d831050 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_nova_prospekt_overseer.sp @@ -0,0 +1,475 @@ +#pragma semicolon 1 +#pragma newdecls required + +static const char g_DeathSounds[][] = { + "npc/combine_soldier/die1.wav", + "npc/combine_soldier/die2.wav", + "npc/combine_soldier/die3.wav", +}; + +static const char g_HurtSounds[][] = { + "npc/combine_soldier/pain1.wav", + "npc/combine_soldier/pain2.wav", + "npc/combine_soldier/pain3.wav", +}; + +static const char g_IdleSounds[][] = { + "npc/combine_soldier/vo/alert1.wav", + "npc/combine_soldier/vo/bouncerbouncer.wav", + "npc/combine_soldier/vo/boomer.wav", + "npc/combine_soldier/vo/contactconfim.wav", +}; + +static const char g_IdleAlertedSounds[][] = { + "npc/combine_soldier/vo/alert1.wav", + "npc/combine_soldier/vo/bouncerbouncer.wav", + "npc/combine_soldier/vo/boomer.wav", + "npc/combine_soldier/vo/contactconfim.wav", +}; +static const char g_MeleeHitSounds[][] = { + "weapons/halloween_boss/knight_axe_hit.wav", +}; + +static const char g_MeleeAttackSounds[][] = { + "weapons/demo_sword_swing1.wav", + "weapons/demo_sword_swing2.wav", + "weapons/demo_sword_swing3.wav", +}; + + +static const char g_RangedAttackSounds[][] = { + "weapons/ar2/fire1.wav", +}; + +static const char g_RangedAttackSoundsSecondary[][] = { + "weapons/physcannon/energy_sing_explosion2.wav", +}; + +static const char g_RangedReloadSound[][] = { + "weapons/ar2/npc_ar2_reload.wav", +}; + + +void NovaProspektOverseer_OnMapStart_NPC() +{ + for (int i = 0; i < (sizeof(g_DeathSounds)); i++) { PrecacheSound(g_DeathSounds[i]); } + for (int i = 0; i < (sizeof(g_HurtSounds)); i++) { PrecacheSound(g_HurtSounds[i]); } + for (int i = 0; i < (sizeof(g_IdleSounds)); i++) { PrecacheSound(g_IdleSounds[i]); } + for (int i = 0; i < (sizeof(g_IdleAlertedSounds)); i++) { PrecacheSound(g_IdleAlertedSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeHitSounds)); i++) { PrecacheSound(g_MeleeHitSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeAttackSounds)); i++) { PrecacheSound(g_MeleeAttackSounds[i]); } + for (int i = 0; i < (sizeof(g_DefaultMeleeMissSounds)); i++) { PrecacheSound(g_DefaultMeleeMissSounds[i]); } + for (int i = 0; i < (sizeof(g_RangedAttackSounds)); i++) { PrecacheSound(g_RangedAttackSounds[i]); } + for (int i = 0; i < (sizeof(g_RangedReloadSound)); i++) { PrecacheSound(g_RangedReloadSound[i]); } + for (int i = 0; i < (sizeof(g_RangedAttackSoundsSecondary)); i++) { PrecacheSound(g_RangedAttackSoundsSecondary[i]); } + PrecacheModel(COMBINE_CUSTOM_MODEL); + + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Nova Prospekt Overseer"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_nova_prospekt_overseer"); + strcopy(data.Icon, sizeof(data.Icon), "demoknight"); + data.IconCustom = false; + data.Flags = 0; + data.Category = Type_Mutation; + data.Func = ClotSummon; + NPC_Add(data); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int team) +{ + return NovaProspektOverseer(vecPos, vecAng, team); +} + +methodmap NovaProspektOverseer < CClotBody +{ + public void PlayIdleSound() { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + EmitSoundToAll(g_IdleSounds[GetRandomInt(0, sizeof(g_IdleSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(24.0, 48.0); + + + } + + public void PlayIdleAlertSound() { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + + + } + + public void PlayHurtSound() { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + + this.m_flNextHurtSound = GetGameTime(this.index) + 0.4; + + EmitSoundToAll(g_HurtSounds[GetRandomInt(0, sizeof(g_HurtSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + + + + } + + public void PlayDeathSound() { + + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + + + } + + public void PlayMeleeSound() { + EmitSoundToAll(g_MeleeAttackSounds[GetRandomInt(0, sizeof(g_MeleeAttackSounds) - 1)], this.index, _, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + + + } + + public void PlayRangedSound() { + EmitSoundToAll(g_RangedAttackSounds[GetRandomInt(0, sizeof(g_RangedAttackSounds) - 1)], this.index, _, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + + + } + public void PlayRangedReloadSound() { + EmitSoundToAll(g_RangedReloadSound[GetRandomInt(0, sizeof(g_RangedReloadSound) - 1)], this.index, _, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + + + } + public void PlayRangedAttackSecondarySound() { + EmitSoundToAll(g_RangedAttackSoundsSecondary[GetRandomInt(0, sizeof(g_RangedAttackSoundsSecondary) - 1)], this.index, _, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + + + } + + public void PlayMeleeHitSound() { + EmitSoundToAll(g_MeleeHitSounds[GetRandomInt(0, sizeof(g_MeleeHitSounds) - 1)], this.index, _, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + + + } + + public void PlayMeleeMissSound() { + EmitSoundToAll(g_DefaultMeleeMissSounds[GetRandomInt(0, sizeof(g_DefaultMeleeMissSounds) - 1)], this.index, _, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 80); + + + } + + property float m_flOverseerSelfBuff + { + public get() { return fl_AbilityOrAttack[this.index][1]; } + public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][1] = TempValueForProperty; } + } + + + public NovaProspektOverseer(float vecPos[3], float vecAng[3], int ally) + { + NovaProspektOverseer npc = view_as(CClotBody(vecPos, vecAng, COMBINE_CUSTOM_MODEL, "1.15", "1500", ally)); + i_NpcWeight[npc.index] = 3; + + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + int iActivity = npc.LookupActivity("ACT_GENERAL_WALK"); + if(iActivity > 0) npc.StartActivity(iActivity); + + + npc.m_flNextMeleeAttack = 0.0; + + + npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iStepNoiseType = STEPSOUND_NORMAL; + npc.m_iNpcStepVariation = STEPTYPE_COMBINE; + + + func_NPCDeath[npc.index] = NovaProspektOverseer_NPCDeath; + func_NPCOnTakeDamage[npc.index] = NovaProspektOverseer_OnTakeDamage; + func_NPCThink[npc.index] = NovaProspektOverseer_ClotThink; + + + npc.m_iState = 0; + npc.m_flSpeed = 250.0; + npc.m_flNextRangedAttack = 0.0; + npc.m_flNextRangedSpecialAttack = 0.0; + npc.m_flNextMeleeAttack = 0.0; + npc.m_flAttackHappenswillhappen = false; + npc.m_fbRangedSpecialOn = false; + npc.m_flOverseerSelfBuff = GetGameTime(npc.index) + 1.0; + + npc.m_iWearable1 = npc.EquipItem("weapon_bone", "models/weapons/c_models/c_claymore/c_claymore.mdl"); + SetVariantString("0.85"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + + npc.m_iWearable2 = npc.EquipItem("head", "models/combine_soldier_prisonguard.mdl"); + SetVariantString("1.15"); + AcceptEntityInput(npc.m_iWearable2, "SetModelScale"); + + npc.StartPathing(); + + + return npc; + } + + +} + + +public void NovaProspektOverseer_ClotThink(int iNPC) +{ + NovaProspektOverseer npc = view_as(iNPC); + + if(npc.m_flOverseerSelfBuff < GetGameTime()) + { + if(npc.m_flMeleeArmor < 0.05) + { + npc.m_flMeleeArmor = 0.05; + } + if(npc.m_flRangedArmor < 0.05) + { + npc.m_flRangedArmor = 0.05; + } + EmitSoundToAll("items/battery_pickup.wav", npc.index, _, _, _, 0.85, 100); + float vecOverseer[3]; WorldSpaceCenter(iNPC, vecOverseer); + ParticleEffectAt(vecOverseer, "bomibomicon_ring", 1.0); + npc.m_flRangedArmor -= 0.01; + npc.m_flMeleeArmor -= 0.01; + npc.m_flOverseerSelfBuff = GetGameTime(npc.index) + 1.0; + } + + if(npc.m_flNextDelayTime > GetGameTime(npc.index)) + { + return; + } + + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + + npc.Update(); + + if(npc.m_blPlayHurtAnimation) + { + npc.AddGesture("ACT_GESTURE_FLINCH_HEAD", false); + npc.m_blPlayHurtAnimation = false; + npc.PlayHurtSound(); + } + + float TrueArmor = 1.0; + if(!NpcStats_IsEnemySilenced(npc.index)) + { + if(npc.m_fbRangedSpecialOn) + TrueArmor *= 0.15; + } + fl_TotalArmor[npc.index] = TrueArmor; + + if(npc.m_flNextThinkTime > GetGameTime(npc.index)) + { + return; + } + + npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.1; + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + + npc.m_iTarget = GetClosestTarget(npc.index); + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + GetRandomRetargetTime(); + } + + int PrimaryThreatIndex = npc.m_iTarget; + + if(IsValidEnemy(npc.index, PrimaryThreatIndex)) + { + float vecTarget[3]; WorldSpaceCenter(PrimaryThreatIndex, vecTarget); + + + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + + //Predict their pos. + if(flDistanceToTarget < npc.GetLeadRadius()) { + + float vPredictedPos[3]; PredictSubjectPosition(npc, PrimaryThreatIndex,_,_, vPredictedPos); + + /* int color[4]; + color[0] = 255; + color[1] = 255; + color[2] = 0; + color[3] = 255; + + int xd = PrecacheModel("materials/sprites/laserbeam.vmt"); + + TE_SetupBeamPoints(vPredictedPos, vecTarget, xd, xd, 0, 0, 0.25, 0.5, 0.5, 5, 5.0, color, 30); + TE_SendToAllInRange(vecTarget, RangeType_Visibility);*/ + + npc.SetGoalVector(vPredictedPos); + } else { + npc.SetGoalEntity(PrimaryThreatIndex); + } + + if(npc.m_flNextRangedSpecialAttack < GetGameTime(npc.index) && flDistanceToTarget < 22500 || npc.m_fbRangedSpecialOn) + { + // npc.FaceTowards(vecTarget, 20000.0); + if(!npc.m_fbRangedSpecialOn) + { + npc.AddGesture("ACT_PUSH_PLAYER"); + npc.m_flRangedSpecialDelay = GetGameTime(npc.index) + 0.4; + npc.m_fbRangedSpecialOn = true; + npc.m_flReloadDelay = GetGameTime(npc.index) + 1.0; + npc.StopPathing(); + + } + if(npc.m_flRangedSpecialDelay < GetGameTime(npc.index)) + { + npc.m_fbRangedSpecialOn = false; + npc.m_flNextRangedSpecialAttack = GetGameTime(npc.index) + 4.0; + npc.PlayRangedAttackSecondarySound(); + + float vecSpread = 0.1; + + npc.FaceTowards(vecTarget, 20000.0); + + float eyePitch[3]; + GetEntPropVector(npc.index, Prop_Data, "m_angRotation", eyePitch); + + // + // + + + float x, y; + x = GetRandomFloat( -0.0, 0.0 ) + GetRandomFloat( -0.0, 0.0 ); + y = GetRandomFloat( -0.0, 0.0 ) + GetRandomFloat( -0.0, 0.0 ); + + float vecDirShooting[3], vecRight[3], vecUp[3]; + //GetAngleVectors(eyePitch, vecDirShooting, vecRight, vecUp); + + vecTarget[2] += 15.0; + float SelfVecPos[3]; WorldSpaceCenter(npc.index, SelfVecPos); + MakeVectorFromPoints(SelfVecPos, vecTarget, vecDirShooting); + GetVectorAngles(vecDirShooting, vecDirShooting); + vecDirShooting[1] = eyePitch[1]; + GetAngleVectors(vecDirShooting, vecDirShooting, vecRight, vecUp); + + //add the spray + float vecDir[3]; + vecDir[0] = vecDirShooting[0] + x * vecSpread * vecRight[0] + y * vecSpread * vecUp[0]; + vecDir[1] = vecDirShooting[1] + x * vecSpread * vecRight[1] + y * vecSpread * vecUp[1]; + vecDir[2] = vecDirShooting[2] + x * vecSpread * vecRight[2] + y * vecSpread * vecUp[2]; + NormalizeVector(vecDir, vecDir); + float WorldSpaceVec[3]; WorldSpaceCenter(npc.index, WorldSpaceVec); + npc.DispatchParticleEffect(npc.index, "mvm_soldier_shockwave", NULL_VECTOR, NULL_VECTOR, NULL_VECTOR, npc.FindAttachment("anim_attachment_LH"), PATTACH_POINT_FOLLOW, true); + + { + FireBullet(npc.index, npc.index, WorldSpaceVec, vecDir, 60.0, 100.0, DMG_CLUB, "bullet_tracer02_blue", _,_,"anim_attachment_LH"); + } + } + } + + //Target close enough to hit + if((flDistanceToTarget < NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED && npc.m_flReloadDelay < GetGameTime(npc.index)) || npc.m_flAttackHappenswillhappen) + { + // npc.FaceTowards(vecTarget, 1000.0); + + if(npc.m_flNextMeleeAttack < GetGameTime(npc.index)) + { + if (!npc.m_flAttackHappenswillhappen) + { + npc.m_flNextRangedSpecialAttack = GetGameTime(npc.index) + 2.0; + npc.AddGesture("ACT_GENERAL_ATTACK_POKE"); + npc.PlayMeleeSound(); + npc.m_flAttackHappens = GetGameTime(npc.index)+0.4; + npc.m_flAttackHappens_bullshit = GetGameTime(npc.index)+0.54; + npc.m_flAttackHappenswillhappen = true; + } + + if (npc.m_flAttackHappens < GetGameTime(npc.index) && npc.m_flAttackHappens_bullshit >= GetGameTime(npc.index) && npc.m_flAttackHappenswillhappen) + { + Handle swingTrace; + npc.FaceTowards(vecTarget, 20000.0); + if(npc.DoSwingTrace(swingTrace, PrimaryThreatIndex)) + { + + int target = TR_GetEntityIndex(swingTrace); + + float damage = 150.0; + float vecHit[3]; + TR_GetEndPosition(vecHit, swingTrace); + + if(target > 0) + { + { + SDKHooks_TakeDamage(target, npc.index, npc.index, damage, DMG_CLUB, -1, _, vecHit); + damage += 10.0; + float OverseerLoc[3]; WorldSpaceCenter(npc.index, OverseerLoc); + GetEntPropVector(npc.index, Prop_Data, "m_vecAbsOrigin", OverseerLoc); + spawnRing_Vectors(OverseerLoc, 1.0, 0.0, 0.0, 10.0, "materials/sprites/laserbeam.vmt", 200, 25, 25, 255, 1, 1.0, 5.0, 5.0, 1, 150.0 * 2.0); + } + + Custom_Knockback(npc.index, target, 350.0); + + // Hit particle + + + // Hit sound + npc.PlayMeleeHitSound(); + } + } + delete swingTrace; + npc.m_flNextMeleeAttack = GetGameTime(npc.index) + 1.0; + npc.m_flAttackHappenswillhappen = false; + } + else if (npc.m_flAttackHappens_bullshit < GetGameTime(npc.index) && npc.m_flAttackHappenswillhappen) + { + npc.m_flAttackHappenswillhappen = false; + npc.m_flNextMeleeAttack = GetGameTime(npc.index) + 1.0; + } + } + } + if (npc.m_flReloadDelay < GetGameTime(npc.index)) + { + npc.StartPathing(); + + } + } + else + { + npc.StopPathing(); + + npc.m_flGetClosestTargetTime = 0.0; + npc.m_iTarget = GetClosestTarget(npc.index); + } + npc.PlayIdleAlertSound(); +} + +public Action NovaProspektOverseer_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) +{ + //Valid attackers only. + if(attacker <= 0) + return Plugin_Continue; + + NovaProspektOverseer npc = view_as(victim); + + /* + if(attacker > MaxClients && !IsValidEnemy(npc.index, attacker)) + return Plugin_Continue; + */ + + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } + + + return Plugin_Changed; +} + +public void NovaProspektOverseer_NPCDeath(int entity) +{ + NovaProspektOverseer npc = view_as(entity); + if(!npc.m_bGib) + { + npc.PlayDeathSound(); + } + + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_omega_raid.sp b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_omega_raid.sp index 4941107e88..8dc0658e79 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_omega_raid.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_omega_raid.sp @@ -68,19 +68,12 @@ static const char g_MeleeStunSounds[][] = { "ambient/energy/zap9.wav", }; -/* -static const char g_SpecialAttackSounds[][] = { - "npc/attack_helicopter/aheli_megabomb_siren1.wav", - "npc/attack_helicopter/aheli_mine_drop1.wav", -}; -*/ - static char g_RangedAttackSounds[][] = { "npc/attack_helicopter/aheli_mine_drop1.wav", }; -static char g_RangedReloadSound[][] = { - "weapons/revolver_worldreload.wav", +static char g_ArmorSounds[][] = { + "physics/metal/metal_box_strain2.wav" }; static int LastEnemyTargeted[MAXENTITIES]; @@ -89,6 +82,7 @@ static int LastEnemyTargeted[MAXENTITIES]; static float f_TalkDelayCheck; static int i_TalkDelayCheck; +static int usage; static int NpcID; @@ -106,10 +100,10 @@ void OmegaRaid_OnMapStart_NPC() for (int i = 0; i < (sizeof(g_MeleeAttackSounds)); i++) { PrecacheSound(g_MeleeAttackSounds[i]); } for (int i = 0; i < (sizeof(g_MeleeHitSounds)); i++) { PrecacheSound(g_MeleeHitSounds[i]); } for (int i = 0; i < (sizeof(g_RangedAttackSounds)); i++) { PrecacheSound(g_RangedAttackSounds[i]); } - for (int i = 0; i < (sizeof(g_RangedReloadSound)); i++) { PrecacheSound(g_RangedReloadSound[i]); } for (int i = 0; i < (sizeof(g_MeleeStunSounds)); i++) { PrecacheSound(g_MeleeStunSounds[i]); } for (int i = 0; i < (sizeof(g_BoomSounds)); i++) { PrecacheSound(g_BoomSounds[i]); } for (int i = 0; i < (sizeof(g_PullSounds)); i++) { PrecacheSound(g_PullSounds[i]); } + for (int i = 0; i < (sizeof(g_ArmorSounds)); i++) { PrecacheSound(g_ArmorSounds[i]); } PrecacheModel("models/combine_super_soldier.mdl"); NPCData data; strcopy(data.Name, sizeof(data.Name), "Omega"); @@ -187,8 +181,8 @@ methodmap OmegaRaid < CClotBody EmitSoundToAll(g_RangedAttackSounds[GetRandomInt(0, sizeof(g_RangedAttackSounds) - 1)], this.index, _, RAIDBOSS_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 95); } - public void PlayRangedReloadSound() { - EmitSoundToAll(g_RangedReloadSound[GetRandomInt(0, sizeof(g_RangedReloadSound) - 1)], this.index, _, RAIDBOSS_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 95); + public void PlayArmorSound() { + EmitSoundToAll(g_ArmorSounds[GetRandomInt(0, sizeof(g_ArmorSounds) - 1)], this.index, _, RAIDBOSS_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME, 95); } public void ArmorSet(float resistance = -1.0, bool uber = false) @@ -221,7 +215,56 @@ methodmap OmegaRaid < CClotBody public get() { return fl_AttackHappens_2[this.index]; } public set(float TempValueForProperty) { fl_AttackHappens_2[this.index] = TempValueForProperty; } } + property float m_flThrowSupportGrenadeHappening + { + public get() { return fl_AbilityOrAttack[this.index][0]; } + public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][0] = TempValueForProperty; } + } + property float m_flRollermineSpawn + { + public get() { return fl_AbilityOrAttack[this.index][1]; } + public set(float TempValueForProperty) { fl_AbilityOrAttack[this.index][1] = TempValueForProperty; } + } + public int FireGrenade(float vecTarget[3]) + { + int entity = CreateEntityByName("tf_projectile_pipe_remote"); + if(IsValidEntity(entity)) + { + float vecForward[3], vecSwingStart[3], vecAngles[3]; + this.GetVectors(vecForward, vecSwingStart, vecAngles); + + GetAbsOrigin(this.index, vecSwingStart); + vecSwingStart[2] += 90.0; + + MakeVectorFromPoints(vecSwingStart, vecTarget, vecAngles); + GetVectorAngles(vecAngles, vecAngles); + vecSwingStart[0] += vecForward[0] * 64; + vecSwingStart[1] += vecForward[1] * 64; + vecSwingStart[2] += vecForward[2] * 64; + + vecForward[0] = Cosine(DegToRad(vecAngles[0]))*Cosine(DegToRad(vecAngles[1]))*800.0; + vecForward[1] = Cosine(DegToRad(vecAngles[0]))*Sine(DegToRad(vecAngles[1]))*800.0; + vecForward[2] = Sine(DegToRad(vecAngles[0]))*-800.0; + + SetEntProp(entity, Prop_Data, "m_nNextThinkTick", -1); + SetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity", this.index); + SetEntProp(entity, Prop_Send, "m_iType", 1); + + SetEntProp(entity, Prop_Send, "m_iTeamNum", TFTeam_Blue); + TeleportEntity(entity, vecSwingStart, vecAngles, NULL_VECTOR); + DispatchSpawn(entity); + SetEntityModel(entity, "models/Items/battery.mdl"); + SetEntPropFloat(entity, Prop_Send, "m_flModelScale", 1.1); + TeleportEntity(entity, NULL_VECTOR, NULL_VECTOR, vecForward); + b_StickyIsSticking[entity] = true; + + // SetEntProp(entity, Prop_Send, "m_bTouched", true); + SetEntityCollisionGroup(entity, 1); + return entity; + } + return -1; + } public OmegaRaid(float vecPos[3], float vecAng[3], int ally, const char[] data) { @@ -232,7 +275,7 @@ methodmap OmegaRaid < CClotBody { b_NpcUnableToDie[npc.index] = true; i_RaidGrantExtra[npc.index] = 5; - npc.m_flSpeed = 250.0; + npc.m_flSpeed = 300.0; } else { @@ -290,7 +333,10 @@ methodmap OmegaRaid < CClotBody b_thisNpcIsARaid[npc.index] = true; b_ThisNpcIsImmuneToNuke[npc.index] = true; npc.m_bWasSadAlready = false; + npc.m_fbRangedSpecialOn = false; npc.m_flOmegaAirbornAttack = GetGameTime(npc.index) + 7.5; + npc.m_flThrowSupportGrenadeHappening = GetGameTime(npc.index) + 15.0; + npc.m_flRollermineSpawn = GetGameTime(npc.index) + 20.0; AlreadySaidWin = false; @@ -393,6 +439,7 @@ static void RocketBarrage_Ability(OmegaRaid npc, int target) { if(npc.m_flOmegaAirbornAttack < GetGameTime(npc.index)) { + usage = 1; if(IsValidEnemy(npc.index, target)) { static float flPos[3]; @@ -417,7 +464,7 @@ static void RocketBarrage_Ability(OmegaRaid npc, int target) //GetEntPropVector(npc.index, Prop_Data, "m_vecAbsOrigin", pos); //pos[2] += 5.0; //float ang_Look[3]; GetEntPropVector(npc.index, Prop_Data, "m_angRotation", ang_Look); - npc.m_flOmegaAirbornAttack = GetGameTime(npc.index) + 30.0; + npc.m_flOmegaAirbornAttack = GetGameTime(npc.index) + 20.0; if(npc.Anger) ApplyStatusEffect(npc.index, npc.index, "Defensive Backup", 3.0); @@ -471,8 +518,7 @@ static bool Omega_AirAttack(OmegaRaid npc) float DamageCalc = 30.0 * RaidModeScaling; float VecEnemy[3]; WorldSpaceCenter(TargetEnemy, VecEnemy); float vecTarget[3]; WorldSpaceCenter(PrimaryThreatIndex, vecTarget); - npc.FaceTowards(VecEnemy, 150.0); - //NemalAirSlice(npc.index, TargetEnemy, DamageCalc, 215, 150, 0, 200.0, 6, 1750.0, "rockettrail_fire"); + npc.FaceTowards(VecEnemy, 100.0); npc.PlayRangedSound(); npc.FireRocket(vecTarget, DamageCalc, 1000.0, "models/weapons/w_missile.mdl", 1.75); } @@ -492,6 +538,7 @@ static bool Omega_AirAttack(OmegaRaid npc) //npc.SetActivity("ACT_MP_JUMP_FLOAT_MELEE_ALLCLASS"); return true; } + usage = 0; npc.m_iChanged_WalkCycle = 0; i_NpcWeight[npc.index] = 4; b_NoGravity[npc.index] = false; @@ -538,7 +585,7 @@ public void OmegaRaid_ClotThink(int iNPC) } case 1: { - CPrintToChatAll("{gold}오메가{default}: 날 이기지 못 하면, 우리 세계에도 희망은 없을거다."); + CPrintToChatAll("{gold}Omega{default}: If you can't beat me... I guess I'll get out of retirement to save the world myself."); } } } @@ -598,6 +645,42 @@ public void OmegaRaid_ClotThink(int iNPC) } } + //Spawn Rollermines + if(npc.m_flRollermineSpawn < GetGameTime()) + { + //If he's using the RPG, this animation won't play + if(usage != 1) + { + npc.AddGesture("ACT_COMBINE_THROW_GRENADE"); + } + npc.m_fbRangedSpecialOn = true; + OmegaCreateRollermines(iNPC); + npc.m_flRollermineSpawn = GetGameTime(npc.index) + 17.5; + //Half-life cooldown reduction + if(npc.Anger) + { + npc.m_flRollermineSpawn = GetGameTime(npc.index) + 12.5; + } + } + + //Throw Grenade + if(npc.m_flThrowSupportGrenadeHappening < GetGameTime()) + { + //If he's using the RPG, this animation won't play + if(usage != 1) + { + npc.AddGesture("ACT_METROPOLICE_DEPLOY_MANHACK"); + } + npc.m_fbRangedSpecialOn = true; + OmegaThrowGrenadeHappening(npc); + npc.m_flThrowSupportGrenadeHappening = GetGameTime(npc.index) + 30.0; + //Half-life cooldown reduction + if(npc.Anger) + { + npc.m_flRollermineSpawn = GetGameTime(npc.index) + 25.0; + } + } + if(npc.m_flOmegaRPGHappening) { if(Omega_AirAttack(npc)) @@ -661,6 +744,268 @@ public void OmegaRaid_ClotThink(int iNPC) npc.m_iTarget = GetClosestTarget(npc.index); } npc.PlayIdleAlertSound(); + +} + +void OmegaThrowGrenadeHappening(OmegaRaid npc) +{ + if(npc.m_flThrowSupportGrenadeHappening) + { + if(npc.m_flThrowSupportGrenadeHappening < GetGameTime()) + { + switch(GetRandomInt(0,4)) //Armornade voicelines + { + case 0: + { + CPrintToChatAll("{gold}Omega{default}: See this area? I feel like denying it."); + } + case 1: + { + CPrintToChatAll("{gold}Omega{default}: You didn't think you were the only ones with grenades, did you?"); + } + case 2: + { + CPrintToChatAll("{gold}Omega{default}: I knew these would come in handy."); + } + case 3: + { + CPrintToChatAll("{gold}Omega{default}: You've got too much space to maneuver around in, I think I'll restrict some of it."); + } + case 4: + { + CPrintToChatAll("{gold}Omega{default}: I never come unprepared."); + } + } + npc.m_flThrowSupportGrenadeHappening = 0.0; + float vecTarget[3]; + float VecStart[3]; WorldSpaceCenter(npc.index, VecStart ); + + if(IsValidEnemy(npc.index, npc.m_iTarget)) + { + PredictSubjectPositionForProjectiles(npc, npc.index, 800.0,_,vecTarget); + } + else + { + WorldSpaceCenter(npc.index, vecTarget); + //incase theres no valid enemy, throw onto ourselves instead. + } + //damage doesnt matter. + int Grenade = npc.FireGrenade(vecTarget); + float GrenadeRangeSupport = 250.0; + float damage = 60.0; + damage *= 0.50; + damage *= RaidModeScaling; + float HealDo = 5000.0; + HealDo *= RaidModeScaling; + Omega_GrenadeSupportDo(npc.index, Grenade, damage, GrenadeRangeSupport, HealDo); + float SpeedReturn[3]; + ArcToLocationViaSpeedProjectile(VecStart, vecTarget, SpeedReturn, 1.75, 1.0); + TeleportEntity(Grenade, NULL_VECTOR, NULL_VECTOR, SpeedReturn); + //Throw a grenade towards the target! + } + } +} + +void Omega_GrenadeSupportDo(int entity, int grenade, float damage, float RangeSupport, float HealDo) +{ + DataPack pack; + CreateDataTimer(1.5, Timer_Omega_SupportGrenade, pack, TIMER_REPEAT); + pack.WriteCell(EntIndexToEntRef(entity)); + pack.WriteCell(EntIndexToEntRef(grenade)); + pack.WriteFloat(damage); + pack.WriteFloat(RangeSupport * 0.9); + pack.WriteFloat(HealDo); + + + DataPack pack2; + CreateDataTimer(0.25, Timer_Omega_SupportGrenadeIndication, pack2, TIMER_REPEAT); + pack2.WriteCell(EntIndexToEntRef(entity)); + pack2.WriteCell(EntIndexToEntRef(grenade)); + pack2.WriteFloat(damage); + pack2.WriteFloat(RangeSupport); +} + +public Action Timer_Omega_SupportGrenadeIndication(Handle timer, DataPack pack) +{ + pack.Reset(); + int OwnerNpc = EntRefToEntIndex(pack.ReadCell()); + int Projectile = EntRefToEntIndex(pack.ReadCell()); + if(!IsValidEntity(OwnerNpc)) + { + if(IsValidEntity(Projectile)) + { + //Cancel. + RemoveEntity(Projectile); + } + return Plugin_Stop; + } + else + { + if(!IsEntityAlive(OwnerNpc)) + { + if(IsValidEntity(Projectile)) + { + //Cancel. + RemoveEntity(Projectile); + } + return Plugin_Stop; + } + } + if(!IsValidEntity(Projectile)) + return Plugin_Stop; + + float DamageDeal = pack.ReadFloat(); + float RangeSupport = pack.ReadFloat(); + float RangeSupport2 = RangeSupport * 0.25; + + + float pos[3]; GetEntPropVector(Projectile, Prop_Data, "m_vecAbsOrigin", pos); + pos[2] += 5.0; + if(DamageDeal >= 1.0) + { + spawnRing_Vectors(pos, RangeSupport * 2.0, 0.0, 0.0, 0.0, "materials/sprites/laserbeam.vmt", 255, 255, 0, 200, 1, 0.3, 2.0, 2.0, 2); + spawnRing_Vectors(pos, RangeSupport2 * 2.0, 0.0, 0.0, 0.0, "materials/sprites/laserbeam.vmt", 255, 255, 0, 200, 1, 0.3, 2.0, 2.0, 2); + } + return Plugin_Continue; +} + +public Action Timer_Omega_SupportGrenade(Handle timer, DataPack pack) +{ + pack.Reset(); + int OwnerNpc = EntRefToEntIndex(pack.ReadCell()); + int Projectile = EntRefToEntIndex(pack.ReadCell()); + if(!IsValidEntity(OwnerNpc)) + { + if(IsValidEntity(Projectile)) + { + //Cancel. + RemoveEntity(Projectile); + } + return Plugin_Stop; + } + else + { + if(!IsEntityAlive(OwnerNpc)) + { + if(IsValidEntity(Projectile)) + { + //Cancel. + RemoveEntity(Projectile); + } + return Plugin_Stop; + } + } + + if(!IsValidEntity(Projectile)) + return Plugin_Stop; + + float DamageDeal = pack.ReadFloat(); + float RangeSupport = pack.ReadFloat(); + float HealDo = pack.ReadFloat(); + + if(DamageDeal >= 1.0) + { + float pos[3]; GetEntPropVector(Projectile, Prop_Data, "m_vecAbsOrigin", pos); + pos[2] += 5.0; + + spawnRing_Vectors(pos, 2.0 /*startin range*/, 0.0, 0.0, 0.0, "materials/sprites/laserbeam.vmt", 255, 255, 0, 200, 1, 0.5, 2.0, 2.0, 2, RangeSupport * 2.0); + } + if(HealDo >= 1.0) + { + ExpidonsaGroupHeal(Projectile, RangeSupport, 99, HealDo, 1.15, false, OmegaGiveArmor); + EmitSoundToAll("physics/metal/metal_box_strain1.wav", Projectile, _, 100, _, 1.0, 90); + } + return Plugin_Continue; + +} +//GrantEntityArmor doesn't support "range" so I have to do it like this lol + +void OmegaGiveArmor(int entity, int victim, float &healingammount, OmegaRaid npc) +{ + GrantEntityArmor(victim, false, 0.1, 0.75, 0, ReturnEntityMaxHealth(npc.index) * 200.0); +} + +void OmegaCreateRollermines(int iNpc) +{ + switch(GetRandomInt(0,4)) //Rollermine voicelines + { + case 0: + { + CPrintToChatAll("{gold}Omega{default}: Aren't they just the cutest things ever?"); + } + case 1: + { + CPrintToChatAll("{gold}Omega{default}: Get a load of these uh... rollermines, as I like to call them."); + } + case 2: + { + CPrintToChatAll("{gold}Omega{default}: Don't underestimate my mechanical expertise."); + } + case 3: + { + CPrintToChatAll("{gold}Omega{default}: Rollermines, roll out. Heh, see what I did there?"); + } + case 4: + { + CPrintToChatAll("{gold}Omega{default}: Protect me, zappies."); + } + } + + OmegaRaid npc = view_as(iNpc); + + float pos[3]; GetEntPropVector(npc.index, Prop_Data, "m_vecAbsOrigin", pos); + int summon = NPC_CreateByName("npc_rollermine", -1, pos, {0.0,0.0,0.0}, GetTeam(npc.index)); + if(IsValidEntity(summon)) + { + /* + int count; + for(int i; i < i_MaxcountNpcTotal; i++) + { + summon = EntRefToEntIndexFast(i_ObjectsNpcsTotal[i]); + if(summon != INVALID_ENT_REFERENCE && IsEntityAlive(summon) && GetTeam(summon) == GetTeam(npc.index)) + { + if(++count) + { + npc.m_flRangedArmor -= 0.03; + npc.m_flMeleeArmor -= 0.03; + break; + } + else if(--count) + { + npc.m_flRangedArmor += 0.05; + npc.m_flMeleeArmor += 0.05; + break; + } + } + } + */ + OmegaRaid npcsummon = view_as(summon); + if(GetTeam(npc.index) != TFTeam_Red) + Zombies_Currently_Still_Ongoing++; + + fl_Extra_Damage[npcsummon.index] = fl_Extra_Damage[npc.index]; + fl_Extra_Damage[npcsummon.index] *= 1.5; + npcsummon.m_iTargetAlly = iNpc; + SetEntProp(summon, Prop_Data, "m_iHealth", ReturnEntityMaxHealth(npc.index)/120); + SetEntProp(summon, Prop_Data, "m_iMaxHealth", ReturnEntityMaxHealth(npc.index)/120); + NpcStats_CopyStats(npc.index, summon); + //npcsummon.m_iWearable1 = ConnectWithBeam(npc.index, npcsummon.index, 0, 150, 195, 0.5, 0.5, 1.0, "sprites/laserbeam.vmt"); + } + summon = NPC_CreateByName("npc_rollermine", -1, pos, {0.0,0.0,0.0}, GetTeam(npc.index)); + if(IsValidEntity(summon)) + { + OmegaRaid npcsummon = view_as(summon); + if(GetTeam(npc.index) != TFTeam_Red) + Zombies_Currently_Still_Ongoing++; + + fl_Extra_Damage[npcsummon.index] = fl_Extra_Damage[npc.index]; + fl_Extra_Damage[npcsummon.index] *= 1.5; + npcsummon.m_iTargetAlly = iNpc; + SetEntProp(summon, Prop_Data, "m_iHealth", ReturnEntityMaxHealth(npc.index)/120); + SetEntProp(summon, Prop_Data, "m_iMaxHealth", ReturnEntityMaxHealth(npc.index)/120); + NpcStats_CopyStats(npc.index, summon); + //npcsummon.m_iWearable1 = ConnectWithBeam(npc.index, npcsummon.index, 0, 150, 195, 0.5, 0.5, 1.0, "sprites/laserbeam.vmt"); + } } static void Omegas_SelfDefense(OmegaRaid npc, float gameTime, int target, float flDistanceToTarget) @@ -702,8 +1047,6 @@ static void Omegas_SelfDefense(OmegaRaid npc, float gameTime, int target, float damage = 1.0; } SDKHooks_TakeDamage(targetTrace, npc.index, npc.index, damage, DMG_CLUB, -1, _, vecHit); - //Reduce damage after dealing - damage *= 0.92; // On Hit stuff bool Knocked = false; if(!PlaySound) @@ -750,7 +1093,6 @@ static void Omegas_SelfDefense(OmegaRaid npc, float gameTime, int target, float } if(npc.m_iOverlordComboAttack >= 10) { - damage *= RaidModeScaling + 100.0; npc.AddGesture("ACT_PUSH_PLAYER"); float duration = 1.0; if(target <= MaxClients && target > 0) @@ -762,7 +1104,7 @@ static void Omegas_SelfDefense(OmegaRaid npc, float gameTime, int target, float FreezeNpcInTime(target, duration); } Custom_Knockback(npc.index, targetTrace, 1000.0, true, true); - Explode_Logic_Custom(50.0, -1, npc.index, -1, vecTarget, 100.0, _, _, true, _, false); + Explode_Logic_Custom(60.0 * RaidModeScaling, -1, npc.index, -1, vecTarget, 100.0, _, _, true, _, false); ParticleEffectAt(vecTarget, "hightower_explosion", 1.0); npc.PlayMeleeStunSound(); npc.PlayBoomSound(); @@ -819,12 +1161,24 @@ static void Omegas_SelfDefense(OmegaRaid npc, float gameTime, int target, float if(npc.Anger) { npc.m_flAttackHappens = gameTime + 0.1; - npc.m_flNextMeleeAttack = gameTime + 0.30; + npc.m_flNextMeleeAttack = gameTime + 0.25; } return; } } } + if(npc.m_fbRangedSpecialOn) + { + npc.StopPathing(); + npc.m_flSpeed = 0.0; + npc.m_flRangedSpecialDelay = GetGameTime(npc.index) + 1.0; + npc.m_fbRangedSpecialOn = false; + } + if(npc.m_flRangedSpecialDelay < GetGameTime(npc.index)) + { + npc.m_flSpeed = 300.0; + npc.StartPathing(); + } } static Action OmegaRaid_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) { @@ -1242,7 +1596,7 @@ static void OmegaRaid_Weapon_Lines(OmegaRaid npc, int client) case 0: Format(Text_Lines, sizeof(Text_Lines), "이건 뭐야? 무슨 장난질인가?"); case 1: - Format(Text_Lines, sizeof(Text_Lines), "도대체 그 무기는 어떻게 얻은건데, {gold}%N{default}...",client); + Format(Text_Lines, sizeof(Text_Lines), "Where in the fuck did you get that, {gold}%N{default}?",client); } } case WEAPON_MAGNESIS: @@ -1491,11 +1845,11 @@ public void RaidMode_OmegaRaid_WinCondition(int entity) } case 1: { - OmegaRaid_Reply("{default}이런 말을 하기엔 좀 미안하지만... 실력이 좀 떨어진것 같아. 좀 더 강해지지 않으면 {purple}그것{default}을 이길 수 없어."); + OmegaRaid_Reply("{default}You've gone soft, you need to get stronger to keep up."); } case 2: { - OmegaRaid_Reply("{default}넌 지면 안 돼! 이 세계의 운명이 네 손에 달려있다고, 젠장!"); + OmegaRaid_Reply("{default}You're not ready to take on bigger threats just yet. I'll take care of business."); } } } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_rollermine.sp b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_rollermine.sp new file mode 100644 index 0000000000..53168a9755 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/other/npc_rollermine.sp @@ -0,0 +1,257 @@ +#pragma semicolon 1 +#pragma newdecls required + +static const char g_DeathSounds[][] = { + "weapons/explode3.wav", + "weapons/explode4.wav", + "weapons/explode5.wav", +}; + +static const char g_IdleAlertedSounds[][] = { + "npc/roller/mine/rmine_taunt1.wav", + "npc/roller/mine/rmine_taunt2.wav", + "npc/roller/mine/rmine_tossed1.wav", +}; + +static const char g_MeleeAttackSounds[][] = { + "npc/roller/mine/rmine_blades_out1.wav", + "npc/roller/mine/rmine_blades_out2.wav", + "npc/roller/mine/rmine_blades_out3.wav", +}; + +static const char g_MeleeHitSounds[][] = { + "npc/roller/mine/rmine_explode_shock1.wav" +}; + +void Rollermine_OnMapStart_NPC() +{ + for (int i = 0; i < (sizeof(g_DeathSounds)); i++) { PrecacheSound(g_DeathSounds[i]); } + for (int i = 0; i < (sizeof(g_IdleAlertedSounds)); i++) { PrecacheSound(g_IdleAlertedSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeAttackSounds)); i++) { PrecacheSound(g_MeleeAttackSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeHitSounds)); i++) { PrecacheSound(g_MeleeHitSounds[i]); } + PrecacheModel("models/bots/bot_worker/bot_worker_a.mdl"); + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Rollermine"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_rollermine"); + strcopy(data.Icon, sizeof(data.Icon), "militia"); + data.IconCustom = true; + data.Flags = 0; + data.Category = Type_Mutation; + data.Func = ClotSummon; + NPC_Add(data); +} + + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int team) +{ + return Rollermine(vecPos, vecAng, team); +} +methodmap Rollermine < CClotBody +{ + public void PlayIdleAlertSound() + { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleAlertedSounds[GetRandomInt(0, sizeof(g_IdleAlertedSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + + } + + public void PlayDeathSound() + { + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_VOICE, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + + public void PlayMeleeSound() + { + EmitSoundToAll(g_MeleeAttackSounds[GetRandomInt(0, sizeof(g_MeleeAttackSounds) - 1)], this.index, SNDCHAN_AUTO, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + } + public void PlayMeleeHitSound() + { + EmitSoundToAll(g_MeleeHitSounds[GetRandomInt(0, sizeof(g_MeleeHitSounds) - 1)], this.index, SNDCHAN_STATIC, NORMAL_ZOMBIE_SOUNDLEVEL, _, NORMAL_ZOMBIE_VOLUME); + + } + + + public Rollermine(float vecPos[3], float vecAng[3], int ally) + { + Rollermine npc = view_as(CClotBody(vecPos, vecAng, "models/bots/bot_worker/bot_worker_a.mdl", "1.0", "700", ally)); + + i_NpcWeight[npc.index] = 3; + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + int iActivity = npc.LookupActivity("ACT_IDLE"); + if(iActivity > 0) npc.StartActivity(iActivity); + + npc.m_flNextMeleeAttack = 0.0; + + npc.m_iBleedType = BLEEDTYPE_METAL; + npc.m_iStepNoiseType = STEPTYPE_NONE; + npc.m_iNpcStepVariation = STEPTYPE_NONE; + + func_NPCDeath[npc.index] = view_as(Rollermine_NPCDeath); + func_NPCOnTakeDamage[npc.index] = view_as(Rollermine_OnTakeDamage); + func_NPCThink[npc.index] = view_as(Rollermine_ClotThink); + + + npc.StartPathing(); + npc.m_flSpeed = 300.0; + b_DissapearOnDeath[npc.index] = true; + b_DoGibThisNpc[npc.index] = true; + + /* + //Not really sure how to make this work for now lmao + float Vec[3], Ang[3]={0.0,0.0,0.0}; + GetAbsOrigin(npc.index, Vec); + npc.m_iWearable1 = npc.EquipItemSeperate("models/roller_spikes.mdl"); + Ang = view_as( { 0.0, -90.0, -90.0 } ); + Vec[0] += 37.5; + Vec[2] += 51.2; + //Vec[2] += -200.0; + TeleportEntity(npc.m_iWearable1, Vec, Ang, NULL_VECTOR); + SetEntityRenderColor(npc.index, 0, 0, 0, 0); + */ + return npc; + } +} + +public void Rollermine_ClotThink(int iNPC) +{ + Rollermine npc = view_as(iNPC); + if(npc.m_flNextDelayTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextDelayTime = GetGameTime(npc.index) + DEFAULT_UPDATE_DELAY_FLOAT; + npc.Update(); + + if(npc.m_blPlayHurtAnimation) + { + npc.AddGesture("ACT_MP_GESTURE_FLINCH_CHEST", false); + npc.m_blPlayHurtAnimation = false; + } + + if(npc.m_flNextThinkTime > GetGameTime(npc.index)) + { + return; + } + npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.1; + + if(npc.m_flGetClosestTargetTime < GetGameTime(npc.index)) + { + npc.m_iTarget = GetClosestTarget(npc.index); + npc.m_flGetClosestTargetTime = GetGameTime(npc.index) + GetRandomRetargetTime(); + } + + if(IsValidEnemy(npc.index, npc.m_iTarget)) + { + float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget ); + + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + if(flDistanceToTarget < npc.GetLeadRadius()) + { + float vPredictedPos[3]; + PredictSubjectPosition(npc, npc.m_iTarget,_,_, vPredictedPos); + npc.SetGoalVector(vPredictedPos); + } + else + { + npc.SetGoalEntity(npc.m_iTarget); + } + RollermineSelfDefense(npc,GetGameTime(npc.index), npc.m_iTarget, flDistanceToTarget); + } + else + { + npc.m_flGetClosestTargetTime = 0.0; + npc.m_iTarget = GetClosestTarget(npc.index); + } + npc.PlayIdleAlertSound(); +} + +public Action Rollermine_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) +{ + Rollermine npc = view_as(victim); + + if(attacker <= 0) + return Plugin_Continue; + + if (npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } + + return Plugin_Changed; +} + +public void Rollermine_NPCDeath(int entity) +{ + Rollermine npc = view_as(entity); + if(!npc.m_bGib) + { + npc.PlayDeathSound(); + } + +} + +void RollermineSelfDefense(Rollermine npc, float gameTime, int target, float distance) +{ + if(npc.m_flAttackHappens) + { + if(npc.m_flAttackHappens < gameTime) + { + npc.m_flAttackHappens = 0.0; + + Handle swingTrace; + float VecEnemy[3]; WorldSpaceCenter(npc.m_iTarget, VecEnemy); + npc.FaceTowards(VecEnemy, 15000.0); + if(npc.DoSwingTrace(swingTrace, npc.m_iTarget)) //Big range, but dont ignore buildings if somehow this doesnt count as a raid to be sure. + { + + target = TR_GetEntityIndex(swingTrace); + + float vecHit[3]; + TR_GetEndPosition(vecHit, swingTrace); + + if(IsValidEnemy(npc.index, target)) + { + float damageDealt = 200.0; + if(ShouldNpcDealBonusDamage(target)) + damageDealt *= 1.5; + + + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); + + // Hit sound + npc.PlayMeleeHitSound(); + ApplyStatusEffect(npc.index, target, "Teslar Electricution", 10.0); + ApplyStatusEffect(npc.index, target, "Electric Impairability", 10.0); + Custom_Knockback(target, npc.index, 1000.0, true, true); + } + } + delete swingTrace; + } + } + + if(gameTime > npc.m_flNextMeleeAttack) + { + if(distance < (NORMAL_ENEMY_MELEE_RANGE_FLOAT_SQUARED)) + { + int Enemy_I_See; + + Enemy_I_See = Can_I_See_Enemy(npc.index, npc.m_iTarget); + + if(IsValidEnemy(npc.index, Enemy_I_See)) + { + npc.m_iTarget = Enemy_I_See; + npc.PlayMeleeSound(); + + npc.m_flAttackHappens = gameTime + 0.25; + npc.m_flDoingAnimation = gameTime + 0.25; + npc.m_flNextMeleeAttack = gameTime + 0.25; + } + } + } +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_police_pistol.sp b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_police_pistol.sp index a5b2e3fbed..f68c544135 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_police_pistol.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_police_pistol.sp @@ -166,7 +166,7 @@ methodmap Seaborn_Combine_Police_Pistol < CClotBody npc.m_fbGunout = false; npc.m_bmovedelay = false; - npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iBleedType = BLEEDTYPE_SEABORN; npc.m_iStepNoiseType = STEPSOUND_NORMAL; npc.m_iNpcStepVariation = STEPTYPE_COMBINE; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_police_smg.sp b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_police_smg.sp index 466584e7cc..8775e4af87 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_police_smg.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_police_smg.sp @@ -180,7 +180,7 @@ methodmap SeabornCombinePoliceSmg < CClotBody npc.m_fbGunout = false; - npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iBleedType = BLEEDTYPE_SEABORN; npc.m_iStepNoiseType = STEPSOUND_NORMAL; npc.m_iNpcStepVariation = STEPTYPE_COMBINE; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_soldier_ar2.sp b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_soldier_ar2.sp index e343361a3e..2b9e268efc 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_soldier_ar2.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_soldier_ar2.sp @@ -190,7 +190,7 @@ methodmap SeabornCombineSoldierAr2 < CClotBody - npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iBleedType = BLEEDTYPE_SEABORN; npc.m_iStepNoiseType = STEPSOUND_NORMAL; npc.m_iNpcStepVariation = STEPTYPE_COMBINE; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_soldier_elite.sp b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_soldier_elite.sp index b721a0e526..c178be2941 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_soldier_elite.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_soldier_elite.sp @@ -168,7 +168,7 @@ methodmap SeabornCombineElite < CClotBody - npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iBleedType = BLEEDTYPE_SEABORN; npc.m_iStepNoiseType = STEPSOUND_NORMAL; npc.m_iNpcStepVariation = STEPTYPE_COMBINE; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_soldier_shotgun.sp b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_soldier_shotgun.sp index d22048285e..d23ba86fe9 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_soldier_shotgun.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/mutations/combinehell/seaborn/npc_seaborn_combine_soldier_shotgun.sp @@ -179,7 +179,7 @@ methodmap SeabornCombineSoldierShotgun < CClotBody - npc.m_iBleedType = BLEEDTYPE_NORMAL; + npc.m_iBleedType = BLEEDTYPE_SEABORN; npc.m_iStepNoiseType = STEPSOUND_NORMAL; npc.m_iNpcStepVariation = STEPTYPE_COMBINE; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/mutations/randomboss/npc_boss_battle_only.sp b/addons/sourcemod/scripting/zombie_riot/npc/mutations/randomboss/npc_boss_battle_only.sp index 0443541b68..0295dd9f5c 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/mutations/randomboss/npc_boss_battle_only.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/mutations/randomboss/npc_boss_battle_only.sp @@ -266,8 +266,20 @@ void BossBattleSummonRaidboss(int bosssummonbase) } case 11: { - PluginName = "npc_xeno_raidboss_nemesis"; - + //needs buffs!! + switch(GetRandomInt(1,4)) + { + case 1: + { + PluginName = "npc_xeno_raidboss_nemesis"; + Format(CharData, sizeof(CharData), "%s%s",CharData, "enraged"); + } + default: + { + PluginName = "npc_xeno_raidboss_nemesis"; + } + } + enemy.ExtraDamage *= 0.9; enemy.Health = RoundToNearest(float(enemy.Health) * 1.3); //he doesnt really scale? i dont know what to do. @@ -422,7 +434,7 @@ void BossBattleSummonRaidboss(int bosssummonbase) case 1: { PluginName = "npc_vincent"; - Format(CharData, sizeof(CharData), "%s%s",CharData, "forceangry"); + Format(CharData, sizeof(CharData), "%s%s",CharData, "forceangry;forcesad"); } default: { @@ -448,21 +460,22 @@ void BossBattleSummonRaidboss(int bosssummonbase) Format(CharData, sizeof(CharData), "%s%s",CharData, "force_final_battle"); enemy.ExtraDamage *= 1.1; - enemy.ExtraThinkSpeed *= 0.9; + enemy.ExtraThinkSpeed *= 0.85; //no minions, so buff - enemy.Health = RoundToNearest(float(enemy.Health) * 1.5); + enemy.Health = RoundToNearest(float(enemy.Health) * 1.4); } case 33: { PluginName = "npc_shadowing_darkness_boss"; - enemy.ExtraDamage *= 0.5; - enemy.Health = RoundToNearest(float(enemy.Health) * 1.35); + enemy.ExtraDamage *= 0.45; + enemy.Health = RoundToNearest(float(enemy.Health) * 1.25); if(CurrentModifOn() == 4) // TURBOLENCES { enemy.ExtraDamage *= 0.65; enemy.Health = RoundToNearest(float(enemy.Health) * 0.75); } + enemy.ExtraThinkSpeed *= 1.15; } case 34: { diff --git a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/iberia/npc_nemal.sp b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/iberia/npc_nemal.sp index 8ef861da99..2b3e77420c 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/iberia/npc_nemal.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/iberia/npc_nemal.sp @@ -411,7 +411,7 @@ methodmap Nemal < CClotBody { case 0: { - CPrintToChatAll("{lightblue}네말{default}: 능력 훈련이었던거 기억 나지? 그래서 내가 왔어! 살살 해보자!"); + CPrintToChatAll("{lightblue}Nemal{default}: We're supposed to train our abilities, remember? Well here I am! Let's start off easy!"); } case 1: { @@ -419,11 +419,11 @@ methodmap Nemal < CClotBody } case 2: { - CPrintToChatAll("{lightblue}네말{default}: {gold}실베스터{default} 얘 안 온거 맞지? 또 {blue}센살{default}이랑 어디 해변가로 놀러가서 퍼질러 자고 있겠지... 또 나만 쏙 빼놓고!!!\n휴가는 이거 한 다음에 가자고 그렇게 말했는데!"); + CPrintToChatAll("{lightblue}Nemal{default}: {gold}Silvester{default} is late isn't he? Probably off to some random beach with {blue}Sensal{default} as usual.. without me!!!\nWe said vacation is after this! Oh well, let's begin!"); } case 3: { - CPrintToChatAll("{lightblue}네말{default}: 이베리아인과 {gold}엑스피돈사인{default}들은 함께지!... 난 혼혈이지만...\n근데 이건 중요한게 아니고, 일단 해보자!"); + CPrintToChatAll("{lightblue}Nemal{default}: Iberians are with us {gold}Expidonsans{default}!... But I'm kinda both...\nProbably not that important, anyways let's go!"); } } } @@ -434,19 +434,19 @@ methodmap Nemal < CClotBody { case 0: { - CPrintToChatAll("{lightblue}네말{default}: 방금 연락이 왔는데, {gold}실베스터{default}가 곧 온대, 뭔 일 때문에 바쁘다고 하네, 그러니까 그가 올 때를 대비해!"); + CPrintToChatAll("{lightblue}Nemal{default}: Got a call, {gold}Silvester{default} will be joining soon, he had some buisness apparently, get ready for... when he comes!"); } case 1: { - CPrintToChatAll("{lightblue}네말{default}: 자꾸 {darkblue}왈츠{default}가 {gold}실베스터{default}한테 끌려간다고? 아닌데? 왈츠가 실베스터를 강제로 끌고 오던데?"); + CPrintToChatAll("{lightblue}Nemal{default}: What I would do for {darkblue}Waldch{default} to stop being so mangetic to {gold}Silvester{default} with his Wildingen antics, that isn't his home!!!"); } case 2: { - CPrintToChatAll("{lightblue}네말{default}: 솔직히, {blue}센살{default} 좀 무섭지 않아? 너도 그랑 싸워봤으니까 알 거 아냐!"); + CPrintToChatAll("{lightblue}Nemal{default}: I'll be honest, {blue}Sensal's{default} kinda scary, I mean you fought him, you'd know!"); } case 3: { - CPrintToChatAll("{lightblue}네말{default}: 안타깝게도 많은 이베리아인들이 자신들의 고향을 떠난 상태야. 망할 {blue}시본{default}놈들 때문에... 남은 생존한 이베리아인들은 우리가 데려와서 돕고 있어!"); + CPrintToChatAll("{lightblue}Nemal{default}: There sadly ain't many Iberians left after what happend to their home country, damn traitorous {blue}seaborn{default}... we took in the surviving iberians and helped them!"); } } } @@ -457,15 +457,15 @@ methodmap Nemal < CClotBody { case 0: { - CPrintToChatAll("{lightblue}네말{default}: 좋아, 이제 수다는 그만할게."); + CPrintToChatAll("{lightblue}Nemal{default}: Enough chatter, I'll start to not restrain myself."); } case 1: { - CPrintToChatAll("{lightblue}네말{default}: {blue}센살{default}이 너희가 약간의 트릭을 쓴다 했었는데, 거짓말이 아니었네."); + CPrintToChatAll("{lightblue}Nemal{default}: {blue}Sensal{default} wasn't lying when he said you guys got some tricks."); } case 2: { - CPrintToChatAll("{lightblue}네말{default}: 이베리아는 매우 긴 역사를 가지고 있는 국가야. 결국 {gold}엑스피돈사{default}의 협력으로 재건되겠지."); + CPrintToChatAll("{lightblue}Nemal{default}: Iberians have some really widening history, eventually it'll be rebuilt with {gold}Expidonsa's{default} help."); } case 3: { @@ -480,11 +480,11 @@ methodmap Nemal < CClotBody { case 0: { - CPrintToChatAll("{lightblue}네말{default}: 최선을 다 해야겠네."); + CPrintToChatAll("{lightblue}Nemal{default}: Looks like I have to give it all."); } case 1: { - CPrintToChatAll("{lightblue}네말{default}: 이제 물러서지 않을게."); + CPrintToChatAll("{lightblue}Nemal{default}: I won't hold back anymore."); } case 2: { @@ -492,32 +492,7 @@ methodmap Nemal < CClotBody } case 3: { - CPrintToChatAll("{lightblue}네말{default}: 살짝 걱정했었는데, 그럴 필요는 없어보이네."); - } - } - } - TripleLol = false; - if(StrContains(data, "triple_enemies") != -1) - { - TripleLol = true; - i_RaidGrantExtra[npc.index] = 4; - switch(GetRandomInt(0,3)) - { - case 0: - { - CPrintToChatAll("{lightblue}네말{default}: {blue}센살{default}과 함께 하기로 했어."); - } - case 1: - { - CPrintToChatAll("{lightblue}네말{default}: 아, {blue}센살{default}. 여기야."); - } - case 2: - { - CPrintToChatAll("{lightblue}네말{default}: 이건 좀 너무 심한거 아닌가?"); - } - case 3: - { - CPrintToChatAll("{lightblue}네말{default}: 미안한데 어... 그게 끝이네."); + CPrintToChatAll("{lightblue}Nemal{default}: I would worry about you, but I don't think thats necessary."); } } } @@ -531,11 +506,11 @@ methodmap Nemal < CClotBody { case 0: { - CPrintToChatAll("{lightblue}네말{default}: 최선을 다 해야겠네."); + CPrintToChatAll("{lightblue}Nemal{default}: Looks like I have to give it all."); } case 1: { - CPrintToChatAll("{lightblue}네말{default}: 이제 물러서지 않을게."); + CPrintToChatAll("{lightblue}Nemal{default}: I won't hold back anymore."); } case 2: { @@ -543,7 +518,7 @@ methodmap Nemal < CClotBody } case 3: { - CPrintToChatAll("{lightblue}네말{default}: 살짝 걱정했었는데, 그럴 필요는 없어보이네."); + CPrintToChatAll("{lightblue}Nemal{default}: I would worry about you, but I don't think thats neccecary."); } } } @@ -610,6 +585,31 @@ methodmap Nemal < CClotBody amount_of_people = 1.0; RaidModeScaling *= amount_of_people; //More then 9 and he raidboss gets some troubles, bufffffffff + TripleLol = false; + if(!StrContains(data, "triple_enemies")) + { + TripleLol = true; + i_RaidGrantExtra[npc.index] = 4; + switch(GetRandomInt(0,3)) + { + case 0: + { + CPrintToChatAll("{lightblue}Nemal{default}: Sorry {blue}Sensal's{default} he's comming a bit late."); + } + case 1: + { + CPrintToChatAll("{lightblue}Nemal{default}: Hey {blue}Sensal's{default}, im here."); + } + case 2: + { + CPrintToChatAll("{lightblue}Nemal{default}: Isn't this overkill?"); + } + case 3: + { + CPrintToChatAll("{lightblue}Nemal{default}: Sorry but thats all."); + } + } + } if(!TripleLol) { func_NPCFuncWin[npc.index] = view_as(Raidmode_Expidonsa_Nemal_Win); @@ -674,7 +674,7 @@ static void Internal_ClotThink(int iNPC) { case 0: { - CPrintToChatAll("{lightblue}네말{default}: 날 못 이기는 거면, 넌 아직 {purple}공허{default}에 대한 준비가 덜 됐다는 뜻이야."); + CPrintToChatAll("{lightblue}Nemal{default}: You don't beat me, then you'll never be able to face the full force of the {purple}void{default}."); } case 1: { @@ -698,7 +698,7 @@ static void Internal_ClotThink(int iNPC) { case 0: { - CPrintToChatAll("{lightblue}네말{default}: 뭐... 다음 기회가 있잖아."); + CPrintToChatAll("{lightblue}Nemal{default}: Well... There's next time."); } case 1: { @@ -706,7 +706,7 @@ static void Internal_ClotThink(int iNPC) } case 2: { - CPrintToChatAll("{lightblue}네말{default}: 미안하지만 이건 보육원이 아니라 훈련이야. 해야만 하는 일이라고."); + CPrintToChatAll("{lightblue}Nemal{default}: I'm sorry but this is needed, this is training, not a daycare."); } } return; @@ -740,7 +740,7 @@ static void Internal_ClotThink(int iNPC) } case 1: { - CPrintToChatAll("{lightblue}네말{default}: ... {darkblue}카멜슈타인{default}을 이런 식으로 실망시키지는 마..."); + CPrintToChatAll("{lightblue}Nemal{default}: ... Don't disappoint {darkblue}Kahmlstein{default} like this..."); } case 2: { @@ -1010,7 +1010,7 @@ static void Internal_NPCDeath(int entity) } case 3: { - CPrintToChatAll("{lightblue}네말{default}: 이거 좀 흥미로운데..."); + CPrintToChatAll("{lightblue}Nemal{default}: I was going to insult you, but I asked for this..."); } } @@ -1785,12 +1785,12 @@ bool NemalTalkPostWin(Nemal npc) else if(GetGameTime() + 5.0 > f_TimeSinceHasBeenHurt[npc.index] && i_SaidLineAlready[npc.index] < 4) { i_SaidLineAlready[npc.index] = 4; - CPrintToChatAll("{lightblue}네말{default}: 우리가 계속 {purple}공허 관문{default}을 통제하고 있을게. 너희 팀이 전부 {purple}공허{default} 원정에 나갈 준비가 되었다면 알려줘!"); + CPrintToChatAll("{lightblue}Nemal{default}: We'll Keep {purple}void gates{default} under control, tell us when youre ready to kill off the {purple}void{default} once and for all, as a team!"); } else if(GetGameTime() + 10.0 > f_TimeSinceHasBeenHurt[npc.index] && i_SaidLineAlready[npc.index] < 3) { i_SaidLineAlready[npc.index] = 3; - CPrintToChatAll("{lightblue}네말{default}: 쉿! 그럼 재미 없잖아! 어쨌든, 잘 했어!"); + CPrintToChatAll("{lightblue}Nemal{default}: Shhh! Don't ruin the fun! Eitherways, good job!"); } else if(GetGameTime() + 13.0 > f_TimeSinceHasBeenHurt[npc.index] && i_SaidLineAlready[npc.index] < 2) { @@ -2069,7 +2069,7 @@ bool NemalSummonSilvester(Nemal npc) } case 3: { - CPrintToChatAll("{lightblue}네말{default}: 쟤는 볼 때마다 가끔씩 희한하게 느껴진단 말이지..."); + CPrintToChatAll("{lightblue}Nemal{default}: Just don't attack the same guy as me, thats unfair!"); } } npc.m_iChanged_WalkCycle = 3; @@ -2114,11 +2114,11 @@ bool NemalSummonSilvester(Nemal npc) { case 0: { - CPrintToChatAll("{lightblue}네말{default}: 음? 드디어 {gold}실베스터{default}가 왔네!"); + CPrintToChatAll("{lightblue}Nemal{default}: Oh? Looks like {gold}Silvester{default} Is finally coming!"); } case 1: { - CPrintToChatAll("{lightblue}네말{default}: 저 게을러터진 {gold}느림보{default}가 이제야 왔네!"); + CPrintToChatAll("{lightblue}Nemal{default}: The lazy ass {gold}cat{default} is coming right up!"); } case 2: { diff --git a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_bladedance.sp b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_bladedance.sp index 4cc0e38a23..1473b83be2 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_bladedance.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_bladedance.sp @@ -308,7 +308,7 @@ public void RaidbossBladedance_ClotThink(int iNPC) case 2: CPrintToChatAll("{crimson}칼춤{default}: 이젠 정말 지긋지긋한 싸움이다! 여기서 꺼져라!"); case 3: - CPrintToChatAll("{crimson}칼춤{default}: 내 카지노에서 진 걸로 지금 나한테 화풀이 하는건 아니겠지!"); + CPrintToChatAll("{crimson}Bladedance{default}: Wish you could lose at the casino I once owned!"); } @@ -470,7 +470,7 @@ public Action RaidbossBladedance_OnTakeDamage(int victim, int &attacker, int &in npc.m_flBladedanceAngerResistance = 1.0; ApplyStatusEffect(npc.index, npc.index, "Very Defensive Backup", 25.0); ApplyStatusEffect(npc.index, npc.index, "Godly Motivation", 40.0); - CPrintToChatAll("{crimson}칼춤{default}: 넌 내가 하는 말을 전혀 듣지 않는군. 난 네 적이 아니란 말이다!"); + CPrintToChatAll("{crimson}Bladedance{default}: You have seen nothing I say! I'm the least of your worries!"); npc.DispatchParticleEffect(npc.index, "hightower_explosion", NULL_VECTOR, NULL_VECTOR, NULL_VECTOR, npc.FindAttachment("eyes"), PATTACH_POINT_FOLLOW, true); } } @@ -497,14 +497,14 @@ public void RaidbossBladedance_NPCDeath(int entity) if(i_RaidGrantExtra[npc.index] == 1 && GameRules_GetRoundState() == RoundState_ZombieRiot) { - CPrintToChatAll("{crimson}칼춤{default}: 너. 그리고 밥 1세... 너희 둘은 진정한 적이 누군지 모르고 있다... {white}배풍등{default}이라고, 멍청이들아! 그가 {crimson}귄{default}마저도 배신했단 말이다!"); - CPrintToChatAll("{crimson}칼춤{default}: 그 놈은 너의 손아귀에서 빠져나와... {crimson}너{default}를 카피하는 방법을 얻었지."); + CPrintToChatAll("{crimson}Bladedance{default}: You and Bob the first.. you both misunderstand who the enemy is.. its {white}Whiteflower{default} you fools! He betrayed {crimson}Guln{default} aswell!"); + CPrintToChatAll("{crimson}Bladedance{default} escapes from you... and gains the ability to copy {crimson}you."); for (int client = 1; client <= MaxClients; client++) { if(IsValidClient(client) && GetClientTeam(client) == 2 && TeutonType[client] != TEUTON_WAITING && PlayerPoints[client] > 500) { Items_GiveNamedItem(client, "Bob's true fear"); - CPrintToChat(client,"{default}이 싸움은 일어나서는 안 될 일이었습니다. 당신에게는 거의, 아니 전혀 기회가 없었습니다. 당신이 얻은 것은...: {red}''밥의 진정한 공포''{default}!"); + CPrintToChat(client,"{default}This battle wasn't something that should have happened. You had little to no chance... This is... {red}''Bob's True fear.''{default}!"); } } for(int i; i < i_MaxcountNpcTotal; i++) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_sensal.sp b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_sensal.sp index 541df57c87..da080e6d0c 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_sensal.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_sensal.sp @@ -604,13 +604,15 @@ static void Internal_ClotThink(int iNPC) NPCPritToChat_Override("Victoria Castellan", "{steelblue}", "Castellan_And_Sensal_Talk-10", false); for (int client = 1; client <= MaxClients; client++) { - if(IsValidClient(client) && GetClientTeam(client) == 2 && TeutonType[client] != TEUTON_WAITING && PlayerPoints[client] > 500 && !Items_HasNamedItem(client, "A copy of Truthful Evidence")) + if(IsValidClient(client) && GetClientTeam(client) == 2 && TeutonType[client] != TEUTON_WAITING && PlayerPoints[client] > 500) { + if(!Items_HasNamedItem(client, "A copy of Truthful Evidence")) + { + CPrintToChat(client, "%t", "Castellan_And_Sensal_Talk-11"); + CPrintToChat(client, "%t", "Castellan_And_Sensal_Talk-12"); + } //Players who have already won the trophy will not get a message. Items_GiveNamedItem(client, "A copy of Truthful Evidence"); - SetGlobalTransTarget(client); - CPrintToChat(client, "%t", "Castellan_And_Sensal_Talk-11"); - CPrintToChat(client, "%t", "Castellan_And_Sensal_Talk-12"); } } } @@ -1067,6 +1069,54 @@ int SensalSelfDefense(Sensal npc, float gameTime, int target, float distance) } npc.m_flRangedSpecialDelay = gameTime + 15.5; npc.StopPathing(); + + + int SpawnAdditionalLasers = CountPlayersOnRed(1); + SpawnAdditionalLasers = (RAIDBOSS_GLOBAL_ATTACKLIMIT - SpawnAdditionalLasers); + if(SpawnAdditionalLasers <= 3) + SpawnAdditionalLasers = 3; + + for(int SpawnNpc ; SpawnNpc < SpawnAdditionalLasers ; SpawnNpc++) + { + float pos[3]; GetEntPropVector(npc.index, Prop_Data, "m_vecAbsOrigin", pos); + float ang[3]; GetEntPropVector(npc.index, Prop_Data, "m_angRotation", ang); + + int spawn_index = NPC_CreateByName("npc_sensal_crystal_targeter", -1, pos, ang, 2); + if(spawn_index > MaxClients) + { + NpcStats_CopyStats(npc.index, spawn_index); + NpcAddedToZombiesLeftCurrently(spawn_index, true); + + int Decicion = TeleportDiversioToRandLocation(spawn_index, true, 1500.0, 1000.0, .forceSpawn = true,.NeedLOSPlayer = true); + switch(Decicion) + { + case 2: + { + Decicion = TeleportDiversioToRandLocation(spawn_index, true, 1000.0, 500.0,.forceSpawn = true, .NeedLOSPlayer = true); + if(Decicion == 2) + { + Decicion = TeleportDiversioToRandLocation(spawn_index, true, 500.0, 250.0,.forceSpawn = true, .NeedLOSPlayer = true); + if(Decicion == 2) + { + Decicion = TeleportDiversioToRandLocation(spawn_index, true, 250.0, 0.0,.forceSpawn = true, .NeedLOSPlayer = true); + if(Decicion == 2) + { + //damn, cant find any.... guess we'll just not care about LOS. + Decicion = TeleportDiversioToRandLocation(spawn_index, true, 1500.0, 0.0); + } + } + } + } + case 3: + { + //todo code on what to do if random teleport is disabled + } + } + RequestFrames(KillNpc, 200, EntIndexToEntRef(spawn_index)); + SetEntProp(spawn_index, Prop_Data, "m_iHealth", 999999999); + SetEntProp(spawn_index, Prop_Data, "m_iMaxHealth", 999999999); + } + } npc.m_flDoingAnimation = gameTime + 99.0; npc.m_bisWalking = false; @@ -1782,10 +1832,40 @@ bool SensalMassLaserAttack(Sensal npc) if(npc.m_flAttackHappens_2) { UnderTides npcGetInfo = view_as(npc.index); - int enemy_2[RAIDBOSS_GLOBAL_ATTACKLIMIT]; + + + //It should target upto 20 people only, if its anymore it starts becomming un dodgeable due to the nature of AOE laser attacks bool ClientTargeted[MAXENTITIES]; - GetHighDefTargets(npcGetInfo, enemy_2, sizeof(enemy_2), true, false); + int a; + int entity; + while((entity = FindEntityByNPC(a)) != -1) + { + if(Target_CrystalTrue(entity)) + { + if(!Can_I_See_Enemy_Only(npc.index, entity)) + continue; + ClientTargeted[entity] = true; + if(!IsValidEntity(i_LaserEntityIndex[entity])) + { + int red = 200; + int green = 200; + int blue = 200; + if(IsValidEntity(i_LaserEntityIndex[entity])) + { + RemoveEntity(i_LaserEntityIndex[entity]); + } + + int laser; + + laser = ConnectWithBeam(npc.index, entity, red, green, blue, 2.0, 2.0, 1.0, LASERBEAM); + + i_LaserEntityIndex[entity] = EntIndexToEntRef(laser); + } + } + } + int enemy_2[RAIDBOSS_GLOBAL_ATTACKLIMIT]; + GetHighDefTargets(npcGetInfo, enemy_2, sizeof(enemy_2), true, false,_,_,_,Target_CrystalFalse); for(int i; i < sizeof(enemy_2); i++) { if(enemy_2[i]) @@ -1845,7 +1925,11 @@ bool SensalMassLaserAttack(Sensal npc) if(IsValidEntity(i_LaserEntityIndex[EnemyLoop])) { RemoveEntity(i_LaserEntityIndex[EnemyLoop]); - } + } + if(i_NpcInternalId[EnemyLoop] == SensalTargetLaser_Id()) + { + RequestFrame(KillNpc, EntIndexToEntRef(EnemyLoop)); + } } int enemy[RAIDBOSS_GLOBAL_ATTACKLIMIT]; @@ -1860,6 +1944,20 @@ bool SensalMassLaserAttack(Sensal npc) SensalInitiateLaserAttack(npc.index, WorldSpaceVec, flPos); } } + + a = 0; + entity = 0; + while((entity = FindEntityByNPC(a)) != -1) + { + if(Target_CrystalTrue(entity)) + { + if(!Can_I_See_Enemy_Only(npc.index, entity)) + continue; + foundEnemy = true; + float WorldSpaceVec[3]; WorldSpaceCenter(entity, WorldSpaceVec); + SensalInitiateLaserAttack(npc.index, WorldSpaceVec, flPos); + } + } if(foundEnemy) { int Pitch = 100; @@ -2258,3 +2356,23 @@ static void Sensal_Weapon_Lines(Sensal npc, int client) b_said_player_weaponline[client] = true; } } + + + +bool Target_CrystalTrue(int target) +{ + if(i_NpcInternalId[target] == SensalTargetLaser_Id()) + { + return true; + } + return false; +} + +bool Target_CrystalFalse(int entity, int target) +{ + if(i_NpcInternalId[target] == SensalTargetLaser_Id()) + { + return false; + } + return true; +} diff --git a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_sensal_crystal_targeter.sp b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_sensal_crystal_targeter.sp new file mode 100644 index 0000000000..903db46278 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_sensal_crystal_targeter.sp @@ -0,0 +1,87 @@ +#pragma semicolon 1 +#pragma newdecls required + +#define CRYSTAL_MODEL "models/props_moonbase/moon_gravel_crystal_blue.mdl" + +static int NPCId; + + +void SensalTargetLaser_OnMapStart_NPC() +{ + PrecacheModel(CRYSTAL_MODEL); + + NPCData data; + strcopy(data.Name, sizeof(data.Name), "nothing"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_sensal_crystal_targeter"); + strcopy(data.Icon, sizeof(data.Icon), ""); + data.IconCustom = false; + data.Flags = -1; + data.Category = Type_Hidden; + data.Func = ClotSummon; + NPCId = NPC_Add(data); +} + +int SensalTargetLaser_Id() +{ + return NPCId; +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3]) +{ + return SensalTargetLaser(vecPos, vecAng); +} + +methodmap SensalTargetLaser < CClotBody +{ + + public SensalTargetLaser(float vecPos[3], float vecAng[3]) + { + SensalTargetLaser npc = view_as(CClotBody(vecPos, vecAng, CRYSTAL_MODEL, "0.01", "999999999", true, true,false,_,_,_, .NpcTypeLogic = 1)); + + i_NpcWeight[npc.index] = 999; + + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + + npc.m_flNextMeleeAttack = 0.0; + npc.m_bDissapearOnDeath = true; + + npc.m_iWearable1 = npc.EquipItemSeperate(CRYSTAL_MODEL,_,_,_,30.0); + SetVariantString("2.25"); + AcceptEntityInput(npc.m_iWearable1, "SetModelScale"); + + SetEntityRenderMode(npc.index, RENDER_NONE); + SetEntityRenderColor(npc.index, 0, 0, 0, 0); + func_NPCDeath[npc.index] = SensalTargetLaser_NPCDeath; + // func_NPCOnTakeDamage[npc.index] = SensalTargetLaser_OnTakeDamage; + // func_NPCThink[npc.index] = SensalTargetLaser_ClotThink; + + npc.m_iBleedType = 0; + npc.m_iStepNoiseType = 0; + npc.m_iNpcStepVariation = 0; + ApplyStatusEffect(npc.index, npc.index, "Intangible", 999999.0); + f_CheckIfStuckPlayerDelay[npc.index] = FAR_FUTURE, //She CANT stuck you, so dont make players not unstuck in cant bve stuck ? what ? + b_ThisEntityIgnoredBeingCarried[npc.index] = true; //cant be targeted AND wont do npc collsiions + npc.m_bDissapearOnDeath = true; + npc.b_BlockDropChances = true; + + i_NpcIsABuilding[npc.index] = true; + b_ThisNpcIsImmuneToNuke[npc.index] = true; + npc.m_bNoKillFeed = true; + b_ThisEntityIgnoredByOtherNpcsAggro[npc.index] = true; //Make allied npcs ignore him. + b_ThisEntityIgnored[npc.index] = true; + AddNpcToAliveList(npc.index, 1); + + npc.m_iState = 0; + npc.m_flSpeed = 0.0; + + return npc; + } +} + +public void SensalTargetLaser_NPCDeath(int entity) +{ + SensalTargetLaser npc = view_as(entity); + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_twirl.sp b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_twirl.sp index 5070d90b8c..84288ec0f7 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_twirl.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/npc_twirl.sp @@ -304,10 +304,14 @@ methodmap Twirl < CClotBody float Sky_Loc[3]; Sky_Loc = Predicted_Pos; Sky_Loc[2]+=500.0; Predicted_Pos[2]-=100.0; - int laser; - laser = ConnectWithBeam(-1, -1, color[0], color[1], color[2], 4.0, 4.0, 5.0, BEAM_COMBINE_BLACK, Predicted_Pos, Sky_Loc); - if(IsValidEntity(laser)) - CreateTimer(0.5, Timer_RemoveEntity, EntIndexToEntRef(laser), TIMER_FLAG_NO_MAPCHANGE); + if(!AtEdictLimit(EDICT_NPC)) + { + int laser; + laser = ConnectWithBeam(-1, -1, color[0], color[1], color[2], 4.0, 4.0, 5.0, BEAM_COMBINE_BLACK, Predicted_Pos, Sky_Loc); + if(IsValidEntity(laser)) + CreateTimer(0.5, Timer_RemoveEntity, EntIndexToEntRef(laser), TIMER_FLAG_NO_MAPCHANGE); + } + int loop_for = 4; @@ -1169,7 +1173,7 @@ static Action Timer_Twirl_Ion(Handle Timer, DataPack data) TE_SetupBeamRingPoint(end_point, 0.0, Radius*2.0, g_Ruina_BEAM_Laser, g_Ruina_HALO_Laser, 0, 1, 0.4, Thickness, 0.75, color, 1, 0); TE_SendToAll(); - float Sky_Loc[3]; Sky_Loc = end_point; Sky_Loc[2]+=1000.0; end_point[2]-=100.0; + float Sky_Loc[3]; Sky_Loc = end_point; Sky_Loc[2]+=1000.0; end_point[2]-=100.0; if(AtEdictLimit(EDICT_NPC)) return Plugin_Stop; @@ -1808,30 +1812,34 @@ static void lunar_Radiance(Twirl npc) } } - float flPos[3], flAng[3]; - npc.GetAttachment("effect_hand_r", flPos, flAng); - int ent1 = ParticleEffectAt_Parent(flPos, "raygun_projectile_blue_crit", npc.index, "effect_hand_r", {0.0,0.0,0.0}); - npc.GetAttachment("effect_hand_l", flPos, flAng); - int ent2 = ParticleEffectAt_Parent(flPos, "raygun_projectile_red_crit", npc.index, "effect_hand_l", {0.0,0.0,0.0}); - if(IsValidEntity(ent1) && IsValidEntity(ent2)) + if(!AtEdictLimit(EDICT_NPC)) { - i_lunar_entities[npc.index][0] = EntIndexToEntRef(ent1); - i_lunar_entities[npc.index][1] = EntIndexToEntRef(ent2); - int color[4]; - Ruina_Color(color, i_current_wave[npc.index]); - int laser = ConnectWithBeamClient(ent1, ent2, color[0], color[1], color[2], 5.0, 5.0, 1.0, LASERBEAM); - if(IsValidEntity(laser)) + float flPos[3], flAng[3]; + npc.GetAttachment("effect_hand_r", flPos, flAng); + int ent1 = ParticleEffectAt_Parent(flPos, "raygun_projectile_blue_crit", npc.index, "effect_hand_r", {0.0,0.0,0.0}); + npc.GetAttachment("effect_hand_l", flPos, flAng); + int ent2 = ParticleEffectAt_Parent(flPos, "raygun_projectile_red_crit", npc.index, "effect_hand_l", {0.0,0.0,0.0}); + if(IsValidEntity(ent1) && IsValidEntity(ent2)) + { + i_lunar_entities[npc.index][0] = EntIndexToEntRef(ent1); + i_lunar_entities[npc.index][1] = EntIndexToEntRef(ent2); + int color[4]; + Ruina_Color(color, i_current_wave[npc.index]); + int laser = ConnectWithBeamClient(ent1, ent2, color[0], color[1], color[2], 5.0, 5.0, 1.0, LASERBEAM); + if(IsValidEntity(laser)) + { + i_lunar_entities[npc.index][2] = EntIndexToEntRef(laser); + } + } + else { - i_lunar_entities[npc.index][2] = EntIndexToEntRef(laser); + if(IsValidEntity(ent1)) + RemoveEntity(ent1); + if(IsValidEntity(ent2)) + RemoveEntity(ent2); } } - else - { - if(IsValidEntity(ent1)) - RemoveEntity(ent1); - if(IsValidEntity(ent2)) - RemoveEntity(ent2); - } + npc.m_flLunarThrottle = GameTime + 0.5; fl_ruina_battery_timeout[npc.index] = GameTime + 2.5; @@ -2876,12 +2884,19 @@ static void Fractal_Attack(int iNPC, float VecTarget[3], float dmg, float speed, int color[4]; Ruina_Color(color, i_current_wave[iNPC]); Twirl npc = view_as(iNPC); - int beam = ConnectWithBeamClient(npc.m_iWearable1, Proj, color[0], color[1], color[2], f_start, f_end, amp, LASERBEAM); - i_WandParticle[Proj] = EntIndexToEntRef(beam); DataPack pack; CreateDataTimer(0.1, Laser_Projectile_Timer, pack, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT); pack.WriteCell(EntIndexToEntRef(iNPC)); - pack.WriteCell(EntIndexToEntRef(beam)); + if(!AtEdictLimit(EDICT_NPC)) + { + int beam = ConnectWithBeamClient(npc.m_iWearable1, Proj, color[0], color[1], color[2], f_start, f_end, amp, LASERBEAM); + i_WandParticle[Proj] = EntIndexToEntRef(beam); + pack.WriteCell(EntIndexToEntRef(beam)); + } + else + { + pack.WriteCell(-69); + } pack.WriteCell(EntIndexToEntRef(Proj)); pack.WriteCellArray(color, sizeof(color)); pack.WriteFloat(radius); @@ -2931,14 +2946,18 @@ static Action Laser_Projectile_Timer(Handle timer, DataPack data) { data.Reset(); int iNPC = EntRefToEntIndex(data.ReadCell()); - int Laser_Entity = EntRefToEntIndex(data.ReadCell()); + int Laser_Entity = data.ReadCell(); + + if(Laser_Entity != -69) + Laser_Entity = EntRefToEntIndex(Laser_Entity); + int Projectile = EntRefToEntIndex(data.ReadCell()); int color[4]; data.ReadCellArray(color, sizeof(color)); float Radius = data.ReadFloat(); float dmg = data.ReadFloat(); - if(!IsValidEntity(iNPC) || !IsValidEntity(Laser_Entity) || !IsValidEntity(Projectile)) + if(!IsValidEntity(iNPC) || (!IsValidEntity(Laser_Entity) && Laser_Entity != -69) || !IsValidEntity(Projectile)) { if(IsValidEntity(Laser_Entity)) RemoveEntity(Laser_Entity); @@ -2949,6 +2968,8 @@ static Action Laser_Projectile_Timer(Handle timer, DataPack data) return Plugin_Stop; } + + Ruina_Laser_Logic Laser; float SelfVec[3]; @@ -2970,6 +2991,12 @@ static Action Laser_Projectile_Timer(Handle timer, DataPack data) Laser.Bonus_Damage = dmg*6.0; Laser.damagetype = DMG_PLASMA; + + if(Laser_Entity == -69) //The projectile was fired when we are at edict criticality, as such we will render the "laser" with a TE rather then env beam. + { + TE_SetupBeamPoints(Laser.Start_Point, Laser.End_Point, g_Ruina_BEAM_Laser, 0, 0, 0, 0.1, Radius*2.0, Radius*2.0, 0, 0.1, color, 3); + TE_SendToAll(); + } Laser.Deal_Damage(On_LaserHit); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/seaborn/npc_karlas.sp b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/seaborn/npc_karlas.sp index 8a120fec7c..4609fa43a3 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/seaborn/npc_karlas.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/seaborn/npc_karlas.sp @@ -2627,10 +2627,10 @@ static int Create_Blade(float Loc[3], float size, Karlas npc) return -1; DispatchKeyValue(prop, "model", RUINA_POINT_MODEL); - DispatchKeyValue(prop, "modelscale", "0.01"); DispatchKeyValue(prop, "solid", "0"); DispatchSpawn(prop); ActivateEntity(prop); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", 0.01); int ModelApply = ApplyCustomModelToWandProjectile(prop, RUINA_CUSTOM_MODELS_2, size, ""); if(IsValidEntity(ModelApply)) diff --git a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/ssb/npc_ssb.sp b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/ssb/npc_ssb.sp index a4d28a180b..b53b12f824 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/ssb/npc_ssb.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/ssb/npc_ssb.sp @@ -4205,9 +4205,7 @@ int SSB_CreateProjectile(SupremeSpookmasterBones owner, char model[255], float p ActivateEntity(prop); SetEntityModel(prop, model); - char scaleChar[16]; - Format(scaleChar, sizeof(scaleChar), "%f", scale); - DispatchKeyValue(prop, "modelscale", scaleChar); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", scale); SetEntPropEnt(prop, Prop_Data, "m_hOwnerEntity", owner.index); SetEntProp(prop, Prop_Data, "m_takedamage", 0, 1); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/ssb/npc_ssb_finale_phase1.sp b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/ssb/npc_ssb_finale_phase1.sp index 24b6b0983d..b58c817a63 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/ssb/npc_ssb_finale_phase1.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/ssb/npc_ssb_finale_phase1.sp @@ -2292,12 +2292,10 @@ int SSBChair_CreateProjectile(SSBChair owner, char model[255], float pos[3], flo ActivateEntity(prop); SetEntityModel(prop, model); - char scaleChar[16]; - Format(scaleChar, sizeof(scaleChar), "%f", scale); - DispatchKeyValue(prop, "modelscale", scaleChar); SetEntPropEnt(prop, Prop_Data, "m_hOwnerEntity", owner.index); SetEntProp(prop, Prop_Data, "m_takedamage", 0, 1); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", scale); char skinChar[16]; Format(skinChar, 16, "%i", skin); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/victoria/npc_castellan.sp b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/victoria/npc_castellan.sp index d32e37f391..1a855a52c7 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/victoria/npc_castellan.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/victoria/npc_castellan.sp @@ -1658,7 +1658,6 @@ static int Man_Work(Castellan npc, float gameTime, float VecSelfNpc[3], float ve if(IsValidEntity(DroneSignal)) { DispatchKeyValue(DroneSignal, "model", "models/weapons/c_models/c_battalion_buffpack/c_batt_buffpack.mdl"); - DispatchKeyValue(DroneSignal, "modelscale", "1.00"); DispatchKeyValue(DroneSignal, "StartDisabled", "false"); DispatchKeyValue(DroneSignal, "Solid", "0"); SetEntProp(DroneSignal, Prop_Data, "m_nSolidType", 0); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/victoria/npc_harrison.sp b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/victoria/npc_harrison.sp index 209d1dbcda..1bfc513b83 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/victoria/npc_harrison.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/victoria/npc_harrison.sp @@ -2063,7 +2063,6 @@ static void RocketBarrage_Think(DataPack pack) if(IsValidEntity(prop2)) { DispatchKeyValue(prop2, "model", "models/props_combine/headcrabcannister01a.mdl"); - DispatchKeyValue(prop2, "modelscale", "1.00"); DispatchKeyValue(prop2, "StartDisabled", "false"); DispatchKeyValue(prop2, "Solid", "0"); SetEntProp(prop2, Prop_Data, "m_nSolidType", 0); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/xeno/npc_infected_silvester.sp b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/xeno/npc_infected_silvester.sp index a121618ee4..c035da556f 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/xeno/npc_infected_silvester.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/xeno/npc_infected_silvester.sp @@ -1849,15 +1849,12 @@ public Action Silvester_DamagingPillar(Handle timer, DataPack pack) SizeScale += (float(count -1) * 0.1); - char FloatString[8]; - FloatToString(SizeScale, FloatString, sizeof(FloatString)); - - DispatchKeyValue(prop, "modelscale", FloatString); DispatchKeyValueVector(prop, "origin", SpawnPropPos); direction[2] -= 180.0; direction[1] = GetRandomFloat(-180.0, 180.0); DispatchKeyValueVector(prop, "angles", direction); DispatchSpawn(prop); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", SizeScale); TeleportEntity(prop, NULL_VECTOR, NULL_VECTOR, vel); if(i_ColoursTEPillars[3] != 255) SetEntityRenderMode(prop, RENDER_TRANSCOLOR); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/xeno/npc_nemesis.sp b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/xeno/npc_nemesis.sp index ad7000ef68..3854d0bd20 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/xeno/npc_nemesis.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/raidmode_bosses/xeno/npc_nemesis.sp @@ -1,3 +1,4 @@ + #pragma semicolon 1 #pragma newdecls required @@ -78,9 +79,9 @@ static char g_HappySounds[][] = #define INFECTION_MODEL "models/weapons/w_bugbait.mdl" #define INFECTION_RANGE 150.0 -float InfectionDelay() +float InfectionDelay(bool isEnraged) { - if(XenoExtraLogic()) + if(isEnraged) return 0.7; return 0.8; @@ -145,6 +146,17 @@ methodmap RaidbossNemesis < CClotBody } } } + property bool m_bIsEnraged + { + public get() + { + return view_as(i_TimesSummoned[this.index]); + } + public set(bool value) + { + i_TimesSummoned[this.index] = view_as(value); + } + } public void PlayHurtSound() { int sound = GetRandomInt(0, sizeof(g_HurtSounds) - 1); @@ -237,7 +249,11 @@ methodmap RaidbossNemesis < CClotBody i_RaidGrantExtra[npc.index] = 1; } - if(XenoExtraLogic()) + // Check for enraged state + bool isEnraged = StrContains(data, "enraged") != -1; + npc.m_bIsEnraged = isEnraged; + + if(isEnraged) RaidModeTime = GetGameTime(npc.index) + 9999999.0; npc.m_flMeleeArmor = 1.25; //Melee should be rewarded for trying to face this monster @@ -298,7 +314,7 @@ methodmap RaidbossNemesis < CClotBody i_GunMode[npc.index] = 0; i_GunAmmo[npc.index] = 0; fl_StopDodgeCD[npc.index] = GetGameTime(npc.index) + 25.0; - if(XenoExtraLogic()) + if(isEnraged) { FormatEx(c_NpcName[npc.index], sizeof(c_NpcName[]), "Enraged Calmaticus"); CPrintToChatAll("{green}칼마티커스: 너희도 DNA 공급체가 될 것이다."); @@ -405,7 +421,7 @@ public void RaidbossNemesis_ClotThink(int iNPC) int HealByThis = ReturnEntityMaxHealth(npc.index) / 3250; HealByThis = RoundToCeil(float(HealByThis) / TickrateModify); - if(XenoExtraLogic()) + if(npc.m_bIsEnraged) { SetEntProp(npc.index, Prop_Data, "m_iHealth", GetEntProp(npc.index, Prop_Data, "m_iHealth") + (HealByThis * 2)); } @@ -639,7 +655,7 @@ public void RaidbossNemesis_ClotThink(int iNPC) { if(npc.m_flNextRangedAttackHappening < gameTime) { - if(XenoExtraLogic()) + if(npc.m_bIsEnraged) { ResolvePlayerCollisions_Npc(npc.index, /*damage crush*/ 350.0); } @@ -690,7 +706,7 @@ public void RaidbossNemesis_ClotThink(int iNPC) { if(npc.m_iChanged_WalkCycle != 6 && npc.m_iChanged_WalkCycle != 5 && npc.m_iChanged_WalkCycle != 7) { - if(XenoExtraLogic()) + if(npc.m_bIsEnraged) npc.SetActivity("ACT_CALMATICUS_CHARGE_LOOP_LAB"); else npc.SetActivity("ACT_CALMATICUS_CHARGE_LOOP"); @@ -706,7 +722,7 @@ public void RaidbossNemesis_ClotThink(int iNPC) if(IsValidEnemy(npc.index, npc.m_iTarget) && npc.flXenoInfectedSpecialHurtTime - 0.45 < gameTime) { - if(!XenoExtraLogic()) + if(!npc.m_bIsEnraged) { float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget ); float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); @@ -848,7 +864,7 @@ public void RaidbossNemesis_ClotThink(int iNPC) npc.SetPlaybackRate(0.6); npc.m_iChanged_WalkCycle = 13; npc.m_bisWalking = false; - if(XenoExtraLogic()) + if(npc.m_bIsEnraged) { npc.m_flSpeed = 150.0; if(npc.Anger) @@ -974,7 +990,7 @@ public void RaidbossNemesis_ClotThink(int iNPC) npc.SetPlaybackRate(0.6); npc.m_iChanged_WalkCycle = 15; npc.m_bisWalking = false; - if(XenoExtraLogic()) + if(npc.m_bIsEnraged) { npc.m_flSpeed = 150.0; if(npc.Anger) @@ -1002,7 +1018,7 @@ public void RaidbossNemesis_ClotThink(int iNPC) if(npc.m_iChanged_WalkCycle != 4) { npc.PlayAngerSound(); - if(XenoExtraLogic()) + if(npc.m_bIsEnraged) npc.SetActivity("ACT_CALMATICUS_CHARGE_START_LAB"); else npc.SetActivity("ACT_CALMATICUS_CHARGE_START"); @@ -1203,7 +1219,7 @@ public void RaidbossNemesis_NPCDeath(int entity) { if(IsValidClient(client_repat) && GetClientTeam(client_repat) == 2 && TeutonType[client_repat] != TEUTON_WAITING && PlayerPoints[client_repat ] > 500) { - if(!XenoExtraLogic()) + if(!npc.m_bIsEnraged) { Items_GiveNamedItem(client_repat, "Calmaticus' Heart Piece"); CPrintToChat(client_repat, "{default}당신은 그를 확실히 죽이기 위해 심장을 떼어냈고, 당신이 얻은 것은... : {green}''칼마티커스'의 심장 조각''{default}!"); @@ -1307,7 +1323,7 @@ void Nemesis_TryDodgeAttack(int entity) } } -public bool TraceRayHitProjectilesOnly(int entity,int mask,any data) +public bool TraceRayHitProjectilesOnly(int entity, int contentsMask, int filterentity) { if(entity == 0) { @@ -1544,7 +1560,11 @@ void Nemesis_DoInfectionThrow(int entity, int MaxThrowCount) GetEntPropVector(entity, Prop_Data, "m_vecAbsOrigin", Nemesis_Loc); Nemesis_Loc[2] += 10.0; - spawnRing_Vectors(Nemesis_Loc, INFECTION_RANGE * 3.0, 0.0, 0.0, 5.0, "materials/sprites/laserbeam.vmt", 0, 255, 0, 200, 1, InfectionDelay(), 5.0, 0.0, 1,1.0); + + RaidbossNemesis npc = view_as(entity); + bool isEnraged = npc.m_bIsEnraged; + + spawnRing_Vectors(Nemesis_Loc, INFECTION_RANGE * 3.0, 0.0, 0.0, 5.0, "materials/sprites/laserbeam.vmt", 0, 255, 0, 200, 1, InfectionDelay(isEnraged), 5.0, 0.0, 1,1.0); float Nemesis_Ang[3]; Nemesis_Ang = {-90.0,0.0,0.0}; @@ -1552,7 +1572,7 @@ void Nemesis_DoInfectionThrow(int entity, int MaxThrowCount) TeleportEntity(particle, NULL_VECTOR, Nemesis_Ang, NULL_VECTOR); DataPack pack; - CreateDataTimer(InfectionDelay(), Nemesis_DoInfectionThrowInternal, pack, TIMER_FLAG_NO_MAPCHANGE); + CreateDataTimer(InfectionDelay(isEnraged), Nemesis_DoInfectionThrowInternal, pack, TIMER_FLAG_NO_MAPCHANGE); pack.WriteCell(EntIndexToEntRef(entity)); //who this attack belongs to pack.WriteCell(MaxThrowCount); //who this attack belongs to } @@ -1610,6 +1630,9 @@ public Action Nemesis_DoInfectionThrowInternal(Handle timer, DataPack DataNem) } SortIntegers(targets, count, Sort_Random); + + RaidbossNemesis npc = view_as(entity); + bool isEnraged = npc.m_bIsEnraged; for(int Repeat; Repeat(entity); if(RaidBossActive == EntIndexToEntRef(entity) && i_RaidGrantExtra[entity] == 1) { - if(XenoExtraLogic()) + if(npc.m_bIsEnraged) { CPrintToChatAll("{crimson}당신은 이 싸움에서 희망의 빛줄기를 보지 못 했습니다."); } @@ -1717,4 +1741,4 @@ void Nemesis_AdjustGrabbedTarget(int iNPC) npc.GetAttachment("anim_attachment_LH", flPos, flAng); TeleportEntity(EnemyGrab, flPos, NULL_VECTOR, {0.0,0.0,0.0}); -} \ No newline at end of file +} diff --git a/addons/sourcemod/scripting/zombie_riot/npc/respawn/npc_stalker_goggles.sp b/addons/sourcemod/scripting/zombie_riot/npc/respawn/npc_stalker_goggles.sp index c0deba1f46..b0d075b31b 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/respawn/npc_stalker_goggles.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/respawn/npc_stalker_goggles.sp @@ -89,6 +89,7 @@ methodmap StalkerGoggles < StalkerShared npc.m_iStepNoiseType = STEPSOUND_NORMAL; npc.m_iNpcStepVariation = STEPTYPE_ROBOT; + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); wave *= 0.133333; npc.m_flWaveScale = wave; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/rogue/chaos/npc_finalhunter.sp b/addons/sourcemod/scripting/zombie_riot/npc/rogue/chaos/npc_finalhunter.sp index f3a345072b..99e19afea8 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/rogue/chaos/npc_finalhunter.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/rogue/chaos/npc_finalhunter.sp @@ -278,7 +278,7 @@ static void ClotThink(int iNPC) if(ScalingDo <= 0.75) ScalingDo = 0.75; - health -= (maxhealth / RoundToNearest(60.0 / ScalingDo) / 4); + health -= ((maxhealth / RoundToNearest(60.0 / ScalingDo)) / 8); if(health < 1) { diff --git a/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_almagest_jkei.sp b/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_almagest_jkei.sp index 6387495bf9..2d88362972 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_almagest_jkei.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_almagest_jkei.sp @@ -191,12 +191,11 @@ methodmap AlmagestJkei < CClotBody } DispatchKeyValue(item, "model", model); + DispatchSpawn(item); if(model_size != 1.0) { - // DispatchKeyValueFloat(item, "modelscale", GetEntPropFloat(this.index, Prop_Send, "m_flModelScale")); - DispatchKeyValueFloat(item, "modelscale", model_size); + SetEntPropFloat(item, Prop_Send, "m_flModelScale", model_size); } - DispatchSpawn(item); SetEntProp(item, Prop_Send, "m_fEffects", EF_BONEMERGE|EF_PARENT_ANIMATES|EF_NOSHADOW ); SetEntityMoveType(item, MOVETYPE_NONE); SetEntProp(item, Prop_Data, "m_nNextThinkTick", -1.0); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_boss_reila.sp b/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_boss_reila.sp index 197135874a..caae01b008 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_boss_reila.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_boss_reila.sp @@ -608,7 +608,7 @@ void ReilaSpawnBalls(int iNpc, float vecTarget[3]) { npc.m_iBallsLeftToSpawn--; npc.m_flSpawnBallsDoingCD = GetGameTime(npc.index) + 0.75; - int projectile = npc.FireParticleRocket(vecTarget, 2000.0, 400.0, 150.0, "halloween_rockettrail", true); + int projectile = npc.FireParticleRocket(vecTarget, 500.0, 400.0, 150.0, "halloween_rockettrail", true); float ang_Look[3]; GetEntPropVector(projectile, Prop_Send, "m_angRotation", ang_Look); Initiate_HomingProjectile(projectile, @@ -783,6 +783,10 @@ public void Reila_Rocket_Particle_StartTouch(int entity, int target) { if(target > 0 && target < MAXENTITIES) //did we hit something??? { + if(IsIn_HitDetectionCooldown(entity,target, ReilaSlash)) + return; + Set_HitDetectionCooldown(entity,target, GetGameTime() + 0.4, ReilaSlash); + int owner = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity"); if(!IsValidEntity(owner)) { @@ -806,11 +810,6 @@ public void Reila_Rocket_Particle_StartTouch(int entity, int target) SDKHooks_TakeDamage(target, owner, inflictor, DamageDeal, DMG_BULLET|DMG_PREVENT_PHYSICS_FORCE, -1); //acts like a kinetic rocket Reila_Rocket_Particle_Think(entity); - int particle = EntRefToEntIndex(i_WandParticle[entity]); - if(IsValidEntity(particle)) - { - RemoveEntity(particle); - } } else { @@ -821,8 +820,8 @@ public void Reila_Rocket_Particle_StartTouch(int entity, int target) { RemoveEntity(particle); } + RemoveEntity(entity); } - RemoveEntity(entity); } @@ -834,6 +833,7 @@ public void Reila_Rocket_Particle_StartTouch(int entity, int target) void Reila_Rocket_Particle_Think(int entity) { float gameTime = GetGameTime(); + CBaseCombatCharacter(entity).SetNextThink(gameTime); int owner = GetEntPropEnt(entity, Prop_Send, "m_hOwnerEntity"); if (!IsValidEntity(owner)) @@ -844,16 +844,22 @@ void Reila_Rocket_Particle_Think(int entity) RemoveEntity(entity); return; } + BossReila proj = view_as(entity); + if(proj.m_flNextDelayTime > GetGameTime(entity)) + { + return; + } + proj.m_flNextDelayTime = GetGameTime(entity) + 1.0; BossReila npc = view_as(owner); - float vecPos[3], VecDown[3]; - GetAbsOrigin(entity, vecPos); - float velocity[3]; GetEntPropVector(entity, Prop_Data, "m_vecAbsVelocity", velocity); velocity[2] += 300.0; TeleportEntity(entity, NULL_VECTOR, NULL_VECTOR, velocity); + float vecPos[3], VecDown[3]; + GetAbsOrigin(entity, vecPos); + VecDown = vecPos; VecDown[2] -= 1000.0; static const float maxs[] = { 10.0, 10.0, 10.0 }; @@ -876,10 +882,9 @@ void Reila_Rocket_Particle_Think(int entity) spawnBeam(0.8, 120, 50, 200, 200, "materials/sprites/laserbeam.vmt", 3.0, 0.2, _, 10.0, vecPos, VecDown); EmitSoundToAll("weapons/vaccinator_charge_tier_03.wav", _, SNDCHAN_AUTO, 70, _, 0.65, GetRandomInt(80, 110), _, VecDown); spawnRing_Vectors(VecDown, REILA_BOSS_LIGHTNING_RANGE * 2.0, 0.0, 0.0, 0.0, "materials/sprites/laserbeam.vmt", 100, 50, 150, 200, 1, REILA_BOSS_CHARGE_TIME, 6.0, 0.1, 1, 1.0); - } + delete trace; - CBaseCombatCharacter(entity).SetNextThink(gameTime + 1.0); } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_shadowing_darkness.sp b/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_shadowing_darkness.sp index 448a47e33f..6c72b4ff08 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_shadowing_darkness.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_shadowing_darkness.sp @@ -1057,15 +1057,6 @@ public void Shadowing_Darkness_ReflectProjectiles(int entity, int target) { owner = 0; } - if(npc.m_iState >= MAX_BOUNCES_SHADOWING_DARKNESS) - { - int particle = EntRefToEntIndex(i_WandParticle[entity]); - if(IsValidEntity(particle)) - { - RemoveEntity(particle); - } - return; - } if(IsValidEnemy(entity, target, true, true)) { ShadowingDarkness_Projectile_StartTouch(entity, target); @@ -1076,9 +1067,26 @@ public void Shadowing_Darkness_ReflectProjectiles(int entity, int target) if(target != 0) return; } + if(npc.m_flNextDelayTime > GetGameTime(entity)) + { + return; + } + //do not bounce instantly + npc.m_flNextDelayTime = GetGameTime(entity) + 0.1; npc.m_iState++; + if(npc.m_iState >= MAX_BOUNCES_SHADOWING_DARKNESS) + { + int particle = EntRefToEntIndex(i_WandParticle[entity]); + if(IsValidEntity(particle)) + { + RemoveEntity(particle); + } + RemoveEntity(entity); + return; + } + EntityKilled_HitDetectionCooldown(entity, ShadowingSlicer); - float pos[3]; + float pos[3]; GetEntPropVector(entity, Prop_Send, "m_vecOrigin", pos); TE_Particle("mvm_soldier_shockwave", pos, NULL_VECTOR, NULL_VECTOR, _, _, _, _, _, _, _, _, _, _, 0.0); EmitSoundToAll(g_BounceEnergOrb[GetRandomInt(0, sizeof(g_BounceEnergOrb) - 1)], _, SNDCHAN_AUTO, 80, _,1.0, 150,_,pos); @@ -1090,7 +1098,13 @@ public void Shadowing_Darkness_ReflectProjectiles(int entity, int target) float ProjectileVel[3]; GetEntPropVector(entity, Prop_Data, "m_vecAbsVelocity", ProjectileVel); NegateVector(ProjectileVel); - TeleportEntity(entity, NULL_VECTOR, NULL_VECTOR, ProjectileVel); + Custom_SetAbsVelocity(entity, {0.0,0.0,0.0}); + DataPack pack = new DataPack(); + pack.WriteCell(EntIndexToEntRef(entity)); + pack.WriteFloat(ProjectileVel[0]); + pack.WriteFloat(ProjectileVel[1]); + pack.WriteFloat(ProjectileVel[2]); + RequestFrames(SetVelocityAtomizerProjectile, 1, pack); return; } @@ -1101,7 +1115,14 @@ public void Shadowing_Darkness_ReflectProjectiles(int entity, int target) WorldSpaceCenter(entity, vecSelf); TE_SetupBeamPoints(vecSelf, EndPos, Shared_BEAM_Laser, 0, 0, 0, 1.5, 3.0, 3.0, 0, 0.0, {255,65,65,125}, 3); TE_SendToAll(0.0); - TeleportEntity(entity, NULL_VECTOR, VecAngles, VecSpeed); + + DataPack pack = new DataPack(); + pack.WriteCell(EntIndexToEntRef(entity)); + pack.WriteFloat(VecSpeed[0]); + pack.WriteFloat(VecSpeed[1]); + pack.WriteFloat(VecSpeed[2]); + RequestFrames(SetVelocityAtomizerProjectile, 1, pack); + TeleportEntity(entity, NULL_VECTOR, VecAngles, NULL_VECTOR); //valid target found, bounce to said target } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_umbral_automaton.sp b/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_umbral_automaton.sp index cd58195ea6..66aa7ce486 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_umbral_automaton.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_umbral_automaton.sp @@ -199,7 +199,8 @@ methodmap Umbral_Automaton < CClotBody { npc.SetActivity("ACT_SHADOW_STATUE_SMALL_WALK"); } - //just spawn and walk + TeleportDiversioToRandLocation(npc.index,_,3000.0, 500.0); + //just spawn and walk, and spawns somewhere too } else { diff --git a/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_umbral_koulm.sp b/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_umbral_koulm.sp index 48cfdd59ad..303d1765fe 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_umbral_koulm.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/rogue/rouge3/npc_umbral_koulm.sp @@ -240,9 +240,9 @@ public Action Umbral_Koulm_OnTakeDamage(int victim, int &attacker, int &inflicto int maxhealth = ReturnEntityMaxHealth(npc.index); int CurrentHealth = GetEntProp(npc.index, Prop_Data, "m_iHealth"); - if(float(maxhealth) * 0.975 > float(CurrentHealth)) + if(float(maxhealth) * 0.95 > float(CurrentHealth)) { - ApplyStatusEffect(victim, attacker, "Kolum's View", 7.5); + ApplyStatusEffect(victim, attacker, "Kolum's View", 5.0); } return Plugin_Changed; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/ruina/ruina_npc_enchanced_ai_core.sp b/addons/sourcemod/scripting/zombie_riot/npc/ruina/ruina_npc_enchanced_ai_core.sp index 8ed82dbc4c..8dac076643 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/ruina/ruina_npc_enchanced_ai_core.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/ruina/ruina_npc_enchanced_ai_core.sp @@ -1573,9 +1573,6 @@ Action Ruina_Mana_Sickness_Ion(Handle Timer, DataPack data) Tempcolor [3] = 80; TE_SetupBeamRingPoint(end_point, 0.0, Radius*2.0, g_Ruina_BEAM_Laser, g_Ruina_HALO_Laser, 0, 1, 0.25, Thickness, 0.75, Tempcolor, 1, 0); TE_SendToAll(); - - - Radius = Radius*Radius; EmitSoundToAll(RUINA_ION_CANNON_SOUND_TOUCHDOWN, 0, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, 1.0, SNDPITCH_NORMAL, -1, end_point); @@ -1587,7 +1584,7 @@ Action Ruina_Mana_Sickness_Ion(Handle Timer, DataPack data) continue; if(!IsClientInGame(client)) - continue; + continue; if(!IsEntityAlive(client)) continue; @@ -1605,10 +1602,6 @@ Action Ruina_Mana_Sickness_Ion(Handle Timer, DataPack data) EmitSoundToClient(client, RUINA_ION_CANNON_SOUND_ATTACK); SDKHooks_TakeDamage(client, 0, 0, dmg, DMG_TRUEDAMAGE|DMG_PREVENT_PHYSICS_FORCE); - - int laser; - laser = ConnectWithBeam(-1, client, color[0], color[1], color[2], 2.5, 2.5, 0.25, BEAM_COMBINE_BLACK, end_point); - CreateTimer(0.1, Timer_RemoveEntity, EntIndexToEntRef(laser), TIMER_FLAG_NO_MAPCHANGE); } for(int a; a < i_MaxcountNpcTotal; a++) { @@ -1625,10 +1618,6 @@ Action Ruina_Mana_Sickness_Ion(Handle Timer, DataPack data) continue; SDKHooks_TakeDamage(entity, 0, 0, dmg*2.0, DMG_TRUEDAMAGE|DMG_PREVENT_PHYSICS_FORCE); - - int laser; - laser = ConnectWithBeam(-1, entity, color[0], color[1], color[2], 2.5, 2.5, 0.25, BEAM_COMBINE_BLACK, end_point); - CreateTimer(0.1, Timer_RemoveEntity, EntIndexToEntRef(laser), TIMER_FLAG_NO_MAPCHANGE); } } @@ -1646,9 +1635,6 @@ Action Ruina_Mana_Sickness_Ion(Handle Timer, DataPack data) continue; SDKHooks_TakeDamage(entity, 0, 0, dmg*2.0, DMG_TRUEDAMAGE|DMG_PREVENT_PHYSICS_FORCE); - int laser; - laser = ConnectWithBeam(-1, entity, color[0], color[1], color[2], 2.5, 2.5, 0.25, BEAM_COMBINE_BLACK, end_point); - CreateTimer(0.1, Timer_RemoveEntity, EntIndexToEntRef(laser), TIMER_FLAG_NO_MAPCHANGE); } } } @@ -1829,7 +1815,7 @@ bool Ruina_NerfHealingOnBossesOrHealers(int healer, int healed_target, float &he if(b_ruina_nerf_healing[healed_target]) {//the npc is a special case that needs to get less healing otherwise unfun balance happens - healingammount *=0.8; + healingammount *=0.5; } else if(b_thisNpcIsABoss[healed_target] || b_thisNpcIsARaid[healed_target]) {//this npc is a raid/boss healing target @@ -2346,11 +2332,10 @@ int Ruina_Create_Entity(float Loc[3], float duration, int noclip = false) DispatchKeyValue(prop, "model", RUINA_POINT_MODEL); - DispatchKeyValue(prop, "modelscale", "0.001"); - DispatchKeyValue(prop, "solid", "0"); DispatchSpawn(prop); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", 0.001); ActivateEntity(prop); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/seaborn/npc_endspeaker_shared.sp b/addons/sourcemod/scripting/zombie_riot/npc/seaborn/npc_endspeaker_shared.sp index 69cf177d1f..dc05535f37 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/seaborn/npc_endspeaker_shared.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/seaborn/npc_endspeaker_shared.sp @@ -273,9 +273,9 @@ methodmap EndSpeaker < CClotBody if(entity != -1) { DispatchKeyValue(entity, "model", "models/props_island/crocodile/crocodile.mdl"); - DispatchKeyValue(entity, "modelscale", "2.5"); DispatchKeyValue(entity, "solid", "0"); DispatchSpawn(entity); + SetEntPropFloat(entity, Prop_Send, "m_flModelScale", 2.5); TeleportEntity(entity, vecTarget, NULL_VECTOR, NULL_VECTOR); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/seaborn/npc_netherseafounder.sp b/addons/sourcemod/scripting/zombie_riot/npc/seaborn/npc_netherseafounder.sp index 06084edf6f..89d55d431c 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/seaborn/npc_netherseafounder.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/seaborn/npc_netherseafounder.sp @@ -726,7 +726,7 @@ public Action SeaFounder_DamageTimer(Handle timer, DataPack pack) // 20 x 0.25 x 0.2 */ ApplyStatusEffect(entity, entity, "Sea Presence", 1.0); - ApplyStatusEffect(entity, entity, "Teslar Shock", 1.0); + ApplyStatusEffect(entity, entity, "Hypodermic Toxin Injection", 1.0); NervousTouching[entity] = NervousTouching[0]; } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/seaborn/npc_undertides.sp b/addons/sourcemod/scripting/zombie_riot/npc/seaborn/npc_undertides.sp index 4263d6d2c1..54eac0372d 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/seaborn/npc_undertides.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/seaborn/npc_undertides.sp @@ -328,7 +328,8 @@ void GetHighDefTargets(UnderTides npc, int player_only = 0, int TraceFrom = -1, float RangeLimit = 0.0, - bool HighDefDo = true) + bool HighDefDo = true, + Function ExtraValidityFunction = INVALID_FUNCTION) { // Prio: // 1. Highest Defense Stat @@ -373,6 +374,18 @@ void GetHighDefTargets(UnderTides npc, if(flDistanceToTarget > RangeLimit) continue; } + + if(ExtraValidityFunction != INVALID_FUNCTION) + { + bool WasValid; + Call_StartFunction(null, ExtraValidityFunction); + Call_PushCell(npc.index); + Call_PushCell(client); + Call_Finish(WasValid); + + if(!WasValid) + continue; + } for(int i; i < count; i++) { @@ -435,6 +448,17 @@ void GetHighDefTargets(UnderTides npc, if(flDistanceToTarget > RangeLimit) continue; } + if(ExtraValidityFunction != INVALID_FUNCTION) + { + bool WasValid; + Call_StartFunction(null, ExtraValidityFunction); + Call_PushCell(npc.index); + Call_PushCell(entity); + Call_Finish(WasValid); + + if(!WasValid) + continue; + } for(int i; i < count; i++) { diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_3650.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_3650.sp index 62c94f0b9b..bba77e3746 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_3650.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_3650.sp @@ -155,6 +155,21 @@ methodmap ThirtySixFifty < CClotBody public get() { return this.m_flGrappleCooldown; } public set(float value) { this.m_flGrappleCooldown = value; } } + property int m_iRevolverAttachmentMode + { + public get() { return i_TimesSummoned[this.index]; } + public set(int TempValueForProperty) { i_TimesSummoned[this.index] = TempValueForProperty; } + } + property int m_iWeaponCycleSeed + { + public get() { return i_MedkitAnnoyance[this.index]; } + public set(int TempValueForProperty) { i_MedkitAnnoyance[this.index] = TempValueForProperty; } + } + property int m_iCurrentWeaponInCycle + { + public get() { return i_AttacksTillMegahit[this.index]; } + public set(int TempValueForProperty) { i_AttacksTillMegahit[this.index] = TempValueForProperty; } + } public void SetWeaponModel(const char[] model) //dynamic weapon model change, don't touch { @@ -162,7 +177,26 @@ methodmap ThirtySixFifty < CClotBody RemoveEntity(this.m_iWearable1); if(model[0]) + { this.m_iWearable1 = this.EquipItem("head", model); + + // HACK: the revolver model is omegafucked, so we hardcode bruteforce a new one at a specific position + if (this.m_iRevolverAttachmentMode == 1) + { + if(IsValidEntity(this.m_iWearable1)) + RemoveEntity(this.m_iWearable1); + + this.m_iRevolverAttachmentMode = 0; + float origin[3], angles[3]; + this.GetAttachment("anim_attachment_RH", origin, angles); + this.m_iWearable1 = this.EquipItemSeperate("models/weapons/w_357.mdl",_ ,_ , 1.15, _, true); + angles[1] += 180.0; + angles[2] += 270.0; + TeleportEntity(this.m_iWearable1, origin, angles); + + SetParent(this.index, this.m_iWearable1, "anim_attachment_RH", {0.0, 0.0, 4.0}); + } + } } public ThirtySixFifty(float vecPos[3], float vecAng[3], int ally) @@ -189,6 +223,7 @@ methodmap ThirtySixFifty < CClotBody Variables */ + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); wave *= 0.133333; npc.m_flWaveScale = wave; @@ -205,12 +240,13 @@ methodmap ThirtySixFifty < CClotBody npc.m_flNextThinkTime = GetGameTime(npc.index) + 0.5; b_NoHealthbar[npc.index] = 0; GiveNpcOutLineLastOrBoss(npc.index, true); - b_thisNpcHasAnOutline[npc.index] = true; + b_thisNpcHasAnOutline[npc.index] = true; npc.m_flAbilityOrAttack0 = 0.0; npc.m_flNextMeleeAttack = 0.0; npc.m_flAttackHappens = 0.0; - npc.m_iGunType = 0; + npc.m_iGunType = -1; + npc.m_iRevolverAttachmentMode = 0; npc.m_flSwitchCooldown = GetGameTime(npc.index) + 2.0; npc.m_flMeleeArmor = 1.0; npc.m_flRangedArmor = 1.0; @@ -221,6 +257,23 @@ methodmap ThirtySixFifty < CClotBody Citizen_MiniBossSpawn(); + // I want to not make more 2d MAXENTITIES arrays, but I also want to allow multiple 3650 to have their own cycles. + // ...so I'm storing the cycle as an int, then reading it digit by digit. + ArrayList weaponCycle = new ArrayList(); + for (int i = 0; i < 6; i++) + weaponCycle.Push(i); + + weaponCycle.Sort(Sort_Random, Sort_Integer); + + char seedGen[16]; + for (int i = 0; i < weaponCycle.Length; i++) + seedGen[i] = view_as(weaponCycle.Get(i) + 48); // 2 + 48 = '2' + + delete weaponCycle; + + npc.m_iWeaponCycleSeed = StringToInt(seedGen); + npc.m_iCurrentWeaponInCycle = 0; + if(!Rogue_Mode()) { switch(GetRandomInt(0,4)) @@ -325,7 +378,7 @@ static void ClotThink(int iNPC) float vecMe[3]; WorldSpaceCenter(npc.index, vecMe); float vecTarget[3]; WorldSpaceCenter(target, vecTarget); float distance = GetVectorDistance(vecTarget, vecMe, true); - if(distance < npc.GetLeadRadius()) + if(npc.m_flNextMeleeAttack >= gameTime && distance < npc.GetLeadRadius()) { PredictSubjectPosition(npc, target,_,_,vecTarget); npc.SetGoalVector(vecTarget); @@ -355,21 +408,23 @@ static void ClotThink(int iNPC) if(npc.m_flSwitchCooldown < gameTime) { float cooldown = 10.0; + + char seedGen[16]; + IntToString(npc.m_iWeaponCycleSeed, seedGen, sizeof(seedGen)); + npc.m_iGunType = view_as(seedGen[npc.m_iCurrentWeaponInCycle++ % 6]) - 48; switch(npc.m_iGunType) { - case 0, 3, 6: //Shotgun + case 0: //Shotgun { - npc.m_iGunType++; npc.SetWeaponModel("models/weapons/w_shotgun.mdl"); - npc.SetActivity("ACT_RUN_AIM_RIFLE"); + npc.SetActivity("ACT_RUN_AIM_SHOTGUN"); npc.m_flNextMeleeAttack = gameTime + 0.5; npc.m_flSpeed = 300.0; cooldown = 8.0; } - case 1, 4, 7: //SMG + case 1: //SMG { - npc.m_iGunType++; npc.SetWeaponModel("models/weapons/w_smg1.mdl"); npc.SetActivity("ACT_RUN_AIM_RIFLE"); npc.m_flNextMeleeAttack = gameTime + 0.5; @@ -378,45 +433,42 @@ static void ClotThink(int iNPC) } case 2: //AR2 { - npc.m_iGunType = 3; npc.SetWeaponModel("models/weapons/w_irifle.mdl"); npc.SetActivity("ACT_RUN_AIM_RIFLE"); npc.m_flNextMeleeAttack = gameTime + 0.5; npc.m_flSpeed = 300.0; cooldown = 8.0; } - case 5: //RPG + case 3: //RPG { - npc.m_iGunType = 6; npc.SetWeaponModel("models/weapons/w_rocket_launcher.mdl"); npc.SetActivity("ACT_RUN_AIM_RELAXED"); npc.m_flNextMeleeAttack = gameTime + 0.5; npc.m_flSpeed = 300.0; cooldown = 8.0; } - case 8: //Pistol + case 4: //Pistol { - npc.m_iGunType = 9; npc.SetWeaponModel("models/weapons/w_pistol.mdl"); npc.SetActivity("ACT_RUN_AIM_PISTOL"); npc.m_flNextMeleeAttack = gameTime + 0.5; npc.m_flSpeed = 300.0; cooldown = 8.0; } - case 9: //Revolver (shit doesn't work so just skip it outright, unused) + case 5: //Revolver { - npc.m_iGunType = 0; + npc.m_iRevolverAttachmentMode = 1; npc.SetWeaponModel("models/weapons/w_357.mdl"); npc.SetActivity("ACT_RUN_AIM_PISTOL"); npc.m_flNextMeleeAttack = gameTime + 0.5; - cooldown = 0.1; + cooldown = 8.0; } } npc.m_flSwitchCooldown = gameTime + cooldown; } switch(npc.m_iGunType) { - case 1, 4, 7: // Shotgun + case 0: // Shotgun { npc.StartPathing(); @@ -431,6 +483,7 @@ static void ClotThink(int iNPC) npc.FaceTowards(vecTarget, 25000.0); npc.PlayShotgunSound(); + npc.AddGesture("ACT_GESTURE_RANGE_ATTACK_SHOTGUN"); float eyePitch[3]; GetEntPropVector(npc.index, Prop_Data, "m_angRotation", eyePitch); @@ -467,7 +520,7 @@ static void ClotThink(int iNPC) } } } - case 2, 5, 8: // SMG + case 1: // SMG { npc.StartPathing(); @@ -477,6 +530,8 @@ static void ClotThink(int iNPC) { KillFeed_SetKillIcon(npc.index, "smg"); + npc.FaceTowards(vecTarget, 25000.0); + npc.PlaySMGSound(); npc.AddGesture("ACT_GESTURE_RANGE_ATTACK_SMG1"); if(target > MaxClients) @@ -498,18 +553,15 @@ static void ClotThink(int iNPC) float damageDealt = 3.5; damageDealt *= npc.m_flWaveScale; - for(int i; i < 2; i++) - { - float x = GetRandomFloat(-0.05, 0.05); - float y = GetRandomFloat(-0.05, 0.05); - - vecDir[0] = vecDirShooting[0] + x * vecRight[0] + y * vecUp[0]; - vecDir[1] = vecDirShooting[1] + x * vecRight[1] + y * vecUp[1]; - vecDir[2] = vecDirShooting[2] + x * vecRight[2] + y * vecUp[2]; - NormalizeVector(vecDir, vecDir); - - FireBullet(npc.index, npc.m_iWearable1, vecMe, vecDir, damageDealt, 3000.0, DMG_BULLET, "bullet_tracer01_red"); - } + float x = GetRandomFloat(-0.05, 0.05); + float y = GetRandomFloat(-0.05, 0.05); + + vecDir[0] = vecDirShooting[0] + x * vecRight[0] + y * vecUp[0]; + vecDir[1] = vecDirShooting[1] + x * vecRight[1] + y * vecUp[1]; + vecDir[2] = vecDirShooting[2] + x * vecRight[2] + y * vecUp[2]; + NormalizeVector(vecDir, vecDir); + + FireBullet(npc.index, npc.m_iWearable1, vecMe, vecDir, damageDealt, 3000.0, DMG_BULLET, "bullet_tracer01_red"); npc.m_flNextMeleeAttack = gameTime + 0.05; @@ -517,7 +569,7 @@ static void ClotThink(int iNPC) } } } - case 3: // AR2 + case 2: // AR2 { npc.StartPathing(); @@ -529,9 +581,8 @@ static void ClotThink(int iNPC) npc.PlayAR2Sound(); npc.AddGesture("ACT_GESTURE_RANGE_ATTACK_AR2"); - if(target > MaxClients) - npc.FaceTowards(vecTarget, 25000.0); - + npc.FaceTowards(vecTarget, 25000.0); + float eyePitch[3]; GetEntPropVector(npc.index, Prop_Data, "m_angRotation", eyePitch); @@ -547,26 +598,23 @@ static void ClotThink(int iNPC) float damageDealt = 4.0; damageDealt *= npc.m_flWaveScale; - - for(int i; i < 2; i++) - { - float x = GetRandomFloat(-0.05, 0.05); - float y = GetRandomFloat(-0.05, 0.05); - - vecDir[0] = vecDirShooting[0] + x * vecRight[0] + y * vecUp[0]; - vecDir[1] = vecDirShooting[1] + x * vecRight[1] + y * vecUp[1]; - vecDir[2] = vecDirShooting[2] + x * vecRight[2] + y * vecUp[2]; - NormalizeVector(vecDir, vecDir); - - FireBullet(npc.index, npc.m_iWearable1, vecMe, vecDir, damageDealt, 3000.0, DMG_BULLET, "bullet_tracer01_red"); - } + + float x = GetRandomFloat(-0.05, 0.05); + float y = GetRandomFloat(-0.05, 0.05); + + vecDir[0] = vecDirShooting[0] + x * vecRight[0] + y * vecUp[0]; + vecDir[1] = vecDirShooting[1] + x * vecRight[1] + y * vecUp[1]; + vecDir[2] = vecDirShooting[2] + x * vecRight[2] + y * vecUp[2]; + NormalizeVector(vecDir, vecDir); + + FireBullet(npc.index, npc.m_iWearable1, vecMe, vecDir, damageDealt, 3000.0, DMG_BULLET, "bullet_tracer01_red"); npc.m_flNextMeleeAttack = gameTime + 0.05; KillFeed_SetKillIcon(npc.index, "skull"); } } } - case 6: // RPG + case 3: // RPG { npc.StartPathing(); @@ -596,7 +644,7 @@ static void ClotThink(int iNPC) npc.m_flNextMeleeAttack = gameTime + 2.0; } } - case 9: // Pistol + case 4: // Pistol { npc.StartPathing(); @@ -607,8 +655,6 @@ static void ClotThink(int iNPC) KillFeed_SetKillIcon(npc.index, "pistol"); npc.FaceTowards(vecTarget, 25000.0); - if(target > MaxClients) - npc.FaceTowards(vecTarget, 25000.0); npc.PlayPistolSound(); npc.AddGesture("ACT_GESTURE_RANGE_ATTACK_PISTOL"); @@ -628,19 +674,16 @@ static void ClotThink(int iNPC) float damageDealt = 1.5; damageDealt *= npc.m_flWaveScale; - - for(int i; i < 10; i++) - { - float x = GetRandomFloat(-0.1, 0.1); - float y = GetRandomFloat(-0.1, 0.1); - - vecDir[0] = vecDirShooting[0] + x * vecRight[0] + y * vecUp[0]; - vecDir[1] = vecDirShooting[1] + x * vecRight[1] + y * vecUp[1]; - vecDir[2] = vecDirShooting[2] + x * vecRight[2] + y * vecUp[2]; - NormalizeVector(vecDir, vecDir); - - FireBullet(npc.index, npc.m_iWearable1, vecMe, vecDir, damageDealt, 3000.0, DMG_BULLET, "bullet_tracer01_red"); - } + + float x = GetRandomFloat(-0.1, 0.1); + float y = GetRandomFloat(-0.1, 0.1); + + vecDir[0] = vecDirShooting[0] + x * vecRight[0] + y * vecUp[0]; + vecDir[1] = vecDirShooting[1] + x * vecRight[1] + y * vecUp[1]; + vecDir[2] = vecDirShooting[2] + x * vecRight[2] + y * vecUp[2]; + NormalizeVector(vecDir, vecDir); + + FireBullet(npc.index, npc.m_iWearable1, vecMe, vecDir, damageDealt, 3000.0, DMG_BULLET, "bullet_tracer01_red"); npc.m_flNextMeleeAttack = gameTime + 0.20; @@ -648,7 +691,7 @@ static void ClotThink(int iNPC) } } } - case 11: // Revolver (check revolver case) + case 5: // Revolver (check revolver case) { npc.StartPathing(); @@ -659,8 +702,6 @@ static void ClotThink(int iNPC) KillFeed_SetKillIcon(npc.index, "enforcer"); npc.FaceTowards(vecTarget, 25000.0); - if(target > MaxClients) - npc.FaceTowards(vecTarget, 25000.0); npc.PlayRevolverSound(); npc.AddGesture("ACT_GESTURE_RANGE_ATTACK_PISTOL"); @@ -680,19 +721,21 @@ static void ClotThink(int iNPC) float damageDealt = 40.0; damageDealt *= npc.m_flWaveScale; - - for(int i; i < 10; i++) - { - float x = GetRandomFloat(-0.1, 0.1); - float y = GetRandomFloat(-0.1, 0.1); - - vecDir[0] = vecDirShooting[0] + x * vecRight[0] + y * vecUp[0]; - vecDir[1] = vecDirShooting[1] + x * vecRight[1] + y * vecUp[1]; - vecDir[2] = vecDirShooting[2] + x * vecRight[2] + y * vecUp[2]; - NormalizeVector(vecDir, vecDir); - - FireBullet(npc.index, npc.m_iWearable1, vecMe, vecDir, damageDealt, 3000.0, DMG_BULLET, "bullet_tracer01_red"); - } + + /* + float x = GetRandomFloat(-0.1, 0.1); + float y = GetRandomFloat(-0.1, 0.1); + + vecDir[0] = vecDirShooting[0] + x * vecRight[0] + y * vecUp[0]; + vecDir[1] = vecDirShooting[1] + x * vecRight[1] + y * vecUp[1]; + vecDir[2] = vecDirShooting[2] + x * vecRight[2] + y * vecUp[2]; + */ + + vecDir = vecDirShooting; + + NormalizeVector(vecDir, vecDir); + + FireBullet(npc.index, npc.m_iWearable1, vecMe, vecDir, damageDealt, 3000.0, DMG_BULLET, "bullet_tracer01_red"); npc.m_flNextMeleeAttack = gameTime + 2.0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_beheaded_kamikaze.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_beheaded_kamikaze.sp index 5d59b81845..24b25beac0 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_beheaded_kamikaze.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_beheaded_kamikaze.sp @@ -101,6 +101,7 @@ methodmap BeheadedKamiKaze < CClotBody npc.m_flAttackHappenswillhappen = false; npc.m_fbRangedSpecialOn = false; + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); //Wave scaling wave *= 0.133333; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_doctor.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_doctor.sp index 1560d16642..91cbdb39fe 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_doctor.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_doctor.sp @@ -151,6 +151,7 @@ methodmap SpecialDoctor < CClotBody npc.m_iAttacksTillReload = 5; npc.m_flReloadDelay = GetGameTime(npc.index) + 0.8; + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); wave *= 0.133333; npc.m_flWaveScale = wave; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_drdam_clone.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_drdam_clone.sp index ac5e9be645..6882dd54f6 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_drdam_clone.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_drdam_clone.sp @@ -140,6 +140,7 @@ methodmap DrDamClone < CClotBody int skin = 1; SetEntProp(npc.index, Prop_Send, "m_nSkin", skin); + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); wave *= 0.133333; npc.m_flWaveScale = wave; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_drdam_special_delivery.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_drdam_special_delivery.sp index 852d6c6411..8db404b707 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_drdam_special_delivery.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_drdam_special_delivery.sp @@ -157,6 +157,7 @@ methodmap DrDamSpecialDelivery < CClotBody npc.m_bDissapearOnDeath = true; fl_TotalArmor[npc.index] = 0.0001; b_ThisEntityIgnoredByOtherNpcsAggro[npc.index] = true; + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); wave *= 0.133333; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_fallen_warrior.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_fallen_warrior.sp index e5970a54bf..f29154585e 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_fallen_warrior.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_fallen_warrior.sp @@ -260,6 +260,7 @@ methodmap FallenWarrior < CClotBody } npc.m_bDissapearOnDeath = true; + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); wave *= 0.133333; npc.m_flWaveScale = wave; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_john_the_allmighty.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_john_the_allmighty.sp index 503380c552..8af1c73138 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_john_the_allmighty.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_john_the_allmighty.sp @@ -191,13 +191,16 @@ methodmap JohnTheAllmighty < CClotBody npc.m_iStepNoiseType = STEPSOUND_GIANT; npc.m_iNpcStepVariation = STEPTYPE_TANK; npc.m_bDissapearOnDeath = true; - npc.m_iHealthBar = 40; + + //makes him have infinity hp on his bar + npc.m_iHealthBar = 99999999; func_NPCDeath[npc.index] = view_as(JohnTheAllmighty_NPCDeath); func_NPCOnTakeDamage[npc.index] = view_as(JohnTheAllmighty_OnTakeDamage); func_NPCThink[npc.index] = view_as(JohnTheAllmighty_ClotThink); SDKHook(npc.index, SDKHook_OnTakeDamagePost, JohnTheAllmighty_OnTakeDamagePost); + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); wave *= 0.133333; npc.m_flWaveScale = wave; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_l4d2_tank.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_l4d2_tank.sp index eae3c04d5b..f61585b368 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_l4d2_tank.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_l4d2_tank.sp @@ -197,7 +197,7 @@ methodmap L4D2_Tank < CClotBody i_RaidGrantExtra[npc.index] = 1; } - + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); wave *= 0.133333; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_phantom_knight.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_phantom_knight.sp index fc5ff75dd2..ce49ada43e 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_phantom_knight.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_phantom_knight.sp @@ -171,6 +171,7 @@ methodmap PhantomKnight < CClotBody npc.m_flNextMeleeAttack = 0.0; + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); //Wave scaling wave *= 0.133333; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_ravaging_intellect.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_ravaging_intellect.sp index 754a1dcbf7..904174b4e7 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_ravaging_intellect.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_ravaging_intellect.sp @@ -231,6 +231,7 @@ methodmap RavagingIntellect < CClotBody SetEntProp(npc.m_iWearable2, Prop_Send, "m_nSkin", skin); SetEntProp(npc.m_iWearable3, Prop_Send, "m_nSkin", skin); SetEntProp(npc.m_iWearable4, Prop_Send, "m_nSkin", skin); + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); wave *= 0.133333; npc.m_flWaveScale = wave; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_reaper.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_reaper.sp index c7b9e2c2b4..94b803f57d 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_reaper.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_reaper.sp @@ -183,6 +183,7 @@ methodmap GrimReaper < CClotBody func_NPCOnTakeDamage[npc.index] = view_as(Reaper_OnTakeDamage); func_NPCThink[npc.index] = view_as(Reaper_Think); + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRound()+1); wave *= 0.1; npc.m_flWaveScale = wave; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_sawrunner.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_sawrunner.sp index 2f3fbc405b..bde5e1c024 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_sawrunner.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_sawrunner.sp @@ -154,6 +154,7 @@ methodmap SawRunner < CClotBody func_NPCThink[npc.index] = SawRunner_ClotThink; npc.m_flDoSpawnGesture = GetGameTime(npc.index) + 2.0; f_HeadshotDamageMultiNpc[npc.index] = 2.0; + b_thisNpcIsAMiniboss[npc.index] = true; npc.m_flSpeed = 200.0; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_vengefull_spirit.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_vengefull_spirit.sp index ed165eb152..2dbc16fb32 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_vengefull_spirit.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_vengefull_spirit.sp @@ -67,6 +67,7 @@ methodmap VengefullSpirit < CClotBody func_NPCOnTakeDamage[npc.index] = view_as(Internal_OnTakeDamage); func_NPCThink[npc.index] = view_as(Internal_ClotThink); + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); wave *= 0.133333; npc.m_flWaveScale = wave; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_wandering_spirit.sp b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_wandering_spirit.sp index 51dc1354fa..1eab418dba 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/special/npc_wandering_spirit.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/special/npc_wandering_spirit.sp @@ -78,7 +78,8 @@ methodmap WanderingSpirit < CClotBody func_NPCDeath[npc.index] = view_as(Internal_NPCDeath); func_NPCOnTakeDamage[npc.index] = view_as(Internal_OnTakeDamage); func_NPCThink[npc.index] = view_as(Internal_ClotThink); - + + b_thisNpcIsAMiniboss[npc.index] = true; float wave = float(Waves_GetRoundScale()+1); wave *= 0.133333; npc.m_flWaveScale = wave; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/victoria/npc_bigpipe.sp b/addons/sourcemod/scripting/zombie_riot/npc/victoria/npc_bigpipe.sp index 38553450e7..b6a412fa38 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/victoria/npc_bigpipe.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/victoria/npc_bigpipe.sp @@ -667,7 +667,7 @@ static int VictoriaBigpipeSelfDefense(VictoriaBigpipe npc, float gameTime, float AcceptEntityInput(npc.m_iWearable1, "SetParentAttachmentMaintainOffset"); SetEntProp(npc.m_iWearable1, Prop_Send, "m_nSkin", 0); MakeObjectIntangeable(npc.m_iWearable1);*/ - npc.SetWeaponModel("models/zombie_riot/weapons/custom_weaponry_1_52.mdl", 1.25); + npc.SetWeaponModel("models/zombie_riot/weapons/custom_weaponry_1_57.mdl", 1.25); SetEntProp(npc.m_iWearable1, Prop_Send, "m_nBody", 128); npc.g_TimesSummoned=2; diff --git a/addons/sourcemod/scripting/zombie_riot/npc/voices/npc_stalker_wisp.sp b/addons/sourcemod/scripting/zombie_riot/npc/voices/npc_stalker_wisp.sp index a95317ba71..9363601905 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/voices/npc_stalker_wisp.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/voices/npc_stalker_wisp.sp @@ -268,7 +268,7 @@ static void ClotThink(int iNPC) int i; while(TF2U_GetWearable(target, entity, i)) { - if(entity == EntRefToEntIndex(Armor_Wearable[target]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; SetEntityRenderMode(entity, RENDER_TRANSCOLOR); diff --git a/addons/sourcemod/scripting/zombie_riot/npc/xeno_lab/npc_xeno_ekas_robo.sp b/addons/sourcemod/scripting/zombie_riot/npc/xeno_lab/npc_xeno_ekas_robo.sp index a1d8044aeb..df5536dc69 100644 --- a/addons/sourcemod/scripting/zombie_riot/npc/xeno_lab/npc_xeno_ekas_robo.sp +++ b/addons/sourcemod/scripting/zombie_riot/npc/xeno_lab/npc_xeno_ekas_robo.sp @@ -31,7 +31,7 @@ static char g_MeleeAttackSounds[][] = { "npc/dog/dog_angry3.wav", }; - + public void XenoOuroborosEkas_OnMapStart_NPC() { for (int i = 0; i < (sizeof(g_DeathSounds)); i++) { PrecacheSound(g_DeathSounds[i]); } diff --git a/addons/sourcemod/scripting/zombie_riot/npc/xeno_lab/npc_xeno_lab_security.sp b/addons/sourcemod/scripting/zombie_riot/npc/xeno_lab/npc_xeno_lab_security.sp new file mode 100644 index 0000000000..796db0b8d0 --- /dev/null +++ b/addons/sourcemod/scripting/zombie_riot/npc/xeno_lab/npc_xeno_lab_security.sp @@ -0,0 +1,593 @@ +#pragma semicolon 1 +#pragma newdecls required + +// made my first super boss, i lowkey tweaked but i pulled it off, feel free to give critiques +// ive been coding with lua for the past 6+ years so this was fun to transition to. + +#define SECURITY_MODEL "models/bots/heavy/bot_heavy.mdl" +#define SECURITY_INFECTION_RANGE 300.0 +#define SECURITY_ENRAGE_THRESHOLD 0.5 + +static const char g_DeathSounds[][] = +{ + "mvm/giant_heavy/giant_heavy_explode.wav" +}; + +static const char g_HurtSounds[][] = +{ + "vo/mvm/norm/heavy_mvm_painsharp01.mp3", + "vo/mvm/norm/heavy_mvm_painsharp02.mp3", + "vo/mvm/norm/heavy_mvm_painsharp03.mp3", + "vo/mvm/norm/heavy_mvm_painsharp04.mp3", + "vo/mvm/norm/heavy_mvm_painsharp05.mp3", +}; + +static const char g_IdleSounds[][] = +{ + "mvm/giant_heavy/giant_heavy_entrance.wav" +}; + +static const char g_MeleeHitSounds[][] = +{ + "weapons/metal_gloves_hit_flesh1.wav", + "weapons/metal_gloves_hit_flesh2.wav", + "weapons/metal_gloves_hit_flesh3.wav", + "weapons/metal_gloves_hit_flesh4.wav" +}; + +static const char g_MeleeAttackSounds[][] = +{ + "ui/item_robot_arm_drop.wav" +}; + +static const char g_AngerSounds[][] = +{ + "mvm/giant_heavy/giant_heavy_gunwindup.wav" +}; + +static const char g_SecurityAlertSounds[][] = +{ + "ambient/alarms/klaxon1.wav" +}; + +void XenoLabSecurity_OnMapStart_NPC() +{ + NPCData data; + strcopy(data.Name, sizeof(data.Name), "Xeno Lab Security"); + strcopy(data.Plugin, sizeof(data.Plugin), "npc_xeno_lab_security"); + strcopy(data.Icon, sizeof(data.Icon), "heavy_champ_vac_blast"); + data.IconCustom = true; + data.Flags = MVM_CLASS_FLAG_NORMAL|MVM_CLASS_FLAG_MINIBOSS; + data.Category = Type_Xeno; // Xeno category for super boss + data.Func = ClotSummon; + data.Precache = ClotPrecache; + NPC_Add(data); +} + +static void ClotPrecache() +{ + for (int i = 0; i < (sizeof(g_DeathSounds)); i++) { PrecacheSound(g_DeathSounds[i]); } + for (int i = 0; i < (sizeof(g_HurtSounds)); i++) { PrecacheSound(g_HurtSounds[i]); } + for (int i = 0; i < (sizeof(g_IdleSounds)); i++) { PrecacheSound(g_IdleSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeHitSounds)); i++) { PrecacheSound(g_MeleeHitSounds[i]); } + for (int i = 0; i < (sizeof(g_MeleeAttackSounds)); i++) { PrecacheSound(g_MeleeAttackSounds[i]); } + for (int i = 0; i < (sizeof(g_AngerSounds)); i++) { PrecacheSound(g_AngerSounds[i]); } + for (int i = 0; i < (sizeof(g_SecurityAlertSounds)); i++) { PrecacheSound(g_SecurityAlertSounds[i]); } + + PrecacheModel(SECURITY_MODEL); + PrecacheModel("models/workshop/player/items/heavy/robo_heavy_chief/robo_heavy_chief.mdl"); + PrecacheModel("models/workshop/player/items/heavy/spr18_tsar_platinum/spr18_tsar_platinum.mdl"); + PrecacheModel("models/workshop/player/items/heavy/spr18_starboard_crusader/spr18_starboard_crusader.mdl"); + PrecacheModel("models/workshop/player/items/heavy/sum23_hog_heels/sum23_hog_heels.mdl"); + PrecacheSound("weapons/cow_mangler_explode.wav"); + PrecacheSound("weapons/physcannon/energy_bounce1.wav"); + PrecacheSound("weapons/physcannon/energy_bounce2.wav"); +} + +static any ClotSummon(int client, float vecPos[3], float vecAng[3], int team, const char[] data) +{ + return XenoLabSecurity(vecPos, vecAng, team, data); +} + +methodmap XenoLabSecurity < CClotBody +{ + public void PlayIdleSound() + { + if(this.m_flNextIdleSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_IdleSounds[GetRandomInt(0, sizeof(g_IdleSounds) - 1)], this.index, SNDCHAN_VOICE, BOSS_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + this.m_flNextIdleSound = GetGameTime(this.index) + GetRandomFloat(12.0, 24.0); + } + + public void PlayHurtSound() + { + if(this.m_flNextHurtSound > GetGameTime(this.index)) + return; + + EmitSoundToAll(g_HurtSounds[GetRandomInt(0, sizeof(g_HurtSounds) - 1)], this.index, SNDCHAN_STATIC, BOSS_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + this.m_flNextHurtSound = GetGameTime(this.index) + GetRandomFloat(0.6, 1.6); + } + + public void PlayDeathSound() + { + EmitSoundToAll(g_DeathSounds[GetRandomInt(0, sizeof(g_DeathSounds) - 1)], this.index, SNDCHAN_STATIC, BOSS_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + + public void PlayMeleeSound() + { + EmitSoundToAll(g_MeleeAttackSounds[GetRandomInt(0, sizeof(g_MeleeAttackSounds) - 1)], this.index, SNDCHAN_STATIC, BOSS_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + + public void PlayAngerSound() + { + EmitSoundToAll(g_AngerSounds[GetRandomInt(0, sizeof(g_AngerSounds) - 1)], this.index, SNDCHAN_STATIC, BOSS_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + + public void PlaySecurityAlertSound() + { + EmitSoundToAll(g_SecurityAlertSounds[GetRandomInt(0, sizeof(g_SecurityAlertSounds) - 1)], this.index, SNDCHAN_AUTO, BOSS_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + + public void PlayMeleeHitSound() + { + EmitSoundToAll(g_MeleeHitSounds[GetRandomInt(0, sizeof(g_MeleeHitSounds) - 1)], this.index, SNDCHAN_STATIC, BOSS_ZOMBIE_SOUNDLEVEL, _, BOSS_ZOMBIE_VOLUME); + } + + public XenoLabSecurity(float vecPos[3], float vecAng[3], int ally, const char[] data) + { + XenoLabSecurity npc = view_as(CClotBody(vecPos, vecAng, SECURITY_MODEL, "1.75", "125000", ally, false)); + // 125000 HP - Super boss tier + + i_NpcWeight[npc.index] = 6; + FormatEx(c_HeadPlaceAttachmentGibName[npc.index], sizeof(c_HeadPlaceAttachmentGibName[]), "head"); + + int iActivity = npc.LookupActivity("ACT_MP_RUN_MELEE"); + if(iActivity > 0) npc.StartActivity(iActivity); + npc.m_bisWalking = true; + + npc.m_iBleedType = BLEEDTYPE_METAL; + npc.m_iStepNoiseType = STEPSOUND_GIANT; + npc.m_iNpcStepVariation = STEPTYPE_ROBOT; + + func_NPCDeath[npc.index] = XenoLabSecurity_NPCDeath; + func_NPCOnTakeDamage[npc.index] = XenoLabSecurity_OnTakeDamage; + func_NPCThink[npc.index] = XenoLabSecurity_ClotThink; + + npc.m_flSpeed = 220.0; + npc.m_flGetClosestTargetTime = 0.0; + npc.m_flNextMeleeAttack = 0.0; + npc.m_flAttackHappens = 0.0; + npc.Anger = false; // Not enraged yet + + // Check if this is a lab version + bool isLabVersion = StrContains(data, "lab") != -1; + npc.m_bIsLabVersion = isLabVersion; + + // Adaptive Combat Protocol counter + npc.m_iOverlordComboAttack = 0; + + // Infection ability timer + npc.m_flNextRangedSpecialAttack = GetGameTime(npc.index) + 12.0; + + if(!IsValidEntity(RaidBossActive)) + { + RaidBossActive = EntIndexToEntRef(npc.index); + RaidModeTime = GetGameTime() + 9000.0; + RaidModeScaling = 0.0; // Super boss safety net + RaidAllowsBuildings = true; + } + + npc.m_iWearable1 = npc.EquipItem("head", "models/workshop/player/items/heavy/robo_heavy_chief/robo_heavy_chief.mdl"); + npc.m_iWearable2 = npc.EquipItem("head", "models/workshop/player/items/heavy/spr18_tsar_platinum/spr18_tsar_platinum.mdl"); + npc.m_iWearable3 = npc.EquipItem("head", "models/workshop/player/items/heavy/spr18_starboard_crusader/spr18_starboard_crusader.mdl"); + npc.m_iWearable4 = npc.EquipItem("head", "models/workshop/player/items/heavy/sum23_hog_heels/sum23_hog_heels.mdl"); + + SetEntityRenderMode(npc.index, RENDER_TRANSALPHA); + SetEntityRenderColor(npc.index, 50, 200, 50, 255); + SetEntityRenderMode(npc.m_iWearable1, RENDER_TRANSALPHA); + SetEntityRenderColor(npc.m_iWearable1, 50, 200, 50, 255); + SetEntityRenderMode(npc.m_iWearable2, RENDER_TRANSALPHA); + SetEntityRenderColor(npc.m_iWearable2, 50, 200, 50, 255); + SetEntityRenderMode(npc.m_iWearable3, RENDER_TRANSALPHA); + SetEntityRenderColor(npc.m_iWearable3, 50, 200, 50, 255); + SetEntityRenderMode(npc.m_iWearable4, RENDER_TRANSALPHA); + SetEntityRenderColor(npc.m_iWearable4, 50, 200, 50, 255); + + npc.m_bThisNpcIsABoss = true; + npc.StartPathing(); + + if(isLabVersion) + { + CPrintToChatAll("{red}[XENO LAB SECURITY PROTOCOL ACTIVATED]"); + CPrintToChatAll("{crimson}Xeno Lab Security{default}: INTRUDERS DETECTED. INITIATING CONTAINMENT PROCEDURES."); + } + else + { + CPrintToChatAll("{red}[XENO SECURITY UNIT DEPLOYED]"); + CPrintToChatAll("{green}Xeno Security{default}: Target acquired. Commencing elimination protocol."); + } + npc.PlaySecurityAlertSound(); + + return npc; + } + + property int m_iCombatProtocol + { + public get() { return this.m_iOverlordComboAttack; } + public set(int value) { this.m_iOverlordComboAttack = value; } + } + + property bool m_bIsLabVersion + { + public get() { return view_as(this.m_iMedkitAnnoyance); } + public set(bool value) { this.m_iMedkitAnnoyance = value ? 1 : 0; } + } +} + +public void XenoLabSecurity_ClotThink(int iNPC) +{ + XenoLabSecurity npc = view_as(iNPC); + + float gameTime = GetGameTime(npc.index); + + if(npc.m_flNextDelayTime > gameTime) + return; + + npc.m_flNextDelayTime = gameTime + DEFAULT_UPDATE_DELAY_FLOAT; + npc.Update(); + + if(npc.m_flNextThinkTime > gameTime) + return; + + npc.m_flNextThinkTime = gameTime + 0.1; + + if(npc.m_blPlayHurtAnimation) + { + npc.AddGesture("ACT_MP_GESTURE_FLINCH_CHEST", false); + npc.m_blPlayHurtAnimation = false; + npc.PlayHurtSound(); + } + + npc.m_iCombatProtocol++; + + if(npc.m_iCombatProtocol >= 1000) + { + npc.m_iCombatProtocol = 0; + + if(npc.m_flSpeed < 350.0) + { + npc.m_flSpeed += 10.0; + + // Visual feedback + float pos[3]; + GetEntPropVector(npc.index, Prop_Data, "m_vecAbsOrigin", pos); + spawnRing_Vectors(pos, 0.0, 0.0, 0.0, 0.0, "materials/sprites/laserbeam.vmt", 50, 255, 50, 200, 1, 0.5, 6.0, 8.0, 1, 200.0); + + EmitSoundToAll("weapons/physcannon/energy_bounce1.wav", npc.index, _, 80, _, 0.5); + } + } + + if(npc.m_flNextRangedSpecialAttack < gameTime) + { + Security_InfectionProtocol(npc, gameTime); + } + + if(npc.m_flGetClosestTargetTime < gameTime) + { + npc.m_iTarget = GetClosestTarget(npc.index); + npc.m_flGetClosestTargetTime = gameTime + GetRandomRetargetTime(); + } + + if(IsValidEnemy(npc.index, npc.m_iTarget)) + { + float vecTarget[3]; WorldSpaceCenter(npc.m_iTarget, vecTarget); + float VecSelfNpc[3]; WorldSpaceCenter(npc.index, VecSelfNpc); + float flDistanceToTarget = GetVectorDistance(vecTarget, VecSelfNpc, true); + + if(flDistanceToTarget < npc.GetLeadRadius()) + { + float vPredictedPos[3]; + PredictSubjectPosition(npc, npc.m_iTarget, _, _, vPredictedPos); + npc.SetGoalVector(vPredictedPos); + } + else + { + npc.SetGoalEntity(npc.m_iTarget); + } + + npc.StartPathing(); + + Security_SelfDefense(npc, gameTime, npc.m_iTarget, flDistanceToTarget); + } + else + { + npc.m_flGetClosestTargetTime = 0.0; + npc.m_iTarget = GetClosestTarget(npc.index); + } + + npc.PlayIdleSound(); +} + +void Security_InfectionProtocol(XenoLabSecurity npc, float gameTime) +{ + float activationDelay = npc.m_bIsLabVersion ? 1.5 : 1.0; + + // Stop and prepare + npc.m_flSpeed = 0.0; + npc.m_bisWalking = false; + npc.StopPathing(); + npc.PlayAngerSound(); + + float pos[3]; + GetEntPropVector(npc.index, Prop_Data, "m_vecAbsOrigin", pos); + pos[2] += 45.0; + + float range = (npc.m_bIsLabVersion && npc.Anger) ? SECURITY_INFECTION_RANGE * 1.5 : SECURITY_INFECTION_RANGE; + + spawnRing_Vectors(pos, range * 2.0, 0.0, 0.0, 0.0, "materials/sprites/laserbeam.vmt", 50, 255, 50, 200, 1, activationDelay, 6.0, 8.0, 1, 0.0); + spawnRing_Vectors(pos, range * 2.0, 0.0, 0.0, 10.0, "materials/sprites/laserbeam.vmt", 100, 255, 100, 200, 1, activationDelay, 6.0, 8.0, 1, 0.0); + spawnRing_Vectors(pos, range * 2.0, 0.0, 0.0, 20.0, "materials/sprites/laserbeam.vmt", 150, 255, 150, 200, 1, activationDelay, 6.0, 8.0, 1, 0.0); + + float ang[3]; + ang[0] = -90.0; + int particle = ParticleEffectAt(pos, "green_steam_plume", activationDelay); + TeleportEntity(particle, NULL_VECTOR, ang, NULL_VECTOR); + + DataPack pack; + CreateDataTimer(activationDelay, Timer_SecurityInfectionBlast, pack, TIMER_FLAG_NO_MAPCHANGE); + pack.WriteCell(EntIndexToEntRef(npc.index)); + pack.WriteFloat(range); + + // next infection time based on lab version enrage state + float cooldown = (npc.m_bIsLabVersion && npc.Anger) ? 8.0 : 12.0; + npc.m_flNextRangedSpecialAttack = gameTime + activationDelay + cooldown; +} + +public Action Timer_SecurityInfectionBlast(Handle timer, DataPack pack) +{ + pack.Reset(); + int ref = pack.ReadCell(); + float range = pack.ReadFloat(); + + int entity = EntRefToEntIndex(ref); + if(!IsValidEntity(entity)) + return Plugin_Stop; + + XenoLabSecurity npc = view_as(entity); + + npc.m_flSpeed = (npc.m_bIsLabVersion && npc.Anger) ? 280.0 : 220.0; + npc.m_bisWalking = true; + int iActivity = npc.LookupActivity("ACT_MP_RUN_MELEE"); + if(iActivity > 0) npc.StartActivity(iActivity); + npc.StartPathing(); + + float pos[3]; + GetEntPropVector(entity, Prop_Data, "m_vecAbsOrigin", pos); + pos[2] += 10.0; + + float damage = (npc.m_bIsLabVersion && npc.Anger) ? 500.0 : 350.0; + Explode_Logic_Custom(damage, entity, entity, -1, pos, range, _, _, true, _, _, 1.0, Security_InfectionHit); + + int particle = ParticleEffectAt(pos, "green_wof_sparks", 2.0); + float ang[3]; + ang[0] = -90.0; + TeleportEntity(particle, NULL_VECTOR, ang, NULL_VECTOR); + + EmitSoundToAll("weapons/cow_mangler_explode.wav", 0, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, SNDVOL_NORMAL, SNDPITCH_NORMAL, -1, pos); + + if(npc.m_bIsLabVersion) + { + if(npc.Anger) + { + CPrintToChatAll("{crimson}Xeno Lab Security{default}: ENHANCED PROTOCOLS ACTIVE. MAXIMUM CONTAINMENT."); + } + else + { + CPrintToChatAll("{crimson}Xeno Lab Security{default}: INFECTION PROTOCOL DEPLOYED."); + } + } + else + { + if(npc.Anger) + { + CPrintToChatAll("{green}Xeno Security{default}: Enhanced combat mode engaged."); + } + else + { + CPrintToChatAll("{green}Xeno Security{default}: Area denial protocol active."); + } + } + + return Plugin_Stop; +} + +void Security_InfectionHit(int entity, int victim, float damage, int weapon) +{ + XenoLabSecurity npc = view_as(entity); + + if(IsValidClient(victim) && !IsInvuln(victim)) + { + // HUD notification - different message based on version + float HudY = -1.0; + float HudX = -1.0; + SetHudTextParams(HudX, HudY, 3.0, 50, 255, 50, 255); + + if(npc.m_bIsLabVersion) + { + ShowHudText(victim, -1, "XENO LAB SECURITY HAS INFECTED YOU!"); + } + else + { + ShowHudText(victim, -1, "XENO SECURITY UNIT HAS INFECTED YOU!"); + } + ClientCommand(victim, "playgamesound items/powerup_pickup_plague_infected.wav"); + + // stronger infection in enraged mode aka lab version only + int tickCount = (npc.m_bIsLabVersion && npc.Anger) ? 15 : 10; + float tickDamage = (npc.m_bIsLabVersion && npc.Anger) ? 80.0 : 60.0; + + StartBleedingTimer(victim, entity, tickDamage, tickCount, -1, DMG_SLASH, 0, 1); + + float slowDuration = (npc.m_bIsLabVersion && npc.Anger) ? 3.0 : 2.0; + TF2_StunPlayer(victim, slowDuration, 0.5, TF_STUNFLAG_SLOWDOWN); + } +} + +void Security_SelfDefense(XenoLabSecurity npc, float gameTime, int target, float distance) +{ + if(npc.m_flAttackHappens) + { + if(npc.m_flAttackHappens < gameTime) + { + npc.m_flAttackHappens = 0.0; + + Handle swingTrace; + float VecEnemy[3]; WorldSpaceCenter(npc.m_iTarget, VecEnemy); + npc.FaceTowards(VecEnemy, 15000.0); + + if(npc.DoSwingTrace(swingTrace, npc.m_iTarget)) + { + target = TR_GetEntityIndex(swingTrace); + float vecHit[3]; + TR_GetEndPosition(vecHit, swingTrace); + + if(IsValidEnemy(npc.index, target)) + { + // Base damage + float damageDealt = 400.0; + + // Enraged mode damage boost - ONLY for lab versions + if(npc.m_bIsLabVersion && npc.Anger) + damageDealt *= 1.5; + + if(ShouldNpcDealBonusDamage(target)) + damageDealt *= 5.0; + + SDKHooks_TakeDamage(target, npc.index, npc.index, damageDealt, DMG_CLUB, -1, _, vecHit); + npc.PlayMeleeHitSound(); + + // Knockback in enraged mode - ONLY for lab versions + if(npc.m_bIsLabVersion && npc.Anger) + { + float direction[3]; + SubtractVectors(vecHit, VecEnemy, direction); + NormalizeVector(direction, direction); + ScaleVector(direction, 500.0); + + if(IsValidClient(target)) + { + TeleportEntity(target, NULL_VECTOR, NULL_VECTOR, direction); + } + } + } + } + delete swingTrace; + } + } + + if(gameTime > npc.m_flNextMeleeAttack) + { + if(distance < (GIANT_ENEMY_MELEE_RANGE_FLOAT_SQUARED)) + { + int Enemy_I_See = Can_I_See_Enemy(npc.index, npc.m_iTarget); + + if(IsValidEnemy(npc.index, Enemy_I_See)) + { + npc.m_iTarget = Enemy_I_See; + npc.PlayMeleeSound(); + npc.AddGesture("ACT_MP_ATTACK_STAND_MELEE"); + + npc.m_flAttackHappens = gameTime + 0.4; + + float attackCooldown = (npc.m_bIsLabVersion && npc.Anger) ? 0.8 : 1.2; + npc.m_flNextMeleeAttack = gameTime + attackCooldown; + } + } + } +} + +public Action XenoLabSecurity_OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3], int damagecustom) +{ + XenoLabSecurity npc = view_as(victim); + + if(attacker <= 0) + return Plugin_Continue; + + if(npc.m_flHeadshotCooldown < GetGameTime(npc.index)) + { + npc.m_flHeadshotCooldown = GetGameTime(npc.index) + DEFAULT_HURTDELAY; + npc.m_blPlayHurtAnimation = true; + } + + if(npc.m_bIsLabVersion && !npc.Anger) + { + int health = GetEntProp(npc.index, Prop_Data, "m_iHealth"); + int maxhealth = ReturnEntityMaxHealth(npc.index); + + if(health < (maxhealth * SECURITY_ENRAGE_THRESHOLD)) + { + npc.Anger = true; + Security_EnterEnrageMode(npc); + } + } + + return Plugin_Changed; +} + +void Security_EnterEnrageMode(XenoLabSecurity npc) +{ + SetEntityRenderColor(npc.index, 255, 0, 0, 255); + SetEntityRenderColor(npc.m_iWearable1, 255, 0, 0, 255); + SetEntityRenderColor(npc.m_iWearable2, 255, 0, 0, 255); + SetEntityRenderColor(npc.m_iWearable3, 255, 0, 0, 255); + SetEntityRenderColor(npc.m_iWearable4, 255, 0, 0, 255); + + npc.m_flSpeed = 280.0; + + float pos[3]; + GetEntPropVector(npc.index, Prop_Data, "m_vecAbsOrigin", pos); + + spawnRing_Vectors(pos, 0.0, 0.0, 0.0, 0.0, "materials/sprites/laserbeam.vmt", 255, 0, 0, 255, 1, 1.0, 8.0, 12.0, 1, 300.0); + spawnRing_Vectors(pos, 0.0, 0.0, 0.0, 30.0, "materials/sprites/laserbeam.vmt", 255, 0, 0, 255, 1, 1.0, 8.0, 12.0, 1, 300.0); + spawnRing_Vectors(pos, 0.0, 0.0, 0.0, 60.0, "materials/sprites/laserbeam.vmt", 255, 0, 0, 255, 1, 1.0, 8.0, 12.0, 1, 300.0); + + npc.PlayAngerSound(); + + CPrintToChatAll("{red}[CRITICAL WARNING]"); + CPrintToChatAll("{crimson}Xeno Lab Security{default}: DAMAGE THRESHOLD EXCEEDED. ACTIVATING EMERGENCY PROTOCOLS."); + CPrintToChatAll("{crimson}Xeno Lab Security{default}: ALL SAFETY LIMITERS REMOVED."); + + EmitSoundToAll("weapons/physcannon/energy_bounce2.wav", npc.index, _, 90, _, 0.8); +} + +public void XenoLabSecurity_NPCDeath(int entity) +{ + XenoLabSecurity npc = view_as(entity); + + if(!npc.m_bGib) + { + npc.PlayDeathSound(); + } + + // Remove cosmetics + if(IsValidEntity(npc.m_iWearable1)) + RemoveEntity(npc.m_iWearable1); + if(IsValidEntity(npc.m_iWearable2)) + RemoveEntity(npc.m_iWearable2); + if(IsValidEntity(npc.m_iWearable3)) + RemoveEntity(npc.m_iWearable3); + if(IsValidEntity(npc.m_iWearable4)) + RemoveEntity(npc.m_iWearable4); + + if(npc.m_bIsLabVersion) + { + CPrintToChatAll("{crimson}Xeno Lab Security{default}: CRITICAL SYSTEM FAILURE... CONTAINMENT... BREACH..."); + CPrintToChatAll("{green}[CONTAINMENT BREACH - SECURITY SYSTEMS OFFLINE]"); + } + else + { + CPrintToChatAll("{green}Xeno Security{default}: Termination failed.... report.. status.. {green}relay complete."); + CPrintToChatAll("{green}[SECURITY UNIT DESTROYED]"); + } +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/zombie_riot/object/construction2/obj_const2_laser_intensifier.sp b/addons/sourcemod/scripting/zombie_riot/object/construction2/obj_const2_laser_intensifier.sp index 3d6eb21731..6d85993731 100644 --- a/addons/sourcemod/scripting/zombie_riot/object/construction2/obj_const2_laser_intensifier.sp +++ b/addons/sourcemod/scripting/zombie_riot/object/construction2/obj_const2_laser_intensifier.sp @@ -149,19 +149,19 @@ void ObjectC2LaserIntensifier_ClotThink(ObjectC2LaserIntensifier npc) //too far away npc.m_iTarget = -1; npc.m_flGetClosestTargetTime = 0.0; - npc.m_flAttackspeedRamp = 2.0; + npc.m_flAttackspeedRamp = 1.0; return; } if(npc.m_iTarget != npc.m_iTargetAlly) { - npc.m_flAttackspeedRamp = 2.0; + npc.m_flAttackspeedRamp = 1.0; } else { - if(npc.m_flAttackspeedRamp <= 1.0) - npc.m_flAttackspeedRamp *= 0.85; + if(npc.m_flAttackspeedRamp <= 0.75) + npc.m_flAttackspeedRamp *= 0.75; else - npc.m_flAttackspeedRamp *= 0.45; + npc.m_flAttackspeedRamp *= 0.35; if(npc.m_flAttackspeedRamp <= 0.15) { diff --git a/addons/sourcemod/scripting/zombie_riot/object/construction2/obj_dungeon_altar.sp b/addons/sourcemod/scripting/zombie_riot/object/construction2/obj_dungeon_altar.sp index 730676337a..09f9afb781 100644 --- a/addons/sourcemod/scripting/zombie_riot/object/construction2/obj_dungeon_altar.sp +++ b/addons/sourcemod/scripting/zombie_riot/object/construction2/obj_dungeon_altar.sp @@ -16,9 +16,9 @@ #define CONSTRUCT_RESOURCE1 "iron" #define CONSTRUCT_COST1 (3 + (CurrentLevel * 3)) #define CONSTRUCT_MAXLVL (ObjectDungeonCenter_Level() * 3) -#define CONSTRUCT_DAMAGE (3000.0 * Pow(level + 1.0, 1.25)) //SET ME +#define CONSTRUCT_DAMAGE (4200.0 * Pow(level + 1.0, 1.25)) //SET ME #define CONSTRUCT_FIRERATE 1.0 -#define CONSTRUCT_RANGE (7000.0 * Pow(level + 1.0, 1.25)) //HEALTH +#define CONSTRUCT_RANGE (3500.0 * Pow(level + 1.0, 1.25)) //HEALTH #define CONSTRUCT_MAXCOUNT (1) static int NPCId; diff --git a/addons/sourcemod/scripting/zombie_riot/object/obj_shared.sp b/addons/sourcemod/scripting/zombie_riot/object/obj_shared.sp index 27a0142dcd..6350866384 100644 --- a/addons/sourcemod/scripting/zombie_riot/object/obj_shared.sp +++ b/addons/sourcemod/scripting/zombie_riot/object/obj_shared.sp @@ -139,12 +139,13 @@ methodmap ObjectGeneric < CClotBody DispatchKeyValueVector(obj, "origin", vecPos); DispatchKeyValueVector(obj, "angles", vecAng); DispatchKeyValue(obj, "model", model); - DispatchKeyValue(obj, "modelscale", modelscale); DispatchKeyValue(obj, "solid", "2"); DispatchKeyValue(obj, "physdamagescale", "0.0"); DispatchKeyValue(obj, "minhealthdmg", "0.0"); DispatchSpawn(obj); + SetEntPropFloat(obj, Prop_Send, "m_flModelScale", StringToFloat(modelscale)); + ObjectGeneric objstats = view_as(obj); objstats.BaseHealth = StringToInt(basehealth); if(IsValidEntity(client)) @@ -271,16 +272,16 @@ methodmap ObjectGeneric < CClotBody { int item = CreateEntityByName("prop_dynamic_override"); DispatchKeyValue(item, "model", model); + + DispatchSpawn(item); if(model_size == 1.0) { - DispatchKeyValueFloat(item, "modelscale", GetEntPropFloat(this.index, Prop_Data, "m_flModelScale")); + SetEntPropFloat(item, Prop_Send, "m_flModelScale", GetEntPropFloat(this.index, Prop_Data, "m_flModelScale")); } else { - DispatchKeyValueFloat(item, "modelscale", model_size); + SetEntPropFloat(item, Prop_Send, "m_flModelScale", model_size); } - - DispatchSpawn(item); SetEntPropEnt(item, Prop_Send, "m_hOwnerEntity", this.index); SetEntityMoveType(item, MOVETYPE_NONE); diff --git a/addons/sourcemod/scripting/zombie_riot/object/obj_vintulum_bomb.sp b/addons/sourcemod/scripting/zombie_riot/object/obj_vintulum_bomb.sp index 94cd65a53c..eb73560e46 100644 --- a/addons/sourcemod/scripting/zombie_riot/object/obj_vintulum_bomb.sp +++ b/addons/sourcemod/scripting/zombie_riot/object/obj_vintulum_bomb.sp @@ -69,7 +69,7 @@ methodmap ObjectVintulumBomb < ObjectGeneric { EmitSoundToAll(g_ExplosionRightBefore[GetRandomInt(0, sizeof(g_ExplosionRightBefore) - 1)], this.index, SNDCHAN_AUTO, 80, _, 0.8, 100); } - public void PlayExplodeDo(bool alreadydead) + public void PlayExplodeDo(bool alreadydead, bool VisualOnly = false) { EmitSoundToAll(g_ExplosionSound[GetRandomInt(0, sizeof(g_ExplosionSound) - 1)], this.index, SNDCHAN_AUTO, 80, _, 1.0, 100); EmitSoundToAll(g_ExplosionSound[GetRandomInt(0, sizeof(g_ExplosionSound) - 1)], this.index, SNDCHAN_AUTO, 80, _, 1.0, 100); @@ -84,24 +84,27 @@ methodmap ObjectVintulumBomb < ObjectGeneric TE_Particle("grenade_smoke_cycle", pos, NULL_VECTOR, NULL_VECTOR, _, _, _, _, _, _, _, _, _, _, 0.0); - int Owner = GetEntPropEnt(this.index, Prop_Send, "m_hOwnerEntity"); - if(!IsValidClient(Owner)) + if(!VisualOnly) { - return; + int Owner = GetEntPropEnt(this.index, Prop_Send, "m_hOwnerEntity"); + if(!IsValidClient(Owner)) + { + return; + } + float damage = 10.0; + damage *= 30.0; + float attack_speed; + float sentry_range; + attack_speed = 1.0 / Attributes_GetOnPlayer(Owner, 343, true, true); //Sentry attack speed bonus + damage = attack_speed * damage * Attributes_GetOnPlayer(Owner, 287, true, true); //Sentry damage bonus + sentry_range = Attributes_GetOnPlayer(Owner, 344, true, true); //Sentry Range bonus + float AOE_range = 350.0 * sentry_range; + + damage *= 5.0; + //its like 5 mortars at once. + Explode_Logic_Custom(damage, Owner, Owner, -1, pos, AOE_range, 0.75, _, false); + ExpidonsaGroupHeal(Owner, AOE_range, 99, 1.0, 1.0, true, VintulumBombSelf, .LOS = true, .VecDoAt = pos); } - float damage = 10.0; - damage *= 30.0; - float attack_speed; - float sentry_range; - attack_speed = 1.0 / Attributes_GetOnPlayer(Owner, 343, true, true); //Sentry attack speed bonus - damage = attack_speed * damage * Attributes_GetOnPlayer(Owner, 287, true, true); //Sentry damage bonus - sentry_range = Attributes_GetOnPlayer(Owner, 344, true, true); //Sentry Range bonus - float AOE_range = 350.0 * sentry_range; - - damage *= 5.0; - //its like 5 mortars at once. - Explode_Logic_Custom(damage, Owner, Owner, -1, pos, AOE_range, 0.75, _, false); - ExpidonsaGroupHeal(Owner, AOE_range, 99, 1.0, 1.0, true, VintulumBombSelf, .LOS = true, .VecDoAt = pos); int entity = CreateEntityByName("light_dynamic"); if(entity != -1) @@ -119,8 +122,9 @@ methodmap ObjectVintulumBomb < ObjectGeneric CreateTimer(2.0, Timer_RemoveEntity, EntIndexToEntRef(entity), TIMER_FLAG_NO_MAPCHANGE); CreateTimer(0.1, Timer_ReduceLighting, EntIndexToEntRef(entity), TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT); } - if(!alreadydead) - DestroyBuildingDo(this.index); + if(!VisualOnly) + if(!alreadydead) + DestroyBuildingDo(this.index); } property float m_flBombExplodeTill @@ -149,7 +153,6 @@ methodmap ObjectVintulumBomb < ObjectGeneric return npc; } } - static void ClotThink(ObjectVintulumBomb npc) { int Owner = GetEntPropEnt(npc.index, Prop_Send, "m_hOwnerEntity"); diff --git a/addons/sourcemod/scripting/zombie_riot/rogue.sp b/addons/sourcemod/scripting/zombie_riot/rogue.sp index 77583652b4..907740c9d2 100644 --- a/addons/sourcemod/scripting/zombie_riot/rogue.sp +++ b/addons/sourcemod/scripting/zombie_riot/rogue.sp @@ -3409,16 +3409,16 @@ bool Rogue_UpdateMvMStats() switch(Rogue_GetUmbralLevel()) { case 0: // Most Friendly - Waves_SetWaveClass(objective, i, CurrentUmbral, "affinity_best", MVM_CLASS_FLAG_NORMAL|MVM_CLASS_FLAG_ALWAYSCRIT, true); + Waves_SetWaveClass(objective, i, CurrentUmbral, "affinitybestv2", MVM_CLASS_FLAG_NORMAL|MVM_CLASS_FLAG_ALWAYSCRIT, true); case 1, 2: - Waves_SetWaveClass(objective, i, CurrentUmbral, "affinity_neutral", MVM_CLASS_FLAG_NORMAL, true); + Waves_SetWaveClass(objective, i, CurrentUmbral, "affinityneutralv2", MVM_CLASS_FLAG_NORMAL, true); case 3: - Waves_SetWaveClass(objective, i, CurrentUmbral, "affinity_bad", MVM_CLASS_FLAG_MINIBOSS, true); + Waves_SetWaveClass(objective, i, CurrentUmbral, "affinitybadv3", MVM_CLASS_FLAG_MINIBOSS, true); default: // Most Hated - Waves_SetWaveClass(objective, i, CurrentUmbral, "affinity_worst", MVM_CLASS_FLAG_MINIBOSS|MVM_CLASS_FLAG_ALWAYSCRIT, true); + Waves_SetWaveClass(objective, i, CurrentUmbral, "affinityworstv2", MVM_CLASS_FLAG_MINIBOSS|MVM_CLASS_FLAG_ALWAYSCRIT, true); } continue; diff --git a/addons/sourcemod/scripting/zombie_riot/roguelike/construction_items.sp b/addons/sourcemod/scripting/zombie_riot/roguelike/construction_items.sp index dfd9c5207b..bcb3a9275f 100644 --- a/addons/sourcemod/scripting/zombie_riot/roguelike/construction_items.sp +++ b/addons/sourcemod/scripting/zombie_riot/roguelike/construction_items.sp @@ -333,7 +333,7 @@ public void Construction_RareWeapon_Collect() char name[64]; float discount = 0.7; - switch(GetURandomInt() % 6) + switch(GetURandomInt() % 4) { case 0, 1: { @@ -349,10 +349,12 @@ public void Construction_RareWeapon_Collect() { strcopy(name, sizeof(name), "Whistle Stop"); } + /* case 4, 5: { strcopy(name, sizeof(name), "Ancestor Launcher"); } + */ } Store_DiscountNamedItem(name, 999, discount); @@ -368,7 +370,7 @@ public void Xeno_Resurgance_Enemy(int entity) return; if(view_as(entity).m_iBleedType != BLEEDTYPE_XENO) - ApplyStatusEffect(entity, entity, "Xeno Infection", 9999.9); + ApplyStatusEffect(entity, entity, "Xeno Infection Buff", 9999.9); else ApplyStatusEffect(entity, entity, "Xeno Infection Buff Only", 9999.9); } diff --git a/addons/sourcemod/scripting/zombie_riot/roguelike/dungeon_items.sp b/addons/sourcemod/scripting/zombie_riot/roguelike/dungeon_items.sp index ee5cebd21b..84d11af349 100644 --- a/addons/sourcemod/scripting/zombie_riot/roguelike/dungeon_items.sp +++ b/addons/sourcemod/scripting/zombie_riot/roguelike/dungeon_items.sp @@ -111,7 +111,7 @@ public void Dungeon_Crate_Iron() public void Dungeon_Crate_Copper() { - int amount = GetRandomInt(4, 6); + int amount = GetRandomInt(7, 9); MaterialDelay("copper", amount); } @@ -170,15 +170,15 @@ static Action Timer_DialogueNewEnd(Handle timer, int part) { case 0: { - CPrintToChatAll("{gray}You hear radio chatter, it doesnt sound familiar to you, but the device {pink}Reila {gray}gave you blinks up, translating for you..."); + CPrintToChatAll("{gray}You hear radio chatter, it doesn't sound familiar to you, but the device {pink}Reila {gray}gave you blinks up, translating for you..."); } case 1: { - CPrintToChatAll("{violet}???{default}: Ruanian Magic is just fancy tech, it looks just like ours, its insane."); + CPrintToChatAll("{violet}???{default}: Ruanian Magic is just fancy tech, it looks just like ours, it's insane."); } case 2: { - CPrintToChatAll("{mediumvioletred}???{default}: Well it barely worked, most of this is still our shit, its as if ruanians hate tech or something."); + CPrintToChatAll("{mediumvioletred}???{default}: Well it barely worked, most of this is still our shit, it's as if ruanians hate tech or something."); } case 3: { @@ -186,15 +186,15 @@ static Action Timer_DialogueNewEnd(Handle timer, int part) } case 4: { - CPrintToChatAll("{violet}???{default}: Isnt it unethical, like, there are people in those crystals and we just use that..."); + CPrintToChatAll("{violet}???{default}: Isn't it unethical, like, there are people in those crystals and we just use that..."); } case 5: { - CPrintToChatAll("{mediumvioletred}???{default}: What? People? They arent sentient, Its a simulation remember, to keep us up incase someone invades?"); + CPrintToChatAll("{mediumvioletred}???{default}: What? People? They aren't sentient, it's a simulation remember, to keep us up incase someone invades?"); } case 6: { - CPrintToChatAll("{mediumvioletred}???{default}: Why the CEO would put up fake enemies is still beyond me, But money is money."); + CPrintToChatAll("{mediumvioletred}???{default}: Why the CEO would put up fake enemies is still beyond me, but money is money."); } case 7: { @@ -202,16 +202,16 @@ static Action Timer_DialogueNewEnd(Handle timer, int part) } case 8: { - CPrintToChatAll("{violet}???{default}: If its fake, then why are we trying to escape? Something's fishy."); + CPrintToChatAll("{violet}???{default}: If it's fake, then why are we trying to escape? Something's fishy."); } case 9: { - CPrintToChatAll("{violet}???{default}: hey what are you doi-"); + CPrintToChatAll("{violet}???{default}: Hey what are you doi-"); CPrintToChatAll("{gray}Two loud gunshots can be heard, both bodies falling to the floor."); } case 10: { - CPrintToChatAll("{gray}???{crimson}: Good employee's don't ask or question, don't break company policy."); + CPrintToChatAll("{gray}???{crimson}: Good employees don't ask or question, don't break company policy."); } case 11: { @@ -219,7 +219,7 @@ static Action Timer_DialogueNewEnd(Handle timer, int part) } case 12: { - CPrintToChatAll("{gray}???{crimson}: You closed those gates on us, {red}i will end your life."); + CPrintToChatAll("{gray}???{crimson}: You closed those gates on us, {red}I will end your life."); } case 13: { @@ -227,7 +227,7 @@ static Action Timer_DialogueNewEnd(Handle timer, int part) } case 14: { - CPrintToChatAll("{crimson}Someone found you, someone is after you, they arent going easy on you no more."); + CPrintToChatAll("{crimson}Someone found you, someone is after you, they aren't going easy on you no more."); } default: { diff --git a/addons/sourcemod/scripting/zombie_riot/roguelike/helpers.sp b/addons/sourcemod/scripting/zombie_riot/roguelike/helpers.sp index d4465076e6..f1be69019c 100644 --- a/addons/sourcemod/scripting/zombie_riot/roguelike/helpers.sp +++ b/addons/sourcemod/scripting/zombie_riot/roguelike/helpers.sp @@ -71,9 +71,7 @@ stock void RogueHelp_BodyAPSD(int entity, StringMap map, float amount) { if(map) // Player { - float value; - - value = 1.0; + float value = 1.0; map.GetValue("343", value); map.SetValue("343", value / amount); } @@ -104,7 +102,7 @@ stock void RogueHelp_BodyRes(int entity, StringMap map = null, float amount) { if(map) // Player { - float value; + float value = 1.0; map.GetValue("412", value); map.SetValue("412", value / amount); @@ -140,9 +138,8 @@ stock void RogueHelp_BodySpeed(int entity, StringMap map, float amount) { if(map) // Player { - float value; + float value = 1.0; - value = 1.0; map.GetValue("442", value); map.SetValue("442", value * amount); } diff --git a/addons/sourcemod/scripting/zombie_riot/roguelike/paradox_generic.sp b/addons/sourcemod/scripting/zombie_riot/roguelike/paradox_generic.sp index 0563a889f8..b0e3676274 100644 --- a/addons/sourcemod/scripting/zombie_riot/roguelike/paradox_generic.sp +++ b/addons/sourcemod/scripting/zombie_riot/roguelike/paradox_generic.sp @@ -512,12 +512,12 @@ public void Rogue_HealthDown1_Enemy(int entity) public void Rogue_HealthDown2_Enemy(int entity) { - RogueHelp_BodyHealth(entity, null, 0.85); + RogueHelp_BodyHealth(entity, null, 0.88); } public void Rogue_HealthDown3_Enemy(int entity) { - RogueHelp_BodyHealth(entity, null, 0.8); + RogueHelp_BodyHealth(entity, null, 0.85); } public void Rogue_MeleeDamage1_Weapon(int entity) diff --git a/addons/sourcemod/scripting/zombie_riot/store.sp b/addons/sourcemod/scripting/zombie_riot/store.sp index 53cb492097..54b21beac5 100644 --- a/addons/sourcemod/scripting/zombie_riot/store.sp +++ b/addons/sourcemod/scripting/zombie_riot/store.sp @@ -2132,8 +2132,8 @@ public void ReShowSettingsHud(int client) menu2.AddItem("-85", buffer); */ - Format(buffer, sizeof(buffer), "%T", "Taunt Speed increase", client); - if(b_TauntSpeedIncrease[client]) + Format(buffer, sizeof(buffer), "%T", "Display Backwards Walk Notif", client); + if(b_BackwardsWalkNotif[client]) { Format(buffer, sizeof(buffer), "%s %s", buffer, "[X]"); } @@ -2639,13 +2639,13 @@ public int Settings_MenuPage(Menu menu, MenuAction action, int client, int choic } case -71: { - if(b_TauntSpeedIncrease[client]) + if(b_BackwardsWalkNotif[client]) { - b_TauntSpeedIncrease[client] = false; + b_BackwardsWalkNotif[client] = false; } else { - b_TauntSpeedIncrease[client] = true; + b_BackwardsWalkNotif[client] = true; } ReShowSettingsHud(client); } @@ -5680,6 +5680,7 @@ void Store_GiveAllInternal(int client, int health, bool removeWeapons = false) else if(StoreItems) { Store_RemoveSpecificItem(client, "Teutonic Longsword", false); + Store_RemoveSpecificItem(client, "Teutonic Longsword Shadow", false); } //OverridePlayerModel(client); //stickies can stay, we delete any non spike stickies. @@ -5747,7 +5748,7 @@ void Store_GiveAllInternal(int client, int health, bool removeWeapons = false) b_Reinforce[client] = false; Custom_Inventory_Reset(client); i_MaxSupportBuildingsLimit[client] = 0; - b_PlayerWasAirbornKnockbackReduction[client] = false; + b_PlayerWasAirbornKnockbackReduction[client] = 0; BannerOnEntityCreated(client); FullmoonEarlyReset(client); @@ -5940,6 +5941,11 @@ int Store_GiveItem(int client, int index, bool &use=false, bool &found=false) else CrossbowGiveDhook(entity, true); } + if(saveslot == TFWeaponSlot_Melee) + { + //this melee weapon will deal 0 damage from tf2's view + Attributes_Set(entity, 476, 0.0); + } HidePlayerWeaponModel(client, entity, true); } diff --git a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_ambulance.sp b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_ambulance.sp index c919cbc70c..7a4589f0b3 100644 --- a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_ambulance.sp +++ b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_ambulance.sp @@ -50,6 +50,8 @@ methodmap VehicleAmbulance < VehicleGeneric FuncShowInteractHud[obj.index] = ClotShowInteractHud; func_NPCInteract[obj.index] = ClotInteract; func_NPCThink[obj.index] = ClotThink; + Armor_Charge[obj.index] = 10000; + obj.m_iMaxArmor = 10000; obj.m_flNextThinkTime = 0.0; obj.m_flNextMeleeAttack = 0.0; diff --git a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_fullapc.sp b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_fullapc.sp index 64bd31a873..ffd8ddcea3 100644 --- a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_fullapc.sp +++ b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_fullapc.sp @@ -31,7 +31,7 @@ methodmap VehicleFullAPC < VehicleGeneric { public VehicleFullAPC(const float vecPos[3], const float vecAng[3]) { - VehicleFullAPC obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/combine_apc.mdl", "scripts/vehicles/apc.txt")); + VehicleFullAPC obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/combine_apc.mdl", "scripts/vehicles/zr_custom/apc.txt")); obj.SetDriverOffset({0.0, -10.0, 40.0}); @@ -39,6 +39,8 @@ methodmap VehicleFullAPC < VehicleGeneric obj.AddSeat({0.0, -60.0, 80.0}, 0, Store_GetItemIndex("APC Rockets")); func_NPCThink[obj.index] = ClotThink; + Armor_Charge[obj.index] = 15000; + obj.m_iMaxArmor = 15000; AimPitch = obj.LookupPoseParameter("vehicle_weapon_pitch"); AimYaw = obj.LookupPoseParameter("vehicle_weapon_yaw"); diff --git a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_fulljeep.sp b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_fulljeep.sp index cabe66d023..d54721ce2b 100644 --- a/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_fulljeep.sp +++ b/addons/sourcemod/scripting/zombie_riot/vehicles/vehicle_fulljeep.sp @@ -27,11 +27,13 @@ methodmap VehicleFullJeep < VehicleGeneric { public VehicleFullJeep(const float vecPos[3], const float vecAng[3]) { - VehicleFullJeep obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/buggy.mdl", "scripts/vehicles/jeep_test.txt")); + VehicleFullJeep obj = view_as(VehicleGeneric(vecPos, vecAng, VEHICLE_TYPE_CAR_WHEELS, "models/buggy.mdl", "scripts/vehicles/zr_custom/jeep_test.txt")); obj.m_iGunIndex = -1; obj.AddSeat({22.0, -42.0, 12.0}, 0); obj.AddSeat({2.0, -90.0, 34.0}, 1); + Armor_Charge[obj.index] = 15000; + obj.m_iMaxArmor = 15000; FuncShowInteractHud[obj.index] = VehicleFullJeep_ClotShowInteractHud; func_NPCInteract[obj.index] = VehicleFullJeep_ClotInteract; diff --git a/addons/sourcemod/scripting/zombie_riot/waves.sp b/addons/sourcemod/scripting/zombie_riot/waves.sp index ceeacf6f98..faab1d9af4 100644 --- a/addons/sourcemod/scripting/zombie_riot/waves.sp +++ b/addons/sourcemod/scripting/zombie_riot/waves.sp @@ -905,7 +905,11 @@ void Waves_SetupVote(KeyValues map, bool modifierOnly = false) { // ZS-Classic Gamemode if(kv.GetNum("classicmode")) - Classic_Enable(); + Classic_Enable(true); + else + { + Classic_Enable(false); + } } bool autoSelect = CvarAutoSelectWave.BoolValue; @@ -2158,9 +2162,10 @@ bool Waves_Progress(bool donotAdvanceRound = false, Rogue_TriggerFunction(Artifact::FuncWaveStart); if(Classic_Mode()) + { Classic_NewRoundStart(round.Cash); + } } - if(wave.RelayName[0]) ExcuteRelay(wave.RelayName, wave.RelayFire); @@ -2342,6 +2347,17 @@ bool Waves_Progress(bool donotAdvanceRound = false, } } } + if(Classic_Mode()) + { + for(int entitycount; entitycount= 1.0); + CheckAlivePlayers(); + } BlockOtherRaidMusic = false; } if(round.AmmoBoxExtra) @@ -3592,6 +3615,11 @@ void DoGlobalMultiScaling() playercount *= 0.88; playercount *= GetScaledPlayerCountMulti(PlayersIngame); + //We want to reduce scaling for several gamemodes if its above a certain player counts + //this is due to buildings not really scaling past 14 players, or the gameplay being very hectic, this is just to circumvent it a lil + if(Dungeon_Mode() || Rogue_Mode()) + playercount *= GetScaledPlayerCountMulti(PlayersIngame, 0.125); + float multi = playercount / 4.0; Rogue_Rift_MultiScale(multi); @@ -4441,11 +4469,11 @@ void Waves_EnemySpawned(int entity) Call_PushCell(entity); Call_Finish(); } - if(!b_thisNpcIsARaid[entity] && XenoExtraLogic(true)) + if(!b_thisNpcIsARaid[entity] && !b_thisNpcIsAMiniboss[entity] && XenoExtraLogic(true)) { ApplyStatusEffect(entity, entity, "Xeno's Territory", 99999.0); } - if(!b_thisNpcIsARaid[entity] && FishExtraLogic(true)) + if(!b_thisNpcIsARaid[entity] && !b_thisNpcIsAMiniboss[entity] && FishExtraLogic(true)) { ApplyStatusEffect(entity, entity, "Corrupted Godly Power", 99999.0); } diff --git a/addons/sourcemod/scripting/zombie_riot/zombie_drops.sp b/addons/sourcemod/scripting/zombie_riot/zombie_drops.sp index cac05db3cb..520eb65386 100644 --- a/addons/sourcemod/scripting/zombie_riot/zombie_drops.sp +++ b/addons/sourcemod/scripting/zombie_riot/zombie_drops.sp @@ -272,7 +272,6 @@ public void SpawnNuke(int entity) { b_ToggleTransparency[prop] = false; DispatchKeyValue(prop, "model", NUKE_MODEL); - DispatchKeyValue(prop, "modelscale", "0.65"); DispatchKeyValue(prop, "StartDisabled", "false"); GetEntPropVector(entity, Prop_Data, "m_vecOrigin", VecOrigin); DispatchKeyValue(prop, "Solid", "0"); @@ -281,6 +280,7 @@ public void SpawnNuke(int entity) VecOrigin[2] += 54.0; TeleportEntity(prop, VecOrigin, VecAngles, NULL_VECTOR); DispatchSpawn(prop); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", 0.65); SetEntityCollisionGroup(prop, 1); AcceptEntityInput(prop, "DisableShadow"); AcceptEntityInput(prop, "DisableCollision"); @@ -357,7 +357,6 @@ void SpawnMaxAmmo(int entity, bool MenacinglyFlyToPlayer = false) { b_ToggleTransparency[prop] = false; DispatchKeyValue(prop, "model", AMMO_MODEL); - DispatchKeyValue(prop, "modelscale", "1.0"); GetEntPropVector(entity, Prop_Data, "m_vecOrigin", VecOrigin); DispatchKeyValue(prop, "StartDisabled", "false"); DispatchKeyValue(prop, "Solid", "0"); @@ -498,7 +497,6 @@ void SpawnHealth(int entity, bool MenacinglyFlyToPlayer = false) { b_ToggleTransparency[prop] = false; DispatchKeyValue(prop, "model", HEALTH_MODEL); - DispatchKeyValue(prop, "modelscale", "1.0"); GetEntPropVector(entity, Prop_Data, "m_vecOrigin", VecOrigin); DispatchKeyValue(prop, "StartDisabled", "false"); DispatchKeyValue(prop, "Solid", "0"); @@ -588,7 +586,6 @@ void SpawnMoney(int entity, bool MenacinglyFlyToPlayer = false) { b_ToggleTransparency[prop] = false; DispatchKeyValue(prop, "model", MONEY_MODEL); - DispatchKeyValue(prop, "modelscale", "1.0"); GetEntPropVector(entity, Prop_Data, "m_vecOrigin", VecOrigin); DispatchKeyValue(prop, "StartDisabled", "false"); DispatchKeyValue(prop, "Solid", "0"); @@ -727,7 +724,6 @@ public void SpawnGrigoriPowerup(int entity) { b_ToggleTransparency[prop] = false; DispatchKeyValue(prop, "model", GRIGORI_POWERUP_MODEL); - DispatchKeyValue(prop, "modelscale", "0.65"); DispatchKeyValue(prop, "StartDisabled", "false"); GetEntPropVector(entity, Prop_Data, "m_vecOrigin", VecOrigin); DispatchKeyValue(prop, "Solid", "0"); @@ -736,6 +732,7 @@ public void SpawnGrigoriPowerup(int entity) VecOrigin[2] += 54.0; TeleportEntity(prop, VecOrigin, VecAngles, NULL_VECTOR); DispatchSpawn(prop); + SetEntPropFloat(prop, Prop_Send, "m_flModelScale", 0.65); SetEntityCollisionGroup(prop, 1); AcceptEntityInput(prop, "DisableShadow"); AcceptEntityInput(prop, "DisableCollision"); diff --git a/addons/sourcemod/scripting/zombie_riot/zr_core.sp b/addons/sourcemod/scripting/zombie_riot/zr_core.sp index 145a21b1f8..4becb5ff04 100644 --- a/addons/sourcemod/scripting/zombie_riot/zr_core.sp +++ b/addons/sourcemod/scripting/zombie_riot/zr_core.sp @@ -302,7 +302,9 @@ enum WEAPON_IS_SHOTGUN = 1003, WEAPON_IS_HPR = 1004, WEAPON_IS_STICKYBOMB = 1005, - WEAPON_IS_AUTOSHOTGUN = 1006 + WEAPON_IS_AUTOSHOTGUN = 1006, + WEAPON_BOMB_AR = 164, + WEAPON_BRICK = 165 } enum @@ -342,6 +344,7 @@ int GrigoriMaxSells = 3; int Bob_Exists_Index = -1; int CurrentPlayers; ConVar zr_voteconfig; +ConVar zr_disable_barney_rename; ConVar zr_tagblacklist; ConVar zr_tagwhitelist; ConVar zr_tagwhitehard; @@ -400,15 +403,6 @@ ArrayList Loadouts[MAXPLAYERS]; float f_RingDelayGift[MAXENTITIES]; float Resistance_for_building_High[MAXENTITIES]; -//custom wave music. -MusicEnum MusicString1; -MusicEnum MusicString2; -MusicEnum MusicSetup1; -MusicEnum MusicLastmann; -MusicEnum MusicWin; -MusicEnum MusicLoss; -MusicEnum RaidMusicSpecial1; -MusicEnum BGMusicSpecial1; //custom wave music. float f_DelaySpawnsForVariousReasons; int CurrentRound[Rounds_MAX]; @@ -710,6 +704,9 @@ float fl_MatrixReflect[MAXENTITIES]; #include "custom/weapon_bombplant_smg.sp" #include "custom/weapon_guiding_missile.sp" + + + void ZR_PluginLoad() { Natives_PluginLoad(); @@ -1878,7 +1875,7 @@ public Action Timer_Dieing(Handle timer, int client) int entity, i; while(TF2U_GetWearable(client, entity, i)) { - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; SetEntityRenderMode(entity, RENDER_NORMAL); @@ -2205,7 +2202,7 @@ void CheckAlivePlayers(int killed=0, int Hurtviasdkhook = 0, bool TestLastman = int entity, i; while(TF2U_GetWearable(client, entity, i)) { - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; SetEntityRenderMode(entity, RENDER_NORMAL); @@ -2755,7 +2752,11 @@ void ZR_CheckValidityOfPostions_OfObjectsInternal(bool recheck) } } } -void ReviveAll(bool raidspawned = false, bool setmusicfalse = false, bool ForceFullHealth = false, bool Const2_DontRespawnBuildings = false) +void ReviveAll(bool raidspawned = false, + bool setmusicfalse = false, + bool ForceFullHealth = false, + bool Const2_DontRespawnBuildings = false, + bool IsSetupRevive = false) { //only set false here if(!setmusicfalse) @@ -2765,7 +2766,9 @@ void ReviveAll(bool raidspawned = false, bool setmusicfalse = false, bool ForceF CreateTimer(1.0, ZR_CheckValidityOfPostions_OfObjects, false, TIMER_FLAG_NO_MAPCHANGE); CreateTimer(5.0, ZR_CheckValidityOfPostions_OfObjects, false, TIMER_FLAG_NO_MAPCHANGE); //needed for map logic! - + + if(ZR_Get_Modifier() == PREFIX_ONESTAND && !IsSetupRevive) + return; for(int client=1; client<=MaxClients; client++) { CheckClientLateJoin(client, false); @@ -2791,7 +2794,7 @@ void ReviveAll(bool raidspawned = false, bool setmusicfalse = false, bool ForceF int entity, i; while(TF2U_GetWearable(client, entity, i)) { - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; SetEntityRenderMode(entity, RENDER_NORMAL); @@ -2845,7 +2848,7 @@ void ReviveAll(bool raidspawned = false, bool setmusicfalse = false, bool ForceF int entity, i; while(TF2U_GetWearable(client, entity, i)) { - if(entity == EntRefToEntIndex(Armor_Wearable[client]) || i_WeaponVMTExtraSetting[entity] != -1) + if(i_WeaponVMTExtraSetting[entity] != -1) continue; SetEntityRenderMode(entity, RENDER_NORMAL); @@ -2873,6 +2876,8 @@ void ReviveAll(bool raidspawned = false, bool setmusicfalse = false, bool ForceF } } + if(ZR_Get_Modifier() == PREFIX_ONESTAND) + Music_EndLastmann(); CheckAlivePlayers(); if(Dungeon_Mode() && !Const2_DontRespawnBuildings) diff --git a/addons/sourcemod/scripting/zombie_riot/zsclassic.sp b/addons/sourcemod/scripting/zombie_riot/zsclassic.sp index 445bbf5b5f..3464d1a8fd 100644 --- a/addons/sourcemod/scripting/zombie_riot/zsclassic.sp +++ b/addons/sourcemod/scripting/zombie_riot/zsclassic.sp @@ -17,12 +17,15 @@ void Classic_MapStart() CashLeft = 0; } -void Classic_Enable() +void Classic_Enable(bool enable) { - InClassicMode = true; + InClassicMode = enable; - PrecacheMvMIconCustom("classic_defend", false); - PrecacheMvMIconCustom("classic_reinforce", false); + if(enable) + { + PrecacheMvMIconCustom("classic_defend", false); + PrecacheMvMIconCustom("classic_reinforce", false); + } } void Classic_NewRoundStart(int cash) diff --git a/addons/sourcemod/translations/zombieriot.phrases.item.gift.desc.txt b/addons/sourcemod/translations/zombieriot.phrases.item.gift.desc.txt index ee8ccf74e8..f4ee975a74 100644 --- a/addons/sourcemod/translations/zombieriot.phrases.item.gift.desc.txt +++ b/addons/sourcemod/translations/zombieriot.phrases.item.gift.desc.txt @@ -395,7 +395,7 @@ { "en" "Infections cancers all around.\nWhen hit, activates deadringer and gives Extreamly high res in duration.\nWhen Above half health:\n-Has a ranged bullet attack\nWhen below half health:\n-Ranged rocket attack, deals more damage, is faster, gains resistances." "it" "Infezioni e tumori ovunque.\nQuando viene colpito, attiva il deadringer e conferisce una res estremamente elevata in termini di durata.\nQuando supera la metà della salute: ha un attacco a distanza con proiettile.\nQuando è al di sotto della metà della salute:\nha un attacco a distanza con razzo, infligge più danni, è più veloce e guadagna resistenze." - "ko" "감염성 암이 온몸에 퍼져 있습니다.\n-피격 시 데드링어 발동, 지속 시간 동안 매우 높은 저항을 얻음.\n-체력이 절반 이상일 때: 원거리 탄환 공격\n체력이 절반 이하일 때: 원거리 공격이 로켓으로 변경\n피해량, 속도, 피해 저항력을 추가로 얻음." + "ko" "감염이 암처럼 온몸에 퍼져 있습니다.\n-피격 시 데드링어 발동, 지속 시간 동안 매우 높은 저항을 얻음.\n-체력이 절반 이상일 때: 원거리 탄환 공격\n체력이 절반 이하일 때: 원거리 공격이 로켓으로 변경\n피해량, 속도, 피해 저항력을 추가로 얻음." } //XENO @@ -2459,7 +2459,7 @@ { "en" "Certain npc's are ''Masters'', these npc's can command lower level npc's to attak the same targets as them\nThey can also buff them in various ways\nMakes them rally to the master" "it" "Alcuni npc sono ''Maestri'', questi npc possono comandare agli npc di livello inferiore di attaccare gli stessi bersagli che hanno loro" - "en" "특정 NPC들은 ''마스터''로서, 자신보다 등급이 낮은 NPC들에게 명령을 내려 자신과 같은 대상을 공격하게끔 지휘합니다.\n또한 자기 휘하 인원들의 능력치를 증강시킬 수 있으며,\n마스터 근처로 집결하게 만들 수도 있습니다." + "ko" "특정 NPC들은 ''마스터''로서, 자신보다 등급이 낮은 NPC들에게 명령을 내려 자신과 같은 대상을 공격하게끔 지휘합니다.\n또한 자기 휘하 인원들의 능력치를 증강시킬 수 있으며,\n마스터 근처로 집결하게 만들 수도 있습니다." } "Chaos Intrusion" { @@ -2495,7 +2495,7 @@ { "en" "Experience ZR on how it feels to be a newbie.\n35% more enemies, spawn 33% faster, 15% more are alive at once.\nThey deal +25% dmg, +25% dmg to cades, +60% HP, +6% faster, attack 33% faster.\n1 down, enemies heal 50% more." "it" "Esperienza ZR su come ci si sente ad essere un novellino.\n35% più nemici, spawn 33% più veloce, 15% più sono vivi in una volta.\nFanno +25% dmg, +25% dmg ai cad, +60% HP, +6% più veloce, attacco 33% più veloce.\n1 down, i nemici guariscono 50% in più." - "ko" "뉴비 시절 좀비 라이엇의 느낌을 다시 체험해보세요.\n웨이브 적 수량 +35%, 생성 속도 +33%, 한번에 존재하는 적의 수 +15%\n적 피해량, 구조물 대상 피해량 +25%, 체력 +60%, 이동 속도 +6%, 공격 속도 +33%\n다운 횟수는 1번 뿐이며, 적들의 체력 회복량 +50%" + "ko" "뉴비 시절 ZR의 느낌을 다시 체험해보세요.\n웨이브 적 수량 +35%, 생성 속도 +33%, 한번에 존재하는 적의 수 +15%\n적 피해량, 구조물 대상 피해량 +25%, 체력 +60%, 이동 속도 +6%, 공격 속도 +33%\n다운 횟수는 1번 뿐이며, 적들의 체력 회복량 +50%" } "Turbulance" { @@ -2521,6 +2521,26 @@ "it" "Il primo gruppo di mercenari ha già fallito.\n 35 nemici in più, si riproducono 33% più velocemente, 15% in più sono vivi contemporaneamente. infliggono +15% dmg, +25% dmg ai cad, hanno 50% + HP, +4% più velocemente. i nemici guariscono 50% in più." "ko" "최초로 출격한 용병들은 실패했습니다.\n웨이브 적 수량 +35%, 생성 속도 +33%, 한번에 존재하는 적의 수 +15%\n적 피해량 +15%, 구조물 대상 피해량 +25%, 체력 +50%, 이동 속도 +4%\n적들의 체력 회복량 +50%" } + "Prefixes Galore" + { + "en" "Prefixes Galore" + "ko" "접두사 대혼란" + } + "Prefixes Galore Desc" + { + "en" "Prepare for aboslute hell!\nEnemies have a chance to obtain prefixes, if they do, they gain massive buffs aswell.\nBosses and raids gain prefixes guranteed but arent extra buffed\nRaids have infinite time.\nPrefixes can stack." + "ko" "완전한 지옥이로구나!\n적들이 확률적으로 접두사를 얻으며, 이 경우 큰 버프 역시 얻습니다.\n보스, 레이드는 반드시 접두사를 얻지만 추가 버프를 받지 않습니다.\n레이드 시간이 무제한이 됩니다.\n접두사는 중첩 가능합니다." + } + "One Stand" + { + "en" "One Stand" + "ko" "하나의 보루" + } + "One Stand Desc" + { + "en" "Its all or nothing!\nRaids and bosses are nerfed by 10%\nYou gain 1 more down\nYou do not get revived if its not a setup, and raids do not revive anymore." + "ko" "살아남거나 죽거나!\n레이드 및 보스의 스탯이 10% 감소합니다.\n다운 횟수가 1회 증가합니다.\n준비 기간이 아닐 경우 부활하지 못하며, 레이드 시작 시 부활하지 않습니다." + } "Paranormal Activity" { "en" "Paranormal Activity" @@ -3562,7 +3582,42 @@ { "en" " `Did you really thought you could get out this mess that easily?` \nColonel of Victoria's Army. He has mastered skill for explosives and command \nHe wants your death for the amends of Radiotower's destruction. Do we really have to fight him while we got same enemeis in common? \nHe will utilize all of the abilites that previous raidbosses used and often call in for support" } - + "Zapmarker Desc" + { + "en" "An elite melee unit of victoria \nThrows Zapper's axe to apply teslar debuff to its victim and rush in with melee that applies heavy bleed" + } + "Resource Collector Desc" + { + "en" "A robotic unit designed to collect nearby minerals \nFast and applied more damage to buildings" + } + "Victoria Gasleader Desc" + { + "en" "Victorian Chemical Platoon leader. \n applies armor corrosion elemental damage near while his armor is up \nPulls out a sword that applies more armor corrosion damage on 3rd hit when its target gets close \nBecomes stronger as near allies die" + } + "Demolitionist Desc" + { + "en" "Heavy melee unit of Victorian Chemical Platoon \nSwings a massive hammer to create and explosion that deals MASSIVE damage to buildings" + } + "Victorian Protector Desc" + { + "en" "Carrier unit holding a portable shield \n spawns with an armor and when it gets closer to its target, deployys an energy shield \nIt's shield carrier will be destroyed if its armor runs out" + } + "Airraider Desc" + { + "en" "A surprise assault unit of Victorian Chemical Platoon. \nParachutes in when it spawns and fire its rocket while falling down. \n continues with shotgun when on the ground" + } + "Victorian Headhunter Desc" + { + "en" "An elite sniper of Victorian Chemical Platoon. \n Appears quietly and deals armor corrsion damage \n Deals more damage and elemental damage to enemies with support weapon out" + } + "Chemical Specialist Desc" + { + "en" "A Chemical expert of Victorian Chemical Platoon \n Always head all of its elemental damage taken \n fire bullets coated with armor corrosion liquid" + } + "Giant Armored Medibot Desc" + { + "en" "A Giant support unit of Victorian Chemical Platoon designed only for defense \n its patient receives massive buff and never dies unless oneshot \nIt moves very slowly" + } "Avangard's Processing Core-B" { "en" "Avangard's Processing Core-B" diff --git a/addons/sourcemod/translations/zombieriot.phrases.npctalk.txt b/addons/sourcemod/translations/zombieriot.phrases.npctalk.txt index 512fba5fc5..062d4dc7b2 100644 --- a/addons/sourcemod/translations/zombieriot.phrases.npctalk.txt +++ b/addons/sourcemod/translations/zombieriot.phrases.npctalk.txt @@ -308,6 +308,18 @@ "en" "You can count on us!" "ko" "저희만 믿으십시오!" } + "Atomizer_Talk_Support-5" + { + "en" "At least we get to use these more." + } + "Atomizer_Talk_Support-6" + { + "en" "Quit drinking the beers, Hurcarls!" + } + "Atomizer_Talk_Support-7" + { + "en" "Ay back for another round." + } "Atomizer_Talk_Lastman-1" { "en" "Ready to die?" @@ -434,6 +446,22 @@ "en" "They could dodge 2, but how about 3 now!" "ko" "두개는 피했어도, 세개는 피할수 있을지 한 번 볼까!" } + "Huscarls_Talk_Support-11" + { + "en" "Yea this is pretty fun.” + } + "Huscarls_Talk_Support-12" + { + "en" "*crack* What was that Harrison?" + } + "Huscarls_Talk_Support-13" + { + "en" "Oh you got beer in here? Nice." + } + "Huscarls_Talk_Support-14" + { + "en" "Back for another round of firing." + } "Huscarls_Talk_Lastman-1" { "en" "This is your grave." @@ -575,6 +603,22 @@ "en" "Victoria Cannon is Ready, Fire Support is coming in" "ko" "빅토리아 캐논 준비 완료, 화력 지원 전개." } + "Harrison_Talk_Support-12" + { + "en" "I need more space in here." + } + "Harrison_Talk_Support-13" + { + "en" "*ugh* Can we kill them quicker? I need a beer." + } + "Harrison_Talk_Support-14" + { + "en" "*sigh* alright." + } + "Harrison_Talk_Support-15" + { + "en" "Huh? Oh… leave it until we are done here." + } "Harrison_Talk_Intro" { "en" "Spotted the Intruders. I guess they leave me no chance but to do it myself" @@ -776,6 +820,14 @@ "en" "Alright boys, Fire all we got! We cannot waste any more time on here!" "ko" "좋아, 친구들. 우리가 가진 모든걸 쏟아부어라! 우리는 여기서 더이상 낭비할 시간이 없다!" } + "Castellan_Talk_Ability2-4” + { + "en" "Keep them coming boys! They are wasting too much of our time!" + } + "Castellan_Talk_Ability2-5” + { + "en" "Knock it off you three and FIRE!" + } "Castellan_Talk_Ability3-1" { "en" "Rocket-B on action" diff --git a/addons/sourcemod/translations/zombieriot.phrases.rogue.paradox.txt b/addons/sourcemod/translations/zombieriot.phrases.rogue.paradox.txt index 94528ab12e..a96874eb22 100644 --- a/addons/sourcemod/translations/zombieriot.phrases.rogue.paradox.txt +++ b/addons/sourcemod/translations/zombieriot.phrases.rogue.paradox.txt @@ -408,9 +408,9 @@ } "Gold-Plated Dice Desc" { - "en" "The gold-plated die has one side representing life. As for the other nineteen sides...\n{green}Enemies gain -15% max health" - "it" "Il dado placcato d'oro ha un lato che rappresenta la vita. Per quanto riguarda gli altri diciannove lati... \n{green}I nemici guadagnano -15% di salute massima" - "ko" "금박 장식이 되어 있는 주사위로, 한 면에만 생존을 상징하는 표식이 새겨져있고, 나머지 19개 면에는...\n{green}모든 적들의 최대 체력 -15%." + "en" "The gold-plated die has one side representing life. As for the other nineteen sides...\n{green}Enemies gain -12% max health" + "it" "Il dado placcato d'oro ha un lato che rappresenta la vita. Per quanto riguarda gli altri diciannove lati... \n{green}I nemici guadagnano -12% di salute massima" + "ko" "금박 장식이 되어 있는 주사위로, 한 면에만 생존을 상징하는 표식이 새겨져있고, 나머지 19개 면에는...\n{green}모든 적들의 최대 체력 -12%." } "The Profound Silence" { @@ -420,9 +420,9 @@ } "The Profound Silence Desc" { - "en" "A painting that depicts the greatest disaster in Iberian history.\n{green}Enemies gain -20% max health" - "it" "Un dipinto che raffigura il più grande disastro della storia iberica.\n{green}I nemici guadagnano -20% di salute massima" - "ko" "이베리아 역사상 가장 컸던 재앙을 그린 작품.\n{green}모든 적들의 최대 체력 -20%." + "en" "A painting that depicts the greatest disaster in Iberian history.\n{green}Enemies gain -15% max health" + "it" "Un dipinto che raffigura il più grande disastro della storia iberica.\n{green}I nemici guadagnano -15% di salute massima" + "ko" "이베리아 역사상 가장 컸던 재앙을 그린 작품.\n{green}모든 적들의 최대 체력 -15%." } "Emperor's Favor" { @@ -722,7 +722,7 @@ { "en" "{green}Limited lifetime allies (non citizen and non barracks) gain +30% max health and +30% damage, the owner gains +60% damage for 10 seconds when summoned." "it" "{green}Gli alleati a vita limitata (non cittadini e non caserma) guadagnano +30% salute massima e +30% danni, il proprietario guadagna +60% danni per 10 secondi quando viene evocato." - "ko" "{green}'배럭 유닛과 반시민을 제외한' 일정 시간 이후 소멸하는 소환물의 최대 체력과 공격 피해량 +30% 증가 및 해당 유닛을 소환한 주인은 10초 동안 공격 피해량 +60% 증가." + "ko" "{green}'배럭 유닛, 반시민을 제외한' 일정 시간 후 소멸하는 소환물의 최대 체력, 공격 피해량 +30% 증가. 해당 유닛의 소환자는 10초 동안 공격 피해량 +60%" } "Minion Energizer" { diff --git a/addons/sourcemod/translations/zombieriot.phrases.rogue.rift.txt b/addons/sourcemod/translations/zombieriot.phrases.rogue.rift.txt index 0ff7610788..9af8c7bc48 100644 --- a/addons/sourcemod/translations/zombieriot.phrases.rogue.rift.txt +++ b/addons/sourcemod/translations/zombieriot.phrases.rogue.rift.txt @@ -431,7 +431,7 @@ { "en" "{red}Enemy stats per chapter +4%, start with Fractured voidstone, rift events can occur more often, You have no hope." "it" "{red}Statistiche dei nemici per capitolo +4%, inizio con la pietra vuota fratturata, gli eventi della spaccatura possono verificarsi più spesso, Non hai speranza." - "ko" "{red}매 챕터마다, 적의 능력치 +4% 증가. '혼란' 공허석을 보유하고 시작. 균열 이벤트가 더 자주 발생함. 희망이 보이지 않습니다." + "ko" "{red}매 챕터마다, 적의 능력치 +4% 증가. '혼란' 공허석을 보유하고 시작. 균열 이벤트가 더 자주 발생. 희망이 보이지 않습니다." } "Rift Level 2" { @@ -503,7 +503,7 @@ { "en" "Be a hitman of your dreams.\n{green}''Tactician'' weapons gain infinite accuracy, extra cash & speedbonus on a headshot {yellow}(up to a limit for cash gain up to a limit for cash gain) If the weapon cant headshot, same effects apply but weaker." "it" "{green}Se l'arma non può colpire alla testa, si applicano gli stessi effetti, ma più deboli." - "ko" "나 자신이 히트맨이 되는거다.\n{green}''전술가'' 계열 무기의 정확도가 무한대가 되며, 헤드샷시 추가 자금 및 속도 증진 획득. {yellow}(자금 획득 상한 존재) 헤드샷 불가 무기라면, 대신 약화된 효과가 적용." + "ko" "나 자신이 히트맨이 되는거다.\n{green}''전술가'' 계열 무기의 정확도가 무한대가 되며, 헤드샷시 추가 자금, 속도 증진 획득. {yellow}(자금 획득 상한 O) 헤드샷 불가 무기라면 약화된 효과 적용." } "Hand of Spark" { @@ -1164,7 +1164,7 @@ { "en" "{green}Umbral Affinity increased by 3 when reaching a new chapter {red}but Umbral Affinity reduced by 15 while held\n{purple}Chance obtain a rare artifact when consumed" "it" "{green}l'Affinità Umbrale aumenta di 3 quando si raggiunge un nuovo capitolo {red}ma l'Affinità Umbrale si riduce di 15 mentre si tiene \n{purple}Possibilità di ottenere un artefatto raro quando si consuma" - "ko" "{green}새 챕터 진입 시 움브랄 친화력이 3 증가. {red}대신 이것을 보유하는 동안, 엄브랄 친화력 15 감소\n{purple}관문에 흡수시키면, 확률적으로 희귀 등급 소장품 획득" + "ko" "{green}새 챕터 진입 시 움브랄 친화력이 3 증가. {red}대신 이것을 보유하는 동안, 움브랄 친화력 15 감소\n{purple}관문에 흡수시키면, 확률적으로 희귀 등급 소장품 획득" } "Sprouting Stem" { @@ -1726,7 +1726,7 @@ { "en" "It's poisoned" "it" "È avvelenato" - "ko" "독일지도 몰라" + "ko" "독이 섞여 있을지도 몰라" } "Poison Water Desc 1" { @@ -1746,6 +1746,11 @@ "it" "{green}Ottieni un artefatto, 2000 contanti {red} ma la possibilità di ottenere un artefatto maledetto" "ko" "{green}소장품과 자금 2000 획득. {red}확률적으로 저주 소장품을 획득하게 됨" } + "Poison Water Lore 1" + { + "en" "Dont take chances with this lake." + "ko" "위험을 감수할 수는 없다." + } "Poison Water Lore 2a" { "en" "Looks like it was safe." @@ -2048,7 +2053,7 @@ { "en" "You gotten this far, from infections, outbreaks, riots, and chaos. Take a moment to remember the past." "it" "Siete arrivati fin qui, tra infezioni, epidemie, rivolte e caos. Prendetevi un momento per ricordare il passato." - "ko" "당신은 감염, 재앙, 폭동, 혼돈을 넘어 여기까지 도달했다. 과거를 잠시 돌아본다..." + "ko" "당신은 감염, 재앙, 폭동 그리고 혼돈을 넘어 여기까지 도달했다. 과거를 잠시 돌아본다..." } "Finale Encounter Option 1" { @@ -2133,7 +2138,7 @@ { "en" "☠ The Umbral Commander" "it" "☠ il Comandante Umbro" - "ko" "☠ 움브랄의 사령관" + "ko" "☠ 움브랄의 지휘자" } "Sabotaging Electric's" { diff --git a/addons/sourcemod/translations/zombieriot.phrases.rogue.txt b/addons/sourcemod/translations/zombieriot.phrases.rogue.txt index 2d1ce42bab..1fc31735b3 100644 --- a/addons/sourcemod/translations/zombieriot.phrases.rogue.txt +++ b/addons/sourcemod/translations/zombieriot.phrases.rogue.txt @@ -3195,7 +3195,7 @@ { "en" "{green}Gain Cash and Umbral Affinity." "it" "{green}Guadagni denaro e Affinità Umbrale." - "ko" "{green}자금을 얻고 엄브랄 친화력이 증가합니다." + "ko" "{green}자금을 얻고 움브랄 친화력이 증가합니다." } "Broken Crest Accept Conlusion" { diff --git a/addons/sourcemod/translations/zombieriot.phrases.status_effects.txt b/addons/sourcemod/translations/zombieriot.phrases.status_effects.txt index 5af59ea6b0..e9490f0c89 100644 --- a/addons/sourcemod/translations/zombieriot.phrases.status_effects.txt +++ b/addons/sourcemod/translations/zombieriot.phrases.status_effects.txt @@ -151,7 +151,7 @@ { "en" "Increases Damage Taken by 35%\nSlows NPC'S by 35%\nLowers Damage Delt by 25%" "it" "Aumenta i danni subiti del 35%\nRallenta gli NPC del 35%\nRiduce i danni subiti del 25%" - "ko" "받는 피해 35% 증가\nNPC의 속도 35% 감소\n주는 피해 25% 감소" + "ko" "받는 피해가 35% 증가합니다.\nNPC의 속도가 35% 감소합니다.\n공격 피해량이 25% 감소합니다." } "Golden Curse" { @@ -175,7 +175,7 @@ { "en" "Decreases damage dealt by 25%, which lowers over time to 0%" "it" "Diminuisce i danni inflitti di 25%, che si riducono nel tempo a 0%" - "ko" "적에게 입히는 공격 피해량이 10% 감소하고, 시간이 지날수록 점점 감소하여 최종적으로 주는 피해량 감소량이 0%까지 떨어집니다." + "ko" "적에게 입히는 공격 피해량이 10% 감소하고, 시간이 지날수록 점점 감소하여 최종적으로 공격 피해량 감소량이 0%까지 떨어집니다." } "Iberia's Anti Raid" { @@ -783,6 +783,16 @@ "en" "Ammo Visualization" "ko" "탄약 시각화" } + "Buffweiser" + { + "en" "Buffweiser" + "ko" "버프와이저" + } + "Buffweiser Desc" + { + "en" "Boosts damage dealt by 100%\nReduces damage taken by 50%" + "ko" "공격 피해량이 100% 증가합니다.\n받는 피해량이 50% 감소합니다." + } "False Therapy" { "en" "False Therapy" @@ -2275,6 +2285,16 @@ "it" "Potenziamento di Domai Nascosto" "ko" "강화 영역 관리용" } + "Powered Brick" + { + "en" "Powered Brick" + "ko" "강화된 벽돌" + } + "Powered Brick Desc" + { + "en" "Your brick will guranteed headshot.\nGain 25% attackspeed." + "ko" "당신의 벽돌이 반드시 헤드샷으로 적중합니다.\n공격 속도가 +25% 증가합니다." + } "Empowering Domain" { "en" "Empowering Domain" @@ -2410,7 +2430,7 @@ { "en" "Increases damage taken by 20%.\nDecreases attack speed by 20%.\nDecreases damage by 20%." "it" "Aumenta i danni subiti di 20%.\nDiminuisce la velocità d'attacco di 20%.\nDiminuisce i danni di 20%." - "ko" "받는 피해가 20% 증가합니다.\n공격 속도가 20% 감소합니다.\n주는 피해가 20% 감소합니다." + "ko" "받는 피해가 20% 증가합니다.\n공격 속도가 20% 감소합니다.\n공격 피해량이 20% 감소합니다." } "Quantum Entanglement" { @@ -2621,8 +2641,8 @@ } "The Big Desc" { - "en" "Enlarges by 25%\nIncreases Resistance by 75%" - "ko" "크기가 75% 증가합니다\n저항력이 75% 증가합니다" + "en" "Enlarges by 25%\nDoubles Health" + "ko" "크기가 75% 증가합니다\n최대 체력이 2배로 증가합니다" } "Big" { @@ -2636,8 +2656,8 @@ } "The Strong Desc" { - "en" "Increases Damage by 400%" - "ko" "공격 피해량이 400% 증가합니다" + "en" "Increases Damage by 250%" + "ko" "공격 피해량이 250% 증가합니다" } "Strong" { @@ -2791,18 +2811,18 @@ } "The First Desc" { - "en" "Npc Gains 30% Resistance, 300% Damage, 2x Thinkspeed" - "ko" "NPC의 저항력이 30%, 공격 피해량이 300%, 생각하는 속도가 2배 증가합니다." + "en" "Npc Gains 50% Resistance, 100% Damage, 2x Thinkspeed" + "ko" "NPC의 저항력이 50%, 공격 피해량이 100%, 생각하는 속도가 2배 증가합니다." } - "Xeno Infection" + "Xeno Infection Buff" { "en" "Xeno Infection" "ko" "제노에 감염된" } - "Xeno Infection Desc" + "Xeno Infection Buff Desc" { - "en" "Npc Gains 25% Resistance, 30% Damage, but thinks 15% slower, and regens over time upto 1.35x max health, if above 25% max health, gain immensive buffs untill below\ninfects any enemy with xeno aswell." - "ko" "NPC 저항력 25%, 피해량 30% 증가. 생각 속도 15% 감소. 최대 체력의 1.35배까지 재생. 체력이 25% 이상이라면 그 이하가 될 때까지 강력한 버프 획득\n다른 적에게도 제노를 감염시킴" + "en" "Npc Gains 35% Resistance, 40% Damage, but thinks 10% slower, and regens over time upto 1.35x max health, if above 25% max health, gain immensive buffs untill below\ninfects any enemy with xeno aswell." + "ko" "NPC 저항력 35%, 피해량 40% 증가. 생각 속도 10% 감소. 최대 체력의 1.35배까지 재생. 체력이 25% 이상이라면 그 이하가 될 때까지 강력한 버프 획득\n다른 적에게도 제노를 감염시킴" } "Xeno" { @@ -2816,7 +2836,445 @@ } "Perfected Instinct Desc" { - "en" "Npc Gains 30% Resistance, 300% Damage, 1.5x Thinkspeed, Gains a high chance to dodge attacks, the lower the hp, the higher the chance. On dodge, gain an immensive short speed bonus" - "ko" "NPC 저항력 30%, 피해량 300% 증가. 생각 속도 1.5배. 높은 확률로 공격을 회피, 체력이 감소할 수록 확률 증가. 회피 시 짧은 시간 동안 이동 속도 대폭 증가" + "en" "Npc Gains 40% Resistance, 175% Damage, 1.5x Thinkspeed, Gains a high chance to dodge attacks, the lower the hp, the higher the chance. On dodge, gain an immensive short speed bonus (no speedbonus if its a raid)" + "ko" "NPC 저항력 40%, 피해량 175% 증가. 생각 속도 1.5배. 높은 확률로 공격을 회피, 체력이 감소할 수록 확률 증가. 회피 시 짧은 시간 동안 이동 속도 대폭 증가(레이드 보스는 X)" + } + "Motivating Prefix" + { + "en" "Motivating Prefix" + "ko" "동기부여가 접두사" + } + "Motivating" + { + "en" "Motivating" + "ko" "동기부여가" + } + "Motivating Prefix Desc" + { + "en" "Buffs allies with Warcry around itself." + "ko" "주변의 아군들에게 '전투의 함성' 버프를 부여합니다." + } + "Invisible Prefix" + { + "en" "Invisible Prefix" + "ko" "투명한 접두사" + } + "Invisible" + { + "en" "Invisible" + "ko" "투명한" + } + "Invisible Prefix Desc" + { + "en" "Enemies get invisible at far ranges and get stronger." + "ko" "멀리 떨어져 있을 시 투명해지며, 더 강해집니다." + } + + "Asexual Prefix" + { + "en" "Asexual Prefix" + "ko" "무성애자 접두사" + } + "Asexual" + { + "en" "Asexual" + "ko" "무성애자" + } + "Asexual Prefix Desc" + { + "en" "On Death, Splits up into 2 that guranteed get modifiers" + "ko" "사망 시, 확정적으로 접두사를 얻는 적 2명으로 분열됩니다." + } + "Legendary Prefix" + { + "en" "Legendary Prefix" + "ko" "전설적인 접두사" + } + "Legendary" + { + "en" "Legendary" + "ko" "전설적인" + } + "Legendary Prefix Desc" + { + "en" "Gets stronger overtime, at 30 seconds gains max power!" + "ko" "시간이 지날 수록 강해지며, 30초 후 최대까지 강화됩니다." + } + "Glug Infested Prefix" + { + "en" "Glug Infested Prefix" + "ko" "글러그에 감염된 접두사" + } + "Glug Infested" + { + "en" "Glug Infested" + "ko" "글러그에 감염된" + } + "Glug Infested Desc" + { + "en" "When hurt, everyso often, spawns a glug on their side" + "ko" "피격 시, 높은 확률로 자신의 위치에 글러그를 스폰시킵니다." + } + "Armoring Prefix" + { + "en" "Armoring Prefix" + "ko" "장갑화 접두사" + } + "Armoring" + { + "en" "Armoring" + "ko" "장갑화" + } + "Armoring Prefix Desc" + { + "en" "Regenerate armor 20% of max health every 3 seconds" + "ko" "매 3초마다 최대 체력의 20% 만큼 아머를 재생합니다." + } + "Explosive Prefix" + { + "en" "Explosive Prefix" + "ko" "폭발성 접두사" + } + "Explosive" + { + "en" "Explosive" + "ko" "폭발성" + } + "Explosive Prefix Desc" + { + "en" "When dead, explodes into a nuke, damaging everyone" + "ko" "사망 시, 핵폭탄처럼 폭발하여 모든 것들에 피해를 가합니다." + } + "Stalker Prefix" + { + "en" "Stalker Prefix" + "ko" "스토커 접두사" + } + "Stalker" + { + "en" "Stalker" + "ko" "스토커" + } + "Stalker Prefix Desc" + { + "en" "Bypasses waves and gains insane buffs but much slower walkspeed" + "ko" "웨이브를 무시하며 막대한 버프를 얻지만, 이동 속도가 크게 느려집니다." + } + "Disco Prefix" + { + "en" "Disco Prefix" + "ko" "디스코 접두사" + } + "Disco" + { + "en" "Disco" + "ko" "디스코" + } + "Disco Prefix Desc" + { + "en" "Flickers lights, party!!!" + "ko" "불빛이 깜빡거립니다. 파티 타임!!!" + } + "Toxic Prefix" + { + "en" "Toxic Prefix" + "ko" "유독성 접두사" + } + "Toxic" + { + "en" "Toxic" + "ko" "유독성" + } + "Toxic Prefix Desc" + { + "en" "Deals damage to enemies around itself" + "ko" "주위의 적들에게 지속적으로 피해를 가합니다." + } + "Boing Prefix" + { + "en" "Boing Prefix" + "ko" "통통 튀는 접두사" + } + "Boing" + { + "en" "Boing" + "ko" "통통 튀는" + } + "Boing Prefix Desc" + { + "en" "Bounces around like a trampoline" + "ko" "트램펄린을 타듯 마구 뛰어다닙니다." + } + "Knockback Prefix" + { + "en" "Knockback Prefix" + "ko" "넉백 접두사" + } + "Knockback" + { + "en" "Knockback" + "ko" "넉백" + } + "Knockback Prefix Desc" + { + "en" "Enemies on dealin damage recieve knockback" + "ko" "피해를 가할 시 넉백 역시 가합니다." + } + "Loud Prefix" + { + "en" "Loud Prefix" + "ko" "시끄러운 접두사" + } + "Loud" + { + "en" "Loud" + "ko" "시끄러운" + } + "Loud Prefix Desc" + { + "en" "Makes all sounds you create 3x as loud" + "ko" "모든 소리가 3배 더 시끄러워집니다." + } + "Ragebaiter Prefix" + { + "en" "Ragebaiter Prefix" + "ko" "분노 조장꾼 접두사" + } + "Ragebaiter" + { + "en" "Ragebaiter" + "ko" "분노 조장꾼" + } + "Ragebaiter Prefix Desc" + { + "en" "Makes you forcefully type nasty stuff in chat" + "ko" "채팅에 썩 좋지 않은 것들을 강제로 쓰게 만듭니다." + } + "Rage Prefix Text 1" + { + "en" "I WILL KILL YOU" + "ko" "죽여버릴거야!!!" + } + "Rage Prefix Text 2" + { + "en" "ok." + "ko" "ㅇㅇ." + } + "Rage Prefix Text 3" + { + "en" "Youre welcome" + "ko" "ㄱㅅ" + } + "Rage Prefix Text 4" + { + "en" "My favorite toast is your BLOOD" + "ko" "내가 가장 좋아하는 술은 네놈 '''피'''야" + } + "Rage Prefix Text 5" + { + "en" "FUCKING ASSHOLE" + "ko" "망할 새끼!!!" + } + "Rage Prefix Text 6" + { + "en" "I HATE EVERYTHING" + "ko" "전부 다 싫어!!!!!!" + } + "Rage Prefix Text 7" + { + "en" "RAAAAAAAAAAAAAAAAAAAAHHHHHH!!!!!!!!!!" + "ko" "으아아아아아아아아아아아아아아!!!!!!!!!!" + } + "Rage Prefix Text 8" + { + "en" "RFHSGDGTWF ZJHEHMTZMBHJTEMNVUETH" + "ko" "그ㅂㅅ붚ㄴ럊ㄹㅇㅈ랴쟁ㅈㄹㅇㅕㅠㅁ쨔ㅠㅃㅎㅗㅂ3ㅡ4ㅗ좀ㅇㄹ허ㅐ3ㅣㄱ" + } + "Rage Prefix Text 9" + { + "en" "Owned BITCH" + "ko" "내가 이겼다 X년아" + } + "Rage Prefix Text 10" + { + "en" "Let me touch you boy" + "ko" "흐흐 등짝 좀 보자" + } + "Rage Prefix Text 11" + { + "en" "My hand + your head = Match made in heaven" + "ko" "내 손 + 니 머리 = 천생연분" + } + "Rage Prefix Text 12" + { + "en" "Guess what? Chicken butt" + "ko" "그거 알어? 닭 응딩이" + } + "Rage Prefix Text 13" + { + "en" "This is getting pretty serious." + "ko" "이거 너무 진지해지는데" + } + "Rage Prefix Text 14" + { + "en" "These hands are rated E for everyone" + "ko" "이 손들은 전체 이용가라지" + } + "Rage Prefix Text 15" + { + "en" "I just took a shit" + "ko" "방금 큰 걸 보고 왔어" + } + "Rage Prefix Text 16" + { + "en" "I found out i have work tomorrow, day ruined" + "ko" "내일이 월요일이라고? 시봉방거" + } + "Rage Prefix Text 17" + { + "en" "I can't win with these kings gg ." + "ko" "하드가 죽으면? 다이 하드." + //This joke only works in english, for your own languge, make some other national joke + } + "Rage Prefix Text 18" + { + "en" "Just browsed 4chan, it was very good, my head enlightened." + "ko" "방금 4챈을 좀 보고 왔는데, 개쩔더라고, 깨달음을 얻은 기분이야." + } + "Rage Prefix Text 19" + { + "en" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + "ko" "ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ" + } + "Rage Prefix Text 20" + { + "en" ":trolley:" + "ko" ":trolley:" + } + "Rage Prefix Text 21" + { + "en" "bruh" + "ko" "헐" + } + "Rage Prefix Text 22" + { + "en" "i hope no one looks at my plans while im sleeping" + "ko" "내가 자고 있는 사이 누가 내 계획을 보지 않았음 좋겠네" + } + "Rage Prefix Text 23" + { + "en" "HOO HAA" + "ko" "후 하" + } + "Rage Prefix Text 24" + { + "en" "Feeling like snorting cocain rn ngl fr fr" + "ko" "농담 안 하고 마약 빨고 있는 기분이구만" + } + "Rage Prefix Text 25" + { + "en" "I played minecraft" + "ko" "난 마크를 해본 적이 있어" + } + "Rage Prefix Text 26" + { + "en" "I am like, super evil, dude, just kidding go kill yourself." + "ko" "나는 뭐랄까, 아주 사악한 사람이지... 장난이야 나가 죽어" + } + "Rage Prefix Text 27" + { + "en" "I hope youre lactose intollerant cus im about to milk someone." + "ko" "니가 유당불내증이 있음 좋겠네, 곧 누구한테서 우유를 짤거거든" + } + "Rage Prefix Text 28" + { + "en" "Old times interitus is my bitch" + "ko" "올탐 인테리투스는 내 ㅆ년이야" + } + "Rage Prefix Text 29" + { + "en" "☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺" + "ko" "☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺☻☺" + } + "Rage Prefix Text 30" + { + "en" "♅ is looking mighty today. Let me grab that." + "ko" "♅가 오늘 개쩔게 보이는데, 좀 가져올게" + } + "Rage Prefix Text 31" + { + "en" "If you think liking a guy is gay, youre wrong, imagine liking a woman and putting up with their bullshit. now thats gay." + "ko" "만약에 남자를 좋아하는게 게이라고 생각하면 틀렸어, 여자를 좋아하는데 걔네 머시깽이하고 같이 잔다고 생각해봐. 그게 게이지" + } + "Rage Prefix Text 32" + { + "en" "Niko sucks" + "ko" "니코 완전 별로임" + //Words from translator. I'm going to consume this ragebaiter prefix guy's soul how dare you say shet about da cat + } + "Rage Prefix Text 33" + { + "en" "Zombie riot is full of SHIT!!" + "ko" "좀라 완전 개쓰레기여!!" + } + "Rage Prefix Text 34" + { + "en" "Shoutout to my homies, they up in this bitch" + "ko" "내 짱친들에게 샤라웃하겠음, 걔네 이 녀석 좋아하는 듯" + } + "Rage Prefix Text 35" + { + "en" "wat u want bitch" + "ko" "대체 뭘 원하는겨 ㅆ년아" + } + "Rage Prefix Text 36" + { + "en" "You ever had gay thoughts? Act on them." + "ko" "게이같은 생각 해본 적 있어? 한번 해보던가." + } + "Semi Healthy Prefix" + { + "en" "Semi Healthy Prefix" + "ko" "약간 건강한 접두사" + } + "Semi Healthy" + { + "en" "Semi Healthy" + "ko" "약간 건강한" + } + "Semi Healthy Prefix Desc" + { + "en" "Increases Max health by 5x, does not immedietly heal" + "ko" "최대 체력이 5배로 증가하며, 즉시 치유를 받지 않습니다." + } + "Fat Prefix" + { + "en" "Fat Prefix" + "ko" "뚱뚱한 접두사" + } + "Fat" + { + "en" "Fat" + "ko" "뚱뚱한" + } + "Fat Prefix Desc" + { + "en" "Increases health by 2x, increases size by 1.35x, slows down npcs by 1.25x" + "ko" "최대 체력이 2배로 증가합니다. 크기가 1.35배로 증가합니다. NPC의 이동 속도가 1.25배 느려집니다." + } + "Modifier+ Prefix" + { + "en" "Modifier+ Prefix" + "ko" "모디파이어+ 접두사" + } + "Modifier+" + { + "en" "Modifier+" + "ko" "모디파이어+" + } + "Modifier+ Prefix Desc" + { + "en" "Gives 2 modifier chances to get additional chances" + "ko" "접두사 부여 확률이 추가로 2번 적용됩니다." } } diff --git a/addons/sourcemod/translations/zombieriot.phrases.txt b/addons/sourcemod/translations/zombieriot.phrases.txt index 0338b02384..de7785fe83 100644 --- a/addons/sourcemod/translations/zombieriot.phrases.txt +++ b/addons/sourcemod/translations/zombieriot.phrases.txt @@ -52,7 +52,7 @@ "nl" "Uw level is omhoog gegaan {1} \nJij hebt gekregen:" "chi" "恭喜你升级了!当前等级为 {1} 级\n已获得:" "it" "Sei salito al livello {1}\nHai sbloccato:" - "ko" "레벨업! 레벨이 {1} 가 되었습니다.\n해금한 것:" + "ko" "레벨업! 레벨이 {1} 이(가) 되었습니다.\n해금한 것:" } "None" { @@ -1097,6 +1097,11 @@ "it" "Questa abilità ha ancora un cooldown di {1} secondi!" "ko" "이 능력은 {1} 초 후에 사용할 수 있습니다!" } + "Backwards Setting" + { + "en" "Reminder: Walking backwards reduces your speed by 30%!" + "ko" "주의: 뒤로 이동할 때는 이동 속도가 30% 감소합니다!" + } "Not Enough Ammo" { "#format" "{1:d}" @@ -2537,7 +2542,7 @@ "nl" "De vijand heeft hun uitrusting naar level {1} gebracht!!!" "chi" "僵尸的装备已升级!!!{1}" "it" "Il nemico ha ricercato il proprio equipaggiamento a livello {1}!!!" - "ko" "적의 연구가 완료되어 적들의 장비 레벨이 {1} 로 증가했습니다!!!" + "ko" "적의 연구가 완료되어 적들의 장비 레벨이 {1} (으)로 증가했습니다!!!" } "Victory Menu 2" { @@ -4478,12 +4483,10 @@ "it" "Questi ''Overclock'' modificheranno pesantemente la vostra arma, applicando buffs e nerf" "ko" "이 ''과부하''는 무기의 효과를 크게 변경하여, 무기에 장점과 단점을 동시에 부여합니다" } - "Taunt Speed increase" + "Display Backwards Walk Notif" { - "en" "Taunt Speed increase" - "fr" "Vitesse des Railleries Augmuntée" - "it" "Aumento della velocità di provocazione" - "ko" "도발 속도 증가" + "en" "Display Backwards Walk Notif" + "ko" "뒤로 이동시 알림 설정" } "Interact With Reload" { @@ -5217,8 +5220,8 @@ } "Iberia Expi Desc" { - "en" "Iberia and expidonsa, but mainly Iberia, Come back to us for more training. But Nemal and Silvester won't be here this time. They're probably on vacation with Sensal." - "ko" "이베리아와 엑스피돈사, 그 중에서도 이베리아가 돌아와 더 많은 훈련을 제공하려고 합니다. 하지만 이번엔 네말과 실베스터가 없군요. 아마 센살과 휴가 중일 겁니다." + "en" "After the main mercs are done with their training, Iberia comes to us, the secondary mercs, for some more training. Nemal and Silvester won't be here this time since they're on vacation with Sensal." + "ko" "주요 용병들이 훈련을 마친 후, 이베리아가 더 많은 훈련을 위해 보조 용병들을 방문합니다. 이번엔 네말과 실베스터가 센살과 휴가 중이기에 없을 겁니다." } "Iberia & Nemal" { @@ -5231,7 +5234,7 @@ } "Iberia Nemal Desc" { - "en" "(10) Iberia and expidonsa offer training to help against the true final battle against the void... Although iberians seem to take it extremly seriously." + "en" "(10) Iberia and Expidonsa offer training to help against the true final battle against the void... Although iberians seem to take it extremly seriously." "fr" "Iberia et Expidonsa vous offrent un entraînement qui vous aiderait pour le combat final contre le Void... Il semblerait que les Iberians prennent ceci extrêmement sérieusement, pourtant." "it" "(10) Iberia e expidonsa offrono addestramento per aiutare contro la vera battaglia finale contro il vuoto... Anche se gli iberici sembrano prenderla estremamente sul serio." "ko" "설정 순서: (10) 이베리아와 엑스피돈사가 공허와의 최후의 전투를 돕기 위한 대비 훈련을 제공하려고 합니다... 비록 이베리아인들은 이를 매우 심각하게 받아들이는 것 같지만요." @@ -5398,6 +5401,16 @@ "it" "Costruisci una stazione di cura presso di me" "ko" "내 위치에 회복 시설을 건설해줘" } + "Set My Basepoint" + { + "en" "Set My Basepoint" + "ko" "거점 포인트 설정" + } + "Saved Pos for Base" + { + "en" "This builder will remember this position and stay near it." + "ko" "건축가 반시민군이 이 위치를 기억하고 근처에 있을 것입니다." + } "Build Barricade At Me" { "en" "Build Barricade At Me" @@ -5714,4 +5727,30 @@ "en" "Outlaws" "ko" "무법자들" } + "Unknown" + { + "en" "Unknown" + "ko" "알 수 없음" + } + "Ranged Damage" + { + "en" "Ranged Damage" + "ko" "원거리 피해" + } + "Melee Damage" + { + "en" "Melee Damage" + "ko" "근접 피해" + } + "True Damage" + { + "en" "True Damage" + "ko" "트루 데미지" + } + "Last Hit Recieved info" + { + "#format" "{1:s},{2:.0f},{3:s},{4:d}" + "en" "You died to {yellow}{1}{snow} dealing {crimson}{2} {3}{snow} with {green}{4} Health Remaining." + "ko" "당신은 {green}잔여 체력 {4}{snow}에서 {yellow}{1}{snow}에게 {crimson}{2}의 {3}{snow}을(를) 입고 사망했습니다." + } } diff --git a/addons/sourcemod/translations/zombieriot.phrases.weapons.description.txt b/addons/sourcemod/translations/zombieriot.phrases.weapons.description.txt index b96421b14c..cb8e8439e7 100644 --- a/addons/sourcemod/translations/zombieriot.phrases.weapons.description.txt +++ b/addons/sourcemod/translations/zombieriot.phrases.weapons.description.txt @@ -569,6 +569,11 @@ "it" "Il CD del vostro M1 vi indicherà il tempo necessario per raffreddarsi di nuovo.\nUn surriscaldamento più elevato significa meno danni.\nUna potenza pazzesca a un prezzo economico, ma un alto costo delle munizioni." "ko" "-기본 공격의 쿨타임은 이 무기의 과열이 식는데 필요한 시간\n과열 수치가 높을수록 공격의 피해량이 감소\n-높은 피해량을 보유, 그러나 탄약 효율이 떨어짐\n-공격이 적을 관통함" } + "Brick Desc" + { + "en" "-Throw bricks that can headshot enemies\n-On headshot, gain a tempomary buff that on bodyshots, deals headshot damage (This doesnt extend the buff)\n-This buff also increases attackspeed." + "ko" "-헤드샷이 가능한 벽돌을 투척\n-헤드샷시, 일시적으로 신체 적중시 헤드샷 피해로 적용되는 버프 획득\n-위 버프 효과를 통한 헤드샷으로 버프 시간 연장 불가\n-위 버프는 공격 속도 역시 증가시킵니다." + } "Star Shooter Pap 1" { @@ -3721,7 +3726,7 @@ { "en" "-Increased Damage\n-Increased Clip size\n-Increased attackspeed\n-With your pistol you now revive allies 50% Faster.\n-M2 Activates Trigger finger." "it" "Aumenta la velocità di attacco, la dimensione del caricatore e il danno.\nCon la pistola ora rianima gli alleati 50% più velocemente.\nM2 Attiva il dito del grilletto!" - "ko" "-피해량, 장탄수, 공격 속도 증가\n-이 권총을 들고 있으면 아군 부활 속도가 50% 더 빨라짐.\n-우클릭(M2) 사용시 트리거 핑거 버프를 획득." + "ko" "-피해량, 장탄수, 공격 속도 증가\n-해당 무기 장착시 아군 부활 속도 +50%\n-우클릭(M2) 사용시 트리거 핑거 버프를 획득." } "USP PAP 3" { @@ -3837,11 +3842,8 @@ } "Armor Visualiser Desc" { - "en" "You can now see the armor of fellow allies via their shield." - "fr" "Vous permet de voir l'armure de vos alliés." - "chi" "看队友的护甲!" - "it" "È ora possibile vedere l'armatura dei compagni alleati attraverso il loro scudo." - "ko" "이제 모든 아군들의 아머를 확인할 수 있습니다." + "en" "You can now see the armor of fellow allies via a bar above their head." + "ko" "이제 머리 위의 바를 통해 아군들의 아머를 확인할 수 있습니다." } "Building Health Forcer Desc" { @@ -4849,9 +4851,9 @@ } "Therapy Desc" { - "en" "Kit has no self resistance, you instead have high hp regen as youre a doctor.\nYour pistol cannot reload.\nDebuff the enemy with your M2, a melee attack.\nOn melee hit, gain ammo." + "en" "Kit has no self resistance, you instead have high hp regen as you're a doctor.\nYour pistol cannot reload.\nDebuff the enemy with your M2, a melee attack.\nOn melee hit, gain ammo.\nYou revive allies 30% faster." "it" "Kit non ha resistenza propria, ma hai un'elevata rigenerazione dei punti salute poiché sei un medico.\nLa tua pistola non può essere ricaricata.\nDebuffa il nemico con il tuo M2, un attacco in mischia.\nQuando colpisci in mischia, ottieni munizioni." - "ko" "피해 저항력은 없지만, 높은 초당 체력 회복량을 보유.\n-권총은 재장전 불가\n-대상 적에게 M2로 근접 공격 적중시 디버프를 부여.\n-근접 공격 적중시, 탄약 획득" + "ko" "피해 저항력은 없지만, 높은 초당 체력 회복량을 보유\n-권총은 재장전 불가\n-대상 적에게 M2로 근접 공격 적중시 디버프를 부여\n-근접 공격 적중시, 탄약 획득\n-아군 부활 속도 +30%" } "Hand Pap 1" { @@ -4867,9 +4869,9 @@ } "Taurus Revolver Desc" { - "en" "A very strong revolver that holds 5 bullets per clip.\nExtremely long reload time." + "en" "A very strong revolver that holds 5 bullets per clip." "it" "Una pistola molto potente che contiene 5 proiettili per caricatore.\nTempo di ricarica estremamente lungo." - "ko" "최대 5발의 탄을 장전할 수 있는 매우 강한 리볼버입니다.\n재장전 속도가 극도로 느립니다." + "ko" "최대 5발의 탄을 장전할 수 있는 매우 강한 리볼버입니다." } "Taurus Revolver Pap 1" { diff --git a/addons/sourcemod/translations/zombieriot.phrases.weapons.txt b/addons/sourcemod/translations/zombieriot.phrases.weapons.txt index 77d7fbcac0..d226a315f9 100644 --- a/addons/sourcemod/translations/zombieriot.phrases.weapons.txt +++ b/addons/sourcemod/translations/zombieriot.phrases.weapons.txt @@ -524,6 +524,11 @@ "it" "Lancia-Stelle" "ko" "유성 발사기" } + "Brick" + { + "en" "Brick" + "ko" "벽돌" + } "Rusty Rifle" { "en" "Rusty Rifle" @@ -2628,7 +2633,7 @@ "Iberian and Expidonsan Training" { "en" "Iberian and Expidonsan Training" - "ko" "엑스피돈사-이베리아 연합 훈련" + "ko" "이베리아-엑스피돈사 연합 훈련" } "Expidonsan Research Card" { diff --git a/addons/sourcemod/translations/zombieriot.phrases.zombienames.txt b/addons/sourcemod/translations/zombieriot.phrases.zombienames.txt index a868576e0e..97d6729ddb 100644 --- a/addons/sourcemod/translations/zombieriot.phrases.zombienames.txt +++ b/addons/sourcemod/translations/zombieriot.phrases.zombienames.txt @@ -1463,6 +1463,11 @@ "it" "Avanguardia annullata" "ko" "공허화된 뱅가드" } + "Sea-Infected Voided Vanguard" + { + "en" "Sea-Infected Voided Vanguard" + "ko" "시테러 감염체 공허화된 뱅가드" + } "Kahmlstein" { "en" "Kahmlstein" @@ -3679,6 +3684,11 @@ "it" "Uroboro Ekas" "ko" "우로보로스 에카스" } + "Rundown Xeno Ouroboros Ekas-2008" + { + "en" "Rundown Xeno Ouroboros Ekas-2008" + "ko" "런다운 제노 우로보로스 에카스-2008" + } "Wandering Spirit" { "en" "Wandering Spirit" @@ -5461,6 +5471,21 @@ "it" "Uroboro Ekas" "ko" "우로보로스 에카스" } + "Xeno Lab Security" + { + "en" "Xeno Lab Security" + "ko" "제노 연구소 보안장치" + } + "Goliath Aircraft" + { + "en" "Goliath Aircraft" + "ko" "골리앗 비행선" + } + "Const2 Spawner" + { + "en" "Const2 Spawner" + "ko" "생존연산2 스포너" + } "Bob's Duck ''Dubby''" { "en" "Bob's Duck ''Dubby''" @@ -5868,6 +5893,46 @@ "en" "Captino Menius" "ko" "캡티노 메니우스" } + "Zapmarker" + { + "en" "Zapmarker" + } + "Resource Collector" + { + "en" "Resource Collector" + } + "Victoria Gasleader" + { + "en" "Victorian Chemical Squad Leader" + } + "Demolitionist" + { + "en" "Demolitionist" + } + "Victorian Protector" + { + "en" "Victorian Protector" + } + "Airraider" + { + "en" "Airraider" + } + "Victorian Headhunter" + { + "en" "Victorian Headhunter" + } + "Chemical Specialist" + { + "en" "Chemical Specialist" + } + "Chemical Spreader" + { + "en" "Chemical Spreader" + } + "Giant Armored Medibot" + { + "en" "Giant Armored Medibot" + } "0h No it's Not Fair" { "en" "=Failed name=" @@ -6207,6 +6272,14 @@ "it" "Cavaliere perduto" "ko" "길 잃은 기사" } + "Rollermine" + { + "en" "Rollermine" + } + "Nova Prospekt Overseer" + { + "en" "Nova Prospekt Overseer" + } "Omega" { "en" "Omega" @@ -7703,7 +7776,7 @@ "Agent 61 Desc" { "en" "A hired hitman merc, number assosiation unknown.\n-Will find the weakest target on the map and focus them\n-Phases through everything\n-Has challanger buff\n-Shoots his gun once which if hitting, deals a stacking fear debuff." - "ko" "고용된 히트맨 용병입니다. 숫자 관련성 불명.\n-맵에서 가장 취약한 대상을 찾아 집중 공격합니다.\n-모든 것들을 통과하여 지나갑니다.\n-챌린저 버프 보유\n-적중 시 '원초적 공포' 디버프를 부여하는 총기를 사용합니다." + "ko" "고용된 히트맨 용병입니다. 숫자 관련성 불명.\n-맵에서 가장 취약한 대상을 찾아 집중 공격합니다.\n-모든 것들을 통과하여 지나갑니다.\n-'도전자' 버프 보유\n-적중 시 '원초적 공포' 디버프를 부여하는 총기를 사용합니다." } "Battlefield Supplier" { @@ -7773,7 +7846,7 @@ "Behemoth Behemoth Desc" { "en" "A Bigger Behemoth, too many vitamins.\n-Deals chaos damage on hit\n-Has AOE swings\n-Immune to Headshots" - "ko" "더 커다란 베헤모스입니다. 비타민을 너무 먹었나...\n-적중 시 혼돈 원소 피해를 부여합니다.\n-광역 피해를 가하는 공격 보유\n-헤드샷 피해를 0으로 받습니다." + "ko" "더 커다란 베헤모스입니다. 비타민을 너무 많이 먹었나...\n-적중 시 혼돈 원소 피해를 부여합니다.\n-광역 피해를 가하는 공격 보유\n-헤드샷 피해를 0으로 받습니다." } "Demon Possesed Armor" {