BERKYT

Berkyt's map

Jan 7th, 2022
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 15.71 KB | None | 0 0
  1. --=================================================================================================================================================================
  2. --  Berkyt's Map Win Condition
  3. --  By BERKYT
  4. --  Links: VK: https://vk.com/b_e_r_k_y_t Discord: https://discord.gg/amMreCC YouTube: https://www.youtube.com/channel/UCaPBjmrAYO6p-ksHNaymwLg?view_as=subscriber
  5. --  The script is distributed freely, provided that the author of the script is indicated - BERKYT
  6. --=================================================================================================================================================================
  7.  
  8. function bm_OnGameSetup()
  9.     for i=1, World_GetPlayerCount() do
  10.         if i ~= 3 then
  11.             g_table_players["player_"..i] = World_GetPlayerAt(i-1)
  12.         end
  13.     end
  14.    
  15.     g_count_ad = 1
  16.    
  17.     g_table_sgroup_enemies =
  18.     {
  19.     }  
  20.     g_table_squad_stuck =
  21.     {
  22.     }  
  23.     g_table_squad_reinforcement_timers =
  24.     {
  25.     }
  26.    
  27.     --Timer
  28.     g_timer_wave = 0
  29.     g_timer_re = 0
  30.     g_timer_to_win = -1
  31.     g_interval_squad_stuck = 0
  32.     g_time_squad_stuck = 0
  33.    
  34.     --Waves
  35.     g_num_waves = 1
  36.     g_number_wave = 0
  37.    
  38.     --Music
  39.     g_id_track = nil
  40.     g_check_music_playing = false
  41.    
  42.     g_check_wave_alive = false
  43. end
  44.  
  45. function bm_init()
  46.     print("<Berkyt's Map> Initing Berkyt's Map Scar... ")
  47.     bm_OnGameSetup()
  48.     bm_Test()
  49.     bm_deleteHq()
  50.     bm_Start_map()
  51.     bm_SetSGroupOfWavesFromTable()
  52.     bm_CreateTableTimersSquadStuck()
  53.     bm_CreateTableTimersReinforcement()
  54.     bm_SetSGroupOfReinforcementsFromTable()
  55.    
  56.     Cpu_Enable(g_Player3, false)
  57.    
  58.     Rule_Add(bm_Rule_EndGameWin)
  59.     Rule_Add(bm_Rule_EndGameLose)
  60.  
  61.     Rule_AddOneShot(bm_Sberbank, 30)
  62.    
  63.     Rule_AddInterval(bm_Advertising, 7 * 60)
  64.     Rule_AddInterval(bm_CheckingEndWave, 1)
  65.     print("<Berkyt's Map> Success")
  66. end
  67.  
  68. Scar_AddInit(bm_init)
  69.  
  70. function bm_Start_map()
  71.     Fade_Start(5, true)
  72.     Util_MissionTitle("By: BERKYT")
  73. end
  74.  
  75. -- This function created by SWayfarer
  76. function bm_deleteHq()
  77.     local i1 = 0
  78.     local eg = "rjgrfjlrefvrfgftgb"
  79.     local sg = "brjrfgbkfgnf3243re"
  80.    
  81.     if (Marker_Exists("mkr_BERKYT_script_deleteEntities", "basic_marker")) then
  82.         for i1 = 1, World_GetPlayerCount() do
  83.             Player_GetAllEntitiesNearMarker(World_GetPlayerAt(i1 - 1), eg, "mkr_BERKYT_script_deleteEntities")
  84.            
  85.             EGroup_DestroyAllEntities(eg)
  86.             EGroup_Destroy(eg)
  87.         end
  88.     else
  89.         print("<Berkyt's Map> (Error) Can't remove entities because special marker not exists!")
  90.     end
  91.    
  92.     if (Marker_Exists("mkr_BERKYT_script_deleteSquads", "basic_marker")) then
  93.         for i1 = 1, World_GetPlayerCount() do
  94.            
  95.             Player_GetAllSquadsNearMarker(World_GetPlayerAt(i1 - 1), sg, "mkr_BERKYT_script_deleteSquads")
  96.            
  97.             SGroup_DestroyAllSquads(sg)
  98.             SGroup_Destroy(sg)
  99.         end
  100.     else
  101.         print("<Berkyt's Map> (Error) Can't remove squads because special marker not exists!")
  102.     end
  103. end
  104. --
  105.  
  106. function bm_Advertising()
  107.     if(g_count_ad == 1) then
  108.         bm_Site_En()
  109.     elseif(g_count_ad == 2) then
  110.         bm_VKontakte()
  111.     elseif(g_count_ad == 3) then
  112.         bm_Sberbank()
  113.     elseif(g_count_ad == 4) then
  114.         bm_WebMoney()
  115.         g_count_ad = 0
  116.     end
  117.    
  118.     g_count_ad = g_count_ad + 1
  119. end
  120.  
  121. function bm_WebMoney()
  122.     Util_MissionTitle("If you want to thank the author for the script, then here's how to do it: WebMoney: R515364081475(RUB) or Z262863085617(USD)(Check ReadMe - file)")
  123. end
  124.  
  125. function bm_Sberbank()
  126.     Util_MissionTitle("If you want to thank the author for the script, then here's how to do it: Sberbank: 5469 4000 2976 6750 (Check ReadMe - file)")
  127. end
  128.  
  129. function bm_VKontakte()
  130.     Util_MissionTitle("VKontakte: https://vk.com/club177090833 (Check ReadMe - file)")
  131. end
  132.  
  133. function bm_Site_En()
  134.     if World_GetRand(0, 1) == 1 then
  135.         Util_MissionTitle("Visit my website and receive exclusive information!(Check ReadMe - file)")
  136.     else
  137.         Util_MissionTitle("Visit my website and receive exclusive information! Link: http://bit.ly/3glPSP7")
  138.     end
  139. end
  140.  
  141. function bm_Site_Ru()
  142.     Util_MissionTitle("???????? ??? ???? ? ????????? ???????????? ??????????!(????????? 'ReadMe' - ????)")
  143. end
  144.  
  145. function bm_Print(...)
  146.     local line = ""
  147.    
  148.     for i = 1, arg.n do
  149.         line = line .. " " ..tostring(arg[i])
  150.     end
  151.    
  152.     print("<Debug message> { "..line.." }")
  153. end
  154.  
  155. function bm_LengthTable(table)
  156.     local len = 0
  157.    
  158.     if type(table) == "table" then
  159.         for _ in table do
  160.             len = len + 1
  161.         end
  162.        
  163.         return tonumber(len)
  164.     else
  165.         return nil
  166.     end
  167. end
  168.  
  169. function bm_TurnOnMusicWhenAttack(player)
  170.     local name_race = Player_GetRaceName(player)
  171.     local table_playlist =
  172.     {
  173.         ["chaos_marine_race"] =
  174.         {
  175.             "MU_IG_STR_Chaos", "MU_IG_STR_Chaos_perc", "MU_IG_STR_Chaos_perc_brass",
  176.             "MU_IG_STR_Chaos_perc_str", "MU_IG_STR_Chaos_perc_voice"
  177.         },
  178.         ["eldar_race"] =
  179.         {
  180.             "MU_IG_STR_Eldar", "MU_IG_STR_Eldar_perc",
  181.             "MU_IG_STR_Eldar_perc_brass", "MU_IG_STR_Eldar_perc_str"
  182.         },
  183.         ["guard_race"] =
  184.         {  
  185.             "MU_IG_STR_ImpGd_perc_brass", "MU_IG_STR_ImpGd", "MU_IG_STR_ImpGd_perc",
  186.             "MU_IG_STR_ImpGd_perc_str", "MU_IG_STR_ImpGd_perc_voice"
  187.         },
  188.         ["necron_race"] =
  189.         {
  190.             "MU_IG_THEME_Nightbringer", "MU_IG_STR_Necron", "MU_IG_STR_Necron_perc",
  191.             "MU_IG_STR_Necron_perc_brass", "MU_IG_STR_Necron_perc_str"
  192.         },
  193.         ["ork_race"] =
  194.         {
  195.             "MU_IG_STR_Ork", "MU_IG_STR_Ork_perc", "MU_IG_STR_Ork_perc_str",
  196.             "MU_IG_STR_Ork_perc_brass", "music_msd5o", "music_msd1"
  197.         },
  198.         ["space_marine_race"] =
  199.         {
  200.             "MU_IG_STR_SpaceMarine", "MU_IG_STR_SpaceMarine_perc",
  201.             "MU_IG_STR_SpaceMarine_perc_brass", "MU_IG_STR_SpaceMarine_perc_str"
  202.         },
  203.         ["tau_race"] =
  204.         {
  205.             "MU_IG_STR_Tau", "MU_IG_RAC_Tau", "MU_IG_STR_Tau_perc",
  206.             "MU_IG_STR_Tau_perc_str", "MU_IG_STR_Tau_perc_brass"
  207.         },
  208.         ["dark_eldar_race"] =
  209.         {
  210.             "MU_IG_STR_darkeldar_perc_str", "MU_IG_STR_darkeldar",
  211.             "MU_IG_STR_darkeldar_perc", "MU_IG_STR_darkeldar_perc_brass"
  212.         },
  213.         ["sisters_race"] =
  214.         {
  215.             "mu_ig_str_sisters", "mu_ig_str_sisters_perc_str", "mu_ig_str_sisters_perc_voice"
  216.         },
  217.         ["default"] =
  218.         {
  219.             "MU_IG_STR_Tau", "MU_IG_STR_Chaos", "MU_IG_STR_Eldar",
  220.             "MU_IG_STR_ImpGd_perc_brass", "MU_IG_THEME_Nightbringer",
  221.             "MU_IG_STR_Ork", "MU_IG_STR_SpaceMarine", "MU_IG_STR_darkeldar_perc_str", "mu_ig_str_sisters"
  222.         }
  223.     }
  224.    
  225.     for key in table_playlist do
  226.         if key == name_race then
  227.             Sound_PlaylistPlayNow(PC_Music, table_playlist[key][World_GetRand(1, bm_LengthTable(table_playlist[key]))])
  228.             g_check_music_playing = true
  229.            
  230.             return
  231.         end
  232.     end
  233.    
  234.     Sound_PlaylistPlayNow(PC_Music, table_playlist["default"][World_GetRand(1, bm_LengthTable(table_playlist["default"]))])
  235. end
  236.  
  237. function bm_Rule_EndGameWin()
  238.     if g_num_waves > bm_LengthTable(g_table_warriors.waves) and
  239.         bm_SGroup_GetAvgHealthFromTable(sg_table_type_unit) <= 0
  240.     then
  241.         World_SetGameOver()
  242.     end
  243. end
  244.  
  245. function bm_Rule_EndGameLose()
  246.     local building_exceptions =
  247.     {
  248.         "chaos_armoury",
  249.         "chaos_listening_post",
  250.         "chaos_mine_field",
  251.         "chaos_plasma_generator",
  252.         "chaos_thermo_plasma_generator",
  253.         "chaos_turret_bolter",
  254.        
  255.         "eldar_advanced_warp_generator",
  256.         "eldar_listening_post",
  257.         "eldar_mine_field",
  258.         "eldar_soul_shrine",
  259.         "eldar_support_platform_scatterlaser",
  260.         "eldar_warp_generator",
  261.        
  262.         "ork_bigger_generator",
  263.         "ork_generator",
  264.         "ork_gork_totem",
  265.         "ork_mine_field",
  266.         "ork_pile_o_guns",
  267.         "ork_waagh_banner",
  268.        
  269.         "space_marine_armoury",
  270.         "space_marine_generator",
  271.         "space_marine_listening_post",
  272.         "space_marine_mine_field",
  273.         "space_marine_turret_bolter",
  274.         "space_marine_thermo_generator",
  275.        
  276.         "guard_listening_post",
  277.         "guard_mines",
  278.         "guard_plasma_generator",
  279.         "guard_tactica",
  280.         "guard_thermo_plasma",
  281.         "guard_turret_heavy_bolter",
  282.        
  283.         "necron_listening_post",
  284.         "necron_summoning_core",
  285.         "necron_plasma_generator",
  286.         "necron_energy_core",
  287.         "necron_greater_summoning_core",
  288.         "necron_forbidden_archive",
  289.         "necron_thermoplasma_generator",
  290.         "necron_turret",
  291.        
  292.         "tau_listening_post",
  293.         "tau_research_building",
  294.         "tau_shrine_of_kauyon",
  295.         "tau_shrine_of_montka",
  296.         "tau_shrine_of_purpose",
  297.         "tau_thermoplasma_generator",
  298.         "tau_turret_sp",   
  299.         "tau_plasma_generator",
  300.        
  301.         "sisters_thermo_plasma",
  302.         "sisters_plasma_generator",
  303.         "sisters_turret_flamer",
  304.         "sisters_holy_reliquary",
  305.         "sisters_listening_post",
  306.         "sisters_mines",
  307.         "sisters_sanctuary",
  308.        
  309.         "dark_eldar_haemonculus_laboratory",
  310.         "dark_eldar_listening_post",
  311.         "dark_eldar_plasma_generator",
  312.         "dark_eldar_slave_caravel",
  313.         "dark_eldar_soul_cage",
  314.         "dark_eldar_thermo_plasma",
  315.         "dark_eldar_wych_cult_arena"
  316.     }
  317.  
  318.     for key, player in pairs(g_table_players) do
  319.         if Player_IsAlive(player) then
  320.             if Player_HasBuildingsExcept(player, building_exceptions) == false then
  321.                 Player_Kill(player)
  322.             end
  323.         end
  324.     end
  325. end
  326.  
  327. function bm_CreateTableTimersSquadStuck()
  328.     for key_wave, table_waves in pairs(g_table_warriors.waves) do
  329.         g_table_squad_stuck[key_wave] = {}
  330.        
  331.         for key in table_waves do
  332.             g_table_squad_stuck[key_wave][key] = 0
  333.             --bm_Print(g_table_squad_stuck[key_wave][key])
  334.         end
  335.     end
  336. end
  337.  
  338. function bm_CreateTableTimersReinforcement()
  339.     for player in g_table_players do
  340.         g_table_squad_reinforcement_timers[player] = 0
  341.         --bm_Print("g_table_squad_reinforcement_timers[player] =",g_table_squad_reinforcement_timers[player])
  342.     end
  343. end
  344.  
  345. function bm_CheckingSquadStuck(key_wave, key_type, sg_wave_troops_team)
  346.     local time_wait = 90
  347.    
  348.     SGroup_CreateIfNotFound(sg_wave_troops_team)
  349.    
  350.     if SGroup_IsUnderAttack(sg_wave_troops_team, false) == false then
  351.         g_table_squad_stuck[key_wave][key_type] = g_table_squad_stuck[key_wave][key_type] + 1
  352.         --bm_Print(g_table_squad_stuck[key_wave][key_type])
  353.        
  354.         if g_table_squad_stuck[key_wave][key_type] >= time_wait then
  355.             SGroup_DestroyAllSquads(sg_wave_troops_team)
  356.             g_table_squad_stuck[key_wave][key_type] = 0
  357.         end
  358.     else
  359.         g_table_squad_stuck[key_wave][key_type] = 0
  360.     end    
  361. end
  362.  
  363. function bm_SearchForAPlayerInTableByIndex(var)
  364.     for key in g_table_players do
  365.         local int_key = tonumber(string.sub(tostring(key), 8))
  366.        
  367.         if int_key == var then
  368.             return g_table_players[key]
  369.         end
  370.     end
  371. end
  372.  
  373. function bm_Timer()
  374.     sg_table_type_unit = g_table_sgroup_enemies["wave_"..g_number_wave + 1]
  375.    
  376.     if g_number_wave ~= 0 then
  377.         sg_table_type_unit = g_table_sgroup_enemies["wave_"..g_number_wave]
  378.     end
  379.    
  380.     if bm_SGroup_GetAvgHealthFromTable(sg_table_type_unit) <= 0 then
  381.         g_timer_wave = g_timer_wave + 1
  382.         --bm_Print("g_timer_wave = ", g_timer_wave)
  383.        
  384.         if g_timer_wave > g_interval + 1 then
  385.             g_timer_wave = 0
  386.         end
  387.     end
  388.    
  389.     for player in g_table_sgroup_players do
  390.         SGroup_CreateIfNotFound(g_table_sgroup_players[player])
  391.        
  392.         if SGroup_GetAvgHealth(g_table_sgroup_players[player]) <= 0 then
  393.            
  394.             g_table_squad_reinforcement_timers[player] = g_table_squad_reinforcement_timers[player] + 1
  395.             --bm_Print("g_table_squad_reinforcement_timers[player] =",g_table_squad_reinforcement_timers[player])
  396.             if g_table_squad_reinforcement_timers[player] > g_t_interval_reinforcement + 1 then
  397.                 g_table_squad_reinforcement_timers[player] = 0
  398.             end
  399.         end
  400.     end
  401. end
  402.  
  403. function bm_SetSGroupOfWavesFromTable()
  404.     for key_wave, table_waves in pairs(g_table_warriors.waves) do
  405.         g_table_sgroup_enemies[key_wave] = {}
  406.        
  407.         for key in table_waves do
  408.             g_table_sgroup_enemies[key_wave][key] = "sg_Attack_Warriors_"..key
  409.             SGroup_CreateIfNotFound("sg_Attack_Warriors_"..key)
  410.         end
  411.     end
  412. end
  413.  
  414. function bm_SetSGroupOfReinforcementsFromTable()
  415.     for item in g_table_players do
  416.         g_table_sgroup_players[item] = "sg_Reinforcements_Warriors_"..string.sub(tostring(item), 8)
  417.     end
  418. end
  419.  
  420. function bm_SGroup_GetAvgHealthFromTable(table_wave)
  421.     local sum_health = 0
  422.    
  423.     for key in table_wave do
  424.         sum_health = sum_health + SGroup_GetAvgHealth(table_wave[key])
  425.     end
  426.    
  427.     --bm_Print("sum_health=", sum_health)
  428.     return sum_health
  429. end
  430.  
  431. function bm_CheckingEndWave()
  432.     local sg_table_type_unit = g_table_sgroup_enemies["wave_"..g_number_wave + bm_SmartIncrement()]
  433.  
  434.     if bm_SGroup_GetAvgHealthFromTable(sg_table_type_unit) <= 0 and g_check_wave_alive then
  435.         g_check_wave_alive = false
  436.        
  437.         Util_MissionTitle("You did it! But it's too early to relax. A new attack is about to begin!")
  438.     end
  439. end
  440.  
  441. function bm_SGroup_IsEmptyTable(table_wave)
  442.     local sum_health = 0
  443.    
  444.     for key in table_wave do
  445.         if SGroup_IsEmpty(table_wave[key]) then
  446.             return true
  447.         end
  448.     end
  449.    
  450.     return false
  451. end
  452.  
  453. function bm_SmartIncrement()
  454.     local increment = 0
  455.    
  456.     if g_number_wave == 0 then
  457.         increment = increment + 1
  458.        
  459.         return increment
  460.     end
  461.    
  462.     return increment
  463. end
  464.  
  465. function bm_CreateWaves()
  466.     sg_table_type_unit = g_table_sgroup_enemies["wave_"..g_number_wave + bm_SmartIncrement()]
  467.    
  468.     if bm_SGroup_GetAvgHealthFromTable(sg_table_type_unit) > 0 then
  469.         for key_type in sg_table_type_unit do
  470.             bm_CheckingSquadStuck("wave_"..g_number_wave + bm_SmartIncrement(), key_type, sg_table_type_unit[key_type])
  471.         end
  472.     end
  473.    
  474.     if g_timer_wave >= g_interval and
  475.         bm_SGroup_IsEmptyTable(sg_table_type_unit) and
  476.         bm_SGroup_GetAvgHealthFromTable(sg_table_type_unit) <= 0
  477.     then
  478.         g_timer_wave = 0
  479.         g_check_wave_alive = true
  480.         bm_TurnOnMusicWhenAttack(g_Player3)
  481.        
  482.         Util_MissionTitle("Wave number "..g_num_waves)
  483.        
  484.         if bm_SGroup_GetAvgHealthFromTable(sg_table_type_unit) <= 0 then
  485.             for key_wave, table_types in pairs(g_table_warriors.waves) do
  486.                 if type(table_types) == "table" and tonumber(string.sub(key_wave, 6)) == g_num_waves then
  487.                     for key_j, table_items in pairs(table_types) do
  488.                         Util_CreateSquadsAtMarkerEx(g_Player3, g_table_sgroup_enemies[key_wave][key_j],
  489.                                                     table_items[1], "mkr_wave_"..World_GetRand(1, g_attack_point),
  490.                                                     table_items[2],
  491.                                                     table_items[3])
  492.                            
  493.                         if table_items[4][1] ~= "default" or table_items[4][2] ~= nil then
  494.                             Squad_ForceUpgradeWeapons(
  495.                                 SGroup_GetSpawnedSquadAt(
  496.                                     SGroup_FromName(g_table_sgroup_enemies[key_wave][key_j]), 1),
  497.                                     table_items[4][1],
  498.                                     table_items[4][2])
  499.                         end
  500.                        
  501.                         if table_items[5] then
  502.                             SGroup_AddLeaders(g_table_sgroup_enemies[key_wave][key_j])
  503.                         end
  504.                        
  505.                         Cmd_AttackMoveMarker(g_table_sgroup_enemies[key_wave][key_j],
  506.                         "mkr_to_player_"..World_GetRand(1, bm_LengthTable(g_table_players)))
  507.                     end
  508.                 end
  509.             end
  510.         end
  511.        
  512.         g_num_waves = g_num_waves + 1
  513.         g_number_wave = g_number_wave + 1
  514.     end
  515. end
  516.  
  517. function bm_SpawnReinforcement()   
  518.     --bm_Print("g_table_squad_reinforcement_timers[player] =",g_table_squad_reinforcement_timers[player])  
  519.     for player in g_table_players do
  520.         local num_player = tonumber(string.sub(tostring(player), 8))
  521.        
  522.         if  num_player > 3 then
  523.             num_player = num_player - 1
  524.         end
  525.        
  526.         if g_table_squad_reinforcement_timers[player] == g_t_interval_reinforcement then
  527.             g_table_squad_reinforcement_timers[player] = 0
  528.             SGroup_CreateIfNotFound(g_table_sgroup_players[player])
  529.            
  530.             if SGroup_IsEmpty(g_table_sgroup_players[player]) and SGroup_GetAvgHealth(g_table_sgroup_players[player]) <= 0 then
  531.                 for key_i, table_i in pairs(g_table_warriors.reinforcements) do
  532.                     if bm_SearchForAPlayerInTableByIndex(
  533.                         tonumber(string.sub(tostring(key_i), 25))) == g_table_players[player]
  534.                     then
  535.                         for key_j, table_j in pairs(table_i) do
  536.                             bm_Print(g_table_players[player], g_table_sgroup_players[player])
  537.                             Util_CreateSquadsAtMarkerEx(g_table_players[player], g_table_sgroup_players[player],
  538.                                                         table_j[1], "mkr_reinforcement_"..num_player,
  539.                                                         table_j[2],
  540.                                                         table_j[3])
  541.                         end
  542.                        
  543.                         SGroup_AddLeaders(g_table_sgroup_players[player])
  544.                     end
  545.                 end
  546.                
  547.                 Ping_Marker ("mkr_reinforcement_"..num_player, false)
  548.                 Util_MissionTitle("Reinforcements have arrived!")
  549.             end
  550.         end
  551.     end
  552. end
  553.  
  554. function bm_Test()
  555.     if Debug_mod then
  556.         FOW_RevealAll()
  557.         Util_CreateSquadsAtMarkerEx(g_table_players.player_1,
  558.         "230948720398414887023984723094781811520", "guard_squad_baneblade", "mkr_to_player_1", 4, 1)
  559.     end
  560. end
  561.  
Add Comment
Please, Sign In to add comment