Не отображается 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

То все отрисовывается.
 
Последнее редактирование модератором:
У тебя в консоли наверняка еще и ошибки есть
 
Еще раз рассказываю про сервер и клиент. Отсутствие большого количества функций в 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
 
Эмм, Злой, то, что ты мне тут предложил - этот метод я несколько месяцев назад публиковал на форуме.


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

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

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

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

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

Да, придется либо MODIFIER_PROPERTY_BASEATTACK_BONUSDAMAGE, либо NetTables.
 
М, сам додумал: дело в том, что self.bonus_dmg - я создаю на сервере, а у клиента я такой не делаю и даже если сделаю, значение будет другим, поэтому и отображения нет.

Да, придется либо MODIFIER_PROPERTY_BASEATTACK_BONUSDAMAGE, либо NetTables.
я тебе про это и говорил
 
Последнее редактирование модератором:
ability.gold = self:GetParent():GetGold() - здесь будет та же проблема, ведь на клиенте информация не будет занесена в ability.gold.
 
ability.gold = self:GetParent():GetGold() - здесь будет та же проблема, ведь на клиенте информация не будет занесена в ability.gold.
Созданные таблицы на клиента же переносятся, не?
Если нет то неттейблы в помощь, чоуж.
 
Последнее редактирование модератором:
Созданные таблицы на клиента же переносятся, не?
Если нет то неттейблы в помощь, чоуж.
Не переносятся конечно, интерпретатор в принципе не имеет доступа к сети
 
Последнее редактирование модератором:
Реклама: