Перейти к контенту

Скриптование


Svoboда

Рекомендуемые сообщения

Ребята, будьте добры, подскажите ответ на простой вопрос: как в скрипте вывести на экран временное сообщение (т.е. чтобы оно НЕ сохранялось в журнале в ПДА)?

Поделиться этим сообщением


Ссылка на сообщение

Вопрос про добавление имён/кличек неквестовых NPC:
Правильно ли я думаю, что чтобы добавить дополнительные имена сталкеров, нужно использовать эти файлы: generate_fnames.xml и generate_snames.xml?
(Именно дополнить к существующим, а не заменить старые имена)
К примеру, в файле generate_fnames.xml есть 103 вхождения тэгов <string id="name_stalker_№">.
Я попробовал удалить все, оставив только два:  <string id="name_stalker_1"> и <string id="name_stalker_2">.  
Далее заспавнил сталкера, и получил это:
ecdbb09b8226t.jpg
А это значит, что игра не определяет количество вхождений имён в файле  автоматически, а где-то указана конкретная цифра (104?).
Где задаётся этот параметр? Или же вообще я рассуждаю неправильно?
(Если обсуждалось, намекните, где. Поиск на "добавить имена / клички"  в самых разных комбинациях результата не дал)

Поделиться этим сообщением


Ссылка на сообщение

Хочу просмотреть инвентарь трупа. Делаю так:

 

for a=1,65534 do
	obj = server_object(a)
	if obj then
		o.clsid = obj:clsid()
		if iAmStalker[o.clsid] then			
			local cnt
			obj:iterate_inventory(function (dummy, item)
				if item:section()~="bolt" then
					cnt=cnt+1
				end                                    
			end, nil)		
		end
	end
end

А в ответ: attempt to call method 'iterate_inventory' (a nil value)

Пробовал разные комбинации - ну никак, всегда эта ошибка. Как это сделать правильно? 

Поделиться этим сообщением


Ссылка на сообщение

@WinCap, ошибка. Cobj всегда равен nil.

Объясню чуть подробнее. Я захотел, чтобы скрипт-уборщик из ОП 2.1 не удалял трупы, в которых хоть что-то есть. В этот скрипт (sak_off_corpses) я попытался вставить проверку на это дело.
Уборщик отрабатывает при переходе на другу локацию, может в этом дело? Может быть есть другой способ определить само наличие инвентаря без конкретики?
Вот моя вставка:
 

-- зачистка трупов сталкеров
function clear_corpses()
	for id,obj in pairs(corpses) do
		-- удаляем только трупы без неудаляемых предметов
		if not parents[id] then
			printf("corpses: Удалили "..obj:name())
			
--ВОТ ТУТ Я ВСТАВЛЯЮ СВОЮ ПРОВЕРКУ И ВСЕГДА ОШИБКА....			
----------------------------------------------------
			local cnt=0			
			local trup = level.object_by_id(obj.id)
			trup:iterate_inventory_simple(
				function (item)
					if item:section()~="bolt" then
							cnt=cnt+1
					end
				end
			)
-----------------------------------------------------			
			
			release(obj)		
		end
	end
end

 

Поделиться этим сообщением


Ссылка на сообщение

Имеем в переменной obj объект, например, бинт. Но не просто бинт, а застрявший в текстурах бинт.

Есть ли простой скриптовый способ извлечь его на свет божий? (например, поднять на 1 м вверх)

 

Поделиться этим сообщением


Ссылка на сообщение

@dsh, да, с бинтом это меня устроит. А если это оружие с определённым состоянием, зарядом, обвесами и т.д.?   

Как-то же возможно изменить y-координату?

 

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Я обозначил проблему в этой теме, однако есть основание полагать, что вопрос связан со скриптами. Смысл такой:

В задании "Защитить лагерь новичков от наёмников" (которое даёт Фанат на Кордоне) нужно убить 7 наёмников. После чего задание засчитывается (устанавливается инфопоршн escape_lager_killers_die). 

Если теперь сделать save и затем load - трупы наёмников пропадают!  При этом промежуточные save/load (когда убиты ещё не все наёмники) такого эффекта не вызывают - трупы не пропадают.

Если вручную толкнуть означенный выше поршень, то ещё живые наёмники исчезают. 

Вопрос: как сделать так, чтобы  трупы наёмников были как и обычные трупы - НЕ ИСЧЕЗАЛИ после save/load. Видимо, есть какой-то параметр/свойство..

Изменено пользователем phalcor
синтаксис

Поделиться этим сообщением


Ссылка на сообщение

@dsh, знал бы точно, что и где искать? Вот в all.spawn есть семь секий (по числу наёмников), это оно?

Скрытый текст

 

[3118]
; cse_abstract properties
section_name = stalker
name = esc_killer1
position = -99.2369918823242,-4.79276275634766,-77.2306289672852
direction = 0.0865945741534233,-0.0213616397231817,0.147721081972122
unknown_id = 0
script_version = 7

; cse_alife_trader_abstract properties
money = 5000
character_profile = esc_killer_specnaz

; cse_alife_object properties
game_vertex_id = 75
distance = 8.39999961853027
level_vertex_id = 161287
object_flags = 0xffffffbf
custom_data = <<END
[spawner]
cond = {+escape_lager_spawn_killers}

[smart_terrains]
esc_killers = true
END

; cse_visual properties

 

 

Поделиться этим сообщением


Ссылка на сообщение

@AndrewMor, спасибо за подробный ответ! Начинаю понимать, где собака зарыта, но пока ещё ясности нет.

Пробовал менять возвращаемые статусы в условии  elseif has_alife_info("esc_open_killer_fire") and xr_gulag.getGulagPopulationComed("esc_lager") <= 0 then, но безрезультатно.

Если объяснять долго, какой именно параметр отвечает за "исчезновение" трупов, подскажи пожалуйста, можно ли об этом где-то почитать?

Поделиться этим сообщением


Ссылка на сообщение

@abramcumner@Okichi, парни, спасибо за внимание к моей проблеме! 

Сработало удаление <disable>escape_lager_spawn_killers</disable> - теперь трупы после load на месте, Фанат выдаёт награду,

и я смогу утолить свой мародёрский интерес не спеша :) 

Посмотрел, вроде в дальнейшем этот поршн ни на что не влияет, а трупы при переходе на другую локацию сожрёт уборщик, так и закончится эта история.

  • Нравится 1
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

А что означают вот такие параметры смарт-террейнов? 

 

1) esc_dogs_to_fox:      population=0   comed=0   State=1            (это вроде как собаки, которые должны нападать на лагерь 2)   - по факту - пусто, нет ни одной собаки. 

2) esc_stalker_camp:    population=1   comed=1   State=0            (это на Кордоне, где Лис стоял) по факту - никого нет.

 

Или может есть тема, где такие тонкости описываются?

 

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

@naxac, да, поизучал xr_gulag.script, но так и не понял, что значит State=1 или 0.

Просто пытаюсь найти, в чём затык Циклического Задания Фаната на защиту лагеря - ну никак не закрывается это задание. Вот пытаюсь выяснить необходимые для этого условия.

Уже и cycle_task.script перелопатил - там условием на закрытие задания является

if xr_gulag.getGulagState(task_desc.defend_target) == 0 then
		task_desc.status = self.status.completed
		return true
end

 

Изменено пользователем phalcor

Поделиться этим сообщением


Ссылка на сообщение

Вот такой, казалось бы, простой вопрос: труп Крысюка после ухода/возврата на локацию становится невидимым (оффлайн). (У меня он в исключении у уборщика, потому цел).

Следующая комбинация не переводит его в он-лайн:

local sim = alife()
	sim:set_switch_online  (id, true)
	sim:set_switch_offline (id, false)

А вообще это возможно? Чтобы он стал нормальным, видимым трупиком?

 

Поделиться этим сообщением


Ссылка на сообщение

А есть ли возможность поменять скриптом предмет в слоте актора? (текущий отправить в инвентарь, а вместо него взять из инвентаря)

 

 

 

 

Поделиться этим сообщением


Ссылка на сообщение

Если неписю продать штук 10-20 разных стволов, он какое-то время будет их носить в инвентаре, но затем большинство из них в одну секунду пропадут, останется только самое мощное (по его мнению).

Вопрос - как можно  управлять этим процессом? (например, запретить такое вот исчезновение оружия из инвентаря непися). За это отвечает какой-то скрипт или что-то еще?

Поделиться этим сообщением


Ссылка на сообщение
15 часов назад, phalcor сказал:

За это отвечает какой-то скрипт или что-то еще?

Таки нашёл сам. Предметы из инвентаря неписей исчезают благодаря функции first_update(npc) в скрипте trade.script. (Это справедливо для ОП 2.1). Может кому-то будет полезна эта информация ;)

Поделиться этим сообщением


Ссылка на сообщение

А возможно заспавнить физический объект? Например, деревянный ящик, такой, как рядом с Прапором? На котором магнитофон стоит.

Делаю, как ниже. Рюкзак спавнится, а какую секцию указать для ящика?

local a_pos  = db.actor:position()
local xpos=a_pos.x+2
local ypos=a_pos.y
local zpos=a_pos.z
local lv=db.actor:level_vertex_id()
local gv=db.actor:game_vertex_id()
local newOBJ=alife():create("inventory_box", xyz(xpos,ypos,zpos), lv,gv)

 

Поделиться этим сообщением


Ссылка на сообщение

@HellRatz, получается, что самый обычный деревянный ящик скриптом я заспавнить не смогу без создания своего предмета?

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Получилось!

1. Создаём свой предмет в  items.ltx:

[phalcor_woodbox]:O_PHYS_S
visual = dynamics\box\big_box.ogf    ;Большой деревянный зелёный ящик
remove_time = 9999

 

2.Спавним предмет с секцией "phalcor_woodbox"

 

3. всё.

Изменено пользователем phalcor
  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение

Интересно, а существует ли простой метод определить, посещалась ли актором та или иная локация?

Например, что-то вроде:  yes = loc_is_passed("l01_escape" ) 

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...