sleepw
offline
Опыт:
8,449Активность: |
Замена хп и маны(Jass)
Вот решил поучить жасс..)
написаль такой вот спелл,но когда у юнита бешеный реген спелл слетает почемуто и совершенно непонятные числа скачут.Может и не изза регена,вопщем хелп разобрацо. » Spellcode Код:
|
05.03.2008, 00:04 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DeaDoK
offline
Опыт:
5,783Активность: |
Во первых обьясни чё делает спелл(ибо качать мапу тайма нету) Во вторых убери все BJ функции (типа SetUnitLifeBJ поменяй на SetUnitState) |
05.03.2008, 00:50 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
sleepw
offline
Опыт:
8,449Активность: |
суть спела в том что при юзе отнимает от большего 100*лвл и добавляет стоко же к тому что меньше..
имхо бж тут непричём=\ оно пашет абсолютно нормально когда реген выключен вообще.. sleepw добавил: ну вот я впринципе выкупил трабл и ненаю что тут не так. ------ if GetUnitStateSwap(UNIT_STATE_MAX_LIFE, udg_convertc) - hp() < horm() then call SetUnitLifeBJ(udg_convertc,hp()-(GetUnitStateSwap(UNIT_STATE_MAX_MANA,udg_convertc)-mp())) call SetUnitManaBJ(udg_convertc,mp()+(GetUnitStateSwap(UNIT_STATE_MAX_MANA,udg_conver tc)-mp())) ------ if GetUnitStateSwap(UNIT_STATE_MAX_MANA, udg_convertc) - mp() < horm() then call SetUnitManaBJ(udg_convertc,mp()-(GetUnitStateSwap(UNIT_STATE_MAX_LIFE,udg_convertc)-hp())) call SetUnitLifeBJ(udg_convertc,hp()+(GetUnitStateSwap(UNIT_STATE_MAX_LIFE,udg_conver tc)-hp())) ------ тоесть если "horm()" например = 100 и жизнь которую нужно перекинуть меньше "horm()" то тогда отнимаем от жизни её текущее значение и стоко же добавляем в ману.. нужно для того чтобы например если хп=80,а мп=40 не получилось чтото типа вроде отняли от хп 80 а к мане прибавили 100.. |
05.03.2008, 01:12 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DeaDoK
offline
Опыт:
5,783Активность: |
Проставь в своих if'ах ==true |
05.03.2008, 01:15 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
sleepw
offline
Опыт:
8,449Активность: |
это здесь причём?..
оно итак получается что тру. если условие then ... если не равно условию значит else.. sleepw добавил: оно то всё пашет когда нужно но вот с тем последним что я кинул чтото не то.. имхо формула не правильная. |
05.03.2008, 01:20 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DeaDoK
offline
Опыт:
5,783Активность: |
А нахрена ты формулу поменял?? SetUnitState(udg_unit,UNIT_STATE_LIFE,GetUnitState(udg_unit,UNIT_STATE_LIFE)+MaxHp-hp) И ману тако же SetUnitState(udg_unit,UNIT_STATE_MANA,GetUnitState(udg_unit,UNIT_STATE_MANA)+MaxMp-mp) |
05.03.2008, 01:34 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
sleepw
offline
Опыт:
8,449Активность: |
упс извиняюсь функции ниже нужны для того чтобы если например мана = 500\550, не получилось что мы отнимем от хп -100,а в ману добавим 50,получается что от хп 50поинтов зря отняло.
Цитата:
sleepw добавил: DeaDoK пла ты бы сначало оттестил на карте,а потом бы писал.. если он там есть значид надо,дабы не получилось утечек разных. кароче спел выглядит так: если недостающего до максимума хп или мп меньше чем 100*лвл отнимаем от того от которго дожны забрать число столько сколько хп не достаёт. если же недостаток хп больше 100*лвл тогда уже отнимаем от хп или маны 100*лвл и стоко же добавляем в хп или ману. если же от того от чего мы должны отнять ТЕКУЩЕЕ хп или мана меньше 100*лвл отмаем текущее хп или ману туда куда нужно.(если это хп то отмаем оставшееся и добвляем +1 чтобы юнит не умер..,а потом добавляем то что отняли к мане -1) |
|
05.03.2008, 01:40 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DeaDoK
offline
Опыт:
5,783Активность: |
Я те повторяю, у тя формулы неправильные.
пиши каторые я атпостил сверху. З.Ы. "mp()-MaxHp-hp()" - извини но я такое даж представить не могу А если у тя не то что максмана меньше максхп, а даже просто мп меньше максхп(значение уходит в минус) DeaDoK добавил: Ладна, всё равно с тваих объяснений хер поймёшь чего ты хочешь, ща проверю мапу З.Ы. ты хочешь типа варлоковского мана тэп из вова??? |
05.03.2008, 01:46 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
sleepw
offline
Опыт:
8,449Активность: |
и вот мне кажется что вот тут:
call SetUnitLifeBJ(udg_convertc,hp()-(GetUnitStateSwap(UNIT_STATE_MAX_MANA,udg_convertc)-mp())) call SetUnitManaBJ(udg_convertc,mp()+(GetUnitStateSwap(UNIT_STATE_MAX_MANA,udg_conver tc)-mp())) отнимается от жизни (её мы должны перекинуть в ману) недостающее до макс.маны и добавляем в ману стоко же сколько не достаёт до макс.маны. |
05.03.2008, 01:47 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DeaDoK
offline
Опыт:
5,783Активность: |
Скока те повторять - - - - - замени свои ф-и этими SetUnitState(udg_unit,UNIT_STATE_LIFE,GetUnitState(udg_unit,UNIT_STATE_LIFE)+Max Hp-hp) SetUnitState(udg_unit,UNIT_STATE_MANA,GetUnitState(udg_unit,UNIT_STATE_MANA)+Max Mp-mp) |
05.03.2008, 01:50 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
sleepw
offline
Опыт:
8,449Активность: |
один хрен токо время зря потратил..
sleepw добавил: кароче трабл был действительно в условиях.. меня шото осенило я не помню что поменял и зачем но кароче теперь идеально » code function spellid takes nothing returns integer return 'A000' endfunction function horm takes nothing returns integer return 100*GetUnitAbilityLevelSwapped(spellid(),udg_convertc) endfunction function hp takes nothing returns real return GetUnitStateSwap(UNIT_STATE_LIFE,udg_convertc) endfunction function mp takes nothing returns real return GetUnitStateSwap(UNIT_STATE_MANA,udg_convertc) endfunction function sp_c takes nothing returns boolean if(not( GetSpellAbilityId()==spellid())) then return false endif return true endfunction function spbool takes nothing returns boolean if ( not ( hp() > mp() ) ) then return false endif return true endfunction function Trig_sp_Actions takes nothing returns nothing local effect se set udg_convertc=GetTriggerUnit() if (spbool()) then if GetUnitManaPercent(udg_convertc)!=100.00==true then call AddSpecialEffectTargetUnitBJ("overhead",udg_convertc,"Abilities\\Spells\\Undead\\ReplenishMana\\ReplenishManaCasterOverhead.mdl") set se=GetLastCreatedEffectBJ() if hp()>=horm() and GetUnitStateSwap(UNIT_STATE_MAX_MANA, udg_convertc) - mp() < horm()==true then call SetUnitState(udg_convertc,UNIT_STATE_LIFE,hp()-(GetUnitStateSwap(UNIT_STATE_MAX_MANA,udg_convertc)-mp())) call SetUnitState(udg_convertc,UNIT_STATE_MANA,mp()+(GetUnitStateSwap(UNIT_STATE_MAX_ MANA,udg_convertc)-mp())) else if hp()>=horm()==true then call SetUnitState(udg_convertc,UNIT_STATE_LIFE, hp()-horm()) call SetUnitState(udg_convertc,UNIT_STATE_MANA, mp()+horm()) else call SetUnitState(udg_convertc,UNIT_STATE_MANA,hp()+mp()) call SetUnitState(udg_convertc,UNIT_STATE_LIFE,1) endif endif call TriggerSleepAction(1) call DestroyEffectBJ(se) else call DisplayTextToForce(GetForceOfPlayer(GetOwningPlayer(udg_convertc)), "|cffffcc00Your mana is full|r") endif else if GetUnitLifePercent(udg_convertc)!=100.00==true then call AddSpecialEffectTargetUnitBJ("overhead",udg_convertc,"Abilities\\Spells\\Undead\\ReplenishHealth\\ReplenishHealthCasterOverhead.mdl") set se=GetLastCreatedEffectBJ() if mp()>=horm() and GetUnitStateSwap(UNIT_STATE_MAX_LIFE, udg_convertc) - hp() < horm()==true then call SetUnitState(udg_convertc,UNIT_STATE_MANA,mp()-(GetUnitStateSwap(UNIT_STATE_MAX_LIFE,udg_convertc)-hp())) call SetUnitState(udg_convertc,UNIT_STATE_LIFE,hp()+(GetUnitStateSwap(UNIT_STATE_MAX_ LIFE,udg_convertc)-hp())) else if mp()>=horm()==true then call SetUnitState(udg_convertc,UNIT_STATE_MANA,mp()-horm()) call SetUnitState(udg_convertc,UNIT_STATE_LIFE,hp()+horm()) else if hp()==1==true then call SetUnitState(udg_convertc,UNIT_STATE_LIFE,(mp()+hp())) else call SetUnitState(udg_convertc,UNIT_STATE_LIFE,mp()+hp()) endif call SetUnitState(udg_convertc,UNIT_STATE_MANA,0) endif endif call TriggerSleepAction(1) call DestroyEffectBJ(se) else call DisplayTextToForce(GetForceOfPlayer(GetOwningPlayer(udg_convertc)), "|cffffcc00Your health is full|r") endif endif set udg_convertc=null endfunction //=========================================================================== function InitTrig_sp2 takes nothing returns nothing set gg_trg_sp2 = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ(gg_trg_sp2,EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(gg_trg_sp2,Condition(function sp_c)) call TriggerAddAction( gg_trg_sp2, function Trig_sp_Actions ) endfunction как вообще для первого спелла на жассе покатит?:) выбрал же блин самый "лёгкий" имхо я бы его на триггерах 2 года писал бы и врятли бы правильно написал бы) жасс иногда спасает:) Отредактировано sleepw, 05.03.2008 в 02:52. |
05.03.2008, 02:47 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DeaDoK
offline
Опыт:
5,783Активность: |
Для первого норм. Я ж тебе сразу сказал что в условии трабл, а ты не, не. В общем учи функции и ненавидь BJ |
05.03.2008, 03:27 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
чет смысл спела непойму, я понимаю если например ману в жизни ковертить, но большее в меньшее, даж незнаю как оно может пригодицо...
Jon добавил: ну вроде все заработало да? т.е. править алгоритм вам не нужно, тогда не меняя саиого алгоритма нужно (правельнее) было сделать так: Код:
Иначе у тебя слишком много вызовов одинаковых функций, это просто неоптимально... а так и глобалка не нужна... Jon добавил: sleepw Если ты смоздаеш темы в академии да еще и сам помечаеш "(jass)" то почему нехватает ума создать ее в джаз разделе? |
05.03.2008, 05:49 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
sleepw
offline
Опыт:
8,449Активность: |
Jonда так привык писать тамь..)
тю так как это не пригодицо?.. ну например ты в пвп у тя понт хп но маны зажирайсо.. юзаешь и теперь норм хп и маны понт:) sleepw добавил: Jonсенк за оптималко:) |
05.03.2008, 10:35 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
sleepw
offline
Опыт:
8,449Активность: |
так вот токо будет правильней:)
Код:
|
05.03.2008, 15:19 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
да, мб) я подобные коды обрабатываю торопясь, потому иногда незамечаю... скобкой больше скобкой меньше.. пох) |
05.03.2008, 15:32 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
sleepw
offline
Опыт:
8,449Активность: |
Jon
зато как в игре ощутимо sleepw добавил: Jon но всё равно кросавчег так быстро обработал :) я сидел вчера целый день немог понять что где..запуталсо:) |
05.03.2008, 15:36 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|