17

» WarCraft 3 / Способности и алгоритмы на заказ

Заклинание готово!

Заказчик: Maxim105
Способность:Таймерный
Выполнено: Да.
Загруженные файлы
17

» WarCraft 3 / предел структуры

есть масив но он врядли влияет на эти параметры так как при компиляции других структур видел 8к предела
а лутше сами посмотрите

struct UnitDamageFire{ 
static UnitDamageFire Name[]
static int count = 0
//===================

unit c,u
float damage
string e,origin
int time
//=================
int tt=0,i
int taimer=0
effect ef


private void DamageFire(){

if(GetUnitState(.c,UNIT_STATE_LIFE)>0){
UnitDamage(.u,.c,.damage)

}else{ Remove()}

}



private void Remove(){
DestroyEffect(.ef)
.ef=null
.e = null
.origin =null
.u=null
.c=null
RemoveUnitStruct(.i)
}


private void Action(){
.tt++

if(.tt<.time){

.taimer++
if(.taimer>sek){
.taimer=0
DamageFire()
}


}else{
Remove()

}


}


private void Create(){

.ef = AddSpecialEffectTarget(.e,.c,.origin)


}



//=================================
static void AddToUnitMove(unit c,unit u,float damage,string e,string origin,float time){
int i = Proverka(c)

if(i!=-1){
if(Name[i].u==u){return}

Name[count++] = UnitDamageFire.create() 
Name[count-1].c=c
Name[count-1].u=u
Name[count-1].damage=damage
Name[count-1].e=e
Name[count-1].origin=origin
Name[count-1].time=R2I(time*sek)
Name[count-1].i=count-1
Name[count-1].Create()

}else{

Name[count++] = UnitDamageFire.create() 
Name[count-1].c=c
Name[count-1].u=u
Name[count-1].damage=damage
Name[count-1].e=e
Name[count-1].origin=origin
Name[count-1].time=R2I(time*sek)
Name[count-1].i=count-1
Name[count-1].Create()



  }
}
//================================


static int Proverka(unit u){
int i = 0
while (i<count){
if(Name[i].u==u){return i};i++}
return -1
}
static int ProverkaId(int j){
int i =0
while(i<count){
if(Name[i].i==j){return i};i++}
return -1
}

//Удаление
static void RemoveUnitStruct(int j){
int i = ProverkaId(j)
if(i==-1){return};count--;
Name[i].destroy()
while(i<count){Name[i]=Name[i+1];i++}
}

static void Update(){int i =0;while(i<count){Name[i].Action();i++}}
}//==========end struct
17

» WarCraft 3 / как правильно передать и обнулять переменную для другой функции?

смысла нулить невижу, под переменую выводиться память и еси ты обнулишь переменную типа юнит то думаю всеголишь обнуляться те значения что храняться в этой переменной но а так всеровно это дело висеть будет обнулённым
только я чтото заметил что редактор JNPG автоматом обнуляет переменные типа юнит
17

» WarCraft 3 / Как Убрить анимацию stand alternate прик касте способности?

незнаю поможет или нет но пробни через кустом скрипт написать это AddUnitAnimationProperties(u, "Alternate", false)
где u - это твой юнит и советую перед ней поставить паузу тригера на 0.1 хотяб
17

» WarCraft 3 / остаточная анимация

Maniac_91:
ledoed, значит, что-то с моделью не то. Предлагаю обратиться сюда.
да всё спасибо уже решил проблему
17

» WarCraft 3 / остаточная анимация

Maniac_91:
Или анимация Decay долгая, или в игровых константах время "жизни" спецэффектов большое.
Скорее всего первый вариант, если проблема наблюдается только с этой моделью.
всего 1 анимация stand на 0.1 сек
17

» WarCraft 3 / Боевой голем-статуя

EnergyFrost:
Бордер, особенность москитов в том, что можно дать, Но нельзя отобрать.
Автор. Делай через паузу юнита. И в нужный момент снимай паузу
москиты отобрать можно чере ShowUnit(),и снятия неуязвимости
17

» WarCraft 3 / Оптимизация способности

гуи не знаю но оптимизировал как смог(немног улучшил) ,лутше открывать через JNPG
Загруженные файлы
17

» WarCraft 3 / Проблема с перезарядкой предметов

могу угодать эти 2 предмета с копированы с 1го аналога лечиться просто создай с других аналагов
17

» WarCraft 3 / Нужна помощь

хех я тоже заказывал и за день изучил ME и Mdlvis ,а с пересадкой плаща тут просто чтобы плащ анимировать нужны кости а потом в редакторе анимаций дёргай этими костями и получиться как над ,а лутше почитай статьи раз 2 года ждал там ничего сложного нет
17

» WarCraft 3 / Нужна помощь

примбабасы крепяться к костям а лутше полистай тут статьи про анимацию
17

» WarCraft 3 / Проблема с спэллом, на GUI

если не мног знаешь жасс или тупо по логике разбери
private void AddStatsGuy(unit u,int koll,bool b){
int i =0,min=100,max=1000;int stats[];stats[0]=Str100;stats[1]=Str10;stats[2]=Str1;bool f=false
if(b){
while(i<3){
if(koll>min&&koll<max){UnitAddAbility(u,stats[i]);SetUnitAbilityLevel(u,stats[i],koll/min);f=true}
if(b){koll = koll - (koll/min)*min};min/=10;max/=10;f=false;i++}
 }else{UnitRemoveAbility(u,Str1);UnitRemoveAbility(u,Str10);UnitRemoveAbility(u,Str100)}
 }
Str1- это абилка 9 уровней силы от 1до 9
Str10- от 10 до 90
Str100 - от 100 до 900
также еси на b даёшь false то способности очищаються
kol - если b true то это число прибавит на столько силы
17

» WarCraft 3 / Проблема с спэллом, на GUI

лутше всего давать через способности статы так как герой может апнутся левелом,а так тупо удаляешь способности и все ненад париться за баг со статами
17

» WarCraft 3 / Проблема с спэллом, на GUI

гуи конечно я не знаю но по логике видно что ты паузишь внутри цикла на 20 сек, а так как ты паузишь не внутри триггера, пауза не работает(наскок помню если запускать sleep не внутри триггера дальше код не идёт тупо должен замереть )
17

» WarCraft 3 / "Удар по дереву"

перерыл все евенты но думаю ещё предложу велосипед попробуй при активации приказа и использовании способности давать ежесекудно опыт а когда приказ сбиваеться то всё (это легко сделать через структуры)
17

» WarCraft 3 / "Удар по дереву"

я понимаю насчёт эвентов таких как TriggerRegisterUnitEvent() ты пробовал их там куча методом тыка пробни и чтобы как нить высветился твой приказ в дебаге на автомате
самому стало интересно
ща пробну
17

» WarCraft 3 / "Удар по дереву"

врядли через приказ так как приказ срабатывает только тода когда игрок его отдал, а вообще попробуй отловить приказ способности добывать ресы а потом через евенты его обрабатывай
17

» WarCraft 3 / Как на стандартную модель натянуть импорт текстур не заменяя ее

ну не проблем у одного обычная цепочка анимаций у другого альтернативная триггерно это AddUnitAnimationProperties(unit, "Alternate", bool),или в ро скилами превращение в ворона ,медведя и морф
17

» WarCraft 3 / ЕвентУрона

"Скажите, что у меня в коде не так? Только я вам код не пришлю, так угадывайте!"
конечно если вам нужна вся цепочка то да (просто что выше наглядный пример)
library KakashiSpell{


private SusanoKakashi SusanoKakashiStruct=0
public void Update(){
SusanoKakashiStruct.Awake()

}


define {
private Name=SpellKakasi
private Susano = 'h00P'
}


//вызов сусано
public void KakashiSusanoAction(unit u){
SusanoKakashi A = SusanoKakashi.create()
A.AddToUnit(u)
A.destroy()
}

struct SusanoKakashi{

static SusanoKakashi Name[]
static int count = 0

//===================
unit u,k
int taimer=0
int Amount=5000
texttag text

private void Move(){
SetUnitX(.k,GetUnitX(.u))
SetUnitY(.k,GetUnitY(.u))
SetUnitFacing(.k,GetUnitFacing(.u))
}
private void AmountSusano(){
if(.Amount<=0){
RemoveUnit(.u)
SetUnitVertexColor(.u,255,255,255,255)
RemoveUnitMovie(.u)
}
DestroyTextTag(.text)
.text=CreateTextTagUnitBJ( I2S(.Amount), .u, 0, 10, 100, 100, 100, 0 )
}

static void DamageUnitAction(){
unit u=GetTriggerUnit()
int i = Proverka(u)

Display(u,I2S(i))
Name[i].Amount-=R2I(GetEventDamage())
}
private void EventDamage(){
trigger DamageUnit= CreateTrigger()
int i = 0

TriggerRegisterUnitEvent(DamageUnit, .u , EVENT_UNIT_DAMAGED)
TriggerAddAction( DamageUnit, function SusanoKakashi.DamageUnitAction )

}

private void Action(){
Move()
AmountSusano()
EventDamage()
}

private void Create(){
.k=CreateUnit(GetOwningPlayer(.u),Susano,GetUnitX(.u),GetUnitY(.u),GetUnitFacing(.u))
SetUnitVertexColor(.u,255,255,255,0)
}
private void Remove(){
RemoveUnit(.u)
SetUnitVertexColor(.u,255,255,255,255)
RemoveUnitMovie(.u)
}


static void AmountDamageKakashi(unit u,float damage){
int i = Proverka(u)
if(i==-1){return}
Name[i].Amount-=R2I(damage)
SetUnitState(Name[i].u,UNIT_STATE_LIFE,GetUnitState(Name[i].u,UNIT_STATE_LIFE)+damage)
Display(Name[i].u,"ttt")
}

//==========================
static void AddToUnit(unit u){
int i = Proverka(u)
if(i!=-1){
Name[i].Remove()

}else{
Name[count++] = SusanoKakashi.create() 
Name[count-1].u=u
Name[count-1].Create()
  }
}

static int Proverka(unit u){
int i = 0
while (i<count){
if(Name[i].u==u){return i};i++}
return -1
}
//Удаление
static void RemoveUnitMovie(unit u){
int i = Proverka(u)
if(i==-1){return};count--;
while(i<count){Name[i]=Name[i+1];i++}
}

static void Update(){int i =0;while(i<count){Name[i].Action();i++}}
public void Awake(){Update()}//=========================================Проверки 
}//end struct
//=======================================================================



}
+навсякий пожарный начало цепочки
scope InitSpellAbility initializer Init{
globals
timer globaltimmer=CreateTimer()
endglobals


//Гай
private void RU_GaiVrata8(){
eighthgate_eighthgateAction(GetTriggerUnit())
eighthgate_Utreniy_Pavlin_Remove_Action(GetTriggerUnit())
}//8е врата Гая
private void RU_NightGuy(){eighthgate_NightFlyGuy(GetTriggerUnit())}//Ночной мотылёк
private void RU_NightSlon(){eighthgate_Vecherniy(GetTriggerUnit(),GetSpellTargetX(),GetSpellTargetY())}//Вечерний Слон
private void RU_GuySkillVozdushniy(){eighthgate_SlonUdar(GetTriggerUnit())}//Удар слона
private void RU_PoludeniyTigr(){eighthgate_Poludeniy_Tigr_Action(GetTriggerUnit())}//Полуденный тигр
private void RU_UtreniyPavlin(){eighthgate_Utreniy_Pavlin_Action(GetTriggerUnit())}//Павлин
private void RU_UraganKonoha(){eighthgate_SpellonefiveVrat_Action(GetTriggerUnit())}//Ураган
private void RU_Rosposhnoy(){eighthgate_Rosposhnoy_Action(GetTriggerUnit())}//Лотус
//========================================================
//Мадара
private void RU_MadaraSpellLazer(){MadaraSpell_MadaraSpell1(GetTriggerUnit())}//лазер
private void RU_MadaraSpellShar(){MadaraSpell_MadaraSpell2(GetTriggerUnit())}//летящий шар чёрный
private void RU_MadaraSpellClon(){MadaraSpell_MadaraCloneSpell(GetTriggerUnit(),GetSpellTargetUnit())}//спелл клонов
private void RU_MadaraSpellMeteor(){MadaraSpell_MadaraSpell3(GetTriggerUnit())}
//Какаши
private void RU_KakashiSusano(){KakashiSpell_KakashiSusanoAction(GetTriggerUnit())}

//===========================================================================
private bool Trig_InitSpell_Condition(){
string s = GetObjectName(GetSpellAbilityId())

if(SubString(s,0,2)=="RU"){
ExecuteFunc(SCOPE_PRIVATE+s)
//DisplayTextToPlayer(Player(0), 0, 0, SCOPE_PRIVATE+s)
}
return false
}
public void Update(){
eighthgate_Update()
MadaraSpell_Update()
KakashiSpell_Update()
//test_Update()
}





//===========================================================================
private void Init(){
TimerStart(globaltimmer,0.025,true,function Update)

    trigger SpellCast = CreateTrigger(  )
    int i=0
    while(i<12){TriggerRegisterPlayerUnitEvent(SpellCast, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null);i++}
    TriggerAddCondition( SpellCast, Condition(function Trig_InitSpell_Condition) )
    }

}
Кстати, система по ссылке поддерживает и динамическое использование в своём первом варианте.
вообще не то,но я разобрался в своей и сделал так как нужно там вообще ерунда была
если кому будет интересно,я пропускал триггер через таймер а оказывается над было всего 1 раз его на нужного юнита пропустить чтобы всё работало
17

» WarCraft 3 / Невозможно открыть файл основной карты.

если у тя JNPG то в папке где находиться JNPG папка backups там увидишь кучу карт пронумированных ищи там свою
17

» WarCraft 3 / ЕвентУрона

Clamp:
мне нужен индивидуальный динамический отлов обрабатываемый структурой
Берёшь логику и используешь в индивидуальной динамической обрабатываемой структуре.

А не в том псевдокоде с кучей неизвестных референсов, что ты прислал.
так я что делаю моей логики сильно не хватило я сюда прислал вопрос
почему триг срабатывает бесконечно раз а некак ему положено
прочтите вопрос хотяб
А не в том псевдокоде с кучей неизвестных референсов, что ты прислал
так и есть он же в разделе вопросов было бы забавно такое увидеть в наработках
17

» WarCraft 3 / ЕвентУрона

Clamp:
прежде чем написать я перерыл и эти наработки,вы даже наверно не смотрели на код а тыкнули в в статичный отлов урона а мне нужен индивидуальный динамический отлов обрабатываемый структурой