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

模拟服务器

开发平台:

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. pObj Macro Counter:REQ, Length:REQ, pMyObj:REQ
  39.   Mov Eax, Counter
  40.   IMul Eax, Eax, Length
  41.   Add Eax, Offset pMyObj
  42. EndM
  43. VSetRect Macro posLEFT:REQ, posTOP:REQ, posRIGHT:REQ, posBOTTOM:REQ, pRECT:REQ
  44.   push ecx
  45.   invoke SetRect, pRECT,  posLEFT, posTOP, posRIGHT, posBOTTOM
  46.   pop ecx
  47. EndM
  48. GetFileLength Macro pFileName:REQ, pFile_Attribute_Data:REQ
  49. invoke GetFileAttributesEx, pFileName, NULL, edx ; NULL = GetFileExInfoStandard
  50. EndM
  51. fastalloc Macro AllocSpace:REQ, TypeAlloc:REQ
  52. IF TypeAlloc eq 1
  53.  .If (V_ProcessHeapHandle == 0)
  54.     Invoke GetProcessHeap
  55.     Mov V_ProcessHeapHandle, Eax
  56.  .Else
  57.     Mov Eax, V_ProcessHeapHandle
  58.  .EndIf
  59.  Invoke HeapAlloc, Eax, NULL, AllocSpace
  60.  .If (Eax == NULL)
  61.  .EndIf
  62. ELSEIF TypeAlloc eq 2
  63.  Invoke VirtualAlloc, NULL, AllocSpace, MEM_COMMIT, PAGE_EXECUTE_READWRITE
  64.  .If (Eax == NULL)
  65.  .EndIf
  66. ELSE
  67. ENDIF
  68. EndM
  69. FastDeAlloc Macro pBuffer:REQ, RegionSize:REQ, VirtualOrHeap:REQ
  70. IF VirtualOrHeap eq 1
  71.  invoke VirtualFree, pBuffer, RegionSize, MEM_RELEASE
  72. ELSE
  73.  invoke HeapFree, V_ProcessHeapHandle, HEAP_NO_SERIALIZE, pBuffer
  74. ENDIF
  75. EndM
  76. ReadThisFile Macro pFileName:REQ, pBufferSpace:REQ, pBytesReaded:REQ
  77. push ecx ;BytesReaded
  78. Invoke CreateFile, pFileName, GENERIC_READ, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL
  79. pop ecx
  80. Push Eax ;Save handler
  81. Invoke ReadFile, Eax, pBufferSpace, dword ptr StructFile.nFileSizeLow, ecx, NULL
  82. Pop Eax ;retun handler
  83. Invoke CloseHandle, Eax
  84. mov eax, pBufferSpace
  85. EndM
  86. .Const
  87. .Data?
  88. .Data
  89. .Code
  90. vprint Proc C vString:DWord, sRGB:DWord, Args:VarArg
  91. Local StringBuffer[MAXPRINTCHAR]:Byte
  92. Local LinesCounter:DWord
  93. Local TotalSize:DWord
  94. local msg:MSG
  95. Assume Eax:Ptr VPRINTs
  96. Invoke V_ZeroBuff, addr StringBuffer, MAXPRINTCHAR
  97. ;------------------------------------------------------------------------------------------------------------------------
  98. ;DONT EDIT THIS, ITS THE STACK ALIGMENT FOR USE THE PRINT SYSTEM IN A MORE "EASY WAY"
  99. ;------------------------------------------------------------------------------------------------------------------------
  100. Mov Eax, Args
  101. test eax, eax
  102. je @2
  103. lea edx, Args
  104. @1:
  105.   push DWord Ptr [edx + Eax * 4]
  106.   Sub Eax, 1
  107.   test eax, eax
  108.   jnz @1
  109. @2:
  110. ;------------------------------------------------------------------------------------------------------------------------
  111. push vString
  112. lea eax, StringBuffer
  113. push eax
  114. call wsprintf
  115. .If (VPrintTotalLines >= MAXPRINTLINES) ;If we exceed the max of print lines possible in window
  116.   mov VPrintTotalLines, 0
  117.   xor eax, eax
  118.   .Repeat
  119.      push eax
  120.      pObj eax, SizeOf VPRINTs, pObjectPaint
  121.      invoke V_ZeroBuff, addr [eax].vString, sizeof VPRINTs.vString ;Clean old text
  122.      pop eax
  123.      add eax, 1
  124.   .Until (eax == MAXPRINTLINES)
  125.   invoke InvalidateRect, GShWnd, NULL, TRUE ;Erase the background
  126. .Endif
  127. Invoke lstrlen, Addr StringBuffer
  128. Mov Edx, Eax
  129. pObj VPrintTotalLines, SizeOf VPRINTs, pObjectPaint
  130. Mov [Eax].vStringLength, Edx ;Save length
  131. push eax
  132. Invoke MemCopy, Addr StringBuffer, Addr [Eax].vString, Edx ;copy to virtual struct "String Buffer"
  133. pop eax
  134. Mov Ecx, sRGB
  135. Mov [Eax].vRGB, Ecx ;save RGB value into virtual struct
  136. Add VPrintTotalLines, 1 ;add one line added into global counter
  137. Mov VPrintNewLine, 1 ;lets print it
  138. mov eax, GShWnd
  139. mov msg.hwnd, eax
  140. mov msg.message, WM_PAINT
  141. invoke DispatchMessage, addr msg ;Update window now
  142. Ret
  143. vprint EndP
  144. V_VectorCreator Proc uses ecx pAllocStruct:DWord, pVectorConstructor:DWord, StructSize:DWord, InitTimes:DWord
  145. Local pAllocatedStruct:DWord
  146. Local Counter:DWord
  147.  Mov Counter, 0
  148.  mov Eax, pAllocStruct
  149.  Mov Ecx, Eax
  150.  .Repeat
  151.    push ecx ;Avoid bugs in case you forget to use proc "uses ecx"
  152.    Call pVectorConstructor ;call the vector constructor that must have proc uses ecx
  153.    pop ecx ;Avoid bugs in case you forget to use proc "uses ecx"
  154.    Add Ecx, StructSize
  155.    Add Counter, 1
  156.    Mov Eax, Counter
  157.  .Until (Eax == InitTimes)
  158.  Ret
  159. V_VectorCreator EndP
  160. V_ZeroBuff Proc pAddr:DWord, RepTimes:DWord
  161. push edi
  162. mov edi, pAddr
  163. mov ecx, RepTimes
  164. shr ecx, 2
  165. xor edx, edx
  166. xor eax, eax
  167. rep stosd
  168. pop edi
  169. Ret
  170. V_ZeroBuff EndP
  171. GetToken Proc pMemSpace:DWord, StartByte:Dword, Brackets:Dword
  172. Local IsComment:Dword
  173. Local BytesReaded:DWord
  174. Local TerminatedFile:Byte
  175.  And TerminatedFile, 0
  176.  And BytesReaded, 0
  177.  And IsComment, 0
  178.  invoke V_ZeroBuff, Addr SaveBytes, SizeOf SaveBytes
  179.  mov ecx, StartByte
  180.  .While (Ecx != -1) ;its a infinite loop
  181.    Mov Eax, pMemSpace
  182. ;//////////////////////////////////
  183. ; Checkea End of file 00 Byte
  184. ;//////////////////////////////////
  185.    .If (Byte Ptr Ds:[Eax + Ecx] == 0) ;ENDIFILE
  186.          Mov TerminatedFile, 1
  187.       .Break
  188. ;///////////////////////////////
  189. ; Check Comment / Character
  190. ;///////////////////////////////
  191.    .ElseIf (Byte Ptr Ds:[Eax + Ecx] == 2FH)
  192.      Add Ecx, 1
  193.      mov IsComment, 1
  194.      .Continue
  195. ;///////////////////////////////
  196. ; Check "09" byte
  197. ;///////////////////////////////
  198.    .ElseIf (Byte Ptr Ds:[Eax + Ecx] == 09H)
  199.     .If (BytesReaded == 0) || (IsComment == 1)
  200.        add ecx, 1
  201.       .Continue
  202.     .endif
  203.     add ecx, 1
  204.     .break
  205. ;///////////////////////////////
  206. ; Check SPACE byte
  207. ;///////////////////////////////
  208.    .ElseIf (Byte Ptr Ds:[Eax + Ecx] == 20H)
  209.      .if (BytesReaded != 0)
  210.        add ecx, 1 ;Ignore space
  211.        .Break
  212.      .elseif (IsComment == 1)
  213.        add ecx, 1
  214.        .Continue
  215.      .else
  216.      .endif
  217.      add ecx, 1
  218.      .Continue
  219. ;/////////////////////////////////
  220. ; Check ENTER (0D, 0A)
  221. ;/////////////////////////////////
  222.    .ElseIf (Byte Ptr Ds:[Eax + Ecx] == 0DH) ;NEXT LINE:> FIRST BYTE
  223.       Add Ecx, 1 ;Read Next Byte
  224.       .If (Byte Ptr Ds:[Eax + Ecx] == 0AH) ;NEXT LINE:>  SECOND BYTE
  225.          add ecx, 1
  226.         .if (IsComment == 1)
  227.            mov IsComment, 0
  228.            .continue
  229.         .elseif (BytesReaded != 0) ;If i already read a byte
  230.           .Break
  231.         .else
  232.         .endif
  233.       .Endif
  234.       .Continue
  235. ;/////////////////////////////////
  236. ; Save bytes into buffer
  237. ;/////////////////////////////////
  238.    .Else
  239.      .if (IsComment == 1)
  240.        add ecx, 1
  241.        .continue
  242.      .endif
  243.      Push Ecx ;save ECX in stack
  244.      Lea Ebx, SaveBytes
  245.      Mov Dl, Byte Ptr Ds:[Eax + Ecx]
  246.      Mov Ecx, BytesReaded
  247.      Mov Byte Ptr Ds:[Ebx + Ecx], Dl
  248.      Add BytesReaded, 1
  249.      Pop Ecx
  250.      Add Ecx, 1
  251.    .EndIf
  252.  .EndW
  253. ;/////////////////////////////////
  254. ; Convert ASCII to DECIMAL
  255. ;/////////////////////////////////
  256.  Push Ecx ;save ECX value
  257.  Invoke atol, addr SaveBytes  ; ASCII to HEX
  258.  Pop Ecx
  259.  Movsx Edx, TerminatedFile
  260.  Ret
  261. GetToken EndP
  262. GetString Proc uses eax BufferFile:DWord, ReadFileByte:DWord
  263. Local fLength:DWord
  264. Local StartLong:Dword
  265. Local IsComment:Dword
  266. Invoke V_ZeroBuff, Addr StringToken, SizeOf StringToken
  267. And fLength, 0
  268. And StartLong, 0
  269. And IsComment, 0
  270. Xor Ebx, Ebx
  271. Mov Ecx, ReadFileByte
  272. Mov Eax, BufferFile
  273. .While (Ecx != -1) ;its a infinite loop
  274. ;//////////////////////////////////
  275. ; Checkea End of file 00 Byte
  276. ;//////////////////////////////////
  277.   .If (Byte Ptr [Eax + Ecx] == 0)
  278.     Xor Edx, Edx
  279.     Mov Edx, 1
  280.     .break
  281. ;///////////////////////////////
  282. ; Check SPACE byte
  283. ;///////////////////////////////
  284.   .ElseIf (Byte Ptr [Eax + Ecx] == 20H) ;ESPACE
  285.     .if (IsComment == 1)
  286.        add ecx, 1
  287.        .Continue
  288.     .elseif (StartLong == 1)
  289.        jmp SaveByte
  290.     .elseif (fLength != 0)
  291.        add ecx, 1
  292.        .Break
  293.     .else
  294.       add ecx, 1
  295.       .Continue
  296.     .endif
  297. ;///////////////////////////////
  298. ; Check Comment / Character
  299. ;///////////////////////////////
  300.    .ElseIf (Byte Ptr Ds:[Eax + Ecx] == 2FH)
  301.      Add Ecx, 1
  302.      mov IsComment, 1
  303.      .Continue
  304. ;///////////////////////////////
  305. ; Check "09" byte
  306. ;///////////////////////////////
  307.    .ElseIf (Byte Ptr Ds:[Eax + Ecx] == 09H)
  308.     .If (fLength == 0) || (IsComment == 1)
  309.        add ecx, 1
  310.       .Continue
  311.     .endif
  312.     add ecx, 1
  313.     .break
  314. ;///////////////////////////////
  315. ; Check <"> byte
  316. ;///////////////////////////////
  317.   .ElseIf (Byte ptr [eax + ecx] == 22H) ;<">
  318.      .if (IsComment == 1)
  319.        add ecx, 1
  320.        .Continue
  321.      .endif
  322.      .if (StartLong == 0 || StartLong == 1)
  323.         add StartLong, 1
  324.         add ecx, 1
  325.         .if (StartLong == 2)
  326.            add ecx, 1
  327.            .break
  328.         .endif
  329.      .endif
  330.      .continue ;Volvemos al loop
  331. ;/////////////////////////////////
  332. ; Check ENTER (0D, 0A)
  333. ;/////////////////////////////////
  334.    .ElseIf (Byte Ptr Ds:[Eax + Ecx] == 0DH) ;NEXT LINE:> FIRST BYTE
  335.       Add Ecx, 1 ;Read Next Byte
  336.       .If (Byte Ptr Ds:[Eax + Ecx] == 0AH) ;NEXT LINE:>  SECOND BYTE
  337.          add ecx, 1
  338.         .if (IsComment == 1)
  339.            mov IsComment, 0
  340.            .continue
  341.         .elseif (fLength != 0) ;If i already read a byte
  342.           .Break
  343.         .else
  344.         .endif
  345.       .Endif
  346.       .Continue
  347. ;/////////////////////////////////
  348. ; Save STRING
  349. ;/////////////////////////////////
  350.    .Else
  351. SaveByte:
  352.     .if (IsComment == 1)
  353.       add ecx, 1
  354.       .continue
  355.     .endif
  356.     Mov Dl, Byte Ptr Ds:[Eax + Ecx]
  357.     Lea Esi, [StringToken]
  358.     Mov Byte Ptr Ds:[Esi + Ebx], Dl
  359.     Add Ecx, 1
  360.     Add Ebx, 1
  361.     Add fLength, 1
  362.   .EndIf
  363. .Endw
  364. Ret
  365. GetString EndP