08-09-2017, 09:22 PM
изаю исходник Java от pbdev переделал режим игра использую PBRU
но есть маленькая проблемка меленькая производтельность
больше 50 игроков сервер не потянет
из за сценария боя RoomTask
[SRC="java"]public class GRoomTask implements IRoomTask
{
@Override
public void run(int channel, Room room)
{
int countPlayerPrestart = 0;
int redTeamReady = 0;
int blueTeamReady = 0;
for(Player player : room.getPlayers().values())
{
RoomSlot slot = room.getRoomSlotByPlayer(player);
if (slot.getState().ordinal() > 8 && slot.getState().ordinal() < 12)
{
countPlayerPrestart++;
}
else
{
if(room.getSpecial() != 6)
{
if(slot.getId() % 2 == 0)
{
redTeamReady+=1;
}
else
{
blueTeamReady+=1;
}
}
}
}
RoomSlot leader = room.getRoomSlotByPlayer(room.getLeader());
if(leader.getState().ordinal() < 13)
{
if (redTeamReady > 0 && blueTeamReady > 0 || countPlayerPrestart == 0) {
if(leader.getState().ordinal() < 13 )
{
for (Player member : room.getPlayers().values())
{
RoomSlot playerSlot = room.getRoomSlotByPlayer(member);
if (playerSlot.getState() == SlotState.SLOT_STATE_BATTLE_READY)
{
playerSlot.setState(SlotState.SLOT_STATE_BATTLE);
member.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, member));
for (Player toSend : room.getPlayers().values())
{
if (!toSend.equals(member))
{
RoomSlot toSendplayerSlot = room.getRoomSlotByPlayer(toSend);
if (toSendplayerSlot.getState().ordinal() > 11)
member.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, toSend));
}
}
member.getConnection().sendPacket(new SM_UNK_3865());
member.getConnection().sendPacket(new SM_BATTLE_ROUND_START(room));
BattleServerInfo bsi = BattleServerController.getInstance().getBattleServerInfo(40000);
if (bsi != null) {
if (bsi.getConnection() != null)
{
if (room.getRoomSlotByPlayer(member).getState().ordinal() > 8)
{
bsi.getConnection().sendPacket(new SM_REQUEST_READY_BATTLE_ROOM(room, member, channel));
}
}
}
}
}
}
}
}
else
{
for(Player player : room.getPlayers().values())
{
RoomSlot playerSlot = room.getRoomSlotByPlayer(player);
if(playerSlot.getState().ordinal() == 12) {
player.getConnection().sendPacket(new SM_BATTLE_BOT_INFO(room));
playerSlot.setState(SlotState.SLOT_STATE_BATTLE);
player.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, player));
for(Player player1 : room.getPlayers().values()) {
RoomSlot why = room.getRoomSlotByPlayer(player1);
if(why.getState().ordinal() == 13 && !player.equals(player1))
{
player1.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, player));
player.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, player1));
}
}
player.getConnection().sendPacket(new SM_UNK_3865());
player.getConnection().sendPacket(new SM_BATTLE_ROUND_START(room));
BattleServerInfo bsi = BattleServerController.getInstance().getBattleServerInfo(40000);
if (bsi != null) {
if (bsi.getConnection() != null) {
if (room.getRoomSlotByPlayer(player).getState().ordinal() > 8) {
bsi.getConnection().sendPacket(new SM_REQUEST_READY_BATTLE_ROOM(room, player, channel));
}
}
}
}
}
}
for(Player player : room.getPlayers().values())
{
player.getConnection().sendPacket(new SM_ROOM_INFO(room));
}
}
}
[/SRC]
как быть и что надо переписать и оптимизировать зарание спасибо за помошь
но есть маленькая проблемка меленькая производтельность
больше 50 игроков сервер не потянет
из за сценария боя RoomTask
[SRC="java"]public class GRoomTask implements IRoomTask
{
@Override
public void run(int channel, Room room)
{
int countPlayerPrestart = 0;
int redTeamReady = 0;
int blueTeamReady = 0;
for(Player player : room.getPlayers().values())
{
RoomSlot slot = room.getRoomSlotByPlayer(player);
if (slot.getState().ordinal() > 8 && slot.getState().ordinal() < 12)
{
countPlayerPrestart++;
}
else
{
if(room.getSpecial() != 6)
{
if(slot.getId() % 2 == 0)
{
redTeamReady+=1;
}
else
{
blueTeamReady+=1;
}
}
}
}
RoomSlot leader = room.getRoomSlotByPlayer(room.getLeader());
if(leader.getState().ordinal() < 13)
{
if (redTeamReady > 0 && blueTeamReady > 0 || countPlayerPrestart == 0) {
if(leader.getState().ordinal() < 13 )
{
for (Player member : room.getPlayers().values())
{
RoomSlot playerSlot = room.getRoomSlotByPlayer(member);
if (playerSlot.getState() == SlotState.SLOT_STATE_BATTLE_READY)
{
playerSlot.setState(SlotState.SLOT_STATE_BATTLE);
member.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, member));
for (Player toSend : room.getPlayers().values())
{
if (!toSend.equals(member))
{
RoomSlot toSendplayerSlot = room.getRoomSlotByPlayer(toSend);
if (toSendplayerSlot.getState().ordinal() > 11)
member.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, toSend));
}
}
member.getConnection().sendPacket(new SM_UNK_3865());
member.getConnection().sendPacket(new SM_BATTLE_ROUND_START(room));
BattleServerInfo bsi = BattleServerController.getInstance().getBattleServerInfo(40000);
if (bsi != null) {
if (bsi.getConnection() != null)
{
if (room.getRoomSlotByPlayer(member).getState().ordinal() > 8)
{
bsi.getConnection().sendPacket(new SM_REQUEST_READY_BATTLE_ROOM(room, member, channel));
}
}
}
}
}
}
}
}
else
{
for(Player player : room.getPlayers().values())
{
RoomSlot playerSlot = room.getRoomSlotByPlayer(player);
if(playerSlot.getState().ordinal() == 12) {
player.getConnection().sendPacket(new SM_BATTLE_BOT_INFO(room));
playerSlot.setState(SlotState.SLOT_STATE_BATTLE);
player.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, player));
for(Player player1 : room.getPlayers().values()) {
RoomSlot why = room.getRoomSlotByPlayer(player1);
if(why.getState().ordinal() == 13 && !player.equals(player1))
{
player1.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, player));
player.getConnection().sendPacket(new SM_BATTLE_PLAYER_INFO(room, player1));
}
}
player.getConnection().sendPacket(new SM_UNK_3865());
player.getConnection().sendPacket(new SM_BATTLE_ROUND_START(room));
BattleServerInfo bsi = BattleServerController.getInstance().getBattleServerInfo(40000);
if (bsi != null) {
if (bsi.getConnection() != null) {
if (room.getRoomSlotByPlayer(player).getState().ordinal() > 8) {
bsi.getConnection().sendPacket(new SM_REQUEST_READY_BATTLE_ROOM(room, player, channel));
}
}
}
}
}
}
for(Player player : room.getPlayers().values())
{
player.getConnection().sendPacket(new SM_ROOM_INFO(room));
}
}
}
[/SRC]
как быть и что надо переписать и оптимизировать зарание спасибо за помошь