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

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

Ответ
 
влад10011

offline
Опыт: 2,337
Активность:
Отдаю библиотеки
1) Библиотека ускорения юнитов

Описание: Позволяет ускорять юнитов, делая их скорость выше 522.
Плюсы\Минусы:
Плюсы: Позволяет ускорять юнитов, без бага "Что юнит крутиться вокруг 1 точки"
Минусы: Иногда, юнит после остановки поворачивается на случайный угол(причина этого бага неизвестна)

2) Библиотека "Имитирования Баша(стана,оглушения) (одно и тоже)
Описание: Ну в общем название говорит само за себя...
Плюсы\Минусы:
Плюсы: Позволяет не вызывать каждый раз дамми, с абилкой стана, или что то подобное, а сразу только указать юнит и время стана и всё.
Минусы --------------------(не нашёл)
----------------------------------------------------------------------------------------------
Подробная информация, а так же примеры(как можно применить данные библиотеки) в карте.
----------------------------------------------------------------------------------------------
Тем кому лень качать(или просто посмотреть):
» Ускорение
Код:
//==================AddSpeedLib v.1.00================
/*
Функция: AddUnitSpeed(unit u,real speed):
Добавляет скорость указанному юниту, возвращает добавленную ему скорость.

Функция: RemoveSpeed(unit u):
Удаляет ускорение у юнита,возвращает true, при успехе или false, если он небыл ускорен.
*/

library AddMoveSpeed {

define {
private MaxSpeed=2500.00 //Менять не советуется тк могут быть баги(это максимальная скорость)
private PI=3.14159 //PI и E стандартные бж константы
private E=2.71828
private il=0.693147
private Form(i)=SquareRoot((((((i/PI)/E)/E)/E)*il)*1.10) //формула взята с потолка =§
//================================================================================  ===
private void=nothing
private ifloop=exitwhen
private H2I(h)=GetHandleId(h)
}

globals
private integer C=0
private unit array Unit[1001]
private real array StartSpeed[1001],AddSpeed[1001],X[1001],Y[1001]
private timer Timer=CreateTimer()
private hashtable Hash=InitHashtable()
endglobals

private real GetSpeedAdd(real speed,real as,unit u) {
real sp=speed+as,sp2=522.00-speed,sp3=0.00
if speed<522.00 and sp>522.00
       SetUnitMoveSpeed(u,speed+sp2)
       sp3=as-sp2
     return Form(sp3)
else
if as>522.00
       SetUnitMoveSpeed(u,522.00)
endif
     return Form(sp)
endif
     return 0.00
}

private void Remove(integer i) {
       SetUnitMoveSpeed(Unit[i],StartSpeed[i])
       RemoveSavedInteger(Hash,H2I(Unit[i]),H2I(Unit[i]))
       FlushChildHashtable(Hash,H2I(Unit[i]))
if i!=C
       Unit[i]=Unit[C]
       AddSpeed[i]=AddSpeed[C]
       X[i]=X[C]
       Y[i]=Y[C]
       StartSpeed[i]=StartSpeed[C]
endif
C--
}

private void PerMove() {
integer i=1
loop
if GetWidgetLife(Unit[i])>0.450 {
if X[i]!=GetUnitX(Unit[i]) or Y[i]!=GetUnitY(Unit[i])
if SquareRoot((GetUnitX(Unit[i])-X[i])*(GetUnitX(Unit[i])-X[i])+(GetUnitY(Unit[i])-Y[i])*(GetUnitY(Unit[i])-Y[i]))>AddSpeed[i] {
real x=GetUnitX(Unit[i])+AddSpeed[i]*Cos(GetUnitFacing(Unit[i])*bj_DEGTORAD)
real y=GetUnitY(Unit[i])+AddSpeed[i]*Sin(GetUnitFacing(Unit[i])*bj_DEGTORAD)
    SetUnitX(Unit[i],x)
    SetUnitY(Unit[i],y)
    X[i]=GetUnitX(Unit[i])
    Y[i]=GetUnitY(Unit[i])
     }
endif
else
     Remove(i)
}
i++
if C==0
   PauseTimer(Timer)
endif
ifloop i>C
endloop
}

//Удаляет ускорение у юнита,возвращает тру при успехе или фолс если он небыл ускорен.
boolean RemoveSpeed(unit u) {
if HaveSavedInteger(Hash,H2I(u),H2I(u))==true
Remove(LoadInteger(Hash,H2I(u),H2I(u)))
return true
else
return false
endif
}

//Добавляет юниту скорость
real AddUnitSpeed(unit u,real speed) {
if HaveSavedInteger(Hash,H2I(u),H2I(u))==true
DisplayTextToPlayer(GetOwningPlayer(u),0.00,0.00,"Чтобы добавить новую скорость к юниту,сначала удалите старую.")
endif
if C<=1000 and HaveSavedInteger(Hash,H2I(u),H2I(u))==false and IsUnitType(u,UNIT_TYPE_STRUCTURE)==false
if(speed>MaxSpeed){speed=MaxSpeed}
    C++
     SaveInteger(Hash,H2I(u),H2I(u),C)
    Unit[C]=u
     StartSpeed[C]=GetUnitDefaultMoveSpeed(u)
    AddSpeed[C]=GetSpeedAdd(GetUnitMoveSpeed(u),speed,u)
     X[C]=GetUnitX(u)
    Y[C]=GetUnitY(u)
if C==1
TimerStart(Timer,0.000914159,true,function PerMove) //Этот периуд выбран чтобы отслеживать
     endif                                          //каждое движение юнита
endif
if C==1001
DisplayTextToPlayer(GetOwningPlayer(u),0.00,0.00,"Количество ускореных юнитов, превысело допустимое число!")
endif
return AddSpeed[C]
}

}

» Баш
Код:
/*
Вызывать функцию стана: BashUnit(unit u,real time)
*/
library BASH initializer Init {
define {
private Hash=HashBASH
private void=nothing
private H2I(h)=GetHandleId(h)
private KillId(k)=FlushChildHashtable(Hash,k)
}

globals
private integer C=0
private unit array Unit
private real array Time,RealTime,TimeBuff
private timer Timer=CreateTimer()
public hashtable HashBASH=InitHashtable()
endglobals

private void Per() {
integer i=1
loop
if RealTime[i]<=Time[i] and GetWidgetLife(Unit[i])>0.450 {
      IssueImmediateOrderById(Unit[i],851972)
      RealTime[i]=RealTime[i]+0.001
      TimeBuff[i]=TimeBuff[i]+0.001
if TimeBuff[i]>=0.43 //Время анимации стана
      DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget.mdl",Unit[i],"overhead"))
      TimeBuff[i]=0.00
endif
else
      RemoveSavedInteger(Hash,H2I(Unit[i]),H2I(Unit[i]))
      KillId(H2I(Unit[i]))
if i!=C {
      Unit[i]=Unit[C]
      RealTime[i]=RealTime[C]
      Time[i]=Time[C]
      TimeBuff[i]=TimeBuff[C]
        }
C--
}
if C==0 {
PauseTimer(Timer)
}
i++
exitwhen i>C
endloop
 }

void BashUnit(unit u,real time) {
real tim=0.00
if HaveSavedInteger(Hash,H2I(u),H2I(u))==false
       C++
       Unit[C]=u
       SaveInteger(Hash,H2I(u),H2I(u),C)
if(time<0.001){tim=0.001}else{tim=time}
       Time[C]=tim
       RealTime[C]=0.00
       TimeBuff[C]=0.00
       DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget.mdl",Unit[C],"overhead"))
if C==1
       TimerStart(Timer,0.001,true,function Per)
endif
     endif
}

private void Init() {
    Preloader("Abilities\\Spells\\Human\\Thunderclap\\ThunderclapTarget.mdl")
}

}
Прикрепленные файлы
Тип файла: w3x AddSpeedLib.w3x (21.0 Кбайт, 25 просмотров )
Тип файла: w3x StunLib.w3x (14.0 Кбайт, 22 просмотров )

Отредактировано влад10011, 13.10.2012 в 16:55.
Старый 13.10.2012, 16:46
влад10011

offline
Опыт: 2,337
Активность:
Аргументируйте минусы чтоле =_=
Опять написал сплошной\кривой код или просто личная неприязнь?

Отредактировано влад10011, 14.10.2012 в 16:59.
Старый 14.10.2012, 10:34
insane88
hail xgm
offline
Опыт: 2,228
Активность:
а я плюсану, имитация стана годная тема.
Старый 14.10.2012, 11:34
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
влад10011, баш с помощью дамми почти бесполезен, во первых есть обычный пассивный баш, во вторых есть PauseUnit, и аура замедления торнадо, можно было и по практичнее написать...
Не говоря о приказах, которыми можно имитировать баш, так то библиотека хлам...
Старый 14.10.2012, 17:10
влад10011

offline
Опыт: 2,337
Активность:
Цитата:
Сообщение от quq_CCCP
баш с помощью дамми почти бесполезен, во первых есть обычный пассивный баш, во вторых есть PauseUnit, и аура замедления торнадо, можно было и по практичнее написать...
Не говоря о приказах, которыми можно имитировать баш, так то библиотека хлам...

1)Для пассивного баша нужен дамми юнит....
2)PauseUnit не имеет даже намёка на баш(тк у юнита исчезает интерфейс и тд)
3)Торнадо, опять же нужен дамми(или нужно делать самому спелл и давать его цели) и оно не сможет кого-либо остановить.
4)Те самые приказы которые имитируют баш идентичны приказу стоп(851972)
Старый 14.10.2012, 17:55
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
влад10011, все делается примитивно, без всяких дамми юнитов, переодически отдаём приказ стоп, и скорость анимации на 0, все юнит в баше...
quq_CCCP добавил:
влад10011, и кстати, я про бафф с помощью ауры торнадо, его замедление тут никакой роли не играет...
Старый 14.10.2012, 18:18
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Библиотека скорости не учитывает возможности приложения n+ модификаторов скорости на одного юнита, сразу мимо.
Нет иконки в статус-строке, минус.
Сильно перегрузил систему, но тут уж каждый индус по-своему, не минус, так, замечание.
Плюс ты используешь эффект замедления вместо стана, как так можно вообще?
Clamp добавил:
И, кстати, лучше попробуй сделать модификатор скорости не выше 522 с возможностью мультиприложения к одному юниту с сохранением его исходной скорости.
Ну то есть у меня скорость 422, даю +150, потом -50 и получаю не 522, а 472. Потом еще замедление в процентах с изменением по времени и всё такое.
Старый 14.10.2012, 23:19
Doc

offline
Опыт: 63,163
Активность:
quq_CCCP, ты опять какой-то рандомный текст выдал, лучше выйди из темы, серьезно =(
влад10011, стан через стоп тоже говно, обосновываю:
  1. Приказ таки можно отдать, мгновенный.
  2. Можно поворачиваться.
  3. Нельзя отдать приказ который сам исполнится после баша.
quq_CCCP, прочитал твой второй пост и обосрался. Серьезно, откуда такие люди берутся?
Старый 14.10.2012, 23:43
youtube
сктыщь
offline
Опыт: 8,025
Активность:
quq_CCCP, я думаю тебе уже не раз об этом говорили, но... но я все же еще раз скажу: не электрик, нехер лезть.
Старый 15.10.2012, 00:48
Ответ

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

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

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

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



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