IQDDD 5 Опубликовано 7 Июня 2009 (изменено) ClearSky, а как делать принадлежность вертолёта к группировке? как спавнить вертолёт (скриптом и через ACDC)? Kirag, а сила аномалии разве не в zone_.ltx прописывается?и (параметр max_power_start) Изменено 17 Сентября 2011 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 9 Июня 2009 (изменено) Влад, раскапывать ACDC'ом all.spawn умеешь? Да? Тогда в конце файла типа "alife_l07_[локация]" прописываешь: [[номер объекта. ВАЖНО: одинаковых номеров на одной локации быть не должно]] ; cse_abstract properties section_name = stalker_zombied name = yan_zombie_20 position = [i][координаты. например: 217.8,-54.4,32.0][/i] direction = 0,0,0 ; cse_alife_trader_abstract properties money = 5000 character_profile = [секция одного из профилей одного из файлов character_desc_[локация].xml] ; cse_alife_object properties game_vertex_id = [i][gvi][/i] distance = 79.0999984741211 level_vertex_id = [i][lvi][/i] object_flags = 0xffffffbf custom_data = <<END [можно прописать доп. параметры] END ; cse_visual properties visual_name = actors\stalker_zombied\stalker_zombied_4 ; cse_alife_creature_abstract properties g_team = 0 g_squad = 0 g_group = 0 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0 upd:creature_flags = 0 upd:position = -4.18019390106201,-0.0927719995379448,-130.002517700195 upd:o_model = 0 upd:o_torso = 0,0,0 upd:g_team = 0 upd:g_squad = 0 upd:g_group = 0 ; cse_alife_monster_abstract properties upd:next_game_vertex_id = 65535 upd:prev_game_vertex_id = 65535 upd:distance_from_point = 0 upd:distance_to_point = 0 ; cse_alife_human_abstract properties predicate5 = 2,2,2,0,0 predicate4 = 0,1,2,0 ; cse_ph_skeleton properties upd:start_dialog = ; se_stalker properties Добавлено через 12 мин.: Kirag, рассмотрим конфиг аномалии: [zone_field_psychic]:zone_base GroupControlSection = spawn_group_zone $spawn = "zones\base\field_psychic" $def_sphere = 15 ;$prefetch = 16 class = Z_RADIO hit_impulse_scale = .01 effective_radius = 1.00;размер радиуса в процентах от оригинального, где действует зона sound =;zone_mosquito_bald postprocess = postprocess_psychic dof_enabled = true ef_anomaly_type = 3 ef_weapon_type = 15 artefacts = BirthProbability = 0 ;----------- Anomaly settings ----------------------- max_start_power = 0 attenuation = 0.5 period = 1 idle_particles =;zones\zone_electra_idle ;blowout_particles = ;hit_small_particles = damage_fx\burn_creatures ;hit_big_particles = damage_fx\burn_creatures00 ;idle_small_particles = damage_fx\burn_creatures ;idle_big_particles = damage_fx\burn_creatures00 idle_particles_dont_stop = true; ;idle_sound = ambient\fire2;iinoiyiiue caoe ;blowout_sound = anomaly\zhar_blow;ai a?aiy aua?ina(oaa?a) a oaio?a aiiiaeee ;hit_sound = ambient\zhar;ia ia?niia?a, eiaaa oio iieo?aao oeo ;entrance_sound = ambient\zhar;i?e iiiaaaiee iauaeoa a aiiiaee? hit_type = telepatic disable_time = -1;время игнорирования неживого объекта в зоне (-1 если не нужно) disable_time_small = -1;время игнорирования маленького неживого объекта в зоне (-1 если не нужно) disable_idle_time = -1;время отключения idle партиклов ignore_nonalive = true; ignore_small = false; ignore_artefacts = true blowout_light = off idle_light = off awaking_time = 100 blowout_time = 100 accamulate_time = 500 visible_by_detector = on blowout_wind = off shape_transp_color = 200, 200, 0, 60 shape_edge_color = 32, 32, 32, 255 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;рождение артефактов во время срабатывания spawn_blowout_artefacts = off [zone_field_psychic_weak]:zone_field_psychic $spawn = "zones\field_psychic_weak" awaking_time = 100 blowout_time = 100 accamulate_time = 100 ;----------- Anomaly settings ----------------------- max_start_power = 0.064 [zone_field_psychic_average]:zone_field_psychic $spawn = "zones\field_psychic_average" awaking_time = 100 blowout_time = 100 accamulate_time = 100 ;----------- Anomaly settings ----------------------- max_start_power = 0.115 [zone_field_psychic_strong]:zone_field_psychic $spawn = "zones\field_psychic_strong" awaking_time = 100 blowout_time = 100 accamulate_time = 100 ;----------- Anomaly settings ----------------------- max_start_power = 0.166 теперь рассмотрите, чем отличаются секции _weak, _average, _strong теперь возьмите любой другой конфиг. проверьте, что max_start_power в любой аномалии возрастает по лестнице: _weak, _average, _strong теперь откроем acdc: в параметрах любой аномалии есть такая вот штука: max_power = 0 которая наталкивает на мысль, что ранее сила аномалии указывалась в all.spawn, однако потом это изменили. изменять значение на какое-либо другое не пробовал, т.к. пока не до этого. зы: заодно рассмотрим вот это: ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 1.5 есть ещё другие типы шейпов. я видел. но как каждый из них описывать? например, как значит это: shapes = shape0 shape0:type = box shape0:axis_x = 1,0,0 shape0:axis_y = 0,1,0 shape0:axis_z = 0,0,1 shape0:offset = 0,0,0 и что за параметр: offset. ------------------------------ АГА!!! всё понял. offset позволяет смещать шейп. т.о. можно сделать следующее: входишь в арку церкви на болотах. а там тебе как жарка ******, причём зажгутся сразу все аномалии, расставленные по периметру забора. зы1: а как сделать пси-излучение, подобное янтарскому, на другой локации. например, на складах. я понимаю, что можно сделать слабую-слабую zone_field_psychic_very_weak с огромным радиусом. но ведь на янтаре не так. Изменено 17 Сентября 2011 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 9 Июня 2009 (изменено) Kostya V, короче так: Допустим, что на карте есть две аномалии: одна аномалия с координатами: 215.7,0.4,-45.4, другая - с координтами: 212.7,0.4,-45.4. Мы знаем, что аномалия срабатывает тогда, когда актор попадает в шейп (англ. shape - фигура). Например, ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 1.5 указывает шейп, представленный сферой в центре аномалии в радиусом 1.5. При попадании в эту сферу аномалия активируется. Если мы хотим, чтобы центр сферы был не в центре аномалии, а, например, чуть правее по оси x, то используем offset: ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = -4,0,0 shape0:radius = 1.5 Итак, нам необходимо, чтобы при попадании в аномалию №1 активировалась и аномалия №2. Центр первой аномалии оставляем без изменений, а второй смещаем на 3 единице вправо по оси x. Добавлено через 7 мин.: Влад, так вроде технология одна и та же. Странно. Изменено 9 Июня 2009 пользователем IQDDD Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 10 Июня 2009 (изменено) Вопрос по скриптам: Есть Функция: local b local obj[20] local num local pos = vector () local i local community1 local community2 community1 = "sim_default_duty_"..math.random (0,4) community2 = "sim_default_freedom_"..math.random (0,4) b = 7 + math.random (-3,3) for i=1, b do pos = db.actor:position() pos.x = pos.x + 18 + math.random (-4,4) pos.y = pos.y + 2 pos.z = pos.z + math.random(-8,8) obj[i] = alife():create(community1,pos,db.actor:level_vertex_id(),db.actor:game_vertex_id()) end num = b b = 7 + math.random (-3,3) for i=1, b do pos = db.actor:position() pos.x = pos.x - 18 - math.random (-4,4) pos.y = pos.y + 2 pos.z = pos.z + math.random(-8,8) obj [num + i] = alife():create(community2,pos,db.actor:level_vertex_id(),db.actor:game_vertex_id()) end num = num + b Как видим, здесь спавниться отряд чуваков из разных группировок. Созданные объекты запоминаются в obj[]. Их кол-во - в переменную num. Как сделать так, чтобы после 90 секунд вызывалась определённая функция, убивающая всех этих неписей. Изменено 10 Июня 2009 пользователем IQDDD Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 16 Июня 2009 (изменено) Отшель[НИК] function SpawnAfterHead(long,prob,section) if math.random (1,100) < prob then local ArLong = { [0] = 2.5, [1] = 3.5, [2] = 4.5, [3] = 9 } obj = db.actor local dir = vector() local pos = vector() pos = obj:position() dir = obj:direction() pos.x = pos.x - dir.x * ArLong[long] pos.z = pos.z - dir.z * ArLong[long] alife():create(section,pos,db.actor:level_vertex_id(),db.actor:game_vertex_id()) end end prob - вероятность спавна в процентах long - как далеко от спины актора будет спавниться непись (0 - близко, 3 - далеко, 1 и 2 - средне) section - секция непися, который спаунится Изменено 16 Июня 2009 пользователем IQDDD 1 Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 21 Июля 2009 (изменено) меченый(стрелок), а вот такой к вам вопрос: как всем хорошо известно, lua - язык, в котором функция является обычной переменной и может быть передана в аргументы другой функции. Тогда почему же в амк не используется универсальный таймер (т.е. такой таймер, в котором вызыванные функции могут быть произвольными), вызов которого будет с параметрами функций, например: new_timer (1, myscript.myfunc, 20) Добавлено: Vano_Santuri, на acdc_cs.pl или какой там у тебя, нажимаешь правой кнопкой -> изменить, или открыть с помощью, блокнота. Маньяк... D: Изменено 21 Июля 2009 пользователем IQDDD Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 21 Июля 2009 (изменено) меченый(стрелок), давайте разберёся в аргументах моей функции: new_timer (1, myscript.myfunc, 20) Здесь первый - это номер таймера. Второй - имя функции. Кстати, почему это его сохранить нельзя? Третий - через сколько секунд/миллисекунд/обновлений вызывать процедуру таймера. Задача состоит в том, что создать псевдообъект таймера. Можно при вызове new_timer(...): Создать объект класса "timer" (его тоже надо создать заранее. Он будет представлять собой класс всего из четёрых свойств: number, procedure, active, interval) Свойства соответственно будут равны: number = 1. procedure = myscript.myfunc. active = true. interval = 20. Запоминаем объект этого класс в глобальную таблицу timerZ. С каждый апдейтом актора будет вызываться функция, проверяющая всю таблицу на наличие объектов класса таймер и, если надо, исполняющая функции, сохранённые в свойстве procedure объектов. Добавлено через 3 мин.: Tonny, всё это можно (кроме 2. И то можно, только приблизительно и ОЧЕНЬ сложно. Без математики нельзя). Вот только вы изучили, что такое: 1. bind_object 2. callback 3. класс 4. методы update, net_destroy, __init(...) super(...) и пр. класса "bind_object" ? Изменено 21 Июля 2009 пользователем IQDDD Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 21 Июля 2009 меченый(стрелок), ругайте, не понял. и ещё мне не знаком оператор break. Переводится, как "пауза". Но чё делает? Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 11 Декабря 2010 Почему в ЧН возникают глюки с экспансией на другие локации. (В частности, на базы). На некоторые смарты идут, преимущественно на крайние, а на некоторые не хотят, и не только на базы. Чем может быть вызвано? Например: сталкеры захватили весь кордон (даже военный блокпост), переходные точки перехода Кордон-Свалка ("блокпост-приемник" и "стоянка за концлагерем"), а дальше идти не хотят. В частности на сам концлагерь ("кладбище техники") Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 11 Декабря 2010 1. А я думал, что это максимальное количество силы. Если текущая сила меньше, то спавним ещё. Если больше, то не спавним. 2. Это я для теста прописал. (Это всё-таки спавн-смарт для военных. Но она на одном уровне со сталкерскими спавн-смартами, и захватывают её сталкеры благополучно. 3. Есть. А куда она денется. Я наоборот поставил base_squad_number больше. Сейчас попробую убавить. 4. Нету там такого. Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 11 Декабря 2010 Увы, я оказался прав. base_squad_number это максимальное количество силы группировки. Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 18 Декабря 2010 Насчёт коллбека на юзание нычки смотри treasure_manager.script. ищи функцию, которая содержит в себе удаление метки нычки на карте. Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 12 Января 2011 а чтобы сохранить данные при загрузке игры, используй нет пакет. Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 18 Января 2011 Где у меня ошибка со скриптовым постэффектом? Метод process не вызывается почему-то. Вот вызов: local ppe=recovery_effect(max_restored_health-db.actor.health) ppe:start() -- Постэффект class "recovery_effect" (effector) function recovery_effect:__init(add_health) super() self.params = effector_params() self.params.blur=0 self.params.gray=0 self.params.dual=duality(0,0) self.params.noise=noise(0,0,0) self.params.color_add=color(0,0,0) self.params.color_base=color(0,0,0) self.params.color_gray=color(0,0,0) self.max_add=add_health -- Максимальная яркость self.time_start=time_global() -- Время начала self.time_in=self.time_start+add_health*1.5*1000 -- Время максимального осветления self.time_white_scr=self.time_in+add_health*2.5*1000 -- Время начала сброса осветления self.time_out=self.time_white_scr+add_health*0.75*1000 -- Время конца self.time_start_in=self.time_in-self.time_start self.time_white_scr_out=self.time_out-self.time_white_scr self.pi2=math.pi/2 end function recovery_effect:process(pp) local time=time_global() msg("!") if time<self.time_in then local color_add_cur=self.max_add*math.cos(self.pi2*(self.time_in-time)/self.time_start_in) self.params.color_base=color(color_add_cur,color_add_cur,color_add_cur) elseif time<self.time_white_scr then self.params.color_base=colol(self.max_add,self.max_add,self.max_add) elseif time<self.time_out then local color_add_cur=self.max_add*math.sin(self.pi2*(self.time_out-time)/(self.time_white_scr_out)) self.params.color_base=color(color_add_cur,color_add_cur,color_add_cur) end effector.process(self,pp) pp:assign(self.params) return true end function recovery_effect:finished() return self.time_out<time_global() end Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 18 Января 2011 А если время действия постэффекта заранее неизвестно? Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 20 Января 2011 1. Радиация - это свойство, поэтому через точку. 2. Операцию сравнения на равенство идет через два знака ==. 3. Свойство объектов класса game_object записываются иначе: записывается значение изменения свойства. И читайте справочник и справку по Lua. Если не осилить, то не трогайте скрипты. Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 20 Января 2011 TRAMP14, возможно, что по luabind вы не нашли информацию, но почитали бы справочник, там всё есть. Обращение к свойствам идёт через точку без скобок. К методам, через двоеточие и скобки (если нужно вызвать функцию) и без скобок, если нужно использовать функцию как переменную. А то, что вы знаете pascall, роли не играет: тут вообще-то Lua. Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 23 Января 2011 return без явного объявления возвращает nil, что в условий эквивалентно логической лжи. Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 17 Августа 2012 (изменено) Рассмотрим содержимое net_packet'а, к-ое содержит информацию о cse_alife_item_weapon (в Зове Припяти): use constant flAddonSilencer => 0x01; use constant flAddonLauncher => 0x02; use constant flAddonScope => 0x04; use constant properties_info => ( { name => 'ammo_current', type => 'u16', default => 0 }, # 0x194 (0x1b4) { name => 'ammo_elapsed', type => 'u16', default => 0 }, # 0x196 (0x1b6) { name => 'weapon_state', type => 'u8', default => 0 }, # 0x191 (0x1b1) { name => 'addon_flags', type => 'u8', default => 0 }, # 0x1a8 (0x1cc) { name => 'ammo_type', type => 'u8', default => 0 }, # 0x192 (0x1b2) { name => 'cse_alife_item_weapon__unk1_u8', type => 'u8', default => 0 }, # cs(0x1a0) Если мы хотим получить информацию о том, какие плюшки повешены на оружие, то надо добраться до значения addon_flags и смотреть биты этого значения. (Кстати, здесь перепутано. Экспериментально установлено, что flAddonScope = 0x01, flAddonSilencer=0x04). С flAddonLauncher и flAddonSilencer всё понятно: существует только одна секция, предметы которой можно повесить в качестве подствола или глушителя. Однако, существует несколько секций оптических прицелов, которые можно повесить на оружие. Например строка из w_lr300.ltx scopes_sect = scope_susat_lr, scope_susat_x1.6_lr, scope_susat_custom_lr, scope_susat_dusk_lr, scope_susat_night_lr Как определить, какой именно прицел повешен на оружие? Заранее спасибо! 1. Используй спойлер для текстов кодов 2. Даблпостинго вопросов - нарушение правил форума. --/Artos Изменено 17 Августа 2012 пользователем Artos Поделиться этим сообщением Ссылка на сообщение
IQDDD 5 Опубликовано 17 Августа 2012 (изменено) Artos, насчёт флагов может я и напутал, хотя врят ли. Завтра ещё раз проверю. Насчёт оптики вы не правы: спавнил в инвенатре все указанные выше секции, и любая подходила. UPD: и с флагами у меня тоже всё правильно. Ставлю прицел на пушку: флаг становится 1. Добавляю глушитель - 5. Изменено 17 Августа 2012 пользователем IQDDD Поделиться этим сообщением Ссылка на сообщение