<<Предыдущая
статья | Следующая
статья>>
Этот пример
показывает как убрать все оружие с карт идать игроку при респавне некоторое
оружие(я). В нашем случае это Шафт(молния).
Файлы, которые нужно изменить:
g_client.c
g_items.c
g_combat.c
1. G_CLIENT.C
Сначала сделаем так, чтоб патроны у игрока не
кончались. Т.к все обьекты с карты будут убраны.
Откройте g_client.c и перейдите к обьявлению функции ClientSpawn(gentity_t *ent), строка 1159:
client->ps.stats[STAT_WEAPONS] = ( 1 << WP_MACHINEGUN );
if ( g_gametype.integer == GT_TEAM ) {
client->ps.ammo[WP_MACHINEGUN] = 50;
} else {
client->ps.ammo[WP_MACHINEGUN] = 100;
}
Замените строки выше на эти:
// Даем всего одно оружие с 999 патронами
client->ps.stats[STAT_WEAPONS] = ( 1 <<
WP_LIGHTNING );
client->ps.ammo[WP_LIGHTNING] = 999;
Этот код дает игроку Шафт(молнию) при респавне плюс 999 патронов.
Теперь перейдем чуть ниже к строке 1185:
client->ps.weapon = WP_MACHINEGUN;
Отредактируйте ее соответственно:
client->ps.weapon = WP_LIGHTNING;
2. G_ITEMS.C
Теперь откройте g_items.c и найдите обьявление функции G_SpawnItem (gentity_t *ent, gitem_t *item).
Прямо вначале функции, до любого кода введите:
void G_SpawnItem (gentity_t *ent, gitem_t *item) { if ( item->giType == IT_WEAPON || item->giType == IT_AMMO) return; G_SpawnFloat( "random", "0", &ent->random );
Это предотвращает
появление любого оружия и патронов на карте, т.к. нам ничего кроме шафта не
нужно)).
3. G_COMBAT.C
И последнее. Нужно сделать так чтоб оружие убитого игрока не выпадало.
Во-первых, зачем оно нам нужно). Во-вторых, когда подберете его, ваши патроны
уменьшаться до лимита (200), а это нам ни к чему:
Откройте g_combat.c, найдите функцию TossClientItems (строка 64) и добавьте строку выделенную цветом:
gitem_t *item;
int
weapon;
float angle;
int
i;
gentity_t
*drop;
// drop
the weapon if not a gauntlet or machinegun
weapon = self->s.weapon;
if
(weapon == WP_LIGHTNING)
return;
Вот и все! Компилируйте и наслаждайтесь!
За доп.вопросами дуйте на форум.
<<Предыдущая
статья | Следующая
статья>>
|