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

[CoP] Ковыряемся в файлах


Halford

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

Подскажите. как в логике эксклюзива сменить анимацию по мере приближения

к нему Г.Г. (в ЗП)

[logic@zat_a2_stalker_drunk]

suitable = {=check_npc_name(zat_a2_stalker_drunk)} true

trade = misc\trade\trade_zat_a2_barmen.ltx ;если не прописать - в руке водки не будет

prior = 200

active = animpoint@drunk

 

[animpoint@drunk]

cover_name = zat_a2_sc_drunk

reach_distance = 2

avail_animations = animpoint_stay_wall_drink_vodka ;бухает опершись на стену

;on_info =

use_camp = false

meet = meet

out_restr = zat_a2_sr_noweap

combat_ignore_cond = true

combat_ignore_keep_when_attacked = true

invulnerable = true

gather_items_enabled = false

help_wounded_enabled = false

corpse_detection_enabled = false

 

[meet]

close_snd_hello = nil

close_snd_bye = nil

close_anim = nil

close_victim = nil

far_anim = nil

far_victim = nil

close_distance = 0

far_distance = 0

close_snd_distance = 3

abuse = false

use = {=actor_enemy} false, true

;trade_enable = false

allow_break = false

meet_on_talking = false

 

 

 

И еще чисто теоретический вопрос - можно-ли под ЗП запустить анимации от ЧН типа

пьяного спящего на столе, блюющего опершись на стену или стреляющего лежа или

из-за укрытия

 

Если кого интересуют тачки - на плейграунде мод от Колмогора (подправили xr_game.dll) -

теперь можно прокатиться.

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

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


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

Если в олл_спавне его спавнить - то в кастомдату ему пихнуть чтото типа

custom_data = <<END

[spawner]

 

[smart_terrains]

none = true

 

[logic]

active = camper

 

[camper]

path_walk = wind_blokpost_camper1_walk

path_look = wind_blokpost_camper1_look

radius = 5

sniper = true

END

 

лучше логику написать отдельным файлом config\scripts\zaton\mu_nps_logic.ltx ,

а файл указать в секции чувака в олл_спавн - чтобы не перепаковывать для правки

 

[logic]

cfg = scripts\zaton\mu_nps_logic.ltx

END

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


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

Посмотри логику ограбления на земснаряде

[remark@robbery_artefact] ;Диалог ограбления

target = story | actor

anim = threat_na

snd_anim_sync = true

meet = meet@robbery

on_info = {+zat_b14_robbery_give_artefact} walker@item

on_info2 = {+zat_b14_robbery_not_give_artefact} remark@punch

in_restr = zat_b14_not_give_item_zone

wounded = wounded

combat_ignore_cond = {!actor_enemy} true

danger = danger_condition@go

 

[remark@punch] ;Удар по морде и еще словесный плевок в морду

 

 

или когда за Вано долг отдает.

Два варианта развития событий по инфопоршням из диалога(больше не скажу - сам дуб)

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


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

Vano_Santuri. У тебя нормальный АСДС. Если оригинальный

алл.спавн туда-сюда компилится без этого лога то все ОК.

перепакованный в СДК алл.спавн так-же себя ведет. но на

работу не влияет. В американском моде то-же видел - они добавляли

смарт-террейны - такие-же логи в течение распаковки.

 

Пример спавна эксклюзивного чувака в смарт-террейне(ранее спрашивал -

ответа не получил) может кому-нибудь интересно.

Пример логики изменения анимации по дистанции от Г.Г и эксперименты с

анимациями на разных скелетах (ТЧ и ЗП)

 

Скрин здесь http://img705.imageshack.us/img705/7430/34zaton.jpg

http://img42.imageshack.us/img42/9182/51zaton.jpg

 

Файлы здесь http://www.sendspace.com/file/x67k8f

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

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


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

XR_SOUNDS.SCRIPT в нем эти наборы собраны, a звуки в

sounds/character_voise/human_nn/states/idle

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


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

Вопрос на засыпку! Кто нибудь пытался оживить Сидорыча в ЗП ?

Я попытался - заспавнил только в виде скомканного мешка - а анимацию никак

не могу запустить. В логику прописал anim_global = анимацию из скрипта mob_trader

и скрипт соответственно сунул из ЧН. Свой файл логики в ЧН пробовал - работает.

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


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

Smart_terrain - это место создания гулага - стоянки сталкегов, базы и т.п.

Smart_cover - определенная работа в гулаге с начальной анимацией -

типа avail animation = sit_low - сидеть низко, stay_wall - стоя опереться на

стену и т.п. Поищи в гугле статьи -

Смартеррейны и гулаги — S.T.A.L.K.E.R. Inside Wiki

Настройка логики. Часть 1 — S.T.A.L.K.E.R. Inside Wiki

 

WETER Попробуй так

[logic]

active = sr_crow_spawner

 

[sr_crow_spawner]

max_crows_on_level = 2

spawn_path = jup_crow_spawn_1

 

А если уж совсем достанут то удали эту секцию из олл_спавна, а для развода

пропиши несколько ворон по типу олл.спавна ТЧ.

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


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

Выше выкладывал пример спавна эксклюзивного чувака в смарттеррейне

стр 54 от 20.2 2010 г. Там файлы - необходимые для создания нового

чувака - 20 метров. Одним росчерком пера это не получится - надо

читать статьи, рыть и смотреть как это у других сделано.

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


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

Сбегай до блокпоста и обратно - появятся. Укрытия от выброса -

surge_hide. А вообще немного потерпи - выложу доработанную штуку

в теме по добавлению локаций - там и будем практиковаться заселять,

кому интересно.

Строгое предупреждение от модератора Halford
Все же лучше удержатся.
Изменено пользователем Halford

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


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

Cамый простой способ - открыть модель в НЕХ-редакторе,

notepad++ к примеру stalker_zombied_1.ogf, найти там имя

текстуры - в этой модели act_stalker_neutral_1 - и изменить

имя текстуры не нарушая колличество букв (neutral ->naadral)

a уже самой текстуре, которую надо напялить, присвоить это имя.

Можно еще через СДК в Actor_editor переназначить текстуру модели,

предварительно конвертировав ее в формат OBJECT, а затем опять в OGF.

прописать неписю безопасный путь прохождения

Прописать ему логику

[logic]

active = walker

 

[walker]

path_walk = имя точек пути через минное поле

 

Точки пути записать в распакованном all.spawn в файле way_локация.ltx

почитать статью - Логика НПС.

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

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


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

Спавн НПС через All.spawn

Перед сборкой удалите комментарии

[7152]

; cse_abstract properties

section_name = stalker

name = gamer

position = 243.661834716797,16.4937133789063,506.856964111328

direction = 0,0,0

version = 0x7c

script_version = 8

 

; cse_alife_trader_abstract properties

money = 5000

character_profile = sim_default_stalker_4 ; профиль описан в character_desc_general.xml

cse_alife_trader_abstract__unk1_u8 = 6

 

; cse_alife_object properties

game_vertex_id = 52429

distance = 1.15511835011223e-040

direct_control = 416481280

level_vertex_id = 4290707477

object_flags = 0x203bffff

 

custom_data = <<END

 

[smart_terrains]

none = true ; принадлежность к гулагу - ни в один не пойдет

 

[spawn] ; что у него в рюкзаке

bread

kolbasa

wpn_pb

ammo_9x18_fmj

hand_radio

medkit

vodka

wpn_vintorez

wpn_pkm

 

[logic]

cfg = scripts\zaton\stalker_gamer.ltx ;логика поведения здесь

 

[task_manager]

reward = stalker

 

[spawner]

cond = true ;здесь ставить условия для спавна

END

 

; cse_visual properties

visual_name = actors\stalker_neutral\stalker_neutral_1 ; без разници - какой визуал - читает из character_desc_general.xml

 

; 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 = 243.661834716797,16.4937133789063,506.856964111328

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 = 1,1,1,0,2

predicate4 = 0,1,0,1

 

; cse_ph_skeleton properties

 

upd:start_dialog =

 

; se_stalker properties

 

 

расставить точки пути

[gamer_1_look]

points = p0,p1,p2

p0:name = name00|a=hide

p0:flags = 0x2

p0:position = 239.727722167969,14.4487590789795,499.2287769317627

p0:game_vertex_id = 6

p0:level_vertex_id = 1375126

 

 

p1:name = name01|a=hide

p1:flags = 0x1

p1:position = 235.727722167969,14.4487590789795,499.2287769317627

p1:game_vertex_id = 6

p1:level_vertex_id = 1375126

 

p2:name = name02|a=hide

p2:flags = 0x1

p2:position = 230.727722167969,14.4487590789795,499.2287769317627

p2:game_vertex_id = 6

p2:level_vertex_id = 1375126

 

 

[gamer_1_walk]

points = p0,p1,p2,p3,p4

p0:name = name00

p0:position = 239.727722167969,14.4487590789795,499.2287769317627

p0:game_vertex_id = 6

p0:level_vertex_id = 1375126

p0:links = p1(1)

 

p1:name = name01|a=sneak|t=300

p1:position = 230.727722167969,14.4487590789795,494.2287769317627

p1:game_vertex_id = 6

p1:level_vertex_id = 1359863

p1:links = p2(1)

 

p2:name = name02

p2:position = 223.727722167969,14.4487590789795,486.2287769317627

p2:game_vertex_id = 6

p2:level_vertex_id = 1346067

p2:links = p3(1)

 

p3:name = name03|a=raid

p3:position = 222.727722167969,14.4487590789795,479.2287769317627

p3:game_vertex_id = 6

p3:level_vertex_id = 1344790

p3:links = p4(1)

 

p4:name = name04

p4:position = 245.727722167969,14.4487590789795,493.2287769317627

p4:game_vertex_id = 6

p4:level_vertex_id = 1386371

p4:links = p0(1)

 

 

написать логику

[logic]

active = camper

 

[camper]

path_walk = gamer_1_walk

path_look = gamer_1_look

radius = 5

sniper = true

 

 

Вот только все это подходит ко всякого рода неразговорчивым часовым

и постовым - если в логике прописать [meet] вылетит при вопросе - "чем занимаешься"

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


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

При прекомпиляции в ЛЕ создается файл build.aimap

в level_editor\gamedata\levels\marsh. После этого придется

пройти все пути компиляции аи-сетки, левел-графов, гейм-графов,

олл-спавна и апгрейда 3502. Но боюсь что толку не будет - аи сетки

и так нормальные. А локацию чем добавляли - в СДК или прогр. от АМК ?

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

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


Ссылка на сообщение
чем вызвать голос непися?

Диалоги в ЗП озвучиваются так-же как и в ТЧ.

Фразы встречи и прощания прописываются в логике:

[meet]

close_snd_hello = zat_a2_stalker_barmen_greeting ;-привет

close_snd_bye = zat_a2_stalker_barmen_farewell ;-прощай

А чтобы озвучить фразы диалога - надо создать звуковые файлы с тем-же

именем с расширением ogg в gamedata\sounds\characters_voice\dialogs\

т.е. если фраза в gamedata\configs\gameplay\dialogs_zaton.ltx к примеру -

<text>zat_a2_linker_b14_quest_init_1</text> - задание бармена на земснаряд -

то и звуковой файл у вас должен быть создан -

gamedata\sounds\characters_voice\dialogs\zat_a2_linker_b14_quest_init_1.ogg

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


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

SDR-team ! Проверял - и бармену и Гонте и торговцу

вставлял - прекрасно озвучиваются. Г.Г. не озвучивается.

Попробуй на чистой игре.

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


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

PavelSnork

Если он по логике в смарткавере - то меняй дирекшн смарткавера в all.spawn.

Если в логике path_walk, path_look то смотрит на точку path_look.

 

SDR-team

Похоже что твой НПС не подключился к логике. Скорее всего

не прописан эксклюзивом в смарте - где файл его логики

прописывается - хотя диалог все равно должен быть.

Попробуй ему прописать сначала диалоги существующих,

бармена к примеру в характер-деск-ххх.

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


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

Народ ! Может кто сталкивался с проблемой - дополнительно заспавнеенные

через смарты эксклюзивы с логикой уходят в оффлайн после того как от них далеко

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

Чем их выковыривать ? Пытался условие прописать - "у актора предмет/телепортировать

нпс на точку пути" - не помогло.

 

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


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

alexwew

В ЗП симулянты спавнятся не по одиночке а группами (сквадами),

выше уже писали - можно уменьшить размер группы до одного.

В configs\misc\squad_descr.ltx прописывай всем npc_in_squad = 1,1

тогда групп не будет, а будут поодиночке ходить только одни командиры.

 

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


Ссылка на сообщение
юзай IDA,копай xrGame.dll

IDA freware 4.3 подойдет ?

А литературу какую посоветуете, чтобы разобраться в том,

что получается после дизассемблирования в IDA ?

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

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


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

В теме "[CoP] Перенос и создание карт " на первых страницах

этот вопрос обсуждали (thm стр.- 4 15.2.2010, 12:30 ).

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

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


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

Создание укрытия от выброса на добавленной локации - surge_hide :

Пропишем нужному нам смарт-терейну укрытие

[esc_sim_13]:default

surge = 1 ; прописали возможность укрытия

territory = 1

sim_avail = true

 

 

Регистрируем наше укрытие

;escape

esc_surge_hide_sim_13

 

 

Зарегистрируем нашу локацию в скриптах

--'******************************************************

--'* Реестр смарт-террейнов. Игровое поле симуляции.

--'******************************************************

 

--' В этом ltx хранятся дескрипторы сквадов.

squad_ltx = system_ini()

setting_ini = ini_file("misc\\simulation.ltx")

 

local group_id_by_levels = {zaton = 1,

pripyat = 2,

jupiter = 3,

labx8 = 4,

jupiter_underground = 5,

escape = 6}

 

 

строка 1196

function surge_stats()

local sim_obj_registry = simulation_objects.get_sim_obj_registry().objects

local sim_squads = {

["zaton"] = {},

["jupiter"] = {},

["pripyat"] = {},

["escape"] = {}

}

local sim_smarts = {

["zaton"] = {},

["jupiter"] = {},

["pripyat"] = {},

["escape"] = {}

}

 

строка 1241

print_smarts_and_squads_by_level("zaton")

print_smarts_and_squads_by_level("jupiter")

print_smarts_and_squads_by_level("pripyat")

print_smarts_and_squads_by_level("escape")

 

 

строка 38

self.levels_respawn = {zaton = false, jupiter = false, pripyat = false, escape = false}

 

строка 194

xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_after_surge")

elseif(level.name()=="jupiter") then

xr_sound.set_sound_play(db.actor:id(), "jup_a6_stalker_medik_after_surge")

elseif not has_alife_info("pri_b305_fifth_cam_end") then

xr_sound.set_sound_play(db.actor:id(), "pri_a17_kovalsky_after_surge")

elseif(level.name()=="escape") then

xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_after_surge")

 

строка 249

if(level.name()=="zaton") then

xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_surge_phase_2")

elseif(level.name()=="jupiter") then

xr_sound.set_sound_play(db.actor:id(), "jup_a6_stalker_medik_phase_2")

elseif not has_alife_info("pri_b305_fifth_cam_end") then

xr_sound.set_sound_play(db.actor:id(), "pri_a17_kovalsky_surge_phase_2")

elseif(level.name()=="escape") then

xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_surge_phase_2")

 

строка 273

if(level.name()=="zaton") then

xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_surge_phase_1")

elseif(level.name()=="jupiter") then

xr_sound.set_sound_play(db.actor:id(), "jup_a6_stalker_medik_phase_1")

elseif not has_alife_info("pri_b305_fifth_cam_end") then

xr_sound.set_sound_play(db.actor:id(), "pri_a17_kovalsky_surge_phase_1")

elseif(level.name()=="escape") then

xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_surge_phase_1")

 

строка 329

self.levels_respawn = {zaton = true, jupiter = true, pripyat = true, escape = true}

 

строка 352

self.levels_respawn = {zaton = true, jupiter = true, pripyat = true, escape = true}

 

строка 638

packet:w_bool(self.levels_respawn.zaton)

packet:w_bool(self.levels_respawn.jupiter)

packet:w_bool(self.levels_respawn.pripyat)

packet:w_bool(self.levels_respawn.escape)

 

строка 665

self.levels_respawn.zaton = packet:r_bool()

self.levels_respawn.jupiter = packet:r_bool()

self.levels_respawn.pripyat = packet:r_bool()

self.levels_respawn.escape = packet:r_bool()

 

 

переходим к олл.спавн - создаем секцию укрытия

[xxxx]

; cse_abstract properties

section_name = space_restrictor

name = esc_surge_hide_sim_13

position = -11.2279901504517,2.46390247344971,57.3380393981934

direction = 0,0,0

version = 0x7c

script_version = 8

 

; cse_alife_object properties

game_vertex_id = 934

distance = 0

level_vertex_id = 3366

object_flags = 0xffffff3e

 

; cse_shape properties

shapes = shape0

shape0:type = box

shape0:axis_x = 3.27519989013672,0,0

shape0:axis_y = 0,5.44060039520264,0

shape0:axis_z = 0,0,7.41159915924072

shape0:offset = 0,0,0

 

; cse_alife_space_restrictor properties

restrictor_type = 0

 

 

Создаем точки пути по колличеству мест в укрытии

[esc_sim_13_surge_1_look]

points = p0

p0:name = name00

p0:position = -11.0934257507324,2.45600557327271,56.0012626647949

p0:game_vertex_id = 1051

p0:level_vertex_id = 286804

 

 

[esc_sim_13_surge_1_walk]

points = p0

p0:name = name00

p0:position = -12.587254524231,2.45982217788696,54.6062545776367

p0:game_vertex_id = 1051

p0:level_vertex_id = 284937

 

 

[esc_sim_13_surge_2_look]

points = p0

p0:name = name00

p0:position = -11.7026491165161,2.45731353759766,55.4043731689453

p0:game_vertex_id = 1051

p0:level_vertex_id = 285862

 

 

[esc_sim_13_surge_2_walk]

points = p0

p0:name = name00

p0:position = -11.7085494995117,2.45401954650879,54.6906051635742

p0:game_vertex_id = 1051

p0:level_vertex_id = 285861

 

 

[esc_sim_13_surge_3_look]

points = p0

p0:name = name00

p0:position = -11.700403213501,2.46191310882568,55.9261016845703

p0:game_vertex_id = 1051

p0:level_vertex_id = 285863

 

 

[esc_sim_13_surge_3_walk]

points = p0

p0:name = name00

p0:position = -10.5211238861084,2.45401906967163,54.5706977844238

p0:game_vertex_id = 1051

p0:level_vertex_id = 287736

 

 

[esc_sim_13_surge_4_look]

points = p0

p0:name = name00

p0:position = -12.1378507614136,2.46710777282715,55.9775772094727

p0:game_vertex_id = 1051

p0:level_vertex_id = 285863

 

 

[esc_sim_13_surge_4_walk]

points = p0

p0:name = name00

p0:position = -12.5659475326538,2.4704270362854,55.9364585876465

p0:game_vertex_id = 1051

p0:level_vertex_id = 284939

 

 

[esc_sim_13_surge_5_look]

points = p0

p0:name = name00

p0:position = -11.3268537521362,2.45915699005127,56.0716171264648

p0:game_vertex_id = 1051

p0:level_vertex_id = 286804

 

 

[esc_sim_13_surge_5_walk]

points = p0

p0:name = name00

p0:position = -11.4233283996582,2.45504951477051,55.4901466369629

p0:game_vertex_id = 1051

p0:level_vertex_id = 286803

 

 

[esc_sim_13_surge_6_look]

points = p0

p0:name = name00

p0:position = -11.951548576355,2.46743059158325,56.5034790039063

p0:game_vertex_id = 1051

p0:level_vertex_id = 285864

 

 

[esc_sim_13_surge_6_walk]

points = p0

p0:name = name00

p0:position = -10.5399560928345,2.45401906967163,55.9832763671875

p0:game_vertex_id = 1051

p0:level_vertex_id = 287738

 

 

[esc_sim_13_surge_7_look]

points = p0

p0:name = name00

p0:position = -11.060601234436,2.46146583557129,56.6575355529785

p0:game_vertex_id = 1051

p0:level_vertex_id = 286805

 

 

[esc_sim_13_surge_7_walk]

points = p0

p0:name = name00

p0:position = -12.5727767944336,2.47284889221191,57.334114074707

p0:game_vertex_id = 1051

p0:level_vertex_id = 284941

 

 

[esc_sim_13_surge_8_look]

points = p0

p0:name = name00

p0:position = -11.7709636688232,2.46654939651489,57.2202682495117

p0:game_vertex_id = 1051

p0:level_vertex_id = 285865

 

 

[esc_sim_13_surge_8_walk]

points = p0

p0:name = name00

p0:position = -11.6660528182983,2.4660382270813,56.7951736450195

p0:game_vertex_id = 1051

p0:level_vertex_id = 285864

 

 

[esc_sim_13_surge_9_look]

points = p0

p0:name = name00

p0:position = -11.4014568328857,2.4647479057312,57.3022918701172

p0:game_vertex_id = 1051

p0:level_vertex_id = 286806

 

 

[esc_sim_13_surge_9_walk]

points = p0

p0:name = name00

p0:position = -10.5875377655029,2.46077871322632,57.3240737915039

p0:game_vertex_id = 1051

p0:level_vertex_id = 287740

 

 

[esc_sim_13_surge_10_look]

points = p0

p0:name = name00

p0:position = -12.009449005127,2.47024631500244,58.7685432434082

p0:game_vertex_id = 1051

p0:level_vertex_id = 285867

 

 

[esc_sim_13_surge_10_walk]

points = p0

p0:name = name00

p0:position = -12.5359506607056,2.47053003311157,58.6904754638672

p0:game_vertex_id = 1051

p0:level_vertex_id = 284943

 

 

[esc_sim_13_surge_11_look]

points = p0

p0:name = name00

p0:position = -11.6696643829346,2.47010707855225,58.7928047180176

p0:game_vertex_id = 1051

p0:level_vertex_id = 285867

 

 

[esc_sim_13_surge_11_walk]

points = p0

p0:name = name00

p0:position = -11.7617807388306,2.47143888473511,58.0255508422852

p0:game_vertex_id = 1051

p0:level_vertex_id = 285866

 

 

[esc_sim_13_surge_12_look]

points = p0

p0:name = name00

p0:position = -11.1556959152222,2.46973323822021,58.9260101318359

p0:game_vertex_id = 1051

p0:level_vertex_id = 286808

 

 

[esc_sim_13_surge_12_walk]

points = p0

p0:name = name00

p0:position = -10.5822420120239,2.46985769271851,58.7564964294434

p0:game_vertex_id = 1051

p0:level_vertex_id = 287742

 

 

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

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


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

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