Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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 |
где исходники достал !? кинь плз... линк... в лом шарится... то же хочу глянуть ![]() |
Автор: 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
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
Куда она добавляется? |
Автор: FrAcTaL_life 23.11.2003, 12:39 |
Если знаешь английский, то думаю что ответ найдешь на сайте http://www.planetquake.com/![]() |
Автор: [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$ помойму ![]() |
Автор: 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 ![]() |
Автор: [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(...) } ... - параметры. Но ты не там рыскаешь! Эта функция выполняется в другом месте. /* |