"Tutorial_Lessons" { "Version" "1" ///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// // TUTORIAL: MECHANICS 1 ///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////// // list of available advance events // task_completed - advance to next event when complete // lesson_started - immediately advance to next event // tip_dismissed - closed tip window // player_joined // dota_tower_kill // enter_pre_game // npc_awoke - target npc awoke from sleep "tutorial_m1" // Wait here until we are ready to do actual setup { "advance_time" "0" "advance_event" "player_joined" "next_lesson" "tm1_player_setup" } "tm1_player_setup" { "convars" { "sv_pausable" "1" "dota_hud_healthbars" "0" "dota_tutorial_stop_daynightcycle" "1" "dota_tutorial_skip_pregame" "1" "dota_tutorial_state_change_delay" "0" "dota_tutorial_disable_goldtick" "1" "dota_creeps_no_spawning" "1" "dota_neutral_initial_spawn_delay" "2" "dota_companion_enable" "0" "dota_tutorial_disable_stash" "1" "dota_tutorial_prevent_exp_gain" "1" "dota_bot_purchase_item_enable" "0" "dota_tutorial_disable_suggested_items" "1" "dota_tutorial_can_sell_items" "0" "dota_tutorial_can_disassemble_items" "0" //"dota_tutorial_shop_combine_tree" "0" "dota_tutorial_quick_buy" "0" "dota_tutorial_heroselection" "0" "dota_tutorial_actionpanel" "0" "dota_tutorial_see_enemy" "0" "dota_tutorial_log_hero" "0" "dota_shop_view_mode" "0" "dota_camera_disable_zoom" "1" "dota_bot_tutorial_boss" "1" "dota_tutorial_disable_item_drops" "1" "dota_tutorial_force_shop_mode" "1" } "precache" { "npc_dota_hero_dragon_knight" "1" "npc_dota_hero_razor" "1" "npc_dota_hero_keeper_of_the_light" "1" } "whitelist_enable" "1" // enable ability to restrict store items using add_item_shop_whitelist and remove_item_shop_whitelist "set_tutorial_UI" "0" // remove all hud except for portrait "teleportcamera_to" "tgt_r3_razor_intro" "advance_time" "0" "advance_event" "lesson_started" "next_lesson" "tm1_select_hero" } "tm1_select_hero" // Setup the player { "player_team" "good" "player_hero" "npc_dota_hero_dragon_knight" "player_set_gold" "0" "hero_controllable" "0" "advance_time" "0" "advance_event" "lesson_started" "next_lesson" "tm1_upgrade_ability" } "tm1_upgrade_ability" // Choose ability as soon as player is ready { "player_upgrade_ability" "attribute_bonus" "npc_set_buddha_on" "npc_dota_hero_dragon_knight" "advance_time" "0" "advance_event" "lesson_started" "next_lesson" "tm1_r1_razorspawn" } "tm1_r1_razorspawn" { "trigger_logic_relay" "relay_r3_intro" "fade_to" "0" //"movecamera_to" "tgt_r3_razor_intro" "advance_time" "1" "advance_event" "lesson_started" "next_lesson" "tm1_r1_razorintro" } "tm1_r1_razorintro" { "setcamera_to_follow" "ss_razor" "trigger_logic_relay" "relay_snd_razor_stinger" "hero_levelup" { "hero" "npc_dota_hero_razor" "level" "5" "levelups" { "razor_plasma_field" "1" "attribute_bonus" "1" "razor_plasma_field" "1" } } "npc_speech" { "text" "#DOTA_Tutorial_M1_IntroRazor" "vo" "scenes/razor/razor_raz_spawn_03.vcd" "npc" "ss_razor" "duration" "3" "allow_movement" "1" } "advance_event" "razor_intro_complete" "next_lesson" "tm1_r1_razorintro_victory" } "tm1_r1_razorintro_victory" { "npc_animation" { "npc" "npc_dota_hero_razor" "activity" "ACT_DOTA_INTRO" } "npc_speech" { "vo" "scenes/razor/razor_raz_laugh_05.vcd" "npc" "ss_razor" "duration" "3.5" "allow_movement" "1" } "advance_time" "3.5" "advance_event" "lesson_started" "next_lesson" "tm1_r1_returncamera_delay" } "tm1_r1_returncamera_delay" { "trigger_logic_relay" "relay_r3_intro_cleanup" // teleport razor out and tidy up tower "advance_time" "5" "advance_event" "lesson_started" "next_lesson" "tm1_r1_returncamera" } "tm1_r1_returncamera" { "movecamera_to" "tgt_r1_initial_campos" "advance_event" "lesson_started" "next_lesson" "tm1_intro_hero" } "tm1_intro_hero" { "npc_animation" { "npc" "npc_dota_hero_dragon_knight" "activity" "ACT_DOTA_INTRO" } "npc_speech" { "initial_delay" "2" "vo" "scenes/dragon_knight/dragon_knight_drag_move_10.vcd" "npc" "npc_dota_hero_dragon_knight" "allow_movement" "1" } "advance_time" "5.0" "advance_event" "lesson_started" "next_lesson" "tm1_premoveto_1" } "tm1_premoveto_1" { "hero_controllable" "1" "task_move_location" "tgt_r1_moveto" "advance_time" "0.5" "advance_event" "lesson_started" "next_lesson" "tm1_hero_introduction" "convars" { "dota_tutorial_actionpanel" "1" } } "tm1_hero_introduction" { "npc_speech" { "text" "#DOTA_Tutorial_M1_Move" "vo" "Tutorial_M1_Move" "npc" "ss_r1_friendly_creep" "duration" "5" } "trigger_logic_relay" "relay_snd_tutorial_start" "advance_event" "lesson_started" "advance_time" "0.3" "next_lesson" "tm1_move_to_creep" } "tm1_move_to_creep" { "advance_event" "task_completed" "advance_time" "0" "next_lesson" "tm1_open_gate" "reactive_tips" { "tip_moveto" { "timer" "10" "repeat_count" "3" "npc_speech" { "text" "#DOTA_Tutorial_M1_MoveHow" "vo" "Tutorial_M1_MoveHow" "npc" "ss_r2_friendly_creep_attack_hint" } } } } "tm1_open_gate" { "stop_npc_speech" "ss_r1_friendly_creep" "stop_npc_speech" "ss_r2_friendly_creep_attack_hint" "npc_sleep" "ss_r2_enemy_creep" "npc_animation" { "npc" "ss_r2_enemy_creep" "activity" "ACT_DOTA_IDLE_SLEEPING" "loop" "1" } "trigger_logic_relay" "relay_tm1_gateopen" // fire output in world via logic_relay entity "advance_event" "lesson_started" "advance_time" "0.5" "next_lesson" "tm1_move_camera" "reactive_tip_stop" "tip_moveto" } "tm1_move_camera" { "npc_speech" // open dialog bubble { "text" "#DOTA_Tutorial_M1_MoveCam" "vo" "Tutorial_M1_MoveCam" "npc" "ss_r1_friendly_creep" } "advance_event" "lesson_started" "advance_time" "0.3" "next_lesson" "tm1_premoveto_2" "quest" { "name" "quest_movetogate" "type" "0" // 0 = point, 1 = gold, 2 = sword, 3 = shield "title" "#DOTA_Quest_MoveTo" } } "tm1_premoveto_2" { "reactive_tips" { "tip_movecam" { "event" "player_is_experienced" "npc_speech" { "text" "#DOTA_Tutorial_M1_MoveCamHow" "vo" "Tutorial_M1_MoveCamHow" "npc" "ss_r1_friendly_creep" "initial_delay" "5" } } "tip_movecam_noedge" { "event" "player_is_notexperienced" "npc_speech" { "text" "#DOTA_Tutorial_M1_MoveCamHowNoEdge" "vo" "Tutorial_M1_MoveCamHowNoEdge" "npc" "ss_r1_friendly_creep" "initial_delay" "5" } } "tip_gate_speech" { "mapIO_event" "r1_player_approaching_gate" "npc_speech" { "text" "#DOTA_Tutorial_M1_Warning" "vo" "Tutorial_M1_Warning" "npc" "ss_r1_gate_opener" "duration" "10" } } } "fire_experienced_event" "1" "task_move_location" "tgt_r1_moveto_2" "advance_time" "0.5" "advance_event" "task_completed" "next_lesson" "tm1_premoveto_3" } "tm1_premoveto_3" { "reactive_tip_stop" "tip_movecam" "reactive_tip_stop" "tip_movecam_noedge" "stop_npc_speech" "ss_r1_friendly_creep" // close dialog bubble "task_move_location" "tgt_r1_moveto_3" // task type "advance_event" "lesson_started" // advance immediately "advance_time" "0.5" // delay advance "next_lesson" "tm1_premoveto_3b" // next event "quest_finish" "quest_movetogate" } "tm1_premoveto_3b" { "advance_event" "lesson_started" "advance_time" "1.0" "next_lesson" "tm1_premoveto_3c" } "tm1_premoveto_3c" { "quest" { "name" "quest_findkeeper" "type" "0" // 0 = point, 1 = gold, 2 = sword, 3 = shield "title" "#DOTA_Quest_FindKeeper" } "advance_event" "lesson_started" "next_lesson" "tm1_move_to_cameraloc" } "tm1_move_to_cameraloc" { "advance_event" "task_completed" "advance_time" "0" "next_lesson" "tm1_waitfor_trigger1" } "tm1_waitfor_trigger1" { "reactive_tip_stop" "tip_movecam" "advance_trigger" "tgr_r2_entry" // advance when player hits this "advance_event" "lesson_started" "advance_time" "0" "next_lesson" "tm1_movecamera_toattacking" } "tm1_movecamera_toattacking" { "convars" { "dota_hud_healthbars" "3" } "movecamera_to" "tgt_r2_camera" "advance_event" "movecamera_finished" "advance_time" "0" "next_lesson" "tm1_attack_dialog" } "tm1_attack_dialog" { "npc_speech" { "text" "#DOTA_Tutorial_M1_Attack" "vo" "Tutorial_M1_Attack" "npc" "ss_r2_friendly_creep_attack_hint" "allow_movement" "1" } "advance_event" "npc_awoke" // advance on sleeping npc being attacked "advance_time" "0" "next_lesson" "tm1_attack_wave_dialog" "set_tutorial_UI" "1" } "tm1_attack_wave_dialog" { "stop_npc_animation" "ss_r2_enemy_creep" "stop_npc_speech" "ss_r2_friendly_creep_attack_hint" "trigger_logic_relay" "relay_r2_attack_hint_attack" // npc can now attack "advance_event" "tm1_attack_complete" // event from spawner input "FireTutorialAdvanceEvent" "advance_time" "3" "next_lesson" "tm1_attack_wave" } "tm1_attack_wave" { "npc_speech" { "text" "#DOTA_Tutorial_M1_AttackWave" "vo" "Tutorial_M1_AttackWave" "npc" "ss_r2_friendly_creep_attack_hint" "duration" "5" } "advance_event" "tm1_attack_wave_allkilled" "next_lesson" "tm1_r3_moveto_1" } "tm1_r3_moveto_1" { "npc_speech" { "text" "#DOTA_Tutorial_M1_Camp" "vo" "Tutorial_M1_Camp" "npc" "ss_r2_friendly_creep_wave" "initial_delay" "2" "duration" "6" "find_nearest_friendly" "1" } "trigger_logic_relay" "relay_r2_attack_hint_attack_disable" // disable attack for a period while speech bubble is present "advance_event" "tm1_r3_creep_killed" "next_lesson" "tm1_r3_setup" } "tm1_r3_setup" { "convars" { "dota_tutorial_force_learn_ability" "0" } "player_ensure_level" "2" "set_tutorial_UI" "2" "npc_speech" { "text" "#DOTA_Tutorial_M1_CampLevel" "vo" "Tutorial_M1_CampLevel" "npc" "ss_r2_friendly_creep_attack_hint" "initial_delay" "3" "duration" "5" } "advance_event" "lesson_started" "next_lesson" "tm1_r3_levelup" } "tm1_r3_levelup" { "reactive_tips" { "tip_levelup" { "timer" "10" "repeat_count" "999" "npc_speech" { "text" "#DOTA_Tutorial_M1_CampLevelHint" "vo" "Tutorial_M1_CampLevelHint" "npc" "ss_r2_friendly_creep_wave" } } } "task_learn_ability" "dragon_knight_breathe_fire" "advance_event" "task_completed" "next_lesson" "tm1_r3_levelupdelay" } "tm1_r3_levelupdelay" { "reactive_tip_stop" "tip_levelup" "stop_npc_speech" "ss_r2_friendly_creep_wave" "advance_time" "3" "advance_event" "lesson_started" "next_lesson" "tm1_r3_camp_invasion" } "tm1_r3_camp_invasion" { "convars" { "dota_tutorial_prevent_exp_gain" "2" "dota_mana_regen_disable" "1" "dota_health_regen_disable" "1" } "npc_speech" { "text" "#DOTA_Tutorial_M1_CampInvade" "vo" "Tutorial_M1_CampInvade" "npc" "ss_r2_friendly_creep_attack_hint" "duration" "5" } "trigger_logic_relay" "camp_relay_invade" "quest" { "name" "quest_defendcamp" "type" "3" // 0 = point, 1 = gold, 2 = sword, 3 = shield "title" "#DOTA_Quest_DefendCamp" } "advance_event" "lesson_started" "next_lesson" "tm1_r3_camp_battle" } "tm1_r3_camp_battle" { "reactive_tips" { "tip_usebreath" { "timer" "15" "repeat_count" "999" "remove_on_ability" "dragon_knight_breathe_fire" "npc_speech" { "text" "#DOTA_Tutorial_M1_CampUseBreath" "vo" "Tutorial_M1_CampUseBreath" "npc" "camp_wp_assault_1" "allow_movement" "1" "duration" "5" "find_nearest_friendly" "1" } } } // "npc_animation" // { // "npc" "ss_r3_enemy_creep_camp_assault_1" // "activity" "ACT_DOTA_ATTACK" // } "npc_speech" { "vo" "scenes/dragon_knight/dragon_knight_drag_attack_04.vcd" "npc" "npc_dota_hero_dragon_knight" "allow_movement" "1" } "task_use_ability" "dragon_knight_breathe_fire" "advance_event" "task_completed" "next_lesson" "tm1_r3_player_used_ability" } "tm1_r3_player_used_ability" { "trigger_logic_relay" "relay_r3_player_used_ability" "advance_event" "tm1_r3_invasion_finished" "next_lesson" "tm1_r4_setup" } "tm1_r4_setup" { "convars" { "dota_tutorial_roquelaire_useperches" "0" } "quest_finish" "quest_defendcamp" "trigger_logic_relay" "relay_r4_setup" "npc_speech" { "text" "#DOTA_Tutorial_M1_CampFinish" "vo" "Tutorial_M1_CampFinish" "npc" "camp_wp_assault_1" "duration" "12" "find_nearest_friendly" "1" } "advance_event" "tm1_r4_player_entered" "next_lesson" "tm1_r4_goto_shop" } "tm1_r4_goto_shop" { "npc_speech" { "text" "#DOTA_Tutorial_M1_ShopAttract" "vo" "Tutorial_M1_ShopAttract" "npc" "tgt_r4_shopkeeper_speech" "npc_sound" "r4_shopkeeper" } "trigger_logic_relay" "relay_snd_shopkeeper_intro" "player_set_gold" "415" "advance_event" "tm1_rm4_player_reached_shop" "next_lesson" "tm1_r4_openshop" } "tm1_r4_openshop" { "set_tutorial_UI" "3" "movecamera_to" "tgt_r4_shopkeeper_speech" "npc_speech" { "text" "#DOTA_Tutorial_M1_ShopOpen" "vo" "Tutorial_M1_ShopOpen" "npc" "tgt_r4_shopkeeper_speech" "npc_sound" "r4_shopkeeper" } "advance_event" "player_opened_shop" "next_lesson" "tm1_r5_buyshield" } "tm1_r5_buyshield" { "npc_speech" { "text" "#DOTA_Tutorial_M1_BuyShield" "vo" "Tutorial_M1_BuyShield" "npc" "tgt_r4_shopkeeper_speech" "npc_sound" "r4_shopkeeper" } "add_item_shop_whitelist" "item_stout_shield" "task_buy_items" { "item_stout_shield" "1" } "advance_event" "task_completed" "next_lesson" "tm1_r4_buypotion" } "tm1_r4_buypotion" { "npc_speech" { "text" "#DOTA_Tutorial_M1_InspectShield" "vo" "Tutorial_M1_InspectShield" "npc" "tgt_r4_shopkeeper_speech" } "remove_item_shop_whitelist" "item_stout_shield" "add_item_shop_whitelist" "item_flask" "task_buy_items" { "item_flask" "1" } "advance_event" "task_completed" "next_lesson" "tm1_r4_usepotion" } "tm1_r4_usepotion" { "remove_item_shop_whitelist" "item_flask" "npc_speech" { "text" "#DOTA_Tutorial_M1_UsePotion" "vo" "Tutorial_M1_UsePotion" "npc" "tgt_r4_shopkeeper_speech" } "task_use_item" "item_flask" "advance_event" "task_completed" "next_lesson" "tm1_r4_usepotion2" } "tm1_r4_usepotion2" { "convars" { "dota_health_regen_disable" "0" } "npc_speech" { "text" "#DOTA_Tutorial_M1_PostPotion" "vo" "Tutorial_M1_PostPotion" "npc" "tgt_r4_shopkeeper_speech" } "advance_event" "lesson_started" "advance_time" "8" "next_lesson" "tm1_r4_buyclarity" } "tm1_r4_buyclarity" { "npc_speech" { "text" "#DOTA_Tutorial_M1_BuyClarity" "vo" "Tutorial_M1_BuyClarity" "npc" "tgt_r4_shopkeeper_speech" } "add_item_shop_whitelist" "item_clarity" "task_buy_items" { "item_clarity" "1" } "advance_event" "task_completed" "next_lesson" "tm1_r4_useclarity" } "tm1_r4_useclarity" { "remove_item_shop_whitelist" "item_clarity" "npc_speech" { "text" "#DOTA_Tutorial_M1_UseClarity" "vo" "Tutorial_M1_UseClarity" "npc" "tgt_r4_shopkeeper_speech" } "task_use_item" "item_clarity" "advance_event" "task_completed" "next_lesson" "tm1_r4_claritydelay" } "tm1_r4_claritydelay" { "convars" { "dota_mana_regen_disable" "0" } "advance_time" "4" "advance_event" "lesson_started" "next_lesson" "tm1_r4_gocreeping" } "tm1_r4_gocreeping" { "convars" { "dota_creeps_no_spawning" "0" "dota_tutorial_prevent_exp_gain" "0" "dota_tutorial_force_learn_ability" "2" } "npc_speech" { "text" "#DOTA_Tutorial_M1_GoCreeping" "vo" "Tutorial_M1_GoCreeping" "npc" "tgt_r4_shopkeeper_speech" "duration" "10" } "advance_time" "10.5" "advance_event" "lesson_started" "next_lesson" "tm1_r5_roquelairelead" } "tm1_r5_roquelairelead" { "npc_speech" { "text" "DOTA_Tutorial_M1_GoCreepingFollow" "vo" "Tutorial_M1_GoCreepingFollow" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "6" } "setcamera_to_follow" "ss_roquelaire" "trigger_logic_relay" "r5_relay_roquelaire_lead" // send roquelaire south "advance_time" "6" "advance_event" "lesson_started" // wait for player to enter neutral camp arena "next_lesson" "tm1_r5_returntoplayer" } "tm1_r5_returntoplayer" { "movecamera_to" "!player" "clear_camera_follow" "1" "advance_time" "1" "advance_event" "lesson_started" "next_lesson" "tm1_r5_roquelaireleadfinished" } "tm1_r5_roquelaireleadfinished" { "quest" { "name" "quest_clearneutral" "type" "1" // 0 = point, 1 = gold, 2 = sword, 3 = shield "title" "#DOTA_Quest_ClearNeutral" } "trigger_logic_relay" "r5_relay_disable_blocker" // disable blocker "task_move_location" "tgt_r5_moveto" "advance_event" "task_completed" "next_lesson" "tm1_r5_release_roquelaire" } "tm1_r5_release_roquelaire" { "convars" { "dota_tutorial_roquelaire_useperches" "1" } "task_learn_ability" "dragon_knight_dragon_blood" "advance_event" { "r5_gainedlevel" "tm1_r5_gainedlevel" // player has not leveled up "task_completed" "tm1_r5_creeping" // player leveled up before camp destroyed } } "tm1_r5_gainedlevel" { "reactive_tips" { "tip_creeping_levelup" { "timer" "2" "repeat_count" "999" "npc_speech" { "text" "#DOTA_Tutorial_M1_CreepLevel" "vo" "Tutorial_M1_CreepingLevel" "npc" "ss_roquelaire" "allow_movement" "1" } } } "player_ensure_level" "3" "task_learn_ability" "dragon_knight_dragon_blood" //"advance_event" "task_completed" //"next_lesson" "tm1_r5_creeping" "advance_event" { "tm1_r5_creeps_killed" "tm1_r5_creeping_forcelevel" // if player has not chosen ability force it here "task_completed" "tm1_r5_creeping" // completed selecting level } } "tm1_r5_creeping_forcelevel" { "reactive_tip_stop" "tip_creeping_levelup" "reactive_tips" { "tip_creeping_levelup_forced" { "timer" "2" "repeat_count" "999" "npc_speech" { "text" "#DOTA_Tutorial_M1_CreepLevelForce" "vo" "Tutorial_M1_CreepingLevel" "npc" "ss_roquelaire" "allow_movement" "1" } } } "task_learn_ability" "dragon_knight_dragon_blood" "advance_event" "task_completed" "next_lesson" "tm1_r5_creeping_allkilled" // merge back to main lesson } "tm1_r5_creeping" // waiting for player to kill all camps { "reactive_tip_stop" "tip_creeping_levelup" "stop_npc_speech" "ss_roquelaire" "advance_event" "tm1_r5_creeps_killed" // map event "next_lesson" "tm1_r5_creeping_allkilled_delay" } "tm1_r5_creeping_allkilled_delay" // delay to reduce overlap quest finishing with killing blow { "reactive_tip_stop" "tip_creeping_levelup_forced" "advance_time" "1" "advance_event" "lesson_started" "next_lesson" "tm1_r5_creeping_allkilled" } "tm1_r5_creeping_allkilled" { "convars" { "dota_tutorial_roquelaire_useperches" "0" } "npc_speech" { "text" "#DOTA_Tutorial_M1_CreepingAllDead" "vo" "Tutorial_M1_CreepingAllDead" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "6" } "quest_finish" "quest_clearneutral" "advance_time" "6" "advance_event" "lesson_started" "next_lesson" "tm1_r5_creeping_return" } "tm1_r5_creeping_return" { "quest" { "name" "quest_returnshop" "type" "0" // 0 = point, 1 = gold, 2 = sword, 3 = shield "title" "#DOTA_Quest_ReturnToShop" } "trigger_logic_relay" "relay_r5_roquelaire_return" "advance_event" "tm1_r5_player_returned" // map event "next_lesson" "tm1_r4_buygauntlets" } "tm1_r4_buygauntlets" { "convars" { "dota_hud_healthbars" "3" // tutorial_start_lesson debug "dota_tutorial_roquelaire_useperches" "0" "dota_tutorial_prevent_exp_gain" "4" "dota_tutorial_force_learn_ability" "0" } "quest_finish" "quest_returnshop" "set_tutorial_UI" "3" // tutorial_start_lesson debug "trigger_logic_relay" "relay_r5_roquelaire_return" // tutorial_start_lesson debug "npc_speech" { "text" "#DOTA_Tutorial_M1_BuyGauntlets" "vo" "Tutorial_M1_BuyGauntlets" "npc" "tgt_r4_shopkeeper_speech" } "add_item_shop_whitelist" "item_gauntlets" "task_buy_items" { "item_gauntlets" "1" } "advance_event" "task_completed" "next_lesson" "tm1_r4_boughtgauntlets" } "tm1_r4_boughtgauntlets" { "remove_item_shop_whitelist" "item_gauntlets" "npc_speech" { "text" "#DOTA_Tutorial_M1_BoughtGauntlets" "vo" "Tutorial_M1_BoughtGauntlets" "npc" "tgt_r4_shopkeeper_speech" "duration" "5" } "add_item_shop_whitelist" "item_circlet" "advance_event" "lesson_started" "advance_time" "6" "next_lesson" "tm1_r4_lasthitintro" } "tm1_r4_lasthitintro" { "npc_speech" { "text" "#DOTA_Tutorial_M1_LastHitIntro" "vo" "Tutorial_M1_LastHitIntro" "npc" "ss_roquelaire" "allow_movement" "1" } "quest" { "name" "quest_earnmoney2" "subquest_player_stat" { "player_stat_type" "gold" "player_stat_value" "185" } } "quest" { "name" "quest_buy_circlet" "type" "1" // 0 = point, 1 = gold, 2 = sword, 3 = shield "title" "#DOTA_Quest_EarnMoney2" "subquest_buy_items" { "item_list" { "item_circlet" "1" } } } "advance_time" "8" "advance_event" "lesson_started" "next_lesson" "tm1_r4_lasthithowto" } "tm1_r4_lasthithowto" { "npc_speech" { "text" "#DOTA_Tutorial_M1_LastHitHowTo" "vo" "Tutorial_M1_LastHitHowTo" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "9.5" } "advance_time" "10" "advance_event" "lesson_started" "next_lesson" "tm1_r4_lasthitmoveto" } "tm1_r4_lasthitmoveto" { "npc_speech" { "text" "#DOTA_Tutorial_M1_LastHitFollow" "vo" "Tutorial_M1_LastHitFollow" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "3" } "trigger_logic_relay" "relay_r6_begin" // setup last hit arena, set roquelaire wp "setcamera_to_follow" "ss_roquelaire" "advance_time" "5" "advance_event" "lesson_started" "next_lesson" "tm1_r6_roquelaireleadfinished" } "tm1_r6_roquelaireleadfinished" { "movecamera_to" "!player" "clear_camera_follow" "1" "advance_time" "1" "advance_event" "lesson_started" "next_lesson" "tm1_r6_beginquest" } "tm1_r6_beginquest" { "hero_levelup" { "hero" "npc_dota_hero_keeper_of_the_light" "level" "2" "levelups" { "keeper_of_the_light_chakra_magic" "1" "attribute_bonus" "1" } } "npc_set_buddha_on" "npc_dota_hero_keeper_of_the_light" "task_move_location" "tgt_r6_moveto" //"advance_event" "tm1_r6_player_entered" // wait for player to enter last hit arena "advance_event" "task_completed" "next_lesson" "tm1_r6_keepermove" } "tm1_r6_keepermove" { "trigger_logic_relay" "relay_r6_keepergreet" "advance_event" "tm1_r6_keeper_arrived" "next_lesson" "tm1_r6_keeperintro" } "tm1_r6_keeperintro" { "npc_speech" { "text" "#DOTA_Tutorial_M1_KeeperIntro" "vo" "Tutorial_M1_KeeperIntro" "npc" "ss_keeper" "duration" "8" } "npc_animation" { "npc" "npc_dota_hero_keeper_of_the_light" "activity" "ACT_DOTA_TAUNT" } "trigger_logic_relay" "relay_snd_kotl_intro" "advance_event" "lesson_started" "next_lesson" "tm1_r6_lasthitreminder" } "tm1_r6_lasthitreminder" { "convars" { "dota_tutorial_roquelaire_useperches" "1" //"dota_tutorial_roquelaire_keepdistance" "1" } "npc_speech" { "text" "#DOTA_Tutorial_M1_LastHitReminder" "vo" "Tutorial_M1_LastHitReminder" "npc" "ss_roquelaire" "allow_movement" "1" "initial_delay" "15" "duration" "8" } "quest_finish" "quest_findkeeper" "advance_on_quest" "quest_earnmoney2" "next_lesson" "tm1_r6_targetgoldhit" } "tm1_r6_targetgoldhit" { "npc_speech" { "text" "#DOTA_Tutorial_M1_LastHitGold185" "vo" "Tutorial_M1_LastHitGold185" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "8" } "trigger_logic_relay" "relay_r6_roquelaire_return_circlet" "advance_event" "merchant_return_circlet" "next_lesson" "tm1_r6_merchantcirclet" } "tm1_r6_merchantcirclet" { "npc_speech" { "text" "#DOTA_Tutorial_M1_LastHitCirclet" "vo" "Tutorial_M1_LastHitCirclet" "npc" "tgt_r4_shopkeeper_speech" } "advance_on_quest" "quest_buy_circlet" "next_lesson" "tm1_r6_bracerrecipe" } "tm1_r6_bracerrecipe" { "remove_item_shop_whitelist" "item_circlet" "npc_speech" { "text" "#DOTA_Tutorial_M1_LastHitBracer" "vo" "Tutorial_M1_LastHitBracer" "npc" "tgt_r4_shopkeeper_speech" "duration" "14" } "advance_time" "1" // delay for quest_finish "advance_event" "lesson_started" "next_lesson" "tm1_r6_lasthitagain" } "tm1_r6_lasthitagain" { // "npc_speech" // { // "text" "#DOTA_Tutorial_M1_LastHitAgain" // "vo" "Tutorial_M1_LastHitAgain" // "npc" "ss_roquelaire" // "allow_movement" "1" // "duration" "4" // } //"trigger_logic_relay" "relay_r6_roquelaire_lasthit" "trigger_logic_relay" "relay_r6_roquelaire_restartcreeps" "quest" { "name" "quest_earnmoney3" "type" "1" // 0 = point, 1 = gold, 2 = sword, 3 = shield "subquest_player_stat" { "player_stat_type" "gold" "player_stat_value" "210" } } "quest" { "name" "quest_buy_bracers" "type" "2" // 0 = point, 1 = gold, 2 = sword, 3 = shield "title" "#DOTA_Quest_EarnMoney3" "subquest_buy_items" { "item_list" { "item_recipe_bracer" "1" } } } "advance_event" "lesson_started" "next_lesson" "tm1_r6_lasthitcancelattack" } "tm1_r6_lasthitcancelattack" { // "npc_speech" // { // "text" "#DOTA_Tutorial_M1_LastHitAttack" // "vo" "Tutorial_M1_LastHitAttack" // "npc" "ss_roquelaire" // "allow_movement" "1" // "initial_delay" "15" // "duration" "10" // } "trigger_logic_relay" "relay_r6_tip2_enable" "reactive_tips" { "tip_1" { "mapIO_event" "r6_playtip_1" "npc_speech" { "text" "#DOTA_Tutorial_M1_LastHitAttack" "vo" "Tutorial_M1_LastHitAttack" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "12" } } } "advance_on_quest" "quest_earnmoney3" "next_lesson" "tm1_r6_bracergoldachieved" } "tm1_r6_bracergoldachieved" { "npc_speech" { "text" "#DOTA_Tutorial_M1_LastHitGold190" "vo" "Tutorial_M1_LastHitGold190" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "8" } "trigger_logic_relay" "relay_r6_roquelaire_return_bracer" // enable trigger before player can rush back "advance_event" "merchant_return_recipe" "next_lesson" "tm1_r6_bracerbuy" } "tm1_r6_bracerbuy" { "convars" { "dota_tutorial_roquelaire_useperches" "0" //"dota_tutorial_roquelaire_keepdistance" "0" //"dota_tutorial_shop_combine_tree" "1" } "npc_speech" { "text" "#DOTA_Tutorial_M1_LastHitRecipe" "vo" "Tutorial_M1_LastHitRecipe" "npc" "tgt_r4_shopkeeper_speech" } "add_item_shop_whitelist" "item_bracer" "add_item_shop_whitelist" "item_recipe_bracer" "task_wait_for_shop_leftclick" "1" // wait for left click on bracer to expose bracer recipe "trigger_logic_relay" "relay_r5_roquelaire_return_nodelay" "advance_event" "task_completed" "next_lesson" "tm1_r6_bracerbuyrecipe" } "tm1_r6_bracerbuyrecipe" { "npc_speech" { "text" "#DOTA_Tutorial_M1_LastHitRecipeBuy" "vo" "Tutorial_M1_LastHitRecipeBuy" "npc" "tgt_r4_shopkeeper_speech" } "trigger_logic_relay" "relay_r6_barrier" // enable barrier to prevent player from getting lost in last hit arena "advance_on_quest" "quest_buy_bracers" "next_lesson" "tm1_r6_bracercomplete" } "tm1_r6_bracercomplete" { "npc_speech" { "text" "#DOTA_Tutorial_M1_LastHitComplete" "vo" "Tutorial_M1_LastHitComplete" "npc" "tgt_r4_shopkeeper_speech" "duration" "10" } "trigger_logic_relay" "relay_snd_shopkeeper_complete" "remove_item_shop_whitelist" "item_bracer" "remove_item_shop_whitelist" "item_recipe_bracer" "advance_time" "10" "advance_event" "lesson_started" "next_lesson" "tm1_r7_begin" } "tm1_r7_begin" { "convars" { "dota_hud_healthbars" "3" // tutorial_start_lesson debug "dota_tutorial_roquelaire_useperches" "0" // tutorial_start_lesson debug "dota_tutorial_prevent_exp_gain" "5" // limit level to 5 } "set_tutorial_UI" "3" // tutorial_start_lesson debug "npc_speech" { "text" "#DOTA_Tutorial_M1_UltBegin" "vo" "Tutorial_M1_UltBegin" "npc" "ss_roquelaire" //"allow_movement" "0" } "advance_time" "8" "advance_event" "lesson_started" "next_lesson" "tm1_r7_allowentry" } "tm1_r7_allowentry" { "stop_npc_speech" "ss_roquelaire" "quest" { "name" "quest_levelult" "type" "0" // 0 = point, 1 = gold, 2 = sword, 3 = shield "title" "#DOTA_Quest_LevelUlt" "subquest_player_stat" { "player_stat_type" "level" "player_stat_value" "6" } } "trigger_logic_relay" "relay_r7_begin" // send roquelaire and open barrier "task_move_location" "tgt_r7_moveto" "advance_event" "task_completed" "next_lesson" "tm1_r7_waitforplayer" } "tm1_r7_waitforplayer" { "advance_event" "tm1_r7_player_entered" "next_lesson" "tm1_r7_level" } "tm1_r7_level" { "convars" { "dota_tutorial_roquelaire_useperches" "1" } "reactive_tips" { "tip_1" { "mapIO_event" "r7_playtip_1" "npc_speech" { "text" "#DOTA_Tutorial_M1_LaneTip_1" "vo" "Tutorial_M1_LaneTip_1" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "12" } } "tip_2" { "mapIO_event" "r7_playtip_2" "npc_speech" { "text" "#DOTA_Tutorial_M1_LaneTip_2" "vo" "Tutorial_M1_LaneTip_2" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "12" } } "tip_3" { "mapIO_event" "r7_playtip_3" "npc_speech" { "text" "#DOTA_Tutorial_M1_LaneTip_3" "vo" "Tutorial_M1_LaneTip_3" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "12" } } } "quest" { "name" "quest_level5" "subquest_player_stat" { "player_stat_type" "level" "player_stat_value" "5" } } "advance_on_quest" "quest_level5" "next_lesson" "tm1_r7_reached5" } "tm1_r7_reached5" { "convars" { "dota_tutorial_force_learn_ability" "1" } "trigger_logic_relay" "relay_r7_count_wave_disable" // disable counter for tips while waiting for player to level and use skills "trigger_logic_relay" "relay_r7_dragon_tail_wait" // disable spawning "npc_speech" { "text" "#DOTA_Tutorial_M1_DragonTail" "vo" "Tutorial_M1_DragonTail" "npc" "ss_roquelaire" "allow_movement" "1" } "task_learn_ability" "dragon_knight_dragon_tail" "advance_event" "task_completed" "next_lesson" "tm1_r7_wait_for_dragontail" } "tm1_r7_wait_for_dragontail" { "convars" { "dota_tutorial_force_learn_ability" "-1" } "trigger_logic_relay" "relay_r7_dragon_tail_resume" "reactive_tips" { "tip_usetail" { "timer" "0" "repeat_count" "999" "remove_on_ability" "dragon_knight_dragon_tail" "npc_speech" { "text" "#DOTA_Tutorial_M1_UseDragonTail" "vo" "Tutorial_M1_UseDragonTail" "npc" "ss_roquelaire" "allow_movement" "1" } } } "task_use_ability" "dragon_knight_dragon_tail" "advance_event" "task_completed" "next_lesson" "tm1_r7_wait_for_6" } "tm1_r7_wait_for_6" { "stop_npc_speech" "ss_roquelaire" "trigger_logic_relay" "relay_r7_count_wave_enable" // enable counter so tips can continue "convars" { "dota_tutorial_prevent_exp_gain" "6" // limit level to 6 } "reactive_tips" { "tip_1" { "mapIO_event" "r7_playtip_1" "npc_speech" { "text" "#DOTA_Tutorial_M1_LaneTip_1" "vo" "Tutorial_M1_LaneTip_1" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "12" } } "tip_2" { "mapIO_event" "r7_playtip_2" "npc_speech" { "text" "#DOTA_Tutorial_M1_LaneTip_2" "vo" "Tutorial_M1_LaneTip_2" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "12" } } "tip_3" { "mapIO_event" "r7_playtip_3" "npc_speech" { "text" "#DOTA_Tutorial_M1_LaneTip_3" "vo" "Tutorial_M1_LaneTip_3" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "12" } } } "advance_on_quest" "quest_levelult" "next_lesson" "tm1_r7_reached6" } "tm1_r7_reached6" { "convars" { "dota_tutorial_force_learn_ability" "3" } "npc_speech" { "text" "#DOTA_Tutorial_M1_UltLevel" "vo" "Tutorial_M1_UltLevel" "npc" "ss_roquelaire" "allow_movement" "1" } "trigger_logic_relay" "relay_r7_stop_creeps" "task_learn_ability" "dragon_knight_elder_dragon_form" "advance_event" "task_completed" "next_lesson" "tm1_r7_razorbegin" } "tm1_r7_razorbegin" { "convars" { "dota_tutorial_force_learn_ability" "-1" } "npc_speech" { "text" "#DOTA_Tutorial_M1_RazorBegin" "vo" "Tutorial_M1_RazorBegin" "npc" "ss_roquelaire" "allow_movement" "1" } "npc_animation" { "npc" "npc_dota_hero_razor" "activity" "ACT_INVALID" } "quest" { "name" "quest_findrazor" "type" "2" // 0 = point, 1 = gold, 2 = sword, 3 = shield "title" "#DOTA_Quest_FindRazor" } "task_use_ability" "dragon_knight_elder_dragon_form" "advance_event" "task_completed" "next_lesson" "tm1_r7_razorfight" } "tm1_r7_razorfight" { "npc_speech" { "text" "#DOTA_Tutorial_M1_RazorIncoming" "vo" "Tutorial_M1_RazorIncoming" "npc" "ss_roquelaire" "allow_movement" "1" "duration" "5" } "trigger_logic_relay" "relay_r7_spawn_razor" "advance_event" "lesson_started" "advance_time" "1" "next_lesson" "tm1_r7_razorsetup" } "tm1_r7_razorsetup" { "hero_levelup" { "hero" "npc_dota_hero_razor" "level" "5" "levelups" { "razor_plasma_field" "1" "attribute_bonus" "1" "razor_plasma_field" "1" } } "movecamera_to" "wp_razor_tp" "trigger_logic_relay" "relay_snd_razor_intro" "advance_time" "2.5" "advance_event" "lesson_started" "next_lesson" "tm1_r7_razorcamera" } "tm1_r7_razorcamera" { "movecamera_to" "!player" "clear_camera_follow" "1" "advance_time" "1" "advance_event" "lesson_started" "next_lesson" "tm1_r7_razorspeech" } "tm1_r7_razorspeech" { "npc_speech" { "text" "#DOTA_Tutorial_M1_RazorArrive" "vo" "scenes/razor/razor_raz_spawn_04.vcd" "npc" "ss_razor" "allow_movement" "1" "duration" "4" } "advance_event" "ss_razor_dead" "next_lesson" "tm1_r7_razordead" } "tm1_r7_razordead" { "npc_speech" { "text" "#DOTA_Tutorial_M1_RazorDead" "vo" "Tutorial_M1_RazorDead" "npc" "ss_roquelaire" "allow_movement" "1" } "trigger_logic_relay" "relay_snd_tutorial_end" "quest_finish" "quest_findrazor" "advance_time" "6" "advance_event" "lesson_started" "next_lesson" "tm1_end" } "tm1_end" { "stop_npc_speech" "ss_roquelaire" "finish_text" "#DOTA_Tutorial_Finished_Tutorial01" "finish_tutorial" "1" } }