Сповіщення
Очистити все

Space restrictor


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 

Початок


Значить, розпаковуємо алл.спавн за допомогою ACDC ... Розпакували. Відкриємо, наприклад, alife_l02_garbage.ltx. Наприкінці допишемо:

 
[ 2145 ]
 ; cse_abstract 
properties section_name = space_restrictor 
name = sgm_kvest 
position = 41.297409057617 , 0.44233170151711 , -299.86953735352 direction = 0 , 0 _ 
 
 
; cse_alife_object properties 
game_vertex_id = 253 distance = 0 level_vertex_id = 214760 object_flags = 0xffffff3e custom_data = <<END [ logic ] active = sr_idle [ sr_idle ] on_actor_inside =  %+ 
 
 






END
 
; cse_shape 
properties shapes = shape0 shape0 
: type = box shape0 
: axis_x = 6.5 , 0,0 shape0 
: axis_y = 0 , 6.5 , 0 
shape0 
: axis_z = 0 , 0 , 6,5 sha ; _ _ _ _ cse_alife_space_restrictor properties restrictor_type = 3    

 
 

Де

[ 2145 ] - порядковий номер 
. ) game_vertex_id = - геймвертекс level_vertex_id = - левелвертекс




Якщо ви хочете зробити сферичний space_restrictor, то замість

shape0:axis_x = 6.5,0,0 
shape0:axis_y = 0,6.5,0
shape0:axis_z = 0,0,6.5
shape0:offset = 0,0,0

пишемо:

shape0:offset = 0,0,0 
shape0:radius = 44.6438484191895

Примітка: координати спавна, game_vertex_id та level_vertex_id можна отримати за допомогою наступної функції:

 
function main_menu:OnButton_credits_clicked ( ) 
if level.present ( )  and  ( db.actor ~= nil )  and db.actor:alive ( )  then 
	local vid = db.actor:level_vertex_id ( ) 
	local gvid = db.actor:game_vertex_id ( ) 
	local a = db.actor:position ( ) 
	local text = "Позиція: \ nX = " ..ax. \ \ nY = " ..ay. \ \ nZ = " ..az. \\ nlevel_vertex_id = " ..vid.. " \\ ngame_vertex_id = " ..gvid
	news_manager.send_tip ( db.actor, text, nil , nil , 30000 ) 
	self:OnButton_return_game ( ) 
end 
end
 

просто допишіть її в ui_main_menu.script, наприкінці.

Логіка

Видача infoportions

Тепер логіка для рестриктора:

 
[ logic ]
 active = sr_idle
 
[ sr_idle ]
 on_actor_inside =  %+ім'я інфопоршня%
END
 

З такою логікою рестриктор видаватиме РР інфопоршень.

Ефекти викиду

 
[ logic ]
 active = sr_idle
 
[ sr_idle ]
 on_timer = 100000 | %=start_small_reject% sr_idle2 
 
[ sr_idle2 ]
 on_timer = 100000 | %=start_small_reject% sr_idle 
END
 

Така логіка запускатиме кожні 100 сек. ефекти викиду.

Перевірка на наявність та видача infoportion

 
[ logic ]
 active = sr_idle
 
[ sr_idle ]
 on_actor_inside = { + test_condition } nil % + test_result % 
END
 

{+test_condition} - це перевірка (умова) наявності ГГ інфопоршня test_condition . Якщо ГГ даний інфопоршень є, то рестриктор видасть новий інфопоршень ( test_result ).

Shapes

Рухаємо далі.
shapes = тут вписуємо назви шейпів

Приклад:

shapes = shape0
shape0:type = – це тип шейпа. Встановити або box,або sphere. 
box - коробка
sphere - сфера
 
shape0:axis_x = ваша цифра,0,0
shape0:axis_y = 0,ваша цифра,0
shape0:axis_z = 0,0,ваша цифра
- це розміри шейпа.
 
restrictor_type – тип рестриктру.

Про тип рестрикторів можна докладно переглянути тут: Resrtictor type .
Ну ось і все. Думаю все чітко і ясно. Будуть запитання звертайтеся.
ПС: дякую р-09 за пояснення деяких моментів з логікою.


   
Цитата