Не отображается PREATTACK_BONUS_DAMAGE

Илья

Друзья CG
25 Сен 2015
2,348
41
Есть простенький модификатор:
Код:
modifier_strength_of_gold = class({})

function modifier_strength_of_gold:IsHidden()
	return false
end

function modifier_strength_of_gold:GetTexture()
  return "item_hand_of_midas"
end

function modifier_strength_of_gold:RemoveOnDeath()
	return false
end

function modifier_strength_of_gold:DeclareFunctions()
  local funcs = {
    MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE
  }
  return funcs
end

function modifier_strength_of_gold:OnCreated( params )
		if IsServer() then
			self:OnIntervalThink()
			self:StartIntervalThink( 0.1 )
		end
end

function modifier_strength_of_gold:OnIntervalThink()
	self.bonus_dmg = self:GetParent():GetGold()
end

function modifier_strength_of_gold:GetModifierBaseAttack_BonusDamage()
	return self.bonus_dmg
end

Он работает, однако не пишет эти приятненькие зеленые циферки на мечике урона.
А если делать к примеру так:

Код:
function modifier_strength_of_gold:GetModifierPreAttack_BonusDamage()
	return 50
end

То все отрисовывается.
 
Последнее редактирование модератором:

ZLOY

Администратор
Команда форума
27 Июн 2016
953
182
У тебя в консоли наверняка еще и ошибки есть
 

ZLOY

Администратор
Команда форума
27 Июн 2016
953
182
Еще раз рассказываю про сервер и клиент. Отсутствие большого количества функций в API клиента.
И метода GetGold на стороне клиента нет. Поэтому тебе нужно рассчитать значение на сервере и передать клиенту. Способов передачи информации на клиент немного - изменение состояния объектов или NetTables.

Код:
function modifier_strength_of_gold:OnIntervalThink()
	self:SetStackCount( self:GetParent():GetGold() )
end

function modifier_strength_of_gold:GetModifierBaseAttack_BonusDamage()
	return self:GetStackCount()
end

Но в таком решении есть один минус(а может и плюс) - значение будет отображаться на иконке модификатора, поэтому для больших значений или когда их несколько лучше использовать NetTables
 

Илья

Друзья CG
25 Сен 2015
2,348
41
Эмм, Злой, то, что ты мне тут предложил - этот метод я несколько месяцев назад публиковал на форуме.


Нет, ошибок нет, потому что я прекрасно понимаю, где и как передается информация и что в модификаторах она делится на два сервера.

Вы всмотритесь внимательнее в эти два варианта:

Код:
function modifier_strength_of_gold:GetModifierBaseAttack_BonusDamage()
	return self.bonus_dmg
end

Код:
function modifier_strength_of_gold:GetModifierPreAttack_BonusDamage()
	return 50
end

Различие между ними только в статической величине во втором случае.
 

Илья

Друзья CG
25 Сен 2015
2,348
41
М, сам додумал: дело в том, что self.bonus_dmg - я создаю на сервере, а у клиента я такой не делаю и даже если сделаю, значение будет другим, поэтому и отображения нет.

Да, придется либо MODIFIER_PROPERTY_BASEATTACK_BONUSDAMAGE, либо NetTables.
 

Adam Smith

Друзья CG
4 Окт 2014
473
2
М, сам додумал: дело в том, что self.bonus_dmg - я создаю на сервере, а у клиента я такой не делаю и даже если сделаю, значение будет другим, поэтому и отображения нет.

Да, придется либо MODIFIER_PROPERTY_BASEATTACK_BONUSDAMAGE, либо NetTables.
я тебе про это и говорил
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
ability.gold = self:GetParent():GetGold() - здесь будет та же проблема, ведь на клиенте информация не будет занесена в ability.gold.
 

CryDeS

Друзья CG
14 Июл 2015
1,210
11
ability.gold = self:GetParent():GetGold() - здесь будет та же проблема, ведь на клиенте информация не будет занесена в ability.gold.
Созданные таблицы на клиента же переносятся, не?
Если нет то неттейблы в помощь, чоуж.
 
Последнее редактирование модератором:

ZLOY

Администратор
Команда форума
27 Июн 2016
953
182
Созданные таблицы на клиента же переносятся, не?
Если нет то неттейблы в помощь, чоуж.
Не переносятся конечно, интерпретатор в принципе не имеет доступа к сети
 
Последнее редактирование модератором:
Реклама: