Нужна помощь, проблема с скриптом

  • Автор темы Автор темы den4iccc
  • Дата начала Дата начала

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
Я сделал абилку с помощью которой можно создать предмет в инвентарь, при этом я использую систему ресурсов дерева например я прожимаю абилку тратится 10 ед ресурсов и создаётся предмет но проблема в том что когда заканчивается ресурсы то есть меньше заданного числа =10 то предмет всёравно создаются, как сделать запрет на создание предметов когда не хватает ресурсов
Код:
function create_wood(keys)

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

	local ability = keys.ability
	
	local gold_cost = ability:GetGoldCost(1)
	local lumber_cost = ability:GetLevelSpecialValueFor("lumber_cost", ability:GetLevel()-1)
	local food_cost = ability:GetLevelSpecialValueFor("food_cost", ability:GetLevel()-1)

	local enough_lumber
	local enough_food

	local create_woods = EntIndexToHScript( keys.caster_entindex )
	
	for itemSlot = 0, 1, 2 do 
			local Item = create_woods:GetItemInSlot( itemSlot )
			create_woods:AddItemByName("item_wood")
			end
			
	if gold_cost ~= nil then
		player.lastSpentGold = gold_cost
	end

	if lumber_cost ~= nil then
		enough_lumber = CheckLumber(player, lumber_cost,true)
	else
		enough_lumber = true
	end

	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 or enough_lumber ~= true then
		return
	else
		SpendLumber(player, lumber_cost)
		SpendFood(player, food_cost)
			
	end
	
end
 
Последнее редактирование модератором:
Сразу скажу я не читал код, но нельзя ли делать проверку хватает ли дерева?
If Дерево >=10 then
код
else ничего
 
Последнее редактирование модератором:
Спасибо за идею, но теперь при создании предмета ресурсы отбираются и предмет не появляется так же срабатывает "else" и устанавливает 100 мп, пробовал по другому но код игнорировал проверку на кол-во ресурсов и создавал итемы

Код:
   for itemSlot = 0, 1, 2 do 
	    if lumber_cost ~= 10 then
			local Item = create_woods:GetItemInSlot( itemSlot )
			create_woods:AddItemByName("item_wood") 
			 
			else
			create_woods:SetMana(100)
			
			end 
			end
 
Последнее редактирование модератором:
[quote author=den4iccc link=topic=1224.msg7366#msg7366 date=1483981806]
Спасибо за идею, но теперь при создании предмета ресурсы отбираются и предмет не появляется так же срабатывает "else" и устанавливает 100 мп, пробовал по другому но код игнорировал проверку на кол-во ресурсов и создавал итемы

Код:
   for itemSlot = 0, 1, 2 do 
	    if lumber_cost ~= 10 then
			local Item = create_woods:GetItemInSlot( itemSlot )
			create_woods:AddItemByName("item_wood") 
			 
			else
			create_woods:SetMana(100)
			
			end 
			end
[/quote]
Код:
	 if lumber_cost ~= 10 then
		 for itemSlot = 0, 1, 2 do
			local Item = create_woods:GetItemInSlot( itemSlot )
			create_woods:AddItemByName("item_wood") 
		end
	else
		return
	end
 
Последнее редактирование модератором:
Спасибо, но всё равно ресурсы тратятся и продолжается выдача итема
Код:
   for itemSlot = 0, 1, 2 do 
	 if lumber_cost ~= 10 then
		 for itemSlot = 0, 1, 2 do
			local Item = create_woods:GetItemInSlot( itemSlot )
			create_woods:AddItemByName("item_wood") 
		end
	else
		return
	  end
	end
 
Последнее редактирование модератором:
Попробуй так
Код:
function create_wood(keys)

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

	local ability = keys.ability
	
	local gold_cost = ability:GetGoldCost(1)
	local lumber_cost = ability:GetLevelSpecialValueFor("lumber_cost", ability:GetLevel()-1)
	local food_cost = ability:GetLevelSpecialValueFor("food_cost", ability:GetLevel()-1)

	local enough_lumber
	local enough_food

	local create_woods = EntIndexToHScript( keys.caster_entindex )
			
	if gold_cost ~= nil then
		player.lastSpentGold = gold_cost
	end

	if lumber_cost ~= nil then
		enough_lumber = CheckLumber(player, lumber_cost,true)
	else
		enough_lumber = true
	end

	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 or enough_lumber ~= true then
		return
	else
		for itemSlot = 0, 1, 2 do 
			local Item = create_woods:GetItemInSlot( itemSlot )
			create_woods:AddItemByName("item_wood")
			SpendLumber(player, lumber_cost)
			SpendFood(player, food_cost)
		end
	end
	
end
 
Последнее редактирование модератором:
+rep Спасибо :)
[quote author=Adam Smith link=topic=1224.msg7371#msg7371 date=1483983035]
Попробуй так
Код:
function create_wood(keys)

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

	local ability = keys.ability
	
	local gold_cost = ability:GetGoldCost(1)
	local lumber_cost = ability:GetLevelSpecialValueFor("lumber_cost", ability:GetLevel()-1)
	local food_cost = ability:GetLevelSpecialValueFor("food_cost", ability:GetLevel()-1)

	local enough_lumber
	local enough_food

	local create_woods = EntIndexToHScript( keys.caster_entindex )
			
	if gold_cost ~= nil then
		player.lastSpentGold = gold_cost
	end

	if lumber_cost ~= nil then
		enough_lumber = CheckLumber(player, lumber_cost,true)
	else
		enough_lumber = true
	end

	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 or enough_lumber ~= true then
		return
	else
		for itemSlot = 0, 1, 2 do 
			local Item = create_woods:GetItemInSlot( itemSlot )
			create_woods:AddItemByName("item_wood")
			SpendLumber(player, lumber_cost)
			SpendFood(player, food_cost)
		end
	end
	
end
[/quote]
 
Последнее редактирование модератором:
Мне кажется все же в коде проверка на одно значение а в итоге потратится в 3 раза больше. Вот так наверное правильнее, но не видя остальных функций сложно сказать.

Код:
for itemSlot = 0, 1, 2 do 
  local Item = create_woods:GetItemInSlot( itemSlot )
  create_woods:AddItemByName("item_wood")
end

SpendLumber(player, lumber_cost)
SpendFood(player, food_cost)
 
Последнее редактирование модератором:
Реклама: