1939 lines
96 KiB
Lua
Executable File
1939 lines
96 KiB
Lua
Executable File
if CTHTDGameMode == nil then
|
||
CTHTDGameMode = class({})
|
||
end
|
||
|
||
require( "util")
|
||
require( "common")
|
||
-- require( "component/timers")
|
||
require( "system/service")
|
||
require( "system/spawner")
|
||
require( "system/items")
|
||
require( "system/tower")
|
||
require( "system/damage")
|
||
require( "system/custom_event")
|
||
require( "system/combo")
|
||
require( "system/ai")
|
||
require( "trigger/PassCorner")
|
||
-- require( "cosmetic_abilities")
|
||
|
||
function Precache( context )
|
||
|
||
PrecacheEveryThingFromKV( context )
|
||
|
||
PrecacheResource( "particle", "particles/econ/events/ti6/hero_levelup_ti6_godray.vpcf",context )
|
||
PrecacheResource( "particle", "particles/thtd/msg/thtd_msg_level.vpcf",context )
|
||
PrecacheResource( "particle", "particles/thtd/msg/thtd_msg_star.vpcf",context )
|
||
PrecacheResource( "particle", "particles/thtd/msg/thtd_msg_food.vpcf",context )
|
||
PrecacheResource( "particle", "particles/common/thtd_food_msg.vpcf",context )
|
||
|
||
PrecacheResource( "particle_folder", "particles/portraits", context )
|
||
|
||
PrecacheResource( "particle", "particles/heroes/lily/ability_lily_01_a.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/lily/ability_lily_02.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/thtd_cirno/ability_cirno_02.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/letty/ability_letty_01.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/kogasa/ability_kogasa_01.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/kogasa/ability_kogasa_01_debuff.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/lyrica/ability_lyrica_01.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/lunasa/ability_lunasa_01.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/lunasa/ability_lunasa_buff.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/merlin/ability_merlin_01.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/merlin/ability_merlin_buff.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/rumia/ability_rumia_02_projectile.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/satori/ability_satori_01.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/iku/ability_iku_lightning.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/iku/ability_iku_01_explosion.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/thtd_marisa/ability_marisa_02.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/thtd_marisa/ability_marisa_02_pink.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/thtd_marisa/ability_marisa_02_blue.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/thtd_marisa/ability_marisa_02_normal.vpcf",context )
|
||
PrecacheResource( "particle", "particles/econ/items/earthshaker/egteam_set/hero_earthshaker_egset/earthshaker_echoslam_start_fallback_low_egset.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/tenshi/ability_tenshi_03.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/thtd_patchouli/ability_patchouli_01_agni_shine.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/thtd_patchouli/ability_patchouli_01_bury_in_lake.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/thtd_patchouli/ability_patchouli_01_mercury_poison.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/thtd_reisen/ability_reisen_03.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/thtd_yuyuko/ability_yuyuko_01.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/thtd_yuyuko/ability_yuyuko_04.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/thtd_youmu/ability_youmu_01_laser.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/youmu/youmu_02_effect_explosion.vpcf",context )
|
||
PrecacheResource( "particle", "particles/thd2/heroes/youmu/youmu_01_blink_effect.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/youmu/youmu_04_circle.vpcf",context )
|
||
PrecacheResource( "particle", "particles/thd2/heroes/youmu/youmu_04_sword_effect.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/rin/ability_rin_02_body_c.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/rin/ability_rin_01_projectile.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/rin/ability_rin_01.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/moluo/abiilty_moluo_014.vpcf",context )
|
||
PrecacheResource( "particle", "particles/thd2/heroes/utsuho/ability_utsuho03_effect.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/lyrica/ability_lyrica_music_buff.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/lunasa/ability_lunasa_music_buff.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/merlin/ability_merlin_music_buff.vpcf",context )
|
||
|
||
PrecacheResource( "particle", "particles/heroes/byakuren/ability_byakuren_02.vpcf",context )
|
||
PrecacheResource( "particle", "particles/econ/items/lina/lina_ti6/lina_ti6_laguna_blade.vpcf",context )
|
||
PrecacheResource( "particle", "particles/thd2/items/item_yatagarasu.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/daiyousei/ability_daiyousei_02.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/cirno/ability_cirno_02.vpcf",context )
|
||
|
||
PrecacheResource( "particle", "particles/heroes/yumemi/ability_yumemi_04_exolosion.vpcf",context )
|
||
PrecacheResource( "particle", "particles/thd2/items/item_donation_box.vpcf",context )
|
||
PrecacheResource( "particle", "particles/thtd_item/ability_item_2022.vpcf",context )
|
||
|
||
PrecacheResource( "particle", "particles/thtd/emoji/thtd_msg_hongliange.vpcf",context )
|
||
PrecacheResource( "particle", "particles/thd2/environment/death/act_hero_die.vpcf",context )
|
||
|
||
-- bosses
|
||
PrecacheResource( "particle", "particles/heroes/minoriko/ability_minoriko_04.vpcf",context )
|
||
PrecacheResource( "particle", "particles/bosses/thtd_keine/ability_bosses_keine.vpcf",context )
|
||
PrecacheResource( "particle", "particles/thd2/heroes/rumia/ability_rumia01_effect.vpcf",context )
|
||
PrecacheResource( "particle", "particles/heroes/marisa/marisa_01_rocket_a.vpcf",context )
|
||
|
||
-- 装饰技能
|
||
PrecacheResource( "particle", "particles/econ/events/new_bloom/pig_cast.vpcf",context )
|
||
PrecacheResource( "particle", "particles/econ/events/new_bloom/lion_dance_eyes_group.vpcf",context )
|
||
PrecacheResource( "particle", "particles/econ/events/ti9/ti9_drums_musicnotes.vpcf",context )
|
||
PrecacheResource( "particle", "particles/econ/events/snowball/snowball_projectile.vpcf",context )
|
||
PrecacheResource( "particle", "particles/econ/events/snowman/snowman_projectile_explosion_c.vpcf",context )
|
||
|
||
PrecacheResource( "particle", "particles/imagine_assets/courier_fx/courier_fx_2.vpcf",context )
|
||
PrecacheResource( "particle", "particles/particles/imagine_assets/courier_fx/rainbow_tail.vpcf",context )
|
||
|
||
PrecacheResource( "particle", "particles/econ/items/monkey_king/mk_ti9_immortal/mk_ti9_immortal_army_ring.vpcf",context )
|
||
PrecacheResource( "particle", "particles/units/heroes/hero_omniknight/omniknight_purification.vpcf",context )
|
||
|
||
PrecacheResource( "particle", "particles/econ/events/ti10/attack_modifier_ti10.vpcf",context )
|
||
|
||
PrecacheResource( "particle", "particles/units/heroes/hero_monkey_king/monkey_king_quad_tap_stack.vpcf",context )
|
||
|
||
-- sounds
|
||
PrecacheResource( "soundfile", "soundevents/game_sounds_custom.vsndevts", context)
|
||
PrecacheResource( "soundfile", "soundevents/custom_game/ui.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/custom_game/store.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/game_sounds/thdots_tower_attack_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/game_sounds/thdots_tower_sound_voice.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/game_sounds/thdots_tower_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_alice_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_aya_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_cirno_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_flandre_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_iku_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_kaguya_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_kanako_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_koishi_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_marisa_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_minamitsu_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_momiji_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_nue_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_ran_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_reimu_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_reisen_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_remilia_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_sakuya_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_shikieiki_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_tenshi_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_utsuho_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_youmu_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_yukari_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_yumemi_sounds.vsndevts", context )
|
||
PrecacheResource( "soundfile", "soundevents/thdots_hero_sounds/thdots_yuyuko_sounds.vsndevts", context )
|
||
|
||
-- 信使
|
||
local mxx={
|
||
--以前的模型和特效
|
||
"particles/units/heroes/hero_templar_assassin/templar_assassin_base_attack.vpcf",
|
||
"particles/dev/library/base_dust_hit_smoke.vpcf",
|
||
"particles/econ/events/fall_major_2016/teleport_start_fm06_lvl3.vpcf",
|
||
"soundevents/soundevents_dota_ui.vsndevts",
|
||
"particles/econ/events/snowball/snowball_projectile.vpcf",
|
||
"particles/units/heroes/hero_venomancer/venomancer_base_attack.vpcf",
|
||
"particles/neutral_fx/gnoll_poison_debuff.vpcf",
|
||
"particles/units/heroes/hero_crystalmaiden/maiden_frostbite_buff.vpcf",
|
||
"models/items/courier/teron/teron_flying.vmdl",
|
||
"soundevents/game_sounds_heroes/game_sounds_omniknight.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_zuus.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_lina.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_keeper_of_the_light.vsndevts",
|
||
"particles/econ/items/zeus/arcana_chariot/zeus_arcana_thundergods_wrath_start.vpcf",
|
||
"particles/econ/items/omniknight/hammer_ti6_immortal/omniknight_pu_ti6_heal_hammers.vpcf",
|
||
"particles/econ/items/lina/lina_ti6/lina_ti6_laguna_blade.vpcf",
|
||
"particles/units/heroes/hero_disruptor/disruptor_thunder_strike_bolt.vpcf",
|
||
"particles/units/heroes/hero_keeper_of_the_light/keeper_chakra_magic.vpcf",
|
||
"particles/units/heroes/hero_oracle/oracle_fatesedict.vpcf",
|
||
"particles/econ/events/winter_major_2017/blink_dagger_end_wm07.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_antimage.vsndevts",
|
||
"particles/units/heroes/hero_lina/lina_spell_light_strike_array.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_tidehunter.vsndevts",
|
||
"particles/units/heroes/hero_dazzle/dazzle_shallow_grave.vpcf",
|
||
"particles/econ/items/axe/axe_cinder/axe_cinder_battle_hunger.vpcf",
|
||
"particles/units/heroes/hero_rubick/rubick_spell_steal.vpcf",
|
||
"models/items/courier/duskie/duskie.vmdl",
|
||
"particles/units/heroes/hero_lone_druid/lone_druid_bear_entangle_body.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_lone_druid.vsndevts",
|
||
"particles/items2_fx/tranquil_boots_healing.vpcf",
|
||
"particles/units/heroes/hero_beastmaster/beastmaster_primal_roar.vpcf",
|
||
"particles/units/heroes/hero_spirit_breaker/spirit_breaker_nether_strike_end.vpcf",
|
||
"particles/units/heroes/hero_batrider/batrider_base_attack.vpcf",
|
||
"particles/items_fx/healing_flask_c.vpcf",
|
||
"particles/units/heroes/hero_skeletonking/wraith_king_spirits.vpcf",
|
||
"particles/units/heroes/hero_phoenix/phoenix_supernova_scepter_f.vpcf",
|
||
"particles/radiant_fx/good_barracks_ranged001_lvl3_disintegrate.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_vengefulspirit.vsndevts",
|
||
"particles/units/heroes/hero_tinker/tinker_missile.vpcf",
|
||
|
||
"soundevents/game_sounds_heroes/game_sounds_tinker.vsndevts",
|
||
"particles/units/heroes/hero_visage/visage_grave_chill_skel.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_invoker.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_rattletrap.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_sniper.vsndevts",
|
||
"particles/econ/items/rubick/rubick_puppet_master/rubick_back_puppet_ambient_edge_c.vpcf",
|
||
"particles/newplayer_fx/npx_sleeping.vpcf",
|
||
"particles/generic_gameplay/generic_stunned_old.vpcf",
|
||
"particles/econ/items/enchantress/enchantress_virgas/ench_impetus_virgas.vpcf",
|
||
"particles/econ/items/alchemist/alchemist_smooth_criminal/alchemist_smooth_criminal_unstable_concoction_projectile_explosion_fire.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_phoenix.vsndevts",
|
||
"particles/econ/items/shadow_fiend/sf_fire_arcana/sf_fire_arcana_shadowraze_char.vpcf",
|
||
"particles/units/heroes/hero_tiny/tiny_loadout.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_tiny.vsndevts",
|
||
"models/props_structures/tower_good.vmdl",
|
||
"models/props_structures/tower_bad.vmdl",
|
||
"particles/econ/items/sniper/sniper_immortal_cape/sniper_immortal_cape_headshot_slow_model.vpcf",
|
||
"particles/customgames/capturepoints/cp_allied_wind.vpcf",
|
||
"particles/customgames/capturepoints/cp_wood.vpcf",
|
||
"models/items/courier/hermit_crab/hermit_crab.vmdl",
|
||
"particles/econ/events/ti7/teleport_end_ti7_team1836806.vpcf",
|
||
"particles/econ/items/sniper/sniper_immortal_cape/sniper_immortal_cape_headshot_slow_ring.vpcf",
|
||
"particles/econ/items/clinkz/clinkz_maraxiform/clinkz_maraxiform_searing_arrow.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_dazzle.vsndevts",
|
||
"particles/addons_gameplay/tower_good_tintable_lamp_end.vpcf",
|
||
"particles/econ/events/ti7/teleport_end_ti7_model.vpcf",
|
||
"particles/units/heroes/hero_shredder/shredder_whirling_death_spin_blades.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_shredder.vsndevts",
|
||
"particles/units/heroes/hero_lina/lina_base_attack.vpcf",
|
||
"particles/units/heroes/hero_razor/razor_static_link_projectile_a.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_beastmaster.vsndevts",
|
||
"particles/econ/items/crystal_maiden/ti7_immortal_shoulder/cm_ti7_immortal_frostbite.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_crystalmaiden.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_earthshaker.vsndevts",
|
||
"particles/econ/items/earthshaker/earthshaker_totem_ti6/earthshaker_totem_ti6_leap_impact.vpcf",
|
||
"particles/units/heroes/hero_stormspirit/stormspirit_overload_discharge.vpcf",
|
||
"particles/units/heroes/hero_sven/sven_spell_gods_strength_small.vpcf",
|
||
"particles/units/heroes/hero_sven/sven_spell_gods_strength.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_bloodseeker.vsndevts",
|
||
"particles/econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodbath_eztzhok_ribbon.vpcf",
|
||
"particles/econ/items/slardar/slardar_takoyaki_gold/slardar_crush_tako_ground_dust_pyro_gold.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_death_prophet.vsndevts",
|
||
"particles/dac/explode/land_mine_explode.vpcf",
|
||
"particles/units/heroes/hero_dragon_knight/dragon_knight_transform_blue_smoke04.vpcf",
|
||
"particles/econ/items/antimage/antimage_weapon_basher_ti5_gold/antimage_manavoid_explode_b_b_ti_5_gold.vpcf",
|
||
"particles/dac/zhayaotong/zhayaotong.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_silencer.vsndevts",
|
||
"particles/econ/items/bounty_hunter/bounty_hunter_hunters_hoard/bounty_hunter_hoard_shield_mark.vpcf",
|
||
"particles/dac/ansha/loadout.vpcf",
|
||
"particles/dac/jingzhixianjingplant_ground_disturb.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_techies.vsndevts",
|
||
"particles/generic_gameplay/generic_stunned.vpcf",
|
||
"particles/units/heroes/hero_techies/techies_stasis_trap_explode.vpcf",
|
||
|
||
|
||
"particles/econ/items/ancient_apparition/aa_blast_ti_5/ancient_apparition_ice_blast_sphere_final_explosion_smoke_ti5.vpcf",
|
||
"models/items/wards/eye_of_avernus_ward/eye_of_avernus_ward.vmdl",
|
||
"models/props_structures/dire_ancient_base001_destruction.vmdl",
|
||
"models/props_structures/radiant_ancient001_rock_destruction.vmdl",
|
||
"models/creeps/lane_creeps/creep_radiant_melee/radiant_melee.vmdl",
|
||
"models/creeps/lane_creeps/creep_bad_melee/creep_bad_melee.vmdl",
|
||
"models/props_structures/radiant_ranged_barracks001.vmdl",
|
||
"models/props_structures/dire_barracks_ranged001.vmdl",
|
||
"models/props_structures/radiant_ancient001.vmdl",
|
||
"models/props_structures/dire_ancient_base001.vmdl",
|
||
"models/props_structures/dire_barracks_ranged001_destruction.vmdl",
|
||
"models/props_structures/radiant_ranged_barracks001_destruction.vmdl",
|
||
"effects/damage.vpcf",
|
||
"effects/damage2.vpcf",
|
||
"effects/damage3.vpcf",
|
||
"particles/ui/ui_game_start_hero_spawn.vpcf",
|
||
"particles/base_attacks/ranged_tower_bad_trail.vpcf",
|
||
"particles/units/heroes/hero_warlock/warlock_fatal_bonds_base.vpcf",
|
||
"particles/units/heroes/hero_tinker/tinker_laser.vpcf",
|
||
"particles/units/heroes/hero_ursa/ursa_fury_swipes_debuff.vpcf",
|
||
"soundevents/voscripts/game_sounds_vo_wisp.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_wisp.vsndevts",
|
||
|
||
"soundevents/voscripts/game_sounds_vo_lina.vsndevts",
|
||
"particles/econ/items/puck/puck_alliance_set/puck_dreamcoil_waves_aproset.vpcf",
|
||
"particles/econ/items/drow/drow_ti6/drow_ti6_silence_wave_ground_smoke.vpcf",
|
||
"materials/pumpkin.vmdl",
|
||
"models/props_gameplay/boots_of_speed.vmdl",
|
||
"models/props_gameplay/quelling_blade.vmdl",
|
||
"models/props_gameplay/stout_shield.vmdl",
|
||
"models/props_gameplay/tango.vmdl",
|
||
"models/props_gameplay/smoke.vmdl",
|
||
"models/props_gameplay/halloween_candy.vmdl",
|
||
"models/props_gameplay/salve_red.vmdl",
|
||
"models/props_gameplay/mango.vmdl",
|
||
"models/props_gameplay/branch.vmdl",
|
||
"particles/gem/sniper_crosshair.vpcf",
|
||
"particles/radiant_fx/tower_good3_dest_beam.vpcf",
|
||
"particles/units/heroes/hero_witchdoctor/witchdoctor_maledict_dot.vpcf",
|
||
"soundevents/voscripts/game_sounds_vo_shredder.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_rattletrap.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_dragon_knight.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_death_prophet.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_tinker.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_lycan.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_ursa.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_enchantress.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_techies.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_tiny.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_shadowshaman.vsndevts",
|
||
"soundevents/game_sounds.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_lion.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_stormspirit.vsndevts",
|
||
"soundevents/game_sounds_roshan_halloween.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_lone_druid.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_doom_bringer.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_nyx_assassin.vsndevts",
|
||
"particles/dev/library/base_dust_hit.vpcf",
|
||
"particles/econ/events/fall_major_2016/radiant_fountain_regen_fm06_lvl3_ring.vpcf",
|
||
|
||
--新的模型和特效
|
||
"soundevents/game_sounds_heroes/game_sounds_lion.vsndevts",
|
||
"particles/units/heroes/hero_shadowshaman/shadowshaman_voodoo.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_axe.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_tusk.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_crystalmaiden.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_enchantress.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_ogre_magi.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_tinker.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_beastmaster.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_juggernaut.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_lycan.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_shredder.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_drowranger.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_keeper_of_the_light.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_razor.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_omniknight.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_windrunner.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_kunkka.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_doombringer.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_lina.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_troll_warlord.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_venomancer.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_gyrocopter.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_jakiro.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_lich.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_queenofpain.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_tidehunter.vsndevts",
|
||
"particles/units/heroes/hero_lycan/lycan_weapon_blur_b.vpcf",
|
||
"particles/econ/items/necrolyte/necrophos_sullen/necro_sullen_pulse_enemy.vpcf",
|
||
"particles/units/unit_greevil/loot_greevil_death.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_ogre_magi.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_sandking.vsndevts",
|
||
"particles/units/heroes/hero_omniknight/omniknight_purification.vpcf",
|
||
"particles/dire_fx/bad_ancient002_destroy_fire.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_witchdoctor.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_tusk.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_crystalmaiden.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_axe.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_enchantress.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_ogre_magi.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_antimage.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_rattletrap.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_shadowshaman.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_bounty_hunter.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_witchdoctor.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_tinker.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_beastmaster.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_juggernaut.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_lycan.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_shredder.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_phantom_assassin.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_puck.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_slardar.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_chaos_knight.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_drowranger.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_keeper_of_the_light.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_razor.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_omniknight.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_windrunner.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_sandking.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_abaddon.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_slark.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_sniper.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_kunkka.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_doombringer.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_lina.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_troll_warlord.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_venomancer.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_necrolyte.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_templar_assassin.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_gyrocopter.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_lich.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_queenofpain.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_tidehunter.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_enigma.vsndevts",
|
||
"models/props_gameplay/donkey.vmdl",
|
||
"models/items/courier/bearzky/bearzky.vmdl",
|
||
"models/items/courier/bajie_pig/bajie_pig.vmdl",
|
||
"models/courier/mech_donkey/mech_donkey.vmdl",
|
||
"models/items/courier/little_fraid_the_courier_of_simons_retribution/little_fraid_the_courier_of_simons_retribution.vmdl",
|
||
"models/items/courier/baekho/baekho.vmdl",
|
||
"models/items/courier/green_jade_dragon/green_jade_dragon.vmdl",
|
||
"models/courier/donkey_crummy_wizard_2014/donkey_crummy_wizard_2014.vmdl",
|
||
"models/items/courier/pw_zombie/pw_zombie.vmdl",
|
||
"models/courier/drodo/drodo.vmdl",
|
||
"models/items/courier/courier_mvp_redkita/courier_mvp_redkita.vmdl",
|
||
"particles/generic_gameplay/rune_bounty_prespawn.vpcf",
|
||
"particles/prime/hero_spawn_hero_level_2_base_ring.vpcf",
|
||
"particles/econ/items/treant_protector/ti7_shoulder/treant_ti7_livingarmor_seedlings_parent.vpcf",
|
||
"particles/econ/items/bloodseeker/bloodseeker_eztzhok_weapon/bloodseeker_bloodrage_ground_eztzhok_arc.vpcf",
|
||
"particles/econ/items/treant_protector/ti7_shoulder/treant_ti7_crimson_livingarmor.vpcf",
|
||
"particles/units/heroes/hero_puck/puck_base_attack_warmup.vpcf",
|
||
"particles/units/heroes/hero_phantom_assassin/phantom_assassin_attack_blur_crit.vpcf",
|
||
"particles/units/heroes/hero_lycan/lycan_weapon_blur_both.vpcf",
|
||
"particles/units/heroes/hero_juggernaut/jugg_attack_blur.vpcf",
|
||
"particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_attack_b.vpcf",
|
||
"particles/econ/items/juggernaut/jugg_ti8_sword/juggernaut_ti8_sword_attack_a.vpcf",
|
||
"particles/units/heroes/hero_windrunner/wr_taunt_kiss.vpcf",
|
||
"effect/big.vpcf",
|
||
"effect/arrow/1.vpcf",
|
||
"effect/arrow/2.vpcf",
|
||
"effect/arrow/3.vpcf",
|
||
"effect/arrow/4.vpcf",
|
||
"effect/arrow/5.vpcf",
|
||
"effect/arrow/star1.vpcf",
|
||
"effect/arrow/star2.vpcf",
|
||
"effect/arrow/star3.vpcf",
|
||
"particles/error/error.vpcf",
|
||
"particles/units/heroes/hero_chaos_knight/chaos_knight_weapon_blur.vpcf",
|
||
"particles/units/heroes/hero_lycan/lycan_claw_blur.vpcf",
|
||
"soundevents/voscripts/game_sounds_vo_tusk.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_crystalmaiden.vsndevts",
|
||
'models/items/courier/virtus_werebear_t3/virtus_werebear_t3.vmdl',
|
||
|
||
|
||
"particles/econ/items/templar_assassin/templar_assassin_focal/templar_assassin_meld_focal_attack_shockwave.vpcf",
|
||
|
||
"models/props_gameplay/donkey.vmdl",
|
||
"models/courier/skippy_parrot/skippy_parrot.vmdl",
|
||
"models/courier/smeevil_mammoth/smeevil_mammoth.vmdl",
|
||
"models/items/courier/arneyb_rabbit/arneyb_rabbit.vmdl",
|
||
"models/items/courier/axolotl/axolotl.vmdl",
|
||
"models/items/courier/coco_the_courageous/coco_the_courageous.vmdl",
|
||
"models/items/courier/coral_furryfish/coral_furryfish.vmdl",
|
||
"models/items/courier/corsair_ship/corsair_ship.vmdl",
|
||
"models/items/courier/duskie/duskie.vmdl",
|
||
"models/items/courier/itsy/itsy.vmdl",
|
||
"models/items/courier/jumo/jumo.vmdl",
|
||
"models/items/courier/mighty_chicken/mighty_chicken.vmdl",
|
||
"models/items/courier/nexon_turtle_05_green/nexon_turtle_05_green.vmdl",
|
||
"models/items/courier/pumpkin_courier/pumpkin_courier.vmdl",
|
||
"models/items/courier/pw_ostrich/pw_ostrich.vmdl",
|
||
"models/items/courier/scuttling_scotty_penguin/scuttling_scotty_penguin.vmdl",
|
||
"models/items/courier/shagbark/shagbark.vmdl",
|
||
"models/items/courier/snaggletooth_red_panda/snaggletooth_red_panda.vmdl",
|
||
"models/items/courier/snail/courier_snail.vmdl",
|
||
"models/items/courier/teron/teron.vmdl",
|
||
"models/items/courier/xianhe_stork/xianhe_stork.vmdl",
|
||
"models/items/courier/starladder_grillhound/starladder_grillhound.vmdl",
|
||
"models/items/courier/pw_zombie/pw_zombie.vmdl",
|
||
"models/items/courier/raiq/raiq.vmdl",
|
||
"models/courier/frog/frog.vmdl",
|
||
"models/courier/godhorse/godhorse.vmdl",
|
||
"models/courier/imp/imp.vmdl",
|
||
"models/courier/mighty_boar/mighty_boar.vmdl",
|
||
"models/items/courier/onibi_lvl_03/onibi_lvl_03.vmdl",
|
||
"models/items/courier/echo_wisp/echo_wisp.vmdl", --蠕行水母
|
||
"models/courier/sw_donkey/sw_donkey.vmdl", --驴法师new
|
||
"models/items/courier/gnomepig/gnomepig.vmdl", --丰臀公主new
|
||
"models/items/furion/treant/ravenous_woodfang/ravenous_woodfang.vmdl",--焚牙树精new
|
||
"models/courier/mechjaw/mechjaw.vmdl",--机械咬人箱new
|
||
"models/items/courier/mole_messenger/mole_messenger.vmdl",--1级矿车老鼠
|
||
"models/courier/doom_demihero_courier/doom_demihero_courier.vmdl",
|
||
"models/courier/huntling/huntling.vmdl",
|
||
"models/courier/minipudge/minipudge.vmdl",
|
||
"models/courier/seekling/seekling.vmdl",
|
||
"models/items/courier/baekho/baekho.vmdl",
|
||
"models/items/courier/basim/basim.vmdl",
|
||
"models/items/courier/devourling/devourling.vmdl",
|
||
"models/items/courier/faceless_rex/faceless_rex.vmdl",
|
||
"models/items/courier/tinkbot/tinkbot.vmdl",
|
||
"models/items/courier/lilnova/lilnova.vmdl",
|
||
"models/items/courier/amphibian_kid/amphibian_kid.vmdl",
|
||
"models/courier/venoling/venoling.vmdl",
|
||
"models/courier/juggernaut_dog/juggernaut_dog.vmdl",
|
||
"models/courier/otter_dragon/otter_dragon.vmdl",
|
||
"models/items/courier/boooofus_courier/boooofus_courier.vmdl",
|
||
"models/courier/baby_winter_wyvern/baby_winter_wyvern.vmdl",
|
||
"models/courier/yak/yak.vmdl",
|
||
"models/items/furion/treant/eternalseasons_treant/eternalseasons_treant.vmdl",
|
||
"models/items/courier/blue_lightning_horse/blue_lightning_horse.vmdl",
|
||
"models/items/courier/waldi_the_faithful/waldi_the_faithful.vmdl",
|
||
"models/items/courier/bajie_pig/bajie_pig.vmdl",
|
||
"models/items/courier/courier_faun/courier_faun.vmdl",
|
||
"models/items/courier/livery_llama_courier/livery_llama_courier.vmdl",
|
||
"models/items/courier/onibi_lvl_10/onibi_lvl_10.vmdl",
|
||
"models/items/courier/little_fraid_the_courier_of_simons_retribution/little_fraid_the_courier_of_simons_retribution.vmdl", --胆小南瓜人
|
||
"models/items/courier/hermit_crab/hermit_crab.vmdl", --螃蟹1
|
||
"models/items/courier/hermit_crab/hermit_crab_boot.vmdl", --螃蟹2
|
||
"models/items/courier/hermit_crab/hermit_crab_shield.vmdl", --螃蟹3
|
||
"models/courier/donkey_unicorn/donkey_unicorn.vmdl", --竭智法师new
|
||
"models/items/courier/white_the_crystal_courier/white_the_crystal_courier.vmdl", --蓝心白隼new
|
||
"models/items/furion/treant/furion_treant_nelum_red/furion_treant_nelum_red.vmdl",--莲花人new
|
||
"models/courier/beetlejaws/mesh/beetlejaws.vmdl",--甲虫咬人箱new
|
||
"models/courier/smeevil_bird/smeevil_bird.vmdl",
|
||
"models/items/courier/mole_messenger/mole_messenger_lvl4.vmdl",--蜡烛头矿车老鼠
|
||
"models/items/courier/bookwyrm/bookwyrm.vmdl",
|
||
"models/items/courier/captain_bamboo/captain_bamboo.vmdl",
|
||
"models/items/courier/kanyu_shark/kanyu_shark.vmdl",
|
||
"models/items/courier/tory_the_sky_guardian/tory_the_sky_guardian.vmdl",
|
||
"models/items/courier/shroomy/shroomy.vmdl",
|
||
"models/items/courier/courier_janjou/courier_janjou.vmdl",
|
||
"models/items/courier/green_jade_dragon/green_jade_dragon.vmdl",
|
||
"models/courier/drodo/drodo.vmdl",
|
||
"models/courier/mech_donkey/mech_donkey.vmdl",
|
||
"models/courier/donkey_crummy_wizard_2014/donkey_crummy_wizard_2014.vmdl",
|
||
"models/courier/octopus/octopus.vmdl",
|
||
"models/items/courier/scribbinsthescarab/scribbinsthescarab.vmdl",
|
||
"models/courier/defense3_sheep/defense3_sheep.vmdl",
|
||
"models/items/courier/snapjaw/snapjaw.vmdl",
|
||
"models/items/courier/g1_courier/g1_courier.vmdl",
|
||
"models/courier/donkey_trio/mesh/donkey_trio.vmdl",
|
||
"models/items/courier/boris_baumhauer/boris_baumhauer.vmdl",
|
||
"models/courier/baby_rosh/babyroshan.vmdl",
|
||
"models/items/courier/bearzky/bearzky.vmdl",
|
||
"models/items/courier/defense4_radiant/defense4_radiant.vmdl",
|
||
"models/items/courier/defense4_dire/defense4_dire.vmdl",
|
||
"models/items/courier/onibi_lvl_20/onibi_lvl_20.vmdl",
|
||
"models/items/juggernaut/ward/fortunes_tout/fortunes_tout.vmdl", --招财猫
|
||
"models/items/courier/hermit_crab/hermit_crab_necro.vmdl", --螃蟹4
|
||
"models/items/courier/hermit_crab/hermit_crab_travelboot.vmdl", --螃蟹5
|
||
"models/items/courier/hermit_crab/hermit_crab_lotus.vmdl", --螃蟹6
|
||
"models/courier/donkey_ti7/donkey_ti7.vmdl",
|
||
"models/items/courier/shibe_dog_cat/shibe_dog_cat.vmdl", --天猫地狗new
|
||
"models/items/furion/treant/hallowed_horde/hallowed_horde.vmdl",--万圣树群new
|
||
"models/courier/flopjaw/flopjaw.vmdl",--大嘴咬人箱new
|
||
"models/courier/lockjaw/lockjaw.vmdl",--咬人箱洛克new
|
||
"models/items/courier/butch_pudge_dog/butch_pudge_dog.vmdl",--布狗new
|
||
"models/courier/turtle_rider/turtle_rider.vmdl",
|
||
"models/courier/smeevil_crab/smeevil_crab.vmdl",
|
||
"models/items/courier/mole_messenger/mole_messenger_lvl6.vmdl",--绿钻头矿车老鼠
|
||
"models/courier/navi_courier/navi_courier.vmdl",
|
||
"models/items/courier/courier_mvp_redkita/courier_mvp_redkita.vmdl",
|
||
"models/items/courier/ig_dragon/ig_dragon.vmdl",
|
||
"models/items/courier/lgd_golden_skipper/lgd_golden_skipper.vmdl",
|
||
"models/items/courier/vigilante_fox_red/vigilante_fox_red.vmdl",
|
||
"models/items/courier/virtus_werebear_t3/virtus_werebear_t3.vmdl",
|
||
"models/items/courier/throe/throe.vmdl",
|
||
"models/items/courier/vaal_the_animated_constructradiant/vaal_the_animated_constructradiant.vmdl",
|
||
"models/items/courier/vaal_the_animated_constructdire/vaal_the_animated_constructdire.vmdl",
|
||
"models/items/courier/carty/carty.vmdl",
|
||
"models/items/courier/carty_dire/carty_dire.vmdl",
|
||
"models/items/courier/dc_angel/dc_angel.vmdl",
|
||
"models/items/courier/dc_demon/dc_demon.vmdl",
|
||
"models/items/courier/vigilante_fox_green/vigilante_fox_green.vmdl",
|
||
"models/items/courier/bts_chirpy/bts_chirpy.vmdl",
|
||
"models/items/courier/krobeling/krobeling.vmdl",
|
||
"models/items/courier/jin_yin_black_fox/jin_yin_black_fox.vmdl",
|
||
"models/items/courier/jin_yin_white_fox/jin_yin_white_fox.vmdl",
|
||
"models/items/courier/fei_lian_blue/fei_lian_blue.vmdl",
|
||
"models/items/courier/gama_brothers/gama_brothers.vmdl",
|
||
"models/items/courier/onibi_lvl_21/onibi_lvl_21.vmdl",
|
||
"models/items/courier/wabbit_the_mighty_courier_of_heroes/wabbit_the_mighty_courier_of_heroes.vmdl", --小飞侠
|
||
"models/items/courier/hermit_crab/hermit_crab_octarine.vmdl", --螃蟹7
|
||
"models/items/courier/hermit_crab/hermit_crab_skady.vmdl", --螃蟹8
|
||
"models/items/courier/hermit_crab/hermit_crab_aegis.vmdl", --螃蟹9
|
||
"models/items/furion/treant_flower_1.vmdl",--绽放树精new
|
||
"models/courier/smeevil_magic_carpet/smeevil_magic_carpet.vmdl",
|
||
"models/items/courier/mole_messenger/mole_messenger_lvl7.vmdl",--绿钻头金矿车老鼠
|
||
"models/items/courier/krobeling_gold/krobeling_gold_flying.vmdl",--金dp
|
||
"models/props_gameplay/donkey.vmdl",
|
||
"particles/items2_fx/refresher.vpcf",
|
||
"soundevents/game_sounds_items.vsndevts",
|
||
"particles/speechbubbles/speech_voice.vpcf",
|
||
|
||
"soundevents/game_sounds_heroes/game_sounds_nevermore.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_batrider.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_luna.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_treant.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_dragon_knight.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_viper.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_medusa.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_disruptor.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_alchemist.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_techies.vsndevts",
|
||
"particles/econ/events/ti5/dagon_ti5.vpcf",
|
||
"particles/units/heroes/hero_monkey_king/monkey_king_fur_army_positions_ring_dragon.vpcf",
|
||
"particles/econ/items/legion/legion_overwhelming_odds_ti7/legion_commander_odds_ti7_proj_hit_streaks.vpcf",
|
||
"particles/units/heroes/hero_queenofpain/queen_sonic_wave.vpcf",
|
||
"models/props_gameplay/donkey_dire.vmdl",
|
||
"models/props_gameplay/donkey_dire_wings.vmdl",
|
||
"models/courier/baby_rosh/babyroshan_winter18.vmdl",
|
||
"effect/dizuo/1.vpcf",
|
||
"soundevents/voscripts/game_sounds_vo_lone_druid.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_furion.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_omniknight.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_morphling.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_terrorblade.vsndevts",
|
||
"particles/units/heroes/hero_chaos_knight/chaos_knight_phantasm.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_chaos_knight.vsndevts",
|
||
"models/items/kunkka/kunkka_immortal/kunkka_shark_immortal.vmdl",
|
||
"models/courier/frull/frull_courier.vmdl",
|
||
"models/items/courier/amaterasu/amaterasu.vmdl",
|
||
"models/items/courier/chocobo/chocobo.vmdl",
|
||
"models/items/courier/flightless_dod/flightless_dod.vmdl",
|
||
"models/items/courier/frostivus2018_courier_serac_the_seal/frostivus2018_courier_serac_the_seal.vmdl",
|
||
"models/items/courier/jumo_dire/jumo_dire.vmdl",
|
||
"models/items/courier/pangolier_squire/pangolier_squire.vmdl",
|
||
"models/items/courier/sltv_10_courier/sltv_10_courier.vmdl",
|
||
"models/items/courier/nian_courier/nian_courier.vmdl",
|
||
"models/items/courier/nilbog/nilbog.vmdl",
|
||
"particles/items_fx/blink_dagger_end.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_terrorblade.vsndevts",
|
||
"particles/units/heroes/hero_mirana/mirana_spell_arrow.vpcf",
|
||
"particles/econ/items/mirana/mirana_starstorm_bow/mirana_starstorm_starfall_attack.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_mirana.vsndevts",
|
||
"particles/units/heroes/hero_slark/slark_pounce_start.vpcf",
|
||
"particles/econ/items/slark/slark_ti6_blade/slark_ti6_pounce_start.vpcf",
|
||
"particles/econ/items/slark/slark_ti6_blade/slark_ti6_pounce_start_gold.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_zuus.vsndevts",
|
||
"particles/econ/items/zeus/arcana_chariot/zeus_arcana_thundergods_wrath_start_bolt_parent.vpcf",
|
||
"models/items/lycan/wolves/blood_moon_hunter_wolves/blood_moon_hunter_wolves.vmdl",
|
||
"models/items/lycan/ultimate/blood_moon_hunter_shapeshift_form/blood_moon_hunter_shapeshift_form.vmdl",
|
||
"models/items/courier/krobeling_gold/krobeling_gold.vmdl",
|
||
"models/items/courier/krobeling_gold/krobeling_gold_flying.vmdl",
|
||
"effect/jin_dp/courier_krobeling_gold_ambient.vpcf",
|
||
"effect/nianshou/courier_nian_ambient.vpcf",
|
||
"soundevents/game_sounds.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_announcer_killing_spree.vsndevts",
|
||
"effect/3sha/vr_killbanner_triplekill.vpcf",
|
||
"effect/5sha/vr_killbanner_rampage.vpcf",
|
||
"effect/zeus/victory/victory.vpcf",
|
||
"effect/god/1.vpcf",
|
||
"soundevents/voscripts/game_sounds_vo_zuus.vsndevts",
|
||
"soundevents/voscripts/game_sounds_vo_mars.vsndevts",
|
||
"effect/mars/2/e.vpcf",
|
||
"effect/mars/1/e.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_dazzle.vsndevts",
|
||
"soundevents/game_sounds_heroes/game_sounds_dark_seer.vsndevts",
|
||
"soundevents/music/game_sounds_stingers_diretide.vsndevts",
|
||
"particles/gem/brewmaster_drunken_haze_debuff_bubbles_2.vpcf",
|
||
"models/qie/qie.vmdl",
|
||
"models/courier/f2p_courier/f2p_courier.vmdl",
|
||
"models/items/courier/azuremircourierfinal/azuremircourierfinal.vmdl",
|
||
"effect/roshan_ti9/1.vpcf",
|
||
"models/items/axe/ti9_jungle_axe/axe_bare.vmdl",
|
||
"models/shudaixiong/model/shudaixiong/shudaixiong.vmdl",
|
||
"models/shudaixiong/model/shudaixiong_flying/shudaixiong_flying.vmdl",
|
||
"models/courier/baby_rosh/babyroshan_elemental.vmdl",
|
||
"particles/units/heroes/hero_grimstroke/grimstroke_soulchain_debuff.vpcf",
|
||
"soundevents/game_sounds_heroes/game_sounds_rubick.vsndevts",
|
||
|
||
"models/pets/armadillo/armadillo.vmdl",
|
||
"models/courier/baby_rosh/babyroshan_ti9.vmdl",
|
||
"models/heroes/invoker_kid/invoker_kid_trainer_dragon.vmdl",
|
||
|
||
"particles/econ/items/juggernaut/jugg_arcana/juggernaut_arcana_v2_idle_rare.vpcf",
|
||
|
||
"models/items/courier/courier_ti10_radiant/courier_ti10_radiant.vmdl",
|
||
|
||
-- TI10晴儿
|
||
"models/items/courier/courier_ti10_radiant/courier_ti10_radiant.vmdl",
|
||
"particles/econ/courier/courier_ti10/courier_ti10_lvl1_ambient.vpcf",
|
||
"models/items/courier/courier_ti10_radiant/courier_ti10_radiant_lvl2/courier_ti10_radiant_lvl2.vmdl",
|
||
"particles/econ/courier/courier_ti10/courier_ti10_lvl2_ambient.vpcf",
|
||
"models/items/courier/courier_ti10_radiant/courier_ti10_radiant_lvl3/courier_ti10_radiant_lvl3.vmdl",
|
||
"particles/econ/courier/courier_ti10/courier_ti10_lvl3_ambient.vpcf",
|
||
"models/items/courier/courier_ti10_radiant/courier_ti10_radiant_lvl4/courier_ti10_radiant_lvl4.vmdl",
|
||
"particles/econ/courier/courier_ti10/courier_ti10_lvl4_ambient.vpcf",
|
||
"models/items/courier/courier_ti10_radiant/courier_ti10_radiant_lvl5/courier_ti10_radiant_lvl5.vmdl",
|
||
"particles/econ/courier/courier_ti10/courier_ti10_lvl5_ambient.vpcf",
|
||
"models/items/courier/courier_ti10_radiant/courier_ti10_radiant_lvl6/courier_ti10_radiant_lvl6.vmdl",
|
||
"particles/econ/courier/courier_ti10/courier_ti10_lvl6_ambient.vpcf",
|
||
"models/items/courier/courier_ti10_radiant/courier_ti10_radiant_lvl7/courier_ti10_radiant_lvl7.vmdl",
|
||
"particles/econ/courier/courier_ti10/courier_ti10_lvl7_ambient.vpcf",
|
||
}
|
||
print("Precache mxx ...")
|
||
local t=table.maxn(mxx)
|
||
for i=1,t do
|
||
if string.find(mxx[i], ".vpcf") then
|
||
PrecacheResource( "particle", mxx[i], context)
|
||
end
|
||
if string.find(mxx[i], ".vmdl") then
|
||
PrecacheResource( "model", mxx[i], context)
|
||
end
|
||
if string.find(mxx[i], ".vsndevts") then
|
||
PrecacheResource( "soundfile", mxx[i], context)
|
||
end
|
||
end
|
||
end
|
||
|
||
function Activate()
|
||
GameRules.THTDGameMode = CTHTDGameMode()
|
||
GameRules.THTDGameMode:InitGameMode()
|
||
end
|
||
|
||
|
||
function CTHTDGameMode:InitGameMode()
|
||
GameRules:GetGameModeEntity():SetCameraDistanceOverride(1734.0)
|
||
GameRules:GetGameModeEntity():SetFogOfWarDisabled(true)
|
||
GameRules:GetGameModeEntity():SetUseCustomHeroLevels(true)
|
||
GameRules:GetGameModeEntity():SetCustomXPRequiredToReachNextLevel(self:SettingExp())
|
||
GameRules:GetGameModeEntity():SetCustomHeroMaxLevel(THTD_MAX_LEVEL)
|
||
GameRules:SetStartingGold(4500)
|
||
GameRules:SetGoldPerTick(0)
|
||
GameRules:GetGameModeEntity():SetLoseGoldOnDeath(false)
|
||
GameRules:SetSameHeroSelectionEnabled(true)
|
||
GameRules:SetHeroSelectionTime(10)
|
||
GameRules:SetPreGameTime(30)
|
||
GameRules:SetStrategyTime(0)
|
||
GameRules:SetShowcaseTime(0)
|
||
GameRules:SetUseUniversalShopMode(true)
|
||
GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_GOODGUYS, 4 )
|
||
GameRules:SetCustomGameTeamMaxPlayers( DOTA_TEAM_BADGUYS, 0 )
|
||
GameRules:SetCustomGameAllowBattleMusic( false )
|
||
GameRules:SetCustomGameAllowMusicAtGameStart( false )
|
||
|
||
-- GameRules:GetGameModeEntity():SetGoldSoundDisabled(true)
|
||
GameRules:GetGameModeEntity():SetNeutralStashEnabled(false)
|
||
GameRules:GetGameModeEntity():SetSendToStashEnabled(false)
|
||
GameRules:GetGameModeEntity():SetStashPurchasingDisabled(true)
|
||
|
||
GameRules:GetGameModeEntity():SetAlwaysShowPlayerNames(true)
|
||
GameRules:GetGameModeEntity():SetMaximumAttackSpeed(700) --显示会突破
|
||
GameRules:GetGameModeEntity():SetMinimumAttackSpeed(20)
|
||
GameRules:GetGameModeEntity():SetCustomBackpackSwapCooldown(0)
|
||
-- GameRules:GetGameModeEntity():SetAnnouncerDisabled(true)
|
||
GameRules:GetGameModeEntity():SetKillingSpreeAnnouncerDisabled(true)
|
||
-- GameRules:SetCustomGameAllowHeroPickMusic( false )
|
||
GameRules:GetGameModeEntity():SetCanSellAnywhere(true)
|
||
|
||
|
||
ListenToGameEvent('entity_killed', Dynamic_Wrap(CTHTDGameMode, 'OnEntityKilled'), self)
|
||
ListenToGameEvent('player_chat', Dynamic_Wrap(CTHTDGameMode, 'OnPlayerSay'), self)
|
||
ListenToGameEvent('game_rules_state_change', Dynamic_Wrap(CTHTDGameMode, 'OnGameRulesStateChange'), self)
|
||
ListenToGameEvent('player_connect_full', Dynamic_Wrap( CTHTDGameMode, 'OnPlayerConnected' ), self )
|
||
|
||
GameRules:GetGameModeEntity():SetExecuteOrderFilter(Dynamic_Wrap(CTHTDGameMode, 'ExecuteOrder'), self)
|
||
GameRules:GetGameModeEntity():SetItemAddedToInventoryFilter(Dynamic_Wrap(CTHTDGameMode, 'ItemAddedToInventory'), self)
|
||
GameRules:GetGameModeEntity():SetDamageFilter(Dynamic_Wrap(CTHTDGameMode, 'DamageFilter'), self)
|
||
GameRules:GetGameModeEntity():SetModifierGainedFilter(Dynamic_Wrap(CTHTDGameMode, 'ModifierFilter'), self)
|
||
GameRules:GetGameModeEntity():SetModifyGoldFilter(Dynamic_Wrap(CTHTDGameMode, 'OnModifyGoldFilter'), self)
|
||
GameRules:GetGameModeEntity():SetTPScrollSlotItemOverride("item_3121")
|
||
|
||
LinkLuaModifier("modifier_magical_armor", "modifiers/modifier_magical_armor", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_move_speed", "modifiers/modifier_move_speed", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_move_max_speed", "modifiers/modifier_move_max_speed", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_attack_speed", "modifiers/modifier_attack_speed", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_attack_time", "modifiers/modifier_attack_time", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_cooldown_reduce", "modifiers/modifier_cooldown_reduce", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2005_attack_aura", "modifiers/modifier_item_2005_attack_aura", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2005_attack_aura_effect", "modifiers/modifier_item_2005_attack_aura_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2006_mana_regen_aura", "modifiers/modifier_item_2006_mana_regen_aura", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2006_mana_regen_aura_effect", "modifiers/modifier_item_2006_mana_regen_aura_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2008_slow_aura", "modifiers/modifier_item_2008_slow_aura", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2008_slow_aura_effect", "modifiers/modifier_item_2008_slow_aura_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2009_damage", "modifiers/modifier_item_2009_damage", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2010_damage", "modifiers/modifier_item_2010_damage", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2011_attack_stun", "modifiers/modifier_item_2011_attack_stun", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2012_magical_damage_aura", "modifiers/modifier_item_2012_magical_damage_aura", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2012_magical_damage_aura_effect", "modifiers/modifier_item_2012_magical_damage_aura_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2013_physical_damage_aura", "modifiers/modifier_item_2013_physical_damage_aura", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2013_physical_damage_aura_effect", "modifiers/modifier_item_2013_physical_damage_aura_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2014_damage_aura", "modifiers/modifier_item_2014_damage_aura", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2014_damage_aura_effect", "modifiers/modifier_item_2014_damage_aura_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_item_2018_bonus_attack_range", "modifiers/modifier_item_2018_bonus_attack_range", LUA_MODIFIER_MOTION_NONE)
|
||
|
||
LinkLuaModifier("modifier_touhoutd_pause", "modifiers/modifier_touhoutd_pause", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_root", "modifiers/modifier_touhoutd_root", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_release_hidden", "modifiers/modifier_touhoutd_release_hidden", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_building", "modifiers/modifier_touhoutd_building", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_hidden_bar", "modifiers/modifier_hidden_bar", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_root_hidden_info", "modifiers/modifier_root_hidden_info", LUA_MODIFIER_MOTION_NONE)
|
||
|
||
LinkLuaModifier("modifier_touhoutd_luck", "modifiers/modifier_touhoutd_luck", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_poison", "modifiers/modifier_touhoutd_poison", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_damage_outgoing_pure", "modifiers/modifier_touhoutd_damage_outgoing_pure", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_damage_outgoing_physical", "modifiers/modifier_touhoutd_damage_outgoing_physical", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_damage_outgoing_magical", "modifiers/modifier_touhoutd_damage_outgoing_magical", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_damage_incoming_pure", "modifiers/modifier_touhoutd_damage_incoming_pure", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_damage_incoming_physical", "modifiers/modifier_touhoutd_damage_incoming_physical", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_damage_incoming_magical", "modifiers/modifier_touhoutd_damage_incoming_magical", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_crit_chance", "modifiers/modifier_touhoutd_crit_chance", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_crit_damage", "modifiers/modifier_touhoutd_crit_damage", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_touhoutd_unlimited_resist", "modifiers/modifier_touhoutd_unlimited_resist", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_base_attack_bonus_percent", "modifiers/modifier_base_attack_bonus_percent", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_manacost_reduce_percent", "modifiers/modifier_manacost_reduce_percent", LUA_MODIFIER_MOTION_NONE)
|
||
|
||
LinkLuaModifier("modifier_ability_power_common", "modifiers/power/modifier_ability_power_common", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_minoriko", "modifiers/power/modifier_ability_power_minoriko", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_sizuha", "modifiers/power/modifier_ability_power_sizuha", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_lily", "modifiers/power/modifier_ability_power_lily", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_shinki", "modifiers/power/modifier_ability_power_shinki", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_nazrin", "modifiers/power/modifier_ability_power_nazrin", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_byakuren", "modifiers/power/modifier_ability_power_byakuren", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_shikieiki", "modifiers/power/modifier_ability_power_shikieiki", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_reimu", "modifiers/power/modifier_ability_power_reimu", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_flandre", "modifiers/power/modifier_ability_power_flandre", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_koishi", "modifiers/power/modifier_ability_power_koishi", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_hecatia", "modifiers/power/modifier_ability_power_hecatia", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_yuuka", "modifiers/power/modifier_ability_power_yuuka", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_daiyousei", "modifiers/power/modifier_ability_power_daiyousei", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_kanako", "modifiers/power/modifier_ability_power_kanako", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_yukari", "modifiers/power/modifier_ability_power_yukari", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_miko", "modifiers/power/modifier_ability_power_miko", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_eirin", "modifiers/power/modifier_ability_power_eirin", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_komachi", "modifiers/power/modifier_ability_power_komachi", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_remilia", "modifiers/power/modifier_ability_power_remilia", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_ability_power_junko", "modifiers/power/modifier_ability_power_junko", LUA_MODIFIER_MOTION_NONE)
|
||
|
||
LinkLuaModifier("modifier_bb_buff_3011", "modifiers/battle_buff/modifier_bb_buff_3011", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3011_effect", "modifiers/battle_buff/modifier_bb_buff_3011_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3012", "modifiers/battle_buff/modifier_bb_buff_3012", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3013", "modifiers/battle_buff/modifier_bb_buff_3013", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3014", "modifiers/battle_buff/modifier_bb_buff_3014", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3015", "modifiers/battle_buff/modifier_bb_buff_3015", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3015_effect", "modifiers/battle_buff/modifier_bb_buff_3015_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3016", "modifiers/battle_buff/modifier_bb_buff_3016", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3016_effect", "modifiers/battle_buff/modifier_bb_buff_3016_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3017", "modifiers/battle_buff/modifier_bb_buff_3017", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3018", "modifiers/battle_buff/modifier_bb_buff_3018", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3019", "modifiers/battle_buff/modifier_bb_buff_3019", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3020", "modifiers/battle_buff/modifier_bb_buff_3020", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3021", "modifiers/battle_buff/modifier_bb_buff_3021", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3023", "modifiers/battle_buff/modifier_bb_buff_3023", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3024", "modifiers/battle_buff/modifier_bb_buff_3024", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3025", "modifiers/battle_buff/modifier_bb_buff_3025", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3026", "modifiers/battle_buff/modifier_bb_buff_3026", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3027", "modifiers/battle_buff/modifier_bb_buff_3027", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3028", "modifiers/battle_buff/modifier_bb_buff_3028", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3029", "modifiers/battle_buff/modifier_bb_buff_3029", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3030", "modifiers/battle_buff/modifier_bb_buff_3030", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bb_buff_3031", "modifiers/battle_buff/modifier_bb_buff_3031", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_fairy_count", "modifiers/battle_buff/modifier_fairy_count", LUA_MODIFIER_MOTION_NONE)
|
||
|
||
LinkLuaModifier("modifier_bosses_alice", "modifiers/bosses/modifier_bosses_alice", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_aya", "modifiers/bosses/modifier_bosses_aya", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_hina", "modifiers/bosses/modifier_bosses_hina", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_hina_aura_effect", "modifiers/bosses/modifier_bosses_hina_aura_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_kaguya", "modifiers/bosses/modifier_bosses_kaguya", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_keine", "modifiers/bosses/modifier_bosses_keine", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_kisume", "modifiers/bosses/modifier_bosses_kisume", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_marisa", "modifiers/bosses/modifier_bosses_marisa", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_minoriko", "modifiers/bosses/modifier_bosses_minoriko", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_mokou", "modifiers/bosses/modifier_bosses_mokou", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_mokou_aura_effect", "modifiers/bosses/modifier_bosses_mokou_aura_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_rumia", "modifiers/bosses/modifier_bosses_rumia", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_yuugi", "modifiers/bosses/modifier_bosses_yuugi", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_random_resist_aura", "modifiers/bosses/modifier_bosses_random_resist_aura", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_random_resist_effect", "modifiers/bosses/modifier_bosses_random_resist_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_random_attack_speed_aura", "modifiers/bosses/modifier_bosses_random_attack_speed_aura", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_random_attack_speed_effect", "modifiers/bosses/modifier_bosses_random_attack_speed_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_random_move_aura", "modifiers/bosses/modifier_bosses_random_move_aura", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_random_move_effect", "modifiers/bosses/modifier_bosses_random_move_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_random_health_aura", "modifiers/bosses/modifier_bosses_random_health_aura", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_random_health_effect", "modifiers/bosses/modifier_bosses_random_health_effect", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_random_dead_heal", "modifiers/bosses/modifier_bosses_random_dead_heal", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_random_aura_dark", "modifiers/bosses/modifier_bosses_random_aura_dark", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_bosses_random_aura_dark_effect", "modifiers/bosses/modifier_bosses_random_aura_dark_effect", LUA_MODIFIER_MOTION_NONE)
|
||
|
||
LinkLuaModifier("modifier_courier_fx", "modifiers/effects/modifier_courier_fx", LUA_MODIFIER_MOTION_NONE)
|
||
LinkLuaModifier("modifier_rainbow_tail", "modifiers/effects/modifier_rainbow_tail", LUA_MODIFIER_MOTION_NONE)
|
||
|
||
|
||
|
||
CustomNetTables:SetTableValue("CustomGameInfo", "thtd_tower_list", towerNameList)
|
||
print("\n---------- InitGameMode Finished ----------")
|
||
|
||
GameRules:GetGameModeEntity():SetContextThink(DoUniqueString("collectgarbage"),
|
||
function()
|
||
local m = collectgarbage('count')
|
||
print(string.format("[Lua Memory] %.3f KB %.3f MB", m, m/1024))
|
||
return 60
|
||
end,
|
||
60)
|
||
end
|
||
|
||
function CTHTDGameMode:SettingExp()
|
||
-- 总和5400
|
||
-- 经验分配规则 保底 1X每只30点 2X每只20点,3X每只10点,4X每只6点,5X每只3点
|
||
-- 单吃一个兵经验 300点 200点 100点 60点 30点
|
||
-- 经验获取率1X 100% 2X 2/3 3X 1/3 4X 1/5 5X 1/10
|
||
-- 素材培养 (1000+素材卡牌经验/5)* 星级
|
||
|
||
local HERO_EXP_TABLE = {0}
|
||
local exp = {200,300,400,500,600,700,800,900,1000}
|
||
local xp = 0
|
||
|
||
for i = 2, THTD_MAX_LEVEL-1 do
|
||
HERO_EXP_TABLE[i]=HERO_EXP_TABLE[i-1]+exp[i-1]
|
||
end
|
||
|
||
return HERO_EXP_TABLE
|
||
end
|
||
|
||
|
||
function CTHTDGameMode:OnDotaItemPickedUp(keys)
|
||
local item = EntIndexToHScript(keys.ItemEntityIndex)
|
||
if item == nil then return end
|
||
if item.locked_by_player_id == nil or item.locked_by_player_id == keys.PlayerID or item.card_poor_player_id == keys.PlayerID then return end
|
||
-- local heroes = Entities:FindAllByClassname("npc_dota_hero_lina")
|
||
for _,hero in pairs(GameRules.HeroList) do
|
||
if hero.thtd_player_id == item.locked_by_player_id and hero.is_game_over == true then return end
|
||
end
|
||
|
||
local picker = nil
|
||
if keys.HeroEntityIndex ~= nil then
|
||
picker = EntIndexToHScript(keys.HeroEntityIndex)
|
||
elseif keys.UnitEntityIndex ~= nil then
|
||
picker = EntIndexToHScript(keys.UnitEntityIndex)
|
||
end
|
||
if picker == nil then return end
|
||
CustomGameEventManager:Send_ServerToPlayer(picker:GetPlayerOwner() , "display_custom_error", {msg="item_is_locked"})
|
||
picker:DropItemAtPositionImmediate(item, picker:GetOrigin())
|
||
end
|
||
|
||
|
||
function CTHTDGameMode:OnGameRulesStateChange(keys)
|
||
local newState = GameRules:State_Get()
|
||
local stateText = {
|
||
[0] = "DOTA_GAMERULES_STATE_INIT",
|
||
[1] = "DOTA_GAMERULES_STATE_WAIT_FOR_PLAYERS_TO_LOAD",
|
||
[2] = "DOTA_GAMERULES_STATE_CUSTOM_GAME_SETUP",
|
||
[3] = "DOTA_GAMERULES_STATE_HERO_SELECTION",
|
||
[4] = "DOTA_GAMERULES_STATE_STRATEGY_TIME",
|
||
[5] = "DOTA_GAMERULES_STATE_TEAM_SHOWCASE",
|
||
[6] = "DOTA_GAMERULES_STATE_PRE_GAME",
|
||
[7] = "DOTA_GAMERULES_STATE_GAME_IN_PROGRESS",
|
||
[8] = "DOTA_GAMERULES_STATE_POST_GAME",
|
||
[9] = "DOTA_GAMERULES_STATE_DISCONNECT",
|
||
}
|
||
print("-------- Now State: ", stateText[newState])
|
||
if newState == DOTA_GAMERULES_STATE_CUSTOM_GAME_SETUP then
|
||
self:GameStateCustomGameSetup()
|
||
Service:LoadGameData()
|
||
|
||
elseif newState == DOTA_GAMERULES_STATE_STRATEGY_TIME then
|
||
ListenToGameEvent('npc_spawned', Dynamic_Wrap( CTHTDGameMode, 'OnNpcSpawned' ), self )
|
||
ListenToGameEvent('dota_item_picked_up', Dynamic_Wrap(CTHTDGameMode, 'OnDotaItemPickedUp'), self)
|
||
ListenToGameEvent('dota_non_player_used_ability', Dynamic_Wrap(CTHTDGameMode, 'OnDotaNonPlayerUsedAbility'), self)
|
||
|
||
-------- 设置游戏难度 --------
|
||
local level = {[0]=0,[1]=0,[2]=0,[3]=0,[4]=0,[5]=0,[6]=0}
|
||
for k,v in pairs(PlayersSelectedDifficulty) do
|
||
level[v] = (level[v] or 0) + 1
|
||
end
|
||
local difficulty = 0
|
||
for k,v in pairs(level) do
|
||
if k ~= difficulty and level[k] > level[difficulty] then
|
||
difficulty = k
|
||
end
|
||
end
|
||
difficulty = difficulty + 1
|
||
GameRules:SetCustomGameDifficulty(difficulty)
|
||
|
||
-- 初始化金钱
|
||
for i=0, PlayerResource:GetPlayerCount()-1 do
|
||
if PlayerResource:IsValidPlayerID(i) then
|
||
-- PlayerResource:ModifyGold(i, 4500 - 600 , true, DOTA_ModifyGold_Unspecified)
|
||
PlayerResource:SetLastBuybackTime(i, 0)
|
||
end
|
||
end
|
||
|
||
elseif newState == DOTA_GAMERULES_STATE_PRE_GAME then
|
||
Service:GetRank()
|
||
SpawnSystem:PreSpawn()
|
||
-- 解除地图购买上限
|
||
SendToServerConsole("dota_max_physical_items_purchase_limit 59999")
|
||
|
||
elseif newState == DOTA_GAMERULES_STATE_GAME_IN_PROGRESS then
|
||
SpawnSystem:InitSpawn()
|
||
for i=0, PlayerResource:GetPlayerCount()-1 do
|
||
if PlayerResource:GetTeam(i) == DOTA_TEAM_GOODGUYS then
|
||
if GameRules.PlayerData[i].ban == 1 then
|
||
CustomGameEventManager:Send_ServerToPlayer(PlayerResource:GetPlayer(i), "display_chat_msg", {msg="game_ban_tip", params={player_name=PlayerResource:GetPlayerName(i),reason=GameRules.PlayerData[i].reason}})
|
||
for _,hero in pairs(GameRules.HeroList) do
|
||
if hero.thtd_player_id == i then
|
||
SpawnSystem:GameOver(hero)
|
||
break
|
||
end
|
||
end
|
||
elseif GameRules.PlayerData[i].vip == 1 then
|
||
CustomGameEventManager:Send_ServerToPlayer(PlayerResource:GetPlayer(i), "show_message", {msg="game_start_vip_tip", duration=60, params={name=PlayerResource:GetPlayerName(i),endtime=GameRules.PlayerData[i].end_time}, color="#ff0"})
|
||
end
|
||
GameRules.HeroList[i]:RemoveModifierByName("modifier_rainbow_tail")
|
||
end
|
||
end
|
||
|
||
if GameRules.GameData.luck_card == "all" then
|
||
CustomGameEventManager:Send_ServerToAllClients("thtd_server_msg", {code = "0000", msg = "无限潜力活动开启,开局可选潜能Lv999的凤凰之灵!", duration = 15, pos = -150})
|
||
EmitAnnouncerSound("Quest.Completed")
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 全局变量定义
|
||
function CTHTDGameMode:GameStateCustomGameSetup()
|
||
-- 预设,数据载入完成最终设置一次
|
||
local heroNames = {
|
||
"npc_dota_hero_lina",
|
||
"npc_dota_hero_juggernaut",
|
||
}
|
||
for i=0, PlayerResource:GetPlayerCount()-1 do
|
||
PlayerResource:SetCustomTeamAssignment(i, DOTA_TEAM_GOODGUYS)
|
||
local player = PlayerResource:GetPlayer(i)
|
||
if player then
|
||
CreateHeroForPlayer(heroNames[RandomInt(1, #heroNames)], player):RemoveSelf()
|
||
end
|
||
end
|
||
print("Heros setup")
|
||
|
||
-- 玩家信息定义,按playerid的steamid、dota2帐户、玩家名称、英雄index信息、黑白名单及宠物信息
|
||
GameRules.PlayerData = { }
|
||
|
||
-- 英雄列表定义,按playerid,出生时初始化
|
||
GameRules.HeroList = {}
|
||
|
||
-- 战利品buff定义
|
||
GameRules.player_bb_buff = {}
|
||
|
||
-- 按玩家id初始化
|
||
for i=0, PlayerResource:GetPlayerCount()-1 do
|
||
-- 玩家信息
|
||
GameRules.PlayerData[i] = {
|
||
["code"] = "",
|
||
["msg"] = "",
|
||
|
||
["steamid"] = tostring(PlayerResource:GetSteamID(i)),
|
||
["userid"] = tostring(PlayerResource:GetSteamAccountID(i)),
|
||
["name"] = PlayerResource:GetPlayerName(i),
|
||
["hero_index"] = 0,
|
||
|
||
["max_wave"] = 0,
|
||
["max_team_wave"] = 0,
|
||
|
||
["point"] = 0,
|
||
["level_list"] = {},
|
||
|
||
["vip"] = 0,
|
||
["ban"] = 0,
|
||
["pet_level"] = 1,
|
||
["end_time"] = "",
|
||
["reason"] = "",
|
||
["pet_model"] = "h000",
|
||
["pet_effect"] = "e000",
|
||
|
||
["is_first_win"] = 0,
|
||
["key_total"] = 0,
|
||
["key_use_count"] = 0,
|
||
["power_max_total"] = 0,
|
||
|
||
["cardgroup1"] = {},
|
||
["cardgroup2"] = {},
|
||
["cardgroup3"] = {},
|
||
["cardgroup4"] = {},
|
||
["cardgroup5"] = {},
|
||
|
||
["update_time"] = ""
|
||
}
|
||
|
||
-- 英雄列表
|
||
GameRules.HeroList[i] = nil
|
||
|
||
-- 战利品buff
|
||
GameRules.player_bb_buff[i] = {
|
||
["item_3011"] = 0, -- 地灵殿单位物理伤害提升量
|
||
["item_3011_effect"] = 0, -- 实际加成
|
||
["item_3012"] = 0, -- 抽卡额外获得的一张卡牌的概率
|
||
["item_3013"] = 1, -- 无敌意识的负面效果比例
|
||
["item_3014"] = 0, -- 主角组无尽后每击杀100个单位增加的能量点数(灵梦、魔理沙、东方谷早苗、爱丽丝)
|
||
["item_3015"] = 0, -- 月之民纯粹伤害提升数值
|
||
["item_3015_effect"] = 0, -- 实际加成
|
||
["item_3016"] = 0, -- 所有召唤物+150攻击力和+30%%攻速的倍数
|
||
["item_3017"] = 0, -- 每有一个外圈漏怪,则全体单位伤害提升量
|
||
["item_3018"] = 1, -- 抽卡价格优惠度,乘法叠加
|
||
["item_3019"] = 0, -- 每波最后3秒如果漏怪数量达到30则造成的伤害提高量
|
||
["item_3019_enable"] = false, -- 是否正在触发
|
||
["item_3020"] = 0, -- 同名卡上场最大数量增加量
|
||
["item_3021"] = 0, -- 秒杀伤害上限提高量
|
||
["item_3023"] = 0, -- 神灵庙单位的相机4件套效果加成和神子附加伤害加成效果提高量
|
||
["item_3024"] = 0, -- 守矢神社的信仰收集上限提高量
|
||
["item_3025"] = 0, -- 红魔馆单位的触发类技能的概率增加量
|
||
["item_3026"] = 0, -- 怪物移动速度降低量
|
||
["item_3027"] = 0, -- 星莲船单位装备提供的属性效果提高量
|
||
["item_3028"] = 0, -- 鬼族单位效果层数
|
||
["item_3028_effect"] = 0, -- 实际加成
|
||
["item_3029"] = 0, -- 四季馈赠量
|
||
["item_3030"] = 0, -- 分身加成效果提高量
|
||
}
|
||
end
|
||
end
|
||
|
||
|
||
function CTHTDGameMode:OnPlayerConnected(keys)
|
||
print("----player_connect_full")
|
||
CustomGameEventManager:Send_ServerToAllClients("debug_msg", {msg = PlayerResource:GetPlayerName(keys.PlayerID).." 连接完成!"})
|
||
end
|
||
|
||
|
||
function CTHTDGameMode:OnNpcSpawned(keys)
|
||
local hero = EntIndexToHScript(keys.entindex)
|
||
if hero:IsRealHero() and hero.isFirstSpawn ~= false then
|
||
hero.isFirstSpawn = false
|
||
hero.thtd_hero_tower_list = {}
|
||
hero.thtd_hero_damage_list ={}
|
||
hero.thtd_combo_voice_array = {}
|
||
hero.thtd_emoji_effect = nil
|
||
|
||
hero.thtd_game_info = {}
|
||
hero.thtd_game_info["creep_count"] = 0
|
||
hero.thtd_game_info["creep_count_max"] = 0
|
||
hero.thtd_game_info["food_count"] = 0
|
||
hero.thtd_game_info["creature_kill_count"] = 0
|
||
hero.thtd_game_info["max_wave_damage"] = 0
|
||
hero.thtd_game_info["max_wave"] = 0
|
||
hero.thtd_game_info["is_player_connected"] = 0
|
||
|
||
hero.thtd_chance_count = {}
|
||
hero.is_game_over = false
|
||
hero.thtd_wave_total_health = 0
|
||
|
||
hero:SetTeam(DOTA_TEAM_GOODGUYS)
|
||
|
||
-- 判定是否上巅峰榜
|
||
if PlayerResource:GetPlayerCountForTeam(DOTA_TEAM_GOODGUYS) > 1 and GameRules:GetCustomGameDifficulty() ~= PVE_MODE then
|
||
hero.is_team_mode = true
|
||
else
|
||
hero.is_team_mode = false
|
||
end
|
||
|
||
local playerId = hero:GetPlayerOwnerID()
|
||
hero.thtd_player_id = playerId
|
||
hero.spawn_position = SpawnSystem.SpawnOrigin[playerId+1]
|
||
hero:SetAbsOrigin(hero.spawn_position)
|
||
hero:SetContextThink(DoUniqueString("SetSpawn") ,
|
||
function()
|
||
if GameRules:IsGamePaused() then return 0.1 end
|
||
if GetDistanceBetweenTwoVec2D(hero:GetOrigin(), hero.spawn_position) > 1000 then
|
||
hero:SetAbsOrigin(hero.spawn_position)
|
||
PlayerResource:SetCameraTarget(hero:GetPlayerID(), hero)
|
||
return 0.5
|
||
else
|
||
PlayerResource:SetCameraTarget(hero:GetPlayerID(), nil)
|
||
end
|
||
return nil
|
||
end,
|
||
0.5)
|
||
|
||
UnitNoPathingfix( hero,hero,-1)
|
||
|
||
hero:AddNewModifier(hero, nil, "modifier_phased", nil)
|
||
hero:AddNewModifier(hero, nil, "modifier_hidden_bar", nil)
|
||
hero:AddNewModifier(hero, nil, "modifier_rainbow_tail", nil)
|
||
|
||
if GameRules.PlayerData[playerId].power_max_total > 0 then
|
||
for i=1,GameRules.PlayerData[playerId].power_max_total do
|
||
local item = CreateItem("item_3149", nil, nil)
|
||
if item ~= nil then
|
||
item.owner_player_id = playerId
|
||
item:SetPurchaser(hero)
|
||
hero:AddItem(item)
|
||
end
|
||
if i == 4 then
|
||
break
|
||
end
|
||
end
|
||
end
|
||
|
||
GameRules.PlayerData[playerId]["hero_index"] = keys.entindex
|
||
GameRules.HeroList[playerId] = hero
|
||
|
||
for i=0,7 do
|
||
local ability=hero:GetAbilityByIndex(i)
|
||
if ability ~= nil then
|
||
ability:SetLevel(1)
|
||
end
|
||
end
|
||
|
||
hero:SetContextThink(DoUniqueString("delete_tp"),
|
||
function()
|
||
if GameRules:IsGamePaused() then return 0.03 end
|
||
for i=0,THTD_MAX_ITEM_SLOT-1 do
|
||
local hTP = hero:GetItemInSlot(i)
|
||
if hTP ~= nil and hTP:GetAbilityName() == "item_tpscroll" then
|
||
UTIL_Remove( hTP )
|
||
end
|
||
end
|
||
return nil
|
||
end,
|
||
2.0)
|
||
|
||
local shop = CreateUnitByName(
|
||
"minoriko_shop",
|
||
SpawnSystem.ShopOrigin[hero:GetPlayerOwnerID()+1],
|
||
false,
|
||
hero,
|
||
hero,
|
||
hero:GetTeam()
|
||
)
|
||
shop:SetControllableByPlayer(hero:GetPlayerOwnerID(), true)
|
||
shop:SetHasInventory(true)
|
||
shop:AddNewModifier(shop, nil, "modifier_root_hidden_info", nil)
|
||
shop.hero = hero
|
||
hero.shop = shop
|
||
shop:SetContextThink(DoUniqueString("set_shop_forward"),
|
||
function()
|
||
if GameRules:IsGamePaused() then return 0.1 end
|
||
shop:MoveToPosition(shop:GetOrigin()+SpawnSystem.ShopForward[hero:GetPlayerOwnerID()+1])
|
||
return nil
|
||
end,
|
||
1.0)
|
||
|
||
if GameRules:GetCustomGameDifficulty() >= FUNNY_MODE then
|
||
hero:SetContextThink(DoUniqueString("set_gold_bonus") ,
|
||
function()
|
||
if GameRules:IsGamePaused() then return 0.1 end
|
||
if SpawnSystem.IsUnLimited then return nil end
|
||
THTD_ModifyGoldEx(playerId, math.min(SpawnSystem.CurWave * 25, 500) , true, DOTA_ModifyGold_Unspecified)
|
||
return 1
|
||
end,
|
||
10)
|
||
end
|
||
|
||
-- local tree = CreateUnitByName(
|
||
-- "christmas_tree",
|
||
-- hero.spawn_position,
|
||
-- false,
|
||
-- hero,
|
||
-- hero,
|
||
-- hero:GetTeam()
|
||
-- )
|
||
|
||
local unit = CreateUnitByName(
|
||
"reimu_pet"
|
||
,hero:GetOrigin() + hero:GetForwardVector() * 500
|
||
,false
|
||
,hero
|
||
,hero
|
||
,hero:GetTeam()
|
||
)
|
||
if unit ~= nil then
|
||
FindClearSpaceForUnit(unit, unit:GetOrigin(), false)
|
||
unit:SetControllableByPlayer(hero:GetPlayerOwnerID(), false)
|
||
unit:SetOwner(hero)
|
||
unit:SetHasInventory(true)
|
||
unit:FindAbilityByName("reimu_pet_01"):CastAbility()
|
||
|
||
local items = {"item_3003", "item_3004", "item_3007"}
|
||
for _,itemName in pairs(items) do
|
||
local item = CreateItem(itemName, nil, nil)
|
||
if item ~= nil then
|
||
item.owner_player_id = hero.thtd_player_id
|
||
unit:AddItem(item)
|
||
end
|
||
end
|
||
|
||
local reimu_pet_sound =
|
||
{
|
||
"UI.Aowu",
|
||
"Icewrack_Pup.Ult.Howl",
|
||
"Icewrack_Pup.Flee",
|
||
"Icewrack_Pup.idle_alt_bark",
|
||
"Icewrack_Pup.Alert",
|
||
"Icewrack_Pup.Happy",
|
||
"Icewrack_Pup.Breath",
|
||
}
|
||
|
||
unit:SetContextThink(DoUniqueString("reimu_pet_think"),
|
||
function()
|
||
if unit:IsStunned() then return nil end
|
||
THTD_ModifyGoldEx(playerId)
|
||
|
||
local point = unit.pet_point
|
||
if point == nil then
|
||
point = hero:GetAbsOrigin()
|
||
end
|
||
local d = GetDistanceBetweenTwoVec2D(point, unit:GetOrigin())
|
||
if d > 1800 then
|
||
if unit:IsStunned() then return nil end
|
||
FindClearSpaceForUnit(unit, point + hero:GetForwardVector() * 500, false)
|
||
unit:EmitSound("Sound_THTD.ability_touhoutd_blink.End")
|
||
return 1.0
|
||
elseif d > 1200 then
|
||
local forward = (unit:GetAbsOrigin() - point):Normalized()
|
||
unit:MoveToPosition(point + forward * 500)
|
||
return 1.0
|
||
else
|
||
if RollPercentage(85) then return 1.0 end
|
||
local rad = RandomInt(1, 360)
|
||
local distance = RandomInt(500, 1180)
|
||
local moveToPoint = point +
|
||
Vector(
|
||
math.cos(rad * math.pi/180) * distance,
|
||
math.sin(rad * math.pi/180) * distance,
|
||
0)
|
||
unit:MoveToPosition(moveToPoint)
|
||
if RollPercentage(10) then
|
||
unit:EmitSound(reimu_pet_sound[RandomInt(1, #reimu_pet_sound)])
|
||
end
|
||
end
|
||
return 1.0
|
||
end,
|
||
1.0)
|
||
hero.reimu_pet = unit
|
||
end
|
||
|
||
return
|
||
end
|
||
end
|
||
|
||
|
||
function CTHTDGameMode:OnEntityKilled(keys)
|
||
if keys.entindex_killed == nil or keys.entindex_attacker == nil then return end
|
||
|
||
-- 储存被击杀的单位
|
||
local killedUnit = EntIndexToHScript( keys.entindex_killed )
|
||
-- 储存杀手单位
|
||
local killerEntity = EntIndexToHScript( keys.entindex_attacker )
|
||
|
||
local id = killedUnit.thtd_player_index
|
||
|
||
local findNum = string.find(killedUnit:GetUnitName(), 'creature')
|
||
if findNum ~= nil then
|
||
if not SpawnSystem.IsUnLimited then
|
||
local expRange = 1500
|
||
local targets = THTD_FindFriendlyUnitsInRadius(killerEntity,killedUnit:GetOrigin(),expRange)
|
||
local expUnits = {}
|
||
for k,v in pairs(targets) do
|
||
if v ~= nil and v:IsNull()==false and v:THTD_IsTower() and v:THTD_GetLevel() < THTD_MAX_LEVEL then
|
||
table.insert(expUnits,v)
|
||
end
|
||
end
|
||
targets = {}
|
||
|
||
local factor = 1
|
||
if GameRules:GetCustomGameDifficulty() >= FUNNY_MODE then
|
||
factor = 1.5
|
||
end
|
||
local totalNum = #expUnits
|
||
if totalNum > 0 then
|
||
for k,v in pairs(expUnits) do
|
||
v:THTD_AddExp(math.floor(factor * killedUnit:GetDeathXP() / totalNum + 0.5))
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 物品掉落
|
||
-- local vHitLoc = killedUnit:GetAttachmentOrigin(killedUnit:ScriptLookupAttachment("attach_hitloc"))
|
||
-- local drop = CreateItemOnPositionSync(vHitLoc, item)
|
||
-- drop:SetModelScale(drop:GetModelScale() * (item:THTD_GetCardQuality() or 2) * 0.5)
|
||
-- item:LaunchLootInitialHeight(false, vHitLoc.z, vHitLoc.z+300, 2.0, killedUnit:GetAbsOrigin() + RandomVector(300))
|
||
|
||
if killedUnit.thtd_is_outer == true then
|
||
for k,v in pairs(THTD_EntitiesRectOuter) do
|
||
if v == killedUnit then
|
||
table.remove(THTD_EntitiesRectOuter, k)
|
||
break
|
||
end
|
||
end
|
||
elseif id ~= nil then
|
||
for k,v in pairs(THTD_EntitiesRectInner[id]) do
|
||
if v == killedUnit then
|
||
table.remove(THTD_EntitiesRectInner[id], k)
|
||
break
|
||
end
|
||
end
|
||
end
|
||
|
||
killedUnit:AddNoDraw()
|
||
|
||
local effectIndex = ParticleManager:CreateParticle("particles/thd2/environment/death/act_hero_die.vpcf", PATTACH_CUSTOMORIGIN, nil)
|
||
ParticleManager:SetParticleControl(effectIndex, 0, killedUnit:GetOrigin())
|
||
ParticleManager:SetParticleControl(effectIndex, 1, killedUnit:GetOrigin())
|
||
ParticleManager:DestroyParticleSystem(effectIndex,false)
|
||
|
||
local hero = GameRules.HeroList[killerEntity:GetPlayerOwnerID()]
|
||
if hero == nil then return end
|
||
hero.thtd_game_info["creature_kill_count"] = hero.thtd_game_info["creature_kill_count"] + 1
|
||
end
|
||
end
|
||
|
||
function CTHTDGameMode:OnPlayerSay(keys)
|
||
-- if tostring(PlayerResource:GetSteamID(keys.playerid)) ~= GameRules.GameData.admin then return end
|
||
|
||
local text = keys.text
|
||
if string.sub(text,1,1) ~= "-" then
|
||
return
|
||
end
|
||
|
||
if text == "-6" then
|
||
local player = PlayerResource:GetPlayer(keys.playerid)
|
||
local hero = player:GetAssignedHero()
|
||
ParticleManager:DestroyParticleSystem(hero.thtd_emoji_effect,true)
|
||
hero.thtd_emoji_effect = ParticleManager:CreateParticle("particles/thtd/emoji/thtd_msg_hongliange.vpcf", PATTACH_OVERHEAD_FOLLOW, hero)
|
||
ParticleManager:SetParticleControlEnt(hero.thtd_emoji_effect , 0, hero, PATTACH_OVERHEAD_FOLLOW, "attach_hitloc", Vector(0,0,0), true) --灵梦用 attach_emoji
|
||
ParticleManager:SetParticleControl(hero.thtd_emoji_effect, 3, Vector(1,0,0))
|
||
ParticleManager:DestroyParticleSystemTime(hero.thtd_emoji_effect,5.0)
|
||
return
|
||
end
|
||
if text == "-7" then
|
||
local player = PlayerResource:GetPlayer(keys.playerid)
|
||
local hero = player:GetAssignedHero()
|
||
ParticleManager:DestroyParticleSystem(hero.thtd_emoji_effect,true)
|
||
hero.thtd_emoji_effect = ParticleManager:CreateParticle("particles/thtd/emoji/thtd_msg_hongliange.vpcf", PATTACH_OVERHEAD_FOLLOW, hero)
|
||
ParticleManager:SetParticleControlEnt(hero.thtd_emoji_effect , 0, hero, PATTACH_OVERHEAD_FOLLOW, "attach_hitloc", Vector(0,0,0), true)
|
||
ParticleManager:SetParticleControl(hero.thtd_emoji_effect, 3, Vector(2,0,0))
|
||
ParticleManager:DestroyParticleSystemTime(hero.thtd_emoji_effect,5.0)
|
||
return
|
||
end
|
||
if text == "-8" then
|
||
local player = PlayerResource:GetPlayer(keys.playerid)
|
||
local hero = player:GetAssignedHero()
|
||
ParticleManager:DestroyParticleSystem(hero.thtd_emoji_effect,true)
|
||
hero.thtd_emoji_effect = ParticleManager:CreateParticle("particles/thtd/emoji/thtd_msg_hongliange.vpcf", PATTACH_OVERHEAD_FOLLOW, hero)
|
||
ParticleManager:SetParticleControlEnt(hero.thtd_emoji_effect , 0, hero, PATTACH_OVERHEAD_FOLLOW, "attach_hitloc", Vector(0,0,0), true)
|
||
ParticleManager:SetParticleControl(hero.thtd_emoji_effect, 3, Vector(3,0,0))
|
||
ParticleManager:DestroyParticleSystemTime(hero.thtd_emoji_effect,5.0)
|
||
return
|
||
end
|
||
if text == "-9" then
|
||
local player = PlayerResource:GetPlayer(keys.playerid)
|
||
local hero = player:GetAssignedHero()
|
||
ParticleManager:DestroyParticleSystem(hero.thtd_emoji_effect,true)
|
||
hero.thtd_emoji_effect = ParticleManager:CreateParticle("particles/thtd/emoji/thtd_msg_hongliange.vpcf", PATTACH_OVERHEAD_FOLLOW, hero)
|
||
ParticleManager:SetParticleControlEnt(hero.thtd_emoji_effect , 0, hero, PATTACH_OVERHEAD_FOLLOW, "attach_hitloc", Vector(0,0,0), true)
|
||
ParticleManager:SetParticleControl(hero.thtd_emoji_effect, 3, Vector(4,0,0))
|
||
ParticleManager:DestroyParticleSystemTime(hero.thtd_emoji_effect,5.0)
|
||
return
|
||
end
|
||
if text == "-0" then
|
||
local player = PlayerResource:GetPlayer(keys.playerid)
|
||
local hero = player:GetAssignedHero()
|
||
ParticleManager:DestroyParticleSystem(hero.thtd_emoji_effect,true)
|
||
hero.thtd_emoji_effect = ParticleManager:CreateParticle("particles/thtd/emoji/thtd_msg_hongliange.vpcf", PATTACH_OVERHEAD_FOLLOW, hero)
|
||
ParticleManager:SetParticleControlEnt(hero.thtd_emoji_effect , 0, hero, PATTACH_OVERHEAD_FOLLOW, "follow_origin", Vector(0,0,0), true)
|
||
ParticleManager:SetParticleControl(hero.thtd_emoji_effect, 3, Vector(5,0,0))
|
||
ParticleManager:DestroyParticleSystemTime(hero.thtd_emoji_effect,5.0)
|
||
return
|
||
end
|
||
|
||
if string.sub(text,1,6) == "-color" then
|
||
local colorValue = string.sub(text, 8, 11)
|
||
CustomGameEventManager:Send_ServerToAllClients("show_message", {msg="item_locked_tip", duration=10, params={}, color=colorValue})
|
||
return
|
||
end
|
||
|
||
if string.sub(text,1,3) == "-id" then
|
||
GameRules:SendCustomMessage("<font color='yellow'>id:"..tostring(PlayerResource:GetSteamAccountID(keys.playerid))..", steamid:"..tostring(PlayerResource:GetSteamID(keys.playerid)).."</font>", DOTA_TEAM_GOODGUYS, 0)
|
||
return
|
||
end
|
||
|
||
if string.sub(text,1,5) == "-date" then
|
||
CustomGameEventManager:Send_ServerToPlayer(PlayerResource:GetPlayer(keys.playerid), "display_chat_msg", {msg="open_day_tip", params={server_time=GetRealDateTime(),start_time=GameRules.GameData.server_time,open_day_list=GameRules.GameData.open_day_list}})
|
||
return
|
||
end
|
||
|
||
if string.sub(text,1,4) == "-pos" then
|
||
local player = PlayerResource:GetPlayer(keys.playerid)
|
||
local hero = player:GetAssignedHero()
|
||
local pos = hero:GetAbsOrigin()
|
||
print("------- Current Position (x, y, z):")
|
||
print(math.floor(pos.x + 0.5))
|
||
print(math.floor(pos.y + 0.5))
|
||
print(math.floor(pos.z + 0.5))
|
||
GameRules:SendCustomMessage("X: "..tostring(math.floor(pos.x + 0.5))..",Y:"..tostring(math.floor(pos.y + 0.5))..",Z:"..tostring(math.floor(pos.z + 0.5)), DOTA_TEAM_GOODGUYS, 0)
|
||
return
|
||
end
|
||
|
||
if string.sub(text,1,5) == "-wave" then
|
||
local num = tonumber(string.sub(text, 7))
|
||
if num ~= nil and num > -49 then
|
||
CustomGameEventManager:Send_ServerToPlayer(PlayerResource:GetPlayer(keys.playerid),"thtd_command", {cmd="wave", param=num})
|
||
end
|
||
return
|
||
end
|
||
|
||
if string.sub(text,1,5) == "-boss" then
|
||
local num = string.sub(text, 7, 20)
|
||
CustomGameEventManager:Send_ServerToPlayer(PlayerResource:GetPlayer(keys.playerid),"thtd_command", {cmd="boss", param=num})
|
||
return
|
||
end
|
||
|
||
if string.sub(text,1,4) == "-add" then
|
||
local num = string.sub(text, 6, 9)
|
||
CustomGameEventManager:Send_ServerToPlayer(PlayerResource:GetPlayer(keys.playerid),"thtd_command", {cmd="add", param=num})
|
||
return
|
||
end
|
||
|
||
if string.sub(text,1,3) == "-tp" then
|
||
local num = string.sub(text, 5, 20)
|
||
CustomGameEventManager:Send_ServerToPlayer(PlayerResource:GetPlayer(keys.playerid),"thtd_command", {cmd="tp", param=num})
|
||
return
|
||
end
|
||
|
||
if string.sub(text,1,10) == "-clearrank" then
|
||
CustomGameEventManager:Send_ServerToPlayer(PlayerResource:GetPlayer(keys.playerid),"thtd_command", {cmd="clearrank", param={}})
|
||
return
|
||
end
|
||
|
||
if string.sub(text,1,8) == "-lv" then
|
||
CustomGameEventManager:Send_ServerToPlayer(PlayerResource:GetPlayer(keys.playerid),"thtd_command", {cmd="lv", param={}})
|
||
return
|
||
end
|
||
|
||
if string.sub(text,1,5) == "-test" then
|
||
if tostring(PlayerResource:GetSteamID(keys.playerid)) ~= GameRules.GameData.admin then return end
|
||
|
||
local select_cards = {}
|
||
for i = 3011,3031 do
|
||
select_cards["item_"..tostring(i)] = "item_"..tostring(i)
|
||
end
|
||
for i = 2011,2022 do
|
||
select_cards["item_"..tostring(i)] = "item_"..tostring(i)
|
||
end
|
||
|
||
CustomGameEventManager:Send_ServerToPlayer(PlayerResource:GetPlayer(keys.playerid) , "show_select_bonus_card_panel", {cards=select_cards})
|
||
return
|
||
end
|
||
|
||
if string.sub(text,1,5) == "-skey" then
|
||
CustomGameEventManager:Send_ServerToPlayer(PlayerResource:GetPlayer(keys.playerid),"thtd_command", {cmd="skey", param=SERVER_KEY})
|
||
return
|
||
end
|
||
end
|
||
|
||
|
||
function CTHTDGameMode:ExecuteOrder( keys )
|
||
if table.hasvalue(SpawnSystem.GameOverPlayerId, keys.issuer_player_id_const) then return false end
|
||
|
||
local orderUnit = EntIndexToHScript(keys.units["0"])
|
||
if orderUnit == nil then return true end
|
||
|
||
-- PrintTable(keys)
|
||
local order_type = keys.order_type
|
||
|
||
if order_type == DOTA_UNIT_ORDER_ATTACK_TARGET or
|
||
order_type == DOTA_UNIT_ORDER_CAST_POSITION or
|
||
order_type == DOTA_UNIT_ORDER_CAST_TARGET or
|
||
order_type == DOTA_UNIT_ORDER_CAST_NO_TARGET or
|
||
order_type == DOTA_UNIT_ORDER_CAST_TARGET_TREE
|
||
then
|
||
orderUnit:THTD_SetAggressiveLock()
|
||
end
|
||
|
||
if order_type == 32 then
|
||
local ability = EntIndexToHScript(keys.entindex_ability)
|
||
if ability ~= nil and ability:IsItem() then
|
||
if keys.entindex_target == 1 then
|
||
ability.locked_by_player_id = keys.issuer_player_id_const
|
||
else
|
||
local tower = ability:THTD_GetTower()
|
||
if tower ~= nil then
|
||
for i=0,8 do
|
||
local targetItem = tower:GetItemInSlot(i)
|
||
if targetItem~=nil and targetItem:IsNull()==false then
|
||
CustomGameEventManager:Send_ServerToPlayer(orderUnit:GetPlayerOwner(), "display_custom_error", {msg="card_cannot_unlock_when_having_equipment"})
|
||
return false
|
||
end
|
||
end
|
||
end
|
||
ability.locked_by_player_id = nil
|
||
end
|
||
return true
|
||
end
|
||
return false
|
||
end
|
||
|
||
-- if order_type == DOTA_UNIT_ORDER_MOVE_ITEM then
|
||
-- 移动储存处
|
||
-- if keys.entindex_target >= THTD_MAX_ITEM_SLOT then
|
||
|
||
-- end
|
||
-- return true
|
||
-- end
|
||
|
||
if order_type == DOTA_UNIT_ORDER_SELL_ITEM then
|
||
local ability = EntIndexToHScript(keys.entindex_ability)
|
||
if ability ~= nil and ability:IsItem() then
|
||
if ability:GetAbilityName() == "item_3121" then
|
||
return false
|
||
end
|
||
if ability.disable_sell == true then
|
||
local player = PlayerResource:GetPlayer(keys.issuer_player_id_const)
|
||
if player then
|
||
CustomGameEventManager:Send_ServerToPlayer(player , "display_custom_error", {msg="item_disable_sell"} )
|
||
end
|
||
return false
|
||
end
|
||
if ability.is_bonus_item == true then
|
||
CustomGameEventManager:Send_ServerToPlayer(PlayerResource:GetPlayer(keys.issuer_player_id_const), "display_custom_error", {msg="start_card_cannot_be_sell"})
|
||
return false
|
||
end
|
||
if ability.locked_by_player_id ~= nil then
|
||
local player = PlayerResource:GetPlayer(keys.issuer_player_id_const)
|
||
if player then
|
||
CustomGameEventManager:Send_ServerToPlayer(player , "display_custom_error", {msg="item_is_locked"} )
|
||
end
|
||
return false
|
||
end
|
||
OnItemDestroyed(EntIndexToHScript(keys.units["0"]), ability, true)
|
||
end
|
||
local gold = ability:GetCost()
|
||
if gold ~= nil and gold > 0 then
|
||
gold = math.floor(gold/2)
|
||
local current_gold = PlayerResource:GetGold(keys.issuer_player_id_const)
|
||
if gold + current_gold > 99999 then
|
||
thtd_extra_gold[keys.issuer_player_id_const] = thtd_extra_gold[keys.issuer_player_id_const] + (gold - (99999-current_gold))
|
||
THTD_RefreshExtraGold(keys.issuer_player_id_const)
|
||
elseif thtd_extra_gold[keys.issuer_player_id_const] > 0 then
|
||
local add_gold = math.min(thtd_extra_gold[keys.issuer_player_id_const], 99999-(gold+current_gold))
|
||
thtd_extra_gold[keys.issuer_player_id_const] = thtd_extra_gold[keys.issuer_player_id_const] - add_gold
|
||
PlayerResource:ModifyGold(keys.issuer_player_id_const, add_gold, true, DOTA_ModifyGold_Unspecified)
|
||
THTD_RefreshExtraGold(keys.issuer_player_id_const)
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
if order_type == DOTA_UNIT_ORDER_GIVE_ITEM then
|
||
local item = EntIndexToHScript(keys.entindex_ability)
|
||
local target = EntIndexToHScript(keys.entindex_target)
|
||
local count = 0
|
||
for i=0,THTD_MAX_ITEM_SLOT-1 do
|
||
local targetItem = target:GetItemInSlot(i)
|
||
if targetItem~=nil and targetItem:IsNull()==false then count = count + 1 end
|
||
end
|
||
if count >= THTD_MAX_ITEM_SLOT then
|
||
local player = PlayerResource:GetPlayer(keys.issuer_player_id_const)
|
||
if player then
|
||
CustomGameEventManager:Send_ServerToPlayer(player, "display_custom_error", {msg="not_enough_item_slot"})
|
||
end
|
||
return false
|
||
else
|
||
return true
|
||
end
|
||
end
|
||
|
||
if order_type == DOTA_UNIT_ORDER_DROP_ITEM then
|
||
local item = EntIndexToHScript(keys.entindex_ability)
|
||
if THTD_HasItemScale(item) then
|
||
if item.item_set_scale ~= true then
|
||
item.item_set_scale = true
|
||
local count = 600
|
||
item:SetContextThink(DoUniqueString("item_set_scale"),
|
||
function()
|
||
if GameRules:IsGamePaused() then return 0.03 end
|
||
if item:GetContainer() ~= nil then
|
||
THTD_ItemSetScale(item)
|
||
item.item_set_scale = nil
|
||
return nil
|
||
end
|
||
if count <= 0 then
|
||
item.item_set_scale = nil
|
||
return nil
|
||
end
|
||
count = count - 1
|
||
return 0.1
|
||
end,
|
||
0.1)
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
if order_type == DOTA_UNIT_ORDER_PICKUP_ITEM then
|
||
local itemC = EntIndexToHScript(keys.entindex_target)
|
||
if itemC ~= nil then
|
||
local item = itemC:GetContainedItem()
|
||
if item ~= nil then
|
||
local itemName = item:GetAbilityName()
|
||
if itemName == "item_3101" or itemName == "item_3102" or itemName == "item_3103" then
|
||
local player = PlayerResource:GetPlayer(keys.issuer_player_id_const)
|
||
if orderUnit:IsRealHero() == false then
|
||
CustomGameEventManager:Send_ServerToPlayer(player, "display_custom_error", {msg="not_key_unit"})
|
||
return false
|
||
end
|
||
if orderUnit:GetNumItemsInInventory() >= THTD_MAX_ITEM_SLOT then
|
||
CustomGameEventManager:Send_ServerToPlayer(player, "display_custom_error", {msg="not_enough_item_slot"})
|
||
return false
|
||
end
|
||
if not orderUnit:HasItemInInventory("item_3121") then
|
||
CustomGameEventManager:Send_ServerToPlayer(player, "display_custom_error", {msg="not_has_key_item"})
|
||
return false
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
return true
|
||
end
|
||
|
||
|
||
local item_cn_name = {
|
||
["item_2019"] = "「纳税用阴阳玉」",
|
||
["item_2008"] = "「死神渡河船桨」",
|
||
["item_2005"] = "「血染的太阳伞」",
|
||
["item_2009"] = "「割夺真实之刃」",
|
||
["item_2010"] = "「死神大镰刀」",
|
||
["item_2011"] = "「月兔粉碎巨刃」",
|
||
["item_2015"] = "「念缚灵的船勾」",
|
||
["item_2016"] = "「速融的核融合棒」",
|
||
["item_2017"] = "「恶魔的乳牙」",
|
||
["item_2001"] = "「四次元爆蛋」",
|
||
["item_2012"] = "「迷你八卦炉」",
|
||
["item_2013"] = "「莱瓦汀」",
|
||
["item_2014"] = "「神枪冈格尼尔」",
|
||
["item_2020"] = "「高科技相机」",
|
||
["item_3150"] = "「布都御魂」",
|
||
["item_3151"] = "「天丛云剑」",
|
||
["item_3152"] = "「天羽羽斩」",
|
||
["item_3149"] = "「凤凰之灵」",
|
||
["item_2021"] = "「千年佳酿」",
|
||
}
|
||
local item_loot = {
|
||
[1] = {"item_2021","item_2019","item_2008","item_2005"}, --R
|
||
[2] = {"item_2009","item_2010","item_2011","item_2015","item_2016","item_2017","item_2001"}, -- SR
|
||
[3] = {"item_2012","item_2013","item_2014","item_2020"}, -- SSR
|
||
[4] = {}, -- 羁绊,todo
|
||
[5] = {"item_3150", "item_3151", "item_3152"}, -- 神器
|
||
|
||
}
|
||
function CTHTDGameMode:ItemAddedToInventory( keys )
|
||
local caster = EntIndexToHScript(keys.inventory_parent_entindex_const)
|
||
local hItem = EntIndexToHScript(keys.item_entindex_const)
|
||
local itemName = hItem:GetAbilityName()
|
||
|
||
if itemName == "item_enchanted_mango" then
|
||
return false
|
||
end
|
||
|
||
if GameRules:GetCustomGameDifficulty() == PVE_MODE then
|
||
CheckItemShare(caster, hItem)
|
||
end
|
||
|
||
if itemName == "item_3101" or itemName == "item_3102" or itemName == "item_3103" then
|
||
local keyItem = caster:FindItemInInventory("item_3121")
|
||
if keyItem ~= nil then
|
||
keyItem:SpendCharge()
|
||
if keyItem:GetCurrentCharges() == 0 then
|
||
caster:RemoveItem(keyItem)
|
||
end
|
||
|
||
local playerid = caster:GetPlayerOwnerID()
|
||
GameRules.PlayerData[playerid]["key_use_count"] = GameRules.PlayerData[playerid]["key_use_count"] + 1
|
||
|
||
if caster.first_chest_opened ~= true and GameRules.PlayerData[playerid]["is_first_win"] == 1 then
|
||
caster.first_chest_opened = true
|
||
Service:GiveDayFirstWinBonus(playerid)
|
||
else
|
||
local itemName = ""
|
||
local chance = RandomInt(1, 100)
|
||
if GameRules.PlayerData[playerid]["key_use_count"] > 100/0.05 then
|
||
chance = 101
|
||
end
|
||
|
||
if chance <= 35 then
|
||
itemName = item_loot[1][1]
|
||
elseif chance <= 15 + 35 then
|
||
itemName = item_loot[1][RandomInt(1, #item_loot[1])]
|
||
elseif chance <= 25 + 50 then
|
||
itemName = item_loot[2][RandomInt(1, #item_loot[2])]
|
||
elseif chance <= 12 + 75 then
|
||
itemName = item_loot[3][RandomInt(1, #item_loot[3])]
|
||
elseif chance <= 5 + 87 then
|
||
itemName = item_loot[1][1]
|
||
elseif chance <= 3 + 92 then
|
||
itemName = item_loot[5][RandomInt(1, #item_loot[5])]
|
||
else
|
||
if chance == 101 or RollPercentage(1) then
|
||
itemName = "item_3149"
|
||
GameRules.PlayerData[playerid]["key_use_count"] = 0
|
||
else
|
||
itemName = item_loot[1][1]
|
||
end
|
||
end
|
||
local item = CreateItem(itemName, nil, nil)
|
||
if item ~= nil then
|
||
item.owner_player_id = playerid
|
||
item.disable_sell = true
|
||
item:SetPurchaser(caster)
|
||
item:SetPurchaseTime(1.0)
|
||
caster:AddItem(item)
|
||
CustomGameEventManager:Send_ServerToPlayer(caster:GetPlayerOwner(), "thtd_server_msg", {code = "0000", msg = "获得 "..(item_cn_name[itemName] or itemName)})
|
||
if itemName == "item_3149" then
|
||
Service:SavePowerMaxCount(playerid, true)
|
||
end
|
||
end
|
||
end
|
||
|
||
Service:SaveKeyCount(playerid)
|
||
end
|
||
|
||
UTIL_Remove(hItem)
|
||
return false
|
||
end
|
||
|
||
if not caster:IsRealHero() then
|
||
local hero = caster:GetHero()
|
||
if hero ~= nil then
|
||
if itemName == "item_3150" or itemName == "item_3151" or itemName == "item_3152" then
|
||
if hero.is_team_mode ~= true then
|
||
hero.is_team_mode = true
|
||
CustomGameEventManager:Send_ServerToPlayer(hero:GetPlayerOwner(), "display_chat_msg", {msg="team_rank_tip", params={player_name=PlayerResource:GetPlayerName(hero:GetPlayerOwnerID()),reason="使用了传说武器"}})
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
return true
|
||
end
|
||
|
||
function CheckItemShare(caster,item)
|
||
if caster == nil or item == nil then return end
|
||
if item:GetAbilityName() == "item_tpscroll" then return end
|
||
-- local cardName = item:THTD_GetCardName()
|
||
-- if cardName == "BonusEgg" or cardName == "minoriko" or cardName == "sizuha" or cardName == "lily" or cardName == "nazrin" or cardName == "toramaru" or item:THTD_GetCardQuality() == 1 then return end
|
||
|
||
local playerId = caster:GetPlayerOwnerID()
|
||
if item.owner_player_id ~= playerId then
|
||
CustomGameEventManager:Send_ServerToPlayer(caster:GetPlayerOwner(), "display_custom_error", {msg="cannot_use_others_item_in_single_mode"})
|
||
caster:SetContextThink(DoUniqueString("thtd_pertick_gold_think"),
|
||
function()
|
||
if GameRules:IsGamePaused() then return 0.03 end
|
||
caster:DropItemAtPositionImmediate(item, caster:GetOrigin())
|
||
return nil
|
||
end,
|
||
0.15)
|
||
end
|
||
end
|
||
|
||
|
||
function CTHTDGameMode:ModifierFilter(keys)
|
||
if keys.entindex_parent_const == nil or keys.entindex_caster_const == nil then
|
||
return true
|
||
end
|
||
|
||
local caster = EntIndexToHScript(keys.entindex_caster_const)
|
||
local unit = EntIndexToHScript(keys.entindex_parent_const)
|
||
|
||
if unit~=nil and unit:IsNull()==false then
|
||
local modifierName = keys.name_const
|
||
|
||
if THTD_IsUniqueSlowBuff(modifierName) == true then
|
||
if unit:THTD_HasUniqueSlowBuff() or unit:HasModifier("modifier_bosses_aya") then
|
||
return false
|
||
else
|
||
return true
|
||
end
|
||
end
|
||
|
||
if modifierName == "modifier_faceless_void_timelock_freeze" then
|
||
local ability = EntIndexToHScript(keys.entindex_ability_const)
|
||
caster:SetContextThink(DoUniqueString("thtd_bb_3028"),
|
||
function()
|
||
local DamageTable = {
|
||
ability = ability,
|
||
victim = unit,
|
||
attacker = caster,
|
||
damage = unit:GetMaxHealth() * ability:GetSpecialValueFor("bonus_damage")/100,
|
||
damage_type = ability:GetAbilityDamageType(),
|
||
damage_flags = DOTA_DAMAGE_FLAG_NONE
|
||
}
|
||
UnitDamageTarget(DamageTable)
|
||
return nil
|
||
end,
|
||
0.3)
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
|
||
function CTHTDGameMode:DamageFilter(keys)
|
||
-- damage: 24
|
||
-- damagetype_const: 1
|
||
-- entindex_attacker_const: 503
|
||
-- entindex_inflictor_const: 500 技能,普通攻击没有这个
|
||
-- entindex_victim_const: 434
|
||
if keys.damage <= 0 then return false end
|
||
if keys.entindex_attacker_const == nil or keys.entindex_victim_const == nil then return true end
|
||
|
||
local target = EntIndexToHScript(keys.entindex_victim_const)
|
||
local unit = EntIndexToHScript(keys.entindex_attacker_const)
|
||
if unit:IsRealHero() then
|
||
local health = target:GetHealth()
|
||
-- 辉夜复活
|
||
if target:HasModifier("modifier_bosses_kaguya") and keys.damage > health then
|
||
target:SetHealth(1)
|
||
target:RemoveModifierByName("modifier_bosses_kaguya")
|
||
return false
|
||
end
|
||
-- 爱丽丝免死符
|
||
if target:HasModifier("modifier_bosses_alice") and target.left_death_count > 0 and keys.damage >= health then
|
||
target:SetHealth(1)
|
||
target:RemoveModifierByName("modifier_bosses_alice")
|
||
return false
|
||
end
|
||
return true
|
||
end
|
||
|
||
local DamageTable = {
|
||
ability = nil,
|
||
victim = target,
|
||
attacker = unit,
|
||
damage = keys.damage,
|
||
damage_type = keys.damagetype_const,
|
||
}
|
||
UnitDamageTarget(DamageTable, false, true)
|
||
return false
|
||
end
|
||
|
||
|
||
function CTHTDGameMode:OnModifyGoldFilter(keys)
|
||
-- gold: 15
|
||
-- player_id_const: 0
|
||
-- reason_const: 13
|
||
-- reliable: 0
|
||
|
||
-- 出售和接口改变金钱不会触发,当前地图只有杀怪奖励金钱
|
||
|
||
if keys.gold == 0 then return true end
|
||
|
||
if keys.gold > 0 then
|
||
if thtd_extra_gold[keys.player_id_const] == nil then
|
||
thtd_extra_gold[keys.player_id_const] = 0
|
||
end
|
||
local current_gold = PlayerResource:GetGold(keys.player_id_const)
|
||
if current_gold + keys.gold > 99999 then
|
||
local add_gold = math.min(keys.gold, 99999-current_gold)
|
||
thtd_extra_gold[keys.player_id_const] = thtd_extra_gold[keys.player_id_const] + (keys.gold - add_gold)
|
||
keys.gold = add_gold
|
||
elseif thtd_extra_gold[keys.player_id_const] > 0 then
|
||
local add_gold = math.min(thtd_extra_gold[keys.player_id_const], 99999-(keys.gold+current_gold))
|
||
keys.gold = keys.gold + add_gold
|
||
thtd_extra_gold[keys.player_id_const] = thtd_extra_gold[keys.player_id_const] - add_gold
|
||
end
|
||
end
|
||
|
||
THTD_RefreshExtraGold(keys.player_id_const)
|
||
return true
|
||
end
|
||
|
||
|
||
function CTHTDGameMode:OnDotaNonPlayerUsedAbility(keys)
|
||
-- 字段
|
||
-- abilityname
|
||
-- caster_entindex
|
||
|
||
local caster = EntIndexToHScript(keys.caster_entindex)
|
||
|
||
local unitName = caster:GetUnitName()
|
||
if unitName == "remilia" or unitName == "flandre" or unitName == "patchouli" or unitName == "sakuya" or unitName == "koakuma" or unitName == "meirin" then
|
||
local playerid = caster:GetPlayerOwnerID()
|
||
if GameRules.player_bb_buff[playerid]["item_3025"] > 0 and RollPercentage(GameRules.player_bb_buff[playerid]["item_3025"]) then
|
||
local ability = caster:FindAbilityByName(keys.abilityname)
|
||
ability:EndCooldown()
|
||
caster:GiveMana(caster:GetRealManaCost(ability))
|
||
end
|
||
end
|
||
end |