|
|
|
|
Помогите найти ошибку.
|
|
Srezi | Дата: Понедельник, 01 Октября 2012, 17:21:29 | Сообщение # 1 |
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
| Code globals group GROUP_BOSS=CreateGroup() unit BU endglobals Code function FB6act takes nothing returns nothing local group g = CreateGroup() local unit u = null local real an = LoadReal(udg_Hash,GetHandleId(GetExpiredTimer()),0) local integer i = LoadInteger(udg_Hash,GetHandleId(GetExpiredTimer()),1) local real x = LoadReal(udg_Hash,GetHandleId(GetExpiredTimer()),2) local real y = LoadReal(udg_Hash,GetHandleId(GetExpiredTimer()),3) if i < 20 then set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD) set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD) call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\Impale\\ImpaleMissTarget.mdl",x,y)) call GroupEnumUnitsInRange(g,x,y,150,null) loop set u=FirstOfGroup(g) if IsUnitEnemy(u, GetOwningPlayer(BU)) == true and GetUnitState(u,UNIT_STATE_LIFE) > 0 and IsUnitInGroup(u,GROUP_BOSS)==false then call GroupAddUnit(GROUP_BOSS,u) call UnitDamageTarget(BU, u,GetUnitState(u,UNIT_STATE_MAX_LIFE)*0.15, true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS) endif call GroupRemoveUnit(g,u) exitwhen u==null endloop call SaveInteger(udg_Hash,GetHandleId(GetExpiredTimer()),1,i+1) endif if i==20 then call GroupClear(GROUP_BOSS) call PauseTimer(GetExpiredTimer()) call DestroyTimer(GetExpiredTimer()) call FlushChildHashtable(udg_Hash,GetHandleId(GetExpiredTimer())) endif call DestroyGroup(g) set g = null set u = null endfunction
Code function FB6 takes unit cs,unit tr returns nothing local timer t = CreateTimer() set BU=cs call SaveReal(udg_Hash,GetHandleId(t),0,GetUnitFacing(cs)) call SaveInteger(udg_Hash,GetHandleId(t),1,1) call SaveReal(udg_Hash,GetHandleId(t),2,GetUnitX(cs)) call SaveReal(udg_Hash,GetHandleId(t),3,GetUnitY(cs)) call TimerStart(t,0.05,true,function FB6act) set t = null endfunction
Вот "Пронзающая смерть" сделана триггерно. Но почему то не работает, точнее не создется эффект в нужной точке. Если не трудно, помогите найти ошибку. Может я где-то ошибся. Заранее спасибо
Нет места чести на войне, Враг церемониться не будет, Убей его любым путём, Ведь победителей не судят.
Сообщение отредактировал Srezi - Понедельник, 01 Октября 2012, 17:29:05 |
|
|
|
[SeKtOR] | Дата: Понедельник, 01 Октября 2012, 17:47:23 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
| Code if IsUnitEnemy(u, GetOwningPlayer(BU)) == true and GetUnitState(u,UNIT_STATE_LIFE) > 0 and IsUnitInGroup(u,GROUP_BOSS)==false then Лучше на: Code if IsUnitEnemy(u, GetOwningPlayer(BU)) and GetWidgetLife(u) > .405 and not IsUnitInGroup(u,GROUP_BOSS) then
Сообщение отредактировал [SeKtOR] - Понедельник, 01 Октября 2012, 17:47:38 |
|
|
|
Srezi | Дата: Понедельник, 01 Октября 2012, 17:49:04 | Сообщение # 3 |
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
| Quote (|SeKtOR|) Codeif IsUnitEnemy(u, GetOwningPlayer(BU)) == true and GetUnitState(u,UNIT_STATE_LIFE) > 0 and IsUnitInGroup(u,GROUP_BOSS)==false then Лучше на: Codeif IsUnitEnemy(u, GetOwningPlayer(BU)) and GetWidgetLife(u) > .405 and not IsUnitInGroup(u,GROUP_BOSS) then
Это элементы оптимизации, а не ошибка. Ищи дальше
Нет места чести на войне, Враг церемониться не будет, Убей его любым путём, Ведь победителей не судят.
Сообщение отредактировал Srezi - Понедельник, 01 Октября 2012, 17:52:48 |
|
|
|
[DS] | Дата: Понедельник, 01 Октября 2012, 17:52:54 | Сообщение # 4 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| угол фейса не сохраняй, а там же находи и ставь, и все ок будет
|
|
|
|
Srezi | Дата: Понедельник, 01 Октября 2012, 17:56:25 | Сообщение # 5 |
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
| Quote (|DS|) угол фейса не сохраняй, а там же находи и ставь, и все ок будет
Во время применения абилки босс вертиться, поэтому угол будет меняться. Вот и сохранил
Нет места чести на войне, Враг церемониться не будет, Убей его любым путём, Ведь победителей не судят.
|
|
|
|
[DS] | Дата: Понедельник, 01 Октября 2012, 18:00:27 | Сообщение # 6 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| я тоже с этим сталкивался, не будет менятся угол
|
|
|
|
SirNikolas | Дата: Понедельник, 01 Октября 2012, 18:01:17 | Сообщение # 7 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Code set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD) set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD) Не плюсовать надо, а задавать. Либо плюсовать без учета значения i.Добавлено (01 Октября 2012, 18:01:17) --------------------------------------------- А по-хорошему, код нуждается в оптимизации.
|
|
|
|
[DS] | Дата: Понедельник, 01 Октября 2012, 18:01:42 | Сообщение # 8 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| или..стоп, кажись я совсем по-другому делал спеллы
|
|
|
|
Srezi | Дата: Понедельник, 01 Октября 2012, 18:02:33 | Сообщение # 9 |
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
| Quote (SirNikolas) set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD) set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD)Не плюсовать надо, а задавать. Либо плюсовать без учета значения i.Добавлено (01 Октября 2012, 18:01:17)---------------------------------------------А по-хорошему, код нуждается в оптимизации.
Для начало его нужно написать, потом уже я буду его оптимизировать.
Нет места чести на войне, Враг церемониться не будет, Убей его любым путём, Ведь победителей не судят.
|
|
|
|
SirNikolas | Дата: Понедельник, 01 Октября 2012, 18:04:03 | Сообщение # 10 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (SirNikolas) set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD) set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD) Так расстояние между эффектами будет увеличиваться в геометрической прогрессии, а не в арифметической.
|
|
|
|
Srezi | Дата: Понедельник, 01 Октября 2012, 18:05:24 | Сообщение # 11 |
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
| Ну и что тогда делать, подскажи
Нет места чести на войне, Враг церемониться не будет, Убей его любым путём, Ведь победителей не судят.
|
|
|
|
[DS] | Дата: Понедельник, 01 Октября 2012, 18:07:33 | Сообщение # 12 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| >Не плюсовать надо, а задавать.
|
|
|
|
[SeKtOR] | Дата: Понедельник, 01 Октября 2012, 18:09:47 | Сообщение # 13 |
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
| Я незнаю, что я нашайтанил, но поменяв 40 на 250, на мой взгляд одинаковое расстояние между "шипами" стало(в сравнение с оригиналом)
|
|
|
|
Srezi | Дата: Понедельник, 01 Октября 2012, 18:21:39 | Сообщение # 14 |
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
| Quote (|DS|) >Не плюсовать надо, а задавать.
Подробнее.
Нет места чести на войне, Враг церемониться не будет, Убей его любым путём, Ведь победителей не судят.
|
|
|
|
SirNikolas | Дата: Понедельник, 01 Октября 2012, 18:33:27 | Сообщение # 15 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (SirNikolas) set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD) set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD) Добавлено (01 Октября 2012, 18:33:27) ---------------------------------------------
Quote (SirNikolas) Либо плюсовать без учета значения i. Quote (SirNikolas) set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD) set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD)
|
|
|
|
Srezi | Дата: Понедельник, 01 Октября 2012, 18:36:51 | Сообщение # 16 |
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
| Quote (SirNikolas) set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD) set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD)Добавлено (01 Октября 2012, 18:33:27)---------------------------------------------Quote (SirNikolas)Либо плюсовать без учета значения i.Quote (SirNikolas)set x=x+(40*I2R(i))*Cos(an*bj_DEGTORAD) set y=y+(40*I2R(i))*Sin(an*bj_DEGTORAD)
Это же не "Цикл" , это таймер. И значения x,y. Не обновляются. Они сохранены и всегда одинаковые, следовательно нужно делать вот так >
x=x+число*Cos(угол*бж) y=y+число*Sin(угол*бж)
Нет места чести на войне, Враг церемониться не будет, Убей его любым путём, Ведь победителей не судят.
|
|
|
|
[DS] | Дата: Понедельник, 01 Октября 2012, 18:39:49 | Сообщение # 17 |
9 уровень
Группа: Проверенные
Сообщений: 1116
Награды: 0
Репутация: 527
Блокировки:
| >Это же не "Цикл" , это таймер. И значения x,y. Не обновляются 40*i? i+i?
|
|
|
|
Srezi | Дата: Понедельник, 01 Октября 2012, 18:41:58 | Сообщение # 18 |
7 уровень
Группа: Проверенные
Сообщений: 414
Награды: 0
Репутация: 116
Блокировки:
| С триггером все нормально было.
Просто я не указал переменную BU и cs, из-за этого была ошибка.
Всем спасибо.
Нет места чести на войне, Враг церемониться не будет, Убей его любым путём, Ведь победителей не судят.
Сообщение отредактировал Srezi - Понедельник, 01 Октября 2012, 18:49:38 |
|
|
|
|
|
|
|
|
|
|