Sidebar

Несколько нубских вопросов

Jarkoe

Deleted
06.05.11
286
4
0
Несколько нубских вопросов

Доброго суток времени.
Вопросы:
1.Как сделать так что бы на E поднимать оружия
2.Как сделать замену оружия
Пример у нас в руках глок и когда берёшь берету и глок выбрасывается,как раз при нажатие на E
 
  • Like
Reactions: ZAZA

Faiton

New member
11.07.06
56
3
0
1) Всё просто, есть функция у предметов когда игрок или кто-либо дотрагивается до них, в эту функцию встраиваешь проверку на нажатие кнопки использовать у игрока.
Например, чтобы монстры не подбирали предметы которые валяются на полу в функции CBasePlayerItem:: DefaultTouch (в weapons.cpp) есть такая строка:

if ( !pOther->IsPlayer() )
return;
pOther - это объект который дотронулся до предмета лежащего на земле.
Проверяем, если тот кто дотронулся (pOther) не игрок, то прерываем выполнение функции.
Исходя из этого, добавив ниже строку типа этой:
if ( !(pOther->pev->button & IN_USE) )
return ;
Ты получишь поднятие предметов только когда нажата клавиша использовать. Но когда ты это сделаешь у тебя могут возникнуть проблемы при получении оружия с помощью impulse 101, в прочем оставляю за тобой право додуматься как это исправить.


2) Тут я тебе предложу только общую схему. При попытки поднятия нового оружия тебе нужно получить слот поднимаемого оружия и если там уже есть что-нибудь, то удалить имеющееся оружие из слота и создать перед игроком, а также добавить новое поднятое оружие в слот (в прочем это и так работает).
Могу посоветовать заглянуть в функцию AddPlayerItem (которая находится в player.cpp), она вызывается каждый раз когда игрок что-либо поднимает.
 
  • Like
Reactions: ZAZA and igi_sev

NATURALW()

New member
02.08.10
145
1
0
Здравствуйте , может не теме но пожалуйста ответе , я хочу чтобы когда у игрока 6 жизней чтобы он медленно бегал вот что я пишу. Проверку но я не знаю как скорость обозначена
if (pev->health < 6)
если я не ошибаюсь надо добавить switch и sv_maxspeed 350 .
дальше не знаю как называется функция
 

Faiton

New member
11.07.06
56
3
0
Чтобы поменять какую-либо консольную переменную можешь воспользоваться командой CVAR_SET_FLOAT, в твоём случае будет CVAR_SET_FLOAT( "sv_maxspeed", Тут ЗнАчЕнИе );
Но игроки могут легко обойти это, прописав в консоле нормальную скорость. Я бы искал другие методы. Я бы рекомендовал тебе покопать файл pm_shared.c который расположен "ТВОЙ ПРОЕКТ\pm_shared\pm_shared.c" Если не ошибаюсь там прописана ходьба, бег, прыжки и подъём по лестнице, копай смотри, разбирайся.
P.S.
Как временный вариант, своего рода заглушка твой метод пойдёт, но с условием, что потом сделать как нужно.
 

NATURALW()

New member
02.08.10
145
1
0
Спасибо за ответ , я не понял не как , как сделать чтобы при взрыве гранаты отлетали монстры пожалуйста помогите как я понял это m_pPlayer тока у монстров я не понял.
 

Faiton

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

Код отброса проще встроить в код взрыва, тогда ненужно будет искать монстров в нужном радиусе и определять "видимость" каждого монстра из эпицентра взрыва. Я рекомендую тебе покопаться в файле combat.cpp, конкретно в функции RadiusDamage. Там где наносится повреждение ты просто задаешь ускорение от точки взрыва через pev->velocity и всё, энтити которая попадает под взрыв получает нужное тебе ускорение, только я рекомендую сделать проверку на нужные энтити, так как без проверки от эпицентра взрыва полетят прочь не только ящики и монстры, но и например стёкла из окон (целыми в виде листа) и ещё бог знает что). Поэтому желательна проверка на возможность передвижения и на принадлежность к монстрам.

Вектор движения ты можешь получить из разности координат (pev->origin) точки взрыва и нахождения монстра.

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

Творческих успехов.
 

NATURALW()

New member
02.08.10
145
1
0
Огромное спасибо :) Еще один вопрос как добавить на модель спрайт не как не понял :(
 

Faiton

New member
11.07.06
56
3
0
2 NATURALW(): попытайся сформулировать свой вопрос точнее, модель может быть в виде монстра который бегает на карте, модель может быть в руках у игрока в виде оружия, методы реализации разные.

Насколько я понял, ты про прикрепление спрайта к модели монстра. Сразу вспомнился мне огромный монстр с красным глазом по имени Gargantua.
Как раз красный глаз у него и сделан спрайтом.

По поводу реализации посмотри в файле gargantua.cpp на сервере, там ищи m_pEyeGlow это и есть тот самый спрайт который светиться, далее сам поймёшь как он загружается, используется и удаляется.
 

NATURALW()

New member
02.08.10
145
1
0
Cпасибо за ответ :) думаю для меня это пока сложно , чтоб ты мне посоветовали бы с чего начать ?
 

Jarkoe

Deleted
06.05.11
286
4
0
Faiton,Нужна ещё помощь.
Оружие подбирается на Е,всё хорошо.
Но патроны аптечки и прочее поднимается автомотически.
Как исправить?
 

Game Server

Доноры Красавчики

Користувачі онлайн