Compare commits

..
Author SHA1 Message Date
FatBoy 0f9500a0d7 swing animation for miss 2024-05-29 18:39:24 -05:00
FatBoy 0d51afb737 pet damage adjustment 2024-05-28 19:28:41 -05:00
FatBoy 60e331de1a animation work 2024-05-28 19:12:00 -05:00
FatBoy 4a554b0d61 animation work 2024-05-28 19:09:46 -05:00
FatBoy 3f3d85fb36 animation work 2024-05-28 18:55:54 -05:00
MagicBot d2d655a839 Null check for vendor workorder lookup. 2024-05-28 18:31:16 -04:00
FatBoy 0096b8051c updated range chack and hitbox calculations 2024-05-27 19:59:35 -05:00
FatBoy 86102c8933 updated range chack and hitbox calculations 2024-05-27 19:50:52 -05:00
FatBoy f06e2c2e5c traveller open gate fix 2024-05-26 22:36:12 -05:00
FatBoy 74b425e567 casting fix for lore rulesets 2024-05-26 22:20:30 -05:00
FatBoy 22c8cdcf65 fixed pet attack and null weapon combat issue 2024-05-26 22:00:52 -05:00
FatBoy 7ed026f088 machine gun combat fixed 2024-05-26 21:49:36 -05:00
FatBoy 232c381e96 early exit for attack timer 2024-05-26 21:41:59 -05:00
FatBoy 69ea460d5e early exit for attack timer 2024-05-26 20:31:22 -05:00
FatBoy cbe9a30590 corrected convention for naming auto attack job 2024-05-26 20:17:15 -05:00
FatBoy 1bbbc396bd handle destory or derank for buildings 2024-05-22 20:49:33 -05:00
FatBoy 8601f9fcd5 special animation case for Siege Bow 2024-05-22 19:52:21 -05:00
FatBoy 7f029fd0e2 invalid range check for ranged characters attacking a building 2024-05-22 19:45:16 -05:00
FatBoy cc7188b404 invalid range check for ranged characters attacking a building 2024-05-22 19:40:25 -05:00
FatBoy aa0621bb02 bane live processing with vulnerable buildings 2024-05-22 19:27:44 -05:00
FatBoy b4ff1a3f7f swing animation lookup 2024-05-17 20:34:26 -05:00
FatBoy 9d6b1dcf60 swing animation lookup 2024-05-17 20:22:56 -05:00
FatBoy 6e123ecb86 swing animation lookup 2024-05-17 20:17:17 -05:00
FatBoy 2b8b9464af swing animation lookup 2024-05-17 20:09:46 -05:00
FatBoy cd8099b42f noob island guard aggro 2024-05-17 20:01:39 -05:00
FatBoy 2cdcba47a5 noob island guard aggro 2024-05-17 19:57:18 -05:00
FatBoy b7b4623c75 noob island guard aggro 2024-05-17 19:53:39 -05:00
FatBoy 2d958b929d noob island guard aggro 2024-05-17 19:50:44 -05:00
FatBoy e8f0e9f5de noob island guard aggro 2024-05-17 19:50:09 -05:00
FatBoy 03f0f3fcf0 noob island guard aggro 2024-05-17 19:41:26 -05:00
FatBoy 65db64d3df null spam fix for hamlet guards 2024-05-16 19:41:06 -05:00
FatBoy 5a25958aa5 cannot teleport od repledge to perdition or bastion 2024-05-14 19:35:37 -05:00
FatBoy 1f8c5495ab repledge work 2024-05-14 19:28:19 -05:00
FatBoy a54aa03ade can always teleport and repledge to your own nation 2024-05-14 19:22:31 -05:00
FatBoy e82445fcd2 teleport and repledge inside your own nation 2024-05-14 19:14:40 -05:00
FatBoy 9e9716fc88 Lore Teleport list and repledge list construction 2024-05-14 19:10:01 -05:00
FatBoy 4f01da368c Lore Guard AI Aggro 2024-05-14 18:49:30 -05:00
FatBoy 93c4103f61 Lore Mob AI Aggro 2024-05-14 18:42:38 -05:00
MagicBot f8180a7000 Removed custom exception candy 2024-05-12 13:42:11 -04:00
MagicBot 634f1478ce Removed custom exception candy 2024-05-12 13:36:47 -04:00
MagicBot 7335946c10 Removed 4 squigglies 2024-05-12 13:31:05 -04:00
MagicBot fb4eea67ed Comment cleanup 2024-05-12 13:18:51 -04:00
MagicBot 96ba17f67a DispatchManager is now an official manager singleton. 2024-05-12 13:14:42 -04:00
MagicBot ff17cacda7 magicvalue update 2024-05-12 12:54:11 -04:00
MagicBot 4d6ce2b155 Update to value in item rs constructor 2024-05-12 12:06:30 -04:00
MagicBot b2c9331899 Unused variables removed 2024-05-12 11:57:26 -04:00
MagicBot 1cb01b1cce Unused field removed 2024-05-12 11:55:12 -04:00
MagicBot e79fd0c3b4 Unused method removed 2024-05-12 11:46:28 -04:00
MagicBot 6dd1d97be5 Comment cleanup 2024-05-12 11:34:22 -04:00
MagicBot 805034e30b Comment cleanup 2024-05-12 11:32:00 -04:00
MagicBot 9646964698 TODO touchup 2024-05-12 11:31:25 -04:00
MagicBot 9ffaf96017 recalc magic value 2024-05-12 11:24:01 -04:00
MagicBot ce98f80b85 recalc magic value 2024-05-12 11:22:12 -04:00
MagicBot f683201086 recalc magic value 2024-05-12 11:18:22 -04:00
MagicBot 4796f7042d Bugfix in update_value 2024-05-12 11:09:45 -04:00
MagicBot 94ff3cf222 New rolling duration method moved to manager singleton. 2024-05-12 08:14:06 -04:00
MagicBot 174be35cac Comment cleanup 2024-05-12 07:17:31 -04:00
MagicBot ba266e506a Comment cleanup 2024-05-12 07:15:55 -04:00
MagicBot 4123157b92 Comment cleanup 2024-05-11 13:12:10 -04:00
MagicBot 7bb9aeacf7 Comment cleanup 2024-05-11 11:06:07 -04:00
MagicBot 1eda55a3f1 Serialization update 2024-05-11 11:01:49 -04:00
MagicBot f670e3143c Serialization update 2024-05-11 10:52:31 -04:00
MagicBot d55b57f7d0 Flag testing 2024-05-11 10:46:34 -04:00
MagicBot ea2f6f4593 Remove from dbManager cache 2024-05-11 09:37:23 -04:00
MagicBot b592f050c2 convention is == false 2024-05-11 09:33:54 -04:00
MagicBot 25f522c539 Make sure no memory leaks 2024-05-11 09:25:57 -04:00
MagicBot e89404abda json and string methods updated 2024-05-11 09:19:29 -04:00
MagicBot ad2cde9d85 Atomic instead of volatile to match counter 2024-05-11 09:16:48 -04:00
MagicBot ba94fabfb8 Atomic instead of volatile to match counter 2024-05-11 09:15:11 -04:00
MagicBot f7ab38e9a8 Comment updated 2024-05-11 09:02:54 -04:00
MagicBot 0d97fa614b Equals and hash overrides for workObject 2024-05-11 08:57:26 -04:00
MagicBot 6878916874 Update to workOrder cleanup 2024-05-11 08:51:41 -04:00
MagicBot c545468f26 Update to workOrder cleanup 2024-05-11 08:49:44 -04:00
MagicBot 7993fb22d2 Thread consistency for these 2024-05-11 08:33:34 -04:00
MagicBot 19bdb89c0f Unused variable removed 2024-05-11 08:30:32 -04:00
MagicBot 6b0b0cc357 Workorder set to completed when redeeding. 2024-05-11 08:07:04 -04:00
MagicBot bc1ae9a2c9 Minor cleanup 2024-05-11 08:02:19 -04:00
MagicBot 408e3a45ca Workorders cleared with hireling removal. 2024-05-11 07:51:56 -04:00
MagicBot 52e0b5be4d Minor cleanup 2024-05-11 07:31:09 -04:00
MagicBot 161335da26 Comment cleanup 2024-05-10 10:12:45 -04:00
MagicBot 7f1bc2a4b7 Update to workOrder loading. 2024-05-10 09:50:14 -04:00
MagicBot e37a4fab38 Update to workOrder loading. 2024-05-10 09:44:11 -04:00
MagicBot 2760a45d2f Early exit moved to run() 2024-05-10 09:39:43 -04:00
MagicBot 77673fde5f completed workOrders handling update 2024-05-10 09:34:58 -04:00
MagicBot 5fd4e5a088 Early exit for no avail slots 2024-05-09 14:50:47 -04:00
MagicBot b01b62ac3d Withdraw logic cleanup 2024-05-09 14:40:40 -04:00
MagicBot 7193ff7698 Withdraw logic cleanup 2024-05-09 14:12:55 -04:00
MagicBot dd72e20ff9 Withdraw logic cleanup 2024-05-09 14:04:19 -04:00
MagicBot f465ea4045 Withdraw logic cleanup 2024-05-09 11:32:26 -04:00
MagicBot 973dfc94f7 Withdraw logic cleanup 2024-05-09 11:31:12 -04:00
MagicBot a5255bcf11 Simplify total cost calc 2024-05-08 15:40:35 -04:00
MagicBot ec35228de9 Beardstyle bugfix 2024-05-08 13:31:47 -04:00
MagicBot 47a93f6545 sql parm count fix 2024-05-06 13:56:18 -04:00
MagicBot 0cff40070b Realm derived not stored 2024-05-06 13:33:28 -04:00
FatBoy 3f3fb53675 hamlet guard aggro 2024-05-05 19:45:46 -05:00
FatBoy b198dbcc09 Added ./setrace command 2024-05-04 21:39:35 -05:00
FatBoy 60b8843563 Added ./setrace command 2024-05-04 21:38:06 -05:00
MagicBot eff8be91d6 Comment cleanup 2024-05-04 13:38:38 -04:00
MagicBot 55e2d3fb5e Class cleanup 2024-05-04 13:33:33 -04:00
MagicBot a6f417d9cc Comment cleanup 2024-05-04 13:23:33 -04:00
MagicBot 7b1b09dc40 Comment cleanup 2024-05-04 13:20:26 -04:00
MagicBot 5724608005 Class cleanup 2024-05-04 13:18:34 -04:00
MagicBot f5d410f868 typo fixed contextually 2024-05-04 12:58:46 -04:00
MagicBot a5c1422534 unused variable removed 2024-05-04 12:55:51 -04:00
MagicBot 6df0e5625c Class cleanup. 2024-05-04 12:53:06 -04:00
MagicBot 5de932b095 Comment updated. 2024-05-04 12:41:45 -04:00
MagicBot db7d606b36 Devcmd removed. 2024-05-04 12:31:25 -04:00
FatBoy 30d302c43e Lore Guards use charter restrictions when aggroing 2024-04-30 21:45:28 -05:00
FatBoy 95cfc43956 debug option added in canJoin for charter type 2024-04-28 13:49:14 -05:00
FatBoy 7c8d78581e debug option added in canJoin for charter type 2024-04-28 13:46:35 -05:00
FatBoy 6f4a9f7d1a debug option added in canJoin for charter type 2024-04-28 13:44:35 -05:00
FatBoy 7a5569ab89 return guild charter type 2024-04-28 13:39:24 -05:00
FatBoy 042f7c675f cleanup dbEffectsResourceCostHandler 2024-04-28 13:28:53 -05:00
MagicBot 3c4d8239db Charter template id is stored not ordinal 2024-04-28 14:18:13 -04:00
MagicBot 4f20cc9aba Comment update. 2024-04-28 13:56:03 -04:00
MagicBot 34812694b7 Comparison fix 2024-04-28 13:49:21 -04:00
MagicBot 0bbbcbaa81 Removed squiggles 2024-04-28 13:44:35 -04:00
FatBoy 72172b9f05 GuildType lookup work 2024-04-28 12:40:53 -05:00
MagicBot 1876e09b48 method for populating lookup table 2024-04-28 13:34:45 -04:00
MagicBot 31c83f2bb5 upgraded protection for variables 2024-04-28 13:26:07 -04:00
MagicBot 065aa34652 Update to type constructor 2024-04-28 13:23:52 -04:00
FatBoy 8bbaae418d fix for player guild checks 2024-04-28 12:05:56 -05:00
FatBoy 10db850de4 replace == "LORE" with .equals("LORE") 2024-04-28 11:58:55 -05:00
FatBoy 753c3686ea Added MB Dev Notes 2024-04-28 11:44:28 -05:00
FatBoy f4bd928796 Lore check for telport and repledge 2024-04-28 11:34:03 -05:00
MagicBot 916a12a434 City realm id lookup not db load 2024-04-27 11:32:05 -04:00
MagicBot 3a8521683b Bootstrap logging info update 2024-04-27 09:32:25 -04:00
MagicBot df4d5a654f Comment cleanup 2024-04-27 08:58:28 -04:00
MagicBot 7fb5d7d23d Comment cleanup 2024-04-27 08:53:50 -04:00
MagicBot a7c9a15405 Comment cleanup 2024-04-27 08:47:04 -04:00
MagicBot b3b115e9ba Comment cleanup 2024-04-27 08:37:20 -04:00
MagicBot 1b5a64d8fc Minor cleanup 2024-04-27 08:17:43 -04:00
MagicBot 01f0e25e08 Minor cleanup 2024-04-27 08:17:17 -04:00
MagicBot 0782814c8e Update to junk handling 2024-04-27 08:14:31 -04:00
MagicBot 111ba02289 Merge remote-tracking branch 'refs/remotes/origin/feature-workorder2.8' into magicbox-1.5.2.1 2024-04-27 07:28:55 -04:00
MagicBot f09a7d4d12 Unused method removed 2024-04-27 07:27:03 -04:00
MagicBot e1e72b71bd Better name for context 2024-04-27 07:24:57 -04:00
MagicBot 4dce2e2aa2 Comment cleanup 2024-04-27 07:22:20 -04:00
MagicBot 743c897254 total_to_produce updated when slot removed from workOrder 2024-04-27 07:18:24 -04:00
MagicBot f134f71695 Squiggly removal 2024-04-27 07:07:59 -04:00
MagicBot 91016dd53c Cleanup in bane handling 2024-04-27 07:06:39 -04:00
FatBoy 39d04188b4 cleanup old rune handler in ObjectActionMsgHandler 2024-04-26 19:10:56 -05:00
FatBoy c99433c9bd missing case for type RUNE in ObjectActionMsgHandler 2024-04-26 19:07:33 -05:00
FatBoy 6cc94e076d promoting was attempting to use players promotion class (which is null) 2024-04-26 19:00:12 -05:00
MagicBot f294e48140 Null check added for city 2024-04-26 16:15:16 -04:00
MagicBot c25f325f87 Null check added for city 2024-04-26 16:15:07 -04:00
MagicBot ac0c11cb46 Comment cleanup 2024-04-26 15:56:04 -04:00
MagicBot 79e86e0a6f Comment cleanup 2024-04-26 15:43:45 -04:00
MagicBot 46f35f0b10 Minor update to keyset() usages 2024-04-26 15:37:37 -04:00
MagicBot 1b20201f8d MB Dev note added 2024-04-26 15:32:17 -04:00
MagicBot 0d744d900c MB Dev note added 2024-04-26 15:12:53 -04:00
MagicBot 9a8e0bd5c9 Comment cleanup 2024-04-26 15:10:49 -04:00
MagicBot 6b6be80fa8 Comment cleanup 2024-04-26 15:02:19 -04:00
MagicBot c2152432ce Comment cleanup 2024-04-26 15:00:03 -04:00
MagicBot 9348852e2c Comment cleanup 2024-04-26 14:57:02 -04:00
MagicBot 4b67f97ded MB Dev Notes added 2024-04-26 08:21:15 -04:00
MagicBot 2a9463be4e camelCase 2024-04-26 08:14:16 -04:00
MagicBot 67bc13dcde MB Dev Notes added to critical classes. 2024-04-26 08:09:07 -04:00
MagicBot 7d6407fbf5 comment cleanup 2024-04-25 20:26:13 -04:00
MagicBot 7b6f5f752b comment cleanup 2024-04-25 20:25:16 -04:00
MagicBot ef43211103 comment cleanup 2024-04-25 20:24:15 -04:00
MagicBot b312904548 comment cleanup 2024-04-25 20:22:55 -04:00
MagicBot 3b1db51a5e comment cleanup 2024-04-25 20:22:29 -04:00
MagicBot 17011de201 comment cleanup 2024-04-25 19:59:15 -04:00
MagicBot f03edf5c5d comment cleanup 2024-04-25 19:57:56 -04:00
MagicBot 320f06e1db comment cleanup 2024-04-25 10:08:27 -04:00
MagicBot 78480ca3dd comment cleanup 2024-04-25 10:06:55 -04:00
MagicBot 2e5f8701df comment cleanup 2024-04-25 10:04:58 -04:00
MagicBot 3a514dc771 comment cleanup 2024-04-25 10:03:37 -04:00
MagicBot c0b93ff809 comment cleanup 2024-04-25 09:51:34 -04:00
MagicBot 31037c9324 comment cleanup 2024-04-25 09:47:58 -04:00
MagicBot 2464deb3f3 comment cleanup 2024-04-25 09:41:02 -04:00
MagicBot dbf42bfbef json fix in constructor 2024-04-25 09:39:03 -04:00
MagicBot e80cdc192d Update to withdraw calc 2024-04-25 09:33:47 -04:00
MagicBot 9850b54981 Comment cleanup 2024-04-25 09:22:50 -04:00
MagicBot a3a30f3f8a Comment cleanup 2024-04-25 09:02:52 -04:00
MagicBot 4d0018b176 Comment cleanup 2024-04-25 08:51:33 -04:00
MagicBot a9dcac0ad7 Comment cleanup 2024-04-25 08:49:59 -04:00
MagicBot adaa521bf5 Comment cleanup 2024-04-25 08:49:13 -04:00
MagicBot 0fe04041f6 Workorder method moved to workorder 2024-04-25 08:42:20 -04:00
MagicBot 9dd2e1d5e5 Comment cleanup 2024-04-25 08:41:23 -04:00
MagicBot 81d6054982 Debit building first then warehouse 2024-04-25 07:44:19 -04:00
MagicBot ff2e381999 Update to validation order. 2024-04-24 13:47:25 -04:00
MagicBot e1d43ce0d0 Expand scope of try block. 2024-04-24 13:44:22 -04:00
MagicBot a906e30931 Setting containertype. 2024-04-24 13:36:32 -04:00
MagicBot 6a17f93e41 Setting containertype. 2024-04-24 13:13:48 -04:00
MagicBot 1edd4d681b Update to protection check. 2024-04-23 15:14:43 -04:00
MagicBot 911698a7e3 Method moved to WorkOrder 2024-04-23 15:11:56 -04:00
MagicBot 4fa646ce94 New costmap data implemented 2024-04-23 15:05:03 -04:00
MagicBot bcb40fecbb Loading effect costmap data at bootsrap 2024-04-23 14:56:30 -04:00
MagicBot 147b9a42c4 Costmap data generated; removed from bootstrap 2024-04-23 14:41:34 -04:00
MagicBot 81f86ceca9 Code written to refactor db call out of effect costs. 2024-04-23 14:36:01 -04:00
MagicBot e2dbc19adc Code written to refactor db call out of effect costs. 2024-04-23 14:31:08 -04:00
MagicBot d590511035 Code written to refactor db call out of effect costs. 2024-04-23 14:27:12 -04:00
MagicBot f48b9f10e1 Code written to refactor db call out of effect costs. 2024-04-23 14:25:19 -04:00
MagicBot 2607962038 Minor cleanup 2024-04-23 13:40:51 -04:00
MagicBot 4e05c2ab74 Warehouse debit work 2024-04-23 13:38:35 -04:00
MagicBot 6cbcef00aa Serialization update 2024-04-23 13:27:01 -04:00
MagicBot a76fd9f319 Update to identify assignment 2024-04-23 13:20:34 -04:00
MagicBot 8d7d3227cb Update to submit logging 2024-04-23 13:15:15 -04:00
MagicBot 9102fe1f6c Update to single item rolling config 2024-04-23 13:12:49 -04:00
MagicBot d999d00755 Rebuild of ./createitem 2024-04-23 12:42:12 -04:00
MagicBot a7e953ac20 Rebuild of ./createitem 2024-04-23 12:41:10 -04:00
MagicBot 46b4c110e5 Rebuild of ./createitem 2024-04-23 12:38:49 -04:00
MagicBot 30787f7ae2 Remnants of old garbage system removed 2024-04-23 12:25:26 -04:00
MagicBot 9de1afa0fd Comment update 2024-04-23 12:15:26 -04:00
MagicBot 9efba13b03 Simplified lambda function 2024-04-23 12:14:31 -04:00
MagicBot d7ac838b6d Simplified lambda function 2024-04-23 12:11:04 -04:00
MagicBot 50a169149f Resubmit unfinished workorders 2024-04-22 16:33:29 -04:00
MagicBot de65f6bcef Bugfix in pre/suf parsing 2024-04-22 16:28:02 -04:00
MagicBot 2adaff8f66 workOrderID added to output 2024-04-22 16:21:00 -04:00
MagicBot e8032f65d1 Loading workorders at bootstrap 2024-04-22 16:14:10 -04:00
MagicBot e710cf0930 Loading workorders at bootstrap 2024-04-22 16:12:26 -04:00
MagicBot 286a76b1de More workorder loading work 2024-04-22 16:07:25 -04:00
MagicBot 73e30062ea Method to load workorders on bootstrap 2024-04-22 16:02:22 -04:00
MagicBot 7300af9073 Method to load workorders on bootstrap 2024-04-22 15:49:57 -04:00
MagicBot 2a2b61bc0f Method to load workorders on bootstrap 2024-04-22 15:43:13 -04:00
MagicBot 89c3eb4d47 New workorder constructor 2024-04-22 15:34:57 -04:00
MagicBot c03f464043 More workorder db work 2024-04-22 15:12:46 -04:00
MagicBot 7b7492b5cc Workokrders updates as they cycle 2024-04-22 15:09:43 -04:00
MagicBot 684a5459b3 Worker saved upon submit 2024-04-22 15:02:15 -04:00
MagicBot bb5904552a Worker saved upon submit 2024-04-22 14:57:00 -04:00
MagicBot fb9d65b54d Method to save workorders to disk created 2024-04-22 14:55:46 -04:00
MagicBot a53848334f id is key not saved in json 2024-04-22 14:47:42 -04:00
MagicBot 19c6cd76a9 Warehouse updated for org.json 2024-04-22 13:43:22 -04:00
MagicBot d92b1c7473 Helpee and groupee parsing 2024-04-22 13:38:04 -04:00
MagicBot 07a5de2c57 Helpee and groupee parsing 2024-04-22 13:33:03 -04:00
MagicBot d0a837783e Update to sparsetype parsing 2024-04-22 13:23:18 -04:00
MagicBot 576f4af433 Update to sparsetype parsing 2024-04-22 13:18:41 -04:00
MagicBot 8ce81b144a Update to sparsetype parsing 2024-04-22 13:01:25 -04:00
MagicBot fcbb9b0cf1 Update to sparsetype parsing 2024-04-22 12:56:01 -04:00
MagicBot 4f115291eb No some are longs 2024-04-22 12:50:45 -04:00
MagicBot 79079e200a Bitvectors use int not long for mb 2024-04-22 12:48:03 -04:00
MagicBot dbab8f66da Migration to org.json 2024-04-22 12:42:52 -04:00
MagicBot 1d847d781b Migration to org.json 2024-04-22 12:34:57 -04:00
MagicBot 7604b7b07f Migration to org.json 2024-04-22 12:20:53 -04:00
MagicBot 8818282341 Migration to org.json 2024-04-22 11:49:41 -04:00
MagicBot 475ccaff0c Migration to org.json 2024-04-22 09:32:20 -04:00
MagicBot ba47b30673 Migration to org.json 2024-04-22 09:21:46 -04:00
MagicBot d557e30716 Workorder to json work 2024-04-22 08:57:02 -04:00
MagicBot 6499a16cc2 Workorder to json work 2024-04-22 08:53:33 -04:00
MagicBot a851d9a6ec Workorder to json work 2024-04-22 08:40:20 -04:00
MagicBot c09ae5d32f Workorder to json work 2024-04-22 08:35:58 -04:00
MagicBot 27d140f703 Junk or completion removes slot from workOrder 2024-04-22 08:28:43 -04:00
MagicBot 41aefa4a48 Comment cleanup 2024-04-22 08:20:02 -04:00
MagicBot 4723eb4bf2 Serialization update. 2024-04-22 07:56:25 -04:00
MagicBot 28c6953c3d Serialization update. 2024-04-22 07:54:03 -04:00
MagicBot 746a95e7d5 Overflow calc updated 2024-04-22 07:44:47 -04:00
MagicBot 0e7336b8c6 Concurrency update 2024-04-22 07:35:59 -04:00
MagicBot 11013bcd07 Reformat for easier debugging 2024-04-22 01:13:26 -04:00
MagicBot 63c7fb08e0 Concurrency update 2024-04-22 00:46:59 -04:00
MagicBot 6f39767fb4 Concurrency update 2024-04-22 00:37:49 -04:00
MagicBot 2de1f78f22 Slot tracking update 2024-04-22 00:25:16 -04:00
MagicBot 98b73d978a Slot tracking update 2024-04-22 00:19:29 -04:00
MagicBot 5a62361edd Slot tracking update 2024-04-22 00:10:32 -04:00
MagicBot 127f80054f Slot tracking update 2024-04-22 00:03:03 -04:00
FatBoy 41b1718df1 use delay for attacks for players 2024-04-21 13:19:50 -05:00
MagicBot d3b1cf9928 Comment update 2024-04-21 14:10:35 -04:00
MagicBot 7f8c297ae2 City check moved outside of validation 2024-04-21 14:08:27 -04:00
FatBoy 979cd70d65 update class type when promoting 2024-04-21 13:04:47 -05:00
FatBoy 35945f7542 equipping bug 2024-04-21 12:53:38 -05:00
FatBoy 84233ecdd6 use of proper animations 2024-04-21 12:43:23 -05:00
FatBoy 4d601f13a0 Merge remote-tracking branch 'origin/feature-workorder2.7' into feature-workorder2.7 2024-04-21 12:22:02 -05:00
FatBoy 1911de0757 random animation for weapon powers 2024-04-21 12:21:34 -05:00
MagicBot e00871324e Float fix 2024-04-21 13:21:00 -04:00
MagicBot 0286b63a8e Class reformat 2024-04-21 12:56:41 -04:00
FatBoy a84c712110 random animation for weapon powers 2024-04-21 11:52:47 -05:00
FatBoy 8e93e82526 random animation for weapon powers 2024-04-21 11:50:04 -05:00
FatBoy 67bf8c2b11 animation combat cleanup 2024-04-21 11:46:45 -05:00
FatBoy b8dbcb62db early exit for combat cycle 2024-04-21 11:21:40 -05:00
FatBoy bb5d257ae8 early exit for out of stam when attacking 2024-04-21 11:14:10 -05:00
MagicBot 2391bd6606 Unused method removed 2024-04-21 11:54:17 -04:00
MagicBot dc83bee227 File reformat 2024-04-21 11:40:27 -04:00
MagicBot 3ff7414fb4 Rework of item forge method collection usage 2024-04-21 11:39:59 -04:00
MagicBot 1e5790e6b9 Rework of item forge method collection usage 2024-04-21 08:23:58 -04:00
MagicBot 364fb40e0b junk, complete and produce wrapped with same lock as warehouse. 2024-04-20 16:52:24 -04:00
MagicBot 6a72a83076 Must be in a building and in city 2024-04-20 16:22:22 -04:00
MagicBot a83008ea4f Removed bypass in prep for db load. 2024-04-20 16:00:58 -04:00
MagicBot 89f672e0b0 json constructor for workOrders 2024-04-20 15:58:01 -04:00
MagicBot cc324777d1 Warehouse withdraws are persisted 2024-04-20 15:54:31 -04:00
MagicBot 692e7ec416 Comment cleanup 2024-04-20 13:35:04 -04:00
MagicBot 6cba850af5 Class cleanup and comment fixes 2024-04-20 13:26:44 -04:00
MagicBot f3e266cf46 Class cleanup 2024-04-20 13:21:53 -04:00
MagicBot ac347db0c8 debitWorkOrderCost method created 2024-04-20 13:05:19 -04:00
MagicBot 70e6756651 debitWorkOrderCost method created 2024-04-20 13:01:21 -04:00
MagicBot a46205b67b Uses mainline cache for virtual items 2024-04-20 12:45:05 -04:00
MagicBot 80aa413ea8 Methods moved to itemmanger 2024-04-20 12:37:55 -04:00
MagicBot 98d03620bc Persisting effects in complete item 2024-04-20 12:33:55 -04:00
MagicBot cca4521c93 Item prefix and suffix applied 2024-04-20 12:28:30 -04:00
MagicBot a859150a20 Item prefix and suffix applied 2024-04-20 12:17:37 -04:00
MagicBot d64bd193d8 Item prefix and suffix applied 2024-04-20 12:13:33 -04:00
MagicBot d0df406236 Item prefix and suffix applied 2024-04-20 11:53:53 -04:00
MagicBot 92c8430031 Item prefix and suffix applied 2024-04-20 11:13:31 -04:00
MagicBot 99671697ba Item prefix and suffix applied 2024-04-20 11:05:30 -04:00
MagicBot 171c79dcf6 Item prefix and suffix applied 2024-04-20 11:02:35 -04:00
MagicBot 726d471e95 Item prefix and suffix applied 2024-04-20 10:57:51 -04:00
MagicBot c0ed59f14f Item prefix and suffix applied 2024-04-20 10:43:39 -04:00
MagicBot c19c516669 Item prefix and suffix applied 2024-04-20 10:39:45 -04:00
MagicBot 589ea1bce8 Item prefix and suffix applied 2024-04-20 10:26:21 -04:00
MagicBot c133b2da5c Item prefix and suffix applied 2024-04-20 10:20:02 -04:00
MagicBot 24a05543c8 Item prefix and suffix applied 2024-04-20 10:11:56 -04:00
MagicBot 90271890d7 Item prefix and suffix applied 2024-04-20 09:59:04 -04:00
MagicBot 225dc2af18 Item prefix and suffix applied 2024-04-20 09:42:48 -04:00
MagicBot 501c68b1e3 Item prefix and suffix applied 2024-04-20 09:34:49 -04:00
MagicBot 13a75fcd5d Item prefix and suffix applied 2024-04-20 09:10:31 -04:00
MagicBot 1bc3609cbe Unused method removed 2024-04-20 08:57:42 -04:00
MagicBot 2c87e48178 Work on adding modifiers 2024-04-20 08:55:04 -04:00
MagicBot ac10b78d68 Work on adding modifiers 2024-04-20 08:54:28 -04:00
MagicBot 4549688ad7 Update to modifier returned 2024-04-20 08:43:12 -04:00
MagicBot 0a6e40eb74 removed for testing 2024-04-19 10:55:07 -04:00
MagicBot b1b635380a Completed items are identified 2024-04-19 10:49:19 -04:00
MagicBot 7309fdc62f Method moved to Warehouse 2024-04-19 10:46:31 -04:00
MagicBot 412ef0f642 Do not remove until complete pressed 2024-04-19 10:45:28 -04:00
MagicBot 3071cb5847 Apply effects to item 2024-04-19 10:40:03 -04:00
MagicBot 1a7f63ce05 lastNegativeId moved to ItemManager 2024-04-19 10:32:36 -04:00
MagicBot c03c1f4057 Update to item effect serialization 2024-04-19 10:11:27 -04:00
MagicBot 264094924b Proper accounting for workOrder removal post completion 2024-04-19 09:50:29 -04:00
MagicBot 0ec2b436de Window refresh update 2024-04-19 09:38:01 -04:00
MagicBot f36239a67e Window refresh update 2024-04-19 09:30:59 -04:00
MagicBot b673ca9636 Window refresh update 2024-04-19 09:27:50 -04:00
MagicBot cba7ee4066 Window refresh update 2024-04-19 09:23:34 -04:00
MagicBot 0f2b46b898 Window refresh update 2024-04-19 09:20:01 -04:00
MagicBot d76b670b75 Window refresh update 2024-04-19 09:18:30 -04:00
MagicBot ca71079106 Window refresh update 2024-04-19 09:16:38 -04:00
MagicBot adf686974d Window refresh update 2024-04-19 09:16:01 -04:00
MagicBot 6ecaa4dc0c Window refresh update 2024-04-19 09:07:49 -04:00
MagicBot c1939075cd Window refresh update 2024-04-19 09:07:23 -04:00
MagicBot 18587e281f refactored out collection 2024-04-19 09:03:35 -04:00
MagicBot dbd4c5d246 Method added to replace collection 2024-04-19 08:59:10 -04:00
MagicBot 919b29c38f Deduct cost from warehouse 2024-04-19 08:15:17 -04:00
MagicBot 01113fc3a6 Configure before setting cost 2024-04-17 14:24:05 -04:00
MagicBot b9627e1643 Class cleanup 2024-04-17 14:15:12 -04:00
MagicBot e6d83ca36c Mobloot vestiges removed 2024-04-17 14:07:42 -04:00
MagicBot a522eeb823 Update to completion 2024-04-17 13:59:34 -04:00
MagicBot 8d1561cd29 Update to completion 2024-04-17 13:58:25 -04:00
MagicBot d7ba42f4da Update to batch completion 2024-04-17 13:48:39 -04:00
MagicBot 689fc142d0 Persisted items belong in vendor inventory not virtual ones. 2024-04-17 13:46:10 -04:00
MagicBot 8df0c838cc More completion work 2024-04-17 12:47:28 -04:00
MagicBot f9825900cc More completion work 2024-04-17 12:36:23 -04:00
MagicBot 1a27a54926 Not right place for this perhaps 2024-04-17 12:24:17 -04:00
MagicBot 1e003c28ab Completion work 2024-04-17 12:20:45 -04:00
MagicBot 8cada05424 Completion time reset before new batch 2024-04-17 12:04:41 -04:00
MagicBot dda98318eb Work on virtual item handling 2024-04-17 11:56:23 -04:00
MagicBot 6e95ae5245 Variable naming update 2024-04-16 16:01:17 -04:00
MagicBot a4a9a26ac4 Complete is complete 2024-04-16 15:53:13 -04:00
MagicBot 93aec63f78 File reformat 2024-04-16 15:40:10 -04:00
MagicBot 9804a0fc89 Debug strings were removed 2024-04-16 15:35:55 -04:00
MagicBot 3484802a24 Comment cleanup 2024-04-16 15:34:39 -04:00
MagicBot 946a150db1 Comment cleanup 2024-04-16 15:34:14 -04:00
MagicBot 197df90a21 Comment cleanup 2024-04-16 15:33:39 -04:00
MagicBot a944f7342a All rolls treated equally 2024-04-16 15:17:15 -04:00
MagicBot 7c855afbe7 All runs set to complete 2024-04-16 15:11:03 -04:00
MagicBot d42bc3520d Single runs are set to complete. Multiple item runs are dumped to inventory. 2024-04-16 15:03:59 -04:00
MagicBot a86d90ef41 serialization work 2024-04-16 14:55:03 -04:00
MagicBot c5dfb3ad81 Serialization work 2024-04-16 14:47:35 -04:00
MagicBot e879c588dc More window work. 2024-04-16 14:21:29 -04:00
MagicBot 862e75cd4c Serialization updated. Collection adds slot. 2024-04-16 14:01:46 -04:00
MagicBot d47643e730 Error logging added 2024-04-15 15:48:15 -04:00
MagicBot 0727361933 More window work 2024-04-15 15:29:13 -04:00
MagicBot c1b0bcedf4 Remove workorder when completed 2024-04-15 15:22:11 -04:00
MagicBot 315c2abfb9 Remove workorder when completed 2024-04-15 15:15:08 -04:00
MagicBot b0c0c507e5 More window work 2024-04-15 14:59:07 -04:00
MagicBot 12b6e41432 Fixing Junk functionality 2024-04-15 14:45:34 -04:00
MagicBot a2484f94eb Bugfix in forge contains 2024-04-15 14:33:33 -04:00
MagicBot b4824c69b8 Window work 2024-04-15 14:24:50 -04:00
MagicBot 03fb180f02 Set variable on submit 2024-04-15 12:49:37 -04:00
MagicBot 250afe3bba Serialization update 2024-04-15 12:41:05 -04:00
MagicBot b80b3a81b5 Message sent early 2024-04-15 12:34:35 -04:00
MagicBot cd8b910262 Clear collections last 2024-04-15 12:31:16 -04:00
MagicBot d007850afe Clear collections last 2024-04-15 12:23:46 -04:00
MagicBot 7f3873b63f fail fast on null 2024-04-15 12:23:01 -04:00
MagicBot 963df074a4 More persist work 2024-04-15 12:17:57 -04:00
MagicBot 5505d7bc61 Items are persisted and moved to vendor inventory 2024-04-15 12:12:40 -04:00
MagicBot 0c9ec31fa3 Window serialization work 2024-04-15 11:53:24 -04:00
MagicBot d71c65702d Window serialization work 2024-04-15 11:49:42 -04:00
MagicBot a4af39cab7 Window serialization work 2024-04-15 11:45:38 -04:00
MagicBot 9ba697c310 Persist item work 2024-04-15 11:30:56 -04:00
MagicBot 2b670ea53a Persist item work 2024-04-15 11:17:10 -04:00
MagicBot 5ade37f7a4 Persist item work 2024-04-15 11:15:34 -04:00
MagicBot 1be657d3ef Persist item work 2024-04-15 11:07:26 -04:00
MagicBot 9dbefcd830 Unused variable removed 2024-04-15 11:01:53 -04:00
MagicBot e1a9ddae89 forged items are persisted 2024-04-14 17:30:35 -04:00
MagicBot 2690c3212b forged items are persisted 2024-04-14 17:18:58 -04:00
MagicBot aac7e46ae8 forged items are persisted 2024-04-14 17:04:59 -04:00
MagicBot a16bef418b forged items are persisted 2024-04-14 17:02:36 -04:00
MagicBot 8b4b3b971a forged items are persisted 2024-04-14 16:46:31 -04:00
MagicBot 692ee51608 forged items are persisted 2024-04-14 16:31:05 -04:00
MagicBot d5bd500f39 forged items are persisted 2024-04-14 16:29:17 -04:00
MagicBot e195d86fb6 Serialization update 2024-04-14 15:49:08 -04:00
MagicBot 114aeb9f64 Update NPC window 2024-04-14 15:38:24 -04:00
MagicBot d95bc5c261 Initialize all collections for npc 2024-04-14 15:30:10 -04:00
MagicBot 73fa5b5c7e Support for non-random rolling 2024-04-14 15:19:55 -04:00
MagicBot 85e5e2a7e3 Init forge support only for valid contracts 2024-04-14 15:17:32 -04:00
MagicBot 48f88ec819 Serialization update 2024-04-14 15:11:10 -04:00
MagicBot 139998eaa1 Moved declaration outside of loop 2024-04-14 15:02:52 -04:00
MagicBot 673f606de8 Cleanup of cache usage 2024-04-14 15:00:25 -04:00
MagicBot 9464500e95 More integration work 2024-04-14 14:48:59 -04:00
MagicBot 5e5b9884ef Begin integration 2024-04-14 14:13:10 -04:00
MagicBot 94ab64d629 reformat class 2024-04-14 14:11:22 -04:00
MagicBot 2c89509fa2 Moved logging message up 2024-04-14 14:07:06 -04:00
MagicBot fae81a0263 Removed cast in validation 2024-04-14 13:58:25 -04:00
MagicBot a8d5521dd8 Mobtype work related to ForgeManager 2024-04-14 13:51:37 -04:00
MagicBot ea555be08e Mobtype work related to ForgeManager 2024-04-14 13:13:28 -04:00
MagicBot 74e97fb435 Minor cleanup 2024-04-14 12:41:16 -04:00
MagicBot eed25d8c16 Minor cleanup 2024-04-14 12:24:53 -04:00
MagicBot bc195c27db Rework of error handling. 2024-04-14 12:14:17 -04:00
MagicBot 0653828fe3 Rework of error handling. 2024-04-14 12:13:51 -04:00
MagicBot 2feba8ac50 Rework of error handling. 2024-04-14 12:08:51 -04:00
MagicBot 5e7515a9ad Merge remote-tracking branch 'refs/remotes/origin/bugfix-combat-range' into feature-workorder2.4 2024-04-14 11:55:19 -04:00
FatBoy 2aaca661e2 new combat finalized 2024-04-13 19:44:03 -05:00
FatBoy 3f27bae099 mobs dont double tap when unarmed 2024-04-13 19:12:09 -05:00
FatBoy 79f4a33b6e add half player character height to attack range in lieu of hitbox 2024-04-13 19:10:10 -05:00
MagicBot ec47e24549 Not yet set when validating. 2024-04-13 12:26:39 -04:00
MagicBot 8fe7a6e896 Class cleanup 2024-04-13 11:28:48 -04:00
MagicBot f068e6891e Collection declaration cleanup 2024-04-13 10:10:17 -04:00
MagicBot cabbf8bf44 Java 8 TimeUnit 2024-04-13 10:06:44 -04:00
MagicBot 9c146fff4d Only random rolled items are unidentified. 2024-04-13 10:01:35 -04:00
MagicBot 333fcc9d14 Multiple item workOrder work 2024-04-13 09:53:20 -04:00
MagicBot 4aca075da6 Multiple item workOrder work 2024-04-13 09:38:58 -04:00
MagicBot a5bcdff216 Multiple item workOrder work 2024-04-13 09:31:18 -04:00
MagicBot 3c704d6b85 Multiple item workOrder work 2024-04-13 09:22:23 -04:00
MagicBot d26214d032 Multiple item workOrder work 2024-04-13 09:20:25 -04:00
MagicBot 09c96c772e Multiple item workOrder work 2024-04-13 09:10:56 -04:00
MagicBot f6e1c78b0b Debug string update 2024-04-13 08:57:53 -04:00
MagicBot ec80146117 forge items each cycle 2024-04-13 08:51:02 -04:00
MagicBot 980dee2e14 Work on multiple slot support 2024-04-13 08:31:36 -04:00
MagicBot 832b994757 Begin work on forgeItem() 2024-04-13 08:19:09 -04:00
MagicBot a18785fb3d Begin work on forgeItem() 2024-04-13 08:10:59 -04:00
MagicBot f076b38044 Contextual variable name updates 2024-04-13 07:54:26 -04:00
MagicBot 68f2af5306 Bugfix in delay override 2024-04-13 07:44:16 -04:00
MagicBot 052867893c Bugfix in delay override 2024-04-13 07:31:17 -04:00
MagicBot 13ba31285e Logging on each cycle 2024-04-13 07:26:39 -04:00
MagicBot 61a418fd8e Debug comment update 2024-04-13 07:18:55 -04:00
MagicBot 3fa4185b7f Debug comment update 2024-04-13 06:55:49 -04:00
MagicBot 5cb08c1dc0 Forge must be protected 2024-04-13 06:53:36 -04:00
MagicBot fc3a0eaf0c Forge must be protected 2024-04-13 06:48:58 -04:00
MagicBot 2e83b8c693 Better context in name 2024-04-13 06:42:21 -04:00
MagicBot 44eafc3345 Validation work 2024-04-12 17:41:08 -04:00
MagicBot 29ce3537f7 Work on cost overflow calculations 2024-04-12 17:29:52 -04:00
MagicBot 058887ff4d Locked resources are always unavailable. 2024-04-12 17:16:12 -04:00
MagicBot dc18e71ee4 Locked resources are always unavailable. 2024-04-12 17:15:04 -04:00
MagicBot 479e38e3f6 Validation work 2024-04-12 17:06:42 -04:00
MagicBot dd764281e8 Rolling duration updated 2024-04-12 16:52:43 -04:00
MagicBot f7959a51bd Rolling duration updated 2024-04-12 16:43:22 -04:00
MagicBot 97e0ada1a9 workerOrder cost updating 2024-04-12 16:16:34 -04:00
MagicBot cc3d5fe076 workerOrder cost updating 2024-04-12 15:48:25 -04:00
MagicBot 2200cb9bef workerOrder cost updating 2024-04-12 15:41:15 -04:00
MagicBot a16cda8a4a workerOrder cost updating 2024-04-12 15:31:12 -04:00
MagicBot af53859ba9 Comment added 2024-04-11 13:46:24 -04:00
MagicBot a7a1230f1b Work on wordOrder iteration 2024-04-10 18:01:27 -04:00
MagicBot df037a51f0 More info on template bootstrap 2024-04-10 17:40:00 -04:00
MagicBot 4d18e71aa1 More info on template bootstrap 2024-04-10 17:33:59 -04:00
MagicBot 7f579e5268 Bane rank loaded from template 2024-04-10 17:22:45 -04:00
MagicBot f6c53e51ed Calculate cost of workOrder 2024-04-10 16:47:02 -04:00
MagicBot 1429a3a4d5 Configure upon submit() 2024-04-10 16:06:09 -04:00
FatBoy dc81ddaba7 handle retaliate when being attacked 2024-04-09 21:23:29 -05:00
FatBoy 4a001179b5 add hitbox to abs vs abs range checks 2024-04-08 20:37:27 -05:00
FatBoy 1bff06cde0 using building bounds and hitBox for mele range 2024-04-08 20:20:16 -05:00
MagicBot ba4648f812 Minor class cleanup 2024-04-08 17:56:51 -04:00
MagicBot 1d0ab95b88 Minor class cleanup 2024-04-08 17:52:35 -04:00
MagicBot 275644ec83 Minor class cleanup 2024-04-08 17:42:47 -04:00
MagicBot 69416528b3 Minor class cleanup 2024-04-08 17:40:38 -04:00
MagicBot d3e0146d86 Minor class cleanup 2024-04-08 17:16:05 -04:00
MagicBot 35fab88949 Minor class cleanup 2024-04-08 17:15:56 -04:00
MagicBot 27a37eba79 Minor class cleanup 2024-04-08 17:06:42 -04:00
MagicBot deb5b36309 Minor class cleanup 2024-04-08 17:02:20 -04:00
MagicBot b84de95865 Minor class cleanup 2024-04-08 16:58:07 -04:00
MagicBot 5650c0f05a Minor class cleanup 2024-04-08 16:54:33 -04:00
MagicBot afa1b8478a Minor class cleanup 2024-04-08 16:53:53 -04:00
MagicBot cafe0a0fe1 Minor class cleanup 2024-04-08 16:49:19 -04:00
MagicBot bfa43823f6 Minor class cleanup 2024-04-08 16:42:44 -04:00
MagicBot 533ed87321 Minor class cleanup 2024-04-08 16:26:56 -04:00
MagicBot 129bd4aaa6 Minor class cleanup 2024-04-08 16:26:29 -04:00
MagicBot eb93481fda Merge branch 'feature-workorder2.4' of http://repo.magicbane.com/MagicBane/Server into feature-workorder2.4 2024-04-08 16:23:41 -04:00
MagicBot a160fe1b00 Time recycle update 2024-04-08 16:23:08 -04:00
MagicBot c2f70c0f26 Unused method removed 2024-04-08 15:58:48 -04:00
MagicBot 98c0712dea Method to calculate warehosue overflow. 2024-04-08 15:55:57 -04:00
MagicBot 7c4f7f391b Method to calculate warehosue overflow. 2024-04-08 15:54:25 -04:00
MagicBot e01dc9b09c More fleshing out of workorder usage 2024-04-08 13:15:40 -04:00
MagicBot 178bb3718a Slot count calculated 2024-04-08 13:10:23 -04:00
MagicBot f088d2aa72 More WorkOrder work 2024-04-08 13:06:22 -04:00
MagicBot 0645a93b9c Track items and their workorders. 2024-04-08 04:46:54 -04:00
MagicBot 8b38f1a695 Track items and their workorders. 2024-04-08 04:42:44 -04:00
MagicBot 652476fde8 Track items and their workorders. 2024-04-08 04:37:27 -04:00
MagicBot 74a7a255be Track items and their workorders. 2024-04-08 04:32:04 -04:00
MagicBot abd112035a Track items and their workorders. 2024-04-08 04:17:31 -04:00
MagicBot f5f92a1d88 rollingDuration fleshed out 2024-04-07 23:21:35 -04:00
MagicBot 75d520831f More workorder logic work 2024-04-07 23:00:37 -04:00
MagicBot 92402097d4 ForgeManager started at boot 2024-04-07 22:53:41 -04:00
MagicBot 5e92bab977 submit workorder to forgemanager 2024-04-07 22:40:14 -04:00
MagicBot a5df674fbe Update to debug strings 2024-04-07 22:34:06 -04:00
MagicBot 4462f74f8c More workorder work. 2024-04-07 22:31:58 -04:00
MagicBot 781053ab22 Debug string added 2024-04-07 22:28:07 -04:00
MagicBot 053c105c26 Method to validate workorder 2024-04-07 22:21:47 -04:00
MagicBot 46bf67672a workorder fields assigned 2024-04-07 22:18:12 -04:00
MagicBot d539e419fe Begin adding workOrder logic 2024-04-07 22:15:06 -04:00
MagicBot ec5a8f5281 Logic cleanup. 2024-04-07 13:25:42 -04:00
MagicBot 97558b51c8 Method moved to top of handler. 2024-04-07 13:23:22 -04:00
MagicBot 4a3a8d4b65 Minor class cleanup 2024-04-07 13:10:58 -04:00
MagicBot 85a66339e2 inline accessors 2024-04-07 13:08:00 -04:00
MagicBot b785d35231 Removed unused method 2024-04-07 13:03:24 -04:00
MagicBot 21b1dba84d Switch directly on actiontype 2024-04-07 13:01:43 -04:00
MagicBot fc71b8cb61 Inline setter 2024-04-07 12:53:55 -04:00
MagicBot 31129493e5 ActionType Take 2024-04-07 12:51:58 -04:00
MagicBot 8b4eafebf3 Elevate access. It's a message... 2024-04-07 12:48:56 -04:00
MagicBot cf38362d84 Handler uses enumeration 2024-04-07 12:45:13 -04:00
MagicBot 30800478f2 Message now uses enum 2024-04-07 12:04:15 -04:00
MagicBot 9bbe9b399e Better name for map 2024-04-06 16:08:06 -04:00
MagicBot 16d17798be Mirror field in client 2024-04-06 16:06:55 -04:00
MagicBot 679c7afe0e field is templateID not item uuid. 2024-04-06 16:05:52 -04:00
MagicBot f10141eddb Variable removed from city 2024-04-06 15:45:45 -04:00
MagicBot 10805a7d37 Class moved up in package 2024-04-06 15:30:35 -04:00
MagicBot b979fbb1bc Begin message rewrite 2024-04-06 14:01:23 -04:00
MagicBot b86ca33087 Unused variables removed 2024-04-06 10:56:31 -04:00
MagicBot 993abfbf6f variable renamed 2024-04-06 07:26:17 -04:00
MagicBot ffd41101c3 variable renamed 2024-04-05 20:14:29 -04:00
MagicBot 39e06994d9 Workorder and Forgemanger classes created 2024-04-05 20:13:16 -04:00
MagicBot ec405226c5 Formation refactored to enum 2024-04-05 19:37:45 -04:00
MagicBot 627a35e364 Update to devcmd 2024-04-05 09:43:30 -04:00
MagicBot 6254472bb8 New column used in rs constructor 2024-04-05 09:35:38 -04:00
MagicBot 0bbedd5983 Code removed; column populated 2024-04-05 09:33:57 -04:00
MagicBot 58fb2a9b90 Populate new column in table. 2024-04-05 09:30:00 -04:00
MagicBot f7c76937fb Writing string of bitset for contracts. 2024-04-05 09:18:12 -04:00
MagicBot 52865d7cfd refactored out dependency 2024-04-05 08:57:00 -04:00
MagicBot 8424aa557f refactored out dependency 2024-04-05 08:55:41 -04:00
MagicBot 0ab7bafe5e refactored out dependency 2024-04-05 08:54:58 -04:00
MagicBot 43b212ed42 refactored out dependency 2024-04-05 08:53:18 -04:00
MagicBot 0b4873a522 refactored out dependency 2024-04-05 08:44:59 -04:00
MagicBot d3d1227d6c refactored out dependency 2024-04-05 08:35:48 -04:00
MagicBot 181e7661c1 fromString and asString EnumSet helper methods created 2024-04-05 08:10:28 -04:00
MagicBot c1ee6f5b52 Renamed class to not conflict with the java.lang version. 2024-04-05 07:59:44 -04:00
MagicBot dd84615ca1 Optimization moved to method 2024-04-04 15:26:32 -04:00
MagicBot aad0418260 Faster if bitvector is 0. 2024-04-04 15:18:43 -04:00
MagicBot 46f3850e93 Values parsed as behaviourtype enumset 2024-04-04 15:16:11 -04:00
MagicBot ab34931c3d Test if value is enumset 2024-04-04 15:05:25 -04:00
MagicBot 52116063e5 Test if value is enumset 2024-04-04 15:02:19 -04:00
MagicBot 04243cc21e Arraylists of ints 2024-04-04 14:27:07 -04:00
MagicBot 1ab041ce0f Last two variables need work. 2024-04-04 14:05:05 -04:00
MagicBot 1dac740fca Bitvector helper method added. 2024-04-04 13:59:30 -04:00
MagicBot 1e3e173dfe Final class cleanup. 2024-04-04 13:27:43 -04:00
MagicBot 27971c5fb3 not_enemy_types_json parsed 2024-04-04 13:18:37 -04:00
MagicBot 52fab5d92b not_enemy_types_json parsed 2024-04-04 13:18:19 -04:00
MagicBot 5054006ffc not_enemy_types_json parsed 2024-04-04 13:15:53 -04:00
MagicBot f4e24e032b rune_enemy_monster_types parsed 2024-04-04 13:14:21 -04:00
MagicBot 2248361503 rune_enemy_monster_types parsed 2024-04-04 13:13:14 -04:00
MagicBot 5c20fca28a Rune skill adjusts parsed 2024-04-04 12:16:29 -04:00
MagicBot 9bbb949868 Rune skill adjusts parsed 2024-04-04 11:54:01 -04:00
MagicBot 3e6bfacd86 Fix for mixed type values 2024-04-04 11:43:02 -04:00
MagicBot 1043c84b9d Both sparse fields parsed 2024-04-04 11:34:02 -04:00
MagicBot febada8d63 Both sparse fields parsed 2024-04-04 11:15:47 -04:00
MagicBot 8b6fef4cbc Both sparse fields parsed 2024-04-04 11:13:58 -04:00
MagicBot 1ce9029edf Fix to rune_group parsing 2024-04-04 11:02:50 -04:00
MagicBot 587ac802de Fix to rune_group parsing 2024-04-04 11:00:19 -04:00
MagicBot 58455843f9 long not double 2024-04-04 10:54:43 -04:00
MagicBot a09ac1f2a2 long not double 2024-04-04 10:54:22 -04:00
MagicBot 8c454c5d7c Using name as template id is not yet set. 2024-04-04 10:47:55 -04:00
MagicBot 83dd47d22a Test 2024-04-04 10:46:40 -04:00
MagicBot c2910bb87c Test 2024-04-04 10:45:45 -04:00
MagicBot 7e6c051a02 More parsing work; sparse_data field loaded into string for now. 2024-04-04 10:39:54 -04:00
MagicBot 35b368d7fe rune_speed parsed 2024-04-04 10:37:12 -04:00
MagicBot d39790ab4c More parsing work 2024-04-04 10:23:21 -04:00
MagicBot 09d28b964a More parsing work 2024-04-04 10:13:25 -04:00
MagicBot 139490e943 Fields defined. 2024-04-04 10:07:42 -04:00
MagicBot 8830388728 More rune parsing work 2024-04-04 09:56:25 -04:00
MagicBot 68b9f9e887 More rune parsing 2024-04-04 09:54:52 -04:00
MagicBot 5ef45a2212 Parsing power_granted_skills 2024-04-04 09:52:19 -04:00
MagicBot 772e7f7f29 Parsing power_granted_skills 2024-04-04 09:43:41 -04:00
MagicBot 8afa00f885 Parsing skill_granted_skills 2024-04-04 09:34:44 -04:00
MagicBot fcf76011f4 power_granted_skills hashmap defined 2024-04-03 16:14:21 -04:00
MagicBot 3e2f420c30 skills_granted_array started for rune 2024-04-03 13:40:24 -04:00
MagicBot 26fd6f8de2 Update to error string 2024-04-03 12:57:02 -04:00
MagicBot 0966b82d5f rune_skill_grant parsed 2024-04-02 15:24:52 -04:00
MagicBot d526d69bca rune_skill_grant parsed 2024-04-02 15:17:33 -04:00
MagicBot 242984ffaf Rune attribute and max attribute adjusts parsed 2024-04-02 14:44:50 -04:00
MagicBot 4746a8c9cf More parsing work. 2024-04-02 14:41:22 -04:00
MagicBot 1603c8d8e9 Rename to conform 2024-04-02 14:37:01 -04:00
MagicBot ddba4f290d Rename to conform 2024-04-02 14:14:27 -04:00
MagicBot d621877e8c Begin rune parsing 2024-04-02 14:11:01 -04:00
MagicBot 713a52f705 Serialize current stats 2024-04-02 13:09:24 -04:00
MagicBot c68d5e0730 Attack bypass inserted 2024-04-02 12:49:36 -04:00
MagicBot 49c62fae60 Debug string 2024-04-02 12:42:28 -04:00
MagicBot 3bd4e75422 Debug string 2024-04-02 12:38:19 -04:00
MagicBot 791e5cb9b8 Attack early exit 2024-04-02 12:36:36 -04:00
MagicBot 2fb8f53751 Attack early exit 2024-04-02 12:33:01 -04:00
MagicBot dc366068a9 Methods moved to new handler 2024-04-02 12:00:59 -04:00
MagicBot 3ec76ab816 ItemManager created 2024-04-02 11:53:22 -04:00
MagicBot d8750f5e2c Unused methods removed 2024-04-01 17:28:48 -04:00
MagicBot f272be8b4d Header added to class 2024-04-01 17:26:38 -04:00
MagicBot f8f86d8e46 Header added to new class 2024-04-01 17:25:56 -04:00
MagicBot ee030a690a Project reformat 2024-04-01 17:00:14 -04:00
MagicBot 3df1da364c Magic number removed 2024-04-01 16:54:10 -04:00
MagicBot 389373be30 Not static 2024-04-01 16:45:00 -04:00
MagicBot cc02be95f3 Proper parsing of power grants 2024-04-01 16:32:17 -04:00
MagicBot 5a1027c611 Proper parsing of power grants 2024-04-01 16:26:35 -04:00
MagicBot 64e780744d Proper parsing of power grants 2024-04-01 16:23:54 -04:00
MagicBot 0abffeeb7f Proper parsing of power grants 2024-04-01 16:21:56 -04:00
MagicBot 75f11deee1 Proper parsing of power grants 2024-04-01 16:20:03 -04:00
MagicBot db91b606f6 Proper parsing of power grants 2024-04-01 16:12:52 -04:00
MagicBot 82373f8cc8 Proper parsing of power grants 2024-04-01 16:05:55 -04:00
MagicBot 946714d3ae Proper parsing of power grants 2024-04-01 15:53:36 -04:00
MagicBot 8414b0f4cf Consumable items are item_power_grant for their lookup 2024-04-01 15:26:52 -04:00
MagicBot faa262db99 Revert "Temp fix for 3 modifiers"
This reverts commit 6955f69156.
2024-04-01 14:21:16 -04:00
MagicBot 6955f69156 Temp fix for 3 modifiers 2024-04-01 13:51:20 -04:00
MagicBot 2ae39d2a29 Corrected source type 2024-04-01 13:07:18 -04:00
MagicBot 8e44adf16e No need for toUpper() here. 2024-04-01 12:58:16 -04:00
MagicBot fd73dbc349 Source types updated to match damage type 2024-04-01 12:53:49 -04:00
MagicBot f58aa61859 PIERCING 2024-04-01 12:42:49 -04:00
MagicBot ae7fecbf6d Effectbase updated with new enum 2024-04-01 12:41:33 -04:00
MagicBot 5ed497dd69 All damage type lookups go through method 2024-04-01 12:35:44 -04:00
MagicBot 14ee83e147 DamageType defined as in JSON 2024-04-01 12:13:19 -04:00
MagicBot a29269e335 Initial refactor of damagetype 2024-04-01 09:19:37 -04:00
MagicBot adfbf87056 Handler update. 2024-03-31 11:22:22 -04:00
MagicBot d80231eef0 Handler update. 2024-03-31 11:20:32 -04:00
MagicBot 3395efee49 bugfix: wrong char! 2024-03-31 11:01:12 -04:00
MagicBot 7acaccc77d Protocol handler code update 2024-03-31 10:54:33 -04:00
MagicBot 5aa01d94fd New handlers plugged into protocol class 2024-03-31 10:50:40 -04:00
MagicBot 7b405bbbf3 New handlers plugged into protocol class 2024-03-31 10:49:08 -04:00
MagicBot 504e26114e Migration to protocol class 2024-03-31 10:42:17 -04:00
MagicBot 4e5e49606c Methods moved out of old login handler 2024-03-31 10:37:03 -04:00
MagicBot f62f11a66c Handler created for GameServerIPRequestMsg 2024-03-31 10:33:46 -04:00
MagicBot 7911a17f0c Handler created for deletecharmsg 2024-03-31 10:26:01 -04:00
MagicBot 5c8c4fc817 Handler created for deletecharmsg 2024-03-31 10:25:25 -04:00
MagicBot 854d0a8a68 Handler created for commitnewcharmsg 2024-03-31 10:20:44 -04:00
MagicBot 61fca2c742 Handler created for ServerInfoMsg 2024-03-31 10:13:17 -04:00
MagicBot b752006d6f Handlers created for VersionInfoMsg and ClientLoginInfoMsg 2024-03-31 10:09:32 -04:00
MagicBot f9c0a9c3b5 Decoration type 2.1 JSON 2024-03-30 14:57:36 -04:00
MagicBot 71300f189d Parm name update 2024-03-30 14:16:20 -04:00
MagicBot d3fe643223 Madness; refactor out? 2024-03-30 14:15:23 -04:00
MagicBot 0cf4b5416d Refactor of signature 2024-03-30 14:04:08 -04:00
MagicBot a98de7b6fc Unused method 2024-03-30 13:54:33 -04:00
MagicBot efa7e6a03a UPDATE_EQUIP_SLOT db method plugged in 2024-03-30 13:43:01 -04:00
MagicBot 407fe9d583 Fixing equipslot db issue 2024-03-30 13:25:45 -04:00
MagicBot 36d8a6bdbd Fixing equipslot db issue 2024-03-30 13:04:35 -04:00
MagicBot cdd746e0df Removed extra squigglies 2024-03-30 12:44:12 -04:00
MagicBot 4e1621db99 Sql bugfix 2024-03-30 11:46:56 -04:00
MagicBot e5622a47c0 Inline templateID 2024-03-30 08:26:08 -04:00
FatBoy 46170e3ab7 players can use weapon powers again 2024-03-29 19:11:47 -05:00
FatBoy 01533b1056 auto attack timer for players fixed 2024-03-29 19:06:34 -05:00
FatBoy 87e24c16d9 Merge remote-tracking branch 'origin/feature-json7.4' into feature-json7.4 2024-03-29 19:06:17 -05:00
FatBoy 572bff8d6b auto attack timer for players fixed 2024-03-29 19:05:56 -05:00
MagicBot 52d37296a7 Uppercase for source type 2024-03-29 15:31:32 -04:00
MagicBot f682f9a5ae Uppercase for source type 2024-03-29 15:28:01 -04:00
MagicBot 2f3b9e0fb2 Uppercase for source type 2024-03-29 15:26:44 -04:00
MagicBot cfc36c0c27 Equipslot stored as string 2024-03-29 13:23:56 -04:00
MagicBot 0e431aa726 Handler written for protocol class 2024-03-29 10:08:11 -04:00
MagicBot 25ab3747eb Handler written for protocol class 2024-03-29 10:07:33 -04:00
MagicBot 7526cc808c TradeManager removed 2024-03-29 08:59:14 -04:00
MagicBot 019c254ac1 Handler created for InvalidTradeRequestMsg 2024-03-29 08:58:31 -04:00
MagicBot 8cd613c597 Handler created for CloseTradeWindow 2024-03-29 08:55:22 -04:00
MagicBot 5f16289052 Handler created for UnCommitToTradeMsg 2024-03-29 08:48:43 -04:00
MagicBot 2768980f6e Handler created for CommitToTradeMsg 2024-03-29 08:44:12 -04:00
MagicBot 3a2b138deb Handler created for AddGoldToTradeWindowMsg 2024-03-29 08:39:49 -04:00
MagicBot 3f1385dd33 Handler created for AddItemToTradeWindowMsg 2024-03-29 08:34:29 -04:00
MagicBot a70585448f RejectTradeRequest has no handler 2024-03-29 08:27:48 -04:00
MagicBot d4e38c113b Handler created for AceeptTradeMsg 2024-03-29 08:23:53 -04:00
MagicBot d7b18dc457 Handler created for RequestToTrade 2024-03-29 08:14:27 -04:00
MagicBot 7b909e1044 Handler created for AbstractChatMsg 2024-03-29 08:03:56 -04:00
MagicBot 4fd1a1a146 Handler created for AbstractChatMsg 2024-03-29 08:02:56 -04:00
MagicBot 9934e60fa4 Handler created for AbstractChatMsg 2024-03-29 08:02:00 -04:00
MagicBot b74105137e Handler created for AbstractChatMsg 2024-03-29 07:54:57 -04:00
MagicBot 301014f06f Handler created for AbstractChatMsg 2024-03-29 07:54:00 -04:00
MagicBot a37825168b Handler created for AbstractChatMsg 2024-03-29 07:50:57 -04:00
MagicBot 093bc5e97e Handler created for RecvSummonsMsg 2024-03-29 07:41:40 -04:00
MagicBot f0ac342b1f Handler created for SendSummonsMsg 2024-03-29 07:36:33 -04:00
MagicBot 8997701d8a Handler created for TrackWindowMsg 2024-03-29 07:30:24 -04:00
MagicBot ce403a6bd8 Handler created for TrainerInfoMsg 2024-03-29 07:11:01 -04:00
MagicBot bf712accf9 Handler created for RefineScreenMsg 2024-03-29 07:07:25 -04:00
MagicBot 1825035739 Handler created for RefineMsg 2024-03-29 07:04:46 -04:00
MagicBot 5a5fd8155c Handler created for StuckMsg 2024-03-29 06:52:11 -04:00
MagicBot 56bc38ab73 Handler created for PetAttackMsg 2024-03-29 06:45:26 -04:00
MagicBot 01fd6997a8 Handler created for ShowMsg 2024-03-29 06:40:06 -04:00
MagicBot 41f77364aa Cleanup of handler super calls 2024-03-29 06:35:17 -04:00
MagicBot 1acb74ade1 Handler created for RespawnMsg 2024-03-29 06:30:07 -04:00
MagicBot 35ba4bbeec CosttoOpenBankMsg has no handler 2024-03-29 06:26:59 -04:00
MagicBot a162377685 Handler created for ModifyStatMsg 2024-03-29 06:23:29 -04:00
MagicBot 5a1806d11b Handler created for PetCmdMsg 2024-03-29 06:17:46 -04:00
MagicBot 80c11db80b Handler created for ViewResourcesMsg 2024-03-29 06:14:19 -04:00
MagicBot fbec206389 Handler created for IgnoreMsg 2024-03-29 06:08:04 -04:00
MagicBot 7b9d9d64bb Handler created for ToggleSitStandMsg 2024-03-29 06:02:29 -04:00
MagicBot e86097d732 Handler created for LFGmsg 2024-03-29 05:58:38 -04:00
MagicBot a103e7c7cd Handlers created for toggle combat messages 2024-03-29 05:48:19 -04:00
MagicBot f653376c22 Handler created for ClientAdminCommandMsg 2024-03-29 05:31:16 -04:00
MagicBot 4bc19235a6 Handler created for LootMsg 2024-03-29 04:59:27 -04:00
MagicBot 06e41d5b94 Handler created for LootWindowRequestMsg 2024-03-29 04:52:07 -04:00
MagicBot 8083f39ba1 Handler created for DeleteItemMsg 2024-03-29 04:46:45 -04:00
FatBoy 162a049f30 mob attack delay 2024-03-28 22:29:47 -05:00
FatBoy 0486fa52e4 mob attack delay 2024-03-28 22:17:08 -05:00
FatBoy 0e9390ef53 mob attack delay 2024-03-28 22:15:48 -05:00
FatBoy f47a9772d7 mob attack delay 2024-03-28 22:08:03 -05:00
FatBoy 08060cf06f mob baseline stats 2024-03-28 21:46:54 -05:00
FatBoy 25fed51523 canRoll work 2024-03-28 21:06:57 -05:00
FatBoy 8c39ede852 canRoll work 2024-03-28 21:02:06 -05:00
FatBoy 692c6a268c canRoll work 2024-03-28 20:55:28 -05:00
FatBoy 415ec5f5d4 array list cast for canRoll 2024-03-28 20:47:29 -05:00
FatBoy 0c1431e60d SQL fix 2024-03-28 20:37:45 -05:00
FatBoy df07c80b1b combat manager fix 2024-03-28 20:25:40 -05:00
MagicBot 94253f547d Bugfix in deserialization 2024-03-28 20:44:14 -04:00
MagicBot 2640927b85 Value tweak 2024-03-28 19:34:27 -04:00
MagicBot fc06ea97bd Refactor out itembase 2024-03-28 12:17:58 -04:00
MagicBot 561b80b1aa Refactor out itembase 2024-03-28 12:15:43 -04:00
MagicBot 230679cef9 Templates backfilled with modtable data 2024-03-28 12:08:09 -04:00
MagicBot 8e43f17da0 Can roll list refactored 2024-03-28 11:50:22 -04:00
MagicBot a109e9864f More itembase refactor 2024-03-28 05:42:27 -04:00
MagicBot 5d367a737c More itembase refactor 2024-03-28 05:39:54 -04:00
MagicBot 2b7cc2bdd7 More itembase refactor 2024-03-28 05:38:38 -04:00
MagicBot 60c80ceee8 More itembase refactor 2024-03-28 05:35:39 -04:00
MagicBot 1cf9831e20 Itembase refactored out of gold 2024-03-28 05:34:50 -04:00
MagicBot 08f0fc1743 More itembase refactor 2024-03-28 05:21:45 -04:00
MagicBot 2aa9f9c134 More itembase refactor 2024-03-28 05:20:35 -04:00
MagicBot 3ee0ec1342 More itembase refactor 2024-03-28 05:10:22 -04:00
MagicBot 85a179ad47 More itembase refactor 2024-03-28 05:09:04 -04:00
MagicBot 03e6c591ff More itembase refactor 2024-03-28 05:06:04 -04:00
MagicBot 03c226f76e More itembase refactor 2024-03-28 05:04:59 -04:00
MagicBot 59bf787581 ItemTableEntry column update 2024-03-28 05:02:39 -04:00
MagicBot 61bb7be6b1 More itembase refactor 2024-03-28 05:01:29 -04:00
MagicBot 84c29a1222 More itembase refactor 2024-03-28 04:59:30 -04:00
MagicBot 02d8bf4f5c Bootyset column update 2024-03-28 04:53:45 -04:00
MagicBot eba8beb8f5 More itembase refactor 2024-03-28 04:52:01 -04:00
MagicBot 3dcffa3042 More itembase refactor 2024-03-28 04:50:08 -04:00
MagicBot 04991c94ba dyn_npc_production column update 2024-03-28 04:40:38 -04:00
MagicBot ee8e4f8a2e Inventoryset column update 2024-03-28 04:38:52 -04:00
MagicBot 594509e0ad Parm removed from stored procedure. 2024-03-28 04:35:08 -04:00
MagicBot d57eb295e9 Schema update 2024-03-28 04:24:36 -04:00
MagicBot b8a1081544 Debug code removed. 2024-03-28 04:11:46 -04:00
MagicBot 045b101d7b Bypass for mobiles in def logic 2024-03-28 03:59:22 -04:00
MagicBot 76ae0f4b59 This should fail fast. 2024-03-28 03:42:29 -04:00
MagicBot 2cfbd77e2f Update to error message 2024-03-28 03:33:40 -04:00
MagicBot 768e209b2b signature names updated 2024-03-28 03:30:00 -04:00
MagicBot eb621f184d Update to skill_used logic 2024-03-28 03:24:57 -04:00
FatBoy ebf7130b63 defense bug fix 2024-03-27 18:32:46 -05:00
FatBoy a65ecfeb65 damage calculated as int 2024-03-27 18:18:41 -05:00
FatBoy 1b384a6d11 damage calculated as int 2024-03-27 18:10:58 -05:00
FatBoy cde9901bb6 remove ItemBase variables 2024-03-27 18:00:20 -05:00
FatBoy 7f452d18bc remove ItemBase from NPCManager 2024-03-27 17:54:28 -05:00
FatBoy ce7b9ff96f remove ItemBase from NPC 2024-03-27 17:49:35 -05:00
FatBoy 3ff9115052 remove ItemBase from LootManager 2024-03-27 17:47:38 -05:00
FatBoy 6c78e7d9fa remove ItemBase from LootManager 2024-03-27 17:43:49 -05:00
FatBoy 6514fd8dc3 remove ItemBase from NPC 2024-03-27 17:39:42 -05:00
FatBoy a741bb3482 remove ItemBase from PlayerCharacter 2024-03-27 17:36:43 -05:00
FatBoy def5ceee46 remove ItemBase form absChar and Mob 2024-03-27 17:31:04 -05:00
FatBoy aff2a8fa0e ABS char skill system 2024-03-27 17:17:34 -05:00
FatBoy 27d869276a purge ItemBase form mobAI 2024-03-27 16:53:44 -05:00
MagicBot 7e3a8a7a40 Handler created for LeaveWorldMsg 2024-03-27 14:10:59 -04:00
MagicBot c33cd9773f Handler created for RandomMsg 2024-03-27 14:01:32 -04:00
MagicBot 2d246a6773 Handler created for TrainMsg 2024-03-27 13:57:36 -04:00
MagicBot fa5980bc6a Handler created for GuildTreeStatusMSg 2024-03-27 13:51:14 -04:00
MagicBot 17f18b83f4 Handler created for PerformActionMsg 2024-03-27 13:41:58 -04:00
MagicBot 507ec302e7 Handler created for PromptRecallMsg 2024-03-27 13:34:32 -04:00
MagicBot 5cfbd9998c Handler created for UseCharterMsg 2024-03-27 13:29:33 -04:00
MagicBot 68ae9c1b97 Handler created for SocialMSg 2024-03-27 13:26:47 -04:00
MagicBot 5397833dea Handler created for WhoRequestMsg 2024-03-27 13:23:00 -04:00
MagicBot 4598709ba1 Handler created for UpdateStateMsg 2024-03-27 13:19:05 -04:00
MagicBot ac92d69914 Handler created for TargetObjectMsg 2024-03-27 13:15:06 -04:00
MagicBot a1f233723f Cleanup of value handling 2024-03-27 13:09:35 -04:00
MagicBot 063f3081b5 Methods moved out of message pump 2024-03-25 11:41:16 -04:00
MagicBot 72ce1e0694 Revert value store 2024-03-25 11:29:53 -04:00
MagicBot 0004215605 Revert value store 2024-03-25 11:29:04 -04:00
MagicBot c0a50544d7 Value is only an override 2024-03-25 06:35:45 -04:00
MagicBot a130240339 Value is only an override 2024-03-25 06:19:37 -04:00
MagicBot 54cd1c59f7 Value is only an override 2024-03-25 06:04:32 -04:00
MagicBot a7ed30130d Value is set as items as used or damaged. Not calculated on the fly. 2024-03-25 05:59:59 -04:00
MagicBot 4e2add4d64 Potion charges accounted for in price 2024-03-25 05:43:20 -04:00
MagicBot 6a62f93cba combat_health_full used from json 2024-03-25 05:29:15 -04:00
MagicBot f523e4832e Variable renamed to conform with json 2024-03-25 05:25:09 -04:00
MagicBot 28b0fd6fd4 Removed two variables 2024-03-25 05:21:59 -04:00
MagicBot 0f703785f3 Strip trailing ; when writing enumset 2024-03-25 04:50:58 -04:00
MagicBot ded3e16d48 Class renaming for clarity 2024-03-25 04:44:35 -04:00
MagicBot 678f5463ea Name given default value 2024-03-25 04:36:07 -04:00
MagicBot 575d21a786 Value logic update 2024-03-25 04:28:28 -04:00
MagicBot 4fa5ccf416 Value logic update 2024-03-25 04:26:55 -04:00
MagicBot eba905b15d Value set in constructor 2024-03-25 00:52:47 -04:00
MagicBot 14ccb1f80b Value set in constructor 2024-03-25 00:30:16 -04:00
MagicBot 9d140be510 Weight not value 2024-03-24 23:19:55 -04:00
MagicBot eb78716401 Update needed here for inventory 2024-03-24 11:10:59 -04:00
MagicBot 3074b77471 Handler created for VendorDialogMsg 2024-03-24 10:49:29 -04:00
MagicBot 53b7aca0ce Handlers created for vendor buy/sell windows 2024-03-24 10:34:41 -04:00
MagicBot 083349b75b Handlers created for gold-vault interactions 2024-03-24 10:21:53 -04:00
MagicBot ae3423b99b Handlers created for vault interactions 2024-03-24 10:13:00 -04:00
MagicBot 5439df5653 Handlers created for vault interactions 2024-03-24 10:12:16 -04:00
MagicBot e7e32ca4ef Handlers created for bank interaction 2024-03-24 10:01:43 -04:00
MagicBot e971674465 Handlers created for bank interaction 2024-03-24 09:56:41 -04:00
MagicBot 943d274e5f Project reformat. 2024-03-24 09:42:27 -04:00
MagicBot d0bb761344 Bugfix in item constructor 2024-03-24 09:40:47 -04:00
MagicBot a8ba5ae62b More accurate than BakedInStats 2024-03-24 09:39:38 -04:00
MagicBot 97c0b0bbee Unused method removed 2024-03-24 09:36:01 -04:00
MagicBot 67e0766894 New Handler created for SELLOBJECT 2024-03-24 09:18:05 -04:00
MagicBot 3fc5fa71a4 No enchants loaded from db for negative id items 2024-03-24 09:02:56 -04:00
MagicBot 4fc7c90c15 Method moved to handler. Less in Item the better. 2024-03-24 08:41:53 -04:00
MagicBot e50c519eec Rewrite of handler 2024-03-24 08:25:25 -04:00
MagicBot 57016da1d0 Rewrite of handler 2024-03-24 08:21:24 -04:00
MagicBot 8d1c6cc082 Rewrite of handler 2024-03-24 08:20:37 -04:00
MagicBot 2fb889272b Rewrite of handler 2024-03-24 08:14:40 -04:00
MagicBot 4194aa09d1 Rewrite of handler 2024-03-24 08:07:24 -04:00
MagicBot 0004bb63b0 Sell inventory get negative uid 2024-03-24 07:55:59 -04:00
MagicBot d7eef4c623 Logic update in byfromnpc 2024-03-23 19:39:38 -04:00
MagicBot 0fa042cece Final CombatManager 2024-03-23 19:22:14 -04:00
MagicBot 6a0599a972 Unused method removed 2024-03-23 19:11:29 -04:00
MagicBot cef2a7c188 Backfill code removed 2024-03-23 19:04:17 -04:00
MagicBot ab2659d01f Backfill code removed 2024-03-23 18:55:18 -04:00
MagicBot 601ed40eb2 Passives clamped at 75% 2024-03-23 18:39:03 -04:00
MagicBot 2bb414fc33 Update to passive logic 2024-03-23 18:33:32 -04:00
MagicBot ecc14fc3af Setting slot.NONE when moving to inventory 2024-03-23 09:25:49 -04:00
MagicBot ea38c3bef7 Unused Junk removal 2024-03-23 08:47:46 -04:00
MagicBot bf990a886c Ignoring current ident flag when back-filling 2024-03-22 14:36:44 -04:00
MagicBot 22d08b51b7 Back filling item flags 2024-03-22 14:24:46 -04:00
MagicBot 551361e10a Back filling item flags 2024-03-22 13:51:09 -04:00
MagicBot 99b9444ba8 Set flags when created 2024-03-22 13:24:54 -04:00
MagicBot c390ebe0c6 Empty check when reading enum 2024-03-22 13:19:56 -04:00
MagicBot 513118d42c Flags defined in in-memory constructor 2024-03-22 13:14:45 -04:00
MagicBot b0c43a5258 Back-fill support added. 2024-03-22 13:06:30 -04:00
MagicBot eca71fa685 Item flags refactored 2024-03-22 13:03:47 -04:00
MagicBot f01fb6f848 Variable rename 2024-03-22 12:37:40 -04:00
MagicBot 0f18258d1b Variable rename 2024-03-22 12:35:47 -04:00
MagicBot abc4a227a9 Comment cleanup 2024-03-22 12:34:48 -04:00
MagicBot 1c368003ae String rename 2024-03-22 12:33:34 -04:00
MagicBot ee34f9e8ec parameter rename 2024-03-22 12:28:58 -04:00
MagicBot d511eda713 Removed junk dev commands. 2024-03-20 13:48:01 -04:00
MagicBot 4b20b0efe3 Removed junk dev commands. 2024-03-20 13:46:57 -04:00
MagicBot 5c731894b1 Removed ordering junk 2024-03-18 14:03:42 -04:00
MagicBot 6ff26f6a25 Equipset reloaded after respawn 2024-03-18 13:29:09 -04:00
MagicBot b041326e23 Use correct serialization 2024-03-18 13:14:22 -04:00
MagicBot c8d355636b Only one item manager 2024-03-18 12:47:55 -04:00
MagicBot fa0dfadc8b Start mobequip refactor 2024-03-18 12:29:57 -04:00
MagicBot 8f7208ff34 Start mobequip refactor 2024-03-18 10:12:13 -04:00
MagicBot 61c4cb1361 Start mobequip refactor 2024-03-18 10:01:29 -04:00
MagicBot 0590ae64e7 Start mobequip refactor 2024-03-18 09:38:33 -04:00
MagicBot 7fa8c3bfff Drop chance added to item. 2024-03-18 09:18:51 -04:00
MagicBot 82c4e3169e Merge remote-tracking branch 'origin/unified-combat-manager' into feature-json7.3
# Conflicts:
#	src/engine/mobileAI/utilities/CombatUtilities.java
2024-03-18 08:03:10 -04:00
MagicBot 84f9d54ec0 Unused junk removed 2024-03-18 07:01:44 -04:00
MagicBot 3e71cf4b45 Unused junk removed 2024-03-18 06:57:39 -04:00
MagicBot 68b9651f94 Unused junk removed 2024-03-18 06:56:00 -04:00
MagicBot 50171e4600 TOL destroyed last in thread 2024-03-18 06:46:28 -04:00
FatBoy 9d7f2f39fe Unified Combat System 2024-03-17 15:56:47 -05:00
MagicBot a30c041a17 Logic update 2024-03-17 13:52:41 -04:00
MagicBot 756e20633f Warehouse deleted from db 2024-03-17 13:23:46 -04:00
MagicBot 12c1cde069 Warehouse deleted from db 2024-03-17 13:21:55 -04:00
MagicBot 2e0ffe67fa Overdraft method written 2024-03-17 12:26:57 -04:00
MagicBot 0c0f0aa54d Overdraft method written 2024-03-17 12:25:59 -04:00
MagicBot 538e452377 Sql update 2024-03-17 12:09:37 -04:00
MagicBot 264ce39552 Locks saved to disk 2024-03-17 11:55:00 -04:00
MagicBot b8bd71616b Setting city when loading 2024-03-17 11:45:18 -04:00
MagicBot b2f3e7a635 Building set on load 2024-03-17 11:36:26 -04:00
MagicBot e38324af63 Building set on load 2024-03-17 11:34:36 -04:00
MagicBot 5db5a26037 Warehouse loading work. 2024-03-17 11:29:30 -04:00
MagicBot 9b22287ede Warehouse loading work. 2024-03-17 11:10:47 -04:00
MagicBot 98c5b0e9ec Warehouse loading work. 2024-03-17 11:06:56 -04:00
MagicBot 0b74537bee Warehouse loading work. 2024-03-17 11:00:48 -04:00
MagicBot 5f930b0482 Warehouse loading work. 2024-03-17 10:52:33 -04:00
MagicBot aa0afa533d Duplicate key logic makes sense here. 2024-03-17 10:42:36 -04:00
MagicBot e06657e53f Loading of warehouse data 2024-03-17 10:06:26 -04:00
MagicBot a960e5ab04 Loading of warehouse data 2024-03-17 10:04:03 -04:00
MagicBot 4a9a496a5d Refactor warehouse part two. 2024-03-17 09:51:50 -04:00
MagicBot f3bfdd8a36 Refactor warehouse part two. 2024-03-17 09:47:00 -04:00
MagicBot b76a384e1f Refactor warehouse part two. 2024-03-17 09:01:35 -04:00
MagicBot 3c70a09e12 Itembase refactor work 2024-03-16 18:33:28 -04:00
MagicBot ee9b64285e Itembase refactor work 2024-03-16 18:31:21 -04:00
MagicBot 7848233396 equip slot usage update 2024-03-16 18:20:24 -04:00
MagicBot 2e05ba243f Itembase removed from interface 2024-03-16 18:06:12 -04:00
MagicBot b789c773b4 Refactor out itembase 2024-03-16 17:48:43 -04:00
MagicBot 023fd547fd Template passed to method 2024-03-16 17:46:49 -04:00
MagicBot 288c941d69 Merge remote-tracking branch 'origin/feature-json6' into featue-json7 2024-03-16 17:43:53 -04:00
MagicBot 6b2569873c bugfix: templateid wasn't being set 2024-03-16 17:24:17 -04:00
FatBoy 836c076884 removed ItemBase form Combat manager 2024-03-16 14:22:04 -05:00
MagicBot e4b0823911 Refactor of item.name; simplification. 2024-03-16 09:01:56 -04:00
MagicBot 3fdafe176b Refactor of item.name; simplification. 2024-03-16 08:56:22 -04:00
MagicBot c54b0470fa More itembase refactor 2024-03-16 08:33:21 -04:00
MagicBot ac2403362e Name simplification for collection 2024-03-16 07:57:17 -04:00
MagicBot 13bf6e6f5a SQL bugfix 2024-03-16 07:44:16 -04:00
MagicBot 131592090f Deed related values parsed 2024-03-16 07:41:16 -04:00
MagicBot 412fec17a6 Deed related fields parsed in template 2024-03-16 07:27:20 -04:00
MagicBot 995949c1ba Deed fields defined in template 2024-03-16 07:15:11 -04:00
MagicBot fce3fa8004 More itembase refactor work 2024-03-16 06:50:55 -04:00
MagicBot bb0803bf19 More itembase refactor work 2024-03-16 06:48:39 -04:00
MagicBot c091026114 More itembase refactor work 2024-03-16 06:47:05 -04:00
MagicBot c90461afe0 More itembase refactor work 2024-03-16 06:45:31 -04:00
MagicBot d9032f750f More itembase refactor work 2024-03-16 06:44:02 -04:00
MagicBot 55058b4ce1 String update 2024-03-16 06:41:48 -04:00
MagicBot 5ff19e58a5 DevCmd removed 2024-03-16 06:40:21 -04:00
MagicBot e831f447ae More itembace refactor work 2024-03-16 06:38:42 -04:00
MagicBot dd8699ad32 Bonus code removal 2024-03-15 13:41:44 -04:00
MagicBot 109ddde0a8 More itembase refactor work 2024-03-15 13:31:24 -04:00
MagicBot f78baf229d More itembase refactor work 2024-03-15 13:13:22 -04:00
MagicBot 22f498a6f8 More itembase refactor work 2024-03-15 13:06:21 -04:00
MagicBot ebaf68bca4 More itembase refactor work 2024-03-15 13:05:12 -04:00
MagicBot 8b98a3f2a1 More itembase refactor work 2024-03-15 11:50:36 -04:00
MagicBot d9549c227a More itembase refactor work 2024-03-15 11:47:44 -04:00
MagicBot c5c4c62208 Handler created for BuyFromNPCMsg 2024-03-15 11:37:07 -04:00
MagicBot 2ceaece7d9 More itembase refactor work 2024-03-15 11:30:03 -04:00
MagicBot b9b04c2b9f More itembase refactor work 2024-03-15 11:25:19 -04:00
MagicBot 789e177d67 More itembase refactor work 2024-03-15 11:20:32 -04:00
MagicBot 3168f12af1 More itembase refactor work 2024-03-15 10:59:23 -04:00
MagicBot e93f84d1c7 Method moved out of itembase db handler 2024-03-15 10:58:01 -04:00
MagicBot e323c80fba More refactor out itembase 2024-03-15 10:55:49 -04:00
MagicBot 57122e5b74 More refactor out itembase 2024-03-15 10:53:58 -04:00
MagicBot a1dbb42b4d More refactor itembase out of warehouse 2024-03-15 10:50:07 -04:00
MagicBot a489aecb86 More refactor itembase out of warehouse 2024-03-15 10:47:35 -04:00
MagicBot 6ed4faded2 Refactor out itembase 2024-03-15 10:35:41 -04:00
MagicBot f676b14351 Weight bugfix 2024-03-15 10:18:07 -04:00
MagicBot 97fa583f65 Initial warehouse refactor 2024-03-15 10:01:22 -04:00
MagicBot 92f53b00b8 Unused variables removed 2024-03-15 08:32:29 -04:00
MagicBot f2d28fd7af Refactored out duplicate db interface. 2024-03-14 15:22:38 -04:00
MagicBot 4646d03bdd Refactored out duplicate resource type. 2024-03-14 14:47:20 -04:00
MagicBot b6eb587a82 mine production added to type 2024-03-14 14:34:27 -04:00
MagicBot 9dd2a79be8 deposit limits use type lookup 2024-03-14 14:09:14 -04:00
MagicBot 2e37bd2472 deposit limits use type lookup 2024-03-14 13:58:51 -04:00
MagicBot f9797a38b8 deposit limits added to type 2024-03-14 13:48:36 -04:00
MagicBot 20a42ab3e5 isConsumable not used as driven by switch. 2024-03-14 07:37:34 -04:00
MagicBot a7062eff3a isConsumable not used as driven by switch. 2024-03-14 07:36:36 -04:00
MagicBot 6806ae3dc0 isConsumable not used as driven by switch. 2024-03-14 07:35:13 -04:00
MagicBot b665d46dc3 Methods moved to better class. 2024-03-13 14:11:53 -04:00
MagicBot 0b68ae3960 Resource.hash refactored 2024-03-11 17:10:34 -04:00
MagicBot ef38e93c11 Refactor of animations 2024-03-11 15:44:31 -04:00
MagicBot 4f7c34aec9 Refactor out item useID 2024-03-11 12:24:28 -04:00
MagicBot 7595f7dfb5 Refactor out item useID 2024-03-11 12:17:36 -04:00
MagicBot 96b4e1c639 Refactor out item useID 2024-03-11 12:07:46 -04:00
MagicBot efab8eefba Refactor baked in stats 2024-03-11 11:33:53 -04:00
MagicBot b0f8c758e5 Refactor baked in stats 2024-03-11 11:29:41 -04:00
MagicBot 6ee194924c Refactor baked in stats 2024-03-11 11:24:19 -04:00
MagicBot 784767dc4e Logic cleanup 2024-03-11 01:01:51 -04:00
MagicBot 15d2f2b9d8 Refactor boon handling 2024-03-11 00:53:14 -04:00
MagicBot 56b89b7080 Refactor isTwoHanded() 2024-03-10 16:21:23 -04:00
MagicBot 32d9322189 Table renamed to static_item_templates 2024-03-10 16:14:18 -04:00
MagicBot ca8c4338b2 Junk removal 2024-03-10 16:07:12 -04:00
MagicBot 6a4a550f63 Junk removal 2024-03-10 16:01:29 -04:00
FatBoy 24d5fb2259 checkf o valid slot type when equipping item 2024-03-10 14:33:59 -05:00
FatBoy f3d4a2becc Merge remote-tracking branch 'origin/feature-json6' into feature-json6 2024-03-10 14:33:31 -05:00
FatBoy e1018a48f0 checkf o valid slot type when equipping item 2024-03-10 14:32:50 -05:00
MagicBot 50d75eecc6 Pass weaponslot not slot. 2024-03-10 15:21:35 -04:00
MagicBot 406c864b17 Exclude Cloth for now 2024-03-10 14:53:14 -04:00
MagicBot f616937236 Refactor skill_used 2024-03-10 14:10:51 -04:00
MagicBot e47bd6fba0 Templates needed now on login server. 2024-03-10 13:45:34 -04:00
MagicBot 7f830a18cd Error logging addded 2024-03-10 13:42:25 -04:00
MagicBot 7bf5279ad3 Needs mbeditor-pro update 2024-03-10 13:38:50 -04:00
MagicBot df5c607375 Refactor item_type 2024-03-10 13:34:24 -04:00
MagicBot 87290baa52 More junk removal 2024-03-10 12:33:33 -04:00
MagicBot 8bf47fb4fe More junk removal 2024-03-10 07:32:30 -04:00
MagicBot b20de1657c More junk removal 2024-03-10 07:27:20 -04:00
MagicBot a5af5d9ec8 More junk removal 2024-03-10 07:26:28 -04:00
MagicBot b3bffed179 restrictflag and junk removal 2024-03-10 07:25:05 -04:00
MagicBot f349e0dda8 IsArmor junk removal 2024-03-10 07:21:34 -04:00
MagicBot 76d723669a AudiID junk removal 2024-03-10 07:19:11 -04:00
MagicBot 5537934f88 Moved method in class. 2024-03-09 12:28:49 -05:00
MagicBot e2aa7b54a4 One like shield check. 2024-03-09 11:46:58 -05:00
MagicBot 6f028ab8c8 Refactored isShield and removed equipflag. 2024-03-09 11:26:19 -05:00
MagicBot 658b442b36 Logic cleanup 2024-03-09 09:55:00 -05:00
MagicBot f6fbc6fecb Logic cleanup 2024-03-09 09:30:58 -05:00
MagicBot c6f451bce1 Remove from equip before changing slot. 2024-03-09 09:09:17 -05:00
MagicBot 3500bf0ede Handler created for equip to inventory message. 2024-03-09 08:04:17 -05:00
MagicBot 04d9b76938 More ordinal refactor 2024-03-09 07:41:59 -05:00
MagicBot 68088a3399 more equip refactored. 2024-03-09 07:05:48 -05:00
MagicBot 20cb8ef94d Handler created for equip message. 2024-03-08 13:39:38 -05:00
MagicBot caf708bed6 Handler created for equip message. 2024-03-08 13:31:18 -05:00
MagicBot 75691aaab9 Handler created for equip message. 2024-03-08 13:29:52 -05:00
MagicBot 83e8a8a218 Bugfix in parm type 2024-03-08 13:07:06 -05:00
MagicBot a9dc7b1c5b Equipment slot refactor started. 2024-03-08 12:46:20 -05:00
MagicBot d8d017669a Equipment slot refactor started. 2024-03-08 12:19:57 -05:00
MagicBot 7d1d8891ff Uppercasew for resist enum 2024-03-08 10:21:31 -05:00
MagicBot ffdf374cd6 Item requirements and restrictions refactored. 2024-03-08 10:08:25 -05:00
MagicBot 54b7fc2212 Parse offering info. 2024-03-07 20:40:32 -05:00
MagicBot 5476d238fa Parse offering info. 2024-03-07 20:39:31 -05:00
MagicBot 8e85136dc5 Parse offering info. 2024-03-07 20:32:35 -05:00
MagicBot 82daff3b6e Unused variable. 2024-03-07 20:18:16 -05:00
MagicBot 642270aacf Helper method created 2024-03-07 09:30:13 -05:00
MagicBot 3048f86f5b item physical resists refactored 2024-03-06 14:53:17 -05:00
MagicBot 84e74c5052 Refactored out character skill enum. 2024-03-06 14:36:25 -05:00
MagicBot 4dc0f52295 item_wt refactored to template 2024-03-03 15:06:44 -05:00
MagicBot 58652ee32f Template id assigned in constructor. 2024-03-03 14:03:20 -05:00
MagicBot 1a4d888304 Templates need to exist on Login server. 2024-03-03 13:36:12 -05:00
MagicBot f11fcc535a item_value refactored to template 2024-03-03 13:18:16 -05:00
MagicBot 70f331d025 item_value refactored to template 2024-03-03 13:06:05 -05:00
MagicBot 8a1cd316fe Durability and initial charges migrated to template. 2024-03-03 08:48:38 -05:00
MagicBot d7dfab5e74 Durability and initial charges migrated to template. 2024-03-03 08:38:24 -05:00
MagicBot 436d0cec9b Bonus code removed. 2024-03-03 08:12:49 -05:00
MagicBot 266e4214d4 Itembase refactored out. 2024-03-03 08:05:36 -05:00
MagicBot 08aa431f5d More item refactor work. 2024-03-02 11:11:24 -05:00
MagicBot b98e7cda15 More item refactor work. 2024-03-02 11:07:07 -05:00
MagicBot d05dbef71d More item refactor work. 2024-03-02 10:52:20 -05:00
MagicBot 5736f0a7a3 More item refactor work. 2024-03-02 10:34:45 -05:00
MagicBot ec90ef6174 items PERSIST work. 2024-03-02 09:55:30 -05:00
MagicBot fa440e2885 Begin constructor refactor 2024-03-01 21:32:51 -05:00
MagicBot 9ea44d7e1c Begin constructor refactor 2024-03-01 16:38:20 -05:00
MagicBot 22326802b3 Begin constructor refactor 2024-03-01 16:28:28 -05:00
MagicBot 531662e012 Unused item constructor removed. 2024-03-01 15:59:42 -05:00
MagicBot 8eaaabb4d4 Formatting cleanup 2024-03-01 08:31:49 -05:00
MagicBot 37af60781d Template id back-filled when created. 2024-03-01 08:23:28 -05:00
MagicBot 29c68110cf Refactor out itembase 2024-03-01 08:20:34 -05:00
MagicBot 1306ea3c5c Logging null templates 2024-02-28 17:41:48 -05:00
MagicBot 527acb8e52 Removed temp logging 2024-02-28 17:33:28 -05:00
MagicBot 744b508fea Logging missing base names 2024-02-28 17:31:59 -05:00
MagicBot ea97eb56a6 Logging missing base names 2024-02-28 17:30:41 -05:00
MagicBot 8d91f200e7 Refactor itembase.name to template. 2024-02-28 16:42:07 -05:00
MagicBot d9775dbf4e Refactor itembase.name to template. 2024-02-28 16:31:09 -05:00
MagicBot 507769c6b6 item_takeable parsed. 2024-02-28 14:59:17 -05:00
MagicBot aae9e38f36 Redundant comment 2024-02-27 16:44:21 -05:00
MagicBot 2cd3d028a9 Parsing resource costs 2024-02-27 16:38:10 -05:00
MagicBot c5bb051e64 Parsing resource costs 2024-02-27 16:35:36 -05:00
MagicBot 6a33651782 More parsing work. 2024-02-27 15:47:04 -05:00
MagicBot 1d2e4bbda7 More parsing work. 2024-02-27 15:44:08 -05:00
MagicBot f1a8f6024d Bugfix array index 2024-02-27 15:42:12 -05:00
MagicBot 0829a60f35 More parsing work 2024-02-27 15:40:55 -05:00
MagicBot f39434a248 More parsing work 2024-02-27 15:36:18 -05:00
MagicBot 808a60c86c More parsing work 2024-02-27 15:35:03 -05:00
MagicBot 22da19085d More parsing work 2024-02-27 15:16:38 -05:00
MagicBot 5304919e2a More parsing work 2024-02-27 15:16:18 -05:00
MagicBot 093fe0f261 More parsing work 2024-02-27 14:53:06 -05:00
MagicBot ab32ad1538 More parsing work 2024-02-27 14:52:07 -05:00
MagicBot 0a39102b08 More parsing work 2024-02-27 14:50:38 -05:00
MagicBot 91247c58a6 More parsing work 2024-02-27 14:48:55 -05:00
MagicBot bcf4aef5a0 More parsing work 2024-02-27 14:42:35 -05:00
MagicBot ffd248cfd4 Parse animation data 2024-02-27 14:36:27 -05:00
MagicBot 2d3b74e688 More parsing work. 2024-02-27 14:14:16 -05:00
MagicBot db94673256 More parsing work. 2024-02-27 14:05:57 -05:00
MagicBot 4d118cf634 More parsing work. 2024-02-27 13:55:26 -05:00
MagicBot e464f30445 Parsing grants 2024-02-27 13:48:21 -05:00
MagicBot 67e4011c65 Parsing grants 2024-02-27 13:47:50 -05:00
MagicBot 839be1f28f Always check for empty arrays. For loop processes them. 2024-02-27 13:31:11 -05:00
MagicBot 8ae4a67635 Refactor to array. 2024-02-27 13:19:24 -05:00
MagicBot e228ff8715 Parsing power actions. 2024-02-27 13:06:14 -05:00
MagicBot c4a4a8659a More parsing work. 2024-02-27 12:51:14 -05:00
MagicBot b26134ec72 Support for multiple damage type entries. 2024-02-27 12:21:18 -05:00
MagicBot 8656d6bfb9 New branch more progress 2024-02-26 21:09:57 -05:00
MagicBot 2ffd354f38 Logging null building 2024-02-26 15:52:49 -05:00
MagicBot 441b2fe42a Logging null building 2024-02-26 15:49:45 -05:00
MagicBot 2885457ea6 toUppercase() 2024-02-26 15:30:16 -05:00
MagicBot 1763266972 toUppercase() 2024-02-26 15:18:03 -05:00
MagicBot 2e5fa69942 Uppercase enum. 2024-02-26 15:12:23 -05:00
MagicBot e1e9bc026a Case fix in json 2024-02-26 04:37:07 -05:00
MagicBot 74d5ab7fea Removed string override 2024-02-26 04:24:35 -05:00
MagicBot e8e84e00af Merge Damage and Source types. 2024-02-26 03:44:51 -05:00
MagicBot a7b3fba018 Def rating is an int 2024-02-26 03:10:11 -05:00
MagicBot 5cdf1d5599 Weapon field parsing 2024-02-24 15:45:22 -05:00
MagicBot e6dd2b22d8 Weapon field parsing 2024-02-24 15:41:48 -05:00
MagicBot df6c3addcf Weapon field parsing 2024-02-24 15:37:59 -05:00
MagicBot e9d5c3db0e Weapon field parsing 2024-02-24 15:34:16 -05:00
MagicBot 36f12f9c97 Weapon field parsing 2024-02-24 15:32:45 -05:00
MagicBot 55213c409b Weapon field parsing 2024-02-24 15:31:18 -05:00
MagicBot d9474afa34 Weapon field parsing 2024-02-24 15:30:12 -05:00
MagicBot 9c8b690739 Weapon field parsing 2024-02-24 15:28:21 -05:00
MagicBot d20a2129aa Weapon field parsing 2024-02-24 15:25:06 -05:00
MagicBot 704375099b Wrapped in armor test 2024-02-24 14:52:52 -05:00
MagicBot bf9ac7accb Test code removed 2024-02-24 14:40:51 -05:00
MagicBot b2cf15139a Testing 2024-02-24 14:39:48 -05:00
MagicBot 4352e95f82 remove - for half-giant 2024-02-24 14:33:59 -05:00
MagicBot fb7a98761f Parsing discs 2024-02-24 14:31:08 -05:00
MagicBot 5d0f79892c Parsing discs 2024-02-24 14:29:39 -05:00
MagicBot d3f9b53810 Parsing discs 2024-02-24 14:28:28 -05:00
MagicBot 7632dc783a Parsing classes 2024-02-24 14:24:51 -05:00
MagicBot 61f28a588b Parsing classes 2024-02-24 14:24:02 -05:00
MagicBot e448c9a0d3 Parsing races 2024-02-24 14:16:01 -05:00
MagicBot 155bbfbf4e Parsing races 2024-02-24 14:12:16 -05:00
MagicBot cf0b9a0ae0 Bugfix in variable name. "None" support. 2024-02-24 13:54:16 -05:00
MagicBot 2b65e23b48 Enumeration updated. 2024-02-24 09:11:17 -05:00
MagicBot d363a9fc1b Try Catch 2024-02-24 09:07:05 -05:00
MagicBot a99b0072e0 Parsing cleanup 2024-02-24 09:04:27 -05:00
MagicBot f940d05d12 Parsing cleanup 2024-02-24 08:48:03 -05:00
MagicBot 8d80e0a46e Parsing cleanup 2024-02-24 08:45:44 -05:00
MagicBot 37fec69462 Parsing cleanup 2024-02-24 08:42:19 -05:00
MagicBot 09a196149e Parsing skill required. 2024-02-24 08:32:05 -05:00
MagicBot bb8e8780bd More parser work. 2024-02-24 08:01:22 -05:00
MagicBot bade2162a6 More parser work. 2024-02-24 07:49:13 -05:00
MagicBot 4e2578f3e0 Reworked CharacterSkill enum. 2024-02-23 11:58:56 -05:00
MagicBot 62e13ade01 String cleanup for skill enums. 2024-02-19 03:58:43 -05:00
MagicBot acea3875a1 String cleanup for skill enums. 2024-02-19 03:54:47 -05:00
MagicBot 354f10ddee Debug code removed 2024-02-19 03:50:50 -05:00
MagicBot 5e6d298ca0 Skills and mastery work. 2024-02-19 03:50:26 -05:00
MagicBot 9019b0ad29 Type selection work. 2024-02-19 03:16:36 -05:00
MagicBot b2112f2b01 Type selection work. 2024-02-19 03:06:38 -05:00
MagicBot 9e652761b8 Type selection work. 2024-02-19 03:04:12 -05:00
MagicBot fe54085cc6 Handler easier to debug. 2024-02-19 02:51:26 -05:00
MagicBot ef05e5c524 Skill and mastery work. 2024-02-19 02:41:25 -05:00
MagicBot d11c6988cc Skill and mastery work. 2024-02-19 02:40:59 -05:00
MagicBot 39de8439ba File reformat 2024-02-19 02:27:19 -05:00
MagicBot 15635534b0 Type enum with back support 2024-02-19 02:25:25 -05:00
MagicBot 5b547611a5 Starting work on type. 2024-02-19 01:58:27 -05:00
MagicBot 11e6b793d5 More constructor work. 2024-02-18 15:15:19 -05:00
MagicBot b9507381ed More constructor work. 2024-02-18 15:05:54 -05:00
MagicBot 3bd50a1ad1 More constructor work. 2024-02-18 14:58:50 -05:00
MagicBot e6452955b6 More constructor work. 2024-02-18 14:54:34 -05:00
MagicBot 14397d1550 More constructor work. 2024-02-18 14:41:34 -05:00
MagicBot 8267cbd8f0 More constructor work. 2024-02-18 14:30:20 -05:00
MagicBot 1ff2dc6733 More constructor work. 2024-02-18 14:29:56 -05:00
MagicBot 04d88d0523 More constructor work. 2024-02-18 14:25:28 -05:00
MagicBot 5e8b4e0e61 Parsing enumsets for eq slots 2024-02-18 14:17:11 -05:00
MagicBot 151230c611 Enum in client has a NONE type 2024-02-18 14:12:39 -05:00
MagicBot 52750e6d6b Fleshing out constructor 2024-02-18 14:08:45 -05:00
MagicBot 8ff112b802 Fleshing out constructor 2024-02-18 14:03:41 -05:00
MagicBot 88516d2857 Fleshing out constructor 2024-02-18 13:40:16 -05:00
MagicBot 9bf7c088cf Fleshing out constructor 2024-02-18 13:29:01 -05:00
MagicBot b0542a5bc3 Fleshing out constructor 2024-02-18 12:35:55 -05:00
MagicBot ac06e7723f Fleshing out constructor 2024-02-18 12:30:23 -05:00
MagicBot 12608d8d32 Fleshing out constructor 2024-02-18 12:28:14 -05:00
MagicBot 8018f1323d Fleshing out constructor 2024-02-18 12:26:39 -05:00
MagicBot 90874b01a7 Fleshing out constructor 2024-02-18 12:26:11 -05:00
MagicBot 6685fc9b02 Fleshing out constructor 2024-02-18 12:15:13 -05:00
MagicBot ad52546e0c Fleshing out constructor 2024-02-18 12:04:41 -05:00
MagicBot 2518b1421c Fleshing out constructor 2024-02-18 11:59:23 -05:00
MagicBot 551418c293 Fleshing out constructor 2024-02-18 11:58:39 -05:00
MagicBot 524ebbbdd7 Fleshing out constructor 2024-02-18 11:55:45 -05:00
MagicBot 40d0e765fe Fleshing out constructor 2024-02-18 11:49:24 -05:00
MagicBot 53b2f476e2 Fleshing out constructor 2024-02-18 11:41:24 -05:00
MagicBot d6a952f182 Fleshing out constructor 2024-02-18 11:39:11 -05:00
MagicBot 4eff5ad84e Data loaded at bootstrap. 2024-02-18 11:12:54 -05:00
MagicBot 0d93850813 dbHandler created 2024-02-18 11:08:46 -05:00
MagicBot 129eb1b818 Local cache defined. 2024-02-18 11:00:56 -05:00
MagicBot 0d8b8504b4 itemTemplate created 2024-02-18 10:54:49 -05:00
MagicBot a8cd6f4f74 Merge remote-tracking branch 'origin/feature-lore-ruleset' into magicbox-1.5.2 2024-02-18 08:27:30 -05:00
MagicBot d1f8e0a97e Merge remote-tracking branch 'origin/feature-server-restrictions' into feature-lore-ruleset 2024-02-18 08:26:27 -05:00
MagicBot c0a7ddc711 Using a string instead of a set. 2024-02-18 08:20:34 -05:00
FatBoy c80b9013d2 Lore Rules 2024-02-15 19:46:41 -06:00
FatBoy c1de1f148b dev command for item requirement info 2024-02-15 18:47:43 -06:00
MagicBot f36e2f19b8 MB_RULESET config entry added 2024-02-15 11:31:22 -05:00
MagicBot d46b2dc298 File reformat. 2024-02-14 12:29:42 -05:00
FatBoy 6c1e2f1280 implement server side restrictions 2024-02-13 21:01:09 -06:00
FatBoy f952785c8e implement server side restrictions 2024-02-13 20:46:28 -06:00
FatBoy 8a769c60f2 implement server side restrictions 2024-02-13 20:35:25 -06:00
MagicBot 7fcbfba7e0 Case fix in elements 2024-02-11 08:35:03 -05:00
MagicBot 9be32a3ebf Case fix in elements 2024-02-11 08:34:05 -05:00
MagicBot cc8f817006 Generics lose type information 2024-02-11 08:31:38 -05:00
MagicBot 8f88da6016 Error handling for parsing of enum 2024-02-11 08:27:48 -05:00
MagicBot 4f441340ea Error handling for parsing of enum 2024-02-11 08:25:11 -05:00
MagicBot 6259cd7803 Error handling for parsing of enum 2024-02-11 08:23:01 -05:00
MagicBot 608324c500 Updated rs constructor to use new enumset system. 2024-02-11 08:15:31 -05:00
MagicBot 42362dca90 Method cleanup 2024-02-11 08:12:18 -05:00
MagicBot 20bebafc89 Tweak to string cleanup. 2024-02-11 08:09:31 -05:00
MagicBot bd2547046a Early exit on empty sets. 2024-02-11 08:07:22 -05:00
MagicBot 3666331de8 Column name fix 2024-02-11 08:04:03 -05:00
MagicBot dc6bce6f53 Testing of new helper at bootstrap. 2024-02-11 08:01:42 -05:00
MagicBot 5e1ebeb4df Enumset helper created 2024-02-11 07:55:38 -05:00
MagicBot e1e722f09f Remove old loader in preb for refactor 2024-02-11 07:29:42 -05:00
FatBoy 4988f92d03 r8 mesh lookup changed location 2024-02-10 22:14:52 -06:00
FatBoy e95005199c update r8 mesh 2024-02-10 21:45:57 -06:00
MagicBot e05d0d8daa promote type upgraded to class type. 2024-02-10 13:13:11 -05:00
MagicBot 141a65d48e Discripline type enum created 2024-02-10 10:39:25 -05:00
MagicBot d2cbfd491a Devcmd output cleanup 2024-02-09 14:10:28 -05:00
MagicBot 5f71ff2db5 Removed unused handlers. 2024-02-09 13:51:13 -05:00
MagicBot 2ea38519e4 charter sex requirements added 2024-02-09 13:48:15 -05:00
MagicBot 4fac0c3921 charter class requirements added 2024-02-09 13:42:30 -05:00
MagicBot 6a021f938d charter class enum completed. 2024-02-09 12:00:33 -05:00
MagicBot 544e715905 Enumset partial update. 2024-02-08 13:59:40 -05:00
MagicBot b3b6a9a913 Class requirements refactored to enumset. 2024-02-08 13:11:37 -05:00
FatBoy d487a9d1ab server side race/cass restrictions 2024-02-07 19:51:58 -06:00
FatBoy 28bf0413cc server side race/cass restrictions 2024-02-07 19:44:33 -06:00
FatBoy 0e44293231 server side race/cass restrictions 2024-02-07 19:43:04 -06:00
FatBoy 45a0747176 server side race/cass restrictions 2024-02-07 19:35:56 -06:00
FatBoy 7e29ecde9b server side race/cass restrictions 2024-02-07 19:33:37 -06:00
FatBoy 8000d523f1 server side race/cass restrictions 2024-02-07 19:28:18 -06:00
FatBoy ca09587d87 server side race/cass restrictions 2024-02-07 19:25:48 -06:00
FatBoy 726d68df31 server side race/cass restrictions 2024-02-07 19:20:29 -06:00
MagicBot 250e3407fa Merge remote-tracking branch 'origin/bugfix-safeguard-aggro' into magicbox-1.5.2 2024-01-29 12:31:26 -05:00
MagicBot fcd37cbae2 Dev cmd cleanup 2024-01-28 11:30:54 -05:00
MagicBot 70e76d9a1a Handling of mobs not in buildings. 2024-01-28 11:26:54 -05:00
MagicBot 6a3bd89095 Handling of mobs not in buildings. 2024-01-28 11:24:20 -05:00
MagicBot 4ccf03dfd3 Zone offset not world loc. 2024-01-28 10:31:02 -05:00
MagicBot f845c0ad80 Better handling of null guilds. 2024-01-28 10:15:55 -05:00
MagicBot 165752f6d6 Null fix in dev command. 2024-01-28 10:01:01 -05:00
FatBoy c0ee8b82f8 Warehosue cleanup 2024-01-24 20:21:41 -06:00
FatBoy cc1e0d8986 Warehosue cleanup 2024-01-24 20:03:27 -06:00
FatBoy 7f6fbd2bff load mesh data and structure meshes 2024-01-24 19:03:33 -06:00
MagicBot 92d8ed9e3f Empty map supplied by the lookup method. 2024-01-15 07:38:43 -05:00
MagicBot 45b2443982 Log failed equipSet lookups. 2024-01-15 07:37:35 -05:00
MagicBot 3775fb336b Null check was done previously. 2024-01-15 06:44:33 -05:00
MagicBot f7a8ca33fc Zone size derived from template. 2024-01-09 12:55:08 -05:00
MagicBot c45265b085 Error trap added 2024-01-04 13:59:13 -05:00
MagicBot 79400b6b0e Error trap when deranking during maintenance. 2024-01-04 13:51:57 -05:00
MagicBot 2bff826a10 Error trap when deranking during maintenance. 2024-01-04 13:51:15 -05:00
MagicBot d5fc87c233 Update to player city size handling. 2024-01-04 12:43:30 -05:00
MagicBot 78a0416b19 Updated city planting to conform to class refactor project. 2023-12-24 09:44:01 -05:00
MagicBot eb5bc14974 Revert needs new branch. 2023-11-12 11:21:30 -05:00
MagicBot 7e99e8c7a4 Height and width flipped. 2023-11-12 11:13:27 -05:00
MagicBot 9b0f4d5aef Height and width flipped. 2023-11-12 11:09:29 -05:00
MagicBot b58049968f IDA says 256. 2023-11-12 07:36:56 -05:00
MagicBot 9bf0d3f7d1 Devcmd updated. 2023-11-11 07:10:46 -05:00
MagicBot 8300c47e4a Dev cmd updated 2023-11-08 11:59:52 -05:00
MagicBot c73fcc19f2 Dev cmd updated 2023-11-08 11:34:33 -05:00
MagicBot f93573177a Dev cmd updated 2023-11-08 11:27:44 -05:00
MagicBot fe9c6437d8 Dev cmd updated 2023-11-08 11:27:36 -05:00
MagicBot c110ffc4b1 Dev cmd updated 2023-11-02 09:08:28 -04:00
MagicBot 7af63d1519 Nominal after test. 2023-10-25 13:51:54 -04:00
MagicBot 31ba1f2c4c Height from zone center. 2023-10-25 13:46:08 -04:00
MagicBot 33afd13a8c Height from zone center. 2023-10-25 13:36:26 -04:00
MagicBot b341ffacbf Devcmd updated 2023-10-25 13:12:02 -04:00
MagicBot 0d1d1f0f37 Added raw blend value to class 2023-10-25 13:01:21 -04:00
MagicBot 3f59ed48d2 Extra parens removed 2023-10-23 14:13:06 -04:00
MagicBot de832ff497 Long cast needed 2023-10-23 14:12:59 -04:00
MagicBot 1aef82f422 Cleanup work. 2023-10-23 00:43:23 -04:00
MagicBot 065a1c9ceb Cleanup work. 2023-10-23 00:39:12 -04:00
MagicBot ff219ce696 Respawn thread configured 2023-10-23 00:32:59 -04:00
MagicBot 8bd406bcf4 Mobile implements Delayed interface 2023-10-23 00:07:48 -04:00
MagicBot 7b70b680f0 Modified sequencing 2023-10-22 12:29:52 -04:00
MagicBot c3586a70fd Modified sequencing 2023-10-22 12:15:48 -04:00
MagicBot cc7d741681 Modified sequencing 2023-10-22 12:05:06 -04:00
MagicBot ce0dfdabfb Zones with zero blend inherit from parent 2023-10-22 11:48:15 -04:00
MagicBot 737327fa8a Revert after test 2023-10-20 17:52:23 -04:00
MagicBot b1e79284e4 Thread count test 2023-10-20 17:49:29 -04:00
MagicBot 29b5955e9e Peace zone needs to come from zone tree 2023-10-20 17:33:53 -04:00
MagicBot 3986dc0686 Peace zone needs to come from zone tree 2023-10-20 17:22:57 -04:00
MagicBot 59190e33c9 Template added for player cities (0) 2023-10-20 17:09:27 -04:00
MagicBot 091b1a1d5b Start refactor to use templates 2023-10-20 17:01:42 -04:00
MagicBot cb0ba901de fix in column name 2023-10-20 16:37:42 -04:00
MagicBot 14ba9d0f7f SQL statement set. 2023-10-20 16:36:08 -04:00
MagicBot ec9bc437f3 Templates loaded at bootstrap 2023-10-20 16:33:33 -04:00
MagicBot 930aa73657 rs constructor completed 2023-10-20 16:30:41 -04:00
MagicBot cf2bf2dacf DBhandler created for templates 2023-10-20 16:11:55 -04:00
MagicBot 5a8508c16c Template collection created 2023-10-20 15:50:04 -04:00
MagicBot 5bcc0ed84d Template class created 2023-10-20 15:42:06 -04:00
MagicBot 4795a315ad Template now templteID to make room for the actual template. 2023-10-20 15:20:30 -04:00
MagicBot 6559f232a3 Dev command updated 2023-10-20 10:08:39 -04:00
MagicBot db8b33a621 No longer pre-cache players 2023-10-20 09:58:47 -04:00
MagicBot 781a4ee16d Load cities after buildings 2023-10-20 09:50:48 -04:00
MagicBot 7ce94a5166 should never pull directly form cache 2023-10-20 09:48:24 -04:00
MagicBot a487a7bd2f Removed duplicate and unused code 2023-10-20 09:41:24 -04:00
MagicBot f0fedcc049 Cleanup and reformat 2023-10-20 09:39:05 -04:00
MagicBot 3a63f98ac3 Error log added 2023-10-20 08:09:42 -04:00
MagicBot 4c994e6e55 Removed old method 2023-10-20 08:06:40 -04:00
MagicBot 1c93846ed3 Full error is output 2023-10-19 17:01:26 -04:00
MagicBot 3ef444c128 Cleanup in runafterload 2023-10-19 16:53:15 -04:00
MagicBot eaaba8ab0c Refactored assignment. 2023-10-19 16:48:39 -04:00
MagicBot 1daa45d604 New collection utilized 2023-10-19 16:44:29 -04:00
MagicBot cf7e19bfde Patrol points loaded 2023-10-19 16:24:18 -04:00
MagicBot 6a76cc7a29 Patrol points loaded 2023-10-19 16:20:43 -04:00
MagicBot fff16d2211 Comment cleanup 2023-10-19 16:10:53 -04:00
MagicBot a2df7cda22 Inlined populate world method 2023-10-19 08:47:28 -04:00
MagicBot 5858fa4de4 R8 bonus application moved to City 2023-10-19 08:20:28 -04:00
MagicBot fb6ec0caf4 Changed method used to direct bounds 2023-10-19 08:15:32 -04:00
MagicBot 944bcb7e84 Changed method used to direct bounds 2023-10-19 08:15:22 -04:00
MagicBot 4274e6a148 Cleanup of friend and condemned initialization. 2023-10-19 07:59:44 -04:00
FatBoy 5e629e7890 null checks for Building.getFriends() 2023-10-18 20:50:47 -05:00
FatBoy e991a01b50 final touch up 2023-10-18 20:21:26 -05:00
FatBoy 7a1700cec3 finalized 2023-10-18 20:17:26 -05:00
FatBoy 79eb5b9cdf stairs region corrected 2023-10-18 20:03:41 -05:00
FatBoy 7886aa6041 building and region lookup completed 2023-10-18 18:45:50 -05:00
FatBoy b928bedeb6 new region lookup 2023-10-18 18:23:14 -05:00
MagicBot beb2b47162 Collection used and old method deleted. 2023-10-18 13:03:40 -04:00
MagicBot 2cc37481ca New collection created in handled and loaded from db 2023-10-18 12:54:06 -04:00
MagicBot 5ac62d60be Collection used and old handler removed. 2023-10-18 12:38:04 -04:00
MagicBot 6fb1e2e5f1 Load collection from db 2023-10-18 12:31:39 -04:00
MagicBot 385695a610 Load collection from db 2023-10-18 12:24:32 -04:00
MagicBot 838776c471 Method made static and moved to manager. 2023-10-18 11:30:22 -04:00
MagicBot 44743b772b Every building does not need a rebuild mine method. 2023-10-18 11:21:29 -04:00
MagicBot 88f67efd51 Want to fail fast here 2023-10-18 11:04:57 -04:00
MagicBot a04bdc147f Parent zone set 2023-10-18 11:03:08 -04:00
MagicBot 145d9bafa0 Removed unused methods 2023-10-18 10:59:50 -04:00
MagicBot d2c00cce70 Removed unused methods 2023-10-18 10:38:55 -04:00
MagicBot 602f8bc843 Cleanup building initialization 2023-10-18 10:33:58 -04:00
MagicBot 89cb808481 Removed old handlers 2023-10-18 10:23:35 -04:00
MagicBot 4d290c9064 Refactored city planting to use new system. 2023-10-18 09:38:19 -04:00
MagicBot 9ee60c9361 Refactored Zone to new system 2023-10-18 09:24:56 -04:00
MagicBot 77cc91319a Refactored Zone to new system 2023-10-18 09:22:54 -04:00
MagicBot ee4009bf8d Refactored Zone to new system 2023-10-18 09:13:11 -04:00
MagicBot ff1c0bd347 Refactored Zone to new system 2023-10-18 09:08:41 -04:00
MagicBot e1add3c7e6 Refactored Zone to new system 2023-10-18 08:51:46 -04:00
MagicBot bf06734a9b Refactored Zone to new system 2023-10-18 08:42:40 -04:00
MagicBot 5ed21f9b76 Refactored Zone to new system 2023-10-18 08:33:49 -04:00
MagicBot e689cb541a Refactored Zone to new system 2023-10-18 08:25:05 -04:00
MagicBot da32765902 Change to AWO 2023-10-18 08:03:47 -04:00
MagicBot 9392ceda61 Comment cleanup 2023-10-17 17:07:52 -04:00
MagicBot 694b10d3b2 Begin refactor of cities 2023-10-17 16:32:36 -04:00
MagicBot 6b3c64faea Minions loaded for guard captain 2023-10-17 15:09:42 -04:00
MagicBot ab17dd08cd Refactor towards new bootstrap system. 2023-10-17 14:52:13 -04:00
MagicBot f889bcf927 Building handler added 2023-10-17 14:43:28 -04:00
MagicBot 34024c9fb4 New handlers created 2023-10-17 08:45:33 -04:00
MagicBot 9d5e16aa5c Removed debug command 2023-10-17 08:28:18 -04:00
MagicBot f1a2bea67c Pixel values are shorts for memory 2023-10-17 07:56:31 -04:00
FatBoy 5d4192bbcf add offset for runegate teleport regions 2023-10-16 19:56:08 -05:00
FatBoy ea6ea4b0ee teleport work 2023-10-16 19:07:34 -05:00
FatBoy 7f4d47505e teleport cleanup 2023-10-16 18:46:44 -05:00
FatBoy f9a3b17677 teleport cleanup 2023-10-16 15:10:09 -05:00
FatBoy d0374a2dea random delay between mob chase 2023-10-16 15:07:39 -05:00
FatBoy cb89cc17be update lastChase timestamp for mobs 2023-10-16 14:37:17 -05:00
FatBoy d506807a8f 1 second delay for mobs chasing target 2023-10-16 14:33:09 -05:00
FatBoy 1a0fc309f9 remove mob movement delay 2023-10-16 14:23:18 -05:00
FatBoy 5ed7662798 1 second delay for mob movements 2023-10-16 14:13:33 -05:00
FatBoy e3d6a32554 1 second delay for mob movements 2023-10-16 14:02:48 -05:00
FatBoy 6f990d488f region assignment in AbstractCharacter.setLoc 2023-10-16 13:41:18 -05:00
MagicBot 610de198e9 All 0 heightmap for PLANAR 2023-10-15 17:39:02 -04:00
MagicBot 928be0facb Named for context 2023-10-15 17:28:20 -04:00
MagicBot 80799753be Comment cleanup 2023-10-15 17:23:16 -04:00
MagicBot f9d2232a9b Comment cleanup 2023-10-15 17:22:05 -04:00
MagicBot cbd8685d4b Guild zone performance tweak 2023-10-15 16:46:48 -04:00
MagicBot 274cf08dad Comment cleanup 2023-10-15 16:43:20 -04:00
MagicBot 2cbe5f38cd Configuration moved to constructor 2023-10-15 16:40:31 -04:00
MagicBot 3d4058ad01 Height for seafloor 2023-10-15 15:57:58 -04:00
MagicBot 761ec6f4af Blend test 2023-10-15 14:55:19 -04:00
MagicBot 5900068898 Blend test 2023-10-15 14:44:32 -04:00
MagicBot 13f5e3eff2 Comment cleanup 2023-10-15 14:35:16 -04:00
MagicBot db9e950558 Comment cleanup 2023-10-15 14:30:58 -04:00
MagicBot 3f93bf08fb Test raw blend 2023-10-15 14:27:52 -04:00
MagicBot 65eebcbb5d Blend updated 2023-10-15 14:07:54 -04:00
MagicBot 6ed3495780 Blend updated 2023-10-15 13:57:18 -04:00
MagicBot 06049a7135 Dev cmd updated 2023-10-15 13:47:52 -04:00
MagicBot 12e073ca46 Dev cmd updated 2023-10-15 13:47:35 -04:00
MagicBot 4ee4054ab3 Dev cmd updated 2023-10-15 13:46:39 -04:00
MagicBot 11664a9218 Dev cmd updated 2023-10-15 13:42:28 -04:00
MagicBot d414c19904 Set parent zone properly 2023-10-15 13:31:31 -04:00
MagicBot 279a0aed91 Use half extents as offset from center 2023-10-12 07:04:27 -04:00
MagicBot c6e0e36531 Dev command updated 2023-10-12 07:01:11 -04:00
MagicBot 10b9f19036 Dev command updated 2023-10-12 06:51:01 -04:00
MagicBot ad661ea464 Dev command updated 2023-10-12 06:43:02 -04:00
MagicBot affe6b08ab Method is now called 2023-10-12 06:33:22 -04:00
MagicBot 1b2c218e83 property conforms to JSON 2023-10-12 06:19:22 -04:00
MagicBot 9e96add299 Class cleanup 2023-10-12 06:12:40 -04:00
MagicBot 9f9c3ba7f1 Ratios initialized. 2023-10-12 06:08:29 -04:00
MagicBot d15b8a5246 Opposite of 1006300 created as 1006301. 2023-10-12 06:01:55 -04:00
MagicBot c1e1c730bb Opposite of 1006300 created as 1006301. 2023-10-12 05:49:22 -04:00
MagicBot a53c68054d Only one kind of zone. 2023-10-11 17:20:23 -04:00
MagicBot 99a79df02d abs is up the chain a step 2023-10-11 17:17:18 -04:00
MagicBot 1a0f318968 abs is up the chain a step 2023-10-11 17:14:40 -04:00
MagicBot 6ac65c73d5 Method cleanup 2023-10-11 17:04:09 -04:00
MagicBot dc5a778610 Method cleanup 2023-10-11 17:00:53 -04:00
MagicBot 20d9a232cc Method cleanup 2023-10-11 17:00:01 -04:00
MagicBot 280bd61e2a Offset support for blend. 2023-10-11 16:50:52 -04:00
MagicBot dadfc15d39 Class cleanup and comments 2023-10-11 11:36:28 -04:00
MagicBot 1764041272 Class cleanup and comments 2023-10-11 11:34:37 -04:00
MagicBot b9ef4eee63 Class cleanup and comments 2023-10-11 11:32:43 -04:00
MagicBot 823061c699 Improved clamping 2023-10-11 11:23:20 -04:00
MagicBot 6809988e9c bugfix in variable assignment 2023-10-11 11:15:41 -04:00
MagicBot a1a3ea6234 Debug code added 2023-10-11 11:01:04 -04:00
MagicBot 3684296959 Assignment removed for now 2023-10-11 10:53:58 -04:00
MagicBot 68c8d91871 Assignment removed for now 2023-10-11 10:43:44 -04:00
MagicBot 7655b67338 Debug code added 2023-10-11 10:42:04 -04:00
MagicBot 68aef50283 Debug code added 2023-10-11 10:40:27 -04:00
MagicBot 6494e07e9e Test baseline 2023-10-10 12:34:21 -04:00
MagicBot 859de1004e Platform revert 2023-10-10 12:31:43 -04:00
MagicBot 0afc8a2dc5 Platform update 2023-10-10 07:59:42 -04:00
MagicBot f73184ac1e Blend cleanup 2023-10-09 10:56:39 -04:00
MagicBot 52b66be43b Blend cleanup 2023-10-09 10:47:48 -04:00
MagicBot bd208bd1ab Blend cleanup 2023-10-09 09:45:04 -04:00
MagicBot f7952008cd Blend cleanup 2023-10-09 09:35:24 -04:00
MagicBot a0c82d3f3f Blend cleanup 2023-10-09 09:32:20 -04:00
MagicBot dd01fd1688 Proper setting of maxpy 2023-10-09 09:22:41 -04:00
MagicBot d2dc95c169 Dev command updated 2023-10-09 08:44:06 -04:00
MagicBot 53f7165e24 Blend function installed 2023-10-09 07:47:50 -04:00
MagicBot c90a250ba7 Blend function installed 2023-10-09 07:05:54 -04:00
MagicBot e80dd66809 Interpolation cleanup 2023-10-09 06:20:17 -04:00
MagicBot 95558371df Method inlined 2023-10-09 06:16:25 -04:00
MagicBot 085f79cefd Sanity check added 2023-10-09 06:14:06 -04:00
MagicBot a17b9fdd13 Zone extents derived from zone 2023-10-09 06:04:37 -04:00
MagicBot 73b6854266 Map loaded updated 2023-10-09 05:44:38 -04:00
MagicBot fe8d512596 WorldAltitude for seafloor set 2023-10-09 04:51:50 -04:00
MagicBot ef8754c018 WorldAltitude for seafloor set 2023-10-09 04:48:22 -04:00
MagicBot 483ccbff00 WorldAltitude for seafloor set 2023-10-09 04:37:54 -04:00
MagicBot 07f736b8e6 WorldAltitude for seafloor set 2023-10-09 04:32:57 -04:00
MagicBot cd1de763e3 Terrain size set by zone radius 2023-10-09 04:14:51 -04:00
MagicBot d6d4008348 Error trap 2023-10-09 04:11:55 -04:00
MagicBot 4bbbbf9fa2 Error trap 2023-10-08 23:11:59 -04:00
MagicBot a3d29bb8f0 Error trap 2023-10-08 23:05:41 -04:00
MagicBot 0d58aee2fe Terrain type is capitalized 2023-10-08 22:54:40 -04:00
MagicBot bc5d0cc4a9 Terrain zone set in constructor 2023-10-08 22:49:13 -04:00
MagicBot 59c3bea2d6 Error logging added 2023-10-08 22:45:33 -04:00
MagicBot 13163ddb7e Error logging added 2023-10-08 22:44:34 -04:00
MagicBot 02a9256950 Configure player cities and PLANAR 2023-10-08 22:40:31 -04:00
MagicBot d31d6c1f95 Configure player cities and PLANAR 2023-10-08 22:36:26 -04:00
MagicBot bc099e9dc0 Constructor filled in 2023-10-08 21:51:16 -04:00
MagicBot 79bf0523a5 Constructor filled in 2023-10-08 21:50:27 -04:00
MagicBot a0d2ccb5ab Completed partial refactor. 2023-10-08 20:26:37 -04:00
MagicBot df54840a88 Completed partial refactor. 2023-10-08 09:59:13 -04:00
MagicBot 4b62517d99 Partial refactor. 2023-10-08 09:49:49 -04:00
MagicBot 0ce9ec3ae2 Output conforms with client 2023-10-08 09:32:08 -04:00
MagicBot 5279fa8fbe Dev command updated 2023-10-08 09:22:53 -04:00
MagicBot 0d75e6db9b Start terrain refactor 2023-10-08 09:18:43 -04:00
MagicBot ffb541a12e Prepare for terrain 2023-10-08 09:09:50 -04:00
MagicBot 5fdaa11367 Prepare for terrain 2023-10-08 09:04:15 -04:00
MagicBot 6b339da061 Count propagated 2023-10-07 21:03:47 -04:00
MagicBot f454fb5e1c Need float value 2023-10-07 20:55:11 -04:00
MagicBot 5db8c47aa8 Clamp value at pole 2023-10-07 20:47:35 -04:00
MagicBot e7571f3e83 Audit of zone loc 2023-10-07 20:43:17 -04:00
MagicBot d9b513e88c cell count cached 2023-10-07 20:32:08 -04:00
MagicBot 7dcde390cd Flip Flop 2023-10-07 20:19:30 -04:00
MagicBot 6a750f4eb2 Unused methods removed 2023-10-07 20:04:26 -04:00
MagicBot c6d24d25cc Method cleanup 2023-10-07 13:57:20 -04:00
MagicBot c19ec913cb Disable blend until after refactor. 2023-09-21 14:39:37 -04:00
MagicBot 438ea04a1a Comment cleanup 2023-09-20 17:26:00 -04:00
MagicBot d7044c1663 Depth less one 2023-09-20 17:24:41 -04:00
MagicBot 3497d275a8 File reformat 2023-09-20 17:21:34 -04:00
MagicBot 6fd61889a8 byte array to save memory. 2023-09-20 17:20:54 -04:00
MagicBot 85983954de Conform to database 2023-09-20 16:28:26 -04:00
MagicBot 1e9eec2c48 Heightmap is now an integer. 2023-09-20 16:24:00 -04:00
MagicBot bd97745ed1 class and table schema now conform to JSON 2023-09-20 16:07:50 -04:00
MagicBot 34d450fecf class and table schema now conform to JSON 2023-09-20 16:06:57 -04:00
MagicBot be107c0858 class and table schema now conform to JSON 2023-09-20 16:05:57 -04:00
MagicBot 8289786099 class and table schema now conform to JSON 2023-09-20 16:03:55 -04:00
MagicBot 56f159d50a class and table schema now conform to JSON 2023-09-20 16:01:01 -04:00
MagicBot 61961bab05 class and table schema now conform to JSON 2023-09-20 16:00:16 -04:00
MagicBot e0387dce00 class and table schema now conform to JSON 2023-09-20 15:53:41 -04:00
MagicBot 46b3db033b Inlined empty getters 2023-09-20 15:43:01 -04:00
MagicBot bf9fdae58b Method moved to manager. 2023-09-20 14:31:48 -04:00
MagicBot 7b8cafc8ac Cleanup of interpolation method 2023-09-20 14:20:22 -04:00
MagicBot 7793fab5d2 Unnecessary initialization. 2023-09-20 14:14:55 -04:00
MagicBot 1ddcda5c5d Logging to console 2023-09-20 14:04:55 -04:00
MagicBot 9714393538 Pixel data loaded from TARGA files 2023-09-20 13:59:32 -04:00
MagicBot d46f369599 Unused variables 2023-09-20 13:49:27 -04:00
MagicBot 2dfd2a53c2 Testing image reader 2023-09-20 13:37:43 -04:00
MagicBot e3675ec9a4 Testing image reader 2023-09-20 13:26:54 -04:00
MagicBot cb2ed0c766 Testing image reader 2023-09-20 13:23:02 -04:00
MagicBot 6638fdcaff Framework to load pixel data 2023-09-20 13:06:18 -04:00
MagicBot d0b4634429 Framework to load pixel data 2023-09-20 12:46:41 -04:00
MagicBot 1fdf1f1339 New collection defined for pixel data 2023-09-20 11:59:43 -04:00
MagicBot 6290c6d0af Start separate PLANAR from TARGA 2023-09-20 11:40:29 -04:00
MagicBot 26a3ea4b18 Release bounds after usage. 2023-09-20 11:38:39 -04:00
MagicBot c7b2245005 Unused methods removed 2023-09-20 11:35:39 -04:00
MagicBot 5ba06796b1 Interpolating from adjusted altitudes. 2023-09-18 03:19:00 -04:00
MagicBot e359b1dfdf Interpolating world altitude 2023-09-18 02:11:38 -04:00
MagicBot cbc8216fe0 Blender 2023-09-18 00:05:53 -04:00
MagicBot da238b9986 Cleanup in bounds configuration 2023-09-17 23:56:45 -04:00
MagicBot 897ddfe77a Bounds must be set before setting parent. 2023-09-17 23:53:06 -04:00
MagicBot 80f2db794f Bounds must be set before setting parent. 2023-09-17 23:46:00 -04:00
MagicBot 913a2601d5 Update to blend logic. 2023-09-17 14:02:17 -04:00
MagicBot 40c27eef79 Update to blend logic. 2023-09-17 14:00:00 -04:00
MagicBot df45e00fbd 255 to normalize 2023-09-17 13:39:42 -04:00
MagicBot a323f1ffb7 max based on min blend 2023-09-17 13:30:16 -04:00
MagicBot ea6092db8a max based on min blend 2023-09-17 13:28:23 -04:00
MagicBot 8c6eb48876 max based on min blend 2023-09-17 13:25:15 -04:00
MagicBot 37d2f8a8ad DevCmd output updated 2023-09-17 13:11:29 -04:00
MagicBot f18acf3e68 DevCmd output updated 2023-09-17 13:08:51 -04:00
MagicBot 3fb08ca2c3 Visibility promotion for a data class 2023-09-17 12:53:56 -04:00
MagicBot 83be09d643 Comment and name cleanup 2023-09-17 12:49:30 -04:00
MagicBot 6de8249fb0 Devcmd output updated. 2023-09-17 12:44:37 -04:00
MagicBot 013ddcff66 heightmap blend configuration completed. 2023-09-17 12:25:07 -04:00
MagicBot 8ece4caf1c value is halfExtent 2023-09-17 12:23:06 -04:00
MagicBot a94b12e8cd Correction to blend configuration. 2023-09-17 12:15:21 -04:00
MagicBot c38103068e Correction to blend configuration. 2023-09-17 12:13:46 -04:00
MagicBot f8caaf0e99 Correction to blend configuration. 2023-09-17 12:07:43 -04:00
MagicBot ee809ddb37 clamping cleaned up. 2023-09-17 12:01:13 -04:00
MagicBot 227bd0523e clamping cleaned up. 2023-09-17 11:59:46 -04:00
MagicBot c096b29521 parameter ordering fixed. 2023-09-17 11:57:24 -04:00
MagicBot 6a0520b126 Blend lerp implemented. 2023-09-17 11:54:57 -04:00
MagicBot 240373898a Preparation for blend lerp insertion. 2023-09-17 08:08:28 -04:00
MagicBot d33ad0cdef Preparation for blend lerp insertion. 2023-09-17 08:03:50 -04:00
MagicBot a3a3070158 Blending configuration setup in SetParent() 2023-09-17 07:42:46 -04:00
MagicBot b717c3d550 Starting work to sync heightmap model with Shadowbane. 2023-09-16 16:03:22 -04:00
MagicBot 9aa5820ac2 Cleanup of getWorldHeight() 2023-09-16 13:18:36 -04:00
MagicBot 1ac65dd9bd Tightened clamping. 2023-09-16 08:31:04 -04:00
MagicBot 797a6951a8 Tightened clamping. 2023-09-16 08:28:20 -04:00
MagicBot 7268de6e1e Test of raw heightmaps 2023-09-16 08:06:31 -04:00
MagicBot fc602ce9f4 Test of raw heightmaps 2023-09-16 08:04:49 -04:00
MagicBot 403bff27b4 Test of raw heightmaps 2023-09-16 08:01:46 -04:00
MagicBot 44b9ba911d Indices added to command output. 2023-09-15 17:29:51 -04:00
MagicBot c24f8fc85b Login check modified for testing. 2023-09-15 14:23:34 -04:00
MagicBot 75c56cbeee Devcmd output updated. 2023-09-14 14:11:26 -04:00
MagicBot 15f42c9658 Devcmd output updated. 2023-09-14 13:54:22 -04:00
MagicBot 525d0c21bb Devcmd output updated. 2023-09-14 13:41:07 -04:00
MagicBot cbf05cfe5b Devcmd output updated. 2023-09-14 13:30:46 -04:00
MagicBot aaa506a581 Divisor testing. 2023-09-14 13:21:02 -04:00
MagicBot a2fbfad00e Revert initialize. 2023-09-14 13:07:32 -04:00
MagicBot 031c52e25a Divisor test. 2023-09-14 13:03:06 -04:00
MagicBot 693dfd827c Updated dev cmd output 2023-09-14 13:01:22 -04:00
MagicBot d26a2d35bf Multiple not divide 2023-09-14 12:39:31 -04:00
MagicBot 9839de128c Variable initialized. 2023-09-14 12:38:47 -04:00
MagicBot 12872ee51e Variable initialized. 2023-09-14 12:30:54 -04:00
MagicBot 2af08d6823 Reformat file. 2023-09-14 12:29:26 -04:00
MagicBot f646075311 Static method to save memory. 2023-09-14 12:28:36 -04:00
MagicBot dfca767476 Multiple not divide. 2023-09-14 12:25:18 -04:00
MagicBot fd7b5952c2 Dev command updated 2023-09-14 12:21:12 -04:00
MagicBot 4b46eddc47 Dev command updated 2023-09-14 12:09:50 -04:00
MagicBot e26121177f World altitude set in setparent. 2023-09-14 12:07:08 -04:00
MagicBot 91eb0c314f SeAudit command created 2023-09-14 10:14:31 -04:00
MagicBot 1d7a2d4eae Added sea level info to command. 2023-09-14 10:09:10 -04:00
MagicBot e4235d4d75 Bugfix in setparent. 2023-09-14 09:13:02 -04:00
FatBoy 41a83115be safehold guard exclusion from equipment dropping 2023-09-13 22:34:57 -05:00
FatBoy 3ce887cb34 NPC are immune to all 2023-09-13 22:30:24 -05:00
FatBoy 874eb6189e NPC apply runes 2023-09-13 22:24:10 -05:00
FatBoy 5c5c491597 debug code 2023-09-13 22:10:22 -05:00
FatBoy ff78c1443c null check 2023-09-13 22:04:23 -05:00
FatBoy cdc1c2d776 region assignment 2023-09-13 21:58:20 -05:00
FatBoy a004c247ab abstract character cleanup 2023-09-13 21:57:17 -05:00
FatBoy 048e90fb8f NPC all apply "shopkeeper" rune 2023-09-13 21:56:18 -05:00
FatBoy c1498145e6 NPC rune work 2023-09-13 21:45:15 -05:00
FatBoy 7654d5183a region lookup and height offset for AbstractCharacters when setLoc is called 2023-09-13 21:28:20 -05:00
FatBoy 9b7fc0a93b region height work 2023-09-13 21:07:57 -05:00
FatBoy 200318ddcf add region height to world height in setLoc 2023-09-13 20:48:02 -05:00
FatBoy 1fdd0a1b32 initialize runes array list for NPC 2023-09-13 20:45:21 -05:00
FatBoy 8869772fa4 print effects command 2023-09-13 20:34:48 -05:00
FatBoy 96bc894962 print runes command 2023-09-13 20:27:38 -05:00
FatBoy 5a9f5f2eca NPCs apply runes from set 2023-09-13 20:22:56 -05:00
FatBoy bd9dbcbb42 NPCs load rune sets 2023-09-13 20:12:07 -05:00
FatBoy f8269bb764 character runes moved form PlayerCharacter to AbstractCharacter 2023-09-13 20:06:12 -05:00
FatBoy c215047c00 teleport method removed form PLayerCharacter to use AbstractCharacter.teleport instead 2023-09-13 20:00:23 -05:00
FatBoy a313e3f364 setRegion removal 2023-09-13 19:56:54 -05:00
FatBoy b34be1184e null region assignment 2023-09-13 19:53:13 -05:00
FatBoy e23c5527da null region assignment 2023-09-13 19:52:17 -05:00
FatBoy 847e62dd27 setLoc now handles region assignment 2023-09-13 19:51:39 -05:00
MagicBot f5d83aa259 Class cleanup of bonus code and unused methods. 2023-09-13 09:38:10 -04:00
MagicBot 4a5c0ae5a0 Cities don't actually have a location. They are a property of a zone. Let's start here. 2023-09-13 09:29:42 -04:00
MagicBot b4a4323906 Minor formatting cleanup. 2023-09-13 09:24:40 -04:00
MagicBot 48fc5af5f7 Removed unused variables from class. 2023-09-13 07:33:02 -04:00
MagicBot a1753a28ec Player cities write correct offset. 2023-09-13 07:29:29 -04:00
MagicBot fa4039cf63 Add y offset to zone altitude. 2023-09-12 16:25:46 -04:00
MagicBot 4b0814c0a1 Add y offset to zone altitude. 2023-09-12 16:24:47 -04:00
MagicBot 78d0b06b36 Revert for testing. 2023-09-12 16:22:41 -04:00
MagicBot 426bdf5df3 Removed yoffset from world altitude. 2023-09-12 16:13:27 -04:00
MagicBot 5dbad7ebd0 Player cities set to white. 2023-09-12 15:33:52 -04:00
MagicBot 6ef33c5b7f Update to world altitude calculation 2023-09-12 15:27:00 -04:00
MagicBot 3737a6eace Sea level logic updated. 2023-09-12 15:18:09 -04:00
MagicBot 967e129724 Sea level logic updated. 2023-09-12 15:09:52 -04:00
MagicBot e9d549377e Sea level logic updated. 2023-09-12 15:06:26 -04:00
MagicBot 924b8af827 Sea level logic updated. 2023-09-12 14:57:47 -04:00
MagicBot 045ee73b61 rework of world altitude calculation. 2023-09-12 14:51:04 -04:00
MagicBot 5d9d13ce07 Any argument rebuilds world altitude. 2023-09-12 13:06:46 -04:00
MagicBot 5a1347ec50 Devcmd updated 2023-09-12 13:01:32 -04:00
MagicBot c705f45856 Devcmd updated 2023-09-12 12:38:20 -04:00
MagicBot 83fc129d05 Dev command output update. 2023-09-11 15:59:08 -04:00
MagicBot d7cde3a77f Grid flip testing 2023-09-11 15:41:44 -04:00
MagicBot afb1ad8e94 Grid flip testing 2023-09-11 15:36:59 -04:00
MagicBot 15a79ee9bd devcmd output updated with grid. 2023-09-11 14:37:16 -04:00
MagicBot 68794c170b Removed usless method: added grid to cmd output. 2023-09-11 14:30:14 -04:00
MagicBot a9d84749ba Removed worthless command. 2023-09-11 14:26:06 -04:00
MagicBot dd5fc323ef bugfix in array loading 2023-09-11 14:06:22 -04:00
MagicBot cf1547d077 DevCmd Updated 2023-09-11 13:57:05 -04:00
MagicBot 9664c99e06 DevCmd Updated 2023-09-11 13:50:56 -04:00
MagicBot 17b7fb6999 Unused method 2023-09-11 13:48:16 -04:00
MagicBot 21a4db8a81 Pixels set to 0 2023-09-11 13:40:47 -04:00
MagicBot eabdabcfcd No insane bucket widths. 2023-09-11 12:38:46 -04:00
MagicBot c548383a4c Should not be putting empty maps into the collection with id 0. 2023-09-11 12:35:58 -04:00
MagicBot 7337f4be1e DevCmd update. 2023-09-11 12:14:42 -04:00
MagicBot d84f223b9d DevCmd update. 2023-09-11 12:08:39 -04:00
MagicBot 5431112186 DevCmd update. 2023-09-11 11:35:53 -04:00
MagicBot ff743151c6 DevCmd update. 2023-09-11 11:25:28 -04:00
MagicBot b923392b53 DevCmd update. 2023-09-11 11:18:22 -04:00
MagicBot 15d272c621 DevCmd update. 2023-09-11 11:17:34 -04:00
MagicBot eefa50b2c3 DevCmd update. 2023-09-11 11:14:55 -04:00
MagicBot ecc7a152f7 DevCmd update. 2023-09-11 11:08:03 -04:00
MagicBot 7bf31f9a47 Rework of class interface. 2023-09-11 11:01:09 -04:00
MagicBot 7dc970ff53 Rework of dev command; junk deleted. 2023-09-11 10:50:01 -04:00
FatBoy 97d71ec361 move to point handler revert 2023-09-11 01:36:45 -05:00
FatBoy 003b939d33 Move to point message variable naming and handler cleanup 2023-09-10 19:37:46 -05:00
FatBoy 9989cbff24 pc.teleport uneeded 2023-09-10 17:20:30 -05:00
FatBoy 426ef989f8 can no longer run to invalid targets 2023-09-10 16:45:17 -05:00
FatBoy ca6e079053 fresh start 2023-09-10 15:51:25 -05:00
FatBoy 13644fd308 use target from message in move to point 2023-09-10 15:02:26 -05:00
FatBoy 1ec76ae3fc use target from message in move to point 2023-09-10 14:58:56 -05:00
FatBoy 51d75146cc NPC added to attack message handler switch 2023-09-10 14:28:32 -05:00
FatBoy bc4222646d combat target usage 2023-09-10 14:12:01 -05:00
FatBoy c3e206e3b1 null check 2023-09-10 14:09:48 -05:00
FatBoy 04147e11cc logic for moveToPoint message handler 2023-09-10 14:08:54 -05:00
FatBoy 545cb4cddf null check for building pulled 2023-09-10 13:40:19 -05:00
FatBoy 0f948d4e2a removed redundant setCombatTarget 2023-09-10 13:39:27 -05:00
FatBoy 5fb3e0fe14 switch for target type in attack message handler 2023-09-10 13:38:07 -05:00
MagicBot fb87dfd91e TargetType declared. 2023-09-10 14:33:04 -04:00
FatBoy be8967b05f null set for target 2023-09-10 13:28:46 -05:00
FatBoy 8acfff7faa null check for target 2023-09-10 13:26:28 -05:00
FatBoy 18e1f4bd28 early exits for attack message handler 2023-09-10 13:25:08 -05:00
MagicBot 74f88a6643 Unused variable removed 2023-09-10 14:04:48 -04:00
FatBoy 47fe764cb0 early exits for attack message handler 2023-09-10 12:58:24 -05:00
MagicBot 9e53770e6c Handler added to protocol class. 2023-09-10 13:55:16 -04:00
MagicBot a9cc001791 Handler added to protocol class. 2023-09-10 13:53:12 -04:00
MagicBot c24913d124 Handler filled in with logic. 2023-09-10 13:52:04 -04:00
MagicBot 63bf0b6070 Handler created for AttackMsg 2023-09-10 13:43:28 -04:00
FatBoy 50792327a4 moveToPoint attack handling 2023-09-10 12:31:39 -05:00
FatBoy 46e67be8ca player character attacks added to city outlaws 2023-09-10 11:57:52 -05:00
FatBoy e7c3ba5eba guards and siege engines ignore idle state with no players loaded 2023-09-09 22:30:45 -05:00
FatBoy ea86ab2300 guards will revert cmbat target to null if its a player and is no longer loaded 2023-09-09 22:23:25 -05:00
FatBoy 501e8c937f guards use city player memory to determine whether they go idle or not 2023-09-09 22:10:10 -05:00
FatBoy cae5c36d84 guards will aggro siege equipment not belonging to the guild 2023-09-09 22:01:59 -05:00
FatBoy 1b92fa76e1 characters that attack city friendly buildings are added to cityOutlaws 2023-09-09 21:48:22 -05:00
FatBoy bbdb683061 players who attack buildinsg added to cityOutlaw list 2023-09-09 21:43:29 -05:00
FatBoy 2d04547c74 display seeInvis level in aiInfo command 2023-09-09 21:19:29 -05:00
FatBoy 5192c801f7 CombatUtilities cleanup 2023-09-09 20:56:19 -05:00
FatBoy d966d50bd5 removed duplicate variables in MobBase 2023-09-09 20:40:52 -05:00
FatBoy 7e20db33f2 final guard stat revisions 2023-09-09 20:37:47 -05:00
FatBoy 669ee7215b added range modification for guards 2023-09-09 20:11:00 -05:00
FatBoy 6fa00a43a4 removed unused method 2023-09-09 20:06:33 -05:00
FatBoy 4edf740179 finished modifications for guards 2023-09-09 19:57:17 -05:00
FatBoy c7abb4c920 stance modifiers for guards 2023-09-09 19:41:32 -05:00
FatBoy df3964110a stances for guards 2023-09-09 19:23:46 -05:00
FatBoy 96231260bc consolidated all guards to GuardLogic 2023-09-09 10:37:40 -05:00
FatBoy 967303d2de outlaw and hate value moved to modifyHealth 2023-09-09 10:20:25 -05:00
FatBoy 955481773d wall archer early exit for canCast 2023-09-09 09:52:47 -05:00
FatBoy d66a7049e8 guard walking bug fix 2023-09-09 09:35:03 -05:00
MagicBot e73b8d2826 Harden against null 2023-09-09 10:20:20 -04:00
MagicBot ea23003807 Hirelings removed from zone mob set 2023-09-09 10:16:36 -04:00
MagicBot 23f41f8ae7 Minions always have offset not determined by captain being alive. 2023-09-09 09:26:55 -04:00
MagicBot 3f416f83d3 Patrol points only set once. 2023-09-09 09:11:43 -04:00
MagicBot 931d1992b6 Patrol points are reset each patrol. 2023-09-09 09:10:08 -04:00
MagicBot fd927a7052 New method implemented. 2023-09-09 08:58:41 -04:00
MagicBot dd46224afe New method implemented. 2023-09-09 08:44:00 -04:00
MagicBot be2b29ccc7 New method implemented. 2023-09-09 08:38:00 -04:00
MagicBot c93e3bc947 Update to ordering of logic 2023-09-09 08:34:09 -04:00
MagicBot 7d49395c41 New method implemented. 2023-09-09 08:31:20 -04:00
MagicBot f4c9e6d7b8 Remove hireling method defined in manager. 2023-09-09 08:28:03 -04:00
MagicBot b7a907c8c8 db method to support removing all minions 2023-09-09 08:04:56 -04:00
MagicBot 36485a0f01 Formation enforced when captain is dead. 2023-09-08 12:44:36 -04:00
MagicBot efec1b4444 Load data only. 2023-09-08 12:39:04 -04:00
MagicBot bdf6500260 Outlaw moved before guild check. 2023-09-07 14:14:21 -04:00
MagicBot db4eb0579e Aggro code removed from check to send mob home. 2023-09-07 13:37:32 -04:00
MagicBot 76f33534d4 Captains force march minions 2023-09-07 13:09:25 -04:00
MagicBot 39fea5bc2f Captains order minions to patrol 2023-09-07 12:42:43 -04:00
MagicBot 660d5c1270 Captains order minions to patrol 2023-09-07 12:41:20 -04:00
MagicBot 781e2fc9b2 Comment adjusted 2023-09-07 12:27:23 -04:00
MagicBot c2a2464fe8 Errant delimiter removed. 2023-09-07 12:25:52 -04:00
MagicBot beb3c15eb3 Miniond patrol on own if captain is dead. 2023-09-07 12:24:45 -04:00
MagicBot 553010bb7b Minions get marching orders from captain 2023-09-07 12:07:39 -04:00
MagicBot 8d12bbf453 Formation offset for minions. 2023-09-07 11:48:42 -04:00
MagicBot fa7588826a Pets set to not alive when dismissing. 2023-09-07 11:15:30 -04:00
MagicBot 332f191e19 Merged switch cases. 2023-09-07 10:56:46 -04:00
MagicBot 8151382a6b Patrol points inherited from barracks not captain. 2023-09-07 10:49:07 -04:00
MagicBot ae44a21be1 Duplicate range check removed. 2023-09-07 10:40:27 -04:00
MagicBot b0ff0995de Start consolidation of guard logic 2023-09-07 10:37:09 -04:00
MagicBot e711095ecd Start consolidation of guard logic 2023-09-07 10:36:18 -04:00
MagicBot 08de97a2a8 Guild check removed from outlaw condition. 2023-09-07 09:55:55 -04:00
MagicBot 5eb6302d2a Null check is made before this method call. 2023-09-05 15:56:49 -04:00
MagicBot 2e346ae7fd Rework of combat deference to captain. 2023-09-05 15:51:14 -04:00
MagicBot 1285d12915 Consolidated cast methods. 2023-09-05 14:25:24 -04:00
MagicBot 8b5cb9258e dd roll removed 2023-09-05 14:09:48 -04:00
MagicBot ef3e3a0392 .contains check needed. 2023-09-05 13:43:09 -04:00
MagicBot 8fca6572f9 Typo in comment fixed. 2023-09-05 13:10:17 -04:00
MagicBot 33eaf0e583 Outlaws added to aiinfo. 2023-09-05 13:04:56 -04:00
MagicBot 16acd1c08c Simplify logic; variable is provided. 2023-09-05 12:55:12 -04:00
MagicBot a8e8804ce3 Attacking guard flags you as an outlaw. 2023-09-05 12:34:46 -04:00
MagicBot b8c0f997f6 Fix typo in thread name. 2023-09-05 12:30:47 -04:00
MagicBot 11e63f38b1 Update to mob retaliate logic. 2023-09-05 12:19:50 -04:00
MagicBot ff36d8f3db Modification to minion retaliate. 2023-09-05 08:27:34 -04:00
MagicBot 975542d8af sql column update. 2023-09-04 15:21:04 -04:00
MagicBot d71a9415b4 Integer object not int signature. 2023-09-04 15:09:51 -04:00
MagicBot e948da95b5 Column name updated. 2023-09-04 14:58:13 -04:00
MagicBot 9a6510c320 Minions now use copyonwrite collection. Slot agnostic. 2023-09-04 14:50:59 -04:00
MagicBot 57ff1ede97 Name is all that's needed. 2023-09-04 14:16:36 -04:00
MagicBot 7c0f2563f7 Already added to collection at this point. 2023-09-04 13:09:32 -04:00
FatBoy d11a954b40 remove test block 2023-09-03 20:41:21 -05:00
FatBoy f354339af1 null checks 2023-09-03 20:38:48 -05:00
FatBoy 89658bb77a null checks 2023-09-03 20:28:17 -05:00
FatBoy 1ff0238b6e skill loading bypass for guards 2023-09-03 20:22:01 -05:00
FatBoy e777434d57 Mob specific rune skill loading 2023-09-03 20:10:57 -05:00
FatBoy ee6efc30a3 rune skill loading broken into static method in NPCManager 2023-09-03 19:52:16 -05:00
FatBoy 0758bb5f38 SkillsBase are now cached when missing for mobs 2023-09-03 19:44:33 -05:00
FatBoy 299d5725a6 lookup using name 2023-09-03 19:31:04 -05:00
FatBoy d7c9b31ec7 indentation and comment 2023-09-03 19:24:34 -05:00
FatBoy 6c78bee5c1 null check 2023-09-03 19:24:06 -05:00
FatBoy dba0cbd5f9 skill type not name used 2023-09-03 19:22:28 -05:00
FatBoy 0752e780f2 mobs load skills 2023-09-03 19:19:18 -05:00
MagicBot c43919ce01 Level loaded into object. 2023-09-03 09:48:37 -04:00
MagicBot 0d95510b72 captain uuid added to aiInfoCmd 2023-09-03 09:15:20 -04:00
MagicBot 60fb2571a2 Support for loading of skill adjustment map. 2023-09-03 08:18:48 -04:00
MagicBot 90cbe90492 Merge remote-tracking branch 'origin/mobile-effects' into magicbox-1.5.2 2023-09-03 07:33:50 -04:00
FatBoy 95c203b0ed load and apply mobbaseSkill 2023-09-02 20:39:36 -05:00
FatBoy 449c5c5c77 infrastructure for mob skills loading 2023-09-02 20:29:03 -05:00
FatBoy 9aff208403 guard captains to move tot heir first patrol point right away 2023-09-02 19:43:40 -05:00
FatBoy 4318849127 minion relatiate handled inside retaliate function 2023-09-02 19:34:08 -05:00
FatBoy 29e8cdf699 attacking guard minion will no longer be ignored 2023-09-02 19:23:33 -05:00
MagicBot 4427dbdcad Fix in exception for werwolf/werebear (magic numbers) 2023-09-02 16:28:16 -04:00
MagicBot af4c3819b9 contract added to aiInfoCmd 2023-09-02 16:18:05 -04:00
MagicBot 39379e1ac0 Sight check moved out of cancast. 2023-09-02 16:04:40 -04:00
MagicBot 71eeb3f6b8 Variable hidden elevated to abschar. 2023-09-02 15:57:23 -04:00
MagicBot d409ef49af Can cast added to aiinfo. 2023-09-02 15:44:42 -04:00
MagicBot e7a80e9280 Comment cleanup 2023-09-02 15:33:12 -04:00
MagicBot 65c2d2ea0b Logic cleanup when dealing with contracts. 2023-09-02 15:30:10 -04:00
MagicBot 92666dca21 Invis check precedes power check. 2023-09-02 15:25:19 -04:00
MagicBot 3e1a79c248 AI info dev command updated. 2023-09-02 15:11:17 -04:00
MagicBot 73a1ce083a Unused method removed. 2023-09-02 15:00:38 -04:00
MagicBot 22dacebc5e Override unnecessary. 2023-09-02 15:00:06 -04:00
MagicBot 80d0948e24 Contract power handling now additive. 2023-09-02 14:04:47 -04:00
MagicBot 58b427b977 Contract support added to mobile ai when gathering powers. 2023-09-02 13:34:26 -04:00
MagicBot a4cab3565a Value cannot be null. Set early in runafterload. 2023-09-02 13:16:34 -04:00
MagicBot 205c9580e3 sql column name fix. 2023-09-02 12:52:55 -04:00
MagicBot 70a0ed135b Refactored mob powers to rune powers. Now uses rune_id to call into system which is derived in the getter to support minions. 2023-09-02 12:47:04 -04:00
FatBoy f556181d77 guardlist serialization displays correct minion rank 2023-09-01 22:15:29 -05:00
FatBoy d48e26904e revert last commit 2023-09-01 22:06:21 -05:00
FatBoy 19232ac405 archers added to human guards as minions 2023-09-01 22:01:09 -05:00
FatBoy 9ee2ccc8af werebear and werewolf guard can use powers 2023-09-01 21:48:57 -05:00
FatBoy 7079bb6a63 resist loading refactored as static method to NPCManager 2023-09-01 21:39:34 -05:00
FatBoy 0ab5827ee5 mobs to load equipment resists 2023-09-01 21:34:48 -05:00
FatBoy c5443f622c utilization and assignment of aiAgentType 2023-09-01 20:57:09 -05:00
FatBoy e4aa276cca cleanup old code 2023-09-01 20:42:33 -05:00
FatBoy 90ff2d679e create and use applyMobbaseEffects method, remove old unused methods 2023-09-01 20:39:31 -05:00
FatBoy da26c35d5a mobbase loads effectsList 2023-09-01 20:36:07 -05:00
MagicBot 779e3da74e Cleanup of clear minion logic. 2023-09-01 14:33:33 -04:00
MagicBot e358c08773 Removed msg from handler. 2023-09-01 14:23:55 -04:00
MagicBot 2945fa3a47 Class reformat and removal of try block. 2023-09-01 14:17:07 -04:00
MagicBot ab1541e741 Class not needed on login server. 2023-09-01 14:09:48 -04:00
MagicBot 3aeaa709a5 Comment cleanup 2023-09-01 14:07:00 -04:00
MagicBot 91e627df6b AI moved to top of runafterload. 2023-09-01 14:05:50 -04:00
MagicBot d0795e9e1c Rework of agent type init in runafterload. Only used for 2 instances from disk. 2023-09-01 13:57:58 -04:00
MagicBot 0e12dd4874 Contract powers loaded first to preserve ordering. 2023-09-01 12:57:20 -04:00
MagicBot 25c0e48181 Loot bypass now uses agent type. 2023-09-01 12:55:33 -04:00
MagicBot 0d43c3620d Value is set earlier. 2023-09-01 12:50:57 -04:00
MagicBot 2f6137f8df Minion agent type set properly. 2023-09-01 12:38:23 -04:00
FatBoy 2843b86a93 Moved agent type to top of constructor. 2023-09-01 12:29:06 -04:00
MagicBot 8235de07ff Updated output of devcmd. 2023-08-31 14:00:34 -04:00
MagicBot e2f9a4c7f0 Guard minions inherit powers from captain. 2023-08-31 13:57:46 -04:00
MagicBot 55c6e3cf93 Refactored out duplicate power collection. 2023-08-31 13:42:15 -04:00
MagicBot 11c154e564 Assignment fix and comment cleanup. 2023-08-31 08:58:55 -04:00
MagicBot 7fc0d27c3c Siege engine agent type set properly. 2023-08-31 08:31:48 -04:00
MagicBot 1ac76cfcd8 isPlayerguard refactored to derive from agenttype. 2023-08-31 08:13:37 -04:00
MagicBot c8ed04aaaf Refactor to separate persistence and write fsm to table. 2023-08-31 08:03:30 -04:00
MagicBot 6641651f3c Unused method removed. 2023-08-31 07:27:03 -04:00
MagicBot dbf164bfb2 bonus code removal 2023-08-30 15:47:08 -04:00
MagicBot 8a617c3008 Siege minion spawn time set to 15m. 2023-08-30 15:33:55 -04:00
FatBoy a50a2430ba hate value for chants to affect mobs in range 2023-08-29 21:49:02 -05:00
FatBoy 5c3c552288 usage of AIAgentType for default patrol points 2023-08-29 21:17:44 -05:00
FatBoy 69fdddfc71 hate value fix 2023-08-29 21:01:00 -05:00
FatBoy db5b988275 usage of AIAgentType for pet checks in run after load 2023-08-29 20:18:05 -05:00
FatBoy 4284757035 pet level set in run after load removed 2023-08-29 20:16:00 -05:00
FatBoy b93a47acc0 pet death and dismissal fix 2023-08-29 20:12:48 -05:00
MagicBot d59f9857ce Cleanup in pet minion 2023-08-28 00:56:13 -04:00
FatBoy 8ce212b74b Merge remote-tracking branch 'origin/mob-refactor2' into mob-refactor2 2023-08-27 23:53:12 -05:00
FatBoy e78aea5735 Assign patrol points added as static method to NPC manager 2023-08-27 23:52:40 -05:00
MagicBot 9a3c5c3f40 Siege minion assigned UUID. 2023-08-28 00:46:39 -04:00
FatBoy 60ca3f9c34 remove siege minion 2023-08-27 23:42:04 -05:00
FatBoy e7e740dff1 blocked player character specific block in minion training message handler 2023-08-27 23:23:17 -05:00
MagicBot 8343a98d77 Minion added to map after runafterload. 2023-08-28 00:08:35 -04:00
MagicBot 5862039a00 Minion added to map after runafterload. 2023-08-28 00:07:40 -04:00
MagicBot 8af989b75f Fix is patrol logic bloc conditional. 2023-08-27 23:55:02 -04:00
MagicBot 08d0e5ff75 Logic isn't needed here. 2023-08-27 23:32:23 -04:00
MagicBot 5196d10e5c Logic isn't needed here. 2023-08-27 23:31:32 -04:00
MagicBot 3392ec463d Removed unused methods. 2023-08-27 23:29:45 -04:00
MagicBot 33529404cf Logic fix in siege minions. 2023-08-27 23:25:44 -04:00
MagicBot 00e7a36013 Logic fix in siege minions. 2023-08-27 23:22:28 -04:00
FatBoy 3060b394ab removed siegeminion map from NPC 2023-08-27 22:10:13 -05:00
MagicBot a43d9022fe Siege engine slot override. 2023-08-27 22:57:11 -04:00
FatBoy 6abdc68ca5 removed un-needed cast to player character for pets 2023-08-27 21:46:44 -05:00
FatBoy 61c66b0e96 trebs slot in proper locations 2023-08-27 21:38:31 -05:00
FatBoy 36cc23457a optimized slot for siege engines 2023-08-27 21:26:00 -05:00
FatBoy d573b238de refactored mob get/set owner 2023-08-27 21:04:34 -05:00
FatBoy 8afe25fe85 siege minions added to arty captain minion map 2023-08-27 20:50:13 -05:00
MagicBot f80647ff0d Spawn time set to 15s for debug. 2023-08-27 21:42:58 -04:00
MagicBot 7e64cbabf8 Update to slotting logic. 2023-08-27 21:30:57 -04:00
MagicBot 14a06410ae Update to slotting logic. 2023-08-27 21:25:43 -04:00
MagicBot 85c2a4f4f0 Add all as hirelings 2023-08-27 21:20:00 -04:00
FatBoy da9e211ec7 SiegeEngine enum and logic added 2023-08-27 20:05:18 -05:00
MagicBot a81070c471 Pet level += 20 to conform to 24.3 2023-08-26 15:47:10 -04:00
MagicBot e3ad7efa4f Method renamed for new convention. 2023-08-26 15:35:42 -04:00
MagicBot a4dafd7155 Unused variable in signature. 2023-08-26 15:34:27 -04:00
MagicBot 645aec853e Bindloc not adjusted for pets. 2023-08-26 15:21:50 -04:00
MagicBot d8d5e4a3c4 Name set to default. 2023-08-26 15:19:17 -04:00
MagicBot 7a48c04057 Mobbase set properly. 2023-08-26 15:10:14 -04:00
MagicBot 64aaaa707e Behaviour type set for pets. 2023-08-26 15:00:43 -04:00
MagicBot 445d40dc5f Bonus code removed. 2023-08-26 14:59:25 -04:00
MagicBot ebdcb531f2 AI methods moved to ai class. 2023-08-26 14:54:43 -04:00
MagicBot c9cdb891d6 Cleanup of ownerNPC mess. 2023-08-26 14:52:18 -04:00
MagicBot f5c6c002a8 Unused method removed. 2023-08-26 13:53:32 -04:00
MagicBot d171c6bb9a Unused method removed. 2023-08-26 13:47:41 -04:00
MagicBot 1c81a4faed Wall archers static reverted. 2023-08-26 13:38:09 -04:00
MagicBot e7d1d5cb71 Constructor removed. 2023-08-26 12:38:54 -04:00
MagicBot 060d831d50 Comment for clarity. 2023-08-26 12:37:28 -04:00
MagicBot 316bd6dd01 Siege engines use slot system. 2023-08-26 12:35:14 -04:00
MagicBot 34081e5903 Ordinal comparison fix. 2023-08-26 12:21:47 -04:00
MagicBot e2d843b65e Signature refactor. 2023-08-26 12:03:33 -04:00
MagicBot a796f5fe4b More siege engine work. 2023-08-26 11:55:18 -04:00
MagicBot 51ee41c773 use of SiegeEngine Behaviour Type 2023-08-26 11:19:36 -04:00
MagicBot 7e5ed3efe5 sqrMagnitude not sqrRoot 2023-08-26 11:09:58 -04:00
MagicBot 8dd25ac315 Minions inherit patrol points form barracks. 2023-08-26 11:06:48 -04:00
MagicBot 1cdaa58e7a Wall archers set to static grid type. 2023-08-26 10:11:13 -04:00
MagicBot fa3aa24a3d Update to minion building/location mechanic. 2023-08-26 09:41:58 -04:00
MagicBot 091431d95b Dynamic set in all constructors. 2023-08-26 09:31:10 -04:00
MagicBot 1ecf0122ab Unused variable removed. 2023-08-26 09:29:12 -04:00
MagicBot 79980a1725 NoID constructor removed. 2023-08-26 06:45:34 -04:00
MagicBot 8badcc3f6e Refactored out redundant stat-xyz variables. 2023-08-26 06:24:05 -04:00
MagicBot 4d6e57257c Unused methods removed. 2023-08-26 06:19:03 -04:00
MagicBot a7a93b8500 Tweak to bindloc for minions. 2023-08-25 17:05:46 -04:00
MagicBot 85cc34fb4c AIinfo updated. 2023-08-25 16:57:25 -04:00
MagicBot 772a996b6e Tweak to behavior type setup. 2023-08-25 16:49:26 -04:00
MagicBot e67eff822d Propagate guardedCity. 2023-08-25 16:44:45 -04:00
MagicBot c39ed6120f Cleanup of bind/loc logic. 2023-08-25 16:19:04 -04:00
MagicBot c38f4e6543 Mask only needs be set once. 2023-08-25 16:01:18 -04:00
MagicBot 098433b697 Needs contract null check 2023-08-25 15:46:09 -04:00
MagicBot c8e20c905b Add to cache before setloc 2023-08-25 15:37:02 -04:00
MagicBot bd2446ba0a Minion uuid set pre configure 2023-08-25 15:34:47 -04:00
MagicBot c179e4aaf3 Don't override level or name for minions. 2023-08-25 15:29:42 -04:00
MagicBot 2f8de2a919 Worthless collection only used in 2 places. 2023-08-25 15:23:02 -04:00
MagicBot 338110973d Mobbase cannot be null. 2023-08-25 15:19:25 -04:00
MagicBot 3c9c4495bc playerGuard = true. 2023-08-25 15:14:33 -04:00
MagicBot 93476f782c Bind loc not overwritten. 2023-08-25 15:03:37 -04:00
MagicBot 3aec6ee578 More minion setup work. 2023-08-25 14:45:47 -04:00
MagicBot 3bca76d4c8 Setloc to spawn minion. 2023-08-25 14:38:09 -04:00
MagicBot b9d6f35aac Unused variable. 2023-08-25 14:35:02 -04:00
MagicBot 9b6959414a More flushing out minion support. 2023-08-25 14:33:43 -04:00
MagicBot 400dd6aa5e More granular error reporting. 2023-08-25 14:08:43 -04:00
MagicBot 14af2f6efd Minion spawning re-enabled for refactoring. 2023-08-25 14:01:47 -04:00
MagicBot 0a2de9e0d5 Contract handling cleanup. 2023-08-25 13:41:22 -04:00
MagicBot 89bfad78a6 Contract handling cleanup. 2023-08-25 13:31:56 -04:00
MagicBot 52486fa278 Contract handling cleanup. 2023-08-25 13:24:07 -04:00
MagicBot dc0e14eb21 AI added earlier in sequence for availability. 2023-08-25 13:07:47 -04:00
MagicBot 70278374e7 manager init moved to the top of method. 2023-08-25 12:57:21 -04:00
MagicBot ac3588c76a manager init moved to the top of method. 2023-08-25 12:54:03 -04:00
MagicBot ab335aef2a Enums are fragile. 2023-08-25 12:32:36 -04:00
MagicBot 719c855bdb Cleanup of inventoryManager usage. 2023-08-25 12:27:58 -04:00
MagicBot f283e50018 Disabled minions for now. 2023-08-25 12:18:36 -04:00
MagicBot 99b952ee28 Refactor towards new constructor. 2023-08-25 12:12:54 -04:00
MagicBot 24639b62c0 Refactor towards new constructor. 2023-08-25 12:11:50 -04:00
MagicBot 573cc531bf Refactor towards new constructor. 2023-08-25 11:59:59 -04:00
MagicBot 29e24bae93 Unused constructor removed. 2023-08-25 11:37:56 -04:00
MagicBot 22e4cc07c0 Separate pet and siege behaviour types. 2023-08-25 11:26:09 -04:00
MagicBot 9264347698 Minions inherit enemy/notenemy from captain. 2023-08-25 11:24:15 -04:00
MagicBot 579c26ac59 InitializeMob removed. 2023-08-23 13:19:57 -04:00
MagicBot ef577dd313 Removed catch to propagate error. 2023-08-23 13:03:59 -04:00
MagicBot 62c7e52487 Starting to whittle away at initmob method. 2023-08-23 13:01:36 -04:00
MagicBot 3534ac6477 Starting to whittle away at initmob method. 2023-08-23 12:48:34 -04:00
MagicBot 1738f7b311 Starting to whittle away at initmob method. 2023-08-23 12:38:46 -04:00
MagicBot eb25caec81 Object creation moved out of rs const. 2023-08-23 12:24:43 -04:00
MagicBot a6c60e2c04 Merge remote-tracking branch 'origin/master' into mobile-cleanup 2023-08-22 07:50:46 -04:00
FatBoy e5fba340fb guard minion AI restored to follow captain attack commands 2023-08-21 20:24:49 -05:00
FatBoy ea2241732a fixed bug where pet persisted through dismissal 2023-08-21 20:02:26 -05:00
FatBoy 2b83db7bba moved initial loadInventory call to runAfterLoad 2023-08-21 19:48:44 -05:00
FatBoy f636f4d2ec optimized equipment dropping system 2023-08-21 19:36:46 -05:00
FatBoy 8fb6c43c66 alternative loot drop limitation 2023-08-21 19:21:50 -05:00
MagicBot adafbdf6d3 Duplicate building and building ID values. 2023-08-21 17:20:57 -04:00
MagicBot 7eab14938d Exception for siege when slotting. 2023-08-21 17:11:20 -04:00
MagicBot 039e55673b Exception for siege when slotting. 2023-08-21 17:00:27 -04:00
MagicBot ec3a9b6cb4 Minions don't have contracts. 2023-08-21 16:50:15 -04:00
MagicBot 17a6494b2b Unused code. 2023-08-21 16:41:21 -04:00
MagicBot 0b05c7074f Slot all agents but true mobiles. 2023-08-21 16:37:52 -04:00
MagicBot 876ccc7cbf New constructor created. 2023-08-21 16:12:06 -04:00
MagicBot bdf14b8f24 Ordinal comparisons refactored. 2023-08-21 15:37:21 -04:00
MagicBot 43375a6f5b Only mobiles with contracts can be slotted. 2023-08-21 15:22:08 -04:00
MagicBot e00328ae13 Siege pets use slotting mechanic. 2023-08-21 15:09:10 -04:00
MagicBot 07c553294b Mobiles use new slotting mechanic. 2023-08-21 15:04:32 -04:00
MagicBot e331f7e2ff Unused methods removed. 2023-08-21 14:26:50 -04:00
MagicBot b8217a8858 Remove unused variable from signature. 2023-08-21 14:11:22 -04:00
MagicBot 50f81396c7 Cleanup of PERSIST db call. 2023-08-21 14:01:28 -04:00
MagicBot 0bca57686d New npc creation work. 2023-08-21 14:00:00 -04:00
MagicBot df6b9e48d3 New npc creation work. 2023-08-21 13:47:47 -04:00
MagicBot 291cb97a22 New npc creation work. 2023-08-21 13:34:42 -04:00
MagicBot 740e75f8e4 New less ungodly NPC constructor. 2023-08-21 13:26:13 -04:00
MagicBot b7bbf8d369 Interest manager updates when moving 64 units. 2023-08-21 05:02:49 -04:00
MagicBot abf450d6ea Use character load range for dirty flag. 2023-08-21 04:52:02 -04:00
MagicBot 9072fc2788 Lock for dirtyload integration. 2023-08-21 04:40:11 -04:00
MagicBot 14968dbb3b Unused variables removed. 2023-08-21 04:21:28 -04:00
MagicBot c79d9ae891 Unused lastXYZ timers set but never used. 2023-08-21 04:19:20 -04:00
MagicBot dbca131a0f Set dirty out to load range. 2023-08-20 20:38:44 -04:00
MagicBot 621d78172d Threadsafe is needed for the flag. 2023-08-20 20:37:24 -04:00
MagicBot 50e962b77e dirtyFlag integration. 2023-08-20 20:14:28 -04:00
MagicBot 07aeb6e58d dirtyFlag integration. 2023-08-20 20:02:16 -04:00
MagicBot f6e2c6c618 dirtyFlag integration. 2023-08-20 19:35:18 -04:00
MagicBot 44b5b98597 dirtyFlag integration. 2023-08-20 19:20:22 -04:00
MagicBot ca21c3d266 dirtyFlag integration. 2023-08-20 19:07:26 -04:00
MagicBot c1f613a1a5 Flag set to true when created. 2023-08-20 18:57:22 -04:00
MagicBot 6923251a88 dirtyflag chosen as solution. 2023-08-20 18:56:09 -04:00
MagicBot 8222cb8530 Remove distance early exit. 2023-08-20 18:29:44 -04:00
MagicBot 0eae76180b Update state of npc. 2023-08-20 17:23:50 -04:00
MagicBot f0cfb69752 Update state of npc. 2023-08-20 17:16:18 -04:00
MagicBot 2e7d2b5bcf Update state of npc. 2023-08-20 17:12:20 -04:00
MagicBot 09b346dcb2 Update state of npc. 2023-08-20 17:01:58 -04:00
MagicBot 46d07b386b Update state of npc. 2023-08-20 16:55:15 -04:00
MagicBot b21e9dc59e Moving items out of constructor. 2023-08-20 16:38:10 -04:00
MagicBot 2c9fc405e9 More unused junk removed. 2023-08-20 16:28:21 -04:00
MagicBot a0a3d34578 Unused lock removed. 2023-08-20 16:25:44 -04:00
MagicBot 8ba4ed20c8 loc set to bindloc after npc returned. 2023-08-20 16:18:51 -04:00
MagicBot 5e474851a8 bugfix: Setting loc before loc is defined in abstract constructor. 2023-08-20 16:00:08 -04:00
MagicBot c69e68cb27 Npc name override moved to runafterload. 2023-08-20 15:37:11 -04:00
MagicBot 2d0116a9d9 inLined single line methods for code clarity. 2023-08-20 15:26:24 -04:00
MagicBot bed99dce62 aiAgentType enumeration defined. 2023-08-20 15:10:31 -04:00
MagicBot e4283c2444 Unused orphan npc collection removed. 2023-08-20 14:40:12 -04:00
MagicBot 407f5d1f71 Init code for instance variables moved to runafterload. 2023-08-19 16:33:17 -04:00
MagicBot 86e4ee4aa9 Debugging. 2023-08-19 16:18:49 -04:00
MagicBot 0d7e69f772 Early exit for npc guild owners. 2023-08-19 16:07:11 -04:00
MagicBot 4d0980d13e Early exit for npc guild owners. 2023-08-19 16:04:46 -04:00
MagicBot 9239bc1400 bug fix in old constructor 2023-08-19 15:58:25 -04:00
MagicBot f1958453c1 bug fix in old constructor 2023-08-19 15:49:00 -04:00
MagicBot 9adb03a845 Code moved to runafterload. 2023-08-19 15:30:35 -04:00
MagicBot 4d48712470 Method to centralize slotting of abschar. 2023-08-19 15:22:43 -04:00
FatBoy f1d31948e8 0 skill weapons don't roll anymore 2023-08-19 11:39:01 -05:00
MagicBot c79b304eeb Revert debug temporal change to minion spawn. 2023-08-19 11:53:38 -04:00
MagicBot c1a14a22e8 bugfix: wrong type comparison. 2023-08-18 13:08:05 -04:00
MagicBot 2f6e334eea Last debug cycle in testing. 2023-08-18 13:01:58 -04:00
MagicBot 105d8135f7 Tweak to siege minion slot assignments. 2023-08-18 12:32:31 -04:00
MagicBot d7c3f2a6ce Newbie Island excluded from server drop rates. Newbie tables having a baseline roll of 44. 2023-08-18 12:00:28 -04:00
MagicBot 68f2bcef0e Siege Minion pawn time reset to nominal 15m. Soft code? 2023-08-18 11:52:31 -04:00
MagicBot 3883963225 Unused and duplicate variable removed. 2023-08-18 11:33:27 -04:00
MagicBot b3bed58a4b Tweak to minion slot calculus. 2023-08-18 11:06:48 -04:00
MagicBot c4cc6bb92d Rotation conforms with bootstrap version. 2023-08-18 10:58:06 -04:00
MagicBot 62a6cd4430 Siege mob slot position properly rotated. 2023-08-18 10:52:36 -04:00
MagicBot 3e7b4cf30c Siege mob slot position properly rotated. 2023-08-18 10:43:59 -04:00
MagicBot bf24573e88 Codepath conforms to bootstrap copy of the 5 copies. 2023-08-18 10:31:13 -04:00
MagicBot 0d72798680 Spawn temporal adjustment for debugging siege mobs. 2023-08-18 10:23:30 -04:00
MagicBot 04fd91ff7d Bugfix: suffix was set as prefix. 2023-08-17 17:53:31 -04:00
MagicBot 0acd8cd939 Initialize variable before building string. 2023-08-16 15:31:17 -04:00
MagicBot 03f17adecf Update to string deserialization. 2023-08-16 15:24:30 -04:00
MagicBot 5ccf833981 Casting cleanup in constructor signature. 2023-08-16 15:04:52 -04:00
MagicBot 5084b3e453 Petitions limited to 255 characters. 2023-08-16 14:41:45 -04:00
MagicBot c95e6a2ac0 We don't serialize PETITION_NEW to the client. 2023-08-16 14:32:24 -04:00
MagicBot d3ffe9140a Unused method removed. 2023-08-16 11:42:49 -04:00
MagicBot 13fb532902 Bugfix for vendor window with no items. 2023-08-16 11:16:24 -04:00
MagicBot 7a5dde7100 Modified GenTable.rollTable() interface to support drop rates natively. 2023-08-16 08:29:29 -04:00
MagicBot e3f468681a Cleaner rank filter on display 2023-08-15 15:25:50 -04:00
MagicBot 27defa21c2 Should not be filtering items in production. 2023-08-15 15:17:12 -04:00
MagicBot f4e9896dbc Unused variable removal. 2023-08-15 09:14:19 -04:00
MagicBot b8a5521430 No need to box this int. 2023-08-15 09:09:59 -04:00
MagicBot ca39ebb9d4 More class cleanup. 2023-08-15 09:07:55 -04:00
MagicBot 010988d0c1 Class cleanup resulting in far smaller message. 2023-08-15 09:06:36 -04:00
MagicBot e09a6ccd88 File reformat. 2023-08-15 08:52:49 -04:00
MagicBot c913618dc3 Method made static and moved to manager. 2023-08-15 08:50:02 -04:00
MagicBot 6d3050f08a Add constants for message action type. 2023-08-14 16:11:26 -04:00
MagicBot b53c1b20d9 Add constants for message action type. 2023-08-14 16:09:06 -04:00
MagicBot f67444a9ea Cancel petition support 2023-08-14 15:56:47 -04:00
MagicBot 36be6f3620 Merge remote-tracking branch 'origin/master' into feature-petition 2023-08-14 15:43:11 -04:00
MagicBot cf78e6c2a4 Petition window work. 2023-08-14 15:42:05 -04:00
MagicBot bcf789030e Bounce back message 2023-08-14 14:42:32 -04:00
MagicBot 1eaec16ca3 Class cleanup. 2023-08-14 14:34:26 -04:00
MagicBot 6e3dd55804 Class cleanup. 2023-08-14 14:33:19 -04:00
MagicBot 41297e5a21 Sql column name update. 2023-08-14 14:08:39 -04:00
MagicBot cb215b536c Sql column name update. 2023-08-14 14:00:09 -04:00
MagicBot d82c157ae4 Petition db update including table creation. 2023-08-14 13:55:26 -04:00
MagicBot 602fc77ff9 Petition db update including table creation. 2023-08-14 13:53:37 -04:00
MagicBot de71e250e8 Petition db update including table creation. 2023-08-14 13:48:33 -04:00
MagicBot cacceba502 Petition db update including table creation. 2023-08-14 13:46:11 -04:00
MagicBot 054f9ea08a Petition db update including table creation. 2023-08-14 13:43:52 -04:00
MagicBot 7aa63a65b6 Petition db update including table creation. 2023-08-14 13:40:27 -04:00
MagicBot 82ad774093 Bugfix in sql statement. 2023-08-14 12:56:23 -04:00
MagicBot 4342fe9819 Enum defined and database work started. 2023-08-14 12:50:50 -04:00
MagicBot 68feae4111 Enum defined and database work started. 2023-08-14 12:49:10 -04:00
MagicBot 231d8810c8 Enum defined and database work started. 2023-08-14 12:48:05 -04:00
FatBoy e2add187fd database petition logging system 2023-08-13 18:06:45 -05:00
FatBoy fd9fe8967c investigate serialization of petition message 2023-08-13 16:01:20 -05:00
FatBoy cbba05687d add handler ot petition super 2023-08-13 15:45:11 -05:00
FatBoy 480e0c69da remove case for petition form message pump 2023-08-13 15:35:47 -05:00
FatBoy 490a1bd8e5 structure for petition received handler 2023-08-13 13:45:07 -05:00
MagicBot 1ecf1d4bc2 Merge remote-tracking branch 'origin/feature-branch-branch' into bugfix-marksmanship 2023-08-13 10:34:02 -04:00
MagicBot d21921cb6d Typo in command string. 2023-08-13 09:44:28 -04:00
MagicBot 04534e2ca6 Current repo branch reported during bootstrap. 2023-08-13 09:43:06 -04:00
MagicBot 4cd180141c Read current repo branch using MB Devops script. 2023-08-13 09:39:16 -04:00
MagicBot 895b87ae05 Class cleanup. Formatting, squiggles and unused code/variables. 2023-08-13 08:16:02 -04:00
MagicBot 1c9b7594d3 Class cleanup. Formatting, squiggles and unused code/variables. 2023-08-13 08:13:27 -04:00
FatBoy 58fe2d93b7 weapon range bonus works again 2023-08-12 19:58:27 -05:00
FatBoy a278f8bc79 range bonus confined to 1 spot 2023-08-12 19:41:44 -05:00
FatBoy 8c287154c8 players to use marksmanship again 2023-08-12 19:07:50 -05:00
MagicBot 962ad4277a Unnecessary cast removed. 2023-08-12 07:46:24 -04:00
MagicBot a7495bf942 Bugfix: R8 slot locations. 2023-08-12 06:16:12 -04:00
MagicBot 1ee80f9697 Bugfix in console port output. 2023-08-11 09:44:16 -04:00
MagicBot 9f541813ef Merge remote-tracking branch 'origin/master' into bugfix-gold-healing 2023-08-11 08:27:19 -04:00
MagicBot 9a12c9b044 Bugfix in character deletion. 2023-08-11 08:20:01 -04:00
MagicBot 049562af5c Typo in help string fixed. 2023-08-11 07:47:23 -04:00
FatBoy 89681cbe3e non-active mines can be fixed by gold 2023-08-10 19:43:37 -05:00
MagicBot bafb48fe14 Merge remote-tracking branch 'origin/feature-gambler' into bugfix-mob-casting 2023-08-09 18:31:51 -04:00
MagicBot 015e6301fb ErrorPopup for fate peddler encumbrance. 2023-08-09 17:58:11 -04:00
MagicBot 1efb9daff8 ErrorPopup for fate peddler encumbrance. 2023-08-09 17:52:39 -04:00
FatBoy 8747890e5e fate peddler work 2023-08-09 15:50:56 -05:00
MagicBot 41c56c150a Version update to 1.5.1 2023-08-09 16:03:53 -04:00
FatBoy 7c931e87a4 fate peddler work 2023-08-09 14:53:05 -05:00
FatBoy 39e0059f28 Merge remote-tracking branch 'origin/bugfix-mob-casting' into feature-gambler 2023-08-09 14:48:48 -05:00
FatBoy 1b77eeabc0 fate peddler work 2023-08-09 14:48:22 -05:00
MagicBot 7ce664458f Server requires a min of 15 database connections to boot. 2023-08-09 08:57:50 -04:00
MagicBot db2e9a282a Only one piece of equip drops at a time. 2023-08-09 08:17:53 -04:00
MagicBot 32b5dd3f66 Bugfix: suffix overwrites prefix. 2023-08-09 07:39:10 -04:00
FatBoy d53bf0f66e fate peddler work 2023-08-08 20:37:31 -05:00
FatBoy 04fcdd2545 disable anniversary gift 2023-08-08 19:43:51 -05:00
FatBoy 5702810108 fate peddler work 2023-08-08 19:37:42 -05:00
FatBoy 47eb4cd536 fate peddler conversion of LootManager methods 2023-08-08 19:32:39 -05:00
FatBoy 626c17f100 Merge branch 'bugfix-mob-casting' into feature-fatePeddler 2023-08-08 19:25:50 -05:00
MagicBot 64ca876920 CanAggro check added to guard logic. 2023-08-08 19:08:51 -04:00
MagicBot b96b222327 Booty moved to LootManager 2023-08-08 18:30:21 -04:00
MagicBot d04ee197d9 Schema change to reflect new package. 2023-08-08 18:25:40 -04:00
FatBoy 9805ee8044 Random to utilize max + 1 2023-08-08 15:43:24 -05:00
FatBoy 0e78902ff6 ranged mobs attack at range again 2023-08-08 14:22:49 -05:00
FatBoy 923447e983 infinite loop fix 2023-08-08 13:36:46 -05:00
FatBoy e88e8b56c6 mobs only toggle combat mode when changing combat target 2023-08-08 12:49:25 -05:00
FatBoy 6e255d9c75 guards hate value change target 2023-08-08 11:51:04 -05:00
FatBoy 59c976c073 guards use hate value 2023-08-08 11:45:42 -05:00
FatBoy 49c403bacc aiInfo display hate value 2023-08-08 11:43:27 -05:00
FatBoy f852037a61 guard minion aggro fixed 2023-08-08 11:30:19 -05:00
MagicBot 9f0fb26e1f Need to preserver order of hashmap insertion. 2023-08-08 12:24:27 -04:00
FatBoy 564968a1e3 scaling guard powers based on rank 2023-08-08 11:07:41 -05:00
FatBoy c8b91fc264 aggro raneg configurable 2023-08-08 10:56:33 -05:00
FatBoy ec43c54aff mob cast delay cached 2023-08-08 10:54:36 -05:00
MagicBot 2ce13ac463 typo in sql 2023-08-08 11:24:13 -04:00
MagicBot 1cc8d2919a DD is last element in contract power list. 2023-08-08 11:19:18 -04:00
MagicBot 35dc1239f8 Record sort ASC is required. 2023-08-08 11:12:32 -04:00
MagicBot 31122cf6d3 AIinfo updated with token list. 2023-08-08 11:01:05 -04:00
MagicBot 434078cebf Power loading work. 2023-08-08 10:44:26 -04:00
MagicBot 1fb2d8cadf Power loading work. 2023-08-08 10:39:19 -04:00
MagicBot fbf865e865 Methods moved to new dbPowersHandler. 2023-08-08 10:32:20 -04:00
MagicBot 0b1df09f3a Refactor of mob powers loading for efficiency. 2023-08-08 10:30:20 -04:00
MagicBot 2e6ebbb9c3 Refactor of mob powers loading for efficiency. 2023-08-08 10:29:01 -04:00
MagicBot 071eb26e48 Powers also loaded from contract. 2023-08-08 08:31:11 -04:00
MagicBot 2a75ab4581 Merge remote-tracking branch 'origin/post-loot-cleanup' into bugfix-mob-casting 2023-08-08 08:07:41 -04:00
FatBoy 6c255323fb vendors now require ranks to roll high tier items 2023-08-07 22:06:45 -05:00
MagicBot a392c5213c Method cleanup. 2023-08-07 15:52:50 -04:00
MagicBot e382ba2b9a Always at least one stat rolled. 2023-08-07 15:00:18 -04:00
MagicBot 557292a56d Removed unused code. 2023-08-07 14:31:33 -04:00
MagicBot 339b6c5025 Using LootManager for forge scaling. 2023-08-07 13:55:22 -04:00
MagicBot b05c4a91e5 Using LootManager for forge scaling. 2023-08-07 13:53:16 -04:00
MagicBot a5ab912ffa Method for adjusted table rolls based on mpc level. 2023-08-07 13:36:16 -04:00
MagicBot b84be6eea8 Last vestiges of old loot system removed. 2023-08-07 12:12:52 -04:00
MagicBot 71875059b6 Update table names for new convention. 2023-08-07 10:52:37 -04:00
MagicBot 6e814c1dcd Refactor to install new loot tables. 2023-08-07 10:17:50 -04:00
MagicBot 985b327b69 Refactor to install new loot tables. 2023-08-07 10:16:30 -04:00
MagicBot 8a5924eeee rollTable() method added to loot classes. 2023-08-07 09:42:40 -04:00
MagicBot 2e59f7f01c Garbage Peddler method removed. 2023-08-07 09:03:38 -04:00
MagicBot f7fd544a00 _modtypeTables populated at startup. 2023-08-07 08:58:44 -04:00
MagicBot 8c4d9b66ef _modTables populated at startup. 2023-08-07 08:49:43 -04:00
MagicBot 32d71df837 _itemTables populated at startup. 2023-08-07 08:39:08 -04:00
MagicBot efe7784a3f _itemTableEntry created.
Class init cleaned up.
2023-08-07 08:22:37 -04:00
FatBoy a5af696806 guard powers 2023-08-06 19:44:20 -05:00
FatBoy 23783ec7cd spacing cleanup 2023-08-06 17:54:01 -05:00
FatBoy 0d2ea32dbd guards nuke more than they debuff 2023-08-06 17:42:24 -05:00
FatBoy 915f93dc2d safe guards dont aggro pets 2023-08-06 17:11:22 -05:00
MagicBot 8f71c8af01 _genTables populated. 2023-08-06 18:09:34 -04:00
MagicBot 6acc422345 _genTables populated. 2023-08-06 18:08:31 -04:00
FatBoy dde98c7c58 guard casting work 2023-08-06 17:07:25 -05:00
MagicBot dd756d4c00 _genTables populated. 2023-08-06 18:00:45 -04:00
MagicBot 0013020bfa New consolidated loot db handler.
Booty loading moved into new handler.
2023-08-06 17:47:49 -04:00
MagicBot 14e7b0395c New _genTables collection defined. 2023-08-06 17:44:30 -04:00
MagicBot f8b09b5f33 Class moved to loot package. 2023-08-06 14:04:06 -04:00
MagicBot a3a2b01ec4 Method moved to manager class. 2023-08-06 08:36:16 -04:00
MagicBot f0503aa63b Junk code removal. 2023-08-06 08:17:15 -04:00
MagicBot ff7e1ae8c1 Junk code removal. 2023-08-06 07:59:27 -04:00
MagicBot e424441380 Booty loot table is a gentable entry. 2023-08-06 07:53:33 -04:00
MagicBot 67bcb9aeea Refactor lootTable/itemtable for client alignment. 2023-08-06 07:21:49 -04:00
FatBoy 345a866f50 mele guards dont cast 2023-08-06 00:07:01 -05:00
FatBoy 5d1ccc437c mele guards dont cast 2023-08-06 00:04:42 -05:00
FatBoy d221daa864 guard power work 2023-08-05 23:38:24 -05:00
FatBoy a79562de01 random extra spell cooldown to stagger 2023-08-05 23:23:27 -05:00
FatBoy c4af45b9e5 guard casting system 2023-08-05 23:10:06 -05:00
FatBoy 2aabafdab8 fixed mob cast effect 2023-08-05 22:54:41 -05:00
FatBoy 2b4b79e339 updated naming convention of variables to conform to client data 2023-08-05 22:38:33 -05:00
MagicBot 0337ac7758 Gold drop rate display fix. 2023-08-05 20:11:07 -04:00
MagicBot e1f96a009b Display effective drop rate. 2023-08-05 19:46:29 -04:00
MagicBot 81fe6c4e2a Removed integer input. 2023-08-05 19:42:26 -04:00
MagicBot cc9b5a93ee Header added to new files. 2023-08-05 19:28:53 -04:00
MagicBot 51dfc3a56b Hotzone affects base rate. 2023-08-05 19:23:58 -04:00
MagicBot 98b9567302 Hotzone table only ran once. 2023-08-05 18:49:48 -04:00
MagicBot 820eeaee72 Bootysim displays chance. 2023-08-05 18:42:43 -04:00
MagicBot 258bda22da Bootysim displays chance. 2023-08-05 18:39:17 -04:00
MagicBot 15a167905c Config drop rates modify chance. 2023-08-05 17:46:34 -04:00
MagicBot a2c6b919d4 Table refactor to conform with sb. 2023-08-05 10:48:21 -04:00
MagicBot 42069fe170 Table refactor to conform with sb. 2023-08-05 10:38:21 -04:00
MagicBot a7abe6c4c5 Table refactor to conform with sb. 2023-08-05 10:28:32 -04:00
MagicBot 0568dc0771 Table refactor to conform with sb. 2023-08-05 10:17:37 -04:00
MagicBot 1c5d1cef70 Table refactor to conform with sb. 2023-08-05 10:11:31 -04:00
MagicBot 5970d6d716 Cleanup of random usage. 2023-08-05 09:39:16 -04:00
MagicBot 0d9ab6c6fd Testing pure unmodified booty entries. 2023-08-05 08:47:48 -04:00
FatBoy 516fa59068 NPCs will now buy items based on how much durability is on the item 2023-08-04 20:03:31 -05:00
FatBoy 64aef11c56 mob equipment takes damage upon death 2023-08-04 19:47:21 -05:00
FatBoy 17f099386a enchanted and non enchanted items show up correctly as "unidentified" 2023-08-04 19:27:49 -05:00
FatBoy 91842add6d item identification defaults work 2023-08-04 19:14:40 -05:00
FatBoy 4a0a00ed95 removed custom "chance" for prefix and suffix 2023-08-04 19:06:48 -05:00
MagicBot 068d9cd719 Signature update in loot generation. 2023-08-04 14:01:12 -04:00
MagicBot ae8eef640b Formatting cleanup. 2023-08-04 13:25:13 -04:00
MagicBot 8fad2780c1 multiplier not used for item drops. 2023-08-04 13:16:44 -04:00
MagicBot 8b1fb98b09 Drop rate not used for equipment drops. 2023-08-04 13:09:09 -04:00
MagicBot 2cbb112f09 Drop rate not used for equipment drops. 2023-08-04 13:04:57 -04:00
MagicBot c5c323a316 Rework of drop rate usage. 2023-08-04 12:23:55 -04:00
MagicBot 7ac78df913 Rework of drop rate usage. 2023-08-04 12:21:22 -04:00
MagicBot 5e01fe97ac Removed pre-Booty roll from Loot Drops.
Renamed methods for clarity.
2023-08-04 10:14:45 -04:00
MagicBot bf29e5868e Merge branch 'feature-hotzone-rolls' of http://repo.magicbane.com/MagicBane/Server into feature-hotzone-rolls
 Conflicts:
	src/engine/gameManager/LootManager.java
2023-08-04 10:11:19 -04:00
MagicBot 31e32cfcf4 Removed initial bootySet roll. 2023-08-04 10:10:19 -04:00
FatBoy ef7d75ba9b min roll increased to 70 2023-08-03 21:07:07 -05:00
FatBoy c514cad1d9 no enchant item identification 2023-08-03 20:44:25 -05:00
FatBoy f79ac6f836 revert min roll change 2023-08-03 20:29:13 -05:00
FatBoy b9f939c8b2 identify loot without prefix or suffix 2023-08-03 20:26:44 -05:00
FatBoy 060e9f330c fix for base value check 2023-08-03 20:06:47 -05:00
FatBoy d903bc767c fix wrong display for hotzone lot table in simulatebooty 2023-08-03 19:59:20 -05:00
FatBoy 42967693d0 autoID if value = baseValue 2023-08-03 19:56:32 -05:00
FatBoy 92cb741822 equipment drops added to simulate booty command 2023-08-03 19:34:42 -05:00
FatBoy 32653216e9 added hotzone tables to simulate booty command 2023-08-03 19:27:48 -05:00
FatBoy 9a03dc36c6 add goldTally to simulateBooty command 2023-08-03 19:24:35 -05:00
FatBoy 0e35eea036 hotzone slightly increase mob min roll 2023-08-03 19:21:35 -05:00
FatBoy a09ce6b4fc cleanup and lots of null checks 2023-08-03 19:18:05 -05:00
MagicBot 765b837df0 Unused methods deleted. 2023-08-03 15:20:31 -04:00
MagicBot fda3386e7b Multiple inner classes extracted from LootManager. 2023-08-03 09:43:30 -04:00
MagicBot 0bb756521b Update console Lootmanager bootstrap message. 2023-08-03 09:09:23 -04:00
MagicBot 95a9e45391 Caching of drop rates within LootManager 2023-08-03 09:04:20 -04:00
MagicBot 4e01c8e794 Moved manager class to manager package 2023-08-03 08:27:08 -04:00
MagicBot 1df78ec1fc Merge remote-tracking branch 'origin/master' into feature-hotzone-rolls 2023-08-03 08:23:24 -04:00
FatBoy 7cdcc3d23d cleanup 2023-08-02 20:09:17 -05:00
FatBoy 66b047d091 cleanup 2023-08-02 20:09:07 -05:00
FatBoy 75f54ae562 normal loot and hotzone loot test 2023-08-02 20:06:46 -05:00
FatBoy 500763fd11 cleanup 2023-08-02 20:01:46 -05:00
FatBoy ae8ead825d error catch for prefix and suffix generation 2023-08-02 19:57:32 -05:00
FatBoy 86e8fe19d4 removed unused method parameter 2023-08-02 19:49:34 -05:00
FatBoy a9af791d02 removed unused import 2023-08-02 19:48:50 -05:00
FatBoy 5ad9112448 incoroporate gold rate, method cleanup 2023-08-02 19:45:18 -05:00
MagicBot 090d3b4372 New config entry added for server gold rates. 2023-08-02 17:44:22 -04:00
MagicBot c3bcdd544e Class formatting cleanup. 2023-08-02 09:12:13 -04:00
MagicBot dea9d93e5b Class formatting cleanup. 2023-08-02 09:10:51 -04:00
MagicBot a299493bd7 Cleanup of file project headers. 2023-08-02 08:18:50 -04:00
MagicBot 350a1208f5 Try-catch surrounding respawn code. 2023-08-02 08:07:41 -04:00
FatBoy b8cb90cdd0 mob pulse delay added to mobAI 2023-08-01 21:26:14 -05:00
FatBoy b47848d63d mob drop combat targets no longer in game 2023-08-01 20:32:02 -05:00
FatBoy 140a9bd084 mob AI new thread 2023-08-01 20:13:23 -05:00
FatBoy 5e0b4ad763 respawn while loop addition 2023-08-01 19:50:52 -05:00
FatBoy 370efe1092 forget about that 2023-08-01 19:27:46 -05:00
FatBoy 50cd9b32db rename comment in WorldServer for mob respawn thread 2023-08-01 19:21:11 -05:00
FatBoy 7f1e537975 mob respawning handled in its own thread 2023-08-01 19:19:39 -05:00
FatBoy cdd074c0ae respawn que null check 2023-08-01 18:56:56 -05:00
FatBoy bab033be2d mobAI error tracing 2023-08-01 18:52:44 -05:00
FatBoy 1b6dcd4da0 AuditAI command implemented and functions 2023-08-01 17:53:45 -05:00
FatBoy 7cc5e0cf5c timestamp to console after each completed iteration of MobileFSMManager 2023-08-01 17:22:34 -05:00
FatBoy 685dd948e2 asset placement validation to use city location not players location 2023-07-31 21:55:20 -05:00
FatBoy 93359ae147 hotzone roll tweaks 2023-07-31 21:28:41 -05:00
FatBoy 48817d7ecb hotzone roll tweaks 2023-07-31 20:42:56 -05:00
FatBoy 38339eae3f hotzone roll tweaks 2023-07-31 19:20:41 -05:00
MagicBot 140ec1b08d Hotfix: Removing extra glass roll. 2023-07-31 14:00:37 -04:00
MagicBot be7156e6f6 Merge remote-tracking branch 'origin/bugfix-ITEM-chance' 2023-07-31 05:14:37 -04:00
FatBoy be84b85b69 fixed insane glass drops 2023-07-30 19:52:11 -05:00
MagicBot 0a36d2786c Merge remote-tracking branch 'origin/bugfix-ITEM-chance' 2023-07-30 17:06:21 -04:00
FatBoy e0f62c0a9b ITEM loot uses chance to drop 2023-07-30 16:05:21 -05:00
FatBoy f5375bca26 ITEM loot uses chance to drop 2023-07-30 15:57:01 -05:00
MagicBot f03d6da6b2 Merge remote-tracking branch 'origin/cleanup-loot-rewrite' 2023-07-30 15:16:48 -04:00
FatBoy 46bb1cd8e8 tweak roll ranges, fix r8 loot bug 2023-07-30 14:05:28 -05:00
FatBoy c104d9fa00 r8 loot roll work 2023-07-30 13:55:08 -05:00
FatBoy 23af1d252e cleanup loot manager 2023-07-30 11:43:26 -05:00
FatBoy 1e5752736a mine towers can be gold repaired when mine not active 2023-07-29 21:37:36 -05:00
FatBoy 707fc9f756 fixed mob loot crash 2023-07-29 20:57:24 -05:00
FatBoy 4932ee36ea catch code for loot crash 2023-07-29 19:04:59 -05:00
FatBoy 99fc4b8671 fixed HZ loot issue 2023-07-27 23:39:14 -05:00
FatBoy e9913a66a7 fixed mob AI crash 2023-07-27 23:17:41 -05:00
FatBoy 57a38303f8 null pointer evasion 2023-07-27 23:10:00 -05:00
FatBoy b28d31ec44 respawn que work 2023-07-27 22:10:47 -05:00
FatBoy 6e1ed24b30 respawnQues operate per zone 2023-07-27 21:22:20 -05:00
FatBoy adb3436bd7 mobs handle players leaving agroMap 2023-07-27 21:18:52 -05:00
FatBoy c0bac56761 corpse loading early exit changed to despawned instead of alive 2023-07-27 20:39:47 -05:00
FatBoy ff281cc20b respawnQue and corpse loading 2023-07-27 20:32:09 -05:00
FatBoy 6a4ae0af31 created respawnQue for mobs 2023-07-27 20:03:14 -05:00
FatBoy 4ccfd0adce baked in stats items no longer show up as "unidentified" 2023-07-27 19:54:47 -05:00
FatBoy 6d4566b94a mob loot rolling finalized 2023-07-27 19:40:42 -05:00
FatBoy 1fa5019ddb regression formula for min mob loot roll 2023-07-27 19:06:31 -05:00
FatBoy a5fe5ece50 mobs use both enemy and notEnemy lists to determine proper agro 2023-07-25 21:51:30 -05:00
FatBoy 62cc334c66 guards no longer attack guards 2023-07-25 21:42:50 -05:00
FatBoy a9fb7969c7 Merge branch 'bugfix-roll-ranges' into merge-mob-fixes 2023-07-25 21:40:30 -05:00
FatBoy 9f90159ca2 audit respawn timers 2023-07-25 21:35:09 -05:00
FatBoy 055b3d3d66 update location 2023-07-25 21:27:54 -05:00
FatBoy 6761ec7361 remove movement sync 2023-07-25 21:19:17 -05:00
FatBoy 763971acc6 regression calculator usage 2023-07-25 21:07:40 -05:00
FatBoy 74d92aa671 mob max roll audit 2023-07-25 20:59:23 -05:00
MagicBot 43090a9bd1 Support for the widest array of network configurations. Auto-configure as best we can. 2023-07-23 12:58:40 -04:00
MagicBot e57ce5b36e Parmn one not set twice. 2023-07-23 11:34:30 -04:00
MagicBot 6eecf28a64 Logging configured map path. 2023-07-23 08:22:17 -04:00
MagicBot c9f1fcbf51 File structure update. 2023-07-23 08:19:15 -04:00
MagicBot 303ccd05b5 File structure update. 2023-07-23 08:16:36 -04:00
MagicBot d9d905e34a File structure update. 2023-07-23 08:15:39 -04:00
MagicBot 9f906128c4 File structure update. 2023-07-23 08:02:46 -04:00
FatBoy fca9b7dccb cleanup and finalize 2023-07-22 18:58:55 -05:00
FatBoy 48bcf1bd1f removed distance check preventing pets from attacking 2023-07-22 18:47:29 -05:00
FatBoy 3f274b1bf8 region support for teleporting 2023-07-22 13:24:58 -05:00
FatBoy 8a8bf8d2f9 region support for teleporting 2023-07-22 12:44:59 -05:00
MagicBot 53bae6e34f Merge remote-tracking branch 'origin/bugfix-stuck-location' 2023-07-22 13:26:11 -04:00
MagicBot 7f5d5dbad2 Footprint adjusted to match mesh. 2023-07-22 13:07:04 -04:00
MagicBot c06bc97640 Only rotate once 2023-07-22 11:04:32 -04:00
MagicBot 5899bb535b Stuck location rotated properly. 2023-07-22 11:02:03 -04:00
MagicBot bf1271c840 Slot not rotated twice. 2023-07-22 10:44:36 -04:00
MagicBot 8b2a07e860 Unused method removed. 2023-07-22 10:40:54 -04:00
FatBoy 7e25875fa2 mobs respawn, mob location sync, mobs attack 2023-07-22 08:26:55 -05:00
FatBoy a34386ae51 mob resync position on death and while moving 2023-07-21 20:01:39 -05:00
MagicBot 413e782af1 NPC slotting now conforms with bootstrap. 2023-07-21 13:15:24 -04:00
MagicBot ccc9908e1e NPC/Mob slotting work. 2023-07-21 13:08:42 -04:00
MagicBot 90c324b363 NPC/Mob slotting work. 2023-07-21 12:50:52 -04:00
MagicBot 1260d7cfa3 Errant import removed. 2023-07-21 12:00:06 -04:00
MagicBot e15075f57f Merge remote-tracking branch 'origin/debug-pet-stats' 2023-07-20 17:04:26 -04:00
FatBoy 2cf02ba102 fix NPC loading issue 2023-07-19 19:45:13 -05:00
FatBoy 25c02c9960 fix NPC loading issue 2023-07-19 19:43:28 -05:00
FatBoy 7f2c6a24b6 fix NPC loading issue 2023-07-19 19:42:02 -05:00
FatBoy e2272f49d4 fix NPC loading issue 2023-07-19 19:03:06 -05:00
FatBoy aa0067c117 fix for mob sync and ghost mobs 2023-07-19 18:27:10 -05:00
FatBoy 07c64f9b46 hotfix mob roll finalized 2023-07-19 18:05:20 -05:00
FatBoy 4adf0a89fb hotfix mob roll chance 2023-07-19 17:50:03 -05:00
FatBoy 4bd158cc78 hotfix mob roll chance 2023-07-19 17:18:46 -05:00
FatBoy 39ceef99ea hotfix mob roll chance 2023-07-19 17:17:40 -05:00
MagicBot 69d8424cb6 Improved error reporting 2023-07-19 15:43:58 -04:00
FatBoy 3869b3b218 old code cleanup 2023-07-18 20:17:05 -05:00
FatBoy 4fd9a358a6 pets will stop chasing mobs that are no longer a threat to player 2023-07-18 20:09:37 -05:00
FatBoy c9995f3d62 pets defend owner when "assist" toggled 2023-07-18 20:01:58 -05:00
FatBoy 1c7c0ee13e mobs aggro to pets 2023-07-18 19:51:00 -05:00
FatBoy bd48198a51 pets stats calculate properly & pet buffs no longer nerf pet 2023-07-18 19:29:12 -05:00
MagicBot 170312fef8 Placement check set to 876 to accommodate larger zone sizes. 2023-07-18 16:09:41 -04:00
FatBoy 60f02ae34e mob roll tables update 2023-07-17 22:27:55 -05:00
FatBoy 72a0fc458e mob roll tables update 2023-07-17 22:25:54 -05:00
MagicBot 727ccf3b12 ZoneSet DevCmd created. 2023-07-17 04:22:56 -04:00
MagicBot 0cde9de388 Testing Zone set. 2023-07-17 04:06:06 -04:00
MagicBot ea0370ac51 Merge remote-tracking branch 'origin/master' into bugfix-loot-rolls 2023-07-16 14:44:17 -04:00
FatBoy 45fa191ef6 prefix and suffix chances added to mobloot 2023-07-16 11:35:54 -05:00
FatBoy 68e87dabbc prefixes drop on mobloot 2023-07-16 09:53:18 -05:00
FatBoy 428ded8728 roll ranges fixed to allow all items to drop naturally 2023-07-16 09:04:21 -05:00
MagicBot c04a342890 Update to sql for better default mysql.cnf compatibility. 2023-07-16 07:52:10 -04:00
FatBoy c72cda1b73 pets attack buildings 2023-07-15 22:34:09 -05:00
FatBoy 9db568206d pet stats added again 2023-07-15 21:57:27 -05:00
FatBoy 9ea02c888f pet troubles resolved 2023-07-15 18:38:46 -05:00
FatBoy 8720f8f335 loot roll formula adjusted 2023-07-15 17:00:58 -05:00
FatBoy 06c4b7ca3c ghost mob fix 2023-07-15 15:48:11 -05:00
FatBoy 8c1b237720 dead pets removed form seafloor zonemobset 2023-07-15 15:39:57 -05:00
FatBoy 7dc6fece7d work on pet AI 2023-07-15 15:27:22 -05:00
FatBoy e0929a4cbd pets added to seafloor mob set 2023-07-15 14:20:50 -05:00
FatBoy 18bcd79733 pets now spawn at owners location 2023-07-15 14:08:44 -05:00
FatBoy 525facf7b5 remote commit 2023-07-15 13:27:35 -05:00
FatBoy 38317a4ee5 cast chance and cooldown modification for mobs 2023-07-15 08:35:00 -05:00
FatBoy eb9a214ba3 cast chance and cooldown modification for mobs 2023-07-15 08:33:57 -05:00
MagicBot f9870d45fc Merge remote-tracking branch 'origin/magicbot-reg-update' into magicbox1.5
# Conflicts:
#	src/engine/ai/MobileFSM.java
#	src/engine/ai/MobileFSMManager.java
#	src/engine/devcmd/cmds/SetAICmd.java
#	src/engine/gameManager/DevCmdManager.java
2023-07-15 09:27:57 -04:00
MagicBot 9bbdef224d Project cleanup pre merge. 2023-07-15 09:23:48 -04:00
MagicBot 134b651df8 Version requirement updated. 2023-07-15 09:18:51 -04:00
MagicBot 0a15e3e75b Removed leftover discriminator. 2023-07-15 09:12:33 -04:00
FatBoy 9a68509847 Merge branch 'magicbox1.5' of http://repo.magicbane.com/MagicBane/Server into magicbox1.5 2023-07-15 07:59:29 -05:00
FatBoy 9f162e9ed0 last minute cleanup, added cast chance to mobs 2023-07-15 07:59:07 -05:00
MagicBot 003916d393 Parm required when registering. 2023-07-14 14:41:12 -04:00
MagicBot 46d50d315a Unused methods removed. 2023-07-02 07:46:45 -04:00
MagicBot f73aed9d48 Merge remote-tracking branch 'origin/magicbox1.5' into configupdate2 2023-07-01 13:05:23 -04:00
FatBoy 761adca2ef guards no longer recall when player aggro map is empty 2023-06-30 21:02:51 -05:00
FatBoy b32705ce56 mob casting will now check for and properly check against hit roll requirements 2023-06-30 20:33:41 -05:00
MagicBot 4dc40f4df4 Back to offset until city cleanup. 2023-06-27 18:21:26 -04:00
MagicBot 4b49777eb2 Simplify logic. 2023-06-27 18:01:59 -04:00
MagicBot cb25333dc3 SDR binds at banestone 2023-06-27 17:35:33 -04:00
MagicBot 34e4aa1963 SDR binds at banestone 2023-06-27 17:34:25 -04:00
MagicBot 7810ea6baf SDR binds at banestone 2023-06-27 17:30:13 -04:00
MagicBot 89399e9f93 bugfix: case issue 2023-06-27 16:55:09 -04:00
MagicBot d08316d6f3 Ruins or SDR driven by config. 2023-06-27 16:50:38 -04:00
MagicBot b383aab556 Ruins or SDR driven by config. 2023-06-27 16:45:47 -04:00
MagicBot 9cd3cdf3a3 Mob AI uses two config entries. 2023-06-27 16:19:15 -04:00
MagicBot 7f05cc87c4 Mob AI and SDR/Ruins added to config. 2023-06-27 16:13:25 -04:00
MagicBot 92004bf43e Mob AI and SDR/Ruins added to config. 2023-06-27 16:09:55 -04:00
FatBoy ef0e277f46 refactored AI variables from MBServerStatics 2023-06-26 20:21:10 -05:00
MagicBot 2ffd2e37e6 Class cleanup and reformat. 2023-06-26 19:19:59 -04:00
MagicBot 7d1d1e19d2 Logging of invalid contracts 2023-06-26 18:45:40 -04:00
MagicBot bea82d80f2 Logging of invalid contracts 2023-06-26 18:35:51 -04:00
FatBoy cb344d57b2 guard dogs have 0 minions 2023-06-25 21:44:47 -05:00
FatBoy 99a4d87982 guard dogs 2023-06-25 21:34:23 -05:00
FatBoy 1b94f3f71d guard dogs 2023-06-25 21:32:36 -05:00
FatBoy b2ce937b3f guard minion spawn work 2023-06-25 20:23:47 -05:00
FatBoy 5653776cb2 guard minions despawn at creation 2023-06-25 20:18:02 -05:00
FatBoy 413df09ddf removed error code in FSM manager 2023-06-25 19:51:52 -05:00
FatBoy fc3ca3b814 null target check for mobs 2023-06-25 19:44:27 -05:00
FatBoy 7b43440fae mobs start the game at their first patrol point index 2023-06-25 19:32:49 -05:00
FatBoy 01b8b67ffd mobs respect invisibility again 2023-06-25 19:30:28 -05:00
MagicBot 8fbbde6d69 bugfix in world height calculation. 2023-06-25 20:25:23 -04:00
FatBoy da51be1bef Mob Casting bypasses mele range check 2023-06-25 13:36:24 -05:00
MagicBot 764beb33bd Dispatcher moved to early in bootstrap. 2023-06-07 15:31:07 -04:00
MagicBot f8c8d7244e Moved member to ConfigManager. 2023-06-07 14:53:15 -04:00
MagicBot b6ce3b7ee9 Already logged when connection manager is created. 2023-06-07 14:32:01 -04:00
MagicBot 48aef2ef01 Network autoconfig now uses eth0 or default outgoing ip route. 2023-06-07 14:11:54 -04:00
MagicBot 61e4a4aed4 Realmmap loaded from config to assist with custom maps. 2023-06-07 13:47:25 -04:00
MagicBot b9db6e8dc6 Members moved to WorldServer.
Root object no longer read from config.
2023-06-07 13:37:43 -04:00
FatBoy d695d3db26 epic mob damage calc fix and epic mob null reference fix 2023-05-28 16:07:18 -05:00
FatBoy ca11651be6 guards use proper aggro rules for added aggro check 2023-05-28 15:45:38 -05:00
FatBoy 2cfe527389 mob AI no longer checks for no online players 2023-05-28 14:12:31 -05:00
FatBoy f94e66bf74 mobs update location after moving to patrol point index 2023-05-28 14:05:58 -05:00
FatBoy ff3442d9ad aiinfo command null check 2023-05-28 14:02:05 -05:00
FatBoy 33c6f1c74d patrol point index 2023-05-28 13:48:15 -05:00
FatBoy da378bf490 patrol point index 2023-05-28 13:31:39 -05:00
FatBoy b3b7a78cec patrol point index 2023-05-28 13:28:22 -05:00
FatBoy 545163f60b traget name added to aiInfoCmd 2023-05-28 13:13:49 -05:00
FatBoy bfcdd3bf4b mobile default starting point 2023-05-28 12:56:47 -05:00
FatBoy 67808b69a6 check for dead target 2023-05-28 12:07:00 -05:00
FatBoy 59a4da0c3f randomized patrol delays 2023-05-28 11:34:54 -05:00
FatBoy fd9c5d06af randomized patrol delays 2023-05-28 11:30:46 -05:00
FatBoy 19beb3d5cb randomized patrol delays 2023-05-28 11:29:00 -05:00
FatBoy 863aa4c4a9 randomized patrol delays 2023-05-28 11:25:12 -05:00
FatBoy 90ae798bb8 no more skating rink 2023-05-28 11:19:32 -05:00
FatBoy c47d1b7823 aggro check for non agressive mobs 2023-05-28 11:03:29 -05:00
FatBoy 4e5c77ec47 hamlet guard aggro fix 2023-05-28 11:02:37 -05:00
FatBoy d673c329b6 hamlet guards + mobs aggro before going home 2023-05-28 10:55:11 -05:00
FatBoy 7dfd8148d5 use aggro range not mob range 2023-05-28 10:47:10 -05:00
FatBoy a2a70484ed cant check range of target if theres no target 2023-05-28 10:46:07 -05:00
FatBoy 36eef1942b mobs use half aggro range top chase targets past go home point 2023-05-28 10:43:05 -05:00
FatBoy b154f7ee7f mobs don't go home while in combat range 2023-05-28 10:21:56 -05:00
FatBoy ea919b4ecf mob aggro raneg when swapping hated target 2023-05-28 10:13:49 -05:00
FatBoy b42a378ca8 hate value reset when mob goes home 2023-05-28 10:11:20 -05:00
FatBoy 3b3e89c98f NPC owner null check 2023-05-28 09:25:15 -05:00
FatBoy 708d2e9fb3 building check fix 2023-05-28 09:19:10 -05:00
FatBoy bee3a9b376 Merge remote-tracking branch 'origin/magicbox1.5' into magicbox1.5
# Conflicts:
#	src/engine/ai/MobileFSM.java
2023-05-28 09:18:09 -05:00
MagicBot 566522befb Reformat and bonus code removal. 2023-05-28 08:12:34 -04:00
MagicBot a1f8fedefe Merge remote-tracking branch 'origin/magicbox1.5' into mob-AI-debug
# Conflicts:
#	src/engine/ai/MobileFSM.java
2023-05-28 07:42:10 -04:00
FatBoy 0de09ee9f5 trebs now show correct time remaining to spawn 2023-05-27 22:00:12 -05:00
FatBoy 0d2af7c011 treb fix 2023-05-27 20:54:16 -05:00
FatBoy 11e373db6f treb fix 2023-05-27 20:53:52 -05:00
FatBoy 2e219916a0 respawn work 2023-05-27 19:19:06 -05:00
FatBoy a07ee7903b respawn work 2023-05-27 19:11:17 -05:00
MagicBot abb2521f58 Bug class involving generated keys from statements. 2023-05-26 17:46:26 -04:00
MagicBot d0287ba94e Login should fail fast. 2023-05-25 14:55:49 -04:00
FatBoy 56d6efc4e4 mob chance to cast set at 50% 2023-05-24 20:27:58 -05:00
FatBoy b6c9eed229 power chance tuning 2023-05-24 20:08:53 -05:00
FatBoy eb9a1143e4 patrol delay fine tuning 2023-05-24 19:27:25 -05:00
FatBoy 3e659d981a Patrol wait determined by MBServerStatics.AI_PATROL_DIVISOR
mob cast chance now determined by MBStatics.AI_POWER_CHANCE

mob cast cooldown now determined by MBServerStatics.AI_POWER_DIVISOR

guards use normal mob damage calculations
2023-05-24 19:14:23 -05:00
FatBoy d999d60e9a Patrol wait determined by MBServerStatics.AI_PATROL_DIVISOR
mob cast chance now determined by MBStatics.AI_POWER_CHANCE

mob cast cooldown now determined by MBServerStatics.AI_POWER_DIVISOR
2023-05-24 19:05:35 -05:00
MagicBot cb0a89cb03 Fixed pool size auto-calculated. 2023-05-24 08:36:34 -04:00
MagicBot ee137c0146 Fixed pool size auto-calculated. 2023-05-24 08:34:37 -04:00
MagicBot 9edc32de13 Pool - 10 minute idle; 60 min lifetime. 2023-05-24 07:57:36 -04:00
MagicBot c46615f1d2 Logging info update on bootstrap. 2023-05-23 17:30:30 -04:00
MagicBot d7d22dbb11 Populate zone extents cache. 2023-05-23 17:15:07 -04:00
MagicBot bcc1ac115d bug class fixed involving rs usage 2023-05-23 14:29:08 -04:00
MagicBot adcf7ca927 Updated Hikari pool configuration. 2023-05-23 14:06:15 -04:00
MagicBot f78c18abec Updated Hikari pool configuration. 2023-05-23 13:51:10 -04:00
MagicBot 4f7bb6de0b Using server side statement cache (500). 2023-05-23 13:25:50 -04:00
MagicBot 45d26a82f2 bugfix: runafterload for instanced agos 2023-05-23 12:53:04 -04:00
MagicBot ad99415679 fix: bug class involving rs usage. 2023-05-23 12:24:11 -04:00
MagicBot 568b0291a2 Duplicate method removed. 2023-05-23 11:18:21 -04:00
MagicBot 89192c7ea0 Cleanup post db-refactor. 2023-05-23 11:07:20 -04:00
MagicBot 38ed65054e Cleanup post db-refactor. 2023-05-23 10:56:27 -04:00
MagicBot 391e2d2a17 Cleanup post db-refactor. 2023-05-23 10:50:00 -04:00
MagicBot c6b8d27d53 Refactor to remove abstraction. 2023-05-23 10:42:34 -04:00
MagicBot 3761384dfb Bugfix; method is on rs. 2023-05-23 10:32:07 -04:00
MagicBot 6dd7315786 Garbage cleanup in SetZone().
Package reformat.
2023-05-23 10:27:03 -04:00
MagicBot a2d62ec221 Unused method removed. 2023-05-23 10:08:07 -04:00
MagicBot 4d4d83d15a Unused method removed. 2023-05-23 10:07:39 -04:00
MagicBot 1e3aab1623 Query string updated. 2023-05-23 10:03:05 -04:00
MagicBot f7da137e0f Refactor to remove abstraction 2023-05-23 09:57:17 -04:00
MagicBot 3dd27976fe Refactor to remove abstraction 2023-05-23 09:39:27 -04:00
MagicBot a92ac8671b Refactor to remove abstraction 2023-05-23 09:26:11 -04:00
MagicBot 7c57dcc73d Update to bool return handling. 2023-05-23 09:17:06 -04:00
MagicBot 55756472c6 Bonus code removed. 2023-05-23 08:38:20 -04:00
MagicBot 98237cd53e Refactor to remove abstraction. 2023-05-23 08:33:14 -04:00
MagicBot e9cb8112de Refactor to remove abstraction. 2023-05-23 08:31:10 -04:00
MagicBot fce67a6bae Refactor to remove abstraction. 2023-05-23 08:22:46 -04:00
MagicBot 478e472dc4 Refactor to remove abstraction. 2023-05-23 08:20:20 -04:00
MagicBot 9bdbeeaf70 Refactor to remove abstraction. 2023-05-22 13:00:47 -04:00
MagicBot 3e604b53fa Refactor to remove abstraction. 2023-05-22 12:58:16 -04:00
MagicBot 4b0a3627d4 Refactor to remove abstraction. 2023-05-22 12:50:04 -04:00
MagicBot 3a95cc9b58 Refactor to remove abstraction. 2023-05-22 12:45:55 -04:00
MagicBot f6aa71e9fb Refactor to remove abstraction. 2023-05-22 12:42:34 -04:00
MagicBot d67026edba Refactor to remove abstraction. 2023-05-22 12:35:15 -04:00
MagicBot 75dfc638e1 Pool size auto-configure 2023-05-22 10:34:57 -04:00
MagicBot 07b337f3f1 Pool size fixed 2023-05-22 10:32:15 -04:00
MagicBot 271fc8a35f Pool size auto configured. 2023-05-22 10:21:55 -04:00
MagicBot c7bd2123e8 Pool size auto configured. 2023-05-22 10:11:46 -04:00
MagicBot 5721638cd6 Refactor to remove abstraction. 2023-05-22 09:42:30 -04:00
MagicBot 20bbf85082 Refactor to remove abstraction. 2023-05-22 09:34:59 -04:00
MagicBot 3a2f087381 Refactor to remove abstraction. 2023-05-22 08:54:59 -04:00
MagicBot b8c9d4faf2 Refactor to remove abstraction. 2023-05-22 08:41:25 -04:00
MagicBot 860f7b7b49 Refactor to remove abstraction. 2023-05-22 08:28:58 -04:00
MagicBot b7dd4a845a Refactor to remove abstraction. 2023-05-22 07:57:08 -04:00
MagicBot 1bf9fde684 Bonus code removed. 2023-05-22 07:44:34 -04:00
MagicBot 608a286428 Refactor to remove abstraction 2023-05-22 07:29:22 -04:00
MagicBot 4145124762 Refactor to remove abstraction 2023-05-22 07:18:26 -04:00
MagicBot 9f7da9a57a Refactor to remove abstraction 2023-05-22 06:46:30 -04:00
MagicBot 2cdb2fce42 Refactor to remove abstraction 2023-05-22 06:35:24 -04:00
MagicBot dc9a6fc825 Refactor to remove abstraction 2023-05-22 06:25:51 -04:00
MagicBot 6ae6c91a71 Refactor to remove abstraction 2023-05-22 06:17:40 -04:00
MagicBot ba76de7226 Refactor to remove abstraction 2023-05-22 06:15:19 -04:00
MagicBot 609ee4621e Refactor to remove abstraction 2023-05-22 05:58:30 -04:00
MagicBot 3c9b624ca0 Refactor to remove abstraction 2023-05-22 05:55:33 -04:00
MagicBot 135f66e46f Refactor to remove abstraction 2023-05-22 05:11:55 -04:00
MagicBot 1cd4617c69 Refactor to remove abstraction 2023-05-21 20:26:53 -04:00
MagicBot 8cb0e66bff Refactor to remove abstraction 2023-05-21 20:13:00 -04:00
MagicBot 6ce964ef18 Unnecessary cast 2023-05-21 17:53:21 -04:00
MagicBot db3f97eccf Refactor to remove abstraction. 2023-05-21 17:50:44 -04:00
MagicBot df1b0e3f0f Refactor to remove abstraction. 2023-05-21 17:34:31 -04:00
MagicBot 4749186d86 bugfix: missing break. 2023-05-21 17:29:45 -04:00
MagicBot 82d80ebc4d Refactor to remove abstraction 2023-05-21 17:27:45 -04:00
MagicBot ea5cbf3f0c Refactor to remove abstraction 2023-05-21 17:20:09 -04:00
MagicBot 4d08857de1 Refactor to remove abstraction 2023-05-21 17:00:17 -04:00
MagicBot e203945ea3 Static method moved to manager singleton. 2023-05-21 15:55:15 -04:00
MagicBot ca5cfed82f Refactor to remove abstraction. 2023-05-21 15:48:55 -04:00
MagicBot 0924fa2bdb Refactor to remove abstraction. 2023-05-21 15:28:50 -04:00
MagicBot f299fcaffc Refactor to remove abstraction. 2023-05-21 15:10:27 -04:00
MagicBot 6be3ca41f8 Refactor to remove abstraction. 2023-05-21 14:39:57 -04:00
MagicBot a70c981b47 Refactor to remove abstraction. 2023-05-21 08:57:53 -04:00
MagicBot ea2140559b Bonus Code removed. 2023-05-21 08:39:19 -04:00
MagicBot e4ef0021e8 Refactor to remove abstraction 2023-05-21 08:36:39 -04:00
MagicBot 7b9788bfa9 Refactor to remove abstraction 2023-05-21 08:16:27 -04:00
MagicBot daa5764bfb Refactor to remove abstraction 2023-05-20 21:18:32 -04:00
MagicBot 2e42cbed06 Refactor to remove abstraction 2023-05-20 20:40:52 -04:00
MagicBot 5b3dfbcc21 Refactor to remove abstraction 2023-05-20 19:58:47 -04:00
MagicBot 962649c0f2 Db methods moved to db system. 2023-05-20 19:34:02 -04:00
MagicBot a683eb6290 Refactored to remove abstraction. 2023-05-20 19:14:01 -04:00
MagicBot 4daee03f0d Refactored to remove abstraction. 2023-05-20 19:09:28 -04:00
MagicBot 7e511f590d Created getObjectsFromRs() 2023-05-20 19:02:56 -04:00
MagicBot bffe953c3f Refactor to remove abstraction. 2023-05-20 17:51:21 -04:00
MagicBot c86ad3f2f6 Begin refactor to remove abstraction. 2023-05-20 17:35:44 -04:00
MagicBot 563b54de14 Unused methods removed 2023-05-20 16:33:40 -04:00
MagicBot 82498e8e5a Threadlocal hikari connection defined. 2023-05-20 10:51:25 -04:00
MagicBot e7fa9cc494 Unused methods removed. 2023-05-20 10:43:54 -04:00
MagicBot c04bd92c23 Leak detection threshold set to 5s. 2023-05-20 10:30:34 -04:00
MagicBot 0a31043bc9 Method refactored to use try-with-resources 2023-05-20 10:21:07 -04:00
MagicBot 27ac58518c Method refactored to use try-with-resources 2023-05-20 10:01:40 -04:00
MagicBot 8bafb32e95 Method refactored to use try-with-resources 2023-05-20 10:00:38 -04:00
MagicBot 55d9a3516c Bonus code removed and replaced with a db call actually used. 2023-05-20 09:54:37 -04:00
MagicBot b4b7b08d47 Unused method removed. 2023-05-20 09:51:35 -04:00
MagicBot 553ac01e93 Using baseline for debugging. 2023-05-20 09:43:46 -04:00
MagicBot 0e4490576a Game uses hikaricp for all connection pooling. Connection count set dynamically. 2023-05-20 09:39:23 -04:00
MagicBot 3c5ffed352 Popstring to trywithresources 2023-05-19 07:57:20 -04:00
MagicBot 8b81743cb1 Merge remote-tracking branch 'origin/magicbox1.5' into trywithpass 2023-05-19 07:32:45 -04:00
FatBoy 9b5573c210 guards get Mob.guardedCity assigned to 2023-05-18 19:59:39 -05:00
FatBoy 932daa730a guards use highbred City._playerMemory.size() and Mob.playerAgroMap to go to sleep 2023-05-18 19:54:54 -05:00
FatBoy 0b029a5f79 Merge remote-tracking branch 'origin/mobile-usage-audit' into mobile-usage-audit 2023-05-18 19:49:09 -05:00
FatBoy ac42a9cd8f removed treb override in MobileFSM.DetermineAction 2023-05-18 19:48:37 -05:00
MagicBot 4e863811a1 Removed unused methods. 2023-05-18 08:19:59 -04:00
MagicBot 90fe93d3f0 Renamed for context. 2023-05-18 08:10:54 -04:00
MagicBot 4c4a909798 Error logging added. 2023-05-18 08:00:04 -04:00
MagicBot ba0a7d35cb Error logging added. 2023-05-18 07:54:04 -04:00
MagicBot 86539771e2 Unused method. 2023-05-17 16:38:08 -04:00
MagicBot 8a8136b8e8 Unused methods. 2023-05-17 15:18:47 -04:00
MagicBot 8916d9b4f0 Begin try-with-resources cleanup. 2023-05-17 15:11:26 -04:00
FatBoy 92015c1a13 guards no longer ignore early exit. FSM will not run if no players are online. mobs will use translocate instead of recall power. 2023-05-15 19:01:43 -05:00
MagicBot 80d45f364a Added pool size to hourly metrics. 2023-05-15 10:45:22 -04:00
MagicBot 3a59df6ac6 Update to console output. 2023-05-15 06:17:16 -04:00
MagicBot c3f059c7fc Update to console output. 2023-05-15 06:12:35 -04:00
MagicBot b3ba8f5c9f Try block no longer needed. 2023-05-15 06:08:16 -04:00
MagicBot cd9b8536cb Using color instead of int value. 2023-05-15 06:03:13 -04:00
MagicBot 3a2695703b Using color instead of int value. 2023-05-15 05:48:41 -04:00
MagicBot e4ddcdeeca Building offset added to loc. 2023-05-13 13:17:47 -04:00
MagicBot 69f3c9af71 Bonus code deleted from stuck job. 2023-05-13 13:08:36 -04:00
MagicBot 6a41c5391d Bonus code deleted from stuck job. 2023-05-13 12:59:05 -04:00
FatBoy d9c05fa622 magical rolling re-enabled 2023-05-12 21:14:41 -05:00
MagicBot ee1fc0d55c Bypass npc guild leaders in override.. 2023-05-12 08:27:00 -04:00
MagicBot 7f086fb850 Improved error logging. 2023-05-12 08:15:25 -04:00
MagicBot fafd77c661 Improved error logging. 2023-05-12 08:09:17 -04:00
MagicBot d99fc602d5 NPC table overrides for contracts. 2023-05-11 09:07:35 -04:00
FatBoy 99a82a6b84 enemy/notenemy aggro rules finalized 2023-05-10 18:33:03 -05:00
FatBoy 60c2405cad mobs now use enemy/notenemy for aggro rules 2023-05-09 21:11:51 -05:00
FatBoy 27a6a1f4d0 guards' sleeping pill wore off 2023-05-09 20:59:49 -05:00
FatBoy 584ad46b75 duplicate zoneMobSet additions fixed 2023-05-09 20:27:24 -05:00
FatBoy f99698feda duplicate zoneMobSet additions fixed 2023-05-09 19:57:34 -05:00
FatBoy b3c7db9214 Merge branch 'magicbox1.5' into feature-guard-patrol 2023-05-09 18:40:04 -05:00
MagicBot 7168813ba5 Tweak to set model logic. 2023-05-09 15:16:24 -04:00
MagicBot 8068082768 Naming logic changed to have a valid guild. 2023-05-08 09:29:11 -04:00
MagicBot 322b88a1f4 Naming logic changed to have a valid guild. 2023-05-08 09:20:56 -04:00
MagicBot f85fb8f224 bugfix in ./remove dev cmd. 2023-05-08 08:18:12 -04:00
FatBoy 76f3d2599b NPCs in buildings show correct spawn times and progress 2023-05-07 19:40:38 -05:00
FatBoy 92a0af8dbb guard minion spawn timer scaling off barracks rank 2023-05-07 17:14:47 -05:00
FatBoy fb2205d700 remove player formn cityoutlaws when they leave 2023-05-07 12:41:31 -05:00
FatBoy 526fe799f6 remove player formn cityoutlaws when they leave 2023-05-07 12:34:01 -05:00
FatBoy 0c9bb0d948 initialize cityOutlaws 2023-05-07 12:20:50 -05:00
FatBoy d6a35a577b mobs use hate value to hot swap targets 2023-05-07 12:15:38 -05:00
FatBoy 508fac6168 mobs use hate value to hot swap targets 2023-05-07 12:06:54 -05:00
FatBoy 7c47ef0550 mobs use hate value to hot swap targets 2023-05-07 12:06:03 -05:00
FatBoy e838bb641b mobs use hate value to hot swap targets 2023-05-07 11:53:00 -05:00
MagicBot e73f4cbe63 Placement bounds of 1.2% city zone size. 2023-05-07 10:55:27 -04:00
MagicBot ffafd44fa7 Siege bounds related bonus code removal. 2023-05-07 10:20:53 -04:00
FatBoy c54aa5f9fc guard aggro rules for hostiles 2023-05-07 08:35:11 -05:00
FatBoy b899708cd5 removed obvious bug in guards dropping aggro 2023-05-07 08:12:42 -05:00
FatBoy 14f98493c7 guard minions no longer respawn while captain is dead 2023-05-07 08:06:15 -05:00
FatBoy c7e470166d guard captain and wall archer spawn times hard set at 450 and 900 respectively 2023-05-07 08:02:52 -05:00
FatBoy db218139b3 scaling respawn timer for guard minions based on barracks rank 2023-05-07 07:58:52 -05:00
MagicBot b73eae787c Rotation portals 2023-05-07 08:13:41 -04:00
FatBoy df842a2209 Merge branch 'magicbox1.5' into feature-guard-patrol 2023-05-06 15:54:45 -05:00
FatBoy 64bde9c197 guard reverse KoS logic 2023-05-06 15:53:35 -05:00
FatBoy 6cf599f6bc guard reverse KoS logic 2023-05-06 14:52:10 -05:00
FatBoy d9adef611d mob movement logic update 2023-05-06 13:03:00 -05:00
FatBoy 9ffc09ac02 mob movement logic update 2023-05-06 12:14:28 -05:00
MagicBot a113295058 Player zone radius now reflects 24.3 at 875. 2023-05-05 08:51:49 -04:00
FatBoy 7e5cef2842 guard patrol point logic 2023-05-03 21:20:30 -05:00
FatBoy 969aeec1c7 guard patrol point logic 2023-05-03 21:19:49 -05:00
FatBoy e66b25f803 update isMoving for mobs still at their bind loc 2023-05-03 21:02:38 -05:00
FatBoy 7f9cc6e010 guard patrol work 2023-05-03 20:38:42 -05:00
FatBoy 964e7a4363 guards will now recall home if they leave city grid and have no players loaded 2023-05-03 19:50:52 -05:00
FatBoy aec0115d9b Added random city grid patrol point for guards with no barracks patrol points assigned 2023-05-03 19:43:58 -05:00
MagicBot 3191c20a8c Captain slot no longer overridden. 2023-05-03 18:31:20 -04:00
MagicBot 2a52f9adef slottest function expanded. 2023-05-03 18:20:47 -04:00
MagicBot c44cddfb92 slottest function expanded. 2023-05-03 18:12:19 -04:00
MagicBot 9649538a56 slottest function expanded. 2023-05-03 18:07:06 -04:00
MagicBot d5ca5993aa slottest function expanded. 2023-05-03 18:06:28 -04:00
MagicBot ce7b203b9c slottest function expanded. 2023-05-03 18:04:42 -04:00
MagicBot 294f8fe02b Override removed edge case handed in db. 2023-05-03 16:17:53 -04:00
MagicBot 21c6695a05 Arty captains hardcoded to slot 4. 2023-05-03 15:44:46 -04:00
MagicBot 6fb30928a1 Bugfix in slottest command. 2023-05-03 14:43:49 -04:00
MagicBot 033c008263 bugfix: bow restriction limited to attacker. 2023-05-03 14:25:30 -04:00
MagicBot 7dcefdf5d7 Contract moved to AbstractCharacter.
Arty tower restricted to a single tower captain.
2023-05-02 15:09:09 -04:00
MagicBot f526bda748 Slot one is reserved on arty towers. 2023-05-02 14:51:02 -04:00
MagicBot 7a3e3b394b Slot two is reserved on arty towers. 2023-05-02 14:44:22 -04:00
MagicBot e488627fcc Slot one is reserved on arty towers. 2023-05-02 14:29:58 -04:00
MagicBot 82aeba3a05 NPC rotations inherit building rotation. 2023-05-02 13:51:31 -04:00
MagicBot c56d5567f2 bugfix in quaternion math. 2023-05-02 13:21:40 -04:00
MagicBot 52160d48c4 Adding building rotation to mobile rotation. 2023-05-02 13:17:34 -04:00
MagicBot ce516f24c0 Contracted Mob/Npc rotation derived from slot position. 2023-05-02 13:08:02 -04:00
MagicBot a3c8241b8d Unused methods removed. 2023-05-02 12:40:51 -04:00
MagicBot 10a6eec3da more Bonus Code removal. 2023-05-02 12:26:34 -04:00
MagicBot 715abf1444 Building Location rotations are now a quaternion. 2023-05-02 09:10:41 -04:00
MagicBot e745c260f0 Positive rotation not negative. 2023-05-02 08:46:43 -04:00
MagicBot b7c2e09b81 Rotation slot location by building rotation. 2023-05-02 08:39:03 -04:00
MagicBot 48172fb220 Rotation slot location by building rotation. 2023-05-02 08:26:43 -04:00
MagicBot 0aabc9a923 Bonus code removal. 2023-05-02 08:13:45 -04:00
MagicBot 44b99a8781 It's w not y. 2023-05-01 15:58:04 -04:00
MagicBot 5d6e43313b slotnpc dev command now supports both mobs and npc's. 2023-05-01 15:23:42 -04:00
MagicBot c1c660fd53 Switching back to ASC for slot ordering. 2023-05-01 14:59:24 -04:00
MagicBot 1582d36222 Switching to desc for slot ordering. 2023-05-01 14:54:02 -04:00
MagicBot 11bcd26027 Loading pirate names before world objects 2023-05-01 14:43:06 -04:00
MagicBot b8eb198b09 Pirate name related code moved to NPCmanager. 2023-05-01 14:28:02 -04:00
MagicBot c0521ba2b7 null check for building owner. 2023-05-01 14:10:09 -04:00
MagicBot 59cd2b0dc1 Bonus code removal. 2023-05-01 13:55:06 -04:00
MagicBot 611e34add2 Merge remote-tracking branch 'origin/char-init-mobwork' into char-init-cleanup 2023-05-01 12:45:05 -04:00
MagicBot 16adeb88ca Merge remote-tracking branch 'origin/magicbox1.5' into char-init-cleanup 2023-05-01 12:43:28 -04:00
FatBoy 566bb8144a were guard contract ID in enum 2023-04-30 17:17:20 -05:00
FatBoy 0b932119b0 guard work 2023-04-30 16:54:39 -05:00
FatBoy 9fefebd4a3 wild mob naes and world NPC names corrected 2023-04-30 16:19:53 -05:00
FatBoy d4e7a6691c removed unused nameOverride variable 2023-04-30 16:12:00 -05:00
FatBoy ad4f9d3540 player placed NPCs now show correct names 2023-04-30 16:09:17 -05:00
FatBoy 6868c9de24 player placed mobiles now show correct names 2023-04-30 16:05:48 -05:00
FatBoy 56a6b9d204 guard minion logic work 2023-04-30 15:04:12 -05:00
FatBoy e52b8e894b guard minion logic work 2023-04-30 14:55:12 -05:00
FatBoy 0bc41323b1 guard minions added to captains parentZone.zoneMobSet 2023-04-30 13:47:15 -05:00
FatBoy 3a7ad74ab6 wall archers no longer spawn with level * 10 2023-04-30 13:35:25 -05:00
FatBoy 7ed0b8a052 wall archers given BehaviourType in initializeMob 2023-04-30 13:03:41 -05:00
FatBoy 718fe56cda drops no longer announce on mob death && config drop rate used for mob equipment drop chance 2023-04-30 12:27:02 -05:00
MagicBot eee949de93 Naming update. 2023-04-30 10:55:16 -04:00
MagicBot b5e2848091 Location serialization matches NPC 2023-04-30 10:20:21 -04:00
MagicBot 1ab8540f73 Location serialization matches NPC 2023-04-30 09:32:34 -04:00
MagicBot c029a881e9 Location serialization matches NPC 2023-04-30 09:23:56 -04:00
MagicBot 334a706af3 Update to info output. 2023-04-30 09:08:03 -04:00
MagicBot 1e208c0881 Update to info output. 2023-04-30 09:02:50 -04:00
MagicBot 61b87cbba7 Merge branch 'char-init-cleanup' of http://repo.magicbane.com/MagicBane/Server into char-init-cleanup 2023-04-30 08:52:39 -04:00
MagicBot d1d6972930 Debug code removed; issue resolved. 2023-04-30 08:51:35 -04:00
MagicBot 72e823744c Some meshes might not have slot locations. 2023-04-30 08:38:59 -04:00
MagicBot 4985005b3e Debug null value. 2023-04-30 08:37:08 -04:00
MagicBot ce8d5f0129 Debug null value. 2023-04-30 08:28:36 -04:00
MagicBot 9c83e6f9d9 Removed name override logic. 2023-04-30 08:18:38 -04:00
MagicBot 21241aa5df One serialization not 3. 2023-04-30 08:02:28 -04:00
MagicBot 54e4f08ea2 One serialization not 3. 2023-04-30 07:57:19 -04:00
MagicBot e18c046ee7 Parent zone required by db handler. 2023-04-30 07:41:11 -04:00
MagicBot 4365fafb77 Tweak to name derivation in constructor 2023-04-29 16:32:12 -04:00
MagicBot a3217f44be Code bloc moved out of constructor. 2023-04-29 16:24:19 -04:00
MagicBot da62046ce0 Unused parm in method interface removed. 2023-04-29 16:21:02 -04:00
MagicBot b9722ec292 more old hireling code removed. 2023-04-29 16:06:05 -04:00
MagicBot cfb4f38d15 Contact npcs/mobs have derived locations. 0x0 in cache data. 2023-04-29 16:02:22 -04:00
MagicBot 48d66a0d42 Integer division fix. Class cleanup. 2023-04-29 15:40:50 -04:00
MagicBot d454878245 BuildingModelBase no longer needed. 2023-04-29 15:15:23 -04:00
MagicBot cace195e18 Logic and comment cleanup. 2023-04-29 14:36:39 -04:00
MagicBot 129aff909c Update; mobile offsets within buildings. 2023-04-29 14:25:36 -04:00
MagicBot 6cfd078469 Removed old methods from codepath. 2023-04-29 14:00:24 -04:00
MagicBot 4acc4192af Initial work on Mobile init refactor. 2023-04-29 13:57:09 -04:00
MagicBot e554171e22 Duplicate region field removed and inlined. 2023-04-29 12:33:21 -04:00
MagicBot de38c8727a Debugging region 2023-04-29 12:14:35 -04:00
MagicBot 0a78958e44 Debugging region 2023-04-29 12:02:37 -04:00
MagicBot 353cd0ab23 Serialization revert. 2023-04-29 11:24:32 -04:00
MagicBot b73c8e9045 Floor and level no longer read from db. 2023-04-29 10:59:13 -04:00
MagicBot 5729492c6a NPC derives position from slot. 2023-04-29 10:30:53 -04:00
MagicBot 0c45e6d36f Serialization update. 2023-04-29 09:53:12 -04:00
MagicBot 677988ea44 Add new npc to world. 2023-04-29 09:35:00 -04:00
MagicBot c30ca2fb1f Comment cleanup. 2023-04-29 09:21:58 -04:00
MagicBot cd9d7f7652 Set bindloc to slot location. 2023-04-29 09:19:22 -04:00
MagicBot 84e24b4951 Set bindloc to slot location. 2023-04-29 09:17:14 -04:00
MagicBot ef367c2981 Array index not 1 2023-04-29 09:07:48 -04:00
MagicBot ec10ac7ba5 Region now set in initNpc 2023-04-29 08:59:29 -04:00
MagicBot 4bbe1db54a Bindloc for non slotted npcs. 2023-04-29 08:58:26 -04:00
MagicBot 3494ae1e6b Bindloc for non slooted npc's. 2023-04-29 08:55:12 -04:00
MagicBot 123f9eb588 SetParentZone removed from NPC. 2023-04-29 08:47:35 -04:00
MagicBot 40e4770425 inBuildingLoc removed. 2023-04-29 08:24:28 -04:00
MagicBot ed0f9daef3 Slotting helper methods added. 2023-04-29 08:17:05 -04:00
MagicBot beb9d5927e Iteration bugfix. 2023-04-29 08:10:59 -04:00
MagicBot 225e55d956 Slots will be derived not stored. 2023-04-29 08:08:45 -04:00
MagicBot 2114d9832f Redundant declaration and assignment. 2023-04-25 09:00:13 -04:00
MagicBot b6b1485841 Removed temp in-building loc due to null. 2023-04-24 17:35:56 -04:00
MagicBot c4f939278a Devcmd now displays inbuilding loc. 2023-04-24 17:29:48 -04:00
MagicBot 195a7e2cea Devcmd now displays inbuilding loc. 2023-04-24 17:28:21 -04:00
MagicBot dc868305f0 Using new db loader. 2023-04-24 17:14:37 -04:00
MagicBot c60a4d8d39 Bugfix for contract-less npc owners. 2023-04-24 17:08:03 -04:00
MagicBot de7e3ba73d Hashmap to add to was added. 2023-04-24 16:49:41 -04:00
MagicBot 4d76014633 Dev cmd to test new system. 2023-04-24 16:41:25 -04:00
MagicBot 320d95ae2f Default value for npc slot. 2023-04-24 16:26:30 -04:00
MagicBot 6d73e12c5c Slot added to stored procedures. 2023-04-24 16:23:13 -04:00
MagicBot 0513cc978e Helper method for slot lookup added. 2023-04-24 16:17:55 -04:00
MagicBot 7c079c3998 Begin refactor location collections. 2023-04-24 15:37:30 -04:00
MagicBot d729fbb287 Captain slot issue in db rectified. 2023-04-24 14:06:17 -04:00
MagicBot 14c98d9376 Blueprint support for OuterWallWithTower 2023-04-24 12:04:39 -04:00
MagicBot 888fa25e9a Blueprint support for OuterWallWithTower 2023-04-24 11:55:29 -04:00
MagicBot 5a0136cd3d Cleanup and bonus code removal. 2023-04-24 09:42:01 -04:00
MagicBot 3419c1ceea Refactored isWallArcher(). 2023-04-24 09:22:01 -04:00
MagicBot 4ae55b9bd8 Removed leftover junk from mobbase. 2023-04-24 03:38:04 -04:00
MagicBot 6b146bfdc4 Removed leftover junk from mobbase. 2023-04-24 03:26:35 -04:00
FatBoy 620fad57fe Mob equipment drops once more, including vorg with proper chance 2023-04-23 22:07:54 -05:00
FatBoy f24605735e renamed "run" in MobileFSM to "DetermineAction" 2023-04-23 20:41:43 -05:00
FatBoy 7e9e0d2c5b MobileFSM cleanup and bonus code removal 2023-04-23 20:38:28 -05:00
FatBoy 1487efc46b Mob.java cleanup 2023-04-23 20:19:17 -05:00
FatBoy 2df4f658c9 Mob.java cleanup 2023-04-23 20:16:30 -05:00
MagicBot 4462e34ca4 mobbase.fsm should never be blank. 2023-04-23 12:03:46 -04:00
MagicBot 4adfbc0723 Refactored to static methods. 2023-04-23 11:19:34 -04:00
MagicBot c0e92bddc2 Level override removed. 2023-04-23 10:40:19 -04:00
MagicBot 40b7546946 More useful error information. 2023-04-23 10:27:04 -04:00
MagicBot 59e3938a72 Removed unused method. 2023-04-23 10:01:18 -04:00
MagicBot 513c254479 Correction in column name. 2023-04-23 09:45:03 -04:00
MagicBot df7b23c0de Extra override removed from constructor. 2023-04-23 09:38:49 -04:00
MagicBot edd1c0e9a6 Name/level saved to disk when slotting mobiles. 2023-04-23 09:30:29 -04:00
MagicBot 0a783f7561 pirateName and Rank added to CreateMob interface. 2023-04-23 08:51:49 -04:00
MagicBot 235ea84dcd Value is not unknown from handler context. 2023-04-23 07:48:10 -04:00
FatBoy 3e005c3a51 NPC have names and contract names 2023-04-22 23:20:24 -05:00
FatBoy 88e09c479f wall archers no longer spawn minions 2023-04-22 23:12:45 -05:00
FatBoy 83eab27a90 proper NPC names in asset management window 2023-04-22 22:44:13 -05:00
FatBoy c02c5750c6 proper contract names in asset management window 2023-04-22 22:10:06 -05:00
FatBoy 09d7ff0740 make wall archers great again 2023-04-22 21:55:06 -05:00
FatBoy ed1a6192c7 enemy/notEnemy fix for mobs 2023-04-22 18:24:43 -05:00
FatBoy ae968211ab none to enum MonsterType 2023-04-22 18:13:29 -05:00
FatBoy a3170bfb4b test code for notEnemy 2023-04-22 18:08:40 -05:00
FatBoy 344c5900b8 added none check to enemy and notEnemy in mobbase 2023-04-22 17:52:55 -05:00
FatBoy 1d74643fe3 None added to enum MonsterType 2023-04-22 17:49:26 -05:00
FatBoy 38e5081b0e moved createSiegeMob and createGuardMob to the Mob class 2023-04-22 17:16:34 -05:00
MagicBot 8fa20c6f93 Cleanup in mob class. 2023-04-22 07:52:05 -04:00
FatBoy 45ab68caa4 trebuchets now have pet AI with canRoam disabled 2023-04-21 20:12:49 -05:00
FatBoy 3329d61636 fixed error in initialize mob 2023-04-21 18:23:52 -05:00
FatBoy 5299da784a mob respawn fix actual 2023-04-21 15:17:37 -05:00
FatBoy e5b7bd1fa6 mob respawn fix 2023-04-21 12:56:09 -05:00
FatBoy 881907c53a AggroWanderer and Wandered state updates 2023-04-21 10:47:49 -05:00
FatBoy 6a03b58aa6 pet AI logic 2023-04-21 10:44:19 -05:00
FatBoy e38be1e18f pet movement logic 2023-04-21 10:20:38 -05:00
FatBoy 1ff42b775c added hamlet guard logic 2023-04-21 10:02:09 -05:00
FatBoy cfe8d20d2b added barracks list to city object 2023-04-20 21:23:42 -05:00
FatBoy aa8f59f6f7 wall archer debugging 2023-04-19 19:05:24 -05:00
FatBoy f3b6f5595b logic for wall archers fix 2023-04-18 20:54:53 -05:00
FatBoy 0448448263 logic for wall archers 2023-04-18 20:52:33 -05:00
FatBoy 0914580bea Gave Wall Archers mob AI 2023-04-18 20:47:49 -05:00
FatBoy 914575a360 guard minion spawning work 2023-04-17 21:48:31 -05:00
FatBoy 259025d572 guard recall off city grid 2023-04-17 21:31:56 -05:00
FatBoy aa3c70ae31 guard minions AI 2023-04-17 20:51:34 -05:00
FatBoy 2f4b675a2c added mob fsm data to mob 2023-04-17 19:15:08 -05:00
MagicBot 662d1d2b85 Enum moved to Enum.
Updated logic in rs constructor to handle blanks properly.
2023-04-17 07:20:39 -04:00
FatBoy 6e92836deb GuardCaptain aggro rules 2023-04-16 21:48:21 -05:00
FatBoy b1bd09bfc4 GuardCaptain flag in run after load 2023-04-16 20:52:37 -05:00
FatBoy 7e08a3d8ab GuardCaptain flag when slotting in barracks 2023-04-16 20:44:28 -05:00
FatBoy cb5c2c668a load guard in barracks 2023-04-16 20:36:51 -05:00
FatBoy c93f932caa fixed spelling error in MObBehaviourType enum 2023-04-16 19:59:13 -05:00
FatBoy f855ec9a19 fsm lookup changes 2023-04-16 19:50:59 -05:00
FatBoy 6817c3dffe moved fsm lookup to runAfterLoad 2023-04-16 19:45:55 -05:00
FatBoy c17f745461 moved fsm lookup to runAfterLoad 2023-04-16 19:45:17 -05:00
FatBoy 664b5fea73 logger addition for mob 2023-04-16 19:40:33 -05:00
FatBoy 3c118ed88b unecessary try removal 2023-04-16 19:29:14 -05:00
FatBoy 1d965c0785 remove test code, added guard captain and minion behaviour flags 2023-04-16 19:27:18 -05:00
FatBoy 37ccfaa509 Merge remote-tracking branch 'origin/magicbox1.5' into new-mob-behaviour 2023-04-16 19:16:05 -05:00
FatBoy eb20d926e3 guard aggro logic 2023-04-16 18:58:55 -05:00
FatBoy 0ee7507467 new chase logic for mobs 2023-04-16 13:30:46 -05:00
FatBoy c1bba30dec cleanup old patrol code 2023-04-16 13:24:22 -05:00
FatBoy db0e9d1847 add random 10-15 delay between patrolling for mobs 2023-04-16 13:23:42 -05:00
FatBoy ef74d1ae8c init. patrol points list 2023-04-16 13:07:28 -05:00
FatBoy 0779fbab87 implement new patrol system 2023-04-16 13:03:42 -05:00
FatBoy 028135f859 new mob patrolling system 2023-04-16 12:48:23 -05:00
FatBoy cfa59d8012 pet AI implemented 2023-04-15 22:04:55 -05:00
FatBoy ca40d7a71d added ./aiinfo command for debugging new AI system 2023-04-15 20:53:47 -05:00
FatBoy ccd6032c15 added ./aiinfo command for debugging new AI system 2023-04-15 20:36:56 -05:00
FatBoy ecec3833c4 added ./aiinfo command for debugging new AI system 2023-04-15 20:31:13 -05:00
FatBoy 98eb557c58 added none to behaviour type for mobs and defuated RS constructor for mobs 2023-04-15 20:03:17 -05:00
FatBoy f75323e7e2 LootManager cleanup + say message for mobs calling for help 2023-04-15 12:21:31 -05:00
FatBoy c8c275bcd5 added equip dropping on mobs to LootManager 2023-04-15 11:52:19 -05:00
FatBoy ca9a72e338 cleaned up testing code 2023-04-14 20:53:21 -05:00
FatBoy aaff8e7d6b cleaned up some aggro rules 2023-04-14 20:50:47 -05:00
FatBoy f9205eb4e2 added default behaviourType to "Simple" for mobs. added respawn logic 2023-04-14 19:20:12 -05:00
MagicBot de3818aef6 Equip lookups now use bootymap 2023-04-14 18:19:43 -04:00
MagicBot 5d0166a29a EquipmentSets merged into bootySet system. 2023-04-14 16:46:10 -04:00
FatBoy 98f0928a4b replaced MobileFSM.STATE with MobileFSM.MobBehaviourTypes 2023-04-11 19:53:13 -05:00
MagicBot 23a07175e5 Single map color stored as hex string. 2023-04-10 13:27:27 -04:00
MagicBot beff5c3e06 Refactored aggro system to use Monstertype. 2023-04-09 18:16:36 -04:00
MagicBot 6b62c90bc8 NONE is not needed for a BitSet. 0 is just empty. 2023-04-09 14:06:57 -04:00
MagicBot ef6bb65e73 NONE is not needed for a BitSet. 0 is just empty. 2023-04-09 14:06:03 -04:00
MagicBot 6f82ee24d9 MonsterType fields added to ./info 2023-04-09 13:58:29 -04:00
MagicBot 97165bbdfe Aggro fields combined in RunAfterLoad 2023-04-09 13:55:46 -04:00
MagicBot 30175be56a MonsterTypes loaded into Mob. 2023-04-09 13:43:12 -04:00
MagicBot 4fe6040707 enemy/notEnemy bitvectors loaded into mobbase. 2023-04-09 13:31:42 -04:00
MagicBot aaa67ec635 new MonsterType bitvector added. 2023-04-09 13:20:03 -04:00
FatBoy 93f6d0be0b new loot system completed 2023-04-08 21:49:17 -05:00
FatBoy fe953aa8c4 simulatebooty command added data output 2023-04-08 18:05:46 -05:00
FatBoy 902376b517 simulatebooty command added data output 2023-04-08 17:54:53 -05:00
FatBoy e56c534d2b simulatebooty command added data output 2023-04-08 17:20:57 -05:00
FatBoy 74fe401ff1 revert simulatebooty command 2023-04-08 17:18:35 -05:00
FatBoy 862230008e revert simulatebooty command 2023-04-08 17:15:34 -05:00
FatBoy 93cd329f20 simulate booty command work 2023-04-08 15:33:51 -05:00
FatBoy c550360a43 simulate booty command work 2023-04-08 15:25:45 -05:00
FatBoy 2e3c9e703b added parameter to simulateBooty command to simulate mob or zone booty and added custom iteraion input 2023-04-08 14:53:56 -05:00
FatBoy dffc16f5ce mob roll range formula 2023-04-08 14:19:47 -05:00
MagicBot f47eb63057 Merge remote-tracking branch 'origin/magicbox1.5' into new-booty-system 2023-04-08 10:48:13 -04:00
MagicBot 9d6b3ab3ff Merge remote-tracking branch 'origin/bugfix-runesandbooties' into magicbox1.5 2023-04-08 06:26:39 -04:00
FatBoy b18994a7c0 simulate booty command work 2023-04-07 22:04:39 -05:00
FatBoy e483280a3c simulate booty command work 2023-04-07 21:41:03 -05:00
FatBoy 0bb3c84fed enable simulateBooty command 2023-04-07 19:50:49 -05:00
FatBoy 2eb9705c3a added simulatbooty command for debugging loot 2023-04-07 19:36:51 -05:00
FatBoy ec37e1f9f9 drop chance work 2023-04-07 18:43:45 -05:00
FatBoy b4002fa1a5 added resources to drop tables 2023-04-07 15:41:40 -05:00
FatBoy a7dccb6301 chase null pointer 2023-04-07 14:48:15 -05:00
FatBoy 2827db5db5 prefix/suffix usage for mob loot 2023-04-07 13:56:28 -05:00
FatBoy 460a2152c8 MobLoot usage 2023-04-07 13:38:09 -05:00
FatBoy 5edbc81934 MobLoot usage 2023-04-07 13:09:15 -05:00
FatBoy 335484944f variable naming convention 2023-04-07 12:22:33 -05:00
FatBoy 8b6bc38082 error tracking 2023-04-07 12:05:01 -05:00
FatBoy b51843942b error tracking 2023-04-07 11:36:52 -05:00
FatBoy a0310b6767 added case staement for "ITEM" 2023-04-07 11:32:53 -05:00
FatBoy 2b90679087 new booty system update 2023-04-07 11:22:14 -05:00
FatBoy d951eb4b38 cleanup 2023-04-06 21:06:23 -05:00
FatBoy 847c8bc08f loot system debugging 2023-04-06 20:35:03 -05:00
FatBoy 5efb5d0d4b remove old loot system 2023-04-06 20:28:47 -05:00
FatBoy 0d7620900b loot system implementation 2023-04-06 20:18:31 -05:00
FatBoy dfd0d7e668 new loot system 2023-04-06 20:10:42 -05:00
FatBoy 1be669aa66 Merge branch 'bugfix-runesandbooties' into new-booty-system
# Conflicts:
#	src/engine/objects/MobBase.java
2023-04-06 20:08:29 -05:00
FatBoy 95352e778d place holder 2023-04-06 20:07:24 -05:00
MagicBot 88bf38b858 Mobbase updated with new booty and fsm fields. 2023-04-06 20:58:13 -04:00
FatBoy 16fb40e104 Merge remote-tracking branch 'origin/magicbox1.5' into new-booty-system 2023-04-06 19:41:19 -05:00
MagicBot d0279599f6 BootySets expanded to handle rune booty. 2023-04-06 18:08:01 -04:00
FatBoy bfb6b0f5eb ./info now shows building information not just region 2023-04-06 09:44:34 -05:00
FatBoy 3f8d772f8f treb troubleshooting 2023-04-05 20:29:34 -05:00
FatBoy 07e993b0ba NPC and mob regions for real this time 2023-04-05 20:06:28 -05:00
FatBoy 1169f44041 NPC and mob regions 2023-04-05 20:04:04 -05:00
MagicBot 563fe8684a Workaround for mob region issue. 2023-04-05 20:20:23 -04:00
MagicBot a85391e5a4 Workaround for mob region issue. 2023-04-05 19:49:20 -04:00
MagicBot fc6f400e09 Corner trebs go into slot 1. 2023-04-05 18:32:03 -04:00
MagicBot 55fc6a68e1 Corner trebs go into slot 1. 2023-04-05 18:06:50 -04:00
MagicBot e1811c7bfc Corner trebs go into slot 1. 2023-04-05 17:41:11 -04:00
MagicBot bccbb1d8b7 Mobs are not hirelings but minions in this context. 2023-04-05 17:06:08 -04:00
MagicBot 2b214f8934 Bugfix in string output. 2023-04-04 18:14:54 -04:00
MagicBot 6a5f0596e0 Unused variable removed. 2023-04-04 18:11:07 -04:00
MagicBot 8f87bc5ca0 Bugfix in info dealing with mob flags on npcs. 2023-04-04 18:06:32 -04:00
MagicBot a0e63cde8f Bugfix in info dealing with mob flags on npcs. 2023-04-04 17:52:26 -04:00
MagicBot 94e3a594ec Mobbases can have empty mobflag values. 2023-04-04 17:38:52 -04:00
MagicBot bbf0709643 Mobbases can have empty mobflag values. 2023-04-04 17:30:56 -04:00
MagicBot 4492a93df4 Clarity in naming. 2023-04-04 16:26:47 -04:00
MagicBot 65e7566d0f More slotting work. 2023-04-04 15:36:56 -04:00
MagicBot 1c496b3c98 More slotting work. 2023-04-04 15:13:18 -04:00
MagicBot ee115a473d Exclude not include noId npc's. 2023-04-04 14:57:07 -04:00
MagicBot 5a4559d7b2 ContractID for captain is 850 not 650. 2023-04-04 14:47:23 -04:00
MagicBot 3b69c8c267 Tower captains don't use slot 1. 2023-04-04 14:41:01 -04:00
MagicBot 14c4443f20 loadID is needed; different mob. 2023-04-04 13:56:34 -04:00
MagicBot a01a342fd8 Affirmatively check hireling entry instead of relying upon loadID =0 which was a side effect. 2023-04-04 13:48:56 -04:00
MagicBot 1cb103c156 Slots are slots; blueprint logic not needed on back-end. 2023-04-04 11:08:07 -04:00
MagicBot 84bae3141c Slots are slots; blueprint logic not needed on back-end. 2023-04-04 10:48:17 -04:00
MagicBot 307f52866d Merge remote-tracking branch 'origin/bugfix-runesandbooties' into magicbox1.5 2023-04-04 10:33:18 -04:00
MagicBot 7ef338be1d Bugfix in slotting blueprint buildings 2023-04-04 10:31:59 -04:00
MagicBot 385b89e6ba Two layered continent support. 2023-04-03 15:56:36 -04:00
MagicBot 41a53d1205 Merge remote-tracking branch 'origin/bugfix-runesandbooties' into magicbox1.5 2023-04-03 12:30:49 -04:00
MagicBot a85bbde9d2 Mobbase runes no longer needed. 2023-04-03 06:27:29 -04:00
FatBoy 13d83c0003 NPC guards no longer attack players 2023-04-02 15:51:39 -05:00
MagicBot f21e51f74a Optimized imports (getting close to release) 2023-03-31 10:08:44 -04:00
MagicBot 045840ec54 Last vestige of FidalityID garbage and raw cache files removed. 2023-03-31 10:05:13 -04:00
MagicBot 4e1455be7f Hunt for more fidality insanity. 2023-03-31 10:01:59 -04:00
MagicBot 3881c2b1d0 Relevant methods made static and moved into NPCManager 2023-03-31 09:59:49 -04:00
MagicBot bbdbead1ff Fidaltiy garbage removed from NPC class. 2023-03-31 09:17:15 -04:00
MagicBot 24b6820a1b Fidaltiy garbage removed from NPC class. 2023-03-31 09:15:52 -04:00
MagicBot 2b307daeb2 MobileBooty system integrated. 2023-03-31 09:09:57 -04:00
MagicBot fb15ee912b Clarity fix in instance variable ordering. 2023-03-31 08:01:14 -04:00
MagicBot 3b7c516975 Merge remote-tracking branch 'origin/post-wipe-merge' into bugfix-runesandbooties 2023-03-30 20:56:42 -04:00
FatBoy 33603958b1 fixed hotzone drop tables never being used 2023-03-30 19:44:44 -05:00
MagicBot f669be18b3 Unused MobRaceType enum removed. 2023-03-30 11:51:59 -04:00
MagicBot dcae131b67 Removed Fidality garbage. Fixed mobs in buildings. 2023-03-30 11:07:57 -04:00
MagicBot f5d5dce791 Revert "Fidality borking mobs in buildings unborked."
This reverts commit 2befa063ef.
2023-03-30 10:34:15 -04:00
MagicBot 5a0910eb5c Revert "Fidelity > Fidality"
This reverts commit f4da8544d3.
2023-03-30 10:32:08 -04:00
MagicBot 2befa063ef Fidality borking mobs in buildings unborked. 2023-03-30 10:28:46 -04:00
MagicBot f4da8544d3 Fidelity > Fidality 2023-03-30 10:14:40 -04:00
MagicBot 60a9f14aa3 Mobbases don't need skills. 2023-03-29 18:52:36 -04:00
MagicBot 39b07df2e2 Sanity check for race rune not in runebase. 2023-03-29 17:57:37 -04:00
MagicBot 5f6883059f Cleanup rune effect application. 2023-03-29 15:42:32 -04:00
MagicBot 6b2790f9c1 Mobs have runes loaded at bootstrap and effects applied. Moved logic to NPCManager. 2023-03-29 08:05:34 -04:00
MagicBot 73d2129394 Runes and Booties ID set in constructor for mobs and npcs. 2023-03-28 18:34:42 -04:00
MagicBot 8e236d0780 BootySets generated with cache data loaded at bootstrap. 2023-03-28 18:01:46 -04:00
MagicBot 00d0048fd0 RuneSets generated loaded at bootstrap. 2023-03-28 17:45:58 -04:00
MagicBot f744c64737 Superfluous getter and setters removed. 2023-03-28 17:29:16 -04:00
MagicBot 33334ed13c NPCManager class created. 2023-03-28 17:22:57 -04:00
MagicBot 2e64164251 Bonus code removal. 2023-03-23 06:00:53 -04:00
MagicBot 03060478ee Helper method for finding next heightmap. 2023-03-22 05:41:39 -04:00
MagicBot 94b863a835 Rework of ismacro and iscontinent. 2023-03-21 03:20:57 -04:00
MagicBot ab14173aaa Account for vorringia parenting. 2023-03-21 03:09:39 -04:00
MagicBot eb5e09c3f4 Merge remote-tracking branch 'origin/bugfix-magic-numbers' into post-wipe-merge 2023-03-20 11:20:42 -04:00
MagicBot 1142676c87 Milliseconds are easier to interpret than fractions. 2023-03-16 13:00:22 -04:00
MagicBot 76af946b5f Duration string output. 2023-03-16 12:53:16 -04:00
MagicBot b6b9d7635f Using miliseconds. 2023-03-16 12:48:36 -04:00
MagicBot 68ae4604b0 Added max values to metrics. 2023-03-16 12:40:08 -04:00
MagicBot c06da74eec Nanosecond display. 2023-03-16 12:27:50 -04:00
MagicBot a4029fb6e2 Updated simulation metrics access. 2023-03-16 12:18:42 -04:00
MagicBot 3dbdad2580 Reverted changes. 2023-03-16 11:48:54 -04:00
FatBoy 626967cd86 revert 2023-03-15 18:27:13 -05:00
FatBoy 113d74cffe method to check if zone has players inside it
mob ai check if zone has no players mobs need not perform actions
2023-03-15 17:17:22 -05:00
FatBoy db71635f16 delay between mob actions to reduce synchronized appearance 2023-03-15 13:46:58 -05:00
MagicBot 177175cc1d Conditionals simplified and comment added to method. 2023-03-15 11:59:41 -04:00
MagicBot 5ddc40db3b Comment cleanup in method. 2023-03-15 11:51:28 -04:00
MagicBot 0039785a5a Comment cleanup in method. 2023-03-15 11:47:27 -04:00
MagicBot 867fdee328 Added sanity check for empty power list. 2023-03-15 10:11:01 -04:00
MagicBot f8d499f314 Fixed Concurrent Modification issue. 2023-03-15 09:39:17 -04:00
MagicBot 1945412f5a Remove needs an object not an index value. 2023-03-15 09:25:18 -04:00
MagicBot 16db4d15bc Reformatting of MobCast() method in manager. 2023-03-15 08:52:00 -04:00
MagicBot f97d9844f9 Merge branch 'new-mob-ai' of http://repo.magicbane.com/MagicBane/Server into new-mob-ai
 Conflicts:
	src/engine/ai/MobileFSM.java
2023-03-15 08:49:33 -04:00
MagicBot 7473067329 Reformatting of MobCast() method in manager. 2023-03-15 08:47:22 -04:00
FatBoy 6fe690d592 ranged mobs now stop when in proper attacking range 2023-03-14 20:53:39 -05:00
FatBoy ce381f612c mob ai Chase state completion 2023-03-14 20:34:07 -05:00
FatBoy 8c919bcd2a mob ai Chase state work 2023-03-14 20:04:05 -05:00
FatBoy 531cd52664 mob ai Chase state work 2023-03-14 18:39:59 -05:00
FatBoy dcac0634a8 added Chase to mob ai state enum 2023-03-14 13:32:41 -05:00
MagicBot e7ceeac7b8 Magic numbers are for mental patients. 2023-03-14 13:10:05 -04:00
MagicBot bbbf0c4160 Magic numbers are for mental patients. 2023-03-14 12:59:50 -04:00
MagicBot 584fde5579 Reworked the loading of Mobile powers at bootstrap. 2023-03-13 19:26:16 -04:00
MagicBot 66f0c12790 Reworked the loading of Mobile powers at bootstrap. 2023-03-13 19:19:03 -04:00
FatBoy b310a3eb63 initialize new mobpower list 2023-03-12 18:18:13 -05:00
FatBoy 03a2ead922 mob power list troubleshooting 2023-03-12 18:09:42 -05:00
FatBoy 4f60811f6b mob power list troubleshooting 2023-03-12 18:02:24 -05:00
FatBoy ec19f18d73 mob power list troubleshooting 2023-03-12 17:59:18 -05:00
FatBoy f0eb19c255 mob power list troubleshooting 2023-03-12 17:54:03 -05:00
FatBoy 604a86feb0 mob powerlist initialize directly after mobbases are loaded 2023-03-12 17:49:29 -05:00
FatBoy 3e2fbb700b initialize the static mob power list 2023-03-12 10:53:12 -05:00
FatBoy 863c782f72 moved mob powers list call above mob spawning 2023-03-12 10:50:50 -05:00
FatBoy 83eb1a3370 moved mob powers method to PowersManager 2023-03-12 10:36:38 -05:00
FatBoy 4a06f18d55 Merge remote-tracking branch 'origin/post-wipe-merge' into new-mob-ai 2023-03-12 10:29:00 -05:00
FatBoy e38a04bf23 convert DB lookup of mob powers to static Hashmap lookup 2023-03-12 10:17:25 -05:00
FatBoy 095aee57bc mob spell casting cleanup 2023-03-02 21:51:31 -06:00
FatBoy b000c9b60f generic range method added, mob spell casting cleanup 2023-03-02 21:46:02 -06:00
FatBoy e3f675a42b call for help range added (aggro range of caller) 2023-03-02 19:52:17 -06:00
FatBoy 93a91f9d41 fixed null exception in aggro 2023-03-02 19:11:51 -06:00
FatBoy 6da0df7eb7 duel wield attack system for mobs 2023-03-02 18:46:43 -06:00
MagicBot 0ce94360f7 Magicbox channel support added. 2023-03-02 08:06:17 -05:00
MagicBot 110a05d5a4 bugfix-merge issue in constructor. 2023-03-01 16:12:17 -05:00
FatBoy cfd93f2ca0 cleanup 2023-03-01 13:31:35 -06:00
FatBoy 5830a9ef82 damage calculations cleanup 2023-03-01 13:29:49 -06:00
FatBoy ea4862f76e r8 mobs now have their own mele attack parameters 2023-02-28 19:06:57 -06:00
MagicBot 7d655bc44b Mine serialized loc is the tower loc. No need to store offsets in a table to reconstruct this loc. 2023-02-28 10:43:49 -05:00
FatBoy bfa15ddee0 mob will always target self with "self target" flagged spells 2023-02-27 20:37:11 -06:00
FatBoy 028c49ac84 mob no longer cast spells with effect already on target 2023-02-27 20:22:59 -06:00
FatBoy 396e3dda28 comment 2023-02-27 18:59:08 -06:00
FatBoy e640a5064c Merge remote-tracking branch 'origin/post-wipe-merge' into new-mob-ai 2023-02-27 18:53:49 -06:00
MagicBot f0f91325ba Reset is handled when picking new hotZone. 2023-02-26 07:31:26 -05:00
MagicBot d5c219897d Experience Modifiers added to ConfigManager 2023-02-24 10:45:46 -05:00
MagicBot c51f6b73af ProductionRate added to ConfigManager. 2023-02-24 09:48:15 -05:00
MagicBot cacf67a81c lastUpdate always from top of the hour. 2023-02-24 09:08:45 -05:00
MagicBot 72a610fd0c Seconds remaining calculated only once. 2023-02-24 09:05:47 -05:00
MagicBot bbbd5f8996 Time remaining is from now(). 2023-02-24 08:48:36 -05:00
MagicBot 994db1e131 Class renamed to fix case. 2023-02-24 08:45:03 -05:00
MagicBot 4422182eae Reset logic moved to within method. 2023-02-24 08:34:25 -05:00
MagicBot 7a2c0d3456 Work variable cleanup. 2023-02-24 01:26:39 -05:00
MagicBot 8fde121570 lastHotZoneUpdate instant moved to ZoneManager. 2023-02-24 01:22:00 -05:00
MagicBot 3260582e37 validHotZone filters hotZone count. 2023-02-24 01:04:29 -05:00
MagicBot 52e46380a9 Available hotZones added to devcmd. 2023-02-24 00:49:03 -05:00
MagicBot a572a5fbf9 Available hotZones added to devcmd. 2023-02-24 00:42:34 -05:00
MagicBot 176fdb51da HotZone availability reset at 01am. 2023-02-24 00:32:18 -05:00
MagicBot 6a948fbe2e lastChanged is unused as cannot omit mines from map. 2023-02-24 00:09:57 -05:00
MagicBot 2ef60933b2 reset added to ./hotzone 2023-02-23 17:47:22 -05:00
MagicBot 85798822cc Force serialize mines. 2023-02-23 17:37:14 -05:00
MagicBot 0dad677bc0 hotzone dev command updated. 2023-02-23 17:14:34 -05:00
MagicBot 4c625cdfbf HotZone minLevel enforced. 2023-02-23 16:46:55 -05:00
MagicBot 6912a06351 MB_HOTZONE_MIN_LEVEL added to ConfigManager 2023-02-23 16:38:23 -05:00
MagicBot 2e576b3065 Increment only when a hotZone is set. 2023-02-22 17:35:30 -05:00
MagicBot dc23755081 Use of Instant to track hotzone refresh times. 2023-02-22 17:25:48 -05:00
MagicBot 8ae973f5f4 Refactored usage of HotZone; added cycle counter. 2023-02-22 16:40:11 -05:00
MagicBot 6ac1911770 Code cleanup; reworked conditional. 2023-02-22 08:38:18 -05:00
MagicBot f723e35785 Reformatted file. 2023-02-22 08:34:10 -05:00
MagicBot 4db45a9cbf Handler created for cityDataMsg.java 2023-02-22 08:23:13 -05:00
MagicBot d9125566f7 Drop rates are set by ConfigManager 2023-02-19 08:39:28 -05:00
MagicBot 70ca0a1df3 Refactored caching of drop rates. Whittling away at MBServerStatics. 2023-02-19 08:25:58 -05:00
MagicBot 3fd2f519eb Merge remote-tracking branch 'origin/post-wipe-merge' into bugfix-config-manager 2023-02-19 07:53:03 -05:00
MagicBot 5af1687f19 Maintenance hour and bot/game version config entries removed. 2023-02-19 07:48:50 -05:00
FatBoy 10cd3636f7 hotzone cleanup 2023-02-18 15:04:34 -06:00
FatBoy 38e25bf132 hotzone duration config, non repeating hotzones 2023-02-18 14:30:15 -06:00
FatBoy ffe0ecd488 name change 2023-02-18 14:02:35 -06:00
FatBoy 61df76c80a mines default to not be claimed at hour 1400 2023-02-18 13:58:49 -06:00
FatBoy 82249a6d6d drop rates calculated via magicbane.conf on server boot 2023-02-18 13:53:27 -06:00
FatBoy ecaf56f647 maintenance to run on specific day of week only 2023-02-18 10:54:11 -06:00
MagicBot 8dc647fb4f Bugfix: empty guild not errant 2023-02-18 09:30:39 -05:00
MagicBot 7b16c55dc6 Teleport to the target gate. 2023-02-15 13:49:34 -05:00
MagicBot f1a652122c Portals configured in the runegate constructor. 2023-02-15 13:38:13 -05:00
MagicBot 1e0738594a More than one row in result set is needed. 2023-02-15 13:10:08 -05:00
MagicBot eac2e3f42b Portal array list now filled at bootstrap. 2023-02-15 12:29:38 -05:00
MagicBot 2c0a46e652 Runegates and portals now loaded from database. 2023-02-15 12:12:30 -05:00
MagicBot 9fa83fc359 PortalType defined to supply offset and effect bitflag for Runegates. 2023-02-15 09:18:02 -05:00
MagicBot 97948caa48 Merge remote-tracking branch 'origin/post-wipe-merge' into feature-db-agnostic-realms 2023-02-11 14:15:31 -05:00
MagicBot 9ff4d7c6dc bugfix: Prior claims are no longer released when claiming a new mine. 2023-02-11 13:29:12 -05:00
MagicBot cbe82bb95a Output cleanup in ./realminfo. 2023-02-11 07:11:00 -05:00
MagicBot 6ad4d87487 Merge remote-tracking branch 'origin/post-wipe-merge' into feature-db-agnostic-realms 2023-02-10 08:56:37 -05:00
MagicBot 6c138a1515 Bugfix: effects without associated powers on login. 2023-02-10 08:49:24 -05:00
FatBoy b8be399df7 mob AI testing 2023-02-08 20:37:31 -06:00
FatBoy 2462cc13dd guard static power load correct placement 2023-02-08 20:09:56 -06:00
FatBoy eddedbee5b guard static power load 2023-02-08 19:39:52 -06:00
FatBoy 58c4ece887 10 second delay min between casts & mobs no longer cast beneficial spells on players 2023-02-08 19:38:35 -06:00
MagicBot f64c059f26 Color map built after realms loaded. 2023-02-08 09:27:46 -05:00
MagicBot 5cfb451041 Realms refactored to pull map color from database not hardcoded enum. 2023-02-08 09:09:54 -05:00
FatBoy 8e457abe6d mage guards once again have powers 2023-02-07 21:41:48 -06:00
FatBoy d837af7c33 static powers update 2023-02-07 20:57:56 -06:00
MagicBot abd8697d56 Testing realm renumbering 2023-02-07 11:13:55 -05:00
FatBoy 77b3213e79 spire effects extend to siege bounds 2023-02-04 21:44:16 -06:00
FatBoy 7817b4cd49 destroyed BoW no longer count towards total available assets 2023-02-04 21:43:53 -06:00
FatBoy ce02a1ea65 mob mele damage formula update 2023-02-04 21:26:04 -06:00
FatBoy 15580f478f mob casting logic upgrade 2023-02-02 20:34:25 -06:00
FatBoy b2ad7e0478 mob casting logic upgrade 2023-02-02 19:44:23 -06:00
FatBoy 642cb3fdcf Durability cleanup 2023-01-31 08:34:45 -05:00
MagicBot a0b805698e Merge remote-tracking branch 'origin/bugfix-armorpiercing' into post-wipe-merge 2023-01-31 07:56:30 -05:00
MagicBot 879516632b Merge remote-tracking branch 'origin/bugfix-durability-enchantments' into post-wipe-merge 2023-01-31 07:56:20 -05:00
FatBoy 8e692ea21e Durability repair fix 2023-01-29 19:06:54 -06:00
FatBoy 727309a706 finalized cleanup 2023-01-29 15:10:37 -06:00
FatBoy c0e3fcffd1 finalized cleanup 2023-01-28 18:06:51 -06:00
FatBoy 61bdda7886 combat to include armor piercing calculation 2023-01-28 17:57:40 -06:00
FatBoy 50c2972f99 server now accounts for durabilty enchants 2023-01-28 15:36:10 -06:00
FatBoy f98eaa4d6b fixed boon stat application 2023-01-28 12:11:24 -06:00
FatBoy cf801ed7f6 added check for double mines 2023-01-28 10:50:44 -06:00
FatBoy b2fd5990af added check for double mines 2023-01-27 00:02:05 -06:00
MagicBot ab8ee542c6 Hotpatch for shroudbourne hot issue. 2023-01-22 23:52:16 -05:00
MagicBot 3cf6f28d83 Only returning inactive mines in list. 2023-01-21 14:59:37 -05:00
MagicBot e31f320b45 Comment and clarity cleanup. 2023-01-21 12:52:52 -05:00
MagicBot fa0cfa5191 More context in method names. 2023-01-21 12:27:33 -05:00
MagicBot d425050387 Resetting tracking variables when a mine tower is destroyed. 2023-01-21 11:58:08 -05:00
MagicBot 39f3e4ed2c Mine window methods moved to HourlyJobThread and made static. 2023-01-21 11:11:34 -05:00
MagicBot 1ed51c8e02 Lambda syntax sugar 2023-01-21 10:54:51 -05:00
MagicBot 663aafb4c8 Removed leftover code from message pump. 2023-01-21 10:13:00 -05:00
MagicBot b90b8ca422 Protocol handler created for ArcMineChangeProductionMsg. 2023-01-21 10:11:28 -05:00
MagicBot 0e3fdcd8c2 Audit class moved to correct package. 2023-01-21 10:04:34 -05:00
MagicBot 36cb532b20 Handler created for ArcOwnedMinesListHandler. 2023-01-21 09:47:53 -05:00
MagicBot 3cec1b4466 Class cleanup. 2023-01-21 09:39:53 -05:00
MagicBot 825f41e469 rename method to isEmptyGuild() so as not to confuse with GuildState. 2023-01-21 09:28:30 -05:00
MagicBot 2fac480117 Shrines now decay at midnight not every reboot. 2023-01-21 08:53:57 -05:00
MagicBot 2c3aa6e7e5 Cleanup of restriction logic. 2023-01-21 08:42:43 -05:00
MagicBot 78f7503558 Changing your WOO outside the NA window is allowed. 2023-01-21 08:28:16 -05:00
MagicBot 6a1b461735 Refactor WOO change timer mechanics to use the same system as the mine claims. Moved both resets to the hourly job. 2023-01-21 08:18:40 -05:00
MagicBot de41702914 Protocol handler created for ArcMineWindowAvailableTimeMsg. 2023-01-21 07:24:50 -05:00
MagicBot 21cf22f4cf Sanity check added for slider. 2023-01-20 14:28:29 -05:00
MagicBot 7539505956 Mine claims released upon death. 2023-01-20 13:54:36 -05:00
MagicBot c6e0680583 Mine claims released when leaving world. 2023-01-20 13:45:46 -05:00
MagicBot 4a946b6b3a Mine claims released when leaving guild. 2023-01-20 13:38:54 -05:00
MagicBot 0719fa9953 No warehouse PopUp feedback. 2023-01-20 13:35:57 -05:00
MagicBot 14adea8b2e Null check added to releaseAllMines. 2023-01-20 12:41:44 -05:00
MagicBot 3ec16d04d6 Prior claims are released upon a new claim. 2023-01-20 12:18:11 -05:00
MagicBot 1c228df4a8 Revert method refactor. 2023-01-20 11:24:37 -05:00
MagicBot 592caa40ea Serializing nation mine times. 2023-01-20 10:34:57 -05:00
MagicBot 20dba75602 Mine limits based upon nation tree rank. 2023-01-20 10:17:34 -05:00
MagicBot c82a414567 Serialization tweak. 2023-01-20 08:38:13 -05:00
MagicBot 1c9e22d964 Mine.wasClaimed added to ./info dev command. 2023-01-20 08:31:20 -05:00
MagicBot f7f71ef7cf DevCmd and class name should match. 2023-01-20 08:29:45 -05:00
MagicBot 1a7003ce59 Serialized mine open time adjusted if the mine was claimed during this cycle. 2023-01-20 08:12:53 -05:00
MagicBot 889e969c44 Mine cycle is reset at 01:00hrs. 2023-01-20 08:06:14 -05:00
MagicBot f51bfc6d2b Mines can only be claimed once a cycle. 2023-01-20 07:57:42 -05:00
MagicBot 715fdeec9e Merged the two errant guild methods. 2023-01-20 07:54:00 -05:00
MagicBot c57ae6d916 Removal of session tracking. 2023-01-20 07:50:37 -05:00
MagicBot bc1fc5748c Mine windows are set by the nation's WOO. 2023-01-19 17:41:38 -05:00
MagicBot ad9908fda1 Nation cannot be errant. 2023-01-19 17:34:45 -05:00
MagicBot cbd9021cfa Setting last claimer properly during claim. 2023-01-19 17:32:11 -05:00
MagicBot 49af4b8920 Update to system mine claim message. 2023-01-19 17:00:27 -05:00
MagicBot 9442bb1d39 Debugging code removed. 2023-01-19 16:49:36 -05:00
MagicBot efa504a714 Debugging isErrant() 2023-01-19 16:38:39 -05:00
MagicBot ea34418f2d Cleanup of duplicate errant guild definitions. 2023-01-19 16:22:37 -05:00
MagicBot 8ff0216243 Opening mines at the end of bootstrap. 2023-01-19 16:12:18 -05:00
MagicBot 332c860def Errant mines active at startup. 2023-01-19 15:50:49 -05:00
MagicBot 038cac8aed Errant mines active at startup. 2023-01-19 15:45:13 -05:00
MagicBot 00877279bc Errant mines active at startup. 2023-01-19 15:43:19 -05:00
MagicBot da073feb08 Errant mines active at startup. 2023-01-19 15:42:18 -05:00
MagicBot adae9a9ce1 Errant mines active at startup. 2023-01-19 15:39:49 -05:00
MagicBot 53a6b09099 Accessor level change 2023-01-19 15:22:12 -05:00
MagicBot e78d1f4ac4 OwningGuild should be set to errant not null. 2023-01-19 14:43:08 -05:00
MagicBot 11e5439e1d Set owner to null when invalid claim occurs. 2023-01-19 14:15:43 -05:00
MagicBot 78cdb6967a Message when claiming mine succeeds. 2023-01-19 14:09:15 -05:00
MagicBot 79d05f1fb2 Serialize current time for all active mines regardless of claim status. 2023-01-19 13:59:52 -05:00
MagicBot 2a140a6ce1 Serialize current time for all active mines regardless of claim status. 2023-01-19 13:57:43 -05:00
MagicBot a2bdfcc031 Cleanup of logic. 2023-01-19 13:47:11 -05:00
MagicBot 0f2ca3e62e Cleanup of logic. 2023-01-19 13:46:33 -05:00
MagicBot 55e6ca2d41 Error message when claiming a mine fails. 2023-01-19 13:36:16 -05:00
MagicBot 837c2fa1f9 Consolidating handling of different session. 2023-01-19 13:27:26 -05:00
MagicBot c596aa5a01 Unused variable removed. 2023-01-19 12:55:17 -05:00
MagicBot af38dd8fb9 Should not be sending messages to players here. 2023-01-19 12:48:54 -05:00
MagicBot dab9097680 Must wait for a mine window to close to change your guild's WOO to it. 2023-01-19 12:41:32 -05:00
MagicBot 04fc0d6815 Removed Bonus code 2023-01-19 12:36:01 -05:00
MagicBot 4eb1350c3b Rename for clarity 2023-01-19 12:21:29 -05:00
MagicBot 9e7cbdc2d3 bugfix: guilds cannot be null only errant. 2023-01-19 12:19:37 -05:00
MagicBot c89b60221e Extracted open/close logic to method. Run at startup. 2023-01-19 11:21:08 -05:00
MagicBot b88a10d509 Removed vestigial db handler method. 2023-01-19 10:50:22 -05:00
MagicBot 6672f750d9 Initial refactor: deleted all old code and replaced with something sensible. Driven from the guild's mine hour instead of calculating dates. 2023-01-19 10:38:49 -05:00
MagicBot 5ff4703b14 Background thread to monitor admin events. 2023-01-16 06:35:06 -05:00
MagicBot 87dfc968aa Updated admin events to read 2023-01-16 06:24:24 -05:00
MagicBot fba041db5e Method created to send Admin Log Updates to users. 2023-01-16 06:13:44 -05:00
MagicBot cad78c55bd Typo in enum 2023-01-16 06:00:43 -05:00
MagicBot 0c4187faeb ADMINLOG added to ConfigManager 2023-01-16 05:54:08 -05:00
MagicBot c2a84ed31b Starting work on output of admin log. 2023-01-16 05:50:59 -05:00
MagicBot b6506ac3f1 Starting work on output of admin log. 2023-01-16 05:41:31 -05:00
MagicBot 920fcd4b8e Generic ChatChannelHandler created. 2023-01-16 05:28:35 -05:00
MagicBot c59c0629a7 Generic ChatChannelHandler created. 2023-01-16 05:23:31 -05:00
MagicBot 8fbd408fb4 Admin log channel created. 2023-01-16 05:19:02 -05:00
MagicBot 4e6411e555 Merge remote-tracking branch 'origin/post-wipe-merge' into MagicBot-adminlog 2023-01-16 05:11:51 -05:00
MagicBot d70305b0b6 Merge branch 'bugfix-siege-asset-placement' into post-wipe-merge
# Conflicts:
#	src/engine/net/client/handlers/PlaceAssetMsgHandler.java
2023-01-15 23:45:12 -05:00
MagicBot 0469754d5d Bugfix: needs city parent not current zone to pick up siege bounds. 2023-01-15 13:00:26 -05:00
MagicBot 7cb0e5f6b2 Retrieve Admin Log events from database as a map. 2023-01-15 11:29:24 -05:00
MagicBot cec70b3b64 Tweak of column names and Event Strings. 2023-01-15 10:55:16 -05:00
MagicBot 21ff024bf8 Admin login events captured. 2023-01-15 10:34:56 -05:00
MagicBot 3f700f57a7 Admin command usages logged to database. 2023-01-15 10:01:11 -05:00
MagicBot 68294baae6 Cleanup of scope issue when creating city objects. 2023-01-15 08:57:54 -05:00
MagicBot 526c078978 Collision check extracted to method. 2023-01-15 08:31:56 -05:00
MagicBot f3fee3140a Move siege validation out of the generic ValidateBuildingPlacement method. 2023-01-15 08:18:23 -05:00
FatBoy e0af139b24 deed no longer is taken after failed placement 2023-01-14 18:56:43 -06:00
FatBoy 313c13c588 corrected error message ID numbers 2023-01-14 18:36:51 -06:00
MagicBot 8ef5cb4e22 Rework of validation checks. 2023-01-14 16:31:58 -05:00
MagicBot 2643be456e Moved validation check to before asset creation. 2023-01-14 15:34:23 -05:00
MagicBot 29c6d6cd8e Counter scope issue resolved. 2023-01-14 15:23:02 -05:00
MagicBot c84fb60177 Errant import removed. 2023-01-14 15:08:18 -05:00
MagicBot d8dad9f087 Extract siege limits validation method. 2023-01-14 15:07:35 -05:00
MagicBot 45f94c736a Excess whitespace. 2023-01-14 14:29:33 -05:00
MagicBot 7a670ffdbf Appropriate error messages for BOW limits. 2023-01-14 13:35:37 -05:00
FatBoy 325c8b8254 siege asset placement reliant on attcker/defender maximums 2023-01-14 11:57:30 -06:00
MagicBot 90335355b7 Less verbose error message 2023-01-13 15:07:53 -05:00
MagicBot 4c10e01539 Reset time calculation updated. 2023-01-13 14:37:53 -05:00
MagicBot a76534f0af Mesh set properly when errant mine loaded. 2023-01-13 14:34:04 -05:00
MagicBot a06420eae3 Early exit for errant mines at bootstrap. Wtb method extract. 2023-01-13 14:19:01 -05:00
MagicBot 48d435f2c1 Early exit for errant mines. 2023-01-13 14:12:22 -05:00
MagicBot 43380962cc Early exit for errant mines. 2023-01-13 14:04:14 -05:00
MagicBot 14247715fd Removed unused EffectiveDate 2023-01-13 13:50:52 -05:00
MagicBot 7282868eac Errant mines are errant. 2023-01-13 12:09:30 -05:00
MagicBot b30e35f465 Refresh mine when destroyed. 2023-01-13 11:52:50 -05:00
MagicBot d9352b6d34 Refresh mine when destroyed. 2023-01-13 11:46:26 -05:00
MagicBot 26dcccad81 Errant mines now change owner in database. 2023-01-13 11:24:41 -05:00
MagicBot d0cf94dbf9 HandleEndMineWindow will bump the date for us. 2023-01-13 09:13:53 -05:00
MagicBot f61bb925f8 Cleanup of NextMindWindow logic. 2023-01-13 09:01:38 -05:00
MagicBot 5929d5dd56 Cleanup of NextMindWindow logic. 2023-01-13 08:43:20 -05:00
MagicBot 5a19507f53 Merge remote-tracking branch 'origin/refinement-fix' into post-wipe-merge 2023-01-13 08:25:34 -05:00
MagicBot 5c3ea2c4c3 Merge remote-tracking branch 'origin/world-announcements' into post-wipe-merge 2023-01-13 08:25:19 -05:00
FatBoy 1fef5e7c05 refund points from lost spells 2023-01-12 21:44:52 -06:00
FatBoy 743e1f150d refund points from lost spells 2023-01-12 21:35:29 -06:00
FatBoy 7c983d04a3 refine stat point check 2023-01-12 20:35:25 -06:00
FatBoy 73edd8d932 discipline and godly drop messages added 2023-01-11 21:58:24 -06:00
FatBoy cd0e31f39d discipline and godly drop messages added 2023-01-11 21:02:18 -06:00
MagicBot 9e6c96a487 Merge remote-tracking branch 'origin/refinement-fix' into post-wipe-merge 2023-01-11 21:29:03 -05:00
FatBoy 523e83a49c Merge remote-tracking branch 'origin/post-wipe-merge' into refinement-fix 2023-01-11 20:10:42 -06:00
FatBoy c9972962d1 check for powers needing skill 2023-01-11 19:52:38 -06:00
MagicBot 4b8e0cb041 Bump old opendate during reboot to current +1 when mine window has passed. 2023-01-11 16:27:01 -05:00
MagicBot 3ec985e3d9 bugfix: window should not end for a mine not opened. 2023-01-11 15:00:52 -05:00
MagicBot af7d801388 bugfix: not overriding mine open date on boot. 2023-01-10 12:27:54 -05:00
MagicBot 98470d4b1a Added help for #dev subcommands 2023-01-10 08:51:00 -05:00
MagicBot 81b7259423 Added remote console output. 2023-01-10 08:34:11 -05:00
MagicBot d6a505fd00 Added lastout sub command. 2023-01-09 10:22:35 -05:00
MagicBot a71bf4330b Redirecting output via the shell. 2023-01-09 10:12:45 -05:00
MagicBot 72cbcb13fc Change to response string after exec() 2023-01-09 10:09:43 -05:00
MagicBot 8904fb8828 Removed file redirect; better to do that within the shell. 2023-01-09 10:06:37 -05:00
MagicBot 93b33ce37e Capturing output of remote exec() to file. 2023-01-09 09:58:51 -05:00
MagicBot 9ce06da271 Capturing output of remote exec() to file. 2023-01-09 09:43:03 -05:00
MagicBot a460a201e1 Logging string contains exec command. 2023-01-09 09:07:40 -05:00
MagicBot 1493d3ad45 Support for more than one argument. 2023-01-09 02:01:29 -05:00
MagicBot ee676a08ea Better logging and error reporting. 2023-01-09 01:59:18 -05:00
MagicBot 0c87410018 Using ProcessBuilding instead of exec() 2023-01-09 01:47:59 -05:00
MagicBot 9268fa8b01 Using ProcessBuilding instead of exec() 2023-01-09 01:39:14 -05:00
MagicBot eea13b22a0 Using ProcessBuilding instead of exec() 2023-01-09 01:32:57 -05:00
MagicBot fe87253a86 Fixed argument passing to unix runtime. 2023-01-09 01:22:11 -05:00
MagicBot 701bf85c8b Fixed argument passing to unix runtime. 2023-01-09 01:14:54 -05:00
MagicBot d4d24c9443 Fixed argument passing to unix runtime. 2023-01-09 01:11:27 -05:00
MagicBot 23f44f1fb8 Command name is restart not reboot. 2023-01-09 01:01:43 -05:00
MagicBot 9a2503b9c3 Merge remote-tracking branch 'origin/MagicBot_DevCmds' into post-wipe-merge 2023-01-09 00:44:08 -05:00
MagicBot 825d1897cb Removal of vestigial string restriction.
Command renamed to #dev
2023-01-08 17:18:57 -05:00
MagicBot c002eec8bd Consolidated all into one command #dev. 2023-01-08 12:44:16 -05:00
MagicBot 0fd5d09e3e Command added to remote build on Dev server. 2023-01-08 12:27:40 -05:00
MagicBot e9850a51bc Merge remote-tracking branch 'origin/minetime_bugfix' into post-wipe-merge 2023-01-08 07:07:12 -05:00
MagicBot df09b6e38b Removed 30 lines of logic that had no business in a result set constructor. 2023-01-07 13:49:31 -05:00
MagicBot 52d3d8ee3a Not adding an extraneous day each reboot. 2023-01-07 13:26:47 -05:00
MagicBot 7bc09d86bd Saving WOO timer to database for reboot persist. 2023-01-07 12:31:22 -05:00
MagicBot 860d4d9b31 Bugfix: setting lastwoocheck field after update. 2023-01-07 11:31:41 -05:00
MagicBot 4b5ce5bdb1 15hr WOO restriction check added. 2023-01-07 11:22:38 -05:00
MagicBot 302358e31c Storing lastWooEditTime for guilds in obj_guild table. Requires Schema Change. 2023-01-07 11:03:07 -05:00
MagicBot 83b514a05f Class cleanup. 2023-01-07 10:35:00 -05:00
MagicBot 2f22b3b91b Protocol Handler created for ArcMineWindowChangeMsg 2023-01-07 09:44:51 -05:00
MagicBot f979a7b694 Merge remote-tracking branch 'origin/nation-sub-limits' into post-wipe-merge 2023-01-07 09:01:39 -05:00
MagicBot 78be9bfd4f Merge remote-tracking branch 'origin/sale-item-value' into post-wipe-merge 2023-01-07 09:01:29 -05:00
FatBoy 5f0803eec4 nation sub limits added 2023-01-01 21:56:49 -06:00
FatBoy 6cf7b88025 NPCs buy at base cost only 2023-01-01 15:53:05 -06:00
FatBoy d3e05ec247 subs limited to cap rank 2023-01-01 15:48:17 -06:00
MagicBot 5853dc802d Merge pull request 'Fix for weaponspeed effect modifier.' (#19) from EffectModifierFix into master
Reviewed-on: http://repo.magicbane.com/MagicBane/Server/pulls/19
2022-12-30 13:13:15 +00:00
MagicBot a35c5ef3cc Fix for weaponspeed effect modifier. 2022-12-30 07:39:23 -05:00
MagicBot dfd6beb988 Merge pull request 'bugfix-flightfix' (#18) from bugfix-flightfix into master
Reviewed-on: http://repo.magicbane.com/MagicBane/Server/pulls/18
2022-08-28 11:43:42 +00:00
MagicBot ebeda7d7ba Players grounded properly when losing flight. 2022-08-27 17:14:50 -04:00
MagicBot 5fe518f8a1 Players grounded properly when losing flight. 2022-08-27 16:44:05 -04:00
MagicBot ab82529a4b Players grounded properly when losing flight. 2022-08-27 16:31:07 -04:00
MagicBot 9988863a85 Merge pull request 'treb-range-fix' (#17) from treb-range-fix into master
Reviewed-on: http://repo.magicbane.com/MagicBane/Server/pulls/17
2022-08-24 12:22:20 +00:00
MagicBot 8a3c3d7571 Merge branch 'master' into treb-range-fix 2022-08-24 12:22:09 +00:00
MagicBot 3ae1c2ebb2 Merge pull request 'fixed mob ATR' (#16) from mob-atr-fix into master
Reviewed-on: http://repo.magicbane.com/MagicBane/Server/pulls/16
2022-08-24 12:21:25 +00:00
FatBoy 5ab4eb5b32 run siege minion after load 2022-08-23 15:03:35 -05:00
FatBoy 09d0046baf run siege minion after load 2022-08-23 14:59:27 -05:00
FatBoy 865c50f984 fixed trebs 2022-08-23 14:25:24 -05:00
FatBoy f0b80f8eb3 fixed mob ATR 2022-08-15 18:21:34 -05:00
MagicBot 77aa14b7da SDR added to magic bucket numbers. 2022-08-04 16:10:06 -04:00
MagicBot e6af752c6d Hotfix: bane null check order. 2022-07-27 08:56:45 -04:00
MagicBot 2436579752 Merge pull request 'release-1.3' (#13) from release-1.3 into master
Reviewed-on: http://repo.magicbane.com/MagicBane/Server/pulls/13
2022-07-13 17:55:55 +00:00
MagicBot aef34d434a README update. 2022-07-13 13:49:28 -04:00
FatBoy 2922fdf623 changed mob casting rate from 1/3 to 1/10 2022-06-26 20:07:18 -05:00
FatBoy 3f35df3916 fixed crashing bug form my own mistake 2022-06-26 20:04:14 -05:00
FatBoy e79a907f3b mobs no longer always hit, mob powers now send power message in chat window 2022-06-26 20:01:05 -05:00
MagicBot 45ab56e98d More detail when missing a config entry. 2022-06-26 11:05:37 -04:00
MagicBot 246bfe59cb More detail when missing a config entry. 2022-06-26 10:47:08 -04:00
MagicBot afa74ba6fe Optimized imports. 2022-06-23 18:25:45 -04:00
MagicBot 02ed3ff778 Removed unused imports. 2022-06-23 15:51:37 -04:00
MagicBot 14d1c7ccbb Merge branch 'update-config' into release-1.3 2022-06-23 15:48:14 -04:00
MagicBot 0f5b0493b9 Merge remote-tracking branch 'origin/pet-guard-damage-fix' into release-1.3 2022-06-23 15:47:52 -04:00
MagicBot efab188ebd Merge remote-tracking branch 'origin/flight-fix-cleanup' into release-1.3 2022-06-23 15:47:32 -04:00
MagicBot eaaa5bf717 Merge branch 'enter-siege-bounds' into release-1.3 2022-06-23 15:47:16 -04:00
FatBoy 4812068982 changed onEnter for city to refernce siege bounds 2022-06-12 13:53:33 -05:00
FatBoy 3189ac0d56 mob powers now scale based on their level 2022-06-09 18:55:16 -05:00
FatBoy f8a9262fc5 changed location of mob power lookup 2022-06-09 18:22:30 -05:00
FatBoy 9ce7e1c5ca mobs and guards can cast their power sets 2022-06-08 21:09:59 -05:00
FatBoy 2e5c05d932 work on mob casting 2022-06-08 19:56:09 -05:00
FatBoy 56ad9d7907 changed max pet damage scale 2022-06-07 20:30:02 -05:00
FatBoy 65840e89b6 scaled damage range for pets to be based on level 2022-06-07 20:27:45 -05:00
FatBoy 69c78fa5a6 added power casting for pets who have DB entires 2022-06-07 20:24:11 -05:00
FatBoy 3c610a8564 Fix to mob/guard static power lookup 2022-06-06 19:21:39 -05:00
MagicBot 4f2954041d Removed unused code. 2022-06-06 04:48:04 -04:00
MagicBot 24d96f24b2 Moving Fname regex to config 2022-06-06 04:28:44 -04:00
MagicBot ad4678ab3c Version info pulled from config. 2022-06-06 03:26:34 -04:00
MagicBot d5d957a910 bugfix: ignore case with boolean config values. 2022-06-06 03:21:27 -04:00
MagicBot d89cd97eb6 Missing config suggests outdated MagicBox. 2022-06-06 03:13:07 -04:00
FatBoy 16e4f3fa7a fix to abandoning tree as nation check 2022-06-05 21:14:10 -05:00
FatBoy 657cc0cf9e Cannot Abandon Tree if You Own a Bane : Cannot Abandon Tree if you are a nation 2022-06-05 20:55:57 -05:00
FatBoy 45234d24ca stupid error fixed (!=) 2022-06-05 17:36:30 -05:00
FatBoy cd55105b28 spire effects extend to siege bounds 2022-06-05 17:27:40 -05:00
FatBoy d9b5544894 added message to player trying to delete asset during active siege 2022-06-05 17:12:56 -05:00
FatBoy a62617324d added message to player trying to delete asset during active siege 2022-06-05 17:03:44 -05:00
FatBoy 8665011457 can no longer delete building during active bane 2022-06-05 16:56:54 -05:00
MagicBot 18bf19502f Spire effects reach to siege bounds. 2022-06-05 17:02:44 -04:00
MagicBot 168a4f2a17 24.3 placement ruleset.
512/576/1040 grid/zone/siege
2022-06-05 16:56:01 -04:00
MagicBot d3f77d10c5 Flight fix re-enabled. 2022-06-04 13:45:09 -04:00
MagicBot bf87894f8c Removed flight job bonus code. 2022-06-04 13:30:35 -04:00
MagicBot 59cebf9e9b Auditmobs hashset for to deleted as it was being populated once a second but never used. 2022-06-03 12:28:56 -04:00
FatBoy 87e18351be moved flight check to MovementManager 2022-06-03 08:42:08 -05:00
FatBoy 94bc41ab9d added flight check 2022-06-02 21:01:18 -05:00
FatBoy c795238231 Changed if/else tunnel to switch 2022-06-02 20:39:52 -05:00
Bardiel 43c32ce329 Merge pull request 'Added equipsets for naked guards' (#10) from guard-equipsets into master
Reviewed-on: http://repo.magicbane.com/MagicBane/Server/pulls/10
2022-06-01 21:54:22 +00:00
Bardiel 4f60640ddf Equipment Set for Forest Mage guard added
Equipment Set for Templar guard added
Equipment Set for Aracoix Magister guard added
2022-06-01 13:58:23 -07:00
Bardiel f87d39b51c Equipment Set for Forest Mage guard added 2022-06-01 13:33:24 -07:00
MagicBot 0475cc1e66 Merge pull request 'bugfix-citysizing' (#7) from bugfix-citysizing into master
Reviewed-on: http://repo.magicbane.com/MagicBane/Server/pulls/7
2022-05-22 13:07:27 +00:00
MagicBot 79702eab1a Merge branch 'master' into bugfix-citysizing 2022-05-22 13:07:09 +00:00
MagicBot 261e3a6c49 Merge pull request 'Bugfix for damage absorbers.' (#6) from bugfix-absorber into master
Reviewed-on: http://repo.magicbane.com/MagicBane/Server/pulls/6
2022-05-22 13:04:37 +00:00
MagicBot e8b7d63a59 Bugfix for damage absorbers. 2022-05-13 15:25:04 -04:00
MagicBot 638985d332 Revert grid sizing to 576/640 per 2018 commit. 2022-05-13 13:38:52 -04:00
MagicBot 894427af72 Using original MB values when sizing city terraform. 2022-05-12 15:33:43 -04:00
MagicBot e6bbb53ac8 bugfix: Channel ID update. 2022-05-11 15:37:46 -04:00
MagicBot cb279a5d5a bugfix: Pass MB_WORLD_PORT to isPortInUse() 2022-05-10 11:56:06 -04:00
MagicBot 2af224c90f bugfix: MagicBot needs to autodetect public ip for #status to work. 2022-05-10 11:41:45 -04:00
MagicBot 8faec41487 Merge pull request 'bugfix-MagicBoxlocalhost' (#3) from bugfix-MagicBoxlocalhost into master
Reviewed-on: http://repo.magicbane.com/MagicBane/Server/pulls/3
2022-05-03 16:43:47 +00:00
MagicBot 93a8274b7b Merge branch 'master' into bugfix-MagicBoxlocalhost 2022-05-03 16:43:28 +00:00
MagicBot d8fd03b287 Merge pull request 'Fixes issue where max allowed keyclones was hardcoded and not pulled from the config.' (#2) from bugfix-keycloneAudit into master
Reviewed-on: http://repo.magicbane.com/MagicBane/Server/pulls/2
2022-05-03 16:40:16 +00:00
MagicBot 3c7e1827f2 Merge branch 'master' into bugfix-keycloneAudit 2022-05-03 16:39:57 +00:00
MagicBot 24057e6412 Logging when network autoconfig occurs 2022-05-03 12:23:45 -04:00
MagicBot a59dbdc4e1 Fixes bug where public_addr was autoconfigured irrespective of not being 0.0.0.0 2022-05-03 12:02:05 -04:00
MagicBot 8105544894 Update 'README.md' 2022-05-02 18:07:53 +00:00
MagicBot 3456e14d04 Fixes issue where max allowed keyclones was hardcoded and not pulled from the config. 2022-05-02 07:35:15 -04:00
MagicBot c45491a3d2 Merge pull request 'Feature-AutoRegister' (#1) from Feature-AutoRegister into master
Reviewed-on: http://repo.magicbane.com/MagicBane/Server/pulls/1
2022-04-30 18:54:04 +00:00
MagicBot 4205ebe384 SQL caretfix 2022-04-30 14:42:09 -04:00
MagicBot 890f9ad49d SQL caretfix 2022-04-30 14:38:57 -04:00
MagicBot bf3517ebb3 More logging 2022-04-30 14:30:47 -04:00
MagicBot 459d61b20a Autoregister plugged in. 2022-04-30 14:19:33 -04:00
MagicBot 0beb75c9fb Handler added to create single account 2022-04-30 14:11:35 -04:00
MagicBot 2997e5bda2 Feature needs a new configuration entry. 2022-04-30 14:05:05 -04:00
MagicBot a6d5240a66 Update 'README.md' 2022-04-30 17:41:09 +00:00
MagicBot e1b3fa0438 Update 'README.md'
Added info about scan-when-commit pain.
2022-04-30 17:39:37 +00:00
MagicBot bb2bdce93b Update 'README.md'
Edit to README
2022-04-30 13:44:03 +00:00
MagicBot bbfdde57a3 Initial Repository Push 2022-04-30 09:41:17 -04:00
MagicBot d4eef9097a Update to README.md and LICENSE 2022-04-30 09:36:18 -04:00
MagicBot d8a90902b5 Initial commit 2022-04-30 13:11:10 +00:00
734 changed files with 19223 additions and 40616 deletions
@@ -1,93 +0,0 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Contents 9 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
5 0 obj
<<
/Contents 10 0 R /MediaBox [ 0 0 612 792 ] /Parent 8 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
6 0 obj
<<
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
>>
endobj
7 0 obj
<<
/Author (\(anonymous\)) /CreationDate (D:20261002192444-05'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20261002192444-05'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>>
endobj
8 0 obj
<<
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
>>
endobj
9 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 941
>>
stream
GatUr>Aoub'S,*</'_X..>3Tc8b\HlXgC`s?!-jL(Y>1->Hk)D''8#s-F]g]87dYk"`lBT3Tm^l!8i6Wp6SbZmo,V/"V??KXrni.Jb0?*VACm%_*0WB_)-/JG0FmF<.87/$][#s;b/E#9aJSZ9bW8!Os#RoH'6hOBa1>.18?;%&=,F[e8QkpCIn\g0-PaqoErUce;Ja\%pp`nj8sgNOibjW9mK;P96:guFagtKR<p39G*c=nDt\7t*J][PodK(NAs\IYM;Qm[9kJLaraG.8bdXg>$BAg<#u>Y;4_##8/)UJT;t+&]+cfCjE7T^a9](jOG]:\rKJ/Lr)-hepCk<k?F;+KFKZrZ%J'nOM#AlSq]q%(Rr_R-&f1JqA>kd&:Sp,<;SdjoS(qsK+f*K$hV)"^'D0:QL>TZG2ZIQ0Rh_k7_4md"VY*Udb?$t+?#i?iLrXF',n>!4#L$@cXVd3P\%'*T<;MK.h#].""@#s946\VD!)/,TLC)Vf;(G4pX57RqN5DGeQAt]\7N0^;`bI,`BjMR==YA%]dfoHkkC@2VZ4S%DdDW.Ic,"E)8RUNtlI[B,+5"P8#>r/FYU:)VO^hde>Q'0[sJ[RuDo(6pa=dRnh)'nr_U?i0E$+Y<u4^<:nRO'U[Y2.Kn>K7:"DemIP2TuX&;GXpS-h.30M$GJE_aP%o;J;Z\DXZ#em3JK#E"WTmr#QS[D*aiJ8G-f2b+?u\P>uHk*dPlP[[/<*ZC1muX<,9]cusD]gP"?[@njM7"t6ROh$,9;NI--J!X5-tqh&.gV^695^F?+4h"hM]7PG'9?"JP%W9nb]C5l@<<Aa/"4mIMS$:lOF>1gGfa2a]f(dkE,9j)@Nho$FudAM2H7aq:=2iLJiT'<DT`dXJ-VEiKd^I&X/o/s"n!*seRm$Sj*p%1iuD,eF,NS<^#9"YrX/q*nj7&ds~>endstream
endobj
10 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 702
>>
stream
Gau1+?#Q2d'Sc)J/']H/)@mMQOmZs]W>939[`,dEWZ5s`Ohha%FoD%j+$j+B;$C[>KYZMe*rC@m0\C^0p)<)oCC2.*0jk7M&MQKRkZ8&Sm!4?_0Dtm`Q(pRpF*9WHV),dn&!cdU>ZYnF#>GrRBklQ@=qP,VV$U8Y/?P;^A-(SU;S4Je!Qecp$N>_oM;T+0ZX4-Xh^gDaT*%4Yr;_bjCM9ReHMktJPD8DjX>`c;FL6A?G.Zq'etON%q*8*VPXd0UI&TE&Gg2p_]WCS*F@ID)1BA).3tOmNPF$m?*4!5AQ$TA"1,*io]\>M$i3AI@IGYfNQ(kTY(fFM^d0!=;lC1SE0TL"%Z%FJZ<":=98NMf);(G\GE=1GT:q/%QFp\Jj^.e1M+m8,9'<&7E@-UY[EE1f0A5LmM@*kr(jlIVj(_0FNc3i3XoP+:">PLTFgG#q9npllbY3mD_'Z?Dch=!95d<lYY1Ki=P-Wmk,C`KeuDuqCA);SRn0`(@BWX"s)_PLin+'3T!ZF>`>ft1=ni[(XMZ;VYhkCl5[=,i=<Pk$T8n6K]+qH9J")BJM)aD-biRRcts1q;2*#(&ZTH@>fT10L$n6\5X/+bS:5R;'3WeHr@KG?$k>6B&sQpniu]Dc0%ciNIf$Km\`YBT>un[[@\0h)p\6\>CA[1?jkW#hhdh+AjmFAUJ6,hM!,$,[g<N<3-Q'~>endstream
endobj
xref
0 11
0000000000 65535 f
0000000061 00000 n
0000000102 00000 n
0000000209 00000 n
0000000321 00000 n
0000000514 00000 n
0000000708 00000 n
0000000776 00000 n
0000001056 00000 n
0000001121 00000 n
0000002152 00000 n
trailer
<<
/ID
[<823ed1f68bcfbaecab7b5c501b924b32><823ed1f68bcfbaecab7b5c501b924b32>]
% ReportLab generated PDF document -- digest (opensource)
/Info 7 0 R
/Root 6 0 R
/Size 11
>>
startxref
2945
%%EOF
@@ -1,86 +0,0 @@
# JodaTime to java.time.* Migration Plan: dbWarehouseHandler.java
## Overview
This document outlines the migration of JodaTime references in `dbWarehouseHandler.java` from `org.joda.time.DateTime` to `java.time.Instant`.
## Files to be Modified
- `src/engine/db/handlers/dbWarehouseHandler.java`
## JodaTime References Found
1. Import statement: `import org.joda.time.DateTime;`
2. Method parameter: `DateTime upgradeDate` in method signature (line 58)
3. Method parameter: `DateTime date` in method signature (line 490)
4. Usage of getMillis() method: `upgradeDate.getMillis()` (line 79)
5. Usage of getMillis() method: `date.getMillis()` (line 501)
## Migration Strategy
### Step 1: Update Import Statement
Replace:
```java
import org.joda.time.DateTime;
```
With:
```java
import java.time.Instant;
```
### Step 2: Update Method Signatures
Replace:
```java
DateTime upgradeDate
```
With:
```java
Instant upgradeDate
```
Replace:
```java
DateTime date
```
With:
```java
Instant date
```
### Step 3: Update Method Calls
Replace:
```java
upgradeDate.getMillis()
```
With:
```java
upgradeDate.toEpochMilli()
```
Replace:
```java
date.getMillis()
```
With:
```java
date.toEpochMilli()
```
### Step 4: Database Timestamp Handling
The database timestamp handling remains the same as `java.sql.Timestamp` constructor accepts long values (milliseconds since epoch), which can be obtained from `Instant.toEpochMilli()`.
## Implementation Plan
1. Update import statement from `org.joda.time.DateTime` to `java.time.Instant`
2. Update method signature for `upgradeDate` parameter from `DateTime` to `Instant`
3. Update method signature for `date` parameter from `DateTime` to `Instant`
4. Replace `upgradeDate.getMillis()` with `upgradeDate.toEpochMilli()`
5. Replace `date.getMillis()` with `date.toEpochMilli()`
## Testing Considerations
- Ensure the network packet serialization format remains unchanged
- Verify database operations work correctly with Instant values
- Test warehouse creation and transaction creation functionality
- Confirm that all existing functionality continues to work as expected
## Compatibility Notes
- The migration maintains backward compatibility with database operations since `java.sql.Timestamp` constructor accepts milliseconds
- Network packet structure remains the same (no serialization changes needed)
- Thread safety improvements from using java.time.* classes
-67
View File
@@ -1,67 +0,0 @@
# JodaTime to java.time.* Migration Tracking
## Overview
This file tracks the remaining JodaTime references that need to be migrated to java.time.* in the Magicbane Server codebase.
## Current Status (as of 2026-10-02)
Branch: ai-refactor-jodatimeFull
## Files with JodaTime References (Total: 30 files)
### Files Already Migrated or Partially Migrated
1. ArcMineWindowAvailableTimeMsg.java - ✅ COMPLETE (already using java.time.*)
### Files to be Migrated
1. BaneRecord.java - ✅ COMPLETE
2. dbBaneHandler.java - ✅ COMPLETE
3. dbBuildingHandler.java - ✅ COMPLETE
4. dbGuildHandler.java - ✅ COMPLETE
5. dbMobHandler.java - ✅ COMPLETE
6. dbNPCHandler.java - ✅ COMPLETE
7. dbShrineHandler.java - ✅ COMPLETE
8. dbWarehouseHandler.java - ✅ COMPLETE (2026-10-02)
9. GuildManager.java - ✅ COMPLETE (2026-10-02)
10. BaneDefaultTimeJob.java - [ ]
11. ByteBufferWriter.java - [ ]
12. AcceptInviteToGuildHandler.java - [ ]
13. BanishUnbanishHandler.java - [ ]
14. ManageCityAssetMsgHandler.java - [ ]
15. PlaceAssetMsgHandler.java - [ ]
16. GuildInfoMsg.java - [ ]
17. ManageCityAssetsMsg.java - [ ]
18. ManageNPCMsg.java - [ ]
19. NetMsgFactory.java - [ ]
20. Bane.java - [ ]
21. Guild.java - [ ]
22. GuildHistory.java - [ ]
23. ItemFactory.java - [ ]
24. Mob.java - [ ]
25. NPC.java - [ ]
26. PlayerCharacter.java - [ ]
27. ProducedItem.java - [ ]
28. Transaction.java - [ ]
29. Warehouse.java - [ ]
## Migration Strategy
1. Analyze each file to understand JodaTime usage patterns
2. Replace imports with java.time equivalents
3. Update variable declarations and method calls
4. Ensure network packet compatibility is maintained
5. Test functionality after each change
## Progress Tracking Template
For each file, mark as complete when migration is finished:
- [x] File name - Status: COMPLETED (Date: YYYY-MM-DD)
- [ ] File name - Status: PENDING
## Migration Notes
- Focus on minimal changes to maintain compatibility
- Preserve existing network packet serialization format
- Use java.time classes for better performance and thread safety
- Test each migration in a controlled environment
## Next Steps
1. Start with files that have minimal dependencies (like ArcMineWindowAvailableTimeMsg)
2. Proceed systematically through the list
3. Create detailed migration plans for complex files
4. Test changes in-game after each migration
-8203
View File
File diff suppressed because one or more lines are too long
+4 -4
View File
@@ -9,8 +9,8 @@
package discord;
import engine.Enum;
import engine.gameManager.ConfigManager;
import engine.mbEnums;
import org.pmw.tinylog.Logger;
import java.sql.*;
@@ -70,7 +70,7 @@ public class Database {
}
}
public boolean updateAccountStatus(String discordAccountID, Enum.AccountStatus accountStatus) {
public boolean updateAccountStatus(String discordAccountID, mbEnums.AccountStatus accountStatus) {
try (Connection connection = DriverManager.getConnection(sqlURI, ConfigManager.MB_DATABASE_USER.getValue(),
ConfigManager.MB_DATABASE_PASS.getValue());
@@ -131,7 +131,7 @@ public class Database {
discordAccount = new DiscordAccount();
discordAccount.discordAccount = rs.getString("discordAccount");
discordAccount.gameAccountName = rs.getString("acct_uname");
discordAccount.status = Enum.AccountStatus.valueOf(rs.getString("status"));
discordAccount.status = mbEnums.AccountStatus.valueOf(rs.getString("status"));
discordAccount.isDiscordAdmin = rs.getByte("discordAdmin"); // Registration date cannot be null
Timestamp registrationDate = rs.getTimestamp("registrationDate");
@@ -328,7 +328,7 @@ public class Database {
discordAccount = new DiscordAccount();
discordAccount.discordAccount = rs.getString("discordAccount");
discordAccount.gameAccountName = rs.getString("acct_uname");
discordAccount.status = Enum.AccountStatus.valueOf(rs.getString("status"));
discordAccount.status = mbEnums.AccountStatus.valueOf(rs.getString("status"));
// Registration date cannot be null
+2 -2
View File
@@ -8,14 +8,14 @@
package discord;
import engine.Enum;
import engine.mbEnums;
import java.time.LocalDateTime;
public class DiscordAccount {
public String discordAccount;
public String gameAccountName;
public Enum.AccountStatus status;
public mbEnums.AccountStatus status;
public LocalDateTime registrationDate;
public LocalDateTime lastUpdateRequest;
public byte isDiscordAdmin;
+2 -2
View File
@@ -11,7 +11,7 @@ package discord.handlers;
import discord.Database;
import discord.DiscordAccount;
import discord.MagicBot;
import engine.Enum;
import engine.mbEnums;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import java.util.List;
@@ -21,7 +21,7 @@ public class AccountInfoRequest {
public static void handleRequest(MessageReceivedEvent event) {
String discordAccountID = event.getAuthor().getId();
Enum.AccountStatus accountStatus;
mbEnums.AccountStatus accountStatus;
if (Database.online == false) {
+6 -6
View File
@@ -11,7 +11,7 @@ package discord.handlers;
import discord.DiscordAccount;
import discord.MagicBot;
import discord.RobotSpeak;
import engine.Enum;
import engine.mbEnums;
import net.dv8tion.jda.api.entities.User;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.pmw.tinylog.Logger;
@@ -23,7 +23,7 @@ public class BanToggleHandler {
public static void handleRequest(MessageReceivedEvent event, String[] args) {
String discordAccountID;
Enum.AccountStatus accountStatus;
mbEnums.AccountStatus accountStatus;
// Early exit if database unavailable or is not an admin
@@ -55,10 +55,10 @@ public class BanToggleHandler {
// toggle ban status
if (discordAccounts.get(0).status.equals(Enum.AccountStatus.BANNED))
accountStatus = Enum.AccountStatus.ACTIVE;
if (discordAccounts.get(0).status.equals(mbEnums.AccountStatus.BANNED))
accountStatus = mbEnums.AccountStatus.ACTIVE;
else
accountStatus = Enum.AccountStatus.BANNED;
accountStatus = mbEnums.AccountStatus.BANNED;
// We have a valid discord ID at this point. Banstick?
@@ -82,7 +82,7 @@ public class BanToggleHandler {
// If we're toggling status to active we're done here.
if (accountStatus.equals(Enum.AccountStatus.ACTIVE))
if (accountStatus.equals(mbEnums.AccountStatus.ACTIVE))
return;
// Set users role to noob
@@ -11,7 +11,7 @@ package discord.handlers;
import discord.Database;
import discord.DiscordAccount;
import discord.MagicBot;
import engine.Enum;
import engine.mbEnums;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.pmw.tinylog.Logger;
@@ -53,7 +53,7 @@ public class PasswordChangeHandler {
// Banned or suspended user's get no love.
if (discordAccount.status.equals(Enum.AccountStatus.BANNED)) {
if (discordAccount.status.equals(mbEnums.AccountStatus.BANNED)) {
MagicBot.sendResponse(event,
"Sorry but that is too much work. \n" +
"Your account detailings cannot for to log into game!");
@@ -1,706 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.InterestManagement;
import engine.Enum;
import engine.gameManager.ConfigManager;
import engine.gameManager.DbManager;
import engine.gameManager.ZoneManager;
import engine.math.Vector2f;
import engine.math.Vector3fImmutable;
import engine.objects.AbstractWorldObject;
import engine.objects.Zone;
import engine.util.MapLoader;
import org.pmw.tinylog.Logger;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
public class HeightMap {
// Class variables
// Heightmap data for all zones.
public static final HashMap<Integer, HeightMap> heightmapByLoadNum = new HashMap<>();
// Bootstrap Tracking
public static int heightMapsCreated = 0;
public static HeightMap PlayerCityHeightMap;
// Heightmap data for this heightmap
public BufferedImage heightmapImage;
private int heightMapID;
private int maxHeight;
private int fullExtentsX;
private int fullExtentsY;
private float bucketWidthX;
private float bucketWidthY;
private int zoneLoadID;
private float seaLevel = 0;
private float outsetX;
private float outsetZ;
private int[][] pixelColorValues;
public HeightMap(ResultSet rs) throws SQLException {
this.heightMapID = rs.getInt("heightMapID");
this.maxHeight = rs.getInt("maxHeight");
int halfExtentsX = rs.getInt("xRadius");
int halfExtentsY = rs.getInt("zRadius");
this.zoneLoadID = rs.getInt("zoneLoadID");
this.seaLevel = rs.getFloat("seaLevel");
this.outsetX = rs.getFloat("outsetX");
this.outsetZ = rs.getFloat("outsetZ");
// Cache the full extents to avoid the calculation
this.fullExtentsX = halfExtentsX * 2;
this.fullExtentsY = halfExtentsY * 2;
this.heightmapImage = null;
File imageFile = new File(ConfigManager.DEFAULT_DATA_DIR + "heightmaps/" + this.heightMapID + ".bmp");
// early exit if no image file was found. Will log in caller.
if (!imageFile.exists())
return;
// load the heightmap image.
try {
this.heightmapImage = ImageIO.read(imageFile);
} catch (IOException e) {
Logger.error("***Error loading heightmap data for heightmap " + this.heightMapID + e.toString());
}
// We needed to flip the image as OpenGL and Shadowbane both use the bottom left corner as origin.
this.heightmapImage = MapLoader.flipImage(this.heightmapImage);
// Calculate the data we do not load from table
float numOfBuckets = this.heightmapImage.getWidth() - 1;
float calculatedWidth = this.fullExtentsX / numOfBuckets;
this.bucketWidthX = calculatedWidth;
this.bucketWidthY = this.bucketWidthX; // This makes no sense.
// Generate pixel array from image data
generatePixelData();
HeightMap.heightmapByLoadNum.put(this.zoneLoadID, this);
heightMapsCreated++;
}
//Created for PlayerCities
public HeightMap() {
this.heightMapID = 999999;
this.maxHeight = 5; // for real...
int halfExtentsX = (int) Enum.CityBoundsType.ZONE.extents;
int halfExtentsY = (int) Enum.CityBoundsType.ZONE.extents;
this.zoneLoadID = 0;
this.seaLevel = 0;
this.outsetX = 128;
this.outsetZ = 128;
// Cache the full extents to avoid the calculation
this.fullExtentsX = halfExtentsX * 2;
this.fullExtentsY = halfExtentsY * 2;
// load the heightmap image.
// We needed to flip the image as OpenGL and Shadowbane both use the bottom left corner as origin.
this.heightmapImage = null;
// Calculate the data we do not load from table
this.bucketWidthX = 1;
this.bucketWidthY = 1;
this.pixelColorValues = new int[this.fullExtentsX + 1][this.fullExtentsY + 1];
for (int y = 0; y <= this.fullExtentsY; y++) {
for (int x = 0; x <= this.fullExtentsX; x++) {
pixelColorValues[x][y] = 255;
}
}
HeightMap.heightmapByLoadNum.put(this.zoneLoadID, this);
}
public HeightMap(Zone zone) {
this.heightMapID = 999999;
this.maxHeight = 0;
int halfExtentsX = (int) zone.getBounds().getHalfExtents().x;
int halfExtentsY = (int) zone.getBounds().getHalfExtents().y;
this.zoneLoadID = 0;
this.seaLevel = 0;
this.outsetX = 0;
this.outsetZ = 0;
// Cache the full extents to avoid the calculation
this.fullExtentsX = halfExtentsX * 2;
this.fullExtentsY = halfExtentsY * 2;
// We needed to flip the image as OpenGL and Shadowbane both use the bottom left corner as origin.
this.heightmapImage = null;
// Calculate the data we do not load from table
this.bucketWidthX = 1;
this.bucketWidthY = 1;
this.pixelColorValues = new int[this.fullExtentsX + 1][this.fullExtentsY + 1];
for (int y = 0; y <= this.fullExtentsY; y++) {
for (int x = 0; x <= this.fullExtentsX; x++) {
pixelColorValues[x][y] = 255;
}
}
HeightMap.heightmapByLoadNum.put(this.zoneLoadID, this);
}
public static void GeneratePlayerCityHeightMap() {
HeightMap.PlayerCityHeightMap = new HeightMap();
}
public static void GenerateCustomHeightMap(Zone zone) {
HeightMap heightMap = new HeightMap(zone);
HeightMap.heightmapByLoadNum.put(zone.getLoadNum(), heightMap);
}
public static Zone getNextZoneWithTerrain(Zone zone) {
Zone nextZone = zone;
if (zone.getHeightMap() != null)
return zone;
if (zone.equals(ZoneManager.getSeaFloor()))
return zone;
while (nextZone.getHeightMap() == null)
nextZone = nextZone.getParent();
return nextZone;
}
public static float getWorldHeight(AbstractWorldObject worldObject) {
Vector2f parentLoc = new Vector2f(-1, -1);
Zone currentZone = ZoneManager.findSmallestZone(worldObject.getLoc());
if (currentZone == null)
return worldObject.getAltitude();
currentZone = getNextZoneWithTerrain(currentZone);
if (currentZone == ZoneManager.getSeaFloor())
return currentZone.getAbsY() + worldObject.getAltitude();
Zone parentZone = getNextZoneWithTerrain(currentZone.getParent());
HeightMap heightMap = currentZone.getHeightMap();
Vector2f zoneLoc = ZoneManager.worldToZoneSpace(worldObject.getLoc(), currentZone);
Vector3fImmutable localLocFromCenter = ZoneManager.worldToLocal(worldObject.getLoc(), currentZone);
if ((parentZone != null) && (parentZone.getHeightMap() != null))
parentLoc = ZoneManager.worldToZoneSpace(worldObject.getLoc(), parentZone);
float interaltitude = currentZone.getHeightMap().getInterpolatedTerrainHeight(zoneLoc);
float worldAltitude = currentZone.getWorldAltitude();
float realWorldAltitude = interaltitude + worldAltitude;
//OUTSET
if (parentZone != null) {
float parentXRadius = currentZone.getBounds().getHalfExtents().x;
float parentZRadius = currentZone.getBounds().getHalfExtents().y;
float offsetX = Math.abs((localLocFromCenter.x / parentXRadius));
float offsetZ = Math.abs((localLocFromCenter.z / parentZRadius));
float bucketScaleX = heightMap.outsetX / parentXRadius;
float bucketScaleZ = heightMap.outsetZ / parentZRadius;
if (bucketScaleX <= 0.40000001)
bucketScaleX = heightMap.outsetZ / parentXRadius;
if (bucketScaleX > 0.40000001)
bucketScaleX = 0.40000001f;
if (bucketScaleZ <= 0.40000001)
bucketScaleZ = heightMap.outsetX / parentZRadius;
if (bucketScaleZ > 0.40000001)
bucketScaleZ = 0.40000001f;
float outsideGridSizeX = 1 - bucketScaleX; //32/256
float outsideGridSizeZ = 1 - bucketScaleZ;
float weight;
double scale;
if (offsetX > outsideGridSizeX && offsetX > offsetZ) {
weight = (offsetX - outsideGridSizeX) / bucketScaleX;
scale = Math.atan2((.5 - weight) * 3.1415927, 1);
float scaleChild = (float) ((scale + 1) * .5);
float scaleParent = 1 - scaleChild;
float parentAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(parentLoc);
float parentCenterAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(ZoneManager.worldToZoneSpace(currentZone.getLoc(), parentZone));
parentCenterAltitude += currentZone.getYCoord();
parentCenterAltitude += interaltitude;
float firstScale = parentAltitude * scaleParent;
float secondScale = parentCenterAltitude * scaleChild;
float outsetALt = firstScale + secondScale;
outsetALt += currentZone.getParent().getWorldAltitude();
realWorldAltitude = outsetALt;
} else if (offsetZ > outsideGridSizeZ) {
weight = (offsetZ - outsideGridSizeZ) / bucketScaleZ;
scale = Math.atan2((.5 - weight) * 3.1415927, 1);
float scaleChild = (float) ((scale + 1) * .5);
float scaleParent = 1 - scaleChild;
float parentAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(parentLoc);
float parentCenterAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(ZoneManager.worldToZoneSpace(currentZone.getLoc(), parentZone));
parentCenterAltitude += currentZone.getYCoord();
parentCenterAltitude += interaltitude;
float firstScale = parentAltitude * scaleParent;
float secondScale = parentCenterAltitude * scaleChild;
float outsetALt = firstScale + secondScale;
outsetALt += currentZone.getParent().getWorldAltitude();
realWorldAltitude = outsetALt;
}
}
return realWorldAltitude;
}
public static float getWorldHeight(Vector3fImmutable worldLoc) {
Vector2f parentLoc = new Vector2f(-1, -1);
Zone currentZone = ZoneManager.findSmallestZone(worldLoc);
if (currentZone == null)
return 0;
currentZone = getNextZoneWithTerrain(currentZone);
if (currentZone == ZoneManager.getSeaFloor())
return currentZone.getAbsY();
Zone parentZone = getNextZoneWithTerrain(currentZone.getParent());
HeightMap heightMap = currentZone.getHeightMap();
if ((heightMap == null) || (currentZone == ZoneManager.getSeaFloor()))
return currentZone.getAbsY();
Vector2f zoneLoc = ZoneManager.worldToZoneSpace(worldLoc, currentZone);
Vector3fImmutable localLocFromCenter = ZoneManager.worldToLocal(worldLoc, currentZone);
if ((parentZone != null) && (parentZone.getHeightMap() != null))
parentLoc = ZoneManager.worldToZoneSpace(worldLoc, parentZone);
float interaltitude = currentZone.getHeightMap().getInterpolatedTerrainHeight(zoneLoc);
float worldAltitude = currentZone.getWorldAltitude();
float realWorldAltitude = interaltitude + worldAltitude;
//OUTSET
if (parentZone != null) {
// if (currentZone.getHeightMap() != null && parentZone.getHeightMap() != null && parentZone.getParent() != null && parentZone.getParent().getHeightMap() != null)
// return realWorldAltitude;
float parentXRadius = currentZone.getBounds().getHalfExtents().x;
float parentZRadius = currentZone.getBounds().getHalfExtents().y;
float offsetX = Math.abs((localLocFromCenter.x / parentXRadius));
float offsetZ = Math.abs((localLocFromCenter.z / parentZRadius));
float bucketScaleX = heightMap.outsetX / parentXRadius;
float bucketScaleZ = heightMap.outsetZ / parentZRadius;
float outsideGridSizeX = 1 - bucketScaleX; //32/256
float outsideGridSizeZ = 1 - bucketScaleZ;
float weight;
double scale;
if (offsetX > outsideGridSizeX && offsetX > offsetZ) {
weight = (offsetX - outsideGridSizeX) / bucketScaleX;
scale = Math.atan2((.5 - weight) * 3.1415927, 1);
float scaleChild = (float) ((scale + 1) * .5);
float scaleParent = 1 - scaleChild;
float parentAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(parentLoc);
float parentCenterAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(ZoneManager.worldToZoneSpace(currentZone.getLoc(), parentZone));
parentCenterAltitude += currentZone.getYCoord();
parentCenterAltitude += interaltitude;
float firstScale = parentAltitude * scaleParent;
float secondScale = parentCenterAltitude * scaleChild;
float outsetALt = firstScale + secondScale;
outsetALt += currentZone.getParent().getWorldAltitude();
realWorldAltitude = outsetALt;
} else if (offsetZ > outsideGridSizeZ) {
weight = (offsetZ - outsideGridSizeZ) / bucketScaleZ;
scale = Math.atan2((.5 - weight) * 3.1415927, 1);
float scaleChild = (float) ((scale + 1) * .5);
float scaleParent = 1 - scaleChild;
float parentAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(parentLoc);
float parentCenterAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(ZoneManager.worldToZoneSpace(currentZone.getLoc(), parentZone));
parentCenterAltitude += currentZone.getYCoord();
parentCenterAltitude += interaltitude;
float firstScale = parentAltitude * scaleParent;
float secondScale = parentCenterAltitude * scaleChild;
float outsetALt = firstScale + secondScale;
outsetALt += currentZone.getParent().getWorldAltitude();
realWorldAltitude = outsetALt;
}
}
return realWorldAltitude;
}
public static float getOutsetHeight(float interpolatedAltitude, Zone zone, Vector3fImmutable worldLocation) {
Vector2f parentLoc;
float outsetALt = 0;
if (zone.getParent() == null || zone.getParent().getHeightMap() == null)
return interpolatedAltitude + zone.getWorldAltitude();
if (zone.getParent() != null && zone.getParent().getHeightMap() != null) {
parentLoc = ZoneManager.worldToZoneSpace(worldLocation, zone.getParent());
Vector3fImmutable localLocFromCenter = ZoneManager.worldToLocal(worldLocation, zone);
float parentXRadius = zone.getBounds().getHalfExtents().x;
float parentZRadius = zone.getBounds().getHalfExtents().y;
float bucketScaleX = zone.getHeightMap().outsetX / parentXRadius;
float bucketScaleZ = zone.getHeightMap().outsetZ / parentZRadius;
float outsideGridSizeX = 1 - bucketScaleX; //32/256
float outsideGridSizeZ = 1 - bucketScaleZ;
float weight;
double scale;
float offsetX = Math.abs((localLocFromCenter.x / parentXRadius));
float offsetZ = Math.abs((localLocFromCenter.z / parentZRadius));
if (offsetX > outsideGridSizeX && offsetX > offsetZ) {
weight = (offsetX - outsideGridSizeX) / bucketScaleX;
scale = Math.atan2((.5 - weight) * 3.1415927, 1);
float scaleChild = (float) ((scale + 1) * .5);
float scaleParent = 1 - scaleChild;
float parentAltitude = zone.getParent().getHeightMap().getInterpolatedTerrainHeight(parentLoc);
float parentCenterAltitude = zone.getParent().getHeightMap().getInterpolatedTerrainHeight(ZoneManager.worldToZoneSpace(zone.getLoc(), zone.getParent()));
parentCenterAltitude += zone.getYCoord();
parentCenterAltitude += interpolatedAltitude;
float firstScale = parentAltitude * scaleParent;
float secondScale = parentCenterAltitude * scaleChild;
outsetALt = firstScale + secondScale;
outsetALt += zone.getParent().getAbsY();
} else if (offsetZ > outsideGridSizeZ) {
weight = (offsetZ - outsideGridSizeZ) / bucketScaleZ;
scale = Math.atan2((.5 - weight) * 3.1415927, 1);
float scaleChild = (float) ((scale + 1) * .5);
float scaleParent = 1 - scaleChild;
float parentAltitude = zone.getParent().getHeightMap().getInterpolatedTerrainHeight(parentLoc);
float parentCenterAltitude = zone.getHeightMap().getInterpolatedTerrainHeight(ZoneManager.worldToZoneSpace(zone.getLoc(), zone));
parentCenterAltitude += zone.getYCoord();
parentCenterAltitude += interpolatedAltitude;
float firstScale = parentAltitude * scaleParent;
float secondScale = parentCenterAltitude * scaleChild;
outsetALt = firstScale + secondScale;
outsetALt += zone.getParent().getAbsY();
}
}
return outsetALt;
}
public static Vector2f getGridOffset(Vector2f gridSquare) {
int floorX = (int) gridSquare.x;
int floorY = (int) gridSquare.y;
return new Vector2f(gridSquare.x - floorX, gridSquare.y - floorY);
}
public static void loadAlHeightMaps() {
// Load the heightmaps into staging hashmap keyed by HashMapID
DbManager.HeightMapQueries.LOAD_ALL_HEIGHTMAPS();
//generate static player city heightmap.
HeightMap.GeneratePlayerCityHeightMap();
// Clear all heightmap image data as it's no longer needed.
for (HeightMap heightMap : HeightMap.heightmapByLoadNum.values()) {
heightMap.heightmapImage = null;
}
Logger.info(HeightMap.heightmapByLoadNum.size() + " Heightmaps cached.");
}
public static boolean isLocUnderwater(Vector3fImmutable currentLoc) {
float localAltitude = HeightMap.getWorldHeight(currentLoc);
Zone zone = ZoneManager.findSmallestZone(currentLoc);
if (localAltitude < zone.getSeaLevel())
return true;
return false;
}
public Vector2f getGridSquare(Vector2f zoneLoc) {
if (zoneLoc.x < 0)
zoneLoc.setX(0);
if (zoneLoc.x > this.fullExtentsX - 1)
zoneLoc.setX((this.fullExtentsX - 1) + .9999999f);
if (zoneLoc.y < 0)
zoneLoc.setY(0);
if (zoneLoc.y > this.fullExtentsY - 1)
zoneLoc.setY((this.fullExtentsY - 1) + .9999999f);
float xBucket = (zoneLoc.x / this.bucketWidthX);
float yBucket = (zoneLoc.y / this.bucketWidthY);
return new Vector2f(xBucket, yBucket);
}
public float getInterpolatedTerrainHeight(Vector2f zoneLoc) {
Vector2f gridSquare;
if (zoneLoc.x < 0 || zoneLoc.x > this.fullExtentsX)
return -1;
if (zoneLoc.y < 0 || zoneLoc.y > this.fullExtentsY)
return -1;
int maxX = (int) (this.fullExtentsX / this.bucketWidthX);
int maxY = (int) (this.fullExtentsY / this.bucketWidthY);
//flip the Y so it grabs from the bottom left instead of top left.
//zoneLoc.setY(maxZoneHeight - zoneLoc.y);
gridSquare = getGridSquare(zoneLoc);
int gridX = (int) gridSquare.x;
int gridY = (int) (gridSquare.y);
if (gridX > maxX)
gridX = maxX;
if (gridY > maxY)
gridY = maxY;
float offsetX = (gridSquare.x - gridX);
float offsetY = gridSquare.y - gridY;
//get height of the 4 vertices.
float topLeftHeight = 0;
float topRightHeight = 0;
float bottomLeftHeight = 0;
float bottomRightHeight = 0;
int nextY = gridY + 1;
int nextX = gridX + 1;
if (nextY > maxY)
nextY = gridY;
if (nextX > maxX)
nextX = gridX;
topLeftHeight = pixelColorValues[gridX][gridY];
topRightHeight = pixelColorValues[nextX][gridY];
bottomLeftHeight = pixelColorValues[gridX][nextY];
bottomRightHeight = pixelColorValues[nextX][nextY];
float interpolatedHeight;
interpolatedHeight = topRightHeight * (1 - offsetY) * (offsetX);
interpolatedHeight += (bottomRightHeight * offsetY * offsetX);
interpolatedHeight += (bottomLeftHeight * (1 - offsetX) * offsetY);
interpolatedHeight += (topLeftHeight * (1 - offsetX) * (1 - offsetY));
interpolatedHeight *= (float) this.maxHeight / 256; // Scale height
return interpolatedHeight;
}
public float getInterpolatedTerrainHeight(Vector3fImmutable zoneLoc3f) {
Vector2f zoneLoc = new Vector2f(zoneLoc3f.x, zoneLoc3f.z);
Vector2f gridSquare;
if (zoneLoc.x < 0 || zoneLoc.x > this.fullExtentsX)
return -1;
if (zoneLoc.y < 0 || zoneLoc.y > this.fullExtentsY)
return -1;
//flip the Y so it grabs from the bottom left instead of top left.
//zoneLoc.setY(maxZoneHeight - zoneLoc.y);
gridSquare = getGridSquare(zoneLoc);
int gridX = (int) gridSquare.x;
int gridY = (int) (gridSquare.y);
float offsetX = (gridSquare.x - gridX);
float offsetY = gridSquare.y - gridY;
//get height of the 4 vertices.
float topLeftHeight = pixelColorValues[gridX][gridY];
float topRightHeight = pixelColorValues[gridX + 1][gridY];
float bottomLeftHeight = pixelColorValues[gridX][gridY + 1];
float bottomRightHeight = pixelColorValues[gridX + 1][gridY + 1];
float interpolatedHeight;
interpolatedHeight = topRightHeight * (1 - offsetY) * (offsetX);
interpolatedHeight += (bottomRightHeight * offsetY * offsetX);
interpolatedHeight += (bottomLeftHeight * (1 - offsetX) * offsetY);
interpolatedHeight += (topLeftHeight * (1 - offsetX) * (1 - offsetY));
interpolatedHeight *= (float) this.maxHeight / 256; // Scale height
return interpolatedHeight;
}
private void generatePixelData() {
Color color;
// Generate altitude lookup table for this heightmap
this.pixelColorValues = new int[this.heightmapImage.getWidth()][this.heightmapImage.getHeight()];
for (int y = 0; y < this.heightmapImage.getHeight(); y++) {
for (int x = 0; x < this.heightmapImage.getWidth(); x++) {
color = new Color(this.heightmapImage.getRGB(x, y));
pixelColorValues[x][y] = color.getRed();
}
}
}
public float getScaledHeightForColor(float color) {
return (color / 256) * this.maxHeight;
}
public float getBucketWidthX() {
return bucketWidthX;
}
public float getBucketWidthY() {
return bucketWidthY;
}
public int getHeightMapID() {
return heightMapID;
}
public BufferedImage getHeightmapImage() {
return heightmapImage;
}
public float getSeaLevel() {
return seaLevel;
}
}
@@ -8,16 +8,16 @@
package engine.InterestManagement;
import engine.Enum;
import engine.Enum.DispatchChannel;
import engine.Enum.GameObjectType;
import engine.gameManager.DispatchManager;
import engine.gameManager.GroupManager;
import engine.gameManager.SessionManager;
import engine.job.JobScheduler;
import engine.jobs.RefreshGroupJob;
import engine.mbEnums;
import engine.mbEnums.DispatchChannel;
import engine.mbEnums.GameObjectType;
import engine.net.AbstractNetMsg;
import engine.net.Dispatch;
import engine.net.DispatchMessage;
import engine.net.client.ClientConnection;
import engine.net.client.msg.LoadCharacterMsg;
import engine.net.client.msg.LoadStructureMsg;
@@ -88,7 +88,7 @@ public enum InterestManager implements Runnable {
if (send) {
Dispatch dispatch = Dispatch.borrow(player, msg);
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
DispatchManager.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
}
}
}
@@ -140,7 +140,7 @@ public enum InterestManager implements Runnable {
else {
if (pc != null)
if (pcc.getSeeInvis() < pc.getHidden())
if (pcc.getSeeInvis() < pc.hidden)
continue;
if (!cc.sendMsg(uom)) {
@@ -270,7 +270,7 @@ public enum InterestManager implements Runnable {
}
Dispatch dispatch = Dispatch.borrow(player, uom);
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
DispatchManager.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
}
loadedStaticObjects.removeAll(toRemove);
@@ -292,7 +292,7 @@ public enum InterestManager implements Runnable {
lcm = new LoadCharacterMsg(corpse, PlayerCharacter.hideNonAscii());
Dispatch dispatch = Dispatch.borrow(player, lcm);
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
DispatchManager.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
} else if (awo.getObjectType().equals(GameObjectType.NPC)) {
NPC npc = (NPC) awo;
@@ -304,13 +304,13 @@ public enum InterestManager implements Runnable {
if (lsm.getStructureList().size() > 0) {
Dispatch dispatch = Dispatch.borrow(player, lsm);
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
DispatchManager.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
}
for (LoadCharacterMsg lc : lcmList) {
Dispatch dispatch = Dispatch.borrow(player, lc);
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
DispatchManager.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
}
loadedStaticObjects.addAll(toLoad);
@@ -340,7 +340,7 @@ public enum InterestManager implements Runnable {
if (loadedPlayer.getObjectUUID() == player.getObjectUUID())
continue;
if (player.getSeeInvis() < loadedPlayer.getHidden())
if (player.getSeeInvis() < loadedPlayer.hidden)
continue;
if (loadedPlayer.safemodeInvis())
@@ -372,7 +372,7 @@ public enum InterestManager implements Runnable {
if (playerLoadedObject.getObjectType().equals(GameObjectType.PlayerCharacter)) {
PlayerCharacter loadedPlayer = (PlayerCharacter) playerLoadedObject;
if (player.getSeeInvis() < loadedPlayer.getHidden())
if (player.getSeeInvis() < loadedPlayer.hidden)
toRemove.add(playerLoadedObject);
else if (loadedPlayer.safemodeInvis())
toRemove.add(playerLoadedObject);
@@ -414,7 +414,7 @@ public enum InterestManager implements Runnable {
if (!uom.getObjectList().isEmpty()) {
Dispatch dispatch = Dispatch.borrow(player, uom);
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
DispatchManager.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
}
}
@@ -437,7 +437,7 @@ public enum InterestManager implements Runnable {
// dont load if invis
if (player.getSeeInvis() < awopc.getHidden())
if (player.getSeeInvis() < awopc.hidden)
continue;
lcm = new LoadCharacterMsg(awopc, PlayerCharacter.hideNonAscii());
@@ -467,7 +467,7 @@ public enum InterestManager implements Runnable {
if (awonpc.despawned == true)
continue;
awonpc.playerAgroMap.put(player.getObjectUUID(), false);
awonpc.playerAgroMap.put(player.getObjectUUID(), 0f);
((Mob) awonpc).setCombatTarget(null);
lcm = new LoadCharacterMsg(awonpc, PlayerCharacter.hideNonAscii());
@@ -480,9 +480,9 @@ public enum InterestManager implements Runnable {
if (!awonpc.isAlive())
continue;
awonpc.playerAgroMap.put(player.getObjectUUID(), false);
awonpc.playerAgroMap.put(player.getObjectUUID(), 0f);
if ((awonpc.agentType.equals(Enum.AIAgentType.MOBILE)))
if ((awonpc.agentType.equals(mbEnums.AIAgentType.MOBILE)))
((Mob) awonpc).setCombatTarget(null);
lcm = new LoadCharacterMsg(awonpc, PlayerCharacter.hideNonAscii());
@@ -492,7 +492,7 @@ public enum InterestManager implements Runnable {
if (lcm != null) {
Dispatch dispatch = Dispatch.borrow(player, lcm);
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
DispatchManager.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
}
+16 -13
View File
@@ -8,14 +8,10 @@
package engine.InterestManagement;
/* This class is the main interface for Magicbane's
* Interest management facilities.
*/
import engine.Enum;
import engine.gameManager.DispatchManager;
import engine.math.Vector3fImmutable;
import engine.mbEnums;
import engine.net.Dispatch;
import engine.net.DispatchMessage;
import engine.net.client.msg.TerritoryChangeMessage;
import engine.objects.City;
import engine.objects.PlayerCharacter;
@@ -31,10 +27,17 @@ import static engine.objects.Realm.getRealm;
public enum RealmMap {
REALM_MAP;
// MB Dev Notes:
// This class loads and caches realm maps used by each
// map set for its realm overlay. The RealmMap loaded is
// controlled by config entry MB_WORLD_REALMMAP
//
// Unlike a Heightmap this is a just color lookup; identical to
// the old image maps used in 90s web technology.
//
// Realm Map images are stored on disk in /mb.data/realmmaps/
// Spatial hashmap. Used for determining which Realm
// a player is currently located within.
REALM_MAP;
private static final HashMap<Color, Integer> _rgbToIDMap = new HashMap<>();
public static int[][] _realmImageMap;
@@ -65,7 +68,7 @@ public enum RealmMap {
public static Realm getRealmForCity(City city) {
Realm outRealm = null;
outRealm = city.getRealm();
outRealm = city.realm;
return outRealm;
}
@@ -88,17 +91,17 @@ public enum RealmMap {
if (city != null) {
TerritoryChangeMessage tcm = new TerritoryChangeMessage((PlayerCharacter) realm.getRulingCity().getOwner(), realm);
Dispatch dispatch = Dispatch.borrow(player, tcm);
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.PRIMARY);
DispatchManager.dispatchMsgDispatch(dispatch, mbEnums.DispatchChannel.PRIMARY);
} else {
TerritoryChangeMessage tcm = new TerritoryChangeMessage(null, realm);
Dispatch dispatch = Dispatch.borrow(player, tcm);
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.PRIMARY);
DispatchManager.dispatchMsgDispatch(dispatch, mbEnums.DispatchChannel.PRIMARY);
}
} else {
TerritoryChangeMessage tcm = new TerritoryChangeMessage(null, realm);
Dispatch dispatch = Dispatch.borrow(player, tcm);
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.PRIMARY);
DispatchManager.dispatchMsgDispatch(dispatch, mbEnums.DispatchChannel.PRIMARY);
}
}
+238
View File
@@ -0,0 +1,238 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.InterestManagement;
import engine.gameManager.ZoneManager;
import engine.math.Vector2f;
import engine.math.Vector3fImmutable;
import engine.objects.Zone;
import org.pmw.tinylog.Logger;
import java.util.HashMap;
import static java.lang.Math.PI;
// MB Dev Notes:
// The Terrain class handles lookups into the Heightmap data.
// It supports all current maps along with the differences in
// their parenting configuration.
//
// Heightmap images are stored on disk in /mb.data/heightmaps/
public class Terrain {
public static final HashMap<Integer, short[][]> _heightmap_pixel_cache = new HashMap<>();
public short[][] terrain_pixel_data;
public Vector2f terrain_size = new Vector2f();
public Vector2f cell_size = new Vector2f();
public Vector2f cell_count = new Vector2f();
public float terrain_scale;
public Vector2f blend_values = new Vector2f();
public Vector2f blend_ratio = new Vector2f();
public int heightmap;
Zone zone;
public Terrain(Zone zone) {
this.zone = zone;
this.heightmap = this.zone.template.terrain_image;
// Configure PLANAR zones to use the same 16x16 pixel image
// that all similar terrains share. (See JSON)
if (this.zone.template.terrain_type.equals("PLANAR"))
this.heightmap = 1006300; // all 0
// Load pixel data for this terrain from cache
this.terrain_pixel_data = Terrain._heightmap_pixel_cache.get(heightmap);
if (terrain_pixel_data == null)
Logger.error("Pixel map empty for zone: " + this.zone.getObjectUUID() + ":" + this.zone.zoneName);
// Configure terrain based on zone properties
this.terrain_size.x = this.zone.major_radius * 2;
this.terrain_size.y = this.zone.minor_radius * 2;
this.cell_count.x = this.terrain_pixel_data.length - 1;
this.cell_count.y = this.terrain_pixel_data[0].length - 1;
this.cell_size.x = terrain_size.x / this.cell_count.x;
this.cell_size.y = terrain_size.y / this.cell_count.y;
// Blending configuration. These ratios are used to calculate
// the blending area between child and parent terrains when
// they are stitched together.
this.blend_values.x = this.zone.template.max_blend;
this.blend_values.y = this.zone.template.min_blend;
Vector2f major_blend = new Vector2f(this.blend_values.x / this.zone.major_radius,
this.blend_values.y / this.zone.major_radius);
Vector2f minor_blend = new Vector2f(this.blend_values.x / this.zone.minor_radius,
this.blend_values.y / this.zone.minor_radius);
if (major_blend.y > 0.4f)
blend_ratio.x = major_blend.y;
else
blend_ratio.x = Math.min(major_blend.x, 0.4f);
if (minor_blend.y > 0.4f)
blend_ratio.y = minor_blend.y;
else
blend_ratio.y = Math.min(minor_blend.x, 0.4f);
// Scale coefficient for this terrain
this.terrain_scale = this.zone.template.terrain_max_y / 255f;
}
public static Zone getNextZoneWithTerrain(Zone zone) {
// Not all zones have a terrain. Some are for display only
// and heights returned are from the parent heightmap. This
// is controlled in the JSON via the has_terrain_gen field.
Zone terrain_zone = zone;
if (zone == null)
return ZoneManager.seaFloor;
if (zone.terrain != null)
return zone;
if (zone.equals(ZoneManager.seaFloor))
return zone;
while (terrain_zone.terrain == null)
terrain_zone = terrain_zone.parent;
return terrain_zone;
}
public static float getWorldHeight(Zone zone, Vector3fImmutable world_loc) {
// Retrieve the next zone up in the tree with a terrain defined.
Zone terrainZone = getNextZoneWithTerrain(zone);
Zone parentZone = getNextZoneWithTerrain(zone.parent);
// Transform world loc into zone space coordinate system
Vector2f terrainLoc = ZoneManager.worldToTerrainSpace(world_loc, terrainZone);
Vector2f parentLoc = ZoneManager.worldToTerrainSpace(world_loc, parentZone);
// Offset from origin needed for blending function
Vector2f terrainOffset = ZoneManager.worldToZoneOffset(world_loc, terrainZone);
// Interpolate height for this position in both terrains
float interpolatedChildHeight = terrainZone.terrain.getInterpolatedTerrainHeight(terrainLoc);
interpolatedChildHeight += terrainZone.global_height;
float interpolatedParentTerrainHeight = parentZone.terrain.getInterpolatedTerrainHeight(parentLoc);
interpolatedParentTerrainHeight += parentZone.global_height;
// Blend between terrains
float blendCoefficient = terrainZone.terrain.getTerrainBlendCoefficient(terrainOffset);
float terrainHeight = interpolatedChildHeight * blendCoefficient;
terrainHeight += interpolatedParentTerrainHeight * (1 - blendCoefficient);
return terrainHeight;
}
public static float getWorldHeight(Vector3fImmutable world_loc) {
Zone currentZone = ZoneManager.findSmallestZone(world_loc);
return getWorldHeight(currentZone, world_loc);
}
public Vector2f getTerrainCell(Vector2f terrain_loc) {
// Calculate terrain cell with offset
Vector2f terrain_cell = new Vector2f(terrain_loc.x / this.cell_size.x, terrain_loc.y / this.cell_size.y);
// Clamp values when standing directly on pole
terrain_cell.x = Math.max(0, Math.min(this.cell_count.x - 1, terrain_cell.x));
terrain_cell.y = Math.max(0, Math.min(this.cell_count.y - 1, terrain_cell.y));
return terrain_cell;
}
public float getInterpolatedTerrainHeight(Vector2f terrain_loc) {
float interpolatedHeight;
// Early exit for guild zones
if (this.zone.guild_zone)
return 5.0f;
// Determine terrain and offset from top left vertex
Vector2f terrain_cell = getTerrainCell(terrain_loc);
int pixel_x = (int) Math.floor(terrain_cell.x);
int pixel_y = (int) Math.floor(terrain_cell.y);
Vector2f pixel_offset = new Vector2f(terrain_cell.x % 1, terrain_cell.y % 1);
// 4 surrounding vertices from the pixel array.
short top_left_pixel = terrain_pixel_data[pixel_x][pixel_y];
short top_right_pixel = terrain_pixel_data[pixel_x + 1][pixel_y];
short bottom_left_pixel = terrain_pixel_data[pixel_x][pixel_y + 1];
short bottom_right_pixel = terrain_pixel_data[pixel_x + 1][pixel_y + 1];
// Interpolate between the 4 vertices
interpolatedHeight = top_left_pixel * (1 - pixel_offset.x) * (1 - pixel_offset.y);
interpolatedHeight += top_right_pixel * (1 - pixel_offset.y) * (pixel_offset.x);
interpolatedHeight += (bottom_left_pixel * (1 - pixel_offset.x) * pixel_offset.y);
interpolatedHeight += (bottom_right_pixel * pixel_offset.y * pixel_offset.x);
interpolatedHeight *= this.terrain_scale; // Scale height
return interpolatedHeight;
}
public float getTerrainBlendCoefficient(Vector2f zone_offset) {
// Normalize terrain offset
Vector2f normalizedOffset = new Vector2f(Math.abs(zone_offset.x) / this.zone.template.major_radius,
Math.abs(zone_offset.y) / this.zone.template.minor_radius);
float blendCoefficient;
if (normalizedOffset.x <= 1 - blend_ratio.x || normalizedOffset.x <= normalizedOffset.y) {
if (normalizedOffset.y < 1 - blend_ratio.y)
return 1;
blendCoefficient = (normalizedOffset.y - (1 - blend_ratio.y)) / blend_ratio.y;
} else
blendCoefficient = (normalizedOffset.x - (1 - blend_ratio.x)) / blend_ratio.x;
blendCoefficient = (float) Math.atan((0.5f - blendCoefficient) * PI);
return (blendCoefficient + 1) * 0.5f;
}
}
+11 -11
View File
@@ -8,11 +8,11 @@
package engine.InterestManagement;
import engine.Enum.GridObjectType;
import engine.gameManager.DispatchManager;
import engine.math.FastMath;
import engine.math.Vector3f;
import engine.math.Vector3fImmutable;
import engine.net.DispatchMessage;
import engine.mbEnums.GridObjectType;
import engine.net.client.ClientConnection;
import engine.net.client.msg.LoadCharacterMsg;
import engine.net.client.msg.LoadStructureMsg;
@@ -201,7 +201,7 @@ public class WorldGrid {
UnloadObjectsMsg uom = new UnloadObjectsMsg();
uom.addObject(awo);
DispatchMessage.sendToAllInRange(awo, uom);
DispatchManager.sendToAllInRange(awo, uom);
}
public static void loadObject(AbstractWorldObject awo) {
@@ -213,15 +213,15 @@ public class WorldGrid {
case Building:
lsm = new LoadStructureMsg();
lsm.addObject((Building) awo);
DispatchMessage.sendToAllInRange(awo, lsm);
DispatchManager.sendToAllInRange(awo, lsm);
break;
case NPC:
lcm = new LoadCharacterMsg((NPC) awo, false);
DispatchMessage.sendToAllInRange(awo, lcm);
DispatchManager.sendToAllInRange(awo, lcm);
break;
case Mob:
lcm = new LoadCharacterMsg((Mob) awo, false);
DispatchMessage.sendToAllInRange(awo, lcm);
DispatchManager.sendToAllInRange(awo, lcm);
break;
default:
// *** Refactor: Log error?
@@ -239,19 +239,19 @@ public class WorldGrid {
case Building:
lsm = new LoadStructureMsg();
lsm.addObject((Building) awo);
DispatchMessage.sendToAllInRange(awo, lsm);
DispatchManager.sendToAllInRange(awo, lsm);
break;
case NPC:
lcm = new LoadCharacterMsg((NPC) awo, false);
DispatchMessage.sendToAllInRange(awo, lcm);
DispatchManager.sendToAllInRange(awo, lcm);
break;
case Mob:
lcm = new LoadCharacterMsg((Mob) awo, false);
DispatchMessage.sendToAllInRange(awo, lcm);
DispatchManager.sendToAllInRange(awo, lcm);
break;
case PlayerCharacter:
lcm = new LoadCharacterMsg((PlayerCharacter) awo, false);
DispatchMessage.sendToAllInRange(awo, lcm);
DispatchManager.sendToAllInRange(awo, lcm);
break;
default:
// *** Refactor: Log error?
@@ -263,7 +263,7 @@ public class WorldGrid {
ClientConnection origin) {
UnloadObjectsMsg uom = new UnloadObjectsMsg();
uom.addObject(awo);
DispatchMessage.sendToAllInRange(awo, uom);
DispatchManager.sendToAllInRange(awo, uom);
}
public static void addObject(AbstractWorldObject awo, PlayerCharacter pc) {
+13 -13
View File
@@ -9,19 +9,19 @@
package engine.db.archive;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.Bane;
import engine.objects.City;
import engine.workthreads.WarehousePushThread;
import java.time.Instant;
import org.joda.time.DateTime;
import org.pmw.tinylog.Logger;
import java.sql.*;
import java.time.LocalDateTime;
import java.util.concurrent.LinkedBlockingQueue;
import static engine.Enum.RecordEventType;
import static engine.mbEnums.RecordEventType;
public class BaneRecord extends DataRecord {
@@ -34,11 +34,11 @@ public class BaneRecord extends DataRecord {
private String baneDropperHash;
private String baneGuildHash;
private String baneNationHash;
private Instant baneLiveTime;
private Instant baneDropTime;
private DateTime baneLiveTime;
private DateTime baneDropTime;
private BaneRecord(Bane bane) {
this.recordType = Enum.DataRecordType.BANE;
this.recordType = mbEnums.DataRecordType.BANE;
this.eventType = RecordEventType.PENDING;
}
@@ -51,7 +51,7 @@ public class BaneRecord extends DataRecord {
baneRecord = new BaneRecord(bane);
baneRecord.eventType = eventType;
} else {
baneRecord.recordType = Enum.DataRecordType.BANE;
baneRecord.recordType = mbEnums.DataRecordType.BANE;
baneRecord.eventType = eventType;
}
@@ -129,9 +129,9 @@ public class BaneRecord extends DataRecord {
return outStatement;
}
public static Instant getLastBaneDateTime(City city) {
public static DateTime getLastBaneDateTime(City city) {
Instant outDateTime = null;
DateTime outDateTime = null;
try (Connection connection = DbManager.getConnection();
PreparedStatement statement = buildDateTimeQueryStatement(connection, city);
@@ -139,7 +139,7 @@ public class BaneRecord extends DataRecord {
while (rs.next()) {
outDateTime = rs.getTimestamp("endDatetime").toInstant();
outDateTime = new DateTime(rs.getTimestamp("endDatetime"));
}
@@ -160,7 +160,7 @@ public class BaneRecord extends DataRecord {
}
public static void updateLiveDate(Bane bane, Instant dateTime) {
public static void updateLiveDate(Bane bane, DateTime dateTime) {
if (bane == null)
return;
@@ -175,13 +175,13 @@ public class BaneRecord extends DataRecord {
}
}
private static PreparedStatement buildUpdateLiveDateStatement(Connection connection, Bane bane, Instant dateTime) throws SQLException {
private static PreparedStatement buildUpdateLiveDateStatement(Connection connection, Bane bane, DateTime dateTime) throws SQLException {
PreparedStatement outStatement = null;
String queryString = "UPDATE `warehouse_banehistory` SET `liveDatetime` = ?, `dirty` = 1 WHERE `city_id` = ? AND `resolution` = 'PENDING'";
outStatement = connection.prepareStatement(queryString);
outStatement.setTimestamp(1, new java.sql.Timestamp(dateTime.toEpochMilli()));
outStatement.setTimestamp(1, new java.sql.Timestamp(dateTime.getMillis()));
outStatement.setString(2, bane.getCity().getHash());
return outStatement;
+3 -3
View File
@@ -9,8 +9,8 @@
package engine.db.archive;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.Guild;
import engine.objects.PlayerCharacter;
import engine.workthreads.WarehousePushThread;
@@ -33,7 +33,7 @@ public class CharacterRecord extends DataRecord {
private PlayerCharacter player;
private CharacterRecord(PlayerCharacter player) {
this.recordType = Enum.DataRecordType.CHARACTER;
this.recordType = mbEnums.DataRecordType.CHARACTER;
this.player = player;
}
@@ -45,7 +45,7 @@ public class CharacterRecord extends DataRecord {
if (characterRecord == null) {
characterRecord = new CharacterRecord(player);
} else {
characterRecord.recordType = Enum.DataRecordType.CHARACTER;
characterRecord.recordType = mbEnums.DataRecordType.CHARACTER;
characterRecord.player = player;
}
+8 -8
View File
@@ -9,8 +9,8 @@
package engine.db.archive;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.City;
import engine.workthreads.WarehousePushThread;
@@ -20,7 +20,7 @@ import java.util.concurrent.LinkedBlockingQueue;
public class CityRecord extends DataRecord {
private static final LinkedBlockingQueue<CityRecord> recordPool = new LinkedBlockingQueue<>();
private Enum.RecordEventType eventType;
private mbEnums.RecordEventType eventType;
private City city;
private String cityHash;
private String cityGuildHash;
@@ -32,13 +32,13 @@ public class CityRecord extends DataRecord {
private java.time.LocalDateTime establishedDatetime;
private CityRecord(City city) {
this.recordType = Enum.DataRecordType.CITY;
this.recordType = mbEnums.DataRecordType.CITY;
this.city = city;
this.eventType = Enum.RecordEventType.CREATE;
this.eventType = mbEnums.RecordEventType.CREATE;
}
public static CityRecord borrow(City city, Enum.RecordEventType eventType) {
public static CityRecord borrow(City city, mbEnums.RecordEventType eventType) {
CityRecord cityRecord;
cityRecord = recordPool.poll();
@@ -47,7 +47,7 @@ public class CityRecord extends DataRecord {
cityRecord = new CityRecord(city);
cityRecord.eventType = eventType;
} else {
cityRecord.recordType = Enum.DataRecordType.CITY;
cityRecord.recordType = mbEnums.DataRecordType.CITY;
cityRecord.eventType = eventType;
cityRecord.city = city;
@@ -67,9 +67,9 @@ public class CityRecord extends DataRecord {
cityRecord.locX = cityRecord.city.getTOL().getLoc().x;
cityRecord.locY = -cityRecord.city.getTOL().getLoc().z; // flip sign on 'y' coordinate
cityRecord.zoneHash = cityRecord.city.getParent().getHash();
cityRecord.zoneHash = cityRecord.city.getParent().hash;
if (cityRecord.eventType.equals(Enum.RecordEventType.CREATE))
if (cityRecord.eventType.equals(mbEnums.RecordEventType.CREATE))
cityRecord.establishedDatetime = cityRecord.city.established;
else
cityRecord.establishedDatetime = java.time.LocalDateTime.now();
+2 -2
View File
@@ -9,11 +9,11 @@
package engine.db.archive;
import engine.Enum;
import engine.mbEnums;
class DataRecord {
public Enum.DataRecordType recordType;
public mbEnums.DataRecordType recordType;
DataRecord() {
+1 -1
View File
@@ -22,7 +22,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.concurrent.LinkedBlockingQueue;
import static engine.Enum.DataRecordType;
import static engine.mbEnums.DataRecordType;
public class DataWarehouse implements Runnable {
+9 -8
View File
@@ -9,9 +9,9 @@
package engine.db.archive;
import engine.Enum;
import engine.Enum.RecordEventType;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.mbEnums.RecordEventType;
import engine.objects.Guild;
import engine.workthreads.WarehousePushThread;
@@ -30,7 +30,7 @@ public class GuildRecord extends DataRecord {
public static HashMap<Integer, GuildRecord> GuildRecordCache = null;
public String guildHash;
public int guildID;
private Enum.RecordEventType eventType;
private mbEnums.RecordEventType eventType;
private Guild guild;
private String guildName;
private String charterName;
@@ -44,9 +44,9 @@ public class GuildRecord extends DataRecord {
private java.time.LocalDateTime eventDatetime;
private GuildRecord(Guild guild) {
this.recordType = Enum.DataRecordType.GUILD;
this.recordType = mbEnums.DataRecordType.GUILD;
this.guild = guild;
this.eventType = Enum.RecordEventType.CREATE;
this.eventType = mbEnums.RecordEventType.CREATE;
}
@@ -71,7 +71,7 @@ public class GuildRecord extends DataRecord {
}
public static GuildRecord borrow(Guild guild, Enum.RecordEventType eventType) {
public static GuildRecord borrow(Guild guild, mbEnums.RecordEventType eventType) {
GuildRecord guildRecord;
//add
guildRecord = recordPool.poll();
@@ -81,7 +81,7 @@ public class GuildRecord extends DataRecord {
guildRecord.eventType = eventType;
} else {
guildRecord.guild = guild;
guildRecord.recordType = Enum.DataRecordType.GUILD;
guildRecord.recordType = mbEnums.DataRecordType.GUILD;
guildRecord.eventType = eventType;
}
@@ -89,7 +89,8 @@ public class GuildRecord extends DataRecord {
guildRecord.guildHash = guildRecord.guild.getHash();
guildRecord.guildID = guildRecord.guild.getObjectUUID();
guildRecord.guildName = guildRecord.guild.getName();
guildRecord.charterName = Enum.GuildType.getGuildTypeFromInt(guildRecord.guild.getCharter()).getCharterName();
mbEnums.GuildCharterType guildCharterType = guild.charter;
guildRecord.charterName = guildCharterType.name;
guildRecord.GLHash = DataWarehouse.hasher.encrypt(guildRecord.guild.getGuildLeaderUUID());
+8 -8
View File
@@ -9,8 +9,8 @@
package engine.db.archive;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.AbstractCharacter;
import engine.objects.Mine;
import engine.objects.PlayerCharacter;
@@ -23,7 +23,7 @@ import java.util.concurrent.LinkedBlockingQueue;
public class MineRecord extends DataRecord {
private static final LinkedBlockingQueue<MineRecord> recordPool = new LinkedBlockingQueue<>();
private Enum.RecordEventType eventType;
private mbEnums.RecordEventType eventType;
private String zoneHash;
private String charHash;
private String mineGuildHash;
@@ -33,12 +33,12 @@ public class MineRecord extends DataRecord {
private float locY;
private MineRecord() {
this.recordType = Enum.DataRecordType.MINE;
this.eventType = Enum.RecordEventType.CAPTURE;
this.recordType = mbEnums.DataRecordType.MINE;
this.eventType = mbEnums.RecordEventType.CAPTURE;
}
public static MineRecord borrow(Mine mine, AbstractCharacter character, Enum.RecordEventType eventType) {
public static MineRecord borrow(Mine mine, AbstractCharacter character, mbEnums.RecordEventType eventType) {
MineRecord mineRecord;
mineRecord = recordPool.poll();
@@ -48,13 +48,13 @@ public class MineRecord extends DataRecord {
mineRecord = new MineRecord();
mineRecord.eventType = eventType;
} else {
mineRecord.recordType = Enum.DataRecordType.MINE;
mineRecord.recordType = mbEnums.DataRecordType.MINE;
mineRecord.eventType = eventType;
}
mineRecord.zoneHash = mine.getParentZone().getHash();
mineRecord.zoneHash = mine.getParentZone().hash;
if (character.getObjectType().equals(Enum.GameObjectType.PlayerCharacter)) {
if (character.getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter)) {
player = (PlayerCharacter) character;
mineRecord.charHash = player.getHash();
} else
+3 -3
View File
@@ -23,8 +23,8 @@ import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.concurrent.LinkedBlockingQueue;
import static engine.Enum.DataRecordType;
import static engine.Enum.PvpHistoryType;
import static engine.mbEnums.DataRecordType;
import static engine.mbEnums.PvpHistoryType;
public class PvpRecord extends DataRecord {
@@ -281,7 +281,7 @@ public class PvpRecord extends DataRecord {
outStatement.setInt(8, this.victim.getLevel());
outStatement.setString(9, DataWarehouse.hasher.encrypt(zone.getObjectUUID()));
outStatement.setString(10, zone.getName());
outStatement.setString(10, zone.zoneName);
outStatement.setFloat(11, this.location.getX());
outStatement.setFloat(12, -this.location.getZ()); // flip sign on 'y' coordinate
outStatement.setBoolean(13, this.pvpExp);
+8 -8
View File
@@ -9,8 +9,8 @@
package engine.db.archive;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.Realm;
import engine.workthreads.WarehousePushThread;
@@ -23,20 +23,20 @@ public class RealmRecord extends DataRecord {
private static final LinkedBlockingQueue<RealmRecord> recordPool = new LinkedBlockingQueue<>();
private Realm realm;
private Enum.RecordEventType eventType;
private mbEnums.RecordEventType eventType;
private String cityHash;
private String guildHash;
private String charterType;
private LocalDateTime eventDateTime;
private RealmRecord(Realm realm) {
this.recordType = Enum.DataRecordType.REALM;
this.recordType = mbEnums.DataRecordType.REALM;
this.realm = realm;
this.eventType = Enum.RecordEventType.CAPTURE;
this.eventType = mbEnums.RecordEventType.CAPTURE;
}
public static RealmRecord borrow(Realm realm, Enum.RecordEventType eventType) {
public static RealmRecord borrow(Realm realm, mbEnums.RecordEventType eventType) {
RealmRecord realmRecord;
realmRecord = recordPool.poll();
@@ -45,7 +45,7 @@ public class RealmRecord extends DataRecord {
realmRecord = new RealmRecord(realm);
realmRecord.eventType = eventType;
} else {
realmRecord.recordType = Enum.DataRecordType.REALM;
realmRecord.recordType = mbEnums.DataRecordType.REALM;
realmRecord.eventType = eventType;
realmRecord.realm = realm;
@@ -53,9 +53,9 @@ public class RealmRecord extends DataRecord {
realmRecord.cityHash = realm.getRulingCity().getHash();
realmRecord.guildHash = realm.getRulingCity().getGuild().getHash();
realmRecord.charterType = Enum.CharterType.getCharterTypeByID(realmRecord.realm.getCharterType()).name();
realmRecord.charterType = mbEnums.CharterType.getCharterTypeByID(realmRecord.realm.getCharterType()).name();
if (realmRecord.eventType.equals(Enum.RecordEventType.CAPTURE))
if (realmRecord.eventType.equals(mbEnums.RecordEventType.CAPTURE))
realmRecord.eventDateTime = realm.ruledSince;
else
realmRecord.eventDateTime = LocalDateTime.now();
+4 -4
View File
@@ -9,10 +9,10 @@
package engine.db.handlers;
import engine.Enum;
import engine.Enum.GameObjectType;
import engine.gameManager.ConfigManager;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.mbEnums.GameObjectType;
import engine.objects.Account;
import engine.objects.PlayerCharacter;
import org.pmw.tinylog.Logger;
@@ -27,7 +27,7 @@ public class dbAccountHandler extends dbHandlerBase {
public dbAccountHandler() {
this.localClass = Account.class;
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public Account GET_ACCOUNT(int accountID) {
@@ -204,7 +204,7 @@ public class dbAccountHandler extends dbHandlerBase {
if (account != null) {
account.runAfterLoad();
if (ConfigManager.serverType.equals(Enum.ServerType.LOGINSERVER))
if (ConfigManager.serverType.equals(mbEnums.ServerType.LOGINSERVER))
Account.AccountsMap.put(uname, account.getObjectUUID());
}
+3 -3
View File
@@ -14,7 +14,7 @@ import engine.objects.Bane;
import engine.objects.Building;
import engine.objects.City;
import engine.objects.PlayerCharacter;
import java.time.Instant;
import org.joda.time.DateTime;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
@@ -71,12 +71,12 @@ public class dbBaneHandler extends dbHandlerBase {
}
public boolean SET_BANE_TIME(Instant toSet, int cityUUID) {
public boolean SET_BANE_TIME(DateTime toSet, int cityUUID) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_banes` SET `liveDate`=? WHERE `cityUUID`=?")) {
preparedStatement.setTimestamp(1, java.sql.Timestamp.from(toSet));
preparedStatement.setTimestamp(1, new java.sql.Timestamp(toSet.getMillis()));
preparedStatement.setLong(2, cityUUID);
preparedStatement.execute();
@@ -9,9 +9,9 @@
package engine.db.handlers;
import engine.Enum;
import engine.Enum.GameObjectType;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.mbEnums.GameObjectType;
import engine.objects.BaseClass;
import org.pmw.tinylog.Logger;
@@ -25,7 +25,7 @@ public class dbBaseClassHandler extends dbHandlerBase {
public dbBaseClassHandler() {
this.localClass = BaseClass.class;
this.localObjectType = Enum.GameObjectType.BaseClass;
this.localObjectType = mbEnums.GameObjectType.BaseClass;
}
public BaseClass GET_BASE_CLASS(final int id) {
-51
View File
@@ -1,51 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.objects.Boon;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class dbBoonHandler extends dbHandlerBase {
public dbBoonHandler() {
}
public ArrayList<Boon> GET_BOON_AMOUNTS_FOR_ITEMBASE(int itemBaseUUID) {
ArrayList<Boon> boons = new ArrayList<>();
Boon thisBoon;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_item_boons` WHERE `itemBaseID` = ?")) {
preparedStatement.setInt(1, itemBaseUUID);
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
thisBoon = new Boon(rs);
boons.add(thisBoon);
}
} catch (SQLException e) {
Logger.error(e);
}
return boons;
}
}
+54 -58
View File
@@ -9,16 +9,15 @@
package engine.db.handlers;
import engine.Enum;
import engine.Enum.DbObjectType;
import engine.Enum.ProtectionState;
import engine.Enum.TaxType;
import engine.gameManager.BuildingManager;
import engine.gameManager.DbManager;
import engine.math.Vector3fImmutable;
import engine.mbEnums;
import engine.mbEnums.DbObjectType;
import engine.mbEnums.ProtectionState;
import engine.mbEnums.TaxType;
import engine.objects.*;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import org.joda.time.DateTime;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
@@ -29,18 +28,19 @@ import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
public class dbBuildingHandler extends dbHandlerBase {
public dbBuildingHandler() {
this.localClass = Building.class;
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public Building CREATE_BUILDING(int parentZoneID, int OwnerUUID, String name, int meshUUID,
Vector3fImmutable location, float meshScale, int currentHP,
ProtectionState protectionState, int currentGold, int rank,
Instant upgradeDate, int blueprintUUID, float w, float rotY) {
DateTime upgradeDate, int blueprintUUID, float w, float rotY) {
Building building = null;
@@ -61,7 +61,7 @@ public class dbBuildingHandler extends dbHandlerBase {
preparedStatement.setInt(12, rank);
if (upgradeDate != null)
preparedStatement.setTimestamp(13, new java.sql.Timestamp(upgradeDate.toEpochMilli()));
preparedStatement.setTimestamp(13, new java.sql.Timestamp(upgradeDate.getMillis()));
else
preparedStatement.setNull(13, java.sql.Types.DATE);
@@ -90,14 +90,12 @@ public class dbBuildingHandler extends dbHandlerBase {
return removeFromBuildings(b);
}
public ArrayList<Building> GET_ALL_BUILDINGS_FOR_ZONE(Zone zone) {
public ArrayList<Building> GET_ALL_BUILDINGS() {
ArrayList<Building> buildings = new ArrayList<>();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_building`.*, `object`.`parent` FROM `object` INNER JOIN `obj_building` ON `obj_building`.`UID` = `object`.`UID` WHERE `object`.`parent` = ?;")) {
preparedStatement.setLong(1, zone.getObjectUUID());
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_building`.*, `object`.`parent` FROM `object` INNER JOIN `obj_building` ON `obj_building`.`UID` = `object`.`UID` ORDER BY `object`.`UID` ASC;")) {
ResultSet rs = preparedStatement.executeQuery();
buildings = getObjectsFromRs(rs, 1000);
@@ -114,7 +112,7 @@ public class dbBuildingHandler extends dbHandlerBase {
if (uuid == 0)
return null;
Building building = (Building) DbManager.getFromCache(Enum.GameObjectType.Building, uuid);
Building building = (Building) DbManager.getFromCache(mbEnums.GameObjectType.Building, uuid);
if (building != null)
return building;
@@ -427,26 +425,28 @@ public class dbBuildingHandler extends dbHandlerBase {
return false;
}
public void LOAD_ALL_FRIENDS_FOR_BUILDING(Building building) {
if (building == null)
return;
public void LOAD_BUILDING_FRIENDS() {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_building_friends` WHERE `buildingUID` = ?")) {
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_building_friends`")) {
preparedStatement.setInt(1, building.getObjectUUID());
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
BuildingFriends friend = new BuildingFriends(rs);
switch (friend.getFriendType()) {
// Create map if it does not yet exist
if (!BuildingManager._buildingFriends.containsKey(friend.buildingUID))
BuildingManager._buildingFriends.put(friend.buildingUID, new ConcurrentHashMap<>());
switch (friend.friendType) {
case 7:
building.getFriends().put(friend.getPlayerUID(), friend);
BuildingManager._buildingFriends.get(friend.buildingUID).put(friend.playerUID, friend);
break;
case 8:
case 9:
building.getFriends().put(friend.getGuildUID(), friend);
BuildingManager._buildingFriends.get(friend.buildingUID).put(friend.guildUID, friend);
break;
}
}
@@ -457,26 +457,29 @@ public class dbBuildingHandler extends dbHandlerBase {
}
public void LOAD_ALL_CONDEMNED_FOR_BUILDING(Building building) {
if (building == null)
return;
public void LOAD_BUILDING_CONDEMNED() {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_building_condemned` WHERE `buildingUID` = ?")) {
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_building_condemned`")) {
preparedStatement.setInt(1, building.getObjectUUID());
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
Condemned condemned = new Condemned(rs);
switch (condemned.getFriendType()) {
// Create map if it does not yet exist
if (!BuildingManager._buildingCondemned.containsKey(condemned.buildingUUID))
BuildingManager._buildingCondemned.put(condemned.buildingUUID, new ConcurrentHashMap<>());
switch (condemned.friendType) {
case 2:
building.getCondemned().put(condemned.getPlayerUID(), condemned);
BuildingManager._buildingCondemned.get(condemned.buildingUUID).put(condemned.playerUID, condemned);
break;
case 4:
case 5:
building.getCondemned().put(condemned.getGuildUID(), condemned);
BuildingManager._buildingCondemned.get(condemned.buildingUUID).put(condemned.guildUID, condemned);
break;
}
}
@@ -486,35 +489,27 @@ public class dbBuildingHandler extends dbHandlerBase {
}
}
public ArrayList<Vector3fImmutable> LOAD_PATROL_POINTS(Building building) {
if (building == null)
return null;
ArrayList<Vector3fImmutable> patrolPoints = new ArrayList<>();
public void LOAD_BARRACKS_PATROL_POINTS() {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_building_patrol_points` WHERE `buildingUID` = ?")) {
preparedStatement.setInt(1, building.getObjectUUID());
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_building_patrol_points`")) {
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
float x1 = rs.getFloat("patrolX");
float y1 = rs.getFloat("patrolY");
float z1 = rs.getFloat("patrolZ");
Vector3fImmutable patrolPoint = new Vector3fImmutable(x1, y1, z1);
patrolPoints.add(patrolPoint);
int buildingUUID = rs.getInt("buildingUID");
if (!BuildingManager._buildingPatrolPoints.containsKey(buildingUUID))
BuildingManager._buildingPatrolPoints.put(buildingUUID, new ArrayList<>());
Vector3fImmutable patrolPoint = new Vector3fImmutable(rs.getFloat("patrolX"), rs.getFloat("patrolY"), rs.getFloat("patrolZ"));
BuildingManager._buildingPatrolPoints.get(buildingUUID).add(patrolPoint);
}
} catch (SQLException e) {
Logger.error(e);
}
return patrolPoints;
}
public boolean ADD_TO_CONDEMNLIST(final long parentUID, final long playerUID, final long guildID, final int friendType) {
@@ -724,10 +719,10 @@ public class dbBuildingHandler extends dbHandlerBase {
+ "WHERE`buildingUID` = ? AND `playerUID` = ? AND `guildUID` = ? AND `friendType` = ?")) {
preparedStatement.setBoolean(1, active);
preparedStatement.setInt(2, condemn.getParent());
preparedStatement.setInt(3, condemn.getPlayerUID());
preparedStatement.setInt(4, condemn.getGuildUID());
preparedStatement.setInt(5, condemn.getFriendType());
preparedStatement.setInt(2, condemn.buildingUUID);
preparedStatement.setInt(3, condemn.playerUID);
preparedStatement.setInt(4, condemn.guildUID);
preparedStatement.setInt(5, condemn.friendType);
return (preparedStatement.executeUpdate() > 0);
@@ -754,7 +749,7 @@ public class dbBuildingHandler extends dbHandlerBase {
return false;
}
public boolean updateBuildingUpgradeTime(Instant upgradeDateTime, Building toUpgrade, int costToUpgrade) {
public boolean updateBuildingUpgradeTime(LocalDateTime upgradeDateTime, Building toUpgrade, int costToUpgrade) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_building SET upgradeDate=?, currentGold=? "
@@ -763,7 +758,8 @@ public class dbBuildingHandler extends dbHandlerBase {
if (upgradeDateTime == null)
preparedStatement.setNull(1, java.sql.Types.DATE);
else
preparedStatement.setTimestamp(1, new java.sql.Timestamp(upgradeDateTime.toEpochMilli()));
preparedStatement.setTimestamp(1, new java.sql.Timestamp(upgradeDateTime.atZone(ZoneId.systemDefault())
.toInstant().toEpochMilli()));
preparedStatement.setInt(2, toUpgrade.getStrongboxValue() - costToUpgrade);
preparedStatement.setInt(3, toUpgrade.getObjectUUID());
@@ -842,7 +838,7 @@ public class dbBuildingHandler extends dbHandlerBase {
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_building SET taxDate=? "
+ "WHERE UID = ?")) {
preparedStatement.setTimestamp(1, new java.sql.Timestamp(Instant.now().plus(java.time.temporal.ChronoUnit.DAYS, 7).toEpochMilli()));
preparedStatement.setTimestamp(1, new java.sql.Timestamp(DateTime.now().plusDays(7).getMillis()));
preparedStatement.setInt(2, building.getObjectUUID());
return (preparedStatement.executeUpdate() > 0);
@@ -10,6 +10,7 @@
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.BuildingLocation;
import org.pmw.tinylog.Logger;
@@ -23,7 +24,7 @@ public class dbBuildingLocationHandler extends dbHandlerBase {
public dbBuildingLocationHandler() {
this.localClass = BuildingLocation.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public ArrayList<BuildingLocation> LOAD_BUILDING_LOCATIONS() {
@@ -10,6 +10,7 @@
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.Account;
import engine.objects.PlayerCharacter;
import engine.session.CSSession;
@@ -26,7 +27,7 @@ public class dbCSSessionHandler extends dbHandlerBase {
public dbCSSessionHandler() {
this.localClass = CSSession.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public boolean ADD_CSSESSION(String secKey, Account acc, InetAddress inet, String machineID) {
@@ -9,8 +9,8 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.CharacterPower;
import engine.objects.PlayerCharacter;
import engine.server.MBServerStatics;
@@ -23,7 +23,7 @@ public class dbCharacterPowerHandler extends dbHandlerBase {
public dbCharacterPowerHandler() {
this.localClass = CharacterPower.class;
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public CharacterPower ADD_CHARACTER_POWER(CharacterPower toAdd) {
@@ -74,7 +74,7 @@ public class dbCharacterPowerHandler extends dbHandlerBase {
public CharacterPower GET_CHARACTER_POWER(int objectUUID) {
CharacterPower characterPower = (CharacterPower) DbManager.getFromCache(Enum.GameObjectType.CharacterPower, objectUUID);
CharacterPower characterPower = (CharacterPower) DbManager.getFromCache(mbEnums.GameObjectType.CharacterPower, objectUUID);
if (characterPower != null)
return characterPower;
@@ -9,8 +9,8 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.CharacterRune;
import org.pmw.tinylog.Logger;
@@ -21,7 +21,7 @@ public class dbCharacterRuneHandler extends dbHandlerBase {
public dbCharacterRuneHandler() {
this.localClass = CharacterRune.class;
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public CharacterRune ADD_CHARACTER_RUNE(final CharacterRune toAdd) {
@@ -49,7 +49,7 @@ public class dbCharacterRuneHandler extends dbHandlerBase {
public CharacterRune GET_CHARACTER_RUNE(int runeID) {
CharacterRune characterRune = (CharacterRune) DbManager.getFromCache(Enum.GameObjectType.CharacterRune, runeID);
CharacterRune characterRune = (CharacterRune) DbManager.getFromCache(mbEnums.GameObjectType.CharacterRune, runeID);
if (characterRune != null)
return characterRune;
@@ -9,8 +9,8 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.AbstractCharacter;
import engine.objects.CharacterSkill;
import engine.objects.PlayerCharacter;
@@ -24,7 +24,7 @@ public class dbCharacterSkillHandler extends dbHandlerBase {
public dbCharacterSkillHandler() {
this.localClass = CharacterSkill.class;
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public CharacterSkill ADD_SKILL(CharacterSkill toAdd) {
@@ -72,7 +72,7 @@ public class dbCharacterSkillHandler extends dbHandlerBase {
public CharacterSkill GET_SKILL(final int objectUUID) {
CharacterSkill characterSkill = (CharacterSkill) DbManager.getFromCache(Enum.GameObjectType.CharacterSkill, objectUUID);
CharacterSkill characterSkill = (CharacterSkill) DbManager.getFromCache(mbEnums.GameObjectType.CharacterSkill, objectUUID);
if (characterSkill != null)
return characterSkill;
@@ -95,7 +95,7 @@ public class dbCharacterSkillHandler extends dbHandlerBase {
ConcurrentHashMap<String, CharacterSkill> characterSkills = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
if (ac == null || (!(ac.getObjectType().equals(Enum.GameObjectType.PlayerCharacter))))
if (ac == null || (!(ac.getObjectType().equals(mbEnums.GameObjectType.PlayerCharacter))))
return characterSkills;
PlayerCharacter playerCharacter = (PlayerCharacter) ac;
+18 -18
View File
@@ -9,8 +9,8 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.AbstractGameObject;
import engine.objects.Building;
import engine.objects.City;
@@ -25,7 +25,7 @@ public class dbCityHandler extends dbHandlerBase {
public dbCityHandler() {
this.localClass = City.class;
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public static void addObject(ArrayList<AbstractGameObject> list, ResultSet rs) throws SQLException {
@@ -34,40 +34,42 @@ public class dbCityHandler extends dbHandlerBase {
case "zone":
Zone zone = new Zone(rs);
DbManager.addToCache(zone);
zone.runAfterLoad();
list.add(zone);
break;
case "building":
Building building = new Building(rs);
DbManager.addToCache(building);
building.runAfterLoad();
list.add(building);
break;
case "city":
City city = new City(rs);
DbManager.addToCache(city);
city.runAfterLoad();
list.add(city);
break;
}
}
public ArrayList<AbstractGameObject> CREATE_CITY(int ownerID, int parentZoneID, int realmID, float xCoord, float yCoord, float zCoord, float rotation, float W, String name, LocalDateTime established) {
public ArrayList<AbstractGameObject> CREATE_CITY(int ownerID, int parentZoneID, float xCoord, float yCoord, float zCoord, float rotation, float W, String name, LocalDateTime established) {
LocalDateTime upgradeTime = LocalDateTime.now().plusHours(2);
ArrayList<AbstractGameObject> objectList = new ArrayList<>();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("CALL `city_CREATE`(?, ?, ?, ?, ?, ?, ?, ?, ?,?,?)")) {
PreparedStatement preparedStatement = connection.prepareStatement("CALL `city_CREATE`(?, ?, ?, ?, ?, ?, ?, ?,?,?)")) {
preparedStatement.setLong(1, ownerID); //objectUUID of owning player
preparedStatement.setLong(2, parentZoneID); //objectUUID of parent (continent) zone
preparedStatement.setLong(3, realmID); //objectUUID of realm city belongs in
preparedStatement.setFloat(4, xCoord); //xOffset from parentZone center
preparedStatement.setFloat(5, yCoord); //yOffset from parentZone center
preparedStatement.setFloat(6, zCoord); //zOffset from parentZone center
preparedStatement.setString(7, name); //city name
preparedStatement.setTimestamp(8, Timestamp.valueOf(established));
preparedStatement.setFloat(9, rotation);
preparedStatement.setFloat(10, W);
preparedStatement.setTimestamp(11, Timestamp.valueOf(upgradeTime));
preparedStatement.setFloat(3, xCoord); //xOffset from parentZone center
preparedStatement.setFloat(4, yCoord); //yOffset from parentZone center
preparedStatement.setFloat(5, zCoord); //zOffset from parentZone center
preparedStatement.setString(6, name); //city name
preparedStatement.setTimestamp(7, Timestamp.valueOf(established));
preparedStatement.setFloat(8, rotation);
preparedStatement.setFloat(9, W);
preparedStatement.setTimestamp(10, Timestamp.valueOf(upgradeTime));
boolean work = preparedStatement.execute();
@@ -96,14 +98,12 @@ public class dbCityHandler extends dbHandlerBase {
return objectList;
}
public ArrayList<City> GET_CITIES_BY_ZONE(final int objectUUID) {
public ArrayList<City> GET_ALL_CITIES() {
ArrayList<City> cityList = new ArrayList<>();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_city`.*, `object`.`parent` FROM `obj_city` INNER JOIN `object` ON `object`.`UID` = `obj_city`.`UID` WHERE `object`.`parent`=?;")) {
preparedStatement.setLong(1, objectUUID);
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_city`.*, `object`.`parent` FROM `obj_city` INNER JOIN `object` ON `object`.`UID` = `obj_city`.`UID` ORDER BY `object`.`UID` ASC;")) {
ResultSet rs = preparedStatement.executeQuery();
cityList = getObjectsFromRs(rs, 100);
@@ -117,7 +117,7 @@ public class dbCityHandler extends dbHandlerBase {
public City GET_CITY(final int cityId) {
City city = (City) DbManager.getFromCache(Enum.GameObjectType.City, cityId);
City city = (City) DbManager.getFromCache(mbEnums.GameObjectType.City, cityId);
if (city != null)
return city;
+14 -35
View File
@@ -9,11 +9,11 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.gameManager.ItemManager;
import engine.mbEnums;
import engine.objects.Contract;
import engine.objects.ItemBase;
import engine.objects.MobEquipment;
import engine.objects.Item;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
@@ -25,12 +25,12 @@ public class dbContractHandler extends dbHandlerBase {
public dbContractHandler() {
this.localClass = Contract.class;
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public Contract GET_CONTRACT(final int objectUUID) {
Contract contract = (Contract) DbManager.getFromCache(Enum.GameObjectType.Contract, objectUUID);
Contract contract = (Contract) DbManager.getFromCache(mbEnums.GameObjectType.Contract, objectUUID);
if (contract != null)
return contract;
@@ -63,33 +63,12 @@ public class dbContractHandler extends dbHandlerBase {
while (rs.next()) {
//handle item base
int itemBaseID = rs.getInt("itembaseID");
int templateID = rs.getInt("templateID");
ItemBase ib = ItemBase.getItemBase(itemBaseID);
Item item = new Item(templateID);
item.objectUUID = ItemManager.lastNegativeID.decrementAndGet();
contract.getSellInventory().add(item);
if (ib != null) {
MobEquipment me = new MobEquipment(ib, 0, 0);
contract.getSellInventory().add(me);
//handle magic effects
String prefix = rs.getString("prefix");
int pRank = rs.getInt("pRank");
String suffix = rs.getString("suffix");
int sRank = rs.getInt("sRank");
if (prefix != null) {
me.setPrefix(prefix, pRank);
me.setIsID(true);
}
if (suffix != null) {
me.setSuffix(suffix, sRank);
me.setIsID(true);
}
}
}
} catch (SQLException e) {
Logger.error(e);
@@ -127,12 +106,12 @@ public class dbContractHandler extends dbHandlerBase {
}
}
public boolean updateAllowedBuildings(final Contract con, final long slotbitvalue) {
public boolean updateAllowedBuildings(final Contract con) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `static_npc_contract` SET `allowedBuildingTypeID`=? WHERE `contractID`=?")) {
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `static_npc_contract` SET `slotInBuildings`=? WHERE `contractID`=?")) {
preparedStatement.setLong(1, slotbitvalue);
preparedStatement.setString(1, mbEnums.asString(con.allowedBuildings));
preparedStatement.setInt(2, con.getContractID());
return (preparedStatement.executeUpdate() > 0);
@@ -147,7 +126,7 @@ public class dbContractHandler extends dbHandlerBase {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `static_npc_contract` SET `contractID`=?, `name`=?, "
+ "`mobbaseID`=?, `classID`=?, vendorDialog=?, iconID=?, allowedBuildingTypeID=? WHERE `ID`=?")) {
+ "`mobbaseID`=?, `classID`=?, vendorDialog=?, iconID=?, slotInBuildings=? WHERE `ID`=?")) {
preparedStatement.setInt(1, con.getContractID());
preparedStatement.setString(2, con.getName());
@@ -156,7 +135,7 @@ public class dbContractHandler extends dbHandlerBase {
preparedStatement.setInt(5, (con.getVendorDialog() != null) ? con.getVendorDialog().getObjectUUID() : 0);
preparedStatement.setInt(6, con.getIconID());
preparedStatement.setInt(8, con.getObjectUUID());
preparedStatement.setLong(7, con.getAllowedBuildings().toLong());
preparedStatement.setString(7, mbEnums.asString(con.allowedBuildings));
return (preparedStatement.executeUpdate() > 0);
@@ -9,9 +9,9 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.gameManager.PowersManager;
import engine.mbEnums;
import engine.powers.EffectsBase;
import engine.powers.effectmodifiers.*;
import org.pmw.tinylog.Logger;
@@ -63,7 +63,7 @@ public class dbEffectsBaseHandler extends dbHandlerBase {
IDString = rs.getString("IDString");
EffectsBase effectBase = PowersManager.getEffectByIDString(IDString);
Enum.ModType modifier = Enum.ModType.GetModType(rs.getString("modType"));
mbEnums.ModType modifier = mbEnums.ModType.GetModType(rs.getString("modType"));
//combine item prefix and suffix effect modifiers
@@ -86,7 +86,7 @@ public class dbEffectsBaseHandler extends dbHandlerBase {
}
private static AbstractEffectModifier getCombinedModifiers(AbstractEffectModifier abstractEffectModifier, ResultSet rs, EffectsBase effectBase, Enum.ModType modifier) throws SQLException {
private static AbstractEffectModifier getCombinedModifiers(AbstractEffectModifier abstractEffectModifier, ResultSet rs, EffectsBase effectBase, mbEnums.ModType modifier) throws SQLException {
switch (modifier) {
case AdjustAboveDmgCap:
abstractEffectModifier = new AdjustAboveDmgCapEffectModifier(rs);
@@ -10,38 +10,49 @@
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.gameManager.PowersManager;
import engine.mbEnums;
import engine.objects.EffectsResourceCosts;
import org.json.JSONObject;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
public class dbEffectsResourceCostHandler extends dbHandlerBase {
public dbEffectsResourceCostHandler() {
this.localClass = EffectsResourceCosts.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public ArrayList<EffectsResourceCosts> GET_ALL_EFFECT_RESOURCES(String idString) {
ArrayList<EffectsResourceCosts> effectsResourceCosts = new ArrayList<>();
public void LOAD_ALL_COSTMAPS() {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_power_effectcost` WHERE `IDString` = ?")) {
preparedStatement.setString(1, idString);
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_effect_costmaps`")) {
ResultSet rs = preparedStatement.executeQuery();
effectsResourceCosts = getObjectsFromRs(rs, 1000);
while (rs.next()) {
String effectID = rs.getString("effectID");
String costString = rs.getString("costmap");
JSONObject costJSON = new JSONObject(costString);
HashMap<mbEnums.ResourceType, Integer> costmap = new HashMap<>();
for (String key : costJSON.keySet()) {
int value = costJSON.getInt(key);
costmap.put(mbEnums.ResourceType.valueOf(key), value);
}
PowersManager._effect_costMaps.put(effectID, costmap);
}
} catch (SQLException e) {
Logger.error(e);
}
return effectsResourceCosts;
}
}
+9 -29
View File
@@ -9,12 +9,12 @@
package engine.db.handlers;
import engine.Enum;
import engine.Enum.GuildHistoryType;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.mbEnums.GuildHistoryType;
import engine.objects.*;
import engine.server.world.WorldServer;
import java.time.Instant;
import org.joda.time.DateTime;
import org.pmw.tinylog.Logger;
import java.sql.*;
@@ -24,7 +24,7 @@ public class dbGuildHandler extends dbHandlerBase {
public dbGuildHandler() {
this.localClass = Guild.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public static ArrayList<PlayerCharacter> GET_GUILD_BANISHED(final int id) {
@@ -125,7 +125,7 @@ public class dbGuildHandler extends dbHandlerBase {
return false;
}
public boolean ADD_TO_GUILDHISTORY(int target, PlayerCharacter playerCharacter, Instant historyDate, GuildHistoryType historyType) {
public boolean ADD_TO_GUILDHISTORY(int target, PlayerCharacter playerCharacter, DateTime historyDate, GuildHistoryType historyType) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_character_guildhistory` (`GuildID`, `CharacterID`, `historyDate`, `historyType`) VALUES (?,?,?,?)")) {
@@ -136,7 +136,7 @@ public class dbGuildHandler extends dbHandlerBase {
if (historyDate == null)
preparedStatement.setNull(3, java.sql.Types.DATE);
else
preparedStatement.setTimestamp(3, java.sql.Timestamp.from(historyDate));
preparedStatement.setTimestamp(3, new Timestamp(historyDate.getMillis()));
preparedStatement.setString(4, historyType.name());
@@ -276,7 +276,7 @@ public class dbGuildHandler extends dbHandlerBase {
public Guild GET_GUILD(int id) {
Guild guild = (Guild) DbManager.getFromCache(Enum.GameObjectType.Guild, id);
Guild guild = (Guild) DbManager.getFromCache(mbEnums.GameObjectType.Guild, id);
if (guild != null)
return guild;
@@ -427,7 +427,7 @@ public class dbGuildHandler extends dbHandlerBase {
preparedStatement.setInt(6, guildTag.symbolColor);
preparedStatement.setInt(7, guildTag.backgroundDesign);
preparedStatement.setInt(8, guildTag.symbol);
preparedStatement.setInt(9, g.getCharter());
preparedStatement.setInt(9, g.charter.templateID);
preparedStatement.setString(10, g.getLeadershipType());
preparedStatement.setString(11, g.getMotto());
@@ -573,7 +573,7 @@ public class dbGuildHandler extends dbHandlerBase {
preparedStatement.setInt(4, g.getGuildTag().symbolColor);
preparedStatement.setInt(5, g.getGuildTag().backgroundDesign);
preparedStatement.setInt(6, g.getGuildTag().symbol);
preparedStatement.setInt(7, g.getCharter());
preparedStatement.setInt(7, g.charter.templateID);
preparedStatement.setString(8, g.getMOTD());
preparedStatement.setString(9, g.getICMOTD());
preparedStatement.setString(10, "");
@@ -695,24 +695,4 @@ public class dbGuildHandler extends dbHandlerBase {
}
}
//TODO uncomment this when finished with guild history warehouse integration
// public HashMap<Integer, GuildRecord> GET_WAREHOUSE_GUILD_HISTORY(){
//
// HashMap<Integer, GuildRecord> tempMap = new HashMap<>();
// prepareCallable("SELECT * FROM `warehouse_guildhistory` WHERE `eventType` = 'CREATE'");
// try {
// ResultSet rs = executeQuery();
//
// while (rs.next()) {
// GuildRecord guildRecord = new GuildRecord(rs);
// tempMap.put(guildRecord.guildID, guildRecord);
// }
// }catch (Exception e){
// Logger.error(e);
// }
// return tempMap;
//
// }
}
+3 -3
View File
@@ -9,10 +9,10 @@
package engine.db.handlers;
import engine.Enum;
import engine.Enum.GameObjectType;
import engine.gameManager.ConfigManager;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.mbEnums.GameObjectType;
import engine.objects.AbstractGameObject;
import engine.objects.AbstractWorldObject;
import org.pmw.tinylog.Logger;
@@ -42,7 +42,7 @@ public abstract class dbHandlerBase {
// Only call runAfterLoad() for objects instanced on the world server
if ((abstractGameObject != null && abstractGameObject instanceof AbstractWorldObject) &&
(ConfigManager.serverType.equals(Enum.ServerType.WORLDSERVER) ||
(ConfigManager.serverType.equals(mbEnums.ServerType.WORLDSERVER) ||
(abstractGameObject.getObjectType() == GameObjectType.Guild)))
((AbstractWorldObject) abstractGameObject).runAfterLoad();
@@ -1,43 +0,0 @@
package engine.db.handlers;
import engine.InterestManagement.HeightMap;
import engine.gameManager.DbManager;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class dbHeightMapHandler extends dbHandlerBase {
public dbHeightMapHandler() {
}
public void LOAD_ALL_HEIGHTMAPS() {
HeightMap thisHeightmap;
HeightMap.heightMapsCreated = 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_zone_heightmap INNER JOIN static_zone_size ON static_zone_size.loadNum = static_zone_heightmap.zoneLoadID")) {
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
thisHeightmap = new HeightMap(rs);
if (thisHeightmap.getHeightmapImage() == null) {
Logger.info("Imagemap for " + thisHeightmap.getHeightMapID() + " was null");
continue;
}
}
} catch (SQLException e) {
Logger.error(e);
}
}
}
@@ -1,138 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.objects.ItemBase;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
public class dbItemBaseHandler extends dbHandlerBase {
public dbItemBaseHandler() {
}
public void LOAD_BAKEDINSTATS(ItemBase itemBase) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_item_bakedinstat` WHERE `itemID` = ?")) {
preparedStatement.setInt(1, itemBase.getUUID());
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
if (rs.getBoolean("fromUse"))
itemBase.getUsedStats().put(rs.getInt("token"), rs.getInt("numTrains"));
else
itemBase.getBakedInStats().put(rs.getInt("token"), rs.getInt("numTrains"));
}
} catch (SQLException e) {
Logger.error(e);
}
}
public void LOAD_ANIMATIONS(ItemBase itemBase) {
ArrayList<Integer> tempList = new ArrayList<>();
ArrayList<Integer> tempListOff = new ArrayList<>();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_itembase_animations` WHERE `itemBaseUUID` = ?")) {
preparedStatement.setInt(1, itemBase.getUUID());
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
int animation = rs.getInt("animation");
boolean rightHand = rs.getBoolean("rightHand");
if (rightHand)
tempList.add(animation);
else
tempListOff.add(animation);
}
} catch (SQLException e) {
Logger.error(e);
}
itemBase.setAnimations(tempList);
itemBase.setOffHandAnimations(tempListOff);
}
public void LOAD_ALL_ITEMBASES() {
ItemBase itemBase;
int recordsRead = 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_itembase")) {
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
recordsRead++;
itemBase = new ItemBase(rs);
ItemBase.addToCache(itemBase);
}
} catch (SQLException e) {
Logger.error(e);
}
Logger.info("read: " + recordsRead + " cached: " + ItemBase.getUUIDCache().size());
}
public HashMap<Integer, ArrayList<Integer>> LOAD_RUNES_FOR_NPC_AND_MOBS() {
HashMap<Integer, ArrayList<Integer>> runeSets = new HashMap<>();
int runeSetID;
int runeBaseID;
int recordsRead = 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_npc_runeSet")) {
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
recordsRead++;
runeSetID = rs.getInt("runeSet");
runeBaseID = rs.getInt("runeBase");
if (runeSets.get(runeSetID) == null) {
ArrayList<Integer> runeList = new ArrayList<>();
runeList.add(runeBaseID);
runeSets.put(runeSetID, runeList);
} else {
ArrayList<Integer> runeList = runeSets.get(runeSetID);
runeList.add(runeSetID);
runeSets.put(runeSetID, runeList);
}
}
} catch (SQLException e) {
Logger.error(e);
return runeSets;
}
Logger.info("read: " + recordsRead + " cached: " + runeSets.size());
return runeSets;
}
}
+136 -41
View File
@@ -9,12 +9,15 @@
package engine.db.handlers;
import engine.Enum.ItemContainerType;
import engine.Enum.ItemType;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.mbEnums.ItemContainerType;
import engine.mbEnums.ItemType;
import engine.objects.AbstractCharacter;
import engine.objects.CharacterItemManager;
import engine.objects.Item;
import engine.objects.ItemTemplate;
import org.json.JSONObject;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
@@ -22,6 +25,7 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
@@ -29,7 +33,7 @@ public class dbItemHandler extends dbHandlerBase {
public dbItemHandler() {
this.localClass = Item.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
private static String formatTradeString(HashSet<Integer> list) {
@@ -52,46 +56,56 @@ public class dbItemHandler extends dbHandlerBase {
return ret;
}
public Item ADD_ITEM(Item toAdd) {
public Item PERSIST(Item toAdd) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("CALL `item_CREATE`(?, ?, ?, ?, ?, ?, ?, ?, ?,?);")) {
PreparedStatement preparedStatement = connection.prepareStatement("CALL `item_CREATE`(?, ?, ?, ?, ?, ?, ?, ?,?);")) {
preparedStatement.setInt(1, toAdd.getOwnerID());
preparedStatement.setInt(2, toAdd.getItemBaseID());
preparedStatement.setInt(3, toAdd.getChargesRemaining());
preparedStatement.setInt(4, toAdd.getDurabilityCurrent());
preparedStatement.setInt(5, toAdd.getDurabilityMax());
preparedStatement.setInt(1, toAdd.ownerID);
preparedStatement.setInt(2, toAdd.templateID);
preparedStatement.setInt(3, (byte) toAdd.chargesRemaining);
preparedStatement.setInt(4, (short) toAdd.combat_health_current);
if (toAdd.getNumOfItems() < 1)
preparedStatement.setInt(6, 1);
preparedStatement.setInt(5, 1);
else
preparedStatement.setInt(6, toAdd.getNumOfItems());
preparedStatement.setInt(5, toAdd.getNumOfItems());
switch (toAdd.containerType) {
case INVENTORY:
preparedStatement.setString(7, "inventory");
preparedStatement.setString(6, "inventory");
break;
case EQUIPPED:
preparedStatement.setString(7, "equip");
preparedStatement.setString(6, "equip");
break;
case BANK:
preparedStatement.setString(7, "bank");
preparedStatement.setString(6, "bank");
break;
case VAULT:
preparedStatement.setString(7, "vault");
preparedStatement.setString(6, "vault");
break;
case FORGE:
preparedStatement.setString(7, "forge");
preparedStatement.setString(6, "forge");
break;
default:
preparedStatement.setString(7, "none"); //Shouldn't be here
preparedStatement.setString(6, "none"); //Shouldn't be here
break;
}
preparedStatement.setByte(8, toAdd.getEquipSlot());
preparedStatement.setInt(9, toAdd.getFlags());
preparedStatement.setString(10, toAdd.getCustomName());
if (toAdd.equipSlot.equals(mbEnums.EquipSlotType.NONE))
preparedStatement.setString(7, "");
else
preparedStatement.setString(7, toAdd.equipSlot.name());
String flagString = "";
for (mbEnums.ItemFlags itemflag : toAdd.flags)
flagString += itemflag.toString() + ";";
flagString = flagString.replaceAll(";$", "");
preparedStatement.setString(8, flagString);
preparedStatement.setString(9, toAdd.name);
ResultSet rs = preparedStatement.executeQuery();
@@ -148,7 +162,7 @@ public class dbItemHandler extends dbHandlerBase {
ArrayList<Item> itemList;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_item`.*, `object`.`parent`, `object`.`type` FROM `object` INNER JOIN `obj_item` ON `object`.`UID` = `obj_item`.`UID` WHERE `object`.`parent`=? && `obj_item`.`item_container`='equip';")) {
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_item`.*, `object`.`parent`, `object`.`type` FROM `object` INNER JOIN `obj_item` ON `object`.`UID` = `obj_item`.`UID` WHERE `object`.`parent`=? && `obj_item`.`container`='equip';")) {
preparedStatement.setLong(1, targetId);
ResultSet rs = preparedStatement.executeQuery();
@@ -163,6 +177,49 @@ public class dbItemHandler extends dbHandlerBase {
return itemList;
}
public void LOAD_ITEM_TEMPLATES() {
HashMap<ItemType, Integer> templateTCountMap = new HashMap<>();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_item_templates`;");
ResultSet rs = preparedStatement.executeQuery()) {
while (rs.next()) {
int templateID = rs.getInt("id");
JSONObject jsonObject = new JSONObject(rs.getString("template"));
ItemTemplate itemTemplate = new ItemTemplate(jsonObject);
itemTemplate.template_id = templateID;
ItemTemplate.templates.put(templateID, itemTemplate);
templateTCountMap.merge(itemTemplate.item_type, 1, Integer::sum);
}
Logger.info(templateTCountMap.toString());
} catch (Exception e) {
Logger.error(e);
}
}
public void LOAD_TEMPLATE_MODTABLES() {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_vendor_items`;");
ResultSet rs = preparedStatement.executeQuery()) {
while (rs.next()) {
int templateID = rs.getInt("templateID");
int modTable = rs.getInt("modTable");
ItemTemplate template = ItemTemplate.templates.get(templateID);
template.modTable = modTable;
}
} catch (Exception e) {
Logger.error(e);
}
}
public Item GET_ITEM(final int itemUUID) {
Item item;
@@ -242,7 +299,7 @@ public class dbItemHandler extends dbHandlerBase {
public boolean MOVE_GOLD(final Item from, final Item to, final int amt) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_numberOfItems` = CASE WHEN `UID`=? THEN ? WHEN `UID`=? THEN ? END WHERE `UID` IN (?, ?);")) {
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `numberOfItems` = CASE WHEN `UID`=? THEN ? WHEN `UID`=? THEN ? END WHERE `UID` IN (?, ?);")) {
int newFromAmt = from.getNumOfItems() - amt;
int newToAmt = to.getNumOfItems() + amt;
@@ -268,11 +325,11 @@ public class dbItemHandler extends dbHandlerBase {
for (Item item : inventory) {
if (item.getItemBase().getType().equals(ItemType.GOLD))
if (item.template.item_type.equals(ItemType.GOLD))
continue;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` LEFT JOIN `object` ON `object`.`UID` = `obj_item`.`UID` SET `object`.`parent`=NULL, `obj_item`.`item_container`='none' WHERE `object`.`UID`=?;")) {
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` LEFT JOIN `object` ON `object`.`UID` = `obj_item`.`UID` SET `object`.`parent`=NULL, `obj_item`.`container`='none' WHERE `object`.`UID`=?;")) {
preparedStatement.setLong(1, item.getObjectUUID());
worked = (preparedStatement.executeUpdate() > 0);
@@ -288,12 +345,12 @@ public class dbItemHandler extends dbHandlerBase {
return worked;
}
public HashSet<Integer> GET_ITEMS_FOR_VENDOR(final int vendorID) {
public HashSet<Integer> GET_VENDOR_CAN_ROLL_LIST(final int vendorID) {
HashSet<Integer> itemSet = new HashSet<>();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT ID FROM static_itembase WHERE vendorType = ?")) {
PreparedStatement preparedStatement = connection.prepareStatement("SELECT templateID FROM static_vendor_items WHERE vendorType = ?")) {
preparedStatement.setInt(1, vendorID);
@@ -311,8 +368,8 @@ public class dbItemHandler extends dbHandlerBase {
}
//Used to transfer a single item between owners or equip or vault or bank or inventory
public boolean UPDATE_OWNER(final Item item, int newOwnerID, boolean ownerNPC, boolean ownerPlayer,
boolean ownerAccount, ItemContainerType containerType, int slot) {
public boolean UPDATE_OWNER(final Item item, int newOwnerID,
ItemContainerType containerType, mbEnums.EquipSlotType slot) {
boolean worked = false;
@@ -346,7 +403,12 @@ public class dbItemHandler extends dbHandlerBase {
preparedStatement.setString(3, "none"); //Shouldn't be here
break;
}
preparedStatement.setInt(4, slot);
if (slot.equals(mbEnums.EquipSlotType.NONE))
preparedStatement.setString(4, "");
else
preparedStatement.setString(4, slot.name());
ResultSet rs = preparedStatement.executeQuery();
if (rs.next())
@@ -362,11 +424,11 @@ public class dbItemHandler extends dbHandlerBase {
public boolean SET_DURABILITY(final Item item, int value) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_durabilityCurrent`=? WHERE `UID`=? AND `item_durabilityCurrent`=?")) {
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `combat_health_current`=? WHERE `UID`=? AND `combat_health_current`=?")) {
preparedStatement.setInt(1, value);
preparedStatement.setLong(2, item.getObjectUUID());
preparedStatement.setInt(3, item.getDurabilityCurrent());
preparedStatement.setInt(3, (short) item.combat_health_current);
return (preparedStatement.executeUpdate() > 0);
@@ -379,7 +441,7 @@ public class dbItemHandler extends dbHandlerBase {
public boolean UPDATE_FORGE_TO_INVENTORY(final Item item) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_container` = ? WHERE `UID` = ? AND `item_container` = 'forge';")) {
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `container` = ? WHERE `UID` = ? AND `container` = 'forge';")) {
preparedStatement.setString(1, "inventory");
preparedStatement.setLong(2, item.getObjectUUID());
@@ -412,11 +474,11 @@ public class dbItemHandler extends dbHandlerBase {
*/
public boolean UPDATE_GOLD(final Item item, int newValue, int oldValue) {
if (!item.getItemBase().getType().equals(ItemType.GOLD))
if (!item.template.item_type.equals(ItemType.GOLD))
return false;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_numberOfItems`=? WHERE `UID`=?")) {
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `numberOfItems`=? WHERE `UID`=?")) {
preparedStatement.setInt(1, newValue);
preparedStatement.setLong(2, item.getObjectUUID());
@@ -433,9 +495,9 @@ public class dbItemHandler extends dbHandlerBase {
public boolean UPDATE_REMAINING_CHARGES(final Item item) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_chargesRemaining` = ? WHERE `UID` = ?")) {
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `chargesRemaining` = ? WHERE `UID` = ?")) {
preparedStatement.setInt(1, item.getChargesRemaining());
preparedStatement.setInt(1, (byte) item.chargesRemaining);
preparedStatement.setLong(2, item.getObjectUUID());
return (preparedStatement.executeUpdate() > 0);
@@ -453,7 +515,7 @@ public class dbItemHandler extends dbHandlerBase {
public boolean ZERO_ITEM_STACK(Item item) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_numberOfItems`=0 WHERE `UID` = ?")) {
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `numberOfItems`=0 WHERE `UID` = ?")) {
preparedStatement.setLong(1, item.getObjectUUID());
@@ -468,9 +530,16 @@ public class dbItemHandler extends dbHandlerBase {
public boolean UPDATE_FLAGS(Item item) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_flags`=? WHERE `UID` = ?")) {
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `flags`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, item.getFlags());
String flagString = "";
for (mbEnums.ItemFlags itemflag : item.flags)
flagString += itemflag.toString() + ";";
flagString = flagString.replaceAll(";$", "");
preparedStatement.setString(1, flagString);
preparedStatement.setLong(2, item.getObjectUUID());
return (preparedStatement.executeUpdate() > 0);
@@ -483,8 +552,13 @@ public class dbItemHandler extends dbHandlerBase {
public boolean UPDATE_VALUE(Item item, int value) {
// Write 0 if we will not modify the value from template
if (value == item.template.item_value)
value = 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `item_value`=? WHERE `UID` = ?")) {
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `value`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, value);
preparedStatement.setLong(2, item.getObjectUUID());
@@ -496,4 +570,25 @@ public class dbItemHandler extends dbHandlerBase {
return false;
}
}
public boolean UPDATE_EQUIP_SLOT(Item item) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_item` SET `equipSlot`=? WHERE `UID` = ?")) {
if (item.equipSlot.equals(mbEnums.EquipSlotType.NONE))
preparedStatement.setString(1, "");
else
preparedStatement.setString(1, item.equipSlot.name());
preparedStatement.setLong(2, item.getObjectUUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
}
}
+2 -1
View File
@@ -10,6 +10,7 @@
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.Kit;
import org.pmw.tinylog.Logger;
@@ -23,7 +24,7 @@ public class dbKitHandler extends dbHandlerBase {
public dbKitHandler() {
this.localClass = Kit.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public ArrayList<Kit> GET_ALL_KITS() {
+2 -1
View File
@@ -10,6 +10,7 @@
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.MenuOption;
import org.pmw.tinylog.Logger;
@@ -23,7 +24,7 @@ public class dbMenuHandler extends dbHandlerBase {
public dbMenuHandler() {
this.localClass = MenuOption.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public ArrayList<MenuOption> GET_MENU_OPTIONS(final int id) {
+4 -5
View File
@@ -8,11 +8,10 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.Mine;
import engine.objects.MineProduction;
import engine.objects.Resource;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
@@ -25,7 +24,7 @@ public class dbMineHandler extends dbHandlerBase {
public dbMineHandler() {
this.localClass = Mine.class;
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public Mine GET_MINE(int id) {
@@ -33,7 +32,7 @@ public class dbMineHandler extends dbHandlerBase {
if (id == 0)
return null;
Mine mine = (Mine) DbManager.getFromCache(Enum.GameObjectType.Mine, id);
Mine mine = (Mine) DbManager.getFromCache(mbEnums.GameObjectType.Mine, id);
if (mine != null)
return mine;
@@ -84,7 +83,7 @@ public class dbMineHandler extends dbHandlerBase {
return false;
}
public boolean CHANGE_RESOURCE(Mine mine, Resource resource) {
public boolean CHANGE_RESOURCE(Mine mine, mbEnums.ResourceType resource) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_mine` SET `mine_resource`=? WHERE `UID`=?")) {
+3 -2
View File
@@ -9,8 +9,9 @@
package engine.db.handlers;
import engine.Enum.GameObjectType;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.mbEnums.GameObjectType;
import engine.objects.MobBase;
import engine.objects.MobBaseEffects;
import engine.objects.MobBaseStats;
@@ -26,7 +27,7 @@ public class dbMobBaseHandler extends dbHandlerBase {
public dbMobBaseHandler() {
this.localClass = MobBase.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public MobBase GET_MOBBASE(int id) {
+52 -47
View File
@@ -10,9 +10,9 @@
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.Mob;
import engine.objects.Zone;
import java.time.Instant;
import org.joda.time.DateTime;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
@@ -25,34 +25,30 @@ public class dbMobHandler extends dbHandlerBase {
public dbMobHandler() {
this.localClass = Mob.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public Mob ADD_MOB(Mob toAdd) {
public Mob PERSIST(Mob toAdd) {
Mob mobile = null;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("CALL `mob_CREATE`(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);")) {
PreparedStatement preparedStatement = connection.prepareStatement("CALL `mob_CREATE`(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);")) {
preparedStatement.setLong(1, toAdd.getParentZoneID());
preparedStatement.setInt(2, toAdd.getMobBaseID());
preparedStatement.setInt(3, toAdd.getGuildUUID());
preparedStatement.setFloat(4, toAdd.getSpawnX());
preparedStatement.setFloat(5, toAdd.getSpawnY());
preparedStatement.setFloat(6, toAdd.getSpawnZ());
preparedStatement.setLong(1, toAdd.parentZoneUUID);
preparedStatement.setInt(2, toAdd.loadID);
preparedStatement.setInt(3, toAdd.guildUUID);
preparedStatement.setFloat(4, toAdd.bindLoc.x);
preparedStatement.setFloat(5, toAdd.bindLoc.y);
preparedStatement.setFloat(6, toAdd.bindLoc.z);
preparedStatement.setInt(7, 0);
preparedStatement.setFloat(8, toAdd.getSpawnRadius());
preparedStatement.setInt(9, toAdd.getTrueSpawnTime());
if (toAdd.getContract() != null)
preparedStatement.setInt(10, toAdd.getContract().getContractID());
else
preparedStatement.setInt(10, 0);
preparedStatement.setInt(11, toAdd.getBuildingID());
preparedStatement.setInt(12, toAdd.getLevel());
preparedStatement.setString(13, toAdd.getFirstName());
preparedStatement.setFloat(8, toAdd.spawnRadius);
preparedStatement.setInt(9, toAdd.spawnDelay);
preparedStatement.setInt(10, toAdd.contractUUID);
preparedStatement.setInt(11, toAdd.buildingUUID);
preparedStatement.setInt(12, toAdd.level);
preparedStatement.setString(13, toAdd.firstName);
preparedStatement.setString(14, toAdd.behaviourType.toString());
ResultSet rs = preparedStatement.executeQuery();
@@ -69,7 +65,24 @@ public class dbMobHandler extends dbHandlerBase {
return mobile;
}
public boolean updateUpgradeTime(Mob mob, Instant upgradeDateTime) {
public ArrayList<Mob> GET_ALL_MOBS() {
ArrayList<Mob> mobileList = new ArrayList<>();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_mob`.*, `object`.`parent` FROM `object` INNER JOIN `obj_mob` ON `obj_mob`.`UID` = `object`.`UID` ORDER BY `object`.`UID` ASC;")) {
ResultSet rs = preparedStatement.executeQuery();
mobileList = getObjectsFromRs(rs, 1000);
} catch (SQLException e) {
Logger.error(e);
}
return mobileList;
}
public boolean updateUpgradeTime(Mob mob, DateTime upgradeDateTime) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_mob SET upgradeDate=? "
@@ -78,7 +91,7 @@ public class dbMobHandler extends dbHandlerBase {
if (upgradeDateTime == null)
preparedStatement.setNull(1, java.sql.Types.DATE);
else
preparedStatement.setTimestamp(1, java.sql.Timestamp.from(upgradeDateTime));
preparedStatement.setTimestamp(1, new java.sql.Timestamp(upgradeDateTime.getMillis()));
preparedStatement.setInt(2, mob.getObjectUUID());
@@ -106,17 +119,17 @@ public class dbMobHandler extends dbHandlerBase {
return row_count;
}
public void LOAD_PATROL_POINTS(Mob captain) {
public void LOAD_GUARD_MINIONS(Mob guardCaptain) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_guards` WHERE `captainUID` = ?")) {
preparedStatement.setInt(1, captain.getObjectUUID());
preparedStatement.setInt(1, guardCaptain.getObjectUUID());
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
Mob toCreate = Mob.createGuardMob(captain, captain.getGuild(), captain.getParentZone(), captain.building.getLoc(), captain.getLevel(), name);
String minionName = rs.getString("minionName");
Mob toCreate = Mob.createGuardMinion(guardCaptain, guardCaptain.getLevel(), minionName);
if (toCreate == null)
return;
@@ -131,15 +144,13 @@ public class dbMobHandler extends dbHandlerBase {
}
}
public boolean ADD_TO_GUARDS(final long captainUID, final int mobBaseID, final String name, final int slot) {
public boolean ADD_GUARD_MINION(final long captainUID, final String minionName) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_guards` (`captainUID`, `mobBaseID`,`name`, `slot`) VALUES (?,?,?,?)")) {
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_guards` (`captainUID`, `minionName`) VALUES (?,?)")) {
preparedStatement.setLong(1, captainUID);
preparedStatement.setInt(2, mobBaseID);
preparedStatement.setString(3, name);
preparedStatement.setInt(4, slot);
preparedStatement.setString(2, minionName);
return (preparedStatement.executeUpdate() > 0);
@@ -149,14 +160,13 @@ public class dbMobHandler extends dbHandlerBase {
}
}
public boolean REMOVE_FROM_GUARDS(final long captainUID, final int mobBaseID, final int slot) {
public boolean REMOVE_GUARD_MINION(final long captainUID, final String minionName) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_guards` WHERE `captainUID`=? AND `mobBaseID`=? AND `slot` =?")) {
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_guards` WHERE `captainUID`=? AND `minionName`=? LIMIT 1;")) {
preparedStatement.setLong(1, captainUID);
preparedStatement.setInt(2, mobBaseID);
preparedStatement.setInt(3, slot);
preparedStatement.setString(2, minionName);
return (preparedStatement.executeUpdate() > 0);
@@ -166,24 +176,19 @@ public class dbMobHandler extends dbHandlerBase {
}
}
public ArrayList<Mob> GET_ALL_MOBS_FOR_ZONE(Zone zone) {
ArrayList<Mob> mobileList = new ArrayList<>();
public boolean REMOVE_ALL_MINIONS(final long captainUID) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_mob`.*, `object`.`parent` FROM `object` INNER JOIN `obj_mob` ON `obj_mob`.`UID` = `object`.`UID` WHERE `object`.`parent` = ?;")) {
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_guards` WHERE `captainUID`=?;")) {
preparedStatement.setLong(1, zone.getObjectUUID());
preparedStatement.setLong(1, captainUID);
ResultSet rs = preparedStatement.executeQuery();
mobileList = getObjectsFromRs(rs, 1000);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
return mobileList;
}
public Mob GET_MOB(final int objectUUID) {
+64 -122
View File
@@ -9,14 +9,13 @@
package engine.db.handlers;
import engine.Enum.ProfitType;
import engine.gameManager.DbManager;
import engine.math.Vector3fImmutable;
import engine.mbEnums;
import engine.mbEnums.ProfitType;
import engine.objects.NPC;
import engine.objects.NPCProfits;
import engine.objects.ProducedItem;
import engine.objects.Zone;
import java.time.Instant;
import org.joda.time.DateTime;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
@@ -24,12 +23,52 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
public class dbNPCHandler extends dbHandlerBase {
public dbNPCHandler() {
this.localClass = NPC.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public static HashMap<Integer, ArrayList<Integer>> LOAD_RUNES_FOR_NPC_AND_MOBS() {
HashMap<Integer, ArrayList<Integer>> runeSets = new HashMap<>();
int runeSetID;
int runeBaseID;
int recordsRead = 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_npc_runeSet")) {
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
recordsRead++;
runeSetID = rs.getInt("runeSet");
runeBaseID = rs.getInt("runeBase");
if (runeSets.get(runeSetID) == null) {
ArrayList<Integer> runeList = new ArrayList<>();
runeList.add(runeBaseID);
runeSets.put(runeSetID, runeList);
} else {
ArrayList<Integer> runeList = runeSets.get(runeSetID);
runeList.add(runeSetID);
runeSets.put(runeSetID, runeList);
}
}
} catch (SQLException e) {
Logger.error(e);
return runeSets;
}
Logger.info("read: " + recordsRead + " cached: " + runeSets.size());
return runeSets;
}
public NPC PERSIST(NPC toAdd) {
@@ -94,14 +133,12 @@ public class dbNPCHandler extends dbHandlerBase {
return row_count;
}
public ArrayList<NPC> GET_ALL_NPCS_FOR_ZONE(Zone zone) {
public ArrayList<NPC> GET_ALL_NPCS() {
ArrayList<NPC> npcList = new ArrayList<>();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_npc`.*, `object`.`parent` FROM `object` INNER JOIN `obj_npc` ON `obj_npc`.`UID` = `object`.`UID` WHERE `object`.`parent` = ?;")) {
preparedStatement.setLong(1, zone.getObjectUUID());
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_npc`.*, `object`.`parent` FROM `object` INNER JOIN `obj_npc` ON `obj_npc`.`UID` = `object`.`UID` ORDER BY `object`.`UID` ASC;")) {
ResultSet rs = preparedStatement.executeQuery();
npcList = getObjectsFromRs(rs, 1000);
@@ -203,7 +240,7 @@ public class dbNPCHandler extends dbHandlerBase {
}
}
public boolean updateUpgradeTime(NPC npc, Instant upgradeDateTime) {
public boolean updateUpgradeTime(NPC npc, DateTime upgradeDateTime) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE obj_npc SET upgradeDate=? "
@@ -212,7 +249,7 @@ public class dbNPCHandler extends dbHandlerBase {
if (upgradeDateTime == null)
preparedStatement.setNull(1, java.sql.Types.DATE);
else
preparedStatement.setTimestamp(1, java.sql.Timestamp.from(upgradeDateTime));
preparedStatement.setTimestamp(1, new java.sql.Timestamp(upgradeDateTime.getMillis()));
preparedStatement.setInt(2, npc.getObjectUUID());
@@ -273,6 +310,22 @@ public class dbNPCHandler extends dbHandlerBase {
}
}
public boolean UPDATE_RACE(NPC npc, int value) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_npc` SET `npc_raceID`=? WHERE `UID`=?")) {
preparedStatement.setInt(1, value);
preparedStatement.setLong(2, npc.getObjectUUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
}
public void LOAD_PIRATE_NAMES() {
String pirateName;
@@ -308,117 +361,6 @@ public class dbNPCHandler extends dbHandlerBase {
+ NPC._pirateNames.size() + " mobBases");
}
public boolean ADD_TO_PRODUCTION_LIST(final long ID, final long npcUID, final long itemBaseID, Instant dateTime, String prefix, String suffix, String name, boolean isRandom, int playerID) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_npc_production` (`ID`,`npcUID`, `itemBaseID`,`dateToUpgrade`, `isRandom`, `prefix`, `suffix`, `name`,`playerID`) VALUES (?,?,?,?,?,?,?,?,?)")) {
preparedStatement.setLong(1, ID);
preparedStatement.setLong(2, npcUID);
preparedStatement.setLong(3, itemBaseID);
preparedStatement.setTimestamp(4, java.sql.Timestamp.from(dateTime));
preparedStatement.setBoolean(5, isRandom);
preparedStatement.setString(6, prefix);
preparedStatement.setString(7, suffix);
preparedStatement.setString(8, name);
preparedStatement.setInt(9, playerID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
}
public boolean REMOVE_FROM_PRODUCTION_LIST(final long ID, final long npcUID) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_npc_production` WHERE `ID`=? AND `npcUID`=?;")) {
preparedStatement.setLong(1, ID);
preparedStatement.setLong(2, npcUID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
}
public boolean UPDATE_ITEM_TO_INVENTORY(final long ID, final long npcUID) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_npc_production` SET `inForge`=? WHERE `ID`=? AND `npcUID`=?;")) {
preparedStatement.setByte(1, (byte) 0);
preparedStatement.setLong(2, ID);
preparedStatement.setLong(3, npcUID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
}
public boolean UPDATE_ITEM_PRICE(final long ID, final long npcUID, int value) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_npc_production` SET `value`=? WHERE `ID`=? AND `npcUID`=?;")) {
preparedStatement.setInt(1, value);
preparedStatement.setLong(2, ID);
preparedStatement.setLong(3, npcUID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
}
public boolean UPDATE_ITEM_ID(final long ID, final long npcUID, final long value) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `dyn_npc_production` SET `ID`=? WHERE `ID`=? AND `npcUID`=? LIMIT 1;")) {
preparedStatement.setLong(1, value);
preparedStatement.setLong(2, ID);
preparedStatement.setLong(3, npcUID);
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
return false;
}
}
public void LOAD_ALL_ITEMS_TO_PRODUCE(NPC npc) {
if (npc == null)
return;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_npc_production` WHERE `npcUID` = ?")) {
preparedStatement.setInt(1, npc.getObjectUUID());
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
ProducedItem producedItem = new ProducedItem(rs);
npc.forgedItems.add(producedItem);
}
} catch (SQLException e) {
Logger.error(e);
}
}
public boolean UPDATE_PROFITS(NPC npc, ProfitType profitType, float value) {
try (Connection connection = DbManager.getConnection();
@@ -9,8 +9,8 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.Petition;
import org.pmw.tinylog.Logger;
@@ -58,8 +58,8 @@ public class dbPetitionHandler extends dbHandlerBase {
" VALUES (?,?,?,?,?,?,?,?,?);")) {
preparedStatement.setTimestamp(1, new java.sql.Timestamp(System.currentTimeMillis()));
preparedStatement.setString(2, Enum.PetitionType.values()[petition.primaryType].name());
preparedStatement.setString(3, Enum.PetitionSubType.values()[petition.subType].name());
preparedStatement.setString(2, mbEnums.PetitionType.values()[petition.primaryType].name());
preparedStatement.setString(3, mbEnums.PetitionSubType.values()[petition.subType].name());
preparedStatement.setInt(4, petition.reportAccount.getObjectUUID());
preparedStatement.setString(5, petition.reportAccount.getUname());
preparedStatement.setInt(6, petition.reportPlayer.getObjectUUID());
@@ -9,8 +9,8 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.AbstractWorldObject;
import engine.objects.Heraldry;
import engine.objects.PlayerCharacter;
@@ -29,7 +29,7 @@ public class dbPlayerCharacterHandler extends dbHandlerBase {
public dbPlayerCharacterHandler() {
this.localClass = PlayerCharacter.class;
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public PlayerCharacter ADD_PLAYER_CHARACTER(final PlayerCharacter toAdd) {
@@ -45,8 +45,8 @@ public class dbPlayerCharacterHandler extends dbHandlerBase {
preparedStatement.setLong(1, toAdd.getAccount().getObjectUUID());
preparedStatement.setString(2, toAdd.getFirstName());
preparedStatement.setString(3, toAdd.getLastName());
preparedStatement.setInt(4, toAdd.getRace().getRaceRuneID());
preparedStatement.setInt(5, toAdd.getBaseClass().getObjectUUID());
preparedStatement.setInt(4, toAdd.race.getRaceRuneID());
preparedStatement.setInt(5, toAdd.baseClass.getObjectUUID());
preparedStatement.setInt(6, toAdd.getStrMod());
preparedStatement.setInt(7, toAdd.getDexMod());
preparedStatement.setInt(8, toAdd.getConMod());
@@ -176,7 +176,7 @@ public class dbPlayerCharacterHandler extends dbHandlerBase {
if (objectUUID == 0)
return null;
PlayerCharacter playerCharacter = (PlayerCharacter) DbManager.getFromCache(Enum.GameObjectType.PlayerCharacter, objectUUID);
PlayerCharacter playerCharacter = (PlayerCharacter) DbManager.getFromCache(mbEnums.GameObjectType.PlayerCharacter, objectUUID);
if (playerCharacter != null)
return playerCharacter;
+15 -61
View File
@@ -9,62 +9,57 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.gameManager.PowersManager;
import engine.mbEnums;
import engine.objects.Mob;
import engine.objects.PreparedStatementShared;
import engine.powers.EffectsBase;
import engine.powers.MobPowerEntry;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
public class dbPowerHandler extends dbHandlerBase {
public dbPowerHandler() {
this.localClass = Mob.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public static void addAllSourceTypes() {
PreparedStatementShared ps = null;
try {
ps = new PreparedStatementShared("SELECT * FROM static_power_sourcetype");
ResultSet rs = ps.executeQuery();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_power_sourcetype")) {
ResultSet rs = preparedStatement.executeQuery();
String IDString, source;
while (rs.next()) {
IDString = rs.getString("IDString");
int token = DbManager.hasher.SBStringHash(IDString);
source = rs.getString("source").replace("-", "").trim();
Enum.EffectSourceType effectSourceType = Enum.EffectSourceType.GetEffectSourceType(source);
mbEnums.EffectSourceType effectSourceType = mbEnums.EffectSourceType.GetEffectSourceType(source);
if (EffectsBase.effectSourceTypeMap.containsKey(token) == false)
EffectsBase.effectSourceTypeMap.put(token, new HashSet<>());
EffectsBase.effectSourceTypeMap.get(token).add(effectSourceType);
}
rs.close();
} catch (Exception e) {
Logger.error(e);
} finally {
ps.release();
}
}
public static void addAllAnimationOverrides() {
PreparedStatementShared ps = null;
try {
ps = new PreparedStatementShared("SELECT * FROM static_power_animation_override");
ResultSet rs = ps.executeQuery();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_power_animation_override")) {
ResultSet rs = preparedStatement.executeQuery();
String IDString;
int animation;
while (rs.next()) {
@@ -78,51 +73,10 @@ public class dbPowerHandler extends dbHandlerBase {
PowersManager.AnimationOverrides.put(IDString, animation);
}
rs.close();
} catch (Exception e) {
Logger.error(e);
} finally {
ps.release();
}
}
public static HashMap<Integer, ArrayList<MobPowerEntry>> LOAD_MOB_POWERS() {
HashMap<Integer, ArrayList<MobPowerEntry>> mobPowers = new HashMap<>();
MobPowerEntry mobPowerEntry;
int mobbaseID;
int recordsRead = 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_npc_mobbase_powers ORDER BY `id` ASC;")) {
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
recordsRead++;
mobbaseID = rs.getInt("mobbaseUUID");
mobPowerEntry = new MobPowerEntry(rs);
if (mobPowers.get(mobbaseID) == null) {
ArrayList<MobPowerEntry> powerList = new ArrayList<>();
powerList.add(mobPowerEntry);
mobPowers.put(mobbaseID, powerList);
} else {
ArrayList<MobPowerEntry> powerList = mobPowers.get(mobbaseID);
powerList.add(mobPowerEntry);
mobPowers.put(mobbaseID, powerList);
}
}
} catch (SQLException e) {
Logger.error(e);
return mobPowers;
}
Logger.info("read: " + recordsRead + " cached: " + mobPowers.size());
return mobPowers;
}
}
@@ -10,6 +10,7 @@
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.PromotionClass;
import org.pmw.tinylog.Logger;
@@ -23,7 +24,7 @@ public class dbPromotionClassHandler extends dbHandlerBase {
public dbPromotionClassHandler() {
this.localClass = PromotionClass.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public ArrayList<Integer> GET_ALLOWED_RUNES(final PromotionClass pc) {
@@ -10,6 +10,7 @@
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.RuneBaseAttribute;
import org.pmw.tinylog.Logger;
@@ -23,7 +24,7 @@ public class dbRuneBaseAttributeHandler extends dbHandlerBase {
public dbRuneBaseAttributeHandler() {
this.localClass = RuneBaseAttribute.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public ArrayList<RuneBaseAttribute> GET_ATTRIBUTES_FOR_RUNEBASE() {
@@ -9,8 +9,9 @@
package engine.db.handlers;
import engine.Enum.GameObjectType;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.mbEnums.GameObjectType;
import engine.objects.AbstractGameObject;
import engine.objects.RuneBaseEffect;
import org.pmw.tinylog.Logger;
@@ -26,7 +27,7 @@ public class dbRuneBaseEffectHandler extends dbHandlerBase {
public dbRuneBaseEffectHandler() {
this.localClass = RuneBaseEffect.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public ArrayList<RuneBaseEffect> GET_EFFECTS_FOR_RUNEBASE(int id) {
+82 -1
View File
@@ -10,7 +10,10 @@
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.RuneBase;
import engine.powers.RunePowerEntry;
import engine.powers.RuneSkillAdjustEntry;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
@@ -24,7 +27,85 @@ public class dbRuneBaseHandler extends dbHandlerBase {
public dbRuneBaseHandler() {
this.localClass = RuneBase.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public static HashMap<Integer, ArrayList<RunePowerEntry>> LOAD_RUNE_POWERS() {
HashMap<Integer, ArrayList<RunePowerEntry>> mobPowers = new HashMap<>();
RunePowerEntry runePowerEntry;
int rune_id;
int recordsRead = 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_rune_powers")) {
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
recordsRead++;
rune_id = rs.getInt("rune_id");
runePowerEntry = new RunePowerEntry(rs);
if (mobPowers.get(rune_id) == null) {
ArrayList<RunePowerEntry> runePowerList = new ArrayList<>();
runePowerList.add(runePowerEntry);
mobPowers.put(rune_id, runePowerList);
} else {
ArrayList<RunePowerEntry> powerList = mobPowers.get(rune_id);
powerList.add(runePowerEntry);
mobPowers.put(rune_id, powerList);
}
}
} catch (SQLException e) {
Logger.error(e);
return mobPowers;
}
Logger.info("read: " + recordsRead + " cached: " + mobPowers.size());
return mobPowers;
}
public static HashMap<Integer, ArrayList<RuneSkillAdjustEntry>> LOAD_RUNE_SKILL_ADJUSTS() {
HashMap<Integer, ArrayList<RuneSkillAdjustEntry>> runeSkillAdjusts = new HashMap<>();
RuneSkillAdjustEntry runeSkillAdjustEntry;
int rune_id;
int recordsRead = 0;
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_rune_skill_adjusts")) {
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
recordsRead++;
rune_id = rs.getInt("rune_id");
runeSkillAdjustEntry = new RuneSkillAdjustEntry(rs);
if (runeSkillAdjusts.get(rune_id) == null) {
ArrayList<RuneSkillAdjustEntry> skillAdjustList = new ArrayList<>();
skillAdjustList.add(runeSkillAdjustEntry);
runeSkillAdjusts.put(rune_id, skillAdjustList);
} else {
ArrayList<RuneSkillAdjustEntry> powerList = runeSkillAdjusts.get(rune_id);
powerList.add(runeSkillAdjustEntry);
runeSkillAdjusts.put(rune_id, powerList);
}
}
} catch (SQLException e) {
Logger.error(e);
return runeSkillAdjusts;
}
Logger.info("read: " + recordsRead + " cached: " + runeSkillAdjusts.size());
return runeSkillAdjusts;
}
public void GET_RUNE_REQS(final RuneBase rb) {
@@ -9,8 +9,8 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.Building;
import engine.objects.Portal;
import org.pmw.tinylog.Logger;
@@ -49,7 +49,7 @@ public class dbRunegateHandler extends dbHandlerBase {
public ArrayList<Portal> GET_PORTAL_LIST(int gateUID) {
ArrayList<Portal> portalList = new ArrayList<>();
Building sourceBuilding = (Building) DbManager.getObject(Enum.GameObjectType.Building, gateUID);
Building sourceBuilding = (Building) DbManager.getObject(mbEnums.GameObjectType.Building, gateUID);
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_runegate_portals` WHERE `sourceBuilding` = ?;")) {
@@ -60,8 +60,8 @@ public class dbRunegateHandler extends dbHandlerBase {
while (rs.next()) {
int targetBuildingID = rs.getInt("targetBuilding");
Building targetBuilding = (Building) DbManager.getObject(Enum.GameObjectType.Building, targetBuildingID);
Enum.PortalType portalType = Enum.PortalType.valueOf(rs.getString("portalType"));
Building targetBuilding = (Building) DbManager.getObject(mbEnums.GameObjectType.Building, targetBuildingID);
mbEnums.PortalType portalType = mbEnums.PortalType.valueOf(rs.getString("portalType"));
Portal portal = new Portal(sourceBuilding, portalType, targetBuilding);
portalList.add(portal);
}
+6 -5
View File
@@ -9,13 +9,14 @@
package engine.db.handlers;
import engine.Enum.ProtectionState;
import engine.gameManager.DbManager;
import engine.math.Vector3fImmutable;
import engine.mbEnums;
import engine.mbEnums.ProtectionState;
import engine.objects.AbstractGameObject;
import engine.objects.Building;
import engine.objects.Shrine;
import java.time.Instant;
import org.joda.time.DateTime;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
@@ -28,7 +29,7 @@ public class dbShrineHandler extends dbHandlerBase {
public dbShrineHandler() {
this.localClass = Shrine.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public static void addObject(ArrayList<AbstractGameObject> list, ResultSet rs) throws SQLException {
@@ -52,7 +53,7 @@ public class dbShrineHandler extends dbHandlerBase {
public ArrayList<AbstractGameObject> CREATE_SHRINE(int parentZoneID, int OwnerUUID, String name, int meshUUID,
Vector3fImmutable location, float meshScale, int currentHP,
ProtectionState protectionState, int currentGold, int rank,
Instant upgradeDate, int blueprintUUID, float w, float rotY, String shrineType) {
DateTime upgradeDate, int blueprintUUID, float w, float rotY, String shrineType) {
ArrayList<AbstractGameObject> shrineList = new ArrayList<>();
@@ -73,7 +74,7 @@ public class dbShrineHandler extends dbHandlerBase {
preparedStatement.setInt(12, rank);
if (upgradeDate != null)
preparedStatement.setTimestamp(13, java.sql.Timestamp.from(upgradeDate));
preparedStatement.setTimestamp(13, new java.sql.Timestamp(upgradeDate.getMillis()));
else
preparedStatement.setNull(13, java.sql.Types.DATE);
@@ -9,9 +9,9 @@
package engine.db.handlers;
import engine.Enum;
import engine.Enum.GameObjectType;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.mbEnums.GameObjectType;
import engine.objects.MaxSkills;
import engine.objects.SkillsBase;
import org.pmw.tinylog.Logger;
@@ -27,7 +27,7 @@ public class dbSkillBaseHandler extends dbHandlerBase {
public dbSkillBaseHandler() {
this.localClass = SkillsBase.class;
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public SkillsBase GET_BASE(final int objectUUID) {
@@ -10,6 +10,7 @@
package engine.db.handlers;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.SkillReq;
import engine.powers.PowersBase;
import org.pmw.tinylog.Logger;
@@ -25,7 +26,7 @@ public class dbSkillReqHandler extends dbHandlerBase {
public dbSkillReqHandler() {
this.localClass = SkillReq.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public static ArrayList<PowersBase> getAllPowersBase() {
@@ -9,8 +9,8 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.VendorDialog;
import org.pmw.tinylog.Logger;
@@ -23,12 +23,12 @@ public class dbVendorDialogHandler extends dbHandlerBase {
public dbVendorDialogHandler() {
this.localClass = VendorDialog.class;
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public VendorDialog GET_VENDORDIALOG(final int objectUUID) {
VendorDialog vendorDialog = (VendorDialog) DbManager.getFromCache(Enum.GameObjectType.VendorDialog, objectUUID);
VendorDialog vendorDialog = (VendorDialog) DbManager.getFromCache(mbEnums.GameObjectType.VendorDialog, objectUUID);
if (vendorDialog != null)
return vendorDialog;
+140 -475
View File
@@ -9,14 +9,20 @@
package engine.db.handlers;
import engine.Enum.GameObjectType;
import engine.Enum.ProtectionState;
import engine.Enum.TransactionType;
import engine.gameManager.DbManager;
import engine.math.Vector3fImmutable;
import engine.objects.*;
import engine.gameManager.ForgeManager;
import engine.loot.WorkOrder;
import engine.mbEnums;
import engine.mbEnums.GameObjectType;
import engine.mbEnums.TransactionType;
import engine.objects.Building;
import engine.objects.City;
import engine.objects.Transaction;
import engine.objects.Warehouse;
import engine.server.MBServerStatics;
import java.time.Instant;
import org.joda.time.DateTime;
import org.json.JSONArray;
import org.json.JSONObject;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
@@ -31,463 +37,10 @@ public class dbWarehouseHandler extends dbHandlerBase {
private static final ConcurrentHashMap<Integer, String> columns = new ConcurrentHashMap<>(MBServerStatics.CHM_INIT_CAP, MBServerStatics.CHM_LOAD, MBServerStatics.CHM_THREAD_LOW);
public dbWarehouseHandler() {
this.localClass = Warehouse.class;
this.localObjectType = engine.Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public static void addObject(ArrayList<AbstractGameObject> list, ResultSet rs) throws SQLException {
String type = rs.getString("type");
switch (type) {
case "building":
Building building = new Building(rs);
DbManager.addToCache(building);
list.add(building);
break;
case "warehouse":
Warehouse warehouse = new Warehouse(rs);
DbManager.addToCache(warehouse);
list.add(warehouse);
break;
}
}
public ArrayList<AbstractGameObject> CREATE_WAREHOUSE(int parentZoneID, int OwnerUUID, String name, int meshUUID,
Vector3fImmutable location, float meshScale, int currentHP,
ProtectionState protectionState, int currentGold, int rank,
Instant upgradeDate, int blueprintUUID, float w, float rotY) {
ArrayList<AbstractGameObject> warehouseList = new ArrayList<>();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("CALL `WAREHOUSE_CREATE`(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ,? ,? ,?, ?);")) {
preparedStatement.setInt(1, parentZoneID);
preparedStatement.setInt(2, OwnerUUID);
preparedStatement.setString(3, name);
preparedStatement.setInt(4, meshUUID);
preparedStatement.setFloat(5, location.x);
preparedStatement.setFloat(6, location.y);
preparedStatement.setFloat(7, location.z);
preparedStatement.setFloat(8, meshScale);
preparedStatement.setInt(9, currentHP);
preparedStatement.setString(10, protectionState.name());
preparedStatement.setInt(11, currentGold);
preparedStatement.setInt(12, rank);
if (upgradeDate != null)
preparedStatement.setTimestamp(13, new java.sql.Timestamp(upgradeDate.toEpochMilli()));
else
preparedStatement.setNull(13, java.sql.Types.DATE);
preparedStatement.setInt(14, blueprintUUID);
preparedStatement.setFloat(15, w);
preparedStatement.setFloat(16, rotY);
preparedStatement.execute();
ResultSet rs = preparedStatement.getResultSet();
while (rs.next())
addObject(warehouseList, rs);
while (preparedStatement.getMoreResults()) {
rs = preparedStatement.getResultSet();
while (rs.next())
addObject(warehouseList, rs);
}
} catch (SQLException e) {
Logger.error(e);
}
return warehouseList;
}
public boolean updateLocks(final Warehouse wh, long locks) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_locks`=? WHERE `UID` = ?")) {
preparedStatement.setLong(1, locks);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateGold(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_gold`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateStone(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_stone`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateTruesteel(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_truesteel`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateIron(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_iron`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateAdamant(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_adamant`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateLumber(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_lumber`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateOak(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_oak`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateBronzewood(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_bronzewood`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateMandrake(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_mandrake`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateCoal(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_coal`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateAgate(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_agate`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateDiamond(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_diamond`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateOnyx(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_onyx`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateAzoth(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_azoth`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateOrichalk(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_orichalk`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateAntimony(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_antimony`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateSulfur(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_sulfur`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateQuicksilver(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_quicksilver`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateGalvor(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_galvor`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateWormwood(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_wormwood`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateObsidian(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_obsidian`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateBloodstone(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_bloodstone`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean updateMithril(final Warehouse wh, int amount) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("UPDATE `obj_warehouse` SET `warehouse_mithril`=? WHERE `UID` = ?")) {
preparedStatement.setInt(1, amount);
preparedStatement.setInt(2, wh.getUID());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public boolean CREATE_TRANSACTION(int warehouseBuildingID, GameObjectType targetType, int targetUUID, TransactionType transactionType, Resource resource, int amount, Instant date) {
public boolean CREATE_TRANSACTION(int warehouseBuildingID, GameObjectType targetType, int targetUUID, TransactionType transactionType, mbEnums.ResourceType resource, int amount, DateTime date) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_warehouse_transactions` (`warehouseUID`, `targetType`,`targetUID`, `type`,`resource`,`amount`,`date` ) VALUES (?,?,?,?,?,?,?)")) {
@@ -498,7 +51,7 @@ public class dbWarehouseHandler extends dbHandlerBase {
preparedStatement.setString(4, transactionType.name());
preparedStatement.setString(5, resource.name());
preparedStatement.setInt(6, amount);
preparedStatement.setTimestamp(7, new java.sql.Timestamp(date.toEpochMilli()));
preparedStatement.setTimestamp(7, new java.sql.Timestamp(date.getMillis()));
return (preparedStatement.executeUpdate() > 0);
@@ -532,24 +85,136 @@ public class dbWarehouseHandler extends dbHandlerBase {
return transactionsList;
}
public void LOAD_ALL_WAREHOUSES() {
Warehouse warehouse;
public void DELETE_WAREHOUSE(Warehouse warehouse) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_warehouse`.*, `object`.`parent`, `object`.`type` FROM `object` LEFT JOIN `obj_warehouse` ON `object`.`UID` = `obj_warehouse`.`UID` WHERE `object`.`type` = 'warehouse';")) {
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
warehouse = new Warehouse(rs);
warehouse.runAfterLoad();
warehouse.loadAllTransactions();
}
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_warehouse` WHERE `cityUUID` = ?;")) {
preparedStatement.setInt(1, warehouse.city.getObjectUUID());
preparedStatement.executeUpdate();
} catch (SQLException e) {
Logger.error(e);
}
}
public boolean UPDATE_WAREHOUSE(Warehouse warehouse) {
JSONObject warehouseJSON = new JSONObject();
JSONObject resources = new JSONObject(warehouse.resources);
warehouseJSON.put("resources", resources);
JSONArray locks = new JSONArray();
for (mbEnums.ResourceType resource : warehouse.locked)
locks.put(resource.name());
warehouseJSON.put("locked", locks);
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_warehouse` (`cityUUID`, `warehouse`) VALUES (?, ?) " +
"ON DUPLICATE KEY UPDATE `warehouse` = VALUES(`warehouse`)")) {
preparedStatement.setInt(1, warehouse.city.getObjectUUID());
preparedStatement.setString(2, warehouseJSON.toString());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public void LOAD_WAREHOUSES() {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_warehouse`;");
ResultSet rs = preparedStatement.executeQuery()) {
while (rs.next()) {
int cityUID = rs.getInt("cityUUID");
JSONObject jsonObject = new JSONObject(rs.getString("warehouse"));
City city = City.getCity(cityUID);
city.warehouse = new Warehouse(jsonObject);
city.warehouse.city = city;
// Locate warehouse building
for (Building building : city.parentZone.zoneBuildingSet) {
if (building.getBlueprint().getBuildingGroup().equals(mbEnums.BuildingGroup.WAREHOUSE)) {
city.warehouse.building = building;
break;
}
}
}
} catch (Exception e) {
Logger.error(e);
}
}
public boolean WRITE_WORKORDER(WorkOrder workOrder) {
JSONObject warehouseJSON = WorkOrder.toJson(workOrder);
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO `dyn_workorders` (`workorderID`, `workorder`) VALUES (?, ?) " +
"ON DUPLICATE KEY UPDATE `workorder` = VALUES(`workorder`)")) {
preparedStatement.setInt(1, workOrder.workOrderID);
preparedStatement.setString(2, warehouseJSON.toString());
return (preparedStatement.executeUpdate() > 0);
} catch (SQLException e) {
Logger.error(e);
}
return false;
}
public void DELETE_WORKORDER(WorkOrder workOrder) {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM `dyn_workorders` WHERE `workorderID` = ?;")) {
preparedStatement.setInt(1, workOrder.workOrderID);
preparedStatement.executeUpdate();
} catch (SQLException e) {
Logger.error(e);
}
}
public void LOAD_WORKORDERS() {
// Method loads NPC workOrders from disk at bootstrap.
// A workOrder will persist until completed or junked
// via the client interface.
ArrayList<WorkOrder> submitList = new ArrayList<>();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `dyn_workorders`;");
ResultSet rs = preparedStatement.executeQuery()) {
while (rs.next()) {
JSONObject jsonObject = new JSONObject(rs.getString("workorder"));
WorkOrder workOrder = new WorkOrder(jsonObject);
submitList.add(workOrder);
}
} catch (Exception e) {
Logger.error(e);
}
// Submit new workOrders to the ForgeManager
for (WorkOrder workOrder : submitList) {
DbManager.WarehouseQueries.DELETE_WORKORDER(workOrder);
workOrder.workOrderID = ForgeManager.workOrderCounter.incrementAndGet();
DbManager.WarehouseQueries.WRITE_WORKORDER(workOrder);
ForgeManager.vendorWorkOrderLookup.get(workOrder.vendor).add(workOrder);
ForgeManager.forge.add(workOrder);
}
}
}
+39 -48
View File
@@ -9,11 +9,11 @@
package engine.db.handlers;
import engine.Enum;
import engine.gameManager.DbManager;
import engine.gameManager.ZoneManager;
import engine.math.Vector2f;
import engine.mbEnums;
import engine.objects.Zone;
import engine.objects.ZoneTemplate;
import org.pmw.tinylog.Logger;
import java.sql.Connection;
@@ -26,33 +26,29 @@ public class dbZoneHandler extends dbHandlerBase {
public dbZoneHandler() {
this.localClass = Zone.class;
this.localObjectType = Enum.GameObjectType.valueOf(this.localClass.getSimpleName());
this.localObjectType = mbEnums.GameObjectType.valueOf(this.localClass.getSimpleName());
}
public ArrayList<Zone> GET_ALL_NODES(Zone zone) {
ArrayList<Zone> wsmList = new ArrayList<>();
wsmList.addAll(zone.getNodes());
if (zone.absX == 0.0f) {
zone.absX = zone.getXCoord();
public ArrayList<Zone> GET_ALL_ZONES() {
ArrayList<Zone> zoneList = new ArrayList<>();
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_zone`.*, `object`.`parent` FROM `object` INNER JOIN `obj_zone` ON `obj_zone`.`UID` = `object`.`UID` ORDER BY `object`.`UID` ASC;")) {
ResultSet rs = preparedStatement.executeQuery();
zoneList = getObjectsFromRs(rs, 2000);
} catch (SQLException e) {
Logger.error(e);
}
if (zone.absY == 0.0f) {
zone.absY = zone.getYCoord();
}
if (zone.absZ == 0.0f) {
zone.absZ = zone.getZCoord();
}
for (Zone child : zone.getNodes()) {
child.absX = child.getXCoord() + zone.absX;
child.absY = child.getYCoord() + zone.absY;
child.absZ = child.getZCoord() + zone.absZ;
wsmList.addAll(this.GET_ALL_NODES(child));
}
return wsmList;
return zoneList;
}
public Zone GET_BY_UID(long ID) {
Zone zone = (Zone) DbManager.getFromCache(Enum.GameObjectType.Zone, (int) ID);
Zone zone = (Zone) DbManager.getFromCache(mbEnums.GameObjectType.Zone, (int) ID);
if (zone != null)
return zone;
@@ -72,43 +68,38 @@ public class dbZoneHandler extends dbHandlerBase {
return zone;
}
public ArrayList<Zone> GET_MAP_NODES(final int objectUUID) {
ArrayList<Zone> zoneList = new ArrayList<>();
public void LOAD_ALL_ZONE_TEMPLATES() {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT `obj_zone`.*, `object`.`parent` FROM `object` INNER JOIN `obj_zone` ON `obj_zone`.`UID` = `object`.`UID` WHERE `object`.`parent` = ?;")) {
preparedStatement.setLong(1, objectUUID);
ResultSet rs = preparedStatement.executeQuery();
zoneList = getObjectsFromRs(rs, 2000);
} catch (SQLException e) {
Logger.error(e);
}
return zoneList;
}
public void LOAD_ZONE_EXTENTS() {
try (Connection connection = DbManager.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM `static_zone_size`;")) {
PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM static_zone_templates")) {
ResultSet rs = preparedStatement.executeQuery();
while (rs.next()) {
Vector2f zoneSize = new Vector2f();
int loadNum = rs.getInt("loadNum");
zoneSize.x = rs.getFloat("xRadius");
zoneSize.y = rs.getFloat("zRadius");
ZoneManager._zone_size_data.put(loadNum, zoneSize);
ZoneTemplate zoneTemplate = new ZoneTemplate(rs);
ZoneManager._zone_templates.put(zoneTemplate.templateID, zoneTemplate);
}
// Add player city
ZoneTemplate zoneTemplate = new ZoneTemplate();
zoneTemplate.templateID = 0;
zoneTemplate.sea_level_type = "PARENT";
zoneTemplate.sea_level = 0;
zoneTemplate.max_blend = 128;
zoneTemplate.min_blend = 128;
zoneTemplate.terrain_max_y = 5;
zoneTemplate.major_radius = (int) mbEnums.CityBoundsType.ZONE.halfExtents;
zoneTemplate.minor_radius = (int) mbEnums.CityBoundsType.ZONE.halfExtents;
zoneTemplate.terrain_type = "PLANAR";
ZoneManager._zone_templates.put(zoneTemplate.templateID, zoneTemplate);
} catch (SQLException e) {
Logger.error(e);
}
}
public boolean DELETE_ZONE(final Zone zone) {
+1 -1
View File
@@ -9,9 +9,9 @@
package engine.devcmd;
import engine.Enum.GameObjectType;
import engine.gameManager.ChatManager;
import engine.gameManager.DbManager;
import engine.mbEnums.GameObjectType;
import engine.objects.*;
import java.util.ArrayList;
+1 -1
View File
@@ -9,7 +9,6 @@
package engine.devcmd.cmds;
import engine.Enum.ProtectionState;
import engine.InterestManagement.WorldGrid;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.ChatManager;
@@ -17,6 +16,7 @@ import engine.gameManager.DbManager;
import engine.gameManager.ZoneManager;
import engine.math.Vector3f;
import engine.math.Vector3fImmutable;
import engine.mbEnums.ProtectionState;
import engine.objects.*;
import engine.server.MBServerStatics;
+3 -3
View File
@@ -32,7 +32,7 @@ public class AddGoldCmd extends AbstractDevCmd {
return;
}
Item gold = pc.getCharItemManager().getGoldInventory();
Item gold = pc.charItemManager.getGoldInventory();
int curAmt;
if (gold == null)
curAmt = 0;
@@ -54,13 +54,13 @@ public class AddGoldCmd extends AbstractDevCmd {
return;
}
if (!pc.getCharItemManager().addGoldToInventory(amt, true)) {
if (!pc.charItemManager.addGoldToInventory(amt, true)) {
throwbackError(pc, "Failed to add gold to inventory");
return;
}
ChatManager.chatSayInfo(pc, amt + " gold added to inventory");
pc.getCharItemManager().updateInventory();
pc.charItemManager.updateInventory();
}
@Override
+9 -31
View File
@@ -9,18 +9,16 @@
package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.ChatManager;
import engine.gameManager.DbManager;
import engine.gameManager.ZoneManager;
import engine.math.Vector3fImmutable;
import engine.objects.*;
import engine.mbEnums;
import engine.objects.AbstractGameObject;
import engine.objects.Mob;
import engine.objects.PlayerCharacter;
import engine.objects.Zone;
import org.pmw.tinylog.Logger;
/**
* @author Eighty
*/
public class AddMobCmd extends AbstractDevCmd {
public AddMobCmd() {
@@ -37,27 +35,8 @@ public class AddMobCmd extends AbstractDevCmd {
Zone zone = ZoneManager.findSmallestZone(pc.getLoc());
if (words[0].equals("all")) {
for (AbstractGameObject mobbaseAGO : DbManager.getList(GameObjectType.MobBase)) {
MobBase mb = (MobBase) mobbaseAGO;
int loadID = mb.getObjectUUID();
Mob mob = Mob.createMob(loadID, Vector3fImmutable.getRandomPointInCircle(pc.getLoc(), 100),
null, true, zone, null, 0, "", 1);
if (mob != null) {
mob.updateDatabase();
this.setResult(String.valueOf(mob.getDBID()));
} else {
throwbackError(pc, "Failed to create mob of type " + loadID);
Logger.error("Failed to create mob of type "
+ loadID);
}
}
return;
}
int loadID;
try {
loadID = Integer.parseInt(words[0]);
} catch (NumberFormatException e) {
@@ -71,20 +50,19 @@ public class AddMobCmd extends AbstractDevCmd {
return; // NaN
}
if (zone == null) {
throwbackError(pc, "Failed to find zone to place mob in.");
return;
}
if (zone.isPlayerCity()) {
if (zone.guild_zone) {
throwbackError(pc, "Cannot use ./mob on Player cities. Try ./servermob instead.");
return;
}
Mob mob = Mob.createMob(loadID, pc.getLoc(),
null, true, zone, null, 0, "", 1);
null, zone, null, null, "", 1, mbEnums.AIAgentType.MOBILE);
if (mob != null) {
mob.updateDatabase();
ChatManager.chatSayInfo(pc,
+1 -1
View File
@@ -9,10 +9,10 @@
package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.InterestManagement.WorldGrid;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.*;
import engine.mbEnums.GameObjectType;
import engine.objects.*;
import org.pmw.tinylog.Logger;
+1 -1
View File
@@ -9,10 +9,10 @@
package engine.devcmd.cmds;
import engine.Enum.PowerActionType;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.ChatManager;
import engine.gameManager.PowersManager;
import engine.mbEnums.PowerActionType;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
import engine.powers.ActionsBase;
@@ -1,127 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.Enum.ModType;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.PowersManager;
import engine.net.ItemProductionManager;
import engine.objects.*;
import engine.powers.effectmodifiers.AbstractEffectModifier;
import engine.powers.poweractions.AbstractPowerAction;
import org.pmw.tinylog.Logger;
public class AuditFailedItemsCmd extends AbstractDevCmd {
public AuditFailedItemsCmd() {
super("faileditems");
}
@Override
protected void _doCmd(PlayerCharacter pcSender, String[] words,
AbstractGameObject target) {
if (ItemProductionManager.FailedItems.isEmpty())
return;
Logger.info("Auditing Item production Failed Items");
String newLine = "\r\n";
String auditFailedItem = "Failed Item Name | Prefix | Suffix | NPC | Contract | Player | ";
for (ProducedItem failedItem : ItemProductionManager.FailedItems) {
String npcName = "";
String playerName = "";
String contractName = "";
String prefix = "";
String suffix = "";
String itemName = "";
NPC npc = NPC.getFromCache(failedItem.getNpcUID());
if (npc == null) {
npcName = "null";
contractName = "null";
} else {
npcName = npc.getName();
if (npc.getContract() != null)
contractName = npc.getContract().getName();
}
PlayerCharacter roller = PlayerCharacter.getFromCache(failedItem.getPlayerID());
if (roller == null)
playerName = "null";
else
playerName = roller.getName();
ItemBase ib = ItemBase.getItemBase(failedItem.getItemBaseID());
if (ib != null) {
itemName = ib.getName();
}
if (failedItem.isRandom() == false) {
if (failedItem.getPrefix().isEmpty() == false) {
AbstractPowerAction pa = PowersManager.getPowerActionByIDString(failedItem.getPrefix());
if (pa != null) {
for (AbstractEffectModifier aem : pa.getEffectsBase().getModifiers()) {
if (aem.modType.equals(ModType.ItemName)) {
prefix = aem.getString1();
break;
}
}
}
}
if (failedItem.getSuffix().isEmpty() == false) {
AbstractPowerAction pa = PowersManager.getPowerActionByIDString(failedItem.getSuffix());
if (pa != null) {
for (AbstractEffectModifier aem : pa.getEffectsBase().getModifiers()) {
if (aem.modType.equals(ModType.ItemName)) {
suffix = aem.getString1();
break;
}
}
}
}
} else {
prefix = "random";
}
auditFailedItem += newLine;
auditFailedItem += itemName + " | " + prefix + " | " + suffix + " | " + failedItem.getNpcUID() + ":" + npcName + " | " + contractName + " | " + failedItem.getPlayerID() + ":" + playerName;
}
Logger.info(auditFailedItem);
ItemProductionManager.FailedItems.clear();
}
@Override
protected String _getUsageString() {
return "' /bounds'";
}
@Override
protected String _getHelpString() {
return "Audits all the mobs in a zone.";
}
}
@@ -1,70 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.InterestManagement.HeightMap;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.ZoneManager;
import engine.math.Vector2f;
import engine.math.Vector3fImmutable;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
import engine.objects.Zone;
public class AuditHeightMapCmd extends AbstractDevCmd {
public AuditHeightMapCmd() {
super("auditheightmap");
}
@Override
protected void _doCmd(PlayerCharacter pcSender, String[] words,
AbstractGameObject target) {
int count = Integer.parseInt(words[0]);
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
Zone currentZone = ZoneManager.findSmallestZone(pcSender.getLoc());
Vector3fImmutable currentLoc = Vector3fImmutable.getRandomPointInCircle(currentZone.getLoc(), currentZone.getBounds().getHalfExtents().x < currentZone.getBounds().getHalfExtents().y ? currentZone.getBounds().getHalfExtents().x : currentZone.getBounds().getHalfExtents().y);
Vector2f zoneLoc = ZoneManager.worldToZoneSpace(currentLoc, currentZone);
if (currentZone != null && currentZone.getHeightMap() != null) {
float altitude = currentZone.getHeightMap().getInterpolatedTerrainHeight(zoneLoc);
float outsetAltitude = HeightMap.getOutsetHeight(altitude, currentZone, pcSender.getLoc());
}
}
long end = System.currentTimeMillis();
long delta = end - start;
this.throwbackInfo(pcSender, "Audit Heightmap took " + delta + " ms to run " + count + " times!");
}
@Override
protected String _getUsageString() {
return "' /auditmobs [zone.UUID]'";
}
@Override
protected String _getHelpString() {
return "Audits all the mobs in a zone.";
}
}
-105
View File
@@ -1,105 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.ZoneManager;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
import engine.objects.Zone;
public class AuditMobsCmd extends AbstractDevCmd {
public AuditMobsCmd() {
super("auditmobs");
}
@Override
protected void _doCmd(PlayerCharacter pcSender, String[] words,
AbstractGameObject target) {
if (pcSender == null)
return;
//get Zone to check mobs against
Zone zone;
if (words.length == 2) {
if (words[0].equals("all")) {
int plusplus = 0;
int count = Integer.parseInt(words[1]);
for (Zone zoneMicro : ZoneManager.getAllZones()) {
int size = zoneMicro.zoneMobSet.size();
if (size >= count) {
plusplus++;
throwbackInfo(pcSender, zoneMicro.getName() + " at location " + zoneMicro.getLoc().toString() + " has " + size + " mobs. ");
System.out.println(zoneMicro.getName() + " at location " + zoneMicro.getLoc().toString() + " has " + size + " mobs. ");
}
}
throwbackInfo(pcSender, " there are " + plusplus + " zones with at least " + count + " mobs in each.");
}
return;
}
if (words.length > 1) {
this.sendUsage(pcSender);
return;
} else if (words.length == 1) {
int uuid;
try {
uuid = Integer.parseInt(words[0]);
zone = ZoneManager.getZoneByUUID(uuid);
} catch (NumberFormatException e) {
zone = ZoneManager.findSmallestZone(pcSender.getLoc());
}
} else
zone = ZoneManager.findSmallestZone(pcSender.getLoc());
if (zone == null) {
throwbackError(pcSender, "Unable to find the zone");
return;
}
//get list of mobs for zone
if (zone.zoneMobSet.isEmpty()) {
throwbackError(pcSender, "No mobs found for this zone.");
return;
}
// ConcurrentHashMap<Integer, Mob> spawnMap = Mob.getSpawnMap();
//ConcurrentHashMap<Mob, Long> respawnMap = Mob.getRespawnMap();
// ConcurrentHashMap<Mob, Long> despawnMap = Mob.getDespawnMap();
throwbackInfo(pcSender, zone.getName() + ", numMobs: " + zone.zoneMobSet.size());
throwbackInfo(pcSender, "UUID, dbID, inRespawnMap, isAlive, activeAI, Loc");
//mob not found in spawn map, check respawn
boolean inRespawn = false;
}
@Override
protected String _getUsageString() {
return "' /auditmobs [zone.UUID]'";
}
@Override
protected String _getHelpString() {
return "Audits all the mobs in a zone.";
}
}
+1 -1
View File
@@ -9,8 +9,8 @@
package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.mbEnums.GameObjectType;
import engine.objects.AbstractGameObject;
import engine.objects.Building;
import engine.objects.PlayerCharacter;
-114
View File
@@ -1,114 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.DbManager;
import engine.gameManager.SessionManager;
import engine.math.Vector3fImmutable;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
import engine.util.MiscUtils;
public class ChangeNameCmd extends AbstractDevCmd {
public ChangeNameCmd() {
super("changename");
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
AbstractGameObject target) {
Vector3fImmutable loc = null;
// Arg Count Check
if (words.length < 2) {
this.sendUsage(pc);
return;
}
String oldFirst = words[0];
String newFirst = words[1];
String newLast = "";
if (words.length > 2) {
newLast = words[2];
for (int i = 3; i < words.length; i++)
newLast += ' ' + words[i];
}
//verify new name length
if (newFirst.length() < 3) {
this.throwbackError(pc, "Error: First name is incorrect length. Must be between 3 and 15 characters");
return;
}
//verify old name length
if (newLast.length() > 50) {
this.throwbackError(pc, "Error: Last name is incorrect length. Must be no more than 50 characters");
return;
}
// Check if firstname is valid
if (MiscUtils.checkIfFirstNameInvalid(newFirst)) {
this.throwbackError(pc, "Error: First name is not allowed");
return;
}
//get the world ID we're modifying for
//test if first name is unique, unless new and old first name are equal.
if (!(oldFirst.equals(newFirst))) {
if (!DbManager.PlayerCharacterQueries.IS_CHARACTER_NAME_UNIQUE(newFirst)) {
this.throwbackError(pc, "Error: First name is not unique.");
return;
}
}
//tests passed, update name in database
if (!DbManager.PlayerCharacterQueries.UPDATE_NAME(oldFirst, newFirst, newLast)) {
this.throwbackError(pc, "Error: Database failed to update the name.");
return;
}
//Finally update player ingame
PlayerCharacter pcTar = null;
try {
pcTar = SessionManager
.getPlayerCharacterByLowerCaseName(words[0]);
pcTar.setFirstName(newFirst);
pcTar.setLastName(newLast);
this.setTarget(pcTar); //for logging
//specify if last name is ascii characters only
String lastAscii = newLast.replaceAll("[^\\p{ASCII}]", "");
pcTar.setAsciiLastName(lastAscii.equals(newLast));
} catch (Exception e) {
this.throwbackError(pc, "Database was updated but ingame character failed to update.");
return;
}
String out = oldFirst + " was changed to " + newFirst + (newLast.isEmpty() ? "." : (' ' + newLast + '.'));
this.throwbackInfo(pc, out);
}
@Override
protected String _getHelpString() {
return "Changes the name of a player";
}
@Override
protected String _getUsageString() {
return "'./changename oldFirstName newFirstName newLastName'";
}
}
@@ -1,56 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.net.client.msg.TargetedActionMsg;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
/**
* @author Eighty
*/
public class CombatMessageCmd extends AbstractDevCmd {
public CombatMessageCmd() {
super("cm");
}
@Override
protected void _doCmd(PlayerCharacter pcSender, String[] args,
AbstractGameObject target) {
if (pcSender == null)
return;
if (args.length != 1) {
this.sendUsage(pcSender);
return;
}
int num = 0;
try {
num = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
throwbackError(pcSender, "Supplied message number " + args[0] + " failed to parse to an Integer");
return;
}
TargetedActionMsg.un2cnt = num;
throwbackInfo(pcSender, "CombatMessage set to " + num);
}
@Override
protected String _getUsageString() {
return "' /cm [cmNumber]'";
}
@Override
protected String _getHelpString() {
return "Sets the combat message to the supplied integer value";
}
}
+38 -18
View File
@@ -10,10 +10,14 @@
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.ChatManager;
import engine.gameManager.DbManager;
import engine.mbEnums;
import engine.objects.AbstractGameObject;
import engine.objects.ItemBase;
import engine.objects.ItemFactory;
import engine.objects.Item;
import engine.objects.ItemTemplate;
import engine.objects.PlayerCharacter;
import org.pmw.tinylog.Logger;
/**
* @author Eighty
@@ -25,30 +29,46 @@ public class CreateItemCmd extends AbstractDevCmd {
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
protected void _doCmd(PlayerCharacter playerCharacter, String[] words,
AbstractGameObject target) {
if (words.length < 2) {
this.sendUsage(pc);
return;
}
int id;
id = ItemBase.getIDByName(words[0]);
if (id == 0)
id = Integer.parseInt(words[0]);
if (id == 7) {
this.throwbackInfo(pc, "use /addgold to add gold.....");
this.sendUsage(playerCharacter);
return;
}
int templateID = Integer.parseInt(words[0]);
ItemTemplate template = ItemTemplate.templates.get(templateID);
if (template == null) {
ChatManager.chatSystemInfo(playerCharacter, "No such template found.");
return;
}
int size = 1;
if (words.length < 3) {
if (words.length == 2)
size = Integer.parseInt(words[1]);
for (int i = 0; i < size; i++) {
if (!playerCharacter.charItemManager.hasRoomInventory(template.item_wt)) {
ChatManager.chatSystemInfo(playerCharacter, "You are encumbered!.");
break;
}
Item item = new Item(templateID);
item.ownerID = playerCharacter.getObjectUUID();
item.ownerType = mbEnums.OwnerType.PlayerCharacter;
item.containerType = mbEnums.ItemContainerType.INVENTORY;
try {
item = DbManager.ItemQueries.PERSIST(item);
playerCharacter.charItemManager.addItemToInventory(item);
} catch (Exception e) {
Logger.error(e);
}
}
ItemFactory.fillInventory(pc, id, size);
playerCharacter.charItemManager.updateInventory();
}
@Override
@@ -58,7 +78,7 @@ public class CreateItemCmd extends AbstractDevCmd {
@Override
protected String _getUsageString() {
return "' /createitem <ItembaseID> <quantity>'";
return "' /createitem <templateID> <quantity>'";
}
}
-122
View File
@@ -1,122 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.jobs.DebugTimerJob;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
public class DebugCmd extends AbstractDevCmd {
public DebugCmd() {
super("debug");
// super("debug", MBServerStatics.ACCESS_GROUP_ALL_TEAM, 0, false, false);
}
private static void toggleDebugTimer(PlayerCharacter pc, String name, int num, int duration, boolean toggle) {
if (toggle) {
DebugTimerJob dtj = new DebugTimerJob(pc, name, num, duration);
pc.renewTimer(name, dtj, duration);
} else
pc.cancelTimer(name);
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
AbstractGameObject target) {
if (words.length < 2) {
this.sendUsage(pc);
return;
}
if (pc == null)
return;
//pc.setDebug must use bit sizes: 1, 2, 4, 8, 16, 32
String command = words[0].toLowerCase();
boolean toggle = (words[1].toLowerCase().equals("on")) ? true : false;
switch (command) {
case "magictrek":
pc.RUN_MAGICTREK = toggle;
break;
case "combat":
pc.setDebug(64, toggle);
break;
case "health":
toggleDebugTimer(pc, "Debug_Health", 1, 1000, toggle);
break;
case "mana":
toggleDebugTimer(pc, "Debug_Mana", 2, 1000, toggle);
break;
case "stamina":
toggleDebugTimer(pc, "Debug_Stamina", 3, 500, toggle);
break;
case "spells":
pc.setDebug(16, toggle);
break;
case "damageabsorber":
pc.setDebug(2, toggle);
break;
case "recast":
case "recycle":
pc.setDebug(4, toggle);
break;
case "seeinvis":
pc.setDebug(8, toggle);
break;
case "movement":
pc.setDebug(1, toggle);
break;
case "noaggro":
pc.setDebug(32, toggle);
break;
// case "loot":
// MBServerStatics.debugLoot = toggle;
// break;
default:
String output = "Debug for " + command + " not found.";
throwbackError(pc, output);
return;
}
setTarget(pc); //for logging
String output = "Debug for " + command + " turned " + ((toggle) ? "on." : "off.");
throwbackInfo(pc, output);
}
@Override
protected String _getHelpString() {
return "Runs debug commands";
}
@Override
protected String _getUsageString() {
return "'./Debug command on/off'";
}
}
-66
View File
@@ -1,66 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.objects.AbstractGameObject;
import engine.objects.Mob;
import engine.objects.PlayerCharacter;
public class DespawnCmd extends AbstractDevCmd {
public DespawnCmd() {
super("debugmob");
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
AbstractGameObject target) {
if (pc == null) {
return;
}
Mob mob = null;
if (target != null && target.getObjectType().equals(GameObjectType.Mob))
mob = (Mob) target;
if (mob == null)
mob = Mob.getFromCache(Integer.parseInt(words[1]));
if (mob == null)
return;
if (words[0].equalsIgnoreCase("respawn")) {
mob.respawn();
this.throwbackInfo(pc, "Mob with ID " + mob.getObjectUUID() + " Respawned");
} else if (words[0].equalsIgnoreCase("despawn")) {
mob.despawn();
this.throwbackInfo(pc, "Mob with ID " + mob.getObjectUUID() + " Despawned");
}
}
@Override
protected String _getHelpString() {
return "Gets distance from a target.";
}
@Override
protected String _getUsageString() {
return "' /distance'";
}
}
-65
View File
@@ -1,65 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.math.Vector3fImmutable;
import engine.objects.AbstractGameObject;
import engine.objects.AbstractWorldObject;
import engine.objects.PlayerCharacter;
public class DistanceCmd extends AbstractDevCmd {
public DistanceCmd() {
super("distance");
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
AbstractGameObject target) {
// Arg Count Check
if (words.length != 1) {
this.sendUsage(pc);
return;
}
if (pc == null) {
return;
}
if (target == null || !(target instanceof AbstractWorldObject)) {
throwbackError(pc, "No target found.");
return;
}
AbstractWorldObject awoTarget = (AbstractWorldObject) target;
Vector3fImmutable pcLoc = pc.getLoc();
Vector3fImmutable tarLoc = awoTarget.getLoc();
String out = "Distance: " + pcLoc.distance(tarLoc) +
"\r\nYour Loc: " + pcLoc.x + 'x' + pcLoc.y + 'x' + pcLoc.z +
"\r\nTarget Loc: " + tarLoc.x + 'x' + tarLoc.y + 'x' + tarLoc.z;
throwbackInfo(pc, out);
}
@Override
protected String _getHelpString() {
return "Gets distance from a target.";
}
@Override
protected String _getUsageString() {
return "' /distance'";
}
}
-61
View File
@@ -1,61 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.ChatManager;
import engine.gameManager.PowersManager;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
import engine.powers.EffectsBase;
/**
* @author Eighty
*/
public class EffectCmd extends AbstractDevCmd {
public EffectCmd() {
super("effect");
}
@Override
protected void _doCmd(PlayerCharacter pcSender, String[] args,
AbstractGameObject target) {
int ID = 0;
int token = 0;
if (args.length != 2) {
this.sendUsage(pcSender);
return;
}
ID = Integer.parseInt(args[0]);
token = Integer.parseInt(args[1]);
EffectsBase eb = PowersManager.setEffectToken(ID, token);
if (eb == null) {
throwbackError(pcSender, "Unable to find EffectsBase " + ID
+ " to modify.");
return;
}
ChatManager.chatSayInfo(pcSender,
"EffectsBase with ID " + ID + " changed token to " + token);
}
@Override
protected String _getUsageString() {
return "' /effect EffectsBaseID Token'";
}
@Override
protected String _getHelpString() {
return "Temporarily places the effect token with the corresponding EffectsBase on the server";
}
}
-87
View File
@@ -1,87 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.objects.*;
public class EnchantCmd extends AbstractDevCmd {
public EnchantCmd() {
super("enchant");
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
AbstractGameObject target) {
int rank = 0;
if (words.length < 1) {
this.sendUsage(pc);
return;
}
try {
rank = Integer.parseInt(words[0]);
} catch (Exception e) {
}
Item item;
if (target == null || target instanceof Item)
item = (Item) target;
else {
throwbackError(pc, "Must have an item targeted");
return;
}
CharacterItemManager cim = pc.getCharItemManager();
if (cim == null) {
throwbackError(pc, "Unable to find the character item manager for player " + pc.getFirstName() + '.');
return;
}
if (words[0].equals("clear")) {
item.clearEnchantments();
cim.updateInventory();
this.setResult(String.valueOf(item.getObjectUUID()));
} else {
int cnt = words.length;
for (int i = 1; i < cnt; i++) {
String enchant = words[i];
boolean valid = true;
for (Effect eff : item.getEffects().values()) {
if (eff.getEffectsBase().getIDString().equals(enchant)) {
throwbackError(pc, "This item already has that enchantment");
return;
}
}
if (valid) {
item.addPermanentEnchantmentForDev(enchant, rank);
this.setResult(String.valueOf(item.getObjectUUID()));
} else
throwbackError(pc, "Invalid Enchantment. Enchantment must consist of SUF-001 to SUF-328 or PRE-001 to PRE-334. Sent " + enchant + '.');
}
cim.updateInventory();
}
}
@Override
protected String _getHelpString() {
return "Enchants an item with a prefix and suffix";
}
@Override
protected String _getUsageString() {
return "' /enchant clear/Enchant1 Enchant2 Enchant3 ...'";
}
}
-84
View File
@@ -1,84 +0,0 @@
package engine.devcmd.cmds;
import engine.Enum.BuildingGroup;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.math.Vector3fImmutable;
import engine.objects.*;
public class GateInfoCmd extends AbstractDevCmd {
public GateInfoCmd() {
super("gateinfo");
}
// AbstractDevCmd Overridden methods
@Override
protected void _doCmd(PlayerCharacter player, String[] args,
AbstractGameObject target) {
Building targetBuilding;
String outString;
Runegate runeGate;
Blueprint blueprint;
String newline = "\r\n ";
targetBuilding = (Building) target;
if (targetBuilding.getObjectType() != GameObjectType.Building) {
throwbackInfo(player, "GateInfo: target must be a Building");
throwbackInfo(player, "Found" + targetBuilding.getObjectType().toString());
return;
}
blueprint = Blueprint._meshLookup.get(targetBuilding.getMeshUUID());
if (blueprint == null ||
(blueprint.getBuildingGroup() != BuildingGroup.RUNEGATE)) {
throwbackInfo(player, "showgate: target must be a Runegate");
return;
}
runeGate = Runegate._runegates.get(targetBuilding.getObjectUUID());
outString = "RungateType: " + runeGate.gateBuilding.getName();
outString += newline;
outString += "Portal State:";
outString += newline;
for (Portal portal : runeGate.getPortals()) {
outString += "Portal: " + portal.portalType.name();
outString += " Active: " + portal.isActive();
outString += " Dest: " + portal.targetGate.getName();
outString += newline;
outString += " Origin: " + portal.getPortalLocation().x + 'x';
outString += " " + portal.getPortalLocation().y + 'y';
outString += newline;
Vector3fImmutable offset = portal.getPortalLocation().subtract(targetBuilding.getLoc());
outString += " Offset: " + offset.x + "x " + offset.z + 'y';
outString += newline;
outString += newline;
}
outString += newline;
throwbackInfo(player, outString);
}
@Override
protected String _getHelpString() {
return "Displays a runegate's gate status";
}
@Override
protected String _getUsageString() {
return "/gateinfo <target runegate> \n";
}
}
+45 -172
View File
@@ -9,11 +9,10 @@
package engine.devcmd.cmds;
import engine.InterestManagement.HeightMap;
import engine.InterestManagement.Terrain;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.ZoneManager;
import engine.math.Vector2f;
import engine.math.Vector3fImmutable;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
import engine.objects.Zone;
@@ -22,205 +21,79 @@ public class GetHeightCmd extends AbstractDevCmd {
public GetHeightCmd() {
super("getHeight");
this.addCmdString("height");
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
protected void _doCmd(PlayerCharacter playerCharacter, String[] words,
AbstractGameObject target) {
boolean end = true;
Zone currentZone;
Zone parentZone;
Zone heightmapZone;
float height = HeightMap.getWorldHeight(pc);
currentZone = ZoneManager.findSmallestZone(playerCharacter.getLoc());
heightmapZone = Terrain.getNextZoneWithTerrain(currentZone);
parentZone = Terrain.getNextZoneWithTerrain(currentZone.parent);
this.throwbackInfo(pc, "Altitude : " + height);
Vector2f childZoneLoc = ZoneManager.worldToTerrainSpace(playerCharacter.getLoc(), heightmapZone);
Vector2f childZoneOffset = ZoneManager.worldToZoneOffset(playerCharacter.getLoc(), heightmapZone);
Vector2f normalizedOffset = new Vector2f(Math.abs(childZoneOffset.x) / heightmapZone.template.major_radius,
Math.abs(childZoneOffset.y) / heightmapZone.template.minor_radius);
Vector2f parentZoneLoc = ZoneManager.worldToTerrainSpace(playerCharacter.getLoc(), parentZone);
this.throwbackInfo(pc, "Character Height: " + pc.getCharacterHeight());
this.throwbackInfo(pc, "Character Height to start swimming: " + pc.centerHeight);
float childHeight = heightmapZone.terrain.getInterpolatedTerrainHeight(childZoneLoc);
childHeight = childHeight + heightmapZone.global_height;
Zone zone = ZoneManager.findSmallestZone(pc.getLoc());
this.throwbackInfo(pc, "Water Level : " + zone.getSeaLevel());
this.throwbackInfo(pc, "Character Water Level Above : " + (pc.getCharacterHeight() + height - zone.getSeaLevel()));
float parentHeight = parentZone.terrain.getInterpolatedTerrainHeight(parentZoneLoc);
parentHeight += parentZone.global_height;
if (end)
return;
float blendedHeight = Terrain.getWorldHeight(currentZone, playerCharacter.getLoc());
Vector2f gridSquare;
Vector2f gridOffset;
Vector2f parentGrid;
Vector2f parentLoc = new Vector2f(-1, -1);
Vector2f terrainCell = heightmapZone.terrain.getTerrainCell(childZoneLoc);
Vector2f cell_offset = new Vector2f(terrainCell.x % 1, terrainCell.y % 1);
Zone currentZone = ZoneManager.findSmallestZone(pc.getLoc());
if (currentZone == null)
return;
Zone parentZone = currentZone.getParent();
HeightMap heightMap = currentZone.getHeightMap();
terrainCell.x = (float) Math.floor(terrainCell.x);
terrainCell.y = (float) Math.floor(terrainCell.y);
//find the next parents heightmap if the currentzone heightmap is null.
while (heightMap == null) {
short top_left_pixel = heightmapZone.terrain.terrain_pixel_data[(int) terrainCell.x][(int) terrainCell.y];
short top_right_pixel = heightmapZone.terrain.terrain_pixel_data[(int) terrainCell.x + 1][(int) terrainCell.y];
short bottom_left_pixel = heightmapZone.terrain.terrain_pixel_data[(int) terrainCell.x][(int) terrainCell.y + 1];
short bottom_right_pixel = heightmapZone.terrain.terrain_pixel_data[(int) terrainCell.x + 1][(int) terrainCell.y + 1];
if (currentZone == ZoneManager.getSeaFloor()) {
this.throwbackInfo(pc, "Could not find a heightmap to get height.");
break;
}
this.throwbackInfo(playerCharacter, "Current Zone : " + currentZone.zoneName);
this.throwbackInfo(playerCharacter, "Heightmap Zone : " + heightmapZone.zoneName);
this.throwbackInfo(playerCharacter, "Parent Zone: " + parentZone.zoneName);
this.throwbackError(pc, "Heightmap does not exist for " + currentZone.getName());
this.throwbackInfo(pc, "Using parent zone instead: ");
currentZone = currentZone.getParent();
heightMap = currentZone.getHeightMap();
}
this.throwbackInfo(playerCharacter, "Player loc: " + "[" + playerCharacter.loc.x + "]" + "[" + playerCharacter.loc.y + "]" + "[" + playerCharacter.loc.z + "]");
this.throwbackInfo(playerCharacter, "Terrain Cell : " + "[" + terrainCell.x + "]" + "[" + terrainCell.y + "]");
this.throwbackInfo(playerCharacter, "Cell Offset : " + "[" + cell_offset.x + "]" + "[" + cell_offset.y + "]");
this.throwbackInfo(playerCharacter, "Pixels : " + "[" + top_left_pixel + "]" + "[" + top_right_pixel + "]");
this.throwbackInfo(playerCharacter, "Pixels : " + "[" + bottom_left_pixel + "]" + "[" + bottom_right_pixel + "]");
if ((heightMap == null) || (currentZone == ZoneManager.getSeaFloor())) {
this.throwbackInfo(pc, currentZone.getName() + " has no heightmap ");
this.throwbackInfo(pc, "Current altitude: " + currentZone.absY);
return;
}
this.throwbackInfo(playerCharacter, "Child Zone Offset: " + "[" + childZoneOffset.x + "]" + "[" + childZoneOffset.y + "]");
this.throwbackInfo(playerCharacter, "Normalized offset: " + "[" + normalizedOffset.x + "]" + "[" + normalizedOffset.y + "]");
this.throwbackInfo(playerCharacter, "template blend Values: (max/min): " + heightmapZone.template.max_blend + " /" + heightmapZone.template.min_blend);
this.throwbackInfo(playerCharacter, "terrain values (max/min): " + heightmapZone.terrain.blend_values.x + " /" + heightmapZone.terrain.blend_values.y);
this.throwbackInfo(playerCharacter, "Blend coefficient: " + heightmapZone.terrain.getTerrainBlendCoefficient(childZoneOffset));
Vector2f zoneLoc = ZoneManager.worldToZoneSpace(pc.getLoc(), currentZone);
Vector3fImmutable seaFloorLocalLoc = ZoneManager.worldToLocal(pc.getLoc(), ZoneManager.getSeaFloor());
this.throwbackInfo(pc, "SeaFloor Local : " + seaFloorLocalLoc.x + " , " + seaFloorLocalLoc.y);
this.throwbackInfo(pc, "Local Zone Location : " + zoneLoc.x + " , " + zoneLoc.y);
Vector3fImmutable localLocFromCenter = ZoneManager.worldToLocal(pc.getLoc(), currentZone);
Vector3fImmutable parentLocFromCenter = ZoneManager.worldToLocal(pc.getLoc(), currentZone.getParent());
this.throwbackInfo(pc, "Local Zone Location from center : " + localLocFromCenter);
this.throwbackInfo(pc, "parent Zone Location from center : " + parentLocFromCenter);
Vector2f parentZoneLoc = ZoneManager.worldToZoneSpace(pc.getLoc(), currentZone.getParent());
this.throwbackInfo(pc, "Parent Zone Location from Bottom Left : " + parentZoneLoc);
if ((parentZone != null) && (parentZone.getHeightMap() != null)) {
parentLoc = ZoneManager.worldToZoneSpace(pc.getLoc(), parentZone);
parentGrid = parentZone.getHeightMap().getGridSquare(parentLoc);
} else
parentGrid = new Vector2f(-1, -1);
gridSquare = heightMap.getGridSquare(zoneLoc);
gridOffset = HeightMap.getGridOffset(gridSquare);
float interaltitude = currentZone.getHeightMap().getInterpolatedTerrainHeight(zoneLoc);
this.throwbackInfo(pc, currentZone.getName());
this.throwbackInfo(pc, "Current Grid Square: " + gridSquare.x + " , " + gridSquare.y);
this.throwbackInfo(pc, "Grid Offset: " + gridOffset.x + " , " + gridOffset.y);
this.throwbackInfo(pc, "Parent Grid: " + parentGrid.x + " , " + parentGrid.y);
if (parentGrid.x != -1) {
float parentAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(parentLoc);
this.throwbackInfo(pc, "Parent ALTITUDE: " + (parentAltitude));
this.throwbackInfo(pc, "Parent Interpolation: " + (parentAltitude + parentZone.getWorldAltitude()));
}
this.throwbackInfo(pc, "interpolated height: " + interaltitude);
this.throwbackInfo(pc, "interpolated height with World: " + (interaltitude + currentZone.getWorldAltitude()));
float realWorldAltitude = interaltitude + currentZone.getWorldAltitude();
//OUTSET
if (parentZone != null) {
float parentXRadius = currentZone.getBounds().getHalfExtents().x;
float parentZRadius = currentZone.getBounds().getHalfExtents().y;
float offsetX = Math.abs((localLocFromCenter.x / parentXRadius));
float offsetZ = Math.abs((localLocFromCenter.z / parentZRadius));
float bucketScaleX = 100 / parentXRadius;
float bucketScaleZ = 200 / parentZRadius;
float outsideGridSizeX = 1 - bucketScaleX; //32/256
float outsideGridSizeZ = 1 - bucketScaleZ;
float weight;
double scale;
if (offsetX > outsideGridSizeX && offsetX > offsetZ) {
weight = (offsetX - outsideGridSizeX) / bucketScaleX;
scale = Math.atan2((.5 - weight) * 3.1415927, 1);
float scaleChild = (float) ((scale + 1) * .5);
float scaleParent = 1 - scaleChild;
float parentAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(parentLoc);
float parentCenterAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(ZoneManager.worldToZoneSpace(currentZone.getLoc(), parentZone));
parentCenterAltitude += currentZone.getYCoord();
parentCenterAltitude += interaltitude;
float firstScale = parentAltitude * scaleParent;
float secondScale = parentCenterAltitude * scaleChild;
float outsetALt = firstScale + secondScale;
outsetALt += currentZone.getParent().getAbsY();
realWorldAltitude = outsetALt;
} else if (offsetZ > outsideGridSizeZ) {
weight = (offsetZ - outsideGridSizeZ) / bucketScaleZ;
scale = Math.atan2((.5 - weight) * 3.1415927, 1);
float scaleChild = (float) ((scale + 1) * .5);
float scaleParent = 1 - scaleChild;
float parentAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(parentLoc);
float parentCenterAltitude = parentZone.getHeightMap().getInterpolatedTerrainHeight(ZoneManager.worldToZoneSpace(currentZone.getLoc(), parentZone));
parentCenterAltitude += currentZone.getYCoord();
parentCenterAltitude += interaltitude;
float firstScale = parentAltitude * scaleParent;
float secondScale = parentCenterAltitude * scaleChild;
float outsetALt = firstScale + secondScale;
outsetALt += currentZone.getParent().getAbsY();
realWorldAltitude = outsetALt;
}
}
float strMod = pc.statStrBase - 40;
strMod *= .00999999998f;
strMod += 1f;
float radius = 0;
switch (pc.getRaceID()) {
case 2017:
radius = 3.1415927f;
case 2000:
}
strMod *= 1.5707964f;
strMod += 3.1415927f;
strMod -= .5f;
realWorldAltitude += strMod;
this.throwbackInfo(pc, "interpolated height with World: " + realWorldAltitude);
this.throwbackInfo(playerCharacter, "------------");
this.throwbackInfo(playerCharacter, "Child Height at loc: " + Math.ceil(childHeight));
this.throwbackInfo(playerCharacter, "Parent Height at loc: " + Math.ceil(parentHeight));
this.throwbackInfo(playerCharacter, "Blended Height (Ceil): " + blendedHeight + " (" + Math.ceil(blendedHeight) + ")");
}
@Override
protected String _getHelpString() {
return "Temporarily Changes SubRace";
return "Queries heightmap engine";
}
@Override
protected String _getUsageString() {
return "' /subrace mobBaseID";
return "' /getheight";
}
}
-58
View File
@@ -1,58 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
public class GetMemoryCmd extends AbstractDevCmd {
public GetMemoryCmd() {
super("getmemory");
}
public static String getMemoryOutput(long memory) {
String out = "";
if (memory > 1073741824)
return (memory / 1073741824) + "GB";
else if (memory > 1048576)
return (memory / 1048576) + "MB";
else if (memory > 1024)
return (memory / 1048576) + "KB";
else
return memory + "B";
}
@Override
protected void _doCmd(PlayerCharacter pcSender, String[] words,
AbstractGameObject target) {
if (pcSender == null)
return;
String hSize = getMemoryOutput(Runtime.getRuntime().totalMemory());
String mhSize = getMemoryOutput(Runtime.getRuntime().maxMemory());
String fhSize = getMemoryOutput(Runtime.getRuntime().freeMemory());
String out = "Heap Size: " + hSize + ", Max Heap Size: " + mhSize + ", Free Heap Size: " + fhSize;
throwbackInfo(pcSender, out);
}
@Override
protected String _getUsageString() {
return "' /getmemory'";
}
@Override
protected String _getHelpString() {
return "lists memory usage";
}
}
+1 -1
View File
@@ -48,7 +48,7 @@ public class GetOffsetCmd extends AbstractDevCmd {
float difY = pcSender.getLoc().y - zone.absY;
float difZ = pcSender.getLoc().z - zone.absZ;
throwbackInfo(pcSender, zone.getName() + ": (x: " + difX + ", y: " + difY + ", z: " + difZ + ')');
throwbackInfo(pcSender, zone.zoneName + ": (x: " + difX + ", y: " + difY + ", z: " + difZ + ')');
}
@Override
+2 -2
View File
@@ -12,7 +12,7 @@ package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.SessionManager;
import engine.net.client.ClientConnection;
import engine.net.client.msg.VendorDialogMsg;
import engine.net.client.handlers.VendorDialogMsgHandler;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
@@ -32,7 +32,7 @@ public class GetVaultCmd extends AbstractDevCmd {
if (cc == null)
return;
VendorDialogMsg.getVault(pcSender, null, cc);
VendorDialogMsgHandler.getVault(pcSender, null, cc);
this.setTarget(pcSender); //for logging
}
-67
View File
@@ -1,67 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.ZoneManager;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
import engine.objects.Zone;
import java.util.ArrayList;
public class GetZoneCmd extends AbstractDevCmd {
public GetZoneCmd() {
super("getzone");
}
@Override
protected void _doCmd(PlayerCharacter pcSender, String[] words,
AbstractGameObject target) {
if (pcSender == null)
return;
if (words.length != 1) {
this.sendUsage(pcSender);
return;
}
ArrayList<Zone> allIn = new ArrayList<>();
switch (words[0].toLowerCase()) {
case "all":
throwbackInfo(pcSender, "All zones currently in");
allIn = ZoneManager.getAllZonesIn(pcSender.getLoc());
break;
case "smallest":
throwbackInfo(pcSender, "Smallest zone currently in");
Zone zone = ZoneManager.findSmallestZone(pcSender.getLoc());
allIn.add(zone);
break;
default:
this.sendUsage(pcSender);
return;
}
for (Zone zone : allIn)
throwbackInfo(pcSender, zone.getName() + "; UUID: " + zone.getObjectUUID() + ", loadNum: " + zone.getLoadNum());
}
@Override
protected String _getUsageString() {
return "' /getzone smallest/all'";
}
@Override
protected String _getHelpString() {
return "lists what zones a player is in";
}
}
-107
View File
@@ -1,107 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.math.Vector3fImmutable;
import engine.objects.AbstractGameObject;
import engine.objects.Building;
import engine.objects.PlayerCharacter;
public class GotoBoundsCmd extends AbstractDevCmd {
public GotoBoundsCmd() {
super("gotobounds");
}
@Override
protected void _doCmd(PlayerCharacter player, String[] words,
AbstractGameObject target) {
String corner = words[0];
Vector3fImmutable targetLoc = Vector3fImmutable.ZERO;
if (target == null || !target.getObjectType().equals(GameObjectType.Building)) {
this.throwbackError(player, "No Building Selected");
return;
}
Building building = (Building) target;
if (building.getBounds() == null) {
this.throwbackInfo(player, "No valid Bounds for building UUID " + building.getObjectUUID());
return;
}
float x = building.getBounds().getHalfExtents().x;
float z = building.getBounds().getHalfExtents().y;
if (building.getBlueprint() != null) {
x = building.getBlueprint().getExtents().x;
z = building.getBlueprint().getExtents().y;
}
float topLeftX = building.getLoc().x - x;
float topLeftY = building.getLoc().z - z;
float topRightX = building.getLoc().x + x;
float topRightY = building.getLoc().z - z;
float bottomLeftX = building.getLoc().x - x;
float bottomLeftY = building.getLoc().z + z;
float bottomRightX = building.getLoc().x + x;
float bottomRightY = building.getLoc().z + z;
switch (corner) {
case "topleft":
targetLoc = new Vector3fImmutable(topLeftX, 0, topLeftY);
break;
case "topright":
targetLoc = new Vector3fImmutable(topRightX, 0, topRightY);
break;
case "bottomleft":
targetLoc = new Vector3fImmutable(bottomLeftX, 0, bottomLeftY);
break;
case "bottomright":
targetLoc = new Vector3fImmutable(bottomRightX, 0, bottomRightY);
break;
default:
this.throwbackInfo(player, "wrong corner name. use topleft , topright , bottomleft , bottomright");
return;
}
targetLoc = Vector3fImmutable.transform(building.getLoc(), targetLoc, building.getBounds().getRotationDegrees());
// Teleport player
if (targetLoc == Vector3fImmutable.ZERO) {
this.throwbackError(player, "Failed to locate UUID");
return;
}
player.teleport(targetLoc);
}
@Override
protected String _getHelpString() {
return "Teleports player to a UUID";
}
@Override
protected String _getUsageString() {
return "' /gotoobj <UID>'";
}
}
+4 -4
View File
@@ -9,11 +9,11 @@
package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.DbManager;
import engine.gameManager.SessionManager;
import engine.math.Vector3fImmutable;
import engine.mbEnums.GameObjectType;
import engine.objects.*;
import engine.server.MBServerStatics;
@@ -81,7 +81,7 @@ public class GotoCmd extends AbstractDevCmd {
continue;
Zone zone = city.getParent();
if (zone != null) {
if (zone.isNPCCity() || zone.isPlayerCity())
if (zone.isNPCCity || zone.guild_zone)
loc = Vector3fImmutable.getRandomPointOnCircle(zone.getLoc(), MBServerStatics.TREE_TELEPORT_RADIUS);
else
loc = zone.getLoc();
@@ -97,10 +97,10 @@ public class GotoCmd extends AbstractDevCmd {
Zone zone = (Zone) zoneAgo;
if (zone == null)
continue;
if (!zone.getName().equalsIgnoreCase(cityName))
if (!zone.zoneName.equalsIgnoreCase(cityName))
continue;
if (zone != null) {
if (zone.isNPCCity() || zone.isPlayerCity())
if (zone.isNPCCity || zone.guild_zone)
loc = Vector3fImmutable.getRandomPointOnCircle(zone.getLoc(), MBServerStatics.TREE_TELEPORT_RADIUS);
else
loc = zone.getLoc();
+8 -8
View File
@@ -9,10 +9,10 @@
package engine.devcmd.cmds;
import engine.Enum;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.DbManager;
import engine.math.Vector3fImmutable;
import engine.mbEnums;
import engine.objects.*;
public class GotoObj extends AbstractDevCmd {
@@ -27,7 +27,7 @@ public class GotoObj extends AbstractDevCmd {
int uuid;
Vector3fImmutable targetLoc = Vector3fImmutable.ZERO;
Enum.DbObjectType objectType;
mbEnums.DbObjectType objectType;
try {
uuid = Integer.parseInt(words[0]);
@@ -41,37 +41,37 @@ public class GotoObj extends AbstractDevCmd {
switch (objectType) {
case NPC:
NPC npc = (NPC) DbManager.getFromCache(Enum.GameObjectType.NPC, uuid);
NPC npc = (NPC) DbManager.getFromCache(mbEnums.GameObjectType.NPC, uuid);
if (npc != null)
targetLoc = npc.getLoc();
break;
case MOB:
Mob mob = (Mob) DbManager.getFromCache(Enum.GameObjectType.Mob, uuid);
Mob mob = (Mob) DbManager.getFromCache(mbEnums.GameObjectType.Mob, uuid);
if (mob != null)
targetLoc = mob.getLoc();
break;
case CHARACTER:
PlayerCharacter playerCharacter = (PlayerCharacter) DbManager.getFromCache(Enum.GameObjectType.PlayerCharacter, uuid);
PlayerCharacter playerCharacter = (PlayerCharacter) DbManager.getFromCache(mbEnums.GameObjectType.PlayerCharacter, uuid);
if (playerCharacter != null)
targetLoc = playerCharacter.getLoc();
break;
case BUILDING:
Building building = (Building) DbManager.getFromCache(Enum.GameObjectType.Building, uuid);
Building building = (Building) DbManager.getFromCache(mbEnums.GameObjectType.Building, uuid);
if (building != null)
targetLoc = building.getLoc();
break;
case ZONE:
Zone zone = (Zone) DbManager.getFromCache(Enum.GameObjectType.Zone, uuid);
Zone zone = (Zone) DbManager.getFromCache(mbEnums.GameObjectType.Zone, uuid);
if (zone != null)
targetLoc = zone.getLoc();
break;
case CITY:
City city = (City) DbManager.getFromCache(Enum.GameObjectType.City, uuid);
City city = (City) DbManager.getFromCache(mbEnums.GameObjectType.City, uuid);
if (city != null)
targetLoc = city.getLoc();
+2 -2
View File
@@ -40,7 +40,7 @@ public class HotzoneCmd extends AbstractDevCmd {
String input = data.toString().trim();
if (input.length() == 0) {
outString = "Current hotZone: " + ZoneManager.hotZone.getName() + "\r\n";
outString = "Current hotZone: " + ZoneManager.hotZone.zoneName + "\r\n";
outString += "Available hotZones: " + ZoneManager.availableHotZones();
throwbackInfo(playerCharacter, outString);
return;
@@ -48,7 +48,7 @@ public class HotzoneCmd extends AbstractDevCmd {
if (input.equalsIgnoreCase("random")) {
ZoneManager.generateAndSetRandomHotzone();
outString = "New hotZone: " + ZoneManager.hotZone.getName() + "\r\n";
outString = "New hotZone: " + ZoneManager.hotZone.zoneName + "\r\n";
outString += "Available hotZones: " + ZoneManager.availableHotZones();
throwbackInfo(playerCharacter, outString);
return;
+28 -24
View File
@@ -9,14 +9,14 @@
package engine.devcmd.cmds;
import engine.Enum;
import engine.Enum.BuildingGroup;
import engine.Enum.GameObjectType;
import engine.Enum.TargetColor;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.BuildingManager;
import engine.gameManager.SessionManager;
import engine.math.Vector3fImmutable;
import engine.mbEnums;
import engine.mbEnums.BuildingGroup;
import engine.mbEnums.GameObjectType;
import engine.mbEnums.TargetColor;
import engine.objects.*;
import engine.util.StringUtils;
@@ -253,9 +253,9 @@ public class InfoCmd extends AbstractDevCmd {
output += newline;
output += "InSession : " + SessionManager.getPlayerCharacterByID(target.getObjectUUID()) != null ? " true " : " false";
output += newline;
output += "RaceType: " + targetPC.getRace().getRaceType().name();
output += "RaceType: " + targetPC.race.getRaceType().name();
output += newline;
output += "Race: " + targetPC.getRace().getName();
output += "Race: " + targetPC.race.getName();
output += newline;
output += "Safe:" + targetPC.inSafeZone();
output += newline;
@@ -278,7 +278,7 @@ public class InfoCmd extends AbstractDevCmd {
output += "Account ID: UNKNOWN";
output += newline;
output += "Inventory Weight:" + (targetPC.getCharItemManager().getInventoryWeight() + targetPC.getCharItemManager().getEquipWeight());
output += "Inventory Weight:" + (targetPC.charItemManager.getInventoryWeight() + targetPC.charItemManager.getEquipWeight());
output += newline;
output += "Max Inventory Weight:" + ((int) targetPC.statStrBase * 3);
output += newline;
@@ -291,7 +291,7 @@ public class InfoCmd extends AbstractDevCmd {
output += "inFloor :" + targetPC.getInFloorID();
output += newline;
BaseClass baseClass = targetPC.getBaseClass();
BaseClass baseClass = targetPC.baseClass;
if (baseClass != null)
output += StringUtils.addWS("Class: " + baseClass.getName(), 20);
@@ -369,7 +369,8 @@ public class InfoCmd extends AbstractDevCmd {
output += newline;
output += "InventorySet: " + targetNPC.getContract().inventorySet;
output += newline;
output += targetNPC.getContract().getAllowedBuildings().toString();
Contract contract1 = targetNPC.getContract();
output += contract1.allowedBuildings.toString();
output += newline;
output += "Extra Rune: " + targetNPC.getContract().getExtraRune();
@@ -383,11 +384,12 @@ public class InfoCmd extends AbstractDevCmd {
output += newline;
if (mobBase != null) {
output += newline;
output += "Slottable: " + targetNPC.getContract().getAllowedBuildings().toString();
Contract contract = targetNPC.getContract();
output += "Slottable: " + contract.allowedBuildings.toString();
output += newline;
output += "EquipSet: " + targetNPC.getEquipmentSetID();
output += newline;
output += "Parent Zone LoadNum : " + targetNPC.getParentZone().getLoadNum();
output += "Parent Zone LoadNum : " + targetNPC.getParentZone().templateID;
}
@@ -436,11 +438,13 @@ public class InfoCmd extends AbstractDevCmd {
if (targetMob.isPet()) {
output += "isPet: true";
output += newline;
if ((targetMob.agentType.equals(Enum.AIAgentType.PET)))
if ((targetMob.agentType.equals(mbEnums.AIAgentType.PET)))
output += "isSummonedPet: true";
else
output += "isSummonedPet: false";
PlayerCharacter owner = targetMob.getOwner();
PlayerCharacter owner = (PlayerCharacter) targetMob.guardCaptain;
if (owner != null)
output += " owner: " + owner.getObjectUUID();
output += newline;
@@ -454,7 +458,7 @@ public class InfoCmd extends AbstractDevCmd {
output += newline;
}
if ((targetMob.agentType.equals(Enum.AIAgentType.MOBILE))) {
if ((targetMob.agentType.equals(mbEnums.AIAgentType.MOBILE))) {
output += "SpawnRadius: " + targetMob.getSpawnRadius();
output += newline;
output += "Spawn Timer: " + targetMob.getSpawnTimeAsString();
@@ -471,7 +475,7 @@ public class InfoCmd extends AbstractDevCmd {
output += "EquipSet: " + targetMob.equipmentSetID;
output += newline;
try {
output += "Parent Zone LoadNum : " + targetMob.getParentZone().getLoadNum();
output += "Parent Zone LoadNum : " + targetMob.parentZone.templateID;
} catch (Exception ex) {
//who cares
}
@@ -492,28 +496,28 @@ public class InfoCmd extends AbstractDevCmd {
output += newline;
output += "No building found." + newline;
}
int max = (int)(4.882 * targetMob.level + 121.0);
if(max > 321){
int max = (int) (4.882 * targetMob.level + 121.0);
if (max > 321) {
max = 321;
}
int min = (int)(4.469 * targetMob.level - 3.469);
int min = (int) (4.469 * targetMob.level - 3.469);
output += "Min Loot Roll = " + min;
output += "Max Loot Roll = " + max;
break;
case Item: //intentional passthrough
case MobLoot:
Item item = (Item) target;
ItemBase itemBase = item.getItemBase();
output += StringUtils.addWS("ItemBase: " + itemBase.getUUID(), 20);
output += "Weight: " + itemBase.getWeight();
ItemTemplate template = ItemTemplate.templates.get(item.templateID);
output += StringUtils.addWS("Template: " + template.template_id, 20);
output += "Weight: " + template.item_wt;
output += newline;
DecimalFormat df = new DecimalFormat("###,###,###,###,##0");
output += StringUtils.addWS("Qty: "
+ df.format(item.getNumOfItems()), 20);
output += "Charges: " + item.getChargesRemaining()
+ '/' + item.getChargesMax();
output += "Charges: " + (byte) item.chargesRemaining
+ '/' + item.template.item_initial_charges;
output += newline;
output += "Name: " + itemBase.getName();
output += "Name: " + template.item_base_name;
output += newline;
output += item.getContainerInfo();
-212
View File
@@ -1,212 +0,0 @@
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.devcmd.cmds;
import engine.Enum.ProtectionState;
import engine.InterestManagement.WorldGrid;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.BuildingManager;
import engine.gameManager.ChatManager;
import engine.gameManager.DbManager;
import engine.gameManager.ZoneManager;
import engine.math.Vector3f;
import engine.math.Vector3fImmutable;
import engine.objects.*;
import org.pmw.tinylog.Logger;
/**
* @author Eighty
*/
public class MakeBaneCmd extends AbstractDevCmd {
public MakeBaneCmd() {
super("makebane");
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
AbstractGameObject target) {
if (words.length < 1 || words.length > 2) {
this.sendUsage(pc);
return;
}
int attackerID = 0;
int rank = 8;
if (words.length == 2) {
try {
attackerID = Integer.parseInt(words[0]);
rank = Integer.parseInt(words[1]);
} catch (NumberFormatException e) {
throwbackError(pc, "AttackerGuildID must be a number, " + words[0] + " is invalid");
return;
}
} else if (words.length == 1) {
if (target == null) {
throwbackError(pc, "No target specified");
return;
}
if (!(target instanceof PlayerCharacter)) {
throwbackError(pc, "Target is not a player");
return;
}
attackerID = target.getObjectUUID();
try {
rank = Integer.parseInt(words[0]);
} catch (NumberFormatException e) {
throwbackError(pc, "Rank must be specified, 1 through 8");
return;
}
}
if (rank < 1 || rank > 8) {
throwbackError(pc, "Rank must be 1 through 8");
return;
}
PlayerCharacter player = PlayerCharacter.getPlayerCharacter(attackerID);
if (player.getGuild().isEmptyGuild()) {
throwbackError(pc, "Errant's can not place banes");
return;
}
AbstractCharacter attackerAGL = Guild.GetGL(player.getGuild());
if (attackerAGL == null) {
throwbackError(pc, "No guild leader found for attacking guild.");
return;
}
if (!(attackerAGL instanceof PlayerCharacter)) {
throwbackError(pc, "Attacking guild leader is an NPC.");
return;
}
if (player.getGuild().isNPCGuild()) {
throwbackError(pc, "The guild used is an npc guild. They can not bane.");
return;
}
// if (player.getGuild().getOwnedCity() != null) {
// throwbackError(pc, "The attacking guild already has a city.");
// return;
// }
Zone zone = ZoneManager.findSmallestZone(pc.getLoc());
if (zone == null) {
throwbackError(pc, "Unable to find the zone you're in.");
return;
}
if (!zone.isPlayerCity()) {
throwbackError(pc, "This is not a player city.");
return;
}
City city = City.getCity(zone.getPlayerCityUUID());
if (city == null) {
throwbackError(pc, "Unable to find the city associated with this zone.");
return;
}
if (city.getTOL() == null) {
throwbackError(pc, "Unable to find the tree of life for this city.");
return;
}
if (city.getBane() != null) {
throwbackError(pc, "This city is already baned.");
return;
}
if (Bane.getBaneByAttackerGuild(player.getGuild()) != null) {
throwbackError(pc, "This guild is already baning someone.");
return;
}
Blueprint blueprint = Blueprint.getBlueprint(24300);
if (blueprint == null) {
throwbackError(pc, "Unable to find building set for banestone.");
return;
}
Vector3f rot = new Vector3f(0, 0, 0);
// *** Refactor : Overlap test goes here
//Let's drop a banestone!
Vector3fImmutable localLocation = ZoneManager.worldToLocal(pc.getLoc(), zone);
if (localLocation == null) {
ChatManager.chatSystemError(pc, "Failed to convert world location to zone location. Contact a CCR.");
Logger.info("Failed to Convert World coordinates to local zone coordinates");
return;
}
Building stone = DbManager.BuildingQueries.CREATE_BUILDING(
zone.getObjectUUID(), pc.getObjectUUID(), blueprint.getName(), blueprint.getBlueprintUUID(),
localLocation, 1.0f, blueprint.getMaxHealth(rank), ProtectionState.PROTECTED, 0, rank,
null, blueprint.getBlueprintUUID(), 1, 0.0f);
if (stone == null) {
ChatManager.chatSystemError(pc, "Failed to create banestone.");
return;
}
stone.addEffectBit((1 << 19));
stone.setRank((byte) rank);
stone.setMaxHitPoints(blueprint.getMaxHealth(stone.getRank()));
stone.setCurrentHitPoints(stone.getMaxHitPoints());
BuildingManager.setUpgradeDateTime(stone, null, 0);
//Make the bane
Bane bane = Bane.makeBane(player, city, stone);
if (bane == null) {
//delete bane stone, failed to make bane object
DbManager.BuildingQueries.DELETE_FROM_DATABASE(stone);
throwbackError(pc, "Failed to create bane.");
return;
}
WorldGrid.addObject(stone, pc);
//Add baned effect to TOL
city.getTOL().addEffectBit((1 << 16));
city.getTOL().updateEffects();
Vector3fImmutable movePlayerOutsideStone = player.getLoc();
movePlayerOutsideStone = movePlayerOutsideStone.setX(movePlayerOutsideStone.x + 10);
movePlayerOutsideStone = movePlayerOutsideStone.setZ(movePlayerOutsideStone.z + 10);
player.teleport(movePlayerOutsideStone);
throwbackInfo(pc, "The city has been succesfully baned.");
}
@Override
protected String _getHelpString() {
return "Creates an bane.";
}
@Override
protected String _getUsageString() {
return "'./makebane playerUUID baneRank'";
}
}
+35 -80
View File
@@ -9,16 +9,13 @@
package engine.devcmd.cmds;
import engine.Enum.ItemContainerType;
import engine.Enum.ItemType;
import engine.Enum.OwnerType;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.DbManager;
import engine.mbEnums.ItemType;
import engine.mbEnums.OwnerType;
import engine.objects.*;
import engine.powers.EffectsBase;
import java.util.ArrayList;
/**
* @author Eighty
*/
@@ -32,48 +29,6 @@ public class MakeItemCmd extends AbstractDevCmd {
protected void _doCmd(PlayerCharacter pc, String[] words,
AbstractGameObject target) {
if (words[0].equals("resources")) {
for (int ibID : Warehouse.getMaxResources().keySet()) {
if (ibID == 7)
continue;
ItemBase ib = ItemBase.getItemBase(ibID);
short weight = ib.getWeight();
if (!pc.getCharItemManager().hasRoomInventory(weight)) {
throwbackError(pc, "Not enough room in inventory for any more of this item");
pc.getCharItemManager().updateInventory();
return;
}
boolean worked = false;
Item item = new Item(ib, pc.getObjectUUID(),
OwnerType.PlayerCharacter, (byte) 0, (byte) 0, (short) ib.getDurability(), (short) ib.getDurability(),
true, false, ItemContainerType.INVENTORY, (byte) 0,
new ArrayList<>(), "");
item.setNumOfItems(Warehouse.getMaxResources().get(ibID));
try {
item = DbManager.ItemQueries.ADD_ITEM(item);
worked = true;
} catch (Exception e) {
throwbackError(pc, "DB error 1: Unable to create item. " + e.getMessage());
return;
}
if (item == null || !worked) {
throwbackError(pc, "DB error 2: Unable to create item.");
return;
}
//add item to inventory
pc.getCharItemManager().addItemToInventory(item);
}
return;
}
if (words.length < 3 || words.length > 5) {
this.sendUsage(pc);
return;
@@ -103,16 +58,23 @@ public class MakeItemCmd extends AbstractDevCmd {
numItems = (numItems > 5000) ? 5000 : numItems;
}
int itembaseID;
int templateID;
ItemTemplate template;
try {
itembaseID = Integer.parseInt(words[0]);
} catch (NumberFormatException e) {
itembaseID = ItemBase.getIDByName(words[0].toLowerCase());
if (itembaseID == 0) {
templateID = Integer.parseInt(words[0]);
template = ItemTemplate.templates.get(words[0].toLowerCase());
if (template == null) {
throwbackError(pc, "Supplied type " + words[0]
+ " failed to parse to an Integer");
return;
}
if (template.item_type == ItemType.GOLD) {
this.throwbackInfo(pc, "use /addgold to add gold.");
return;
}
} catch (Exception e) {
throwbackError(pc,
"An unknown exception occurred when trying to use createitem command for type "
@@ -120,10 +82,6 @@ public class MakeItemCmd extends AbstractDevCmd {
return; // NaN
}
if (itembaseID == 7) {
this.throwbackInfo(pc, "use /addgold to add gold.");
return;
}
String prefix = "";
String suffix = "";
@@ -174,57 +132,54 @@ public class MakeItemCmd extends AbstractDevCmd {
return;
}
}
ItemBase ib = ItemBase.getItemBase(itembaseID);
if (ib == null) {
throwbackError(pc, "Unable to find itembase of ID " + itembaseID);
template = ItemTemplate.templates.get(templateID);
if (template == null) {
throwbackError(pc, "Unable to find template " + templateID);
return;
}
if ((numItems > 1)
&& (ib.getType().equals(ItemType.RESOURCE) == false)
&& (ib.getType().equals(ItemType.OFFERING)) == false)
&& (template.item_type.equals(ItemType.RESOURCE) == false)
&& (template.item_type.equals(ItemType.OFFERING)) == false)
numItems = 1;
CharacterItemManager cim = pc.getCharItemManager();
CharacterItemManager cim = pc.charItemManager;
if (cim == null) {
throwbackError(pc, "Unable to find the character item manager for player " + pc.getFirstName() + '.');
return;
}
byte charges = (byte) ib.getNumCharges();
short dur = (short) ib.getDurability();
String result = "";
for (int i = 0; i < quantity; i++) {
short weight = ib.getWeight();
int weight = template.item_wt;
if (!cim.hasRoomInventory(weight)) {
throwbackError(pc, "Not enough room in inventory for any more of this item. " + i + " produced.");
if (i > 0)
cim.updateInventory();
return;
}
boolean worked = false;
Item item = new Item(ib, pc.getObjectUUID(),
OwnerType.PlayerCharacter, charges, charges, dur, dur,
true, false, ItemContainerType.INVENTORY, (byte) 0,
new ArrayList<>(), "");
Item item = new Item(templateID);
item.ownerID = pc.getObjectUUID();
item.ownerType = OwnerType.PlayerCharacter;
if (numItems > 1)
item.setNumOfItems(numItems);
try {
item = DbManager.ItemQueries.ADD_ITEM(item);
worked = true;
item = DbManager.ItemQueries.PERSIST(item);
} catch (Exception e) {
throwbackError(pc, "DB error 1: Unable to create item. " + e.getMessage());
return;
}
if (item == null || !worked) {
throwbackError(pc, "DB error 2: Unable to create item.");
return;
}
//create prefix
if (!prefix.isEmpty())
item.addPermanentEnchantmentForDev(prefix, 0);
@@ -243,12 +198,12 @@ public class MakeItemCmd extends AbstractDevCmd {
@Override
protected String _getHelpString() {
return "Creates an item of type 'itembaseID' with a prefix and suffix";
return "Creates an item of type templateID with a prefix and suffix";
}
@Override
protected String _getUsageString() {
return "'./makeitem itembaseID PrefixID SuffixID [quantity] [numResources]'";
return "'./makeitem templateID PrefixID SuffixID [quantity] [numResources]'";
}
}
+6 -2
View File
@@ -47,13 +47,17 @@ public class PrintBankCmd extends AbstractDevCmd {
}
CharacterItemManager cim = ((AbstractCharacter) tar).getCharItemManager();
CharacterItemManager cim = ((AbstractCharacter) tar).charItemManager;
ArrayList<Item> list = cim.getBank();
throwbackInfo(pc, "Bank for " + type + ' ' + name + " (" + tar.getObjectUUID() + ')');
for (Item item : list) {
throwbackInfo(pc, " " + item.getItemBase().getName() + ", count: " + item.getNumOfItems());
ItemTemplate template = ItemTemplate.templates.get(item.templateID);
throwbackInfo(pc, " " + template.item_base_name + ", count: " + item.getNumOfItems());
}
Item gold = cim.getGoldBank();
if (gold != null)
throwbackInfo(pc, " Gold, count: " + gold.getNumOfItems());
else
+3 -2
View File
@@ -9,9 +9,9 @@
package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.ChatManager;
import engine.mbEnums.GameObjectType;
import engine.objects.*;
import engine.powers.effectmodifiers.AbstractEffectModifier;
@@ -33,7 +33,8 @@ public class PrintBonusesCmd extends AbstractDevCmd {
if (target instanceof Item) {
type = "Item";
tar = (Item) target;
name = ((Item) tar).getItemBase().getName();
ItemTemplate template = ItemTemplate.templates.get(((Item) tar).templateID);
name = template.item_base_name;
} else if (target instanceof AbstractCharacter) {
tar = (AbstractCharacter) target;
name = ((AbstractCharacter) tar).getFirstName();
@@ -9,46 +9,49 @@
package engine.devcmd.cmds;
import engine.Enum;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.DbManager;
import engine.objects.AbstractCharacter;
import engine.objects.AbstractGameObject;
import engine.objects.PlayerCharacter;
/**
*
*/
public class DecachePlayerCmd extends AbstractDevCmd {
public DecachePlayerCmd() {
super("decacheplayer");
public class PrintEffectsCmd extends AbstractDevCmd {
public PrintEffectsCmd() {
super("printeffects");
// super("printstats", MBServerStatics.ACCESS_LEVEL_ADMIN);
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
AbstractGameObject target) {
if (words.length < 1) {
this.sendUsage(pc);
}
int objectUUID = Integer.parseInt(words[0]);
AbstractCharacter tar;
if (DbManager.inCache(Enum.GameObjectType.PlayerCharacter, objectUUID)) {
this.setTarget(PlayerCharacter.getFromCache(objectUUID)); //for logging
PlayerCharacter.getFromCache(objectUUID).removeFromCache();
} else {
this.sendHelp(pc);
if (target != null && target instanceof AbstractCharacter) {
tar = (AbstractCharacter) target;
String newline = "\r\n ";
String output = "Effects For Character: " + tar.getName() + newline;
for (String effect : tar.effects.keySet()) {
output += effect + newline;
}
throwbackInfo(pc, output);
}
}
@Override
protected String _getHelpString() {
return "No player found. Please make sure the table ID is correct.";
return "Returns the player's current stats";
}
@Override
protected String _getUsageString() {
return "' /decacheplayer <UUID>'";
return "' /printstats'";
}
}
+13 -11
View File
@@ -9,8 +9,9 @@
package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.mbEnums;
import engine.mbEnums.GameObjectType;
import engine.objects.*;
import java.util.concurrent.ConcurrentHashMap;
@@ -63,9 +64,9 @@ public class PrintEquipCmd extends AbstractDevCmd {
if (tar.getObjectType() == GameObjectType.Mob) {
Mob tarMob = (Mob) tar;
throwbackInfo(pc, "Equip for " + type + ' ' + name + " (" + tar.getObjectUUID() + ')');
for (int slot : tarMob.getEquip().keySet()) {
MobEquipment equip = tarMob.getEquip().get(slot);
throwbackInfo(pc, equip.getItemBase().getUUID() + " : " + equip.getItemBase().getName() + ", slot: " + slot);
for (mbEnums.EquipSlotType slot : tarMob.charItemManager.equipped.keySet()) {
Item equip = tarMob.charItemManager.equipped.get(slot);
throwbackInfo(pc, equip.templateID + " : " + equip.template.item_base_name + ", slot: " + slot);
}
return;
}
@@ -73,19 +74,20 @@ public class PrintEquipCmd extends AbstractDevCmd {
if (tar.getObjectType() == GameObjectType.NPC) {
NPC tarMob = (NPC) tar;
throwbackInfo(pc, "Equip for " + type + ' ' + name + " (" + tar.getObjectUUID() + ')');
for (int slot : tarMob.getEquip().keySet()) {
MobEquipment equip = tarMob.getEquip().get(slot);
throwbackInfo(pc, equip.getItemBase().getUUID() + " : " + equip.getItemBase().getName() + ", slot: " + slot);
for (mbEnums.EquipSlotType slot : tarMob.charItemManager.equipped.keySet()) {
Item equip = tarMob.charItemManager.equipped.get(slot);
throwbackInfo(pc, equip.templateID + " : " + equip.template.item_base_name + ", slot: " + slot);
}
return;
}
CharacterItemManager cim = ((AbstractCharacter) tar).getCharItemManager();
ConcurrentHashMap<Integer, Item> list = cim.getEquipped();
CharacterItemManager cim = ((AbstractCharacter) tar).charItemManager;
ConcurrentHashMap<mbEnums.EquipSlotType, Item> list = cim.getEquipped();
throwbackInfo(pc, "Equip for " + type + ' ' + name + " (" + tar.getObjectUUID() + ')');
for (Integer slot : list.keySet()) {
for (mbEnums.EquipSlotType slot : list.keySet()) {
Item item = list.get(slot);
throwbackInfo(pc, " " + item.getItemBase().getName() + ", slot: " + slot);
throwbackInfo(pc, " " + item.template.item_base_name + ", slot: " + slot);
}
}
+10 -6
View File
@@ -9,8 +9,8 @@
package engine.devcmd.cmds;
import engine.Enum.ItemType;
import engine.devcmd.AbstractDevCmd;
import engine.mbEnums.ItemType;
import engine.objects.*;
import java.text.DecimalFormat;
@@ -60,7 +60,7 @@ public class PrintInventoryCmd extends AbstractDevCmd {
}
}
CharacterItemManager cim = tar.getCharItemManager();
CharacterItemManager cim = tar.charItemManager;
inventory = cim.getInventory(); //this list can contain gold when tar is a PC that is dead
gold = cim.getGoldInventory();
throwbackInfo(pc, " Weight : " + (cim.getInventoryWeight() + cim.getEquipWeight()));
@@ -75,14 +75,18 @@ public class PrintInventoryCmd extends AbstractDevCmd {
int goldCount = 0;
for (Item item : inventory) {
if (item.getItemBase().getType().equals(ItemType.GOLD) == false) {
ItemTemplate template = ItemTemplate.templates.get(item.templateID);
if (item.template.item_type.equals(ItemType.GOLD) == false) {
String chargeInfo = "";
byte chargeMax = item.getChargesMax();
int chargeMax = template.item_initial_charges;
if (chargeMax > 0) {
byte charges = item.getChargesRemaining();
int charges = item.chargesRemaining;
chargeInfo = " charges: " + charges + '/' + chargeMax;
}
throwbackInfo(pc, " " + item.getItemBase().getName() + ", count: " + item.getNumOfItems() + chargeInfo);
throwbackInfo(pc, " " + template.item_base_name + ", count: " + item.getNumOfItems() + chargeInfo);
} else
goldCount += item.getNumOfItems();
}
@@ -10,48 +10,49 @@
package engine.devcmd.cmds;
import engine.devcmd.AbstractDevCmd;
import engine.gameManager.ChatManager;
import engine.objects.AbstractCharacter;
import engine.objects.AbstractGameObject;
import engine.objects.CharacterRune;
import engine.objects.PlayerCharacter;
public class DebugMeleeSyncCmd extends AbstractDevCmd {
/**
*
*/
public DebugMeleeSyncCmd() {
super("debugmeleesync");
public class PrintRunesCmd extends AbstractDevCmd {
public PrintRunesCmd() {
super("printrunes");
// super("printstats", MBServerStatics.ACCESS_LEVEL_ADMIN);
}
@Override
protected void _doCmd(PlayerCharacter pc, String[] words,
AbstractGameObject target) {
// Arg Count Check
if (words.length != 1) {
this.sendUsage(pc);
return;
}
String s = words[0].toLowerCase();
AbstractCharacter tar;
if (s.equals("on")) {
pc.setDebug(64, true);
ChatManager.chatSayInfo(pc, "Melee Sync Debug ON");
} else if (s.equals("off")) {
pc.setDebug(64, false);
ChatManager.chatSayInfo(pc, "Melee Sync Debug OFF");
} else {
this.sendUsage(pc);
if (target != null && target instanceof AbstractCharacter) {
tar = (AbstractCharacter) target;
String newline = "\r\n ";
String output = "Applied Runes For Character: " + ((AbstractCharacter) target).getName() + newline;
for (CharacterRune rune : ((AbstractCharacter) target).runes) {
output += rune.getRuneBaseID() + " " + rune.getRuneBase().getName() + newline;
}
throwbackInfo(pc, output);
}
}
@Override
protected String _getHelpString() {
return "Turns on/off melee sync debugging.";
return "Returns the player's current stats";
}
@Override
protected String _getUsageString() {
return "'./debugmeleesync on|off'";
return "' /printstats'";
}
}
+1 -1
View File
@@ -9,8 +9,8 @@
package engine.devcmd.cmds;
import engine.Enum.GameObjectType;
import engine.devcmd.AbstractDevCmd;
import engine.mbEnums.GameObjectType;
import engine.objects.*;
import java.util.concurrent.ConcurrentHashMap;

Some files were not shown because too many files have changed in this diff Show More