QuakeC:Персональный телепорт
Написано: воскресенье, 24 марта 2013 г. автор st1x51
0
Сложность: Легкая
На это уроке, как вы уже догадались, мы создадим персональый телепортер. Все изменения проходят в файлах weapons.qc и defs.qc.
Шаг 1
Итак, для начала откроем файл weapon.qc и в самом верху, где написанно несколько нижеприведенных строчек, добавим наши четыре помеченные строчки.
/*
*/
void (entity targ, entity inflictor, entity attacker, float damage) T_Damage;
void () player_run;
void(entity bomb, entity attacker, float rad, entity ignore) T_RadiusDamage;
void(vector org, vector vel, float damage) SpawnBlood;
void() SuperDamageSound;
void() DropTeleport; //добавить
void() Teleport_to_drop; //добавить
void (vector org) spawn_tfog; //добавить
void (vector org, entity death_owner) spawn_tdeath; //добавить
*/
void (entity targ, entity inflictor, entity attacker, float damage) T_Damage;
void () player_run;
void(entity bomb, entity attacker, float rad, entity ignore) T_RadiusDamage;
void(vector org, vector vel, float damage) SpawnBlood;
void() SuperDamageSound;
void() DropTeleport; //добавить
void() Teleport_to_drop; //добавить
void (vector org) spawn_tfog; //добавить
void (vector org, entity death_owner) spawn_tdeath; //добавить
Этим самым мы объявили четыре функции, которые мы создадим впоследствии.
Шаг 2
О'кей, теперь мы должны создать функции для телепорта. Итак, найдите функцию ImpulseCommands и перед ней добавте нижеследюющее:
/*
==========
Self Teleporter
==========
*/
void() DropTeleport = //эта функция кладет на месте игрока "точку для телепортации"(ТТ)
{
if(!self.tele_dropped)
{
self.teledrop_dest = spawn(); //создаем временный объект для ТТ
}
self.teledrop_dest.origin = self.origin; //запоминаем координаты ТТ
self.teledrop_dest.mangle = self.angles;
self.tele_dropped = 1;
dprint("Teleport destination dropped.");
};
void() Teleport_to_drop = //эта функция телепортирует игрока туда, где находится ТТ
{
local vector org;
if(!self.tele_dropped)
{
dprint("No destination dropped.");
return;
}
if(self.health <= 0)
{
return;
}
spawn_tfog (self.teledrop_dest.origin);
makevectors (self.teledrop_dest.mangle);
org=self.teledrop_dest.origin;
spawn_tfog (org);
spawn_tdeath (org,self);
setorigin (self,self.teledrop_dest.origin);
self.angles=self.teledrop_dest.mangle;
self.fixangle=1;
self.velocity=v_forward * 100;
self.teleport_time=time + 0.5;
self.flags=self.flags - self.flags & fl_onground;
remove(self.teledrop_dest); //удалите эту строчку, если вы хотите, чтобы ТТ оставался после телепортации.
};
==========
Self Teleporter
==========
*/
void() DropTeleport = //эта функция кладет на месте игрока "точку для телепортации"(ТТ)
{
if(!self.tele_dropped)
{
self.teledrop_dest = spawn(); //создаем временный объект для ТТ
}
self.teledrop_dest.origin = self.origin; //запоминаем координаты ТТ
self.teledrop_dest.mangle = self.angles;
self.tele_dropped = 1;
dprint("Teleport destination dropped.");
};
void() Teleport_to_drop = //эта функция телепортирует игрока туда, где находится ТТ
{
local vector org;
if(!self.tele_dropped)
{
dprint("No destination dropped.");
return;
}
if(self.health <= 0)
{
return;
}
spawn_tfog (self.teledrop_dest.origin);
makevectors (self.teledrop_dest.mangle);
org=self.teledrop_dest.origin;
spawn_tfog (org);
spawn_tdeath (org,self);
setorigin (self,self.teledrop_dest.origin);
self.angles=self.teledrop_dest.mangle;
self.fixangle=1;
self.velocity=v_forward * 100;
self.teleport_time=time + 0.5;
self.flags=self.flags - self.flags & fl_onground;
remove(self.teledrop_dest); //удалите эту строчку, если вы хотите, чтобы ТТ оставался после телепортации.
};
Шаг 3
Теперь в функции Impulse Commands, что находится чуть ниже наших тлько что написанных функций, над строчкой self.impulse = 0; добавьте следующие две строчки:
if (self.impulse == 14) DropTeleport ();
if (self.impulse == 15) Teleport_to_drop ();
Шаг 4
И, наконец, последний шаг в нашем моде. Откройте файл defs.qc, и в самом конце этого файла добавте следующее:
.entity teledrop_dest;
.float tele_dropped;
.float tele_dropped;
(ОЧЕНЬ ВАЖНО, что все добавляемые строчки в файле defs.qc должны находится в самом конце этого файла!)
Шаг 5
Вот и все! Теперь откомпилируйте и запустите полученное. Не забудте присвоить клавишам новые impulse-команды (impulse 14 - скинуть ТТ, impulse 15 - телепортироваться)! Приятной вам игры...