Да и вот ещё что,ты мне скилл который скидывал.Я событие сам написал но все равно ошибок много.Например:
>>код
struct sword_sp
unit caster
unit target
endstruct
<<
Пишет отсутствует конец строки.
И вот ещё что.В локалки как занести точку?
Блин без JNGP тяжеловато устранять BJ,я даже не знаю что чем менять
Я напишу когда карту перезалью.
эм, а джнгп скачать слабо?
и в паузеюнит местами поменяй юнит и булеан
там тупо скопировать вставить не получится ибо событие не прочитается,используй библиотеку или событие сам пиши
JNGP у меня есть,я нашел проблему почему не работало.Я в JNGP забыл убрать функцию авто создания глобалок. Как то так.
А про событие не знал спасибо.
это твой 1 скил
создаётся новая точка,а старая не удаляется,таким образом у тебя получается лишняя точка которая тебе не нужна
в том что я кинул нету хэша
то есть твой 1 скил ужасно не оптимален(остальные не смотрел мне и его хватило),а я скинул тебе его исправленную версию
глобалки там где должны быть локалки и прочее
спасибо.У меня проблема если я ставлю PauseUnit без приставки BJ то идет ошибка.Может это из за того что я локалки не ставлю?
И да ещё я скопировал и вставил код но триггер блокируется и выдаются ошибки
Gnusik,твой спел был не муи,я сделал его муи
когда ты используешь полярные координаты то ты создаёшь точку и не удаляешь её,если использовать их очень часто то их станет очень много и будут лаги
PauseUnit
кат
struct sword_sp
unit caster
unit target
endstruct
function TimerStartEx takes timer whichTimer, real period, code handlerFunc, integer userData returns nothing
call TimerStart(whichTimer, I2R(userData), false, null) // timer exploit, xgm 2007
call PauseTimer(whichTimer)
call TimerStart(whichTimer, period,false, handlerFunc ) // start timer
endfunction
function TimerGetUserData takes timer whichTimer returns integer
return R2I(TimerGetRemaining(whichTimer )+0.5) // get user data from timer
endfunction
function Sword_Attack_Action takes nothing returns nothing
local timer a=GetExpiredTimer()
local sword_sp b=TimerGetUserData(a)
local unit caster=b.caster
local unit target=b.target
local real facing=GetUnitFacing(target)*bj_DEGTORAD
local real sin=Sin(facing)
local real cos=Cos(facing)
local real x1=GetUnitX(target)
local real y1=GetUnitY(target)
local real x2=GetUnitX(caster)
local real y2=GetUnitY(caster)
local real x3=x1+GetRandomReal(-80,80)
local real y3=y1+GetRandomReal(-80,80)
call SetUnitX(caster,x3)
call SetUnitY(caster,y3)
call SetUnitFacing(caster,bj_RADTODEG * Atan2(y1-y3,x1-x3))
call UnitDamageTarget(caster,target,5,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
call SetUnitAnimation(caster, "attack" )
call SetUnitAnimation(target, "death" )
set caster=null
set target=null
call TimerStartEx(a,.06,function Sword_Attack_Action,b)
endfunction
function Trig_Sword_Attack_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A000'
endfunction
function Trig_Sword_Attack_Actions takes nothing returns nothing
local unit caster=GetSpellAbilityUnit()
local unit target=GetSpellTargetUnit()
local real x1
local real y1
local real x2
local real y2
local real dx
local real dy
local real cos
local real sin
local real facing
local real x3
local real y3
local timer a=CreateTimer()
local sword_sp b=sword_sp.create()
call PauseUnit(caster,true)
call PauseUnit(target,true)
call SetUnitInvulnerable(caster, true )
call SetUnitPathing(caster, false )
set b.caster=caster
set b.target=target
call TimerStartEx(a,.06,function Sword_Attack_Action,b)
call TriggerSleepAction( 2.50 )
call PauseTimer(a)
call DestroyTimer(a)
set b.caster=null
set b.target=null
call b.destroy()
set facing=GetUnitFacing(target)*bj_DEGTORAD
set sin=Sin(facing)
set cos=Cos(facing)
set x1=GetUnitX(target)
set y1=GetUnitY(target)
set x2=GetUnitX(caster)
set y2=GetUnitY(caster)
set x3=x1+cos*165
set y3=y1+sin*165
set dx=x1+cos*256
set dy=y1+sin*256
call SetUnitX(caster,x3)
call SetUnitY(caster,y3)
call SetUnitFacing(caster,bj_RADTODEG * Atan2(dy-y3,dx-x3))
call TriggerSleepAction( 1.20 )
call UnitDamageTarget(caster,target,200,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
call SetUnitAnimation(target, "death" )
call TriggerSleepAction( 0.35 )
call SetUnitPathing(caster, true )
call SetUnitInvulnerable(caster, false )
call PauseUnit(caster,false)
call PauseUnit(target,false)
set caster=null
set target=null
endfunction
//===========================================================================
function InitTrig_Sword_Attack takes nothing returns nothing
local integer index=0
set gg_trg_Sword_Attack = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_Sword_Attack, Player(index),EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set index = index + 1
exitwhen index == 15
endloop
call TriggerAddCondition( gg_trg_Sword_Attack, Condition( function Trig_Sword_Attack_Conditions ) )
call TriggerAddAction( gg_trg_Sword_Attack, function Trig_Sword_Attack_Actions )
endfunction
Gnusik, дай дами юнитам из цепи пассивную способность москиты,тогда у них не будет хп бара
а что это под катом.В смысле какой скилл?или это просто действия хеш таймера?
А на счет точек то я делаю RemoveLocation.
И ещё ты говорил в прошлом ресурсе кинуть наработку ещё 1.Я её ещё не доделал.
У иконок все еще нету DISBTN и... рамок. Все иконки выглядят так, словно они пассивные. Скиллы перепутаны местами. У цепи есть полоски хп. Я не кодер, но этого уже достаточно.
Еще новая пассивка, какая-то неюзабельная. Старая была оригинальной и интересной, а это просто спам. Это всего-лишь мое мнение, а не наставление. Все-таки я не кодер. С этим разберется другой чувак.
На счет цепи.Полоски жизни не могу удалить т.к. цепь состоит из Dummy.Сейчас мне нужно отыскать модель самой части цепи.Тогда я удалю модель из дамми и сделаю просто спецэффект.Старая пассивка была утечной и я её удалил.Но думаю могу её оптимизировать.DISBTN иконки у меня есть но я их не импортировал.Сегодня я перезалью карту и исправлю все что нужно. nvc123:
Gnusik, утечек очень много
например функция полярных координат вызывает утечки
используй геометрию(7 класс по моему)
так же ненужные бж например PauseUnitBJ
используешь глобалки там где надо локалки
и не надо делать новый ресурс,можно просто обновить старый
в принципе оптимизировал только условия что неплохо
но зачем делать кучу триггеров которые кроме того изначально неактивны я не понимаю,ведь можно просто по триггеру на способность а так получилось не оптимально
Насчет геометрии за 7 класс.Даже не знаю.Можно попробовать вспомнить.Теперь "PauseUnitBJ".А что надо ставить вместо этого?Насчет "для каждой способности по 1 триггеру"-я не знаю как это сделать.В статьях которые читал не видел такого.Просто когда делаешь да GUI нужно иногда 2 а то и 3 триггера.Ну я попробую сделать получше.Только скажи как делать все в 1 триггере.
в джнгп есть много доп функций которых нету в обычном ве талка нету и в платном вай фай сижу бесплатно
Ладно тогда просто гарена.Я пытался устранять BJ сам и у меня получилось убрать утечки которые сильно мешают.Думаю пока достаточно.Может в скором буду все исправлять.Хотя в статье говорилось что оптимизация всего нереальна и в частых случаях не нужна.Я думаю может выложить новую наработку.Как раз будет тренировка.
кстати у меня вопрос как сделать юнита черного цвета?Ну в смысле перекрасить его.Сколько какого цвета надо?Стандарт вроде 255:255:255
просто гарена плюс без талк
а вобще либо пиши сюда либо в Q/A
это как у тебя гарена плюс без талк?вроде если не зделать больше 10 обнов гарена не пашет.
да и вот что ещё у меня в карте(которая в этой теме)скилл Искусство Ассасина не пашет в обычном WE а в jngp пашет.Почему?
nvc123, Спс огромное,я в JNGP посмотрю все исправления.После 31 можешь мне в скайпе показать как оптимиз делать для каждого вида(Боевая ед-ца,Спец-кт и т.д.) по 1 примеру? nvc123, Ну чтобы своими глазами увидеть как говорят.Буду благодарен.
jngp скачай
там бж выделены красным а нативки синим
зажимаеш контрл и лкм на бж - появются её внутрености(тоесть то из чего она состоит,как правило это нативки и локалки)
пример кинуть немогу так как редактора нету
а бж я непомню
нативки часть помню,а бж нет
JNGP у меня есть,я об этом в описании писал писал.ну я понял что бж красные и если ctrl+left_mouse содержимое.но что дальше то? nvc123:
я исправил 3 бж переменные,но что делать с спецэффектом и созданием юнита??? Sargaraser:
Gnusik, ну что не понятно, спрашивай прям тут создадим гайд лол только вопросы делай комплексные и не по пустякам, а если плохо доходит то мб не твое
Можешь подсказать как избавится от BJ.Типа LastCreatedUnit,PolarProjectionBJ и IssuePointOrderLocBJ?
Ниже способность на Jass' e.Можешь подсказать как исправить BJ?
Хотя бы некоторые для примера.
function Trig_Dark_Wave_Conditions takes nothing returns boolean
if ( not ( UnitHasBuffBJ(GetAttacker(), 'BOac') == true ) ) then
return false
endif
return true
endfunction
function Trig_Dark_Wave_Func003C takes nothing returns boolean
if ( not ( GetRandomReal(1.00, 10.00) <= 4.00 ) ) then
return false
endif
return true
endfunction
function Trig_Dark_Wave_Actions takes nothing returns nothing
set udg_Attacker[1] = GetOrderedUnit()
set udg_Cell_Attack[1] = GetOrderTargetUnit()
if ( Trig_Dark_Wave_Func003C() ) then
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 10
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call CreateNUnitsAtLocFacingLocBJ( 1, 'dumm', GetOwningPlayer(udg_Attacker[1]), PolarProjectionBJ(GetUnitLoc(udg_Cell_Attack[1]), 150.00, ( 60.00 * udg_r )), GetUnitLoc(udg_Cell_Attack[1]) )
set udg_i = ( udg_i + 1 )
set udg_r = ( udg_r + 1 )
set udg_dummy[udg_i] = GetLastCreatedUnit()
call IssuePointOrderLocBJ( udg_dummy[udg_i], "shockwave", GetUnitLoc(udg_Cell_Attack[1]) )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
else
endif
call TriggerSleepAction( 0.50 )
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 10
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call RemoveUnit( udg_dummy[udg_i] )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
endfunction
===========================================================================
function InitTrig_Dark_Wave takes nothing returns nothing
set gg_trg_Dark_Wave = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Dark_Wave, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
call TriggerAddCondition( gg_trg_Dark_Wave, Condition( function Trig_Dark_Wave_Conditions ) )
call TriggerAddAction( gg_trg_Dark_Wave, function Trig_Dark_Wave_Actions )
endfunction
пока переводи гуи в джасс и правь его(убирай бж,лишние действия,юзай локалки)
потом со временем ты выучиш функции и сможеш писать на прямую
и да,арефметические действия лучше на джасс писать
там чтобы понять надо просто выучить названия функций
и да лучше используй не location(точка) а X/Y(координаты)
ибо у тебя в твоих скилах точки не удаляется,тоесть при частом юзе скила будут лаги
в принципе я уже почти разобрался и могу по строчкам 65% примерно нужного читать.и вот вопрос как заменить бж нативками?Ну в смысле пример приведи или скинь статью.А то в оптимизе я не нашел ничего путного
В скором времени планирую пак из 3 пассивок на Jass' е выложить.Я их давно сделал на GUI.Вот и практика как раз будет по оптимизу.
function Trig_Speed_Attack_Blink_Actions takes nothing returns nothing
local unit a=udg_caster
call SetUnitPositionLoc(a,GetRandomLocInRect(RectFromCenterSizeBJ(GetUnitLoc(udg_Dummy[1]),650.00,650.00)))
call UnitDamagePointLoc(a,0.02,200.00,GetUnitLoc(a),100,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL)
endfunction
там бж и прочее но это сам сделаеш
у меня редактора нету мне не удобно
спасибо теперь понял.а кстати как думаешь у меня получится переводить GUI в Jass и потом корректировать(менять BJ,устранять утечки и т.д.).Такое будет нормально или нет?
Ну просто писать Jass в прямую для меня проблема,так как нестандартные коды не очень понимаю.
И можно ещё GUI личным сценарием корректировать в некоторых случаях.
их нативками заменять надо
говори в какой строке что непонятно
сначало пытайся по строкам читать,только когда сможеш быстро по строкам можно сразу пытаться весь код понять
1 спелл например.надо заменить глобалки на локалки(переменные) в статье написано что нужно вставлять 2 строки.Я их копирую вставляю в триггер.теперь надо менять названия переменных но я путаюсь и в итоге ошибка.как именно нужно заменять переменные и куда вставлять строки.если не трудно напиши готовую локалку по моему спеллу я посмотрю.
Я хотел изменить переменные на локалки но запутался в названиях.можешь подсказать что где и как? nvc123:
Gnusik, почти весь гуи состоит из бж
кинь сюда джасс версию не как карту а как код ибо редактора нету
только под кат её засунь
а всё,скачал mpq master и достал им джи файл
там не джасс там гуи конвертированое в джасс
Gnusik, утечки внутри бж устранить невозможно
если есть непонятный джасс код то напиши этот код в Q/A и напиши строки которые не понимаеш
тоесть нетолько сам код но и строки которые ты неможеш понять
Пожалуйста расскажи как написать код в Q/A,а на счет утечек в BJ я по возможности им не пользуюсь,так что их должно быть мало.
Лучше будет если я выложу Jass версию а вы меня поправите потом.
Перезалил в Jass версии.Посмотрите кому не трудно и скажите про ошибки если таковые имеются.
Sargaraser:
Gnusik, с вангизмом у тебя плохо, но я не понимаю что там учить если ты говоришь что все прочитал, могу посоветовать статью неревара про стомп спелл (это после изучения основ от сергея), именно она меня на путь истинный поставила, и статьи по оптимизу...
Не понял, читай еще пока не дойдет, и параллельно с чтением экспериментируй.
>~Gnusik:
Я говорю что прочитал начальные статьи но до меня плохо доходит.И к тому же я пытаюсь изучить Jass уже в 3 раз.Поэтому я хочу что бы кто нибудь меня научил.Мне легче когда кто то учит и поправляет,запоминается лучше что ли.
Яж уже писал тебе.
В скором времени я перезалью карту в Jass версии.
Если менять модель то не просто 2 детали.Вот например обычного бугая полностью забронировать,сменить оружие и добавить чуточку спецэффектов.Вот это уже получше будет.
Практикуйся.
Есть замечания.
Правописание - пиши грамотно и убери Detauf String.
Камера - в принципе сойдёт,но очень неудобно в пиковых ситуациях.
Способности - сделай нестандартные.Для RPG стандарт это скучно.
Ну а остальное пока нормально.
от чего производительность падает то?и что 10 раз вызывается?насчет утечек я их устраняю.
гуи использует бж функции которые состоят из нативных и бж не оптимальные и внутри их есть утечки которые ты не уберёш никак,а джасс позволяет использовать нативные функции не делая тех ненужных действий которые делаются в бж(поэтому простой переход с гуи на джасс мало чего даёт,надо ещё перейти с бж на нативки)
а для обучения советую прочитать именно эти статьи и переводить обычный гуи в джасс после чего когда разберёшся в этом переводе,по статьям оптимизировать его в нормальный джасс,так же советую поставить джнгп(все бж функции выделены красным а при нажатие на них с зажатым контролом показывается их содержимое)
статьи(именно в этом порядке):
я фапаю на каждый байт оперативки хотя мой код нечитаем для неподготовленых умов
Очень спасибо за ссылки,прочитаю обязательно.Я устраняю утечки не только просто переводом в Jass но и некоторые вручную после перевода.Но все же спасибо.
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин (ReNew)
Все я перезалил карту.
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин (ReNew)
Пишет отсутствует конец строки.
И вот ещё что.В локалки как занести точку?
Блин без JNGP тяжеловато устранять BJ,я даже не знаю что чем менять
Я напишу когда карту перезалью.
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин (ReNew)
» WarCraft 3 / Наработка персонажа Ассасин (ReNew)
А про событие не знал спасибо.
» WarCraft 3 / Наработка персонажа Ассасин (ReNew)
И да ещё я скопировал и вставил код но триггер блокируется и выдаются ошибки
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин (ReNew)
А на счет точек то я делаю RemoveLocation.
И ещё ты говорил в прошлом ресурсе кинуть наработку ещё 1.Я её ещё не доделал.
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин (ReNew)
nvc123: Насчет геометрии за 7 класс.Даже не знаю.Можно попробовать вспомнить.Теперь "PauseUnitBJ".А что надо ставить вместо этого?Насчет "для каждой способности по 1 триггеру"-я не знаю как это сделать.В статьях которые читал не видел такого.Просто когда делаешь да GUI нужно иногда 2 а то и 3 триггера.Ну я попробую сделать получше.Только скажи как делать все в 1 триггере.
» WarCraft 3 / XGM & Warcraft3ft.info Contest до 1 октября
» WarCraft 3 / Оружие
Отредактирован Gnusik
» WarCraft 3 / XGM & Warcraft3ft.info Contest до 1 октября
» WarCraft 3 / Наработка персонажа Ассасин (ReNew)
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин
кстати у меня вопрос как сделать юнита черного цвета?Ну в смысле перекрасить его.Сколько какого цвета надо?Стандарт вроде 255:255:255
» WarCraft 3 / Наработка персонажа Ассасин
да и вот что ещё у меня в карте(которая в этой теме)скилл Искусство Ассасина не пашет в обычном WE а в jngp пашет.Почему?
» WarCraft 3 / Наработка персонажа Ассасин
» WarCraft 3 / Наработка персонажа Ассасин
nvc123, Ну чтобы своими глазами увидеть как говорят.Буду благодарен.
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин
nvc123:
я исправил 3 бж переменные,но что делать с спецэффектом и созданием юнита???
Sargaraser: Можешь подсказать как избавится от BJ.Типа LastCreatedUnit,PolarProjectionBJ и IssuePointOrderLocBJ?
Ниже способность на Jass' e.Можешь подсказать как исправить BJ?
Хотя бы некоторые для примера.
if ( not ( UnitHasBuffBJ(GetAttacker(), 'BOac') == true ) ) then
return false
endif
return true
endfunction
if ( not ( GetRandomReal(1.00, 10.00) <= 4.00 ) ) then
return false
endif
return true
endfunction
set udg_Attacker[1] = GetOrderedUnit()
set udg_Cell_Attack[1] = GetOrderTargetUnit()
if ( Trig_Dark_Wave_Func003C() ) then
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 10
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call CreateNUnitsAtLocFacingLocBJ( 1, 'dumm', GetOwningPlayer(udg_Attacker[1]), PolarProjectionBJ(GetUnitLoc(udg_Cell_Attack[1]), 150.00, ( 60.00 * udg_r )), GetUnitLoc(udg_Cell_Attack[1]) )
set udg_i = ( udg_i + 1 )
set udg_r = ( udg_r + 1 )
set udg_dummy[udg_i] = GetLastCreatedUnit()
call IssuePointOrderLocBJ( udg_dummy[udg_i], "shockwave", GetUnitLoc(udg_Cell_Attack[1]) )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
else
endif
call TriggerSleepAction( 0.50 )
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 10
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call RemoveUnit( udg_dummy[udg_i] )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
endfunction
function InitTrig_Dark_Wave takes nothing returns nothing
set gg_trg_Dark_Wave = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Dark_Wave, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
call TriggerAddCondition( gg_trg_Dark_Wave, Condition( function Trig_Dark_Wave_Conditions ) )
call TriggerAddAction( gg_trg_Dark_Wave, function Trig_Dark_Wave_Actions )
endfunction
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин
В скором времени планирую пак из 3 пассивок на Jass' е выложить.Я их давно сделал на GUI.Вот и практика как раз будет по оптимизу.
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин
И можно ещё GUI личным сценарием корректировать в некоторых случаях.
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин
nvc123: Вопрос как избавиться от БЖ .Может чем то заменить можно?
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин
Лучше будет если я выложу Jass версию а вы меня поправите потом.
Отредактирован Gnusik
» WarCraft 3 / Наработка персонажа Ассасин
Gnusik, с вангизмом у тебя плохо, но я не понимаю что там учить если ты говоришь что все прочитал, могу посоветовать статью неревара про стомп спелл (это после изучения основ от сергея), именно она меня на путь истинный поставила, и статьи по оптимизу...
Не понял, читай еще пока не дойдет, и параллельно с чтением экспериментируй.
Я говорю что прочитал начальные статьи но до меня плохо доходит.И к тому же я пытаюсь изучить Jass уже в 3 раз.Поэтому я хочу что бы кто нибудь меня научил.Мне легче когда кто то учит и поправляет,запоминается лучше что ли.
В скором времени я перезалью карту в Jass версии.
Отредактирован Gnusik
» WarCraft 3 / Паладин с топором
Практикуйся.
Отредактирован Gnusik
» WarCraft 3 / Time of GoD Orpg
Правописание - пиши грамотно и убери Detauf String.
Камера - в принципе сойдёт,но очень неудобно в пиковых ситуациях.
Способности - сделай нестандартные.Для RPG стандарт это скучно.
Ну а остальное пока нормально.
» WarCraft 3 / Наработка персонажа Ассасин