A common Cruise app. mistake, is that people loop the MCI packets by their local Players list count. This is wrong. The MCI packet is telling you how many connections it has sent you info for.
Imagine you have a shop, and I'm the storage facility you're loading from. The people I've hired can carry 8 bottles of water at a time. So they start unloading, and each time they bring 8 bottles, you look at how many you've ordered, and start yelling at my employees, because they haven't delivered the full amount. What can they possibly do? They will just go, and bring another 8 bottles, while you are in the store, totally confused, because you can't calculate (in this case - your insim app. can't calculate, because you haven't taught it how).
So, how do you fix this? Each time my employee comes, you count the bottles he has delivered, and compare them to what you have ordered. Then note it down, and on the next 8, do the same. Don't be so greedy. If my employees carry more than 8 bottles, they might just trip, and block access to your store, due to many bottles of water flying to random directions (= if many MCI packets are sent, your server might just drop a few people out, that's why they are 8 at a time).
So, I have no idea if you got it, but I just wanted to try a different method of explaining this exact issue, because nobody seems to get it the first time (neither did I, so don't worry - it's totally normal).
Now, that you know, here's some code:
In the MCI thread, EVERYWHERE you loop MCI packets, replace:
for (int i = 0; i < Players.Count; i++) with
for (int i = 0; i < MCI.CountC; i++)
Players.Count is how many bottles you've ordered. MCI.CountC is how many you receive in this one time. By the way, please note that if you just do a find/replace on your whole project, you will receive at least 1 error, because GetPlyIdx (iirc) is using this same loop
for (int i = 0; i < Players.Count; i++). And the GetPlyIdx function is something that happens inside your store, it has nothing to do with my storage facility, so it should be, indeed, left as is -
for (int i = 0; i < Players.Count; i++).
Please tell me if you understand or not.