 |
|
 |
|
|
GetLocalPlayer() и десонхранизация
|
|
| Десантник | Дата: Суббота, 06 Августа 2011, 18:56:25 | Сообщение # 1 |
|
U.N.R.E.A.L.
Группа: Проверенные
Сообщений: 1348
Награды: 2
Репутация: 635
Блокировки: 
| Кароче, я через кс использовал эту функцию, но когда я направлял способность на цель, то игрока выкидывало (понятно, что из-за десинхронизации). Объясните, в чём здесь проблема?
|
| |
|
|
| SirNikolas | Дата: Суббота, 06 Августа 2011, 19:10:03 | Сообщение # 2 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки: 
| Десантник, перепиши триггер текстом, либо конвертируй в код. У меня изображение не грузится.
|
| |
|
|
| Десантник | Дата: Суббота, 06 Августа 2011, 19:18:31 | Сообщение # 3 |
|
U.N.R.E.A.L.
Группа: Проверенные
Сообщений: 1348
Награды: 2
Репутация: 635
Блокировки: 
| Code function Trig_Blind_Photon_Conditions takes nothing returns boolean if ( not ( GetSpellAbilityId() == 'A01T' ) ) then return false endif return true endfunction
function Trig_Blind_Photon_Actions takes nothing returns nothing local player zzz = GetOwningPlayer(GetSpellTargetUnit()) if GetLocalPlayer() == zzz then call CinematicFadeBJ( bj_CINEFADETYPE_FADEOUT, 0.50, "ReplaceableTextures\\CameraMasks\\White_mask.blp", 100.00, 100.00, 100.00, 0 ) call TriggerSleepAction( 6.00 ) call CinematicFadeBJ( bj_CINEFADETYPE_FADEIN, 5.00, "ReplaceableTextures\\CameraMasks\\White_mask.blp", 100.00, 100.00, 100.00, 0 ) endif set zzz = null endfunction
//=========================================================================== function InitTrig_Blind_Photon takes nothing returns nothing set gg_trg_Blind_Photon = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Blind_Photon, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Blind_Photon, Condition( function Trig_Blind_Photon_Conditions ) ) call TriggerAddAction( gg_trg_Blind_Photon, function Trig_Blind_Photon_Actions ) endfunction
|
| |
|
|
| SirNikolas | Дата: Суббота, 06 Августа 2011, 20:08:08 | Сообщение # 4 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки: 
| Прикольное заклинание. Мне кажется, проблема в TriggerSleepAction(...). Сейчас попробую переписать. Добавлено (06-08-2011, 20:06) ---------------------------------------------
Code function Trig_Blind_Photon_Conditions takes nothing returns boolean //raw-код способности return GetSpellAbilityId() == 'A01T' endfunction
function Trig_Blind_Photon_Timer takes nothing returns nothing local handle h = GetExpiredTimer() local integer i = 0 loop exitwhen h == udg_BlindPhoton_Timer[i] set i = i + 1 endloop set udg_BlindPhoton_Boolean[i] = not udg_BlindPhoton_Boolean[i] if udg_BlindPhoton_Boolean[i] then if GetLocalPlayer() == Player(i) then call EnableUserUI(false) //Текстура call SetCineFilterTexture("ReplaceableTextures\\CameraMasks\\White_mask.blp") call SetCineFilterBlendMode(BLEND_MODE_BLEND) call SetCineFilterTexMapFlags(TEXMAP_FLAG_NONE) call SetCineFilterStartUV(0, 0, 1, 1) call SetCineFilterEndUV(0, 0, 1, 1) //Цвет и прозрачность call SetCineFilterStartColor(255, 255, 255, 255) call SetCineFilterEndColor(255, 255, 255, 0) //Время ввода изображения call SetCineFilterDuration(5.) call DisplayCineFilter(true) endif //Время ввода изображения call TimerStart(udg_BlindPhoton_Timer[i], 5., false, function Trig_Blind_Photon_Timer) elseif GetLocalPlayer() == Player(i) then call DisplayCineFilter(false) call EnableUserUI(true) endif set h = null endfunction
function Trig_Blind_Photon_Actions takes nothing returns nothing local player p = GetOwningPlayer(GetSpellTargetUnit()) local integer i = GetPlayerId(p) if TimerGetRemaining(udg_BlindPhoton_Timer[i]) <= .0 then //На всякий случай лучше сделать вложенные условия if GetLocalPlayer() == p then call EnableUserUI(false) //Текстура call SetCineFilterTexture("ReplaceableTextures\\CameraMasks\\White_mask.blp") call SetCineFilterBlendMode(BLEND_MODE_BLEND) call SetCineFilterTexMapFlags(TEXMAP_FLAG_NONE) call SetCineFilterStartUV(0, 0, 1, 1) call SetCineFilterEndUV(0, 0, 1, 1) //Цвет и прозрачность call SetCineFilterStartColor(255, 255, 255, 0) call SetCineFilterEndColor(255, 255, 255, 255) //Время затемнения call SetCineFilterDuration(.5) call DisplayCineFilter(true) endif endif //Время действия call TimerStart(udg_BlindPhoton_Timer[i], 6., false, function Trig_Blind_Photon_Timer) set udg_BlindPhoton_Boolean[i] = false//На всякий случай set p = null endfunction
//=========================================================================== function InitTrig_Blind_Photon takes nothing returns nothing local trigger trig = CreateTrigger() local integer i = 0 loop call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) exitwhen i == 15 set i = i + 1 endloop call TriggerAddCondition(trig, Filter(function Trig_Blind_Photon_Conditions)) call TriggerAddAction(trig, function Trig_Blind_Photon_Actions) set trig = null endfunction Теперь, по идее, все должно быть нормально. Синтаксических ошибок нет, но в игре не проверял. Нужно создать массив таймеров BlindPhoton_Timer и массив логических BlindPhoton_Boolean, причем у таймеров размер массива обязательно должен быть равен 11. Дальше, думаю, разберешься, комментарии в коде есть.Добавлено (06-08-2011, 20:08) --------------------------------------------- И еще, могут быть проблемы при использовании кинематографических масок во время действия заклинания. Само себе оно не мешает.
|
| |
|
|
| FkoFF | Дата: Суббота, 06 Августа 2011, 20:12:24 | Сообщение # 5 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки: 
| синематик фильтры используют таймеры, которые создают. Думай дальше сам что из этого исходит.
|
| |
|
|
| Десантник | Дата: Суббота, 06 Августа 2011, 20:12:46 | Сообщение # 6 |
|
U.N.R.E.A.L.
Группа: Проверенные
Сообщений: 1348
Награды: 2
Репутация: 635
Блокировки: 
| SirNikolas, ну, спасибо . Надеюсь, будет работать. Тогда темпа пусть ещё повисит, мб кто-то ещё что-нибудь предложит.
|
| |
|
|
| SirNikolas | Дата: Суббота, 06 Августа 2011, 20:14:08 | Сообщение # 7 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки: 
| FkoFF, я это заметил, когда раскрывал их. У меня используются собственные таймеры, которые висят всю игру.
|
| |
|
|
| Десантник | Дата: Суббота, 06 Августа 2011, 20:16:09 | Сообщение # 8 |
|
U.N.R.E.A.L.
Группа: Проверенные
Сообщений: 1348
Награды: 2
Репутация: 635
Блокировки: 
| Quote (FkoFF) синематик фильтры используют таймеры, которые создают. Думай дальше сам что из этого исходит. ну да, 100% будет расхождение. Не знал, 2 раз всего юзал функцию GetLocalPlayer(). Тем более что эту наработку мне Картоха сделал
|
| |
|
|
|
|
 |
|
 |
|
|