this problem was happen in server with large amount of player, in my playing server was 15000 player, and this was always happen with map full of bot,
i took a look at move source at src task folder, i think the problem was at send move packet, kore send move packet after checking timeout, not at the beginning of process move was called, when try to increase timeout ai_move_retry to 10, kore will wait that timeout before move, kore should be move once at begining before checking timeout of actor position whether actor still at same position.
and should have an delay between each send packet, when move packet and two or more packet send within rapid period, actor will not moving, and cause server will not response any send packet after a certain delay, likes a lag, any packet such public chat or group chat, npc talk etc.
add: in src/task/move.pl
at sub iterate
Code: Select all
} elsif (timeOut($self->{retry})) {
debug "Move $self->{actor} - (re)trying\n", "move";
$self->{actor}->sendMove(@{$self}{qw(x y)});
$self->{retry}{time} = time;
}
the syntax was check for retry time first before send packet, if one move packet was send and server is lag, another will be send, this may cause for server not respond any send packet after second packet. and actor will move back and forth like bodyrelo.
i think, once send move packet, check current position, if not at begin position and not from goal position, kore must wait for a certain time, because if kore send any more packet, the server will take long time to response future packet.
in retry move, syntax just check current position, actor still at previous position or not,
i just know a little of this problem, and this happens at me too, but i still can't fix this