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

模拟服务器

开发平台:

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. ;                          ||Coded by Noob22||
  26. ;                          -------------------
  27. ; Programming Langs: C++ & ASM
  28. ; Country: Brazil
  29. ;------------------------------------------------------------------------------------
  30. LOG_SYSTEM_INFO Struct
  31.   Number DWord ?
  32.   Color DWord ?
  33.   TextSize DWord ?
  34.   TextBuff CHAR MAXPRINTCHAR Dup (?)
  35. LOG_SYSTEM_INFO EndS
  36. .Const
  37. WM_LOG_PAINT equ 666 ;- > Unique ID
  38. MAXLOGTABLE Equ 4 ;Edit here for more support
  39. .Data
  40. LogPrintEnableTable DB MAXLOGTABLE Dup (?)
  41. LogDirectoryTable DD MAXLOGTABLE Dup (?)
  42. LogDirectory1 DB ".ALL_LOGSLOG", 0
  43. LogDirectory2 DB ".ALL_LOGSMAP_LOG", 0
  44. LogDirectory3 DB ".ALL_LOGSMONSTER_LOG", 0
  45. LogDirectory4 DB ".ALL_LOGSITEM_LOG", 0
  46. .Code
  47. V_LogSystem_Init Proc
  48. ;---------------------------------------------------------------------------------------------
  49. ; Set which log type is going to be printed on screen
  50. ;---------------------------------------------------------------------------------------------
  51. Mov Byte Ptr [LogPrintEnableTable + 0], 1
  52. Mov Byte Ptr [LogPrintEnableTable + 1], 1
  53. Mov Byte Ptr [LogPrintEnableTable + 2], 1
  54. Mov Byte Ptr [LogPrintEnableTable + 3], 1
  55. ;---------------------------------------------------------------------------------------------
  56. ; Set Directory Table Info
  57. ;---------------------------------------------------------------------------------------------
  58. Mov DWord Ptr [LogDirectoryTable + 0], Offset LogDirectory1
  59. Mov DWord Ptr [LogDirectoryTable + 4], Offset LogDirectory2
  60. Mov DWord Ptr [LogDirectoryTable + 8], Offset LogDirectory3
  61. Mov DWord Ptr [LogDirectoryTable + 12], Offset LogDirectory4
  62. ;---------------------------------------------------------------------------------------------
  63. ; Create Directory's
  64. ;---------------------------------------------------------------------------------------------
  65. Invoke CreateDirectory, Addr LogDirectory1, 0
  66. Invoke CreateDirectory, Addr LogDirectory2, 0
  67. Invoke CreateDirectory, Addr LogDirectory3, 0
  68. Invoke CreateDirectory, Addr LogDirectory4, 0
  69. Ret
  70. V_LogSystem_Init EndP
  71. V_LogSystem_Output Proc C Number:DWord, Color:DWord, Text:DWord, Args:VarArg
  72. Local TextBuff[MAXPRINTCHAR]:CHAR
  73. Local TempBuff[MAXPRINTCHAR]:CHAR
  74. Local TextSize:DWord
  75. Local pAddr:DWord
  76. Local Time:SYSTEMTIME
  77. ;---------------------------------------------------------------------------------------------
  78. ; Zero Buff memory and get time info
  79. ;---------------------------------------------------------------------------------------------
  80. Invoke V_ZeroBuff, Addr TextBuff, SizeOf TextBuff
  81. Invoke V_ZeroBuff, Addr TempBuff, SizeOf TempBuff
  82. Invoke GetLocalTime, Addr Time
  83. ;---------------------------------------------------------------------------------------------
  84. ; Call wsprintf and set time information on text
  85. ;---------------------------------------------------------------------------------------------
  86. Invoke wsprintf, Addr TempBuff, $CTA0("%02d:%02d:%02d %sn"), Word Ptr Time.wHour, Word Ptr Time.wMinute, Word Ptr Time.wSecond, Text
  87. Mov Eax, Args
  88. .If (Eax != 0)
  89. Lea Ecx, Args
  90. .Repeat
  91. Push DWord Ptr [Ecx + Eax * 4]
  92. Sub Eax, 1
  93. .Until (Eax == 0)
  94. .EndIf
  95. Invoke wsprintf, Addr TextBuff, Addr TempBuff
  96. ;---------------------------------------------------------------------------------------------
  97. ; Get TextBuff string size
  98. ;---------------------------------------------------------------------------------------------
  99. Invoke lstrlen, Addr TextBuff
  100. Add Eax, 1
  101. Mov TextSize, Eax
  102. ;---------------------------------------------------------------------------------------------
  103. ; Alloc Memory for LOG_SYSTEM_INFO
  104. ;---------------------------------------------------------------------------------------------
  105. Mov Eax, MAXPRINTCHAR
  106. Sub Eax, TextSize
  107. Mov Ecx, SizeOf LOG_SYSTEM_INFO
  108. Sub Ecx, Eax
  109. fastalloc ecx, 1
  110. .If (Eax == 0)
  111. Jmp @PROC_END
  112. .EndIf
  113. Mov pAddr, Eax
  114. ;---------------------------------------------------------------------------------------------
  115. ; Alloc struct info
  116. ;---------------------------------------------------------------------------------------------
  117. Assume Eax:Ptr LOG_SYSTEM_INFO
  118. Mov Ecx, Number
  119. Mov [Eax].Number, Ecx
  120. Mov Ecx, Color
  121. Mov [Eax].Color, Ecx
  122. Mov Ecx, TextSize
  123. Mov [Eax].TextSize, Ecx
  124. Lea Esi, TextBuff
  125. Lea Edi, [Eax].TextBuff
  126. Rep Movsb
  127. ;---------------------------------------------------------------------------------------------
  128. ; Put a message on main window queue
  129. ;---------------------------------------------------------------------------------------------
  130. Invoke PostMessage, GShWnd, WM_LOG_PAINT, pAddr, 0
  131. @PROC_END:
  132. Ret
  133. V_LogSystem_Output EndP
  134. V_LogSystem_Print Proc pAddr:DWord
  135. Local Time:SYSTEMTIME
  136. Local File:HANDLE
  137. Local OutSize:DWord
  138. Local PathBuff[32]:Byte
  139. ;---------------------------------------------------------------------------------------------
  140. ; Check if addr is valid
  141. ;---------------------------------------------------------------------------------------------
  142. Mov Ecx, pAddr
  143. .If (Ecx == 0)
  144. Jmp @PROC_END3
  145. .EndIf
  146. Assume Ecx:Ptr LOG_SYSTEM_INFO
  147. ;---------------------------------------------------------------------------------------------
  148. ; Check if log number is correct
  149. ;---------------------------------------------------------------------------------------------
  150. .If ([Ecx].Number >= MAXLOGTABLE) ;It start from 0 to 4 thats why if == 4 then invalid
  151. Jmp @PROC_END2
  152. .EndIf
  153. ;---------------------------------------------------------------------------------------------
  154. ; Check if we want to print info on screen
  155. ;---------------------------------------------------------------------------------------------
  156. Mov Eax, [Ecx].Number
  157. Movzx Edx, Byte Ptr [LogPrintEnableTable + Eax]
  158. .If (Edx != 0)
  159.     lea eax, [ecx].TextBuff
  160.     mov edx, [ecx].TextSize
  161.     add eax, edx
  162.     mov word ptr [eax - 3], 0 ;Clean /n character at the end of text
  163.     push eax
  164. Invoke vprint, Addr [Ecx].TextBuff, [Ecx].Color, 0
  165.     pop eax
  166.     mov word ptr [eax - 3], 0A0Dh ;Return the /n character
  167. .EndIf
  168. ;---------------------------------------------------------------------------------------------
  169. ; Zero Buff and Get Time Info
  170. ;---------------------------------------------------------------------------------------------
  171. Invoke V_ZeroBuff, Addr PathBuff, SizeOf PathBuff
  172. Invoke GetLocalTime, Addr Time
  173. ;---------------------------------------------------------------------------------------------
  174. ; Make file name with data stuff
  175. ;---------------------------------------------------------------------------------------------
  176. Mov Ecx, pAddr
  177. Mov Eax, [Ecx].Number
  178. Mov Edx, DWord Ptr [LogDirectoryTable + Eax * 4]
  179. Invoke wsprintf, Addr PathBuff, $CTA0("%s\%02d-%02d-%04d.txt"), Edx, Word Ptr Time.wDay, Word Ptr Time.wMonth, Word Ptr Time.wYear
  180. ;---------------------------------------------------------------------------------------------
  181. ; Write info on buff, Yey!
  182. ;---------------------------------------------------------------------------------------------
  183. Invoke CreateFile, Addr PathBuff, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
  184. .If (Eax == 0)
  185. Jmp @PROC_END2
  186. .EndIf
  187. Mov File, Eax
  188. Invoke SetFilePointer, File, 0, 0, FILE_END
  189. .If (Eax == INVALID_SET_FILE_POINTER)
  190. Jmp @PROC_END1
  191. .EndIf
  192. Mov Ecx, pAddr
  193. Mov Edx, [Ecx].TextSize
  194. Sub Edx, 1
  195. Invoke WriteFile, File, Addr [Ecx].TextBuff, Edx, Addr OutSize, 0
  196. ;---------------------------------------------------------------------------------------------
  197. ; Free allocated memory, of course
  198. ;---------------------------------------------------------------------------------------------
  199. @PROC_END1:
  200. Invoke CloseHandle, File
  201. @PROC_END2:
  202. Invoke GetProcessHeap
  203. Invoke HeapFree, Eax, HEAP_NO_SERIALIZE, pAddr
  204. @PROC_END3:
  205. Ret
  206. V_LogSystem_Print EndP