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

Параметры | DataDriven => Lua-File => Lua-Modifier

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

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Хочу передать параметры в модификатор, но не знаю, как передать их через AddNewModifier, либо не знаю, как вывести их в самом модификаторе:
DataDriven
npc_items_custom.txt
Код
				"ThinkInterval" 		"0.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"
}
}
[свернуть]
Lua-File
item_thasdorah.lua
Код
LinkLuaModifier( "modifier_item_thasdorah_attack_range", "modifiers/modifier_item_thasdorah_attack_range", LUA_MODIFIER_MOTION_NONE )
function modifier_item_thasdorah_on_destroy(keys)
keys.caster:RemoveModifierByName("modifier_item_thasdorah_attack_range")
end
function modifier_item_thasdorah_on_interval_think(keys)
if not keys.caster:IsRangedAttacker() then
if keys.caster:HasModifier("modifier_item_thasdorah_attack_range") then
keys.caster:RemoveModifierByName("modifier_item_thasdorah_attack_range")
end
else
if not keys.caster:HasModifier("modifier_item_thasdorah_attack_range") then
keys.caster:AddNewModifier(keys.caster, self, "modifier_item_thasdorah_attack_range", {duration = -1, need_time = keys.need_time, per_time = keys.per_time})
end
end
end
[свернуть]
Lua-Modifier
modifier_item_thasdorah_attack_range.lua
Код
LinkLuaModifier( "modifier_item_thasdorah_on_interval_think", "items/modifier_item_thasdorah_on_interval_think", LUA_MODIFIER_MOTION_NONE )
if modifier_item_thasdorah_attack_range == nil then
modifier_item_thasdorah_attack_range = class({})
end
function modifier_item_thasdorah_attack_range:IsPassive()
return false
end

function modifier_item_thasdorah_attack_range:IsHidden()
return false
end
function modifier_item_thasdorah_attack_range:DeclareFunctions()
local funcs = {
MODIFIER_PROPERTY_ATTACK_RANGE_BONUS
}
return funcs
end
function modifier_item_thasdorah_attack_range:GetAttributes()
    return MODIFIER_ATTRIBUTE_MULTIPLE
end

function modifier_item_thasdorah_attack_range:OnCreated(params)
if IsServer() then
self:OnIntervalThink()
self:StartIntervalThink(1.0)
--[[self.per_time = per_time]]
print(self.per_time)
end
end
function modifier_item_thasdorah_attack_range:OnIntervalThink(params)
if IsServer() then
self.bonus_attack_range = self.per_time*math.ceil(GameRules:GetGameTime()/self.need_time)
print(self.bonus_attack_range)
end
end

function modifier_item_thasdorah_attack_range:GetModifierAttackRangeBonus()
return self.bonus_attack_range
end
[свернуть]
Код
[ W VScript ]: Script Runtime Error: ...ripts\modifiers\modifier_item_thasdorah_attack_range.lua:32: attempt to perform arithmetic on field 'need_time' (a nil value)
[ W VScript ]: stack traceback:
[ W VScript ]: ...ripts\modifiers\modifier_item_thasdorah_attack_range.lua:32: in function 'OnIntervalThink'
[ W VScript ]: ...ripts\modifiers\modifier_item_thasdorah_attack_range.lua:24: in function <...ripts\modifiers\modifier_item_thasdorah_attack_range.lua:22>
[ W VScript ]: [C]: in function 'AddNewModifier'
[ W VScript ]: ...a_addons\test1\scripts\vscripts\items\item_thasdorah.lua:12: in function <...a_addons\test1\scripts\vscripts\items\item_thasdorah.lua:5>
« Последнее редактирование: 17-01-2017, 10:47:05 от EnDronist »
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #1 : 17-01-2017, 12:30:24 »
Хочу передать параметры в модификатор, но не знаю, как передать их через AddNewModifier, либо не знаю, как вывести их в самом модификаторе:
Код
local net_table = CustomNetTables:GetTableValue( "heroes", "modifier_gun_joe_explosive") 
Код
CustomNetTables:SetTableValue( "heroes", "modifier_gun_joe_explosive", {radius = 450} )
И естественно прописать в нет тейблы таблицу соответсвующую.

Оффлайн ZLOY

  • Супермодератор
  • 396
  • Мощь: 5
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #2 : 17-01-2017, 12:45:33 »
Странная мешанина из datadtiven и lua
Почему просто не использовать
Код
self:GetAbility():GetSpecialValueFor("bonus_attack_range_per_time")

Оффлайн ZLOY

  • Супермодератор
  • 396
  • Мощь: 5
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #3 : 17-01-2017, 12:48:18 »
Все что ты передаешь в последнем аргументе AddNewModifier попадает в params функции OnCreated, но никак в таблицу модификатора.
А неттейбл тут вообще не нужен, ну никак.

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #4 : 17-01-2017, 13:18:12 »
Все что ты передаешь в последнем аргументе AddNewModifier попадает в params функции OnCreated, но никак в таблицу модификатора.
А неттейбл тут вообще не нужен, ну никак.
И как достать их оттуда? params.per_time (В OnCreated)?
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #5 : 17-01-2017, 13:21:13 »
ZLOY, Мне удобней пока что писать предметы на Датадрайвене, а туда вставлять уже ссылки на скрипты. Проверку на дальника делать в Датадрайвене нельзя, вот и использовал Lua-File
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн ZLOY

  • Супермодератор
  • 396
  • Мощь: 5
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #6 : 17-01-2017, 13:46:40 »
Зачем тебе вообще что-то передавать. GetSpecialValueFor есть же

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #7 : 17-01-2017, 13:51:11 »
Зачем тебе вообще что-то передавать. GetSpecialValueFor есть же
Т.е. GetSpecialValueFor вытянет для меня нужные константы в модификаторе (в Datadriven-Modifier), который создал не Datadriven-Modifier, а Lua-File?
« Последнее редактирование: 17-01-2017, 13:53:47 от EnDronist »
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #8 : 17-01-2017, 13:56:11 »
Т.е. GetSpecialValueFor вытянет для меня нужные константы в модификаторе (в Datadriven-Modifier), который создал не Datadriven-Modifier, а Lua-File?
Код
self:GetAbility():GetSpecialValueFor("blah");
Спойлер
Неттейблы нужны если ты хочешь таланты делать, нельзя на стороне клиента получить другую абилку, которая например сократит кулдаун/параметр модификатора
[свернуть]

Оффлайн ZLOY

  • Супермодератор
  • 396
  • Мощь: 5
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #9 : 17-01-2017, 13:57:38 »
Код
					"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"
}

keys.caster:AddNewModifier(keys.caster, keys.ability, "modifier_item_thasdorah_attack_range", {duration = -1, need_time = keys.need_time, per_time = keys.per_time})
У тебя тут передаются abilitySpecial просто, если тебе нужно использовать их без изменений, то GetSpecialValueFor подходит.

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #10 : 17-01-2017, 14:05:04 »
Код
					"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"
}

keys.caster:AddNewModifier(keys.caster, keys.ability, "modifier_item_thasdorah_attack_range", {duration = -1, need_time = keys.need_time, per_time = keys.per_time})
У тебя тут передаются abilitySpecial просто, если тебе нужно использовать их без изменений, то GetSpecialValueFor подходит.
Код
function modifier_item_thasdorah_attack_range:OnCreated(params)
if IsServer() then
self:OnIntervalThink()
self:StartIntervalThink(1.0)
--[[Ни так,]]
self.per_time = self:GetAbility():GetSpecialValueFor("bonus_attack_range_per_time")
self.need_time = self:GetAbility():GetSpecialValueFor("bonus_attack_range_time")
--[[ни так не работает]]
self.per_time = self:GetAbility():GetSpecialValueFor("per_time")
self.need_time = self:GetAbility():GetSpecialValueFor("need_time")
print(self.per_time)
end
end
function modifier_item_thasdorah_attack_range:OnIntervalThink(params)
if IsServer() then
self.bonus_attack_range = self.per_time*math.ceil(GameRules:GetGameTime()/self.need_time)
print(self.bonus_attack_range)
end
end
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн ZLOY

  • Супермодератор
  • 396
  • Мощь: 5
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #11 : 17-01-2017, 14:08:28 »
У тебя при создании модификатора не указана способность
Код
keys.caster:AddNewModifier(keys.caster, self, "modifier_item_thasdorah_attack_range", {duration = -1, need_time = keys.need_time, per_time = keys.per_time})
А должно быть
Код
keys.caster:AddNewModifier(keys.caster, keys.ability, "modifier_item_thasdorah_attack_range", {duration = -1, need_time = keys.need_time, per_time = keys.per_time})

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #12 : 17-01-2017, 14:44:13 »
ZLOY,
Цитата: ZLOY
У тебя при создании модификатора не указана способность
Код: [Выделить]keys.caster:AddNewModifier(keys.caster, self, "modifier_item_thasdorah_attack_range", {duration = -1, need_time = keys.need_time, per_time = keys.per_time})А должно быть
Код: [Выделить]keys.caster:AddNewModifier(keys.caster, keys.ability, "modifier_item_thasdorah_attack_range", {duration = -1, need_time = keys.need_time, per_time = keys.per_time})
В консоль self.bonus_attack_range выписывает, но герою параметр не даётся.
Код
LinkLuaModifier( "modifier_item_thasdorah_on_interval_think", "items/modifier_item_thasdorah_on_interval_think", LUA_MODIFIER_MOTION_NONE )
if modifier_item_thasdorah_attack_range == nil then
   modifier_item_thasdorah_attack_range = class({})
end
function modifier_item_thasdorah_attack_range:IsPassive()
   return false
end
function modifier_item_thasdorah_attack_range:IsHidden()
   return false
end
function modifier_item_thasdorah_attack_range:DeclareFunctions()
   local funcs = {
      MODIFIER_PROPERTY_ATTACK_RANGE_BONUS
   }
   return funcs
end
--function modifier_item_thasdorah_attack_range:GetAttributes()
--    return MODIFIER_ATTRIBUTE_MULTIPLE
--end
function modifier_item_thasdorah_attack_range:OnCreated(params)
   if IsServer() then
      self.per_time = self:GetAbility():GetSpecialValueFor("bonus_attack_range_per_time")
      self.need_time = self:GetAbility():GetSpecialValueFor("bonus_attack_range_time")
      self:OnIntervalThink()
      self:StartIntervalThink(1.0)
   end
end
function modifier_item_thasdorah_attack_range:OnIntervalThink(params)
   if IsServer() then
      self.bonus_attack_range = self.per_time*math.ceil(GameRules:GetGameTime()/self.need_time)
      print(self.bonus_attack_range)
   end
end
function modifier_item_thasdorah_attack_range:GetModifierAttackRangeBonus()
   return self.bonus_attack_range
end
« Последнее редактирование: 17-01-2017, 14:46:10 от EnDronist »
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн ZLOY

  • Супермодератор
  • 396
  • Мощь: 5
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #13 : 17-01-2017, 14:51:42 »
Убери IsServer

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: Параметры | DataDriven => Lua-File => Lua-Modifier
« Ответ #14 : 17-01-2017, 14:57:01 »
Убери IsServer
Спасибо. А IsServer() используется только, когда нужно найти информацию об игроке?
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]