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

Определенный шанс использования абилки

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

Оффлайн den4iccc

  • 280
  • Мощь: 4
Как сделать шанс использования модификатора (на Lua) например: шанс использования модификатора 50% или 70 и тд.
« Последнее редактирование: 22-02-2017, 13:11:26 от den4iccc »

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Если в скрипте, то RollPercentage.
А в дд это
Код
"Random"
{
"Chance" "15"
"OnSuccess"
{
}
}

Оффлайн den4iccc

  • 280
  • Мощь: 4
Спасибо

Оффлайн den4iccc

  • 280
  • Мощь: 4
Забыл уточнить что у меня способность не datadriven а ability_lua и рандом, шанс промутить не получается а через RollPercentage не понимаю почему он ругается
Как тут RollPercentage задействовать что бы test_modifier работал через шанс
Код
function test:OnSpellStart()
        local hTarget = self:GetCursorTarget()
        local target = hTarget
        local ability = self
local caster = self:GetCaster()
        self.dur = self:GetSpecialValueFor( "duration" )
        if caster:HasItemInInventory("item_meat") then
        local spawn_location = target:GetAbsOrigin()
        local npc = CreateUnitByName( target:GetUnitName(), spawn_location, true, caster, caster:GetOwner(), caster:GetTeamNumber())
        npc:SetControllableByPlayer(caster:GetPlayerID(), false)
        npc:AddNewModifier(caster, self, "test_modifier", {duration = self.dur})
    -- self.dur = math.random (200, 400)
        npc:AddNewModifier(caster, self, "modifier_kill", {["duration"] = self.dur})
        target:RemoveSelf()
for i = 0,5 do
local Item = caster:GetItemInSlot(i)
if Item ~= nil and Item:GetName() == "item_meat" then
-- caster:RemoveItem(Item)
end
     end
    else return
  end
end
« Последнее редактирование: 22-02-2017, 15:07:00 от den4iccc »

Оффлайн MahouShoujo

  • 176
  • Мощь: 3
Я не вижу где ты пытался заюзать ролл и где тебе его нужно заюзать.

Оффлайн den4iccc

  • 280
  • Мощь: 4
Всё сарян я прост хотел сделать через GetSpecialValueForif, но понял что можно просто выставить значение от 1 до 100 для RollPercentage сам себе усложнял задачу)

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Так сделай через GetSpecialValueFor() - ты же сможешь тогда в дальнейшем, если что, балансировать цифры рандома в дд тексте абилки, а не лезть каждый раз в скрипт.


Код
if RollPercentage(self:GetSpecialValueFor( "chance" )) then
npc:AddNewModifier(caster, self, "modifier_kill", {duration = self.dur})
end

П.Н.
Что это такое {["duration"] = self.dur}  ?
[свернуть]

Оффлайн den4iccc

  • 280
  • Мощь: 4
Так сделай через GetSpecialValueFor() - ты же сможешь тогда в дальнейшем, если что, балансировать цифры рандома в дд тексте абилки, а не лезть каждый раз в скрипт.


Код
if RollPercentage(self:GetSpecialValueFor( "chance" )) then
npc:AddNewModifier(caster, self, "modifier_kill", {duration = self.dur})
end

П.Н.
Что это такое {["duration"] = self.dur}  ?
[свернуть]

Спасибо +rep, duration это у меня время жизни или ты про скобки)

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Я про скобки и кавычки.

Оффлайн den4iccc

  • 280
  • Мощь: 4
С принтом баловался) и с таблицами
Код
ThisIsATable = {}
function PrintTuturu(keys)
    print("hello")
    for k, v in pairs(ThisIsATable) do
        print(k)
        print(v)
    end
end

function SetTuturu(keys)
    ThisIsATable["two"] = "twelve"
end
« Последнее редактирование: 22-02-2017, 20:56:12 от den4iccc »

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Я про скобки и кавычки.
хэштейблы же

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Мне понятен этот синтаксис:
{duration = self.dur} - элемент таблицы (duration) приравнивается к некоему значению (self.dur).

Мне понятен такой синтаксис:
ThisIsATable = {}
ThisIsATable["two"] = "twelve" - элемент под id "two" хэштаблицы ThisIsATable обретает значение "twelve".

Но мне непонятна эта конструкция:

{["duration"] = self.dur} - в смысле, можно заменить ThisIsATable на  {}?

С подобным раньше не сталкивался, ибо везде где я делал так:
ThisIsATable = {}
Происходило именно выделение памяти под объект ThisIsATable. А здесь же выходит, что {} - не просто оператор выделения памяти, а сам является объектом, в то время как  ThisIsATable - просто некая оболочка, ссылка, копия {}.

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Мне понятен этот синтаксис:
{duration = self.dur} - элемент таблицы (duration) приравнивается к некоему значению (self.dur).

Мне понятен такой синтаксис:
ThisIsATable = {}
ThisIsATable["two"] = "twelve" - элемент под id "two" хэштаблицы ThisIsATable обретает значение "twelve".

Но мне непонятна эта конструкция:

{["duration"] = self.dur} - в смысле, можно заменить ThisIsATable на  {}?

С подобным раньше не сталкивался, ибо везде где я делал так:
ThisIsATable = {}
Происходило именно выделение памяти под объект ThisIsATable. А здесь же выходит, что {} - не просто оператор выделения памяти, а сам является объектом, в то время как  ThisIsATable - просто некая оболочка, ссылка, копия {}.
ThisIsATable = {} и просто {} это ОДНО И ТОЖЕ, и использоваться могут по одинаковой схеме. 

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Ну это в lua так? В той же java или С++ я подобного не наблюдал.

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Ну это в lua так? В той же java или С++ я подобного не наблюдал.
В плюсах работа с хештейблами значительно отличается от луа, как и в java(но тут я не уверен).