[Вопрос] Честная награда за крипов
|
|
FatalBlade | Дата: Воскресенье, 25 Сентября 2011, 00:33:14 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Я хочу сделать так, что бы например когда умирает какой то юнит, не важно будь то крип, герой, босс или хз что... золото за него получали не только убивший крипа игрок, но и все его союзники. Но самое главное, что бы та сумма которую получают союзники, зависела от расстояния любого юнита каждого игрока от убитого крипа. Короче если в радиусе 1500 от убитого крипа есть враждебный ему юнит, и этот юнит является союзником того кто его убил, то владелец этого юнита получает золото. Да и ещё, если юнит который убил крипа тоже умер, его владелец всё равно получит золото.
Как может написать или подсказать мне как написать такую наработку?
Сообщение отредактировал FatalBlade - Воскресенье, 25 Сентября 2011, 00:52:57 |
|
|
|
Ty3uK | Дата: Воскресенье, 25 Сентября 2011, 11:12:49 | Сообщение # 2 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Триггерно добавляй золото, а количество золота выставляй по своей формуле. Выведи формулу зависимости голда от расстояния, кинь сюда- скажу как сделать
|
|
|
|
FatalBlade | Дата: Воскресенье, 25 Сентября 2011, 17:17:54 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Ty3uK) Триггерно добавляй золото, а количество золота выставляй по своей формуле. Выведи формулу зависимости голда от расстояния, кинь сюда- скажу как сделать Зависимость от расстояния я делать умею, но тут не только формула. Делать это по определённой формуле = КАЛ. Почему? Потому что рейндж герои будут оставать по полной в плане развития.
Я изначально сделал это с ифзенами, то есть что до 1000 рейндж награда не будет уменьшаться, а от 1000 до 2000 рейндж будет. То есть пикаются все юниты вокруг убитого юнита, и их игрокам выдавалось нужное количество золота. Эта система хорошо работала, и была бы пригодна если не 1 фишка - ведь у одного игрока может быть более 1 юнита, например герой с Суммонами, и они все могут находится рядом с умирающим юнитом. Так что получается что если есть герой + суммон, то игрок получит эту же сумму золота 2 раза. Можно конечно сделать что пикаться будут только герои, но тогда если суммон убьёт вражеского юнита, а героя не будет поблизости, то игрок не получит награду. Так что моя система не "универсальна".
Мне надо что бы если вокруг убитого юнита есть хоть какой то юнит данного игрока, то если расстояние между ними меньше 1000, игрок получит полную сумму. Если расстояние от 1000 до 2000, то в зависимости от этого расстояния будет начисляться процент награды. Такая наработка будет принимать кучу условий и там будут участвовать 2 группы юнитов, скорее всего группа внутри группы... И это всё будет происходить при смерти любого юнита... Мне процессор жалко...
Сообщение отредактировал FatalBlade - Воскресенье, 25 Сентября 2011, 17:19:08 |
|
|
|
lawson | Дата: Воскресенье, 25 Сентября 2011, 17:33:30 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| FatalBlade, Ни фига не понял из твоего поста: тебя надо типа такого если все юниты - союзники убившего героя назодятся в радиусе 1000р от умершего героя то дать им 100% суммы если 1001 - 1999 то дать 50% и дальше да? Добавлено (25 Сентябрь 2011, 17:33:30) --------------------------------------------- FatalBlade, кароче ты хочешь сделать как в доте? я у себя на карте сделал подобное.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
FatalBlade | Дата: Воскресенье, 25 Сентября 2011, 17:50:15 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (lawson) FatalBlade, кароче ты хочешь сделать как в доте? я у себя на карте сделал подобное. Я хз как в Доте.
Quote (lawson) союзники убившего героя назодятся в радиусе 1000р от умершего героя то дать им 100% суммы если 1001 - 1999 то дать 50% и дальше да? Ок предложу попроще. Если союзник убившего ЮНИТА находится в радиусе 1000, дать ему 100%, если 1001 - 1500, дать им 66%, если 1501 - 200, дать 33%. Почему я выделил слово ЮНИТ? Потому что даже если поблизости не будет его героя, но будет какое нибудь призванное им существо, игрок всё равно получает награду.
Теперь, сама формула золота:
local integer l = GetUnitLevel(GetDyingUnit()) local real x = ( ( l + 6.00 ) * ( l * 0.04 + 1.00 ) )
|
|
|
|
Ty3uK | Дата: Воскресенье, 25 Сентября 2011, 17:59:26 | Сообщение # 6 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| GetDyingUnit() убери нах и не позорься, юзай GetTriggerUnit()
|
|
|
|
FatalBlade | Дата: Воскресенье, 25 Сентября 2011, 18:12:21 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Почему? Это ведь не БЖ.
native GetDyingUnit takes nothing returns unit
|
|
|
|
Ty3uK | Дата: Воскресенье, 25 Сентября 2011, 18:41:41 | Сообщение # 8 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Хм... Перепутал с GetAttackedUnit(), сорри
|
|
|
|
FatalBlade | Дата: Воскресенье, 25 Сентября 2011, 20:37:41 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| lawson, а как оно работает в Доте я давно играл не помню уже.
|
|
|
|
lawson | Дата: Воскресенье, 25 Сентября 2011, 21:52:06 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Ty3uK) GetDyingUnit() Quote (Ty3uK) GetTriggerUnit() Нее ни какой разницы так как юнит который умирает и есть юнит который вызывает событие.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Ty3uK | Дата: Воскресенье, 25 Сентября 2011, 22:10:54 | Сообщение # 11 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Я знаю, просто мне показалось, что это бж(перепутал с атакованным юнитом). Насчет того, что это то же самое- знаю, тут уже от личных предпочтений зависит
|
|
|
|
SirNikolas | Дата: Понедельник, 26 Сентября 2011, 12:16:20 | Сообщение # 12 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| FatalBlade, создаешь массив логических и делаешь по твоему работающему способу, только проверяешь, что bool[GetPlayerId(GetOwningPlayer(<Выбранный юнит>))] == true, устанавливаешь его в false и тогда даешь золото. Тогда игрок получит золото только за одного находящегося поблизости своего юнита. Добавлено (26 Сентябрь 2011, 12:16:20) --------------------------------------------- А GetTriggerUnit() использовать лучше.
|
|
|
|
FatalBlade | Дата: Понедельник, 26 Сентября 2011, 12:32:05 | Сообщение # 13 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (SirNikolas) FatalBlade, создаешь массив логических и делаешь по твоему работающему способу, только проверяешь, что bool[GetPlayerId(GetOwningPlayer(<Выбранный юнит>))] == true, устанавливаешь его в false и тогда даешь золото. Тогда игрок получит золото только за одного находящегося поблизости своего юнита. Как создавать локальный массив? local boolean array bool (10)?
Сообщение отредактировал FatalBlade - Понедельник, 26 Сентября 2011, 12:38:26 |
|
|
|
SirNikolas | Дата: Понедельник, 26 Сентября 2011, 12:46:51 | Сообщение # 14 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| local boolean array b
|
|
|
|
FatalBlade | Дата: Понедельник, 26 Сентября 2011, 12:56:54 | Сообщение # 15 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (SirNikolas) local boolean array b А не надо указывать размер массива?
|
|
|
|
SirNikolas | Дата: Понедельник, 26 Сентября 2011, 13:22:40 | Сообщение # 16 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Размер всех массивов в war3 - [0..8191].
|
|
|
|
FatalBlade | Дата: Понедельник, 26 Сентября 2011, 13:27:22 | Сообщение # 17 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (SirNikolas) Размер всех массивов в war3 - [0..8191]. Думаю этого мне хватит Сек, а если я создаю глобальный массив и указываю ему размер [0..100], он всё равно будет [0..8191]?
|
|
|
|
SirNikolas | Дата: Понедельник, 26 Сентября 2011, 13:34:45 | Сообщение # 18 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Тот "размер массива", который ты указываешь в Редакторе переменных, на самом деле не размер, а указание, какие элементы следует инициализировать. Т. е. при создании массива Integer с размером 100 и начальным значением 0 он создаст массив с размером 8192, в котором элементы [0..100] будут равны 0.
|
|
|
|
Ty3uK | Дата: Понедельник, 26 Сентября 2011, 15:22:09 | Сообщение # 19 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| SirNikolas, fixed на заметочку возьму, однако
|
|
|
|