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

Хелпаните пожалуйста

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

Оффлайн den4iccc

  • 385
  • Мощь: 6
Хелпаните пожалуйста
« : 27-02-2017, 17:33:31 »
Как сделать сохранение добавленной абилики после респавна героя?
Есть две абилки одна привязана к npc (ability_1) и вторая абилка (ability_2),
ability_1 присвоена npc и при активации даёт герою ability_2, далее есть скрипт для героя в котором расписаны абилки с помощью которых можно менять способности как у инвокера, соль в том что когда я присваиваю абилку герою то при респавне герой теряет её, как мне занести её в некую таблицу что бы абилка сохранялась
абилка 1 - 
 
Код
 local hero = player:GetAssignedHero()
  hero:AddAbility("ability_2")
и сам скрипт спавна героя
 
Код
function Spawn( event )
for i=0, thisEntity:GetAbilityCount()-1 do
if thisEntity:GetAbilityByIndex(i) ~= nil then
thisEntity:RemoveAbility(thisEntity:GetAbilityByIndex(i):GetName())
end
    end

for i=1, table.getn(NO_MENU) do -  NO_MENU{aбилки}
thisEntity:AddAbility(NO_MENU[i])
    end
bred(thisEntity) - прописывает от 0 до 15 setlevel для ability_2
InitAbil (thisEntity) – прописывает от 0 до 15 setlevel всех абилок кроме ability_2
End
есть ли какая нибудь функция которая просматривает была ли данная способность присвоена героем
« Последнее редактирование: 27-02-2017, 20:04:58 от den4iccc »

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Хелпаните пожалуйста
« Ответ #1 : 27-02-2017, 22:33:16 »
Правильно ли я тебе понял:
После смерти кастера, его абилки возвращаются в исходное положение?

И зачем тебе куда-то сохранять  "доп. абилку"? Герой что, может прокачивать доп абилки?


А пока можешь глянуть это, думаю у тебя что-то похожее. Это годовалой давности код одного из моего проекта с крафтом. Принцип тот же самый, только без прокачки доп способностей.




Оффлайн den4iccc

  • 385
  • Мощь: 6
Re: Хелпаните пожалуйста
« Ответ #2 : 28-02-2017, 10:15:35 »
Весь процесс как всё происходит на данный момент: использую каст абилки у npc который даёт гл. герою абилку, которая грубо говоря прописывает setlevel для нужной абилки, но когда герой умирает то добавленная абилка пропадает вместе с сетлевалом нужной абилкой

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Хелпаните пожалуйста
« Ответ #3 : 28-02-2017, 10:21:22 »
Тогда зачем тебе её куда-то сохранять, если ты её уровень тоже стираешь? То есть игроку придется заново качать её.
Просто удаляй её и возвращай стандартные, или что там у тебя.

Оффлайн den4iccc

  • 385
  • Мощь: 6
Re: Хелпаните пожалуйста
« Ответ #4 : 28-02-2017, 11:22:28 »
Я сделал именно так потому что если я просто буду давать лвл абилке то при свапе абилок у меня лвл откатывается на 0
« Последнее редактирование: 28-02-2017, 11:44:59 от den4iccc »

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Хелпаните пожалуйста
« Ответ #5 : 28-02-2017, 14:50:39 »
Что-то я похоже не понимаю:

1) Клацаешь героем у нпс на абилку
2) У героя появляется новая абилка
3) Клацая на новую абилку, увеличиваешь уровень другой абилки у нпс
4) Умерев героем с новой абилкой, новая абилка исчезает и уровень той другой абилки у нпс падает до нуля.

Все верно?

Оффлайн den4iccc

  • 385
  • Мощь: 6
Re: Хелпаните пожалуйста
« Ответ #6 : 28-02-2017, 20:04:10 »
Сарян, за некорректный вопрос я просто не мастер задавать вопросы
1)клацаю на абилку у npc, гл герою даётся абилка
2)эта абилка пустышка она нужна только для проверки, если есть данная абилка у героя то он проверяет если да то выдает лвл - 1(максимум)
3)я использую систему свапа абилок с занесением их в таблицу то есть при спавне у меня есть ряд определённых абилок две из них свапают некоторые абилки тем самым выводят нужную таблицу с абилками (грубо говоря)
4)в одной из панели выведенных таблиц есть абилка которая имеет уровень 0 так как я для каждой таблицы делаю всем скилам уровень 1, кроме нужной мне абилки
5)всё работает как надо до тех пор, пока герой не респавнится если он реснится то добавленная абилка через npc главному герою пропадает и проверка соответственно не действует(хочу что бы при респавне данная абилка где то сохранялась если она хотя бы 1 раз была использована у локльного игрока), мб я как то не правильно мыслю и не так себе поставил алгоритм

Я просто хочу сделать как в варике 3 систему того как изучать способность тобишь у npc есть спелл который даёт главному герою setlvel 1 определённой абилке и если постройка была ещё раз возведена героем то способности не будет если она была изучена, на данный момент я знаю как удалить способность после того как сработал кастер но это уже другая история)

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Хелпаните пожалуйста
« Ответ #7 : 28-02-2017, 21:07:51 »
М, то есть ты хочешь сохранить уровень той абилки, которая изначально было нулевой? И при свапе у тебя ей уровень назначается как раз в зависимости от наличия у героя абилки-флага (пустышки)?

Я тебе предлагаю сделать просто у героя переменную, что будет отвечать за уровень этой абилки. То есть проверка будет осуществляться через эту переменную, а не через абилку-пустышку. А абилка пустышка будет отвечать лишь за "первое использование".

Либо где-то сделать подобную переменную.

Оффлайн den4iccc

  • 385
  • Мощь: 6
Re: Хелпаните пожалуйста
« Ответ #8 : 01-03-2017, 18:01:39 »
То есть переменная отвечает за лвл абилки если данным игроком была использована абилка пустышка, то переменная чекает если был каст (первое использование) значит лвл всегда будет апнут :? вот я себе ломал голову, никак не могу понять как это сделать "первое использование" всё время думаю о FindAbilityByName но это же не то, что то вроде типо этого хочу найти void SetFirstBloodActive(bool bool_1) - Устанавливает сработала ли Первая кровь.
« Последнее редактирование: 01-03-2017, 18:06:54 от den4iccc »

Оффлайн den4iccc

  • 385
  • Мощь: 6
Re: Хелпаните пожалуйста
« Ответ #9 : 01-03-2017, 18:16:27 »
мб CastAbility() подайдёт

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Хелпаните пожалуйста
« Ответ #10 : 01-03-2017, 20:11:33 »
Первое использование - это у тебя когда абилка-пустышка впервые добавляется, то делаешь проверку у переменной на равенство нулю, например. Если её значение равно нулю, то игрок впервые получил эту абилку-пустышку. Даешь переменной значение 1 (т.к. первый уровень) и далее уже там как вздумаешь работаешь (увеличиваешь её значение).

Вот и выходит у тебя, что пока переменная равна нулю, то игрок еще не получал абилку-пустышку. Как только он её получит, то переменная уже не будет равна нулю.

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Хелпаните пожалуйста
« Ответ #11 : 01-03-2017, 20:13:37 »
В том коде, что у тебя дает абилку-пустышку и реализуешь эту логику с переменной. Можно по идеи вообще от абилки-пустышки отказаться, если она у тебя просто как флаг была.

Оффлайн den4iccc

  • 385
  • Мощь: 6
Re: Хелпаните пожалуйста
« Ответ #12 : 03-03-2017, 16:20:45 »
Мдааа блин у меня всё под носом было и только спустя 2 дня я это понял как решить данную проблему, спасибо тебе за помощь, +rep но только не могу повысить так как там таймер на изменение статистики стоит потом поставлю
« Последнее редактирование: 03-03-2017, 16:23:10 от den4iccc »

Оффлайн Илья

  • Супермодератор
  • 2133
  • Мощь: 21
Re: Хелпаните пожалуйста
« Ответ #13 : 03-03-2017, 16:34:20 »
Да я за репой не бегаю, спасибо : )

Оффлайн den4iccc

  • 385
  • Мощь: 6
Re: Хелпаните пожалуйста
« Ответ #14 : 03-03-2017, 17:12:07 »
Правда я не много побыдлокодил использовал для каждой абилки кроме добавленной (нужной)
Код
 thisEntity:RemoveAbility("    ")
и для кастера npc добавил значение not чтобы он не добавлял по 10000 абилок
за место вот этого кода
Код
	for i=0, thisEntity:GetAbilityCount()-1 do
if thisEntity:GetAbilityByIndex(i) ~= nil then
thisEntity:RemoveAbility(thisEntity:GetAbilityByIndex(i):GetName())

end
    end
так как у меня не получилось выставить приоритет для добавленной абилки в основном пробовал через условия, так же пробовал and GetName() == нужная абилка, пока что так пока не придумаю или не пойму как правильно условие сделать чтобы всё работало нормально без лишних строк
« Последнее редактирование: 03-03-2017, 17:17:59 от den4iccc »