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

模拟服务器

开发平台:

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. MONSTER_ITEM_MANAGER_FILE Struct
  39.  ItemCounter Byte ?
  40.  ItemType Byte ?
  41.  ItemIndex Byte ?
  42.  DevilSquare Byte ?
  43.  BloodCastle Byte ?
  44.  ChaosCastle Byte ?
  45. MONSTER_ITEM_MANAGER_FILE EndS
  46. .const
  47. TOTAL_EVENTS_SUPPORTED equ 3
  48. .data?
  49. pObjMobItemMngFile DD ?
  50. .data
  51. szMonsterItemMng DB ".DataGamePlayMonstersMobItemManager.txt", 0
  52. TotalItemsMobMng DD ?
  53. .code
  54. V_MonsterItemMng_Load Proc
  55. local ItemAddeds:Dword
  56. local SeparatorFounded:Dword
  57. local pThisObj:Dword
  58. local LoopCounter:Dword
  59. local FilePosition:Dword
  60. local pBufferSpace:Dword
  61. local BytesReaded:Dword
  62. local StructFile:WIN32_FILE_ATTRIBUTE_DATA
  63. assume edx:ptr MONSTER_ITEM_MANAGER_FILE
  64. ;------------------------------------------------
  65. ; Clean local variables that are needed
  66. ;------------------------------------------------
  67. And SeparatorFounded, 0
  68. And LoopCounter, 0
  69. And ItemAddeds, 0
  70. ;------------------------------------------------
  71. ; Initialise space for hold data
  72. ;------------------------------------------------
  73. mov eax, TotalItemsLoaded
  74. imul eax, eax, SizeOf MONSTER_ITEM_MANAGER_FILE
  75. fastalloc eax, 2 ;Alloc space = Total items loaded (item.txt)*Size of MONSTER_ITEM_MANAGER_FILE
  76. .If (eax == 0)
  77.   RGB 255, 64, 64 ;Red Collor
  78.   Mov Edx, Eax
  79.   Invoke vprint, $CTA0("MobItemMng:] ERROR IN ALLOCATING SPACE, PLEASE RESTART VeMU"), Edx, 0
  80. .Endif
  81. mov pObjMobItemMngFile, eax
  82. mov pThisObj, eax
  83. ;-------------------------------
  84. ;Load file into memory
  85. ;-------------------------------
  86. lea edx, StructFile
  87. GetFileLength addr szMonsterItemMng, edx
  88. mov eax, StructFile.nFileSizeLow
  89. fastalloc eax, 1 ;alloc space for file
  90. mov pBufferSpace, eax
  91. lea edx, StructFile
  92. lea ecx, BytesReaded
  93. ReadThisFile Addr szMonsterItemMng, pBufferSpace, ecx ;read of file and handles the close
  94. mov ecx, StructFile.nFileSizeLow
  95. add eax, ecx
  96. mov dword ptr [eax], 0 ;Append to 00 byte in the end of file for prevent bugs
  97. xor ecx, ecx
  98. .While (ecx != -1)
  99.   mov ebx, 1 ;Avoid rewrite ItemCounter
  100.   mov edx, pThisObj
  101.   mov ItemAddeds, 0
  102. ;---------------------------------------------------------------------
  103. ;Take all the item types and index variables till the separator
  104. ;---------------------------------------------------------------------
  105.   .Repeat
  106.     push ebx
  107.     invoke GetToken, pBufferSpace, ecx, NULL
  108.     pop ebx
  109.     .If (edx == 1)
  110.       xor eax, eax
  111.       .Break
  112.     .Endif
  113.     mov FilePosition, ecx
  114.     mov edx, pThisObj
  115.     mov [edx + ebx], Al ;Save ItemType or ItemIndex depending of the loop time
  116.     add ebx, 1
  117.     mov eax, LoopCounter
  118.       and eax, 1 ;If its a unpair number then its exponencial (beatifull) (unpair caused we start from the 0 and add the +1 after this check)
  119.       .If (eax == 1) ;If unpair number
  120.         add [edx].ItemCounter, 1
  121.         add ItemAddeds, 1 ;Each 2 reads i assume its a full item readed
  122.       .Endif
  123.     add LoopCounter, 1
  124.     push ebx ;Counter for writte
  125.     invoke GetString, pBufferSpace, ecx ;Search for string "Events" separator
  126.     push ecx
  127.     invoke szCmp, $CTA0("Events"), Addr StringToken
  128.     pop ecx
  129.     pop ebx ;Return counter for writte
  130.     .if (eax != 0)
  131.       mov SeparatorFounded, 1
  132.     .else
  133.       mov ecx, FilePosition ;make like nothing has happen (restoring file position before trying to read the string)
  134.     .endif
  135.   .Until (SeparatorFounded == 1)
  136.   mov LoopCounter, 0
  137.   mov SeparatorFounded, 0
  138. ;---------------------------------------------------------------------
  139. ;Take the events variable
  140. ;---------------------------------------------------------------------
  141.   .Repeat
  142.     push ebx
  143.     invoke GetToken, pBufferSpace, ecx, NULL
  144.     pop ebx
  145.     .If (edx == 1)
  146.       xor eax, eax
  147.       .Break
  148.     .Endif
  149.     mov edx, pThisObj
  150.     mov [edx + ebx], Al ;Save variable for all event supporteds (DS, CC, BC)
  151.     add ebx, 1
  152.     Add LoopCounter, 1
  153.   .Until (LoopCounter == TOTAL_EVENTS_SUPPORTED)
  154.   add edx, ebx
  155.   mov pThisObj, edx
  156.   mov FilePosition, ecx
  157.   mov LoopCounter, 0
  158. ;---------------------------------------------------------------------
  159. ;Check limits !
  160. ;---------------------------------------------------------------------
  161.   mov edx, ItemAddeds
  162.   add TotalItemsMobMng, edx
  163.   mov ItemAddeds, 0
  164.   mov eax, TotalItemsLoaded
  165.   .if (TotalItemsMobMng > eax)
  166.     RGB 255, 64, 64 ;Red Collor
  167. Mov Edx, Eax
  168. Invoke vprint, $CTA0("MobItemMng:] ERROR YOU CANT BLOCK MORE THAN :  [%d] ITEMS"), Edx, 1, TotalItemsLoaded
  169.     mov eax, 1
  170.     .Break
  171.   .endif
  172.   invoke GetString, pBufferSpace, ecx ;Search for string "End"
  173.   push ecx
  174.   invoke szCmp, $CTA0("end"), Addr StringToken
  175.   pop ecx
  176.   .if (eax != 0)
  177.     push ecx
  178.     invoke GetToken, pBufferSpace, ecx, NULL ;Lets check if its really the end of file
  179.     pop ecx
  180.     .if (edx == 1)
  181.       mov eax, 1
  182.       .Break
  183.     .endif
  184.     xor ebx, ebx
  185.     .Continue ;Loop Back
  186.   .endif
  187.   xor ebx, ebx
  188.   mov ecx, FilePosition
  189. .Endw
  190. .If (eax == 0)
  191.   RGB 255, 64, 64 ;Red Collor
  192.   Mov Edx, Eax
  193.   Invoke vprint, $CTA0("MobItemMng:] UNKNOWN ERROR, LAST ITEM LOADED :  [%d]"), Edx, 1, TotalItemsMobMng
  194. .Else
  195.   RGB 24, 116, 205 ;Light blue
  196.   Mov Edx, Eax
  197.   Invoke vprint, $CTA0("MobItemMng:] Operation Successful total items blocked :  [%d]"), Edx, 1, TotalItemsMobMng
  198. .Endif
  199. FastDeAlloc pBufferSpace, NULL, 0 ;Free the heap when we dont use it anymore
  200. ret
  201. V_MonsterItemMng_Load EndP