Как сделать фонарик в Quake, используя QuakeC

Шаг 1
Создайте текстовый файл и назовите его flash.qc ,вставьте в этот файл то,что написано ниже, и положите  flash.qc  в папку со своими исходниками

void() W_SetCurrentAmmo;void() flash_update = {         // The Player is dead so turn the Flashlight off         if (self.owner.deadflag != DEAD_NO)                 self.effects = 0;         // The Player is alive so turn On the Flashlight         else                                                self.effects = EF_DIMLIGHT;          // Find out which direction player facing         makevectors (self.owner.v_angle);         // Check if there is any things infront of the flashlight         traceline (self.owner.origin , (self.owner.origin+(v_forward * 500)) , FALSE , self);         // Set the Flashlight's position         setorigin (self, trace_endpos+(v_forward * -5));         // Repeat it in 0.02 seconds...         self.nextthink = time + 0.02; }; void() flash_on = {         // Make a new entity to hold the Flashlight         local entity myflash;         // spawn flash         myflash = spawn ();         myflash.movetype = MOVETYPE_NONE;         myflash.solid = SOLID_NOT;         // this uses the s_bubble.spr, if you want it to be completly         // invisible you need to create a one pixel trancparent spirit         // and use it here...         setmodel (myflash, "progs/s_bubble.spr");         setsize (myflash, '0 0 0', '0 0 0');         // Wire Player And Flashlight Together         myflash.owner = self;         self.flash = myflash;                 // give the flash a Name And Make It Glow         myflash.classname = "flash";         myflash.effects = EF_DIMLIGHT;                 // Set Start Position         makevectors (self.v_angle);         traceline (self.origin , (self.origin+(v_forward * 500)) , FALSE , self);         setorigin (myflash, trace_endpos);         // Start Flashlight Update         myflash.think = flash_update;         myflash.nextthink = time + 0.02; }; void () flash_toggle = {         // If Off, Turn On         if (self.flash_flag == FALSE)         {                        self.flash_flag = TRUE;                 flash_on();         }         // If On, Turn Off         else         {                 self.flash_flag = FALSE;                 W_SetCurrentAmmo ();                 self.flash.think = SUB_Remove;                 self.flash.nextthink = time + 0.1;         } };


Шаг 2
Откройте defs.qc и добавьте в конец следующие строки:

.float flash_flag; // On/off for the flashlight .entity flash;   // flash entity

Шаг 3
Откройте weapons.qc и найдите строку ImpulseCommands (она почти в самом низу),после

self.impulse = 0;

добавьте:

if (self.impulse == 30)         flash_toggle();



Шаг 4
Теперь вы должны прописать flash.qc в файл progs.scr . Напишите flash.qc под defs.qc.

Шаг 5
Компилируем файлы и кидаем наш progs.dat в папку с нашим модом(игрой), напишите в консоле impulse 30 ии тадаам,фонарик :D

P.S: для полного удобства,чтобы не лазить все время в консоль,можно сделать так: bind "f" "impulse 30"

Автор кода:ShockMan

Examples

Всего комментариев: 1