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

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

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

Оффлайн den4iccc

  • 259
  • Мощь: 3
Я сделал абилку с помощью которой можно создать предмет в инвентарь, при этом я использую систему ресурсов дерева например я прожимаю абилку тратится 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
[свернуть]

Оффлайн FastSlow

  • 12
  • Мощь: 0
Re: Нужна помощь, проблема с скриптом
« Ответ #1 : 09-01-2017, 16:35:05 »
Сразу скажу я не читал код, но нельзя ли делать проверку хватает ли дерева?
If Дерево >=10 then
код
else ничего

Оффлайн den4iccc

  • 259
  • Мощь: 3
Re: Нужна помощь, проблема с скриптом
« Ответ #2 : 09-01-2017, 17:10:06 »
Спасибо за идею, но теперь при создании предмета ресурсы отбираются и предмет не появляется так же срабатывает "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
[свернуть]

Оффлайн Adam Smith

  • Друзья CG
  • 466
  • Мощь: 6
  • жрять жри его
Re: Нужна помощь, проблема с скриптом
« Ответ #3 : 09-01-2017, 17:13:30 »
Спасибо за идею, но теперь при создании предмета ресурсы отбираются и предмет не появляется так же срабатывает "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
[свернуть]
Код
	 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

By PG.Freeman

Оффлайн den4iccc

  • 259
  • Мощь: 3
Re: Нужна помощь, проблема с скриптом
« Ответ #4 : 09-01-2017, 17:22:40 »
Спасибо, но всё равно ресурсы тратятся и продолжается выдача итема
Код
      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

Оффлайн Adam Smith

  • Друзья CG
  • 466
  • Мощь: 6
  • жрять жри его
Re: Нужна помощь, проблема с скриптом
« Ответ #5 : 09-01-2017, 17:30:35 »
Попробуй так
Код
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
By PG.Freeman

Оффлайн den4iccc

  • 259
  • Мощь: 3
Re: Нужна помощь, проблема с скриптом
« Ответ #6 : 09-01-2017, 17:35:15 »
+rep Спасибо  :)
Попробуй так
Код
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

Оффлайн MahouShoujo

  • 171
  • Мощь: 3
Re: Нужна помощь, проблема с скриптом
« Ответ #7 : 09-01-2017, 21:09:42 »
Мне кажется все же в коде проверка на одно значение а в итоге потратится в 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)