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

模拟服务器

开发平台:

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. ;////////////////////////////////////////////////////////////////////////////////////
  39. ;                       VeMU Project
  40. ;                        Item Load !
  41. ;////////////////////////////////////////////////////////////////////////////////////
  42. .Const
  43. .Data?
  44. .Data
  45. szItemScript DB ".DataGamePlayItemsItem.txt", 0
  46. .Code
  47. V_CItem_LoadItemScript Proc
  48. local NextTypePlease:Dword
  49. local pItemObjSpace:Dword
  50. local LoopCounter:Dword
  51. local ItemType:Dword
  52. local ItemIndex:Dword
  53. local pBufferSpace:Dword
  54. local FilePosition:Dword
  55. local BytesReaded:Dword
  56. local StructFile:WIN32_FILE_ATTRIBUTE_DATA
  57. .const
  58. qSWORD equ 0
  59. qSTAFFS equ 5
  60. SHIELDS equ 6
  61. HELMS equ 7
  62. PANTS equ 9
  63. GLOVES equ 10
  64. BOOTS equ 11
  65. ACCESORIES equ 12
  66. MISCELLANEOUS1 equ 13
  67. MISCELLANEOUS2 equ 14
  68. SCROLLS equ 15
  69. RepTimesForItemUniversalVars equ 7 ;Variables loadeds: ItemSlot, vWidht, vHeight, Serial, SkillType,OptionFlag,DropFlag
  70. RepTimesForDamageVars equ 4 ;Variable loadeds: DamageMin DamageMax AttackSpeed MagicPower
  71. RepTimesForRequirementsVars equ 6 ;Variable loadeds: LvlReq StrReq AgiReq EneReq VitReq CMDReq
  72. RepTimesForClassVars equ 6 ;Variable loadeds: DW/SM DK/BK ELF/ME MG DL SUM
  73. .code
  74. assume eax:ptr ITEM_ATTRIBUTE_STRUCT
  75. mov LoopCounter, 0
  76. mov FilePosition, 0
  77. mov NextTypePlease, 1
  78. lea eax, pObjItemAttributes
  79. xor ecx, ecx
  80. ;-------------------------------
  81. ;Clean some Attribute Values
  82. ;-------------------------------
  83. .Repeat
  84.   mov [eax].SpecialVars.Level, 0FFh ;-1
  85.   mov [eax].SpecialVars.RepairMoney, 0
  86.   mov [eax].SpecialVars.AllRepairMoney, 0
  87.   add ecx, 1
  88. .until (ecx == MAX_ITEMS)
  89. ;-------------------------------
  90. ;Load file into memory
  91. ;-------------------------------
  92. lea edx, StructFile
  93. GetFileLength addr szItemScript, edx
  94. mov eax, StructFile.nFileSizeLow
  95. fastalloc eax, 1 ;alloc space for file
  96. mov pBufferSpace, eax
  97. lea ecx, BytesReaded
  98. ReadThisFile Addr szItemScript, pBufferSpace, ecx ;read of file and handles the close
  99. mov ecx, StructFile.nFileSizeLow
  100. add eax, ecx
  101. mov dword ptr [eax], 0 ;Append to 00 byte in the end of file for prevent bugs
  102. xor ecx, ecx
  103. ;-------------------------------
  104. ;INITIALISE LOOP
  105. ;SAVE ITEM TYPE AND INDEX
  106. ;-------------------------------
  107. .While (ecx != -1) ;Infinite loop
  108.   pObj TotalItemsLoaded, SizeOf ITEM_ATTRIBUTE_STRUCT, pObjItemAttributes ;New calculation avoiding WZ bug of not using all the space struct
  109.   mov pItemObjSpace, eax
  110.   .If (NextTypePlease == 1)
  111.     invoke GetToken, pBufferSpace, ecx, NULL ;Get Item Type
  112.     .If (edx == 1)
  113.        xor eax, eax
  114.        .Break
  115.     .Endif
  116.     mov ItemType, eax
  117.   .Endif
  118.   invoke GetToken, pBufferSpace, ecx, NULL ;Get Item Index
  119.   .If (edx == 1)
  120.     xor eax, eax
  121.     .Break
  122.   .Endif
  123.   mov ItemIndex, eax
  124.   .If (ItemType >= 0) || (ebx < MAX_ITEMS)
  125.     mov eax, pItemObjSpace
  126.     mov ebx, ItemType
  127.     mov edx, ItemIndex
  128.     mov [eax].ItemType, bl
  129.     mov [eax].ItemIndex, dl
  130.   .Else
  131.      .Continue
  132.   .Endif
  133. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  134. ;
  135. ;                                     = FOR ALL KIND OF ITEM TYPES =
  136. ;
  137. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  138. ;---------------------------------------------------
  139. ;LOAD NAME OF ITEM FOR ALL KIND OF ITEMS
  140. ;----------------------------------------------------
  141.   push eax
  142.   invoke GetString, pBufferSpace, ecx ;Item Name
  143.   mov FilePosition, ecx
  144.   pop eax
  145.   push eax
  146.   invoke lstrcat, addr [eax].ItemName, addr StringToken
  147.   pop eax
  148.   mov ecx, FilePosition
  149. ;---------------------------------------------------
  150. ;LOAD UNIVERSAL VARIABLES FOR ALL KIND OF ITEMS
  151. ;----------------------------------------------------
  152.   lea eax, [eax].UniversalVars
  153.   xor ebx, ebx
  154.   .Repeat
  155.      push eax
  156.      push ebx ;Save EBX
  157.      invoke GetToken, pBufferSpace, ecx, NULL
  158.      mov FilePosition, ecx
  159.      mov ecx, edx ;Avoid bugs
  160.      mov edx, eax ;Avoid bugs
  161.      pop ebx
  162.      pop eax
  163.      .if (ecx == 1)
  164.        xor eax, eax
  165.        .break
  166.      .endif
  167.      .if (LoopCounter == 0) || (LoopCounter == 4)
  168.          mov [eax + ebx], edx
  169.          add ebx, 4
  170.      .else
  171.          mov byte ptr [eax + ebx], dl
  172.          add ebx, 1
  173.      .endif
  174.      add LoopCounter, 1
  175.      mov ecx, FilePosition
  176.   .Until (LoopCounter == RepTimesForItemUniversalVars)
  177.   mov LoopCounter, 0
  178.   mov eax, pItemObjSpace
  179. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  180. ;
  181. ;                                     = ONLY FOR WEAPONS =
  182. ;
  183. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  184.   .If (ItemType >= qSWORD) && (ItemType < qSTAFFS) ;IF ITEM TYPE IS ACCORDING TO ANY WEAPON...
  185. ;--------------------------------------------------------
  186. ;LOAD SPECIAL VARIABLES !
  187. ;--------------------------------------------------------
  188. invoke GetToken, pBufferSpace, ecx, NULL
  189. .if (edx == 1)
  190.    xor eax, eax
  191.    .break
  192. .endif
  193.     mov edx, eax ;Avoid bugs
  194.     mov eax, pItemObjSpace
  195.     mov [eax].SpecialVars.Level, dl
  196.     invoke GetToken, pBufferSpace, ecx, NULL
  197. .if (edx == 1)
  198.    xor eax, eax
  199.    .break
  200. .endif
  201.     mov edx, eax ;Avoid bugs
  202.     mov eax, pItemObjSpace
  203.     mov [eax].SpecialVars.SetAttribute, dl
  204.     invoke GetToken, pBufferSpace, ecx, NULL
  205. .if (edx == 1)
  206.    xor eax, eax
  207.    .break
  208. .endif
  209.     mov edx, eax ;Avoid bugs
  210.     mov eax, pItemObjSpace
  211.     mov [eax].SpecialVars.BuyMoney, edx
  212.     invoke GetToken, pBufferSpace, ecx, NULL
  213. .if (edx == 1)
  214.    xor eax, eax
  215.    .break
  216. .endif
  217.     mov edx, eax ;Avoid bugs
  218.     mov eax, pItemObjSpace
  219.     mov [eax].SpecialVars.SellMoney, edx
  220. ;--------------------------------------------------------
  221. ;LOAD DAMAGE VARIABLES !
  222. ;--------------------------------------------------------
  223.     lea eax, [eax].DamageVars
  224.     xor ebx, ebx
  225.     .Repeat
  226.     push eax
  227.     push ebx ;Save EBX
  228.     invoke GetToken, pBufferSpace, ecx, NULL
  229.         mov FilePosition, ecx
  230.     mov ecx, edx ;Avoid bugs
  231.     mov edx, eax ;Avoid bugs
  232.     pop ebx
  233.     pop eax
  234.     .if (ecx == 1)
  235.       xor eax, eax
  236.       .break
  237.     .endif
  238.     .if (LoopCounter == 3) ;MagicPower
  239.         mov [eax + ebx], edx
  240.         add ebx, 4
  241.     .else ;DamageMin, DamageMax, AttackSpeed
  242.         mov byte ptr [eax + ebx], dl
  243.         add ebx, 1
  244.     .endif
  245.          mov ecx, FilePosition
  246.     add LoopCounter, 1
  247. .Until (LoopCounter == RepTimesForDamageVars)
  248.     mov LoopCounter, 0
  249. ;--------------------------------------------------------
  250. ;LOAD DEFENSE VARIABLES
  251. ;--------------------------------------------------------
  252.     mov eax, pItemObjSpace
  253. invoke GetToken, pBufferSpace, ecx, NULL
  254. .if (edx == 1)
  255.    xor eax, eax
  256.    .break
  257. .endif
  258.     mov edx, eax
  259.     mov eax, pItemObjSpace
  260.     mov [eax].DefenseVars.Durability, dl
  261. invoke GetToken, pBufferSpace, ecx, NULL
  262. .if (edx == 1)
  263.    xor eax, eax
  264.    .break
  265. .endif
  266.     mov edx, eax ;Avoid bugs
  267.     mov eax, pItemObjSpace
  268.     mov [eax].DefenseVars.MagicDurability, dl
  269. ;--------------------------------------------------------
  270. ;LOAD REQUIREMENTS VARIABLES
  271. ;--------------------------------------------------------
  272.     lea eax, [eax].ReqVars
  273.     xor ebx, ebx
  274.     .Repeat
  275.     push eax
  276.     push ebx ;Save EBX
  277.     invoke GetToken, pBufferSpace, ecx, NULL
  278.         mov FilePosition, ecx
  279.     mov ecx, edx ;Avoid bugs
  280.     mov edx, eax ;Avoid bugs
  281.     pop ebx
  282.     pop eax
  283.     .if (ecx == 1)
  284.       xor eax, eax
  285.       .break
  286.     .endif
  287.     .if (LoopCounter == 5) ;CmdReq
  288.         mov [eax + ebx], edx
  289.         add ebx, 4
  290.     .else ;LvlReq StrReq AgiReq EneReq VitReq CMDReq
  291.         mov Word ptr [eax + ebx], dx
  292.         add ebx, 2
  293.     .endif
  294.         mov ecx, FilePosition
  295.     add LoopCounter, 1
  296. .Until (LoopCounter == RepTimesForRequirementsVars)
  297.     mov LoopCounter, 0
  298. ;--------------------------------------------------------
  299. ;LOAD CLASS VARIABLES
  300. ;--------------------------------------------------------
  301.     mov eax, pItemObjSpace
  302.     lea eax, [eax].ClassVars
  303.     xor ebx, ebx
  304.     .Repeat
  305.     push eax
  306.     push ebx ;Save EBX
  307.     invoke GetToken, pBufferSpace, ecx, NULL
  308.         mov FilePosition, ecx
  309.     mov ecx, edx ;Avoid bugs
  310.     mov edx, eax ;Avoid bugs
  311.     pop ebx
  312.     pop eax
  313.     .if (ecx == 1)
  314.       xor eax, eax
  315.       .break
  316.     .endif
  317.     mov Byte ptr [eax + ebx], dl ;DW/SM DK/BK ELF/ME MG DL SUM
  318.     add ebx, 1
  319.     add LoopCounter, 1
  320.         mov ecx, FilePosition
  321. .Until (LoopCounter == RepTimesForClassVars)
  322.     mov LoopCounter, 0
  323.     mov eax, pItemObjSpace
  324.     .If ([eax].UniversalVars.vWidth >= 2)
  325.        mov [eax].SpecialVars.TwoHand, 1
  326.     .Endif
  327.     movsx edx, [eax].DefenseVars.MagicDurability
  328.     add [eax].DefenseVars.Durability, dl
  329. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  330. ;
  331. ;                                     = ONLY FOR ARMORS =
  332. ;
  333. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  334.   .ElseIf (ItemType >= HELMS) && (ItemType <= BOOTS)
  335. ;--------------------------------------------------------
  336. ;LOAD SPECIAL VARIABLES !
  337. ;--------------------------------------------------------
  338. invoke GetToken, pBufferSpace, ecx, NULL
  339. .if (edx == 1)
  340.    xor eax, eax
  341.    .break
  342. .endif
  343.     mov edx, eax ;Avoid bugs
  344.     mov eax, pItemObjSpace
  345.     mov [eax].SpecialVars.Level, dl
  346.     invoke GetToken, pBufferSpace, ecx, NULL
  347. .if (edx == 1)
  348.    xor eax, eax
  349.    .break
  350. .endif
  351.     mov edx, eax ;Avoid bugs
  352.     mov eax, pItemObjSpace
  353.     mov [eax].SpecialVars.SetAttribute, dl
  354.     invoke GetToken, pBufferSpace, ecx, NULL
  355. .if (edx == 1)
  356.    xor eax, eax
  357.    .break
  358. .endif
  359.     mov edx, eax ;Avoid bugs
  360.     mov eax, pItemObjSpace
  361.     mov [eax].SpecialVars.BuyMoney, edx
  362.     invoke GetToken, pBufferSpace, ecx, NULL
  363. .if (edx == 1)
  364.    xor eax, eax
  365.    .break
  366. .endif
  367.     mov edx, eax ;Avoid bugs
  368.     mov eax, pItemObjSpace
  369.     mov [eax].SpecialVars.SellMoney, edx
  370. ;--------------------------------------------------------
  371. ;LOAD DEFENSE VARIABLES FOR ALL KIND OF ARMORS
  372. ;--------------------------------------------------------
  373. invoke GetToken, pBufferSpace, ecx, NULL
  374. .if (edx == 1)
  375.    xor eax, eax
  376.    .break
  377. .endif
  378.     mov edx, eax
  379.     mov eax, pItemObjSpace
  380.     mov [eax].DefenseVars.Defense, dl
  381. ;--------------------------------------------------------
  382. ;LOAD DEFENSE SPECIFIC VARIABLES FOR SHIELDS
  383. ;--------------------------------------------------------
  384.     .If (ItemType == SHIELDS)
  385.       invoke GetToken, pBufferSpace, ecx, NULL
  386.       .If (ecx == 1)
  387.         xor eax, eax
  388.         .Break
  389.       .Endif
  390.       mov edx, eax
  391.       mov eax, pItemObjSpace
  392.       mov [eax].DefenseVars.SuccesfulBlocking, dl
  393. ;-----------------------------------------------------------
  394. ;LOAD DEFENSE SPECIFIC VARIABLES FOR HELMS, ARMORS & PANTS
  395. ;-----------------------------------------------------------
  396.     .Elseif (ItemType >= HELMS) && (ItemType <= PANTS)
  397.        invoke GetToken, pBufferSpace, ecx, NULL
  398.        .If (ecx == 1)
  399.          xor eax, eax
  400.          .Break
  401.        .Endif
  402.        mov edx, eax
  403.        mov eax, pItemObjSpace
  404.        mov [eax].DefenseVars.MagicDefense, dl
  405. ;--------------------------------------------------------
  406. ;LOAD DEFENSE SPECIFIC VARIABLES FOR GLOVES
  407. ;--------------------------------------------------------
  408.     .Elseif (ItemType == GLOVES)
  409.        invoke GetToken, pBufferSpace, ecx, NULL
  410.        .If (ecx == 1)
  411.          xor eax, eax
  412.          .Break
  413.        .Endif
  414.        mov edx, eax
  415.        mov eax, pItemObjSpace
  416.        mov [eax].DamageVars.AttackSpeed, dl
  417. ;--------------------------------------------------------
  418. ;LOAD DEFENSE SPECIFIC VARIABLES FOR BOOTS
  419. ;--------------------------------------------------------
  420.     .ElseIf (ItemType == BOOTS)
  421.        invoke GetToken, pBufferSpace, ecx, NULL
  422.        .If (ecx == 1)
  423.          xor eax, eax
  424.          .Break
  425.        .Endif
  426.        mov edx, eax
  427.        mov eax, pItemObjSpace
  428.        mov [eax].SpecialVars.WalkSpeed, dl
  429.     .Else
  430.     .Endif
  431. ;--------------------------------------------------------
  432. ;LOAD LAST DEFENSE VARIABLE FOR ALL KIND OF ARMORS
  433. ;--------------------------------------------------------
  434. invoke GetToken, pBufferSpace, ecx, NULL
  435. .if (edx == 1)
  436.    xor eax, eax
  437.    .break
  438. .endif
  439.     mov edx, eax
  440.     mov eax, pItemObjSpace
  441.     mov [eax].DefenseVars.Durability, dl
  442. ;--------------------------------------------------------
  443. ;LOAD REQUIREMENTS VARIABLES
  444. ;--------------------------------------------------------
  445.     lea eax, [eax].ReqVars
  446.     xor ebx, ebx
  447.     .Repeat
  448.     push eax
  449.     push ebx ;Save EBX
  450.     invoke GetToken, pBufferSpace, ecx, NULL
  451.         mov FilePosition, ecx
  452.     mov ecx, edx ;Avoid bugs
  453.     mov edx, eax ;Avoid bugs
  454.     pop ebx
  455.     pop eax
  456.     .if (ecx == 1)
  457.       xor eax, eax
  458.       .break
  459.     .endif
  460.     .if (LoopCounter == 5) ;CmdReq
  461.         mov [eax + ebx], edx
  462.         add ebx, 4
  463.     .else ;LvlReq StrReq AgiReq EneReq VitReq CMDReq
  464.         mov Word ptr [eax + ebx], dx
  465.         add ebx, 2
  466.     .endif
  467.         mov ecx, FilePosition
  468.     add LoopCounter, 1
  469. .Until (LoopCounter == RepTimesForRequirementsVars)
  470.     mov LoopCounter, 0
  471. ;--------------------------------------------------------
  472. ;LOAD CLASS VARIABLES
  473. ;--------------------------------------------------------
  474.     mov eax, pItemObjSpace
  475.     lea eax, [eax].ClassVars
  476.     xor ebx, ebx
  477.     .Repeat
  478.     push eax
  479.     push ebx ;Save EBX
  480.     invoke GetToken, pBufferSpace, ecx, NULL
  481.         mov FilePosition, ecx
  482.     mov ecx, edx ;Avoid bugs
  483.     mov edx, eax ;Avoid bugs
  484.     pop ebx
  485.     pop eax
  486.     .if (ecx == 1)
  487.       xor eax, eax
  488.       .break
  489.     .endif
  490.     mov Byte ptr [eax + ebx], dl ;DW/SM DK/BK ELF/ME MG DL SUM
  491.     add ebx, 1
  492.     add LoopCounter, 1
  493.         mov ecx, FilePosition
  494. .Until (LoopCounter == RepTimesForClassVars)
  495.     mov LoopCounter, 0
  496. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  497. ;
  498. ;                                     = ONLY FOR ACCESORIES =
  499. ;
  500. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  501.   .ElseIf (ItemType == ACCESORIES)
  502. ;--------------------------------------------------------
  503. ;LOAD SPECIAL VARIABLES !
  504. ;--------------------------------------------------------
  505. invoke GetToken, pBufferSpace, ecx, NULL
  506. .if (edx == 1)
  507.    xor eax, eax
  508.    .break
  509. .endif
  510.     mov edx, eax ;Avoid bugs
  511.     mov eax, pItemObjSpace
  512.     mov [eax].SpecialVars.Level, dl
  513.     invoke GetToken, pBufferSpace, ecx, NULL
  514. .if (edx == 1)
  515.    xor eax, eax
  516.    .break
  517. .endif
  518.     mov edx, eax ;Avoid bugs
  519.     mov eax, pItemObjSpace
  520.     mov [eax].SpecialVars.BuyMoney, edx
  521.     invoke GetToken, pBufferSpace, ecx, NULL
  522. .if (edx == 1)
  523.    xor eax, eax
  524.    .break
  525. .endif
  526.     mov edx, eax ;Avoid bugs
  527.     mov eax, pItemObjSpace
  528.     mov [eax].SpecialVars.SellMoney, edx
  529. ;--------------------------------------------------------
  530. ;LOAD DEFENSE VARIABLES !
  531. ;--------------------------------------------------------
  532. invoke GetToken, pBufferSpace, ecx, NULL
  533. .if (edx == 1)
  534.    xor eax, eax
  535.    .break
  536. .endif
  537.     mov edx, eax
  538.     mov eax, pItemObjSpace
  539.     mov [eax].DefenseVars.Defense, dl
  540. invoke GetToken, pBufferSpace, ecx, NULL
  541. .if (edx == 1)
  542.    xor eax, eax
  543.    .break
  544. .endif
  545.     mov edx, eax
  546.     mov eax, pItemObjSpace
  547.     mov [eax].DefenseVars.Durability, dl
  548. ;--------------------------------------------------------
  549. ;LOAD REQUIREMENTS VARIABLES
  550. ;--------------------------------------------------------
  551.     lea eax, [eax].ReqVars
  552.     xor ebx, ebx
  553.     .Repeat
  554.     push eax
  555.     push ebx ;Save EBX
  556.     invoke GetToken, pBufferSpace, ecx, NULL
  557.         mov FilePosition, ecx
  558.     mov ecx, edx ;Avoid bugs
  559.     mov edx, eax ;Avoid bugs
  560.     pop ebx
  561.     pop eax
  562.     .if (ecx == 1)
  563.       xor eax, eax
  564.       .break
  565.     .endif
  566.     .if (LoopCounter == 5) ;CmdReq
  567.         mov [eax + ebx], edx
  568.         add ebx, 4
  569.     .else ;LvlReq StrReq AgiReq EneReq VitReq CMDReq
  570.         mov Word ptr [eax + ebx], dx
  571.         add ebx, 2
  572.     .endif
  573.         mov ecx, FilePosition
  574.     add LoopCounter, 1
  575. .Until (LoopCounter == RepTimesForRequirementsVars)
  576.     mov LoopCounter, 0
  577. ;--------------------------------------------------------
  578. ;LOAD CLASS VARIABLES
  579. ;--------------------------------------------------------
  580.     mov eax, pItemObjSpace
  581.     lea eax, [eax].ClassVars
  582.     xor ebx, ebx
  583.     .Repeat
  584.     push eax
  585.     push ebx ;Save EBX
  586.     invoke GetToken, pBufferSpace, ecx, NULL
  587.         mov FilePosition, ecx
  588.     mov ecx, edx ;Avoid bugs
  589.     mov edx, eax ;Avoid bugs
  590.     pop ebx
  591.     pop eax
  592.     .if (ecx == 1)
  593.       xor eax, eax
  594.       .break
  595.     .endif
  596.     mov Byte ptr [eax + ebx], dl ;DW/SM DK/BK ELF/ME MG DL SUM
  597.     add ebx, 1
  598.     add LoopCounter, 1
  599.         mov ecx, FilePosition
  600. .Until (LoopCounter == RepTimesForClassVars)
  601.     mov LoopCounter, 0
  602. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  603. ;
  604. ;                                     = ONLY FOR MISCELLANEOUS1 =
  605. ;
  606. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  607.   .ElseIf (ItemType == MISCELLANEOUS1)
  608. ;--------------------------------------------------------
  609. ;LOAD SPECIAL VARIABLES !
  610. ;--------------------------------------------------------
  611. invoke GetToken, pBufferSpace, ecx, NULL
  612. .if (edx == 1)
  613.    xor eax, eax
  614.    .break
  615. .endif
  616.     mov edx, eax ;Avoid bugs
  617.     mov eax, pItemObjSpace
  618.     mov [eax].SpecialVars.Level, dl
  619.     invoke GetToken, pBufferSpace, ecx, NULL
  620. .if (edx == 1)
  621.    xor eax, eax
  622.    .break
  623. .endif
  624.     mov edx, eax ;Avoid bugs
  625.     mov eax, pItemObjSpace
  626.     mov [eax].SpecialVars.SetAttribute, dl
  627.     invoke GetToken, pBufferSpace, ecx, NULL
  628. .if (edx == 1)
  629.    xor eax, eax
  630.    .break
  631. .endif
  632.     mov edx, eax ;Avoid bugs
  633.     mov eax, pItemObjSpace
  634.     mov [eax].SpecialVars.BuyMoney, edx
  635.     invoke GetToken, pBufferSpace, ecx, NULL
  636. .if (edx == 1)
  637.    xor eax, eax
  638.    .break
  639. .endif
  640.     mov edx, eax ;Avoid bugs
  641.     mov eax, pItemObjSpace
  642.     mov [eax].SpecialVars.SellMoney, edx
  643. ;--------------------------------------------------------
  644. ;LOAD DEFENSE VARIABLES !
  645. ;--------------------------------------------------------
  646.     invoke GetToken, pBufferSpace, ecx, NULL
  647. .if (edx == 1)
  648.    xor eax, eax
  649.    .break
  650. .endif
  651.     mov edx, eax ;Avoid bugs
  652.     mov eax, pItemObjSpace
  653.     mov [eax].DefenseVars.Defense, dl
  654. ;--------------------------------------------------------
  655. ;LOAD DEFENSE VARIABLES SPECIFIC: RESISTANCE !
  656. ;--------------------------------------------------------
  657.     lea eax, [eax].DamageVars
  658.     xor ebx, ebx
  659.     .Repeat
  660.     push eax
  661.     push ebx ;Save EBX
  662.     invoke GetToken, pBufferSpace, ecx, NULL
  663.         mov FilePosition, ecx
  664.     mov ecx, edx ;Avoid bugs
  665.     mov edx, eax ;Avoid bugs
  666.     pop ebx
  667.     pop eax
  668.     .if (ecx == 1)
  669.       xor eax, eax
  670.       .break
  671.     .endif
  672.     mov byte ptr [eax + ebx], dl ;Resistance[0] to Resistance[7]
  673.     add ebx, 1
  674.     add LoopCounter, 1
  675.         mov ecx, FilePosition
  676. .Until (LoopCounter == SizeOf ITEM_ATTRIBUTE_STRUCT.DefenseVars.Resistance)
  677.     mov LoopCounter, 0
  678. ;--------------------------------------------------------
  679. ;LOAD CLASS VARIABLES
  680. ;--------------------------------------------------------
  681.     mov eax, pItemObjSpace
  682.     lea eax, [eax].ClassVars
  683.     xor ebx, ebx
  684.     .Repeat
  685.     push eax
  686.     push ebx ;Save EBX
  687.     invoke GetToken, pBufferSpace, ecx, NULL
  688.         mov FilePosition, ecx
  689.     mov ecx, edx ;Avoid bugs
  690.     mov edx, eax ;Avoid bugs
  691.     pop ebx
  692.     pop eax
  693.     .if (ecx == 1)
  694.       xor eax, eax
  695.       .break
  696.     .endif
  697.     mov Byte ptr [eax + ebx], dl ;DW/SM DK/BK ELF/ME MG DL SUM
  698.     add ebx, 1
  699.     add LoopCounter, 1
  700.         mov ecx, FilePosition
  701. .Until (LoopCounter == RepTimesForClassVars)
  702.     mov LoopCounter, 0
  703. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  704. ;
  705. ;                                     = ONLY FOR MISCELLANEOUS2 =
  706. ;
  707. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  708.   .ElseIf (ItemType == MISCELLANEOUS2)
  709. ;--------------------------------------------------------
  710. ;LOAD SPECIAL VARIABLES !
  711. ;--------------------------------------------------------
  712. invoke GetToken, pBufferSpace, ecx, NULL
  713. .if (edx == 1)
  714.    xor eax, eax
  715.    .break
  716. .endif
  717.     mov edx, eax ;Avoid bugs
  718.     mov eax, pItemObjSpace
  719.     mov [eax].SpecialVars.Level, dl
  720.     invoke GetToken, pBufferSpace, ecx, NULL
  721. .if (edx == 1)
  722.    xor eax, eax
  723.    .break
  724. .endif
  725.     mov edx, eax ;Avoid bugs
  726.     mov eax, pItemObjSpace
  727.     mov [eax].SpecialVars.ItemValue, Dx
  728.     invoke GetToken, pBufferSpace, ecx, NULL
  729. .if (edx == 1)
  730.    xor eax, eax
  731.    .break
  732. .endif
  733.     mov edx, eax ;Avoid bugs
  734.     mov eax, pItemObjSpace
  735.     mov [eax].SpecialVars.BuyMoney, edx
  736.     invoke GetToken, pBufferSpace, ecx, NULL
  737. .if (edx == 1)
  738.    xor eax, eax
  739.    .break
  740. .endif
  741.     mov edx, eax ;Avoid bugs
  742.     mov eax, pItemObjSpace
  743.     mov [eax].SpecialVars.SellMoney, edx
  744. ;--------------------------------------------------------
  745. ;LOAD CLASS VARIABLES
  746. ;--------------------------------------------------------
  747.     mov eax, pItemObjSpace
  748.     lea eax, [eax].ClassVars
  749.     xor ebx, ebx
  750.     .Repeat
  751.     push eax
  752.     push ebx ;Save EBX
  753.     invoke GetToken, pBufferSpace, ecx, NULL
  754.         mov FilePosition, ecx
  755.     mov ecx, edx ;Avoid bugs
  756.     mov edx, eax ;Avoid bugs
  757.     pop ebx
  758.     pop eax
  759.     .if (ecx == 1)
  760.       xor eax, eax
  761.       .break
  762.     .endif
  763.     mov Byte ptr [eax + ebx], dl ;DW/SM DK/BK ELF/ME MG DL SUM
  764.     add ebx, 1
  765.     add LoopCounter, 1
  766.         mov ecx, FilePosition
  767. .Until (LoopCounter == RepTimesForClassVars)
  768.     mov LoopCounter, 0
  769. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  770. ;
  771. ;                                     = ONLY FOR SCROLLS =
  772. ;
  773. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  774.   .ElseIf (ItemType == SCROLLS)
  775. ;--------------------------------------------------------
  776. ;LOAD SPECIAL VARIABLES !
  777. ;--------------------------------------------------------
  778. invoke GetToken, pBufferSpace, ecx, NULL
  779. .if (edx == 1)
  780.    xor eax, eax
  781.    .break
  782. .endif
  783.     mov edx, eax ;Avoid bugs
  784.     mov eax, pItemObjSpace
  785.     mov [eax].SpecialVars.Level, dl
  786.     invoke GetToken, pBufferSpace, ecx, NULL
  787. .if (edx == 1)
  788.    xor eax, eax
  789.    .break
  790. .endif
  791.     mov edx, eax ;Avoid bugs
  792.     mov eax, pItemObjSpace
  793.     mov [eax].SpecialVars.BuyMoney, edx
  794.     invoke GetToken, pBufferSpace, ecx, NULL
  795. .if (edx == 1)
  796.    xor eax, eax
  797.    .break
  798. .endif
  799.     mov edx, eax ;Avoid bugs
  800.     mov eax, pItemObjSpace
  801.     mov [eax].SpecialVars.SellMoney, edx
  802. ;--------------------------------------------------------
  803. ;LOAD REQUIREMENTS VARIABLES
  804. ;--------------------------------------------------------
  805.     lea eax, [eax].ReqVars
  806.     xor ebx, ebx
  807.     .Repeat
  808.     push eax
  809.     push ebx ;Save EBX
  810.     invoke GetToken, pBufferSpace, ecx, NULL
  811.         mov FilePosition, ecx
  812.     mov ecx, edx ;Avoid bugs
  813.     mov edx, eax ;Avoid bugs
  814.     pop ebx
  815.     pop eax
  816.     .if (ecx == 1)
  817.       xor eax, eax
  818.       .break
  819.     .endif
  820.     .if (LoopCounter == 5) ;CmdReq
  821.         mov [eax + ebx], edx
  822.         add ebx, 4
  823.     .else ;LvlReq StrReq AgiReq EneReq VitReq CMDReq
  824.         mov Word ptr [eax + ebx], dx
  825.         add ebx, 2
  826.     .endif
  827.         mov ecx, FilePosition
  828.     add LoopCounter, 1
  829. .Until (LoopCounter == RepTimesForRequirementsVars)
  830.     mov LoopCounter, 0
  831. ;--------------------------------------------------------
  832. ;LOAD CLASS VARIABLES
  833. ;--------------------------------------------------------
  834.     mov eax, pItemObjSpace
  835.     lea eax, [eax].ClassVars
  836.     xor ebx, ebx
  837.     .Repeat
  838.       push eax
  839.       push ebx ;Save EBX
  840.       invoke GetToken, pBufferSpace, ecx, NULL
  841.       mov FilePosition, ecx
  842.       mov ecx, edx ;Avoid bugs
  843.       mov edx, eax ;Avoid bugs
  844.       pop ebx
  845.       pop eax
  846.       .if (ecx == 1)
  847.         xor eax, eax
  848.         .break
  849.       .endif
  850.       mov Byte ptr [eax + ebx], dl ;DW/SM DK/BK ELF/ME MG DL SUM
  851.       add ebx, 1
  852.       add LoopCounter, 1
  853.       mov ecx, FilePosition
  854.     .Until (LoopCounter == RepTimesForClassVars)
  855.     mov LoopCounter, 0
  856. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  857. ;
  858. ;                                     = END OF LOOP =
  859. ;
  860. ;////////////////////////////////////////////////////////////////////////////////////////////////////
  861.  .Else
  862. RGB 255, 64, 64 ;Red Collor
  863. Mov Edx, Eax
  864. Invoke vprint, $CTA0("CItemLoad:] ITEM TYPE:  [%d]  IS INVALID, PLEASE MODIFY SOURCE CODE"), Edx, 1, ItemType
  865.     mov ecx, FilePosition
  866.    .Continue
  867.  .Endif
  868.  add TotalItemsLoaded, 1
  869.  .If (TotalItemsLoaded > MAX_ITEMS * SizeOf ITEM_ATTRIBUTE_STRUCT)
  870.     RGB 255, 64, 64 ;Red Collor
  871. Mov Edx, Eax
  872. Invoke vprint, $CTA0("CItemLoad:] ERROR YOU CANT LOAD MORE THAN :  [%d] ITEMS"), Edx, 1, MAX_ITEMS * SizeOf ITEM_ATTRIBUTE_STRUCT
  873.     .Break
  874.  .Endif
  875.  mov FilePosition, ecx
  876.  invoke GetString, pBufferSpace, ecx ;Try to search for "end" string
  877.  push ecx
  878.  invoke szCmp, $CTA0("end"), Addr StringToken ;If end string
  879.  pop ecx
  880.  .If (eax != 0) ;Founded
  881.     push ecx
  882.     invoke GetToken, pBufferSpace, ecx, NULL ;Lets check if its really the end of file
  883.     pop ecx
  884.     .if (edx == 1)
  885.       mov eax, 1
  886.       .Break
  887.     .endif
  888.     mov NextTypePlease, 1 ; Lets read the next type
  889.     .Continue
  890.  .Endif
  891.  mov ecx, FilePosition
  892.  mov NextTypePlease, 0 ;Keep in the same item type
  893. .Endw
  894. .If (eax == 0)
  895.     RGB 255, 64, 64 ;Red Collor
  896. Mov Edx, Eax
  897. Invoke vprint, $CTA0("CItemLoad:] UNKNOWN ERROR, LAST ITEM LOADED :  [%d]"), Edx, 1, TotalItemsLoaded
  898. .Else
  899.     RGB 24, 116, 205 ;Light blue
  900. Mov Edx, Eax
  901. Invoke vprint, $CTA0("CItemLoad:] Operation Successful total items loaded :  [%d]"), Edx, 1, TotalItemsLoaded
  902. .Endif
  903. FastDeAlloc pBufferSpace, NULL, 0 ;Free the heap when we dont use it anymore
  904. assume eax:nothing
  905. Ret
  906. V_CItem_LoadItemScript EndP