LostCoast
offline
Опыт:
2,633Активность: |
Цитата:
помоему я дал обьяснение своей насмешки и задал вопрос, так как мог быть не прав. LostCoast добавил: Вот тебе пример на хеше: » раскрыть Код:
писал в блокноте так что могут быть опечаткаи, а так вот тебе пример движения юнита с помощью хеша. LostCoast добавил: Чуть не забыл, если нужно обьяснение udg_Table - это глобалка хеш-таблица,которую ты должен иниц. при старте игры |
|
15.01.2010, 14:51 | #21
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
за пример большое спасибо, так разобраться гораздо легче
local real XX = загружаем значение из действия только 1 вопрос: называть одинаковыми локалками можно(XX и XX)? |
15.01.2010, 15:01 | #22
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FaB0SS
offline
Опыт:
2,504Активность: |
|
15.01.2010, 15:08 | #23
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
LostCoast
offline
Опыт:
2,633Активность: |
AlexKARASb, дам совет, скилы из опен доты очень сильно сбалансированы и там много лишних строк, можно делать гораздо проще, да кстате не забывай удалять записи из хеш-таблицы, точно не помню как назыв ф-ия вроде FlushChildHashtable(udg_Table,GetHandleId(timer)
Советую почитать : http://xgm.guru/forum/showthread.php?t=30742 |
15.01.2010, 15:18 | #24
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
LostCoast, знаю но для моей динамической карты, основанной исключительно на способностях героев баланс и многократное использование их за малый промежуток времени ой как нужны
вот парочка вопросов: 1)почему в коде фрога не было обнуления переменных; или это потому что они обнуляются, когда очистишь таблицу? 2)SetUnitPathing - обьясните что такое пасинг? статью сейчас прочту повнимательнее, химикс уже кидал, но читал я не внимательно =\ |
15.01.2010, 15:29 | #25
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
XOR
offline
Опыт:
38,159Активность: |
1."внешние"(не из хэша) надо чистить отдельно структуры рулят
|
15.01.2010, 15:34 | #26
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
LostCoast
offline
Опыт:
2,633Активность: |
Цитата:
для тех кто vjass знает))) |
|
15.01.2010, 15:45 | #27
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
с условным оператором пару вопросов
мне надо if растояние от точки каста до дамми больше 3000 then call kill unit, flushhash else ?? if DistanceBetweenPoints (CastLoc, GetUnitLoc(Dummy)) > 3000 then call KillUnit(Dummy) call FlushChildHashtable(udg_Hash, GetHandleId(Move)) else endif правильно ли? кажется что нет =\ |
15.01.2010, 16:25 | #28
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FaB0SS
offline
Опыт:
2,504Активность: |
можно без else |
15.01.2010, 16:28 | #29
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
LostCoast
offline
Опыт:
2,633Активность: |
AlexKARASb, так начнём с того что тебе придётся сохранить изначальное положение дамми,а так в принципе правильно, да надо будет ещё таймер уничтожать
call PauseTimer(timer) call DestroyTimer(timer) set t = null(для оптимизации) |
15.01.2010, 16:32 | #30
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
XOR
offline
Опыт:
38,159Активность: |
И локацию.(RemoveLocation) И вообще не надо их использовать, все функции кроме GetLocationZ есть и на координатах. А переделать DistanceBetweenPoints и т.д. 2 секунды и выгода в скорости |
15.01.2010, 16:48 | #31
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
вроде постарался все учесть что вы мне обьяснили, но в чем то ошибка обьясните Отредактировано alexkill, 15.01.2010 в 22:40. |
15.01.2010, 22:22 | #32
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
9thNerZul
forum/warcraft3
offline
Опыт:
4,869Активность: |
AlexKARASb:
Вместо XX,YY юзай GetUnitX(dummy),GetUnitY(dummy) просто те переменные берутся из кэша) |
15.01.2010, 22:29 | #33
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
LostCoast
offline
Опыт:
2,633Активность: |
ну чтож начну:
1)call RemoveLocation(CastLoc) - ты обнулил точку и потом пытаешься её сохранить как реальную в хеше???? --call SaveReal(udg_Hash, i, 4, CastLoc) 2)нету endif во второй ф-ии думаю этого хватит пока. Эх не люблю дотерские скилы и их написание, вот тебе рабочий код(вставишь потестишь),начни с простого, потом будешь балансировать и усложнять коды. » раскрыть Код:
|
15.01.2010, 23:52 | #34
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
понял спасибо тему можно закрыть
|
16.01.2010, 00:30 | #35
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
эх тему так быстро закрыли с корнем
черд =\ только вопрос возник if SquareRoot((XN-XC)*(XN-XC)+(YN-YC)*(YN-YC))>3000 в чем ошибся компилятор только на нем ошибку держит если все таки не if то может что-то не так сделал? вот код который уже третий день рожаю » раскрыть function Trig_JTKaton_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'A001' endfunction function JTKTimerMove takes nothing returns nothing local timer t=GetExpiredTimer() local integer i = GetHandleId(t) local unit Dummy = LoadUnitHandle(udg_Hash,i,2) local real XC = LoadReal(udg_Hash,i,0) local real YC = LoadReal(udg_Hash,i,1) local real Angle = LoadReal(udg_Hash,i,3) local real XN = GetUnitX(Dummy) local real YN = GetUnitY(Dummy) call SetUnitX(Dummy,(GetUnitX(Dummy)+30*Cos(Angle))) call SetUnitY(Dummy,(GetUnitY(Dummy)+30*Sin(Angle))) call SaveReal(udg_Hash,i,4,XN) call SaveReal(udg_Hash,i,5,YN) if SquareRoot((XN-XC)*(XN-XC)+(YN-YC)*(YN-YC))>3000 then call KillUnit(Dummy) call FlushChildHashtable(udg_Hash, GetHandleId(t)) call PauseTimer(t) call DestroyTimer(t) set t = null //Удаляем записи таймера endfunction function Trig_JTKaton_Actions takes nothing returns nothing local timer t=CreateTimer() local unit Caster=GetTriggerUnit() local real XC=GetUnitX(Caster) local real YC=GetUnitY(Caster) local location CastLoc=GetSpellTargetLoc() local real XL=GetLocationX(CastLoc) local real YL=GetLocationY(CastLoc) local real Angle = Atan2(YL-YC,XL-XC) local integer i = GetHandleId(t) local unit Dummy=CreateUnit(GetOwningPlayer(Caster),'h001',XC,YC,Angle*bj_RADTODEG) call RemoveLocation(CastLoc) call SetUnitFacing(Dummy,Angle*bj_RADTODEG) call SetUnitPathing(Dummy,false) call SaveReal(udg_Hash,i,0,XC) call SaveReal(udg_Hash,i,1,YC) call SaveUnitHandle(udg_Hash,i,2,Dummy) call SaveReal(udg_Hash,i,3,Angle) call TimerStart(t,.03,true,function JTKTimerMove) endfunction //=========================================================================== function InitTrig_JTKaton takes nothing returns nothing set gg_trg_JTKaton = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_JTKaton, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_JTKaton, Condition( function Trig_JTKaton_Conditions ) ) call TriggerAddAction( gg_trg_JTKaton, function Trig_JTKaton_Actions ) endfunction |
16.01.2010, 22:25 | #36
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|