[Вопрос] Оптимизация спелла, где используются группы
|
|
lawson | Дата: Пятница, 23 Сентября 2011, 12:52:36 | Сообщение # 51 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) трупы вокруг героя взрываются Одновременно чтоли?
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Ty3uK | Дата: Пятница, 23 Сентября 2011, 12:53:03 | Сообщение # 52 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Вообще-то это пустая функция. Подумай сам- ты даешь в значение фильтра ноль, а не функцию. А ноль в данном случае будет пустой функцией
|
|
|
|
FatalBlade | Дата: Пятница, 23 Сентября 2011, 12:53:57 | Сообщение # 53 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Mep3aB4uK, у тебя он почему то выдаёт ошибки на всё что связанно с группами...
|
|
|
|
lawson | Дата: Пятница, 23 Сентября 2011, 12:56:04 | Сообщение # 54 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Ty3uK, Ладно проще: когда ты присваиваешь какую либо перменную например unit = GetTriggerUnit() ты вызываешь внутри игровые функции которая присваивает ссылку на юнита через GetTriggerUnit() а unit это ссылка на GetTriggerUnit() поэтому это буквально не считаеться функцией, это уже основы програмирования любого языка програмирования. Все что ты делаешь все функции даже когда печатаешь или мышью водишь все вызывает функции.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 23 Сентября 2011, 12:57:54 |
|
|
|
FatalBlade | Дата: Пятница, 23 Сентября 2011, 12:56:06 | Сообщение # 55 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Народ... Вот так вот можно писать? Как бы игра увидит группу? call GroupAddUnit(LoadGroupHandle(udg_Skills, GetSpellAbilityId(), 0), unit)
|
|
|
|
lawson | Дата: Пятница, 23 Сентября 2011, 12:56:46 | Сообщение # 56 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) Народ... Вот так вот можно писать? Да. Quote (FatalBlade) Как бы игра увидит группу? непонял
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
FatalBlade | Дата: Пятница, 23 Сентября 2011, 12:57:00 | Сообщение # 57 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (lawson) Одновременно чтоли? Да.
|
|
|
|
Mep3aB4uK | Дата: Пятница, 23 Сентября 2011, 12:57:36 | Сообщение # 58 |
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
| FatalBlade, я писал по памяти, возможно какая то буква пропущена или неправильно вписана, а может и значения перепутаны местами. Ты на пиши какие ошибки или посроси чтоб кто то поправил(легко делается) P.S так же у тебя должна быть переменная типа хэш-таблица с названием Н и при ините карты set udg_H=InitHashtable()
Сообщение отредактировал Mep3aB4uK - Пятница, 23 Сентября 2011, 13:00:38 |
|
|
|
FatalBlade | Дата: Пятница, 23 Сентября 2011, 12:58:45 | Сообщение # 59 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Ну если я добавляю юнита в группу, которая сидит в хэше, юнит добавится в эту группу? Это ведь не то же самое что создать локальную группу.
|
|
|
|
lawson | Дата: Пятница, 23 Сентября 2011, 12:58:59 | Сообщение # 60 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| FatalBlade, И что здесь сложно пикаешь всех трупой вокруг и накладываешь эффект взрыва создаешь даммика около каждого трупа и кастуешь способность наносящую урон или триггерно наносишь урон.
loop extiwhen d == null set d = FirstOfGroup(g) call GroupRemoveUnit(g, d) set c = CreateUnit() - даммик call DamagePoint или как там call RemoveUnit© endloop
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 23 Сентября 2011, 13:00:38 |
|
|
|
Ty3uK | Дата: Пятница, 23 Сентября 2011, 12:59:39 | Сообщение # 61 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Так я ж про то и говорю- ноль тоже вызов пустой функции, поэтому можно засунуть ее в локальную и уничтожить вообщем, это сугубо мое мнение, а так же некоторый теоретический материал от Дуси в аське
|
|
|
|
lawson | Дата: Пятница, 23 Сентября 2011, 13:02:16 | Сообщение # 62 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Ty3uK) Так я ж про то и говорю- ноль тоже вызов пустой функции Это абсолютно глупый вопрос.Quote (Ty3uK) Вообще-то это пустая функция
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Ty3uK | Дата: Пятница, 23 Сентября 2011, 13:02:22 | Сообщение # 63 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Вроде call UnitDamagePoint()
|
|
|
|
FatalBlade | Дата: Пятница, 23 Сентября 2011, 13:02:43 | Сообщение # 64 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (lawson) FatalBlade, И что здесь сложно пикаешь всех трупой вокруг и накладываешь эффект взрыва создаешь даммика около каждого трупа и кастуешь способность наносящую урон или триггерно наносишь урон. Я ЗНАЮ КАК ЭТО ДЕЛАТЬ! У меня уже есть готовые спеллы, как минимум 150 таких триггерных спеллов, даже сложнее чем этот. Этот ещё 1 из самых простых. Мне всего лишь нужно их оптимизировать, избавить от глобальных переменных и глобальных таймеров. Вот и всё)
|
|
|
|
Ty3uK | Дата: Пятница, 23 Сентября 2011, 13:03:02 | Сообщение # 65 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Я не вопрос задавал, а утверждал
|
|
|
|
lawson | Дата: Пятница, 23 Сентября 2011, 13:04:31 | Сообщение # 66 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Ty3uK) Я не вопрос задавал, а утверждал Глупо такое утверждать так как это очевидно, ты бы еще взялся за основы работы процесоора и оперативки.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 23 Сентября 2011, 13:04:56 |
|
|
|
Mep3aB4uK | Дата: Пятница, 23 Сентября 2011, 13:05:04 | Сообщение # 67 |
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
| Ty3uK, можешь поправить мой код?
|
|
|
|
lawson | Дата: Пятница, 23 Сентября 2011, 13:05:54 | Сообщение # 68 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| FatalBlade, Я могу тебе тоже написать по памяти(так как нет ВЕ), но могу где угодно ошибиться и не заметить.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 23 Сентября 2011, 13:10:02 |
|
|
|
Ty3uK | Дата: Пятница, 23 Сентября 2011, 13:07:40 | Сообщение # 69 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Хм... А что в этом такого? О.о основы их работы не требуют особых знаний (если не вдаваться в чисто физические дебри). А по твоему, что же тогда означает, например, call TimerStart(t, 1., false, null), как не старт таймера с пустой функцией? О.о Добавлено (23 Сентябрь 2011, 13:07:40) --------------------------------------------- Домой со школоло приду и сделаю, на уроках не кайф с телефона, да он еще и сдохнет скоро
|
|
|
|
Mep3aB4uK | Дата: Пятница, 23 Сентября 2011, 13:08:26 | Сообщение # 70 |
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
| Ty3uK, ниче такого... просто все те ошибки которые жнгп покажет исправь и скинь код нормальный
|
|
|
|
lawson | Дата: Пятница, 23 Сентября 2011, 13:08:33 | Сообщение # 71 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (Ty3uK) call TimerStart(t, 1., false, null), как не старт таймера с пустой функцией? О.о Здесь ты вызываешь функцию УЖЕ так как здесь стоит call! да ты здесь тоже можно поставить call set u = null но это - лишь присвоение перменной значение. Кароче хочешь услышать однозначный и правильный ответ пообщайся с создателями C#.
простой пример: функция Какое яблоко яблоко != груша конец функции
вызвать функцию Какое яблоко это тебе выведет что яблоко != груша тоесть чтобы это вывести ты вызвал функцию Какое яблоко а она в себе имеет ТОЛЬКО ЗНАЧЕНИЕ что яблоко != груша.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 23 Сентября 2011, 13:18:56 |
|
|
|
FatalBlade | Дата: Пятница, 23 Сентября 2011, 13:19:56 | Сообщение # 72 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Вот как в данный момент выглядит мой код: Code function Trig_Explode_Corpses_Conditions takes nothing returns boolean if ( GetSpellAbilityId() == 'A0QT' ) then return true endif return false endfunction
function EC1 takes nothing returns nothing local timer t = GetExpiredTimer() local group g = LoadGroupHandle(udg_Skills, GetSpellAbilityId(), 0) local unit u local location x local real d local integer l = GetUnitAbilityLevel( GetTriggerUnit(), 'A0QT')
if ( l == 1 ) then set d = 50.00 endif if ( l == 2 ) then set d = 65.00 endif if ( l == 3 ) then set d = 85.00 endif if ( l == 4 ) then set d = 110.00 endif if ( l == 5 ) then set d = 140.00 endif if ( l == 6 ) then set d = 175.00 endif if ( l == 7 ) then set d = 215.00 endif if ( l == 8 ) then set d = 260.00 endif if ( l == 9 ) then set d = 310.00 endif if ( l == 10 ) then set d = 365.00 endif
set u = FirstOfGroup(g) loop exitwhen u == null set u = FirstOfGroup(g) set x = GetUnitLoc(u) call UnitDamagePointLoc( u, 0, 180.00, x, d, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_FORCE ) call DestroyEffect(AddSpecialEffectLoc( "Units\\Undead\\Abomination\\AbominationExplosion.mdl", x )) call RemoveLocation(x) call GroupRemoveUnit(g,u) call RemoveUnit(u) endloop call PlaySoundOnUnitBJ( gg_snd_ImpaleLand, 100, GetTriggerUnit()) call DestroyGroup(g) call DestroyTimer(t) endfunction
function group0 takes nothing returns nothing local location p = GetUnitLoc(GetEnumUnit()) local unit u if (IsUnitDeadBJ(GetEnumUnit()) == true) then set u = CreateUnit( GetOwningPlayer(GetTriggerUnit()), 'h007', GetLocationX(p), GetLocationY(p), 0.00 ) call GroupAddUnit(LoadGroupHandle(udg_Skills, GetSpellAbilityId(), 0), u) call RemoveUnit(GetEnumUnit()) set u = null endif call RemoveLocation(p) endfunction
function Trig_Explode_Corpses_Actions takes nothing returns nothing local timer t = CreateTimer() local location p = GetUnitLoc(GetTriggerUnit()) local group g = CreateGroup() call SaveGroupHandle(udg_Skills, GetSpellAbilityId(), 0, g) call ForGroup( GetUnitsInRangeOfLocAll(900.00, p), function group0) call DestroyGroup(GetLastCreatedGroup()) call RemoveLocation(p) call TimerStart( t, 0.4, false, function EC1 ) endfunction
И я решил проверить что именно не работает. Дал дамми видимую модель, что бы всех дамми была видно. Так вот, оказывается, дамми создаются, но не создаётся эффект и нету дамага. Как будто группа просто тупо не сохраняется в хэш
|
|
|
|
lawson | Дата: Пятница, 23 Сентября 2011, 13:23:05 | Сообщение # 73 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) call DestroyGroup(GetLastCreatedGroup()) Так зачем же ты ее удаляешь перед тем как сделать действия?
Добавлено (23 Сентябрь 2011, 13:23:05) --------------------------------------------- Quote (FatalBlade) ocal group g = CreateGroup() call SaveGroupHandle(udg_Skills, GetSpellAbilityId(), 0, g) call ForGroup( GetUnitsInRangeOfLocAll(900.00, p), function group0) Во вторых что это? Что ты сохраняешь в хеш пустую группу? Я не знаю это пиндец, если ни кто не сделает сегодня вечером все исправлю.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 23 Сентября 2011, 13:29:36 |
|
|
|
FatalBlade | Дата: Пятница, 23 Сентября 2011, 13:31:04 | Сообщение # 74 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (lawson) Что ты сохраняешь в хеш пустую группу? Да, я сохраняю пустую группу, и потом заполняю её даммиками.
|
|
|
|
lawson | Дата: Пятница, 23 Сентября 2011, 13:41:47 | Сообщение # 75 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| FatalBlade, Ладно я вижу у тебя проблемы с жассом может тузик или я сделаем потом наработки.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|