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

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

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

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Есть простенький модификатор:
Код
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

То все отрисовывается.


Оффлайн Adam Smith

  • Друзья CG
  • 468
  • Мощь: 6
  • жрять жри его
Re: Не отображается PREATTACK_BONUS_DAMAGE
« Ответ #1 : 04-10-2016, 14:45:59 »
попробуй IsServer убрать
By PG.Freeman

Оффлайн ZLOY

  • Супермодератор
  • 368
  • Мощь: 4
Re: Не отображается PREATTACK_BONUS_DAMAGE
« Ответ #2 : 04-10-2016, 14:51:18 »
У тебя в консоли наверняка еще и ошибки есть

Оффлайн ZLOY

  • Супермодератор
  • 368
  • Мощь: 4
Re: Не отображается PREATTACK_BONUS_DAMAGE
« Ответ #3 : 04-10-2016, 15:10:21 »
Еще раз рассказываю про сервер и клиент. Отсутствие большого количества функций в 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

« Последнее редактирование: 04-10-2016, 15:30:51 от ZLOY »

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Re: Не отображается PREATTACK_BONUS_DAMAGE
« Ответ #4 : 04-10-2016, 15:39:49 »
Эмм, Злой, то, что ты мне тут предложил - этот метод я несколько месяцев назад публиковал на форуме.


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

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

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

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

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

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Re: Не отображается PREATTACK_BONUS_DAMAGE
« Ответ #5 : 04-10-2016, 15:43:34 »
попробуй IsServer убрать

Его убирать нельзя, так как у клиента нет того метода, что я использую.

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Re: Не отображается PREATTACK_BONUS_DAMAGE
« Ответ #6 : 04-10-2016, 15:47:24 »
М, сам додумал: дело в том, что self.bonus_dmg - я создаю на сервере, а у клиента я такой не делаю и даже если сделаю, значение будет другим, поэтому и отображения нет.

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

Оффлайн Adam Smith

  • Друзья CG
  • 468
  • Мощь: 6
  • жрять жри его
Re: Не отображается PREATTACK_BONUS_DAMAGE
« Ответ #7 : 04-10-2016, 17:22:48 »
М, сам додумал: дело в том, что self.bonus_dmg - я создаю на сервере, а у клиента я такой не делаю и даже если сделаю, значение будет другим, поэтому и отображения нет.

Да, придется либо MODIFIER_PROPERTY_BASEATTACK_BONUSDAMAGE, либо NetTables.
я тебе про это и говорил
By PG.Freeman

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Re: Не отображается PREATTACK_BONUS_DAMAGE
« Ответ #8 : 04-10-2016, 17:33:56 »
я тебе про это и говорил
Не совсем. Почти все что записано в self на клиенте не будет отображаться.

Оффлайн Adam Smith

  • Друзья CG
  • 468
  • Мощь: 6
  • жрять жри его
Re: Не отображается PREATTACK_BONUS_DAMAGE
« Ответ #9 : 04-10-2016, 18:02:05 »
ну можно типа
ability = {}

ability.gold = self:GetParent():GetGold()
By PG.Freeman

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Re: Не отображается PREATTACK_BONUS_DAMAGE
« Ответ #10 : 05-10-2016, 12:14:10 »
ability.gold = self:GetParent():GetGold()  - здесь будет та же проблема, ведь на клиенте информация не будет занесена в  ability.gold.

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Re: Не отображается PREATTACK_BONUS_DAMAGE
« Ответ #11 : 05-10-2016, 12:52:07 »
ability.gold = self:GetParent():GetGold()  - здесь будет та же проблема, ведь на клиенте информация не будет занесена в  ability.gold.
Созданные таблицы на клиента же переносятся, не?
Если нет то неттейблы в помощь, чоуж.

Оффлайн ZLOY

  • Супермодератор
  • 368
  • Мощь: 4
Re: Не отображается PREATTACK_BONUS_DAMAGE
« Ответ #12 : 05-10-2016, 14:10:08 »
Созданные таблицы на клиента же переносятся, не?
Если нет то неттейблы в помощь, чоуж.
Не переносятся конечно, интерпретатор в принципе не имеет доступа к сети