Среда, 01.04.2020, 05:15
РОССИЯ
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » ↓ Другое ↓ » Маппинг » создание ломающих ваз и разбивающихся бутылок
создание ломающих ваз и разбивающихся бутылок
Paho  Дата: Суббота, 11.02.2012, 14:27 | Сообщение # 1
Глав.адм
Сообщений: 2417
Репутация: 1515
Награды: 166
Ломающиеся вазы

Итак, для создания вазы, которая ломается при одном тычке, нам потребуется :



Работа в Radiant :

Шаг 1: Добавляем модель вазы ( 2d-misc - model (xmodel/egypt_prop_vase5 )). Далее выделяем её, тыркаем 2d-script-brushmodel. Оставляем вазу в покое.

Шаг 2: Добавляем триггер таким образом, чтобы он обвалакивал поверхность вазы, то бишь по размерам чуть- чуть ее превосходил. Далее преобразуем каждый триггер в (2d - trigger - trigger damage). Далее присваивайте триггеру имя (при выделенном триггере жмёте N и вводите : Key - targetname; value - vase. Готово. Можете обрезать триггер и подогнать под нужные вазе размеры.

Шаг 3: Теперь помещаем триггер над вазой и делаем следующее. Выделяем сначала триггер, затем вазу и жмём W . Должна появиться строго перпендикулярная стрелочка (см. рисунок). Посередине вазы должно появиться что то типа звёздочки.

Шаг 4: Поместите готовый триггер поверх вазы.

Шаг 5: Путём копирования наклепайте ваз сколько вам надобно

Работа в Риданте закончена, рассмотрим скрипты:

main()
{
        thread breaking_vases
();
}

breaking_vases
()
{
    level
._effect["vase_break"]= loadfx ("fx/props/vase_water.efx");
    precacheModel
("xmodel/egypt_prop_vase_br5");
    precacheModel
("xmodel/egypt_prop_vase_br1");
    precacheModel
("xmodel/egypt_prop_vase_br3");
    precacheModel
("xmodel/egypt_prop_vase_br6");
    precacheModel
("xmodel/egypt_prop_vase_br4");
    vtrig
= getentarray ("vase","targetname");
   
for(i=0; i<vtrig.size; i++) vtrig[i] thread vase_think();
}

vase_think
()
{
   
self waittill ("trigger");
   
//iprintlnbold ("vase broken!");
    vase
= getentarray(self.target,"targetname");
   
for(v=0; v<vase.size; v++) vase[v] thread vase_break();
    wait
.5;
   
selfdelete();
}

vase_break
()
{
    playfx
(level._effect["vase_break"],(self.origin +(0,0,37)));
    playfx
(level._effect["vase_break"],(self.origin +(0,0,20)));
    deadvase
= spawn("script_model",self.origin);
    deadvase setmodel
("xmodel/egypt_prop_vase_br5");  // green vase broken bottom

    vase1
= spawn("script_model",(self.origin +(0,0,30)));
    vase1 setmodel
("xmodel/egypt_prop_vase_br1");
    vase1 rotatevelocity
((250,-250, randomfloat(100)),1.2,0,.5);
    vase1 moveGravity
((0,21,39),.27);

    vase2
= spawn("script_model",(self.origin +(0,10,20)));
    vase2 setmodel
("xmodel/egypt_prop_vase_br3");
    vase2 rotatevelocity
((250,-250, randomfloat(100)*1),1,0,.5);
    vase2 moveGravity
((0,21,39),.25);

    vase3
= spawn("script_model",(self.origin +(0,-10,20)));
    vase3 setmodel
("xmodel/egypt_prop_vase_br6");
    vase3 rotatevelocity
((-250,250, randomfloat(100)*1),1.1,0,.5);
    vase3 moveGravity
((0,-21,39),.25);

    vase4
= spawn("script_model",(self.origin +(10,0,20)));
    vase4 setmodel
("xmodel/egypt_prop_vase_br4");
    vase4 rotatevelocity
((250,-250, randomfloat(100)*1),.95,0,.5);
    vase4 moveGravity
((21,0,39),.25);

   
selfdelete();
    deadvase playsound
("bullet_large_vase");
    wait
10;
    vase1
delete();
    vase2
delete();
    vase3
delete();
    vase4
delete();
   
//iprintlnbold ("vase dead!");
}
Разбивающиеся бутылки

Работа в радианте производиться аналогично вышеописанному способу. Моделью служит xmodel\prop_winebottle_breakable и триггеру присваивается targetname - bottle. Скрипт такой :

main()
{
        thread breaking_bottles
();
}

breaking_bottles
()
{
    level
._effect["bottle_break"]= loadfx ("fx/props/wine_bottle.efx");
    precacheModel
("xmodel/prop_winebottle_broken_bot");
    precacheModel
("xmodel/prop_winebottle_broken_top");
    vtrig
= getentarray ("bottle","targetname");
   
for(i=0; i<vtrig.size; i++) vtrig[i] thread bottle_think();
}
bottle_think
()
{
   
self waittill ("trigger");
   
//iprintlnbold ("vase broken!");
    vase
= getentarray(self.target,"targetname");
   
for(v=0; v<vase.size; v++) vase[v] thread bottle_break();
    wait
.5;
   
selfdelete();
}
bottle_break
()
{
    playfx
(level._effect["bottle_break"],(self.origin +(0,0,37)));
    playfx
(level._effect["bottle_break"],(self.origin +(0,0,20)));
    deadvase
= spawn("script_model",self.origin);
    deadvase setmodel
("xmodel/prop_winebottle_broken_bot");  // green vase broken bottom

    vase1
= spawn("script_model",(self.origin +(10,0,20)));
    vase1 setmodel
("xmodel/prop_winebottle_broken_top");
    vase1 rotatevelocity
((250,-250, randomfloat(100)*1),.95,0,.5);
    vase1 moveGravity
((21,0,39),.25);

   
selfdelete();
    deadvase playsound
("bullet_large_glass");
    wait
10;
    vase1
delete();
   
//iprintlnbold ("vase dead!");
}

Форум » ↓ Другое ↓ » Маппинг » создание ломающих ваз и разбивающихся бутылок
  • Страница 1 из 1
  • 1
Поиск:


 site made by Paho & SplinterCell 2011-2020 | Создать бесплатный сайт с uCoz Сайт оптимизирован под браузеры: Chromium, Google Chrome, Opera
Дизайн данного сайта полностью принадлежит администратору сайта.