Способ добавления воды на карту Cs1.6 и не только. (BSP в BSP)

Сообщения
1,408
Реакции
182
Помог
2 раз(а)
Здравствуйте!

Хотел бы поделиться своей наработкой, заодно рассказать как добавлять сущности (BSP) на карту Cs1.6

Давно я задался вопросом, как же добавить воду на карту. После долгих поисков так ничего и не нашел.

Позже мне помогали люди с форума, было пару способов, один сложный, другой не очень, его я и выбрал, спасибо: Garey


Минус данного способа, что нужно постоянно редактировать сущности BSP под нужные карты. (если нужно на разных, подгонять размеры)

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


Вопрос: Как же добавить сущность (BSP) на карту?

Ответ: Очень просто, для этого нужно сделать так:
C++:
public plugin_precache()
{
    precache_model("maps/water2.bsp");
}
При добавлении сущности на карту, нужно учитывать её положение на карте (координаты).

BSP сущность можно создать с нуля, иначе отредактировать можно такими программами как J.A.C.K. (прежде декомпилировав например BSP2MAP)




Компилировать отредактированные файлы в BSP можно с помощью ZHLT



И так:

1. у нас есть сущность воды BSP (квадрат), с помощью J.A.C.K. я подогнал размеры и координаты специально под карту de_dust2.
2. так же имеются сущности стен (func_wall : texture glass), которые были подогнаны под воду (по бокам).

Далее нам нужно сделать небольшой плагин, для загрузки на карту сущностей и правильном их функционировании (а также поведения игроков в воде и тп):

C++:
#include <amxmodx>
#include <fakemeta_util>

new WaterEntity;

new const BSP_RESOURCES[][] =
{
    "maps/water2.bsp",
    "maps/wall_new5.bsp",
    "maps/wall_new4.bsp",
    "maps/wall_new6.bsp"
};

public plugin_precache()
{
    register_plugin("water_room_dd2", "1.0.0", "wellasgood");

    new Float:Origin[3];

    precache_model(BSP_RESOURCES[0]);

    WaterEntity = fm_create_entity("func_water");

    fm_set_kvd(WaterEntity,"classname","func_water")
    fm_set_kvd(WaterEntity,"rendermode","2")
    fm_set_kvd(WaterEntity,"renderamt","130")
    fm_set_kvd(WaterEntity,"skin","-3")
    fm_set_kvd(WaterEntity,"WaveHeight","5")
    fm_entity_set_model(WaterEntity, BSP_RESOURCES[0]);
    fm_entity_set_origin(WaterEntity, Origin);
    fm_DispatchSpawn(WaterEntity);
    fm_drop_to_floor(WaterEntity);

    precache_model(BSP_RESOURCES[1]);

    new GlassEntities1 = fm_create_entity("func_wall");

    fm_set_kvd(GlassEntities1,"classname","func_wall");
    fm_set_kvd(GlassEntities1,"rendermode","2");
    fm_set_kvd(GlassEntities1,"renderamt","100");
    fm_entity_set_model(GlassEntities1, BSP_RESOURCES[1]);
    fm_entity_set_origin(GlassEntities1, Origin);
    fm_DispatchSpawn(GlassEntities1);
    fm_drop_to_floor(GlassEntities1);

    precache_model(BSP_RESOURCES[2]);

    new GlassEntities2 = fm_create_entity("func_wall");

    fm_set_kvd(GlassEntities2,"classname","func_wall");
    fm_set_kvd(GlassEntities2,"rendermode","2");
    fm_set_kvd(GlassEntities2,"renderamt","100");
    fm_entity_set_model(GlassEntities2, BSP_RESOURCES[2]);
    fm_entity_set_origin(GlassEntities2, Origin);
    fm_DispatchSpawn(GlassEntities2);
    fm_drop_to_floor(GlassEntities2);

    precache_model(BSP_RESOURCES[3]);

    new GlassEntities3 = fm_create_entity("func_wall");

    fm_set_kvd(GlassEntities3,"classname","func_wall");
    fm_set_kvd(GlassEntities3,"rendermode","2");
    fm_set_kvd(GlassEntities3,"renderamt","100");
    fm_entity_set_model(GlassEntities3, BSP_RESOURCES[3]);
    fm_entity_set_origin(GlassEntities3, Origin);
    fm_DispatchSpawn(GlassEntities3);
    fm_drop_to_floor(GlassEntities3);
}

public plugin_init()
{
    register_clcmd("water+", "pWater");
    register_clcmd("water-", "mWater");
}

public mWater(id)
{
    new Float:origin[3];
    pev(WaterEntity, pev_origin, origin);
    origin[2] -= 15.0;
    set_pev(WaterEntity, pev_origin, origin);
}

public pWater(id)
{
    new Float:origin[3];
    pev(WaterEntity, pev_origin, origin);
    origin[2] += 15.0;
    set_pev(WaterEntity, pev_origin, origin);
}

Код предоставлен в экспериментальном виде. (так как наработка)


На выходе получаем вот такое:



Бонусом прикрепляю готовые файлы сущностей (вода + стены).


Спасибо за внимание! Хотелось бы развить эту тему!
 

Вложения

Последнее редактирование:
Сообщения
1,106
Реакции
319
wellasgood, а получалось добавлять ящики по которым можно ходить без pred.error 1.0000 на клиентах?
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
karaulov, мне нужны были стеклянные стены прозрачные, неразбиваемые.

Стены получилось загрузить по отдельности, в таком случае норм работает. (Если сделать BSP с 3 стенами сразу, то пару других почему то черные)

За ящики не вкурсе, надо тестировать

Кстати, таким же способом, по идее, можно добавить и другой тип жидкости, лава и тп..

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

+ думаю можно попробовать так же загрузить разбиваемые стекла.
 
Последнее редактирование:
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
Вот демонстрация разбиваемого стекла.

9 Мар 2021
BalbuR, согласен, в маппинге я не очень силен, но базовые навыки использования различных программ есть, по этому могу по маленьку тестировать и реализовывать задуманное.

Я не в курсе как себя поведет тот или иной объект (отличный от того что в примере), нужно тестировать.

C++:
+    new GlassEntities1 = fm_create_entity("func_breakable");

+    fm_set_kvd(GlassEntities1,"classname","func_breakable");
+    fm_set_kvd(GlassEntities1,"strenght","15");
+    fm_set_kvd(GlassEntities1,"rendermode","2");
+    fm_set_kvd(GlassEntities1,"renderamt","100");
+    fm_entity_set_model(GlassEntities1, BSP_RESOURCES[1]);
+    fm_entity_set_origin(GlassEntities1, Origin);
+    fm_DispatchSpawn(GlassEntities1);
+    fm_drop_to_floor(GlassEntities1);
9 Мар 2021
Былая такая задумка, спрятать в комнату оружия например, и придумать как сделать так, что бы игроки что-то сделав, могли получить его. (такая комнатка с ништяками, только иным способом реализации)
 

Вложения

Последнее редактирование:
Сообщения
1,106
Реакции
319
Ну там с примера Garey где машина, когда на нее становишься клиент выдает "pred. error 1.0000" и игрока как бы отталкивает ) Хотелось бы избавиться от этой фигни ) Если получится у кого напишите ) А то весь кайф ломает от этих созданных объектов))
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
Ну там с примера Garey где машина, когда на нее становишься клиент выдает "pred. error 1.0000" и игрока как бы отталкивает ) Хотелось бы избавиться от этой фигни ) Если получится у кого напишите ) А то весь кайф ломает от этих созданных объектов))
Предполагаю что нужно хукать событие touch, делать проверки.. когда игрок и эта сущность соприкасаются..
9 Мар 2021
Как идея для применения, сделать таким образом, например тюрьму для игроков) Построить из BSP на карте квадрат закрытый и сажать туда..)

или можно сделать отдельное место для проведения 1 на 1 дуэлей
 
Последнее редактирование:
Сообщения
1,106
Реакции
319
wellasgood, ошибка именно клиентская. Мне кажется так это не пофиксить :(
 
Сообщения
1,106
Реакции
319
Если через amxx добавляешь объект он нормально работает без pred. error на клиенте? (ну например разбиваемое стекло, если к нему подойдешь в упор, не отталкивает от него ? )
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
karaulov, я тестировал, нет. просто стена. (бывает только застревает игрок рядом со стеклом, тестировал на GSclient)
9 Мар 2021
ent файл не вариант?
fantom, это как? я может и видел, но уже не помню. (короче на момент моих действий выбрал такой способ, так как его знаю) =)
9 Мар 2021
karaulov ,

спешол фор Ю



возможно влияет сам тип сущности + плагином задаются свойства, что бы движок распознавал и правильно функционировал с игроком и остальным и тп.
 
Последнее редактирование:
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
и на каждой карте добавлять координаты для каждой дуэли, не комильфо как-то
maFFyoZZyk, ну это лучше, чем каждую карту править. (так получается, что мы добавляем сущности на карту, но саму карту не трогаем)
 
Сообщения
775
Реакции
291
Помог
11 раз(а)
wellasgood, ну я не помню такого, чтобы для дуэлек карты правили. Перемещают на респу т или кт , главное дистанцию не задавать огромную между игроками
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
maFFyoZZyk, ну если заморочиться, и сделать этим способом, то будет круто, а так много сил и времени потратишь, это да.

Просто добавить на карты стеклянный квадрат, игроков туда телепортить. (в плагине допустим отдельном, указывать координаты для каждой карты)
 
Сообщения
775
Реакции
291
Помог
11 раз(а)
ну без обид, но мое личное мнение, что это глупая затея. я понимаю, что каждый пишет под свои хотелки, но кроме как использовать это как доп 2х2 моду, я не вижу. Строить доп кусок карт и подгружать его для дуэлек... ну хз...может для какого-то джаил сервера и норм, а для паблика, не рациональная трата ресурсов. вот если бы плагин улучшал текстуры до 10х, что по итогу карты казались бы с hd текстурами, это круто. (сразу отпадает нужность в каких-то сборках, которые будут это делать). но это мое сугубо личное мнение
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
maFFyoZZyk, ну можно делать этот квадрат обычными моделями .mdl , а можно просто подгружать сущностями BSP. (кому что по вкусу) и что затратно а что нет. нужно еще посудить.

+можно использовать как закрытие проходов. если маленький онлайн.

т.е включать отключать плагин, получается. (который подгружает BSP) или еще как-то по умному -)

также с этими сущностями стекла, вроде нету просадки фпс когда игрок рядом. (обычно бывает те у кого слабенькие ПК, у них фпс просаживается, в случае приближения обзора к моделькам)
 
Последнее редактирование:
Сообщения
24
Реакции
0
maFFyoZZyk, ну можно делать этот квадрат обычными моделями .mdl , а можно просто подгружать сущностями BSP. (кому что по вкусу) и что затратно а что нет. нужно еще посудить.

+можно использовать как закрытие проходов. если маленький онлайн.

т.е включать отключать плагин, получается. (который подгружает BSP) или еще как-то по умному -)

также с этими сущностями стекла, вроде нету просадки фпс когда игрок рядом. (обычно бывает те у кого слабенькие ПК, у них фпс просаживается, в случае приближения обзора к моделькам)
Hey, why is the water invisible, you can't make it visible? Greetings.
 
Сообщения
1,408
Реакции
182
Помог
2 раз(а)
faken, hi, it is visible from above (waves), but I stretched the water high up, so the top is not visible, and so it is normal
9 Мар 2021
faken,



you see, here the waves are visible from above, but when in the water itself and it is stretched high, it seems that it is not there.
 
Последнее редактирование:
Сообщения
24
Реакции
0
faken, hi, it is visible from above (waves), but I stretched the water high up, so the top is not visible, and so it is normal
9 Мар 2021
faken,



you see, here the waves are visible from above, but when in the water itself and it is stretched high, it seems that it is not there.
I had the same effect once, but I couldn't do it possible to swim. Have you tried to create a ladder? Do you think it's possible to do?
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу