#4651 03-08-2015 00:09

Shag
Registered: 29-03-2010
Posts: 147
Website

Re: Один вопрос

В вайсе помогал бесконечный цикл

:PLAYER_STOP
wait 0
0372: set_actor $PLAYER_ACTOR anim 0 wait_state_time 100 ms
jump @PLAYER_STOP

Встречный вопрос, лол:
как вернуть игроку управление в катсценах?
тот же

01B4: set_player $PLAYER_CHAR can_move 1

и подобные "очевидные" вещи не помогают...

Интересует рабочий способ для VC!

Last edited by Shag (03-08-2015 00:13)

Offline

#4652 06-08-2015 21:41

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Один вопрос

Shag wrote:

Встречный вопрос, лол:
как вернуть игроку управление в катсценах?

В катсценах управление игроку вернуть нельзя, потому что там нет игрока.
Катсцена - это просто записанная анимация, которая рендерится в реалтайме и использует текущие модели игрока и персонажей.

Offline

#4653 06-08-2015 22:54

Goldfish
From: Псков
Registered: 21-04-2015
Posts: 177
Website

Re: Один вопрос

как выставить машине  такой же угол наклона, как и у определенного участка земли (например под ней)
например , что бы транспорт выставить паралельно склону горы
если можно с примером
спасибо smile

Last edited by Goldfish (06-08-2015 22:56)

Offline

#4654 08-08-2015 01:11

Shag
Registered: 29-03-2010
Posts: 147
Website

Re: Один вопрос

listener wrote:

В катсценах управление игроку вернуть нельзя, потому что там нет игрока.
Катсцена - это просто записанная анимация, которая рендерится в реалтайме и использует текущие модели игрока и персонажей.

Забыл пояснить - спрашиваю для VC, и там игрок появится, если вернуть камеру на место(restore to jumpcut) и/или управлять ею через SCM. Можно сделать что угодно(вот тут я сделал скриптовую "симуляцию" управления игроком, во время катсцены: во второй половине видео половина зомбов и часть объектов - катсценовые), но вот непосредственно прямое управление игроком я вернуть не смог:(

Goldfish wrote:

как выставить машине  такой же угол наклона, как и у определенного участка земли (например под ней)
например , что бы транспорт выставить паралельно склону горы
если можно с примером
спасибо smile

Возможно, есть вариант по-проще, но в вайсе я бы сделал так(при условии, что угол поворота Za не меняется - т.е. уже установлен):
1)Получил бы координаты 2х точек прямо под авто и в 0.1 метре перед ним.
2)С помощью ground_z получил бы высоту земли в этих координатах
3)Высчитал бы "вектор" наклона у этих 2х точек с высотой, полученной с помощью ground_z
4)Высчитал бы угол между предыдущим вектором, и вектором, полученным из первоначальных координат с одной Z(например, Z авто)
5)В стракте авто нашел бы

+0x14 - [float] - X direction
+0x18 - [float] - Y direction
+0x1C - [float] - Z direction

6)Насколько помню, там углы от 0 до 6.28(2пи), значит, косинус угла, полученного в пункте 4 умножаем на -6.28 и это будет X direction, а синус - на 6.28, и это будет Y direction.
7)Записываем значения в

+0x14 - [float] - X direction
+0x18 - [float] - Y direction

8)Profit
P.S. Код будет огромнейший(вектора и углы между ними придется просчитывать простыми операциями +-*/ , т.к. спец. функций нет), плюс возможно я где-то накосячил, но примерно подобным методом я высчитывал перевороты автомобиля в направлении движения авто при падениях в грядущем скриптовом моде на VC(скоро выйдет), за SA не отвечаю.

Last edited by Shag (08-08-2015 01:36)

Offline

#4655 04-11-2015 16:19

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Здесь ещё кто-нибудь есть? У меня такие вопросы.

1. Можно ли проверить, игрок находится в уединённом месте?

2. Как сделать так, чтобы если выкинуть актёра из машины, он не садился обратно, не атаковал игрока, не убегал, а просто шёл как ни в чём не бывало?

3. Можно ли как-то пометить актёра? Чтобы в одном скрипте я его пометил, а в другом проверил, как именно я его пометил.

Offline

#4656 05-11-2015 13:00

НикИТОС
Registered: 05-06-2013
Posts: 133
Website

Re: Один вопрос

d88 wrote:

Здесь ещё кто-нибудь есть? У меня такие вопросы.

1. Можно ли проверить, игрок находится в уединённом месте?

2. Как сделать так, чтобы если выкинуть актёра из машины, он не садился обратно, не атаковал игрока, не убегал, а просто шёл как ни в чём не бывало?

3. Можно ли как-то пометить актёра? Чтобы в одном скрипте я его пометил, а в другом проверил, как именно я его пометил.

1. IMHO, ток смотреть в исходники (ты ж об уединении со шлюхами?)

2. Изменение decision maker'а уже пробовал?

3. https://sannybuilder.com/forums/viewtopic.php?id=2636

Offline

#4657 05-11-2015 20:39

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: Один вопрос

Можно ли как-то пометить актёра? Чтобы в одном скрипте я его пометил, а в другом проверил, как именно я его пометил.

а зачем для этого делать 2 скрипта? не будет ли лучше помечать и проверять актеров в одном скрипте?

Offline

#4658 07-11-2015 15:01

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

1. IMHO, ток смотреть в исходники (ты ж об уединении со шлюхами?)

Нет, идея такая. Игрок снимает и надевает маскировочный костюм, но делает это в укромном месте, чтобы его никто не видел. Там же он оставляет костюм. Не оставлять же его посреди дороги.

2. Изменение decision maker'а уже пробовал?

Я не знаю адреса нужной задачи.

а зачем для этого делать 2 скрипта? не будет ли лучше помечать и проверять актеров в одном скрипте?

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

Offline

#4659 08-11-2015 14:19

НикИТОС
Registered: 05-06-2013
Posts: 133
Website

Re: Один вопрос

d88 wrote:

1. IMHO, ток смотреть в исходники (ты ж об уединении со шлюхами?)

Нет, идея такая. Игрок снимает и надевает маскировочный костюм, но делает это в укромном месте, чтобы его никто не видел. Там же он оставляет костюм. Не оставлять же его посреди дороги.

Прочеши список опкодов по слову "node" и проверяй расстояние до ближайших узлов путей людей и ТС.

Offline

#4660 08-11-2015 15:26

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Один вопрос

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


I know everything and nothing...

Offline

#4661 08-11-2015 20:14

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Re: Один вопрос

d88 wrote:

Нет, идея такая. Игрок снимает и надевает маскировочный костюм, но делает это в укромном месте, чтобы его никто не видел. Там же он оставляет костюм. Не оставлять же его посреди дороги.

Я лучше использовал ближайших педов и проверял дистацию. Так точно будем знать есть ли кто рядом или нет. К примеру вот такой скрипт:

{$CLEO}
0000: NOP

// --------- НАЧАЛО ФУНКЦИИ

goto @IS_NOT_ANY_PED_NEAR_PLAYER_END
:IS_NOT_ANY_PED_NEAR_PLAYER
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 1@ closest_ped_to 2@  

if
056D:   actor 2@ defined // если ближайший пед найден
then
00A0: store_actor $PLAYER_ACTOR position_to 10@ 11@ 12@
00A0: store_actor 2@ position_to 13@ 14@ 15@
050A: 9@ = distance_between_XYZ 10@ 11@ 12@ and_XYZ 13@ 14@ 15@
    if
    0035:   0@ >= 9@ // если радиус между педом и игроком больше переданной дистанции
    then    
    jump @IS_NOT_ANY_PED_NEAR_PLAYER_LABEL       
    else
    0AB2: ret 1 0 // в указанном радиусе есть кто-то 
    end
end

if
056E:   car 1@ defined // если ближайшая машина найдена
then
01E9: 3@ = car 1@ num_passengers // получаем количество пассажиров
    if
    3@ == 0 // Если ближайшая машина пустая
    then
    jump @IS_NOT_ANY_PED_NEAR_PLAYER_LABEL
    else
    00A0: store_actor $PLAYER_ACTOR position_to 10@ 11@ 12@
    00AA: store_car 1@ position_to 3@ 4@ 5@
    050A: 9@ = distance_between_XYZ 10@ 11@ 12@ and_XYZ 13@ 14@ 15@
        if
        0035:   0@ >= 9@ // если радиус между машиной и игроком больше переданной дистанции
        then    
        jump @IS_NOT_ANY_PED_NEAR_PLAYER_LABEL       
        else
        0AB2: ret 1 0 // в указанном радиусе есть кто-то в машине  
        end
    end
else
jump @IS_NOT_ANY_PED_NEAR_PLAYER_LABEL
end
    
:IS_NOT_ANY_PED_NEAR_PLAYER_LABEL
0AB2: ret 1 1 // нет актёров на указанном радиусе
:IS_NOT_ANY_PED_NEAR_PLAYER_END


// --------- КОНЕЦ ФУНКЦИИ

:SCRIPT
thread 'SCRIPT'
wait 0

if and
0AB0:   key_pressed 9 // tab
0AB1: call_scm_func @IS_NOT_ANY_PED_NEAR_PLAYER 1 raius 10.0 store_to 2@
then
0ACE: show_formatted_text_box "RESULT: %d" 2@
     // ------------------ или например пишем код, где игрок одевает/снимает маскировочный костюм --------------
end

jump @SCRIPT

Сюда же можно было скинуть проверку на то, есть ли преграды между актёром и транспортом, но это уже сами допишите.

Если использовать в мейне, то копируйте функцию в файл, что бы был в не потоков, миссий и внешних скриптов, после чего в нужный момент проверяйте:

if
0AB1: call_scm_func @IS_NOT_ANY_PED_NEAR_PLAYER 1 raius 10.0 store_to 2@
then
// бла-бла-бла
end

Где:
10.0 - максимальный радиус проверки
2@ - в переменную запишется состояние: 0 - есть кто-то в этом радиусе, 1 - никого нет

Last edited by wmysterio (08-11-2015 20:16)

Offline

#4662 16-11-2015 16:38

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Кстати, я нашёл вот такой опкод

06FF:   any_ped_near_actor 0@ in_range 20.0

Не пробовал, но, возможно, его можно использовать вместо того, чтобы перебирать пул.

Теперь такой вопрос. Делаю миссию, в которой игрок должен убить несколько врагов, причём желательно по-тихому. Т.е. он должен убивать их незаметно, без шума - ножом или пистолетом с глушителем. Если же кто-то из врагов его увидит или услышит звуки выстрелов, он поднимет тревогу.
Так вот, как сделать проверку на то, что актёр заметил игрока или услышал звуки выстрелов? Знаю, есть опкод 0364:, но он работает вообще не так как надо. Он срабатывает просто если между актёром и игроком нет препятствий, даже если актёр стоит спиной к игроку и никак не может его увидеть. Слышимость звуков пробовал проверять через событие актёра (номер 61 - актёр слышит громкий звук), но это почему-то не работает.

Также хотелось бы сделать так, чтобы враги поднимали тревогу, если обнаружат труп. Пробовал проверку 0480:, но тоже не работает. Можно как-то проверить, что актёр обнаружил труп?

Offline

#4663 16-11-2015 18:44

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Re: Один вопрос

d88 wrote:

Слышимость звуков пробовал проверять через событие актёра

Попробуйте это использовать:

Actor.StorePos($PLAYER_ACTOR, 160@, 161@, 162@)
0855: get_actor -1 noise_level_at 160@ 161@ 162@ store_to 166@

В переменную 166@ будет записан уровень шума

d88 wrote:

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

Можно и так:

if
00E1: key_pressed 0 17 // нажато клавишу огонь
then
   if or
   02D8:   actor $PLAYER_ACTOR current_weapon == 0 // Если стреляет с оружия 0
   02D8:   actor $PLAYER_ACTOR current_weapon == 1 // ИЛИ стреляет с оружия 1
   02D8:   actor $PLAYER_ACTOR current_weapon == 2 // ИЛИ стреляет с оружия 2
   then 
   jump @FAILED // прыгаем на метку провала
   end
end

На счёт проверки на то, находится ли актёр возле трупа, то есть несколько вариантов:

0889: store_actor 0@ center_of_body_position_to 1@ 2@ 3@ // GET_DEAD_CHAR_COORDINATES
if
00EC:   actor $PLAYER_ACTOR sphere 0 near_point 1@ 2@ radius 2.0 2.0
then
// бьём тревогу
end
//----------------------------------------------------------------
if AND
0104:   actor $PLAYER_ACTOR near_actor 0@ radius 3.0 3.0 3.0 sphere 0
0118:   actor 0@ dead
then
// бьём тревогу
end

Ну и в таком духе. Главное включить фантазию а там сгенерируется практически любая проверка

Last edited by wmysterio (16-11-2015 19:09)

Offline

#4664 18-11-2015 11:02

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

wmysterio wrote:

Попробуйте это использовать:

Actor.StorePos($PLAYER_ACTOR, 160@, 161@, 162@)
0855: get_actor -1 noise_level_at 160@ 161@ 162@ store_to 166@

В переменную 166@ будет записан уровень шума

А какое должно быть значение переменной при шуме?

И это всё проверки на шум от самого игрока.  А если он, скажем, бросит гранату или выстрелит из ракетницы, как проверить, что враги услышали взрыв?

wmysterio wrote:

Ну и в таком духе. Главное включить фантазию а там сгенерируется практически любая проверка

Если бы всё было так просто. Эти способы ведь не позволяют проверить, видит ли актёр труп.
Я вот попробовал такой способ, но он не действует. Даже не знаю, что здесь может быть не так.

04C4: store_coords_to 802@ 803@ 804@ from_actor 201@ with_offset 0.0 23.0 0.0 
0AE1: 801@ = random_actor_near_point 802@ 803@ 804@ in_radius 24.0 find_next 1 pass_deads 0 //IF and SET 
if 
   Actor.Defined(801@)
else_jump @MISSION20_4779 
if 
   Actor.Dead(801@)
else_jump @MISSION20_4779 
actor.StorePos(201@, 805@, 806@, 807@)
actor.StorePos(801@, 808@, 809@, 810@)
if 
06BD:   no_obstacles_between 805@ 806@ 807@ and 808@ 809@ 810@ solid 1 car 1 actor 0 object 1 particle 0 
else_jump @MISSION20_4779 

По поводу проверки, заметил ли игрока кто-то из врагов. Можно ли проверить, что актёр стреляет или хотя бы целится в игрока? Это вполне бы сошло за проверку, что игрок обнаружен.

Offline

#4665 18-11-2015 17:18

Goldfish
From: Псков
Registered: 21-04-2015
Posts: 177
Website

Re: Один вопрос

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

Offline

#4666 18-11-2015 18:54

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Re: Один вопрос

d88 wrote:

А какое должно быть значение переменной при шуме?

Должно быть значение типа float, если я правильно понял вопрос.

d88 wrote:

Если бы всё было так просто.

Ну это пока ещё не ад, чтобы делать такой вывод

d88 wrote:

Эти способы ведь не позволяют проверить, видит ли актёр труп.

Ну так не обязательно в буквальном смысле искать опкод, который проверял бы нужное действие. Графическое меню ведь тоже одним опкодом не нарисуешь. Нужно искать альтернативы, если других вариантов нет/не нашел

d88 wrote:

Можно ли проверить, что актёр стреляет

Можно. Вот опкоды:

02D6:   actor $PLAYER_ACTOR fires_weapon 0 in_rectangle_cornerA -2774.03 -1572.78 cornerB -2837.13 -1468.24 // Если стреляет с оружия с ID 0 в 2D кубе
02E0:   actor $PLAYER_ACTOR firing_weapon // Если просто стреляет где-угодно и с чего угодно ( вроде действует только на оружие, где есть патроны )

Last edited by wmysterio (18-11-2015 19:06)

Offline

#4667 19-11-2015 14:49

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Должно быть значение типа float, если я правильно понял вопрос.

Нет, я про конкретное число. Чему оно должно быть равно? Находил этот опкод в мэйне, но там почему-то значение ещё и умножается на какое число.

Можно. Вот опкоды:

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

Ещё хотел спросить. Если машина, созданная в миссии, взрывается, можно сделать так, чтобы она не исчезала до конца миссии?

Offline

#4668 19-11-2015 17:35

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Re: Один вопрос

d88 wrote:

Нет, я про конкретное число. Чему оно должно быть равно? Находил этот опкод в мэйне, но там почему-то значение ещё и умножается на какое число.

Не проверяйте на равенство, проверяйте диапазон. Например, если больше какого-то диапазона. Умножается на число там для того, чтобы правильно отобразить полоску "Шум". Проверить уровень текущий шума можно через скрипт:

{$CLEO}
0000:

0@ = 0.0

while true
wait 0
Actor.StorePos($PLAYER_ACTOR, 1@, 2@, 3@)
0855: get_actor -1 noise_level_at 1@ 2@ 3@ store_to 2@

    if
    02E0:   actor $PLAYER_ACTOR firing_weapon 
    then
    0ACE: show_formatted_text_box "Actor use wepon"
    end
    
    if
    02D6:   actor $PLAYER_ACTOR fires_weapon 0 in_rectangle_cornerA -50.0 -50.0 cornerB 50.0 50.0
    then
    0ACE: show_formatted_text_box "Actor shooting in corner with weapon"
    end
    
    if
    0025:   2@ > 0@  // (float)
    then  
    00BE: text_clear_all
    0AD0: show_formatted_text_lowpriority "noise %f" time 4000 2@ // показываем сколько шума создал актёр
    end

end

Мои исследования показали, что если игрок будет идти, то уровень примерно 44.0, если прыгает или бежит - 55.0, если стреляет - то обычно значение больше 100.0, ближнебойное оружие - 39.0. Некоторое оружие показывает 0.0( например огнетушитель ). Остальные сможете уже сами проверить, скрипт уже есть smile А там и проверить нужное значение в своём скрипте. Так же сюда учитывается и другой шум, например если открыть машину, то двери также будут генерировать шум, при этом шум от того как закрывает дверь в трое больше чем от шума открытия. Как не странно, если игрок сигналит в машине, то шум не генерируется smile

d88 wrote:

Второй опкод срабатывает сразу, хотя актёр не стреляет.

Опкоды рабочие. Правда я ошибся в одкоде 02D6. Параметр 0 указывает нужно ли рисовать сферу. Оружие может быть любое, которое имеет патроны.


d88 wrote:

Ещё хотел спросить. Если машина, созданная в миссии, взрывается, можно сделать так, чтобы она не исчезала до конца миссии?

С этим пока я не знаю - ни разу не приходилось отслеживать взорванную машину. Попробуйте создать над ней маркер и задать  его режим отображения:

5@ = Car.Create(#ADMIRAL,14.9045, -4.6174, 4.7812)
6@ = Marker.CreateAboveCar(5@)
018B: set_marker 6@ radar_mode 4 // 4 - ничего не отображать: ни на радаре, ни стрелки над машиной

Код нужно проверить, но насколько я знаю сущность, что помечена маркером, с игры не удаляется во время миссии. Опять же это нужно проверить.

Last edited by wmysterio (19-11-2015 17:50)

Offline

#4669 24-11-2015 13:47

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Спасибо, вроде удалось более менее реализовать как хотел.

Offline

#4670 05-12-2015 19:49

BalashovM
Registered: 05-12-2015
Posts: 3

Re: Один вопрос

Вопросы от зелёного новичка (понимающего суть программирования, но не писавшего скрипты к САньке):
1) Должен ли Sunny Builder быть установлен прямо в папку с игрой?
2) Не создаст ли проблем разница в версиях библиотеки CLEO - 4 и версии SB - 3?
3) Пробовал написать (смотри - скопипастить) простой скрипт по этой инструкции - во-первых, выдаёт ошибку от {$VERSION}, пишет, что директива не опознана, а если её удалить и скрипт скомпилится, при разворачивании игры обратно, пед не появляется на моих координатах.
Вообще, с чего стоит начать? А то я рванул с места в карьер.
Заранее благодарен вам, уважаемые корифеи форума!

Offline

#4671 05-12-2015 21:38

НикИТОС
Registered: 05-06-2013
Posts: 133
Website

Re: Один вопрос

1) Нет.
2) Нет.
3) Какой скрипт? Какая инструкция? Какая конкретно ошибка? Привыкай описывать проблемы максимально подробно. Не все знающие решение люди захотят переспрашивать или гадать, многие просто закроют вкладку.

Начать стоит с изучения справки Sanny Builder’а. На мой взгляд, она больше подходит на роль справки, чем учебника (что логично).
Если знаешь английский, есть три мастрида. Очень рекомендую, они исчерпывающи и очень качественно написаны (особенно первый и третий).
Если с английским плохо, то всё плохо. Тогда бери этот учебник (сайт скоро встанет). Я уж не помню, что там к чему. Он мне не очень нравился, во многом повторял справку, но именно по нему я научился скриптить.
Это ещё оч хороший курс. Прям идёшь с 12-ой страницы по убыванию, отгоняя мысли "Зачем мне именно это? Когда уже скрипты писать начну?". Там просто первые ~10 статей предваряют вопросы, которые могут возникнуть после написания хеллоуворлда.

Offline

#4672 06-12-2015 00:28

Goldfish
From: Псков
Registered: 21-04-2015
Posts: 177
Website

Re: Один вопрос

как из одного скрипта получить значение переменной другого скрипта?
Пробовал :
старт пула потоков > первый активныф поинтер  + 60 + 40 (переменная 10) и врите мемори, но получил вылет sad

Offline

#4673 06-12-2015 00:40

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Re: Один вопрос

Goldfish wrote:

как из одного скрипта получить значение переменной другого скрипта?
Пробовал :
старт пула потоков > первый активныф поинтер  + 60 + 40 (переменная 10) и врите мемори, но получил вылет sad

Ну для начала нужно получить поинтер нужного потока:

if
0AAA: 0@ = thread 'MYTHREAD' pointer
then
// смещения
end

А уже затем делать смещения. Имеется ввиду локальные переменные.

Offline

#4674 06-12-2015 00:52

Goldfish
From: Псков
Registered: 21-04-2015
Posts: 177
Website

Re: Один вопрос

wmysterio wrote:
Goldfish wrote:

как из одного скрипта получить значение переменной другого скрипта?
Пробовал :
старт пула потоков > первый активныф поинтер  + 60 + 40 (переменная 10) и врите мемори, но получил вылет sad

Ну для начала нужно получить поинтер нужного потока:

if
0AAA: 0@ = thread 'MYTHREAD' pointer
then
// смещения
end

А уже затем делать смещения. Имеется ввиду локальные переменные.

Василь СПС!
Я даже и не знал про этот опкод grin

Last edited by Goldfish (06-12-2015 00:53)

Offline

#4675 04-02-2016 20:26

HeadShooter
Registered: 04-02-2016
Posts: 1

Re: Один вопрос

Как вызвать функцию начала новой игры и функцию открытия меню "Загрузка игры"?

Offline

Board footer

Powered by FluxBB