亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? g_misc.c

?? 著名游戲quake2原代碼最新版本(vc6.0可以編譯的)
?? C
?? 第 1 頁 / 共 4 頁
字號:
extern void func_train_find (edict_t *self);

void misc_strogg_ship_use  (edict_t *self, edict_t *other, edict_t *activator)
{
	self->svflags &= ~SVF_NOCLIENT;
	self->use = train_use;
	train_use (self, other, activator);
}

void SP_misc_strogg_ship (edict_t *ent)
{
	if (!ent->target)
	{
		gi.dprintf ("%s without a target at %s\n", ent->classname, vtos(ent->absmin));
		G_FreeEdict (ent);
		return;
	}

	if (!ent->speed)
		ent->speed = 300;

	ent->movetype = MOVETYPE_PUSH;
	ent->solid = SOLID_NOT;
	ent->s.modelindex = gi.modelindex ("models/ships/strogg1/tris.md2");
	VectorSet (ent->mins, -16, -16, 0);
	VectorSet (ent->maxs, 16, 16, 32);

	ent->think = func_train_find;
	ent->nextthink = level.time + FRAMETIME;
	ent->use = misc_strogg_ship_use;
	ent->svflags |= SVF_NOCLIENT;
	ent->moveinfo.accel = ent->moveinfo.decel = ent->moveinfo.speed = ent->speed;

	gi.linkentity (ent);
}


/*QUAKED misc_satellite_dish (1 .5 0) (-64 -64 0) (64 64 128)
*/
void misc_satellite_dish_think (edict_t *self)
{
	self->s.frame++;
	if (self->s.frame < 38)
		self->nextthink = level.time + FRAMETIME;
}

void misc_satellite_dish_use (edict_t *self, edict_t *other, edict_t *activator)
{
	self->s.frame = 0;
	self->think = misc_satellite_dish_think;
	self->nextthink = level.time + FRAMETIME;
}

void SP_misc_satellite_dish (edict_t *ent)
{
	ent->movetype = MOVETYPE_NONE;
	ent->solid = SOLID_BBOX;
	VectorSet (ent->mins, -64, -64, 0);
	VectorSet (ent->maxs, 64, 64, 128);
	ent->s.modelindex = gi.modelindex ("models/objects/satellite/tris.md2");
	ent->use = misc_satellite_dish_use;
	gi.linkentity (ent);
}


/*QUAKED light_mine1 (0 1 0) (-2 -2 -12) (2 2 12)
*/
void SP_light_mine1 (edict_t *ent)
{
	ent->movetype = MOVETYPE_NONE;
	ent->solid = SOLID_BBOX;
	ent->s.modelindex = gi.modelindex ("models/objects/minelite/light1/tris.md2");
	gi.linkentity (ent);
}


/*QUAKED light_mine2 (0 1 0) (-2 -2 -12) (2 2 12)
*/
void SP_light_mine2 (edict_t *ent)
{
	ent->movetype = MOVETYPE_NONE;
	ent->solid = SOLID_BBOX;
	ent->s.modelindex = gi.modelindex ("models/objects/minelite/light2/tris.md2");
	gi.linkentity (ent);
}


/*QUAKED misc_gib_arm (1 0 0) (-8 -8 -8) (8 8 8)
Intended for use with the target_spawner
*/
void SP_misc_gib_arm (edict_t *ent)
{
	gi.setmodel (ent, "models/objects/gibs/arm/tris.md2");
	ent->solid = SOLID_NOT;
	ent->s.effects |= EF_GIB;
	ent->takedamage = DAMAGE_YES;
	ent->die = gib_die;
	ent->movetype = MOVETYPE_TOSS;
	ent->svflags |= SVF_MONSTER;
	ent->deadflag = DEAD_DEAD;
	ent->avelocity[0] = random()*200;
	ent->avelocity[1] = random()*200;
	ent->avelocity[2] = random()*200;
	ent->think = G_FreeEdict;
	ent->nextthink = level.time + 30;
	gi.linkentity (ent);
}

/*QUAKED misc_gib_leg (1 0 0) (-8 -8 -8) (8 8 8)
Intended for use with the target_spawner
*/
void SP_misc_gib_leg (edict_t *ent)
{
	gi.setmodel (ent, "models/objects/gibs/leg/tris.md2");
	ent->solid = SOLID_NOT;
	ent->s.effects |= EF_GIB;
	ent->takedamage = DAMAGE_YES;
	ent->die = gib_die;
	ent->movetype = MOVETYPE_TOSS;
	ent->svflags |= SVF_MONSTER;
	ent->deadflag = DEAD_DEAD;
	ent->avelocity[0] = random()*200;
	ent->avelocity[1] = random()*200;
	ent->avelocity[2] = random()*200;
	ent->think = G_FreeEdict;
	ent->nextthink = level.time + 30;
	gi.linkentity (ent);
}

/*QUAKED misc_gib_head (1 0 0) (-8 -8 -8) (8 8 8)
Intended for use with the target_spawner
*/
void SP_misc_gib_head (edict_t *ent)
{
	gi.setmodel (ent, "models/objects/gibs/head/tris.md2");
	ent->solid = SOLID_NOT;
	ent->s.effects |= EF_GIB;
	ent->takedamage = DAMAGE_YES;
	ent->die = gib_die;
	ent->movetype = MOVETYPE_TOSS;
	ent->svflags |= SVF_MONSTER;
	ent->deadflag = DEAD_DEAD;
	ent->avelocity[0] = random()*200;
	ent->avelocity[1] = random()*200;
	ent->avelocity[2] = random()*200;
	ent->think = G_FreeEdict;
	ent->nextthink = level.time + 30;
	gi.linkentity (ent);
}

//=====================================================

/*QUAKED target_character (0 0 1) ?
used with target_string (must be on same "team")
"count" is position in the string (starts at 1)
*/

void SP_target_character (edict_t *self)
{
	self->movetype = MOVETYPE_PUSH;
	gi.setmodel (self, self->model);
	self->solid = SOLID_BSP;
	self->s.frame = 12;
	gi.linkentity (self);
	return;
}


/*QUAKED target_string (0 0 1) (-8 -8 -8) (8 8 8)
*/

void target_string_use (edict_t *self, edict_t *other, edict_t *activator)
{
	edict_t *e;
	int		n, l;
	char	c;

	l = strlen(self->message);
	for (e = self->teammaster; e; e = e->teamchain)
	{
		if (!e->count)
			continue;
		n = e->count - 1;
		if (n > l)
		{
			e->s.frame = 12;
			continue;
		}

		c = self->message[n];
		if (c >= '0' && c <= '9')
			e->s.frame = c - '0';
		else if (c == '-')
			e->s.frame = 10;
		else if (c == ':')
			e->s.frame = 11;
		else
			e->s.frame = 12;
	}
}

void SP_target_string (edict_t *self)
{
	if (!self->message)
		self->message = "";
	self->use = target_string_use;
}


/*QUAKED func_clock (0 0 1) (-8 -8 -8) (8 8 8) TIMER_UP TIMER_DOWN START_OFF MULTI_USE
target a target_string with this

The default is to be a time of day clock

TIMER_UP and TIMER_DOWN run for "count" seconds and the fire "pathtarget"
If START_OFF, this entity must be used before it starts

"style"		0 "xx"
			1 "xx:xx"
			2 "xx:xx:xx"
*/

#define	CLOCK_MESSAGE_SIZE	16

// don't let field width of any clock messages change, or it
// could cause an overwrite after a game load

static void func_clock_reset (edict_t *self)
{
	self->activator = NULL;
	if (self->spawnflags & 1)
	{
		self->health = 0;
		self->wait = self->count;
	}
	else if (self->spawnflags & 2)
	{
		self->health = self->count;
		self->wait = 0;
	}
}

static void func_clock_format_countdown (edict_t *self)
{
	if (self->style == 0)
	{
		Com_sprintf (self->message, CLOCK_MESSAGE_SIZE, "%2i", self->health);
		return;
	}

	if (self->style == 1)
	{
		Com_sprintf(self->message, CLOCK_MESSAGE_SIZE, "%2i:%2i", self->health / 60, self->health % 60);
		if (self->message[3] == ' ')
			self->message[3] = '0';
		return;
	}

	if (self->style == 2)
	{
		Com_sprintf(self->message, CLOCK_MESSAGE_SIZE, "%2i:%2i:%2i", self->health / 3600, (self->health - (self->health / 3600) * 3600) / 60, self->health % 60);
		if (self->message[3] == ' ')
			self->message[3] = '0';
		if (self->message[6] == ' ')
			self->message[6] = '0';
		return;
	}
}

void func_clock_think (edict_t *self)
{
	if (!self->enemy)
	{
		self->enemy = G_Find (NULL, FOFS(targetname), self->target);
		if (!self->enemy)
			return;
	}

	if (self->spawnflags & 1)
	{
		func_clock_format_countdown (self);
		self->health++;
	}
	else if (self->spawnflags & 2)
	{
		func_clock_format_countdown (self);
		self->health--;
	}
	else
	{
		struct tm	*ltime;
		time_t		gmtime;

		time(&gmtime);
		ltime = localtime(&gmtime);
		Com_sprintf (self->message, CLOCK_MESSAGE_SIZE, "%2i:%2i:%2i", ltime->tm_hour, ltime->tm_min, ltime->tm_sec);
		if (self->message[3] == ' ')
			self->message[3] = '0';
		if (self->message[6] == ' ')
			self->message[6] = '0';
	}

	self->enemy->message = self->message;
	self->enemy->use (self->enemy, self, self);

	if (((self->spawnflags & 1) && (self->health > self->wait)) ||
		((self->spawnflags & 2) && (self->health < self->wait)))
	{
		if (self->pathtarget)
		{
			char *savetarget;
			char *savemessage;

			savetarget = self->target;
			savemessage = self->message;
			self->target = self->pathtarget;
			self->message = NULL;
			G_UseTargets (self, self->activator);
			self->target = savetarget;
			self->message = savemessage;
		}

		if (!(self->spawnflags & 8))
			return;

		func_clock_reset (self);

		if (self->spawnflags & 4)
			return;
	}

	self->nextthink = level.time + 1;
}

void func_clock_use (edict_t *self, edict_t *other, edict_t *activator)
{
	if (!(self->spawnflags & 8))
		self->use = NULL;
	if (self->activator)
		return;
	self->activator = activator;
	self->think (self);
}

void SP_func_clock (edict_t *self)
{
	if (!self->target)
	{
		gi.dprintf("%s with no target at %s\n", self->classname, vtos(self->s.origin));
		G_FreeEdict (self);
		return;
	}

	if ((self->spawnflags & 2) && (!self->count))
	{
		gi.dprintf("%s with no count at %s\n", self->classname, vtos(self->s.origin));
		G_FreeEdict (self);
		return;
	}

	if ((self->spawnflags & 1) && (!self->count))
		self->count = 60*60;;

	func_clock_reset (self);

	self->message = gi.TagMalloc (CLOCK_MESSAGE_SIZE, TAG_LEVEL);

	self->think = func_clock_think;

	if (self->spawnflags & 4)
		self->use = func_clock_use;
	else
		self->nextthink = level.time + 1;
}

//=================================================================================

void teleporter_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf)
{
	edict_t		*dest;
	int			i;

	if (!other->client)
		return;
	dest = G_Find (NULL, FOFS(targetname), self->target);
	if (!dest)
	{
		gi.dprintf ("Couldn't find destination\n");
		return;
	}

//ZOID
	CTFPlayerResetGrapple(other);
//ZOID

	// unlink to make sure it can't possibly interfere with KillBox
	gi.unlinkentity (other);

	VectorCopy (dest->s.origin, other->s.origin);
	VectorCopy (dest->s.origin, other->s.old_origin);
	other->s.origin[2] += 10;

	// clear the velocity and hold them in place briefly
	VectorClear (other->velocity);
	other->client->ps.pmove.pm_time = 160>>3;		// hold time
	other->client->ps.pmove.pm_flags |= PMF_TIME_TELEPORT;

	// draw the teleport splash at source and on the player
	self->owner->s.event = EV_PLAYER_TELEPORT;
	other->s.event = EV_PLAYER_TELEPORT;

	// set angles
	for (i=0 ; i<3 ; i++)
		other->client->ps.pmove.delta_angles[i] = ANGLE2SHORT(dest->s.angles[i] - other->client->resp.cmd_angles[i]);

	VectorClear (other->s.angles);
	VectorClear (other->client->ps.viewangles);
	VectorClear (other->client->v_angle);

	// kill anything at the destination
	KillBox (other);

	gi.linkentity (other);
}

/*QUAKED misc_teleporter (1 0 0) (-32 -32 -24) (32 32 -16)
Stepping onto this disc will teleport players to the targeted misc_teleporter_dest object.
*/
void SP_misc_teleporter (edict_t *ent)
{
	edict_t		*trig;

	if (!ent->target)
	{
		gi.dprintf ("teleporter without a target.\n");
		G_FreeEdict (ent);
		return;
	}

	gi.setmodel (ent, "models/objects/dmspot/tris.md2");
	ent->s.skinnum = 1;
	ent->s.effects = EF_TELEPORTER;
	ent->s.sound = gi.soundindex ("world/amb10.wav");
	ent->solid = SOLID_BBOX;

	VectorSet (ent->mins, -32, -32, -24);
	VectorSet (ent->maxs, 32, 32, -16);
	gi.linkentity (ent);

	trig = G_Spawn ();
	trig->touch = teleporter_touch;
	trig->solid = SOLID_TRIGGER;
	trig->target = ent->target;
	trig->owner = ent;
	VectorCopy (ent->s.origin, trig->s.origin);
	VectorSet (trig->mins, -8, -8, 8);
	VectorSet (trig->maxs, 8, 8, 24);
	gi.linkentity (trig);
	
}

/*QUAKED misc_teleporter_dest (1 0 0) (-32 -32 -24) (32 32 -16)
Point teleporters at these.
*/
void SP_misc_teleporter_dest (edict_t *ent)
{
	gi.setmodel (ent, "models/objects/dmspot/tris.md2");
	ent->s.skinnum = 0;
	ent->solid = SOLID_BBOX;
//	ent->s.effects |= EF_FLIES;
	VectorSet (ent->mins, -32, -32, -24);
	VectorSet (ent->maxs, 32, 32, -16);
	gi.linkentity (ent);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费看欧美女人艹b| 亚洲在线成人精品| 成人综合在线网站| 国产精品毛片无遮挡高清| 成人国产一区二区三区精品| 亚洲精品在线一区二区| 国产在线精品一区二区三区不卡| 久久综合狠狠综合久久综合88| 国产乱一区二区| 亚洲欧美在线高清| 在线观看日韩毛片| 久久草av在线| 中文字幕在线观看一区二区| 欧美在线观看一区| 麻豆91精品视频| 中文字幕高清不卡| 欧美视频完全免费看| 激情综合色播激情啊| 国产精品区一区二区三区| 欧美亚洲一区三区| 麻豆久久久久久久| 国产精品国模大尺度视频| 欧美色图一区二区三区| 国产最新精品免费| 亚洲精品美腿丝袜| 久久亚洲影视婷婷| 欧美中文字幕不卡| 国产一区二区三区蝌蚪| 一区二区三区欧美在线观看| 亚洲精品一区在线观看| 91免费观看视频| 久久国产日韩欧美精品| 亚洲精品日产精品乱码不卡| 精品国产区一区| 日韩高清不卡在线| 538prom精品视频线放| 在线日韩一区二区| 久久国产人妖系列| 亚洲精品第一国产综合野| 日韩一区精品视频| 精品国产三级电影在线观看| 99精品欧美一区二区蜜桃免费| 蜜臀av性久久久久蜜臀av麻豆| 久久久久久久av麻豆果冻| 欧美成人精品二区三区99精品| 成人一区二区三区| 蜜臀av一区二区在线观看 | 欧美精品18+| 国产69精品久久久久毛片| 午夜精品福利视频网站| 中文字幕在线不卡一区二区三区| 日韩午夜精品视频| 欧美日韩成人在线一区| 91麻豆国产在线观看| 福利一区二区在线| 国产一二精品视频| 免费成人小视频| 五月天婷婷综合| 有坂深雪av一区二区精品| 中文av一区特黄| 久久久综合网站| 精品久久久久久久久久久久久久久| 精品国产乱码久久久久久夜甘婷婷| 99精品偷自拍| 成人妖精视频yjsp地址| 国产乱子轮精品视频| 九九久久精品视频| 麻豆久久久久久久| 老司机一区二区| 免费高清在线视频一区·| 午夜久久电影网| 亚洲成人久久影院| 午夜久久久久久久久| 亚洲高清免费一级二级三级| 一区二区三区中文字幕精品精品| 国产精品私人自拍| 1区2区3区精品视频| 中文字幕一区二区三区乱码在线| 国产欧美日韩激情| 国产精品乱人伦| 亚洲色欲色欲www| 亚洲欧美日韩精品久久久久| 亚洲三级小视频| 亚洲美女电影在线| 亚洲影视在线播放| 丝袜美腿亚洲色图| 免费美女久久99| 国产一区二区三区黄视频| 国产91丝袜在线18| 99国产欧美另类久久久精品| 91麻豆成人久久精品二区三区| 色嗨嗨av一区二区三区| 欧美色电影在线| 日韩一区二区三| 久久久久久久久久电影| 中文字幕一区二区三区蜜月| 一区二区三区精品在线观看| 亚洲va欧美va天堂v国产综合| 丝袜亚洲精品中文字幕一区| 国产呦萝稀缺另类资源| aaa欧美色吧激情视频| 欧美色综合天天久久综合精品| 欧美一区永久视频免费观看| 精品1区2区在线观看| 中文字幕在线不卡一区二区三区| 亚洲伊人色欲综合网| 久久国产剧场电影| 99国产精品国产精品毛片| 欧美图区在线视频| 亚洲精品一区二区三区福利| 一区二区三区**美女毛片| 视频一区视频二区中文字幕| 国产真实乱子伦精品视频| av在线综合网| 91精品国产欧美日韩| 国产精品久久三| 三级亚洲高清视频| 成+人+亚洲+综合天堂| 欧美在线综合视频| 久久影视一区二区| 亚洲成人自拍偷拍| 韩国精品在线观看| 在线观看一区二区精品视频| 精品国产网站在线观看| 一区二区在线观看视频在线观看| 精品一区二区三区香蕉蜜桃| 色一情一伦一子一伦一区| 日韩精品一区二区三区三区免费| 亚洲三级电影全部在线观看高清| 秋霞av亚洲一区二区三| 97精品久久久久中文字幕| 欧美一级xxx| 一区二区三区国产精品| 国产伦理精品不卡| 在线成人午夜影院| 亚洲精品菠萝久久久久久久| 国产成人自拍高清视频在线免费播放| 欧美日韩国产免费一区二区| 综合久久给合久久狠狠狠97色| 老司机精品视频线观看86| 在线观看av一区| 国产精品日韩精品欧美在线| 男女性色大片免费观看一区二区| 色综合久久久网| 中文字幕亚洲区| 国产成人精品一区二区三区四区| 日韩欧美一区电影| 亚洲高清久久久| 欧洲av一区二区嗯嗯嗯啊| **性色生活片久久毛片| 高清在线不卡av| 久久久亚洲综合| 激情久久五月天| 日韩欧美电影在线| 日韩福利视频导航| 91麻豆精品国产91久久久使用方法 | 欧美在线视频日韩| 亚洲欧美综合在线精品| 成+人+亚洲+综合天堂| 国产农村妇女精品| 国产精品一二三在| 国产欧美精品一区二区色综合朱莉 | 欧美人妖巨大在线| 亚洲国产精品影院| 欧美日韩一区中文字幕| 亚洲v中文字幕| 欧美精品tushy高清| 天堂久久久久va久久久久| 在线电影国产精品| 男女男精品网站| www欧美成人18+| 国产丶欧美丶日本不卡视频| 欧美国产精品中文字幕| 不卡av电影在线播放| 亚洲美女在线国产| 欧美日韩三级视频| 麻豆一区二区在线| 2020国产精品自拍| www.在线欧美| 亚洲欧美自拍偷拍色图| 色先锋久久av资源部| 亚洲sss视频在线视频| 51精品视频一区二区三区| 卡一卡二国产精品| 国产午夜亚洲精品午夜鲁丝片| 国产成人av一区二区三区在线 | 一本大道综合伊人精品热热| 亚洲精品视频免费看| 在线电影院国产精品| 国产美女在线观看一区| 国产精品热久久久久夜色精品三区 | 91国偷自产一区二区使用方法| 亚洲电影视频在线| 精品国产99国产精品| 成人免费毛片嘿嘿连载视频| 一区二区三区四区在线播放| 欧美一级日韩一级| 成人理论电影网| 亚洲va欧美va国产va天堂影院| 久久综合一区二区|