CustomGames.ru - Dota 2 пользовательские игры

Lua <> DataDrivenAura

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Lua <> DataDrivenAura
« : 18-01-2017, 15:26:25 »
Как узнать другого героя в скрипте, запущенном от DataDriven-модификатора-ауры?
print(keys.caster) Выдаёт только владельца ауры, а не владельца модификатора от создаваемого ей
Код
			"modifier_item_thasdorah_speed_aura"
{
"Passive" "1"
"IsHidden" "0"//1
"IsDebuff" "0"

"OnCreated"
{
"RunScript"
{
"ScriptFile" "items/item_thasdorah.lua"
"Function" "modifier_item_thasdorah_aura"
}
}
}
Код
function modifier_item_thasdorah_aura(keys)
print(keys.caster)
if not keys.caster:HasModifier("modifier_item_thasdorah_speed") then
keys.caster:AddNewModifier(keys.caster, keys.ability, "modifier_item_thasdorah_speed", {duration = -1})
end
end
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Lua <> DataDrivenAura
« Ответ #1 : 18-01-2017, 15:28:27 »
Код
DeepPrint(keys)

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Lua <> DataDrivenAura
« Ответ #2 : 18-01-2017, 15:34:26 »
Как сделать так, чтоб модификатор удалил сам себя, если предмет, который запустил ауру, которая запустила скрипт, которая добавила модификатор уже отсутствует в инвентаре? (Т.е. нет доступа к keys.caster, потому что нет предмета, откуда брались бы keys'ы)
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Lua <> DataDrivenAura
« Ответ #3 : 18-01-2017, 15:38:45 »
А сделать ауру аурой?

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Lua <> DataDrivenAura
« Ответ #4 : 18-01-2017, 15:41:03 »
ZLOY,
Код
         "modifier_item_thasdorah"
         {
            "Passive"            "1"
            "IsHidden"            "0"//1
            "IsDebuff"            "0"
           
            "Attributes"         "MODIFIER_ATTRIBUTE_MULTIPLE"
            "Aura"             "modifier_item_thasdorah_speed_aura"
            "Aura_Radius"          "%aura_radius"
            "Aura_Teams"          "DOTA_UNIT_TARGET_TEAM_FRIENDLY"
            "Aura_Types"          "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
            "Aura_Flags"          "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES"
            "Aura_ApplyToCaster"       "1"
            "Aura"             "modifier_item_thasdorah_aura"
            "Aura_Radius"          "%aura_radius"
            "Aura_Teams"          "DOTA_UNIT_TARGET_TEAM_FRIENDLY"
            "Aura_Types"          "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
            "Aura_Flags"          "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES"
            "Aura_ApplyToCaster"       "1"
            "ThinkInterval"       ".03"
            "OnIntervalThink"
            {
               "RunScript"
               {
                  "ScriptFile"      "items/item_thasdorah.lua"
                  "Function"      "modifier_item_thasdorah_on_interval_think"
                  //"per_time"      "%bonus_attack_range_per_time"
                  //"need_time"      "%bonus_attack_range_time"
               }
            }
            "OnDestroy"
            {
               "RunScript"
               {
                  "ScriptFile"      "items/item_thasdorah.lua"
                  "Function"      "modifier_item_thasdorah_on_destroy"
               }
            }
            "Properties"
            {
               "MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE"      "%bonus_damage"
               "MODIFIER_PROPERTY_STATS_STRENGTH_BONUS"      "%bonus_strength"
               "MODIFIER_PROPERTY_STATS_AGILITY_BONUS"         "%bonus_agility"
               "MODIFIER_PROPERTY_STATS_INTELLECT_BONUS"      "%bonus_intellect"
               "MODIFIER_PROPERTY_STATS_STRENGTH_BONUS"      "%bonus_strength"
               "MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT"      "%bonus_attack_speed"
            }
         }
         "modifier_item_thasdorah_speed_aura"
         {
            "Passive"            "1"
            "IsHidden"            "0"//1
            "IsDebuff"            "0"
            "OnCreated"
            {
               "RunScript"
               {
                  "ScriptFile"      "items/item_thasdorah.lua"
                  "Function"      "modifier_item_thasdorah_aura"
               }
            }
         }
Код
function modifier_item_thasdorah_aura(keys)
print(keys.caster)
if not keys.caster:HasModifier("modifier_item_thasdorah_speed") then
keys.caster:AddNewModifier(keys.caster, keys.ability, "modifier_item_thasdorah_speed", {duration = -1})
end
end
« Последнее редактирование: 18-01-2017, 15:43:01 от EnDronist »
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Lua <> DataDrivenAura
« Ответ #5 : 18-01-2017, 16:23:46 »
Зачем тебе делать ауру, которая вешает другой модификатор? Делай тот самый модификатор аурой и никаких проблем.

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Lua <> DataDrivenAura
« Ответ #6 : 18-01-2017, 16:47:23 »
Илья, Нужно, чтоб эффект оставался какое-то время после выхода из ауры
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн I_GRIN_I

  • Продвинутый
  • 616
  • Мощь: 11
  • Научиться бы скриптить...
Re: Lua <> DataDrivenAura
« Ответ #7 : 18-01-2017, 19:46:18 »
EnDronist, ну вешай эффект на пару секунд,  а каждую секунду таймером проявляй наличие модификатора ауры

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Lua <> DataDrivenAura
« Ответ #8 : 18-01-2017, 20:05:04 »
Тогда лучше делать не ауру, а простой пассивный модификатор вещи с thinker, который будет запускать скрипт, который будет вешать в радиусе кастера твой временный луа модификатор. Так у тебя и при выкладывании вещи будет пропадать псевдо-аура-источник и твой модификатор будет висеть именно какое-то время.

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Lua <> DataDrivenAura
« Ответ #9 : 19-01-2017, 04:12:41 »
Илья,
Я сделал с помощью отключения в самом модификаторе синкера self:StartIntervalThink(-1) и активации функции self:SetDuration(0.03)
А у ауры в OnCreated() если нет этого модификатора, то добавляется, а если есть, то запускается таймер на 0.06 секунды и потом ещё раз проверяет наличие у юнита модификатора и, если его нет, даёт.
Теперь сам модификатор накапливает стаки при атаке того, на ком он висит в функции OnAttackLanded(). Как увеличивать стаки только у того героя, который атаковал? Использовать if params.attacker == self:GetParent()?
« Последнее редактирование: 19-01-2017, 04:17:12 от EnDronist »
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн I_GRIN_I

  • Продвинутый
  • 616
  • Мощь: 11
  • Научиться бы скриптить...
Re: Lua <> DataDrivenAura
« Ответ #10 : 19-01-2017, 06:06:23 »
EnDronist, да, именно так

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Lua <> DataDrivenAura
« Ответ #11 : 19-01-2017, 09:36:44 »
То есть если модификатор весит на двух героях и один из них атакует, то стаки даются обоим?

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Lua <> DataDrivenAura
« Ответ #12 : 19-01-2017, 09:51:55 »
Илья, Да, но сейчас с if params.attacker == self:GetParent() стали отдельно даваться каждому.
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Lua <> DataDrivenAura
« Ответ #13 : 19-01-2017, 13:25:46 »
Что не так с моей lua-аурой? Она не даётся союзному Аксу (ошибок в консоли нет)
Код
LinkLuaModifier("modifier_item_thasdorah_speed", "modifiers/modifier_item_thasdorah_speed", LUA_MODIFIER_MOTION_NONE)
if modifier_item_thasdorah_speed_aura == nil then modifier_item_thasdorah_speed_aura = class({}) end
function modifier_item_thasdorah_speed_aura:IsPassive() return false end
function modifier_item_thasdorah_speed_aura:IsHidden() return false end
function modifier_item_thasdorah_speed_aura:IsDebuff() return false end
function modifier_item_thasdorah_speed_aura:RemoveOnDeath() return true end
function modifier_item_thasdorah_speed_aura:IsAura() return true end
function modifier_item_thasdorah_speed_aura:IsAuraActiveOnDeath() return false end
function modifier_item_thasdorah_speed_aura:GetAuraRadius() return self.radius end
function modifier_item_thasdorah_speed_aura:GetAuraSearchTeam() return {DOTA_UNIT_TARGET_TEAM_FRIENDLY} end
function modifier_item_thasdorah_speed_aura:GetAuraSearchType() return {DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BASIC} end
function modifier_item_thasdorah_speed_aura:GetAuraSearchFlags() return {DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES} end
function modifier_item_thasdorah_speed_aura:OnCreated(params)
self.radius = self:GetAbility():GetSpecialValueFor("aura_radius")
self:OnIntervalThink()
self:StartIntervalThink(0.03)
end
function modifier_item_thasdorah_speed_aura:OnIntervalThink(params)
if IsServer() then
if not self:GetParent():HasModifier("modifier_item_thasdorah_speed") then
self:GetParent():AddNewModifier(self:GetParent(),self:GetAbility(),"modifier_item_thasdorah_speed",{duration = -1})
else
Timers:CreateTimer(0.06,function()
self:GetParent():AddNewModifier(self:GetParent(),self:GetAbility(),"modifier_item_thasdorah_speed",{duration = -1})
end)
end
end
end
« Последнее редактирование: 19-01-2017, 13:27:56 от EnDronist »
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Lua <> DataDrivenAura
« Ответ #14 : 19-01-2017, 14:10:34 »
Код
function modifier_item_thasdorah_speed_aura:GetAuraSearchTeam()		return {DOTA_UNIT_TARGET_TEAM_FRIENDLY} end
Тут и в подобных таблица не нужна