void CDoor::Snap(int SnappingClient) { if (NetworkClipped(SnappingClient, m_Pos) && NetworkClipped(SnappingClient, m_To)) return; CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem( NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser))); if (!pObj) return; pObj->m_X = (int) m_Pos.x; pObj->m_Y = (int) m_Pos.y; CCharacter * Char = GameServer()->GetPlayerChar(SnappingClient); int Tick = (Server()->Tick() % Server()->TickSpeed()) % 11; if(SnappingClient > -1 && (GameServer()->m_apPlayers[SnappingClient]->GetTeam() == -1 || GameServer()->m_apPlayers[SnappingClient]->m_Paused) && GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID != SPEC_FREEVIEW) Char = GameServer()->GetPlayerChar(GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID); if (Char == 0) return; if (Char->IsAlive() && GameServer()->Collision()->m_NumSwitchers > 0 && !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[Char->Team()] && (!Tick)) return; if (Char->Team() == TEAM_SUPER) { pObj->m_FromX = (int) m_Pos.x; pObj->m_FromY = (int) m_Pos.y; } else if (Char->IsAlive() && GameServer()->Collision()->m_NumSwitchers > 0 && GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[Char->Team()]) { pObj->m_FromX = (int) m_To.x; pObj->m_FromY = (int) m_To.y; } else { pObj->m_FromX = (int) m_Pos.x; pObj->m_FromY = (int) m_Pos.y; } pObj->m_StartTick = Server()->Tick(); }
void CLaser::Snap(int SnappingClient, int FirstID) { if(NetworkClipped(SnappingClient) && NetworkClipped(SnappingClient, m_From)) return; CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(NETOBJTYPE_LASER, GetID(FirstID), sizeof(CNetObj_Laser))); if(!pObj) return; pObj->m_X = (int)m_Pos.x; pObj->m_Y = (int)m_Pos.y; pObj->m_FromX = (int)m_From.x; pObj->m_FromY = (int)m_From.y; pObj->m_StartTick = m_EvalTick; }
void CDragger::Snap(int SnappingClient) { if (m_Target) { if(NetworkClipped(SnappingClient, m_Pos) && NetworkClipped(SnappingClient,m_Target->m_Pos)) return; } else if(NetworkClipped(SnappingClient,m_Pos)) return; CCharacter * Char = GameServer()->GetPlayerChar(SnappingClient); int Tick = (Server()->Tick()%Server()->TickSpeed())%11; if (Char && Char->IsAlive() && (m_Layer == LAYER_SWITCH && !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[Char->Team()] && (!Tick))) return; if (Char && Char->IsAlive()) { if (Char->Team() != m_CatchedTeam) return; } else { // send to spectators only active draggers and some inactive from team 0 if (!((m_Target && m_Target->IsAlive()) || m_CatchedTeam == 0)) return; } CNetObj_Laser *obj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser))); if(!obj) return; obj->m_X = (int)m_Pos.x; obj->m_Y = (int)m_Pos.y; if (m_Target) { obj->m_FromX = (int)m_Target->m_Pos.x; obj->m_FromY = (int)m_Target->m_Pos.y; } else { obj->m_FromX = (int)m_Pos.x; obj->m_FromY = (int)m_Pos.y; } int StartTick = m_EvalTick; if (StartTick < Server()->Tick() - 4) StartTick = Server()->Tick() - 4; else if (StartTick>Server()->Tick()) StartTick = Server()->Tick(); obj->m_StartTick = StartTick; }
void CLaser::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CCharacter * OwnerChar = 0; if(m_Owner >= 0) OwnerChar = GameServer()->GetPlayerChar(m_Owner); if(!OwnerChar) return; CCharacter *pOwnerChar = 0; int64_t TeamMask = -1LL; if(m_Owner >= 0) pOwnerChar = GameServer()->GetPlayerChar(m_Owner); if (pOwnerChar && pOwnerChar->IsAlive()) TeamMask = pOwnerChar->Teams()->TeamMask(pOwnerChar->Team(), -1, m_Owner); if(!CmaskIsSet(TeamMask, SnappingClient)) return; CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser))); if(!pObj) return; pObj->m_X = (int)m_Pos.x; pObj->m_Y = (int)m_Pos.y; pObj->m_FromX = (int)m_From.x; pObj->m_FromY = (int)m_From.y; pObj->m_StartTick = m_EvalTick; }
void CTeleport::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient, m_Pos)) return; }
void CPickup::Snap(int SnappingClient) { if(m_SpawnTick != -1 || NetworkClipped(SnappingClient)) return; CNetObj_Pickup *pP = static_cast<CNetObj_Pickup *>(Server()->SnapNewItem(NETOBJTYPE_PICKUP, m_ID, sizeof(CNetObj_Pickup))); if(!pP) return; pP->m_X = (int)m_Pos.x; pP->m_Y = (int)m_Pos.y; // MineTee if (m_Type == POWERUP_DROPITEM) { pP->m_Type = m_Type + m_Subtype; pP->m_Subtype = m_Amount; } else { pP->m_Type = m_Type; pP->m_Subtype = m_Subtype; } // }
void CCharacter::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CNetObj_Character *pCharacter = static_cast<CNetObj_Character *>(Server()->SnapNewItem(NETOBJTYPE_CHARACTER, m_pPlayer->GetCID(), sizeof(CNetObj_Character))); if(!pCharacter) return; // write down the m_Core if(!m_ReckoningTick || GameServer()->m_World.m_Paused) { // no dead reckoning when paused because the client doesn't know // how far to perform the reckoning pCharacter->m_Tick = 0; m_Core.Write(pCharacter); } else { pCharacter->m_Tick = m_ReckoningTick; m_SendCore.Write(pCharacter); } // set emote if (m_EmoteStop < Server()->Tick()) { m_EmoteType = EMOTE_NORMAL; m_EmoteStop = -1; } pCharacter->m_Emote = m_EmoteType; pCharacter->m_AmmoCount = 0; pCharacter->m_Health = 0; pCharacter->m_Armor = 0; pCharacter->m_TriggeredEvents = m_TriggeredEvents; pCharacter->m_Weapon = m_ActiveWeapon; pCharacter->m_AttackTick = m_AttackTick; pCharacter->m_Direction = m_Input.m_Direction; if(m_pPlayer->GetCID() == SnappingClient || SnappingClient == -1 || (!g_Config.m_SvStrictSpectateMode && m_pPlayer->GetCID() == GameServer()->m_apPlayers[SnappingClient]->GetSpectatorID())) { pCharacter->m_Health = m_Health; pCharacter->m_Armor = m_Armor; if(m_ActiveWeapon == WEAPON_NINJA) pCharacter->m_AmmoCount = m_Ninja.m_ActivationTick + g_pData->m_Weapons.m_Ninja.m_Duration * Server()->TickSpeed() / 1000; else if(m_aWeapons[m_ActiveWeapon].m_Ammo > 0) pCharacter->m_AmmoCount = m_aWeapons[m_ActiveWeapon].m_Ammo; } if(pCharacter->m_Emote == EMOTE_NORMAL) { if(250 - ((Server()->Tick() - m_LastAction)%(250)) < 5) pCharacter->m_Emote = EMOTE_BLINK; } }
void CCharacter::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CNetObj_Character *pCharacter = static_cast<CNetObj_Character *>(Server()->SnapNewItem(NETOBJTYPE_CHARACTER, m_pPlayer->GetCID(), sizeof(CNetObj_Character))); if(!pCharacter) return; // write down the m_Core if(!m_ReckoningTick || GameServer()->m_World.m_Paused) { // no dead reckoning when paused because the client doesn't know // how far to perform the reckoning pCharacter->m_Tick = 0; m_Core.Write(pCharacter); } else { pCharacter->m_Tick = m_ReckoningTick; m_SendCore.Write(pCharacter); } // set emote if (m_EmoteStop < Server()->Tick()) { m_EmoteType = EMOTE_NORMAL; m_EmoteStop = -1; } pCharacter->m_Emote = m_EmoteType; pCharacter->m_AmmoCount = 0; pCharacter->m_Health = 0; pCharacter->m_Armor = 0; pCharacter->m_Weapon = m_ActiveWeapon; pCharacter->m_AttackTick = m_AttackTick; pCharacter->m_Direction = m_Input.m_Direction; if(m_pPlayer->GetCID() == SnappingClient) { pCharacter->m_Health = m_Health; pCharacter->m_Armor = m_Armor; if(m_aWeapons[m_ActiveWeapon].m_Ammo > 0) pCharacter->m_AmmoCount = m_aWeapons[m_ActiveWeapon].m_Ammo; } if(pCharacter->m_Emote == EMOTE_NORMAL) { if(250 - ((Server()->Tick() - m_LastAction)%(250)) < 5) pCharacter->m_Emote = EMOTE_BLINK; } pCharacter->m_PlayerState = m_PlayerState; }
void CProjectile::Snap(int SnappingClient) { float Ct = (Server()->Tick()-m_StartTick)/(float)Server()->TickSpeed(); if(NetworkClipped(SnappingClient, GetPos(Ct))) return; CNetObj_Projectile *pProj = static_cast<CNetObj_Projectile *>(Server()->SnapNewItem(NETOBJTYPE_PROJECTILE, m_Id, sizeof(CNetObj_Projectile))); FillInfo(pProj); }
void CPickup::Snap(int SnappingClient) { if(m_SpawnTick != -1 || NetworkClipped(SnappingClient)) return; CNetObj_Pickup *pP = static_cast<CNetObj_Pickup *>(Server()->SnapNewItem(NETOBJTYPE_PICKUP, m_Id, sizeof(CNetObj_Pickup))); pP->m_X = (int)m_Pos.x; pP->m_Y = (int)m_Pos.y; pP->m_Type = m_Type; pP->m_Subtype = m_Subtype; }
void CFlag::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CNetObj_Flag *pFlag = (CNetObj_Flag *)Server()->SnapNewItem(NETOBJTYPE_FLAG, m_Team, sizeof(CNetObj_Flag)); if(!pFlag) return; pFlag->m_X = (int)m_Pos.x; pFlag->m_Y = (int)m_Pos.y; pFlag->m_Team = m_Team; }
void CPowerupper::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CNetObj_Powerupper *pP = static_cast<CNetObj_Powerupper *>(Server()->SnapNewItem(NETOBJTYPE_POWERUPPER, m_ID, sizeof(CNetObj_Powerupper))); if(!pP) return; pP->m_X = (int)m_Pos.x; pP->m_Y = (int)m_Pos.y; pP->m_Item = m_Item; pP->m_Team = m_Team; }
void CHealthRegen::Snap(int SnappingClient) { if(SnappingClient != m_Owner || NetworkClipped(SnappingClient, m_Pos) || !m_Visible) return; CNetObj_Pickup *pP[2]; for(int i = 0; i < 2; i++) { pP[i] = static_cast<CNetObj_Pickup *>(Server()->SnapNewItem(NETOBJTYPE_PICKUP, m_IDs[i], sizeof(CNetObj_Pickup))); if(!pP[i]) return; pP[i]->m_X = (int)m_Pos.x - 32 + 5*i; pP[i]->m_Y = (int)m_Pos.y + 5*i; pP[i]->m_Type = i; pP[i]->m_Subtype = 0; } CNetObj_Laser *pObj[4]; for(int i = 0; i < 4; i++) { pObj[i] = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(NETOBJTYPE_LASER, m_IDs[i+2], sizeof(CNetObj_Laser))); if(!pObj[i]) return; pObj[i]->m_X = (int)m_Pos.x + 16 *((i+1)%2?0:(i==3?1:-1)); pObj[i]->m_Y = (int)m_Pos.y + 16 * (i%2?0:(!i?-1:1)); pObj[i]->m_FromX = (int)m_Pos.x; pObj[i]->m_FromY = (int)m_Pos.y; pObj[i]->m_StartTick = Server()->Tick(); } CCharacter *pOwner = GameServer()->GetPlayerChar(m_Owner); if(pOwner) { if(pOwner->GetPlayer()->m_AccData.m_AllWeapons) { } } }
void CBarrier::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser))); if(!pObj) return; pObj->m_X = (int)m_Pos.x; pObj->m_Y = (int)m_Pos.y; pObj->m_FromX = (int)m_Pos2.x; pObj->m_FromY = (int)m_Pos2.y; pObj->m_StartTick = Server()->Tick(); }
void CAura::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CNetObj_Pickup *pP = static_cast<CNetObj_Pickup *>(Server()->SnapNewItem(NETOBJTYPE_PICKUP, m_ID, sizeof(CNetObj_Pickup))); if(!pP) return; pP->m_X = (int)m_Pos.x; pP->m_Y = (int)m_Pos.y; pP->m_Type = m_Type; pP->m_Subtype = 0; }
void CMine::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CNetObj_Projectile *pObj = static_cast<CNetObj_Projectile *>(Server()->SnapNewItem(NETOBJTYPE_PROJECTILE, m_ID, sizeof(CNetObj_Projectile))); if(!pObj) return; pObj->m_X = (int)m_Pos.x; pObj->m_Y = (int)m_Pos.y; pObj->m_VelX = 1; pObj->m_VelY = 1; pObj->m_Type = WEAPON_RIFLE; }
void CBuilding::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CNetObj_Building *pP = static_cast<CNetObj_Building *>(Server()->SnapNewItem(NETOBJTYPE_BUILDING, m_ID, sizeof(CNetObj_Building))); if(!pP) return; pP->m_X = (int)m_Pos.x; pP->m_Y = (int)m_Pos.y; pP->m_Status = m_Status; pP->m_Type = m_Type; pP->m_Team = m_Team; }
void CMercenaryBomb::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CPlayer* pClient = GameServer()->m_apPlayers[SnappingClient]; if(pClient->IsInfected()) return; float AngleStart = (2.0f * pi * Server()->Tick()/static_cast<float>(Server()->TickSpeed()))/10.0f; float AngleStep = 2.0f * pi / CMercenaryBomb::NUM_SIDE; float R = 50.0f*static_cast<float>(m_Damage)/g_Config.m_InfMercBombs; for(int i=0; i<CMercenaryBomb::NUM_SIDE; i++) { vec2 PosStart = m_Pos + vec2(R * cos(AngleStart + AngleStep*i), R * sin(AngleStart + AngleStep*i)); CNetObj_Pickup *pP = static_cast<CNetObj_Pickup *>(Server()->SnapNewItem(NETOBJTYPE_PICKUP, m_IDs[i], sizeof(CNetObj_Pickup))); if(!pP) return; pP->m_X = (int)PosStart.x; pP->m_Y = (int)PosStart.y; pP->m_Type = POWERUP_ARMOR; pP->m_Subtype = 0; } if(SnappingClient == m_Owner && m_LoadingTick > 0) { R = 80.0f; AngleStart = AngleStart*2.0f; for(int i=0; i<CMercenaryBomb::NUM_SIDE; i++) { vec2 PosStart = m_Pos + vec2(R * cos(AngleStart + AngleStep*i), R * sin(AngleStart + AngleStep*i)); CNetObj_Projectile *pObj = static_cast<CNetObj_Projectile *>(Server()->SnapNewItem(NETOBJTYPE_PROJECTILE, m_IDs[CMercenaryBomb::NUM_SIDE+i], sizeof(CNetObj_Projectile))); if(pObj) { pObj->m_X = (int)PosStart.x; pObj->m_Y = (int)PosStart.y; pObj->m_VelX = 0; pObj->m_VelY = 0; pObj->m_StartTick = Server()->Tick(); pObj->m_Type = WEAPON_HAMMER; } } } }
void CSingularity::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CNetObj_Laser *pObj; pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser))); if(!pObj) return; pObj->m_X = (int)m_Pos.x; pObj->m_Y = (int)m_Pos.y; pObj->m_FromX = (int)m_From.x; pObj->m_FromY = (int)m_From.y; pObj->m_StartTick = m_EvalTick; return; }
void CHealth::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient, m_Pos)) // fix display m_Pos return; CNetObj_Pickup *pP = static_cast<CNetObj_Pickup *>(Server()->SnapNewItem(NETOBJTYPE_PICKUP, m_ID, sizeof(CNetObj_Pickup))); if(!pP) return; //if(SnappingClient != m_Owner) // fix display for others //return; pP->m_X = (int)m_Pos.x; pP->m_Y = (int)m_Pos.y; pP->m_Type = POWERUP_HEALTH; pP->m_Subtype = 0; }
void CFastReload::Snap(int SnappingClient) { if(SnappingClient != m_Owner || NetworkClipped(SnappingClient, m_Pos) || !m_Visible) return; CNetObj_Pickup *pP = static_cast<CNetObj_Pickup *>(Server()->SnapNewItem(NETOBJTYPE_PICKUP, m_ID, sizeof(CNetObj_Pickup))); if(!pP) return; pP->m_X = (int)m_Pos.x - 20; pP->m_Y = (int)m_Pos.y; pP->m_Type = POWERUP_WEAPON; pP->m_Subtype = WEAPON_GUN; CNetObj_Projectile *pProj[3]; for(int i = 0; i < 3; i++) { pProj[i] = static_cast<CNetObj_Projectile *>(Server()->SnapNewItem(NETOBJTYPE_PROJECTILE, m_IDs[i], sizeof(CNetObj_Projectile))); if(!pProj[i]) return; pProj[i]->m_X = (int)m_Pos.x + i*15; pProj[i]->m_Y = (int)m_Pos.y; pProj[i]->m_VelX = (int)10; pProj[i]->m_VelY = (int)-2; pProj[i]->m_StartTick = Server()->Tick()-2; pProj[i]->m_Type = WEAPON_GUN; } CCharacter *pOwner = GameServer()->GetPlayerChar(m_Owner); if(pOwner) { if(pOwner->GetPlayer()->m_AccData.m_AllWeapons) { } } }
void CProjectile::Snap(int SnappingClient) { float Ct = (Server()->Tick()-m_StartTick)/(float)Server()->TickSpeed(); if(NetworkClipped(SnappingClient, GetPos(Ct))) return; CCharacter* pSnapChar = GameServer()->GetPlayerChar(SnappingClient); int Tick = (Server()->Tick()%Server()->TickSpeed())%((m_Explosive)?6:20); if (pSnapChar && pSnapChar->IsAlive() && (m_Layer == LAYER_SWITCH && !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[pSnapChar->Team()] && (!Tick))) return; if(pSnapChar && m_Owner != -1 && !pSnapChar->CanCollide(m_Owner)) return; CNetObj_Projectile *pProj = static_cast<CNetObj_Projectile *>(Server()->SnapNewItem(NETOBJTYPE_PROJECTILE, m_ID, sizeof(CNetObj_Projectile))); if(pProj) FillInfo(pProj); }
void CStaticlaser::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; //if (m_Hidden) if(Server()->Tick() > m_EvalTick+(Server()->TickSpeed()*GameServer()->Tuning()->m_LaserBounceDelay)/1000.0f) return; CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser))); if(!pObj) return; pObj->m_X = (int)m_Pos.x; pObj->m_Y = (int)m_Pos.y; pObj->m_FromX = (int)m_From.x; pObj->m_FromY = (int)m_From.y; pObj->m_StartTick = m_EvalTick; }
void CPlasma::Snap(int SnappingClient) { if (NetworkClipped(SnappingClient)) return; CCharacter* SnapChar = GameServer()->GetPlayerChar(SnappingClient); CPlayer* SnapPlayer = SnappingClient > -1 ? GameServer()->m_apPlayers[SnappingClient] : 0; int Tick = (Server()->Tick() % Server()->TickSpeed()) % 11; if (SnapChar && SnapChar->IsAlive() && (m_Layer == LAYER_SWITCH && !GameServer()->Collision()->m_pSwitchers[m_Number].m_Status[SnapChar->Team()]) && (!Tick)) return; if(SnapPlayer && (SnapPlayer->GetTeam() == TEAM_SPECTATORS || SnapPlayer->m_Paused) && SnapPlayer->m_SpectatorID != -1 && GameServer()->GetPlayerChar(SnapPlayer->m_SpectatorID) && GameServer()->GetPlayerChar(SnapPlayer->m_SpectatorID)->Team() != m_ResponsibleTeam && !SnapPlayer->m_ShowOthers) return; if(SnapPlayer && SnapPlayer->GetTeam() != TEAM_SPECTATORS && !SnapPlayer->m_Paused && SnapChar && SnapChar && SnapChar->Team() != m_ResponsibleTeam && !SnapPlayer->m_ShowOthers) return; if(SnapPlayer && (SnapPlayer->GetTeam() == TEAM_SPECTATORS || SnapPlayer->m_Paused) && SnapPlayer->m_SpectatorID == -1 && SnapChar && SnapChar->Team() != m_ResponsibleTeam && SnapPlayer->m_SpecTeam) return; CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem( NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser))); if(!pObj) return; pObj->m_X = (int) m_Pos.x; pObj->m_Y = (int) m_Pos.y; pObj->m_FromX = (int) m_Pos.x; pObj->m_FromY = (int) m_Pos.y; pObj->m_StartTick = m_EvalTick; }
void CPickup::Snap(int SnappingClient) { if(m_SpawnTick != -1 || NetworkClipped(SnappingClient)) return; CNetObj_Pickup *pP = static_cast<CNetObj_Pickup *>(Server()->SnapNewItem(NETOBJTYPE_PICKUP, m_ID, sizeof(CNetObj_Pickup))); if(!pP) return; pP->m_X = (int)m_Pos.x; pP->m_Y = (int)m_Pos.y; pP->m_Type = m_Type; if (m_Type == POWERUP_WEAPON && m_Subtype >= 0 && m_Subtype < NUM_CUSTOMWEAPONS) { //pP->m_Subtype = aCustomWeapon[m_Subtype].m_ParentWeapon; pP->m_Subtype = m_Subtype; } else pP->m_Subtype = m_Subtype; }
void CPickup::Snap(int SnappingClient) { if(m_SpawnTick != -1 || NetworkClipped(SnappingClient)) return; CCharacter *Char = GameServer()->GetPlayerChar(SnappingClient); if(SnappingClient > -1 && (GameServer()->m_apPlayers[SnappingClient]->GetTeam() == -1 || GameServer()->m_apPlayers[SnappingClient]->m_Paused) && GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID != SPEC_FREEVIEW) Char = GameServer()->GetPlayerChar(GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID); CNetObj_Pickup *pP = static_cast<CNetObj_Pickup *>(Server()->SnapNewItem(NETOBJTYPE_PICKUP, m_ID, sizeof(CNetObj_Pickup))); if(!pP) return; pP->m_X = (int)m_Pos.x; pP->m_Y = (int)m_Pos.y; pP->m_Type = m_Type; pP->m_Subtype = m_Subtype; }
void CBomb::Snap(int SnappingClient) { float time = (Server()->Tick()-m_StartTick)/(float)Server()->TickSpeed(); float angle = fmodf(time*pi/2, 2.0f*pi); for(int i=0; i<m_nbBomb; i++) { if(NetworkClipped(SnappingClient)) return; float shiftedAngle = angle + 2.0*pi*static_cast<float>(i)/static_cast<float>(MAX_BOMB); CNetObj_Projectile *pProj = static_cast<CNetObj_Projectile *>(Server()->SnapNewItem(NETOBJTYPE_PROJECTILE, m_IDBomb[i], sizeof(CNetObj_Projectile))); pProj->m_X = (int)(m_Pos.x + m_DetectionRadius*cos(shiftedAngle)); pProj->m_Y = (int)(m_Pos.y + m_DetectionRadius*sin(shiftedAngle)); pProj->m_VelX = (int)(0.0f); pProj->m_VelY = (int)(0.0f); pProj->m_StartTick = Server()->Tick(); pProj->m_Type = WEAPON_GRENADE; } }
void CLaser::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CCharacter * SnappingChar = GameServer()->GetPlayerChar(SnappingClient); CCharacter * OwnerChar = 0; if(m_Owner >= 0) OwnerChar = GameServer()->GetPlayerChar(m_Owner); if(!OwnerChar) return; if(SnappingChar && !SnappingChar->CanCollide(m_Owner)) return; CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser))); if(!pObj) return; pObj->m_X = (int)m_Pos.x; pObj->m_Y = (int)m_Pos.y; pObj->m_FromX = (int)m_From.x; pObj->m_FromY = (int)m_From.y; pObj->m_StartTick = m_EvalTick; }
void CBarrier::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; { CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(NETOBJTYPE_LASER, m_ID, sizeof(CNetObj_Laser))); if(!pObj) return; pObj->m_X = (int)m_Pos.x; pObj->m_Y = (int)m_Pos.y; pObj->m_FromX = (int)m_Pos2.x; pObj->m_FromY = (int)m_Pos2.y; pObj->m_StartTick = Server()->Tick(); } { CNetObj_Laser *pObj = static_cast<CNetObj_Laser *>(Server()->SnapNewItem(NETOBJTYPE_LASER, m_EndPointID, sizeof(CNetObj_Laser))); if(!pObj) return; vec2 Pos = m_Pos2; if(SnappingClient == m_Owner) { float lifeSpanPercent = static_cast<float>(m_LifeSpan)/static_cast<float>(Server()->TickSpeed()*g_BarrierLifeSpan); Pos = m_Pos + (m_Pos2 - m_Pos)*lifeSpanPercent; } pObj->m_X = (int)Pos.x; pObj->m_Y = (int)Pos.y; pObj->m_FromX = (int)Pos.x; pObj->m_FromY = (int)Pos.y; pObj->m_StartTick = Server()->Tick(); } }
void CTeslacoil::Snap(int SnappingClient) { if(NetworkClipped(SnappingClient)) return; CNetObj_Building *pP = static_cast<CNetObj_Building *>(Server()->SnapNewItem(NETOBJTYPE_BUILDING, m_ID, sizeof(CNetObj_Building))); if(!pP) return; pP->m_X = (int)m_Pos.x; pP->m_Y = (int)m_Pos.y; pP->m_Status = m_Status; pP->m_Type = m_Type; if (GameServer()->m_pController->IsTeamplay()) pP->m_Team = m_Team; else { if (SnappingClient == m_OwnerPlayer) pP->m_Team = TEAM_RED; else pP->m_Team = -1; } }