xDes
Продвинутый
8 Ноя 2018 232 34 Проект Boss Survival Adventure
Подскажите пожалуйста, вот я выдрал в недрах форума вот такой код:
function CAddonTemplateGameMode:OnEntityKilled( keys ) local killed_unit = EntIndexToHScript( keys.entindex_killed ) local killer = EntIndexToHScript( keys.entindex_attacker ) if killed_unit:GetUnitName() == «npc_dota_neutral_kobold» then for i = 0, PlayerResource:GetPlayerCount() — 1 do local gold = 322 — кол-во голды local player = PlayerResource:GetSelectedHeroEntity(i) if player:GetTeam() == killer:GetTeam() then player:ModifyGold( gold, true, 0 ) SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil) end end end end
этот код дает 322 голды за убийство крипа всей команде, не важно как далеко от крипа ты находился и был ли мертв(как за тавера в обычной доте)
Я был бы очень благодарен если бы вы мне помогли понять и подправить этот код, чтобы голду давало только живым героям и в определенном радиусе от крипа. Знаю есть FindUnitsInRadius, но как их подружить не пойму.
ПОЛЕЗНЫЕ НАСТРОЙКИ В ДОТЕ О КОТОРЫХ ЗНАЮТ ЕДИНИЦЫ
И еще вопрос, если у меня 20 видов крипов и я хочу чтобы за каждого из них давало по разному, то мне надо 20 таких функций? или мне подсказали про какой-то массив, как это?
И еще в файле npc_units_custom, есть строка которая отвечает за эксп и год у крипа, и вот там эксп при смерти крипа дается всем кто рядом, а голд естественно только добившему. Правильно ли я делаю что эксп задаю только там и нигде больше, а голд в ЛУА пишу.
xDes
Продвинутый
8 Ноя 2018 232 34 Проект Boss Survival Adventure
никто не знает или не хочет помочь?
vulkantsk
Супермодератор
Команда форума
21 Июн 2017 1,036 172 www.dotabuff.com Проект Roshan defense
Я не проверял , если не работает то отпишися.
HappyFeedFriends
Друзья CG
14 Авг 2017 540 32 Проект Battle Heroes Arena
Фильтры опыта/золота. Отключает золотои опыт за убийство крипа, при убийстве героем находишь его команду и выдаёшь золото. KilledUnit:GetGoldBounty() каждому. Всё.
xDes
Продвинутый
8 Ноя 2018 232 34 Проект Boss Survival Adventure
Я не проверял , если не работает то отпишися.
Привет твой код мне когда-то очень помог и выручил!! Спасибо! Но сейчас осмелюсь тебя попросить. а как сделать чтобы допустим эти 322 голды делились на то кол-во героев что в радиусе? Например если один герой значит ему все 322, два героя значит 322/2 и и.д.
xDes
Продвинутый
8 Ноя 2018 232 34 Проект Boss Survival Adventure
и еще вот таким способом у меня проигрывают люди. т.е. когда все умерли победа сил тьмы :
local bAllPlayersDead = true for nPlayerID = 0, DOTA_MAX_TEAM_PLAYERS-1 do if PlayerResource:GetTeam( nPlayerID ) == DOTA_TEAM_GOODGUYS then if not PlayerResource:HasSelectedHero( nPlayerID ) then bAllPlayersDead = false else local hero = PlayerResource:GetSelectedHeroEntity( nPlayerID ) if hero and hero:IsAlive() then bAllPlayersDead = false end end end end if bAllPlayersDead then GameRules:MakeTeamLose( DOTA_TEAM_GOODGUYS ) return end
но есть у меня Wraith King который например остался один и у него есть ульт, так вот если его убить он начинает перерождаться, но победа все равно сил тьмы.. как исправить?
.фи
Активный
21 Мар 2018 93 9
но есть у меня Wraith King который например остался один и у него есть ульт, так вот если его убить он начинает перерождаться, но победа все равно сил тьмы.. как исправить?
Писать фильтры по-прочнее.
Как видишь у тебя «bAllPlayersDead» проверяет только живых, а нужно чтоб проверяло и мёртвых с определённым свойством ( ~= nil — не отсутствующим ).
В данном случае, возрождение через 3 сек. Попробуй так:
Спойлер: вкрапление
if hero and hero:IsAlive() and hero:FindModifierByName( «modifier_skeleton_king_reincarnation» ) ~= nil then
bAllPlayersDead = false
end
А вообще, пройдись хотя бы взглядом по списку.
xDes
Продвинутый
8 Ноя 2018 232 34 Проект Boss Survival Adventure
Писать фильтры по-прочнее.
Как видишь у тебя «bAllPlayersDead» проверяет только живых, а нужно чтоб проверяло и мёртвых с определённым свойством ( ~= nil — не отсутствующим ).
В данном случае, возрождение через 3 сек. Попробуй так:
Спойлер: вкрапление
if hero and hero:IsAlive() and hero:FindModifierByName( «modifier_skeleton_king_reincarnation» ) ~= nil then
bAllPlayersDead = false
end
А вообще, пройдись хотя бы взглядом по списку.
спасибо, но как я понимаю сейчас он проверяет так (герой)-(живой герой)-(у героя есть реинкарнация) , т.е. заменить тупо строчку if hero and hero:IsAlive() then на if hero and hero:IsAlive() and hero:FindModifierByName( «modifier_skeleton_king_reincarnation» ) ~= nil then это не выход?
спасибо за список)) я просто только начинаю и мне много не понятно
xDes
Продвинутый
8 Ноя 2018 232 34 Проект Boss Survival Adventure
может как-то так?
CAddonTemplateGameMode:OnEntityKilled( keys ) local killed_unit = EntIndexToHScript( keys.entindex_killed ) local killer = EntIndexToHScript( keys.entindex_attacker ) if killed_unit:GetUnitName() == «npc_dota_neutral_kobold» then local heroes = FindUnitsInRadius(killer:GetTeamNumber(), killed_unit:GetAbsOrigin(), nil, 1000, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false ) for _,unit in pairs(heroes) do local gold = 322 — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(i) if player:GetTeam() == killer:GetTeam() then player:ModifyGold(playerID, gold / heroes, true, 0 ) end end end end
я уже понял что не так. помогите пожалуйста
Последнее редактирование: 9 Янв 2019
HappyFeedFriends
Друзья CG
14 Авг 2017 540 32 Проект Battle Heroes Arena
может как-то так?
CAddonTemplateGameMode:OnEntityKilled( keys ) local killed_unit = EntIndexToHScript( keys.entindex_killed ) local killer = EntIndexToHScript( keys.entindex_attacker ) if killed_unit:GetUnitName() == «npc_dota_neutral_kobold» then local heroes = FindUnitsInRadius(killer:GetTeamNumber(), killed_unit:GetAbsOrigin(), nil, 1000, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false ) for _,unit in pairs(heroes) do local gold = 322 — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(i) if player:GetTea7m() == killer:GetTeam() then player:ModifyGold(playerID, gold / heroes, true, 0 ) end end end end
я уже понял что не так. помогите пожалуйста
local gold = 322/#heroes
gold / heroes -> gold
.фи
Активный
21 Мар 2018 93 9
local gold = 322/#heroes
gold / heroes -> gold
Типо делишь на #длину списка героев радиусе?
А в конце просто выдаёшь голду по циклу от _ до последнего. Интересный тип распределения
xDes
Продвинутый
8 Ноя 2018 232 34 Проект Boss Survival Adventure
local gold = 322/#heroes
gold / heroes -> gold
по твоему коду должно быть так?
CAddonTemplateGameMode:OnEntityKilled( keys ) local killed_unit = EntIndexToHScript( keys.entindex_killed ) local killer = EntIndexToHScript( keys.entindex_attacker ) if killed_unit:GetUnitName() == «npc_dota_neutral_kobold» then local heroes = FindUnitsInRadius(killer:GetTeamNumber(), killed_unit:GetAbsOrigin(), nil, 1000, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false ) for _,unit in pairs(heroes) do local gold = 322/#heroes — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(i) if player:GetTeam() == killer:GetTeam() then player:ModifyGold(playerID, gold, true, 0 ) end end end end
в любом случае спасибо, попробую вечером, а то я пошел длинным способом, будете ржать наверное, но как получилось ..
if killed_unit:GetUnitName() == «npc_dota_creature_dire_hound» then local heroes = FindUnitsInRadius(killer:GetTeamNumber(), killed_unit:GetAbsOrigin(), nil, 1100, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false ) if #heroes == 1 then for i = 1, #heroes do local gold = 125 — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(playerID ) player:ModifyGold( gold, true, 0 ) SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil) end return 0.5 end if #heroes == 2 then for i = 1, #heroes do local gold = 62 — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(playerID ) player:ModifyGold( gold, true, 0 ) SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil) end return 0.5 end if #heroes == 3 then for i = 1, #heroes do local gold = 42 — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(playerID ) player:ModifyGold( gold, true, 0 ) SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil) end return 0.5 end if #heroes == 4 then for i = 1, #heroes do local gold = 31 — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(playerID ) player:ModifyGold( gold, true, 0 ) SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil) end return 0.5 end if #heroes == 5 then for i = 1, #heroes do local gold = 25 — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(playerID ) player:ModifyGold( gold, true, 0 ) SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil) end return 0.5 end end
Последнее редактирование: 10 Янв 2019
I_GRIN_I
Друзья CG
15 Мар 2016 1,334 105
Что за чушь IsReincarnating()
Писать фильтры по-прочнее.
Как видишь у тебя «bAllPlayersDead» проверяет только живых, а нужно чтоб проверяло и мёртвых с определённым свойством ( ~= nil — не отсутствующим ).
В данном случае, возрождение через 3 сек. Попробуй так:
Спойлер: вкрапление
if hero and hero:IsAlive() and hero:FindModifierByName( «modifier_skeleton_king_reincarnation» ) ~= nil then
bAllPlayersDead = false
end
А вообще, пройдись хотя бы взглядом по списку.
I_GRIN_I
Друзья CG
15 Мар 2016 1,334 105
по твоему коду должно быть так?
CAddonTemplateGameMode:OnEntityKilled( keys ) local killed_unit = EntIndexToHScript( keys.entindex_killed ) local killer = EntIndexToHScript( keys.entindex_attacker ) if killed_unit:GetUnitName() == «npc_dota_neutral_kobold» then local heroes = FindUnitsInRadius(killer:GetTeamNumber(), killed_unit:GetAbsOrigin(), nil, 1000, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false ) for _,unit in pairs(heroes) do local gold = 322/#heroes — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(i) if player:GetTeam() == killer:GetTeam() then player:ModifyGold(playerID, gold, true, 0 ) end end end end
в любом случае спасибо, попробую вечером, а то я пошел длинным способом, будете ржать наверное, но как получилось ..
if killed_unit:GetUnitName() == «npc_dota_creature_dire_hound» then local heroes = FindUnitsInRadius(killer:GetTeamNumber(), killed_unit:GetAbsOrigin(), nil, 1100, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false ) if #heroes == 1 then for i = 1, #heroes do local gold = 125 — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(playerID ) player:ModifyGold( gold, true, 0 ) SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil) end return 0.5 end if #heroes == 2 then for i = 1, #heroes do local gold = 62 — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(playerID ) player:ModifyGold( gold, true, 0 ) SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil) end return 0.5 end if #heroes == 3 then for i = 1, #heroes do local gold = 42 — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(playerID ) player:ModifyGold( gold, true, 0 ) SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil) end return 0.5 end if #heroes == 4 then for i = 1, #heroes do local gold = 31 — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(playerID ) player:ModifyGold( gold, true, 0 ) SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil) end return 0.5 end if #heroes == 5 then for i = 1, #heroes do local gold = 25 — кол-во голды local playerID = heroes[i]:GetPlayerID() local player = PlayerResource:GetSelectedHeroEntity(playerID ) player:ModifyGold( gold, true, 0 ) SendOverheadEventMessage(player, OVERHEAD_ALERT_GOLD, player, gold, nil) end return 0.5 end end
Источник: customgames.ru
В Dota 2 вернулся абьюз золота с помощью вардов — подобные баги уже существовали в игре несколько лет назад Видео
Автор YouTube-канала Krevs обнаружил абьюз в Dota 2, который позволяет игроку получить на старте матча золото от союзников с помощью вардов. Примечательно, что Valve уже находила подобные баги и исправляла их несколько лет назад.
Для абьюза злоумышленнику необходимо получить Sentry Ward от тиммейта на желаемую сумму передачи, а затем приобрести один Observer Ward, который объединится с уже имеющимися у него вардами в слот. После этого игрок должен продать связку — за это он получит золото, потраченное союзниками.
Если злоумышленнику будут помогать несколько тиммейтов, то важно осуществлять передачу не одновременно, а поочередно. Это нужно для того, чтобы игрок успел продать каждую связку нескольких Sentry Ward и одного Observer Ward по отдельности.
Earth Spirit с Aghanim может сделать Supernova неуязвимой — а еще ломать большинство вардов и других объектов
У данного бага есть как минимум одно неудобство — команда злоумышленника остается без золота на раннем этапе матча. Однако если игрок быстро купит ключевые айтемы с помощью бага, то сможет помочь тиммейтам отстоять их линии.
Ранее Krevs обнаружил еще один баг с передачей золота в Dota 2. Для его использования нужно играть на Alchemist и купить два Aghanim’s Scepter, которые следует отдать тиммейту.
Источник: escorenews.com
Как убить Терзателей(Tormentors) в Dota 2? Руководство по новым мини-боссам в патче 7.33
Одним из нововведений патча 7.33 в Dota 2 являются Терзатели(Tormentors). Эти новые сооружения оснащены мега щитами и отражают урон. Мы подготовили руководство по этим мини-боссам, как их убить и получить Aghanim’s Shards.
Как Скорпион извин�.
Please enable JavaScript
Кто (или что) такое Терзатели?
Терзатели — это новые мини-боссы в Dota 2, которые дарят Осколки Аганима, если их убить. Они появляются около оффлейнов в 20:00. Рошан больше не дает Aghanim’s Shards.
Характеристики Терзателя
- Терзатель имеет 1 здоровье, 20 брони, 55% магической защиты и 2500 барьер урона, который восстанавливается на 100 ед./с. Награда: 250 золота.
- Терзатели не атакуют и не двигаются, но отражают 70% полученного урона поровну между всеми героями в радиусе 1200. Весь отраженный урон наносится магическим. Наносит урон в 200% иллюзиям.
- Если все герои имеют Осколок Аганима, то уничтожение Терзателя дает 280 золота и 280 опыта каждому герою.
- Терзатели возрождаются через 10 минут после их уничтожения, каждый раз увеличивая восстановление их барьера на 100 ед./с и отражение урона на 20%.
Побежденный Терзатель дает бафф Aghanim’s Shards одному из союзных героев с наименьшим чистым доходом, если он еще его не получил. Обратите внимание, что это действие происходит автоматически; вы не можете подобрать предмет с земли. Если у каждого игрока есть Осколок, все персонажи получают награды в 280 опыта и 280 золота.
Как бороться с Терзателями?
Имейте в виду, что Терзатели отражают 70% входящего урона. Убить их в одиночку не такая уж простая задача, поэтому лучший способ атаковать Терзателей с несколькими союзниками.
Отражаемый Терзателями урон всегда является магическим, поэтому предметы с Магическим Сопротивлением будут очень полезны: Eternal Shroud, Pipe of Insight или нейтральные предметы, такие как Occult Bracelet.
Терзателям дана броня в размере 20. Чтобы эффективно сражаться с ними, можно использовать Medallion of Courage или героя с способностями по снижению брони.
Для быстрого убийства Терзателей лучшие герои — это те, кто обладает высоким уроном и хорошим Магическим Сопротивлением. Герои, такие как Урса или Хаскар, хорошо справляются с этими мини-боссами.
Источник: gamesty.ru