Проблема с типами данных (булевый тип)

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
Проблемка возникла, как сделать значение if еды <=5 then срабатывает, иначе (нет)
Код:
ApplyDamage({victim = target, attacker = caster, damage = damage, damage_type = DAMAGE_TYPE_PURE })
     ability:ApplyDataDrivenModifier(keys.caster, keys.caster, "hunger_food", {duration = 1})
	 	 SpendFood(player, food_cost)

пробовал if food_cost <=5 then .... end (enough_food, spendfood и checkfood) пишет что я пытаюсь сравнить булевый тип с номером, но вроде же можно применять операцию сравнения в булеан помимо значения истина или ложь, в чём проблема ?

Вот целый код с проверкой на кол-во еды и с возможностью кастовать за X ед. еды
Код:
function DamageInSec(keys)

	 local player = keys.caster:GetPlayerOwner()
	 local pID = player:GetPlayerID()

	 local caster = keys.caster
	 local target = keys.target
	 local ability = keys.ability
	
	 local cooldown = ability:GetLevelSpecialValueFor( "cooldown" , ability:GetLevel() - 1 )
	 local pers = ability:GetLevelSpecialValueFor( "damage" , ability:GetLevel() - 1 )*0.01
	 local damage = caster:GetMaxHealth()*pers
	
	 local food_cost = ability:GetLevelSpecialValueFor("food_cost", ability:GetLevel()-1)
	
	 local enough_food

	 if food_cost ~= nil and food_cost ~= 0 then
	 	enough_food = CheckFood(player, food_cost,true)
	 else
	 	enough_food = true
	 end

	 if enough_food ~= true then
	 	return
	 else 
     ApplyDamage({victim = target, attacker = caster, damage = damage, damage_type = DAMAGE_TYPE_PURE })
     ability:ApplyDataDrivenModifier(keys.caster, keys.caster, "hunger_food", {duration = 1})
	 	 SpendFood(player, food_cost)
	 end
end
 
Последнее редактирование модератором:
Я узнал что Lua разрешает сравнивать только числа с числами, строки со строками. В противном случае выкидывает ошибку вида: attempt to compare number with string. Даже boolean сравнить с числом не выйдет, boolean с boolean сравнить тоже не выйдет. nil сравнить с числом не получится, nil c nil аналогично. Как мне быть ? можно ли как то сделать что бы если food было <= 5 (любое число) значит срабатывает данный скрипт описанный выше
 
Последнее редактирование модератором:
Возможно
Код:
	if food <= 5 and (bEnough and bCost) then
	end
где bEnough и bCost bool
 
Последнее редактирование модератором:
[quote author=Adam Smith link=topic=1263.msg7623#msg7623 date=1484762736]
Возможно
Код:
	if food <= 5 and (bEnough and bCost) then
	end
где bEnough и bCost bool
[/quote]
Та же самая ошибка attempt to compare boolean with number
 
Последнее редактирование модератором:
den4iccc, господи что же ты намудрил чего то со всеми своими функциями. Зачем тебе булиан сравнивать с числом?
 
что бы запускался сценарий абилки если значение еды <=5 иначе false :) :) :)
 
Последнее редактирование модератором:
Блин, ясен фиг, что нельзя сравнивать разные типы данных!

Я, конечно, извиняюсь, ибо перестал на форуме читать чужие коды, которые больше 10и строк, но этого и не надо, потому что достаточно дать "думающему" человеку (коим ты, я знаю, являешься) направление движения - подать идею.

Тебе вот "идею" говорят:

Код:
if food <= 5 and (bEnough and bCost) then
	end

Что здесь?
Во первых переменная food должна быть как минимум целочисленным типом данных (целым числом).
Во вторых, bEnough и bCost - переменные типа boolean, то есть могут быть либо true, либо false.
Теперь сама идея:
Оператор сравнения состоит из двух частей: в первой сравнивают число с числом:
food <= 5
Далее идет одна операция, состоящая из двух - это проверка двух величин на значение true:
bEnough and bCost (иными словами: bEnough == true? и bCost == true?)
И наконец идет проверка на выполнение обоих условий:
(food <= 5) and (bEnough and bCost)

Иначе говоря, тебе предложили сделать три переменные: количество еды (целое число), bCost (флаг, который как я думаю, говорит, есть ли у еды цена) bEnough (хз че этот флаг должен говорить, но он так же либо true, либо false).
То есть, если еды у нас столько-то, у неё есть цена и еще че-то там, то выполнить то-то то-то.

Не обязательно этот кусок кода должен выглядеть именно так, тебе просто идею подали, оформленную в написанном на скорую руку коде. Подгони эту идею под свои переменные, код и условие.
 
Последнее редактирование модератором:
Спасибо за просветление ) +rep всем кому не лень было потратить время на это, я просто пытался подгонять enough, но не подумал что нужно сделать food как определённую еденицу для сравнения
 
Реклама: