Function that sends all the changed world states to an incoming player
| 1475 | doorway *GetDoorwayFromObject(int door_obj_handle); |
| 1476 | // Function that sends all the changed world states to an incoming player |
| 1477 | void MultiSendWorldStates(int slot) { |
| 1478 | int i; |
| 1479 | ASSERT(Netgame.local_role == LR_SERVER); |
| 1480 | |
| 1481 | uint8_t data[MAX_GAME_DATA_SIZE]; |
| 1482 | uint8_t cur_data[MAX_GAME_DATA_SIZE]; |
| 1483 | int cur_count; |
| 1484 | int count = 0; |
| 1485 | int size_offset; |
| 1486 | |
| 1487 | mprintf(0, "Sending MP_WORLD_STATES packet to player %d!\n", slot); |
| 1488 | |
| 1489 | size_offset = START_DATA(MP_WORLD_STATES, data, &count); |
| 1490 | |
| 1491 | // Send MOTD |
| 1492 | if (Dedicated_server && Multi_message_of_the_day[0] != 0) { |
| 1493 | cur_count = 0; |
| 1494 | MultiAddByte(WS_MOTD, cur_data, &cur_count); |
| 1495 | MultiAddString(Multi_message_of_the_day, cur_data, &cur_count); |
| 1496 | MultiStoreWorldPacket(slot, data, &count, cur_data, &cur_count, &size_offset); |
| 1497 | } |
| 1498 | |
| 1499 | // Send weather |
| 1500 | cur_count = 0; |
| 1501 | MultiAddByte(WS_WEATHER, cur_data, &cur_count); |
| 1502 | MultiAddByte(Weather.flags, cur_data, &cur_count); |
| 1503 | MultiAddFloat(Weather.rain_intensity_scalar, cur_data, &cur_count); |
| 1504 | MultiAddFloat(Weather.snow_intensity_scalar, cur_data, &cur_count); |
| 1505 | MultiAddFloat(Weather.lightning_interval_time, cur_data, &cur_count); |
| 1506 | MultiAddShort(Weather.lightning_rand_value, cur_data, &cur_count); |
| 1507 | MultiStoreWorldPacket(slot, data, &count, cur_data, &cur_count, &size_offset); |
| 1508 | |
| 1509 | // Send broke glass |
| 1510 | if (Num_broke_glass > 0) { |
| 1511 | for (i = 0; i < Num_broke_glass; i++) { |
| 1512 | cur_count = 0; |
| 1513 | MultiAddByte(WS_ROOM_GLASS, cur_data, &cur_count); |
| 1514 | MultiAddUshort(Broke_glass_rooms[i], cur_data, &cur_count); |
| 1515 | MultiAddUshort(Broke_glass_faces[i], cur_data, &cur_count); |
| 1516 | MultiStoreWorldPacket(slot, data, &count, cur_data, &cur_count, &size_offset); |
| 1517 | } |
| 1518 | } |
| 1519 | |
| 1520 | // Send waypoint |
| 1521 | cur_count = 0; |
| 1522 | MultiAddByte(WS_WAYPOINT, cur_data, &cur_count); |
| 1523 | MultiAddByte(Current_waypoint, cur_data, &cur_count); |
| 1524 | MultiStoreWorldPacket(slot, data, &count, cur_data, &cur_count, &size_offset); |
| 1525 | |
| 1526 | // Send player bit-fields |
| 1527 | cur_count = 0; |
| 1528 | MultiAddByte(WS_PLAYERBF, cur_data, &cur_count); |
| 1529 | MultiAddUint(Players_typing, cur_data, &cur_count); |
| 1530 | MultiStoreWorldPacket(slot, data, &count, cur_data, &cur_count, &size_offset); |
| 1531 | |
| 1532 | // Do room stuff |
| 1533 | for (i = 0; i <= Highest_room_index; i++) { |
| 1534 | if (!Rooms[i].used) |
no test coverage detected