[Вопрос] После юза скилла пишет, с режимом отладки
[HoBu4oK] Дата: Суббота, 03 Ноября 2012, 15:28:02 | Сообщение # 1
4 уровень
Группа: Проверенные
Сообщений: 92
Награды:
0
Репутация:
9
Блокировки:
Ty3uK Дата: Суббота, 03 Ноября 2012, 16:59:37 | Сообщение # 2
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
vJASS повторный дестрой структуры, которая уже была уничтожена
[HoBu4oK] Дата: Суббота, 03 Ноября 2012, 17:11:52 | Сообщение # 3
4 уровень
Группа: Проверенные
Сообщений: 92
Награды:
0
Репутация:
9
Блокировки:
Ty3uK , а это нечего? На карту не как не отразится? Или что?
Ty3uK Дата: Суббота, 03 Ноября 2012, 18:03:35 | Сообщение # 4
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
[HoBu4oK] , дай код. Он говорит тебе, что ты вызываешь деструктор для уже уничтоженного экземпляра структуры. С учетом того, что в варике каждая структура - это интегер, а структуры одного вида - массив интегеров, то он говорит тебе, что там УЖЕ находится 0 (при уничтожении структура приравнивается к 0). Это ничего, но он будет парить тебе мозг даже при отключенном дебаге (вроде как), а это некрасиво в игре выглядит
[HoBu4oK] Дата: Суббота, 03 Ноября 2012, 18:38:11 | Сообщение # 5
4 уровень
Группа: Проверенные
Сообщений: 92
Награды:
0
Репутация:
9
Блокировки:
Ty3uK , при откл. дебаге он нечего не пишет
Code
scope DeathGrip initializer Init { define { private AbilId='A006' private mindist=40000. private BuffId='B001' private LightningModel="AFOD" private SpellDumId='A007' private DumId='h00A' private OrdId=852075 private Red=.4 private Blue=1 private Green=.15 } private struct Data { unit caster unit target lightning light } private boolean DG_COND() { return GetSpellAbilityId() == AbilId } private boolean DG_BUFF() { return GetUnitAbilityLevel(GetTriggerUnit(),BuffId)>0 } private void DG_ATTACK() { trigger trig=GetTriggeringTrigger() Data d=LoadInteger(Hash,GetHandleId(trig),0) if GetWidgetLife(d.caster)>.405 and DG_BUFF>0 { DisableTrigger(trig) IssueTargetOrderById(d.target,851983,d.caster) EnableTrigger(trig) else TriggerClearActions(trig) DestroyTrigger(trig) } trig=null } private void DG_TIME() { timer t=GetExpiredTimer() Data d=LoadInteger(Hash,GetHandleId(t),0) real x1=GetWidgetX(d.caster) real x2=GetWidgetX(d.target) real y1=GetWidgetY(d.caster) real y2=GetWidgetY(d.target) real angle=Atan2(y2-y1,x2-x1) if (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)>mindist { SetUnitPathing(d.target,false) PauseUnit(d.caster,true) SetUnitX(d.target,x2-40*Cos(angle)) SetUnitY(d.target,y2-40*Sin(angle)) MoveLightning(d.light,true,x1,y1,x2,y2) else unit f=CreateUnit(GetOwningPlayer(d.caster),DumId,x2,y2,0.) trigger trig=CreateTrigger() SetUnitPathing(d.target,true) PauseUnit(d.caster,false) UnitAddAbility(f,SpellDumId) SetUnitAbilityLevel(f,SpellDumId,GetUnitAbilityLevel(d.caster,AbilId)) IssueTargetOrderById(f,OrdId,d.target) IssueTargetOrderById(d.target,851983,d.caster) PauseTimer(t) DestroyTimer(t) DestroyLightning(d.light) FlushChildHashtable(Hash,GetHandleId(t)) SaveInteger(Hash,GetHandleId(trig),0,d) TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER) TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER) TriggerRegisterAnyUnitEventBJ(trig,EVENT_PLAYER_UNIT_ISSUED_ORDER) TriggerAddCondition(trig,Condition(function DG_BUFF)) TriggerAddAction(trig,function DG_ATTACK) } t=null d.destroy() } private void DG_ACT() { Data d=Data.create() d.caster=GetTriggerUnit() d.target=GetSpellTargetUnit() d.light=AddLightning(LightningModel,true,GetWidgetX(d.caster),GetWidgetY(d.caster),GetWidgetX(d.target),GetWidgetY(d.target)) SetLightningColor(d.light,Red,Green,Blue,1) timer t=CreateTimer() SaveInteger(Hash,GetHandleId(t),0,d) TimerStart(t,.05,true,function DG_TIME) t=null } private void Init() { gg_trg_Death_Grip=CreateTrigger() TriggerRegisterAnyUnitEventBJ(gg_trg_Death_Grip,EVENT_PLAYER_UNIT_SPELL_EFFECT) TriggerAddCondition(gg_trg_Death_Grip,Condition(function DG_COND)) TriggerAddAction(gg_trg_Death_Grip,function DG_ACT) } }
Ty3uK Дата: Суббота, 03 Ноября 2012, 18:53:54 | Сообщение # 6
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
d.destroy вынеси в то место, где у тебя логически спелл заканчивается. Иначе ты уже не будешь получать ни кастера, ни таргета, ни молнию после первого прохода таймера.Добавлено (03 Ноября 2012, 18:53:54) --------------------------------------------- Перенеси туда, где таймер уничтожаешь. В самый конец, перед скобкой. И твой код можно нехило оптимизировать. Я уже начал. Заканчивать?
[HoBu4oK] Дата: Суббота, 03 Ноября 2012, 18:59:12 | Сообщение # 7
4 уровень
Группа: Проверенные
Сообщений: 92
Награды:
0
Репутация:
9
Блокировки:
Ty3uK , да я сам разобрался послеQuote (Ty3uK )
где у тебя логически спелл заканчивается
спасибо! Добавлено (03 Ноября 2012, 18:59:12) --------------------------------------------- Ty3uK , код по сути не мой, а дрейки. Ну давай посмотрим что получится
Сообщение отредактировал [HoBu4oK] - Суббота, 03 Ноября 2012, 18:59:32
Ty3uK Дата: Суббота, 03 Ноября 2012, 19:02:52 | Сообщение # 8
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
Тогда опиши, что он должен делать. Немного не понимаю
[HoBu4oK] Дата: Суббота, 03 Ноября 2012, 19:05:11 | Сообщение # 9
4 уровень
Группа: Проверенные
Сообщений: 92
Награды:
0
Репутация:
9
Блокировки:
Сылка на спел [hive] , что-то вроде этого, только на Jass версия.
Ty3uK Дата: Суббота, 03 Ноября 2012, 19:05:53 | Сообщение # 10
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
Нет, вру, дестроить надо там, где ты очищаешь действия у триггера и уничтожаешь его, иначе при каждом его срабатывании ты не будешь получать экземпляр структуры.
[HoBu4oK] Дата: Суббота, 03 Ноября 2012, 19:08:47 | Сообщение # 11
4 уровень
Группа: Проверенные
Сообщений: 92
Награды:
0
Репутация:
9
Блокировки:
Ty3uK , ух не шарю, но вроде понял где дестроить)
Ty3uK Дата: Суббота, 03 Ноября 2012, 19:12:21 | Сообщение # 12
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
Так, ну давай я угадаю. Спелл притягивает юнита. Если у нас расстояние меньше нужного, то мы удаляем молнию, добавляем спелл цели (и юзаем его. нафига? что за спелл?) и зачем-то пускаем юнита, ловящий атаки от комманд. Так?Добавлено (03 Ноября 2012, 19:12:21) ---------------------------------------------[HoBu4oK] , нет, ну Дрейка у нас любитель vJASS'ить для незнающих vJASS. Возьми и напиши его сам, он же не сложный. На обычном JASS2/cJASS, как ты до этого писал
[HoBu4oK] Дата: Суббота, 03 Ноября 2012, 19:26:47 | Сообщение # 13
4 уровень
Группа: Проверенные
Сообщений: 92
Награды:
0
Репутация:
9
Блокировки:
Ty3uK , ок, да типо сначала молния тянет к себе, потом агр акса)
Ty3uK Дата: Суббота, 03 Ноября 2012, 19:40:51 | Сообщение # 14
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
[HoBu4oK] , сделай агр акса отдельным спеллом. Это будет проще, ибо триггер в триггере - это не ок. Ну в плане феншуйности, да и логику ломает.
[HoBu4oK] Дата: Суббота, 03 Ноября 2012, 19:54:05 | Сообщение # 15
4 уровень
Группа: Проверенные
Сообщений: 92
Награды:
0
Репутация:
9
Блокировки:
Не моё, у меня так переменные разбросаны, что я иногда пол кода переписываю дабы найти ошибку\переменную.
Ty3uK Дата: Суббота, 03 Ноября 2012, 19:55:27 | Сообщение # 16
Группа: Ветераны
Сообщений: 6125
Награды:
2
Репутация:
1617
Блокировки:
Вот это и плохо. Читай про макросы и дефайны, учи vJASS и феншуйность сама к тебе придет