Как из одной функции перенести локалки в другую
|
|
Kartoha | Дата: Воскресенье, 09 Января 2011, 12:15:28 | Сообщение # 1 |
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
| Вот к примеру у меня есть код Code function Explode_Damage takes nothing returns nothing <как здесь использовать локальную r которая объявлена в функции, вызывающей эту?> endfunction
... local real r call ForGroupBJ( udg_enemyes, function Explode_Damage ) ...
|
|
|
|
lawson | Дата: Воскресенье, 09 Января 2011, 12:17:24 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Ни где никогда не видел такое.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Manko_O | Дата: Воскресенье, 09 Января 2011, 12:18:30 | Сообщение # 3 |
7 уровень
Группа: Проверенные
Сообщений: 296
Награды: 0
Репутация: 23
Блокировки:
| Kartoha, На хгм поищи статью Хеш - таблицы.
|
|
|
|
Kartoha | Дата: Воскресенье, 09 Января 2011, 12:18:59 | Сообщение # 4 |
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
| lawson, если все кто не знают здесь отпишутся.... В доте есть такое, через хандл вроде как-то можно, или может быть через хеш таблицы, у меня только догадки, хотелось бы узнать по конкретней.
Сообщение отредактировал Kartoha - Воскресенье, 09 Января 2011, 12:19:28 |
|
|
|
lawson | Дата: Воскресенье, 09 Января 2011, 12:21:13 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Я это сказал потому что подумал может ты это гдето видел или догадываешься как это сделать.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Dreii | Дата: Воскресенье, 09 Января 2011, 12:22:06 | Сообщение # 6 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Kartoha, юзай хеш Добавлено (09-01-2011, 12:22) --------------------------------------------- Kartoha, Code function Trig_Revive_Hero_Taimer takes nothing returns nothing local timer t=GetExpiredTimer() local integer ID=GetHandleId(t) local unit u=LoadUnitHandle(udg_Hash,ID,0) local integer i=LoadInteger(udg_Hash,ID,1) local timerdialog w=LoadTimerDialogHandle(udg_Hash,ID,2) local location loc=GetStartLocationLoc(GetPlayerStartLocation(GetOwningPlayer(u))) call ReviveHeroLoc(u,loc,true ) if (GetLocalPlayer()==GetOwningPlayer(u)) then call PanCameraToTimed(GetUnitX(u),GetUnitY(u),0.60) endif call PauseTimer(t) call DestroyTimer(t) call DestroyTimerDialog(w) call RemoveLocation(loc) call FlushChildHashtable(udg_Hash,ID) set t=null set u=null set loc=null endfunction function Trig_Revive_Hero_Actions takes nothing returns nothing local timer t=CreateTimer() local integer ID=GetHandleId(t) local timerdialog w if IsUnitType(GetTriggerUnit(),UNIT_TYPE_HERO)==true then set w=CreateTimerDialog(t) call TimerDialogSetTitle(w,GetPlayerName(GetOwningPlayer(GetTriggerUnit()))) call TimerDialogDisplay(w,true) if (GetLocalPlayer()==GetOwningPlayer(GetTriggerUnit())) then call TimerDialogDisplay(w,true) endif call SaveUnitHandle(udg_Hash, ID,0,GetTriggerUnit()) call SaveInteger(udg_Hash, ID,1,GetHeroLevel(GetTriggerUnit()) * 5 ) call SaveTimerDialogHandle(udg_Hash,ID,2,w) call TimerStart(t, GetHeroLevel(GetTriggerUnit())*5.,true,function Trig_Revive_Hero_Taimer) set t=null endif endfunction //=========================================================================== function InitTrig_Revive_Hero takes nothing returns nothing local integer index=0 local trigger trig=CreateTrigger() loop call TriggerRegisterPlayerUnitEvent(trig,Player(index),EVENT_PLAYER_UNIT_DEATH,null)
set index=index + 1 exitwhen index==15 endloop call TriggerAddAction(trig,function Trig_Revive_Hero_Actions) set trig=null endfunction премер работы с хешем
|
|
|
|
Manko_O | Дата: Воскресенье, 09 Января 2011, 12:22:35 | Сообщение # 7 |
7 уровень
Группа: Проверенные
Сообщений: 296
Награды: 0
Репутация: 23
Блокировки:
| Kartoha, Скажи что должно быть в твоём тригере. Я тебе зделаю пример. Посмотриш.
|
|
|
|
Kartoha | Дата: Воскресенье, 09 Января 2011, 12:23:15 | Сообщение # 8 |
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
| Dreii, вопрос как рас в том, как юзать хеш для этого, если бы я знал, не создавал бы тему.
|
|
|
|
Dreii | Дата: Воскресенье, 09 Января 2011, 12:23:52 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Kartoha, Хеш
|
|
|
|
Kartoha | Дата: Воскресенье, 09 Января 2011, 12:27:27 | Сообщение # 10 |
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
| Quote (Manko_O) Скажи что должно быть в твоём тригере. Я тебе зделаю пример. Посмотриш. Manko_O, в моем триггере объявляется точка, потом для определенной группы юнитов вызывается функция, в которой исходя из удаленности выбранного юнита от точки объявленной в первой функции, наносится урон. Знаю, это легко можно сделать через глабалку. Но у меня много подобных случаев, поэтому если можно обойтись без глобалок, хочу знать как.
|
|
|
|
Manko_O | Дата: Воскресенье, 09 Января 2011, 12:31:16 | Сообщение # 11 |
7 уровень
Группа: Проверенные
Сообщений: 296
Награды: 0
Репутация: 23
Блокировки:
| Kartoha, По проще можно? Из твоего я мало что понял Обьястни что ты хочеш зделать.
|
|
|
|
Kartoha | Дата: Воскресенье, 09 Января 2011, 12:34:33 | Сообщение # 12 |
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
| Manko_O, я хочу нанести урон всем юнитам в группе по формуле (R-D)/R*Y где R это радиус спелла, D расстояние юнита до точки p, Y = 50 (к примеру); p - точка каста спелла.
|
|
|
|
rixt7956 | Дата: Воскресенье, 09 Января 2011, 13:40:59 | Сообщение # 13 |
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
| делай через цикл всё в одной функции Code local unit u // юнит который наносит урон local unit uu local group g=CreateGroup() loop set uu=FirstOfGroup(g) exitwhen uu==null //твои дейсвия call GroupRemoveUnit(uu,g) endloop call DestroyGroup(g) set u=null set g=null
Сообщение отредактировал rixt7956 - Воскресенье, 09 Января 2011, 20:16:03 |
|
|
|
Kartoha | Дата: Воскресенье, 09 Января 2011, 13:55:09 | Сообщение # 14 |
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
| rixt7956, ух ты! Классный цикл, я не знал про действие FirstGroup! Это же полностью убирает call ForGroupBJ с которыми я так мучился! Супер! Класс! Спасибо! Quote (rixt7956) call GroupRemoveUnit(u) тут опечатка, вместо u должно стоять uu?Добавлено (09-01-2011, 13:51) --------------------------------------------- А нет, я поспешил с выводами. set uu = FirstGroup(enemyes) - отсутствует название функции. Добавлено (09-01-2011, 13:55) --------------------------------------------- А у тебя FirstGroup работает?
|
|
|
|
Dreii | Дата: Воскресенье, 09 Января 2011, 13:55:58 | Сообщение # 15 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| Может быть FirstOfGroup
|
|
|
|
Kartoha | Дата: Воскресенье, 09 Января 2011, 13:58:57 | Сообщение # 16 |
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
| Dreii, да спасибо! Теперь работает. Еще одно Quote (rixt7956) call GroupRemoveUnit(u) Тут не указанна группа, из которой удаляется юнит. Но я исправил. rixt7956, хоть и с опечатками, но очень помог, огромное спасибо. Dreii, тебе тоже биг спс, но репу изменять не могу ближайщее время(
|
|
|
|
rixt7956 | Дата: Воскресенье, 09 Января 2011, 16:06:41 | Сообщение # 17 |
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
| Опечатки потому что писал с телефона
|
|
|
|