Сейчас 17:38:54 Понедельник, 25 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Как из одной функции перенести локалки в другую
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
Блокировки:
Опечатки потому что писал с телефона :)
 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz