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

Ошибка при проверки на кол-во голды

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

Оффлайн den4iccc

  • 310
  • Мощь: 4
Есть абилка которая тратит голду и кастомный ресурс(дерево) при этом создаёт предмет, есть проверка на кол-во древесины, но нет проверки на кол-во голды проблема в том, что когда я использую абилку тратится голда и дерево и если нет дерева то предмет будет создоватся и тратиться голда
Код
function create_1(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 gold_cost = ability:GetLevelSpecialValueFor("gold_cost", ability:GetLevel()-1)
local lumber_cost = ability:GetLevelSpecialValueFor("lumber_cost", ability:GetLevel()-1)

local enough_lumber

local sooooo = EntIndexToHScript( keys.caster_entindex )

if gold_cost ~= nil then
player.lastSpentGold = gold_cost
-- ReturnGold(player, gold_cost)
end

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

if enough_lumber ~= true then
return
else
for itemSlot = 0, 1, 2 do
local Item = sooooo:GetItemInSlot( itemSlot )
sooooo:AddItemByName("item_1")
SpendLumber(player, lumber_cost)
-- UseResources(player, bGold) gold_cost
end
end

end

в абилку прописываю
Код
	  "AbilitySpecial"
  {
    "01"
    {
        "var_type"  "FIELD_INTEGER"
        "lumber_cost" "10"
    }
    "02"
    {
        "var_type"  "FIELD_INTEGER"
        "gold_cost" "-10"
    }
  }

могу конечно использовать "AbilityGoldCost"       "10" в абилке только тогда будет игнорировать дерево и всё равно будет создавать предмет
« Последнее редактирование: 30-01-2017, 17:04:51 от den4iccc »

Оффлайн I_GRIN_I

  • Продвинутый
  • 528
  • Мощь: 9
  • Научиться бы скриптить...
den4iccc, так у тебя ошибка при проверке голды или при проверке дерева?

Оффлайн den4iccc

  • 310
  • Мощь: 4
den4iccc, так у тебя ошибка при проверке голды или при проверке дерева?
по сути голды, например: у меня 20 голды и 10 дерева я прожимаю абилку тратится 10 голды и 10 дерева и создаётся предмет, потом жму ещё раз тратится 10 голды и 0 дерева при этом создаётся предмет, хочу сделать запрет чтобы создовался предмет если есть все ресурсы
 Нужно как-то spendgold задействовать

Оффлайн I_GRIN_I

  • Продвинутый
  • 528
  • Мощь: 9
  • Научиться бы скриптить...
den4iccc, ну, ты просто делаешь проверку if goldtospend <= currentgold and lumbertospend <= currentlumber then
« Последнее редактирование: 30-01-2017, 18:10:55 от I_GRIN_I »

Оффлайн den4iccc

  • 310
  • Мощь: 4
den4iccc, ну, ты просто делаешь проверку if goldtospend <= currentgold and lumbertospend <= currentlumber then
Спасибо,  я завтыкал просто :) :) :)

Оффлайн den4iccc

  • 310
  • Мощь: 4
Хахаахах теперь всё наоборот стало, всё зависит от дерева с голдой решил проблему осталось с деревом надо сделать чтобы они зависили друг от друга если нет одного из ресурсов то не будет выполняться действие
« Последнее редактирование: 30-01-2017, 19:07:14 от den4iccc »

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Так тебе же GRIN написал: проверяешь сразу оба случая через оператор and.

Оффлайн den4iccc

  • 310
  • Мощь: 4
Ну да всё равно не реагирует
Код
function create_1(keys)

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

local gold_cost = ability:GetLevelSpecialValueFor("gold_cost", ability:GetLevel()-1)
local lumber_cost = ability:GetLevelSpecialValueFor("lumber_cost", ability:GetLevel()-1)

local enough_lumber

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 gold_cost ~= true and enough_lumber ~= true then
return
else
for itemSlot = 0, 1, 2 do
local Item = create_woods:GetItemInSlot( itemSlot )
create_woods:AddItemByName("item_1")
SpendLumber(player, lumber_cost)
ReturnGold(player, gold_cost)
end
end
end

Оффлайн ZLOY

  • Супермодератор
  • 396
  • Мощь: 5
Код
if 5 ~= true then
print("Pizdec")
end

Оффлайн ZLOY

  • Супермодератор
  • 396
  • Мощь: 5
Вообще думаю тебе нужно сравнить два числа - сколько золота есть у игрока и сколько нужно для абилки
Код
PlayerResource:GetGold(pID) --вот так можно узнать сколько золота у игрока
« Последнее редактирование: 30-01-2017, 19:48:50 от ZLOY »

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Код
if 5 ~= true then
print("Pizdec")
end

Елки палки, а я не смотрел его код :))

Ден, почитай про типы данных в языках программирования, например в том же lua. Нельзя сравнивать между собой число и булевую величину. Так же как и разные типы данных. А проверку на nil (пустоту) делать можно, потому что объект либо есть и он имеет какой-то тип, либо объекта нет (nil).

Оффлайн Adam Smith

  • Друзья CG
  • 476
  • Мощь: 6
  • жрять жри его
Код
"AbilityGoldCost" "700"


Код
GetGoldCost	int GetGoldCost(int iLevel)	No Description Set
GetGoldCostForUpgrade int GetGoldCostForUpgrade(int iLevel)
By PG.Freeman

Оффлайн gameizeazy

  • 106
  • Мощь: 1
Я код не читал но по сути просто делаеш что то типо
Код
if gold_cost == 123 & lumber[id] == 123 then

else say(nil,"kek",nil) end
Или если указан gold cost в KV
тада
Код
 if lumber == 123 then

else
modifyGold(id,gold_cost)
end

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
den4iccc, что делаешь то, кстати? Раз есть ресурсы, значит, что-то интересное.

Оффлайн gameizeazy

  • 106
  • Мощь: 1
Код
local currentGold = pID:getGold()
if lumber == 123 then
-- Создать предмет
lumber = lumber - 1
else
-- Если нету
end