XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
Почти рабочий код
вот есть код, не для слабонервных
» сам код
//-----------------===================================-------------------------
function ReplaceAbility takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit u = LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local integer Abil1 = LoadInteger(udg_Hash, GetHandleId(t),1)
local integer Abil2 = LoadInteger(udg_Hash, GetHandleId(t),2)
    call UnitRemoveAbility(u, Abil2)
        call UnitAddAbility(u, Abil1)
    call DestroyTimer(t)
set t = null
endfunction

function CastBar takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local unit u = LoadUnitHandle(udg_Hash,GetHandleId(t),1)
    local real OnePerc = LoadReal(udg_Hash,GetHandleId(t),1)
    local real CastTime = LoadReal(udg_Hash,GetHandleId(t),2)
    local integer C = LoadInteger(udg_Hash, GetHandleId(t),1)
    local integer C1 = 1
//---------------------------------------------------------------
    call DisplayTextToForce( GetPlayersAll(), "CastBarDefine" )
        if C == 30 or IsUnitInGroup(u, udg_CastGroup) == false then
            call DestroyTimer(t)
            call FlushChildHashtable(udg_Hash,GetHandleId(t))
            call FlushChildHashtable(udg_Hash,GetHandleId(u))
            call DisplayTextToForce( GetPlayersAll(), "CastBarDestroy" )
             loop
                exitwhen C1 == 30
                call DestroyTextTag(LoadTextTagHandle(udg_Hash, GetHandleId(u),C1))
                set C1 = C1+1
            endloop
//---------------------------------------------------------------
             call FlushChildHashtable(udg_Hash,GetHandleId(t))
            call FlushChildHashtable(udg_Hash,GetHandleId(u))
//---------------------------------------------------------------
        else
            call SetTextTagColor(LoadTextTagHandle(udg_Hash,GetHandleId(u), C), 100, 100, 100, 100)
            set C = C+1
            call SaveInteger(udg_Hash, GetHandleId(t),1, C)
            call DisplayTextToForce( GetPlayersAll(), I2S(C) )
        endif
//---------------------------------------------------------------
    set t = null
    set u = null
endfunction

function CastProcess takes nothing returns nothing
local timer t = GetExpiredTimer()
local timer t2
local unit u = LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local real CastTime = LoadReal(udg_Hash,GetHandleId(t),1)
local integer C = 1
local integer Abil1 = LoadInteger(udg_Hash, GetHandleId(t),1)
local integer Abil2 = LoadInteger(udg_Hash, GetHandleId(t),2)
local integer CD = LoadInteger(udg_Hash, GetHandleId(t),3)
//---------------------------------------------------------------
call DisplayTextToForce( GetPlayersAll(), "CastProcessDefine" )
    if CastTime <= 0.00 then
        call DestroyTimer(t)
        call IssueImmediateOrder(u, "stop")
        call UnitRemoveAbility(u, Abil1)
        call UnitAddAbility(u, Abil2)
        set t2 = CreateTimer()
        call SaveInteger(udg_Hash, GetHandleId(t2),1, Abil1)
            call SaveInteger(udg_Hash, GetHandleId(t2),2, Abil2)
            call SaveUnitHandle(udg_Hash,GetHandleId(t2),1,u)
        call IssueTargetOrder( u, LoadStr(udg_Hash, GetHandleId(t),1), LoadUnitHandle(udg_Hash,GetHandleId(t),2))
        call TimerStart(t2, CD, false, function ReplaceAbility)
        call DisplayTextToForce( GetPlayersAll(), "EndCast, start ReplaceAbility")
        
        call FlushChildHashtable(udg_Hash,GetHandleId(t))
            call FlushChildHashtable(udg_Hash,GetHandleId(u))
//-------------------------------------------
        elseif IsUnitInGroup(u, udg_CastGroup) == false then
            call IssueImmediateOrder(u, "stop")
            call DestroyTimer(t)
            call DisplayTextToForce( GetPlayersAll(), "CastBreake" )
//---------------------------------------------------------------
        else
            set CastTime = CastTime -0.01
            call SaveReal(udg_Hash,GetHandleId(t),1,CastTime)
            call DisplayTextToForce( GetPlayersAll(), R2S(CastTime) )
    endif
//---------------------------------------------------------------
set t = null
set t2 = null
set u = null
endfunction

function CastInit takes unit u, real CastTime, integer Abil1, integer Abil2, real CD, unit uTarg, string Ord returns nothing
    local integer C = 1
    local real x = GetUnitX(u)-17
    local real z = GetUnitFlyHeight (u)
    local location Loc = Location(x,GetUnitY(u))
    local timer t = CreateTimer()
    local timer t2 = CreateTimer()
    local real OnePerc = CastTime/30
//---------------------------------------------------------------
    call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u)
    call SaveUnitHandle(udg_Hash,GetHandleId(t),2,uTarg)
    call SaveUnitHandle(udg_Hash,GetHandleId(t2),1,u)
    call SaveReal(udg_Hash,GetHandleId(t),1,CastTime)
    call SaveReal(udg_Hash,GetHandleId(t2),1,CastTime)
    call SaveReal(udg_Hash,GetHandleId(t2),1,OnePerc)
    call SaveInteger(udg_Hash, GetHandleId(t),1, Abil1)
    call SaveInteger(udg_Hash, GetHandleId(t),2, Abil2)
    call SaveInteger(udg_Hash, GetHandleId(t2),1, 1)
    call SaveReal(udg_Hash, GetHandleId(t),3, CD)
    call SaveStr(udg_Hash, GetHandleId(t),1, Ord)
//---------------------------------------------------------------
        loop
            exitwhen C == 30
            call SaveTextTagHandle(udg_Hash,GetHandleId(u),C,CreateTextTagLocBJ( "|", Loc, 0, 6.5, 100, 100, 100, 80 ))
            set x = x+4
            set C = C +1
            set Loc = Location(x,GetUnitY(u))
        endloop
        call TimerStart(t, 0.01, true, function CastProcess)
        call TimerStart(t2, OnePerc, true, function CastBar)
//---------------------------------------------------------------
        call RemoveLocation(Loc)
        set Loc = null
        set t = null
        set t2 = null
endfunction
пробую вживую. Начинаются артефакты такого типа
  1. Каст бар иногда не исчезает. Причем часто.
  2. Абилка не удаляется, нету приказа, не дается новая абилка.
я даже хз, мб что то упустил или накосячил, но не вижу где, мб вы увидите?
сообщения все ок показывают.
да я знаю что там локейшен, и бж тексттаг ><
Старый 28.04.2012, 21:22
Hanabishi
COOL STATUS
offline
Опыт: отключен
local unit u = LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local integer Abil1 = LoadInteger(udg_Hash, GetHandleId(t),1)
С одной ячейки загружаешь, да.
Hanabishi добавил:
Да там же дофига наложений.
Старый 28.04.2012, 21:26
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
Hanabishi:
local unit u = LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local integer Abil1 = LoadInteger(udg_Hash, GetHandleId(t),1)
С одной ячейки загружаешь, да.
Hanabishi добавил:
Да там же дофига наложений.
разве для кадого типа надо новую ячейку, типа
local unit u = LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local integer Abil1 = LoadInteger(udg_Hash, GetHandleId(t),2)
local integer Abil2 = LoadInteger(udg_Hash, GetHandleId(t),3)
так что ли?)...
Старый 28.04.2012, 21:30
Hanabishi
COOL STATUS
offline
Опыт: отключен
Hatsume_Hate, конечно.
Hanabishi добавил:
И сохранять, соответственно, тоже каждую в разные ячейки.
Старый 28.04.2012, 21:34
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
тогда почему такая конструкция работает?
» код
function BuffDuration takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local real Duration = LoadReal(udg_Hash,GetHandleId(t),1)
    local integer IdE = LoadInteger(udg_Hash,GetHandleId(t),1)
    local integer Value = LoadInteger(udg_Hash,GetHandleId(t),2)
    local integer Value2 = LoadInteger(udg_Hash,GetHandleId(t),3)
    local unit u = LoadUnitHandle(udg_Hash,GetHandleId(t),1)
    local boolean A = LoadBoolean(udg_Hash,GetHandleId(t),1)
    // ------------------------------
    set Duration = Duration - 1.00
    call SaveReal(udg_Hash,GetHandleId(t),1, Duration)
        if Duration == 0.00 or GetUnitState(u,UNIT_STATE_LIFE) <= 0.00 then //or UnitHasBuffBJ(u, 'B000') == false then
            call DestroyTimer(t)
            
                if IdE == 1 then
                    call SetUnitUserData( u, 0 )
                    call UnitRemoveBuffBJ('B000', u)
                endif
                if IdE == 2 and A then
                    call addPhysAttack(-Value,GetPlayerId(GetOwningPlayer(u)))
                    else
                    call SetUnitAbilityLevel( u, 'A00E', -Value2 )
                endif
            call FlushChildHashtable(udg_Hash,GetHandleId(t))
        endif
    // ------------------------------
    set t = null
    set u = null
endfunction
    
function Buff takes unit uTarg, real Duration, integer IdOfEffect, integer Value, integer Value2 returns nothing
    local timer t = CreateTimer()
    local boolean A = IsUnitType(uTarg, UNIT_TYPE_HERO)
    // ------------------------------
    call SaveReal(udg_Hash,GetHandleId(t),1,Duration)
    call SaveInteger(udg_Hash,GetHandleId(t),1,IdOfEffect)
    call SaveInteger(udg_Hash,GetHandleId(t),2,Value)
    call SaveInteger(udg_Hash,GetHandleId(t),3,Value2)
    call SaveBoolean(udg_Hash,GetHandleId(t),1,A)
    call SaveUnitHandle(udg_Hash,GetHandleId(t),1,uTarg)
        if IdOfEffect == 1 then
            call SetUnitUserData( uTarg, Value )
        endif
        if IdOfEffect == 2 and A then
            call addPhysAttack(Value,GetPlayerId(GetOwningPlayer(uTarg)))
            else
            call SetUnitAbilityLevel( uTarg, 'A00E', Value2 )
        endif
    call TimerStart(t, 1.00, true, function BuffDuration)
    // ------------------------------
    set t = null
endfunction
Старый 28.04.2012, 21:34
Hanabishi
COOL STATUS
offline
Опыт: отключен
Смотри в статье сразу в конце готовый код.
Hanabishi добавил:
тогда почему такая конструкция работает?
Я уже сказал, ты пересохраняешь одни и те же ячейки, и пытаешься из них же загрузить, естественно результат непредсказуемый.
Старый 28.04.2012, 21:36
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
Hanabishi:
Смотри в статье сразу в конце готовый код.
Hanabishi добавил:
тогда почему такая конструкция работает?
Я уже сказал, ты пересохраняешь одни и те же ячейки, и пытаешься из них же загрузить, естественно результат непредсказуемый.
но ведь при перезаписывании в функции баффов все идет хорошо ._.
Старый 28.04.2012, 21:39
Hanabishi
COOL STATUS
offline
Опыт: отключен
Каждую переменную - в отдельную ячейку. Иначе фейл.
Старый 28.04.2012, 21:41
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
» ничего не изменилось
//-----------------===================================-------------------------
function ReplaceAbility takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit u = LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local integer Abil1 = LoadInteger(udg_Hash, GetHandleId(t),2)
local integer Abil2 = LoadInteger(udg_Hash, GetHandleId(t),3)
    call UnitRemoveAbility(u, Abil2)
        call UnitAddAbility(u, Abil1)
    call DestroyTimer(t)
set t = null
endfunction

function CastBar takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local unit u = LoadUnitHandle(udg_Hash,GetHandleId(t),1)
    local real CastTime = LoadReal(udg_Hash,GetHandleId(t),2)
    local real OnePerc = LoadReal(udg_Hash,GetHandleId(t),3)
    local integer C = LoadInteger(udg_Hash, GetHandleId(t),4)
    local integer C1 = 1
//---------------------------------------------------------------
    call DisplayTextToForce( GetPlayersAll(), "CastBarDefine" )
        if C == 30 or IsUnitInGroup(u, udg_CastGroup) == false then
            call DestroyTimer(t)
            call FlushChildHashtable(udg_Hash,GetHandleId(t))
            call FlushChildHashtable(udg_Hash,GetHandleId(u))
            call DisplayTextToForce( GetPlayersAll(), "CastBarDestroy" )
             loop
                exitwhen C1 == 30
                call DestroyTextTag(LoadTextTagHandle(udg_Hash, GetHandleId(u),C1))
                set C1 = C1+1
            endloop
//---------------------------------------------------------------
             call FlushChildHashtable(udg_Hash,GetHandleId(t))
            call FlushChildHashtable(udg_Hash,GetHandleId(u))
//---------------------------------------------------------------
        else
            call SetTextTagColor(LoadTextTagHandle(udg_Hash,GetHandleId(u), C), 100, 100, 100, 100)
            set C = C+1
            call SaveInteger(udg_Hash, GetHandleId(t),4, C)
            call DisplayTextToForce( GetPlayersAll(), I2S(C) )
        endif
//---------------------------------------------------------------
    set t = null
    set u = null
endfunction

function CastProcess takes nothing returns nothing
local timer t = GetExpiredTimer()
local timer t2
local unit u = LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local real CastTime = LoadReal(udg_Hash,GetHandleId(t),3)
local integer Abil1 = LoadInteger(udg_Hash, GetHandleId(t),4)
local integer Abil2 = LoadInteger(udg_Hash, GetHandleId(t),5)
local integer CD = LoadInteger(udg_Hash, GetHandleId(t),6)
local integer C = 1
//---------------------------------------------------------------
call DisplayTextToForce( GetPlayersAll(), "CastProcessDefine" )
    if CastTime <= 0.00 then
        call DestroyTimer(t)
        call IssueImmediateOrder(u, "stop")
        call UnitRemoveAbility(u, Abil1)
        call UnitAddAbility(u, Abil2)
        set t2 = CreateTimer()
        call SaveInteger(udg_Hash, GetHandleId(t2),2, Abil1)
            call SaveInteger(udg_Hash, GetHandleId(t2),3, Abil2)
            call SaveUnitHandle(udg_Hash,GetHandleId(t2),1,u)
        call IssueTargetOrder( u, LoadStr(udg_Hash, GetHandleId(t),7), LoadUnitHandle(udg_Hash,GetHandleId(t),2))
        call TimerStart(t2, CD, false, function ReplaceAbility)
        call DisplayTextToForce( GetPlayersAll(), "EndCast, start ReplaceAbility")
        
        call FlushChildHashtable(udg_Hash,GetHandleId(t))
            call FlushChildHashtable(udg_Hash,GetHandleId(u))
//-------------------------------------------
        elseif IsUnitInGroup(u, udg_CastGroup) == false then
            call IssueImmediateOrder(u, "stop")
            call DestroyTimer(t)
            call DisplayTextToForce( GetPlayersAll(), "CastBreake" )
//---------------------------------------------------------------
        else
            set CastTime = CastTime -0.01
            call SaveReal(udg_Hash,GetHandleId(t),3,CastTime)
            call DisplayTextToForce( GetPlayersAll(), R2S(CastTime) )
    endif
//---------------------------------------------------------------
set t = null
set t2 = null
set u = null
endfunction

function CastInit takes unit u, real CastTime, integer Abil1, integer Abil2, real CD, unit uTarg, string Ord returns nothing
    local integer C = 1
    local real x = GetUnitX(u)-17
    local real z = GetUnitFlyHeight (u)
    local location Loc = Location(x,GetUnitY(u))
    local timer t = CreateTimer()
    local timer t2 = CreateTimer()
    local real OnePerc = CastTime/30
//---------------------------------------------------------------
    call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u)
    call SaveUnitHandle(udg_Hash,GetHandleId(t),2,uTarg)
    call SaveReal(udg_Hash,GetHandleId(t),3,CastTime)
    call SaveInteger(udg_Hash, GetHandleId(t),4, Abil1)
    call SaveInteger(udg_Hash, GetHandleId(t),5, Abil2)
    call SaveReal(udg_Hash, GetHandleId(t),6, CD)
    call SaveStr(udg_Hash, GetHandleId(t),7, Ord)
    
        call SaveUnitHandle(udg_Hash,GetHandleId(t2),1,u)
        call SaveReal(udg_Hash,GetHandleId(t2),2,CastTime)
        call SaveReal(udg_Hash,GetHandleId(t2),3,OnePerc)
        call SaveInteger(udg_Hash, GetHandleId(t2),4, 1)
//---------------------------------------------------------------
        loop
            exitwhen C == 30
            call SaveTextTagHandle(udg_Hash,GetHandleId(u),C,CreateTextTagLocBJ( "|", Loc, 0, 6.5, 100, 100, 100, 80 ))
            set x = x+4
            set C = C +1
            set Loc = Location(x,GetUnitY(u))
        endloop
        call TimerStart(t, 0.01, true, function CastProcess)
        call TimerStart(t2, OnePerc, true, function CastBar)
//---------------------------------------------------------------
        call RemoveLocation(Loc)
        set Loc = null
        set t = null
        set t2 = null
endfunction
Миниатюры
Кликните на картинку для увеличения
Название:  331.JPG
Просмотров: 27
Размер:  134.1 Кбайт  

Отредактировано Hatsume_Hate, 28.04.2012 в 21:54.
Старый 28.04.2012, 21:48
Hanabishi
COOL STATUS
offline
Опыт: отключен
            call SaveInteger(udg_Hash, GetHandleId(t2),2, Abil1)
            call SaveInteger(udg_Hash, GetHandleId(t2),3, Abil2)
            call SaveUnitHandle(udg_Hash,GetHandleId(t2),1,u)
        call TimerStart(t2, CD, false, function ReplaceAbility)
        call DisplayTextToForce( GetPlayersAll(), "EndCast, start ReplaceAbility")
        
        call FlushChildHashtable(udg_Hash,GetHandleId(t))
            call FlushChildHashtable(udg_Hash,GetHandleId(u))
Ты аттачишь на таймер, запускаешь его, и тут же очищаешь таблицу. Это само по себе тупо.
Старый 28.04.2012, 22:04
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
Hanabishi:
            call SaveInteger(udg_Hash, GetHandleId(t2),2, Abil1)
            call SaveInteger(udg_Hash, GetHandleId(t2),3, Abil2)
            call SaveUnitHandle(udg_Hash,GetHandleId(t2),1,u)
        call TimerStart(t2, CD, false, function ReplaceAbility)
        call DisplayTextToForce( GetPlayersAll(), "EndCast, start ReplaceAbility")
        
        call FlushChildHashtable(udg_Hash,GetHandleId(t))
            call FlushChildHashtable(udg_Hash,GetHandleId(u))
Ты аттачишь на таймер, запускаешь его, и тут же очищаешь таблицу. Это само по себе тупо.
коды абилки 1, 2 и юнит цепляются на t2, очищается t и u
Старый 28.04.2012, 22:14
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Hatsume_Hate:
коды абилки 1, 2 и юнит цепляются на t2, очищается t и u
ты не понял о чём тебе сказали о том что
после запуска таймера ты очищаеш то что сохранил следоательно извлекать нечего,дейсвия после запуска таймера пойдут сразу же а не по истечению таймера это не TriggerSleepAction
Старый 28.04.2012, 22:56
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
Klop:
Hatsume_Hate:
коды абилки 1, 2 и юнит цепляются на t2, очищается t и u
ты не понял о чём тебе сказали о том что
после запуска таймера ты очищаеш то что сохранил следоательно извлекать нечего,дейсвия после запуска таймера пойдут сразу же а не по истечению таймера это не TriggerSleepAction
я очищаю t а не t2
Старый 28.04.2012, 22:58
Klop
Папа римский
offline
Опыт: 13,006
Активность:
надо делать очистку тогда когда ты уже извлёк всё необходимое или перед удалением таймера
Старый 28.04.2012, 22:59
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
Klop:
надо делать очистку тогда когда ты уже извлёк всё необходимое или перед удалением таймера
а я что сделал?......
повесил абилки и юнита на t2! и очистил t
Старый 28.04.2012, 23:01
Klop
Папа римский
offline
Опыт: 13,006
Активность:
я щас под питый не пойму особо зачем 2 таймера
ты можеш отследить одним
у тебя 1 отвечает за шаг
а второй кол-во шагов может отследить второй
ведь первый периодичекий
Старый 28.04.2012, 23:03
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
Klop:
я щас под питый не пойму особо зачем 2 таймера
ты можеш отследить одним
у тебя 1 отвечает за шаг
а второй кол-во шагов может отследить второй
ведь первый периодичекий
как сделать одним я спрашивал тут
Hatsume_Hate добавил:
обьясню немного как все это работает.
сначала вызывается функция CastInit с заданными параметрами (абилка огненная стрела)
call CastInit(GetSpellAbilityUnit(), 1.00, GetSpellAbilityId(), 'A00V', 2.00,GetSpellTargetUnit(), "firebolt")
1.00 - время каста, 2.00 время перезарядки, A00V абилка которую будем использовать для замены.
в хэш таблицу сохраняются нужные значения для таймера каста, и таймера каст бара.
созадется 30 текст тагов, ака "каст бар", присваиваются хэндлу юнита.
запускаются каст и каст бар (CastProcess и CastBar)
CastProcess считает равен ли каст нулю, и если да то создается еще один таймер для добавления абилки, отдается "стоп" приказ, заменяются абилки (вот тут и надо A00V) и идет приказ который был тоже в хеше, очищается t.
CastBar тикает каждые OnePerc, соответственно каждый тик изменятся текст таг, и так пока С = 30, 30 текст тагов, после чего должен уничтожаться каст бар ( но остается висеть почему то )
а ReplaceAbility просто подменяет обратно абилку с A00V на ту которая была в GetSpellAbilityId() после кд
Hatsume_Hate добавил:
такс, с каст баром разобрался, он исчезает, я просто не заметил вот этого
call DestroyTimer(t)
            call FlushChildHashtable(udg_Hash,GetHandleId(t))
            call FlushChildHashtable(udg_Hash,GetHandleId(u))
            call DisplayTextToForce( GetPlayersAll(), "CastBarDestroy" )
             loop
                exitwhen C1 == 30
                call DestroyTextTag(LoadTextTagHandle(udg_Hash, GetHandleId(u),C1))
                set C1 = C1+1
            endloop
однако осталась проблема с
call DestroyTimer(t)
        call IssueImmediateOrder(u, "stop")
        call UnitRemoveAbility(u, Abil1)
        call UnitAddAbility(u, Abil2)
        set t2 = CreateTimer()
        call SaveInteger(udg_Hash, GetHandleId(t2),2, Abil1)
            call SaveInteger(udg_Hash, GetHandleId(t2),3, Abil2)
            call SaveUnitHandle(udg_Hash,GetHandleId(t2),1,u)
        call IssueTargetOrder( u, LoadStr(udg_Hash, GetHandleId(t),7), LoadUnitHandle(udg_Hash,GetHandleId(t),2))
        call TimerStart(t2, CD, false, function ReplaceAbility)
абилка не хочет заменяться и каститься =С
Старый 28.04.2012, 23:31
Klop
Папа римский
offline
Опыт: 13,006
Активность:
мой препод по программированию всегда говорил прежде чем что то делать нужно создать алгоритм(блок схема)
твоя же должна быть такой
вызвали спелл задали каст времени
провели каст бар
не нужен второй таймер по окончанию бара мы запускаем по новой этот же таймер с новым периодом только уже отвечающий за работу спелла
оптимизация знаешь что это?
GetHandleId(t) засунь в переменные локальные типа Integer сразу после отлова таймера
например
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
постоянно вызываеш функцию вдруг хендл гдето очистился и переместился в нижную чатсь(ну это только предположение)
когда Хендл очищается он освобождаеться возможен где то конфликт
вообще в таком большом коде тяжело понять что и как ты делаеш ибо он твой и проблему найти можешь только ты
Старый 28.04.2012, 23:46
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
Klop:
мой препод по программированию всегда говорил прежде чем что то делать нужно создать алгоритм(блок схема)
твоя же должна быть такой
вызвали спелл задали каст времени
провели каст бар
не нужен второй таймер по окончанию бара мы запускаем по новой этот же таймер с новым периодом только уже отвечающий за работу спелла
оптимизация знаешь что это?
GetHandleId(t) засунь в переменные локальные типа Integer сразу после отлова таймера
например
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
постоянно вызываеш функцию вдруг хендл гдето очистился и переместился в нижную чатсь(ну это только предположение)
когда Хендл очищается он освобождаеться возможен где то конфликт
вообще в таком большом коде тяжело понять что и как ты делаеш ибо он твой и проблему найти можешь только ты
сяп за совет по GetHandleId
у меня сейчас осталась одна трабла - абилка не заменяется и не используется. Хотя определяются они верно
Hatsume_Hate добавил:
фак еах, я нашел где были грабли!
я сохранял CD как реальную, а в таймере времени каста я загружал ее как целочисленную. Поменял на реальную, и все пошло как по маслу.
Спасибо всем, за помощь в решении данной проблемы)
Миниатюры
Кликните на картинку для увеличения
Название:  4444.JPG
Просмотров: 18
Размер:  134.6 Кбайт  
Старый 29.04.2012, 00:12
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 02:09.