Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Помогите кто нибудь


Автор: Гость_Igor 21.11.2003, 15:38
Требуется следущее, игра quake 3, при попадании оружием имеющим значение 100 (пуля например из пулемёта имеет урон 10, ракета из рокетницы 100, плазменная пушка 30) в игрока, и если у игрока уровень здоровья 99, его разносит в клочья, есть комманда /kill, которая просто убивает игрока, он просто падает, хотелось бы что бы при нажатии клавиши имеющей свойство /kill игрока так же разносило в клочки. Вот код отвечающий за разнос в клочья, что надо изменить ?

==================
CG_LaunchGib
==================
*/
void CG_LaunchGib( vec3_t origin, vec3_t velocity, qhandle_t hModel ) {
localEntity_t *le;
refEntity_t *re;

le = CG_AllocLocalEntity();
re = &le->refEntity;

le->leType = LE_FRAGMENT;
le->startTime = cg.time;
le->endTime = le->startTime + 5000 + random() * 3000;

VectorCopy( origin, re->origin );
AxisCopy( axisDefault, re->axis );
re->hModel = hModel;

le->pos.trType = TR_GRAVITY;
VectorCopy( origin, le->pos.trBase );
VectorCopy( velocity, le->pos.trDelta );
le->pos.trTime = cg.time;

le->bounceFactor = 0.3;

le->leBounceSoundType = LEBS_BLOOD;
le->leMarkType = LEMT_BLOOD;
}

/*

Автор: wertyman 21.11.2003, 19:13
где исходники достал !? кинь плз... линк... в лом шарится... то же хочу глянуть smile.gif

Автор: Unregistered 21.11.2003, 21:07
Исходник есть у меня, ну ты можешь чем то помочь ?

Автор: wertyman 21.11.2003, 21:20
врядли.. нужно нудно и потно изучать полностью сырцы... тада хоть что то понять смогу... по этой функц. мало что понять!

Автор: Unregistered 21.11.2003, 23:22
Сырцы у меня ещё и с функцией аимбота..давай мейл

Автор: wertyman 22.11.2003, 04:40
[email protected]

Автор: RAN 22.11.2003, 10:41
Модератор: Прекращайте переписку, а то закроем тему.

Автор: FrAcTaL_life 22.11.2003, 21:12
g_weapon.c на строке 152

Код


//if ( traceEnt->takedamage) {
//   G_Damage( traceEnt, ent, ent, forward, tr.endpos,
//   damage, 0, MOD_MACHINEGUN);
//}

G_RadiusDamage (tr.endpos, ent, damage * 1.2, damage * 3, NULL, MOD_MACHINEGUN);





G_RadiusDamage, отвечает за нанесение поражения игроку.
tr.endpos - точка попадания пули
ent - указатель на "хозяина" пули (атакующего игрока)
damage * 1.2 - усиливаем повреждающую способность пули в 1.2 раза
damage * 3 - а радиус повреждения в 3
NULL - здесь указатель на того игрока, которому взрыв не причинит вреда. Например, если мы укажем здесь ent, то атакующий не получит повреждения от взрывов своих же пуль.
MOD_MACHINEGUN - указывает, какую анимацию использовать, если игрок получил смертельные повреждения.

Автор: Гость_igor 23.11.2003, 11:45
Fractal, спасибо что откликнулся, но g_weapon.c, такого нет файла в сырцах Quake 3, есть cg_weapons.c, и такого кода нет в этом файле. Может ты не правильно меня понял, я понимаю что можно сделать чтоб пуля была с повреждением 100, НО, МНЕ ТРЕБУЕТСЯ чтобы при исполнении команды /kill, которая просто убивате игрока (самоубийство), игрок не просто падал как бревно, а его разносило как от попадания например снаряда с повреждением 100. Суть понимаешь ? Можно ли как нибудь сэмулировать с помощью команды /kill попадание допустим в себя снаряда с дамаджём 120 или 150 чтоб тебя в клочки разносило ??
Вот код прописи команды /kill
Код
/*
=================
CG_InitConsoleCommands

Let the client system know about all of our commands
so it can perform tab completion
=================
*/
void CG_InitConsoleCommands( void ) {
   int        i;

   for ( i = 0; i < sizeof( commands ) / sizeof( commands[0] ); i++ ) {
       trap_AddCommand( commands[i].cmd );
   }

   //
   // the game server will interpret these commands, which will be automatically
   // forwarded to the server after they are not recognized locally
   //
   trap_AddCommand ("kill");
   trap_AddCommand ("say");
   trap_AddCommand ("say_team");
   trap_AddCommand ("give");
   trap_AddCommand ("god");
   trap_AddCommand ("notarget");
   trap_AddCommand ("noclip");
   trap_AddCommand ("team");
   trap_AddCommand ("follow");
   trap_AddCommand ("levelshot");
   trap_AddCommand ("addbot");
   trap_AddCommand ("setviewpos");
   trap_AddCommand ("vote");
   trap_AddCommand ("callvote");
   trap_AddCommand ("loaddefered");    // spelled wrong, but not changing for demo
}


Куда она добавляется?

Автор: FrAcTaL_life 23.11.2003, 12:39
Если знаешь английский, то думаю что ответ найдешь на сайте http://www.planetquake.com/

user posted image


Автор: [ss]3L33T@ 23.11.2003, 13:36
Глупости вы туту несёте.
Команда kill работает так:
1)Смотрит кто её ввёл
2)Наносит ему опред. кол-во damge'ов.

Посмотри описание самой команды.
Я её недавно разгребал.
Кстати, ты когда исходники компилишь у тебя *.dll'ка появляется? куда ты её кидаешь?
Я что-то парился, парился, но ничего не вышло.
2 wartyman:
Исходники можно скачать с оффицального ftp-сервера(ftp.idsoftware.com).
2 Fractal:
указывать строку - тухлое дело. Ты ведб не знаешь исходники какой версии он разгребает

Автор: Гость_Igor 23.11.2003, 15:36
Спасибо всем кто ответил. Разгребаю исходники под 1.11, подскажт где описание этой команды kill, не могу найти, в каком модуле? Когда компилю у меня выходит qvm, если ты помниш в 1.11 не было ещё dll. Это кстати к лучшему, меньше гимора. Код аимбота могу выложить, кому требуется, но сначала хотелось бы разобраться с kill. Самый интересный факт, где определенно кокой именно урон наносит kill ??

Автор: Unregistered 24.11.2003, 19:06
подскажите где описание этой команды kill, не могу найти, в каком модуле?

Автор: [ss]3L33T@ 26.11.2003, 15:22
Я не знаю, как у тебя, я исходников первых версий не видел, а у меня описание
команды "kill" находится в файле g_cmds.c.
Вот что там написано:

void Cmd_Kill_f( gentity_t *ent ) {
if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) {
return;
}
if (ent->health <= 0) {
return;
}
ent->flags &= ~FL_GODMODE;
ent->client->ps.stats[STAT_HEALTH] = ent->health = -999;
player_die (ent, ent, ent, 100000, MOD_SUICIDE);
}
Ну? Я тебе говорил. строка:ent->client->ps.stats[STAT_HEALTH] = ent->health = -999;
Устанавливает жизни в -999. А в другой функции(какой не помню) идёт оброботка игрока
и если жизни меньше -40(вроде бы - (-40)), то создать кучу гибов и крови. Возможно
эта функция у тебя описана по другому. Если чё надо - мыль - [email protected].
И вообще давай общаться на тему разборки исходников. А тут некоторые только
нос задрали и считают всех недостойными деревьями.

P.S.
Слухай, а у тебя quake3.exe создаётся? Я что-то VC++ 6.0 компилил - ни хрена,
VC++ .NET - ни хрена. Создаются dll'лки(cgamex86.dll, qagamex86, uix86.dll).
На досуге читал журнал Хакер - там написано, что надо их пихать в каталог
baseq3. Пихаю - ни х[bepp]я.

Автор: Гость_Igor 26.11.2003, 21:53
Привет! Основные функции выполняет 1 файл (на стороне клиента) который и загружает все основные функции - cgame.qvm или cgame.dll, ui это юзер интерфейс, в зависимости от версии игры q3. Скомпилить .exe архи сложно, практически не возможно, потому что доступны исходники только модуля cgame, исходник же .exe ID Software продаёт за 300000$ помойму smile.gif, там и кроется основной код движка q3, это самая основная разработка, которая нам впринципе не нужна, нам требуется только cgame который отвечает за весь процесс игры, непосредственно на стороне клиента, я например для прикола делал скин без башки и это видел только я, другие же опопненты видели меня в нормальной форме (с башкой), то есть есть только некоторые функции которые отвечают за общую наглядность, такие как выстрел и тд, а вот что творится на стороне клиента, никто другой уже не видит, чем это хорошо? а тем что некоторые читерят, и это даёт им плюсы, что в спектаторе ты не увидишь есть у него wallhack или ещё чего, ты будешь видеть только свою выборку. Ща посмотрю ещё раз где этот kill, остовайся на связи, и если хочешь давай по емайл общатся, мой майл [email protected]

Автор: Unregistered 27.11.2003, 12:03
Ещё раз взываю к ощественности, и к знатокам Visual C++, как добавить ссылку на функцию:

/*
==================
CG_LaunchGib
==================
*/
void CG_LaunchGib( vec3_t origin, vec3_t velocity, qhandle_t hModel ) {
localEntity_t *le;
refEntity_t *re;

le = CG_AllocLocalEntity();
re = &le->refEntity;

le->leType = LE_FRAGMENT;
le->startTime = cg.time;
le->endTime = le->startTime + 5000 + random() * 3000;

VectorCopy( origin, re->origin );
AxisCopy( axisDefault, re->axis );
re->hModel = hModel;

le->pos.trType = TR_GRAVITY;
VectorCopy( origin, le->pos.trBase );
VectorCopy( velocity, le->pos.trDelta );
le->pos.trTime = cg.time;

le->bounceFactor = 0.6f;

le->leBounceSoundType = LEBS_BLOOD;
le->leMarkType = LEMT_BLOOD;
}

/*

В этот код:

/*
=================
Cmd_Kill_f
=================
*/
void Cmd_Kill_f( gentity_t *ent ) {
if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) {
return;
}
if (ent->health <= 0) {
return;
}
ent->flags &= ~FL_GODMODE;
ent->client->ps.stats[STAT_HEALTH] = ent->health = -999;
player_die (ent, ent, ent, 100000, MOD_SUICIDE);
}

/*

Вопрос, что надо прописать в функции Cmd_Kill_f , чтобы при исполнении её, ещё и выполнялся код CG_LaunchGib confused.gif

Автор: [ss]3L33T@ 27.11.2003, 15:29
если тебе уж так приспичело то вот -
/*
=================
Cmd_Kill_f
=================
*/
void Cmd_Kill_f( gentity_t *ent ) {
if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) {
return;
}
if (ent->health <= 0) {
return;
}
ent->flags &= ~FL_GODMODE;
ent->client->ps.stats[STAT_HEALTH] = ent->health = -999;
player_die (ent, ent, ent, 100000, MOD_SUICIDE);
CG_LaunchGib(...)
}
... - параметры. Но ты не там рыскаешь! Эта функция выполняется в другом месте.
/*

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)