| 137 | } |
| 138 | |
| 139 | bool CSaveTee::Load(CCharacter *pChr, std::optional<int> Team) |
| 140 | { |
| 141 | bool Valid = true; |
| 142 | |
| 143 | pChr->m_pPlayer->Pause(m_Paused, true); |
| 144 | |
| 145 | pChr->m_Alive = m_Alive; |
| 146 | pChr->m_NeededFaketuning = m_NeededFaketuning; |
| 147 | |
| 148 | if(Team.has_value()) |
| 149 | { |
| 150 | pChr->Teams()->SetForceCharacterTeam(pChr->m_pPlayer->GetCid(), Team.value()); |
| 151 | pChr->Teams()->SetStarted(pChr->m_pPlayer->GetCid(), m_TeeStarted); |
| 152 | pChr->Teams()->SetFinished(pChr->m_pPlayer->GetCid(), m_TeeFinished); |
| 153 | } |
| 154 | |
| 155 | for(int i = 0; i < NUM_WEAPONS; i++) |
| 156 | { |
| 157 | pChr->m_Core.m_aWeapons[i].m_AmmoRegenStart = m_aWeapons[i].m_AmmoRegenStart; |
| 158 | // m_Ammo not used anymore for tracking freeze following https://github.com/ddnet/ddnet/pull/2086 |
| 159 | pChr->m_Core.m_aWeapons[i].m_Ammo = -1; |
| 160 | pChr->m_Core.m_aWeapons[i].m_Ammocost = m_aWeapons[i].m_Ammocost; |
| 161 | pChr->m_Core.m_aWeapons[i].m_Got = m_aWeapons[i].m_Got; |
| 162 | } |
| 163 | |
| 164 | pChr->m_Core.m_Ninja.m_ActivationDir = m_Ninja.m_ActivationDir; |
| 165 | if(m_Ninja.m_ActivationTick) |
| 166 | pChr->m_Core.m_Ninja.m_ActivationTick = pChr->Server()->Tick() - m_Ninja.m_ActivationTick; |
| 167 | else |
| 168 | pChr->m_Core.m_Ninja.m_ActivationTick = 0; |
| 169 | pChr->m_Core.m_Ninja.m_CurrentMoveTime = m_Ninja.m_CurrentMoveTime; |
| 170 | pChr->m_Core.m_Ninja.m_OldVelAmount = m_Ninja.m_OldVelAmount; |
| 171 | |
| 172 | pChr->m_LastWeapon = m_LastWeapon; |
| 173 | pChr->m_QueuedWeapon = m_QueuedWeapon; |
| 174 | |
| 175 | pChr->m_Core.m_EndlessJump = m_EndlessJump; |
| 176 | pChr->m_Core.m_Jetpack = m_Jetpack; |
| 177 | pChr->m_NinjaJetpack = m_NinjaJetpack; |
| 178 | pChr->m_FreezeTime = m_FreezeTime; |
| 179 | pChr->m_Core.m_FreezeStart = pChr->Server()->Tick() - m_FreezeStart; |
| 180 | |
| 181 | pChr->m_Core.m_DeepFrozen = m_DeepFrozen; |
| 182 | pChr->m_Core.m_LiveFrozen = m_LiveFrozen; |
| 183 | pChr->m_Core.m_EndlessHook = m_EndlessHook; |
| 184 | pChr->m_DDRaceState = static_cast<ERaceState>(m_DDRaceState); |
| 185 | |
| 186 | pChr->m_Core.m_HammerHitDisabled = m_HitDisabledFlags & CSaveTee::HAMMER_HIT_DISABLED; |
| 187 | pChr->m_Core.m_ShotgunHitDisabled = m_HitDisabledFlags & CSaveTee::SHOTGUN_HIT_DISABLED; |
| 188 | pChr->m_Core.m_GrenadeHitDisabled = m_HitDisabledFlags & CSaveTee::GRENADE_HIT_DISABLED; |
| 189 | pChr->m_Core.m_LaserHitDisabled = m_HitDisabledFlags & CSaveTee::LASER_HIT_DISABLED; |
| 190 | |
| 191 | pChr->m_TuneZone = m_TuneZone; |
| 192 | pChr->m_TuneZoneOld = m_TuneZoneOld; |
| 193 | |
| 194 | if(m_Time) |
| 195 | pChr->m_StartTime = pChr->Server()->Tick() - m_Time; |
| 196 | |