HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Выражения в качестве значений полей в энтитях
Цензурные
Страницы (3): « 1 [2] 3 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35062
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Цитата:
FiEctro писал:
Ты всерьёз веришь что кто то бросится изучать кастомную ВМ?

Верю. Там очень похоже на обычный хл.
Только проще.

__________________

Сообщить модератору | IP: Записан
Сообщение: 117518

Старое сообщение 24-03-2013 12:36
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6867
Возраст: 34

Рейтинг



Цитата:
XaeroX писал:
Только проще.

Если не затруднит, приведи пример FireBulletsPlayer из ВМ. Мне интересно, насколько это проще, потому что мапперы в большинстве своём хотят нечто вроде "Press "E" to make custom entity". А я уверен, что кодинг в ВМ будет не настолько элементарным.

Сообщить модератору | IP: Записан
Сообщение: 117524

Старое сообщение 24-03-2013 13:02
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35062
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Цитата:
Ku2zoff писал:
Если не затруднит, приведи пример FireBulletsPlayer из ВМ.

Этого пока нет, но могу привести в пример код env_spark.
Проще тут то, что а) нет поганых классов, б) не надо думать о сейвресторе (у svEntity_t есть массив persistant, который сохраняется, и local, который не сохраняется), в) можно гибко настраивать любые функции по указателям (хотя в сейв, как и в халфе, пишутся только Think, Touch, Blocked и Use).

C++ Source Code:
1
#define m_flDelay	pers.fValue1
2
 
3
EXPORT void CMiscSparks_SparkThink( svEntity_t *self );
4
EXPORT void CMiscSparks_SparkStop( svEntity_t *self, svEntity_t *pActivator, svEntity_t *pCaller, USE_TYPE useType, float value );
5
EXPORT void CMiscSparks_SparkStart( svEntity_t *self, svEntity_t *pActivator, svEntity_t *pCaller, USE_TYPE useType, float value );
6
 
7
void CMiscSparks_DoSpark( svEntity_t *self )
8
{
9
  float flVolume;
10
 
11
  MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, self->pev->origin, NULL );
12
  WRITE_BYTE( TE_SPARKS );
13
  WRITE_COORD( self->pev->origin[0] );
14
  WRITE_COORD( self->pev->origin[1] );
15
  WRITE_COORD( self->pev->origin[2] );
16
  MESSAGE_END();
17
 
18
  flVolume = RANDOM_FLOAT( 0.1f, 0.3f );	/* random volume range */
19
  switch ( RANDOM_LONG( 0, 5 ) ) {
20
    case 0: EMIT_SOUND( self, CHAN_VOICE, "buttons/spark1.wav", flVolume, ATTN_NORM );	break;
21
    case 1: EMIT_SOUND( self, CHAN_VOICE, "buttons/spark2.wav", flVolume, ATTN_NORM );	break;
22
    case 2: EMIT_SOUND( self, CHAN_VOICE, "buttons/spark3.wav", flVolume, ATTN_NORM );	break;
23
    case 3: EMIT_SOUND( self, CHAN_VOICE, "buttons/spark4.wav", flVolume, ATTN_NORM );	break;
24
    case 4: EMIT_SOUND( self, CHAN_VOICE, "buttons/spark5.wav", flVolume, ATTN_NORM );	break;
25
    case 5: EMIT_SOUND( self, CHAN_VOICE, "buttons/spark6.wav", flVolume, ATTN_NORM );	break;
26
  }
27
 
28
  self->pev->nextthink = gpGlobals->time + 0.1f + RANDOM_FLOAT( 0, self->m_flDelay );
29
}
30
 
31
void CMiscSparks_SparkThink( svEntity_t *self )
32
{
33
  self->pev->nextthink = gpGlobals->time + 0.1f + RANDOM_FLOAT( 0, self->m_flDelay );
34
  CMiscSparks_DoSpark( self );
35
}
36
 
37
void CMiscSparks_SparkStop( svEntity_t *self, svEntity_t *pActivator, svEntity_t *pCaller, USE_TYPE useType, float value )
38
{
39
  SetUse( self, CMiscSparks_SparkStart );
40
  SetThink( self, NULL );
41
}
42
 
43
void CMiscSparks_SparkStart( svEntity_t *self, svEntity_t *pActivator, svEntity_t *pCaller, USE_TYPE useType, float value )
44
{
45
  SetUse( self, CMiscSparks_SparkStop );
46
  SetThink( self, CMiscSparks_SparkThink );
47
  self->pev->nextthink = gpGlobals->time + 0.1f + RANDOM_FLOAT( 0, self->m_flDelay );
48
}
49
 
50
static void CMiscSparks_Spawn( svEntity_t *self )
51
{
52
  self->caps &= ~FCAP_ACROSS_TRANSITION;
53
  self->pev->nextthink = gpGlobals->time + ( 0.1f + RANDOM_FLOAT( 0, 1.5f ) );
54
 
55
  if ( FBitSet( self->pev->spawnflags, 32 ) )			/* Use for on/off */
56
  {
57
    if ( FBitSet( self->pev->spawnflags, 64 ) )		/* Start on */
58
    {
59
      SetThink( self, CMiscSparks_SparkThink );	/* start sparking */
60
      SetUse( self, CMiscSparks_SparkStop );		/* set up +USE to stop sparking */
61
    }
62
    else
63
      SetUse( self, CMiscSparks_SparkStart );
64
  }
65
  else
66
    SetThink( self, CMiscSparks_SparkThink );
67
 
68
 
69
  if ( self->m_flDelay <= 0 )
70
    self->m_flDelay = 1.5f;
71
}
72
 
73
static void CMiscSparks_Precache( svEntity_t *self )
74
{
75
  PRECACHE_SOUND( "buttons/spark1.wav" );
76
  PRECACHE_SOUND( "buttons/spark2.wav" );
77
  PRECACHE_SOUND( "buttons/spark3.wav" );
78
  PRECACHE_SOUND( "buttons/spark4.wav" );
79
  PRECACHE_SOUND( "buttons/spark5.wav" );
80
  PRECACHE_SOUND( "buttons/spark6.wav" );
81
}
82
 
83
static void CMiscSparks_KeyValue( svEntity_t *self, KeyValueData *pkvd )
84
{
85
  if ( FStrEq( pkvd->szKeyName, "MaxDelay" ) ) {
86
    self->m_flDelay = atof(pkvd->szValue);
87
    pkvd->fHandled = TRUE;
88
  }
89
}
90
 
91
void misc_sparks( svEntity_t *self )
92
{
93
  self->type = ETYPE_BASEENTITY;
94
  self->vtbl.Spawn = (func_t)CMiscSparks_Spawn;
95
  self->vtbl.Precache = (func_t)CMiscSparks_Precache;
96
  self->vtbl.KeyValue = (func_t)CMiscSparks_KeyValue;
97
}


Добавлено 24-03-2013 в 21:08:

Эта энтитя, misc_sparks, как раз и написана мной в качестве демонстрации.
Потом будут ещё демо-монстр и демо-оружие.
А дальнейшее расширение возможностей виртуальной машинки (там много куда расшириться можно) отложим до HLFX 0.8 beta.

Добавлено 24-03-2013 в 21:11:

Цитата:
Ku2zoff писал:
потому что мапперы в большинстве своём хотят нечто вроде "Press "E" to make custom entity"

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

__________________

Сообщить модератору | IP: Записан
Сообщение: 117526

Старое сообщение 24-03-2013 14:11
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6867
Возраст: 34

Рейтинг



Цитата:
XaeroX писал:
а) нет поганых классов

Будет немного непривычно, хотя если кто-то кодил под вторую и третью кваку освоятся быстрее. Насчёт удобности не знаю, насчёт сложности - да, это проще.
Цитата:
XaeroX писал:
б) не надо думать о сейвресторе

Хм, ну это тоже полезно. Мне интересно, почему валвэ в дллках сделали именно выборочное сохранение каких-либо переменных и параметров в сейв. Чтобы сэкономить память и уменьшить время загрузки/сохранения?
Цитата:
XaeroX писал:
в) можно гибко настраивать любые функции по указателям

С этим у меня туговато т.к. не очень силён в C как таковом, но примерно представляю. В коде дллок бывает иногда довольно проблематично "выцепить" какую-либо функцию для своих нужд. Бесит работа с CBasePlayerItem вместо CBasePlayerWeapon, например.

Сообщить модератору | IP: Записан
Сообщение: 117528

Старое сообщение 24-03-2013 14:29
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35062
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Цитата:
Ku2zoff писал:
Мне интересно, почему валвэ в дллках сделали именно выборочное сохранение каких-либо переменных и параметров в сейв. Чтобы сэкономить память и уменьшить время загрузки/сохранения?

Экономия памяти, да.
Массив одного размера на все энтити - это удобно, но многие энтити не юзают все поля, и размер сейва вырастает. В этом примере с искрами юзается один-единственный флоат из всего persistant. Возможно, позже я предусмотрю в ВМ возможность выборочной записи персистантов в сейв, но пока пишется массив целиком.
Цитата:
Ku2zoff писал:
В коде дллок бывает иногда довольно проблематично "выцепить" какую-либо функцию для своих нужд.

В этом и заключается главный минус классов - ходьба по иерархии, пока не поймёшь, какая именно виртуальная функция вызывается. А здесь - ты заполняешь vtbl вручную и имеешь чёткое понимание, что, когда и как. Ну и наследование в каком-то виде можно через этот vtbl реализовать.

Добавлено 24-03-2013 в 21:42:

Цитата:
Ku2zoff писал:
Будет немного непривычно

Да ты присмотрись...
В халфе ты писал:
C++ Source Code:
void CMiscSparks::SparkThink( void )

а тут будешь писать:
C++ Source Code:
void CMiscSparks_SparkThink( svEntity_t *self )

Разве большое отличие?
Ну и self-> надо везде писать, но и в халфе можно писать this->, просто там это опционально, а тут - обязательно.
Есть ещё кое-какие отличия в движковых функциях, в основном связанные с тем, что ВМ безопасна (в частности, не имеет доступа ни к каким указателям за пределами своего внутреннего адресного пространства), но это тонкости, которые коснутся далеко не всех.

__________________

Сообщить модератору | IP: Записан
Сообщение: 117531

Старое сообщение 24-03-2013 14:42
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6867
Возраст: 34

Рейтинг



А не слишком ли это, не утруждать товарищей заботой о сейв-ресторе? Ну в самом деле, вдруг у них потом возникнет необходимость кодить по-обычному, и начнутся проблемы типа "с моего пистолета пропадает глушитель" или "а почему после загрузки у игрока стамина 100%"?

Добавлено 24-03-2013 в 21:44:

Цитата:
XaeroX писал:
ВМ безопасна (в частности, не имеет доступа ни к каким указателям за пределами своего внутреннего адресного пространства)

Ну хоть крэшиться ничего не будет

Сообщить модератору | IP: Записан
Сообщение: 117532

Старое сообщение 24-03-2013 14:44
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35062
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Цитата:
Ku2zoff писал:
А не слишком ли это, не утруждать товарищей заботой о сейв-ресторе? Ну в самом деле, вдруг у них потом возникнет необходимость кодить по-обычному, и начнутся проблемы типа "с моего пистолета пропадает глушитель" или "а почему после загрузки у игрока стамина 100%"?

Зачем человеку, который однажды перешёл на HLFX в целом и его ВМ в частности, начинать кодить "по-обычному"? HLFX - его надёжный товарищ, который берёт на себя большую часть забот. Конечно, возможности ВМ не безграничны и, вероятно, кому-то их не хватит - но этот кто-то, вероятно, и сам хлфх свой написать сможет, логично?

__________________

Сообщить модератору | IP: Записан
Сообщение: 117534

Старое сообщение 24-03-2013 14:45
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6867
Возраст: 34

Рейтинг



Цитата:
XaeroX писал:
и, вероятно, кому-то их не хватит - но этот кто-то, вероятно, и сам хлфх свой написать сможет, логично?

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

Сообщить модератору | IP: Записан
Сообщение: 117535

Старое сообщение 24-03-2013 14:49
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35062
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Цитата:
Ku2zoff писал:
Ну хоть крэшиться ничего не будет

Ну почему же не будет? Внутри адресного пространства можно натворить всякого. Но это особенность языка Си, иначе никак. Хотите арифметику указателей и все связанные с ней бонусы - получайте и потенциальную возможность креша.
А вот взломать OpenGL из-под DirectX с помощью GDI в ВМ действительно будет невозможно. Или, скажем, написать эксплоит с переполнением какого-нибудь движкового буфера.

Добавлено 24-03-2013 в 21:50:

Цитата:
Ku2zoff писал:
а потом хотят упереть код из этого чего-то в что-то другое или наоборот. Как быть с такими?

Им всё равно придётся думать о сейве. В частности, решать, где хранить переменную - в персистанте или в локале. Эдакое концептуальное решение. А при переводе кода на халфу просто надо будет записать в сейв всё, что хранил в персистанте в ВМ. Не так уж сложно.

__________________

Сообщить модератору | IP: Записан
Сообщение: 117536

Старое сообщение 24-03-2013 14:50
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13519
Возраст: 33

Рейтинг



XaeroX
Примеры это очень хорошо. Такие вещи как позиция элементов худа, отключение старых пушек и монстров (для мода с полностью кастомными пушками и монстрами) - машинка может прожевать?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | IP: Записан
Сообщение: 117537

Старое сообщение 24-03-2013 14:52
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6867
Возраст: 34

Рейтинг



Цитата:
FiEctro писал:
отключение старых пушек

Так-то это не нужно, главное не давать игроку эти пушки. Разве что для экономии памяти.
Цитата:
FiEctro писал:
Такие вещи как позиция элементов худа

Худ же целиком весь будет в машинке, какие примеры? Меняй не хочу. Другое дело, если автор мода захочет прикрутить что-нибудь особое, например ВГУИ-менюшки для каких-л. нужд.

Добавлено 24-03-2013 в 22:01:

XaeroX а как насчёт модельрендерера? Я понимаю, что целиком его вытаскивать в ВМ - занятие неблагодарное, но будет ли возможность аттачить произвольные модели к игроку/монстрам и прочему посредством StudioMergeBones? И возможность выбора 2-way\9-way блендинга для особо упоротых, желающих сделать клон КаЭс?

Сообщить модератору | IP: Записан
Сообщение: 117538

Старое сообщение 24-03-2013 15:01
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13519
Возраст: 33

Рейтинг



>> Так-то это не нужно, главное не давать игроку эти пушки.

Хотя бы из импульс 101 вычеркнуть.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | IP: Записан
Сообщение: 117540

Старое сообщение 24-03-2013 15:02
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6867
Возраст: 34

Рейтинг



Цитата:
FiEctro писал:
Хотя бы из импульс 101 вычеркнуть.

Это ж читерская команда, если хотят играть нормально - не используют её. Вон, в опфоре все халфовские стволы на месте, ничего не вырезано. ЕМНИП, не все из них можно получить в игре.

Сообщить модератору | IP: Записан
Сообщение: 117541

Старое сообщение 24-03-2013 15:06
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35062
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Цитата:
FiEctro писал:
Такие вещи как позиция элементов худа

Я собираюсь весь худ вынести в клиентскую ВМ.
Цитата:
FiEctro писал:
отключение старых пушек и монстров

Зачем отключать, если можно просто не ставить эти энтити на карту, как правильно написал Ku2zoff?
Цитата:
Ku2zoff писал:
например ВГУИ-менюшки

С вгуи я ещё не придумал и в версии 0.7 вряд ли буду заморачиваться, но вообще - можно и поддержку вгуи в машинке сделать подобно серверным псевдоклассам.
Цитата:
Ku2zoff писал:
а как насчёт модельрендерера?

У хлфх свой как бы.
Цитата:
Ku2zoff писал:
И возможность выбора 2-way\9-way блендинга для особо упоротых, желающих сделать клон КаЭс?

Проще добавить этот 9-вей в хлфх. Да хотя бы из волатилы скопипастить.
Цитата:
FiEctro писал:
Хотя бы из импульс 101 вычеркнуть.

Импульс 101 можно в ВМ перенести, это не проблема.

__________________

Сообщить модератору | IP: Записан
Сообщение: 117544

Старое сообщение 24-03-2013 15:25
-
Government-Man
Призрак

Дата регистрации: Apr 2006
Проживает: N/A
Сообщений: 3507

Рейтинг



Награды
 
[1 награда]


Цитата:
XaeroX писал:
А вот взломать OpenGL из-под DirectX с помощью GDI в ВМ действительно будет невозможно. Или, скажем, написать эксплоит с переполнением какого-нибудь движкового буфера.


Много ли существует зловредных модов, переполняющих движковые буферы и взламывающих графические АПИ?

Сообщить модератору | IP: Записан
Сообщение: 117568

Старое сообщение 24-03-2013 21:20
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 14:58. Новая тема    Ответить
Страницы (3): « 1 [2] 3 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Флуд > Выражения в качестве значений полей в энтитях
Цензурные
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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