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

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

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

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

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

示例1: str_copy

void CServer::ProcessClientPacket(CNetChunk *pPacket){	int ClientID = pPacket->m_ClientID;	NETADDR Addr;	CUnpacker Unpacker;	Unpacker.Reset(pPacket->m_pData, pPacket->m_DataSize);	// unpack msgid and system flag	int Msg = Unpacker.GetInt();	int Sys = Msg&1;	Msg >>= 1;	if(Unpacker.Error())		return;	if(Sys)	{		// system message		if(Msg == NETMSG_INFO)		{			if(m_aClients[ClientID].m_State == CClient::STATE_AUTH)			{				char aVersion[64];				str_copy(aVersion, Unpacker.GetString(CUnpacker::SANITIZE_CC), 64);				bool CustClt = str_comp(aVersion, GameServer()->NetVersionCust()) == 0;				dbg_msg("es", "%s client connected!", CustClt?"cust":"vanilla");				if(!CustClt && str_comp(aVersion, GameServer()->NetVersion()) != 0)				{					// wrong version					char aReason[256];					str_format(aReason, sizeof(aReason), "Wrong version. Server is running '%s' and client '%s'", GameServer()->NetVersion(), aVersion);					m_NetServer.Drop(ClientID, aReason);					return;				}				const char *pPassword = Unpacker.GetString(CUnpacker::SANITIZE_CC);				if(g_Config.m_Password[0] != 0 && str_comp(g_Config.m_Password, pPassword) != 0)				{					// wrong password					m_NetServer.Drop(ClientID, "Wrong password");					return;				}				m_aClients[ClientID].m_State = CClient::STATE_CONNECTING;				m_aClients[ClientID].m_CustClt = CustClt;				SendMap(ClientID);			}		}		else if(Msg == NETMSG_REQUEST_MAP_DATA)		{			int Chunk = Unpacker.GetInt();			int ChunkSize = 1024-128;			int Offset = Chunk * ChunkSize;			int Last = 0;			// drop faulty map data requests			if(Chunk < 0 || Offset > m_CurrentMapSize)				return;			if(Offset+ChunkSize >= m_CurrentMapSize)			{				ChunkSize = m_CurrentMapSize-Offset;				if(ChunkSize < 0)					ChunkSize = 0;				Last = 1;			}			CMsgPacker Msg(NETMSG_MAP_DATA);			Msg.AddInt(Last);			Msg.AddInt(m_CurrentMapCrc);			Msg.AddInt(Chunk);			Msg.AddInt(ChunkSize);			Msg.AddRaw(&m_pCurrentMapData[Offset], ChunkSize);			SendMsgEx(&Msg, MSGFLAG_VITAL|MSGFLAG_FLUSH, ClientID, true);			if(g_Config.m_Debug)			{				char aBuf[256];				str_format(aBuf, sizeof(aBuf), "sending chunk %d with size %d", Chunk, ChunkSize);				Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "server", aBuf);			}		}		else if(Msg == NETMSG_READY)		{			if(m_aClients[ClientID].m_State == CClient::STATE_CONNECTING)			{				Addr = m_NetServer.ClientAddr(ClientID);				char aAddrStr[NETADDR_MAXSTRSIZE];				net_addr_str(&Addr, aAddrStr, sizeof(aAddrStr));				char aBuf[256];				str_format(aBuf, sizeof(aBuf), "player is ready. ClientID=%x addr=%s", ClientID, aAddrStr);				Console()->Print(IConsole::OUTPUT_LEVEL_ADDINFO, "server", aBuf);				m_aClients[ClientID].m_State = CClient::STATE_READY;				GameServer()->OnClientConnected(ClientID);				SendConnectionReady(ClientID);			}		}		else if(Msg == NETMSG_ENTERGAME)		{//.........这里部分代码省略.........
开发者ID:vanyagod,项目名称:FNG-Sam-za-seb9,代码行数:101,


示例2: GetPos

void CProjectile::Tick(){	float Pt = (Server()->Tick()-m_StartTick-1)/(float)Server()->TickSpeed();	float Ct = (Server()->Tick()-m_StartTick)/(float)Server()->TickSpeed();	vec2 PrevPos = GetPos(Pt);	vec2 CurPos = GetPos(Ct);	int Collide = GameServer()->Collision()->IntersectLine(PrevPos, CurPos, &CurPos, 0);	CCharacter *OwnerChar = GameServer()->GetPlayerChar(m_Owner);	CCharacter *TargetChr = GameServer()->m_World.IntersectCharacter(PrevPos, CurPos, 6.0f, CurPos, OwnerChar);	m_LifeSpan--;	if(TargetChr || Collide || m_LifeSpan < 0 || GameLayerClipped(CurPos))	{        int EventID = GameServer()->m_pLua->m_pEventListener->CreateEventStack();        GameServer()->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(m_Owner);        GameServer()->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(m_Weapon);        GameServer()->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(CurPos.x);        GameServer()->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(CurPos.y);        GameServer()->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(m_StartTick);        GameServer()->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(m_Direction.x);        GameServer()->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(m_Direction.y);        if (TargetChr)            GameServer()->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(TargetChr->GetPlayer()->GetCID());        else            GameServer()->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(-1);        GameServer()->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(Collide);        GameServer()->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(m_ID);        GameServer()->m_pLua->m_pEventListener->OnEvent("OnProjectileDestroy");        if (GameServer()->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[0].IsNumeric() && GameServer()->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[0].GetInteger() == 1)            return;		if(m_LifeSpan >= 0 || m_Weapon == WEAPON_GRENADE)			GameServer()->CreateSound(CurPos, m_SoundImpact);		if(m_Explosive && GameServer()->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[1].GetInteger() == 0)			GameServer()->CreateExplosion(CurPos, m_Owner, m_Weapon, false);		else if(TargetChr)			TargetChr->TakeDamage(m_Direction * max(0.001f, m_Force), m_Damage, m_Owner, m_Weapon);		GameServer()->m_World.DestroyEntity(this);	}}
开发者ID:BugsBunny1605,项目名称:N-Client,代码行数:46,


示例3: CHAR

void CGameControllerOpenFNG::HandleSacr(int Killer, int Victim, int ShrineTeam){//assertion: Killer >= 0, victim anyways	CCharacter *pVictim = CHAR(Victim);	if (!pVictim) //due to HandleFreeze, i suspect this COULD also possibly happen. 	{		D("no pVictim in HandleSacr(%d, %d, %d)", Killer, Victim, ShrineTeam);		return;	}	int FailTeam = pVictim->GetPlayer()->GetTeam();	bool Wrong = ShrineTeam != -1 && FailTeam == ShrineTeam;	m_aTeamscore[1-FailTeam] += Wrong?CFG(WrongSacrTeamscore):(ShrineTeam == -1 ? CFG(SacrTeamscore) : CFG(RightSacrTeamscore));	if (!Wrong)	{		if (CFG(SacrSound) == 1)			GameServer()->CreateSoundGlobal(SOUND_CTF_CAPTURE);		else if (CFG(SacrSound) == 2)			GameServer()->CreateSound(pVictim->m_Pos, SOUND_CTF_CAPTURE);	}	if (((Wrong && CFG(WrongSacrTeamscore)) || (!Wrong && (ShrineTeam == -1 ? CFG(SacrTeamscore) : CFG(RightSacrTeamscore)))) && CFG(SacrBroadcast))	{		char aBuf[64];		str_format(aBuf, sizeof aBuf, "%s sacrificed%s (%+d)", GetTeamName(1-FailTeam), Wrong?" in wrong shrine":(ShrineTeam == -1 ? "" : ", pleasing their gods"),		                                                                           Wrong?CFG(WrongSacrTeamscore):(ShrineTeam == -1 ? CFG(SacrTeamscore):CFG(RightSacrTeamscore)));		m_Broadcast.Update(-1, aBuf, CFG(BroadcastTime) * TS);	}	CPlayer *pPlKiller = TPLAYER(Killer);	CPlayer *pPlVictim = TPLAYER(Victim);	if (!pPlKiller || !pVictim)		return;	pPlKiller->m_Score += Wrong ? CFG(WrongSacrScore)	                            : (ShrineTeam == -1 ? CFG(SacrScore)	                                                : CFG(RightSacrScore));	pPlVictim->m_Score += Wrong ? CFG(WrongSacrScoreVic)	                            : (ShrineTeam == -1 ? CFG(SacrScoreVic)	                                                : CFG(RightSacrScoreVic));	SendFreezeKill(Killer, Victim, WEAPON_NINJA);	if (Wrong && pPlKiller->GetCharacter() && CFG(PunishWrongSacr))	{		pPlKiller->GetCharacter()->Freeze(CFG(PunishWrongSacr) * TS);		GS->CreateSound(pPlKiller->GetCharacter()->m_Pos, SOUND_PLAYER_PAIN_LONG);		GS->SendChatTarget(pPlKiller->GetCID(), "The gods are not pleased with this sacrifice!");	}	if (!Wrong && pPlKiller->GetCharacter())		pPlKiller->GetCharacter()->SetEmote(EMOTE_HAPPY, TICK + TS * 2);	if (pPlKiller->GetCharacter() && CFG(SacrLoltext) && ((!Wrong && CFG(SacrScore)) || (Wrong && CFG(WrongSacrScore))))	{		char aBuf[64];		str_format(aBuf, sizeof aBuf, "%+d", Wrong?CFG(WrongSacrScore):(ShrineTeam == -1 ? CFG(SacrScore) : CFG(RightSacrScore)));		GS->CreateLolText(pPlKiller->GetCharacter(), false, vec2(0.f, -50.f), vec2(0.f, 0.f), 50, aBuf);	}	if(!Wrong && pPlKiller->GetCharacter())		GameServer()->GetPlayerChar(Killer)->AddSpree();}
开发者ID:FallenKN,项目名称:openfng,代码行数:67,


示例4: frandom

int CGameControllerMOD::ChooseInfectedClass(CPlayer* pPlayer){	float random = frandom();	float TotalProbInfectedClass = m_TotalProbInfectedClass;		//Get information about existing infected	int nbInfected = 0;	bool thereIsAWitch = false;	bool thereIsAnUndead = false;	for(int i = 0; i < MAX_CLIENTS; i++)	{		CPlayer *pPlayer = GameServer()->m_apPlayers[i];				if(!pPlayer) continue;		if(pPlayer->GetTeam() == TEAM_SPECTATORS) continue;				if(pPlayer->IsInfected()) nbInfected++;		if(pPlayer->GetClass() == PLAYERCLASS_WITCH) thereIsAWitch = true;		if(pPlayer->GetClass() == PLAYERCLASS_UNDEAD) thereIsAnUndead = true;	}		//Check if hunters are enabled	bool hunterEnabled = true;	if(Server()->GetClassAvailability(PLAYERCLASS_HUNTER) == 0)	{		TotalProbInfectedClass -= m_ClassProbability[PLAYERCLASS_HUNTER];		hunterEnabled = false;	}		//Check if ghost are enabled	bool ghostEnabled = true;	if(Server()->GetClassAvailability(PLAYERCLASS_GHOST) == 0)	{		TotalProbInfectedClass -= m_ClassProbability[PLAYERCLASS_GHOST];		ghostEnabled = false;	}		//Check if spider are enabled	bool spiderEnabled = true;	if(Server()->GetClassAvailability(PLAYERCLASS_SPIDER) == 0)	{		TotalProbInfectedClass -= m_ClassProbability[PLAYERCLASS_SPIDER];		spiderEnabled = false;	}		//Check if boomers are enabled	bool boomerEnabled = true;	if(Server()->GetClassAvailability(PLAYERCLASS_BOOMER) == 0)	{		TotalProbInfectedClass -= m_ClassProbability[PLAYERCLASS_BOOMER];		boomerEnabled = false;	}		//Check if undeads are enabled	bool undeadEnabled = true;	if(nbInfected < 2 || thereIsAnUndead || (Server()->GetClassAvailability(PLAYERCLASS_UNDEAD) == 0) || !pPlayer->m_WasHumanThisRound)	{		TotalProbInfectedClass -= m_ClassProbability[PLAYERCLASS_UNDEAD];		undeadEnabled = false;	}		//Check if witches are enabled	bool witchEnabled = true;	if(nbInfected < 2 || thereIsAWitch || (Server()->GetClassAvailability(PLAYERCLASS_WITCH) == 0) || !pPlayer->m_WasHumanThisRound)	{		TotalProbInfectedClass -= m_ClassProbability[PLAYERCLASS_WITCH];		witchEnabled = false;	}		random *= TotalProbInfectedClass;		//Find the random class	if(undeadEnabled)	{		random -= m_ClassProbability[PLAYERCLASS_UNDEAD];		if(random < 0.0f)		{			GameServer()->SendBroadcast_Language(-1, "The undead is coming!");			GameServer()->CreateSoundGlobal(SOUND_CTF_CAPTURE);			return PLAYERCLASS_UNDEAD;		}	}		if(witchEnabled)	{		random -= m_ClassProbability[PLAYERCLASS_WITCH];		if(random < 0.0f)		{			GameServer()->SendBroadcast_Language(-1, "The witch is coming!");			GameServer()->CreateSoundGlobal(SOUND_CTF_CAPTURE);			return PLAYERCLASS_WITCH;		}	}		if(boomerEnabled)	{		random -= m_ClassProbability[PLAYERCLASS_BOOMER];		if(random < 0.0f)		{			return PLAYERCLASS_BOOMER;//.........这里部分代码省略.........
开发者ID:KingteEGER,项目名称:teeworlds-infclass,代码行数:101,


示例5: GameServer

void CMercenaryBomb::Reset(){	GameServer()->m_World.DestroyEntity(this);}
开发者ID:necropotame,项目名称:teeworlds-infclass,代码行数:4,


示例6: GameServer

void CGameControllerMOD::Tick(){	IGameController::Tick();		m_HumanCounter = 0;	m_InfectedCounter = 0;		//Count type of players	for(int i = 0; i < MAX_CLIENTS; i ++)	{		CPlayer *pPlayer = GameServer()->m_apPlayers[i];				if(!pPlayer) continue;		if(pPlayer->GetTeam() == TEAM_SPECTATORS) continue;				if(pPlayer->IsInfected()) m_InfectedCounter++;		else m_HumanCounter++;	}		m_InfectedStarted = false;		//If the game can start ...	if(m_GameOverTick == -1 && m_HumanCounter + m_InfectedCounter >= 2)	{		//If the infection started		if(m_RoundStartTick + Server()->TickSpeed()*10 < Server()->Tick())		{				m_InfectedStarted = true;				for(int i = 0; i < MAX_CLIENTS; i ++)			{				CPlayer *pPlayer = GameServer()->m_apPlayers[i];								if(!pPlayer) continue;				if(pPlayer->GetTeam() == TEAM_SPECTATORS)				{					pPlayer->StartInfection();				}				else if(pPlayer->GetClass() == PLAYERCLASS_NONE)				{					pPlayer->SetClass(ChooseHumanClass(pPlayer));					if(pPlayer->GetCharacter())						pPlayer->GetCharacter()->IncreaseArmor(10);				}			}						//If needed, infect players			int nbInfectedNeeded = 2;			if(m_InfectedCounter + m_HumanCounter < 4)			{				nbInfectedNeeded = 1;			}						while(m_InfectedCounter < nbInfectedNeeded)			{				float InfectionProb = 1.0/static_cast<float>(m_HumanCounter);				float random = frandom();								//Fair infection				bool FairInfectionFound = false;				for(int i = 0; i < MAX_CLIENTS; i ++)				{					CPlayer *pPlayer = GameServer()->m_apPlayers[i];										if(!pPlayer) continue;					if(pPlayer->GetTeam() == TEAM_SPECTATORS) continue;					if(pPlayer->IsInfected()) continue;										if(!Server()->IsClientInfectedBefore(i))					{						Server()->InfecteClient(i);						GameServer()->m_apPlayers[i]->StartInfection();						m_InfectedCounter++;						m_HumanCounter--;												GameServer()->SendChatTarget_Language_s(-1, "%s has been infected", Server()->ClientName(i));						FairInfectionFound = true;						break;					}				}								//Unfair infection				if(!FairInfectionFound)				{					for(int i = 0; i < MAX_CLIENTS; i ++)					{						CPlayer *pPlayer = GameServer()->m_apPlayers[i];												if(!pPlayer) continue;						if(pPlayer->GetTeam() == TEAM_SPECTATORS) continue;						if(pPlayer->IsInfected()) continue;												if(random < InfectionProb)						{							Server()->InfecteClient(i);							GameServer()->m_apPlayers[i]->StartInfection();							m_InfectedCounter++;							m_HumanCounter--;														GameServer()->SendChatTarget_Language_s(-1, "%s has been infected", Server()->ClientName(i));//.........这里部分代码省略.........
开发者ID:KingteEGER,项目名称:teeworlds-infclass,代码行数:101,


示例7: Server

void CPlayer::Tick(){	if(!IsDummy() && !Server()->ClientIngame(m_ClientID))		return;	Server()->SetClientScore(m_ClientID, m_Score);	// do latency stuff	{		IServer::CClientInfo Info;		if(Server()->GetClientInfo(m_ClientID, &Info))		{			m_Latency.m_Accum += Info.m_Latency;			m_Latency.m_AccumMax = max(m_Latency.m_AccumMax, Info.m_Latency);			m_Latency.m_AccumMin = min(m_Latency.m_AccumMin, Info.m_Latency);		}		// each second		if(Server()->Tick()%Server()->TickSpeed() == 0)		{			m_Latency.m_Avg = m_Latency.m_Accum/Server()->TickSpeed();			m_Latency.m_Max = m_Latency.m_AccumMax;			m_Latency.m_Min = m_Latency.m_AccumMin;			m_Latency.m_Accum = 0;			m_Latency.m_AccumMin = 1000;			m_Latency.m_AccumMax = 0;		}	}	if(m_pCharacter && !m_pCharacter->IsAlive())	{		delete m_pCharacter;		m_pCharacter = 0;	}	if(!GameServer()->m_pController->IsGamePaused())	{		if(!m_pCharacter && m_Team == TEAM_SPECTATORS && m_SpectatorID == SPEC_FREEVIEW)			m_ViewPos -= vec2(clamp(m_ViewPos.x-m_LatestActivity.m_TargetX, -500.0f, 500.0f), clamp(m_ViewPos.y-m_LatestActivity.m_TargetY, -400.0f, 400.0f));		if(!m_pCharacter && m_DieTick+Server()->TickSpeed()*3 <= Server()->Tick() && !m_DeadSpecMode)			Respawn();		if(m_pCharacter)		{			if(m_pCharacter->IsAlive())				m_ViewPos = m_pCharacter->m_Pos;		}		else if(m_Spawning && m_RespawnTick <= Server()->Tick())			TryRespawn();		if(!m_DeadSpecMode && m_LastActionTick != Server()->Tick())			++m_InactivityTickCounter;	}	else	{		++m_RespawnTick;		++m_DieTick;		++m_ScoreStartTick;		++m_LastActionTick;		++m_TeamChangeTick; 	}}
开发者ID:KingteEGER,项目名称:teeworlds,代码行数:62,


示例8: GameServer

void CPickup::Tick(){	// wait for respawn	if(m_SpawnTick > 0)	{		if(Server()->Tick() > m_SpawnTick)		{			// respawn			m_SpawnTick = -1;			if(m_Type == POWERUP_WEAPON)				GameServer()->CreateSound(m_Pos, SOUND_WEAPON_SPAWN);		}		else			return;	}	// Check if a player intersected us	CCharacter *pChr = GameServer()->m_World.ClosestCharacter(m_Pos, 20.0f, 0);	if(pChr && pChr->IsAlive())	{		// player picked us up, is someone was hooking us, let them go		int RespawnTime = -1;		switch (m_Type)		{			case POWERUP_HEALTH:				if(pChr->IncreaseHealth(1))				{					GameServer()->CreateSound(m_Pos, SOUND_PICKUP_HEALTH);					RespawnTime = g_pData->m_aPickups[m_Type].m_Respawntime;				}				break;							case POWERUP_ARMOR:				if(pChr->IncreaseArmor(1))				{					GameServer()->CreateSound(m_Pos, SOUND_PICKUP_ARMOR);					RespawnTime = g_pData->m_aPickups[m_Type].m_Respawntime;				}				break;			case POWERUP_WEAPON:				if(m_Subtype >= 0 && m_Subtype < NUM_WEAPONS)				{					if(pChr->GiveWeapon(m_Subtype, 10))					{						RespawnTime = g_pData->m_aPickups[m_Type].m_Respawntime;						if(m_Subtype == WEAPON_GRENADE)							GameServer()->CreateSound(m_Pos, SOUND_PICKUP_GRENADE);						else if(m_Subtype == WEAPON_SHOTGUN)							GameServer()->CreateSound(m_Pos, SOUND_PICKUP_SHOTGUN);						else if(m_Subtype == WEAPON_RIFLE)							GameServer()->CreateSound(m_Pos, SOUND_PICKUP_SHOTGUN);						if(pChr->GetPlayer())							GameServer()->SendWeaponPickup(pChr->GetPlayer()->GetCID(), m_Subtype);					}				}				break;							case POWERUP_NINJA:				{					// activate ninja on target player					pChr->GiveNinja();					RespawnTime = g_pData->m_aPickups[m_Type].m_Respawntime;					// loop through all players, setting their emotes					CEntity *apEnts[64];					int Num = GameServer()->m_World.FindEntities(vec2(0, 0), 1000000, apEnts, 64, NETOBJTYPE_CHARACTER);										for (int i = 0; i < Num; ++i)					{						CCharacter *pC = static_cast<CCharacter *>(apEnts[i]);						if (pC != pChr)							pC->SetEmote(EMOTE_SURPRISE, Server()->Tick() + Server()->TickSpeed());					}					pChr->SetEmote(EMOTE_ANGRY, Server()->Tick() + 1200 * Server()->TickSpeed() / 1000);					break;				}							default:				break;		};		if(RespawnTime >= 0)		{			dbg_msg("game", "pickup player='%d:%s' item=%d/%d",				pChr->GetPlayer()->GetCID(), Server()->ClientName(pChr->GetPlayer()->GetCID()), m_Type, m_Subtype);			m_SpawnTick = Server()->Tick() + Server()->TickSpeed() * RespawnTime;		}	}}
开发者ID:Danyl12,项目名称:teeworlds,代码行数:93,


示例9: mem_zero

void CDragger::Move(){	if (m_Target && (!m_Target->IsAlive() || (m_Target->IsAlive()			&& (m_Target->m_Super || m_Target->IsPaused()					|| (m_Layer == LAYER_SWITCH && m_Number							&& !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[m_Target->Team()])))))		m_Target = 0;	mem_zero(m_SoloEnts, sizeof(m_SoloEnts));	CCharacter *TempEnts[MAX_CLIENTS];	int Num = GameServer()->m_World.FindEntities(m_Pos, g_Config.m_SvDraggerRange,			(CEntity**) m_SoloEnts, MAX_CLIENTS, CGameWorld::ENTTYPE_CHARACTER);	mem_copy(TempEnts, m_SoloEnts, sizeof(TempEnts));	int Id = -1;	int MinLen = 0;	CCharacter *Temp;	for (int i = 0; i < Num; i++)	{		Temp = m_SoloEnts[i];		if (Temp->Team() != m_CaughtTeam)		{			m_SoloEnts[i] = 0;			continue;		}		if (m_Layer == LAYER_SWITCH && m_Number				&& !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[Temp->Team()])		{			m_SoloEnts[i] = 0;			continue;		}		int Res =				m_NW ? GameServer()->Collision()->IntersectNoLaserNW(m_Pos,								Temp->m_Pos, 0, 0) :						GameServer()->Collision()->IntersectNoLaser(m_Pos,								Temp->m_Pos, 0, 0);		if (Res == 0)		{			int Len = length(Temp->m_Pos - m_Pos);			if (MinLen == 0 || MinLen > Len)			{				MinLen = Len;				Id = i;			}			if (!Temp->Teams()->m_Core.GetSolo(Temp->GetPlayer()->GetCID()))				m_SoloEnts[i] = 0;		}		else		{			m_SoloEnts[i] = 0;		}	}	if (!m_Target)		m_Target = Id != -1 ? TempEnts[Id] : 0;	if (m_Target)	{		for (int i = 0; i < MAX_CLIENTS; i++)		{			if (m_SoloEnts[i] == m_Target)				m_SoloEnts[i] = 0;		}	}}
开发者ID:BannZay,项目名称:ddnet,代码行数:68,


示例10: GameServer

void CDragger::Drag(){	if (m_Target)	{		CCharacter *Target = m_Target;		for (int i = -1; i < MAX_CLIENTS; i++)		{			if (i >= 0)				Target = m_SoloEnts[i];			if (!Target)				continue;			int Res = 0;			if (!m_NW)				Res = GameServer()->Collision()->IntersectNoLaser(m_Pos,						Target->m_Pos, 0, 0);			else				Res = GameServer()->Collision()->IntersectNoLaserNW(m_Pos,						Target->m_Pos, 0, 0);			if (Res || length(m_Pos - Target->m_Pos) > g_Config.m_SvDraggerRange)			{				Target = 0;				if (i == -1)					m_Target = 0;				else					m_SoloEnts[i] = 0;			}			else if (length(m_Pos - Target->m_Pos) > 28)			{				vec2 Temp = Target->Core()->m_Vel						+ (normalize(m_Pos - Target->m_Pos) * m_Strength);				if (Temp.x > 0						&& ((Target->m_TileIndex == TILE_STOP								&& Target->m_TileFlags == ROTATION_270)								|| (Target->m_TileIndexL == TILE_STOP										&& Target->m_TileFlagsL == ROTATION_270)								|| (Target->m_TileIndexL == TILE_STOPS										&& (Target->m_TileFlagsL == ROTATION_90												|| Target->m_TileFlagsL														== ROTATION_270))								|| (Target->m_TileIndexL == TILE_STOPA)								|| (Target->m_TileFIndex == TILE_STOP										&& Target->m_TileFFlags == ROTATION_270)								|| (Target->m_TileFIndexL == TILE_STOP										&& Target->m_TileFFlagsL == ROTATION_270)								|| (Target->m_TileFIndexL == TILE_STOPS										&& (Target->m_TileFFlagsL == ROTATION_90												|| Target->m_TileFFlagsL														== ROTATION_270))								|| (Target->m_TileFIndexL == TILE_STOPA)								|| (Target->m_TileSIndex == TILE_STOP										&& Target->m_TileSFlags == ROTATION_270)								|| (Target->m_TileSIndexL == TILE_STOP										&& Target->m_TileSFlagsL == ROTATION_270)								|| (Target->m_TileSIndexL == TILE_STOPS										&& (Target->m_TileSFlagsL == ROTATION_90												|| Target->m_TileSFlagsL														== ROTATION_270))								|| (Target->m_TileSIndexL == TILE_STOPA)))					Temp.x = 0;				if (Temp.x < 0						&& ((Target->m_TileIndex == TILE_STOP								&& Target->m_TileFlags == ROTATION_90)								|| (Target->m_TileIndexR == TILE_STOP										&& Target->m_TileFlagsR == ROTATION_90)								|| (Target->m_TileIndexR == TILE_STOPS										&& (Target->m_TileFlagsR == ROTATION_90												|| Target->m_TileFlagsR														== ROTATION_270))								|| (Target->m_TileIndexR == TILE_STOPA)								|| (Target->m_TileFIndex == TILE_STOP										&& Target->m_TileFFlags == ROTATION_90)								|| (Target->m_TileFIndexR == TILE_STOP										&& Target->m_TileFFlagsR == ROTATION_90)								|| (Target->m_TileFIndexR == TILE_STOPS										&& (Target->m_TileFFlagsR == ROTATION_90												|| Target->m_TileFFlagsR														== ROTATION_270))								|| (Target->m_TileFIndexR == TILE_STOPA)								|| (Target->m_TileSIndex == TILE_STOP										&& Target->m_TileSFlags == ROTATION_90)								|| (Target->m_TileSIndexR == TILE_STOP										&& Target->m_TileSFlagsR == ROTATION_90)								|| (Target->m_TileSIndexR == TILE_STOPS										&& (Target->m_TileSFlagsR == ROTATION_90												|| Target->m_TileSFlagsR														== ROTATION_270))								|| (Target->m_TileSIndexR == TILE_STOPA)))					Temp.x = 0;				if (Temp.y < 0						&& ((Target->m_TileIndex == TILE_STOP								&& Target->m_TileFlags == ROTATION_180)								|| (Target->m_TileIndexB == TILE_STOP										&& Target->m_TileFlagsB == ROTATION_180)								|| (Target->m_TileIndexB == TILE_STOPS										&& (Target->m_TileFlagsB == ROTATION_0												|| Target->m_TileFlagsB														== ROTATION_180))//.........这里部分代码省略.........
开发者ID:BannZay,项目名称:ddnet,代码行数:101,


示例11: Server

void CDragger::Snap(int SnappingClient){	if (((CGameControllerDDRace*) GameServer()->m_pController)->m_Teams.GetTeamState(			m_CaughtTeam) == CGameTeams::TEAMSTATE_EMPTY)		return;	CCharacter *Target = m_Target;	for (int i = 0; i < MAX_CLIENTS; i++)	{		if (m_SoloIDs[i] == -1)			break;		Server()->SnapFreeID(m_SoloIDs[i]);		m_SoloIDs[i] = -1;	}	int pos = 0;	for (int i = -1; i < MAX_CLIENTS; i++)	{		if (i >= 0)		{			Target = m_SoloEnts[i];			if (!Target)				continue;		}		if (Target)		{			if (NetworkClipped(SnappingClient, m_Pos)					&& NetworkClipped(SnappingClient, Target->m_Pos))				continue;		}		else if (NetworkClipped(SnappingClient, m_Pos))			continue;		CCharacter * Char = GameServer()->GetPlayerChar(SnappingClient);		if(SnappingClient > -1 && (GameServer()->m_apPlayers[SnappingClient]->GetTeam() == -1					|| GameServer()->m_apPlayers[SnappingClient]->IsPaused())				&& GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID != SPEC_FREEVIEW)			Char = GameServer()->GetPlayerChar(GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID);		int Tick = (Server()->Tick() % Server()->TickSpeed()) % 11;		if (Char && Char->IsAlive()				&& (m_Layer == LAYER_SWITCH && m_Number						&& !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[Char->Team()]						&& (!Tick)))			continue;		if (Char && Char->IsAlive())		{			if (Char->Team() != m_CaughtTeam)				continue;		}		else		{			// send to spectators only active draggers and some inactive from team 0			if (!((Target && Target->IsAlive()) || m_CaughtTeam == 0))				continue;		}		if (Char && Char->IsAlive() && Target && Target->IsAlive() && Target->GetPlayer()->GetCID() != Char->GetPlayer()->GetCID() && !Char->GetPlayer()->m_ShowOthers &&			(Char->Teams()->m_Core.GetSolo(SnappingClient) || Char->Teams()->m_Core.GetSolo(Target->GetPlayer()->GetCID())))		{			continue;		}		CNetObj_Laser *obj;		if (i == -1)		{			obj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(					NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser)));		}		else		{			m_SoloIDs[pos] = Server()->SnapNewID();			obj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem( // TODO: Have to free IDs again?					NETOBJTYPE_LASER, m_SoloIDs[pos], sizeof(CNetObj_Laser)));			pos++;		}		if (!obj)			continue;		obj->m_X = (int)m_Pos.x;		obj->m_Y = (int)m_Pos.y;		if (Target)		{			obj->m_FromX = (int)Target->m_Pos.x;			obj->m_FromY = (int)Target->m_Pos.y;		}		else		{			obj->m_FromX = (int)m_Pos.x;			obj->m_FromY = (int)m_Pos.y;		}		int StartTick = m_EvalTick;//.........这里部分代码省略.........
开发者ID:BannZay,项目名称:ddnet,代码行数:101,


示例12: DirtyVisibility

void CDigitanksEntity::Think(){	BaseClass::Think();	if (m_flNextDirtyOrigin > 0 && GameServer()->GetGameTime() > m_flNextDirtyOrigin)	{		DirtyVisibility();		m_flNextDirtyOrigin = 0;	}	if (m_flNextDirtyArea > 0 && GameServer()->GetGameTime() > m_flNextDirtyArea)	{		CDigitanksEntity* pOther = this;		while (true)		{			pOther = CBaseEntity::FindClosest<CDigitanksEntity>(GetGlobalOrigin(), pOther);			if (!pOther)				break;			if (pOther == this)				continue;			if (pOther->Distance(GetGlobalOrigin()) > VisibleRange() + DigitanksGame()->FogPenetrationDistance())				break;			pOther->DirtyVisibility();		}		m_flNextDirtyArea = 0;	}	if (GameNetwork()->IsHost() && !IsAlive() && GameServer()->GetGameTime() > m_flTimeKilled + 1.0f)	{		GameServer()->Delete(this);		if (DigitanksGame()->GetTerrain()->IsPointOverHole(GetGlobalOrigin()))		{			CWreckage* pWreckage = CreateWreckage();			if (pWreckage)			{				pWreckage->FellIntoHole();				if (DigitanksGame()->GetGameType() == GAMETYPE_ARTILLERY)					pWreckage->SetScale(2);			}		}		else if (DigitanksGame()->GetGameType() == GAMETYPE_ARTILLERY)		{			switch (RandomInt(0, 8))			{			case 0:			case 6:			case 7:			case 8:			default:			{				for (size_t i = 0; i < 8; i++)				{					CDebris* pDebris = GameServer()->Create<CDebris>("CDebris");					pDebris->SetGlobalOrigin(GetGlobalOrigin());				}				CWreckage* pWreckage = CreateWreckage();				pWreckage->SetScale(2);				DigitanksGame()->GetOverheadCamera()->Shake(GetGlobalOrigin(), 3);				break;			}			case 1:			{				CProjectile* pProjectile = GameServer()->Create<CLargeShell>("CLargeShell");				pProjectile->SetOwner(NULL);				pProjectile->SetGlobalOrigin(GetGlobalOrigin());				pProjectile->Explode();				break;			}			case 2:			{				CProjectile* pProjectile = GameServer()->Create<CAOEShell>("CAOEShell");				pProjectile->SetOwner(NULL);				pProjectile->SetGlobalOrigin(GetGlobalOrigin());				pProjectile->Explode();				break;			}			case 3:			{				CProjectile* pProjectile = GameServer()->Create<CClusterBomb>("CClusterBomb");				pProjectile->SetOwner(NULL);				pProjectile->SetGlobalOrigin(GetGlobalOrigin());				pProjectile->Explode();				break;			}			case 4://.........这里部分代码省略.........
开发者ID:BSVino,项目名称:Digitanks,代码行数:101,


示例13: c

void CDigitanksEntity::OnRender(CGameRenderingContext* pContext) const{	BaseClass::OnRender(pContext);	if (GameServer()->GetRenderer()->IsRenderingTransparent() && IsImprisoned())	{		CGameRenderingContext c(GameServer()->GetRenderer(), true);		c.SetBackCulling(false);		c.SetBlend(BLEND_ADDITIVE);		c.Scale(GetBoundingRadius(), GetBoundingRadius(), GetBoundingRadius());		c.Rotate((float)GameServer()->GetGameTime() * 90, Vector(0, 0, 1));		float flVisibility = GetVisibility() * 0.6f;		c.UseProgram("scroll");		c.SetUniform("iTexture", 0);		c.SetUniform("flAlpha", flVisibility);		c.SetUniform("flTime", (float)-GameServer()->GetGameTime());		c.SetUniform("flSpeed", 1.0f);		c.RenderModel(m_iCageModel, this);	}	if (GameServer()->GetRenderer()->IsRenderingTransparent() && IsImprisoned())	{		CGameRenderingContext c(GameServer()->GetRenderer(), true);		c.SetBackCulling(false);		c.SetBlend(BLEND_ADDITIVE);		c.Scale(GetBoundingRadius()+1, GetBoundingRadius()+1, GetBoundingRadius()+1);		c.Rotate(-(float)GameServer()->GetGameTime() * 90, Vector(0, 0, 1));		float flVisibility = GetVisibility() * 0.6f;		c.UseProgram("scroll");		c.SetUniform("iTexture", 0);		c.SetUniform("flAlpha", flVisibility);		c.SetUniform("flTime", (float)-GameServer()->GetGameTime());		c.SetUniform("flSpeed", 1.0f);		c.RenderModel(m_iCageModel);	}	if (!GameServer()->GetRenderer()->IsRenderingTransparent())		return;	if (!DigitanksGame()->GetTerrain()->GetBit(CTerrain::WorldToArraySpace(GetGlobalOrigin().x), CTerrain::WorldToArraySpace(GetGlobalOrigin().y), TB_TREE))		return;	if (GetVisibility() < 0.6f)		return;	CGameRenderingContext c(GameServer()->GetRenderer(), true);	c.SetBlend(BLEND_NONE);	c.SetAlpha(1);	c.BindTexture(0);	TStubbed("Tank outlines in trees");	/*	// Draw outlines of objects in trees.	glPushAttrib( GL_ALL_ATTRIB_BITS );	glDisable( GL_TEXTURE_2D );	glEnable( GL_POLYGON_OFFSET_FILL );	glPolygonOffset( -3.5f, -3.5f );	glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);	glDepthMask(true);	glEnable(GL_DEPTH_TEST);	pContext->RenderModel(GetModel());	glDisable( GL_POLYGON_OFFSET_FILL );	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);	glDepthMask(false);	glEnable(GL_DEPTH_TEST);	glLineWidth( 2.0f );	glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );	glColor3ubv( Color(0, 0, 0) );	pContext->RenderModel(GetModel());	glPopAttrib();	*/}
开发者ID:BSVino,项目名称:Digitanks,代码行数:81,


示例14: GameServer

void CCharacter::Destroy(){	GameServer()->m_World.m_Core.m_apCharacters[m_pPlayer->GetCID()] = 0;	m_Alive = false;}
开发者ID:CoolerMAN,项目名称:tdtw,代码行数:5,


示例15: GameServer

void CLaser::Reset(){	GameServer()->m_World.DestroyEntity(this);}
开发者ID:Bloodwork28,项目名称:teeworlds-uTown,代码行数:4,


示例16: IGameController

CGameControllerMOD::CGameControllerMOD(class CGameContext *pGameServer): IGameController(pGameServer){	m_pGameType = "InfClass";	srand (time(0));		m_TotalProbInfectedClass = 0.0;		m_ClassProbability[PLAYERCLASS_SMOKER] = 1.0f;	m_TotalProbInfectedClass += m_ClassProbability[PLAYERCLASS_SMOKER];		m_ClassProbability[PLAYERCLASS_HUNTER] = 0.6666f * m_ClassProbability[PLAYERCLASS_SMOKER];	m_TotalProbInfectedClass += m_ClassProbability[PLAYERCLASS_HUNTER];		m_ClassProbability[PLAYERCLASS_BOOMER] = 0.6666f * m_ClassProbability[PLAYERCLASS_SMOKER];	m_TotalProbInfectedClass += m_ClassProbability[PLAYERCLASS_BOOMER];		m_ClassProbability[PLAYERCLASS_GHOST] = 0.25f * m_ClassProbability[PLAYERCLASS_SMOKER];	m_TotalProbInfectedClass += m_ClassProbability[PLAYERCLASS_GHOST];		m_ClassProbability[PLAYERCLASS_SPIDER] = 0.25f * m_ClassProbability[PLAYERCLASS_SMOKER];	m_TotalProbInfectedClass += m_ClassProbability[PLAYERCLASS_SPIDER];		m_ClassProbability[PLAYERCLASS_WITCH] = 0.25f * m_ClassProbability[PLAYERCLASS_SMOKER];	m_TotalProbInfectedClass += m_ClassProbability[PLAYERCLASS_WITCH];		m_ClassProbability[PLAYERCLASS_UNDEAD] = 0.20f * m_ClassProbability[PLAYERCLASS_SMOKER];	m_TotalProbInfectedClass += m_ClassProbability[PLAYERCLASS_UNDEAD];		m_TotalProbHumanClass = 0.0;		m_ClassProbability[PLAYERCLASS_ENGINEER] = 1.0f;	m_TotalProbHumanClass += m_ClassProbability[PLAYERCLASS_ENGINEER];		m_ClassProbability[PLAYERCLASS_SOLDIER] = 1.0f;	m_TotalProbHumanClass += m_ClassProbability[PLAYERCLASS_SOLDIER];		m_ClassProbability[PLAYERCLASS_MERCENARY] = 1.0f;	m_TotalProbHumanClass += m_ClassProbability[PLAYERCLASS_MERCENARY];		m_ClassProbability[PLAYERCLASS_SNIPER] = 1.0f;	m_TotalProbHumanClass += m_ClassProbability[PLAYERCLASS_SNIPER];		m_ClassProbability[PLAYERCLASS_SCIENTIST] = 0.5f;	m_TotalProbHumanClass += m_ClassProbability[PLAYERCLASS_SCIENTIST];		m_ClassProbability[PLAYERCLASS_NINJA] = 0.5f;	m_TotalProbHumanClass += m_ClassProbability[PLAYERCLASS_NINJA];		m_ClassProbability[PLAYERCLASS_MEDIC] = 0.5f;	m_TotalProbHumanClass += m_ClassProbability[PLAYERCLASS_MEDIC];		m_GrowingMap = 0;		m_ExplosionStarted = false;	m_MapWidth = GameServer()->Collision()->GetWidth();	m_MapHeight = GameServer()->Collision()->GetHeight();	m_GrowingMap = new int[m_MapWidth*m_MapHeight];		m_HumanCounter = 0;	m_InfectedCounter = 0;	m_InfectedStarted = false;		for(int j=0; j<m_MapHeight; j++)	{		for(int i=0; i<m_MapWidth; i++)		{			vec2 TilePos = vec2(16.0f, 16.0f) + vec2(i*32.0f, j*32.0f);			if(GameServer()->Collision()->CheckPoint(TilePos))			{				m_GrowingMap[j*m_MapWidth+i] = 4;			}			else			{				m_GrowingMap[j*m_MapWidth+i] = 1;			}		}	}}
开发者ID:KingteEGER,项目名称:teeworlds-infclass,代码行数:79,


示例17: Tick

void CLaser::Tick(){	if(Server()->Tick() > m_EvalTick+(Server()->TickSpeed()*GameServer()->Tuning()->m_LaserBounceDelay)/1000.0f)		DoBounce();}
开发者ID:Bloodwork28,项目名称:teeworlds-uTown,代码行数:5,


示例18: sizeof

void CGameControllerMOD::Snap(int SnappingClient){	CNetObj_GameInfo *pGameInfoObj = (CNetObj_GameInfo *)Server()->SnapNewItem(NETOBJTYPE_GAMEINFO, 0, sizeof(CNetObj_GameInfo));	if(!pGameInfoObj)		return;	pGameInfoObj->m_GameFlags = m_GameFlags;	pGameInfoObj->m_GameStateFlags = 0;	if(m_GameOverTick != -1)		pGameInfoObj->m_GameStateFlags |= GAMESTATEFLAG_GAMEOVER;	if(m_SuddenDeath)		pGameInfoObj->m_GameStateFlags |= GAMESTATEFLAG_SUDDENDEATH;	if(GameServer()->m_World.m_Paused)		pGameInfoObj->m_GameStateFlags |= GAMESTATEFLAG_PAUSED;	pGameInfoObj->m_RoundStartTick = m_RoundStartTick;	pGameInfoObj->m_WarmupTimer = m_Warmup;	pGameInfoObj->m_ScoreLimit = g_Config.m_SvScorelimit;	pGameInfoObj->m_TimeLimit = g_Config.m_SvTimelimit;	pGameInfoObj->m_RoundNum = (str_length(g_Config.m_SvMaprotation) && g_Config.m_SvRoundsPerMap) ? g_Config.m_SvRoundsPerMap : 0;	pGameInfoObj->m_RoundCurrent = m_RoundCount+1;	//Generate class mask	int ClassMask = 0;	{		int Defender = 0;		int Medic = 0;		int Support = 0;				for(int i = 0; i < MAX_CLIENTS; i ++)		{			CPlayer *pPlayer = GameServer()->m_apPlayers[i];						if(!pPlayer) continue;			if(pPlayer->GetTeam() == TEAM_SPECTATORS) continue;						switch(pPlayer->GetClass())			{				case PLAYERCLASS_NINJA:				case PLAYERCLASS_MERCENARY:				case PLAYERCLASS_SNIPER:					Support++;					break;				case PLAYERCLASS_ENGINEER:				case PLAYERCLASS_SOLDIER:				case PLAYERCLASS_SCIENTIST:					Defender++;					break;				case PLAYERCLASS_MEDIC:					Medic++;					break;								}		}				if(Defender < g_Config.m_InfDefenderLimit)			ClassMask |= CMapConverter::MASK_DEFENDER;		if(Medic < g_Config.m_InfMedicLimit)			ClassMask |= CMapConverter::MASK_MEDIC;		if(Support < g_Config.m_InfSupportLimit)			ClassMask |= CMapConverter::MASK_SUPPORT;	}		if(GameServer()->m_apPlayers[SnappingClient] && GameServer()->m_apPlayers[SnappingClient]->m_InClassChooserMenu)	{		int Item = GameServer()->m_apPlayers[SnappingClient]->m_MenuClassChooserItem;		int Timer = ((CMapConverter::TIMESHIFT_MENUCLASS + (Item+1) + ClassMask*CMapConverter::TIMESHIFT_MENUCLASS_MASK)*60 + 30)*Server()->TickSpeed();				pGameInfoObj->m_RoundStartTick = Server()->Tick() - Timer;		pGameInfoObj->m_TimeLimit = 0;	}	CNetObj_GameData *pGameDataObj = (CNetObj_GameData *)Server()->SnapNewItem(NETOBJTYPE_GAMEDATA, 0, sizeof(CNetObj_GameData));	if(!pGameDataObj)		return;	//Search for witch	for(int i = 0; i < MAX_CLIENTS; i++)	{		CPlayer *pPlayer = GameServer()->m_apPlayers[i];				if(!pPlayer) continue;		if(pPlayer->GetTeam() == TEAM_SPECTATORS) continue;				if(pPlayer->GetClass() == PLAYERCLASS_WITCH)		{			pGameDataObj->m_FlagCarrierRed = i;		}	}	pGameDataObj->m_FlagCarrierBlue = FLAG_ATSTAND;}
开发者ID:KingteEGER,项目名称:teeworlds-infclass,代码行数:92,


示例19: normalize

void CCharacter::HandleNinja(){	if(m_ActiveWeapon != WEAPON_NINJA)		return;		vec2 Direction = normalize(vec2(m_LatestInput.m_TargetX, m_LatestInput.m_TargetY));	if ((Server()->Tick() - m_Ninja.m_ActivationTick) > (g_pData->m_Weapons.m_Ninja.m_Duration * Server()->TickSpeed() / 1000))	{		// time's up, return		m_aWeapons[WEAPON_NINJA].m_Got = false;		m_ActiveWeapon = m_LastWeapon;		if(m_ActiveWeapon == WEAPON_NINJA)			m_ActiveWeapon = WEAPON_GUN;					SetWeapon(m_ActiveWeapon);		return;	}		// force ninja Weapon	SetWeapon(WEAPON_NINJA);	m_Ninja.m_CurrentMoveTime--;	if (m_Ninja.m_CurrentMoveTime == 0)	{		// reset velocity		m_Core.m_Vel *= 0.2f;	}	if (m_Ninja.m_CurrentMoveTime > 0)	{		// Set velocity		m_Core.m_Vel = m_Ninja.m_ActivationDir * g_pData->m_Weapons.m_Ninja.m_Velocity;		vec2 OldPos = m_Pos;		GameServer()->Collision()->MoveBox(&m_Core.m_Pos, &m_Core.m_Vel, vec2(m_ProximityRadius, m_ProximityRadius), 0.f);				// reset velocity so the client doesn't predict stuff		m_Core.m_Vel = vec2(0.f, 0.f);		// check if we Hit anything along the way		{			CCharacter *aEnts[MAX_CLIENTS];			vec2 Dir = m_Pos - OldPos;			float Radius = m_ProximityRadius * 2.0f;			vec2 Center = OldPos + Dir * 0.5f;			int Num = GameServer()->m_World.FindEntities(Center, Radius, (CEntity**)aEnts, MAX_CLIENTS, CGameWorld::ENTTYPE_CHARACTER);			for (int i = 0; i < Num; ++i)			{				if (aEnts[i] == this)					continue;									// make sure we haven't Hit this object before				bool bAlreadyHit = false;				for (int j = 0; j < m_NumObjectsHit; j++)				{					if (m_apHitObjects[j] == aEnts[i])						bAlreadyHit = true;				}				if (bAlreadyHit)					continue;				// check so we are sufficiently close				if (distance(aEnts[i]->m_Pos, m_Pos) > (m_ProximityRadius * 2.0f))					continue;				// Hit a player, give him damage and stuffs...				GameServer()->CreateSound(aEnts[i]->m_Pos, SOUND_NINJA_HIT);				// set his velocity to fast upward (for now)				if(m_NumObjectsHit < 10)					m_apHitObjects[m_NumObjectsHit++] = aEnts[i];									aEnts[i]->TakeDamage(vec2(0, 10.0f), g_pData->m_Weapons.m_Ninja.m_pBase->m_Damage, m_pPlayer->GetCID(), WEAPON_NINJA);			}		}				return;	}	return;}
开发者ID:CoolerMAN,项目名称:tdtw,代码行数:82,


示例20: GameServer

void CPickup::Tick(){			// wait for respawn	//if(m_SpawnTick > 0) - 12.5.	if(m_SpawnTick > 0 && !m_Dropable && !m_Flashing)	{		if(Server()->Tick() > m_SpawnTick && !m_SkipAutoRespawn)		{			// respawn			m_SpawnTick = -1;			if(m_Type == POWERUP_WEAPON)				GameServer()->CreateSound(m_Pos, SOUND_WEAPON_SPAWN);		}		else			return;	}		// item drops from enemies	if (m_Dropable)	{		if (m_Life > 0)			m_Life--;		else		{			m_SpawnTick = 999;			return;		}					if (m_Life < 100)			m_Flashing = true;	}		// a small visual effect before pickup disappears	if (m_Flashing)	{		m_FlashTimer--;				if (m_FlashTimer <= 0)			m_FlashTimer = 20;					if (m_FlashTimer > 10)			m_SpawnTick = 999;		else			m_SpawnTick = -1;	}				// physics	if (m_Dropable)	{		m_Vel.y += 0.5f;				bool Grounded = false;		if(GameServer()->Collision()->CheckPoint(m_Pos.x+12, m_Pos.y+12+5))			Grounded = true;		if(GameServer()->Collision()->CheckPoint(m_Pos.x-12, m_Pos.y+12+5))			Grounded = true;				if (Grounded)			m_Vel.x *= 0.8f;		else			m_Vel.x *= 0.99f;				GameServer()->Collision()->MoveBox(&m_Pos, &m_Vel, vec2(24.0f, 24.0f), 0.4f);	}			// Check if a player intersected us	CCharacter *pChr = GameServer()->m_World.ClosestCharacter(m_Pos, 20.0f, 0);	if(pChr && pChr->IsAlive()) // && !pChr->GetPlayer()->m_pAI)	{		// player picked us up, is someone was hooking us, let them go		int RespawnTime = -1;		switch (m_Type)		{			case POWERUP_HEALTH:				if (m_Subtype > 0 && m_Owner >= 0 && m_Owner < MAX_CLIENTS && GameServer()->m_apPlayers[m_Owner])				{					int Team = GameServer()->m_apPlayers[m_Owner]->GetTeam();										if (Team != pChr->GetPlayer()->GetTeam())					{						if (m_Subtype == 1)							GameServer()->CreateExplosion(m_Pos, m_Owner, WEAPON_HAMMER, false, false);												if (m_Subtype == 2)						{							CSuperexplosion *S = new CSuperexplosion(&GameServer()->m_World, m_Pos, m_Owner, WEAPON_HAMMER, 1);							GameServer()->m_World.InsertEntity(S);						}						GameServer()->CreateSound(m_Pos, SOUND_PICKUP_HEALTH);						RespawnTime = g_pData->m_aPickups[m_Type].m_Respawntime;						m_Life = 0;						m_Flashing = false;//.........这里部分代码省略.........
开发者ID:Siile,项目名称:CSTT,代码行数:101,


示例21: DoWeaponSwitch

void CCharacter::FireWeapon(){	if(m_ReloadTimer != 0)		return;			DoWeaponSwitch();	vec2 Direction = normalize(vec2(m_LatestInput.m_TargetX, m_LatestInput.m_TargetY));		bool FullAuto = false;	if(m_ActiveWeapon == WEAPON_GRENADE || m_ActiveWeapon == WEAPON_SHOTGUN || m_ActiveWeapon == WEAPON_RIFLE)		FullAuto = true;	// check if we gonna fire	bool WillFire = false;	if(CountInput(m_LatestPrevInput.m_Fire, m_LatestInput.m_Fire).m_Presses)		WillFire = true;			if(FullAuto && (m_LatestInput.m_Fire&1) && m_aWeapons[m_ActiveWeapon].m_Ammo)		WillFire = true;			if(!WillFire)		return;			// check for ammo	if(!m_aWeapons[m_ActiveWeapon].m_Ammo)	{		// 125ms is a magical limit of how fast a human can click		m_ReloadTimer = 125 * Server()->TickSpeed() / 1000;		GameServer()->CreateSound(m_Pos, SOUND_WEAPON_NOAMMO);		return;	}		vec2 ProjStartPos = m_Pos+Direction*m_ProximityRadius*0.75f;		switch(m_ActiveWeapon)	{		case WEAPON_HAMMER:		{			// reset objects Hit			m_NumObjectsHit = 0;			GameServer()->CreateSound(m_Pos, SOUND_HAMMER_FIRE);						CCharacter *apEnts[MAX_CLIENTS];			int Hits = 0;			int Num = GameServer()->m_World.FindEntities(ProjStartPos, m_ProximityRadius*0.5f, (CEntity**)apEnts, 														MAX_CLIENTS, CGameWorld::ENTTYPE_CHARACTER);			for (int i = 0; i < Num; ++i)			{				CCharacter *pTarget = apEnts[i];								if ((pTarget == this) || GameServer()->Collision()->IntersectLine(ProjStartPos, pTarget->m_Pos, NULL, NULL))					continue;				// set his velocity to fast upward (for now)				if(length(pTarget->m_Pos-ProjStartPos) > 0.0f)					GameServer()->CreateHammerHit(pTarget->m_Pos-normalize(pTarget->m_Pos-ProjStartPos)*m_ProximityRadius*0.5f);				else					GameServer()->CreateHammerHit(ProjStartPos);								vec2 Dir;				if (length(pTarget->m_Pos - m_Pos) > 0.0f)					Dir = normalize(pTarget->m_Pos - m_Pos);				else					Dir = vec2(0.f, -1.f);									pTarget->TakeDamage(vec2(0.f, -1.f) + normalize(Dir + vec2(0.f, -1.1f)) * 10.0f, g_pData->m_Weapons.m_Hammer.m_pBase->m_Damage,					m_pPlayer->GetCID(), m_ActiveWeapon);				Hits++;			}						// if we Hit anything, we have to wait for the reload			if(Hits)				m_ReloadTimer = Server()->TickSpeed()/3;					} break;		case WEAPON_GUN:		{			CProjectile *pProj = new CProjectile(GameWorld(), WEAPON_GUN,				m_pPlayer->GetCID(),				ProjStartPos,				Direction,				(int)(Server()->TickSpeed()*GameServer()->Tuning()->m_GunLifetime),				1, 0, 0, -1, WEAPON_GUN);							// pack the Projectile and send it to the client Directly			CNetObj_Projectile p;			pProj->FillInfo(&p);						CMsgPacker Msg(NETMSGTYPE_SV_EXTRAPROJECTILE);			Msg.AddInt(1);			for(unsigned i = 0; i < sizeof(CNetObj_Projectile)/sizeof(int); i++)				Msg.AddInt(((int *)&p)[i]);							Server()->SendMsg(&Msg, 0, m_pPlayer->GetCID());				GameServer()->CreateSound(m_Pos, SOUND_GUN_FIRE);		} break;//.........这里部分代码省略.........
开发者ID:CoolerMAN,项目名称:tdtw,代码行数:101,


示例22: GameServer

void CProjectile::Reset(){	GameServer()->m_World.DestroyEntity(this);}
开发者ID:BugsBunny1605,项目名称:N-Client,代码行数:4,


示例23: DoHookers

void CGameControllerOpenFNG::DoInteractions(){	DoHookers();	for(int i = 0; i < MAX_CLIENTS; i++)	{		CCharacter *pChr = CHAR(i);		if (!pChr)			continue;		int FrzTicks = pChr->GetFreezeTicks();		int Col = GameServer()->Collision()->GetCollisionAt(pChr->m_Pos.x, pChr->m_Pos.y);		if (Col == TILE_SHRINE_ALL || Col == TILE_SHRINE_RED || Col == TILE_SHRINE_BLUE)		{			if (FrzTicks > 0 && m_aLastInteraction[i] < 0)				pChr->Freeze(FrzTicks = 0);			bool WasSacrificed = false;			if (FrzTicks > 0)			{				int ShrineTeam = Col == TILE_SHRINE_RED ? TEAM_RED : Col == TILE_SHRINE_BLUE ? TEAM_BLUE : -1;				HandleSacr(m_aLastInteraction[i], i, ShrineTeam);				WasSacrificed = true;			}			pChr->Die(pChr->GetPlayer()->GetCID(), WEAPON_WORLD, WasSacrificed);		}		if (FrzTicks > 0)		{			if ((FrzTicks+1) % TS == 0) {				int mask = -1;				if (!CFG(MeltShowAll))					mask = (int)~m_aCltMask[1-(pChr->GetPlayer()->GetTeam()&1)];				GS->CreateDamageInd(pChr->m_Pos, 0, (FrzTicks+1) / TS, mask);				if (CFG(ClickyMelt))				{					mask = -1;					if (CFG(ClickyMelt) == 1)						mask = (int)m_aCltMask[1-(pChr->GetPlayer()->GetTeam()&1)];					GS->CreateSound(pChr->m_Pos, SOUND_WEAPON_NOAMMO, mask);				}			}			if (FrzTicks == 1 && CFG(MeltSafeticks))				pChr->SetEmote(EMOTE_SURPRISE, TICK + CFG(MeltSafeticks) + 1);			m_aMoltenBy[i] = -1;			if (m_aFrozenBy[i] != -1)				continue;			int Killer = pChr->WasFrozenBy();			if (Killer < 0) //may happen then the gods are not pleased			{				m_aFrozenBy[i] = -1;				continue;			}			m_aFrozenBy[i] = Killer;						HandleFreeze(Killer, i);		}		else		{			m_aFrozenBy[i] = -1;			int Melter = pChr->WasMoltenBy();			if (Melter < 0)				m_aMoltenBy[i] = -1;						if (Melter == m_aMoltenBy[i])				continue;			m_aMoltenBy[i] = Melter;			HandleMelt(Melter, i);		}	}}
开发者ID:FallenKN,项目名称:openfng,代码行数:84,


示例24: max

bool CCharacter::TakeDamage(vec2 Force, int Dmg, int From, int Weapon){	m_Core.m_Vel += Force;		if(GameServer()->m_pController->IsFriendlyFire(m_pPlayer->GetCID(), From) && !g_Config.m_SvTeamdamage)		return false;	// m_pPlayer only inflicts half damage on self	if(From == m_pPlayer->GetCID())		Dmg = max(1, Dmg/2);	m_DamageTaken++;	// create healthmod indicator	if(Server()->Tick() < m_DamageTakenTick+25)	{		// make sure that the damage indicators doesn't group together		GameServer()->CreateDamageInd(m_Pos, m_DamageTaken*0.25f, Dmg);	}	else	{		m_DamageTaken = 0;		GameServer()->CreateDamageInd(m_Pos, 0, Dmg);	}	if(Dmg)	{		if(m_Armor)		{			if(Dmg > 1)			{				m_Health--;				Dmg--;			}						if(Dmg > m_Armor)			{				Dmg -= m_Armor;				m_Armor = 0;			}			else			{				m_Armor -= Dmg;				Dmg = 0;			}		}				m_Health -= Dmg;	}	m_DamageTakenTick = Server()->Tick();	// do damage Hit sound	if(From >= 0 && From != m_pPlayer->GetCID() && GameServer()->m_apPlayers[From])		GameServer()->CreateSound(GameServer()->m_apPlayers[From]->m_ViewPos, SOUND_HIT, CmaskOne(From));	// check for death	if(m_Health <= 0)	{		Die(From, Weapon);				// set attacker's face to happy (taunt!)		if (From >= 0 && From != m_pPlayer->GetCID() && GameServer()->m_apPlayers[From])		{			CCharacter *pChr = GameServer()->m_apPlayers[From]->GetCharacter();			if (pChr)			{				pChr->m_EmoteType = EMOTE_HAPPY;				pChr->m_EmoteStop = Server()->Tick() + Server()->TickSpeed();			}		}			return false;	}	if (Dmg > 2)		GameServer()->CreateSound(m_Pos, SOUND_PLAYER_PAIN_LONG);	else		GameServer()->CreateSound(m_Pos, SOUND_PLAYER_PAIN_SHORT);	m_EmoteType = EMOTE_PAIN;	m_EmoteStop = Server()->Tick() + 500 * Server()->TickSpeed() / 1000;	return true;}
开发者ID:CoolerMAN,项目名称:tdtw,代码行数:85,


示例25: GameServer

void IGameController::ResetGame(){	GameServer()->m_World.m_ResetRequested = true;}
开发者ID:andi103,项目名称:Surv-Teeworlds-Mod,代码行数:4,


示例26: GameServer

void CServer::DoSnapshot(){	GameServer()->OnPreSnap();	// create snapshot for demo recording	if(m_DemoRecorder.IsRecording())	{		char aData[CSnapshot::MAX_SIZE];		int SnapshotSize;		// build snap and possibly add some messages		m_SnapshotBuilder.Init();		GameServer()->OnSnap(-1);		SnapshotSize = m_SnapshotBuilder.Finish(aData);		// write snapshot		m_DemoRecorder.RecordSnapshot(Tick(), aData, SnapshotSize);	}	// create snapshots for all clients	for(int i = 0; i < MAX_CLIENTS; i++)	{		// client must be ingame to recive snapshots		if(m_aClients[i].m_State != CClient::STATE_INGAME)			continue;		// this client is trying to recover, don't spam snapshots		if(m_aClients[i].m_SnapRate == CClient::SNAPRATE_RECOVER && (Tick()%50) != 0)			continue;		// this client is trying to recover, don't spam snapshots		if(m_aClients[i].m_SnapRate == CClient::SNAPRATE_INIT && (Tick()%10) != 0)			continue;		{			char aData[CSnapshot::MAX_SIZE];			CSnapshot *pData = (CSnapshot*)aData;	// Fix compiler warning for strict-aliasing			char aDeltaData[CSnapshot::MAX_SIZE];			char aCompData[CSnapshot::MAX_SIZE];			int SnapshotSize;			int Crc;			static CSnapshot EmptySnap;			CSnapshot *pDeltashot = &EmptySnap;			int DeltashotSize;			int DeltaTick = -1;			int DeltaSize;			m_SnapshotBuilder.Init();			GameServer()->OnSnap(i);			// finish snapshot			SnapshotSize = m_SnapshotBuilder.Finish(pData);			Crc = pData->Crc();			// remove old snapshos			// keep 3 seconds worth of snapshots			m_aClients[i].m_Snapshots.PurgeUntil(m_CurrentGameTick-SERVER_TICK_SPEED*3);			// save it the snapshot			m_aClients[i].m_Snapshots.Add(m_CurrentGameTick, time_get(), SnapshotSize, pData, 0);			// find snapshot that we can preform delta against			EmptySnap.Clear();			{				DeltashotSize = m_aClients[i].m_Snapshots.Get(m_aClients[i].m_LastAckedSnapshot, 0, &pDeltashot, 0);				if(DeltashotSize >= 0)					DeltaTick = m_aClients[i].m_LastAckedSnapshot;				else				{					// no acked package found, force client to recover rate					if(m_aClients[i].m_SnapRate == CClient::SNAPRATE_FULL)						m_aClients[i].m_SnapRate = CClient::SNAPRATE_RECOVER;				}			}			// create delta			DeltaSize = m_SnapshotDelta.CreateDelta(pDeltashot, pData, aDeltaData);			if(DeltaSize)			{				// compress it				int SnapshotSize;				const int MaxSize = MAX_SNAPSHOT_PACKSIZE;				int NumPackets;				SnapshotSize = CVariableInt::Compress(aDeltaData, DeltaSize, aCompData);				NumPackets = (SnapshotSize+MaxSize-1)/MaxSize;				for(int n = 0, Left = SnapshotSize; Left; n++)				{					int Chunk = Left < MaxSize ? Left : MaxSize;					Left -= Chunk;					if(NumPackets == 1)					{						CMsgPacker Msg(NETMSG_SNAPSINGLE);						Msg.AddInt(m_CurrentGameTick);						Msg.AddInt(m_CurrentGameTick-DeltaTick);//.........这里部分代码省略.........
开发者ID:vanyagod,项目名称:FNG-Sam-za-seb9,代码行数:101,



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


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