Someone is asking us for permission to enter observer mode
| 6161 | |
| 6162 | // Someone is asking us for permission to enter observer mode |
| 6163 | void MultiDoRequestToObserve(uint8_t *data) { |
| 6164 | int count = 0; |
| 6165 | int objnum; |
| 6166 | |
| 6167 | mprintf(0, "Got request to observe!\n"); |
| 6168 | |
| 6169 | MULTI_ASSERT_NOMESSAGE(Netgame.local_role == LR_SERVER); |
| 6170 | |
| 6171 | SKIP_HEADER(data, &count); |
| 6172 | |
| 6173 | uint8_t slot = MultiGetByte(data, &count); |
| 6174 | uint8_t mode = MultiGetByte(data, &count); |
| 6175 | uint8_t on = MultiGetByte(data, &count); |
| 6176 | |
| 6177 | if (mode == OBSERVER_MODE_PIGGYBACK) |
| 6178 | objnum = MultiGetInt(data, &count); |
| 6179 | |
| 6180 | if ((Objects[Players[slot].objnum].type == OBJ_PLAYER && on) || |
| 6181 | (Objects[Players[slot].objnum].type == OBJ_OBSERVER && !on)) { |
| 6182 | int newcount = 0; |
| 6183 | uint8_t newdata[MAX_GAME_DATA_SIZE]; |
| 6184 | int size_offset; |
| 6185 | |
| 6186 | size_offset = START_DATA(MP_OBSERVER_CHANGE, newdata, &newcount); |
| 6187 | |
| 6188 | MultiAddByte(slot, newdata, &newcount); |
| 6189 | MultiAddByte(mode, newdata, &newcount); |
| 6190 | MultiAddByte(on, newdata, &newcount); |
| 6191 | |
| 6192 | if (!on) { |
| 6193 | int start_slot = PlayerGetRandomStartPosition(slot); |
| 6194 | MultiAddShort(start_slot, newdata, &newcount); |
| 6195 | } else |
| 6196 | MultiAddShort(0, newdata, &newcount); |
| 6197 | |
| 6198 | if (mode == OBSERVER_MODE_PIGGYBACK) { |
| 6199 | MultiAddInt(objnum, newdata, &newcount); |
| 6200 | } |
| 6201 | |
| 6202 | END_DATA(newcount, newdata, size_offset); |
| 6203 | |
| 6204 | MultiSendReliablyToAllExcept(Player_num, newdata, newcount, NETSEQ_PLAYERS, false); |
| 6205 | MultiDoObserverChange(newdata); |
| 6206 | } |
| 6207 | } |
| 6208 | |
| 6209 | // We're asking to enter observer mode |
| 6210 | void MultiSendRequestToObserve(int mode, int on, int objnum) { |
no test coverage detected