您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ G_FreeEdict函数代码示例

51自学网 2021-06-01 21:01:16
  C++
这篇教程C++ G_FreeEdict函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中G_FreeEdict函数的典型用法代码示例。如果您正苦于以下问题:C++ G_FreeEdict函数的具体用法?C++ G_FreeEdict怎么用?C++ G_FreeEdict使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了G_FreeEdict函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: SpawnItem

/*============SpawnItemSets the clipping size and plants the object on the floor.Items can't be immediately dropped to floor, because they mightbe on an entity that hasn't spawned yet.============*/void SpawnItem (edict_t *ent, gitem_t *item){	if (!ent || !item) // FS: Prevent SP crash	{		return;	}	PrecacheItem (item);	if (ent->spawnflags)	{		if (strcmp(ent->classname, "key_power_cube") != 0)		{			ent->spawnflags = 0;			gi.dprintf(DEVELOPER_MSG_GAME, "%s at %s has invalid spawnflags set/n", ent->classname, vtos(ent->s.origin));		}	}	// some items will be prevented in deathmatch	if (deathmatch->value)	{		if ( (int)dmflags->value & DF_NO_ARMOR )		{			if (item->pickup == Pickup_Armor || item->pickup == Pickup_PowerArmor)			{				G_FreeEdict (ent);				return;			}		}		if ( (int)dmflags->value & DF_NO_ITEMS )		{			if (item->pickup == Pickup_Powerup)			{				G_FreeEdict (ent);				return;			}		}		if ( (int)dmflags->value & DF_NO_HEALTH )		{			if (item->pickup == Pickup_Health || item->pickup == Pickup_Adrenaline)			{				G_FreeEdict (ent);				return;			}		}		if ( (int)dmflags->value & DF_INFINITE_AMMO )		{			if (item->flags == IT_AMMO /*|| (strcmp(ent->classname, "weapon_flamethrower") == 0) */)			{				G_FreeEdict (ent);				return;			}		}	}	if (coop->value && (strcmp(ent->classname, "key_power_cube") == 0))	{		ent->spawnflags |= (1 << (8 + level.power_cubes));		level.power_cubes++;	}	// don't let them drop items that stay in a coop game	if ((coop->value) && (item->flags & IT_STAY_COOP))	{		item->drop = NULL;	}	ent->item = item;	ent->nextthink = level.time + 2 * FRAMETIME;    // items start after other solids	ent->think = droptofloor;	ent->s.effects = item->world_model_flags;//faf	ent->s.renderfx = RF_GLOW;	if (ent->model)		gi.modelindex (ent->model);}
开发者ID:basecq,项目名称:q2dos,代码行数:85,


示例2: Destroy_Camera

static bool Destroy_Camera (Edict* self){	G_SpawnParticle(self->origin, self->spawnflags, self->particle);	G_FreeEdict(self);	return true;}
开发者ID:yason,项目名称:ufoai,代码行数:6,


示例3: SP_monster_gekk

/*QUAKED monster_gekk (1 .5 0) (-24 -24 -24) (24 24 24) Ambush Trigger_Spawn Sight Chant GoodGuy NoGib*/void SP_monster_gekk (edict_t *self){	if (deathmatch->value)	{		G_FreeEdict (self);		return;	}	sound_swing = gi.soundindex ("gek/gk_atck1.wav");	sound_hit = gi.soundindex ("gek/gk_atck2.wav");	sound_hit2 = gi.soundindex ("gek/gk_atck3.wav");	sound_death = gi.soundindex ("gek/gk_deth1.wav");	sound_pain1 = gi.soundindex ("gek/gk_pain1.wav");	sound_sight = gi.soundindex ("gek/gk_sght1.wav");	sound_search = gi.soundindex ("gek/gk_idle1.wav");	sound_step1 = gi.soundindex ("gek/gk_step1.wav");	sound_step2 = gi.soundindex ("gek/gk_step2.wav");	sound_step3 = gi.soundindex ("gek/gk_step3.wav");	sound_thud = gi.soundindex ("mutant/thud1.wav");		sound_chantlow = gi.soundindex ("gek/gek_low.wav");	sound_chantmid = gi.soundindex ("gek/gek_mid.wav");	sound_chanthigh = gi.soundindex ("gek/gek_high.wav");		self->movetype = MOVETYPE_STEP;	self->solid = SOLID_BBOX;	// Lazarus: special purpose skins	if ( self->style )	{		PatchMonsterModel("models/monsters/gekk/tris.md2");		self->s.skinnum = self->style * 3;	}	self->s.modelindex = gi.modelindex ("models/monsters/gekk/tris.md2");	VectorSet (self->mins, -24, -24, -24);	VectorSet (self->maxs, 24, 24, 24);	gi.modelindex ("models/objects/gekkgib/pelvis/tris.md2");	gi.modelindex ("models/objects/gekkgib/arm/tris.md2");	gi.modelindex ("models/objects/gekkgib/torso/tris.md2");	gi.modelindex ("models/objects/gekkgib/claw/tris.md2");	gi.modelindex ("models/objects/gekkgib/leg/tris.md2");	gi.modelindex ("models/objects/gekkgib/head/tris.md2");		if(!self->health)	{		if (skill->value == 0)			self->health = 120;		else			self->health = 150;	}	if(!self->gib_health)		self->gib_health = -100;	if(!self->mass)		self->mass = 300;	self->pain = gekk_pain;	self->die = gekk_die;	self->monsterinfo.stand = gekk_stand;	self->monsterinfo.walk = gekk_walk;	self->monsterinfo.run = gekk_run_start;	self->monsterinfo.dodge = gekk_dodge;	self->monsterinfo.attack = gekk_jump;	self->monsterinfo.melee = gekk_melee;	self->monsterinfo.sight = gekk_sight;		self->monsterinfo.search = gekk_search;	self->monsterinfo.idle = gekk_idle;	self->monsterinfo.checkattack = gekk_checkattack;	if (!self->monsterinfo.flies)		self->monsterinfo.flies = 0.70;	// Lazarus	if(self->powerarmor)	{		if (self->powerarmortype == 1)			self->monsterinfo.power_armor_type = POWER_ARMOR_SCREEN;		else			self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD;		self->monsterinfo.power_armor_power = self->powerarmor;	}	self->common_name = "Gekk";	if (!self->blood_type)		self->blood_type = 1; //Knightmare- set this for blood color	gi.linkentity (self);		self->monsterinfo.currentmove = &gekk_move_stand;	self->monsterinfo.scale = MODEL_SCALE;	walkmonster_start (self);	if (self->spawnflags & 8)//.........这里部分代码省略.........
开发者ID:PBrookfield,项目名称:mpgamex86,代码行数:101,


示例4: SP_info_null

/*QUAKED info_null (0 0.5 0) (-4 -4 -4) (4 4 4)Used as a positional target for spotlights, etc.*/void SP_info_null (edict_t *self){	G_FreeEdict (self);}
开发者ID:AJenbo,项目名称:Quake-2,代码行数:7,


示例5: G_info_null

/*QUAKED info_null (0 0.5 0) (-4 -4 -4) (4 4 4) Used as a positional target for spotlights, etc. */void G_info_null(g_edict_t *self) {	G_FreeEdict(self);}
开发者ID:darkshade9,项目名称:aq2w,代码行数:6,


示例6: Cmd_Give_f

/*==================Cmd_Give_fGive items to a client==================*/void Cmd_Give_f (edict_t *ent){	char		*name;	gitem_t		*it;	int			index;	int			i;	qboolean	give_all;	edict_t		*it_ent;	if (deathmatch->value && !sv_cheats->value)	{		gi.cprintf (ent, PRINT_HIGH, "You must run the server with '+set cheats 1' to enable this command./n");		return;	}	name = gi.args();	if (Q_stricmp(name, "all") == 0)		give_all = true;	else		give_all = false;	if (give_all || Q_stricmp(gi.argv(1), "health") == 0)	{		if (gi.argc() == 3)			ent->health = atoi(gi.argv(2));		else			ent->health = ent->max_health;		if (!give_all)			return;	}	if (give_all || Q_stricmp(name, "weapons") == 0)	{		for (i=0 ; i<game.num_items ; i++)		{			it = itemlist + i;			if (!it->pickup)				continue;			if (!(it->flags & IT_WEAPON))				continue;			ent->client->pers.inventory[i] += 1;		}		if (!give_all)			return;	}	if (give_all || Q_stricmp(name, "ammo") == 0)	{		for (i=0 ; i<game.num_items ; i++)		{			it = itemlist + i;			if (!it->pickup)				continue;			if (!(it->flags & IT_AMMO))				continue;			Add_Ammo (ent, it, 1000);		}		if (!give_all)			return;	}	if (give_all || Q_stricmp(name, "armor") == 0)	{		gitem_armor_t	*info;		it = FindItem("Jacket Armor");		ent->client->pers.inventory[ITEM_INDEX(it)] = 0;		it = FindItem("Combat Armor");		ent->client->pers.inventory[ITEM_INDEX(it)] = 0;		it = FindItem("Body Armor");		info = (gitem_armor_t *)it->info;		ent->client->pers.inventory[ITEM_INDEX(it)] = info->max_count;		if (!give_all)			return;	}	if (give_all || Q_stricmp(name, "Power Shield") == 0)	{		it = FindItem("Power Shield");		it_ent = G_Spawn();		it_ent->classname = it->classname;		SpawnItem (it_ent, it);		Touch_Item (it_ent, ent, NULL, NULL);		if (it_ent->inuse)			G_FreeEdict(it_ent);		if (!give_all)			return;	}//.........这里部分代码省略.........
开发者ID:Nallorusk,项目名称:IT-266,代码行数:101,


示例7: SP_monster_makron

/*QUAKED monster_makron (1 .5 0) (-30 -30 0) (30 30 90) Ambush Trigger_Spawn Sight*/void SP_monster_makron (edict_t *self){	if (deathmatch->value)	{		G_FreeEdict (self);		return;	}	MakronPrecache ();	self->movetype = MOVETYPE_STEP;	self->solid = SOLID_BBOX;	self->s.modelindex = gi.modelindex ("models/monsters/boss3/rider/tris.md2");	VectorSet (self->mins, -30, -30, 0);	VectorSet (self->maxs, 30, 30, 90);	// Lazarus: mapper-configurable health	if(!self->health)		self->health = 3000;	// Lazarus: get around Killed's prevention of health dropping below -999//	if(!self->gib_health)//		self->gib_health = -2000;	self->gib_health = -900;	if(!self->mass)		self->mass = 500;	self->pain = makron_pain;	self->die = makron_die;	self->monsterinfo.stand = makron_stand;	self->monsterinfo.walk = makron_walk;	self->monsterinfo.run = makron_run;	self->monsterinfo.dodge = NULL;	self->monsterinfo.attack = makron_attack;	self->monsterinfo.melee = NULL;	self->monsterinfo.sight = makron_sight;	self->monsterinfo.checkattack = Makron_CheckAttack;	// Knightmare- added sparks and blood type	if (!self->blood_type)		self->blood_type = 2; //sparks	else		self->fogclip |= 2; //custom bloodtype flag	// Lazarus	if(self->powerarmor) {		self->monsterinfo.power_armor_type = POWER_ARMOR_SHIELD;		self->monsterinfo.power_armor_power = self->powerarmor;	}	gi.linkentity (self);		self->monsterinfo.currentmove = &makron_move_sight;	if(self->health < 0)	{		mmove_t	*deathmoves[] = {&makron_move_death2,			                     &makron_move_death3,								 NULL};		M_SetDeath(self,(mmove_t **)&deathmoves);	}	self->monsterinfo.scale = MODEL_SCALE;	walkmonster_start(self);}
开发者ID:Nephatrine,项目名称:nephq2-game,代码行数:65,


示例8: for

/*==============================G_UseTargetsthe global "activator" should be set to the entity that initiated the firing.If self.delay is set, a DelayedUse entity will be created that will actuallydo the SUB_UseTargets after that many seconds have passed.Centerprints any self.message to the activator.Search for (string)targetname in all entities thatmatch (string)self.target and call their .use function==============================*/void G_UseTargets (edict_t *ent, edict_t *activator){    edict_t		*t;//// check for a delay//    if (ent->delay)    {        // create a temp object to fire at a later time        t = G_Spawn();        t->classname = "DelayedUse";        t->nextthink = level.time + ent->delay;        t->think = Think_Delay;        t->activator = activator;        if (!activator)            gi.dprintf ("Think_Delay with no activator/n");        t->message = ent->message;        t->target = ent->target;        t->killtarget = ent->killtarget;        return;    }//// print the message//    if ((ent->message) && !(activator->svflags & SVF_MONSTER))    {        gi.centerprintf (activator, "%s", ent->message);        if (ent->noise_index)            gi.sound (activator, CHAN_AUTO, ent->noise_index, 1, ATTN_NORM, 0);        else            gi.sound (activator, CHAN_AUTO, gi.soundindex ("misc/talk1.wav"), 1, ATTN_NORM, 0);    }//// kill killtargets//    if (ent->killtarget)    {        t = NULL;        while ((t = G_Find (t, FOFS(targetname), ent->killtarget)))        {            G_FreeEdict (t);            if (!ent->inuse)            {                gi.dprintf("entity was removed while using killtargets/n");                return;            }        }    }//// fire targets//    if (ent->target)    {        t = NULL;        while ((t = G_Find (t, FOFS(targetname), ent->target)))        {            // doors fire area portals in a specific way            if (!Q_strcasecmp(t->classname, "func_areaportal") &&                    (!Q_strcasecmp(ent->classname, "func_door") || !Q_strcasecmp(ent->classname, "func_door_rotating")))                continue;            if (t == ent)            {                gi.dprintf ("WARNING: Entity used itself./n");            }            else            {                if (t->use)                    t->use (t, ent, activator);            }            if (!ent->inuse)            {                gi.dprintf("entity was removed while using targets/n");                return;            }        }    }}
开发者ID:qbism,项目名称:qbq2,代码行数:99,


示例9: monster_start

qboolean monster_start (edict_t *self){	if (deathmatch->value)	{		G_FreeEdict (self);		return false;	}	// Lazarus: Already gibbed monsters passed across levels via trigger_transition:	if ( (self->max_health > 0) && (self->health <= self->gib_health) && !(self->spawnflags & SF_MONSTER_NOGIB) )	{		void	SP_gibhead(edict_t *);		SP_gibhead(self);		return true;	}	// Lazarus: Good guys	if (self->spawnflags & SF_MONSTER_GOODGUY) {		self->monsterinfo.aiflags |= AI_GOOD_GUY;		if(!self->dmgteam) {			self->dmgteam = gi.TagMalloc(8*sizeof(char), TAG_LEVEL);		//	strncpy(self->dmgteam,"player");			Q_strncpyz(self->dmgteam,"player", 8);		}	}	// Lazarus: Max range for sight/attack	if(st.distance)		self->monsterinfo.max_range = max(500,st.distance);	else		self->monsterinfo.max_range = 1280;	// Q2 default is 1000. We're mean.	// Lazarus: We keep SIGHT to mean what old AMBUSH does, and AMBUSH additionally	//          now means don't play idle sounds/*	if ((self->spawnflags & MONSTER_SIGHT) && !(self->monsterinfo.aiflags & AI_GOOD_GUY))	{		self->spawnflags &= ~MONSTER_SIGHT;		self->spawnflags |= MONSTER_AMBUSH;	} */	if ((self->spawnflags & SF_MONSTER_AMBUSH) && !(self->monsterinfo.aiflags & AI_GOOD_GUY))		self->spawnflags |= SF_MONSTER_SIGHT;	// Lazarus: Don't add trigger spawned monsters until they are actually spawned	if (!(self->monsterinfo.aiflags & AI_GOOD_GUY) && !(self->spawnflags & SF_MONSTER_TRIGGER_SPAWN))		level.total_monsters++;	self->nextthink = level.time + FRAMETIME;	self->svflags |= SVF_MONSTER;	self->s.renderfx |= RF_FRAMELERP;	self->air_finished = level.time + 12;	self->use = monster_use;	// Lazarus - don't reset max_health unnecessarily	if(!self->max_health)		self->max_health = self->health;	if (self->health < (self->max_health / 2))		self->s.skinnum |= 1;	else		self->s.skinnum &= ~1;	self->clipmask = MASK_MONSTERSOLID;	if (self->s.skinnum < 1) // Knightmare added		self->s.skinnum = 0;	self->deadflag = DEAD_NO;	self->svflags &= ~SVF_DEADMONSTER;	if(self->monsterinfo.flies > 1.0)	{		self->s.effects |= EF_FLIES;		self->s.sound = gi.soundindex ("infantry/inflies1.wav");	}	// Lazarus	if(self->health <=0)	{		self->svflags |= SVF_DEADMONSTER;		self->movetype = MOVETYPE_TOSS;		self->takedamage = DAMAGE_YES;		self->monsterinfo.pausetime = 100000000;		self->monsterinfo.aiflags &= ~AI_RESPAWN_FINDPLAYER;		if(self->max_health > 0)		{			// This must be a dead monster who changed levels			// via trigger_transition			self->nextthink = 0;			self->deadflag = DEAD_DEAD;		}		if(self->s.effects & EF_FLIES && self->monsterinfo.flies <= 1.0)		{			self->think = M_FliesOff;			self->nextthink = level.time + 1 + random()*60;		}		return true;	}	else	{		// make sure red shell is turned off in case medic got confused:		self->monsterinfo.aiflags &= ~AI_RESURRECTING;		self->svflags &= ~SVF_DEADMONSTER;		self->takedamage = DAMAGE_AIM;//.........这里部分代码省略.........
开发者ID:Kiln707,项目名称:KMQuake2,代码行数:101,


示例10: SP_monster_flyer

/* * QUAKED monster_flyer (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */voidSP_monster_flyer(edict_t *self){	if (!self)	{		return;	}	if (deathmatch->value)	{		G_FreeEdict(self);		return;	}	/* fix a map bug in jail5.bsp */	if (!Q_stricmp(level.mapname, "jail5") && (self->s.origin[2] == -104))	{		self->targetname = self->target;		self->target = NULL;	}	sound_sight = gi.soundindex("flyer/flysght1.wav");	sound_idle = gi.soundindex("flyer/flysrch1.wav");	sound_pain1 = gi.soundindex("flyer/flypain1.wav");	sound_pain2 = gi.soundindex("flyer/flypain2.wav");	sound_slash = gi.soundindex("flyer/flyatck2.wav");	sound_sproing = gi.soundindex("flyer/flyatck1.wav");	sound_die = gi.soundindex("flyer/flydeth1.wav");	gi.soundindex("flyer/flyatck3.wav");	self->s.modelindex = gi.modelindex("models/monsters/flyer/tris.md2");	VectorSet(self->mins, -16, -16, -24);	VectorSet(self->maxs, 16, 16, 16);	self->movetype = MOVETYPE_STEP;	self->solid = SOLID_BBOX;	self->s.sound = gi.soundindex("flyer/flyidle1.wav");	self->health = 50;	self->mass = 50;	self->pain = flyer_pain;	self->die = flyer_die;	self->monsterinfo.stand = flyer_stand;	self->monsterinfo.walk = flyer_walk;	self->monsterinfo.run = flyer_run;	self->monsterinfo.attack = flyer_attack;	self->monsterinfo.melee = flyer_melee;	self->monsterinfo.sight = flyer_sight;	self->monsterinfo.idle = flyer_idle;	self->monsterinfo.blocked = (void *)flyer_blocked;	gi.linkentity(self);	self->monsterinfo.currentmove = &flyer_move_stand;	self->monsterinfo.scale = MODEL_SCALE;	flymonster_start(self);}
开发者ID:basecq,项目名称:q2dos,代码行数:64,


示例11: G_ClearSnap

//================//G_ClearSnap// We just run G_SnapFrame, the server just sent the snap to the clients,// it's now time to clean up snap specific data to start the next snap from clean.//================void G_ClearSnap( void ){	edict_t	*ent;	game.realtime = trap_Milliseconds(); // level.time etc. might not be real time	// clear gametype's clock override	gs.gameState.longstats[GAMELONG_CLOCKOVERRIDE] = 0;	// clear all events in the snap	for( ent = &game.edicts[0]; ENTNUM( ent ) < game.numentities; ent++ )	{		if( ISEVENTENTITY( &ent->s ) )  // events do not persist after a snapshot		{			G_FreeEdict( ent );			continue;		}		// events only last for a single message		ent->s.events[0] = ent->s.events[1] = 0;		ent->s.eventParms[0] = ent->s.eventParms[1] = 0;		ent->numEvents = 0;		ent->eventPriority[0] = ent->eventPriority[1] = qfalse;		ent->s.teleported = qfalse; // remove teleported bit.		// remove effect bits that are (most likely) added from gametypes		ent->s.effects = ( ent->s.effects & (EF_TAKEDAMAGE|EF_CARRIER|EF_FLAG_TRAIL|EF_ROTATE_AND_BOB|EF_STRONG_WEAPON) );	}	// recover some info, let players respawn and finally clear the snap structures	for( ent = &game.edicts[0]; ENTNUM( ent ) < game.numentities; ent++ )	{		if( !GS_MatchPaused() )		{			// copy origin to old origin ( this old_origin is for snaps )			if( !( ent->r.svflags & SVF_TRANSMITORIGIN2 ) )				VectorCopy( ent->s.origin, ent->s.old_origin );						G_CheckClientRespawnClick( ent );		}		if( GS_MatchPaused() )			ent->s.sound = entity_sound_backup[ENTNUM( ent )];		// clear the snap temp info		memset( &ent->snap, 0, sizeof( ent->snap ) );		if( ent->r.client && trap_GetClientState( PLAYERNUM( ent ) ) >= CS_SPAWNED )		{			memset( &ent->r.client->resp.snap, 0, sizeof( ent->r.client->resp.snap ) );			// set race stats to invisible			ent->r.client->ps.stats[STAT_TIME_SELF] = STAT_NOTSET;			ent->r.client->ps.stats[STAT_TIME_BEST] = STAT_NOTSET;			ent->r.client->ps.stats[STAT_TIME_RECORD] = STAT_NOTSET;			ent->r.client->ps.stats[STAT_TIME_ALPHA] = STAT_NOTSET;			ent->r.client->ps.stats[STAT_TIME_BETA] = STAT_NOTSET;		}	}	g_snapStarted = qfalse;}
开发者ID:Racenet,项目名称:racesow,代码行数:66,


示例12: SpawnEntities

/*==============SpawnEntitiesCreates a server's entity / program execution context byparsing textual entity definitions out of an ent file.==============*/void SpawnEntities (char *mapname, char *entities, char *spawnpoint){	edict_t		*ent;	int			inhibit;	char		*com_token;	int			i;	float		skill_level;/*freeze*/	static int	fStarted = 0;/*freeze*/	skill_level = floor (skill->value);	if (skill_level < 0)		skill_level = 0;	if (skill_level > 3)		skill_level = 3;	if (skill->value != skill_level)		gi.cvar_forceset("skill", va("%f", skill_level));	SaveClientData ();	gi.FreeTags (TAG_LEVEL);/*freeze*/	if (fStarted)		sl_GameEnd(&gi, level);/*freeze*/	memset (&level, 0, sizeof(level));	memset (g_edicts, 0, game.maxentities * sizeof (g_edicts[0]));	strncpy (level.mapname, mapname, sizeof(level.mapname)-1);	strncpy (game.spawnpoint, spawnpoint, sizeof(game.spawnpoint)-1);	// set client fields on player ents	for (i=0 ; i<game.maxclients ; i++)		g_edicts[i+1].client = game.clients + i;	ent = NULL;	inhibit = 0;// parse ents	while (1)	{		// parse the opening brace			com_token = COM_Parse (&entities);		if (!entities)			break;		if (com_token[0] != '{')			gi.error ("ED_LoadFromFile: found %s when expecting {",com_token);		if (!ent)			ent = g_edicts;		else			ent = G_Spawn ();		entities = ED_ParseEdict (entities, ent);		// yet another map hack		if (!Q_stricmp(level.mapname, "command") && !Q_stricmp(ent->classname, "trigger_once") && !Q_stricmp(ent->model, "*27"))			ent->spawnflags &= ~SPAWNFLAG_NOT_HARD;		// remove things (except the world) from different skill levels or deathmatch		if (ent != g_edicts)		{			if (deathmatch->value)			{				if ( ent->spawnflags & SPAWNFLAG_NOT_DEATHMATCH )				{					G_FreeEdict (ent);						inhibit++;					continue;				}			}			else			{				if ( /* ((coop->value) && (ent->spawnflags & SPAWNFLAG_NOT_COOP)) || */					((skill->value == 0) && (ent->spawnflags & SPAWNFLAG_NOT_EASY)) ||					((skill->value == 1) && (ent->spawnflags & SPAWNFLAG_NOT_MEDIUM)) ||					(((skill->value == 2) || (skill->value == 3)) && (ent->spawnflags & SPAWNFLAG_NOT_HARD))					)					{						G_FreeEdict (ent);							inhibit++;						continue;					}			}			ent->spawnflags &= ~(SPAWNFLAG_NOT_EASY|SPAWNFLAG_NOT_MEDIUM|SPAWNFLAG_NOT_HARD|SPAWNFLAG_NOT_COOP|SPAWNFLAG_NOT_DEATHMATCH);		}		ED_CallSpawn (ent);	}	//.........这里部分代码省略.........
开发者ID:dbircsak,项目名称:freeze-tag,代码行数:101,


示例13: Touch_Item

//.........这里部分代码省略.........		{			//gi.dprintf(DEVELOPER_MSG_GAME, "Plonk!  %s/n",other->classname);			if (ent->item)			{				//velocity goes from around -250 for normal drop to ~1000 from top of dday2 church stairs				//knife ~1 lb  50cal ~50 lbs				vol = ((1000+(-1 * ent->velocity[2]))/2000) * ( (ent->item->weight+100)/150 );				if (vol > .9)					vol = .9;//				gi.dprintf(DEVELOPER_MSG_GAME, "%f %f   %f/n", ent->velocity[2], ent->item->weight, vol);//				gi.dprintf(DEVELOPER_MSG_GAME, "%f %f   %f/n", ((1000+(-1 * ent->velocity[2]))/2000), (ent->item->weight+100)/150, vol);								if (ent->item->flags & IT_AMMO || ent->item->position == LOC_GRENADES || ent->item->position == LOC_KNIFE)					gi.sound (ent, CHAN_WEAPON, gi.soundindex("weapons/ammodrop.wav"), vol, ATTN_NORM, 0);					//gi.positioned_sound (ent->s.origin, g_edicts, CHAN_AUTO, gi.soundindex("weapons/ammodrop.wav"), vol, ATTN_NORM, 0);							else if (ent->item->flags & IT_WEAPON)					gi.sound (ent, CHAN_WEAPON, gi.soundindex("weapons/gundrop.wav"), vol, ATTN_NORM, 0);					//gi.positioned_sound (ent->s.origin, g_edicts, CHAN_AUTO, gi.soundindex("weapons/gundrop.wav"), vol, ATTN_NORM, 0);						}			ent->playedsound = true;		}		return;	}	if (other->health < 1)		return;		// dead people can't pickup	if (!ent->item->pickup)		return;		// not a grabbable item?	if (other->client->resp.autopickup == false && ent->item->classnameb != HGRENADE)		return;	if (other->client && other->client->resp.mos == MEDIC)	{		if (!( 				(ent->item->tag && ent->item->tag == AMMO_TYPE_PISTOL) ||				(ent->item->position && ent->item->position == LOC_PISTOL) ||				(ent->item->pickup_name && !Q_stricmp(ent->item->pickup_name,"Knife")) ||				(ent->item->pickup_name && !Q_stricmp(ent->item->pickup_name,"Helmet")) 			))			return;	}	//pbowens: you can only have 1 helmet	if (ent->item->pickup_name && !Q_stricmp(ent->item->pickup_name, "Helmet") )	{		if (other->client->pers.inventory[ITEM_INDEX(ent->item)])		{//			safe_cprintf(other, PRINT_HIGH, "You already have a helmet!/n");			return;		}	}	// you cannot pickup more than 1 team weapon	if (ent->item->guninfo && other->client->pers.inventory[ITEM_INDEX(ent->item)])		return;//faf	if (ent->item->position != LOC_GRENADES && ent->count > 1 &&//faf		other->client->pers.inventory[ITEM_INDEX(ent->item)] ) // dont pick up if ammo already//faf		return;	taken = ent->item->pickup(ent, other);	if (taken)	{		// flash the screen		//other->client->bonus_alpha = 0.25;			// show icon and name on status bar		other->client->ps.stats[STAT_PICKUP_ICON] = gi.imageindex(ent->item->icon);		other->client->ps.stats[STAT_PICKUP_STRING] = CS_ITEMS+ITEM_INDEX(ent->item);		other->client->pickup_msg_time = level.time + 3.0;		// change selected item		//if (ent->item->use)		//	other->client->pers.selected_item = other->client->ps.stats[STAT_SELECTED_ITEM] = ITEM_INDEX(ent->item);		gi.sound(other, CHAN_ITEM, gi.soundindex(ent->item->pickup_sound), 1, ATTN_NORM, 0);	}	if (!(ent->spawnflags & ITEM_TARGETS_USED))	{		G_UseTargets (ent, other);		ent->spawnflags |= ITEM_TARGETS_USED;	}	if (!taken)		return;	if (!((coop->value) &&  (ent->item->flags & IT_STAY_COOP)) || (ent->spawnflags & (DROPPED_ITEM | DROPPED_PLAYER_ITEM)))	{		if (ent->flags & FL_RESPAWN)			ent->flags &= ~FL_RESPAWN;		else			G_FreeEdict (ent);	}}
开发者ID:basecq,项目名称:q2dos,代码行数:101,


示例14: Weapon_Sandbag_Fire

void Weapon_Sandbag_Fire (edict_t *ent){	edict_t	*sandbag;    	ent->client->ps.gunframe++;	if (ent->client->resp.team_on->index == 0)	{		if (allied_sandbags >= sandbaglimit->value)		{			safe_centerprintf(ent, "Your team is at the sandbag limit!/n");			return;		}	}	else if (ent->client->resp.team_on->index == 1)	{		if (axis_sandbags >= sandbaglimit->value)		{			safe_centerprintf(ent, "Your team is at the sandbag limit!/n");			return;		}	}	if (VectorCompare (ent->client->sandbag_pos , vec3_origin))	{		safe_centerprintf(ent, "There's no space for sandbags there!/n");		return;	}	ent->client->pers.inventory[ITEM_INDEX(FindItem("Sandbags"))]--;	sandbag = G_Spawn();	VectorCopy (ent->client->sandbag_preview->mins, sandbag->mins);	VectorCopy (ent->client->sandbag_preview->maxs, sandbag->maxs);	VectorCopy (ent->client->sandbag_preview->s.angles, sandbag->s.angles);	sandbag->classnameb = SANDBAGS;	sandbag->movetype = MOVETYPE_TOSS;	sandbag->solid = SOLID_BBOX;	sandbag->s.modelindex = gi.modelindex ("models/objects/sandbag/tris.md2");	sandbag->think = sandbag_think;	sandbag->nextthink = level.time +.1;//	ent->s.frame = rand() % 16;//	ent->s.frame = 1;	sandbag->mass = 300;	sandbag->touch = sandbag_touch;	sandbag->health = 2000;	sandbag->takedamage      = DAMAGE_YES;	sandbag->die = sandbag_die;		sandbag->s.skinnum = 0;		sandbag->s.frame = 0;//		VectorSet (sandbag->mins, -19, -9, -10);//		VectorSet (sandbag->maxs, 19, 9, 8);	VectorCopy (ent->client->sandbag_pos, sandbag->s.origin);		sandbag->clipmask = MASK_SHOT;	sandbag->spawnflags = 1;	if (ent->client->resp.team_on)		sandbag->obj_owner = ent->client->resp.team_on->index;	if (ent->client->resp.team_on->index == 0)		allied_sandbags++;	else if (ent->client->resp.team_on->index == 1)		axis_sandbags++;	sandbag->obj_time = level.time;	gi.linkentity (sandbag);	if (ent->client->pers.inventory[ITEM_INDEX(FindItem("Sandbags"))] ==0)	{		ent->client->weaponstate=WEAPON_LOWER;		ent->client->ps.gunframe = 20;		Use_Weapon (ent, FindItem("fists"));		return;	}	G_FreeEdict (ent->client->sandbag_preview);//.........这里部分代码省略.........
开发者ID:basecq,项目名称:q2dos,代码行数:101,


示例15: cash_kill

void cash_kill( edict_t *self ){	num_cash_items--;	G_FreeEdict( self );}
开发者ID:MonkeyHarris,项目名称:monkey-mod,代码行数:5,


示例16: func_explosive_explode

static void func_explosive_explode( edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, const vec3_t point ){	vec3_t origin, bakorigin;	vec3_t chunkorigin;	vec3_t size;	int count;	int mass;	// do not explode unless visible	if( self->r.svflags & SVF_NOCLIENT )		return;	self->takedamage = DAMAGE_NO;	// bmodel origins are (0 0 0), we need to adjust that here	VectorCopy( self->s.origin, bakorigin );	VectorScale( self->r.size, 0.5, size );	VectorAdd( self->r.absmin, size, origin );	VectorCopy( origin, self->s.origin );	if( self->projectileInfo.maxDamage )		G_RadiusDamage( self, attacker, NULL, NULL, MOD_EXPLOSIVE );	VectorSubtract( self->s.origin, inflictor->s.origin, self->velocity );	VectorNormalize( self->velocity );	VectorScale( self->velocity, 150, self->velocity );	// start chunks towards the center	VectorScale( size, 0.5, size );	mass = self->projectileInfo.radius * 0.75;	if( !mass )		mass = 75;	// big chunks	if( self->count > 0 )	{		if( mass >= 100 )		{			count = mass / 100;			if( count > 8 )				count = 8;			while( count-- )			{				chunkorigin[0] = origin[0] + crandom() * size[0];				chunkorigin[1] = origin[1] + crandom() * size[1];				chunkorigin[2] = origin[2] + crandom() * size[2];				ThrowDebris( self, self->count, 1, chunkorigin );			}		}	}	// small chunks	if( self->viewheight > 0 )	{		count = mass / 25;		if( count > 16 )			count = 16;		if( count < 1 ) count = 1;		while( count-- )		{			chunkorigin[0] = origin[0] + crandom() * size[0];			chunkorigin[1] = origin[1] + crandom() * size[1];			chunkorigin[2] = origin[2] + crandom() * size[2];			ThrowDebris( self, self->viewheight, 2, chunkorigin );		}	}	G_UseTargets( self, attacker );	if( self->projectileInfo.maxDamage )	{		edict_t *explosion;		explosion = G_Spawn();		VectorCopy( self->s.origin, explosion->s.origin );		explosion->projectileInfo = self->projectileInfo;		BecomeExplosion1( explosion );	}	if( self->use == NULL )	{		G_FreeEdict( self );		return;	}	self->health = self->max_health;	self->r.solid = SOLID_NOT;	self->r.svflags |= SVF_NOCLIENT;	VectorCopy( bakorigin, self->s.origin );	VectorClear( self->velocity );	GClip_LinkEntity( self );}
开发者ID:codetwister,项目名称:qfusion,代码行数:92,


示例17: SpawnTotem

//.........这里部分代码省略.........				return;			}		}	}	//Drop a totem.	totem = DropTotem(ent);	totem->mtype = totemType;	totem->monsterinfo.level = ent->myskills.abilities[abilityID].current_level;	totem->classname = "totem";	/*totem->owner =*/ totem->activator = ent;	totem->think = totem_general_think;	totem->touch = totem_touch;	totem->nextthink = level.time + FRAMETIME*2;	totem->delay = level.time + 0.5;	totem->die = totem_die;	//TODO: update this with the new model.	totem->s.modelindex = gi.modelindex("models/items/mega_h/tris.md2");	//totem->s.angles[ROLL] = 270;	VectorSet (totem->mins, -8, -8, -12);	VectorSet (totem->maxs, 8, 8, 16);	VectorCopy(ent->s.origin, totem->s.origin);		totem->health = TOTEM_HEALTH_BASE + TOTEM_HEALTH_MULT * totem->monsterinfo.level;	//Talent: Totemic Focus - increases totem health	if((talentLevel = getTalentLevel(ent, TALENT_TOTEM)) > 0)		totem->health *= 1 + 0.1666 * talentLevel;	if (totemType == TOTEM_FIRE)	{		// fire totem is much tougher		totem->health *= 2;		// fire totem has a longer delay		totem->delay = level.time + 2.0;	}	totem->max_health = totem->health*2;	//Not sure if this stuff is needed (Archer)	totem->svflags |= SVF_MONSTER;	totem->takedamage = DAMAGE_AIM;	totem->clipmask = MASK_MONSTERSOLID;	//Back to stuff we need	totem->mass = 200;	totem->movetype = MOVETYPE_TOSS;//MOVETYPE_WALK;	totem->deadflag = DEAD_NO;	totem->svflags &= ~SVF_DEADMONSTER;		totem->solid = SOLID_BBOX;	//Graphical effects	//TODO: update this to make it look better.	totem->s.effects |= EF_PLASMA | EF_COLOR_SHELL | EF_SPHERETRANS;	switch(totemType)	{	case TOTEM_FIRE:		totem->s.effects |= 262144;		//red radius light		totem->s.renderfx |= RF_SHELL_RED;		break;	case TOTEM_WATER:		totem->s.effects |= 524288;		//blue radius light		totem->s.renderfx |= RF_SHELL_CYAN;		break;	case TOTEM_AIR:		totem->s.effects |= 64;			//bright light radius		totem->s.renderfx |= RF_SHELL_RED | RF_SHELL_BLUE | RF_SHELL_GREEN;				break;	case TOTEM_EARTH:		totem->s.renderfx |= RF_SHELL_YELLOW;		break;	case TOTEM_DARKNESS:		totem->s.effects |= 2147483648;		//strange darkness effect		//totem->s.renderfx |= RF_SHELL_RED | RF_SHELL_BLUE;		break;	case TOTEM_NATURE:		totem->s.effects |= 128;	//green radius light		totem->s.renderfx |= RF_SHELL_GREEN;		break;	}//GHz 4.32	if (!G_GetSpawnLocation(ent, 64, totem->mins, totem->maxs, start))	{		G_FreeEdict(totem);		return;	}	VectorCopy(start, totem->s.origin);	gi.linkentity(totem);//GHz	if(!ent->totem1)	ent->totem1 = totem;	else				ent->totem2 = totem;	ent->client->pers.inventory[ITEM_INDEX(Fdi_POWERCUBE)] -= cost;	// calling entity made a sound, used to alert monsters	ent->lastsound = level.framenum;	ent->client->ability_delay = level.time + 1.3;}
开发者ID:emmamai,项目名称:vortex-indy,代码行数:101,


示例18: SP_light_mine

//QUAKED light_mine (0 1 0) (-2 -2 -12) (2 2 12)void SP_light_mine( edict_t *ent ){	G_FreeEdict( ent );}
开发者ID:codetwister,项目名称:qfusion,代码行数:5,


示例19: SP_monster_brain

/*QUAKED monster_brain (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight*/void SP_monster_brain (edict_t *self){	if (deathmatch->value)	{		G_FreeEdict (self);		return;	}	sound_chest_open = gi.soundindex ("brain/brnatck1.wav");	sound_tentacles_extend = gi.soundindex ("brain/brnatck2.wav");	sound_tentacles_retract = gi.soundindex ("brain/brnatck3.wav");	sound_death = gi.soundindex ("brain/brndeth1.wav");	sound_idle1 = gi.soundindex ("brain/brnidle1.wav");	sound_idle2 = gi.soundindex ("brain/brnidle2.wav");	sound_idle3 = gi.soundindex ("brain/brnlens1.wav");	sound_pain1 = gi.soundindex ("brain/brnpain1.wav");	sound_pain2 = gi.soundindex ("brain/brnpain2.wav");	sound_sight = gi.soundindex ("brain/brnsght1.wav");	sound_search = gi.soundindex ("brain/brnsrch1.wav");	sound_melee1 = gi.soundindex ("brain/melee1.wav");	sound_melee2 = gi.soundindex ("brain/melee2.wav");	sound_melee3 = gi.soundindex ("brain/melee3.wav");	self->movetype = MOVETYPE_STEP;	self->solid = SOLID_BBOX;	self->s.modelindex = gi.modelindex ("models/monsters/brain/tris.md2");	VectorSet (self->mins, -16, -16, -24);	VectorSet (self->maxs, 16, 16, 32);	self->health = 300;	self->gib_health = -150;	self->mass = 400;	self->pain = brain_pain;	self->die = brain_die;	self->monsterinfo.stand = brain_stand;	self->monsterinfo.walk = brain_walk;	self->monsterinfo.run = brain_run;// PMM	self->monsterinfo.dodge = M_MonsterDodge;	self->monsterinfo.duck = brain_duck;	self->monsterinfo.unduck = monster_duck_up;//	self->monsterinfo.dodge = brain_dodge;// pmm//	self->monsterinfo.attack = brain_attack;	self->monsterinfo.melee = brain_melee;	self->monsterinfo.sight = brain_sight;	self->monsterinfo.search = brain_search;	self->monsterinfo.idle = brain_idle;	self->monsterinfo.power_armor_type = POWER_ARMOR_SCREEN;	self->monsterinfo.power_armor_power = 100;	gi.linkentity (self);	self->monsterinfo.currentmove = &brain_move_stand;		self->monsterinfo.scale = MODEL_SCALE;	walkmonster_start (self);}
开发者ID:MaddTheSane,项目名称:Quake2-Rogue,代码行数:63,


示例20: SP_misc_model

//QUAKED misc_model (1 .5 .25) (-16 -16 -16) (16 16 16)//Generic placeholder for inserting .md3 models in game. Requires compilation of map geometry to be added to level.//-------- KEYS --------//angle: direction in which model will be oriented.//model : path/name of model to use (eg: models/mapobjects/teleporter/teleporter.md3).void SP_misc_model( edict_t *ent ){	G_FreeEdict( ent );}
开发者ID:codetwister,项目名称:qfusion,代码行数:9,


示例21: debris_die

/*=================debris=================*/void debris_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point){	G_FreeEdict (self);}
开发者ID:AJenbo,项目名称:Quake-2,代码行数:9,


示例22: G_SpawnEntities

/* * @brief Creates a server's entity / program execution context by * parsing textual entity definitions out of an ent file. */void G_SpawnEntities(const char *name, const char *entities) {	g_edict_t *ent;	int32_t inhibit;	char *com_token;	int32_t i;	gi.FreeTag(Z_TAG_GAME_LEVEL);	memset(&g_level, 0, sizeof(g_level));	memset(g_game.edicts, 0, g_max_entities->value * sizeof(g_game.edicts[0]));	g_strlcpy(g_level.name, name, sizeof(g_level.name));	// set client fields on player ents	for (i = 0; i < sv_max_clients->integer; i++) {		g_game.edicts[i + 1].client = g_game.clients + i;	}	ge.num_edicts = sv_max_clients->integer + 1;	ent = NULL;	inhibit = 0;	// parse ents	while (true) {		// parse the opening brace		com_token = ParseToken(&entities);		if (!entities)			break;		if (com_token[0] != '{')			gi.Error("Found /"%s/" when expecting /"{/"", com_token);		if (!ent)			ent = g_game.edicts;		else			ent = G_Spawn();		entities = G_ParseEntity(entities, ent);		// some ents don't belong in deathmatch		if (ent != g_game.edicts) {			// legacy levels may require this			if (ent->locals.spawn_flags & SF_NOT_DEATHMATCH) {				G_FreeEdict(ent);				inhibit++;				continue;			}			// emits and models are client sided			if (!g_strcmp0(ent->class_name, "misc_emit") || !g_strcmp0(ent->class_name, "misc_model")) {				G_FreeEdict(ent);				inhibit++;				continue;			}			// lights aren't even used			if (!g_strcmp0(ent->class_name, "light") || !g_strcmp0(ent->class_name, "light_spot")) {				G_FreeEdict(ent);				inhibit++;				continue;			}			// strip away unsupported flags			ent->locals.spawn_flags &= ~(SF_NOT_EASY | SF_NOT_MEDIUM | SF_NOT_HARD | SF_NOT_COOP					| SF_NOT_DEATHMATCH);		}		// retain the map-specified origin for respawns		VectorCopy(ent->s.origin, ent->locals.map_origin);		G_SpawnEntity(ent);		if (g_level.gameplay > 1 && ent->locals.item) { // now that we've spawned them, hide them			ent->sv_flags |= SVF_NO_CLIENT;			ent->solid = SOLID_NOT;			ent->locals.next_think = 0;		}	}	gi.Debug("%i entities inhibited/n", inhibit);	G_InitEntityTeams();	G_InitMedia();	G_ResetTeams();	G_ResetVote();}
开发者ID:devilx4,项目名称:quake2world,代码行数:95,


示例23: mass

/*QUAKED func_explosive (0 .5 .8) ? Trigger_Spawn ANIMATED ANIMATED_FASTAny brush that you want to explode or break apart.  If you want anex0plosion, set dmg and it will do a radius explosion of that amountat the center of the bursh.If targeted it will not be shootable.health defaults to 100.mass defaults to 75.  This determines how much debris is emitted whenit explodes.  You get one large chunk per 100 of mass (up to 8) andone small chunk per 25 of mass (up to 16).  So 800 gives the most.*/void func_explosive_explode (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point){	vec3_t	origin;	vec3_t	chunkorigin;	vec3_t	size;	int		count;	int		mass;	// bmodel origins are (0 0 0), we need to adjust that here	VectorScale (self->size, 0.5, size);	VectorAdd (self->absmin, size, origin);	VectorCopy (origin, self->s.origin);	self->takedamage = DAMAGE_NO;	if (self->dmg)		T_RadiusDamage (self, attacker, self->dmg, NULL, self->dmg+40, MOD_EXPLOSIVE);	VectorSubtract (self->s.origin, inflictor->s.origin, self->velocity);	VectorNormalize (self->velocity);	VectorScale (self->velocity, 150, self->velocity);	// start chunks towards the center	VectorScale (size, 0.5, size);	mass = self->mass;	if (!mass)		mass = 75;	// big chunks	if (mass >= 100)	{		count = mass / 100;		if (count > 8)			count = 8;		while(count--)		{			chunkorigin[0] = origin[0] + crandom() * size[0];			chunkorigin[1] = origin[1] + crandom() * size[1];			chunkorigin[2] = origin[2] + crandom() * size[2];			ThrowDebris (self, "models/objects/debris1/tris.md2", 1, chunkorigin);		}	}	// small chunks	count = mass / 25;	if (count > 16)		count = 16;	while(count--)	{		chunkorigin[0] = origin[0] + crandom() * size[0];		chunkorigin[1] = origin[1] + crandom() * size[1];		chunkorigin[2] = origin[2] + crandom() * size[2];		ThrowDebris (self, "models/objects/debris2/tris.md2", 2, chunkorigin);	}	G_UseTargets (self, attacker);	if (self->dmg)		BecomeExplosion1 (self);	else		G_FreeEdict (self);}
开发者ID:AJenbo,项目名称:Quake-2,代码行数:76,


示例24: SP_misc_viper

void SP_misc_viper (edict_t *ent){	if (!ent->target)	{		gi.dprintf ("misc_viper without a target at %s/n", vtos(ent->absmin));		G_FreeEdict (ent);		return;	}	if (ent->spawnflags & 1)	{		ent->s.effects |= EF_ROCKET;		ent->spawnflags &= ~1; // turn this off so that it doesn't mess up the trains	}	if (!ent->speed)		ent->speed = 300;	ent->movetype = MOVETYPE_PUSH;	if (ent->spawnflags & 2)	{		ent->solid = SOLID_BBOX;	}	else	{		ent->solid = SOLID_NOT;	}	if(ent->model)	{		ent->s.modelindex = gi.modelindex (ent->model);	}	else	{		ent->s.modelindex = gi.modelindex ("models/ships/viper/tris.md2");	}	if(ent->model2)	{		ent->s.modelindex2 = gi.modelindex (ent->model2);	}	if(ent->model3)	{		ent->s.modelindex3 = gi.modelindex (ent->model3);	}	if(ent->model4)	{		ent->s.modelindex4 = gi.modelindex (ent->model4);	}	if (!(ent->spawnflags & 4))	{		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_viper_use;	ent->svflags |= SVF_NOCLIENT;	ent->moveinfo.accel = ent->moveinfo.decel = ent->moveinfo.speed = ent->speed;	gi.linkentity (ent);}
开发者ID:yquake2,项目名称:zaero,代码行数:67,


示例25: SpawnEntities

/*==============SpawnEntitiesCreates a server's entity / program execution context byparsing textual entity definitions out of an ent file.==============*/void SpawnEntities (char *mapname, char *entities, char *spawnpoint){	edict_t		*ent;	int			inhibit;	char		*com_token;	int			i;	float		skill_level;	skill_level = floor (skill->value);	if (skill_level < 0)		skill_level = 0;	if (skill_level > 3)		skill_level = 3;	if (skill->value != skill_level)		gi.cvar_forceset("skill", va("%f", skill_level));	SaveClientData ();	gi.FreeTags (TAG_LEVEL);	memset (&level, 0, sizeof(level));	memset (g_edicts, 0, game.maxentities * sizeof (g_edicts[0]));	strncpy (level.mapname, mapname, sizeof(level.mapname)-1);	strncpy (game.spawnpoint, spawnpoint, sizeof(game.spawnpoint)-1);	// set client fields on player ents	for (i=0 ; i<game.maxclients ; i++)		g_edicts[i+1].client = game.clients + i;	ent = NULL;	inhibit = 0;// parse ents	while (1)	{		// parse the opening brace			com_token = COM_Parse (&entities);		if (!entities)			break;		if (com_token[0] != '{')			gi.error ("ED_LoadFromFile: found %s when expecting {",com_token);		if (!ent)			ent = g_edicts;		else			ent = G_Spawn ();		entities = ED_ParseEdict (entities, ent);				// yet another map hack		if (!stricmp(level.mapname, "command") && !stricmp(ent->classname, "trigger_once") && !stricmp(ent->model, "*27"))			ent->spawnflags &= ~SPAWNFLAG_NOT_HARD;		// remove things (except the world) from different skill levels or deathmatch		if (ent != g_edicts)		{			if (deathmatch->value)			{				if ( ent->spawnflags & SPAWNFLAG_NOT_DEATHMATCH )				{					G_FreeEdict (ent);						inhibit++;					continue;				}			}			else			{				if ( /* ((coop->value) && (ent->spawnflags & SPAWNFLAG_NOT_COOP)) || */					((skill->value == 0) && (ent->spawnflags & SPAWNFLAG_NOT_EASY)) ||					((skill->value == 1) && (ent->spawnflags & SPAWNFLAG_NOT_MEDIUM)) ||					(((skill->value == 2) || (skill->value == 3)) && (ent->spawnflags & SPAWNFLAG_NOT_HARD))					)					{						G_FreeEdict (ent);							inhibit++;						continue;					}			}			ent->spawnflags &= ~(SPAWNFLAG_NOT_EASY|SPAWNFLAG_NOT_MEDIUM|SPAWNFLAG_NOT_HARD|SPAWNFLAG_NOT_COOP|SPAWNFLAG_NOT_DEATHMATCH);		}		ED_CallSpawn (ent);	}		gi.dprintf ("%i entities inhibited/n", inhibit);	G_FindTeams ();	PlayerTrail_Init ();//ZOID//.........这里部分代码省略.........
开发者ID:Azarien,项目名称:SoftQuake2,代码行数:101,


示例26: trigger_crosslevel_trigger_use

/*QUAKED target_crosslevel_trigger (.5 .5 .5) (-8 -8 -8) (8 8 8) trigger1 trigger2 trigger3 trigger4 trigger5 trigger6 trigger7 trigger8Once this trigger is touched/used, any trigger_crosslevel_target with the same trigger number is automatically used when a level is started within the same unit.  It is OK to check multiple triggers.  Message, delay, target, and killtarget also work.*/void trigger_crosslevel_trigger_use (edict_t *self, edict_t *other, edict_t *activator){	game.serverflags |= self->spawnflags;	G_FreeEdict (self);}
开发者ID:petmac,项目名称:quake2-lite,代码行数:8,


示例27: team

/*QUAKED dm_props_banner (.5 0 1) (-4 -4 -4) (4 4 4)Temp banner for teamplay style = team (1 / 2) scale = scale the size up/down (2 = double size)model="models/props/temp/triangle/small.md2"*/void SP_dm_props_banner (edict_t *self){//	vec3_t	end, bestnorm, bestend;//	float bestdist;//	int	x,y;//	trace_t tr;	if (!deathmatch_value || !teamplay->value)	{	// remove		G_FreeEdict (self);		return;	}		if (!self->style)	{		gi.dprintf( "%s has invalid style (should be 1 or 2) at %s/n", self->classname, vtos(self->s.origin) );		G_FreeEdict (self);		return;	}/*	// trace a line back, to get the wall, then go out	{		bestdist = 9999;		for (x=-256; x<300; x+= 256)		{			VectorCopy( self->s.origin, end );			end[0] = self->s.origin[0] + x;			tr = gi.trace( self->s.origin, NULL, NULL, end, NULL, MASK_SOLID );			if (tr.fraction < bestdist)			{				VectorCopy( tr.plane.normal, bestnorm );				VectorCopy( tr.endpos, bestend );				bestdist = tr.fraction;			}		}		for (y=-256; y<300; y+= 256)		{			VectorCopy( self->s.origin, end );			end[1] = self->s.origin[1] + y;			tr = gi.trace( self->s.origin, NULL, NULL, end, NULL, MASK_SOLID );			if (tr.fraction < bestdist)			{				VectorCopy( tr.plane.normal, bestnorm );				VectorCopy( tr.endpos, bestend );				bestdist = tr.fraction;			}		}		vectoangles( bestnorm, self->s.angles );		VectorMA( bestend, 40 * self->cast_info.scale, bestnorm, self->s.origin );	}*/// Ridah, 1-jun-99, use flag models for now#if 1	{		void think_flag (edict_t *self);//		self->solid = SOLID_BBOX;		self->movetype = MOVETYPE_NONE;		if (self->style == 2)		{			self->model = "models/props/flag/flag1.md2";		}		else		{			self->model = "models/props/flag/flag3.md2";		}		self->s.modelindex = gi.modelindex (self->model);		self->s.renderfx2 |= RF2_NOSHADOW;		self->s.renderfx |= RF_MINLIGHT;		if (!self->cast_info.scale)			self->cast_info.scale = 1;		self->s.scale = (self->cast_info.scale - 1);//		VectorMA( bestend, 40 * self->cast_info.scale, bestnorm, self->s.origin );		self->cast_info.scale *= 0.3;		gi.linkentity (self);		self->s.effects |= EF_ANIM_ALLFAST_NEW;		self->s.renderfx2 |= RF2_MODULUS_FRAME;		self->s.renderfx2 |= RDF_NOLERP;//.........这里部分代码省略.........
开发者ID:MonkeyHarris,项目名称:monkey-mod,代码行数:101,


示例28: Think_Delay

void Think_Delay (edict_t *ent){	G_UseTargets (ent, ent->activator);	G_FreeEdict (ent);}
开发者ID:qbism,项目名称:tmg,代码行数:5,


示例29: droptofloor

/*================droptofloor================*/void droptofloor (edict_t *ent){	trace_t		tr;	vec3_t		dest;	float		*v;	v = tv(-15,-15,-15);	VectorCopy (v, ent->mins);	v = tv(15,15,15);	VectorCopy (v, ent->maxs);	if (ent->model)		gi.setmodel (ent, ent->model);	else		gi.setmodel (ent, ent->item->world_model);	ent->solid = SOLID_TRIGGER;	ent->movetype = MOVETYPE_TOSS;  	ent->touch = Touch_Item;	v = tv(0,0,-128);	VectorAdd (ent->s.origin, v, dest);	tr = gi.trace (ent->s.origin, ent->mins, ent->maxs, dest, ent, MASK_SOLID);	if (tr.startsolid)	{		gi.dprintf(DEVELOPER_MSG_GAME, "droptofloor: %s startsolid at %s/n", ent->classname, vtos(ent->s.origin));		G_FreeEdict (ent);		return;	}	VectorCopy (tr.endpos, ent->s.origin);	if (ent->team)	{		ent->flags &= ~FL_TEAMSLAVE;		ent->chain = ent->teamchain;		ent->teamchain = NULL;		ent->svflags |= SVF_NOCLIENT;		ent->solid = SOLID_NOT;		if (ent == ent->teammaster)		{			ent->nextthink = level.time + FRAMETIME;			ent->think = DoRespawn;		}	}	if (ent->spawnflags & ITEM_NO_TOUCH)	{		ent->solid = SOLID_BBOX;		ent->touch = NULL;		ent->s.effects &= ~EF_ROTATE;		ent->s.renderfx &= ~RF_GLOW;	}	if (ent->spawnflags & ITEM_TRIGGER_SPAWN)	{		ent->svflags |= SVF_NOCLIENT;		ent->solid = SOLID_NOT;		ent->use = Use_Item;	}	gi.linkentity (ent);}
开发者ID:basecq,项目名称:q2dos,代码行数:69,



注:本文中的G_FreeEdict函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ G_FreeEntity函数代码示例
C++ G_FindConfigstringIndex函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。