Косяк в раундах - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Point Blank (Piercing Blow)

Point Blank (Piercing Blow)
Общие вопросы по написанию эмулятора. General questions on developing emulator. При поддержке: Lucera 2 - разработка Java Interlude

Ответ
Опции темы
Непрочитано 25.05.2016, 22:32   #1
Пользователь

Автор темы (Топик Стартер) Косяк в раундах

в настройках комнаты 5 а играть может хоть 20 раундов
помогите конец боя сделать
slawa560 вне форума Ответить с цитированием
Непрочитано 25.05.2016, 23:10   #2
Пользователь

По умолчанию Re: Косяк в раундах

А проверка на раунды есть?
nn03 вне форума Ответить с цитированием
Непрочитано 25.05.2016, 23:14   #3
Пользователь

Автор темы (Топик Стартер) Re: Косяк в раундах

В каком пакете она должна быть?
Timer.sync все прописал
slawa560 вне форума Ответить с цитированием
Непрочитано 26.05.2016, 00:00   #4
Аватар для PROGRAMMATOR
Администратор

По умолчанию Re: Косяк в раундах

Где вызываете PROTOCOL_BATTLE_MISSION_ROUND_END_ACK, там нужно инкрементировать раунды и проверять не последний ли раунд только что закончился.
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Непрочитано 26.05.2016, 09:58   #5
Пользователь

Автор темы (Топик Стартер) Re: Косяк в раундах

В фраг инфо и таймер сунк

Добавлено через 25 минут
Код:
public class CM_BATTLE_FRAG_INFO extends ClientPacket {

	private FragInfos fragInfos = new FragInfos();
	private int TeamWin = -1;

	public CM_BATTLE_FRAG_INFO(int opcode) {
		super(opcode);
	}

	@Override
	public void readImpl() {
		fragInfos.setVicTimIdx(readC()); // WTF? killsCount - 1, если не убиваеш себя... если и себя то 0 будет если пострадал 1 бот и сам игрок.
		fragInfos.setKillsCount(readC()); // Всего померло.
		fragInfos.setKiller(readC()); // Слот убившего.
		fragInfos.setKillWeapon(readD()); // Орудие убийства.
		fragInfos.setUnkBytes(readB(13)); // Хз что там

		for (int i = 1; i <= fragInfos.getKillsCount(); i++) {
			Frag frag = new Frag();
			frag.setUnkC1(readC()); //
			frag.setDeathMask(readC()); //
			frag.setUnkC3(readC()); //
			frag.setUnkC4(readC()); //
			frag.setUnk13bytes(readB(13));

			fragInfos.addFrag(i, frag);
		}
	}

	@Override
	public void runImpl() {
		Room room = getConnection().getRoom();
		Player player = getConnection().getPlayer();
		if (room != null && player != null) {
			RoomSlot killer = room.getRoomSlot(fragInfos.getKiller());
			for (int i = 1; i <= fragInfos.getKillsCount(); i++) {
				Frag frag = fragInfos.getFrag(i);
				if (frag != null) {
					boolean suicide = frag.getDeatSlot() == fragInfos.getKiller();
					RoomSlot death = room.getRoomSlot(frag.getDeatSlot());
					if (!suicide) {
						killer.setAllKills(killer.getAllKills() + 1);
						killer.setOneTimeKills(killer.getOneTimeKills() + 1);

						int weaponHeadNum = fragInfos.getWeaponHeadNum();
						killer.setKillMessage(0);
						if (fragInfos.getKillsCount() > 1) {
							if ((weaponHeadNum == 8030) || (weaponHeadNum == 9030)) {
								killer.setKillMessage(2);
							} else {
								killer.setKillMessage(1);
							}
						} else {
							int killMessage = 0;
							if (frag.getDeathMask() >> 4 == 3) { //TODO:: понять что это и всунуть в Frag!
								killMessage = 4;
							} else if ((frag.getDeathMask() >> 4 == 1) && (frag.getDeathMask() >> 2 == 1) && (weaponHeadNum == 7020)) {
								killMessage = 6;
							}

							if (killMessage > 0) {
								int lastMessage = killer.lastKillState >> 12;

								if (killMessage == 4) {
									if (lastMessage != 4) {
										killer.repeatLastState = false;
										killer.setOneTimeKills(0);
									}

									killer.setOneTimeKills(killer.getOneTimeKills() + 1);
									killer.lastKillState = killMessage << 12 | killer.getOneTimeKills();

									int countedKill = killer.lastKillState & 0xF;

									if (killer.repeatLastState) {
										if (countedKill > 1)
											killer.setKillMessage(5);
										else
											killer.setKillMessage(4);
									} else {
										killer.setKillMessage(4);
										killer.repeatLastState = true;
									}
								} else if (killMessage == 6) {
									if (lastMessage != 6) {
										killer.repeatLastState = false;
										killer.setOneTimeKills(0);
									}

									killer.setOneTimeKills(killer.getOneTimeKills() + 1);
									killer.lastKillState = killMessage << 12 | killer.getOneTimeKills();

									int countedKill = killer.lastKillState & 0xF;

									if (killer.repeatLastState) {
										if (countedKill > 1)
											killer.setKillMessage(6);
									} else
										killer.repeatLastState = true;
								} else if (killMessage == 0) {
									//TODO: Што это ваще ? Накой?
									//if (killer.getOneTimeKills() == 1)
									//killer.setKillMessage(3);
									//else if (killer.getOneTimeKills() == 2)
									//killer.setKillMessage(3);
								}
							} else {
								killer.lastKillState = 0;
								killer.repeatLastState = false;
							}
						}

						//Добавляем общий счет команде
						if (frag.getDeatSlot() % 2 == 0) {    // Если помер красный
							room.setRedDeaths(room.getRedDeaths() + 1);
							room.setBlueKills(room.getBlueKills() + 1);
						} else {
							room.setBlueDeaths(room.getBlueDeaths() + 1);
							room.setRedKills(room.getRedKills() + 1);
						}
						death.setOneTimeKills(0);
						death.setKillMessage(0);
						death.setLastKillMessage(0);
						death.lastKillState = 0;
					}
					death.setAllDeahts(death.getAllDeath() + 1);
					//Добавляем очки в бою с ботами
					if (room.getSpecial() == 6) {
						RoomSlot slot = room.getRoomSlot(fragInfos.getKiller());
						int AILevel = room.getRoomSlotByPlayer(room.getLeader()).getId() % 2 == 0 ? room.getAiLevel() + room.getBlueDeaths() / 20 : room.getAiLevel() + room.getRedDeaths() / 20;
						int AIScore = 10 + room.getRoomSlot(fragInfos.getKiller()).getOneTimeKills() * AILevel;
						slot.setBotScore(slot.getBotScore() + AIScore);
					}
				}
			}
			

			 if (room.getType() == 2)
             {
                 if (room.getBlueKills() == room.redTeamCount)
                 {
                     TeamWin = 0;
                 }
                 else if (room.getRedKills() == room.blueTeamCount)
                 {
                     TeamWin = 1;
                 }
             }
           
             if (room.getType() == 4)
             {
                 if (room.getBlueKills()  == room.redTeamCount)
                 {
                     TeamWin = 0;
                 }
                 else if (room.getRedKills() == room.blueTeamCount)
                 {
                     TeamWin = 1;
                 }
             }
         }
     
     

	for (Player member : room.getPlayers().values()) {
		if (SlotState.SLOT_STATE_BATTLE == room.getRoomSlotByPlayer(member).getState()) {
			member.getConnection().sendPacket(new SM_BATTLE_FRAG_INFO(room, fragInfos));
		}
	}

	 
       
               if (TeamWin >= 0)
     {
         //TeamWin = -1;
         if (!(TeamWin == 1 && room.getBombState() == 1))
         {
             room.setRedKills(0);
             room.setBlueKills(0);
             if (TeamWin == 1)
             {
                 room.setBlueWinRounds(room.getBlueWinRounds() + 1);
             }
             else
             {
                 room.setRedWinRounds(room.getRedWinRounds() + 1);
             }
             if ((TeamWin == 0 ? room.getBlueWinRounds() : room.getRedWinRounds()) == room.getKillsByMask())
//                  if ((((((room.killtime == 2) && (room.getRedWinRounds() >= 3)) || ((room.killtime == 2) && (room.getBlueWinRounds() >= 3))) || (((room.killtime == 3) && (room.getRedWinRounds() >= 5)) || ((room.killtime == 3) && (room.getBlueWinRounds() >= 5)))) || ((((room.killtime == 4) && (room.getRedWinRounds() >= 7)) || ((room.killtime == 4) && (room.getBlueWinRounds() >= 7))) || ((room.killtime == 5) && (room.getRedWinRounds() >= 9)))) || ((room.killtime == 5) && (room.getBlueWinRounds() >= 9)))
             {
                  for (Player member : getConnection().getRoom().getPlayers().values())
                 {
                     RoomSlot slot = room.getRoomSlotByPlayer(member);
                      member.getConnection().sendPacket(new SM_BATTLE_END(player, room));
                     slot.setKillMessage(0);
                     slot.setLastKillMessage(0);
                     slot.setOneTimeKills(0);
                     slot.setAllKills(0);
                     slot.setAllDeahts(0);
                 }
                 room.setRedKills(0);
                 room.setRedDeaths(0);
                 room.setBlueKills(0);
                 room.setBlueDeaths(0);
                 room.setFigth(false);
                 room.setBlueWinRounds(0);
                 room.setRedWinRounds(0);
                 room.setBombState(0);
             }
             else
             {
                  for (Player member : getConnection().getRoom().getPlayers().values())
                 {
                     RoomSlot slot = room.getRoomSlotByPlayer(member);
                     slot.setKillMessage(0);
                     slot.setLastKillMessage(0);
                     slot.setOneTimeKills(0);
                     slot.lastKillState = 0;
                     room.setRedKills(0);
                     room.setRedDeaths(0);
                     room.setBlueKills(0);
                     room.setBlueDeaths(0);
                     room.setBombState(0);
                     member.getConnection().sendPacket(new SM_BATTLE_ROUND_END(TeamWin, 4, room));
                 }
                 try {
                     Thread.sleep(8000);
                 } catch (InterruptedException ex) {
                   //  Logger.getLogger(CM_BATTLE_FRAG_INFO.class.getName()).log(Level.SEVERE, null, ex);
                 }
                 for (Player member : getConnection().getRoom().getPlayers().values())
                 {
                     member.getConnection().sendPacket(new SM_UNK_3865());
                     member.getConnection().sendPacket(new SM_BATTLE_ROUND_START(room));
                 }
             }
            // TeamWin = -1;
         }
         TeamWin = -1;
                 }
             }
             //TeamWin = -1;
                     
         }

Последний раз редактировалось slawa560; 26.05.2016 в 10:23. Причина: Добавлено сообщение
slawa560 вне форума Ответить с цитированием
Непрочитано 26.05.2016, 11:59   #6
Аватар для PROGRAMMATOR
Администратор

По умолчанию Re: Косяк в раундах

Код:
             if (TeamWin == 1)
             {
                 room.setBlueWinRounds(room.getBlueWinRounds() + 1);
             }
Код:
if ((TeamWin == 0 ? room.getBlueWinRounds() : room.getRedWinRounds()) == room.getKillsByMask())
Так всё же, BlueWin это когда TeamWin == 1 или 0, и что есть getKillsByMask? Так как я вижу, там что-то с убийствами связано, но сравнивается это всё с раундами.
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Непрочитано 26.05.2016, 14:54   #7
Пользователь

По умолчанию Re: Косяк в раундах

Цитата:
Сообщение от PROGRAMMATOR Посмотреть сообщение
Код:
             if (TeamWin == 1)
             {
                 room.setBlueWinRounds(room.getBlueWinRounds() + 1);
             }
Код:
if ((TeamWin == 0 ? room.getBlueWinRounds() : room.getRedWinRounds()) == room.getKillsByMask())
Так всё же, BlueWin это когда TeamWin == 1 или 0, и что есть getKillsByMask? Так как я вижу, там что-то с убийствами связано, но сравнивается это всё с раундами.
Проверка, убиты ли все члены команды и стоит ли бомба( правда я ее не заметил там..) (но как вариант, раунды без плента)
nn03 вне форума Ответить с цитированием
Непрочитано 26.05.2016, 22:21   #8
Пользователь

Автор темы (Топик Стартер) Re: Косяк в раундах

public int getKillsByMask()
{
if (killMask >> 4 < 3)
return ROUNDS[killMask-1 & 15]; // Если бой по раундам.
else
return KILLS[killMask & 15]; // Если бой по кол-ву убийств.
}
slawa560 вне форума Ответить с цитированием
Непрочитано 26.05.2016, 22:53   #9
Аватар для PROGRAMMATOR
Администратор

По умолчанию Re: Косяк в раундах

slawa560, у вас ошибка скорее всего во втором куске кода, что я процитировал.

Пробуйте сделать типа:

if (Math.max(redTeamWonRounds, blueTeamWonRounds) >= roundsQty) {
    // ...
    // PROTOCOL_BATTLE_ENDBATTLE_ACK
    // ...
}
 
Code: Java
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Непрочитано 28.05.2016, 03:14   #10
Пользователь

Автор темы (Топик Стартер) Re: Косяк в раундах

https://www.youtube.com/watch?v=nPn9Mtr6MxU
ПРОГРАММАТОР СПАСИБО БОЛЬШОЕ Я ВСЕ ИСПРАВИЛ ВОТ ТОЛЬКО БОМБА НЕ ДЕФУЗИТЬСЯ НЕ МОГУ ПОНЯТЬ КАК СДЕЛАТЬ ВЕДЬ НА АРАБ КЛИЕНТЕ ДАЖЕ С УПД 2 ВСЕ РАБОТАЛО)))
slawa560 вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Косяк перчаток xxxrozorxxx Игровой клиент 12 23.11.2014 13:20
Свой торговец ресурсами (косяк с вкладками) 4idos Серверная часть 0 07.11.2012 12:03
Косяк Сборки Л2ему FotoMEH Lineage II 8 24.07.2008 12:20


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 12:33. Часовой пояс GMT +3.

Вверх