HLFX.Ru Forum Страницы (240): « Первая ... « 231 232 233 234 [235] 236 237 238 239 » ... Последняя »
Показать все 3593 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)


Отправлено Luciferchik 11-08-2022 в 19:24:

Ku2zoff По твоему примеру вроде как работает но нужно ещё допиливать. Комменты конечно позабавили мы ведь не профи в коде поэтому пишем как можем

__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.


Отправлено hgrunt_2020 12-08-2022 в 07:03:

Мне Ku2zoff подсказал что можно под глянуть ограничение пушек в кс 1.6, я ограничение сделал, но как теперь сделать так что бы при юзе пушки которая лежит на полу она попадала в инвентарь, а та что занимала этот же слот легла на её же место

__________________


https://www.moddb.com/mods/metro-2031-last-chance


Отправлено Ku2zoff 12-08-2022 в 08:29:

hgrunt_2020 у тебя команда Drop работает? Ну то есть, если выкинуть пушку, то подбирается другая? Поищи в player.cpp вот этот комментарий:

C++ Source Code:
// if we land here with a valid pWeapon pointer, that's because we found the
  // item we want to drop and hit a BREAK;  pWeapon is the item.

Там код выкидывания веапонбокса. Убери return для сингла, чтобы можно было выбрасывать пушки в одиночной игре. После вызова pWeaponBox->PackWeapon( pWeapon ); назначай веапонбоксу модель оружия, которое выкидывается, например так:
C++ Source Code:
1
switch (pWeapon->m_iId)
2
{
3
case WEAPON_CROWBAR:
4
    SET_MODEL(ENT(pWeaponBox->pev), "models/w_crowbar.mdl");
5
  break;
6
}

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

Как только это наладишь, чтобы пушки нормально заменялись при выбрасывании, убери функцию Touch у пушек и сделай им Use. В юзе делай проверку на наличие у игрока пушки такого же класса, и если она есть, вызывай DropPlayerItem с аргументом, где будет название выкидываемой пушки:
C++ Source Code:
pPlayer->DropPlayerItem("weapon_crowbar");

Чтобы случайно не менять пушки, ставь им флаг FCAP_CONTINUOUS_USE и считай время в функции юза. Если игрок жмёт кнопку например секунду, пушка сменяется. Когда дублирующей пушки нет, то можно время не считать, и подбирать пушку сразу.
Наверное, напишу себе такой код, потому что планирую делать глок и беретту, дигл и питон. Может быть ещё что-то. Чтобы не забивать слоты, а заставить игрока делать выбор. Например, глок с глушителем для стелс-прохождения.


Отправлено hgrunt_2020 12-08-2022 в 09:43:

Ku2zoff она работает но криво, некоторые пушки не подбирает а подбирает только их патроны

__________________


https://www.moddb.com/mods/metro-2031-last-chance


Отправлено Ku2zoff 12-08-2022 в 10:09:

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


Отправлено hgrunt_2020 12-08-2022 в 11:19:

Ku2zoff вот дроп что у мен

C++ Source Code:
1
void CBasePlayer::DropPlayerItem ( char *pszItemName )
2
{
3
  if ( !strlen( pszItemName ) )
4
  {
5
    // if this string has no length, the client didn't type a name!
6
      // assume player wants to drop the active item.
7
    // make the string null to make future operations in this function easier
8
    pszItemName = NULL;
9
  }
10
 
11
  CBasePlayerItem *pWeapon;
12
  int i;
13
 
14
  for ( i = 0 ; i < MAX_ITEM_TYPES ; i++ )
15
  {
16
    pWeapon = m_rgpPlayerItems[ i ];
17
 
18
    while ( pWeapon )
19
    {
20
      if ( pszItemName )
21
      {
22
        // try to match by name.
23
        if ( !strcmp( pszItemName, STRING( pWeapon->pev->classname ) ) )
24
        {
25
          // match!
26
          break;
27
        }
28
      }
29
      else
30
      {
31
        // trying to drop active item
32
        if ( pWeapon == m_pActiveItem )
33
        {
34
          // active item!
35
          break;
36
        }
37
      }
38
 
39
      pWeapon = pWeapon->m_pNext;
40
    }
41
 
42
 
43
    // if we land here with a valid pWeapon pointer, that's because we found the
44
      // item we want to drop and hit a BREAK;  pWeapon is the item.
45
    if ( pWeapon )
46
    {
47
      g_pGameRules->GetNextBestWeapon( this, pWeapon );
48
      if (pWeapon->iSlot() <= 2)
49
        Slots[pWeapon->iSlot()] = false;
50
 
51
      UTIL_MakeVectors ( pev->angles );
52
 
53
      pev->weapons &= ~(1 << pWeapon->m_iId);// take item off hud
54
 
55
      CWeaponBox *pWeaponBox = (CWeaponBox *)CBaseEntity::Create( "weaponbox", pev->origin + gpGlobals->v_forward * 10, pev->angles, edict() );
56
      pWeaponBox->pev->angles.x = 0;
57
      pWeaponBox->pev->angles.z = 0;
58
      pWeaponBox-&gt<img src="images/smilies/pp2.gif" border="0" alt="">ackWeapon( pWeapon );
59
      pWeaponBox->pev->velocity = gpGlobals->v_forward * 300 + gpGlobals->v_forward * 100;
60
 
61
      // drop half of the ammo for this weapon.
62
      int	iAmmoIndex;
63
 
64
      iAmmoIndex = GetAmmoIndex ( pWeapon->pszAmmo1() ); // ???
65
 
66
      if ( iAmmoIndex != -1 )
67
      {
68
        // this weapon weapon uses ammo, so pack an appropriate amount.
69
        if ( pWeapon->iFlags() & ITEM_FLAG_EXHAUSTIBLE )
70
        {
71
          // pack up all the ammo, this weapon is its own ammo type
72
          pWeaponBox-&gt<img src="images/smilies/pp2.gif" border="0" alt="">ackAmmo( MAKE_STRING(pWeapon->pszAmmo1()), m_rgAmmo[ iAmmoIndex ] );
73
          m_rgAmmo[ iAmmoIndex ] = 0;
74
 
75
        }
76
        else
77
        {
78
          // pack half of the ammo
79
          pWeaponBox-&gt<img src="images/smilies/pp2.gif" border="0" alt="">ackAmmo( MAKE_STRING(pWeapon->pszAmmo1()), m_rgAmmo[ iAmmoIndex ] / 2 );
80
          m_rgAmmo[ iAmmoIndex ] /= 2;
81
        }
82
 
83
      }
84
 
85
      return;// we're done, so stop searching with the FOR loop.
86
    }
87
  }
88
}


Добавлено 12-08-2022 в 14:05:

Ku2zoff а не, эт мой косяк, в AddPlayerItem у меня
C++ Source Code:
if (pItem->iSlot() > 1 && pItem->iSlot() <= 4)

а в DropPlayerItem
C++ Source Code:
if (pWeapon->iSlot() <= 2)

оно не обнуляется, вот и не берётся новая пушка

Добавлено 12-08-2022 в 14:19:

Ku2zoff странно, то он нормально подбирает то черти что
https://youtu.be/lYGF6EmvLbA

__________________


https://www.moddb.com/mods/metro-2031-last-chance


Отправлено Ku2zoff 12-08-2022 в 11:55:

Цитата:
hgrunt_2020 писал:
то он нормально подбирает то черти что

Оружие положенное на карту маппером != оружие, выброшенное игроком. Игрок выбрасывает веапонбоксы, в которых внутри содержатся пушки. Соответственно, нужно либо делать проверку для массива внутри веапонбокса, либо выбрасывать энтити пушек, а не веапонбоксы.


Отправлено hgrunt_2020 12-08-2022 в 12:48:

Ku2zoff а что по поводу того что не отображаются иконки вентиля и сайги?

__________________


https://www.moddb.com/mods/metro-2031-last-chance


Отправлено hgrunt_2020 13-08-2022 в 13:43:

Ku2zoff Я наконец то починил ограничение и дроп)
https://youtu.be/3wHnsDy9W-g

__________________


https://www.moddb.com/mods/metro-2031-last-chance


Отправлено Luciferchik 13-08-2022 в 21:23:

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

__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.


Отправлено hgrunt_2020 13-08-2022 в 23:14:

Luciferchik перемещать их относительно screenheight и screenwidth, глянь расположение спрайтов в хл 1, именно их x и y в коде

__________________


https://www.moddb.com/mods/metro-2031-last-chance


Отправлено Ku2zoff 14-08-2022 в 01:33:

Цитата:
Luciferchik писал:
чтобы при смене расширения они оставались на задуманном месте?

XRES(число) и YRES(число), вроде бы.


Отправлено hgrunt_2020 14-08-2022 в 05:25:

Почему не на весь экран?

Почему текстура не отрисовывается на весь экран, при чем не важно спрайт это или тга(скрин https://yapx.ru/v/TUrMT ), вот код отрисовки

C++ Source Code:
1
void DrawNV()
2
{
3
  if (g_iNvg == 0) return;
4
  if (ScopeTex < 0)
5
    ScopeTex = glLoadTgaFromPak("/gfx/ui_nv.tga");
6
  glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
7
  glBindTexture(GL_TEXTURE_2D, ScopeTex);
8
  glEnable(GL_BLEND);
9
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
10
  glBegin(GL_QUADS);
11
  //top left
12
  glTexCoord2f(0.0f, 1.0f);
13
  glVertex3f(0, 0, 0);
14
 
15
  //bottom left
16
  glTexCoord2f(0.0f, 0.0f);
17
  glVertex3f(0, ScreenHeight, 0);
18
 
19
  //bottom right
20
  glTexCoord2f(1.0f, 0.0f);
21
  glVertex3f(ScreenWidth, ScreenHeight, 0);
22
 
23
  //top right
24
  glTexCoord2f(1.0f, 1.0f);
25
  glVertex3f(ScreenWidth, 0, 0);
26
 
27
 
28
  glEnd();
29
}


Добавлено 14-08-2022 в 08:25:

починил методом подбора, ScreenWidth и ScreenHeight умножил на 1.5525 и встало на свои места

__________________


https://www.moddb.com/mods/metro-2031-last-chance


Отправлено Luciferchik 14-08-2022 в 10:06:

Цитата:
hgrunt_2020 писал:
Luciferchik перемещать их относительно screenheight и screenwidth, глянь расположение спрайтов в хл 1, именно их x и y в коде

благодарю, как раз по screenheight и screenwidth получилось что надо

__________________
Sometimes you have to get knocked down lower than you've even been to stand up taller than you everwere.
You so sad. No, i just die everyday...
I can't do anything around here without everybody getting up in my shit...
The aim of life is self-development.


Отправлено Дядя Миша 15-08-2022 в 16:44:

А вы как определяете где говнокод, а где нет?
Вот как раз таинственный множитель на 1.5525 это и есть говнокод.
Как вы это число получили? Ни деление 16/9 ни 16/10 его не даёт.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

>> так а раньше почему падало ?
> Потому что говно ваш С++, вот почему


Временная зона GMT. Текущее время 22:06. Страницы (240): « Первая ... « 231 232 233 234 [235] 236 237 238 239 » ... Последняя »
Показать все 3593 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2022