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

模拟服务器

开发平台:

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. Object Struct
  39.  ObjCleaned Dword ? ;Identifier for know if this section of pObjSpace has been cleaned
  40.  ObjectID DWord ? ;Used has ClientID, also knowed as PlayerID (but its also for mobs)
  41.  Connected DWord ? ;If 0 == Not connected if 1 == Connected
  42.  Socket Dword ? ;
  43.  SocketContext DWord ? ;Pointer to struct _PER_SOCKET_CONTEXT (not used for now)
  44.  ObjCreationTime DWord ? ;Researching why used for
  45.  RecallMonster DWord ?
  46.  TempMagicInfo Dword ? ;Researching why we need it (dont edit for now)
  47.  MagicInfo DWord ?
  48.  pMobInventory Dword ? ;This variable should never been touch for players
  49.  Inventory1 DWord ?
  50.  Inventory2 DWord ?
  51.  InventoryMap1 DWord ?
  52.  InventoryMap2 DWord ?
  53.  InventoryTrade DWord ?
  54.  TradeMap DWord ?
  55.  WareHouse DWord ?
  56.  WareHouseMap DWord ?
  57.  WareHouseCount Dword ?
  58.  ChaosBox Dword ?
  59. Object EndS
  60. .Const
  61. .Data?
  62. .Data
  63. .Code
  64. V_Obj_Init Proc
  65. Local PlayerIndexCounter:DWord
  66. Local VectorRep:DWord
  67. ;//////////////////////
  68. ;Clean some local vars
  69. ;//////////////////////
  70. Mov PlayerIndexCounter, 0
  71. Mov VectorRep, 0
  72. ;-------------------------------------------------------------------------------
  73. ;Constructs vectors for:
  74. ;TempInventory & TempInventoryMap
  75. ;
  76. ;FOR NOW IT HAVE NO REAL USAGE
  77. ;-------------------------------------------------------------------------------
  78. ;.Repeat
  79. ; .if (VectorRep == 0)
  80. ;   lea eax, pTempInventory ;Temporal inventory
  81. ; .else
  82. ;   lea eax, pTempInventoryMap
  83. ; .endif
  84. ; Invoke V_VectorCreator, Eax, Offset V_CItem_Clear, SizeOf ItemStruct, INVENTORY_SIZE ;Vector constructor
  85. ; add VectorRep, 1
  86. ;.until (VectorRep == 2)
  87. ;mov VectorRep, 0
  88. ;/////////////////////////////////////////
  89. ;Lets make the loop for mobs and players
  90. ;/////////////////////////////////////////
  91. .Repeat
  92. ;-------------------------------------------------------------------------------
  93. ;Clean ObjectStruct to 00 bytes
  94. ;-------------------------------------------------------------------------------
  95.  pObj PlayerIndexCounter, SizeOf Object, pObjSpace ;Macro to make lpObj
  96.  push eax ;Save struct
  97.  Invoke V_ZeroBuff, Eax, SizeOf Object ;fill Obj with ZERO bytes
  98.  pop eax ;Return struct
  99. ;-------------------------------------------------------------------------------
  100. ;Set some basic data to Obj Struct for Mobs and Players
  101. ;-------------------------------------------------------------------------------
  102.  Assume Eax:Ptr Object
  103.  Mov [Eax].ObjCleaned, 0FFH ;ID for check if object is empty (cleaned)
  104.  Mov [Eax].Socket, -1 ;Set Socket inactive mode
  105.  Mov [Eax].RecallMonster, -1 ;Set Recall Monster inactive mode
  106.  Push Eax
  107.  Invoke GetTickCount
  108.  Mov Edx, Eax
  109.  Pop Eax
  110.  Mov [Eax].ObjCreationTime, Edx ;Save current Tick Count time in Obj Struct
  111. ;-------------------------------------------------------------------------------
  112. ;Constructs vectors for:
  113. ;TempMagicInfo & MagicInfo
  114. ;Save into respective Obj struct
  115. ;-------------------------------------------------------------------------------
  116.  .Repeat
  117.  pObj PlayerIndexCounter, SizeOf Object, pObjSpace ;Calc object
  118.    .if (VectorRep == 0)
  119.      lea edx, pTempMagicInfo
  120.      lea eax, [eax].TempMagicInfo
  121.    .else
  122.      lea edx, pMagicInfo
  123.      lea eax, [eax].MagicInfo
  124.    .endif
  125.    push edx
  126.    push eax
  127.    Invoke V_VectorCreator, Edx, Offset V_MagicInfo_Clear, SizeOf MagicInfo, MAGIC_CAPACITY
  128.    pop eax
  129.    pop edx
  130.    mov [eax], edx
  131.    add VectorRep, 1
  132.  .until (VectorRep == 2)
  133.  mov VectorRep, 0
  134.  .If (PlayerIndexCounter >= START_OBJ_PLAYERID) ;If PlayerIDObjects
  135. ;//////////////////////////////////
  136. ;Players Object !
  137. ;//////////////////////////////////
  138. ;-------------------------------------------------
  139. ;Constructs vectors for:
  140. ;Inventory1, Inventory2, TradeInv, WareHouse
  141. ;Later save pointers to respective Obj struct
  142. ;------------------------------------------------------------------------------------------------------------------------
  143.   .Repeat
  144.    pObj PlayerIndexCounter, SizeOf Object, pObjSpace ;Calc object
  145.      .If (VectorRep == 0) ;First time loop
  146.        mov ecx, INVENTORY_SIZE
  147.        lea eax, [eax].Inventory1
  148.        lea edx, pInventory1
  149.      .elseif (VectorRep == 1) ;Second time loop
  150.        mov ecx, INVENTORY_SIZE
  151.        lea eax, [eax].Inventory2
  152.        lea edx, pInventory2
  153.      .elseif (VectorRep == 2) ;Third time loop
  154.        mov ecx, TRADEINV_SIZE
  155.        lea eax, [eax].InventoryTrade
  156.        lea edx, pTempTradeInv
  157.      .elseif (VectorRep == 3) ;Fourth time loop
  158.        mov ecx, WAREHOUSE_SIZE
  159.        lea eax, [eax].WareHouse
  160.        lea edx, pTempWareHouse
  161.      .else
  162.      .endif
  163.      push eax
  164.      push edx
  165.     Invoke V_VectorCreator, Edx, Offset V_CItem_Clear, SizeOf ItemStruct, ecx ;Create vector
  166.      pop edx
  167.      pop eax
  168.      mov [eax], edx ;Save into player struct
  169.      Add VectorRep, 1
  170.   .Until (VectorRep == 4)
  171.   Mov VectorRep, 0
  172. ;-------------------------------------------------
  173. ;Set into PlayerObject Struct
  174. ;*InventoryMap1, *InventoryMap2, *TradeMap
  175. ;------------------------------------------------------------------------------------------------------------------------
  176.   pObj PlayerIndexCounter, SizeOf Object, pObjSpace ;Calc object
  177.   .Repeat
  178.      .If (VectorRep == 0)
  179.          lea edx, pInventoryMap1
  180.       Mov [Eax].InventoryMap1, Edx
  181.      .Elseif (VectorRep == 1)
  182.          lea edx, pInventoryMap2
  183.          Mov [Eax].InventoryMap2, Edx
  184.      .Elseif (VectorRep == 2)
  185.          lea edx, pTempTradeMap
  186.          mov [eax].TradeMap, edx
  187.      .elseif (VectorRep == 3)
  188.          lea edx, pTempWareHouseMap
  189.          mov [eax].WareHouseMap, edx
  190.      .else
  191.      .EndIf
  192.      Add VectorRep, 1
  193.   .Until (VectorRep == 4)
  194.   Mov VectorRep, 0 ;lets free again the counter
  195. ;;------------------------------------------------------------------------------------------------------------------------
  196.  .Else
  197. ;//////////////////////////////////
  198. ;Mob ONLY code block !!
  199. ;THIS MUST BE SURE REMOVED
  200. ;IT HAVE NO REAL POTENTIAL
  201. ;//////////////////////////////////
  202.   pObj PlayerIndexCounter, SizeOf Object, pObjSpace
  203. ;  lea Edx, pTempInventory
  204. ;  Mov [Eax].Inventory1, Edx
  205. ;  Mov [Eax].Inventory2, Edx
  206. ;  lea Edx, pTempInventoryMap
  207. ;  Mov [Eax].InventoryMap1, Edx
  208. ;  Mov [Eax].InventoryMap2, Edx
  209.   Mov [Eax].WareHouseCount, 0
  210.   Mov [Eax].ChaosBox, 0
  211.  .EndIf
  212.  Add PlayerIndexCounter, 1
  213. .Until (PlayerIndexCounter >= MAX_OBJ_ID) ;Repeat until MAX_OBJ_ID
  214. ;//////////////////////////////////
  215. ;END OF OBJ CREATION !
  216. ;//////////////////////////////////
  217. RGB 24, 116, 205
  218. Mov Edx, Eax
  219. Invoke vprint, $CTA0("ObjectInit:] All Objects are initialised, current ObjectStruct Size : [%d]"), Edx, 1, SizeOf Object
  220. Assume Eax:Nothing
  221. Ret
  222. V_Obj_Init EndP