V-ConnectServer.asm
上传用户:santakups8
上传日期:2021-03-23
资源大小:544k
文件大小:4k
源码类别:

模拟服务器

开发平台:

Asm

  1. ;EasyCodeName=Module1,1
  2. ;-----------------------------------------------------------------------------------
  3. ;    VeMU
  4. ;    Its a package that allows the user to set his own server of the game
  5. ;    "MuOnline", this is not an emulator since i am not "emulating"
  6. ;    what the actual games does, i am "creating" a method for set a Server
  7. ;    of this Game.
  8. ;
  9. ;    Copyright (C) 2010  Felipe Ya馿z
  10. ;
  11. ;    This program is free software: you can redistribute it and/or modify
  12. ;    it under the terms of the GNU General Public License as published by
  13. ;    the Free Software Foundation, either version 3 of the License, or
  14. ;    (at your option) any later version.
  15. ;
  16. ;    This program is distributed in the hope that it will be useful,
  17. ;    but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. ;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19. ;    GNU General Public License for more details.
  20. ;
  21. ;    You should have received a copy of the GNU General Public License
  22. ;    along with this program.  If not, see http://www.gnu.org/licenses/.
  23. ;-----------------------------------------------------------------------------------
  24. ;-----------------------------------------------------------------------------------
  25. ;                        -----------------
  26. ;                             Coded     /
  27. ;                              By      /
  28. ;                           -={FeN$x)=-
  29. ;                         /  Felipe Y.  
  30. ;                        /               
  31. ;                        -----------------
  32. ; Programming Lang: ASM
  33. ; Country: Chile
  34. ;              My respect for all those who lost their lifes
  35. ;              In the earthquake of my country...
  36. ;              Let god take their spirits home...
  37. ;-----------------------------------------------------------------------------------
  38. V_CS_ProtocolCore Proto :Dword, :Dword, :Dword
  39. Packet_CS_InfoPacket Struct
  40.  UniHeaders PacketHeaders <>
  41.  ServerCode Word ? ;Server Code
  42.  ConnectedPlayers Byte ? ;ConnectedPlayers * 100 / 500
  43.  NoUsage Byte ? ;The name says it
  44.  TotalPlayers Word ? ;Real counter of total players connected, no calculation needed
  45.  LoginCounter Word ? ;A counter with all the attemps of login
  46.  LoginCounter2 Word ? ;For no usage rigth now
  47.  MaxPlayers Word ? ;Max players can be connected to server (originally 500)
  48. Packet_CS_InfoPacket EndS
  49. .Const
  50. .Data?
  51. .Data
  52. .Code
  53. V_CS_ProtocolCore Proc PacketHeader:DWord, pRecvBuffer:DWord, PacketLength:DWord
  54. .const
  55. CSProto_MaxHeader Equ 7BH
  56. .Data
  57. ;===========
  58. ;Case Code
  59. ;===========
  60.   CSCaseCode Byte 2 Dup (0, 1)
  61. ;===========
  62. ;jump table
  63. ;===========
  64.  Align 4
  65. CSjmpTable DD Offset CSCase0
  66.            DD Offset CSCase1
  67. .Code
  68. Mov Eax, PacketHeader
  69. .If (Eax > CSProto_MaxHeader)
  70. .else
  71.   Xor Ecx, Ecx
  72.   Mov Cl, Byte Ptr [Eax + CSCaseCode]
  73.   Jmp DWord Ptr [Ecx * 4 + CSjmpTable] ;Jump table optimised C++
  74. CSCase0: ;Invalid case, i dont like Case 00
  75.   Jmp CSEndProcedure
  76. CSCase1: ;SubHeader 01
  77.   Jmp CSEndProcedure
  78. .endif
  79. CSEndProcedure:
  80.  Ret
  81. V_CS_ProtocolCore EndP
  82. V_CS_InfoSend Proc
  83. local MyStruct:Dword
  84. mov MyStruct, ecx
  85. lea eax, InternalPacket
  86. assume eax:ptr Packet_CS_InfoPacket
  87. Mov [eax].UniHeaders.PacketType, 0C1H
  88. Mov [eax].UniHeaders.PacketLength, 10H
  89. Mov [eax].UniHeaders.Header, 1
  90. Mov [eax].UniHeaders.SubHeader, 10H
  91. Mov Edx, ServerCode
  92. Mov [eax].ServerCode, Dx
  93. .If (TotalPlayers != 0)
  94.     push eax ;Save struct
  95.     mov edx, MAXSERVERUSER
  96.     mov eax, TotalPlayers
  97.     IMul Eax, Eax, 100
  98.     Cdq
  99.     IDiv edx  ;TotalPlayers * 100 / MaxServerUsers
  100.     mov dl, al
  101.     pop eax ;Return Struct
  102.     Mov [eax].ConnectedPlayers, Dl
  103. .Else
  104.   Mov [eax].ConnectedPlayers, 0
  105. .EndIf
  106. Mov ecx, TotalPlayers
  107. Mov [eax].TotalPlayers, Cx
  108. Mov edx, LoginCounter
  109. Mov [eax].LoginCounter, Dx
  110. Mov [eax].LoginCounter2, 0 ;for now no usage
  111. Mov ecx, MAXSERVERUSER
  112. Mov [eax].MaxPlayers, Cx
  113. Mov Ecx, MyStruct
  114. Invoke V_Sock_Send, Addr InternalPacket, [eax].UniHeaders.PacketLength
  115. Ret
  116. V_CS_InfoSend EndP