Тема: [Point Blank] UDP3 POSITION ERROR
Показать сообщение отдельно
Непрочитано 02.06.2018, 02:14   #1
Пользователь

Автор темы (Топик Стартер) UDP3 POSITION ERROR

UDP3 Event Position Error how to fix



@PROGRAMMATOR

RUS:
вы что-то понимаете?
ENG:
Do you understand something?

BattleUdpReceive
Код:
                		else
	                		{
		    	                send.buffer.writeByte(4);
		    	                send.buffer.writeByte(255);
		    	                send.buffer.writeFloat(udp.time);
		    	                send.buffer.writeByte(udp.session);
		    	                send.buffer.writeShort(udp.length);
		        				send.buffer.writeInt(0);
		        				//send.buffer.writeBytes(udp.bytes3.clone()); //*UDP3*//   
		        				//asyncEvent(udp.read, r, p, udp, send.buffer);
		        
		        				try
		        				{
		        					asyncEvent(udp.read, r, p, udp, send.buffer);
		        				}
		        				catch (Throwable e)
		        				{
		        					Software.setColor(Color.YELLOW, Color.BLACK);
			                    	logging("ERROR", true);
				                    Software.setColor(Color.WHITE, Color.BLACK);
		        				}
	                		}
	                		for (Player c : r.players.values())
	                		{
	                			if (c.state == SlotState.BATTLE && c.sender != null && r.isUDP(c.slot, p.slot == r.leader))
	                				ctx.writeAndFlush(new DatagramPacket(Unpooled.copiedBuffer(send.buffer), c.sender));
	                		}
	                	}
	                }
					break;
				}
			
		    send.close();
	    }
	    catch (Throwable e)
	    {
			Logger.gI().info("errorUDP", e, "", getClass());
	    }
	    finally
	    {
	    	if (receive.refCnt() != 0) receive.release();
	    	if (udp.read.refCnt() != 0) udp.read.release();
	    	if (send.buffer.refCnt() != 0) send.buffer.release();
	        ReferenceCountUtil.release(msg);
	    }
	    udp = null;
	}
AsyncEvent
Код:
public void asyncEvent(ByteBuf read, Room r, Player p, UDP_Model udp, ByteBuf sender) throws Throwable
	{
		byte opc = read.readByte();

		UDP_P2P subHead = UDP_SubHead.getSubHead(opc);
		subHead.slot = read.readShort();
		subHead.length = read.readShort();
		subHead.flag = read.readInt();

		BattleUdpBuffer ss = new BattleUdpBuffer();

		ss.buffer.writeByte(opc);
		ss.buffer.writeShort(subHead.slot);
		ss.buffer.writeShort(subHead.length);
		ss.buffer.writeInt(subHead.flag);
		
		if ((subHead.flag & 0x04) > 0) //Pos Rotate
		{
			UDP_PosRotation half = new UDP_PosRotation(read.readUnsignedShort(), read.readUnsignedShort(), read.readUnsignedShort(), read.readUnsignedShort(), read.readUnsignedShort(), read.readUnsignedShort());
			p.pos = half;
			ss.buffer.writeShort(half.posX);
			ss.buffer.writeShort(half.posY);
			ss.buffer.writeShort(half.posZ);
			ss.buffer.writeShort(half.camX);
			ss.buffer.writeShort(half.camY);
			ss.buffer.writeShort(half.area);

			Software.setColor(Color.GREEN, Color.BLACK);
			core.models.MapLocation map = MapsLocalXML.gI().get(r.map, half.area);
			if (map != null)
			{
				RoomController.gI().sendPacket(new REQUEST_GAME_SEND_ACK(r.roomId, r.serverId, r.channelId, p.slot, String.valueOf(map.local)));
				System.out.println(" [" + map.index + "] " + map.local);
				System.out.flush();
			}
			else
			{
				//RoomController.gI().sendPacket(new REQUEST_GAME_SEND_ACK(r.roomId, r.serverId, r.channelId, p.slot, String.valueOf(half.area)));
			}
			Software.setColor(Color.WHITE, Color.BLACK);
            Software.setColor(Color.CYAN, Color.BLACK);
			String local = null;
			logging("[Burning Hall] Slot " + udp.slot + "; " + local, true);
            Software.setColor(Color.WHITE, Color.BLACK);
			subHead.flag ^= 4;
		}
		ss.buffer.writeBytes(Unpooled.copiedBuffer(read));
		BitShift.onlyEncrypt(ss.buffer, udp.length);
		sender.writeBytes(Unpooled.copiedBuffer(ss.buffer));
		ss.close();
		
		int k = 0;
		if (k == 0)
			return;
		
		if ((subHead.flag & 0x01) > 0) //ActionState
		{
			int acao = read.readInt();
			UDP_Action action = UDP_Action.valueOf(acao);
			if (action.value > 0)
				RoomController.gI().sendPacket(new REQUEST_GAME_SEND_ACK(r.roomId, r.serverId, r.channelId, p.slot, String.valueOf(action)));
			ss.buffer.writeInt(acao);
			subHead.flag ^= 0x01;
		}
		if ((subHead.flag & 0x02) > 0) //Animation
		{
			short value = read.readShort();
			ss.buffer.writeShort(value);
			subHead.flag ^= 0x02;
		}
		if ((subHead.flag & 0x08) > 0) //Use Object
		{
			short value = read.readShort();
			ss.buffer.writeShort(value);
			subHead.flag ^= 0x08;
		}
		if ((subHead.flag & 0x20) > 0) //Radio Chat
		{
			UDP_Chat radio = UDP_Chat.valueOf(read.readByte());
			byte area = read.readByte();
            Software.setColor(Color.YELLOW, Color.BLACK);
            logging(" Slot " + udp.slot + " is release a radio chat: radId, localId [" + radio.value + ";" + area + "]", true);
            Software.setColor(Color.WHITE, Color.BLACK);
			ss.buffer.writeByte(radio.value);
			ss.buffer.writeByte(area);
			subHead.flag ^= 0x20;
		}
		if ((subHead.flag & 0x40) > 0) //HP Sync
		{
			UDP_HPSync hp = new UDP_HPSync(read.readShort(), false);
			if (hp.life < 1)
				hp.death = true;
			logging(" HP Sync slot " + p.slot + " >> hp " + hp + " death: " + hp.death, true);
			RoomController.gI().sendPacket(new REQUEST_GAME_SEND_ACK(r.roomId, r.serverId, r.channelId, p.slot, String.valueOf("[HP] Life " + hp + " death: " + hp.death)));
			ss.buffer.writeShort(hp.life);
			subHead.flag ^= 0x40;
		}
		if ((subHead.flag & 0x100) > 0) //Object Status
		{
			ss.buffer.writeShort(read.readShort()); //unk
	        while (read.isReadable())
	        {
	           int type = read.readByte();
	           if (type == 8) //Jogador
               {
                   int objid = read.readShort();
                   int unk1 = read.readShort();
                   byte byte1 = read.readByte();
                   int unk2 = read.readShort();
                   byte byte2 = read.readByte();
                   int hp = read.readShort();
                   ss.buffer.writeByte(type);
                   ss.buffer.writeShort(objid);
                   ss.buffer.writeShort(unk1);
                   ss.buffer.writeByte(byte1);
                   ss.buffer.writeShort(unk2);
                   ss.buffer.writeByte(byte2);
                   ss.buffer.writeShort(hp);
                   Software.setColor(Color.GREEN, Color.BLACK);
                   logging("hitPlayer: objIdx: " + objid + "; unk1: " + unk1 + "; unk2: " + unk2 + "; hp: " + hp, true);
                   Software.setColor(Color.WHITE, Color.BLACK);
               }
               else if (type == 3)
               {
                   int objId = read.readShort();
                   int unk1 = read.readShort();
                   int partIdx = read.readShort();
                   boolean destroyed = read.readBoolean();
                   Software.setColor(Color.YELLOW, Color.BLACK);
                   logging("hitObject: objIdx: " + objId + "; partIdx: " + partIdx + "; unk: " + unk1 + "; destroyed: " + destroyed, true);
                   Software.setColor(Color.WHITE, Color.BLACK);
                   ss.buffer.writeByte(type);
                   ss.buffer.writeShort(objId);
                   ss.buffer.writeShort(unk1);
                   ss.buffer.writeShort(partIdx);
                   ss.buffer.writeBoolean(destroyed);
               }
               read.discardReadBytes(); 
	        }
			subHead.flag ^= 0x100;
		}
		ss.close();
	}
Comandante9901 вне форума Ответить с цитированием