ItemQuantityChanged.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <?php
  2. namespace App\Module\GameItems\Events;
  3. use Illuminate\Broadcasting\InteractsWithSockets;
  4. use Illuminate\Foundation\Events\Dispatchable;
  5. use Illuminate\Queue\SerializesModels;
  6. /**
  7. * 物品数量变更事件
  8. *
  9. * 当用户物品数量发生变化时触发此事件,包括增加和减少。
  10. * 此事件可用于监控物品数量变化,更新相关任务进度,
  11. * 触发成就解锁,以及其他需要响应物品数量变化的系统功能。
  12. */
  13. class ItemQuantityChanged
  14. {
  15. use Dispatchable, InteractsWithSockets, SerializesModels;
  16. /**
  17. * 用户ID
  18. *
  19. * 物品所属用户的唯一标识符
  20. *
  21. * @var int
  22. */
  23. public $userId;
  24. /**
  25. * 物品ID
  26. *
  27. * 物品的唯一标识符,对应item_items表中的id
  28. *
  29. * @var int
  30. */
  31. public $itemId;
  32. /**
  33. * 物品实例ID(单独属性物品)
  34. *
  35. * 单独属性物品的实例ID,对应item_instances表中的id
  36. * 对于统一属性物品,此值为null
  37. *
  38. * @var int|null
  39. */
  40. public $instanceId;
  41. /**
  42. * 旧数量
  43. *
  44. * 变更前的物品数量
  45. *
  46. * @var int
  47. */
  48. public $oldQuantity;
  49. /**
  50. * 新数量
  51. *
  52. * 变更后的物品数量
  53. *
  54. * @var int
  55. */
  56. public $newQuantity;
  57. /**
  58. * 变化量(正数表示增加,负数表示减少)
  59. *
  60. * 物品数量的变化值,等于newQuantity - oldQuantity
  61. *
  62. * @var int
  63. */
  64. public $changeAmount;
  65. /**
  66. * 用户物品记录ID
  67. *
  68. * 对应item_users表中的记录ID
  69. *
  70. * @var int
  71. */
  72. public $userItemId;
  73. /**
  74. * 旧冻结状态
  75. *
  76. * 变更前的冻结状态,null表示冻结状态未变更
  77. *
  78. * @var bool|null
  79. */
  80. public $oldFrozenStatus;
  81. /**
  82. * 新冻结状态
  83. *
  84. * 变更后的冻结状态,null表示冻结状态未变更
  85. *
  86. * @var bool|null
  87. */
  88. public $newFrozenStatus;
  89. /**
  90. * 选项
  91. *
  92. * 包含物品变更的额外信息,如来源类型、来源ID等
  93. *
  94. * @var array
  95. */
  96. public $options;
  97. /**
  98. * 创建一个新的事件实例
  99. *
  100. * 初始化物品数量变更事件,记录变更前后的数量信息及相关上下文
  101. *
  102. * @param int $userId 用户ID - 物品所属用户的唯一标识符
  103. * @param int $itemId 物品ID - 物品的唯一标识符
  104. * @param int|null $instanceId 物品实例ID - 单独属性物品的实例ID,统一属性物品为null
  105. * @param int $oldQuantity 旧数量 - 变更前的物品数量
  106. * @param int $newQuantity 新数量 - 变更后的物品数量
  107. * @param int $userItemId 用户物品记录ID - 对应item_users表中的记录ID
  108. * @param bool|null $oldFrozenStatus 旧冻结状态 - 变更前的冻结状态,null表示冻结状态未变更
  109. * @param bool|null $newFrozenStatus 新冻结状态 - 变更后的冻结状态,null表示冻结状态未变更
  110. * @param array $options 选项 - 包含物品变更的额外信息,如来源类型、来源ID等
  111. * @return void
  112. */
  113. public function __construct(
  114. int $userId,
  115. int $itemId,
  116. ?int $instanceId,
  117. int $oldQuantity,
  118. int $newQuantity,
  119. int $userItemId,
  120. ?bool $oldFrozenStatus = null,
  121. ?bool $newFrozenStatus = null,
  122. array $options = []
  123. ) {
  124. $this->userId = $userId;
  125. $this->itemId = $itemId;
  126. $this->instanceId = $instanceId;
  127. $this->oldQuantity = $oldQuantity;
  128. $this->newQuantity = $newQuantity;
  129. $this->changeAmount = $newQuantity - $oldQuantity; // 自动计算变化量
  130. $this->userItemId = $userItemId;
  131. $this->oldFrozenStatus = $oldFrozenStatus;
  132. $this->newFrozenStatus = $newFrozenStatus;
  133. $this->options = $options;
  134. }
  135. }