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

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
Как сделать шанс использования модификатора (на Lua) например: шанс использования модификатора 50% или 70 и тд.
 
Если в скрипте, то RollPercentage.
А в дд это
Код:
"Random"
	{
	"Chance"	"15"
	"OnSuccess"
		{
		}
	}
 
Последнее редактирование модератором:
Забыл уточнить что у меня способность не 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
 
Последнее редактирование модератором:
Я не вижу где ты пытался заюзать ролл и где тебе его нужно заюзать.
 
Всё сарян я прост хотел сделать через GetSpecialValueForif, но понял что можно просто выставить значение от 1 до 100 для RollPercentage сам себе усложнял задачу)
 
Так сделай через GetSpecialValueFor() - ты же сможешь тогда в дальнейшем, если что, балансировать цифры рандома в дд тексте абилки, а не лезть каждый раз в скрипт.


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

Что это такое {["duration"] = self.dur} ?
 
Последнее редактирование модератором:
[quote author=Илья link=topic=1346.msg8451#msg8451 date=1487782014]
Так сделай через GetSpecialValueFor() - ты же сможешь тогда в дальнейшем, если что, балансировать цифры рандома в дд тексте абилки, а не лезть каждый раз в скрипт.


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

Что это такое {["duration"] = self.dur} ?
[/quote]

Спасибо +rep, duration это у меня время жизни или ты про скобки)
 
Последнее редактирование модератором:
С принтом баловался) и с таблицами
Код:
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
 
Последнее редактирование модератором:
Мне понятен этот синтаксис:
{duration = self.dur} - элемент таблицы (duration) приравнивается к некоему значению (self.dur).

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

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

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

С подобным раньше не сталкивался, ибо везде где я делал так:
ThisIsATable = {}
Происходило именно выделение памяти под объект ThisIsATable. А здесь же выходит, что {} - не просто оператор выделения памяти, а сам является объектом, в то время как ThisIsATable - просто некая оболочка, ссылка, копия {}.
 
Последнее редактирование модератором:
[quote author=Илья link=topic=1346.msg8471#msg8471 date=1487860836]
Мне понятен этот синтаксис:
{duration = self.dur} - элемент таблицы (duration) приравнивается к некоему значению (self.dur).

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

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

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

С подобным раньше не сталкивался, ибо везде где я делал так:
ThisIsATable = {}
Происходило именно выделение памяти под объект ThisIsATable. А здесь же выходит, что {} - не просто оператор выделения памяти, а сам является объектом, в то время как ThisIsATable - просто некая оболочка, ссылка, копия {}.
[/quote]
ThisIsATable = {} и просто {} это ОДНО И ТОЖЕ, и использоваться могут по одинаковой схеме.
 
Последнее редактирование модератором:
Ну это в lua так? В той же java или С++ я подобного не наблюдал.
 
Не знать разницы между объявлением переменной и созданием объекта
 
Реклама: