SteamDB

» » Wiremod Expression 2. Всё о голограммах

Wiremod Expression 2. Всё о голограммах

Wiremod Expression 2. Всё о голограммах


Вступление



Приветствую, читатель. В этом руководстве я бы хотел рассказать тебе обо всем, что касается создания голограмм в Гаррис моде. Я покажу все функции, которые участвуют в создании голограмм, а также продемонстрирую небольшой пример создания минигана, который будет заменять нам физган (ну не совсем заменять, но об этом позже :D).-------------------------Если кто-то не знает, как открыть Expression 2---------------------------------------Для начала нам понадобится скачать из воркшопа аддон Wiremod: http://steamcommunity.com/sharedfiles/filedetails/?id=160250458. В этот аддон включен Expression 2, язык программирования, с помощью которого мы и будем создавать голограммы.После того, как аддон скачан, необходимо запустить игру, открыть Q-меню, справа сверху выбрать вкладку "Wire", далее найти папку "Chips, Gates" и уже выбрать пункт "Expression 2". Далее справа нажимаем кнопку New Expression.Wiremod Expression 2. Всё о голограммахПеред нами появляется окно Expression 2, в котором мы и будем программировать наш чип на создание голограмм.Wiremod Expression 2. Всё о голограммах-----------------------------------------------------------------------------------------------------------------------------Хочу добавить, что урок рассчитан все-таки на людей, хоть что-то умеющих делать на Е2, так что базовые действия я комментировать не буду. Если что-то не понятно, спрашивайте в комментариях.Приятного изучения голограмм :)





Что такое, с чем едят?



Собственно, голограммы - это объекты, которые можно увидеть, но нельзя потрогать. У них нет физики, поэтому если просто создать голограмму, она останется висеть в воздухе. Если хочется, например, создать физику падения, придется прописывать это в коде отдельно. Голограммы можно прикреплять к другим голограммам, пропам, даже игрокам (миниган в конце как раз и будет примером).





Список функций



Итак, вот список функций с их подробным описанием:
Функция Возвращает значение Описание
holoEntity(N) Энтити Возвращает энтити голограммы с указанным индексом
holoIndex(E) Число Возвращает индекс голограммы по указанной энтити голограммы
holoCanCreate() Число Возвращает 1, когда holoCreate() успешно создала новую голограмму, до тех пор, пока не достигнут лимит голограмм на сервере. Заменяет holoRemainingSpawns()
holoRemainingSpawns() Число Возвращает количество голограмм, которые игрок еще может создать
holoCreate(N,V,V,A,V,S) Энтити Создает новую голограмму с параметрами: Индекс, Позиция, Размер, Угол, Цвет, Модель. Если модель указана неправильно или не указана вовсе, то устанавливается дефолтная модель - куб
holoCreate(N,V,V,A,V) Энтити Создает новую голограмму с параметрами: Индекс, Позиция, Размер, Угол, Цвет
holoCreate(N,V,V,A) Энтити Создает новую голограмму с параметрами: Индекс, Позиция, Размер, Угол
holoCreate(N,V,V) Энтити Создает новую голограмму с параметрами: Индекс, Позиция, Размер
holoCreate(N,V) Энтити Создает новую голограмму с параметрами: Индекс, Позиция
holoCreate(N) Энтити Создает новую голограмму с параметром: Индекс
holoDelete(N) - Удаляет голограмму с указанным индексом
holoDeleteAll() - Удаляет все голограммы владельца чипа
holoScale(N,V) - Устанавливает размеры голограммы с заданным индексом по заданному вектору
holoScale(N) Вектор Возвращает размеры голограммы с указанным индексом
holoScaleUnits(N,V) - Устанавливает размеры голограммы с заданным индеском по заданному вектору в единицах Гаррис Мода
holoScaleUnits(N) Вектор Возвращает размеры голограммы с указанным индексом
holoPos(N,V) - Устанавливает позицию голограммы с указанным индексом
holoColor(N,V,N) - Устанавливает цвет и прозрачность голограммы с указанным индексом
holoColor(N,V) - Устанавливает голограммы с указанным индексом
holoAlpha(N,N) - Устанавливает прозрачность голограммы с указанным индексом
holoShadow(N,N) - Регулирует отображение тени голограммы: 0 - отключить отбрасывание тени, 1 - включить
holoAng(N,A) - Устанавливает угол голограммы с указанным индексом
holoModel(N,S,N) - Устанавливает модель, а также номер скина голограммы с указанным индексом
holoModel(N,S) - Устанавливает модель голограммы с указанным индексом
holoSkin(N,N) - Меняет скин голограммы с указанным индексом
holoMaterial(N,S) - Устанавливает материал голограммы с указанным индексом
holoBodygroup(N,N,N) - Устанавливает основную и побочную группы голограммы с указанным индексом
holoBodygroups(N,N) Число Возвращает количество побочных групп указанной основной группы голограммы с указанным индексом
holoDisableShading(N,N) - Отключает/Включает шейдинг голограммы с указанным индексом
holoRenderFX(N,N) - Устанавливает режим отображения голограммы с указанным индексом
holoParent(N,N) - Привязывает голограмму с первым индексом к голограмме со вторым индексом
holoParent(N,E) - Привызывает голограмму с указанным индексом к энтити
holoParentAttachment(N,E,S) Энтити Привызывает голограмму с указанным индексом к указанной части энтити
holoUnparent(N) - Снимает любые привязки с голограммы с указанным индексом
holoClipEnabled(N,N) - Включает/выключает возможность разреза голограммы голограммы с указанным индексом
holoClipEnabled(N,N,N) - Аналогично предыдущей функции, но в данном случае есть возможность манипулирования разным количеством разрезов
holoClip(N,V,V,N) - Определяет, как будет разрезаться голограмма. Первый вектор - позиция разреза, второй - направление. Четвертый параметр определяет, будет ли разрез относительно глобальных или локальных векторов
holoClip(N,N,V,V,N) - Аналогично предыдущей функции, но эта функция позволяет выбирать определенный разрез для голограммы (второй параметр)
holoClipsAvailable() Число Возвращает количество возможных разрезов голограммы с указанным индексом
holoVisible(N,E,N) - Включает/Выключает отображение голограммы с указанным индексом для указанного энтити
holoVisible(N,R,N) - Включает/Выключает отображение голограммы с указанным индексом для указанного всех игроков в массиве R





Список моделей для голограмм



Здесь указаны базовые модели голограмм с их названиями, которые нужно будет вставить в функции holoCreate() или holoModel().
Низкополигональные голограммы:
Wiremod Expression 2. Всё о голограммахcone Wiremod Expression 2. Всё о голограммахcube Wiremod Expression 2. Всё о голограммахcylinder Wiremod Expression 2. Всё о голограммахhexagon
Wiremod Expression 2. Всё о голограммахicosphere Wiremod Expression 2. Всё о голограммахicosphere2 Wiremod Expression 2. Всё о голограммахicosphere3 Wiremod Expression 2. Всё о голограммахoctagon
Wiremod Expression 2. Всё о голограммахplane Wiremod Expression 2. Всё о голограммахprism Wiremod Expression 2. Всё о голограммахpyramid Wiremod Expression 2. Всё о голограммахright_prism
Wiremod Expression 2. Всё о голограммахsphere Wiremod Expression 2. Всё о голограммахsphere2 Wiremod Expression 2. Всё о голограммахsphere3 Wiremod Expression 2. Всё о голограммахtetra
Wiremod Expression 2. Всё о голограммахtorus Wiremod Expression 2. Всё о голограммахtorus2 Wiremod Expression 2. Всё о голограммахtorus3
Высокополигональные голограммы:
Wiremod Expression 2. Всё о голограммахhq_cone Wiremod Expression 2. Всё о голограммахhq_cubinder Wiremod Expression 2. Всё о голограммахhq_cylinder Wiremod Expression 2. Всё о голограммахhq_dome
Wiremod Expression 2. Всё о голограммахhq_hdome Wiremod Expression 2. Всё о голограммахhq_hdome_thick Wiremod Expression 2. Всё о голограммахhq_hdome_thin Wiremod Expression 2. Всё о голограммахhq_icosphere
Wiremod Expression 2. Всё о голограммахhq_rcube Wiremod Expression 2. Всё о голограммахhq_rcube_thick Wiremod Expression 2. Всё о голограммахhq_rcube_thin Wiremod Expression 2. Всё о голограммахhq_rcylinder
Wiremod Expression 2. Всё о голограммахhq_rcylinder_thick Wiremod Expression 2. Всё о голограммахhq_rcylinder_thin Wiremod Expression 2. Всё о голограммахhq_sphere Wiremod Expression 2. Всё о голограммахhq_stube
Wiremod Expression 2. Всё о голограммахhq_stube_thick Wiremod Expression 2. Всё о голограммахhq_stube_thin Wiremod Expression 2. Всё о голограммахhq_torus Wiremod Expression 2. Всё о голограммахhq_torus_thick
Wiremod Expression 2. Всё о голограммахhq_torus_thin Wiremod Expression 2. Всё о голограммахhq_tube Wiremod Expression 2. Всё о голограммахhq_tube_thick Wiremod Expression 2. Всё о голограммахhq_tube_thin
Модели можно использовать любые, которые доступны в вашем Q-меню, а не только те базовые, которые указаны выше. Для этого нужно в Q-меню правой кнопкой мыши нажать на модель, выбрать Copy to Clipboard, а затем вставить в ваш код.





Некоторые разъяснения



Базовые параметры голограммы:
  • Базовый вид голограммы - белый куб, модель "cube".
  • Базовое положение - позиция чипа, породившего голограмму.
  • Угол голограммы соответствует углу чипа, под которым он находился в момент создания или обновления.





Создаем миниган



В данном уроке я создам миниган, который наш персонаж будет держать в руках, когда он держит физган, и который будет висеть за спиной, если выбрано другое оружие. Я использую почти все функции, указанные в руководстве, так что вам будет легче понять на практике работу каждой из этих функций. Начнем:
@name minigun@persist [E O Base Pivot]:entity I NumHolo Hold T Roll
Для начала объявим необходимые нам переменные:E - наш Е2 чипO - владелец чипа, то есть мыBase - базовая голограмма, к которой будут крепиться остальныеPivot - голограмма, которая будет крепиться к рукам нашего персонажаI - счетчикNumHolo - количество наших голограммHold - проверка на то, какое оружие у нас в рукахT - переменная, необходимая нам для вычета угла вращенияRoll - проверка на нажатие ПКМ
runOnTick(1)if(first()){ E=entity() O=owner() Pivot=holoCreate(0) holoParent(0,E) holoAlpha(0,0) Base=holoCreate(1,E:pos(),vec(0.75,0.75,4),ang(90,0,0),vec(200),"hq_tube") holoParent(1,0) I = 2 NumHolo = 15 Hold=1
Мы создали первые две голограммы. Переменной Pivot присвоили энтити нулевой голограммы, чтобы потом закрепить ее там, где нам будет удобно. Выставили значение прозрачности в 0, потому что ее видимость нам не нужна. Вторая голограмма,наоборот, видна нам и имеет модель трубы. По этой голограмме мы будем выравнивать остальные. Привязали ее к нулевой голограмме. Далее выставили значения переменных, которые будут участвовать в создании последующих голограмм.
function entity holoStyle(Index,Position:vector,Scale:vector,Angle:angle,Colour:vector,Model:string) { holoPos(Index,Position) holoScale(Index,Scale) holoAng(Index,Angle) holoColor(Index,Colour) holoModel(Index,Model) return holoEntity(Index) }}
Здесь я объявил пользовательскую функцию, которая, как можно заметить, по конструкции идентична holoCreate(). Я сделал так, потому что ниже будет проверяться количество голограмм, которые я могу создать, а для этого я просто создам голограммы без их стилизации.
elseif(I <= NumHolo & holoCanCreate() & I > 0){ holoCreate(I) holoScale(I,vec()) I++ }
Собственно, проверка на количество возможных создаваемых голограмм.
elseif(I > NumHolo & I > 0){ holoStyle(2,Base:toWorld(vec(0,6,0)),vec(0.1,0.1,4),Base:toWorld(ang()),vec(150),"hq_tube") holoStyle(3,Base:toWorld(vec(0,-6,0)),vec(0.1,0.1,4),Base:toWorld(ang()),vec(150),"hq_tube") holoStyle(4,Base:toWorld(vec(6,0,0)),vec(0.1,0.1,4),Base:toWorld(ang()),vec(150),"hq_tube") holoStyle(5,Base:toWorld(vec(-6,0,0)),vec(0.1,0.1,4),Base:toWorld(ang()),vec(150),"hq_tube") holoStyle(6,Base:toWorld(vec(4,4,0)),vec(0.1,0.1,4),Base:toWorld(ang()),vec(150),"hq_tube") holoStyle(7,Base:toWorld(vec(4,-4,0)),vec(0.1,0.1,4),Base:toWorld(ang()),vec(150),"hq_tube") holoStyle(8,Base:toWorld(vec(-4,4,0)),vec(0.1,0.1,4),Base:toWorld(ang()),vec(150),"hq_tube") holoStyle(9,Base:toWorld(vec(-4,-4,0)),vec(0.1,0.1,4),Base:toWorld(ang()),vec(150),"hq_tube") holoStyle(10,Base:toWorld(vec(0,0,-18)),vec(1.2,1.2,0.75),Base:toWorld(ang()),vec(150),"hq_cylinder") holoStyle(11,Base:toWorld(vec(0,0,20)),vec(1.3,1.3,1),Base:toWorld(ang()),vec(150),"hq_cylinder") holoStyle(12,Base:toWorld(vec(-3,-10,23)),vec(0.1,0.1,0.5),Base:toWorld(ang(0,0,90)),vec(150),"hq_cylinder") holoStyle(13,Base:toWorld(vec(-2,0,25)),vec(0.25,0.25,1.75),Base:toWorld(ang(30,0,0)),vec(150),"cube") holoStyle(14,Base:toWorld(vec(2,0,28)),vec(0.2,0.2,0.2),Base:toWorld(ang(0,0,90)),vec(150),"hq_torus") holoStyle(15,Base:toWorld(vec(2,0,28)),vec(0.05,0.05,0.1),Base:toWorld(ang(-60,0,0)),vec(150),"cube")
Здесь я просто начал создавать и выравнивать голограммы. По сути миниган уже сделан, но мы не можем его еще держать в руках.
for(I=2,9){ holoParent(I,10) } for(I=10,NumHolo){ holoParent(I,Base) } I=0
Прикрепляем голограммы друг к другу. Я сделал два отдельных цикла, потому что мы позже сделаем так, чтобы миниган был не просто моделькой, но и вполне работающим и очень опасным оружием :D
}elseif(I==0){ if(O:weapon():type()=="weapon_physgun"){ O:weapon():setAlpha(0) Hold=0 } else{ Hold=1 O:weapon():setAlpha(255) }
Тут мы просто делаем прозрачным наш физган, чтобы он не портил вид, а заодно делаем проверку на ношение необходимого нам оружия.
if($Hold){ if(Hold==0){ holoPos(0,O:attachmentPos("anim_attachment_RH")) holoAng(0,O:attachmentAng("anim_attachment_RH")) holoParentAttachment(0,O,"anim_attachment_RH") holoAng(1,Pivot:toWorld(ang(80,-12,180))) holoPos(1,Pivot:toWorld(vec(28,-6,7))) } elseif(Hold==1){ holoPos(0,O:attachmentPos("chest")) holoAng(0,O:attachmentAng("chest")) holoParentAttachment(0,O,"chest") holoAng(1,Pivot:toWorld(ang(0,0,0))) holoPos(1,Pivot:toWorld(vec(-16,0,0))) } }}
В этом блоке мы привязываем наш миниган к нашим рукам, если сейчас у нас используется физган, или к груди, если используется любое другое оружие.
T=(T+10)%360Roll=O:keyAttack2()if(Roll&!Hold){ holoAng(10,holoEntity(10):toWorld(ang(0,T,0)))#ifdef entity:shootTo(vector,vector,number,number,number,string)holoEntity(10):shootTo(holoEntity(10):pos()-holoEntity(10):forward()*5,O:aimPos()-holoEntity(2):pos()-vec(0,0,30),0,0,0,"toolTracer")#endif holoEntity(10):soundPlay(1,0.3,"weapons/minigun/gunfire/minigun_fire.wav")}
Здесь мы прописываем код стрельбы и вращения стволов нашего минигана. KeyAttack2 - это клавиша ПКМ.*ВНИМАНИЕ* Для использования функции ShootTo вам необходим Health Core или же аддон E2Power. Если таковых нет, то просто закомментируйте эту функцию. В этом случае миниган просто не будет стрелять.





Результат



Wiremod Expression 2. Всё о голограммах Wiremod Expression 2. Всё о голограммах
Wiremod Expression 2. Всё о голограммах Wiremod Expression 2. Всё о голограммах
Wiremod Expression 2. Всё о голограммах





Подведем итоги



В данном руководстве мы рассмотрели все функции, позволяющие нам создать голограммы в Garry's Mod'е, увидели их практическое применение. Если вам что-то оказалось сложным, либо вы не знаете каких-то функций, использованных в создании минигана, пишите в комментарии или в личку, все расскажу и покажу. Прошу вас также указать на какие-то ошибки, допущенные в руководстве, или на ошибочный перевод.Таблица функций и картинки базовых моделей взяты с официальной вики Wiremod: http://wiki.wiremod.com/wiki/Expression_2Добавляйте руководство в избранное, чтобы иметь в игре быстрый доступ к функциям создания голограмм.



скачать dle 10.6фильмы бесплатно