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

SoC. Не нескінченні болти


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

Отже, тут я опишу як продати болти які будуть закінчуватися. Відразу пишу про те, що робитимемо ґрунтуючись на гранатах, тобто не виключено, що болт може рвонути (не завдавши шкоди і тільки через тривалу ділянку часу, так що рр навряд чи буде по близькості.), а також, якщо кинемо болт під ноги НПСу, він шуганеться, як від гріни (це насправді непогано, якщо відключені очі на потилиці, можна спробувати їх таким чином відволікти).

Отже, почнемо.
Нам будуть потрібні такі файли:
gamedata\config\weapons\w_rgd5.ltx
gamedata\config\weapons\w_bolt.ltx
gamedata\config\misc\items.ltx
gamedata\scripts\escape_dialog.script
gamedata\scripts\bind_stal.

В першу чергу ліземо у файл w_bolt.ltx, там найперший рядок, який за щось відповідає:

[bolt]:identity_immunities

Змінюємо її ось так:

[old_bolt]:identity_immunities

Зберігаємо та закриваємо. Потім відкриваємо файл w_rgd5.ltx, спускаємося в самий низ і пишемо це:

 
[ bolt ] :grenade_rgd5 
 visual				 = weapons\bolt 
\ wpn_bolt.ogf inv_name			 = "
 Болт " inv_name_short		 = "			 Болт 
" inv_weight			 = 0.05 cost				 = 1 slot                                  = 5 hud					 = bolt_hud2 ef_weapon_type		 = 00000		 ; 3500 
 
 

 

 
 
attach_position_offset	 = -0.021 , -0.075 , 0.0 attach_angle_offset		 = 0 , 0 , 0 attach_bone_name		 = 
 

 
blast				 = 0 blast_r				 = 0 blast_impulse		 = 0 ; delete blast_impulse_factor = 1 
 
 

 
 
frags				 = 0 frags_r				 = 0 frag_hit			 = 0 frag_hit_impulse	 = 0 
 
 
 
 
;звуки 
snd_explode = monsters\biting\def_0     ;rgd5_explode 
snd_checkout = monsters\biting\def_0 
explode_particles	 = weapons\wg-hit-ground
 
inv_grid_width		 = 1 inv_grid_height		 = 1 inv_grid_x			 = 22 inv_grid_y			 = 6 
 
 
 
 
light_color		          = 0.0 , 0.0 , 0.0 light_range		          = 0.0 light_time 		          = 0.0 
 
 
 
[ bolt_hud2 ]
 fire_point           = 0.05 , 0.0 , 0.1 fire_bone            = bolt_0 orientation          = 0 , 0 , 0 position             = 0 , 0 , 0 visual               = weapons \ bolt \ wpn_bolt_hud.ogf 

 
 

 
throw_point			 = 0 , 0.4 , 0.3 throw_dir			 = 0 , 0 , 0 
 
 
anim_show			 = draw3 
anim_hide			 = holster_0 
anim_idle			 = idle_0 
anim_playing		 = idle_01 
anim_throw_begin	               = attack_0_begin 
anim_throw_idle		 = attack_0_idle 
anim_throw_act		 = attack_0_act	 
anim_		 _ _
 

Детально:

 
[ bolt ] :grenade_rgd5 ;--секція з посиланням на секцію grenade_rgd5 
visual				 = weapons\bolt\wpn_bolt.ogf ; --візуал, в даному випадку модель болта 
inv_name			 = "Болт "  ; --назва 
inv_name_sh		 назва болта лежачого землі inv_weight			 = 0.05 ;вага cost				 = 1 ;ціна за штуку slot                                  = 5 ;--слот для болта hud					 = bolt_hud2 ;--посилання на худий ef_weapon_type		 = 1 ; тип зброї (не міняти в жодному разі, можна зламати двигло) description			 = "Звичайний металевий болт" ;--опис предмета destroy_time		 = 5000000 ;3500 ; краще залишити як є, а так цей час через який болт пропаде 
  
  
  

  
 
 
 
attach_position_offset	 = -0.021 , -0.075 , 0.0 attach_angle_offset		 = 0 , 0 , 0 attach_bone_name		 = 
 

 
blast				 = 0 ; потужність вибуху, оскільки це болт, нехай буде 0 blast_r				 = 0 ; радіус вибуху blast_impulse		 = 0 ; імпульс від вибуху (відбивається на дальності відльоту туші від місця вибуху) ; delete blast_impulse_factor = 1  
  
  

 
 
frags				 = 0 ; у осколків frags_r				 = 0 ; радіус розльоту осколків frag_hit			 = 0 ; збиток від 1 осколка, що потрапив frag_hit_impulse	 = 0 ; імпульс від 1 осколка, що потрапив  
  
  
  
 
;звуки 
snd_explode = monsters\biting\def_0     ;rgd5_explode звук вибуху 
snd_checkout = monsters\biting\def_0 ;звук кидка 
explode_particles	 = weapons\wg-hit-ground ; партикл вибуху (у даному випадку поставлений партикл, що нічого не показує)
 
inv_grid_width		 = 1 inv_grid_height		 = 1 inv_grid_x			 = 22 inv_grid_y			 = 6  
 
 
 
 
light_color		          = 0.0 , 0.0 , 0.0 ;колір освітлення під час вибуху по RGB light_range		          = 0.0 ;насиченість на скільки я розумію light_time 		          = 0.0 ;час підсвічування  
  
  
 
[ bolt_hud2 ]  ;секція худа 
fire_point           = 0.05 , 0.0 , 0.1 fire_bone            = bolt_0 orientation          = 0 , 0 , 0 position             = 0 , 0 , 0 visual               = weapons\bolt\ wpn_bolt_hud.ogf 

 
 

 
throw_point			 = 0 , 0.4 , 0.3 throw_dir			 = 0 , 0 , 0 
 
 
anim_show			 = draw3 
anim_hide			 = holster_0 
anim_idle			 = idle_0 
anim_playing		 = idle_01 
anim_throw_begin	               = attack_0_begin 
anim_throw_idle		 = attack_0_idle 
anim_throw_act		 = attack_0_act	 
anim_		 _ _
 

Все, зберігаємо, закриваємо. Цей файл нам більше не потрібний. Тепер ліземо у файл items.ltx і в кінець пишемо:

 
[ bolt_box ] :identity_immunities
 GroupControlSection	 = spawn_group 
discovery_dependency =
$ spawn 				 = "food and drugs\kolbasa" 
; $prefetch = 32 
class				 = II_FOOD 
cform				 = skeleton 
visual				 = physics\box\box_metall_01.ogf 
radius				 = 1 

 
inv_name			         = "Коробка болтів" 
inv_name_short		         = "Коробка болтів" 
description			 = "Коробка з болтами містить 25 болтів." 
inv_weight			 = 1.35 can_trade			 = on inv_grid_width		 = 2 inv_grid_height		 = 1 inv_grid_x			 = 8 inv_grid_y			 = 18 cost				 = 30 

 
 
 
 
 
 
; eatable item 
eat_health = 0 eat_satiety = 0 eat_power = 0 eat_radiation = 0 wounds_heal_perc = 0 eat_portions_num = -1 
 
 
 
 
 
 
; food item 
slot				 = 4 animation_slot		 = 4 
 
 
;hud item 
hud = wpn_vodka_hud
 
attach_angle_offset		 = 0.440521 , 1.378287 , -0.644026 attach_position_offset	 = 0.104196 , -0.010821 , 0.076969 attach_bone_name		 = bip0 _				 _ _ 
 


 
// should be deleted after update
bone_name				 = bip01_r_hand 
position_offset			  = 0.0 , 0.0 , 0.0 angle_offset			  = 1.570790 , 1.570790 , 3.92699 
 
 

Зберігаємо, закриваємо. Далі ми повинні відкрити файл escape_dialog.script У кінець файлу внесемо свою функцію:

 
function use_bolt_box_oz ( obj ) 
    if obj ~= nil  then 
        if obj:section ( ) == "bolt_box"  then 
            for i = 1 , 25  do  --Здійснюємо спавн 25 разів 
    	        alife ( ) :create ( "bolt" , db.actor: position ( ) , db.actor:level_vertex_id ( ) , db.actor:game_vertex_id ( ) , db.actor:id ( ) ) 
    	    end 
	end 
    end 
end
 

Детально:

 
function use_bolt_box_oz ( obj )  --функція з назвою use_bolt_box_oz(obj) 
    if obj ~= nil  then 
        if obj:section ( ) == "bolt_box"  then  -- об'єкт, який ми повинні використовувати (коробка болтів) 
            for i = 1 , 25  do  -Здійснюємо спавн 25 разів 
    	        alife ( ) : create ( "bolt" , db.actor:position ( ) , db.actor:level_vertex_id ( ) , db.actor:game_vertex_id ( ) , db.actor:id ( ) )  - спавн болта в інвентар рр 
    	    end  -- закінчення циклу for i = ... 
	end  --закінчення if 
    end  --закінчення if 
end  --закінчення функції
 

У цьому файлі знаходимо функцію give_weapon_to_actor і вносимо такі рядки перед end:

dialogs.relocate_item_section(trader, "bolt_box", "in")   
dialogs.relocate_item_section(trader, "bolt", "in")

У цьому файлі також все. Тепер ломимося в bind_stalker.script Пишемо у функцію function actor_binder:net_destroy() це:

self.object:set_callback(callback.use_object, nil)

І на функцію actor_binder:reinit() це:

self.object:set_callback(callback.use_object, self.use_object, self)

Наприкінці файлу додаємо нашу функцію:

 
function actor_binder:use_object ( obj ) 
    escape_dialog.use_bolt_box_oz ( obj ) 
end
 

Детально:

 
function actor_binder:use_object ( obj )  -- function назва нашої функції 
    escape_dialog.use_bolt_box_oz ( obj )  -- виклик функції use_bolt_box_oz(obj ) з файлу escape_dialog.script 
end -- закінчення  функції
 

Ну ось і все, зберігаємо та закриваємо даний файл. Заходимо в гру, і якщо я ніде не помилився, спостерігаємо не нескінченний болт на початку гри. Щоб болт був не один, йдіть до Вовка, він дасть вам ще один болт і цілу коробку болтів. Щоб вилучити болти з коробки, просто скористайтеся ним, клацніть по ній 2 рази. Сподіваюся, що стаття виявилася вам корисною.


   
Цитата